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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NumberingLevel.js","sourceRoot":"","sources":["../../src/formatting/NumberingLevel.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * NumberingLevel - Defines formatting for a single level in a list\n *\n * A numbering level specifies how a particular list level (0-8) should be formatted,\n * including the numbering format (bullet, decimal, roman, etc.), text template,\n * alignment, and indentation.\n */\n\nimport { XMLBuilder, XMLElement } from '../xml/XMLBuilder';\n\n/**\n * Word-native bullet character mappings\n *\n * Microsoft Word uses specific fonts with Private Use Area (PUA) characters\n * for bullet points. These mappings ensure 100% compatibility with Word's\n * native bullet rendering.\n *\n * Pattern: Levels 0,3,6 = filled bullet; 1,4,7 = open circle; 2,5,8 = filled square\n */\nexport const WORD_NATIVE_BULLETS = {\n /** Filled bullet (levels 0, 3, 6) - Symbol font U+F0B7 */\n FILLED_BULLET: { char: '\\uF0B7', font: 'Symbol' },\n /** Open circle (levels 1, 4, 7) - Courier New U+006F (lowercase 'o') */\n OPEN_CIRCLE: { char: '\\u006F', font: 'Courier New' },\n /** Filled square (levels 2, 5, 8) - Wingdings U+F0A7 */\n FILLED_SQUARE: { char: '\\uF0A7', font: 'Wingdings' },\n} as const;\n\n/**\n * Type for Word-native bullet definition\n */\nexport type WordNativeBullet = (typeof WORD_NATIVE_BULLETS)[keyof typeof WORD_NATIVE_BULLETS];\n\n/**\n * Numbering format types supported by Word\n */\nexport type NumberFormat =\n | 'bullet' // Bullet character\n | 'decimal' // 1, 2, 3, ...\n | 'lowerRoman' // i, ii, iii, ...\n | 'upperRoman' // I, II, III, ...\n | 'lowerLetter' // a, b, c, ...\n | 'upperLetter' // A, B, C, ...\n | 'ordinal' // 1st, 2nd, 3rd, ...\n | 'cardinalText' // One, Two, Three, ...\n | 'ordinalText' // First, Second, Third, ...\n | 'hex' // 0x01, 0x02, ...\n | 'chicago' // *, †, ‡, §, ...\n | 'decimal zero'; // 01, 02, 03, ...\n\n/**\n * Alignment for the numbering text\n */\nexport type NumberAlignment = 'left' | 'center' | 'right' | 'start' | 'end';\n\n/**\n * Properties for creating a numbering level\n */\nexport interface NumberingLevelProperties {\n /** The level index (0-8, where 0 is the outermost level) */\n level: number;\n\n /** The numbering format */\n format: NumberFormat;\n\n /** The text template (e.g., \"%1.\" for decimal, \"•\" for bullet) */\n text: string;\n\n /** Alignment of the numbering text */\n alignment?: NumberAlignment;\n\n /** Starting value (for numeric formats, default: 1) */\n start?: number;\n\n /** Left indentation in twips (can be negative for outdents into margin) */\n leftIndent?: number;\n\n /** Hanging indentation in twips (for the text after the number) */\n hangingIndent?: number;\n\n /** Font family for the numbering character (useful for bullets) */\n font?: string;\n\n /** Font size in half-points (e.g., 22 = 11pt) */\n fontSize?: number;\n\n /** Whether to show text after the number (default: true) */\n isLegalNumberingStyle?: boolean;\n\n /** Suffix after the number (tab, space, or nothing) */\n suffix?: 'tab' | 'space' | 'nothing';\n\n /** Text color in hex (without #) */\n color?: string;\n\n /** Whether the numbering text is bold */\n bold?: boolean;\n\n /** Whether the numbering text is italic */\n italic?: boolean;\n\n /** Underline style for numbering text ('single', 'double', 'wave', 'dotted', 'dash', etc.) */\n underline?: string;\n\n /**\n * Level at which numbering should restart (w:lvlRestart per ECMA-376 Part 1 §17.9.11)\n * Specifies when to restart this level's numbering based on a higher-level change:\n * - 0: Never restart (continues throughout document)\n * - 1-8: Restart when the specified level changes\n * - undefined (default): Restart when level-1 changes (standard behavior)\n */\n lvlRestart?: number;\n\n /** Paragraph style ID linked to this numbering level (w:pStyle per ECMA-376 §17.9.23) */\n pStyle?: string;\n}\n\n/**\n * Represents a single level in a numbering definition\n */\nexport class NumberingLevel {\n private properties: Required<\n Omit<NumberingLevelProperties, 'lvlRestart' | 'underline' | 'pStyle'>\n > &\n Pick<NumberingLevelProperties, 'lvlRestart' | 'underline' | 'pStyle'>;\n\n /**\n * Creates a new numbering level\n * @param properties The level properties\n */\n constructor(properties: NumberingLevelProperties) {\n // Set defaults\n this.properties = {\n level: properties.level,\n format: properties.format,\n text: properties.text,\n alignment: properties.alignment || 'left',\n start: properties.start !== undefined ? properties.start : 1,\n leftIndent:\n properties.leftIndent !== undefined ? properties.leftIndent : 720 + properties.level * 360,\n hangingIndent: properties.hangingIndent !== undefined ? properties.hangingIndent : 360,\n font: properties.font || 'Calibri',\n fontSize: properties.fontSize || 22, // 11pt default\n isLegalNumberingStyle:\n properties.isLegalNumberingStyle !== undefined ? properties.isLegalNumberingStyle : false,\n suffix: properties.suffix || 'tab',\n color: properties.color || '000000',\n bold: properties.bold !== undefined ? properties.bold : false,\n italic: properties.italic !== undefined ? properties.italic : false,\n underline: properties.underline,\n lvlRestart: properties.lvlRestart, // undefined means default behavior (restart on level-1 change)\n pStyle: properties.pStyle,\n };\n\n this.validate();\n }\n\n /**\n * Validates the level properties\n */\n private validate(): void {\n if (this.properties.level < 0 || this.properties.level > 8) {\n throw new Error(`Level must be between 0 and 8, got ${this.properties.level}`);\n }\n\n // Note: leftIndent CAN be negative (outdent into margin) per ECMA-376\n // This is valid and used for hanging indents where bullets appear in margin\n\n if (this.properties.hangingIndent < 0) {\n throw new Error('Hanging indent must be non-negative');\n }\n\n if (this.properties.start < 0) {\n throw new Error('Start value must be non-negative');\n }\n }\n\n /**\n * Calculates safe indentation values for a given level based on page constraints.\n *\n * Use this instead of default indentation when working with narrow pages or\n * deep nesting levels to ensure content stays within page margins.\n *\n * @param level The level index (0-8)\n * @param pageWidthTwips Page width in twips (default: 12240 = 8.5 inches)\n * @param leftMarginTwips Left margin in twips (default: 1440 = 1 inch)\n * @param rightMarginTwips Right margin in twips (default: 1440 = 1 inch)\n * @param minContentWidth Minimum content width in twips (default: 2880 = 2 inches)\n * @returns Safe indentation values that won't exceed available space\n *\n * @example\n * ```typescript\n * // For a narrow page (6\" wide with 0.5\" margins)\n * const indent = NumberingLevel.calculateSafeIndentation(\n * 5, // level 5\n * 8640, // 6 inches page width\n * 720, // 0.5 inch left margin\n * 720 // 0.5 inch right margin\n * );\n * ```\n */\n static calculateSafeIndentation(\n level: number,\n pageWidthTwips = 12240,\n leftMarginTwips = 1440,\n rightMarginTwips = 1440,\n minContentWidth = 2880\n ): { leftIndent: number; hangingIndent: number } {\n if (level < 0 || level > 8) {\n throw new Error(`Invalid level ${level}. Level must be between 0 and 8.`);\n }\n\n // Calculate available content width\n const availableWidth = pageWidthTwips - leftMarginTwips - rightMarginTwips;\n\n // Calculate max safe indent (leave space for content)\n const maxSafeIndent = Math.max(0, availableWidth - minContentWidth);\n\n // Standard indentation\n const standardLeftIndent = 720 + level * 360;\n const hangingIndent = 360;\n\n // Cap at safe maximum\n const safeLeftIndent = Math.min(standardLeftIndent, maxSafeIndent);\n\n return {\n leftIndent: safeLeftIndent,\n hangingIndent,\n };\n }\n\n /**\n * Gets the level index\n */\n getLevel(): number {\n return this.properties.level;\n }\n\n /**\n * Gets the numbering format\n */\n getFormat(): NumberFormat {\n return this.properties.format;\n }\n\n /**\n * Gets the level properties\n */\n getProperties(): Required<Omit<NumberingLevelProperties, 'lvlRestart' | 'underline' | 'pStyle'>> &\n Pick<NumberingLevelProperties, 'lvlRestart' | 'underline' | 'pStyle'> {\n return { ...this.properties };\n }\n\n /**\n * Sets the left indentation\n * @param twips Indentation in twips\n */\n setLeftIndent(twips: number): this {\n // Note: Negative values are valid (outdent into margin) per ECMA-376\n this.properties.leftIndent = twips;\n return this;\n }\n\n /**\n * Sets the hanging indentation\n * @param twips Indentation in twips\n */\n setHangingIndent(twips: number): this {\n if (twips < 0) {\n throw new Error('Hanging indent must be non-negative');\n }\n this.properties.hangingIndent = twips;\n return this;\n }\n\n /**\n * Sets the font for the numbering character\n * @param font Font family name\n */\n setFont(font: string): this {\n this.properties.font = font;\n return this;\n }\n\n /**\n * Sets the alignment\n * @param alignment Alignment type\n */\n setAlignment(alignment: NumberAlignment): this {\n this.properties.alignment = alignment;\n return this;\n }\n\n /**\n * Sets the font size in half-points\n * @param halfPoints Font size in half-points (e.g., 24 = 12pt)\n */\n setFontSize(halfPoints: number): this {\n this.properties.fontSize = halfPoints;\n return this;\n }\n\n /**\n * Sets the level text (bullet character or number template)\n * @param text The text template (e.g., '•' for bullets, '%1.' for numbered)\n */\n setText(text: string): this {\n this.properties.text = text;\n return this;\n }\n\n /**\n * Sets the text color\n * @param color Hex color without # (e.g., '000000' for black)\n */\n setColor(color: string): this {\n this.properties.color = color;\n return this;\n }\n\n /**\n * Sets whether the numbering text is bold\n * @param bold Whether to make bold\n */\n setBold(bold: boolean): this {\n this.properties.bold = bold;\n return this;\n }\n\n /**\n * Sets whether the numbering text is italic\n * @param italic Whether to make italic\n */\n setItalic(italic: boolean): this {\n this.properties.italic = italic;\n return this;\n }\n\n /**\n * Gets whether the numbering text is italic\n */\n getItalic(): boolean {\n return this.properties.italic ?? false;\n }\n\n /**\n * Sets the underline style for numbering text\n * @param style Underline style ('single', 'double', 'wave', 'dotted', 'dash', etc.)\n */\n setUnderline(style: string | undefined): this {\n this.properties.underline = style;\n return this;\n }\n\n /**\n * Gets the underline style\n */\n getUnderline(): string | undefined {\n return this.properties.underline;\n }\n\n /**\n * Clears the underline style\n */\n clearUnderline(): this {\n this.properties.underline = undefined;\n return this;\n }\n\n /**\n * Sets the level restart behavior (w:lvlRestart per ECMA-376 Part 1 §17.9.11)\n *\n * Controls when this level's numbering restarts based on higher-level changes:\n * - 0: Never restart (continues throughout document)\n * - 1-8: Restart when the specified level changes\n * - undefined: Restart when level-1 changes (standard/default behavior)\n *\n * @param level The level that triggers restart (0-8), or undefined for default\n * @example\n * // Level 1 that never restarts (continuous across document)\n * level1.setLvlRestart(0);\n *\n * // Level 2 that restarts when level 0 changes (not level 1)\n * level2.setLvlRestart(0);\n */\n setLvlRestart(level: number | undefined): this {\n if (level !== undefined && (level < 0 || level > 8)) {\n throw new Error(`lvlRestart must be between 0 and 8, got ${level}`);\n }\n this.properties.lvlRestart = level;\n return this;\n }\n\n /**\n * Gets the level restart value\n * @returns The level that triggers restart, or undefined for default behavior\n */\n getLvlRestart(): number | undefined {\n return this.properties.lvlRestart;\n }\n\n /**\n * Sets the paragraph style ID linked to this numbering level\n * Links this level to a paragraph style definition (w:pStyle per ECMA-376 §17.9.23)\n * @param styleId The paragraph style ID\n */\n setParagraphStyle(styleId: string): this {\n this.properties.pStyle = styleId;\n return this;\n }\n\n /**\n * Gets the paragraph style ID linked to this numbering level\n */\n getParagraphStyle(): string | undefined {\n return this.properties.pStyle;\n }\n\n /**\n * Sets the numbering format (decimal, lowerLetter, bullet, etc.)\n * @param format The numbering format\n */\n setFormat(format: NumberFormat): this {\n this.properties.format = NumberingLevel.normalizeFormat(format);\n return this;\n }\n\n /**\n * Normalizes display-string format values to ECMA-376 ST_NumberFormat names.\n * Accepts both standard format names and common display shortcuts.\n */\n static normalizeFormat(format: string): NumberFormat {\n const corrections: Record<string, NumberFormat> = {\n 'a.': 'lowerLetter',\n 'A.': 'upperLetter',\n 'i.': 'lowerRoman',\n 'I.': 'upperRoman',\n '1.': 'decimal',\n };\n return (corrections[format] ?? format) as NumberFormat;\n }\n\n /**\n * Generates the WordprocessingML XML for this level\n */\n toXML(): XMLElement {\n // ECMA-376 CT_Lvl element order (§17.9.6):\n // start, numFmt, lvlRestart, pStyle, isLgl, suff, lvlText, lvlPicBulletId, legacy, lvlJc, pPr, rPr\n const children: XMLElement[] = [];\n\n // 1. Start value\n children.push(XMLBuilder.wSelf('start', { 'w:val': this.properties.start.toString() }));\n\n // 2. Number format\n children.push(XMLBuilder.wSelf('numFmt', { 'w:val': this.properties.format }));\n\n // 3. Level restart (w:lvlRestart per ECMA-376 Part 1 §17.9.11)\n if (this.properties.lvlRestart !== undefined) {\n children.push(\n XMLBuilder.wSelf('lvlRestart', { 'w:val': this.properties.lvlRestart.toString() })\n );\n }\n\n // 4. pStyle (paragraph style link)\n if (this.properties.pStyle) {\n children.push(XMLBuilder.wSelf('pStyle', { 'w:val': this.properties.pStyle }));\n }\n\n // 5. Legal numbering style\n if (this.properties.isLegalNumberingStyle) {\n children.push(XMLBuilder.wSelf('isLgl'));\n }\n\n // 6. Suffix (what comes after the number)\n if (this.properties.suffix) {\n children.push(XMLBuilder.wSelf('suff', { 'w:val': this.properties.suffix }));\n }\n\n // 7. Level text (e.g., \"%1.\" or \"•\")\n children.push(XMLBuilder.wSelf('lvlText', { 'w:val': this.properties.text }));\n\n // 8. Alignment\n children.push(XMLBuilder.wSelf('lvlJc', { 'w:val': this.properties.alignment }));\n\n // 9. Paragraph properties (indentation)\n const ind = XMLBuilder.wSelf('ind', {\n 'w:left': this.properties.leftIndent.toString(),\n 'w:hanging': this.properties.hangingIndent.toString(),\n });\n const pPr = XMLBuilder.w('pPr', undefined, [ind]);\n children.push(pPr);\n\n // 10. Run properties (font)\n const rPrChildren: XMLElement[] = [];\n\n // Font\n rPrChildren.push(\n XMLBuilder.wSelf('rFonts', {\n 'w:ascii': this.properties.font,\n 'w:hAnsi': this.properties.font,\n 'w:cs': this.properties.font,\n 'w:hint': 'default',\n })\n );\n\n // Bold\n if (this.properties.bold) {\n rPrChildren.push(XMLBuilder.wSelf('b'));\n rPrChildren.push(XMLBuilder.wSelf('bCs'));\n }\n\n // Italic\n if (this.properties.italic) {\n rPrChildren.push(XMLBuilder.wSelf('i'));\n rPrChildren.push(XMLBuilder.wSelf('iCs'));\n }\n\n // CT_RPr element order per ECMA-376 §17.3.2.28:\n // ... b, bCs, i, iCs, ... color (#19), ... sz (#24), szCs (#25), ... u (#27)\n\n // Color (#19)\n if (this.properties.color) {\n rPrChildren.push(XMLBuilder.wSelf('color', { 'w:val': this.properties.color }));\n }\n\n // Font size (#24, #25)\n rPrChildren.push(XMLBuilder.wSelf('sz', { 'w:val': this.properties.fontSize.toString() }));\n rPrChildren.push(XMLBuilder.wSelf('szCs', { 'w:val': this.properties.fontSize.toString() }));\n\n // Underline (#27)\n if (this.properties.underline) {\n rPrChildren.push(XMLBuilder.wSelf('u', { 'w:val': this.properties.underline }));\n }\n\n const rPr = XMLBuilder.w('rPr', undefined, rPrChildren);\n children.push(rPr);\n\n return XMLBuilder.w('lvl', { 'w:ilvl': this.properties.level.toString() }, children);\n }\n\n /**\n * Gets the recommended bullet symbol and font for a given level\n * @param level The level index (0-8)\n * @param style Optional bullet style ('standard', 'circle', 'square', 'arrow', 'check', 'word-native')\n * @returns Object with symbol and font properties\n */\n static getBulletSymbolWithFont(\n level: number,\n style: 'standard' | 'circle' | 'square' | 'arrow' | 'check' | 'word-native' = 'standard'\n ): { symbol: string; font: string } {\n const bulletSets = {\n // Standard style now uses Word-native encoding for maximum compatibility\n standard: [\n {\n symbol: WORD_NATIVE_BULLETS.FILLED_BULLET.char,\n font: WORD_NATIVE_BULLETS.FILLED_BULLET.font,\n }, // Level 0: Filled bullet (Symbol U+F0B7)\n {\n symbol: WORD_NATIVE_BULLETS.OPEN_CIRCLE.char,\n font: WORD_NATIVE_BULLETS.OPEN_CIRCLE.font,\n }, // Level 1: Open circle (Courier New U+006F)\n {\n symbol: WORD_NATIVE_BULLETS.FILLED_SQUARE.char,\n font: WORD_NATIVE_BULLETS.FILLED_SQUARE.font,\n }, // Level 2: Filled square (Wingdings U+F0A7)\n {\n symbol: WORD_NATIVE_BULLETS.FILLED_BULLET.char,\n font: WORD_NATIVE_BULLETS.FILLED_BULLET.font,\n }, // Level 3: Filled bullet\n {\n symbol: WORD_NATIVE_BULLETS.OPEN_CIRCLE.char,\n font: WORD_NATIVE_BULLETS.OPEN_CIRCLE.font,\n }, // Level 4: Open circle\n {\n symbol: WORD_NATIVE_BULLETS.FILLED_SQUARE.char,\n font: WORD_NATIVE_BULLETS.FILLED_SQUARE.font,\n }, // Level 5: Filled square\n {\n symbol: WORD_NATIVE_BULLETS.FILLED_BULLET.char,\n font: WORD_NATIVE_BULLETS.FILLED_BULLET.font,\n }, // Level 6: Filled bullet\n {\n symbol: WORD_NATIVE_BULLETS.OPEN_CIRCLE.char,\n font: WORD_NATIVE_BULLETS.OPEN_CIRCLE.font,\n }, // Level 7: Open circle\n {\n symbol: WORD_NATIVE_BULLETS.FILLED_SQUARE.char,\n font: WORD_NATIVE_BULLETS.FILLED_SQUARE.font,\n }, // Level 8: Filled square\n ],\n circle: [\n { symbol: '●', font: 'Calibri' }, // Level 0: Filled circle (bold)\n { symbol: '○', font: 'Calibri' }, // Level 1: Empty circle\n { symbol: '◉', font: 'Calibri' }, // Level 2: Fisheye\n { symbol: '◯', font: 'Calibri' }, // Level 3: Large circle\n { symbol: '⦿', font: 'Calibri' }, // Level 4: Circled bullet\n { symbol: '○', font: 'Calibri' }, // Level 5: Empty circle\n { symbol: '●', font: 'Calibri' }, // Level 6: Filled circle\n { symbol: '○', font: 'Calibri' }, // Level 7: Empty circle\n { symbol: '◉', font: 'Calibri' }, // Level 8: Fisheye\n ],\n square: [\n { symbol: '■', font: 'Calibri' }, // Level 0: Filled square\n { symbol: '□', font: 'Calibri' }, // Level 1: Empty square\n { symbol: '▪', font: 'Calibri' }, // Level 2: Small filled square\n { symbol: '▫', font: 'Calibri' }, // Level 3: Small empty square\n { symbol: '◼', font: 'Calibri' }, // Level 4: Medium filled square\n { symbol: '◻', font: 'Calibri' }, // Level 5: Medium empty square\n { symbol: '■', font: 'Calibri' }, // Level 6: Filled square\n { symbol: '□', font: 'Calibri' }, // Level 7: Empty square\n { symbol: '▪', font: 'Calibri' }, // Level 8: Small filled square\n ],\n arrow: [\n { symbol: '➢', font: 'Calibri' }, // Level 0: Right arrow\n { symbol: '➣', font: 'Calibri' }, // Level 1: Right arrow filled\n { symbol: '➤', font: 'Calibri' }, // Level 2: Right arrow bold\n { symbol: '➔', font: 'Calibri' }, // Level 3: Right arrow simple\n { symbol: '➜', font: 'Calibri' }, // Level 4: Right arrow outline\n { symbol: '➢', font: 'Calibri' }, // Level 5: Right arrow\n { symbol: '➣', font: 'Calibri' }, // Level 6: Right arrow filled\n { symbol: '➤', font: 'Calibri' }, // Level 7: Right arrow bold\n { symbol: '➔', font: 'Calibri' }, // Level 8: Right arrow simple\n ],\n check: [\n { symbol: '✓', font: 'Calibri' }, // Level 0: Check mark\n { symbol: '✔', font: 'Calibri' }, // Level 1: Heavy check mark\n { symbol: '☑', font: 'Calibri' }, // Level 2: Checked box\n { symbol: '✓', font: 'Calibri' }, // Level 3: Check mark\n { symbol: '✔', font: 'Calibri' }, // Level 4: Heavy check mark\n { symbol: '☑', font: 'Calibri' }, // Level 5: Checked box\n { symbol: '✓', font: 'Calibri' }, // Level 6: Check mark\n { symbol: '✔', font: 'Calibri' }, // Level 7: Heavy check mark\n { symbol: '☑', font: 'Calibri' }, // Level 8: Checked box\n ],\n 'word-native': [\n // Word-native bullets using PUA characters with Symbol/Wingdings fonts\n {\n symbol: WORD_NATIVE_BULLETS.FILLED_BULLET.char,\n font: WORD_NATIVE_BULLETS.FILLED_BULLET.font,\n }, // Level 0: Filled bullet (Symbol U+F0B7)\n {\n symbol: WORD_NATIVE_BULLETS.OPEN_CIRCLE.char,\n font: WORD_NATIVE_BULLETS.OPEN_CIRCLE.font,\n }, // Level 1: Open circle (Courier New U+006F)\n {\n symbol: WORD_NATIVE_BULLETS.FILLED_SQUARE.char,\n font: WORD_NATIVE_BULLETS.FILLED_SQUARE.font,\n }, // Level 2: Filled square (Wingdings U+F0A7)\n {\n symbol: WORD_NATIVE_BULLETS.FILLED_BULLET.char,\n font: WORD_NATIVE_BULLETS.FILLED_BULLET.font,\n }, // Level 3: Filled bullet\n {\n symbol: WORD_NATIVE_BULLETS.OPEN_CIRCLE.char,\n font: WORD_NATIVE_BULLETS.OPEN_CIRCLE.font,\n }, // Level 4: Open circle\n {\n symbol: WORD_NATIVE_BULLETS.FILLED_SQUARE.char,\n font: WORD_NATIVE_BULLETS.FILLED_SQUARE.font,\n }, // Level 5: Filled square\n {\n symbol: WORD_NATIVE_BULLETS.FILLED_BULLET.char,\n font: WORD_NATIVE_BULLETS.FILLED_BULLET.font,\n }, // Level 6: Filled bullet\n {\n symbol: WORD_NATIVE_BULLETS.OPEN_CIRCLE.char,\n font: WORD_NATIVE_BULLETS.OPEN_CIRCLE.font,\n }, // Level 7: Open circle\n {\n symbol: WORD_NATIVE_BULLETS.FILLED_SQUARE.char,\n font: WORD_NATIVE_BULLETS.FILLED_SQUARE.font,\n }, // Level 8: Filled square\n ],\n };\n\n const selectedSet = bulletSets[style];\n const levelIndex = level % selectedSet.length;\n const result = selectedSet[levelIndex];\n\n // Fallback to standard bullet if somehow undefined\n return result || { symbol: '•', font: 'Calibri' };\n }\n\n /**\n * Calculates the standard indentation values for a given level\n * @param level The level index (0-8)\n * @returns Object with leftIndent and hangingIndent in twips\n * @example\n * const indent = NumberingLevel.calculateStandardIndentation(0);\n * // Returns: { leftIndent: 720, hangingIndent: 360 } (0.5\" left, 0.25\" hanging)\n *\n * const indent2 = NumberingLevel.calculateStandardIndentation(2);\n * // Returns: { leftIndent: 1440, hangingIndent: 360 } (1.0\" left, 0.25\" hanging)\n */\n static calculateStandardIndentation(level: number): {\n leftIndent: number;\n hangingIndent: number;\n } {\n if (level < 0 || level > 8) {\n throw new Error(`Invalid level ${level}. Level must be between 0 and 8.`);\n }\n\n return {\n leftIndent: 720 + level * 360,\n hangingIndent: 360,\n };\n }\n\n /**\n * Gets the standard number format for a given level\n * @param level The level index (0-8)\n * @returns The recommended number format for this level\n * @example\n * NumberingLevel.getStandardNumberFormat(0); // 'decimal' (1., 2., 3.)\n * NumberingLevel.getStandardNumberFormat(1); // 'lowerLetter' (a., b., c.)\n * NumberingLevel.getStandardNumberFormat(2); // 'lowerRoman' (i., ii., iii.)\n * NumberingLevel.getStandardNumberFormat(3); // 'upperLetter' (A., B., C.)\n * NumberingLevel.getStandardNumberFormat(4); // 'upperRoman' (I., II., III.)\n */\n static getStandardNumberFormat(level: number): NumberFormat {\n if (level < 0 || level > 8) {\n throw new Error(`Invalid level ${level}. Level must be between 0 and 8.`);\n }\n\n const formats: NumberFormat[] = [\n 'decimal', // Level 0: 1., 2., 3.\n 'lowerLetter', // Level 1: a., b., c.\n 'lowerRoman', // Level 2: i., ii., iii.\n 'upperLetter', // Level 3: A., B., C.\n 'upperRoman', // Level 4: I., II., III.\n ];\n\n const result = formats[level % formats.length];\n return result || 'decimal'; // Fallback to decimal (should never happen)\n }\n\n /**\n * Creates a bullet list level\n *\n * When called without parameters, uses Word-native encoding for the level:\n * - Levels 0, 3, 6: Filled bullet (Symbol font, U+F0B7)\n * - Levels 1, 4, 7: Open circle (Courier New, U+006F)\n * - Levels 2, 5, 8: Filled square (Wingdings, U+F0A7)\n *\n * @param level The level index (0-8)\n * @param bullet Optional bullet character (defaults to Word-native for level)\n * @param font Optional font to use for the bullet (defaults to Word-native for level)\n */\n static createBulletLevel(level: number, bullet?: string, font?: string): NumberingLevel {\n // Use Word-native defaults when not specified\n const defaults = NumberingLevel.getBulletSymbolWithFont(level, 'standard');\n const actualBullet = bullet ?? defaults.symbol;\n const actualFont = font ?? defaults.font;\n\n return new NumberingLevel({\n level,\n format: 'bullet',\n text: actualBullet,\n alignment: 'left',\n font: actualFont,\n fontSize: 24, // 12pt\n bold: false,\n color: '000000',\n leftIndent: 720 + level * 360,\n hangingIndent: 360,\n });\n }\n\n /**\n * Creates a decimal list level (1, 2, 3, ...)\n * @param level The level index (0-8)\n * @param template The text template (default: '%1.')\n */\n static createDecimalLevel(level: number, template = `%${level + 1}.`): NumberingLevel {\n return new NumberingLevel({\n level,\n format: 'decimal',\n text: template,\n alignment: 'left',\n font: 'Verdana',\n fontSize: 24, // 12pt\n bold: false,\n color: '000000',\n leftIndent: 720 + level * 360,\n hangingIndent: 360,\n });\n }\n\n /**\n * Creates a lower roman list level (i, ii, iii, ...)\n * @param level The level index (0-8)\n * @param template The text template (default: '%1.')\n */\n static createLowerRomanLevel(level: number, template = `%${level + 1}.`): NumberingLevel {\n return new NumberingLevel({\n level,\n format: 'lowerRoman',\n text: template,\n alignment: 'left',\n font: 'Verdana',\n fontSize: 24, // 12pt\n bold: false,\n color: '000000',\n leftIndent: 720 + level * 360,\n hangingIndent: 360,\n });\n }\n\n /**\n * Creates an upper roman list level (I, II, III, ...)\n * @param level The level index (0-8)\n * @param template The text template (default: '%1.')\n */\n static createUpperRomanLevel(level: number, template = `%${level + 1}.`): NumberingLevel {\n return new NumberingLevel({\n level,\n format: 'upperRoman',\n text: template,\n alignment: 'left',\n font: 'Verdana',\n fontSize: 24, // 12pt\n bold: false,\n color: '000000',\n leftIndent: 720 + level * 360,\n hangingIndent: 360,\n });\n }\n\n /**\n * Creates a lower letter list level (a, b, c, ...)\n * @param level The level index (0-8)\n * @param template The text template (default: '%1.')\n */\n static createLowerLetterLevel(level: number, template = `%${level + 1}.`): NumberingLevel {\n return new NumberingLevel({\n level,\n format: 'lowerLetter',\n text: template,\n alignment: 'left',\n font: 'Verdana',\n fontSize: 24, // 12pt\n bold: false,\n color: '000000',\n leftIndent: 720 + level * 360,\n hangingIndent: 360,\n });\n }\n\n /**\n * Creates an upper letter list level (A, B, C, ...)\n * @param level The level index (0-8)\n * @param template The text template (default: '%1.')\n */\n static createUpperLetterLevel(level: number, template = `%${level + 1}.`): NumberingLevel {\n return new NumberingLevel({\n level,\n format: 'upperLetter',\n text: template,\n alignment: 'left',\n font: 'Verdana',\n fontSize: 24, // 12pt\n bold: false,\n color: '000000',\n leftIndent: 720 + level * 360,\n hangingIndent: 360,\n });\n }\n\n /**\n * Factory method for creating a numbering level\n * @param properties The level properties\n */\n static create(properties: NumberingLevelProperties): NumberingLevel {\n return new NumberingLevel(properties);\n }\n\n /**\n * Creates a NumberingLevel from XML element\n * @param xml The XML string of the <w:lvl> element\n * @returns NumberingLevel instance\n */\n static fromXML(xml: string): NumberingLevel {\n // Extract level index (required)\n const ilvlMatch = /<w:lvl[^>]*w:ilvl=\"([^\"]+)\"/.exec(xml);\n if (!ilvlMatch?.[1]) {\n throw new Error('Missing required w:ilvl attribute');\n }\n const level = parseInt(ilvlMatch[1], 10);\n\n // Extract number format (required)\n const numFmtMatch = /<w:numFmt[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n if (!numFmtMatch?.[1]) {\n throw new Error('Missing required w:numFmt element');\n }\n const format = NumberingLevel.normalizeFormat(numFmtMatch[1]);\n\n // Extract level text (optional - can be empty for placeholder levels)\n const lvlTextMatch = /<w:lvlText[^>]*w:val=\"([^\"]*)\"/.exec(xml);\n const text = lvlTextMatch?.[1] !== undefined ? lvlTextMatch[1] : '';\n\n // Extract alignment (optional, default: left)\n const lvlJcMatch = /<w:lvlJc[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n const alignment = (lvlJcMatch?.[1] ? lvlJcMatch[1] : 'left') as NumberAlignment;\n\n // Extract start value (optional, default: 1)\n const startMatch = /<w:start[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n const start = startMatch?.[1] ? parseInt(startMatch[1], 10) : 1;\n\n // Extract suffix (optional, default: tab)\n const suffixMatch = /<w:suff[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n const suffix = suffixMatch?.[1] ? (suffixMatch[1] as 'tab' | 'space' | 'nothing') : 'tab';\n\n // Extract level restart (w:lvlRestart per ECMA-376 Part 1 §17.9.11)\n let lvlRestart: number | undefined;\n const lvlRestartMatch = /<w:lvlRestart[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n if (lvlRestartMatch?.[1]) {\n lvlRestart = parseInt(lvlRestartMatch[1], 10);\n }\n\n // Extract pStyle (paragraph style link)\n let pStyle: string | undefined;\n const pStyleMatch = /<w:pStyle[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n if (pStyleMatch?.[1]) {\n pStyle = pStyleMatch[1];\n }\n\n // Extract indentation from <w:pPr><w:ind>\n let leftIndent = 720 + level * 360; // default\n let hangingIndent = 360; // default\n const indMatch = /<w:ind[^>]*\\/>/.exec(xml);\n if (indMatch) {\n const indElement = indMatch[0];\n const leftMatch = /w:left=\"([^\"]+)\"/.exec(indElement);\n const hangingMatch = /w:hanging=\"([^\"]+)\"/.exec(indElement);\n\n if (leftMatch?.[1]) leftIndent = parseInt(leftMatch[1], 10);\n if (hangingMatch?.[1]) hangingIndent = parseInt(hangingMatch[1], 10);\n }\n\n // Extract font and size from <w:rPr>\n let font = 'Calibri';\n let fontSize = 22;\n\n const rFontsMatch = /<w:rFonts[^>]*\\/>/.exec(xml);\n if (rFontsMatch) {\n const rFontsElement = rFontsMatch[0];\n const asciiMatch = /w:ascii=\"([^\"]+)\"/.exec(rFontsElement);\n if (asciiMatch?.[1]) font = asciiMatch[1];\n }\n\n const szMatch = /<w:sz[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n if (szMatch?.[1]) fontSize = parseInt(szMatch[1], 10);\n\n // List prefixes should never have bold, italic, or underline - ignore source XML formatting\n const bold = false;\n const italic = false;\n const underline: string | undefined = undefined;\n\n // Extract color from <w:rPr>\n let color: string | undefined;\n const colorMatch = /<w:color[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n if (colorMatch?.[1]) {\n color = colorMatch[1];\n }\n\n return new NumberingLevel({\n level,\n format,\n text,\n alignment,\n start,\n leftIndent,\n hangingIndent,\n font,\n fontSize,\n suffix,\n bold,\n italic,\n underline,\n color,\n lvlRestart,\n pStyle,\n });\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"NumberingLevel.js","sourceRoot":"","sources":["../../src/formatting/NumberingLevel.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * NumberingLevel - Defines formatting for a single level in a list\n *\n * A numbering level specifies how a particular list level (0-8) should be formatted,\n * including the numbering format (bullet, decimal, roman, etc.), text template,\n * alignment, and indentation.\n */\n\nimport { parseOnOffAttribute } from '../utils/parsingHelpers.js';\nimport { XMLBuilder, XMLElement } from '../xml/XMLBuilder.js';\n\n/**\n * Word-native bullet character mappings\n *\n * Microsoft Word uses specific fonts with Private Use Area (PUA) characters\n * for bullet points. These mappings ensure 100% compatibility with Word's\n * native bullet rendering.\n *\n * Pattern: Levels 0,3,6 = filled bullet; 1,4,7 = open circle; 2,5,8 = filled square\n */\nexport const WORD_NATIVE_BULLETS = {\n /** Filled bullet (levels 0, 3, 6) - Symbol font U+F0B7 */\n FILLED_BULLET: { char: '\\uF0B7', font: 'Symbol' },\n /** Open circle (levels 1, 4, 7) - Courier New U+006F (lowercase 'o') */\n OPEN_CIRCLE: { char: '\\u006F', font: 'Courier New' },\n /** Filled square (levels 2, 5, 8) - Wingdings U+F0A7 */\n FILLED_SQUARE: { char: '\\uF0A7', font: 'Wingdings' },\n} as const;\n\n/**\n * Type for Word-native bullet definition\n */\nexport type WordNativeBullet = (typeof WORD_NATIVE_BULLETS)[keyof typeof WORD_NATIVE_BULLETS];\n\n/**\n * Numbering format types supported by Word\n */\nexport type NumberFormat =\n | 'bullet' // Bullet character\n | 'decimal' // 1, 2, 3, ...\n | 'lowerRoman' // i, ii, iii, ...\n | 'upperRoman' // I, II, III, ...\n | 'lowerLetter' // a, b, c, ...\n | 'upperLetter' // A, B, C, ...\n | 'ordinal' // 1st, 2nd, 3rd, ...\n | 'cardinalText' // One, Two, Three, ...\n | 'ordinalText' // First, Second, Third, ...\n | 'hex' // 0x01, 0x02, ...\n | 'chicago' // *, †, ‡, §, ...\n | 'decimal zero'; // 01, 02, 03, ...\n\n/**\n * Alignment for the numbering text\n */\nexport type NumberAlignment = 'left' | 'center' | 'right' | 'start' | 'end';\n\n/**\n * Properties for creating a numbering level\n */\nexport interface NumberingLevelProperties {\n /** The level index (0-8, where 0 is the outermost level) */\n level: number;\n\n /** The numbering format */\n format: NumberFormat;\n\n /** The text template (e.g., \"%1.\" for decimal, \"•\" for bullet) */\n text: string;\n\n /** Alignment of the numbering text */\n alignment?: NumberAlignment;\n\n /** Starting value (for numeric formats, default: 1) */\n start?: number;\n\n /** Left indentation in twips (can be negative for outdents into margin) */\n leftIndent?: number;\n\n /** Hanging indentation in twips (for the text after the number) */\n hangingIndent?: number;\n\n /** Font family for the numbering character (useful for bullets) */\n font?: string;\n\n /** Font size in half-points (e.g., 22 = 11pt) */\n fontSize?: number;\n\n /** Whether to show text after the number (default: true) */\n isLegalNumberingStyle?: boolean;\n\n /** Suffix after the number (tab, space, or nothing) */\n suffix?: 'tab' | 'space' | 'nothing';\n\n /** Text color in hex (without #) */\n color?: string;\n\n /** Whether the numbering text is bold */\n bold?: boolean;\n\n /** Whether the numbering text is italic */\n italic?: boolean;\n\n /** Underline style for numbering text ('single', 'double', 'wave', 'dotted', 'dash', etc.) */\n underline?: string;\n\n /**\n * Level at which numbering should restart (w:lvlRestart per ECMA-376 Part 1 §17.9.11)\n * Specifies when to restart this level's numbering based on a higher-level change:\n * - 0: Never restart (continues throughout document)\n * - 1-8: Restart when the specified level changes\n * - undefined (default): Restart when level-1 changes (standard behavior)\n */\n lvlRestart?: number;\n\n /** Paragraph style ID linked to this numbering level (w:pStyle per ECMA-376 §17.9.23) */\n pStyle?: string;\n\n /**\n * Tentative level flag (w:tentative per ECMA-376 §17.9.29).\n * When true, the level is present in the definition but not displayed by\n * default — Word uses this for the unused upper levels of a hybrid\n * multilevel list so they can be offered in the list picker without\n * polluting the visible outline. `undefined` / `false` = non-tentative.\n */\n tentative?: boolean;\n\n /**\n * Template code (w:tplc per ECMA-376 §17.9.30) — ST_ShortHexNumber.\n * An 8-character hex string Word uses to identify the level template so\n * that sibling list definitions across documents can recognise each\n * other. Preserved verbatim for round-trip fidelity.\n */\n tplc?: string;\n\n /**\n * Picture bullet reference (w:lvlPicBulletId per ECMA-376 §17.9.15) —\n * numeric ID of a `<w:numPicBullet>` definition elsewhere in\n * numbering.xml. When set, the level renders its bullet as the linked\n * picture. MUST be parsed and round-tripped or `removeOrphanedNumPicBullets`\n * will treat every `<w:numPicBullet>` as unreferenced and delete them on save.\n */\n lvlPicBulletId?: number;\n\n /**\n * Legacy Word 97-style numbering state (`<w:legacy>` per ECMA-376 §17.9.10).\n * Preserved on levels imported from documents that record legacy rendering\n * information — losing this can shift the level's indentation and bullet/\n * number spacing to Word's modern defaults on round-trip.\n */\n legacy?: LegacyNumbering;\n}\n\n/**\n * CT_LvlLegacy (ECMA-376 §17.9.10) — carries Word 97 compatibility numbering.\n * All three attributes are independently optional; presence of the element\n * without any attributes is a valid placeholder Word emits in some cases.\n */\nexport interface LegacyNumbering {\n /** w:legacy — ST_OnOff. Whether to render this level with legacy rules. */\n legacy?: boolean;\n /** w:legacySpace — ST_TwipsMeasure (non-negative). Space after the number. */\n legacySpace?: number;\n /** w:legacyIndent — ST_SignedTwipsMeasure. Indent (can be negative). */\n legacyIndent?: number;\n}\n\n/**\n * Represents a single level in a numbering definition\n */\nexport class NumberingLevel {\n private properties: Required<\n Omit<\n NumberingLevelProperties,\n 'lvlRestart' | 'underline' | 'pStyle' | 'tentative' | 'tplc' | 'lvlPicBulletId' | 'legacy'\n >\n > &\n Pick<\n NumberingLevelProperties,\n 'lvlRestart' | 'underline' | 'pStyle' | 'tentative' | 'tplc' | 'lvlPicBulletId' | 'legacy'\n >;\n\n /**\n * Creates a new numbering level\n * @param properties The level properties\n */\n constructor(properties: NumberingLevelProperties) {\n // Set defaults\n this.properties = {\n level: properties.level,\n format: properties.format,\n text: properties.text,\n alignment: properties.alignment || 'left',\n start: properties.start !== undefined ? properties.start : 1,\n leftIndent:\n properties.leftIndent !== undefined ? properties.leftIndent : 720 + properties.level * 360,\n hangingIndent: properties.hangingIndent !== undefined ? properties.hangingIndent : 360,\n font: properties.font || 'Calibri',\n fontSize: properties.fontSize || 22, // 11pt default\n isLegalNumberingStyle:\n properties.isLegalNumberingStyle !== undefined ? properties.isLegalNumberingStyle : false,\n suffix: properties.suffix || 'tab',\n color: properties.color || '000000',\n bold: properties.bold !== undefined ? properties.bold : false,\n italic: properties.italic !== undefined ? properties.italic : false,\n underline: properties.underline,\n lvlRestart: properties.lvlRestart, // undefined means default behavior (restart on level-1 change)\n pStyle: properties.pStyle,\n // Explicit false differs from undefined only at serialization time;\n // both collapse to \"not tentative\" semantically.\n tentative: properties.tentative,\n tplc: properties.tplc,\n lvlPicBulletId: properties.lvlPicBulletId,\n legacy: properties.legacy,\n };\n\n this.validate();\n }\n\n /**\n * Validates the level properties\n */\n private validate(): void {\n if (this.properties.level < 0 || this.properties.level > 8) {\n throw new Error(`Level must be between 0 and 8, got ${this.properties.level}`);\n }\n\n // Note: leftIndent CAN be negative (outdent into margin) per ECMA-376\n // This is valid and used for hanging indents where bullets appear in margin\n\n if (this.properties.hangingIndent < 0) {\n throw new Error('Hanging indent must be non-negative');\n }\n\n if (this.properties.start < 0) {\n throw new Error('Start value must be non-negative');\n }\n }\n\n /**\n * Calculates safe indentation values for a given level based on page constraints.\n *\n * Use this instead of default indentation when working with narrow pages or\n * deep nesting levels to ensure content stays within page margins.\n *\n * @param level The level index (0-8)\n * @param pageWidthTwips Page width in twips (default: 12240 = 8.5 inches)\n * @param leftMarginTwips Left margin in twips (default: 1440 = 1 inch)\n * @param rightMarginTwips Right margin in twips (default: 1440 = 1 inch)\n * @param minContentWidth Minimum content width in twips (default: 2880 = 2 inches)\n * @returns Safe indentation values that won't exceed available space\n *\n * @example\n * ```typescript\n * // For a narrow page (6\" wide with 0.5\" margins)\n * const indent = NumberingLevel.calculateSafeIndentation(\n * 5, // level 5\n * 8640, // 6 inches page width\n * 720, // 0.5 inch left margin\n * 720 // 0.5 inch right margin\n * );\n * ```\n */\n static calculateSafeIndentation(\n level: number,\n pageWidthTwips = 12240,\n leftMarginTwips = 1440,\n rightMarginTwips = 1440,\n minContentWidth = 2880\n ): { leftIndent: number; hangingIndent: number } {\n if (level < 0 || level > 8) {\n throw new Error(`Invalid level ${level}. Level must be between 0 and 8.`);\n }\n\n // Calculate available content width\n const availableWidth = pageWidthTwips - leftMarginTwips - rightMarginTwips;\n\n // Calculate max safe indent (leave space for content)\n const maxSafeIndent = Math.max(0, availableWidth - minContentWidth);\n\n // Standard indentation\n const standardLeftIndent = 720 + level * 360;\n const hangingIndent = 360;\n\n // Cap at safe maximum\n const safeLeftIndent = Math.min(standardLeftIndent, maxSafeIndent);\n\n return {\n leftIndent: safeLeftIndent,\n hangingIndent,\n };\n }\n\n /**\n * Gets the level index\n */\n getLevel(): number {\n return this.properties.level;\n }\n\n /**\n * Gets the numbering format\n */\n getFormat(): NumberFormat {\n return this.properties.format;\n }\n\n /**\n * Gets the level properties\n */\n getProperties(): Required<\n Omit<\n NumberingLevelProperties,\n 'lvlRestart' | 'underline' | 'pStyle' | 'tentative' | 'tplc' | 'lvlPicBulletId' | 'legacy'\n >\n > &\n Pick<\n NumberingLevelProperties,\n 'lvlRestart' | 'underline' | 'pStyle' | 'tentative' | 'tplc' | 'lvlPicBulletId' | 'legacy'\n > {\n return { ...this.properties };\n }\n\n /**\n * Sets the left indentation\n * @param twips Indentation in twips\n */\n setLeftIndent(twips: number): this {\n // Note: Negative values are valid (outdent into margin) per ECMA-376\n this.properties.leftIndent = twips;\n return this;\n }\n\n /**\n * Sets the hanging indentation\n * @param twips Indentation in twips\n */\n setHangingIndent(twips: number): this {\n if (twips < 0) {\n throw new Error('Hanging indent must be non-negative');\n }\n this.properties.hangingIndent = twips;\n return this;\n }\n\n /**\n * Sets the font for the numbering character\n * @param font Font family name\n */\n setFont(font: string): this {\n this.properties.font = font;\n return this;\n }\n\n /**\n * Sets the alignment\n * @param alignment Alignment type\n */\n setAlignment(alignment: NumberAlignment): this {\n this.properties.alignment = alignment;\n return this;\n }\n\n /**\n * Sets the font size in half-points\n * @param halfPoints Font size in half-points (e.g., 24 = 12pt)\n */\n setFontSize(halfPoints: number): this {\n this.properties.fontSize = halfPoints;\n return this;\n }\n\n /**\n * Sets the level text (bullet character or number template)\n * @param text The text template (e.g., '•' for bullets, '%1.' for numbered)\n */\n setText(text: string): this {\n this.properties.text = text;\n return this;\n }\n\n /**\n * Sets the text color\n * @param color Hex color without # (e.g., '000000' for black)\n */\n setColor(color: string): this {\n this.properties.color = color;\n return this;\n }\n\n /**\n * Sets whether the numbering text is bold\n * @param bold Whether to make bold\n */\n setBold(bold: boolean): this {\n this.properties.bold = bold;\n return this;\n }\n\n /**\n * Sets whether the numbering text is italic\n * @param italic Whether to make italic\n */\n setItalic(italic: boolean): this {\n this.properties.italic = italic;\n return this;\n }\n\n /**\n * Gets whether the numbering text is italic\n */\n getItalic(): boolean {\n return this.properties.italic ?? false;\n }\n\n /**\n * Sets the underline style for numbering text\n * @param style Underline style ('single', 'double', 'wave', 'dotted', 'dash', etc.)\n */\n setUnderline(style: string | undefined): this {\n this.properties.underline = style;\n return this;\n }\n\n /**\n * Gets the underline style\n */\n getUnderline(): string | undefined {\n return this.properties.underline;\n }\n\n /**\n * Clears the underline style\n */\n clearUnderline(): this {\n this.properties.underline = undefined;\n return this;\n }\n\n /**\n * Sets the level restart behavior (w:lvlRestart per ECMA-376 Part 1 §17.9.11)\n *\n * Controls when this level's numbering restarts based on higher-level changes:\n * - 0: Never restart (continues throughout document)\n * - 1-8: Restart when the specified level changes\n * - undefined: Restart when level-1 changes (standard/default behavior)\n *\n * @param level The level that triggers restart (0-8), or undefined for default\n * @example\n * // Level 1 that never restarts (continuous across document)\n * level1.setLvlRestart(0);\n *\n * // Level 2 that restarts when level 0 changes (not level 1)\n * level2.setLvlRestart(0);\n */\n setLvlRestart(level: number | undefined): this {\n if (level !== undefined && (level < 0 || level > 8)) {\n throw new Error(`lvlRestart must be between 0 and 8, got ${level}`);\n }\n this.properties.lvlRestart = level;\n return this;\n }\n\n /**\n * Gets the level restart value\n * @returns The level that triggers restart, or undefined for default behavior\n */\n getLvlRestart(): number | undefined {\n return this.properties.lvlRestart;\n }\n\n /**\n * Sets the paragraph style ID linked to this numbering level\n * Links this level to a paragraph style definition (w:pStyle per ECMA-376 §17.9.23)\n * @param styleId The paragraph style ID\n */\n setParagraphStyle(styleId: string): this {\n this.properties.pStyle = styleId;\n return this;\n }\n\n /**\n * Gets the paragraph style ID linked to this numbering level\n */\n getParagraphStyle(): string | undefined {\n return this.properties.pStyle;\n }\n\n /**\n * Sets the numbering format (decimal, lowerLetter, bullet, etc.)\n * @param format The numbering format\n */\n setFormat(format: NumberFormat): this {\n this.properties.format = NumberingLevel.normalizeFormat(format);\n return this;\n }\n\n /**\n * Normalizes display-string format values to ECMA-376 ST_NumberFormat names.\n * Accepts both standard format names and common display shortcuts.\n */\n static normalizeFormat(format: string): NumberFormat {\n const corrections: Record<string, NumberFormat> = {\n 'a.': 'lowerLetter',\n 'A.': 'upperLetter',\n 'i.': 'lowerRoman',\n 'I.': 'upperRoman',\n '1.': 'decimal',\n };\n return (corrections[format] ?? format) as NumberFormat;\n }\n\n /**\n * Generates the WordprocessingML XML for this level\n */\n toXML(): XMLElement {\n // ECMA-376 CT_Lvl element order (§17.9.6):\n // start, numFmt, lvlRestart, pStyle, isLgl, suff, lvlText, lvlPicBulletId, legacy, lvlJc, pPr, rPr\n const children: XMLElement[] = [];\n\n // 1. Start value\n children.push(XMLBuilder.wSelf('start', { 'w:val': this.properties.start.toString() }));\n\n // 2. Number format\n children.push(XMLBuilder.wSelf('numFmt', { 'w:val': this.properties.format }));\n\n // 3. Level restart (w:lvlRestart per ECMA-376 Part 1 §17.9.11)\n if (this.properties.lvlRestart !== undefined) {\n children.push(\n XMLBuilder.wSelf('lvlRestart', { 'w:val': this.properties.lvlRestart.toString() })\n );\n }\n\n // 4. pStyle (paragraph style link)\n if (this.properties.pStyle) {\n children.push(XMLBuilder.wSelf('pStyle', { 'w:val': this.properties.pStyle }));\n }\n\n // 5. Legal numbering style\n if (this.properties.isLegalNumberingStyle) {\n children.push(XMLBuilder.wSelf('isLgl'));\n }\n\n // 6. Suffix (what comes after the number)\n if (this.properties.suffix) {\n children.push(XMLBuilder.wSelf('suff', { 'w:val': this.properties.suffix }));\n }\n\n // 7. Level text (e.g., \"%1.\" or \"•\")\n children.push(XMLBuilder.wSelf('lvlText', { 'w:val': this.properties.text }));\n\n // 7a. Picture bullet reference (w:lvlPicBulletId per §17.9.15). CT_Lvl order\n // places this AFTER lvlText and BEFORE lvlJc. Must be emitted so that\n // orphan-cleanup of <w:numPicBullet> doesn't delete the referenced bullet.\n if (this.properties.lvlPicBulletId !== undefined) {\n children.push(\n XMLBuilder.wSelf('lvlPicBulletId', {\n 'w:val': this.properties.lvlPicBulletId.toString(),\n })\n );\n }\n\n // 7b. Legacy numbering state (w:legacy per §17.9.10). CT_Lvl order places\n // this AFTER lvlPicBulletId and BEFORE lvlJc. Emit every attribute that\n // is explicitly set; omit when legacy is undefined entirely.\n if (this.properties.legacy) {\n const legacyAttrs: Record<string, string> = {};\n if (this.properties.legacy.legacy !== undefined) {\n legacyAttrs['w:legacy'] = this.properties.legacy.legacy ? '1' : '0';\n }\n if (this.properties.legacy.legacySpace !== undefined) {\n legacyAttrs['w:legacySpace'] = this.properties.legacy.legacySpace.toString();\n }\n if (this.properties.legacy.legacyIndent !== undefined) {\n legacyAttrs['w:legacyIndent'] = this.properties.legacy.legacyIndent.toString();\n }\n children.push(XMLBuilder.wSelf('legacy', legacyAttrs));\n }\n\n // 8. Alignment\n children.push(XMLBuilder.wSelf('lvlJc', { 'w:val': this.properties.alignment }));\n\n // 9. Paragraph properties (indentation)\n const ind = XMLBuilder.wSelf('ind', {\n 'w:left': this.properties.leftIndent.toString(),\n 'w:hanging': this.properties.hangingIndent.toString(),\n });\n const pPr = XMLBuilder.w('pPr', undefined, [ind]);\n children.push(pPr);\n\n // 10. Run properties (font)\n const rPrChildren: XMLElement[] = [];\n\n // Font\n rPrChildren.push(\n XMLBuilder.wSelf('rFonts', {\n 'w:ascii': this.properties.font,\n 'w:hAnsi': this.properties.font,\n 'w:cs': this.properties.font,\n 'w:hint': 'default',\n })\n );\n\n // Bold\n if (this.properties.bold) {\n rPrChildren.push(XMLBuilder.wSelf('b'));\n rPrChildren.push(XMLBuilder.wSelf('bCs'));\n }\n\n // Italic\n if (this.properties.italic) {\n rPrChildren.push(XMLBuilder.wSelf('i'));\n rPrChildren.push(XMLBuilder.wSelf('iCs'));\n }\n\n // CT_RPr element order per ECMA-376 §17.3.2.28:\n // ... b, bCs, i, iCs, ... color (#19), ... sz (#24), szCs (#25), ... u (#27)\n\n // Color (#19)\n if (this.properties.color) {\n rPrChildren.push(XMLBuilder.wSelf('color', { 'w:val': this.properties.color }));\n }\n\n // Font size (#24, #25)\n rPrChildren.push(XMLBuilder.wSelf('sz', { 'w:val': this.properties.fontSize.toString() }));\n rPrChildren.push(XMLBuilder.wSelf('szCs', { 'w:val': this.properties.fontSize.toString() }));\n\n // Underline (#27)\n if (this.properties.underline) {\n rPrChildren.push(XMLBuilder.wSelf('u', { 'w:val': this.properties.underline }));\n }\n\n const rPr = XMLBuilder.w('rPr', undefined, rPrChildren);\n children.push(rPr);\n\n // <w:lvl> opening attributes: w:ilvl (required), plus optional w:tplc\n // (template code, §17.9.30) and w:tentative (§17.9.29). w:tentative and\n // w:tplc were both silently dropped on parse before this — so neither\n // could ever be regenerated on save.\n const lvlAttrs: Record<string, string> = { 'w:ilvl': this.properties.level.toString() };\n if (this.properties.tplc) {\n lvlAttrs['w:tplc'] = this.properties.tplc;\n }\n if (this.properties.tentative) {\n lvlAttrs['w:tentative'] = '1';\n }\n return XMLBuilder.w('lvl', lvlAttrs, children);\n }\n\n /**\n * Gets the recommended bullet symbol and font for a given level\n * @param level The level index (0-8)\n * @param style Optional bullet style ('standard', 'circle', 'square', 'arrow', 'check', 'word-native')\n * @returns Object with symbol and font properties\n */\n static getBulletSymbolWithFont(\n level: number,\n style: 'standard' | 'circle' | 'square' | 'arrow' | 'check' | 'word-native' = 'standard'\n ): { symbol: string; font: string } {\n const bulletSets = {\n // Standard style now uses Word-native encoding for maximum compatibility\n standard: [\n {\n symbol: WORD_NATIVE_BULLETS.FILLED_BULLET.char,\n font: WORD_NATIVE_BULLETS.FILLED_BULLET.font,\n }, // Level 0: Filled bullet (Symbol U+F0B7)\n {\n symbol: WORD_NATIVE_BULLETS.OPEN_CIRCLE.char,\n font: WORD_NATIVE_BULLETS.OPEN_CIRCLE.font,\n }, // Level 1: Open circle (Courier New U+006F)\n {\n symbol: WORD_NATIVE_BULLETS.FILLED_SQUARE.char,\n font: WORD_NATIVE_BULLETS.FILLED_SQUARE.font,\n }, // Level 2: Filled square (Wingdings U+F0A7)\n {\n symbol: WORD_NATIVE_BULLETS.FILLED_BULLET.char,\n font: WORD_NATIVE_BULLETS.FILLED_BULLET.font,\n }, // Level 3: Filled bullet\n {\n symbol: WORD_NATIVE_BULLETS.OPEN_CIRCLE.char,\n font: WORD_NATIVE_BULLETS.OPEN_CIRCLE.font,\n }, // Level 4: Open circle\n {\n symbol: WORD_NATIVE_BULLETS.FILLED_SQUARE.char,\n font: WORD_NATIVE_BULLETS.FILLED_SQUARE.font,\n }, // Level 5: Filled square\n {\n symbol: WORD_NATIVE_BULLETS.FILLED_BULLET.char,\n font: WORD_NATIVE_BULLETS.FILLED_BULLET.font,\n }, // Level 6: Filled bullet\n {\n symbol: WORD_NATIVE_BULLETS.OPEN_CIRCLE.char,\n font: WORD_NATIVE_BULLETS.OPEN_CIRCLE.font,\n }, // Level 7: Open circle\n {\n symbol: WORD_NATIVE_BULLETS.FILLED_SQUARE.char,\n font: WORD_NATIVE_BULLETS.FILLED_SQUARE.font,\n }, // Level 8: Filled square\n ],\n circle: [\n { symbol: '●', font: 'Calibri' }, // Level 0: Filled circle (bold)\n { symbol: '○', font: 'Calibri' }, // Level 1: Empty circle\n { symbol: '◉', font: 'Calibri' }, // Level 2: Fisheye\n { symbol: '◯', font: 'Calibri' }, // Level 3: Large circle\n { symbol: '⦿', font: 'Calibri' }, // Level 4: Circled bullet\n { symbol: '○', font: 'Calibri' }, // Level 5: Empty circle\n { symbol: '●', font: 'Calibri' }, // Level 6: Filled circle\n { symbol: '○', font: 'Calibri' }, // Level 7: Empty circle\n { symbol: '◉', font: 'Calibri' }, // Level 8: Fisheye\n ],\n square: [\n { symbol: '■', font: 'Calibri' }, // Level 0: Filled square\n { symbol: '□', font: 'Calibri' }, // Level 1: Empty square\n { symbol: '▪', font: 'Calibri' }, // Level 2: Small filled square\n { symbol: '▫', font: 'Calibri' }, // Level 3: Small empty square\n { symbol: '◼', font: 'Calibri' }, // Level 4: Medium filled square\n { symbol: '◻', font: 'Calibri' }, // Level 5: Medium empty square\n { symbol: '■', font: 'Calibri' }, // Level 6: Filled square\n { symbol: '□', font: 'Calibri' }, // Level 7: Empty square\n { symbol: '▪', font: 'Calibri' }, // Level 8: Small filled square\n ],\n arrow: [\n { symbol: '➢', font: 'Calibri' }, // Level 0: Right arrow\n { symbol: '➣', font: 'Calibri' }, // Level 1: Right arrow filled\n { symbol: '➤', font: 'Calibri' }, // Level 2: Right arrow bold\n { symbol: '➔', font: 'Calibri' }, // Level 3: Right arrow simple\n { symbol: '➜', font: 'Calibri' }, // Level 4: Right arrow outline\n { symbol: '➢', font: 'Calibri' }, // Level 5: Right arrow\n { symbol: '➣', font: 'Calibri' }, // Level 6: Right arrow filled\n { symbol: '➤', font: 'Calibri' }, // Level 7: Right arrow bold\n { symbol: '➔', font: 'Calibri' }, // Level 8: Right arrow simple\n ],\n check: [\n { symbol: '✓', font: 'Calibri' }, // Level 0: Check mark\n { symbol: '✔', font: 'Calibri' }, // Level 1: Heavy check mark\n { symbol: '☑', font: 'Calibri' }, // Level 2: Checked box\n { symbol: '✓', font: 'Calibri' }, // Level 3: Check mark\n { symbol: '✔', font: 'Calibri' }, // Level 4: Heavy check mark\n { symbol: '☑', font: 'Calibri' }, // Level 5: Checked box\n { symbol: '✓', font: 'Calibri' }, // Level 6: Check mark\n { symbol: '✔', font: 'Calibri' }, // Level 7: Heavy check mark\n { symbol: '☑', font: 'Calibri' }, // Level 8: Checked box\n ],\n 'word-native': [\n // Word-native bullets using PUA characters with Symbol/Wingdings fonts\n {\n symbol: WORD_NATIVE_BULLETS.FILLED_BULLET.char,\n font: WORD_NATIVE_BULLETS.FILLED_BULLET.font,\n }, // Level 0: Filled bullet (Symbol U+F0B7)\n {\n symbol: WORD_NATIVE_BULLETS.OPEN_CIRCLE.char,\n font: WORD_NATIVE_BULLETS.OPEN_CIRCLE.font,\n }, // Level 1: Open circle (Courier New U+006F)\n {\n symbol: WORD_NATIVE_BULLETS.FILLED_SQUARE.char,\n font: WORD_NATIVE_BULLETS.FILLED_SQUARE.font,\n }, // Level 2: Filled square (Wingdings U+F0A7)\n {\n symbol: WORD_NATIVE_BULLETS.FILLED_BULLET.char,\n font: WORD_NATIVE_BULLETS.FILLED_BULLET.font,\n }, // Level 3: Filled bullet\n {\n symbol: WORD_NATIVE_BULLETS.OPEN_CIRCLE.char,\n font: WORD_NATIVE_BULLETS.OPEN_CIRCLE.font,\n }, // Level 4: Open circle\n {\n symbol: WORD_NATIVE_BULLETS.FILLED_SQUARE.char,\n font: WORD_NATIVE_BULLETS.FILLED_SQUARE.font,\n }, // Level 5: Filled square\n {\n symbol: WORD_NATIVE_BULLETS.FILLED_BULLET.char,\n font: WORD_NATIVE_BULLETS.FILLED_BULLET.font,\n }, // Level 6: Filled bullet\n {\n symbol: WORD_NATIVE_BULLETS.OPEN_CIRCLE.char,\n font: WORD_NATIVE_BULLETS.OPEN_CIRCLE.font,\n }, // Level 7: Open circle\n {\n symbol: WORD_NATIVE_BULLETS.FILLED_SQUARE.char,\n font: WORD_NATIVE_BULLETS.FILLED_SQUARE.font,\n }, // Level 8: Filled square\n ],\n };\n\n const selectedSet = bulletSets[style];\n const levelIndex = level % selectedSet.length;\n const result = selectedSet[levelIndex];\n\n // Fallback to standard bullet if somehow undefined\n return result || { symbol: '•', font: 'Calibri' };\n }\n\n /**\n * Calculates the standard indentation values for a given level\n * @param level The level index (0-8)\n * @returns Object with leftIndent and hangingIndent in twips\n * @example\n * const indent = NumberingLevel.calculateStandardIndentation(0);\n * // Returns: { leftIndent: 720, hangingIndent: 360 } (0.5\" left, 0.25\" hanging)\n *\n * const indent2 = NumberingLevel.calculateStandardIndentation(2);\n * // Returns: { leftIndent: 1440, hangingIndent: 360 } (1.0\" left, 0.25\" hanging)\n */\n static calculateStandardIndentation(level: number): {\n leftIndent: number;\n hangingIndent: number;\n } {\n if (level < 0 || level > 8) {\n throw new Error(`Invalid level ${level}. Level must be between 0 and 8.`);\n }\n\n return {\n leftIndent: 720 + level * 360,\n hangingIndent: 360,\n };\n }\n\n /**\n * Gets the standard number format for a given level\n * @param level The level index (0-8)\n * @returns The recommended number format for this level\n * @example\n * NumberingLevel.getStandardNumberFormat(0); // 'decimal' (1., 2., 3.)\n * NumberingLevel.getStandardNumberFormat(1); // 'lowerLetter' (a., b., c.)\n * NumberingLevel.getStandardNumberFormat(2); // 'lowerRoman' (i., ii., iii.)\n * NumberingLevel.getStandardNumberFormat(3); // 'upperLetter' (A., B., C.)\n * NumberingLevel.getStandardNumberFormat(4); // 'upperRoman' (I., II., III.)\n */\n static getStandardNumberFormat(level: number): NumberFormat {\n if (level < 0 || level > 8) {\n throw new Error(`Invalid level ${level}. Level must be between 0 and 8.`);\n }\n\n const formats: NumberFormat[] = [\n 'decimal', // Level 0: 1., 2., 3.\n 'lowerLetter', // Level 1: a., b., c.\n 'lowerRoman', // Level 2: i., ii., iii.\n 'upperLetter', // Level 3: A., B., C.\n 'upperRoman', // Level 4: I., II., III.\n ];\n\n const result = formats[level % formats.length];\n return result || 'decimal'; // Fallback to decimal (should never happen)\n }\n\n /**\n * Creates a bullet list level\n *\n * When called without parameters, uses Word-native encoding for the level:\n * - Levels 0, 3, 6: Filled bullet (Symbol font, U+F0B7)\n * - Levels 1, 4, 7: Open circle (Courier New, U+006F)\n * - Levels 2, 5, 8: Filled square (Wingdings, U+F0A7)\n *\n * @param level The level index (0-8)\n * @param bullet Optional bullet character (defaults to Word-native for level)\n * @param font Optional font to use for the bullet (defaults to Word-native for level)\n */\n static createBulletLevel(level: number, bullet?: string, font?: string): NumberingLevel {\n // Use Word-native defaults when not specified\n const defaults = NumberingLevel.getBulletSymbolWithFont(level, 'standard');\n const actualBullet = bullet ?? defaults.symbol;\n const actualFont = font ?? defaults.font;\n\n return new NumberingLevel({\n level,\n format: 'bullet',\n text: actualBullet,\n alignment: 'left',\n font: actualFont,\n fontSize: 24, // 12pt\n bold: false,\n color: '000000',\n leftIndent: 720 + level * 360,\n hangingIndent: 360,\n });\n }\n\n /**\n * Creates a decimal list level (1, 2, 3, ...)\n * @param level The level index (0-8)\n * @param template The text template (default: '%1.')\n */\n static createDecimalLevel(level: number, template = `%${level + 1}.`): NumberingLevel {\n return new NumberingLevel({\n level,\n format: 'decimal',\n text: template,\n alignment: 'left',\n font: 'Verdana',\n fontSize: 24, // 12pt\n bold: false,\n color: '000000',\n leftIndent: 720 + level * 360,\n hangingIndent: 360,\n });\n }\n\n /**\n * Creates a lower roman list level (i, ii, iii, ...)\n * @param level The level index (0-8)\n * @param template The text template (default: '%1.')\n */\n static createLowerRomanLevel(level: number, template = `%${level + 1}.`): NumberingLevel {\n return new NumberingLevel({\n level,\n format: 'lowerRoman',\n text: template,\n alignment: 'left',\n font: 'Verdana',\n fontSize: 24, // 12pt\n bold: false,\n color: '000000',\n leftIndent: 720 + level * 360,\n hangingIndent: 360,\n });\n }\n\n /**\n * Creates an upper roman list level (I, II, III, ...)\n * @param level The level index (0-8)\n * @param template The text template (default: '%1.')\n */\n static createUpperRomanLevel(level: number, template = `%${level + 1}.`): NumberingLevel {\n return new NumberingLevel({\n level,\n format: 'upperRoman',\n text: template,\n alignment: 'left',\n font: 'Verdana',\n fontSize: 24, // 12pt\n bold: false,\n color: '000000',\n leftIndent: 720 + level * 360,\n hangingIndent: 360,\n });\n }\n\n /**\n * Creates a lower letter list level (a, b, c, ...)\n * @param level The level index (0-8)\n * @param template The text template (default: '%1.')\n */\n static createLowerLetterLevel(level: number, template = `%${level + 1}.`): NumberingLevel {\n return new NumberingLevel({\n level,\n format: 'lowerLetter',\n text: template,\n alignment: 'left',\n font: 'Verdana',\n fontSize: 24, // 12pt\n bold: false,\n color: '000000',\n leftIndent: 720 + level * 360,\n hangingIndent: 360,\n });\n }\n\n /**\n * Creates an upper letter list level (A, B, C, ...)\n * @param level The level index (0-8)\n * @param template The text template (default: '%1.')\n */\n static createUpperLetterLevel(level: number, template = `%${level + 1}.`): NumberingLevel {\n return new NumberingLevel({\n level,\n format: 'upperLetter',\n text: template,\n alignment: 'left',\n font: 'Verdana',\n fontSize: 24, // 12pt\n bold: false,\n color: '000000',\n leftIndent: 720 + level * 360,\n hangingIndent: 360,\n });\n }\n\n /**\n * Factory method for creating a numbering level\n * @param properties The level properties\n */\n static create(properties: NumberingLevelProperties): NumberingLevel {\n return new NumberingLevel(properties);\n }\n\n /**\n * Creates a NumberingLevel from XML element\n * @param xml The XML string of the <w:lvl> element\n * @returns NumberingLevel instance\n */\n static fromXML(xml: string): NumberingLevel {\n // Extract level index (required)\n const ilvlMatch = /<w:lvl[^>]*w:ilvl=\"([^\"]+)\"/.exec(xml);\n if (!ilvlMatch?.[1]) {\n throw new Error('Missing required w:ilvl attribute');\n }\n const level = parseInt(ilvlMatch[1], 10);\n\n // Extract attributes from the <w:lvl> opening tag specifically. Restrict\n // the regexes to the substring before the first `>` so they can't stray\n // onto a child element that happens to also carry a similarly-named attr.\n let tentative: boolean | undefined;\n let tplc: string | undefined;\n const lvlOpenEnd = xml.indexOf('>');\n if (lvlOpenEnd !== -1) {\n const lvlOpenTag = xml.substring(0, lvlOpenEnd);\n // w:tentative per ECMA-376 §17.9.29 — ST_OnOff.\n const tentativeMatch = /w:tentative\\s*=\\s*\"([^\"]*)\"/.exec(lvlOpenTag);\n if (tentativeMatch?.[1] !== undefined) {\n tentative = parseOnOffAttribute(tentativeMatch[1]);\n }\n // w:tplc per ECMA-376 §17.9.30 — ST_ShortHexNumber (8-char hex).\n const tplcMatch = /w:tplc\\s*=\\s*\"([^\"]*)\"/.exec(lvlOpenTag);\n if (tplcMatch?.[1]) {\n tplc = tplcMatch[1];\n }\n }\n\n // Extract w:lvlPicBulletId child element per ECMA-376 §17.9.15.\n // Zero is a valid ID, so use explicit check instead of truthy coercion.\n let lvlPicBulletId: number | undefined;\n const picBulletMatch = /<w:lvlPicBulletId\\s[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n if (picBulletMatch?.[1] !== undefined) {\n const parsed = parseInt(picBulletMatch[1], 10);\n if (!isNaN(parsed)) {\n lvlPicBulletId = parsed;\n }\n }\n\n // Extract <w:legacy> child per ECMA-376 §17.9.10. All three attributes are\n // independently optional; the element itself may be bare (a valid Word\n // placeholder). Presence of the tag at all means the level has legacy state\n // the source author wanted preserved, so we must emit it back on save even\n // if no attributes are set.\n let legacy: LegacyNumbering | undefined;\n const legacyMatch = /<w:legacy\\b([^>]*)\\/?>/.exec(xml);\n if (legacyMatch) {\n const attrs = legacyMatch[1] ?? '';\n legacy = {};\n const legacyValMatch = /\\bw:legacy\\s*=\\s*\"([^\"]*)\"/.exec(attrs);\n if (legacyValMatch?.[1] !== undefined) {\n legacy.legacy = parseOnOffAttribute(legacyValMatch[1]);\n }\n const spaceMatch = /\\bw:legacySpace\\s*=\\s*\"([^\"]*)\"/.exec(attrs);\n if (spaceMatch?.[1] !== undefined) {\n const parsed = parseInt(spaceMatch[1], 10);\n if (!isNaN(parsed)) legacy.legacySpace = parsed;\n }\n const indentMatch = /\\bw:legacyIndent\\s*=\\s*\"([^\"]*)\"/.exec(attrs);\n if (indentMatch?.[1] !== undefined) {\n const parsed = parseInt(indentMatch[1], 10);\n if (!isNaN(parsed)) legacy.legacyIndent = parsed;\n }\n }\n\n // Extract number format (required)\n const numFmtMatch = /<w:numFmt[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n if (!numFmtMatch?.[1]) {\n throw new Error('Missing required w:numFmt element');\n }\n const format = NumberingLevel.normalizeFormat(numFmtMatch[1]);\n\n // Extract level text (optional - can be empty for placeholder levels)\n const lvlTextMatch = /<w:lvlText[^>]*w:val=\"([^\"]*)\"/.exec(xml);\n const text = lvlTextMatch?.[1] !== undefined ? lvlTextMatch[1] : '';\n\n // Extract alignment (optional, default: left)\n const lvlJcMatch = /<w:lvlJc[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n const alignment = (lvlJcMatch?.[1] ? lvlJcMatch[1] : 'left') as NumberAlignment;\n\n // Extract start value (optional, default: 1)\n const startMatch = /<w:start[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n const start = startMatch?.[1] ? parseInt(startMatch[1], 10) : 1;\n\n // Extract suffix (optional, default: tab)\n const suffixMatch = /<w:suff[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n const suffix = suffixMatch?.[1] ? (suffixMatch[1] as 'tab' | 'space' | 'nothing') : 'tab';\n\n // Extract level restart (w:lvlRestart per ECMA-376 Part 1 §17.9.11)\n let lvlRestart: number | undefined;\n const lvlRestartMatch = /<w:lvlRestart[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n if (lvlRestartMatch?.[1]) {\n lvlRestart = parseInt(lvlRestartMatch[1], 10);\n }\n\n // Extract pStyle (paragraph style link)\n let pStyle: string | undefined;\n const pStyleMatch = /<w:pStyle[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n if (pStyleMatch?.[1]) {\n pStyle = pStyleMatch[1];\n }\n\n // Extract w:isLgl (legal numbering style) per ECMA-376 §17.9.4 — CT_OnOff.\n // Previously not parsed at all, so a source document's `<w:isLgl/>` was\n // silently dropped on load and the level reverted to non-legal formatting\n // on any round-trip through docxmlater.\n let isLegalNumberingStyle: boolean | undefined;\n const isLglMatch = /<w:isLgl\\b([^>]*)\\/?>/.exec(xml);\n if (isLglMatch) {\n const attrs = isLglMatch[1] ?? '';\n const valMatch = /w:val\\s*=\\s*\"([^\"]*)\"/.exec(attrs);\n isLegalNumberingStyle = valMatch?.[1] !== undefined ? parseOnOffAttribute(valMatch[1]) : true;\n }\n\n // Extract indentation from <w:pPr><w:ind> per ECMA-376 §17.3.1.12\n // CT_Ind. Both legacy LTR attrs (w:left / w:right) and bidi-aware\n // aliases (w:start / w:end) are valid; Word commonly emits the\n // bidi-aware form on modern documents. The previous regex read only\n // w:left / w:hanging, losing the numbering-level indent entirely on\n // any list authored or edited by a bidi-aware tool.\n //\n // The `[^>]*>` pattern (rather than `[^>]*\\/>`) also captures the\n // less-common non-self-closing form (`<w:ind …></w:ind>`).\n let leftIndent = 720 + level * 360; // default\n let hangingIndent = 360; // default\n const indMatch = /<w:ind\\b[^>]*>/.exec(xml);\n if (indMatch) {\n const indElement = indMatch[0];\n const leftMatch =\n /\\bw:start\\s*=\\s*\"([^\"]+)\"/.exec(indElement) || /\\bw:left\\s*=\\s*\"([^\"]+)\"/.exec(indElement);\n const hangingMatch = /\\bw:hanging\\s*=\\s*\"([^\"]+)\"/.exec(indElement);\n\n if (leftMatch?.[1]) leftIndent = parseInt(leftMatch[1], 10);\n if (hangingMatch?.[1]) hangingIndent = parseInt(hangingMatch[1], 10);\n }\n\n // Extract font and size from <w:rPr>\n let font = 'Calibri';\n let fontSize = 22;\n\n const rFontsMatch = /<w:rFonts[^>]*\\/>/.exec(xml);\n if (rFontsMatch) {\n const rFontsElement = rFontsMatch[0];\n const asciiMatch = /w:ascii=\"([^\"]+)\"/.exec(rFontsElement);\n if (asciiMatch?.[1]) font = asciiMatch[1];\n }\n\n const szMatch = /<w:sz[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n if (szMatch?.[1]) fontSize = parseInt(szMatch[1], 10);\n\n // List prefixes should never have bold, italic, or underline - ignore source XML formatting\n const bold = false;\n const italic = false;\n const underline: string | undefined = undefined;\n\n // Extract color from <w:rPr>\n let color: string | undefined;\n const colorMatch = /<w:color[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n if (colorMatch?.[1]) {\n color = colorMatch[1];\n }\n\n return new NumberingLevel({\n level,\n format,\n text,\n alignment,\n start,\n leftIndent,\n hangingIndent,\n font,\n fontSize,\n suffix,\n bold,\n italic,\n underline,\n color,\n lvlRestart,\n pStyle,\n isLegalNumberingStyle,\n tentative,\n tplc,\n lvlPicBulletId,\n legacy,\n });\n }\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { XMLElement } from '../xml/XMLBuilder';
|
|
2
|
-
import { AbstractNumbering } from './AbstractNumbering';
|
|
3
|
-
import { NumberingInstance } from './NumberingInstance';
|
|
4
|
-
import { NumberingLevel } from './NumberingLevel';
|
|
1
|
+
import { XMLElement } from '../xml/XMLBuilder.js';
|
|
2
|
+
import { AbstractNumbering } from './AbstractNumbering.js';
|
|
3
|
+
import { NumberingInstance } from './NumberingInstance.js';
|
|
4
|
+
import { NumberingLevel } from './NumberingLevel.js';
|
|
5
5
|
export interface NumberingConsolidationOptions {
|
|
6
6
|
protectedAbstractNumIds?: Set<number>;
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NumberingManager.d.ts","sourceRoot":"","sources":["../../src/formatting/NumberingManager.ts"],"names":[],"mappings":"AAOA,OAAO,EAAc,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"NumberingManager.d.ts","sourceRoot":"","sources":["../../src/formatting/NumberingManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.NumberingManager = void 0;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
4
|
+
const XMLBuilder_js_1 = require("../xml/XMLBuilder.js");
|
|
5
|
+
const AbstractNumbering_js_1 = require("./AbstractNumbering.js");
|
|
6
|
+
const NumberingInstance_js_1 = require("./NumberingInstance.js");
|
|
7
|
+
const logger_js_1 = require("../utils/logger.js");
|
|
8
8
|
class NumberingManager {
|
|
9
9
|
abstractNumberings;
|
|
10
10
|
instances;
|
|
@@ -25,9 +25,9 @@ class NumberingManager {
|
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
27
|
initializeDefaultNumberings() {
|
|
28
|
-
const bulletAbstract =
|
|
28
|
+
const bulletAbstract = AbstractNumbering_js_1.AbstractNumbering.createBulletList(this.nextAbstractNumId++);
|
|
29
29
|
this.addAbstractNumbering(bulletAbstract);
|
|
30
|
-
const numberedAbstract =
|
|
30
|
+
const numberedAbstract = AbstractNumbering_js_1.AbstractNumbering.createNumberedList(this.nextAbstractNumId++);
|
|
31
31
|
this.addAbstractNumbering(numberedAbstract);
|
|
32
32
|
}
|
|
33
33
|
addAbstractNumbering(abstractNumbering) {
|
|
@@ -138,53 +138,53 @@ class NumberingManager {
|
|
|
138
138
|
createBulletList(levels = 9, bullets) {
|
|
139
139
|
const abstractNumId = this.nextAbstractNumId++;
|
|
140
140
|
const abstractNumbering = bullets
|
|
141
|
-
?
|
|
142
|
-
:
|
|
141
|
+
? AbstractNumbering_js_1.AbstractNumbering.createBulletList(abstractNumId, levels, bullets)
|
|
142
|
+
: AbstractNumbering_js_1.AbstractNumbering.createBulletList(abstractNumId, levels);
|
|
143
143
|
this.addAbstractNumbering(abstractNumbering);
|
|
144
144
|
const numId = this.nextNumId++;
|
|
145
|
-
const instance =
|
|
145
|
+
const instance = NumberingInstance_js_1.NumberingInstance.create({ numId, abstractNumId });
|
|
146
146
|
this.addInstance(instance);
|
|
147
147
|
return numId;
|
|
148
148
|
}
|
|
149
149
|
createNumberedList(levels = 9, formats) {
|
|
150
150
|
const abstractNumId = this.nextAbstractNumId++;
|
|
151
151
|
const abstractNumbering = formats
|
|
152
|
-
?
|
|
153
|
-
:
|
|
152
|
+
? AbstractNumbering_js_1.AbstractNumbering.createNumberedList(abstractNumId, levels, formats)
|
|
153
|
+
: AbstractNumbering_js_1.AbstractNumbering.createNumberedList(abstractNumId, levels);
|
|
154
154
|
this.addAbstractNumbering(abstractNumbering);
|
|
155
155
|
const numId = this.nextNumId++;
|
|
156
|
-
const instance =
|
|
156
|
+
const instance = NumberingInstance_js_1.NumberingInstance.create({ numId, abstractNumId });
|
|
157
157
|
this.addInstance(instance);
|
|
158
158
|
return numId;
|
|
159
159
|
}
|
|
160
160
|
createMultiLevelList() {
|
|
161
161
|
const abstractNumId = this.nextAbstractNumId++;
|
|
162
|
-
const abstractNumbering =
|
|
162
|
+
const abstractNumbering = AbstractNumbering_js_1.AbstractNumbering.createMultiLevelList(abstractNumId);
|
|
163
163
|
this.addAbstractNumbering(abstractNumbering);
|
|
164
164
|
const numId = this.nextNumId++;
|
|
165
|
-
const instance =
|
|
165
|
+
const instance = NumberingInstance_js_1.NumberingInstance.create({ numId, abstractNumId });
|
|
166
166
|
this.addInstance(instance);
|
|
167
167
|
return numId;
|
|
168
168
|
}
|
|
169
169
|
createOutlineList() {
|
|
170
170
|
const abstractNumId = this.nextAbstractNumId++;
|
|
171
|
-
const abstractNumbering =
|
|
171
|
+
const abstractNumbering = AbstractNumbering_js_1.AbstractNumbering.createOutlineList(abstractNumId);
|
|
172
172
|
this.addAbstractNumbering(abstractNumbering);
|
|
173
173
|
const numId = this.nextNumId++;
|
|
174
|
-
const instance =
|
|
174
|
+
const instance = NumberingInstance_js_1.NumberingInstance.create({ numId, abstractNumId });
|
|
175
175
|
this.addInstance(instance);
|
|
176
176
|
return numId;
|
|
177
177
|
}
|
|
178
178
|
createCustomList(levels, name) {
|
|
179
179
|
const abstractNumId = this.nextAbstractNumId++;
|
|
180
|
-
const abstractNumbering =
|
|
180
|
+
const abstractNumbering = AbstractNumbering_js_1.AbstractNumbering.create({
|
|
181
181
|
abstractNumId,
|
|
182
182
|
name,
|
|
183
183
|
levels,
|
|
184
184
|
});
|
|
185
185
|
this.addAbstractNumbering(abstractNumbering);
|
|
186
186
|
const numId = this.nextNumId++;
|
|
187
|
-
const instance =
|
|
187
|
+
const instance = NumberingInstance_js_1.NumberingInstance.create({ numId, abstractNumId });
|
|
188
188
|
this.addInstance(instance);
|
|
189
189
|
return numId;
|
|
190
190
|
}
|
|
@@ -193,7 +193,7 @@ class NumberingManager {
|
|
|
193
193
|
throw new Error(`Abstract numbering ${abstractNumId} does not exist`);
|
|
194
194
|
}
|
|
195
195
|
const numId = this.nextNumId++;
|
|
196
|
-
const instance =
|
|
196
|
+
const instance = NumberingInstance_js_1.NumberingInstance.create({ numId, abstractNumId });
|
|
197
197
|
this.addInstance(instance);
|
|
198
198
|
return numId;
|
|
199
199
|
}
|
|
@@ -210,7 +210,7 @@ class NumberingManager {
|
|
|
210
210
|
}
|
|
211
211
|
const abstractNumId = existingInstance.getAbstractNumId();
|
|
212
212
|
const newNumId = this.nextNumId++;
|
|
213
|
-
const newInstance =
|
|
213
|
+
const newInstance = NumberingInstance_js_1.NumberingInstance.create({ numId: newNumId, abstractNumId });
|
|
214
214
|
newInstance.setLevelOverride(level, startValue);
|
|
215
215
|
this.addInstance(newInstance);
|
|
216
216
|
return newNumId;
|
|
@@ -232,17 +232,17 @@ class NumberingManager {
|
|
|
232
232
|
hangingIndent = Math.max(0, hangingIndent);
|
|
233
233
|
const instance = this.getInstance(numId);
|
|
234
234
|
if (!instance) {
|
|
235
|
-
|
|
235
|
+
logger_js_1.defaultLogger.warn(`Numbering instance ${numId} does not exist`);
|
|
236
236
|
return false;
|
|
237
237
|
}
|
|
238
238
|
const abstractNum = this.getAbstractNumbering(instance.getAbstractNumId());
|
|
239
239
|
if (!abstractNum) {
|
|
240
|
-
|
|
240
|
+
logger_js_1.defaultLogger.warn(`Abstract numbering for instance ${numId} does not exist`);
|
|
241
241
|
return false;
|
|
242
242
|
}
|
|
243
243
|
const numLevel = abstractNum.getLevel(level);
|
|
244
244
|
if (!numLevel) {
|
|
245
|
-
|
|
245
|
+
logger_js_1.defaultLogger.warn(`Level ${level} does not exist in abstract numbering`);
|
|
246
246
|
return false;
|
|
247
247
|
}
|
|
248
248
|
numLevel.setLeftIndent(leftIndent);
|
|
@@ -252,12 +252,12 @@ class NumberingManager {
|
|
|
252
252
|
normalizeListIndentation(numId) {
|
|
253
253
|
const instance = this.getInstance(numId);
|
|
254
254
|
if (!instance) {
|
|
255
|
-
|
|
255
|
+
logger_js_1.defaultLogger.warn(`Numbering instance ${numId} does not exist`);
|
|
256
256
|
return false;
|
|
257
257
|
}
|
|
258
258
|
const abstractNum = this.getAbstractNumbering(instance.getAbstractNumId());
|
|
259
259
|
if (!abstractNum) {
|
|
260
|
-
|
|
260
|
+
logger_js_1.defaultLogger.warn(`Abstract numbering for instance ${numId} does not exist`);
|
|
261
261
|
return false;
|
|
262
262
|
}
|
|
263
263
|
const levels = abstractNum.getAllLevels();
|
|
@@ -384,7 +384,7 @@ class NumberingManager {
|
|
|
384
384
|
return parts.join('::');
|
|
385
385
|
}
|
|
386
386
|
generateNumberingXml() {
|
|
387
|
-
const builder = new
|
|
387
|
+
const builder = new XMLBuilder_js_1.XMLBuilder();
|
|
388
388
|
const children = [];
|
|
389
389
|
const abstractNumberings = this.getAllAbstractNumberings();
|
|
390
390
|
abstractNumberings.forEach((abstractNum) => {
|
|
@@ -394,7 +394,7 @@ class NumberingManager {
|
|
|
394
394
|
instances.forEach((instance) => {
|
|
395
395
|
children.push(instance.toXML());
|
|
396
396
|
});
|
|
397
|
-
const numbering =
|
|
397
|
+
const numbering = XMLBuilder_js_1.XMLBuilder.w('numbering', {
|
|
398
398
|
'xmlns:w': 'http://schemas.openxmlformats.org/wordprocessingml/2006/main',
|
|
399
399
|
'xmlns:r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',
|
|
400
400
|
}, children);
|
|
@@ -411,7 +411,7 @@ class NumberingManager {
|
|
|
411
411
|
instances.forEach((instance) => {
|
|
412
412
|
children.push(instance.toXML());
|
|
413
413
|
});
|
|
414
|
-
return
|
|
414
|
+
return XMLBuilder_js_1.XMLBuilder.w('numbering', {
|
|
415
415
|
'xmlns:w': 'http://schemas.openxmlformats.org/wordprocessingml/2006/main',
|
|
416
416
|
'xmlns:r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',
|
|
417
417
|
}, children);
|