@office-open/docx 0.10.2 → 0.10.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{context-vnFOOEWL.mjs → context-CI0zR7rE.mjs} +133 -56
- package/dist/context-CI0zR7rE.mjs.map +1 -0
- package/dist/{core-properties-CcpNQvVY.d.mts → core-properties-Dp-aEoX3.d.mts} +241 -175
- package/dist/core-properties-Dp-aEoX3.d.mts.map +1 -0
- package/dist/{generate-DQkv8c9y.mjs → generate-B-n09INq.mjs} +62 -55
- package/dist/generate-B-n09INq.mjs.map +1 -0
- package/dist/generate.d.mts +1 -1
- package/dist/generate.mjs +1 -1
- package/dist/index.d.mts +2 -39
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +5 -5
- package/dist/index.mjs.map +1 -1
- package/dist/{parse-ZZPID0vi.mjs → parse-D6c9kHXh.mjs} +11 -25
- package/dist/parse-D6c9kHXh.mjs.map +1 -0
- package/dist/parse.d.mts +1 -1
- package/dist/parse.mjs +1 -1
- package/dist/{parts-DvRRYUug.mjs → parts-DgrmHznM.mjs} +780 -559
- package/dist/parts-DgrmHznM.mjs.map +1 -0
- package/dist/patch/index.d.mts +1 -1
- package/dist/patch/index.d.mts.map +1 -1
- package/dist/patch/index.mjs +8 -19
- package/dist/patch/index.mjs.map +1 -1
- package/package.json +3 -3
- package/dist/context-vnFOOEWL.mjs.map +0 -1
- package/dist/core-properties-CcpNQvVY.d.mts.map +0 -1
- package/dist/generate-DQkv8c9y.mjs.map +0 -1
- package/dist/parse-ZZPID0vi.mjs.map +0 -1
- package/dist/parts-DvRRYUug.mjs.map +0 -1
package/dist/index.mjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { $ as
|
|
2
|
-
import { i as AltChunkCollection, n as DocxWriteContext, r as SubDocCollection, t as DocxReadContext } from "./context-
|
|
1
|
+
import { $ as DocumentGridType, $t as stringifySdtPr, A as settingsDesc, An as parseBodyProperties, At as PageTextDirectionType, B as stringifyParagraphStyle, Bn as HeadingLevel, Bt as SpaceType, C as footnotesDesc, Cn as UnderlineType, Ct as parseSdtProperties, D as SdtDateMappingType, Dn as TextVerticalType, Dt as stringifySectionPropertiesXml, E as parseTocFieldInstruction, En as TextVertOverflowType, Et as sectionPropertiesDesc, F as parseStyleDefinitions, Fn as TextEffect, Ft as createHorizontalPosition, G as SectionType, Gt as TextWrappingType, H as HeaderFooterReferenceType, Hn as AlignmentType, Ht as createWrapThrough, I as DefaultStylesFactory, In as PageNumber, It as HorizontalPositionRelativeFrom, J as createLineNumberType, Jt as customXmlBlockDesc, K as createSectionType, Kt as altChunkDesc, L as stringifyCharacterStyle, Ln as breakXml, Lt as VerticalPositionRelativeFrom, M as buildNumberingCache, Mn as Media, Mt as PageNumberSeparator, N as buildStyleCache, Nn as createTransformation, Nt as createPageNumberType, O as SdtLock, On as VerticalAnchor, Ot as sectionMarginDefaults, P as extractStyleId, Pn as HighlightColor, Pt as createVerticalPosition, Q as PageBorderZOrder, Qt as stringifyCustomXmlShell, R as stringifyConditionalTableStyle, Rn as TextAlignmentType, Rt as HorizontalPositionAlign, S as endnotesDesc, Sn as EmphasisMarkType, St as parseSdtBlock, T as parseTocFieldFromElements, Tn as TextHorzOverflowType, Tt as parseSectionPropertiesEl, U as HeaderFooterType, Ut as createWrapTight, V as stringifyTableStyle, Vn as LineRuleType, Vt as VerticalPositionAlign, W as createHeaderFooterReference, Wt as TextWrappingSide, X as PageBorderDisplay, Xt as sdtBlockDesc, Y as createPageMargin, Yt as parseCustomXmlProperties, Z as PageBorderOffsetFrom, Zt as setBodyParseChild, _ as glossaryDesc, _n as parseFormFieldData, a as appPropertiesDesc, an as TABLE_BORDERS_NONE, at as LevelSuffix, b as CharacterSet, bn as PositionalTabLeader, c as relationshipsDesc, cn as OverlapType, ct as parseTableRowPropertiesEl, d as withAltChunkOverrides, dn as TableAnchorType, dt as stringifyChildDispatch, en as stringifySdtShell, et as createDocumentGrid, f as withMediaDefaults, fn as TextDirection, ft as stringifyParagraphInline, g as DocPartType, gn as createFormFieldData, h as DocPartGallery, hn as FormFieldTextType, ht as resetDrawingIdGen, i as webSettingsDesc, in as WidthType, it as LevelFormat, j as Styles, jn as createImageData, jt as PageOrientation, k as StyleLevel, kn as createBodyProperties, kt as sectionPageSizeDefaults, l as buildContentTypesFromRegistry, ln as RelativeHorizontalPosition, lt as setTableParseChild, m as DocPartBehavior, mn as ProofErrorType, mt as drawingDesc, n as frameXml, nt as Numbering, o as customPropertiesDesc, on as BorderStyle, ot as parseTableCellPropertiesEl, p as commentsDesc, pn as VerticalMergeType, pt as stringifyRunInline, q as LineNumberRestartFormat, qt as checkboxSymbolRunInner, r as framesetXml, rn as objectDesc, rt as parseNumberingDefinitions, s as corePropertiesDesc, sn as TableLayoutType, st as parseTablePropertiesEl, t as TargetScreenSize, tn as subDocDesc, tt as DocumentAttributeNamespaces, u as contentTypesDesc, un as RelativeVerticalPosition, ut as tableDesc, v as bibliographyDesc, vn as RubyAlign, w as parseToc, wn as TextBodyWrappingType, x as EditGroupType, xn as PositionalTabRelativeTo, xt as stringifyTableOfContents, y as fontTableDesc, yn as PositionalTabAlignment, z as stringifyNumberingStyle, zn as TextboxTightWrapType, zt as NumberFormat } from "./parts-DgrmHznM.mjs";
|
|
2
|
+
import { i as AltChunkCollection, n as DocxWriteContext, r as SubDocCollection, t as DocxReadContext } from "./context-CI0zR7rE.mjs";
|
|
3
3
|
import { patchDetector, patchDocument } from "./patch/index.mjs";
|
|
4
|
-
import { n as parseDocument, r as parseDocx, t as parseArchive } from "./parse-
|
|
5
|
-
import { i as compileDocument, n as generateDocumentStream, r as generateDocumentSync, t as generateDocument } from "./generate-
|
|
4
|
+
import { n as parseDocument, r as parseDocx, t as parseArchive } from "./parse-D6c9kHXh.mjs";
|
|
5
|
+
import { i as compileDocument, n as generateDocumentStream, r as generateDocumentSync, t as generateDocument } from "./generate-B-n09INq.mjs";
|
|
6
6
|
//#region src/parts/paragraph/formatting/break.ts
|
|
7
7
|
/**
|
|
8
8
|
* Break type values for WordprocessingML documents.
|
|
@@ -367,6 +367,6 @@ const VerticalAlignSection = {
|
|
|
367
367
|
*/
|
|
368
368
|
const createVerticalAlign = (value) => `<w:vAlign w:val="${value}"/>`;
|
|
369
369
|
//#endregion
|
|
370
|
-
export { AlignmentType, AltChunkCollection, BorderStyle, BreakType, CharacterSet, DefaultStylesFactory, DocPartBehavior, DocPartGallery, DocPartType, DocumentAttributeNamespaces, DocumentGridType, DocxReadContext, DocxWriteContext, DropCapType, EditGroupType, EmphasisMarkType, EndnoteType, FootnoteType, FormFieldTextType, FrameAnchorType, FrameWrap, HeaderFooterReferenceType, HeaderFooterType, HeadingLevel, HeightRule, HighlightColor, HorizontalPositionAlign, HorizontalPositionRelativeFrom, HyperlinkType, LeaderType, LevelFormat, LevelSuffix, LineNumberRestartFormat, LineRuleType, Media, NumberFormat, NumberedItemReferenceFormat, Numbering, OverlapType, PageBorderDisplay, PageBorderOffsetFrom, PageBorderZOrder, PageNumber, PageNumberSeparator, PageOrientation, PageTextDirectionType, PositionalTabAlignment, PositionalTabLeader, PositionalTabRelativeTo, ProofErrorType, RelativeHorizontalPosition, RelativeVerticalPosition, RubyAlign,
|
|
370
|
+
export { AlignmentType, AltChunkCollection, BorderStyle, BreakType, CharacterSet, DefaultStylesFactory, DocPartBehavior, DocPartGallery, DocPartType, DocumentAttributeNamespaces, DocumentGridType, DocxReadContext, DocxWriteContext, DropCapType, EditGroupType, EmphasisMarkType, EndnoteType, FootnoteType, FormFieldTextType, FrameAnchorType, FrameWrap, HeaderFooterReferenceType, HeaderFooterType, HeadingLevel, HeightRule, HighlightColor, HorizontalPositionAlign, HorizontalPositionRelativeFrom, HyperlinkType, LeaderType, LevelFormat, LevelSuffix, LineNumberRestartFormat, LineRuleType, Media, NumberFormat, NumberedItemReferenceFormat, Numbering, OverlapType, PageBorderDisplay, PageBorderOffsetFrom, PageBorderZOrder, PageNumber, PageNumberSeparator, PageOrientation, PageTextDirectionType, PositionalTabAlignment, PositionalTabLeader, PositionalTabRelativeTo, ProofErrorType, RelativeHorizontalPosition, RelativeVerticalPosition, RubyAlign, SdtDateMappingType, SdtLock, SectionType, ShadingType, SpaceType, StyleLevel, Styles, SubDocCollection, TABLE_BORDERS_NONE, TabStopPosition, TabStopType, TableAnchorType, TableLayoutType, TargetScreenSize, TextAlignmentType, TextBodyWrappingType, TextDirection, TextEffect, TextHorzOverflowType, TextVertOverflowType, TextVerticalType, TextWrappingSide, TextWrappingType, TextboxTightWrapType, UnderlineType, VerticalAlignSection, VerticalAlignTable, VerticalAnchor, VerticalMergeRevisionType, VerticalMergeType, VerticalPositionAlign, VerticalPositionRelativeFrom, WidthType, altChunkDesc, appPropertiesDesc, bibliographyDesc, breakXml, buildContentTypesFromRegistry, buildNumberingCache, buildStyleCache, checkboxSymbolRunInner, commentsDesc, compileDocument, contentTypesDesc, corePropertiesDesc, createBodyProperties, createDocumentGrid, createFormFieldData, createHeaderFooterReference, createHorizontalPosition, createImageData, createLineNumberType, createPageMargin, createPageNumberType, createSectionType, createTransformation, createVerticalAlign, createVerticalPosition, createWrapThrough, createWrapTight, customPropertiesDesc, customXmlBlockDesc, drawingDesc, endnotesDesc, extractStyleId, fontTableDesc, footnotesDesc, frameXml, framesetXml, generateDocument, generateDocumentStream, generateDocumentSync, glossaryDesc, objectDesc, parseArchive, parseBodyProperties, parseCustomXmlProperties, parseDocument, parseDocx, parseFormFieldData, parseNumberingDefinitions, parseSdtBlock, parseSdtProperties, parseSectionPropertiesEl, parseStyleDefinitions, parseTableCellPropertiesEl, parseTablePropertiesEl, parseTableRowPropertiesEl, parseToc, parseTocFieldFromElements, parseTocFieldInstruction, patchDetector, patchDocument, relationshipsDesc, resetDrawingIdGen, sdtBlockDesc, sectionMarginDefaults, sectionPageSizeDefaults, sectionPropertiesDesc, setBodyParseChild, setTableParseChild, settingsDesc, stringifyCharacterStyle, stringifyChildDispatch, stringifyConditionalTableStyle, stringifyCustomXmlShell, stringifyNumberingStyle, stringifyParagraphInline, stringifyParagraphStyle, stringifyRunInline, stringifySdtPr, stringifySdtShell, stringifySectionPropertiesXml, stringifyTableOfContents, stringifyTableStyle, subDocDesc, tableDesc, webSettingsDesc, withAltChunkOverrides, withMediaDefaults };
|
|
371
371
|
|
|
372
372
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../src/parts/paragraph/formatting/break.ts","../src/parts/paragraph/formatting/tab-stop.ts","../src/parts/paragraph/links/hyperlink.ts","../src/parts/paragraph/links/numbered-item-ref.ts","../src/parts/paragraph/frame/frame-properties.ts","../src/parts/table/table-row/table-row-height.ts","../src/parts/footnotes/footnote/footnote.ts","../src/parts/endnotes/endnote/endnote.ts","../src/shared/shading.ts","../src/shared/track-revision/track-revision-components/cell-merge.ts","../src/shared/vertical-align.ts"],"sourcesContent":["/**\n * Break type values for WordprocessingML documents.\n *\n * @module\n */\n\n/**\n * Break type constants.\n * @internal\n */\nexport const BreakType = {\n /** Column break */\n COLUMN: \"column\",\n /** Page break */\n PAGE: \"page\",\n} as const;\n\nexport type BreakTypeValue = (typeof BreakType)[keyof typeof BreakType];\n","/**\n * Tab stop module for WordprocessingML documents.\n *\n * This module provides tab stop definitions for paragraphs.\n *\n * Reference: http://officeopenxml.com/WPtab.php\n *\n * @module\n */\n\n/**\n * Definition for a single tab stop.\n *\n * @see {@link TabStop}\n */\nexport interface TabStopDefinition {\n /** The type of tab stop alignment */\n type: (typeof TabStopType)[keyof typeof TabStopType];\n /** The position of the tab stop in twips */\n position: number | (typeof TabStopPosition)[keyof typeof TabStopPosition];\n /** Optional leader character to fill space before the tab */\n leader?: (typeof LeaderType)[keyof typeof LeaderType];\n}\n\n/**\n * Tab stop alignment types.\n *\n * Specifies the type of tab stop and how text aligns to it.\n *\n * @publicApi\n */\nexport const TabStopType = {\n /** Left-aligned tab stop */\n LEFT: \"left\",\n /** Right-aligned tab stop */\n RIGHT: \"right\",\n /** Center-aligned tab stop */\n CENTER: \"center\",\n /** Bar tab stop - inserts a vertical bar at the position */\n BAR: \"bar\",\n /** Clears a tab stop at the specified position */\n CLEAR: \"clear\",\n /** Decimal-aligned tab stop - aligns on decimal point */\n DECIMAL: \"decimal\",\n /** End-aligned tab stop (right-to-left equivalent) */\n END: \"end\",\n /** List tab stop for numbered lists */\n NUM: \"num\",\n /** Start-aligned tab stop (left-to-right equivalent) */\n START: \"start\",\n} as const;\n\n/**\n * Tab stop leader character types.\n *\n * Specifies the character used to fill the space before the tab stop.\n *\n * @publicApi\n */\nexport const LeaderType = {\n /** Dot leader (....) */\n DOT: \"dot\",\n /** Heavy leader */\n HEAVY: \"heavy\",\n /** Hyphen leader (----) */\n HYPHEN: \"hyphen\",\n /** Middle dot leader (····) */\n MIDDLE_DOT: \"middleDot\",\n /** No leader */\n NONE: \"none\",\n /** Underscore leader (____) */\n UNDERSCORE: \"underscore\",\n} as const;\n\n/**\n * Predefined tab stop positions.\n *\n * @publicApi\n */\nexport const TabStopPosition = {\n /** Maximum tab stop position (right margin) */\n MAX: 9026,\n} as const;\n","/**\n * Hyperlink types for WordprocessingML documents.\n *\n * @module\n */\n\n/**\n * Hyperlink type enumeration.\n * @publicApi\n */\nexport const HyperlinkType = {\n /** Internal hyperlink to a bookmark within the document */\n INTERNAL: \"INTERNAL\",\n /** External hyperlink to a URL outside the document */\n EXTERNAL: \"EXTERNAL\",\n} as const;\n\n/**\n * Options for creating an internal hyperlink.\n */\nexport interface InternalHyperlinkOptions {\n /** Name of the bookmark to link to within the document */\n anchor: string;\n /** Screen tip text shown when hovering over the hyperlink */\n tooltip?: string;\n}\n\n/**\n * Options for creating an external hyperlink.\n */\nexport interface ExternalHyperlinkOptions {\n /** URL to link to outside the document */\n link: string;\n /** Screen tip text shown when hovering over the hyperlink */\n tooltip?: string;\n /** Target frame for the hyperlink (e.g., \"_blank\", \"_self\") */\n tgtFrame?: string;\n}\n","/**\n * Numbered item reference module for WordprocessingML documents.\n *\n * This module provides cross-references to numbered items (such as\n * numbered paragraphs, list items, or headings) within a document.\n *\n * Reference: https://learn.microsoft.com/en-us/openspecs/office_standards/ms-oi29500/7088a8ce-e784-49d4-94b8-cba6ef8fce78\n *\n * @module\n */\n\n/**\n * Format options for numbered item references.\n *\n * Specifies how the paragraph number should be displayed when referenced.\n */\nexport enum NumberedItemReferenceFormat {\n NONE = \"none\",\n /**\n * \\r option - inserts the paragraph number of the bookmarked paragraph in relative context, or relative to its position in the numbering scheme\n */\n RELATIVE = \"relative\",\n /**\n * \\n option - causes the field result to be the paragraph number without trailing periods. No information about prior numbered levels is displayed unless it is included as part of the current level.\n */\n NO_CONTEXT = \"no_context\",\n /**\n * \\w option - causes the field result to be the entire paragraph number without trailing periods, regardless of the location of the REF field.\n */\n FULL_CONTEXT = \"full_context\",\n}\n\nexport interface NumberedItemReferenceOptions {\n /**\n * \\h option - Creates a hyperlink to the bookmarked paragraph.\n * @default true\n */\n hyperlink?: boolean;\n /**\n * Which switch to use for the reference format\n * @default NumberedItemReferenceFormat.FULL_CONTEXT\n */\n referenceFormat?: NumberedItemReferenceFormat;\n}\n","import type { HeightRule } from \"@parts/table\";\n/**\n * Frame properties module for paragraph text frames in WordprocessingML documents.\n *\n * Frames allow paragraphs to be positioned absolutely on the page, enabling text wrapping\n * and drop cap effects. They are commonly used for floating text boxes and decorative elements.\n *\n * Reference: http://officeopenxml.com/WPparagraph-textFrames.php\n *\n * @module\n */\nimport type { HorizontalPositionAlign, VerticalPositionAlign } from \"@shared/constants\";\n\n/**\n * Drop cap types for paragraph frames.\n */\nexport const DropCapType = {\n /** No drop cap effect */\n NONE: \"none\",\n /** Drop cap that drops down into the paragraph text */\n DROP: \"drop\",\n /** Drop cap that extends into the margin */\n MARGIN: \"margin\",\n} as const;\n\n/**\n * Frame anchor types specifying what the frame should be anchored relative to.\n */\nexport const FrameAnchorType = {\n /** Anchor relative to the page margin */\n MARGIN: \"margin\",\n /** Anchor relative to the page edge */\n PAGE: \"page\",\n /** Anchor relative to the text column */\n TEXT: \"text\",\n} as const;\n\n/**\n * Text wrapping types for frames.\n */\nexport const FrameWrap = {\n /** Wrap text around the frame on all sides */\n AROUND: \"around\",\n /** Automatic wrapping based on available space */\n AUTO: \"auto\",\n /** No text wrapping */\n NONE: \"none\",\n /** Do not allow text beside the frame */\n NOT_BESIDE: \"notBeside\",\n /** Allow text to flow through the frame */\n THROUGH: \"through\",\n /** Wrap text tightly around the frame */\n TIGHT: \"tight\",\n} as const;\n\n/**\n * Base options shared by all frame types.\n */\ninterface BaseFrameOptions {\n /** Lock the anchor position to prevent it from moving */\n anchorLock?: boolean;\n /** Drop cap effect type */\n dropCap?: (typeof DropCapType)[keyof typeof DropCapType];\n /** Frame width in twips */\n width: number;\n /** Frame height in twips */\n height: number;\n /** Text wrapping behavior around the frame */\n wrap?: (typeof FrameWrap)[keyof typeof FrameWrap];\n /** Number of lines for drop cap effect */\n lines?: number;\n /** Anchor reference points for horizontal and vertical positioning */\n anchor: {\n /** Horizontal anchor reference point */\n horizontal: (typeof FrameAnchorType)[keyof typeof FrameAnchorType];\n /** Vertical anchor reference point */\n vertical: (typeof FrameAnchorType)[keyof typeof FrameAnchorType];\n };\n /** Spacing between frame and surrounding text in twips */\n space?: {\n /** Horizontal spacing in twips */\n horizontal: number;\n /** Vertical spacing in twips */\n vertical: number;\n };\n /** Height rule determining how frame height is calculated */\n rule?: (typeof HeightRule)[keyof typeof HeightRule];\n}\n\n/**\n * Options for frames positioned using absolute X/Y coordinates.\n */\nexport type XYFrameOptions = {\n /** Must be \"absolute\" for coordinate-based positioning */\n type: \"absolute\";\n /** Absolute X and Y coordinates in twips */\n position: {\n /** Horizontal position in twips from the anchor point */\n x: number;\n /** Vertical position in twips from the anchor point */\n y: number;\n };\n} & BaseFrameOptions;\n\n/**\n * Options for frames positioned using alignment values.\n */\nexport type AlignmentFrameOptions = {\n /** Must be \"alignment\" for alignment-based positioning */\n type: \"alignment\";\n /** Horizontal and vertical alignment values */\n alignment: {\n /** Horizontal alignment relative to the anchor */\n x: (typeof HorizontalPositionAlign)[keyof typeof HorizontalPositionAlign];\n /** Vertical alignment relative to the anchor */\n y: (typeof VerticalPositionAlign)[keyof typeof VerticalPositionAlign];\n };\n} & BaseFrameOptions;\n\n/**\n * Union type for all frame positioning options.\n */\nexport type FrameOptions = XYFrameOptions | AlignmentFrameOptions;\n","/**\n * Table row height module for WordprocessingML documents.\n *\n * This module provides row height configuration including rules for how height should be applied.\n *\n * Reference: http://officeopenxml.com/WPtableRow.php\n *\n * @module\n */\n\n/**\n * Height rules for table rows.\n *\n * Specifies how the height value should be interpreted.\n *\n * ## XSD Schema\n * ```xml\n * <xsd:simpleType name=\"ST_HeightRule\">\n * <xsd:restriction base=\"xsd:string\">\n * <xsd:enumeration value=\"auto\"/>\n * <xsd:enumeration value=\"exact\"/>\n * <xsd:enumeration value=\"atLeast\"/>\n * </xsd:restriction>\n * </xsd:simpleType>\n * ```\n *\n * @publicApi\n */\nexport const HeightRule = {\n /** Height is determined based on the content, so value is ignored. */\n AUTO: \"auto\",\n /** At least the value specified */\n ATLEAST: \"atLeast\",\n /** Exactly the value specified */\n EXACT: \"exact\",\n} as const;\n","/**\n * Footnote module for WordprocessingML documents.\n *\n * This module provides support for footnotes that appear at the bottom\n * of the page referenced from the main document text.\n *\n * Reference: http://officeopenxml.com/WPfootnotes.php\n *\n * @module\n */\nimport type { ParagraphOptions } from \"@parts/paragraph/paragraph\";\n\n/**\n * Enumeration of footnote types.\n *\n * Reference: http://officeopenxml.com/WPfootnotes.php\n *\n * @publicApi\n */\nexport const FootnoteType = {\n /** Separator line between body text and footnotes */\n SEPERATOR: \"separator\",\n /** Continuation separator for footnotes spanning pages */\n CONTINUATION_SEPERATOR: \"continuationSeparator\",\n} as const;\n\n/**\n * Options for creating a Footnote.\n *\n * @property id - Unique numeric identifier for this footnote\n * @property type - Type of footnote (separator, continuationSeparator, or normal)\n * @property children - Array of paragraphs that make up the footnote content\n *\n * @see {@link Footnote}\n */\nexport interface FootnoteOptions {\n /** Unique numeric identifier for this footnote */\n id: number;\n /** Type of footnote (separator or continuation separator) */\n type?: (typeof FootnoteType)[keyof typeof FootnoteType];\n /** Content of the footnote (paragraphs, tables, etc.) */\n children: (ParagraphOptions | string)[];\n}\n","/**\n * Endnote module for WordprocessingML documents.\n *\n * @module\n */\nimport type { ParagraphOptions } from \"@parts/paragraph/paragraph\";\n\nexport const EndnoteType = {\n CONTINUATION_SEPARATOR: \"continuationSeparator\",\n\n SEPARATOR: \"separator\",\n} as const;\n\nexport interface EndnoteOptions {\n id: number;\n type?: (typeof EndnoteType)[keyof typeof EndnoteType];\n children: (ParagraphOptions | string)[];\n}\n","/**\n * Shading module for WordprocessingML documents.\n *\n * Shading is used to apply background colors and patterns to paragraphs,\n * table cells, and text runs. The shading type is identical in all places.\n *\n * Reference: http://officeopenxml.com/WPshading.php\n *\n * @see http://officeopenxml.com/WPtableShading.php\n * @see http://officeopenxml.com/WPtableCellProperties-Shading.php\n *\n * ## XSD Schema\n * ```xml\n * <xsd:complexType name=\"CT_Shd\">\n * <xsd:attribute name=\"val\" type=\"ST_Shd\" use=\"required\"/>\n * <xsd:attribute name=\"color\" type=\"ST_HexColor\" use=\"optional\"/>\n * <xsd:attribute name=\"themeColor\" type=\"ST_ThemeColor\" use=\"optional\"/>\n * <xsd:attribute name=\"themeTint\" type=\"ST_UcharHexNumber\" use=\"optional\"/>\n * <xsd:attribute name=\"themeShade\" type=\"ST_UcharHexNumber\" use=\"optional\"/>\n * <xsd:attribute name=\"fill\" type=\"ST_HexColor\" use=\"optional\"/>\n * <xsd:attribute name=\"themeFill\" type=\"ST_ThemeColor\" use=\"optional\"/>\n * <xsd:attribute name=\"themeFillTint\" type=\"ST_UcharHexNumber\" use=\"optional\"/>\n * <xsd:attribute name=\"themeFillShade\" type=\"ST_UcharHexNumber\" use=\"optional\"/>\n * </xsd:complexType>\n * ```\n *\n * @module\n */\nimport type { ThemeColor } from \"@office-open/core\";\n\n/**\n * Properties for configuring shading.\n *\n * @property fill - Background fill color in hex format (e.g., \"FF0000\" for red)\n * @property color - Pattern color in hex format\n * @property type - Shading pattern type\n */\nexport interface ShadingAttributesProperties {\n fill?: string;\n color?: string;\n type?: (typeof ShadingType)[keyof typeof ShadingType];\n /** Theme color reference */\n themeColor?: (typeof ThemeColor)[keyof typeof ThemeColor];\n /** Theme color tint (2-char hex) */\n themeTint?: string;\n /** Theme color shade (2-char hex) */\n themeShade?: string;\n /** Theme fill color reference */\n themeFill?: (typeof ThemeColor)[keyof typeof ThemeColor];\n /** Theme fill tint (2-char hex) */\n themeFillTint?: string;\n /** Theme fill shade (2-char hex) */\n themeFillShade?: string;\n}\n\n/**\n * Shading pattern types.\n *\n * Specifies the pattern used for shading. The pattern combines the fill\n * color and the pattern color.\n *\n * ## XSD Schema\n * ```xml\n * <xsd:simpleType name=\"ST_Shd\">\n * <xsd:restriction base=\"xsd:string\">\n * <xsd:enumeration value=\"nil\"/>\n * <xsd:enumeration value=\"clear\"/>\n * <xsd:enumeration value=\"solid\"/>\n * <xsd:enumeration value=\"horzStripe\"/>\n * <xsd:enumeration value=\"vertStripe\"/>\n * <xsd:enumeration value=\"reverseDiagStripe\"/>\n * <xsd:enumeration value=\"diagStripe\"/>\n * <xsd:enumeration value=\"horzCross\"/>\n * <xsd:enumeration value=\"diagCross\"/>\n * <!-- ... percent values ... -->\n * </xsd:restriction>\n * </xsd:simpleType>\n * ```\n *\n * @publicApi\n */\nexport const ShadingType = {\n /** Clear shading - no pattern, fill color only */\n CLEAR: \"clear\",\n DIAGONAL_CROSS: \"diagCross\",\n DIAGONAL_STRIPE: \"diagStripe\",\n HORIZONTAL_CROSS: \"horzCross\",\n HORIZONTAL_STRIPE: \"horzStripe\",\n NIL: \"nil\",\n PERCENT_10: \"pct10\",\n PERCENT_12: \"pct12\",\n PERCENT_15: \"pct15\",\n PERCENT_20: \"pct20\",\n PERCENT_25: \"pct25\",\n PERCENT_30: \"pct30\",\n PERCENT_35: \"pct35\",\n PERCENT_37: \"pct37\",\n PERCENT_40: \"pct40\",\n PERCENT_45: \"pct45\",\n PERCENT_5: \"pct5\",\n PERCENT_50: \"pct50\",\n PERCENT_55: \"pct55\",\n PERCENT_60: \"pct60\",\n PERCENT_62: \"pct62\",\n PERCENT_65: \"pct65\",\n PERCENT_70: \"pct70\",\n PERCENT_75: \"pct75\",\n PERCENT_80: \"pct80\",\n PERCENT_85: \"pct85\",\n PERCENT_87: \"pct87\",\n PERCENT_90: \"pct90\",\n PERCENT_95: \"pct95\",\n REVERSE_DIAGONAL_STRIPE: \"reverseDiagStripe\",\n SOLID: \"solid\",\n THIN_DIAGONAL_CROSS: \"thinDiagCross\",\n THIN_DIAGONAL_STRIPE: \"thinDiagStripe\",\n THIN_HORIZONTAL_CROSS: \"thinHorzCross\",\n THIN_REVERSE_DIAGONAL_STRIPE: \"thinReverseDiagStripe\",\n THIN_VERTICAL_STRIPE: \"thinVertStripe\",\n VERTICAL_STRIPE: \"vertStripe\",\n} as const;\n","/**\n * Cell merge track revision component.\n *\n * @module\n */\n\nimport type { ChangedAttributesProperties } from \"../track-revision\";\n\n/**\n * Vertical merge revision types.\n */\nexport const VerticalMergeRevisionType = {\n /**\n * Cell that is merged with upper one.\n */\n CONTINUE: \"continue\",\n /**\n * Cell that is starting the vertical merge.\n */\n RESTART: \"restart\",\n} as const;\n\nexport type CellMergeAttributes = ChangedAttributesProperties & {\n verticalMerge?: (typeof VerticalMergeRevisionType)[keyof typeof VerticalMergeRevisionType];\n verticalMergeOriginal?: (typeof VerticalMergeRevisionType)[keyof typeof VerticalMergeRevisionType];\n};\n","/**\n * Vertical alignment module for WordprocessingML documents.\n *\n * This module provides vertical alignment options for table cells and sections.\n *\n * ## XSD Schema\n * ```xml\n * <xsd:complexType name=\"CT_VerticalJc\">\n * <xsd:attribute name=\"val\" type=\"ST_VerticalJc\" use=\"required\"/>\n * </xsd:complexType>\n *\n * <xsd:simpleType name=\"ST_VerticalJc\">\n * <xsd:restriction base=\"xsd:string\">\n * <xsd:enumeration value=\"both\"/>\n * <xsd:enumeration value=\"top\"/>\n * <xsd:enumeration value=\"center\"/>\n * <xsd:enumeration value=\"bottom\"/>\n * </xsd:restriction>\n * </xsd:simpleType>\n * ```\n *\n * @module\n */\n/**\n * Enumeration for table-cell vertical alignment. Only `top`, `center`, `bottom`\n * are valid according to ECMA-376 (§17.18.87 ST_VerticalJc within `<w:tcPr>`).\n *\n * @publicApi\n */\nexport const VerticalAlignTable = {\n BOTTOM: \"bottom\",\n CENTER: \"center\",\n TOP: \"top\",\n} as const;\n\n/**\n * Enumeration for section (<w:sectPr>) vertical alignment. Adds `both` on top of\n * the table-cell set (§17.18.87 ST_VerticalJc within <w:sectPr>).\n *\n * @publicApi\n */\nexport const VerticalAlignSection = {\n ...VerticalAlignTable,\n BOTH: \"both\",\n} as const;\n\nexport type TableVerticalAlign = (typeof VerticalAlignTable)[keyof typeof VerticalAlignTable];\n\nexport type SectionVerticalAlign = (typeof VerticalAlignSection)[keyof typeof VerticalAlignSection];\n\n/**\n * Creates a vertical alignment element in a WordprocessingML document.\n *\n * Used in table cells and sections to control vertical text positioning.\n *\n * @example\n * ```typescript\n * createVerticalAlign(VerticalAlignTable.CENTER);\n * ```\n */\nexport const createVerticalAlign = (value: TableVerticalAlign | SectionVerticalAlign): string =>\n `<w:vAlign w:val=\"${value}\"/>`;\n"],"mappings":";;;;;;;;;;;;;;;AAUA,MAAa,YAAY;;CAEvB,QAAQ;;CAER,MAAM;AACR;;;;;;;;;;ACgBA,MAAa,cAAc;;CAEzB,MAAM;;CAEN,OAAO;;CAEP,QAAQ;;CAER,KAAK;;CAEL,OAAO;;CAEP,SAAS;;CAET,KAAK;;CAEL,KAAK;;CAEL,OAAO;AACT;;;;;;;;AASA,MAAa,aAAa;;CAExB,KAAK;;CAEL,OAAO;;CAEP,QAAQ;;CAER,YAAY;;CAEZ,MAAM;;CAEN,YAAY;AACd;;;;;;AAOA,MAAa,kBAAkB;;AAE7B,KAAK,KACP;;;;;;;;;;;;ACxEA,MAAa,gBAAgB;;CAE3B,UAAU;;CAEV,UAAU;AACZ;;;;;;;;;;;;;;;;;;ACCA,IAAY,8BAAL,yBAAA,6BAAA;CACL,4BAAA,UAAA;;;;CAIA,4BAAA,cAAA;;;;CAIA,4BAAA,gBAAA;;;;CAIA,4BAAA,kBAAA;;AACF,EAAA,CAAA,CAAA;;;;;;ACdA,MAAa,cAAc;;CAEzB,MAAM;;CAEN,MAAM;;CAEN,QAAQ;AACV;;;;AAKA,MAAa,kBAAkB;;CAE7B,QAAQ;;CAER,MAAM;;CAEN,MAAM;AACR;;;;AAKA,MAAa,YAAY;;CAEvB,QAAQ;;CAER,MAAM;;CAEN,MAAM;;CAEN,YAAY;;CAEZ,SAAS;;CAET,OAAO;AACT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzBA,MAAa,aAAa;;CAExB,MAAM;;CAEN,SAAS;;CAET,OAAO;AACT;;;;;;;;;;AChBA,MAAa,eAAe;;CAE1B,WAAW;;CAEX,wBAAwB;AAC1B;;;ACjBA,MAAa,cAAc;CACzB,wBAAwB;CAExB,WAAW;AACb;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACsEA,MAAa,cAAc;;CAEzB,OAAO;CACP,gBAAgB;CAChB,iBAAiB;CACjB,kBAAkB;CAClB,mBAAmB;CACnB,KAAK;CACL,YAAY;CACZ,YAAY;CACZ,YAAY;CACZ,YAAY;CACZ,YAAY;CACZ,YAAY;CACZ,YAAY;CACZ,YAAY;CACZ,YAAY;CACZ,YAAY;CACZ,WAAW;CACX,YAAY;CACZ,YAAY;CACZ,YAAY;CACZ,YAAY;CACZ,YAAY;CACZ,YAAY;CACZ,YAAY;CACZ,YAAY;CACZ,YAAY;CACZ,YAAY;CACZ,YAAY;CACZ,YAAY;CACZ,yBAAyB;CACzB,OAAO;CACP,qBAAqB;CACrB,sBAAsB;CACtB,uBAAuB;CACvB,8BAA8B;CAC9B,sBAAsB;CACtB,iBAAiB;AACnB;;;;;;AC7GA,MAAa,4BAA4B;;;;CAIvC,UAAU;;;;CAIV,SAAS;AACX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACSA,MAAa,qBAAqB;CAChC,QAAQ;CACR,QAAQ;CACR,KAAK;AACP;;;;;;;AAQA,MAAa,uBAAuB;CAClC,GAAG;CACH,MAAM;AACR;;;;;;;;;;;AAgBA,MAAa,uBAAuB,UAClC,oBAAoB,MAAM"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../src/parts/paragraph/formatting/break.ts","../src/parts/paragraph/formatting/tab-stop.ts","../src/parts/paragraph/links/hyperlink.ts","../src/parts/paragraph/links/numbered-item-ref.ts","../src/parts/paragraph/frame/frame-properties.ts","../src/parts/table/table-row/table-row-height.ts","../src/parts/footnotes/footnote/footnote.ts","../src/parts/endnotes/endnote/endnote.ts","../src/shared/shading.ts","../src/shared/track-revision/track-revision-components/cell-merge.ts","../src/shared/vertical-align.ts"],"sourcesContent":["/**\n * Break type values for WordprocessingML documents.\n *\n * @module\n */\n\n/**\n * Break type constants.\n * @internal\n */\nexport const BreakType = {\n /** Column break */\n COLUMN: \"column\",\n /** Page break */\n PAGE: \"page\",\n} as const;\n\nexport type BreakTypeValue = (typeof BreakType)[keyof typeof BreakType];\n","/**\n * Tab stop module for WordprocessingML documents.\n *\n * This module provides tab stop definitions for paragraphs.\n *\n * Reference: http://officeopenxml.com/WPtab.php\n *\n * @module\n */\n\n/**\n * Definition for a single tab stop.\n *\n * @see {@link TabStop}\n */\nexport interface TabStopDefinition {\n /** The type of tab stop alignment */\n type: (typeof TabStopType)[keyof typeof TabStopType];\n /** The position of the tab stop in twips */\n position: number | (typeof TabStopPosition)[keyof typeof TabStopPosition];\n /** Optional leader character to fill space before the tab */\n leader?: (typeof LeaderType)[keyof typeof LeaderType];\n}\n\n/**\n * Tab stop alignment types.\n *\n * Specifies the type of tab stop and how text aligns to it.\n *\n * @publicApi\n */\nexport const TabStopType = {\n /** Left-aligned tab stop */\n LEFT: \"left\",\n /** Right-aligned tab stop */\n RIGHT: \"right\",\n /** Center-aligned tab stop */\n CENTER: \"center\",\n /** Bar tab stop - inserts a vertical bar at the position */\n BAR: \"bar\",\n /** Clears a tab stop at the specified position */\n CLEAR: \"clear\",\n /** Decimal-aligned tab stop - aligns on decimal point */\n DECIMAL: \"decimal\",\n /** End-aligned tab stop (right-to-left equivalent) */\n END: \"end\",\n /** List tab stop for numbered lists */\n NUM: \"num\",\n /** Start-aligned tab stop (left-to-right equivalent) */\n START: \"start\",\n} as const;\n\n/**\n * Tab stop leader character types.\n *\n * Specifies the character used to fill the space before the tab stop.\n *\n * @publicApi\n */\nexport const LeaderType = {\n /** Dot leader (....) */\n DOT: \"dot\",\n /** Heavy leader */\n HEAVY: \"heavy\",\n /** Hyphen leader (----) */\n HYPHEN: \"hyphen\",\n /** Middle dot leader (····) */\n MIDDLE_DOT: \"middleDot\",\n /** No leader */\n NONE: \"none\",\n /** Underscore leader (____) */\n UNDERSCORE: \"underscore\",\n} as const;\n\n/**\n * Predefined tab stop positions.\n *\n * @publicApi\n */\nexport const TabStopPosition = {\n /** Maximum tab stop position (right margin) */\n MAX: 9026,\n} as const;\n","/**\n * Hyperlink types for WordprocessingML documents.\n *\n * @module\n */\n\n/**\n * Hyperlink type enumeration.\n * @publicApi\n */\nexport const HyperlinkType = {\n /** Internal hyperlink to a bookmark within the document */\n INTERNAL: \"INTERNAL\",\n /** External hyperlink to a URL outside the document */\n EXTERNAL: \"EXTERNAL\",\n} as const;\n\n/**\n * Options for creating an internal hyperlink.\n */\nexport interface InternalHyperlinkOptions {\n /** Name of the bookmark to link to within the document */\n anchor: string;\n /** Screen tip text shown when hovering over the hyperlink */\n tooltip?: string;\n}\n\n/**\n * Options for creating an external hyperlink.\n */\nexport interface ExternalHyperlinkOptions {\n /** URL to link to outside the document */\n link: string;\n /** Screen tip text shown when hovering over the hyperlink */\n tooltip?: string;\n /** Target frame for the hyperlink (e.g., \"_blank\", \"_self\") */\n tgtFrame?: string;\n}\n","/**\n * Numbered item reference module for WordprocessingML documents.\n *\n * This module provides cross-references to numbered items (such as\n * numbered paragraphs, list items, or headings) within a document.\n *\n * Reference: https://learn.microsoft.com/en-us/openspecs/office_standards/ms-oi29500/7088a8ce-e784-49d4-94b8-cba6ef8fce78\n *\n * @module\n */\n\n/**\n * Format options for numbered item references.\n *\n * Specifies how the paragraph number should be displayed when referenced.\n */\nexport enum NumberedItemReferenceFormat {\n NONE = \"none\",\n /**\n * \\r option - inserts the paragraph number of the bookmarked paragraph in relative context, or relative to its position in the numbering scheme\n */\n RELATIVE = \"relative\",\n /**\n * \\n option - causes the field result to be the paragraph number without trailing periods. No information about prior numbered levels is displayed unless it is included as part of the current level.\n */\n NO_CONTEXT = \"no_context\",\n /**\n * \\w option - causes the field result to be the entire paragraph number without trailing periods, regardless of the location of the REF field.\n */\n FULL_CONTEXT = \"full_context\",\n}\n\nexport interface NumberedItemReferenceOptions {\n /**\n * \\h option - Creates a hyperlink to the bookmarked paragraph.\n * @default true\n */\n hyperlink?: boolean;\n /**\n * Which switch to use for the reference format\n * @default NumberedItemReferenceFormat.FULL_CONTEXT\n */\n referenceFormat?: NumberedItemReferenceFormat;\n}\n","/**\n * Frame properties module for paragraph text frames in WordprocessingML documents.\n *\n * Frames allow paragraphs to be positioned absolutely on the page, enabling text wrapping\n * and drop cap effects. They are commonly used for floating text boxes and decorative elements.\n *\n * Reference: http://officeopenxml.com/WPparagraph-textFrames.php\n *\n * @module\n */\nimport type { UniversalMeasure } from \"@office-open/core\";\nimport type { HeightRule } from \"@parts/table\";\nimport type { HorizontalPositionAlign, VerticalPositionAlign } from \"@shared/constants\";\n\n/**\n * Drop cap types for paragraph frames.\n */\nexport const DropCapType = {\n /** No drop cap effect */\n NONE: \"none\",\n /** Drop cap that drops down into the paragraph text */\n DROP: \"drop\",\n /** Drop cap that extends into the margin */\n MARGIN: \"margin\",\n} as const;\n\n/**\n * Frame anchor types specifying what the frame should be anchored relative to.\n */\nexport const FrameAnchorType = {\n /** Anchor relative to the page margin */\n MARGIN: \"margin\",\n /** Anchor relative to the page edge */\n PAGE: \"page\",\n /** Anchor relative to the text column */\n TEXT: \"text\",\n} as const;\n\n/**\n * Text wrapping types for frames.\n */\nexport const FrameWrap = {\n /** Wrap text around the frame on all sides */\n AROUND: \"around\",\n /** Automatic wrapping based on available space */\n AUTO: \"auto\",\n /** No text wrapping */\n NONE: \"none\",\n /** Do not allow text beside the frame */\n NOT_BESIDE: \"notBeside\",\n /** Allow text to flow through the frame */\n THROUGH: \"through\",\n /** Wrap text tightly around the frame */\n TIGHT: \"tight\",\n} as const;\n\n/**\n * Base options shared by all frame types.\n */\ninterface BaseFrameOptions {\n /** Lock the anchor position to prevent it from moving */\n anchorLock?: boolean;\n /** Drop cap effect type */\n dropCap?: (typeof DropCapType)[keyof typeof DropCapType];\n /** Frame width in twips or universal measure (e.g., \"1cm\", \"0.5in\") */\n width: number | UniversalMeasure;\n /** Frame height in twips or universal measure (e.g., \"1cm\", \"0.5in\") */\n height: number | UniversalMeasure;\n /** Text wrapping behavior around the frame */\n wrap?: (typeof FrameWrap)[keyof typeof FrameWrap];\n /** Number of lines for drop cap effect */\n lines?: number;\n /** Anchor reference points for horizontal and vertical positioning */\n anchor: {\n /** Horizontal anchor reference point */\n horizontal: (typeof FrameAnchorType)[keyof typeof FrameAnchorType];\n /** Vertical anchor reference point */\n vertical: (typeof FrameAnchorType)[keyof typeof FrameAnchorType];\n };\n /** Spacing between frame and surrounding text in twips */\n space?: {\n /** Horizontal spacing in twips or universal measure */\n horizontal: number | UniversalMeasure;\n /** Vertical spacing in twips or universal measure */\n vertical: number | UniversalMeasure;\n };\n /** Height rule determining how frame height is calculated */\n rule?: (typeof HeightRule)[keyof typeof HeightRule];\n}\n\n/**\n * Options for frames positioned using absolute X/Y coordinates.\n */\nexport type XYFrameOptions = {\n /** Must be \"absolute\" for coordinate-based positioning */\n type: \"absolute\";\n /** Absolute X and Y coordinates in twips */\n position: {\n /** Horizontal position in twips or universal measure from the anchor point */\n x: number | UniversalMeasure;\n /** Vertical position in twips or universal measure from the anchor point */\n y: number | UniversalMeasure;\n };\n} & BaseFrameOptions;\n\n/**\n * Options for frames positioned using alignment values.\n */\nexport type AlignmentFrameOptions = {\n /** Must be \"alignment\" for alignment-based positioning */\n type: \"alignment\";\n /** Horizontal and vertical alignment values */\n alignment: {\n /** Horizontal alignment relative to the anchor */\n x: (typeof HorizontalPositionAlign)[keyof typeof HorizontalPositionAlign];\n /** Vertical alignment relative to the anchor */\n y: (typeof VerticalPositionAlign)[keyof typeof VerticalPositionAlign];\n };\n} & BaseFrameOptions;\n\n/**\n * Union type for all frame positioning options.\n */\nexport type FrameOptions = XYFrameOptions | AlignmentFrameOptions;\n","/**\n * Table row height module for WordprocessingML documents.\n *\n * This module provides row height configuration including rules for how height should be applied.\n *\n * Reference: http://officeopenxml.com/WPtableRow.php\n *\n * @module\n */\n\n/**\n * Height rules for table rows.\n *\n * Specifies how the height value should be interpreted.\n *\n * ## XSD Schema\n * ```xml\n * <xsd:simpleType name=\"ST_HeightRule\">\n * <xsd:restriction base=\"xsd:string\">\n * <xsd:enumeration value=\"auto\"/>\n * <xsd:enumeration value=\"exact\"/>\n * <xsd:enumeration value=\"atLeast\"/>\n * </xsd:restriction>\n * </xsd:simpleType>\n * ```\n *\n * @publicApi\n */\nexport const HeightRule = {\n /** Height is determined based on the content, so value is ignored. */\n AUTO: \"auto\",\n /** At least the value specified */\n ATLEAST: \"atLeast\",\n /** Exactly the value specified */\n EXACT: \"exact\",\n} as const;\n","/**\n * Footnote module for WordprocessingML documents.\n *\n * This module provides support for footnotes that appear at the bottom\n * of the page referenced from the main document text.\n *\n * Reference: http://officeopenxml.com/WPfootnotes.php\n *\n * @module\n */\nimport type { ParagraphOptions } from \"@parts/paragraph/paragraph\";\n\n/**\n * Enumeration of footnote types.\n *\n * Reference: http://officeopenxml.com/WPfootnotes.php\n *\n * @publicApi\n */\nexport const FootnoteType = {\n /** Separator line between body text and footnotes */\n SEPERATOR: \"separator\",\n /** Continuation separator for footnotes spanning pages */\n CONTINUATION_SEPERATOR: \"continuationSeparator\",\n} as const;\n\n/**\n * Options for creating a Footnote.\n *\n * @property id - Unique numeric identifier for this footnote\n * @property type - Type of footnote (separator, continuationSeparator, or normal)\n * @property children - Array of paragraphs that make up the footnote content\n *\n * @see {@link Footnote}\n */\nexport interface FootnoteOptions {\n /** Unique numeric identifier for this footnote */\n id: number;\n /** Type of footnote (separator or continuation separator) */\n type?: (typeof FootnoteType)[keyof typeof FootnoteType];\n /** Content of the footnote (paragraphs, tables, etc.) */\n children: (ParagraphOptions | string)[];\n}\n","/**\n * Endnote module for WordprocessingML documents.\n *\n * @module\n */\nimport type { ParagraphOptions } from \"@parts/paragraph/paragraph\";\n\nexport const EndnoteType = {\n CONTINUATION_SEPARATOR: \"continuationSeparator\",\n\n SEPARATOR: \"separator\",\n} as const;\n\nexport interface EndnoteOptions {\n id: number;\n type?: (typeof EndnoteType)[keyof typeof EndnoteType];\n children: (ParagraphOptions | string)[];\n}\n","/**\n * Shading module for WordprocessingML documents.\n *\n * Shading is used to apply background colors and patterns to paragraphs,\n * table cells, and text runs. The shading type is identical in all places.\n *\n * Reference: http://officeopenxml.com/WPshading.php\n *\n * @see http://officeopenxml.com/WPtableShading.php\n * @see http://officeopenxml.com/WPtableCellProperties-Shading.php\n *\n * ## XSD Schema\n * ```xml\n * <xsd:complexType name=\"CT_Shd\">\n * <xsd:attribute name=\"val\" type=\"ST_Shd\" use=\"required\"/>\n * <xsd:attribute name=\"color\" type=\"ST_HexColor\" use=\"optional\"/>\n * <xsd:attribute name=\"themeColor\" type=\"ST_ThemeColor\" use=\"optional\"/>\n * <xsd:attribute name=\"themeTint\" type=\"ST_UcharHexNumber\" use=\"optional\"/>\n * <xsd:attribute name=\"themeShade\" type=\"ST_UcharHexNumber\" use=\"optional\"/>\n * <xsd:attribute name=\"fill\" type=\"ST_HexColor\" use=\"optional\"/>\n * <xsd:attribute name=\"themeFill\" type=\"ST_ThemeColor\" use=\"optional\"/>\n * <xsd:attribute name=\"themeFillTint\" type=\"ST_UcharHexNumber\" use=\"optional\"/>\n * <xsd:attribute name=\"themeFillShade\" type=\"ST_UcharHexNumber\" use=\"optional\"/>\n * </xsd:complexType>\n * ```\n *\n * @module\n */\nimport type { ThemeColor } from \"@office-open/core\";\n\n/**\n * Properties for configuring shading.\n *\n * @property fill - Background fill color in hex format (e.g., \"FF0000\" for red)\n * @property color - Pattern color in hex format\n * @property type - Shading pattern type\n */\nexport interface ShadingAttributesProperties {\n fill?: string;\n color?: string;\n type?: (typeof ShadingType)[keyof typeof ShadingType];\n /** Theme color reference */\n themeColor?: (typeof ThemeColor)[keyof typeof ThemeColor];\n /** Theme color tint (2-char hex) */\n themeTint?: string;\n /** Theme color shade (2-char hex) */\n themeShade?: string;\n /** Theme fill color reference */\n themeFill?: (typeof ThemeColor)[keyof typeof ThemeColor];\n /** Theme fill tint (2-char hex) */\n themeFillTint?: string;\n /** Theme fill shade (2-char hex) */\n themeFillShade?: string;\n}\n\n/**\n * Shading pattern types.\n *\n * Specifies the pattern used for shading. The pattern combines the fill\n * color and the pattern color.\n *\n * ## XSD Schema\n * ```xml\n * <xsd:simpleType name=\"ST_Shd\">\n * <xsd:restriction base=\"xsd:string\">\n * <xsd:enumeration value=\"nil\"/>\n * <xsd:enumeration value=\"clear\"/>\n * <xsd:enumeration value=\"solid\"/>\n * <xsd:enumeration value=\"horzStripe\"/>\n * <xsd:enumeration value=\"vertStripe\"/>\n * <xsd:enumeration value=\"reverseDiagStripe\"/>\n * <xsd:enumeration value=\"diagStripe\"/>\n * <xsd:enumeration value=\"horzCross\"/>\n * <xsd:enumeration value=\"diagCross\"/>\n * <!-- ... percent values ... -->\n * </xsd:restriction>\n * </xsd:simpleType>\n * ```\n *\n * @publicApi\n */\nexport const ShadingType = {\n /** Clear shading - no pattern, fill color only */\n CLEAR: \"clear\",\n DIAGONAL_CROSS: \"diagCross\",\n DIAGONAL_STRIPE: \"diagStripe\",\n HORIZONTAL_CROSS: \"horzCross\",\n HORIZONTAL_STRIPE: \"horzStripe\",\n NIL: \"nil\",\n PERCENT_10: \"pct10\",\n PERCENT_12: \"pct12\",\n PERCENT_15: \"pct15\",\n PERCENT_20: \"pct20\",\n PERCENT_25: \"pct25\",\n PERCENT_30: \"pct30\",\n PERCENT_35: \"pct35\",\n PERCENT_37: \"pct37\",\n PERCENT_40: \"pct40\",\n PERCENT_45: \"pct45\",\n PERCENT_5: \"pct5\",\n PERCENT_50: \"pct50\",\n PERCENT_55: \"pct55\",\n PERCENT_60: \"pct60\",\n PERCENT_62: \"pct62\",\n PERCENT_65: \"pct65\",\n PERCENT_70: \"pct70\",\n PERCENT_75: \"pct75\",\n PERCENT_80: \"pct80\",\n PERCENT_85: \"pct85\",\n PERCENT_87: \"pct87\",\n PERCENT_90: \"pct90\",\n PERCENT_95: \"pct95\",\n REVERSE_DIAGONAL_STRIPE: \"reverseDiagStripe\",\n SOLID: \"solid\",\n THIN_DIAGONAL_CROSS: \"thinDiagCross\",\n THIN_DIAGONAL_STRIPE: \"thinDiagStripe\",\n THIN_HORIZONTAL_CROSS: \"thinHorzCross\",\n THIN_REVERSE_DIAGONAL_STRIPE: \"thinReverseDiagStripe\",\n THIN_VERTICAL_STRIPE: \"thinVertStripe\",\n VERTICAL_STRIPE: \"vertStripe\",\n} as const;\n","/**\n * Cell merge track revision component.\n *\n * @module\n */\n\nimport type { ChangedAttributesProperties } from \"../track-revision\";\n\n/**\n * Vertical merge revision types.\n */\nexport const VerticalMergeRevisionType = {\n /**\n * Cell that is merged with upper one.\n */\n CONTINUE: \"continue\",\n /**\n * Cell that is starting the vertical merge.\n */\n RESTART: \"restart\",\n} as const;\n\nexport type CellMergeAttributes = ChangedAttributesProperties & {\n verticalMerge?: (typeof VerticalMergeRevisionType)[keyof typeof VerticalMergeRevisionType];\n verticalMergeOriginal?: (typeof VerticalMergeRevisionType)[keyof typeof VerticalMergeRevisionType];\n};\n","/**\n * Vertical alignment module for WordprocessingML documents.\n *\n * This module provides vertical alignment options for table cells and sections.\n *\n * ## XSD Schema\n * ```xml\n * <xsd:complexType name=\"CT_VerticalJc\">\n * <xsd:attribute name=\"val\" type=\"ST_VerticalJc\" use=\"required\"/>\n * </xsd:complexType>\n *\n * <xsd:simpleType name=\"ST_VerticalJc\">\n * <xsd:restriction base=\"xsd:string\">\n * <xsd:enumeration value=\"both\"/>\n * <xsd:enumeration value=\"top\"/>\n * <xsd:enumeration value=\"center\"/>\n * <xsd:enumeration value=\"bottom\"/>\n * </xsd:restriction>\n * </xsd:simpleType>\n * ```\n *\n * @module\n */\n/**\n * Enumeration for table-cell vertical alignment. Only `top`, `center`, `bottom`\n * are valid according to ECMA-376 (§17.18.87 ST_VerticalJc within `<w:tcPr>`).\n *\n * @publicApi\n */\nexport const VerticalAlignTable = {\n BOTTOM: \"bottom\",\n CENTER: \"center\",\n TOP: \"top\",\n} as const;\n\n/**\n * Enumeration for section (<w:sectPr>) vertical alignment. Adds `both` on top of\n * the table-cell set (§17.18.87 ST_VerticalJc within <w:sectPr>).\n *\n * @publicApi\n */\nexport const VerticalAlignSection = {\n ...VerticalAlignTable,\n BOTH: \"both\",\n} as const;\n\nexport type TableVerticalAlign = (typeof VerticalAlignTable)[keyof typeof VerticalAlignTable];\n\nexport type SectionVerticalAlign = (typeof VerticalAlignSection)[keyof typeof VerticalAlignSection];\n\n/**\n * Creates a vertical alignment element in a WordprocessingML document.\n *\n * Used in table cells and sections to control vertical text positioning.\n *\n * @example\n * ```typescript\n * createVerticalAlign(VerticalAlignTable.CENTER);\n * ```\n */\nexport const createVerticalAlign = (value: TableVerticalAlign | SectionVerticalAlign): string =>\n `<w:vAlign w:val=\"${value}\"/>`;\n"],"mappings":";;;;;;;;;;;;;;;AAUA,MAAa,YAAY;;CAEvB,QAAQ;;CAER,MAAM;AACR;;;;;;;;;;ACgBA,MAAa,cAAc;;CAEzB,MAAM;;CAEN,OAAO;;CAEP,QAAQ;;CAER,KAAK;;CAEL,OAAO;;CAEP,SAAS;;CAET,KAAK;;CAEL,KAAK;;CAEL,OAAO;AACT;;;;;;;;AASA,MAAa,aAAa;;CAExB,KAAK;;CAEL,OAAO;;CAEP,QAAQ;;CAER,YAAY;;CAEZ,MAAM;;CAEN,YAAY;AACd;;;;;;AAOA,MAAa,kBAAkB;;AAE7B,KAAK,KACP;;;;;;;;;;;;ACxEA,MAAa,gBAAgB;;CAE3B,UAAU;;CAEV,UAAU;AACZ;;;;;;;;;;;;;;;;;;ACCA,IAAY,8BAAL,yBAAA,6BAAA;CACL,4BAAA,UAAA;;;;CAIA,4BAAA,cAAA;;;;CAIA,4BAAA,gBAAA;;;;CAIA,4BAAA,kBAAA;;AACF,EAAA,CAAA,CAAA;;;;;;ACbA,MAAa,cAAc;;CAEzB,MAAM;;CAEN,MAAM;;CAEN,QAAQ;AACV;;;;AAKA,MAAa,kBAAkB;;CAE7B,QAAQ;;CAER,MAAM;;CAEN,MAAM;AACR;;;;AAKA,MAAa,YAAY;;CAEvB,QAAQ;;CAER,MAAM;;CAEN,MAAM;;CAEN,YAAY;;CAEZ,SAAS;;CAET,OAAO;AACT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1BA,MAAa,aAAa;;CAExB,MAAM;;CAEN,SAAS;;CAET,OAAO;AACT;;;;;;;;;;AChBA,MAAa,eAAe;;CAE1B,WAAW;;CAEX,wBAAwB;AAC1B;;;ACjBA,MAAa,cAAc;CACzB,wBAAwB;CAExB,WAAW;AACb;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACsEA,MAAa,cAAc;;CAEzB,OAAO;CACP,gBAAgB;CAChB,iBAAiB;CACjB,kBAAkB;CAClB,mBAAmB;CACnB,KAAK;CACL,YAAY;CACZ,YAAY;CACZ,YAAY;CACZ,YAAY;CACZ,YAAY;CACZ,YAAY;CACZ,YAAY;CACZ,YAAY;CACZ,YAAY;CACZ,YAAY;CACZ,WAAW;CACX,YAAY;CACZ,YAAY;CACZ,YAAY;CACZ,YAAY;CACZ,YAAY;CACZ,YAAY;CACZ,YAAY;CACZ,YAAY;CACZ,YAAY;CACZ,YAAY;CACZ,YAAY;CACZ,YAAY;CACZ,yBAAyB;CACzB,OAAO;CACP,qBAAqB;CACrB,sBAAsB;CACtB,uBAAuB;CACvB,8BAA8B;CAC9B,sBAAsB;CACtB,iBAAiB;AACnB;;;;;;AC7GA,MAAa,4BAA4B;;;;CAIvC,UAAU;;;;CAIV,SAAS;AACX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACSA,MAAa,qBAAqB;CAChC,QAAQ;CACR,QAAQ;CACR,KAAK;AACP;;;;;;;AAQA,MAAa,uBAAuB;CAClC,GAAG;CACH,MAAM;AACR;;;;;;;;;;;AAgBA,MAAa,uBAAuB,UAClC,oBAAoB,MAAM"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { A as settingsDesc, C as footnotesDesc,
|
|
2
|
-
import { t as DocxReadContext } from "./context-
|
|
1
|
+
import { A as settingsDesc, C as footnotesDesc, F as parseStyleDefinitions, M as buildNumberingCache, N as buildStyleCache, S as endnotesDesc, St as parseSdtBlock, T as parseTocFieldFromElements, Tt as parseSectionPropertiesEl, Yt as parseCustomXmlProperties, Zt as setBodyParseChild, _ as glossaryDesc, _t as parseParagraphProperties, a as appPropertiesDesc, bt as replaceRelsWithPlaceholders, gt as parseParagraph, i as webSettingsDesc, lt as setTableParseChild, nn as stringifyElement, o as customPropertiesDesc, p as commentsDesc, rt as parseNumberingDefinitions, s as corePropertiesDesc, u as contentTypesDesc, ut as tableDesc, v as bibliographyDesc, w as parseToc, y as fontTableDesc } from "./parts-DgrmHznM.mjs";
|
|
2
|
+
import { t as DocxReadContext } from "./context-CI0zR7rE.mjs";
|
|
3
3
|
import { parseArchive, toUint8Array } from "@office-open/core";
|
|
4
|
-
import { attr, findChild, findDeep, textOf } from "@office-open/xml";
|
|
4
|
+
import { attr, findChild, findDeep, findFirst, textOf } from "@office-open/xml";
|
|
5
5
|
//#region \0polyfill-node.global.js
|
|
6
6
|
var _polyfill_node_global_default = typeof _polyfill_node_global_default !== "undefined" ? _polyfill_node_global_default : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {};
|
|
7
7
|
//#endregion
|
|
@@ -1372,12 +1372,12 @@ function parseVmlStyle(styleStr) {
|
|
|
1372
1372
|
* Returns an object suitable for the { textbox: ... } SectionChild variant.
|
|
1373
1373
|
*/
|
|
1374
1374
|
function parseTextbox(el, ctx, parseChildren) {
|
|
1375
|
-
const shape =
|
|
1375
|
+
const shape = findFirst(el, "v:shape");
|
|
1376
1376
|
if (!shape) return {};
|
|
1377
1377
|
const opts = {};
|
|
1378
1378
|
const styleAttr = attr(shape, "style");
|
|
1379
1379
|
if (styleAttr) opts.style = parseVmlStyle(styleAttr);
|
|
1380
|
-
const textbox =
|
|
1380
|
+
const textbox = findFirst(shape, "v:textbox");
|
|
1381
1381
|
if (textbox) {
|
|
1382
1382
|
const txbxContent = findChild(textbox, "w:txbxContent");
|
|
1383
1383
|
if (txbxContent) {
|
|
@@ -1387,14 +1387,6 @@ function parseTextbox(el, ctx, parseChildren) {
|
|
|
1387
1387
|
}
|
|
1388
1388
|
return opts;
|
|
1389
1389
|
}
|
|
1390
|
-
function findDeep$1(parent, name) {
|
|
1391
|
-
const result = [];
|
|
1392
|
-
for (const child of parent.elements ?? []) {
|
|
1393
|
-
if (child.name === name) result.push(child);
|
|
1394
|
-
result.push(...findDeep$1(child, name));
|
|
1395
|
-
}
|
|
1396
|
-
return result;
|
|
1397
|
-
}
|
|
1398
1390
|
//#endregion
|
|
1399
1391
|
//#region src/parse/body.ts
|
|
1400
1392
|
/**
|
|
@@ -1459,7 +1451,7 @@ function parseSectionChild(el, ctx) {
|
|
|
1459
1451
|
case "w:p": {
|
|
1460
1452
|
const pict = findChild(el, "w:pict");
|
|
1461
1453
|
if (pict) {
|
|
1462
|
-
if (
|
|
1454
|
+
if (findFirst(pict, "v:textbox")) return { textbox: parseTextbox(pict, ctx, parseSectionChildrenElements) };
|
|
1463
1455
|
}
|
|
1464
1456
|
return { paragraph: parseParagraph(el, ctx) };
|
|
1465
1457
|
}
|
|
@@ -1486,6 +1478,10 @@ function parseSectionChild(el, ctx) {
|
|
|
1486
1478
|
};
|
|
1487
1479
|
const disp = attr(el, "w:displacedByCustomXml");
|
|
1488
1480
|
if (disp === "before" || disp === "after") bookmarkStart.displacedByCustomXml = disp;
|
|
1481
|
+
const colFirstRaw = attr(el, "w:colFirst");
|
|
1482
|
+
if (colFirstRaw !== void 0) bookmarkStart.colFirst = Number(colFirstRaw);
|
|
1483
|
+
const colLastRaw = attr(el, "w:colLast");
|
|
1484
|
+
if (colLastRaw !== void 0) bookmarkStart.colLast = Number(colLastRaw);
|
|
1489
1485
|
return { bookmarkStart };
|
|
1490
1486
|
}
|
|
1491
1487
|
return { rawXml: stringifyElement(el) };
|
|
@@ -1504,16 +1500,6 @@ function parseSectionChild(el, ctx) {
|
|
|
1504
1500
|
}
|
|
1505
1501
|
}
|
|
1506
1502
|
/**
|
|
1507
|
-
* Find a deep descendant element by name.
|
|
1508
|
-
*/
|
|
1509
|
-
function findDeepElement(parent, name) {
|
|
1510
|
-
for (const child of parent.elements ?? []) {
|
|
1511
|
-
if (child.name === name) return child;
|
|
1512
|
-
const found = findDeepElement(child, name);
|
|
1513
|
-
if (found) return found;
|
|
1514
|
-
}
|
|
1515
|
-
}
|
|
1516
|
-
/**
|
|
1517
1503
|
* Parse w:body element into SectionOptions[].
|
|
1518
1504
|
*
|
|
1519
1505
|
* Splits body content at w:sectPr boundaries to create sections.
|
|
@@ -1950,4 +1936,4 @@ function parseDocx(data) {
|
|
|
1950
1936
|
//#endregion
|
|
1951
1937
|
export { parseDocument as n, parseDocx as r, parseArchive as t };
|
|
1952
1938
|
|
|
1953
|
-
//# sourceMappingURL=parse-
|
|
1939
|
+
//# sourceMappingURL=parse-D6c9kHXh.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-D6c9kHXh.mjs","names":[],"sources":["../src/parts/alt-chunk/alt-chunk-parse.ts","../src/parts/custom-xml/custom-xml-parse.ts","../src/parts/sub-doc/sub-doc-parse.ts","../src/parts/textbox/textbox-parse.ts","../src/parse/body.ts","../src/parse.ts"],"sourcesContent":["/**\n * AltChunk parser for DOCX documents.\n *\n * Parses w:altChunk elements and extracts embedded content from the ZIP.\n *\n * @module\n */\nimport { attr } from \"@office-open/xml\";\nimport type { Element } from \"@office-open/xml\";\nimport type { AltChunkOptions } from \"@parts/alt-chunk/alt-chunk\";\n\nimport type { DocxReadContext } from \"../../context\";\n\n/**\n * Parse a w:altChunk element into AltChunkOptions.\n * Reads the referenced data from the ZIP package.\n */\nexport function parseAltChunk(el: Element, ctx: DocxReadContext): AltChunkOptions {\n const rId = attr(el, \"r:id\");\n if (!rId) {\n throw new Error(\"w:altChunk missing r:id attribute\");\n }\n\n // Look up the path from relationships\n const path = ctx.docx.partRefs.afChunks.get(rId);\n if (!path) {\n throw new Error(`AltChunk relationship ${rId} not found`);\n }\n\n // Read raw data from ZIP\n const data = ctx.docx.doc.getRaw(path);\n if (!data) {\n throw new Error(`AltChunk data not found at ${path}`);\n }\n\n // Determine content type from extension\n const ext = path.split(\".\").pop() ?? \"txt\";\n let contentType: \"text/html\" | \"application/rtf\" | \"text/plain\";\n let extension: \"html\" | \"rtf\" | \"txt\";\n\n switch (ext) {\n case \"html\":\n contentType = \"text/html\";\n extension = \"html\";\n break;\n case \"rtf\":\n contentType = \"application/rtf\";\n extension = \"rtf\";\n break;\n default:\n contentType = \"text/plain\";\n extension = \"txt\";\n break;\n }\n\n return {\n data,\n contentType,\n extension,\n };\n}\n","/**\n * Parser for custom XML block elements (w:customXml).\n *\n * @module\n */\nimport { attr, findChild } from \"@office-open/xml\";\nimport type { Element } from \"@office-open/xml\";\nimport type { SectionChild } from \"@shared/section\";\n\nimport type { DocxReadContext } from \"../../context\";\nimport { parseCustomXmlProperties } from \"../bodychildren\";\nimport type { CustomXmlBlockOptions } from \"./custom-xml\";\n\n/**\n * Parse w:customXml element into CustomXmlBlockOptions.\n *\n * Uses a callback for child parsing to avoid circular dependencies\n * (same pattern as parseTable).\n */\nexport function parseCustomXmlBlock(\n el: Element,\n ctx: DocxReadContext,\n parseChild: (el: Element, ctx: DocxReadContext) => SectionChild,\n): CustomXmlBlockOptions {\n const opts: Partial<CustomXmlBlockOptions> = {};\n\n // Required attribute\n const element = attr(el, \"w:element\");\n if (element) opts.element = element;\n\n // Optional URI\n const uri = attr(el, \"w:uri\");\n if (uri) opts.uri = uri;\n\n // Parse w:customXmlPr\n const xmlPr = findChild(el, \"w:customXmlPr\");\n if (xmlPr) {\n opts.customXmlPr = parseCustomXmlProperties(xmlPr);\n }\n\n // Parse block-level children\n const children: SectionChild[] = [];\n for (const child of el.elements ?? []) {\n if (child.name === \"w:customXmlPr\") continue;\n const parsed = parseChild(child, ctx);\n children.push(parsed);\n }\n if (children.length > 0) opts.children = children;\n\n return opts as CustomXmlBlockOptions;\n}\n","/**\n * SubDoc parser for DOCX documents.\n *\n * Parses w:subDoc elements and extracts embedded document data.\n *\n * @module\n */\nimport { attr } from \"@office-open/xml\";\nimport type { Element } from \"@office-open/xml\";\nimport type { SubDocOptions } from \"@parts/sub-doc/sub-doc\";\n\nimport type { DocxReadContext } from \"../../context\";\n\n/**\n * Parse a w:subDoc element into SubDocOptions.\n * Reads the referenced document data from the ZIP package.\n */\nexport function parseSubDoc(el: Element, ctx: DocxReadContext): SubDocOptions {\n const rId = attr(el, \"r:id\");\n if (!rId) {\n throw new Error(\"w:subDoc missing r:id attribute\");\n }\n\n const path = ctx.docx.partRefs.subDocs.get(rId);\n if (!path) {\n throw new Error(`SubDoc relationship ${rId} not found`);\n }\n\n const data = ctx.docx.doc.getRaw(path);\n if (!data) {\n throw new Error(`SubDoc data not found at ${path}`);\n }\n\n return { data };\n}\n","/**\n * Textbox parser for DOCX documents.\n *\n * Parses w:pict → v:shape → v:textbox → w:txbxContent elements.\n *\n * @module\n */\nimport { attr, findChild, findFirst } from \"@office-open/xml\";\nimport type { Element } from \"@office-open/xml\";\n\nimport type { DocxReadContext } from \"../../context\";\n\n/**\n * Parse VML shape style string into VmlShapeStyle-like object.\n */\nfunction parseVmlStyle(styleStr: string): Record<string, string> {\n const style: Record<string, string> = {};\n for (const part of styleStr.split(\";\")) {\n const [key, val] = part.split(\":\").map((s) => s.trim());\n if (key && val) style[key] = val;\n }\n return style;\n}\n\n/**\n * Parse a w:pict element that contains a textbox.\n * Returns an object suitable for the { textbox: ... } SectionChild variant.\n */\nexport function parseTextbox(\n el: Element,\n ctx: DocxReadContext,\n parseChildren: (elements: Element[], ctx: DocxReadContext) => unknown[],\n): {\n style?: Record<string, string>;\n children?: unknown[];\n} {\n const shape = findFirst(el, \"v:shape\");\n if (!shape) return {};\n\n const opts: Record<string, unknown> = {};\n\n // Parse VML style\n const styleAttr = attr(shape, \"style\");\n if (styleAttr) {\n opts.style = parseVmlStyle(styleAttr);\n }\n\n // Parse textbox content\n const textbox = findFirst(shape, \"v:textbox\");\n if (textbox) {\n const txbxContent = findChild(textbox, \"w:txbxContent\");\n if (txbxContent) {\n const childList = parseChildren(txbxContent.elements ?? [], ctx);\n if (childList.length > 0) opts.children = childList;\n }\n }\n\n return opts as { style?: Record<string, string>; children?: unknown[] };\n}\n","/**\n * Body parser for DOCX documents.\n *\n * Parses w:body → SectionOptions[] by splitting at w:sectPr boundaries.\n *\n * @module\n */\nimport { attr, findChild, findDeep, findFirst, textOf } from \"@office-open/xml\";\nimport type { Element } from \"@office-open/xml\";\nimport { parseAltChunk } from \"@parts/alt-chunk/alt-chunk-parse\";\nimport { parseCustomXmlBlock } from \"@parts/custom-xml/custom-xml-parse\";\nimport { parseSectionPropertiesEl } from \"@parts/document/body/section-properties/descriptor\";\nimport type { SectionPropertiesOptions } from \"@parts/document/body/section-properties/section-properties\";\nimport type { MarkupRangeOptions, BookmarkStartOptions } from \"@parts/paragraph/links/bookmark\";\nimport { parseSdtBlock } from \"@parts/sdt/sdt-parse\";\nimport { parseSubDoc } from \"@parts/sub-doc/sub-doc-parse\";\nimport { parseToc, parseTocFieldFromElements } from \"@parts/table-of-contents/toc-parse\";\nimport { tableDesc } from \"@parts/table/descriptor\";\nimport type { TableOptions } from \"@parts/table/table\";\nimport { parseTextbox } from \"@parts/textbox/textbox-parse\";\nimport type { SectionOptions } from \"@shared/section\";\nimport type { SectionChild } from \"@shared/section\";\n\nimport { parseParagraph } from \"../body\";\nimport { DocxReadContext } from \"../context\";\nimport { setBodyParseChild } from \"../parts\";\nimport { stringifyElement } from \"../util/stringify-element\";\n\n// ── Section properties parser ────────────────────────────────────────────────\n\n/** Internal parse result: section properties with extracted header/footer refs. */\ntype ParsedSectionProperties = SectionPropertiesOptions & {\n parsedHeaders?: Record<string, SectionChild[]>;\n parsedFooters?: Record<string, SectionChild[]>;\n};\n\n/**\n * Parse w:sectPr element into SectionPropertiesOptions.\n * Delegates to the section properties descriptor's parse method.\n */\nfunction parseSectionProperties(el: Element, ctx: DocxReadContext): ParsedSectionProperties {\n const opts: ParsedSectionProperties = parseSectionPropertiesEl(el);\n\n // Headers/footers - parse from references and store in a separate field\n const headerRefs: Record<string, SectionChild[]> = {};\n const footerRefs: Record<string, SectionChild[]> = {};\n\n for (const child of el.elements ?? []) {\n if (child.name === \"w:headerReference\") {\n const rId = attr(child, \"r:id\");\n const type = attr(child, \"w:type\");\n if (rId && type) {\n const headerChildren = parseHeaderFooterRef(rId, ctx);\n if (headerChildren) headerRefs[type] = headerChildren;\n }\n }\n if (child.name === \"w:footerReference\") {\n const rId = attr(child, \"r:id\");\n const type = attr(child, \"w:type\");\n if (rId && type) {\n const footerChildren = parseHeaderFooterRef(rId, ctx);\n if (footerChildren) footerRefs[type] = footerChildren;\n }\n }\n }\n\n if (Object.keys(headerRefs).length > 0) {\n opts.parsedHeaders = headerRefs;\n }\n if (Object.keys(footerRefs).length > 0) {\n opts.parsedFooters = footerRefs;\n }\n\n return opts;\n}\n\n/**\n * Parse a header/footer reference by following the relationship to its XML part.\n */\nfunction parseHeaderFooterRef(rId: string, ctx: DocxReadContext): SectionChild[] | undefined {\n const path = ctx.docx.partRefs.headers.get(rId) ?? ctx.docx.partRefs.footers.get(rId);\n if (!path) return undefined;\n\n const partEl = ctx.docx.doc.get(path);\n if (!partEl) return undefined;\n\n // The header/footer XML root element contains w:p, w:tbl, etc. Parse under\n // the part's own relationship scope so its drawings resolve images correctly.\n const children: SectionChild[] = [];\n ctx.withPart(path, () => {\n for (const child of partEl.elements ?? []) {\n const sectionChild = parseSectionChild(child, ctx);\n if (sectionChild !== undefined) {\n children.push(sectionChild);\n }\n }\n });\n\n return children.length > 0 ? children : undefined;\n}\n\n// ── Section child dispatch ───────────────────────────────────────────────────\n\n/**\n * Parse a single body child element into a SectionChild.\n */\nexport function parseSectionChild(el: Element, ctx: DocxReadContext): SectionChild {\n switch (el.name) {\n case \"w:p\": {\n // Check for textbox (w:pict containing v:textbox)\n const pict = findChild(el, \"w:pict\");\n if (pict) {\n const textbox = findFirst(pict, \"v:textbox\");\n if (textbox) {\n const textboxOpts = parseTextbox(pict, ctx, parseSectionChildrenElements);\n return { textbox: textboxOpts as SectionChild extends { textbox: infer T } ? T : never };\n }\n }\n\n return { paragraph: parseParagraph(el, ctx) };\n }\n case \"w:tbl\":\n return { table: tableDesc.parse(el, ctx) as TableOptions };\n case \"w:sdt\": {\n // Try TOC first\n const tocResult = parseToc(el, ctx);\n if (tocResult) {\n return { toc: tocResult };\n }\n // Otherwise parse as generic SDT block\n const sdtResult = parseSdtBlock(el, ctx, parseSectionChildrenElements);\n return {\n sdt: {\n properties: sdtResult.properties,\n children: sdtResult.children as SectionChild[] | undefined,\n },\n };\n }\n case \"w:altChunk\":\n return { altChunk: parseAltChunk(el, ctx) };\n case \"w:subDoc\":\n return { subDoc: parseSubDoc(el, ctx) };\n case \"w:customXml\":\n return { customXml: parseCustomXmlBlock(el, ctx, parseSectionChild) };\n case \"w:bookmarkStart\": {\n // Body-level range markers sitting between paragraphs (e.g. _Toc bookmark\n // ends grouped after a heading). Carry them as first-class children so\n // they round-trip even though they are not wrapped in a paragraph.\n const idRaw = attr(el, \"w:id\");\n const name = attr(el, \"w:name\");\n if (idRaw !== undefined && name) {\n const bookmarkStart: Partial<BookmarkStartOptions> = { id: Number(idRaw), name };\n const disp = attr(el, \"w:displacedByCustomXml\");\n if (disp === \"before\" || disp === \"after\") bookmarkStart.displacedByCustomXml = disp;\n const colFirstRaw = attr(el, \"w:colFirst\");\n if (colFirstRaw !== undefined) bookmarkStart.colFirst = Number(colFirstRaw);\n const colLastRaw = attr(el, \"w:colLast\");\n if (colLastRaw !== undefined) bookmarkStart.colLast = Number(colLastRaw);\n return { bookmarkStart: bookmarkStart as BookmarkStartOptions };\n }\n return { rawXml: stringifyElement(el) };\n }\n case \"w:bookmarkEnd\": {\n const idRaw = attr(el, \"w:id\");\n if (idRaw !== undefined) {\n const bookmarkEnd: Partial<MarkupRangeOptions> = { id: Number(idRaw) };\n const disp = attr(el, \"w:displacedByCustomXml\");\n if (disp === \"before\" || disp === \"after\") bookmarkEnd.displacedByCustomXml = disp;\n return { bookmarkEnd: bookmarkEnd as MarkupRangeOptions };\n }\n return { rawXml: stringifyElement(el) };\n }\n default:\n return { rawXml: stringifyElement(el) };\n }\n}\n\n// ── Body parsing with section splitting ───────────────────────────────────────\n\n/**\n * Parse w:body element into SectionOptions[].\n *\n * Splits body content at w:sectPr boundaries to create sections.\n * The last w:sectPr (child of w:body directly) defines the last section.\n * Previous w:sectPr elements appear inside w:pPr elements.\n */\nexport function parseBody(body: Element, ctx: DocxReadContext): SectionOptions[] {\n // Register the body child parser for descriptor parse callbacks\n setBodyParseChild(parseSectionChild);\n\n // Collect body children and detect section breaks\n interface SectionBoundary {\n index: number;\n sectPr: Element;\n }\n\n const bodyChildren: Element[] = [];\n const boundaries: SectionBoundary[] = [];\n\n for (const child of body.elements ?? []) {\n if (child.name === \"w:sectPr\") {\n // Final section properties (last section)\n boundaries.push({ index: bodyChildren.length, sectPr: child });\n } else {\n bodyChildren.push(child);\n\n // Check for inline sectPr in paragraph properties\n if (child.name === \"w:p\") {\n const pPr = findChild(child, \"w:pPr\");\n if (pPr) {\n const sectPr = findChild(pPr, \"w:sectPr\");\n if (sectPr) {\n boundaries.push({ index: bodyChildren.length, sectPr });\n }\n }\n }\n }\n }\n\n // If no boundaries, the whole body is one section\n if (boundaries.length === 0) {\n return [\n {\n children: parseBodyChildren(bodyChildren, ctx),\n },\n ];\n }\n\n // Split into sections\n const sections: SectionOptions[] = [];\n let start = 0;\n\n for (let i = 0; i < boundaries.length; i++) {\n const boundary = boundaries[i];\n // For inline sectPr (inside w:pPr), the containing paragraph was pushed to\n // bodyChildren. Exclude it — it's a section break marker, not content.\n // The last boundary uses a body-level sectPr, so no paragraph to exclude.\n const isInlineSectPr = i < boundaries.length - 1;\n const endIdx = isInlineSectPr ? Math.max(start, boundary.index - 1) : boundary.index;\n const sectionElements = bodyChildren.slice(start, endIdx);\n const parsedProps = parseSectionProperties(boundary.sectPr, ctx);\n\n // Extract headers/footers that were stored as parsedHeaders/parsedFooters\n const { parsedHeaders, parsedFooters } = parsedProps;\n\n // Build clean properties without internal fields\n const cleanProps = { ...parsedProps };\n delete cleanProps.parsedHeaders;\n delete cleanProps.parsedFooters;\n\n const section = {\n children: parseBodyChildren(sectionElements, ctx),\n properties: cleanProps,\n ...(parsedHeaders ? { headers: parsedHeaders } : {}),\n ...(parsedFooters ? { footers: parsedFooters } : {}),\n } as SectionOptions;\n\n sections.push(section);\n start = boundary.index;\n }\n\n // If there are elements after the last boundary, they form the last section\n // with the body-level w:sectPr (already captured)\n // Actually the body-level sectPr IS the last boundary\n\n return sections;\n}\n\n// ── Cross-paragraph TOC field aggregation ───────────────────────────────────\n\n/**\n * Net field-nesting change across all descendant fldChar markers\n * (begin: +1, end: -1). Balances cross-paragraph field boundaries without a\n * stack — the running depth hits 0 exactly when the outermost field closes.\n */\nfunction countFieldDelta(el: Element): number {\n let delta = 0;\n const walk = (node: Element): void => {\n if (node.name === \"w:fldChar\") {\n const type = attr(node, \"w:fldCharType\");\n if (type === \"begin\") delta += 1;\n else if (type === \"end\") delta -= 1;\n }\n for (const c of node.elements ?? []) {\n if (c.type === \"element\") walk(c);\n }\n };\n walk(el);\n return delta;\n}\n\n/**\n * True when a w:p opens a bare TOC complex field: it carries a fldChar begin\n * whose instrText starts with \"TOC\". Such fields span multiple paragraphs and\n * defeat the per-paragraph field accumulator, so they are aggregated as rawXml.\n */\nfunction isTocFieldBegin(el: Element): boolean {\n if (el.name !== \"w:p\") return false;\n let hasBegin = false;\n let instr = \"\";\n const walk = (node: Element): void => {\n if (node.name === \"w:fldChar\" && attr(node, \"w:fldCharType\") === \"begin\") hasBegin = true;\n if (node.name === \"w:instrText\") instr += textOf(node);\n for (const c of node.elements ?? []) {\n if (c.type === \"element\") walk(c);\n }\n };\n walk(el);\n return hasBegin && instr.trim().toUpperCase().startsWith(\"TOC\");\n}\n\n/**\n * Parse a run of body-level elements into SectionChild[], aggregating any\n * cross-paragraph TOC complex field into a single rawXml child so its nested\n * HYPERLINK/PAGEREF fields and bookmark markers round-trip intact.\n */\nfunction parseBodyChildren(elements: Element[], ctx: DocxReadContext): SectionChild[] {\n const children: SectionChild[] = [];\n let tocBuffer: Element[] | null = null;\n let tocDepth = 0;\n\n const flushToc = (): void => {\n if (!tocBuffer) return;\n children.push(buildTocChild(tocBuffer));\n // The TOC field's closing paragraph often also carries a trailing page\n // break (the section break before the first heading). buildTocChild\n // discards the rendered result, so rescue that page break as a standalone\n // child to avoid silently dropping it on round-trip.\n const lastEl = tocBuffer[tocBuffer.length - 1];\n const pageBreakCount = findDeep(lastEl, \"w:br\").filter(\n (b) => attr(b, \"w:type\") === \"page\",\n ).length;\n for (let i = 0; i < pageBreakCount; i++) {\n children.push({ paragraph: { children: [{ pageBreak: true }] } });\n }\n tocBuffer = null;\n tocDepth = 0;\n };\n\n for (const el of elements) {\n if (tocBuffer !== null) {\n tocBuffer.push(el);\n tocDepth += countFieldDelta(el);\n if (tocDepth <= 0) flushToc();\n continue;\n }\n if (isTocFieldBegin(el)) {\n tocBuffer = [el];\n tocDepth = countFieldDelta(el);\n if (tocDepth <= 0) flushToc();\n continue;\n }\n children.push(parseSectionChild(el, ctx));\n }\n\n // Unclosed TOC field at end of content — flush what we have (best effort).\n flushToc();\n\n return children;\n}\n\n/**\n * Build a structured TOC SectionChild from a captured bare TOC field. Extracts\n * the field instruction (switches → TableOfContentsOptions) and discards the\n * rendered result (separate→end content) — Word regenerates it from headings on\n * open via the dirty flag emitted by stringifyTableOfContents.\n */\nfunction buildTocChild(els: Element[]): SectionChild {\n return { toc: parseTocFieldFromElements(els) };\n}\n\n/**\n * Parse a list of elements into SectionChild[].\n * Used by SDT and textbox parsers for their content.\n */\nfunction parseSectionChildrenElements(elements: Element[], ctx: DocxReadContext): SectionChild[] {\n return parseBodyChildren(elements, ctx);\n}\n","import type { ParsedArchive } from \"@office-open/core\";\nimport { parseArchive } from \"@office-open/core\";\nimport type { DataType } from \"@office-open/core\";\nimport { toUint8Array } from \"@office-open/core\";\nimport { attr } from \"@office-open/xml\";\nimport type { Element } from \"@office-open/xml\";\nimport { appPropertiesDesc } from \"@parts/app-properties\";\nimport { bibliographyDesc } from \"@parts/bibliography\";\nimport { setBodyParseChild } from \"@parts/bodychildren\";\nimport { commentsDesc } from \"@parts/comments\";\nimport { contentTypesDesc } from \"@parts/contenttypes\";\nimport { corePropertiesDesc } from \"@parts/core-properties\";\nimport type { DocumentOptions } from \"@parts/core-properties\";\nimport { customPropertiesDesc } from \"@parts/custom-properties\";\nimport { endnotesDesc } from \"@parts/endnotes/descriptor\";\nimport { fontTableDesc } from \"@parts/fonts/descriptor\";\nimport type { EmbeddedFontOptionsWithKey } from \"@parts/fonts/font-wrapper\";\nimport { footnotesDesc } from \"@parts/footnotes/descriptor\";\nimport { glossaryDesc } from \"@parts/glossary-document\";\nimport { parseNumberingDefinitions } from \"@parts/numbering/numbering\";\nimport { settingsDesc } from \"@parts/settings/descriptor\";\nimport { buildStyleCache, buildNumberingCache, parseStyleDefinitions } from \"@parts/styles/styles\";\nimport { setTableParseChild } from \"@parts/table/descriptor\";\nimport { webSettingsDesc } from \"@parts/web-settings\";\n\nimport { parseParagraphProperties } from \"./body\";\nimport { DocxReadContext } from \"./context\";\nimport { parseBody, parseSectionChild } from \"./parse/body\";\nimport { replaceRelsWithPlaceholders } from \"./util/replace-media-placeholders\";\nimport { stringifyElement } from \"./util/stringify-element\";\n\nexport { parseArchive };\n\n/**\n * All part paths extracted from the DOCX package.\n * Field names correspond directly to the OOXML directory structure.\n */\nexport interface DocxPartRefs {\n /** word/headerN.xml keyed by rId */\n headers: Map<string, string>;\n /** word/footerN.xml keyed by rId */\n footers: Map<string, string>;\n /** word/footnotes.xml */\n footnotes?: string;\n /** word/endnotes.xml */\n endnotes?: string;\n /** word/comments.xml */\n comments?: string;\n /** Hyperlink targets keyed by rId (external URLs) */\n hyperlinks: Map<string, string>;\n /** word/charts/chartN.xml keyed by rId */\n charts: Map<string, string>;\n /** word/diagrams/dataN.xml keyed by rId */\n diagramData: Map<string, string>;\n /** word/media/* keyed by rId (from document.xml.rels) */\n media: Map<string, string>;\n /**\n * Per-part image/media relationships. Each part (document, headers, footers,\n * footnotes, …) has its own .rels with independent rId numbering, so drawings\n * inside a part must resolve images against that part's rels. Maps\n * partPath → (rId → mediaPath).\n */\n partMedia: Map<string, Map<string, string>>;\n /** Alternative format chunks (word/afchunkN.*) keyed by rId */\n afChunks: Map<string, string>;\n /** Sub-documents (word/subdocs/subdocN.docx) keyed by rId */\n subDocs: Map<string, string>;\n /** word/bibliography.xml */\n bibliography?: string;\n /** word/glossary/document.xml */\n glossary?: string;\n}\n\nexport interface DocxDocument {\n doc: ParsedArchive;\n /** word/document.xml → root w:document element */\n documentRoot: Element;\n /** word/document.xml → w:body element */\n body: Element;\n /** word/document.xml → w:background element */\n background?: Element;\n /** word/styles.xml */\n styles?: Element;\n /** word/numbering.xml */\n numbering?: Element;\n /** word/settings.xml */\n settings?: Element;\n /** word/fontTable.xml */\n fontTable?: Element;\n /** word/webSettings.xml */\n webSettings?: Element;\n partRefs: DocxPartRefs;\n /** docProps/core.xml */\n coreProps?: string;\n /** docProps/app.xml */\n appProps?: string;\n /** docProps/custom.xml */\n customProps?: string;\n /** [Content_Types].xml */\n contentTypes?: Element;\n}\n\nfunction resolveRelsPath(target: string): string {\n if (target.startsWith(\"/\")) return target.slice(1);\n if (target.startsWith(\"../\")) return target.replace(\"../\", \"\");\n return `word/${target}`;\n}\n\n/**\n * Resolve each embedded font's .odttf bytes through fontTable.xml.rels.\n * Reads the binary verbatim and flags it raw so the compiler copies it as-is\n * instead of re-obfuscating (the fontKey already matches the bytes).\n */\nfunction resolveEmbeddedFontData(fonts: EmbeddedFontOptionsWithKey[], doc: ParsedArchive): void {\n const relsEl = doc.get(\"word/_rels/fontTable.xml.rels\");\n if (!relsEl) return;\n const ridToPath = new Map<string, string>();\n for (const child of relsEl.elements ?? []) {\n if (child.name !== \"Relationship\") continue;\n const type = attr(child, \"Type\") ?? \"\";\n if (!type.includes(\"/font\")) continue;\n const id = attr(child, \"Id\") ?? \"\";\n const target = attr(child, \"Target\") ?? \"\";\n if (id && target) ridToPath.set(id, resolveRelsPath(target));\n }\n for (const font of fonts) {\n if (!font.embedRid) continue;\n const odttfPath = ridToPath.get(font.embedRid);\n if (!odttfPath) continue;\n const bytes = doc.getRaw(odttfPath);\n if (bytes) {\n font.data = Buffer.from(bytes);\n font.rawOdttf = true;\n font.odttfPath = odttfPath;\n }\n }\n}\n\nfunction parseDocPartRefs(doc: ParsedArchive): DocxPartRefs {\n const refs: DocxPartRefs = {\n headers: new Map(),\n footers: new Map(),\n hyperlinks: new Map(),\n charts: new Map(),\n diagramData: new Map(),\n media: new Map(),\n partMedia: new Map(),\n afChunks: new Map(),\n subDocs: new Map(),\n };\n\n const relsEl = doc.get(\"word/_rels/document.xml.rels\");\n if (!relsEl) return refs;\n\n for (const child of relsEl.elements ?? []) {\n if (child.name !== \"Relationship\") continue;\n const type = attr(child, \"Type\") ?? \"\";\n const target = attr(child, \"Target\") ?? \"\";\n const id = attr(child, \"Id\") ?? \"\";\n if (!target) continue;\n\n const path = resolveRelsPath(target);\n\n if (type.includes(\"/header\")) {\n refs.headers.set(id, path);\n } else if (type.includes(\"/footer\")) {\n refs.footers.set(id, path);\n } else if (type.includes(\"/footnotes\")) {\n refs.footnotes = path;\n } else if (type.includes(\"/endnotes\")) {\n refs.endnotes = path;\n } else if (type.includes(\"/comments\")) {\n refs.comments = path;\n } else if (type.includes(\"/chart\")) {\n refs.charts.set(id, path);\n } else if (type.includes(\"/diagramData\")) {\n refs.diagramData.set(id, path);\n } else if (type.includes(\"/image\") || type.includes(\"/media\")) {\n refs.media.set(id, path);\n } else if (type.includes(\"/aFChunk\")) {\n refs.afChunks.set(id, path);\n } else if (type.includes(\"/subDocument\")) {\n refs.subDocs.set(id, path);\n } else if (type.includes(\"/bibliography\")) {\n refs.bibliography = path;\n } else if (type.includes(\"/glossaryDocument\")) {\n refs.glossary = path;\n } else if (type.includes(\"/hyperlink\")) {\n refs.hyperlinks.set(id, target);\n }\n }\n\n // Per-part image relationships. Each part carries its own .rels with\n // independent rId numbering (document rId1 ≠ header rId1), so collect them\n // keyed by part path; drawings inside a part resolve images through its\n // own rels. Covers document, headers, footers, footnotes, endnotes, comments.\n for (const relsPath of doc.keys(\"word/_rels/\")) {\n if (!relsPath.endsWith(\".rels\")) continue;\n const relsEl = doc.get(relsPath);\n if (!relsEl) continue;\n const partPath = \"word/\" + relsPath.slice(\"word/_rels/\".length, -\".rels\".length);\n for (const rel of relsEl.elements ?? []) {\n if (rel.name !== \"Relationship\") continue;\n const type = attr(rel, \"Type\") ?? \"\";\n if (!type.includes(\"/image\") && !type.includes(\"/media\")) continue;\n const id = attr(rel, \"Id\") ?? \"\";\n const target = attr(rel, \"Target\") ?? \"\";\n if (!id || !target) continue;\n let partMap = refs.partMedia.get(partPath);\n if (!partMap) {\n partMap = new Map();\n refs.partMedia.set(partPath, partMap);\n }\n partMap.set(id, resolveRelsPath(target));\n }\n }\n\n return refs;\n}\n\nfunction parseRootRels(doc: ParsedArchive): {\n coreProps?: string;\n appProps?: string;\n customProps?: string;\n} {\n const relsEl = doc.get(\"_rels/.rels\");\n if (!relsEl) return {};\n\n let coreProps: string | undefined;\n let appProps: string | undefined;\n let customProps: string | undefined;\n\n for (const child of relsEl.elements ?? []) {\n if (child.name !== \"Relationship\") continue;\n const type = attr(child, \"Type\") ?? \"\";\n const target = attr(child, \"Target\") ?? \"\";\n if (!target) continue;\n\n const path = target.startsWith(\"/\") ? target.slice(1) : target;\n\n if (type.includes(\"/core-properties\")) {\n coreProps = path;\n } else if (type.includes(\"/extended-properties\")) {\n appProps = path;\n } else if (type.includes(\"/custom-properties\")) {\n customProps = path;\n }\n }\n\n return { coreProps, appProps, customProps };\n}\n\n/**\n * Parse a .docx file and convert it into DocumentOptions.\n *\n * This is the main public API for parsing DOCX files.\n * The returned options can be passed directly to `new Document(parsed)`\n * to recreate the document.\n *\n * @param data - Raw bytes of a .docx file\n * @returns Document options including sections and metadata\n */\nexport function parseDocument(data: DataType): DocumentOptions {\n const docx = parseDocx(data);\n const ctx = new DocxReadContext(\n docx,\n buildStyleCache(docx.styles),\n buildNumberingCache(docx.numbering),\n );\n\n // Register the child parser for table and body child descriptors\n setTableParseChild(parseSectionChild);\n setBodyParseChild(parseSectionChild);\n\n const sections = parseBody(docx.body, ctx);\n\n const opts: Partial<DocumentOptions> = { sections };\n\n // Document conformance class (w:document/@w:conformance)\n const conformance = attr(docx.documentRoot, \"w:conformance\");\n if (conformance === \"strict\" || conformance === \"transitional\") opts.conformance = conformance;\n\n // Background (w:background in document.xml)\n if (docx.background) {\n const hasChildren = (docx.background.elements ?? []).some((e) => e.type === \"element\");\n if (hasChildren) {\n // VML/structured background (e.g. v:background/v:fill pattern with a\n // texture image) that doesn't fit the color/theme model: carry the\n // element verbatim, rewriting relationship refs to {fileName} placeholders\n // so the media round-trips via the compiler's placeholder pass.\n const { rawXml, rawMedia } = replaceRelsWithPlaceholders(\n stringifyElement(docx.background),\n ctx,\n \"background\",\n );\n opts.background = rawMedia.length > 0 ? { rawXml, rawMedia } : { rawXml };\n } else {\n const bg: NonNullable<DocumentOptions[\"background\"]> = {};\n const color = attr(docx.background, \"w:color\");\n if (color) bg.color = color;\n const themeColor = attr(docx.background, \"w:themeColor\");\n if (themeColor) bg.themeColor = themeColor;\n const themeShade = attr(docx.background, \"w:themeShade\");\n if (themeShade) bg.themeShade = themeShade;\n const themeTint = attr(docx.background, \"w:themeTint\");\n if (themeTint) bg.themeTint = themeTint;\n if (Object.keys(bg).length > 0) opts.background = bg;\n }\n }\n\n // Core properties\n if (docx.coreProps) {\n const corePropsEl = docx.doc.get(docx.coreProps);\n if (corePropsEl) {\n const cp = corePropertiesDesc.parse(corePropsEl, ctx);\n if (cp.title) opts.title = cp.title;\n if (cp.subject) opts.subject = cp.subject;\n if (cp.creator) opts.creator = cp.creator;\n if (cp.keywords) opts.keywords = cp.keywords;\n if (cp.description) opts.description = cp.description;\n if (cp.lastModifiedBy) opts.lastModifiedBy = cp.lastModifiedBy;\n if (cp.revision) opts.revision = cp.revision;\n if (cp.lastPrinted) opts.lastPrinted = cp.lastPrinted;\n if (cp.created) opts.created = cp.created;\n if (cp.modified) opts.modified = cp.modified;\n }\n }\n\n // App (extended) properties\n if (docx.appProps) {\n const appPropsEl = docx.doc.get(docx.appProps);\n if (appPropsEl) {\n const ap = appPropertiesDesc.parse(appPropsEl, ctx);\n if (Object.keys(ap).length > 0) opts.appProperties = ap;\n }\n }\n\n // Settings — parse produces a structured SettingsOptions aligned with\n // generate (no verbatim rawXml fallback). Assign wholesale so context.ts\n // spreads it into _settingsOptions for the descriptor's stringify input.\n if (docx.settings) {\n opts.settings = settingsDesc.parse(docx.settings, ctx);\n }\n\n // Web settings\n if (docx.webSettings) {\n const wsOpts = webSettingsDesc.parse(docx.webSettings, ctx);\n if (Object.keys(wsOpts).length > 0) opts.webSettings = wsOpts;\n }\n\n // Custom properties\n if (docx.customProps) {\n const customPropsEl = docx.doc.get(docx.customProps);\n if (customPropsEl) {\n const cpResult = customPropertiesDesc.parse(customPropsEl, ctx);\n if (cpResult.properties && cpResult.properties.length > 0) {\n opts.customProperties = cpResult.properties;\n }\n }\n }\n\n // Comments content\n if (docx.partRefs.comments) {\n const commentsEl = docx.doc.get(docx.partRefs.comments);\n if (commentsEl) {\n const commentsResult = ctx.withPart(docx.partRefs.comments, () =>\n commentsDesc.parse(commentsEl, ctx),\n );\n const children = commentsResult.children;\n if (children && children.length > 0) {\n opts.comments = { children } as unknown as DocumentOptions[\"comments\"];\n }\n }\n }\n\n // Footnotes content\n if (docx.partRefs.footnotes) {\n const footnotesEl = docx.doc.get(docx.partRefs.footnotes);\n if (footnotesEl) {\n const fnResult = ctx.withPart(docx.partRefs.footnotes, () =>\n footnotesDesc.parse(footnotesEl, ctx),\n );\n const footnotesMap: Record<string, { children: unknown[] }> = {};\n for (const [id, paragraphs] of fnResult.notes) {\n footnotesMap[String(id)] = { children: paragraphs };\n }\n // Preserve round-tripped separators so the generated ids stay consistent\n // with settings.footnotePr (which references them).\n if (\n Object.keys(footnotesMap).length > 0 ||\n fnResult.separator ||\n fnResult.continuationSeparator\n ) {\n const fnOpts = footnotesMap as NonNullable<DocumentOptions[\"footnotes\"]>;\n if (fnResult.separator) fnOpts.separator = fnResult.separator;\n if (fnResult.continuationSeparator)\n fnOpts.continuationSeparator = fnResult.continuationSeparator;\n opts.footnotes = fnOpts;\n }\n }\n }\n\n // Endnotes content\n if (docx.partRefs.endnotes) {\n const endnotesEl = docx.doc.get(docx.partRefs.endnotes);\n if (endnotesEl) {\n const enResult = ctx.withPart(docx.partRefs.endnotes, () =>\n endnotesDesc.parse(endnotesEl, ctx),\n );\n const endnotesMap: Record<string, { children: unknown[] }> = {};\n for (const [id, paragraphs] of enResult.notes) {\n endnotesMap[String(id)] = { children: paragraphs };\n }\n if (\n Object.keys(endnotesMap).length > 0 ||\n enResult.separator ||\n enResult.continuationSeparator\n ) {\n const enOpts = endnotesMap as NonNullable<DocumentOptions[\"endnotes\"]>;\n if (enResult.separator) enOpts.separator = enResult.separator;\n if (enResult.continuationSeparator)\n enOpts.continuationSeparator = enResult.continuationSeparator;\n opts.endnotes = enOpts;\n }\n }\n }\n\n // Styles definitions\n if (docx.styles) {\n const styleOpts = parseStyleDefinitions(docx.styles, parseParagraphProperties, ctx);\n if (styleOpts) opts.styles = styleOpts;\n }\n\n // Numbering definitions\n if (docx.numbering) {\n const numOpts = parseNumberingDefinitions(docx.numbering, parseParagraphProperties, ctx);\n if (numOpts) opts.numbering = numOpts;\n }\n\n // Font table\n if (docx.fontTable) {\n const ftResult = fontTableDesc.parse(docx.fontTable, ctx);\n if (ftResult.fonts && ftResult.fonts.length > 0) {\n resolveEmbeddedFontData(ftResult.fonts, docx.doc);\n opts.fonts = ftResult.fonts;\n }\n }\n\n // Bibliography\n if (docx.partRefs.bibliography) {\n const bibEl = docx.doc.get(docx.partRefs.bibliography);\n if (bibEl) {\n const bibResult = bibliographyDesc.parse(bibEl, ctx);\n if (bibResult.sources && bibResult.sources.length > 0) opts.bibliography = bibResult;\n }\n }\n\n // Glossary document\n if (docx.partRefs.glossary) {\n const glossaryEl = docx.doc.get(docx.partRefs.glossary);\n if (glossaryEl) {\n const glossaryResult = ctx.withPart(docx.partRefs.glossary, () =>\n glossaryDesc.parse(glossaryEl, ctx),\n );\n if (glossaryResult.parts && glossaryResult.parts.length > 0) opts.glossary = glossaryResult;\n }\n }\n\n // Content types\n if (docx.contentTypes) {\n const ctResult = contentTypesDesc.parse(docx.contentTypes, ctx);\n if (ctResult) opts.contentTypes = ctResult;\n }\n\n // Raw passthrough: parts generate() doesn't rebuild (word/theme/*, customXml/*).\n // Carried verbatim so their [Content_Types] declarations stay valid and the\n // package opens in Word. (Media/fonts/headers/etc. are rebuilt by the compiler\n // and must NOT be passed through — they'd otherwise duplicate under renamed paths.)\n const rawParts: { path: string; data: Uint8Array }[] = [];\n for (const prefix of [\"word/theme/\", \"customXml/\"]) {\n for (const p of docx.doc.keys(prefix)) {\n if (p.endsWith(\"/\")) continue;\n const data = docx.doc.getRaw(p);\n if (data) rawParts.push({ path: p, data });\n }\n }\n if (rawParts.length > 0) opts.rawParts = rawParts;\n\n return opts as DocumentOptions;\n}\n\nexport function parseDocx(data: DataType): DocxDocument {\n const uint8 = toUint8Array(data);\n const doc = parseArchive(uint8);\n\n const documentEl = doc.get(\"word/document.xml\");\n if (!documentEl) throw new Error(\"word/document.xml not found\");\n const body = documentEl.elements?.find((e) => e.name === \"w:body\");\n if (!body) throw new Error(\"w:body not found in word/document.xml\");\n const background = documentEl.elements?.find((e) => e.name === \"w:background\");\n\n const styles = doc.get(\"word/styles.xml\");\n const numbering = doc.get(\"word/numbering.xml\");\n const settings = doc.get(\"word/settings.xml\");\n const fontTable = doc.get(\"word/fontTable.xml\");\n const webSettings = doc.get(\"word/webSettings.xml\");\n\n const partRefs = parseDocPartRefs(doc);\n const { coreProps, appProps, customProps } = parseRootRels(doc);\n\n const contentTypes = doc.get(\"[Content_Types].xml\");\n\n return {\n doc,\n documentRoot: documentEl,\n body,\n background,\n styles,\n numbering,\n settings,\n fontTable,\n webSettings,\n partRefs,\n coreProps,\n appProps,\n customProps,\n contentTypes,\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
|
package/dist/parse.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { _ as parseArchive, g as DocxPartRefs, h as DocxDocument, v as parseDocument, y as parseDocx } from "./core-properties-
|
|
1
|
+
import { _ as parseArchive, g as DocxPartRefs, h as DocxDocument, v as parseDocument, y as parseDocx } from "./core-properties-Dp-aEoX3.mjs";
|
|
2
2
|
export { DocxDocument, DocxPartRefs, parseArchive, parseDocument, parseDocx };
|
package/dist/parse.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as parseDocument, r as parseDocx, t as parseArchive } from "./parse-
|
|
1
|
+
import { n as parseDocument, r as parseDocx, t as parseArchive } from "./parse-D6c9kHXh.mjs";
|
|
2
2
|
export { parseArchive, parseDocument, parseDocx };
|