diff --git a/.eslintignore b/.eslintignore
index 53c37a1..5a6a90e 100644
--- a/.eslintignore
+++ b/.eslintignore
@@ -1 +1,2 @@
-dist
\ No newline at end of file
+dist
+.svelte-kit
\ No newline at end of file
diff --git a/.github/workflows/code-quality.yml b/.github/workflows/code-quality.yml
index c9c1775..842d40c 100644
--- a/.github/workflows/code-quality.yml
+++ b/.github/workflows/code-quality.yml
@@ -13,7 +13,7 @@ jobs:
- uses: actions/setup-node@v3
- uses: pnpm/action-setup@v2
with:
- version: 6
+ version: 8
- name: Install dependendencies
run: pnpm i
diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml
index eb4a0a7..731c3a1 100644
--- a/.github/workflows/gh-pages.yml
+++ b/.github/workflows/gh-pages.yml
@@ -17,7 +17,7 @@ jobs:
- uses: actions/setup-node@v3
- uses: pnpm/action-setup@v2
with:
- version: 6
+ version: 8
- name: Install dependencies
run: pnpm i
@@ -25,12 +25,12 @@ jobs:
- name: Build packages
run: pnpm run build
- - name: Build demo
+ - name: Build docs
run: pnpm run build
- working-directory: demo
+ working-directory: docs
- name: Deploy pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
- publish_dir: ./demo/build
+ publish_dir: ./docs/build
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index be810b1..84a2e6e 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -16,7 +16,7 @@ jobs:
- uses: actions/setup-node@v3
- uses: pnpm/action-setup@v2
with:
- version: 6
+ version: 8
- name: Install dependendencies
run: pnpm i
@@ -45,7 +45,7 @@ jobs:
- uses: actions/setup-node@v3
- uses: pnpm/action-setup@v2
with:
- version: 6
+ version: 8
- name: Install dependendencies
run: pnpm i
@@ -53,9 +53,6 @@ jobs:
- name: Build all packages
run: pnpm build
- - name: Verify the integrity of provenance attestations and registry signatures for installed dependencies
- run: npm audit signatures
-
- name: Release
run: npm run publish
env:
diff --git a/.prettierrc b/.prettierrc
index a77fdde..8bc6e86 100644
--- a/.prettierrc
+++ b/.prettierrc
@@ -3,7 +3,6 @@
"singleQuote": true,
"trailingComma": "none",
"printWidth": 100,
- "plugins": ["prettier-plugin-svelte"],
- "pluginSearchDirs": ["."],
+ "plugins": ["prettier-plugin-svelte", "prettier-plugin-tailwindcss"],
"overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }]
}
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 0c2fc2b..85e3f0d 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,7 +1,26 @@
{
- "cSpell.words": ["Carta", "cartamd", "Katex", "tikzjax", "tikz"],
+ "cSpell.words": [
+ "Carta",
+ "cartamd",
+ "coldark",
+ "dompurify",
+ "flexsearch",
+ "Gemoji",
+ "gruvbox",
+ "iconify",
+ "Katex",
+ "mdsvex",
+ "oldschool",
+ "rehype",
+ "shiki",
+ "shikijs",
+ "tikz",
+ "tikzjax",
+ "typeof"
+ ],
"typescript.tsdk": "node_modules\\typescript\\lib",
"[svelte]": {
"editor.defaultFormatter": "svelte.svelte-vscode"
- }
+ },
+ "css.customData": [".vscode/tailwind.json"]
}
diff --git a/.vscode/tailwind.json b/.vscode/tailwind.json
new file mode 100644
index 0000000..a45bccc
--- /dev/null
+++ b/.vscode/tailwind.json
@@ -0,0 +1,55 @@
+{
+ "version": 1.1,
+ "atDirectives": [
+ {
+ "name": "@tailwind",
+ "description": "Use the `@tailwind` directive to insert Tailwind's `base`, `components`, `utilities` and `screens` styles into your CSS.",
+ "references": [
+ {
+ "name": "Tailwind Documentation",
+ "url": "https://tailwindcss.com/docs/functions-and-directives#tailwind"
+ }
+ ]
+ },
+ {
+ "name": "@apply",
+ "description": "Use the `@apply` directive to inline any existing utility classes into your own custom CSS. This is useful when you find a common utility pattern in your HTML that youโd like to extract to a new component.",
+ "references": [
+ {
+ "name": "Tailwind Documentation",
+ "url": "https://tailwindcss.com/docs/functions-and-directives#apply"
+ }
+ ]
+ },
+ {
+ "name": "@responsive",
+ "description": "You can generate responsive variants of your own classes by wrapping their definitions in the `@responsive` directive:\n```css\n@responsive {\n .alert {\n background-color: #E53E3E;\n }\n}\n```\n",
+ "references": [
+ {
+ "name": "Tailwind Documentation",
+ "url": "https://tailwindcss.com/docs/functions-and-directives#responsive"
+ }
+ ]
+ },
+ {
+ "name": "@screen",
+ "description": "The `@screen` directive allows you to create media queries that reference your breakpoints by **name** instead of duplicating their values in your own CSS:\n```css\n@screen sm {\n /* ... */\n}\n```\nโฆgets transformed into this:\n```css\n@media (min-width: 640px) {\n /* ... */\n}\n```\n",
+ "references": [
+ {
+ "name": "Tailwind Documentation",
+ "url": "https://tailwindcss.com/docs/functions-and-directives#screen"
+ }
+ ]
+ },
+ {
+ "name": "@variants",
+ "description": "Generate `hover`, `focus`, `active` and other **variants** of your own utilities by wrapping their definitions in the `@variants` directive:\n```css\n@variants hover, focus {\n .btn-brand {\n background-color: #3182CE;\n }\n}\n```\n",
+ "references": [
+ {
+ "name": "Tailwind Documentation",
+ "url": "https://tailwindcss.com/docs/functions-and-directives#variants"
+ }
+ ]
+ }
+ ]
+}
diff --git a/README.md b/README.md
index 5be5154..38235d5 100644
--- a/README.md
+++ b/README.md
@@ -1,42 +1,88 @@
+
+
+[](https://beartocode.github.io/carta/)
+
+Carta
+Modern, lightweight, powerful Markdown Editor.
+
-
+# Introduction
-
+> [!NOTE]
+> Carta has recently been updated to `v4`, which features numerous major changes.
+>
+> Follow the [Migration Guide](http://beartocode.github.io/carta/migration) to update your project.
-Carta is a **lightweight**, **fast** and **extensible** Svelte Markdown editor and viewer, based on [Marked](https://github.com/markedjs/marked). Check out the [demo](http://beartocode.github.io/carta/) to see it in action.
-Differently from most editors, Carta includes neither ProseMirror nor CodeMirror, allowing for an extremely small bundle size and fast loading time.
+Carta is a **lightweight**, **fast** and **extensible** Svelte Markdown editor and viewer. It is powered by [unified](https://github.com/unifiedjs/unified), [remark](https://github.com/remarkjs/remark) and [rehype](https://github.com/rehypejs/rehype). Check out the [examples](http://beartocode.github.io/carta/examples) to see it in action.
+Differently from most editors, Carta does not include a code editor, but it is _just_ a textarea with syntax highlighting, shortcuts and more.
## Features
-- Keyboard **shortcuts** (extensible);
-- Toolbar (extensible);
-- Markdown syntax highlighting;
-- Scroll sync;
-- **SSR** compatible;
-- **Katex** support (plugin);
-- **Slash** commands (plugin);
-- **Emojis**, with included search (plugin);
-- **Tikz** support(plugin);
-- **Attachment** support(plugin);
-- Code blocks **syntax highlighting** (plugin).
+- ๐ Markdown syntax highlighting ([Shiki](https://shiki.style/));
+- ๐ ๏ธ Toolbar (extensible);
+- โจ๏ธ Keyboard **shortcuts** (extensible);
+- ๐ฆ Supports **[150+ plugins](https://github.com/remarkjs/remark/blob/main/doc/plugins.md#list-of-plugins)** thanks to remark;
+- ๐ Scroll sync;
+- โ
Accessibility friendly;
+- ๐ฅ๏ธ **SSR** compatible;
+- โ๏ธ **KaTeX** support (plugin);
+- ๐จ **Slash** commands (plugin);
+- ๐ **Emojis**, with included search (plugin);
+- โ๏ธ **TikZ** support (plugin);
+- ๐ **Attachment** support (plugin);
+- โ **Anchor** links in headings (plugin);
+- ๐ Code blocks **syntax highlighting** (plugin).
-## Getting started
+## Packages
-> **Warning**
+| Package | Status | Docs |
+| ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ---------------------------------------------------------------------------- |
+| [carta-md](https://www.npmjs.com/package/carta-md) |  | [/](https://beartocode.github.io/carta/introduction) |
+| [plugin-math](https://www.npmjs.com/package/@cartamd/plugin-math) |  | [/plugins/math](https://beartocode.github.io/carta/plugins/math) |
+| [plugin-code](https://www.npmjs.com/package/@cartamd/plugin-code) |  | [/plugins/code](https://beartocode.github.io/carta/plugins/code) |
+| [plugin-emoji](https://www.npmjs.com/package/@cartamd/plugin-emoji) |  | [/plugins/emoji](https://beartocode.github.io/carta/plugins/emoji) |
+| [plugin-slash](https://www.npmjs.com/package/@cartamd/plugin-slash) |  | [/plugins/slash](https://beartocode.github.io/carta/plugins/slash) |
+| [plugin-tikz](https://www.npmjs.com/package/@cartamd/plugin-tikz) |  | [/plugins/tikz](https://beartocode.github.io/carta/plugins/tikz) |
+| [plugin-attachment](https://www.npmjs.com/package/@cartamd/plugin-attachment) |  | [/plugins/attachment](https://beartocode.github.io/carta/plugins/attachment) |
+| [plugin-anchor](https://www.npmjs.com/package/@cartamd/plugin-anchor) |  | [/plugins/anchor](https://beartocode.github.io/carta/plugins/anchor) |
+
+## Community plugins
+
+| Plugin | Description |
+| ----------------------------------------------------------------------------- | ---------------------------------- |
+| [carta-plugin-video](https://github.com/maisonsmd/carta-plugin-video) | Render online videos |
+| [carta-plugin-imsize](https://github.com/maisonsmd/carta-plugin-imsize) | Render images in specific sizes |
+| [carta-plugin-subscript](https://github.com/maisonsmd/carta-plugin-subscript) | Render subscripts and superscripts |
+| [carta-plugin-ins-del](https://github.com/maisonsmd/carta-plugin-ins-del) | `` and `` tags support |
+
+# Getting started
+
+> [!WARNING]
> Sanitization is not dealt with by Carta. You need to provide a `sanitizer` in the options.
> Common sanitizers are [isomorphic-dompurify](https://www.npmjs.com/package/isomorphic-dompurify) (suggested) and [sanitize-html](https://www.npmjs.com/package/sanitize-html).
+> Checkout the documentation for an example.
-### Installation
+## Installation
Core package:
@@ -50,15 +96,13 @@ Plugins:
npm i @cartamd/plugin-name
```
-### Basic configuration
+## Basic configuration
```svelte
-
+
```
-Editor component exported properties:
+# Documentation
-| Name | Type | Description |
-| ---------------- | ----------------------------- | ----------------------------------------- |
-| `carta` | `Carta` | Carta Editor |
-| `theme` | `string` | For custom css themes, see below for more |
-| `value` | `string` | Markdown input |
-| `placeholder` | `string` | Placeholder text for textarea |
-| `mode` | `'tabs' \| 'split' \| 'auto'` | Tabs settings |
-| `disableToolbar` | `boolean` | Option to disable the toolbar |
+For the full documentation, examples, guides and more checkout the [website](https://beartocode.github.io/carta/).
-### Plugins
+- [Introduction](https://beartocode.github.io/carta/introduction)
+- [Examples](https://beartocode.github.io/carta/examples)
+- [Getting Started](https://beartocode.github.io/carta/getting-started)
+- [Editing Styles](https://beartocode.github.io/carta/editing-styles)
+- Plugins:
+ - [Math](https://beartocode.github.io/carta/plugins/math)
+ - [Code](https://beartocode.github.io/carta/plugins/code)
+ - [Emoji](https://beartocode.github.io/carta/plugins/emoji)
+ - [Slash](https://beartocode.github.io/carta/plugins/slash)
+ - [TikZ](https://beartocode.github.io/carta/plugins/tikz)
+ - [Attachment](https://beartocode.github.io/carta/plugins/attachment)
+ - [Anchor](https://beartocode.github.io/carta/plugins/anchor)
+- API:
+ - [Utilities](https://beartocode.github.io/carta/api/utilities)
+ - [Core](https://beartocode.github.io/carta/api/core)
+ - [Extension](https://beartocode.github.io/carta/api/extension)
-Each plugin's _readme_ includes a guide on its use.
-
-| Name | Description |
-| ----------------------------------------------------------------------------------------------- | --------------------------------------- |
-| [plugin-math](https://github.com/BearToCode/carta/tree/master/packages/plugin-math) | Katex support |
-| [plugin-slash](https://github.com/BearToCode/carta/tree/master/packages/plugin-slash) | Slash commands support |
-| [plugin-emoji](https://github.com/BearToCode/carta/tree/master/packages/plugin-emoji) | Emojis support, including inline search |
-| [plugin-code](https://github.com/BearToCode/carta/tree/master/packages/plugin-code) | Code blocks syntax highlighting |
-| [plugin-tikz](https://github.com/BearToCode/carta/tree/master/packages/plugin-tikz) | TikZ support using TikZJax |
-| [plugin-attachment](https://github.com/BearToCode/carta/tree/master/packages/plugin-attachment) | Attachments support |
-
-## Themes customization
-
-By using the `theme` property in `CartaEditor` and `CartaPreview` you can change their classes to `carta-editor__{theme}` and `carta-viewer__{theme}`.
-
-Check out the [default theme](https://github.com/BearToCode/carta/blob/master/packages/carta-md/src/lib/default.css) to customize it.
-
-If you are using a plugin, look at its _readme_ for its customization.
-
-Markdown highlighting is done using **Speed Highlight JS**, [here](https://github.com/speed-highlight/core/tree/main/src/themes) you can find more themes.
-
-You can find complete Markdown stylesheet online. For example [github-markdown-css](https://github.com/sindresorhus/github-markdown-css)(used in the demo), or [tailwind-typography](https://tailwindcss.com/docs/typography-plugin).
-
-## Extensibility
-
-### Options
-
-Carta options:
-
-| Name | Type | Description |
-| ------------------ | ------------------------------ | ----------------------------------------------- |
-| `extensions` | `CartaExtension[]` | Editor/viewer extensions |
-| `rendererDebounce` | `number` | Renderer debouncing timeout, in ms (def. 300ms) |
-| `disableShortcuts` | `DefaultShortcutId[] \| true` | Remove default shortcuts by ids |
-| `disableIcons` | `DefaultIconId[] \| true` | Remove default icons by ids |
-| `disablePrefixes` | `DefaultPrefixId[] \| true` | Remove default prefixes by ids |
-| `historyOptions` | `Partial` | History (Undo/Redo) options |
-| `sanitizer` | `(html: string) => string` | HTML sanitizer |
-
-You can easily extend Carta by creating custom plugins. Here are all the `CartaExtension` properties:
-
-| Name | Type | Description |
-| ------------------ | -------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `markedExtensions` | `marked.MarkedExtension[]` | Marked extensions, more on that [here](https://marked.js.org/using_advanced) |
-| `shortcuts` | `KeyboardShortcut[]` | Additional keyboard shortcuts |
-| `icons` | `CartaIcon[]` | Additional icons |
-| `prefixes` | `Prefix[]` | Additional prefixes |
-| `listeners` | `CartaListener[]` | Textarea event listeners |
-| `components` | `CartaExtensionComponents` | Additional components, that will be put after the editor. All components are given a `carta: Carta`. prop The editor has a `relative` position, so you can position elements absolutely |
-| `highlightRules` | `HighlightRule[]` | Custom markdown highlight rules. See [Speed-Highlight Wiki](https://github.com/speed-highlight/core/wiki/Create-or-suggest-new-languages). |
-| `onLoad` | `(data: { carta:Carta, ... }) => void` | Use this callback to execute code when one Carta instance loads the extension. |
-
-If you created a plugin and want to share it, you can open an _issue_ and we will consider sponsoring it on this guide.
-
-## Contributions
+# Contributing & Development
Every contribution is well accepted. If you have a feature request you can open a new issue.
@@ -159,3 +158,12 @@ npm run commit
# or, if you have commitizen installed globally
git cz
```
+
+### Running docs
+
+If you want to preview the docs:
+
+```
+cd docs
+npm run dev
+```
diff --git a/demo/.npmrc b/demo/.npmrc
deleted file mode 100644
index 0c05da4..0000000
--- a/demo/.npmrc
+++ /dev/null
@@ -1,2 +0,0 @@
-engine-strict=true
-resolution-mode=highest
diff --git a/demo/src/routes/+page.svelte b/demo/src/routes/+page.svelte
deleted file mode 100644
index 879c4ad..0000000
--- a/demo/src/routes/+page.svelte
+++ /dev/null
@@ -1,144 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/demo/src/routes/+page.ts b/demo/src/routes/+page.ts
deleted file mode 100644
index 189f71e..0000000
--- a/demo/src/routes/+page.ts
+++ /dev/null
@@ -1 +0,0 @@
-export const prerender = true;
diff --git a/demo/src/routes/placeholder.ts b/demo/src/routes/placeholder.ts
deleted file mode 100644
index 3731509..0000000
--- a/demo/src/routes/placeholder.ts
+++ /dev/null
@@ -1,122 +0,0 @@
-export const placeholderText = `# Carta Demo
-
-Far out in the uncharted backwaters of the unfashionable end of the western spiral arm of the **Galaxy** lies a small unregarded yellow sun.
-Orbiting this at a distance of roughly _ninety-two million miles_ is an utterly insignificant little blue green planet :earth_africa: whose ape-descended life forms are so amazingly primitive that they still think digital watches are a pretty neat idea.
-
-\`\`\`tikz
-\\usepackage{pgfplots}
-\\pgfplotsset{compat=1.16}
-
-\\pgfplotsset{width=7cm,compat=1.8}
-\\begin{document}
-\\begin{tikzpicture}[thick,scale=1.2, every node/.style={scale=1.2}]
- \\begin{axis}
- \\addplot3[
- surf,
- colormap/viridis,
- samples=20,
- domain=0:2*pi,
- y domain=0:2*pi,
- z buffer=sort
- ]
- ( {(2+cos(deg(x)))*cos(deg(y+pi/2))},
- {(2+cos(deg(x)))*sin(deg(y+pi/2))},
- {sin(deg(x))}
- );
- \\end{axis}
-\\end{tikzpicture}
-\\end{document}
-\`\`\`
-
-# Basic Markdown
-
-You can have different types of text: **bold**, _italic_, \`code\` and ~~strikethrough~~. This is a [link](http://beartocode.github.io/carta/) to the page you are currently viewing.
-
-Here is a quote:
-
-> Time is an illusion. Lunchtime doubly so.
-
-And then some lists:
-
-- This is a bulleted list
-- Which does not have an order
-- but only some dots
-
-1. And then that's one with numbers
-2. That just keep going
-3. and going
-
-- [ ] And finally this is a task list
-- [ ] Where you can keep track of to-dos
-- [x] by putting an _x_ inside the brackets
-
-You can also create tables, like so:
-
-| Item | Price | Origin |
-| ------- | ----- | ------ |
-| :apple: | 2.1 | Italy |
-| :banana:| 42 | Brazil |
-| :lemon: | 18 | Spain |
-
-# Official Plugins
-
-## \`plugin-code\`
-
-This plugin adds support for **syntax highlighting** on your code blocks:
-
-\`\`\`rs
-fn visit_mars() {
- let spaceship = get_spaceship();
-
- spaceship.liftoff();
- spaceship.head_to(Planet::Mars);
- thread::sleep(Time::Month(6));
- spaceship.land();
-}
-\`\`\`
-
-## \`plugin-math\`
-
-
-With this plugin you can write beautiful Katex expressions, both _inline_ $\\underline{v}=A-\\lambda I_d$, and as _block_ equations:
-
-$$
-{\\displaystyle {\\boldsymbol {\\sigma }}=\\zeta (\\nabla \\cdot \\mathbf {u} )\\mathbf {I} +\\mu \\left[\\nabla \\mathbf {u} +(\\nabla \\mathbf {u} )^{\\mathrm {T} }-{\\tfrac {2}{3}}(\\nabla \\cdot \\mathbf {u} )\\mathbf {I} \\right]}
-$$
-
-## \`plugin-emoji\`
-
-Adds support for **emojis**, as well as an inline emoji search, that appears after typing a colon. :smile_cat:
-
-Try typing an icon to see the inline search. :alien:
-
-## \`plugin-slash\`
-
-Use a **slash** / to use commands while writing markdown. You can add your custom commands too. Also includes a inline command search.
-
-## \`plugin-tikz\`
-
-
-\`\`\`tikz
-\\usepackage{pgfplots}
-\\pgfplotsset{compat=1.16}
-\\pgfplotsset{width=7cm}
-
-\\begin{document}
-\\begin{tikzpicture}[thick,scale=1.2, every node/.style={scale=1.2}]
- \\begin{axis}[domain=-1:1,y domain=-1:1]
- \\addplot3[
- surf,
- colormap/viridis,
- samples = 18
- ]
- {x*y*exp(x+2*y-9*x^2-9*y^2)};
- \\end{axis}
-\\end{tikzpicture}
-\\end{document}
-\`\`\`
-
-Adds support for **TikZ**, thanks to [TikZJax](https://tikzjax.com/).
-
-
-`;
diff --git a/demo/static/.nojekyll b/demo/static/.nojekyll
deleted file mode 100644
index e69de29..0000000
diff --git a/demo/static/github-light-theme.css b/demo/static/github-light-theme.css
deleted file mode 100644
index 45f073b..0000000
--- a/demo/static/github-light-theme.css
+++ /dev/null
@@ -1,1007 +0,0 @@
-.markdown-body {
- -ms-text-size-adjust: 100%;
- -webkit-text-size-adjust: 100%;
- margin: 0;
- color: #24292f;
- background-color: #ffffff;
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Noto Sans', Helvetica, Arial,
- sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji';
- font-size: 16px;
- line-height: 1.5;
- word-wrap: break-word;
-}
-
-.markdown-body .octicon {
- display: inline-block;
- fill: currentColor;
- vertical-align: text-bottom;
-}
-
-.markdown-body h1:hover .anchor .octicon-link:before,
-.markdown-body h2:hover .anchor .octicon-link:before,
-.markdown-body h3:hover .anchor .octicon-link:before,
-.markdown-body h4:hover .anchor .octicon-link:before,
-.markdown-body h5:hover .anchor .octicon-link:before,
-.markdown-body h6:hover .anchor .octicon-link:before {
- width: 16px;
- height: 16px;
- content: ' ';
- display: inline-block;
- background-color: currentColor;
- -webkit-mask-image: url("data:image/svg+xml, ");
- mask-image: url("data:image/svg+xml, ");
-}
-
-.markdown-body details,
-.markdown-body figcaption,
-.markdown-body figure {
- display: block;
-}
-
-.markdown-body summary {
- display: list-item;
-}
-
-.markdown-body [hidden] {
- display: none !important;
-}
-
-.markdown-body a {
- background-color: transparent;
- color: #0969da;
- text-decoration: none;
-}
-
-.markdown-body abbr[title] {
- border-bottom: none;
- text-decoration: underline dotted;
-}
-
-.markdown-body b,
-.markdown-body strong {
- font-weight: 600;
-}
-
-.markdown-body dfn {
- font-style: italic;
-}
-
-.markdown-body h1 {
- margin: 0.67em 0;
- font-weight: 600;
- padding-bottom: 0.3em;
- font-size: 2em;
- border-bottom: 1px solid hsla(210, 18%, 87%, 1);
-}
-
-.markdown-body mark {
- background-color: #fff8c5;
- color: #24292f;
-}
-
-.markdown-body small {
- font-size: 90%;
-}
-
-.markdown-body sub,
-.markdown-body sup {
- font-size: 75%;
- line-height: 0;
- position: relative;
- vertical-align: baseline;
-}
-
-.markdown-body sub {
- bottom: -0.25em;
-}
-
-.markdown-body sup {
- top: -0.5em;
-}
-
-.markdown-body img {
- border-style: none;
- max-width: 100%;
- box-sizing: content-box;
- background-color: #ffffff;
-}
-
-.markdown-body code,
-.markdown-body kbd,
-.markdown-body pre,
-.markdown-body samp {
- font-family: monospace;
- font-size: 1em;
-}
-
-.markdown-body figure {
- margin: 1em 40px;
-}
-
-.markdown-body hr {
- box-sizing: content-box;
- overflow: hidden;
- background: transparent;
- border-bottom: 1px solid hsla(210, 18%, 87%, 1);
- height: 0.25em;
- padding: 0;
- margin: 24px 0;
- background-color: #d0d7de;
- border: 0;
-}
-
-.markdown-body input {
- font: inherit;
- margin: 0;
- overflow: visible;
- font-family: inherit;
- font-size: inherit;
- line-height: inherit;
-}
-
-.markdown-body [type='button'],
-.markdown-body [type='reset'],
-.markdown-body [type='submit'] {
- -webkit-appearance: button;
-}
-
-.markdown-body [type='checkbox'],
-.markdown-body [type='radio'] {
- box-sizing: border-box;
- padding: 0;
-}
-
-.markdown-body [type='number']::-webkit-inner-spin-button,
-.markdown-body [type='number']::-webkit-outer-spin-button {
- height: auto;
-}
-
-.markdown-body [type='search']::-webkit-search-cancel-button,
-.markdown-body [type='search']::-webkit-search-decoration {
- -webkit-appearance: none;
-}
-
-.markdown-body ::-webkit-input-placeholder {
- color: inherit;
- opacity: 0.54;
-}
-
-.markdown-body ::-webkit-file-upload-button {
- -webkit-appearance: button;
- font: inherit;
-}
-
-.markdown-body a:hover {
- text-decoration: underline;
-}
-
-.markdown-body ::placeholder {
- color: #6e7781;
- opacity: 1;
-}
-
-.markdown-body hr::before {
- display: table;
- content: '';
-}
-
-.markdown-body hr::after {
- display: table;
- clear: both;
- content: '';
-}
-
-.markdown-body table {
- border-spacing: 0;
- border-collapse: collapse;
- display: block;
- width: max-content;
- max-width: 100%;
- overflow: auto;
-}
-
-.markdown-body td,
-.markdown-body th {
- padding: 0;
-}
-
-.markdown-body details summary {
- cursor: pointer;
-}
-
-.markdown-body details:not([open]) > *:not(summary) {
- display: none !important;
-}
-
-.markdown-body a:focus,
-.markdown-body [role='button']:focus,
-.markdown-body input[type='radio']:focus,
-.markdown-body input[type='checkbox']:focus {
- outline: 2px solid #0969da;
- outline-offset: -2px;
- box-shadow: none;
-}
-
-.markdown-body a:focus:not(:focus-visible),
-.markdown-body [role='button']:focus:not(:focus-visible),
-.markdown-body input[type='radio']:focus:not(:focus-visible),
-.markdown-body input[type='checkbox']:focus:not(:focus-visible) {
- outline: solid 1px transparent;
-}
-
-.markdown-body a:focus-visible,
-.markdown-body [role='button']:focus-visible,
-.markdown-body input[type='radio']:focus-visible,
-.markdown-body input[type='checkbox']:focus-visible {
- outline: 2px solid #0969da;
- outline-offset: -2px;
- box-shadow: none;
-}
-
-.markdown-body a:not([class]):focus,
-.markdown-body a:not([class]):focus-visible,
-.markdown-body input[type='radio']:focus,
-.markdown-body input[type='radio']:focus-visible,
-.markdown-body input[type='checkbox']:focus,
-.markdown-body input[type='checkbox']:focus-visible {
- outline-offset: 0;
-}
-
-.markdown-body kbd {
- display: inline-block;
- padding: 3px 5px;
- font: 11px ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace;
- line-height: 10px;
- color: #24292f;
- vertical-align: middle;
- background-color: #f6f8fa;
- border: solid 1px rgba(175, 184, 193, 0.2);
- border-bottom-color: rgba(175, 184, 193, 0.2);
- border-radius: 6px;
- box-shadow: inset 0 -1px 0 rgba(175, 184, 193, 0.2);
-}
-
-.markdown-body h1,
-.markdown-body h2,
-.markdown-body h3,
-.markdown-body h4,
-.markdown-body h5,
-.markdown-body h6 {
- margin-top: 24px;
- margin-bottom: 16px;
- font-weight: 600;
- line-height: 1.25;
-}
-
-.markdown-body h2 {
- font-weight: 600;
- padding-bottom: 0.3em;
- font-size: 1.5em;
- border-bottom: 1px solid hsla(210, 18%, 87%, 1);
-}
-
-.markdown-body h3 {
- font-weight: 600;
- font-size: 1.25em;
-}
-
-.markdown-body h4 {
- font-weight: 600;
- font-size: 1em;
-}
-
-.markdown-body h5 {
- font-weight: 600;
- font-size: 0.875em;
-}
-
-.markdown-body h6 {
- font-weight: 600;
- font-size: 0.85em;
- color: #57606a;
-}
-
-.markdown-body p {
- margin-top: 0;
- margin-bottom: 10px;
-}
-
-.markdown-body blockquote {
- margin: 0;
- padding: 0 1em;
- color: #57606a;
- border-left: 0.25em solid #d0d7de;
-}
-
-.markdown-body ul,
-.markdown-body ol {
- margin-top: 0;
- margin-bottom: 0;
- padding-left: 2em;
-}
-
-.markdown-body ol ol,
-.markdown-body ul ol {
- list-style-type: lower-roman;
-}
-
-.markdown-body ul ul ol,
-.markdown-body ul ol ol,
-.markdown-body ol ul ol,
-.markdown-body ol ol ol {
- list-style-type: lower-alpha;
-}
-
-.markdown-body dd {
- margin-left: 0;
-}
-
-.markdown-body tt,
-.markdown-body code,
-.markdown-body samp {
- font-family: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace;
- font-size: 12px;
-}
-
-.markdown-body pre {
- margin-top: 0;
- margin-bottom: 0;
- font-family: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace;
- font-size: 12px;
- word-wrap: normal;
-}
-
-.markdown-body .octicon {
- display: inline-block;
- overflow: visible !important;
- vertical-align: text-bottom;
- fill: currentColor;
-}
-
-.markdown-body input::-webkit-outer-spin-button,
-.markdown-body input::-webkit-inner-spin-button {
- margin: 0;
- -webkit-appearance: none;
- appearance: none;
-}
-
-.markdown-body::before {
- display: table;
- content: '';
-}
-
-.markdown-body::after {
- display: table;
- clear: both;
- content: '';
-}
-
-.markdown-body > *:first-child {
- margin-top: 0 !important;
-}
-
-.markdown-body > *:last-child {
- margin-bottom: 0 !important;
-}
-
-.markdown-body a:not([href]) {
- color: inherit;
- text-decoration: none;
-}
-
-.markdown-body .absent {
- color: #cf222e;
-}
-
-.markdown-body .anchor {
- float: left;
- padding-right: 4px;
- margin-left: -20px;
- line-height: 1;
-}
-
-.markdown-body .anchor:focus {
- outline: none;
-}
-
-.markdown-body p,
-.markdown-body blockquote,
-.markdown-body ul,
-.markdown-body ol,
-.markdown-body dl,
-.markdown-body table,
-.markdown-body pre,
-.markdown-body details {
- margin-top: 0;
- margin-bottom: 16px;
-}
-
-.markdown-body blockquote > :first-child {
- margin-top: 0;
-}
-
-.markdown-body blockquote > :last-child {
- margin-bottom: 0;
-}
-
-.markdown-body h1 .octicon-link,
-.markdown-body h2 .octicon-link,
-.markdown-body h3 .octicon-link,
-.markdown-body h4 .octicon-link,
-.markdown-body h5 .octicon-link,
-.markdown-body h6 .octicon-link {
- color: #24292f;
- vertical-align: middle;
- visibility: hidden;
-}
-
-.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;
-}
-
-.markdown-body h1:hover .anchor .octicon-link,
-.markdown-body h2:hover .anchor .octicon-link,
-.markdown-body h3:hover .anchor .octicon-link,
-.markdown-body h4:hover .anchor .octicon-link,
-.markdown-body h5:hover .anchor .octicon-link,
-.markdown-body h6:hover .anchor .octicon-link {
- visibility: visible;
-}
-
-.markdown-body h1 tt,
-.markdown-body h1 code,
-.markdown-body h2 tt,
-.markdown-body h2 code,
-.markdown-body h3 tt,
-.markdown-body h3 code,
-.markdown-body h4 tt,
-.markdown-body h4 code,
-.markdown-body h5 tt,
-.markdown-body h5 code,
-.markdown-body h6 tt,
-.markdown-body h6 code {
- padding: 0 0.2em;
- font-size: inherit;
-}
-
-.markdown-body summary h1,
-.markdown-body summary h2,
-.markdown-body summary h3,
-.markdown-body summary h4,
-.markdown-body summary h5,
-.markdown-body summary h6 {
- display: inline-block;
-}
-
-.markdown-body summary h1 .anchor,
-.markdown-body summary h2 .anchor,
-.markdown-body summary h3 .anchor,
-.markdown-body summary h4 .anchor,
-.markdown-body summary h5 .anchor,
-.markdown-body summary h6 .anchor {
- margin-left: -40px;
-}
-
-.markdown-body summary h1,
-.markdown-body summary h2 {
- padding-bottom: 0;
- border-bottom: 0;
-}
-
-.markdown-body ul.no-list,
-.markdown-body ol.no-list {
- padding: 0;
- list-style-type: none;
-}
-
-.markdown-body ol[type='a'] {
- list-style-type: lower-alpha;
-}
-
-.markdown-body ol[type='A'] {
- list-style-type: upper-alpha;
-}
-
-.markdown-body ol[type='i'] {
- list-style-type: lower-roman;
-}
-
-.markdown-body ol[type='I'] {
- list-style-type: upper-roman;
-}
-
-.markdown-body ol[type='1'] {
- list-style-type: decimal;
-}
-
-.markdown-body div > ol:not([type]) {
- list-style-type: decimal;
-}
-
-.markdown-body ul ul,
-.markdown-body ul ol,
-.markdown-body ol ol,
-.markdown-body ol ul {
- margin-top: 0;
- margin-bottom: 0;
-}
-
-.markdown-body li > p {
- margin-top: 16px;
-}
-
-.markdown-body li + li {
- margin-top: 0.25em;
-}
-
-.markdown-body dl {
- padding: 0;
-}
-
-.markdown-body dl dt {
- padding: 0;
- margin-top: 16px;
- font-size: 1em;
- font-style: italic;
- font-weight: 600;
-}
-
-.markdown-body dl dd {
- padding: 0 16px;
- margin-bottom: 16px;
-}
-
-.markdown-body table th {
- font-weight: 600;
-}
-
-.markdown-body table th,
-.markdown-body table td {
- padding: 6px 13px;
- border: 1px solid #d0d7de;
-}
-
-.markdown-body table tr {
- background-color: #ffffff;
- border-top: 1px solid hsla(210, 18%, 87%, 1);
-}
-
-.markdown-body table tr:nth-child(2n) {
- background-color: #f6f8fa;
-}
-
-.markdown-body table img {
- background-color: transparent;
-}
-
-.markdown-body img[align='right'] {
- padding-left: 20px;
-}
-
-.markdown-body img[align='left'] {
- padding-right: 20px;
-}
-
-.markdown-body .emoji {
- max-width: none;
- vertical-align: text-top;
- background-color: transparent;
-}
-
-.markdown-body span.frame {
- display: block;
- overflow: hidden;
-}
-
-.markdown-body span.frame > span {
- display: block;
- float: left;
- width: auto;
- padding: 7px;
- margin: 13px 0 0;
- overflow: hidden;
- border: 1px solid #d0d7de;
-}
-
-.markdown-body span.frame span img {
- display: block;
- float: left;
-}
-
-.markdown-body span.frame span span {
- display: block;
- padding: 5px 0 0;
- clear: both;
- color: #24292f;
-}
-
-.markdown-body span.align-center {
- display: block;
- overflow: hidden;
- clear: both;
-}
-
-.markdown-body span.align-center > span {
- display: block;
- margin: 13px auto 0;
- overflow: hidden;
- text-align: center;
-}
-
-.markdown-body span.align-center span img {
- margin: 0 auto;
- text-align: center;
-}
-
-.markdown-body span.align-right {
- display: block;
- overflow: hidden;
- clear: both;
-}
-
-.markdown-body span.align-right > span {
- display: block;
- margin: 13px 0 0;
- overflow: hidden;
- text-align: right;
-}
-
-.markdown-body span.align-right span img {
- margin: 0;
- text-align: right;
-}
-
-.markdown-body span.float-left {
- display: block;
- float: left;
- margin-right: 13px;
- overflow: hidden;
-}
-
-.markdown-body span.float-left span {
- margin: 13px 0 0;
-}
-
-.markdown-body span.float-right {
- display: block;
- float: right;
- margin-left: 13px;
- overflow: hidden;
-}
-
-.markdown-body span.float-right > span {
- display: block;
- margin: 13px auto 0;
- overflow: hidden;
- text-align: right;
-}
-
-.markdown-body code,
-.markdown-body tt {
- padding: 0.2em 0.4em;
- margin: 0;
- font-size: 85%;
- white-space: break-spaces;
- background-color: rgba(175, 184, 193, 0.2);
- border-radius: 6px;
-}
-
-.markdown-body code br,
-.markdown-body tt br {
- display: none;
-}
-
-.markdown-body del code {
- text-decoration: inherit;
-}
-
-.markdown-body samp {
- font-size: 85%;
-}
-
-.markdown-body pre code {
- font-size: 100%;
-}
-
-.markdown-body pre > code {
- padding: 0;
- margin: 0;
- word-break: normal;
- white-space: pre;
- background: transparent;
- border: 0;
-}
-
-.markdown-body .highlight {
- margin-bottom: 16px;
-}
-
-.markdown-body .highlight pre {
- margin-bottom: 0;
- word-break: normal;
-}
-
-.markdown-body .highlight pre,
-.markdown-body pre {
- padding: 16px;
- overflow: auto;
- font-size: 85%;
- line-height: 1.45;
- background-color: #f6f8fa;
- border-radius: 6px;
-}
-
-.markdown-body pre code,
-.markdown-body pre tt {
- display: inline;
- max-width: auto;
- padding: 0;
- margin: 0;
- overflow: visible;
- line-height: inherit;
- word-wrap: normal;
- background-color: transparent;
- border: 0;
-}
-
-.markdown-body .csv-data td,
-.markdown-body .csv-data th {
- padding: 5px;
- overflow: hidden;
- font-size: 12px;
- line-height: 1;
- text-align: left;
- white-space: nowrap;
-}
-
-.markdown-body .csv-data .blob-num {
- padding: 10px 8px 9px;
- text-align: right;
- background: #ffffff;
- border: 0;
-}
-
-.markdown-body .csv-data tr {
- border-top: 0;
-}
-
-.markdown-body .csv-data th {
- font-weight: 600;
- background: #f6f8fa;
- border-top: 0;
-}
-
-.markdown-body [data-footnote-ref]::before {
- content: '[';
-}
-
-.markdown-body [data-footnote-ref]::after {
- content: ']';
-}
-
-.markdown-body .footnotes {
- font-size: 12px;
- color: #57606a;
- border-top: 1px solid #d0d7de;
-}
-
-.markdown-body .footnotes ol {
- padding-left: 16px;
-}
-
-.markdown-body .footnotes ol ul {
- display: inline-block;
- padding-left: 16px;
- margin-top: 16px;
-}
-
-.markdown-body .footnotes li {
- position: relative;
-}
-
-.markdown-body .footnotes li:target::before {
- position: absolute;
- top: -8px;
- right: -8px;
- bottom: -8px;
- left: -24px;
- pointer-events: none;
- content: '';
- border: 2px solid #0969da;
- border-radius: 6px;
-}
-
-.markdown-body .footnotes li:target {
- color: #24292f;
-}
-
-.markdown-body .footnotes .data-footnote-backref g-emoji {
- font-family: monospace;
-}
-
-.markdown-body .pl-c {
- color: #6e7781;
-}
-
-.markdown-body .pl-c1,
-.markdown-body .pl-s .pl-v {
- color: #0550ae;
-}
-
-.markdown-body .pl-e,
-.markdown-body .pl-en {
- color: #8250df;
-}
-
-.markdown-body .pl-smi,
-.markdown-body .pl-s .pl-s1 {
- color: #24292f;
-}
-
-.markdown-body .pl-ent {
- color: #116329;
-}
-
-.markdown-body .pl-k {
- color: #cf222e;
-}
-
-.markdown-body .pl-s,
-.markdown-body .pl-pds,
-.markdown-body .pl-s .pl-pse .pl-s1,
-.markdown-body .pl-sr,
-.markdown-body .pl-sr .pl-cce,
-.markdown-body .pl-sr .pl-sre,
-.markdown-body .pl-sr .pl-sra {
- color: #0a3069;
-}
-
-.markdown-body .pl-v,
-.markdown-body .pl-smw {
- color: #953800;
-}
-
-.markdown-body .pl-bu {
- color: #82071e;
-}
-
-.markdown-body .pl-ii {
- color: #f6f8fa;
- background-color: #82071e;
-}
-
-.markdown-body .pl-c2 {
- color: #f6f8fa;
- background-color: #cf222e;
-}
-
-.markdown-body .pl-sr .pl-cce {
- font-weight: bold;
- color: #116329;
-}
-
-.markdown-body .pl-ml {
- color: #3b2300;
-}
-
-.markdown-body .pl-mh,
-.markdown-body .pl-mh .pl-en,
-.markdown-body .pl-ms {
- font-weight: bold;
- color: #0550ae;
-}
-
-.markdown-body .pl-mi {
- font-style: italic;
- color: #24292f;
-}
-
-.markdown-body .pl-mb {
- font-weight: bold;
- color: #24292f;
-}
-
-.markdown-body .pl-md {
- color: #82071e;
- background-color: #ffebe9;
-}
-
-.markdown-body .pl-mi1 {
- color: #116329;
- background-color: #dafbe1;
-}
-
-.markdown-body .pl-mc {
- color: #953800;
- background-color: #ffd8b5;
-}
-
-.markdown-body .pl-mi2 {
- color: #eaeef2;
- background-color: #0550ae;
-}
-
-.markdown-body .pl-mdr {
- font-weight: bold;
- color: #8250df;
-}
-
-.markdown-body .pl-ba {
- color: #57606a;
-}
-
-.markdown-body .pl-sg {
- color: #8c959f;
-}
-
-.markdown-body .pl-corl {
- text-decoration: underline;
- color: #0a3069;
-}
-
-.markdown-body g-emoji {
- display: inline-block;
- min-width: 1ch;
- font-family: 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';
- font-size: 1em;
- font-style: normal !important;
- font-weight: 400;
- line-height: 1;
- vertical-align: -0.075em;
-}
-
-.markdown-body g-emoji img {
- width: 1em;
- height: 1em;
-}
-
-.markdown-body .task-list-item {
- list-style-type: none;
-}
-
-.markdown-body .task-list-item label {
- font-weight: 400;
-}
-
-.markdown-body .task-list-item.enabled label {
- cursor: pointer;
-}
-
-.markdown-body .task-list-item + .task-list-item {
- margin-top: 4px;
-}
-
-.markdown-body .task-list-item .handle {
- display: none;
-}
-
-.markdown-body .task-list-item-checkbox {
- margin: 0 0.2em 0.25em -1.4em;
- vertical-align: middle;
-}
-
-.markdown-body .contains-task-list:dir(rtl) .task-list-item-checkbox {
- margin: 0 -1.6em 0.25em 0.2em;
-}
-
-.markdown-body .contains-task-list {
- position: relative;
-}
-
-.markdown-body .contains-task-list:hover .task-list-item-convert-container,
-.markdown-body .contains-task-list:focus-within .task-list-item-convert-container {
- display: block;
- width: auto;
- height: 24px;
- overflow: visible;
- clip: auto;
-}
-
-.markdown-body ::-webkit-calendar-picker-indicator {
- filter: invert(50%);
-}
diff --git a/demo/.gitignore b/docs/.gitignore
similarity index 95%
rename from demo/.gitignore
rename to docs/.gitignore
index 6635cf5..ac7211b 100644
--- a/demo/.gitignore
+++ b/docs/.gitignore
@@ -1,6 +1,7 @@
.DS_Store
node_modules
/build
+/dist
/.svelte-kit
/package
.env
diff --git a/docs/components.json b/docs/components.json
new file mode 100644
index 0000000..849ec61
--- /dev/null
+++ b/docs/components.json
@@ -0,0 +1,13 @@
+{
+ "$schema": "https://shadcn-svelte.com/schema.json",
+ "style": "new-york",
+ "tailwind": {
+ "config": "tailwind.config.js",
+ "css": "src/app.postcss",
+ "baseColor": "neutral"
+ },
+ "aliases": {
+ "components": "$lib/components",
+ "utils": "$lib/utils"
+ }
+}
diff --git a/docs/mdsvex.config.js b/docs/mdsvex.config.js
new file mode 100644
index 0000000..93d975b
--- /dev/null
+++ b/docs/mdsvex.config.js
@@ -0,0 +1,16 @@
+import { defineMDSveXConfig as defineConfig } from 'mdsvex';
+import rehypeSlug from 'rehype-slug';
+import rehypeAutolinkHeadings from 'rehype-autolink-headings';
+
+const config = defineConfig({
+ extensions: ['.svelte.md', '.md', '.svx'],
+
+ smartypants: {
+ dashes: 'oldschool'
+ },
+
+ remarkPlugins: [],
+ rehypePlugins: [rehypeSlug, [rehypeAutolinkHeadings, { behavior: 'wrap' }]]
+});
+
+export default config;
diff --git a/demo/package.json b/docs/package.json
similarity index 53%
rename from demo/package.json
rename to docs/package.json
index 892ece0..7a24ff5 100644
--- a/demo/package.json
+++ b/docs/package.json
@@ -1,5 +1,5 @@
{
- "name": "demo",
+ "name": "docs",
"version": "0.0.1",
"private": true,
"license": "MIT",
@@ -15,24 +15,40 @@
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch"
},
"devDependencies": {
- "@sveltejs/adapter-auto": "^2.0.0",
- "@sveltejs/adapter-static": "1.0.0-next.50",
- "@sveltejs/kit": "^1.5.0",
+ "@sveltejs/adapter-auto": "^3.1.1",
+ "@sveltejs/adapter-static": "3.0.1",
+ "@sveltejs/kit": "^2.5.4",
+ "@sveltejs/package": "^2.3.0",
+ "@sveltejs/vite-plugin-svelte": "^3.0.2",
+ "@types/flexsearch": "^0.7.6",
"@types/katex": "^0.16.0",
- "svelte": "^3.54.0 || ^4.0.0",
- "svelte-check": "^3.0.1",
+ "autoprefixer": "^10.4.16",
+ "mdsvex": "^0.11.0",
+ "rehype-autolink-headings": "^7.1.0",
+ "rehype-slug": "^6.0.0",
+ "sass": "^1.69.5",
+ "svelte": "^4.2.12",
+ "svelte-check": "^3.6.7",
+ "tailwindcss": "^3.3.5",
"tslib": "^2.4.1",
"typescript": "^5.0.0",
- "vite": "^4.3.9"
+ "vite": "^5.1.6"
},
"type": "module",
"dependencies": {
+ "@cartamd/plugin-attachment": "workspace:^",
"@cartamd/plugin-code": "workspace:^",
"@cartamd/plugin-emoji": "workspace:^",
"@cartamd/plugin-math": "workspace:^",
"@cartamd/plugin-slash": "workspace:^",
"@cartamd/plugin-tikz": "workspace:^",
+ "bits-ui": "^0.9.1",
"carta-md": "workspace:^",
- "katex": "^0.16.7"
+ "clsx": "^2.0.0",
+ "cmdk-sv": "^0.0.6",
+ "flexsearch": "0.7.21",
+ "iconify-icon": "^2.0.0",
+ "katex": "^0.16.10",
+ "tailwind-merge": "^2.0.0"
}
}
diff --git a/docs/postcss.config.cjs b/docs/postcss.config.cjs
new file mode 100644
index 0000000..4eb987c
--- /dev/null
+++ b/docs/postcss.config.cjs
@@ -0,0 +1,8 @@
+const tailwindcss = require('tailwindcss');
+const autoprefixer = require('autoprefixer');
+
+const config = {
+ plugins: [tailwindcss(), autoprefixer]
+};
+
+module.exports = config;
diff --git a/demo/src/app.d.ts b/docs/src/app.d.ts
similarity index 100%
rename from demo/src/app.d.ts
rename to docs/src/app.d.ts
diff --git a/docs/src/app.html b/docs/src/app.html
new file mode 100644
index 0000000..e9a46db
--- /dev/null
+++ b/docs/src/app.html
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+ %sveltekit.head%
+
+
+
+
+
+
+
+
+
+ %sveltekit.body%
+
+
diff --git a/docs/src/app.postcss b/docs/src/app.postcss
new file mode 100644
index 0000000..5c9e7a3
--- /dev/null
+++ b/docs/src/app.postcss
@@ -0,0 +1,84 @@
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
+
+@layer base {
+ :root {
+ --background: 0 0% 100%;
+ --foreground: 0 0% 3.9%;
+
+ --muted: 0 0% 96.1%;
+ --muted-foreground: 0 0% 45.1%;
+
+ --popover: 0 0% 100%;
+ --popover-foreground: 0 0% 3.9%;
+
+ --card: 0 0% 100%;
+ --card-foreground: 0 0% 3.9%;
+
+ --border: 0 0% 89.8%;
+ --input: 0 0% 89.8%;
+
+ --primary: 0 0% 9%;
+ --primary-foreground: 0 0% 98%;
+
+ --secondary: 0 0% 96.1%;
+ --secondary-foreground: 0 0% 9%;
+
+ --accent: 0 0% 96.1%;
+ --accent-foreground: 0 0% 9%;
+
+ --destructive: 0 84.2% 60.2%;
+ --destructive-foreground: 0 0% 98%;
+
+ --ring: 0 0% 3.9%;
+
+ --radius: 0.5rem;
+
+ font-family: 'Inter', sans-serif;
+ }
+
+ .dark {
+ --background: 0 0% 3.9%;
+ --foreground: 0 0% 98%;
+
+ --muted: 0 0% 14.9%;
+ --muted-foreground: 0 0% 63.9%;
+
+ --popover: 0 0% 3.9%;
+ --popover-foreground: 0 0% 98%;
+
+ --card: 0 0% 3.9%;
+ --card-foreground: 0 0% 98%;
+
+ --border: 0 0% 14.9%;
+ --input: 0 0% 14.9%;
+
+ --primary: 0 0% 98%;
+ --primary-foreground: 0 0% 9%;
+
+ --secondary: 0 0% 14.9%;
+ --secondary-foreground: 0 0% 98%;
+
+ --accent: 0 0% 14.9%;
+ --accent-foreground: 0 0% 98%;
+
+ --destructive: 0 62.8% 30.6%;
+ --destructive-foreground: 0 0% 98%;
+
+ --ring: 0 0% 83.1%;
+ }
+}
+
+@layer base {
+ * {
+ @apply border-border;
+ }
+ body {
+ @apply bg-background text-foreground;
+ }
+}
+
+nav div[data-portal] {
+ display: none;
+}
diff --git a/docs/src/lib/components/code/Code.svelte b/docs/src/lib/components/code/Code.svelte
new file mode 100644
index 0000000..8be7d1f
--- /dev/null
+++ b/docs/src/lib/components/code/Code.svelte
@@ -0,0 +1,20 @@
+
+
+
+
+
+ {
+ navigator.clipboard.writeText(elem.innerText);
+ }}
+ class="
+ absolute right-4 top-[min(50%_,_32px)] aspect-square -translate-y-1/2 transform
+ rounded hover:bg-neutral-800 hover:text-neutral-300 active:text-sky-300
+ "
+ >
+
+
+
diff --git a/docs/src/lib/components/footer/Footer.svelte b/docs/src/lib/components/footer/Footer.svelte
new file mode 100644
index 0000000..c1725e0
--- /dev/null
+++ b/docs/src/lib/components/footer/Footer.svelte
@@ -0,0 +1,9 @@
+
diff --git a/docs/src/lib/components/header-tracker/HeaderTracker.svelte b/docs/src/lib/components/header-tracker/HeaderTracker.svelte
new file mode 100644
index 0000000..d584c97
--- /dev/null
+++ b/docs/src/lib/components/header-tracker/HeaderTracker.svelte
@@ -0,0 +1,66 @@
+
+
+ {
+ throttledHighlightHeader();
+ debouncedHighlightHeader(); // So it is called at the end of the scroll event
+ }}
+/>
+
+
+ {#each headers as header, i}
+ {@const margin = Number(header.tagName.split('')[1]) - 1}
+ {#key selectedHeaderIndex}
+ {#if header.children[0] instanceof HTMLAnchorElement && header.children[0].href}
+
+ {/if}
+ {/key}
+ {/each}
+
diff --git a/docs/src/lib/components/link/Link.svelte b/docs/src/lib/components/link/Link.svelte
new file mode 100644
index 0000000..5090779
--- /dev/null
+++ b/docs/src/lib/components/link/Link.svelte
@@ -0,0 +1,17 @@
+
+
+
+
+
diff --git a/docs/src/lib/components/link/PluginLink.svelte b/docs/src/lib/components/link/PluginLink.svelte
new file mode 100644
index 0000000..8318e91
--- /dev/null
+++ b/docs/src/lib/components/link/PluginLink.svelte
@@ -0,0 +1,22 @@
+
+
+
+
+
diff --git a/docs/src/lib/components/mobile-sidebar/MobileSidebar.svelte b/docs/src/lib/components/mobile-sidebar/MobileSidebar.svelte
new file mode 100644
index 0000000..1ebb918
--- /dev/null
+++ b/docs/src/lib/components/mobile-sidebar/MobileSidebar.svelte
@@ -0,0 +1,34 @@
+
+
+
+ (enabled = !enabled)} class="text-neutral-500 hover:text-neutral-200">
+
+
+
+
+{#if enabled}
+
+
+
+
+ (enabled = false)}
+ class="absolute right-4 top-4 text-neutral-500 hover:text-neutral-200"
+ >
+
+
+
+{/if}
diff --git a/docs/src/lib/components/navbar/GitHub.svelte b/docs/src/lib/components/navbar/GitHub.svelte
new file mode 100644
index 0000000..226d95d
--- /dev/null
+++ b/docs/src/lib/components/navbar/GitHub.svelte
@@ -0,0 +1,33 @@
+
+
+
+
+
+
BearToCode/carta
+ {#if loading}
+
+ {:else}
+
+
+ {stars}
+
+ {/if}
+
+
diff --git a/docs/src/lib/components/navbar/Navbar.svelte b/docs/src/lib/components/navbar/Navbar.svelte
new file mode 100644
index 0000000..8923502
--- /dev/null
+++ b/docs/src/lib/components/navbar/Navbar.svelte
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/src/lib/components/navbar/Search.svelte b/docs/src/lib/components/navbar/Search.svelte
new file mode 100644
index 0000000..93c9390
--- /dev/null
+++ b/docs/src/lib/components/navbar/Search.svelte
@@ -0,0 +1,111 @@
+
+
+
+
+ (open = !open)} class="mr-2 block aspect-square md:hidden">
+
+
+
+ (open = !open)}
+>
+
+
+ Search...
+
+
+ โ K
+
+
+
+
+
+
+ {#if value}
+ No results found.
+
+ {#each results as result}
+ {
+ if (result.match?.heading) goto(`${base}/${result.path}#${result.match.heading.id}`);
+ else goto(`${base}/${result.path}`);
+ open = false;
+ }}
+ class="group"
+ value={result.title}
+ >
+
+ {result.title}
+
+ {#if result.match?.heading}
+ - {result.match.heading.text}
+ {/if}
+
+
+ {#if result.match}
+ {result.match.text}
+ {/if}
+
+
+
+
+
+ {/each}
+
+ {/if}
+
+
diff --git a/docs/src/lib/components/sidebar/Sidebar.svelte b/docs/src/lib/components/sidebar/Sidebar.svelte
new file mode 100644
index 0000000..cb82c46
--- /dev/null
+++ b/docs/src/lib/components/sidebar/Sidebar.svelte
@@ -0,0 +1,114 @@
+
+
+
+
Overview
+
+
+
+
+ Introduction
+
+
+
+
+
+ Examples
+
+
+
+
+
+ Getting Started
+
+
+
+
+
+ Editing Styles
+
+
+
+
+
+ Migration
+
+
+
+
+
+ Community Plugins
+
+
+
+
+
+ Using Components
+
+
+ Plugins
+
+
+
+
+ Math
+
+
+
+
+
+ Code
+
+
+
+
+
+ Emoji
+
+
+
+
+
+ Slash
+
+
+
+
+
+ TikZ
+
+
+
+
+
+ Attachment
+
+
+
+
+
+ Anchor
+
+
+ API
+
+
+
+ Utilities
+
+
+
+
+ Core
+
+
+
+
+ Extension
+
+
diff --git a/docs/src/lib/components/sidebar/SidebarLink.svelte b/docs/src/lib/components/sidebar/SidebarLink.svelte
new file mode 100644
index 0000000..69762d7
--- /dev/null
+++ b/docs/src/lib/components/sidebar/SidebarLink.svelte
@@ -0,0 +1,19 @@
+
+
+
diff --git a/docs/src/lib/components/ui/card/card-content.svelte b/docs/src/lib/components/ui/card/card-content.svelte
new file mode 100644
index 0000000..c87d58a
--- /dev/null
+++ b/docs/src/lib/components/ui/card/card-content.svelte
@@ -0,0 +1,13 @@
+
+
+
+
+
diff --git a/docs/src/lib/components/ui/card/card-description.svelte b/docs/src/lib/components/ui/card/card-description.svelte
new file mode 100644
index 0000000..243e439
--- /dev/null
+++ b/docs/src/lib/components/ui/card/card-description.svelte
@@ -0,0 +1,13 @@
+
+
+
+
+
diff --git a/docs/src/lib/components/ui/card/card-footer.svelte b/docs/src/lib/components/ui/card/card-footer.svelte
new file mode 100644
index 0000000..414ded9
--- /dev/null
+++ b/docs/src/lib/components/ui/card/card-footer.svelte
@@ -0,0 +1,13 @@
+
+
+
+
+
diff --git a/docs/src/lib/components/ui/card/card-header.svelte b/docs/src/lib/components/ui/card/card-header.svelte
new file mode 100644
index 0000000..8079df3
--- /dev/null
+++ b/docs/src/lib/components/ui/card/card-header.svelte
@@ -0,0 +1,13 @@
+
+
+
+
+
diff --git a/docs/src/lib/components/ui/card/card-title.svelte b/docs/src/lib/components/ui/card/card-title.svelte
new file mode 100644
index 0000000..d0d98c0
--- /dev/null
+++ b/docs/src/lib/components/ui/card/card-title.svelte
@@ -0,0 +1,21 @@
+
+
+
+
+
diff --git a/docs/src/lib/components/ui/card/card.svelte b/docs/src/lib/components/ui/card/card.svelte
new file mode 100644
index 0000000..d1fd1dc
--- /dev/null
+++ b/docs/src/lib/components/ui/card/card.svelte
@@ -0,0 +1,24 @@
+
+
+
+
+
diff --git a/docs/src/lib/components/ui/card/index.ts b/docs/src/lib/components/ui/card/index.ts
new file mode 100644
index 0000000..86c5408
--- /dev/null
+++ b/docs/src/lib/components/ui/card/index.ts
@@ -0,0 +1,24 @@
+import Root from './card.svelte';
+import Content from './card-content.svelte';
+import Description from './card-description.svelte';
+import Footer from './card-footer.svelte';
+import Header from './card-header.svelte';
+import Title from './card-title.svelte';
+
+export {
+ Root,
+ Content,
+ Description,
+ Footer,
+ Header,
+ Title,
+ //
+ Root as Card,
+ Content as CardContent,
+ Description as CardDescription,
+ Footer as CardFooter,
+ Header as CardHeader,
+ Title as CardTitle
+};
+
+export type HeadingLevel = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';
diff --git a/docs/src/lib/components/ui/command/command-dialog.svelte b/docs/src/lib/components/ui/command/command-dialog.svelte
new file mode 100644
index 0000000..634b2b2
--- /dev/null
+++ b/docs/src/lib/components/ui/command/command-dialog.svelte
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
diff --git a/docs/src/lib/components/ui/command/command-empty.svelte b/docs/src/lib/components/ui/command/command-empty.svelte
new file mode 100644
index 0000000..1e0b7b7
--- /dev/null
+++ b/docs/src/lib/components/ui/command/command-empty.svelte
@@ -0,0 +1,12 @@
+
+
+
+
+
diff --git a/docs/src/lib/components/ui/command/command-group.svelte b/docs/src/lib/components/ui/command/command-group.svelte
new file mode 100644
index 0000000..ff2e2c8
--- /dev/null
+++ b/docs/src/lib/components/ui/command/command-group.svelte
@@ -0,0 +1,18 @@
+
+
+
+
+
diff --git a/docs/src/lib/components/ui/command/command-input.svelte b/docs/src/lib/components/ui/command/command-input.svelte
new file mode 100644
index 0000000..8a59e0f
--- /dev/null
+++ b/docs/src/lib/components/ui/command/command-input.svelte
@@ -0,0 +1,22 @@
+
+
+
+
+
+
diff --git a/docs/src/lib/components/ui/command/command-item.svelte b/docs/src/lib/components/ui/command/command-item.svelte
new file mode 100644
index 0000000..843eff9
--- /dev/null
+++ b/docs/src/lib/components/ui/command/command-item.svelte
@@ -0,0 +1,19 @@
+
+
+
+
+
diff --git a/docs/src/lib/components/ui/command/command-list.svelte b/docs/src/lib/components/ui/command/command-list.svelte
new file mode 100644
index 0000000..fc40d07
--- /dev/null
+++ b/docs/src/lib/components/ui/command/command-list.svelte
@@ -0,0 +1,15 @@
+
+
+
+
+
diff --git a/docs/src/lib/components/ui/command/command-separator.svelte b/docs/src/lib/components/ui/command/command-separator.svelte
new file mode 100644
index 0000000..f13ac8b
--- /dev/null
+++ b/docs/src/lib/components/ui/command/command-separator.svelte
@@ -0,0 +1,10 @@
+
+
+
diff --git a/docs/src/lib/components/ui/command/command-shortcut.svelte b/docs/src/lib/components/ui/command/command-shortcut.svelte
new file mode 100644
index 0000000..ec0b3ee
--- /dev/null
+++ b/docs/src/lib/components/ui/command/command-shortcut.svelte
@@ -0,0 +1,15 @@
+
+
+
+
+
diff --git a/docs/src/lib/components/ui/command/command.svelte b/docs/src/lib/components/ui/command/command.svelte
new file mode 100644
index 0000000..2c59ff3
--- /dev/null
+++ b/docs/src/lib/components/ui/command/command.svelte
@@ -0,0 +1,22 @@
+
+
+
+
+
diff --git a/docs/src/lib/components/ui/command/index.ts b/docs/src/lib/components/ui/command/index.ts
new file mode 100644
index 0000000..03922d5
--- /dev/null
+++ b/docs/src/lib/components/ui/command/index.ts
@@ -0,0 +1,37 @@
+import { Command as CommandPrimitive } from 'cmdk-sv';
+
+import Root from './command.svelte';
+import Dialog from './command-dialog.svelte';
+import Empty from './command-empty.svelte';
+import Group from './command-group.svelte';
+import Item from './command-item.svelte';
+import Input from './command-input.svelte';
+import List from './command-list.svelte';
+import Separator from './command-separator.svelte';
+import Shortcut from './command-shortcut.svelte';
+
+const Loading = CommandPrimitive.Loading;
+
+export {
+ Root,
+ Dialog,
+ Empty,
+ Group,
+ Item,
+ Input,
+ List,
+ Separator,
+ Shortcut,
+ Loading,
+ //
+ Root as Command,
+ Dialog as CommandDialog,
+ Empty as CommandEmpty,
+ Group as CommandGroup,
+ Item as CommandItem,
+ Input as CommandInput,
+ List as CommandList,
+ Separator as CommandSeparator,
+ Shortcut as CommandShortcut,
+ Loading as CommandLoading
+};
diff --git a/docs/src/lib/components/ui/dialog/dialog-content.svelte b/docs/src/lib/components/ui/dialog/dialog-content.svelte
new file mode 100644
index 0000000..91af447
--- /dev/null
+++ b/docs/src/lib/components/ui/dialog/dialog-content.svelte
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+ Close
+
+
+
diff --git a/docs/src/lib/components/ui/dialog/dialog-description.svelte b/docs/src/lib/components/ui/dialog/dialog-description.svelte
new file mode 100644
index 0000000..de3d9ee
--- /dev/null
+++ b/docs/src/lib/components/ui/dialog/dialog-description.svelte
@@ -0,0 +1,16 @@
+
+
+
+
+
diff --git a/docs/src/lib/components/ui/dialog/dialog-footer.svelte b/docs/src/lib/components/ui/dialog/dialog-footer.svelte
new file mode 100644
index 0000000..da4f517
--- /dev/null
+++ b/docs/src/lib/components/ui/dialog/dialog-footer.svelte
@@ -0,0 +1,16 @@
+
+
+
+
+
diff --git a/docs/src/lib/components/ui/dialog/dialog-header.svelte b/docs/src/lib/components/ui/dialog/dialog-header.svelte
new file mode 100644
index 0000000..e4b3608
--- /dev/null
+++ b/docs/src/lib/components/ui/dialog/dialog-header.svelte
@@ -0,0 +1,13 @@
+
+
+
+
+
diff --git a/docs/src/lib/components/ui/dialog/dialog-overlay.svelte b/docs/src/lib/components/ui/dialog/dialog-overlay.svelte
new file mode 100644
index 0000000..4461f90
--- /dev/null
+++ b/docs/src/lib/components/ui/dialog/dialog-overlay.svelte
@@ -0,0 +1,21 @@
+
+
+
diff --git a/docs/src/lib/components/ui/dialog/dialog-portal.svelte b/docs/src/lib/components/ui/dialog/dialog-portal.svelte
new file mode 100644
index 0000000..6707ba7
--- /dev/null
+++ b/docs/src/lib/components/ui/dialog/dialog-portal.svelte
@@ -0,0 +1,9 @@
+
+
+
+
+
diff --git a/docs/src/lib/components/ui/dialog/dialog-title.svelte b/docs/src/lib/components/ui/dialog/dialog-title.svelte
new file mode 100644
index 0000000..c133166
--- /dev/null
+++ b/docs/src/lib/components/ui/dialog/dialog-title.svelte
@@ -0,0 +1,16 @@
+
+
+
+
+
diff --git a/docs/src/lib/components/ui/dialog/index.ts b/docs/src/lib/components/ui/dialog/index.ts
new file mode 100644
index 0000000..2a1a048
--- /dev/null
+++ b/docs/src/lib/components/ui/dialog/index.ts
@@ -0,0 +1,34 @@
+import { Dialog as DialogPrimitive } from 'bits-ui';
+
+const Root = DialogPrimitive.Root;
+const Trigger = DialogPrimitive.Trigger;
+
+import Title from './dialog-title.svelte';
+import Portal from './dialog-portal.svelte';
+import Footer from './dialog-footer.svelte';
+import Header from './dialog-header.svelte';
+import Overlay from './dialog-overlay.svelte';
+import Content from './dialog-content.svelte';
+import Description from './dialog-description.svelte';
+
+export {
+ Root,
+ Title,
+ Portal,
+ Footer,
+ Header,
+ Trigger,
+ Overlay,
+ Content,
+ Description,
+ //
+ Root as Dialog,
+ Title as DialogTitle,
+ Portal as DialogPortal,
+ Footer as DialogFooter,
+ Header as DialogHeader,
+ Trigger as DialogTrigger,
+ Overlay as DialogOverlay,
+ Content as DialogContent,
+ Description as DialogDescription
+};
diff --git a/docs/src/lib/examples/DiscordExample.svelte b/docs/src/lib/examples/DiscordExample.svelte
new file mode 100644
index 0000000..bfc048a
--- /dev/null
+++ b/docs/src/lib/examples/DiscordExample.svelte
@@ -0,0 +1,28 @@
+
+
+
diff --git a/docs/src/lib/examples/GitHubExample.svelte b/docs/src/lib/examples/GitHubExample.svelte
new file mode 100644
index 0000000..5de31c6
--- /dev/null
+++ b/docs/src/lib/examples/GitHubExample.svelte
@@ -0,0 +1,30 @@
+
+
+
diff --git a/docs/src/lib/examples/MathStackExchangeExample.svelte b/docs/src/lib/examples/MathStackExchangeExample.svelte
new file mode 100644
index 0000000..c6057b1
--- /dev/null
+++ b/docs/src/lib/examples/MathStackExchangeExample.svelte
@@ -0,0 +1,39 @@
+
+
+
+
+
+ {#key value}
+
+ {/key}
+
diff --git a/docs/src/lib/examples/assets/PlusIcon.svelte b/docs/src/lib/examples/assets/PlusIcon.svelte
new file mode 100644
index 0000000..aaa4ef9
--- /dev/null
+++ b/docs/src/lib/examples/assets/PlusIcon.svelte
@@ -0,0 +1,3 @@
+
+
+
diff --git a/docs/src/lib/examples/math-stack-exchange-placeholder.tex b/docs/src/lib/examples/math-stack-exchange-placeholder.tex
new file mode 100644
index 0000000..c63338d
--- /dev/null
+++ b/docs/src/lib/examples/math-stack-exchange-placeholder.tex
@@ -0,0 +1,23 @@
+> Here is a formula:
+
+$$
+\dfrac{\partial}{\partial t}(
+ \dfrac{\partial \mathcal{L}}{\partial \dot{q}_k}
+) - \dfrac{\partial \mathcal{L}}{\partial q_k} = 0
+$$
+
+> And here is a circuit:
+
+```tikz
+\usepackage{circuitikz}
+
+\begin{document}
+ \begin{circuitikz} \draw
+ (0,0) to[battery] (0,4)
+ to[ammeter] (4,4) -- (4,0)
+ to[lamp] (0,0)
+ ;
+ \end{circuitikz}
+\end{document}
+```
+
diff --git a/docs/src/lib/search/index.ts b/docs/src/lib/search/index.ts
new file mode 100644
index 0000000..7a1623f
--- /dev/null
+++ b/docs/src/lib/search/index.ts
@@ -0,0 +1,96 @@
+import flexsearch from 'flexsearch';
+import type { SvelteComponent } from 'svelte';
+
+export interface SearchResult {
+ path: string;
+ content: string;
+ html: string;
+ title: string;
+}
+
+export type EnrichedSearchResult = SearchResult & {
+ match?: {
+ heading?: {
+ text: string;
+ id: string;
+ };
+ text: string;
+ };
+};
+
+export async function initializeSearch() {
+ const indexedPages = new flexsearch.Document({
+ tokenize: 'full',
+ cache: true,
+ context: true,
+ document: {
+ id: 'path',
+ index: ['title', 'content'],
+ store: true
+ }
+ });
+
+ const pages = import.meta.glob('../../pages/**/*.svelte.md');
+ await Promise.all(
+ Object.keys(pages).map(async (page) => {
+ const module = (await pages[page]()) as {
+ default: typeof SvelteComponent;
+ metadata: Record;
+ };
+ const elem = document.createElement('div');
+ new module.default({ target: elem });
+
+ const path = page.replace('../../pages/', '').replace('.svelte.md', '');
+ const title = module.metadata.title as string;
+ const html = elem.innerHTML;
+ const content = extractText(module.default);
+
+ indexedPages.add({
+ path,
+ html,
+ title,
+ content
+ });
+ })
+ );
+ return indexedPages;
+}
+
+function extractText(component: typeof SvelteComponent) {
+ const parentElem = document.createElement('div');
+ new component({ target: parentElem });
+
+ const text = parentElem.textContent ?? '';
+ // Remove extra spaces
+ return text.replace(/\s+/g, ' ').trim();
+}
+
+export function enrichResult(result: SearchResult, query: string): EnrichedSearchResult {
+ let heading: HTMLHeadingElement | null = null;
+
+ const parentElem = document.createElement('div');
+ parentElem.innerHTML = result.html;
+
+ for (const node of parentElem.childNodes) {
+ const content = node.textContent?.replaceAll('\n', '').replace(/\s+/g, ' ').trim() ?? '';
+ if (['h1', 'h2', 'h3'].includes(node.nodeName.toLowerCase())) {
+ heading = node as HTMLHeadingElement;
+ }
+ if (content?.toLowerCase().includes(query.toLowerCase())) {
+ return {
+ ...result,
+ match: {
+ heading: heading
+ ? {
+ text: heading.textContent ?? '',
+ id: heading.id
+ }
+ : undefined,
+ text: content
+ }
+ };
+ }
+ }
+
+ return result;
+}
diff --git a/docs/src/lib/styles/coldark.scss b/docs/src/lib/styles/coldark.scss
new file mode 100644
index 0000000..f6f6833
--- /dev/null
+++ b/docs/src/lib/styles/coldark.scss
@@ -0,0 +1,317 @@
+/**
+ * Coldark Theme for Prism.js
+ * Theme variation: Dark
+ * Tested with HTML, CSS, JS, JSON, PHP, YAML, Bash script
+ * @author Armand Philippot
+ * @homepage https://github.com/ArmandPhilippot/coldark-prism
+ * @license MIT
+ */
+code[class*='language-'],
+pre[class*='language-'] {
+ color: #e3eaf2;
+ background: none;
+ font-family: 'Fira Code', Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
+ 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;
+}
+
+pre[class*='language-']::-moz-selection,
+pre[class*='language-'] ::-moz-selection,
+code[class*='language-']::-moz-selection,
+code[class*='language-'] ::-moz-selection {
+ background: #3c526d;
+}
+
+pre[class*='language-']::selection,
+pre[class*='language-'] ::selection,
+code[class*='language-']::selection,
+code[class*='language-'] ::selection {
+ background: #3c526d;
+}
+
+/* Code blocks */
+pre[class*='language-'] {
+ padding: 1em;
+ margin: 0.5em 0;
+ overflow: auto;
+}
+
+:not(pre) > code[class*='language-'],
+pre[class*='language-'] {
+ @apply rounded-md border border-neutral-800 bg-neutral-950 bg-opacity-50;
+}
+
+/* Inline code */
+:not(pre) > code[class*='language-'] {
+ padding: 0.1em 0.3em;
+ border-radius: 0.3em;
+ white-space: normal;
+}
+
+.token.comment,
+.token.prolog,
+.token.doctype,
+.token.cdata {
+ color: #8da1b9;
+}
+
+.token.punctuation {
+ color: #e3eaf2;
+}
+
+.token.delimiter.important,
+.token.selector .parent,
+.token.tag,
+.token.tag .token.punctuation {
+ color: #66cccc;
+}
+
+.token.attr-name,
+.token.boolean,
+.token.boolean.important,
+.token.number,
+.token.constant,
+.token.selector .token.attribute {
+ color: #e6d37a;
+}
+
+.token.class-name,
+.token.key,
+.token.parameter,
+.token.property,
+.token.property-access,
+.token.variable {
+ color: #6cb8e6;
+}
+
+.token.attr-value,
+.token.inserted,
+.token.color,
+.token.selector .token.value,
+.token.string,
+.token.string .token.url-link {
+ color: #91d076;
+}
+
+.token.builtin,
+.token.keyword-array,
+.token.package,
+.token.regex {
+ color: #f4adf4;
+}
+
+.token.function,
+.token.selector .token.class,
+.token.selector .token.id {
+ color: #c699e3;
+}
+
+.token.atrule .token.rule,
+.token.combinator,
+.token.keyword,
+.token.operator,
+.token.pseudo-class,
+.token.pseudo-element,
+.token.selector,
+.token.unit {
+ color: #e9ae7e;
+}
+
+.token.deleted,
+.token.important {
+ color: #cd6660;
+}
+
+.token.keyword-this,
+.token.this {
+ color: #6cb8e6;
+}
+
+.token.important,
+.token.keyword-this,
+.token.this,
+.token.bold {
+ font-weight: bold;
+}
+
+.token.delimiter.important {
+ font-weight: inherit;
+}
+
+.token.italic {
+ font-style: italic;
+}
+
+.token.entity {
+ cursor: help;
+}
+
+.language-markdown .token.title,
+.language-markdown .token.title .token.punctuation {
+ color: #6cb8e6;
+ font-weight: bold;
+}
+
+.language-markdown .token.blockquote.punctuation {
+ color: #f4adf4;
+}
+
+.language-markdown .token.code {
+ color: #66cccc;
+}
+
+.language-markdown .token.hr.punctuation {
+ color: #6cb8e6;
+}
+
+.language-markdown .token.url .token.content {
+ color: #91d076;
+}
+
+.language-markdown .token.url-link {
+ color: #e6d37a;
+}
+
+.language-markdown .token.list.punctuation {
+ color: #f4adf4;
+}
+
+.language-markdown .token.table-header {
+ color: #e3eaf2;
+}
+
+.language-json .token.operator {
+ color: #e3eaf2;
+}
+
+.language-scss .token.variable {
+ color: #66cccc;
+}
+
+/* overrides color-values for the Show Invisibles plugin
+ * https://prismjs.com/plugins/show-invisibles/
+ */
+.token.token.tab:not(:empty):before,
+.token.token.cr:before,
+.token.token.lf:before,
+.token.token.space:before {
+ color: #8da1b9;
+}
+
+/* overrides color-values for the Toolbar plugin
+ * https://prismjs.com/plugins/toolbar/
+ */
+div.code-toolbar > .toolbar.toolbar > .toolbar-item > a,
+div.code-toolbar > .toolbar.toolbar > .toolbar-item > button {
+ color: #111b27;
+ background: #6cb8e6;
+}
+
+div.code-toolbar > .toolbar.toolbar > .toolbar-item > a:hover,
+div.code-toolbar > .toolbar.toolbar > .toolbar-item > a:focus,
+div.code-toolbar > .toolbar.toolbar > .toolbar-item > button:hover,
+div.code-toolbar > .toolbar.toolbar > .toolbar-item > button:focus {
+ color: #111b27;
+ background: #6cb8e6da;
+ text-decoration: none;
+}
+
+div.code-toolbar > .toolbar.toolbar > .toolbar-item > span,
+div.code-toolbar > .toolbar.toolbar > .toolbar-item > span:hover,
+div.code-toolbar > .toolbar.toolbar > .toolbar-item > span:focus {
+ color: #111b27;
+ background: #8da1b9;
+}
+
+/* overrides color-values for the Line Highlight plugin
+ * http://prismjs.com/plugins/line-highlight/
+ */
+.line-highlight.line-highlight {
+ background: #3c526d5f;
+ background: linear-gradient(to right, #3c526d5f 70%, #3c526d55);
+}
+
+.line-highlight.line-highlight:before,
+.line-highlight.line-highlight[data-end]:after {
+ background-color: #8da1b9;
+ color: #111b27;
+ box-shadow: 0 1px #3c526d;
+}
+
+pre[id].linkable-line-numbers.linkable-line-numbers span.line-numbers-rows > span:hover:before {
+ background-color: #8da1b918;
+}
+
+/* overrides color-values for the Line Numbers plugin
+ * http://prismjs.com/plugins/line-numbers/
+ */
+.line-numbers.line-numbers .line-numbers-rows {
+ border-right: 1px solid #0b121b;
+ background: #0b121b7a;
+}
+
+.line-numbers .line-numbers-rows > span:before {
+ color: #8da1b9da;
+}
+
+/* overrides color-values for the Match Braces plugin
+ * https://prismjs.com/plugins/match-braces/
+ */
+.rainbow-braces .token.token.punctuation.brace-level-1,
+.rainbow-braces .token.token.punctuation.brace-level-5,
+.rainbow-braces .token.token.punctuation.brace-level-9 {
+ color: #e6d37a;
+}
+
+.rainbow-braces .token.token.punctuation.brace-level-2,
+.rainbow-braces .token.token.punctuation.brace-level-6,
+.rainbow-braces .token.token.punctuation.brace-level-10 {
+ color: #f4adf4;
+}
+
+.rainbow-braces .token.token.punctuation.brace-level-3,
+.rainbow-braces .token.token.punctuation.brace-level-7,
+.rainbow-braces .token.token.punctuation.brace-level-11 {
+ color: #6cb8e6;
+}
+
+.rainbow-braces .token.token.punctuation.brace-level-4,
+.rainbow-braces .token.token.punctuation.brace-level-8,
+.rainbow-braces .token.token.punctuation.brace-level-12 {
+ color: #c699e3;
+}
+
+/* overrides color-values for the Diff Highlight plugin
+ * https://prismjs.com/plugins/diff-highlight/
+ */
+pre.diff-highlight > code .token.token.deleted:not(.prefix),
+pre > code.diff-highlight .token.token.deleted:not(.prefix) {
+ background-color: #cd66601f;
+}
+
+pre.diff-highlight > code .token.token.inserted:not(.prefix),
+pre > code.diff-highlight .token.token.inserted:not(.prefix) {
+ background-color: #91d0761f;
+}
+
+/* overrides color-values for the Command Line plugin
+ * https://prismjs.com/plugins/command-line/
+ */
+.command-line .command-line-prompt {
+ border-right: 1px solid #0b121b;
+}
+
+.command-line .command-line-prompt > span:before {
+ color: #8da1b9da;
+}
diff --git a/docs/src/lib/styles/discord.scss b/docs/src/lib/styles/discord.scss
new file mode 100644
index 0000000..60d8d3b
--- /dev/null
+++ b/docs/src/lib/styles/discord.scss
@@ -0,0 +1,83 @@
+.carta-theme__discord {
+ // Core styles
+ $background: #2f3136;
+ $background-light: #161b22;
+ $background-contrast: #46484b;
+
+ &.carta-editor {
+ background-color: $background;
+ border-radius: 0.5rem;
+
+ ::placeholder {
+ opacity: 0.5;
+ }
+
+ .carta-wrapper {
+ padding: 1rem;
+ padding-left: 56px;
+ flex-grow: 1;
+ overflow-y: auto;
+
+ .carta-container {
+ min-height: 32px;
+ max-height: 400px;
+ }
+ }
+
+ .carta-font-code {
+ font-family: 'Fira Code', monospace;
+ caret-color: white;
+ font-size: 1.1rem;
+ }
+
+ .carta-toolbar {
+ display: none;
+ }
+
+ .discord-plus-icon {
+ position: absolute;
+ top: 15px;
+ left: -24px;
+ width: 1.75rem;
+ height: 1.75rem;
+ transform: translateX(-50%) translateY(-50%);
+ }
+ }
+
+ // Plugin emoji
+ &.carta-emoji {
+ width: 18rem;
+ max-height: 14rem;
+ overflow-y: scroll;
+ border-radius: 4px;
+ font-family: inherit;
+ background-color: $background;
+ padding: 6px;
+ scroll-padding: 6px;
+ gap: 6px;
+ }
+
+ &.carta-emoji button {
+ background: $background-light;
+
+ aspect-ratio: 1;
+ border-radius: 4px;
+ border: 0;
+ padding: 0;
+
+ cursor: pointer;
+
+ font-size: 1.2rem;
+ line-height: 100%;
+ }
+
+ &.carta-emoji button:hover,
+ &.carta-emoji button.carta-active {
+ background: $background-contrast;
+ }
+}
+
+html.dark .shiki,
+html.dark .shiki span {
+ color: var(--shiki-dark) !important;
+}
diff --git a/docs/src/lib/styles/github.scss b/docs/src/lib/styles/github.scss
new file mode 100644
index 0000000..7d2b961
--- /dev/null
+++ b/docs/src/lib/styles/github.scss
@@ -0,0 +1,203 @@
+.carta-theme__github {
+ // Core styles
+ $background: #0d1117;
+ $background-light: #161b22;
+ $border: #2b3138;
+ $accent: #1f6feb;
+
+ &.carta-editor {
+ background-color: $background;
+ border: 1px solid $border;
+ border-radius: 0.5rem;
+
+ &:focus-within {
+ outline: 2px solid $accent;
+ }
+
+ .carta-wrapper {
+ padding: 1rem;
+ flex-grow: 1;
+ overflow-y: auto;
+
+ .carta-container {
+ min-height: 120px;
+ max-height: 160px;
+ }
+ }
+
+ .carta-font-code {
+ font-family: 'Fira Code', monospace;
+ caret-color: white;
+ font-size: 1.1rem;
+ }
+
+ .carta-toolbar {
+ height: 2.5rem;
+
+ background-color: $background-light;
+
+ border-top-left-radius: 0.5rem;
+ border-top-right-radius: 0.5rem;
+
+ .carta-icon {
+ width: 2rem;
+ height: 2rem;
+
+ &:hover {
+ color: white;
+ background-color: $border;
+ }
+ }
+ }
+
+ .carta-toolbar-left button,
+ .carta-toolbar-right,
+ .carta-filler {
+ border-bottom: 1px solid $border;
+ }
+
+ .carta-toolbar-left {
+ & > *:first-child {
+ border-top-left-radius: 0.5rem;
+ }
+
+ & > * {
+ padding-left: 1rem;
+ padding-right: 1rem;
+ font-size: 0.95rem;
+ }
+
+ button {
+ height: 100%;
+ }
+
+ .carta-active {
+ background-color: $background;
+ color: white;
+
+ border-right: 1px solid $border;
+ border-bottom: 1px solid $background;
+
+ &:not(:first-child) {
+ border-left: 1px solid $border;
+ }
+ }
+ }
+
+ .carta-toolbar-right {
+ padding-right: 12px;
+ }
+
+ .carta-icons-menu {
+ padding: 8px;
+ border: 1px solid $border;
+ border-radius: 6px;
+ min-width: 180px;
+ background: $background;
+
+ .carta-icon-full {
+ padding-left: 6px;
+ padding-right: 6px;
+
+ margin-top: 2px;
+ &:first-child {
+ margin-top: 0;
+ }
+
+ &:hover {
+ color: white;
+ background-color: $border;
+ }
+
+ span {
+ margin-left: 6px;
+ color: white;
+ font-size: 0.85rem;
+ }
+ }
+ }
+ }
+
+ // Plugin emoji
+ &.carta-emoji {
+ width: 18rem;
+ max-height: 14rem;
+ overflow-y: scroll;
+ border-radius: 4px;
+ font-family: inherit;
+ background-color: $background;
+ padding: 6px;
+ scroll-padding: 6px;
+ gap: 6px;
+ }
+
+ &.carta-emoji button {
+ background: $background-light;
+
+ aspect-ratio: 1;
+ border-radius: 4px;
+ border: 0;
+ padding: 0;
+
+ cursor: pointer;
+
+ font-size: 1.2rem;
+ line-height: 100%;
+ }
+
+ &.carta-emoji button:hover,
+ &.carta-emoji button.carta-active {
+ background: $border;
+ }
+
+ // Plugin slash
+ &.carta-slash {
+ width: 18rem;
+ max-height: 14rem;
+ overflow-y: scroll;
+ border-radius: 4px;
+ font-family: inherit;
+ background-color: $background;
+ padding: 6px;
+ scroll-padding: 6px;
+ }
+
+ &.carta-slash span {
+ width: fit-content;
+ }
+
+ &.carta-slash button {
+ background: none;
+ width: 100%;
+ padding: 10px;
+ border: 0;
+ border-radius: 4px;
+ }
+
+ &.carta-slash .carta-slash-group {
+ padding: 0 4px 0 4px;
+ margin-bottom: 4px;
+ font-size: 0.8rem;
+ }
+
+ &.carta-slash button.carta-active,
+ &.carta-slash button:hover {
+ background: $background-light;
+ cursor: pointer;
+ }
+
+ &.carta-slash .carta-snippet-title {
+ font-size: 0.85rem;
+ font-weight: 600;
+ }
+
+ &.carta-slash .carta-snippet-description {
+ font-size: 0.8rem;
+ text-overflow: ellipsis;
+ }
+}
+
+html.dark .shiki,
+html.dark .shiki span {
+ color: var(--shiki-dark) !important;
+}
diff --git a/docs/src/lib/styles/markdown.scss b/docs/src/lib/styles/markdown.scss
new file mode 100644
index 0000000..61eb539
--- /dev/null
+++ b/docs/src/lib/styles/markdown.scss
@@ -0,0 +1,63 @@
+.markdown {
+ & {
+ @apply text-[1.05rem] leading-7 text-neutral-400;
+ }
+
+ h1 {
+ @apply mb-4 mt-8 text-4xl font-bold text-white first:mt-0;
+ }
+
+ h2 {
+ @apply mb-4 mt-8 text-3xl font-semibold text-white first:mt-0;
+ }
+
+ h3 {
+ @apply mb-3 mt-7 text-2xl font-medium text-white first:mt-0;
+ }
+
+ h4 {
+ @apply mb-3 mt-3 text-lg font-medium text-white first:mt-0;
+ }
+
+ h1,
+ h2,
+ h3,
+ h4 {
+ @apply scroll-mt-16;
+ }
+
+ blockquote {
+ @apply mb-3 text-lg italic text-neutral-300;
+ }
+
+ li {
+ @apply ml-4 list-disc;
+ }
+
+ strong {
+ @apply text-neutral-300;
+ }
+
+ a:not(h1 > a, h2 > a, h3 > a, h4 > a, .bg-card) {
+ @apply text-sky-300 underline;
+ }
+
+ code {
+ @apply rounded bg-neutral-800 px-1 text-neutral-50;
+ }
+
+ p,
+ h1,
+ h2,
+ h3 {
+ code {
+ @apply px-1;
+ }
+ }
+
+ .carta-editor code {
+ font-family: 'Fira Code', monospace;
+ background: transparent;
+ padding: 0;
+ }
+}
diff --git a/docs/src/lib/styles/math-stack-exchange.scss b/docs/src/lib/styles/math-stack-exchange.scss
new file mode 100644
index 0000000..1354a4e
--- /dev/null
+++ b/docs/src/lib/styles/math-stack-exchange.scss
@@ -0,0 +1,108 @@
+.math-stack-exchange-container {
+ background-color: #252526;
+ border-radius: 0.25rem;
+}
+
+.carta-theme__math-stack-exchange {
+ // Core styles
+ $background: #252526;
+ $background-light: #333333;
+ $border: #333333;
+ $accent: #2e8acb;
+
+ &.carta-editor {
+ background-color: $background;
+ border: 1px solid $border;
+ border-radius: 0.25rem;
+
+ .carta-wrapper {
+ padding: 1rem;
+ flex-grow: 1;
+ overflow-y: auto;
+ border-bottom-left-radius: 0.25rem;
+ border-bottom-right-radius: 0.25rem;
+
+ &:focus-within {
+ outline: 3px solid rgba($accent, 0.5);
+ }
+
+ .carta-container {
+ height: 200px;
+ }
+ }
+
+ .carta-font-code {
+ font-family: 'Fira Code', monospace;
+ caret-color: white;
+ font-size: 1.1rem;
+ }
+
+ .carta-toolbar {
+ height: 2.5rem;
+
+ background-color: $background-light;
+ border-bottom: 1px solid $border;
+
+ padding-right: 12px;
+ border-top-left-radius: 0.25rem;
+ border-top-right-radius: 0.25rem;
+
+ .carta-icon {
+ width: 2rem;
+ height: 2rem;
+
+ &:hover {
+ color: white;
+ background-color: $border;
+ }
+ }
+ }
+
+ .carta-toolbar-left {
+ display: none;
+ }
+
+ .carta-toolbar-right {
+ justify-content: flex-start;
+ }
+ }
+
+ .carta-icons-menu {
+ padding: 8px;
+ border: 1px solid $border;
+ border-radius: 6px;
+ min-width: 180px;
+ background: $background;
+
+ .carta-icon-full {
+ padding-left: 6px;
+ padding-right: 6px;
+
+ margin-top: 2px;
+ &:first-child {
+ margin-top: 0;
+ }
+
+ &:hover {
+ color: white;
+ background-color: $border;
+ }
+
+ span {
+ margin-left: 6px;
+ color: white;
+ font-size: 0.85rem;
+ }
+ }
+ }
+
+ &.carta-viewer {
+ min-height: 60px;
+ padding: 1rem;
+ }
+}
+
+html.dark .shiki,
+html.dark .shiki span {
+ color: var(--shiki-dark) !important;
+}
diff --git a/docs/src/lib/utils.ts b/docs/src/lib/utils.ts
new file mode 100644
index 0000000..d2b288e
--- /dev/null
+++ b/docs/src/lib/utils.ts
@@ -0,0 +1,94 @@
+import { type ClassValue, clsx } from 'clsx';
+import { twMerge } from 'tailwind-merge';
+import { cubicOut } from 'svelte/easing';
+import type { TransitionConfig } from 'svelte/transition';
+
+export function cn(...inputs: ClassValue[]) {
+ return twMerge(clsx(inputs));
+}
+
+type FlyAndScaleParams = {
+ y?: number;
+ x?: number;
+ start?: number;
+ duration?: number;
+};
+
+export const flyAndScale = (
+ node: Element,
+ params: FlyAndScaleParams = { y: -8, x: 0, start: 0.95, duration: 150 }
+): TransitionConfig => {
+ const style = getComputedStyle(node);
+ const transform = style.transform === 'none' ? '' : style.transform;
+
+ const scaleConversion = (valueA: number, scaleA: [number, number], scaleB: [number, number]) => {
+ const [minA, maxA] = scaleA;
+ const [minB, maxB] = scaleB;
+
+ const percentage = (valueA - minA) / (maxA - minA);
+ const valueB = percentage * (maxB - minB) + minB;
+
+ return valueB;
+ };
+
+ const styleToString = (style: Record): string => {
+ return Object.keys(style).reduce((str, key) => {
+ if (style[key] === undefined) return str;
+ return str + `${key}:${style[key]};`;
+ }, '');
+ };
+
+ return {
+ duration: params.duration ?? 200,
+ delay: 0,
+ css: (t) => {
+ const y = scaleConversion(t, [0, 1], [params.y ?? 5, 0]);
+ const x = scaleConversion(t, [0, 1], [params.x ?? 0, 0]);
+ const scale = scaleConversion(t, [0, 1], [params.start ?? 0.95, 1]);
+
+ return styleToString({
+ transform: `${transform} translate3d(${x}px, ${y}px, 0) scale(${scale})`,
+ opacity: t
+ });
+ },
+ easing: cubicOut
+ };
+};
+
+export const throttle = (
+ fn: (...args: A) => R,
+ delay: number
+): [(...args: A) => R | undefined, () => void] => {
+ let wait = false;
+ let timeout: undefined | number;
+ let cancelled = false;
+
+ return [
+ (...args: A) => {
+ if (cancelled) return undefined;
+ if (wait) return undefined;
+
+ const val = fn(...args);
+
+ wait = true;
+
+ timeout = window.setTimeout(() => {
+ wait = false;
+ }, delay);
+
+ return val;
+ },
+ () => {
+ cancelled = true;
+ clearTimeout(timeout);
+ }
+ ];
+};
+
+export function debounce(cb: (...args: T) => unknown, wait = 1000) {
+ let timeout: NodeJS.Timeout;
+ return (...args: T) => {
+ clearTimeout(timeout);
+ timeout = setTimeout(() => cb(...args), wait);
+ };
+}
diff --git a/docs/src/pages/api/core.svelte.md b/docs/src/pages/api/core.svelte.md
new file mode 100644
index 0000000..62163f9
--- /dev/null
+++ b/docs/src/pages/api/core.svelte.md
@@ -0,0 +1,173 @@
+---
+section: API
+title: Core
+---
+
+
+
+# `Carta` options
+
+List of options that can be used when creating `Carta`:
+
+```ts
+new Carta({
+ /* ... */
+});
+```
+
+### `gfmOptions`
+
+Type: `GfmOptions`
+
+GitHub Flavored Markdown options.
+
+### `extensions`
+
+Type: `Extension[]`
+
+List of extensions(plugins) to use.
+
+### `rendererDebounce`
+
+Type: `number`
+
+Rendering debouncing timeout, in milliseconds.
+Defaults to 300ms.
+
+### `disableShortcuts`
+
+Type: `DefaultShortcutId[] | true`
+
+Remove default shortcuts by id. You can use `true` to disable all of them.
+
+### `disableIcons`
+
+Type: `DefaultIconId[] | true`
+
+Remove default icons by id. You can use `true` to disable all of them.
+
+### `disablePrefixes`
+
+Type: `DefaultPrefixId[] | true`
+
+Remove default prefixes by id. You can use `true` to disable all of them.
+
+### `historyOptions`
+
+History management options.
+
+#### `historyOptions.minInterval`
+
+Type: `number`
+
+Minimum interval between save states in milliseconds.
+Defaults to 300ms.
+
+#### `historyOptions.maxSize`
+
+Type: `number`
+
+Maximum history size in bytes.
+Defaults to 1MB.
+
+### `sanitizer`
+
+Type: `(html: string) => void`
+
+HTML sanitizer. See [here]({base}/getting-started#sanitization) for more details.
+
+### `shikiOptions`
+
+Type: `ShikiOptions`
+
+Highlighter(Shiki) options.
+
+### `theme`
+
+Type: `Theme | DualTheme`
+
+Shiki theme to use to highlight Markdown.
+
+# `MarkdownEditor` options
+
+List of options that can be used in the `` component.
+
+### `carta`
+
+Type: `Carta`
+
+Carta manager to use for this editor.
+
+### `theme`
+
+Type: `string`
+
+The theme of this editor. The editor and related elements will have the `carta-theme__` as a class.
+
+### `value`
+
+Type: `string`
+
+Current Markdown input value.
+
+### `mode`
+
+Type: `'tabs' | 'split' | 'auto'`
+
+Editor windows mode. With `auto` it will split when the window size is greater than 768px.
+
+### `scroll`
+
+Type: `'sync' | 'async'`
+
+Scroll synchronization.
+
+### `disableToolbar`
+
+Type: `boolean`
+
+Option to disable the toolbar.
+
+### `placeholder`
+
+Type: `string`
+
+Set the textarea placeholder.
+
+### `textarea`
+
+Type: `TextAreaProps` (extends `Record`)
+
+Additional properties that will be used in the textarea used under the hood in the editor.
+`class`, `placeholder` and `value` are not allowed. Use the corresponding editor properties
+instead.
+
+### `labels`
+
+Type: `Partial`
+
+Can be used to provide custom text for labels in the editor.
+
+# `Markdown` options
+
+List of options that can be used in the `` component.
+
+### `carta`
+
+Type: `Carta`
+
+Carta manager to use for this editor.
+
+### `theme`
+
+Type: `string`
+
+The theme of this editor. The viewer and related elements will have the `carta-theme__` as a class.
+
+### `value`
+
+Type: `string`
+
+Current Markdown input value.
diff --git a/docs/src/pages/api/extension.svelte.md b/docs/src/pages/api/extension.svelte.md
new file mode 100644
index 0000000..f39da6a
--- /dev/null
+++ b/docs/src/pages/api/extension.svelte.md
@@ -0,0 +1,263 @@
+---
+section: API
+title: Extension
+---
+
+
+
+# `Plugin` properties
+
+You can easily extend Carta by creating custom plugins.
+
+
+
+```ts
+const ext: Plugin = {
+ // ...
+};
+
+const carta = new Carta({
+ extensions: [ext]
+});
+```
+
+
+
+Here are all the `Plugin` properties:
+
+### `transformers`
+
+Type: `UnifiedTransformer`
+
+Remark or Rehype transformers.
+
+#### `UnifiedTransformer.execution`
+
+Type: `'sync' | 'async'`
+
+If you specify async, this transformer won't be available for SSR.
+
+#### `UnifiedTransformer.type`
+
+Type: `'remark' | 'rehype'`
+
+This determines at which step the transformer will operate, whether on Remark, on a Markdown-based syntax tree, or Rehype, on a HTML-based one.
+
+#### `UnifiedTransformer.transform`
+
+Type: `({ processor, carta }) => void`
+
+The actual processor, can be async if the execution is specified as such.
+
+
+
+```ts
+{
+ execution: 'sync',
+ type: 'rehype',
+ transform({ processor }) {
+ processor
+ .use(rehypeSlug)
+ .use(rehypeAutolinkHeadings);
+ }
+}
+```
+
+
+
+### `shortcuts`
+
+Type: `KeyboardShortcut[]`
+
+Additional keyboards shortcut. For example:
+
+
+
+```ts
+const shortcut: KeyboardShortcut = {
+ id: 'bold',
+ combination: new Set(['control', 'b']),
+ action: (input) => input.toggleSelectionSurrounding('**')
+};
+```
+
+
+
+#### `KeyboardShortcut.id`
+
+Type: `string`
+
+Id of the shortcut.
+
+#### `KeyboardShortcut.combination`
+
+Type: `Set`
+
+Set of keys, corresponding to the `e.key` of `KeyboardEvent`s, but lowercase.
+
+#### `KeyboardShortcut.action`
+
+Type: `(input: InputEnhancer) => void`
+
+Shortcut callback.
+
+#### `KeyboardShortcut.preventSave`
+
+Prevent saving the current state in history.
+
+### `icons`
+
+Type: `Icon[]`
+
+Additional toolbar icons. For example:
+
+
+
+```ts
+const icon: Icon = {
+ id: 'heading',
+ action: (input) => input.toggleLinePrefix('###'),
+ component: HeadingIcon
+};
+```
+
+
+
+#### `Icon.id`
+
+Type: `string`
+
+Id of the icon.
+
+#### `Icon.action`
+
+Type: `(input: InputEnhancer) => void`
+
+Click callback.
+
+#### `Icon.component`
+
+Type: `ComponentType` (SvelteComponent)
+
+The Icon as a Svelte component.
+
+### `prefixes`
+
+Type: `Prefix[]`
+
+Text prefixes, default ones include the `- ` for bulleted lists, `1. ` for numbered lists, `- [ ]` for task lists.
+
+
+
+```ts
+const prefix: Prefix = {
+ id: 'bulletedList',
+ match: (line) => {
+ const prefix = line.slice(0, 2);
+ if (prefix === '- ') return prefix;
+ },
+ maker: () => '- '
+};
+```
+
+
+
+#### `Prefix.id`
+
+Type: `string`
+
+Id of the prefix.
+
+#### `Prefix.match`
+
+Type: `(line: string) => string | undefined`
+
+Function that returns the prefix, if it is present.
+
+#### `Prefix.maker`
+
+Type: `(previousMatch: string, previousLine: string) => string`
+
+Function that returns the prefix for the new line.
+
+Example:
+
+
+
+```ts
+const prefix: Prefix = {
+ id: 'numberedList',
+ match: (line) => line.match(/^\d+\./)?.at(0),
+ maker: (prev) => `${Number(prev.slice(0, -1)) + 1}. `
+};
+```
+
+
+
+### `listeners`
+
+Type: `Listener[]`
+
+Textarea event listeners. Has an additional `carta-render` and `carta-render-ssr` events keys.
+
+
+
+```ts
+const click: Listener = ['click', () => console.log('I was clicked!')];
+const render: Listener = [
+ 'carta-render',
+ (e) => {
+ const carta = e.detail.carta;
+ // ...
+ },
+ {
+ once: true
+ }
+];
+```
+
+
+
+### `components`
+
+Type: `ExtensionComponent[]`
+
+Additional components to be added to the editor or viewer.
+
+#### `ExtensionComponent.component`
+
+Type: `typeof SvelteComponentTyped`
+
+Svelte components that exports `carta: Carta` and all the other properties specified as the generic parameter and in `props`.
+
+#### `ExtensionComponent.props`
+
+Type: `T`
+
+Properties that will be handed to the component.
+
+#### `ExtensionComponent.parent`
+
+Type: `MaybeArray<'editor' | 'input' | 'renderer' | 'preview'>`
+
+Where the element will be placed.
+
+### `grammarRules`
+
+Type: `GrammarRule[]`
+
+Custom Markdown TextMate grammar rules for Shiki. They will be injected into the language.
+
+### `highlightRules`
+
+Type: `HighlightingRule[]`
+
+Custom highlighting rules for ShiKi. They will be injected into the selected theme.
+
+### `onLoad`
+
+Type: `(data: { carta: Carta; highlight: HighlightFunctions }) => void`
+
+Use this callback to execute code when one Carta instance loads the extension.
diff --git a/docs/src/pages/api/utilities.svelte.md b/docs/src/pages/api/utilities.svelte.md
new file mode 100644
index 0000000..273796f
--- /dev/null
+++ b/docs/src/pages/api/utilities.svelte.md
@@ -0,0 +1,91 @@
+---
+section: API
+title: Utilities
+---
+
+## `Carta.render`
+
+Allows you to render Markdown asynchronously.
+
+```ts
+const carta = new Carta({
+ /* ... */
+});
+const markdown = '# Some Markdown';
+const html = await carta.render(markdown);
+```
+
+## `Carta.renderSSR`
+
+Allows you to render Markdown synchronously, suitable for Server Side Rendering. Note that particular extensions that add content asynchronously will not work in this configuration.
+
+```ts
+const carta = new Carta({
+ /* ... */
+});
+const markdown = '# Some Markdown';
+const html = carta.renderSSR(markdown);
+```
+
+## `Carta.bindToCaret`
+
+Svelte action that allows you to bind a specific element to the caret position. Used, for example, in `plugin-emoji` and `plugin-slash`.
+
+```svelte
+
+
+
+
+
+```
+
+## `Carta.highlighter`
+
+Get the Shiki highlighter.
+
+```ts
+const highlighter = await carta.highlighter();
+const userTheme = carta.theme;
+```
+
+Here are some other highlight related utilities:
+
+### `isBundleLanguage`
+
+Checks if a language is a bundled language.
+
+```ts
+export const isBundleLanguage = (lang: string): lang is BundledLanguage;
+```
+
+### `isBundleTheme`
+
+Checks if a theme is a bundled theme.
+
+```ts
+export const isBundleTheme = (theme: string): theme is BundledTheme;
+```
+
+### `isDualTheme`
+
+Checks if a theme is a dual theme.
+
+```ts
+export const isDualTheme = (theme: Theme | DualTheme): theme is DualTheme;
+```
+
+### `isSingleTheme`
+
+```ts
+export const isSingleTheme = (theme: Theme | DualTheme): theme is Theme;
+```
+
+### `isThemeRegistration`
+
+Checks if a theme is a theme registration.
+
+```ts
+export const isThemeRegistration = (theme: Theme): theme is ThemeRegistration;
+```
diff --git a/docs/src/pages/community-plugins.svelte.md b/docs/src/pages/community-plugins.svelte.md
new file mode 100644
index 0000000..c30ce68
--- /dev/null
+++ b/docs/src/pages/community-plugins.svelte.md
@@ -0,0 +1,83 @@
+---
+title: Community Plugins
+section: Overview
+---
+
+
+
+Here are is a list of several plugins developed by the community:
+
+
+
+### `carta-plugin-video`
+
+
+
+> Adds ability to render online video from Youtube or Vimeo.
+
+
+
+```
+npm i carta-plugin-video
+```
+
+
+
+
+
+### `carta-plugin-imsize`
+
+
+
+> Adds ability to render images in specific sizes.
+
+
+
+```
+npm i carta-plugin-imsize
+```
+
+
+
+
+
+### `carta-plugin-ins-del`
+
+
+
+> `` and `` tags support
+
+
+
+```
+npm i carta-plugin-ins-del
+```
+
+
+
+
+
+### `carta-plugin-subscript`
+
+
+
+> Adds ability to render subscripts and superscripts.
+
+
+
+```
+npm i carta-plugin-subscript
+```
+
+
diff --git a/docs/src/pages/editing-styles.svelte.md b/docs/src/pages/editing-styles.svelte.md
new file mode 100644
index 0000000..81736ed
--- /dev/null
+++ b/docs/src/pages/editing-styles.svelte.md
@@ -0,0 +1,111 @@
+---
+title: Editing Styles
+section: Overview
+---
+
+
+
+## Customizing editor styles
+
+While the core styles are embedded in the Svelte components, the others can be set in a custom stylesheet. Here is what the final rendered HTML looks like.
+
+
+
+```html
+
+```
+
+
+
+### Using multiple themes
+
+By using the `theme` property in `` you can differentiate the themes of multiple editors.
+
+## Dark mode
+
+When using dark mode, there are two different themes that have to be changed: the editor theme and the one used for syntax highlighting:
+
+
+
+```css
+/* Editor dark mode */
+/* Only if you are using the default theme */
+html.dark .carta-theme__default {
+ --border-color: var(--border-color-dark);
+ --selection-color: var(--selection-color-dark);
+ --focus-outline: var(--focus-outline-dark);
+ --hover-color: var(--hover-color-dark);
+ --caret-color: var(--caret-color-dark);
+ --text-color: var(--text-color-dark);
+}
+
+/* Code dark mode */
+/* Only if you didn't specify a custom code theme */
+html.dark .shiki,
+html.dark .shiki span {
+ color: var(--shiki-dark) !important;
+}
+```
+
+
+
+## Changing Markdown input color theme
+
+Carta uses [Shiki](https://shiki.matsu.io/) for syntax highlighting. Two default themes are included in the core package, which are set as a [dual theme](https://shiki.matsu.io/guide/dual-themes) to support light and dark mode. If you plan to use a custom one with light/dark modes, make sure to use a dual theme as well.
+
+You can change theme in the options:
+
+
+
+```ts
+const carta = new Carta({
+ // ...
+ theme: 'github-dark'
+});
+```
+
+
+
+If you use a [custom theme](https://shiki.matsu.io/guide/load-theme)(or a custom language), you need to provide it inside the options, so that it gets loaded into the highlighter:
+
+
+
+```ts
+const carta = new Carta({
+ // ...
+ shikiOptions: {
+ langs: // ...
+ themes: // ...
+ }
+})
+```
+
+
+
+## Markdown stylesheets
+
+Markdown is converted into standard HTML, so you can edit the final styles by using standard CSS rules. If you do not wish to create one from the ground up, you can use some already complete stylesheets, like [github-markdown-css](https://github.com/sindresorhus/github-markdown-css) or [Tailwind Typography](https://tailwindcss.com/docs/typography-plugin).
diff --git a/docs/src/pages/examples.svelte.md b/docs/src/pages/examples.svelte.md
new file mode 100644
index 0000000..dcdd61e
--- /dev/null
+++ b/docs/src/pages/examples.svelte.md
@@ -0,0 +1,33 @@
+---
+title: Examples
+section: Overview
+---
+
+
+
+Here is a list of examples made using Carta and some of its plugins.
+
+## GitHub
+
+
+
+
+Plugins used: code, slash, emoji, attachment. View source on [GitHub](https://github.com/BearToCode/carta/blob/master/docs/src/lib/examples/GitHubExample.svelte).
+
+## Discord
+
+
+
+
+Plugins used: code, emoji. View source on [GitHub](https://github.com/BearToCode/carta/blob/master/docs/src/lib/examples/DiscordExample.svelte).
+
+## Math Stack Exchange
+
+
+
+
+Plugins used: math, tikz. View source on [GitHub](https://github.com/BearToCode/carta/blob/master/docs/src/lib/examples/MathStackExchangeExample.svelte).
diff --git a/docs/src/pages/getting-started.svelte.md b/docs/src/pages/getting-started.svelte.md
new file mode 100644
index 0000000..81b7662
--- /dev/null
+++ b/docs/src/pages/getting-started.svelte.md
@@ -0,0 +1,108 @@
+---
+title: Getting Started
+section: Overview
+---
+
+
+
+## Installation
+
+Installing the core package:
+
+
+
+```
+npm i carta-md
+```
+
+
+
+Installing plugins:
+
+
+
+```
+npm i @cartamd/plugin-name
+```
+
+
+
+## Setup
+
+Setup a basic editor:
+
+
+
+```svelte
+
+
+
+
+
+```
+
+
+
+Or, if you just want to render content:
+
+
+
+```svelte
+
+
+
+```
+
+
+
+## Sanitization
+
+By default Carta does **not** sanitize user input, which can include malicious code that could lead to [XSS attacks](https://en.wikipedia.org/wiki/Cross-site_scripting). For this reason it is _strongly recommended_ to install a package that handles that for you.
+
+Since Carta operates both on the server and the client, you'd need a sanitizer able to work in both environments, for example [isomorphic-dompurify](https://www.npmjs.com/package/isomorphic-dompurify) or [sanitize-html](https://www.npmjs.com/package/sanitize-html). Here is an example using the former, which requires minimum configuration.
+
+
+
+```svelte
+
+
+
+```
+
+
diff --git a/docs/src/pages/introduction.svelte.md b/docs/src/pages/introduction.svelte.md
new file mode 100644
index 0000000..12e0af9
--- /dev/null
+++ b/docs/src/pages/introduction.svelte.md
@@ -0,0 +1,130 @@
+---
+title: Carta
+section: Overview
+---
+
+
+
+> Modern, lightweight, powerful Markdown Editor.
+
+Carta is a lightweight, fast and extensible Svelte Markdown editor and viewer, designed for flexibility. It works natively in SvelteKit, and supports Server Side Rendering.
+
+## Features
+
+- ๐ Markdown syntax highlighting ([Shiki](https://shiki.style/));
+- ๐ ๏ธ Toolbar (extensible);
+- โจ๏ธ Keyboard **shortcuts** (extensible);
+- ๐ฆ Supports **[+150 plugins](https://github.com/remarkjs/remark/blob/main/doc/plugins.md#list-of-plugins)** thanks to remark.
+- ๐ Scroll sync;
+- โ
Accessibility friendly;
+- ๐ฅ๏ธ **SSR** compatible;
+
+## Official Plugins
+
+Carta comes with a set of official plugins for the most common use cases.
+
+
+
+
+
+
+
+
+Math
+Support for KaTex expressions.
+
+
+
+
+
+
+Code
+Code blocks syntax highlighting.
+
+
+
+
+
+
+Emoji
+Embed emojis in Markdown.
+
+
+
+
+
+
+Slash
+Support for slash commands.
+
+
+
+
+
+
+TikZ
+Support for TikZ/PgfPlots diagrams.
+
+
+
+
+
+
+Attachment
+Handle text attachments.
+
+
+
+
+
+
+Anchor
+Add anchor links to headings.
+
+
+
+
+
+
+Community Plugins
+Explore plugins from the community.
+
+
+
+
+
+## Examples
+
+A list of examples inspired by popular platforms.
+
+
+
+
+
+
+
+
+GitHub
+Inspired by GitHub.
+
+
+
+
+
+
+Discord
+Inspired by Discord.
+
+
+
+
+
+
+Math Stack Exchange
+Inspired by Math Stack Exchange.
+
+
+
+
diff --git a/docs/src/pages/migration.svelte.md b/docs/src/pages/migration.svelte.md
new file mode 100644
index 0000000..72d25dc
--- /dev/null
+++ b/docs/src/pages/migration.svelte.md
@@ -0,0 +1,57 @@
+---
+title: Migration Guide
+section: Overview
+---
+
+# Major Changes
+
+## Removal of Marked
+
+Marked has been replaced with a combination of Unified, Remark and Rehype. If you previously used a custom plugin with it, you'll have to update it manually. Otherwise, all builtin plugins have already been updated. Make sure to **update** them!
+
+Some plugins now have a different implementation and their options have changed. Those plugins are [plugin-math](https://beartocode.github.io/carta/plugins/math) and [plugin-anchor](https://beartocode.github.io/carta/plugins/anchor).
+
+## Syntax highlighter update
+
+SpeedHighlight has been replaced with [Shiki](https://shiki.matsu.io/). It now offers support for more languages, themes, and extensibility.
+
+Make sure to remove previous themes imports, as Shiki uses JS based ones.
+
+```ts
+import 'carta-md/light.css'; // ๐ To be removed!
+```
+
+And also update the default theme. Previous based selectors should be removed:
+
+```css
+/* ๐ To be removed! */
+[class*='shj-lang-'] {
+ /* ... */
+}
+```
+
+## Removed verbose prefixes
+
+Many exports have been renamed to make them less verbose:
+
+- `CartaEditor` -> `MarkdownEditor` (old one still supported);
+- `CartaRenderer` -> `Markdown` (old one still supported);
+- `CartaEvent` -> `Event`;
+- `CartaEventType` -> `EventType`;
+- `CartaExtension` -> `Plugin`;
+- `CartaExtensionComponent` -> `ExtensionComponent`;
+- `CartaOptions` -> `Options`;
+- `CartaHistory` -> `TextAreaHistory`;
+- `CartaHistoryOptions` -> `TextAreaHistoryOptions`;
+- `CartaIcon` -> `Icon`;
+- `CartaListener` -> `Listener`;
+- `CartaInput` -> `InputEnhancer`;
+- `CartaRenderer` -> `Renderer`;
+- `CartaLabels` -> `Labels`;
+
+# Minor Changes
+
+- If you don't use a sanitizer, you need to explicitly set it to `false`;
+- Removed deprecated option `cartaRef` and `shjRef` for extensions;
+- Removed deprecated options `postProcess` for `plugin-tikz`;
+- `Carta.options` are no longer available.
diff --git a/docs/src/pages/plugins/anchor.svelte.md b/docs/src/pages/plugins/anchor.svelte.md
new file mode 100644
index 0000000..4b17150
--- /dev/null
+++ b/docs/src/pages/plugins/anchor.svelte.md
@@ -0,0 +1,70 @@
+---
+section: Plugins
+title: Anchor
+---
+
+
+
+This plugin adds `id` attributes and permalinks to headings.
+
+## Installation
+
+
+
+```
+npm i @cartamd/plugin-anchor
+```
+
+
+
+## Setup
+
+### Styles
+
+Import the default theme, or create you own:
+
+
+
+```ts
+import '@cartamd/plugin-anchor/default.css';
+```
+
+
+
+### Extension
+
+
+
+```svelte
+
+
+
+```
+
+
+
+## Options
+
+Here are the options you can pass to `anchor()`:
+
+```ts
+export interface AnchorExtensionOptions {
+ /**
+ * rehype-slug options.
+ */
+ slug?: SlugOptions;
+ /**
+ * rehype-autolink-headings options.
+ */
+ autolink?: AutolinkOptions;
+}
+```
diff --git a/docs/src/pages/plugins/attachment.svelte.md b/docs/src/pages/plugins/attachment.svelte.md
new file mode 100644
index 0000000..bbd0eca
--- /dev/null
+++ b/docs/src/pages/plugins/attachment.svelte.md
@@ -0,0 +1,91 @@
+---
+section: Plugins
+title: Attachment
+---
+
+
+
+This plugin adds support for attachments.
+
+## Installation
+
+```
+npm i @cartamd/plugin-attachment
+```
+
+## Setup
+
+### Styles
+
+Import the default theme, or create you own:
+
+
+
+```ts
+import '@cartamd/plugin-attachment/default.css';
+```
+
+
+
+### Extension
+
+
+
+```svelte
+
+
+
+```
+
+
+
+## Options
+
+Here are the options you can pass to `attachment()`:
+
+```ts
+export interface AttachmentExtensionOptions {
+ /**
+ * Upload a file to the server. Return the url of the uploaded file.
+ * If an error occurs, return null. This function does **not** handle errors.
+ * @param file The file to upload
+ * @returns The uploaded file url, or null if it failed
+ */
+ upload: (file: File) => Promise;
+ /**
+ * Supported mime types.
+ *
+ * @default ['image/png', 'image/jpeg', 'image/gif', 'image/svg+xml'].
+ */
+ supportedMimeTypes?: string[];
+ /**
+ * Whether to disable the attach icon.
+ *
+ * @default false
+ */
+ disableIcon?: boolean;
+ /**
+ * Custom drop overlay component. Use `false` to disable the overlay.
+ */
+ dropOverlay?: false | typeof SvelteComponent;
+ /**
+ * Custom loading overlay component. Use `false` to disable the overlay.
+ */
+ loadingOverlay?: false | typeof SvelteComponent<{ uploadingFiles: Writable }>;
+}
+```
diff --git a/docs/src/pages/plugins/code.svelte.md b/docs/src/pages/plugins/code.svelte.md
new file mode 100644
index 0000000..d1c2c82
--- /dev/null
+++ b/docs/src/pages/plugins/code.svelte.md
@@ -0,0 +1,80 @@
+---
+section: Plugins
+title: Code
+---
+
+
+
+This plugin adds support for code blocks **syntax highlighting**. It uses the same highlighter from the core package(Shiki).
+
+## Installation
+
+
+
+```
+npm i @cartamd/plugin-code
+```
+
+
+
+## Setup
+
+### Styles
+
+Import the default styles:
+
+
+
+```ts
+import '@cartamd/plugin-code/default.css';
+```
+
+
+
+### Using the default highlighter
+
+Carta comes with a default highlighter that matches the one used to highlight markdown in the editor and is used by default (Shiki). If you want to use a theme different from the one used to highlight Markdown, you can specify it in the options.
+
+
+
+```ts
+const carta = new Carta({
+ // ...
+ extensions: [
+ code({
+ theme: 'ayu-light'
+ })
+ ]
+});
+```
+
+
+
+### Using a custom highlighter
+
+It is no longer possible to specify a custom highlighter in this plugin. However, there are many different [Remark plugins](https://github.com/remarkjs/remark/blob/main/doc/plugins.md#list-of-plugins) that provide syntax highlighting.
+
+### Extension
+
+
+
+```svelte
+
+
+
+```
+
+
+
+## Options
+
+The options you can pass to `code()` extend the ones provided by [Shiki](https://shiki.matsu.io/guide/transformers).
diff --git a/docs/src/pages/plugins/emoji.svelte.md b/docs/src/pages/plugins/emoji.svelte.md
new file mode 100644
index 0000000..e7162bd
--- /dev/null
+++ b/docs/src/pages/plugins/emoji.svelte.md
@@ -0,0 +1,70 @@
+---
+section: Plugins
+title: Emoji
+---
+
+
+
+This plugin adds support for **Emojis**.
+
+## Installation
+
+
+
+```
+npm i @cartamd/plugin-emoji
+```
+
+
+
+## Setup
+
+### Styles
+
+Import the default theme, or create you own:
+
+
+
+```ts
+import '@cartamd/plugin-emoji/default.css';
+```
+
+
+
+### Extension
+
+
+
+```svelte
+
+
+
+```
+
+
+
+## Options
+
+Here are the options you can pass to `emoji()`:
+
+```ts
+export interface EmojiExtensionOptions {
+ /**
+ * Custom in transition. See https://svelte.dev/docs#run-time-svelte-transition.
+ */
+ inTransition?: (node: Element) => TransitionConfig;
+ /**
+ * Custom out transition. See https://svelte.dev/docs#run-time-svelte-transition.
+ */
+ outTransition?: (node: Element) => TransitionConfig;
+}
+```
diff --git a/docs/src/pages/plugins/math.svelte.md b/docs/src/pages/plugins/math.svelte.md
new file mode 100644
index 0000000..7d4cc5c
--- /dev/null
+++ b/docs/src/pages/plugins/math.svelte.md
@@ -0,0 +1,160 @@
+---
+section: Plugins
+title: Math
+---
+
+
+
+This plugins adds support for [KaTeX](https://katex.org/) expressions.
+
+## Installation
+
+
+
+```
+npm i @cartamd/plugin-math
+```
+
+
+
+## Setup
+
+### Styles
+
+You need to get access to the katex **stylesheet**,
+to do so, you can either install katex using:
+
+
+
+```
+npm i katex
+```
+
+
+
+and then adding this import to your app:
+
+
+
+```ts
+import 'katex/dist/katex.css';
+```
+
+
+
+or by using a content delivery network:
+
+
+
+```html
+
+```
+
+
+
+### Extension
+
+
+
+```svelte
+
+
+
+```
+
+
+
+## Usage
+
+Inline:
+
+
+
+```
+Pythagorean theorem: $a^2+b^2=c^2$
+```
+
+
+
+
+
+
+
+Block:
+
+
+
+```
+$$
+ \\mathcal{L}\\{f\\}(s) = \\int_0^{\\infty} {f(t)e^{-st}dt}
+$$
+```
+
+
+
+
+
+## Options
+
+Here are the options you can pass to `math()`:
+
+```ts
+interface MathExtensionOptions {
+ /**
+ * Options for inline katex, eg: $a^2+b^2=c^2$
+ */
+ inline?: {
+ /**
+ * @default control+m
+ */
+ shortcut?: Set;
+ };
+ /**
+ * Option for block katex, eg:
+ * $$
+ * a^2+b^2=c^2
+ * $$
+ */
+ block?: {
+ /**
+ * @default ctrl+shift+m
+ */
+ shortcut?: Set;
+ };
+ /**
+ * Options for remark-math
+ */
+ remarkMath?: RemarkMathOptions;
+ /**
+ * Options for rehype-katex
+ */
+ rehypeKatex?: RehypeKatexOptions;
+}
+```
diff --git a/docs/src/pages/plugins/slash.svelte.md b/docs/src/pages/plugins/slash.svelte.md
new file mode 100644
index 0000000..5593a72
--- /dev/null
+++ b/docs/src/pages/plugins/slash.svelte.md
@@ -0,0 +1,78 @@
+---
+section: Plugins
+title: Slash
+---
+
+
+
+This plugin adds support for **Slash** commands.
+
+## Installation
+
+
+
+```
+npm i @cartamd/plugin-slash
+```
+
+
+
+## Setup
+
+### Styles
+
+Import the default theme, or create you own:
+
+
+
+```ts
+import '@cartamd/plugin-slash/default.css';
+```
+
+
+
+### Extension
+
+
+
+```svelte
+
+
+
+```
+
+
+
+## Options
+
+Here are the options you can pass to `slash()`:
+
+```ts
+export interface SlashExtensionOptions {
+ /**
+ * List of default snippets to disable.
+ */
+ disableDefaultSnippets?: DefaultSnippetId[] | true;
+ /**
+ * Additional snippets.
+ */
+ snippets?: SlashSnippet[];
+ /**
+ * Custom in transition. See https://svelte.dev/docs#run-time-svelte-transition.
+ */
+ inTransition?: (node: Element) => TransitionConfig;
+ /**
+ * Custom out transition. See https://svelte.dev/docs#run-time-svelte-transition.
+ */
+ outTransition?: (node: Element) => TransitionConfig;
+}
+```
diff --git a/docs/src/pages/plugins/tikz.svelte.md b/docs/src/pages/plugins/tikz.svelte.md
new file mode 100644
index 0000000..c878f8a
--- /dev/null
+++ b/docs/src/pages/plugins/tikz.svelte.md
@@ -0,0 +1,71 @@
+---
+section: Plugins
+title: TikZ
+---
+
+
+
+This plugin adds support for **PGF/TikZ** illustrations thanks to [TikZJax](https://tikzjax.com/). It uses the code generated for the [Obsidian-TikZ plugin](https://github.com/artisticat1/obsidian-tikzjax).
+
+
+
+```
+npm i @cartamd/plugin-tikz
+```
+
+
+
+## Important Notes
+
+1. This plugin requires the import of a **heavy** library (~7Mb), which is dynamically imported at runtime;
+2. Generated images are **not SSR compatible**, as they are rendered in the browser;
+3. You need to update your sanitizer to allow the specific tag: ``.
+
+## Setup
+
+
+
+```svelte
+
+
+
+```
+
+
+
+## Options
+
+Here are the options you can pass to `tikz()`:
+
+```ts
+interface TikzExtensionOptions {
+ /**
+ * Enables Tikzjax console output.
+ */
+ debug?: boolean;
+ /**
+ * Class for generated svg div container.
+ */
+ class?: string;
+ /**
+ * Whether to center the generated expression.
+ * @default true
+ */
+ center?: boolean;
+ /**
+ * Post processing function for html.
+ * This also runs on stored html.
+ */
+ postProcessing?: (html: string) => string;
+}
+```
diff --git a/docs/src/pages/using-components.svelte.md b/docs/src/pages/using-components.svelte.md
new file mode 100644
index 0000000..f301c51
--- /dev/null
+++ b/docs/src/pages/using-components.svelte.md
@@ -0,0 +1,217 @@
+---
+title: Using Svelte Components
+section: Overview
+---
+
+
+
+Svelte components can be embedded into the rendered HTML to make certain elements interactive. However, they require a bit more work, as Remark is configured to only render static HTML. To get around this, the idea is to do the following:
+
+1. Create a Unified plugin to isolate the targeted element;
+2. Replace all the elements with the component, after every render.
+
+## Example
+
+Let's say we want to replace all hashtags, such as `#something`, with a custom component. Here is as example of how that could be achieved.
+
+### Parsing the hashtags
+
+First things first: we need to tell the parser that we want to parse hashtags as custom elements. To do this, it's useful to first install the following packages:
+
+
+
+```shell
+npm i unist-util-visit
+# Types
+npm i -D unified hast
+```
+
+
+
+Let's create a Unified plugin. The basic structure of a plugin is the following:
+
+
+
+```ts
+import type { Plugin as UnifiedPlugin } from 'unified'
+import { SKIP, visit } from 'unist-util-visit'
+
+const unifiedPlugin: UnifiedPlugin<[], hast.Root> = () => {
+ return function (tree) {
+ // Visit every node in the syntax tree
+ visit(tree, (node, index, parent) => {
+ // Do something with the node
+ }
+ }
+}
+```
+
+
+
+We now want to parse text nodes, so that words such as `#pizza` and `#123` are separated from the rest. This is a possible implementation:
+
+
+
+```ts
+const unifiedPlugin: UnifiedPlugin<[], hast.Root> = () => {
+ return function (tree) {
+ visit(tree, (node, index, parent) => {
+ // Skip code blocks and their children
+ if (node.type === 'element' && node.tagName === 'pre') return [SKIP];
+ // Skip non-text nodes
+ if (node.type !== 'text') return;
+ const text = node as hast.Text;
+
+ // Parse the text node and replace hashtags with spans
+ const regex = /#(\w+)/g;
+ const children: (hast.Element | hast.Text)[] = [];
+ let lastIndex = 0;
+ let match;
+ while ((match = regex.exec(text.value))) {
+ const before = text.value.slice(lastIndex, match.index);
+ if (before) {
+ children.push({ type: 'text', value: before });
+ }
+ children.push({
+ type: 'element',
+ tagName: 'span',
+ properties: { type: 'hashtag', value: match[1] },
+ children: [{ type: 'text', value: match[0] }]
+ });
+ lastIndex = regex.lastIndex;
+ }
+ if (lastIndex < text.value.length) {
+ children.push({ type: 'text', value: text.value.slice(lastIndex) });
+ }
+
+ // Replace the text node with all the children
+ parent!.children.splice(index!, 1, ...children);
+
+ // Skip the children
+ return [SKIP, index! + children.length];
+ });
+ };
+};
+```
+
+
+
+If you want a more in-depth guide on writing Unified plugins, you can check out the official [documentation](https://unifiedjs.com/learn/guide/create-a-plugin/).
+
+Notice that hashtags are now replaced with the following:
+
+```html
+
#pizza
+```
+
+### Configuring the transformer
+
+Unified plugins need to be wrapped inside a `UnifiedTransformer` type, to be able to be used in Carta.
+
+
+
+```ts
+import type { UnifiedTransformer } from 'carta-md';
+
+const hashtagTransformer: UnifiedTransformer<'sync'> = {
+ execution: 'sync', // Sync, since the plugin is synchronous
+ type: 'rehype', // Rehype, since it operates on HTML
+ transform({ processor }) {
+ processor.use(unifiedPlugin);
+ }
+};
+```
+
+
+
+### Mounting the components
+
+We now want to replace the generated hashtag placeholders with the following element:
+
+
+
+```svelte
+
+
+
+ {
+ console.log('Hashtag clicked!');
+ }}
+>
+ #{value}
+
+```
+
+
+
+To do that, we create a listener that:
+
+1. Finds all the previous placeholders;
+2. Mounts the component next to them;
+3. Removes the placeholders.
+
+
+
+```ts
+import type { Listener } from 'carta-md';
+import Hashtag from './Hashtag.svelte';
+
+const convertHashtags: Listener<'carta-render'> = [
+ 'carta-render',
+ function onRender({ detail: { carta } }) {
+ const rendererContainer = carta.renderer?.container;
+ if (!rendererContainer) return;
+
+ // Find all hashtag spans and replace them with Svelte components
+ const hashtagSpans = rendererContainer.querySelectorAll('span[type="hashtag"]');
+ for (const span of hashtagSpans) {
+ const hashtag = span.getAttribute('value') ?? '';
+
+ new Hashtag({
+ target: span.parentElement!,
+ anchor: span,
+ props: { value: hashtag }
+ });
+
+ span.remove();
+ }
+ }
+];
+```
+
+
+
+### Using the plugin
+
+Let's now create a Plugin with the transformer and the listener:
+
+
+
+```ts
+import type { Plugin } from 'carta-md';
+
+export const hashtag = (): Plugin => ({
+ transformers: [hashtagTransformer],
+ listeners: [convertHashtags]
+});
+```
+
+
+
+We can now use the plugin with the following:
+
+```ts
+import { Carta } from 'carta-md';
+
+const carta = new Carta({
+ // ...
+ extensions: [hashtag()]
+});
+```
+
+You can find the example source code [here](https://github.com/BearToCode/svelte-in-carta-example).
diff --git a/docs/src/routes/+layout.svelte b/docs/src/routes/+layout.svelte
new file mode 100644
index 0000000..723f83f
--- /dev/null
+++ b/docs/src/routes/+layout.svelte
@@ -0,0 +1,29 @@
+
+
+
+
+
diff --git a/docs/src/routes/+layout.ts b/docs/src/routes/+layout.ts
new file mode 100644
index 0000000..a4c5a95
--- /dev/null
+++ b/docs/src/routes/+layout.ts
@@ -0,0 +1,3 @@
+import 'iconify-icon'; // Register iconify web components
+
+export const prerender = true;
diff --git a/docs/src/routes/+page.svelte b/docs/src/routes/+page.svelte
new file mode 100644
index 0000000..ac2153e
--- /dev/null
+++ b/docs/src/routes/+page.svelte
@@ -0,0 +1,9 @@
+
diff --git a/docs/src/routes/[...slug]/+page.server.ts b/docs/src/routes/[...slug]/+page.server.ts
new file mode 100644
index 0000000..3b3b4ac
--- /dev/null
+++ b/docs/src/routes/[...slug]/+page.server.ts
@@ -0,0 +1,23 @@
+import type { SvelteComponent } from 'svelte';
+import type { PageServerLoad } from './$types';
+import { error } from '@sveltejs/kit';
+import { base } from '$app/paths';
+
+export const load: PageServerLoad = async (event) => {
+ const pages = import.meta.glob('../../pages/**/*.svelte.md');
+ const path = event.url.pathname.slice(base.length).slice(1);
+ const match = pages[`../../pages/${path}.svelte.md`];
+ if (!match) throw error(404, 'Not found');
+
+ const Markdown = (await match()) as {
+ default: SvelteComponent;
+ metadata: Record
;
+ };
+ const content = Markdown.default.render();
+ const metadata = Markdown.metadata;
+
+ return {
+ content,
+ metadata
+ };
+};
diff --git a/docs/src/routes/[...slug]/+page.svelte b/docs/src/routes/[...slug]/+page.svelte
new file mode 100644
index 0000000..449ea7b
--- /dev/null
+++ b/docs/src/routes/[...slug]/+page.svelte
@@ -0,0 +1,51 @@
+
+
+
+ {data.metadata['title']} - Carta
+
+
+{data.metadata['section']}
+
+{data.metadata['title']}
+
+
+ {#if clientSideComponent}
+
+ {:else}
+ {#key $page.url}
+
+ {@html data.content.html}
+ {/key}
+ {/if}
+
diff --git a/docs/static/background.png b/docs/static/background.png
new file mode 100644
index 0000000..d10b065
Binary files /dev/null and b/docs/static/background.png differ
diff --git a/docs/static/favicon.png b/docs/static/favicon.png
new file mode 100644
index 0000000..02cdc60
Binary files /dev/null and b/docs/static/favicon.png differ
diff --git a/docs/static/logo-small.png b/docs/static/logo-small.png
new file mode 100644
index 0000000..8481411
Binary files /dev/null and b/docs/static/logo-small.png differ
diff --git a/docs/static/logo.png b/docs/static/logo.png
new file mode 100644
index 0000000..a496221
Binary files /dev/null and b/docs/static/logo.png differ
diff --git a/demo/svelte.config.js b/docs/svelte.config.js
similarity index 61%
rename from demo/svelte.config.js
rename to docs/svelte.config.js
index c3da9f2..3f812da 100644
--- a/demo/svelte.config.js
+++ b/docs/svelte.config.js
@@ -1,11 +1,15 @@
+import mdsvexConfig from './mdsvex.config.js';
import adapter from '@sveltejs/adapter-static';
-import { vitePreprocess } from '@sveltejs/kit/vite';
+import { mdsvex } from 'mdsvex';
+import { vitePreprocess } from '@sveltejs/vite-plugin-svelte';
/** @type {import('@sveltejs/kit').Config} */
const config = {
+ extensions: ['.svelte', ...mdsvexConfig.extensions],
+
// Consult https://kit.svelte.dev/docs/integrations#preprocessors
// for more information about preprocessors
- preprocess: vitePreprocess(),
+ preprocess: [vitePreprocess(), mdsvex(mdsvexConfig)],
kit: {
adapter: adapter({
diff --git a/docs/tailwind.config.js b/docs/tailwind.config.js
new file mode 100644
index 0000000..e1ff2a1
--- /dev/null
+++ b/docs/tailwind.config.js
@@ -0,0 +1,59 @@
+/** @type {import('tailwindcss').Config} */
+const config = {
+ darkMode: 'class',
+ content: ['./src/**/*.{html,js,svelte,ts,md}'],
+ safelist: ['dark'],
+ theme: {
+ container: {
+ center: true,
+ padding: '2rem',
+ screens: {
+ '2xl': '1400px'
+ }
+ },
+ extend: {
+ colors: {
+ border: 'hsl(var(--border) / )',
+ input: 'hsl(var(--input) / )',
+ ring: 'hsl(var(--ring) / )',
+ background: 'hsl(var(--background) / )',
+ foreground: 'hsl(var(--foreground) / )',
+ primary: {
+ DEFAULT: 'hsl(var(--primary) / )',
+ foreground: 'hsl(var(--primary-foreground) / )'
+ },
+ secondary: {
+ DEFAULT: 'hsl(var(--secondary) / )',
+ foreground: 'hsl(var(--secondary-foreground) / )'
+ },
+ destructive: {
+ DEFAULT: 'hsl(var(--destructive) / )',
+ foreground: 'hsl(var(--destructive-foreground) / )'
+ },
+ muted: {
+ DEFAULT: 'hsl(var(--muted) / )',
+ foreground: 'hsl(var(--muted-foreground) / )'
+ },
+ accent: {
+ DEFAULT: 'hsl(var(--accent) / )',
+ foreground: 'hsl(var(--accent-foreground) / )'
+ },
+ popover: {
+ DEFAULT: 'hsl(var(--popover) / )',
+ foreground: 'hsl(var(--popover-foreground) / )'
+ },
+ card: {
+ DEFAULT: 'hsl(var(--card) / )',
+ foreground: 'hsl(var(--card-foreground) / )'
+ }
+ },
+ borderRadius: {
+ lg: 'var(--radius)',
+ md: 'calc(var(--radius) - 2px)',
+ sm: 'calc(var(--radius) - 4px)'
+ }
+ }
+ }
+};
+
+export default config;
diff --git a/demo/tsconfig.json b/docs/tsconfig.json
similarity index 100%
rename from demo/tsconfig.json
rename to docs/tsconfig.json
diff --git a/demo/vite.config.ts b/docs/vite.config.ts
similarity index 100%
rename from demo/vite.config.ts
rename to docs/vite.config.ts
diff --git a/package.json b/package.json
index f525ec7..85b8d68 100644
--- a/package.json
+++ b/package.json
@@ -11,12 +11,11 @@
"scripts": {
"preinstall": "npx only-allow pnpm",
"core": "cd packages/carta-md && npm run dev",
- "dev": "cd demo && npm run dev",
"check": "cd packages/carta-md && npm run check",
"build": "node scripts/build.js",
"publish": "node scripts/publish.js",
- "lint": "prettier --plugin-search-dir . --check . && eslint .",
- "format": "prettier --plugin-search-dir . --write .",
+ "lint": "prettier --check . && eslint .",
+ "format": "prettier --write .",
"prepare": "husky install",
"commit": "cz"
},
@@ -32,13 +31,14 @@
"husky": "^8.0.3",
"lint-staged": "^13.2.2",
"ora": "^6.3.0",
- "prettier": "^2.8.8",
- "prettier-plugin-svelte": "^2.10.0",
+ "prettier": "3.1.0",
+ "prettier-plugin-svelte": "^3.1.0",
+ "prettier-plugin-tailwindcss": "^0.5.7",
"semantic-release": "^20.1.3",
"semantic-release-monorepo": "^7.0.5"
},
"lint-staged": {
- "*.{js,ts,svelte}": "eslint --cache --fix",
+ "*.{js,ts,svelte}": "eslint --cache --fix --no-error-on-unmatched-pattern",
"*.{js,ts,css,md,svelte,html,yml,json,cjs}": "prettier --write"
},
"config": {
@@ -53,13 +53,5 @@
"@semantic-release/npm",
"@semantic-release/github"
]
- },
- "pnpm": {
- "overrides": {
- "@adobe/css-tools@<4.3.1": ">=4.3.1",
- "semver@>=7.0.0 <7.5.2": ">=7.5.2",
- "postcss@<8.4.31": ">=8.4.31",
- "undici@<5.26.2": ">=5.26.2"
- }
}
}
diff --git a/packages/carta-md/README.md b/packages/carta-md/README.md
index 5be5154..2b4495b 100644
--- a/packages/carta-md/README.md
+++ b/packages/carta-md/README.md
@@ -1,42 +1,88 @@
+
+
+[](https://beartocode.github.io/carta/)
+
+Carta
+Modern, lightweight, powerful Markdown Editor.
+
-
+# Introduction
-
+> **NOTE**:
+> Carta has recently been updated to `v4`, which features numerous major changes.
+>
+> Follow the [Migration Guide](http://beartocode.github.io/carta/migration) to update your project.
-Carta is a **lightweight**, **fast** and **extensible** Svelte Markdown editor and viewer, based on [Marked](https://github.com/markedjs/marked). Check out the [demo](http://beartocode.github.io/carta/) to see it in action.
-Differently from most editors, Carta includes neither ProseMirror nor CodeMirror, allowing for an extremely small bundle size and fast loading time.
+Carta is a **lightweight**, **fast** and **extensible** Svelte Markdown editor and viewer. It is powered by [unified](https://github.com/unifiedjs/unified), [remark](https://github.com/remarkjs/remark) and [rehype](https://github.com/rehypejs/rehype). Check out the [examples](http://beartocode.github.io/carta/examples) to see it in action.
+Differently from most editors, Carta does not include a code editor, but it is _just_ a textarea with syntax highlighting, shortcuts and more.
## Features
-- Keyboard **shortcuts** (extensible);
-- Toolbar (extensible);
-- Markdown syntax highlighting;
-- Scroll sync;
-- **SSR** compatible;
-- **Katex** support (plugin);
-- **Slash** commands (plugin);
-- **Emojis**, with included search (plugin);
-- **Tikz** support(plugin);
-- **Attachment** support(plugin);
-- Code blocks **syntax highlighting** (plugin).
+- ๐ Markdown syntax highlighting ([Shiki](https://shiki.style/));
+- ๐ ๏ธ Toolbar (extensible);
+- โจ๏ธ Keyboard **shortcuts** (extensible);
+- ๐ฆ Supports **[150+ plugins](https://github.com/remarkjs/remark/blob/main/doc/plugins.md#list-of-plugins)** thanks to remark;
+- ๐ Scroll sync;
+- โ
Accessibility friendly;
+- ๐ฅ๏ธ **SSR** compatible;
+- โ๏ธ **KaTeX** support (plugin);
+- ๐จ **Slash** commands (plugin);
+- ๐ **Emojis**, with included search (plugin);
+- โ๏ธ **TikZ** support (plugin);
+- ๐ **Attachment** support (plugin);
+- โ **Anchor** links in headings (plugin);
+- ๐ Code blocks **syntax highlighting** (plugin).
-## Getting started
+## Packages
-> **Warning**
+| Package | Status | Docs |
+| ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ---------------------------------------------------------------------------- |
+| [carta-md](https://www.npmjs.com/package/carta-md) |  | [/](https://beartocode.github.io/carta/introduction) |
+| [plugin-math](https://www.npmjs.com/package/@cartamd/plugin-math) |  | [/plugins/math](https://beartocode.github.io/carta/plugins/math) |
+| [plugin-code](https://www.npmjs.com/package/@cartamd/plugin-code) |  | [/plugins/code](https://beartocode.github.io/carta/plugins/code) |
+| [plugin-emoji](https://www.npmjs.com/package/@cartamd/plugin-emoji) |  | [/plugins/emoji](https://beartocode.github.io/carta/plugins/emoji) |
+| [plugin-slash](https://www.npmjs.com/package/@cartamd/plugin-slash) |  | [/plugins/slash](https://beartocode.github.io/carta/plugins/slash) |
+| [plugin-tikz](https://www.npmjs.com/package/@cartamd/plugin-tikz) |  | [/plugins/tikz](https://beartocode.github.io/carta/plugins/tikz) |
+| [plugin-attachment](https://www.npmjs.com/package/@cartamd/plugin-attachment) |  | [/plugins/attachment](https://beartocode.github.io/carta/plugins/attachment) |
+| [plugin-anchor](https://www.npmjs.com/package/@cartamd/plugin-anchor) |  | [/plugins/anchor](https://beartocode.github.io/carta/plugins/anchor) |
+
+## Community plugins
+
+| Plugin | Description |
+| ----------------------------------------------------------------------------- | ---------------------------------- |
+| [carta-plugin-video](https://github.com/maisonsmd/carta-plugin-video) | Render online videos |
+| [carta-plugin-imsize](https://github.com/maisonsmd/carta-plugin-imsize) | Render images in specific sizes |
+| [carta-plugin-subscript](https://github.com/maisonsmd/carta-plugin-subscript) | Render subscripts and superscripts |
+| [carta-plugin-ins-del](https://github.com/maisonsmd/carta-plugin-ins-del) | `` and `` tags support |
+
+# Getting started
+
+> **WARNING**
> Sanitization is not dealt with by Carta. You need to provide a `sanitizer` in the options.
> Common sanitizers are [isomorphic-dompurify](https://www.npmjs.com/package/isomorphic-dompurify) (suggested) and [sanitize-html](https://www.npmjs.com/package/sanitize-html).
+> Checkout the documentation for an example.
-### Installation
+## Installation
Core package:
@@ -50,15 +96,13 @@ Plugins:
npm i @cartamd/plugin-name
```
-### Basic configuration
+## Basic configuration
```svelte
-
+
```
-Editor component exported properties:
+# Documentation
-| Name | Type | Description |
-| ---------------- | ----------------------------- | ----------------------------------------- |
-| `carta` | `Carta` | Carta Editor |
-| `theme` | `string` | For custom css themes, see below for more |
-| `value` | `string` | Markdown input |
-| `placeholder` | `string` | Placeholder text for textarea |
-| `mode` | `'tabs' \| 'split' \| 'auto'` | Tabs settings |
-| `disableToolbar` | `boolean` | Option to disable the toolbar |
+For the full documentation, examples, guides and more checkout the [website](https://beartocode.github.io/carta/).
-### Plugins
+- [Introduction](https://beartocode.github.io/carta/introduction)
+- [Examples](https://beartocode.github.io/carta/examples)
+- [Getting Started](https://beartocode.github.io/carta/getting-started)
+- [Editing Styles](https://beartocode.github.io/carta/editing-styles)
+- Plugins:
+ - [Math](https://beartocode.github.io/carta/plugins/math)
+ - [Code](https://beartocode.github.io/carta/plugins/code)
+ - [Emoji](https://beartocode.github.io/carta/plugins/emoji)
+ - [Slash](https://beartocode.github.io/carta/plugins/slash)
+ - [TikZ](https://beartocode.github.io/carta/plugins/tikz)
+ - [Attachment](https://beartocode.github.io/carta/plugins/attachment)
+ - [Anchor](https://beartocode.github.io/carta/plugins/anchor)
+- API:
+ - [Utilities](https://beartocode.github.io/carta/api/utilities)
+ - [Core](https://beartocode.github.io/carta/api/core)
+ - [Extension](https://beartocode.github.io/carta/api/extension)
-Each plugin's _readme_ includes a guide on its use.
-
-| Name | Description |
-| ----------------------------------------------------------------------------------------------- | --------------------------------------- |
-| [plugin-math](https://github.com/BearToCode/carta/tree/master/packages/plugin-math) | Katex support |
-| [plugin-slash](https://github.com/BearToCode/carta/tree/master/packages/plugin-slash) | Slash commands support |
-| [plugin-emoji](https://github.com/BearToCode/carta/tree/master/packages/plugin-emoji) | Emojis support, including inline search |
-| [plugin-code](https://github.com/BearToCode/carta/tree/master/packages/plugin-code) | Code blocks syntax highlighting |
-| [plugin-tikz](https://github.com/BearToCode/carta/tree/master/packages/plugin-tikz) | TikZ support using TikZJax |
-| [plugin-attachment](https://github.com/BearToCode/carta/tree/master/packages/plugin-attachment) | Attachments support |
-
-## Themes customization
-
-By using the `theme` property in `CartaEditor` and `CartaPreview` you can change their classes to `carta-editor__{theme}` and `carta-viewer__{theme}`.
-
-Check out the [default theme](https://github.com/BearToCode/carta/blob/master/packages/carta-md/src/lib/default.css) to customize it.
-
-If you are using a plugin, look at its _readme_ for its customization.
-
-Markdown highlighting is done using **Speed Highlight JS**, [here](https://github.com/speed-highlight/core/tree/main/src/themes) you can find more themes.
-
-You can find complete Markdown stylesheet online. For example [github-markdown-css](https://github.com/sindresorhus/github-markdown-css)(used in the demo), or [tailwind-typography](https://tailwindcss.com/docs/typography-plugin).
-
-## Extensibility
-
-### Options
-
-Carta options:
-
-| Name | Type | Description |
-| ------------------ | ------------------------------ | ----------------------------------------------- |
-| `extensions` | `CartaExtension[]` | Editor/viewer extensions |
-| `rendererDebounce` | `number` | Renderer debouncing timeout, in ms (def. 300ms) |
-| `disableShortcuts` | `DefaultShortcutId[] \| true` | Remove default shortcuts by ids |
-| `disableIcons` | `DefaultIconId[] \| true` | Remove default icons by ids |
-| `disablePrefixes` | `DefaultPrefixId[] \| true` | Remove default prefixes by ids |
-| `historyOptions` | `Partial` | History (Undo/Redo) options |
-| `sanitizer` | `(html: string) => string` | HTML sanitizer |
-
-You can easily extend Carta by creating custom plugins. Here are all the `CartaExtension` properties:
-
-| Name | Type | Description |
-| ------------------ | -------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `markedExtensions` | `marked.MarkedExtension[]` | Marked extensions, more on that [here](https://marked.js.org/using_advanced) |
-| `shortcuts` | `KeyboardShortcut[]` | Additional keyboard shortcuts |
-| `icons` | `CartaIcon[]` | Additional icons |
-| `prefixes` | `Prefix[]` | Additional prefixes |
-| `listeners` | `CartaListener[]` | Textarea event listeners |
-| `components` | `CartaExtensionComponents` | Additional components, that will be put after the editor. All components are given a `carta: Carta`. prop The editor has a `relative` position, so you can position elements absolutely |
-| `highlightRules` | `HighlightRule[]` | Custom markdown highlight rules. See [Speed-Highlight Wiki](https://github.com/speed-highlight/core/wiki/Create-or-suggest-new-languages). |
-| `onLoad` | `(data: { carta:Carta, ... }) => void` | Use this callback to execute code when one Carta instance loads the extension. |
-
-If you created a plugin and want to share it, you can open an _issue_ and we will consider sponsoring it on this guide.
-
-## Contributions
+# Contributing & Development
Every contribution is well accepted. If you have a feature request you can open a new issue.
@@ -159,3 +158,12 @@ npm run commit
# or, if you have commitizen installed globally
git cz
```
+
+### Running docs
+
+If you want to preview the docs:
+
+```
+cd docs
+npm run dev
+```
diff --git a/packages/carta-md/package.json b/packages/carta-md/package.json
index 30eaff3..bc074ef 100644
--- a/packages/carta-md/package.json
+++ b/packages/carta-md/package.json
@@ -14,10 +14,7 @@
"svelte": "./dist/index.js",
"import": "./dist/index.js"
},
- "./default.css": "./dist/default.css",
- "./default-theme.css": "./dist/default.css",
- "./light.css": "./dist/light.css",
- "./dark.css": "./dist/dark.css"
+ "./default.css": "./dist/default.css"
},
"version": "3.0.0",
"scripts": {
@@ -27,18 +24,23 @@
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch"
},
"devDependencies": {
- "@sveltejs/adapter-auto": "^1.0.0-next.90",
- "@sveltejs/kit": "^1.0.0-next.587",
- "@sveltejs/package": "^2.0.2",
- "svelte-check": "^3.2.0",
+ "@sveltejs/adapter-auto": "^3.1.1",
+ "@sveltejs/kit": "^2.5.4",
+ "@sveltejs/package": "^2.3.0",
+ "@sveltejs/vite-plugin-svelte": "^3.0.2",
+ "svelte-check": "^3.6.7",
"tslib": "^2.4.1",
"typescript": "^5.1.6",
- "typescript-plugin-css-modules": "^5.0.1"
+ "vite": "^5.1.6"
},
"type": "module",
"dependencies": {
- "@speed-highlight/core": "1.2.2",
- "marked": "^9.1.5"
+ "rehype-stringify": "^10.0.0",
+ "remark-gfm": "^4.0.0",
+ "remark-parse": "^11.0.0",
+ "remark-rehype": "^11.1.0",
+ "shiki": "^1.4.0",
+ "unified": "^11.0.4"
},
"peerDependencies": {
"svelte": "^3.54.0 || ^4.0.0"
diff --git a/packages/carta-md/src/app.html b/packages/carta-md/src/app.html
index 2f83674..866ddd0 100644
--- a/packages/carta-md/src/app.html
+++ b/packages/carta-md/src/app.html
@@ -1,4 +1,4 @@
-
+
diff --git a/packages/carta-md/src/lib/CartaViewer.svelte b/packages/carta-md/src/lib/Markdown.svelte
similarity index 68%
rename from packages/carta-md/src/lib/CartaViewer.svelte
rename to packages/carta-md/src/lib/Markdown.svelte
index db6d3c6..25d3971 100644
--- a/packages/carta-md/src/lib/CartaViewer.svelte
+++ b/packages/carta-md/src/lib/Markdown.svelte
@@ -1,6 +1,6 @@
-
+
{@html rendered}
{#if mounted}
diff --git a/packages/carta-md/src/lib/CartaEditor.svelte b/packages/carta-md/src/lib/MarkdownEditor.svelte
similarity index 70%
rename from packages/carta-md/src/lib/CartaEditor.svelte
rename to packages/carta-md/src/lib/MarkdownEditor.svelte
index 9595047..8e8cb33 100644
--- a/packages/carta-md/src/lib/CartaEditor.svelte
+++ b/packages/carta-md/src/lib/MarkdownEditor.svelte
@@ -1,9 +1,12 @@
+ *
+ *
+ *
+ *
+ *
+ * ```
+ */
+ public bindToCaret(element: HTMLElement, portal = document.querySelector('body') as HTMLElement) {
+ let callback: (() => void) | undefined;
+
+ if (this.input)
+ callback = this.input.$bindToCaret(element, { portal, editorElement: this.element }).destroy;
+
+ // Bind the element later, when the input is ready
+ this.elementsToBind.push({ elem: element, portal, callback });
+
+ return {
+ destroy: () => {
+ callback && callback();
+ this.elementsToBind = this.elementsToBind.filter((it) => it.elem != element);
+ }
+ };
}
}
diff --git a/packages/carta-md/src/lib/internal/components/Input.svelte b/packages/carta-md/src/lib/internal/components/Input.svelte
new file mode 100644
index 0000000..3874591
--- /dev/null
+++ b/packages/carta-md/src/lib/internal/components/Input.svelte
@@ -0,0 +1,199 @@
+
+
+
+ Press ESC then TAB to move the focus off the field
+
+
+
+
diff --git a/packages/carta-md/src/lib/internal/components/MarkdownInput.svelte b/packages/carta-md/src/lib/internal/components/MarkdownInput.svelte
deleted file mode 100644
index 7cca292..0000000
--- a/packages/carta-md/src/lib/internal/components/MarkdownInput.svelte
+++ /dev/null
@@ -1,127 +0,0 @@
-
-
-
-
-
diff --git a/packages/carta-md/src/lib/internal/components/CartaRenderer.svelte b/packages/carta-md/src/lib/internal/components/Renderer.svelte
similarity index 82%
rename from packages/carta-md/src/lib/internal/components/CartaRenderer.svelte
rename to packages/carta-md/src/lib/internal/components/Renderer.svelte
index c615348..1141749 100644
--- a/packages/carta-md/src/lib/internal/components/CartaRenderer.svelte
+++ b/packages/carta-md/src/lib/internal/components/Renderer.svelte
@@ -8,11 +8,12 @@
export let elem: HTMLDivElement;
export let handleScroll: (e: UIEvent) => void;
+ let mounted = false;
let renderedHtml = carta.renderSSR(value);
const debouncedRenderer = debounce(() => {
carta.render(value).then((rendered) => (renderedHtml = rendered));
- }, carta.options?.rendererDebounce ?? 300);
+ }, carta.rendererDebounce ?? 300);
$: {
// On value updates
@@ -20,15 +21,16 @@
debouncedRenderer();
}
- onMount(() => {
- carta.$setRenderer(elem);
- });
+ onMount(() => carta.$setRenderer(elem));
+ onMount(() => (mounted = true));
{@html renderedHtml}
-
+ {#if mounted}
+
+ {/if}
diff --git a/packages/carta-md/src/lib/internal/components/icons/MenuIcon.svelte b/packages/carta-md/src/lib/internal/components/icons/MenuIcon.svelte
new file mode 100644
index 0000000..88d4ccc
--- /dev/null
+++ b/packages/carta-md/src/lib/internal/components/icons/MenuIcon.svelte
@@ -0,0 +1,6 @@
+
+
+
diff --git a/packages/carta-md/src/lib/internal/highlight.ts b/packages/carta-md/src/lib/internal/highlight.ts
index 5c5a5c9..16cfddf 100644
--- a/packages/carta-md/src/lib/internal/highlight.ts
+++ b/packages/carta-md/src/lib/internal/highlight.ts
@@ -1,90 +1,268 @@
-import { detectLanguage } from '@speed-highlight/core/detect.js';
import {
- highlightText,
- loadLanguage,
- type ShjLanguage,
- type ShjLanguageDefinition
-} from '@speed-highlight/core';
-import type { CartaExtension } from './carta';
-import cartaMarkdown from './shj';
-
-// Workaround to add intellisense
-// eslint-disable-next-line @typescript-eslint/no-empty-interface
-interface Nothing {}
-type Union
= T | (U & Nothing);
-
-type Lang = Union;
+ getHighlighter,
+ type BundledTheme,
+ type ThemeInput,
+ type StringLiteralUnion,
+ type BundledLanguage,
+ type SpecialLanguage,
+ type LanguageInput,
+ type LanguageRegistration,
+ type HighlighterGeneric,
+ bundledLanguages,
+ bundledThemes,
+ type ThemeRegistration
+} from 'shiki';
+import type { Intellisense } from './utils';
/**
- * Highlight text using Speed-Highlight. May return null on error(usually if requested
- * language is not supported).
- * @param text Text to highlight.
- * @param lang Language to use, for example "js" or "c"
- * @param hideLineNumbers Whether to hide line numbering.
- * @returns Highlighted html text.
+ * Custom TextMate grammar rule for the highlighter.
*/
-export async function highlight(
- text: string,
- lang: Lang,
- hideLineNumbers?: boolean
-): Promise {
- try {
- return await highlightText(text, lang, true, { hideLineNumbers: hideLineNumbers ?? true });
- } catch (_) {
- return null;
+export type GrammarRule = {
+ name: string;
+ type: 'block' | 'inline';
+ definition: LanguageRegistration['repository'][string];
+};
+
+/**
+ * Custom TextMate highlighting rule for the highlighter.
+ */
+export type HighlightingRule = {
+ light: NonNullable[number];
+ dark: NonNullable[number];
+};
+
+/**
+ * Shiki options for the highlighter.
+ */
+export type ShikiOptions = {
+ themes?: Array>;
+ langs?: (LanguageInput | StringLiteralUnion | SpecialLanguage)[];
+};
+
+type CustomMarkdownLangName = Awaited<(typeof import('./assets/markdown'))['default']['name']>;
+type DefaultLightThemeName = Awaited<(typeof import('./assets/theme-light'))['default']['name']>;
+type DefaultDarkThemeName = Awaited<(typeof import('./assets/theme-dark'))['default']['name']>;
+export const customMarkdownLangName: CustomMarkdownLangName = 'cartamd';
+export const defaultLightThemeName: DefaultLightThemeName = 'carta-light';
+export const defaultDarkThemeName: DefaultDarkThemeName = 'carta-dark';
+export const loadDefaultTheme = async (): Promise<{
+ light: ThemeRegistration;
+ dark: ThemeRegistration;
+}> => ({
+ light: structuredClone((await import('./assets/theme-light')).default),
+ dark: structuredClone((await import('./assets/theme-dark')).default)
+});
+
+/**
+ * Language for the highlighter.
+ */
+export type Language = Intellisense;
+/**
+ * Theme name for the highlighter.
+ */
+export type ThemeName = Intellisense;
+/**
+ * Theme for the highlighter.
+ */
+export type Theme = ThemeName | ThemeRegistration;
+/**
+ * Dual theme for light and dark mode.
+ */
+export type DualTheme = {
+ light: Theme;
+ dark: Theme;
+};
+
+/**
+ * Options for the highlighter.
+ */
+export type HighlighterOptions = {
+ grammarRules: GrammarRule[];
+ highlightingRules: HighlightingRule[];
+ theme: Theme | DualTheme;
+ shiki?: ShikiOptions;
+};
+
+/**
+ * Loads the highlighter instance, with custom rules and options. Uses Shiki under the hood.
+ * @param rules Custom rules for the highlighter, from plugins.
+ * @param options Custom options for the highlighter.
+ * @returns The highlighter instance.
+ */
+export async function loadHighlighter({
+ grammarRules,
+ highlightingRules,
+ theme,
+ shiki
+}: HighlighterOptions): Promise {
+ // Inject rules into the custom markdown language
+ const injectGrammarRules = (
+ lang: Awaited<(typeof import('./assets/markdown'))['default']>,
+ rules: GrammarRule[]
+ ) => {
+ lang.repository = {
+ ...langDefinition.repository,
+ ...Object.fromEntries(rules.map(({ name, definition }) => [name, definition]))
+ };
+ for (const rule of rules) {
+ if (rule.type === 'block') {
+ lang.repository.block.patterns.unshift({ include: `#${rule.name}` });
+ } else {
+ lang.repository.inline.patterns.unshift({ include: `#${rule.name}` });
+ }
+ }
+ };
+
+ const injectHighlightRules = (theme: ThemeRegistration, rules: HighlightingRule[]) => {
+ if (theme.type === 'light') {
+ theme.tokenColors ||= [];
+ theme.tokenColors.unshift(...rules.map(({ light }) => light));
+ } else {
+ theme.tokenColors ||= [];
+ theme.tokenColors.unshift(...rules.map(({ dark }) => dark));
+ }
+ };
+
+ // Additional themes and languages provided by the user
+ const themes = shiki?.themes ?? [];
+ const langs = shiki?.langs ?? [];
+
+ const highlighter: HighlighterGeneric = await getHighlighter({
+ themes,
+ langs
+ });
+
+ // Custom markdown language
+ const langDefinition = (await import('./assets/markdown')).default;
+ injectGrammarRules(langDefinition, grammarRules);
+ await highlighter.loadLanguage(langDefinition);
+
+ // Custom themes
+ if (isSingleTheme(theme)) {
+ let registration: ThemeRegistration;
+ if (isThemeRegistration(theme)) {
+ registration = theme;
+ } else {
+ registration = (await bundledThemes[theme as BundledTheme]()).default;
+ }
+
+ injectHighlightRules(registration, highlightingRules);
+
+ await highlighter.loadTheme(registration);
+ } else {
+ const { light, dark } = theme;
+
+ let lightRegistration: ThemeRegistration;
+ let darkRegistration: ThemeRegistration;
+
+ if (isThemeRegistration(light)) {
+ lightRegistration = light;
+ } else {
+ lightRegistration = (await bundledThemes[light as BundledTheme]()).default;
+ }
+
+ if (isThemeRegistration(dark)) {
+ darkRegistration = dark;
+ } else {
+ darkRegistration = (await bundledThemes[dark as BundledTheme]()).default;
+ }
+
+ injectHighlightRules(lightRegistration, highlightingRules);
+ injectHighlightRules(darkRegistration, highlightingRules);
+
+ await highlighter.loadTheme(lightRegistration);
+ await highlighter.loadTheme(darkRegistration);
}
+
+ return {
+ theme,
+ lang: customMarkdownLangName,
+ ...highlighter
+ };
+}
+export interface Highlighter extends HighlighterGeneric {
+ /**
+ * The language specified for the highlighter.
+ */
+ theme: Theme | DualTheme;
+ /**
+ * The theme specified for the highlighter.
+ */
+ lang: Language;
}
/**
- * Highlight text using Speed-Highlight with detected language.
- * @param text Text to highlight.
- * @param hideLineNumbers Whether to hide line numbering.
- * @returns Highlighted html text.
+ * Checks if a language is a bundled language.
+ * @param lang The language to check.
+ * @returns Whether the language is a bundled language.
*/
-export async function highlightAutodetect(text: string, hideLineNumbers?: boolean) {
- const lang = await detectLanguage(text);
- return await highlightText(text, lang, true, { hideLineNumbers: hideLineNumbers ?? true });
-}
+export const isBundleLanguage = (lang: string): lang is BundledLanguage =>
+ Object.keys(bundledLanguages).includes(lang);
+/**
+ * Checks if a theme is a bundled theme.
+ * @param theme The theme to check.
+ * @returns Whether the theme is a bundled theme.
+ */
+export const isBundleTheme = (theme: string): theme is BundledTheme =>
+ Object.keys(bundledThemes).includes(theme);
+/**
+ * Checks if a theme is a dual theme.
+ * @param theme The theme to check.
+ * @returns Whether the theme is a dual theme.
+ */
+export const isDualTheme = (theme: Theme | DualTheme): theme is DualTheme =>
+ typeof theme == 'object' && 'light' in theme && 'dark' in theme;
+/**
+ * Checks if a theme is a single theme.
+ * @param theme The theme to check.
+ * @returns Whether the theme is a single theme.
+ */
+export const isSingleTheme = (theme: Theme | DualTheme): theme is Theme => !isDualTheme(theme);
+/**
+ * Checks if a theme is a theme registration.
+ * @param theme The theme to check.
+ * @returns Whether the theme is a theme registration.
+ */
+export const isThemeRegistration = (theme: Theme): theme is ThemeRegistration =>
+ typeof theme == 'object';
/**
- * Load a custom language for reference in highlight rules.
- * @param id Id of the language.
- * @param langModule A module that has the default export set to an array of HighlightRule.
- * @example
- * ```
- * // language.ts
- * import type { HighlightLanguage } from 'carta-md';
- *
- * export default [
- * {
- * match: /helloworld/g,
- * type: 'kwd'
- * }
- * ] satisfies HighlightLanguage;
- * ```
- * And in another file:
- * ```
- * import("./path/to/language")
- * .then(module => Carta.loadCustomLanguage("lang-name", module));
- * ```
+ * Find all nested languages in the markdown text and load them into the highlighter.
+ * @param text Markdown text to parse for nested languages.
+ * @returns The set of nested languages found in the text.
*/
-export function loadCustomLanguage(id: string, langModule: { default: ShjLanguageDefinition }) {
- return loadLanguage(id, langModule);
-}
+const findNestedLanguages = (text: string) => {
+ const languages = new Set();
-export interface HighlightFunctions {
- highlight: typeof highlight;
- highlightAutodetect: typeof highlightAutodetect;
- loadCustomLanguage: typeof loadCustomLanguage;
-}
+ const regex = /```([a-z]+)\n([\s\S]+?)\n```/g;
+ let match: RegExpExecArray | null;
+ while ((match = regex.exec(text))) {
+ languages.add(match[1]);
+ }
+ return languages;
+};
/**
- * Load custom markdown syntax highlighting rules.
- * Automatically called when a Carta instance is created.
- * @param extensions Additional extensions used in Carta.
+ * Load all nested languages found in the markdown text into the highlighter.
+ * @param highlighter The highlighter instance.
+ * @param text The text to parse for nested languages.
+ * @returns Whether the highlighter was updated with new languages.
*/
-export async function loadCustomMarkdown(extensions: CartaExtension[] = []) {
- const highlightRules = extensions.map((ext) => ext.highlightRules ?? []).flat();
- const lang = Array.prototype.concat(cartaMarkdown, highlightRules);
- loadCustomLanguage('cartamd', { default: lang });
-}
+export const loadNestedLanguages = async (highlighter: Highlighter, text: string) => {
+ text = text.replaceAll('\r\n', '\n'); // Normalize line endings
+
+ const languages = findNestedLanguages(text);
+ const loadedLanguages = highlighter.getLoadedLanguages();
+ let updated = false;
+ for (const lang of languages) {
+ if (isBundleLanguage(lang) && !loadedLanguages.includes(lang)) {
+ await highlighter.loadLanguage(lang);
+ loadedLanguages.push(lang);
+ updated = true;
+ }
+ }
+
+ return {
+ updated
+ };
+};
diff --git a/packages/carta-md/src/lib/internal/history.ts b/packages/carta-md/src/lib/internal/history.ts
index 60916d9..450c1a7 100644
--- a/packages/carta-md/src/lib/internal/history.ts
+++ b/packages/carta-md/src/lib/internal/history.ts
@@ -6,20 +6,20 @@ interface HistoryState {
cursor: number;
}
-export interface CartaHistoryOptions {
+export interface TextAreaHistoryOptions {
/**
* Minimum interval between save states in ms.
* @default 300ms
*/
- minInterval: number;
+ minInterval?: number;
/**
* Maximum history size in bytes.
* @default 1MB
*/
- maxSize: number;
+ maxSize?: number;
}
-const defaultHistoryOptions: CartaHistoryOptions = {
+const defaultHistoryOptions: TextAreaHistoryOptions = {
minInterval: 300,
maxSize: 1_000_000
};
@@ -27,11 +27,11 @@ const defaultHistoryOptions: CartaHistoryOptions = {
/**
* Input undo/redo functionality.
*/
-export class CartaHistory {
+export class TextAreaHistory {
private states: HistoryState[] = [];
private currentIndex = -1; // Only <= 0 numbers
- private readonly options: CartaHistoryOptions;
- constructor(options?: Partial) {
+ private readonly options: TextAreaHistoryOptions;
+ constructor(options?: Partial) {
this.options = mergeDefaultInterface(options, defaultHistoryOptions);
}
@@ -79,7 +79,7 @@ export class CartaHistory {
}
this.currentIndex = -1;
- if (latest && Date.now() - latest.timestamp.getTime() <= this.options.minInterval) {
+ if (latest && Date.now() - latest.timestamp.getTime() <= (this.options.minInterval ?? 300)) {
this.states.pop();
}
@@ -94,7 +94,7 @@ export class CartaHistory {
// every char is 2 bytes
size += value.length * 2;
- while (size > this.options.maxSize) {
+ while (size > (this.options.maxSize ?? 1_000_000)) {
const removed = this.states.shift();
if (!removed) break; // This should never happen
size -= removed.value.length * 2;
diff --git a/packages/carta-md/src/lib/internal/icons.ts b/packages/carta-md/src/lib/internal/icons.ts
index 09ff109..f5f8374 100644
--- a/packages/carta-md/src/lib/internal/icons.ts
+++ b/packages/carta-md/src/lib/internal/icons.ts
@@ -1,5 +1,5 @@
import type { ComponentType } from 'svelte';
-import type { CartaInput } from './input';
+import type { InputEnhancer } from './input';
import HeadingIcon from './components/icons/HeadingIcon.svelte';
import ItalicIcon from './components/icons/ItalicIcon.svelte';
import BoldIcon from './components/icons/BoldIcon.svelte';
@@ -14,42 +14,62 @@ import StrikethroughIcon from './components/icons/StrikethroughIcon.svelte';
/**
* Editor toolbar icon information.
*/
-export interface CartaIcon {
+export interface Icon {
+ /**
+ * The icon's unique identifier.
+ */
id: string;
- action: (input: CartaInput) => void;
+ /**
+ * Callback function to execute when the icon is clicked.
+ * @param input InputEnhancer instance
+ */
+ action: (input: InputEnhancer) => void;
+ /**
+ * The icon's component.
+ */
component: ComponentType;
+ /**
+ * The icon's label (used as aria-label).
+ */
+ label?: string;
}
export const defaultIcons = [
{
id: 'heading',
action: (input) => input.toggleLinePrefix('###'),
- component: HeadingIcon
+ component: HeadingIcon,
+ label: 'Heading'
},
{
id: 'bold',
action: (input) => input.toggleSelectionSurrounding('**'),
- component: BoldIcon
+ component: BoldIcon,
+ label: 'Bold'
},
{
id: 'italic',
action: (input) => input.toggleSelectionSurrounding('_'),
- component: ItalicIcon
+ component: ItalicIcon,
+ label: 'Italic'
},
{
id: 'strikethrough',
action: (input) => input.toggleSelectionSurrounding('~~'),
- component: StrikethroughIcon
+ component: StrikethroughIcon,
+ label: 'Strikethrough'
},
{
id: 'quote',
action: (input) => input.toggleLinePrefix('>'),
- component: QuoteIcon
+ component: QuoteIcon,
+ label: 'Quote'
},
{
id: 'code',
action: (input) => input.toggleSelectionSurrounding('`'),
- component: CodeIcon
+ component: CodeIcon,
+ label: 'Code'
},
{
id: 'link',
@@ -59,23 +79,27 @@ export const defaultIcons = [
input.insertAt(position, '(url)');
input.textarea.setSelectionRange(position + 1, position + 4);
},
- component: LinkIcon
+ component: LinkIcon,
+ label: 'Link'
},
{
id: 'bulletedList',
action: (input) => input.toggleLinePrefix('- ', 'detach'),
- component: ListBulletedIcon
+ component: ListBulletedIcon,
+ label: 'Bulleted list'
},
{
id: 'numberedList',
action: (input) => input.toggleLinePrefix('1. ', 'detach'),
- component: ListNumberedIcon
+ component: ListNumberedIcon,
+ label: 'Numbered list'
},
{
id: 'taskList',
action: (input) => input.toggleLinePrefix('- [ ] ', 'detach'),
- component: ListTaskIcon
+ component: ListTaskIcon,
+ label: 'Task list'
}
-] as const satisfies readonly CartaIcon[];
+] as const satisfies readonly Icon[];
-export type DefaultIconId = (typeof defaultIcons)[number]['id'];
+export type DefaultIconId = (typeof defaultIcons)[number]['id'] | 'menu';
diff --git a/packages/carta-md/src/lib/internal/input.ts b/packages/carta-md/src/lib/internal/input.ts
index de3ea9c..13046fc 100644
--- a/packages/carta-md/src/lib/internal/input.ts
+++ b/packages/carta-md/src/lib/internal/input.ts
@@ -1,7 +1,7 @@
-import type { CartaListener } from './carta';
-import { CartaHistory, type CartaHistoryOptions } from './history';
+import type { Listener } from './carta';
import type { Prefix } from './prefixes';
import type { KeyboardShortcut } from './shortcuts';
+import { TextAreaHistory as TextAreaHistory, type TextAreaHistoryOptions } from './history';
import { areEqualSets } from './utils';
/**
@@ -21,17 +21,19 @@ export interface InputSettings {
readonly shortcuts: KeyboardShortcut[];
readonly prefixes: Prefix[];
// eslint-disable-next-line @typescript-eslint/no-explicit-any
- readonly listeners: CartaListener[];
- readonly callback: () => void;
- readonly historyOpts?: Partial;
+ readonly listeners: Listener[];
+ readonly historyOpts?: Partial;
}
-export class CartaInput {
+export class InputEnhancer {
private pressedKeys: Set;
- public readonly history: CartaHistory;
+ private escapePressed = false;
// Used to detect keys that actually changed the textarea value
private onKeyDownValue: string | undefined;
+ public history: TextAreaHistory;
+ public readonly events = new EventTarget();
+
constructor(
public readonly textarea: HTMLTextAreaElement,
public readonly container: HTMLDivElement,
@@ -44,6 +46,7 @@ export class CartaInput {
textarea.addEventListener('focus', () => {
this.pressedKeys.clear();
+ this.escapePressed = false;
});
textarea.addEventListener('blur', () => {
this.pressedKeys.clear();
@@ -51,7 +54,7 @@ export class CartaInput {
textarea.addEventListener('mousedown', this.handleMouseDown.bind(this));
- this.history = new CartaHistory(settings.historyOpts);
+ this.history = new TextAreaHistory(settings.historyOpts);
// Save initial value
this.history.saveState(this.textarea.value, this.textarea.selectionStart);
@@ -113,7 +116,7 @@ export class CartaInput {
// Save state for shortcuts
if (!shortcut.preventSave)
this.history.saveState(this.textarea.value, this.textarea.selectionStart);
- this.settings.callback();
+ this.update();
}
this.onKeyDownValue = undefined;
@@ -122,13 +125,33 @@ export class CartaInput {
if (key === 'enter') {
// Check prefixes
this.handleNewLine(e);
- } else if (key == 'tab') {
+ } else if (key == 'tab' && !this.escapePressed) {
e.preventDefault(); // Don't select other stuff
- const position = this.textarea.selectionStart;
- this.insertAt(this.textarea.selectionStart, '\t');
- this.textarea.selectionStart = position + 1;
- this.textarea.selectionEnd = position + 1;
+
+ if (e.shiftKey) {
+ // Unindent
+ const line = this.getLine();
+ const lineStart = line.start;
+ const lineContent = line.value;
+ const position = this.textarea.selectionStart;
+
+ // Check if the line starts with a tab
+ if (lineContent.startsWith('\t')) {
+ // Remove the tab
+ this.removeAt(lineStart, 1);
+ this.textarea.selectionStart = position - 1;
+ this.textarea.selectionEnd = position - 1;
+ }
+ } else {
+ const position = this.textarea.selectionStart;
+ this.insertAt(this.textarea.selectionStart, '\t');
+ this.textarea.selectionStart = position + 1;
+ this.textarea.selectionEnd = position + 1;
+ }
+
this.update();
+ } else if (key === 'escape') {
+ this.escapePressed = true;
}
this.onKeyDownValue = this.textarea.value;
}
@@ -166,14 +189,14 @@ export class CartaInput {
const line = this.getLine(lineStartingIndex);
this.removeAt(lineStartingIndex, line.value.length);
this.textarea.setSelectionRange(line.start, line.start);
- this.settings.callback();
+ this.update();
return;
}
const newPrefix = prefix.maker(match, line);
this.insertAt(cursor, '\n' + newPrefix);
- this.settings.callback();
+ this.update();
// Update cursor position
const newCursorPosition = cursor + newPrefix.length + 1;
this.textarea.setSelectionRange(newCursorPosition, newCursorPosition);
@@ -218,9 +241,6 @@ export class CartaInput {
start: lineStartingIndex,
end: lineEndingIndex,
value: this.textarea.value.slice(lineStartingIndex, lineEndingIndex)
- /**
- * Position of the cursor relative to the line.
- */
};
}
@@ -317,7 +337,7 @@ export class CartaInput {
/**
* Update the textarea.
*/
- public update = () => this.settings.callback();
+ public update = () => this.events.dispatchEvent(new Event('update'));
/**
* Returns x, y coordinates for absolute positioning of a span within a given text input
@@ -364,7 +384,7 @@ export class CartaInput {
/**
* Moves an element next to the caret. Shall be called every time the element
- * changes width, height or the caret position changes.
+ * changes width, height or the caret position changes. Consider using `bindToCaret` instead.
*
* @example
* ```svelte
@@ -437,17 +457,106 @@ export class CartaInput {
elem.style.bottom = bottom !== undefined ? bottom + 'px' : 'unset';
}
+ /**
+ * **Internal**: Svelte action to bind an element to the caret position.
+ * Use `bindToCaret` from the `carta` instance instead.
+ * @param elem The element to position.
+ * @param portal The portal to append the element to. Defaults to `document.body`.
+ */
+ public $bindToCaret(
+ elem: HTMLElement,
+ data: { portal: HTMLElement; editorElement?: HTMLElement }
+ ) {
+ // Move the element to body
+ data.portal.appendChild(elem);
+ // Add theme class as the the teleported element is not a child of the container
+ const themeClass = Array.from(data.editorElement?.classList ?? []).find((c) =>
+ c.startsWith('carta-theme__')
+ );
+ elem.classList.add(themeClass ?? 'carta-theme__default');
+ elem.style.position = 'fixed';
+
+ const callback = () => {
+ const relativePosition = this.getCursorXY();
+ const absolutePosition = {
+ x: relativePosition.x + this.textarea.getBoundingClientRect().left,
+ y: relativePosition.y + this.textarea.getBoundingClientRect().top
+ };
+
+ const fontSize = this.getRowHeight();
+ const width = elem.clientWidth;
+ const height = elem.clientHeight;
+
+ // Left/Right
+ let left: number | undefined = absolutePosition.x;
+ let right: number | undefined;
+
+ if (left + width >= window.innerWidth) {
+ right = window.innerWidth - left;
+ left = undefined;
+ }
+
+ // Top/Bottom
+ let top: number | undefined = absolutePosition.y;
+ let bottom: number | undefined;
+
+ if (top + height >= window.innerHeight) {
+ bottom = window.innerHeight - top;
+ top = undefined;
+ }
+
+ elem.style.left = left !== undefined ? left + 'px' : 'unset';
+ elem.style.right = right !== undefined ? right + 'px' : 'unset';
+ elem.style.top = top !== undefined ? top + fontSize + 'px' : 'unset';
+ elem.style.bottom = bottom !== undefined ? bottom + 'px' : 'unset';
+ };
+
+ this.textarea.addEventListener('input', callback);
+ window.addEventListener('resize', callback);
+ window.addEventListener('scroll', callback);
+
+ // Initial positioning
+ callback();
+
+ return {
+ destroy: () => {
+ try {
+ data.portal.removeChild(elem);
+ } catch (e: unknown) {
+ // Ignore
+ }
+ this.textarea.removeEventListener('input', callback);
+ window.removeEventListener('resize', callback);
+ window.removeEventListener('scroll', callback);
+ }
+ };
+ }
+
/**
* Get rough value for a row of the textarea.
*/
public getRowHeight() {
// Turns out calculating line height is quite tricky
- const lineHeight = parseFloat(getComputedStyle(this.container).lineHeight);
+ const rawLineHeight = getComputedStyle(this.container).lineHeight;
+
+ const lineHeight = parseFloat(rawLineHeight);
const fontSize = parseFloat(getComputedStyle(this.container).fontSize);
+
if (isNaN(lineHeight)) {
// "normal" => use default 1.2 value for all modern browser
return Math.ceil(fontSize * 1.2);
}
+ if (rawLineHeight.endsWith('em')) {
+ return Math.ceil(lineHeight * fontSize);
+ }
+ if (rawLineHeight.endsWith('%')) {
+ return Math.ceil((lineHeight / 100) * fontSize);
+ }
+ if (rawLineHeight.endsWith('px')) {
+ return Math.ceil(lineHeight);
+ }
+
+ // Line height can also be a multiplier of the font size
return Math.ceil(fontSize * lineHeight);
}
}
diff --git a/packages/carta-md/src/lib/internal/labels.ts b/packages/carta-md/src/lib/internal/labels.ts
new file mode 100644
index 0000000..0ee8cc5
--- /dev/null
+++ b/packages/carta-md/src/lib/internal/labels.ts
@@ -0,0 +1,19 @@
+import type { DefaultIconId } from './icons';
+import type { Intellisense } from './utils';
+
+type IconId = Intellisense;
+
+/**
+ * Labels that may appear in the editor.
+ */
+export interface Labels {
+ writeTab: string;
+ previewTab: string;
+ iconsLabels: Partial>;
+}
+
+export const defaultLabels: Labels = {
+ writeTab: 'Write',
+ previewTab: 'Preview',
+ iconsLabels: {}
+};
diff --git a/packages/carta-md/src/lib/internal/renderer.ts b/packages/carta-md/src/lib/internal/renderer.ts
index a74912d..c61be7b 100644
--- a/packages/carta-md/src/lib/internal/renderer.ts
+++ b/packages/carta-md/src/lib/internal/renderer.ts
@@ -1,4 +1,4 @@
-export class CartaRenderer {
+export class Renderer {
constructor(public readonly container: HTMLDivElement) {}
// Reserved for future use
}
diff --git a/packages/carta-md/src/lib/internal/shj.ts b/packages/carta-md/src/lib/internal/shj.ts
deleted file mode 100644
index e77ca7c..0000000
--- a/packages/carta-md/src/lib/internal/shj.ts
+++ /dev/null
@@ -1,54 +0,0 @@
-import { detectLanguage } from '@speed-highlight/core/detect.js';
-import type { ShjLanguageDefinition } from '@speed-highlight/core';
-
-/**
- * Markdown syntax highlighting rules.
- */
-const cartaMarkdown: ShjLanguageDefinition = [
- {
- type: 'cmnt',
- match: /^>.*|(=|-)\1+/gm
- },
- {
- type: 'class',
- match: /\*\*((?!\*\*).)*\*\*/g
- },
- {
- match: /```((?!```)[^])*\n```/g,
- sub: (code) => ({
- type: 'kwd',
- sub: [
- {
- match: /\n[^]*(?=```)/g,
- sub: code.split('\n')[0].slice(3) || detectLanguage(code)
- }
- ]
- })
- },
- {
- type: 'str',
- match: /`[^`]*`/g
- },
- {
- type: 'var',
- match: /~~((?!~~).)*~~/g
- },
- {
- type: 'kwd',
- match: /_[^_]*_|\*[^*]*\*/g
- },
- {
- type: 'kwd',
- match: /^\s*(\*|\d+\.)\s/gm
- },
- {
- type: 'oper',
- match: /\[[^\]]*]/g
- },
- {
- type: 'func',
- match: /\([^)]*\)/g
- }
-];
-
-export default cartaMarkdown;
diff --git a/packages/carta-md/src/lib/internal/shortcuts.ts b/packages/carta-md/src/lib/internal/shortcuts.ts
index e05a896..47549dc 100644
--- a/packages/carta-md/src/lib/internal/shortcuts.ts
+++ b/packages/carta-md/src/lib/internal/shortcuts.ts
@@ -1,4 +1,4 @@
-import type { CartaInput } from './input';
+import type { InputEnhancer } from './input';
/**
* Keyboard shortcut data.
@@ -13,7 +13,7 @@ export interface KeyboardShortcut {
* Callback action.
* @param input Input helper.
*/
- action: (input: CartaInput) => void;
+ action: (input: InputEnhancer) => void;
/**
* Prevent saving the current state in history.
*/
diff --git a/packages/carta-md/src/lib/internal/textarea-props.ts b/packages/carta-md/src/lib/internal/textarea-props.ts
new file mode 100644
index 0000000..ec2bc78
--- /dev/null
+++ b/packages/carta-md/src/lib/internal/textarea-props.ts
@@ -0,0 +1,36 @@
+/**
+ * Base props for HTML textarea element.
+ */
+interface BaseTextAreaProps {
+ id?: string;
+ name?: string;
+ spellCheck?: boolean;
+ autoCapitalize?: string;
+ autoComplete?: string;
+ autoFocus?: boolean;
+ dirname?: string;
+ disabled?: boolean;
+ form?: string;
+ maxLength?: number;
+ minLength?: number;
+ required?: boolean;
+ spellcheck?: boolean;
+
+ // Props handled by Carta
+
+ /**
+ * Bind the value to the Editor instead.
+ */
+ value?: never;
+ /**
+ * Use the placeholder property of the Editor instead.
+ */
+ placeholder?: never;
+ class?: never;
+}
+
+/**
+ * Props for HTML textarea element.
+ */
+export type TextAreaProps = Record> =
+ BaseTextAreaProps & T;
diff --git a/packages/carta-md/src/lib/internal/utils.ts b/packages/carta-md/src/lib/internal/utils.ts
index 538d31d..317aeca 100644
--- a/packages/carta-md/src/lib/internal/utils.ts
+++ b/packages/carta-md/src/lib/internal/utils.ts
@@ -1,3 +1,12 @@
+// Workaround to add intellisense
+// eslint-disable-next-line @typescript-eslint/no-empty-interface
+interface Nothing {}
+type Union = T | (U & Nothing);
+
+export type Intellisense = Union;
+export type MaybeArray = T | Array;
+export type NonNullable = Exclude;
+
/**
* Debounce the provided function.
* @param cb Callback function.
@@ -53,3 +62,13 @@ export function mergeDefaultInterface(
});
return final;
}
+
+// Node does not implement CustomEvent until v19, so we
+// "declare" it ourself for backward compatibility.
+export class CustomEvent extends Event {
+ detail: T;
+ constructor(message: string, data: EventInit & { detail: T }) {
+ super(message, data);
+ this.detail = data.detail;
+ }
+}
diff --git a/packages/carta-md/src/lib/light.css b/packages/carta-md/src/lib/light.css
deleted file mode 100644
index 6ee2708..0000000
--- a/packages/carta-md/src/lib/light.css
+++ /dev/null
@@ -1,82 +0,0 @@
-.shj-inline {
- margin: 0;
- padding: 2px 5px;
- display: inline-table;
- border-radius: 5px;
-}
-
-.shj-numbers {
- padding-left: 5px;
- counter-reset: line;
-}
-.shj-numbers div {
- padding-right: 5px;
-}
-.shj-numbers div::before {
- color: #999;
- display: block;
- content: counter(line);
- opacity: 0.5;
- text-align: right;
- margin-right: 5px;
- counter-increment: line;
-}
-
-.shj-syn-cmnt {
- font-style: italic;
-}
-
-.shj-syn-err,
-.shj-syn-kwd {
- color: #e16;
-}
-.shj-syn-num,
-.shj-syn-class {
- color: #f60;
-}
-.shj-numbers,
-.shj-syn-cmnt {
- color: #999;
-}
-.shj-syn-insert,
-.shj-syn-str {
- color: #7d8;
-}
-.shj-syn-bool {
- color: #3bf;
-}
-.shj-syn-type,
-.shj-syn-oper {
- color: #5af;
-}
-.shj-syn-section,
-.shj-syn-func {
- color: #84f;
-}
-.shj-syn-deleted,
-.shj-syn-var {
- color: #f44;
-}
-
-.shj-oneline {
- padding: 12px 10px;
-}
-.shj-lang-http.shj-oneline .shj-syn-kwd {
- background: #25f;
- color: #fff;
- padding: 5px 7px;
- border-radius: 5px;
-}
-
-.shj-multiline.shj-mode-header {
- padding: 20px;
-}
-.shj-multiline.shj-mode-header:before {
- content: attr(data-lang);
- color: #58f;
- display: block;
- padding: 10px 20px;
- background: #58f3;
- border-radius: 5px;
- margin-bottom: 20px;
-}
diff --git a/packages/carta-md/src/routes/+page.svelte b/packages/carta-md/src/routes/+page.svelte
index cfb0292..a8ff175 100644
--- a/packages/carta-md/src/routes/+page.svelte
+++ b/packages/carta-md/src/routes/+page.svelte
@@ -1,9 +1,9 @@
@@ -23,7 +23,8 @@
-
+
+
diff --git a/packages/carta-md/src/routes/sample.md b/packages/carta-md/src/routes/sample.md
new file mode 100644
index 0000000..87a50d1
--- /dev/null
+++ b/packages/carta-md/src/routes/sample.md
@@ -0,0 +1,79 @@
+# Heading
+
+## Sub-heading
+
+Paragraphs are separated
+by a blank line.
+
+Two spaces at the end of a line
+produce a line break.
+
+Text attributes _italic_,
+**bold**, `monospace`. Some `console.log(lst.filter(e => e == true))` implementations may use _single-asterisks_ for italic text.
+
+Horizontal rule:
+
+---
+
+```js
+function resolveAfter2Seconds(x) {
+ return new Promise((resolve) => {
+ setTimeout(() => {
+ resolve(x);
+ }, 2000);
+ });
+}
+
+// async function expression assigned to a variable
+const add = async function (x) {
+ const a = await resolveAfter2Seconds(20);
+ const b = await resolveAfter2Seconds(30);
+ console?.log(`http://localhost:${PORT}/`.match(/:[0-9]{2,4}^/g));
+ return x + a + b;
+};
+
+add(10).then((v) => {
+ console.log(v); // prints 60 after 4 seconds.
+});
+
+// async function expression used as an IIFE
+(async function (x) {
+ const p1 = resolveAfter2Seconds(20);
+ const p2 = resolveAfter2Seconds(30);
+ return x + (await p1) + (await p2);
+})(10).then((v) => {
+ console.log(v); // prints 60 after 2 seconds.
+});
+```
+
+```beurihiuerh
+}
+```
+
+Strikethrough:
+~~strikethrough~~
+
+Bullet list:
+
+- apples
+- oranges
+- pears
+
+Numbered list:
+
+1. lather
+2. rinse
+3. repeat
+
+An [example](http://example.com).
+
+
+
+> Markdown uses email-style
+> characters for blockquoting.
+> Multiple paragraphs need to be prepended individually.
+
+| Item | Price | In stock |
+| ------------ | -------- | -------- |
+| Juicy Apples | 1.99 | _7_ |
+| Bananas | **1.89** | 5234 |
diff --git a/packages/carta-md/static/pic.jpg b/packages/carta-md/static/pic.jpg
new file mode 100644
index 0000000..a1dc99c
Binary files /dev/null and b/packages/carta-md/static/pic.jpg differ
diff --git a/packages/carta-md/svelte.config.js b/packages/carta-md/svelte.config.js
index 87f198f..fd14cc8 100644
--- a/packages/carta-md/svelte.config.js
+++ b/packages/carta-md/svelte.config.js
@@ -1,5 +1,5 @@
import adapter from '@sveltejs/adapter-auto';
-import { vitePreprocess } from '@sveltejs/kit/vite';
+import { vitePreprocess } from '@sveltejs/vite-plugin-svelte';
/** @type {import('@sveltejs/kit').Config} */
const config = {
diff --git a/packages/carta-md/tsconfig.json b/packages/carta-md/tsconfig.json
index f98f071..429a4c6 100644
--- a/packages/carta-md/tsconfig.json
+++ b/packages/carta-md/tsconfig.json
@@ -13,12 +13,7 @@
"strict": true,
"composite": true,
"ignoreDeprecations": "5.0",
- "plugins": [],
- "baseUrl": "./",
- "paths": {
- "$lib": ["src/lib"],
- "$lib/*": ["src/lib/*"]
- }
+ "plugins": []
},
"include": ["./src"]
// Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias
diff --git a/packages/plugin-anchor/.gitignore b/packages/plugin-anchor/.gitignore
new file mode 100644
index 0000000..ac7211b
--- /dev/null
+++ b/packages/plugin-anchor/.gitignore
@@ -0,0 +1,11 @@
+.DS_Store
+node_modules
+/build
+/dist
+/.svelte-kit
+/package
+.env
+.env.*
+!.env.example
+vite.config.js.timestamp-*
+vite.config.ts.timestamp-*
diff --git a/packages/plugin-anchor/README.md b/packages/plugin-anchor/README.md
new file mode 100644
index 0000000..9dafc99
--- /dev/null
+++ b/packages/plugin-anchor/README.md
@@ -0,0 +1,36 @@
+# Carta Anchor Plugin
+
+This plugin adds `id` attributes and permalinks to headings. Install it using:
+
+```
+npm i @cartamd/plugin-anchor
+```
+
+## Setup
+
+### Styles
+
+Import the default theme, or create you own:
+
+```ts
+import '@cartamd/plugin-anchor/default.css';
+```
+
+### Extension
+
+```svelte
+
+
+
+```
+
+## Documentation
+
+Checkout the [docs](https://beartocode.github.io/carta/plugins/anchor) for examples, options and more.
diff --git a/packages/plugin-anchor/package.json b/packages/plugin-anchor/package.json
new file mode 100644
index 0000000..27c917b
--- /dev/null
+++ b/packages/plugin-anchor/package.json
@@ -0,0 +1,69 @@
+{
+ "name": "@cartamd/plugin-anchor",
+ "version": "3.0.0",
+ "type": "module",
+ "main": "./dist/index.js",
+ "types": "./dist/index.d.ts",
+ "license": "MIT",
+ "scripts": {
+ "dev": "vite dev",
+ "build": "vite build && npm run package",
+ "preview": "vite preview",
+ "package": "svelte-kit sync && svelte-package && publint",
+ "prepublishOnly": "npm run package",
+ "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
+ "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/BearToCode/carta.git"
+ },
+ "exports": {
+ ".": {
+ "types": "./dist/index.d.ts",
+ "svelte": "./dist/index.js"
+ },
+ "./default.css": "./dist/default.css",
+ "./default-theme.css": "./dist/default.css"
+ },
+ "files": [
+ "dist",
+ "!dist/**/*.test.*",
+ "!dist/**/*.spec.*"
+ ],
+ "dependencies": {
+ "rehype-autolink-headings": "^7.1.0",
+ "rehype-slug": "^6.0.0"
+ },
+ "peerDependencies": {
+ "carta-md": "^4.0.0",
+ "svelte": "^3.54.0 || ^4.0.0"
+ },
+ "devDependencies": {
+ "@sveltejs/adapter-auto": "^3.1.1",
+ "@sveltejs/kit": "^2.5.4",
+ "@sveltejs/package": "^2.3.0",
+ "@sveltejs/vite-plugin-svelte": "^3.0.2",
+ "carta-md": "workspace:*",
+ "marked": "^9.1.5",
+ "publint": "^0.1.9",
+ "svelte": "^3.54.0 || ^4.0.0",
+ "svelte-check": "^3.6.7",
+ "tslib": "^2.4.1",
+ "typescript": "^5.0.0",
+ "vite": "^5.1.6"
+ },
+ "svelte": "./dist/index.js",
+ "keywords": [
+ "carta",
+ "markdown",
+ "editor",
+ "marked",
+ "text editor",
+ "marked editor",
+ "slash",
+ "syntax highlighting",
+ "emoji",
+ "katex"
+ ]
+}
diff --git a/packages/plugin-anchor/src/app.d.ts b/packages/plugin-anchor/src/app.d.ts
new file mode 100644
index 0000000..f59b884
--- /dev/null
+++ b/packages/plugin-anchor/src/app.d.ts
@@ -0,0 +1,12 @@
+// See https://kit.svelte.dev/docs/types#app
+// for information about these interfaces
+declare global {
+ namespace App {
+ // interface Error {}
+ // interface Locals {}
+ // interface PageData {}
+ // interface Platform {}
+ }
+}
+
+export {};
diff --git a/demo/src/app.html b/packages/plugin-anchor/src/app.html
similarity index 51%
rename from demo/src/app.html
rename to packages/plugin-anchor/src/app.html
index 77d870b..f22aeaa 100644
--- a/demo/src/app.html
+++ b/packages/plugin-anchor/src/app.html
@@ -1,13 +1,12 @@
-
+
-
-
+
%sveltekit.head%
- %sveltekit.body%
+ %sveltekit.body%
diff --git a/packages/plugin-anchor/src/lib/default.css b/packages/plugin-anchor/src/lib/default.css
new file mode 100644
index 0000000..1d18753
--- /dev/null
+++ b/packages/plugin-anchor/src/lib/default.css
@@ -0,0 +1,32 @@
+.carta-viewer h1,
+.carta-viewer h2,
+.carta-viewer h3,
+.carta-viewer h4,
+.carta-viewer h5,
+.carta-viewer h6 {
+ position: relative;
+}
+
+.carta-viewer h1 .icon.icon-link,
+.carta-viewer h2 .icon.icon-link,
+.carta-viewer h3 .icon.icon-link,
+.carta-viewer h4 .icon.icon-link,
+.carta-viewer h5 .icon.icon-link,
+.carta-viewer h6 .icon.icon-link {
+ opacity: 0;
+ content: url('./link.svg');
+ position: absolute;
+ right: 100%;
+ top: 50%;
+ padding-right: 4px;
+ transform: translateY(-50%);
+}
+
+.carta-viewer h1:hover .icon-link,
+.carta-viewer h2:hover .icon-link,
+.carta-viewer h3:hover .icon-link,
+.carta-viewer h4:hover .icon-link,
+.carta-viewer h5:hover .icon-link,
+.carta-viewer h6:hover .icon-link {
+ opacity: 1;
+}
diff --git a/packages/plugin-anchor/src/lib/index.ts b/packages/plugin-anchor/src/lib/index.ts
new file mode 100644
index 0000000..5448a7e
--- /dev/null
+++ b/packages/plugin-anchor/src/lib/index.ts
@@ -0,0 +1,32 @@
+import rehypeSlug, { type Options as SlugOptions } from 'rehype-slug';
+import rehypeAutolinkHeadings, { type Options as AutolinkOptions } from 'rehype-autolink-headings';
+import type { Plugin } from 'carta-md';
+export * from './default.css?inline';
+
+export interface AnchorExtensionOptions {
+ /**
+ * rehype-slug options.
+ */
+ slug?: SlugOptions;
+ /**
+ * rehype-autolink-headings options.
+ */
+ autolink?: AutolinkOptions;
+}
+
+/**
+ * Carta anchor plugin. Adds support to render anchor links in header tags.
+ */
+export const anchor = (options?: AnchorExtensionOptions): Plugin => {
+ return {
+ transformers: [
+ {
+ execution: 'sync',
+ type: 'rehype',
+ transform({ processor }) {
+ processor.use(rehypeSlug, options?.slug).use(rehypeAutolinkHeadings, options?.autolink);
+ }
+ }
+ ]
+ };
+};
diff --git a/packages/plugin-anchor/src/lib/link.svg b/packages/plugin-anchor/src/lib/link.svg
new file mode 100644
index 0000000..458edf8
--- /dev/null
+++ b/packages/plugin-anchor/src/lib/link.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/packages/plugin-anchor/src/routes/+page.svelte b/packages/plugin-anchor/src/routes/+page.svelte
new file mode 100644
index 0000000..9d26091
--- /dev/null
+++ b/packages/plugin-anchor/src/routes/+page.svelte
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/demo/static/favicon.png b/packages/plugin-anchor/static/favicon.png
similarity index 100%
rename from demo/static/favicon.png
rename to packages/plugin-anchor/static/favicon.png
diff --git a/packages/plugin-anchor/svelte.config.js b/packages/plugin-anchor/svelte.config.js
new file mode 100644
index 0000000..2b35fe1
--- /dev/null
+++ b/packages/plugin-anchor/svelte.config.js
@@ -0,0 +1,18 @@
+import adapter from '@sveltejs/adapter-auto';
+import { vitePreprocess } from '@sveltejs/vite-plugin-svelte';
+
+/** @type {import('@sveltejs/kit').Config} */
+const config = {
+ // Consult https://kit.svelte.dev/docs/integrations#preprocessors
+ // for more information about preprocessors
+ preprocess: vitePreprocess(),
+
+ kit: {
+ // adapter-auto only supports some environments, see https://kit.svelte.dev/docs/adapter-auto for a list.
+ // If your environment is not supported or you settled on a specific environment, switch out the adapter.
+ // See https://kit.svelte.dev/docs/adapters for more information about adapters.
+ adapter: adapter()
+ }
+};
+
+export default config;
diff --git a/packages/plugin-anchor/tsconfig.json b/packages/plugin-anchor/tsconfig.json
new file mode 100644
index 0000000..fd837cc
--- /dev/null
+++ b/packages/plugin-anchor/tsconfig.json
@@ -0,0 +1,16 @@
+{
+ "extends": "./.svelte-kit/tsconfig.json",
+ "compilerOptions": {
+ "checkJs": true,
+ "esModuleInterop": true,
+ "forceConsistentCasingInFileNames": true,
+ "moduleResolution": "node",
+ "resolveJsonModule": true,
+ "skipLibCheck": true,
+ "sourceMap": true,
+ "strict": true,
+ "composite": true,
+ "ignoreDeprecations": "5.0",
+ "plugins": []
+ }
+}
diff --git a/packages/plugin-anchor/vite.config.ts b/packages/plugin-anchor/vite.config.ts
new file mode 100644
index 0000000..bbf8c7d
--- /dev/null
+++ b/packages/plugin-anchor/vite.config.ts
@@ -0,0 +1,6 @@
+import { sveltekit } from '@sveltejs/kit/vite';
+import { defineConfig } from 'vite';
+
+export default defineConfig({
+ plugins: [sveltekit()]
+});
diff --git a/packages/plugin-attachment/README.md b/packages/plugin-attachment/README.md
index 9c88cd0..8ca5a7a 100644
--- a/packages/plugin-attachment/README.md
+++ b/packages/plugin-attachment/README.md
@@ -20,7 +20,7 @@ import '@cartamd/plugin-attachment/default.css';
```svelte
-
+
```
-## Options
+## Documentation
-Here are the options you can pass to `attachment()`:
-
-```ts
-export interface AttachmentExtensionOptions {
- /**
- * Upload a file to the server. Return the url of the uploaded file.
- * If an error occurs, return null. This function does **not** handle errors.
- * @param file The file to upload
- * @returns The uploaded file url, or null if it failed
- */
- upload: (file: File) => Promise;
- /**
- * Supported mime types.
- *
- * @default ['image/png', 'image/jpeg', 'image/gif', 'image/svg+xml'].
- */
- supportedMimeTypes?: string[];
- /**
- * Whether to disable the attach icon.
- *
- * @default false
- */
- disableIcon?: boolean;
- /**
- * Custom drop overlay component. Use `false` to disable the overlay.
- */
- dropOverlay?: false | typeof SvelteComponent;
- /**
- * Custom loading overlay component. Use `false` to disable the overlay.
- */
- loadingOverlay?: false | typeof SvelteComponent<{ uploadingFiles: Writable }>;
-}
-```
+Checkout the [docs](https://beartocode.github.io/carta/plugins/attachment) for examples, options and more.
diff --git a/packages/plugin-attachment/package.json b/packages/plugin-attachment/package.json
index a396b4c..8f68e67 100644
--- a/packages/plugin-attachment/package.json
+++ b/packages/plugin-attachment/package.json
@@ -34,23 +34,24 @@
"!dist/**/*.spec.*"
],
"peerDependencies": {
- "carta-md": "^3.0.0",
+ "carta-md": "^4.0.0",
"marked": "^9.1.5",
"svelte": "^3.54.0 || ^4.0.0"
},
"devDependencies": {
- "@sveltejs/adapter-auto": "^2.0.0",
- "@sveltejs/kit": "^1.27.1",
- "@sveltejs/package": "^2.2.2",
+ "@sveltejs/adapter-auto": "^3.1.1",
+ "@sveltejs/kit": "^2.5.4",
+ "@sveltejs/package": "^2.3.0",
+ "@sveltejs/vite-plugin-svelte": "^3.0.2",
"@types/node-emoji": "^1.8.2",
"carta-md": "workspace:*",
"marked": "^9.1.5",
"publint": "^0.1.9",
- "svelte": "^4.2.2",
- "svelte-check": "^3.5.2",
+ "svelte": "^4.2.12",
+ "svelte-check": "^3.6.7",
"tslib": "^2.4.1",
"typescript": "^5.0.0",
- "vite": "^4.3.9"
+ "vite": "^5.1.6"
},
"svelte": "./dist/index.js",
"keywords": [
diff --git a/packages/plugin-attachment/src/app.html b/packages/plugin-attachment/src/app.html
index d2fc6b0..f22aeaa 100644
--- a/packages/plugin-attachment/src/app.html
+++ b/packages/plugin-attachment/src/app.html
@@ -1,4 +1,4 @@
-
+
diff --git a/packages/plugin-attachment/src/lib/icons/AttachIcon.svelte b/packages/plugin-attachment/src/lib/icons/AttachIcon.svelte
index 46dc53b..0467f13 100644
--- a/packages/plugin-attachment/src/lib/icons/AttachIcon.svelte
+++ b/packages/plugin-attachment/src/lib/icons/AttachIcon.svelte
@@ -1,11 +1,13 @@
diff --git a/packages/plugin-attachment/src/lib/index.ts b/packages/plugin-attachment/src/lib/index.ts
index 580306c..7df0b33 100644
--- a/packages/plugin-attachment/src/lib/index.ts
+++ b/packages/plugin-attachment/src/lib/index.ts
@@ -1,4 +1,4 @@
-import type { Carta, CartaExtension, CartaListener } from 'carta-md';
+import type { Carta, Plugin, Listener } from 'carta-md';
import { get, writable, type Writable } from 'svelte/store';
import type { SvelteComponent } from 'svelte';
import DropOverlay from './DropOverlay.svelte';
@@ -40,7 +40,7 @@ const ImageMimeTypes = ['image/png', 'image/jpeg', 'image/gif', 'image/svg+xml']
/**
* Carta attachment plugin.
*/
-export const attachment = (options: AttachmentExtensionOptions): CartaExtension => {
+export const attachment = (options: AttachmentExtensionOptions): Plugin => {
let carta: Carta | undefined;
const allowedMimeTypes = options.supportedMimeTypes || ImageMimeTypes;
@@ -102,15 +102,31 @@ export const attachment = (options: AttachmentExtensionOptions): CartaExtension
for (const file of files) handleFile(file);
}
+ function handlePaste(this: HTMLTextAreaElement, e: ClipboardEvent) {
+ const items = e.clipboardData?.items;
+ if (!items) return;
+
+ const itemsArray = Array.from(items);
+ for (const item of itemsArray) {
+ if (item.kind === 'file') {
+ const file = item.getAsFile();
+ if (!file) continue;
+ e.preventDefault();
+ handleFile(file);
+ }
+ }
+ }
+
return {
onLoad: ({ carta: c }) => {
carta = c;
},
listeners: [
- ['drop', handleDrop, false] satisfies CartaListener<'drop'>,
- ['dragenter', () => draggingOverTextArea.set(true)] satisfies CartaListener<'dragenter'>,
- ['dragleave', () => draggingOverTextArea.set(false)] satisfies CartaListener<'dragleave'>,
- ['dragover', (e) => e.preventDefault()] satisfies CartaListener<'dragover'>
+ ['drop', handleDrop, false] satisfies Listener<'drop'>,
+ ['dragenter', () => draggingOverTextArea.set(true)] satisfies Listener<'dragenter'>,
+ ['dragleave', () => draggingOverTextArea.set(false)] satisfies Listener<'dragleave'>,
+ ['dragover', (e) => e.preventDefault()] satisfies Listener<'dragover'>,
+ ['paste', handlePaste, false] satisfies Listener<'paste'>
],
components: [
{
@@ -127,7 +143,7 @@ export const attachment = (options: AttachmentExtensionOptions): CartaExtension
component: LoadingOverlay,
props: {
uploadingFiles,
- LoadingOverlay: options.loadingOverlay
+ loadingOverlay: options.loadingOverlay
},
parent: 'input'
}
@@ -151,7 +167,8 @@ export const attachment = (options: AttachmentExtensionOptions): CartaExtension
input.click();
},
- id: 'attach'
+ id: 'attach',
+ label: 'Attach file'
}
]
};
diff --git a/packages/plugin-attachment/src/routes/+page.svelte b/packages/plugin-attachment/src/routes/+page.svelte
index 8bee37e..19891a6 100644
--- a/packages/plugin-attachment/src/routes/+page.svelte
+++ b/packages/plugin-attachment/src/routes/+page.svelte
@@ -1,6 +1,6 @@
-
+
```
-## Options
+## Documentation
-Here are the options you can pass to `code()`:
-
-```ts
-interface CodeExtensionOptions {
- /**
- * Default language when none is provided.
- */
- defaultLanguage?: string;
- /**
- * Whether to autodetect a language when none is provided.
- * Overwritten by `defaultLanguage`.
- */
- autoDetect?: string;
- /**
- * Line numbering.
- * @defaults false.
- */
- lineNumbering?: boolean;
-
- /**
- * Options for custom syntax highlighting.
- */
- customHighlight?: {
- /**
- * Custom highlight function. Beware that you'll have to provide your own styles.
- * This function needs to convert a string of code into html.
- */
- highlighter: (code: string, lang: string) => string | Promise;
- /**
- * The language tag found immediately after the code block opening marker is
- * appended to this to form the class attribute added to the `` element.
- */
- langPrefix: string;
- };
-}
-```
+Checkout the [docs](https://beartocode.github.io/carta/plugins/code) for examples, options and more.
diff --git a/packages/plugin-code/package.json b/packages/plugin-code/package.json
index bdb372b..0da3535 100644
--- a/packages/plugin-code/package.json
+++ b/packages/plugin-code/package.json
@@ -16,21 +16,22 @@
"build": "tsc && tscp"
},
"devDependencies": {
+ "@shikijs/rehype": "^1.4.0",
"@types/node": "^18.16.3",
"carta-md": "workspace:*",
"typescript": "^5.0.4",
- "typescript-cp": "^0.1.8",
- "marked": "^9.1.5"
+ "typescript-cp": "^0.1.8"
},
"peerDependencies": {
- "carta-md": "^3.0.0"
+ "carta-md": "^4.0.0"
},
"files": [
"dist"
],
- "version": "3.0.0",
+ "version": "4.0.0",
"dependencies": {
- "marked-highlight": "^2.0.6"
+ "@shikijs/rehype": "^1.4.0",
+ "unified": "^11.0.4"
},
"keywords": [
"carta",
diff --git a/packages/plugin-code/src/index.ts b/packages/plugin-code/src/index.ts
index 5d22fa4..48a8d6e 100644
--- a/packages/plugin-code/src/index.ts
+++ b/packages/plugin-code/src/index.ts
@@ -1,70 +1,52 @@
-import type { CartaExtension, HighlightFunctions } from 'carta-md';
-import { markedHighlight } from 'marked-highlight';
+import type { DualTheme, Theme, Plugin } from 'carta-md';
+import type { RehypeShikiOptions } from '@shikijs/rehype';
+import rehypeShikiFromHighlighter from '@shikijs/rehype/core';
-interface CodeExtensionOptions {
- /**
- * Default language when none is provided.
- */
- defaultLanguage?: string;
- /**
- * Whether to autodetect a language when none is provided.
- * Overwritten by `defaultLanguage`.
- */
- autoDetect?: string;
- /**
- * Line numbering.
- * @defaults false.
- */
- lineNumbering?: boolean;
+export type CodeExtensionOptions = Omit & {
+ theme?: Theme | DualTheme;
+};
- /**
- * Options for custom syntax highlighting.
- */
- customHighlight?: {
- /**
- * Custom highlight function. Beware that you'll have to provide your own styles.
- * This function needs to convert a string of code into html.
- */
- highlighter: (code: string, lang: string) => string | Promise;
- /**
- * The language tag found immediately after the code block opening marker is
- * appended to this to form the class attribute added to the `` element.
- */
- langPrefix: string;
- };
-}
-
-let shj: HighlightFunctions;
+// FIXME: find a better solution then copy-pasting these functions in next version.
+// However, when importing from carta-md, this causes a MODULE_NOT_FOUND error
+// for some reason.
+/**
+ * Checks if a theme is a dual theme.
+ * @param theme The theme to check.
+ * @returns Whether the theme is a dual theme.
+ */
+export const isDualTheme = (theme: Theme | DualTheme): theme is DualTheme =>
+ typeof theme == 'object' && 'light' in theme && 'dark' in theme;
+/**
+ * Checks if a theme is a single theme.
+ * @param theme The theme to check.
+ * @returns Whether the theme is a single theme.
+ */
+export const isSingleTheme = (theme: Theme | DualTheme): theme is Theme => !isDualTheme(theme);
/**
* Carta code highlighting plugin. Themes available on [GitHub](https://github.com/speed-highlight/core/tree/main/dist/themes).
*/
-export const code = (options?: CodeExtensionOptions): CartaExtension => {
+export const code = (options?: CodeExtensionOptions): Plugin => {
return {
- onLoad: ({ highlight }) => (shj = highlight),
- markedExtensions: [
- markedHighlight({
- langPrefix: options?.customHighlight?.langPrefix ?? 'shj-lang-',
- async: true,
- async highlight(code, lang) {
- if (options?.customHighlight) {
- return await options.customHighlight.highlighter(code, lang);
+ transformers: [
+ {
+ execution: 'async',
+ type: 'rehype',
+ async transform({ processor, carta }) {
+ let theme = options?.theme;
+
+ const highlighter = await carta.highlighter();
+ if (!theme) {
+ theme = highlighter.theme; // Use the theme specified in the highlighter
}
- const { highlight, highlightAutodetect } = shj;
-
- lang ||= options?.defaultLanguage ?? '';
- let highlighted: string | null = null;
-
- if (lang) highlighted = await highlight(code, lang, !(options?.lineNumbering ?? false));
- if (highlighted) return highlighted;
-
- if (options?.autoDetect ?? true)
- return await highlightAutodetect(code, !(options?.lineNumbering ?? false));
-
- return (await highlight(code, 'plain', !(options?.lineNumbering ?? false))) as string;
+ if (isSingleTheme(theme)) {
+ processor.use(rehypeShikiFromHighlighter, highlighter, { ...options, theme });
+ } else {
+ processor.use(rehypeShikiFromHighlighter, highlighter, { ...options, themes: theme });
+ }
}
- })
+ }
]
};
};
diff --git a/packages/plugin-code/tsconfig.json b/packages/plugin-code/tsconfig.json
index 0d0b887..ae53f4c 100644
--- a/packages/plugin-code/tsconfig.json
+++ b/packages/plugin-code/tsconfig.json
@@ -5,6 +5,5 @@
"rootDir": "src",
"typeRoots": ["./node_modules/@types"]
},
- "include": ["./src"],
- "references": [{ "path": "../carta-md" }]
+ "include": ["./src"]
}
diff --git a/packages/plugin-emoji/README.md b/packages/plugin-emoji/README.md
index 0fbe8e0..c3ea8dd 100644
--- a/packages/plugin-emoji/README.md
+++ b/packages/plugin-emoji/README.md
@@ -20,7 +20,7 @@ import '@cartamd/plugin-emoji/default.css';
```svelte
-
+
```
-## Options
+## Documentation
-Here are the options you can pass to `emoji()`:
-
-```ts
-export interface EmojiExtensionOptions {
- /**
- * Custom in transition. See https://svelte.dev/docs#run-time-svelte-transition.
- */
- inTransition?: (node: Element) => TransitionConfig;
- /**
- * Custom out transition. See https://svelte.dev/docs#run-time-svelte-transition.
- */
- outTransition?: (node: Element) => TransitionConfig;
-}
-```
+Checkout the [docs](https://beartocode.github.io/carta/plugins/emoji) for examples, options and more.
diff --git a/packages/plugin-emoji/package.json b/packages/plugin-emoji/package.json
index ca11132..8d43c74 100644
--- a/packages/plugin-emoji/package.json
+++ b/packages/plugin-emoji/package.json
@@ -1,6 +1,6 @@
{
"name": "@cartamd/plugin-emoji",
- "version": "3.0.0",
+ "version": "4.0.0",
"type": "module",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
@@ -33,26 +33,27 @@
],
"dependencies": {
"bezier-easing": "^2.1.0",
- "node-emoji": "^1.11.0"
+ "node-emoji": "^1.11.0",
+ "remark-gemoji": "^8.0.0"
},
"peerDependencies": {
- "carta-md": "^3.0.0",
- "marked": "^9.1.5",
+ "carta-md": "^4.0.0",
"svelte": "^3.54.0 || ^4.0.0"
},
"devDependencies": {
- "@sveltejs/adapter-auto": "^2.0.0",
- "@sveltejs/kit": "^1.5.0",
- "@sveltejs/package": "^2.0.0",
+ "@sveltejs/adapter-auto": "^3.1.1",
+ "@sveltejs/kit": "^2.5.4",
+ "@sveltejs/package": "^2.3.0",
+ "@sveltejs/vite-plugin-svelte": "^3.0.2",
"@types/node-emoji": "^1.8.2",
"carta-md": "workspace:*",
+ "marked": "^9.1.5",
"publint": "^0.1.9",
- "svelte": "^3.54.0 || ^4.0.0",
- "svelte-check": "^3.0.1",
+ "svelte": "^4.2.12",
+ "svelte-check": "^3.6.7",
"tslib": "^2.4.1",
"typescript": "^5.0.0",
- "vite": "^4.3.9",
- "marked": "^9.1.5"
+ "vite": "^5.1.6"
},
"svelte": "./dist/index.js",
"keywords": [
diff --git a/packages/plugin-emoji/src/app.html b/packages/plugin-emoji/src/app.html
index d2fc6b0..f22aeaa 100644
--- a/packages/plugin-emoji/src/app.html
+++ b/packages/plugin-emoji/src/app.html
@@ -1,4 +1,4 @@
-
+
diff --git a/packages/plugin-emoji/src/lib/Emoji.svelte b/packages/plugin-emoji/src/lib/Emoji.svelte
index 7ff9a23..cfe0439 100644
--- a/packages/plugin-emoji/src/lib/Emoji.svelte
+++ b/packages/plugin-emoji/src/lib/Emoji.svelte
@@ -12,13 +12,11 @@
export let outTransition: (node: Element) => TransitionConfig;
let visible = false;
- let caretPosition = { left: 0, right: 0, top: 0, bottom: 0 };
let filter = '';
let colonPosition = 0;
let hoveringIndex = 0;
let emojis: nodeEmoji.Emoji[] = [];
let emojisElements: HTMLButtonElement[] = Array(cols * maxRows);
- let elem: HTMLDivElement;
onMount(() => {
carta.input?.textarea.addEventListener('keydown', handleKeyDown);
@@ -75,7 +73,6 @@
} else if (e.key === ':') {
// Open
visible = true;
- caretPosition = carta.input.getCursorXY();
colonPosition = carta.input.textarea.selectionStart;
filter = '';
}
@@ -107,14 +104,6 @@
carta.input.update();
}
- $: {
- if (elem) {
- // Make statement reactive
- caretPosition, elem.clientWidth, elem.clientHeight;
- carta.input?.moveElemToCaret(elem);
- }
- }
-
$: {
// Scroll to make hovering emoji always visible
const hovering = emojisElements.at(hoveringIndex);
@@ -132,9 +121,9 @@
{#each emojis as emoji, i}
{
+export const emoji = (options?: EmojiExtensionOptions): Plugin => {
const inTransition =
options?.inTransition ??
((node: Element) =>
@@ -40,7 +39,7 @@ export const emoji = (options?: EmojiExtensionOptions): CartaExtension => {
duration: 100
}));
- const emojiComponent: CartaExtensionComponent = {
+ const emojiComponent: ExtensionComponent = {
component: Emoji,
parent: 'input',
props: {
@@ -49,39 +48,42 @@ export const emoji = (options?: EmojiExtensionOptions): CartaExtension => {
}
};
+ const grammar = {
+ name: 'emoji',
+ type: 'inline',
+ definition: {
+ match: ':[a-zA-Z_]+:',
+ name: 'markup.emoji.markdown'
+ }
+ } satisfies GrammarRule;
+
+ const highlighting = {
+ light: {
+ scope: 'markup.emoji',
+ settings: {
+ foreground: '#3bf'
+ }
+ },
+ dark: {
+ scope: 'markup.emoji',
+ settings: {
+ foreground: '#4dacfa'
+ }
+ }
+ } satisfies HighlightingRule;
+
return {
- markedExtensions: [
+ transformers: [
{
- extensions: [emojiTokenizerAndRenderer()]
+ execution: 'sync',
+ type: 'remark',
+ transform({ processor }) {
+ processor.use(remarkGemoji);
+ }
}
],
components: [emojiComponent],
- highlightRules: [
- {
- type: 'oper',
- match: /:[a-z0-9_]+:/g
- }
- ]
+ grammarRules: [grammar],
+ highlightingRules: [highlighting]
};
};
-
-function emojiTokenizerAndRenderer(): TokenizerAndRendererExtension {
- return {
- name: 'emoji',
- level: 'inline',
- start: (src) => src.indexOf(':'),
- tokenizer: (src) => {
- const match = src.match(/^:.*?:/)?.at(0);
- if (!match) return undefined;
- const emoji = nodeEmoji.find(match)?.emoji;
- if (emoji) {
- return {
- type: 'emoji',
- raw: match,
- emoji
- };
- }
- },
- renderer: (token) => token.emoji
- };
-}
diff --git a/packages/plugin-emoji/src/routes/+page.svelte b/packages/plugin-emoji/src/routes/+page.svelte
index 8486817..6be0a8d 100644
--- a/packages/plugin-emoji/src/routes/+page.svelte
+++ b/packages/plugin-emoji/src/routes/+page.svelte
@@ -1,5 +1,5 @@
-
+
```
## Usage
@@ -65,46 +65,6 @@ $$
$$
```
-## Options
+## Documentation
-Here are the options you can pass to `math()`:
-
-```ts
-interface MathExtensionOptions {
- /**
- * Options for inline katex, eg: $a^2+b^2=c^2$
- */
- inline?: {
- katexOptions?: KatexOptions;
- /**
- * @default control+m
- */
- shortcut?: Set;
- };
- /**
- * Option for block katex, eg:
- * $$
- * a^2+b^2=c^2
- * $$
- */
- block?: {
- /**
- * Tag the generated katex will be put into. Must have `display: block`.
- */
- tag?: string;
- /**
- * Whether to center the generated expression.
- * @default true
- */
- center?: boolean;
- /**
- * Class for generated katex.
- */
- class?: string;
- /**
- * @default ctrl+shift+m
- */
- shortcut?: Set;
- katexOptions?: KatexOptions;
- };
-```
+Checkout the [docs](https://beartocode.github.io/carta/plugins/math) for examples, options and more.
diff --git a/packages/plugin-math/package.json b/packages/plugin-math/package.json
index f3a8b4e..b9efad7 100644
--- a/packages/plugin-math/package.json
+++ b/packages/plugin-math/package.json
@@ -17,23 +17,20 @@
"build": "tsc"
},
"devDependencies": {
- "@types/katex": "^0.16.0",
"carta-md": "workspace:*",
- "typescript": "^5.0.4",
- "marked": "^9.1.5"
+ "typescript": "^5.0.4"
},
"peerDependencies": {
- "carta-md": "^3.0.0",
- "katex": "^0.16.7",
- "marked": "^9.1.5"
+ "carta-md": "^4.0.0"
},
"files": [
"dist"
],
"dependencies": {
- "katex": "^0.16.7"
+ "rehype-katex": "^7.0.0",
+ "remark-math": "^6.0.0"
},
- "version": "3.0.0",
+ "version": "4.0.1",
"keywords": [
"carta",
"markdown",
diff --git a/packages/plugin-math/src/index.ts b/packages/plugin-math/src/index.ts
index 8fc0637..5e26313 100644
--- a/packages/plugin-math/src/index.ts
+++ b/packages/plugin-math/src/index.ts
@@ -1,13 +1,12 @@
-import type { Carta, CartaExtension } from 'carta-md';
-import { TokenizerAndRendererExtension } from 'marked';
-import katex, { KatexOptions } from 'katex';
+import type { Plugin } from 'carta-md';
+import remarkMath, { type Options as RemarkMathOptions } from 'remark-math';
+import rehypeKatex, { type Options as RehypeKatexOptions } from 'rehype-katex';
interface MathExtensionOptions {
/**
* Options for inline katex, eg: $a^2+b^2=c^2$
*/
inline?: {
- katexOptions?: KatexOptions;
/**
* @default control+m
*/
@@ -20,51 +19,45 @@ interface MathExtensionOptions {
* $$
*/
block?: {
- /**
- * Tag the generated katex will be put into. Must have `display: block`.
- */
- tag?: string;
- /**
- * Whether to center the generated expression.
- * @default true
- */
- center?: boolean;
- /**
- * Class for generated katex.
- */
- class?: string;
/**
* @default ctrl+shift+m
*/
shortcut?: Set;
- katexOptions?: KatexOptions;
};
+ /**
+ * Options for remark-math
+ */
+ remarkMath?: RemarkMathOptions;
+ /**
+ * Options for rehype-katex
+ */
+ rehypeKatex?: RehypeKatexOptions;
}
-function safeRender(tex: string, options?: KatexOptions | undefined) {
- try {
- return katex.renderToString(tex, options);
- } catch (_) {
- return '';
- }
-}
-
-let carta: Carta;
-
/**
* Carta math plugin. Code adapted from [marked-katex-extension](https://github.com/UziTech/marked-katex-extension).
*/
-export const math = (options?: MathExtensionOptions): CartaExtension => {
+export const math = (options?: MathExtensionOptions): Plugin => {
return {
- onLoad: ({ carta: c, highlight: shj }) => {
- carta = c;
- import('./latex.js')
- .then((module) => shj.loadCustomLanguage('latex', module))
- .then(() => carta.input?.update());
+ onLoad: async ({ carta }) => {
+ const highlighter = await carta.highlighter();
+ await highlighter.loadLanguage('latex');
+ carta.input?.update();
},
- markedExtensions: [
+ transformers: [
{
- extensions: [inlineKatex(options?.inline), blockKatex(options?.block)]
+ execution: 'sync',
+ type: 'remark',
+ transform({ processor }) {
+ processor.use(remarkMath, options?.remarkMath);
+ }
+ },
+ {
+ execution: 'sync',
+ type: 'rehype',
+ transform({ processor }) {
+ processor.use(rehypeKatex, options?.rehypeKatex);
+ }
}
],
shortcuts: [
@@ -79,62 +72,57 @@ export const math = (options?: MathExtensionOptions): CartaExtension => {
action: (input) => input.toggleSelectionSurrounding(['$$\n', '\n$$'])
}
],
- highlightRules: [
+ grammarRules: [
{
- match: /\$[{}[\]a-zA-Z0-9.+-_=*/\\ ]+\$/g,
- sub: 'latex'
+ name: 'inline_math',
+ type: 'inline',
+ definition: {
+ match: '(\\$+)((?:[^\\$]|(?!(? {
- return {
- name: 'inlineKatex',
- level: 'inline',
- start: (src) => src.indexOf('$'),
- tokenizer: (src) => {
- const match = src.match(/^\$+([^$\n]+?)\$+/);
- if (match) {
- return {
- type: 'inlineKatex',
- raw: match[0],
- text: match[1].trim()
- };
- }
- },
- renderer: (token) => safeRender(token.text, options?.katexOptions)
- };
-};
-
-const blockKatex = (options?: MathExtensionOptions['block']): TokenizerAndRendererExtension => {
- return {
- name: 'blockKatex',
- level: 'block',
- start: (src) => src.indexOf('\n$$'),
- tokenizer: (src) => {
- const match = src.match(/^\$\$+\n([^$]+?)\n\$\$+\n/);
- if (match) {
- return {
- type: 'blockKatex',
- raw: match[0],
- text: match[1].trim()
- };
- }
- },
- renderer: (token) => {
- const tag = options?.tag ?? 'p';
- const center = options?.center ?? true;
- return `
- <${tag}
- class="${options?.class ?? ''}"
- ${center ? 'align="center"' : ''}
- >${safeRender(token.text, options?.katexOptions)}
- ${tag}>`;
- }
- };
-};
diff --git a/packages/plugin-math/src/latex.ts b/packages/plugin-math/src/latex.ts
deleted file mode 100644
index fc1d79f..0000000
--- a/packages/plugin-math/src/latex.ts
+++ /dev/null
@@ -1,38 +0,0 @@
-export default [
- {
- match:
- /\\(frac|tfrac|dfrac|sqrt|over|above|cfrac|binom|dbinom|brace|choose|tbinom|brack)(?![a-zA-Z0-9])/g,
- type: 'str'
- },
- {
- match:
- /\\(amalg|circledast|ldotp|rtimes&&|And|circledcirc|lor|setminus|ast|circleddash|lessdot|smallsetminus|barwedge|Cup|lhd|sqcap|bigcirc|cup|ltimes|sqcupmodmod|bmod|curlyveexmodaxmodax|moda|times|boxdot|curlywedge|mp|unlhd|boxminus|div|odot|unrhd|boxplus|divideontimes|ominus|uplus|boxtimes|dotplus|oplus|vee|bullet|doublebarwedge|otimes|veebar|Cap|doublecap|oslash|wedge|cap|doublecup|pmor|plusmn|wr|centerdot|land|rhd|circ|leftthreetimes|rightthreetimes|cdot|gtrdot|pmod|cdotp|intercal|pod)(?![a-zA-Z0-9])/g,
- type: 'class'
- },
- {
- match:
- /\\(mathscr|mathrm|mathbf|mathit|mathnormal|textbf|textit|textrm|bf|it|rm|bold|textup|textnormal|boldsymbol{Ab}|Bbb|text|bm|mathbb|mathsf|textmd|frak|textsf|mathtt|mathfrak|sf|texttt|mathcal|tt|cal)(?![a-zA-Z0-9])/g,
- type: 'insert'
- },
- {
- match:
- /\\(sum|prod|bigotimes|bigvee|int|coprod|bigoplus|bigwedge|iint|intop|bigodot|bigcap|iiint|smallint|biguplus|bigcup|oint|oiint|oiiint|bigsqcup)(?![a-zA-Z0-9])/g,
- type: 'func'
- },
- {
- match: /\\[a-zA-Z0-9]+/g,
- type: 'oper'
- },
- {
- match: /(\(|\)|\{|\}|\[|\])/g,
- type: 'esc'
- },
- {
- match: /[a-zA-Z]+/g,
- type: 'var'
- },
- {
- match: /[0-9]+/g,
- type: 'num'
- }
-];
diff --git a/packages/plugin-math/tsconfig.json b/packages/plugin-math/tsconfig.json
index 6b69ac1..6b8bc7f 100644
--- a/packages/plugin-math/tsconfig.json
+++ b/packages/plugin-math/tsconfig.json
@@ -5,6 +5,5 @@
"rootDir": "src",
"typeRoots": ["./node_modules/@types"]
},
- "include": ["./src"],
- "references": [{ "path": "../carta-md" }]
+ "include": ["./src"]
}
diff --git a/packages/plugin-slash/README.md b/packages/plugin-slash/README.md
index af5a01e..840380c 100644
--- a/packages/plugin-slash/README.md
+++ b/packages/plugin-slash/README.md
@@ -20,7 +20,7 @@ import '@cartamd/plugin-slash/default.css';
```svelte
-
+
```
-## Options
+## Documentation
-Here are the options you can pass to `slash()`:
-
-```ts
-export interface SlashExtensionOptions {
- /**
- * List of default snippets to disable.
- */
- disableDefaultSnippets?: DefaultSnippetId[] | true;
- /**
- * Additional snippets.
- */
- snippets?: SlashSnippet[];
- /**
- * Custom in transition. See https://svelte.dev/docs#run-time-svelte-transition.
- */
- inTransition?: (node: Element) => TransitionConfig;
- /**
- * Custom out transition. See https://svelte.dev/docs#run-time-svelte-transition.
- */
- outTransition?: (node: Element) => TransitionConfig;
-}
-```
+Checkout the [docs](https://beartocode.github.io/carta/plugins/slash) for examples, options and more.
diff --git a/packages/plugin-slash/package.json b/packages/plugin-slash/package.json
index a52ef88..f6800a2 100644
--- a/packages/plugin-slash/package.json
+++ b/packages/plugin-slash/package.json
@@ -1,6 +1,6 @@
{
"name": "@cartamd/plugin-slash",
- "version": "3.0.0",
+ "version": "4.0.1",
"type": "module",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
@@ -35,22 +35,23 @@
"bezier-easing": "^2.1.0"
},
"peerDependencies": {
- "carta-md": "^3.0.0",
+ "carta-md": "^4.0.0",
"svelte": "^3.54.0 || ^4.0.0"
},
"devDependencies": {
- "@sveltejs/adapter-auto": "^2.0.0",
- "@sveltejs/kit": "^1.5.0",
- "@sveltejs/package": "^2.0.0",
+ "@sveltejs/adapter-auto": "^3.1.1",
+ "@sveltejs/kit": "^2.5.4",
+ "@sveltejs/package": "^2.3.0",
+ "@sveltejs/vite-plugin-svelte": "^3.0.2",
"@types/node-emoji": "^1.8.2",
"carta-md": "workspace:*",
+ "marked": "^9.1.5",
"publint": "^0.1.9",
- "svelte": "^3.54.0 || ^4.0.0",
- "svelte-check": "^3.0.1",
+ "svelte": "^4.2.12",
+ "svelte-check": "^3.6.7",
"tslib": "^2.4.1",
"typescript": "^5.0.0",
- "vite": "^4.3.9",
- "marked": "^9.1.5"
+ "vite": "^5.1.6"
},
"svelte": "./dist/index.js",
"keywords": [
diff --git a/packages/plugin-slash/src/app.html b/packages/plugin-slash/src/app.html
index d2fc6b0..f22aeaa 100644
--- a/packages/plugin-slash/src/app.html
+++ b/packages/plugin-slash/src/app.html
@@ -1,4 +1,4 @@
-
+
diff --git a/packages/plugin-slash/src/lib/Slash.svelte b/packages/plugin-slash/src/lib/Slash.svelte
index ec93669..7873941 100644
--- a/packages/plugin-slash/src/lib/Slash.svelte
+++ b/packages/plugin-slash/src/lib/Slash.svelte
@@ -10,14 +10,12 @@
export let outTransition: (node: Element) => TransitionConfig;
let visible = false;
- let caretPosition = { left: 0, right: 0, top: 0, bottom: 0 };
let hoveringIndex = 0;
let filter = '';
let slashPosition = 0;
let filteredSnippets = snippets;
let groupedSnippets: [string, SlashSnippet[]][];
let snippetsElements: HTMLButtonElement[] = Array(snippets.length);
- let elem: HTMLDivElement;
onMount(() => {
carta.input?.textarea.addEventListener('keydown', handleKeyDown);
@@ -63,7 +61,6 @@
} else if (e.key === '/') {
// Open
visible = true;
- caretPosition = carta.input.getCursorXY();
slashPosition = carta.input.textarea.selectionStart + 1;
filter = '';
}
@@ -122,17 +119,7 @@
carta.input.update();
}
- $: {
- if (elem) {
- // Make statement reactive
- caretPosition, elem.clientWidth, elem.clientHeight;
- carta.input?.moveElemToCaret(elem);
- }
- }
-
- $: {
- groupedSnippets = Object.entries(groupBy(filteredSnippets, 'group'));
- }
+ $: groupedSnippets = Object.entries(groupBy(filteredSnippets, 'group'));
$: {
// Scroll to make hovering snippet always visible
@@ -148,7 +135,7 @@
{#if visible && filteredSnippets.length > 0}
-
+
{#each groupedSnippets as [group, snippets], groupIndex}
{group}
diff --git a/packages/plugin-slash/src/lib/index.ts b/packages/plugin-slash/src/lib/index.ts
index 811ea65..48d545d 100644
--- a/packages/plugin-slash/src/lib/index.ts
+++ b/packages/plugin-slash/src/lib/index.ts
@@ -1,6 +1,6 @@
import { fade, scale, type TransitionConfig } from 'svelte/transition';
import SlashComponent from './Slash.svelte';
-import type { CartaExtension, CartaExtensionComponent } from 'carta-md';
+import type { Plugin, ExtensionComponent } from 'carta-md';
import BezierEasing from 'bezier-easing';
import { defaultSnippets, type DefaultSnippetId, type SlashSnippet } from './snippets';
export * from './default.css?inline';
@@ -35,7 +35,7 @@ interface ComponentProps {
* @param options Extension options.
* @returns The slash extension.
*/
-export const slash = (options?: SlashExtensionOptions): CartaExtension => {
+export const slash = (options?: SlashExtensionOptions): Plugin => {
const snippets: SlashSnippet[] = defaultSnippets.filter((snippet) =>
options?.disableDefaultSnippets === true
? false
@@ -56,7 +56,7 @@ export const slash = (options?: SlashExtensionOptions): CartaExtension => {
fade(node, {
duration: 100
}));
- const slashComponent: CartaExtensionComponent = {
+ const slashComponent: ExtensionComponent = {
component: SlashComponent,
props: {
snippets,
diff --git a/packages/plugin-slash/src/lib/snippets.ts b/packages/plugin-slash/src/lib/snippets.ts
index fbe51e1..9327d6d 100644
--- a/packages/plugin-slash/src/lib/snippets.ts
+++ b/packages/plugin-slash/src/lib/snippets.ts
@@ -1,4 +1,4 @@
-import type { CartaInput } from 'carta-md';
+import type { InputEnhancer } from 'carta-md';
export interface SlashSnippet {
/**
@@ -12,10 +12,10 @@ export interface SlashSnippet {
* Snippet callback.
* @param input Carta input.
*/
- action: (input: CartaInput) => void;
+ action: (input: InputEnhancer) => void;
}
-function insertLine(input: CartaInput, string: string) {
+function insertLine(input: InputEnhancer, string: string) {
const line = input.getLine();
if (line.value !== '') {
input.insertAt(line.end, `\n${string}`);
diff --git a/packages/plugin-slash/src/routes/+page.svelte b/packages/plugin-slash/src/routes/+page.svelte
index 23128f9..ea9fa8f 100644
--- a/packages/plugin-slash/src/routes/+page.svelte
+++ b/packages/plugin-slash/src/routes/+page.svelte
@@ -1,5 +1,5 @@
-
+
```
-## Options
+## Documentation
-Here are the options you can pass to `tikz()`:
-
-```ts
-interface TikzExtensionOptions {
- /**
- * Enables Tikzjax console output.
- */
- debug?: boolean;
- /**
- * Class for generated svg div container.
- */
- class?: string;
- /**
- * Whether to center the generated expression.
- * @default true
- */
- center?: boolean;
- /**
- * Post processing function for html.
- * This also runs on stored html, differently
- * from `postProcess`, which only runs when
- * the element is first created.
- */
- postProcessing?: (html: string) => string;
- /**
- * Post processing function for rendered SVGs Elem.
- * @deprecated Use `postProcessing` instead.
- */
- postProcess?: (elem: SVGElement) => void;
-}
-```
+Checkout the [docs](https://beartocode.github.io/carta/plugins/tikz) for examples, options and more.
diff --git a/packages/plugin-tikz/package.json b/packages/plugin-tikz/package.json
index f1580c3..631dd00 100644
--- a/packages/plugin-tikz/package.json
+++ b/packages/plugin-tikz/package.json
@@ -18,23 +18,23 @@
"build": "vite build"
},
"devDependencies": {
+ "@types/hast": "^3.0.4",
"@types/md5": "^2.3.2",
"carta-md": "workspace:*",
"md5": "^2.3.0",
"typescript": "^5.0.4",
- "vite": "^4.3.9",
- "vite-plugin-dts": "^2.3.0",
- "vite-raw-plugin": "^1.0.2",
- "marked": "^9.1.5"
+ "unified": "^11.0.4",
+ "vite": "^5.1.6",
+ "vite-plugin-dts": "^3.7.3",
+ "vite-raw-plugin": "^1.0.2"
},
"peerDependencies": {
- "carta-md": "^3.0.0",
- "marked": "^9.1.5"
+ "carta-md": "^4.0.0"
},
"files": [
"dist"
],
- "version": "3.0.0",
+ "version": "4.0.0",
"keywords": [
"carta",
"markdown",
@@ -46,5 +46,9 @@
"syntax highlighting",
"emoji",
"katex"
- ]
+ ],
+ "dependencies": {
+ "hast-util-from-dom": "^5.0.0",
+ "unist-util-visit": "^5.0.0"
+ }
}
diff --git a/packages/plugin-tikz/src/index.ts b/packages/plugin-tikz/src/index.ts
index 0a40f74..8ef05de 100644
--- a/packages/plugin-tikz/src/index.ts
+++ b/packages/plugin-tikz/src/index.ts
@@ -1,5 +1,8 @@
-import type { Carta, CartaEvent, CartaExtension } from 'carta-md';
-import { TokenizerAndRendererExtension } from 'marked';
+import type { Carta, Event, Plugin } from 'carta-md';
+import type { Plugin as UnifiedPlugin } from 'unified';
+import { visit, SKIP } from 'unist-util-visit';
+import { fromDom } from 'hast-util-from-dom';
+import type * as hast from 'hast';
import md5 from 'md5';
interface TikzExtensionOptions {
@@ -18,102 +21,124 @@ interface TikzExtensionOptions {
center?: boolean;
/**
* Post processing function for html.
- * This also runs on stored html, differently
- * from `postProcess`, which only runs when
- * the element is first created.
+ * This also runs on stored html.
*/
postProcessing?: (html: string) => string;
- /**
- * Post processing function for rendered SVGs Elem.
- * @deprecated Use `postProcessing` instead.
- */
- postProcess?: (elem: SVGElement) => void;
}
-let carta: Carta;
-
/**
* TikzJax extension for Carta.
* @param options Tikz options.
*/
-export const tikz = (options?: TikzExtensionOptions): CartaExtension => {
+export const tikz = (options?: TikzExtensionOptions): Plugin => {
+ let carta: Carta;
return {
- cartaRef: (c) => (carta = c),
- shjRef: (shj) => {
- import('./tikz')
- .then((module) => shj.loadCustomLanguage('tikz', module))
- .then(() => carta.input?.update());
+ onLoad: async ({ carta: c }) => {
+ carta = c;
+
+ const highlighter = await carta.highlighter();
+ await highlighter.loadLanguage('latex');
+ carta.input?.update();
},
- markedExtensions: [
+ transformers: [
{
- async: true,
- extensions: [tikzTokenizer(options)]
+ execution: 'async',
+ type: 'rehype',
+ transform({ carta, processor }) {
+ processor.use(tikzTransformer, { carta, options });
+ }
}
],
- listeners: [['carta-render', (e) => generateTikzImages(e, options)]]
+ listeners: [['carta-render', (e) => generateTikzImages(e, options)]],
+ grammarRules: [
+ {
+ name: 'tikz',
+ type: 'block',
+ definition: {
+ begin: '(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(tikz)((\\s+|:|,|\\{|\\?)[^`]*)?$)',
+ beginCaptures: {
+ '3': { name: 'punctuation.definition.markdown' },
+ '4': { name: 'fenced_code.block.language.markdown' },
+ '5': { name: 'fenced_code.block.language.attributes.markdown' }
+ },
+ end: '(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$',
+ endCaptures: { '3': { name: 'punctuation.definition.markdown' } },
+ name: 'markup.fenced_code.block.markdown',
+ patterns: [
+ {
+ begin: '(^|\\G)(\\s*)(.*)',
+ contentName: 'meta.embedded.block.latex',
+ patterns: [{ include: 'text.tex.latex' }],
+ while: '(^|\\G)(?!\\s*([`~]{3,})\\s*$)'
+ }
+ ]
+ }
+ }
+ ]
};
};
// Keeps track of tikz generation to remove previous items
let currentGeneration = 0;
-const tikzTokenizer = (options?: TikzExtensionOptions): TokenizerAndRendererExtension => {
- return {
- name: 'tikz',
- level: 'block',
- start: (src) => src.indexOf('\n```tikz'),
- tokenizer: (src) => {
- const match = src.match(/^```tikz+\n([^`]+?)\n```+\n/);
- if (match) {
- return {
- type: 'tikz',
- raw: match[0],
- text: match[1].trim()
- };
- }
- },
- renderer: (token) => {
+const tikzTransformer: UnifiedPlugin<
+ [{ carta: Carta; options: TikzExtensionOptions | undefined }],
+ hast.Root
+> = ({ carta, options }) => {
+ return async function (tree) {
+ visit(tree, (pre, index, parent) => {
if (typeof document === 'undefined') {
// Cannot run outside the browser
- return ``;
+ return;
}
- const template = document.createElement('div');
+ if (pre.type !== 'element') return;
+ const preElement = pre as hast.Element;
+ if (preElement.tagName !== 'pre') return;
+ const element = pre.children.at(0) as hast.Element | undefined;
+ if (!element) return;
+
+ if (element.tagName !== 'code') return;
+ if (!element.properties['className']) return;
+ if (!(element.properties['className'] as string[]).includes('language-tikz')) return;
+
+ // Element is a TikZ code block
+ const source = tidyTikzSource((element.children[0] as hast.Text).value as string);
+
+ const container = document.createElement('div');
+ const template = document.createElement('div');
+ const text = document.createTextNode(source);
+
+ container.classList.add('tikz-generated');
+ container.setAttribute('tikz-generation', currentGeneration.toString());
+ if (options?.center ?? true) container.setAttribute('align', 'center');
+ if (options?.class) container.classList.add(...options.class.split(' '));
- const center = options?.center ?? true;
template.setAttribute('type', 'tikzjax');
if (options?.debug) template.setAttribute('data-show-console', 'true');
- const text = document.createTextNode(
- tidyTikzSource(token.raw.slice(8, token.raw.length - 4))
- );
template.appendChild(text);
- // Try accessing cached HTML
- const hash = md5(JSON.stringify(template.dataset) + template.childNodes[0].nodeValue);
- const savedSvg = window.localStorage.getItem(hash);
+ const hash = md5(JSON.stringify(template.dataset) + text.nodeValue);
+ let savedSvg = window.localStorage.getItem(hash);
- let html: string;
if (savedSvg) {
- html = savedSvg;
- if (options?.postProcessing) html = options.postProcessing(html);
+ if (options?.postProcessing) savedSvg = options.postProcessing(savedSvg);
+ container.innerHTML = savedSvg;
} else {
- html = template.outerHTML;
+ container.appendChild(template);
}
- const sanitizer = carta.options?.sanitizer;
- if (sanitizer) html = sanitizer(html);
+ if (carta.sanitizer) {
+ container.innerHTML = carta.sanitizer(container.innerHTML);
+ }
- return `
-
- ${html}
-
- `;
- }
+ const hastNode = fromDom(container) as hast.Element;
+
+ parent?.children.splice(index!, 1, hastNode);
+
+ return [SKIP, index!];
+ });
};
};
@@ -123,7 +148,7 @@ declare global {
}
}
-function generateTikzImages(e: CartaEvent, options?: TikzExtensionOptions) {
+function generateTikzImages(e: Event, options?: TikzExtensionOptions) {
const carta = e.detail.carta;
const container = carta.renderer?.container;
if (!container) {
@@ -144,12 +169,13 @@ function removePreviousImages(container: HTMLDivElement) {
async function loadTikz(options?: TikzExtensionOptions) {
if (window.tikzjax != null) return;
+ window.tikzjax = true;
// eslint-disable-next-line
// @ts-ignore
const tikzjax = (await import('./assets/tikzjax.js')).default;
- const script = ``;
+ const script = /* html */ ``;
// Simply appending the element does not work as the script is not executed
// By doing the following we ensure that it is run.
@@ -160,9 +186,6 @@ async function loadTikz(options?: TikzExtensionOptions) {
document.addEventListener('tikzjax-load-finished', (e) => {
const elem = e.target as SVGElement;
- // Support old version
- options?.postProcess && options.postProcess(elem);
-
if (options?.postProcessing) elem.outerHTML = options.postProcessing(elem.outerHTML);
});
}
diff --git a/packages/plugin-tikz/src/tikz.ts b/packages/plugin-tikz/src/tikz.ts
deleted file mode 100644
index 7050195..0000000
--- a/packages/plugin-tikz/src/tikz.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-export default [
- {
- match: /\\(usepackage|input|usemodule)(?![a-zA-Z0-9])/g,
- type: 'str'
- },
- {
- match: /\\(begin|end|node)(?![a-zA-Z0-9])/g,
- type: 'class'
- },
- {
- match: /\\[a-zA-Z0-9]+/g,
- type: 'oper'
- },
- {
- match: /%.+$/gm,
- type: 'cmnt'
- },
- {
- match: /(\(|\)|\{|\}|\[|\])/g,
- type: 'esc'
- },
- {
- match: /[0-9]+[a-z]{0,3}/g,
- type: 'num'
- }
-];
diff --git a/packages/plugin-tikz/tsconfig.json b/packages/plugin-tikz/tsconfig.json
index 6b69ac1..6b8bc7f 100644
--- a/packages/plugin-tikz/tsconfig.json
+++ b/packages/plugin-tikz/tsconfig.json
@@ -5,6 +5,5 @@
"rootDir": "src",
"typeRoots": ["./node_modules/@types"]
},
- "include": ["./src"],
- "references": [{ "path": "../carta-md" }]
+ "include": ["./src"]
}
diff --git a/packages/tsconfig.json b/packages/tsconfig.json
deleted file mode 100644
index dc1da2c..0000000
--- a/packages/tsconfig.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "references": [
- { "path": "carta-md" },
- { "path": "plugin-math" },
- { "path": "plugin-emoji" },
- { "path": "plugin-slash" },
- { "path": "plugin-code" },
- { "path": "plugin-tikz" },
- { "path": "plugin-attachment" }
- ]
-}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index a449661..1968455 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -4,12 +4,6 @@ settings:
autoInstallPeers: true
excludeLinksFromLockfile: false
-overrides:
- '@adobe/css-tools@<4.3.1': '>=4.3.1'
- semver@>=7.0.0 <7.5.2: '>=7.5.2'
- postcss@<8.4.31: '>=8.4.31'
- undici@<5.26.2: '>=5.26.2'
-
importers:
.:
@@ -19,10 +13,10 @@ importers:
version: 18.16.3
'@typescript-eslint/eslint-plugin':
specifier: ^6.10.0
- version: 6.10.0(@typescript-eslint/parser@6.10.0)(eslint@8.39.0)(typescript@5.1.6)
+ version: 6.10.0(@typescript-eslint/parser@6.10.0)(eslint@8.39.0)(typescript@5.3.3)
'@typescript-eslint/parser':
specifier: ^6.10.0
- version: 6.10.0(eslint@8.39.0)(typescript@5.1.6)
+ version: 6.10.0(eslint@8.39.0)(typescript@5.3.3)
commitizen:
specifier: ^4.3.0
version: 4.3.0
@@ -37,7 +31,7 @@ importers:
version: 8.8.0(eslint@8.39.0)
eslint-plugin-svelte:
specifier: ^2.35.0
- version: 2.35.0(eslint@8.39.0)(svelte@3.58.0)(ts-node@10.9.1)
+ version: 2.35.0(eslint@8.39.0)(svelte@4.2.12)(ts-node@10.9.1)
husky:
specifier: ^8.0.3
version: 8.0.3
@@ -48,11 +42,14 @@ importers:
specifier: ^6.3.0
version: 6.3.0
prettier:
- specifier: ^2.8.8
- version: 2.8.8
+ specifier: 3.1.0
+ version: 3.1.0
prettier-plugin-svelte:
- specifier: ^2.10.0
- version: 2.10.0(prettier@2.8.8)(svelte@3.58.0)
+ specifier: ^3.1.0
+ version: 3.1.0(prettier@3.1.0)(svelte@4.2.12)
+ prettier-plugin-tailwindcss:
+ specifier: ^0.5.7
+ version: 0.5.7(prettier-plugin-svelte@3.1.0)(prettier@3.1.0)
semantic-release:
specifier: ^20.1.3
version: 20.1.3
@@ -60,8 +57,11 @@ importers:
specifier: ^7.0.5
version: 7.0.5(semantic-release@20.1.3)
- demo:
+ docs:
dependencies:
+ '@cartamd/plugin-attachment':
+ specifier: workspace:^
+ version: link:../packages/plugin-attachment
'@cartamd/plugin-code':
specifier: workspace:^
version: link:../packages/plugin-code
@@ -77,86 +77,195 @@ importers:
'@cartamd/plugin-tikz':
specifier: workspace:^
version: link:../packages/plugin-tikz
+ bits-ui:
+ specifier: ^0.9.1
+ version: 0.9.4(svelte@4.2.12)
carta-md:
specifier: workspace:^
version: link:../packages/carta-md
+ clsx:
+ specifier: ^2.0.0
+ version: 2.0.0
+ cmdk-sv:
+ specifier: ^0.0.6
+ version: 0.0.6(svelte@4.2.12)
+ flexsearch:
+ specifier: 0.7.21
+ version: 0.7.21
+ iconify-icon:
+ specifier: ^2.0.0
+ version: 2.0.0
katex:
- specifier: ^0.16.7
- version: 0.16.7
+ specifier: ^0.16.10
+ version: 0.16.10
+ tailwind-merge:
+ specifier: ^2.0.0
+ version: 2.0.0
devDependencies:
'@sveltejs/adapter-auto':
- specifier: ^2.0.0
- version: 2.0.0(@sveltejs/kit@1.15.9)
+ specifier: ^3.1.1
+ version: 3.1.1(@sveltejs/kit@2.5.4)
'@sveltejs/adapter-static':
- specifier: 1.0.0-next.50
- version: 1.0.0-next.50(@sveltejs/kit@1.15.9)
+ specifier: 3.0.1
+ version: 3.0.1(@sveltejs/kit@2.5.4)
'@sveltejs/kit':
- specifier: ^1.5.0
- version: 1.15.9(svelte@3.55.1)(vite@4.3.9)
+ specifier: ^2.5.4
+ version: 2.5.4(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@4.2.12)(vite@5.1.6)
+ '@sveltejs/package':
+ specifier: ^2.3.0
+ version: 2.3.0(svelte@4.2.12)(typescript@5.1.6)
+ '@sveltejs/vite-plugin-svelte':
+ specifier: ^3.0.2
+ version: 3.0.2(svelte@4.2.12)(vite@5.1.6)
+ '@types/flexsearch':
+ specifier: ^0.7.6
+ version: 0.7.6
'@types/katex':
specifier: ^0.16.0
version: 0.16.0
+ autoprefixer:
+ specifier: ^10.4.16
+ version: 10.4.16(postcss@8.4.36)
+ mdsvex:
+ specifier: ^0.11.0
+ version: 0.11.0(svelte@4.2.12)
+ rehype-autolink-headings:
+ specifier: ^7.1.0
+ version: 7.1.0
+ rehype-slug:
+ specifier: ^6.0.0
+ version: 6.0.0
+ sass:
+ specifier: ^1.69.5
+ version: 1.69.5
svelte:
- specifier: ^3.54.0 || ^4.0.0
- version: 3.55.1
+ specifier: ^4.2.12
+ version: 4.2.12
svelte-check:
- specifier: ^3.0.1
- version: 3.2.0(postcss@8.4.31)(svelte@3.55.1)
+ specifier: ^3.6.7
+ version: 3.6.7(postcss@8.4.36)(sass@1.69.5)(svelte@4.2.12)
+ tailwindcss:
+ specifier: ^3.3.5
+ version: 3.3.5(ts-node@10.9.1)
tslib:
specifier: ^2.4.1
version: 2.5.0
typescript:
specifier: ^5.0.0
- version: 5.0.4
+ version: 5.1.6
vite:
- specifier: ^4.3.9
- version: 4.3.9(@types/node@18.16.3)
+ specifier: ^5.1.6
+ version: 5.1.6(@types/node@18.16.3)(sass@1.69.5)
packages/carta-md:
dependencies:
- '@speed-highlight/core':
- specifier: 1.2.2
- version: 1.2.2
- marked:
- specifier: ^9.1.5
- version: 9.1.5
+ rehype-stringify:
+ specifier: ^10.0.0
+ version: 10.0.0
+ remark-gfm:
+ specifier: ^4.0.0
+ version: 4.0.0
+ remark-parse:
+ specifier: ^11.0.0
+ version: 11.0.0
+ remark-rehype:
+ specifier: ^11.1.0
+ version: 11.1.0
+ shiki:
+ specifier: ^1.4.0
+ version: 1.4.0
svelte:
specifier: ^3.54.0 || ^4.0.0
- version: 3.55.1
+ version: 4.2.2
+ unified:
+ specifier: ^11.0.4
+ version: 11.0.4
devDependencies:
'@sveltejs/adapter-auto':
- specifier: ^1.0.0-next.90
- version: 1.0.3(@sveltejs/kit@1.15.9)
+ specifier: ^3.1.1
+ version: 3.1.1(@sveltejs/kit@2.5.4)
'@sveltejs/kit':
- specifier: ^1.0.0-next.587
- version: 1.15.9(svelte@3.55.1)(vite@4.3.9)
+ specifier: ^2.5.4
+ version: 2.5.4(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@4.2.2)(vite@5.1.6)
'@sveltejs/package':
- specifier: ^2.0.2
- version: 2.0.2(svelte@3.55.1)(typescript@5.1.6)
+ specifier: ^2.3.0
+ version: 2.3.0(svelte@4.2.2)(typescript@5.1.6)
+ '@sveltejs/vite-plugin-svelte':
+ specifier: ^3.0.2
+ version: 3.0.2(svelte@4.2.2)(vite@5.1.6)
svelte-check:
- specifier: ^3.2.0
- version: 3.2.0(postcss@8.4.31)(svelte@3.55.1)
+ specifier: ^3.6.7
+ version: 3.6.7(postcss@8.4.31)(svelte@4.2.2)
tslib:
specifier: ^2.4.1
version: 2.5.0
typescript:
specifier: ^5.1.6
version: 5.1.6
- typescript-plugin-css-modules:
- specifier: ^5.0.1
- version: 5.0.1(ts-node@10.9.1)(typescript@5.1.6)
+ vite:
+ specifier: ^5.1.6
+ version: 5.1.6(@types/node@18.16.3)(sass@1.69.5)
+
+ packages/plugin-anchor:
+ dependencies:
+ rehype-autolink-headings:
+ specifier: ^7.1.0
+ version: 7.1.0
+ rehype-slug:
+ specifier: ^6.0.0
+ version: 6.0.0
+ devDependencies:
+ '@sveltejs/adapter-auto':
+ specifier: ^3.1.1
+ version: 3.1.1(@sveltejs/kit@2.5.4)
+ '@sveltejs/kit':
+ specifier: ^2.5.4
+ version: 2.5.4(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@4.2.2)(vite@5.1.6)
+ '@sveltejs/package':
+ specifier: ^2.3.0
+ version: 2.3.0(svelte@4.2.2)(typescript@5.1.6)
+ '@sveltejs/vite-plugin-svelte':
+ specifier: ^3.0.2
+ version: 3.0.2(svelte@4.2.2)(vite@5.1.6)
+ carta-md:
+ specifier: workspace:*
+ version: link:../carta-md
+ marked:
+ specifier: ^9.1.5
+ version: 9.1.5
+ publint:
+ specifier: ^0.1.9
+ version: 0.1.12
+ svelte:
+ specifier: ^3.54.0 || ^4.0.0
+ version: 4.2.2
+ svelte-check:
+ specifier: ^3.6.7
+ version: 3.6.7(postcss@8.4.31)(svelte@4.2.2)
+ tslib:
+ specifier: ^2.4.1
+ version: 2.5.0
+ typescript:
+ specifier: ^5.0.0
+ version: 5.1.6
+ vite:
+ specifier: ^5.1.6
+ version: 5.1.6(@types/node@18.16.3)(sass@1.69.5)
packages/plugin-attachment:
devDependencies:
'@sveltejs/adapter-auto':
- specifier: ^2.0.0
- version: 2.0.0(@sveltejs/kit@1.27.1)
+ specifier: ^3.1.1
+ version: 3.1.1(@sveltejs/kit@2.5.4)
'@sveltejs/kit':
- specifier: ^1.27.1
- version: 1.27.1(svelte@4.2.2)(vite@4.3.9)
+ specifier: ^2.5.4
+ version: 2.5.4(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@4.2.12)(vite@5.1.6)
'@sveltejs/package':
- specifier: ^2.2.2
- version: 2.2.2(svelte@4.2.2)(typescript@5.1.6)
+ specifier: ^2.3.0
+ version: 2.3.0(svelte@4.2.12)(typescript@5.1.6)
+ '@sveltejs/vite-plugin-svelte':
+ specifier: ^3.0.2
+ version: 3.0.2(svelte@4.2.12)(vite@5.1.6)
'@types/node-emoji':
specifier: ^1.8.2
version: 1.8.2
@@ -170,11 +279,11 @@ importers:
specifier: ^0.1.9
version: 0.1.12
svelte:
- specifier: ^4.2.2
- version: 4.2.2
+ specifier: ^4.2.12
+ version: 4.2.12
svelte-check:
- specifier: ^3.5.2
- version: 3.5.2(postcss@8.4.31)(svelte@4.2.2)
+ specifier: ^3.6.7
+ version: 3.6.7(postcss@8.4.31)(svelte@4.2.12)
tslib:
specifier: ^2.4.1
version: 2.5.0
@@ -182,14 +291,17 @@ importers:
specifier: ^5.0.0
version: 5.1.6
vite:
- specifier: ^4.3.9
- version: 4.3.9(@types/node@18.16.3)
+ specifier: ^5.1.6
+ version: 5.1.6(@types/node@18.16.3)(sass@1.69.5)
packages/plugin-code:
dependencies:
- marked-highlight:
- specifier: ^2.0.6
- version: 2.0.6(marked@9.1.5)
+ '@shikijs/rehype':
+ specifier: ^1.4.0
+ version: 1.4.0
+ unified:
+ specifier: ^11.0.4
+ version: 11.0.4
devDependencies:
'@types/node':
specifier: ^18.16.3
@@ -197,9 +309,6 @@ importers:
carta-md:
specifier: workspace:*
version: link:../carta-md
- marked:
- specifier: ^9.1.5
- version: 9.1.5
typescript:
specifier: ^5.0.4
version: 5.0.4
@@ -215,16 +324,22 @@ importers:
node-emoji:
specifier: ^1.11.0
version: 1.11.0
+ remark-gemoji:
+ specifier: ^8.0.0
+ version: 8.0.0
devDependencies:
'@sveltejs/adapter-auto':
- specifier: ^2.0.0
- version: 2.0.0(@sveltejs/kit@1.15.9)
+ specifier: ^3.1.1
+ version: 3.1.1(@sveltejs/kit@2.5.4)
'@sveltejs/kit':
- specifier: ^1.5.0
- version: 1.15.9(svelte@3.55.1)(vite@4.3.9)
+ specifier: ^2.5.4
+ version: 2.5.4(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@4.2.12)(vite@5.1.6)
'@sveltejs/package':
- specifier: ^2.0.0
- version: 2.0.2(svelte@3.55.1)(typescript@5.0.4)
+ specifier: ^2.3.0
+ version: 2.3.0(svelte@4.2.12)(typescript@5.0.4)
+ '@sveltejs/vite-plugin-svelte':
+ specifier: ^3.0.2
+ version: 3.0.2(svelte@4.2.12)(vite@5.1.6)
'@types/node-emoji':
specifier: ^1.8.2
version: 1.8.2
@@ -238,11 +353,11 @@ importers:
specifier: ^0.1.9
version: 0.1.12
svelte:
- specifier: ^3.54.0 || ^4.0.0
- version: 3.55.1
+ specifier: ^4.2.12
+ version: 4.2.12
svelte-check:
- specifier: ^3.0.1
- version: 3.2.0(postcss@8.4.31)(svelte@3.55.1)
+ specifier: ^3.6.7
+ version: 3.6.7(postcss@8.4.31)(svelte@4.2.12)
tslib:
specifier: ^2.4.1
version: 2.5.0
@@ -250,24 +365,21 @@ importers:
specifier: ^5.0.0
version: 5.0.4
vite:
- specifier: ^4.3.9
- version: 4.3.9(@types/node@18.16.3)
+ specifier: ^5.1.6
+ version: 5.1.6(@types/node@18.16.3)(sass@1.69.5)
packages/plugin-math:
dependencies:
- katex:
- specifier: ^0.16.7
- version: 0.16.7
+ rehype-katex:
+ specifier: ^7.0.0
+ version: 7.0.0
+ remark-math:
+ specifier: ^6.0.0
+ version: 6.0.0
devDependencies:
- '@types/katex':
- specifier: ^0.16.0
- version: 0.16.0
carta-md:
specifier: workspace:*
version: link:../carta-md
- marked:
- specifier: ^9.1.5
- version: 9.1.5
typescript:
specifier: ^5.0.4
version: 5.0.4
@@ -279,14 +391,17 @@ importers:
version: 2.1.0
devDependencies:
'@sveltejs/adapter-auto':
- specifier: ^2.0.0
- version: 2.0.0(@sveltejs/kit@1.15.9)
+ specifier: ^3.1.1
+ version: 3.1.1(@sveltejs/kit@2.5.4)
'@sveltejs/kit':
- specifier: ^1.5.0
- version: 1.15.9(svelte@3.55.1)(vite@4.3.9)
+ specifier: ^2.5.4
+ version: 2.5.4(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@4.2.12)(vite@5.1.6)
'@sveltejs/package':
- specifier: ^2.0.0
- version: 2.0.2(svelte@3.55.1)(typescript@5.0.4)
+ specifier: ^2.3.0
+ version: 2.3.0(svelte@4.2.12)(typescript@5.0.4)
+ '@sveltejs/vite-plugin-svelte':
+ specifier: ^3.0.2
+ version: 3.0.2(svelte@4.2.12)(vite@5.1.6)
'@types/node-emoji':
specifier: ^1.8.2
version: 1.8.2
@@ -300,11 +415,11 @@ importers:
specifier: ^0.1.9
version: 0.1.12
svelte:
- specifier: ^3.54.0 || ^4.0.0
- version: 3.55.1
+ specifier: ^4.2.12
+ version: 4.2.12
svelte-check:
- specifier: ^3.0.1
- version: 3.2.0(postcss@8.4.31)(svelte@3.55.1)
+ specifier: ^3.6.7
+ version: 3.6.7(postcss@8.4.31)(svelte@4.2.12)
tslib:
specifier: ^2.4.1
version: 2.5.0
@@ -312,40 +427,51 @@ importers:
specifier: ^5.0.0
version: 5.0.4
vite:
- specifier: ^4.3.9
- version: 4.3.9(@types/node@18.16.3)
+ specifier: ^5.1.6
+ version: 5.1.6(@types/node@18.16.3)(sass@1.69.5)
packages/plugin-tikz:
+ dependencies:
+ hast-util-from-dom:
+ specifier: ^5.0.0
+ version: 5.0.0
+ unist-util-visit:
+ specifier: ^5.0.0
+ version: 5.0.0
devDependencies:
+ '@types/hast':
+ specifier: ^3.0.4
+ version: 3.0.4
'@types/md5':
specifier: ^2.3.2
version: 2.3.2
carta-md:
specifier: workspace:*
version: link:../carta-md
- marked:
- specifier: ^9.1.5
- version: 9.1.5
md5:
specifier: ^2.3.0
version: 2.3.0
typescript:
specifier: ^5.0.4
version: 5.0.4
+ unified:
+ specifier: ^11.0.4
+ version: 11.0.4
vite:
- specifier: ^4.3.9
- version: 4.3.9(@types/node@18.16.3)
+ specifier: ^5.1.6
+ version: 5.1.6(@types/node@18.16.3)(sass@1.69.5)
vite-plugin-dts:
- specifier: ^2.3.0
- version: 2.3.0(@types/node@18.16.3)(vite@4.3.9)
+ specifier: ^3.7.3
+ version: 3.7.3(@types/node@18.16.3)(typescript@5.0.4)(vite@5.1.6)
vite-raw-plugin:
specifier: ^1.0.2
version: 1.0.2
packages:
- /@adobe/css-tools@4.3.1:
- resolution: {integrity: sha512-/62yikz7NLScCGAAST5SHdnjaDJQBDq0M2muyRTpf2VQhw6StBg2ALiu73zSJQ4fMVLA+0uBhBHAle7Wg+2kSg==}
+ /@alloc/quick-lru@5.2.0:
+ resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
+ engines: {node: '>=10'}
dev: true
/@ampproject/remapping@2.2.1:
@@ -354,7 +480,6 @@ packages:
dependencies:
'@jridgewell/gen-mapping': 0.3.3
'@jridgewell/trace-mapping': 0.3.18
- dev: true
/@babel/code-frame@7.22.5:
resolution: {integrity: sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==}
@@ -382,14 +507,21 @@ packages:
js-tokens: 4.0.0
dev: true
- /@babel/parser@7.21.5:
- resolution: {integrity: sha512-J+IxH2IsxV4HbnTrSWgMAQj0UEo61hDA4Ny8h8PCX0MLXiibqHbqIOVneqdocemSBc22VpBKxt4J6FQzy9HarQ==}
+ /@babel/parser@7.24.0:
+ resolution: {integrity: sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==}
engines: {node: '>=6.0.0'}
hasBin: true
dependencies:
'@babel/types': 7.21.5
dev: true
+ /@babel/runtime@7.23.2:
+ resolution: {integrity: sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ regenerator-runtime: 0.14.0
+ dev: false
+
/@babel/types@7.21.5:
resolution: {integrity: sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q==}
engines: {node: '>=6.9.0'}
@@ -479,8 +611,17 @@ packages:
'@jridgewell/trace-mapping': 0.3.9
dev: true
- /@esbuild/android-arm64@0.17.18:
- resolution: {integrity: sha512-/iq0aK0eeHgSC3z55ucMAHO05OIqmQehiGay8eP5l/5l+iEr4EIbh4/MI8xD9qRFjqzgkc0JkX0LculNC9mXBw==}
+ /@esbuild/aix-ppc64@0.19.12:
+ resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [aix]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/android-arm64@0.19.12:
+ resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==}
engines: {node: '>=12'}
cpu: [arm64]
os: [android]
@@ -488,8 +629,8 @@ packages:
dev: true
optional: true
- /@esbuild/android-arm@0.17.18:
- resolution: {integrity: sha512-EmwL+vUBZJ7mhFCs5lA4ZimpUH3WMAoqvOIYhVQwdIgSpHC8ImHdsRyhHAVxpDYUSm0lWvd63z0XH1IlImS2Qw==}
+ /@esbuild/android-arm@0.19.12:
+ resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==}
engines: {node: '>=12'}
cpu: [arm]
os: [android]
@@ -497,8 +638,8 @@ packages:
dev: true
optional: true
- /@esbuild/android-x64@0.17.18:
- resolution: {integrity: sha512-x+0efYNBF3NPW2Xc5bFOSFW7tTXdAcpfEg2nXmxegm4mJuVeS+i109m/7HMiOQ6M12aVGGFlqJX3RhNdYM2lWg==}
+ /@esbuild/android-x64@0.19.12:
+ resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==}
engines: {node: '>=12'}
cpu: [x64]
os: [android]
@@ -506,8 +647,8 @@ packages:
dev: true
optional: true
- /@esbuild/darwin-arm64@0.17.18:
- resolution: {integrity: sha512-6tY+djEAdF48M1ONWnQb1C+6LiXrKjmqjzPNPWXhu/GzOHTHX2nh8Mo2ZAmBFg0kIodHhciEgUBtcYCAIjGbjQ==}
+ /@esbuild/darwin-arm64@0.19.12:
+ resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==}
engines: {node: '>=12'}
cpu: [arm64]
os: [darwin]
@@ -515,8 +656,8 @@ packages:
dev: true
optional: true
- /@esbuild/darwin-x64@0.17.18:
- resolution: {integrity: sha512-Qq84ykvLvya3dO49wVC9FFCNUfSrQJLbxhoQk/TE1r6MjHo3sFF2tlJCwMjhkBVq3/ahUisj7+EpRSz0/+8+9A==}
+ /@esbuild/darwin-x64@0.19.12:
+ resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==}
engines: {node: '>=12'}
cpu: [x64]
os: [darwin]
@@ -524,8 +665,8 @@ packages:
dev: true
optional: true
- /@esbuild/freebsd-arm64@0.17.18:
- resolution: {integrity: sha512-fw/ZfxfAzuHfaQeMDhbzxp9mc+mHn1Y94VDHFHjGvt2Uxl10mT4CDavHm+/L9KG441t1QdABqkVYwakMUeyLRA==}
+ /@esbuild/freebsd-arm64@0.19.12:
+ resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==}
engines: {node: '>=12'}
cpu: [arm64]
os: [freebsd]
@@ -533,8 +674,8 @@ packages:
dev: true
optional: true
- /@esbuild/freebsd-x64@0.17.18:
- resolution: {integrity: sha512-FQFbRtTaEi8ZBi/A6kxOC0V0E9B/97vPdYjY9NdawyLd4Qk5VD5g2pbWN2VR1c0xhzcJm74HWpObPszWC+qTew==}
+ /@esbuild/freebsd-x64@0.19.12:
+ resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==}
engines: {node: '>=12'}
cpu: [x64]
os: [freebsd]
@@ -542,8 +683,8 @@ packages:
dev: true
optional: true
- /@esbuild/linux-arm64@0.17.18:
- resolution: {integrity: sha512-R7pZvQZFOY2sxUG8P6A21eq6q+eBv7JPQYIybHVf1XkQYC+lT7nDBdC7wWKTrbvMXKRaGudp/dzZCwL/863mZQ==}
+ /@esbuild/linux-arm64@0.19.12:
+ resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==}
engines: {node: '>=12'}
cpu: [arm64]
os: [linux]
@@ -551,8 +692,8 @@ packages:
dev: true
optional: true
- /@esbuild/linux-arm@0.17.18:
- resolution: {integrity: sha512-jW+UCM40LzHcouIaqv3e/oRs0JM76JfhHjCavPxMUti7VAPh8CaGSlS7cmyrdpzSk7A+8f0hiedHqr/LMnfijg==}
+ /@esbuild/linux-arm@0.19.12:
+ resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==}
engines: {node: '>=12'}
cpu: [arm]
os: [linux]
@@ -560,8 +701,8 @@ packages:
dev: true
optional: true
- /@esbuild/linux-ia32@0.17.18:
- resolution: {integrity: sha512-ygIMc3I7wxgXIxk6j3V00VlABIjq260i967Cp9BNAk5pOOpIXmd1RFQJQX9Io7KRsthDrQYrtcx7QCof4o3ZoQ==}
+ /@esbuild/linux-ia32@0.19.12:
+ resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==}
engines: {node: '>=12'}
cpu: [ia32]
os: [linux]
@@ -569,8 +710,8 @@ packages:
dev: true
optional: true
- /@esbuild/linux-loong64@0.17.18:
- resolution: {integrity: sha512-bvPG+MyFs5ZlwYclCG1D744oHk1Pv7j8psF5TfYx7otCVmcJsEXgFEhQkbhNW8otDHL1a2KDINW20cfCgnzgMQ==}
+ /@esbuild/linux-loong64@0.19.12:
+ resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==}
engines: {node: '>=12'}
cpu: [loong64]
os: [linux]
@@ -578,8 +719,8 @@ packages:
dev: true
optional: true
- /@esbuild/linux-mips64el@0.17.18:
- resolution: {integrity: sha512-oVqckATOAGuiUOa6wr8TXaVPSa+6IwVJrGidmNZS1cZVx0HqkTMkqFGD2HIx9H1RvOwFeWYdaYbdY6B89KUMxA==}
+ /@esbuild/linux-mips64el@0.19.12:
+ resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==}
engines: {node: '>=12'}
cpu: [mips64el]
os: [linux]
@@ -587,8 +728,8 @@ packages:
dev: true
optional: true
- /@esbuild/linux-ppc64@0.17.18:
- resolution: {integrity: sha512-3dLlQO+b/LnQNxgH4l9rqa2/IwRJVN9u/bK63FhOPB4xqiRqlQAU0qDU3JJuf0BmaH0yytTBdoSBHrb2jqc5qQ==}
+ /@esbuild/linux-ppc64@0.19.12:
+ resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==}
engines: {node: '>=12'}
cpu: [ppc64]
os: [linux]
@@ -596,8 +737,8 @@ packages:
dev: true
optional: true
- /@esbuild/linux-riscv64@0.17.18:
- resolution: {integrity: sha512-/x7leOyDPjZV3TcsdfrSI107zItVnsX1q2nho7hbbQoKnmoeUWjs+08rKKt4AUXju7+3aRZSsKrJtaRmsdL1xA==}
+ /@esbuild/linux-riscv64@0.19.12:
+ resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==}
engines: {node: '>=12'}
cpu: [riscv64]
os: [linux]
@@ -605,8 +746,8 @@ packages:
dev: true
optional: true
- /@esbuild/linux-s390x@0.17.18:
- resolution: {integrity: sha512-cX0I8Q9xQkL/6F5zWdYmVf5JSQt+ZfZD2bJudZrWD+4mnUvoZ3TDDXtDX2mUaq6upMFv9FlfIh4Gfun0tbGzuw==}
+ /@esbuild/linux-s390x@0.19.12:
+ resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==}
engines: {node: '>=12'}
cpu: [s390x]
os: [linux]
@@ -614,8 +755,8 @@ packages:
dev: true
optional: true
- /@esbuild/linux-x64@0.17.18:
- resolution: {integrity: sha512-66RmRsPlYy4jFl0vG80GcNRdirx4nVWAzJmXkevgphP1qf4dsLQCpSKGM3DUQCojwU1hnepI63gNZdrr02wHUA==}
+ /@esbuild/linux-x64@0.19.12:
+ resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==}
engines: {node: '>=12'}
cpu: [x64]
os: [linux]
@@ -623,8 +764,8 @@ packages:
dev: true
optional: true
- /@esbuild/netbsd-x64@0.17.18:
- resolution: {integrity: sha512-95IRY7mI2yrkLlTLb1gpDxdC5WLC5mZDi+kA9dmM5XAGxCME0F8i4bYH4jZreaJ6lIZ0B8hTrweqG1fUyW7jbg==}
+ /@esbuild/netbsd-x64@0.19.12:
+ resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==}
engines: {node: '>=12'}
cpu: [x64]
os: [netbsd]
@@ -632,8 +773,8 @@ packages:
dev: true
optional: true
- /@esbuild/openbsd-x64@0.17.18:
- resolution: {integrity: sha512-WevVOgcng+8hSZ4Q3BKL3n1xTv5H6Nb53cBrtzzEjDbbnOmucEVcZeGCsCOi9bAOcDYEeBZbD2SJNBxlfP3qiA==}
+ /@esbuild/openbsd-x64@0.19.12:
+ resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==}
engines: {node: '>=12'}
cpu: [x64]
os: [openbsd]
@@ -641,8 +782,8 @@ packages:
dev: true
optional: true
- /@esbuild/sunos-x64@0.17.18:
- resolution: {integrity: sha512-Rzf4QfQagnwhQXVBS3BYUlxmEbcV7MY+BH5vfDZekU5eYpcffHSyjU8T0xucKVuOcdCsMo+Ur5wmgQJH2GfNrg==}
+ /@esbuild/sunos-x64@0.19.12:
+ resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==}
engines: {node: '>=12'}
cpu: [x64]
os: [sunos]
@@ -650,8 +791,8 @@ packages:
dev: true
optional: true
- /@esbuild/win32-arm64@0.17.18:
- resolution: {integrity: sha512-Kb3Ko/KKaWhjeAm2YoT/cNZaHaD1Yk/pa3FTsmqo9uFh1D1Rfco7BBLIPdDOozrObj2sahslFuAQGvWbgWldAg==}
+ /@esbuild/win32-arm64@0.19.12:
+ resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==}
engines: {node: '>=12'}
cpu: [arm64]
os: [win32]
@@ -659,8 +800,8 @@ packages:
dev: true
optional: true
- /@esbuild/win32-ia32@0.17.18:
- resolution: {integrity: sha512-0/xUMIdkVHwkvxfbd5+lfG7mHOf2FRrxNbPiKWg9C4fFrB8H0guClmaM3BFiRUYrznVoyxTIyC/Ou2B7QQSwmw==}
+ /@esbuild/win32-ia32@0.19.12:
+ resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==}
engines: {node: '>=12'}
cpu: [ia32]
os: [win32]
@@ -668,8 +809,8 @@ packages:
dev: true
optional: true
- /@esbuild/win32-x64@0.17.18:
- resolution: {integrity: sha512-qU25Ma1I3NqTSHJUOKi9sAH1/Mzuvlke0ioMJRthLXKm7JiSKVwFghlGbDLOO2sARECGhja4xYfRAZNPAkooYg==}
+ /@esbuild/win32-x64@0.19.12:
+ resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==}
engines: {node: '>=12'}
cpu: [x64]
os: [win32]
@@ -719,10 +860,22 @@ packages:
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dev: true
- /@fastify/busboy@2.0.0:
- resolution: {integrity: sha512-JUFJad5lv7jxj926GPgymrWQxxjPYuJNiNjNMzqT+HiuP6Vl3dk5xzG+8sTX96np0ZAluvaMzPsjhHZ5rNuNQQ==}
- engines: {node: '>=14'}
- dev: true
+ /@floating-ui/core@1.5.0:
+ resolution: {integrity: sha512-kK1h4m36DQ0UHGj5Ah4db7R0rHemTqqO0QLvUqi1/mUUp3LuAWbWxdxSIf/XsnH9VS6rRVPLJCncjRzUvyCLXg==}
+ dependencies:
+ '@floating-ui/utils': 0.1.6
+ dev: false
+
+ /@floating-ui/dom@1.5.3:
+ resolution: {integrity: sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA==}
+ dependencies:
+ '@floating-ui/core': 1.5.0
+ '@floating-ui/utils': 0.1.6
+ dev: false
+
+ /@floating-ui/utils@0.1.6:
+ resolution: {integrity: sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==}
+ dev: false
/@humanwhocodes/config-array@0.11.8:
resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==}
@@ -744,6 +897,16 @@ packages:
resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==}
dev: true
+ /@iconify/types@2.0.0:
+ resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
+ dev: false
+
+ /@internationalized/date@3.5.0:
+ resolution: {integrity: sha512-nw0Q+oRkizBWMioseI8+2TeUPEyopJVz5YxoYVzR0W1v+2YytiYah7s/ot35F149q/xAg4F1gT/6eTd+tsUpFQ==}
+ dependencies:
+ '@swc/helpers': 0.5.3
+ dev: false
+
/@isaacs/cliui@8.0.2:
resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
engines: {node: '>=12'}
@@ -763,32 +926,26 @@ packages:
'@jridgewell/set-array': 1.1.2
'@jridgewell/sourcemap-codec': 1.4.15
'@jridgewell/trace-mapping': 0.3.18
- dev: true
/@jridgewell/resolve-uri@3.1.0:
resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==}
engines: {node: '>=6.0.0'}
- dev: true
/@jridgewell/set-array@1.1.2:
resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==}
engines: {node: '>=6.0.0'}
- dev: true
/@jridgewell/sourcemap-codec@1.4.14:
resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==}
- dev: true
/@jridgewell/sourcemap-codec@1.4.15:
resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
- dev: true
/@jridgewell/trace-mapping@0.3.18:
resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==}
dependencies:
'@jridgewell/resolve-uri': 3.1.0
'@jridgewell/sourcemap-codec': 1.4.14
- dev: true
/@jridgewell/trace-mapping@0.3.9:
resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
@@ -798,32 +955,46 @@ packages:
'@jridgewell/sourcemap-codec': 1.4.15
dev: true
- /@microsoft/api-extractor-model@7.26.7(@types/node@18.16.3):
- resolution: {integrity: sha512-rx3Tq632VG3ddR74kPuPbv1qmUgO2IuCvn1z16hbNWNS5RhnTQqNPWIm7NVoi6lCh2E7uxzfmdnWXIXiJhM5IQ==}
+ /@melt-ui/svelte@0.61.1(svelte@4.2.12):
+ resolution: {integrity: sha512-xG/rRK77yfzAWm0/KrB+NrJ3qzBALv7B3OoHGyLSfFXIGum+CzklxtDH8gNSuCA6ENfuPnY7pwy390+LNqvdig==}
+ peerDependencies:
+ svelte: '>=3 <5'
+ dependencies:
+ '@floating-ui/core': 1.5.0
+ '@floating-ui/dom': 1.5.3
+ '@internationalized/date': 3.5.0
+ dequal: 2.0.3
+ focus-trap: 7.5.4
+ nanoid: 4.0.2
+ svelte: 4.2.12
+ dev: false
+
+ /@microsoft/api-extractor-model@7.28.3(@types/node@18.16.3):
+ resolution: {integrity: sha512-wT/kB2oDbdZXITyDh2SQLzaWwTOFbV326fP0pUwNW00WeliARs0qjmXBWmGWardEzp2U3/axkO3Lboqun6vrig==}
dependencies:
'@microsoft/tsdoc': 0.14.2
'@microsoft/tsdoc-config': 0.16.2
- '@rushstack/node-core-library': 3.58.0(@types/node@18.16.3)
+ '@rushstack/node-core-library': 3.62.0(@types/node@18.16.3)
transitivePeerDependencies:
- '@types/node'
dev: true
- /@microsoft/api-extractor@7.34.7(@types/node@18.16.3):
- resolution: {integrity: sha512-8CrrYyOBWqc4XFviR1KSuHSlmJjlnC5CVpPkcFB8HXiLABUVaVWFTsOzJIwUU6z8mc4BZPZ8tSGAg/mwFDU31Q==}
+ /@microsoft/api-extractor@7.39.0(@types/node@18.16.3):
+ resolution: {integrity: sha512-PuXxzadgnvp+wdeZFPonssRAj/EW4Gm4s75TXzPk09h3wJ8RS3x7typf95B4vwZRrPTQBGopdUl+/vHvlPdAcg==}
hasBin: true
dependencies:
- '@microsoft/api-extractor-model': 7.26.7(@types/node@18.16.3)
+ '@microsoft/api-extractor-model': 7.28.3(@types/node@18.16.3)
'@microsoft/tsdoc': 0.14.2
'@microsoft/tsdoc-config': 0.16.2
- '@rushstack/node-core-library': 3.58.0(@types/node@18.16.3)
- '@rushstack/rig-package': 0.3.18
- '@rushstack/ts-command-line': 4.13.2
+ '@rushstack/node-core-library': 3.62.0(@types/node@18.16.3)
+ '@rushstack/rig-package': 0.5.1
+ '@rushstack/ts-command-line': 4.17.1
colors: 1.2.5
lodash: 4.17.21
resolve: 1.22.2
semver: 7.5.4
source-map: 0.6.1
- typescript: 4.8.4
+ typescript: 5.3.3
transitivePeerDependencies:
- '@types/node'
dev: true
@@ -1000,26 +1171,130 @@ packages:
config-chain: 1.1.13
dev: true
- /@polka/url@1.0.0-next.21:
- resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==}
+ /@polka/url@1.0.0-next.25:
+ resolution: {integrity: sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==}
dev: true
- /@rollup/pluginutils@5.0.2:
- resolution: {integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==}
+ /@rollup/pluginutils@5.1.0:
+ resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==}
engines: {node: '>=14.0.0'}
peerDependencies:
- rollup: ^1.20.0||^2.0.0||^3.0.0
+ rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
peerDependenciesMeta:
rollup:
optional: true
dependencies:
- '@types/estree': 1.0.1
+ '@types/estree': 1.0.5
estree-walker: 2.0.2
picomatch: 2.3.1
dev: true
- /@rushstack/node-core-library@3.58.0(@types/node@18.16.3):
- resolution: {integrity: sha512-DHAZ3LTOEq2/EGURznpTJDnB3SNE2CKMDXuviQ6afhru6RykE3QoqXkeyjbpLb5ib5cpIRCPE/wykNe0xmQj3w==}
+ /@rollup/rollup-android-arm-eabi@4.13.0:
+ resolution: {integrity: sha512-5ZYPOuaAqEH/W3gYsRkxQATBW3Ii1MfaT4EQstTnLKViLi2gLSQmlmtTpGucNP3sXEpOiI5tdGhjdE111ekyEg==}
+ cpu: [arm]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rollup/rollup-android-arm64@4.13.0:
+ resolution: {integrity: sha512-BSbaCmn8ZadK3UAQdlauSvtaJjhlDEjS5hEVVIN3A4bbl3X+otyf/kOJV08bYiRxfejP3DXFzO2jz3G20107+Q==}
+ cpu: [arm64]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rollup/rollup-darwin-arm64@4.13.0:
+ resolution: {integrity: sha512-Ovf2evVaP6sW5Ut0GHyUSOqA6tVKfrTHddtmxGQc1CTQa1Cw3/KMCDEEICZBbyppcwnhMwcDce9ZRxdWRpVd6g==}
+ cpu: [arm64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rollup/rollup-darwin-x64@4.13.0:
+ resolution: {integrity: sha512-U+Jcxm89UTK592vZ2J9st9ajRv/hrwHdnvyuJpa5A2ngGSVHypigidkQJP+YiGL6JODiUeMzkqQzbCG3At81Gg==}
+ cpu: [x64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rollup/rollup-linux-arm-gnueabihf@4.13.0:
+ resolution: {integrity: sha512-8wZidaUJUTIR5T4vRS22VkSMOVooG0F4N+JSwQXWSRiC6yfEsFMLTYRFHvby5mFFuExHa/yAp9juSphQQJAijQ==}
+ cpu: [arm]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rollup/rollup-linux-arm64-gnu@4.13.0:
+ resolution: {integrity: sha512-Iu0Kno1vrD7zHQDxOmvweqLkAzjxEVqNhUIXBsZ8hu8Oak7/5VTPrxOEZXYC1nmrBVJp0ZcL2E7lSuuOVaE3+w==}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rollup/rollup-linux-arm64-musl@4.13.0:
+ resolution: {integrity: sha512-C31QrW47llgVyrRjIwiOwsHFcaIwmkKi3PCroQY5aVq4H0A5v/vVVAtFsI1nfBngtoRpeREvZOkIhmRwUKkAdw==}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rollup/rollup-linux-riscv64-gnu@4.13.0:
+ resolution: {integrity: sha512-Oq90dtMHvthFOPMl7pt7KmxzX7E71AfyIhh+cPhLY9oko97Zf2C9tt/XJD4RgxhaGeAraAXDtqxvKE1y/j35lA==}
+ cpu: [riscv64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rollup/rollup-linux-x64-gnu@4.13.0:
+ resolution: {integrity: sha512-yUD/8wMffnTKuiIsl6xU+4IA8UNhQ/f1sAnQebmE/lyQ8abjsVyDkyRkWop0kdMhKMprpNIhPmYlCxgHrPoXoA==}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rollup/rollup-linux-x64-musl@4.13.0:
+ resolution: {integrity: sha512-9RyNqoFNdF0vu/qqX63fKotBh43fJQeYC98hCaf89DYQpv+xu0D8QFSOS0biA7cGuqJFOc1bJ+m2rhhsKcw1hw==}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rollup/rollup-win32-arm64-msvc@4.13.0:
+ resolution: {integrity: sha512-46ue8ymtm/5PUU6pCvjlic0z82qWkxv54GTJZgHrQUuZnVH+tvvSP0LsozIDsCBFO4VjJ13N68wqrKSeScUKdA==}
+ cpu: [arm64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rollup/rollup-win32-ia32-msvc@4.13.0:
+ resolution: {integrity: sha512-P5/MqLdLSlqxbeuJ3YDeX37srC8mCflSyTrUsgbU1c/U9j6l2g2GiIdYaGD9QjdMQPMSgYm7hgg0551wHyIluw==}
+ cpu: [ia32]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rollup/rollup-win32-x64-msvc@4.13.0:
+ resolution: {integrity: sha512-UKXUQNbO3DOhzLRwHSpa0HnhhCgNODvfoPWv2FCXme8N/ANFfhIPMGuOT+QuKd16+B5yxZ0HdpNlqPvTMS1qfw==}
+ cpu: [x64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rushstack/node-core-library@3.62.0(@types/node@18.16.3):
+ resolution: {integrity: sha512-88aJn2h8UpSvdwuDXBv1/v1heM6GnBf3RjEy6ZPP7UnzHNCqOHA2Ut+ScYUbXcqIdfew9JlTAe3g+cnX9xQ/Aw==}
peerDependencies:
'@types/node': '*'
peerDependenciesMeta:
@@ -1036,15 +1311,15 @@ packages:
z-schema: 5.0.5
dev: true
- /@rushstack/rig-package@0.3.18:
- resolution: {integrity: sha512-SGEwNTwNq9bI3pkdd01yCaH+gAsHqs0uxfGvtw9b0LJXH52qooWXnrFTRRLG1aL9pf+M2CARdrA9HLHJys3jiQ==}
+ /@rushstack/rig-package@0.5.1:
+ resolution: {integrity: sha512-pXRYSe29TjRw7rqxD4WS3HN/sRSbfr+tJs4a9uuaSIBAITbUggygdhuG0VrO0EO+QqH91GhYMN4S6KRtOEmGVA==}
dependencies:
resolve: 1.22.2
strip-json-comments: 3.1.1
dev: true
- /@rushstack/ts-command-line@4.13.2:
- resolution: {integrity: sha512-bCU8qoL9HyWiciltfzg7GqdfODUeda/JpI0602kbN5YH22rzTxyqYvv7aRLENCM7XCQ1VRs7nMkEqgJUOU8Sag==}
+ /@rushstack/ts-command-line@4.17.1:
+ resolution: {integrity: sha512-2jweO1O57BYP5qdBGl6apJLB+aRIn5ccIRTPDyULh0KMwVzFqWtw6IZWt1qtUoZD/pD2RNkIOosH6Cq45rIYeg==}
dependencies:
'@types/argparse': 1.0.38
argparse: 1.0.10
@@ -1147,230 +1422,226 @@ packages:
- supports-color
dev: true
- /@speed-highlight/core@1.2.2:
- resolution: {integrity: sha512-Yb3ewAUq7QwLbU+vF28dxkOmBJG5bHUVWZWQBnUt2GIhVWdiShKcE6kBMsCRXvD8AuK7gy0rR4qNckqZnCzEFw==}
+ /@shikijs/core@1.4.0:
+ resolution: {integrity: sha512-CxpKLntAi64h3j+TwWqVIQObPTED0FyXLHTTh3MKXtqiQNn2JGcMQQ362LftDbc9kYbDtrksNMNoVmVXzKFYUQ==}
dev: false
- /@sveltejs/adapter-auto@1.0.3(@sveltejs/kit@1.15.9):
- resolution: {integrity: sha512-hc7O12YQqvZ1CD4fo1gMJuPzBZvuoG5kwxb2RRoz4fVoB8B2vuPO2cY751Ln0G6T/HMrAf8kCqw6Pg+wbxcstw==}
- peerDependencies:
- '@sveltejs/kit': ^1.0.0
+ /@shikijs/rehype@1.4.0:
+ resolution: {integrity: sha512-Ba6QHYx+EIEvmqyNy/B49KAz3rXsTfAqYRY3KTZjPWonytokGOiJ1q/FV9l13D/ad6Qv+eWKhkAz6ITxx6ziFA==}
dependencies:
- '@sveltejs/kit': 1.15.9(svelte@3.55.1)(vite@4.3.9)
- import-meta-resolve: 2.2.2
+ '@shikijs/transformers': 1.4.0
+ '@types/hast': 3.0.4
+ hast-util-to-string: 3.0.0
+ shiki: 1.4.0
+ unified: 11.0.4
+ unist-util-visit: 5.0.0
+ dev: false
+
+ /@shikijs/transformers@1.4.0:
+ resolution: {integrity: sha512-kzvlWmWYYSeaLKRce/kgmFFORUtBtFahfXRKndor0b60ocYiXufBQM6d6w1PlMuUkdk55aor9xLvy9wy7hTEJg==}
+ dependencies:
+ shiki: 1.4.0
+ dev: false
+
+ /@sveltejs/adapter-auto@3.1.1(@sveltejs/kit@2.5.4):
+ resolution: {integrity: sha512-6LeZft2Fo/4HfmLBi5CucMYmgRxgcETweQl/yQoZo/895K3S9YWYN4Sfm/IhwlIpbJp3QNvhKmwCHbsqQNYQpw==}
+ peerDependencies:
+ '@sveltejs/kit': ^2.0.0
+ dependencies:
+ '@sveltejs/kit': 2.5.4(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@4.2.12)(vite@5.1.6)
+ import-meta-resolve: 4.0.0
dev: true
- /@sveltejs/adapter-auto@2.0.0(@sveltejs/kit@1.15.9):
- resolution: {integrity: sha512-b+gkHFZgD771kgV3aO4avHFd7y1zhmMYy9i6xOK7m/rwmwaRO8gnF5zBc0Rgca80B2PMU1bKNxyBTHA14OzUAQ==}
+ /@sveltejs/adapter-static@3.0.1(@sveltejs/kit@2.5.4):
+ resolution: {integrity: sha512-6lMvf7xYEJ+oGeR5L8DFJJrowkefTK6ZgA4JiMqoClMkKq0s6yvsd3FZfCFvX1fQ0tpCD7fkuRVHsnUVgsHyNg==}
peerDependencies:
- '@sveltejs/kit': ^1.0.0
+ '@sveltejs/kit': ^2.0.0
dependencies:
- '@sveltejs/kit': 1.15.9(svelte@3.55.1)(vite@4.3.9)
- import-meta-resolve: 2.2.2
+ '@sveltejs/kit': 2.5.4(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@4.2.12)(vite@5.1.6)
dev: true
- /@sveltejs/adapter-auto@2.0.0(@sveltejs/kit@1.27.1):
- resolution: {integrity: sha512-b+gkHFZgD771kgV3aO4avHFd7y1zhmMYy9i6xOK7m/rwmwaRO8gnF5zBc0Rgca80B2PMU1bKNxyBTHA14OzUAQ==}
- peerDependencies:
- '@sveltejs/kit': ^1.0.0
- dependencies:
- '@sveltejs/kit': 1.27.1(svelte@4.2.2)(vite@4.3.9)
- import-meta-resolve: 2.2.2
- dev: true
-
- /@sveltejs/adapter-static@1.0.0-next.50(@sveltejs/kit@1.15.9):
- resolution: {integrity: sha512-xZKBmiwFGW8nrH8+eysUAAo9XrtApI81q0m67y1bexVw8IY7/x741b6VEklNM7BZ7js0Mi2x+yCkHpOee8UZKQ==}
- peerDependencies:
- '@sveltejs/kit': ^1.0.0-next.587
- dependencies:
- '@sveltejs/kit': 1.15.9(svelte@3.55.1)(vite@4.3.9)
- dev: true
-
- /@sveltejs/kit@1.15.9(svelte@3.55.1)(vite@4.3.9):
- resolution: {integrity: sha512-Og+4WlguPVPS0PmAHefp4KxvTVZfyDN09aORVXIdKSzqzodSJiLs7Fhi/Q0z0YjmcoNLWF24tI0a6mTusL6Yfg==}
- engines: {node: ^16.14 || >=18}
+ /@sveltejs/kit@2.5.4(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@4.2.12)(vite@5.1.6):
+ resolution: {integrity: sha512-eDxK2d4EGzk99QsZNoPXe7jlzA5EGqfcCpUwZ912bhnalsZ2ZsG5wGRthkydupVjYyqdmzEanVKFhLxU2vkPSQ==}
+ engines: {node: '>=18.13'}
hasBin: true
requiresBuild: true
peerDependencies:
- svelte: ^3.54.0
- vite: ^4.0.0
+ '@sveltejs/vite-plugin-svelte': ^3.0.0
+ svelte: ^4.0.0 || ^5.0.0-next.0
+ vite: ^5.0.3
dependencies:
- '@sveltejs/vite-plugin-svelte': 2.4.2(svelte@3.55.1)(vite@4.3.9)
- '@types/cookie': 0.5.1
- cookie: 0.5.0
- devalue: 4.3.0
- esm-env: 1.0.0
- kleur: 4.1.5
- magic-string: 0.30.0
- mime: 3.0.0
- sade: 1.8.1
- set-cookie-parser: 2.6.0
- sirv: 2.0.3
- svelte: 3.55.1
- tiny-glob: 0.2.9
- undici: 5.26.3
- vite: 4.3.9(@types/node@18.16.3)
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /@sveltejs/kit@1.27.1(svelte@4.2.2)(vite@4.3.9):
- resolution: {integrity: sha512-nYkOUJKbeI8fcwvt/cyhTdz6VG4kT6XVprNnzfIwif+IZ8RvxvJuPhPhYjz14ASIcMLpq8xC6D3X4xH3bvWi+Q==}
- engines: {node: ^16.14 || >=18}
- hasBin: true
- requiresBuild: true
- peerDependencies:
- svelte: ^3.54.0 || ^4.0.0-next.0
- vite: ^4.0.0
- dependencies:
- '@sveltejs/vite-plugin-svelte': 2.4.2(svelte@4.2.2)(vite@4.3.9)
- '@types/cookie': 0.5.1
- cookie: 0.5.0
+ '@sveltejs/vite-plugin-svelte': 3.0.2(svelte@4.2.12)(vite@5.1.6)
+ '@types/cookie': 0.6.0
+ cookie: 0.6.0
devalue: 4.3.2
esm-env: 1.0.0
+ import-meta-resolve: 4.0.0
kleur: 4.1.5
magic-string: 0.30.5
- mrmime: 1.0.1
+ mrmime: 2.0.0
sade: 1.8.1
set-cookie-parser: 2.6.0
- sirv: 2.0.3
+ sirv: 2.0.4
+ svelte: 4.2.12
+ tiny-glob: 0.2.9
+ vite: 5.1.6(@types/node@18.16.3)(sass@1.69.5)
+ dev: true
+
+ /@sveltejs/kit@2.5.4(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@4.2.2)(vite@5.1.6):
+ resolution: {integrity: sha512-eDxK2d4EGzk99QsZNoPXe7jlzA5EGqfcCpUwZ912bhnalsZ2ZsG5wGRthkydupVjYyqdmzEanVKFhLxU2vkPSQ==}
+ engines: {node: '>=18.13'}
+ hasBin: true
+ requiresBuild: true
+ peerDependencies:
+ '@sveltejs/vite-plugin-svelte': ^3.0.0
+ svelte: ^4.0.0 || ^5.0.0-next.0
+ vite: ^5.0.3
+ dependencies:
+ '@sveltejs/vite-plugin-svelte': 3.0.2(svelte@4.2.2)(vite@5.1.6)
+ '@types/cookie': 0.6.0
+ cookie: 0.6.0
+ devalue: 4.3.2
+ esm-env: 1.0.0
+ import-meta-resolve: 4.0.0
+ kleur: 4.1.5
+ magic-string: 0.30.5
+ mrmime: 2.0.0
+ sade: 1.8.1
+ set-cookie-parser: 2.6.0
+ sirv: 2.0.4
svelte: 4.2.2
tiny-glob: 0.2.9
- undici: 5.26.3
- vite: 4.3.9(@types/node@18.16.3)
- transitivePeerDependencies:
- - supports-color
+ vite: 5.1.6(@types/node@18.16.3)(sass@1.69.5)
dev: true
- /@sveltejs/package@2.0.2(svelte@3.55.1)(typescript@5.0.4):
- resolution: {integrity: sha512-cCOCcO8yMHnhHyaR51nQtvKZ3o/vSU9UYI1EXLT1j2CKNPMuH1/g6JNwKcNNrtQGwwquudc69ZeYy8D/TDNwEw==}
+ /@sveltejs/package@2.3.0(svelte@4.2.12)(typescript@5.0.4):
+ resolution: {integrity: sha512-wmtwEfi3gQnmtotAjygRHR6cmLfpblQl1dU764f3N2I5DPe34llFs44bHOYcuk91Bp2sSq6bWUmNwxGlYCchOA==}
engines: {node: ^16.14 || >=18}
hasBin: true
peerDependencies:
- svelte: ^3.44.0
+ svelte: ^3.44.0 || ^4.0.0 || ^5.0.0-next.1
dependencies:
- chokidar: 3.5.3
+ chokidar: 3.6.0
kleur: 4.1.5
sade: 1.8.1
- svelte: 3.55.1
- svelte2tsx: 0.6.11(svelte@3.55.1)(typescript@5.0.4)
+ semver: 7.5.4
+ svelte: 4.2.12
+ svelte2tsx: 0.7.4(svelte@4.2.12)(typescript@5.0.4)
transitivePeerDependencies:
- typescript
dev: true
- /@sveltejs/package@2.0.2(svelte@3.55.1)(typescript@5.1.6):
- resolution: {integrity: sha512-cCOCcO8yMHnhHyaR51nQtvKZ3o/vSU9UYI1EXLT1j2CKNPMuH1/g6JNwKcNNrtQGwwquudc69ZeYy8D/TDNwEw==}
+ /@sveltejs/package@2.3.0(svelte@4.2.12)(typescript@5.1.6):
+ resolution: {integrity: sha512-wmtwEfi3gQnmtotAjygRHR6cmLfpblQl1dU764f3N2I5DPe34llFs44bHOYcuk91Bp2sSq6bWUmNwxGlYCchOA==}
engines: {node: ^16.14 || >=18}
hasBin: true
peerDependencies:
- svelte: ^3.44.0
+ svelte: ^3.44.0 || ^4.0.0 || ^5.0.0-next.1
dependencies:
- chokidar: 3.5.3
+ chokidar: 3.6.0
kleur: 4.1.5
sade: 1.8.1
- svelte: 3.55.1
- svelte2tsx: 0.6.11(svelte@3.55.1)(typescript@5.1.6)
+ semver: 7.5.4
+ svelte: 4.2.12
+ svelte2tsx: 0.7.4(svelte@4.2.12)(typescript@5.1.6)
transitivePeerDependencies:
- typescript
dev: true
- /@sveltejs/package@2.2.2(svelte@4.2.2)(typescript@5.1.6):
- resolution: {integrity: sha512-rP3sVv6cAntcdcG4r4KspLU6nZYYUrHJBAX3Arrw0KJFdgxtlsi2iDwN0Jwr/vIkgjcU0ZPWM8kkT5kpZDlWAw==}
+ /@sveltejs/package@2.3.0(svelte@4.2.2)(typescript@5.1.6):
+ resolution: {integrity: sha512-wmtwEfi3gQnmtotAjygRHR6cmLfpblQl1dU764f3N2I5DPe34llFs44bHOYcuk91Bp2sSq6bWUmNwxGlYCchOA==}
engines: {node: ^16.14 || >=18}
hasBin: true
peerDependencies:
- svelte: ^3.44.0 || ^4.0.0
+ svelte: ^3.44.0 || ^4.0.0 || ^5.0.0-next.1
dependencies:
- chokidar: 3.5.3
+ chokidar: 3.6.0
kleur: 4.1.5
sade: 1.8.1
semver: 7.5.4
svelte: 4.2.2
- svelte2tsx: 0.6.23(svelte@4.2.2)(typescript@5.1.6)
+ svelte2tsx: 0.7.4(svelte@4.2.2)(typescript@5.1.6)
transitivePeerDependencies:
- typescript
dev: true
- /@sveltejs/vite-plugin-svelte-inspector@1.0.3(@sveltejs/vite-plugin-svelte@2.4.2)(svelte@3.55.1)(vite@4.3.9):
- resolution: {integrity: sha512-Khdl5jmmPN6SUsVuqSXatKpQTMIifoQPDanaxC84m9JxIibWvSABJyHpyys0Z+1yYrxY5TTEQm+6elh0XCMaOA==}
- engines: {node: ^14.18.0 || >= 16}
+ /@sveltejs/vite-plugin-svelte-inspector@2.0.0(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@4.2.12)(vite@5.1.6):
+ resolution: {integrity: sha512-gjr9ZFg1BSlIpfZ4PRewigrvYmHWbDrq2uvvPB1AmTWKuM+dI1JXQSUu2pIrYLb/QncyiIGkFDFKTwJ0XqQZZg==}
+ engines: {node: ^18.0.0 || >=20}
peerDependencies:
- '@sveltejs/vite-plugin-svelte': ^2.2.0
- svelte: ^3.54.0 || ^4.0.0
- vite: ^4.0.0
+ '@sveltejs/vite-plugin-svelte': ^3.0.0
+ svelte: ^4.0.0 || ^5.0.0-next.0
+ vite: ^5.0.0
dependencies:
- '@sveltejs/vite-plugin-svelte': 2.4.2(svelte@3.55.1)(vite@4.3.9)
+ '@sveltejs/vite-plugin-svelte': 3.0.2(svelte@4.2.12)(vite@5.1.6)
debug: 4.3.4
- svelte: 3.55.1
- vite: 4.3.9(@types/node@18.16.3)
+ svelte: 4.2.12
+ vite: 5.1.6(@types/node@18.16.3)(sass@1.69.5)
transitivePeerDependencies:
- supports-color
dev: true
- /@sveltejs/vite-plugin-svelte-inspector@1.0.3(@sveltejs/vite-plugin-svelte@2.4.2)(svelte@4.2.2)(vite@4.3.9):
- resolution: {integrity: sha512-Khdl5jmmPN6SUsVuqSXatKpQTMIifoQPDanaxC84m9JxIibWvSABJyHpyys0Z+1yYrxY5TTEQm+6elh0XCMaOA==}
- engines: {node: ^14.18.0 || >= 16}
+ /@sveltejs/vite-plugin-svelte-inspector@2.0.0(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@4.2.2)(vite@5.1.6):
+ resolution: {integrity: sha512-gjr9ZFg1BSlIpfZ4PRewigrvYmHWbDrq2uvvPB1AmTWKuM+dI1JXQSUu2pIrYLb/QncyiIGkFDFKTwJ0XqQZZg==}
+ engines: {node: ^18.0.0 || >=20}
peerDependencies:
- '@sveltejs/vite-plugin-svelte': ^2.2.0
- svelte: ^3.54.0 || ^4.0.0
- vite: ^4.0.0
+ '@sveltejs/vite-plugin-svelte': ^3.0.0
+ svelte: ^4.0.0 || ^5.0.0-next.0
+ vite: ^5.0.0
dependencies:
- '@sveltejs/vite-plugin-svelte': 2.4.2(svelte@4.2.2)(vite@4.3.9)
+ '@sveltejs/vite-plugin-svelte': 3.0.2(svelte@4.2.2)(vite@5.1.6)
debug: 4.3.4
svelte: 4.2.2
- vite: 4.3.9(@types/node@18.16.3)
+ vite: 5.1.6(@types/node@18.16.3)(sass@1.69.5)
transitivePeerDependencies:
- supports-color
dev: true
- /@sveltejs/vite-plugin-svelte@2.4.2(svelte@3.55.1)(vite@4.3.9):
- resolution: {integrity: sha512-ePfcC48ftMKhkT0OFGdOyycYKnnkT6i/buzey+vHRTR/JpQvuPzzhf1PtKqCDQfJRgoPSN2vscXs6gLigx/zGw==}
- engines: {node: ^14.18.0 || >= 16}
+ /@sveltejs/vite-plugin-svelte@3.0.2(svelte@4.2.12)(vite@5.1.6):
+ resolution: {integrity: sha512-MpmF/cju2HqUls50WyTHQBZUV3ovV/Uk8k66AN2gwHogNAG8wnW8xtZDhzNBsFJJuvmq1qnzA5kE7YfMJNFv2Q==}
+ engines: {node: ^18.0.0 || >=20}
peerDependencies:
- svelte: ^3.54.0 || ^4.0.0
- vite: ^4.0.0
+ svelte: ^4.0.0 || ^5.0.0-next.0
+ vite: ^5.0.0
dependencies:
- '@sveltejs/vite-plugin-svelte-inspector': 1.0.3(@sveltejs/vite-plugin-svelte@2.4.2)(svelte@3.55.1)(vite@4.3.9)
+ '@sveltejs/vite-plugin-svelte-inspector': 2.0.0(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@4.2.12)(vite@5.1.6)
debug: 4.3.4
deepmerge: 4.3.1
kleur: 4.1.5
- magic-string: 0.30.0
- svelte: 3.55.1
- svelte-hmr: 0.15.2(svelte@3.55.1)
- vite: 4.3.9(@types/node@18.16.3)
- vitefu: 0.2.4(vite@4.3.9)
+ magic-string: 0.30.5
+ svelte: 4.2.12
+ svelte-hmr: 0.15.3(svelte@4.2.12)
+ vite: 5.1.6(@types/node@18.16.3)(sass@1.69.5)
+ vitefu: 0.2.5(vite@5.1.6)
transitivePeerDependencies:
- supports-color
dev: true
- /@sveltejs/vite-plugin-svelte@2.4.2(svelte@4.2.2)(vite@4.3.9):
- resolution: {integrity: sha512-ePfcC48ftMKhkT0OFGdOyycYKnnkT6i/buzey+vHRTR/JpQvuPzzhf1PtKqCDQfJRgoPSN2vscXs6gLigx/zGw==}
- engines: {node: ^14.18.0 || >= 16}
+ /@sveltejs/vite-plugin-svelte@3.0.2(svelte@4.2.2)(vite@5.1.6):
+ resolution: {integrity: sha512-MpmF/cju2HqUls50WyTHQBZUV3ovV/Uk8k66AN2gwHogNAG8wnW8xtZDhzNBsFJJuvmq1qnzA5kE7YfMJNFv2Q==}
+ engines: {node: ^18.0.0 || >=20}
peerDependencies:
- svelte: ^3.54.0 || ^4.0.0
- vite: ^4.0.0
+ svelte: ^4.0.0 || ^5.0.0-next.0
+ vite: ^5.0.0
dependencies:
- '@sveltejs/vite-plugin-svelte-inspector': 1.0.3(@sveltejs/vite-plugin-svelte@2.4.2)(svelte@4.2.2)(vite@4.3.9)
+ '@sveltejs/vite-plugin-svelte-inspector': 2.0.0(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@4.2.2)(vite@5.1.6)
debug: 4.3.4
deepmerge: 4.3.1
kleur: 4.1.5
- magic-string: 0.30.0
+ magic-string: 0.30.5
svelte: 4.2.2
- svelte-hmr: 0.15.2(svelte@4.2.2)
- vite: 4.3.9(@types/node@18.16.3)
- vitefu: 0.2.4(vite@4.3.9)
+ svelte-hmr: 0.15.3(svelte@4.2.2)
+ vite: 5.1.6(@types/node@18.16.3)(sass@1.69.5)
+ vitefu: 0.2.5(vite@5.1.6)
transitivePeerDependencies:
- supports-color
dev: true
- /@ts-morph/common@0.19.0:
- resolution: {integrity: sha512-Unz/WHmd4pGax91rdIKWi51wnVUW11QttMEPpBiBgIewnc9UQIX7UDLxr5vRlqeByXCwhkF6VabSsI0raWcyAQ==}
+ /@swc/helpers@0.5.3:
+ resolution: {integrity: sha512-FaruWX6KdudYloq1AHD/4nU+UsMTdNE8CKyrseXWEcgjDAbvkwJg2QGPAnfIJLIWsjZOSPLOAykK6fuYp4vp4A==}
dependencies:
- fast-glob: 3.2.12
- minimatch: 7.4.6
- mkdirp: 2.1.6
- path-browserify: 1.0.1
- dev: true
+ tslib: 2.5.0
+ dev: false
/@tsconfig/node10@1.0.9:
resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==}
@@ -1396,30 +1667,56 @@ packages:
resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==}
dev: true
- /@types/cookie@0.5.1:
- resolution: {integrity: sha512-COUnqfB2+ckwXXSFInsFdOAWQzCCx+a5hq2ruyj+Vjund94RJQd4LG2u9hnvJrTgunKAaax7ancBYlDrNYxA0g==}
+ /@types/cookie@0.6.0:
+ resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==}
dev: true
+ /@types/debug@4.1.12:
+ resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==}
+ dependencies:
+ '@types/ms': 0.7.34
+ dev: false
+
/@types/estree@1.0.1:
resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==}
+
+ /@types/estree@1.0.5:
+ resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==}
+
+ /@types/flexsearch@0.7.6:
+ resolution: {integrity: sha512-H5IXcRn96/gaDmo+rDl2aJuIJsob8dgOXDqf8K0t8rWZd1AFNaaspmRsElESiU+EWE33qfbFPgI0OC/B1g9FCA==}
dev: true
+ /@types/hast@3.0.4:
+ resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==}
+ dependencies:
+ '@types/unist': 3.0.2
+
/@types/json-schema@7.0.15:
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
dev: true
/@types/katex@0.16.0:
resolution: {integrity: sha512-hz+S3nV6Mym5xPbT9fnO8dDhBFQguMYpY0Ipxv06JMi1ORgnEM4M1ymWDUhUNer3ElLmT583opRo4RzxKmh9jw==}
- dev: true
/@types/md5@2.3.2:
resolution: {integrity: sha512-v+JFDu96+UYJ3/UWzB0mEglIS//MZXgRaJ4ubUPwOM0gvLc/kcQ3TWNYwENEK7/EcXGQVrW8h/XqednSjBd/Og==}
dev: true
+ /@types/mdast@4.0.3:
+ resolution: {integrity: sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==}
+ dependencies:
+ '@types/unist': 3.0.2
+ dev: false
+
/@types/minimist@1.2.4:
resolution: {integrity: sha512-Kfe/D3hxHTusnPNRbycJE1N77WHDsdS4AjUYIzlDzhDrS47NrwuL3YW4VITxwR7KCVpzwgy4Rbj829KSSQmwXQ==}
dev: true
+ /@types/ms@0.7.34:
+ resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==}
+ dev: false
+
/@types/node-emoji@1.8.2:
resolution: {integrity: sha512-PfF1qL/9veo8BSHLV84C9ORNr3lHSlnWJ6yU8OdNufoftajeWHTLVbGHvp2B7e7DPDS9gMs6cfeSsqo5rqSitg==}
dev: true
@@ -1438,18 +1735,6 @@ packages:
resolution: {integrity: sha512-ehPtgRgaULsFG8x0NeYJvmyH1hmlfsNLujHe9dQEia/7MAJYdzMSi19JtchUHjmBA6XC/75dK55mzZH+RyieSg==}
dev: true
- /@types/postcss-modules-local-by-default@4.0.0:
- resolution: {integrity: sha512-0VLab/pcLTLcfbxi6THSIMVYcw9hEUBGvjwwaGpW77mMgRXfGF+a76t7BxTGyLh1y68tBvrffp8UWnqvm76+yg==}
- dependencies:
- postcss: 8.4.31
- dev: true
-
- /@types/postcss-modules-scope@3.0.1:
- resolution: {integrity: sha512-LNkp3c4ML9EQj2dgslp4i80Jxj72YK3HjYzrTn6ftUVylW1zaKFGqrMlNIyqBmPWmIhZ/Y5r0Y4T49Hk1IuDUg==}
- dependencies:
- postcss: 8.4.31
- dev: true
-
/@types/pug@2.0.6:
resolution: {integrity: sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==}
dev: true
@@ -1458,7 +1743,14 @@ packages:
resolution: {integrity: sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==}
dev: true
- /@typescript-eslint/eslint-plugin@6.10.0(@typescript-eslint/parser@6.10.0)(eslint@8.39.0)(typescript@5.1.6):
+ /@types/unist@2.0.10:
+ resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==}
+ dev: true
+
+ /@types/unist@3.0.2:
+ resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==}
+
+ /@typescript-eslint/eslint-plugin@6.10.0(@typescript-eslint/parser@6.10.0)(eslint@8.39.0)(typescript@5.3.3):
resolution: {integrity: sha512-uoLj4g2OTL8rfUQVx2AFO1hp/zja1wABJq77P6IclQs6I/m9GLrm7jCdgzZkvWdDCQf1uEvoa8s8CupsgWQgVg==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
@@ -1470,10 +1762,10 @@ packages:
optional: true
dependencies:
'@eslint-community/regexpp': 4.10.0
- '@typescript-eslint/parser': 6.10.0(eslint@8.39.0)(typescript@5.1.6)
+ '@typescript-eslint/parser': 6.10.0(eslint@8.39.0)(typescript@5.3.3)
'@typescript-eslint/scope-manager': 6.10.0
- '@typescript-eslint/type-utils': 6.10.0(eslint@8.39.0)(typescript@5.1.6)
- '@typescript-eslint/utils': 6.10.0(eslint@8.39.0)(typescript@5.1.6)
+ '@typescript-eslint/type-utils': 6.10.0(eslint@8.39.0)(typescript@5.3.3)
+ '@typescript-eslint/utils': 6.10.0(eslint@8.39.0)(typescript@5.3.3)
'@typescript-eslint/visitor-keys': 6.10.0
debug: 4.3.4
eslint: 8.39.0
@@ -1481,13 +1773,13 @@ packages:
ignore: 5.2.4
natural-compare: 1.4.0
semver: 7.5.4
- ts-api-utils: 1.0.3(typescript@5.1.6)
- typescript: 5.1.6
+ ts-api-utils: 1.0.3(typescript@5.3.3)
+ typescript: 5.3.3
transitivePeerDependencies:
- supports-color
dev: true
- /@typescript-eslint/parser@6.10.0(eslint@8.39.0)(typescript@5.1.6):
+ /@typescript-eslint/parser@6.10.0(eslint@8.39.0)(typescript@5.3.3):
resolution: {integrity: sha512-+sZwIj+s+io9ozSxIWbNB5873OSdfeBEH/FR0re14WLI6BaKuSOnnwCJ2foUiu8uXf4dRp1UqHP0vrZ1zXGrog==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
@@ -1499,11 +1791,11 @@ packages:
dependencies:
'@typescript-eslint/scope-manager': 6.10.0
'@typescript-eslint/types': 6.10.0
- '@typescript-eslint/typescript-estree': 6.10.0(typescript@5.1.6)
+ '@typescript-eslint/typescript-estree': 6.10.0(typescript@5.3.3)
'@typescript-eslint/visitor-keys': 6.10.0
debug: 4.3.4
eslint: 8.39.0
- typescript: 5.1.6
+ typescript: 5.3.3
transitivePeerDependencies:
- supports-color
dev: true
@@ -1516,7 +1808,7 @@ packages:
'@typescript-eslint/visitor-keys': 6.10.0
dev: true
- /@typescript-eslint/type-utils@6.10.0(eslint@8.39.0)(typescript@5.1.6):
+ /@typescript-eslint/type-utils@6.10.0(eslint@8.39.0)(typescript@5.3.3):
resolution: {integrity: sha512-wYpPs3hgTFblMYwbYWPT3eZtaDOjbLyIYuqpwuLBBqhLiuvJ+9sEp2gNRJEtR5N/c9G1uTtQQL5AhV0fEPJYcg==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
@@ -1526,12 +1818,12 @@ packages:
typescript:
optional: true
dependencies:
- '@typescript-eslint/typescript-estree': 6.10.0(typescript@5.1.6)
- '@typescript-eslint/utils': 6.10.0(eslint@8.39.0)(typescript@5.1.6)
+ '@typescript-eslint/typescript-estree': 6.10.0(typescript@5.3.3)
+ '@typescript-eslint/utils': 6.10.0(eslint@8.39.0)(typescript@5.3.3)
debug: 4.3.4
eslint: 8.39.0
- ts-api-utils: 1.0.3(typescript@5.1.6)
- typescript: 5.1.6
+ ts-api-utils: 1.0.3(typescript@5.3.3)
+ typescript: 5.3.3
transitivePeerDependencies:
- supports-color
dev: true
@@ -1541,7 +1833,7 @@ packages:
engines: {node: ^16.0.0 || >=18.0.0}
dev: true
- /@typescript-eslint/typescript-estree@6.10.0(typescript@5.1.6):
+ /@typescript-eslint/typescript-estree@6.10.0(typescript@5.3.3):
resolution: {integrity: sha512-ek0Eyuy6P15LJVeghbWhSrBCj/vJpPXXR+EpaRZqou7achUWL8IdYnMSC5WHAeTWswYQuP2hAZgij/bC9fanBg==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
@@ -1556,13 +1848,13 @@ packages:
globby: 11.1.0
is-glob: 4.0.3
semver: 7.5.4
- ts-api-utils: 1.0.3(typescript@5.1.6)
- typescript: 5.1.6
+ ts-api-utils: 1.0.3(typescript@5.3.3)
+ typescript: 5.3.3
transitivePeerDependencies:
- supports-color
dev: true
- /@typescript-eslint/utils@6.10.0(eslint@8.39.0)(typescript@5.1.6):
+ /@typescript-eslint/utils@6.10.0(eslint@8.39.0)(typescript@5.3.3):
resolution: {integrity: sha512-v+pJ1/RcVyRc0o4wAGux9x42RHmAjIGzPRo538Z8M1tVx6HOnoQBCX/NoadHQlZeC+QO2yr4nNSFWOoraZCAyg==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
@@ -1573,7 +1865,7 @@ packages:
'@types/semver': 7.5.4
'@typescript-eslint/scope-manager': 6.10.0
'@typescript-eslint/types': 6.10.0
- '@typescript-eslint/typescript-estree': 6.10.0(typescript@5.1.6)
+ '@typescript-eslint/typescript-estree': 6.10.0(typescript@5.3.3)
eslint: 8.39.0
semver: 7.5.4
transitivePeerDependencies:
@@ -1589,6 +1881,69 @@ packages:
eslint-visitor-keys: 3.4.3
dev: true
+ /@ungap/structured-clone@1.2.0:
+ resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
+
+ /@volar/language-core@1.11.1:
+ resolution: {integrity: sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw==}
+ dependencies:
+ '@volar/source-map': 1.11.1
+ dev: true
+
+ /@volar/source-map@1.11.1:
+ resolution: {integrity: sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg==}
+ dependencies:
+ muggle-string: 0.3.1
+ dev: true
+
+ /@volar/typescript@1.11.1:
+ resolution: {integrity: sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ==}
+ dependencies:
+ '@volar/language-core': 1.11.1
+ path-browserify: 1.0.1
+ dev: true
+
+ /@vue/compiler-core@3.4.21:
+ resolution: {integrity: sha512-MjXawxZf2SbZszLPYxaFCjxfibYrzr3eYbKxwpLR9EQN+oaziSu3qKVbwBERj1IFIB8OLUewxB5m/BFzi613og==}
+ dependencies:
+ '@babel/parser': 7.24.0
+ '@vue/shared': 3.4.21
+ entities: 4.5.0
+ estree-walker: 2.0.2
+ source-map-js: 1.1.0
+ dev: true
+
+ /@vue/compiler-dom@3.4.21:
+ resolution: {integrity: sha512-IZC6FKowtT1sl0CR5DpXSiEB5ayw75oT2bma1BEhV7RRR1+cfwLrxc2Z8Zq/RGFzJ8w5r9QtCOvTjQgdn0IKmA==}
+ dependencies:
+ '@vue/compiler-core': 3.4.21
+ '@vue/shared': 3.4.21
+ dev: true
+
+ /@vue/language-core@1.8.27(typescript@5.0.4):
+ resolution: {integrity: sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA==}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@volar/language-core': 1.11.1
+ '@volar/source-map': 1.11.1
+ '@vue/compiler-dom': 3.4.21
+ '@vue/shared': 3.4.21
+ computeds: 0.0.1
+ minimatch: 9.0.3
+ muggle-string: 0.3.1
+ path-browserify: 1.0.1
+ typescript: 5.0.4
+ vue-template-compiler: 2.7.16
+ dev: true
+
+ /@vue/shared@3.4.21:
+ resolution: {integrity: sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==}
+ dev: true
+
/JSONStream@1.3.5:
resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
hasBin: true
@@ -1615,7 +1970,6 @@ packages:
resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==}
engines: {node: '>=0.4.0'}
hasBin: true
- dev: true
/acorn@8.8.2:
resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==}
@@ -1715,6 +2069,10 @@ packages:
resolution: {integrity: sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==}
dev: true
+ /any-promise@1.3.0:
+ resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
+ dev: true
+
/anymatch@3.1.3:
resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
engines: {node: '>= 8'}
@@ -1728,6 +2086,10 @@ packages:
requiresBuild: true
dev: true
+ /arg@5.0.2:
+ resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
+ dev: true
+
/argparse@1.0.10:
resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
dependencies:
@@ -1746,7 +2108,6 @@ packages:
resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==}
dependencies:
dequal: 2.0.3
- dev: true
/array-ify@1.0.0:
resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==}
@@ -1772,11 +2133,34 @@ packages:
engines: {node: '>= 4.0.0'}
dev: true
+ /autoprefixer@10.4.16(postcss@8.4.36):
+ resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==}
+ engines: {node: ^10 || ^12 || >=14}
+ hasBin: true
+ peerDependencies:
+ postcss: ^8.1.0
+ dependencies:
+ browserslist: 4.22.1
+ caniuse-lite: 1.0.30001561
+ fraction.js: 4.3.7
+ normalize-range: 0.1.2
+ picocolors: 1.0.0
+ postcss: 8.4.36
+ postcss-value-parser: 4.2.0
+ dev: true
+
/axobject-query@3.2.1:
resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==}
dependencies:
dequal: 2.0.3
- dev: true
+
+ /axobject-query@4.0.0:
+ resolution: {integrity: sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==}
+ dependencies:
+ dequal: 2.0.3
+
+ /bail@2.0.2:
+ resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==}
/balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
@@ -1799,6 +2183,16 @@ packages:
engines: {node: '>=8'}
dev: true
+ /bits-ui@0.9.4(svelte@4.2.12):
+ resolution: {integrity: sha512-hqlnJp5MyKfrNAiRzzXpdkFLqW+IqaB0yzZuQDqqKf3IosKe9W2nwqY7Wxz2t8BT5fB7z68JqM16z7l89S3mmA==}
+ peerDependencies:
+ svelte: ^4.0.0
+ dependencies:
+ '@melt-ui/svelte': 0.61.1(svelte@4.2.12)
+ nanoid: 5.0.3
+ svelte: 4.2.12
+ dev: false
+
/bl@4.1.0:
resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
dependencies:
@@ -1839,6 +2233,17 @@ packages:
fill-range: 7.0.1
dev: true
+ /browserslist@4.22.1:
+ resolution: {integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==}
+ engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+ hasBin: true
+ dependencies:
+ caniuse-lite: 1.0.30001561
+ electron-to-chromium: 1.4.582
+ node-releases: 2.0.13
+ update-browserslist-db: 1.0.13(browserslist@4.22.1)
+ dev: true
+
/buffer-crc32@0.2.13:
resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==}
dev: true
@@ -1867,6 +2272,11 @@ packages:
engines: {node: '>=6'}
dev: true
+ /camelcase-css@2.0.1:
+ resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
+ engines: {node: '>= 6'}
+ dev: true
+
/camelcase-keys@6.2.2:
resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==}
engines: {node: '>=8'}
@@ -1881,6 +2291,10 @@ packages:
engines: {node: '>=6'}
dev: true
+ /caniuse-lite@1.0.30001561:
+ resolution: {integrity: sha512-NTt0DNoKe958Q0BE0j0c1V9jbUzhBxHIEJy7asmGrpE0yG63KTV7PLHPnK2E1O9RsQrQ081I3NLuXGS6zht3cw==}
+ dev: true
+
/cardinal@2.1.1:
resolution: {integrity: sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==}
hasBin: true
@@ -1889,6 +2303,10 @@ packages:
redeyed: 2.1.1
dev: true
+ /ccount@2.0.1:
+ resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
+ dev: false
+
/chalk@2.4.2:
resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
engines: {node: '>=4'}
@@ -1911,6 +2329,18 @@ packages:
engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
dev: true
+ /character-entities-html4@2.1.0:
+ resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==}
+ dev: false
+
+ /character-entities-legacy@3.0.0:
+ resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==}
+ dev: false
+
+ /character-entities@2.0.2:
+ resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==}
+ dev: false
+
/chardet@0.7.0:
resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
dev: true
@@ -1931,7 +2361,22 @@ packages:
normalize-path: 3.0.0
readdirp: 3.6.0
optionalDependencies:
- fsevents: 2.3.2
+ fsevents: 2.3.3
+ dev: true
+
+ /chokidar@3.6.0:
+ resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
+ engines: {node: '>= 8.10.0'}
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.2
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
dev: true
/chownr@2.0.0:
@@ -2014,19 +2459,29 @@ packages:
engines: {node: '>=0.8'}
dev: true
- /code-block-writer@12.0.0:
- resolution: {integrity: sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w==}
- dev: true
+ /clsx@2.0.0:
+ resolution: {integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==}
+ engines: {node: '>=6'}
+ dev: false
+
+ /cmdk-sv@0.0.6(svelte@4.2.12):
+ resolution: {integrity: sha512-Wfo77gJD3UMkMZog8tY/h1ITjlhKxsy8ZRLCQ2q89kqBiPeP4j7uO7J2XVB4FaakJq9J/p7afszjCzp1NnBk+Q==}
+ peerDependencies:
+ svelte: ^4.0.0
+ dependencies:
+ bits-ui: 0.9.4(svelte@4.2.12)
+ nanoid: 5.0.3
+ svelte: 4.2.12
+ dev: false
/code-red@1.0.4:
resolution: {integrity: sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==}
dependencies:
'@jridgewell/sourcemap-codec': 1.4.15
- '@types/estree': 1.0.1
+ '@types/estree': 1.0.5
acorn: 8.10.0
estree-walker: 3.0.3
periscopic: 3.1.0
- dev: true
/color-convert@1.9.3:
resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
@@ -2058,11 +2513,20 @@ packages:
engines: {node: '>=0.1.90'}
dev: true
+ /comma-separated-tokens@2.0.3:
+ resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
+ dev: false
+
/commander@10.0.1:
resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==}
engines: {node: '>=14'}
dev: true
+ /commander@4.1.1:
+ resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
+ engines: {node: '>= 6'}
+ dev: true
+
/commander@8.3.0:
resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==}
engines: {node: '>= 12'}
@@ -2106,6 +2570,10 @@ packages:
dot-prop: 5.3.0
dev: true
+ /computeds@0.0.1:
+ resolution: {integrity: sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==}
+ dev: true
+
/concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
dev: true
@@ -2166,17 +2634,11 @@ packages:
through2: 4.0.2
dev: true
- /cookie@0.5.0:
- resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==}
+ /cookie@0.6.0:
+ resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==}
engines: {node: '>= 0.6'}
dev: true
- /copy-anything@2.0.6:
- resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==}
- dependencies:
- is-what: 3.14.1
- dev: true
-
/core-util-is@1.0.3:
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
dev: true
@@ -2244,8 +2706,7 @@ packages:
engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
dependencies:
mdn-data: 2.0.30
- source-map-js: 1.0.2
- dev: true
+ source-map-js: 1.1.0
/cssesc@3.0.0:
resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
@@ -2274,6 +2735,10 @@ packages:
resolution: {integrity: sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==}
dev: true
+ /de-indent@1.0.2:
+ resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==}
+ dev: true
+
/debug@3.2.7:
resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
requiresBuild: true
@@ -2296,7 +2761,6 @@ packages:
optional: true
dependencies:
ms: 2.1.2
- dev: true
/decamelize-keys@1.1.1:
resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==}
@@ -2311,6 +2775,12 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
+ /decode-named-character-reference@1.0.2:
+ resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==}
+ dependencies:
+ character-entities: 2.0.2
+ dev: false
+
/dedent-js@1.0.1:
resolution: {integrity: sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==}
dev: true
@@ -2360,7 +2830,6 @@ packages:
/dequal@2.0.3:
resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
engines: {node: '>=6'}
- dev: true
/detect-file@1.0.0:
resolution: {integrity: sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==}
@@ -2372,14 +2841,19 @@ packages:
engines: {node: '>=8'}
dev: true
- /devalue@4.3.0:
- resolution: {integrity: sha512-n94yQo4LI3w7erwf84mhRUkUJfhLoCZiLyoOZ/QFsDbcWNZePrLwbQpvZBUG2TNxwV3VjCKPxkiiQA6pe3TrTA==}
- dev: true
-
/devalue@4.3.2:
resolution: {integrity: sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==}
dev: true
+ /devlop@1.1.0:
+ resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
+ dependencies:
+ dequal: 2.0.3
+
+ /didyoumean@1.2.2:
+ resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
+ dev: true
+
/diff@4.0.2:
resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
engines: {node: '>=0.3.1'}
@@ -2393,6 +2867,10 @@ packages:
path-type: 4.0.0
dev: true
+ /dlv@1.1.3:
+ resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
+ dev: true
+
/doctrine@3.0.0:
resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
engines: {node: '>=6.0.0'}
@@ -2407,11 +2885,6 @@ packages:
is-obj: 2.0.0
dev: true
- /dotenv@16.0.3:
- resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==}
- engines: {node: '>=12'}
- dev: true
-
/duplexer2@0.1.4:
resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==}
dependencies:
@@ -2422,6 +2895,10 @@ packages:
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
dev: true
+ /electron-to-chromium@1.4.582:
+ resolution: {integrity: sha512-89o0MGoocwYbzqUUjc+VNpeOFSOK9nIdC5wY4N+PVUarUK0MtjyTjks75AZS2bW4Kl8MdewdFsWaH0jLy+JNoA==}
+ dev: true
+
/emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
dev: true
@@ -2430,6 +2907,10 @@ packages:
resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
dev: true
+ /entities@4.5.0:
+ resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
+ engines: {node: '>=0.12'}
+
/env-ci@8.0.0:
resolution: {integrity: sha512-W+3BqGZozFua9MPeXpmTm5eYEBtGgL76jGu/pwMVp/L8PdECSCEWaIp7d4Mw7kuUrbUldK0oV0bNd6ZZjLiMiA==}
engines: {node: ^16.10 || >=18}
@@ -2438,15 +2919,6 @@ packages:
java-properties: 1.0.2
dev: true
- /errno@0.1.8:
- resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==}
- hasBin: true
- requiresBuild: true
- dependencies:
- prr: 1.0.1
- dev: true
- optional: true
-
/error-ex@1.3.2:
resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
dependencies:
@@ -2457,34 +2929,35 @@ packages:
resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==}
dev: true
- /esbuild@0.17.18:
- resolution: {integrity: sha512-z1lix43jBs6UKjcZVKOw2xx69ffE2aG0PygLL5qJ9OS/gy0Ewd1gW/PUQIOIQGXBHWNywSc0floSKoMFF8aK2w==}
+ /esbuild@0.19.12:
+ resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==}
engines: {node: '>=12'}
hasBin: true
requiresBuild: true
optionalDependencies:
- '@esbuild/android-arm': 0.17.18
- '@esbuild/android-arm64': 0.17.18
- '@esbuild/android-x64': 0.17.18
- '@esbuild/darwin-arm64': 0.17.18
- '@esbuild/darwin-x64': 0.17.18
- '@esbuild/freebsd-arm64': 0.17.18
- '@esbuild/freebsd-x64': 0.17.18
- '@esbuild/linux-arm': 0.17.18
- '@esbuild/linux-arm64': 0.17.18
- '@esbuild/linux-ia32': 0.17.18
- '@esbuild/linux-loong64': 0.17.18
- '@esbuild/linux-mips64el': 0.17.18
- '@esbuild/linux-ppc64': 0.17.18
- '@esbuild/linux-riscv64': 0.17.18
- '@esbuild/linux-s390x': 0.17.18
- '@esbuild/linux-x64': 0.17.18
- '@esbuild/netbsd-x64': 0.17.18
- '@esbuild/openbsd-x64': 0.17.18
- '@esbuild/sunos-x64': 0.17.18
- '@esbuild/win32-arm64': 0.17.18
- '@esbuild/win32-ia32': 0.17.18
- '@esbuild/win32-x64': 0.17.18
+ '@esbuild/aix-ppc64': 0.19.12
+ '@esbuild/android-arm': 0.19.12
+ '@esbuild/android-arm64': 0.19.12
+ '@esbuild/android-x64': 0.19.12
+ '@esbuild/darwin-arm64': 0.19.12
+ '@esbuild/darwin-x64': 0.19.12
+ '@esbuild/freebsd-arm64': 0.19.12
+ '@esbuild/freebsd-x64': 0.19.12
+ '@esbuild/linux-arm': 0.19.12
+ '@esbuild/linux-arm64': 0.19.12
+ '@esbuild/linux-ia32': 0.19.12
+ '@esbuild/linux-loong64': 0.19.12
+ '@esbuild/linux-mips64el': 0.19.12
+ '@esbuild/linux-ppc64': 0.19.12
+ '@esbuild/linux-riscv64': 0.19.12
+ '@esbuild/linux-s390x': 0.19.12
+ '@esbuild/linux-x64': 0.19.12
+ '@esbuild/netbsd-x64': 0.19.12
+ '@esbuild/openbsd-x64': 0.19.12
+ '@esbuild/sunos-x64': 0.19.12
+ '@esbuild/win32-arm64': 0.19.12
+ '@esbuild/win32-ia32': 0.19.12
+ '@esbuild/win32-x64': 0.19.12
dev: true
/escalade@3.1.1:
@@ -2505,7 +2978,6 @@ packages:
/escape-string-regexp@5.0.0:
resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
engines: {node: '>=12'}
- dev: true
/eslint-compat-utils@0.1.2(eslint@8.39.0):
resolution: {integrity: sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==}
@@ -2525,7 +2997,7 @@ packages:
eslint: 8.39.0
dev: true
- /eslint-plugin-svelte@2.35.0(eslint@8.39.0)(svelte@3.58.0)(ts-node@10.9.1):
+ /eslint-plugin-svelte@2.35.0(eslint@8.39.0)(svelte@4.2.12)(ts-node@10.9.1):
resolution: {integrity: sha512-3WDFxNrkXaMlpqoNo3M1ZOQuoFLMO9+bdnN6oVVXaydXC7nzCJuGy9a0zqoNDHMSRPYt0Rqo6hIdHMEaI5sQnw==}
engines: {node: ^14.17.0 || >=16.0.0}
peerDependencies:
@@ -2547,8 +3019,8 @@ packages:
postcss-safe-parser: 6.0.0(postcss@8.4.31)
postcss-selector-parser: 6.0.12
semver: 7.5.4
- svelte: 3.58.0
- svelte-eslint-parser: 0.33.1(svelte@3.58.0)
+ svelte: 4.2.12
+ svelte-eslint-parser: 0.33.1(svelte@4.2.12)
transitivePeerDependencies:
- supports-color
- ts-node
@@ -2667,7 +3139,6 @@ packages:
resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
dependencies:
'@types/estree': 1.0.1
- dev: true
/esutils@2.0.3:
resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
@@ -2739,6 +3210,9 @@ packages:
homedir-polyfill: 1.0.3
dev: true
+ /extend@3.0.2:
+ resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
+
/external-editor@3.1.0:
resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==}
engines: {node: '>=4'}
@@ -2763,6 +3237,17 @@ packages:
micromatch: 4.0.5
dev: true
+ /fast-glob@3.3.2:
+ resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
+ engines: {node: '>=8.6.0'}
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ '@nodelib/fs.walk': 1.2.8
+ glob-parent: 5.1.2
+ merge2: 1.4.1
+ micromatch: 4.0.5
+ dev: true
+
/fast-json-stable-stringify@2.1.0:
resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
dev: true
@@ -2884,6 +3369,16 @@ packages:
resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==}
dev: true
+ /flexsearch@0.7.21:
+ resolution: {integrity: sha512-W7cHV7Hrwjid6lWmy0IhsWDFQboWSng25U3VVywpHOTJnnAZNPScog67G+cVpeX9f7yDD21ih0WDrMMT+JoaYg==}
+ dev: false
+
+ /focus-trap@7.5.4:
+ resolution: {integrity: sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==}
+ dependencies:
+ tabbable: 6.2.0
+ dev: false
+
/foreground-child@3.1.1:
resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==}
engines: {node: '>=14'}
@@ -2892,6 +3387,10 @@ packages:
signal-exit: 4.0.2
dev: true
+ /fraction.js@4.3.7:
+ resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}
+ dev: true
+
/from2@2.3.0:
resolution: {integrity: sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==}
dependencies:
@@ -2899,15 +3398,6 @@ packages:
readable-stream: 2.3.8
dev: true
- /fs-extra@10.1.0:
- resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==}
- engines: {node: '>=12'}
- dependencies:
- graceful-fs: 4.2.11
- jsonfile: 6.1.0
- universalify: 2.0.0
- dev: true
-
/fs-extra@11.1.1:
resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==}
engines: {node: '>=14.14'}
@@ -2947,8 +3437,8 @@ packages:
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
dev: true
- /fsevents@2.3.2:
- resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
+ /fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
os: [darwin]
requiresBuild: true
@@ -2959,6 +3449,10 @@ packages:
resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
dev: true
+ /gemoji@8.1.0:
+ resolution: {integrity: sha512-HA4Gx59dw2+tn+UAa7XEV4ufUKI4fH1KgcbenVA9YKSj1QJTT0xh5Mwv5HMFNN3l2OtUe3ZIfuRwSyZS5pLIWw==}
+ dev: false
+
/get-caller-file@2.0.5:
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
engines: {node: 6.* || 8.* || >= 10.*}
@@ -2985,6 +3479,9 @@ packages:
traverse: 0.6.7
dev: true
+ /github-slugger@2.0.0:
+ resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==}
+
/glob-parent@5.1.2:
resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
engines: {node: '>= 6'}
@@ -3011,6 +3508,17 @@ packages:
path-scurry: 1.10.1
dev: true
+ /glob@7.1.6:
+ resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==}
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+ dev: true
+
/glob@7.2.3:
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
dependencies:
@@ -3140,6 +3648,145 @@ packages:
function-bind: 1.1.1
dev: true
+ /hast-util-from-dom@5.0.0:
+ resolution: {integrity: sha512-d6235voAp/XR3Hh5uy7aGLbM3S4KamdW0WEgOaU1YoewnuYw4HXb5eRtv9g65m/RFGEfUY1Mw4UqCc5Y8L4Stg==}
+ dependencies:
+ '@types/hast': 3.0.4
+ hastscript: 8.0.0
+ web-namespaces: 2.0.1
+ dev: false
+
+ /hast-util-from-html-isomorphic@2.0.0:
+ resolution: {integrity: sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw==}
+ dependencies:
+ '@types/hast': 3.0.4
+ hast-util-from-dom: 5.0.0
+ hast-util-from-html: 2.0.1
+ unist-util-remove-position: 5.0.0
+ dev: false
+
+ /hast-util-from-html@2.0.1:
+ resolution: {integrity: sha512-RXQBLMl9kjKVNkJTIO6bZyb2n+cUH8LFaSSzo82jiLT6Tfc+Pt7VQCS+/h3YwG4jaNE2TA2sdJisGWR+aJrp0g==}
+ dependencies:
+ '@types/hast': 3.0.4
+ devlop: 1.1.0
+ hast-util-from-parse5: 8.0.1
+ parse5: 7.1.2
+ vfile: 6.0.1
+ vfile-message: 4.0.2
+ dev: false
+
+ /hast-util-from-parse5@8.0.1:
+ resolution: {integrity: sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==}
+ dependencies:
+ '@types/hast': 3.0.4
+ '@types/unist': 3.0.2
+ devlop: 1.1.0
+ hastscript: 8.0.0
+ property-information: 6.5.0
+ vfile: 6.0.1
+ vfile-location: 5.0.2
+ web-namespaces: 2.0.1
+ dev: false
+
+ /hast-util-heading-rank@3.0.0:
+ resolution: {integrity: sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==}
+ dependencies:
+ '@types/hast': 3.0.4
+
+ /hast-util-is-element@3.0.0:
+ resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==}
+ dependencies:
+ '@types/hast': 3.0.4
+
+ /hast-util-parse-selector@4.0.0:
+ resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==}
+ dependencies:
+ '@types/hast': 3.0.4
+ dev: false
+
+ /hast-util-raw@9.0.2:
+ resolution: {integrity: sha512-PldBy71wO9Uq1kyaMch9AHIghtQvIwxBUkv823pKmkTM3oV1JxtsTNYdevMxvUHqcnOAuO65JKU2+0NOxc2ksA==}
+ dependencies:
+ '@types/hast': 3.0.4
+ '@types/unist': 3.0.2
+ '@ungap/structured-clone': 1.2.0
+ hast-util-from-parse5: 8.0.1
+ hast-util-to-parse5: 8.0.0
+ html-void-elements: 3.0.0
+ mdast-util-to-hast: 13.1.0
+ parse5: 7.1.2
+ unist-util-position: 5.0.0
+ unist-util-visit: 5.0.0
+ vfile: 6.0.1
+ web-namespaces: 2.0.1
+ zwitch: 2.0.4
+ dev: false
+
+ /hast-util-to-html@9.0.1:
+ resolution: {integrity: sha512-hZOofyZANbyWo+9RP75xIDV/gq+OUKx+T46IlwERnKmfpwp81XBFbT9mi26ws+SJchA4RVUQwIBJpqEOBhMzEQ==}
+ dependencies:
+ '@types/hast': 3.0.4
+ '@types/unist': 3.0.2
+ ccount: 2.0.1
+ comma-separated-tokens: 2.0.3
+ hast-util-raw: 9.0.2
+ hast-util-whitespace: 3.0.0
+ html-void-elements: 3.0.0
+ mdast-util-to-hast: 13.1.0
+ property-information: 6.5.0
+ space-separated-tokens: 2.0.2
+ stringify-entities: 4.0.4
+ zwitch: 2.0.4
+ dev: false
+
+ /hast-util-to-parse5@8.0.0:
+ resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==}
+ dependencies:
+ '@types/hast': 3.0.4
+ comma-separated-tokens: 2.0.3
+ devlop: 1.1.0
+ property-information: 6.5.0
+ space-separated-tokens: 2.0.2
+ web-namespaces: 2.0.1
+ zwitch: 2.0.4
+ dev: false
+
+ /hast-util-to-string@3.0.0:
+ resolution: {integrity: sha512-OGkAxX1Ua3cbcW6EJ5pT/tslVb90uViVkcJ4ZZIMW/R33DX/AkcJcRrPebPwJkHYwlDHXz4aIwvAAaAdtrACFA==}
+ dependencies:
+ '@types/hast': 3.0.4
+
+ /hast-util-to-text@4.0.1:
+ resolution: {integrity: sha512-RHL7Vo2n06ZocCFWqmbyhZ1pCYX/mSKdywt9YD5U6Hquu5syV+dImCXFKLFt02JoK5QxkQFS0PoVdFdPXuPffQ==}
+ dependencies:
+ '@types/hast': 3.0.4
+ '@types/unist': 3.0.2
+ hast-util-is-element: 3.0.0
+ unist-util-find-after: 5.0.0
+ dev: false
+
+ /hast-util-whitespace@3.0.0:
+ resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==}
+ dependencies:
+ '@types/hast': 3.0.4
+ dev: false
+
+ /hastscript@8.0.0:
+ resolution: {integrity: sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==}
+ dependencies:
+ '@types/hast': 3.0.4
+ comma-separated-tokens: 2.0.3
+ hast-util-parse-selector: 4.0.0
+ property-information: 6.5.0
+ space-separated-tokens: 2.0.2
+ dev: false
+
+ /he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+ dev: true
+
/homedir-polyfill@1.0.3:
resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==}
engines: {node: '>=0.10.0'}
@@ -3170,6 +3817,10 @@ packages:
lru-cache: 7.18.3
dev: true
+ /html-void-elements@3.0.0:
+ resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==}
+ dev: false
+
/http-proxy-agent@7.0.0:
resolution: {integrity: sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==}
engines: {node: '>= 14'}
@@ -3211,6 +3862,12 @@ packages:
hasBin: true
dev: true
+ /iconify-icon@2.0.0:
+ resolution: {integrity: sha512-38ArOkxmyD9oDbJBkxaFpE6eZ0K3F9Sk+3x4mWGfjMJaxi3EKrix9Du4iWhgBFT3imKC4FJJE34ur2Rc7Xm+Uw==}
+ dependencies:
+ '@iconify/types': 2.0.0
+ dev: false
+
/iconv-lite@0.4.24:
resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
engines: {node: '>=0.10.0'}
@@ -3218,24 +3875,6 @@ packages:
safer-buffer: 2.1.2
dev: true
- /iconv-lite@0.6.3:
- resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
- engines: {node: '>=0.10.0'}
- requiresBuild: true
- dependencies:
- safer-buffer: 2.1.2
- dev: true
- optional: true
-
- /icss-utils@5.1.0(postcss@8.4.31):
- resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==}
- engines: {node: ^10 || ^12 || >= 14}
- peerDependencies:
- postcss: '>=8.4.31'
- dependencies:
- postcss: 8.4.31
- dev: true
-
/ieee754@1.2.1:
resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
dev: true
@@ -3252,14 +3891,6 @@ packages:
engines: {node: '>= 4'}
dev: true
- /image-size@0.5.5:
- resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==}
- engines: {node: '>=0.10.0'}
- hasBin: true
- requiresBuild: true
- dev: true
- optional: true
-
/immutable@4.3.0:
resolution: {integrity: sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==}
dev: true
@@ -3282,8 +3913,8 @@ packages:
engines: {node: '>=8'}
dev: true
- /import-meta-resolve@2.2.2:
- resolution: {integrity: sha512-f8KcQ1D80V7RnqVm+/lirO9zkOxjGxhaTC1IPrBGd3MEfNgmNG67tSUO9gTi2F3Blr2Az6g1vocaxzkVnWl9MA==}
+ /import-meta-resolve@4.0.0:
+ resolution: {integrity: sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA==}
dev: true
/imurmurhash@0.1.4:
@@ -3423,6 +4054,10 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
+ /is-plain-obj@4.1.0:
+ resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
+ engines: {node: '>=12'}
+
/is-plain-object@5.0.0:
resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==}
engines: {node: '>=0.10.0'}
@@ -3432,7 +4067,6 @@ packages:
resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==}
dependencies:
'@types/estree': 1.0.1
- dev: true
/is-stream@1.1.0:
resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==}
@@ -3470,10 +4104,6 @@ packages:
resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==}
dev: true
- /is-what@3.14.1:
- resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==}
- dev: true
-
/is-windows@1.0.2:
resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==}
engines: {node: '>=0.10.0'}
@@ -3512,6 +4142,11 @@ packages:
engines: {node: '>= 0.6.0'}
dev: true
+ /jiti@1.21.0:
+ resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==}
+ hasBin: true
+ dev: true
+
/jju@1.4.0:
resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==}
dev: true
@@ -3557,12 +4192,6 @@ packages:
resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
dev: true
- /json5@2.2.3:
- resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
- engines: {node: '>=6'}
- hasBin: true
- dev: true
-
/jsonfile@4.0.0:
resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==}
optionalDependencies:
@@ -3582,8 +4211,8 @@ packages:
engines: {'0': node >= 0.2.0}
dev: true
- /katex@0.16.7:
- resolution: {integrity: sha512-Xk9C6oGKRwJTfqfIbtr0Kes9OSv6IFsuhFGc7tW4urlpMJtuh+7YhzU6YEG9n8gmWKcMAFzkp7nr+r69kV0zrA==}
+ /katex@0.16.10:
+ resolution: {integrity: sha512-ZiqaC04tp2O5utMsl2TEZTXxa6WSC4yo0fv5ML++D3QZv/vx2Mct0mTlRx3O+uUkjfuAgOkzsCmq5MiUEsDDdA==}
hasBin: true
dependencies:
commander: 8.3.0
@@ -3607,26 +4236,6 @@ packages:
resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==}
dev: true
- /less@4.1.3:
- resolution: {integrity: sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==}
- engines: {node: '>=6'}
- hasBin: true
- dependencies:
- copy-anything: 2.0.6
- parse-node-version: 1.0.1
- tslib: 2.5.0
- optionalDependencies:
- errno: 0.1.8
- graceful-fs: 4.2.11
- image-size: 0.5.5
- make-dir: 2.1.0
- mime: 1.6.0
- needle: 3.2.0
- source-map: 0.6.1
- transitivePeerDependencies:
- - supports-color
- dev: true
-
/levn@0.4.1:
resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
engines: {node: '>= 0.8.0'}
@@ -3698,7 +4307,6 @@ packages:
/locate-character@3.0.0:
resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==}
- dev: true
/locate-path@2.0.0:
resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==}
@@ -3733,10 +4341,6 @@ packages:
resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
dev: true
- /lodash.camelcase@4.3.0:
- resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==}
- dev: true
-
/lodash.capitalize@4.2.1:
resolution: {integrity: sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==}
dev: true
@@ -3819,6 +4423,10 @@ packages:
wrap-ansi: 6.2.0
dev: true
+ /longest-streak@3.1.0:
+ resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==}
+ dev: false
+
/longest@2.0.1:
resolution: {integrity: sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q==}
engines: {node: '>=0.10.0'}
@@ -3854,43 +4462,11 @@ packages:
engines: {node: '>=12'}
dev: true
- /magic-string@0.27.0:
- resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==}
- engines: {node: '>=12'}
- dependencies:
- '@jridgewell/sourcemap-codec': 1.4.15
- dev: true
-
- /magic-string@0.29.0:
- resolution: {integrity: sha512-WcfidHrDjMY+eLjlU+8OvwREqHwpgCeKVBUpQ3OhYYuvfaYCUgcbuBzappNzZvg/v8onU3oQj+BYpkOJe9Iw4Q==}
- engines: {node: '>=12'}
- dependencies:
- '@jridgewell/sourcemap-codec': 1.4.15
- dev: true
-
- /magic-string@0.30.0:
- resolution: {integrity: sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==}
- engines: {node: '>=12'}
- dependencies:
- '@jridgewell/sourcemap-codec': 1.4.15
- dev: true
-
/magic-string@0.30.5:
resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==}
engines: {node: '>=12'}
dependencies:
'@jridgewell/sourcemap-codec': 1.4.15
- dev: true
-
- /make-dir@2.1.0:
- resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==}
- engines: {node: '>=6'}
- requiresBuild: true
- dependencies:
- pify: 4.0.1
- semver: 5.7.2
- dev: true
- optional: true
/make-error@1.3.6:
resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
@@ -3907,12 +4483,8 @@ packages:
engines: {node: '>=8'}
dev: true
- /marked-highlight@2.0.6(marked@9.1.5):
- resolution: {integrity: sha512-xjA/C6xgXAfkkYg+YHnxdjmgFyTDtqqu8KbZiqh+COJ7PuzR15kqa+rPrs6pf/2jExXtG1jyCFUHmv9s0Bi/dQ==}
- peerDependencies:
- marked: '>=4 <10'
- dependencies:
- marked: 9.1.5
+ /markdown-table@3.0.3:
+ resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==}
dev: false
/marked-terminal@5.2.0(marked@4.3.0):
@@ -3940,6 +4512,7 @@ packages:
resolution: {integrity: sha512-14QG3shv8Kg/xc0Yh6TNkMj90wXH9mmldi5941I2OevfJ/FQAFLEwtwU2/FfgSAOMlWHrEukWSGQf8MiVYNG2A==}
engines: {node: '>= 16'}
hasBin: true
+ dev: true
/md5@2.3.0:
resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==}
@@ -3949,8 +4522,170 @@ packages:
is-buffer: 1.1.6
dev: true
+ /mdast-util-find-and-replace@3.0.1:
+ resolution: {integrity: sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==}
+ dependencies:
+ '@types/mdast': 4.0.3
+ escape-string-regexp: 5.0.0
+ unist-util-is: 6.0.0
+ unist-util-visit-parents: 6.0.1
+ dev: false
+
+ /mdast-util-from-markdown@2.0.0:
+ resolution: {integrity: sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==}
+ dependencies:
+ '@types/mdast': 4.0.3
+ '@types/unist': 3.0.2
+ decode-named-character-reference: 1.0.2
+ devlop: 1.1.0
+ mdast-util-to-string: 4.0.0
+ micromark: 4.0.0
+ micromark-util-decode-numeric-character-reference: 2.0.1
+ micromark-util-decode-string: 2.0.0
+ micromark-util-normalize-identifier: 2.0.0
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
+ unist-util-stringify-position: 4.0.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /mdast-util-gfm-autolink-literal@2.0.0:
+ resolution: {integrity: sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg==}
+ dependencies:
+ '@types/mdast': 4.0.3
+ ccount: 2.0.1
+ devlop: 1.1.0
+ mdast-util-find-and-replace: 3.0.1
+ micromark-util-character: 2.1.0
+ dev: false
+
+ /mdast-util-gfm-footnote@2.0.0:
+ resolution: {integrity: sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==}
+ dependencies:
+ '@types/mdast': 4.0.3
+ devlop: 1.1.0
+ mdast-util-from-markdown: 2.0.0
+ mdast-util-to-markdown: 2.1.0
+ micromark-util-normalize-identifier: 2.0.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /mdast-util-gfm-strikethrough@2.0.0:
+ resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==}
+ dependencies:
+ '@types/mdast': 4.0.3
+ mdast-util-from-markdown: 2.0.0
+ mdast-util-to-markdown: 2.1.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /mdast-util-gfm-table@2.0.0:
+ resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==}
+ dependencies:
+ '@types/mdast': 4.0.3
+ devlop: 1.1.0
+ markdown-table: 3.0.3
+ mdast-util-from-markdown: 2.0.0
+ mdast-util-to-markdown: 2.1.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /mdast-util-gfm-task-list-item@2.0.0:
+ resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==}
+ dependencies:
+ '@types/mdast': 4.0.3
+ devlop: 1.1.0
+ mdast-util-from-markdown: 2.0.0
+ mdast-util-to-markdown: 2.1.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /mdast-util-gfm@3.0.0:
+ resolution: {integrity: sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==}
+ dependencies:
+ mdast-util-from-markdown: 2.0.0
+ mdast-util-gfm-autolink-literal: 2.0.0
+ mdast-util-gfm-footnote: 2.0.0
+ mdast-util-gfm-strikethrough: 2.0.0
+ mdast-util-gfm-table: 2.0.0
+ mdast-util-gfm-task-list-item: 2.0.0
+ mdast-util-to-markdown: 2.1.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /mdast-util-math@3.0.0:
+ resolution: {integrity: sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w==}
+ dependencies:
+ '@types/hast': 3.0.4
+ '@types/mdast': 4.0.3
+ devlop: 1.1.0
+ longest-streak: 3.1.0
+ mdast-util-from-markdown: 2.0.0
+ mdast-util-to-markdown: 2.1.0
+ unist-util-remove-position: 5.0.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /mdast-util-phrasing@4.1.0:
+ resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==}
+ dependencies:
+ '@types/mdast': 4.0.3
+ unist-util-is: 6.0.0
+ dev: false
+
+ /mdast-util-to-hast@13.1.0:
+ resolution: {integrity: sha512-/e2l/6+OdGp/FB+ctrJ9Avz71AN/GRH3oi/3KAx/kMnoUsD6q0woXlDT8lLEeViVKE7oZxE7RXzvO3T8kF2/sA==}
+ dependencies:
+ '@types/hast': 3.0.4
+ '@types/mdast': 4.0.3
+ '@ungap/structured-clone': 1.2.0
+ devlop: 1.1.0
+ micromark-util-sanitize-uri: 2.0.0
+ trim-lines: 3.0.1
+ unist-util-position: 5.0.0
+ unist-util-visit: 5.0.0
+ vfile: 6.0.1
+ dev: false
+
+ /mdast-util-to-markdown@2.1.0:
+ resolution: {integrity: sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==}
+ dependencies:
+ '@types/mdast': 4.0.3
+ '@types/unist': 3.0.2
+ longest-streak: 3.1.0
+ mdast-util-phrasing: 4.1.0
+ mdast-util-to-string: 4.0.0
+ micromark-util-decode-string: 2.0.0
+ unist-util-visit: 5.0.0
+ zwitch: 2.0.4
+ dev: false
+
+ /mdast-util-to-string@4.0.0:
+ resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==}
+ dependencies:
+ '@types/mdast': 4.0.3
+ dev: false
+
/mdn-data@2.0.30:
resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==}
+
+ /mdsvex@0.11.0(svelte@4.2.12):
+ resolution: {integrity: sha512-gJF1s0N2nCmdxcKn8HDn0LKrN8poStqAicp6bBcsKFd/zkUBGLP5e7vnxu+g0pjBbDFOscUyI1mtHz+YK2TCDw==}
+ peerDependencies:
+ svelte: '>=3 <5'
+ dependencies:
+ '@types/unist': 2.0.10
+ prism-svelte: 0.4.7
+ prismjs: 1.29.0
+ svelte: 4.2.12
+ vfile-message: 2.0.4
dev: true
/meow@8.1.2:
@@ -3983,6 +4718,265 @@ packages:
resolution: {integrity: sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==}
dev: true
+ /micromark-core-commonmark@2.0.0:
+ resolution: {integrity: sha512-jThOz/pVmAYUtkroV3D5c1osFXAMv9e0ypGDOIZuCeAe91/sD6BoE2Sjzt30yuXtwOYUmySOhMas/PVyh02itA==}
+ dependencies:
+ decode-named-character-reference: 1.0.2
+ devlop: 1.1.0
+ micromark-factory-destination: 2.0.0
+ micromark-factory-label: 2.0.0
+ micromark-factory-space: 2.0.0
+ micromark-factory-title: 2.0.0
+ micromark-factory-whitespace: 2.0.0
+ micromark-util-character: 2.1.0
+ micromark-util-chunked: 2.0.0
+ micromark-util-classify-character: 2.0.0
+ micromark-util-html-tag-name: 2.0.0
+ micromark-util-normalize-identifier: 2.0.0
+ micromark-util-resolve-all: 2.0.0
+ micromark-util-subtokenize: 2.0.0
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
+ dev: false
+
+ /micromark-extension-gfm-autolink-literal@2.0.0:
+ resolution: {integrity: sha512-rTHfnpt/Q7dEAK1Y5ii0W8bhfJlVJFnJMHIPisfPK3gpVNuOP0VnRl96+YJ3RYWV/P4gFeQoGKNlT3RhuvpqAg==}
+ dependencies:
+ micromark-util-character: 2.1.0
+ micromark-util-sanitize-uri: 2.0.0
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
+ dev: false
+
+ /micromark-extension-gfm-footnote@2.0.0:
+ resolution: {integrity: sha512-6Rzu0CYRKDv3BfLAUnZsSlzx3ak6HAoI85KTiijuKIz5UxZxbUI+pD6oHgw+6UtQuiRwnGRhzMmPRv4smcz0fg==}
+ dependencies:
+ devlop: 1.1.0
+ micromark-core-commonmark: 2.0.0
+ micromark-factory-space: 2.0.0
+ micromark-util-character: 2.1.0
+ micromark-util-normalize-identifier: 2.0.0
+ micromark-util-sanitize-uri: 2.0.0
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
+ dev: false
+
+ /micromark-extension-gfm-strikethrough@2.0.0:
+ resolution: {integrity: sha512-c3BR1ClMp5fxxmwP6AoOY2fXO9U8uFMKs4ADD66ahLTNcwzSCyRVU4k7LPV5Nxo/VJiR4TdzxRQY2v3qIUceCw==}
+ dependencies:
+ devlop: 1.1.0
+ micromark-util-chunked: 2.0.0
+ micromark-util-classify-character: 2.0.0
+ micromark-util-resolve-all: 2.0.0
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
+ dev: false
+
+ /micromark-extension-gfm-table@2.0.0:
+ resolution: {integrity: sha512-PoHlhypg1ItIucOaHmKE8fbin3vTLpDOUg8KAr8gRCF1MOZI9Nquq2i/44wFvviM4WuxJzc3demT8Y3dkfvYrw==}
+ dependencies:
+ devlop: 1.1.0
+ micromark-factory-space: 2.0.0
+ micromark-util-character: 2.1.0
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
+ dev: false
+
+ /micromark-extension-gfm-tagfilter@2.0.0:
+ resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==}
+ dependencies:
+ micromark-util-types: 2.0.0
+ dev: false
+
+ /micromark-extension-gfm-task-list-item@2.0.1:
+ resolution: {integrity: sha512-cY5PzGcnULaN5O7T+cOzfMoHjBW7j+T9D2sucA5d/KbsBTPcYdebm9zUd9zzdgJGCwahV+/W78Z3nbulBYVbTw==}
+ dependencies:
+ devlop: 1.1.0
+ micromark-factory-space: 2.0.0
+ micromark-util-character: 2.1.0
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
+ dev: false
+
+ /micromark-extension-gfm@3.0.0:
+ resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==}
+ dependencies:
+ micromark-extension-gfm-autolink-literal: 2.0.0
+ micromark-extension-gfm-footnote: 2.0.0
+ micromark-extension-gfm-strikethrough: 2.0.0
+ micromark-extension-gfm-table: 2.0.0
+ micromark-extension-gfm-tagfilter: 2.0.0
+ micromark-extension-gfm-task-list-item: 2.0.1
+ micromark-util-combine-extensions: 2.0.0
+ micromark-util-types: 2.0.0
+ dev: false
+
+ /micromark-extension-math@3.0.0:
+ resolution: {integrity: sha512-iJ2Q28vBoEovLN5o3GO12CpqorQRYDPT+p4zW50tGwTfJB+iv/VnB6Ini+gqa24K97DwptMBBIvVX6Bjk49oyQ==}
+ dependencies:
+ '@types/katex': 0.16.0
+ devlop: 1.1.0
+ katex: 0.16.10
+ micromark-factory-space: 2.0.0
+ micromark-util-character: 2.1.0
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
+ dev: false
+
+ /micromark-factory-destination@2.0.0:
+ resolution: {integrity: sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==}
+ dependencies:
+ micromark-util-character: 2.1.0
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
+ dev: false
+
+ /micromark-factory-label@2.0.0:
+ resolution: {integrity: sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==}
+ dependencies:
+ devlop: 1.1.0
+ micromark-util-character: 2.1.0
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
+ dev: false
+
+ /micromark-factory-space@2.0.0:
+ resolution: {integrity: sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==}
+ dependencies:
+ micromark-util-character: 2.1.0
+ micromark-util-types: 2.0.0
+ dev: false
+
+ /micromark-factory-title@2.0.0:
+ resolution: {integrity: sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==}
+ dependencies:
+ micromark-factory-space: 2.0.0
+ micromark-util-character: 2.1.0
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
+ dev: false
+
+ /micromark-factory-whitespace@2.0.0:
+ resolution: {integrity: sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==}
+ dependencies:
+ micromark-factory-space: 2.0.0
+ micromark-util-character: 2.1.0
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
+ dev: false
+
+ /micromark-util-character@2.1.0:
+ resolution: {integrity: sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==}
+ dependencies:
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
+ dev: false
+
+ /micromark-util-chunked@2.0.0:
+ resolution: {integrity: sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==}
+ dependencies:
+ micromark-util-symbol: 2.0.0
+ dev: false
+
+ /micromark-util-classify-character@2.0.0:
+ resolution: {integrity: sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==}
+ dependencies:
+ micromark-util-character: 2.1.0
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
+ dev: false
+
+ /micromark-util-combine-extensions@2.0.0:
+ resolution: {integrity: sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==}
+ dependencies:
+ micromark-util-chunked: 2.0.0
+ micromark-util-types: 2.0.0
+ dev: false
+
+ /micromark-util-decode-numeric-character-reference@2.0.1:
+ resolution: {integrity: sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==}
+ dependencies:
+ micromark-util-symbol: 2.0.0
+ dev: false
+
+ /micromark-util-decode-string@2.0.0:
+ resolution: {integrity: sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==}
+ dependencies:
+ decode-named-character-reference: 1.0.2
+ micromark-util-character: 2.1.0
+ micromark-util-decode-numeric-character-reference: 2.0.1
+ micromark-util-symbol: 2.0.0
+ dev: false
+
+ /micromark-util-encode@2.0.0:
+ resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==}
+ dev: false
+
+ /micromark-util-html-tag-name@2.0.0:
+ resolution: {integrity: sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==}
+ dev: false
+
+ /micromark-util-normalize-identifier@2.0.0:
+ resolution: {integrity: sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==}
+ dependencies:
+ micromark-util-symbol: 2.0.0
+ dev: false
+
+ /micromark-util-resolve-all@2.0.0:
+ resolution: {integrity: sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==}
+ dependencies:
+ micromark-util-types: 2.0.0
+ dev: false
+
+ /micromark-util-sanitize-uri@2.0.0:
+ resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==}
+ dependencies:
+ micromark-util-character: 2.1.0
+ micromark-util-encode: 2.0.0
+ micromark-util-symbol: 2.0.0
+ dev: false
+
+ /micromark-util-subtokenize@2.0.0:
+ resolution: {integrity: sha512-vc93L1t+gpR3p8jxeVdaYlbV2jTYteDje19rNSS/H5dlhxUYll5Fy6vJ2cDwP8RnsXi818yGty1ayP55y3W6fg==}
+ dependencies:
+ devlop: 1.1.0
+ micromark-util-chunked: 2.0.0
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
+ dev: false
+
+ /micromark-util-symbol@2.0.0:
+ resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==}
+ dev: false
+
+ /micromark-util-types@2.0.0:
+ resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==}
+ dev: false
+
+ /micromark@4.0.0:
+ resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==}
+ dependencies:
+ '@types/debug': 4.1.12
+ debug: 4.3.4
+ decode-named-character-reference: 1.0.2
+ devlop: 1.1.0
+ micromark-core-commonmark: 2.0.0
+ micromark-factory-space: 2.0.0
+ micromark-util-character: 2.1.0
+ micromark-util-chunked: 2.0.0
+ micromark-util-combine-extensions: 2.0.0
+ micromark-util-decode-numeric-character-reference: 2.0.1
+ micromark-util-encode: 2.0.0
+ micromark-util-normalize-identifier: 2.0.0
+ micromark-util-resolve-all: 2.0.0
+ micromark-util-sanitize-uri: 2.0.0
+ micromark-util-subtokenize: 2.0.0
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
/micromatch@4.0.5:
resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
engines: {node: '>=8.6'}
@@ -3991,14 +4985,6 @@ packages:
picomatch: 2.3.1
dev: true
- /mime@1.6.0:
- resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
- engines: {node: '>=4'}
- hasBin: true
- requiresBuild: true
- dev: true
- optional: true
-
/mime@3.0.0:
resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==}
engines: {node: '>=10.0.0'}
@@ -4033,13 +5019,6 @@ packages:
brace-expansion: 2.0.1
dev: true
- /minimatch@7.4.6:
- resolution: {integrity: sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==}
- engines: {node: '>=10'}
- dependencies:
- brace-expansion: 2.0.1
- dev: true
-
/minimatch@9.0.3:
resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==}
engines: {node: '>=16 || 14 >=14.17'}
@@ -4102,12 +5081,6 @@ packages:
hasBin: true
dev: true
- /mkdirp@2.1.6:
- resolution: {integrity: sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==}
- engines: {node: '>=10'}
- hasBin: true
- dev: true
-
/modify-values@1.0.1:
resolution: {integrity: sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==}
engines: {node: '>=0.10.0'}
@@ -4118,43 +5091,58 @@ packages:
engines: {node: '>=4'}
dev: true
- /mrmime@1.0.1:
- resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==}
+ /mrmime@2.0.0:
+ resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==}
engines: {node: '>=10'}
dev: true
/ms@2.1.2:
resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ /muggle-string@0.3.1:
+ resolution: {integrity: sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==}
dev: true
/mute-stream@0.0.8:
resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==}
dev: true
+ /mz@2.7.0:
+ resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
+ dependencies:
+ any-promise: 1.3.0
+ object-assign: 4.1.1
+ thenify-all: 1.6.0
+ dev: true
+
/nanoid@3.3.6:
resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
dev: true
+ /nanoid@3.3.7:
+ resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+ dev: true
+
+ /nanoid@4.0.2:
+ resolution: {integrity: sha512-7ZtY5KTCNheRGfEFxnedV5zFiORN1+Y1N6zvPTnHQd8ENUvfaDBeuJDZb2bN/oXwXxu3qkTXDzy57W5vAmDTBw==}
+ engines: {node: ^14 || ^16 || >=18}
+ hasBin: true
+ dev: false
+
+ /nanoid@5.0.3:
+ resolution: {integrity: sha512-I7X2b22cxA4LIHXPSqbBCEQSL+1wv8TuoefejsX4HFWyC6jc5JG7CEaxOltiKjc1M+YCS2YkrZZcj4+dytw9GA==}
+ engines: {node: ^18 || >=20}
+ hasBin: true
+ dev: false
+
/natural-compare@1.4.0:
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
dev: true
- /needle@3.2.0:
- resolution: {integrity: sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==}
- engines: {node: '>= 4.4.x'}
- hasBin: true
- requiresBuild: true
- dependencies:
- debug: 3.2.7
- iconv-lite: 0.6.3
- sax: 1.2.4
- transitivePeerDependencies:
- - supports-color
- dev: true
- optional: true
-
/neo-async@2.6.2:
resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
dev: true
@@ -4187,6 +5175,10 @@ packages:
whatwg-url: 5.0.0
dev: true
+ /node-releases@2.0.13:
+ resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==}
+ dev: true
+
/normalize-package-data@2.5.0:
resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==}
dependencies:
@@ -4211,6 +5203,11 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
+ /normalize-range@0.1.2:
+ resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
/normalize-url@6.1.0:
resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==}
engines: {node: '>=10'}
@@ -4340,6 +5337,16 @@ packages:
- which
- write-file-atomic
+ /object-assign@4.1.1:
+ resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /object-hash@3.0.0:
+ resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
+ engines: {node: '>= 6'}
+ dev: true
+
/object-inspect@1.12.3:
resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==}
dev: true
@@ -4541,16 +5548,17 @@ packages:
lines-and-columns: 1.2.4
dev: true
- /parse-node-version@1.0.1:
- resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==}
- engines: {node: '>= 0.10'}
- dev: true
-
/parse-passwd@1.0.0:
resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==}
engines: {node: '>=0.10.0'}
dev: true
+ /parse5@7.1.2:
+ resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==}
+ dependencies:
+ entities: 4.5.0
+ dev: false
+
/pascal-case@3.1.2:
resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==}
dependencies:
@@ -4620,7 +5628,6 @@ packages:
'@types/estree': 1.0.1
estree-walker: 3.0.3
is-reference: 3.0.2
- dev: true
/picocolors@1.0.0:
resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
@@ -4637,17 +5644,20 @@ packages:
hasBin: true
dev: true
+ /pify@2.3.0:
+ resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
/pify@3.0.0:
resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==}
engines: {node: '>=4'}
dev: true
- /pify@4.0.1:
- resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==}
- engines: {node: '>=6'}
- requiresBuild: true
+ /pirates@4.0.6:
+ resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
+ engines: {node: '>= 6'}
dev: true
- optional: true
/pkg-conf@2.1.0:
resolution: {integrity: sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==}
@@ -4664,11 +5674,33 @@ packages:
find-up: 2.1.0
dev: true
+ /postcss-import@15.1.0(postcss@8.4.31):
+ resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ postcss: ^8.0.0
+ dependencies:
+ postcss: 8.4.31
+ postcss-value-parser: 4.2.0
+ read-cache: 1.0.0
+ resolve: 1.22.2
+ dev: true
+
+ /postcss-js@4.0.1(postcss@8.4.31):
+ resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==}
+ engines: {node: ^12 || ^14 || >= 16}
+ peerDependencies:
+ postcss: ^8.4.21
+ dependencies:
+ camelcase-css: 2.0.1
+ postcss: 8.4.31
+ dev: true
+
/postcss-load-config@3.1.4(postcss@8.4.31)(ts-node@10.9.1):
resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==}
engines: {node: '>= 10'}
peerDependencies:
- postcss: '>=8.4.31'
+ postcss: '>=8.0.9'
ts-node: '>=9.0.0'
peerDependenciesMeta:
postcss:
@@ -4678,36 +5710,33 @@ packages:
dependencies:
lilconfig: 2.1.0
postcss: 8.4.31
- ts-node: 10.9.1(@types/node@18.16.3)(typescript@5.1.6)
+ ts-node: 10.9.1(@types/node@18.16.3)(typescript@5.3.3)
yaml: 1.10.2
dev: true
- /postcss-modules-extract-imports@3.0.0(postcss@8.4.31):
- resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==}
- engines: {node: ^10 || ^12 || >= 14}
+ /postcss-load-config@4.0.1(postcss@8.4.31)(ts-node@10.9.1):
+ resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==}
+ engines: {node: '>= 14'}
peerDependencies:
- postcss: '>=8.4.31'
+ postcss: '>=8.0.9'
+ ts-node: '>=9.0.0'
+ peerDependenciesMeta:
+ postcss:
+ optional: true
+ ts-node:
+ optional: true
dependencies:
+ lilconfig: 2.1.0
postcss: 8.4.31
+ ts-node: 10.9.1(@types/node@18.16.3)(typescript@5.3.3)
+ yaml: 2.2.2
dev: true
- /postcss-modules-local-by-default@4.0.0(postcss@8.4.31):
- resolution: {integrity: sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==}
- engines: {node: ^10 || ^12 || >= 14}
+ /postcss-nested@6.0.1(postcss@8.4.31):
+ resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==}
+ engines: {node: '>=12.0'}
peerDependencies:
- postcss: '>=8.4.31'
- dependencies:
- icss-utils: 5.1.0(postcss@8.4.31)
- postcss: 8.4.31
- postcss-selector-parser: 6.0.12
- postcss-value-parser: 4.2.0
- dev: true
-
- /postcss-modules-scope@3.0.0(postcss@8.4.31):
- resolution: {integrity: sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==}
- engines: {node: ^10 || ^12 || >= 14}
- peerDependencies:
- postcss: '>=8.4.31'
+ postcss: ^8.2.14
dependencies:
postcss: 8.4.31
postcss-selector-parser: 6.0.12
@@ -4717,7 +5746,7 @@ packages:
resolution: {integrity: sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==}
engines: {node: '>=12.0'}
peerDependencies:
- postcss: '>=8.4.31'
+ postcss: ^8.3.3
dependencies:
postcss: 8.4.31
dev: true
@@ -4726,7 +5755,7 @@ packages:
resolution: {integrity: sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==}
engines: {node: '>=12.0'}
peerDependencies:
- postcss: '>=8.4.31'
+ postcss: ^8.4.29
dependencies:
postcss: 8.4.31
dev: true
@@ -4752,41 +5781,113 @@ packages:
source-map-js: 1.0.2
dev: true
+ /postcss@8.4.36:
+ resolution: {integrity: sha512-/n7eumA6ZjFHAsbX30yhHup/IMkOmlmvtEi7P+6RMYf+bGJSUHc3geH4a0NSZxAz/RJfiS9tooCTs9LAVYUZKw==}
+ engines: {node: ^10 || ^12 || >=14}
+ dependencies:
+ nanoid: 3.3.7
+ picocolors: 1.0.0
+ source-map-js: 1.1.0
+ dev: true
+
/prelude-ls@1.2.1:
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
engines: {node: '>= 0.8.0'}
dev: true
- /prettier-plugin-svelte@2.10.0(prettier@2.8.8)(svelte@3.58.0):
- resolution: {integrity: sha512-GXMY6t86thctyCvQq+jqElO+MKdB09BkL3hexyGP3Oi8XLKRFaJP1ud/xlWCZ9ZIa2BxHka32zhHfcuU+XsRQg==}
+ /prettier-plugin-svelte@3.1.0(prettier@3.1.0)(svelte@4.2.12):
+ resolution: {integrity: sha512-96+AZxs2ESqIFA9j+o+DHqY+BsUglezfl553LQd6VOtTyJq5GPuBEb3ElxF2cerFzKlYKttlH/VcVmRNj5oc3A==}
peerDependencies:
- prettier: ^1.16.4 || ^2.0.0
- svelte: ^3.2.0
+ prettier: ^3.0.0
+ svelte: ^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0
dependencies:
- prettier: 2.8.8
- svelte: 3.58.0
+ prettier: 3.1.0
+ svelte: 4.2.12
dev: true
- /prettier@2.8.8:
- resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==}
- engines: {node: '>=10.13.0'}
+ /prettier-plugin-tailwindcss@0.5.7(prettier-plugin-svelte@3.1.0)(prettier@3.1.0):
+ resolution: {integrity: sha512-4v6uESAgwCni6YF6DwJlRaDjg9Z+al5zM4JfngcazMy4WEf/XkPS5TEQjbD+DZ5iNuG6RrKQLa/HuX2SYzC3kQ==}
+ engines: {node: '>=14.21.3'}
+ peerDependencies:
+ '@ianvs/prettier-plugin-sort-imports': '*'
+ '@prettier/plugin-pug': '*'
+ '@shopify/prettier-plugin-liquid': '*'
+ '@shufo/prettier-plugin-blade': '*'
+ '@trivago/prettier-plugin-sort-imports': '*'
+ prettier: ^3.0
+ prettier-plugin-astro: '*'
+ prettier-plugin-css-order: '*'
+ prettier-plugin-import-sort: '*'
+ prettier-plugin-jsdoc: '*'
+ prettier-plugin-marko: '*'
+ prettier-plugin-organize-attributes: '*'
+ prettier-plugin-organize-imports: '*'
+ prettier-plugin-style-order: '*'
+ prettier-plugin-svelte: '*'
+ prettier-plugin-twig-melody: '*'
+ peerDependenciesMeta:
+ '@ianvs/prettier-plugin-sort-imports':
+ optional: true
+ '@prettier/plugin-pug':
+ optional: true
+ '@shopify/prettier-plugin-liquid':
+ optional: true
+ '@shufo/prettier-plugin-blade':
+ optional: true
+ '@trivago/prettier-plugin-sort-imports':
+ optional: true
+ prettier-plugin-astro:
+ optional: true
+ prettier-plugin-css-order:
+ optional: true
+ prettier-plugin-import-sort:
+ optional: true
+ prettier-plugin-jsdoc:
+ optional: true
+ prettier-plugin-marko:
+ optional: true
+ prettier-plugin-organize-attributes:
+ optional: true
+ prettier-plugin-organize-imports:
+ optional: true
+ prettier-plugin-style-order:
+ optional: true
+ prettier-plugin-svelte:
+ optional: true
+ prettier-plugin-twig-melody:
+ optional: true
+ dependencies:
+ prettier: 3.1.0
+ prettier-plugin-svelte: 3.1.0(prettier@3.1.0)(svelte@4.2.12)
+ dev: true
+
+ /prettier@3.1.0:
+ resolution: {integrity: sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==}
+ engines: {node: '>=14'}
hasBin: true
dev: true
+ /prism-svelte@0.4.7:
+ resolution: {integrity: sha512-yABh19CYbM24V7aS7TuPYRNMqthxwbvx6FF/Rw920YbyBWO3tnyPIqRMgHuSVsLmuHkkBS1Akyof463FVdkeDQ==}
+ dev: true
+
+ /prismjs@1.29.0:
+ resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==}
+ engines: {node: '>=6'}
+ dev: true
+
/process-nextick-args@2.0.1:
resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
dev: true
+ /property-information@6.5.0:
+ resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==}
+ dev: false
+
/proto-list@1.2.4:
resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==}
dev: true
- /prr@1.0.1:
- resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==}
- requiresBuild: true
- dev: true
- optional: true
-
/pseudomap@1.0.2:
resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==}
dev: true
@@ -4834,6 +5935,12 @@ packages:
strip-json-comments: 2.0.1
dev: true
+ /read-cache@1.0.0:
+ resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
+ dependencies:
+ pify: 2.3.0
+ dev: true
+
/read-pkg-up@7.0.1:
resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==}
engines: {node: '>=8'}
@@ -4914,6 +6021,10 @@ packages:
esprima: 4.0.1
dev: true
+ /regenerator-runtime@0.14.0:
+ resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==}
+ dev: false
+
/registry-auth-token@5.0.2:
resolution: {integrity: sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==}
engines: {node: '>=14'}
@@ -4921,6 +6032,106 @@ packages:
'@pnpm/npm-conf': 2.2.2
dev: true
+ /rehype-autolink-headings@7.1.0:
+ resolution: {integrity: sha512-rItO/pSdvnvsP4QRB1pmPiNHUskikqtPojZKJPPPAVx9Hj8i8TwMBhofrrAYRhYOOBZH9tgmG5lPqDLuIWPWmw==}
+ dependencies:
+ '@types/hast': 3.0.4
+ '@ungap/structured-clone': 1.2.0
+ hast-util-heading-rank: 3.0.0
+ hast-util-is-element: 3.0.0
+ unified: 11.0.4
+ unist-util-visit: 5.0.0
+
+ /rehype-katex@7.0.0:
+ resolution: {integrity: sha512-h8FPkGE00r2XKU+/acgqwWUlyzve1IiOKwsEkg4pDL3k48PiE0Pt+/uLtVHDVkN1yA4iurZN6UES8ivHVEQV6Q==}
+ dependencies:
+ '@types/hast': 3.0.4
+ '@types/katex': 0.16.0
+ hast-util-from-html-isomorphic: 2.0.0
+ hast-util-to-text: 4.0.1
+ katex: 0.16.10
+ unist-util-visit-parents: 6.0.1
+ vfile: 6.0.1
+ dev: false
+
+ /rehype-slug@6.0.0:
+ resolution: {integrity: sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A==}
+ dependencies:
+ '@types/hast': 3.0.4
+ github-slugger: 2.0.0
+ hast-util-heading-rank: 3.0.0
+ hast-util-to-string: 3.0.0
+ unist-util-visit: 5.0.0
+
+ /rehype-stringify@10.0.0:
+ resolution: {integrity: sha512-1TX1i048LooI9QoecrXy7nGFFbFSufxVRAfc6Y9YMRAi56l+oB0zP51mLSV312uRuvVLPV1opSlJmslozR1XHQ==}
+ dependencies:
+ '@types/hast': 3.0.4
+ hast-util-to-html: 9.0.1
+ unified: 11.0.4
+ dev: false
+
+ /remark-gemoji@8.0.0:
+ resolution: {integrity: sha512-/fL9rc72FYwFGtOKcT+QeQdx9Q9t5v4N6KLXSDOTEgaedzK85I9judBqB2eqz+g4b0ERMejlwSOuPK+wket6aA==}
+ dependencies:
+ '@types/mdast': 4.0.3
+ gemoji: 8.1.0
+ mdast-util-find-and-replace: 3.0.1
+ dev: false
+
+ /remark-gfm@4.0.0:
+ resolution: {integrity: sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==}
+ dependencies:
+ '@types/mdast': 4.0.3
+ mdast-util-gfm: 3.0.0
+ micromark-extension-gfm: 3.0.0
+ remark-parse: 11.0.0
+ remark-stringify: 11.0.0
+ unified: 11.0.4
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /remark-math@6.0.0:
+ resolution: {integrity: sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA==}
+ dependencies:
+ '@types/mdast': 4.0.3
+ mdast-util-math: 3.0.0
+ micromark-extension-math: 3.0.0
+ unified: 11.0.4
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /remark-parse@11.0.0:
+ resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==}
+ dependencies:
+ '@types/mdast': 4.0.3
+ mdast-util-from-markdown: 2.0.0
+ micromark-util-types: 2.0.0
+ unified: 11.0.4
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /remark-rehype@11.1.0:
+ resolution: {integrity: sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==}
+ dependencies:
+ '@types/hast': 3.0.4
+ '@types/mdast': 4.0.3
+ mdast-util-to-hast: 13.1.0
+ unified: 11.0.4
+ vfile: 6.0.1
+ dev: false
+
+ /remark-stringify@11.0.0:
+ resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==}
+ dependencies:
+ '@types/mdast': 4.0.3
+ mdast-util-to-markdown: 2.1.0
+ unified: 11.0.4
+ dev: false
+
/require-directory@2.1.1:
resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
engines: {node: '>=0.10.0'}
@@ -4933,10 +6144,6 @@ packages:
dev: true
optional: true
- /reserved-words@0.1.2:
- resolution: {integrity: sha512-0S5SrIUJ9LfpbVl4Yzij6VipUdafHrOTzvmfazSw/jeZrZtQK303OPZW+obtkaw7jQlTQppy0UvZWm9872PbRw==}
- dev: true
-
/resolve-dir@1.0.1:
resolution: {integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==}
engines: {node: '>=0.10.0'}
@@ -5028,12 +6235,27 @@ packages:
glob: 10.3.3
dev: true
- /rollup@3.26.2:
- resolution: {integrity: sha512-6umBIGVz93er97pMgQO08LuH3m6PUb3jlDUUGFsNJB6VgTCUaDFpupf5JfU30529m/UKOgmiX+uY6Sx8cOYpLA==}
- engines: {node: '>=14.18.0', npm: '>=8.0.0'}
+ /rollup@4.13.0:
+ resolution: {integrity: sha512-3YegKemjoQnYKmsBlOHfMLVPPA5xLkQ8MHLLSw/fBrFaVkEayL51DilPpNNLq1exr98F2B1TzrV0FUlN3gWRPg==}
+ engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
+ dependencies:
+ '@types/estree': 1.0.5
optionalDependencies:
- fsevents: 2.3.2
+ '@rollup/rollup-android-arm-eabi': 4.13.0
+ '@rollup/rollup-android-arm64': 4.13.0
+ '@rollup/rollup-darwin-arm64': 4.13.0
+ '@rollup/rollup-darwin-x64': 4.13.0
+ '@rollup/rollup-linux-arm-gnueabihf': 4.13.0
+ '@rollup/rollup-linux-arm64-gnu': 4.13.0
+ '@rollup/rollup-linux-arm64-musl': 4.13.0
+ '@rollup/rollup-linux-riscv64-gnu': 4.13.0
+ '@rollup/rollup-linux-x64-gnu': 4.13.0
+ '@rollup/rollup-linux-x64-musl': 4.13.0
+ '@rollup/rollup-win32-arm64-msvc': 4.13.0
+ '@rollup/rollup-win32-ia32-msvc': 4.13.0
+ '@rollup/rollup-win32-x64-msvc': 4.13.0
+ fsevents: 2.3.3
dev: true
/run-async@2.4.1:
@@ -5081,8 +6303,8 @@ packages:
rimraf: 2.7.1
dev: true
- /sass@1.62.1:
- resolution: {integrity: sha512-NHpxIzN29MXvWiuswfc1W3I0N8SXBd8UR26WntmDlRYf0bSADnwnOjsyMZ3lMezSlArD33Vs3YFhp7dWvL770A==}
+ /sass@1.69.5:
+ resolution: {integrity: sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==}
engines: {node: '>=14.0.0'}
hasBin: true
dependencies:
@@ -5091,10 +6313,6 @@ packages:
source-map-js: 1.0.2
dev: true
- /sax@1.2.4:
- resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==}
- dev: true
-
/semantic-release-monorepo@7.0.5(semantic-release@20.1.3):
resolution: {integrity: sha512-riOYD8eZ5PIST7o97Ltc01l8VQW7q01NmPDRPOBycaeZczJowyKkzkBfo92kTIWDFWbdO3G8A695JrrYjoTaiw==}
peerDependencies:
@@ -5217,6 +6435,12 @@ packages:
engines: {node: '>=8'}
dev: true
+ /shiki@1.4.0:
+ resolution: {integrity: sha512-5WIn0OL8PWm7JhnTwRWXniy6eEDY234mRrERVlFa646V2ErQqwIFd2UML7e0Pq9eqSKLoMa3Ke+xbsF+DAuy+Q==}
+ dependencies:
+ '@shikijs/core': 1.4.0
+ dev: false
+
/signal-exit@3.0.7:
resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
dev: true
@@ -5235,12 +6459,12 @@ packages:
pkg-conf: 2.1.0
dev: true
- /sirv@2.0.3:
- resolution: {integrity: sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==}
+ /sirv@2.0.4:
+ resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==}
engines: {node: '>= 10'}
dependencies:
- '@polka/url': 1.0.0-next.21
- mrmime: 1.0.1
+ '@polka/url': 1.0.0-next.25
+ mrmime: 2.0.0
totalist: 3.0.1
dev: true
@@ -5290,16 +6514,19 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
+ /source-map-js@1.1.0:
+ resolution: {integrity: sha512-9vC2SfsJzlej6MAaMPLu8HiBSHGdRAJ9hVFYN1ibZoNkeanmDmLUcIrj6G9DGL7XMJ54AKg/G75akXl1/izTOw==}
+ engines: {node: '>=0.10.0'}
+
/source-map@0.6.1:
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
engines: {node: '>=0.10.0'}
requiresBuild: true
dev: true
- /source-map@0.7.4:
- resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==}
- engines: {node: '>= 8'}
- dev: true
+ /space-separated-tokens@2.0.2:
+ resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
+ dev: false
/spawn-error-forwarder@1.0.0:
resolution: {integrity: sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g==}
@@ -5398,6 +6625,13 @@ packages:
safe-buffer: 5.2.1
dev: true
+ /stringify-entities@4.0.4:
+ resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==}
+ dependencies:
+ character-entities-html4: 2.1.0
+ character-entities-legacy: 3.0.0
+ dev: false
+
/strip-ansi@6.0.1:
resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
engines: {node: '>=8'}
@@ -5454,17 +6688,18 @@ packages:
engines: {node: '>=8'}
dev: true
- /stylus@0.59.0:
- resolution: {integrity: sha512-lQ9w/XIOH5ZHVNuNbWW8D822r+/wBSO/d6XvtyHLF7LW4KaCIDeVbvn5DF8fGCJAUCwVhVi/h6J0NUcnylUEjg==}
+ /sucrase@3.34.0:
+ resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==}
+ engines: {node: '>=8'}
hasBin: true
dependencies:
- '@adobe/css-tools': 4.3.1
- debug: 4.3.4
- glob: 7.2.3
- sax: 1.2.4
- source-map: 0.7.4
- transitivePeerDependencies:
- - supports-color
+ '@jridgewell/gen-mapping': 0.3.3
+ commander: 4.1.1
+ glob: 7.1.6
+ lines-and-columns: 1.2.4
+ mz: 2.7.0
+ pirates: 4.0.6
+ ts-interface-checker: 0.1.13
dev: true
/supports-color@5.5.0:
@@ -5494,20 +6729,20 @@ packages:
engines: {node: '>= 0.4'}
dev: true
- /svelte-check@3.2.0(postcss@8.4.31)(svelte@3.55.1):
- resolution: {integrity: sha512-6ZnscN8dHEN5Eq5LgIzjj07W9nc9myyBH+diXsUAuiY/3rt0l65/LCIQYlIuoFEjp2F1NhXqZiJwV9omPj9tMw==}
+ /svelte-check@3.6.7(postcss@8.4.31)(svelte@4.2.12):
+ resolution: {integrity: sha512-tKEjemK9FYCySAseCaIt+ps5o0XRvLC7ECjyJXXtO7vOQhR9E6JavgoUbGP1PCulD2OTcB/fi9RjV3nyF1AROw==}
hasBin: true
peerDependencies:
- svelte: ^3.55.0
+ svelte: ^3.55.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0
dependencies:
'@jridgewell/trace-mapping': 0.3.18
- chokidar: 3.5.3
- fast-glob: 3.2.12
+ chokidar: 3.6.0
+ fast-glob: 3.3.2
import-fresh: 3.3.0
picocolors: 1.0.0
sade: 1.8.1
- svelte: 3.55.1
- svelte-preprocess: 5.0.3(postcss@8.4.31)(svelte@3.55.1)(typescript@5.1.6)
+ svelte: 4.2.12
+ svelte-preprocess: 5.1.3(postcss@8.4.31)(svelte@4.2.12)(typescript@5.1.6)
typescript: 5.1.6
transitivePeerDependencies:
- '@babel/core'
@@ -5521,20 +6756,20 @@ packages:
- sugarss
dev: true
- /svelte-check@3.5.2(postcss@8.4.31)(svelte@4.2.2):
- resolution: {integrity: sha512-5a/YWbiH4c+AqAUP+0VneiV5bP8YOk9JL3jwvN+k2PEPLgpu85bjQc5eE67+eIZBBwUEJzmO3I92OqKcqbp3fw==}
+ /svelte-check@3.6.7(postcss@8.4.31)(svelte@4.2.2):
+ resolution: {integrity: sha512-tKEjemK9FYCySAseCaIt+ps5o0XRvLC7ECjyJXXtO7vOQhR9E6JavgoUbGP1PCulD2OTcB/fi9RjV3nyF1AROw==}
hasBin: true
peerDependencies:
- svelte: ^3.55.0 || ^4.0.0-next.0 || ^4.0.0
+ svelte: ^3.55.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0
dependencies:
'@jridgewell/trace-mapping': 0.3.18
- chokidar: 3.5.3
- fast-glob: 3.2.12
+ chokidar: 3.6.0
+ fast-glob: 3.3.2
import-fresh: 3.3.0
picocolors: 1.0.0
sade: 1.8.1
svelte: 4.2.2
- svelte-preprocess: 5.0.4(postcss@8.4.31)(svelte@4.2.2)(typescript@5.1.6)
+ svelte-preprocess: 5.1.3(postcss@8.4.31)(svelte@4.2.2)(typescript@5.1.6)
typescript: 5.1.6
transitivePeerDependencies:
- '@babel/core'
@@ -5548,7 +6783,34 @@ packages:
- sugarss
dev: true
- /svelte-eslint-parser@0.33.1(svelte@3.58.0):
+ /svelte-check@3.6.7(postcss@8.4.36)(sass@1.69.5)(svelte@4.2.12):
+ resolution: {integrity: sha512-tKEjemK9FYCySAseCaIt+ps5o0XRvLC7ECjyJXXtO7vOQhR9E6JavgoUbGP1PCulD2OTcB/fi9RjV3nyF1AROw==}
+ hasBin: true
+ peerDependencies:
+ svelte: ^3.55.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.18
+ chokidar: 3.6.0
+ fast-glob: 3.3.2
+ import-fresh: 3.3.0
+ picocolors: 1.0.0
+ sade: 1.8.1
+ svelte: 4.2.12
+ svelte-preprocess: 5.1.3(postcss@8.4.36)(sass@1.69.5)(svelte@4.2.12)(typescript@5.1.6)
+ typescript: 5.1.6
+ transitivePeerDependencies:
+ - '@babel/core'
+ - coffeescript
+ - less
+ - postcss
+ - postcss-load-config
+ - pug
+ - sass
+ - stylus
+ - sugarss
+ dev: true
+
+ /svelte-eslint-parser@0.33.1(svelte@4.2.12):
resolution: {integrity: sha512-vo7xPGTlKBGdLH8T5L64FipvTrqv3OQRx9d2z5X05KKZDlF4rQk8KViZO4flKERY+5BiVdOh7zZ7JGJWo5P0uA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
@@ -5562,42 +6824,42 @@ packages:
espree: 9.5.1
postcss: 8.4.31
postcss-scss: 4.0.9(postcss@8.4.31)
- svelte: 3.58.0
+ svelte: 4.2.12
dev: true
- /svelte-hmr@0.15.2(svelte@3.55.1):
- resolution: {integrity: sha512-q/bAruCvFLwvNbeE1x3n37TYFb3mTBJ6TrCq6p2CoFbSTNhDE9oAtEfpy+wmc9So8AG0Tja+X0/mJzX9tSfvIg==}
+ /svelte-hmr@0.15.3(svelte@4.2.12):
+ resolution: {integrity: sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==}
engines: {node: ^12.20 || ^14.13.1 || >= 16}
peerDependencies:
- svelte: ^3.19.0 || ^4.0.0-next.0
+ svelte: ^3.19.0 || ^4.0.0
dependencies:
- svelte: 3.55.1
+ svelte: 4.2.12
dev: true
- /svelte-hmr@0.15.2(svelte@4.2.2):
- resolution: {integrity: sha512-q/bAruCvFLwvNbeE1x3n37TYFb3mTBJ6TrCq6p2CoFbSTNhDE9oAtEfpy+wmc9So8AG0Tja+X0/mJzX9tSfvIg==}
+ /svelte-hmr@0.15.3(svelte@4.2.2):
+ resolution: {integrity: sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==}
engines: {node: ^12.20 || ^14.13.1 || >= 16}
peerDependencies:
- svelte: ^3.19.0 || ^4.0.0-next.0
+ svelte: ^3.19.0 || ^4.0.0
dependencies:
svelte: 4.2.2
dev: true
- /svelte-preprocess@5.0.3(postcss@8.4.31)(svelte@3.55.1)(typescript@5.1.6):
- resolution: {integrity: sha512-GrHF1rusdJVbOZOwgPWtpqmaexkydznKzy5qIC2FabgpFyKN57bjMUUUqPRfbBXK5igiEWn1uO/DXsa2vJ5VHA==}
- engines: {node: '>= 14.10.0'}
+ /svelte-preprocess@5.1.3(postcss@8.4.31)(svelte@4.2.12)(typescript@5.1.6):
+ resolution: {integrity: sha512-xxAkmxGHT+J/GourS5mVJeOXZzne1FR5ljeOUAMXUkfEhkLEllRreXpbl3dIYJlcJRfL1LO1uIAPpBpBfiqGPw==}
+ engines: {node: '>= 16.0.0', pnpm: ^8.0.0}
requiresBuild: true
peerDependencies:
'@babel/core': ^7.10.2
coffeescript: ^2.5.1
less: ^3.11.3 || ^4.0.0
- postcss: '>=8.4.31'
- postcss-load-config: ^2.1.0 || ^3.0.0 || ^4.0.0
+ postcss: ^7 || ^8
+ postcss-load-config: ^2.1.0 || ^3.0.0 || ^4.0.0 || ^5.0.0
pug: ^3.0.0
sass: ^1.26.8
stylus: ^0.55.0
sugarss: ^2.0.0 || ^3.0.0 || ^4.0.0
- svelte: ^3.23.0
+ svelte: ^3.23.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0
typescript: '>=3.9.5 || ^4.0.0 || ^5.0.0'
peerDependenciesMeta:
'@babel/core':
@@ -5623,29 +6885,29 @@ packages:
dependencies:
'@types/pug': 2.0.6
detect-indent: 6.1.0
- magic-string: 0.27.0
+ magic-string: 0.30.5
postcss: 8.4.31
sorcery: 0.11.0
strip-indent: 3.0.0
- svelte: 3.55.1
+ svelte: 4.2.12
typescript: 5.1.6
dev: true
- /svelte-preprocess@5.0.4(postcss@8.4.31)(svelte@4.2.2)(typescript@5.1.6):
- resolution: {integrity: sha512-ABia2QegosxOGsVlsSBJvoWeXy1wUKSfF7SWJdTjLAbx/Y3SrVevvvbFNQqrSJw89+lNSsM58SipmZJ5SRi5iw==}
- engines: {node: '>= 14.10.0'}
+ /svelte-preprocess@5.1.3(postcss@8.4.31)(svelte@4.2.2)(typescript@5.1.6):
+ resolution: {integrity: sha512-xxAkmxGHT+J/GourS5mVJeOXZzne1FR5ljeOUAMXUkfEhkLEllRreXpbl3dIYJlcJRfL1LO1uIAPpBpBfiqGPw==}
+ engines: {node: '>= 16.0.0', pnpm: ^8.0.0}
requiresBuild: true
peerDependencies:
'@babel/core': ^7.10.2
coffeescript: ^2.5.1
less: ^3.11.3 || ^4.0.0
- postcss: '>=8.4.31'
- postcss-load-config: ^2.1.0 || ^3.0.0 || ^4.0.0
+ postcss: ^7 || ^8
+ postcss-load-config: ^2.1.0 || ^3.0.0 || ^4.0.0 || ^5.0.0
pug: ^3.0.0
sass: ^1.26.8
stylus: ^0.55.0
sugarss: ^2.0.0 || ^3.0.0 || ^4.0.0
- svelte: ^3.23.0 || ^4.0.0-next.0 || ^4.0.0
+ svelte: ^3.23.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0
typescript: '>=3.9.5 || ^4.0.0 || ^5.0.0'
peerDependenciesMeta:
'@babel/core':
@@ -5671,7 +6933,7 @@ packages:
dependencies:
'@types/pug': 2.0.6
detect-indent: 6.1.0
- magic-string: 0.27.0
+ magic-string: 0.30.5
postcss: 8.4.31
sorcery: 0.11.0
strip-indent: 3.0.0
@@ -5679,34 +6941,83 @@ packages:
typescript: 5.1.6
dev: true
- /svelte2tsx@0.6.11(svelte@3.55.1)(typescript@5.0.4):
- resolution: {integrity: sha512-rRW/3V/6mcejYWmSqcHpmILOSPsOhLgkbKbrTOz82s2n8TywmIsqj2jYPsiL6HeGoUM/atiTD0YKguW4b7ECog==}
+ /svelte-preprocess@5.1.3(postcss@8.4.36)(sass@1.69.5)(svelte@4.2.12)(typescript@5.1.6):
+ resolution: {integrity: sha512-xxAkmxGHT+J/GourS5mVJeOXZzne1FR5ljeOUAMXUkfEhkLEllRreXpbl3dIYJlcJRfL1LO1uIAPpBpBfiqGPw==}
+ engines: {node: '>= 16.0.0', pnpm: ^8.0.0}
+ requiresBuild: true
peerDependencies:
- svelte: ^3.55
+ '@babel/core': ^7.10.2
+ coffeescript: ^2.5.1
+ less: ^3.11.3 || ^4.0.0
+ postcss: ^7 || ^8
+ postcss-load-config: ^2.1.0 || ^3.0.0 || ^4.0.0 || ^5.0.0
+ pug: ^3.0.0
+ sass: ^1.26.8
+ stylus: ^0.55.0
+ sugarss: ^2.0.0 || ^3.0.0 || ^4.0.0
+ svelte: ^3.23.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0
+ typescript: '>=3.9.5 || ^4.0.0 || ^5.0.0'
+ peerDependenciesMeta:
+ '@babel/core':
+ optional: true
+ coffeescript:
+ optional: true
+ less:
+ optional: true
+ postcss:
+ optional: true
+ postcss-load-config:
+ optional: true
+ pug:
+ optional: true
+ sass:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ typescript:
+ optional: true
+ dependencies:
+ '@types/pug': 2.0.6
+ detect-indent: 6.1.0
+ magic-string: 0.30.5
+ postcss: 8.4.36
+ sass: 1.69.5
+ sorcery: 0.11.0
+ strip-indent: 3.0.0
+ svelte: 4.2.12
+ typescript: 5.1.6
+ dev: true
+
+ /svelte2tsx@0.7.4(svelte@4.2.12)(typescript@5.0.4):
+ resolution: {integrity: sha512-zAtbQD7JmeKe0JWdKO6l38t7P6wFP0+YTc0LLFdtzWdHEddcE+/VMvJquQI9NNsnrinUbtS9JF3kosPNeglMcQ==}
+ peerDependencies:
+ svelte: ^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0
typescript: ^4.9.4 || ^5.0.0
dependencies:
dedent-js: 1.0.1
pascal-case: 3.1.2
- svelte: 3.55.1
+ svelte: 4.2.12
typescript: 5.0.4
dev: true
- /svelte2tsx@0.6.11(svelte@3.55.1)(typescript@5.1.6):
- resolution: {integrity: sha512-rRW/3V/6mcejYWmSqcHpmILOSPsOhLgkbKbrTOz82s2n8TywmIsqj2jYPsiL6HeGoUM/atiTD0YKguW4b7ECog==}
+ /svelte2tsx@0.7.4(svelte@4.2.12)(typescript@5.1.6):
+ resolution: {integrity: sha512-zAtbQD7JmeKe0JWdKO6l38t7P6wFP0+YTc0LLFdtzWdHEddcE+/VMvJquQI9NNsnrinUbtS9JF3kosPNeglMcQ==}
peerDependencies:
- svelte: ^3.55
+ svelte: ^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0
typescript: ^4.9.4 || ^5.0.0
dependencies:
dedent-js: 1.0.1
pascal-case: 3.1.2
- svelte: 3.55.1
+ svelte: 4.2.12
typescript: 5.1.6
dev: true
- /svelte2tsx@0.6.23(svelte@4.2.2)(typescript@5.1.6):
- resolution: {integrity: sha512-3bwd1PuWUA3oEXy8+85zrLDnmJOsVpShpKVAehGWeYsz/66zMihTpRpUN97VVAKTZbO5tP4wnchHUXYs0zOwdw==}
+ /svelte2tsx@0.7.4(svelte@4.2.2)(typescript@5.1.6):
+ resolution: {integrity: sha512-zAtbQD7JmeKe0JWdKO6l38t7P6wFP0+YTc0LLFdtzWdHEddcE+/VMvJquQI9NNsnrinUbtS9JF3kosPNeglMcQ==}
peerDependencies:
- svelte: ^3.55 || ^4.0.0-next.0 || ^4.0
+ svelte: ^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0
typescript: ^4.9.4 || ^5.0.0
dependencies:
dedent-js: 1.0.1
@@ -5715,14 +7026,24 @@ packages:
typescript: 5.1.6
dev: true
- /svelte@3.55.1:
- resolution: {integrity: sha512-S+87/P0Ve67HxKkEV23iCdAh/SX1xiSfjF1HOglno/YTbSTW7RniICMCofWGdJJbdjw3S+0PfFb1JtGfTXE0oQ==}
- engines: {node: '>= 8'}
-
- /svelte@3.58.0:
- resolution: {integrity: sha512-brIBNNB76mXFmU/Kerm4wFnkskBbluBDCjx/8TcpYRb298Yh2dztS2kQ6bhtjMcvUhd5ynClfwpz5h2gnzdQ1A==}
- engines: {node: '>= 8'}
- dev: true
+ /svelte@4.2.12:
+ resolution: {integrity: sha512-d8+wsh5TfPwqVzbm4/HCXC783/KPHV60NvwitJnyTA5lWn1elhXMNWhXGCJ7PwPa8qFUnyJNIyuIRt2mT0WMug==}
+ engines: {node: '>=16'}
+ dependencies:
+ '@ampproject/remapping': 2.2.1
+ '@jridgewell/sourcemap-codec': 1.4.15
+ '@jridgewell/trace-mapping': 0.3.18
+ '@types/estree': 1.0.5
+ acorn: 8.10.0
+ aria-query: 5.3.0
+ axobject-query: 4.0.0
+ code-red: 1.0.4
+ css-tree: 2.3.1
+ estree-walker: 3.0.3
+ is-reference: 3.0.2
+ locate-character: 3.0.0
+ magic-string: 0.30.5
+ periscopic: 3.1.0
/svelte@4.2.2:
resolution: {integrity: sha512-My2tytF2e2NnHSpn2M7/3VdXT4JdTglYVUuSuK/mXL2XtulPYbeBfl8Dm1QiaKRn0zoULRnL+EtfZHHP0k4H3A==}
@@ -5741,6 +7062,46 @@ packages:
locate-character: 3.0.0
magic-string: 0.30.5
periscopic: 3.1.0
+
+ /tabbable@6.2.0:
+ resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==}
+ dev: false
+
+ /tailwind-merge@2.0.0:
+ resolution: {integrity: sha512-WO8qghn9yhsldLSg80au+3/gY9E4hFxIvQ3qOmlpXnqpDKoMruKfi/56BbbMg6fHTQJ9QD3cc79PoWqlaQE4rw==}
+ dependencies:
+ '@babel/runtime': 7.23.2
+ dev: false
+
+ /tailwindcss@3.3.5(ts-node@10.9.1):
+ resolution: {integrity: sha512-5SEZU4J7pxZgSkv7FP1zY8i2TIAOooNZ1e/OGtxIEv6GltpoiXUqWvLy89+a10qYTB1N5Ifkuw9lqQkN9sscvA==}
+ engines: {node: '>=14.0.0'}
+ hasBin: true
+ dependencies:
+ '@alloc/quick-lru': 5.2.0
+ arg: 5.0.2
+ chokidar: 3.5.3
+ didyoumean: 1.2.2
+ dlv: 1.1.3
+ fast-glob: 3.3.2
+ glob-parent: 6.0.2
+ is-glob: 4.0.3
+ jiti: 1.21.0
+ lilconfig: 2.1.0
+ micromatch: 4.0.5
+ normalize-path: 3.0.0
+ object-hash: 3.0.0
+ picocolors: 1.0.0
+ postcss: 8.4.31
+ postcss-import: 15.1.0(postcss@8.4.31)
+ postcss-js: 4.0.1(postcss@8.4.31)
+ postcss-load-config: 4.0.1(postcss@8.4.31)(ts-node@10.9.1)
+ postcss-nested: 6.0.1(postcss@8.4.31)
+ postcss-selector-parser: 6.0.12
+ resolve: 1.22.2
+ sucrase: 3.34.0
+ transitivePeerDependencies:
+ - ts-node
dev: true
/tar@6.1.15:
@@ -5780,6 +7141,19 @@ packages:
resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
dev: true
+ /thenify-all@1.6.0:
+ resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
+ engines: {node: '>=0.8'}
+ dependencies:
+ thenify: 3.3.1
+ dev: true
+
+ /thenify@3.3.1:
+ resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
+ dependencies:
+ any-promise: 1.3.0
+ dev: true
+
/through2@2.0.5:
resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==}
dependencies:
@@ -5836,28 +7210,32 @@ packages:
resolution: {integrity: sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==}
dev: true
+ /trim-lines@3.0.1:
+ resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
+ dev: false
+
/trim-newlines@3.0.1:
resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==}
engines: {node: '>=8'}
dev: true
- /ts-api-utils@1.0.3(typescript@5.1.6):
+ /trough@2.1.0:
+ resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==}
+
+ /ts-api-utils@1.0.3(typescript@5.3.3):
resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==}
engines: {node: '>=16.13.0'}
peerDependencies:
typescript: '>=4.2.0'
dependencies:
- typescript: 5.1.6
+ typescript: 5.3.3
dev: true
- /ts-morph@18.0.0:
- resolution: {integrity: sha512-Kg5u0mk19PIIe4islUI/HWRvm9bC1lHejK4S0oh1zaZ77TMZAEmQC0sHQYiu2RgCQFZKXz1fMVi/7nOOeirznA==}
- dependencies:
- '@ts-morph/common': 0.19.0
- code-block-writer: 12.0.0
+ /ts-interface-checker@0.1.13:
+ resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
dev: true
- /ts-node@10.9.1(@types/node@18.16.3)(typescript@5.1.6):
+ /ts-node@10.9.1(@types/node@18.16.3)(typescript@5.3.3):
resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==}
hasBin: true
requiresBuild: true
@@ -5878,13 +7256,13 @@ packages:
'@tsconfig/node14': 1.0.3
'@tsconfig/node16': 1.0.4
'@types/node': 18.16.3
- acorn: 8.8.2
+ acorn: 8.10.0
acorn-walk: 8.2.0
arg: 4.1.3
create-require: 1.1.1
diff: 4.0.2
make-error: 1.3.6
- typescript: 5.1.6
+ typescript: 5.3.3
v8-compile-cache-lib: 3.0.1
yn: 3.1.1
dev: true
@@ -5910,7 +7288,7 @@ packages:
'@tsconfig/node14': 1.0.3
'@tsconfig/node16': 1.0.4
'@types/node': 20.5.1
- acorn: 8.8.2
+ acorn: 8.10.0
acorn-walk: 8.2.0
arg: 4.1.3
create-require: 1.1.1
@@ -5922,18 +7300,8 @@ packages:
dev: true
optional: true
- /tsconfig-paths@4.2.0:
- resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==}
- engines: {node: '>=6'}
- dependencies:
- json5: 2.2.3
- minimist: 1.2.8
- strip-bom: 3.0.0
- dev: true
-
/tslib@2.5.0:
resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==}
- dev: true
/type-check@0.4.0:
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
@@ -5999,39 +7367,6 @@ packages:
typescript: 5.0.4
dev: true
- /typescript-plugin-css-modules@5.0.1(ts-node@10.9.1)(typescript@5.1.6):
- resolution: {integrity: sha512-hKXObfwfjx2/myRq4JeQ8D3xIWYTFqusi0hS/Aka7RFX1xQEoEkdOGDWyXNb8LmObawsUzbI30gQnZvqYXCrkA==}
- peerDependencies:
- typescript: '>=4.0.0'
- dependencies:
- '@types/postcss-modules-local-by-default': 4.0.0
- '@types/postcss-modules-scope': 3.0.1
- dotenv: 16.0.3
- icss-utils: 5.1.0(postcss@8.4.31)
- less: 4.1.3
- lodash.camelcase: 4.3.0
- postcss: 8.4.31
- postcss-load-config: 3.1.4(postcss@8.4.31)(ts-node@10.9.1)
- postcss-modules-extract-imports: 3.0.0(postcss@8.4.31)
- postcss-modules-local-by-default: 4.0.0(postcss@8.4.31)
- postcss-modules-scope: 3.0.0(postcss@8.4.31)
- reserved-words: 0.1.2
- sass: 1.62.1
- source-map-js: 1.0.2
- stylus: 0.59.0
- tsconfig-paths: 4.2.0
- typescript: 5.1.6
- transitivePeerDependencies:
- - supports-color
- - ts-node
- dev: true
-
- /typescript@4.8.4:
- resolution: {integrity: sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==}
- engines: {node: '>=4.2.0'}
- hasBin: true
- dev: true
-
/typescript@5.0.4:
resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==}
engines: {node: '>=12.20'}
@@ -6044,6 +7379,12 @@ packages:
hasBin: true
dev: true
+ /typescript@5.3.3:
+ resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+ dev: true
+
/uglify-js@3.17.4:
resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==}
engines: {node: '>=0.8.0'}
@@ -6052,12 +7393,16 @@ packages:
dev: true
optional: true
- /undici@5.26.3:
- resolution: {integrity: sha512-H7n2zmKEWgOllKkIUkLvFmsJQj062lSm3uA4EYApG8gLuiOM0/go9bIoC3HVaSnfg4xunowDE2i9p8drkXuvDw==}
- engines: {node: '>=14.0'}
+ /unified@11.0.4:
+ resolution: {integrity: sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==}
dependencies:
- '@fastify/busboy': 2.0.0
- dev: true
+ '@types/unist': 3.0.2
+ bail: 2.0.2
+ devlop: 1.1.0
+ extend: 3.0.2
+ is-plain-obj: 4.1.0
+ trough: 2.1.0
+ vfile: 6.0.1
/unique-string@2.0.0:
resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==}
@@ -6066,6 +7411,55 @@ packages:
crypto-random-string: 2.0.0
dev: true
+ /unist-util-find-after@5.0.0:
+ resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==}
+ dependencies:
+ '@types/unist': 3.0.2
+ unist-util-is: 6.0.0
+ dev: false
+
+ /unist-util-is@6.0.0:
+ resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==}
+ dependencies:
+ '@types/unist': 3.0.2
+
+ /unist-util-position@5.0.0:
+ resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==}
+ dependencies:
+ '@types/unist': 3.0.2
+ dev: false
+
+ /unist-util-remove-position@5.0.0:
+ resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==}
+ dependencies:
+ '@types/unist': 3.0.2
+ unist-util-visit: 5.0.0
+ dev: false
+
+ /unist-util-stringify-position@2.0.3:
+ resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==}
+ dependencies:
+ '@types/unist': 2.0.10
+ dev: true
+
+ /unist-util-stringify-position@4.0.0:
+ resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==}
+ dependencies:
+ '@types/unist': 3.0.2
+
+ /unist-util-visit-parents@6.0.1:
+ resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==}
+ dependencies:
+ '@types/unist': 3.0.2
+ unist-util-is: 6.0.0
+
+ /unist-util-visit@5.0.0:
+ resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==}
+ dependencies:
+ '@types/unist': 3.0.2
+ unist-util-is: 6.0.0
+ unist-util-visit-parents: 6.0.1
+
/universal-user-agent@6.0.1:
resolution: {integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==}
dev: true
@@ -6080,6 +7474,17 @@ packages:
engines: {node: '>= 10.0.0'}
dev: true
+ /update-browserslist-db@1.0.13(browserslist@4.22.1):
+ resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==}
+ hasBin: true
+ peerDependencies:
+ browserslist: '>= 4.21.0'
+ dependencies:
+ browserslist: 4.22.1
+ escalade: 3.1.1
+ picocolors: 1.0.0
+ dev: true
+
/uri-js@4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
dependencies:
@@ -6111,23 +7516,51 @@ packages:
engines: {node: '>= 0.10'}
dev: true
- /vite-plugin-dts@2.3.0(@types/node@18.16.3)(vite@4.3.9):
- resolution: {integrity: sha512-WbJgGtsStgQhdm3EosYmIdTGbag5YQpZ3HXWUAPCDyoXI5qN6EY0V7NXq0lAmnv9hVQsvh0htbYcg0Or5Db9JQ==}
+ /vfile-location@5.0.2:
+ resolution: {integrity: sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==}
+ dependencies:
+ '@types/unist': 3.0.2
+ vfile: 6.0.1
+ dev: false
+
+ /vfile-message@2.0.4:
+ resolution: {integrity: sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==}
+ dependencies:
+ '@types/unist': 2.0.10
+ unist-util-stringify-position: 2.0.3
+ dev: true
+
+ /vfile-message@4.0.2:
+ resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==}
+ dependencies:
+ '@types/unist': 3.0.2
+ unist-util-stringify-position: 4.0.0
+
+ /vfile@6.0.1:
+ resolution: {integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==}
+ dependencies:
+ '@types/unist': 3.0.2
+ unist-util-stringify-position: 4.0.0
+ vfile-message: 4.0.2
+
+ /vite-plugin-dts@3.7.3(@types/node@18.16.3)(typescript@5.0.4)(vite@5.1.6):
+ resolution: {integrity: sha512-26eTlBYdpjRLWCsTJebM8vkCieE+p9gP3raf+ecDnzzK5E3FG6VE1wcy55OkRpfWWVlVvKkYFe6uvRHYWx7Nog==}
engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies:
- vite: '>=2.9.0'
+ typescript: '*'
+ vite: '*'
+ peerDependenciesMeta:
+ vite:
+ optional: true
dependencies:
- '@babel/parser': 7.21.5
- '@microsoft/api-extractor': 7.34.7(@types/node@18.16.3)
- '@rollup/pluginutils': 5.0.2
- '@rushstack/node-core-library': 3.58.0(@types/node@18.16.3)
+ '@microsoft/api-extractor': 7.39.0(@types/node@18.16.3)
+ '@rollup/pluginutils': 5.1.0
+ '@vue/language-core': 1.8.27(typescript@5.0.4)
debug: 4.3.4
- fast-glob: 3.2.12
- fs-extra: 10.1.0
kolorist: 1.8.0
- magic-string: 0.29.0
- ts-morph: 18.0.0
- vite: 4.3.9(@types/node@18.16.3)
+ typescript: 5.0.4
+ vite: 5.1.6(@types/node@18.16.3)(sass@1.69.5)
+ vue-tsc: 1.8.27(typescript@5.0.4)
transitivePeerDependencies:
- '@types/node'
- rollup
@@ -6138,13 +7571,14 @@ packages:
resolution: {integrity: sha512-gdp/OFVXBiVq1UwPujVb7+4mmgYHTGrzslMbQvxmgzTN4/HC+3j4GNrumsIKSWfA/y3hktII7XqY38muRaGjhw==}
dev: true
- /vite@4.3.9(@types/node@18.16.3):
- resolution: {integrity: sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==}
- engines: {node: ^14.18.0 || >=16.0.0}
+ /vite@5.1.6(@types/node@18.16.3)(sass@1.69.5):
+ resolution: {integrity: sha512-yYIAZs9nVfRJ/AiOLCA91zzhjsHUgMjB+EigzFb6W2XTLO8JixBCKCjvhKZaye+NKYHCrkv3Oh50dH9EdLU2RA==}
+ engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
peerDependencies:
- '@types/node': '>= 14'
+ '@types/node': ^18.0.0 || >=20.0.0
less: '*'
+ lightningcss: ^1.21.0
sass: '*'
stylus: '*'
sugarss: '*'
@@ -6154,6 +7588,8 @@ packages:
optional: true
less:
optional: true
+ lightningcss:
+ optional: true
sass:
optional: true
stylus:
@@ -6164,22 +7600,42 @@ packages:
optional: true
dependencies:
'@types/node': 18.16.3
- esbuild: 0.17.18
- postcss: 8.4.31
- rollup: 3.26.2
+ esbuild: 0.19.12
+ postcss: 8.4.36
+ rollup: 4.13.0
+ sass: 1.69.5
optionalDependencies:
- fsevents: 2.3.2
+ fsevents: 2.3.3
dev: true
- /vitefu@0.2.4(vite@4.3.9):
- resolution: {integrity: sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==}
+ /vitefu@0.2.5(vite@5.1.6):
+ resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==}
peerDependencies:
- vite: ^3.0.0 || ^4.0.0
+ vite: ^3.0.0 || ^4.0.0 || ^5.0.0
peerDependenciesMeta:
vite:
optional: true
dependencies:
- vite: 4.3.9(@types/node@18.16.3)
+ vite: 5.1.6(@types/node@18.16.3)(sass@1.69.5)
+ dev: true
+
+ /vue-template-compiler@2.7.16:
+ resolution: {integrity: sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==}
+ dependencies:
+ de-indent: 1.0.2
+ he: 1.2.0
+ dev: true
+
+ /vue-tsc@1.8.27(typescript@5.0.4):
+ resolution: {integrity: sha512-WesKCAZCRAbmmhuGl3+VrdWItEvfoFIPXOvUJkjULi+x+6G/Dy69yO3TBRJDr9eUlmsNAwVmxsNZxvHKzbkKdg==}
+ hasBin: true
+ peerDependencies:
+ typescript: '*'
+ dependencies:
+ '@volar/typescript': 1.11.1
+ '@vue/language-core': 1.8.27(typescript@5.0.4)
+ semver: 7.5.4
+ typescript: 5.0.4
dev: true
/wcwidth@1.0.1:
@@ -6188,6 +7644,10 @@ packages:
defaults: 1.0.4
dev: true
+ /web-namespaces@2.0.1:
+ resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==}
+ dev: false
+
/webidl-conversions@3.0.1:
resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
dev: true
@@ -6332,3 +7792,7 @@ packages:
optionalDependencies:
commander: 9.5.0
dev: true
+
+ /zwitch@2.0.4:
+ resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
+ dev: false
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
index 92f9e0d..3b5cefd 100644
--- a/pnpm-workspace.yaml
+++ b/pnpm-workspace.yaml
@@ -1,4 +1,3 @@
packages:
- packages/*
- - demo
- - speed-highlight
+ - docs
diff --git a/scripts/packages.js b/scripts/packages.js
index 29f6705..c0be4b5 100644
--- a/scripts/packages.js
+++ b/scripts/packages.js
@@ -40,5 +40,6 @@ export const packages = [
'plugin-emoji',
'plugin-code',
'plugin-tikz',
- 'plugin-attachment'
+ 'plugin-attachment',
+ 'plugin-anchor'
];