@docen/docx 0.3.3 → 0.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/dist/blockquote-DY80QC06.d.mts +21 -0
  2. package/dist/bullet-list-DF60pnSL.d.mts +12 -0
  3. package/dist/converters/docx.d.mts +1 -1
  4. package/dist/converters/docx.mjs +124 -25
  5. package/dist/converters/html.d.mts +1 -1
  6. package/dist/converters/html.mjs +1 -1
  7. package/dist/converters/markdown.d.mts +1 -1
  8. package/dist/converters/markdown.mjs +1 -1
  9. package/dist/converters/patch.d.mts +1 -1
  10. package/dist/converters/prepare.d.mts +1 -1
  11. package/dist/converters/prepare.mjs +6 -9
  12. package/dist/{core-B8ba_FNi.mjs → core-BnF8XhVE.mjs} +180 -31
  13. package/dist/core-DC0_-WcE.d.mts +387 -0
  14. package/dist/core.d.mts +1 -1
  15. package/dist/core.mjs +1 -1
  16. package/dist/details-Dd5MqqmR.d.mts +17 -0
  17. package/dist/editor.d.mts +1 -1
  18. package/dist/editor.mjs +1 -1
  19. package/dist/extensions/blockquote.d.mts +2 -22
  20. package/dist/extensions/bullet-list.d.mts +2 -0
  21. package/dist/extensions/bullet-list.mjs +21 -0
  22. package/dist/extensions/code-block.d.mts +1 -18
  23. package/dist/extensions/column-break.d.mts +1 -30
  24. package/dist/extensions/column-break.mjs +1 -1
  25. package/dist/extensions/details.d.mts +2 -18
  26. package/dist/extensions/document.mjs +2 -1
  27. package/dist/extensions/extensions.d.mts +10 -6
  28. package/dist/extensions/extensions.mjs +9 -4
  29. package/dist/extensions/formatting-marks.d.mts +1 -37
  30. package/dist/extensions/formatting-marks.mjs +1 -1
  31. package/dist/extensions/image.d.mts +1 -1
  32. package/dist/extensions/image.mjs +20 -4
  33. package/dist/extensions/index.d.mts +15 -2
  34. package/dist/extensions/index.mjs +17 -2
  35. package/dist/extensions/link.d.mts +2 -0
  36. package/dist/extensions/link.mjs +56 -0
  37. package/dist/extensions/mention.d.mts +2 -24
  38. package/dist/extensions/ordered-list.d.mts +1 -24
  39. package/dist/extensions/ordered-list.mjs +10 -1
  40. package/dist/extensions/page-break.d.mts +1 -1
  41. package/dist/extensions/page-break.mjs +1 -1
  42. package/dist/extensions/paragraph.mjs +13 -0
  43. package/dist/extensions/passthrough.d.mts +2 -2
  44. package/dist/extensions/passthrough.mjs +2 -2
  45. package/dist/extensions/scroll.d.mts +2 -0
  46. package/dist/extensions/scroll.mjs +33 -0
  47. package/dist/extensions/section-break.d.mts +1 -43
  48. package/dist/extensions/section-break.mjs +1 -1
  49. package/dist/extensions/tab.d.mts +2 -0
  50. package/dist/extensions/tab.mjs +2 -0
  51. package/dist/extensions/task-item.d.mts +2 -26
  52. package/dist/extensions/tiptap.d.mts +1 -1
  53. package/dist/extensions/toc-field.d.mts +1 -1
  54. package/dist/extensions/toc-field.mjs +1 -1
  55. package/dist/extensions/wpg-group.d.mts +2 -2
  56. package/dist/extensions/wpg-group.mjs +2 -2
  57. package/dist/extensions/wps-shape.d.mts +1 -1
  58. package/dist/extensions/wps-shape.mjs +1 -1
  59. package/dist/index.d.mts +31 -7
  60. package/dist/index.mjs +17 -2
  61. package/dist/link-BawPjQZR.d.mts +6 -0
  62. package/dist/mention-BGLzLVYw.d.mts +23 -0
  63. package/dist/ordered-list-DFAe-YEV.d.mts +25 -0
  64. package/dist/scroll-ZNeThJsJ.d.mts +18 -0
  65. package/dist/task-item-B0ntvQ1Y.d.mts +25 -0
  66. package/dist/{tiptap-pZsNPsvV.d.mts → tiptap-BKqn41uT.d.mts} +2 -2
  67. package/package.json +3 -3
  68. package/dist/core-DRaLI8nd.d.mts +0 -203
@@ -1,38 +1,2 @@
1
- import { r as Extension } from "../core-DRaLI8nd.mjs";
2
-
3
- //#region src/extensions/formatting-marks.d.ts
4
- /**
5
- * FormattingMarks — paints the non-printing paragraph mark via ProseMirror
6
- * widget decorations.
7
- *
8
- * CSS `p::after { content: "…" }` does NOT work on a ProseMirror-managed
9
- * paragraph: the view owns the DOM and the trailing-break kludge pushes the
10
- * pseudo-element off the visible line, so the mark never appears (verified).
11
- * Marijn Haverbeke endorses widget decorations for exactly this use case
12
- * (https://discuss.prosemirror.net/t/1442). Each textblock gets a widget at its
13
- * closing position (inside the textblock, so it stays on the content's line)
14
- * holding a non-editable `<span class="docen-para-mark">`. `side: 1` keeps the
15
- * mark to the right of a cursor resting at the paragraph end (the cursor always
16
- * precedes its own paragraph mark).
17
- *
18
- * Glyph: a down-then-left return arrow (↲, U+21B2 "downwards arrow with tip
19
- * leftwards" — the Enter-key glyph). Word/WPS use the pilcrow ¶ for paragraph
20
- * marks; that down-then-left arrow is Word's line-break glyph — adopted here as
21
- * the paragraph mark per the project's visual preference.
22
- *
23
- * Performance: the widget set is cached in plugin state and rebuilt only on a
24
- * doc change or a marks toggle — NOT on every selectionUpdate. Without the
25
- * cache, each caret move / selection re-traverses the whole document (one
26
- * widget per textblock) and rebuilds the set, which costs 200ms+ on 1000-page
27
- * documents. Pure selection transactions now reuse the cached set in O(1).
28
- */
29
- declare const FormattingMarks: Extension<any, any>;
30
- declare module "@tiptap/core" {
31
- interface Commands<ReturnType> {
32
- formattingMarks: {
33
- /** Toggle the non-printing paragraph marks on or off. */toggleFormattingMarks: () => ReturnType;
34
- };
35
- }
36
- }
37
- //#endregion
1
+ import { O as FormattingMarks } from "../core-DC0_-WcE.mjs";
38
2
  export { FormattingMarks };
@@ -1,2 +1,2 @@
1
- import { v as FormattingMarks } from "../core-B8ba_FNi.mjs";
1
+ import { S as FormattingMarks } from "../core-BnF8XhVE.mjs";
2
2
  export { FormattingMarks };
@@ -1,2 +1,2 @@
1
- import { C as Image, E as renderDocx, S as CropRenderContext, T as renderCropAttrs, w as parseDocx } from "../core-DRaLI8nd.mjs";
1
+ import { A as Image, M as renderCropAttrs, N as renderDocx, j as parseDocx, k as CropRenderContext } from "../core-DC0_-WcE.mjs";
2
2
  export { CropRenderContext, Image, parseDocx, renderCropAttrs, renderDocx };
@@ -54,8 +54,8 @@ function renderDocx(node) {
54
54
  }
55
55
  }
56
56
  if (!imageOpts.data) return null;
57
- const width = attrs.width ?? 600;
58
- const height = attrs.height ?? 400;
57
+ const width = Number.isFinite(attrs.width) ? attrs.width : 600;
58
+ const height = Number.isFinite(attrs.height) ? attrs.height : 400;
59
59
  const transformation = {
60
60
  width: `${width}px`,
61
61
  height: `${height}px`
@@ -164,6 +164,18 @@ function renderImageStyles(attrs) {
164
164
  function isVectorImage(src) {
165
165
  return typeof src === "string" && /^data:image\/(?:x-)?(?:emf|wmf)/i.test(src);
166
166
  }
167
+ /** Remote http(s) images are lazy-loaded + async-decoded in renderHTML; data
168
+ * URLs (the imported-DOCX majority) have no network to defer, so they stay
169
+ * eager — and their load event, awaited by the editor's cap path, is not
170
+ * delayed by `loading="lazy"`. */
171
+ function isRemoteImage(src) {
172
+ return typeof src === "string" && /^https?:/.test(src);
173
+ }
174
+ /** Render attrs applied only to remote images (see isRemoteImage). */
175
+ const REMOTE_IMG_ATTRS = {
176
+ loading: "lazy",
177
+ decoding: "async"
178
+ };
167
179
  /**
168
180
  * Stamp the nested office-open attrs onto an HTML attribute map as JSON
169
181
  * data-* pairs. Shared by the cropped-div and plain-img render branches so the
@@ -315,7 +327,8 @@ const Image = Image$1.extend({
315
327
  if (floatAnchor) boxAttrs["data-float-anchor"] = floatAnchor;
316
328
  const imgAttrs = {
317
329
  src: attrs.src,
318
- style: crop.style
330
+ style: crop.style,
331
+ ...isRemoteImage(attrs.src) ? REMOTE_IMG_ATTRS : {}
319
332
  };
320
333
  if (attrs.alt) imgAttrs.alt = attrs.alt;
321
334
  if (attrs.title) imgAttrs.title = attrs.title;
@@ -325,7 +338,10 @@ const Image = Image$1.extend({
325
338
  ["img", imgAttrs]
326
339
  ];
327
340
  }
328
- const htmlAttrs = { ...HTMLAttributes };
341
+ const htmlAttrs = {
342
+ ...HTMLAttributes,
343
+ ...isRemoteImage(attrs.src) ? REMOTE_IMG_ATTRS : {}
344
+ };
329
345
  const styles = renderImageStyles(attrs);
330
346
  if (styles.length > 0) htmlAttrs.style = styles.join(";");
331
347
  attachRawAttrs(htmlAttrs, attrs);
@@ -1,4 +1,17 @@
1
+ import { A as TaskItem, F as Underline, M as Text, N as TextAlign, T as Superscript, a as CodeBlockLowlight, b as Mention, c as DetailsSummary, d as HardBreak, g as Italic, i as Code, j as TaskList, m as HorizontalRule, n as Bold, o as Details, p as Highlight, s as DetailsContent, t as Blockquote, u as Emoji, v as ListItem, w as Subscript, y as Mathematics } from "../tiptap-BKqn41uT.mjs";
1
2
  import { n as createDocument, t as Document } from "../document-Cws7XTYL.mjs";
2
- import { c as PageBreak, f as docxExtensions, l as DocxKit, m as tiptapNodeExtensions, p as tiptapMarkExtensions, u as DocxKitOptions } from "../core-DRaLI8nd.mjs";
3
+ import { t as Paragraph } from "../paragraph-D8mpHo_o.mjs";
4
+ import { t as Heading } from "../heading-BvqBD2zX.mjs";
5
+ import { t as BulletList } from "../bullet-list-DF60pnSL.mjs";
6
+ import { r as OrderedList } from "../ordered-list-DFAe-YEV.mjs";
7
+ import { A as Image, D as PageBreak, E as wpsShapeStyles, F as ColumnBreak, I as CodeBlock, O as FormattingMarks, P as SectionBreak, _ as WpsShape, b as WpsShapeStandalone, c as DocxKit, d as tiptapMarkExtensions, f as tiptapNodeExtensions, g as Passthrough, h as InlinePassthrough, l as DocxKitOptions, m as TocField, p as Tab, u as docxExtensions, v as WpgGroup, x as WpsShapeStyles } from "../core-DC0_-WcE.mjs";
8
+ import { t as Table } from "../table-BFkfeRp9.mjs";
9
+ import { t as TableRow } from "../table-row-kgzYkZlW.mjs";
10
+ import { t as TableCell } from "../table-cell-D_FV4D2h.mjs";
11
+ import { t as TableHeader } from "../table-header-KGQ2aEkP.mjs";
12
+ import { t as Link } from "../link-BawPjQZR.mjs";
13
+ import { t as Strike } from "../strike-BgWGvjKr.mjs";
14
+ import { t as TextStyle } from "../text-style-BHdtXkMb.mjs";
15
+ import { n as scrollContainerOf, t as scrollCaretToTop } from "../scroll-ZNeThJsJ.mjs";
3
16
  import { A as twipsToMm, S as sectionMarginCss, b as resolvePageSize, x as sectionLinePitchCss, y as resolveFontName } from "../utils-BJwDQts7.mjs";
4
- export { Document, DocxKit, type DocxKitOptions, PageBreak, createDocument, docxExtensions, resolveFontName, resolvePageSize, sectionLinePitchCss, sectionMarginCss, tiptapMarkExtensions, tiptapNodeExtensions, twipsToMm };
17
+ export { Blockquote, Bold, BulletList, Code, CodeBlock, CodeBlockLowlight, ColumnBreak, Details, DetailsContent, DetailsSummary, Document, DocxKit, DocxKitOptions, Emoji, FormattingMarks, HardBreak, Heading, Highlight, HorizontalRule, Image, InlinePassthrough, Italic, Link, ListItem, Mathematics, Mention, OrderedList, PageBreak, Paragraph, Passthrough, SectionBreak, Strike, Subscript, Superscript, Tab, Table, TableCell, TableHeader, TableRow, TaskItem, TaskList, Text, TextAlign, TextStyle, TocField, Underline, WpgGroup, WpsShape, type WpsShapeStandalone, type WpsShapeStyles, createDocument, docxExtensions, resolveFontName, resolvePageSize, scrollCaretToTop, scrollContainerOf, sectionLinePitchCss, sectionMarginCss, tiptapMarkExtensions, tiptapNodeExtensions, twipsToMm, wpsShapeStyles };
@@ -1,4 +1,19 @@
1
- import { _ as PageBreak, a as DocxKit, c as tiptapMarkExtensions, l as tiptapNodeExtensions, s as docxExtensions } from "../core-B8ba_FNi.mjs";
1
+ import { Blockquote, Bold, Code, CodeBlockLowlight, Details, DetailsContent, DetailsSummary, Emoji, HardBreak, Highlight, HorizontalRule, Italic, ListItem, Mathematics, Mention, Subscript, Superscript, TaskItem, TaskList, Text, TextAlign, Underline } from "./tiptap.mjs";
2
+ import { BulletList } from "./bullet-list.mjs";
3
+ import { CodeBlock } from "./code-block.mjs";
4
+ import { C as ColumnBreak, S as FormattingMarks, _ as Tab, a as DocxKit, b as Passthrough, c as tiptapNodeExtensions, g as TocField, h as wpsShapeStyles, l as WpsShape, o as docxExtensions, s as tiptapMarkExtensions, u as WpgGroup, v as SectionBreak, x as PageBreak, y as InlinePassthrough } from "../core-BnF8XhVE.mjs";
2
5
  import { resolveFontName, resolvePageSize, sectionLinePitchCss, sectionMarginCss, twipsToMm } from "./utils.mjs";
3
6
  import { Document, createDocument } from "./document.mjs";
4
- export { Document, DocxKit, PageBreak, createDocument, docxExtensions, resolveFontName, resolvePageSize, sectionLinePitchCss, sectionMarginCss, tiptapMarkExtensions, tiptapNodeExtensions, twipsToMm };
7
+ import { Heading } from "./heading.mjs";
8
+ import { Image } from "./image.mjs";
9
+ import { scrollCaretToTop, scrollContainerOf } from "./scroll.mjs";
10
+ import { Link } from "./link.mjs";
11
+ import { OrderedList } from "./ordered-list.mjs";
12
+ import { Paragraph } from "./paragraph.mjs";
13
+ import { Strike } from "./strike.mjs";
14
+ import { Table } from "./table.mjs";
15
+ import { TableCell } from "./table-cell.mjs";
16
+ import { TableHeader } from "./table-header.mjs";
17
+ import { TableRow } from "./table-row.mjs";
18
+ import { TextStyle } from "./text-style.mjs";
19
+ export { Blockquote, Bold, BulletList, Code, CodeBlock, CodeBlockLowlight, ColumnBreak, Details, DetailsContent, DetailsSummary, Document, DocxKit, Emoji, FormattingMarks, HardBreak, Heading, Highlight, HorizontalRule, Image, InlinePassthrough, Italic, Link, ListItem, Mathematics, Mention, OrderedList, PageBreak, Paragraph, Passthrough, SectionBreak, Strike, Subscript, Superscript, Tab, Table, TableCell, TableHeader, TableRow, TaskItem, TaskList, Text, TextAlign, TextStyle, TocField, Underline, WpgGroup, WpsShape, createDocument, docxExtensions, resolveFontName, resolvePageSize, scrollCaretToTop, scrollContainerOf, sectionLinePitchCss, sectionMarginCss, tiptapMarkExtensions, tiptapNodeExtensions, twipsToMm, wpsShapeStyles };
@@ -0,0 +1,2 @@
1
+ import { t as Link } from "../link-BawPjQZR.mjs";
2
+ export { Link };
@@ -0,0 +1,56 @@
1
+ import { scrollCaretToTop } from "./scroll.mjs";
2
+ import { Link as Link$1 } from "@tiptap/extension-link";
3
+ import { Plugin, PluginKey, TextSelection } from "@tiptap/pm/state";
4
+ //#region src/extensions/link.ts
5
+ /**
6
+ * Link — overrides {@link LinkBase}'s click behavior to match MS Word: a plain
7
+ * click places the caret for editing; Ctrl/Cmd+Click follows the hyperlink
8
+ * (in-page scroll for a `#bookmark` anchor, a new tab for an external URL).
9
+ *
10
+ * The upstream extension defaults to `openOnClick: true`, which calls
11
+ * `window.open(href, target)` on every plain click — opening a new tab even for
12
+ * internal `#` anchors. That both breaks TOC navigation and diverges from
13
+ * Word's "click-to-edit / Ctrl+Click-to-follow" semantics.
14
+ */
15
+ function docxLinkClickHandler() {
16
+ return new Plugin({
17
+ key: new PluginKey("docxLinkClick"),
18
+ props: { handleClick(view, _pos, event) {
19
+ const me = event;
20
+ if (me.button !== 0 || !(me.ctrlKey || me.metaKey)) return false;
21
+ const link = me.target?.closest?.("a");
22
+ if (!link || !view.dom.contains(link)) return false;
23
+ const href = link.getAttribute("href") ?? "";
24
+ me.preventDefault();
25
+ if (href.startsWith("#")) {
26
+ const id = href.slice(1);
27
+ if (id) {
28
+ const dest = view.dom.querySelector(`[id="${id.replace(/["\\]/g, "\\$&")}"]`);
29
+ if (dest) {
30
+ const p = view.posAtDOM(dest, 0);
31
+ const { state } = view;
32
+ view.dispatch(state.tr.setSelection(TextSelection.create(state.doc, p)));
33
+ scrollCaretToTop(view);
34
+ view.focus();
35
+ }
36
+ }
37
+ return true;
38
+ }
39
+ if (href) window.open(href, "_blank");
40
+ return true;
41
+ } }
42
+ });
43
+ }
44
+ const Link = Link$1.extend({
45
+ addOptions() {
46
+ return {
47
+ ...this.parent?.(),
48
+ openOnClick: false
49
+ };
50
+ },
51
+ addProseMirrorPlugins() {
52
+ return [...this.parent?.() ?? [], docxLinkClickHandler()];
53
+ }
54
+ });
55
+ //#endregion
56
+ export { Link };
@@ -1,25 +1,3 @@
1
- import { b as Mention } from "../tiptap-pZsNPsvV.mjs";
2
-
3
- //#region src/extensions/mention.d.ts
4
- /**
5
- * Mention extension — owns the DOCX expression of an inline mention.
6
- *
7
- * A mention is an atom node carrying `{ id, label }`. DOCX has no mention
8
- * element, but an inline text-SDT (CT_SdtRun) is a reversible carrier: the
9
- * `id` rides in the SDT alias, the `label` as the SDT's run text, and a fixed
10
- * tag marks the type so resolve can recover the mention. (customXml would also
11
- * carry the id but triggers Word's i4i patent warning; SDT does not.)
12
- */
13
- /** SDT tag marking a mention content control. */
14
- declare const MENTION_TAG = "docen-mention";
15
- /** Inline text-SDT carrying a mention (id in alias, label as run text). */
16
- declare function createMention(id: string, label: string): Record<string, unknown>;
17
- /** True if an inline SDT child carries a mention. */
18
- declare function isMention(child: unknown): boolean;
19
- /** Read a mention SDT → `{ id, label }`. */
20
- declare function readMention(child: unknown): {
21
- id: string;
22
- label: string;
23
- };
24
- //#endregion
1
+ import { b as Mention } from "../tiptap-BKqn41uT.mjs";
2
+ import { i as readMention, n as createMention, r as isMention, t as MENTION_TAG } from "../mention-BGLzLVYw.mjs";
25
3
  export { MENTION_TAG, Mention, createMention, isMention, readMention };
@@ -1,25 +1,2 @@
1
- import { x as OrderedList } from "../tiptap-pZsNPsvV.mjs";
2
- import { LevelsOptions } from "@office-open/docx";
3
-
4
- //#region src/extensions/ordered-list.d.ts
5
- /**
6
- * OrderedList extension — owns the DOCX expression of an ordered list.
7
- *
8
- * A Tiptap orderedList maps to a sequence of paragraphs referencing one
9
- * abstractNum (decimal). The reference is keyed by `start` so lists with the
10
- * same start share a definition; DocxManager gives each list its own instance
11
- * for independent counting. This module owns that abstractNum shape; DocxManager
12
- * owns the cross-paragraph tree walk, start recovery, and numbering-instance
13
- * bookkeeping.
14
- */
15
- /** Reference prefix for generated ordered-list abstractNum definitions. */
16
- declare const ORDERED_REFERENCE_PREFIX = "docen-ordered";
17
- /** lvlText per nesting depth (level 0 → "%1.", … level 8 → "%9."). */
18
- declare const ORDERED_LEVEL_TEXT: string[];
19
- /**
20
- * Build nine decimal numbering levels for an ordered list. Level 0 carries
21
- * `start`; deeper levels restart at 1 (Word convention).
22
- */
23
- declare function buildOrderedLevels(start: number): LevelsOptions[];
24
- //#endregion
1
+ import { i as buildOrderedLevels, n as ORDERED_REFERENCE_PREFIX, r as OrderedList, t as ORDERED_LEVEL_TEXT } from "../ordered-list-DFAe-YEV.mjs";
25
2
  export { ORDERED_LEVEL_TEXT, ORDERED_REFERENCE_PREFIX, OrderedList, buildOrderedLevels };
@@ -1,4 +1,4 @@
1
- import { OrderedList } from "./tiptap.mjs";
1
+ import { OrderedList as OrderedList$1 } from "./tiptap.mjs";
2
2
  import { LevelFormat } from "@office-open/docx";
3
3
  //#region src/extensions/ordered-list.ts
4
4
  /**
@@ -37,5 +37,14 @@ function buildOrderedLevels(start) {
37
37
  text: ORDERED_LEVEL_TEXT[level]
38
38
  }));
39
39
  }
40
+ const OrderedList = OrderedList$1.extend({ addAttributes() {
41
+ return {
42
+ ...this.parent?.(),
43
+ numbering: {
44
+ default: null,
45
+ rendered: false
46
+ }
47
+ };
48
+ } });
40
49
  //#endregion
41
50
  export { ORDERED_LEVEL_TEXT, ORDERED_REFERENCE_PREFIX, OrderedList, buildOrderedLevels };
@@ -1,2 +1,2 @@
1
- import { c as PageBreak } from "../core-DRaLI8nd.mjs";
1
+ import { D as PageBreak } from "../core-DC0_-WcE.mjs";
2
2
  export { PageBreak };
@@ -1,2 +1,2 @@
1
- import { _ as PageBreak } from "../core-B8ba_FNi.mjs";
1
+ import { x as PageBreak } from "../core-BnF8XhVE.mjs";
2
2
  export { PageBreak };
@@ -14,6 +14,18 @@ const SECTION_ATTR_KEYS = new Set([
14
14
  "sectionHeaders",
15
15
  "sectionFooters"
16
16
  ]);
17
+ /**
18
+ * Whether a paragraph's tabStops include a leader (dot/underscore/hyphen/…), e.g.
19
+ * a TOC entry's right tab. Signals dot-leader layout to the editor CSS.
20
+ */
21
+ function hasLeaderTabStop(tabStops) {
22
+ if (!Array.isArray(tabStops)) return false;
23
+ return tabStops.some((t) => {
24
+ if (!t || typeof t !== "object") return false;
25
+ const leader = t.leader;
26
+ return typeof leader === "string" && leader !== "none" && leader.length > 0;
27
+ });
28
+ }
17
29
  function renderDocx(node) {
18
30
  const attrs = node.attrs ?? {};
19
31
  const opts = {};
@@ -132,6 +144,7 @@ const Paragraph = Paragraph$1.extend({
132
144
  const attrs = { ...HTMLAttributes };
133
145
  const styleId = node.attrs.styleId;
134
146
  attrs.class = styleId ? `docx-style-${styleId}` : "docx-default";
147
+ if (hasLeaderTabStop(node.attrs.tabStops)) attrs.class += " docx-tab-leader";
135
148
  if (styles.length > 0) attrs.style = styles.join(";");
136
149
  return [
137
150
  "p",
@@ -1,2 +1,2 @@
1
- import { g as Passthrough } from "../core-DRaLI8nd.mjs";
2
- export { Passthrough };
1
+ import { g as Passthrough, h as InlinePassthrough } from "../core-DC0_-WcE.mjs";
2
+ export { InlinePassthrough, Passthrough };
@@ -1,2 +1,2 @@
1
- import { g as Passthrough } from "../core-B8ba_FNi.mjs";
2
- export { Passthrough };
1
+ import { b as Passthrough, y as InlinePassthrough } from "../core-BnF8XhVE.mjs";
2
+ export { InlinePassthrough, Passthrough };
@@ -0,0 +1,2 @@
1
+ import { n as scrollContainerOf, t as scrollCaretToTop } from "../scroll-ZNeThJsJ.mjs";
2
+ export { scrollCaretToTop, scrollContainerOf };
@@ -0,0 +1,33 @@
1
+ //#region src/extensions/scroll.ts
2
+ /**
3
+ * Scroll helpers shared by the editor and the docx engine's link-click handler,
4
+ * so every "jump then scroll" path (outline heading, search result, find, TOC
5
+ * Ctrl+Click, post-reflow caret follow) scrolls the SAME way — to the top of the
6
+ * viewport, Word-style. ProseMirror's default `tr.scrollIntoView()` parks the
7
+ * caret at the bottom edge, which reads wrong for a page/heading/TOC jump.
8
+ */
9
+ /** Nearest scrollable ancestor of the editor surface (e.g. the docen-canvas). */
10
+ function scrollContainerOf(view) {
11
+ let el = view.dom.parentElement;
12
+ while (el) {
13
+ if (el.clientHeight > 0 && el.scrollHeight > el.clientHeight) {
14
+ const overflowY = getComputedStyle(el).overflowY;
15
+ if (overflowY === "auto" || overflowY === "scroll") return el;
16
+ }
17
+ el = el.parentElement;
18
+ }
19
+ return null;
20
+ }
21
+ /** Scroll the caret to the TOP of the viewport when it has left the visible area
22
+ * (Word-style page follow). No-op while the caret stays in view, so normal
23
+ * typing doesn't fight the user's scroll. Replaces PM's default scrollIntoView. */
24
+ function scrollCaretToTop(view) {
25
+ const scroller = scrollContainerOf(view);
26
+ if (!scroller) return;
27
+ const margin = 64;
28
+ const caretTop = view.coordsAtPos(view.state.selection.head).top;
29
+ const rect = scroller.getBoundingClientRect();
30
+ if (caretTop < rect.top + margin || caretTop > rect.bottom - margin) scroller.scrollTop += caretTop - rect.top - margin;
31
+ }
32
+ //#endregion
33
+ export { scrollCaretToTop, scrollContainerOf };
@@ -1,44 +1,2 @@
1
- import { r as Extension } from "../core-DRaLI8nd.mjs";
2
-
3
- //#region src/extensions/section-break.d.ts
4
- /**
5
- * SectionBreak — command extension that marks a paragraph as a section boundary.
6
- *
7
- * OOXML sections (sectPr) attach to a section's LAST paragraph's pPr, NOT a
8
- * standalone node. So this extension provides only the `setSectionBreak`
9
- * command (stamps sectionProperties on the current paragraph); the paragraph
10
- * extension carries the sectionProperties/sectionHeaders/sectionFooters attrs,
11
- * and DocxManager splits/merges sections in compile/resolve by reading them off
12
- * the paragraph.
13
- *
14
- * The final section's sectPr rides on doc.attrs.sectionProperties (it lives at
15
- * <w:body>'s end in OOXML). Single-section documents have no section-carrying
16
- * paragraph at all.
17
- *
18
- * Next Page semantics: `setSectionBreak` stamps sectionProperties on the current
19
- * paragraph (making it the section's last paragraph) AND inserts a fresh empty
20
- * paragraph after it (the next section's first paragraph), then moves the
21
- * selection into that new paragraph. The page-plugin's `forcesPageBreakAfter`
22
- * treats a sectionProperties-bearing paragraph as a page break, so repaginate
23
- * pushes the new paragraph onto the next page — and the caret follows. This
24
- * mirrors Word's "Section Break (Next Page)".
25
- *
26
- * Split hygiene: pressing Enter inside a section-carrying paragraph must NOT
27
- * split it. A split would place the new paragraph past the section boundary —
28
- * forcesPageBreakAfter then pushes it onto the next page (next section), and
29
- * splitBlock would copy sectionProperties onto it (a second break mark). Word
30
- * instead inserts a fresh paragraph BEFORE the section's last paragraph, so the
31
- * new paragraph stays in this section and the stamped paragraph remains last.
32
- * The Enter shortcut does exactly that; non-section paragraphs fall through to
33
- * the default Enter unchanged.
34
- */
35
- declare const SectionBreak: Extension<any, any>;
36
- declare module "@tiptap/core" {
37
- interface Commands<ReturnType> {
38
- sectionBreak: {
39
- /** Insert a Next Page section break at the current paragraph. */setSectionBreak: () => ReturnType;
40
- };
41
- }
42
- }
43
- //#endregion
1
+ import { P as SectionBreak } from "../core-DC0_-WcE.mjs";
44
2
  export { SectionBreak };
@@ -1,2 +1,2 @@
1
- import { h as SectionBreak } from "../core-B8ba_FNi.mjs";
1
+ import { v as SectionBreak } from "../core-BnF8XhVE.mjs";
2
2
  export { SectionBreak };
@@ -0,0 +1,2 @@
1
+ import { p as Tab } from "../core-DC0_-WcE.mjs";
2
+ export { Tab };
@@ -0,0 +1,2 @@
1
+ import { _ as Tab } from "../core-BnF8XhVE.mjs";
2
+ export { Tab };
@@ -1,27 +1,3 @@
1
- import { A as TaskItem } from "../tiptap-pZsNPsvV.mjs";
2
-
3
- //#region src/extensions/task-item.d.ts
4
- /**
5
- * TaskItem extension — owns the DOCX expression of a task-list checkbox.
6
- *
7
- * DOCX has no native task list, but a clickable checkbox is reversible via an
8
- * inline content-control SDT (w14:checkbox). Each task paragraph carries a
9
- * leading checkbox SDT tagged "docen-task" so resolve can tell task items apart
10
- * from ordinary paragraphs that happen to contain an SDT. The checked state
11
- * round-trips through the SDT; DocxManager injects/strips the SDT at the
12
- * paragraph boundary and rebuilds the taskList/taskItem tree.
13
- */
14
- /** SDT tag marking our task-item checkbox content control. */
15
- declare const TASK_CHECKBOX_TAG = "docen-task";
16
- /**
17
- * Inline checkbox SDT (w14:checkbox) for a task item, as a ParagraphChild.
18
- * Tagged so resolve can distinguish task items from ordinary SDT-bearing
19
- * paragraphs.
20
- */
21
- declare function createTaskCheckbox(checked: boolean): Record<string, unknown>;
22
- /** True if an inline ParagraphChild is our task checkbox SDT. */
23
- declare function isTaskCheckbox(child: unknown): boolean;
24
- /** Read the checked state of a task checkbox SDT child (false if not one). */
25
- declare function readCheckboxState(child: unknown): boolean;
26
- //#endregion
1
+ import { A as TaskItem } from "../tiptap-BKqn41uT.mjs";
2
+ import { i as readCheckboxState, n as createTaskCheckbox, r as isTaskCheckbox, t as TASK_CHECKBOX_TAG } from "../task-item-B0ntvQ1Y.mjs";
27
3
  export { TASK_CHECKBOX_TAG, TaskItem, createTaskCheckbox, isTaskCheckbox, readCheckboxState };
@@ -1,2 +1,2 @@
1
- import { A as TaskItem, C as Strike, D as TableCell, E as Table, F as Underline, M as Text, N as TextAlign, O as TableHeader, P as TextStyle, S as Paragraph, T as Superscript, _ as Link, a as CodeBlockLowlight, b as Mention, c as DetailsSummary, d as HardBreak, f as Heading, g as Italic, h as Image, i as Code, j as TaskList, k as TableRow, l as Document, m as HorizontalRule, n as Bold, o as Details, p as Highlight, r as BulletList, s as DetailsContent, t as Blockquote, u as Emoji, v as ListItem, w as Subscript, x as OrderedList, y as Mathematics } from "../tiptap-pZsNPsvV.mjs";
1
+ import { A as TaskItem, C as Strike, D as TableCell, E as Table, F as Underline, M as Text, N as TextAlign, O as TableHeader, P as TextStyle, S as Paragraph, T as Superscript, _ as Link, a as CodeBlockLowlight, b as Mention, c as DetailsSummary, d as HardBreak, f as Heading, g as Italic, h as Image, i as Code, j as TaskList, k as TableRow, l as Document, m as HorizontalRule, n as Bold, o as Details, p as Highlight, r as BulletList, s as DetailsContent, t as Blockquote, u as Emoji, v as ListItem, w as Subscript, x as OrderedList, y as Mathematics } from "../tiptap-BKqn41uT.mjs";
2
2
  export { Blockquote, Bold, BulletList, Code, CodeBlockLowlight, Details, DetailsContent, DetailsSummary, Document, Emoji, HardBreak, Heading, Highlight, HorizontalRule, Image, Italic, Link, ListItem, Mathematics, Mention, OrderedList, Paragraph, Strike, Subscript, Superscript, Table, TableCell, TableHeader, TableRow, TaskItem, TaskList, Text, TextAlign, TextStyle, Underline };
@@ -1,2 +1,2 @@
1
- import { h as TocField } from "../core-DRaLI8nd.mjs";
1
+ import { m as TocField } from "../core-DC0_-WcE.mjs";
2
2
  export { TocField };
@@ -1,2 +1,2 @@
1
- import { m as TocField } from "../core-B8ba_FNi.mjs";
1
+ import { g as TocField } from "../core-BnF8XhVE.mjs";
2
2
  export { TocField };
@@ -1,2 +1,2 @@
1
- import { b as renderWpsInterior, v as WpgGroup, x as renderWpsText, y as WpsData } from "../core-DRaLI8nd.mjs";
2
- export { WpgGroup, WpsData, renderWpsInterior, renderWpsText };
1
+ import { C as renderWpsText, E as wpsShapeStyles, S as renderWpsInterior, T as wpsRotationVert, b as WpsShapeStandalone, v as WpgGroup, w as wpsInnerStyle, x as WpsShapeStyles, y as WpsData } from "../core-DC0_-WcE.mjs";
2
+ export { WpgGroup, WpsData, WpsShapeStandalone, WpsShapeStyles, renderWpsInterior, renderWpsText, wpsInnerStyle, wpsRotationVert, wpsShapeStyles };
@@ -1,2 +1,2 @@
1
- import { d as WpgGroup, f as renderWpsInterior, p as renderWpsText } from "../core-B8ba_FNi.mjs";
2
- export { WpgGroup, renderWpsInterior, renderWpsText };
1
+ import { d as renderWpsInterior, f as renderWpsText, h as wpsShapeStyles, m as wpsRotationVert, p as wpsInnerStyle, u as WpgGroup } from "../core-BnF8XhVE.mjs";
2
+ export { WpgGroup, renderWpsInterior, renderWpsText, wpsInnerStyle, wpsRotationVert, wpsShapeStyles };
@@ -1,2 +1,2 @@
1
- import { _ as WpsShape } from "../core-DRaLI8nd.mjs";
1
+ import { _ as WpsShape } from "../core-DC0_-WcE.mjs";
2
2
  export { WpsShape };
@@ -1,2 +1,2 @@
1
- import { u as WpsShape } from "../core-B8ba_FNi.mjs";
1
+ import { l as WpsShape } from "../core-BnF8XhVE.mjs";
2
2
  export { WpsShape };
package/dist/index.d.mts CHANGED
@@ -1,5 +1,18 @@
1
+ import { A as TaskItem, F as Underline, M as Text, N as TextAlign, T as Superscript, a as CodeBlockLowlight, b as Mention, c as DetailsSummary, d as HardBreak, g as Italic, i as Code, j as TaskList, m as HorizontalRule, n as Bold, o as Details, p as Highlight, s as DetailsContent, t as Blockquote, u as Emoji, v as ListItem, w as Subscript, y as Mathematics } from "./tiptap-BKqn41uT.mjs";
1
2
  import { n as createDocument, t as Document } from "./document-Cws7XTYL.mjs";
2
- import { a as JSONContent, c as PageBreak, f as docxExtensions, l as DocxKit, m as tiptapNodeExtensions, p as tiptapMarkExtensions, t as AnyExtension, u as DocxKitOptions } from "./core-DRaLI8nd.mjs";
3
+ import { t as Paragraph } from "./paragraph-D8mpHo_o.mjs";
4
+ import { t as Heading } from "./heading-BvqBD2zX.mjs";
5
+ import { t as BulletList } from "./bullet-list-DF60pnSL.mjs";
6
+ import { r as OrderedList } from "./ordered-list-DFAe-YEV.mjs";
7
+ import { A as Image, D as PageBreak, E as wpsShapeStyles, F as ColumnBreak, I as CodeBlock, O as FormattingMarks, P as SectionBreak, _ as WpsShape, a as JSONContent, b as WpsShapeStandalone, c as DocxKit, d as tiptapMarkExtensions, f as tiptapNodeExtensions, g as Passthrough, h as InlinePassthrough, l as DocxKitOptions, m as TocField, p as Tab, t as AnyExtension, u as docxExtensions, v as WpgGroup, x as WpsShapeStyles } from "./core-DC0_-WcE.mjs";
8
+ import { t as Table } from "./table-BFkfeRp9.mjs";
9
+ import { t as TableRow } from "./table-row-kgzYkZlW.mjs";
10
+ import { t as TableCell } from "./table-cell-D_FV4D2h.mjs";
11
+ import { t as TableHeader } from "./table-header-KGQ2aEkP.mjs";
12
+ import { t as Link } from "./link-BawPjQZR.mjs";
13
+ import { t as Strike } from "./strike-BgWGvjKr.mjs";
14
+ import { t as TextStyle } from "./text-style-BHdtXkMb.mjs";
15
+ import { n as scrollContainerOf, t as scrollCaretToTop } from "./scroll-ZNeThJsJ.mjs";
3
16
  import { A as twipsToMm, S as sectionMarginCss, b as resolvePageSize, x as sectionLinePitchCss, y as resolveFontName } from "./utils-BJwDQts7.mjs";
4
17
  import { ImageFetchHandler, PrepareStep, fetchImageHandler, prepareDocument, prepareImages } from "./converters/prepare.mjs";
5
18
  import { DocxGenerateOptions, DocxManager, compileDocument, generateDOCX, generateDOCXStream, generateDOCXSync, parseDOCX, resolveDocument } from "./converters/docx.mjs";
@@ -265,16 +278,18 @@ interface WpgGroupNode extends TiptapJSONContent {
265
278
  };
266
279
  }
267
280
  /**
268
- * Standalone floating text-box shape (wp:anchor > wps:wsp) carried as an opaque
269
- * blob the full WpsShapeRunOptions round-trips verbatim. Unlike the group's
270
- * interior wps children, this shape floats on its own anchor and renders via the
271
- * shared wps interior renderer.
281
+ * Standalone floating text-box shape (wp:anchor > wps:wsp). The shape geometry
282
+ * + styling (transformation/floating/fill/outline/bodyProperties) ride on
283
+ * attrs.wpsShape; the editable text body is PM content (one ParagraphNode per
284
+ * office-open ParagraphOptions). Unlike a group's interior wps children, this
285
+ * shape floats on its own anchor and is editable via its NodeView contentDOM.
272
286
  */
273
287
  interface WpsShapeNode extends TiptapJSONContent {
274
288
  type: "wpsShape";
275
289
  attrs?: {
276
290
  wpsShape: Record<string, unknown> | null;
277
291
  };
292
+ content?: Array<ParagraphNode>;
278
293
  }
279
294
  interface EmojiNode extends TiptapJSONContent {
280
295
  type: "emoji";
@@ -286,6 +301,9 @@ interface PageBreakNode extends TiptapJSONContent {
286
301
  interface ColumnBreakNode extends TiptapJSONContent {
287
302
  type: "columnBreak";
288
303
  }
304
+ interface TabNode extends TiptapJSONContent {
305
+ type: "tab";
306
+ }
289
307
  interface MentionNode extends TiptapJSONContent {
290
308
  type: "mention";
291
309
  attrs?: MentionAttrs;
@@ -304,6 +322,12 @@ interface PassthroughNode extends TiptapJSONContent {
304
322
  data: string;
305
323
  };
306
324
  }
325
+ interface InlinePassthroughNode extends TiptapJSONContent {
326
+ type: "inlinePassthrough";
327
+ attrs?: {
328
+ data: string;
329
+ };
330
+ }
307
331
  interface DetailsNode extends TiptapJSONContent {
308
332
  type: "details";
309
333
  content?: Array<DetailsSummaryNode | DetailsContentNode>;
@@ -329,7 +353,7 @@ interface DetailsContentNode extends TiptapJSONContent {
329
353
  type: "detailsContent";
330
354
  content?: Array<BlockNode>;
331
355
  }
332
- type InlineContent = TextNode | HardBreakNode | ImageNode | EmojiNode | PageBreakNode | ColumnBreakNode | MentionNode | InlineMathNode;
356
+ type InlineContent = TextNode | HardBreakNode | ImageNode | EmojiNode | PageBreakNode | ColumnBreakNode | TabNode | MentionNode | InlineMathNode | InlinePassthroughNode;
333
357
  type BlockNode = ParagraphNode | HeadingNode | BlockquoteNode | CodeBlockNode | HorizontalRuleNode | BulletListNode | OrderedListNode | TaskListNode | TableNode | WpsShapeNode | WpgGroupNode | DetailsNode | TocFieldNode | PassthroughNode | BlockMathNode;
334
358
  //#endregion
335
- export { type AlignmentType, type AnyExtension, type AttrNullable, type BlockMathNode, type BlockNode, type BlockquoteNode, type BookmarkOptions, type BorderOptions, type BordersOptions, type BulletListNode, type CodeBlockNode, type ColumnBreakNode, type DetailsContentNode, type DetailsNode, type DetailsSummaryNode, Document, type DocumentOptions, type DocxEditorOptions, type DocxGenerateOptions, DocxKit, type DocxKitOptions, DocxManager, type DocxPatchContent, type DocxPatchOptions, type EmojiAttrs, type EmojiNode, type EmphasisMarkType, type ExternalHyperlinkOptions, type Floating, type FontAttributesProperties, type FrameOptions, type HardBreakNode, type HeaderFooterSlots, type HeadingLevel, type HeadingNode, type HeightRule, type HighlightColor, type HorizontalRuleNode, type ImageAttrs, type ImageFetchHandler, type ImageNode, type ImageOptions, type IndentAttributesProperties, type InlineContent, type InlineMathNode, type InternalHyperlinkOptions, type JSONContent, type LeaderType, type LevelParagraphStylePropertiesOptions, type LineRuleType, type LinkAttrs, type ListItemNode, type Margins, type Mark, type MathAttrs, type MathInput, type MediaTransformation, type MentionAttrs, type MentionNode, type OrderedListNode, PageBreak, type PageBreakNode, type ParagraphAttrs, type ParagraphChild, type ParagraphNode, type ParagraphOptions, type ParagraphPropertiesOptions, type ParagraphPropertiesOptionsBase, type ParagraphRunPropertiesOptions, type ParagraphStylePropertiesOptions, type PassthroughNode, type PrepareStep, type QuickStyleEntry, type RubyOptions, type RunOptions, type RunPropertiesOptions, type RunStylePropertiesOptions, type SectionChild, type SectionOptions, type SectionPropertiesOptions, type ShadingAttributesProperties, type SpacingProperties, type StrikeAttrs, type StylesOptions, type TabStopDefinition, type TabStopPosition, type TabStopType, type TableAttrs, type TableBordersOptions, type TableCellAttrs, type TableCellBordersOptions, type TableCellNode, type TableCellOptions, type TableFloatOptions, type TableHeaderNode, type TableLayoutType, type TableLookOptions, type TableNode, type TableOptions, type TableRowAttrs, type TableRowNode, type TableRowOptions, type TableRowPropertiesOptionsBase, type TableVerticalAlign, type TableWidthProperties, type TaskItemNode, type TaskListNode, type TextAlignmentType, type TextNode, type TextStyleAttrs, type TocFieldNode, type UnderlineType, type WidthType, type WpgGroupNode, type WpsShapeNode, compileDocument, convertMillimetersToTwip, createDocument, createDocxEditor, docxExtensions, effectiveRunProps, fetchImageHandler, generateDOCX, generateDOCXStream, generateDOCXSync, generateHTML, generateMarkdown, inlineStyles, parseDOCX, parseHTML, parseMarkdown, patchDOCX, prepareDocument, prepareImages, quickStyles, resolveDocument, resolveFontName, resolvePageSize, sectionLinePitchCss, sectionMarginCss, sectionMarginDefaults, sectionPageSizeDefaults, stylesToCss, tiptapMarkExtensions, tiptapNodeExtensions, twipsToMm };
359
+ export { type AlignmentType, type AnyExtension, type AttrNullable, type BlockMathNode, type BlockNode, Blockquote, type BlockquoteNode, Bold, type BookmarkOptions, type BorderOptions, type BordersOptions, BulletList, type BulletListNode, Code, CodeBlock, CodeBlockLowlight, type CodeBlockNode, ColumnBreak, type ColumnBreakNode, Details, DetailsContent, type DetailsContentNode, type DetailsNode, DetailsSummary, type DetailsSummaryNode, Document, type DocumentOptions, type DocxEditorOptions, type DocxGenerateOptions, DocxKit, DocxKitOptions, DocxManager, type DocxPatchContent, type DocxPatchOptions, Emoji, type EmojiAttrs, type EmojiNode, type EmphasisMarkType, type ExternalHyperlinkOptions, type Floating, type FontAttributesProperties, FormattingMarks, type FrameOptions, HardBreak, type HardBreakNode, type HeaderFooterSlots, Heading, type HeadingLevel, type HeadingNode, type HeightRule, Highlight, type HighlightColor, HorizontalRule, type HorizontalRuleNode, Image, type ImageAttrs, type ImageFetchHandler, type ImageNode, type ImageOptions, type IndentAttributesProperties, type InlineContent, type InlineMathNode, InlinePassthrough, type InlinePassthroughNode, type InternalHyperlinkOptions, Italic, type JSONContent, type LeaderType, type LevelParagraphStylePropertiesOptions, type LineRuleType, Link, type LinkAttrs, ListItem, type ListItemNode, type Margins, type Mark, type MathAttrs, type MathInput, Mathematics, type MediaTransformation, Mention, type MentionAttrs, type MentionNode, OrderedList, type OrderedListNode, PageBreak, type PageBreakNode, Paragraph, type ParagraphAttrs, type ParagraphChild, type ParagraphNode, type ParagraphOptions, type ParagraphPropertiesOptions, type ParagraphPropertiesOptionsBase, type ParagraphRunPropertiesOptions, type ParagraphStylePropertiesOptions, Passthrough, type PassthroughNode, type PrepareStep, type QuickStyleEntry, type RubyOptions, type RunOptions, type RunPropertiesOptions, type RunStylePropertiesOptions, SectionBreak, type SectionChild, type SectionOptions, type SectionPropertiesOptions, type ShadingAttributesProperties, type SpacingProperties, Strike, type StrikeAttrs, type StylesOptions, Subscript, Superscript, Tab, type TabNode, type TabStopDefinition, type TabStopPosition, type TabStopType, Table, type TableAttrs, type TableBordersOptions, TableCell, type TableCellAttrs, type TableCellBordersOptions, type TableCellNode, type TableCellOptions, type TableFloatOptions, TableHeader, type TableHeaderNode, type TableLayoutType, type TableLookOptions, type TableNode, type TableOptions, TableRow, type TableRowAttrs, type TableRowNode, type TableRowOptions, type TableRowPropertiesOptionsBase, type TableVerticalAlign, type TableWidthProperties, TaskItem, type TaskItemNode, TaskList, type TaskListNode, Text, TextAlign, type TextAlignmentType, type TextNode, TextStyle, type TextStyleAttrs, TocField, type TocFieldNode, Underline, type UnderlineType, type WidthType, WpgGroup, type WpgGroupNode, WpsShape, type WpsShapeNode, type WpsShapeStandalone, type WpsShapeStyles, compileDocument, convertMillimetersToTwip, createDocument, createDocxEditor, docxExtensions, effectiveRunProps, fetchImageHandler, generateDOCX, generateDOCXStream, generateDOCXSync, generateHTML, generateMarkdown, inlineStyles, parseDOCX, parseHTML, parseMarkdown, patchDOCX, prepareDocument, prepareImages, quickStyles, resolveDocument, resolveFontName, resolvePageSize, scrollCaretToTop, scrollContainerOf, sectionLinePitchCss, sectionMarginCss, sectionMarginDefaults, sectionPageSizeDefaults, stylesToCss, tiptapMarkExtensions, tiptapNodeExtensions, twipsToMm, wpsShapeStyles };