Merge pull request #22 from aribaza/docs

Written comprehensive documentation
This commit is contained in:
Deniz Terzioglu 2025-10-24 11:32:52 +01:00 committed by GitHub
commit cf02fa3e5f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
17 changed files with 512 additions and 250 deletions

View file

@ -2,8 +2,10 @@
import autoImport from "astro-auto-import"
import { defineConfig } from 'astro/config';
import starlight from '@astrojs/starlight';
import starlightThemeNova from 'starlight-theme-nova'
import starlightSiteGraph from 'starlight-site-graph'
//import { Prism } from "@astrojs/prism";
// https://astro.build/config
export default defineConfig({
@ -11,12 +13,12 @@ export default defineConfig({
autoImport({
imports: [
"./src/components/Stars.astro",
]
}),
starlight({
plugins: [
starlightThemeNova(),
starlightSiteGraph()
starlightSiteGraph(),
],
title: 'JupyMD Docs',
logo: {
@ -28,15 +30,35 @@ export default defineConfig({
social: [{ icon: 'github', label: 'GitHub', href: 'https://github.com/d-eniz/jupymd' }],
sidebar: [
{
label: 'Guides',
items: [
// Each item here is one entry in the navigation menu.
{ label: 'Getting Started', slug: 'guides/getting-started' },
],
label: 'About',
items: [
{ label: 'Introduction', link: '/about/introduction/' }
],
},
{
label: 'Reference',
autogenerate: { directory: 'reference' },
label: 'Guides',
items: [
{ label: 'Getting Started', link: '/guides/getting-started/' },
{ label: 'Configuring', link: '/guides/configuring/' },
{ label: 'Selecting Interpreters', link: '/guides/selecting-interpreters/' },
],
},
{
label: 'Features',
items: [
{ label: 'Code Execution', link: '/features/code-execution/' },
{ label: 'Notebook / Note Conversion', link: '/features/note-conversion/' },
{ label: 'Syncing', link: '/features/syncing/' },
{ label: 'Output', link: '/features/output/' },
],
},
{
label: 'Contributing',
items: [
{ label: 'Contribution Guidelines', link: '/contributing/contribution-guidelines/' },
{ label: 'Prerequisites', link: '/contributing/prerequisites/' },
{ label: 'Checking out Pull Requests', link: '/contributing/pull-requests' },
],
},
],
customCss: [

View file

@ -311,6 +311,7 @@
"resolved": "https://registry.npmjs.org/@astrojs/starlight/-/starlight-0.36.1.tgz",
"integrity": "sha512-Fmt8mIsAIZN18Y4YQDI6p521GsYGe4hYxh9jWmz0pHBXnS5J7Na3TSXNya4eyIymCcKkuiKFbs7b/knsdGVYPg==",
"license": "MIT",
"peer": true,
"dependencies": {
"@astrojs/markdown-remark": "^6.3.1",
"@astrojs/mdx": "^4.2.3",
@ -2332,6 +2333,7 @@
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
"license": "MIT",
"peer": true,
"bin": {
"acorn": "bin/acorn"
},
@ -2504,6 +2506,7 @@
"resolved": "https://registry.npmjs.org/astro/-/astro-5.14.5.tgz",
"integrity": "sha512-EHt7y3+nHYyKzBats1AL3N4Pyrvqyr+zXBC7njUa9Tfe+gsiHlunaw+lXitTT/DDVwO2R/f/qVG7Xc6rl0b2KQ==",
"license": "MIT",
"peer": true,
"dependencies": {
"@astrojs/compiler": "^2.12.2",
"@astrojs/internal-helpers": "0.7.4",
@ -3331,6 +3334,7 @@
"resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz",
"integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==",
"license": "ISC",
"peer": true,
"engines": {
"node": ">=12"
}
@ -6148,6 +6152,7 @@
}
],
"license": "MIT",
"peer": true,
"dependencies": {
"nanoid": "^3.3.11",
"picocolors": "^1.1.1",
@ -6675,6 +6680,7 @@
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.4.tgz",
"integrity": "sha512-CLEVl+MnPAiKh5pl4dEWSyMTpuflgNQiLGhMv8ezD5W/qP8AKvmYpCOKRRNOh7oRKnauBZ4SyeYkMS+1VSyKwQ==",
"license": "MIT",
"peer": true,
"dependencies": {
"@types/estree": "1.0.8"
},
@ -6922,6 +6928,7 @@
"resolved": "https://registry.npmjs.org/starlight-site-graph/-/starlight-site-graph-0.5.0.tgz",
"integrity": "sha512-/FYCXDg+JwQGtxaDy1X/Lhhc5CYAF0ThOWvzBH3VmJSRlpAhqWgoUS/mGUNSy+QqGns+een+VDma+dkfBVWggA==",
"license": "MIT",
"peer": true,
"dependencies": {
"@types/chroma-js": "^3.1.1",
"@types/d3": "^7.4.3",
@ -7574,6 +7581,7 @@
"resolved": "https://registry.npmjs.org/vite/-/vite-6.4.0.tgz",
"integrity": "sha512-oLnWs9Hak/LOlKjeSpOwD6JMks8BeICEdYMJBf6P4Lac/pO9tKiv/XhXnAM7nNfSkZahjlCZu9sS50zL8fSnsw==",
"license": "MIT",
"peer": true,
"dependencies": {
"esbuild": "^0.25.0",
"fdir": "^6.4.4",
@ -7772,6 +7780,7 @@
"resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz",
"integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==",
"license": "MIT",
"peer": true,
"funding": {
"url": "https://github.com/sponsors/colinhacks"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

View file

@ -0,0 +1,43 @@
---
title: Introduction
description: Essential information about JupyMD
---
JupyMD for Obsidian enables Jupyter notebook functionality in Obsidian. Make markdown files behave like `.ipynb` notebooks, with live code execution, rich output rendering, and bidirectional syncing between `.md` and `.ipynb` files.
## Integrate your programming notes into Obsidian
With JupyMD you can:
- Run Python code
- Create plots with `matplotlib`
- Conduct data analysis with `pandas` dataframes
- Build machine learning models with `sklearn` and `pytorch`
- And much of what you would typically use a Jupyter notebook for
... all in your Obsidian vault!
## Use-cases:
### Machine learning workflow
![ml-workflow](/assets/../example-ml-workflow.gif)
### Visualising fractals with `matplotlib`
![mandelbrot-set](/assets/../mandelbrot-set.png)
## Features
- **Notebook Conversion**
- Convert existing notes in Obsidian to `.ipynb` files via Jupytext
- Convert existing Jupyter notebooks (`.ipynb`) to Markdown notes (`.md`) via Jupytext
- **Bidirectional Updates** Changes in Obsidian or Jupyter automatically sync between `.md` and `.ipynb` files
- **Execute Code** Run code blocks in Obsidian with output captured below each block, regardless of viewing mode
- **Persistent Execution Environment** Variables and imports defined in one code block are remembered by the following code blocks
- **True Jupyter Sync** Executed code blocks automatically update output metadata in linked `.ipynb` file
- **Persistent Output Rendering** Executed code outputs stay visible after restart and sync to `.ipynb` file
- **Rich Output** Support for `matplotlib` plots and `pandas` dataframe outputs
> **NOTE:**
> JupyMD currently supports Python execution only.
>
> Future versions will expand language support, though this feature is not yet in active development. Your help is appreciated, feel free to open an issue or submit a pull request if you would like to contribute!

View file

@ -0,0 +1,42 @@
---
title: Contribution guidelines
description: Guidelines and best practices for contributing to JupyMD.
---
This project was originally built to solve a personal problem, and it's still in an early stage. Feedback, bug reports, and pull requests are all welcome and appreciated!
If you are interested in contributing, please read the following guidelines to keep the project maintainable.
### General etiquette
Remember that this is a community driven project, maintained in peoples free time. Please be patient and respectful when waiting for a response.
### Commits
- Use [conventional commits](https://www.conventionalcommits.org/en/v1.0.0/).
- Keep commits to **one logical change at a time**. Try to avoid large commits.
- Make sure your commits leave the project in a working state.
- Don't bump versions or edit the manifest file.
### Pull requests
1. Before working on a PR, discuss the topic in issues first. Make sure this discussion is **meaningful** and give it some time for other people to read the issue. This is a good way of learning more about the problem at hand, and also prevents multiple people submitting a PR for the same issue.
2. Keep PRs small and focused, tackle one problem/feature/topic at a time.
3. Describe your problem clearly and extensively, point to any issues where this has been discussed. Describe your code and how you have tackled the problem.
4. If your PR makes a visual change, add screenshots showing the change.
5. Aim to make PRs ready to merge.
### Draft pull requests
You are allowed to submit a draft PR, given you [tag it appropriately](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests#draft-pull-requests). If your PR is almost ready, but there is a small section that you need help with, you may create a draft PR. If youre unsure how to approach the problem your PR will focus on, its best to start a discussion in issues first. Draft PRs are not exempt from any of the guidelines described above.
### Notes on maintainability
It is a good idea to have a general understanding of the project workflow and the [Obsidian API](https://docs.obsidian.md/Home) before editing the codebase. You are not expected to understand every detail of the codebase, but even just seeing how every component fits together in [`main.tsx`](https://github.com/d-eniz/jupymd/blob/master/src/main.tsx) would help massively with the quality of your submitted code.
It is important that we keep the codebase tidy and easy to understand. Not only does this make it easier for new contributors to learn the codebase, it also makes maintenance and spotting problems easier.
If you choose to use AI, make sure the generated code makes sense within the context of the general codebase.
---

View file

@ -0,0 +1,41 @@
---
title: Prerequisites for Contributing
description: Prerequisites for contributing to JupyMD
---
In addition to the requirements for running the plugin (see <a href="/../guides/getting-started/#prerequisites">Prerequisites</a>), youll need to install a few additional tools to set up your development environment for contributing to JupyMD.
---
## Install Required Tools
### 1. Node.js and npm
JupyMD uses **Node.js** and **npm** (Node Package Manager) for development, build, and dependency management.
- Download and install Node.js (which includes npm) from the [Node.js website](https://nodejs.org/).
- Verify your installation:
```bash
node -v
npm -v
```
### 2. Git
You'll need Git to clone the repository and manage branches:
```bash
git --version
```
If you don't have Git installed, download it from [here](https://git-scm.com/)
### 3. BRAT (Beta Reviewers Auto-update Tester)
When developing or reviewing pull requests for JupyMD, manually copying plugin files into your Obsidian vault can be cumbersome.
Instead, you can use the **[Obsidian BRAT plugin](https://github.com/TfTHacker/obsidian42-brat)** to automatically install and update the development version of JupyMD from GitHub.
1. Download the plugin through the [Obsidian community plugin browser](obsidian://show-plugin?id=obsidian42-brat) and enable it.
2. In Obsidians Command Palette (`Ctrl/Cmd + P`), run:
**BRAT: Add a beta plugin for testing**
3. Enter the JupyMD GitHub repository path
4. BRAT will automatically download and install the development version of JupyMD into your vault.

View file

@ -0,0 +1,76 @@
---
title: Checking out pull requests
description: How to review and test jupyMD pull requests locally.
---
When contributing to the plugin, you may want to check out pull requests (PR) to review code, test features or continue development. This page explains how to fetch and check out pull requests for jupyMD from GitHub using both Git and the GitHub CLI, so you can run and verify changes in your local environment.
### Pull requests in JupyMD
Pull requests are used to propose or discuss changes before they are merged into the main branch of the project repository. Contributors can open PRs for bug fixes, feature additions, or documentation improvements (see [Contribution Guidelines](/contributing/contribution-guidelines) for more information.)
Checking out a PR locally allows you to:
- Run the plugin in Obsidian and verify behaviour.
- Test compatibility with other plugins or Obsidian versions.
- Provide detailed feedback before merging pull request.
## Checking out a pull request
### Option 1: Using Git
#### Step 1: Clone the JupyMD Repository
If you haven't already, clone the official JupyMD repository:
```bash
git clone https://github.com/d-eniz/jupymd.git
cd jupyMD
```
or if you're contributing from a fork:
```bash
git clone https://github.com/<your-username>/jupymd.git
cd jupyMD
git remote add upstream https://github.com/d-eniz/jupymd.git
```
#### Step 2: Configure Git to Fetch Pull Requests
You can configure Git to fetch all open pull requests from the main repository:
```bash
git config --add remote.upstream.fetch "+refs/pull/*/head:refs/remotes/upstream/pr/*"
```
This command updates the fetch configuration for the origin remote, instructing Git to fetch pull request data into a new ref namespace, pr/*.
- +refs/pull/*/head: This specifies that Git should fetch the head (the tip of the branch) of all pull requests.
- refs/remotes/origin/pr/*: This tells Git to store these heads in a local ref path that can be checked out easily.
This is useful if you want to checkout and view many PRs in sequence.
#### Step 3: Fetch all pull requests
Once you have configured Git to recognise pull requests:
```bash
git fetch origin
```
This command pulls all pull request data into your local repository under the refs specified earlier.
#### Step 4: Checkout a specific pull request
After fetching the pull requests, you can checkout a specific one by referring to its PR number:
```bash
git checkout pr/1234
```
Replace ```1234``` with the actual pull request number
### Option 2: Using GitHub CLI
If you use GitHub CLI, you can checkout pull requests directly by listing the open pull requests:
```bash
gh pr list
```
and then checking out a pull request by number
```bash
gh pr checkout 1234
```
Replace ```1234``` with the pull request number - the CLI will handle the fetching and checking out steps.
## Reviewing and testing the pull request locally
With the PR checked out locally, you can now compile the code, run tests, or do manual testing to ensure that the changes meet the project's standards and do not introduce bugs.

View file

@ -0,0 +1,38 @@
---
title: Code Execution
description: Learn how to execute and manage Python code blocks in JupyMD
---
JupyMD allows you to run Python code blocks directly within your Markdown documents.
Each code block behaves like a Jupyter Notebook cell — you can execute it, view outputs, and clear results without leaving Obsidian.
When a Markdown file is **paired** with a Jupyter Notebook (`.ipynb`), each fenced code block (e.g., ```python) corresponds to a Jupyter cell.
The plugin synchronizes these automatically, so running a cell updates both the Markdown and the Notebook representations.
<!-- ADD A CODE BLOCK BEFORE AND AFTER BEING RAN HERE -->
---
## Running Code
Each code block includes a small toolbar in the top-right corner:
| Action | Description |
|---------|-------------|
| **Run cell** | Executes the code block using the selected Python interpreter |
| **Clear output** | Removes all outputs for this cell |
| **Loading** | Shown while code is running |
When you click **Run**, JupyMD:
1. Ensures the Markdown file is paired with its `.ipynb`.
2. Sends the code to the Python interpreter for execution.
3. Waits for synchronization to complete.
4. Displays any resulting text or images below the block.
---
## Pairing Requirement
Code execution is only available when your Markdown file is paired with a Jupyter Notebook.
If pairing is disabled, the toolbar will not show execution buttons.
To pair a file, use the **JupyMD: Pair notebook** command or ensure that both `.md` and `.ipynb` files exist in the same directory with matching filenames.

View file

@ -0,0 +1,12 @@
---
title: Notebook / Note Conversion
description: Put description here ARI !!
---
There are four key behaviours related to the notebook/note conversion in JupyMD, which are done using jupytext for conversions and pairing:
- **Notebook → Note**: Converts `.ipynb` to `.md` and pairs them.
- **Note → Notebook**: Converts `.md` to `.ipynb` and pairs them.
- **Sync**: Updates paired files <a href="/features/syncing">automatically</a> (bidirectional or unidirectional).
- **Open in Editor**: Launch paired notebook in an external editor.

View file

@ -0,0 +1,30 @@
---
title: Output
description: Learn how JupyMD handles and preserves code outputs.
---
JupyMD supports live code execution within Markdown notes and automatically manages how outputs are displayed and preserved.
## How output works
When you execute a code block in a JupyMD note:
1. The code is sent to a background Python process (the JupyMD kernel).
2. Standard output (`stdout`), standard error (`stderr`), and any images generated are captured.
3. These outputs are written back into the corresponding cell of the paired `.ipynb` file.
4. The plugin then synchronizes your `.md` note and `.ipynb` file using Jupytext, ensuring both remain consistent.
## Persistent output
When you execute a code block, the output is not lost after closing the note or restarting Obsidian.
Instead, the results are stored directly inside the associated `.ipynb` file.
So when you reopen the note, alll previously executed outputs are automatically re-rendered. You dont need to re-run the cell unless youve changed the code.
## Output types supported
JupyMD currently supports the following output types:
- Standard output (```stdout```): Anything printed using print().
- Standard error (```stderr```): Any errors or warnings raised during execution.
- Rich output: Automatically captured from Matplotlib figures (```plt.show()```).

View file

@ -0,0 +1,12 @@
---
title: Syncing
description: Put description here ARI !!
---
JupyMD continuously keeps your Markdown and Notebook files in sync:
- After running code, the `.ipynb` file is updated first.
- The Markdown file is then timestamped to remain the authoritative source.
- This avoids sync bias where the Notebooks newer modification time could overwrite Markdown content.
If the plugin detects temporary sync blocking (e.g., while autosaving), it will retry for a few seconds before proceeding.

View file

@ -0,0 +1,49 @@
---
title: Configuring JupyMD
description: A quick guide to setting up and customising JupyMD
---
There are a number of preferences that can be set from the plugin's settings page.
## Setup
### **Python Interpreter**
Select the Python interpreter that JupyMD will use to run code blocks.
- Default: `python` on Windows, `python3` on macOS/Linux.
- You can <a href="/guides/selecting-interpreters">set this to a specific path</a> (e.g., a virtual environment interpreter).
### **Install Required Libraries**
Click **Install** to automatically install `jupytext` and `matplotlib` for the selected interpreter using `pip`.
This ensures that JupyMD can synchronise Markdown and Jupyter Notebook files properly.
---
## General
### **Jupyter Notebook Editor Launch Command**
Define the command used to open Jupyter notebooks in your preferred environment.
Examples:
- `code` → Launches in **VS Code**
- `jupyter-lab` → Launches in **Jupyter Lab**
- `pycharm64.exe` → Launches in **PyCharm**
---
### **Custom Python Code Blocks**
When enabled, JupyMD uses its own Python code block styling instead of the default Obsidian one.
> Requires a restart to take effect.
---
### **Automatic Sync**
When enabled, JupyMD automatically synchronises changes between Markdown (`.md`) and Jupyter Notebook (`.ipynb`) files.
If you encounter sync issues, you can disable this option and sync manually through the “JupyMD: Sync files” command.
---
### **Bidirectional Sync**
Determines the direction of syncing between Markdown and Notebook files:
- **Enabled:** Changes in either file type are mirrored in the other.
- **Disabled:** Markdown files overwrite their paired notebooks on sync.
> Disable this if you notice overwriting or version conflicts.

View file

@ -1,11 +1,29 @@
---
title: Example Guide
description: A guide in my new Starlight docs site.
title: Getting started
description: A guide on how to start using JupyMD on your obsidian.
---
Guides lead a user through a specific task they want to accomplish, often with a sequence of steps.
Writing a good guide requires thinking about what your users are trying to do.
Download the plugin through the [Obsidian community plugin browser](obsidian://show-plugin?id=jupymd) and enable it.
## Further reading
### Prerequisites
In order for JupyMD to run correctly, you must have the following installed on your machine:
- Read [about how-to guides](https://diataxis.fr/how-to-guides/) in the Diátaxis framework
- [Python](https://www.python.org/downloads/)
- [Jupyter Notebook](https://jupyter.org/install)
`pip install notebook`
- [Jupytext](https://github.com/mwouts/jupytext)
`pip install jupytext`
This can be done manually through the commands above or by navigating to Obsidian Settings -> JupyMD Settings -> Setup -> Install Required Libraries
### To convert a note to a Jupyter notebook
Execute the following command on a note you want Jupyter notebook capability on:
> `JupyMD: Create Jupyter notebook from note`
This will create an `.ipynb` file with the same file name as the current note on the file directory, and will transform your Python code blocks into interactive code blocks. Your note will now behave like a Jupyter notebook, and sync its contents automatically to the `.ipynb` file. You may choose to ignore the created `.ipynb` file completely, as its functionality will be mirrored in Obsidian.
### To convert a Jupyter notebook to a note
Open a `.ipynb` file in Obsidian and execute:
> `JupyMD: Create note from Jupyter notebook`
This will create a Markdown note (`.md`) with the same file name as the notebook, and set up bidirectional sync between the notebook and the note.

View file

@ -0,0 +1,56 @@
---
title: Selecting interpreters
description: A guide on how to select interpreters and setting up a virtual environment
---
The plugin currently only supports **Python** and will automatically set a default interpreter appropriate to your operating system:
- **Windows:** `python`
- **MacOS/Linux:** `python3`
You can change this setting in the plugins preferences. Under **“Python Interpreter”**, specify a custom path to a different Python installation i.e. a specific version or a virtual environment.
---
### Using a Virtual Environment
Using a **virtual environment** is recommended to avoid conflicts between the plugin and your system-wide Python installation.
---
#### Windows users
1. Open your project directory in the terminal or PowerShell.
2. Create a virtual environment (if you havent already):
```bash
python -m venv venv
```
3. Locate the path to your environment's Python interpreter:
```
<your_project_path>\venv\Scripts\python.exe
```
#### MacOS / Linux users
1. Open a terminal in your project directory.
2. Create a virtual environment (if you haven't already):
```bash
python3 -m venv venv
```
3. Locate the path to your environment's Python interpreter:
```
/path/to/your/project/venv/bin/python3
```
#### Installing packages in a virtual environment
It is also possible to install packages directly into the virtual environment. This can be done from the terminal by:
- MacOS/ Linux users:
```bash
/path/to/your/project/venv/bin/python3 pip install packages
```
- Windows users:
```bash
<your_project_path>\venv\Scripts\python.exe pip install packages
```

280
package-lock.json generated
View file

@ -20,7 +20,7 @@
"prismjs": "^1.30.0",
"react": "^19.1.0",
"react-dom": "^19.1.0",
"react-syntax-highlighter": "^15.6.1",
"react-syntax-highlighter": "^5.8.0",
"yaml": "^2.7.0"
},
"devDependencies": {
@ -1349,15 +1349,6 @@
"integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==",
"dev": true
},
"node_modules/@types/hast": {
"version": "2.3.10",
"resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.10.tgz",
"integrity": "sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==",
"license": "MIT",
"dependencies": {
"@types/unist": "^2"
}
},
"node_modules/@types/json-schema": {
"version": "7.0.15",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
@ -1433,12 +1424,6 @@
"@types/estree": "*"
}
},
"node_modules/@types/unist": {
"version": "2.0.11",
"resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz",
"integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==",
"license": "MIT"
},
"node_modules/@typescript-eslint/eslint-plugin": {
"version": "5.29.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.29.0.tgz",
@ -1764,6 +1749,16 @@
"node": ">=8"
}
},
"node_modules/babel-runtime": {
"version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
"integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==",
"license": "MIT",
"dependencies": {
"core-js": "^2.4.0",
"regenerator-runtime": "^0.11.0"
}
},
"node_modules/balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
@ -1772,10 +1767,11 @@
"peer": true
},
"node_modules/brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"version": "1.1.12",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
"integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"balanced-match": "^1.0.0",
@ -1896,36 +1892,6 @@
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
"node_modules/character-entities": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz",
"integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
}
},
"node_modules/character-entities-legacy": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz",
"integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
}
},
"node_modules/character-reference-invalid": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz",
"integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
}
},
"node_modules/codemirror": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/codemirror/-/codemirror-6.0.1.tgz",
@ -1961,16 +1927,6 @@
"dev": true,
"peer": true
},
"node_modules/comma-separated-tokens": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz",
"integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
}
},
"node_modules/concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
@ -1984,6 +1940,14 @@
"integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
"dev": true
},
"node_modules/core-js": {
"version": "2.6.12",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz",
"integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==",
"deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.",
"hasInstallScript": true,
"license": "MIT"
},
"node_modules/cosmiconfig": {
"version": "8.3.6",
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz",
@ -2668,33 +2632,6 @@
"node": ">=8"
}
},
"node_modules/hast-util-parse-selector": {
"version": "2.2.5",
"resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz",
"integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==",
"license": "MIT",
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
"node_modules/hastscript": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz",
"integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==",
"license": "MIT",
"dependencies": {
"@types/hast": "^2.0.0",
"comma-separated-tokens": "^1.0.0",
"hast-util-parse-selector": "^2.0.0",
"property-information": "^5.0.0",
"space-separated-tokens": "^1.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
"node_modules/highlight.js": {
"version": "11.11.1",
"resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.11.1.tgz",
@ -2703,12 +2640,6 @@
"node": ">=12.0.0"
}
},
"node_modules/highlightjs-vue": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/highlightjs-vue/-/highlightjs-vue-1.0.0.tgz",
"integrity": "sha512-PDEfEF102G23vHmPhLyPboFCD+BkMGu+GuJe2d9/eH4FsCwvgBpnc9n0pGE+ffKdph38s6foEZiEjdgHdzp+IA==",
"license": "CC0-1.0"
},
"node_modules/ignore": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
@ -2763,46 +2694,12 @@
"dev": true,
"peer": true
},
"node_modules/is-alphabetical": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz",
"integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
}
},
"node_modules/is-alphanumerical": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz",
"integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==",
"license": "MIT",
"dependencies": {
"is-alphabetical": "^1.0.0",
"is-decimal": "^1.0.0"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
}
},
"node_modules/is-arrayish": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
"integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
"dev": true
},
"node_modules/is-decimal": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz",
"integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
}
},
"node_modules/is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
@ -2824,16 +2721,6 @@
"node": ">=0.10.0"
}
},
"node_modules/is-hexadecimal": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz",
"integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
}
},
"node_modules/is-number": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
@ -2998,23 +2885,20 @@
}
},
"node_modules/lowlight": {
"version": "1.20.0",
"resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.20.0.tgz",
"integrity": "sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==",
"version": "1.9.2",
"resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.9.2.tgz",
"integrity": "sha512-Ek18ElVCf/wF/jEm1b92gTnigh94CtBNWiZ2ad+vTgW7cTmQxUY3I98BjHK68gZAJEWmybGBZgx9qv3QxLQB/Q==",
"license": "MIT",
"dependencies": {
"fault": "^1.0.0",
"highlight.js": "~10.7.0"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
"fault": "^1.0.2",
"highlight.js": "~9.12.0"
}
},
"node_modules/lowlight/node_modules/highlight.js": {
"version": "10.7.3",
"resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz",
"integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==",
"version": "9.12.0",
"resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.12.0.tgz",
"integrity": "sha512-qNnYpBDO/FQwYVur1+sQBQw7v0cxso1nOYLklqWh6af8ROwwTVoII5+kf/BVa8354WL4ad6rURHYGUXCbD9mMg==",
"deprecated": "Version no longer supported. Upgrade to @latest",
"license": "BSD-3-Clause",
"engines": {
"node": "*"
@ -3206,24 +3090,6 @@
"node": ">=6"
}
},
"node_modules/parse-entities": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz",
"integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==",
"license": "MIT",
"dependencies": {
"character-entities": "^1.0.0",
"character-entities-legacy": "^1.0.0",
"character-reference-invalid": "^1.0.0",
"is-alphanumerical": "^1.0.0",
"is-decimal": "^1.0.0",
"is-hexadecimal": "^1.0.0"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
}
},
"node_modules/parse-json": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
@ -3318,19 +3184,6 @@
"node": ">=6"
}
},
"node_modules/property-information": {
"version": "5.6.0",
"resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz",
"integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==",
"license": "MIT",
"dependencies": {
"xtend": "^4.0.0"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
}
},
"node_modules/punycode": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
@ -3381,54 +3234,34 @@
}
},
"node_modules/react-syntax-highlighter": {
"version": "15.6.1",
"resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-15.6.1.tgz",
"integrity": "sha512-OqJ2/vL7lEeV5zTJyG7kmARppUjiB9h9udl4qHQjjgEos66z00Ia0OckwYfRxCSFrW8RJIBnsBwQsHZbVPspqg==",
"version": "5.8.0",
"resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-5.8.0.tgz",
"integrity": "sha512-+FolT9NhFBqE4SsZDelSzsYJJS/JCnQqo4+GxLrFPoML548uvr8f4Eh5nnd5o6ERKFW7ryiygOX9SPnxdnlpkg==",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.3.1",
"highlight.js": "^10.4.1",
"highlightjs-vue": "^1.0.0",
"lowlight": "^1.17.0",
"prismjs": "^1.27.0",
"refractor": "^3.6.0"
"babel-runtime": "^6.18.0",
"highlight.js": "~9.12.0",
"lowlight": "~1.9.1"
},
"peerDependencies": {
"react": ">= 0.14.0"
}
},
"node_modules/react-syntax-highlighter/node_modules/highlight.js": {
"version": "10.7.3",
"resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz",
"integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==",
"version": "9.12.0",
"resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.12.0.tgz",
"integrity": "sha512-qNnYpBDO/FQwYVur1+sQBQw7v0cxso1nOYLklqWh6af8ROwwTVoII5+kf/BVa8354WL4ad6rURHYGUXCbD9mMg==",
"deprecated": "Version no longer supported. Upgrade to @latest",
"license": "BSD-3-Clause",
"engines": {
"node": "*"
}
},
"node_modules/refractor": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/refractor/-/refractor-3.6.0.tgz",
"integrity": "sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==",
"license": "MIT",
"dependencies": {
"hastscript": "^6.0.0",
"parse-entities": "^2.0.0",
"prismjs": "~1.27.0"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
}
},
"node_modules/refractor/node_modules/prismjs": {
"version": "1.27.0",
"resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.27.0.tgz",
"integrity": "sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==",
"license": "MIT",
"engines": {
"node": ">=6"
}
"node_modules/regenerator-runtime": {
"version": "0.11.1",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
"integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
"license": "MIT"
},
"node_modules/regexpp": {
"version": "3.2.0",
@ -3560,16 +3393,6 @@
"tslib": "^2.0.3"
}
},
"node_modules/space-separated-tokens": {
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz",
"integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
}
},
"node_modules/strip-ansi": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
@ -3789,15 +3612,6 @@
"dev": true,
"peer": true
},
"node_modules/xtend": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
"integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
"license": "MIT",
"engines": {
"node": ">=0.4"
}
},
"node_modules/yallist": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",

View file

@ -45,7 +45,7 @@
"prismjs": "^1.30.0",
"react": "^19.1.0",
"react-dom": "^19.1.0",
"react-syntax-highlighter": "^15.6.1",
"react-syntax-highlighter": "^5.8.0",
"yaml": "^2.7.0"
}
}