docxmlater 10.4.1 → 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 +74 -67
- package/dist/core/Document.d.ts.map +1 -1
- package/dist/core/Document.js +605 -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 +2056 -1073
- 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 +461 -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 +2180 -617
- 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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Style.js","sourceRoot":"","sources":["../../../src/formatting/Style.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAc,MAAM,sBAAsB,CAAC;AAE9D,OAAO,EAAE,GAAG,EAAiB,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAiB,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAEnF,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AA6QlD,MAAM,OAAO,KAAK;IACR,UAAU,CAAkB;IAMpC,YAAY,UAA2B;QACrC,IAAI,CAAC,UAAU,GAAG,EAAE,GAAG,UAAU,EAAE,CAAC;IACtC,CAAC;IAMD,UAAU;QACR,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;IACjC,CAAC;IAMD,OAAO;QACL,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;IAC9B,CAAC;IAMD,OAAO;QACL,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;IAC9B,CAAC;IAMD,aAAa;QACX,OAAO,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;IAChC,CAAC;IAMD,YAAY;QACV,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,IAAI,KAAK,CAAC;IAC5C,CAAC;IAOD,YAAY,CAAC,KAAc;QACzB,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,KAAK,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IAOD,UAAU,CAAC,OAAe;QACxB,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IAOD,OAAO,CAAC,OAAe;QACrB,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,OAAO,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAOD,sBAAsB,CAAC,UAA+B;QACpD,IAAI,CAAC,UAAU,CAAC,mBAAmB,GAAG,EAAE,GAAG,UAAU,EAAE,CAAC;QACxD,OAAO,IAAI,CAAC;IACd,CAAC;IAOD,gBAAgB,CAAC,UAAyB;QACxC,IAAI,CAAC,UAAU,CAAC,aAAa,GAAG,EAAE,GAAG,UAAU,EAAE,CAAC;QAClD,OAAO,IAAI,CAAC;IACd,CAAC;IAMD,gBAAgB;QACd,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;IACvC,CAAC;IAMD,sBAAsB;QACpB,OAAO,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC;IAC7C,CAAC;IAQD,uBAAuB,CAAC,OAA6B;QACnD,IAAI,CAAC,UAAU,CAAC,oBAAoB,GAAG,OAAO,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IAMD,uBAAuB;QACrB,OAAO,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC;IAC9C,CAAC;IAOD,UAAU,CAAC,OAAgB;QACzB,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IAOD,aAAa,CAAC,QAAgB;QAC5B,IAAI,QAAQ,GAAG,CAAC,IAAI,QAAQ,GAAG,EAAE,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,QAAQ,CAAC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;IAOD,aAAa,CAAC,MAAe;QAC3B,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,MAAM,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAOD,iBAAiB,CAAC,OAAgB;QAChC,IAAI,CAAC,UAAU,CAAC,cAAc,GAAG,OAAO,CAAC;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;IAOD,SAAS,CAAC,MAAe;QACvB,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;IAOD,WAAW,CAAC,QAAiB;QAC3B,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAMD,kBAAkB,CAAC,OAAgB;QACjC,IAAI,CAAC,UAAU,CAAC,eAAe,GAAG,OAAO,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAKD,kBAAkB;QAChB,OAAO,IAAI,CAAC,UAAU,CAAC,eAAe,KAAK,IAAI,CAAC;IAClD,CAAC;IAMD,gBAAgB,CAAC,OAAgB;QAC/B,IAAI,CAAC,UAAU,CAAC,aAAa,GAAG,OAAO,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IAKD,gBAAgB;QACd,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,KAAK,IAAI,CAAC;IAChD,CAAC;IAOD,OAAO,CAAC,OAAe;QACrB,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,OAAO,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAOD,eAAe,CAAC,OAAgB;QAC9B,IAAI,CAAC,UAAU,CAAC,YAAY,GAAG,OAAO,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IAOD,UAAU,CAAC,OAAe;QACxB,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IAOD,kBAAkB,CAAC,UAAgC;QACjD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;YAChC,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,EAAE,CAAC;QAClC,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,GAAG,EAAE,GAAG,UAAU,EAAE,CAAC;QACrD,OAAO,IAAI,CAAC;IACd,CAAC;IAOD,sBAAsB,CAAC,UAAoC;QACzD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;YAChC,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,EAAE,CAAC;QAClC,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,GAAG,EAAE,GAAG,UAAU,EAAE,CAAC;QACpD,OAAO,IAAI,CAAC;IACd,CAAC;IAOD,qBAAqB,CAAC,UAAmC;QACvD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;YAChC,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,EAAE,CAAC;QAClC,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,GAAG,EAAE,GAAG,UAAU,EAAE,CAAC;QACnD,OAAO,IAAI,CAAC;IACd,CAAC;IAOD,cAAc,CAAC,IAAY;QACzB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;YAChC,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,EAAE,CAAC;QAClC,CAAC;QACD,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC;QAC9C,OAAO,IAAI,CAAC;IACd,CAAC;IAOD,cAAc,CAAC,IAAY;QACzB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;YAChC,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,EAAE,CAAC;QAClC,CAAC;QACD,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3D,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC;QAC9C,OAAO,IAAI,CAAC;IACd,CAAC;IAOD,wBAAwB,CAAC,WAAuC;QAC9D,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;YAChC,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,EAAE,CAAC;QAClC,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC;YACtD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,qBAAqB,GAAG,EAAE,CAAC;QACxD,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,GAAG,WAAW,EAAE,CAAC,CAAC;QAC1E,OAAO,IAAI,CAAC;IACd,CAAC;IAaD,OAAO;QACL,IAAI,CAAC;YAEH,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;gBAC/E,OAAO,KAAK,CAAC;YACf,CAAC;YAGD,MAAM,UAAU,GAAgB,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;YACjF,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/C,OAAO,KAAK,CAAC;YACf,CAAC;YAGD,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,KAAK,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;gBACxD,OAAO,KAAK,CAAC;YACf,CAAC;YAGD,IAAI,IAAI,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC;gBACxC,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC;gBAG/C,IAAI,EAAE,CAAC,SAAS,EAAE,CAAC;oBACjB,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;oBACrF,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;wBAC5C,OAAO,KAAK,CAAC;oBACf,CAAC;gBACH,CAAC;gBAGD,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;oBACf,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC;oBAC3B,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;wBAAE,OAAO,KAAK,CAAC;oBACrE,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,GAAG,CAAC;wBAAE,OAAO,KAAK,CAAC;oBACnE,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,GAAG,CAAC;wBAAE,OAAO,KAAK,CAAC;oBACjE,IAAI,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;wBACjF,OAAO,KAAK,CAAC;oBACf,CAAC;gBACH,CAAC;gBAGD,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;oBACnB,MAAM,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC;oBAE3B,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM;wBAAE,OAAO,KAAK,CAAC;oBAC/D,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM;wBAAE,OAAO,KAAK,CAAC;gBACnE,CAAC;YACH,CAAC;YAGD,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;gBAClC,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;gBAGzC,IAAI,EAAE,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;oBAC9D,OAAO,KAAK,CAAC;gBACf,CAAC;gBAGD,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;oBACnD,OAAO,KAAK,CAAC;gBACf,CAAC;gBAGD,IAAI,EAAE,CAAC,SAAS,EAAE,CAAC;oBACjB,MAAM,eAAe,GAAG;wBACtB,OAAO;wBACP,MAAM;wBACN,MAAM;wBACN,UAAU;wBACV,UAAU;wBACV,UAAU;wBACV,WAAW;wBACX,aAAa;wBACb,SAAS;wBACT,YAAY;wBACZ,OAAO;wBACP,WAAW;wBACX,SAAS;wBACT,MAAM;wBACN,KAAK;wBACL,OAAO;wBACP,QAAQ;qBACT,CAAC;oBACF,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;wBAC5C,OAAO,KAAK,CAAC;oBACf,CAAC;gBACH,CAAC;YACH,CAAC;YAGD,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;gBAC7C,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,EAAE,EAAE,CAAC;oBACtE,OAAO,KAAK,CAAC;gBACf,CAAC;YACH,CAAC;YAGD,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;gBACrD,OAAO,KAAK,CAAC;YACf,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAMD,KAAK;QACH,MAAM,UAAU,GAA2B;YACzC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI;YAC9B,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO;SACrC,CAAC;QAEF,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;YAC9B,UAAU,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC;QAChC,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;YAChC,UAAU,CAAC,eAAe,CAAC,GAAG,GAAG,CAAC;QACpC,CAAC;QAED,MAAM,aAAa,GAAiB,EAAE,CAAC;QAGvC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAGhF,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YAC5B,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACxF,CAAC;QAGD,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YAC5B,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACxF,CAAC;QAGD,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;YACzB,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAClF,CAAC;QAGD,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;YACzB,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAClF,CAAC;QAMD,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;YAC/C,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC;gBACjC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;YACvD,CAAC;iBAAM,CAAC;gBACN,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YAC3E,CAAC;QACH,CAAC;QAOD,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACzC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;gBAC3B,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;YACjD,CAAC;iBAAM,CAAC;gBACN,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;QAID,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7C,aAAa,CAAC,IAAI,CAChB,UAAU,CAAC,KAAK,CAAC,YAAY,EAAE;gBAC7B,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;aAC5C,CAAC,CACH,CAAC;QACJ,CAAC;QAGD,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7C,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;gBAC/B,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;YACrD,CAAC;iBAAM,CAAC;gBACN,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YACzE,CAAC;QACH,CAAC;QAGD,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;YACjD,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC;gBACnC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC;YACzD,CAAC;iBAAM,CAAC;gBACN,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,gBAAgB,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YAC7E,CAAC;QACH,CAAC;QAKD,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1C,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;gBAC5B,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;YAClD,CAAC;iBAAM,CAAC;gBACN,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;aAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;YACxC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;QAClD,CAAC;QAGD,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACzC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;gBAC3B,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;YACjD,CAAC;iBAAM,CAAC;gBACN,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;QAGD,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3C,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;gBAC7B,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;YACnD,CAAC;iBAAM,CAAC;gBACN,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YACvE,CAAC;QACH,CAAC;QAGD,IAAI,IAAI,CAAC,UAAU,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;YAClD,IAAI,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC;gBACpC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAC1D,CAAC;iBAAM,CAAC;gBACN,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,iBAAiB,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YAC9E,CAAC;QACH,CAAC;QAGD,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YAChD,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;gBAClC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;YACxD,CAAC;iBAAM,CAAC;gBACN,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC;QAMD,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,EAAE,EAAE,CAAC;YACtE,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAClF,CAAC;QAGD,IAAI,IAAI,CAAC,UAAU,CAAC,mBAAmB,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YACjE,MAAM,GAAG,GAAG,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC;YAExF,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;gBAC1B,MAAM,aAAa,GAAiB,EAAE,CAAC;gBACvC,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;oBAC7C,aAAa,CAAC,IAAI,CAChB,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAC1E,CAAC;gBACJ,CAAC;gBACD,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;oBAC9C,aAAa,CAAC,IAAI,CAChB,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAC5E,CAAC;gBACJ,CAAC;gBACD,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAI7B,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;oBAChE,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC5C,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC;4BACvB,YAAY;4BACZ,aAAa;4BACb,mBAAmB;4BACnB,WAAW;4BACX,gBAAgB;yBACjB,CAAC,CAAC;wBACH,IAAI,SAAS,GAAG,CAAC,CAAC;wBAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;4BAC7C,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;4BAC9B,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gCACnE,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC;4BACpB,CAAC;wBACH,CAAC;wBACD,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;oBAC7C,CAAC;yBAAM,CAAC;wBACN,GAAG,CAAC,QAAQ,GAAG,CAAC,OAAO,CAAC,CAAC;oBAC3B,CAAC;gBACH,CAAC;YACH,CAAC;YACD,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5C,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QAGD,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;YAClC,MAAM,GAAG,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;YACtE,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5C,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QAGD,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;YAE/B,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;gBACrC,MAAM,KAAK,GAAG,IAAI,CAAC,uBAAuB,CACxC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,EAChC,IAAI,CAAC,UAAU,CAAC,UAAU,CAC3B,CAAC;gBACF,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAChD,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC5B,CAAC;YACH,CAAC;YAGD,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;gBACnC,MAAM,IAAI,GAAG,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;gBAC7E,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC9C,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC3B,CAAC;YACH,CAAC;YAGD,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;gBACpC,MAAM,IAAI,GAAG,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBAC/E,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC9C,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC3B,CAAC;YACH,CAAC;YAGD,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC;gBACrD,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC;oBAC3E,MAAM,UAAU,GAAG,IAAI,CAAC,6BAA6B,CAAC,WAAW,CAAC,CAAC;oBACnE,IAAI,UAAU,CAAC,QAAQ,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC1D,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;oBACjC,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,UAAU,CAAC,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;IAC1D,CAAC;IAKO,2BAA2B,CAAC,UAA+B;QACjE,MAAM,WAAW,GAAiB,EAAE,CAAC;QAOrC,MAAM,WAAW,GAAG,CAAC,GAAW,EAAE,KAA0B,EAAQ,EAAE;YACpE,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO;YAChC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QAC5F,CAAC,CAAC;QAQF,WAAW,CAAC,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC7C,WAAW,CAAC,WAAW,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;QAC/C,WAAW,CAAC,iBAAiB,EAAE,UAAU,CAAC,eAAe,CAAC,CAAC;QAO3D,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACvB,MAAM,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC;YAC7B,MAAM,KAAK,GAA2B,EAAE,CAAC;YACzC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS;gBAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;YACrD,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS;gBAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;YACrD,IAAI,CAAC,CAAC,KAAK;gBAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;YACxC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS;gBAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;YACrD,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS;gBAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;YACrD,IAAI,CAAC,CAAC,MAAM;gBAAE,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;YAC3C,IAAI,CAAC,CAAC,MAAM;gBAAE,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;YAC3C,IAAI,CAAC,CAAC,OAAO;gBAAE,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;YAC9C,IAAI,CAAC,CAAC,OAAO;gBAAE,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;YAC9C,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS;gBAAE,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpE,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS;gBAAE,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpE,IAAI,CAAC,CAAC,IAAI;gBAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACrC,IAAI,CAAC,CAAC,OAAO;gBAAE,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;YAC9C,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS;gBAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YACjE,IAAI,CAAC,CAAC,UAAU,KAAK,SAAS;gBAAE,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YACjF,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAClC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;QAED,WAAW,CAAC,cAAc,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;QAErD,WAAW,CAAC,qBAAqB,EAAE,UAAU,CAAC,mBAAmB,CAAC,CAAC;QAMnE,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACvB,MAAM,cAAc,GAAiB,EAAE,CAAC;YACxC,MAAM,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC;YAC7B,MAAM,YAAY,GAAG,CACnB,GAAW,EACX,GAYa,EACP,EAAE;gBACR,IAAI,CAAC,GAAG;oBAAE,OAAO;gBAOjB,MAAM,KAAK,GAAoC,EAAE,OAAO,EAAE,GAAG,CAAC,KAAK,IAAI,KAAK,EAAE,CAAC;gBAC/E,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS;oBAAE,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC;gBACrD,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS;oBAAE,KAAK,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC;gBAC1D,IAAI,GAAG,CAAC,KAAK;oBAAE,KAAK,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC;gBAC5C,IAAI,GAAG,CAAC,UAAU;oBAAE,KAAK,CAAC,cAAc,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC;gBAC3D,IAAI,GAAG,CAAC,SAAS;oBAAE,KAAK,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC;gBACxD,IAAI,GAAG,CAAC,UAAU;oBAAE,KAAK,CAAC,cAAc,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC;gBAC3D,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS;oBAAE,KAAK,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;gBACzE,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS;oBAAE,KAAK,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;gBACtE,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;YACpD,CAAC,CAAC;YAEF,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;YAC3B,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YAC7B,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;YACjC,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;YAC/B,YAAY,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;YACnC,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;YAC3B,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;QAID,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACvB,MAAM,QAAQ,GAAG,sBAAsB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAC5D,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;QAMD,IAAI,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClD,MAAM,WAAW,GAAiB,EAAE,CAAC;YACrC,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;gBAClC,MAAM,KAAK,GAAoC;oBAC7C,OAAO,EAAE,GAAG,CAAC,GAAG,IAAI,MAAM;oBAC1B,OAAO,EAAE,GAAG,CAAC,QAAQ;iBACtB,CAAC;gBACF,IAAI,GAAG,CAAC,MAAM;oBAAE,KAAK,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC;gBAC/C,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;YACnD,CAAC;YACD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3B,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;QAED,WAAW,CAAC,qBAAqB,EAAE,UAAU,CAAC,mBAAmB,CAAC,CAAC;QACnE,WAAW,CAAC,SAAS,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;QAC3C,WAAW,CAAC,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC7C,WAAW,CAAC,eAAe,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC;QACvD,WAAW,CAAC,cAAc,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;QACrD,WAAW,CAAC,aAAa,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;QACnD,WAAW,CAAC,aAAa,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;QACnD,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;QACrC,WAAW,CAAC,gBAAgB,EAAE,UAAU,CAAC,cAAc,CAAC,CAAC;QASzD,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACvB,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC;YAC/B,MAAM,UAAU,GAAoC,EAAE,CAAC;YACvD,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS;gBAAE,UAAU,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC;YAClE,IAAI,GAAG,CAAC,WAAW,KAAK,SAAS;gBAAE,UAAU,CAAC,eAAe,CAAC,GAAG,GAAG,CAAC,WAAW,CAAC;YACjF,IAAI,GAAG,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;gBACxC,UAAU,CAAC,qBAAqB,CAAC,GAAG,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YACxE,CAAC;YACD,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS;gBAAE,UAAU,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC;YAC/D,IAAI,GAAG,CAAC,UAAU,KAAK,SAAS;gBAAE,UAAU,CAAC,cAAc,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC;YAC9E,IAAI,GAAG,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;gBACvC,UAAU,CAAC,oBAAoB,CAAC,GAAG,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YACtE,CAAC;YACD,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS;gBAAE,UAAU,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC;YAC5D,IAAI,GAAG,CAAC,QAAQ;gBAAE,UAAU,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC;YAC1D,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;QAMD,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;YAC3B,MAAM,GAAG,GAAG,UAAU,CAAC,WAAW,CAAC;YACnC,MAAM,UAAU,GAA2B,EAAE,CAAC;YAC9C,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS;gBAAE,UAAU,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC;YAC5D,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS;gBAAE,UAAU,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC;YAC/D,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC9B,UAAU,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC;YACxC,CAAC;iBAAM,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;gBACvC,UAAU,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC;YAC5C,CAAC;YACD,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS;gBAAE,UAAU,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC;YAC3E,IAAI,GAAG,CAAC,UAAU,KAAK,SAAS;gBAAE,UAAU,CAAC,cAAc,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC;YAC9E,IAAI,GAAG,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;gBACnC,UAAU,CAAC,gBAAgB,CAAC,GAAG,GAAG,CAAC,YAAY,CAAC;YAClD,CAAC;iBAAM,IAAI,GAAG,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;gBAC5C,UAAU,CAAC,kBAAkB,CAAC,GAAG,GAAG,CAAC,cAAc,CAAC;YACtD,CAAC;YACD,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;QAKD,WAAW,CAAC,mBAAmB,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAE/D,WAAW,CAAC,eAAe,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC;QACvD,WAAW,CAAC,iBAAiB,EAAE,UAAU,CAAC,eAAe,CAAC,CAAC;QAG3D,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;YAEzB,MAAM,cAAc,GAAG,UAAU,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC;YAC1F,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;QACxE,CAAC;QAQD,IAAI,UAAU,CAAC,aAAa,EAAE,CAAC;YAC7B,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;QAC7F,CAAC;QACD,IAAI,UAAU,CAAC,aAAa,EAAE,CAAC;YAC7B,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;QAC7F,CAAC;QACD,IAAI,UAAU,CAAC,gBAAgB,EAAE,CAAC;YAChC,WAAW,CAAC,IAAI,CACd,UAAU,CAAC,KAAK,CAAC,kBAAkB,EAAE,EAAE,OAAO,EAAE,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAC/E,CAAC;QACJ,CAAC;QAGD,IAAI,UAAU,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;YAC1C,WAAW,CAAC,IAAI,CACd,UAAU,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,UAAU,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC,CAChF,CAAC;QACJ,CAAC;QAID,IAAI,UAAU,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YACnC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;QACxF,CAAC;QAID,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;YACxB,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACnF,CAAC;QAED,OAAO,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;IACrD,CAAC;IAOO,qBAAqB,CAAC,UAAyB;QACrD,MAAM,GAAG,GAAG,GAAG,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAC;QACrD,OAAO,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;IACnD,CAAC;IAKO,uBAAuB,CAC7B,UAAgC,EAChC,UAAgC,EAChC,aAAa,GAAG,KAAK;QAErB,MAAM,aAAa,GAAiB,EAAE,CAAC;QAOvC,IAAI,UAAU,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACzC,aAAa,CAAC,IAAI,CAChB,UAAU,CAAC,KAAK,CAAC,qBAAqB,EAAE;gBACtC,OAAO,EAAE,UAAU,CAAC,WAAW;aAChC,CAAC,CACH,CAAC;QACJ,CAAC;QAGD,IAAI,UAAU,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACzC,aAAa,CAAC,IAAI,CAChB,UAAU,CAAC,KAAK,CAAC,qBAAqB,EAAE;gBACtC,OAAO,EAAE,UAAU,CAAC,WAAW;aAChC,CAAC,CACH,CAAC;QACJ,CAAC;QAMD,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;YACzB,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAChF,CAAC;QAGD,IAAI,UAAU,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACzC,aAAa,CAAC,IAAI,CAChB,UAAU,CAAC,KAAK,CAAC,gBAAgB,EAAE;gBACjC,KAAK,EAAE,UAAU,CAAC,WAAW;gBAC7B,QAAQ,EAAE,KAAK;aAChB,CAAC,CACH,CAAC;QACJ,CAAC;QAGD,IAAI,UAAU,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACpC,aAAa,CAAC,IAAI,CAChB,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE;gBACzB,KAAK,EAAE,UAAU,CAAC,MAAM;gBACxB,QAAQ,EAAE,UAAU,CAAC,UAAU,IAAI,KAAK;aACzC,CAAC,CACH,CAAC;QACJ,CAAC;QAGD,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACvB,MAAM,cAAc,GAAG,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC9E,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC;QAGD,IAAI,UAAU,CAAC,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC;YACzC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;QACtE,CAAC;QAGD,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;YAC3B,MAAM,cAAc,GAAiB,EAAE,CAAC;YACxC,IAAI,UAAU,CAAC,WAAW,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;gBAC7C,cAAc,CAAC,IAAI,CACjB,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE;oBACtB,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC,GAAG;oBACjC,QAAQ,EAAE,KAAK;iBAChB,CAAC,CACH,CAAC;YACJ,CAAC;YACD,IAAI,UAAU,CAAC,WAAW,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC9C,cAAc,CAAC,IAAI,CACjB,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE;oBACvB,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC,IAAI;oBAClC,QAAQ,EAAE,KAAK;iBAChB,CAAC,CACH,CAAC;YACJ,CAAC;YACD,IAAI,UAAU,CAAC,WAAW,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAChD,cAAc,CAAC,IAAI,CACjB,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE;oBACzB,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC,MAAM;oBACpC,QAAQ,EAAE,KAAK;iBAChB,CAAC,CACH,CAAC;YACJ,CAAC;YACD,IAAI,UAAU,CAAC,WAAW,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC/C,cAAc,CAAC,IAAI,CACjB,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE;oBACxB,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC,KAAK;oBACnC,QAAQ,EAAE,KAAK;iBAChB,CAAC,CACH,CAAC;YACJ,CAAC;YACD,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC;QAED,OAAO,UAAU,CAAC,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;IACzD,CAAC;IAKO,2BAA2B,CAAC,UAAoC;QACtE,MAAM,YAAY,GAAiB,EAAE,CAAC;QAGtC,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACvB,MAAM,cAAc,GAAG,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAC7E,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC;QAGD,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACvB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;QACrE,CAAC;QAGD,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACvB,MAAM,cAAc,GAAiB,EAAE,CAAC;YACxC,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;gBACzC,cAAc,CAAC,IAAI,CACjB,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE;oBACtB,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG;oBAC7B,QAAQ,EAAE,KAAK;iBAChB,CAAC,CACH,CAAC;YACJ,CAAC;YACD,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC1C,cAAc,CAAC,IAAI,CACjB,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE;oBACvB,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,IAAI;oBAC9B,QAAQ,EAAE,KAAK;iBAChB,CAAC,CACH,CAAC;YACJ,CAAC;YACD,IAAI,UAAU,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC5C,cAAc,CAAC,IAAI,CACjB,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE;oBACzB,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,MAAM;oBAChC,QAAQ,EAAE,KAAK;iBAChB,CAAC,CACH,CAAC;YACJ,CAAC;YACD,IAAI,UAAU,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC3C,cAAc,CAAC,IAAI,CACjB,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE;oBACxB,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,KAAK;oBAC/B,QAAQ,EAAE,KAAK;iBAChB,CAAC,CACH,CAAC;YACJ,CAAC;YACD,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;QAGD,IAAI,UAAU,CAAC,iBAAiB,EAAE,CAAC;YACjC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;QAC3F,CAAC;QAED,OAAO,UAAU,CAAC,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;IACvD,CAAC;IAKO,0BAA0B,CAAC,UAAmC;QACpE,MAAM,YAAY,GAAiB,EAAE,CAAC;QAOtC,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;YACzB,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;QACnD,CAAC;QAGD,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;YACxB,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;QACnD,CAAC;QAED,OAAO,UAAU,CAAC,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;IACvD,CAAC;IAKO,6BAA6B,CAAC,WAAuC;QAC3E,MAAM,kBAAkB,GAAiB,EAAE,CAAC;QAG5C,IAAI,WAAW,CAAC,mBAAmB,EAAE,CAAC;YACpC,MAAM,GAAG,GAAG,IAAI,CAAC,2BAA2B,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC;YAC9E,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5C,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QAGD,IAAI,WAAW,CAAC,aAAa,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;YAClE,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5C,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QAGD,IAAI,WAAW,CAAC,eAAe,EAAE,CAAC;YAChC,MAAM,KAAK,GAAG,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,eAAe,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;YAClF,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChD,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QAGD,IAAI,WAAW,CAAC,aAAa,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,0BAA0B,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;YACxE,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9C,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QAGD,IAAI,WAAW,CAAC,cAAc,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,2BAA2B,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;YAC1E,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9C,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QAED,OAAO,UAAU,CAAC,CAAC,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,WAAW,CAAC,IAAI,EAAE,EAAE,kBAAkB,CAAC,CAAC;IACxF,CAAC;IAOO,sBAAsB,CAC5B,OAAmC,EACnC,gBAAyB;QAEzB,MAAM,cAAc,GAAiB,EAAE,CAAC;QAGxC,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,CAAU,CAAC;QACtF,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;YAC7B,IAAI,MAAM,EAAE,CAAC;gBAIX,MAAM,KAAK,GAAoC,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,IAAI,KAAK,EAAE,CAAC;gBAClF,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;oBAAE,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC;gBAC3D,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;oBAAE,KAAK,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;gBAChE,IAAI,MAAM,CAAC,KAAK;oBAAE,KAAK,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;gBAClD,MAAM,CAAC,GAAG,MAMT,CAAC;gBACF,IAAI,CAAC,CAAC,UAAU;oBAAE,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC;gBACvD,IAAI,CAAC,CAAC,SAAS;oBAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC;gBACpD,IAAI,CAAC,CAAC,UAAU;oBAAE,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC;gBACvD,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS;oBAAE,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;gBACrE,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS;oBAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;gBAClE,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;QAKD,MAAM,kBAAkB,GAAG,CAAC,CAU3B,EAAmC,EAAE;YACpC,MAAM,KAAK,GAAoC,EAAE,OAAO,EAAE,CAAC,CAAC,KAAK,IAAI,KAAK,EAAE,CAAC;YAC7E,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS;gBAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACjD,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS;gBAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;YACtD,IAAI,CAAC,CAAC,KAAK;gBAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;YACxC,IAAI,CAAC,CAAC,UAAU;gBAAE,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC;YACvD,IAAI,CAAC,CAAC,SAAS;gBAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC;YACpD,IAAI,CAAC,CAAC,UAAU;gBAAE,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC;YACvD,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS;gBAAE,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YACrE,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS;gBAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YAClE,OAAO,KAAK,CAAC;QACf,CAAC,CAAC;QACF,IAAI,gBAAgB,EAAE,CAAC;YACrB,MAAM,WAAW,GAAG,OAAsB,CAAC;YAC3C,IAAI,WAAW,CAAC,KAAK,EAAE,CAAC;gBACtB,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,kBAAkB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACxF,CAAC;YACD,IAAI,WAAW,CAAC,KAAK,EAAE,CAAC;gBACtB,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,kBAAkB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACxF,CAAC;QACH,CAAC;QAED,OAAO,cAAc,CAAC;IACxB,CAAC;IAKO,sBAAsB,CAAC,OAA0B;QACvD,MAAM,KAAK,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;QAC9C,OAAO,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACxC,CAAC;IAOD,MAAM,CAAC,MAAM,CAAC,UAA2B;QACvC,OAAO,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC;IAC/B,CAAC;IAMD,MAAM,CAAC,iBAAiB;QACtB,OAAO,IAAI,KAAK,CAAC;YACf,OAAO,EAAE,QAAQ;YACjB,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,WAAW;YACjB,SAAS,EAAE,IAAI;YACf,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,CAAC;YACb,mBAAmB,EAAE;gBACnB,SAAS,EAAE,MAAM;gBACjB,OAAO,EAAE;oBACP,MAAM,EAAE,EAAE;oBACV,KAAK,EAAE,EAAE;oBACT,IAAI,EAAE,GAAG;oBACT,QAAQ,EAAE,MAAM;iBACjB;aACF;YACD,aAAa,EAAE;gBACb,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,EAAE;gBACR,KAAK,EAAE,QAAQ;aAChB;SACF,CAAC,CAAC;IACL,CAAC;IAOD,MAAM,CAAC,kBAAkB,CAAC,KAAa;QACrC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3D,CAAC;QAGD,MAAM,KAAK,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAGnD,MAAM,aAAa,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;QAGnF,MAAM,YAAY,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;QAEpF,OAAO,IAAI,KAAK,CAAC;YACf,OAAO,EAAE,UAAU,KAAK,EAAE;YAC1B,IAAI,EAAE,WAAW,KAAK,EAAE;YACxB,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,QAAQ;YACjB,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,UAAU,KAAK,MAAM;YAC3B,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,CAAC;YACb,mBAAmB,EAAE;gBACnB,SAAS,EAAE,MAAM;gBACjB,OAAO,EAAE;oBACP,MAAM,EAAE,aAAa;oBACrB,KAAK,EAAE,YAAY;oBACnB,IAAI,EAAE,GAAG;oBACT,QAAQ,EAAE,MAAM;iBACjB;gBACD,QAAQ,EAAE,IAAI;gBACd,SAAS,EAAE,IAAI;gBACf,YAAY,EAAE,KAAK,GAAG,CAAC;aACxB;YACD,aAAa,EAAE;gBACb,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;gBACtB,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,QAAQ;aAChB;SACF,CAAC,CAAC;IACL,CAAC;IAOD,MAAM,CAAC,sBAAsB,CAAC,KAAa;QACzC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3D,CAAC;QAGD,MAAM,KAAK,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAEnD,OAAO,IAAI,KAAK,CAAC;YACf,OAAO,EAAE,UAAU,KAAK,MAAM;YAC9B,IAAI,EAAE,WAAW,KAAK,OAAO;YAC7B,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,UAAU,KAAK,EAAE;YACvB,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,CAAC;YACb,aAAa,EAAE;gBACb,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;gBACtB,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,QAAQ;aAChB;SACF,CAAC,CAAC;IACL,CAAC;IAMD,MAAM,CAAC,gBAAgB;QACrB,OAAO,IAAI,KAAK,CAAC;YACf,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,QAAQ;YACjB,IAAI,EAAE,QAAQ;YACd,mBAAmB,EAAE;gBACnB,OAAO,EAAE;oBACP,KAAK,EAAE,GAAG;iBACX;aACF;YACD,aAAa,EAAE;gBACb,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,EAAE;gBACR,KAAK,EAAE,QAAQ;aAChB;SACF,CAAC,CAAC;IACL,CAAC;IAMD,MAAM,CAAC,mBAAmB;QACxB,OAAO,IAAI,KAAK,CAAC;YACf,OAAO,EAAE,UAAU;YACnB,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,QAAQ;YACjB,IAAI,EAAE,QAAQ;YACd,mBAAmB,EAAE;gBACnB,OAAO,EAAE;oBACP,KAAK,EAAE,GAAG;iBACX;aACF;YACD,aAAa,EAAE;gBACb,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,EAAE;gBACR,KAAK,EAAE,QAAQ;gBACf,MAAM,EAAE,IAAI;aACb;SACF,CAAC,CAAC;IACL,CAAC;IAMD,MAAM,CAAC,wBAAwB;QAC7B,OAAO,IAAI,KAAK,CAAC;YACf,OAAO,EAAE,eAAe;YACxB,IAAI,EAAE,gBAAgB;YACtB,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,QAAQ;YACjB,IAAI,EAAE,eAAe;YACrB,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,EAAE;YACd,mBAAmB,EAAE;gBACnB,SAAS,EAAE,MAAM;gBACjB,WAAW,EAAE;oBACX,IAAI,EAAE,GAAG;oBACT,OAAO,EAAE,GAAG;iBACb;gBACD,OAAO,EAAE;oBACP,MAAM,EAAE,CAAC;oBACT,KAAK,EAAE,EAAE;oBACT,IAAI,EAAE,GAAG;oBACT,QAAQ,EAAE,MAAM;iBACjB;gBACD,iBAAiB,EAAE,IAAI;aACxB;YACD,aAAa,EAAE;gBACb,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,EAAE;gBACR,KAAK,EAAE,QAAQ;aAChB;SACF,CAAC,CAAC;IACL,CAAC;IAMD,MAAM,CAAC,qBAAqB;QAC1B,OAAO,IAAI,KAAK,CAAC;YACf,OAAO,EAAE,YAAY;YACrB,IAAI,EAAE,aAAa;YACnB,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,UAAU;YACnB,IAAI,EAAE,QAAQ;YACd,aAAa,EAAE;gBACb,IAAI,EAAE,IAAI;gBACV,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,EAAE;gBACR,KAAK,EAAE,QAAQ;aAChB;YACD,mBAAmB,EAAE;gBACnB,OAAO,EAAE;oBACP,MAAM,EAAE,GAAG;oBACX,KAAK,EAAE,GAAG;iBACX;aACF;SACF,CAAC,CAAC;IACL,CAAC;IAWD,MAAM,CAAC,cAAc,CACnB,KAAa,EACb,UAGC;QAED,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;QAGD,MAAM,iBAAiB,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;QAE5C,OAAO,KAAK,CAAC,MAAM,CAAC;YAClB,OAAO,EAAE,MAAM,KAAK,EAAE;YACtB,IAAI,EAAE,OAAO,KAAK,EAAE;YACpB,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,QAAQ;YACjB,UAAU,EAAE,EAAE;YACd,UAAU,EAAE,IAAI;YAChB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,UAAU,EAAE,GAAG;YAC9B,mBAAmB,EAAE;gBACnB,WAAW,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE;gBACxC,GAAG,UAAU,EAAE,SAAS;aACzB;SACF,CAAC,CAAC;IACL,CAAC;IAMD,MAAM,CAAC,sBAAsB;QAC3B,OAAO,IAAI,KAAK,CAAC;YACf,OAAO,EAAE,aAAa;YACtB,IAAI,EAAE,cAAc;YACpB,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,QAAQ;YACjB,UAAU,EAAE;gBACV,KAAK,EAAE;oBACL,WAAW,EAAE;wBACX,GAAG,EAAE,CAAC;wBACN,IAAI,EAAE,GAAG;wBACT,MAAM,EAAE,CAAC;wBACT,KAAK,EAAE,GAAG;qBACX;iBACF;gBACD,WAAW,EAAE,CAAC;gBACd,WAAW,EAAE,CAAC;aACf;SACF,CAAC,CAAC;IACL,CAAC;IAMD,MAAM,CAAC,oBAAoB;QACzB,OAAO,IAAI,KAAK,CAAC;YACf,OAAO,EAAE,WAAW;YACpB,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,aAAa;YACtB,UAAU,EAAE;gBACV,KAAK,EAAE;oBACL,OAAO,EAAE;wBACP,GAAG,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE;wBAClD,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE;wBACrD,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE;wBACnD,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE;wBACpD,OAAO,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE;wBACtD,OAAO,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE;qBACvD;oBACD,WAAW,EAAE;wBACX,GAAG,EAAE,CAAC;wBACN,IAAI,EAAE,GAAG;wBACT,MAAM,EAAE,CAAC;wBACT,KAAK,EAAE,GAAG;qBACX;iBACF;gBACD,WAAW,EAAE,CAAC;gBACd,WAAW,EAAE,CAAC;aACf;SACF,CAAC,CAAC;IACL,CAAC;IAYD,KAAK;QAEH,MAAM,WAAW,GAAoB,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAChE,OAAO,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC;IAChC,CAAC;IAYD,KAAK;QAEH,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;QAGzD,IAAI,CAAC,UAAU,GAAG;YAChB,OAAO;YACP,IAAI;YACJ,IAAI;YACJ,OAAO;SACR,CAAC;QAEF,OAAO,IAAI,CAAC;IACd,CAAC;IAkBD,SAAS,CAAC,UAAiB;QACzB,MAAM,UAAU,GAAG,UAAU,CAAC,aAAa,EAAE,CAAC;QAG9C,IAAI,UAAU,CAAC,mBAAmB,EAAE,CAAC;YACnC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC;gBACzC,IAAI,CAAC,UAAU,CAAC,mBAAmB,GAAG,EAAE,CAAC;YAC3C,CAAC;YAGD,IAAI,UAAU,CAAC,mBAAmB,CAAC,SAAS,EAAE,CAAC;gBAC7C,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,SAAS,GAAG,UAAU,CAAC,mBAAmB,CAAC,SAAS,CAAC;YAC3F,CAAC;YACD,IAAI,UAAU,CAAC,mBAAmB,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC1D,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,QAAQ,GAAG,UAAU,CAAC,mBAAmB,CAAC,QAAQ,CAAC;YACzF,CAAC;YACD,IAAI,UAAU,CAAC,mBAAmB,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC3D,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,SAAS,GAAG,UAAU,CAAC,mBAAmB,CAAC,SAAS,CAAC;YAC3F,CAAC;YACD,IAAI,UAAU,CAAC,mBAAmB,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;gBACjE,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,eAAe;oBACjD,UAAU,CAAC,mBAAmB,CAAC,eAAe,CAAC;YACnD,CAAC;YAGD,IAAI,UAAU,CAAC,mBAAmB,CAAC,WAAW,EAAE,CAAC;gBAC/C,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,WAAW,EAAE,CAAC;oBACrD,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,WAAW,GAAG,EAAE,CAAC;gBACvD,CAAC;gBACD,MAAM,CAAC,MAAM,CACX,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,WAAW,EAC/C,UAAU,CAAC,mBAAmB,CAAC,WAAW,CAC3C,CAAC;YACJ,CAAC;YAGD,IAAI,UAAU,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC;gBAC3C,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC;oBACjD,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,OAAO,GAAG,EAAE,CAAC;gBACnD,CAAC;gBACD,MAAM,CAAC,MAAM,CACX,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,OAAO,EAC3C,UAAU,CAAC,mBAAmB,CAAC,OAAO,CACvC,CAAC;YACJ,CAAC;QACH,CAAC;QAGD,IAAI,UAAU,CAAC,aAAa,EAAE,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;gBACnC,IAAI,CAAC,UAAU,CAAC,aAAa,GAAG,EAAE,CAAC;YACrC,CAAC;YACD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC;QACzE,CAAC;QAGD,IAAI,UAAU,CAAC,IAAI;YAAE,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;QAC5D,IAAI,UAAU,CAAC,OAAO;YAAE,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;QACrE,IAAI,UAAU,CAAC,IAAI;YAAE,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;QAE5D,OAAO,IAAI,CAAC;IACd,CAAC;CACF","sourcesContent":["/**\n * Style - Represents a style definition in a Word document\n * Supports paragraph, character, table, and numbering styles\n */\n\nimport { XMLBuilder, XMLElement } from '../xml/XMLBuilder.js';\nimport { ParagraphFormatting } from '../elements/Paragraph.js';\nimport { Run, RunFormatting } from '../elements/Run.js';\nimport { ShadingConfig, buildShadingAttributes } from '../elements/CommonTypes.js';\nimport { Heading2TableOptions } from '../types/styleConfig.js';\nimport { deepClone } from '../utils/deepClone.js';\n\n/**\n * Style type\n */\nexport type StyleType = 'paragraph' | 'character' | 'table' | 'numbering';\n\n/**\n * Table alignment per ECMA-376 Part 1 §17.18.45 ST_JcTable.\n * `start` / `end` are the bidi-aware alternatives to `left` / `right`.\n */\nexport type TableAlignment = 'left' | 'center' | 'right' | 'start' | 'end';\n\n/**\n * Border properties (style-level). Mirrors `BorderDefinition` in\n * `elements/CommonTypes.ts` — both represent CT_Border per ECMA-376\n * §17.18.2.\n */\nexport interface BorderProperties {\n /** Border style */\n style?: 'none' | 'single' | 'double' | 'dashed' | 'dotted' | 'thick';\n /** Border size in eighths of a point */\n size?: number;\n /** Border spacing/padding in points */\n space?: number;\n /** Border color (hex without #) */\n color?: string;\n /** Theme color reference (ST_ThemeColor per §17.18.97) */\n themeColor?: string;\n /** Theme tint (2-hex-digit string) */\n themeTint?: string;\n /** Theme shade (2-hex-digit string) */\n themeShade?: string;\n /** Border casts a shadow (CT_OnOff attribute on CT_Border) */\n shadow?: boolean;\n /** Border is part of a frame around the content (CT_OnOff) */\n frame?: boolean;\n}\n\n/**\n * Table borders (6 possible borders)\n */\nexport interface TableBorders {\n top?: BorderProperties;\n bottom?: BorderProperties;\n left?: BorderProperties;\n right?: BorderProperties;\n /** Inside horizontal borders */\n insideH?: BorderProperties;\n /** Inside vertical borders */\n insideV?: BorderProperties;\n}\n\n/**\n * Cell borders (8 possible borders, includes diagonals)\n */\nexport interface CellBorders extends TableBorders {\n /** Top-left to bottom-right diagonal */\n tl2br?: BorderProperties;\n /** Top-right to bottom-left diagonal */\n tr2bl?: BorderProperties;\n}\n\n/**\n * Shading properties\n * @see ShadingConfig in CommonTypes.ts for the canonical definition\n */\nexport type ShadingProperties = ShadingConfig;\n\n/**\n * Cell margins\n */\nexport interface CellMargins {\n /** Top margin in twips */\n top?: number;\n /** Bottom margin in twips */\n bottom?: number;\n /** Left margin in twips */\n left?: number;\n /** Right margin in twips */\n right?: number;\n}\n\n/**\n * Table-level formatting properties (tblPr)\n */\nexport interface TableStyleFormatting {\n /** Table indentation from left margin in twips */\n indent?: number;\n /** Indent width type per ECMA-376 ST_TblWidth */\n indentType?: string;\n /** Default cell spacing in twips */\n cellSpacing?: number;\n /** Table borders */\n borders?: TableBorders;\n /** Default cell margins */\n cellMargins?: CellMargins;\n /** Table background shading */\n shading?: ShadingProperties;\n /** Table alignment */\n alignment?: TableAlignment;\n}\n\n/**\n * Table cell formatting properties (tcPr)\n */\nexport interface TableCellStyleFormatting {\n /** Cell borders (8 possible borders) */\n borders?: CellBorders;\n /** Cell background shading */\n shading?: ShadingProperties;\n /** Cell-specific margins */\n margins?: CellMargins;\n /** Vertical alignment in cell */\n /**\n * Cell vertical alignment per ECMA-376 Part 1 §17.18.101 ST_VerticalJc.\n * `both` distributes content with equal top/bottom gaps.\n */\n verticalAlignment?: 'top' | 'center' | 'both' | 'bottom';\n}\n\n/**\n * Table row formatting properties (trPr)\n */\nexport interface TableRowStyleFormatting {\n /** Prevent row from splitting across pages */\n cantSplit?: boolean;\n /** Mark row as header row */\n isHeader?: boolean;\n /** Row height in twips */\n height?: number;\n /** Row height rule */\n heightRule?: 'auto' | 'exact' | 'atLeast';\n}\n\n/**\n * Conditional formatting type for table regions\n */\nexport type ConditionalFormattingType =\n | 'wholeTable' // Entire table\n | 'firstRow' // First row\n | 'lastRow' // Last row\n | 'firstCol' // First column\n | 'lastCol' // Last column\n | 'band1Vert' // Odd column banding\n | 'band2Vert' // Even column banding\n | 'band1Horz' // Odd row banding\n | 'band2Horz' // Even row banding\n | 'nwCell' // Northwest (top-left) corner cell\n | 'neCell' // Northeast (top-right) corner cell\n | 'swCell' // Southwest (bottom-left) corner cell\n | 'seCell'; // Southeast (bottom-right) corner cell\n\n/**\n * Conditional table formatting for a specific region\n */\nexport interface ConditionalTableFormatting {\n /** Region type */\n type: ConditionalFormattingType;\n /** Paragraph formatting for this region */\n paragraphFormatting?: ParagraphFormatting;\n /** Run formatting for this region */\n runFormatting?: RunFormatting;\n /** Table formatting for this region */\n tableFormatting?: TableStyleFormatting;\n /** Cell formatting for this region */\n cellFormatting?: TableCellStyleFormatting;\n /** Row formatting for this region */\n rowFormatting?: TableRowStyleFormatting;\n}\n\n/**\n * Table style properties (Phase 5.1)\n */\nexport interface TableStyleProperties {\n /** Table-level formatting */\n table?: TableStyleFormatting;\n /** Default cell formatting */\n cell?: TableCellStyleFormatting;\n /** Default row formatting */\n row?: TableRowStyleFormatting;\n /** Rows per band for row banding (default 1) */\n rowBandSize?: number;\n /** Columns per band for column banding (default 1) */\n colBandSize?: number;\n /** Conditional formatting for specific table regions */\n conditionalFormatting?: ConditionalTableFormatting[];\n}\n\n/**\n * Style properties\n */\nexport interface StyleProperties {\n /** Unique style identifier */\n styleId: string;\n /** Display name */\n name: string;\n /** Style type */\n type: StyleType;\n /** Parent style ID for inheritance */\n basedOn?: string;\n /** Next style ID (auto-next paragraph style) */\n next?: string;\n /** Whether this is a default style */\n isDefault?: boolean;\n /** Whether this is a custom style */\n customStyle?: boolean;\n /** Paragraph formatting (for paragraph and table styles) */\n paragraphFormatting?: ParagraphFormatting;\n /** Numbering properties for styles that inherit list formatting */\n numPr?: {\n numId?: number;\n ilvl?: number;\n };\n /** Run formatting (for character and paragraph styles) */\n runFormatting?: RunFormatting;\n /** Table style properties (for table styles only - Phase 5.1) */\n tableStyle?: TableStyleProperties;\n\n // Style Gallery Metadata (Phase 5.3)\n /** Quick style - show in style gallery */\n qFormat?: boolean;\n /** UI priority - sort order in style picker (0-99, lower = higher priority) */\n uiPriority?: number;\n /** Semi-hidden - hide from gallery unless in use */\n semiHidden?: boolean;\n /**\n * Hidden - completely hide the style (stronger than semiHidden).\n * Per ECMA-376 Part 1 §17.7.4 CT_Style, `<w:hidden>` between\n * `autoRedefine` and `uiPriority`. OnOffOnlyType — explicit false\n * is `w:val=\"off\"`.\n */\n hidden?: boolean;\n /** Unhide when used - auto-show when applied */\n unhideWhenUsed?: boolean;\n /** Locked - prevent modification */\n locked?: boolean;\n /** Personal - user-specific style */\n personal?: boolean;\n /** Personal compose - style for composing new messages */\n personalCompose?: boolean;\n /** Personal reply - style for replying to messages */\n personalReply?: boolean;\n /**\n * Revision-save ID for the style definition (§17.7.4 CT_Style child\n * `<w:rsid>`, CT_LongHexNumber §17.18.50). 8-character uppercase hex\n * string matching the session-level `w:rsid` entries in settings.xml.\n * Schema position: between `personalReply` and `pPr` in CT_Style.\n */\n rsid?: string;\n /** Link - linked character/paragraph style ID */\n link?: string;\n /** Auto-redefine - update style from manual formatting */\n autoRedefine?: boolean;\n /** Aliases - alternative names (comma-separated) */\n aliases?: string;\n\n // Document Helper Metadata\n /**\n * Table options for Heading2 wrapping\n * Used by Document.applyCustomFormattingToExistingStyles() to configure\n * how Heading2 paragraphs are wrapped in tables\n */\n heading2TableOptions?: Heading2TableOptions;\n}\n\n/**\n * Represents a style definition\n */\nexport class Style {\n private properties: StyleProperties;\n\n /**\n * Creates a new Style\n * @param properties - Style properties\n */\n constructor(properties: StyleProperties) {\n this.properties = { ...properties };\n }\n\n /**\n * Gets the style ID\n * @returns Style ID\n */\n getStyleId(): string {\n return this.properties.styleId;\n }\n\n /**\n * Gets the style name\n * @returns Style name\n */\n getName(): string {\n return this.properties.name;\n }\n\n /**\n * Gets the style type\n * @returns Style type\n */\n getType(): StyleType {\n return this.properties.type;\n }\n\n /**\n * Gets all style properties\n * @returns Style properties\n */\n getProperties(): StyleProperties {\n return { ...this.properties };\n }\n\n /**\n * Gets whether this is a default style\n * @returns True if this is a default style for its type\n */\n getIsDefault(): boolean {\n return this.properties.isDefault ?? false;\n }\n\n /**\n * Sets whether this is a default style\n * @param value - True to mark as default style\n * @returns This style for chaining\n */\n setIsDefault(value: boolean): this {\n this.properties.isDefault = value;\n return this;\n }\n\n /**\n * Sets the base style\n * @param styleId - Parent style ID\n * @returns This style for chaining\n */\n setBasedOn(styleId: string): this {\n this.properties.basedOn = styleId;\n return this;\n }\n\n /**\n * Sets the next style\n * @param styleId - Next style ID\n * @returns This style for chaining\n */\n setNext(styleId: string): this {\n this.properties.next = styleId;\n return this;\n }\n\n /**\n * Sets paragraph formatting\n * @param formatting - Paragraph formatting options\n * @returns This style for chaining\n */\n setParagraphFormatting(formatting: ParagraphFormatting): this {\n this.properties.paragraphFormatting = { ...formatting };\n return this;\n }\n\n /**\n * Sets run formatting\n * @param formatting - Run formatting options\n * @returns This style for chaining\n */\n setRunFormatting(formatting: RunFormatting): this {\n this.properties.runFormatting = { ...formatting };\n return this;\n }\n\n /**\n * Gets the current run formatting\n * @returns Run formatting or undefined if not set\n */\n getRunFormatting(): RunFormatting | undefined {\n return this.properties.runFormatting;\n }\n\n /**\n * Gets the current paragraph formatting\n * @returns Paragraph formatting or undefined if not set\n */\n getParagraphFormatting(): ParagraphFormatting | undefined {\n return this.properties.paragraphFormatting;\n }\n\n /**\n * Sets Heading2 table wrapping options\n * Used by Document.applyCustomFormattingToExistingStyles() when styleId is 'Heading2'\n * @param options - Table options for wrapping Heading2 paragraphs\n * @returns This style for chaining\n */\n setHeading2TableOptions(options: Heading2TableOptions): this {\n this.properties.heading2TableOptions = options;\n return this;\n }\n\n /**\n * Gets the current Heading2 table options\n * @returns Heading2 table options or undefined if not set\n */\n getHeading2TableOptions(): Heading2TableOptions | undefined {\n return this.properties.heading2TableOptions;\n }\n\n /**\n * Sets whether this is a quick style (appears in style gallery)\n * @param enabled - True to show in quick style gallery\n * @returns This style for chaining\n */\n setQFormat(enabled: boolean): this {\n this.properties.qFormat = enabled;\n return this;\n }\n\n /**\n * Sets the UI priority (sort order in style picker)\n * @param priority - Priority value (0-99, lower = higher priority)\n * @returns This style for chaining\n */\n setUiPriority(priority: number): this {\n if (priority < 0 || priority > 99) {\n throw new Error('UI priority must be between 0 and 99');\n }\n this.properties.uiPriority = priority;\n return this;\n }\n\n /**\n * Sets whether this style is semi-hidden (hidden from recommended list)\n * @param hidden - True to hide from recommended list\n * @returns This style for chaining\n */\n setSemiHidden(hidden: boolean): this {\n this.properties.semiHidden = hidden;\n return this;\n }\n\n /**\n * Sets whether to unhide this style when first used\n * @param enabled - True to auto-show when applied\n * @returns This style for chaining\n */\n setUnhideWhenUsed(enabled: boolean): this {\n this.properties.unhideWhenUsed = enabled;\n return this;\n }\n\n /**\n * Sets whether this style is locked (prevents modification)\n * @param locked - True to lock the style\n * @returns This style for chaining\n */\n setLocked(locked: boolean): this {\n this.properties.locked = locked;\n return this;\n }\n\n /**\n * Sets whether this is a personal style (user-specific)\n * @param personal - True to mark as personal\n * @returns This style for chaining\n */\n setPersonal(personal: boolean): this {\n this.properties.personal = personal;\n return this;\n }\n\n /**\n * Sets whether this is a personal compose style (for composing new messages)\n * @param enabled - True to mark as personal compose\n */\n setPersonalCompose(enabled: boolean): this {\n this.properties.personalCompose = enabled;\n return this;\n }\n\n /**\n * Gets whether this is a personal compose style\n */\n getPersonalCompose(): boolean {\n return this.properties.personalCompose === true;\n }\n\n /**\n * Sets whether this is a personal reply style (for replying to messages)\n * @param enabled - True to mark as personal reply\n */\n setPersonalReply(enabled: boolean): this {\n this.properties.personalReply = enabled;\n return this;\n }\n\n /**\n * Gets whether this is a personal reply style\n */\n getPersonalReply(): boolean {\n return this.properties.personalReply === true;\n }\n\n /**\n * Sets the linked style ID (for character/paragraph style linking)\n * @param styleId - ID of the linked style\n * @returns This style for chaining\n */\n setLink(styleId: string): this {\n this.properties.link = styleId;\n return this;\n }\n\n /**\n * Sets whether to auto-redefine this style from manual formatting\n * @param enabled - True to enable auto-redefine\n * @returns This style for chaining\n */\n setAutoRedefine(enabled: boolean): this {\n this.properties.autoRedefine = enabled;\n return this;\n }\n\n /**\n * Sets alternative names for this style (comma-separated)\n * @param aliases - Comma-separated list of alternative names\n * @returns This style for chaining\n */\n setAliases(aliases: string): this {\n this.properties.aliases = aliases;\n return this;\n }\n\n /**\n * Sets table-level formatting properties (Phase 5.1)\n * @param formatting - Table formatting options\n * @returns This style for chaining\n */\n setTableFormatting(formatting: TableStyleFormatting): this {\n if (!this.properties.tableStyle) {\n this.properties.tableStyle = {};\n }\n this.properties.tableStyle.table = { ...formatting };\n return this;\n }\n\n /**\n * Sets table cell formatting properties (Phase 5.1)\n * @param formatting - Cell formatting options\n * @returns This style for chaining\n */\n setTableCellFormatting(formatting: TableCellStyleFormatting): this {\n if (!this.properties.tableStyle) {\n this.properties.tableStyle = {};\n }\n this.properties.tableStyle.cell = { ...formatting };\n return this;\n }\n\n /**\n * Sets table row formatting properties (Phase 5.1)\n * @param formatting - Row formatting options\n * @returns This style for chaining\n */\n setTableRowFormatting(formatting: TableRowStyleFormatting): this {\n if (!this.properties.tableStyle) {\n this.properties.tableStyle = {};\n }\n this.properties.tableStyle.row = { ...formatting };\n return this;\n }\n\n /**\n * Sets row band size for row banding (Phase 5.1)\n * @param size - Number of rows per band (default 1)\n * @returns This style for chaining\n */\n setRowBandSize(size: number): this {\n if (!this.properties.tableStyle) {\n this.properties.tableStyle = {};\n }\n if (size < 0) {\n throw new Error('Row band size must be non-negative');\n }\n this.properties.tableStyle.rowBandSize = size;\n return this;\n }\n\n /**\n * Sets column band size for column banding (Phase 5.1)\n * @param size - Number of columns per band (default 1)\n * @returns This style for chaining\n */\n setColBandSize(size: number): this {\n if (!this.properties.tableStyle) {\n this.properties.tableStyle = {};\n }\n if (size < 0) {\n throw new Error('Column band size must be non-negative');\n }\n this.properties.tableStyle.colBandSize = size;\n return this;\n }\n\n /**\n * Adds conditional formatting for a specific table region (Phase 5.1)\n * @param conditional - Conditional formatting definition\n * @returns This style for chaining\n */\n addConditionalFormatting(conditional: ConditionalTableFormatting): this {\n if (!this.properties.tableStyle) {\n this.properties.tableStyle = {};\n }\n if (!this.properties.tableStyle.conditionalFormatting) {\n this.properties.tableStyle.conditionalFormatting = [];\n }\n this.properties.tableStyle.conditionalFormatting.push({ ...conditional });\n return this;\n }\n\n /**\n * Validates that this style definition is valid\n *\n * Checks:\n * - Required fields (styleId, name, type)\n * - Valid type value\n * - No circular references (basedOn != styleId)\n * - Valid formatting values\n *\n * @returns True if the style is valid, false otherwise\n */\n isValid(): boolean {\n try {\n // Required fields\n if (!this.properties.styleId || !this.properties.name || !this.properties.type) {\n return false;\n }\n\n // Valid type\n const validTypes: StyleType[] = ['paragraph', 'character', 'table', 'numbering'];\n if (!validTypes.includes(this.properties.type)) {\n return false;\n }\n\n // No circular reference\n if (this.properties.basedOn === this.properties.styleId) {\n return false;\n }\n\n // Check paragraph formatting if present\n if (this.properties.paragraphFormatting) {\n const pf = this.properties.paragraphFormatting;\n\n // Check alignment\n if (pf.alignment) {\n const validAlignments = ['left', 'center', 'right', 'justify', 'both', 'distribute'];\n if (!validAlignments.includes(pf.alignment)) {\n return false;\n }\n }\n\n // Check spacing values\n if (pf.spacing) {\n const spacing = pf.spacing;\n if (spacing.before !== undefined && spacing.before < 0) return false;\n if (spacing.after !== undefined && spacing.after < 0) return false;\n if (spacing.line !== undefined && spacing.line < 0) return false;\n if (spacing.lineRule && !['auto', 'exact', 'atLeast'].includes(spacing.lineRule)) {\n return false;\n }\n }\n\n // Check indentation values\n if (pf.indentation) {\n const ind = pf.indentation;\n // Indentation values can be negative for hanging indent\n if (ind.left !== undefined && ind.left < -100000) return false;\n if (ind.right !== undefined && ind.right < -100000) return false;\n }\n }\n\n // Check run formatting if present\n if (this.properties.runFormatting) {\n const rf = this.properties.runFormatting;\n\n // Check font size\n if (rf.size !== undefined && (rf.size <= 0 || rf.size > 1638)) {\n return false; // Max font size in Word is 1638\n }\n\n // Check color format (should be 6 hex characters)\n if (rf.color && !/^[0-9A-Fa-f]{6}$/.test(rf.color)) {\n return false;\n }\n\n // Check highlight color\n if (rf.highlight) {\n const validHighlights = [\n 'black',\n 'blue',\n 'cyan',\n 'darkBlue',\n 'darkCyan',\n 'darkGray',\n 'darkGreen',\n 'darkMagenta',\n 'darkRed',\n 'darkYellow',\n 'green',\n 'lightGray',\n 'magenta',\n 'none',\n 'red',\n 'white',\n 'yellow',\n ];\n if (!validHighlights.includes(rf.highlight)) {\n return false;\n }\n }\n }\n\n // Check metadata properties (Phase 5.3)\n if (this.properties.uiPriority !== undefined) {\n if (this.properties.uiPriority < 0 || this.properties.uiPriority > 99) {\n return false;\n }\n }\n\n // Check linked style doesn't reference self\n if (this.properties.link === this.properties.styleId) {\n return false;\n }\n\n return true;\n } catch {\n return false;\n }\n }\n\n /**\n * Converts the style to WordprocessingML XML element\n * @returns XMLElement representing the style\n */\n toXML(): XMLElement {\n const styleAttrs: Record<string, string> = {\n 'w:type': this.properties.type,\n 'w:styleId': this.properties.styleId,\n };\n\n if (this.properties.isDefault) {\n styleAttrs['w:default'] = '1';\n }\n\n if (this.properties.customStyle) {\n styleAttrs['w:customStyle'] = '1';\n }\n\n const styleChildren: XMLElement[] = [];\n\n // Add style name\n styleChildren.push(XMLBuilder.wSelf('name', { 'w:val': this.properties.name }));\n\n // aliases - Alternative names (must follow name per CT_Style)\n if (this.properties.aliases) {\n styleChildren.push(XMLBuilder.wSelf('aliases', { 'w:val': this.properties.aliases }));\n }\n\n // Add basedOn\n if (this.properties.basedOn) {\n styleChildren.push(XMLBuilder.wSelf('basedOn', { 'w:val': this.properties.basedOn }));\n }\n\n // Add next\n if (this.properties.next) {\n styleChildren.push(XMLBuilder.wSelf('next', { 'w:val': this.properties.next }));\n }\n\n // Add link (linked character/paragraph style)\n if (this.properties.link) {\n styleChildren.push(XMLBuilder.wSelf('link', { 'w:val': this.properties.link }));\n }\n\n // Add autoRedefine — OnOffOnlyType per ECMA-376 §17.7.4.5; w:val is\n // restricted to \"on\"/\"off\" by ST_OnOffOnly. Emit w:val=\"off\" for explicit\n // false so an override of a based-on style's autoRedefine=true survives\n // round-trip. (w:val=\"0\" would fail Open XML SDK schema validation.)\n if (this.properties.autoRedefine !== undefined) {\n if (this.properties.autoRedefine) {\n styleChildren.push(XMLBuilder.wSelf('autoRedefine'));\n } else {\n styleChildren.push(XMLBuilder.wSelf('autoRedefine', { 'w:val': 'off' }));\n }\n }\n\n // hidden — CT_OnOff (OnOffOnlyType) per ECMA-376 §17.7.4, positioned\n // BETWEEN autoRedefine and uiPriority per CT_Style schema order.\n // Completely hides the style (stronger than semiHidden). Emit\n // w:val=\"off\" for explicit false so an override of a based-on\n // style's hidden=true survives round-trip.\n if (this.properties.hidden !== undefined) {\n if (this.properties.hidden) {\n styleChildren.push(XMLBuilder.wSelf('hidden'));\n } else {\n styleChildren.push(XMLBuilder.wSelf('hidden', { 'w:val': 'off' }));\n }\n }\n\n // Add metadata properties — ordered per ECMA-376 CT_Style\n // uiPriority - Sort order in style picker\n if (this.properties.uiPriority !== undefined) {\n styleChildren.push(\n XMLBuilder.wSelf('uiPriority', {\n 'w:val': String(this.properties.uiPriority),\n })\n );\n }\n\n // semiHidden — CT_OnOff. Emit explicit false to preserve override intent.\n if (this.properties.semiHidden !== undefined) {\n if (this.properties.semiHidden) {\n styleChildren.push(XMLBuilder.wSelf('semiHidden'));\n } else {\n styleChildren.push(XMLBuilder.wSelf('semiHidden', { 'w:val': 'off' }));\n }\n }\n\n // unhideWhenUsed — CT_OnOff.\n if (this.properties.unhideWhenUsed !== undefined) {\n if (this.properties.unhideWhenUsed) {\n styleChildren.push(XMLBuilder.wSelf('unhideWhenUsed'));\n } else {\n styleChildren.push(XMLBuilder.wSelf('unhideWhenUsed', { 'w:val': 'off' }));\n }\n }\n\n // qFormat — CT_OnOff. Explicit false must round-trip (override a based-on\n // style's qFormat=true). Built-in non-custom styles default to emitting\n // qFormat when the field is absent entirely (legacy behaviour).\n if (this.properties.qFormat !== undefined) {\n if (this.properties.qFormat) {\n styleChildren.push(XMLBuilder.wSelf('qFormat'));\n } else {\n styleChildren.push(XMLBuilder.wSelf('qFormat', { 'w:val': 'off' }));\n }\n } else if (!this.properties.customStyle) {\n styleChildren.push(XMLBuilder.wSelf('qFormat'));\n }\n\n // locked — CT_OnOff.\n if (this.properties.locked !== undefined) {\n if (this.properties.locked) {\n styleChildren.push(XMLBuilder.wSelf('locked'));\n } else {\n styleChildren.push(XMLBuilder.wSelf('locked', { 'w:val': 'off' }));\n }\n }\n\n // personal — CT_OnOff.\n if (this.properties.personal !== undefined) {\n if (this.properties.personal) {\n styleChildren.push(XMLBuilder.wSelf('personal'));\n } else {\n styleChildren.push(XMLBuilder.wSelf('personal', { 'w:val': 'off' }));\n }\n }\n\n // personalCompose — CT_OnOff.\n if (this.properties.personalCompose !== undefined) {\n if (this.properties.personalCompose) {\n styleChildren.push(XMLBuilder.wSelf('personalCompose'));\n } else {\n styleChildren.push(XMLBuilder.wSelf('personalCompose', { 'w:val': 'off' }));\n }\n }\n\n // personalReply — CT_OnOff.\n if (this.properties.personalReply !== undefined) {\n if (this.properties.personalReply) {\n styleChildren.push(XMLBuilder.wSelf('personalReply'));\n } else {\n styleChildren.push(XMLBuilder.wSelf('personalReply', { 'w:val': 'off' }));\n }\n }\n\n // rsid — CT_LongHexNumber (§17.18.50) per CT_Style §17.7.4. Schema\n // position: between personalReply (#15) and pPr (#17). Emit only when\n // an rsid stamp was carried over from load (we never synthesize one\n // for programmatically authored styles).\n if (this.properties.rsid !== undefined && this.properties.rsid !== '') {\n styleChildren.push(XMLBuilder.wSelf('rsid', { 'w:val': this.properties.rsid }));\n }\n\n // Add paragraph properties\n if (this.properties.paragraphFormatting || this.properties.numPr) {\n const pPr = this.generateParagraphProperties(this.properties.paragraphFormatting || {});\n // Add numPr (numbering properties) if present - styles can inherit list formatting\n if (this.properties.numPr) {\n const numPrChildren: XMLElement[] = [];\n if (this.properties.numPr.ilvl !== undefined) {\n numPrChildren.push(\n XMLBuilder.wSelf('ilvl', { 'w:val': String(this.properties.numPr.ilvl) })\n );\n }\n if (this.properties.numPr.numId !== undefined) {\n numPrChildren.push(\n XMLBuilder.wSelf('numId', { 'w:val': String(this.properties.numPr.numId) })\n );\n }\n if (numPrChildren.length > 0) {\n // Per CT_PPrBase, numPr is at position #7: after keepNext (#2),\n // keepLines (#3), pageBreakBefore (#4), framePr (#5), widowControl (#6).\n // Insert after the last of these that's present in the serialized pPr.\n const numPrEl = XMLBuilder.w('numPr', undefined, numPrChildren);\n if (pPr.children && pPr.children.length > 0) {\n const preNumPr = new Set([\n 'w:keepNext',\n 'w:keepLines',\n 'w:pageBreakBefore',\n 'w:framePr',\n 'w:widowControl',\n ]);\n let insertIdx = 0;\n for (let i = 0; i < pPr.children.length; i++) {\n const child = pPr.children[i];\n if (child && typeof child !== 'string' && preNumPr.has(child.name)) {\n insertIdx = i + 1;\n }\n }\n pPr.children.splice(insertIdx, 0, numPrEl);\n } else {\n pPr.children = [numPrEl];\n }\n }\n }\n if (pPr.children && pPr.children.length > 0) {\n styleChildren.push(pPr);\n }\n }\n\n // Add run properties\n if (this.properties.runFormatting) {\n const rPr = this.generateRunProperties(this.properties.runFormatting);\n if (rPr.children && rPr.children.length > 0) {\n styleChildren.push(rPr);\n }\n }\n\n // Add table style properties (Phase 5.1)\n if (this.properties.tableStyle) {\n // Add tblPr (table properties)\n if (this.properties.tableStyle.table) {\n const tblPr = this.generateTableProperties(\n this.properties.tableStyle.table,\n this.properties.tableStyle\n );\n if (tblPr.children && tblPr.children.length > 0) {\n styleChildren.push(tblPr);\n }\n }\n\n // Add trPr (table row properties) — per CT_Style: tblPr → trPr → tcPr\n if (this.properties.tableStyle.row) {\n const trPr = this.generateTableRowProperties(this.properties.tableStyle.row);\n if (trPr.children && trPr.children.length > 0) {\n styleChildren.push(trPr);\n }\n }\n\n // Add tcPr (table cell properties)\n if (this.properties.tableStyle.cell) {\n const tcPr = this.generateTableCellProperties(this.properties.tableStyle.cell);\n if (tcPr.children && tcPr.children.length > 0) {\n styleChildren.push(tcPr);\n }\n }\n\n // Add conditional formatting (tblStylePr)\n if (this.properties.tableStyle.conditionalFormatting) {\n for (const conditional of this.properties.tableStyle.conditionalFormatting) {\n const tblStylePr = this.generateConditionalFormatting(conditional);\n if (tblStylePr.children && tblStylePr.children.length > 0) {\n styleChildren.push(tblStylePr);\n }\n }\n }\n }\n\n return XMLBuilder.w('style', styleAttrs, styleChildren);\n }\n\n /**\n * Generates paragraph properties XML\n */\n private generateParagraphProperties(formatting: ParagraphFormatting): XMLElement {\n const pPrChildren: XMLElement[] = [];\n\n // CT_OnOff paragraph flags use ST_OnOff. Emit bare `<w:x/>` for explicit\n // true and `<w:x w:val=\"0\"/>` for explicit false. Undefined means\n // \"inherit from base style\" — omit the element entirely. Omitting an\n // explicit-false value would silently revert to the inherited true,\n // losing the user's override. Mirrors the Paragraph-level generator.\n const emitCtOnOff = (tag: string, value: boolean | undefined): void => {\n if (value === undefined) return;\n pPrChildren.push(value ? XMLBuilder.wSelf(tag) : XMLBuilder.wSelf(tag, { 'w:val': '0' }));\n };\n\n // Children ordered per ECMA-376 CT_PPrBase schema (§17.3.1.26).\n // Note: numPr (#7) is inserted post-hoc by the caller because it\n // depends on `this.properties.numPr`, not `formatting`. The insertion\n // logic searches for the last CT_PPrBase child that appears before\n // numPr in the schema.\n\n emitCtOnOff('keepNext', formatting.keepNext); // #2\n emitCtOnOff('keepLines', formatting.keepLines); // #3\n emitCtOnOff('pageBreakBefore', formatting.pageBreakBefore); // #4\n\n // framePr (#5) — text frame properties (drop cap, floating-frame\n // positioning) per ECMA-376 §17.3.1.11 CT_FramePr. Previously dropped on\n // the style serializer, so a custom drop-cap paragraph style lost its\n // frame configuration on any managed save. Mirrors the Paragraph-level\n // serializer emission order for attribute output.\n if (formatting.framePr) {\n const f = formatting.framePr;\n const attrs: Record<string, string> = {};\n if (f.w !== undefined) attrs['w:w'] = f.w.toString();\n if (f.h !== undefined) attrs['w:h'] = f.h.toString();\n if (f.hRule) attrs['w:hRule'] = f.hRule;\n if (f.x !== undefined) attrs['w:x'] = f.x.toString();\n if (f.y !== undefined) attrs['w:y'] = f.y.toString();\n if (f.xAlign) attrs['w:xAlign'] = f.xAlign;\n if (f.yAlign) attrs['w:yAlign'] = f.yAlign;\n if (f.hAnchor) attrs['w:hAnchor'] = f.hAnchor;\n if (f.vAnchor) attrs['w:vAnchor'] = f.vAnchor;\n if (f.hSpace !== undefined) attrs['w:hSpace'] = f.hSpace.toString();\n if (f.vSpace !== undefined) attrs['w:vSpace'] = f.vSpace.toString();\n if (f.wrap) attrs['w:wrap'] = f.wrap;\n if (f.dropCap) attrs['w:dropCap'] = f.dropCap;\n if (f.lines !== undefined) attrs['w:lines'] = f.lines.toString();\n if (f.anchorLock !== undefined) attrs['w:anchorLock'] = f.anchorLock ? '1' : '0';\n if (Object.keys(attrs).length > 0) {\n pPrChildren.push(XMLBuilder.wSelf('framePr', attrs));\n }\n }\n\n emitCtOnOff('widowControl', formatting.widowControl); // #6\n // numPr (#7) inserted post-hoc by caller.\n emitCtOnOff('suppressLineNumbers', formatting.suppressLineNumbers); // #8\n\n // pBdr (#9) — paragraph borders (six sides: top, left, bottom, right,\n // between, bar) per ECMA-376 §17.3.1.24. Mirrors the Paragraph-level\n // serializer's order. Previously dropped on the style serializer even\n // though the style parser reads borders into `formatting.borders`.\n if (formatting.borders) {\n const borderChildren: XMLElement[] = [];\n const b = formatting.borders;\n const createBorder = (\n tag: string,\n def:\n | {\n style?: string;\n size?: number;\n space?: number;\n color?: string;\n themeColor?: string;\n themeTint?: string;\n themeShade?: string;\n shadow?: boolean;\n frame?: boolean;\n }\n | undefined\n ): void => {\n if (!def) return;\n // CT_Border §17.18.2: `w:val` (ST_Border) is REQUIRED. Default to\n // \"nil\" when caller set only size/color/space so the style-level\n // pBdr survives strict OOXML validation even for the common\n // \"turn off this inherited side\" override pattern. Full attribute\n // set (themeColor/themeTint/themeShade/shadow/frame) emitted for\n // themed-border fidelity.\n const attrs: Record<string, string | number> = { 'w:val': def.style ?? 'nil' };\n if (def.size !== undefined) attrs['w:sz'] = def.size;\n if (def.space !== undefined) attrs['w:space'] = def.space;\n if (def.color) attrs['w:color'] = def.color;\n if (def.themeColor) attrs['w:themeColor'] = def.themeColor;\n if (def.themeTint) attrs['w:themeTint'] = def.themeTint;\n if (def.themeShade) attrs['w:themeShade'] = def.themeShade;\n if (def.shadow !== undefined) attrs['w:shadow'] = def.shadow ? '1' : '0';\n if (def.frame !== undefined) attrs['w:frame'] = def.frame ? '1' : '0';\n borderChildren.push(XMLBuilder.wSelf(tag, attrs));\n };\n // Ordered per CT_PBdr (top → left → bottom → right → between → bar).\n createBorder('top', b.top);\n createBorder('left', b.left);\n createBorder('bottom', b.bottom);\n createBorder('right', b.right);\n createBorder('between', b.between);\n createBorder('bar', b.bar);\n if (borderChildren.length > 0) {\n pPrChildren.push(XMLBuilder.w('pBdr', undefined, borderChildren));\n }\n }\n\n // shd (#10) — paragraph shading. Previously dropped on the style\n // serializer; the parser reads it into `formatting.shading` already.\n if (formatting.shading) {\n const shdAttrs = buildShadingAttributes(formatting.shading);\n if (Object.keys(shdAttrs).length > 0) {\n pPrChildren.push(XMLBuilder.wSelf('shd', shdAttrs));\n }\n }\n\n // tabs (#11) — paragraph tab stops per ECMA-376 §17.3.1.38 / CT_TabStop\n // §17.3.1.37. BOTH `w:val` (ST_TabJc) and `w:pos` (ST_SignedTwipsMeasure)\n // are REQUIRED. Default `w:val` to \"left\" so consumers setting only\n // position produce validator-clean output.\n if (formatting.tabs && formatting.tabs.length > 0) {\n const tabChildren: XMLElement[] = [];\n for (const tab of formatting.tabs) {\n const attrs: Record<string, string | number> = {\n 'w:val': tab.val ?? 'left',\n 'w:pos': tab.position,\n };\n if (tab.leader) attrs['w:leader'] = tab.leader;\n tabChildren.push(XMLBuilder.wSelf('tab', attrs));\n }\n if (tabChildren.length > 0) {\n pPrChildren.push(XMLBuilder.w('tabs', undefined, tabChildren));\n }\n }\n\n emitCtOnOff('suppressAutoHyphens', formatting.suppressAutoHyphens); // #12\n emitCtOnOff('kinsoku', formatting.kinsoku); // #13\n emitCtOnOff('wordWrap', formatting.wordWrap); // #14\n emitCtOnOff('overflowPunct', formatting.overflowPunct); // #15\n emitCtOnOff('topLinePunct', formatting.topLinePunct); // #16\n emitCtOnOff('autoSpaceDE', formatting.autoSpaceDE); // #17\n emitCtOnOff('autoSpaceDN', formatting.autoSpaceDN); // #18\n emitCtOnOff('bidi', formatting.bidi); // #19\n emitCtOnOff('adjustRightInd', formatting.adjustRightInd); // #20\n // snapToGrid (#21) is a run property, not paragraph.\n\n // Add spacing — full CT_Spacing attribute coverage per ECMA-376 §17.3.1.33.\n // Previously emitted only w:before / w:after / w:line / w:lineRule; the\n // four line-unit / auto-spacing attributes (beforeLines, afterLines,\n // beforeAutospacing, afterAutospacing) were silently dropped on save\n // even though the parser already read them correctly, creating a\n // parser/generator asymmetry for CJK-authored styles.\n if (formatting.spacing) {\n const spc = formatting.spacing;\n const attributes: Record<string, number | string> = {};\n if (spc.before !== undefined) attributes['w:before'] = spc.before;\n if (spc.beforeLines !== undefined) attributes['w:beforeLines'] = spc.beforeLines;\n if (spc.beforeAutospacing !== undefined) {\n attributes['w:beforeAutospacing'] = spc.beforeAutospacing ? '1' : '0';\n }\n if (spc.after !== undefined) attributes['w:after'] = spc.after;\n if (spc.afterLines !== undefined) attributes['w:afterLines'] = spc.afterLines;\n if (spc.afterAutospacing !== undefined) {\n attributes['w:afterAutospacing'] = spc.afterAutospacing ? '1' : '0';\n }\n if (spc.line !== undefined) attributes['w:line'] = spc.line;\n if (spc.lineRule) attributes['w:lineRule'] = spc.lineRule;\n if (Object.keys(attributes).length > 0) {\n pPrChildren.push(XMLBuilder.wSelf('spacing', attributes));\n }\n }\n\n // Add indentation — twips + CJK character-unit variants per ECMA-376\n // §17.3.1.12. hanging / firstLine are mutually exclusive; same for\n // hangingChars / firstLineChars. When both are set we emit hanging\n // (matching the Paragraph-level generator's precedence).\n if (formatting.indentation) {\n const ind = formatting.indentation;\n const attributes: Record<string, number> = {};\n if (ind.left !== undefined) attributes['w:left'] = ind.left;\n if (ind.right !== undefined) attributes['w:right'] = ind.right;\n if (ind.hanging !== undefined) {\n attributes['w:hanging'] = ind.hanging;\n } else if (ind.firstLine !== undefined) {\n attributes['w:firstLine'] = ind.firstLine;\n }\n if (ind.leftChars !== undefined) attributes['w:leftChars'] = ind.leftChars;\n if (ind.rightChars !== undefined) attributes['w:rightChars'] = ind.rightChars;\n if (ind.hangingChars !== undefined) {\n attributes['w:hangingChars'] = ind.hangingChars;\n } else if (ind.firstLineChars !== undefined) {\n attributes['w:firstLineChars'] = ind.firstLineChars;\n }\n if (Object.keys(attributes).length > 0) {\n pPrChildren.push(XMLBuilder.wSelf('ind', attributes));\n }\n }\n\n // Contextual spacing per ECMA-376 Part 1 §17.3.1.8\n // Removes spacing between paragraphs of the same style.\n // Position #24 in CT_PPrBase — after ind, before mirrorIndents.\n emitCtOnOff('contextualSpacing', formatting.contextualSpacing);\n\n emitCtOnOff('mirrorIndents', formatting.mirrorIndents); // #25\n emitCtOnOff('suppressOverlap', formatting.suppressOverlap); // #26\n\n // Add alignment (jc, CT_PPrBase #27)\n if (formatting.alignment) {\n // Map 'justify' to 'both' per ECMA-376 (Word uses 'both' for justified text)\n const alignmentValue = formatting.alignment === 'justify' ? 'both' : formatting.alignment;\n pPrChildren.push(XMLBuilder.wSelf('jc', { 'w:val': alignmentValue }));\n }\n\n // textDirection / textAlignment / textboxTightWrap per CT_PPrBase\n // positions #28-#30. Previously dropped on the style serializer even\n // though the Paragraph-level generator and the style parser handle\n // them — a paragraph style that set any of these (e.g. `textDirection:\n // \"tbRl\"` for vertical CJK flow) lost the override on any programmatic\n // save that bypassed raw XML passthrough.\n if (formatting.textDirection) {\n pPrChildren.push(XMLBuilder.wSelf('textDirection', { 'w:val': formatting.textDirection }));\n }\n if (formatting.textAlignment) {\n pPrChildren.push(XMLBuilder.wSelf('textAlignment', { 'w:val': formatting.textAlignment }));\n }\n if (formatting.textboxTightWrap) {\n pPrChildren.push(\n XMLBuilder.wSelf('textboxTightWrap', { 'w:val': formatting.textboxTightWrap })\n );\n }\n\n // Add outline level for TOC support (Heading 1 = 0, Heading 2 = 1, etc.)\n if (formatting.outlineLevel !== undefined) {\n pPrChildren.push(\n XMLBuilder.wSelf('outlineLvl', { 'w:val': formatting.outlineLevel.toString() })\n );\n }\n\n // CT_PPrBase #32 divId (§17.3.1.10) — HTML div association. Numeric.\n // Previously never emitted on styles; the parser also used to drop it.\n if (formatting.divId !== undefined) {\n pPrChildren.push(XMLBuilder.wSelf('divId', { 'w:val': formatting.divId.toString() }));\n }\n\n // CT_PPrBase #33 cnfStyle (§17.3.1.8) — conditional formatting bitmask.\n // Positioned last per schema, after divId and outlineLvl.\n if (formatting.cnfStyle) {\n pPrChildren.push(XMLBuilder.wSelf('cnfStyle', { 'w:val': formatting.cnfStyle }));\n }\n\n return XMLBuilder.w('pPr', undefined, pPrChildren);\n }\n\n /**\n * Generates run properties XML.\n * Delegates to Run.generateRunPropertiesXML() for full ECMA-376 CT_RPr coverage\n * with correct element ordering (38+ properties).\n */\n private generateRunProperties(formatting: RunFormatting): XMLElement {\n const rPr = Run.generateRunPropertiesXML(formatting);\n return rPr || XMLBuilder.w('rPr', undefined, []);\n }\n\n /**\n * Generates table properties XML (tblPr) - Phase 5.1\n */\n private generateTableProperties(\n formatting: TableStyleFormatting,\n tableStyle: TableStyleProperties,\n isConditional = false\n ): XMLElement {\n const tblPrChildren: XMLElement[] = [];\n\n // Ordered per CT_TblPrBase (ECMA-376 §17.4.60):\n // tblStyleRowBandSize → tblStyleColBandSize → tblW → jc →\n // tblCellSpacing → tblInd → tblBorders → shd → tblCellMar\n\n // Row band size (must come first)\n if (tableStyle.rowBandSize !== undefined) {\n tblPrChildren.push(\n XMLBuilder.wSelf('tblStyleRowBandSize', {\n 'w:val': tableStyle.rowBandSize,\n })\n );\n }\n\n // Column band size\n if (tableStyle.colBandSize !== undefined) {\n tblPrChildren.push(\n XMLBuilder.wSelf('tblStyleColBandSize', {\n 'w:val': tableStyle.colBandSize,\n })\n );\n }\n\n // Note: tblW is omitted for table styles. It's only valid in inline tblPr\n // (CT_TblPr in table elements), not in CT_Style's tblPr.\n\n // Table alignment\n if (formatting.alignment) {\n tblPrChildren.push(XMLBuilder.wSelf('jc', { 'w:val': formatting.alignment }));\n }\n\n // Cell spacing\n if (formatting.cellSpacing !== undefined) {\n tblPrChildren.push(\n XMLBuilder.wSelf('tblCellSpacing', {\n 'w:w': formatting.cellSpacing,\n 'w:type': 'dxa',\n })\n );\n }\n\n // Table indentation\n if (formatting.indent !== undefined) {\n tblPrChildren.push(\n XMLBuilder.wSelf('tblInd', {\n 'w:w': formatting.indent,\n 'w:type': formatting.indentType || 'dxa',\n })\n );\n }\n\n // Table borders\n if (formatting.borders) {\n const borderElements = this.generateBorderElements(formatting.borders, false);\n if (borderElements.length > 0) {\n tblPrChildren.push(XMLBuilder.w('tblBorders', undefined, borderElements));\n }\n }\n\n // Table shading (not valid in tblStylePr conditional context)\n if (formatting.shading && !isConditional) {\n tblPrChildren.push(this.generateShadingElement(formatting.shading));\n }\n\n // Cell margins\n if (formatting.cellMargins) {\n const marginElements: XMLElement[] = [];\n if (formatting.cellMargins.top !== undefined) {\n marginElements.push(\n XMLBuilder.wSelf('top', {\n 'w:w': formatting.cellMargins.top,\n 'w:type': 'dxa',\n })\n );\n }\n if (formatting.cellMargins.left !== undefined) {\n marginElements.push(\n XMLBuilder.wSelf('left', {\n 'w:w': formatting.cellMargins.left,\n 'w:type': 'dxa',\n })\n );\n }\n if (formatting.cellMargins.bottom !== undefined) {\n marginElements.push(\n XMLBuilder.wSelf('bottom', {\n 'w:w': formatting.cellMargins.bottom,\n 'w:type': 'dxa',\n })\n );\n }\n if (formatting.cellMargins.right !== undefined) {\n marginElements.push(\n XMLBuilder.wSelf('right', {\n 'w:w': formatting.cellMargins.right,\n 'w:type': 'dxa',\n })\n );\n }\n if (marginElements.length > 0) {\n tblPrChildren.push(XMLBuilder.w('tblCellMar', undefined, marginElements));\n }\n }\n\n return XMLBuilder.w('tblPr', undefined, tblPrChildren);\n }\n\n /**\n * Generates table cell properties XML (tcPr) - Phase 5.1\n */\n private generateTableCellProperties(formatting: TableCellStyleFormatting): XMLElement {\n const tcPrChildren: XMLElement[] = [];\n\n // Cell borders\n if (formatting.borders) {\n const borderElements = this.generateBorderElements(formatting.borders, true);\n if (borderElements.length > 0) {\n tcPrChildren.push(XMLBuilder.w('tcBorders', undefined, borderElements));\n }\n }\n\n // Cell shading\n if (formatting.shading) {\n tcPrChildren.push(this.generateShadingElement(formatting.shading));\n }\n\n // Cell margins\n if (formatting.margins) {\n const marginElements: XMLElement[] = [];\n if (formatting.margins.top !== undefined) {\n marginElements.push(\n XMLBuilder.wSelf('top', {\n 'w:w': formatting.margins.top,\n 'w:type': 'dxa',\n })\n );\n }\n if (formatting.margins.left !== undefined) {\n marginElements.push(\n XMLBuilder.wSelf('left', {\n 'w:w': formatting.margins.left,\n 'w:type': 'dxa',\n })\n );\n }\n if (formatting.margins.bottom !== undefined) {\n marginElements.push(\n XMLBuilder.wSelf('bottom', {\n 'w:w': formatting.margins.bottom,\n 'w:type': 'dxa',\n })\n );\n }\n if (formatting.margins.right !== undefined) {\n marginElements.push(\n XMLBuilder.wSelf('right', {\n 'w:w': formatting.margins.right,\n 'w:type': 'dxa',\n })\n );\n }\n if (marginElements.length > 0) {\n tcPrChildren.push(XMLBuilder.w('tcMar', undefined, marginElements));\n }\n }\n\n // Vertical alignment\n if (formatting.verticalAlignment) {\n tcPrChildren.push(XMLBuilder.wSelf('vAlign', { 'w:val': formatting.verticalAlignment }));\n }\n\n return XMLBuilder.w('tcPr', undefined, tcPrChildren);\n }\n\n /**\n * Generates table row properties XML (trPr) - Phase 5.1\n */\n private generateTableRowProperties(formatting: TableRowStyleFormatting): XMLElement {\n const trPrChildren: XMLElement[] = [];\n\n // Style-level trPr has a restricted content model compared to inline trPr.\n // Valid children: cantSplit, tblHeader, tblCellSpacing, jc, hidden\n // NOTE: trHeight is NOT valid in style-level trPr per OOXML strict schema.\n\n // Can't split row across pages\n if (formatting.cantSplit) {\n trPrChildren.push(XMLBuilder.wSelf('cantSplit'));\n }\n\n // Header row\n if (formatting.isHeader) {\n trPrChildren.push(XMLBuilder.wSelf('tblHeader'));\n }\n\n return XMLBuilder.w('trPr', undefined, trPrChildren);\n }\n\n /**\n * Generates conditional formatting XML (tblStylePr) - Phase 5.1\n */\n private generateConditionalFormatting(conditional: ConditionalTableFormatting): XMLElement {\n const tblStylePrChildren: XMLElement[] = [];\n\n // Add paragraph properties if specified\n if (conditional.paragraphFormatting) {\n const pPr = this.generateParagraphProperties(conditional.paragraphFormatting);\n if (pPr.children && pPr.children.length > 0) {\n tblStylePrChildren.push(pPr);\n }\n }\n\n // Add run properties if specified\n if (conditional.runFormatting) {\n const rPr = this.generateRunProperties(conditional.runFormatting);\n if (rPr.children && rPr.children.length > 0) {\n tblStylePrChildren.push(rPr);\n }\n }\n\n // Add table properties if specified\n if (conditional.tableFormatting) {\n const tblPr = this.generateTableProperties(conditional.tableFormatting, {}, true);\n if (tblPr.children && tblPr.children.length > 0) {\n tblStylePrChildren.push(tblPr);\n }\n }\n\n // Add row properties if specified (trPr before tcPr per CT_Style §17.7.6)\n if (conditional.rowFormatting) {\n const trPr = this.generateTableRowProperties(conditional.rowFormatting);\n if (trPr.children && trPr.children.length > 0) {\n tblStylePrChildren.push(trPr);\n }\n }\n\n // Add cell properties if specified\n if (conditional.cellFormatting) {\n const tcPr = this.generateTableCellProperties(conditional.cellFormatting);\n if (tcPr.children && tcPr.children.length > 0) {\n tblStylePrChildren.push(tcPr);\n }\n }\n\n return XMLBuilder.w('tblStylePr', { 'w:type': conditional.type }, tblStylePrChildren);\n }\n\n /**\n * Generates border elements for tables or cells - Phase 5.1\n * @param borders - Border properties\n * @param includeDiagonals - Whether to include diagonal borders (for cells)\n */\n private generateBorderElements(\n borders: TableBorders | CellBorders,\n includeDiagonals: boolean\n ): XMLElement[] {\n const borderElements: XMLElement[] = [];\n\n // Ordered per ECMA-376 CT_TblBorders / CT_TcBorders: top, left, bottom, right\n const borderProps = ['top', 'left', 'bottom', 'right', 'insideH', 'insideV'] as const;\n for (const prop of borderProps) {\n const border = borders[prop];\n if (border) {\n // CT_Border §17.18.2: w:val required. Default to \"nil\" so size/color-\n // only borders in style-level tblBorders/tcBorders still validate.\n // Emit full CT_Border attribute set for themed-border fidelity.\n const attrs: Record<string, string | number> = { 'w:val': border.style ?? 'nil' };\n if (border.size !== undefined) attrs['w:sz'] = border.size;\n if (border.space !== undefined) attrs['w:space'] = border.space;\n if (border.color) attrs['w:color'] = border.color;\n const b = border as {\n themeColor?: string;\n themeTint?: string;\n themeShade?: string;\n shadow?: boolean;\n frame?: boolean;\n };\n if (b.themeColor) attrs['w:themeColor'] = b.themeColor;\n if (b.themeTint) attrs['w:themeTint'] = b.themeTint;\n if (b.themeShade) attrs['w:themeShade'] = b.themeShade;\n if (b.shadow !== undefined) attrs['w:shadow'] = b.shadow ? '1' : '0';\n if (b.frame !== undefined) attrs['w:frame'] = b.frame ? '1' : '0';\n borderElements.push(XMLBuilder.wSelf(prop, attrs));\n }\n }\n\n // Add diagonal borders for cells. CT_Border §17.18.2 requires w:val;\n // default \"nil\" matches the other cell-border paths. Full CT_Border\n // attribute set emitted.\n const buildDiagonalAttrs = (b: {\n style?: string;\n size?: number;\n space?: number;\n color?: string;\n themeColor?: string;\n themeTint?: string;\n themeShade?: string;\n shadow?: boolean;\n frame?: boolean;\n }): Record<string, string | number> => {\n const attrs: Record<string, string | number> = { 'w:val': b.style ?? 'nil' };\n if (b.size !== undefined) attrs['w:sz'] = b.size;\n if (b.space !== undefined) attrs['w:space'] = b.space;\n if (b.color) attrs['w:color'] = b.color;\n if (b.themeColor) attrs['w:themeColor'] = b.themeColor;\n if (b.themeTint) attrs['w:themeTint'] = b.themeTint;\n if (b.themeShade) attrs['w:themeShade'] = b.themeShade;\n if (b.shadow !== undefined) attrs['w:shadow'] = b.shadow ? '1' : '0';\n if (b.frame !== undefined) attrs['w:frame'] = b.frame ? '1' : '0';\n return attrs;\n };\n if (includeDiagonals) {\n const cellBorders = borders as CellBorders;\n if (cellBorders.tl2br) {\n borderElements.push(XMLBuilder.wSelf('tl2br', buildDiagonalAttrs(cellBorders.tl2br)));\n }\n if (cellBorders.tr2bl) {\n borderElements.push(XMLBuilder.wSelf('tr2bl', buildDiagonalAttrs(cellBorders.tr2bl)));\n }\n }\n\n return borderElements;\n }\n\n /**\n * Generates shading element - Phase 5.1\n */\n private generateShadingElement(shading: ShadingProperties): XMLElement {\n const attrs = buildShadingAttributes(shading);\n return XMLBuilder.wSelf('shd', attrs);\n }\n\n /**\n * Creates a new Style\n * @param properties - Style properties\n * @returns New Style instance\n */\n static create(properties: StyleProperties): Style {\n return new Style(properties);\n }\n\n /**\n * Creates the Normal style (default paragraph style)\n * @returns Normal style\n */\n static createNormalStyle(): Style {\n return new Style({\n styleId: 'Normal',\n name: 'Normal',\n type: 'paragraph',\n isDefault: true,\n next: 'Normal',\n qFormat: true,\n uiPriority: 0,\n paragraphFormatting: {\n alignment: 'left',\n spacing: {\n before: 60, // 3pt\n after: 60, // 3pt\n line: 240, // Single line spacing\n lineRule: 'auto',\n },\n },\n runFormatting: {\n font: 'Verdana',\n size: 12,\n color: '000000',\n },\n });\n }\n\n /**\n * Creates a Heading style\n * @param level - Heading level (1-9)\n * @returns Heading style\n */\n static createHeadingStyle(level: number): Style {\n if (level < 1 || level > 9) {\n throw new Error('Heading level must be between 1 and 9');\n }\n\n // Font sizes: H1=18pt, H2=14pt, H3=12pt, H4-9=12pt\n const sizes = [18, 14, 12, 12, 12, 12, 12, 12, 12];\n\n // Spacing before: H1=0pt, H2=6pt, H3=3pt, H4-9=6pt (in twips: 1pt = 20 twips)\n const spacingBefore = level === 1 ? 0 : level === 2 ? 120 : level === 3 ? 60 : 120;\n\n // Spacing after: H1=12pt, H2=6pt, H3=3pt, H4-9=6pt (in twips)\n const spacingAfter = level === 1 ? 240 : level === 2 ? 120 : level === 3 ? 60 : 120;\n\n return new Style({\n styleId: `Heading${level}`,\n name: `Heading ${level}`,\n type: 'paragraph',\n basedOn: 'Normal',\n next: 'Normal',\n link: `Heading${level}Char`,\n qFormat: true,\n uiPriority: 9,\n paragraphFormatting: {\n alignment: 'left',\n spacing: {\n before: spacingBefore,\n after: spacingAfter,\n line: 240, // Single line spacing\n lineRule: 'auto',\n },\n keepNext: true,\n keepLines: true,\n outlineLevel: level - 1, // Heading 1 = 0, Heading 2 = 1, etc. Required for TOC\n },\n runFormatting: {\n font: 'Verdana',\n size: sizes[level - 1],\n bold: true,\n color: '000000',\n },\n });\n }\n\n /**\n * Creates a Heading character style (linked to paragraph style)\n * @param level - Heading level (1-9)\n * @returns Heading character style\n */\n static createHeadingCharStyle(level: number): Style {\n if (level < 1 || level > 9) {\n throw new Error('Heading level must be between 1 and 9');\n }\n\n // Font sizes: H1=18pt, H2=14pt, H3=12pt, H4-9=12pt\n const sizes = [18, 14, 12, 12, 12, 12, 12, 12, 12];\n\n return new Style({\n styleId: `Heading${level}Char`,\n name: `Heading ${level} Char`,\n type: 'character',\n link: `Heading${level}`,\n qFormat: true,\n uiPriority: 9,\n runFormatting: {\n font: 'Verdana',\n size: sizes[level - 1],\n bold: true,\n color: '000000',\n },\n });\n }\n\n /**\n * Creates the Title style\n * @returns Title style\n */\n static createTitleStyle(): Style {\n return new Style({\n styleId: 'Title',\n name: 'Title',\n type: 'paragraph',\n basedOn: 'Normal',\n next: 'Normal',\n paragraphFormatting: {\n spacing: {\n after: 120,\n },\n },\n runFormatting: {\n font: 'Verdana',\n size: 28,\n color: '000000',\n },\n });\n }\n\n /**\n * Creates the Subtitle style\n * @returns Subtitle style\n */\n static createSubtitleStyle(): Style {\n return new Style({\n styleId: 'Subtitle',\n name: 'Subtitle',\n type: 'paragraph',\n basedOn: 'Normal',\n next: 'Normal',\n paragraphFormatting: {\n spacing: {\n after: 120,\n },\n },\n runFormatting: {\n font: 'Verdana',\n size: 14,\n color: '000000',\n italic: true,\n },\n });\n }\n\n /**\n * Creates a List Paragraph style (for lists)\n * @returns List Paragraph style\n */\n static createListParagraphStyle(): Style {\n return new Style({\n styleId: 'ListParagraph',\n name: 'List Paragraph',\n type: 'paragraph',\n basedOn: 'Normal',\n next: 'ListParagraph',\n qFormat: true,\n uiPriority: 34,\n paragraphFormatting: {\n alignment: 'left',\n indentation: {\n left: 720, // 0.5 inch (text indentation)\n hanging: 360, // 0.25 inch (bullet/number indentation)\n },\n spacing: {\n before: 0, // 0pt\n after: 60, // 3pt\n line: 240, // Single line spacing\n lineRule: 'auto',\n },\n contextualSpacing: true, // No space between similar paragraphs\n },\n runFormatting: {\n font: 'Verdana',\n size: 12,\n color: '000000',\n },\n });\n }\n\n /**\n * Creates a TOC Heading style (for table of contents titles)\n * @returns TOC Heading style\n */\n static createTOCHeadingStyle(): Style {\n return new Style({\n styleId: 'TOCHeading',\n name: 'TOC Heading',\n type: 'paragraph',\n basedOn: 'Heading1',\n next: 'Normal',\n runFormatting: {\n bold: true,\n font: 'Verdana',\n size: 14,\n color: '000000', // Black\n },\n paragraphFormatting: {\n spacing: {\n before: 480, // Larger spacing before TOC\n after: 240,\n },\n },\n });\n }\n\n /**\n * Creates a TOC entry style for a specific level (1-9).\n * TOC 1-9 are built-in Word styles for Table of Contents entries.\n * When Word updates a TOC field, it applies these styles to the generated entries.\n *\n * @param level - TOC level (1-9)\n * @param formatting - Optional run and paragraph formatting overrides\n * @returns TOC style for the specified level\n */\n static createTOCStyle(\n level: number,\n formatting?: {\n run?: RunFormatting;\n paragraph?: ParagraphFormatting;\n }\n ): Style {\n if (level < 1 || level > 9) {\n throw new Error('TOC level must be between 1 and 9');\n }\n\n // Default indentation: 220 twips per level (11pt)\n const defaultLeftIndent = (level - 1) * 220;\n\n return Style.create({\n styleId: `TOC${level}`,\n name: `toc ${level}`,\n type: 'paragraph',\n basedOn: 'Normal',\n uiPriority: 39,\n semiHidden: true,\n unhideWhenUsed: true,\n runFormatting: formatting?.run,\n paragraphFormatting: {\n indentation: { left: defaultLeftIndent },\n ...formatting?.paragraph,\n },\n });\n }\n\n /**\n * Creates a Table Normal style (Phase 5.1)\n * @returns Table Normal style\n */\n static createTableNormalStyle(): Style {\n return new Style({\n styleId: 'TableNormal',\n name: 'Table Normal',\n type: 'table',\n basedOn: 'Normal',\n tableStyle: {\n table: {\n cellMargins: {\n top: 0,\n left: 108, // ~0.075 inch\n bottom: 0,\n right: 108,\n },\n },\n rowBandSize: 1,\n colBandSize: 1,\n },\n });\n }\n\n /**\n * Creates a Table Grid style with borders (Phase 5.1)\n * @returns Table Grid style\n */\n static createTableGridStyle(): Style {\n return new Style({\n styleId: 'TableGrid',\n name: 'Table Grid',\n type: 'table',\n basedOn: 'TableNormal',\n tableStyle: {\n table: {\n borders: {\n top: { style: 'single', size: 4, color: '000000' },\n bottom: { style: 'single', size: 4, color: '000000' },\n left: { style: 'single', size: 4, color: '000000' },\n right: { style: 'single', size: 4, color: '000000' },\n insideH: { style: 'single', size: 4, color: '000000' },\n insideV: { style: 'single', size: 4, color: '000000' },\n },\n cellMargins: {\n top: 0,\n left: 108,\n bottom: 0,\n right: 108,\n },\n },\n rowBandSize: 1,\n colBandSize: 1,\n },\n });\n }\n\n /**\n * Creates a deep clone of this style\n * @returns New Style instance with copied properties\n * @example\n * ```typescript\n * const original = Style.createHeadingStyle(1);\n * const copy = original.clone();\n * copy.setRunFormatting({ color: 'FF0000' }); // Doesn't affect original\n * ```\n */\n clone(): Style {\n // Deep copy all properties\n const clonedProps: StyleProperties = deepClone(this.properties);\n return new Style(clonedProps);\n }\n\n /**\n * Resets the style to its minimal state\n * Clears all paragraph and run formatting while preserving the style identity\n * @returns This style for chaining\n * @example\n * ```typescript\n * const style = Style.createHeadingStyle(1);\n * style.reset(); // Clears all formatting, keeps styleId and name\n * ```\n */\n reset(): this {\n // Preserve identity properties\n const { styleId, name, type, basedOn } = this.properties;\n\n // Reset to minimal properties\n this.properties = {\n styleId,\n name,\n type,\n basedOn,\n };\n\n return this;\n }\n\n /**\n * Merges properties from another style into this one\n * @param otherStyle - Style to merge from\n * @returns This style for chaining\n * @example\n * ```typescript\n * const base = Style.createNormalStyle();\n * const override = Style.create({\n * styleId: 'Override',\n * name: 'Override',\n * type: 'paragraph',\n * runFormatting: { bold: true, color: 'FF0000' }\n * });\n * base.mergeWith(override); // base now has bold red text\n * ```\n */\n mergeWith(otherStyle: Style): this {\n const otherProps = otherStyle.getProperties();\n\n // Merge paragraph formatting\n if (otherProps.paragraphFormatting) {\n if (!this.properties.paragraphFormatting) {\n this.properties.paragraphFormatting = {};\n }\n\n // Merge top-level paragraph properties\n if (otherProps.paragraphFormatting.alignment) {\n this.properties.paragraphFormatting.alignment = otherProps.paragraphFormatting.alignment;\n }\n if (otherProps.paragraphFormatting.keepNext !== undefined) {\n this.properties.paragraphFormatting.keepNext = otherProps.paragraphFormatting.keepNext;\n }\n if (otherProps.paragraphFormatting.keepLines !== undefined) {\n this.properties.paragraphFormatting.keepLines = otherProps.paragraphFormatting.keepLines;\n }\n if (otherProps.paragraphFormatting.pageBreakBefore !== undefined) {\n this.properties.paragraphFormatting.pageBreakBefore =\n otherProps.paragraphFormatting.pageBreakBefore;\n }\n\n // Merge indentation\n if (otherProps.paragraphFormatting.indentation) {\n if (!this.properties.paragraphFormatting.indentation) {\n this.properties.paragraphFormatting.indentation = {};\n }\n Object.assign(\n this.properties.paragraphFormatting.indentation,\n otherProps.paragraphFormatting.indentation\n );\n }\n\n // Merge spacing\n if (otherProps.paragraphFormatting.spacing) {\n if (!this.properties.paragraphFormatting.spacing) {\n this.properties.paragraphFormatting.spacing = {};\n }\n Object.assign(\n this.properties.paragraphFormatting.spacing,\n otherProps.paragraphFormatting.spacing\n );\n }\n }\n\n // Merge run formatting\n if (otherProps.runFormatting) {\n if (!this.properties.runFormatting) {\n this.properties.runFormatting = {};\n }\n Object.assign(this.properties.runFormatting, otherProps.runFormatting);\n }\n\n // Merge other properties (but don't override styleId)\n if (otherProps.name) this.properties.name = otherProps.name;\n if (otherProps.basedOn) this.properties.basedOn = otherProps.basedOn;\n if (otherProps.next) this.properties.next = otherProps.next;\n\n return this;\n }\n}\n"]}
|