mdast2docx logo Md2Docx
Version 0.1.2

Overview

Updated 5 min ago

CIcodecovnpm versionnpm downloadsnpm bundle sizelicense

@m2d/table: Markdown Table formatting plugin for @m2d/core. Renders rich, customizable Word tables with column alignment, borders, cell shading, and repeating headers.

✨ Features

  • 📊 Native Word Tables: Converts Markdown GFM tables into clean docx.Table elements with authentic Word OpenXML borders and paddings.
  • 🎯 Automatic Column Alignment: Honors Markdown column alignments (left, center, right) with fallback defaults.
  • 🎨 Rich Cell Styling: Style headers and data cells with background fills (shading), custom typography (fonts, sizes, colors), and paragraph spacing via the data option.
  • 📄 Multi-Page Header Repetition: Automatically repeats header rows across page breaks (tableHeader: true).
  • 🧱 Block Content in Cells: Seamlessly accommodates nested paragraphs, lists, code snippets, and blockquotes inside table cells (ideal when paired with @m2d/html).

📦 Installation

$ pnpm add @m2d/table @m2d/core docx

or

$ npm install @m2d/table @m2d/core docx

or

$ yarn add @m2d/table @m2d/core docx

🚀 Quick Start

import { toDocx } from "@m2d/core";
import { tablePlugin } from "@m2d/table";
import remarkGfm from "remark-gfm";
import remarkParse from "remark-parse";
import { unified } from "unified";

const markdown = `
# Quarterly Summary

| Quarter | Revenue | Growth | Status |
| :------ | :-----: | -----: | :----: |
| Q1      | $1.2M   | +12%   | Active |
| Q2      | $1.5M   | +25%   | Active |
| Q3      | $1.8M   | +20%   | Active |
`;

const mdast = unified().use(remarkParse).use(remarkGfm).parse(markdown);

const docxBlob = await toDocx(mdast, {}, {
  plugins: [tablePlugin()],
});

⚙️ Plugin Options

import { AlignmentType, ShadingType, VerticalAlignTable } from "docx";

tablePlugin({
  // Table level properties (width, margins, borders)
  tableProps: { ... },

  // General row properties
  rowProps: { cantSplit: true },

  // First row (header) properties
  firstRowProps: { tableHeader: true },

  // Header cell styling
  firstRowCellProps: {
    shading: { type: ShadingType.SOLID, fill: "1E293B" },
    data: { bold: true, color: "FFFFFF", alignment: AlignmentType.CENTER },
  },

  // Body cell styling
  cellProps: {
    data: { size: 20, font: "Segoe UI" },
  },

  // Alignment configuration
  alignments: {
    preferMdData: true,
    defaultHorizontalAlign: AlignmentType.LEFT,
    defaultVerticalAlign: VerticalAlignTable.CENTER,
  },
});

📚 Deep Dive Guides

License

This library is licensed under the MIT open-source license.


with 💖 by Mayank Kumar Chaudhari

On this page