<p align="center" class="intro">
  <img alt="Marked Extensions Logo" src="https://raw.githubusercontent.com/fsegurai/marked-extensions/main/public/marked-extensions.svg">
</p>

<p align="center" class="intro">
  <a href="https://github.com/fsegurai/marked-extensions">
      <img src="https://img.shields.io/azure-devops/build/fsegurai/93779823-473d-4fb3-a5b1-27aaa1a88ea2/18/main?label=Build%20Status&"
          alt="Build Main Status">
  </a>
  <a href="https://www.npmjs.org/package/@fsegurai/marked-extended-tables">
      <img src="https://img.shields.io/npm/v/@fsegurai/marked-extended-tables.svg"
          alt="Latest Release">
  </a>
  <br>
  <img alt="GitHub contributors" src="https://img.shields.io/github/contributors/fsegurai/marked-extensions">
  <img alt="Dependency status for repo" src="https://img.shields.io/librariesio/github/fsegurai/marked-extensions">
  <a href="https://opensource.org/licenses/MIT">
    <img alt="GitHub License" src="https://img.shields.io/github/license/fsegurai/marked-extensions">
  </a>
  <br>
  <img alt="Stars" src="https://img.shields.io/github/stars/fsegurai/marked-extensions?style=square&labelColor=343b41"/> 
  <img alt="Forks" src="https://img.shields.io/github/forks/fsegurai/marked-extensions?style=square&labelColor=343b41"/>
</p>

**A library of extended tables for Marked.js.**

`@fsegurai/marked-extended-tables` is an extension for Marked.js, allowing for more complex table structures and
styling. It adds support for tables with merged cells, row and column spans, and other advanced features.

### Table of contents

- [Installation](#installation)
- [Usage](#usage)
    - [Basic Usage](#basic-usage)
    - [Configuration Options](#configuration-options)
    - [Advanced Table Features](#advanced-table-features)
        - [Column Spanning](#column-spanning)
        - [Row Spanning](#row-spanning)
        - [Adding Captions](#adding-captions)
        - [Column Alignment](#column-alignment)
- [More Resources](#more-resources)
    - [Available Extensions](#available-extensions)
    - [Demo Application](#demo-application)
- [License](#license)

## Installation

To add `@fsegurai/marked-extended-tables` along with Marked.js to your `package.json` use the following commands.

```bash
bun install @fsegurai/marked-extended-tables marked@^15.0.0 --save
```

## Usage

### Basic Usage

Import `@fsegurai/marked-extended-tables` and apply it to your Marked instance as shown below.

```javascript
import { marked } from "marked";
import markedExtendedTables from "@fsegurai/marked-extended-tables";

// or UMD script
// <script src="https://cdn.jsdelivr.net/npm/marked/lib/marked.umd.js"></script>
// <script src="https://cdn.jsdelivr.net/npm/@fsegurai/marked-extended-tables/lib/index.umd.js"></script>

marked.use(markedExtendedTables());

const exampleMarkdown = `
| H1      | H2      | H3      |
|---------|---------|---------|
| This cell spans 3 columns |||
`;

marked.parse(exampleMarkdown);
```

### Configuration Options

The extension can be customized with the following options:

- `useTheadTbody`: Use `<thead>` and `<tbody>` tags for tables. Default: `false`
- `useTfoot`: Use `<tfoot>` tag for tables. Default: `false`
- `className`: Add a custom class to the table. Default: `""`
- `captionTop`: Place the caption above the table. Default: `false`
- `detectFooter`: Detect footers in the table. Default: `false`
- `strictCaptions`: Strictly check for captions. Default: `false`
- `maxColspan`: Maximum colspan for a cell. Default: `Infinity`
- `handleComplexSpans`: Enable enhanced handling of complex row+column spanning. Default: `true`

```javascript
marked.use(
    markedExtendedTables({
        useTheadTbody: true,
        useTfoot: true,
        className: "my-custom-table",
        captionTop: false,
    }),
);
```

### Advanced Table Features

#### Column Spanning

Use multiple pipe characters (`|`) to make a cell span multiple columns:

```markdown
| Header 1                  | Header 2 | Header 3 |
| ------------------------- | -------- | -------- |
| This cell spans 2 columns |          |
| Normal                    | Normal   | Normal   |
```

#### Row Spanning

Add the caret character (`^`) at the end of a cell to make it span into the next row:

```markdown
| Header 1        | Header 2 |
| --------------- | -------- |
| This cell spans | Cell A   |
| two rows ^      | Cell B   |
```

#### Adding Captions

Add a caption by including a bracketed text before the table:

```markdown
[Table Caption]
| Header 1 | Header 2 |
|----------|----------|
| Cell 1 | Cell 2 |
```

#### Column Alignment

Align columns using colons in the separator row:

```markdown
| Left | Center | Right |
| :--- | :----: | ----: |
| A    |   B    |     C |
```

#### Complex Row and Column Spanning

[Complex Table with Row and Column Spanning]
| Header 1 | Header 2 | Header 3 | Header 4 |
|----------|----------|----------|----------|
| This spans two rows and two columns      ||
|    ^     |    ^     | Cell C  ^| Cell D  ^|
|   Cell E |   Cell F |   Cell G |   Cell H |

#### Multi-Row Headers

[Multi-row Header Example]
| Product Category | Details ||
|                  | Name       | Price |
|------------------|------------|-------|
| Electronics      | Laptop     | $1200 |
|       ^          | Phone      | $800  |

### Available Extensions

| Extension   | Package                                                                                                      | Version                                                                    | Description                                            |
|-------------|--------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------|--------------------------------------------------------|
| Accordion   | [@fsegurai/marked-extended-accordion](https://www.npmjs.com/package/@fsegurai/marked-extended-accordion)     | ![npm](https://img.shields.io/npm/v/@fsegurai/marked-extended-accordion)   | Add collapsible accordion sections to your markdown    |
| Alert       | [@fsegurai/marked-extended-alert](https://www.npmjs.com/package/@fsegurai/marked-extended-alert)             | ![npm](https://img.shields.io/npm/v/@fsegurai/marked-extended-alert)       | Create styled alert boxes for important information    |
| Footnote    | [@fsegurai/marked-extended-footnote](https://www.npmjs.com/package/@fsegurai/marked-extended-footnote)       | ![npm](https://img.shields.io/npm/v/@fsegurai/marked-extended-footnote)    | Add footnotes with automatic numbering                 |
| Lists       | [@fsegurai/marked-extended-lists](https://www.npmjs.com/package/@fsegurai/marked-extended-lists)             | ![npm](https://img.shields.io/npm/v/@fsegurai/marked-extended-lists)       | Enhanced list formatting options                       |
| Spoiler     | [@fsegurai/marked-extended-spoiler](https://www.npmjs.com/package/@fsegurai/marked-extended-spoiler)         | ![npm](https://img.shields.io/npm/v/@fsegurai/marked-extended-spoiler)     | Hide content behind spoiler tags                       |
| Tables      | [@fsegurai/marked-extended-tables](https://www.npmjs.com/package/@fsegurai/marked-extended-tables)           | ![npm](https://img.shields.io/npm/v/@fsegurai/marked-extended-tables)      | Advanced table formatting with cell spanning           |
| Tabs        | [@fsegurai/marked-extended-tabs](https://www.npmjs.com/package/@fsegurai/marked-extended-tabs)               | ![npm](https://img.shields.io/npm/v/@fsegurai/marked-extended-tabs)        | Create tabbed content sections                         |
| Timeline    | [@fsegurai/marked-extended-timeline](https://www.npmjs.com/package/@fsegurai/marked-extended-timeline)       | ![npm](https://img.shields.io/npm/v/@fsegurai/marked-extended-timeline)    | Display content in an interactive timeline format      |
| Typographic | [@fsegurai/marked-extended-typographic](https://www.npmjs.com/package/@fsegurai/marked-extended-typographic) | ![npm](https://img.shields.io/npm/v/@fsegurai/marked-extended-typographic) | Improve typography with smart quotes, dashes, and more |

### Demo Application

To see all extensions in action, check out the [[DEMO]](https://fsegurai.github.io/marked-extensions).

To set up the demo locally, follow the next steps:

```bash
git clone https://github.com/fsegurai/marked-extensions.git
bun install
bun start
```

This will serve the application locally at [http://[::1]:8000](http://[::1]:8000).

## License

Licensed under [MIT](https://opensource.org/licenses/MIT).
