diff --git a/AIClasses/Gemini/Gemini.ts b/AIClasses/Gemini/Gemini.ts index 6af7cf2..51d0104 100644 --- a/AIClasses/Gemini/Gemini.ts +++ b/AIClasses/Gemini/Gemini.ts @@ -1,5 +1,4 @@ import { AIProviderURL } from "Enums/ApiProvider"; -import { isValidJson } from "Helpers"; import { request, type RequestUrlParam } from "obsidian"; import { Resolve } from "Services/DependencyService"; import { Services } from "Services/Services"; @@ -8,6 +7,7 @@ import type { GeminiActionDefinitions } from "Actioner/Gemini/GeminiActionDefini import { create_file } from "Actioner/Actions"; import type { IAIClass } from "AIClasses/IAIClass"; import type { IPrompt } from "AIClasses/IPrompt"; +import type { GenerateContentResponse, Part } from "@google/genai"; export class Gemini implements IAIClass { private readonly apiKey: string; @@ -22,7 +22,7 @@ export class Gemini implements IAIClass { this.actionDefinitions = Resolve(Services.IActionDefinitions); } - public async apiRequest(userInput: string, actioner: IActioner): Promise { //AIResponse + public async apiRequest(userInput: string, actioner: IActioner): Promise { let prompt: string = "The users prompt is: " + userInput; let requestBody = JSON.stringify({ @@ -55,22 +55,14 @@ export class Gemini implements IAIClass { body: requestBody }; - let response: GeminiApiResponse = JSON.parse(await request(reqParam)); + let response: GenerateContentResponse = JSON.parse(await request(reqParam)); console.log(response); - //TODO: tidy up this - let ai_response: Part[] = response.candidates[0]?.content.parts ?? "{}"; - - // if (isValidJson(ai_response)) { - // return JSON.parse(ai_response); - // } + let ai_response: Part[] = response.candidates?.first()?.content?.parts ?? []; console.log(ai_response); return ai_response; - - - return null; } } \ No newline at end of file diff --git a/AIClasses/IAIClass.ts b/AIClasses/IAIClass.ts index 7ed95c6..b9192e4 100644 --- a/AIClasses/IAIClass.ts +++ b/AIClasses/IAIClass.ts @@ -1,3 +1,4 @@ +import type { Part } from "@google/genai"; import type { IActioner } from "Actioner/IActioner"; export interface IAIClass { diff --git a/AIClasses/IPrompt.ts b/AIClasses/IPrompt.ts index 198962b..21642f9 100644 --- a/AIClasses/IPrompt.ts +++ b/AIClasses/IPrompt.ts @@ -25,7 +25,6 @@ export class AIPrompt implements IPrompt { public readonly instructionsArr: string[] = [ "You are an AI assistant for the Obsidian note taking app.", - //"In addition to answering questions, you can execute helpful functions which are defined below.", "The user has provided extra context to your responsibilities:", "You are a DND expert and can provide detailed information about DND rules, character creation, and gameplay mechanics. Please give concise responses." ]; @@ -34,17 +33,14 @@ export class AIPrompt implements IPrompt { } public readonly instructionsReminderArr: string[] = [ - "Ensure your response is valid JSON following the format defined above." + "" ] public instructionsReminder(): string { return this.instructionsReminderArr.join("\n"); } public readonly responseFormatArr: string[] = [ - "All responses that are not function calls should be in JSON parsable format. The response should not be wrapped in ```json```. The following fields should be used:", - "user_response - the response to be delivered to the user.", - //"function_name - a string name for the desired function or null.", - //"function_object - an object containing the function arguments or null." + "", ] public responseFormat(): string { return this.responseFormatArr.join("\n"); diff --git a/AIClasses/Response/AIResponse.ts b/AIClasses/Response/AIResponse.ts index b9e4859..844fb4f 100644 --- a/AIClasses/Response/AIResponse.ts +++ b/AIClasses/Response/AIResponse.ts @@ -1,14 +1,4 @@ -/** - * Interfaces for requested custom API responses. - */ -interface AIResponse { - function_calls: FunctionCall[]; - - // function_name: string | null; - // function_object: object | null; - // user_response: string; -} interface CreateFileRequest { file_path: string; diff --git a/AIClasses/Response/GeminiResponse.ts b/AIClasses/Response/GeminiResponse.ts deleted file mode 100644 index fa52e3c..0000000 --- a/AIClasses/Response/GeminiResponse.ts +++ /dev/null @@ -1,80 +0,0 @@ -/** - * Interface for the top-level Gemini API response. - */ -interface GeminiApiResponse { - candidates: Candidate[]; - usageMetadata: UsageMetadata; - modelVersion: string; - responseId: string; -} - -/** - * Interface for a single candidate in the response. - */ -interface Candidate { - content: Content; - finishReason: string; - index: number; - citationMetadata: CitationMetadata; -} - -/** - * Interface for the content of a candidate. - */ -interface Content { - parts: Part[]; - role: string; -} - -/** - * Interface for a single part of the content. - * The `text` property contains a JSON string, which needs to be parsed. - */ -interface Part { - text: string; - functionCall: FunctionCall; -} - -/** - * Interface for a single function call. - */ -interface FunctionCall { - name: string; - args: object; -} - -/** - * Interface for the metadata about citations. - */ -interface CitationMetadata { - citationSources: CitationSource[]; -} - -/** - * Interface for a single citation source. - */ -interface CitationSource { - startIndex: number; - endIndex: number; - uri: string; - license: string; -} - -/** - * Interface for the usage metadata of the API call. - */ -interface UsageMetadata { - promptTokenCount: number; - candidatesTokenCount: number; - totalTokenCount: number; - promptTokensDetails: PromptTokensDetails[]; - thoughtsTokenCount: number; -} - -/** - * Interface for the details of prompt tokens. - */ -interface PromptTokensDetails { - modality: string; - tokenCount: number; -} \ No newline at end of file diff --git a/Components/ChatArea.svelte b/Components/ChatArea.svelte new file mode 100644 index 0000000..ec1b3b6 --- /dev/null +++ b/Components/ChatArea.svelte @@ -0,0 +1,199 @@ + + +
+ {#each processedMessages as message (message.id)} +
+
+ {#if message.isUser} +

{message.content}

+ {:else} +
+ {@html message.htmlContent} +
+ {/if} +
+
+ {/each} + + {#if messages.length === 0} +
+

Start a conversation by typing a message below.

+
+ {/if} +
+ + + \ No newline at end of file diff --git a/Components/ChatWindow.svelte b/Components/ChatWindow.svelte index e69de29..c133b14 100644 --- a/Components/ChatWindow.svelte +++ b/Components/ChatWindow.svelte @@ -0,0 +1,160 @@ + + +
+
+ +
+ +
+ + + +
+
+ + \ No newline at end of file diff --git a/Components/Input.svelte b/Components/Input.svelte deleted file mode 100644 index c595d85..0000000 --- a/Components/Input.svelte +++ /dev/null @@ -1,77 +0,0 @@ - - -
- - - -

{output}

-
- - \ No newline at end of file diff --git a/Helpers.ts b/Helpers.ts index 5891655..4a44394 100644 --- a/Helpers.ts +++ b/Helpers.ts @@ -1,4 +1,4 @@ -import { TFile, TFolder, type Vault } from "obsidian"; +import { type Vault } from "obsidian"; export function isValidJson(str: string): boolean { try { @@ -11,7 +11,7 @@ export function isValidJson(str: string): boolean { export async function createDirectories(vault: Vault, filePath: string) { const dirPath: string = filePath.substring(0, filePath.lastIndexOf('/')); - + const dirs: string[] = dirPath.split('/'); let currentPath = ""; @@ -23,4 +23,46 @@ export async function createDirectories(vault: Vault, filePath: string) { } } } +} + +export class Semaphore { + private max: number; + private count: number; + private readonly waitAsync: boolean; + private readonly queue: ((value: boolean) => void)[]; + + constructor(max: number, waitAsync: boolean) { + this.max = max; + this.count = max; + this.waitAsync = waitAsync; + this.queue = []; + } + + async wait(): Promise { + if (this.count > 0) { + this.count--; + return true; + } + + if (!this.waitAsync) { + return false; + } + + return new Promise((resolve) => { + this.queue.push(resolve); + }); + } + + release(): void { + if (this.queue.length > 0) { + const resolve = this.queue.shift(); + if (resolve) { + resolve(true); + } + } else { + if (this.count < this.max) { + this.count++; + } + } + } } \ No newline at end of file diff --git a/Services/MarkdownService.ts b/Services/MarkdownService.ts new file mode 100644 index 0000000..d5757ee --- /dev/null +++ b/Services/MarkdownService.ts @@ -0,0 +1,112 @@ +import { unified, type Processor } from 'unified'; +import remarkParse from 'remark-parse'; +import remarkMath from 'remark-math'; +import remarkGfm from 'remark-gfm'; +import remarkToc from 'remark-toc'; +import remarkEmoji from 'remark-emoji'; +import remarkRehype from 'remark-rehype'; +import rehypeKatex from 'rehype-katex'; +import rehypeHighlight from 'rehype-highlight'; +import rehypeStringify from 'rehype-stringify'; + +export class MarkdownService { + private static processor: Processor | null = null; + + constructor() { + if (!MarkdownService.processor) { + MarkdownService.processor = this.createProcessor(); + } + } + + private createProcessor() { + return unified() + .use(remarkParse) + .use(remarkMath) + .use(remarkGfm) + .use(remarkToc) + .use(remarkEmoji) + .use(remarkRehype, { allowDangerousHtml: false }) + .use(rehypeKatex) + .use(rehypeHighlight) + .use(rehypeStringify); + } + + /** + * Formats LLM response text into HTML-friendly format + * Handles output from Claude, ChatGPT, and Gemini + * @param content - The raw LLM response text + * @returns HTML string + */ + formatToHTML(content: string): string { + try { + const preprocessedContent = this.preprocessContent(content); + const result = MarkdownService.processor!.processSync(preprocessedContent); + return String(result); + } catch (error) { + console.error('Markdown processing failed:', error); + return `

${this.escapeHtml(content)}

`; + } + } + + private preprocessContent(content: string): string { + return content + // 1. LaTeX Math Notation (normalize different formats) + .replace(/\\\[([\s\S]*?)\\\]/g, (_, equation) => `$$${equation}$$`) // block math + .replace(/\\\(([\s\S]*?)\\\)/g, (_, equation) => `$${equation}$`) // inline math + + // 2. Handle Code Block Language Tags (normalize variations) + .replace(/```(\w+)\s*\n/g, '```$1\n') + + // 3. Fix Common Escape Issues (AI models sometimes over-escape) + .replace(/\\`/g, '`') + .replace(/\\\*/g, '*') + .replace(/\\_/g, '_') + + // 4. Normalize Line Endings + .replace(/\r\n/g, '\n') + .replace(/\r/g, '\n') + + // 5. Handle Triple Quotes (some models use these for code) + .replace(/"""\s*(\w+)?\s*\n([\s\S]*?)\n"""/g, (match, lang, code) => { + return lang ? `\`\`\`${lang}\n${code}\n\`\`\`` : `\`\`\`\n${code}\n\`\`\``; + }) + + // 6. Clean up Multiple Consecutive Newlines + .replace(/\n{4,}/g, '\n\n\n') + + // 7. Handle Gemini's math-in-code-blocks tendency + .replace(/```math\n([\s\S]*?)\n```/g, (_, equation) => { + if (equation.includes('\\') || equation.includes('{') || equation.includes('^') || equation.includes('_')) { + return `$$${equation}$$`; + } + return `\`\`\`\n${equation}\n\`\`\``; + }) + + // 8. Fix Bold/Italic Formatting Issues + .replace(/\*\*\s+([^*]+)\s+\*\*/g, '**$1**') // Remove extra spaces in bold + .replace(/\*\s+([^*]+)\s+\*/g, '*$1*') // Remove extra spaces in italic + + // 9. Fix Table Formatting Issues + .replace(/^\|\s+/gm, '| ') // Clean up table cell spacing + .replace(/\s+\|$/gm, ' |') // Clean up table cell spacing + + // 10. Handle Alternative List Markers + .replace(/^•\s/gm, '- ') // Convert bullet points to markdown + .replace(/^→\s/gm, '- ') // Convert arrows to markdown + + // 11. Fix Link Formatting Issues + .replace(/\[\s+([^\]]+)\s+\]/g, '[$1]') // Remove spaces in link text + + // 12. Handle Footnote Variations + .replace(/\[\^(\w+)\]:/g, '[^$1]:') // Normalize footnote definitions + + // 13. Clean up Heading Formatting + .replace(/^#+\s+/gm, (match) => match.replace(/\s+/g, ' ')); // Single space after # + } + + private escapeHtml(text: string): string { + const div = document.createElement('div'); + div.textContent = text; + return div.innerHTML; + } +} \ No newline at end of file diff --git a/Services/ServiceRegistration.ts b/Services/ServiceRegistration.ts index add3989..98f5597 100644 --- a/Services/ServiceRegistration.ts +++ b/Services/ServiceRegistration.ts @@ -11,6 +11,7 @@ import type { IAIClass } from "AIClasses/IAIClass"; import { GeminiActionDefinitions } from "Actioner/Gemini/GeminiActionDefinitions"; import type { IActionDefinitions } from "Actioner/IActionDefinitions"; import { Gemini } from "AIClasses/Gemini/Gemini"; +import { MarkdownService } from "./MarkdownService"; export function RegisterDependencies(plugin: DmsAssistantPlugin) { RegisterSingleton(Services.DmsAssistantPlugin, plugin); @@ -18,8 +19,9 @@ export function RegisterDependencies(plugin: DmsAssistantPlugin) { RegisterSingleton(Services.ModalService, new ModalService()) RegisterSingleton(Services.IPrompt, new AIPrompt()); - RegisterSingleton(Services.IActioner, new Actioner()) + RegisterSingleton(Services.IActioner, new Actioner()); + RegisterTransient(Services.MarkdownService, () => new MarkdownService()); RegisterAiProvider(plugin); } diff --git a/Services/Services.ts b/Services/Services.ts index f56d00b..24fe264 100644 --- a/Services/Services.ts +++ b/Services/Services.ts @@ -2,6 +2,7 @@ export class Services { static DmsAssistantPlugin = Symbol("DmsAssistantPlugin"); static OdbCache = Symbol("OdbCache"); static ModalService = Symbol("ModalService"); + static MarkdownService = Symbol("MarkdownService"); // interfaces static IAIClass = Symbol("IAIClass"); diff --git a/Styles/highlight-default.min.css b/Styles/highlight-default.min.css new file mode 100644 index 0000000..a75ea91 --- /dev/null +++ b/Styles/highlight-default.min.css @@ -0,0 +1,9 @@ +/*! + Theme: Default + Description: Original highlight.js style + Author: (c) Ivan Sagalaev + Maintainer: @highlightjs/core-team + Website: https://highlightjs.org/ + License: see project LICENSE + Touched: 2021 +*/pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#f3f3f3;color:#444}.hljs-comment{color:#697070}.hljs-punctuation,.hljs-tag{color:#444a}.hljs-tag .hljs-attr,.hljs-tag .hljs-name{color:#444}.hljs-attribute,.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-name,.hljs-selector-tag{font-weight:700}.hljs-deletion,.hljs-number,.hljs-quote,.hljs-selector-class,.hljs-selector-id,.hljs-string,.hljs-template-tag,.hljs-type{color:#800}.hljs-section,.hljs-title{color:#800;font-weight:700}.hljs-link,.hljs-operator,.hljs-regexp,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-symbol,.hljs-template-variable,.hljs-variable{color:#ab5656}.hljs-literal{color:#695}.hljs-addition,.hljs-built_in,.hljs-bullet,.hljs-code{color:#397300}.hljs-meta{color:#1f7199}.hljs-meta .hljs-string{color:#38a}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/Styles/katex.min.css b/Styles/katex.min.css new file mode 100644 index 0000000..274e2d2 --- /dev/null +++ b/Styles/katex.min.css @@ -0,0 +1,373 @@ +/* KaTeX CSS with CDN font URLs */ +@font-face { + font-family: 'KaTeX_AMS'; + font-style: normal; + font-weight: 400; + src: url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_AMS-Regular.woff2') format('woff2'), + url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_AMS-Regular.woff') format('woff'); +} + +@font-face { + font-family: 'KaTeX_Caligraphic'; + font-style: normal; + font-weight: 700; + src: url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Caligraphic-Bold.woff2') format('woff2'), + url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Caligraphic-Bold.woff') format('woff'); +} + +@font-face { + font-family: 'KaTeX_Caligraphic'; + font-style: normal; + font-weight: 400; + src: url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Caligraphic-Regular.woff2') format('woff2'), + url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Caligraphic-Regular.woff') format('woff'); +} + +@font-face { + font-family: 'KaTeX_Fraktur'; + font-style: normal; + font-weight: 700; + src: url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Fraktur-Bold.woff2') format('woff2'), + url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Fraktur-Bold.woff') format('woff'); +} + +@font-face { + font-family: 'KaTeX_Fraktur'; + font-style: normal; + font-weight: 400; + src: url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Fraktur-Regular.woff2') format('woff2'), + url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Fraktur-Regular.woff') format('woff'); +} + +@font-face { + font-family: 'KaTeX_Main'; + font-style: normal; + font-weight: 700; + src: url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Main-Bold.woff2') format('woff2'), + url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Main-Bold.woff') format('woff'); +} + +@font-face { + font-family: 'KaTeX_Main'; + font-style: italic; + font-weight: 400; + src: url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Main-Italic.woff2') format('woff2'), + url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Main-Italic.woff') format('woff'); +} + +@font-face { + font-family: 'KaTeX_Main'; + font-style: normal; + font-weight: 400; + src: url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Main-Regular.woff2') format('woff2'), + url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Main-Regular.woff') format('woff'); +} + +@font-face { + font-family: 'KaTeX_Math'; + font-style: italic; + font-weight: 400; + src: url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Math-Italic.woff2') format('woff2'), + url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Math-Italic.woff') format('woff'); +} + +@font-face { + font-family: 'KaTeX_SansSerif'; + font-style: normal; + font-weight: 700; + src: url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_SansSerif-Bold.woff2') format('woff2'), + url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_SansSerif-Bold.woff') format('woff'); +} + +@font-face { + font-family: 'KaTeX_SansSerif'; + font-style: italic; + font-weight: 400; + src: url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_SansSerif-Italic.woff2') format('woff2'), + url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_SansSerif-Italic.woff') format('woff'); +} + +@font-face { + font-family: 'KaTeX_SansSerif'; + font-style: normal; + font-weight: 400; + src: url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_SansSerif-Regular.woff2') format('woff2'), + url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_SansSerif-Regular.woff') format('woff'); +} + +@font-face { + font-family: 'KaTeX_Script'; + font-style: normal; + font-weight: 400; + src: url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Script-Regular.woff2') format('woff2'), + url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Script-Regular.woff') format('woff'); +} + +@font-face { + font-family: 'KaTeX_Size1'; + font-style: normal; + font-weight: 400; + src: url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Size1-Regular.woff2') format('woff2'), + url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Size1-Regular.woff') format('woff'); +} + +@font-face { + font-family: 'KaTeX_Size2'; + font-style: normal; + font-weight: 400; + src: url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Size2-Regular.woff2') format('woff2'), + url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Size2-Regular.woff') format('woff'); +} + +@font-face { + font-family: 'KaTeX_Size3'; + font-style: normal; + font-weight: 400; + src: url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Size3-Regular.woff2') format('woff2'), + url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Size3-Regular.woff') format('woff'); +} + +@font-face { + font-family: 'KaTeX_Size4'; + font-style: normal; + font-weight: 400; + src: url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Size4-Regular.woff2') format('woff2'), + url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Size4-Regular.woff') format('woff'); +} + +@font-face { + font-family: 'KaTeX_Typewriter'; + font-style: normal; + font-weight: 400; + src: url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Typewriter-Regular.woff2') format('woff2'), + url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Typewriter-Regular.woff') format('woff'); +} + +/* Rest of KaTeX CSS styles */ +.katex { + font: normal 1.21em KaTeX_Main, Times, serif; + line-height: 1.2; + white-space: nowrap; + text-indent: 0; + text-rendering: auto; +} + +.katex * { + border-color: currentColor; +} + +.katex .katex-version::after { + content: "0.16.0"; +} + +.katex .katex-mathml { + position: absolute; + visibility: hidden; + height: 1px; + overflow: hidden; +} + +.katex .katex-html > .newline { + display: block; +} + +.katex .base { + position: relative; + white-space: nowrap; + width: min-content; +} + +.katex .strut { + display: inline-block; +} + +.katex .textbf { + font-weight: bold; +} + +.katex .textit { + font-style: italic; +} + +.katex .textrm { + font-family: KaTeX_Main; +} + +.katex .textsf { + font-family: KaTeX_SansSerif; +} + +.katex .texttt { + font-family: KaTeX_Typewriter; +} + +.katex .mathnormal { + font-family: KaTeX_Math; + font-style: italic; +} + +.katex .mathit { + font-family: KaTeX_Main; + font-style: italic; +} + +.katex .mathrm { + font-style: normal; +} + +.katex .mathbf { + font-family: KaTeX_Main; + font-weight: bold; +} + +.katex .boldsymbol { + font-family: KaTeX_Math; + font-weight: bold; + font-style: italic; +} + +.katex .amsrm { + font-family: KaTeX_AMS; +} + +.katex .mathbb, +.katex .textbb { + font-family: KaTeX_AMS; +} + +.katex .mathcal { + font-family: KaTeX_Caligraphic; +} + +.katex .mathfrak, +.katex .textfrak { + font-family: KaTeX_Fraktur; +} + +.katex .mathtt { + font-family: KaTeX_Typewriter; +} + +.katex .mathscr, +.katex .textscr { + font-family: KaTeX_Script; +} + +.katex .mathsf, +.katex .textsf { + font-family: KaTeX_SansSerif; +} + +.katex .mathboldsf, +.katex .textboldsf { + font-family: KaTeX_SansSerif; + font-weight: bold; +} + +.katex .mathitsf, +.katex .textitsf { + font-family: KaTeX_SansSerif; + font-style: italic; +} + +.katex .mainrm { + font-family: KaTeX_Main; + font-style: normal; +} + +.katex .vlist-t { + display: inline-table; + table-layout: fixed; + border-collapse: collapse; +} + +.katex .vlist-r { + display: table-row; +} + +.katex .vlist { + display: table-cell; + vertical-align: bottom; + position: relative; +} + +.katex .vlist > span { + display: block; + height: 0; + position: relative; +} + +.katex .vlist > span > span { + display: inline-block; +} + +.katex .vlist > span > .pstrut { + overflow: hidden; + width: 0; +} + +.katex .hlist { + display: inline-flex; + flex-direction: row; +} + +.katex .hlist > span { + flex: 0 0 auto; +} + +.katex .vcenter { + display: inline-block; + vertical-align: middle; +} + +.katex .alignleft { + text-align: left; +} + +.katex .aligncenter { + text-align: center; +} + +.katex .alignright { + text-align: right; +} + +.katex .gothfrak, +.katex .textgothfrak { + font-family: KaTeX_Fraktur; +} + +.katex .cmr { + font-family: KaTeX_Main; +} + +.katex .cmss { + font-family: KaTeX_SansSerif; +} + +.katex .cmtt { + font-family: KaTeX_Typewriter; +} + +.katex .katex-display { + display: block; + margin: 1em 0; + text-align: center; +} + +.katex .katex-display > .katex { + display: block; + white-space: nowrap; + max-width: 100%; + overflow-x: auto; + text-align: initial; +} + +.katex .katex-display.leqno > .katex { + text-align: left; +} + +.katex .katex-display.fleqn > .katex { + text-align: left; + padding-left: 2em; +} \ No newline at end of file diff --git a/Styles/markdown.css b/Styles/markdown.css new file mode 100644 index 0000000..ba5da8d --- /dev/null +++ b/Styles/markdown.css @@ -0,0 +1,153 @@ +/* Import the downloaded CSS files */ +@import './katex.min.css'; +@import './highlight-default.min.css'; + +/* Additional markdown styling for Obsidian plugin */ +.markdown-processor-content { + line-height: 1.6; + color: var(--text-normal); +} + +.markdown-processor-content h1, +.markdown-processor-content h2, +.markdown-processor-content h3, +.markdown-processor-content h4, +.markdown-processor-content h5, +.markdown-processor-content h6 { + margin: 1rem 0 0.5rem 0; + color: var(--text-normal); + font-weight: var(--font-weight-bold); +} + +.markdown-processor-content h1 { font-size: 1.5em; } +.markdown-processor-content h2 { font-size: 1.3em; } +.markdown-processor-content h3 { font-size: 1.1em; } + +.markdown-processor-content p { + margin: 0.5rem 0; +} + +.markdown-processor-content pre { + background-color: var(--background-primary-alt); + padding: 1rem; + border-radius: var(--radius-s); + overflow-x: auto; + margin: 0.5rem 0; + border: 1px solid var(--background-modifier-border); +} + +.markdown-processor-content code { + background-color: var(--background-primary-alt); + padding: 2px 4px; + border-radius: var(--radius-s); + font-family: var(--font-monospace); + font-size: 0.9em; +} + +.markdown-processor-content pre code { + background-color: transparent; + padding: 0; +} + +.markdown-processor-content blockquote { + border-left: 4px solid var(--background-modifier-border); + margin: 1rem 0; + padding-left: 1rem; + color: var(--text-muted); + font-style: italic; +} + +.markdown-processor-content ul, +.markdown-processor-content ol { + padding-left: 1.5rem; + margin: 0.5rem 0; +} + +.markdown-processor-content li { + margin: 0.25rem 0; +} + +.markdown-processor-content table { + border-collapse: collapse; + width: 100%; + margin: 1rem 0; + border: 1px solid var(--background-modifier-border); +} + +.markdown-processor-content th, +.markdown-processor-content td { + border: 1px solid var(--background-modifier-border); + padding: 8px 12px; + text-align: left; +} + +.markdown-processor-content th { + background-color: var(--background-primary-alt); + font-weight: var(--font-weight-bold); +} + +.markdown-processor-content a { + color: var(--text-accent); + text-decoration: none; +} + +.markdown-processor-content a:hover { + text-decoration: underline; +} + +/* Math content styling adjustments for Obsidian */ +.markdown-processor-content .katex { + font-size: 1.1em; +} + +.markdown-processor-content .katex-display { + margin: 1rem 0; + text-align: center; +} + +/* Task list styling */ +.markdown-processor-content input[type="checkbox"] { + margin-right: 0.5rem; +} + +/* Footnotes styling */ +.markdown-processor-content .footnotes { + margin-top: 2rem; + padding-top: 1rem; + border-top: 1px solid var(--background-modifier-border); + font-size: 0.9em; +} + +/* Override highlight.js colors to use Obsidian theme colors */ +.markdown-processor-content .hljs { + background: var(--background-primary-alt) !important; + color: var(--text-normal) !important; +} + +.markdown-processor-content .hljs-comment, +.markdown-processor-content .hljs-quote { + color: var(--text-muted) !important; +} + +.markdown-processor-content .hljs-keyword, +.markdown-processor-content .hljs-selector-tag, +.markdown-processor-content .hljs-literal { + color: var(--text-accent) !important; +} + +.markdown-processor-content .hljs-string, +.markdown-processor-content .hljs-doctag { + color: var(--color-green) !important; +} + +.markdown-processor-content .hljs-title, +.markdown-processor-content .hljs-section, +.markdown-processor-content .hljs-type { + color: var(--color-blue) !important; +} + +.markdown-processor-content .hljs-number, +.markdown-processor-content .hljs-variable, +.markdown-processor-content .hljs-template-variable { + color: var(--color-purple) !important; +} \ No newline at end of file diff --git a/Views/App.svelte b/Views/App.svelte deleted file mode 100644 index e69de29..0000000 diff --git a/Views/ChatHistory.svelte b/Views/ChatHistory.svelte deleted file mode 100644 index e69de29..0000000 diff --git a/Views/Input.svelte b/Views/Input.svelte deleted file mode 100644 index e69de29..0000000 diff --git a/Views/MainView.ts b/Views/MainView.ts index 19d298f..a6ad669 100644 --- a/Views/MainView.ts +++ b/Views/MainView.ts @@ -1,7 +1,6 @@ import { ItemView, WorkspaceLeaf } from 'obsidian'; - -import Input from '../Components/Input.svelte'; import { mount, unmount } from 'svelte'; +import ChatWindow from 'Components/ChatWindow.svelte'; export const VIEW_TYPE_MAIN = 'main-view'; @@ -10,7 +9,7 @@ export class MainView extends ItemView { super(leaf); } - input: ReturnType | undefined; + input: ReturnType | undefined; getViewType() { return VIEW_TYPE_MAIN; @@ -24,11 +23,9 @@ export class MainView extends ItemView { const container = this.contentEl; container.empty(); - this.input = mount(Input, { + this.input = mount(ChatWindow, { target: container, - props: { - input: "", - } + props: {} }); } diff --git a/Views/viewStore.ts b/Views/viewStore.ts deleted file mode 100644 index e69de29..0000000 diff --git a/esbuild.config.mjs b/esbuild.config.mjs index c17b6f5..b225c1f 100644 --- a/esbuild.config.mjs +++ b/esbuild.config.mjs @@ -1,6 +1,8 @@ import esbuild from "esbuild"; import process from "process"; import builtins from "builtin-modules"; +import { copyFileSync, mkdirSync, existsSync, readdirSync, statSync } from "fs"; +import { join } from "path"; import esbuildSvelte from 'esbuild-svelte'; import { sveltePreprocess } from 'svelte-preprocess'; @@ -14,6 +16,27 @@ if you want to view the source, please visit the github repository of this plugi const prod = (process.argv[2] === "production"); +// Function to copy directory recursively +function copyDir(src, dest) { + if (!existsSync(dest)) { + mkdirSync(dest, { recursive: true }); + } + + const files = readdirSync(src); + + for (const file of files) { + const srcPath = join(src, file); + const destPath = join(dest, file); + + if (statSync(srcPath).isDirectory()) { + copyDir(srcPath, destPath); + } else { + copyFileSync(srcPath, destPath); + console.log(`📁 Copied: ${srcPath} → ${destPath}`); + } + } +} + const context = await esbuild.context({ plugins: [ esbuildSvelte({ @@ -52,7 +75,24 @@ const context = await esbuild.context({ if (prod) { await context.rebuild(); + + // Copy styles after production build + if (existsSync("Styles")) { + copyDir("Styles", "styles"); + console.log("✅ Copied Styles directory to styles/"); + } else { + console.log("⚠️ Styles directory not found, skipping copy"); + } + process.exit(0); } else { + // Copy styles for development + if (existsSync("Styles")) { + copyDir("Styles", "styles"); + console.log("✅ Copied Styles directory to styles/"); + } else { + console.log("⚠️ Styles directory not found, skipping copy"); + } + await context.watch(); -} +} \ No newline at end of file diff --git a/main.css b/main.css new file mode 100644 index 0000000..f9a6edd --- /dev/null +++ b/main.css @@ -0,0 +1,510 @@ +/* styles/katex.min.css */ +@font-face { + font-family: "KaTeX_AMS"; + font-style: normal; + font-weight: 400; + src: url(https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_AMS-Regular.woff2) format("woff2"), url(https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_AMS-Regular.woff) format("woff"); +} +@font-face { + font-family: "KaTeX_Caligraphic"; + font-style: normal; + font-weight: 700; + src: url(https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Caligraphic-Bold.woff2) format("woff2"), url(https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Caligraphic-Bold.woff) format("woff"); +} +@font-face { + font-family: "KaTeX_Caligraphic"; + font-style: normal; + font-weight: 400; + src: url(https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Caligraphic-Regular.woff2) format("woff2"), url(https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Caligraphic-Regular.woff) format("woff"); +} +@font-face { + font-family: "KaTeX_Fraktur"; + font-style: normal; + font-weight: 700; + src: url(https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Fraktur-Bold.woff2) format("woff2"), url(https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Fraktur-Bold.woff) format("woff"); +} +@font-face { + font-family: "KaTeX_Fraktur"; + font-style: normal; + font-weight: 400; + src: url(https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Fraktur-Regular.woff2) format("woff2"), url(https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Fraktur-Regular.woff) format("woff"); +} +@font-face { + font-family: "KaTeX_Main"; + font-style: normal; + font-weight: 700; + src: url(https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Main-Bold.woff2) format("woff2"), url(https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Main-Bold.woff) format("woff"); +} +@font-face { + font-family: "KaTeX_Main"; + font-style: italic; + font-weight: 400; + src: url(https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Main-Italic.woff2) format("woff2"), url(https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Main-Italic.woff) format("woff"); +} +@font-face { + font-family: "KaTeX_Main"; + font-style: normal; + font-weight: 400; + src: url(https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Main-Regular.woff2) format("woff2"), url(https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Main-Regular.woff) format("woff"); +} +@font-face { + font-family: "KaTeX_Math"; + font-style: italic; + font-weight: 400; + src: url(https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Math-Italic.woff2) format("woff2"), url(https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Math-Italic.woff) format("woff"); +} +@font-face { + font-family: "KaTeX_SansSerif"; + font-style: normal; + font-weight: 700; + src: url(https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_SansSerif-Bold.woff2) format("woff2"), url(https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_SansSerif-Bold.woff) format("woff"); +} +@font-face { + font-family: "KaTeX_SansSerif"; + font-style: italic; + font-weight: 400; + src: url(https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_SansSerif-Italic.woff2) format("woff2"), url(https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_SansSerif-Italic.woff) format("woff"); +} +@font-face { + font-family: "KaTeX_SansSerif"; + font-style: normal; + font-weight: 400; + src: url(https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_SansSerif-Regular.woff2) format("woff2"), url(https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_SansSerif-Regular.woff) format("woff"); +} +@font-face { + font-family: "KaTeX_Script"; + font-style: normal; + font-weight: 400; + src: url(https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Script-Regular.woff2) format("woff2"), url(https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Script-Regular.woff) format("woff"); +} +@font-face { + font-family: "KaTeX_Size1"; + font-style: normal; + font-weight: 400; + src: url(https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Size1-Regular.woff2) format("woff2"), url(https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Size1-Regular.woff) format("woff"); +} +@font-face { + font-family: "KaTeX_Size2"; + font-style: normal; + font-weight: 400; + src: url(https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Size2-Regular.woff2) format("woff2"), url(https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Size2-Regular.woff) format("woff"); +} +@font-face { + font-family: "KaTeX_Size3"; + font-style: normal; + font-weight: 400; + src: url(https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Size3-Regular.woff2) format("woff2"), url(https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Size3-Regular.woff) format("woff"); +} +@font-face { + font-family: "KaTeX_Size4"; + font-style: normal; + font-weight: 400; + src: url(https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Size4-Regular.woff2) format("woff2"), url(https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Size4-Regular.woff) format("woff"); +} +@font-face { + font-family: "KaTeX_Typewriter"; + font-style: normal; + font-weight: 400; + src: url(https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Typewriter-Regular.woff2) format("woff2"), url(https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Typewriter-Regular.woff) format("woff"); +} +.katex { + font: + normal 1.21em KaTeX_Main, + Times, + serif; + line-height: 1.2; + white-space: nowrap; + text-indent: 0; + text-rendering: auto; +} +.katex * { + border-color: currentColor; +} +.katex .katex-version::after { + content: "0.16.0"; +} +.katex .katex-mathml { + position: absolute; + visibility: hidden; + height: 1px; + overflow: hidden; +} +.katex .katex-html > .newline { + display: block; +} +.katex .base { + position: relative; + white-space: nowrap; + width: min-content; +} +.katex .strut { + display: inline-block; +} +.katex .textbf { + font-weight: bold; +} +.katex .textit { + font-style: italic; +} +.katex .textrm { + font-family: KaTeX_Main; +} +.katex .textsf { + font-family: KaTeX_SansSerif; +} +.katex .texttt { + font-family: KaTeX_Typewriter; +} +.katex .mathnormal { + font-family: KaTeX_Math; + font-style: italic; +} +.katex .mathit { + font-family: KaTeX_Main; + font-style: italic; +} +.katex .mathrm { + font-style: normal; +} +.katex .mathbf { + font-family: KaTeX_Main; + font-weight: bold; +} +.katex .boldsymbol { + font-family: KaTeX_Math; + font-weight: bold; + font-style: italic; +} +.katex .amsrm { + font-family: KaTeX_AMS; +} +.katex .mathbb, +.katex .textbb { + font-family: KaTeX_AMS; +} +.katex .mathcal { + font-family: KaTeX_Caligraphic; +} +.katex .mathfrak, +.katex .textfrak { + font-family: KaTeX_Fraktur; +} +.katex .mathtt { + font-family: KaTeX_Typewriter; +} +.katex .mathscr, +.katex .textscr { + font-family: KaTeX_Script; +} +.katex .mathsf, +.katex .textsf { + font-family: KaTeX_SansSerif; +} +.katex .mathboldsf, +.katex .textboldsf { + font-family: KaTeX_SansSerif; + font-weight: bold; +} +.katex .mathitsf, +.katex .textitsf { + font-family: KaTeX_SansSerif; + font-style: italic; +} +.katex .mainrm { + font-family: KaTeX_Main; + font-style: normal; +} +.katex .vlist-t { + display: inline-table; + table-layout: fixed; + border-collapse: collapse; +} +.katex .vlist-r { + display: table-row; +} +.katex .vlist { + display: table-cell; + vertical-align: bottom; + position: relative; +} +.katex .vlist > span { + display: block; + height: 0; + position: relative; +} +.katex .vlist > span > span { + display: inline-block; +} +.katex .vlist > span > .pstrut { + overflow: hidden; + width: 0; +} +.katex .hlist { + display: inline-flex; + flex-direction: row; +} +.katex .hlist > span { + flex: 0 0 auto; +} +.katex .vcenter { + display: inline-block; + vertical-align: middle; +} +.katex .alignleft { + text-align: left; +} +.katex .aligncenter { + text-align: center; +} +.katex .alignright { + text-align: right; +} +.katex .gothfrak, +.katex .textgothfrak { + font-family: KaTeX_Fraktur; +} +.katex .cmr { + font-family: KaTeX_Main; +} +.katex .cmss { + font-family: KaTeX_SansSerif; +} +.katex .cmtt { + font-family: KaTeX_Typewriter; +} +.katex .katex-display { + display: block; + margin: 1em 0; + text-align: center; +} +.katex .katex-display > .katex { + display: block; + white-space: nowrap; + max-width: 100%; + overflow-x: auto; + text-align: initial; +} +.katex .katex-display.leqno > .katex { + text-align: left; +} +.katex .katex-display.fleqn > .katex { + text-align: left; + padding-left: 2em; +} + +/* styles/highlight-default.min.css */ +pre code.hljs { + display: block; + overflow-x: auto; + padding: 1em; +} +code.hljs { + padding: 3px 5px; +} +.hljs { + background: #f3f3f3; + color: #444; +} +.hljs-comment { + color: #697070; +} +.hljs-punctuation, +.hljs-tag { + color: #444a; +} +.hljs-tag .hljs-attr, +.hljs-tag .hljs-name { + color: #444; +} +.hljs-attribute, +.hljs-doctag, +.hljs-keyword, +.hljs-meta .hljs-keyword, +.hljs-name, +.hljs-selector-tag { + font-weight: 700; +} +.hljs-deletion, +.hljs-number, +.hljs-quote, +.hljs-selector-class, +.hljs-selector-id, +.hljs-string, +.hljs-template-tag, +.hljs-type { + color: #800; +} +.hljs-section, +.hljs-title { + color: #800; + font-weight: 700; +} +.hljs-link, +.hljs-operator, +.hljs-regexp, +.hljs-selector-attr, +.hljs-selector-pseudo, +.hljs-symbol, +.hljs-template-variable, +.hljs-variable { + color: #ab5656; +} +.hljs-literal { + color: #695; +} +.hljs-addition, +.hljs-built_in, +.hljs-bullet, +.hljs-code { + color: #397300; +} +.hljs-meta { + color: #1f7199; +} +.hljs-meta .hljs-string { + color: #38a; +} +.hljs-emphasis { + font-style: italic; +} +.hljs-strong { + font-weight: 700; +} + +/* styles/markdown.css */ +.markdown-processor-content { + line-height: 1.6; + color: var(--text-normal); +} +.markdown-processor-content h1, +.markdown-processor-content h2, +.markdown-processor-content h3, +.markdown-processor-content h4, +.markdown-processor-content h5, +.markdown-processor-content h6 { + margin: 1rem 0 0.5rem 0; + color: var(--text-normal); + font-weight: var(--font-weight-bold); +} +.markdown-processor-content h1 { + font-size: 1.5em; +} +.markdown-processor-content h2 { + font-size: 1.3em; +} +.markdown-processor-content h3 { + font-size: 1.1em; +} +.markdown-processor-content p { + margin: 0.5rem 0; +} +.markdown-processor-content pre { + background-color: var(--background-primary-alt); + padding: 1rem; + border-radius: var(--radius-s); + overflow-x: auto; + margin: 0.5rem 0; + border: 1px solid var(--background-modifier-border); +} +.markdown-processor-content code { + background-color: var(--background-primary-alt); + padding: 2px 4px; + border-radius: var(--radius-s); + font-family: var(--font-monospace); + font-size: 0.9em; +} +.markdown-processor-content pre code { + background-color: transparent; + padding: 0; +} +.markdown-processor-content blockquote { + border-left: 4px solid var(--background-modifier-border); + margin: 1rem 0; + padding-left: 1rem; + color: var(--text-muted); + font-style: italic; +} +.markdown-processor-content ul, +.markdown-processor-content ol { + padding-left: 1.5rem; + margin: 0.5rem 0; +} +.markdown-processor-content li { + margin: 0.25rem 0; +} +.markdown-processor-content table { + border-collapse: collapse; + width: 100%; + margin: 1rem 0; + border: 1px solid var(--background-modifier-border); +} +.markdown-processor-content th, +.markdown-processor-content td { + border: 1px solid var(--background-modifier-border); + padding: 8px 12px; + text-align: left; +} +.markdown-processor-content th { + background-color: var(--background-primary-alt); + font-weight: var(--font-weight-bold); +} +.markdown-processor-content a { + color: var(--text-accent); + text-decoration: none; +} +.markdown-processor-content a:hover { + text-decoration: underline; +} +.markdown-processor-content .katex { + font-size: 1.1em; +} +.markdown-processor-content .katex-display { + margin: 1rem 0; + text-align: center; +} +.markdown-processor-content input[type=checkbox] { + margin-right: 0.5rem; +} +.markdown-processor-content .footnotes { + margin-top: 2rem; + padding-top: 1rem; + border-top: 1px solid var(--background-modifier-border); + font-size: 0.9em; +} +.markdown-processor-content .hljs { + background: var(--background-primary-alt) !important; + color: var(--text-normal) !important; +} +.markdown-processor-content .hljs-comment, +.markdown-processor-content .hljs-quote { + color: var(--text-muted) !important; +} +.markdown-processor-content .hljs-keyword, +.markdown-processor-content .hljs-selector-tag, +.markdown-processor-content .hljs-literal { + color: var(--text-accent) !important; +} +.markdown-processor-content .hljs-string, +.markdown-processor-content .hljs-doctag { + color: var(--color-green) !important; +} +.markdown-processor-content .hljs-title, +.markdown-processor-content .hljs-section, +.markdown-processor-content .hljs-type { + color: var(--color-blue) !important; +} +.markdown-processor-content .hljs-number, +.markdown-processor-content .hljs-variable, +.markdown-processor-content .hljs-template-variable { + color: var(--color-purple) !important; +} +/*! + Theme: Default + Description: Original highlight.js style + Author: (c) Ivan Sagalaev + Maintainer: @highlightjs/core-team + Website: https://highlightjs.org/ + License: see project LICENSE + Touched: 2021 +*/ +/*# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3R5bGVzL2thdGV4Lm1pbi5jc3MiLCAic3R5bGVzL2hpZ2hsaWdodC1kZWZhdWx0Lm1pbi5jc3MiLCAic3R5bGVzL21hcmtkb3duLmNzcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyogS2FUZVggQ1NTIHdpdGggQ0ROIGZvbnQgVVJMcyAqL1xuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiAnS2FUZVhfQU1TJztcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBmb250LXdlaWdodDogNDAwO1xuICBzcmM6IHVybCgnaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9rYXRleEAwLjE2LjAvZGlzdC9mb250cy9LYVRlWF9BTVMtUmVndWxhci53b2ZmMicpIGZvcm1hdCgnd29mZjInKSxcbiAgICAgICB1cmwoJ2h0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0va2F0ZXhAMC4xNi4wL2Rpc3QvZm9udHMvS2FUZVhfQU1TLVJlZ3VsYXIud29mZicpIGZvcm1hdCgnd29mZicpO1xufVxuXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6ICdLYVRlWF9DYWxpZ3JhcGhpYyc7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgc3JjOiB1cmwoJ2h0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0va2F0ZXhAMC4xNi4wL2Rpc3QvZm9udHMvS2FUZVhfQ2FsaWdyYXBoaWMtQm9sZC53b2ZmMicpIGZvcm1hdCgnd29mZjInKSxcbiAgICAgICB1cmwoJ2h0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0va2F0ZXhAMC4xNi4wL2Rpc3QvZm9udHMvS2FUZVhfQ2FsaWdyYXBoaWMtQm9sZC53b2ZmJykgZm9ybWF0KCd3b2ZmJyk7XG59XG5cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogJ0thVGVYX0NhbGlncmFwaGljJztcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBmb250LXdlaWdodDogNDAwO1xuICBzcmM6IHVybCgnaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9rYXRleEAwLjE2LjAvZGlzdC9mb250cy9LYVRlWF9DYWxpZ3JhcGhpYy1SZWd1bGFyLndvZmYyJykgZm9ybWF0KCd3b2ZmMicpLFxuICAgICAgIHVybCgnaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9rYXRleEAwLjE2LjAvZGlzdC9mb250cy9LYVRlWF9DYWxpZ3JhcGhpYy1SZWd1bGFyLndvZmYnKSBmb3JtYXQoJ3dvZmYnKTtcbn1cblxuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiAnS2FUZVhfRnJha3R1cic7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgc3JjOiB1cmwoJ2h0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0va2F0ZXhAMC4xNi4wL2Rpc3QvZm9udHMvS2FUZVhfRnJha3R1ci1Cb2xkLndvZmYyJykgZm9ybWF0KCd3b2ZmMicpLFxuICAgICAgIHVybCgnaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9rYXRleEAwLjE2LjAvZGlzdC9mb250cy9LYVRlWF9GcmFrdHVyLUJvbGQud29mZicpIGZvcm1hdCgnd29mZicpO1xufVxuXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6ICdLYVRlWF9GcmFrdHVyJztcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBmb250LXdlaWdodDogNDAwO1xuICBzcmM6IHVybCgnaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9rYXRleEAwLjE2LjAvZGlzdC9mb250cy9LYVRlWF9GcmFrdHVyLVJlZ3VsYXIud29mZjInKSBmb3JtYXQoJ3dvZmYyJyksXG4gICAgICAgdXJsKCdodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2thdGV4QDAuMTYuMC9kaXN0L2ZvbnRzL0thVGVYX0ZyYWt0dXItUmVndWxhci53b2ZmJykgZm9ybWF0KCd3b2ZmJyk7XG59XG5cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogJ0thVGVYX01haW4nO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIHNyYzogdXJsKCdodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2thdGV4QDAuMTYuMC9kaXN0L2ZvbnRzL0thVGVYX01haW4tQm9sZC53b2ZmMicpIGZvcm1hdCgnd29mZjInKSxcbiAgICAgICB1cmwoJ2h0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0va2F0ZXhAMC4xNi4wL2Rpc3QvZm9udHMvS2FUZVhfTWFpbi1Cb2xkLndvZmYnKSBmb3JtYXQoJ3dvZmYnKTtcbn1cblxuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiAnS2FUZVhfTWFpbic7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgc3JjOiB1cmwoJ2h0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0va2F0ZXhAMC4xNi4wL2Rpc3QvZm9udHMvS2FUZVhfTWFpbi1JdGFsaWMud29mZjInKSBmb3JtYXQoJ3dvZmYyJyksXG4gICAgICAgdXJsKCdodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2thdGV4QDAuMTYuMC9kaXN0L2ZvbnRzL0thVGVYX01haW4tSXRhbGljLndvZmYnKSBmb3JtYXQoJ3dvZmYnKTtcbn1cblxuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiAnS2FUZVhfTWFpbic7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgc3JjOiB1cmwoJ2h0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0va2F0ZXhAMC4xNi4wL2Rpc3QvZm9udHMvS2FUZVhfTWFpbi1SZWd1bGFyLndvZmYyJykgZm9ybWF0KCd3b2ZmMicpLFxuICAgICAgIHVybCgnaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9rYXRleEAwLjE2LjAvZGlzdC9mb250cy9LYVRlWF9NYWluLVJlZ3VsYXIud29mZicpIGZvcm1hdCgnd29mZicpO1xufVxuXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6ICdLYVRlWF9NYXRoJztcbiAgZm9udC1zdHlsZTogaXRhbGljO1xuICBmb250LXdlaWdodDogNDAwO1xuICBzcmM6IHVybCgnaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9rYXRleEAwLjE2LjAvZGlzdC9mb250cy9LYVRlWF9NYXRoLUl0YWxpYy53b2ZmMicpIGZvcm1hdCgnd29mZjInKSxcbiAgICAgICB1cmwoJ2h0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0va2F0ZXhAMC4xNi4wL2Rpc3QvZm9udHMvS2FUZVhfTWF0aC1JdGFsaWMud29mZicpIGZvcm1hdCgnd29mZicpO1xufVxuXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6ICdLYVRlWF9TYW5zU2VyaWYnO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIHNyYzogdXJsKCdodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2thdGV4QDAuMTYuMC9kaXN0L2ZvbnRzL0thVGVYX1NhbnNTZXJpZi1Cb2xkLndvZmYyJykgZm9ybWF0KCd3b2ZmMicpLFxuICAgICAgIHVybCgnaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9rYXRleEAwLjE2LjAvZGlzdC9mb250cy9LYVRlWF9TYW5zU2VyaWYtQm9sZC53b2ZmJykgZm9ybWF0KCd3b2ZmJyk7XG59XG5cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogJ0thVGVYX1NhbnNTZXJpZic7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgc3JjOiB1cmwoJ2h0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0va2F0ZXhAMC4xNi4wL2Rpc3QvZm9udHMvS2FUZVhfU2Fuc1NlcmlmLUl0YWxpYy53b2ZmMicpIGZvcm1hdCgnd29mZjInKSxcbiAgICAgICB1cmwoJ2h0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0va2F0ZXhAMC4xNi4wL2Rpc3QvZm9udHMvS2FUZVhfU2Fuc1NlcmlmLUl0YWxpYy53b2ZmJykgZm9ybWF0KCd3b2ZmJyk7XG59XG5cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogJ0thVGVYX1NhbnNTZXJpZic7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgc3JjOiB1cmwoJ2h0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0va2F0ZXhAMC4xNi4wL2Rpc3QvZm9udHMvS2FUZVhfU2Fuc1NlcmlmLVJlZ3VsYXIud29mZjInKSBmb3JtYXQoJ3dvZmYyJyksXG4gICAgICAgdXJsKCdodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2thdGV4QDAuMTYuMC9kaXN0L2ZvbnRzL0thVGVYX1NhbnNTZXJpZi1SZWd1bGFyLndvZmYnKSBmb3JtYXQoJ3dvZmYnKTtcbn1cblxuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiAnS2FUZVhfU2NyaXB0JztcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBmb250LXdlaWdodDogNDAwO1xuICBzcmM6IHVybCgnaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9rYXRleEAwLjE2LjAvZGlzdC9mb250cy9LYVRlWF9TY3JpcHQtUmVndWxhci53b2ZmMicpIGZvcm1hdCgnd29mZjInKSxcbiAgICAgICB1cmwoJ2h0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0va2F0ZXhAMC4xNi4wL2Rpc3QvZm9udHMvS2FUZVhfU2NyaXB0LVJlZ3VsYXIud29mZicpIGZvcm1hdCgnd29mZicpO1xufVxuXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6ICdLYVRlWF9TaXplMSc7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgc3JjOiB1cmwoJ2h0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0va2F0ZXhAMC4xNi4wL2Rpc3QvZm9udHMvS2FUZVhfU2l6ZTEtUmVndWxhci53b2ZmMicpIGZvcm1hdCgnd29mZjInKSxcbiAgICAgICB1cmwoJ2h0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0va2F0ZXhAMC4xNi4wL2Rpc3QvZm9udHMvS2FUZVhfU2l6ZTEtUmVndWxhci53b2ZmJykgZm9ybWF0KCd3b2ZmJyk7XG59XG5cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogJ0thVGVYX1NpemUyJztcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBmb250LXdlaWdodDogNDAwO1xuICBzcmM6IHVybCgnaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9rYXRleEAwLjE2LjAvZGlzdC9mb250cy9LYVRlWF9TaXplMi1SZWd1bGFyLndvZmYyJykgZm9ybWF0KCd3b2ZmMicpLFxuICAgICAgIHVybCgnaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9rYXRleEAwLjE2LjAvZGlzdC9mb250cy9LYVRlWF9TaXplMi1SZWd1bGFyLndvZmYnKSBmb3JtYXQoJ3dvZmYnKTtcbn1cblxuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiAnS2FUZVhfU2l6ZTMnO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIHNyYzogdXJsKCdodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2thdGV4QDAuMTYuMC9kaXN0L2ZvbnRzL0thVGVYX1NpemUzLVJlZ3VsYXIud29mZjInKSBmb3JtYXQoJ3dvZmYyJyksXG4gICAgICAgdXJsKCdodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2thdGV4QDAuMTYuMC9kaXN0L2ZvbnRzL0thVGVYX1NpemUzLVJlZ3VsYXIud29mZicpIGZvcm1hdCgnd29mZicpO1xufVxuXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6ICdLYVRlWF9TaXplNCc7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgc3JjOiB1cmwoJ2h0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0va2F0ZXhAMC4xNi4wL2Rpc3QvZm9udHMvS2FUZVhfU2l6ZTQtUmVndWxhci53b2ZmMicpIGZvcm1hdCgnd29mZjInKSxcbiAgICAgICB1cmwoJ2h0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0va2F0ZXhAMC4xNi4wL2Rpc3QvZm9udHMvS2FUZVhfU2l6ZTQtUmVndWxhci53b2ZmJykgZm9ybWF0KCd3b2ZmJyk7XG59XG5cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogJ0thVGVYX1R5cGV3cml0ZXInO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIHNyYzogdXJsKCdodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2thdGV4QDAuMTYuMC9kaXN0L2ZvbnRzL0thVGVYX1R5cGV3cml0ZXItUmVndWxhci53b2ZmMicpIGZvcm1hdCgnd29mZjInKSxcbiAgICAgICB1cmwoJ2h0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0va2F0ZXhAMC4xNi4wL2Rpc3QvZm9udHMvS2FUZVhfVHlwZXdyaXRlci1SZWd1bGFyLndvZmYnKSBmb3JtYXQoJ3dvZmYnKTtcbn1cblxuLyogUmVzdCBvZiBLYVRlWCBDU1Mgc3R5bGVzICovXG4ua2F0ZXgge1xuICBmb250OiBub3JtYWwgMS4yMWVtIEthVGVYX01haW4sIFRpbWVzLCBzZXJpZjtcbiAgbGluZS1oZWlnaHQ6IDEuMjtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgdGV4dC1pbmRlbnQ6IDA7XG4gIHRleHQtcmVuZGVyaW5nOiBhdXRvO1xufVxuXG4ua2F0ZXggKiB7XG4gIGJvcmRlci1jb2xvcjogY3VycmVudENvbG9yO1xufVxuXG4ua2F0ZXggLmthdGV4LXZlcnNpb246OmFmdGVyIHtcbiAgY29udGVudDogXCIwLjE2LjBcIjtcbn1cblxuLmthdGV4IC5rYXRleC1tYXRobWwge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgaGVpZ2h0OiAxcHg7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5rYXRleCAua2F0ZXgtaHRtbCA+IC5uZXdsaW5lIHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5cbi5rYXRleCAuYmFzZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgd2lkdGg6IG1pbi1jb250ZW50O1xufVxuXG4ua2F0ZXggLnN0cnV0IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuXG4ua2F0ZXggLnRleHRiZiB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuXG4ua2F0ZXggLnRleHRpdCB7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbn1cblxuLmthdGV4IC50ZXh0cm0ge1xuICBmb250LWZhbWlseTogS2FUZVhfTWFpbjtcbn1cblxuLmthdGV4IC50ZXh0c2Yge1xuICBmb250LWZhbWlseTogS2FUZVhfU2Fuc1NlcmlmO1xufVxuXG4ua2F0ZXggLnRleHR0dCB7XG4gIGZvbnQtZmFtaWx5OiBLYVRlWF9UeXBld3JpdGVyO1xufVxuXG4ua2F0ZXggLm1hdGhub3JtYWwge1xuICBmb250LWZhbWlseTogS2FUZVhfTWF0aDtcbiAgZm9udC1zdHlsZTogaXRhbGljO1xufVxuXG4ua2F0ZXggLm1hdGhpdCB7XG4gIGZvbnQtZmFtaWx5OiBLYVRlWF9NYWluO1xuICBmb250LXN0eWxlOiBpdGFsaWM7XG59XG5cbi5rYXRleCAubWF0aHJtIHtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xufVxuXG4ua2F0ZXggLm1hdGhiZiB7XG4gIGZvbnQtZmFtaWx5OiBLYVRlWF9NYWluO1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cblxuLmthdGV4IC5ib2xkc3ltYm9sIHtcbiAgZm9udC1mYW1pbHk6IEthVGVYX01hdGg7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBmb250LXN0eWxlOiBpdGFsaWM7XG59XG5cbi5rYXRleCAuYW1zcm0ge1xuICBmb250LWZhbWlseTogS2FUZVhfQU1TO1xufVxuXG4ua2F0ZXggLm1hdGhiYixcbi5rYXRleCAudGV4dGJiIHtcbiAgZm9udC1mYW1pbHk6IEthVGVYX0FNUztcbn1cblxuLmthdGV4IC5tYXRoY2FsIHtcbiAgZm9udC1mYW1pbHk6IEthVGVYX0NhbGlncmFwaGljO1xufVxuXG4ua2F0ZXggLm1hdGhmcmFrLFxuLmthdGV4IC50ZXh0ZnJhayB7XG4gIGZvbnQtZmFtaWx5OiBLYVRlWF9GcmFrdHVyO1xufVxuXG4ua2F0ZXggLm1hdGh0dCB7XG4gIGZvbnQtZmFtaWx5OiBLYVRlWF9UeXBld3JpdGVyO1xufVxuXG4ua2F0ZXggLm1hdGhzY3IsXG4ua2F0ZXggLnRleHRzY3Ige1xuICBmb250LWZhbWlseTogS2FUZVhfU2NyaXB0O1xufVxuXG4ua2F0ZXggLm1hdGhzZixcbi5rYXRleCAudGV4dHNmIHtcbiAgZm9udC1mYW1pbHk6IEthVGVYX1NhbnNTZXJpZjtcbn1cblxuLmthdGV4IC5tYXRoYm9sZHNmLFxuLmthdGV4IC50ZXh0Ym9sZHNmIHtcbiAgZm9udC1mYW1pbHk6IEthVGVYX1NhbnNTZXJpZjtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5cbi5rYXRleCAubWF0aGl0c2YsXG4ua2F0ZXggLnRleHRpdHNmIHtcbiAgZm9udC1mYW1pbHk6IEthVGVYX1NhbnNTZXJpZjtcbiAgZm9udC1zdHlsZTogaXRhbGljO1xufVxuXG4ua2F0ZXggLm1haW5ybSB7XG4gIGZvbnQtZmFtaWx5OiBLYVRlWF9NYWluO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG59XG5cbi5rYXRleCAudmxpc3QtdCB7XG4gIGRpc3BsYXk6IGlubGluZS10YWJsZTtcbiAgdGFibGUtbGF5b3V0OiBmaXhlZDtcbiAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcbn1cblxuLmthdGV4IC52bGlzdC1yIHtcbiAgZGlzcGxheTogdGFibGUtcm93O1xufVxuXG4ua2F0ZXggLnZsaXN0IHtcbiAgZGlzcGxheTogdGFibGUtY2VsbDtcbiAgdmVydGljYWwtYWxpZ246IGJvdHRvbTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4ua2F0ZXggLnZsaXN0ID4gc3BhbiB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBoZWlnaHQ6IDA7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLmthdGV4IC52bGlzdCA+IHNwYW4gPiBzcGFuIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuXG4ua2F0ZXggLnZsaXN0ID4gc3BhbiA+IC5wc3RydXQge1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB3aWR0aDogMDtcbn1cblxuLmthdGV4IC5obGlzdCB7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xufVxuXG4ua2F0ZXggLmhsaXN0ID4gc3BhbiB7XG4gIGZsZXg6IDAgMCBhdXRvO1xufVxuXG4ua2F0ZXggLnZjZW50ZXIge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG5cbi5rYXRleCAuYWxpZ25sZWZ0IHtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cblxuLmthdGV4IC5hbGlnbmNlbnRlciB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLmthdGV4IC5hbGlnbnJpZ2h0IHtcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XG59XG5cbi5rYXRleCAuZ290aGZyYWssXG4ua2F0ZXggLnRleHRnb3RoZnJhayB7XG4gIGZvbnQtZmFtaWx5OiBLYVRlWF9GcmFrdHVyO1xufVxuXG4ua2F0ZXggLmNtciB7XG4gIGZvbnQtZmFtaWx5OiBLYVRlWF9NYWluO1xufVxuXG4ua2F0ZXggLmNtc3Mge1xuICBmb250LWZhbWlseTogS2FUZVhfU2Fuc1NlcmlmO1xufVxuXG4ua2F0ZXggLmNtdHQge1xuICBmb250LWZhbWlseTogS2FUZVhfVHlwZXdyaXRlcjtcbn1cblxuLmthdGV4IC5rYXRleC1kaXNwbGF5IHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbjogMWVtIDA7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLmthdGV4IC5rYXRleC1kaXNwbGF5ID4gLmthdGV4IHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgb3ZlcmZsb3cteDogYXV0bztcbiAgdGV4dC1hbGlnbjogaW5pdGlhbDtcbn1cblxuLmthdGV4IC5rYXRleC1kaXNwbGF5LmxlcW5vID4gLmthdGV4IHtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cblxuLmthdGV4IC5rYXRleC1kaXNwbGF5LmZsZXFuID4gLmthdGV4IHtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgcGFkZGluZy1sZWZ0OiAyZW07XG59IiwgIi8qIVxuICBUaGVtZTogRGVmYXVsdFxuICBEZXNjcmlwdGlvbjogT3JpZ2luYWwgaGlnaGxpZ2h0LmpzIHN0eWxlXG4gIEF1dGhvcjogKGMpIEl2YW4gU2FnYWxhZXYgPG1hbmlhY0Bzb2Z0d2FyZW1hbmlhY3Mub3JnPlxuICBNYWludGFpbmVyOiBAaGlnaGxpZ2h0anMvY29yZS10ZWFtXG4gIFdlYnNpdGU6IGh0dHBzOi8vaGlnaGxpZ2h0anMub3JnL1xuICBMaWNlbnNlOiBzZWUgcHJvamVjdCBMSUNFTlNFXG4gIFRvdWNoZWQ6IDIwMjFcbiovcHJlIGNvZGUuaGxqc3tkaXNwbGF5OmJsb2NrO292ZXJmbG93LXg6YXV0bztwYWRkaW5nOjFlbX1jb2RlLmhsanN7cGFkZGluZzozcHggNXB4fS5obGpze2JhY2tncm91bmQ6I2YzZjNmMztjb2xvcjojNDQ0fS5obGpzLWNvbW1lbnR7Y29sb3I6IzY5NzA3MH0uaGxqcy1wdW5jdHVhdGlvbiwuaGxqcy10YWd7Y29sb3I6IzQ0NGF9LmhsanMtdGFnIC5obGpzLWF0dHIsLmhsanMtdGFnIC5obGpzLW5hbWV7Y29sb3I6IzQ0NH0uaGxqcy1hdHRyaWJ1dGUsLmhsanMtZG9jdGFnLC5obGpzLWtleXdvcmQsLmhsanMtbWV0YSAuaGxqcy1rZXl3b3JkLC5obGpzLW5hbWUsLmhsanMtc2VsZWN0b3ItdGFne2ZvbnQtd2VpZ2h0OjcwMH0uaGxqcy1kZWxldGlvbiwuaGxqcy1udW1iZXIsLmhsanMtcXVvdGUsLmhsanMtc2VsZWN0b3ItY2xhc3MsLmhsanMtc2VsZWN0b3ItaWQsLmhsanMtc3RyaW5nLC5obGpzLXRlbXBsYXRlLXRhZywuaGxqcy10eXBle2NvbG9yOiM4MDB9LmhsanMtc2VjdGlvbiwuaGxqcy10aXRsZXtjb2xvcjojODAwO2ZvbnQtd2VpZ2h0OjcwMH0uaGxqcy1saW5rLC5obGpzLW9wZXJhdG9yLC5obGpzLXJlZ2V4cCwuaGxqcy1zZWxlY3Rvci1hdHRyLC5obGpzLXNlbGVjdG9yLXBzZXVkbywuaGxqcy1zeW1ib2wsLmhsanMtdGVtcGxhdGUtdmFyaWFibGUsLmhsanMtdmFyaWFibGV7Y29sb3I6I2FiNTY1Nn0uaGxqcy1saXRlcmFse2NvbG9yOiM2OTV9LmhsanMtYWRkaXRpb24sLmhsanMtYnVpbHRfaW4sLmhsanMtYnVsbGV0LC5obGpzLWNvZGV7Y29sb3I6IzM5NzMwMH0uaGxqcy1tZXRhe2NvbG9yOiMxZjcxOTl9LmhsanMtbWV0YSAuaGxqcy1zdHJpbmd7Y29sb3I6IzM4YX0uaGxqcy1lbXBoYXNpc3tmb250LXN0eWxlOml0YWxpY30uaGxqcy1zdHJvbmd7Zm9udC13ZWlnaHQ6NzAwfSIsICIvKiBJbXBvcnQgdGhlIGRvd25sb2FkZWQgQ1NTIGZpbGVzICovXG5AaW1wb3J0ICcuL2thdGV4Lm1pbi5jc3MnO1xuQGltcG9ydCAnLi9oaWdobGlnaHQtZGVmYXVsdC5taW4uY3NzJztcblxuLyogQWRkaXRpb25hbCBtYXJrZG93biBzdHlsaW5nIGZvciBPYnNpZGlhbiBwbHVnaW4gKi9cbi5tYXJrZG93bi1wcm9jZXNzb3ItY29udGVudCB7XG4gIGxpbmUtaGVpZ2h0OiAxLjY7XG4gIGNvbG9yOiB2YXIoLS10ZXh0LW5vcm1hbCk7XG59XG5cbi5tYXJrZG93bi1wcm9jZXNzb3ItY29udGVudCBoMSxcbi5tYXJrZG93bi1wcm9jZXNzb3ItY29udGVudCBoMixcbi5tYXJrZG93bi1wcm9jZXNzb3ItY29udGVudCBoMyxcbi5tYXJrZG93bi1wcm9jZXNzb3ItY29udGVudCBoNCxcbi5tYXJrZG93bi1wcm9jZXNzb3ItY29udGVudCBoNSxcbi5tYXJrZG93bi1wcm9jZXNzb3ItY29udGVudCBoNiB7XG4gIG1hcmdpbjogMXJlbSAwIDAuNXJlbSAwO1xuICBjb2xvcjogdmFyKC0tdGV4dC1ub3JtYWwpO1xuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtYm9sZCk7XG59XG5cbi5tYXJrZG93bi1wcm9jZXNzb3ItY29udGVudCBoMSB7IGZvbnQtc2l6ZTogMS41ZW07IH1cbi5tYXJrZG93bi1wcm9jZXNzb3ItY29udGVudCBoMiB7IGZvbnQtc2l6ZTogMS4zZW07IH1cbi5tYXJrZG93bi1wcm9jZXNzb3ItY29udGVudCBoMyB7IGZvbnQtc2l6ZTogMS4xZW07IH1cblxuLm1hcmtkb3duLXByb2Nlc3Nvci1jb250ZW50IHAge1xuICBtYXJnaW46IDAuNXJlbSAwO1xufVxuXG4ubWFya2Rvd24tcHJvY2Vzc29yLWNvbnRlbnQgcHJlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmFja2dyb3VuZC1wcmltYXJ5LWFsdCk7XG4gIHBhZGRpbmc6IDFyZW07XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1zKTtcbiAgb3ZlcmZsb3cteDogYXV0bztcbiAgbWFyZ2luOiAwLjVyZW0gMDtcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmFja2dyb3VuZC1tb2RpZmllci1ib3JkZXIpO1xufVxuXG4ubWFya2Rvd24tcHJvY2Vzc29yLWNvbnRlbnQgY29kZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJhY2tncm91bmQtcHJpbWFyeS1hbHQpO1xuICBwYWRkaW5nOiAycHggNHB4O1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtcyk7XG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LW1vbm9zcGFjZSk7XG4gIGZvbnQtc2l6ZTogMC45ZW07XG59XG5cbi5tYXJrZG93bi1wcm9jZXNzb3ItY29udGVudCBwcmUgY29kZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBwYWRkaW5nOiAwO1xufVxuXG4ubWFya2Rvd24tcHJvY2Vzc29yLWNvbnRlbnQgYmxvY2txdW90ZSB7XG4gIGJvcmRlci1sZWZ0OiA0cHggc29saWQgdmFyKC0tYmFja2dyb3VuZC1tb2RpZmllci1ib3JkZXIpO1xuICBtYXJnaW46IDFyZW0gMDtcbiAgcGFkZGluZy1sZWZ0OiAxcmVtO1xuICBjb2xvcjogdmFyKC0tdGV4dC1tdXRlZCk7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbn1cblxuLm1hcmtkb3duLXByb2Nlc3Nvci1jb250ZW50IHVsLFxuLm1hcmtkb3duLXByb2Nlc3Nvci1jb250ZW50IG9sIHtcbiAgcGFkZGluZy1sZWZ0OiAxLjVyZW07XG4gIG1hcmdpbjogMC41cmVtIDA7XG59XG5cbi5tYXJrZG93bi1wcm9jZXNzb3ItY29udGVudCBsaSB7XG4gIG1hcmdpbjogMC4yNXJlbSAwO1xufVxuXG4ubWFya2Rvd24tcHJvY2Vzc29yLWNvbnRlbnQgdGFibGUge1xuICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luOiAxcmVtIDA7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJhY2tncm91bmQtbW9kaWZpZXItYm9yZGVyKTtcbn1cblxuLm1hcmtkb3duLXByb2Nlc3Nvci1jb250ZW50IHRoLFxuLm1hcmtkb3duLXByb2Nlc3Nvci1jb250ZW50IHRkIHtcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmFja2dyb3VuZC1tb2RpZmllci1ib3JkZXIpO1xuICBwYWRkaW5nOiA4cHggMTJweDtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cblxuLm1hcmtkb3duLXByb2Nlc3Nvci1jb250ZW50IHRoIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmFja2dyb3VuZC1wcmltYXJ5LWFsdCk7XG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ib2xkKTtcbn1cblxuLm1hcmtkb3duLXByb2Nlc3Nvci1jb250ZW50IGEge1xuICBjb2xvcjogdmFyKC0tdGV4dC1hY2NlbnQpO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG5cbi5tYXJrZG93bi1wcm9jZXNzb3ItY29udGVudCBhOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG5cbi8qIE1hdGggY29udGVudCBzdHlsaW5nIGFkanVzdG1lbnRzIGZvciBPYnNpZGlhbiAqL1xuLm1hcmtkb3duLXByb2Nlc3Nvci1jb250ZW50IC5rYXRleCB7XG4gIGZvbnQtc2l6ZTogMS4xZW07XG59XG5cbi5tYXJrZG93bi1wcm9jZXNzb3ItY29udGVudCAua2F0ZXgtZGlzcGxheSB7XG4gIG1hcmdpbjogMXJlbSAwO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi8qIFRhc2sgbGlzdCBzdHlsaW5nICovXG4ubWFya2Rvd24tcHJvY2Vzc29yLWNvbnRlbnQgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdIHtcbiAgbWFyZ2luLXJpZ2h0OiAwLjVyZW07XG59XG5cbi8qIEZvb3Rub3RlcyBzdHlsaW5nICovXG4ubWFya2Rvd24tcHJvY2Vzc29yLWNvbnRlbnQgLmZvb3Rub3RlcyB7XG4gIG1hcmdpbi10b3A6IDJyZW07XG4gIHBhZGRpbmctdG9wOiAxcmVtO1xuICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tYmFja2dyb3VuZC1tb2RpZmllci1ib3JkZXIpO1xuICBmb250LXNpemU6IDAuOWVtO1xufVxuXG4vKiBPdmVycmlkZSBoaWdobGlnaHQuanMgY29sb3JzIHRvIHVzZSBPYnNpZGlhbiB0aGVtZSBjb2xvcnMgKi9cbi5tYXJrZG93bi1wcm9jZXNzb3ItY29udGVudCAuaGxqcyB7XG4gIGJhY2tncm91bmQ6IHZhcigtLWJhY2tncm91bmQtcHJpbWFyeS1hbHQpICFpbXBvcnRhbnQ7XG4gIGNvbG9yOiB2YXIoLS10ZXh0LW5vcm1hbCkgIWltcG9ydGFudDtcbn1cblxuLm1hcmtkb3duLXByb2Nlc3Nvci1jb250ZW50IC5obGpzLWNvbW1lbnQsXG4ubWFya2Rvd24tcHJvY2Vzc29yLWNvbnRlbnQgLmhsanMtcXVvdGUge1xuICBjb2xvcjogdmFyKC0tdGV4dC1tdXRlZCkgIWltcG9ydGFudDtcbn1cblxuLm1hcmtkb3duLXByb2Nlc3Nvci1jb250ZW50IC5obGpzLWtleXdvcmQsXG4ubWFya2Rvd24tcHJvY2Vzc29yLWNvbnRlbnQgLmhsanMtc2VsZWN0b3ItdGFnLFxuLm1hcmtkb3duLXByb2Nlc3Nvci1jb250ZW50IC5obGpzLWxpdGVyYWwge1xuICBjb2xvcjogdmFyKC0tdGV4dC1hY2NlbnQpICFpbXBvcnRhbnQ7XG59XG5cbi5tYXJrZG93bi1wcm9jZXNzb3ItY29udGVudCAuaGxqcy1zdHJpbmcsXG4ubWFya2Rvd24tcHJvY2Vzc29yLWNvbnRlbnQgLmhsanMtZG9jdGFnIHtcbiAgY29sb3I6IHZhcigtLWNvbG9yLWdyZWVuKSAhaW1wb3J0YW50O1xufVxuXG4ubWFya2Rvd24tcHJvY2Vzc29yLWNvbnRlbnQgLmhsanMtdGl0bGUsXG4ubWFya2Rvd24tcHJvY2Vzc29yLWNvbnRlbnQgLmhsanMtc2VjdGlvbixcbi5tYXJrZG93bi1wcm9jZXNzb3ItY29udGVudCAuaGxqcy10eXBlIHtcbiAgY29sb3I6IHZhcigtLWNvbG9yLWJsdWUpICFpbXBvcnRhbnQ7XG59XG5cbi5tYXJrZG93bi1wcm9jZXNzb3ItY29udGVudCAuaGxqcy1udW1iZXIsXG4ubWFya2Rvd24tcHJvY2Vzc29yLWNvbnRlbnQgLmhsanMtdmFyaWFibGUsXG4ubWFya2Rvd24tcHJvY2Vzc29yLWNvbnRlbnQgLmhsanMtdGVtcGxhdGUtdmFyaWFibGUge1xuICBjb2xvcjogdmFyKC0tY29sb3ItcHVycGxlKSAhaW1wb3J0YW50O1xufSJdLAogICJtYXBwaW5ncyI6ICI7QUFDQTtBQUNFLGVBQWE7QUFDYixjQUFZO0FBQ1osZUFBYTtBQUNiLE9BQUssa0ZBQW9GLE9BQU8sUUFBUSxFQUNuRyxpRkFBbUYsT0FBTztB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 */ diff --git a/main.ts b/main.ts index e8c8091..16e19e6 100644 --- a/main.ts +++ b/main.ts @@ -9,6 +9,8 @@ import { FileAction } from 'Enums/FileAction'; import { Path } from 'Enums/Path'; import { RegisterAiProvider, RegisterDependencies } from 'Services/ServiceRegistration'; +import './styles/markdown.css'; + interface DmsAssistantSettings { apiProvider: string; apiKey: string; diff --git a/package-lock.json b/package-lock.json index c1d0eea..b1afccd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,17 @@ "dependencies": { "@google/genai": "^1.17.0", "express": "^5.1.0", + "rehype-highlight": "^7.0.2", + "rehype-katex": "^7.0.1", + "rehype-stringify": "^10.0.1", + "remark-emoji": "^5.0.2", + "remark-footnotes": "^4.0.1", + "remark-gfm": "^4.0.1", + "remark-math": "^6.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.1.2", + "remark-toc": "^9.0.0", + "unified": "^11.0.5", "uuid": "^11.1.0" }, "devDependencies": { @@ -721,6 +732,18 @@ "node": ">= 8" } }, + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, "node_modules/@sveltejs/acorn-typescript": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.5.tgz", @@ -762,6 +785,15 @@ "@types/node": "*" } }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, "node_modules/@types/estree": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", @@ -794,6 +826,15 @@ "@types/send": "*" } }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, "node_modules/@types/http-errors": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", @@ -808,6 +849,21 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/katex": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.16.7.tgz", + "integrity": "sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==", + "license": "MIT" + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, "node_modules/@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", @@ -815,6 +871,12 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "license": "MIT" + }, "node_modules/@types/node": { "version": "16.18.126", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.126.tgz", @@ -869,6 +931,18 @@ "@types/estree": "*" } }, + "node_modules/@types/ungap__structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/ungap__structured-clone/-/ungap__structured-clone-1.2.0.tgz", + "integrity": "sha512-ZoaihZNLeZSxESbk9PUAPZOlSpcKx81I1+4emtULDVmBLkYutTcMlCj2K9VNlf9EWODxdO6gkAqEaLorXwZQVA==", + "license": "MIT" + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "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", @@ -1065,9 +1139,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", - "dev": true, - "license": "ISC", - "peer": true + "license": "ISC" }, "node_modules/accepts": { "version": "2.0.0", @@ -1199,6 +1271,16 @@ "node": ">= 0.4" } }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -1349,6 +1431,16 @@ "node": ">=6" } }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -1367,6 +1459,45 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/chokidar": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", @@ -1415,6 +1546,25 @@ "license": "MIT", "peer": true }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1503,6 +1653,19 @@ } } }, + "node_modules/decode-named-character-reference": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz", + "integrity": "sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==", + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -1520,6 +1683,37 @@ "node": ">= 0.8" } }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/diff": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -1576,6 +1770,22 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "license": "MIT" }, + "node_modules/emojilib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/emojilib/-/emojilib-2.4.0.tgz", + "integrity": "sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==", + "license": "MIT" + }, + "node_modules/emoticon": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-4.1.0.tgz", + "integrity": "sha512-VWZfnxqwNcc51hIy/sbOdEem6D+cVtpPzEEtVAFdaas30+1dgkyaOQ4sQ6Bp0tOMqWO1v+HQfYaoodOkdhK6SQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/encodeurl": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", @@ -1585,6 +1795,18 @@ "node": ">= 0.8" } }, + "node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/es-define-property": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", @@ -2271,6 +2493,12 @@ "node": ">= 0.4" } }, + "node_modules/github-slugger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", + "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", + "license": "ISC" + }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -2440,6 +2668,189 @@ "node": ">= 0.4" } }, + "node_modules/hast-util-from-dom": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/hast-util-from-dom/-/hast-util-from-dom-5.0.1.tgz", + "integrity": "sha512-N+LqofjR2zuzTjCPzyDUdSshy4Ma6li7p/c3pA78uTwzFgENbgbUrm2ugwsOdcjI1muO+o6Dgzp9p8WHtn/39Q==", + "license": "ISC", + "dependencies": { + "@types/hast": "^3.0.0", + "hastscript": "^9.0.0", + "web-namespaces": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-html": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.3.tgz", + "integrity": "sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "devlop": "^1.1.0", + "hast-util-from-parse5": "^8.0.0", + "parse5": "^7.0.0", + "vfile": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-html-isomorphic": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hast-util-from-html-isomorphic/-/hast-util-from-html-isomorphic-2.0.0.tgz", + "integrity": "sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-from-dom": "^5.0.0", + "hast-util-from-html": "^2.0.0", + "unist-util-remove-position": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-parse5": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz", + "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "hastscript": "^9.0.0", + "property-information": "^7.0.0", + "vfile": "^6.0.0", + "vfile-location": "^5.0.0", + "web-namespaces": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-is-element": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz", + "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-parse-selector": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", + "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-html": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz", + "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-whitespace": "^3.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "zwitch": "^2.0.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-text": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz", + "integrity": "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "hast-util-is-element": "^3.0.0", + "unist-util-find-after": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hastscript": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz", + "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-parse-selector": "^4.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.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", + "integrity": "sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/http-errors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", @@ -2557,6 +2968,29 @@ "node": ">= 0.10" } }, + "node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -2601,6 +3035,18 @@ "node": ">=8" } }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-promise": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", @@ -2705,6 +3151,22 @@ "safe-buffer": "^5.0.1" } }, + "node_modules/katex": { + "version": "0.16.22", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.22.tgz", + "integrity": "sha512-XCHRdUw4lf3SKBaJe4EvgqIuWwkPSo9XoeO8GjQW94Bp7TWv9hNhzZjZ+OH9yf1UmLygb7DIT5GSFQiyt16zYg==", + "funding": [ + "https://opencollective.com/katex", + "https://github.com/sponsors/katex" + ], + "license": "MIT", + "dependencies": { + "commander": "^8.3.0" + }, + "bin": { + "katex": "cli.js" + } + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -2716,6 +3178,15 @@ "json-buffer": "3.0.1" } }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -2763,6 +3234,31 @@ "license": "MIT", "peer": true }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/lowlight": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-3.3.0.tgz", + "integrity": "sha512-0JNhgFoPvP6U6lE/UdVsSq99tn6DhjjpAj5MxG49ewd2mOBVtwWYIT8ClyABhq198aXXODMU6Ox8DrGy/CpTZQ==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "devlop": "^1.0.0", + "highlight.js": "~11.11.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/magic-string": { "version": "0.30.18", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.18.tgz", @@ -2773,6 +3269,16 @@ "@jridgewell/sourcemap-codec": "^1.5.5" } }, + "node_modules/markdown-table": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", + "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", @@ -2782,6 +3288,497 @@ "node": ">= 0.4" } }, + "node_modules/mdast-util-find-and-replace": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", + "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mdast-util-footnote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/mdast-util-footnote/-/mdast-util-footnote-1.1.1.tgz", + "integrity": "sha512-Y8JiA5fZm0kCqvugmSfaSvaVU2trhAmhCYXJOgPKVfmDa8isqzb5Tf7uWvCq4s8I+dll09GZjboItwZFSsD4JQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-to-markdown": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-footnote/node_modules/@types/mdast": { + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", + "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2" + } + }, + "node_modules/mdast-util-footnote/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/mdast-util-footnote/node_modules/mdast-util-phrasing": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-3.0.1.tgz", + "integrity": "sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^3.0.0", + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-footnote/node_modules/mdast-util-to-markdown": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.5.0.tgz", + "integrity": "sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^3.0.0", + "mdast-util-to-string": "^3.0.0", + "micromark-util-decode-string": "^1.0.0", + "unist-util-visit": "^4.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-footnote/node_modules/mdast-util-to-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", + "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-footnote/node_modules/micromark-util-character": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz", + "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/mdast-util-footnote/node_modules/micromark-util-decode-numeric-character-reference": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz", + "integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/mdast-util-footnote/node_modules/micromark-util-decode-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz", + "integrity": "sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/mdast-util-footnote/node_modules/micromark-util-normalize-identifier": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz", + "integrity": "sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/mdast-util-footnote/node_modules/micromark-util-symbol": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", + "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/mdast-util-footnote/node_modules/micromark-util-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", + "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/mdast-util-footnote/node_modules/unist-util-is": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", + "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-footnote/node_modules/unist-util-visit": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", + "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-footnote/node_modules/unist-util-visit-parents": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", + "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", + "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", + "license": "MIT", + "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.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", + "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-find-and-replace": "^3.0.0", + "micromark-util-character": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-math": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-math/-/mdast-util-math-3.0.0.tgz", + "integrity": "sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "longest-streak": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.1.0", + "unist-util-remove-position": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", + "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-toc": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-toc/-/mdast-util-toc-7.1.0.tgz", + "integrity": "sha512-2TVKotOQzqdY7THOdn2gGzS9d1Sdd66bvxUyw3aNpWfcPXCLYSJCCgfPy30sEtuzkDraJgqF35dzgmz6xlvH/w==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/ungap__structured-clone": "^1.0.0", + "@ungap/structured-clone": "^1.0.0", + "github-slugger": "^2.0.0", + "mdast-util-to-string": "^4.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/media-typer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", @@ -2813,6 +3810,917 @@ "node": ">= 8" } }, + "node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "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" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.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.0.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" + } + }, + "node_modules/micromark-extension-footnote": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/micromark-extension-footnote/-/micromark-extension-footnote-1.0.2.tgz", + "integrity": "sha512-sD7t/hooONLnbPYgcQpBcTjh7mPEcD2R/jRS5DLYDNm0XbngbaJZ01F1aI3v6VXVMdAu3XtFKUecNRlXbgGk/Q==", + "license": "MIT", + "dependencies": { + "micromark-core-commonmark": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "uvu": "^0.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-footnote/node_modules/micromark-core-commonmark": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz", + "integrity": "sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-factory-destination": "^1.0.0", + "micromark-factory-label": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-factory-title": "^1.0.0", + "micromark-factory-whitespace": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-classify-character": "^1.0.0", + "micromark-util-html-tag-name": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-extension-footnote/node_modules/micromark-factory-destination": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz", + "integrity": "sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-extension-footnote/node_modules/micromark-factory-label": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz", + "integrity": "sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-extension-footnote/node_modules/micromark-factory-space": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz", + "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-extension-footnote/node_modules/micromark-factory-title": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz", + "integrity": "sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-extension-footnote/node_modules/micromark-factory-whitespace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz", + "integrity": "sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-extension-footnote/node_modules/micromark-util-character": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz", + "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-extension-footnote/node_modules/micromark-util-chunked": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz", + "integrity": "sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-extension-footnote/node_modules/micromark-util-classify-character": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz", + "integrity": "sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-extension-footnote/node_modules/micromark-util-html-tag-name": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz", + "integrity": "sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-footnote/node_modules/micromark-util-normalize-identifier": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz", + "integrity": "sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-extension-footnote/node_modules/micromark-util-resolve-all": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz", + "integrity": "sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-extension-footnote/node_modules/micromark-util-subtokenize": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz", + "integrity": "sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-extension-footnote/node_modules/micromark-util-symbol": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", + "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-footnote/node_modules/micromark-util-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", + "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", + "license": "MIT", + "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.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", + "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", + "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", + "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", + "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-math": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-math/-/micromark-extension-math-3.1.0.tgz", + "integrity": "sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==", + "license": "MIT", + "dependencies": { + "@types/katex": "^0.16.0", + "devlop": "^1.0.0", + "katex": "^0.16.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, "node_modules/micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", @@ -2876,7 +4784,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -2905,6 +4812,21 @@ "node": ">= 0.6" } }, + "node_modules/node-emoji": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-2.2.0.tgz", + "integrity": "sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==", + "license": "MIT", + "dependencies": { + "@sindresorhus/is": "^4.6.0", + "char-regex": "^1.0.2", + "emojilib": "^2.4.0", + "skin-tone": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/node-fetch": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", @@ -3040,6 +4962,18 @@ "node": ">=6" } }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -3132,6 +5066,16 @@ "node": ">= 0.8.0" } }, + "node_modules/property-information": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", + "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -3243,6 +5187,262 @@ "url": "https://github.com/sponsors/mysticatea" } }, + "node_modules/rehype-highlight": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rehype-highlight/-/rehype-highlight-7.0.2.tgz", + "integrity": "sha512-k158pK7wdC2qL3M5NcZROZ2tR/l7zOzjxXd5VGdcfIyoijjQqpHd3JKtYSBDpDZ38UI2WJWuFAtkMDxmx5kstA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-to-text": "^4.0.0", + "lowlight": "^3.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-katex": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/rehype-katex/-/rehype-katex-7.0.1.tgz", + "integrity": "sha512-OiM2wrZ/wuhKkigASodFoo8wimG3H12LWQaH8qSPVJn9apWKFSH3YOCtbKpBorTVw/eI7cuT21XBbvwEswbIOA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/katex": "^0.16.0", + "hast-util-from-html-isomorphic": "^2.0.0", + "hast-util-to-text": "^4.0.0", + "katex": "^0.16.0", + "unist-util-visit-parents": "^6.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-stringify": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.1.tgz", + "integrity": "sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-to-html": "^9.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-emoji": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-5.0.2.tgz", + "integrity": "sha512-IyIqGELcyK5AVdLFafoiNww+Eaw/F+rGrNSXoKucjo95uL267zrddgxGM83GN1wFIb68pyDuAsY3m5t2Cav1pQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.4", + "emoticon": "^4.0.1", + "mdast-util-find-and-replace": "^3.0.1", + "node-emoji": "^2.1.3", + "unified": "^11.0.4" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/remark-footnotes": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-4.0.1.tgz", + "integrity": "sha512-He6YzQFk/Wu2KgfjI80EyPXjt/G+WFaYfUH+xapqPQBdm3aTdEyzosXXv9a2FbTxGqgOfJ4q/TCB46v+wofRpQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-footnote": "^1.0.0", + "micromark-extension-footnote": "^1.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-footnotes/node_modules/@types/mdast": { + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", + "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2" + } + }, + "node_modules/remark-footnotes/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/remark-footnotes/node_modules/unified": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", + "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "bail": "^2.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-footnotes/node_modules/unist-util-stringify-position": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", + "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-footnotes/node_modules/vfile": { + "version": "5.3.7", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz", + "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-footnotes/node_modules/vfile-message": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz", + "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-gfm": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", + "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "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.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-math": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/remark-math/-/remark-math-6.0.0.tgz", + "integrity": "sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-math": "^3.0.0", + "micromark-extension-math": "^3.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz", + "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-stringify": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-to-markdown": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-toc": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/remark-toc/-/remark-toc-9.0.0.tgz", + "integrity": "sha512-KJ9txbo33GjDAV1baHFze7ij4G8c7SGYoY8Kzsm2gzFpbhL/bSoVpMMzGa3vrNDSWASNd/3ppAqL7cP2zD6JIA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-toc": "^7.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -3327,7 +5527,6 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", - "dev": true, "license": "MIT", "dependencies": { "mri": "^1.1.0" @@ -3515,6 +5714,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/skin-tone": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/skin-tone/-/skin-tone-2.0.0.tgz", + "integrity": "sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==", + "license": "MIT", + "dependencies": { + "unicode-emoji-modifier-base": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -3525,6 +5736,16 @@ "node": ">=8" } }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/statuses": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", @@ -3534,6 +5755,20 @@ "node": ">= 0.8" } }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "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", @@ -3744,6 +5979,26 @@ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "license": "MIT" }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/tslib": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", @@ -3830,6 +6085,130 @@ "node": ">=12.20" } }, + "node_modules/unicode-emoji-modifier-base": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unicode-emoji-modifier-base/-/unicode-emoji-modifier-base-1.0.0.tgz", + "integrity": "sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-find-after": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz", + "integrity": "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz", + "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -3863,6 +6242,24 @@ "uuid": "dist/esm/bin/uuid" } }, + "node_modules/uvu": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", + "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0", + "diff": "^5.0.0", + "kleur": "^4.0.3", + "sade": "^1.7.3" + }, + "bin": { + "uvu": "bin.js" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -3872,6 +6269,48 @@ "node": ">= 0.8" } }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz", + "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/w3c-keyname": { "version": "2.2.8", "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", @@ -3880,6 +6319,16 @@ "license": "MIT", "peer": true }, + "node_modules/web-namespaces": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", + "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", @@ -3971,6 +6420,16 @@ "integrity": "sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==", "dev": true, "license": "MIT" + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } } } } diff --git a/package.json b/package.json index cd5613a..623cd8b 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,17 @@ "dependencies": { "@google/genai": "^1.17.0", "express": "^5.1.0", + "rehype-highlight": "^7.0.2", + "rehype-katex": "^7.0.1", + "rehype-stringify": "^10.0.1", + "remark-emoji": "^5.0.2", + "remark-footnotes": "^4.0.1", + "remark-gfm": "^4.0.1", + "remark-math": "^6.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.1.2", + "remark-toc": "^9.0.0", + "unified": "^11.0.5", "uuid": "^11.1.0" } } diff --git a/styles/highlight-default.min.css b/styles/highlight-default.min.css new file mode 100644 index 0000000..a75ea91 --- /dev/null +++ b/styles/highlight-default.min.css @@ -0,0 +1,9 @@ +/*! + Theme: Default + Description: Original highlight.js style + Author: (c) Ivan Sagalaev + Maintainer: @highlightjs/core-team + Website: https://highlightjs.org/ + License: see project LICENSE + Touched: 2021 +*/pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#f3f3f3;color:#444}.hljs-comment{color:#697070}.hljs-punctuation,.hljs-tag{color:#444a}.hljs-tag .hljs-attr,.hljs-tag .hljs-name{color:#444}.hljs-attribute,.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-name,.hljs-selector-tag{font-weight:700}.hljs-deletion,.hljs-number,.hljs-quote,.hljs-selector-class,.hljs-selector-id,.hljs-string,.hljs-template-tag,.hljs-type{color:#800}.hljs-section,.hljs-title{color:#800;font-weight:700}.hljs-link,.hljs-operator,.hljs-regexp,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-symbol,.hljs-template-variable,.hljs-variable{color:#ab5656}.hljs-literal{color:#695}.hljs-addition,.hljs-built_in,.hljs-bullet,.hljs-code{color:#397300}.hljs-meta{color:#1f7199}.hljs-meta .hljs-string{color:#38a}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/styles/katex.min.css b/styles/katex.min.css new file mode 100644 index 0000000..274e2d2 --- /dev/null +++ b/styles/katex.min.css @@ -0,0 +1,373 @@ +/* KaTeX CSS with CDN font URLs */ +@font-face { + font-family: 'KaTeX_AMS'; + font-style: normal; + font-weight: 400; + src: url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_AMS-Regular.woff2') format('woff2'), + url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_AMS-Regular.woff') format('woff'); +} + +@font-face { + font-family: 'KaTeX_Caligraphic'; + font-style: normal; + font-weight: 700; + src: url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Caligraphic-Bold.woff2') format('woff2'), + url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Caligraphic-Bold.woff') format('woff'); +} + +@font-face { + font-family: 'KaTeX_Caligraphic'; + font-style: normal; + font-weight: 400; + src: url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Caligraphic-Regular.woff2') format('woff2'), + url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Caligraphic-Regular.woff') format('woff'); +} + +@font-face { + font-family: 'KaTeX_Fraktur'; + font-style: normal; + font-weight: 700; + src: url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Fraktur-Bold.woff2') format('woff2'), + url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Fraktur-Bold.woff') format('woff'); +} + +@font-face { + font-family: 'KaTeX_Fraktur'; + font-style: normal; + font-weight: 400; + src: url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Fraktur-Regular.woff2') format('woff2'), + url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Fraktur-Regular.woff') format('woff'); +} + +@font-face { + font-family: 'KaTeX_Main'; + font-style: normal; + font-weight: 700; + src: url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Main-Bold.woff2') format('woff2'), + url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Main-Bold.woff') format('woff'); +} + +@font-face { + font-family: 'KaTeX_Main'; + font-style: italic; + font-weight: 400; + src: url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Main-Italic.woff2') format('woff2'), + url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Main-Italic.woff') format('woff'); +} + +@font-face { + font-family: 'KaTeX_Main'; + font-style: normal; + font-weight: 400; + src: url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Main-Regular.woff2') format('woff2'), + url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Main-Regular.woff') format('woff'); +} + +@font-face { + font-family: 'KaTeX_Math'; + font-style: italic; + font-weight: 400; + src: url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Math-Italic.woff2') format('woff2'), + url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Math-Italic.woff') format('woff'); +} + +@font-face { + font-family: 'KaTeX_SansSerif'; + font-style: normal; + font-weight: 700; + src: url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_SansSerif-Bold.woff2') format('woff2'), + url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_SansSerif-Bold.woff') format('woff'); +} + +@font-face { + font-family: 'KaTeX_SansSerif'; + font-style: italic; + font-weight: 400; + src: url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_SansSerif-Italic.woff2') format('woff2'), + url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_SansSerif-Italic.woff') format('woff'); +} + +@font-face { + font-family: 'KaTeX_SansSerif'; + font-style: normal; + font-weight: 400; + src: url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_SansSerif-Regular.woff2') format('woff2'), + url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_SansSerif-Regular.woff') format('woff'); +} + +@font-face { + font-family: 'KaTeX_Script'; + font-style: normal; + font-weight: 400; + src: url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Script-Regular.woff2') format('woff2'), + url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Script-Regular.woff') format('woff'); +} + +@font-face { + font-family: 'KaTeX_Size1'; + font-style: normal; + font-weight: 400; + src: url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Size1-Regular.woff2') format('woff2'), + url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Size1-Regular.woff') format('woff'); +} + +@font-face { + font-family: 'KaTeX_Size2'; + font-style: normal; + font-weight: 400; + src: url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Size2-Regular.woff2') format('woff2'), + url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Size2-Regular.woff') format('woff'); +} + +@font-face { + font-family: 'KaTeX_Size3'; + font-style: normal; + font-weight: 400; + src: url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Size3-Regular.woff2') format('woff2'), + url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Size3-Regular.woff') format('woff'); +} + +@font-face { + font-family: 'KaTeX_Size4'; + font-style: normal; + font-weight: 400; + src: url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Size4-Regular.woff2') format('woff2'), + url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Size4-Regular.woff') format('woff'); +} + +@font-face { + font-family: 'KaTeX_Typewriter'; + font-style: normal; + font-weight: 400; + src: url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Typewriter-Regular.woff2') format('woff2'), + url('https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_Typewriter-Regular.woff') format('woff'); +} + +/* Rest of KaTeX CSS styles */ +.katex { + font: normal 1.21em KaTeX_Main, Times, serif; + line-height: 1.2; + white-space: nowrap; + text-indent: 0; + text-rendering: auto; +} + +.katex * { + border-color: currentColor; +} + +.katex .katex-version::after { + content: "0.16.0"; +} + +.katex .katex-mathml { + position: absolute; + visibility: hidden; + height: 1px; + overflow: hidden; +} + +.katex .katex-html > .newline { + display: block; +} + +.katex .base { + position: relative; + white-space: nowrap; + width: min-content; +} + +.katex .strut { + display: inline-block; +} + +.katex .textbf { + font-weight: bold; +} + +.katex .textit { + font-style: italic; +} + +.katex .textrm { + font-family: KaTeX_Main; +} + +.katex .textsf { + font-family: KaTeX_SansSerif; +} + +.katex .texttt { + font-family: KaTeX_Typewriter; +} + +.katex .mathnormal { + font-family: KaTeX_Math; + font-style: italic; +} + +.katex .mathit { + font-family: KaTeX_Main; + font-style: italic; +} + +.katex .mathrm { + font-style: normal; +} + +.katex .mathbf { + font-family: KaTeX_Main; + font-weight: bold; +} + +.katex .boldsymbol { + font-family: KaTeX_Math; + font-weight: bold; + font-style: italic; +} + +.katex .amsrm { + font-family: KaTeX_AMS; +} + +.katex .mathbb, +.katex .textbb { + font-family: KaTeX_AMS; +} + +.katex .mathcal { + font-family: KaTeX_Caligraphic; +} + +.katex .mathfrak, +.katex .textfrak { + font-family: KaTeX_Fraktur; +} + +.katex .mathtt { + font-family: KaTeX_Typewriter; +} + +.katex .mathscr, +.katex .textscr { + font-family: KaTeX_Script; +} + +.katex .mathsf, +.katex .textsf { + font-family: KaTeX_SansSerif; +} + +.katex .mathboldsf, +.katex .textboldsf { + font-family: KaTeX_SansSerif; + font-weight: bold; +} + +.katex .mathitsf, +.katex .textitsf { + font-family: KaTeX_SansSerif; + font-style: italic; +} + +.katex .mainrm { + font-family: KaTeX_Main; + font-style: normal; +} + +.katex .vlist-t { + display: inline-table; + table-layout: fixed; + border-collapse: collapse; +} + +.katex .vlist-r { + display: table-row; +} + +.katex .vlist { + display: table-cell; + vertical-align: bottom; + position: relative; +} + +.katex .vlist > span { + display: block; + height: 0; + position: relative; +} + +.katex .vlist > span > span { + display: inline-block; +} + +.katex .vlist > span > .pstrut { + overflow: hidden; + width: 0; +} + +.katex .hlist { + display: inline-flex; + flex-direction: row; +} + +.katex .hlist > span { + flex: 0 0 auto; +} + +.katex .vcenter { + display: inline-block; + vertical-align: middle; +} + +.katex .alignleft { + text-align: left; +} + +.katex .aligncenter { + text-align: center; +} + +.katex .alignright { + text-align: right; +} + +.katex .gothfrak, +.katex .textgothfrak { + font-family: KaTeX_Fraktur; +} + +.katex .cmr { + font-family: KaTeX_Main; +} + +.katex .cmss { + font-family: KaTeX_SansSerif; +} + +.katex .cmtt { + font-family: KaTeX_Typewriter; +} + +.katex .katex-display { + display: block; + margin: 1em 0; + text-align: center; +} + +.katex .katex-display > .katex { + display: block; + white-space: nowrap; + max-width: 100%; + overflow-x: auto; + text-align: initial; +} + +.katex .katex-display.leqno > .katex { + text-align: left; +} + +.katex .katex-display.fleqn > .katex { + text-align: left; + padding-left: 2em; +} \ No newline at end of file diff --git a/styles/markdown.css b/styles/markdown.css new file mode 100644 index 0000000..ba5da8d --- /dev/null +++ b/styles/markdown.css @@ -0,0 +1,153 @@ +/* Import the downloaded CSS files */ +@import './katex.min.css'; +@import './highlight-default.min.css'; + +/* Additional markdown styling for Obsidian plugin */ +.markdown-processor-content { + line-height: 1.6; + color: var(--text-normal); +} + +.markdown-processor-content h1, +.markdown-processor-content h2, +.markdown-processor-content h3, +.markdown-processor-content h4, +.markdown-processor-content h5, +.markdown-processor-content h6 { + margin: 1rem 0 0.5rem 0; + color: var(--text-normal); + font-weight: var(--font-weight-bold); +} + +.markdown-processor-content h1 { font-size: 1.5em; } +.markdown-processor-content h2 { font-size: 1.3em; } +.markdown-processor-content h3 { font-size: 1.1em; } + +.markdown-processor-content p { + margin: 0.5rem 0; +} + +.markdown-processor-content pre { + background-color: var(--background-primary-alt); + padding: 1rem; + border-radius: var(--radius-s); + overflow-x: auto; + margin: 0.5rem 0; + border: 1px solid var(--background-modifier-border); +} + +.markdown-processor-content code { + background-color: var(--background-primary-alt); + padding: 2px 4px; + border-radius: var(--radius-s); + font-family: var(--font-monospace); + font-size: 0.9em; +} + +.markdown-processor-content pre code { + background-color: transparent; + padding: 0; +} + +.markdown-processor-content blockquote { + border-left: 4px solid var(--background-modifier-border); + margin: 1rem 0; + padding-left: 1rem; + color: var(--text-muted); + font-style: italic; +} + +.markdown-processor-content ul, +.markdown-processor-content ol { + padding-left: 1.5rem; + margin: 0.5rem 0; +} + +.markdown-processor-content li { + margin: 0.25rem 0; +} + +.markdown-processor-content table { + border-collapse: collapse; + width: 100%; + margin: 1rem 0; + border: 1px solid var(--background-modifier-border); +} + +.markdown-processor-content th, +.markdown-processor-content td { + border: 1px solid var(--background-modifier-border); + padding: 8px 12px; + text-align: left; +} + +.markdown-processor-content th { + background-color: var(--background-primary-alt); + font-weight: var(--font-weight-bold); +} + +.markdown-processor-content a { + color: var(--text-accent); + text-decoration: none; +} + +.markdown-processor-content a:hover { + text-decoration: underline; +} + +/* Math content styling adjustments for Obsidian */ +.markdown-processor-content .katex { + font-size: 1.1em; +} + +.markdown-processor-content .katex-display { + margin: 1rem 0; + text-align: center; +} + +/* Task list styling */ +.markdown-processor-content input[type="checkbox"] { + margin-right: 0.5rem; +} + +/* Footnotes styling */ +.markdown-processor-content .footnotes { + margin-top: 2rem; + padding-top: 1rem; + border-top: 1px solid var(--background-modifier-border); + font-size: 0.9em; +} + +/* Override highlight.js colors to use Obsidian theme colors */ +.markdown-processor-content .hljs { + background: var(--background-primary-alt) !important; + color: var(--text-normal) !important; +} + +.markdown-processor-content .hljs-comment, +.markdown-processor-content .hljs-quote { + color: var(--text-muted) !important; +} + +.markdown-processor-content .hljs-keyword, +.markdown-processor-content .hljs-selector-tag, +.markdown-processor-content .hljs-literal { + color: var(--text-accent) !important; +} + +.markdown-processor-content .hljs-string, +.markdown-processor-content .hljs-doctag { + color: var(--color-green) !important; +} + +.markdown-processor-content .hljs-title, +.markdown-processor-content .hljs-section, +.markdown-processor-content .hljs-type { + color: var(--color-blue) !important; +} + +.markdown-processor-content .hljs-number, +.markdown-processor-content .hljs-variable, +.markdown-processor-content .hljs-template-variable { + color: var(--color-purple) !important; +} \ No newline at end of file