├── .eslintrc.json ├── LICENSE ├── README.md ├── demo.js ├── index.html ├── logo.svg ├── md-block.js ├── netlify.toml ├── package-lock.json ├── package.json ├── prism.css ├── prism.js ├── style.css └── tests.html /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "parserOptions": { 3 | "ecmaVersion": 6, 4 | "sourceType": "module", 5 | "ecmaFeatures": { 6 | "impliedStrict": true 7 | } 8 | }, 9 | "env": { 10 | "browser": true, 11 | "node": true 12 | }, 13 | "rules": { 14 | "semi": 1, 15 | "no-dupe-args": 1, 16 | "no-dupe-keys": 1, 17 | "no-unreachable": 1, 18 | "valid-typeof": 1, 19 | "curly": 1, 20 | "no-useless-call": 1, 21 | "brace-style": [1, "stroustrup"], 22 | "no-mixed-spaces-and-tabs": [1, "smart-tabs"], 23 | "quotes": [1, "double", "avoid-escape"], 24 | "spaced-comment": [1, "always", { 25 | "block": { 26 | "exceptions": ["*"] 27 | } 28 | }], 29 | "arrow-spacing": 1, 30 | "comma-spacing": 1, 31 | "keyword-spacing": 1 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Lea Verou 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 | 3 | # Motivation 4 | 5 | There are many web components these days to render Markdown to HTML. Here are a few: 6 | 7 | * [``](https://zerodevx.github.io/zero-md/) 8 | * [``](https://github.com/PolymerElements/marked-element) 9 | * …and I’m sure many others 10 | 11 | However, all render the resulting Markdown in Shadow DOM, making it painful to style like a regular part of the page, which my use cases required. 12 | `` supports opt-in light DOM rendering, but it's tedious to add an extra attribute per element. 13 | 14 | I also wanted a [few more things](#features) existing web components didn't have. 15 | Plus, making stuff is fun. 😅 16 | 17 | So I made my own. Feel free to use it. Or don't. 🤷🏽‍♀️ 18 | I primarily wrote it to scratch my own itch anyway! 😊 19 |
20 | 21 |
22 | 23 | # Features 24 | 25 | * Zero dependencies (except marked, obvs, which is only loaded if a `` or `` element is actually used on the page) 26 | * Styleable with regular selectors, just like the rest of the page 27 | * Load external Markdown files or render inline content 28 | * Customize start heading level (e.g. so that `# Foo` becomes a `

` and not an `

`) 29 | * Also comes with ``, for lightweight inline markdown 30 | * [Prism](https://prismjs.com) is automatically used for syntax highlighting, if included ([but can be included dynamically too](#loading-prism-dynamically)) 31 | 32 | [View demos](https://md-block.verou.me/#demos) 33 | 34 |

35 | 36 |
37 | 38 | # Usage 39 | 40 | Via HTML: 41 | ```html 42 | 43 | ``` 44 | 45 | In JS: 46 | ```js 47 | import {MarkdownBlock, MarkdownSpan, MarkdownElement} from "https://md-block.verou.me/md-block.js"; 48 | ``` 49 | 50 | Of course you can also use npm if that's your jam: 51 | 52 | ``` 53 | npm install md-block 54 | ``` 55 | ```js 56 | import {MarkdownBlock, MarkdownSpan, MarkdownElement} from "md-block"; 57 | ``` 58 | 59 | Importing the module in any of these ways also registers two custom elements: `` for block level content and `` for inline content. 60 | If you additionally want to use other tag names, [you can](#using-different-tag-names). 61 | 62 |
63 | 64 |
65 | 66 | # API 67 | 68 | ## Both `` and `` 69 | 70 | | Attribute | Property | Type | Description | 71 | |-----------|----------|------|-------------| 72 | | - | `mdContent` | String | Actual Markdown code initially read from the HTML or fetched from `src`. Can also be set to render new Markdown code | 73 | | `rendered` | `rendered` *(Read-only)* | String | Added to the element after Markdown has been rendered. Thus, you can use `md-block:not([rendered])` in your CSS to style the element differently before rendering and minimize FOUC | 74 | | `untrusted` | `untrusted` *(Read-only)* | Boolean | Sanitize contents. [Read more](#handling-untrusted-content) 75 | 76 | ## `` 77 | 78 | | Attribute | Property | Type | Description | 79 | |-----------|----------|------|-------------| 80 | | `src` | `src` | String or URL | External Markdown file to load. If specified, original element content will be rendered and displayed while the file is loading (or if it fails to load). | 81 | | `hmin` | `hmin` | Number | Minimum heading level | 82 | | `hlinks` | `hlinks` | String | Whether to linkify headings. If present with no value, the entire heading text becomes the link, otherwise the symbol provided becomes the link. Note that this is only about displaying links, headings will get ids anyway | 83 | 84 | ## `` 85 | 86 | *(No attributes or properties at the moment)* 87 | 88 |
89 | 90 |
91 | 92 | # Recipes 93 | 94 | ## Updating the Markdown 95 | 96 | While you can provide initial Markdown inline, after the element is rendered, changing its contents will not cause it to re-render, 97 | since its contents are now the parsed HTML (this is a disadvantage of this approach, compared to the Shadow DOM ones). 98 | 99 | If you need to update its contents dynamically, use `element.mdContent`. 100 | You can also read that property to get access to the Markdown code that was last rendered, whether it came from the element's contents, 101 | or fetched from a URL. 102 | 103 | Note that setting `mdContent` will override any remote URL provided via `src`. 104 | 105 | ## Minimizing FOUC 106 | 107 | md-block adds a `rendered` attribute to elements whose Markdown has been rendered. 108 | This allows you to style unrendered content however you please, by using a `md-block:not([rendered])` CSS selector. 109 | 110 | - You could hide it entirely via `md-block:not([rendered]) { display: none }` 111 | - You could apply `white-space: pre-line` to it so that at least paragraphs are not all smushed together 112 | - …or you could do something fancier. 113 | 114 | I'd recommend you consider *how it fails* before deciding what to do. It's the Internet, 💩 happens. 115 | Do you want your content to not be visible if a script doesn't load? 116 | 117 | When loading remote content, there are two renders: First, any fallback content renders, then the remote content. 118 | Because we often want to style the element differently until the remote content renders, the `rendered` attribute has keyword values, depending on what happened: 119 | 120 | * `fallback` when only fallback content has been rendered 121 | * `remote` if remote content has been rendered 122 | * `content` if element content has been rendered and there is no `src` attribute present 123 | * `property` if content has been rendered by setting `this.mdContent` directly 124 | 125 | ## Using different tag names 126 | 127 | By default, md-block registers two custom elements: `` for block-level content and `` for inline content. 128 | You can use different names, but [since each class can only be associated with one tag name](https://developer.mozilla.org/en-US/docs/Web/API/CustomElementRegistry/define#:~:text=Exceptions-,notsupportederror,-DOMException), you need to create your own subclass: 129 | 130 | ```js 131 | import {MarkdownBlock, MarkdownSpan, MarkdownElement} from "https://md-block.verou.me/md-block.js" 132 | 133 | customElements.define("md-content", class MarkdownContent extends MarkdownBlock {}); 134 | ``` 135 | 136 | ## Handling untrusted content 137 | 138 | By default md-block does not santize the Markdown you provide, since in most use cases the content is trusted. 139 | 140 | If you need to render untrusted content use the `untrusted` attribute, which will dynamically load [DOMPurify](https://github.com/cure53/DOMPurify) and use it. 141 | This is not dynamic, you need to add it in your actual markup (or before the element is connected, if dynamically generated). 142 | The reason is that it's unsafe to add it later: if the content has been already rendered once and treated as safe, it's pointless to sanitize it afterwards and re-render. 143 | 144 | Important: Do **not** rely on the `untrusted` attribute for inline Markdown! This is mainly useful for content linked via the `src` attribute. 145 | If there is potentially malicious code in the inline Markdown you are using, it will be picked up by the browser before md-block has the chance to do anything about it. 146 | Instead, use a regular `` element, and `MarkdownElement.sanitize()` for the untrusted content. 147 | 148 | ## Using different URLs for marked and DOMPurify 149 | 150 | By default, `md-block` dynamically loads marked and DOMPurify from a CDN. If you want to use different versions, there is a number of ways: 151 | 152 | Probably the easiest is if you use the versions of these libraries that create a global, md-block will use that instead of loading them. 153 | 154 | The URLs md-block uses to fetch these libraries reside on a separate `URLs` export. So theoretically you could do something like this: 155 | 156 | ```js 157 | import {URLs as MdBlockURLS, MarkdownBlock, MarkdownSpan, MarkdownElement} from "./md-block.js"; 158 | 159 | MdBlockURLS.marked = "./marked.js"; 160 | MdBlockURLS.DOMPurify = "./purify.es.js"; 161 | ``` 162 | 163 | But it's uncertain whether the new URLs will be picked up before the default ones load. In my tests that seems to work for DOMPurify but not marked. 164 | These libraries are loaded when the element is connected, so you *could* add the `` elements dynamically to the document after you set the URLs, but that's a bit of a hassle. 165 | 166 | You can also use the `URLs` export to import these modules yourself, in case you want to add plugins or whatnot. 167 | 168 | ## Loading Prism dynamically 169 | 170 | By default `md-block` will use Prism if it's available, but won’t load it dynamically if it isn't. 171 | You *could* tell it to load Prism dynamically, **only if there are actual code elements**, by providing a Prism URL: 172 | 173 | ```js 174 | import {URLs as MdBlockURLS, MarkdownBlock, MarkdownSpan, MarkdownElement} from "./md-block.js"; 175 | 176 | MdBlockURLS.Prism = "./prism.js"; 177 | // You can optionally also provide a Prism CSS URL: 178 | MdBlockURLS.PrismCSS = "./prism.css"; 179 | ``` 180 | 181 | ## `` inception 182 | 183 | Did you know you can actualy use `` *inside your Markdown* and it works correctly? 184 | 185 | For a cool example of this, check out [the Stretchy docs](https://stretchy.verou.me/#browser-support) 186 | 187 | ## How to set different Markdown options/flavor? 188 | 189 | Right now, this element uses GFM as a Markdown flavor and doesn’t expose a whole lot of options (besides `hmin` and `hlinks`). 190 | That’s because I originally wrote it for my own needs, and that’s what I needed. 191 | I’m not opposed to adding more customizability, if there are actual use cases that require it. 192 | If you have such use cases, please [open an issue](https://github.com/leaverou/md-block/issues/new). 193 | 194 |
195 | -------------------------------------------------------------------------------- /demo.js: -------------------------------------------------------------------------------- 1 | import {URLs, MarkdownBlock, MarkdownSpan, MarkdownElement} from "./md-block.js"; 2 | 3 | import create from "https://v2.blissfuljs.com/src/dom/create.js"; 4 | 5 | // const importURL = new URL("md-block.js", location) + ""; 6 | const importURL = "https://md-block.verou.me/md-block.js"; 7 | let js = `import {MarkdownBlock, MarkdownSpan, MarkdownElement} from "${importURL}";`; 8 | 9 | for (let script of document.querySelectorAll("script[type='text/html'].md-block-demo")) { 10 | let html = script.textContent; 11 | 12 | html = Prism?.plugins.NormalizeWhitespace?.normalize(html); 13 | let description = script.previousElementSibling; 14 | 15 | let exampleContainer = create({ 16 | tag: "article", 17 | className: "demo-container", 18 | contents: [ 19 | { 20 | tag: "header", 21 | contents: [ 22 | description, 23 | { 24 | tag: "form", 25 | action: "https://codepen.io/pen/define", 26 | method: "POST", 27 | target: "_blank", 28 | contents: [ 29 | { 30 | tag: "input", 31 | type: "hidden", 32 | name: "data", 33 | value: JSON.stringify({ 34 | title: description.textContent, 35 | html, 36 | css: "", 37 | js, 38 | editors: "1110", 39 | // head: `` 40 | }) 41 | }, 42 | { 43 | tag: "button", 44 | textContent: "Edit in CodePen ↗️" 45 | } 46 | ], 47 | after: script, 48 | } 49 | ] 50 | }, 51 | { 52 | tag: "pre", 53 | class: "language-html demo-code", 54 | contents: { 55 | tag: "code", 56 | textContent: html 57 | } 58 | }, 59 | { 60 | className: "demo-output", 61 | innerHTML: html 62 | } 63 | ], 64 | after: script 65 | }); 66 | } 67 | 68 | import * as Stretchy from "https://stretchy.verou.me/dist/stretchy.min.js"; 69 | Stretchy.selectors.filter = "#repl *"; 70 | Stretchy.init(); 71 | 72 | if (localStorage["md-block-demo"]){ 73 | JSON.parse(localStorage["md-block-demo"]).forEach(([name, value]) => { 74 | let el = repl_container.elements[name]; 75 | 76 | if (el) { 77 | el.value = value; 78 | el.dispatchEvent(new Event("input")); 79 | } 80 | }); 81 | } 82 | 83 | repl.addEventListener("input", evt => { 84 | let {target} = evt; 85 | let f = repl_container; 86 | let html = `<${f.tag.value} ${f.attributes.value}> 87 | ${f.contents.value} 88 | `; 89 | // console.log(html); 90 | end_tag.textContent = f.tag.value; 91 | 92 | rendering.innerHTML = html; 93 | 94 | let values = []; 95 | for (let el of f.elements) { 96 | if (el.name) { 97 | values.push([el.name, el.value]); 98 | } 99 | } 100 | 101 | if (evt.isTrusted) { 102 | localStorage["md-block-demo"] = JSON.stringify(values); 103 | } 104 | 105 | }); 106 | 107 | repl.dispatchEvent(new Event("input")); 108 | 109 | rendering.addEventListener("md-render", evt => { 110 | let code = output_html.querySelector("code"); 111 | code.textContent = evt.target.outerHTML; 112 | Prism.highlightElement(code); 113 | }); -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | md-block: Render styleable Markdown in your HTML 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 |

<md-block>

21 | 22 | 23 | Render styleable Markdown in your HTML. 24 | Uses [marked](https://marked.js.org/) under the hood. 25 | 26 |
27 | 28 | 35 | 36 |
37 | 38 | 39 | [Documentation on GitHub](https://github.com/leaverou/md-block/#readme) 40 | 41 | 42 |
43 |

Demos

44 | 45 |

Block

46 | 47 | 65 | 66 |

Block with incorrect src and fallback content

67 | 68 | 73 | 74 |

Minimum heading level:

75 | 76 | 85 | 86 |

Heading links

87 | 99 | 100 |

Inline. Note that block level syntax like headings, code blocks, or lists is not processed

101 | 102 | 120 | 121 | With and without [sanitization](#handling-untrusted-content). 122 | 123 | 128 | 129 |

View source for more demos!

130 |
131 | 132 |
133 | 134 |
135 |

Live demo

136 | 137 |
138 |
< >
139 | 
142 | </>
143 | 
144 | 145 |
146 |
147 | 148 | 149 | 150 |
151 |
152 | 153 | 154 | 155 | 161 | 162 | 163 | -------------------------------------------------------------------------------- /logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | * 10 | 11 | # 12 | 13 | -------------------------------------------------------------------------------- /md-block.js: -------------------------------------------------------------------------------- 1 | /** 2 | * custom element 3 | * @author Lea Verou 4 | */ 5 | 6 | let marked = window.marked; 7 | let DOMPurify = window.DOMPurify; 8 | let Prism = window.Prism; 9 | 10 | export const URLs = { 11 | marked: "https://cdn.jsdelivr.net/npm/marked/src/marked.min.js", 12 | DOMPurify: "https://cdn.jsdelivr.net/npm/dompurify@2.3.3/dist/purify.es.min.js" 13 | } 14 | 15 | // Fix indentation 16 | function deIndent(text) { 17 | let indent = text.match(/^[\r\n]*([\t ]+)/); 18 | 19 | if (indent) { 20 | indent = indent[1]; 21 | 22 | text = text.replace(RegExp("^" + indent, "gm"), ""); 23 | } 24 | 25 | return text; 26 | } 27 | 28 | export class MarkdownElement extends HTMLElement { 29 | constructor() { 30 | super(); 31 | 32 | this.renderer = Object.assign({}, this.constructor.renderer); 33 | 34 | for (let property in this.renderer) { 35 | this.renderer[property] = this.renderer[property].bind(this); 36 | } 37 | } 38 | 39 | get rendered() { 40 | return this.getAttribute("rendered"); 41 | } 42 | 43 | get mdContent () { 44 | return this._mdContent; 45 | } 46 | 47 | set mdContent (html) { 48 | this._mdContent = html; 49 | this._contentFromHTML = false; 50 | 51 | this.render(); 52 | } 53 | 54 | connectedCallback() { 55 | Object.defineProperty(this, "untrusted", { 56 | value: this.hasAttribute("untrusted"), 57 | enumerable: true, 58 | configurable: false, 59 | writable: false 60 | }); 61 | 62 | if (this._mdContent === undefined) { 63 | this._contentFromHTML = true; 64 | this._mdContent = deIndent(this.innerHTML); 65 | // https://github.com/markedjs/marked/issues/874#issuecomment-339995375 66 | // marked expects markdown quotes (>) to be un-escaped, otherwise they won't render correctly 67 | this._mdContent = this._mdContent.replace(/>/g, '>'); 68 | } 69 | 70 | this.render(); 71 | } 72 | 73 | async render () { 74 | if (!this.isConnected || this._mdContent === undefined) { 75 | return; 76 | } 77 | 78 | if (!marked) { 79 | marked = import(URLs.marked).then(m => m.marked); 80 | } 81 | 82 | marked = await marked; 83 | 84 | marked.setOptions({ 85 | gfm: true, 86 | smartypants: true, 87 | langPrefix: "language-", 88 | }); 89 | 90 | marked.use({renderer: this.renderer}); 91 | 92 | let html = this._parse(); 93 | 94 | if (this.untrusted) { 95 | let mdContent = this._mdContent; 96 | html = await MarkdownElement.sanitize(html); 97 | if (this._mdContent !== mdContent) { 98 | // While we were running this async call, the content changed 99 | // We don’t want to overwrite with old data. Abort mission! 100 | return; 101 | } 102 | } 103 | 104 | this.innerHTML = html; 105 | 106 | if (!Prism && URLs.Prism && this.querySelector("code")) { 107 | Prism = import(URLs.Prism); 108 | 109 | if (URLs.PrismCSS) { 110 | let link = document.createElement("link"); 111 | link.rel = "stylesheet"; 112 | link.href = URLs.PrismCSS; 113 | document.head.appendChild(link); 114 | } 115 | } 116 | 117 | if (Prism) { 118 | await Prism; // in case it's still loading 119 | Prism.highlightAllUnder(this); 120 | } 121 | 122 | if (this.src) { 123 | this.setAttribute("rendered", this._contentFromHTML? "fallback" : "remote"); 124 | } 125 | else { 126 | this.setAttribute("rendered", this._contentFromHTML? "content" : "property"); 127 | } 128 | 129 | // Fire event 130 | let event = new CustomEvent("md-render", {bubbles: true, composed: true}); 131 | this.dispatchEvent(event); 132 | } 133 | 134 | static async sanitize(html) { 135 | if (!DOMPurify) { 136 | DOMPurify = import(URLs.DOMPurify).then(m => m.default); 137 | } 138 | 139 | DOMPurify = await DOMPurify; // in case it's still loading 140 | 141 | return DOMPurify.sanitize(html); 142 | } 143 | }; 144 | 145 | export class MarkdownSpan extends MarkdownElement { 146 | constructor() { 147 | super(); 148 | } 149 | 150 | _parse () { 151 | return marked.parseInline(this._mdContent); 152 | } 153 | 154 | static renderer = { 155 | codespan (code) { 156 | if (this._contentFromHTML) { 157 | // Inline HTML code needs to be escaped to not be parsed as HTML by the browser 158 | // This results in marked double-escaping it, so we need to unescape it 159 | code = code.replace(/&(?=[lg]t;)/g, "&"); 160 | } 161 | else { 162 | // Remote code may include characters that need to be escaped to be visible in HTML 163 | code = code.replace(/${code}`; 167 | } 168 | } 169 | } 170 | 171 | export class MarkdownBlock extends MarkdownElement { 172 | constructor() { 173 | super(); 174 | } 175 | 176 | get src() { 177 | return this._src; 178 | } 179 | 180 | set src(value) { 181 | this.setAttribute("src", value); 182 | } 183 | 184 | get hmin() { 185 | return this._hmin || 1; 186 | } 187 | 188 | set hmin(value) { 189 | this.setAttribute("hmin", value); 190 | } 191 | 192 | get hlinks() { 193 | return this._hlinks ?? null; 194 | } 195 | 196 | set hlinks(value) { 197 | this.setAttribute("hlinks", value); 198 | } 199 | 200 | _parse () { 201 | return marked.parse(this._mdContent); 202 | } 203 | 204 | static renderer = Object.assign({ 205 | heading (text, level, _raw, slugger) { 206 | level = Math.min(6, level + (this.hmin - 1)); 207 | const id = slugger.slug(text); 208 | const hlinks = this.hlinks; 209 | 210 | let content; 211 | 212 | if (hlinks === null) { 213 | // No heading links 214 | content = text; 215 | } 216 | else { 217 | content = ``; 218 | 219 | if (hlinks === "") { 220 | // Heading content is the link 221 | content += text + ""; 222 | } 223 | else { 224 | // Headings are prepended with a linked symbol 225 | content += hlinks + "" + text; 226 | } 227 | } 228 | 229 | return ` 230 | 231 | ${content} 232 | `; 233 | }, 234 | 235 | code (code, language, escaped) { 236 | if (this._contentFromHTML) { 237 | // Inline HTML code needs to be escaped to not be parsed as HTML by the browser 238 | // This results in marked double-escaping it, so we need to unescape it 239 | code = code.replace(/&(?=[lg]t;)/g, "&"); 240 | } 241 | else { 242 | // Remote code may include characters that need to be escaped to be visible in HTML 243 | code = code.replace(/${code}`; 247 | } 248 | }, MarkdownSpan.renderer); 249 | 250 | static get observedAttributes() { 251 | return ["src", "hmin", "hlinks"]; 252 | } 253 | 254 | attributeChangedCallback(name, oldValue, newValue) { 255 | if (oldValue === newValue) { 256 | return; 257 | } 258 | 259 | switch (name) { 260 | case "src": 261 | let url; 262 | try { 263 | url = new URL(newValue, location); 264 | } 265 | catch (e) { 266 | return; 267 | } 268 | 269 | let prevSrc = this.src; 270 | this._src = url; 271 | 272 | if (this.src !== prevSrc) { 273 | fetch(this.src) 274 | .then(response => { 275 | if (!response.ok) { 276 | throw new Error(`Failed to fetch ${this.src}: ${response.status} ${response.statusText}`); 277 | } 278 | 279 | return response.text(); 280 | }) 281 | .then(text => { 282 | this.mdContent = text; 283 | }) 284 | .catch(e => {}); 285 | } 286 | 287 | break; 288 | case "hmin": 289 | if (newValue > 0) { 290 | this._hmin = +newValue; 291 | 292 | this.render(); 293 | } 294 | break; 295 | case "hlinks": 296 | this._hlinks = newValue; 297 | this.render(); 298 | } 299 | } 300 | } 301 | 302 | 303 | customElements.define("md-block", MarkdownBlock); 304 | customElements.define("md-span", MarkdownSpan); 305 | -------------------------------------------------------------------------------- /netlify.toml: -------------------------------------------------------------------------------- 1 | [[headers]] 2 | 3 | for = "/*" 4 | [headers.values] 5 | Access-Control-Allow-Origin = "*" 6 | 7 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "md-block", 3 | "version": "0.0.1", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "md-block", 9 | "version": "0.0.1", 10 | "license": "MIT", 11 | "devDependencies": { 12 | "eslint": "^8.3.0" 13 | } 14 | }, 15 | "node_modules/@eslint/eslintrc": { 16 | "version": "1.0.4", 17 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.4.tgz", 18 | "integrity": "sha512-h8Vx6MdxwWI2WM8/zREHMoqdgLNXEL4QX3MWSVMdyNJGvXVOs+6lp+m2hc3FnuMHDc4poxFNI20vCk0OmI4G0Q==", 19 | "dev": true, 20 | "dependencies": { 21 | "ajv": "^6.12.4", 22 | "debug": "^4.3.2", 23 | "espree": "^9.0.0", 24 | "globals": "^13.9.0", 25 | "ignore": "^4.0.6", 26 | "import-fresh": "^3.2.1", 27 | "js-yaml": "^4.1.0", 28 | "minimatch": "^3.0.4", 29 | "strip-json-comments": "^3.1.1" 30 | }, 31 | "engines": { 32 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 33 | } 34 | }, 35 | "node_modules/@humanwhocodes/config-array": { 36 | "version": "0.6.0", 37 | "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.6.0.tgz", 38 | "integrity": "sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==", 39 | "dev": true, 40 | "dependencies": { 41 | "@humanwhocodes/object-schema": "^1.2.0", 42 | "debug": "^4.1.1", 43 | "minimatch": "^3.0.4" 44 | }, 45 | "engines": { 46 | "node": ">=10.10.0" 47 | } 48 | }, 49 | "node_modules/@humanwhocodes/object-schema": { 50 | "version": "1.2.1", 51 | "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", 52 | "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", 53 | "dev": true 54 | }, 55 | "node_modules/acorn": { 56 | "version": "8.6.0", 57 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.6.0.tgz", 58 | "integrity": "sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==", 59 | "dev": true, 60 | "bin": { 61 | "acorn": "bin/acorn" 62 | }, 63 | "engines": { 64 | "node": ">=0.4.0" 65 | } 66 | }, 67 | "node_modules/acorn-jsx": { 68 | "version": "5.3.2", 69 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 70 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 71 | "dev": true, 72 | "peerDependencies": { 73 | "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" 74 | } 75 | }, 76 | "node_modules/ajv": { 77 | "version": "6.12.6", 78 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 79 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 80 | "dev": true, 81 | "dependencies": { 82 | "fast-deep-equal": "^3.1.1", 83 | "fast-json-stable-stringify": "^2.0.0", 84 | "json-schema-traverse": "^0.4.1", 85 | "uri-js": "^4.2.2" 86 | }, 87 | "funding": { 88 | "type": "github", 89 | "url": "https://github.com/sponsors/epoberezkin" 90 | } 91 | }, 92 | "node_modules/ansi-colors": { 93 | "version": "4.1.1", 94 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", 95 | "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", 96 | "dev": true, 97 | "engines": { 98 | "node": ">=6" 99 | } 100 | }, 101 | "node_modules/ansi-regex": { 102 | "version": "5.0.1", 103 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 104 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 105 | "dev": true, 106 | "engines": { 107 | "node": ">=8" 108 | } 109 | }, 110 | "node_modules/ansi-styles": { 111 | "version": "4.3.0", 112 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 113 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 114 | "dev": true, 115 | "dependencies": { 116 | "color-convert": "^2.0.1" 117 | }, 118 | "engines": { 119 | "node": ">=8" 120 | }, 121 | "funding": { 122 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 123 | } 124 | }, 125 | "node_modules/argparse": { 126 | "version": "2.0.1", 127 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 128 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 129 | "dev": true 130 | }, 131 | "node_modules/balanced-match": { 132 | "version": "1.0.2", 133 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 134 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 135 | "dev": true 136 | }, 137 | "node_modules/brace-expansion": { 138 | "version": "1.1.11", 139 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 140 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 141 | "dev": true, 142 | "dependencies": { 143 | "balanced-match": "^1.0.0", 144 | "concat-map": "0.0.1" 145 | } 146 | }, 147 | "node_modules/callsites": { 148 | "version": "3.1.0", 149 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 150 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 151 | "dev": true, 152 | "engines": { 153 | "node": ">=6" 154 | } 155 | }, 156 | "node_modules/chalk": { 157 | "version": "4.1.2", 158 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 159 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 160 | "dev": true, 161 | "dependencies": { 162 | "ansi-styles": "^4.1.0", 163 | "supports-color": "^7.1.0" 164 | }, 165 | "engines": { 166 | "node": ">=10" 167 | }, 168 | "funding": { 169 | "url": "https://github.com/chalk/chalk?sponsor=1" 170 | } 171 | }, 172 | "node_modules/color-convert": { 173 | "version": "2.0.1", 174 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 175 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 176 | "dev": true, 177 | "dependencies": { 178 | "color-name": "~1.1.4" 179 | }, 180 | "engines": { 181 | "node": ">=7.0.0" 182 | } 183 | }, 184 | "node_modules/color-name": { 185 | "version": "1.1.4", 186 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 187 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 188 | "dev": true 189 | }, 190 | "node_modules/concat-map": { 191 | "version": "0.0.1", 192 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 193 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 194 | "dev": true 195 | }, 196 | "node_modules/cross-spawn": { 197 | "version": "7.0.3", 198 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 199 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 200 | "dev": true, 201 | "dependencies": { 202 | "path-key": "^3.1.0", 203 | "shebang-command": "^2.0.0", 204 | "which": "^2.0.1" 205 | }, 206 | "engines": { 207 | "node": ">= 8" 208 | } 209 | }, 210 | "node_modules/debug": { 211 | "version": "4.3.3", 212 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", 213 | "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", 214 | "dev": true, 215 | "dependencies": { 216 | "ms": "2.1.2" 217 | }, 218 | "engines": { 219 | "node": ">=6.0" 220 | }, 221 | "peerDependenciesMeta": { 222 | "supports-color": { 223 | "optional": true 224 | } 225 | } 226 | }, 227 | "node_modules/deep-is": { 228 | "version": "0.1.4", 229 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 230 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 231 | "dev": true 232 | }, 233 | "node_modules/doctrine": { 234 | "version": "3.0.0", 235 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 236 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 237 | "dev": true, 238 | "dependencies": { 239 | "esutils": "^2.0.2" 240 | }, 241 | "engines": { 242 | "node": ">=6.0.0" 243 | } 244 | }, 245 | "node_modules/enquirer": { 246 | "version": "2.3.6", 247 | "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", 248 | "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", 249 | "dev": true, 250 | "dependencies": { 251 | "ansi-colors": "^4.1.1" 252 | }, 253 | "engines": { 254 | "node": ">=8.6" 255 | } 256 | }, 257 | "node_modules/escape-string-regexp": { 258 | "version": "4.0.0", 259 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 260 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 261 | "dev": true, 262 | "engines": { 263 | "node": ">=10" 264 | }, 265 | "funding": { 266 | "url": "https://github.com/sponsors/sindresorhus" 267 | } 268 | }, 269 | "node_modules/eslint": { 270 | "version": "8.3.0", 271 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.3.0.tgz", 272 | "integrity": "sha512-aIay56Ph6RxOTC7xyr59Kt3ewX185SaGnAr8eWukoPLeriCrvGjvAubxuvaXOfsxhtwV5g0uBOsyhAom4qJdww==", 273 | "dev": true, 274 | "dependencies": { 275 | "@eslint/eslintrc": "^1.0.4", 276 | "@humanwhocodes/config-array": "^0.6.0", 277 | "ajv": "^6.10.0", 278 | "chalk": "^4.0.0", 279 | "cross-spawn": "^7.0.2", 280 | "debug": "^4.3.2", 281 | "doctrine": "^3.0.0", 282 | "enquirer": "^2.3.5", 283 | "escape-string-regexp": "^4.0.0", 284 | "eslint-scope": "^7.1.0", 285 | "eslint-utils": "^3.0.0", 286 | "eslint-visitor-keys": "^3.1.0", 287 | "espree": "^9.1.0", 288 | "esquery": "^1.4.0", 289 | "esutils": "^2.0.2", 290 | "fast-deep-equal": "^3.1.3", 291 | "file-entry-cache": "^6.0.1", 292 | "functional-red-black-tree": "^1.0.1", 293 | "glob-parent": "^6.0.1", 294 | "globals": "^13.6.0", 295 | "ignore": "^4.0.6", 296 | "import-fresh": "^3.0.0", 297 | "imurmurhash": "^0.1.4", 298 | "is-glob": "^4.0.0", 299 | "js-yaml": "^4.1.0", 300 | "json-stable-stringify-without-jsonify": "^1.0.1", 301 | "levn": "^0.4.1", 302 | "lodash.merge": "^4.6.2", 303 | "minimatch": "^3.0.4", 304 | "natural-compare": "^1.4.0", 305 | "optionator": "^0.9.1", 306 | "progress": "^2.0.0", 307 | "regexpp": "^3.2.0", 308 | "semver": "^7.2.1", 309 | "strip-ansi": "^6.0.1", 310 | "strip-json-comments": "^3.1.0", 311 | "text-table": "^0.2.0", 312 | "v8-compile-cache": "^2.0.3" 313 | }, 314 | "bin": { 315 | "eslint": "bin/eslint.js" 316 | }, 317 | "engines": { 318 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 319 | }, 320 | "funding": { 321 | "url": "https://opencollective.com/eslint" 322 | } 323 | }, 324 | "node_modules/eslint-scope": { 325 | "version": "7.1.0", 326 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", 327 | "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", 328 | "dev": true, 329 | "dependencies": { 330 | "esrecurse": "^4.3.0", 331 | "estraverse": "^5.2.0" 332 | }, 333 | "engines": { 334 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 335 | } 336 | }, 337 | "node_modules/eslint-utils": { 338 | "version": "3.0.0", 339 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", 340 | "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", 341 | "dev": true, 342 | "dependencies": { 343 | "eslint-visitor-keys": "^2.0.0" 344 | }, 345 | "engines": { 346 | "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" 347 | }, 348 | "funding": { 349 | "url": "https://github.com/sponsors/mysticatea" 350 | }, 351 | "peerDependencies": { 352 | "eslint": ">=5" 353 | } 354 | }, 355 | "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { 356 | "version": "2.1.0", 357 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", 358 | "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", 359 | "dev": true, 360 | "engines": { 361 | "node": ">=10" 362 | } 363 | }, 364 | "node_modules/eslint-visitor-keys": { 365 | "version": "3.1.0", 366 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz", 367 | "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==", 368 | "dev": true, 369 | "engines": { 370 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 371 | } 372 | }, 373 | "node_modules/espree": { 374 | "version": "9.1.0", 375 | "resolved": "https://registry.npmjs.org/espree/-/espree-9.1.0.tgz", 376 | "integrity": "sha512-ZgYLvCS1wxOczBYGcQT9DDWgicXwJ4dbocr9uYN+/eresBAUuBu+O4WzB21ufQ/JqQT8gyp7hJ3z8SHii32mTQ==", 377 | "dev": true, 378 | "dependencies": { 379 | "acorn": "^8.6.0", 380 | "acorn-jsx": "^5.3.1", 381 | "eslint-visitor-keys": "^3.1.0" 382 | }, 383 | "engines": { 384 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 385 | } 386 | }, 387 | "node_modules/esquery": { 388 | "version": "1.4.0", 389 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", 390 | "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", 391 | "dev": true, 392 | "dependencies": { 393 | "estraverse": "^5.1.0" 394 | }, 395 | "engines": { 396 | "node": ">=0.10" 397 | } 398 | }, 399 | "node_modules/esrecurse": { 400 | "version": "4.3.0", 401 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 402 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 403 | "dev": true, 404 | "dependencies": { 405 | "estraverse": "^5.2.0" 406 | }, 407 | "engines": { 408 | "node": ">=4.0" 409 | } 410 | }, 411 | "node_modules/estraverse": { 412 | "version": "5.3.0", 413 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 414 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 415 | "dev": true, 416 | "engines": { 417 | "node": ">=4.0" 418 | } 419 | }, 420 | "node_modules/esutils": { 421 | "version": "2.0.3", 422 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 423 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 424 | "dev": true, 425 | "engines": { 426 | "node": ">=0.10.0" 427 | } 428 | }, 429 | "node_modules/fast-deep-equal": { 430 | "version": "3.1.3", 431 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 432 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 433 | "dev": true 434 | }, 435 | "node_modules/fast-json-stable-stringify": { 436 | "version": "2.1.0", 437 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 438 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 439 | "dev": true 440 | }, 441 | "node_modules/fast-levenshtein": { 442 | "version": "2.0.6", 443 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 444 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", 445 | "dev": true 446 | }, 447 | "node_modules/file-entry-cache": { 448 | "version": "6.0.1", 449 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", 450 | "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", 451 | "dev": true, 452 | "dependencies": { 453 | "flat-cache": "^3.0.4" 454 | }, 455 | "engines": { 456 | "node": "^10.12.0 || >=12.0.0" 457 | } 458 | }, 459 | "node_modules/flat-cache": { 460 | "version": "3.0.4", 461 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", 462 | "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", 463 | "dev": true, 464 | "dependencies": { 465 | "flatted": "^3.1.0", 466 | "rimraf": "^3.0.2" 467 | }, 468 | "engines": { 469 | "node": "^10.12.0 || >=12.0.0" 470 | } 471 | }, 472 | "node_modules/flatted": { 473 | "version": "3.2.4", 474 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", 475 | "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", 476 | "dev": true 477 | }, 478 | "node_modules/fs.realpath": { 479 | "version": "1.0.0", 480 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 481 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 482 | "dev": true 483 | }, 484 | "node_modules/functional-red-black-tree": { 485 | "version": "1.0.1", 486 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", 487 | "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", 488 | "dev": true 489 | }, 490 | "node_modules/glob": { 491 | "version": "7.2.0", 492 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", 493 | "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", 494 | "dev": true, 495 | "dependencies": { 496 | "fs.realpath": "^1.0.0", 497 | "inflight": "^1.0.4", 498 | "inherits": "2", 499 | "minimatch": "^3.0.4", 500 | "once": "^1.3.0", 501 | "path-is-absolute": "^1.0.0" 502 | }, 503 | "engines": { 504 | "node": "*" 505 | }, 506 | "funding": { 507 | "url": "https://github.com/sponsors/isaacs" 508 | } 509 | }, 510 | "node_modules/glob-parent": { 511 | "version": "6.0.2", 512 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 513 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 514 | "dev": true, 515 | "dependencies": { 516 | "is-glob": "^4.0.3" 517 | }, 518 | "engines": { 519 | "node": ">=10.13.0" 520 | } 521 | }, 522 | "node_modules/globals": { 523 | "version": "13.12.0", 524 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", 525 | "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", 526 | "dev": true, 527 | "dependencies": { 528 | "type-fest": "^0.20.2" 529 | }, 530 | "engines": { 531 | "node": ">=8" 532 | }, 533 | "funding": { 534 | "url": "https://github.com/sponsors/sindresorhus" 535 | } 536 | }, 537 | "node_modules/has-flag": { 538 | "version": "4.0.0", 539 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 540 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 541 | "dev": true, 542 | "engines": { 543 | "node": ">=8" 544 | } 545 | }, 546 | "node_modules/ignore": { 547 | "version": "4.0.6", 548 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", 549 | "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", 550 | "dev": true, 551 | "engines": { 552 | "node": ">= 4" 553 | } 554 | }, 555 | "node_modules/import-fresh": { 556 | "version": "3.3.0", 557 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 558 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 559 | "dev": true, 560 | "dependencies": { 561 | "parent-module": "^1.0.0", 562 | "resolve-from": "^4.0.0" 563 | }, 564 | "engines": { 565 | "node": ">=6" 566 | }, 567 | "funding": { 568 | "url": "https://github.com/sponsors/sindresorhus" 569 | } 570 | }, 571 | "node_modules/imurmurhash": { 572 | "version": "0.1.4", 573 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 574 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 575 | "dev": true, 576 | "engines": { 577 | "node": ">=0.8.19" 578 | } 579 | }, 580 | "node_modules/inflight": { 581 | "version": "1.0.6", 582 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 583 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 584 | "dev": true, 585 | "dependencies": { 586 | "once": "^1.3.0", 587 | "wrappy": "1" 588 | } 589 | }, 590 | "node_modules/inherits": { 591 | "version": "2.0.4", 592 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 593 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 594 | "dev": true 595 | }, 596 | "node_modules/is-extglob": { 597 | "version": "2.1.1", 598 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 599 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 600 | "dev": true, 601 | "engines": { 602 | "node": ">=0.10.0" 603 | } 604 | }, 605 | "node_modules/is-glob": { 606 | "version": "4.0.3", 607 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 608 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 609 | "dev": true, 610 | "dependencies": { 611 | "is-extglob": "^2.1.1" 612 | }, 613 | "engines": { 614 | "node": ">=0.10.0" 615 | } 616 | }, 617 | "node_modules/isexe": { 618 | "version": "2.0.0", 619 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 620 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 621 | "dev": true 622 | }, 623 | "node_modules/js-yaml": { 624 | "version": "4.1.0", 625 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 626 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 627 | "dev": true, 628 | "dependencies": { 629 | "argparse": "^2.0.1" 630 | }, 631 | "bin": { 632 | "js-yaml": "bin/js-yaml.js" 633 | } 634 | }, 635 | "node_modules/json-schema-traverse": { 636 | "version": "0.4.1", 637 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 638 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 639 | "dev": true 640 | }, 641 | "node_modules/json-stable-stringify-without-jsonify": { 642 | "version": "1.0.1", 643 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 644 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", 645 | "dev": true 646 | }, 647 | "node_modules/levn": { 648 | "version": "0.4.1", 649 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 650 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 651 | "dev": true, 652 | "dependencies": { 653 | "prelude-ls": "^1.2.1", 654 | "type-check": "~0.4.0" 655 | }, 656 | "engines": { 657 | "node": ">= 0.8.0" 658 | } 659 | }, 660 | "node_modules/lodash.merge": { 661 | "version": "4.6.2", 662 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 663 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 664 | "dev": true 665 | }, 666 | "node_modules/lru-cache": { 667 | "version": "6.0.0", 668 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 669 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 670 | "dev": true, 671 | "dependencies": { 672 | "yallist": "^4.0.0" 673 | }, 674 | "engines": { 675 | "node": ">=10" 676 | } 677 | }, 678 | "node_modules/minimatch": { 679 | "version": "3.0.4", 680 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 681 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 682 | "dev": true, 683 | "dependencies": { 684 | "brace-expansion": "^1.1.7" 685 | }, 686 | "engines": { 687 | "node": "*" 688 | } 689 | }, 690 | "node_modules/ms": { 691 | "version": "2.1.2", 692 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 693 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 694 | "dev": true 695 | }, 696 | "node_modules/natural-compare": { 697 | "version": "1.4.0", 698 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 699 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", 700 | "dev": true 701 | }, 702 | "node_modules/once": { 703 | "version": "1.4.0", 704 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 705 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 706 | "dev": true, 707 | "dependencies": { 708 | "wrappy": "1" 709 | } 710 | }, 711 | "node_modules/optionator": { 712 | "version": "0.9.1", 713 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", 714 | "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", 715 | "dev": true, 716 | "dependencies": { 717 | "deep-is": "^0.1.3", 718 | "fast-levenshtein": "^2.0.6", 719 | "levn": "^0.4.1", 720 | "prelude-ls": "^1.2.1", 721 | "type-check": "^0.4.0", 722 | "word-wrap": "^1.2.3" 723 | }, 724 | "engines": { 725 | "node": ">= 0.8.0" 726 | } 727 | }, 728 | "node_modules/parent-module": { 729 | "version": "1.0.1", 730 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 731 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 732 | "dev": true, 733 | "dependencies": { 734 | "callsites": "^3.0.0" 735 | }, 736 | "engines": { 737 | "node": ">=6" 738 | } 739 | }, 740 | "node_modules/path-is-absolute": { 741 | "version": "1.0.1", 742 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 743 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 744 | "dev": true, 745 | "engines": { 746 | "node": ">=0.10.0" 747 | } 748 | }, 749 | "node_modules/path-key": { 750 | "version": "3.1.1", 751 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 752 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 753 | "dev": true, 754 | "engines": { 755 | "node": ">=8" 756 | } 757 | }, 758 | "node_modules/prelude-ls": { 759 | "version": "1.2.1", 760 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 761 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 762 | "dev": true, 763 | "engines": { 764 | "node": ">= 0.8.0" 765 | } 766 | }, 767 | "node_modules/progress": { 768 | "version": "2.0.3", 769 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 770 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", 771 | "dev": true, 772 | "engines": { 773 | "node": ">=0.4.0" 774 | } 775 | }, 776 | "node_modules/punycode": { 777 | "version": "2.1.1", 778 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 779 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 780 | "dev": true, 781 | "engines": { 782 | "node": ">=6" 783 | } 784 | }, 785 | "node_modules/regexpp": { 786 | "version": "3.2.0", 787 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", 788 | "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", 789 | "dev": true, 790 | "engines": { 791 | "node": ">=8" 792 | }, 793 | "funding": { 794 | "url": "https://github.com/sponsors/mysticatea" 795 | } 796 | }, 797 | "node_modules/resolve-from": { 798 | "version": "4.0.0", 799 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 800 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 801 | "dev": true, 802 | "engines": { 803 | "node": ">=4" 804 | } 805 | }, 806 | "node_modules/rimraf": { 807 | "version": "3.0.2", 808 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 809 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 810 | "dev": true, 811 | "dependencies": { 812 | "glob": "^7.1.3" 813 | }, 814 | "bin": { 815 | "rimraf": "bin.js" 816 | }, 817 | "funding": { 818 | "url": "https://github.com/sponsors/isaacs" 819 | } 820 | }, 821 | "node_modules/semver": { 822 | "version": "7.3.5", 823 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", 824 | "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", 825 | "dev": true, 826 | "dependencies": { 827 | "lru-cache": "^6.0.0" 828 | }, 829 | "bin": { 830 | "semver": "bin/semver.js" 831 | }, 832 | "engines": { 833 | "node": ">=10" 834 | } 835 | }, 836 | "node_modules/shebang-command": { 837 | "version": "2.0.0", 838 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 839 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 840 | "dev": true, 841 | "dependencies": { 842 | "shebang-regex": "^3.0.0" 843 | }, 844 | "engines": { 845 | "node": ">=8" 846 | } 847 | }, 848 | "node_modules/shebang-regex": { 849 | "version": "3.0.0", 850 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 851 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 852 | "dev": true, 853 | "engines": { 854 | "node": ">=8" 855 | } 856 | }, 857 | "node_modules/strip-ansi": { 858 | "version": "6.0.1", 859 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 860 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 861 | "dev": true, 862 | "dependencies": { 863 | "ansi-regex": "^5.0.1" 864 | }, 865 | "engines": { 866 | "node": ">=8" 867 | } 868 | }, 869 | "node_modules/strip-json-comments": { 870 | "version": "3.1.1", 871 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 872 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 873 | "dev": true, 874 | "engines": { 875 | "node": ">=8" 876 | }, 877 | "funding": { 878 | "url": "https://github.com/sponsors/sindresorhus" 879 | } 880 | }, 881 | "node_modules/supports-color": { 882 | "version": "7.2.0", 883 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 884 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 885 | "dev": true, 886 | "dependencies": { 887 | "has-flag": "^4.0.0" 888 | }, 889 | "engines": { 890 | "node": ">=8" 891 | } 892 | }, 893 | "node_modules/text-table": { 894 | "version": "0.2.0", 895 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 896 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", 897 | "dev": true 898 | }, 899 | "node_modules/type-check": { 900 | "version": "0.4.0", 901 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 902 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 903 | "dev": true, 904 | "dependencies": { 905 | "prelude-ls": "^1.2.1" 906 | }, 907 | "engines": { 908 | "node": ">= 0.8.0" 909 | } 910 | }, 911 | "node_modules/type-fest": { 912 | "version": "0.20.2", 913 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", 914 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", 915 | "dev": true, 916 | "engines": { 917 | "node": ">=10" 918 | }, 919 | "funding": { 920 | "url": "https://github.com/sponsors/sindresorhus" 921 | } 922 | }, 923 | "node_modules/uri-js": { 924 | "version": "4.4.1", 925 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 926 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 927 | "dev": true, 928 | "dependencies": { 929 | "punycode": "^2.1.0" 930 | } 931 | }, 932 | "node_modules/v8-compile-cache": { 933 | "version": "2.3.0", 934 | "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", 935 | "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", 936 | "dev": true 937 | }, 938 | "node_modules/which": { 939 | "version": "2.0.2", 940 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 941 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 942 | "dev": true, 943 | "dependencies": { 944 | "isexe": "^2.0.0" 945 | }, 946 | "bin": { 947 | "node-which": "bin/node-which" 948 | }, 949 | "engines": { 950 | "node": ">= 8" 951 | } 952 | }, 953 | "node_modules/word-wrap": { 954 | "version": "1.2.3", 955 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", 956 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", 957 | "dev": true, 958 | "engines": { 959 | "node": ">=0.10.0" 960 | } 961 | }, 962 | "node_modules/wrappy": { 963 | "version": "1.0.2", 964 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 965 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 966 | "dev": true 967 | }, 968 | "node_modules/yallist": { 969 | "version": "4.0.0", 970 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 971 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 972 | "dev": true 973 | } 974 | }, 975 | "dependencies": { 976 | "@eslint/eslintrc": { 977 | "version": "1.0.4", 978 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.4.tgz", 979 | "integrity": "sha512-h8Vx6MdxwWI2WM8/zREHMoqdgLNXEL4QX3MWSVMdyNJGvXVOs+6lp+m2hc3FnuMHDc4poxFNI20vCk0OmI4G0Q==", 980 | "dev": true, 981 | "requires": { 982 | "ajv": "^6.12.4", 983 | "debug": "^4.3.2", 984 | "espree": "^9.0.0", 985 | "globals": "^13.9.0", 986 | "ignore": "^4.0.6", 987 | "import-fresh": "^3.2.1", 988 | "js-yaml": "^4.1.0", 989 | "minimatch": "^3.0.4", 990 | "strip-json-comments": "^3.1.1" 991 | } 992 | }, 993 | "@humanwhocodes/config-array": { 994 | "version": "0.6.0", 995 | "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.6.0.tgz", 996 | "integrity": "sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==", 997 | "dev": true, 998 | "requires": { 999 | "@humanwhocodes/object-schema": "^1.2.0", 1000 | "debug": "^4.1.1", 1001 | "minimatch": "^3.0.4" 1002 | } 1003 | }, 1004 | "@humanwhocodes/object-schema": { 1005 | "version": "1.2.1", 1006 | "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", 1007 | "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", 1008 | "dev": true 1009 | }, 1010 | "acorn": { 1011 | "version": "8.6.0", 1012 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.6.0.tgz", 1013 | "integrity": "sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==", 1014 | "dev": true 1015 | }, 1016 | "acorn-jsx": { 1017 | "version": "5.3.2", 1018 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 1019 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 1020 | "dev": true, 1021 | "requires": {} 1022 | }, 1023 | "ajv": { 1024 | "version": "6.12.6", 1025 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 1026 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 1027 | "dev": true, 1028 | "requires": { 1029 | "fast-deep-equal": "^3.1.1", 1030 | "fast-json-stable-stringify": "^2.0.0", 1031 | "json-schema-traverse": "^0.4.1", 1032 | "uri-js": "^4.2.2" 1033 | } 1034 | }, 1035 | "ansi-colors": { 1036 | "version": "4.1.1", 1037 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", 1038 | "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", 1039 | "dev": true 1040 | }, 1041 | "ansi-regex": { 1042 | "version": "5.0.1", 1043 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 1044 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 1045 | "dev": true 1046 | }, 1047 | "ansi-styles": { 1048 | "version": "4.3.0", 1049 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1050 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1051 | "dev": true, 1052 | "requires": { 1053 | "color-convert": "^2.0.1" 1054 | } 1055 | }, 1056 | "argparse": { 1057 | "version": "2.0.1", 1058 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 1059 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 1060 | "dev": true 1061 | }, 1062 | "balanced-match": { 1063 | "version": "1.0.2", 1064 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 1065 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 1066 | "dev": true 1067 | }, 1068 | "brace-expansion": { 1069 | "version": "1.1.11", 1070 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 1071 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 1072 | "dev": true, 1073 | "requires": { 1074 | "balanced-match": "^1.0.0", 1075 | "concat-map": "0.0.1" 1076 | } 1077 | }, 1078 | "callsites": { 1079 | "version": "3.1.0", 1080 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 1081 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 1082 | "dev": true 1083 | }, 1084 | "chalk": { 1085 | "version": "4.1.2", 1086 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 1087 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 1088 | "dev": true, 1089 | "requires": { 1090 | "ansi-styles": "^4.1.0", 1091 | "supports-color": "^7.1.0" 1092 | } 1093 | }, 1094 | "color-convert": { 1095 | "version": "2.0.1", 1096 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1097 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1098 | "dev": true, 1099 | "requires": { 1100 | "color-name": "~1.1.4" 1101 | } 1102 | }, 1103 | "color-name": { 1104 | "version": "1.1.4", 1105 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1106 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1107 | "dev": true 1108 | }, 1109 | "concat-map": { 1110 | "version": "0.0.1", 1111 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1112 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 1113 | "dev": true 1114 | }, 1115 | "cross-spawn": { 1116 | "version": "7.0.3", 1117 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 1118 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 1119 | "dev": true, 1120 | "requires": { 1121 | "path-key": "^3.1.0", 1122 | "shebang-command": "^2.0.0", 1123 | "which": "^2.0.1" 1124 | } 1125 | }, 1126 | "debug": { 1127 | "version": "4.3.3", 1128 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", 1129 | "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", 1130 | "dev": true, 1131 | "requires": { 1132 | "ms": "2.1.2" 1133 | } 1134 | }, 1135 | "deep-is": { 1136 | "version": "0.1.4", 1137 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 1138 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 1139 | "dev": true 1140 | }, 1141 | "doctrine": { 1142 | "version": "3.0.0", 1143 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 1144 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 1145 | "dev": true, 1146 | "requires": { 1147 | "esutils": "^2.0.2" 1148 | } 1149 | }, 1150 | "enquirer": { 1151 | "version": "2.3.6", 1152 | "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", 1153 | "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", 1154 | "dev": true, 1155 | "requires": { 1156 | "ansi-colors": "^4.1.1" 1157 | } 1158 | }, 1159 | "escape-string-regexp": { 1160 | "version": "4.0.0", 1161 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 1162 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 1163 | "dev": true 1164 | }, 1165 | "eslint": { 1166 | "version": "8.3.0", 1167 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.3.0.tgz", 1168 | "integrity": "sha512-aIay56Ph6RxOTC7xyr59Kt3ewX185SaGnAr8eWukoPLeriCrvGjvAubxuvaXOfsxhtwV5g0uBOsyhAom4qJdww==", 1169 | "dev": true, 1170 | "requires": { 1171 | "@eslint/eslintrc": "^1.0.4", 1172 | "@humanwhocodes/config-array": "^0.6.0", 1173 | "ajv": "^6.10.0", 1174 | "chalk": "^4.0.0", 1175 | "cross-spawn": "^7.0.2", 1176 | "debug": "^4.3.2", 1177 | "doctrine": "^3.0.0", 1178 | "enquirer": "^2.3.5", 1179 | "escape-string-regexp": "^4.0.0", 1180 | "eslint-scope": "^7.1.0", 1181 | "eslint-utils": "^3.0.0", 1182 | "eslint-visitor-keys": "^3.1.0", 1183 | "espree": "^9.1.0", 1184 | "esquery": "^1.4.0", 1185 | "esutils": "^2.0.2", 1186 | "fast-deep-equal": "^3.1.3", 1187 | "file-entry-cache": "^6.0.1", 1188 | "functional-red-black-tree": "^1.0.1", 1189 | "glob-parent": "^6.0.1", 1190 | "globals": "^13.6.0", 1191 | "ignore": "^4.0.6", 1192 | "import-fresh": "^3.0.0", 1193 | "imurmurhash": "^0.1.4", 1194 | "is-glob": "^4.0.0", 1195 | "js-yaml": "^4.1.0", 1196 | "json-stable-stringify-without-jsonify": "^1.0.1", 1197 | "levn": "^0.4.1", 1198 | "lodash.merge": "^4.6.2", 1199 | "minimatch": "^3.0.4", 1200 | "natural-compare": "^1.4.0", 1201 | "optionator": "^0.9.1", 1202 | "progress": "^2.0.0", 1203 | "regexpp": "^3.2.0", 1204 | "semver": "^7.2.1", 1205 | "strip-ansi": "^6.0.1", 1206 | "strip-json-comments": "^3.1.0", 1207 | "text-table": "^0.2.0", 1208 | "v8-compile-cache": "^2.0.3" 1209 | } 1210 | }, 1211 | "eslint-scope": { 1212 | "version": "7.1.0", 1213 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", 1214 | "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", 1215 | "dev": true, 1216 | "requires": { 1217 | "esrecurse": "^4.3.0", 1218 | "estraverse": "^5.2.0" 1219 | } 1220 | }, 1221 | "eslint-utils": { 1222 | "version": "3.0.0", 1223 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", 1224 | "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", 1225 | "dev": true, 1226 | "requires": { 1227 | "eslint-visitor-keys": "^2.0.0" 1228 | }, 1229 | "dependencies": { 1230 | "eslint-visitor-keys": { 1231 | "version": "2.1.0", 1232 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", 1233 | "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", 1234 | "dev": true 1235 | } 1236 | } 1237 | }, 1238 | "eslint-visitor-keys": { 1239 | "version": "3.1.0", 1240 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz", 1241 | "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==", 1242 | "dev": true 1243 | }, 1244 | "espree": { 1245 | "version": "9.1.0", 1246 | "resolved": "https://registry.npmjs.org/espree/-/espree-9.1.0.tgz", 1247 | "integrity": "sha512-ZgYLvCS1wxOczBYGcQT9DDWgicXwJ4dbocr9uYN+/eresBAUuBu+O4WzB21ufQ/JqQT8gyp7hJ3z8SHii32mTQ==", 1248 | "dev": true, 1249 | "requires": { 1250 | "acorn": "^8.6.0", 1251 | "acorn-jsx": "^5.3.1", 1252 | "eslint-visitor-keys": "^3.1.0" 1253 | } 1254 | }, 1255 | "esquery": { 1256 | "version": "1.4.0", 1257 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", 1258 | "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", 1259 | "dev": true, 1260 | "requires": { 1261 | "estraverse": "^5.1.0" 1262 | } 1263 | }, 1264 | "esrecurse": { 1265 | "version": "4.3.0", 1266 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 1267 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 1268 | "dev": true, 1269 | "requires": { 1270 | "estraverse": "^5.2.0" 1271 | } 1272 | }, 1273 | "estraverse": { 1274 | "version": "5.3.0", 1275 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 1276 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 1277 | "dev": true 1278 | }, 1279 | "esutils": { 1280 | "version": "2.0.3", 1281 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 1282 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 1283 | "dev": true 1284 | }, 1285 | "fast-deep-equal": { 1286 | "version": "3.1.3", 1287 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 1288 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 1289 | "dev": true 1290 | }, 1291 | "fast-json-stable-stringify": { 1292 | "version": "2.1.0", 1293 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 1294 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 1295 | "dev": true 1296 | }, 1297 | "fast-levenshtein": { 1298 | "version": "2.0.6", 1299 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 1300 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", 1301 | "dev": true 1302 | }, 1303 | "file-entry-cache": { 1304 | "version": "6.0.1", 1305 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", 1306 | "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", 1307 | "dev": true, 1308 | "requires": { 1309 | "flat-cache": "^3.0.4" 1310 | } 1311 | }, 1312 | "flat-cache": { 1313 | "version": "3.0.4", 1314 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", 1315 | "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", 1316 | "dev": true, 1317 | "requires": { 1318 | "flatted": "^3.1.0", 1319 | "rimraf": "^3.0.2" 1320 | } 1321 | }, 1322 | "flatted": { 1323 | "version": "3.2.4", 1324 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", 1325 | "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", 1326 | "dev": true 1327 | }, 1328 | "fs.realpath": { 1329 | "version": "1.0.0", 1330 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1331 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 1332 | "dev": true 1333 | }, 1334 | "functional-red-black-tree": { 1335 | "version": "1.0.1", 1336 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", 1337 | "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", 1338 | "dev": true 1339 | }, 1340 | "glob": { 1341 | "version": "7.2.0", 1342 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", 1343 | "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", 1344 | "dev": true, 1345 | "requires": { 1346 | "fs.realpath": "^1.0.0", 1347 | "inflight": "^1.0.4", 1348 | "inherits": "2", 1349 | "minimatch": "^3.0.4", 1350 | "once": "^1.3.0", 1351 | "path-is-absolute": "^1.0.0" 1352 | } 1353 | }, 1354 | "glob-parent": { 1355 | "version": "6.0.2", 1356 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 1357 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 1358 | "dev": true, 1359 | "requires": { 1360 | "is-glob": "^4.0.3" 1361 | } 1362 | }, 1363 | "globals": { 1364 | "version": "13.12.0", 1365 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", 1366 | "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", 1367 | "dev": true, 1368 | "requires": { 1369 | "type-fest": "^0.20.2" 1370 | } 1371 | }, 1372 | "has-flag": { 1373 | "version": "4.0.0", 1374 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1375 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1376 | "dev": true 1377 | }, 1378 | "ignore": { 1379 | "version": "4.0.6", 1380 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", 1381 | "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", 1382 | "dev": true 1383 | }, 1384 | "import-fresh": { 1385 | "version": "3.3.0", 1386 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 1387 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 1388 | "dev": true, 1389 | "requires": { 1390 | "parent-module": "^1.0.0", 1391 | "resolve-from": "^4.0.0" 1392 | } 1393 | }, 1394 | "imurmurhash": { 1395 | "version": "0.1.4", 1396 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 1397 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 1398 | "dev": true 1399 | }, 1400 | "inflight": { 1401 | "version": "1.0.6", 1402 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1403 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 1404 | "dev": true, 1405 | "requires": { 1406 | "once": "^1.3.0", 1407 | "wrappy": "1" 1408 | } 1409 | }, 1410 | "inherits": { 1411 | "version": "2.0.4", 1412 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1413 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1414 | "dev": true 1415 | }, 1416 | "is-extglob": { 1417 | "version": "2.1.1", 1418 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1419 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 1420 | "dev": true 1421 | }, 1422 | "is-glob": { 1423 | "version": "4.0.3", 1424 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1425 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1426 | "dev": true, 1427 | "requires": { 1428 | "is-extglob": "^2.1.1" 1429 | } 1430 | }, 1431 | "isexe": { 1432 | "version": "2.0.0", 1433 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1434 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 1435 | "dev": true 1436 | }, 1437 | "js-yaml": { 1438 | "version": "4.1.0", 1439 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 1440 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 1441 | "dev": true, 1442 | "requires": { 1443 | "argparse": "^2.0.1" 1444 | } 1445 | }, 1446 | "json-schema-traverse": { 1447 | "version": "0.4.1", 1448 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 1449 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 1450 | "dev": true 1451 | }, 1452 | "json-stable-stringify-without-jsonify": { 1453 | "version": "1.0.1", 1454 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 1455 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", 1456 | "dev": true 1457 | }, 1458 | "levn": { 1459 | "version": "0.4.1", 1460 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 1461 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 1462 | "dev": true, 1463 | "requires": { 1464 | "prelude-ls": "^1.2.1", 1465 | "type-check": "~0.4.0" 1466 | } 1467 | }, 1468 | "lodash.merge": { 1469 | "version": "4.6.2", 1470 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 1471 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 1472 | "dev": true 1473 | }, 1474 | "lru-cache": { 1475 | "version": "6.0.0", 1476 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 1477 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 1478 | "dev": true, 1479 | "requires": { 1480 | "yallist": "^4.0.0" 1481 | } 1482 | }, 1483 | "minimatch": { 1484 | "version": "3.0.4", 1485 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1486 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1487 | "dev": true, 1488 | "requires": { 1489 | "brace-expansion": "^1.1.7" 1490 | } 1491 | }, 1492 | "ms": { 1493 | "version": "2.1.2", 1494 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1495 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1496 | "dev": true 1497 | }, 1498 | "natural-compare": { 1499 | "version": "1.4.0", 1500 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 1501 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", 1502 | "dev": true 1503 | }, 1504 | "once": { 1505 | "version": "1.4.0", 1506 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1507 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1508 | "dev": true, 1509 | "requires": { 1510 | "wrappy": "1" 1511 | } 1512 | }, 1513 | "optionator": { 1514 | "version": "0.9.1", 1515 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", 1516 | "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", 1517 | "dev": true, 1518 | "requires": { 1519 | "deep-is": "^0.1.3", 1520 | "fast-levenshtein": "^2.0.6", 1521 | "levn": "^0.4.1", 1522 | "prelude-ls": "^1.2.1", 1523 | "type-check": "^0.4.0", 1524 | "word-wrap": "^1.2.3" 1525 | } 1526 | }, 1527 | "parent-module": { 1528 | "version": "1.0.1", 1529 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 1530 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 1531 | "dev": true, 1532 | "requires": { 1533 | "callsites": "^3.0.0" 1534 | } 1535 | }, 1536 | "path-is-absolute": { 1537 | "version": "1.0.1", 1538 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1539 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 1540 | "dev": true 1541 | }, 1542 | "path-key": { 1543 | "version": "3.1.1", 1544 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 1545 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 1546 | "dev": true 1547 | }, 1548 | "prelude-ls": { 1549 | "version": "1.2.1", 1550 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 1551 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 1552 | "dev": true 1553 | }, 1554 | "progress": { 1555 | "version": "2.0.3", 1556 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 1557 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", 1558 | "dev": true 1559 | }, 1560 | "punycode": { 1561 | "version": "2.1.1", 1562 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 1563 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 1564 | "dev": true 1565 | }, 1566 | "regexpp": { 1567 | "version": "3.2.0", 1568 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", 1569 | "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", 1570 | "dev": true 1571 | }, 1572 | "resolve-from": { 1573 | "version": "4.0.0", 1574 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 1575 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 1576 | "dev": true 1577 | }, 1578 | "rimraf": { 1579 | "version": "3.0.2", 1580 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 1581 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 1582 | "dev": true, 1583 | "requires": { 1584 | "glob": "^7.1.3" 1585 | } 1586 | }, 1587 | "semver": { 1588 | "version": "7.3.5", 1589 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", 1590 | "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", 1591 | "dev": true, 1592 | "requires": { 1593 | "lru-cache": "^6.0.0" 1594 | } 1595 | }, 1596 | "shebang-command": { 1597 | "version": "2.0.0", 1598 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 1599 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 1600 | "dev": true, 1601 | "requires": { 1602 | "shebang-regex": "^3.0.0" 1603 | } 1604 | }, 1605 | "shebang-regex": { 1606 | "version": "3.0.0", 1607 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 1608 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 1609 | "dev": true 1610 | }, 1611 | "strip-ansi": { 1612 | "version": "6.0.1", 1613 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1614 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1615 | "dev": true, 1616 | "requires": { 1617 | "ansi-regex": "^5.0.1" 1618 | } 1619 | }, 1620 | "strip-json-comments": { 1621 | "version": "3.1.1", 1622 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 1623 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 1624 | "dev": true 1625 | }, 1626 | "supports-color": { 1627 | "version": "7.2.0", 1628 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 1629 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1630 | "dev": true, 1631 | "requires": { 1632 | "has-flag": "^4.0.0" 1633 | } 1634 | }, 1635 | "text-table": { 1636 | "version": "0.2.0", 1637 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 1638 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", 1639 | "dev": true 1640 | }, 1641 | "type-check": { 1642 | "version": "0.4.0", 1643 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 1644 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 1645 | "dev": true, 1646 | "requires": { 1647 | "prelude-ls": "^1.2.1" 1648 | } 1649 | }, 1650 | "type-fest": { 1651 | "version": "0.20.2", 1652 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", 1653 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", 1654 | "dev": true 1655 | }, 1656 | "uri-js": { 1657 | "version": "4.4.1", 1658 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 1659 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 1660 | "dev": true, 1661 | "requires": { 1662 | "punycode": "^2.1.0" 1663 | } 1664 | }, 1665 | "v8-compile-cache": { 1666 | "version": "2.3.0", 1667 | "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", 1668 | "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", 1669 | "dev": true 1670 | }, 1671 | "which": { 1672 | "version": "2.0.2", 1673 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 1674 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 1675 | "dev": true, 1676 | "requires": { 1677 | "isexe": "^2.0.0" 1678 | } 1679 | }, 1680 | "word-wrap": { 1681 | "version": "1.2.3", 1682 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", 1683 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", 1684 | "dev": true 1685 | }, 1686 | "wrappy": { 1687 | "version": "1.0.2", 1688 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1689 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 1690 | "dev": true 1691 | }, 1692 | "yallist": { 1693 | "version": "4.0.0", 1694 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 1695 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 1696 | "dev": true 1697 | } 1698 | } 1699 | } 1700 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "md-block", 3 | "version": "0.0.1", 4 | "description": "A custom element for rendering stylable (light DOM) Markdown", 5 | "main": "md-block.js", 6 | "scripts": { 7 | "test": "open index.html" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "git+https://github.com/LeaVerou/md-block.git" 12 | }, 13 | "keywords": [ 14 | "Markdown", 15 | "WebComponents", 16 | "CustomElements", 17 | "markdown-to-html", 18 | "marked", 19 | "Prism" 20 | ], 21 | "author": "Lea Verou", 22 | "license": "MIT", 23 | "bugs": { 24 | "url": "https://github.com/LeaVerou/md-block/issues" 25 | }, 26 | "homepage": "https://md-block.verou.me", 27 | "devDependencies": { 28 | "eslint": "^8.3.0" 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /prism.css: -------------------------------------------------------------------------------- 1 | /* PrismJS 1.25.0 2 | https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript&plugins=keep-markup+normalize-whitespace */ 3 | code[class*=language-],pre[class*=language-]{color:#000;background:0 0;text-shadow:0 1px #fff;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow:none;background:#b3d4fc}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.token.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.class-name,.token.function{color:#dd4a68}.token.important,.token.regex,.token.variable{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help} 4 | -------------------------------------------------------------------------------- /prism.js: -------------------------------------------------------------------------------- 1 | /* PrismJS 1.25.0 2 | https://prismjs.com/download.html#themes=prism&languages=markup+markdown&plugins=keep-markup+normalize-whitespace */ 3 | var _self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},Prism=function(u){var t=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,n=0,e={},M={manual:u.Prism&&u.Prism.manual,disableWorkerMessageHandler:u.Prism&&u.Prism.disableWorkerMessageHandler,util:{encode:function e(n){return n instanceof W?new W(n.type,e(n.content),n.alias):Array.isArray(n)?n.map(e):n.replace(/&/g,"&").replace(/=l.reach);y+=m.value.length,m=m.next){var k=m.value;if(t.length>n.length)return;if(!(k instanceof W)){var x,b=1;if(h){if(!(x=z(p,y,n,f))||x.index>=n.length)break;var w=x.index,A=x.index+x[0].length,P=y;for(P+=m.value.length;P<=w;)m=m.next,P+=m.value.length;if(P-=m.value.length,y=P,m.value instanceof W)continue;for(var E=m;E!==t.tail&&(Pl.reach&&(l.reach=j);var C=m.prev;S&&(C=I(t,C,S),y+=S.length),q(t,C,b);var N=new W(o,g?M.tokenize(L,g):L,d,L);if(m=I(t,C,N),O&&I(t,m,O),1l.reach&&(l.reach=_.reach)}}}}}}(e,a,n,a.head,0),function(e){var n=[],t=e.head.next;for(;t!==e.tail;)n.push(t.value),t=t.next;return n}(a)},hooks:{all:{},add:function(e,n){var t=M.hooks.all;t[e]=t[e]||[],t[e].push(n)},run:function(e,n){var t=M.hooks.all[e];if(t&&t.length)for(var r,a=0;r=t[a++];)r(n)}},Token:W};function W(e,n,t,r){this.type=e,this.content=n,this.alias=t,this.length=0|(r||"").length}function z(e,n,t,r){e.lastIndex=n;var a=e.exec(t);if(a&&r&&a[1]){var i=a[1].length;a.index+=i,a[0]=a[0].slice(i)}return a}function i(){var e={value:null,prev:null,next:null},n={value:null,prev:e,next:null};e.next=n,this.head=e,this.tail=n,this.length=0}function I(e,n,t){var r=n.next,a={value:t,prev:n,next:r};return n.next=a,r.prev=a,e.length++,a}function q(e,n,t){for(var r=n.next,a=0;a"+a.content+""},!u.document)return u.addEventListener&&(M.disableWorkerMessageHandler||u.addEventListener("message",function(e){var n=JSON.parse(e.data),t=n.language,r=n.code,a=n.immediateClose;u.postMessage(M.highlight(r,M.languages[t],t)),a&&u.close()},!1)),M;var r=M.util.currentScript();function a(){M.manual||M.highlightAll()}if(r&&(M.filename=r.src,r.hasAttribute("data-manual")&&(M.manual=!0)),!M.manual){var l=document.readyState;"loading"===l||"interactive"===l&&r&&r.defer?document.addEventListener("DOMContentLoaded",a):window.requestAnimationFrame?window.requestAnimationFrame(a):window.setTimeout(a,16)}return M}(_self);"undefined"!=typeof module&&module.exports&&(module.exports=Prism),"undefined"!=typeof global&&(global.Prism=Prism); 4 | Prism.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},Prism.languages.markup.tag.inside["attr-value"].inside.entity=Prism.languages.markup.entity,Prism.languages.markup.doctype.inside["internal-subset"].inside=Prism.languages.markup,Prism.hooks.add("wrap",function(a){"entity"===a.type&&(a.attributes.title=a.content.replace(/&/,"&"))}),Object.defineProperty(Prism.languages.markup.tag,"addInlined",{value:function(a,e){var s={};s["language-"+e]={pattern:/(^$)/i,lookbehind:!0,inside:Prism.languages[e]},s.cdata=/^$/i;var t={"included-cdata":{pattern://i,inside:s}};t["language-"+e]={pattern:/[\s\S]+/,inside:Prism.languages[e]};var n={};n[a]={pattern:RegExp("(<__[^>]*>)(?:))*\\]\\]>|(?!)".replace(/__/g,function(){return a}),"i"),lookbehind:!0,greedy:!0,inside:t},Prism.languages.insertBefore("markup","cdata",n)}}),Object.defineProperty(Prism.languages.markup.tag,"addAttribute",{value:function(a,e){Prism.languages.markup.tag.inside["special-attr"].push({pattern:RegExp("(^|[\"'\\s])(?:"+a+")\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))","i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[e,"language-"+e],inside:Prism.languages[e]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup,Prism.languages.xml=Prism.languages.extend("markup",{}),Prism.languages.ssml=Prism.languages.xml,Prism.languages.atom=Prism.languages.xml,Prism.languages.rss=Prism.languages.xml; 5 | !function(s){function n(n){return n=n.replace(//g,function(){return"(?:\\\\.|[^\\\\\n\r]|(?:\n|\r\n?)(?![\r\n]))"}),RegExp("((?:^|[^\\\\])(?:\\\\{2})*)(?:"+n+")")}var e="(?:\\\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\\\|\r\n`])+",t="\\|?__(?:\\|__)+\\|?(?:(?:\n|\r\n?)|(?![^]))".replace(/__/g,function(){return e}),a="\\|?[ \t]*:?-{3,}:?[ \t]*(?:\\|[ \t]*:?-{3,}:?[ \t]*)+\\|?(?:\n|\r\n?)";s.languages.markdown=s.languages.extend("markup",{}),s.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:s.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+t+a+"(?:"+t+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+t+a+")(?:"+t+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(e),inside:s.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+t+")"+a+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+t+"$"),inside:{"table-header":{pattern:RegExp(e),alias:"important",inside:s.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n("\\b__(?:(?!_)|_(?:(?!_))+_)+__\\b|\\*\\*(?:(?!\\*)|\\*(?:(?!\\*))+\\*)+\\*\\*"),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n("\\b_(?:(?!_)|__(?:(?!_))+__)+_\\b|\\*(?:(?!\\*)|\\*\\*(?:(?!\\*))+\\*\\*)+\\*"),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n("(~~?)(?:(?!~))+\\2"),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n('!?\\[(?:(?!\\]))+\\](?:\\([^\\s)]+(?:[\t ]+"(?:\\\\.|[^"\\\\])*")?\\)|[ \t]?\\[(?:(?!\\]))+\\])'),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach(function(e){["url","bold","italic","strike","code-snippet"].forEach(function(n){e!==n&&(s.languages.markdown[e].inside.content.inside[n]=s.languages.markdown[n])})}),s.hooks.add("after-tokenize",function(n){"markdown"!==n.language&&"md"!==n.language||!function n(e){if(e&&"string"!=typeof e)for(var t=0,a=e.length;t",quot:'"'},u=String.fromCodePoint||String.fromCharCode;s.languages.md=s.languages.markdown}(Prism); 6 | "undefined"!=typeof Prism&&"undefined"!=typeof document&&document.createRange&&(Prism.plugins.KeepMarkup=!0,Prism.hooks.add("before-highlight",function(e){if(e.element.children.length&&Prism.util.isActive(e.element,"keep-markup",!0)){var o=Prism.util.isActive(e.element,"drop-tokens",!1),d=0,t=[];s(e.element),t.length&&(e.keepMarkup=t)}function r(e){if(function(e){return!o||"span"!==e.nodeName.toLowerCase()||!e.classList.contains("token")}(e)){var n={clone:e.cloneNode(!1),posOpen:d};t.push(n),s(e),n.posClose=d}else s(e)}function s(e){for(var n=0,o=e.childNodes.length;nn.node.posOpen&&(n.nodeStart=d,n.nodeStartPos=n.node.posOpen-n.pos),n.nodeStart&&n.pos+d.data.length>=n.node.posClose&&(n.nodeEnd=d,n.nodeEndPos=n.node.posClose-n.pos),n.pos+=d.data.length);if(n.nodeStart&&n.nodeEnd){var r=document.createRange();return r.setStart(n.nodeStart,n.nodeStartPos),r.setEnd(n.nodeEnd,n.nodeEndPos),n.node.clone.appendChild(r.extractContents()),r.insertNode(n.node.clone),r.detach(),!1}}return!0};n.keepMarkup.forEach(function(e){s(n.element,{node:e,pos:0})}),n.highlightedCode=n.element.innerHTML}})); 7 | !function(){if("undefined"!=typeof Prism){var i=Object.assign||function(e,n){for(var t in n)n.hasOwnProperty(t)&&(e[t]=n[t]);return e};e.prototype={setDefaults:function(e){this.defaults=i(this.defaults,e)},normalize:function(e,n){for(var t in n=i(this.defaults,n)){var r=t.replace(/-(\w)/g,function(e,n){return n.toUpperCase()});"normalize"!==t&&"setDefaults"!==r&&n[t]&&this[r]&&(e=this[r].call(this,e,n[t]))}return e},leftTrim:function(e){return e.replace(/^\s+/,"")},rightTrim:function(e){return e.replace(/\s+$/,"")},tabsToSpaces:function(e,n){return n=0|n||4,e.replace(/\t/g,new Array(++n).join(" "))},spacesToTabs:function(e,n){return n=0|n||4,e.replace(RegExp(" {"+n+"}","g"),"\t")},removeTrailing:function(e){return e.replace(/\s*?$/gm,"")},removeInitialLineFeed:function(e){return e.replace(/^(?:\r?\n|\r)/,"")},removeIndent:function(e){var n=e.match(/^[^\S\n\r]*(?=\S)/gm);return n&&n[0].length?(n.sort(function(e,n){return e.length-n.length}),n[0].length?e.replace(RegExp("^"+n[0],"gm"),""):e):e},indent:function(e,n){return e.replace(/^[^\S\n\r]*(?=\S)/gm,new Array(++n).join("\t")+"$&")},breakLines:function(e,n){n=!0===n?80:0|n||80;for(var t=e.split("\n"),r=0;r header, 33 | nav, 34 | main, 35 | body > footer { 36 | padding: 1.5rem clamp(1rem, 50vw - 20rem, 20vw); 37 | } 38 | 39 | body > header { 40 | background: var(--main-color); 41 | color: white; 42 | text-align: center; 43 | } 44 | 45 | body > header h1 { 46 | margin: 0; 47 | font-size: 500%; 48 | } 49 | 50 | body > header h1::before { 51 | content: ""; 52 | display: inline-block; 53 | vertical-align: middle; 54 | width: 1em; 55 | height: 1em; 56 | margin-right: .1em; 57 | background: url(logo.svg) center / contain no-repeat; 58 | transition: .4s; 59 | filter: drop-shadow(0 0 white); 60 | } 61 | 62 | @media (min-width: 1700px) { 63 | body > header h1::before { 64 | display: block; 65 | width: 2em; 66 | height: 2em; 67 | position: absolute; 68 | } 69 | } 70 | 71 | @keyframes crazy-shadow { 72 | 20% { 73 | filter: drop-shadow(var(--offset) var(--offset) white); 74 | transform: translate(0, 0); 75 | } 76 | 77 | 20.01% { 78 | filter: invert() drop-shadow(calc(-1 * var(--offset)) calc(-1 * var(--offset)) black); 79 | transform: translate(var(--offset), var(--offset)); 80 | } 81 | 82 | 50% { 83 | filter: invert() drop-shadow(0 0 black); 84 | transform: translate(0, 0); 85 | } 86 | 87 | 70% { 88 | filter: invert() drop-shadow(var(--offset) var(--offset) black); 89 | transform: translate(0, 0); 90 | } 91 | 92 | 70.01% { 93 | filter: drop-shadow(calc(-1 * var(--offset)) calc(-1 * var(--offset)) white); 94 | transform: translate(var(--offset), var(--offset)); 95 | } 96 | } 97 | 98 | body > header h1:hover::before { 99 | --offset: .2em; 100 | animation: crazy-shadow 10s infinite ; 101 | } 102 | 103 | body > header h2 { 104 | margin: 0; 105 | } 106 | 107 | body > header a { 108 | color: inherit; 109 | } 110 | 111 | main { 112 | flex: 1; 113 | } 114 | 115 | body > footer { 116 | background: hsl(var(--gray) / .2); 117 | } 118 | 119 | body > footer a { 120 | color: inherit; 121 | } 122 | 123 | table { 124 | border-spacing: 0; 125 | border-collapse: collapse; 126 | } 127 | 128 | th { 129 | background: hsl(var(--gray) / .1); 130 | } 131 | 132 | td, th { 133 | padding: .3em .5em; 134 | border: 1px solid rgb(0 0 0 / .2); 135 | } 136 | 137 | .demo-container { 138 | border: 1px solid hsl(var(--gray) / .2); 139 | box-shadow: 0 1px .3em -.1em rgb(0 0 0 / .2), -.5em -.5em 0 hsl(var(--main-color-hsl) / .1) inset; 140 | padding: 1em; 141 | margin: 1em -1em; 142 | display: grid; 143 | grid-template-areas: "header" 144 | "code" 145 | "demo"; 146 | grid-gap: 1em; 147 | } 148 | 149 | @media (min-width: 600px) { 150 | .demo-container { 151 | grid-template-areas: "header header" 152 | "code demo"; 153 | grid-template-columns: 1fr 1fr; 154 | grid-template-rows: auto auto; 155 | } 156 | } 157 | 158 | .demo-container header { 159 | display: flex; 160 | grid-area: header; 161 | } 162 | 163 | .demo-container header p { 164 | margin: 0; 165 | } 166 | 167 | .demo-container header > form { 168 | margin-left: auto; 169 | } 170 | 171 | .demo-container header button { 172 | white-space: nowrap; 173 | } 174 | 175 | .demo-code { 176 | grid-area: code; 177 | } 178 | 179 | .demo-output { 180 | grid-area: demo; 181 | } 182 | 183 | nav { 184 | display: flex; 185 | padding-top: 0; 186 | padding-bottom: 0; 187 | background: hsl(var(--main-color-hs) 65%); 188 | } 189 | 190 | nav > a { 191 | flex: 1; 192 | padding: .4em .5em; 193 | color: white; 194 | font-weight: bold; 195 | } 196 | 197 | nav > a:hover { 198 | background: linear-gradient(to right, hsl(var(--main-color-hs) 50%), hsl(var(--main-color-hs) 75%)); 199 | } 200 | 201 | nav > a:where(:not(:hover)) { 202 | text-decoration: none; 203 | } 204 | 205 | #repl { 206 | 207 | } 208 | 209 | #repl_container { 210 | display: grid; 211 | grid-template-columns: repeat(3, minmax(0, 1fr)); 212 | padding: 1em; 213 | gap: 1em; 214 | background: hsl(var(--gray) / .1); 215 | } 216 | 217 | #repl > h2 { 218 | margin: 0; 219 | margin-right: 1em; 220 | text-align: right; 221 | color: hsl(var(--gray) / .1); 222 | font-size: 400%; 223 | line-height: 1; 224 | height: .8em; 225 | letter-spacing: -.03em; 226 | overflow: hidden; 227 | } 228 | 229 | #repl_container > * { 230 | 231 | } 232 | 233 | #repl_container > [data-title]::before { 234 | content: attr(data-title); 235 | display: block; 236 | margin-bottom: 1rem; 237 | color: hsl(var(--gray)); 238 | text-transform: uppercase; 239 | font: bold smaller/1 system-ui, sans-serif; 240 | } 241 | 242 | pre > code > div.prism-live, 243 | pre > code > textarea.prism-live { 244 | margin-left: 4ch; 245 | width: 100%; 246 | } 247 | 248 | #output_html { 249 | overflow: auto; 250 | } 251 | 252 | #repl pre:not(#rendering *) { 253 | background: transparent; 254 | } 255 | 256 | #repl :is(input, select) { 257 | background: white; 258 | padding: .2em .3em .1em; 259 | border-radius: .2em; 260 | line-height: 1; 261 | border: none; 262 | } 263 | 264 | pre[class] { 265 | background: hsl(var(--gray) / .1); 266 | } -------------------------------------------------------------------------------- /tests.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | md-block Tests 7 | 8 | 9 | 10 | 16 | 17 | 18 | 19 |

md-block Tests

20 | 21 |
22 |

Basic functionality

23 | 24 | 25 | 26 | 35 | 41 | 42 | 43 | 52 | 57 | 58 | 59 | 67 | 74 | 75 |
27 | 28 | **foo** 29 | 30 | ```html 31 | <foo> 32 | ``` 33 | 34 | 36 | 40 |
44 | 45 | **foo** 46 | 47 | ```html 48 | <foo> 49 | ``` 50 | 51 | 53 | 56 |
60 | 61 |
62 | 63 | **Warning:** This should still have [Markdown](https://md-block.verou.me) 64 |
65 |
66 |
68 | 73 |
76 |
77 | 78 |
79 |

hmin

80 | 81 | 82 | 83 | 93 | 103 | 104 |
84 | 85 | # 1 86 | ## 2 87 | ### 3 88 | #### 4 89 | ##### 5 90 | ###### 6 91 | 92 | 94 | 102 |
105 |
106 | 107 |
108 |

blockquote

109 | 110 | 111 | 112 | 123 | 128 | 129 | 130 | 138 | 144 | 145 | 146 | 155 | 161 | 162 | 163 | 170 | 175 | 176 | 177 | 184 | 189 | 190 |
113 | 114 | > One long 115 | >markdown 116 | > blockquote area 117 | > with quotes > in quotes > in quotes 118 | > with spaces before 119 | 120 | 121 | 122 | 124 | 127 |
131 | 132 | Text above blockquote 133 | > Blockquote 134 | 135 | 136 | 137 | 139 | 143 |
147 | 148 | > Blockquote 149 | 150 | Text below blockquote 151 | 152 | 153 | 154 | 156 | 160 |
164 | 165 | Non-quoted > symbol in text 166 | 167 | 168 | 169 | 171 | 174 |
178 | 179 | > Escaped blockquote 180 | 181 | 182 | 183 | 185 | 188 |
191 |
192 | 193 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | --------------------------------------------------------------------------------