@readme/markdown 7.6.5 → 7.6.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,129 +1,110 @@
1
- # @readme/markdown
1
+ # <img align="right" width="26%" src="https://owlbertsio-resized.s3.amazonaws.com/Reading.psd.full.png"> `@readme/markdown`
2
2
 
3
- <img align="right" width="26%" src="https://owlbertsio-resized.s3.amazonaws.com/Reading.psd.full.png">
3
+ <img align=right src=https://github.com/readmeio/markdown/workflows/CI/badge.svg alt="RDMD CI Status"> ReadMe's MDX rendering engine and custom component collection.
4
+ <br/>  *(Use ReadMe? [Learn more about our upcoming move to MDX](https://docs.readme.com/rdmd/page/mdx-engine)!)*
4
5
 
5
- ReadMe's MDX rendering engine and custom component collection. <img align=center src=https://github.com/readmeio/markdown/workflows/CI/badge.svg alt="RDMD CI Status">
6
+ ## Getting Started
7
+
8
+ To use the engine, install it from NPM:
6
9
 
7
10
  ```
8
11
  npm install --save @readme/markdown
9
12
  ```
10
13
 
11
- ## Usage
14
+ Then [`compile`](#compile) and [`run`](#run) your MDX:
12
15
 
13
16
  ```jsx
14
- import React from 'react';
15
- import rmdx from '@readme/markdown';
17
+ import RMDX from '@readme/markdown';
16
18
 
17
- export default ({ body }) => <div className="markdown-body">{run(compile(body))}</div>;
19
+ export default ({ body }) => (
20
+ <div className="markdown-body">
21
+ {RMDX.run(RMDX.compile(body))}
22
+ </div>
23
+ );
18
24
  ```
19
25
 
20
- ### API
26
+ ## API
21
27
 
22
- #### `compile`
28
+ ### `compile`
23
29
 
24
- Compiles MDX to JS. Essentially a wrapper around [`mdx.compile`](https://mdxjs.com/packages/mdx/#compilefile-options). You usually only need this when calling `run` as well. It's been left as a seperate step as a potential caching opportunity.
30
+ Compiles MDX to JS. Essentially a wrapper around [`mdx.compile`](https://mdxjs.com/packages/mdx/#compilefile-options). Used before calling [`run`](#run); it has been left as a seperate method for potential caching opportunities.
25
31
 
26
- ###### Parameters
32
+ #### Parameters
27
33
 
28
- - `string` (`string`) -- an MDX document
29
- - `opts` ([`CompileOpts`](#compileopts), optional) -- a configuration object
34
+ - **`string`** (`string`)an MDX document
35
+ - **`opts`** ([`CompileOpts`](#compileopts), optional)a configuration object
30
36
 
31
- ###### Returns
37
+ #### Returns
32
38
 
33
- compiled code (`string`)
39
+ A string of compiled Javascript module code.
34
40
 
35
- #### `run`
41
+ ### `run`
36
42
 
37
43
  > [!CAUTION]
38
- > **This will `eval` the compiled MDX**! Essentially a wrapper around [`mdx.run`](https://mdxjs.com/packages/mdx/#runcode-options).
39
-
40
- ###### Parameters
41
-
42
- - `string` (`string`) -- A compiled mdx document
43
- - `opts` (`RunOpts`, optional) -- configuration
44
-
45
- ###### Returns
46
-
47
- A module ([`RMDXModule`](#rmdxmodule)) of renderable components
48
-
49
- #### `mdx`
50
-
51
- Compiles an ast to mdx.
52
-
53
- ###### Parameters
54
-
55
- Extends [`remark-stringify` options](https://github.com/remarkjs/remark/tree/main/packages/remark-stringify#options).
56
-
57
- ###### Returns
44
+ > This is essentially a wrapper around [`mdx.run`](https://mdxjs.com/packages/mdx/#runcode-options) and **it will `eval` the compiled MDX**. Make sure you only call `run` on safe syntax from a trusted author!
45
+ >
46
+ > #### Parameters
47
+ > - **`string`** (`string`)—a compiled mdx document
48
+ > - **`opts`** (`RunOpts`, optional)—configuration
49
+ >
50
+ > #### Returns
51
+ > An [`RMDXModule`](#rmdxmodule) of renderable components.
58
52
 
59
- An mdx string.
53
+ ### `mdx`
60
54
 
61
- #### `mdast`
55
+ Compiles an AST to a string of MDX syntax.
62
56
 
63
- Parses mdx to an mdast.
57
+ #### Parameters
64
58
 
65
- #### `hast`
59
+ - **`tree`** (`object`)—an abstract syntax tree
60
+ - **`opts`** ([`Options`](https://github.com/remarkjs/remark/tree/main/packages/remark-stringify#options "`remark-stringify` Options type"))—`remark-stringify` configuration.
66
61
 
67
- Parses mdx to an hast.
62
+ #### Returns
68
63
 
69
- #### `plain`
64
+ An MDX string.
70
65
 
71
- Parses mdx to a plain string. (This **does** not `eval` the doc.)
66
+ ### Other Methods
72
67
 
73
- #### `tags`
68
+ - **`mdast`**: parse MDX syntax to MDAST.
69
+ - **`hast`**: parse MDX syntax to HAST.
70
+ - **`plain`**: parse MDX to a plaintext string with all Markdown syntax removed. (This *does not* `eval` the doc.)
71
+ - **`tags`**: get a list of tag names from the doc. (This *does not* `eval` the doc.)
72
+ - **`utils`**: additional defaults, helper methods, components, and so on.
74
73
 
75
- Returns a list of tag names from the doc. (This **does** not `eval` the doc.)
76
-
77
- #### `utils`
78
-
79
- Additional defaults, helpers, components, etc.
74
+ ## Types
80
75
 
81
76
  ### `CompileOpts`
82
77
 
83
78
  Extends [`CompileOptions`](https://mdxjs.com/packages/mdx/#compileoptions)
84
79
 
85
- ###### Additional Properties
80
+ ##### Additional Properties
86
81
 
87
- - `lazyImages` (`boolean`, optional) -- load images lazily
88
- - `safeMode` (`boolean`, optional) -- extract script tags from `HTMLBlock`s
89
- - `components` (`Record<string, string>`, optional) -- an object of tag names to mdx.
90
- - `copyButtons` (`Boolean`, optional) — add a copy button to code blocks
82
+ - **`lazyImages`** (`boolean`, optional)load images lazily
83
+ - **`safeMode`** (`boolean`, optional)extract script tags from `HTMLBlock`s
84
+ - **`components`** (`Record<string, string>`, optional)an object of tag names to mdx.
85
+ - **`copyButtons`** (`Boolean`, optional) — add a copy button to code blocks
91
86
 
92
87
  ### `RunOpts`
93
88
 
94
89
  Extends [`RunOptions`](https://mdxjs.com/packages/mdx/#runoptions)
95
90
 
96
- ###### Additional Properties
91
+ ##### Additional Properties
97
92
 
98
- - `components` (`Record<string, MDXModule>`, optional) -- a set of custom MDX components
99
- - `imports` (`Record<string, unknown>`, optional) -- an set of modules to import globally
100
- - `terms` (`GlossaryTerm[]`, optional)
101
- - `variables` (`Variables`, optional) -- an object containing [user variables](https://github.com/readmeio/variable)
93
+ - **`components`** (`Record<string, MDXModule>`, optional)a set of custom MDX components
94
+ - **`imports`** (`Record<string, unknown>`, optional)an set of modules to import globally
95
+ - **`terms`** (`GlossaryTerm[]`, optional)
96
+ - **`variables`** (`Variables`, optional)an object containing [user variables](https://github.com/readmeio/variable)
102
97
 
103
98
  ### `RMDXModule`
104
99
 
105
- ###### Properties
106
-
107
- - `default` (`() => MDXContent`) -- the MDX douments default export
108
- - `toc` (`HastHeading[]`) -- a list of headings in the document
109
- - `Toc` (`() => MDCContent`) -- a table of contents component
100
+ ##### Properties
110
101
 
111
- ## Flavored Syntax
102
+ - **`default`** (`() => MDXContent`)—the MDX douments default export
103
+ - **`toc`** (`HastHeading[]`)—a list of headings in the document
104
+ - **`Toc`** (`() => MDCContent`)—a table of contents component
112
105
 
113
- We've also sprinkled a bit of our own custom components in to help you supercharge your docs. [**Learn more about ReadMe's new MDX engine!**](https://docs.readme.com/rdmd/page/mdx-engine)
114
-
115
- ## Local Development
106
+ ## Local Development and Testing
116
107
 
117
108
  To make changes to the RDMD engine locally, run the local development server. Clone the repo, `cd` in to it, `npm install`, and `npm run start`!
118
109
 
119
- ### Environment setup
120
-
121
- Running the browser tests requires `docker`. Follow the docker [install instructions for mac](https://docs.docker.com/docker-for-mac/install/). You may want to increase the [memory usage](https://docs.docker.com/docker-for-mac/#resources). If you have not already, you'll need to create an account for `docker hub` and [sign-in locally](https://docs.docker.com/docker-for-mac/#docker-hub).
122
-
123
- ### Running visual regression tests
124
-
125
- If you make changes to the docs or how the markdown is rendered, you may need to update the visual regression snapshots. You can run the visual regression tests in a docker container with:
126
-
127
- ```
128
- make updateSnapshot
129
- ```
110
+ If you make changes to the docs or how the markdown is rendered, you may need to update the visual regression snapshots by running `make updateSnapshot`. Running these browser tests requires `docker`. Follow the docker [install instructions for mac](https://docs.docker.com/docker-for-mac/install/). You may want to increase the [memory usage](https://docs.docker.com/docker-for-mac/#resources). If you have not already, you'll need to create an account for `docker hub` and [sign-in locally](https://docs.docker.com/docker-for-mac/#docker-hub).
@@ -8,7 +8,7 @@ const Accordion = ({ children, icon, iconColor, title }) => {
8
8
  return (
9
9
  <details className="Accordion" onToggle={() => setIsOpen(!isOpen)}>
10
10
  <summary className="Accordion-title">
11
- <i className={`Accordion-toggleIcon${isOpen ? '_opened' : ''} <i class="fa fa-regular fa-chevron-right"></i>`}></i>
11
+ <i className={`Accordion-toggleIcon${isOpen ? '_opened' : ''} fa fa-regular fa-chevron-right`}></i>
12
12
  {icon && <i className={`Accordion-icon fa-duotone fa-solid ${icon}`} style={{ color: `${iconColor}` }}></i>}
13
13
  {title}
14
14
  </summary>
@@ -38,7 +38,7 @@
38
38
 
39
39
  &-toggleIcon,
40
40
  &-toggleIcon_opened {
41
- color: var(--color-text-default, #384248);
41
+ color: var(--color-text-minimum, #637288);
42
42
  font-size: 14px;
43
43
  margin-left: 5px;
44
44
  margin-right: 10px;
@@ -16,20 +16,20 @@ if (typeof window !== 'undefined') {
16
16
 
17
17
  function CopyCode({ codeRef, rootClass = 'rdmd-code-copy', className = '' }) {
18
18
  const copyClass = `${rootClass}_copied`;
19
- const button = createRef<HTMLButtonElement>();
19
+ const buttonRef = createRef<HTMLButtonElement>();
20
20
 
21
21
  const copier = () => {
22
22
  const code = codeRef.current.textContent;
23
23
 
24
24
  if (copy(code)) {
25
- const el = button.current;
25
+ const el = buttonRef.current;
26
26
  el.classList.add(copyClass);
27
27
 
28
28
  setTimeout(() => el.classList.remove(copyClass), 1500);
29
29
  }
30
30
  };
31
31
 
32
- return <button ref={button} aria-label="Copy Code" className={`${rootClass} ${className}`} onClick={copier} />;
32
+ return <button ref={buttonRef} aria-label="Copy Code" className={`${rootClass} ${className}`} onClick={copier} />;
33
33
  }
34
34
 
35
35
  interface CodeProps {
@@ -58,7 +58,7 @@ const Image = (Props: ImageProps) => {
58
58
  setLightbox(!lightbox);
59
59
  };
60
60
 
61
- if (caption) {
61
+ if (children || caption) {
62
62
  return (
63
63
  <figure>
64
64
  <span
@@ -28,15 +28,19 @@
28
28
  outline: none !important;
29
29
  vertical-align: middle;
30
30
 
31
+ &.img-align-right,
31
32
  &[align='right'],
32
33
  &[alt~='align-right'] {
33
34
  @extend %img-align-right;
34
35
  }
35
36
 
37
+ &.img-align-left,
36
38
  &[align='left'],
37
39
  &[alt~='align-left'] {
38
40
  @extend %img-align-left;
41
+
39
42
  }
43
+ &.img-align-center,
40
44
  &[align='middle'], // hack to fix Firefox; see: https://stackoverflow.com/a/45901819/1341949
41
45
  &[align='center'],
42
46
  &[alt~='align-center'] {
@@ -65,8 +69,10 @@
65
69
  }
66
70
  }
67
71
 
72
+ > .img,
68
73
  > img,
69
74
  figure > img {
75
+ display: block;
70
76
  @extend %img-align-center;
71
77
  }
72
78
 
@@ -6,7 +6,9 @@ export type MdastOpts = {
6
6
  components?: Record<string, string>;
7
7
  remarkPlugins?: PluggableList;
8
8
  };
9
- export declare const remarkPlugins: ((() => (tree: any) => void) | typeof remarkFrontmatter | typeof remarkGfm)[];
9
+ export declare const remarkPlugins: ((() => (tree: any) => void) | (({ copyButtons }?: {
10
+ copyButtons?: boolean;
11
+ }) => (tree: import("mdast").Node) => import("mdast").Node) | typeof remarkFrontmatter | typeof remarkGfm)[];
10
12
  export declare const rehypePlugins: (typeof rehypeSlug)[];
11
13
  declare const astProcessor: (opts?: MdastOpts) => import("unified").Processor<import("mdast").Root, import("mdast").Root, import("mdast").Root, import("mdast").Root, string>;
12
14
  export default astProcessor;
@@ -3,6 +3,7 @@ export type CompileOpts = CompileOptions & {
3
3
  lazyImages?: boolean;
4
4
  safeMode?: boolean;
5
5
  components?: Record<string, string>;
6
+ copyButtons?: boolean;
6
7
  };
7
- declare const compile: (text: string, { components, ...opts }?: CompileOpts) => string;
8
+ declare const compile: (text: string, { components, copyButtons, ...opts }?: CompileOpts) => string;
8
9
  export default compile;
package/dist/main.css CHANGED
@@ -1,4 +1,4 @@
1
- .Accordion{background:rgba(var(--color-bg-page-rgb, white), 1);border:1px solid var(--color-border-default, rgba(0, 0, 0, 0.1));border-radius:5px}.Accordion-title{align-items:center;background:rgba(var(--color-bg-page-rgb, white), 1);border:0;border-radius:5px;color:var(--color-text-default, #384248);cursor:pointer;display:flex;font-size:16px;font-weight:500;padding:10px;position:relative;text-align:left;width:100%}.Accordion-title:hover{background:var(--color-bg-hover, rgba(0, 0, 0, 0.05))}.Accordion[open] .Accordion-title{border-bottom-left-radius:0;border-bottom-right-radius:0}.Accordion-title::marker{content:""}.Accordion-title::-webkit-details-marker{display:none}.Accordion-toggleIcon,.Accordion-toggleIcon_opened{color:var(--color-text-default, #384248);font-size:14px;margin-left:5px;margin-right:10px;transition:transform .1s}.Accordion-toggleIcon_opened,.Accordion-toggleIcon_opened_opened{transform:rotate(90deg)}.Accordion-icon{color:var(--project-color-primary, inherit);margin-right:10px}.Accordion-content{color:var(--color-text-muted, #4f5a66);padding:5px 15px 0 15px}
1
+ .Accordion{background:rgba(var(--color-bg-page-rgb, white), 1);border:1px solid var(--color-border-default, rgba(0, 0, 0, 0.1));border-radius:5px}.Accordion-title{align-items:center;background:rgba(var(--color-bg-page-rgb, white), 1);border:0;border-radius:5px;color:var(--color-text-default, #384248);cursor:pointer;display:flex;font-size:16px;font-weight:500;padding:10px;position:relative;text-align:left;width:100%}.Accordion-title:hover{background:var(--color-bg-hover, rgba(0, 0, 0, 0.05))}.Accordion[open] .Accordion-title{border-bottom-left-radius:0;border-bottom-right-radius:0}.Accordion-title::marker{content:""}.Accordion-title::-webkit-details-marker{display:none}.Accordion-toggleIcon,.Accordion-toggleIcon_opened{color:var(--color-text-minimum, #637288);font-size:14px;margin-left:5px;margin-right:10px;transition:transform .1s}.Accordion-toggleIcon_opened,.Accordion-toggleIcon_opened_opened{transform:rotate(90deg)}.Accordion-icon{color:var(--project-color-primary, inherit);margin-right:10px}.Accordion-content{color:var(--color-text-muted, #4f5a66);padding:5px 15px 0 15px}
2
2
  .CardsGrid{display:grid;gap:20px}.CardsGrid .Card{padding:15px;padding-bottom:0;backdrop-filter:blur(20px);background:rgba(var(--color-bg-page-rgb, white), 1);border:1px solid var(--color-border-default, rgba(0, 0, 0, 0.1));border-radius:5px;box-shadow:0 1px 2px rgba(0, 0, 0, 0.05),0 2px 5px rgba(0, 0, 0, 0.02)}.CardsGrid .Card-top{display:inline-flex;flex-direction:row}.CardsGrid .Card-icon{color:var(--project-color-primary, inherit);font-size:20px}.CardsGrid .Card-title{color:var(--color-text-default, #384248);font-weight:600;margin-top:10px}.CardsGrid .Card-title:first-child{margin-top:0}.CardsGrid .Card-content{color:var(--color-text-muted, #4f5a66)}.CardsGrid a.Card:not([href=""]){text-decoration:none;color:inherit}.CardsGrid a.Card:not([href=""]):hover{background:var(--color-bg-hover, rgba(0, 0, 0, 0.05))}
3
3
  .TabGroup-nav{border-bottom:solid var(--color-border-default, rgba(0, 0, 0, 0.1));margin-bottom:15px}.TabGroup-tab{background:none;border:0;color:var(--color-text-minimum, #637288);cursor:pointer;font-size:15px;font-weight:600;margin-right:15px;padding:0;padding-bottom:10px}.TabGroup-tab_active{background:none;border:0;border-bottom:solid var(--project-color-primary, var(--color-text-default, #384248));color:var(--project-color-primary, var(--color-text-default, #384248));font-size:15px;font-weight:600;margin-right:15px;margin-bottom:-2px;padding:0;padding-bottom:10px}.TabGroup-tab:hover{color:var(--color-text-muted, #4f5a66)}.TabGroup-icon{color:var(--project-color-primary, inherit);margin-right:10px}.TabGroup .TabContent{color:var(--color-text-muted, #4f5a66)}
4
4
  /* BASICS */
@@ -390,4 +390,4 @@ span.CodeMirror-selectedtext { background: none; }
390
390
  z-index: 1;
391
391
  }
392
392
 
393
- .markdown-body img[align=right],.markdown-body img[alt~=align-right]{float:right;margin-left:.75rem}.markdown-body img[align=left],.markdown-body img[alt~=align-left]{float:left;margin-right:.75rem}.markdown-body>img,.markdown-body figure>img,.markdown-body img[align=middle],.markdown-body img[align=center],.markdown-body img[alt~=align-center]{display:block}.markdown-body img{border-style:none;box-sizing:content-box;display:inline-block;margin-left:auto;margin-right:auto;max-width:100%;outline:none !important;vertical-align:middle}.markdown-body img[width=smart]{max-height:450px;max-width:100%;width:auto}.markdown-body img.border{border:1px solid rgba(0,0,0,.2)}.markdown-body figure{margin:15px auto}.markdown-body figure figcaption{font-size:.93em;font-style:italic;margin-top:8px;text-align:center}.markdown-body figure .img{display:block}.markdown-body .lightbox.open{align-items:center;background:rgba(255,255,255,.966);display:flex;flex-flow:nowrap column;height:100vh;justify-content:flex-start;left:0;margin-bottom:0;margin-top:0;overflow:hidden;overflow-y:scroll;position:fixed;top:0;user-select:none;width:100vw;z-index:9999999}.markdown-body .lightbox.open::after{content:"";cursor:pointer;display:inline-block;font:normal normal normal 2em/1 FontAwesome;font-size:inherit;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;opacity:1;position:fixed;right:1em;text-rendering:auto;top:1em;transform:translate(0, 0);transform:scale(1.5);transition:.3s .3s ease-in}.markdown-body .lightbox.open:not(.open)::after{opacity:0;transform:scale(0)}.markdown-body .lightbox.open .lightbox-inner{align-items:center;box-sizing:content-box;display:inline-flex;justify-content:center;margin:auto;min-height:calc(100vh + 8px);padding:0;position:relative}.markdown-body .lightbox.open img{height:auto !important;max-height:97.5vh !important;max-width:97.5vw !important;min-width:unset !important;width:auto !important}.markdown-body .lightbox.open img.border,.markdown-body .lightbox.open img:not([src$=".png"]):not([src$=".svg"]):not([src$=".jp2"]):not([src$=".tiff"]){box-shadow:0 .5em 3em -1em rgba(0,0,0,.2)}.markdown-body .lightbox.open img[src$=svg]{display:block !important;height:66vw !important;max-width:100% !important;min-width:200px !important;width:42vw !important}.markdown-body table{display:table;border-collapse:collapse;border-spacing:0;width:100%;color:var(--table-text)}.markdown-body table thead{color:var(--table-head-text, inherit)}.markdown-body table thead tr{background:var(--table-head, #f6f8fa)}.markdown-body table tr{background-color:var(--table-row, #fff)}.markdown-body table tr+tr{border-top:1px solid var(--table-edges, #dfe2e5)}.markdown-body table th,.markdown-body table thead td{font-weight:600}.markdown-body table th:empty,.markdown-body table thead td:empty{padding:0}.markdown-body table td,.markdown-body table th{padding:0;color:inherit;vertical-align:middle;border:1px solid var(--table-edges, #dfe2e5);padding:6px 13px}.markdown-body table td>:first-child,.markdown-body table td>:only-child,.markdown-body table th>:first-child,.markdown-body table th>:only-child{margin-top:0 !important}.markdown-body table td>:last-child,.markdown-body table td>:only-child,.markdown-body table th>:last-child,.markdown-body table th>:only-child{margin-bottom:0 !important}.markdown-body table:not(.plain) tr:nth-child(2n){background-color:var(--table-stripe, #fbfcfd)}.markdown-body .rdmd-table{display:block;position:relative}.markdown-body .rdmd-table-inner{box-sizing:content-box;min-width:100%;overflow:auto;width:100%}.markdown-body .rdmd-table table{border:1px solid var(--table-edges, #dfe2e5)}.markdown-body .rdmd-table table:only-child{margin:0 !important}.markdown-body .rdmd-table table:only-child thead th{background:inherit}.markdown-body .rdmd-table table:only-child td:last-child,.markdown-body .rdmd-table table:only-child th:last-child{border-right:none}.markdown-body .rdmd-table table:only-child thead tr,.markdown-body .rdmd-table table:only-child thead th:last-child{box-shadow:3px 0 0 var(--table-head)}.toc-list .glossary-tooltip{pointer-events:none}.markdown-body{--font-size: 90%}.markdown-body code,.markdown-body kbd,.markdown-body pre{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-family:var(--md-code-font, SFMono-Regular, Consolas, Liberation Mono, Menlo, Courier, monospace);font-size:1em}.markdown-body code,.markdown-body pre{font-size:12px}.markdown-body pre{margin-bottom:0;margin-top:0}.markdown-body code{background-color:#f6f8fa;background-color:var(--md-code-background, #f6f8fa);border-radius:3px;color:var(--md-code-text);font-size:var(--font-size);margin:0;padding:.2em .4em}.markdown-body code>div[class*=cm-]{display:inherit}.markdown-body pre{word-wrap:normal}.markdown-body pre>code{background:0 0;border:0;font-size:100%;margin:0;padding:0;white-space:pre;word-break:normal}.markdown-body pre{background-color:#f6f8fa;background-color:var(--md-code-background, #f6f8fa);color:inherit;color:var(--md-code-text, inherit);border-radius:3px;border-radius:var(--markdown-radius, 3px);border-radius:var(--md-code-radius, var(--markdown-radius, 3px));font-size:var(--font-size);line-height:1.45;overflow:auto;padding:1em}.markdown-body pre code.theme-dark{background-color:#242e34;background-color:var(--md-code-background, #242e34)}.markdown-body pre code{background-color:rgba(0,0,0,0);border:0;display:inline;line-height:inherit;margin:0;max-width:auto;overflow:visible;padding:0;word-wrap:normal}.markdown-body kbd{background-color:#f6f8fa;background-color:var(--d-code-background, #f6f8fa);border:1px solid #d1d5da;border-bottom-color:#c6cbd1;border-radius:3px;box-shadow:inset 0 -1px 0 #c6cbd1;color:#444d56;display:inline-block;font-size:11px;line-height:10px;padding:3px 5px;vertical-align:middle}.markdown-body button.rdmd-code-copy{display:none !important}.markdown-body button.rdmd-code-copy{-webkit-appearance:unset;margin:.5em .6em 0 0;padding:.25em .7em;cursor:copy;color:inherit;color:var(--md-code-text, inherit);border:none;border-radius:3px;outline:none !important;background:inherit;background:var(--md-code-background, inherit);box-shadow:inset 0 0 0 1px rgba(170,170,170,.66),-1px 2px 6px -3px rgba(0,0,0,.1);transition:.15s ease-out}.markdown-body button.rdmd-code-copy:not(:hover):before,.markdown-body button.rdmd-code-copy:not(:hover):after{opacity:.66}.markdown-body button.rdmd-code-copy:hover:not(:active){box-shadow:inset 0 0 0 1px rgba(139,139,139,.75),-1px 2px 6px -3px rgba(0,0,0,.2)}.markdown-body button.rdmd-code-copy:active{box-shadow:inset 0 0 0 1px rgba(139,139,139,.5),inset 1px 4px 6px -2px rgba(0,0,0,.175)}.markdown-body button.rdmd-code-copy:active:before,.markdown-body button.rdmd-code-copy:active:after{opacity:.75}.markdown-body button.rdmd-code-copy:before,.markdown-body button.rdmd-code-copy:after{display:inline-block;font-family:"Font Awesome 6 Pro"}.markdown-body button.rdmd-code-copy:before{content:"";transition:.3s .15s ease}.markdown-body button.rdmd-code-copy:after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%, -50%) scale(0.33);opacity:0 !important;transition:.3s 0s ease}.markdown-body button.rdmd-code-copy_copied{pointer-events:none}.markdown-body button.rdmd-code-copy_copied,.markdown-body button.rdmd-code-copy_copied *{color:green !important;color:var(--md-code-text, green) !important;opacity:1}.markdown-body button.rdmd-code-copy_copied:before{transition:.3s 0s ease;transform:scale(0.33);opacity:0 !important}.markdown-body button.rdmd-code-copy_copied:after{transition:.3s .15s ease;transform:translate(-50%, -50%) scale(1);opacity:1 !important}.markdown-body pre{position:relative}.markdown-body pre>code{background:inherit}.markdown-body pre>code.theme-dark{color:#fff}.markdown-body pre button.rdmd-code-copy{display:inline-block !important;position:absolute;right:0;top:0}.markdown-body pre{overflow:hidden;padding:0}.markdown-body pre>code{display:block !important;overflow:auto;padding:1em;max-height:90vh}.markdown-body pre:hover button.rdmd-code-copy:not(:hover){transition-delay:.4s}.markdown-body pre:not(:hover) button.rdmd-code-copy:not(.rdmd-code-copy_copied){opacity:0 !important}.CodeTabs{color:#333;color:var(--md-code-text, #333);border-radius:var(--md-code-radius, var(--markdown-radius, 3px)) !important;overflow:hidden}.CodeTabs.theme-dark{color:#fff;color:var(--md-code-text, white)}.CodeTabs.theme-dark .CodeTabs-toolbar{background:#373737;background:var(--md-code-tabs, #373737)}.CodeTabs-toolbar{background:#ebedef;background:var(--md-code-tabs, #ebedef);display:flex;flex-flow:row nowrap;overflow:hidden;overflow-x:auto;-ms-overflow-style:none;-webkit-overflow-scrolling:touch}.CodeTabs-toolbar::-webkit-scrollbar{display:none}.CodeTabs-toolbar button{white-space:nowrap;transition:.123s ease;-webkit-appearance:none;appearance:none;display:inline-block;line-height:2;padding:.5em 1em;border:none;background:rgba(0,0,0,0);outline:none;color:inherit;font:inherit;font-size:.75em;cursor:pointer}.CodeTabs.CodeTabs_initial .CodeTabs-toolbar button:first-child,.CodeTabs-toolbar button.CodeTabs_active{background:#f6f8fa;background:var(--md-code-background, #F6F8FA);color:#000;color:var(--md-code-text, black);pointer-events:none}.CodeTabs.theme-dark.CodeTabs_initial .CodeTabs-toolbar button:first-child,.CodeTabs.theme-dark .CodeTabs-toolbar button.CodeTabs_active{background:#242e34;background:var(--md-code-background, #242E34);color:#fff;color:var(--md-code-text, white)}.CodeTabs-toolbar button:not(.CodeTabs_active):hover{background:rgba(0,0,0,.075)}.CodeTabs pre{border-radius:0 0 var(--md-code-radius, var(--markdown-radius, 3px)) var(--md-code-radius, var(--markdown-radius, 3px)) !important;background:#f6f8fa;background:var(--md-code-background, #F6F8FA);margin-bottom:0}.CodeTabs pre:not(.CodeTabs_active){display:none}.CodeTabs.theme-dark pre{background:#242e34;background:var(--md-code-background, #242E34)}.CodeTabs.CodeTabs_initial pre:first-child{display:block}.callout{--emoji: 1em;--icon-font: var(--fa-style-family, "Font Awesome 6 Pro", FontAwesome);border-top-right-radius:var(--markdown-radius);border-bottom-right-radius:var(--markdown-radius)}.callout.callout{--background: #f8f8f9;--border: #8b939c}.callout.callout{background:var(--background);border-color:var(--border);color:var(--text);padding:1.33rem}.callout.callout_info{--background: #e3edf2;--title: #46b8da;--border: #5bc0de}.callout.callout_warn,.callout.callout_warning{--background: #fcf8f2;--title: #eea236;--border: #f0ad4e}.callout.callout_ok,.callout.callout_okay,.callout.callout_success{--background: #f3f8f3;--title: #489e49;--border: #50af51}.callout.callout_err,.callout.callout_error{--background: #fdf7f7;--title: #d43f3a;--border: #d9534f}.callout.callout>*{margin-left:1.33rem;position:relative}.callout.callout ul,.callout.callout ol{padding-left:1.3em}.callout.callout a{color:inherit}.callout.callout hr{border-color:var(--border, var(--markdown-edge, #eee))}.callout.callout blockquote{color:var(--text);border-color:var(--border);border-width:3px;padding:0 0 0 .8em}.callout.callout .callout-heading{color:var(--title, --text);font-family:var(--markdown-title-font);font-size:1.25em;font-weight:var(--markdown-title-weight, 600);line-height:1.25;margin-bottom:calc(1.33rem*.5)}.callout.callout .callout-heading:only-child{margin-bottom:0}.callout.callout .callout-heading.empty{float:left;margin-top:calc(1.33rem*.5)}.callout.callout .callout-heading.empty .callout-icon{line-height:0}.callout.callout .callout-heading>*{color:inherit;margin:0}.callout.callout .callout-heading:before{position:absolute;right:100%;width:2.4em;text-align:center;font:normal normal normal 1em/1 var(--icon-font)}.callout.callout .callout-icon{float:left;margin-left:calc(-1.33rem - .5em);margin-right:-0.25rem}.callout-icon{font-size:var(--emoji, 0);color:var(--icon-color, inherit) !important}.callout-icon:before{content:var(--icon);font-family:var(--icon-font);font-size:var(--icon-size, 1rem);font-weight:var(--icon-weight, 400);position:absolute;top:50%;transform:translate(-50%, -50%);display:inline-block;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.rdmdCallouts--useIconFont .callout{--emoji: unset}.rdmdCallouts--useIconFont .callout_okay{--icon: ""}.rdmdCallouts--useIconFont .callout_info{--icon: ""}.rdmdCallouts--useIconFont .callout_warn{--icon: ""}.rdmdCallouts--useIconFont .callout_error{--icon: ""}.rdmdCallouts--useIconFont .callout_default{--emoji: 1rem}.heading.heading{display:flex;justify-content:flex-start;align-items:center;position:relative}.heading.heading .heading-text{flex:1 100%}.heading.heading .heading-anchor-deprecated{position:absolute;top:0}.heading.heading .heading-anchor{top:-1rem !important}.heading.heading .heading-anchor,.heading.heading .heading-anchor-icon{position:absolute !important;display:inline !important;order:-1;right:100%;top:unset !important;margin-right:-0.8rem;padding:.8rem .2rem .8rem 0 !important;font-size:.8rem !important;text-decoration:none;color:inherit;transform:translateX(-100%);transition:.2s ease}.heading.heading .heading-anchor:hover,.heading.heading .heading-anchor-icon:hover{opacity:1}.heading.heading:not(:hover) .heading-anchor-icon{opacity:0}.markdown-body .embed{padding:15px;color:var(--md-code-text, inherit);border-radius:var(--md-code-radius, var(--markdown-radius, 3px));border-radius:3px;background:rgba(0,0,0,0);box-shadow:inset 0 0 0 1px rgba(0,0,0,.15);transition:.3s ease}.markdown-body .embed:hover{background:var(--md-code-background, #f6f8fa);box-shadow:inset 0 0 0 1px rgba(0,0,0,.1)}.markdown-body>.embed_hasImg:nth-of-type(odd){margin-right:30px;padding-right:0}.markdown-body>.embed_hasImg:nth-of-type(odd) .embed-link{flex-direction:row-reverse}.markdown-body>.embed_hasImg:nth-of-type(odd) .embed-img{margin-left:.88em;margin-right:-30px;box-shadow:-0.3em .3em .9em -0.3em rgba(0,0,0,.15)}.markdown-body>.embed_hasImg:nth-of-type(even){margin-left:30px;padding-left:0}.markdown-body>.embed_hasImg:nth-of-type(even) .embed-img{margin-left:-30px}.markdown-body .embed:empty{display:none}.markdown-body .embed-media{display:flex;justify-content:center}.markdown-body .embed-media>:only-child{flex:1;margin:-15px;border-radius:0 !important}.markdown-body .embed-link{display:flex;align-items:center;color:var(--markdown-text, #333);text-decoration:none !important}.markdown-body .embed-body{flex:1;line-height:1.3}.markdown-body .embed-body,.markdown-body .embed-body .embed-title{font-size:1.15em;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.markdown-body .embed-body .embed-provider{display:block;text-decoration-color:rgba(0,0,0,0) !important;opacity:.88}.markdown-body .embed-body-url{opacity:.75}.markdown-body .embed-provider{font-size:.8em;line-height:1.6;transition:.2 ease}.markdown-body .embed-provider code:only-child{display:block;width:100%;font-size:1.15em;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;background:rgba(0,0,0,0);margin:0;padding:0;font-size:inherit !important}.markdown-body .embed-provider code{opacity:.8}.markdown-body .embed-img{width:5em;max-width:5em;margin:0 .88em 0 0;padding:4px;background:#fff;border:1px solid rgba(0,0,0,.15);border-radius:3px;transition:inherit;box-shadow:.3em .3em .9em -0.3em rgba(0,0,0,.15)}.markdown-body .embed:not(:hover) .embed-img{box-shadow:0 .25em 1em -0.5em rgba(0,0,0,.133)}.markdown-body .embed:hover .embed-img{border:1px solid rgba(0,0,0,.2)}.markdown-body .embed-favicon{width:12px !important;height:12px !important;margin-top:4px;margin-right:6px;margin-bottom:12px}.GlossaryItem-trigger{border-bottom:1px solid #737c83;border-style:dotted;border-top:none;border-left:none;border-right:none;cursor:pointer}.GlossaryItem-tooltip-content{--Glossary-bg: var(--color-bg-page, var(--white));--Glossary-color: var(--color-text-default, var(--gray20));--Glossary-shadow: var( --box-shadow-menu-light, 0 5px 10px rgba(0, 0, 0, 0.05), 0 2px 6px rgba(0, 0, 0, 0.025), 0 1px 3px rgba(0, 0, 0, 0.025) );background-color:var(--Glossary-bg);border:1px solid var(--color-border-default, rgba(0, 0, 0, 0.1));border-radius:var(--border-radius);box-shadow:var(--Glossary-shadow);color:var(--Glossary-color);font-size:15px;font-weight:400;line-height:1.5;padding:15px;text-align:left;width:350px}[data-color-mode=dark] .GlossaryItem-tooltip-content{--Glossary-bg: var(--gray15);--Glossary-color: var(--color-text-default, var(--white));--Glossary-shadow: var( --box-shadow-menu-dark, 0 1px 3px rgba(0, 0, 0, 0.025), 0 2px 6px rgba(0, 0, 0, 0.025), 0 5px 10px rgba(0, 0, 0, 0.05) )}@media(prefers-color-scheme: dark){[data-color-mode=auto] .GlossaryItem-tooltip-content{--Glossary-bg: var(--Tooltip-bg, var(--gray0));--Glossary-color: var(--color-text-default, var(--white));--Glossary-shadow: var( --box-shadow-menu-dark, 0 1px 3px rgba(0, 0, 0, 0.025), 0 2px 6px rgba(0, 0, 0, 0.025), 0 5px 10px rgba(0, 0, 0, 0.05) )}}.GlossaryItem-term{font-style:italic}.tippy-box[data-animation=fade][data-state=hidden]{opacity:0}:root{--markdown-text: inherit;--markdown-title: inherit;--markdown-title-font: inherit;--markdown-font: inherit;--markdown-font-size: inherit;--markdown-line-height: 1.5}.field-description,.markdown-body{color:var(--markdown-text);font-family:var(--markdown-font);line-height:var(--markdown-line-height);position:relative;text-size-adjust:100%;word-wrap:break-word;font-size:var(--markdown-font-size, 14px)}.field-description::before,.field-description::after,.markdown-body::before,.markdown-body::after{content:"";display:table}.field-description::after,.markdown-body::after{clear:both}.field-description ul,.markdown-body ul{list-style:initial}.field-description .anchor,.markdown-body .anchor{float:left;line-height:1;margin-left:-20px;padding-right:4px}.field-description .anchor:focus,.markdown-body .anchor:focus{outline:0}.field-description h1:hover .anchor,.field-description h2:hover .anchor,.field-description h3:hover .anchor,.field-description h4:hover .anchor,.field-description h5:hover .anchor,.field-description h6:hover .anchor,.markdown-body h1:hover .anchor,.markdown-body h2:hover .anchor,.markdown-body h3:hover .anchor,.markdown-body h4:hover .anchor,.markdown-body h5:hover .anchor,.markdown-body h6:hover .anchor{text-decoration:none}.field-description details,.markdown-body details{display:block}.field-description summary,.markdown-body summary{display:list-item}.field-description a,.markdown-body a{transition:.15s ease}.field-description a:hover,.markdown-body a:hover{text-decoration:underline}.field-description a:active,.field-description a:hover,.markdown-body a:active,.markdown-body a:hover{outline-width:0}.field-description a:not([href]),.markdown-body a:not([href]){color:inherit;text-decoration:none}.field-description strong,.markdown-body strong{font-weight:inherit;font-weight:bolder}.field-description h1,.markdown-body h1{font-size:2em;margin:.67em 0}.field-description hr,.markdown-body hr{background:rgba(0,0,0,0);border-bottom:1px solid var(--markdown-edge, #dfe2e5);border-width:0 0 1px;box-sizing:content-box;height:0;margin:15px 0;overflow:hidden}.field-description hr::before,.field-description hr::after,.markdown-body hr::before,.markdown-body hr::after{content:"";display:table}.field-description hr::after,.markdown-body hr::after{clear:both}.field-description input,.markdown-body input{font:inherit;margin:0}.field-description input,.markdown-body input{overflow:visible}.field-description [type=checkbox],.markdown-body [type=checkbox]{box-sizing:border-box;padding:0}.field-description *,.markdown-body *{box-sizing:border-box}.field-description input,.markdown-body input{font-family:inherit;font-size:inherit;line-height:inherit}.field-description strong,.markdown-body strong{font-weight:600}.field-description details summary,.markdown-body details summary{cursor:pointer}.field-description h1,.field-description h2,.field-description h3,.field-description h4,.field-description h5,.field-description h6,.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{color:var(--markdown-title);font-family:var(--markdown-title-font);font-size:var(--markdown-title-size);font-weight:var(--markdown-title-weight, 600);line-height:1.25;margin-bottom:var(--markdown-title-marginBottom, 1rem);margin-top:var(--markdown-title-marginTop, 1em)}.field-description h1,.markdown-body h1{font-size:1.75em;font-size:var(--markdown-title-size, 1.75em)}.field-description h2,.markdown-body h2{font-size:1.5em;font-size:var(--markdown-title-size, 1.5em)}.field-description h1,.markdown-body h1{font-weight:700;font-weight:var(--markdown-title-weight, 700)}.field-description h2,.markdown-body h2{font-weight:600;font-weight:var(--markdown-title-weight, 600)}.field-description h3,.field-description h4,.markdown-body h3,.markdown-body h4{font-weight:600;font-weight:var(--markdown-title-weight, 600)}.field-description h3,.markdown-body h3{font-size:1.25em;font-size:var(--markdown-title-size, 1.25em)}.field-description h4,.markdown-body h4{font-size:1em;font-size:var(--markdown-title-size, 1em)}.field-description h5,.field-description h6,.markdown-body h5,.markdown-body h6{font-weight:600;font-weight:var(--markdown-title-weight, 600)}.field-description h5,.markdown-body h5{font-size:.875em;font-size:var(--markdown-title-size, 0.875em)}.field-description h6,.markdown-body h6{color:var(--markdown-title, #6a737d);font-size:.85em;font-size:var(--markdown-title-size, 0.85em)}.field-description p,.field-description .p,.markdown-body p,.markdown-body .p{margin-bottom:10px;margin-top:0}.field-description blockquote,.markdown-body blockquote{margin:0}.field-description ol,.field-description ul,.markdown-body ol,.markdown-body ul{margin-bottom:0;margin-top:0;padding-left:0}.field-description ol ol,.field-description ul ol,.markdown-body ol ol,.markdown-body ul ol{list-style-type:lower-roman}.field-description ol ol ol,.field-description ol ul ol,.field-description ul ol ol,.field-description ul ul ol,.markdown-body ol ol ol,.markdown-body ol ul ol,.markdown-body ul ol ol,.markdown-body ul ul ol{list-style-type:lower-alpha}.field-description dd,.markdown-body dd{margin-left:0}.field-description input::-webkit-inner-spin-button,.field-description input::-webkit-outer-spin-button,.markdown-body input::-webkit-inner-spin-button,.markdown-body input::-webkit-outer-spin-button{appearance:none;appearance:none;margin:0}.field-description>:first-child,.markdown-body>:first-child{margin-top:0 !important}.field-description>:last-child,.markdown-body>:last-child{margin-bottom:0 !important}.field-description blockquote,.field-description dl,.field-description ol,.field-description p,.field-description pre,.field-description table,.field-description ul,.markdown-body blockquote,.markdown-body dl,.markdown-body ol,.markdown-body p,.markdown-body pre,.markdown-body table,.markdown-body ul{margin-bottom:15px;margin-top:0}.field-description blockquote,.markdown-body blockquote{border-left:.25em solid #dfe2e5;color:#6a737d;display:block;padding:0 1em}.field-description blockquote>:first-child,.markdown-body blockquote>:first-child{margin-top:0}.field-description blockquote>:last-child,.markdown-body blockquote>:last-child{margin-bottom:0}.field-description ol,.field-description ul,.markdown-body ol,.markdown-body ul{padding-left:2em}.field-description ol ol,.field-description ol ul,.field-description ul ol,.field-description ul ul,.markdown-body ol ol,.markdown-body ol ul,.markdown-body ul ol,.markdown-body ul ul{margin-bottom:0;margin-top:0}.field-description li,.markdown-body li{clear:both;word-wrap:break-all}.field-description li>p,.markdown-body li>p{margin-top:1em}.field-description li+li,.markdown-body li+li{margin-top:.25em}.field-description dl,.markdown-body dl{padding:0}.field-description dl dt,.markdown-body dl dt{font-size:1em;font-style:italic;font-weight:600;margin-top:1em;padding:0}.field-description dl dd,.markdown-body dl dd{margin-bottom:1em;padding:0 1em}.field-description :checked+.radio-label,.markdown-body :checked+.radio-label{border-color:var(--project-color-primary);position:relative;z-index:1}.field-description .task-list-item,.markdown-body .task-list-item{list-style-type:none}.field-description .task-list-item+.task-list-item,.markdown-body .task-list-item+.task-list-item{margin-top:3px}.field-description .task-list-item input,.markdown-body .task-list-item input{margin:0 .2em .25em -1.6em;vertical-align:middle}.field-description p.blank-line,.markdown-body p.blank-line{height:1.5em}.field-description h5,.field-description h6,.markdown-body h5,.markdown-body h6{font-size:.9em}.field-description blockquote h1:last-child,.field-description blockquote h2:last-child,.markdown-body blockquote h1:last-child,.markdown-body blockquote h2:last-child{border-bottom:0}.field-description>*,.markdown-body>*{margin-bottom:15px !important;margin-top:15px}.field-description .task-list-item input,.markdown-body .task-list-item input{margin:0 .5em .25em -1.25em}.field-description a[href],.field-description a:not([href=""]),.markdown-body a[href],.markdown-body a:not([href=""]){text-decoration:underline}
393
+ .markdown-body img.img-align-right,.markdown-body img[align=right],.markdown-body img[alt~=align-right]{float:right;margin-left:.75rem}.markdown-body img.img-align-left,.markdown-body img[align=left],.markdown-body img[alt~=align-left]{float:left;margin-right:.75rem}.markdown-body>.img,.markdown-body>img,.markdown-body figure>img,.markdown-body img.img-align-center,.markdown-body img[align=middle],.markdown-body img[align=center],.markdown-body img[alt~=align-center]{display:block}.markdown-body img{border-style:none;box-sizing:content-box;display:inline-block;margin-left:auto;margin-right:auto;max-width:100%;outline:none !important;vertical-align:middle}.markdown-body img[width=smart]{max-height:450px;max-width:100%;width:auto}.markdown-body img.border{border:1px solid rgba(0,0,0,.2)}.markdown-body figure{margin:15px auto}.markdown-body figure figcaption{font-size:.93em;font-style:italic;margin-top:8px;text-align:center}.markdown-body>.img,.markdown-body>img,.markdown-body figure>img{display:block}.markdown-body figure .img{display:block}.markdown-body .lightbox.open{align-items:center;background:rgba(255,255,255,.966);display:flex;flex-flow:nowrap column;height:100vh;justify-content:flex-start;left:0;margin-bottom:0;margin-top:0;overflow:hidden;overflow-y:scroll;position:fixed;top:0;user-select:none;width:100vw;z-index:9999999}.markdown-body .lightbox.open::after{content:"";cursor:pointer;display:inline-block;font:normal normal normal 2em/1 FontAwesome;font-size:inherit;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;opacity:1;position:fixed;right:1em;text-rendering:auto;top:1em;transform:translate(0, 0);transform:scale(1.5);transition:.3s .3s ease-in}.markdown-body .lightbox.open:not(.open)::after{opacity:0;transform:scale(0)}.markdown-body .lightbox.open .lightbox-inner{align-items:center;box-sizing:content-box;display:inline-flex;justify-content:center;margin:auto;min-height:calc(100vh + 8px);padding:0;position:relative}.markdown-body .lightbox.open img{height:auto !important;max-height:97.5vh !important;max-width:97.5vw !important;min-width:unset !important;width:auto !important}.markdown-body .lightbox.open img.border,.markdown-body .lightbox.open img:not([src$=".png"]):not([src$=".svg"]):not([src$=".jp2"]):not([src$=".tiff"]){box-shadow:0 .5em 3em -1em rgba(0,0,0,.2)}.markdown-body .lightbox.open img[src$=svg]{display:block !important;height:66vw !important;max-width:100% !important;min-width:200px !important;width:42vw !important}.markdown-body table{display:table;border-collapse:collapse;border-spacing:0;width:100%;color:var(--table-text)}.markdown-body table thead{color:var(--table-head-text, inherit)}.markdown-body table thead tr{background:var(--table-head, #f6f8fa)}.markdown-body table tr{background-color:var(--table-row, #fff)}.markdown-body table tr+tr{border-top:1px solid var(--table-edges, #dfe2e5)}.markdown-body table th,.markdown-body table thead td{font-weight:600}.markdown-body table th:empty,.markdown-body table thead td:empty{padding:0}.markdown-body table td,.markdown-body table th{padding:0;color:inherit;vertical-align:middle;border:1px solid var(--table-edges, #dfe2e5);padding:6px 13px}.markdown-body table td>:first-child,.markdown-body table td>:only-child,.markdown-body table th>:first-child,.markdown-body table th>:only-child{margin-top:0 !important}.markdown-body table td>:last-child,.markdown-body table td>:only-child,.markdown-body table th>:last-child,.markdown-body table th>:only-child{margin-bottom:0 !important}.markdown-body table:not(.plain) tr:nth-child(2n){background-color:var(--table-stripe, #fbfcfd)}.markdown-body .rdmd-table{display:block;position:relative}.markdown-body .rdmd-table-inner{box-sizing:content-box;min-width:100%;overflow:auto;width:100%}.markdown-body .rdmd-table table{border:1px solid var(--table-edges, #dfe2e5)}.markdown-body .rdmd-table table:only-child{margin:0 !important}.markdown-body .rdmd-table table:only-child thead th{background:inherit}.markdown-body .rdmd-table table:only-child td:last-child,.markdown-body .rdmd-table table:only-child th:last-child{border-right:none}.markdown-body .rdmd-table table:only-child thead tr,.markdown-body .rdmd-table table:only-child thead th:last-child{box-shadow:3px 0 0 var(--table-head)}.toc-list .glossary-tooltip{pointer-events:none}.markdown-body{--font-size: 90%}.markdown-body code,.markdown-body kbd,.markdown-body pre{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-family:var(--md-code-font, SFMono-Regular, Consolas, Liberation Mono, Menlo, Courier, monospace);font-size:1em}.markdown-body code,.markdown-body pre{font-size:12px}.markdown-body pre{margin-bottom:0;margin-top:0}.markdown-body code{background-color:#f6f8fa;background-color:var(--md-code-background, #f6f8fa);border-radius:3px;color:var(--md-code-text);font-size:var(--font-size);margin:0;padding:.2em .4em}.markdown-body code>div[class*=cm-]{display:inherit}.markdown-body pre{word-wrap:normal}.markdown-body pre>code{background:0 0;border:0;font-size:100%;margin:0;padding:0;white-space:pre;word-break:normal}.markdown-body pre{background-color:#f6f8fa;background-color:var(--md-code-background, #f6f8fa);color:inherit;color:var(--md-code-text, inherit);border-radius:3px;border-radius:var(--markdown-radius, 3px);border-radius:var(--md-code-radius, var(--markdown-radius, 3px));font-size:var(--font-size);line-height:1.45;overflow:auto;padding:1em}.markdown-body pre code.theme-dark{background-color:#242e34;background-color:var(--md-code-background, #242e34)}.markdown-body pre code{background-color:rgba(0,0,0,0);border:0;display:inline;line-height:inherit;margin:0;max-width:auto;overflow:visible;padding:0;word-wrap:normal}.markdown-body kbd{background-color:#f6f8fa;background-color:var(--d-code-background, #f6f8fa);border:1px solid #d1d5da;border-bottom-color:#c6cbd1;border-radius:3px;box-shadow:inset 0 -1px 0 #c6cbd1;color:#444d56;display:inline-block;font-size:11px;line-height:10px;padding:3px 5px;vertical-align:middle}.markdown-body button.rdmd-code-copy{display:none !important}.markdown-body button.rdmd-code-copy{-webkit-appearance:unset;margin:.5em .6em 0 0;padding:.25em .7em;cursor:copy;color:inherit;color:var(--md-code-text, inherit);border:none;border-radius:3px;outline:none !important;background:inherit;background:var(--md-code-background, inherit);box-shadow:inset 0 0 0 1px rgba(170,170,170,.66),-1px 2px 6px -3px rgba(0,0,0,.1);transition:.15s ease-out}.markdown-body button.rdmd-code-copy:not(:hover):before,.markdown-body button.rdmd-code-copy:not(:hover):after{opacity:.66}.markdown-body button.rdmd-code-copy:hover:not(:active){box-shadow:inset 0 0 0 1px rgba(139,139,139,.75),-1px 2px 6px -3px rgba(0,0,0,.2)}.markdown-body button.rdmd-code-copy:active{box-shadow:inset 0 0 0 1px rgba(139,139,139,.5),inset 1px 4px 6px -2px rgba(0,0,0,.175)}.markdown-body button.rdmd-code-copy:active:before,.markdown-body button.rdmd-code-copy:active:after{opacity:.75}.markdown-body button.rdmd-code-copy:before,.markdown-body button.rdmd-code-copy:after{display:inline-block;font-family:"Font Awesome 6 Pro"}.markdown-body button.rdmd-code-copy:before{content:"";transition:.3s .15s ease}.markdown-body button.rdmd-code-copy:after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%, -50%) scale(0.33);opacity:0 !important;transition:.3s 0s ease}.markdown-body button.rdmd-code-copy_copied{pointer-events:none}.markdown-body button.rdmd-code-copy_copied,.markdown-body button.rdmd-code-copy_copied *{color:green !important;color:var(--md-code-text, green) !important;opacity:1}.markdown-body button.rdmd-code-copy_copied:before{transition:.3s 0s ease;transform:scale(0.33);opacity:0 !important}.markdown-body button.rdmd-code-copy_copied:after{transition:.3s .15s ease;transform:translate(-50%, -50%) scale(1);opacity:1 !important}.markdown-body pre{position:relative}.markdown-body pre>code{background:inherit}.markdown-body pre>code.theme-dark{color:#fff}.markdown-body pre button.rdmd-code-copy{display:inline-block !important;position:absolute;right:0;top:0}.markdown-body pre{overflow:hidden;padding:0}.markdown-body pre>code{display:block !important;overflow:auto;padding:1em;max-height:90vh}.markdown-body pre:hover button.rdmd-code-copy:not(:hover){transition-delay:.4s}.markdown-body pre:not(:hover) button.rdmd-code-copy:not(.rdmd-code-copy_copied){opacity:0 !important}.CodeTabs{color:#333;color:var(--md-code-text, #333);border-radius:var(--md-code-radius, var(--markdown-radius, 3px)) !important;overflow:hidden}.CodeTabs.theme-dark{color:#fff;color:var(--md-code-text, white)}.CodeTabs.theme-dark .CodeTabs-toolbar{background:#373737;background:var(--md-code-tabs, #373737)}.CodeTabs-toolbar{background:#ebedef;background:var(--md-code-tabs, #ebedef);display:flex;flex-flow:row nowrap;overflow:hidden;overflow-x:auto;-ms-overflow-style:none;-webkit-overflow-scrolling:touch}.CodeTabs-toolbar::-webkit-scrollbar{display:none}.CodeTabs-toolbar button{white-space:nowrap;transition:.123s ease;-webkit-appearance:none;appearance:none;display:inline-block;line-height:2;padding:.5em 1em;border:none;background:rgba(0,0,0,0);outline:none;color:inherit;font:inherit;font-size:.75em;cursor:pointer}.CodeTabs.CodeTabs_initial .CodeTabs-toolbar button:first-child,.CodeTabs-toolbar button.CodeTabs_active{background:#f6f8fa;background:var(--md-code-background, #F6F8FA);color:#000;color:var(--md-code-text, black);pointer-events:none}.CodeTabs.theme-dark.CodeTabs_initial .CodeTabs-toolbar button:first-child,.CodeTabs.theme-dark .CodeTabs-toolbar button.CodeTabs_active{background:#242e34;background:var(--md-code-background, #242E34);color:#fff;color:var(--md-code-text, white)}.CodeTabs-toolbar button:not(.CodeTabs_active):hover{background:rgba(0,0,0,.075)}.CodeTabs pre{border-radius:0 0 var(--md-code-radius, var(--markdown-radius, 3px)) var(--md-code-radius, var(--markdown-radius, 3px)) !important;background:#f6f8fa;background:var(--md-code-background, #F6F8FA);margin-bottom:0}.CodeTabs pre:not(.CodeTabs_active){display:none}.CodeTabs.theme-dark pre{background:#242e34;background:var(--md-code-background, #242E34)}.CodeTabs.CodeTabs_initial pre:first-child{display:block}.callout{--emoji: 1em;--icon-font: var(--fa-style-family, "Font Awesome 6 Pro", FontAwesome);border-top-right-radius:var(--markdown-radius);border-bottom-right-radius:var(--markdown-radius)}.callout.callout{--background: #f8f8f9;--border: #8b939c}.callout.callout{background:var(--background);border-color:var(--border);color:var(--text);padding:1.33rem}.callout.callout_info{--background: #e3edf2;--title: #46b8da;--border: #5bc0de}.callout.callout_warn,.callout.callout_warning{--background: #fcf8f2;--title: #eea236;--border: #f0ad4e}.callout.callout_ok,.callout.callout_okay,.callout.callout_success{--background: #f3f8f3;--title: #489e49;--border: #50af51}.callout.callout_err,.callout.callout_error{--background: #fdf7f7;--title: #d43f3a;--border: #d9534f}.callout.callout>*{margin-left:1.33rem;position:relative}.callout.callout ul,.callout.callout ol{padding-left:1.3em}.callout.callout a{color:inherit}.callout.callout hr{border-color:var(--border, var(--markdown-edge, #eee))}.callout.callout blockquote{color:var(--text);border-color:var(--border);border-width:3px;padding:0 0 0 .8em}.callout.callout .callout-heading{color:var(--title, --text);font-family:var(--markdown-title-font);font-size:1.25em;font-weight:var(--markdown-title-weight, 600);line-height:1.25;margin-bottom:calc(1.33rem*.5)}.callout.callout .callout-heading:only-child{margin-bottom:0}.callout.callout .callout-heading.empty{float:left;margin-top:calc(1.33rem*.5)}.callout.callout .callout-heading.empty .callout-icon{line-height:0}.callout.callout .callout-heading>*{color:inherit;margin:0}.callout.callout .callout-heading:before{position:absolute;right:100%;width:2.4em;text-align:center;font:normal normal normal 1em/1 var(--icon-font)}.callout.callout .callout-icon{float:left;margin-left:calc(-1.33rem - .5em);margin-right:-0.25rem}.callout-icon{font-size:var(--emoji, 0);color:var(--icon-color, inherit) !important}.callout-icon:before{content:var(--icon);font-family:var(--icon-font);font-size:var(--icon-size, 1rem);font-weight:var(--icon-weight, 400);position:absolute;top:50%;transform:translate(-50%, -50%);display:inline-block;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.rdmdCallouts--useIconFont .callout{--emoji: unset}.rdmdCallouts--useIconFont .callout_okay{--icon: ""}.rdmdCallouts--useIconFont .callout_info{--icon: ""}.rdmdCallouts--useIconFont .callout_warn{--icon: ""}.rdmdCallouts--useIconFont .callout_error{--icon: ""}.rdmdCallouts--useIconFont .callout_default{--emoji: 1rem}.heading.heading{display:flex;justify-content:flex-start;align-items:center;position:relative}.heading.heading .heading-text{flex:1 100%}.heading.heading .heading-anchor-deprecated{position:absolute;top:0}.heading.heading .heading-anchor{top:-1rem !important}.heading.heading .heading-anchor,.heading.heading .heading-anchor-icon{position:absolute !important;display:inline !important;order:-1;right:100%;top:unset !important;margin-right:-0.8rem;padding:.8rem .2rem .8rem 0 !important;font-size:.8rem !important;text-decoration:none;color:inherit;transform:translateX(-100%);transition:.2s ease}.heading.heading .heading-anchor:hover,.heading.heading .heading-anchor-icon:hover{opacity:1}.heading.heading:not(:hover) .heading-anchor-icon{opacity:0}.markdown-body .embed{padding:15px;color:var(--md-code-text, inherit);border-radius:var(--md-code-radius, var(--markdown-radius, 3px));border-radius:3px;background:rgba(0,0,0,0);box-shadow:inset 0 0 0 1px rgba(0,0,0,.15);transition:.3s ease}.markdown-body .embed:hover{background:var(--md-code-background, #f6f8fa);box-shadow:inset 0 0 0 1px rgba(0,0,0,.1)}.markdown-body>.embed_hasImg:nth-of-type(odd){margin-right:30px;padding-right:0}.markdown-body>.embed_hasImg:nth-of-type(odd) .embed-link{flex-direction:row-reverse}.markdown-body>.embed_hasImg:nth-of-type(odd) .embed-img{margin-left:.88em;margin-right:-30px;box-shadow:-0.3em .3em .9em -0.3em rgba(0,0,0,.15)}.markdown-body>.embed_hasImg:nth-of-type(even){margin-left:30px;padding-left:0}.markdown-body>.embed_hasImg:nth-of-type(even) .embed-img{margin-left:-30px}.markdown-body .embed:empty{display:none}.markdown-body .embed-media{display:flex;justify-content:center}.markdown-body .embed-media>:only-child{flex:1;margin:-15px;border-radius:0 !important}.markdown-body .embed-link{display:flex;align-items:center;color:var(--markdown-text, #333);text-decoration:none !important}.markdown-body .embed-body{flex:1;line-height:1.3}.markdown-body .embed-body,.markdown-body .embed-body .embed-title{font-size:1.15em;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.markdown-body .embed-body .embed-provider{display:block;text-decoration-color:rgba(0,0,0,0) !important;opacity:.88}.markdown-body .embed-body-url{opacity:.75}.markdown-body .embed-provider{font-size:.8em;line-height:1.6;transition:.2 ease}.markdown-body .embed-provider code:only-child{display:block;width:100%;font-size:1.15em;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;background:rgba(0,0,0,0);margin:0;padding:0;font-size:inherit !important}.markdown-body .embed-provider code{opacity:.8}.markdown-body .embed-img{width:5em;max-width:5em;margin:0 .88em 0 0;padding:4px;background:#fff;border:1px solid rgba(0,0,0,.15);border-radius:3px;transition:inherit;box-shadow:.3em .3em .9em -0.3em rgba(0,0,0,.15)}.markdown-body .embed:not(:hover) .embed-img{box-shadow:0 .25em 1em -0.5em rgba(0,0,0,.133)}.markdown-body .embed:hover .embed-img{border:1px solid rgba(0,0,0,.2)}.markdown-body .embed-favicon{width:12px !important;height:12px !important;margin-top:4px;margin-right:6px;margin-bottom:12px}.GlossaryItem-trigger{border-bottom:1px solid #737c83;border-style:dotted;border-top:none;border-left:none;border-right:none;cursor:pointer}.GlossaryItem-tooltip-content{--Glossary-bg: var(--color-bg-page, var(--white));--Glossary-color: var(--color-text-default, var(--gray20));--Glossary-shadow: var( --box-shadow-menu-light, 0 5px 10px rgba(0, 0, 0, 0.05), 0 2px 6px rgba(0, 0, 0, 0.025), 0 1px 3px rgba(0, 0, 0, 0.025) );background-color:var(--Glossary-bg);border:1px solid var(--color-border-default, rgba(0, 0, 0, 0.1));border-radius:var(--border-radius);box-shadow:var(--Glossary-shadow);color:var(--Glossary-color);font-size:15px;font-weight:400;line-height:1.5;padding:15px;text-align:left;width:350px}[data-color-mode=dark] .GlossaryItem-tooltip-content{--Glossary-bg: var(--gray15);--Glossary-color: var(--color-text-default, var(--white));--Glossary-shadow: var( --box-shadow-menu-dark, 0 1px 3px rgba(0, 0, 0, 0.025), 0 2px 6px rgba(0, 0, 0, 0.025), 0 5px 10px rgba(0, 0, 0, 0.05) )}@media(prefers-color-scheme: dark){[data-color-mode=auto] .GlossaryItem-tooltip-content{--Glossary-bg: var(--Tooltip-bg, var(--gray0));--Glossary-color: var(--color-text-default, var(--white));--Glossary-shadow: var( --box-shadow-menu-dark, 0 1px 3px rgba(0, 0, 0, 0.025), 0 2px 6px rgba(0, 0, 0, 0.025), 0 5px 10px rgba(0, 0, 0, 0.05) )}}.GlossaryItem-term{font-style:italic}.tippy-box[data-animation=fade][data-state=hidden]{opacity:0}:root{--markdown-text: inherit;--markdown-title: inherit;--markdown-title-font: inherit;--markdown-font: inherit;--markdown-font-size: inherit;--markdown-line-height: 1.5}.field-description,.markdown-body{color:var(--markdown-text);font-family:var(--markdown-font);line-height:var(--markdown-line-height);position:relative;text-size-adjust:100%;word-wrap:break-word;font-size:var(--markdown-font-size, 14px)}.field-description::before,.field-description::after,.markdown-body::before,.markdown-body::after{content:"";display:table}.field-description::after,.markdown-body::after{clear:both}.field-description ul,.markdown-body ul{list-style:initial}.field-description .anchor,.markdown-body .anchor{float:left;line-height:1;margin-left:-20px;padding-right:4px}.field-description .anchor:focus,.markdown-body .anchor:focus{outline:0}.field-description h1:hover .anchor,.field-description h2:hover .anchor,.field-description h3:hover .anchor,.field-description h4:hover .anchor,.field-description h5:hover .anchor,.field-description h6:hover .anchor,.markdown-body h1:hover .anchor,.markdown-body h2:hover .anchor,.markdown-body h3:hover .anchor,.markdown-body h4:hover .anchor,.markdown-body h5:hover .anchor,.markdown-body h6:hover .anchor{text-decoration:none}.field-description details,.markdown-body details{display:block}.field-description summary,.markdown-body summary{display:list-item}.field-description a,.markdown-body a{transition:.15s ease}.field-description a:hover,.markdown-body a:hover{text-decoration:underline}.field-description a:active,.field-description a:hover,.markdown-body a:active,.markdown-body a:hover{outline-width:0}.field-description a:not([href]),.markdown-body a:not([href]){color:inherit;text-decoration:none}.field-description strong,.markdown-body strong{font-weight:inherit;font-weight:bolder}.field-description h1,.markdown-body h1{font-size:2em;margin:.67em 0}.field-description hr,.markdown-body hr{background:rgba(0,0,0,0);border-bottom:1px solid var(--markdown-edge, #dfe2e5);border-width:0 0 1px;box-sizing:content-box;height:0;margin:15px 0;overflow:hidden}.field-description hr::before,.field-description hr::after,.markdown-body hr::before,.markdown-body hr::after{content:"";display:table}.field-description hr::after,.markdown-body hr::after{clear:both}.field-description input,.markdown-body input{font:inherit;margin:0}.field-description input,.markdown-body input{overflow:visible}.field-description [type=checkbox],.markdown-body [type=checkbox]{box-sizing:border-box;padding:0}.field-description *,.markdown-body *{box-sizing:border-box}.field-description input,.markdown-body input{font-family:inherit;font-size:inherit;line-height:inherit}.field-description strong,.markdown-body strong{font-weight:600}.field-description details summary,.markdown-body details summary{cursor:pointer}.field-description h1,.field-description h2,.field-description h3,.field-description h4,.field-description h5,.field-description h6,.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{color:var(--markdown-title);font-family:var(--markdown-title-font);font-size:var(--markdown-title-size);font-weight:var(--markdown-title-weight, 600);line-height:1.25;margin-bottom:var(--markdown-title-marginBottom, 1rem);margin-top:var(--markdown-title-marginTop, 1em)}.field-description h1,.markdown-body h1{font-size:1.75em;font-size:var(--markdown-title-size, 1.75em)}.field-description h2,.markdown-body h2{font-size:1.5em;font-size:var(--markdown-title-size, 1.5em)}.field-description h1,.markdown-body h1{font-weight:700;font-weight:var(--markdown-title-weight, 700)}.field-description h2,.markdown-body h2{font-weight:600;font-weight:var(--markdown-title-weight, 600)}.field-description h3,.field-description h4,.markdown-body h3,.markdown-body h4{font-weight:600;font-weight:var(--markdown-title-weight, 600)}.field-description h3,.markdown-body h3{font-size:1.25em;font-size:var(--markdown-title-size, 1.25em)}.field-description h4,.markdown-body h4{font-size:1em;font-size:var(--markdown-title-size, 1em)}.field-description h5,.field-description h6,.markdown-body h5,.markdown-body h6{font-weight:600;font-weight:var(--markdown-title-weight, 600)}.field-description h5,.markdown-body h5{font-size:.875em;font-size:var(--markdown-title-size, 0.875em)}.field-description h6,.markdown-body h6{color:var(--markdown-title, #6a737d);font-size:.85em;font-size:var(--markdown-title-size, 0.85em)}.field-description p,.field-description .p,.markdown-body p,.markdown-body .p{margin-bottom:10px;margin-top:0}.field-description blockquote,.markdown-body blockquote{margin:0}.field-description ol,.field-description ul,.markdown-body ol,.markdown-body ul{margin-bottom:0;margin-top:0;padding-left:0}.field-description ol ol,.field-description ul ol,.markdown-body ol ol,.markdown-body ul ol{list-style-type:lower-roman}.field-description ol ol ol,.field-description ol ul ol,.field-description ul ol ol,.field-description ul ul ol,.markdown-body ol ol ol,.markdown-body ol ul ol,.markdown-body ul ol ol,.markdown-body ul ul ol{list-style-type:lower-alpha}.field-description dd,.markdown-body dd{margin-left:0}.field-description input::-webkit-inner-spin-button,.field-description input::-webkit-outer-spin-button,.markdown-body input::-webkit-inner-spin-button,.markdown-body input::-webkit-outer-spin-button{appearance:none;appearance:none;margin:0}.field-description>:first-child,.markdown-body>:first-child{margin-top:0 !important}.field-description>:last-child,.markdown-body>:last-child{margin-bottom:0 !important}.field-description blockquote,.field-description dl,.field-description ol,.field-description p,.field-description pre,.field-description table,.field-description ul,.markdown-body blockquote,.markdown-body dl,.markdown-body ol,.markdown-body p,.markdown-body pre,.markdown-body table,.markdown-body ul{margin-bottom:15px;margin-top:0}.field-description blockquote,.markdown-body blockquote{border-left:.25em solid #dfe2e5;color:#6a737d;display:block;padding:0 1em}.field-description blockquote>:first-child,.markdown-body blockquote>:first-child{margin-top:0}.field-description blockquote>:last-child,.markdown-body blockquote>:last-child{margin-bottom:0}.field-description ol,.field-description ul,.markdown-body ol,.markdown-body ul{padding-left:2em}.field-description ol ol,.field-description ol ul,.field-description ul ol,.field-description ul ul,.markdown-body ol ol,.markdown-body ol ul,.markdown-body ul ol,.markdown-body ul ul{margin-bottom:0;margin-top:0}.field-description li,.markdown-body li{clear:both;word-wrap:break-all}.field-description li>p,.markdown-body li>p{margin-top:1em}.field-description li+li,.markdown-body li+li{margin-top:.25em}.field-description dl,.markdown-body dl{padding:0}.field-description dl dt,.markdown-body dl dt{font-size:1em;font-style:italic;font-weight:600;margin-top:1em;padding:0}.field-description dl dd,.markdown-body dl dd{margin-bottom:1em;padding:0 1em}.field-description :checked+.radio-label,.markdown-body :checked+.radio-label{border-color:var(--project-color-primary);position:relative;z-index:1}.field-description .task-list-item,.markdown-body .task-list-item{list-style-type:none}.field-description .task-list-item+.task-list-item,.markdown-body .task-list-item+.task-list-item{margin-top:3px}.field-description .task-list-item input,.markdown-body .task-list-item input{margin:0 .2em .25em -1.6em;vertical-align:middle}.field-description p.blank-line,.markdown-body p.blank-line{height:1.5em}.field-description h5,.field-description h6,.markdown-body h5,.markdown-body h6{font-size:.9em}.field-description blockquote h1:last-child,.field-description blockquote h2:last-child,.markdown-body blockquote h1:last-child,.markdown-body blockquote h2:last-child{border-bottom:0}.field-description>*,.markdown-body>*{margin-bottom:15px !important;margin-top:15px}.field-description .task-list-item input,.markdown-body .task-list-item input{margin:0 .5em .25em -1.25em}.field-description a[href],.field-description a:not([href=""]),.markdown-body a[href],.markdown-body a:not([href=""]){text-decoration:underline}
package/dist/main.js CHANGED
@@ -13310,7 +13310,7 @@ const Accordion = ({ children, icon, iconColor, title }) => {
13310
13310
  const [isOpen, setIsOpen] = (0,external_amd_react_commonjs_react_commonjs2_react_root_React_umd_react_.useState)(false);
13311
13311
  return (external_amd_react_commonjs_react_commonjs2_react_root_React_umd_react_default().createElement("details", { className: "Accordion", onToggle: () => setIsOpen(!isOpen) },
13312
13312
  external_amd_react_commonjs_react_commonjs2_react_root_React_umd_react_default().createElement("summary", { className: "Accordion-title" },
13313
- external_amd_react_commonjs_react_commonjs2_react_root_React_umd_react_default().createElement("i", { className: `Accordion-toggleIcon${isOpen ? '_opened' : ''} <i class="fa fa-regular fa-chevron-right"></i>` }),
13313
+ external_amd_react_commonjs_react_commonjs2_react_root_React_umd_react_default().createElement("i", { className: `Accordion-toggleIcon${isOpen ? '_opened' : ''} fa fa-regular fa-chevron-right` }),
13314
13314
  icon && external_amd_react_commonjs_react_commonjs2_react_root_React_umd_react_default().createElement("i", { className: `Accordion-icon fa-duotone fa-solid ${icon}`, style: { color: `${iconColor}` } }),
13315
13315
  title),
13316
13316
  external_amd_react_commonjs_react_commonjs2_react_root_React_umd_react_default().createElement("div", { className: "Accordion-content" }, children)));
@@ -13534,16 +13534,16 @@ if (typeof window !== 'undefined') {
13534
13534
  }
13535
13535
  function CopyCode({ codeRef, rootClass = 'rdmd-code-copy', className = '' }) {
13536
13536
  const copyClass = `${rootClass}_copied`;
13537
- const button = (0,external_amd_react_commonjs_react_commonjs2_react_root_React_umd_react_.createRef)();
13537
+ const buttonRef = (0,external_amd_react_commonjs_react_commonjs2_react_root_React_umd_react_.createRef)();
13538
13538
  const copier = () => {
13539
13539
  const code = codeRef.current.textContent;
13540
13540
  if (copy_to_clipboard_default()(code)) {
13541
- const el = button.current;
13541
+ const el = buttonRef.current;
13542
13542
  el.classList.add(copyClass);
13543
13543
  setTimeout(() => el.classList.remove(copyClass), 1500);
13544
13544
  }
13545
13545
  };
13546
- return external_amd_react_commonjs_react_commonjs2_react_root_React_umd_react_default().createElement("button", { ref: button, "aria-label": "Copy Code", className: `${rootClass} ${className}`, onClick: copier });
13546
+ return external_amd_react_commonjs_react_commonjs2_react_root_React_umd_react_default().createElement("button", { ref: buttonRef, "aria-label": "Copy Code", className: `${rootClass} ${className}`, onClick: copier });
13547
13547
  }
13548
13548
  const Code = (props) => {
13549
13549
  var _a;
@@ -13764,7 +13764,7 @@ const Image = (Props) => {
13764
13764
  return;
13765
13765
  setLightbox(!lightbox);
13766
13766
  };
13767
- if (caption) {
13767
+ if (children || caption) {
13768
13768
  return (external_amd_react_commonjs_react_commonjs2_react_root_React_umd_react_.createElement("figure", null,
13769
13769
  external_amd_react_commonjs_react_commonjs2_react_root_React_umd_react_.createElement("span", { "aria-label": alt, className: `img lightbox ${lightbox ? 'open' : 'closed'}`, onClick: toggle, onKeyDown: handleKeyDown, role: 'button', tabIndex: 0 },
13770
13770
  external_amd_react_commonjs_react_commonjs2_react_root_React_umd_react_.createElement("span", { className: "lightbox-inner" },
@@ -47789,11 +47789,11 @@ const calloutTransformer = () => {
47789
47789
 
47790
47790
 
47791
47791
  const isCode = (node) => (node === null || node === void 0 ? void 0 : node.type) === 'code';
47792
- const codeTabsTransformer = () => (tree) => {
47792
+ const codeTabsTransformer = ({ copyButtons } = {}) => (tree) => {
47793
47793
  visit(tree, 'code', (node) => {
47794
47794
  const { lang, meta, value } = node;
47795
47795
  node.data = {
47796
- hProperties: { lang, meta, value },
47796
+ hProperties: { lang, meta, value, copyButtons },
47797
47797
  };
47798
47798
  });
47799
47799
  visit(tree, 'code', (node, index, parent) => {
@@ -65530,7 +65530,14 @@ const compatibilityTransfomer = () => tree => {
65530
65530
 
65531
65531
 
65532
65532
 
65533
- /* harmony default export */ const transform = ([callouts, code_tabs, transform_embeds, transform_images, gemoji_]);
65533
+ const defaultTransforms = {
65534
+ calloutTransformer: callouts,
65535
+ codeTabsTransformer: code_tabs,
65536
+ embedTransformer: transform_embeds,
65537
+ imageTransformer: transform_images,
65538
+ gemojiTransformer: gemoji_,
65539
+ };
65540
+ /* harmony default export */ const transform = (Object.values(defaultTransforms));
65534
65541
 
65535
65542
  ;// CONCATENATED MODULE: ./node_modules/rehype-slug/node_modules/github-slugger/regex.js
65536
65543
  // This module is generated by `script/`.
@@ -78190,11 +78197,17 @@ var compile_rest = (undefined && undefined.__rest) || function (s, e) {
78190
78197
 
78191
78198
 
78192
78199
 
78193
- const compile_remarkPlugins = [remarkFrontmatter, remarkGfm, ...transform, transform_variables];
78200
+ const { codeTabsTransformer: compile_codeTabsTransformer } = defaultTransforms, transforms = compile_rest(defaultTransforms, ["codeTabsTransformer"]);
78194
78201
  const compile_compile = (text, _a = {}) => {
78195
- var { components } = _a, opts = compile_rest(_a, ["components"]);
78202
+ var { components, copyButtons } = _a, opts = compile_rest(_a, ["components", "copyButtons"]);
78196
78203
  try {
78197
- const vfile = compileSync(text, Object.assign({ outputFormat: 'function-body', providerImportSource: '#', remarkPlugins: compile_remarkPlugins, rehypePlugins: [...rehypePlugins, [rehypeToc, { components }]] }, opts));
78204
+ const vfile = compileSync(text, Object.assign({ outputFormat: 'function-body', providerImportSource: '#', remarkPlugins: [
78205
+ remarkFrontmatter,
78206
+ remarkGfm,
78207
+ ...Object.values(transforms),
78208
+ [compile_codeTabsTransformer, { copyButtons }],
78209
+ transform_variables,
78210
+ ], rehypePlugins: [...rehypePlugins, [rehypeToc, { components }]] }, opts));
78198
78211
  return String(vfile).replace(/await import\(_resolveDynamicMdxSpecifier\(('react'|"react")\)\)/, 'arguments[0].imports.React');
78199
78212
  }
78200
78213
  catch (error) {
@@ -93976,7 +93989,16 @@ const compatibility = (node) => {
93976
93989
  case NodeTypes.reusableContent:
93977
93990
  return `<${node.tag} />`;
93978
93991
  case 'html':
93979
- return compatibility_html(node);
93992
+ // @note: We can't do anything about inline spans. remark only parses the
93993
+ // tags as html, so we can't tell where the html starts or stops. But, we
93994
+ // can still fix void nodes and comments.
93995
+ //
93996
+ // @ts-expect-error
93997
+ return node.block ||
93998
+ node.value.match(/<!--.*-->/s) ||
93999
+ node.value.match(/<(area|base|br|col|embed|hr|img|input|link|meta|param|source|track|wbr)\b/)
94000
+ ? compatibility_html(node)
94001
+ : node.value;
93980
94002
  case 'escape':
93981
94003
  return `\\${node.value}`;
93982
94004
  case 'figure':
package/dist/main.node.js CHANGED
@@ -7857,7 +7857,7 @@ const Accordion = ({ children, icon, iconColor, title }) => {
7857
7857
  const [isOpen, setIsOpen] = (0,external_amd_react_commonjs_react_commonjs2_react_root_React_umd_react_.useState)(false);
7858
7858
  return (external_amd_react_commonjs_react_commonjs2_react_root_React_umd_react_default().createElement("details", { className: "Accordion", onToggle: () => setIsOpen(!isOpen) },
7859
7859
  external_amd_react_commonjs_react_commonjs2_react_root_React_umd_react_default().createElement("summary", { className: "Accordion-title" },
7860
- external_amd_react_commonjs_react_commonjs2_react_root_React_umd_react_default().createElement("i", { className: `Accordion-toggleIcon${isOpen ? '_opened' : ''} <i class="fa fa-regular fa-chevron-right"></i>` }),
7860
+ external_amd_react_commonjs_react_commonjs2_react_root_React_umd_react_default().createElement("i", { className: `Accordion-toggleIcon${isOpen ? '_opened' : ''} fa fa-regular fa-chevron-right` }),
7861
7861
  icon && external_amd_react_commonjs_react_commonjs2_react_root_React_umd_react_default().createElement("i", { className: `Accordion-icon fa-duotone fa-solid ${icon}`, style: { color: `${iconColor}` } }),
7862
7862
  title),
7863
7863
  external_amd_react_commonjs_react_commonjs2_react_root_React_umd_react_default().createElement("div", { className: "Accordion-content" }, children)));
@@ -8014,16 +8014,16 @@ if (typeof window !== 'undefined') {
8014
8014
  }
8015
8015
  function CopyCode({ codeRef, rootClass = 'rdmd-code-copy', className = '' }) {
8016
8016
  const copyClass = `${rootClass}_copied`;
8017
- const button = (0,external_amd_react_commonjs_react_commonjs2_react_root_React_umd_react_.createRef)();
8017
+ const buttonRef = (0,external_amd_react_commonjs_react_commonjs2_react_root_React_umd_react_.createRef)();
8018
8018
  const copier = () => {
8019
8019
  const code = codeRef.current.textContent;
8020
8020
  if (copy_to_clipboard_default()(code)) {
8021
- const el = button.current;
8021
+ const el = buttonRef.current;
8022
8022
  el.classList.add(copyClass);
8023
8023
  setTimeout(() => el.classList.remove(copyClass), 1500);
8024
8024
  }
8025
8025
  };
8026
- return external_amd_react_commonjs_react_commonjs2_react_root_React_umd_react_default().createElement("button", { ref: button, "aria-label": "Copy Code", className: `${rootClass} ${className}`, onClick: copier });
8026
+ return external_amd_react_commonjs_react_commonjs2_react_root_React_umd_react_default().createElement("button", { ref: buttonRef, "aria-label": "Copy Code", className: `${rootClass} ${className}`, onClick: copier });
8027
8027
  }
8028
8028
  const Code = (props) => {
8029
8029
  var _a;
@@ -13188,7 +13188,7 @@ const Image = (Props) => {
13188
13188
  return;
13189
13189
  setLightbox(!lightbox);
13190
13190
  };
13191
- if (caption) {
13191
+ if (children || caption) {
13192
13192
  return (external_amd_react_commonjs_react_commonjs2_react_root_React_umd_react_.createElement("figure", null,
13193
13193
  external_amd_react_commonjs_react_commonjs2_react_root_React_umd_react_.createElement("span", { "aria-label": alt, className: `img lightbox ${lightbox ? 'open' : 'closed'}`, onClick: toggle, onKeyDown: handleKeyDown, role: 'button', tabIndex: 0 },
13194
13194
  external_amd_react_commonjs_react_commonjs2_react_root_React_umd_react_.createElement("span", { className: "lightbox-inner" },
@@ -48776,11 +48776,11 @@ const calloutTransformer = () => {
48776
48776
 
48777
48777
 
48778
48778
  const isCode = (node) => (node === null || node === void 0 ? void 0 : node.type) === 'code';
48779
- const codeTabsTransformer = () => (tree) => {
48779
+ const codeTabsTransformer = ({ copyButtons } = {}) => (tree) => {
48780
48780
  visit(tree, 'code', (node) => {
48781
48781
  const { lang, meta, value } = node;
48782
48782
  node.data = {
48783
- hProperties: { lang, meta, value },
48783
+ hProperties: { lang, meta, value, copyButtons },
48784
48784
  };
48785
48785
  });
48786
48786
  visit(tree, 'code', (node, index, parent) => {
@@ -66517,7 +66517,14 @@ const compatibilityTransfomer = () => tree => {
66517
66517
 
66518
66518
 
66519
66519
 
66520
- /* harmony default export */ const transform = ([callouts, code_tabs, transform_embeds, transform_images, gemoji_]);
66520
+ const defaultTransforms = {
66521
+ calloutTransformer: callouts,
66522
+ codeTabsTransformer: code_tabs,
66523
+ embedTransformer: transform_embeds,
66524
+ imageTransformer: transform_images,
66525
+ gemojiTransformer: gemoji_,
66526
+ };
66527
+ /* harmony default export */ const transform = (Object.values(defaultTransforms));
66521
66528
 
66522
66529
  ;// CONCATENATED MODULE: ./node_modules/rehype-slug/node_modules/github-slugger/regex.js
66523
66530
  // This module is generated by `script/`.
@@ -79177,11 +79184,17 @@ var compile_rest = (undefined && undefined.__rest) || function (s, e) {
79177
79184
 
79178
79185
 
79179
79186
 
79180
- const compile_remarkPlugins = [remarkFrontmatter, remarkGfm, ...transform, transform_variables];
79187
+ const { codeTabsTransformer: compile_codeTabsTransformer } = defaultTransforms, transforms = compile_rest(defaultTransforms, ["codeTabsTransformer"]);
79181
79188
  const compile_compile = (text, _a = {}) => {
79182
- var { components } = _a, opts = compile_rest(_a, ["components"]);
79189
+ var { components, copyButtons } = _a, opts = compile_rest(_a, ["components", "copyButtons"]);
79183
79190
  try {
79184
- const vfile = compileSync(text, Object.assign({ outputFormat: 'function-body', providerImportSource: '#', remarkPlugins: compile_remarkPlugins, rehypePlugins: [...rehypePlugins, [rehypeToc, { components }]] }, opts));
79191
+ const vfile = compileSync(text, Object.assign({ outputFormat: 'function-body', providerImportSource: '#', remarkPlugins: [
79192
+ remarkFrontmatter,
79193
+ remarkGfm,
79194
+ ...Object.values(transforms),
79195
+ [compile_codeTabsTransformer, { copyButtons }],
79196
+ transform_variables,
79197
+ ], rehypePlugins: [...rehypePlugins, [rehypeToc, { components }]] }, opts));
79185
79198
  return String(vfile).replace(/await import\(_resolveDynamicMdxSpecifier\(('react'|"react")\)\)/, 'arguments[0].imports.React');
79186
79199
  }
79187
79200
  catch (error) {
@@ -94963,7 +94976,16 @@ const compatibility = (node) => {
94963
94976
  case NodeTypes.reusableContent:
94964
94977
  return `<${node.tag} />`;
94965
94978
  case 'html':
94966
- return compatibility_html(node);
94979
+ // @note: We can't do anything about inline spans. remark only parses the
94980
+ // tags as html, so we can't tell where the html starts or stops. But, we
94981
+ // can still fix void nodes and comments.
94982
+ //
94983
+ // @ts-expect-error
94984
+ return node.block ||
94985
+ node.value.match(/<!--.*-->/s) ||
94986
+ node.value.match(/<(area|base|br|col|embed|hr|img|input|link|meta|param|source|track|wbr)\b/)
94987
+ ? compatibility_html(node)
94988
+ : node.value;
94967
94989
  case 'escape':
94968
94990
  return `\\${node.value}`;
94969
94991
  case 'figure':
@@ -1,3 +1,5 @@
1
1
  import { Node } from 'mdast';
2
- declare const codeTabsTransformer: () => (tree: Node) => Node;
2
+ declare const codeTabsTransformer: ({ copyButtons }?: {
3
+ copyButtons?: boolean;
4
+ }) => (tree: Node) => Node;
3
5
  export default codeTabsTransformer;
@@ -6,5 +6,16 @@ import variablesTransformer from './variables';
6
6
  import tablesToJsx from './tables-to-jsx';
7
7
  import compatabilityTransfomer from './compatability';
8
8
  export { compatabilityTransfomer, divTransformer, readmeComponentsTransformer, readmeToMdx, injectComponents, variablesTransformer, tablesToJsx, };
9
- declare const _default: (() => (tree: any) => void)[];
9
+ export declare const defaultTransforms: {
10
+ calloutTransformer: () => (tree: any) => void;
11
+ codeTabsTransformer: ({ copyButtons }?: {
12
+ copyButtons?: boolean;
13
+ }) => (tree: import("mdast").Node) => import("mdast").Node;
14
+ embedTransformer: () => (tree: import("mdast").Node) => void;
15
+ imageTransformer: () => (tree: import("mdast").Node) => import("mdast").Node;
16
+ gemojiTransformer: () => (tree: import("mdast").Root) => import("mdast").Root;
17
+ };
18
+ declare const _default: ((() => (tree: any) => void) | (({ copyButtons }?: {
19
+ copyButtons?: boolean;
20
+ }) => (tree: import("mdast").Node) => import("mdast").Node) | (() => (tree: import("mdast").Node) => void) | (() => (tree: import("mdast").Node) => import("mdast").Node) | (() => (tree: import("mdast").Root) => import("mdast").Root))[];
10
21
  export default _default;
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@readme/markdown",
3
3
  "description": "ReadMe's React-based Markdown parser",
4
4
  "author": "Rafe Goldberg <rafe@readme.io>",
5
- "version": "7.6.5",
5
+ "version": "7.6.7",
6
6
  "main": "dist/main.node.js",
7
7
  "types": "dist/index.d.ts",
8
8
  "browser": "dist/main.js",