Skip to main content

Render markdown into a dash layout using dash-mantine-components

Project description

Markdown-2-Dash

.. toc:: :min_level: 3

Markdown-2-Dash or m2d is a standalone package forked out of the official documentation for dash-mantine-components. Some form of m2d has always existed since the inception of the documentation, but I figured more people can make use of this to document their dash apps or component libraries.

Have a look here to see how this README would look after parsing with m2d.

Installation

pip install markdown2dash
poetry add markdown2dash

Quickstart

Just parse the contents of your markdown file with m2d parser, and voilà! You have a layout ready.

import dash_mantine_components as dmc
from dash import Dash

from markdown2dash import parse

with open("../README.md") as f:
    md = f.read()

layout = parse(md)

app = Dash(__name__)

app.layout = dmc.MantineProvider(
    dmc.Container(layout, size="lg", p=20),
    withGlobalStyles=True,
    withNormalizeCSS=True,
    theme={
        "primaryColor": "indigo",
        "colorScheme": "light",
        "fontFamily": "'Inter', sans-serif",
        "components": {
            "Table": {"defaultProps": {"striped": True, "withBorder": True}},
            "Alert": {"styles": {"title": {"fontWeight": 500}}},
        },
    },
)

if __name__ == "__main__":
    app.run(debug=True)

There's no styling by default, so you'll have to provide your own css. You can do that in two ways:

  1. Wrap your layout in a MantineProvider and use it to style your page (as you can see above)
  2. Create CSS files. You can get started with the one provided in this repository: styles.css
Example App

You can also just run the example app included in this project locally.

python example/app.py

Available tokens and class names

m2d can render following types of tokens:

Token Class Name
Links .m2d-link
Paragraph .m2d-paragraph
Emphasis .m2d-emphasis
Strong .m2d-strong
Code Span .m2d-code span
Heading .m2d-heading
Thematic Break .m2d-thematic-break
Block Code .m2d-block-code
Block Quote .m2d-block-quote
List Item .m2d-list-item
List .m2d-list
Strikethrough .m2d-strikethrough
Mark .m2d-mark
Table .m2d-table
Table Head .m2d-table-head
Table Body .m2d-table-body
Table Row .m2d-table-row
Table Cell .m2d-table-cell
Admonition .m2d-block-admonition
Image .m2d-block-image
Executable Block .m2d-block-exec
Dash Component Docs .m2d-block-kwargs
Table of Contents .m2d-block-toc

Special Directives

m2d includes some special directives enabling you to do a lot more than just rendering static markdown into a dash layout.

The directives are all extensible, and you can just overwrite the render method to suit your own needs. The default render method is provided in all directives out of the box.

Executable Block

You can use the exec directive to embed the output of a python script as well as its source code. This directive expects that you have stored the output layout in the variable called component.

.. exec::example.component

Here's the output if you are viewing this in a dash app:

.. exec::example.component

You can hide the source code using the code argument, and the border using border.

.. exec::markdown2dash.example.component
    :code: false
    :border: false
Admonition

You can use admonition directive to add dmc.Alert components in your page. Admonition directive uses DashIconify to render icons as well.

.. admonition::Alert Title
    :icon: radix-icons:github-logo
    
    This is to show that now you can render alerts directly from the markdown.

Here's the output if you are viewing this in a dash app:

.. admonition::Alert Title :icon: radix-icons:github-logo

This is to show that now you can render alerts directly from the markdown.
Image

Render images using dmc.Image like this:

.. image::https://www.dash-mantine-components.com/assets/superman.jpeg
    :width: 300px
    :height: 300px

Here's the output if you are viewing this in a dash app:

.. image::https://www.dash-mantine-components.com/assets/superman.jpeg :width: 300px :height: 300px

Dash Component API Docs

It's very simple to add API docs of your component using m2d. You just have to specify the package and the component. Let's create one for DashIconify:

.. kwargs::DashIconify
    :library: dash_iconify

Here's the output if you are viewing this in a dash app:

.. kwargs::DashIconify :library: dash_iconify

Table of Contents

This directive will parse all the headings and create a table of contents like this:

# a placeholder for self and a list of [<level>, <title>, <id>]
[
    (4, 'Installation', 'installation'),
    (4, 'Quickstart', 'quickstart'), 
    (5, 'Example App', 'example-app'),
    (4, 'Special Directives', 'special-directives'),
    (5, 'Dash Component API Docs', 'dash-component-api-docs'),
    (5, 'Table of Contents', 'table-of-contents')
]

This will then be used to render the TOC using the render method. You can enable TOC lke this:

.. toc::
    :min_level: 3

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

markdown2dash-0.1.0a3.tar.gz (10.6 kB view details)

Uploaded Source

Built Distribution

markdown2dash-0.1.0a3-py3-none-any.whl (10.9 kB view details)

Uploaded Python 3

File details

Details for the file markdown2dash-0.1.0a3.tar.gz.

File metadata

  • Download URL: markdown2dash-0.1.0a3.tar.gz
  • Upload date:
  • Size: 10.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.8.12

File hashes

Hashes for markdown2dash-0.1.0a3.tar.gz
Algorithm Hash digest
SHA256 d3ca97f75e45ee0932e3fed601a5b0ddb6126bac0c6557421221e69a4e8c2fc8
MD5 e4b35dc087abce0200d6a75c9ed59cbe
BLAKE2b-256 8d736a5c511573ded04d41a522ffb41a2b5004153b1cd9b9576c43cb7a22574e

See more details on using hashes here.

File details

Details for the file markdown2dash-0.1.0a3-py3-none-any.whl.

File metadata

File hashes

Hashes for markdown2dash-0.1.0a3-py3-none-any.whl
Algorithm Hash digest
SHA256 68afcea8a936677c0cb9eba601a1aafd6e99cd9db569d03ce2a083a9c2d5d938
MD5 0f26943165b4a5f4019fdfb2d904745b
BLAKE2b-256 cb376c8763334059e6d9b6a7a820c23f6faa8e07921599f3b669c753666eb2b7

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page