docxmlater 10.3.3 → 10.3.5

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.
@@ -166,8 +166,8 @@ class RelationshipManager {
166
166
  }
167
167
  static fromXml(xml) {
168
168
  const manager = new RelationshipManager();
169
- if (xml.length > 100000) {
170
- throw new Error('Relationships XML file too large (>100KB). Possible malicious input or corrupted file.');
169
+ if (xml.length > 10000000) {
170
+ throw new Error('Relationships XML file too large (>10MB). Possible malicious input or corrupted file.');
171
171
  }
172
172
  const relationshipElements = XMLParser_1.XMLParser.extractElements(xml, 'Relationship');
173
173
  if (relationshipElements.length > 1000) {
@@ -1 +1 @@
1
- {"version":3,"file":"RelationshipManager.js","sourceRoot":"","sources":["../../src/core/RelationshipManager.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * RelationshipManager - Manages collections of relationships\n *\n * Handles relationship creation, tracking, and XML generation for various\n * document parts (document.xml, header.xml, footer.xml, etc.)\n */\n\nimport { Relationship, RelationshipType } from './Relationship';\nimport { XMLParser } from '../xml/XMLParser';\nimport { sanitizeHyperlinkUrl } from '../utils/validation';\n\n/**\n * Manages relationships for a document or document part\n */\nexport class RelationshipManager {\n private relationships: Map<string, Relationship>;\n private nextId: number;\n\n /**\n * Creates a new relationship manager\n */\n constructor() {\n this.relationships = new Map();\n this.nextId = 1;\n }\n\n /**\n * Adds a relationship\n * @param relationship The relationship to add\n * @returns The relationship that was added\n */\n addRelationship(relationship: Relationship): Relationship {\n this.relationships.set(relationship.getId(), relationship);\n\n // Update next ID if necessary\n const idMatch = /^rId(\\d+)$/.exec(relationship.getId());\n if (idMatch?.[1]) {\n const idNum = parseInt(idMatch[1], 10);\n if (idNum >= this.nextId) {\n this.nextId = idNum + 1;\n }\n }\n\n return relationship;\n }\n\n /**\n * Gets a relationship by ID\n * @param id The relationship ID\n */\n getRelationship(id: string): Relationship | undefined {\n return this.relationships.get(id);\n }\n\n /**\n * Gets all relationships\n */\n getAllRelationships(): Relationship[] {\n return Array.from(this.relationships.values());\n }\n\n /**\n * Gets relationships of a specific type\n * @param type The relationship type\n */\n getRelationshipsByType(type: string | RelationshipType): Relationship[] {\n return this.getAllRelationships().filter((rel) => rel.getType() === type);\n }\n\n /**\n * Checks if a relationship exists\n * @param id The relationship ID\n */\n hasRelationship(id: string): boolean {\n return this.relationships.has(id);\n }\n\n /**\n * Removes a relationship\n * @param id The relationship ID\n * @returns True if removed, false if not found\n */\n removeRelationship(id: string): boolean {\n return this.relationships.delete(id);\n }\n\n /**\n * Gets the number of relationships\n */\n getCount(): number {\n return this.relationships.size;\n }\n\n /**\n * Clears all relationships\n */\n clear(): this {\n this.relationships.clear();\n this.nextId = 1;\n return this;\n }\n\n /**\n * Generates a new unique relationship ID\n * @returns New relationship ID (e.g., 'rId1', 'rId2')\n */\n generateId(): string {\n return `rId${this.nextId++}`;\n }\n\n /**\n * Adds a styles relationship\n * @returns The created relationship\n */\n addStyles(): Relationship {\n const id = this.generateId();\n return this.addRelationship(Relationship.createStyles(id));\n }\n\n /**\n * Adds a numbering relationship\n * @returns The created relationship\n */\n addNumbering(): Relationship {\n const id = this.generateId();\n return this.addRelationship(Relationship.createNumbering(id));\n }\n\n /**\n * Adds a fontTable relationship\n * @returns The created relationship\n */\n addFontTable(): Relationship {\n const id = this.generateId();\n return this.addRelationship(Relationship.createFontTable(id));\n }\n\n /**\n * Adds a settings relationship\n * @returns The created relationship\n */\n addSettings(): Relationship {\n const id = this.generateId();\n return this.addRelationship(Relationship.createSettings(id));\n }\n\n /**\n * Adds a webSettings relationship\n * @returns The created relationship\n */\n addWebSettings(): Relationship {\n const id = this.generateId();\n return this.addRelationship(Relationship.createWebSettings(id));\n }\n\n /**\n * Adds a theme relationship\n * @returns The created relationship\n */\n addTheme(): Relationship {\n const id = this.generateId();\n return this.addRelationship(Relationship.createTheme(id));\n }\n\n /**\n * Adds an image relationship\n * @param target Image path relative to the part (e.g., 'media/image1.png')\n * @returns The created relationship\n */\n addImage(target: string): Relationship {\n const id = this.generateId();\n return this.addRelationship(Relationship.createImage(id, target));\n }\n\n /**\n * Adds a header relationship\n * @param target Header file path (e.g., 'header1.xml')\n * @returns The created relationship\n */\n addHeader(target: string): Relationship {\n const id = this.generateId();\n return this.addRelationship(Relationship.createHeader(id, target));\n }\n\n /**\n * Adds a footer relationship\n * @param target Footer file path (e.g., 'footer1.xml')\n * @returns The created relationship\n */\n addFooter(target: string): Relationship {\n const id = this.generateId();\n return this.addRelationship(Relationship.createFooter(id, target));\n }\n\n /**\n * Adds a hyperlink relationship\n * @param url The hyperlink URL\n * @returns The created relationship\n */\n addHyperlink(url: string): Relationship {\n const id = this.generateId();\n return this.addRelationship(Relationship.createHyperlink(id, url));\n }\n\n /**\n * Updates the target URL of an existing hyperlink relationship\n *\n * This method modifies an existing relationship's target in-place, maintaining\n * the same relationship ID. This is crucial for proper OpenXML compliance\n * per ECMA-376 §17.16.22, as it prevents orphaned relationships.\n *\n * @param relationshipId The ID of the relationship to update\n * @param newUrl The new URL to set\n * @returns True if updated, false if relationship not found\n */\n updateHyperlinkTarget(relationshipId: string, newUrl: string): boolean {\n const relationship = this.getRelationship(relationshipId);\n if (!relationship) {\n return false;\n }\n\n // Verify this is a hyperlink relationship\n if (relationship.getType() !== RelationshipType.HYPERLINK) {\n throw new Error(\n `Relationship ${relationshipId} is not a hyperlink relationship. ` +\n `Type is ${relationship.getType()}, expected ${RelationshipType.HYPERLINK}`\n );\n }\n\n // Update the target URL\n relationship.setTarget(newUrl);\n return true;\n }\n\n /**\n * Finds a hyperlink relationship by its target URL\n *\n * @param targetUrl The URL to search for\n * @returns The matching relationship, or undefined if not found\n */\n findHyperlinkByTarget(targetUrl: string): Relationship | undefined {\n return this.getAllRelationships().find(\n (rel) => rel.getType() === RelationshipType.HYPERLINK && rel.getTarget() === targetUrl\n );\n }\n\n /**\n * Gets or creates a hyperlink relationship for the given URL\n *\n * This method ensures we don't create duplicate relationships for the same URL.\n * If a relationship already exists for the URL, it returns the existing one.\n * Otherwise, it creates a new relationship.\n *\n * @param url The hyperlink URL\n * @returns The existing or newly created relationship\n */\n getOrCreateHyperlink(url: string): Relationship {\n // Check if relationship already exists for this URL\n const existing = this.findHyperlinkByTarget(url);\n if (existing) {\n return existing;\n }\n\n // Create new relationship\n return this.addHyperlink(url);\n }\n\n /**\n * Removes orphaned hyperlink relationships\n *\n * This method removes hyperlink relationships that are no longer referenced\n * by any hyperlink in the document. Call this after updating URLs to clean\n * up any orphaned relationships.\n *\n * @param referencedIds Set of relationship IDs that are still in use\n * @returns Number of relationships removed\n */\n removeOrphanedHyperlinks(referencedIds: Set<string>): number {\n let removed = 0;\n const toRemove: string[] = [];\n\n // Find orphaned relationships\n for (const rel of this.getAllRelationships()) {\n if (rel.getType() === RelationshipType.HYPERLINK && !referencedIds.has(rel.getId())) {\n toRemove.push(rel.getId());\n }\n }\n\n // Remove orphaned relationships\n for (const id of toRemove) {\n if (this.removeRelationship(id)) {\n removed++;\n }\n }\n\n return removed;\n }\n\n /**\n * Adds a comments relationship\n * @returns The created relationship\n */\n addComments(): Relationship {\n const id = this.generateId();\n return this.addRelationship(Relationship.createComments(id));\n }\n\n /**\n * Adds a footnotes relationship\n * @returns The created relationship\n */\n addFootnotes(): Relationship {\n const id = this.generateId();\n return this.addRelationship(Relationship.createFootnotes(id));\n }\n\n /**\n * Adds an endnotes relationship\n * @returns The created relationship\n */\n addEndnotes(): Relationship {\n const id = this.generateId();\n return this.addRelationship(Relationship.createEndnotes(id));\n }\n\n /**\n * Adds a people relationship (track changes authors)\n * @returns The created relationship\n */\n addPeople(): Relationship {\n const id = this.generateId();\n return this.addRelationship(Relationship.createPeople(id));\n }\n\n /**\n * Generates the relationships XML file content\n * @returns Complete XML string for .rels file\n */\n generateXml(): string {\n const relationships = this.getAllRelationships();\n\n let xml = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n';\n xml += '<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">\\n';\n\n for (const rel of relationships) {\n xml += rel.toXML() + '\\n';\n }\n\n xml += '</Relationships>';\n\n return xml;\n }\n\n /**\n * Creates a new relationship manager with common document relationships\n * @returns RelationshipManager with styles, numbering, fontTable, settings, and theme relationships\n */\n static createForDocument(): RelationshipManager {\n const manager = new RelationshipManager();\n manager.addStyles();\n manager.addNumbering();\n manager.addFontTable();\n manager.addSettings();\n manager.addWebSettings();\n manager.addTheme();\n return manager;\n }\n\n /**\n * Creates an empty relationship manager\n * @returns Empty RelationshipManager\n */\n static create(): RelationshipManager {\n return new RelationshipManager();\n }\n\n /**\n * Parses relationships from XML string and creates a populated manager\n * @param xml The relationships XML content (.rels file)\n * @returns RelationshipManager with parsed relationships\n */\n static fromXml(xml: string): RelationshipManager {\n const manager = new RelationshipManager();\n\n // Prevent ReDoS: validate input size (typical .rels files are < 10KB)\n if (xml.length > 100000) {\n throw new Error(\n 'Relationships XML file too large (>100KB). Possible malicious input or corrupted file.'\n );\n }\n\n // Use XMLParser to extract all Relationship elements\n const relationshipElements = XMLParser.extractElements(xml, 'Relationship');\n\n // Prevent infinite loops: check relationship count\n if (relationshipElements.length > 1000) {\n throw new Error('Too many relationships in XML file (>1000). Possible malicious input.');\n }\n\n // Process each relationship element\n for (const relationshipElement of relationshipElements) {\n // Extract attributes using XMLParser\n const id = XMLParser.extractAttribute(relationshipElement, 'Id');\n const type = XMLParser.extractAttribute(relationshipElement, 'Type');\n const target = XMLParser.extractAttribute(relationshipElement, 'Target');\n const targetMode = XMLParser.extractAttribute(relationshipElement, 'TargetMode');\n\n // Only create relationship if all required attributes present\n if (id && type && target) {\n // Validate targetMode before type assertion\n const validatedTargetMode =\n targetMode === 'Internal' || targetMode === 'External' || targetMode === undefined\n ? targetMode\n : undefined;\n\n // Sanitize hyperlink URLs (strip browser extension prefixes)\n let sanitizedTarget = target;\n if (type.endsWith('/hyperlink')) {\n const result = sanitizeHyperlinkUrl(target);\n if (result) {\n sanitizedTarget = result.url;\n }\n }\n\n // Create and add relationship\n const relationship = Relationship.create({\n id,\n type,\n target: sanitizedTarget,\n targetMode: validatedTargetMode || 'Internal',\n });\n\n manager.addRelationship(relationship);\n }\n }\n\n return manager;\n }\n}\n"]}
1
+ {"version":3,"file":"RelationshipManager.js","sourceRoot":"","sources":["../../src/core/RelationshipManager.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * RelationshipManager - Manages collections of relationships\n *\n * Handles relationship creation, tracking, and XML generation for various\n * document parts (document.xml, header.xml, footer.xml, etc.)\n */\n\nimport { Relationship, RelationshipType } from './Relationship';\nimport { XMLParser } from '../xml/XMLParser';\nimport { sanitizeHyperlinkUrl } from '../utils/validation';\n\n/**\n * Manages relationships for a document or document part\n */\nexport class RelationshipManager {\n private relationships: Map<string, Relationship>;\n private nextId: number;\n\n /**\n * Creates a new relationship manager\n */\n constructor() {\n this.relationships = new Map();\n this.nextId = 1;\n }\n\n /**\n * Adds a relationship\n * @param relationship The relationship to add\n * @returns The relationship that was added\n */\n addRelationship(relationship: Relationship): Relationship {\n this.relationships.set(relationship.getId(), relationship);\n\n // Update next ID if necessary\n const idMatch = /^rId(\\d+)$/.exec(relationship.getId());\n if (idMatch?.[1]) {\n const idNum = parseInt(idMatch[1], 10);\n if (idNum >= this.nextId) {\n this.nextId = idNum + 1;\n }\n }\n\n return relationship;\n }\n\n /**\n * Gets a relationship by ID\n * @param id The relationship ID\n */\n getRelationship(id: string): Relationship | undefined {\n return this.relationships.get(id);\n }\n\n /**\n * Gets all relationships\n */\n getAllRelationships(): Relationship[] {\n return Array.from(this.relationships.values());\n }\n\n /**\n * Gets relationships of a specific type\n * @param type The relationship type\n */\n getRelationshipsByType(type: string | RelationshipType): Relationship[] {\n return this.getAllRelationships().filter((rel) => rel.getType() === type);\n }\n\n /**\n * Checks if a relationship exists\n * @param id The relationship ID\n */\n hasRelationship(id: string): boolean {\n return this.relationships.has(id);\n }\n\n /**\n * Removes a relationship\n * @param id The relationship ID\n * @returns True if removed, false if not found\n */\n removeRelationship(id: string): boolean {\n return this.relationships.delete(id);\n }\n\n /**\n * Gets the number of relationships\n */\n getCount(): number {\n return this.relationships.size;\n }\n\n /**\n * Clears all relationships\n */\n clear(): this {\n this.relationships.clear();\n this.nextId = 1;\n return this;\n }\n\n /**\n * Generates a new unique relationship ID\n * @returns New relationship ID (e.g., 'rId1', 'rId2')\n */\n generateId(): string {\n return `rId${this.nextId++}`;\n }\n\n /**\n * Adds a styles relationship\n * @returns The created relationship\n */\n addStyles(): Relationship {\n const id = this.generateId();\n return this.addRelationship(Relationship.createStyles(id));\n }\n\n /**\n * Adds a numbering relationship\n * @returns The created relationship\n */\n addNumbering(): Relationship {\n const id = this.generateId();\n return this.addRelationship(Relationship.createNumbering(id));\n }\n\n /**\n * Adds a fontTable relationship\n * @returns The created relationship\n */\n addFontTable(): Relationship {\n const id = this.generateId();\n return this.addRelationship(Relationship.createFontTable(id));\n }\n\n /**\n * Adds a settings relationship\n * @returns The created relationship\n */\n addSettings(): Relationship {\n const id = this.generateId();\n return this.addRelationship(Relationship.createSettings(id));\n }\n\n /**\n * Adds a webSettings relationship\n * @returns The created relationship\n */\n addWebSettings(): Relationship {\n const id = this.generateId();\n return this.addRelationship(Relationship.createWebSettings(id));\n }\n\n /**\n * Adds a theme relationship\n * @returns The created relationship\n */\n addTheme(): Relationship {\n const id = this.generateId();\n return this.addRelationship(Relationship.createTheme(id));\n }\n\n /**\n * Adds an image relationship\n * @param target Image path relative to the part (e.g., 'media/image1.png')\n * @returns The created relationship\n */\n addImage(target: string): Relationship {\n const id = this.generateId();\n return this.addRelationship(Relationship.createImage(id, target));\n }\n\n /**\n * Adds a header relationship\n * @param target Header file path (e.g., 'header1.xml')\n * @returns The created relationship\n */\n addHeader(target: string): Relationship {\n const id = this.generateId();\n return this.addRelationship(Relationship.createHeader(id, target));\n }\n\n /**\n * Adds a footer relationship\n * @param target Footer file path (e.g., 'footer1.xml')\n * @returns The created relationship\n */\n addFooter(target: string): Relationship {\n const id = this.generateId();\n return this.addRelationship(Relationship.createFooter(id, target));\n }\n\n /**\n * Adds a hyperlink relationship\n * @param url The hyperlink URL\n * @returns The created relationship\n */\n addHyperlink(url: string): Relationship {\n const id = this.generateId();\n return this.addRelationship(Relationship.createHyperlink(id, url));\n }\n\n /**\n * Updates the target URL of an existing hyperlink relationship\n *\n * This method modifies an existing relationship's target in-place, maintaining\n * the same relationship ID. This is crucial for proper OpenXML compliance\n * per ECMA-376 §17.16.22, as it prevents orphaned relationships.\n *\n * @param relationshipId The ID of the relationship to update\n * @param newUrl The new URL to set\n * @returns True if updated, false if relationship not found\n */\n updateHyperlinkTarget(relationshipId: string, newUrl: string): boolean {\n const relationship = this.getRelationship(relationshipId);\n if (!relationship) {\n return false;\n }\n\n // Verify this is a hyperlink relationship\n if (relationship.getType() !== RelationshipType.HYPERLINK) {\n throw new Error(\n `Relationship ${relationshipId} is not a hyperlink relationship. ` +\n `Type is ${relationship.getType()}, expected ${RelationshipType.HYPERLINK}`\n );\n }\n\n // Update the target URL\n relationship.setTarget(newUrl);\n return true;\n }\n\n /**\n * Finds a hyperlink relationship by its target URL\n *\n * @param targetUrl The URL to search for\n * @returns The matching relationship, or undefined if not found\n */\n findHyperlinkByTarget(targetUrl: string): Relationship | undefined {\n return this.getAllRelationships().find(\n (rel) => rel.getType() === RelationshipType.HYPERLINK && rel.getTarget() === targetUrl\n );\n }\n\n /**\n * Gets or creates a hyperlink relationship for the given URL\n *\n * This method ensures we don't create duplicate relationships for the same URL.\n * If a relationship already exists for the URL, it returns the existing one.\n * Otherwise, it creates a new relationship.\n *\n * @param url The hyperlink URL\n * @returns The existing or newly created relationship\n */\n getOrCreateHyperlink(url: string): Relationship {\n // Check if relationship already exists for this URL\n const existing = this.findHyperlinkByTarget(url);\n if (existing) {\n return existing;\n }\n\n // Create new relationship\n return this.addHyperlink(url);\n }\n\n /**\n * Removes orphaned hyperlink relationships\n *\n * This method removes hyperlink relationships that are no longer referenced\n * by any hyperlink in the document. Call this after updating URLs to clean\n * up any orphaned relationships.\n *\n * @param referencedIds Set of relationship IDs that are still in use\n * @returns Number of relationships removed\n */\n removeOrphanedHyperlinks(referencedIds: Set<string>): number {\n let removed = 0;\n const toRemove: string[] = [];\n\n // Find orphaned relationships\n for (const rel of this.getAllRelationships()) {\n if (rel.getType() === RelationshipType.HYPERLINK && !referencedIds.has(rel.getId())) {\n toRemove.push(rel.getId());\n }\n }\n\n // Remove orphaned relationships\n for (const id of toRemove) {\n if (this.removeRelationship(id)) {\n removed++;\n }\n }\n\n return removed;\n }\n\n /**\n * Adds a comments relationship\n * @returns The created relationship\n */\n addComments(): Relationship {\n const id = this.generateId();\n return this.addRelationship(Relationship.createComments(id));\n }\n\n /**\n * Adds a footnotes relationship\n * @returns The created relationship\n */\n addFootnotes(): Relationship {\n const id = this.generateId();\n return this.addRelationship(Relationship.createFootnotes(id));\n }\n\n /**\n * Adds an endnotes relationship\n * @returns The created relationship\n */\n addEndnotes(): Relationship {\n const id = this.generateId();\n return this.addRelationship(Relationship.createEndnotes(id));\n }\n\n /**\n * Adds a people relationship (track changes authors)\n * @returns The created relationship\n */\n addPeople(): Relationship {\n const id = this.generateId();\n return this.addRelationship(Relationship.createPeople(id));\n }\n\n /**\n * Generates the relationships XML file content\n * @returns Complete XML string for .rels file\n */\n generateXml(): string {\n const relationships = this.getAllRelationships();\n\n let xml = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n';\n xml += '<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">\\n';\n\n for (const rel of relationships) {\n xml += rel.toXML() + '\\n';\n }\n\n xml += '</Relationships>';\n\n return xml;\n }\n\n /**\n * Creates a new relationship manager with common document relationships\n * @returns RelationshipManager with styles, numbering, fontTable, settings, and theme relationships\n */\n static createForDocument(): RelationshipManager {\n const manager = new RelationshipManager();\n manager.addStyles();\n manager.addNumbering();\n manager.addFontTable();\n manager.addSettings();\n manager.addWebSettings();\n manager.addTheme();\n return manager;\n }\n\n /**\n * Creates an empty relationship manager\n * @returns Empty RelationshipManager\n */\n static create(): RelationshipManager {\n return new RelationshipManager();\n }\n\n /**\n * Parses relationships from XML string and creates a populated manager\n * @param xml The relationships XML content (.rels file)\n * @returns RelationshipManager with parsed relationships\n */\n static fromXml(xml: string): RelationshipManager {\n const manager = new RelationshipManager();\n\n // Prevent ReDoS: validate input size (typical .rels files are < 10KB, max 10MB)\n if (xml.length > 10000000) {\n throw new Error(\n 'Relationships XML file too large (>10MB). Possible malicious input or corrupted file.'\n );\n }\n\n // Use XMLParser to extract all Relationship elements\n const relationshipElements = XMLParser.extractElements(xml, 'Relationship');\n\n // Prevent infinite loops: check relationship count\n if (relationshipElements.length > 1000) {\n throw new Error('Too many relationships in XML file (>1000). Possible malicious input.');\n }\n\n // Process each relationship element\n for (const relationshipElement of relationshipElements) {\n // Extract attributes using XMLParser\n const id = XMLParser.extractAttribute(relationshipElement, 'Id');\n const type = XMLParser.extractAttribute(relationshipElement, 'Type');\n const target = XMLParser.extractAttribute(relationshipElement, 'Target');\n const targetMode = XMLParser.extractAttribute(relationshipElement, 'TargetMode');\n\n // Only create relationship if all required attributes present\n if (id && type && target) {\n // Validate targetMode before type assertion\n const validatedTargetMode =\n targetMode === 'Internal' || targetMode === 'External' || targetMode === undefined\n ? targetMode\n : undefined;\n\n // Sanitize hyperlink URLs (strip browser extension prefixes)\n let sanitizedTarget = target;\n if (type.endsWith('/hyperlink')) {\n const result = sanitizeHyperlinkUrl(target);\n if (result) {\n sanitizedTarget = result.url;\n }\n }\n\n // Create and add relationship\n const relationship = Relationship.create({\n id,\n type,\n target: sanitizedTarget,\n targetMode: validatedTargetMode || 'Internal',\n });\n\n manager.addRelationship(relationship);\n }\n }\n\n return manager;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"Section.d.ts","sourceRoot":"","sources":["../../src/elements/Section.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Section.d.ts","sourceRoot":"","sources":["../../src/elements/Section.ts"],"names":[],"mappings":"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"}
@@ -119,7 +119,8 @@ class Section {
119
119
  return this;
120
120
  }
121
121
  setOrientation(orientation) {
122
- const prev = this.properties.pageSize?.orientation;
122
+ const prevOrientation = this.properties.pageSize?.orientation;
123
+ const prevPageSize = this.properties.pageSize ? { ...this.properties.pageSize } : undefined;
123
124
  if (!this.properties.pageSize) {
124
125
  this.properties.pageSize = {
125
126
  width: units_1.PAGE_SIZES.LETTER.width,
@@ -133,8 +134,10 @@ class Section {
133
134
  this.properties.pageSize.width = this.properties.pageSize.height;
134
135
  this.properties.pageSize.height = temp;
135
136
  }
136
- if (this.trackingContext?.isEnabled() && prev !== orientation) {
137
- this.trackingContext.trackSectionChange(this, 'orientation', prev, orientation);
137
+ if (this.trackingContext?.isEnabled() && prevOrientation !== orientation) {
138
+ this.trackingContext.trackSectionChange(this, 'pageSize', prevPageSize, {
139
+ ...this.properties.pageSize,
140
+ });
138
141
  }
139
142
  return this;
140
143
  }
@@ -695,6 +698,18 @@ class Section {
695
698
  'w:val': tdMap[prev.textDirection] || prev.textDirection,
696
699
  }));
697
700
  }
701
+ if (prev.docGrid) {
702
+ const dgAttrs = {};
703
+ if (prev.docGrid.type)
704
+ dgAttrs['w:type'] = prev.docGrid.type;
705
+ if (prev.docGrid.linePitch !== undefined)
706
+ dgAttrs['w:linePitch'] = prev.docGrid.linePitch.toString();
707
+ if (prev.docGrid.charSpace !== undefined)
708
+ dgAttrs['w:charSpace'] = prev.docGrid.charSpace.toString();
709
+ if (Object.keys(dgAttrs).length > 0) {
710
+ prevChildren.push(XMLBuilder_1.XMLBuilder.wSelf('docGrid', dgAttrs));
711
+ }
712
+ }
698
713
  }
699
714
  const prevSectPr = XMLBuilder_1.XMLBuilder.w('sectPr', undefined, prevChildren);
700
715
  children.push(XMLBuilder_1.XMLBuilder.w('sectPrChange', changeAttrs, [prevSectPr]));
@@ -1 +1 @@
1
- {"version":3,"file":"Section.js","sourceRoot":"","sources":["../../src/elements/Section.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Section - Represents a document section with page setup properties\n *\n * Sections allow different page setups within a single document (margins, orientation, etc.)\n * Each section can have its own headers, footers, and page numbering.\n */\n\nimport { XMLBuilder, XMLElement } from '../xml/XMLBuilder';\nimport { PAGE_SIZES } from '../utils/units';\n\n/**\n * Page orientation\n */\nexport type PageOrientation = 'portrait' | 'landscape';\n\n/**\n * Section break type\n */\nexport type SectionType = 'nextPage' | 'continuous' | 'evenPage' | 'oddPage' | 'nextColumn';\n\n/**\n * Page numbering format\n */\n/**\n * Per ECMA-376 Part 1 §17.18.59 (ST_NumberFormat)\n * Comprehensive set of page number formats\n */\nexport type PageNumberFormat =\n | 'decimal'\n | 'lowerRoman'\n | 'upperRoman'\n | 'lowerLetter'\n | 'upperLetter'\n | 'ordinal'\n | 'cardinalText'\n | 'ordinalText'\n | 'hex'\n | 'chicago'\n | 'decimalZero'\n | 'decimalEnclosedCircle'\n | 'decimalEnclosedFullstop'\n | 'decimalEnclosedParen'\n | 'ideographDigital'\n | 'ideographTraditional'\n | 'ideographLegalTraditional'\n | 'ideographEnclosedCircle'\n | 'ideographZodiac'\n | 'ideographZodiacTraditional'\n | 'chineseCounting'\n | 'chineseCountingThousand'\n | 'chineseLegalSimplified'\n | 'japaneseCounting'\n | 'japaneseDigitalTenThousand'\n | 'japaneseLegal'\n | 'koreanCounting'\n | 'koreanDigital'\n | 'koreanDigital2'\n | 'koreanLegal'\n | 'taiwaneseCounting'\n | 'taiwaneseCountingThousand'\n | 'taiwaneseDigital'\n | 'aiueo'\n | 'aiueoFullWidth'\n | 'iroha'\n | 'irohaFullWidth'\n | 'arabicAbjad'\n | 'arabicAlpha'\n | 'hebrew1'\n | 'hebrew2'\n | 'hindiConsonants'\n | 'hindiCounting'\n | 'hindiNumbers'\n | 'hindiVowels'\n | 'thaiCounting'\n | 'thaiLetters'\n | 'thaiNumbers'\n | 'vietnameseCounting'\n | 'russianLower'\n | 'russianUpper'\n | 'numberInDash'\n | 'dollarText'\n | 'bullet'\n | 'bahtText'\n | 'ganada'\n | 'chosung'\n | 'none'\n | string; // Allow any format string for forward compatibility\n\n/**\n * Page size properties\n */\nexport interface PageSize {\n /** Width in twips */\n width: number;\n /** Height in twips */\n height: number;\n /** Orientation */\n orientation?: PageOrientation;\n}\n\n/**\n * Margin properties\n */\nexport interface Margins {\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 /** Header distance from top in twips */\n header?: number;\n /** Footer distance from bottom in twips */\n footer?: number;\n /** Gutter margin in twips */\n gutter?: number;\n}\n\n/**\n * Column properties\n */\nexport interface Columns {\n /** Number of columns */\n count: number;\n /** Space between columns in twips */\n space?: number;\n /** Equal column widths */\n equalWidth?: boolean;\n /** Show column separator line */\n separator?: boolean;\n /** Individual column widths (for unequal columns) in twips */\n columnWidths?: number[];\n}\n\n/**\n * Page numbering properties\n */\nexport interface PageNumbering {\n /** Starting page number */\n start?: number;\n /** Number format */\n format?: PageNumberFormat;\n}\n\n/**\n * Paper source (printer tray) properties\n */\nexport interface PaperSource {\n /** First page tray number */\n first?: number;\n /** Other pages tray number */\n other?: number;\n}\n\n/**\n * Vertical page alignment\n */\nexport type VerticalAlignment = 'top' | 'center' | 'bottom' | 'both';\n\n/**\n * Text direction\n */\nexport type TextDirection = 'ltr' | 'rtl' | 'tbRl' | 'btLr';\n\n/**\n * Document grid type for East Asian typography\n */\nexport type DocumentGridType = 'default' | 'lines' | 'linesAndChars' | 'snapToChars';\n\n/**\n * Document grid properties\n */\nexport interface DocumentGrid {\n /** Grid type */\n type?: DocumentGridType;\n /** Lines per page */\n linePitch?: number;\n /** Characters per line */\n charSpace?: number;\n}\n\n/**\n * Line numbering restart mode\n */\nexport type LineNumberingRestart = 'newPage' | 'newSection' | 'continuous';\n\n/**\n * Line numbering properties\n * Per ECMA-376 Part 1, Section 17.6.8 (w:lnNumType element)\n */\nexport interface LineNumbering {\n /** Display line number every N lines (countBy attribute) */\n countBy?: number;\n /** Starting line number */\n start?: number;\n /** Distance from text margin in twips */\n distance?: number;\n /** When to restart line numbering */\n restart?: LineNumberingRestart;\n}\n\n/**\n * Footnote/endnote position\n * Per ECMA-376 Part 1 §17.11.6 and §17.11.7\n */\nexport type NotePosition = 'pageBottom' | 'beneathText' | 'sectEnd' | 'docEnd';\n\n/**\n * Note numbering restart mode\n */\nexport type NoteNumberRestart = 'continuous' | 'eachSect' | 'eachPage';\n\n/**\n * Chapter separator character for page numbering\n * Per ECMA-376 Part 1 §17.18.5\n */\nexport type ChapterSeparator = 'colon' | 'emDash' | 'enDash' | 'hyphen' | 'period';\n\n/**\n * Footnote/endnote section-level properties\n */\nexport interface NoteProperties {\n /** Note positioning */\n position?: NotePosition;\n /** Number format */\n numberFormat?: PageNumberFormat;\n /** Starting number */\n startNumber?: number;\n /** Restart numbering mode */\n restart?: NoteNumberRestart;\n}\n\n/**\n * Page border definition for a single side\n * Per ECMA-376 Part 1 §17.6.10\n */\nexport interface PageBorderDef {\n /** Border style (single, double, dashed, etc.) */\n style?: string;\n /** Border size in eighths of a point */\n size?: number;\n /** Border color in hex format (without #) */\n color?: string;\n /** Space between border and page edge/text in points */\n space?: number;\n /** Whether to show shadow */\n shadow?: boolean;\n /** Whether to include frame around page */\n frame?: boolean;\n /** Theme color reference */\n themeColor?: string;\n /** Art border ID (for decorative borders) */\n artId?: number;\n}\n\n/**\n * Page borders configuration\n * Per ECMA-376 Part 1 §17.6.10\n */\nexport interface PageBorders {\n /** Top page border */\n top?: PageBorderDef;\n /** Bottom page border */\n bottom?: PageBorderDef;\n /** Left page border */\n left?: PageBorderDef;\n /** Right page border */\n right?: PageBorderDef;\n /** Whether border is measured from page edge or text edge */\n offsetFrom?: 'page' | 'text';\n /** Display on all pages, first page only, or not first page */\n display?: 'allPages' | 'firstPage' | 'notFirstPage';\n /** Z-ordering relative to text */\n zOrder?: 'front' | 'back';\n}\n\n/**\n * Section properties\n */\nexport interface SectionProperties {\n /** Page size */\n pageSize?: PageSize;\n /** Margins */\n margins?: Margins;\n /** Column layout */\n columns?: Columns;\n /** Section break type */\n type?: SectionType;\n /** Page numbering */\n pageNumbering?: PageNumbering;\n /** Header reference IDs */\n headers?: {\n default?: string; // rId for default header\n first?: string; // rId for first page header\n even?: string; // rId for even page header\n };\n /** Footer reference IDs */\n footers?: {\n default?: string; // rId for default footer\n first?: string; // rId for first page footer\n even?: string; // rId for even page footer\n };\n /** Title page (different first page) */\n titlePage?: boolean;\n /** Vertical page alignment */\n verticalAlignment?: VerticalAlignment;\n /** Paper source (printer tray) */\n paperSource?: PaperSource;\n /** Text direction (LTR/RTL support) */\n textDirection?: TextDirection;\n /** Right-to-left section layout */\n bidi?: boolean;\n /** Gutter on right side (for RTL) */\n rtlGutter?: boolean;\n /** Document grid for snapping text to grid */\n docGrid?: DocumentGrid;\n /** Line numbering configuration */\n lineNumbering?: LineNumbering;\n /** Section-level footnote properties (w:footnotePr) */\n footnotePr?: NoteProperties;\n /** Section-level endnote properties (w:endnotePr) */\n endnotePr?: NoteProperties;\n /** Suppress endnotes in this section (w:noEndnote) */\n noEndnote?: boolean;\n /** Form protection for this section (w:formProt) */\n formProt?: boolean;\n /** Page borders per ECMA-376 Part 1 §17.6.10 */\n pageBorders?: PageBorders;\n /** Printer settings relationship ID (w:printerSettings r:id) */\n printerSettingsId?: string;\n /** Chapter style heading level for page numbering (w:pgNumType w:chapStyle) */\n chapStyle?: number;\n /** Chapter separator for page numbering (w:pgNumType w:chapSep) */\n chapSep?: ChapterSeparator;\n}\n\n/**\n * Represents a document section\n */\n/**\n * Section property change tracking (w:sectPrChange)\n * Per ECMA-376 Part 1 §17.13.5.32\n */\nexport interface SectPrChange {\n author: string;\n date: string;\n id: string;\n previousProperties: Record<string, any>;\n}\n\nexport class Section {\n private properties: SectionProperties;\n /** Tracking context for automatic change tracking */\n private trackingContext?: import('../tracking/TrackingContext').TrackingContext;\n /** Section property change tracking (w:sectPrChange) */\n private sectPrChange?: SectPrChange;\n\n /**\n * Creates a new section\n * @param properties Section properties\n */\n constructor(properties: SectionProperties = {}) {\n // Set defaults only where necessary\n this.properties = {\n pageSize: properties.pageSize || {\n width: PAGE_SIZES.LETTER.width,\n height: PAGE_SIZES.LETTER.height,\n orientation: 'portrait',\n },\n margins: properties.margins || {\n top: 1440, // 1 inch\n bottom: 1440,\n left: 1440,\n right: 1440,\n header: 720, // 0.5 inch\n footer: 720,\n },\n // Default to single column layout\n columns: properties.columns || {\n count: 1,\n },\n // Default to next page section break\n type: properties.type || 'nextPage',\n pageNumbering: properties.pageNumbering,\n headers: properties.headers,\n footers: properties.footers,\n titlePage: properties.titlePage,\n // Phase 4.5 - New properties\n verticalAlignment: properties.verticalAlignment,\n paperSource: properties.paperSource,\n textDirection: properties.textDirection,\n pageBorders: properties.pageBorders,\n };\n }\n\n /**\n * Sets the tracking context for automatic change tracking.\n * Called by Document when track changes is enabled.\n * @internal\n */\n _setTrackingContext(context: import('../tracking/TrackingContext').TrackingContext): void {\n this.trackingContext = context;\n }\n\n /**\n * Gets the section property change tracking info\n */\n getSectPrChange(): SectPrChange | undefined {\n return this.sectPrChange;\n }\n\n /**\n * Sets the section property change tracking info\n */\n setSectPrChange(change: SectPrChange | undefined): void {\n this.sectPrChange = change;\n }\n\n /**\n * Clears the section property change tracking\n */\n clearSectPrChange(): void {\n this.sectPrChange = undefined;\n }\n\n /**\n * Gets the section properties\n */\n getProperties(): SectionProperties {\n return { ...this.properties };\n }\n\n // ============================================================================\n // Individual Property Getters\n // ============================================================================\n\n /**\n * Gets the page size settings\n * @returns Page size object with width, height, and orientation, or undefined\n */\n getPageSize(): PageSize | undefined {\n return this.properties.pageSize ? { ...this.properties.pageSize } : undefined;\n }\n\n /**\n * Gets the page orientation\n * @returns 'portrait' or 'landscape', or undefined if not set\n */\n getOrientation(): PageOrientation | undefined {\n return this.properties.pageSize?.orientation;\n }\n\n /**\n * Gets the margin settings\n * @returns Margins object or undefined if not set\n */\n getMargins(): Margins | undefined {\n return this.properties.margins ? { ...this.properties.margins } : undefined;\n }\n\n /**\n * Gets the column layout settings\n * @returns Columns object or undefined if not set\n */\n getColumns(): Columns | undefined {\n return this.properties.columns ? { ...this.properties.columns } : undefined;\n }\n\n /**\n * Gets the section type (break type)\n * @returns Section type or undefined if not set\n */\n getSectionType(): SectionType | undefined {\n return this.properties.type;\n }\n\n /**\n * Gets the page numbering settings\n * @returns PageNumbering object or undefined if not set\n */\n getPageNumbering(): PageNumbering | undefined {\n return this.properties.pageNumbering ? { ...this.properties.pageNumbering } : undefined;\n }\n\n /**\n * Gets whether this section has a title page (different first page)\n * @returns true if title page is enabled, false otherwise\n */\n getTitlePage(): boolean {\n return this.properties.titlePage ?? false;\n }\n\n /**\n * Gets header references\n * @returns Object with default, first, and even header relationship IDs, or undefined\n */\n getHeaderReferences(): { default?: string; first?: string; even?: string } | undefined {\n return this.properties.headers ? { ...this.properties.headers } : undefined;\n }\n\n /**\n * Gets a specific header reference\n * @param type Header type (default, first, even)\n * @returns Relationship ID or undefined if not set\n */\n getHeaderReference(type: 'default' | 'first' | 'even'): string | undefined {\n return this.properties.headers?.[type];\n }\n\n /**\n * Gets footer references\n * @returns Object with default, first, and even footer relationship IDs, or undefined\n */\n getFooterReferences(): { default?: string; first?: string; even?: string } | undefined {\n return this.properties.footers ? { ...this.properties.footers } : undefined;\n }\n\n /**\n * Gets a specific footer reference\n * @param type Footer type (default, first, even)\n * @returns Relationship ID or undefined if not set\n */\n getFooterReference(type: 'default' | 'first' | 'even'): string | undefined {\n return this.properties.footers?.[type];\n }\n\n /**\n * Gets the vertical page alignment\n * @returns Vertical alignment or undefined if not set\n */\n getVerticalAlignment(): VerticalAlignment | undefined {\n return this.properties.verticalAlignment;\n }\n\n /**\n * Gets the paper source (printer tray) settings\n * @returns PaperSource object or undefined if not set\n */\n getPaperSource(): PaperSource | undefined {\n return this.properties.paperSource ? { ...this.properties.paperSource } : undefined;\n }\n\n /**\n * Gets whether column separator is enabled\n * @returns true if separator is enabled, false otherwise\n */\n getColumnSeparator(): boolean {\n return this.properties.columns?.separator ?? false;\n }\n\n /**\n * Gets custom column widths\n * @returns Array of column widths in twips, or undefined if not set\n */\n getColumnWidths(): number[] | undefined {\n return this.properties.columns?.columnWidths\n ? [...this.properties.columns.columnWidths]\n : undefined;\n }\n\n /**\n * Gets the text direction\n * @returns Text direction or undefined if not set\n */\n getTextDirection(): TextDirection | undefined {\n return this.properties.textDirection;\n }\n\n /**\n * Gets whether the section is bidirectional (RTL)\n * @returns true if bidi is enabled, false otherwise\n */\n getBidi(): boolean {\n return this.properties.bidi ?? false;\n }\n\n /**\n * Gets whether RTL gutter is enabled (gutter on right side)\n * @returns true if RTL gutter is enabled, false otherwise\n */\n getRtlGutter(): boolean {\n return this.properties.rtlGutter ?? false;\n }\n\n /**\n * Gets the document grid settings\n * @returns DocumentGrid object or undefined if not set\n */\n getDocGrid(): DocumentGrid | undefined {\n return this.properties.docGrid ? { ...this.properties.docGrid } : undefined;\n }\n\n // ============================================================================\n // Setters\n // ============================================================================\n\n /**\n * Sets page size\n * @param width Width in twips\n * @param height Height in twips\n * @param orientation Page orientation\n */\n setPageSize(width: number, height: number, orientation: PageOrientation = 'portrait'): this {\n const prev = this.properties.pageSize ? { ...this.properties.pageSize } : undefined;\n this.properties.pageSize = { width, height, orientation };\n if (this.trackingContext?.isEnabled()) {\n this.trackingContext.trackSectionChange(this, 'pageSize', prev, this.properties.pageSize);\n }\n return this;\n }\n\n /**\n * Sets page orientation\n * @param orientation Page orientation\n */\n setOrientation(orientation: PageOrientation): this {\n const prev = this.properties.pageSize?.orientation;\n if (!this.properties.pageSize) {\n this.properties.pageSize = {\n width: PAGE_SIZES.LETTER.width,\n height: PAGE_SIZES.LETTER.height,\n };\n }\n this.properties.pageSize.orientation = orientation;\n\n // Swap width/height for landscape\n if (\n orientation === 'landscape' &&\n this.properties.pageSize.width < this.properties.pageSize.height\n ) {\n const temp = this.properties.pageSize.width;\n this.properties.pageSize.width = this.properties.pageSize.height;\n this.properties.pageSize.height = temp;\n }\n\n if (this.trackingContext?.isEnabled() && prev !== orientation) {\n this.trackingContext.trackSectionChange(this, 'orientation', prev, orientation);\n }\n return this;\n }\n\n /**\n * Sets margins\n * @param margins Margin properties\n */\n setMargins(margins: Margins): this {\n const prev = this.properties.margins ? { ...this.properties.margins } : undefined;\n const existing = this.properties.margins;\n this.properties.margins = {\n top: margins.top,\n bottom: margins.bottom,\n left: margins.left,\n right: margins.right,\n header: margins.header ?? existing?.header ?? 720,\n footer: margins.footer ?? existing?.footer ?? 720,\n gutter: margins.gutter ?? existing?.gutter,\n };\n if (this.trackingContext?.isEnabled()) {\n this.trackingContext.trackSectionChange(this, 'margins', prev, this.properties.margins);\n }\n return this;\n }\n\n /**\n * Sets column layout\n * @param count Number of columns\n * @param space Space between columns in twips\n */\n setColumns(count: number, space = 720): this {\n const prev = this.properties.columns ? { ...this.properties.columns } : undefined;\n this.properties.columns = {\n count,\n space,\n equalWidth: true,\n };\n if (this.trackingContext?.isEnabled()) {\n this.trackingContext.trackSectionChange(this, 'columns', prev, this.properties.columns);\n }\n return this;\n }\n\n /**\n * Sets section type\n * @param type Section break type\n */\n setSectionType(type: SectionType): this {\n const prev = this.properties.type;\n this.properties.type = type;\n if (this.trackingContext?.isEnabled() && prev !== type) {\n this.trackingContext.trackSectionChange(this, 'type', prev, type);\n }\n return this;\n }\n\n /**\n * Sets page numbering\n * @param start Starting page number\n * @param format Number format\n */\n setPageNumbering(start?: number, format?: PageNumberFormat): this {\n const prev = this.properties.pageNumbering ? { ...this.properties.pageNumbering } : undefined;\n this.properties.pageNumbering = { start, format };\n if (this.trackingContext?.isEnabled()) {\n this.trackingContext.trackSectionChange(\n this,\n 'pageNumbering',\n prev,\n this.properties.pageNumbering\n );\n }\n return this;\n }\n\n /**\n * Sets title page flag (different first page)\n * @param titlePage Whether this section has a different first page\n */\n setTitlePage(titlePage = true): this {\n const prev = this.properties.titlePage;\n this.properties.titlePage = titlePage;\n if (this.trackingContext?.isEnabled() && prev !== titlePage) {\n this.trackingContext.trackSectionChange(this, 'titlePage', prev, titlePage);\n }\n return this;\n }\n\n /**\n * Sets header reference\n * @param type Header type (default, first, even)\n * @param rId Relationship ID\n */\n setHeaderReference(type: 'default' | 'first' | 'even', rId: string): this {\n const prev = this.properties.headers?.[type];\n if (!this.properties.headers) {\n this.properties.headers = {};\n }\n this.properties.headers[type] = rId;\n if (this.trackingContext?.isEnabled() && prev !== rId) {\n this.trackingContext.trackSectionChange(this, `headerReference:${type}`, prev, rId);\n }\n return this;\n }\n\n /**\n * Sets footer reference\n * @param type Footer type (default, first, even)\n * @param rId Relationship ID\n */\n setFooterReference(type: 'default' | 'first' | 'even', rId: string): this {\n const prev = this.properties.footers?.[type];\n if (!this.properties.footers) {\n this.properties.footers = {};\n }\n this.properties.footers[type] = rId;\n if (this.trackingContext?.isEnabled() && prev !== rId) {\n this.trackingContext.trackSectionChange(this, `footerReference:${type}`, prev, rId);\n }\n return this;\n }\n\n /**\n * Sets vertical page alignment\n * Controls how content is vertically aligned on the page\n * @param alignment Vertical alignment (top, center, bottom, both=justified)\n */\n setVerticalAlignment(alignment: VerticalAlignment): this {\n const prev = this.properties.verticalAlignment;\n this.properties.verticalAlignment = alignment;\n if (this.trackingContext?.isEnabled() && prev !== alignment) {\n this.trackingContext.trackSectionChange(this, 'verticalAlignment', prev, alignment);\n }\n return this;\n }\n\n /**\n * Sets paper source (printer tray selection)\n * @param first First page tray number\n * @param other Other pages tray number\n */\n setPaperSource(first?: number, other?: number): this {\n const prev = this.properties.paperSource ? { ...this.properties.paperSource } : undefined;\n this.properties.paperSource = { first, other };\n if (this.trackingContext?.isEnabled()) {\n this.trackingContext.trackSectionChange(\n this,\n 'paperSource',\n prev,\n this.properties.paperSource\n );\n }\n return this;\n }\n\n /**\n * Sets column separator line\n * Shows a vertical line between columns\n * @param separator Whether to show column separator line\n */\n setColumnSeparator(separator = true): this {\n const prev = this.properties.columns?.separator;\n if (!this.properties.columns) {\n this.properties.columns = { count: 1 };\n }\n this.properties.columns.separator = separator;\n if (this.trackingContext?.isEnabled() && prev !== separator) {\n this.trackingContext.trackSectionChange(this, 'columnSeparator', prev, separator);\n }\n return this;\n }\n\n /**\n * Sets custom column widths (for unequal columns)\n * @param widths Array of column widths in twips\n */\n setColumnWidths(widths: number[]): this {\n const prev = this.properties.columns ? { ...this.properties.columns } : undefined;\n if (!this.properties.columns) {\n this.properties.columns = { count: widths.length };\n }\n this.properties.columns.columnWidths = widths;\n this.properties.columns.equalWidth = false;\n this.properties.columns.count = widths.length;\n if (this.trackingContext?.isEnabled()) {\n this.trackingContext.trackSectionChange(this, 'columns', prev, {\n ...this.properties.columns,\n });\n }\n return this;\n }\n\n /**\n * Sets text direction for the section\n * @param direction Text direction (ltr=left-to-right, rtl=right-to-left, tbRl=top-to-bottom-right-to-left, btLr=bottom-to-top-left-to-right)\n */\n setTextDirection(direction: TextDirection): this {\n const prev = this.properties.textDirection;\n this.properties.textDirection = direction;\n if (this.trackingContext?.isEnabled() && prev !== direction) {\n this.trackingContext.trackSectionChange(this, 'textDirection', prev, direction);\n }\n return this;\n }\n\n /**\n * Sets line numbering for the section\n * Per ECMA-376 Part 1, Section 17.6.8 (w:lnNumType)\n * @param options Line numbering configuration\n */\n setLineNumbering(options: LineNumbering): this {\n const prev = this.properties.lineNumbering ? { ...this.properties.lineNumbering } : undefined;\n this.properties.lineNumbering = { ...options };\n if (this.trackingContext?.isEnabled()) {\n this.trackingContext.trackSectionChange(\n this,\n 'lineNumbering',\n prev,\n this.properties.lineNumbering\n );\n }\n return this;\n }\n\n /**\n * Gets line numbering configuration\n * @returns Line numbering settings or undefined if not set\n */\n getLineNumbering(): LineNumbering | undefined {\n return this.properties.lineNumbering ? { ...this.properties.lineNumbering } : undefined;\n }\n\n /**\n * Clears line numbering for the section\n */\n clearLineNumbering(): this {\n this.properties.lineNumbering = undefined;\n return this;\n }\n\n /**\n * Sets section-level footnote properties\n * Per ECMA-376 Part 1 §17.11.6\n */\n setFootnoteProperties(props: NoteProperties): this {\n const prev = this.properties.footnotePr ? { ...this.properties.footnotePr } : undefined;\n this.properties.footnotePr = { ...props };\n if (this.trackingContext?.isEnabled()) {\n this.trackingContext.trackSectionChange(this, 'footnotePr', prev, this.properties.footnotePr);\n }\n return this;\n }\n\n /**\n * Sets section-level endnote properties\n * Per ECMA-376 Part 1 §17.11.7\n */\n setEndnoteProperties(props: NoteProperties): this {\n const prev = this.properties.endnotePr ? { ...this.properties.endnotePr } : undefined;\n this.properties.endnotePr = { ...props };\n if (this.trackingContext?.isEnabled()) {\n this.trackingContext.trackSectionChange(this, 'endnotePr', prev, this.properties.endnotePr);\n }\n return this;\n }\n\n /**\n * Sets whether endnotes are suppressed in this section\n * Per ECMA-376 Part 1 §17.6.14\n */\n setNoEndnote(noEndnote = true): this {\n const prev = this.properties.noEndnote;\n this.properties.noEndnote = noEndnote;\n if (this.trackingContext?.isEnabled() && prev !== noEndnote) {\n this.trackingContext.trackSectionChange(this, 'noEndnote', prev, noEndnote);\n }\n return this;\n }\n\n /**\n * Sets form protection for this section\n * Per ECMA-376 Part 1 §17.6.4\n */\n setFormProtection(formProt = true): this {\n const prev = this.properties.formProt;\n this.properties.formProt = formProt;\n if (this.trackingContext?.isEnabled() && prev !== formProt) {\n this.trackingContext.trackSectionChange(this, 'formProt', prev, formProt);\n }\n return this;\n }\n\n /**\n * Sets printer settings relationship ID\n * Per ECMA-376 Part 1 §17.6.6\n */\n setPrinterSettings(rId: string): this {\n const prev = this.properties.printerSettingsId;\n this.properties.printerSettingsId = rId;\n if (this.trackingContext?.isEnabled() && prev !== rId) {\n this.trackingContext.trackSectionChange(this, 'printerSettings', prev, rId);\n }\n return this;\n }\n\n /**\n * Sets chapter numbering for page numbers\n * Per ECMA-376 Part 1 §17.6.12\n * @param chapStyle - Heading level (1-9) to use for chapter numbering\n * @param chapSep - Separator between chapter and page number\n */\n setChapterNumbering(chapStyle: number, chapSep?: ChapterSeparator): this {\n const prevStyle = this.properties.chapStyle;\n const prevSep = this.properties.chapSep;\n this.properties.chapStyle = chapStyle;\n if (chapSep) this.properties.chapSep = chapSep;\n if (this.trackingContext?.isEnabled()) {\n this.trackingContext.trackSectionChange(\n this,\n 'chapterNumbering',\n { chapStyle: prevStyle, chapSep: prevSep },\n { chapStyle, chapSep: chapSep || prevSep }\n );\n }\n return this;\n }\n\n /**\n * Generates WordprocessingML XML for section properties\n */\n toXML(): XMLElement {\n const children: XMLElement[] = [];\n\n // Header references\n if (this.properties.headers) {\n if (this.properties.headers.first) {\n children.push(\n XMLBuilder.wSelf('headerReference', {\n 'w:type': 'first',\n 'r:id': this.properties.headers.first,\n })\n );\n }\n if (this.properties.headers.even) {\n children.push(\n XMLBuilder.wSelf('headerReference', {\n 'w:type': 'even',\n 'r:id': this.properties.headers.even,\n })\n );\n }\n if (this.properties.headers.default) {\n children.push(\n XMLBuilder.wSelf('headerReference', {\n 'w:type': 'default',\n 'r:id': this.properties.headers.default,\n })\n );\n }\n }\n\n // Footer references\n if (this.properties.footers) {\n if (this.properties.footers.first) {\n children.push(\n XMLBuilder.wSelf('footerReference', {\n 'w:type': 'first',\n 'r:id': this.properties.footers.first,\n })\n );\n }\n if (this.properties.footers.even) {\n children.push(\n XMLBuilder.wSelf('footerReference', {\n 'w:type': 'even',\n 'r:id': this.properties.footers.even,\n })\n );\n }\n if (this.properties.footers.default) {\n children.push(\n XMLBuilder.wSelf('footerReference', {\n 'w:type': 'default',\n 'r:id': this.properties.footers.default,\n })\n );\n }\n }\n\n // CT_SectPr element order per ECMA-376:\n // footnotePr → endnotePr → type → pgSz → pgMar → paperSrc → pgBorders →\n // lnNumType → pgNumType → cols → formProt → vAlign → noEndnote → titlePg →\n // textDirection → bidi → rtlGutter → docGrid → printerSettings → sectPrChange\n\n // Footnote properties (w:footnotePr)\n if (this.properties.footnotePr) {\n const fnChildren: XMLElement[] = [];\n if (this.properties.footnotePr.position) {\n fnChildren.push(XMLBuilder.wSelf('pos', { 'w:val': this.properties.footnotePr.position }));\n }\n if (this.properties.footnotePr.numberFormat) {\n fnChildren.push(\n XMLBuilder.wSelf('numFmt', { 'w:val': this.properties.footnotePr.numberFormat })\n );\n }\n if (this.properties.footnotePr.startNumber !== undefined) {\n fnChildren.push(\n XMLBuilder.wSelf('numStart', {\n 'w:val': this.properties.footnotePr.startNumber.toString(),\n })\n );\n }\n if (this.properties.footnotePr.restart) {\n fnChildren.push(\n XMLBuilder.wSelf('numRestart', { 'w:val': this.properties.footnotePr.restart })\n );\n }\n if (fnChildren.length > 0) {\n children.push(XMLBuilder.w('footnotePr', undefined, fnChildren));\n }\n }\n\n // Endnote properties (w:endnotePr)\n if (this.properties.endnotePr) {\n const enChildren: XMLElement[] = [];\n if (this.properties.endnotePr.position) {\n enChildren.push(XMLBuilder.wSelf('pos', { 'w:val': this.properties.endnotePr.position }));\n }\n if (this.properties.endnotePr.numberFormat) {\n enChildren.push(\n XMLBuilder.wSelf('numFmt', { 'w:val': this.properties.endnotePr.numberFormat })\n );\n }\n if (this.properties.endnotePr.startNumber !== undefined) {\n enChildren.push(\n XMLBuilder.wSelf('numStart', {\n 'w:val': this.properties.endnotePr.startNumber.toString(),\n })\n );\n }\n if (this.properties.endnotePr.restart) {\n enChildren.push(\n XMLBuilder.wSelf('numRestart', { 'w:val': this.properties.endnotePr.restart })\n );\n }\n if (enChildren.length > 0) {\n children.push(XMLBuilder.w('endnotePr', undefined, enChildren));\n }\n }\n\n // Section type\n if (this.properties.type) {\n children.push(XMLBuilder.wSelf('type', { 'w:val': this.properties.type }));\n }\n\n // Page size\n if (this.properties.pageSize) {\n const attrs: Record<string, string> = {\n 'w:w': this.properties.pageSize.width.toString(),\n 'w:h': this.properties.pageSize.height.toString(),\n };\n if (this.properties.pageSize.orientation === 'landscape') {\n attrs['w:orient'] = 'landscape';\n }\n children.push(XMLBuilder.wSelf('pgSz', attrs));\n }\n\n // Margins\n if (this.properties.margins) {\n const attrs: Record<string, string> = {\n 'w:top': this.properties.margins.top.toString(),\n 'w:right': this.properties.margins.right.toString(),\n 'w:bottom': this.properties.margins.bottom.toString(),\n 'w:left': this.properties.margins.left.toString(),\n };\n attrs['w:header'] = (this.properties.margins.header ?? 720).toString();\n attrs['w:footer'] = (this.properties.margins.footer ?? 720).toString();\n if (this.properties.margins.gutter !== undefined) {\n attrs['w:gutter'] = this.properties.margins.gutter.toString();\n }\n children.push(XMLBuilder.wSelf('pgMar', attrs));\n }\n\n // Paper source\n if (this.properties.paperSource) {\n const attrs: Record<string, string> = {};\n if (this.properties.paperSource.first !== undefined) {\n attrs['w:first'] = this.properties.paperSource.first.toString();\n }\n if (this.properties.paperSource.other !== undefined) {\n attrs['w:other'] = this.properties.paperSource.other.toString();\n }\n if (Object.keys(attrs).length > 0) {\n children.push(XMLBuilder.wSelf('paperSrc', attrs));\n }\n }\n\n // Page borders per ECMA-376 Part 1 §17.6.10\n if (this.properties.pageBorders) {\n const pgBorders = this.properties.pageBorders;\n const pgBordersAttrs: Record<string, string> = {};\n if (pgBorders.offsetFrom) pgBordersAttrs['w:offsetFrom'] = pgBorders.offsetFrom;\n if (pgBorders.display) pgBordersAttrs['w:display'] = pgBorders.display;\n if (pgBorders.zOrder) pgBordersAttrs['w:zOrder'] = pgBorders.zOrder;\n\n const borderChildren: XMLElement[] = [];\n const buildBorder = (side: string, def: PageBorderDef) => {\n const bAttrs: Record<string, string | number> = {};\n if (def.style) bAttrs['w:val'] = def.style;\n // ECMA-376 Part 1 §17.18.2: sz valid range 2-96 (eighths of a point)\n if (def.size !== undefined) bAttrs['w:sz'] = Math.max(2, Math.min(96, def.size));\n if (def.color) bAttrs['w:color'] = def.color;\n // ECMA-376 Part 1 §17.18.88: space valid range 0-31680 (points)\n if (def.space !== undefined) bAttrs['w:space'] = Math.max(0, Math.min(31680, def.space));\n if (def.shadow) bAttrs['w:shadow'] = '1';\n if (def.frame) bAttrs['w:frame'] = '1';\n if (def.themeColor) bAttrs['w:themeColor'] = def.themeColor;\n if (def.artId !== undefined) bAttrs['w:id'] = def.artId;\n borderChildren.push(XMLBuilder.wSelf(side, bAttrs));\n };\n\n if (pgBorders.top) buildBorder('top', pgBorders.top);\n if (pgBorders.left) buildBorder('left', pgBorders.left);\n if (pgBorders.bottom) buildBorder('bottom', pgBorders.bottom);\n if (pgBorders.right) buildBorder('right', pgBorders.right);\n\n children.push(XMLBuilder.w('pgBorders', pgBordersAttrs, borderChildren));\n }\n\n // Line numbering (w:lnNumType)\n if (this.properties.lineNumbering) {\n const attrs: Record<string, string> = {};\n if (this.properties.lineNumbering.countBy !== undefined) {\n attrs['w:countBy'] = this.properties.lineNumbering.countBy.toString();\n }\n if (this.properties.lineNumbering.start !== undefined) {\n attrs['w:start'] = this.properties.lineNumbering.start.toString();\n }\n if (this.properties.lineNumbering.distance !== undefined) {\n attrs['w:distance'] = this.properties.lineNumbering.distance.toString();\n }\n if (this.properties.lineNumbering.restart) {\n attrs['w:restart'] = this.properties.lineNumbering.restart;\n }\n if (Object.keys(attrs).length > 0) {\n children.push(XMLBuilder.wSelf('lnNumType', attrs));\n }\n }\n\n // Page numbering\n if (this.properties.pageNumbering || this.properties.chapStyle !== undefined) {\n const attrs: Record<string, string> = {};\n if (this.properties.pageNumbering?.start !== undefined) {\n attrs['w:start'] = this.properties.pageNumbering.start.toString();\n }\n if (this.properties.pageNumbering?.format) {\n attrs['w:fmt'] = this.properties.pageNumbering.format;\n }\n if (this.properties.chapStyle !== undefined) {\n attrs['w:chapStyle'] = this.properties.chapStyle.toString();\n }\n if (this.properties.chapSep) {\n attrs['w:chapSep'] = this.properties.chapSep;\n }\n if (Object.keys(attrs).length > 0) {\n children.push(XMLBuilder.wSelf('pgNumType', attrs));\n }\n }\n\n // Columns\n if (this.properties.columns) {\n const attrs: Record<string, string> = {\n 'w:num': this.properties.columns.count.toString(),\n };\n if (this.properties.columns.space !== undefined) {\n attrs['w:space'] = this.properties.columns.space.toString();\n }\n if (this.properties.columns.equalWidth !== undefined) {\n attrs['w:equalWidth'] = this.properties.columns.equalWidth ? '1' : '0';\n }\n if (this.properties.columns.separator !== undefined) {\n attrs['w:sep'] = this.properties.columns.separator ? '1' : '0';\n }\n\n const colChildren: XMLElement[] = [];\n if (this.properties.columns.columnWidths) {\n for (const width of this.properties.columns.columnWidths) {\n colChildren.push(XMLBuilder.wSelf('col', { 'w:w': width.toString() }));\n }\n }\n\n children.push(\n colChildren.length > 0\n ? XMLBuilder.w('cols', attrs, colChildren)\n : XMLBuilder.wSelf('cols', attrs)\n );\n }\n\n // Form protection (w:formProt)\n if (this.properties.formProt) {\n children.push(XMLBuilder.wSelf('formProt'));\n }\n\n // Vertical alignment\n if (this.properties.verticalAlignment) {\n children.push(XMLBuilder.wSelf('vAlign', { 'w:val': this.properties.verticalAlignment }));\n }\n\n // Suppress endnotes (w:noEndnote)\n if (this.properties.noEndnote) {\n children.push(XMLBuilder.wSelf('noEndnote'));\n }\n\n // Title page\n if (this.properties.titlePage) {\n children.push(XMLBuilder.wSelf('titlePg', { 'w:val': '1' }));\n }\n\n // Text direction (map to valid ST_TextDirection values per ECMA-376 §17.18.93)\n if (this.properties.textDirection) {\n const textDirMap: Record<string, string> = {\n ltr: 'lrTb',\n rtl: 'tbRl',\n tbRl: 'tbRl',\n btLr: 'btLr',\n lrTb: 'lrTb',\n lrTbV: 'lrTbV',\n tbRlV: 'tbRlV',\n tbLrV: 'tbLrV',\n };\n const val = textDirMap[this.properties.textDirection] || this.properties.textDirection;\n children.push(XMLBuilder.wSelf('textDirection', { 'w:val': val }));\n }\n\n // Bidirectional section (RTL)\n if (this.properties.bidi) {\n children.push(XMLBuilder.wSelf('bidi'));\n }\n\n // RTL gutter (gutter on right side)\n if (this.properties.rtlGutter) {\n children.push(XMLBuilder.wSelf('rtlGutter'));\n }\n\n // Document grid\n if (this.properties.docGrid) {\n const attrs: Record<string, string> = {};\n if (this.properties.docGrid.type) {\n attrs['w:type'] = this.properties.docGrid.type;\n }\n if (this.properties.docGrid.linePitch !== undefined) {\n attrs['w:linePitch'] = this.properties.docGrid.linePitch.toString();\n }\n if (this.properties.docGrid.charSpace !== undefined) {\n attrs['w:charSpace'] = this.properties.docGrid.charSpace.toString();\n }\n if (Object.keys(attrs).length > 0) {\n children.push(XMLBuilder.wSelf('docGrid', attrs));\n }\n }\n\n // Printer settings (w:printerSettings)\n if (this.properties.printerSettingsId) {\n children.push(\n XMLBuilder.wSelf('printerSettings', {\n 'r:id': this.properties.printerSettingsId,\n })\n );\n }\n\n // Add section property change (w:sectPrChange) per ECMA-376 Part 1 §17.13.5.32\n // Must be last child of w:sectPr\n if (this.sectPrChange) {\n const changeAttrs: Record<string, string | number> = {\n 'w:id': this.sectPrChange.id,\n 'w:author': this.sectPrChange.author,\n 'w:date': this.sectPrChange.date,\n };\n const prevChildren: XMLElement[] = [];\n const prev = this.sectPrChange.previousProperties;\n if (prev) {\n // Ordered per CT_SectPrBase:\n // type → pgSz → pgMar → lnNumType → pgNumType → cols → formProt → vAlign → titlePg → textDirection\n if (prev.type) {\n prevChildren.push(XMLBuilder.wSelf('type', { 'w:val': prev.type }));\n }\n if (prev.pageSize) {\n const pgSzAttrs: Record<string, string> = {\n 'w:w': prev.pageSize.width?.toString() || '12240',\n 'w:h': prev.pageSize.height?.toString() || '15840',\n };\n if (prev.pageSize.orientation === 'landscape') {\n pgSzAttrs['w:orient'] = 'landscape';\n }\n prevChildren.push(XMLBuilder.wSelf('pgSz', pgSzAttrs));\n }\n if (prev.margins) {\n const pgMarAttrs: Record<string, string> = {};\n if (prev.margins.top !== undefined) pgMarAttrs['w:top'] = prev.margins.top.toString();\n if (prev.margins.bottom !== undefined)\n pgMarAttrs['w:bottom'] = prev.margins.bottom.toString();\n if (prev.margins.left !== undefined) pgMarAttrs['w:left'] = prev.margins.left.toString();\n if (prev.margins.right !== undefined)\n pgMarAttrs['w:right'] = prev.margins.right.toString();\n if (prev.margins.header !== undefined)\n pgMarAttrs['w:header'] = prev.margins.header.toString();\n if (prev.margins.footer !== undefined)\n pgMarAttrs['w:footer'] = prev.margins.footer.toString();\n prevChildren.push(XMLBuilder.wSelf('pgMar', pgMarAttrs));\n }\n if (prev.lineNumbering) {\n const lnAttrs: Record<string, string> = {};\n if (prev.lineNumbering.countBy !== undefined)\n lnAttrs['w:countBy'] = prev.lineNumbering.countBy.toString();\n if (prev.lineNumbering.start !== undefined)\n lnAttrs['w:start'] = prev.lineNumbering.start.toString();\n if (prev.lineNumbering.restart) lnAttrs['w:restart'] = prev.lineNumbering.restart;\n if (prev.lineNumbering.distance !== undefined)\n lnAttrs['w:distance'] = prev.lineNumbering.distance.toString();\n if (Object.keys(lnAttrs).length > 0) {\n prevChildren.push(XMLBuilder.wSelf('lnNumType', lnAttrs));\n }\n }\n if (prev.pageNumbering) {\n const pnAttrs: Record<string, string> = {};\n if (prev.pageNumbering.start !== undefined)\n pnAttrs['w:start'] = prev.pageNumbering.start.toString();\n if (prev.pageNumbering.format) pnAttrs['w:fmt'] = prev.pageNumbering.format;\n if (Object.keys(pnAttrs).length > 0) {\n prevChildren.push(XMLBuilder.wSelf('pgNumType', pnAttrs));\n }\n }\n if (prev.columns) {\n const colAttrs: Record<string, string> = {\n 'w:num': prev.columns.count?.toString() || '1',\n };\n if (prev.columns.space !== undefined) colAttrs['w:space'] = prev.columns.space.toString();\n prevChildren.push(XMLBuilder.wSelf('cols', colAttrs));\n }\n if (prev.formProt) {\n prevChildren.push(XMLBuilder.wSelf('formProt'));\n }\n if (prev.verticalAlignment) {\n prevChildren.push(XMLBuilder.wSelf('vAlign', { 'w:val': prev.verticalAlignment }));\n }\n if (prev.titlePage) {\n prevChildren.push(XMLBuilder.wSelf('titlePg'));\n }\n if (prev.textDirection) {\n const tdMap: Record<string, string> = {\n ltr: 'lrTb',\n rtl: 'tbRl',\n tbRl: 'tbRl',\n btLr: 'btLr',\n lrTb: 'lrTb',\n lrTbV: 'lrTbV',\n tbRlV: 'tbRlV',\n tbLrV: 'tbLrV',\n };\n prevChildren.push(\n XMLBuilder.wSelf('textDirection', {\n 'w:val': tdMap[prev.textDirection] || prev.textDirection,\n })\n );\n }\n }\n const prevSectPr = XMLBuilder.w('sectPr', undefined, prevChildren);\n children.push(XMLBuilder.w('sectPrChange', changeAttrs, [prevSectPr]));\n }\n\n return XMLBuilder.w('sectPr', undefined, children);\n }\n\n /**\n * Creates a deep clone of this section\n * @returns New Section instance with copied properties\n */\n clone(): Section {\n // Deep clone all nested objects\n const clonedProperties: SectionProperties = {};\n\n if (this.properties.pageSize) {\n clonedProperties.pageSize = { ...this.properties.pageSize };\n }\n\n if (this.properties.margins) {\n clonedProperties.margins = { ...this.properties.margins };\n }\n\n if (this.properties.columns) {\n clonedProperties.columns = {\n ...this.properties.columns,\n columnWidths: this.properties.columns.columnWidths\n ? [...this.properties.columns.columnWidths]\n : undefined,\n };\n }\n\n if (this.properties.pageNumbering) {\n clonedProperties.pageNumbering = { ...this.properties.pageNumbering };\n }\n\n if (this.properties.headers) {\n clonedProperties.headers = { ...this.properties.headers };\n }\n\n if (this.properties.footers) {\n clonedProperties.footers = { ...this.properties.footers };\n }\n\n if (this.properties.paperSource) {\n clonedProperties.paperSource = { ...this.properties.paperSource };\n }\n\n if (this.properties.docGrid) {\n clonedProperties.docGrid = { ...this.properties.docGrid };\n }\n\n if (this.properties.lineNumbering) {\n clonedProperties.lineNumbering = { ...this.properties.lineNumbering };\n }\n\n // Copy primitive properties\n clonedProperties.type = this.properties.type;\n clonedProperties.titlePage = this.properties.titlePage;\n clonedProperties.verticalAlignment = this.properties.verticalAlignment;\n clonedProperties.textDirection = this.properties.textDirection;\n clonedProperties.bidi = this.properties.bidi;\n clonedProperties.rtlGutter = this.properties.rtlGutter;\n\n return new Section(clonedProperties);\n }\n\n /**\n * Creates a section with default properties\n */\n static create(properties?: SectionProperties): Section {\n return new Section(properties);\n }\n\n /**\n * Creates a letter-sized section (8.5\" x 11\")\n */\n static createLetter(): Section {\n return new Section({\n pageSize: {\n width: PAGE_SIZES.LETTER.width,\n height: PAGE_SIZES.LETTER.height,\n orientation: 'portrait',\n },\n });\n }\n\n /**\n * Creates an A4-sized section (21cm x 29.7cm)\n */\n static createA4(): Section {\n return new Section({\n pageSize: {\n width: PAGE_SIZES.A4.width,\n height: PAGE_SIZES.A4.height,\n orientation: 'portrait',\n },\n });\n }\n\n /**\n * Creates a landscape section\n * @param pageSize Page size (default: Letter)\n */\n static createLandscape(pageSize: 'letter' | 'a4' = 'letter'): Section {\n const size = pageSize === 'a4' ? PAGE_SIZES.A4 : PAGE_SIZES.LETTER;\n return new Section({\n pageSize: {\n width: size.height, // Swap for landscape\n height: size.width,\n orientation: 'landscape',\n },\n });\n }\n}\n"]}
1
+ {"version":3,"file":"Section.js","sourceRoot":"","sources":["../../src/elements/Section.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Section - Represents a document section with page setup properties\n *\n * Sections allow different page setups within a single document (margins, orientation, etc.)\n * Each section can have its own headers, footers, and page numbering.\n */\n\nimport { XMLBuilder, XMLElement } from '../xml/XMLBuilder';\nimport { PAGE_SIZES } from '../utils/units';\n\n/**\n * Page orientation\n */\nexport type PageOrientation = 'portrait' | 'landscape';\n\n/**\n * Section break type\n */\nexport type SectionType = 'nextPage' | 'continuous' | 'evenPage' | 'oddPage' | 'nextColumn';\n\n/**\n * Page numbering format\n */\n/**\n * Per ECMA-376 Part 1 §17.18.59 (ST_NumberFormat)\n * Comprehensive set of page number formats\n */\nexport type PageNumberFormat =\n | 'decimal'\n | 'lowerRoman'\n | 'upperRoman'\n | 'lowerLetter'\n | 'upperLetter'\n | 'ordinal'\n | 'cardinalText'\n | 'ordinalText'\n | 'hex'\n | 'chicago'\n | 'decimalZero'\n | 'decimalEnclosedCircle'\n | 'decimalEnclosedFullstop'\n | 'decimalEnclosedParen'\n | 'ideographDigital'\n | 'ideographTraditional'\n | 'ideographLegalTraditional'\n | 'ideographEnclosedCircle'\n | 'ideographZodiac'\n | 'ideographZodiacTraditional'\n | 'chineseCounting'\n | 'chineseCountingThousand'\n | 'chineseLegalSimplified'\n | 'japaneseCounting'\n | 'japaneseDigitalTenThousand'\n | 'japaneseLegal'\n | 'koreanCounting'\n | 'koreanDigital'\n | 'koreanDigital2'\n | 'koreanLegal'\n | 'taiwaneseCounting'\n | 'taiwaneseCountingThousand'\n | 'taiwaneseDigital'\n | 'aiueo'\n | 'aiueoFullWidth'\n | 'iroha'\n | 'irohaFullWidth'\n | 'arabicAbjad'\n | 'arabicAlpha'\n | 'hebrew1'\n | 'hebrew2'\n | 'hindiConsonants'\n | 'hindiCounting'\n | 'hindiNumbers'\n | 'hindiVowels'\n | 'thaiCounting'\n | 'thaiLetters'\n | 'thaiNumbers'\n | 'vietnameseCounting'\n | 'russianLower'\n | 'russianUpper'\n | 'numberInDash'\n | 'dollarText'\n | 'bullet'\n | 'bahtText'\n | 'ganada'\n | 'chosung'\n | 'none'\n | string; // Allow any format string for forward compatibility\n\n/**\n * Page size properties\n */\nexport interface PageSize {\n /** Width in twips */\n width: number;\n /** Height in twips */\n height: number;\n /** Orientation */\n orientation?: PageOrientation;\n}\n\n/**\n * Margin properties\n */\nexport interface Margins {\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 /** Header distance from top in twips */\n header?: number;\n /** Footer distance from bottom in twips */\n footer?: number;\n /** Gutter margin in twips */\n gutter?: number;\n}\n\n/**\n * Column properties\n */\nexport interface Columns {\n /** Number of columns */\n count: number;\n /** Space between columns in twips */\n space?: number;\n /** Equal column widths */\n equalWidth?: boolean;\n /** Show column separator line */\n separator?: boolean;\n /** Individual column widths (for unequal columns) in twips */\n columnWidths?: number[];\n}\n\n/**\n * Page numbering properties\n */\nexport interface PageNumbering {\n /** Starting page number */\n start?: number;\n /** Number format */\n format?: PageNumberFormat;\n}\n\n/**\n * Paper source (printer tray) properties\n */\nexport interface PaperSource {\n /** First page tray number */\n first?: number;\n /** Other pages tray number */\n other?: number;\n}\n\n/**\n * Vertical page alignment\n */\nexport type VerticalAlignment = 'top' | 'center' | 'bottom' | 'both';\n\n/**\n * Text direction\n */\nexport type TextDirection = 'ltr' | 'rtl' | 'tbRl' | 'btLr';\n\n/**\n * Document grid type for East Asian typography\n */\nexport type DocumentGridType = 'default' | 'lines' | 'linesAndChars' | 'snapToChars';\n\n/**\n * Document grid properties\n */\nexport interface DocumentGrid {\n /** Grid type */\n type?: DocumentGridType;\n /** Lines per page */\n linePitch?: number;\n /** Characters per line */\n charSpace?: number;\n}\n\n/**\n * Line numbering restart mode\n */\nexport type LineNumberingRestart = 'newPage' | 'newSection' | 'continuous';\n\n/**\n * Line numbering properties\n * Per ECMA-376 Part 1, Section 17.6.8 (w:lnNumType element)\n */\nexport interface LineNumbering {\n /** Display line number every N lines (countBy attribute) */\n countBy?: number;\n /** Starting line number */\n start?: number;\n /** Distance from text margin in twips */\n distance?: number;\n /** When to restart line numbering */\n restart?: LineNumberingRestart;\n}\n\n/**\n * Footnote/endnote position\n * Per ECMA-376 Part 1 §17.11.6 and §17.11.7\n */\nexport type NotePosition = 'pageBottom' | 'beneathText' | 'sectEnd' | 'docEnd';\n\n/**\n * Note numbering restart mode\n */\nexport type NoteNumberRestart = 'continuous' | 'eachSect' | 'eachPage';\n\n/**\n * Chapter separator character for page numbering\n * Per ECMA-376 Part 1 §17.18.5\n */\nexport type ChapterSeparator = 'colon' | 'emDash' | 'enDash' | 'hyphen' | 'period';\n\n/**\n * Footnote/endnote section-level properties\n */\nexport interface NoteProperties {\n /** Note positioning */\n position?: NotePosition;\n /** Number format */\n numberFormat?: PageNumberFormat;\n /** Starting number */\n startNumber?: number;\n /** Restart numbering mode */\n restart?: NoteNumberRestart;\n}\n\n/**\n * Page border definition for a single side\n * Per ECMA-376 Part 1 §17.6.10\n */\nexport interface PageBorderDef {\n /** Border style (single, double, dashed, etc.) */\n style?: string;\n /** Border size in eighths of a point */\n size?: number;\n /** Border color in hex format (without #) */\n color?: string;\n /** Space between border and page edge/text in points */\n space?: number;\n /** Whether to show shadow */\n shadow?: boolean;\n /** Whether to include frame around page */\n frame?: boolean;\n /** Theme color reference */\n themeColor?: string;\n /** Art border ID (for decorative borders) */\n artId?: number;\n}\n\n/**\n * Page borders configuration\n * Per ECMA-376 Part 1 §17.6.10\n */\nexport interface PageBorders {\n /** Top page border */\n top?: PageBorderDef;\n /** Bottom page border */\n bottom?: PageBorderDef;\n /** Left page border */\n left?: PageBorderDef;\n /** Right page border */\n right?: PageBorderDef;\n /** Whether border is measured from page edge or text edge */\n offsetFrom?: 'page' | 'text';\n /** Display on all pages, first page only, or not first page */\n display?: 'allPages' | 'firstPage' | 'notFirstPage';\n /** Z-ordering relative to text */\n zOrder?: 'front' | 'back';\n}\n\n/**\n * Section properties\n */\nexport interface SectionProperties {\n /** Page size */\n pageSize?: PageSize;\n /** Margins */\n margins?: Margins;\n /** Column layout */\n columns?: Columns;\n /** Section break type */\n type?: SectionType;\n /** Page numbering */\n pageNumbering?: PageNumbering;\n /** Header reference IDs */\n headers?: {\n default?: string; // rId for default header\n first?: string; // rId for first page header\n even?: string; // rId for even page header\n };\n /** Footer reference IDs */\n footers?: {\n default?: string; // rId for default footer\n first?: string; // rId for first page footer\n even?: string; // rId for even page footer\n };\n /** Title page (different first page) */\n titlePage?: boolean;\n /** Vertical page alignment */\n verticalAlignment?: VerticalAlignment;\n /** Paper source (printer tray) */\n paperSource?: PaperSource;\n /** Text direction (LTR/RTL support) */\n textDirection?: TextDirection;\n /** Right-to-left section layout */\n bidi?: boolean;\n /** Gutter on right side (for RTL) */\n rtlGutter?: boolean;\n /** Document grid for snapping text to grid */\n docGrid?: DocumentGrid;\n /** Line numbering configuration */\n lineNumbering?: LineNumbering;\n /** Section-level footnote properties (w:footnotePr) */\n footnotePr?: NoteProperties;\n /** Section-level endnote properties (w:endnotePr) */\n endnotePr?: NoteProperties;\n /** Suppress endnotes in this section (w:noEndnote) */\n noEndnote?: boolean;\n /** Form protection for this section (w:formProt) */\n formProt?: boolean;\n /** Page borders per ECMA-376 Part 1 §17.6.10 */\n pageBorders?: PageBorders;\n /** Printer settings relationship ID (w:printerSettings r:id) */\n printerSettingsId?: string;\n /** Chapter style heading level for page numbering (w:pgNumType w:chapStyle) */\n chapStyle?: number;\n /** Chapter separator for page numbering (w:pgNumType w:chapSep) */\n chapSep?: ChapterSeparator;\n}\n\n/**\n * Represents a document section\n */\n/**\n * Section property change tracking (w:sectPrChange)\n * Per ECMA-376 Part 1 §17.13.5.32\n */\nexport interface SectPrChange {\n author: string;\n date: string;\n id: string;\n previousProperties: Record<string, any>;\n}\n\nexport class Section {\n private properties: SectionProperties;\n /** Tracking context for automatic change tracking */\n private trackingContext?: import('../tracking/TrackingContext').TrackingContext;\n /** Section property change tracking (w:sectPrChange) */\n private sectPrChange?: SectPrChange;\n\n /**\n * Creates a new section\n * @param properties Section properties\n */\n constructor(properties: SectionProperties = {}) {\n // Set defaults only where necessary\n this.properties = {\n pageSize: properties.pageSize || {\n width: PAGE_SIZES.LETTER.width,\n height: PAGE_SIZES.LETTER.height,\n orientation: 'portrait',\n },\n margins: properties.margins || {\n top: 1440, // 1 inch\n bottom: 1440,\n left: 1440,\n right: 1440,\n header: 720, // 0.5 inch\n footer: 720,\n },\n // Default to single column layout\n columns: properties.columns || {\n count: 1,\n },\n // Default to next page section break\n type: properties.type || 'nextPage',\n pageNumbering: properties.pageNumbering,\n headers: properties.headers,\n footers: properties.footers,\n titlePage: properties.titlePage,\n // Phase 4.5 - New properties\n verticalAlignment: properties.verticalAlignment,\n paperSource: properties.paperSource,\n textDirection: properties.textDirection,\n pageBorders: properties.pageBorders,\n };\n }\n\n /**\n * Sets the tracking context for automatic change tracking.\n * Called by Document when track changes is enabled.\n * @internal\n */\n _setTrackingContext(context: import('../tracking/TrackingContext').TrackingContext): void {\n this.trackingContext = context;\n }\n\n /**\n * Gets the section property change tracking info\n */\n getSectPrChange(): SectPrChange | undefined {\n return this.sectPrChange;\n }\n\n /**\n * Sets the section property change tracking info\n */\n setSectPrChange(change: SectPrChange | undefined): void {\n this.sectPrChange = change;\n }\n\n /**\n * Clears the section property change tracking\n */\n clearSectPrChange(): void {\n this.sectPrChange = undefined;\n }\n\n /**\n * Gets the section properties\n */\n getProperties(): SectionProperties {\n return { ...this.properties };\n }\n\n // ============================================================================\n // Individual Property Getters\n // ============================================================================\n\n /**\n * Gets the page size settings\n * @returns Page size object with width, height, and orientation, or undefined\n */\n getPageSize(): PageSize | undefined {\n return this.properties.pageSize ? { ...this.properties.pageSize } : undefined;\n }\n\n /**\n * Gets the page orientation\n * @returns 'portrait' or 'landscape', or undefined if not set\n */\n getOrientation(): PageOrientation | undefined {\n return this.properties.pageSize?.orientation;\n }\n\n /**\n * Gets the margin settings\n * @returns Margins object or undefined if not set\n */\n getMargins(): Margins | undefined {\n return this.properties.margins ? { ...this.properties.margins } : undefined;\n }\n\n /**\n * Gets the column layout settings\n * @returns Columns object or undefined if not set\n */\n getColumns(): Columns | undefined {\n return this.properties.columns ? { ...this.properties.columns } : undefined;\n }\n\n /**\n * Gets the section type (break type)\n * @returns Section type or undefined if not set\n */\n getSectionType(): SectionType | undefined {\n return this.properties.type;\n }\n\n /**\n * Gets the page numbering settings\n * @returns PageNumbering object or undefined if not set\n */\n getPageNumbering(): PageNumbering | undefined {\n return this.properties.pageNumbering ? { ...this.properties.pageNumbering } : undefined;\n }\n\n /**\n * Gets whether this section has a title page (different first page)\n * @returns true if title page is enabled, false otherwise\n */\n getTitlePage(): boolean {\n return this.properties.titlePage ?? false;\n }\n\n /**\n * Gets header references\n * @returns Object with default, first, and even header relationship IDs, or undefined\n */\n getHeaderReferences(): { default?: string; first?: string; even?: string } | undefined {\n return this.properties.headers ? { ...this.properties.headers } : undefined;\n }\n\n /**\n * Gets a specific header reference\n * @param type Header type (default, first, even)\n * @returns Relationship ID or undefined if not set\n */\n getHeaderReference(type: 'default' | 'first' | 'even'): string | undefined {\n return this.properties.headers?.[type];\n }\n\n /**\n * Gets footer references\n * @returns Object with default, first, and even footer relationship IDs, or undefined\n */\n getFooterReferences(): { default?: string; first?: string; even?: string } | undefined {\n return this.properties.footers ? { ...this.properties.footers } : undefined;\n }\n\n /**\n * Gets a specific footer reference\n * @param type Footer type (default, first, even)\n * @returns Relationship ID or undefined if not set\n */\n getFooterReference(type: 'default' | 'first' | 'even'): string | undefined {\n return this.properties.footers?.[type];\n }\n\n /**\n * Gets the vertical page alignment\n * @returns Vertical alignment or undefined if not set\n */\n getVerticalAlignment(): VerticalAlignment | undefined {\n return this.properties.verticalAlignment;\n }\n\n /**\n * Gets the paper source (printer tray) settings\n * @returns PaperSource object or undefined if not set\n */\n getPaperSource(): PaperSource | undefined {\n return this.properties.paperSource ? { ...this.properties.paperSource } : undefined;\n }\n\n /**\n * Gets whether column separator is enabled\n * @returns true if separator is enabled, false otherwise\n */\n getColumnSeparator(): boolean {\n return this.properties.columns?.separator ?? false;\n }\n\n /**\n * Gets custom column widths\n * @returns Array of column widths in twips, or undefined if not set\n */\n getColumnWidths(): number[] | undefined {\n return this.properties.columns?.columnWidths\n ? [...this.properties.columns.columnWidths]\n : undefined;\n }\n\n /**\n * Gets the text direction\n * @returns Text direction or undefined if not set\n */\n getTextDirection(): TextDirection | undefined {\n return this.properties.textDirection;\n }\n\n /**\n * Gets whether the section is bidirectional (RTL)\n * @returns true if bidi is enabled, false otherwise\n */\n getBidi(): boolean {\n return this.properties.bidi ?? false;\n }\n\n /**\n * Gets whether RTL gutter is enabled (gutter on right side)\n * @returns true if RTL gutter is enabled, false otherwise\n */\n getRtlGutter(): boolean {\n return this.properties.rtlGutter ?? false;\n }\n\n /**\n * Gets the document grid settings\n * @returns DocumentGrid object or undefined if not set\n */\n getDocGrid(): DocumentGrid | undefined {\n return this.properties.docGrid ? { ...this.properties.docGrid } : undefined;\n }\n\n // ============================================================================\n // Setters\n // ============================================================================\n\n /**\n * Sets page size\n * @param width Width in twips\n * @param height Height in twips\n * @param orientation Page orientation\n */\n setPageSize(width: number, height: number, orientation: PageOrientation = 'portrait'): this {\n const prev = this.properties.pageSize ? { ...this.properties.pageSize } : undefined;\n this.properties.pageSize = { width, height, orientation };\n if (this.trackingContext?.isEnabled()) {\n this.trackingContext.trackSectionChange(this, 'pageSize', prev, this.properties.pageSize);\n }\n return this;\n }\n\n /**\n * Sets page orientation\n * @param orientation Page orientation\n */\n setOrientation(orientation: PageOrientation): this {\n const prevOrientation = this.properties.pageSize?.orientation;\n // Capture full pageSize BEFORE mutation for tracking\n const prevPageSize = this.properties.pageSize ? { ...this.properties.pageSize } : undefined;\n if (!this.properties.pageSize) {\n this.properties.pageSize = {\n width: PAGE_SIZES.LETTER.width,\n height: PAGE_SIZES.LETTER.height,\n };\n }\n this.properties.pageSize.orientation = orientation;\n\n // Swap width/height for landscape\n if (\n orientation === 'landscape' &&\n this.properties.pageSize.width < this.properties.pageSize.height\n ) {\n const temp = this.properties.pageSize.width;\n this.properties.pageSize.width = this.properties.pageSize.height;\n this.properties.pageSize.height = temp;\n }\n\n if (this.trackingContext?.isEnabled() && prevOrientation !== orientation) {\n // Track the full pageSize change (not just orientation) since width/height are swapped\n this.trackingContext.trackSectionChange(this, 'pageSize', prevPageSize, {\n ...this.properties.pageSize,\n });\n }\n return this;\n }\n\n /**\n * Sets margins\n * @param margins Margin properties\n */\n setMargins(margins: Margins): this {\n const prev = this.properties.margins ? { ...this.properties.margins } : undefined;\n const existing = this.properties.margins;\n this.properties.margins = {\n top: margins.top,\n bottom: margins.bottom,\n left: margins.left,\n right: margins.right,\n header: margins.header ?? existing?.header ?? 720,\n footer: margins.footer ?? existing?.footer ?? 720,\n gutter: margins.gutter ?? existing?.gutter,\n };\n if (this.trackingContext?.isEnabled()) {\n this.trackingContext.trackSectionChange(this, 'margins', prev, this.properties.margins);\n }\n return this;\n }\n\n /**\n * Sets column layout\n * @param count Number of columns\n * @param space Space between columns in twips\n */\n setColumns(count: number, space = 720): this {\n const prev = this.properties.columns ? { ...this.properties.columns } : undefined;\n this.properties.columns = {\n count,\n space,\n equalWidth: true,\n };\n if (this.trackingContext?.isEnabled()) {\n this.trackingContext.trackSectionChange(this, 'columns', prev, this.properties.columns);\n }\n return this;\n }\n\n /**\n * Sets section type\n * @param type Section break type\n */\n setSectionType(type: SectionType): this {\n const prev = this.properties.type;\n this.properties.type = type;\n if (this.trackingContext?.isEnabled() && prev !== type) {\n this.trackingContext.trackSectionChange(this, 'type', prev, type);\n }\n return this;\n }\n\n /**\n * Sets page numbering\n * @param start Starting page number\n * @param format Number format\n */\n setPageNumbering(start?: number, format?: PageNumberFormat): this {\n const prev = this.properties.pageNumbering ? { ...this.properties.pageNumbering } : undefined;\n this.properties.pageNumbering = { start, format };\n if (this.trackingContext?.isEnabled()) {\n this.trackingContext.trackSectionChange(\n this,\n 'pageNumbering',\n prev,\n this.properties.pageNumbering\n );\n }\n return this;\n }\n\n /**\n * Sets title page flag (different first page)\n * @param titlePage Whether this section has a different first page\n */\n setTitlePage(titlePage = true): this {\n const prev = this.properties.titlePage;\n this.properties.titlePage = titlePage;\n if (this.trackingContext?.isEnabled() && prev !== titlePage) {\n this.trackingContext.trackSectionChange(this, 'titlePage', prev, titlePage);\n }\n return this;\n }\n\n /**\n * Sets header reference\n * @param type Header type (default, first, even)\n * @param rId Relationship ID\n */\n setHeaderReference(type: 'default' | 'first' | 'even', rId: string): this {\n const prev = this.properties.headers?.[type];\n if (!this.properties.headers) {\n this.properties.headers = {};\n }\n this.properties.headers[type] = rId;\n if (this.trackingContext?.isEnabled() && prev !== rId) {\n this.trackingContext.trackSectionChange(this, `headerReference:${type}`, prev, rId);\n }\n return this;\n }\n\n /**\n * Sets footer reference\n * @param type Footer type (default, first, even)\n * @param rId Relationship ID\n */\n setFooterReference(type: 'default' | 'first' | 'even', rId: string): this {\n const prev = this.properties.footers?.[type];\n if (!this.properties.footers) {\n this.properties.footers = {};\n }\n this.properties.footers[type] = rId;\n if (this.trackingContext?.isEnabled() && prev !== rId) {\n this.trackingContext.trackSectionChange(this, `footerReference:${type}`, prev, rId);\n }\n return this;\n }\n\n /**\n * Sets vertical page alignment\n * Controls how content is vertically aligned on the page\n * @param alignment Vertical alignment (top, center, bottom, both=justified)\n */\n setVerticalAlignment(alignment: VerticalAlignment): this {\n const prev = this.properties.verticalAlignment;\n this.properties.verticalAlignment = alignment;\n if (this.trackingContext?.isEnabled() && prev !== alignment) {\n this.trackingContext.trackSectionChange(this, 'verticalAlignment', prev, alignment);\n }\n return this;\n }\n\n /**\n * Sets paper source (printer tray selection)\n * @param first First page tray number\n * @param other Other pages tray number\n */\n setPaperSource(first?: number, other?: number): this {\n const prev = this.properties.paperSource ? { ...this.properties.paperSource } : undefined;\n this.properties.paperSource = { first, other };\n if (this.trackingContext?.isEnabled()) {\n this.trackingContext.trackSectionChange(\n this,\n 'paperSource',\n prev,\n this.properties.paperSource\n );\n }\n return this;\n }\n\n /**\n * Sets column separator line\n * Shows a vertical line between columns\n * @param separator Whether to show column separator line\n */\n setColumnSeparator(separator = true): this {\n const prev = this.properties.columns?.separator;\n if (!this.properties.columns) {\n this.properties.columns = { count: 1 };\n }\n this.properties.columns.separator = separator;\n if (this.trackingContext?.isEnabled() && prev !== separator) {\n this.trackingContext.trackSectionChange(this, 'columnSeparator', prev, separator);\n }\n return this;\n }\n\n /**\n * Sets custom column widths (for unequal columns)\n * @param widths Array of column widths in twips\n */\n setColumnWidths(widths: number[]): this {\n const prev = this.properties.columns ? { ...this.properties.columns } : undefined;\n if (!this.properties.columns) {\n this.properties.columns = { count: widths.length };\n }\n this.properties.columns.columnWidths = widths;\n this.properties.columns.equalWidth = false;\n this.properties.columns.count = widths.length;\n if (this.trackingContext?.isEnabled()) {\n this.trackingContext.trackSectionChange(this, 'columns', prev, {\n ...this.properties.columns,\n });\n }\n return this;\n }\n\n /**\n * Sets text direction for the section\n * @param direction Text direction (ltr=left-to-right, rtl=right-to-left, tbRl=top-to-bottom-right-to-left, btLr=bottom-to-top-left-to-right)\n */\n setTextDirection(direction: TextDirection): this {\n const prev = this.properties.textDirection;\n this.properties.textDirection = direction;\n if (this.trackingContext?.isEnabled() && prev !== direction) {\n this.trackingContext.trackSectionChange(this, 'textDirection', prev, direction);\n }\n return this;\n }\n\n /**\n * Sets line numbering for the section\n * Per ECMA-376 Part 1, Section 17.6.8 (w:lnNumType)\n * @param options Line numbering configuration\n */\n setLineNumbering(options: LineNumbering): this {\n const prev = this.properties.lineNumbering ? { ...this.properties.lineNumbering } : undefined;\n this.properties.lineNumbering = { ...options };\n if (this.trackingContext?.isEnabled()) {\n this.trackingContext.trackSectionChange(\n this,\n 'lineNumbering',\n prev,\n this.properties.lineNumbering\n );\n }\n return this;\n }\n\n /**\n * Gets line numbering configuration\n * @returns Line numbering settings or undefined if not set\n */\n getLineNumbering(): LineNumbering | undefined {\n return this.properties.lineNumbering ? { ...this.properties.lineNumbering } : undefined;\n }\n\n /**\n * Clears line numbering for the section\n */\n clearLineNumbering(): this {\n this.properties.lineNumbering = undefined;\n return this;\n }\n\n /**\n * Sets section-level footnote properties\n * Per ECMA-376 Part 1 §17.11.6\n */\n setFootnoteProperties(props: NoteProperties): this {\n const prev = this.properties.footnotePr ? { ...this.properties.footnotePr } : undefined;\n this.properties.footnotePr = { ...props };\n if (this.trackingContext?.isEnabled()) {\n this.trackingContext.trackSectionChange(this, 'footnotePr', prev, this.properties.footnotePr);\n }\n return this;\n }\n\n /**\n * Sets section-level endnote properties\n * Per ECMA-376 Part 1 §17.11.7\n */\n setEndnoteProperties(props: NoteProperties): this {\n const prev = this.properties.endnotePr ? { ...this.properties.endnotePr } : undefined;\n this.properties.endnotePr = { ...props };\n if (this.trackingContext?.isEnabled()) {\n this.trackingContext.trackSectionChange(this, 'endnotePr', prev, this.properties.endnotePr);\n }\n return this;\n }\n\n /**\n * Sets whether endnotes are suppressed in this section\n * Per ECMA-376 Part 1 §17.6.14\n */\n setNoEndnote(noEndnote = true): this {\n const prev = this.properties.noEndnote;\n this.properties.noEndnote = noEndnote;\n if (this.trackingContext?.isEnabled() && prev !== noEndnote) {\n this.trackingContext.trackSectionChange(this, 'noEndnote', prev, noEndnote);\n }\n return this;\n }\n\n /**\n * Sets form protection for this section\n * Per ECMA-376 Part 1 §17.6.4\n */\n setFormProtection(formProt = true): this {\n const prev = this.properties.formProt;\n this.properties.formProt = formProt;\n if (this.trackingContext?.isEnabled() && prev !== formProt) {\n this.trackingContext.trackSectionChange(this, 'formProt', prev, formProt);\n }\n return this;\n }\n\n /**\n * Sets printer settings relationship ID\n * Per ECMA-376 Part 1 §17.6.6\n */\n setPrinterSettings(rId: string): this {\n const prev = this.properties.printerSettingsId;\n this.properties.printerSettingsId = rId;\n if (this.trackingContext?.isEnabled() && prev !== rId) {\n this.trackingContext.trackSectionChange(this, 'printerSettings', prev, rId);\n }\n return this;\n }\n\n /**\n * Sets chapter numbering for page numbers\n * Per ECMA-376 Part 1 §17.6.12\n * @param chapStyle - Heading level (1-9) to use for chapter numbering\n * @param chapSep - Separator between chapter and page number\n */\n setChapterNumbering(chapStyle: number, chapSep?: ChapterSeparator): this {\n const prevStyle = this.properties.chapStyle;\n const prevSep = this.properties.chapSep;\n this.properties.chapStyle = chapStyle;\n if (chapSep) this.properties.chapSep = chapSep;\n if (this.trackingContext?.isEnabled()) {\n this.trackingContext.trackSectionChange(\n this,\n 'chapterNumbering',\n { chapStyle: prevStyle, chapSep: prevSep },\n { chapStyle, chapSep: chapSep || prevSep }\n );\n }\n return this;\n }\n\n /**\n * Generates WordprocessingML XML for section properties\n */\n toXML(): XMLElement {\n const children: XMLElement[] = [];\n\n // Header references\n if (this.properties.headers) {\n if (this.properties.headers.first) {\n children.push(\n XMLBuilder.wSelf('headerReference', {\n 'w:type': 'first',\n 'r:id': this.properties.headers.first,\n })\n );\n }\n if (this.properties.headers.even) {\n children.push(\n XMLBuilder.wSelf('headerReference', {\n 'w:type': 'even',\n 'r:id': this.properties.headers.even,\n })\n );\n }\n if (this.properties.headers.default) {\n children.push(\n XMLBuilder.wSelf('headerReference', {\n 'w:type': 'default',\n 'r:id': this.properties.headers.default,\n })\n );\n }\n }\n\n // Footer references\n if (this.properties.footers) {\n if (this.properties.footers.first) {\n children.push(\n XMLBuilder.wSelf('footerReference', {\n 'w:type': 'first',\n 'r:id': this.properties.footers.first,\n })\n );\n }\n if (this.properties.footers.even) {\n children.push(\n XMLBuilder.wSelf('footerReference', {\n 'w:type': 'even',\n 'r:id': this.properties.footers.even,\n })\n );\n }\n if (this.properties.footers.default) {\n children.push(\n XMLBuilder.wSelf('footerReference', {\n 'w:type': 'default',\n 'r:id': this.properties.footers.default,\n })\n );\n }\n }\n\n // CT_SectPr element order per ECMA-376:\n // footnotePr → endnotePr → type → pgSz → pgMar → paperSrc → pgBorders →\n // lnNumType → pgNumType → cols → formProt → vAlign → noEndnote → titlePg →\n // textDirection → bidi → rtlGutter → docGrid → printerSettings → sectPrChange\n\n // Footnote properties (w:footnotePr)\n if (this.properties.footnotePr) {\n const fnChildren: XMLElement[] = [];\n if (this.properties.footnotePr.position) {\n fnChildren.push(XMLBuilder.wSelf('pos', { 'w:val': this.properties.footnotePr.position }));\n }\n if (this.properties.footnotePr.numberFormat) {\n fnChildren.push(\n XMLBuilder.wSelf('numFmt', { 'w:val': this.properties.footnotePr.numberFormat })\n );\n }\n if (this.properties.footnotePr.startNumber !== undefined) {\n fnChildren.push(\n XMLBuilder.wSelf('numStart', {\n 'w:val': this.properties.footnotePr.startNumber.toString(),\n })\n );\n }\n if (this.properties.footnotePr.restart) {\n fnChildren.push(\n XMLBuilder.wSelf('numRestart', { 'w:val': this.properties.footnotePr.restart })\n );\n }\n if (fnChildren.length > 0) {\n children.push(XMLBuilder.w('footnotePr', undefined, fnChildren));\n }\n }\n\n // Endnote properties (w:endnotePr)\n if (this.properties.endnotePr) {\n const enChildren: XMLElement[] = [];\n if (this.properties.endnotePr.position) {\n enChildren.push(XMLBuilder.wSelf('pos', { 'w:val': this.properties.endnotePr.position }));\n }\n if (this.properties.endnotePr.numberFormat) {\n enChildren.push(\n XMLBuilder.wSelf('numFmt', { 'w:val': this.properties.endnotePr.numberFormat })\n );\n }\n if (this.properties.endnotePr.startNumber !== undefined) {\n enChildren.push(\n XMLBuilder.wSelf('numStart', {\n 'w:val': this.properties.endnotePr.startNumber.toString(),\n })\n );\n }\n if (this.properties.endnotePr.restart) {\n enChildren.push(\n XMLBuilder.wSelf('numRestart', { 'w:val': this.properties.endnotePr.restart })\n );\n }\n if (enChildren.length > 0) {\n children.push(XMLBuilder.w('endnotePr', undefined, enChildren));\n }\n }\n\n // Section type\n if (this.properties.type) {\n children.push(XMLBuilder.wSelf('type', { 'w:val': this.properties.type }));\n }\n\n // Page size\n if (this.properties.pageSize) {\n const attrs: Record<string, string> = {\n 'w:w': this.properties.pageSize.width.toString(),\n 'w:h': this.properties.pageSize.height.toString(),\n };\n if (this.properties.pageSize.orientation === 'landscape') {\n attrs['w:orient'] = 'landscape';\n }\n children.push(XMLBuilder.wSelf('pgSz', attrs));\n }\n\n // Margins\n if (this.properties.margins) {\n const attrs: Record<string, string> = {\n 'w:top': this.properties.margins.top.toString(),\n 'w:right': this.properties.margins.right.toString(),\n 'w:bottom': this.properties.margins.bottom.toString(),\n 'w:left': this.properties.margins.left.toString(),\n };\n attrs['w:header'] = (this.properties.margins.header ?? 720).toString();\n attrs['w:footer'] = (this.properties.margins.footer ?? 720).toString();\n if (this.properties.margins.gutter !== undefined) {\n attrs['w:gutter'] = this.properties.margins.gutter.toString();\n }\n children.push(XMLBuilder.wSelf('pgMar', attrs));\n }\n\n // Paper source\n if (this.properties.paperSource) {\n const attrs: Record<string, string> = {};\n if (this.properties.paperSource.first !== undefined) {\n attrs['w:first'] = this.properties.paperSource.first.toString();\n }\n if (this.properties.paperSource.other !== undefined) {\n attrs['w:other'] = this.properties.paperSource.other.toString();\n }\n if (Object.keys(attrs).length > 0) {\n children.push(XMLBuilder.wSelf('paperSrc', attrs));\n }\n }\n\n // Page borders per ECMA-376 Part 1 §17.6.10\n if (this.properties.pageBorders) {\n const pgBorders = this.properties.pageBorders;\n const pgBordersAttrs: Record<string, string> = {};\n if (pgBorders.offsetFrom) pgBordersAttrs['w:offsetFrom'] = pgBorders.offsetFrom;\n if (pgBorders.display) pgBordersAttrs['w:display'] = pgBorders.display;\n if (pgBorders.zOrder) pgBordersAttrs['w:zOrder'] = pgBorders.zOrder;\n\n const borderChildren: XMLElement[] = [];\n const buildBorder = (side: string, def: PageBorderDef) => {\n const bAttrs: Record<string, string | number> = {};\n if (def.style) bAttrs['w:val'] = def.style;\n // ECMA-376 Part 1 §17.18.2: sz valid range 2-96 (eighths of a point)\n if (def.size !== undefined) bAttrs['w:sz'] = Math.max(2, Math.min(96, def.size));\n if (def.color) bAttrs['w:color'] = def.color;\n // ECMA-376 Part 1 §17.18.88: space valid range 0-31680 (points)\n if (def.space !== undefined) bAttrs['w:space'] = Math.max(0, Math.min(31680, def.space));\n if (def.shadow) bAttrs['w:shadow'] = '1';\n if (def.frame) bAttrs['w:frame'] = '1';\n if (def.themeColor) bAttrs['w:themeColor'] = def.themeColor;\n if (def.artId !== undefined) bAttrs['w:id'] = def.artId;\n borderChildren.push(XMLBuilder.wSelf(side, bAttrs));\n };\n\n if (pgBorders.top) buildBorder('top', pgBorders.top);\n if (pgBorders.left) buildBorder('left', pgBorders.left);\n if (pgBorders.bottom) buildBorder('bottom', pgBorders.bottom);\n if (pgBorders.right) buildBorder('right', pgBorders.right);\n\n children.push(XMLBuilder.w('pgBorders', pgBordersAttrs, borderChildren));\n }\n\n // Line numbering (w:lnNumType)\n if (this.properties.lineNumbering) {\n const attrs: Record<string, string> = {};\n if (this.properties.lineNumbering.countBy !== undefined) {\n attrs['w:countBy'] = this.properties.lineNumbering.countBy.toString();\n }\n if (this.properties.lineNumbering.start !== undefined) {\n attrs['w:start'] = this.properties.lineNumbering.start.toString();\n }\n if (this.properties.lineNumbering.distance !== undefined) {\n attrs['w:distance'] = this.properties.lineNumbering.distance.toString();\n }\n if (this.properties.lineNumbering.restart) {\n attrs['w:restart'] = this.properties.lineNumbering.restart;\n }\n if (Object.keys(attrs).length > 0) {\n children.push(XMLBuilder.wSelf('lnNumType', attrs));\n }\n }\n\n // Page numbering\n if (this.properties.pageNumbering || this.properties.chapStyle !== undefined) {\n const attrs: Record<string, string> = {};\n if (this.properties.pageNumbering?.start !== undefined) {\n attrs['w:start'] = this.properties.pageNumbering.start.toString();\n }\n if (this.properties.pageNumbering?.format) {\n attrs['w:fmt'] = this.properties.pageNumbering.format;\n }\n if (this.properties.chapStyle !== undefined) {\n attrs['w:chapStyle'] = this.properties.chapStyle.toString();\n }\n if (this.properties.chapSep) {\n attrs['w:chapSep'] = this.properties.chapSep;\n }\n if (Object.keys(attrs).length > 0) {\n children.push(XMLBuilder.wSelf('pgNumType', attrs));\n }\n }\n\n // Columns\n if (this.properties.columns) {\n const attrs: Record<string, string> = {\n 'w:num': this.properties.columns.count.toString(),\n };\n if (this.properties.columns.space !== undefined) {\n attrs['w:space'] = this.properties.columns.space.toString();\n }\n if (this.properties.columns.equalWidth !== undefined) {\n attrs['w:equalWidth'] = this.properties.columns.equalWidth ? '1' : '0';\n }\n if (this.properties.columns.separator !== undefined) {\n attrs['w:sep'] = this.properties.columns.separator ? '1' : '0';\n }\n\n const colChildren: XMLElement[] = [];\n if (this.properties.columns.columnWidths) {\n for (const width of this.properties.columns.columnWidths) {\n colChildren.push(XMLBuilder.wSelf('col', { 'w:w': width.toString() }));\n }\n }\n\n children.push(\n colChildren.length > 0\n ? XMLBuilder.w('cols', attrs, colChildren)\n : XMLBuilder.wSelf('cols', attrs)\n );\n }\n\n // Form protection (w:formProt)\n if (this.properties.formProt) {\n children.push(XMLBuilder.wSelf('formProt'));\n }\n\n // Vertical alignment\n if (this.properties.verticalAlignment) {\n children.push(XMLBuilder.wSelf('vAlign', { 'w:val': this.properties.verticalAlignment }));\n }\n\n // Suppress endnotes (w:noEndnote)\n if (this.properties.noEndnote) {\n children.push(XMLBuilder.wSelf('noEndnote'));\n }\n\n // Title page\n if (this.properties.titlePage) {\n children.push(XMLBuilder.wSelf('titlePg', { 'w:val': '1' }));\n }\n\n // Text direction (map to valid ST_TextDirection values per ECMA-376 §17.18.93)\n if (this.properties.textDirection) {\n const textDirMap: Record<string, string> = {\n ltr: 'lrTb',\n rtl: 'tbRl',\n tbRl: 'tbRl',\n btLr: 'btLr',\n lrTb: 'lrTb',\n lrTbV: 'lrTbV',\n tbRlV: 'tbRlV',\n tbLrV: 'tbLrV',\n };\n const val = textDirMap[this.properties.textDirection] || this.properties.textDirection;\n children.push(XMLBuilder.wSelf('textDirection', { 'w:val': val }));\n }\n\n // Bidirectional section (RTL)\n if (this.properties.bidi) {\n children.push(XMLBuilder.wSelf('bidi'));\n }\n\n // RTL gutter (gutter on right side)\n if (this.properties.rtlGutter) {\n children.push(XMLBuilder.wSelf('rtlGutter'));\n }\n\n // Document grid\n if (this.properties.docGrid) {\n const attrs: Record<string, string> = {};\n if (this.properties.docGrid.type) {\n attrs['w:type'] = this.properties.docGrid.type;\n }\n if (this.properties.docGrid.linePitch !== undefined) {\n attrs['w:linePitch'] = this.properties.docGrid.linePitch.toString();\n }\n if (this.properties.docGrid.charSpace !== undefined) {\n attrs['w:charSpace'] = this.properties.docGrid.charSpace.toString();\n }\n if (Object.keys(attrs).length > 0) {\n children.push(XMLBuilder.wSelf('docGrid', attrs));\n }\n }\n\n // Printer settings (w:printerSettings)\n if (this.properties.printerSettingsId) {\n children.push(\n XMLBuilder.wSelf('printerSettings', {\n 'r:id': this.properties.printerSettingsId,\n })\n );\n }\n\n // Add section property change (w:sectPrChange) per ECMA-376 Part 1 §17.13.5.32\n // Must be last child of w:sectPr\n if (this.sectPrChange) {\n const changeAttrs: Record<string, string | number> = {\n 'w:id': this.sectPrChange.id,\n 'w:author': this.sectPrChange.author,\n 'w:date': this.sectPrChange.date,\n };\n const prevChildren: XMLElement[] = [];\n const prev = this.sectPrChange.previousProperties;\n if (prev) {\n // Ordered per CT_SectPrBase:\n // type → pgSz → pgMar → lnNumType → pgNumType → cols → formProt → vAlign → titlePg → textDirection\n if (prev.type) {\n prevChildren.push(XMLBuilder.wSelf('type', { 'w:val': prev.type }));\n }\n if (prev.pageSize) {\n const pgSzAttrs: Record<string, string> = {\n 'w:w': prev.pageSize.width?.toString() || '12240',\n 'w:h': prev.pageSize.height?.toString() || '15840',\n };\n if (prev.pageSize.orientation === 'landscape') {\n pgSzAttrs['w:orient'] = 'landscape';\n }\n prevChildren.push(XMLBuilder.wSelf('pgSz', pgSzAttrs));\n }\n if (prev.margins) {\n const pgMarAttrs: Record<string, string> = {};\n if (prev.margins.top !== undefined) pgMarAttrs['w:top'] = prev.margins.top.toString();\n if (prev.margins.bottom !== undefined)\n pgMarAttrs['w:bottom'] = prev.margins.bottom.toString();\n if (prev.margins.left !== undefined) pgMarAttrs['w:left'] = prev.margins.left.toString();\n if (prev.margins.right !== undefined)\n pgMarAttrs['w:right'] = prev.margins.right.toString();\n if (prev.margins.header !== undefined)\n pgMarAttrs['w:header'] = prev.margins.header.toString();\n if (prev.margins.footer !== undefined)\n pgMarAttrs['w:footer'] = prev.margins.footer.toString();\n prevChildren.push(XMLBuilder.wSelf('pgMar', pgMarAttrs));\n }\n if (prev.lineNumbering) {\n const lnAttrs: Record<string, string> = {};\n if (prev.lineNumbering.countBy !== undefined)\n lnAttrs['w:countBy'] = prev.lineNumbering.countBy.toString();\n if (prev.lineNumbering.start !== undefined)\n lnAttrs['w:start'] = prev.lineNumbering.start.toString();\n if (prev.lineNumbering.restart) lnAttrs['w:restart'] = prev.lineNumbering.restart;\n if (prev.lineNumbering.distance !== undefined)\n lnAttrs['w:distance'] = prev.lineNumbering.distance.toString();\n if (Object.keys(lnAttrs).length > 0) {\n prevChildren.push(XMLBuilder.wSelf('lnNumType', lnAttrs));\n }\n }\n if (prev.pageNumbering) {\n const pnAttrs: Record<string, string> = {};\n if (prev.pageNumbering.start !== undefined)\n pnAttrs['w:start'] = prev.pageNumbering.start.toString();\n if (prev.pageNumbering.format) pnAttrs['w:fmt'] = prev.pageNumbering.format;\n if (Object.keys(pnAttrs).length > 0) {\n prevChildren.push(XMLBuilder.wSelf('pgNumType', pnAttrs));\n }\n }\n if (prev.columns) {\n const colAttrs: Record<string, string> = {\n 'w:num': prev.columns.count?.toString() || '1',\n };\n if (prev.columns.space !== undefined) colAttrs['w:space'] = prev.columns.space.toString();\n prevChildren.push(XMLBuilder.wSelf('cols', colAttrs));\n }\n if (prev.formProt) {\n prevChildren.push(XMLBuilder.wSelf('formProt'));\n }\n if (prev.verticalAlignment) {\n prevChildren.push(XMLBuilder.wSelf('vAlign', { 'w:val': prev.verticalAlignment }));\n }\n if (prev.titlePage) {\n prevChildren.push(XMLBuilder.wSelf('titlePg'));\n }\n if (prev.textDirection) {\n const tdMap: Record<string, string> = {\n ltr: 'lrTb',\n rtl: 'tbRl',\n tbRl: 'tbRl',\n btLr: 'btLr',\n lrTb: 'lrTb',\n lrTbV: 'lrTbV',\n tbRlV: 'tbRlV',\n tbLrV: 'tbLrV',\n };\n prevChildren.push(\n XMLBuilder.wSelf('textDirection', {\n 'w:val': tdMap[prev.textDirection] || prev.textDirection,\n })\n );\n }\n if (prev.docGrid) {\n const dgAttrs: Record<string, string> = {};\n if (prev.docGrid.type) dgAttrs['w:type'] = prev.docGrid.type;\n if (prev.docGrid.linePitch !== undefined)\n dgAttrs['w:linePitch'] = prev.docGrid.linePitch.toString();\n if (prev.docGrid.charSpace !== undefined)\n dgAttrs['w:charSpace'] = prev.docGrid.charSpace.toString();\n if (Object.keys(dgAttrs).length > 0) {\n prevChildren.push(XMLBuilder.wSelf('docGrid', dgAttrs));\n }\n }\n }\n const prevSectPr = XMLBuilder.w('sectPr', undefined, prevChildren);\n children.push(XMLBuilder.w('sectPrChange', changeAttrs, [prevSectPr]));\n }\n\n return XMLBuilder.w('sectPr', undefined, children);\n }\n\n /**\n * Creates a deep clone of this section\n * @returns New Section instance with copied properties\n */\n clone(): Section {\n // Deep clone all nested objects\n const clonedProperties: SectionProperties = {};\n\n if (this.properties.pageSize) {\n clonedProperties.pageSize = { ...this.properties.pageSize };\n }\n\n if (this.properties.margins) {\n clonedProperties.margins = { ...this.properties.margins };\n }\n\n if (this.properties.columns) {\n clonedProperties.columns = {\n ...this.properties.columns,\n columnWidths: this.properties.columns.columnWidths\n ? [...this.properties.columns.columnWidths]\n : undefined,\n };\n }\n\n if (this.properties.pageNumbering) {\n clonedProperties.pageNumbering = { ...this.properties.pageNumbering };\n }\n\n if (this.properties.headers) {\n clonedProperties.headers = { ...this.properties.headers };\n }\n\n if (this.properties.footers) {\n clonedProperties.footers = { ...this.properties.footers };\n }\n\n if (this.properties.paperSource) {\n clonedProperties.paperSource = { ...this.properties.paperSource };\n }\n\n if (this.properties.docGrid) {\n clonedProperties.docGrid = { ...this.properties.docGrid };\n }\n\n if (this.properties.lineNumbering) {\n clonedProperties.lineNumbering = { ...this.properties.lineNumbering };\n }\n\n // Copy primitive properties\n clonedProperties.type = this.properties.type;\n clonedProperties.titlePage = this.properties.titlePage;\n clonedProperties.verticalAlignment = this.properties.verticalAlignment;\n clonedProperties.textDirection = this.properties.textDirection;\n clonedProperties.bidi = this.properties.bidi;\n clonedProperties.rtlGutter = this.properties.rtlGutter;\n\n return new Section(clonedProperties);\n }\n\n /**\n * Creates a section with default properties\n */\n static create(properties?: SectionProperties): Section {\n return new Section(properties);\n }\n\n /**\n * Creates a letter-sized section (8.5\" x 11\")\n */\n static createLetter(): Section {\n return new Section({\n pageSize: {\n width: PAGE_SIZES.LETTER.width,\n height: PAGE_SIZES.LETTER.height,\n orientation: 'portrait',\n },\n });\n }\n\n /**\n * Creates an A4-sized section (21cm x 29.7cm)\n */\n static createA4(): Section {\n return new Section({\n pageSize: {\n width: PAGE_SIZES.A4.width,\n height: PAGE_SIZES.A4.height,\n orientation: 'portrait',\n },\n });\n }\n\n /**\n * Creates a landscape section\n * @param pageSize Page size (default: Letter)\n */\n static createLandscape(pageSize: 'letter' | 'a4' = 'letter'): Section {\n const size = pageSize === 'a4' ? PAGE_SIZES.A4 : PAGE_SIZES.LETTER;\n return new Section({\n pageSize: {\n width: size.height, // Swap for landscape\n height: size.width,\n orientation: 'landscape',\n },\n });\n }\n}\n"]}