0.0.3 • Published 11 months ago

@shawspring/remark-container v0.0.3

Weekly downloads
-
License
MIT
Repository
github
Last release
11 months ago

What is this?

This is a remark plugin to wrap something in custom containers, based on remark-directive. you can passing arbitrary attributes to container, see remark-attr for more details.

for example: :::container{class="grid grid-cols-2"} will easily implement a grid layout.
the render result preview

install

:::container{class="grid grid-cols-2"}

npm install @shawspring/remark-container
yarn add @shawspring/remark-container 

:::

usage

!NOTE remark-directive is required before remark-container.

Say our document example.md contains:

# How to use remark-container

:::container{.cls1 .cls2 style="color: red"}
some **content**

>[!note] 
> this is a note
:::

…and our module example.js contains:

import rehypeFormat from 'rehype-format'
import rehypeStringify from 'rehype-stringify'
import remarkDirective from 'remark-directive'
import remarkParse from 'remark-parse'
import remarkRehype from 'remark-rehype'
import {read} from 'to-vfile'  
import {unified} from 'unified'

import remarkContainer from '@shawspring/remark-container'

const file = await unified()
    .use(remarkParse)
    .use(remarkDirective) 
    .use(remarkContainer,{attributes:{class:"container",style:"display:grid;grid-template-columns: 1fr 1fr;grid-gap: 1em;"}})
    .use(remarkRehype)
    .use(rehypeFormat)
    .use(rehypeStringify)
    .process(await read('example.md'));
console.log(String(file))

…then running node example.js yields:

<h1>How to use remark-container</h1>
<div class="container cls1 cls2" style="display:grid;grid-template-columns: 1fr 1fr;grid-gap: 1em; color: red">
  <p>some <strong>content</strong></p>
  <blockquote>
    <p>
      [!note]
      this is a note
    </p>
  </blockquote>
</div>

config

  • @param {Object} config - optional,The configuration object.
  • @param {string} config.name -optional, The container identifier behind :::.
  • @param {Object} config.attributes -optional, default attributes applied to all containers.

Examples

implement steps:

steps.png

or see website

the source code is as follows:

:::container{.steps-container .not-prose} 
1. install remark-container
```bash
npm install @shawspring/remark-container
```

1. import remark-container
```ts
import remarkContainer from '@shawspring/remark-container'
```

1. use remark-container
```ts
  ...
```
::: 

and css file as follows:

<style is:global>
    .steps-container {
        counter-reset: steps-counter;
        --bullet-size: 1.5em;
        --w-left: calc(var(--bullet-size) + 1em);
        --margin-bottom: 1em;
    }
    .steps-container > :not(ol) {
        padding-inline-start: var(--w-left);
        margin-bottom: var(--margin-bottom);
        position: relative;
    }
    .steps-container > ol {
        list-style: none;
        counter-increment: steps-counter;
        padding-inline-start: var(--w-left);
        position: relative;
    }
    .steps-container > ol::before {
        content: counter(steps-counter);
        position: absolute;
        inset-inline-start: 0;
        bottom: 0;
        box-sizing: content-box;
        width: var(--bullet-size);
        height: var(--bullet-size);
        line-height: var(--bullet-size);
        text-align: center;
        border-radius: 50%;
        border: 2px solid steelblue;
    }
    .steps-container > ol:hover::before {
        background-color: steelblue;
    }
    .steps-container > :not(ol):not(:last-of-type)::before {
        content: '';
        position: absolute;
        inset-inline-start: calc(var(--bullet-size) / 2 + 2px); 
        top: 0;
        bottom:calc(var(--margin-bottom) * -1); 
        box-sizing: border-box;
        border: 1px solid grey; 
    }
</style>
0.0.3

11 months ago

0.0.2

11 months ago

0.0.1

11 months ago