docxmlater 10.4.0 → 11.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 -3
- package/dist/constants/legacyCompatFlags.d.ts +1 -1
- package/dist/constants/legacyCompatFlags.d.ts.map +1 -1
- package/dist/constants/legacyCompatFlags.js.map +1 -1
- package/dist/core/Document.d.ts +75 -67
- package/dist/core/Document.d.ts.map +1 -1
- package/dist/core/Document.js +618 -414
- package/dist/core/Document.js.map +1 -1
- package/dist/core/DocumentContent.d.ts +11 -10
- package/dist/core/DocumentContent.d.ts.map +1 -1
- package/dist/core/DocumentContent.js +19 -19
- package/dist/core/DocumentContent.js.map +1 -1
- package/dist/core/DocumentEvents.d.ts +39 -0
- package/dist/core/DocumentEvents.d.ts.map +1 -0
- package/dist/core/DocumentEvents.js +51 -0
- package/dist/core/DocumentEvents.js.map +1 -0
- package/dist/core/DocumentGenerator.d.ts +11 -11
- package/dist/core/DocumentGenerator.d.ts.map +1 -1
- package/dist/core/DocumentGenerator.js +72 -52
- package/dist/core/DocumentGenerator.js.map +1 -1
- package/dist/core/DocumentParser.d.ts +15 -15
- package/dist/core/DocumentParser.d.ts.map +1 -1
- package/dist/core/DocumentParser.js +2100 -1076
- package/dist/core/DocumentParser.js.map +1 -1
- package/dist/core/DocumentValidator.d.ts +3 -3
- package/dist/core/DocumentValidator.d.ts.map +1 -1
- package/dist/core/DocumentValidator.js +31 -31
- package/dist/core/DocumentValidator.js.map +1 -1
- package/dist/core/ElementRegistry.d.ts +22 -0
- package/dist/core/ElementRegistry.d.ts.map +1 -0
- package/dist/core/ElementRegistry.js +27 -0
- package/dist/core/ElementRegistry.js.map +1 -0
- package/dist/core/Relationship.js +4 -4
- package/dist/core/Relationship.js.map +1 -1
- package/dist/core/RelationshipManager.d.ts +1 -1
- package/dist/core/RelationshipManager.d.ts.map +1 -1
- package/dist/core/RelationshipManager.js +32 -32
- package/dist/core/RelationshipManager.js.map +1 -1
- package/dist/elements/AlternateContent.d.ts +1 -1
- package/dist/elements/AlternateContent.d.ts.map +1 -1
- package/dist/elements/AlternateContent.js.map +1 -1
- package/dist/elements/Bookmark.d.ts +6 -1
- package/dist/elements/Bookmark.d.ts.map +1 -1
- package/dist/elements/Bookmark.js +19 -3
- package/dist/elements/Bookmark.js.map +1 -1
- package/dist/elements/BookmarkManager.d.ts +1 -1
- package/dist/elements/BookmarkManager.d.ts.map +1 -1
- package/dist/elements/BookmarkManager.js +7 -7
- package/dist/elements/BookmarkManager.js.map +1 -1
- package/dist/elements/Comment.d.ts +2 -2
- package/dist/elements/Comment.d.ts.map +1 -1
- package/dist/elements/Comment.js +4 -4
- package/dist/elements/Comment.js.map +1 -1
- package/dist/elements/CommentManager.d.ts +2 -2
- package/dist/elements/CommentManager.d.ts.map +1 -1
- package/dist/elements/CommentManager.js +9 -9
- package/dist/elements/CommentManager.js.map +1 -1
- package/dist/elements/CommonTypes.d.ts +9 -4
- package/dist/elements/CommonTypes.d.ts.map +1 -1
- package/dist/elements/CommonTypes.js +1 -0
- package/dist/elements/CommonTypes.js.map +1 -1
- package/dist/elements/CustomXml.d.ts +1 -1
- package/dist/elements/CustomXml.d.ts.map +1 -1
- package/dist/elements/CustomXml.js.map +1 -1
- package/dist/elements/Endnote.d.ts +2 -2
- package/dist/elements/Endnote.d.ts.map +1 -1
- package/dist/elements/Endnote.js +9 -9
- package/dist/elements/Endnote.js.map +1 -1
- package/dist/elements/EndnoteManager.d.ts +1 -1
- package/dist/elements/EndnoteManager.d.ts.map +1 -1
- package/dist/elements/EndnoteManager.js +11 -11
- package/dist/elements/EndnoteManager.js.map +1 -1
- package/dist/elements/Field.d.ts +9 -5
- package/dist/elements/Field.d.ts.map +1 -1
- package/dist/elements/Field.js +21 -9
- package/dist/elements/Field.js.map +1 -1
- package/dist/elements/FieldHelpers.d.ts +1 -1
- package/dist/elements/FieldHelpers.d.ts.map +1 -1
- package/dist/elements/FieldHelpers.js +10 -10
- package/dist/elements/FieldHelpers.js.map +1 -1
- package/dist/elements/Footer.d.ts +3 -3
- package/dist/elements/Footer.d.ts.map +1 -1
- package/dist/elements/Footer.js +5 -5
- package/dist/elements/Footer.js.map +1 -1
- package/dist/elements/Footnote.d.ts +2 -2
- package/dist/elements/Footnote.d.ts.map +1 -1
- package/dist/elements/Footnote.js +9 -9
- package/dist/elements/Footnote.js.map +1 -1
- package/dist/elements/FootnoteManager.d.ts +1 -1
- package/dist/elements/FootnoteManager.d.ts.map +1 -1
- package/dist/elements/FootnoteManager.js +11 -11
- package/dist/elements/FootnoteManager.js.map +1 -1
- package/dist/elements/Header.d.ts +3 -3
- package/dist/elements/Header.d.ts.map +1 -1
- package/dist/elements/Header.js +5 -5
- package/dist/elements/Header.js.map +1 -1
- package/dist/elements/HeaderFooterManager.d.ts +2 -2
- package/dist/elements/HeaderFooterManager.d.ts.map +1 -1
- package/dist/elements/HeaderFooterManager.js.map +1 -1
- package/dist/elements/Hyperlink.d.ts +5 -5
- package/dist/elements/Hyperlink.d.ts.map +1 -1
- package/dist/elements/Hyperlink.js +29 -29
- package/dist/elements/Hyperlink.js.map +1 -1
- package/dist/elements/Image.d.ts +1 -1
- package/dist/elements/Image.d.ts.map +1 -1
- package/dist/elements/Image.js +67 -67
- package/dist/elements/Image.js.map +1 -1
- package/dist/elements/ImageManager.d.ts +1 -1
- package/dist/elements/ImageManager.d.ts.map +1 -1
- package/dist/elements/ImageManager.js +4 -4
- package/dist/elements/ImageManager.js.map +1 -1
- package/dist/elements/ImageRun.d.ts +3 -3
- package/dist/elements/ImageRun.d.ts.map +1 -1
- package/dist/elements/ImageRun.js +2 -2
- package/dist/elements/ImageRun.js.map +1 -1
- package/dist/elements/MathElement.d.ts +1 -1
- package/dist/elements/MathElement.d.ts.map +1 -1
- package/dist/elements/MathElement.js.map +1 -1
- package/dist/elements/Paragraph.d.ts +34 -19
- package/dist/elements/Paragraph.d.ts.map +1 -1
- package/dist/elements/Paragraph.js +286 -231
- package/dist/elements/Paragraph.js.map +1 -1
- package/dist/elements/PreservedElement.d.ts +1 -1
- package/dist/elements/PreservedElement.d.ts.map +1 -1
- package/dist/elements/PreservedElement.js.map +1 -1
- package/dist/elements/PropertyChangeTypes.d.ts +2 -2
- package/dist/elements/PropertyChangeTypes.d.ts.map +1 -1
- package/dist/elements/PropertyChangeTypes.js.map +1 -1
- package/dist/elements/RangeMarker.d.ts +14 -1
- package/dist/elements/RangeMarker.d.ts.map +1 -1
- package/dist/elements/RangeMarker.js +46 -8
- package/dist/elements/RangeMarker.js.map +1 -1
- package/dist/elements/RegisteredBodyElement.d.ts +15 -0
- package/dist/elements/RegisteredBodyElement.d.ts.map +1 -0
- package/dist/elements/RegisteredBodyElement.js +44 -0
- package/dist/elements/RegisteredBodyElement.js.map +1 -0
- package/dist/elements/Revision.d.ts +8 -8
- package/dist/elements/Revision.d.ts.map +1 -1
- package/dist/elements/Revision.js +12 -12
- package/dist/elements/Revision.js.map +1 -1
- package/dist/elements/RevisionContent.d.ts +3 -3
- package/dist/elements/RevisionContent.d.ts.map +1 -1
- package/dist/elements/RevisionContent.js.map +1 -1
- package/dist/elements/RevisionManager.d.ts +2 -2
- package/dist/elements/RevisionManager.d.ts.map +1 -1
- package/dist/elements/RevisionManager.js +2 -2
- package/dist/elements/RevisionManager.js.map +1 -1
- package/dist/elements/Run.d.ts +16 -10
- package/dist/elements/Run.d.ts.map +1 -1
- package/dist/elements/Run.js +199 -173
- package/dist/elements/Run.js.map +1 -1
- package/dist/elements/Section.d.ts +4 -2
- package/dist/elements/Section.d.ts.map +1 -1
- package/dist/elements/Section.js +152 -145
- package/dist/elements/Section.js.map +1 -1
- package/dist/elements/Shape.d.ts +3 -3
- package/dist/elements/Shape.d.ts.map +1 -1
- package/dist/elements/Shape.js +12 -12
- package/dist/elements/Shape.js.map +1 -1
- package/dist/elements/StructuredDocumentTag.d.ts +3 -3
- package/dist/elements/StructuredDocumentTag.d.ts.map +1 -1
- package/dist/elements/StructuredDocumentTag.js +39 -39
- package/dist/elements/StructuredDocumentTag.js.map +1 -1
- package/dist/elements/Table.d.ts +16 -10
- package/dist/elements/Table.d.ts.map +1 -1
- package/dist/elements/Table.js +118 -89
- package/dist/elements/Table.js.map +1 -1
- package/dist/elements/TableCell.d.ts +11 -11
- package/dist/elements/TableCell.d.ts.map +1 -1
- package/dist/elements/TableCell.js +108 -78
- package/dist/elements/TableCell.js.map +1 -1
- package/dist/elements/TableGridChange.d.ts +1 -1
- package/dist/elements/TableGridChange.d.ts.map +1 -1
- package/dist/elements/TableGridChange.js +3 -3
- package/dist/elements/TableGridChange.js.map +1 -1
- package/dist/elements/TableOfContents.d.ts +1 -1
- package/dist/elements/TableOfContents.d.ts.map +1 -1
- package/dist/elements/TableOfContents.js +2 -2
- package/dist/elements/TableOfContents.js.map +1 -1
- package/dist/elements/TableOfContentsElement.d.ts +2 -2
- package/dist/elements/TableOfContentsElement.d.ts.map +1 -1
- package/dist/elements/TableOfContentsElement.js +5 -5
- package/dist/elements/TableOfContentsElement.js.map +1 -1
- package/dist/elements/TableRow.d.ts +18 -7
- package/dist/elements/TableRow.d.ts.map +1 -1
- package/dist/elements/TableRow.js +127 -74
- package/dist/elements/TableRow.js.map +1 -1
- package/dist/elements/TextBox.d.ts +4 -4
- package/dist/elements/TextBox.d.ts.map +1 -1
- package/dist/elements/TextBox.js +6 -6
- package/dist/elements/TextBox.js.map +1 -1
- package/dist/esm/constants/legacyCompatFlags.js +97 -0
- package/dist/esm/constants/legacyCompatFlags.js.map +1 -0
- package/dist/esm/constants/limits.js +36 -0
- package/dist/esm/constants/limits.js.map +1 -0
- package/dist/esm/core/Document.js +8498 -0
- package/dist/esm/core/Document.js.map +1 -0
- package/dist/esm/core/DocumentContent.js +190 -0
- package/dist/esm/core/DocumentContent.js.map +1 -0
- package/dist/esm/core/DocumentEvents.js +47 -0
- package/dist/esm/core/DocumentEvents.js.map +1 -0
- package/dist/esm/core/DocumentGenerator.js +764 -0
- package/dist/esm/core/DocumentGenerator.js.map +1 -0
- package/dist/esm/core/DocumentIdManager.js +67 -0
- package/dist/esm/core/DocumentIdManager.js.map +1 -0
- package/dist/esm/core/DocumentParser.js +8760 -0
- package/dist/esm/core/DocumentParser.js.map +1 -0
- package/dist/esm/core/DocumentValidator.js +222 -0
- package/dist/esm/core/DocumentValidator.js.map +1 -0
- package/dist/esm/core/ElementRegistry.js +24 -0
- package/dist/esm/core/ElementRegistry.js.map +1 -0
- package/dist/esm/core/Relationship.js +177 -0
- package/dist/esm/core/Relationship.js.map +1 -0
- package/dist/esm/core/RelationshipManager.js +202 -0
- package/dist/esm/core/RelationshipManager.js.map +1 -0
- package/dist/esm/elements/AlternateContent.js +19 -0
- package/dist/esm/elements/AlternateContent.js.map +1 -0
- package/dist/esm/elements/Bookmark.js +115 -0
- package/dist/esm/elements/Bookmark.js.map +1 -0
- package/dist/esm/elements/BookmarkManager.js +99 -0
- package/dist/esm/elements/BookmarkManager.js.map +1 -0
- package/dist/esm/elements/Comment.js +181 -0
- package/dist/esm/elements/Comment.js.map +1 -0
- package/dist/esm/elements/CommentManager.js +233 -0
- package/dist/esm/elements/CommentManager.js.map +1 -0
- package/dist/esm/elements/CommonTypes.js +106 -0
- package/dist/esm/elements/CommonTypes.js.map +1 -0
- package/dist/esm/elements/CustomXml.js +19 -0
- package/dist/esm/elements/CustomXml.js.map +1 -0
- package/dist/esm/elements/Endnote.js +107 -0
- package/dist/esm/elements/Endnote.js.map +1 -0
- package/dist/esm/elements/EndnoteManager.js +119 -0
- package/dist/esm/elements/EndnoteManager.js.map +1 -0
- package/dist/esm/elements/Field.js +856 -0
- package/dist/esm/elements/Field.js.map +1 -0
- package/dist/esm/elements/FieldHelpers.js +134 -0
- package/dist/esm/elements/FieldHelpers.js.map +1 -0
- package/dist/esm/elements/FontManager.js +158 -0
- package/dist/esm/elements/FontManager.js.map +1 -0
- package/dist/esm/elements/Footer.js +141 -0
- package/dist/esm/elements/Footer.js.map +1 -0
- package/dist/esm/elements/Footnote.js +107 -0
- package/dist/esm/elements/Footnote.js.map +1 -0
- package/dist/esm/elements/FootnoteManager.js +119 -0
- package/dist/esm/elements/FootnoteManager.js.map +1 -0
- package/dist/esm/elements/Header.js +141 -0
- package/dist/esm/elements/Header.js.map +1 -0
- package/dist/esm/elements/HeaderFooterManager.js +87 -0
- package/dist/esm/elements/HeaderFooterManager.js.map +1 -0
- package/dist/esm/elements/Hyperlink.js +586 -0
- package/dist/esm/elements/Hyperlink.js.map +1 -0
- package/dist/esm/elements/Image.js +1288 -0
- package/dist/esm/elements/Image.js.map +1 -0
- package/dist/esm/elements/ImageManager.js +223 -0
- package/dist/esm/elements/ImageManager.js.map +1 -0
- package/dist/esm/elements/ImageRun.js +29 -0
- package/dist/esm/elements/ImageRun.js.map +1 -0
- package/dist/esm/elements/MathElement.js +37 -0
- package/dist/esm/elements/MathElement.js.map +1 -0
- package/dist/esm/elements/Paragraph.js +2308 -0
- package/dist/esm/elements/Paragraph.js.map +1 -0
- package/dist/esm/elements/PreservedElement.js +29 -0
- package/dist/esm/elements/PreservedElement.js.map +1 -0
- package/dist/esm/elements/PropertyChangeTypes.js +53 -0
- package/dist/esm/elements/PropertyChangeTypes.js.map +1 -0
- package/dist/esm/elements/RangeMarker.js +219 -0
- package/dist/esm/elements/RangeMarker.js.map +1 -0
- package/dist/esm/elements/RegisteredBodyElement.js +40 -0
- package/dist/esm/elements/RegisteredBodyElement.js.map +1 -0
- package/dist/esm/elements/Revision.js +498 -0
- package/dist/esm/elements/Revision.js.map +1 -0
- package/dist/esm/elements/RevisionContent.js +18 -0
- package/dist/esm/elements/RevisionContent.js.map +1 -0
- package/dist/esm/elements/RevisionManager.js +486 -0
- package/dist/esm/elements/RevisionManager.js.map +1 -0
- package/dist/esm/elements/Run.js +1465 -0
- package/dist/esm/elements/Run.js.map +1 -0
- package/dist/esm/elements/Section.js +978 -0
- package/dist/esm/elements/Section.js.map +1 -0
- package/dist/esm/elements/Shape.js +493 -0
- package/dist/esm/elements/Shape.js.map +1 -0
- package/dist/esm/elements/StructuredDocumentTag.js +471 -0
- package/dist/esm/elements/StructuredDocumentTag.js.map +1 -0
- package/dist/esm/elements/Table.js +1456 -0
- package/dist/esm/elements/Table.js.map +1 -0
- package/dist/esm/elements/TableCell.js +835 -0
- package/dist/esm/elements/TableCell.js.map +1 -0
- package/dist/esm/elements/TableGridChange.js +52 -0
- package/dist/esm/elements/TableGridChange.js.map +1 -0
- package/dist/esm/elements/TableOfContents.js +389 -0
- package/dist/esm/elements/TableOfContents.js.map +1 -0
- package/dist/esm/elements/TableOfContentsElement.js +29 -0
- package/dist/esm/elements/TableOfContentsElement.js.map +1 -0
- package/dist/esm/elements/TableRow.js +555 -0
- package/dist/esm/elements/TableRow.js.map +1 -0
- package/dist/esm/elements/TextBox.js +459 -0
- package/dist/esm/elements/TextBox.js.map +1 -0
- package/dist/esm/formatting/AbstractNumbering.js +325 -0
- package/dist/esm/formatting/AbstractNumbering.js.map +1 -0
- package/dist/esm/formatting/NumberingInstance.js +150 -0
- package/dist/esm/formatting/NumberingInstance.js.map +1 -0
- package/dist/esm/formatting/NumberingLevel.js +608 -0
- package/dist/esm/formatting/NumberingLevel.js.map +1 -0
- package/dist/esm/formatting/NumberingManager.js +423 -0
- package/dist/esm/formatting/NumberingManager.js.map +1 -0
- package/dist/esm/formatting/Style.js +1151 -0
- package/dist/esm/formatting/Style.js.map +1 -0
- package/dist/esm/formatting/StylesManager.js +557 -0
- package/dist/esm/formatting/StylesManager.js.map +1 -0
- package/dist/esm/helpers/CleanupHelper.js +350 -0
- package/dist/esm/helpers/CleanupHelper.js.map +1 -0
- package/dist/esm/images/ImageOptimizer.js +161 -0
- package/dist/esm/images/ImageOptimizer.js.map +1 -0
- package/dist/esm/index.js +75 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/internal.js +16 -0
- package/dist/esm/internal.js.map +1 -0
- package/dist/esm/managers/DrawingManager.js +163 -0
- package/dist/esm/managers/DrawingManager.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/processors/ChangelogGenerator.js +970 -0
- package/dist/esm/processors/ChangelogGenerator.js.map +1 -0
- package/dist/esm/processors/CompatibilityUpgrader.js +130 -0
- package/dist/esm/processors/CompatibilityUpgrader.js.map +1 -0
- package/dist/esm/processors/InMemoryRevisionAcceptor.js +530 -0
- package/dist/esm/processors/InMemoryRevisionAcceptor.js.map +1 -0
- package/dist/esm/processors/MoveOperationHelper.js +57 -0
- package/dist/esm/processors/MoveOperationHelper.js.map +1 -0
- package/dist/esm/processors/RevisionAwareProcessor.js +232 -0
- package/dist/esm/processors/RevisionAwareProcessor.js.map +1 -0
- package/dist/esm/processors/RevisionWalker.js +278 -0
- package/dist/esm/processors/RevisionWalker.js.map +1 -0
- package/dist/{utils → esm/processors}/SelectiveRevisionAcceptor.js +81 -42
- package/dist/esm/processors/SelectiveRevisionAcceptor.js.map +1 -0
- package/dist/esm/processors/ShadingResolver.js +66 -0
- package/dist/esm/processors/ShadingResolver.js.map +1 -0
- package/dist/esm/processors/acceptRevisions.js +416 -0
- package/dist/esm/processors/acceptRevisions.js.map +1 -0
- package/dist/esm/processors/cnfStyleDecoder.js +89 -0
- package/dist/esm/processors/cnfStyleDecoder.js.map +1 -0
- package/dist/esm/processors/stripTrackedChanges.js +201 -0
- package/dist/esm/processors/stripTrackedChanges.js.map +1 -0
- package/dist/esm/tracking/DocumentTrackingContext.js +531 -0
- package/dist/esm/tracking/DocumentTrackingContext.js.map +1 -0
- package/dist/esm/tracking/TrackingContext.js +2 -0
- package/dist/esm/tracking/TrackingContext.js.map +1 -0
- package/dist/esm/types/compatibility-types.js +8 -0
- package/dist/esm/types/compatibility-types.js.map +1 -0
- package/dist/esm/types/document-types.js +2 -0
- package/dist/esm/types/document-types.js.map +1 -0
- package/dist/esm/types/formatting.js +2 -0
- package/dist/esm/types/formatting.js.map +1 -0
- package/dist/esm/types/list-types.js +2 -0
- package/dist/esm/types/list-types.js.map +1 -0
- package/dist/esm/types/settings-types.js +2 -0
- package/dist/esm/types/settings-types.js.map +1 -0
- package/dist/esm/types/styleConfig.js +2 -0
- package/dist/esm/types/styleConfig.js.map +1 -0
- package/dist/esm/utils/KeyedRegistry.js +32 -0
- package/dist/esm/utils/KeyedRegistry.js.map +1 -0
- package/dist/esm/utils/corruptionDetection.js +155 -0
- package/dist/esm/utils/corruptionDetection.js.map +1 -0
- package/dist/esm/utils/dateFormatting.js +4 -0
- package/dist/esm/utils/dateFormatting.js.map +1 -0
- package/dist/esm/utils/deepClone.js +40 -0
- package/dist/esm/utils/deepClone.js.map +1 -0
- package/dist/esm/utils/deepEqual.js +47 -0
- package/dist/esm/utils/deepEqual.js.map +1 -0
- package/dist/esm/utils/diagnostics.js +69 -0
- package/dist/esm/utils/diagnostics.js.map +1 -0
- package/dist/esm/utils/errorHandling.js +36 -0
- package/dist/esm/utils/errorHandling.js.map +1 -0
- package/dist/esm/utils/formatting.js +93 -0
- package/dist/esm/utils/formatting.js.map +1 -0
- package/dist/esm/utils/list-detection.js +148 -0
- package/dist/esm/utils/list-detection.js.map +1 -0
- package/dist/esm/utils/logger.js +205 -0
- package/dist/esm/utils/logger.js.map +1 -0
- package/dist/esm/utils/parsingHelpers.js +56 -0
- package/dist/esm/utils/parsingHelpers.js.map +1 -0
- package/dist/esm/utils/textDiff.js +42 -0
- package/dist/esm/utils/textDiff.js.map +1 -0
- package/dist/esm/utils/units.js +152 -0
- package/dist/esm/utils/units.js.map +1 -0
- package/dist/esm/utils/validation.js +285 -0
- package/dist/esm/utils/validation.js.map +1 -0
- package/dist/esm/utils/xmlSanitization.js +54 -0
- package/dist/esm/utils/xmlSanitization.js.map +1 -0
- package/dist/esm/validation/RevisionAutoFixer.js +340 -0
- package/dist/esm/validation/RevisionAutoFixer.js.map +1 -0
- package/dist/esm/validation/RevisionValidator.js +240 -0
- package/dist/esm/validation/RevisionValidator.js.map +1 -0
- package/dist/esm/validation/ValidationRuleRegistry.js +40 -0
- package/dist/esm/validation/ValidationRuleRegistry.js.map +1 -0
- package/dist/esm/validation/ValidationRules.js +92 -0
- package/dist/esm/validation/ValidationRules.js.map +1 -0
- package/dist/esm/validation/index.js +4 -0
- package/dist/esm/validation/index.js.map +1 -0
- package/dist/esm/xml/XMLBuilder.js +434 -0
- package/dist/esm/xml/XMLBuilder.js.map +1 -0
- package/dist/esm/xml/XMLParser.js +486 -0
- package/dist/esm/xml/XMLParser.js.map +1 -0
- package/dist/esm/zip/ZipHandler.js +298 -0
- package/dist/esm/zip/ZipHandler.js.map +1 -0
- package/dist/esm/zip/ZipReader.js +147 -0
- package/dist/esm/zip/ZipReader.js.map +1 -0
- package/dist/esm/zip/ZipWriter.js +199 -0
- package/dist/esm/zip/ZipWriter.js.map +1 -0
- package/dist/esm/zip/errors.js +43 -0
- package/dist/esm/zip/errors.js.map +1 -0
- package/dist/esm/zip/types.js +31 -0
- package/dist/esm/zip/types.js.map +1 -0
- package/dist/formatting/AbstractNumbering.d.ts +2 -2
- package/dist/formatting/AbstractNumbering.d.ts.map +1 -1
- package/dist/formatting/AbstractNumbering.js +33 -33
- package/dist/formatting/AbstractNumbering.js.map +1 -1
- package/dist/formatting/NumberingInstance.d.ts +2 -2
- package/dist/formatting/NumberingInstance.d.ts.map +1 -1
- package/dist/formatting/NumberingInstance.js +7 -7
- package/dist/formatting/NumberingInstance.js.map +1 -1
- package/dist/formatting/NumberingLevel.d.ts +11 -2
- package/dist/formatting/NumberingLevel.d.ts.map +1 -1
- package/dist/formatting/NumberingLevel.js +111 -25
- package/dist/formatting/NumberingLevel.js.map +1 -1
- package/dist/formatting/NumberingManager.d.ts +4 -4
- package/dist/formatting/NumberingManager.d.ts.map +1 -1
- package/dist/formatting/NumberingManager.js +28 -28
- package/dist/formatting/NumberingManager.js.map +1 -1
- package/dist/formatting/Style.d.ts +14 -7
- package/dist/formatting/Style.d.ts.map +1 -1
- package/dist/formatting/Style.js +309 -112
- package/dist/formatting/Style.js.map +1 -1
- package/dist/formatting/StylesManager.d.ts +2 -2
- package/dist/formatting/StylesManager.d.ts.map +1 -1
- package/dist/formatting/StylesManager.js +52 -52
- package/dist/formatting/StylesManager.js.map +1 -1
- package/dist/helpers/CleanupHelper.d.ts +1 -1
- package/dist/helpers/CleanupHelper.d.ts.map +1 -1
- package/dist/helpers/CleanupHelper.js +15 -15
- package/dist/helpers/CleanupHelper.js.map +1 -1
- package/dist/index.d.ts +81 -90
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +286 -317
- package/dist/index.js.map +1 -1
- package/dist/internal.d.ts +16 -0
- package/dist/internal.d.ts.map +1 -0
- package/dist/internal.js +42 -0
- package/dist/internal.js.map +1 -0
- package/dist/managers/DrawingManager.d.ts +3 -3
- package/dist/managers/DrawingManager.d.ts.map +1 -1
- package/dist/managers/DrawingManager.js +12 -12
- package/dist/managers/DrawingManager.js.map +1 -1
- package/dist/{utils → processors}/ChangelogGenerator.d.ts +2 -2
- package/dist/processors/ChangelogGenerator.d.ts.map +1 -0
- package/dist/{utils → processors}/ChangelogGenerator.js +2 -2
- package/dist/processors/ChangelogGenerator.js.map +1 -0
- package/dist/processors/CompatibilityUpgrader.d.ts.map +1 -0
- package/dist/{utils → processors}/CompatibilityUpgrader.js +10 -10
- package/dist/processors/CompatibilityUpgrader.js.map +1 -0
- package/dist/{utils → processors}/InMemoryRevisionAcceptor.d.ts +3 -3
- package/dist/processors/InMemoryRevisionAcceptor.d.ts.map +1 -0
- package/dist/{utils → processors}/InMemoryRevisionAcceptor.js +84 -27
- package/dist/processors/InMemoryRevisionAcceptor.js.map +1 -0
- package/dist/{utils → processors}/MoveOperationHelper.d.ts +4 -4
- package/dist/processors/MoveOperationHelper.d.ts.map +1 -0
- package/dist/{utils → processors}/MoveOperationHelper.js +10 -10
- package/dist/processors/MoveOperationHelper.js.map +1 -0
- package/dist/{utils → processors}/RevisionAwareProcessor.d.ts +3 -3
- package/dist/processors/RevisionAwareProcessor.d.ts.map +1 -0
- package/dist/{utils → processors}/RevisionAwareProcessor.js +2 -2
- package/dist/processors/RevisionAwareProcessor.js.map +1 -0
- package/dist/{utils → processors}/RevisionWalker.d.ts +2 -1
- package/dist/processors/RevisionWalker.d.ts.map +1 -0
- package/dist/{utils → processors}/RevisionWalker.js +28 -0
- package/dist/processors/RevisionWalker.js.map +1 -0
- package/dist/{utils → processors}/SelectiveRevisionAcceptor.d.ts +4 -3
- package/dist/processors/SelectiveRevisionAcceptor.d.ts.map +1 -0
- package/dist/processors/SelectiveRevisionAcceptor.js +402 -0
- package/dist/processors/SelectiveRevisionAcceptor.js.map +1 -0
- package/dist/processors/ShadingResolver.d.ts +6 -0
- package/dist/processors/ShadingResolver.d.ts.map +1 -0
- package/dist/{utils → processors}/ShadingResolver.js +2 -2
- package/dist/processors/ShadingResolver.js.map +1 -0
- package/dist/{utils → processors}/acceptRevisions.d.ts +1 -1
- package/dist/processors/acceptRevisions.d.ts.map +1 -0
- package/dist/{utils → processors}/acceptRevisions.js +24 -4
- package/dist/processors/acceptRevisions.js.map +1 -0
- package/dist/{utils → processors}/cnfStyleDecoder.d.ts +1 -1
- package/dist/processors/cnfStyleDecoder.d.ts.map +1 -0
- package/dist/processors/cnfStyleDecoder.js.map +1 -0
- package/dist/processors/stripTrackedChanges.d.ts +3 -0
- package/dist/processors/stripTrackedChanges.d.ts.map +1 -0
- package/dist/{utils → processors}/stripTrackedChanges.js +16 -6
- package/dist/processors/stripTrackedChanges.js.map +1 -0
- package/dist/tracking/DocumentTrackingContext.d.ts +4 -4
- package/dist/tracking/DocumentTrackingContext.d.ts.map +1 -1
- package/dist/tracking/DocumentTrackingContext.js +38 -43
- package/dist/tracking/DocumentTrackingContext.js.map +1 -1
- package/dist/tracking/TrackingContext.d.ts +8 -8
- package/dist/tracking/TrackingContext.d.ts.map +1 -1
- package/dist/tracking/TrackingContext.js.map +1 -1
- package/dist/types/document-types.d.ts +28 -0
- package/dist/types/document-types.d.ts.map +1 -0
- package/dist/types/document-types.js +3 -0
- package/dist/types/document-types.js.map +1 -0
- package/dist/types/formatting.d.ts +4 -4
- package/dist/types/formatting.d.ts.map +1 -1
- package/dist/types/formatting.js.map +1 -1
- package/dist/types/settings-types.d.ts +6 -0
- package/dist/types/settings-types.d.ts.map +1 -1
- package/dist/types/settings-types.js.map +1 -1
- package/dist/utils/KeyedRegistry.d.ts +13 -0
- package/dist/utils/KeyedRegistry.d.ts.map +1 -0
- package/dist/utils/KeyedRegistry.js +36 -0
- package/dist/utils/KeyedRegistry.js.map +1 -0
- package/dist/utils/corruptionDetection.d.ts +1 -1
- package/dist/utils/corruptionDetection.d.ts.map +1 -1
- package/dist/utils/corruptionDetection.js +4 -4
- package/dist/utils/corruptionDetection.js.map +1 -1
- package/dist/utils/deepEqual.d.ts +2 -0
- package/dist/utils/deepEqual.d.ts.map +1 -0
- package/dist/utils/deepEqual.js +50 -0
- package/dist/utils/deepEqual.js.map +1 -0
- 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.map +1 -1
- package/dist/utils/parsingHelpers.d.ts +1 -1
- package/dist/utils/parsingHelpers.d.ts.map +1 -1
- package/dist/utils/parsingHelpers.js +2 -2
- package/dist/utils/parsingHelpers.js.map +1 -1
- package/dist/utils/validation.js +7 -7
- package/dist/utils/validation.js.map +1 -1
- package/dist/utils/xmlSanitization.js +2 -2
- package/dist/utils/xmlSanitization.js.map +1 -1
- package/dist/validation/RevisionAutoFixer.d.ts +4 -4
- package/dist/validation/RevisionAutoFixer.d.ts.map +1 -1
- package/dist/validation/RevisionAutoFixer.js +11 -11
- package/dist/validation/RevisionAutoFixer.js.map +1 -1
- package/dist/validation/RevisionValidator.d.ts +5 -4
- package/dist/validation/RevisionValidator.d.ts.map +1 -1
- package/dist/validation/RevisionValidator.js +29 -30
- package/dist/validation/RevisionValidator.js.map +1 -1
- package/dist/validation/ValidationRuleRegistry.d.ts +27 -0
- package/dist/validation/ValidationRuleRegistry.d.ts.map +1 -0
- package/dist/validation/ValidationRuleRegistry.js +43 -0
- package/dist/validation/ValidationRuleRegistry.js.map +1 -0
- package/dist/validation/index.d.ts +3 -3
- package/dist/validation/index.d.ts.map +1 -1
- package/dist/validation/index.js +10 -10
- package/dist/validation/index.js.map +1 -1
- package/dist/xml/XMLBuilder.d.ts +6 -1
- package/dist/xml/XMLBuilder.d.ts.map +1 -1
- package/dist/xml/XMLBuilder.js +11 -6
- package/dist/xml/XMLBuilder.js.map +1 -1
- package/dist/xml/XMLParser.js +6 -6
- package/dist/xml/XMLParser.js.map +1 -1
- package/dist/zip/ZipHandler.d.ts +1 -1
- package/dist/zip/ZipHandler.d.ts.map +1 -1
- package/dist/zip/ZipHandler.js +8 -8
- package/dist/zip/ZipHandler.js.map +1 -1
- package/dist/zip/ZipReader.d.ts +1 -1
- package/dist/zip/ZipReader.d.ts.map +1 -1
- package/dist/zip/ZipReader.js +14 -14
- package/dist/zip/ZipReader.js.map +1 -1
- package/dist/zip/ZipWriter.d.ts +1 -1
- package/dist/zip/ZipWriter.d.ts.map +1 -1
- package/dist/zip/ZipWriter.js +10 -10
- package/dist/zip/ZipWriter.js.map +1 -1
- package/package.json +20 -4
- package/src/constants/legacyCompatFlags.ts +1 -1
- package/src/core/Document.ts +478 -167
- package/src/core/DocumentContent.ts +14 -11
- package/src/core/DocumentEvents.ts +90 -0
- package/src/core/DocumentGenerator.ts +49 -22
- package/src/core/DocumentParser.ts +2235 -620
- package/src/core/DocumentValidator.ts +7 -7
- package/src/core/ElementRegistry.ts +69 -0
- package/src/core/Relationship.ts +1 -1
- package/src/core/RelationshipManager.ts +4 -4
- package/src/elements/AlternateContent.ts +1 -1
- package/src/elements/Bookmark.ts +52 -4
- package/src/elements/BookmarkManager.ts +2 -2
- package/src/elements/Comment.ts +3 -3
- package/src/elements/CommentManager.ts +4 -4
- package/src/elements/CommonTypes.ts +45 -7
- package/src/elements/CustomXml.ts +1 -1
- package/src/elements/Endnote.ts +2 -2
- package/src/elements/EndnoteManager.ts +3 -3
- package/src/elements/Field.ts +44 -10
- package/src/elements/FieldHelpers.ts +2 -2
- package/src/elements/Footer.ts +4 -4
- package/src/elements/Footnote.ts +2 -2
- package/src/elements/FootnoteManager.ts +3 -3
- package/src/elements/Header.ts +4 -4
- package/src/elements/HeaderFooterManager.ts +2 -2
- package/src/elements/Hyperlink.ts +16 -12
- package/src/elements/Image.ts +3 -3
- package/src/elements/ImageManager.ts +2 -2
- package/src/elements/ImageRun.ts +3 -3
- package/src/elements/MathElement.ts +1 -1
- package/src/elements/Paragraph.ts +221 -88
- package/src/elements/PreservedElement.ts +1 -1
- package/src/elements/PropertyChangeTypes.ts +2 -2
- package/src/elements/RangeMarker.ts +153 -12
- package/src/elements/RegisteredBodyElement.ts +52 -0
- package/src/elements/Revision.ts +14 -14
- package/src/elements/RevisionContent.ts +3 -3
- package/src/elements/RevisionManager.ts +3 -3
- package/src/elements/Run.ts +221 -94
- package/src/elements/Section.ts +136 -69
- package/src/elements/Shape.ts +4 -4
- package/src/elements/StructuredDocumentTag.ts +3 -3
- package/src/elements/Table.ts +91 -27
- package/src/elements/TableCell.ts +62 -34
- package/src/elements/TableGridChange.ts +1 -1
- package/src/elements/TableOfContents.ts +1 -1
- package/src/elements/TableOfContentsElement.ts +2 -2
- package/src/elements/TableRow.ts +192 -48
- package/src/elements/TextBox.ts +5 -5
- package/src/formatting/AbstractNumbering.ts +3 -3
- package/src/formatting/NumberingInstance.ts +2 -2
- package/src/formatting/NumberingLevel.ts +201 -10
- package/src/formatting/NumberingManager.ts +5 -5
- package/src/formatting/Style.ts +382 -86
- package/src/formatting/StylesManager.ts +4 -4
- package/src/helpers/CleanupHelper.ts +6 -6
- package/src/index.ts +118 -127
- package/src/internal.ts +79 -0
- package/src/managers/DrawingManager.ts +3 -3
- package/src/{utils → processors}/ChangelogGenerator.ts +3 -3
- package/src/{utils → processors}/CompatibilityUpgrader.ts +2 -2
- package/src/{utils → processors}/InMemoryRevisionAcceptor.ts +100 -12
- package/src/{utils → processors}/MoveOperationHelper.ts +5 -5
- package/src/{utils → processors}/RevisionAwareProcessor.ts +3 -3
- package/src/{utils → processors}/RevisionWalker.ts +42 -1
- package/src/{utils → processors}/SelectiveRevisionAcceptor.ts +98 -39
- package/src/{utils → processors}/ShadingResolver.ts +5 -5
- package/src/{utils → processors}/acceptRevisions.ts +77 -9
- package/src/{utils → processors}/cnfStyleDecoder.ts +1 -1
- package/src/{utils → processors}/stripTrackedChanges.ts +35 -10
- package/src/tracking/DocumentTrackingContext.ts +12 -14
- package/src/tracking/TrackingContext.ts +8 -8
- package/src/types/document-types.ts +53 -0
- package/src/types/formatting.ts +4 -4
- package/src/types/settings-types.ts +32 -0
- package/src/utils/KeyedRegistry.ts +41 -0
- package/src/utils/corruptionDetection.ts +2 -2
- package/src/utils/deepEqual.ts +58 -0
- package/src/utils/list-detection.ts +2 -2
- package/src/utils/parsingHelpers.ts +11 -3
- package/src/utils/validation.ts +3 -3
- package/src/utils/xmlSanitization.ts +1 -1
- package/src/validation/RevisionAutoFixer.ts +5 -5
- package/src/validation/RevisionValidator.ts +39 -28
- package/src/validation/ValidationRuleRegistry.ts +86 -0
- package/src/validation/index.ts +3 -3
- package/src/xml/XMLBuilder.ts +13 -3
- package/src/xml/XMLParser.ts +2 -2
- package/src/zip/ZipHandler.ts +4 -4
- package/src/zip/ZipReader.ts +3 -3
- package/src/zip/ZipWriter.ts +3 -3
- package/dist/utils/ChangelogGenerator.d.ts.map +0 -1
- package/dist/utils/ChangelogGenerator.js.map +0 -1
- package/dist/utils/CompatibilityUpgrader.d.ts.map +0 -1
- package/dist/utils/CompatibilityUpgrader.js.map +0 -1
- package/dist/utils/InMemoryRevisionAcceptor.d.ts.map +0 -1
- package/dist/utils/InMemoryRevisionAcceptor.js.map +0 -1
- package/dist/utils/MoveOperationHelper.d.ts.map +0 -1
- package/dist/utils/MoveOperationHelper.js.map +0 -1
- package/dist/utils/RevisionAwareProcessor.d.ts.map +0 -1
- package/dist/utils/RevisionAwareProcessor.js.map +0 -1
- package/dist/utils/RevisionWalker.d.ts.map +0 -1
- package/dist/utils/RevisionWalker.js.map +0 -1
- package/dist/utils/SelectiveRevisionAcceptor.d.ts.map +0 -1
- package/dist/utils/SelectiveRevisionAcceptor.js.map +0 -1
- package/dist/utils/ShadingResolver.d.ts +0 -6
- package/dist/utils/ShadingResolver.d.ts.map +0 -1
- package/dist/utils/ShadingResolver.js.map +0 -1
- package/dist/utils/acceptRevisions.d.ts.map +0 -1
- package/dist/utils/acceptRevisions.js.map +0 -1
- package/dist/utils/cnfStyleDecoder.d.ts.map +0 -1
- package/dist/utils/cnfStyleDecoder.js.map +0 -1
- package/dist/utils/stripTrackedChanges.d.ts +0 -3
- package/dist/utils/stripTrackedChanges.d.ts.map +0 -1
- package/dist/utils/stripTrackedChanges.js.map +0 -1
- package/src/__tests__/helper-methods.test.ts +0 -512
- package/src/constants/CLAUDE.md +0 -28
- package/src/core/CLAUDE.md +0 -113
- package/src/elements/CLAUDE.md +0 -142
- package/src/formatting/CLAUDE.md +0 -78
- package/src/managers/CLAUDE.md +0 -47
- package/src/tracking/CLAUDE.md +0 -30
- package/src/types/CLAUDE.md +0 -39
- package/src/utils/CLAUDE.md +0 -168
- package/src/validation/CLAUDE.md +0 -40
- package/src/xml/CLAUDE.md +0 -65
- package/src/zip/CLAUDE.md +0 -55
- /package/dist/{utils → processors}/CompatibilityUpgrader.d.ts +0 -0
- /package/dist/{utils → processors}/cnfStyleDecoder.js +0 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.StylesManager = void 0;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
4
|
+
const XMLBuilder_js_1 = require("../xml/XMLBuilder.js");
|
|
5
|
+
const XMLParser_js_1 = require("../xml/XMLParser.js");
|
|
6
|
+
const Style_js_1 = require("./Style.js");
|
|
7
7
|
class StylesManager {
|
|
8
8
|
styles = new Map();
|
|
9
9
|
includeBuiltInStyles;
|
|
@@ -12,31 +12,31 @@ class StylesManager {
|
|
|
12
12
|
latentStyles;
|
|
13
13
|
latentStyleExceptions = [];
|
|
14
14
|
static BUILT_IN_STYLE_FACTORIES = new Map([
|
|
15
|
-
['Normal', () =>
|
|
16
|
-
['Heading1', () =>
|
|
17
|
-
['Heading2', () =>
|
|
18
|
-
['Heading3', () =>
|
|
19
|
-
['Heading4', () =>
|
|
20
|
-
['Heading5', () =>
|
|
21
|
-
['Heading6', () =>
|
|
22
|
-
['Heading7', () =>
|
|
23
|
-
['Heading8', () =>
|
|
24
|
-
['Heading9', () =>
|
|
25
|
-
['Heading1Char', () =>
|
|
26
|
-
['Heading2Char', () =>
|
|
27
|
-
['Heading3Char', () =>
|
|
28
|
-
['Heading4Char', () =>
|
|
29
|
-
['Heading5Char', () =>
|
|
30
|
-
['Heading6Char', () =>
|
|
31
|
-
['Heading7Char', () =>
|
|
32
|
-
['Heading8Char', () =>
|
|
33
|
-
['Heading9Char', () =>
|
|
34
|
-
['Title', () =>
|
|
35
|
-
['Subtitle', () =>
|
|
36
|
-
['ListParagraph', () =>
|
|
37
|
-
['TOCHeading', () =>
|
|
38
|
-
['TableNormal', () =>
|
|
39
|
-
['TableGrid', () =>
|
|
15
|
+
['Normal', () => Style_js_1.Style.createNormalStyle()],
|
|
16
|
+
['Heading1', () => Style_js_1.Style.createHeadingStyle(1)],
|
|
17
|
+
['Heading2', () => Style_js_1.Style.createHeadingStyle(2)],
|
|
18
|
+
['Heading3', () => Style_js_1.Style.createHeadingStyle(3)],
|
|
19
|
+
['Heading4', () => Style_js_1.Style.createHeadingStyle(4)],
|
|
20
|
+
['Heading5', () => Style_js_1.Style.createHeadingStyle(5)],
|
|
21
|
+
['Heading6', () => Style_js_1.Style.createHeadingStyle(6)],
|
|
22
|
+
['Heading7', () => Style_js_1.Style.createHeadingStyle(7)],
|
|
23
|
+
['Heading8', () => Style_js_1.Style.createHeadingStyle(8)],
|
|
24
|
+
['Heading9', () => Style_js_1.Style.createHeadingStyle(9)],
|
|
25
|
+
['Heading1Char', () => Style_js_1.Style.createHeadingCharStyle(1)],
|
|
26
|
+
['Heading2Char', () => Style_js_1.Style.createHeadingCharStyle(2)],
|
|
27
|
+
['Heading3Char', () => Style_js_1.Style.createHeadingCharStyle(3)],
|
|
28
|
+
['Heading4Char', () => Style_js_1.Style.createHeadingCharStyle(4)],
|
|
29
|
+
['Heading5Char', () => Style_js_1.Style.createHeadingCharStyle(5)],
|
|
30
|
+
['Heading6Char', () => Style_js_1.Style.createHeadingCharStyle(6)],
|
|
31
|
+
['Heading7Char', () => Style_js_1.Style.createHeadingCharStyle(7)],
|
|
32
|
+
['Heading8Char', () => Style_js_1.Style.createHeadingCharStyle(8)],
|
|
33
|
+
['Heading9Char', () => Style_js_1.Style.createHeadingCharStyle(9)],
|
|
34
|
+
['Title', () => Style_js_1.Style.createTitleStyle()],
|
|
35
|
+
['Subtitle', () => Style_js_1.Style.createSubtitleStyle()],
|
|
36
|
+
['ListParagraph', () => Style_js_1.Style.createListParagraphStyle()],
|
|
37
|
+
['TOCHeading', () => Style_js_1.Style.createTOCHeadingStyle()],
|
|
38
|
+
['TableNormal', () => Style_js_1.Style.createTableNormalStyle()],
|
|
39
|
+
['TableGrid', () => Style_js_1.Style.createTableGridStyle()],
|
|
40
40
|
]);
|
|
41
41
|
constructor(includeBuiltInStyles = true) {
|
|
42
42
|
this.includeBuiltInStyles = includeBuiltInStyles;
|
|
@@ -94,7 +94,7 @@ class StylesManager {
|
|
|
94
94
|
props.styleId = newId;
|
|
95
95
|
props.name = newName ?? newId;
|
|
96
96
|
props.isDefault = false;
|
|
97
|
-
const cloned = new
|
|
97
|
+
const cloned = new Style_js_1.Style(props);
|
|
98
98
|
this.addStyle(cloned);
|
|
99
99
|
return cloned;
|
|
100
100
|
}
|
|
@@ -161,7 +161,7 @@ class StylesManager {
|
|
|
161
161
|
return this.getAllStyles().filter((style) => style.getType() === 'table');
|
|
162
162
|
}
|
|
163
163
|
createTableStyle(styleId, name, basedOn) {
|
|
164
|
-
const style =
|
|
164
|
+
const style = Style_js_1.Style.create({
|
|
165
165
|
styleId,
|
|
166
166
|
name,
|
|
167
167
|
type: 'table',
|
|
@@ -196,7 +196,7 @@ class StylesManager {
|
|
|
196
196
|
};
|
|
197
197
|
}
|
|
198
198
|
createParagraphStyle(styleId, name, basedOn) {
|
|
199
|
-
const style =
|
|
199
|
+
const style = Style_js_1.Style.create({
|
|
200
200
|
styleId,
|
|
201
201
|
name,
|
|
202
202
|
type: 'paragraph',
|
|
@@ -207,7 +207,7 @@ class StylesManager {
|
|
|
207
207
|
return style;
|
|
208
208
|
}
|
|
209
209
|
createCharacterStyle(styleId, name, basedOn) {
|
|
210
|
-
const style =
|
|
210
|
+
const style = Style_js_1.Style.create({
|
|
211
211
|
styleId,
|
|
212
212
|
name,
|
|
213
213
|
type: 'character',
|
|
@@ -240,7 +240,7 @@ class StylesManager {
|
|
|
240
240
|
return [...this.latentStyleExceptions];
|
|
241
241
|
}
|
|
242
242
|
generateStylesXml() {
|
|
243
|
-
const builder = new
|
|
243
|
+
const builder = new XMLBuilder_js_1.XMLBuilder();
|
|
244
244
|
const stylesChildren = [];
|
|
245
245
|
stylesChildren.push(this.generateDocDefaults());
|
|
246
246
|
if (this.latentStyles) {
|
|
@@ -257,35 +257,35 @@ class StylesManager {
|
|
|
257
257
|
}
|
|
258
258
|
generateDocDefaults() {
|
|
259
259
|
const rPrDefaultChildren = [
|
|
260
|
-
|
|
260
|
+
XMLBuilder_js_1.XMLBuilder.wSelf('rFonts', {
|
|
261
261
|
'w:ascii': 'Calibri',
|
|
262
262
|
'w:hAnsi': 'Calibri',
|
|
263
263
|
'w:eastAsia': 'Calibri',
|
|
264
264
|
'w:cs': 'Calibri',
|
|
265
265
|
}),
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
266
|
+
XMLBuilder_js_1.XMLBuilder.wSelf('sz', { 'w:val': '22' }),
|
|
267
|
+
XMLBuilder_js_1.XMLBuilder.wSelf('szCs', { 'w:val': '22' }),
|
|
268
|
+
XMLBuilder_js_1.XMLBuilder.wSelf('lang', {
|
|
269
269
|
'w:val': 'en-US',
|
|
270
270
|
'w:eastAsia': 'en-US',
|
|
271
271
|
'w:bidi': 'ar-SA',
|
|
272
272
|
}),
|
|
273
273
|
];
|
|
274
274
|
const pPrDefaultChildren = [
|
|
275
|
-
|
|
275
|
+
XMLBuilder_js_1.XMLBuilder.wSelf('spacing', {
|
|
276
276
|
'w:after': '200',
|
|
277
277
|
'w:line': '276',
|
|
278
278
|
'w:lineRule': 'auto',
|
|
279
279
|
}),
|
|
280
280
|
];
|
|
281
|
-
return
|
|
282
|
-
|
|
283
|
-
|
|
281
|
+
return XMLBuilder_js_1.XMLBuilder.w('docDefaults', undefined, [
|
|
282
|
+
XMLBuilder_js_1.XMLBuilder.w('rPrDefault', undefined, [XMLBuilder_js_1.XMLBuilder.w('rPr', undefined, rPrDefaultChildren)]),
|
|
283
|
+
XMLBuilder_js_1.XMLBuilder.w('pPrDefault', undefined, [XMLBuilder_js_1.XMLBuilder.w('pPr', undefined, pPrDefaultChildren)]),
|
|
284
284
|
]);
|
|
285
285
|
}
|
|
286
286
|
generateLatentStyles() {
|
|
287
287
|
if (!this.latentStyles)
|
|
288
|
-
return
|
|
288
|
+
return XMLBuilder_js_1.XMLBuilder.w('latentStyles', {}, []);
|
|
289
289
|
const attrs = {};
|
|
290
290
|
if (this.latentStyles.defaultLockedState !== undefined) {
|
|
291
291
|
attrs['w:defLockedState'] = this.latentStyles.defaultLockedState ? '1' : '0';
|
|
@@ -317,9 +317,9 @@ class StylesManager {
|
|
|
317
317
|
excAttrs['w:unhideWhenUsed'] = exc.unhideWhenUsed ? '1' : '0';
|
|
318
318
|
if (exc.qFormat !== undefined)
|
|
319
319
|
excAttrs['w:qFormat'] = exc.qFormat ? '1' : '0';
|
|
320
|
-
return
|
|
320
|
+
return XMLBuilder_js_1.XMLBuilder.wSelf('lsdException', excAttrs);
|
|
321
321
|
});
|
|
322
|
-
return
|
|
322
|
+
return XMLBuilder_js_1.XMLBuilder.w('latentStyles', attrs, children);
|
|
323
323
|
}
|
|
324
324
|
static create() {
|
|
325
325
|
return new StylesManager(true);
|
|
@@ -345,7 +345,7 @@ class StylesManager {
|
|
|
345
345
|
result.errors.push('XML contains escaped tags - possible double-encoding corruption');
|
|
346
346
|
return result;
|
|
347
347
|
}
|
|
348
|
-
const stylesContent =
|
|
348
|
+
const stylesContent = XMLParser_js_1.XMLParser.extractBetweenTags(xml, '<w:styles', '</w:styles>');
|
|
349
349
|
if (!stylesContent) {
|
|
350
350
|
result.isValid = false;
|
|
351
351
|
result.errors.push('Missing required <w:styles> root element');
|
|
@@ -354,7 +354,7 @@ class StylesManager {
|
|
|
354
354
|
if (!xml.includes('xmlns:w=')) {
|
|
355
355
|
result.warnings.push('Missing WordprocessingML namespace declaration');
|
|
356
356
|
}
|
|
357
|
-
const styleElements =
|
|
357
|
+
const styleElements = XMLParser_js_1.XMLParser.extractElements(stylesContent, 'w:style');
|
|
358
358
|
result.styleCount = styleElements.length;
|
|
359
359
|
if (styleElements.length === 0) {
|
|
360
360
|
result.warnings.push('No styles found in document');
|
|
@@ -371,7 +371,7 @@ class StylesManager {
|
|
|
371
371
|
}
|
|
372
372
|
const foundStyleIds = new Set();
|
|
373
373
|
for (const styleElement of styleElements) {
|
|
374
|
-
const styleId =
|
|
374
|
+
const styleId = XMLParser_js_1.XMLParser.extractAttribute(styleElement, 'w:styleId');
|
|
375
375
|
if (styleId) {
|
|
376
376
|
if (foundStyleIds.has(styleId)) {
|
|
377
377
|
result.isValid = false;
|
|
@@ -386,7 +386,7 @@ class StylesManager {
|
|
|
386
386
|
result.isValid = false;
|
|
387
387
|
result.errors.push('Style found without required w:styleId attribute');
|
|
388
388
|
}
|
|
389
|
-
const type =
|
|
389
|
+
const type = XMLParser_js_1.XMLParser.extractAttribute(styleElement, 'w:type');
|
|
390
390
|
if (type) {
|
|
391
391
|
if (!['paragraph', 'character', 'table', 'numbering'].includes(type)) {
|
|
392
392
|
result.warnings.push(`Invalid style type: "${type}"`);
|
|
@@ -396,9 +396,9 @@ class StylesManager {
|
|
|
396
396
|
result.isValid = false;
|
|
397
397
|
result.errors.push('Style found without required w:type attribute');
|
|
398
398
|
}
|
|
399
|
-
const basedOnElement =
|
|
399
|
+
const basedOnElement = XMLParser_js_1.XMLParser.extractElements(styleElement, 'w:basedOn')[0];
|
|
400
400
|
if (basedOnElement && styleId) {
|
|
401
|
-
const basedOn =
|
|
401
|
+
const basedOn = XMLParser_js_1.XMLParser.extractAttribute(basedOnElement, 'w:val');
|
|
402
402
|
if (basedOn && styleId === basedOn) {
|
|
403
403
|
result.isValid = false;
|
|
404
404
|
result.errors.push(`Circular reference detected: style "${styleId}" based on itself`);
|
|
@@ -526,7 +526,7 @@ class StylesManager {
|
|
|
526
526
|
importStyle(json) {
|
|
527
527
|
try {
|
|
528
528
|
const props = JSON.parse(json);
|
|
529
|
-
const style =
|
|
529
|
+
const style = Style_js_1.Style.create(props);
|
|
530
530
|
this.addStyle(style);
|
|
531
531
|
return style;
|
|
532
532
|
}
|
|
@@ -546,7 +546,7 @@ class StylesManager {
|
|
|
546
546
|
}
|
|
547
547
|
const styles = [];
|
|
548
548
|
for (const props of propsArray) {
|
|
549
|
-
const style =
|
|
549
|
+
const style = Style_js_1.Style.create(props);
|
|
550
550
|
this.addStyle(style);
|
|
551
551
|
styles.push(style);
|
|
552
552
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StylesManager.js","sourceRoot":"","sources":["../../src/formatting/StylesManager.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * StylesManager - Manages the collection of styles in a document\n * Handles style registration, retrieval, and styles.xml generation\n */\n\nimport { Paragraph } from '../elements/Paragraph';\nimport { XMLBuilder } from '../xml/XMLBuilder';\nimport { XMLParser } from '../xml/XMLParser';\nimport { Style, StyleType } from './Style';\n\n/**\n * Configuration for latent styles (w:latentStyles per ECMA-376 §17.7.4.6)\n * Controls which built-in styles are shown in the Word UI gallery\n */\nexport interface LatentStylesConfig {\n /** Default locked state for built-in styles */\n defaultLockedState?: boolean;\n /** Default UI priority for built-in styles */\n defaultUiPriority?: number;\n /** Default semi-hidden state */\n defaultSemiHidden?: boolean;\n /** Default unhide-when-used state */\n defaultUnhideWhenUsed?: boolean;\n /** Default quick format flag */\n defaultQFormat?: boolean;\n /** Total count of style definitions */\n count?: number;\n}\n\n/**\n * Exception to latent style defaults (w:lsdException per ECMA-376 §17.7.4.7)\n */\nexport interface LatentStyleException {\n /** Style name */\n name: string;\n /** Override: locked state */\n locked?: boolean;\n /** Override: UI priority */\n uiPriority?: number;\n /** Override: semi-hidden */\n semiHidden?: boolean;\n /** Override: unhide when used */\n unhideWhenUsed?: boolean;\n /** Override: quick format */\n qFormat?: boolean;\n}\n\n/**\n * Result of XML validation\n */\nexport interface ValidationResult {\n /** Whether the XML is valid */\n isValid: boolean;\n /** Validation errors if any */\n errors: string[];\n /** Validation warnings if any */\n warnings: string[];\n /** Number of styles found */\n styleCount: number;\n /** List of style IDs found */\n styleIds: string[];\n}\n\n/**\n * Manages document styles\n */\nexport class StylesManager {\n private styles = new Map<string, Style>();\n private includeBuiltInStyles: boolean;\n\n // Track if styles have been modified (for XML preservation)\n private _modified = false;\n\n // Track which specific styles have been modified (for selective merging)\n private _modifiedStyleIds = new Set<string>();\n\n // Latent styles configuration\n private latentStyles?: LatentStylesConfig;\n private latentStyleExceptions: LatentStyleException[] = [];\n\n /**\n * Registry of built-in style factory functions\n * Maps style ID to factory function for lazy loading\n */\n private static readonly BUILT_IN_STYLE_FACTORIES = new Map<string, () => Style>([\n ['Normal', () => Style.createNormalStyle()],\n ['Heading1', () => Style.createHeadingStyle(1)],\n ['Heading2', () => Style.createHeadingStyle(2)],\n ['Heading3', () => Style.createHeadingStyle(3)],\n ['Heading4', () => Style.createHeadingStyle(4)],\n ['Heading5', () => Style.createHeadingStyle(5)],\n ['Heading6', () => Style.createHeadingStyle(6)],\n ['Heading7', () => Style.createHeadingStyle(7)],\n ['Heading8', () => Style.createHeadingStyle(8)],\n ['Heading9', () => Style.createHeadingStyle(9)],\n ['Heading1Char', () => Style.createHeadingCharStyle(1)],\n ['Heading2Char', () => Style.createHeadingCharStyle(2)],\n ['Heading3Char', () => Style.createHeadingCharStyle(3)],\n ['Heading4Char', () => Style.createHeadingCharStyle(4)],\n ['Heading5Char', () => Style.createHeadingCharStyle(5)],\n ['Heading6Char', () => Style.createHeadingCharStyle(6)],\n ['Heading7Char', () => Style.createHeadingCharStyle(7)],\n ['Heading8Char', () => Style.createHeadingCharStyle(8)],\n ['Heading9Char', () => Style.createHeadingCharStyle(9)],\n ['Title', () => Style.createTitleStyle()],\n ['Subtitle', () => Style.createSubtitleStyle()],\n ['ListParagraph', () => Style.createListParagraphStyle()],\n ['TOCHeading', () => Style.createTOCHeadingStyle()],\n ['TableNormal', () => Style.createTableNormalStyle()],\n ['TableGrid', () => Style.createTableGridStyle()],\n ]);\n\n /**\n * Creates a new StylesManager\n * @param includeBuiltInStyles - Whether to include built-in styles (default: true)\n */\n constructor(includeBuiltInStyles = true) {\n this.includeBuiltInStyles = includeBuiltInStyles;\n\n // Always load Normal style if built-in styles are enabled\n // Normal is required and referenced by most other styles\n if (includeBuiltInStyles) {\n this.ensureStyleLoaded('Normal');\n }\n }\n\n /**\n * Ensures a built-in style is loaded (lazy loading)\n * @param styleId - Style ID to load\n */\n private ensureStyleLoaded(styleId: string): void {\n // Already loaded?\n if (this.styles.has(styleId)) {\n return;\n }\n\n // Built-in styles disabled?\n if (!this.includeBuiltInStyles) {\n return;\n }\n\n // Is this a built-in style?\n const factory = StylesManager.BUILT_IN_STYLE_FACTORIES.get(styleId);\n if (factory) {\n this.styles.set(styleId, factory());\n }\n }\n\n /**\n * Adds a style to the collection\n * @param style - Style to add\n * @returns This manager for chaining\n */\n addStyle(style: Style): this {\n const existing = this.styles.get(style.getStyleId());\n if (existing) {\n // Preserve isDefault flag if replacing an existing default style\n if (existing.getIsDefault() && !style.getIsDefault()) {\n style.setIsDefault(true);\n }\n // Preserve structural properties from existing style if not explicitly set on new\n const newProps = style.getProperties();\n const existingProps = existing.getProperties();\n if (newProps.basedOn === undefined && existingProps.basedOn !== undefined) {\n style.setBasedOn(existingProps.basedOn);\n }\n if (newProps.next === undefined && existingProps.next !== undefined) {\n style.setNext(existingProps.next);\n }\n if (newProps.link === undefined && existingProps.link !== undefined) {\n style.setLink(existingProps.link);\n }\n if (newProps.uiPriority === undefined && existingProps.uiPriority !== undefined) {\n style.setUiPriority(existingProps.uiPriority);\n }\n }\n this.styles.set(style.getStyleId(), style);\n this._modifiedStyleIds.add(style.getStyleId());\n this._modified = true;\n return this;\n }\n\n /**\n * Gets a style by ID\n * Lazy-loads built-in styles on first access\n * @param styleId - Style ID to retrieve\n * @returns The style, or undefined if not found\n */\n getStyle(styleId: string): Style | undefined {\n // Ensure built-in style is loaded if applicable\n this.ensureStyleLoaded(styleId);\n return this.styles.get(styleId);\n }\n\n /**\n * Clones an existing style with a new ID and optional name\n *\n * Deep-copies the source style (including all run, paragraph, and table\n * formatting) and registers the clone with the new ID. If `newName` is\n * not provided, the clone's name is set to the new ID.\n *\n * @param sourceId - ID of the style to clone\n * @param newId - ID for the cloned style (must be unique)\n * @param newName - Display name for the clone (defaults to newId)\n * @returns The cloned Style, or undefined if source not found\n *\n * @example\n * ```typescript\n * // Create a variant of Heading1\n * const variant = stylesManager.cloneStyle('Heading1', 'Heading1Blue', 'Blue Heading 1');\n * variant?.setRunFormatting({ ...variant.getRunFormatting(), color: '0000FF' });\n *\n * // Clone a custom style for a different section\n * stylesManager.cloneStyle('CustomNote', 'CustomNoteAlt');\n * ```\n */\n cloneStyle(sourceId: string, newId: string, newName?: string): Style | undefined {\n const source = this.getStyle(sourceId);\n if (!source) return undefined;\n\n const props = source.getProperties();\n props.styleId = newId;\n props.name = newName ?? newId;\n props.isDefault = false; // Clones should never be default\n\n const cloned = new Style(props);\n this.addStyle(cloned);\n return cloned;\n }\n\n /**\n * Checks if a style exists or can be loaded\n * @param styleId - Style ID to check\n * @returns True if the style exists or is a built-in style\n */\n hasStyle(styleId: string): boolean {\n // Check if already loaded\n if (this.styles.has(styleId)) {\n return true;\n }\n\n // Check if it's a built-in style that can be loaded\n return this.includeBuiltInStyles && StylesManager.BUILT_IN_STYLE_FACTORIES.has(styleId);\n }\n\n /**\n * Removes a style from the collection\n * @param styleId - Style ID to remove\n * @returns True if the style was removed\n */\n removeStyle(styleId: string): boolean {\n return this.styles.delete(styleId);\n }\n\n /**\n * Gets all styles\n * @returns Array of all styles\n */\n getAllStyles(): Style[] {\n return Array.from(this.styles.values());\n }\n\n /**\n * Checks if styles have been modified since loading\n * Used for XML preservation optimization\n * @returns True if styles were added or modified\n */\n isModified(): boolean {\n return this._modified;\n }\n\n /**\n * Resets the modified flag\n * Called after parsing to indicate that loaded styles don't count as modifications\n */\n resetModified(): void {\n this._modified = false;\n this._modifiedStyleIds.clear();\n }\n\n /**\n * Gets the IDs of styles that have been modified since loading\n * Used for selective merging with original styles.xml\n * @returns Set of modified style IDs\n */\n getModifiedStyleIds(): Set<string> {\n return new Set(this._modifiedStyleIds);\n }\n\n /**\n * Gets styles by type\n * @param type - Style type to filter by\n * @returns Array of styles matching the type\n */\n getStylesByType(type: StyleType): Style[] {\n return this.getAllStyles().filter((style) => style.getType() === type);\n }\n\n /**\n * Gets quick styles (styles that appear in the style gallery)\n * A style appears in the gallery when qFormat=true AND semiHidden=false\n * @returns Array of quick styles\n */\n getQuickStyles(): Style[] {\n return this.getAllStyles().filter((style) => {\n const props = style.getProperties();\n const isQuick = props.qFormat === true || (!props.customStyle && props.qFormat !== false);\n const isVisible = !props.semiHidden;\n return isQuick && isVisible;\n });\n }\n\n /**\n * Gets visible styles (not semi-hidden)\n * @returns Array of visible styles\n */\n getVisibleStyles(): Style[] {\n return this.getAllStyles().filter((style) => {\n const props = style.getProperties();\n return !props.semiHidden;\n });\n }\n\n /**\n * Gets styles sorted by UI priority\n * Lower priority values appear first (higher importance)\n * Styles without priority appear last\n * @returns Array of styles sorted by priority\n */\n getStylesByPriority(): Style[] {\n return this.getAllStyles().sort((a, b) => {\n const propsA = a.getProperties();\n const propsB = b.getProperties();\n\n const priorityA = propsA.uiPriority ?? 999;\n const priorityB = propsB.uiPriority ?? 999;\n\n return priorityA - priorityB;\n });\n }\n\n /**\n * Gets the linked style for a given style\n * @param styleId - Style ID to find the linked style for\n * @returns The linked style, or undefined if not found\n */\n getLinkedStyle(styleId: string): Style | undefined {\n const style = this.getStyle(styleId);\n if (!style) {\n return undefined;\n }\n\n const props = style.getProperties();\n if (!props.link) {\n return undefined;\n }\n\n return this.getStyle(props.link);\n }\n\n /**\n * Gets all table styles (Phase 5.1)\n * @returns Array of table styles\n */\n getTableStyles(): Style[] {\n return this.getAllStyles().filter((style) => style.getType() === 'table');\n }\n\n /**\n * Creates and adds a table style (Phase 5.1)\n * @param styleId - Style ID\n * @param name - Style name\n * @param basedOn - Base style ID (optional)\n * @returns The created table style\n */\n createTableStyle(styleId: string, name: string, basedOn?: string): Style {\n const style = Style.create({\n styleId,\n name,\n type: 'table',\n basedOn,\n customStyle: true,\n });\n this.addStyle(style);\n return style;\n }\n\n /**\n * Gets the number of styles\n * @returns Number of styles\n */\n getStyleCount(): number {\n return this.styles.size;\n }\n\n /**\n * Clears all styles\n * @returns This manager for chaining\n */\n clear(): this {\n this.styles.clear();\n return this;\n }\n\n /**\n * Gets all available built-in style IDs\n * @returns Array of built-in style IDs\n */\n static getBuiltInStyleIds(): string[] {\n return Array.from(StylesManager.BUILT_IN_STYLE_FACTORIES.keys());\n }\n\n /**\n * Checks if a style ID is a built-in style\n * @param styleId - Style ID to check\n * @returns True if the style is a built-in style\n */\n static isBuiltInStyle(styleId: string): boolean {\n return StylesManager.BUILT_IN_STYLE_FACTORIES.has(styleId);\n }\n\n /**\n * Gets statistics about loaded vs available styles\n * @returns Object with style statistics\n */\n getStats(): {\n loadedStyles: number;\n availableBuiltInStyles: number;\n customStyles: number;\n } {\n const loadedStyles = this.styles.size;\n const customStyles = this.getAllStyles().filter((s) => s.getProperties().customStyle).length;\n\n return {\n loadedStyles,\n availableBuiltInStyles: this.includeBuiltInStyles\n ? StylesManager.BUILT_IN_STYLE_FACTORIES.size\n : 0,\n customStyles,\n };\n }\n\n /**\n * Creates a new paragraph style\n * @param styleId - Unique style ID\n * @param name - Display name\n * @param basedOn - Parent style ID (optional)\n * @returns The created style\n */\n createParagraphStyle(styleId: string, name: string, basedOn?: string): Style {\n const style = Style.create({\n styleId,\n name,\n type: 'paragraph',\n basedOn,\n customStyle: true,\n });\n this.addStyle(style);\n return style;\n }\n\n /**\n * Creates a new character style\n * @param styleId - Unique style ID\n * @param name - Display name\n * @param basedOn - Parent style ID (optional)\n * @returns The created style\n */\n createCharacterStyle(styleId: string, name: string, basedOn?: string): Style {\n const style = Style.create({\n styleId,\n name,\n type: 'character',\n basedOn,\n customStyle: true,\n });\n this.addStyle(style);\n return style;\n }\n\n /**\n * Sets the latent styles configuration\n * @param config - Latent styles configuration\n */\n setLatentStyles(config: LatentStylesConfig): this {\n this.latentStyles = config;\n this._modified = true;\n return this;\n }\n\n /**\n * Gets the latent styles configuration\n */\n getLatentStyles(): LatentStylesConfig | undefined {\n return this.latentStyles;\n }\n\n /**\n * Adds a latent style exception\n * @param exception - The exception to add\n */\n addLatentStyleException(exception: LatentStyleException): this {\n // Replace existing exception for same name\n const idx = this.latentStyleExceptions.findIndex((e) => e.name === exception.name);\n if (idx >= 0) {\n this.latentStyleExceptions[idx] = exception;\n } else {\n this.latentStyleExceptions.push(exception);\n }\n this._modified = true;\n return this;\n }\n\n /**\n * Gets all latent style exceptions\n */\n getLatentStyleExceptions(): LatentStyleException[] {\n return [...this.latentStyleExceptions];\n }\n\n /**\n * Generates the complete styles.xml file\n * @returns XML string for word/styles.xml\n */\n generateStylesXml(): string {\n const builder = new XMLBuilder();\n\n // Create styles element with namespace\n const stylesChildren = [];\n\n // Add document defaults\n stylesChildren.push(this.generateDocDefaults());\n\n // Add latent styles if configured (per ECMA-376 CT_Styles order: docDefaults, latentStyles, style*)\n if (this.latentStyles) {\n stylesChildren.push(this.generateLatentStyles());\n }\n\n // Add all styles\n for (const style of this.getAllStyles()) {\n stylesChildren.push(style.toXML());\n }\n\n builder.element(\n 'w:styles',\n {\n 'xmlns:w': 'http://schemas.openxmlformats.org/wordprocessingml/2006/main',\n 'xmlns:r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',\n },\n stylesChildren\n );\n\n return builder.build(true);\n }\n\n /**\n * Generates document defaults\n */\n private generateDocDefaults() {\n const rPrDefaultChildren = [\n XMLBuilder.wSelf('rFonts', {\n 'w:ascii': 'Calibri',\n 'w:hAnsi': 'Calibri',\n 'w:eastAsia': 'Calibri',\n 'w:cs': 'Calibri',\n }),\n XMLBuilder.wSelf('sz', { 'w:val': '22' }), // 11pt\n XMLBuilder.wSelf('szCs', { 'w:val': '22' }),\n XMLBuilder.wSelf('lang', {\n 'w:val': 'en-US',\n 'w:eastAsia': 'en-US',\n 'w:bidi': 'ar-SA',\n }),\n ];\n\n const pPrDefaultChildren = [\n XMLBuilder.wSelf('spacing', {\n 'w:after': '200',\n 'w:line': '276',\n 'w:lineRule': 'auto',\n }),\n ];\n\n return XMLBuilder.w('docDefaults', undefined, [\n XMLBuilder.w('rPrDefault', undefined, [XMLBuilder.w('rPr', undefined, rPrDefaultChildren)]),\n XMLBuilder.w('pPrDefault', undefined, [XMLBuilder.w('pPr', undefined, pPrDefaultChildren)]),\n ]);\n }\n\n /**\n * Generates the latent styles XML element\n */\n private generateLatentStyles() {\n if (!this.latentStyles) return XMLBuilder.w('latentStyles', {}, []);\n\n const attrs: Record<string, string> = {};\n if (this.latentStyles.defaultLockedState !== undefined) {\n attrs['w:defLockedState'] = this.latentStyles.defaultLockedState ? '1' : '0';\n }\n if (this.latentStyles.defaultUiPriority !== undefined) {\n attrs['w:defUIPriority'] = this.latentStyles.defaultUiPriority.toString();\n }\n if (this.latentStyles.defaultSemiHidden !== undefined) {\n attrs['w:defSemiHidden'] = this.latentStyles.defaultSemiHidden ? '1' : '0';\n }\n if (this.latentStyles.defaultUnhideWhenUsed !== undefined) {\n attrs['w:defUnhideWhenUsed'] = this.latentStyles.defaultUnhideWhenUsed ? '1' : '0';\n }\n if (this.latentStyles.defaultQFormat !== undefined) {\n attrs['w:defQFormat'] = this.latentStyles.defaultQFormat ? '1' : '0';\n }\n if (this.latentStyles.count !== undefined) {\n attrs['w:count'] = this.latentStyles.count.toString();\n }\n\n const children = this.latentStyleExceptions.map((exc) => {\n const excAttrs: Record<string, string> = { 'w:name': exc.name };\n if (exc.locked !== undefined) excAttrs['w:locked'] = exc.locked ? '1' : '0';\n if (exc.uiPriority !== undefined) excAttrs['w:uiPriority'] = exc.uiPriority.toString();\n if (exc.semiHidden !== undefined) excAttrs['w:semiHidden'] = exc.semiHidden ? '1' : '0';\n if (exc.unhideWhenUsed !== undefined)\n excAttrs['w:unhideWhenUsed'] = exc.unhideWhenUsed ? '1' : '0';\n if (exc.qFormat !== undefined) excAttrs['w:qFormat'] = exc.qFormat ? '1' : '0';\n return XMLBuilder.wSelf('lsdException', excAttrs);\n });\n\n return XMLBuilder.w('latentStyles', attrs, children);\n }\n\n /**\n * Creates a new StylesManager with built-in styles\n * @returns New StylesManager instance\n */\n static create(): StylesManager {\n return new StylesManager(true);\n }\n\n /**\n * Creates an empty StylesManager (no built-in styles)\n * @returns New empty StylesManager instance\n */\n static createEmpty(): StylesManager {\n return new StylesManager(false);\n }\n\n /**\n * Validates styles.xml content for structure and correctness\n *\n * This performs string-based validation to avoid XML parsing corruption.\n * It checks for:\n * - Well-formed XML structure\n * - Required w:styles root element\n * - Valid style definitions\n * - No duplicate style IDs\n * - Required attributes\n *\n * @param xml - The raw styles.xml content to validate\n * @returns ValidationResult with details about validity\n */\n static validate(xml: string): ValidationResult {\n const result: ValidationResult = {\n isValid: true,\n errors: [],\n warnings: [],\n styleCount: 0,\n styleIds: [],\n };\n\n // Check for empty or null\n if (!xml || xml.trim().length === 0) {\n result.isValid = false;\n result.errors.push('Styles XML is empty or null');\n return result;\n }\n\n // Check for common corruption patterns FIRST (before parsing)\n // This catches double-encoding issues that would break the parser\n if (xml.includes('<w:') || xml.includes('>')) {\n result.isValid = false;\n result.errors.push('XML contains escaped tags - possible double-encoding corruption');\n return result;\n }\n\n // Skip complex XML structure validation - focus on w:styles specific validation\n // Checking balanced tags with regex is unreliable and can give false positives\n\n // Use XMLParser to extract root element\n const stylesContent = XMLParser.extractBetweenTags(xml, '<w:styles', '</w:styles>');\n if (!stylesContent) {\n result.isValid = false;\n result.errors.push('Missing required <w:styles> root element');\n return result;\n }\n\n // Check for namespace declaration\n if (!xml.includes('xmlns:w=')) {\n result.warnings.push('Missing WordprocessingML namespace declaration');\n }\n\n // Use XMLParser to extract all style elements\n const styleElements = XMLParser.extractElements(stylesContent, 'w:style');\n result.styleCount = styleElements.length;\n\n // Check if any styles found\n if (styleElements.length === 0) {\n result.warnings.push('No styles found in document');\n return result;\n }\n\n // Check for styles without attributes (invalid)\n const styleWithoutAttrs = styleElements.filter((el) => {\n // Check if element has any attributes\n const openTagEnd = el.indexOf('>');\n const openTag = el.substring(0, openTagEnd);\n return !openTag.includes('w:type') || !openTag.includes('w:styleId');\n });\n\n if (styleWithoutAttrs.length > 0) {\n result.isValid = false;\n result.errors.push('Style found without any attributes - w:type and w:styleId are required');\n }\n\n // Process each style element\n const foundStyleIds = new Set<string>();\n\n for (const styleElement of styleElements) {\n // Extract styleId using XMLParser\n const styleId = XMLParser.extractAttribute(styleElement, 'w:styleId');\n if (styleId) {\n // Check for duplicates\n if (foundStyleIds.has(styleId)) {\n result.isValid = false;\n result.errors.push(`Duplicate style ID found: \"${styleId}\"`);\n } else {\n foundStyleIds.add(styleId);\n result.styleIds.push(styleId);\n }\n } else {\n result.isValid = false;\n result.errors.push('Style found without required w:styleId attribute');\n }\n\n // Extract and validate type using XMLParser\n const type = XMLParser.extractAttribute(styleElement, 'w:type');\n if (type) {\n if (!['paragraph', 'character', 'table', 'numbering'].includes(type)) {\n result.warnings.push(`Invalid style type: \"${type}\"`);\n }\n } else {\n result.isValid = false;\n result.errors.push('Style found without required w:type attribute');\n }\n\n // Check for circular references - extract basedOn value\n const basedOnElement = XMLParser.extractElements(styleElement, 'w:basedOn')[0];\n if (basedOnElement && styleId) {\n const basedOn = XMLParser.extractAttribute(basedOnElement, 'w:val');\n if (basedOn && styleId === basedOn) {\n result.isValid = false;\n result.errors.push(`Circular reference detected: style \"${styleId}\" based on itself`);\n }\n }\n }\n\n // Check for required Normal style\n if (!foundStyleIds.has('Normal')) {\n result.warnings.push('Missing \"Normal\" style - document may not render correctly');\n }\n\n // Check for BOM or invalid characters\n if (xml.charCodeAt(0) === 0xfeff) {\n result.warnings.push('XML contains BOM (Byte Order Mark) - may cause parsing issues');\n }\n\n // Summary\n if (result.styleCount === 0) {\n result.warnings.push('No styles found in document');\n }\n\n return result;\n }\n\n /**\n * Searches styles by name (case-insensitive)\n * @param searchTerm - Text to search for in style names\n * @returns Array of styles whose names contain the search term\n * @example\n * ```typescript\n * const headings = stylesManager.searchByName('heading');\n * console.log(`Found ${headings.length} heading styles`);\n * ```\n */\n searchByName(searchTerm: string): Style[] {\n const term = searchTerm.toLowerCase();\n return this.getAllStyles().filter((style) => style.getName().toLowerCase().includes(term));\n }\n\n /**\n * Finds styles using a specific font\n * @param fontName - Font family name to search for\n * @returns Array of styles that use the specified font\n * @example\n * ```typescript\n * const arialStyles = stylesManager.findByFont('Arial');\n * console.log(`Found ${arialStyles.length} styles using Arial font`);\n * ```\n */\n findByFont(fontName: string): Style[] {\n return this.getAllStyles().filter((style) => {\n const runFormatting = style.getRunFormatting();\n return runFormatting?.font === fontName;\n });\n }\n\n /**\n * Finds styles with specific properties using a predicate function\n * @param predicate - Filter function that returns true for styles to include\n * @returns Array of styles matching the predicate\n * @example\n * ```typescript\n * // Find all paragraph styles\n * const paraStyles = stylesManager.findStyles(s => s.getType() === 'paragraph');\n *\n * // Find styles with custom formatting\n * const customStyles = stylesManager.findStyles(s => s.getProperties().customStyle);\n *\n * // Find styles with specific formatting\n * const boldStyles = stylesManager.findStyles(s => s.getRunFormatting()?.bold);\n * ```\n */\n findStyles(predicate: (style: Style) => boolean): Style[] {\n return this.getAllStyles().filter(predicate);\n }\n\n /**\n * Finds unused styles (not referenced by any paragraphs)\n * @param paragraphs - All paragraphs in the document to check against\n * @returns Array of unused style IDs\n * @example\n * ```typescript\n * const doc = Document.create();\n * const unused = stylesManager.findUnusedStyles(doc.getAllParagraphs());\n * console.log(`Found ${unused.length} unused styles: ${unused.join(', ')}`);\n * ```\n */\n findUnusedStyles(paragraphs: Paragraph[]): string[] {\n const usedStyles = new Set<string>();\n\n // Collect all style IDs used by paragraphs\n for (const para of paragraphs) {\n const styleId = para.getStyle();\n if (styleId) {\n usedStyles.add(styleId);\n }\n }\n\n // Get all style IDs and filter out used ones\n const allStyleIds = this.getAllStyles().map((style) => style.getStyleId());\n return allStyleIds.filter((styleId) => !usedStyles.has(styleId));\n }\n\n /**\n * Removes all unused styles from the document\n * @param paragraphs - All paragraphs in the document to check against\n * @returns Number of styles removed\n * @example\n * ```typescript\n * const doc = Document.create();\n * const removedCount = stylesManager.cleanupUnusedStyles(doc.getAllParagraphs());\n * console.log(`Cleaned up ${removedCount} unused styles`);\n * ```\n */\n cleanupUnusedStyles(paragraphs: Paragraph[]): number {\n const unused = this.findUnusedStyles(paragraphs);\n let count = 0;\n\n for (const styleId of unused) {\n // Don't remove built-in styles\n if (!StylesManager.isBuiltInStyle(styleId)) {\n if (this.removeStyle(styleId)) {\n count++;\n }\n }\n }\n\n return count;\n }\n\n /**\n * Validates all style references for broken or circular dependencies\n * @returns Validation result with broken references and circular dependencies\n * @example\n * ```typescript\n * const validation = stylesManager.validateStyleReferences();\n * if (!validation.valid) {\n * console.log('Broken references:', validation.brokenReferences);\n * console.log('Circular references:', validation.circularReferences);\n * }\n * ```\n */\n validateStyleReferences(): {\n valid: boolean;\n brokenReferences: { styleId: string; basedOn: string }[];\n circularReferences: string[][];\n } {\n const broken: { styleId: string; basedOn: string }[] = [];\n const circular: string[][] = [];\n const checkedForCycles = new Set<string>();\n\n for (const style of this.getAllStyles()) {\n const props = style.getProperties();\n\n // Check basedOn references exist\n if (props.basedOn && !this.hasStyle(props.basedOn)) {\n broken.push({ styleId: props.styleId, basedOn: props.basedOn });\n }\n\n // Check for circular references (only if not already checked as part of another cycle)\n if (!checkedForCycles.has(props.styleId)) {\n const result = this.hasCircularReference(props.styleId);\n if (result.hasCircularRef && result.cyclePath) {\n circular.push(result.cyclePath);\n // Mark all styles in this cycle as checked\n result.cyclePath.forEach((id) => checkedForCycles.add(id));\n }\n }\n }\n\n return {\n valid: broken.length === 0 && circular.length === 0,\n brokenReferences: broken,\n circularReferences: circular,\n };\n }\n\n /**\n * Gets the complete inheritance chain for a style\n * @param styleId - Style ID to analyze\n * @returns Array of styles from base to derived (base style first)\n * @throws Error if style doesn't exist or circular reference detected\n * @example\n * ```typescript\n * const chain = stylesManager.getInheritanceChain('Heading1');\n * console.log('Inheritance chain:', chain.map(s => s.getName()));\n * // Output: ['Normal', 'Heading1'] (Normal is base, Heading1 inherits from it)\n * ```\n */\n getInheritanceChain(styleId: string): Style[] {\n const chain: Style[] = [];\n const visited = new Set<string>(); // Track visited styles to detect cycles\n let current = this.getStyle(styleId);\n\n if (!current) {\n throw new Error(`Style '${styleId}' not found`);\n }\n\n while (current) {\n const currentId = current.getStyleId();\n\n // Detect circular reference\n if (visited.has(currentId)) {\n const cycle = [...chain.map((s) => s.getStyleId()), currentId];\n throw new Error(\n `Circular style reference detected: ${cycle.join(' -> ')}. ` +\n `Style '${currentId}' references itself through inheritance chain.`\n );\n }\n\n visited.add(currentId);\n chain.unshift(current); // Add to beginning to maintain base-to-derived order\n const props = current.getProperties();\n current = props.basedOn ? this.getStyle(props.basedOn) : undefined;\n }\n\n return chain;\n }\n\n /**\n * Checks if a style has circular references in its inheritance chain\n * @param styleId - Style ID to check\n * @returns Object with hasCircularRef flag and the cycle path if found\n * @example\n * ```typescript\n * const result = stylesManager.hasCircularReference('MyStyle');\n * if (result.hasCircularRef) {\n * console.log('Circular reference found:', result.cyclePath?.join(' -> '));\n * }\n * ```\n */\n hasCircularReference(styleId: string): {\n hasCircularRef: boolean;\n cyclePath?: string[];\n } {\n const visited = new Set<string>();\n const path: string[] = [];\n let current = this.getStyle(styleId);\n\n while (current) {\n const currentId = current.getStyleId();\n\n if (visited.has(currentId)) {\n path.push(currentId);\n return { hasCircularRef: true, cyclePath: path };\n }\n\n visited.add(currentId);\n path.push(currentId);\n const props = current.getProperties();\n current = props.basedOn ? this.getStyle(props.basedOn) : undefined;\n }\n\n return { hasCircularRef: false };\n }\n\n /**\n * Gets all styles that inherit from a base style\n * @param baseStyleId - Base style ID to find children for\n * @returns Array of styles that inherit from the base style\n * @example\n * ```typescript\n * const children = stylesManager.getDerivedStyles('Normal');\n * console.log(`Styles based on Normal: ${children.map(s => s.getName()).join(', ')}`);\n * ```\n */\n getDerivedStyles(baseStyleId: string): Style[] {\n return this.getAllStyles().filter((style) => style.getProperties().basedOn === baseStyleId);\n }\n\n /**\n * Exports a single style as JSON string\n * @param styleId - Style ID to export\n * @returns JSON representation of the style\n * @throws Error if style doesn't exist\n * @example\n * ```typescript\n * const json = stylesManager.exportStyle('Heading1');\n * console.log('Style JSON:', json);\n *\n * // Save to file\n * await fs.writeFile('heading1-style.json', json);\n * ```\n */\n exportStyle(styleId: string): string {\n const style = this.getStyle(styleId);\n if (!style) {\n throw new Error(`Style '${styleId}' not found`);\n }\n return JSON.stringify(style.getProperties(), null, 2);\n }\n\n /**\n * Imports a style from JSON string\n * @param json - JSON string containing style properties\n * @returns The imported style\n * @throws Error if JSON is invalid or style creation fails\n * @example\n * ```typescript\n * const json = await fs.readFile('custom-style.json', 'utf8');\n * const style = stylesManager.importStyle(json);\n * console.log(`Imported style: ${style.getName()}`);\n * ```\n */\n importStyle(json: string): Style {\n try {\n const props = JSON.parse(json);\n const style = Style.create(props);\n this.addStyle(style);\n return style;\n } catch (error: unknown) {\n throw new Error(\n `Failed to import style: ${error instanceof Error ? error.message : 'Invalid JSON'}`\n );\n }\n }\n\n /**\n * Exports all styles as JSON string\n * @returns JSON array of all style properties\n * @example\n * ```typescript\n * const allStylesJson = stylesManager.exportAllStyles();\n * console.log('All styles exported');\n *\n * // Save to file\n * await fs.writeFile('all-styles.json', allStylesJson);\n * ```\n */\n exportAllStyles(): string {\n const styles = this.getAllStyles().map((style) => style.getProperties());\n return JSON.stringify(styles, null, 2);\n }\n\n /**\n * Imports multiple styles from JSON array string\n * @param json - JSON string containing array of style properties\n * @returns Array of imported styles\n * @throws Error if JSON is invalid or style creation fails\n * @example\n * ```typescript\n * const json = await fs.readFile('styles-collection.json', 'utf8');\n * const styles = stylesManager.importStyles(json);\n * console.log(`Imported ${styles.length} styles`);\n * ```\n */\n importStyles(json: string): Style[] {\n try {\n const propsArray = JSON.parse(json);\n if (!Array.isArray(propsArray)) {\n throw new Error('JSON must contain an array of style properties');\n }\n\n const styles: Style[] = [];\n for (const props of propsArray) {\n const style = Style.create(props);\n this.addStyle(style);\n styles.push(style);\n }\n\n return styles;\n } catch (error: unknown) {\n throw new Error(\n `Failed to import styles: ${error instanceof Error ? error.message : 'Invalid JSON'}`\n );\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"StylesManager.js","sourceRoot":"","sources":["../../src/formatting/StylesManager.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * StylesManager - Manages the collection of styles in a document\n * Handles style registration, retrieval, and styles.xml generation\n */\n\nimport { Paragraph } from '../elements/Paragraph.js';\nimport { XMLBuilder } from '../xml/XMLBuilder.js';\nimport { XMLParser } from '../xml/XMLParser.js';\nimport { Style, StyleType } from './Style.js';\n\n/**\n * Configuration for latent styles (w:latentStyles per ECMA-376 §17.7.4.6)\n * Controls which built-in styles are shown in the Word UI gallery\n */\nexport interface LatentStylesConfig {\n /** Default locked state for built-in styles */\n defaultLockedState?: boolean;\n /** Default UI priority for built-in styles */\n defaultUiPriority?: number;\n /** Default semi-hidden state */\n defaultSemiHidden?: boolean;\n /** Default unhide-when-used state */\n defaultUnhideWhenUsed?: boolean;\n /** Default quick format flag */\n defaultQFormat?: boolean;\n /** Total count of style definitions */\n count?: number;\n}\n\n/**\n * Exception to latent style defaults (w:lsdException per ECMA-376 §17.7.4.7)\n */\nexport interface LatentStyleException {\n /** Style name */\n name: string;\n /** Override: locked state */\n locked?: boolean;\n /** Override: UI priority */\n uiPriority?: number;\n /** Override: semi-hidden */\n semiHidden?: boolean;\n /** Override: unhide when used */\n unhideWhenUsed?: boolean;\n /** Override: quick format */\n qFormat?: boolean;\n}\n\n/**\n * Result of XML validation\n */\nexport interface ValidationResult {\n /** Whether the XML is valid */\n isValid: boolean;\n /** Validation errors if any */\n errors: string[];\n /** Validation warnings if any */\n warnings: string[];\n /** Number of styles found */\n styleCount: number;\n /** List of style IDs found */\n styleIds: string[];\n}\n\n/**\n * Manages document styles\n */\nexport class StylesManager {\n private styles = new Map<string, Style>();\n private includeBuiltInStyles: boolean;\n\n // Track if styles have been modified (for XML preservation)\n private _modified = false;\n\n // Track which specific styles have been modified (for selective merging)\n private _modifiedStyleIds = new Set<string>();\n\n // Latent styles configuration\n private latentStyles?: LatentStylesConfig;\n private latentStyleExceptions: LatentStyleException[] = [];\n\n /**\n * Registry of built-in style factory functions\n * Maps style ID to factory function for lazy loading\n */\n private static readonly BUILT_IN_STYLE_FACTORIES = new Map<string, () => Style>([\n ['Normal', () => Style.createNormalStyle()],\n ['Heading1', () => Style.createHeadingStyle(1)],\n ['Heading2', () => Style.createHeadingStyle(2)],\n ['Heading3', () => Style.createHeadingStyle(3)],\n ['Heading4', () => Style.createHeadingStyle(4)],\n ['Heading5', () => Style.createHeadingStyle(5)],\n ['Heading6', () => Style.createHeadingStyle(6)],\n ['Heading7', () => Style.createHeadingStyle(7)],\n ['Heading8', () => Style.createHeadingStyle(8)],\n ['Heading9', () => Style.createHeadingStyle(9)],\n ['Heading1Char', () => Style.createHeadingCharStyle(1)],\n ['Heading2Char', () => Style.createHeadingCharStyle(2)],\n ['Heading3Char', () => Style.createHeadingCharStyle(3)],\n ['Heading4Char', () => Style.createHeadingCharStyle(4)],\n ['Heading5Char', () => Style.createHeadingCharStyle(5)],\n ['Heading6Char', () => Style.createHeadingCharStyle(6)],\n ['Heading7Char', () => Style.createHeadingCharStyle(7)],\n ['Heading8Char', () => Style.createHeadingCharStyle(8)],\n ['Heading9Char', () => Style.createHeadingCharStyle(9)],\n ['Title', () => Style.createTitleStyle()],\n ['Subtitle', () => Style.createSubtitleStyle()],\n ['ListParagraph', () => Style.createListParagraphStyle()],\n ['TOCHeading', () => Style.createTOCHeadingStyle()],\n ['TableNormal', () => Style.createTableNormalStyle()],\n ['TableGrid', () => Style.createTableGridStyle()],\n ]);\n\n /**\n * Creates a new StylesManager\n * @param includeBuiltInStyles - Whether to include built-in styles (default: true)\n */\n constructor(includeBuiltInStyles = true) {\n this.includeBuiltInStyles = includeBuiltInStyles;\n\n // Always load Normal style if built-in styles are enabled\n // Normal is required and referenced by most other styles\n if (includeBuiltInStyles) {\n this.ensureStyleLoaded('Normal');\n }\n }\n\n /**\n * Ensures a built-in style is loaded (lazy loading)\n * @param styleId - Style ID to load\n */\n private ensureStyleLoaded(styleId: string): void {\n // Already loaded?\n if (this.styles.has(styleId)) {\n return;\n }\n\n // Built-in styles disabled?\n if (!this.includeBuiltInStyles) {\n return;\n }\n\n // Is this a built-in style?\n const factory = StylesManager.BUILT_IN_STYLE_FACTORIES.get(styleId);\n if (factory) {\n this.styles.set(styleId, factory());\n }\n }\n\n /**\n * Adds a style to the collection\n * @param style - Style to add\n * @returns This manager for chaining\n */\n addStyle(style: Style): this {\n const existing = this.styles.get(style.getStyleId());\n if (existing) {\n // Preserve isDefault flag if replacing an existing default style\n if (existing.getIsDefault() && !style.getIsDefault()) {\n style.setIsDefault(true);\n }\n // Preserve structural properties from existing style if not explicitly set on new\n const newProps = style.getProperties();\n const existingProps = existing.getProperties();\n if (newProps.basedOn === undefined && existingProps.basedOn !== undefined) {\n style.setBasedOn(existingProps.basedOn);\n }\n if (newProps.next === undefined && existingProps.next !== undefined) {\n style.setNext(existingProps.next);\n }\n if (newProps.link === undefined && existingProps.link !== undefined) {\n style.setLink(existingProps.link);\n }\n if (newProps.uiPriority === undefined && existingProps.uiPriority !== undefined) {\n style.setUiPriority(existingProps.uiPriority);\n }\n }\n this.styles.set(style.getStyleId(), style);\n this._modifiedStyleIds.add(style.getStyleId());\n this._modified = true;\n return this;\n }\n\n /**\n * Gets a style by ID\n * Lazy-loads built-in styles on first access\n * @param styleId - Style ID to retrieve\n * @returns The style, or undefined if not found\n */\n getStyle(styleId: string): Style | undefined {\n // Ensure built-in style is loaded if applicable\n this.ensureStyleLoaded(styleId);\n return this.styles.get(styleId);\n }\n\n /**\n * Clones an existing style with a new ID and optional name\n *\n * Deep-copies the source style (including all run, paragraph, and table\n * formatting) and registers the clone with the new ID. If `newName` is\n * not provided, the clone's name is set to the new ID.\n *\n * @param sourceId - ID of the style to clone\n * @param newId - ID for the cloned style (must be unique)\n * @param newName - Display name for the clone (defaults to newId)\n * @returns The cloned Style, or undefined if source not found\n *\n * @example\n * ```typescript\n * // Create a variant of Heading1\n * const variant = stylesManager.cloneStyle('Heading1', 'Heading1Blue', 'Blue Heading 1');\n * variant?.setRunFormatting({ ...variant.getRunFormatting(), color: '0000FF' });\n *\n * // Clone a custom style for a different section\n * stylesManager.cloneStyle('CustomNote', 'CustomNoteAlt');\n * ```\n */\n cloneStyle(sourceId: string, newId: string, newName?: string): Style | undefined {\n const source = this.getStyle(sourceId);\n if (!source) return undefined;\n\n const props = source.getProperties();\n props.styleId = newId;\n props.name = newName ?? newId;\n props.isDefault = false; // Clones should never be default\n\n const cloned = new Style(props);\n this.addStyle(cloned);\n return cloned;\n }\n\n /**\n * Checks if a style exists or can be loaded\n * @param styleId - Style ID to check\n * @returns True if the style exists or is a built-in style\n */\n hasStyle(styleId: string): boolean {\n // Check if already loaded\n if (this.styles.has(styleId)) {\n return true;\n }\n\n // Check if it's a built-in style that can be loaded\n return this.includeBuiltInStyles && StylesManager.BUILT_IN_STYLE_FACTORIES.has(styleId);\n }\n\n /**\n * Removes a style from the collection\n * @param styleId - Style ID to remove\n * @returns True if the style was removed\n */\n removeStyle(styleId: string): boolean {\n return this.styles.delete(styleId);\n }\n\n /**\n * Gets all styles\n * @returns Array of all styles\n */\n getAllStyles(): Style[] {\n return Array.from(this.styles.values());\n }\n\n /**\n * Checks if styles have been modified since loading\n * Used for XML preservation optimization\n * @returns True if styles were added or modified\n */\n isModified(): boolean {\n return this._modified;\n }\n\n /**\n * Resets the modified flag\n * Called after parsing to indicate that loaded styles don't count as modifications\n */\n resetModified(): void {\n this._modified = false;\n this._modifiedStyleIds.clear();\n }\n\n /**\n * Gets the IDs of styles that have been modified since loading\n * Used for selective merging with original styles.xml\n * @returns Set of modified style IDs\n */\n getModifiedStyleIds(): Set<string> {\n return new Set(this._modifiedStyleIds);\n }\n\n /**\n * Gets styles by type\n * @param type - Style type to filter by\n * @returns Array of styles matching the type\n */\n getStylesByType(type: StyleType): Style[] {\n return this.getAllStyles().filter((style) => style.getType() === type);\n }\n\n /**\n * Gets quick styles (styles that appear in the style gallery)\n * A style appears in the gallery when qFormat=true AND semiHidden=false\n * @returns Array of quick styles\n */\n getQuickStyles(): Style[] {\n return this.getAllStyles().filter((style) => {\n const props = style.getProperties();\n const isQuick = props.qFormat === true || (!props.customStyle && props.qFormat !== false);\n const isVisible = !props.semiHidden;\n return isQuick && isVisible;\n });\n }\n\n /**\n * Gets visible styles (not semi-hidden)\n * @returns Array of visible styles\n */\n getVisibleStyles(): Style[] {\n return this.getAllStyles().filter((style) => {\n const props = style.getProperties();\n return !props.semiHidden;\n });\n }\n\n /**\n * Gets styles sorted by UI priority\n * Lower priority values appear first (higher importance)\n * Styles without priority appear last\n * @returns Array of styles sorted by priority\n */\n getStylesByPriority(): Style[] {\n return this.getAllStyles().sort((a, b) => {\n const propsA = a.getProperties();\n const propsB = b.getProperties();\n\n const priorityA = propsA.uiPriority ?? 999;\n const priorityB = propsB.uiPriority ?? 999;\n\n return priorityA - priorityB;\n });\n }\n\n /**\n * Gets the linked style for a given style\n * @param styleId - Style ID to find the linked style for\n * @returns The linked style, or undefined if not found\n */\n getLinkedStyle(styleId: string): Style | undefined {\n const style = this.getStyle(styleId);\n if (!style) {\n return undefined;\n }\n\n const props = style.getProperties();\n if (!props.link) {\n return undefined;\n }\n\n return this.getStyle(props.link);\n }\n\n /**\n * Gets all table styles (Phase 5.1)\n * @returns Array of table styles\n */\n getTableStyles(): Style[] {\n return this.getAllStyles().filter((style) => style.getType() === 'table');\n }\n\n /**\n * Creates and adds a table style (Phase 5.1)\n * @param styleId - Style ID\n * @param name - Style name\n * @param basedOn - Base style ID (optional)\n * @returns The created table style\n */\n createTableStyle(styleId: string, name: string, basedOn?: string): Style {\n const style = Style.create({\n styleId,\n name,\n type: 'table',\n basedOn,\n customStyle: true,\n });\n this.addStyle(style);\n return style;\n }\n\n /**\n * Gets the number of styles\n * @returns Number of styles\n */\n getStyleCount(): number {\n return this.styles.size;\n }\n\n /**\n * Clears all styles\n * @returns This manager for chaining\n */\n clear(): this {\n this.styles.clear();\n return this;\n }\n\n /**\n * Gets all available built-in style IDs\n * @returns Array of built-in style IDs\n */\n static getBuiltInStyleIds(): string[] {\n return Array.from(StylesManager.BUILT_IN_STYLE_FACTORIES.keys());\n }\n\n /**\n * Checks if a style ID is a built-in style\n * @param styleId - Style ID to check\n * @returns True if the style is a built-in style\n */\n static isBuiltInStyle(styleId: string): boolean {\n return StylesManager.BUILT_IN_STYLE_FACTORIES.has(styleId);\n }\n\n /**\n * Gets statistics about loaded vs available styles\n * @returns Object with style statistics\n */\n getStats(): {\n loadedStyles: number;\n availableBuiltInStyles: number;\n customStyles: number;\n } {\n const loadedStyles = this.styles.size;\n const customStyles = this.getAllStyles().filter((s) => s.getProperties().customStyle).length;\n\n return {\n loadedStyles,\n availableBuiltInStyles: this.includeBuiltInStyles\n ? StylesManager.BUILT_IN_STYLE_FACTORIES.size\n : 0,\n customStyles,\n };\n }\n\n /**\n * Creates a new paragraph style\n * @param styleId - Unique style ID\n * @param name - Display name\n * @param basedOn - Parent style ID (optional)\n * @returns The created style\n */\n createParagraphStyle(styleId: string, name: string, basedOn?: string): Style {\n const style = Style.create({\n styleId,\n name,\n type: 'paragraph',\n basedOn,\n customStyle: true,\n });\n this.addStyle(style);\n return style;\n }\n\n /**\n * Creates a new character style\n * @param styleId - Unique style ID\n * @param name - Display name\n * @param basedOn - Parent style ID (optional)\n * @returns The created style\n */\n createCharacterStyle(styleId: string, name: string, basedOn?: string): Style {\n const style = Style.create({\n styleId,\n name,\n type: 'character',\n basedOn,\n customStyle: true,\n });\n this.addStyle(style);\n return style;\n }\n\n /**\n * Sets the latent styles configuration\n * @param config - Latent styles configuration\n */\n setLatentStyles(config: LatentStylesConfig): this {\n this.latentStyles = config;\n this._modified = true;\n return this;\n }\n\n /**\n * Gets the latent styles configuration\n */\n getLatentStyles(): LatentStylesConfig | undefined {\n return this.latentStyles;\n }\n\n /**\n * Adds a latent style exception\n * @param exception - The exception to add\n */\n addLatentStyleException(exception: LatentStyleException): this {\n // Replace existing exception for same name\n const idx = this.latentStyleExceptions.findIndex((e) => e.name === exception.name);\n if (idx >= 0) {\n this.latentStyleExceptions[idx] = exception;\n } else {\n this.latentStyleExceptions.push(exception);\n }\n this._modified = true;\n return this;\n }\n\n /**\n * Gets all latent style exceptions\n */\n getLatentStyleExceptions(): LatentStyleException[] {\n return [...this.latentStyleExceptions];\n }\n\n /**\n * Generates the complete styles.xml file\n * @returns XML string for word/styles.xml\n */\n generateStylesXml(): string {\n const builder = new XMLBuilder();\n\n // Create styles element with namespace\n const stylesChildren = [];\n\n // Add document defaults\n stylesChildren.push(this.generateDocDefaults());\n\n // Add latent styles if configured (per ECMA-376 CT_Styles order: docDefaults, latentStyles, style*)\n if (this.latentStyles) {\n stylesChildren.push(this.generateLatentStyles());\n }\n\n // Add all styles\n for (const style of this.getAllStyles()) {\n stylesChildren.push(style.toXML());\n }\n\n builder.element(\n 'w:styles',\n {\n 'xmlns:w': 'http://schemas.openxmlformats.org/wordprocessingml/2006/main',\n 'xmlns:r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',\n },\n stylesChildren\n );\n\n return builder.build(true);\n }\n\n /**\n * Generates document defaults\n */\n private generateDocDefaults() {\n const rPrDefaultChildren = [\n XMLBuilder.wSelf('rFonts', {\n 'w:ascii': 'Calibri',\n 'w:hAnsi': 'Calibri',\n 'w:eastAsia': 'Calibri',\n 'w:cs': 'Calibri',\n }),\n XMLBuilder.wSelf('sz', { 'w:val': '22' }), // 11pt\n XMLBuilder.wSelf('szCs', { 'w:val': '22' }),\n XMLBuilder.wSelf('lang', {\n 'w:val': 'en-US',\n 'w:eastAsia': 'en-US',\n 'w:bidi': 'ar-SA',\n }),\n ];\n\n const pPrDefaultChildren = [\n XMLBuilder.wSelf('spacing', {\n 'w:after': '200',\n 'w:line': '276',\n 'w:lineRule': 'auto',\n }),\n ];\n\n return XMLBuilder.w('docDefaults', undefined, [\n XMLBuilder.w('rPrDefault', undefined, [XMLBuilder.w('rPr', undefined, rPrDefaultChildren)]),\n XMLBuilder.w('pPrDefault', undefined, [XMLBuilder.w('pPr', undefined, pPrDefaultChildren)]),\n ]);\n }\n\n /**\n * Generates the latent styles XML element\n */\n private generateLatentStyles() {\n if (!this.latentStyles) return XMLBuilder.w('latentStyles', {}, []);\n\n const attrs: Record<string, string> = {};\n if (this.latentStyles.defaultLockedState !== undefined) {\n attrs['w:defLockedState'] = this.latentStyles.defaultLockedState ? '1' : '0';\n }\n if (this.latentStyles.defaultUiPriority !== undefined) {\n attrs['w:defUIPriority'] = this.latentStyles.defaultUiPriority.toString();\n }\n if (this.latentStyles.defaultSemiHidden !== undefined) {\n attrs['w:defSemiHidden'] = this.latentStyles.defaultSemiHidden ? '1' : '0';\n }\n if (this.latentStyles.defaultUnhideWhenUsed !== undefined) {\n attrs['w:defUnhideWhenUsed'] = this.latentStyles.defaultUnhideWhenUsed ? '1' : '0';\n }\n if (this.latentStyles.defaultQFormat !== undefined) {\n attrs['w:defQFormat'] = this.latentStyles.defaultQFormat ? '1' : '0';\n }\n if (this.latentStyles.count !== undefined) {\n attrs['w:count'] = this.latentStyles.count.toString();\n }\n\n const children = this.latentStyleExceptions.map((exc) => {\n const excAttrs: Record<string, string> = { 'w:name': exc.name };\n if (exc.locked !== undefined) excAttrs['w:locked'] = exc.locked ? '1' : '0';\n if (exc.uiPriority !== undefined) excAttrs['w:uiPriority'] = exc.uiPriority.toString();\n if (exc.semiHidden !== undefined) excAttrs['w:semiHidden'] = exc.semiHidden ? '1' : '0';\n if (exc.unhideWhenUsed !== undefined)\n excAttrs['w:unhideWhenUsed'] = exc.unhideWhenUsed ? '1' : '0';\n if (exc.qFormat !== undefined) excAttrs['w:qFormat'] = exc.qFormat ? '1' : '0';\n return XMLBuilder.wSelf('lsdException', excAttrs);\n });\n\n return XMLBuilder.w('latentStyles', attrs, children);\n }\n\n /**\n * Creates a new StylesManager with built-in styles\n * @returns New StylesManager instance\n */\n static create(): StylesManager {\n return new StylesManager(true);\n }\n\n /**\n * Creates an empty StylesManager (no built-in styles)\n * @returns New empty StylesManager instance\n */\n static createEmpty(): StylesManager {\n return new StylesManager(false);\n }\n\n /**\n * Validates styles.xml content for structure and correctness\n *\n * This performs string-based validation to avoid XML parsing corruption.\n * It checks for:\n * - Well-formed XML structure\n * - Required w:styles root element\n * - Valid style definitions\n * - No duplicate style IDs\n * - Required attributes\n *\n * @param xml - The raw styles.xml content to validate\n * @returns ValidationResult with details about validity\n */\n static validate(xml: string): ValidationResult {\n const result: ValidationResult = {\n isValid: true,\n errors: [],\n warnings: [],\n styleCount: 0,\n styleIds: [],\n };\n\n // Check for empty or null\n if (!xml || xml.trim().length === 0) {\n result.isValid = false;\n result.errors.push('Styles XML is empty or null');\n return result;\n }\n\n // Check for common corruption patterns FIRST (before parsing)\n // This catches double-encoding issues that would break the parser\n if (xml.includes('<w:') || xml.includes('>')) {\n result.isValid = false;\n result.errors.push('XML contains escaped tags - possible double-encoding corruption');\n return result;\n }\n\n // Skip complex XML structure validation - focus on w:styles specific validation\n // Checking balanced tags with regex is unreliable and can give false positives\n\n // Use XMLParser to extract root element\n const stylesContent = XMLParser.extractBetweenTags(xml, '<w:styles', '</w:styles>');\n if (!stylesContent) {\n result.isValid = false;\n result.errors.push('Missing required <w:styles> root element');\n return result;\n }\n\n // Check for namespace declaration\n if (!xml.includes('xmlns:w=')) {\n result.warnings.push('Missing WordprocessingML namespace declaration');\n }\n\n // Use XMLParser to extract all style elements\n const styleElements = XMLParser.extractElements(stylesContent, 'w:style');\n result.styleCount = styleElements.length;\n\n // Check if any styles found\n if (styleElements.length === 0) {\n result.warnings.push('No styles found in document');\n return result;\n }\n\n // Check for styles without attributes (invalid)\n const styleWithoutAttrs = styleElements.filter((el) => {\n // Check if element has any attributes\n const openTagEnd = el.indexOf('>');\n const openTag = el.substring(0, openTagEnd);\n return !openTag.includes('w:type') || !openTag.includes('w:styleId');\n });\n\n if (styleWithoutAttrs.length > 0) {\n result.isValid = false;\n result.errors.push('Style found without any attributes - w:type and w:styleId are required');\n }\n\n // Process each style element\n const foundStyleIds = new Set<string>();\n\n for (const styleElement of styleElements) {\n // Extract styleId using XMLParser\n const styleId = XMLParser.extractAttribute(styleElement, 'w:styleId');\n if (styleId) {\n // Check for duplicates\n if (foundStyleIds.has(styleId)) {\n result.isValid = false;\n result.errors.push(`Duplicate style ID found: \"${styleId}\"`);\n } else {\n foundStyleIds.add(styleId);\n result.styleIds.push(styleId);\n }\n } else {\n result.isValid = false;\n result.errors.push('Style found without required w:styleId attribute');\n }\n\n // Extract and validate type using XMLParser\n const type = XMLParser.extractAttribute(styleElement, 'w:type');\n if (type) {\n if (!['paragraph', 'character', 'table', 'numbering'].includes(type)) {\n result.warnings.push(`Invalid style type: \"${type}\"`);\n }\n } else {\n result.isValid = false;\n result.errors.push('Style found without required w:type attribute');\n }\n\n // Check for circular references - extract basedOn value\n const basedOnElement = XMLParser.extractElements(styleElement, 'w:basedOn')[0];\n if (basedOnElement && styleId) {\n const basedOn = XMLParser.extractAttribute(basedOnElement, 'w:val');\n if (basedOn && styleId === basedOn) {\n result.isValid = false;\n result.errors.push(`Circular reference detected: style \"${styleId}\" based on itself`);\n }\n }\n }\n\n // Check for required Normal style\n if (!foundStyleIds.has('Normal')) {\n result.warnings.push('Missing \"Normal\" style - document may not render correctly');\n }\n\n // Check for BOM or invalid characters\n if (xml.charCodeAt(0) === 0xfeff) {\n result.warnings.push('XML contains BOM (Byte Order Mark) - may cause parsing issues');\n }\n\n // Summary\n if (result.styleCount === 0) {\n result.warnings.push('No styles found in document');\n }\n\n return result;\n }\n\n /**\n * Searches styles by name (case-insensitive)\n * @param searchTerm - Text to search for in style names\n * @returns Array of styles whose names contain the search term\n * @example\n * ```typescript\n * const headings = stylesManager.searchByName('heading');\n * console.log(`Found ${headings.length} heading styles`);\n * ```\n */\n searchByName(searchTerm: string): Style[] {\n const term = searchTerm.toLowerCase();\n return this.getAllStyles().filter((style) => style.getName().toLowerCase().includes(term));\n }\n\n /**\n * Finds styles using a specific font\n * @param fontName - Font family name to search for\n * @returns Array of styles that use the specified font\n * @example\n * ```typescript\n * const arialStyles = stylesManager.findByFont('Arial');\n * console.log(`Found ${arialStyles.length} styles using Arial font`);\n * ```\n */\n findByFont(fontName: string): Style[] {\n return this.getAllStyles().filter((style) => {\n const runFormatting = style.getRunFormatting();\n return runFormatting?.font === fontName;\n });\n }\n\n /**\n * Finds styles with specific properties using a predicate function\n * @param predicate - Filter function that returns true for styles to include\n * @returns Array of styles matching the predicate\n * @example\n * ```typescript\n * // Find all paragraph styles\n * const paraStyles = stylesManager.findStyles(s => s.getType() === 'paragraph');\n *\n * // Find styles with custom formatting\n * const customStyles = stylesManager.findStyles(s => s.getProperties().customStyle);\n *\n * // Find styles with specific formatting\n * const boldStyles = stylesManager.findStyles(s => s.getRunFormatting()?.bold);\n * ```\n */\n findStyles(predicate: (style: Style) => boolean): Style[] {\n return this.getAllStyles().filter(predicate);\n }\n\n /**\n * Finds unused styles (not referenced by any paragraphs)\n * @param paragraphs - All paragraphs in the document to check against\n * @returns Array of unused style IDs\n * @example\n * ```typescript\n * const doc = Document.create();\n * const unused = stylesManager.findUnusedStyles(doc.getAllParagraphs());\n * console.log(`Found ${unused.length} unused styles: ${unused.join(', ')}`);\n * ```\n */\n findUnusedStyles(paragraphs: Paragraph[]): string[] {\n const usedStyles = new Set<string>();\n\n // Collect all style IDs used by paragraphs\n for (const para of paragraphs) {\n const styleId = para.getStyle();\n if (styleId) {\n usedStyles.add(styleId);\n }\n }\n\n // Get all style IDs and filter out used ones\n const allStyleIds = this.getAllStyles().map((style) => style.getStyleId());\n return allStyleIds.filter((styleId) => !usedStyles.has(styleId));\n }\n\n /**\n * Removes all unused styles from the document\n * @param paragraphs - All paragraphs in the document to check against\n * @returns Number of styles removed\n * @example\n * ```typescript\n * const doc = Document.create();\n * const removedCount = stylesManager.cleanupUnusedStyles(doc.getAllParagraphs());\n * console.log(`Cleaned up ${removedCount} unused styles`);\n * ```\n */\n cleanupUnusedStyles(paragraphs: Paragraph[]): number {\n const unused = this.findUnusedStyles(paragraphs);\n let count = 0;\n\n for (const styleId of unused) {\n // Don't remove built-in styles\n if (!StylesManager.isBuiltInStyle(styleId)) {\n if (this.removeStyle(styleId)) {\n count++;\n }\n }\n }\n\n return count;\n }\n\n /**\n * Validates all style references for broken or circular dependencies\n * @returns Validation result with broken references and circular dependencies\n * @example\n * ```typescript\n * const validation = stylesManager.validateStyleReferences();\n * if (!validation.valid) {\n * console.log('Broken references:', validation.brokenReferences);\n * console.log('Circular references:', validation.circularReferences);\n * }\n * ```\n */\n validateStyleReferences(): {\n valid: boolean;\n brokenReferences: { styleId: string; basedOn: string }[];\n circularReferences: string[][];\n } {\n const broken: { styleId: string; basedOn: string }[] = [];\n const circular: string[][] = [];\n const checkedForCycles = new Set<string>();\n\n for (const style of this.getAllStyles()) {\n const props = style.getProperties();\n\n // Check basedOn references exist\n if (props.basedOn && !this.hasStyle(props.basedOn)) {\n broken.push({ styleId: props.styleId, basedOn: props.basedOn });\n }\n\n // Check for circular references (only if not already checked as part of another cycle)\n if (!checkedForCycles.has(props.styleId)) {\n const result = this.hasCircularReference(props.styleId);\n if (result.hasCircularRef && result.cyclePath) {\n circular.push(result.cyclePath);\n // Mark all styles in this cycle as checked\n result.cyclePath.forEach((id) => checkedForCycles.add(id));\n }\n }\n }\n\n return {\n valid: broken.length === 0 && circular.length === 0,\n brokenReferences: broken,\n circularReferences: circular,\n };\n }\n\n /**\n * Gets the complete inheritance chain for a style\n * @param styleId - Style ID to analyze\n * @returns Array of styles from base to derived (base style first)\n * @throws Error if style doesn't exist or circular reference detected\n * @example\n * ```typescript\n * const chain = stylesManager.getInheritanceChain('Heading1');\n * console.log('Inheritance chain:', chain.map(s => s.getName()));\n * // Output: ['Normal', 'Heading1'] (Normal is base, Heading1 inherits from it)\n * ```\n */\n getInheritanceChain(styleId: string): Style[] {\n const chain: Style[] = [];\n const visited = new Set<string>(); // Track visited styles to detect cycles\n let current = this.getStyle(styleId);\n\n if (!current) {\n throw new Error(`Style '${styleId}' not found`);\n }\n\n while (current) {\n const currentId = current.getStyleId();\n\n // Detect circular reference\n if (visited.has(currentId)) {\n const cycle = [...chain.map((s) => s.getStyleId()), currentId];\n throw new Error(\n `Circular style reference detected: ${cycle.join(' -> ')}. ` +\n `Style '${currentId}' references itself through inheritance chain.`\n );\n }\n\n visited.add(currentId);\n chain.unshift(current); // Add to beginning to maintain base-to-derived order\n const props = current.getProperties();\n current = props.basedOn ? this.getStyle(props.basedOn) : undefined;\n }\n\n return chain;\n }\n\n /**\n * Checks if a style has circular references in its inheritance chain\n * @param styleId - Style ID to check\n * @returns Object with hasCircularRef flag and the cycle path if found\n * @example\n * ```typescript\n * const result = stylesManager.hasCircularReference('MyStyle');\n * if (result.hasCircularRef) {\n * console.log('Circular reference found:', result.cyclePath?.join(' -> '));\n * }\n * ```\n */\n hasCircularReference(styleId: string): {\n hasCircularRef: boolean;\n cyclePath?: string[];\n } {\n const visited = new Set<string>();\n const path: string[] = [];\n let current = this.getStyle(styleId);\n\n while (current) {\n const currentId = current.getStyleId();\n\n if (visited.has(currentId)) {\n path.push(currentId);\n return { hasCircularRef: true, cyclePath: path };\n }\n\n visited.add(currentId);\n path.push(currentId);\n const props = current.getProperties();\n current = props.basedOn ? this.getStyle(props.basedOn) : undefined;\n }\n\n return { hasCircularRef: false };\n }\n\n /**\n * Gets all styles that inherit from a base style\n * @param baseStyleId - Base style ID to find children for\n * @returns Array of styles that inherit from the base style\n * @example\n * ```typescript\n * const children = stylesManager.getDerivedStyles('Normal');\n * console.log(`Styles based on Normal: ${children.map(s => s.getName()).join(', ')}`);\n * ```\n */\n getDerivedStyles(baseStyleId: string): Style[] {\n return this.getAllStyles().filter((style) => style.getProperties().basedOn === baseStyleId);\n }\n\n /**\n * Exports a single style as JSON string\n * @param styleId - Style ID to export\n * @returns JSON representation of the style\n * @throws Error if style doesn't exist\n * @example\n * ```typescript\n * const json = stylesManager.exportStyle('Heading1');\n * console.log('Style JSON:', json);\n *\n * // Save to file\n * await fs.writeFile('heading1-style.json', json);\n * ```\n */\n exportStyle(styleId: string): string {\n const style = this.getStyle(styleId);\n if (!style) {\n throw new Error(`Style '${styleId}' not found`);\n }\n return JSON.stringify(style.getProperties(), null, 2);\n }\n\n /**\n * Imports a style from JSON string\n * @param json - JSON string containing style properties\n * @returns The imported style\n * @throws Error if JSON is invalid or style creation fails\n * @example\n * ```typescript\n * const json = await fs.readFile('custom-style.json', 'utf8');\n * const style = stylesManager.importStyle(json);\n * console.log(`Imported style: ${style.getName()}`);\n * ```\n */\n importStyle(json: string): Style {\n try {\n const props = JSON.parse(json);\n const style = Style.create(props);\n this.addStyle(style);\n return style;\n } catch (error: unknown) {\n throw new Error(\n `Failed to import style: ${error instanceof Error ? error.message : 'Invalid JSON'}`\n );\n }\n }\n\n /**\n * Exports all styles as JSON string\n * @returns JSON array of all style properties\n * @example\n * ```typescript\n * const allStylesJson = stylesManager.exportAllStyles();\n * console.log('All styles exported');\n *\n * // Save to file\n * await fs.writeFile('all-styles.json', allStylesJson);\n * ```\n */\n exportAllStyles(): string {\n const styles = this.getAllStyles().map((style) => style.getProperties());\n return JSON.stringify(styles, null, 2);\n }\n\n /**\n * Imports multiple styles from JSON array string\n * @param json - JSON string containing array of style properties\n * @returns Array of imported styles\n * @throws Error if JSON is invalid or style creation fails\n * @example\n * ```typescript\n * const json = await fs.readFile('styles-collection.json', 'utf8');\n * const styles = stylesManager.importStyles(json);\n * console.log(`Imported ${styles.length} styles`);\n * ```\n */\n importStyles(json: string): Style[] {\n try {\n const propsArray = JSON.parse(json);\n if (!Array.isArray(propsArray)) {\n throw new Error('JSON must contain an array of style properties');\n }\n\n const styles: Style[] = [];\n for (const props of propsArray) {\n const style = Style.create(props);\n this.addStyle(style);\n styles.push(style);\n }\n\n return styles;\n } catch (error: unknown) {\n throw new Error(\n `Failed to import styles: ${error instanceof Error ? error.message : 'Invalid JSON'}`\n );\n }\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CleanupHelper.d.ts","sourceRoot":"","sources":["../../src/helpers/CleanupHelper.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"CleanupHelper.d.ts","sourceRoot":"","sources":["../../src/helpers/CleanupHelper.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAOpD,MAAM,WAAW,cAAc;IAE7B,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAE/B,wBAAwB,CAAC,EAAE,OAAO,CAAC;IAEnC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAE/B,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB,wBAAwB,CAAC,EAAE,OAAO,CAAC;IAEnC,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,2BAA2B,EAAE,MAAM,CAAC;IACpC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,GAAG,CAAW;gBAEV,GAAG,EAAE,QAAQ;IAQzB,GAAG,IAAI,aAAa;IAuBpB,GAAG,CAAC,OAAO,EAAE,cAAc,GAAG,aAAa;IA2E3C,OAAO,CAAC,UAAU;IAgClB,OAAO,CAAC,UAAU;IA8BlB,OAAO,CAAC,kBAAkB;IAW1B,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,aAAa;IA0BrB,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,eAAe;IAgCvB,OAAO,CAAC,YAAY;IAiBpB,OAAO,CAAC,YAAY;IAiBpB,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,wBAAwB;IAgDhC,OAAO,CAAC,mBAAmB;IAoD3B,MAAM,CAAC,gBAAgB,IAAI,cAAc;IAezC,MAAM,CAAC,iBAAiB,IAAI,cAAc;IAqB1C,MAAM,CAAC,aAAa,IAAI,cAAc;CAMvC"}
|