From 7e0e3a6289c78d47140b0ea2bea3359afdff710e Mon Sep 17 00:00:00 2001 From: Michael Kinder Date: Sun, 28 Jun 2026 15:11:45 -0400 Subject: [PATCH] first commit --- .gitattributes | 1 + .github/FUNDING.yml | 2 + .gitignore | 25 + .vscode/extensions.json | 4 + .vscode/launch.json | 11 + LICENSE.txt | 7 + README.md | 60 + astro.config.mjs | 86 + dev/README.md | 1 + dev/theme-data.json | 1118 ++ dev/themeData.ts | 44 + package-lock.json | 10796 ++++++++++++++++ package.json | 73 + prettier.config.js | 21 + public/duck.webp | Bin 0 -> 21850 bytes public/favicon.svg | 9 + public/owl.webp | Bin 0 -> 21180 bytes public/rss.xsl | 141 + public/unicorn.webp | Bin 0 -> 16712 bytes src/components/BlockHeader.astro | 6 + src/components/BuyMeACoffeeModal.svelte | 469 + src/components/Comments.svelte | 486 + src/components/CookieConsent.astro | 73 + src/components/DividerText.astro | 12 + src/components/Footer.astro | 20 + src/components/GitHubActivityCalendar.astro | 307 + src/components/Header.astro | 100 + src/components/HomeBanner.astro | 37 + src/components/LightDarkAutoButton.astro | 71 + src/components/LightDarkAutoThemeLoader.astro | 48 + src/components/NavLink.astro | 18 + src/components/PageHeader.astro | 29 + src/components/Pagination.astro | 43 + src/components/PostAddendum.astro | 31 + src/components/PostInfo.astro | 62 + src/components/PostPreview.astro | 46 + src/components/ScrollUpButton.astro | 94 + src/components/Search.astro | 221 + src/components/SelectTheme.astro | 193 + src/components/SelectThemeLoader.astro | 25 + src/components/SeriesSection.astro | 30 + src/components/SocialLinks.astro | 115 + src/components/TableOfContents.astro | 54 + src/components/TableOfContentsHeading.astro | 41 + src/components/Tags.astro | 22 + src/components/TagsSection.astro | 29 + src/content.config.ts | 66 + src/content/addendum.md | 7 + src/content/avatar.jpeg | Bin 0 -> 243228 bytes src/content/home.md | 8 + src/content/legal/privacy-policy.md | 48 + src/content/legal/terms-of-use.md | 44 + .../posts/building-custom-comment-system.md | 165 + .../posts/integrating-gitea-and-vercel.md | 118 + src/content/posts/introducing-clearproxy.md | 68 + .../posts/rocky-linux-contributing-guide.md | 33 + .../virtual-machine-manager-void-linux.md | 75 + src/env.d.ts | 5 + src/icons/bluesky.svg | 1 + src/icons/chevron-up.svg | 1 + src/icons/chevrons-left.svg | 1 + src/icons/chevrons-right.svg | 1 + src/icons/circle-x.svg | 1 + src/icons/email.svg | 1 + src/icons/github.svg | 1 + src/icons/linkedin.svg | 1 + src/icons/mastodon.svg | 1 + src/icons/moon.svg | 1 + src/icons/palette.svg | 1 + src/icons/rss.svg | 1 + src/icons/search.svg | 1 + src/icons/sun-moon.svg | 1 + src/icons/sun.svg | 1 + src/icons/twitter.svg | 1 + src/layouts/Layout.astro | 179 + src/layouts/MarkdownLayout.astro | 25 + src/pages/404.astro | 7 + src/pages/about.astro | 368 + src/pages/api/auth/callback.ts | 63 + src/pages/api/auth/signin.ts | 44 + src/pages/api/auth/signout.ts | 8 + src/pages/api/auth/user.ts | 33 + src/pages/api/checkout.ts | 71 + src/pages/api/comments/[slug].ts | 278 + src/pages/api/payment-intent.ts | 40 + src/pages/index.astro | 76 + src/pages/legal/[slug].astro | 32 + src/pages/posts/[...page].astro | 31 + src/pages/posts/[slug].astro | 149 + src/pages/robots.txt.ts | 13 + src/pages/rss.xml.ts | 35 + src/pages/series/[slug].astro | 29 + src/pages/social-cards/[slug].png.ts | 109 + src/pages/tags/[tag]/[...page].astro | 40 + src/plugins/rehype-pixelated.ts | 19 + src/plugins/rehype-title-figure.ts | 34 + src/plugins/remark-admonitions.ts | 73 + src/plugins/remark-character-dialogue.ts | 62 + src/plugins/remark-description.ts | 43 + src/plugins/remark-gemoji.ts | 44 + src/plugins/remark-github-card.ts | 159 + src/plugins/remark-reading-time.ts | 17 + src/plugins/remark-unknown-directives.ts | 52 + src/site.config.ts | 178 + src/styles/global.css | 614 + src/types.ts | 173 + src/utils.ts | 331 + svelte.config.js | 5 + tsconfig.json | 19 + 109 files changed, 19187 insertions(+) create mode 100644 .gitattributes create mode 100644 .github/FUNDING.yml create mode 100644 .gitignore create mode 100644 .vscode/extensions.json create mode 100644 .vscode/launch.json create mode 100644 LICENSE.txt create mode 100644 README.md create mode 100644 astro.config.mjs create mode 100644 dev/README.md create mode 100644 dev/theme-data.json create mode 100644 dev/themeData.ts create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 prettier.config.js create mode 100644 public/duck.webp create mode 100644 public/favicon.svg create mode 100644 public/owl.webp create mode 100644 public/rss.xsl create mode 100644 public/unicorn.webp create mode 100644 src/components/BlockHeader.astro create mode 100644 src/components/BuyMeACoffeeModal.svelte create mode 100644 src/components/Comments.svelte create mode 100644 src/components/CookieConsent.astro create mode 100644 src/components/DividerText.astro create mode 100644 src/components/Footer.astro create mode 100644 src/components/GitHubActivityCalendar.astro create mode 100644 src/components/Header.astro create mode 100644 src/components/HomeBanner.astro create mode 100644 src/components/LightDarkAutoButton.astro create mode 100644 src/components/LightDarkAutoThemeLoader.astro create mode 100644 src/components/NavLink.astro create mode 100644 src/components/PageHeader.astro create mode 100644 src/components/Pagination.astro create mode 100644 src/components/PostAddendum.astro create mode 100644 src/components/PostInfo.astro create mode 100644 src/components/PostPreview.astro create mode 100644 src/components/ScrollUpButton.astro create mode 100644 src/components/Search.astro create mode 100644 src/components/SelectTheme.astro create mode 100644 src/components/SelectThemeLoader.astro create mode 100644 src/components/SeriesSection.astro create mode 100644 src/components/SocialLinks.astro create mode 100644 src/components/TableOfContents.astro create mode 100644 src/components/TableOfContentsHeading.astro create mode 100644 src/components/Tags.astro create mode 100644 src/components/TagsSection.astro create mode 100644 src/content.config.ts create mode 100644 src/content/addendum.md create mode 100644 src/content/avatar.jpeg create mode 100644 src/content/home.md create mode 100644 src/content/legal/privacy-policy.md create mode 100644 src/content/legal/terms-of-use.md create mode 100644 src/content/posts/building-custom-comment-system.md create mode 100644 src/content/posts/integrating-gitea-and-vercel.md create mode 100644 src/content/posts/introducing-clearproxy.md create mode 100644 src/content/posts/rocky-linux-contributing-guide.md create mode 100644 src/content/posts/virtual-machine-manager-void-linux.md create mode 100644 src/env.d.ts create mode 100644 src/icons/bluesky.svg create mode 100644 src/icons/chevron-up.svg create mode 100644 src/icons/chevrons-left.svg create mode 100644 src/icons/chevrons-right.svg create mode 100644 src/icons/circle-x.svg create mode 100644 src/icons/email.svg create mode 100644 src/icons/github.svg create mode 100644 src/icons/linkedin.svg create mode 100644 src/icons/mastodon.svg create mode 100644 src/icons/moon.svg create mode 100644 src/icons/palette.svg create mode 100644 src/icons/rss.svg create mode 100644 src/icons/search.svg create mode 100644 src/icons/sun-moon.svg create mode 100644 src/icons/sun.svg create mode 100644 src/icons/twitter.svg create mode 100644 src/layouts/Layout.astro create mode 100644 src/layouts/MarkdownLayout.astro create mode 100644 src/pages/404.astro create mode 100644 src/pages/about.astro create mode 100644 src/pages/api/auth/callback.ts create mode 100644 src/pages/api/auth/signin.ts create mode 100644 src/pages/api/auth/signout.ts create mode 100644 src/pages/api/auth/user.ts create mode 100644 src/pages/api/checkout.ts create mode 100644 src/pages/api/comments/[slug].ts create mode 100644 src/pages/api/payment-intent.ts create mode 100644 src/pages/index.astro create mode 100644 src/pages/legal/[slug].astro create mode 100644 src/pages/posts/[...page].astro create mode 100644 src/pages/posts/[slug].astro create mode 100644 src/pages/robots.txt.ts create mode 100644 src/pages/rss.xml.ts create mode 100644 src/pages/series/[slug].astro create mode 100644 src/pages/social-cards/[slug].png.ts create mode 100644 src/pages/tags/[tag]/[...page].astro create mode 100644 src/plugins/rehype-pixelated.ts create mode 100644 src/plugins/rehype-title-figure.ts create mode 100644 src/plugins/remark-admonitions.ts create mode 100644 src/plugins/remark-character-dialogue.ts create mode 100644 src/plugins/remark-description.ts create mode 100644 src/plugins/remark-gemoji.ts create mode 100644 src/plugins/remark-github-card.ts create mode 100644 src/plugins/remark-reading-time.ts create mode 100644 src/plugins/remark-unknown-directives.ts create mode 100644 src/site.config.ts create mode 100644 src/styles/global.css create mode 100644 src/types.ts create mode 100644 src/utils.ts create mode 100644 svelte.config.js create mode 100644 tsconfig.json diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..bb6b506 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +public/* -linguist-detectable \ No newline at end of file diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..ca86bbd --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,2 @@ +# These are supported funding model platforms +custom: ['https://foggymtndrifter.com/#coffee'] # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3f7d1e0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,25 @@ +# build output +dist/ + +# generated types +.astro/ + +# dependencies +node_modules/ + +# logs +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + +# environment variables +.env +.env.production + +# macOS-specific files +.DS_Store + +# jetbrains setting folder +.idea/ +.vercel/ \ No newline at end of file diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..22a1505 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,4 @@ +{ + "recommendations": ["astro-build.astro-vscode"], + "unwantedRecommendations": [] +} diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..d642209 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,11 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "command": "./node_modules/.bin/astro dev", + "name": "Development server", + "request": "launch", + "type": "node-terminal" + } + ] +} diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..877f8d3 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,7 @@ +Copyright 2025 Stel Clementine + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..99ad21a --- /dev/null +++ b/README.md @@ -0,0 +1,60 @@ +# foggymtndrifter.com + +Michael Kinder's personal website and blog. + +This site features a quirky, developer-focused aesthetic with deep customization, local content management, and integrated features for reader interaction. + +## ✨ Features + +- **Terminal Aesthetic**: Heavily themed UI including a terminal-style interface. +- **Content Management**: + - **Blog**: Technical articles writing in MDX with Expressive Code syntax highlighting. + - **CV/Resume**: A dedicated "About" page formatted as a professional CV. + - **Legal Pages**: Privacy Policy and Terms of Use (queried from local markdown). +- **Interactive Elements**: + - **Cookie Consent**: Minimalist, non-intrusive popup. + - **Comments**: GitHub-powered comments via [Giscus](https://giscus.app). + - **Donations**: Custom "Buy Me a Coffee" modal integrated with Stripe for easy support. +- **Tech Stack**: + - Built with [Astro v5](https://astro.build) + - Styled with [Tailwind CSS v4](https://tailwindcss.com) + - Deployed on [Vercel](https://vercel.com) + +## 🚀 Local Development + +1. **Clone the repository**: + ```bash + git clone https://github.com/FoggyMtnDrifter/website.git + cd website + ``` + +2. **Install dependencies**: + ```bash + npm install + ``` + +3. **Start the dev server**: + ```bash + npm run dev + ``` + +4. **Build for production**: + ```bash + npm run build + ``` + +## 🛠️ Configuration + +Site configuration is centralized in `src/site.config.ts`. This file controls: +- SEO metadata (Title, Description, Author) +- Navigation links +- Theme settings +- Social links & Giscus configuration + +## 📄 License + +This project is licensed under the [MIT License](LICENSE.txt). + +## Acknowledgments + +- Based on the [MultiTerm Astro](https://github.com/stelcodes/multiterm-astro) theme by [Stel](https://github.com/stelcodes). diff --git a/astro.config.mjs b/astro.config.mjs new file mode 100644 index 0000000..3e882de --- /dev/null +++ b/astro.config.mjs @@ -0,0 +1,86 @@ +// @ts-check +import { defineConfig } from 'astro/config' +import tailwindcss from '@tailwindcss/vite' +import sitemap from '@astrojs/sitemap' +import mdx from '@astrojs/mdx' +import svelte from '@astrojs/svelte' +import { rehypeHeadingIds } from '@astrojs/markdown-remark' +import rehypeAutolinkHeadings from 'rehype-autolink-headings' +import expressiveCode from 'astro-expressive-code' +import siteConfig from './src/site.config' +import { pluginLineNumbers } from '@expressive-code/plugin-line-numbers' +import remarkDescription from './src/plugins/remark-description' /* Add description to frontmatter */ +import remarkReadingTime from './src/plugins/remark-reading-time' /* Add reading time to frontmatter */ +import rehypeTitleFigure from './src/plugins/rehype-title-figure' /* Wraps titles in figures */ +import { remarkGithubCard } from './src/plugins/remark-github-card' +import { fromHtmlIsomorphic } from 'hast-util-from-html-isomorphic' +import rehypeExternalLinks from 'rehype-external-links' +import remarkDirective from 'remark-directive' /* Handle ::: directives as nodes */ +import rehypeUnwrapImages from 'rehype-unwrap-images' +import { remarkAdmonitions } from './src/plugins/remark-admonitions' /* Add admonitions */ +import remarkCharacterDialogue from './src/plugins/remark-character-dialogue' /* Custom plugin to handle character admonitions */ +import remarkUnknownDirectives from './src/plugins/remark-unknown-directives' /* Custom plugin to handle unknown admonitions */ +import remarkMath from 'remark-math' /* for latex math support */ +import rehypeKatex from 'rehype-katex' /* again, for latex math support */ +import remarkGemoji from './src/plugins/remark-gemoji' /* for shortcode emoji support */ +import rehypePixelated from './src/plugins/rehype-pixelated' /* Custom plugin to handle pixelated images */ +import vercel from '@astrojs/vercel' + +// https://astro.build/config +export default defineConfig({ + adapter: vercel(), + site: siteConfig.site, + trailingSlash: siteConfig.trailingSlashes ? 'always' : 'never', + prefetch: true, + markdown: { + remarkPlugins: [ + [remarkDescription, { maxChars: 200 }], + remarkReadingTime, + remarkDirective, + remarkGithubCard, + remarkAdmonitions, + [remarkCharacterDialogue, { characters: siteConfig.characters }], + remarkUnknownDirectives, + remarkMath, + remarkGemoji, + ], + rehypePlugins: [ + [rehypeHeadingIds, { headingIdCompat: true }], + [rehypeAutolinkHeadings, { behavior: 'wrap' }], + rehypeTitleFigure, + [ + rehypeExternalLinks, + { + rel: ['noreferrer', 'noopener'], + target: '_blank', + }, + ], + rehypeUnwrapImages, + rehypePixelated, + rehypeKatex, + ], + }, + image: { + responsiveStyles: true, + }, + vite: { + plugins: [tailwindcss()], + }, + integrations: [ + svelte(), + sitemap(), + expressiveCode({ + themes: siteConfig.themes.include, + useDarkModeMediaQuery: false, + defaultProps: { + showLineNumbers: false, + wrap: false, + }, + plugins: [pluginLineNumbers()], + }), // Must come after expressive-code integration + mdx(), + ], + experimental: { + contentIntellisense: true, + }, +}) diff --git a/dev/README.md b/dev/README.md new file mode 100644 index 0000000..a73411b --- /dev/null +++ b/dev/README.md @@ -0,0 +1 @@ +The `theme-data.json` file is auto-generated and only used during theme development as a reference. It is not imported or required to build the site. Feel free to delete the whole `dev` directory if you like. diff --git a/dev/theme-data.json b/dev/theme-data.json new file mode 100644 index 0000000..4c1fcef --- /dev/null +++ b/dev/theme-data.json @@ -0,0 +1,1118 @@ +{ + "allKeys": { + "activityBar.activeBackground": 8, + "activityBar.activeBorder": 31, + "activityBar.background": 58, + "activityBar.border": 32, + "activityBar.dropBackground": 12, + "activityBar.dropBorder": 8, + "activityBar.foreground": 55, + "activityBar.inactiveForeground": 28, + "activityBarBadge.background": 57, + "activityBarBadge.foreground": 49, + "activityBarTop.foreground": 11, + "badge.background": 60, + "badge.foreground": 60, + "banner.background": 7, + "banner.foreground": 7, + "banner.iconForeground": 7, + "beginning.punctuation.definition.list.markdown": 10, + "brackethighlighter.angle": 10, + "brackethighlighter.curly": 10, + "brackethighlighter.quote": 10, + "brackethighlighter.round": 10, + "brackethighlighter.square": 10, + "brackethighlighter.tag": 10, + "brackethighlighter.unmatched": 10, + "breadcrumb.activeSelectionForeground": 31, + "breadcrumb.background": 20, + "breadcrumb.focusForeground": 33, + "breadcrumb.foreground": 33, + "breadcrumbPicker.background": 29, + "button.background": 60, + "button.border": 60, + "button.foreground": 60, + "button.hoverBackground": 60, + "button.secondaryBackground": 60, + "button.secondaryForeground": 60, + "button.secondaryHoverBackground": 60, + "button.separator": 60, + "carriage-return": 10, + "charts.blue": 12, + "charts.foreground": 12, + "charts.green": 12, + "charts.lines": 10, + "charts.orange": 12, + "charts.purple": 12, + "charts.red": 12, + "charts.yellow": 12, + "checkbox.background": 22, + "checkbox.border": 27, + "checkbox.foreground": 12, + "comment": 60, + "constant": 30, + "constant.character": 24, + "constant.character.escape": 31, + "constant.character.format.placeholder.other.python": 11, + "constant.escape": 7, + "constant.keyword.clojure": 7, + "constant.language": 37, + "constant.language.boolean": 19, + "constant.language.json": 10, + "constant.language.null": 7, + "constant.language.python": 7, + "constant.numeric": 43, + "constant.other": 7, + "constant.other.character-class.regexp": 13, + "constant.other.color": 10, + "constant.other.key": 12, + "constant.other.placeholder": 17, + "constant.other.reference.link": 10, + "constant.other.reference.link.markdown": 13, + "constant.other.symbol": 17, + "constant.sha.git-rebase": 9, + "contrastActiveBorder": 60, + "contrastBorder": 60, + "debugConsole.errorForeground": 19, + "debugConsole.infoForeground": 19, + "debugConsole.sourceForeground": 14, + "debugConsole.warningForeground": 19, + "debugConsoleInputIcon.foreground": 15, + "debugExceptionWidget.background": 19, + "debugExceptionWidget.border": 19, + "debugIcon.breakpointCurrentStackframeForeground": 12, + "debugIcon.breakpointDisabledForeground": 14, + "debugIcon.breakpointForeground": 19, + "debugIcon.breakpointStackframeForeground": 12, + "debugIcon.breakpointUnverifiedForeground": 12, + "debugIcon.continueForeground": 12, + "debugIcon.disconnectForeground": 12, + "debugIcon.pauseForeground": 12, + "debugIcon.restartForeground": 12, + "debugIcon.startForeground": 12, + "debugIcon.stepBackForeground": 12, + "debugIcon.stepIntoForeground": 12, + "debugIcon.stepOutForeground": 12, + "debugIcon.stepOverForeground": 12, + "debugIcon.stopForeground": 12, + "debugTokenExpression.boolean": 13, + "debugTokenExpression.error": 13, + "debugTokenExpression.name": 9, + "debugTokenExpression.number": 13, + "debugTokenExpression.string": 13, + "debugTokenExpression.value": 9, + "debugToolBar.background": 51, + "debugToolBar.border": 9, + "descriptionForeground": 60, + "diffEditor.border": 10, + "diffEditor.diagonalFill": 14, + "diffEditor.insertedLineBackground": 60, + "diffEditor.insertedTextBackground": 60, + "diffEditor.insertedTextBorder": 60, + "diffEditor.removedLineBackground": 60, + "diffEditor.removedTextBackground": 60, + "diffEditor.removedTextBorder": 60, + "diffEditorOverview.insertedForeground": 8, + "diffEditorOverview.removedForeground": 8, + "disabledForeground": 60, + "dropdown.background": 60, + "dropdown.border": 60, + "dropdown.foreground": 60, + "dropdown.listBackground": 21, + "editor.background": 60, + "editor.findMatchBackground": 60, + "editor.findMatchBorder": 22, + "editor.findMatchHighlightBackground": 60, + "editor.findMatchHighlightBorder": 12, + "editor.findRangeHighlightBackground": 60, + "editor.findRangeHighlightBorder": 8, + "editor.focusedStackFrameHighlightBackground": 21, + "editor.foldBackground": 24, + "editor.foreground": 60, + "editor.hoverHighlightBackground": 60, + "editor.inactiveSelectionBackground": 60, + "editor.lineHighlightBackground": 49, + "editor.lineHighlightBorder": 32, + "editor.linkedEditingBackground": 12, + "editor.rangeHighlightBackground": 25, + "editor.selectionBackground": 60, + "editor.selectionHighlightBackground": 60, + "editor.selectionHighlightBorder": 17, + "editor.snippetFinalTabstopHighlightBackground": 7, + "editor.snippetFinalTabstopHighlightBorder": 60, + "editor.snippetTabstopHighlightBackground": 60, + "editor.stackFrameHighlightBackground": 21, + "editor.wordHighlightBackground": 45, + "editor.wordHighlightBorder": 16, + "editor.wordHighlightStrongBackground": 43, + "editor.wordHighlightStrongBorder": 16, + "editorActiveLineNumber.foreground": 60, + "editorBracketHighlight.foreground1": 36, + "editorBracketHighlight.foreground2": 36, + "editorBracketHighlight.foreground3": 36, + "editorBracketHighlight.foreground4": 34, + "editorBracketHighlight.foreground5": 34, + "editorBracketHighlight.foreground6": 34, + "editorBracketHighlight.unexpectedBracket.foreground": 26, + "editorBracketMatch.background": 43, + "editorBracketMatch.border": 40, + "editorBracketPairGuide.activeBackground1": 7, + "editorBracketPairGuide.activeBackground2": 7, + "editorBracketPairGuide.activeBackground3": 7, + "editorBracketPairGuide.activeBackground4": 7, + "editorBracketPairGuide.activeBackground5": 7, + "editorBracketPairGuide.activeBackground6": 7, + "editorCodeLens.foreground": 26, + "editorCursor.background": 14, + "editorCursor.foreground": 46, + "editorError.background": 7, + "editorError.border": 9, + "editorError.foreground": 60, + "editorGroup.border": 60, + "editorGroup.dropBackground": 60, + "editorGroup.dropIntoPromptBackground": 60, + "editorGroup.dropIntoPromptBorder": 60, + "editorGroup.dropIntoPromptForeground": 60, + "editorGroup.emptyBackground": 60, + "editorGroup.focusedEmptyBorder": 60, + "editorGroupHeader.border": 60, + "editorGroupHeader.noTabsBackground": 60, + "editorGroupHeader.tabsBackground": 60, + "editorGroupHeader.tabsBorder": 60, + "editorGutter.addedBackground": 48, + "editorGutter.background": 19, + "editorGutter.commentRangeForeground": 14, + "editorGutter.deletedBackground": 48, + "editorGutter.foldingControlForeground": 12, + "editorGutter.modifiedBackground": 48, + "editorHint.foreground": 60, + "editorHoverWidget.background": 60, + "editorHoverWidget.border": 60, + "editorHoverWidget.foreground": 60, + "editorHoverWidget.highlightForeground": 7, + "editorHoverWidget.statusBarBackground": 60, + "editorIndentGuide.activeBackground": 38, + "editorIndentGuide.activeBackground1": 10, + "editorIndentGuide.background": 39, + "editorIndentGuide.background1": 10, + "editorInfo.background": 7, + "editorInfo.border": 8, + "editorInfo.foreground": 60, + "editorInlayHint.background": 60, + "editorInlayHint.foreground": 60, + "editorInlayHint.parameterBackground": 60, + "editorInlayHint.parameterForeground": 60, + "editorInlayHint.typeBackground": 60, + "editorInlayHint.typeForeground": 60, + "editorLightBulb.foreground": 60, + "editorLightBulbAutoFix.foreground": 60, + "editorLineNumber.activeForeground": 60, + "editorLineNumber.foreground": 60, + "editorLink.activeForeground": 60, + "editorMarkerNavigation.background": 27, + "editorMarkerNavigationError.background": 15, + "editorMarkerNavigationInfo.background": 12, + "editorMarkerNavigationWarning.background": 15, + "editorOverviewRuler.addedForeground": 20, + "editorOverviewRuler.background": 8, + "editorOverviewRuler.border": 41, + "editorOverviewRuler.commonContentForeground": 13, + "editorOverviewRuler.currentContentForeground": 16, + "editorOverviewRuler.deletedForeground": 20, + "editorOverviewRuler.errorForeground": 25, + "editorOverviewRuler.findMatchForeground": 23, + "editorOverviewRuler.incomingContentForeground": 16, + "editorOverviewRuler.infoForeground": 22, + "editorOverviewRuler.modifiedForeground": 24, + "editorOverviewRuler.rangeHighlightForeground": 14, + "editorOverviewRuler.selectionHighlightForeground": 16, + "editorOverviewRuler.warningForeground": 25, + "editorOverviewRuler.wordHighlightForeground": 18, + "editorOverviewRuler.wordHighlightStrongForeground": 18, + "editorPane.background": 60, + "editorRuler.foreground": 37, + "editorStickyScroll.background": 60, + "editorStickyScrollHover.background": 60, + "editorSuggestWidget.background": 40, + "editorSuggestWidget.border": 36, + "editorSuggestWidget.foreground": 27, + "editorSuggestWidget.highlightForeground": 28, + "editorSuggestWidget.selectedBackground": 38, + "editorWarning.background": 7, + "editorWarning.border": 9, + "editorWarning.foreground": 60, + "editorWhitespace.foreground": 49, + "editorWidget.background": 60, + "editorWidget.border": 60, + "editorWidget.foreground": 60, + "editorWidget.resizeBorder": 15, + "entity": 11, + "entity.name": 33, + "entity.name.class": 26, + "entity.name.constant": 14, + "entity.name.function": 54, + "entity.name.function.decorator": 7, + "entity.name.method.js": 7, + "entity.name.module.js": 7, + "entity.name.namespace": 21, + "entity.name.scope-resolution": 7, + "entity.name.section": 10, + "entity.name.section.group-title.ini": 11, + "entity.name.section.markdown": 9, + "entity.name.selector": 7, + "entity.name.tag": 59, + "entity.name.tag.yaml": 19, + "entity.name.type": 42, + "entity.name.type.class": 13, + "entity.name.type.module": 7, + "entity.name.type.namespace.cs": 10, + "entity.name.variable.field.cs": 9, + "entity.name.variable.local.cs": 9, + "entity.other.attribute-name": 50, + "entity.other.attribute-name.class": 18, + "entity.other.attribute-name.class.css": 8, + "entity.other.attribute-name.id": 13, + "entity.other.inherited-class": 41, + "errorForeground": 60, + "extensionBadge.remoteBackground": 11, + "extensionBadge.remoteForeground": 16, + "extensionButton.prominentBackground": 37, + "extensionButton.prominentForeground": 24, + "extensionButton.prominentHoverBackground": 36, + "extensionIcon.preReleaseForeground": 9, + "extensionIcon.starForeground": 10, + "extensionIcon.verifiedForeground": 9, + "fenced_code.block.language": 10, + "focusBorder": 60, + "foreground": 60, + "gitDecoration.addedResourceForeground": 32, + "gitDecoration.conflictingResourceForeground": 40, + "gitDecoration.deletedResourceForeground": 44, + "gitDecoration.ignoredResourceForeground": 51, + "gitDecoration.modifiedResourceForeground": 45, + "gitDecoration.stageDeletedResourceForeground": 13, + "gitDecoration.stageModifiedResourceForeground": 13, + "gitDecoration.submoduleResourceForeground": 23, + "gitDecoration.untrackedResourceForeground": 45, + "gitlens.closedAutolinkedIssueIconColor": 10, + "gitlens.closedPullRequestIconColor": 12, + "gitlens.decorations.branchAheadForegroundColor": 12, + "gitlens.decorations.branchBehindForegroundColor": 12, + "gitlens.decorations.branchDivergedForegroundColor": 12, + "gitlens.decorations.branchMissingUpstreamForegroundColor": 12, + "gitlens.decorations.statusMergingOrRebasingConflictForegroundColor": 10, + "gitlens.decorations.statusMergingOrRebasingForegroundColor": 10, + "gitlens.decorations.workspaceCurrentForegroundColor": 10, + "gitlens.decorations.workspaceRepoMissingForegroundColor": 10, + "gitlens.decorations.workspaceRepoOpenForegroundColor": 10, + "gitlens.decorations.worktreeHasUncommittedChangesForegroundColor": 10, + "gitlens.decorations.worktreeMissingForegroundColor": 10, + "gitlens.graphChangesColumnAddedColor": 10, + "gitlens.graphChangesColumnDeletedColor": 10, + "gitlens.graphLane10Color": 10, + "gitlens.graphLane1Color": 10, + "gitlens.graphLane2Color": 10, + "gitlens.graphLane3Color": 10, + "gitlens.graphLane4Color": 10, + "gitlens.graphLane5Color": 10, + "gitlens.graphLane6Color": 10, + "gitlens.graphLane7Color": 10, + "gitlens.graphLane8Color": 10, + "gitlens.graphLane9Color": 10, + "gitlens.graphMinimapMarkerHeadColor": 10, + "gitlens.graphMinimapMarkerHighlightsColor": 10, + "gitlens.graphMinimapMarkerLocalBranchesColor": 10, + "gitlens.graphMinimapMarkerRemoteBranchesColor": 10, + "gitlens.graphMinimapMarkerStashesColor": 10, + "gitlens.graphMinimapMarkerTagsColor": 10, + "gitlens.graphMinimapMarkerUpstreamColor": 10, + "gitlens.graphScrollMarkerHeadColor": 10, + "gitlens.graphScrollMarkerHighlightsColor": 10, + "gitlens.graphScrollMarkerLocalBranchesColor": 10, + "gitlens.graphScrollMarkerRemoteBranchesColor": 10, + "gitlens.graphScrollMarkerStashesColor": 10, + "gitlens.graphScrollMarkerTagsColor": 10, + "gitlens.graphScrollMarkerUpstreamColor": 10, + "gitlens.gutterBackgroundColor": 13, + "gitlens.gutterForegroundColor": 13, + "gitlens.gutterUncommittedForegroundColor": 13, + "gitlens.lineHighlightBackgroundColor": 12, + "gitlens.lineHighlightOverviewRulerColor": 12, + "gitlens.mergedPullRequestIconColor": 12, + "gitlens.openAutolinkedIssueIconColor": 10, + "gitlens.openPullRequestIconColor": 12, + "gitlens.trailingLineBackgroundColor": 10, + "gitlens.trailingLineForegroundColor": 13, + "gitlens.unpublishedChangesIconColor": 10, + "gitlens.unpublishedCommitIconColor": 12, + "gitlens.unpulledChangesIconColor": 12, + "header": 10, + "icon.foreground": 60, + "input.background": 60, + "input.border": 43, + "input.foreground": 60, + "input.placeholderForeground": 60, + "inputOption.activeBackground": 60, + "inputOption.activeBorder": 60, + "inputOption.activeForeground": 60, + "inputOption.hoverBackground": 60, + "inputValidation.errorBackground": 60, + "inputValidation.errorBorder": 60, + "inputValidation.errorForeground": 13, + "inputValidation.infoBackground": 60, + "inputValidation.infoBorder": 60, + "inputValidation.infoForeground": 12, + "inputValidation.warningBackground": 60, + "inputValidation.warningBorder": 60, + "inputValidation.warningForeground": 12, + "invalid": 28, + "invalid.broken": 13, + "invalid.deprecated": 30, + "invalid.illegal": 29, + "invalid.unimplemented": 13, + "keybindingLabel.background": 60, + "keybindingLabel.border": 60, + "keybindingLabel.bottomBorder": 60, + "keybindingLabel.foreground": 60, + "keyword": 56, + "keyword.control": 27, + "keyword.control.anchor.regexp": 7, + "keyword.control.directive": 12, + "keyword.control.import": 7, + "keyword.control.module": 9, + "keyword.control.preamble.latex": 8, + "keyword.operator": 33, + "keyword.operator.assignment": 8, + "keyword.operator.logical": 12, + "keyword.operator.logical.python": 10, + "keyword.operator.new": 20, + "keyword.operator.quantifier.regexp": 14, + "keyword.operator.relational": 7, + "keyword.other": 13, + "keyword.other.definition.ini": 14, + "keyword.other.import.java": 9, + "keyword.other.package.java": 9, + "keyword.other.special-method": 10, + "keyword.other.substitution": 7, + "keyword.other.template": 9, + "keyword.other.unit": 28, + "keyword.other.using.cs": 8, + "list.activeSelectionBackground": 60, + "list.activeSelectionForeground": 60, + "list.dropBackground": 36, + "list.errorForeground": 17, + "list.focusBackground": 53, + "list.focusForeground": 41, + "list.focusOutline": 9, + "list.highlightForeground": 52, + "list.hoverBackground": 58, + "list.hoverForeground": 45, + "list.inactiveFocusBackground": 19, + "list.inactiveSelectionBackground": 57, + "list.inactiveSelectionForeground": 49, + "list.invalidItemForeground": 11, + "list.warningForeground": 22, + "listFilterWidget.background": 18, + "listFilterWidget.noMatchesOutline": 18, + "listFilterWidget.outline": 18, + "markup.bold": 47, + "markup.bold markup.italic": 12, + "markup.changed": 38, + "markup.changed.diff": 8, + "markup.deleted": 46, + "markup.deleted.diff": 13, + "markup.fenced_code.block": 11, + "markup.fenced_code.block.markdown punctuation.definition.markdown": 7, + "markup.heading": 46, + "markup.heading entity.name": 11, + "markup.heading.setext": 7, + "markup.heading.setext.1.markdown": 9, + "markup.heading.setext.2.markdown": 9, + "markup.ignored": 10, + "markup.inline.raw": 25, + "markup.inline.raw.string.markdown": 18, + "markup.inserted": 46, + "markup.inserted.diff": 13, + "markup.italic": 41, + "markup.italic markup.bold": 11, + "markup.quote": 31, + "markup.quote punctuation.definition.blockquote.markdown": 7, + "markup.quote.markdown": 7, + "markup.table": 8, + "markup.underline.link": 18, + "markup.underline.link.image.markdown": 10, + "markup.underline.link.markdown": 12, + "markup.untracked": 10, + "menu.background": 60, + "menu.border": 20, + "menu.foreground": 60, + "menu.selectionBackground": 60, + "menu.selectionBorder": 13, + "menu.selectionForeground": 60, + "menu.separatorBackground": 60, + "menubar.selectionBackground": 21, + "menubar.selectionBorder": 11, + "menubar.selectionForeground": 19, + "merge.border": 12, + "merge.commonContentBackground": 9, + "merge.commonHeaderBackground": 9, + "merge.currentContentBackground": 22, + "merge.currentHeaderBackground": 25, + "merge.incomingContentBackground": 22, + "merge.incomingHeaderBackground": 25, + "message.error": 11, + "meta.attribute.rust": 7, + "meta.block": 11, + "meta.brace": 16, + "meta.class-method.js entity.name.function.js": 7, + "meta.definition.variable": 12, + "meta.diff": 9, + "meta.diff.header": 24, + "meta.diff.header.from-file": 22, + "meta.diff.header.to-file": 19, + "meta.diff.range": 15, + "meta.embedded": 14, + "meta.function-call": 11, + "meta.function-call.arguments": 14, + "meta.function-call.arguments.python": 7, + "meta.function-call.generic": 7, + "meta.group.braces.curly constant.other.object.key.js string.unquoted.label.js": 7, + "meta.import": 7, + "meta.jsx.children": 16, + "meta.module-reference": 10, + "meta.object-literal.key": 18, + "meta.output": 10, + "meta.preprocessor": 13, + "meta.preprocessor.numeric": 9, + "meta.preprocessor.string": 9, + "meta.property-name": 13, + "meta.return-type": 7, + "meta.selector": 13, + "meta.separator": 20, + "meta.separator.markdown": 9, + "meta.tag": 20, + "meta.tag.sgml": 8, + "meta.template.expression": 13, + "meta.type.annotation": 9, + "meta.use.php": 7, + "minimap.background": 10, + "minimap.errorHighlight": 13, + "minimap.findMatchHighlight": 14, + "minimap.selectionHighlight": 18, + "minimap.warningHighlight": 12, + "minimapGutter.addedBackground": 20, + "minimapGutter.deletedBackground": 20, + "minimapGutter.modifiedBackground": 20, + "minimapSlider.activeBackground": 15, + "minimapSlider.background": 15, + "minimapSlider.hoverBackground": 15, + "modifier": 7, + "notebook.cellBorderColor": 14, + "notebook.cellEditorBackground": 12, + "notebook.focusedCellBorder": 18, + "notebook.focusedEditorBorder": 9, + "notebook.inactiveFocusedCellBorder": 8, + "notificationCenter.border": 12, + "notificationCenterHeader.background": 25, + "notificationCenterHeader.foreground": 22, + "notificationLink.foreground": 20, + "notifications.background": 33, + "notifications.border": 23, + "notifications.foreground": 29, + "notificationsErrorIcon.foreground": 22, + "notificationsInfoIcon.foreground": 22, + "notificationsWarningIcon.foreground": 22, + "notificationToast.border": 12, + "object": 7, + "panel.background": 60, + "panel.border": 60, + "panelInput.border": 16, + "panelSection.border": 8, + "panelSection.dropBackground": 8, + "panelSectionHeader.background": 60, + "panelTitle.activeBorder": 60, + "panelTitle.activeForeground": 60, + "panelTitle.inactiveForeground": 60, + "peekView.border": 43, + "peekViewEditor.background": 51, + "peekViewEditor.matchHighlightBackground": 46, + "peekViewEditor.matchHighlightBorder": 7, + "peekViewEditorGutter.background": 20, + "peekViewResult.background": 47, + "peekViewResult.fileForeground": 23, + "peekViewResult.lineForeground": 23, + "peekViewResult.matchHighlightBackground": 40, + "peekViewResult.selectionBackground": 35, + "peekViewResult.selectionForeground": 24, + "peekViewTitle.background": 38, + "peekViewTitleDescription.foreground": 29, + "peekViewTitleLabel.foreground": 20, + "pickerGroup.border": 60, + "pickerGroup.foreground": 60, + "ports.iconRunningProcessForeground": 11, + "problemsErrorIcon.foreground": 60, + "problemsInfoIcon.foreground": 60, + "problemsWarningIcon.foreground": 60, + "progressBar.background": 47, + "punctuation": 33, + "punctuation.accessor": 9, + "punctuation.definition.bold.markdown": 7, + "punctuation.definition.changed": 10, + "punctuation.definition.character-class.regexp": 10, + "punctuation.definition.comment": 39, + "punctuation.definition.constant.markdown": 7, + "punctuation.definition.deleted": 11, + "punctuation.definition.from-file.diff": 11, + "punctuation.definition.group.regexp": 9, + "punctuation.definition.heading.markdown": 7, + "punctuation.definition.inserted": 11, + "punctuation.definition.keyword": 8, + "punctuation.definition.list_item.markdown": 7, + "punctuation.definition.list.begin.markdown": 23, + "punctuation.definition.metadata.markdown": 10, + "punctuation.definition.raw.markdown": 8, + "punctuation.definition.string": 20, + "punctuation.definition.string.begin.markdown": 13, + "punctuation.definition.string.end.markdown": 13, + "punctuation.definition.tag": 35, + "punctuation.definition.tag.begin.html": 9, + "punctuation.definition.tag.end.html": 9, + "punctuation.definition.tag.html": 9, + "punctuation.definition.template-expression": 11, + "punctuation.definition.template-expression.begin": 14, + "punctuation.definition.template-expression.end": 14, + "punctuation.definition.to-file.diff": 8, + "punctuation.definition.variable": 7, + "punctuation.section.embedded": 26, + "punctuation.section.embedded.begin": 7, + "punctuation.section.embedded.end": 7, + "punctuation.separator.inheritance.php": 7, + "punctuation.separator.key-value": 11, + "quickInput.background": 60, + "quickInput.foreground": 60, + "quickInputList.focusBackground": 12, + "quickInputTitle.background": 60, + "sash.hoverBorder": 15, + "scmGraph.historyItemHoverDefaultLabelForeground": 7, + "scmGraph.historyItemHoverLabelForeground": 7, + "scrollbar.shadow": 60, + "scrollbarSlider.activeBackground": 60, + "scrollbarSlider.background": 60, + "scrollbarSlider.hoverBackground": 60, + "selection.background": 37, + "settings.checkboxBackground": 10, + "settings.checkboxForeground": 10, + "settings.dropdownBackground": 14, + "settings.dropdownForeground": 11, + "settings.focusedRowBackground": 16, + "settings.headerForeground": 35, + "settings.modifiedItemIndicator": 30, + "settings.numberInputBackground": 15, + "settings.numberInputBorder": 10, + "settings.numberInputForeground": 10, + "settings.textInputBackground": 15, + "settings.textInputBorder": 10, + "settings.textInputForeground": 10, + "sideBar.background": 57, + "sideBar.border": 37, + "sideBar.dropBackground": 11, + "sideBar.foreground": 44, + "sideBarSectionHeader.background": 57, + "sideBarSectionHeader.border": 26, + "sideBarSectionHeader.foreground": 36, + "sideBarTitle.foreground": 45, + "sideBySideEditor.horizontalBorder": 60, + "sideBySideEditor.verticalBorder": 60, + "source.cpp meta.block variable.other": 7, + "source.css entity.name.tag": 7, + "source.css support.type.property-name": 9, + "source.go storage.type": 11, + "source.groovy.embedded": 12, + "source.js constant.other.object.key.js string.unquoted.label.js": 7, + "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json": 7, + "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json": 7, + "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json": 7, + "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json": 7, + "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json": 7, + "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json": 7, + "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json": 7, + "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json": 7, + "source.json meta.structure.dictionary.json support.type.property-name.json": 7, + "source.less support.type.property-name": 7, + "source.postcss support.type.property-name": 7, + "source.reason keyword.control.less": 7, + "source.reason string.regexp": 7, + "source.reason support.property-value": 7, + "source.regexp": 10, + "source.sass keyword.control": 7, + "source.sass support.type.property-name": 7, + "source.scss support.type.property-name": 7, + "source.stylus support.type.property-name": 8, + "statusBar.background": 58, + "statusBar.border": 33, + "statusBar.debuggingBackground": 56, + "statusBar.debuggingBorder": 17, + "statusBar.debuggingForeground": 45, + "statusBar.foreground": 53, + "statusBar.noFolderBackground": 56, + "statusBar.noFolderBorder": 13, + "statusBar.noFolderForeground": 14, + "statusBarItem.activeBackground": 27, + "statusBarItem.errorBackground": 13, + "statusBarItem.errorForeground": 12, + "statusBarItem.hoverBackground": 31, + "statusBarItem.prominentBackground": 32, + "statusBarItem.prominentForeground": 10, + "statusBarItem.prominentHoverBackground": 20, + "statusBarItem.remoteBackground": 41, + "statusBarItem.remoteForeground": 36, + "statusBarItem.warningBackground": 8, + "statusBarItem.warningForeground": 8, + "storage": 37, + "storage.modifier": 33, + "storage.modifier.import": 13, + "storage.modifier.import.java": 17, + "storage.modifier.lifetime.rust": 7, + "storage.modifier.package": 11, + "storage.modifier.package.java": 11, + "storage.type": 47, + "storage.type.annotation": 16, + "storage.type.annotation.java": 7, + "storage.type.cs": 18, + "storage.type.function.arrow.ts": 7, + "storage.type.function.python": 11, + "storage.type.generic.java": 7, + "storage.type.haskell": 7, + "storage.type.java": 21, + "storage.type.php": 8, + "storage.type.string.python": 10, + "string": 59, + "string punctuation.section.embedded source": 10, + "string variable": 15, + "string.comment": 12, + "string.other.link": 19, + "string.other.link.description.markdown": 8, + "string.other.link.description.title.markdown": 8, + "string.other.link.title.markdown": 28, + "string.quoted.double.json": 8, + "string.regexp": 42, + "string.regexp constant.character.escape": 11, + "string.regexp source.ruby.embedded": 11, + "string.regexp string.regexp.arbitrary-repitition": 10, + "string.regexp.character-class": 10, + "string.tag": 8, + "string.unquoted.alias.graphql": 7, + "string.value": 8, + "support": 19, + "support.class": 34, + "support.class.component": 16, + "support.class.component.tsx": 7, + "support.class.latex": 8, + "support.class.math.block.environment.latex": 7, + "support.constant": 45, + "support.constant.font-name": 7, + "support.constant.json": 7, + "support.constant.math": 7, + "support.constant.property-value": 7, + "support.function": 41, + "support.function.be.latex": 8, + "support.function.builtin": 10, + "support.function.git-rebase": 9, + "support.function.section.latex": 8, + "support.module": 7, + "support.node": 7, + "support.other.namespace.php": 11, + "support.other.variable": 8, + "support.type": 37, + "support.type.primitive": 9, + "support.type.property-name": 17, + "support.type.property-name.css": 21, + "support.type.property-name.json": 25, + "support.type.sys-types": 7, + "support.type.vendored.property-name": 8, + "support.variable": 31, + "support.variable.magic.python": 7, + "support.variable.property": 9, + "symbolIcon.arrayForeground": 15, + "symbolIcon.booleanForeground": 12, + "symbolIcon.classForeground": 17, + "symbolIcon.colorForeground": 15, + "symbolIcon.constantForeground": 12, + "symbolIcon.constructorForeground": 17, + "symbolIcon.enumeratorForeground": 17, + "symbolIcon.enumeratorMemberForeground": 17, + "symbolIcon.eventForeground": 17, + "symbolIcon.fieldForeground": 17, + "symbolIcon.fileForeground": 15, + "symbolIcon.folderForeground": 15, + "symbolIcon.functionForeground": 17, + "symbolIcon.interfaceForeground": 17, + "symbolIcon.keyForeground": 15, + "symbolIcon.keywordForeground": 15, + "symbolIcon.methodForeground": 17, + "symbolIcon.moduleForeground": 15, + "symbolIcon.namespaceForeground": 15, + "symbolIcon.nullForeground": 15, + "symbolIcon.numberForeground": 15, + "symbolIcon.objectForeground": 15, + "symbolIcon.operatorForeground": 15, + "symbolIcon.packageForeground": 15, + "symbolIcon.propertyForeground": 15, + "symbolIcon.referenceForeground": 15, + "symbolIcon.snippetForeground": 15, + "symbolIcon.stringForeground": 15, + "symbolIcon.structForeground": 15, + "symbolIcon.textForeground": 15, + "symbolIcon.typeParameterForeground": 15, + "symbolIcon.unitForeground": 15, + "symbolIcon.variableForeground": 17, + "tab.activeBackground": 60, + "tab.activeBorder": 60, + "tab.activeBorderTop": 60, + "tab.activeForeground": 60, + "tab.activeModifiedBorder": 60, + "tab.border": 60, + "tab.hoverBackground": 60, + "tab.hoverBorder": 60, + "tab.hoverForeground": 60, + "tab.inactiveBackground": 60, + "tab.inactiveForeground": 60, + "tab.inactiveModifiedBorder": 60, + "tab.lastPinnedBorder": 60, + "tab.unfocusedActiveBackground": 60, + "tab.unfocusedActiveBorder": 60, + "tab.unfocusedActiveBorderTop": 60, + "tab.unfocusedActiveForeground": 60, + "tab.unfocusedActiveModifiedBorder": 60, + "tab.unfocusedHoverBackground": 60, + "tab.unfocusedHoverBorder": 60, + "tab.unfocusedHoverForeground": 60, + "tab.unfocusedInactiveBackground": 60, + "tab.unfocusedInactiveForeground": 60, + "tab.unfocusedInactiveModifiedBorder": 60, + "tag.decorator.js entity.name.tag.js": 7, + "tag.decorator.js punctuation.definition.tag.js": 7, + "terminal.ansiBlack": 60, + "terminal.ansiBlue": 60, + "terminal.ansiBrightBlack": 60, + "terminal.ansiBrightBlue": 60, + "terminal.ansiBrightCyan": 60, + "terminal.ansiBrightGreen": 60, + "terminal.ansiBrightMagenta": 60, + "terminal.ansiBrightRed": 60, + "terminal.ansiBrightWhite": 60, + "terminal.ansiBrightYellow": 60, + "terminal.ansiCyan": 60, + "terminal.ansiGreen": 60, + "terminal.ansiMagenta": 60, + "terminal.ansiRed": 60, + "terminal.ansiWhite": 60, + "terminal.ansiYellow": 60, + "terminal.background": 60, + "terminal.border": 11, + "terminal.dropBackground": 7, + "terminal.foreground": 40, + "terminal.selectionBackground": 20, + "terminal.tab.activeBorder": 10, + "terminalCursor.background": 18, + "terminalCursor.foreground": 19, + "testing.iconErrored": 7, + "testing.iconFailed": 7, + "testing.iconPassed": 7, + "testing.iconQueued": 7, + "testing.iconSkipped": 7, + "testing.iconUnset": 7, + "testing.runAction": 7, + "text.html.markdown markup.inline.raw.markdown": 7, + "text.html.markdown markup.inline.raw.markdown punctuation.definition.raw.markdown": 7, + "textBlockQuote.background": 60, + "textBlockQuote.border": 60, + "textCodeBlock.background": 60, + "textLink.activeForeground": 60, + "textLink.foreground": 60, + "textPreformat.foreground": 60, + "textSeparator.foreground": 60, + "titleBar.activeBackground": 60, + "titleBar.activeForeground": 60, + "titleBar.border": 60, + "titleBar.inactiveBackground": 60, + "titleBar.inactiveForeground": 60, + "token.debug-token": 9, + "token.error-token": 9, + "token.info-token": 9, + "token.warn-token": 9, + "toolbar.activeBackground": 60, + "toolbar.hoverBackground": 60, + "tree.indentGuidesStroke": 60, + "variable": 49, + "variable.function": 19, + "variable.function.constructor": 7, + "variable.import.parameter.js": 7, + "variable.language": 41, + "variable.language.fenced.markdown": 7, + "variable.language.super": 8, + "variable.language.this": 20, + "variable.object.property": 11, + "variable.other": 21, + "variable.other.alias.yaml": 7, + "variable.other.class.js": 10, + "variable.other.constant": 21, + "variable.other.constant.js": 8, + "variable.other.constant.ts": 7, + "variable.other.enummember": 20, + "variable.other.property": 9, + "variable.other.readwrite.cs": 8, + "variable.parameter": 29, + "variable.parameter.function": 15, + "variable.parameter.function.language.special.self.python": 11, + "walkThrough.embeddedEditorBackground": 23, + "welcomePage.buttonBackground": 16, + "welcomePage.buttonHoverBackground": 16, + "welcomePage.progress.foreground": 7, + "widget.border": 8, + "widget.shadow": 60, + "window.activeBorder": 8, + "window.inactiveBorder": 8 + }, + "commonKeys": [ + "badge.background", + "badge.foreground", + "button.background", + "button.border", + "button.foreground", + "button.hoverBackground", + "button.secondaryBackground", + "button.secondaryForeground", + "button.secondaryHoverBackground", + "button.separator", + "comment", + "contrastActiveBorder", + "contrastBorder", + "descriptionForeground", + "diffEditor.insertedLineBackground", + "diffEditor.insertedTextBackground", + "diffEditor.insertedTextBorder", + "diffEditor.removedLineBackground", + "diffEditor.removedTextBackground", + "diffEditor.removedTextBorder", + "disabledForeground", + "dropdown.background", + "dropdown.border", + "dropdown.foreground", + "editor.background", + "editor.findMatchBackground", + "editor.findMatchHighlightBackground", + "editor.findRangeHighlightBackground", + "editor.foreground", + "editor.hoverHighlightBackground", + "editor.inactiveSelectionBackground", + "editor.selectionBackground", + "editor.selectionHighlightBackground", + "editor.snippetFinalTabstopHighlightBorder", + "editor.snippetTabstopHighlightBackground", + "editorActiveLineNumber.foreground", + "editorError.foreground", + "editorGroup.border", + "editorGroup.dropBackground", + "editorGroup.dropIntoPromptBackground", + "editorGroup.dropIntoPromptBorder", + "editorGroup.dropIntoPromptForeground", + "editorGroup.emptyBackground", + "editorGroup.focusedEmptyBorder", + "editorGroupHeader.border", + "editorGroupHeader.noTabsBackground", + "editorGroupHeader.tabsBackground", + "editorGroupHeader.tabsBorder", + "editorHint.foreground", + "editorHoverWidget.background", + "editorHoverWidget.border", + "editorHoverWidget.foreground", + "editorHoverWidget.statusBarBackground", + "editorInfo.foreground", + "editorInlayHint.background", + "editorInlayHint.foreground", + "editorInlayHint.parameterBackground", + "editorInlayHint.parameterForeground", + "editorInlayHint.typeBackground", + "editorInlayHint.typeForeground", + "editorLightBulb.foreground", + "editorLightBulbAutoFix.foreground", + "editorLineNumber.activeForeground", + "editorLineNumber.foreground", + "editorLink.activeForeground", + "editorPane.background", + "editorStickyScroll.background", + "editorStickyScrollHover.background", + "editorWarning.foreground", + "editorWidget.background", + "editorWidget.border", + "editorWidget.foreground", + "errorForeground", + "focusBorder", + "foreground", + "icon.foreground", + "input.background", + "input.foreground", + "input.placeholderForeground", + "inputOption.activeBackground", + "inputOption.activeBorder", + "inputOption.activeForeground", + "inputOption.hoverBackground", + "inputValidation.errorBackground", + "inputValidation.errorBorder", + "inputValidation.infoBackground", + "inputValidation.infoBorder", + "inputValidation.warningBackground", + "inputValidation.warningBorder", + "keybindingLabel.background", + "keybindingLabel.border", + "keybindingLabel.bottomBorder", + "keybindingLabel.foreground", + "list.activeSelectionBackground", + "list.activeSelectionForeground", + "menu.background", + "menu.foreground", + "menu.selectionBackground", + "menu.selectionForeground", + "menu.separatorBackground", + "panel.background", + "panel.border", + "panelSectionHeader.background", + "panelTitle.activeBorder", + "panelTitle.activeForeground", + "panelTitle.inactiveForeground", + "pickerGroup.border", + "pickerGroup.foreground", + "problemsErrorIcon.foreground", + "problemsInfoIcon.foreground", + "problemsWarningIcon.foreground", + "quickInput.background", + "quickInput.foreground", + "quickInputTitle.background", + "scrollbar.shadow", + "scrollbarSlider.activeBackground", + "scrollbarSlider.background", + "scrollbarSlider.hoverBackground", + "sideBySideEditor.horizontalBorder", + "sideBySideEditor.verticalBorder", + "tab.activeBackground", + "tab.activeBorder", + "tab.activeBorderTop", + "tab.activeForeground", + "tab.activeModifiedBorder", + "tab.border", + "tab.hoverBackground", + "tab.hoverBorder", + "tab.hoverForeground", + "tab.inactiveBackground", + "tab.inactiveForeground", + "tab.inactiveModifiedBorder", + "tab.lastPinnedBorder", + "tab.unfocusedActiveBackground", + "tab.unfocusedActiveBorder", + "tab.unfocusedActiveBorderTop", + "tab.unfocusedActiveForeground", + "tab.unfocusedActiveModifiedBorder", + "tab.unfocusedHoverBackground", + "tab.unfocusedHoverBorder", + "tab.unfocusedHoverForeground", + "tab.unfocusedInactiveBackground", + "tab.unfocusedInactiveForeground", + "tab.unfocusedInactiveModifiedBorder", + "terminal.ansiBlack", + "terminal.ansiBlue", + "terminal.ansiBrightBlack", + "terminal.ansiBrightBlue", + "terminal.ansiBrightCyan", + "terminal.ansiBrightGreen", + "terminal.ansiBrightMagenta", + "terminal.ansiBrightRed", + "terminal.ansiBrightWhite", + "terminal.ansiBrightYellow", + "terminal.ansiCyan", + "terminal.ansiGreen", + "terminal.ansiMagenta", + "terminal.ansiRed", + "terminal.ansiWhite", + "terminal.ansiYellow", + "terminal.background", + "textBlockQuote.background", + "textBlockQuote.border", + "textCodeBlock.background", + "textLink.activeForeground", + "textLink.foreground", + "textPreformat.foreground", + "textSeparator.foreground", + "titleBar.activeBackground", + "titleBar.activeForeground", + "titleBar.border", + "titleBar.inactiveBackground", + "titleBar.inactiveForeground", + "toolbar.activeBackground", + "toolbar.hoverBackground", + "tree.indentGuidesStroke", + "widget.shadow" + ], + "bundledThemes": [ + "andromeeda", + "aurora-x", + "ayu-dark", + "catppuccin-frappe", + "catppuccin-latte", + "catppuccin-macchiato", + "catppuccin-mocha", + "dark-plus", + "dracula", + "dracula-soft", + "everforest-dark", + "everforest-light", + "github-dark", + "github-dark-default", + "github-dark-dimmed", + "github-dark-high-contrast", + "github-light", + "github-light-default", + "github-light-high-contrast", + "gruvbox-dark-hard", + "gruvbox-dark-medium", + "gruvbox-dark-soft", + "gruvbox-light-hard", + "gruvbox-light-medium", + "gruvbox-light-soft", + "houston", + "kanagawa-dragon", + "kanagawa-lotus", + "kanagawa-wave", + "laserwave", + "light-plus", + "material-theme", + "material-theme-darker", + "material-theme-lighter", + "material-theme-ocean", + "material-theme-palenight", + "min-dark", + "min-light", + "monokai", + "night-owl", + "nord", + "one-dark-pro", + "one-light", + "plastic", + "poimandres", + "red", + "rose-pine", + "rose-pine-dawn", + "rose-pine-moon", + "slack-dark", + "slack-ochin", + "snazzy-light", + "solarized-dark", + "solarized-light", + "synthwave-84", + "tokyo-night", + "vesper", + "vitesse-black", + "vitesse-dark", + "vitesse-light" + ] +} diff --git a/dev/themeData.ts b/dev/themeData.ts new file mode 100644 index 0000000..cbb32c8 --- /dev/null +++ b/dev/themeData.ts @@ -0,0 +1,44 @@ +import { loadShikiTheme, type BundledShikiTheme } from 'astro-expressive-code' +import { bundledThemes } from 'shiki' +import { flattenThemeColors } from '~/utils' + +// Use this function to export theme data for analysis +const exportThemeData = async () => { + const keyArrays = await Promise.all( + Object.keys(bundledThemes).map(async (theme) => { + const exTheme = await loadShikiTheme(theme as BundledShikiTheme) + const flatTheme = flattenThemeColors(exTheme) + return Object.keys(flatTheme) + }), + ) + // Find intersection of all key arrays + const commonKeys = keyArrays.reduce((acc, keys) => + acc.filter((key) => keys.includes(key)), + ) + const allKeys = keyArrays.flat() + const keyCount = allKeys.reduce((acc: Record, key) => { + acc[key] = (acc[key] || 0) + 1 + return acc + }, {}) + // Filter keys that appear in less than 10% of themes + // and sort them alphabetically + const sortedEntries = Object.entries(keyCount) + .filter(([_, count]) => count > Math.ceil(Object.keys(bundledThemes).length / 10)) + .sort((a, b) => a[0].localeCompare(b[0])) + const jsonData = JSON.stringify( + { + allKeys: Object.fromEntries(sortedEntries), + commonKeys: commonKeys.sort(), + bundledThemes: Object.keys(bundledThemes).sort(), + }, + null, + 2, + ) + const outputPath = './data/theme-data.json' + // Write to file + const fs = await import('fs/promises') + await fs.writeFile(outputPath, jsonData, 'utf-8') + console.log(`Theme data written to ${outputPath}`) +} + +await exportThemeData() diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..e207f8c --- /dev/null +++ b/package-lock.json @@ -0,0 +1,10796 @@ +{ + "name": "multiterm-astro", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "multiterm-astro", + "version": "1.0.0", + "dependencies": { + "@astrojs/markdown-remark": "^6.3.6", + "@astrojs/mdx": "^4.3.4", + "@astrojs/node": "^9.5.2", + "@astrojs/rss": "^4.0.12", + "@astrojs/sitemap": "^3.5.1", + "@astrojs/svelte": "^7.2.5", + "@astrojs/ts-plugin": "^1.10.4", + "@astrojs/vercel": "^9.0.4", + "@expo-google-fonts/jetbrains-mono": "^0.4.0", + "@expressive-code/plugin-line-numbers": "^0.41.3", + "@fontsource-variable/jetbrains-mono": "^5.2.6", + "@fontsource/varela": "^5.2.8", + "@pagefind/default-ui": "^1.4.0", + "@resvg/resvg-js": "^2.6.2", + "@stripe/stripe-js": "^8.6.4", + "@tailwindcss/vite": "^4.1.13", + "@types/hast": "^3.0.4", + "@types/react": "^19.1.12", + "@types/react-dom": "^19.1.9", + "astro": "^5.13.5", + "astro-expressive-code": "^0.41.3", + "color": "^5.0.0", + "cookie": "^1.1.1", + "date-fns": "^4.1.0", + "emoji-regex": "^10.5.0", + "gemoji": "^8.1.0", + "hast-util-from-html-isomorphic": "^2.0.0", + "hastscript": "^9.0.1", + "katex": "^0.16.22", + "markdown-it": "^14.1.0", + "mdast-util-directive": "^3.1.0", + "mdast-util-to-string": "^4.0.0", + "octokit": "^5.0.5", + "reading-time": "^1.5.0", + "rehype-autolink-headings": "^7.1.0", + "rehype-external-links": "^3.0.0", + "rehype-katex": "^7.0.1", + "rehype-unwrap-images": "^1.0.0", + "remark-directive": "^4.0.0", + "remark-math": "^6.0.0", + "sanitize-html": "^2.17.0", + "satori": "^0.18.2", + "satori-html": "^0.3.2", + "stripe": "^20.2.0", + "svelte": "^5.49.0", + "tailwindcss": "^4.1.13", + "typescript": "^5.9.2", + "unified": "^11.0.5" + }, + "devDependencies": { + "@types/cookie": "^0.6.0", + "@types/markdown-it": "^14.1.2", + "@types/sanitize-html": "^2.16.0", + "pagefind": "^1.4.0", + "prettier": "3.6.2", + "prettier-plugin-astro": "0.14.1", + "sass-embedded": "^1.92.1" + } + }, + "node_modules/@astrojs/compiler": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-2.13.0.tgz", + "integrity": "sha512-mqVORhUJViA28fwHYaWmsXSzLO9osbdZ5ImUfxBarqsYdMlPbqAqGJCxsNzvppp1BEzc1mJNjOVvQqeDN8Vspw==", + "license": "MIT" + }, + "node_modules/@astrojs/internal-helpers": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.7.2.tgz", + "integrity": "sha512-KCkCqR3Goym79soqEtbtLzJfqhTWMyVaizUi35FLzgGSzBotSw8DB1qwsu7U96ihOJgYhDk2nVPz+3LnXPeX6g==", + "license": "MIT" + }, + "node_modules/@astrojs/markdown-remark": { + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-6.3.6.tgz", + "integrity": "sha512-bwylYktCTsLMVoCOEHbn2GSUA3c5KT/qilekBKA3CBng0bo1TYjNZPr761vxumRk9kJGqTOtU+fgCAp5Vwokug==", + "license": "MIT", + "dependencies": { + "@astrojs/internal-helpers": "0.7.2", + "@astrojs/prism": "3.3.0", + "github-slugger": "^2.0.0", + "hast-util-from-html": "^2.0.3", + "hast-util-to-text": "^4.0.2", + "import-meta-resolve": "^4.1.0", + "js-yaml": "^4.1.0", + "mdast-util-definitions": "^6.0.0", + "rehype-raw": "^7.0.0", + "rehype-stringify": "^10.0.1", + "remark-gfm": "^4.0.1", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.1.2", + "remark-smartypants": "^3.0.2", + "shiki": "^3.2.1", + "smol-toml": "^1.3.4", + "unified": "^11.0.5", + "unist-util-remove-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "unist-util-visit-parents": "^6.0.1", + "vfile": "^6.0.3" + } + }, + "node_modules/@astrojs/mdx": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@astrojs/mdx/-/mdx-4.3.4.tgz", + "integrity": "sha512-Ew3iP+6zuzzJWNEH5Qr1iknrue1heEfgmfuMpuwLaSwqlUiJQ0NDb2oxKosgWU1ROYmVf1H4KCmS6QdMWKyFjw==", + "license": "MIT", + "dependencies": { + "@astrojs/markdown-remark": "6.3.6", + "@mdx-js/mdx": "^3.1.0", + "acorn": "^8.14.1", + "es-module-lexer": "^1.6.0", + "estree-util-visit": "^2.0.0", + "hast-util-to-html": "^9.0.5", + "kleur": "^4.1.5", + "rehype-raw": "^7.0.0", + "remark-gfm": "^4.0.1", + "remark-smartypants": "^3.0.2", + "source-map": "^0.7.4", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.3" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0" + }, + "peerDependencies": { + "astro": "^5.0.0" + } + }, + "node_modules/@astrojs/node": { + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/@astrojs/node/-/node-9.5.2.tgz", + "integrity": "sha512-85/x+FRwbNGDip1TzSGMiak31/6LvBhA8auqd9lLoHaM5XElk+uIfIr3KjJqucDojE0PtiLk1lMSwD9gd3YlGg==", + "license": "MIT", + "dependencies": { + "@astrojs/internal-helpers": "0.7.5", + "send": "^1.2.1", + "server-destroy": "^1.0.1" + }, + "peerDependencies": { + "astro": "^5.14.3" + } + }, + "node_modules/@astrojs/node/node_modules/@astrojs/internal-helpers": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.7.5.tgz", + "integrity": "sha512-vreGnYSSKhAjFJCWAwe/CNhONvoc5lokxtRoZims+0wa3KbHBdPHSSthJsKxPd8d/aic6lWKpRTYGY/hsgK6EA==", + "license": "MIT" + }, + "node_modules/@astrojs/prism": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-3.3.0.tgz", + "integrity": "sha512-q8VwfU/fDZNoDOf+r7jUnMC2//H2l0TuQ6FkGJL8vD8nw/q5KiL3DS1KKBI3QhI9UQhpJ5dc7AtqfbXWuOgLCQ==", + "license": "MIT", + "dependencies": { + "prismjs": "^1.30.0" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0" + } + }, + "node_modules/@astrojs/rss": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/@astrojs/rss/-/rss-4.0.12.tgz", + "integrity": "sha512-O5yyxHuDVb6DQ6VLOrbUVFSm+NpObulPxjs6XT9q3tC+RoKbN4HXMZLpv0LvXd1qdAjzVgJ1NFD+zKHJNDXikw==", + "license": "MIT", + "dependencies": { + "fast-xml-parser": "^5.2.0", + "kleur": "^4.1.5" + } + }, + "node_modules/@astrojs/sitemap": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@astrojs/sitemap/-/sitemap-3.5.1.tgz", + "integrity": "sha512-uX5z52GLtQTgOe8r3jeGmFRYrFe52mdpLYJzqjvL1cdy5Kg3MLOZEvaZ/OCH0fSq0t7e50uJQ6oBMZG0ffszBg==", + "license": "MIT", + "dependencies": { + "sitemap": "^8.0.0", + "stream-replace-string": "^2.0.0", + "zod": "^3.24.4" + } + }, + "node_modules/@astrojs/svelte": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/@astrojs/svelte/-/svelte-7.2.5.tgz", + "integrity": "sha512-Tl5aF/dYbzzd7sLpxMBX6pRz3yJ1B4pilt9G3GJbj0I0/doJHIEmerNQsnlxX0/InNKUhMXXN8wyyet9VhA+Zw==", + "license": "MIT", + "dependencies": { + "@sveltejs/vite-plugin-svelte": "^5.1.1", + "svelte2tsx": "^0.7.46", + "vite": "^6.4.1" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0" + }, + "peerDependencies": { + "astro": "^5.0.0", + "svelte": "^5.1.16", + "typescript": "^5.3.3" + } + }, + "node_modules/@astrojs/telemetry": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.3.0.tgz", + "integrity": "sha512-UFBgfeldP06qu6khs/yY+q1cDAaArM2/7AEIqQ9Cuvf7B1hNLq0xDrZkct+QoIGyjq56y8IaE2I3CTvG99mlhQ==", + "license": "MIT", + "dependencies": { + "ci-info": "^4.2.0", + "debug": "^4.4.0", + "dlv": "^1.1.3", + "dset": "^3.1.4", + "is-docker": "^3.0.0", + "is-wsl": "^3.1.0", + "which-pm-runs": "^1.1.0" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0" + } + }, + "node_modules/@astrojs/ts-plugin": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@astrojs/ts-plugin/-/ts-plugin-1.10.4.tgz", + "integrity": "sha512-rapryQINgv5VLZF884R/wmgX3mM9eH1PC/I3kkPV9rP6lEWrRN1YClF3bGcDHFrf8EtTLc0Wqxne1Uetpevozg==", + "license": "MIT", + "dependencies": { + "@astrojs/compiler": "^2.10.3", + "@astrojs/yaml2ts": "^0.2.2", + "@jridgewell/sourcemap-codec": "^1.4.15", + "@volar/language-core": "~2.4.7", + "@volar/typescript": "~2.4.7", + "semver": "^7.3.8", + "vscode-languageserver-textdocument": "^1.0.11" + } + }, + "node_modules/@astrojs/vercel": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/@astrojs/vercel/-/vercel-9.0.4.tgz", + "integrity": "sha512-Nn5c0CODcx69FnNUhAcAhlDQ/Je2lLrlPmbMMI77ZvLMfyZI5NZyKD7MiKEeaYK/VTnx6fNI5rFHm6seqEPRtQ==", + "license": "MIT", + "dependencies": { + "@astrojs/internal-helpers": "0.7.5", + "@vercel/analytics": "^1.6.1", + "@vercel/functions": "^2.2.13", + "@vercel/nft": "0.30.4", + "@vercel/routing-utils": "^5.3.1", + "esbuild": "^0.25.0", + "tinyglobby": "^0.2.15" + }, + "peerDependencies": { + "astro": "^5.0.0" + } + }, + "node_modules/@astrojs/vercel/node_modules/@astrojs/internal-helpers": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.7.5.tgz", + "integrity": "sha512-vreGnYSSKhAjFJCWAwe/CNhONvoc5lokxtRoZims+0wa3KbHBdPHSSthJsKxPd8d/aic6lWKpRTYGY/hsgK6EA==", + "license": "MIT" + }, + "node_modules/@astrojs/yaml2ts": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@astrojs/yaml2ts/-/yaml2ts-0.2.2.tgz", + "integrity": "sha512-GOfvSr5Nqy2z5XiwqTouBBpy5FyI6DEe+/g/Mk5am9SjILN1S5fOEvYK0GuWHg98yS/dobP4m8qyqw/URW35fQ==", + "license": "MIT", + "dependencies": { + "yaml": "^2.5.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.6.tgz", + "integrity": "sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.6" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.6.tgz", + "integrity": "sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bufbuild/protobuf": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.6.0.tgz", + "integrity": "sha512-6cuonJVNOIL7lTj5zgo/Rc2bKAo4/GvN+rKCrUj7GdEHRzCk8zKOfFwUsL9nAVk5rSIsRmlgcpLzTRysopEeeg==", + "devOptional": true, + "license": "(Apache-2.0 AND BSD-3-Clause)" + }, + "node_modules/@capsizecss/unpack": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@capsizecss/unpack/-/unpack-4.0.0.tgz", + "integrity": "sha512-VERIM64vtTP1C4mxQ5thVT9fK0apjPFobqybMtA1UdUujWka24ERHbRHFGmpbbhp73MhV+KSsHQH9C6uOTdEQA==", + "license": "MIT", + "dependencies": { + "fontkitten": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@ctrl/tinycolor": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-4.1.0.tgz", + "integrity": "sha512-WyOx8cJQ+FQus4Mm4uPIZA64gbk3Wxh0so5Lcii0aJifqwoVOlfFtorjLE0Hen4OYyHZMXDWqMmaQemBhgxFRQ==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.8.1.tgz", + "integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.6.tgz", + "integrity": "sha512-ShbM/3XxwuxjFiuVBHA+d3j5dyac0aEVVq1oluIDf71hUw0aRF59dV/efUsIwFnR6m8JNM2FjZOzmaZ8yG61kw==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.6.tgz", + "integrity": "sha512-S8ToEOVfg++AU/bHwdksHNnyLyVM+eMVAOf6yRKFitnwnbwwPNqKr3srzFRe7nzV69RQKb5DgchIX5pt3L53xg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.6.tgz", + "integrity": "sha512-hd5zdUarsK6strW+3Wxi5qWws+rJhCCbMiC9QZyzoxfk5uHRIE8T287giQxzVpEvCwuJ9Qjg6bEjcRJcgfLqoA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.6.tgz", + "integrity": "sha512-0Z7KpHSr3VBIO9A/1wcT3NTy7EB4oNC4upJ5ye3R7taCc2GUdeynSLArnon5G8scPwaU866d3H4BCrE5xLW25A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.6.tgz", + "integrity": "sha512-FFCssz3XBavjxcFxKsGy2DYK5VSvJqa6y5HXljKzhRZ87LvEi13brPrf/wdyl/BbpbMKJNOr1Sd0jtW4Ge1pAA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.6.tgz", + "integrity": "sha512-GfXs5kry/TkGM2vKqK2oyiLFygJRqKVhawu3+DOCk7OxLy/6jYkWXhlHwOoTb0WqGnWGAS7sooxbZowy+pK9Yg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.6.tgz", + "integrity": "sha512-aoLF2c3OvDn2XDTRvn8hN6DRzVVpDlj2B/F66clWd/FHLiHaG3aVZjxQX2DYphA5y/evbdGvC6Us13tvyt4pWg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.6.tgz", + "integrity": "sha512-2SkqTjTSo2dYi/jzFbU9Plt1vk0+nNg8YC8rOXXea+iA3hfNJWebKYPs3xnOUf9+ZWhKAaxnQNUf2X9LOpeiMQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.6.tgz", + "integrity": "sha512-SZHQlzvqv4Du5PrKE2faN0qlbsaW/3QQfUUc6yO2EjFcA83xnwm91UbEEVx4ApZ9Z5oG8Bxz4qPE+HFwtVcfyw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.6.tgz", + "integrity": "sha512-b967hU0gqKd9Drsh/UuAm21Khpoh6mPBSgz8mKRq4P5mVK8bpA+hQzmm/ZwGVULSNBzKdZPQBRT3+WuVavcWsQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.6.tgz", + "integrity": "sha512-aHWdQ2AAltRkLPOsKdi3xv0mZ8fUGPdlKEjIEhxCPm5yKEThcUjHpWB1idN74lfXGnZ5SULQSgtr5Qos5B0bPw==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.6.tgz", + "integrity": "sha512-VgKCsHdXRSQ7E1+QXGdRPlQ/e08bN6WMQb27/TMfV+vPjjTImuT9PmLXupRlC90S1JeNNW5lzkAEO/McKeJ2yg==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.6.tgz", + "integrity": "sha512-WViNlpivRKT9/py3kCmkHnn44GkGXVdXfdc4drNmRl15zVQ2+D2uFwdlGh6IuK5AAnGTo2qPB1Djppj+t78rzw==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.6.tgz", + "integrity": "sha512-wyYKZ9NTdmAMb5730I38lBqVu6cKl4ZfYXIs31Baf8aoOtB4xSGi3THmDYt4BTFHk7/EcVixkOV2uZfwU3Q2Jw==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.6.tgz", + "integrity": "sha512-KZh7bAGGcrinEj4qzilJ4hqTY3Dg2U82c8bv+e1xqNqZCrCyc+TL9AUEn5WGKDzm3CfC5RODE/qc96OcbIe33w==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.6.tgz", + "integrity": "sha512-9N1LsTwAuE9oj6lHMyyAM+ucxGiVnEqUdp4v7IaMmrwb06ZTEVCIs3oPPplVsnjPfyjmxwHxHMF8b6vzUVAUGw==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.6.tgz", + "integrity": "sha512-A6bJB41b4lKFWRKNrWoP2LHsjVzNiaurf7wyj/XtFNTsnPuxwEBWHLty+ZE0dWBKuSK1fvKgrKaNjBS7qbFKig==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.6.tgz", + "integrity": "sha512-IjA+DcwoVpjEvyxZddDqBY+uJ2Snc6duLpjmkXm/v4xuS3H+3FkLZlDm9ZsAbF9rsfP3zeA0/ArNDORZgrxR/Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.6.tgz", + "integrity": "sha512-dUXuZr5WenIDlMHdMkvDc1FAu4xdWixTCRgP7RQLBOkkGgwuuzaGSYcOpW4jFxzpzL1ejb8yF620UxAqnBrR9g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.6.tgz", + "integrity": "sha512-l8ZCvXP0tbTJ3iaqdNf3pjaOSd5ex/e6/omLIQCVBLmHTlfXW3zAxQ4fnDmPLOB1x9xrcSi/xtCWFwCZRIaEwg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.6.tgz", + "integrity": "sha512-hKrmDa0aOFOr71KQ/19JC7az1P0GWtCN1t2ahYAf4O007DHZt/dW8ym5+CUdJhQ/qkZmI1HAF8KkJbEFtCL7gw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.6.tgz", + "integrity": "sha512-+SqBcAWoB1fYKmpWoQP4pGtx+pUUC//RNYhFdbcSA16617cchuryuhOCRpPsjCblKukAckWsV+aQ3UKT/RMPcA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.6.tgz", + "integrity": "sha512-dyCGxv1/Br7MiSC42qinGL8KkG4kX0pEsdb0+TKhmJZgCUDBGmyo1/ArCjNGiOLiIAgdbWgmWgib4HoCi5t7kA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.6.tgz", + "integrity": "sha512-42QOgcZeZOvXfsCBJF5Afw73t4veOId//XD3i+/9gSkhSV6Gk3VPlWncctI+JcOyERv85FUo7RxuxGy+z8A43Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.6.tgz", + "integrity": "sha512-4AWhgXmDuYN7rJI6ORB+uU9DHLq/erBbuMoAuB4VWJTu5KtCgcKYPynF0YI1VkBNuEfjNlLrFr9KZPJzrtLkrQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.6.tgz", + "integrity": "sha512-NgJPHHbEpLQgDH2MjQu90pzW/5vvXIZ7KOnPyNBm92A6WgZ/7b6fJyUBjoumLqeOQQGqY2QjQxRo97ah4Sj0cA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@expo-google-fonts/jetbrains-mono": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@expo-google-fonts/jetbrains-mono/-/jetbrains-mono-0.4.0.tgz", + "integrity": "sha512-nPF2HgDayw9V9lublqdlNXbfyKXGuJN91kAeGy9TGsQaJWsrMuvIIsJlyElvBV9bGOe/TY+oKgKLJGSltVsVjg==", + "license": "MIT AND OFL-1.1" + }, + "node_modules/@expressive-code/core": { + "version": "0.41.3", + "resolved": "https://registry.npmjs.org/@expressive-code/core/-/core-0.41.3.tgz", + "integrity": "sha512-9qzohqU7O0+JwMEEgQhnBPOw5DtsQRBXhW++5fvEywsuX44vCGGof1SL5OvPElvNgaWZ4pFZAFSlkNOkGyLwSQ==", + "license": "MIT", + "dependencies": { + "@ctrl/tinycolor": "^4.0.4", + "hast-util-select": "^6.0.2", + "hast-util-to-html": "^9.0.1", + "hast-util-to-text": "^4.0.1", + "hastscript": "^9.0.0", + "postcss": "^8.4.38", + "postcss-nested": "^6.0.1", + "unist-util-visit": "^5.0.0", + "unist-util-visit-parents": "^6.0.1" + } + }, + "node_modules/@expressive-code/plugin-frames": { + "version": "0.41.3", + "resolved": "https://registry.npmjs.org/@expressive-code/plugin-frames/-/plugin-frames-0.41.3.tgz", + "integrity": "sha512-rFQtmf/3N2CK3Cq/uERweMTYZnBu+CwxBdHuOftEmfA9iBE7gTVvwpbh82P9ZxkPLvc40UMhYt7uNuAZexycRQ==", + "license": "MIT", + "dependencies": { + "@expressive-code/core": "^0.41.3" + } + }, + "node_modules/@expressive-code/plugin-line-numbers": { + "version": "0.41.3", + "resolved": "https://registry.npmjs.org/@expressive-code/plugin-line-numbers/-/plugin-line-numbers-0.41.3.tgz", + "integrity": "sha512-eig82a4CRC3XgVPQ2S/TMDcLiHJokOCD/mAdNVImpD3segVewxfjGgtj5DXQRo0E0q6f0R0EH34YzTFl5CEPqg==", + "license": "MIT", + "dependencies": { + "@expressive-code/core": "^0.41.3" + } + }, + "node_modules/@expressive-code/plugin-shiki": { + "version": "0.41.3", + "resolved": "https://registry.npmjs.org/@expressive-code/plugin-shiki/-/plugin-shiki-0.41.3.tgz", + "integrity": "sha512-RlTARoopzhFJIOVHLGvuXJ8DCEme/hjV+ZnRJBIxzxsKVpGPW4Oshqg9xGhWTYdHstTsxO663s0cdBLzZj9TQA==", + "license": "MIT", + "dependencies": { + "@expressive-code/core": "^0.41.3", + "shiki": "^3.2.2" + } + }, + "node_modules/@expressive-code/plugin-text-markers": { + "version": "0.41.3", + "resolved": "https://registry.npmjs.org/@expressive-code/plugin-text-markers/-/plugin-text-markers-0.41.3.tgz", + "integrity": "sha512-SN8tkIzDpA0HLAscEYD2IVrfLiid6qEdE9QLlGVSxO1KEw7qYvjpbNBQjUjMr5/jvTJ7ys6zysU2vLPHE0sb2g==", + "license": "MIT", + "dependencies": { + "@expressive-code/core": "^0.41.3" + } + }, + "node_modules/@fontsource-variable/jetbrains-mono": { + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/@fontsource-variable/jetbrains-mono/-/jetbrains-mono-5.2.6.tgz", + "integrity": "sha512-1pvtyK6H1paBOixbtZ9xfQgArVQ4SJMW3WSGZPOd5PiW3yg0t8umwKnjDMzW2ofb7qSdiXnsnIaHPT36vEOdlg==", + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, + "node_modules/@fontsource/varela": { + "version": "5.2.8", + "resolved": "https://registry.npmjs.org/@fontsource/varela/-/varela-5.2.8.tgz", + "integrity": "sha512-RxsGft7UQFMHlXQ5M2XMz7c6H4BhRe1/lRwx2NTl0GznuHwVuafg6VyTGrCyGTetGHoCWl8hrfZztI+RkOvPRA==", + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, + "node_modules/@img/colour": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.0.0.tgz", + "integrity": "sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz", + "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz", + "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz", + "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz", + "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz", + "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz", + "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz", + "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==", + "cpu": [ + "ppc64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-riscv64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz", + "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==", + "cpu": [ + "riscv64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz", + "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz", + "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz", + "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz", + "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz", + "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz", + "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz", + "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==", + "cpu": [ + "ppc64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-riscv64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz", + "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==", + "cpu": [ + "riscv64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-riscv64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz", + "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz", + "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz", + "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz", + "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz", + "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.7.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz", + "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz", + "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz", + "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.30", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.30.tgz", + "integrity": "sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-2.0.3.tgz", + "integrity": "sha512-uwPAhccfFJlsfCxMYTwOdVfOz3xqyj8xYL3zJj8f0pb30tLohnnFPhLuqp4/qoEz8sNxe4SESZedcBojRefIzg==", + "license": "BSD-3-Clause", + "dependencies": { + "consola": "^3.2.3", + "detect-libc": "^2.0.0", + "https-proxy-agent": "^7.0.5", + "node-fetch": "^2.6.7", + "nopt": "^8.0.0", + "semver": "^7.5.3", + "tar": "^7.4.0" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@mdx-js/mdx": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.1.0.tgz", + "integrity": "sha512-/QxEhPAvGwbQmy1Px8F899L5Uc2KZ6JtXwlCgJmjSTBedwOZkByYcBG4GceIGPXRDsmfxhHazuS+hlOShRLeDw==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdx": "^2.0.0", + "collapse-white-space": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "estree-util-scope": "^1.0.0", + "estree-walker": "^3.0.0", + "hast-util-to-jsx-runtime": "^2.0.0", + "markdown-extensions": "^2.0.0", + "recma-build-jsx": "^1.0.0", + "recma-jsx": "^1.0.0", + "recma-stringify": "^1.0.0", + "rehype-recma": "^1.0.0", + "remark-mdx": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.0.0", + "source-map": "^0.7.0", + "unified": "^11.0.0", + "unist-util-position-from-estree": "^2.0.0", + "unist-util-stringify-position": "^4.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@octokit/app": { + "version": "16.1.2", + "resolved": "https://registry.npmjs.org/@octokit/app/-/app-16.1.2.tgz", + "integrity": "sha512-8j7sEpUYVj18dxvh0KWj6W/l6uAiVRBl1JBDVRqH1VHKAO/G5eRVl4yEoYACjakWers1DjUkcCHyJNQK47JqyQ==", + "license": "MIT", + "dependencies": { + "@octokit/auth-app": "^8.1.2", + "@octokit/auth-unauthenticated": "^7.0.3", + "@octokit/core": "^7.0.6", + "@octokit/oauth-app": "^8.0.3", + "@octokit/plugin-paginate-rest": "^14.0.0", + "@octokit/types": "^16.0.0", + "@octokit/webhooks": "^14.0.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/auth-app": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/@octokit/auth-app/-/auth-app-8.1.2.tgz", + "integrity": "sha512-db8VO0PqXxfzI6GdjtgEFHY9tzqUql5xMFXYA12juq8TeTgPAuiiP3zid4h50lwlIP457p5+56PnJOgd2GGBuw==", + "license": "MIT", + "dependencies": { + "@octokit/auth-oauth-app": "^9.0.3", + "@octokit/auth-oauth-user": "^6.0.2", + "@octokit/request": "^10.0.6", + "@octokit/request-error": "^7.0.2", + "@octokit/types": "^16.0.0", + "toad-cache": "^3.7.0", + "universal-github-app-jwt": "^2.2.0", + "universal-user-agent": "^7.0.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/auth-oauth-app": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-app/-/auth-oauth-app-9.0.3.tgz", + "integrity": "sha512-+yoFQquaF8OxJSxTb7rnytBIC2ZLbLqA/yb71I4ZXT9+Slw4TziV9j/kyGhUFRRTF2+7WlnIWsePZCWHs+OGjg==", + "license": "MIT", + "dependencies": { + "@octokit/auth-oauth-device": "^8.0.3", + "@octokit/auth-oauth-user": "^6.0.2", + "@octokit/request": "^10.0.6", + "@octokit/types": "^16.0.0", + "universal-user-agent": "^7.0.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/auth-oauth-device": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-device/-/auth-oauth-device-8.0.3.tgz", + "integrity": "sha512-zh2W0mKKMh/VWZhSqlaCzY7qFyrgd9oTWmTmHaXnHNeQRCZr/CXy2jCgHo4e4dJVTiuxP5dLa0YM5p5QVhJHbw==", + "license": "MIT", + "dependencies": { + "@octokit/oauth-methods": "^6.0.2", + "@octokit/request": "^10.0.6", + "@octokit/types": "^16.0.0", + "universal-user-agent": "^7.0.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/auth-oauth-user": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-user/-/auth-oauth-user-6.0.2.tgz", + "integrity": "sha512-qLoPPc6E6GJoz3XeDG/pnDhJpTkODTGG4kY0/Py154i/I003O9NazkrwJwRuzgCalhzyIeWQ+6MDvkUmKXjg/A==", + "license": "MIT", + "dependencies": { + "@octokit/auth-oauth-device": "^8.0.3", + "@octokit/oauth-methods": "^6.0.2", + "@octokit/request": "^10.0.6", + "@octokit/types": "^16.0.0", + "universal-user-agent": "^7.0.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/auth-token": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-6.0.0.tgz", + "integrity": "sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w==", + "license": "MIT", + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/auth-unauthenticated": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@octokit/auth-unauthenticated/-/auth-unauthenticated-7.0.3.tgz", + "integrity": "sha512-8Jb1mtUdmBHL7lGmop9mU9ArMRUTRhg8vp0T1VtZ4yd9vEm3zcLwmjQkhNEduKawOOORie61xhtYIhTDN+ZQ3g==", + "license": "MIT", + "dependencies": { + "@octokit/request-error": "^7.0.2", + "@octokit/types": "^16.0.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/core": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-7.0.6.tgz", + "integrity": "sha512-DhGl4xMVFGVIyMwswXeyzdL4uXD5OGILGX5N8Y+f6W7LhC1Ze2poSNrkF/fedpVDHEEZ+PHFW0vL14I+mm8K3Q==", + "license": "MIT", + "dependencies": { + "@octokit/auth-token": "^6.0.0", + "@octokit/graphql": "^9.0.3", + "@octokit/request": "^10.0.6", + "@octokit/request-error": "^7.0.2", + "@octokit/types": "^16.0.0", + "before-after-hook": "^4.0.0", + "universal-user-agent": "^7.0.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/endpoint": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-11.0.2.tgz", + "integrity": "sha512-4zCpzP1fWc7QlqunZ5bSEjxc6yLAlRTnDwKtgXfcI/FxxGoqedDG8V2+xJ60bV2kODqcGB+nATdtap/XYq2NZQ==", + "license": "MIT", + "dependencies": { + "@octokit/types": "^16.0.0", + "universal-user-agent": "^7.0.2" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/graphql": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-9.0.3.tgz", + "integrity": "sha512-grAEuupr/C1rALFnXTv6ZQhFuL1D8G5y8CN04RgrO4FIPMrtm+mcZzFG7dcBm+nq+1ppNixu+Jd78aeJOYxlGA==", + "license": "MIT", + "dependencies": { + "@octokit/request": "^10.0.6", + "@octokit/types": "^16.0.0", + "universal-user-agent": "^7.0.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/oauth-app": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@octokit/oauth-app/-/oauth-app-8.0.3.tgz", + "integrity": "sha512-jnAjvTsPepyUaMu9e69hYBuozEPgYqP4Z3UnpmvoIzHDpf8EXDGvTY1l1jK0RsZ194oRd+k6Hm13oRU8EoDFwg==", + "license": "MIT", + "dependencies": { + "@octokit/auth-oauth-app": "^9.0.2", + "@octokit/auth-oauth-user": "^6.0.1", + "@octokit/auth-unauthenticated": "^7.0.2", + "@octokit/core": "^7.0.5", + "@octokit/oauth-authorization-url": "^8.0.0", + "@octokit/oauth-methods": "^6.0.1", + "@types/aws-lambda": "^8.10.83", + "universal-user-agent": "^7.0.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/oauth-authorization-url": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@octokit/oauth-authorization-url/-/oauth-authorization-url-8.0.0.tgz", + "integrity": "sha512-7QoLPRh/ssEA/HuHBHdVdSgF8xNLz/Bc5m9fZkArJE5bb6NmVkDm3anKxXPmN1zh6b5WKZPRr3697xKT/yM3qQ==", + "license": "MIT", + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/oauth-methods": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@octokit/oauth-methods/-/oauth-methods-6.0.2.tgz", + "integrity": "sha512-HiNOO3MqLxlt5Da5bZbLV8Zarnphi4y9XehrbaFMkcoJ+FL7sMxH/UlUsCVxpddVu4qvNDrBdaTVE2o4ITK8ng==", + "license": "MIT", + "dependencies": { + "@octokit/oauth-authorization-url": "^8.0.0", + "@octokit/request": "^10.0.6", + "@octokit/request-error": "^7.0.2", + "@octokit/types": "^16.0.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/openapi-types": { + "version": "27.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-27.0.0.tgz", + "integrity": "sha512-whrdktVs1h6gtR+09+QsNk2+FO+49j6ga1c55YZudfEG+oKJVvJLQi3zkOm5JjiUXAagWK2tI2kTGKJ2Ys7MGA==", + "license": "MIT" + }, + "node_modules/@octokit/openapi-webhooks-types": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-webhooks-types/-/openapi-webhooks-types-12.1.0.tgz", + "integrity": "sha512-WiuzhOsiOvb7W3Pvmhf8d2C6qaLHXrWiLBP4nJ/4kydu+wpagV5Fkz9RfQwV2afYzv3PB+3xYgp4mAdNGjDprA==", + "license": "MIT" + }, + "node_modules/@octokit/plugin-paginate-graphql": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-graphql/-/plugin-paginate-graphql-6.0.0.tgz", + "integrity": "sha512-crfpnIoFiBtRkvPqOyLOsw12XsveYuY2ieP6uYDosoUegBJpSVxGwut9sxUgFFcll3VTOTqpUf8yGd8x1OmAkQ==", + "license": "MIT", + "engines": { + "node": ">= 20" + }, + "peerDependencies": { + "@octokit/core": ">=6" + } + }, + "node_modules/@octokit/plugin-paginate-rest": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-14.0.0.tgz", + "integrity": "sha512-fNVRE7ufJiAA3XUrha2omTA39M6IXIc6GIZLvlbsm8QOQCYvpq/LkMNGyFlB1d8hTDzsAXa3OKtybdMAYsV/fw==", + "license": "MIT", + "dependencies": { + "@octokit/types": "^16.0.0" + }, + "engines": { + "node": ">= 20" + }, + "peerDependencies": { + "@octokit/core": ">=6" + } + }, + "node_modules/@octokit/plugin-rest-endpoint-methods": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-17.0.0.tgz", + "integrity": "sha512-B5yCyIlOJFPqUUeiD0cnBJwWJO8lkJs5d8+ze9QDP6SvfiXSz1BF+91+0MeI1d2yxgOhU/O+CvtiZ9jSkHhFAw==", + "license": "MIT", + "dependencies": { + "@octokit/types": "^16.0.0" + }, + "engines": { + "node": ">= 20" + }, + "peerDependencies": { + "@octokit/core": ">=6" + } + }, + "node_modules/@octokit/plugin-retry": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-8.0.3.tgz", + "integrity": "sha512-vKGx1i3MC0za53IzYBSBXcrhmd+daQDzuZfYDd52X5S0M2otf3kVZTVP8bLA3EkU0lTvd1WEC2OlNNa4G+dohA==", + "license": "MIT", + "dependencies": { + "@octokit/request-error": "^7.0.2", + "@octokit/types": "^16.0.0", + "bottleneck": "^2.15.3" + }, + "engines": { + "node": ">= 20" + }, + "peerDependencies": { + "@octokit/core": ">=7" + } + }, + "node_modules/@octokit/plugin-throttling": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-11.0.3.tgz", + "integrity": "sha512-34eE0RkFCKycLl2D2kq7W+LovheM/ex3AwZCYN8udpi6bxsyjZidb2McXs69hZhLmJlDqTSP8cH+jSRpiaijBg==", + "license": "MIT", + "dependencies": { + "@octokit/types": "^16.0.0", + "bottleneck": "^2.15.3" + }, + "engines": { + "node": ">= 20" + }, + "peerDependencies": { + "@octokit/core": "^7.0.0" + } + }, + "node_modules/@octokit/request": { + "version": "10.0.7", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-10.0.7.tgz", + "integrity": "sha512-v93h0i1yu4idj8qFPZwjehoJx4j3Ntn+JhXsdJrG9pYaX6j/XRz2RmasMUHtNgQD39nrv/VwTWSqK0RNXR8upA==", + "license": "MIT", + "dependencies": { + "@octokit/endpoint": "^11.0.2", + "@octokit/request-error": "^7.0.2", + "@octokit/types": "^16.0.0", + "fast-content-type-parse": "^3.0.0", + "universal-user-agent": "^7.0.2" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/request-error": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-7.1.0.tgz", + "integrity": "sha512-KMQIfq5sOPpkQYajXHwnhjCC0slzCNScLHs9JafXc4RAJI+9f+jNDlBNaIMTvazOPLgb4BnlhGJOTbnN0wIjPw==", + "license": "MIT", + "dependencies": { + "@octokit/types": "^16.0.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/types": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-16.0.0.tgz", + "integrity": "sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg==", + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^27.0.0" + } + }, + "node_modules/@octokit/webhooks": { + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/@octokit/webhooks/-/webhooks-14.2.0.tgz", + "integrity": "sha512-da6KbdNCV5sr1/txD896V+6W0iamFWrvVl8cHkBSPT+YlvmT3DwXa4jxZnQc+gnuTEqSWbBeoSZYTayXH9wXcw==", + "license": "MIT", + "dependencies": { + "@octokit/openapi-webhooks-types": "12.1.0", + "@octokit/request-error": "^7.0.0", + "@octokit/webhooks-methods": "^6.0.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/webhooks-methods": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@octokit/webhooks-methods/-/webhooks-methods-6.0.0.tgz", + "integrity": "sha512-MFlzzoDJVw/GcbfzVC1RLR36QqkTLUf79vLVO3D+xn7r0QgxnFoLZgtrzxiQErAjFUOdH6fas2KeQJ1yr/qaXQ==", + "license": "MIT", + "engines": { + "node": ">= 20" + } + }, + "node_modules/@oslojs/encoding": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@oslojs/encoding/-/encoding-1.1.0.tgz", + "integrity": "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==", + "license": "MIT" + }, + "node_modules/@pagefind/darwin-arm64": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pagefind/darwin-arm64/-/darwin-arm64-1.4.0.tgz", + "integrity": "sha512-2vMqkbv3lbx1Awea90gTaBsvpzgRs7MuSgKDxW0m9oV1GPZCZbZBJg/qL83GIUEN2BFlY46dtUZi54pwH+/pTQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@pagefind/darwin-x64": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pagefind/darwin-x64/-/darwin-x64-1.4.0.tgz", + "integrity": "sha512-e7JPIS6L9/cJfow+/IAqknsGqEPjJnVXGjpGm25bnq+NPdoD3c/7fAwr1OXkG4Ocjx6ZGSCijXEV4ryMcH2E3A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@pagefind/default-ui": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pagefind/default-ui/-/default-ui-1.4.0.tgz", + "integrity": "sha512-wie82VWn3cnGEdIjh4YwNESyS1G6vRHwL6cNjy9CFgNnWW/PGRjsLq300xjVH5sfPFK3iK36UxvIBymtQIEiSQ==", + "license": "MIT" + }, + "node_modules/@pagefind/freebsd-x64": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pagefind/freebsd-x64/-/freebsd-x64-1.4.0.tgz", + "integrity": "sha512-WcJVypXSZ+9HpiqZjFXMUobfFfZZ6NzIYtkhQ9eOhZrQpeY5uQFqNWLCk7w9RkMUwBv1HAMDW3YJQl/8OqsV0Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@pagefind/linux-arm64": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pagefind/linux-arm64/-/linux-arm64-1.4.0.tgz", + "integrity": "sha512-PIt8dkqt4W06KGmQjONw7EZbhDF+uXI7i0XtRLN1vjCUxM9vGPdtJc2mUyVPevjomrGz5M86M8bqTr6cgDp1Uw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@pagefind/linux-x64": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pagefind/linux-x64/-/linux-x64-1.4.0.tgz", + "integrity": "sha512-z4oddcWwQ0UHrTHR8psLnVlz6USGJ/eOlDPTDYZ4cI8TK8PgwRUPQZp9D2iJPNIPcS6Qx/E4TebjuGJOyK8Mmg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@pagefind/windows-x64": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pagefind/windows-x64/-/windows-x64-1.4.0.tgz", + "integrity": "sha512-NkT+YAdgS2FPCn8mIA9bQhiBs+xmniMGq1LFPDhcFn0+2yIUEiIG06t7bsZlhdjknEQRTSdT7YitP6fC5qwP0g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@parcel/watcher": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", + "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.1", + "@parcel/watcher-darwin-arm64": "2.5.1", + "@parcel/watcher-darwin-x64": "2.5.1", + "@parcel/watcher-freebsd-x64": "2.5.1", + "@parcel/watcher-linux-arm-glibc": "2.5.1", + "@parcel/watcher-linux-arm-musl": "2.5.1", + "@parcel/watcher-linux-arm64-glibc": "2.5.1", + "@parcel/watcher-linux-arm64-musl": "2.5.1", + "@parcel/watcher-linux-x64-glibc": "2.5.1", + "@parcel/watcher-linux-x64-musl": "2.5.1", + "@parcel/watcher-win32-arm64": "2.5.1", + "@parcel/watcher-win32-ia32": "2.5.1", + "@parcel/watcher-win32-x64": "2.5.1" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", + "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", + "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", + "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", + "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", + "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", + "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", + "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", + "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", + "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", + "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", + "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", + "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", + "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher/node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@resvg/resvg-js": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js/-/resvg-js-2.6.2.tgz", + "integrity": "sha512-xBaJish5OeGmniDj9cW5PRa/PtmuVU3ziqrbr5xJj901ZDN4TosrVaNZpEiLZAxdfnhAe7uQ7QFWfjPe9d9K2Q==", + "license": "MPL-2.0", + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@resvg/resvg-js-android-arm-eabi": "2.6.2", + "@resvg/resvg-js-android-arm64": "2.6.2", + "@resvg/resvg-js-darwin-arm64": "2.6.2", + "@resvg/resvg-js-darwin-x64": "2.6.2", + "@resvg/resvg-js-linux-arm-gnueabihf": "2.6.2", + "@resvg/resvg-js-linux-arm64-gnu": "2.6.2", + "@resvg/resvg-js-linux-arm64-musl": "2.6.2", + "@resvg/resvg-js-linux-x64-gnu": "2.6.2", + "@resvg/resvg-js-linux-x64-musl": "2.6.2", + "@resvg/resvg-js-win32-arm64-msvc": "2.6.2", + "@resvg/resvg-js-win32-ia32-msvc": "2.6.2", + "@resvg/resvg-js-win32-x64-msvc": "2.6.2" + } + }, + "node_modules/@resvg/resvg-js-android-arm-eabi": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-android-arm-eabi/-/resvg-js-android-arm-eabi-2.6.2.tgz", + "integrity": "sha512-FrJibrAk6v29eabIPgcTUMPXiEz8ssrAk7TXxsiZzww9UTQ1Z5KAbFJs+Z0Ez+VZTYgnE5IQJqBcoSiMebtPHA==", + "cpu": [ + "arm" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-android-arm64": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-android-arm64/-/resvg-js-android-arm64-2.6.2.tgz", + "integrity": "sha512-VcOKezEhm2VqzXpcIJoITuvUS/fcjIw5NA/w3tjzWyzmvoCdd+QXIqy3FBGulWdClvp4g+IfUemigrkLThSjAQ==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-darwin-arm64": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-darwin-arm64/-/resvg-js-darwin-arm64-2.6.2.tgz", + "integrity": "sha512-nmok2LnAd6nLUKI16aEB9ydMC6Lidiiq2m1nEBDR1LaaP7FGs4AJ90qDraxX+CWlVuRlvNjyYJTNv8qFjtL9+A==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-darwin-x64": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-darwin-x64/-/resvg-js-darwin-x64-2.6.2.tgz", + "integrity": "sha512-GInyZLjgWDfsVT6+SHxQVRwNzV0AuA1uqGsOAW+0th56J7Nh6bHHKXHBWzUrihxMetcFDmQMAX1tZ1fZDYSRsw==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-linux-arm-gnueabihf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-arm-gnueabihf/-/resvg-js-linux-arm-gnueabihf-2.6.2.tgz", + "integrity": "sha512-YIV3u/R9zJbpqTTNwTZM5/ocWetDKGsro0SWp70eGEM9eV2MerWyBRZnQIgzU3YBnSBQ1RcxRZvY/UxwESfZIw==", + "cpu": [ + "arm" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-linux-arm64-gnu": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-arm64-gnu/-/resvg-js-linux-arm64-gnu-2.6.2.tgz", + "integrity": "sha512-zc2BlJSim7YR4FZDQ8OUoJg5holYzdiYMeobb9pJuGDidGL9KZUv7SbiD4E8oZogtYY42UZEap7dqkkYuA91pg==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-linux-arm64-musl": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-arm64-musl/-/resvg-js-linux-arm64-musl-2.6.2.tgz", + "integrity": "sha512-3h3dLPWNgSsD4lQBJPb4f+kvdOSJHa5PjTYVsWHxLUzH4IFTJUAnmuWpw4KqyQ3NA5QCyhw4TWgxk3jRkQxEKg==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-linux-x64-gnu": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-x64-gnu/-/resvg-js-linux-x64-gnu-2.6.2.tgz", + "integrity": "sha512-IVUe+ckIerA7xMZ50duAZzwf1U7khQe2E0QpUxu5MBJNao5RqC0zwV/Zm965vw6D3gGFUl7j4m+oJjubBVoftw==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-linux-x64-musl": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-x64-musl/-/resvg-js-linux-x64-musl-2.6.2.tgz", + "integrity": "sha512-UOf83vqTzoYQO9SZ0fPl2ZIFtNIz/Rr/y+7X8XRX1ZnBYsQ/tTb+cj9TE+KHOdmlTFBxhYzVkP2lRByCzqi4jQ==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-win32-arm64-msvc": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-win32-arm64-msvc/-/resvg-js-win32-arm64-msvc-2.6.2.tgz", + "integrity": "sha512-7C/RSgCa+7vqZ7qAbItfiaAWhyRSoD4l4BQAbVDqRRsRgY+S+hgS3in0Rxr7IorKUpGE69X48q6/nOAuTJQxeQ==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-win32-ia32-msvc": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-win32-ia32-msvc/-/resvg-js-win32-ia32-msvc-2.6.2.tgz", + "integrity": "sha512-har4aPAlvjnLcil40AC77YDIk6loMawuJwFINEM7n0pZviwMkMvjb2W5ZirsNOZY4aDbo5tLx0wNMREp5Brk+w==", + "cpu": [ + "ia32" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-win32-x64-msvc": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-win32-x64-msvc/-/resvg-js-win32-x64-msvc-2.6.2.tgz", + "integrity": "sha512-ZXtYhtUr5SSaBrUDq7DiyjOFJqBVL/dOBN7N/qmi/pO0IgiWW/f/ue3nbvu9joWE5aAKDoIzy/CxsY0suwGosQ==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", + "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.45.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.45.0.tgz", + "integrity": "sha512-2o/FgACbji4tW1dzXOqAV15Eu7DdgbKsF2QKcxfG4xbh5iwU7yr5RRP5/U+0asQliSYv5M4o7BevlGIoSL0LXg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.45.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.45.0.tgz", + "integrity": "sha512-PSZ0SvMOjEAxwZeTx32eI/j5xSYtDCRxGu5k9zvzoY77xUNssZM+WV6HYBLROpY5CkXsbQjvz40fBb7WPwDqtQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.45.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.45.0.tgz", + "integrity": "sha512-BA4yPIPssPB2aRAWzmqzQ3y2/KotkLyZukVB7j3psK/U3nVJdceo6qr9pLM2xN6iRP/wKfxEbOb1yrlZH6sYZg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.45.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.45.0.tgz", + "integrity": "sha512-Pr2o0lvTwsiG4HCr43Zy9xXrHspyMvsvEw4FwKYqhli4FuLE5FjcZzuQ4cfPe0iUFCvSQG6lACI0xj74FDZKRA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.45.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.45.0.tgz", + "integrity": "sha512-lYE8LkE5h4a/+6VnnLiL14zWMPnx6wNbDG23GcYFpRW1V9hYWHAw9lBZ6ZUIrOaoK7NliF1sdwYGiVmziUF4vA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.45.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.45.0.tgz", + "integrity": "sha512-PVQWZK9sbzpvqC9Q0GlehNNSVHR+4m7+wET+7FgSnKG3ci5nAMgGmr9mGBXzAuE5SvguCKJ6mHL6vq1JaJ/gvw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.45.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.45.0.tgz", + "integrity": "sha512-hLrmRl53prCcD+YXTfNvXd776HTxNh8wPAMllusQ+amcQmtgo3V5i/nkhPN6FakW+QVLoUUr2AsbtIRPFU3xIA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.45.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.45.0.tgz", + "integrity": "sha512-XBKGSYcrkdiRRjl+8XvrUR3AosXU0NvF7VuqMsm7s5nRy+nt58ZMB19Jdp1RdqewLcaYnpk8zeVs/4MlLZEJxw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.45.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.45.0.tgz", + "integrity": "sha512-fRvZZPUiBz7NztBE/2QnCS5AtqLVhXmUOPj9IHlfGEXkapgImf4W9+FSkL8cWqoAjozyUzqFmSc4zh2ooaeF6g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.45.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.45.0.tgz", + "integrity": "sha512-Btv2WRZOcUGi8XU80XwIvzTg4U6+l6D0V6sZTrZx214nrwxw5nAi8hysaXj/mctyClWgesyuxbeLylCBNauimg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.45.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.45.0.tgz", + "integrity": "sha512-Li0emNnwtUZdLwHjQPBxn4VWztcrw/h7mgLyHiEI5Z0MhpeFGlzaiBHpSNVOMB/xucjXTTcO+dhv469Djr16KA==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.45.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.45.0.tgz", + "integrity": "sha512-sB8+pfkYx2kvpDCfd63d5ScYT0Fz1LO6jIb2zLZvmK9ob2D8DeVqrmBDE0iDK8KlBVmsTNzrjr3G1xV4eUZhSw==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.45.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.45.0.tgz", + "integrity": "sha512-5GQ6PFhh7E6jQm70p1aW05G2cap5zMOvO0se5JMecHeAdj5ZhWEHbJ4hiKpfi1nnnEdTauDXxPgXae/mqjow9w==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.45.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.45.0.tgz", + "integrity": "sha512-N/euLsBd1rekWcuduakTo/dJw6U6sBP3eUq+RXM9RNfPuWTvG2w/WObDkIvJ2KChy6oxZmOSC08Ak2OJA0UiAA==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.45.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.45.0.tgz", + "integrity": "sha512-2l9sA7d7QdikL0xQwNMO3xURBUNEWyHVHfAsHsUdq+E/pgLTUcCE+gih5PCdmyHmfTDeXUWVhqL0WZzg0nua3g==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.45.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.45.0.tgz", + "integrity": "sha512-XZdD3fEEQcwG2KrJDdEQu7NrHonPxxaV0/w2HpvINBdcqebz1aL+0vM2WFJq4DeiAVT6F5SUQas65HY5JDqoPw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.45.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.45.0.tgz", + "integrity": "sha512-7ayfgvtmmWgKWBkCGg5+xTQ0r5V1owVm67zTrsEY1008L5ro7mCyGYORomARt/OquB9KY7LpxVBZes+oSniAAQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.45.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.45.0.tgz", + "integrity": "sha512-B+IJgcBnE2bm93jEW5kHisqvPITs4ddLOROAcOc/diBgrEiQJJ6Qcjby75rFSmH5eMGrqJryUgJDhrfj942apQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.45.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.45.0.tgz", + "integrity": "sha512-+CXwwG66g0/FpWOnP/v1HnrGVSOygK/osUbu3wPRy8ECXjoYKjRAyfxYpDQOfghC5qPJYLPH0oN4MCOjwgdMug==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.45.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.45.0.tgz", + "integrity": "sha512-SRf1cytG7wqcHVLrBc9VtPK4pU5wxiB/lNIkNmW2ApKXIg+RpqwHfsaEK+e7eH4A1BpI6BX/aBWXxZCIrJg3uA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@shikijs/core": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.21.0.tgz", + "integrity": "sha512-AXSQu/2n1UIQekY8euBJlvFYZIw0PHY63jUzGbrOma4wPxzznJXTXkri+QcHeBNaFxiiOljKxxJkVSoB3PjbyA==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.21.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4", + "hast-util-to-html": "^9.0.5" + } + }, + "node_modules/@shikijs/engine-javascript": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.21.0.tgz", + "integrity": "sha512-ATwv86xlbmfD9n9gKRiwuPpWgPENAWCLwYCGz9ugTJlsO2kOzhOkvoyV/UD+tJ0uT7YRyD530x6ugNSffmvIiQ==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.21.0", + "@shikijs/vscode-textmate": "^10.0.2", + "oniguruma-to-es": "^4.3.4" + } + }, + "node_modules/@shikijs/engine-oniguruma": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.21.0.tgz", + "integrity": "sha512-OYknTCct6qiwpQDqDdf3iedRdzj6hFlOPv5hMvI+hkWfCKs5mlJ4TXziBG9nyabLwGulrUjHiCq3xCspSzErYQ==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.21.0", + "@shikijs/vscode-textmate": "^10.0.2" + } + }, + "node_modules/@shikijs/langs": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.21.0.tgz", + "integrity": "sha512-g6mn5m+Y6GBJ4wxmBYqalK9Sp0CFkUqfNzUy2pJglUginz6ZpWbaWjDB4fbQ/8SHzFjYbtU6Ddlp1pc+PPNDVA==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.21.0" + } + }, + "node_modules/@shikijs/themes": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.21.0.tgz", + "integrity": "sha512-BAE4cr9EDiZyYzwIHEk7JTBJ9CzlPuM4PchfcA5ao1dWXb25nv6hYsoDiBq2aZK9E3dlt3WB78uI96UESD+8Mw==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.21.0" + } + }, + "node_modules/@shikijs/types": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.21.0.tgz", + "integrity": "sha512-zGrWOxZ0/+0ovPY7PvBU2gIS9tmhSUUt30jAcNV0Bq0gb2S98gwfjIs1vxlmH5zM7/4YxLamT6ChlqqAJmPPjA==", + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "node_modules/@shikijs/vscode-textmate": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", + "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", + "license": "MIT" + }, + "node_modules/@shuding/opentype.js": { + "version": "1.4.0-beta.0", + "resolved": "https://registry.npmjs.org/@shuding/opentype.js/-/opentype.js-1.4.0-beta.0.tgz", + "integrity": "sha512-3NgmNyH3l/Hv6EvsWJbsvpcpUba6R8IREQ83nH83cyakCw7uM1arZKNfHwv1Wz6jgqrF/j4x5ELvR6PnK9nTcA==", + "license": "MIT", + "dependencies": { + "fflate": "^0.7.3", + "string.prototype.codepointat": "^0.2.1" + }, + "bin": { + "ot": "bin/ot" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/@stripe/stripe-js": { + "version": "8.6.4", + "resolved": "https://registry.npmjs.org/@stripe/stripe-js/-/stripe-js-8.6.4.tgz", + "integrity": "sha512-ipBq9+YEt5i4FxotkwNlQDqXvt//9ts23XQ4zgwm7yOkU/k3ZHnNRnm7dR418r5nC455dVYEzP7eERUHLrIYhA==", + "license": "MIT", + "engines": { + "node": ">=12.16" + } + }, + "node_modules/@sveltejs/acorn-typescript": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.8.tgz", + "integrity": "sha512-esgN+54+q0NjB0Y/4BomT9samII7jGwNy/2a3wNZbT2A2RpmXsXwUt24LvLhx6jUq2gVk4cWEvcRO6MFQbOfNA==", + "license": "MIT", + "peerDependencies": { + "acorn": "^8.9.0" + } + }, + "node_modules/@sveltejs/vite-plugin-svelte": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-5.1.1.tgz", + "integrity": "sha512-Y1Cs7hhTc+a5E9Va/xwKlAJoariQyHY+5zBgCZg4PFWNYQ1nMN9sjK1zhw1gK69DuqVP++sht/1GZg1aRwmAXQ==", + "license": "MIT", + "dependencies": { + "@sveltejs/vite-plugin-svelte-inspector": "^4.0.1", + "debug": "^4.4.1", + "deepmerge": "^4.3.1", + "kleur": "^4.1.5", + "magic-string": "^0.30.17", + "vitefu": "^1.0.6" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22" + }, + "peerDependencies": { + "svelte": "^5.0.0", + "vite": "^6.0.0" + } + }, + "node_modules/@sveltejs/vite-plugin-svelte-inspector": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-4.0.1.tgz", + "integrity": "sha512-J/Nmb2Q2y7mck2hyCX4ckVHcR5tu2J+MtBEQqpDrrgELZ2uvraQcK/ioCV61AqkdXFgriksOKIceDcQmqnGhVw==", + "license": "MIT", + "dependencies": { + "debug": "^4.3.7" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22" + }, + "peerDependencies": { + "@sveltejs/vite-plugin-svelte": "^5.0.0", + "svelte": "^5.0.0", + "vite": "^6.0.0" + } + }, + "node_modules/@tailwindcss/node": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.13.tgz", + "integrity": "sha512-eq3ouolC1oEFOAvOMOBAmfCIqZBJuvWvvYWh5h5iOYfe1HFC6+GZ6EIL0JdM3/niGRJmnrOc+8gl9/HGUaaptw==", + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.4", + "enhanced-resolve": "^5.18.3", + "jiti": "^2.5.1", + "lightningcss": "1.30.1", + "magic-string": "^0.30.18", + "source-map-js": "^1.2.1", + "tailwindcss": "4.1.13" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.13.tgz", + "integrity": "sha512-CPgsM1IpGRa880sMbYmG1s4xhAy3xEt1QULgTJGQmZUeNgXFR7s1YxYygmJyBGtou4SyEosGAGEeYqY7R53bIA==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.4", + "tar": "^7.4.3" + }, + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.1.13", + "@tailwindcss/oxide-darwin-arm64": "4.1.13", + "@tailwindcss/oxide-darwin-x64": "4.1.13", + "@tailwindcss/oxide-freebsd-x64": "4.1.13", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.13", + "@tailwindcss/oxide-linux-arm64-gnu": "4.1.13", + "@tailwindcss/oxide-linux-arm64-musl": "4.1.13", + "@tailwindcss/oxide-linux-x64-gnu": "4.1.13", + "@tailwindcss/oxide-linux-x64-musl": "4.1.13", + "@tailwindcss/oxide-wasm32-wasi": "4.1.13", + "@tailwindcss/oxide-win32-arm64-msvc": "4.1.13", + "@tailwindcss/oxide-win32-x64-msvc": "4.1.13" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.13.tgz", + "integrity": "sha512-BrpTrVYyejbgGo57yc8ieE+D6VT9GOgnNdmh5Sac6+t0m+v+sKQevpFVpwX3pBrM2qKrQwJ0c5eDbtjouY/+ew==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.13.tgz", + "integrity": "sha512-YP+Jksc4U0KHcu76UhRDHq9bx4qtBftp9ShK/7UGfq0wpaP96YVnnjFnj3ZFrUAjc5iECzODl/Ts0AN7ZPOANQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.13.tgz", + "integrity": "sha512-aAJ3bbwrn/PQHDxCto9sxwQfT30PzyYJFG0u/BWZGeVXi5Hx6uuUOQEI2Fa43qvmUjTRQNZnGqe9t0Zntexeuw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.13.tgz", + "integrity": "sha512-Wt8KvASHwSXhKE/dJLCCWcTSVmBj3xhVhp/aF3RpAhGeZ3sVo7+NTfgiN8Vey/Fi8prRClDs6/f0KXPDTZE6nQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.13.tgz", + "integrity": "sha512-mbVbcAsW3Gkm2MGwA93eLtWrwajz91aXZCNSkGTx/R5eb6KpKD5q8Ueckkh9YNboU8RH7jiv+ol/I7ZyQ9H7Bw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.13.tgz", + "integrity": "sha512-wdtfkmpXiwej/yoAkrCP2DNzRXCALq9NVLgLELgLim1QpSfhQM5+ZxQQF8fkOiEpuNoKLp4nKZ6RC4kmeFH0HQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.13.tgz", + "integrity": "sha512-hZQrmtLdhyqzXHB7mkXfq0IYbxegaqTmfa1p9MBj72WPoDD3oNOh1Lnxf6xZLY9C3OV6qiCYkO1i/LrzEdW2mg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.13.tgz", + "integrity": "sha512-uaZTYWxSXyMWDJZNY1Ul7XkJTCBRFZ5Fo6wtjrgBKzZLoJNrG+WderJwAjPzuNZOnmdrVg260DKwXCFtJ/hWRQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.13.tgz", + "integrity": "sha512-oXiPj5mi4Hdn50v5RdnuuIms0PVPI/EG4fxAfFiIKQh5TgQgX7oSuDWntHW7WNIi/yVLAiS+CRGW4RkoGSSgVQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.13.tgz", + "integrity": "sha512-+LC2nNtPovtrDwBc/nqnIKYh/W2+R69FA0hgoeOn64BdCX522u19ryLh3Vf3F8W49XBcMIxSe665kwy21FkhvA==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.5", + "@emnapi/runtime": "^1.4.5", + "@emnapi/wasi-threads": "^1.0.4", + "@napi-rs/wasm-runtime": "^0.2.12", + "@tybys/wasm-util": "^0.10.0", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.13.tgz", + "integrity": "sha512-dziTNeQXtoQ2KBXmrjCxsuPk3F3CQ/yb7ZNZNA+UkNTeiTGgfeh+gH5Pi7mRncVgcPD2xgHvkFCh/MhZWSgyQg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.13.tgz", + "integrity": "sha512-3+LKesjXydTkHk5zXX01b5KMzLV1xl2mcktBJkje7rhFUpUlYJy7IMOLqjIRQncLTa1WZZiFY/foAeB5nmaiTw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/vite": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.1.13.tgz", + "integrity": "sha512-0PmqLQ010N58SbMTJ7BVJ4I2xopiQn/5i6nlb4JmxzQf8zcS5+m2Cv6tqh+sfDwtIdjoEnOvwsGQ1hkUi8QEHQ==", + "license": "MIT", + "dependencies": { + "@tailwindcss/node": "4.1.13", + "@tailwindcss/oxide": "4.1.13", + "tailwindcss": "4.1.13" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6 || ^7" + } + }, + "node_modules/@types/aws-lambda": { + "version": "8.10.160", + "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.160.tgz", + "integrity": "sha512-uoO4QVQNWFPJMh26pXtmtrRfGshPUSpMZGUyUQY20FhfHEElEBOPKgVmFs1z+kbpyBsRs2JnoOPT7++Z4GA9pA==", + "license": "MIT" + }, + "node_modules/@types/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", + "dev": true, + "license": "MIT" + }, + "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", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "license": "MIT" + }, + "node_modules/@types/estree-jsx": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", + "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, + "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/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/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/markdown-it": { + "version": "14.1.2", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz", + "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/linkify-it": "^5", + "@types/mdurl": "^2" + } + }, + "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/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mdx": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz", + "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==", + "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/nlcst": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-2.0.3.tgz", + "integrity": "sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/node": { + "version": "24.0.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.13.tgz", + "integrity": "sha512-Qm9OYVOFHFYg3wJoTSrz80hoec5Lia/dPp84do3X7dZvLikQvM1YpmvTBEdIr/e+U8HTkFjLHLnl78K/qjf+jQ==", + "license": "MIT", + "dependencies": { + "undici-types": "~7.8.0" + } + }, + "node_modules/@types/react": { + "version": "19.1.12", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.12.tgz", + "integrity": "sha512-cMoR+FoAf/Jyq6+Df2/Z41jISvGZZ2eTlnsaJRptmZ76Caldwy1odD4xTr/gNV9VLj0AWgg/nmkevIyUfIIq5w==", + "license": "MIT", + "dependencies": { + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.1.9", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.9.tgz", + "integrity": "sha512-qXRuZaOsAdXKFyOhRBg6Lqqc0yay13vN7KrIg4L7N4aaHN68ma9OK3NE1BoDFgFOTfM7zg+3/8+2n8rLUH3OKQ==", + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.0.0" + } + }, + "node_modules/@types/sanitize-html": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/@types/sanitize-html/-/sanitize-html-2.16.0.tgz", + "integrity": "sha512-l6rX1MUXje5ztPT0cAFtUayXF06DqPhRyfVXareEN5gGCFaP/iwsxIyKODr9XDhfxPpN6vXUFNfo5kZMXCxBtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "htmlparser2": "^8.0.0" + } + }, + "node_modules/@types/sanitize-html/node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "node_modules/@types/sax": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz", + "integrity": "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "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/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "license": "ISC" + }, + "node_modules/@vercel/analytics": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@vercel/analytics/-/analytics-1.6.1.tgz", + "integrity": "sha512-oH9He/bEM+6oKlv3chWuOOcp8Y6fo6/PSro8hEkgCW3pu9/OiCXiUpRUogDh3Fs3LH2sosDrx8CxeOLBEE+afg==", + "license": "MPL-2.0", + "peerDependencies": { + "@remix-run/react": "^2", + "@sveltejs/kit": "^1 || ^2", + "next": ">= 13", + "react": "^18 || ^19 || ^19.0.0-rc", + "svelte": ">= 4", + "vue": "^3", + "vue-router": "^4" + }, + "peerDependenciesMeta": { + "@remix-run/react": { + "optional": true + }, + "@sveltejs/kit": { + "optional": true + }, + "next": { + "optional": true + }, + "react": { + "optional": true + }, + "svelte": { + "optional": true + }, + "vue": { + "optional": true + }, + "vue-router": { + "optional": true + } + } + }, + "node_modules/@vercel/functions": { + "version": "2.2.13", + "resolved": "https://registry.npmjs.org/@vercel/functions/-/functions-2.2.13.tgz", + "integrity": "sha512-14ArBSIIcOBx9nrEgaJb4Bw+en1gl6eSoJWh8qjifLl5G3E4dRXCFOT8HP+w66vb9Wqyd1lAQBrmRhRwOj9X9A==", + "license": "Apache-2.0", + "dependencies": { + "@vercel/oidc": "2.0.2" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@aws-sdk/credential-provider-web-identity": "*" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-provider-web-identity": { + "optional": true + } + } + }, + "node_modules/@vercel/nft": { + "version": "0.30.4", + "resolved": "https://registry.npmjs.org/@vercel/nft/-/nft-0.30.4.tgz", + "integrity": "sha512-wE6eAGSXScra60N2l6jWvNtVK0m+sh873CpfZW4KI2v8EHuUQp+mSEi4T+IcdPCSEDgCdAS/7bizbhQlkjzrSA==", + "license": "MIT", + "dependencies": { + "@mapbox/node-pre-gyp": "^2.0.0", + "@rollup/pluginutils": "^5.1.3", + "acorn": "^8.6.0", + "acorn-import-attributes": "^1.9.5", + "async-sema": "^3.1.1", + "bindings": "^1.4.0", + "estree-walker": "2.0.2", + "glob": "^10.5.0", + "graceful-fs": "^4.2.9", + "node-gyp-build": "^4.2.2", + "picomatch": "^4.0.2", + "resolve-from": "^5.0.0" + }, + "bin": { + "nft": "out/cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@vercel/nft/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/@vercel/oidc": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@vercel/oidc/-/oidc-2.0.2.tgz", + "integrity": "sha512-59PBFx3T+k5hLTEWa3ggiMpGRz1OVvl9eN8SUai+A43IsqiOuAe7qPBf+cray/Fj6mkgnxm/D7IAtjc8zSHi7g==", + "license": "Apache-2.0", + "dependencies": { + "@types/ms": "2.1.0", + "ms": "2.1.3" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@vercel/routing-utils": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/@vercel/routing-utils/-/routing-utils-5.3.2.tgz", + "integrity": "sha512-OKKhHKAON4vcwuPQvtxFRv7Ney0IGlp9CTsScKGbUsYYutRValK2GVdj7y4RRqm7RgzhuUMT/fSoK0ENKwrx9A==", + "license": "Apache-2.0", + "dependencies": { + "path-to-regexp": "6.1.0", + "path-to-regexp-updated": "npm:path-to-regexp@6.3.0" + }, + "optionalDependencies": { + "ajv": "^6.12.3" + } + }, + "node_modules/@volar/language-core": { + "version": "2.4.18", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.18.tgz", + "integrity": "sha512-G3yYV85ekH4TV0EDS6DsS/dUJWrz675H9UgsxFz5pQbmas51a0Q2fF6Lb2q4RKgytuLZ4E0MBdT5PlVsJXNalw==", + "license": "MIT", + "dependencies": { + "@volar/source-map": "2.4.18" + } + }, + "node_modules/@volar/source-map": { + "version": "2.4.18", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.18.tgz", + "integrity": "sha512-zaj2V/zo/CHQ/xA75h60jBPgrz+Ou9s6aPl7dX0rT46/uill9aB/ZaDk92ROpJsa/9e2xftCeNAU9ZwVyB/egQ==", + "license": "MIT" + }, + "node_modules/@volar/typescript": { + "version": "2.4.18", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.18.tgz", + "integrity": "sha512-xcbsMG8m/yhvO1VIKnTtc+llZxw3YtWkZiV7/F1qNpTORdPExkZRcBxJ5d19MXLpkeiQ+DG5JURHh1SV0bcWRA==", + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.18", + "path-browserify": "^1.0.1", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/abbrev": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz", + "integrity": "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==", + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "license": "MIT", + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "license": "MIT", + "optional": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "license": "ISC", + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-align/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-align/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/ansi-align/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-align/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/array-iterate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-2.0.1.tgz", + "integrity": "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/astring": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/astring/-/astring-1.9.0.tgz", + "integrity": "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==", + "license": "MIT", + "bin": { + "astring": "bin/astring" + } + }, + "node_modules/astro": { + "version": "5.16.15", + "resolved": "https://registry.npmjs.org/astro/-/astro-5.16.15.tgz", + "integrity": "sha512-+X1Z0NTi2pa5a0Te6h77Dgc44fYj63j1yx6+39Nvg05lExajxSq7b1Uj/gtY45zoum8fD0+h0nak+DnHighs3A==", + "license": "MIT", + "dependencies": { + "@astrojs/compiler": "^2.13.0", + "@astrojs/internal-helpers": "0.7.5", + "@astrojs/markdown-remark": "6.3.10", + "@astrojs/telemetry": "3.3.0", + "@capsizecss/unpack": "^4.0.0", + "@oslojs/encoding": "^1.1.0", + "@rollup/pluginutils": "^5.3.0", + "acorn": "^8.15.0", + "aria-query": "^5.3.2", + "axobject-query": "^4.1.0", + "boxen": "8.0.1", + "ci-info": "^4.3.1", + "clsx": "^2.1.1", + "common-ancestor-path": "^1.0.1", + "cookie": "^1.1.1", + "cssesc": "^3.0.0", + "debug": "^4.4.3", + "deterministic-object-hash": "^2.0.2", + "devalue": "^5.6.2", + "diff": "^8.0.3", + "dlv": "^1.1.3", + "dset": "^3.1.4", + "es-module-lexer": "^1.7.0", + "esbuild": "^0.25.0", + "estree-walker": "^3.0.3", + "flattie": "^1.1.1", + "fontace": "~0.4.0", + "github-slugger": "^2.0.0", + "html-escaper": "3.0.3", + "http-cache-semantics": "^4.2.0", + "import-meta-resolve": "^4.2.0", + "js-yaml": "^4.1.1", + "magic-string": "^0.30.21", + "magicast": "^0.5.1", + "mrmime": "^2.0.1", + "neotraverse": "^0.6.18", + "p-limit": "^6.2.0", + "p-queue": "^8.1.1", + "package-manager-detector": "^1.6.0", + "piccolore": "^0.1.3", + "picomatch": "^4.0.3", + "prompts": "^2.4.2", + "rehype": "^13.0.2", + "semver": "^7.7.3", + "shiki": "^3.21.0", + "smol-toml": "^1.6.0", + "svgo": "^4.0.0", + "tinyexec": "^1.0.2", + "tinyglobby": "^0.2.15", + "tsconfck": "^3.1.6", + "ultrahtml": "^1.6.0", + "unifont": "~0.7.3", + "unist-util-visit": "^5.0.0", + "unstorage": "^1.17.4", + "vfile": "^6.0.3", + "vite": "^6.4.1", + "vitefu": "^1.1.1", + "xxhash-wasm": "^1.1.0", + "yargs-parser": "^21.1.1", + "yocto-spinner": "^0.2.3", + "zod": "^3.25.76", + "zod-to-json-schema": "^3.25.1", + "zod-to-ts": "^1.2.0" + }, + "bin": { + "astro": "astro.js" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/astrodotbuild" + }, + "optionalDependencies": { + "sharp": "^0.34.0" + } + }, + "node_modules/astro-expressive-code": { + "version": "0.41.3", + "resolved": "https://registry.npmjs.org/astro-expressive-code/-/astro-expressive-code-0.41.3.tgz", + "integrity": "sha512-u+zHMqo/QNLE2eqYRCrK3+XMlKakv33Bzuz+56V1gs8H0y6TZ0hIi3VNbIxeTn51NLn+mJfUV/A0kMNfE4rANw==", + "license": "MIT", + "dependencies": { + "rehype-expressive-code": "^0.41.3" + }, + "peerDependencies": { + "astro": "^4.0.0-beta || ^5.0.0-beta || ^3.3.0" + } + }, + "node_modules/astro/node_modules/@astrojs/internal-helpers": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.7.5.tgz", + "integrity": "sha512-vreGnYSSKhAjFJCWAwe/CNhONvoc5lokxtRoZims+0wa3KbHBdPHSSthJsKxPd8d/aic6lWKpRTYGY/hsgK6EA==", + "license": "MIT" + }, + "node_modules/astro/node_modules/@astrojs/markdown-remark": { + "version": "6.3.10", + "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-6.3.10.tgz", + "integrity": "sha512-kk4HeYR6AcnzC4QV8iSlOfh+N8TZ3MEStxPyenyCtemqn8IpEATBFMTJcfrNW32dgpt6MY3oCkMM/Tv3/I4G3A==", + "license": "MIT", + "dependencies": { + "@astrojs/internal-helpers": "0.7.5", + "@astrojs/prism": "3.3.0", + "github-slugger": "^2.0.0", + "hast-util-from-html": "^2.0.3", + "hast-util-to-text": "^4.0.2", + "import-meta-resolve": "^4.2.0", + "js-yaml": "^4.1.1", + "mdast-util-definitions": "^6.0.0", + "rehype-raw": "^7.0.0", + "rehype-stringify": "^10.0.1", + "remark-gfm": "^4.0.1", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.1.2", + "remark-smartypants": "^3.0.2", + "shiki": "^3.19.0", + "smol-toml": "^1.5.2", + "unified": "^11.0.5", + "unist-util-remove-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "unist-util-visit-parents": "^6.0.2", + "vfile": "^6.0.3" + } + }, + "node_modules/async-sema": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/async-sema/-/async-sema-3.1.1.tgz", + "integrity": "sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==", + "license": "MIT" + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "license": "Apache-2.0", + "engines": { + "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", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/base-64": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz", + "integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==", + "license": "MIT" + }, + "node_modules/bcp-47-match": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/bcp-47-match/-/bcp-47-match-2.0.3.tgz", + "integrity": "sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/before-after-hook": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-4.0.0.tgz", + "integrity": "sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ==", + "license": "Apache-2.0" + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "license": "MIT", + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "license": "ISC" + }, + "node_modules/bottleneck": { + "version": "2.19.5", + "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", + "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==", + "license": "MIT" + }, + "node_modules/boxen": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-8.0.1.tgz", + "integrity": "sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==", + "license": "MIT", + "dependencies": { + "ansi-align": "^3.0.1", + "camelcase": "^8.0.0", + "chalk": "^5.3.0", + "cli-boxes": "^3.0.0", + "string-width": "^7.2.0", + "type-fest": "^4.21.0", + "widest-line": "^5.0.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer-builder": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/buffer-builder/-/buffer-builder-0.2.0.tgz", + "integrity": "sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==", + "devOptional": true, + "license": "MIT/X11" + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camelcase": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz", + "integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelize": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", + "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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": "5.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", + "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "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/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "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", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "license": "MIT", + "optional": true, + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/ci-info": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.1.tgz", + "integrity": "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-boxes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/collapse-white-space": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz", + "integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/color": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/color/-/color-5.0.0.tgz", + "integrity": "sha512-16BlyiuyLq3MLxpRWyOTiWsO3ii/eLQLJUQXBSNcxMBBSnyt1ee9YUdaozQp03ifwm5woztEZGDbk9RGVuCsdw==", + "license": "MIT", + "dependencies": { + "color-convert": "^3.0.1", + "color-string": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/color-convert": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-3.1.0.tgz", + "integrity": "sha512-TVoqAq8ZDIpK5lsQY874DDnu65CSsc9vzq0wLpNQ6UMBq81GSZocVazPiBbYGzngzBOIRahpkTzCLVe2at4MfA==", + "license": "MIT", + "dependencies": { + "color-name": "^2.0.0" + }, + "engines": { + "node": ">=14.6" + } + }, + "node_modules/color-convert/node_modules/color-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.0.0.tgz", + "integrity": "sha512-SbtvAMWvASO5TE2QP07jHBMXKafgdZz8Vrsrn96fiL+O92/FN/PLARzUW5sKt013fjAprK2d2iCn2hk2Xb5oow==", + "license": "MIT", + "engines": { + "node": ">=12.20" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/color-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-2.0.1.tgz", + "integrity": "sha512-5z9FbYTZPAo8iKsNEqRNv+OlpBbDcoE+SY9GjLfDUHEfcNNV7tS9eSAlFHEaub/r5tBL9LtskAeq1l9SaoZ5tQ==", + "license": "MIT", + "dependencies": { + "color-name": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/color-string/node_modules/color-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.0.0.tgz", + "integrity": "sha512-SbtvAMWvASO5TE2QP07jHBMXKafgdZz8Vrsrn96fiL+O92/FN/PLARzUW5sKt013fjAprK2d2iCn2hk2Xb5oow==", + "license": "MIT", + "engines": { + "node": ">=12.20" + } + }, + "node_modules/colorjs.io": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/colorjs.io/-/colorjs.io-0.5.2.tgz", + "integrity": "sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==", + "devOptional": true, + "license": "MIT" + }, + "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": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/common-ancestor-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", + "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", + "license": "ISC" + }, + "node_modules/consola": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", + "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/cookie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/cookie-es": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.2.2.tgz", + "integrity": "sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==", + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crossws": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.5.tgz", + "integrity": "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==", + "license": "MIT", + "dependencies": { + "uncrypto": "^0.1.3" + } + }, + "node_modules/css-background-parser": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/css-background-parser/-/css-background-parser-0.1.0.tgz", + "integrity": "sha512-2EZLisiZQ+7m4wwur/qiYJRniHX4K5Tc9w93MT3AS0WS1u5kaZ4FKXlOTBhOjc+CgEgPiGY+fX1yWD8UwpEqUA==", + "license": "MIT" + }, + "node_modules/css-box-shadow": { + "version": "1.0.0-3", + "resolved": "https://registry.npmjs.org/css-box-shadow/-/css-box-shadow-1.0.0-3.tgz", + "integrity": "sha512-9jaqR6e7Ohds+aWwmhe6wILJ99xYQbfmK9QQB9CcMjDbTxPZjwEmUQpU91OG05Xgm8BahT5fW+svbsQGjS/zPg==", + "license": "MIT" + }, + "node_modules/css-color-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", + "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==", + "license": "ISC", + "engines": { + "node": ">=4" + } + }, + "node_modules/css-gradient-parser": { + "version": "0.0.17", + "resolved": "https://registry.npmjs.org/css-gradient-parser/-/css-gradient-parser-0.0.17.tgz", + "integrity": "sha512-w2Xy9UMMwlKtou0vlRnXvWglPAceXCTtcmVSo8ZBUvqCV5aXEFP/PC6d+I464810I9FT++UACwTD5511bmGPUg==", + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-selector-parser": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/css-selector-parser/-/css-selector-parser-3.1.3.tgz", + "integrity": "sha512-gJMigczVZqYAk0hPVzx/M4Hm1D9QOtqkdQk9005TNzDIUGzo5cnHEDiKUT7jGPximL/oYb+LIitcHFQ4aKupxg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ], + "license": "MIT" + }, + "node_modules/css-to-react-native": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz", + "integrity": "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==", + "license": "MIT", + "dependencies": { + "camelize": "^1.0.0", + "css-color-keywords": "^1.0.0", + "postcss-value-parser": "^4.0.2" + } + }, + "node_modules/css-tree": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", + "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.12.2", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "license": "MIT", + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "license": "CC0-1.0" + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/date-fns": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", + "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "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/dedent-js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dedent-js/-/dedent-js-1.0.1.tgz", + "integrity": "sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==", + "license": "MIT" + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "license": "MIT" + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "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/destr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", + "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", + "license": "MIT" + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/deterministic-object-hash": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/deterministic-object-hash/-/deterministic-object-hash-2.0.2.tgz", + "integrity": "sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ==", + "license": "MIT", + "dependencies": { + "base-64": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/devalue": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.6.2.tgz", + "integrity": "sha512-nPRkjWzzDQlsejL1WVifk5rvcFi/y1onBRxjaFMjZeR9mFpqu2gmAZ9xUB9/IEanEP/vBtGeGganC/GO1fmufg==", + "license": "MIT" + }, + "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": "8.0.3", + "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.3.tgz", + "integrity": "sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/direction": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/direction/-/direction-2.0.1.tgz", + "integrity": "sha512-9S6m9Sukh1cZNknO1CWAr2QAWsbKLafQiyM5gZ7VgXHeuaoUwffKN4q6NC4A/Mf9iiPlOXQEKW/Mv/mh9/3YFA==", + "license": "MIT", + "bin": { + "direction": "cli.js" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "license": "MIT" + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dset": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.4.tgz", + "integrity": "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.5.0.tgz", + "integrity": "sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==", + "license": "MIT" + }, + "node_modules/emoji-regex-xs": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/emoji-regex-xs/-/emoji-regex-xs-2.0.1.tgz", + "integrity": "sha512-1QFuh8l7LqUcKe24LsPUNzjrzJQ7pgRwp1QMcZ5MX6mFplk2zQ08NVCM84++1cveaUUYtcCYHmeFEuNg16sU4g==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.18.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz", + "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "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", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esast-util-from-estree": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz", + "integrity": "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-visit": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/esast-util-from-js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esast-util-from-js/-/esast-util-from-js-2.0.1.tgz", + "integrity": "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "acorn": "^8.0.0", + "esast-util-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/esbuild": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.6.tgz", + "integrity": "sha512-GVuzuUwtdsghE3ocJ9Bs8PNoF13HNQ5TXbEi2AhvVb8xU1Iwt9Fos9FEamfoee+u/TOsn7GUWc04lz46n2bbTg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.6", + "@esbuild/android-arm": "0.25.6", + "@esbuild/android-arm64": "0.25.6", + "@esbuild/android-x64": "0.25.6", + "@esbuild/darwin-arm64": "0.25.6", + "@esbuild/darwin-x64": "0.25.6", + "@esbuild/freebsd-arm64": "0.25.6", + "@esbuild/freebsd-x64": "0.25.6", + "@esbuild/linux-arm": "0.25.6", + "@esbuild/linux-arm64": "0.25.6", + "@esbuild/linux-ia32": "0.25.6", + "@esbuild/linux-loong64": "0.25.6", + "@esbuild/linux-mips64el": "0.25.6", + "@esbuild/linux-ppc64": "0.25.6", + "@esbuild/linux-riscv64": "0.25.6", + "@esbuild/linux-s390x": "0.25.6", + "@esbuild/linux-x64": "0.25.6", + "@esbuild/netbsd-arm64": "0.25.6", + "@esbuild/netbsd-x64": "0.25.6", + "@esbuild/openbsd-arm64": "0.25.6", + "@esbuild/openbsd-x64": "0.25.6", + "@esbuild/openharmony-arm64": "0.25.6", + "@esbuild/sunos-x64": "0.25.6", + "@esbuild/win32-arm64": "0.25.6", + "@esbuild/win32-ia32": "0.25.6", + "@esbuild/win32-x64": "0.25.6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "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/esm-env": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz", + "integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==", + "license": "MIT" + }, + "node_modules/esrap": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/esrap/-/esrap-2.2.2.tgz", + "integrity": "sha512-zA6497ha+qKvoWIK+WM9NAh5ni17sKZKhbS5B3PoYbBvaYHZWoS33zmFybmyqpn07RLUxSmn+RCls2/XF+d0oQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + } + }, + "node_modules/estree-util-attach-comments": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz", + "integrity": "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-build-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz", + "integrity": "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "estree-walker": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-is-identifier-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", + "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-scope": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/estree-util-scope/-/estree-util-scope-1.0.0.tgz", + "integrity": "sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-to-js": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz", + "integrity": "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "astring": "^1.8.0", + "source-map": "^0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-visit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz", + "integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", + "license": "MIT" + }, + "node_modules/expressive-code": { + "version": "0.41.3", + "resolved": "https://registry.npmjs.org/expressive-code/-/expressive-code-0.41.3.tgz", + "integrity": "sha512-YLnD62jfgBZYrXIPQcJ0a51Afv9h8VlWqEGK9uU2T5nL/5rb8SnA86+7+mgCZe5D34Tff5RNEA5hjNVJYHzrFg==", + "license": "MIT", + "dependencies": { + "@expressive-code/core": "^0.41.3", + "@expressive-code/plugin-frames": "^0.41.3", + "@expressive-code/plugin-shiki": "^0.41.3", + "@expressive-code/plugin-text-markers": "^0.41.3" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/fast-content-type-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-3.0.0.tgz", + "integrity": "sha512-ZvLdcY8P+N8mGQJahJV5G4U88CSvT1rP8ApL6uETe88MBXrBHAkZlSEySdUlyztF7ccb+Znos3TFqaepHxdhBg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT", + "optional": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "license": "MIT", + "optional": true + }, + "node_modules/fast-xml-parser": { + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz", + "integrity": "sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "dependencies": { + "strnum": "^2.1.0" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fflate": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.7.4.tgz", + "integrity": "sha512-5u2V/CDW15QM1XbbgS+0DfPxVB+jUKhWEKuuFuHncbk3tEEqzmoXL+2KyOFuKGqOnmdIy0/davWF1CkuwtibCw==", + "license": "MIT" + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "license": "MIT" + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flattie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flattie/-/flattie-1.1.1.tgz", + "integrity": "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/fontace": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/fontace/-/fontace-0.4.0.tgz", + "integrity": "sha512-moThBCItUe2bjZip5PF/iZClpKHGLwMvR79Kp8XpGRBrvoRSnySN4VcILdv3/MJzbhvUA5WeiUXF5o538m5fvg==", + "license": "MIT", + "dependencies": { + "fontkitten": "^1.0.0" + } + }, + "node_modules/fontkitten": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fontkitten/-/fontkitten-1.0.2.tgz", + "integrity": "sha512-piJxbLnkD9Xcyi7dWJRnqszEURixe7CrF/efBfbffe2DPyabmuIuqraruY8cXTs19QoM8VJzx47BDRVNXETM7Q==", + "license": "MIT", + "dependencies": { + "tiny-inflate": "^1.0.3" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gemoji": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/gemoji/-/gemoji-8.1.0.tgz", + "integrity": "sha512-HA4Gx59dw2+tn+UAa7XEV4ufUKI4fH1KgcbenVA9YKSj1QJTT0xh5Mwv5HMFNN3l2OtUe3ZIfuRwSyZS5pLIWw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz", + "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "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": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/h3": { + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.5.tgz", + "integrity": "sha512-xEyq3rSl+dhGX2Lm0+eFQIAzlDN6Fs0EcC4f7BNUmzaRX/PTzeuM+Tr2lHB8FoXggsQIeXLj8EDVgs5ywxyxmg==", + "license": "MIT", + "dependencies": { + "cookie-es": "^1.2.2", + "crossws": "^0.3.5", + "defu": "^6.1.4", + "destr": "^2.0.5", + "iron-webcrypto": "^1.2.1", + "node-mock-http": "^1.0.4", + "radix3": "^1.1.2", + "ufo": "^1.6.3", + "uncrypto": "^0.1.3" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "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-has-property": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-has-property/-/hast-util-has-property-3.0.0.tgz", + "integrity": "sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-heading-rank": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-heading-rank/-/hast-util-heading-rank-3.0.0.tgz", + "integrity": "sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-interactive": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-interactive/-/hast-util-interactive-3.0.0.tgz", + "integrity": "sha512-9VFa3kP6AT40BNYcPmn3jpsG+1KPDF0rUFCrFVQDUsuUXZ3YLODm8UGV0tmYzFpcOIQXTAOi2ccS3ywlj2dQTA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-has-property": "^3.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-raw": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz", + "integrity": "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "@ungap/structured-clone": "^1.0.0", + "hast-util-from-parse5": "^8.0.0", + "hast-util-to-parse5": "^8.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "parse5": "^7.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-select": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/hast-util-select/-/hast-util-select-6.0.4.tgz", + "integrity": "sha512-RqGS1ZgI0MwxLaKLDxjprynNzINEkRHY2i8ln4DDjgv9ZhcYVIHN9rlpiYsqtFwrgpYU361SyWDQcGNIBVu3lw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "bcp-47-match": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "css-selector-parser": "^3.0.0", + "devlop": "^1.0.0", + "direction": "^2.0.0", + "hast-util-has-property": "^3.0.0", + "hast-util-to-string": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "nth-check": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-estree": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.3.tgz", + "integrity": "sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-attach-comments": "^3.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-js": "^1.0.0", + "unist-util-position": "^5.0.0", + "zwitch": "^2.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-jsx-runtime": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz", + "integrity": "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-js": "^1.0.0", + "unist-util-position": "^5.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-parse5": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz", + "integrity": "sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-parse5/node_modules/property-information": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", + "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/hast-util-to-string": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-3.0.1.tgz", + "integrity": "sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "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/hex-rgb": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/hex-rgb/-/hex-rgb-4.3.0.tgz", + "integrity": "sha512-Ox1pJVrDCyGHMG9CFg1tmrRUMRPRsAWYc/PinY0XzJU4K7y7vjNoLKIQ7BR5UJMCxNN8EM1MNDmHWA/B3aZUuw==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/html-escaper": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz", + "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==", + "license": "MIT" + }, + "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-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "license": "BSD-2-Clause" + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/immutable": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.3.tgz", + "integrity": "sha512-+chQdDfvscSF1SJqv2gn4SRO2ZyS3xL3r7IW/wWEEzrzLisnOlKiQu5ytC/BVNcS15C39WT2Hg/bjKjDMcu+zg==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/import-meta-resolve": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz", + "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/inline-style-parser": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.4.tgz", + "integrity": "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==", + "license": "MIT" + }, + "node_modules/iron-webcrypto": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz", + "integrity": "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/brc-dd" + } + }, + "node_modules/is-absolute-url": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-4.0.1.tgz", + "integrity": "sha512-/51/TKE88Lmm7Gc4/8btclNXWS+g50wXhYJq8HWIBAGUBnoAdRu1aXeh364t/O7wXDAcTJDP8PNuNKWUDWie+A==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.12.0" + } + }, + "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-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-reference": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz", + "integrity": "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.6" + } + }, + "node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jiti": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.5.1.tgz", + "integrity": "sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==", + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT", + "optional": true + }, + "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/katex/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/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/lightningcss": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.1.tgz", + "integrity": "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==", + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-darwin-arm64": "1.30.1", + "lightningcss-darwin-x64": "1.30.1", + "lightningcss-freebsd-x64": "1.30.1", + "lightningcss-linux-arm-gnueabihf": "1.30.1", + "lightningcss-linux-arm64-gnu": "1.30.1", + "lightningcss-linux-arm64-musl": "1.30.1", + "lightningcss-linux-x64-gnu": "1.30.1", + "lightningcss-linux-x64-musl": "1.30.1", + "lightningcss-win32-arm64-msvc": "1.30.1", + "lightningcss-win32-x64-msvc": "1.30.1" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.1.tgz", + "integrity": "sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.1.tgz", + "integrity": "sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.1.tgz", + "integrity": "sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.1.tgz", + "integrity": "sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==", + "cpu": [ + "arm" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.1.tgz", + "integrity": "sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.1.tgz", + "integrity": "sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.1.tgz", + "integrity": "sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.1.tgz", + "integrity": "sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.1.tgz", + "integrity": "sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.1.tgz", + "integrity": "sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/linebreak": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/linebreak/-/linebreak-1.1.0.tgz", + "integrity": "sha512-MHp03UImeVhB7XZtjd0E4n6+3xr5Dq/9xI/5FptGk5FrbDR3zagPa2DS6U8ks/3HjbKWG9Q1M2ufOzxV2qLYSQ==", + "license": "MIT", + "dependencies": { + "base64-js": "0.0.8", + "unicode-trie": "^2.0.0" + } + }, + "node_modules/linebreak/node_modules/base64-js": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz", + "integrity": "sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "license": "MIT", + "dependencies": { + "uc.micro": "^2.0.0" + } + }, + "node_modules/locate-character": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", + "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", + "license": "MIT" + }, + "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/lru-cache": { + "version": "11.2.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.5.tgz", + "integrity": "sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/magicast": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.1.tgz", + "integrity": "sha512-xrHS24IxaLrvuo613F719wvOIv9xPHFWQHuvGUBmPnCA/3MQxKI3b+r7n1jAoDHmsbC5bRhTZYR77invLAxVnw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.5", + "@babel/types": "^7.28.5", + "source-map-js": "^1.2.1" + } + }, + "node_modules/markdown-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz", + "integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/markdown-it": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, + "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", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mdast-util-definitions": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-6.0.0.tgz", + "integrity": "sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-directive": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-directive/-/mdast-util-directive-3.1.0.tgz", + "integrity": "sha512-I3fNFt+DHmpWCYAT7quoM6lHf9wuqtI+oCOfvILnoicNIqjh5E3dEJWiXuYME2gNe8vl1iMQwyUHa7bgFmak6Q==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "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-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-mdx": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz", + "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==", + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-expression": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", + "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@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-mdx-jsx": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz", + "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdxjs-esm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", + "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@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-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/mdn-data": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", + "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", + "license": "CC0-1.0" + }, + "node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "license": "MIT" + }, + "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-directive": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-4.0.0.tgz", + "integrity": "sha512-/C2nqVmXXmiseSSuCdItCMho7ybwwop6RrrRPk0KbOHW21JKoCldC+8rFOaundDoRBUWBnJJcxeA/Kvi34WQXg==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "parse-entities": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "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-extension-mdx-expression": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.1.tgz", + "integrity": "sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-mdx-expression": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-mdx-jsx": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.2.tgz", + "integrity": "sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "micromark-factory-mdx-expression": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdx-md": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz", + "integrity": "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==", + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdxjs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz", + "integrity": "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==", + "license": "MIT", + "dependencies": { + "acorn": "^8.0.0", + "acorn-jsx": "^5.0.0", + "micromark-extension-mdx-expression": "^3.0.0", + "micromark-extension-mdx-jsx": "^3.0.0", + "micromark-extension-mdx-md": "^2.0.0", + "micromark-extension-mdxjs-esm": "^3.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-mdxjs-esm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz", + "integrity": "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0", + "vfile-message": "^4.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-mdx-expression": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.3.tgz", + "integrity": "sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0", + "vfile-message": "^4.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-events-to-acorn": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.3.tgz", + "integrity": "sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "estree-util-visit": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "vfile-message": "^4.0.0" + } + }, + "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", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minizlib": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", + "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "license": "MIT", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/neotraverse": { + "version": "0.6.18", + "resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-0.6.18.tgz", + "integrity": "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/nlcst-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-4.0.0.tgz", + "integrity": "sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch-native": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", + "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==", + "license": "MIT" + }, + "node_modules/node-gyp-build": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", + "license": "MIT", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-mock-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/node-mock-http/-/node-mock-http-1.0.4.tgz", + "integrity": "sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ==", + "license": "MIT" + }, + "node_modules/nopt": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz", + "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==", + "license": "ISC", + "dependencies": { + "abbrev": "^3.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/octokit": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/octokit/-/octokit-5.0.5.tgz", + "integrity": "sha512-4+/OFSqOjoyULo7eN7EA97DE0Xydj/PW5aIckxqQIoFjFwqXKuFCvXUJObyJfBF9Khu4RL/jlDRI9FPaMGfPnw==", + "license": "MIT", + "dependencies": { + "@octokit/app": "^16.1.2", + "@octokit/core": "^7.0.6", + "@octokit/oauth-app": "^8.0.3", + "@octokit/plugin-paginate-graphql": "^6.0.0", + "@octokit/plugin-paginate-rest": "^14.0.0", + "@octokit/plugin-rest-endpoint-methods": "^17.0.0", + "@octokit/plugin-retry": "^8.0.3", + "@octokit/plugin-throttling": "^11.0.3", + "@octokit/request-error": "^7.0.2", + "@octokit/types": "^16.0.0", + "@octokit/webhooks": "^14.0.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/ofetch": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.5.1.tgz", + "integrity": "sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==", + "license": "MIT", + "dependencies": { + "destr": "^2.0.5", + "node-fetch-native": "^1.6.7", + "ufo": "^1.6.1" + } + }, + "node_modules/ohash": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", + "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", + "license": "MIT" + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/oniguruma-parser": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.1.tgz", + "integrity": "sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==", + "license": "MIT" + }, + "node_modules/oniguruma-to-es": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.4.tgz", + "integrity": "sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA==", + "license": "MIT", + "dependencies": { + "oniguruma-parser": "^0.12.1", + "regex": "^6.0.1", + "regex-recursion": "^6.0.2" + } + }, + "node_modules/p-limit": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-6.2.0.tgz", + "integrity": "sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==", + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-8.1.1.tgz", + "integrity": "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^5.0.1", + "p-timeout": "^6.1.2" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz", + "integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "license": "BlueOak-1.0.0" + }, + "node_modules/package-manager-detector": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.6.0.tgz", + "integrity": "sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==", + "license": "MIT" + }, + "node_modules/pagefind": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/pagefind/-/pagefind-1.4.0.tgz", + "integrity": "sha512-z2kY1mQlL4J8q5EIsQkLzQjilovKzfNVhX8De6oyE6uHpfFtyBaqUpcl/XzJC/4fjD8vBDyh1zolimIcVrCn9g==", + "dev": true, + "license": "MIT", + "bin": { + "pagefind": "lib/runner/bin.cjs" + }, + "optionalDependencies": { + "@pagefind/darwin-arm64": "1.4.0", + "@pagefind/darwin-x64": "1.4.0", + "@pagefind/freebsd-x64": "1.4.0", + "@pagefind/linux-arm64": "1.4.0", + "@pagefind/linux-x64": "1.4.0", + "@pagefind/windows-x64": "1.4.0" + } + }, + "node_modules/pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", + "license": "MIT" + }, + "node_modules/parse-css-color": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/parse-css-color/-/parse-css-color-0.2.1.tgz", + "integrity": "sha512-bwS/GGIFV3b6KS4uwpzCFj4w297Yl3uqnSgIPsoQkx7GMLROXfMnWvxfNkL0oh8HVhZA4hvJoEoEIqonfJ3BWg==", + "license": "MIT", + "dependencies": { + "color-name": "^1.1.4", + "hex-rgb": "^4.1.0" + } + }, + "node_modules/parse-entities": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", + "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-entities/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/parse-latin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse-latin/-/parse-latin-7.0.0.tgz", + "integrity": "sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "@types/unist": "^3.0.0", + "nlcst-to-string": "^4.0.0", + "unist-util-modify-children": "^4.0.0", + "unist-util-visit-children": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-srcset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz", + "integrity": "sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==", + "license": "MIT" + }, + "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/parse5/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/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "license": "MIT" + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/path-to-regexp": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.1.0.tgz", + "integrity": "sha512-h9DqehX3zZZDCEm+xbfU0ZmwCGFCAAraPJWMXJ4+v32NjZJilVg3k1TcKsRgIb8IQ/izZSaydDc1OhJCZvs2Dw==", + "license": "MIT" + }, + "node_modules/path-to-regexp-updated": { + "name": "path-to-regexp", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", + "license": "MIT" + }, + "node_modules/piccolore": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/piccolore/-/piccolore-0.1.3.tgz", + "integrity": "sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw==", + "license": "ISC" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "license": "MIT" + }, + "node_modules/prettier": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", + "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-plugin-astro": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/prettier-plugin-astro/-/prettier-plugin-astro-0.14.1.tgz", + "integrity": "sha512-RiBETaaP9veVstE4vUwSIcdATj6dKmXljouXc/DDNwBSPTp8FRkLGDSGFClKsAFeeg+13SB0Z1JZvbD76bigJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@astrojs/compiler": "^2.9.1", + "prettier": "^3.0.0", + "sass-formatter": "^0.7.6" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/prismjs": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", + "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prompts/node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "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/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.14.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", + "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/radix3": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz", + "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==", + "license": "MIT" + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/reading-time": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.5.0.tgz", + "integrity": "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==", + "license": "MIT" + }, + "node_modules/recma-build-jsx": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz", + "integrity": "sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-util-build-jsx": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/recma-jsx": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-jsx/-/recma-jsx-1.0.0.tgz", + "integrity": "sha512-5vwkv65qWwYxg+Atz95acp8DMu1JDSqdGkA2Of1j6rCreyFUE/gp15fC8MnGEuG1W68UKjM6x6+YTWIh7hZM/Q==", + "license": "MIT", + "dependencies": { + "acorn-jsx": "^5.0.0", + "estree-util-to-js": "^2.0.0", + "recma-parse": "^1.0.0", + "recma-stringify": "^1.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/recma-parse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-parse/-/recma-parse-1.0.0.tgz", + "integrity": "sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "esast-util-from-js": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/recma-stringify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-stringify/-/recma-stringify-1.0.0.tgz", + "integrity": "sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-util-to-js": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/regex/-/regex-6.1.0.tgz", + "integrity": "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==", + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-recursion": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz", + "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==", + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-utilities": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", + "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==", + "license": "MIT" + }, + "node_modules/rehype": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/rehype/-/rehype-13.0.2.tgz", + "integrity": "sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "rehype-parse": "^9.0.0", + "rehype-stringify": "^10.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-autolink-headings": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/rehype-autolink-headings/-/rehype-autolink-headings-7.1.0.tgz", + "integrity": "sha512-rItO/pSdvnvsP4QRB1pmPiNHUskikqtPojZKJPPPAVx9Hj8i8TwMBhofrrAYRhYOOBZH9tgmG5lPqDLuIWPWmw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@ungap/structured-clone": "^1.0.0", + "hast-util-heading-rank": "^3.0.0", + "hast-util-is-element": "^3.0.0", + "unified": "^11.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-expressive-code": { + "version": "0.41.3", + "resolved": "https://registry.npmjs.org/rehype-expressive-code/-/rehype-expressive-code-0.41.3.tgz", + "integrity": "sha512-8d9Py4c/V6I/Od2VIXFAdpiO2kc0SV2qTJsRAaqSIcM9aruW4ASLNe2kOEo1inXAAkIhpFzAHTc358HKbvpNUg==", + "license": "MIT", + "dependencies": { + "expressive-code": "^0.41.3" + } + }, + "node_modules/rehype-external-links": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/rehype-external-links/-/rehype-external-links-3.0.0.tgz", + "integrity": "sha512-yp+e5N9V3C6bwBeAC4n796kc86M4gJCdlVhiMTxIrJG5UHDMh+PJANf9heqORJbt1nrCbDwIlAZKjANIaVBbvw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@ungap/structured-clone": "^1.0.0", + "hast-util-is-element": "^3.0.0", + "is-absolute-url": "^4.0.0", + "space-separated-tokens": "^2.0.0", + "unist-util-visit": "^5.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-parse": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-9.0.1.tgz", + "integrity": "sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-from-html": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-raw": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz", + "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-raw": "^9.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-recma": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rehype-recma/-/rehype-recma-1.0.0.tgz", + "integrity": "sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "hast-util-to-estree": "^3.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/rehype-unwrap-images": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rehype-unwrap-images/-/rehype-unwrap-images-1.0.0.tgz", + "integrity": "sha512-wzW5Mk9IlVF2UwXC5NtIZsx1aHYbV8+bLWjJnlZaaamz5QU52RppWtq1uEZJqGo8d9Y4RuDqidB6r9RFpKugIg==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-interactive": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-directive": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-directive/-/remark-directive-4.0.0.tgz", + "integrity": "sha512-7sxn4RfF1o3izevPV1DheyGDD6X4c9hrGpfdUpm7uC++dqrnJxIZVkk7CoKqcLm0VUMAuOol7Mno3m6g8cfMuA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-directive": "^3.0.0", + "micromark-extension-directive": "^4.0.0", + "unified": "^11.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-mdx": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.1.0.tgz", + "integrity": "sha512-Ngl/H3YXyBV9RcRNdlYsZujAmhsxwzxpDzpDEhFBVAGthS4GDgnctpDjgFl/ULx5UEDzqtW1cyBSNKqYYrqLBA==", + "license": "MIT", + "dependencies": { + "mdast-util-mdx": "^3.0.0", + "micromark-extension-mdxjs": "^3.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-smartypants": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/remark-smartypants/-/remark-smartypants-3.0.2.tgz", + "integrity": "sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==", + "license": "MIT", + "dependencies": { + "retext": "^9.0.0", + "retext-smartypants": "^6.0.0", + "unified": "^11.0.4", + "unist-util-visit": "^5.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "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/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/retext": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/retext/-/retext-9.0.0.tgz", + "integrity": "sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "retext-latin": "^4.0.0", + "retext-stringify": "^4.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-latin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/retext-latin/-/retext-latin-4.0.0.tgz", + "integrity": "sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "parse-latin": "^7.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-smartypants": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/retext-smartypants/-/retext-smartypants-6.2.0.tgz", + "integrity": "sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "nlcst-to-string": "^4.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-stringify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/retext-stringify/-/retext-stringify-4.0.0.tgz", + "integrity": "sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "nlcst-to-string": "^4.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rollup": { + "version": "4.45.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.45.0.tgz", + "integrity": "sha512-WLjEcJRIo7i3WDDgOIJqVI2d+lAC3EwvOGy+Xfq6hs+GQuAA4Di/H72xmXkOhrIWFg2PFYSKZYfH0f4vfKXN4A==", + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.45.0", + "@rollup/rollup-android-arm64": "4.45.0", + "@rollup/rollup-darwin-arm64": "4.45.0", + "@rollup/rollup-darwin-x64": "4.45.0", + "@rollup/rollup-freebsd-arm64": "4.45.0", + "@rollup/rollup-freebsd-x64": "4.45.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.45.0", + "@rollup/rollup-linux-arm-musleabihf": "4.45.0", + "@rollup/rollup-linux-arm64-gnu": "4.45.0", + "@rollup/rollup-linux-arm64-musl": "4.45.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.45.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.45.0", + "@rollup/rollup-linux-riscv64-gnu": "4.45.0", + "@rollup/rollup-linux-riscv64-musl": "4.45.0", + "@rollup/rollup-linux-s390x-gnu": "4.45.0", + "@rollup/rollup-linux-x64-gnu": "4.45.0", + "@rollup/rollup-linux-x64-musl": "4.45.0", + "@rollup/rollup-win32-arm64-msvc": "4.45.0", + "@rollup/rollup-win32-ia32-msvc": "4.45.0", + "@rollup/rollup-win32-x64-msvc": "4.45.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/s.color": { + "version": "0.0.15", + "resolved": "https://registry.npmjs.org/s.color/-/s.color-0.0.15.tgz", + "integrity": "sha512-AUNrbEUHeKY8XsYr/DYpl+qk5+aM+DChopnWOPEzn8YKzOhv4l2zH6LzZms3tOZP3wwdOyc0RmTciyi46HLIuA==", + "dev": true, + "license": "MIT" + }, + "node_modules/sanitize-html": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.17.0.tgz", + "integrity": "sha512-dLAADUSS8rBwhaevT12yCezvioCA+bmUTPH/u57xKPT8d++voeYE6HeluA/bPbQ15TwDBG2ii+QZIEmYx8VdxA==", + "license": "MIT", + "dependencies": { + "deepmerge": "^4.2.2", + "escape-string-regexp": "^4.0.0", + "htmlparser2": "^8.0.0", + "is-plain-object": "^5.0.0", + "parse-srcset": "^1.0.2", + "postcss": "^8.3.11" + } + }, + "node_modules/sanitize-html/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/sanitize-html/node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "node_modules/sass": { + "version": "1.92.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.92.1.tgz", + "integrity": "sha512-ffmsdbwqb3XeyR8jJR6KelIXARM9bFQe8A6Q3W4Klmwy5Ckd5gz7jgUNHo4UOqutU5Sk1DtKLbpDP0nLCg1xqQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "chokidar": "^4.0.0", + "immutable": "^5.0.2", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" + } + }, + "node_modules/sass-embedded": { + "version": "1.92.1", + "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.92.1.tgz", + "integrity": "sha512-28YwLnF5atAhogt3E4hXzz/NB9dwKffyw08a7DEasLh94P7+aELkG3ENSHYCWB9QFN14hYNLfwr9ozUsPDhcDQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@bufbuild/protobuf": "^2.5.0", + "buffer-builder": "^0.2.0", + "colorjs.io": "^0.5.0", + "immutable": "^5.0.2", + "rxjs": "^7.4.0", + "supports-color": "^8.1.1", + "sync-child-process": "^1.0.2", + "varint": "^6.0.0" + }, + "bin": { + "sass": "dist/bin/sass.js" + }, + "engines": { + "node": ">=16.0.0" + }, + "optionalDependencies": { + "sass-embedded-all-unknown": "1.92.1", + "sass-embedded-android-arm": "1.92.1", + "sass-embedded-android-arm64": "1.92.1", + "sass-embedded-android-riscv64": "1.92.1", + "sass-embedded-android-x64": "1.92.1", + "sass-embedded-darwin-arm64": "1.92.1", + "sass-embedded-darwin-x64": "1.92.1", + "sass-embedded-linux-arm": "1.92.1", + "sass-embedded-linux-arm64": "1.92.1", + "sass-embedded-linux-musl-arm": "1.92.1", + "sass-embedded-linux-musl-arm64": "1.92.1", + "sass-embedded-linux-musl-riscv64": "1.92.1", + "sass-embedded-linux-musl-x64": "1.92.1", + "sass-embedded-linux-riscv64": "1.92.1", + "sass-embedded-linux-x64": "1.92.1", + "sass-embedded-unknown-all": "1.92.1", + "sass-embedded-win32-arm64": "1.92.1", + "sass-embedded-win32-x64": "1.92.1" + } + }, + "node_modules/sass-embedded-all-unknown": { + "version": "1.92.1", + "resolved": "https://registry.npmjs.org/sass-embedded-all-unknown/-/sass-embedded-all-unknown-1.92.1.tgz", + "integrity": "sha512-5t6/YZf+vhO3OY/49h8RCL6Cwo78luva0M+TnTM9gu9ASffRXAuOVLNKciSXa3loptyemDDS6IU5/dVH5w0KmA==", + "cpu": [ + "!arm", + "!arm64", + "!riscv64", + "!x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "sass": "1.92.1" + } + }, + "node_modules/sass-embedded-android-arm": { + "version": "1.92.1", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.92.1.tgz", + "integrity": "sha512-4EjpVVzuksERdgAd4BqeSXFnWtWN3DSRyEIUPJ7BhcS9sfDh2Gf6miI2kNTvIQLJ2XIJynDDcEQ8a1U9KwKUTQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-arm64": { + "version": "1.92.1", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.92.1.tgz", + "integrity": "sha512-Q+UruGb7yKawHagVmVDRRKsnc4mJZvWMBnuRCu2coJo2FofyqBmXohVGXbxko97sYceA9TJTrUEx3WVKQUNCbQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-riscv64": { + "version": "1.92.1", + "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.92.1.tgz", + "integrity": "sha512-nCY5btLlX7W7Jc6cCL6D2Yklpiu540EJ2G08YVGu12DrAMCBzqM347CSRf2ojp1H8jyhvmLkaFwnrJWzh+6S+w==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-x64": { + "version": "1.92.1", + "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.92.1.tgz", + "integrity": "sha512-qYWR3bftJ77aLYwYDFuzDI4dcwVVixxqQxlIQWNGkHRCexj614qGSSHemr18C2eVj3mjXAQxTQxU68U7pkGPAA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-darwin-arm64": { + "version": "1.92.1", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.92.1.tgz", + "integrity": "sha512-g2yQ3txjMYLKMjL2cW1xRO9nnV3ijf95NbX/QShtV6tiVUETZNWDsRMDEwBNGYY6PTE/UZerjJL1R/2xpQg6WA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-darwin-x64": { + "version": "1.92.1", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.92.1.tgz", + "integrity": "sha512-eH+fgxLQhTEPjZPCgPAVuX5e514Qp/4DMAUMtlNShv4cr4TD5qOp1XlsPYR/b7uE7p2cKFkUpUn/bHNqJ2ay4A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-arm": { + "version": "1.92.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.92.1.tgz", + "integrity": "sha512-cT3w8yoQTqrtZvWLJeutEGmawITDTY4J6oSVQjeDcPnnoPt0gOFxem8YMznraACXvahw/2+KJDH33BTNgiPo0A==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-arm64": { + "version": "1.92.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.92.1.tgz", + "integrity": "sha512-dNmlpGeZkry1BofhAdGFBXrpM69y9LlYuNnncf+HfsOOUtj8j0q1RwS+zb5asknhKFUOAG8GCGRY1df7Rwu35g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-arm": { + "version": "1.92.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.92.1.tgz", + "integrity": "sha512-nPBos6lI31ef2zQhqTZhFOU7ar4impJbLIax0XsqS269YsiCwjhk11VmUloJTpFlJuKMiVXNo7dPx+katxhD/Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-arm64": { + "version": "1.92.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.92.1.tgz", + "integrity": "sha512-TfiEBkCyNzVoOhjHXUT+vZ6+p0ueDbvRw6f4jHdkvljZzXdXMby4wh7BU1odl69rgRTkSvYKhgbErRLDR/F7pQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-riscv64": { + "version": "1.92.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.92.1.tgz", + "integrity": "sha512-R+RcJA4EYpJDE9JM1GgPYgZo7x94FlxZ6jPodOQkEaZ1S9kvXVCuP5X/0PXRPhu08KJOfeMsAElzfdAjUf7KJg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-x64": { + "version": "1.92.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.92.1.tgz", + "integrity": "sha512-/HolYRGXJjx8nLw6oj5ZrkR7PFM7X/5kE4MYZaFMpDIPIcw3bqB2fUXLo/MYlRLsw7gBAT6hJAMBrNdKuTphfw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-riscv64": { + "version": "1.92.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.92.1.tgz", + "integrity": "sha512-b9bxe0CMsbSsLx3nrR0cq8xpIkoAC6X36o4DGMITF3m2v3KsojC7ru9X0Gz+zUFr6rwpq/0lTNzFLNu6sPNo3w==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-x64": { + "version": "1.92.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.92.1.tgz", + "integrity": "sha512-xuiK5Jp5NldW4bvlC7AuX1Wf7o0gLZ3md/hNg+bkTvxtCDgnUHtfdo8Q+xWP11bD9QX31xXFWpmUB8UDLi6XQQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-unknown-all": { + "version": "1.92.1", + "resolved": "https://registry.npmjs.org/sass-embedded-unknown-all/-/sass-embedded-unknown-all-1.92.1.tgz", + "integrity": "sha512-AT9oXvtNY4N+Nd0wvoWqq9A5HjdH/X3aUH4boQUtXyaJ/9DUwnQmBpP5Gtn028ZS8exOGBdobmmWAuigv0k/OA==", + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "!android", + "!darwin", + "!linux", + "!win32" + ], + "dependencies": { + "sass": "1.92.1" + } + }, + "node_modules/sass-embedded-win32-arm64": { + "version": "1.92.1", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.92.1.tgz", + "integrity": "sha512-KvmpQjY9yTBMtTYz4WBqetlv9bGaDW1aStcu7MSTbH7YiSybX/9fnxlCAEQv1WlIidQhcJAiyk0Eae+LGK7cIQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-win32-x64": { + "version": "1.92.1", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.92.1.tgz", + "integrity": "sha512-B6Nz/GbH7Vkpb2TkQHsGcczWM5t+70VWopWF1x5V5yxLpA8ZzVQ7NTKKi+jDoVY2Efu6ZyzgT9n5KgG2kWliXA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-formatter": { + "version": "0.7.9", + "resolved": "https://registry.npmjs.org/sass-formatter/-/sass-formatter-0.7.9.tgz", + "integrity": "sha512-CWZ8XiSim+fJVG0cFLStwDvft1VI7uvXdCNJYXhDvowiv+DsbD1nXLiQ4zrE5UBvj5DWZJ93cwN0NX5PMsr1Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "suf-log": "^2.5.3" + } + }, + "node_modules/satori": { + "version": "0.18.2", + "resolved": "https://registry.npmjs.org/satori/-/satori-0.18.2.tgz", + "integrity": "sha512-Y9fOzHuaslMX+3otoULyvUBOxXN6a0CJL+MPeFrHgGSPDwdSxkZdhY9W8U4MvDm0aT/+EIr5g18dvAQV+UplDA==", + "license": "MPL-2.0", + "dependencies": { + "@shuding/opentype.js": "1.4.0-beta.0", + "css-background-parser": "^0.1.0", + "css-box-shadow": "1.0.0-3", + "css-gradient-parser": "^0.0.17", + "css-to-react-native": "^3.0.0", + "emoji-regex-xs": "^2.0.1", + "escape-html": "^1.0.3", + "linebreak": "^1.1.0", + "parse-css-color": "^0.2.1", + "postcss-value-parser": "^4.2.0", + "yoga-layout": "^3.2.1" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/satori-html": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/satori-html/-/satori-html-0.3.2.tgz", + "integrity": "sha512-wjTh14iqADFKDK80e51/98MplTGfxz2RmIzh0GqShlf4a67+BooLywF17TvJPD6phO0Hxm7Mf1N5LtRYvdkYRA==", + "license": "MIT", + "dependencies": { + "ultrahtml": "^1.2.0" + } + }, + "node_modules/sax": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", + "license": "ISC" + }, + "node_modules/scule": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/scule/-/scule-1.3.0.tgz", + "integrity": "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/server-destroy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", + "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==", + "license": "ISC" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/sharp": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", + "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", + "hasInstallScript": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@img/colour": "^1.0.0", + "detect-libc": "^2.1.2", + "semver": "^7.7.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.34.5", + "@img/sharp-darwin-x64": "0.34.5", + "@img/sharp-libvips-darwin-arm64": "1.2.4", + "@img/sharp-libvips-darwin-x64": "1.2.4", + "@img/sharp-libvips-linux-arm": "1.2.4", + "@img/sharp-libvips-linux-arm64": "1.2.4", + "@img/sharp-libvips-linux-ppc64": "1.2.4", + "@img/sharp-libvips-linux-riscv64": "1.2.4", + "@img/sharp-libvips-linux-s390x": "1.2.4", + "@img/sharp-libvips-linux-x64": "1.2.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", + "@img/sharp-libvips-linuxmusl-x64": "1.2.4", + "@img/sharp-linux-arm": "0.34.5", + "@img/sharp-linux-arm64": "0.34.5", + "@img/sharp-linux-ppc64": "0.34.5", + "@img/sharp-linux-riscv64": "0.34.5", + "@img/sharp-linux-s390x": "0.34.5", + "@img/sharp-linux-x64": "0.34.5", + "@img/sharp-linuxmusl-arm64": "0.34.5", + "@img/sharp-linuxmusl-x64": "0.34.5", + "@img/sharp-wasm32": "0.34.5", + "@img/sharp-win32-arm64": "0.34.5", + "@img/sharp-win32-ia32": "0.34.5", + "@img/sharp-win32-x64": "0.34.5" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shiki": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.21.0.tgz", + "integrity": "sha512-N65B/3bqL/TI2crrXr+4UivctrAGEjmsib5rPMMPpFp1xAx/w03v8WZ9RDDFYteXoEgY7qZ4HGgl5KBIu1153w==", + "license": "MIT", + "dependencies": { + "@shikijs/core": "3.21.0", + "@shikijs/engine-javascript": "3.21.0", + "@shikijs/engine-oniguruma": "3.21.0", + "@shikijs/langs": "3.21.0", + "@shikijs/themes": "3.21.0", + "@shikijs/types": "3.21.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "license": "MIT" + }, + "node_modules/sitemap": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-8.0.0.tgz", + "integrity": "sha512-+AbdxhM9kJsHtruUF39bwS/B0Fytw6Fr1o4ZAIAEqA6cke2xcoO2GleBw9Zw7nRzILVEgz7zBM5GiTJjie1G9A==", + "license": "MIT", + "dependencies": { + "@types/node": "^17.0.5", + "@types/sax": "^1.2.1", + "arg": "^5.0.0", + "sax": "^1.2.4" + }, + "bin": { + "sitemap": "dist/cli.js" + }, + "engines": { + "node": ">=14.0.0", + "npm": ">=6.0.0" + } + }, + "node_modules/sitemap/node_modules/@types/node": { + "version": "17.0.45", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", + "license": "MIT" + }, + "node_modules/smol-toml": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.6.0.tgz", + "integrity": "sha512-4zemZi0HvTnYwLfrpk/CF9LOd9Lt87kAt50GnqhMpyF9U3poDAP2+iukq2bZsO/ufegbYehBkqINbsWxj4l4cw==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 18" + }, + "funding": { + "url": "https://github.com/sponsors/cyyynthia" + } + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "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", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/stream-replace-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/stream-replace-string/-/stream-replace-string-2.0.0.tgz", + "integrity": "sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w==", + "license": "MIT" + }, + "node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.codepointat": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string.prototype.codepointat/-/string.prototype.codepointat-0.2.1.tgz", + "integrity": "sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==", + "license": "MIT" + }, + "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": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/stripe": { + "version": "20.2.0", + "resolved": "https://registry.npmjs.org/stripe/-/stripe-20.2.0.tgz", + "integrity": "sha512-m8niTfdm3nPP/yQswRWMwQxqEUcTtB3RTJQ9oo6NINDzgi7aPOadsH/fPXIIfL1Sc5+lqQFKSk7WiO6CXmvaeA==", + "license": "MIT", + "dependencies": { + "qs": "^6.14.1" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "@types/node": ">=16" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/strnum": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.1.tgz", + "integrity": "sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT" + }, + "node_modules/style-to-js": { + "version": "1.1.17", + "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.17.tgz", + "integrity": "sha512-xQcBGDxJb6jjFCTzvQtfiPn6YvvP2O8U1MDIPNfJQlWMYfktPy+iGsHE7cssjs7y84d9fQaK4UF3RIJaAHSoYA==", + "license": "MIT", + "dependencies": { + "style-to-object": "1.0.9" + } + }, + "node_modules/style-to-object": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.9.tgz", + "integrity": "sha512-G4qppLgKu/k6FwRpHiGiKPaPTFcG3g4wNVX/Qsfu+RqQM30E7Tyu/TEgxcL9PNLF5pdRLwQdE3YKKf+KF2Dzlw==", + "license": "MIT", + "dependencies": { + "inline-style-parser": "0.2.4" + } + }, + "node_modules/suf-log": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/suf-log/-/suf-log-2.5.3.tgz", + "integrity": "sha512-KvC8OPjzdNOe+xQ4XWJV2whQA0aM1kGVczMQ8+dStAO6KfEB140JEVQ9dE76ONZ0/Ylf67ni4tILPJB41U0eow==", + "dev": true, + "license": "MIT", + "dependencies": { + "s.color": "0.0.15" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/svelte": { + "version": "5.49.0", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.49.0.tgz", + "integrity": "sha512-Fn2mCc3XX0gnnbBYzWOTrZHi5WnF9KvqmB1+KGlUWoJkdioPmFYtg2ALBr6xl2dcnFTz3Vi7/mHpbKSVg/imVg==", + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.4", + "@jridgewell/sourcemap-codec": "^1.5.0", + "@sveltejs/acorn-typescript": "^1.0.5", + "@types/estree": "^1.0.5", + "acorn": "^8.12.1", + "aria-query": "^5.3.1", + "axobject-query": "^4.1.0", + "clsx": "^2.1.1", + "devalue": "^5.6.2", + "esm-env": "^1.2.1", + "esrap": "^2.2.1", + "is-reference": "^3.0.3", + "locate-character": "^3.0.0", + "magic-string": "^0.30.11", + "zimmerframe": "^1.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/svelte2tsx": { + "version": "0.7.46", + "resolved": "https://registry.npmjs.org/svelte2tsx/-/svelte2tsx-0.7.46.tgz", + "integrity": "sha512-S++Vw3w47a8rBuhbz4JK0fcGea8tOoX1boT53Aib8+oUO2EKeOG+geXprJVTDfBlvR+IJdf3jIpR2RGwT6paQA==", + "license": "MIT", + "dependencies": { + "dedent-js": "^1.0.1", + "scule": "^1.3.0" + }, + "peerDependencies": { + "svelte": "^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0", + "typescript": "^4.9.4 || ^5.0.0" + } + }, + "node_modules/svgo": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.0.tgz", + "integrity": "sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw==", + "license": "MIT", + "dependencies": { + "commander": "^11.1.0", + "css-select": "^5.1.0", + "css-tree": "^3.0.1", + "css-what": "^6.1.0", + "csso": "^5.0.5", + "picocolors": "^1.1.1", + "sax": "^1.4.1" + }, + "bin": { + "svgo": "bin/svgo.js" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, + "node_modules/sync-child-process": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/sync-child-process/-/sync-child-process-1.0.2.tgz", + "integrity": "sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "sync-message-port": "^1.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/sync-message-port": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sync-message-port/-/sync-message-port-1.1.3.tgz", + "integrity": "sha512-GTt8rSKje5FilG+wEdfCkOcLL7LWqpMlr2c3LRuKt/YXxcJ52aGSbGBAdI4L3aaqfrBt6y711El53ItyH1NWzg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/tailwindcss": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.13.tgz", + "integrity": "sha512-i+zidfmTqtwquj4hMEwdjshYYgMbOrPzb9a0M3ZgNa0JMoZeFC6bxZvO8yr8ozS6ix2SDz0+mvryPeBs2TFE+w==", + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.3.tgz", + "integrity": "sha512-ZL6DDuAlRlLGghwcfmSn9sK3Hr6ArtyudlSAiCqQ6IfE+b+HHbydbYDIG15IfS5do+7XQQBdBiubF/cV2dnDzg==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/tar": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", + "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", + "license": "ISC", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.0.1", + "mkdirp": "^3.0.1", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.2.tgz", + "integrity": "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toad-cache": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/toad-cache/-/toad-cache-3.7.0.tgz", + "integrity": "sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==", + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "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/tsconfck": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.6.tgz", + "integrity": "sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==", + "license": "MIT", + "bin": { + "tsconfck": "bin/tsconfck.js" + }, + "engines": { + "node": "^18 || >=20" + }, + "peerDependencies": { + "typescript": "^5.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "devOptional": true, + "license": "0BSD" + }, + "node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", + "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "license": "MIT" + }, + "node_modules/ufo": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.3.tgz", + "integrity": "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==", + "license": "MIT" + }, + "node_modules/ultrahtml": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ultrahtml/-/ultrahtml-1.6.0.tgz", + "integrity": "sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==", + "license": "MIT" + }, + "node_modules/uncrypto": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz", + "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==", + "license": "MIT" + }, + "node_modules/undici-types": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz", + "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==", + "license": "MIT" + }, + "node_modules/unicode-trie": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", + "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", + "license": "MIT", + "dependencies": { + "pako": "^0.2.5", + "tiny-inflate": "^1.0.0" + } + }, + "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/unifont": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/unifont/-/unifont-0.7.3.tgz", + "integrity": "sha512-b0GtQzKCyuSHGsfj5vyN8st7muZ6VCI4XD4vFlr7Uy1rlWVYxC3npnfk8MyreHxJYrz1ooLDqDzFe9XqQTlAhA==", + "license": "MIT", + "dependencies": { + "css-tree": "^3.1.0", + "ofetch": "^1.5.1", + "ohash": "^2.0.11" + } + }, + "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-modify-children": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-modify-children/-/unist-util-modify-children-4.0.0.tgz", + "integrity": "sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "array-iterate": "^2.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-position-from-estree": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz", + "integrity": "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==", + "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-children": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-children/-/unist-util-visit-children-3.0.0.tgz", + "integrity": "sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/universal-github-app-jwt": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/universal-github-app-jwt/-/universal-github-app-jwt-2.2.2.tgz", + "integrity": "sha512-dcmbeSrOdTnsjGjUfAlqNDJrhxXizjAz94ija9Qw8YkZ1uu0d+GoZzyH+Jb9tIIqvGsadUfwg+22k5aDqqwzbw==", + "license": "MIT" + }, + "node_modules/universal-user-agent": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.3.tgz", + "integrity": "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==", + "license": "ISC" + }, + "node_modules/unstorage": { + "version": "1.17.4", + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.17.4.tgz", + "integrity": "sha512-fHK0yNg38tBiJKp/Vgsq4j0JEsCmgqH58HAn707S7zGkArbZsVr/CwINoi+nh3h98BRCwKvx1K3Xg9u3VV83sw==", + "license": "MIT", + "dependencies": { + "anymatch": "^3.1.3", + "chokidar": "^5.0.0", + "destr": "^2.0.5", + "h3": "^1.15.5", + "lru-cache": "^11.2.0", + "node-fetch-native": "^1.6.7", + "ofetch": "^1.5.1", + "ufo": "^1.6.3" + }, + "peerDependencies": { + "@azure/app-configuration": "^1.8.0", + "@azure/cosmos": "^4.2.0", + "@azure/data-tables": "^13.3.0", + "@azure/identity": "^4.6.0", + "@azure/keyvault-secrets": "^4.9.0", + "@azure/storage-blob": "^12.26.0", + "@capacitor/preferences": "^6 || ^7 || ^8", + "@deno/kv": ">=0.9.0", + "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", + "@planetscale/database": "^1.19.0", + "@upstash/redis": "^1.34.3", + "@vercel/blob": ">=0.27.1", + "@vercel/functions": "^2.2.12 || ^3.0.0", + "@vercel/kv": "^1 || ^2 || ^3", + "aws4fetch": "^1.0.20", + "db0": ">=0.2.1", + "idb-keyval": "^6.2.1", + "ioredis": "^5.4.2", + "uploadthing": "^7.4.4" + }, + "peerDependenciesMeta": { + "@azure/app-configuration": { + "optional": true + }, + "@azure/cosmos": { + "optional": true + }, + "@azure/data-tables": { + "optional": true + }, + "@azure/identity": { + "optional": true + }, + "@azure/keyvault-secrets": { + "optional": true + }, + "@azure/storage-blob": { + "optional": true + }, + "@capacitor/preferences": { + "optional": true + }, + "@deno/kv": { + "optional": true + }, + "@netlify/blobs": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@upstash/redis": { + "optional": true + }, + "@vercel/blob": { + "optional": true + }, + "@vercel/functions": { + "optional": true + }, + "@vercel/kv": { + "optional": true + }, + "aws4fetch": { + "optional": true + }, + "db0": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "uploadthing": { + "optional": true + } + } + }, + "node_modules/unstorage/node_modules/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", + "license": "MIT", + "dependencies": { + "readdirp": "^5.0.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/unstorage/node_modules/readdirp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", + "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "license": "BSD-2-Clause", + "optional": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/varint": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", + "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==", + "devOptional": true, + "license": "MIT" + }, + "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.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "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/vite": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.1.tgz", + "integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==", + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vitefu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.1.tgz", + "integrity": "sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==", + "license": "MIT", + "workspaces": [ + "tests/deps/*", + "tests/projects/*", + "tests/projects/workspace/packages/*" + ], + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/vscode-languageserver-textdocument": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz", + "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==", + "license": "MIT" + }, + "node_modules/vscode-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", + "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", + "license": "MIT" + }, + "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", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-pm-runs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz", + "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/widest-line": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-5.0.0.tgz", + "integrity": "sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==", + "license": "MIT", + "dependencies": { + "string-width": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wrap-ansi": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", + "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/xxhash-wasm": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.1.0.tgz", + "integrity": "sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==", + "license": "MIT" + }, + "node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/yaml": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz", + "integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==", + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", + "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yocto-spinner": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/yocto-spinner/-/yocto-spinner-0.2.3.tgz", + "integrity": "sha512-sqBChb33loEnkoXte1bLg45bEBsOP9N1kzQh5JZNKj/0rik4zAPTNSAVPj3uQAdc6slYJ0Ksc403G2XgxsJQFQ==", + "license": "MIT", + "dependencies": { + "yoctocolors": "^2.1.1" + }, + "engines": { + "node": ">=18.19" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoctocolors": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.1.tgz", + "integrity": "sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoga-layout": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/yoga-layout/-/yoga-layout-3.2.1.tgz", + "integrity": "sha512-0LPOt3AxKqMdFBZA3HBAt/t/8vIKq7VaQYbuA8WxCgung+p9TVyKRYdpvCb80HcdTN2NkbIKbhNwKUfm3tQywQ==", + "license": "MIT" + }, + "node_modules/zimmerframe": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.4.tgz", + "integrity": "sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==", + "license": "MIT" + }, + "node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-to-json-schema": { + "version": "3.25.1", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.1.tgz", + "integrity": "sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==", + "license": "ISC", + "peerDependencies": { + "zod": "^3.25 || ^4" + } + }, + "node_modules/zod-to-ts": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/zod-to-ts/-/zod-to-ts-1.2.0.tgz", + "integrity": "sha512-x30XE43V+InwGpvTySRNz9kB7qFU8DlyEy7BsSTCHPH1R0QasMmHWZDCzYm6bVXtj/9NNJAZF3jW8rzFvH5OFA==", + "peerDependencies": { + "typescript": "^4.9.4 || ^5.0.2", + "zod": "^3" + } + }, + "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 new file mode 100644 index 0000000..32a763f --- /dev/null +++ b/package.json @@ -0,0 +1,73 @@ +{ + "name": "multiterm-astro", + "description": "A terminal-inspired coding blog built with Astro.", + "type": "module", + "version": "1.0.0", + "scripts": { + "dev": "astro dev", + "build": "astro build", + "postbuild": "pagefind --site dist", + "preview": "astro preview", + "astro": "astro", + "format": "prettier --write ." + }, + "dependencies": { + "@astrojs/markdown-remark": "^6.3.6", + "@astrojs/mdx": "^4.3.4", + "@astrojs/node": "^9.5.2", + "@astrojs/rss": "^4.0.12", + "@astrojs/sitemap": "^3.5.1", + "@astrojs/svelte": "^7.2.5", + "@astrojs/ts-plugin": "^1.10.4", + "@astrojs/vercel": "^9.0.4", + "@expo-google-fonts/jetbrains-mono": "^0.4.0", + "@expressive-code/plugin-line-numbers": "^0.41.3", + "@fontsource-variable/jetbrains-mono": "^5.2.6", + "@fontsource/varela": "^5.2.8", + "@pagefind/default-ui": "^1.4.0", + "@resvg/resvg-js": "^2.6.2", + "@stripe/stripe-js": "^8.6.4", + "@tailwindcss/vite": "^4.1.13", + "@types/hast": "^3.0.4", + "@types/react": "^19.1.12", + "@types/react-dom": "^19.1.9", + "astro": "^5.13.5", + "astro-expressive-code": "^0.41.3", + "color": "^5.0.0", + "cookie": "^1.1.1", + "date-fns": "^4.1.0", + "emoji-regex": "^10.5.0", + "gemoji": "^8.1.0", + "hast-util-from-html-isomorphic": "^2.0.0", + "hastscript": "^9.0.1", + "katex": "^0.16.22", + "markdown-it": "^14.1.0", + "mdast-util-directive": "^3.1.0", + "mdast-util-to-string": "^4.0.0", + "octokit": "^5.0.5", + "reading-time": "^1.5.0", + "rehype-autolink-headings": "^7.1.0", + "rehype-external-links": "^3.0.0", + "rehype-katex": "^7.0.1", + "rehype-unwrap-images": "^1.0.0", + "remark-directive": "^4.0.0", + "remark-math": "^6.0.0", + "sanitize-html": "^2.17.0", + "satori": "^0.18.2", + "satori-html": "^0.3.2", + "stripe": "^20.2.0", + "svelte": "^5.49.0", + "tailwindcss": "^4.1.13", + "typescript": "^5.9.2", + "unified": "^11.0.5" + }, + "devDependencies": { + "@types/cookie": "^0.6.0", + "@types/markdown-it": "^14.1.2", + "@types/sanitize-html": "^2.16.0", + "pagefind": "^1.4.0", + "prettier": "3.6.2", + "prettier-plugin-astro": "0.14.1", + "sass-embedded": "^1.92.1" + } +} diff --git a/prettier.config.js b/prettier.config.js new file mode 100644 index 0000000..3396512 --- /dev/null +++ b/prettier.config.js @@ -0,0 +1,21 @@ +// Typescript file would be better but it's currently experimental + +const config = { + semi: false, + singleQuote: true, + trailingComma: 'all', + printWidth: 90, + tabWidth: 2, + useTabs: false, + plugins: ['prettier-plugin-astro'], + overrides: [ + { + files: '*.astro', + options: { + parser: 'astro', + }, + }, + ], +} + +export default config diff --git a/public/duck.webp b/public/duck.webp new file mode 100644 index 0000000000000000000000000000000000000000..e6f8a9a1339228e4468c2b80273da5f890682258 GIT binary patch literal 21850 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 Z`52kpKa7R-hkhPE#DNKfG=gd_002?K`(6M5 literal 0 HcmV?d00001 diff --git a/public/favicon.svg b/public/favicon.svg new file mode 100644 index 0000000..f157bd1 --- /dev/null +++ b/public/favicon.svg @@ -0,0 +1,9 @@ + + + + diff --git a/public/owl.webp b/public/owl.webp new file mode 100644 index 0000000000000000000000000000000000000000..52e11a0e98f271505cb7c234e40663f6386fc85d GIT binary patch literal 21180 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 + + + + + + + <xsl:value-of select="/rss/channel/title"/> Web Feed + + + + + + +
+
+

+ + + + + + + + + + + + + + + + + + + Web Feed Preview +

+

+

+ + + + + Visit Website → + +
+

Recent Items

+ +
+

+ + + + + + +

+ + Published: + +
+
+
+ + +
+
\ No newline at end of file diff --git a/public/unicorn.webp b/public/unicorn.webp new file mode 100644 index 0000000000000000000000000000000000000000..6d8dfea8cc54c83a0a06a6640bd6f16f452597fe GIT binary patch literal 16712 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%0DxRaXzdElh-+jne4brxegoLz%!ao*7Vaj z5qd6iSl<#3H8{l-RRhuTDdH}Q1q`NC8^9= zp3#~d!Tsky>HXu*JP6baiR2nXt1e!08L_L}AgFkA?)z|rg1aVrlZ@9I<{+|;kHZh- zvbILfJ1EAm2QSQ`%S2)~J^sOcR@?J)NqP^5L)%yPvbCB3*;gM8Cn>X;^mwAplfABf zmEJ=$iQ5pZ&v+I8eWg_=|IE4n{~8DZbMfK-oN9-NeidGSMDgYCY=-b~9g^o$)6cdg z^Sopm@y!i_6FDHKR#_L(#Pf%f@L9zYc41t-&h;V@9K-a;9&hezMab z?4iiclH$<+upt$Xv@+h?2WK2g3*4QM(=V!DLu)uJH=via`@z;$9Yy3bvh z(6h+~)%>1XSvN@2?UZ%~bFawzY0Ybz)+c7F93EmDWq9yG98LjIvoF_WtV7VYWM%w#mcS5+Kz1v zXW=X?LRXWeB5ThJCs*l(h7@Hgzw${40>OehPW@Tg|fE5PVs%PPwgV zel^4;Xzx9PVz{S|leP?+NZ{bj+fahEH+fhfFOR|sXIxE#CByVTqzDl%VW=s0x&8e# zyhX;_eL?KPx$A0lloGeQydo`p?K$ei29gHJ5Tz}^Xc#*Cx#D^DOucN7>~r<*n9FOf zlz9dXueqoLrmcWxxo#^4PkWouK3+oOTQ^7<@{0=C!NM3HSDDkFi(3&Y>MFVkw6W4b z2yMmC+qDFVnz9=(*x%$6@VrR?&*KN97J;Lk_t`tapKrw%Ns&xuyLq{{m|v9l09kwL zIDR&8P=L8XRRPZ79r{&{96Z{d8nE=VYtO-LT+yZyPaE^&6PRQ!E14zARI2E?-Guk< zHOO9L{eKg%s(U<*tVpvir~!j7;uLFui2zD&FZ7v&MbR4PKAXzPzme(4dA`1<8PzpT zl2P>6{Tdg2-SFuE0AQ$+u6H`j1p6ef1zhw>b>+U=Mnj+A(+FQF2Y9X<{xHsm2({Qj z{)juulI`-Zu>L9s$ZNua;diI~iMxfu+?dTJAuT>q>DJ-)fB-xoY?+Qr`G0aIOEVJ~An`9maQ-!f z(sbUbK#g`qw{rniQVH|m!WT`-u(OV)@Bv@u4H(^Z5C)wC5I{{5tNhqKs0mf!oW)_O z=a&QMoi1H+>y+zuHZO3(GzPaJ>VaY12lpVqG@J4Vzo-}v@GL>c#~@IHfI8))_cI>1 z9NHq1u&02Z1r(L>W-U_!psfoDW&3*xTIPVn0E_}l^uTSaSshkPHtFtI*koL1ge27I zJ7J+uVMXB8aUP~%cMNV4Mw|?_WEvS8bt}Zuf(~A$mp}up9RGL`SWreAfO?3Z6Am7d zKCVd*p=G5m-yi^Rtk1-V%e)4 z=R^_Q`lrvt#Nco&d+m%S?q|=5;TA zP>AU>H~5tFd=JHPVK!+7S#f{(=gy7-CF~I4z3)HG=1q%a$V;9Hy48t;fXD#PV-|te z#o% zWAQdL-(`9Ydb%wrBt1RMpq+*AI#toqR>3da(BoIsOMNSeriImXnPp%-ByXNy+leNX6sC3D~{3uhZB`RDtZjB(n zHXHRU!IiRAN{Z)(b$M(+rI_FDLMWBKw(DJ4;E?T_@2>9f{#MX4e%hb+t7(GjHvzb7Wa zvGmW{zSt%*h@C~(fL@%IW=efg1+!f5x(cRq_xF#&?%Ic>ul_FwYvgKEk$IMUQ1Wy zyM|69yRZ)DoQ;(n#(HD_E^L`k!F79vzOZVIH84_VY|%TsK9g%{S`Gq%hf()Bf136} zjlDT;Igx3SbYkG@Kv_+||N4Rcu&X#ry6=p0#-%B%SZ+Wu`7LS_9h<#r=SqF1Op3yix{ejn0c$KwQh)#ee0Xu{ literal 0 HcmV?d00001 diff --git a/src/components/BlockHeader.astro b/src/components/BlockHeader.astro new file mode 100644 index 0000000..175236d --- /dev/null +++ b/src/components/BlockHeader.astro @@ -0,0 +1,6 @@ +<> +

+ +

+
+ diff --git a/src/components/BuyMeACoffeeModal.svelte b/src/components/BuyMeACoffeeModal.svelte new file mode 100644 index 0000000..764303f --- /dev/null +++ b/src/components/BuyMeACoffeeModal.svelte @@ -0,0 +1,469 @@ + + + +
+ + {#if step === 'selection'} +
+

+ Buy Me a Coffee +

+

+ Keep the terminal running and the caffeine flowing. Support my projects and + content. +

+
+ {/if} + + + + +
+ {#if step === 'selection'} +
+ +
+ {#each [5, 10, 20] as val} + + {/each} +
+ +
+ +
+ $ + +
+
+ + +
+ {:else if step === 'payment'} +
+
+

Your Contribution:

+

+ ${finalAmount.toFixed(2)} +

+
+ +
+ + {#if error} +
+ {error} +
+ {/if} + + +
+ {:else if step === 'success'} +
+
☕️
+

+ Thank you for your support! +

+

+ Your contribution helps keep my projects and content alive. I truly appreciate + it! +

+ +
+ {/if} + +

+ Payments Secured by Stripe +

+
+
+
+ + diff --git a/src/components/Comments.svelte b/src/components/Comments.svelte new file mode 100644 index 0000000..5ab2520 --- /dev/null +++ b/src/components/Comments.svelte @@ -0,0 +1,486 @@ + + +
+ +
+ + Leave a comment + + + + + +
+ {#if !user} +
+ + +
+ {/if} + + {#if user} +
+ {user.login} +
+
Signed in as
+
{user.login}
+
+ Sign out +
+ {/if} + +
+ + + + {#if authMode === 'guest' && !user} +
+ + +
+ {/if} + +
+ + +
+ + + {#if authMode === 'guest' && !user} +
+ + +
+ {/if} + + + +
+
+
+ + {#if isLoading} +
+ + + + + Loading comments... +
+ {:else if error} +

+ {error} +

+ {:else} +
+ {#each comments as comment} +
+ +
+ {comment.author.login} +
+
+
+
+ + {comment.author.login} + + {#if comment.author.login === 'FoggyMtnDrifter'} + ADMIN + {/if} +
+ + {new Date(comment.createdAt).toLocaleDateString(undefined, { + year: 'numeric', + month: 'short', + day: 'numeric', + })} + +
+
+ {@html comment.bodyHTML} +
+
+
+
+ + + {#if comment.replies && comment.replies.nodes.length > 0} +
+ {#each comment.replies.nodes as reply} +
+ {reply.author.login} +
+
+
+ + {reply.author.login} + + {#if reply.author.login === 'FoggyMtnDrifter'} + ADMIN + {/if} +
+ + {new Date(reply.createdAt).toLocaleDateString(undefined, { + year: 'numeric', + month: 'short', + day: 'numeric', + })} + +
+
+ {@html reply.bodyHTML} +
+
+
+ {/each} +
+ {/if} +
+ {/each} + + {#if comments.length === 0} +
+

No comments yet.

+

Be the first to post!

+
+ {/if} +
+ {/if} +
+ + diff --git a/src/components/CookieConsent.astro b/src/components/CookieConsent.astro new file mode 100644 index 0000000..7f689a3 --- /dev/null +++ b/src/components/CookieConsent.astro @@ -0,0 +1,73 @@ +--- + +--- + + + + diff --git a/src/components/DividerText.astro b/src/components/DividerText.astro new file mode 100644 index 0000000..f6bf94c --- /dev/null +++ b/src/components/DividerText.astro @@ -0,0 +1,12 @@ +--- +interface Props { + text: string +} +const { text } = Astro.props +--- + +
+
+ {text} +
+
diff --git a/src/components/Footer.astro b/src/components/Footer.astro new file mode 100644 index 0000000..37fae87 --- /dev/null +++ b/src/components/Footer.astro @@ -0,0 +1,20 @@ +--- +import siteConfig from '~/site.config' +import SocialLinks from '~/components/SocialLinks.astro' +--- + + diff --git a/src/components/GitHubActivityCalendar.astro b/src/components/GitHubActivityCalendar.astro new file mode 100644 index 0000000..b9f32cb --- /dev/null +++ b/src/components/GitHubActivityCalendar.astro @@ -0,0 +1,307 @@ +--- +import { + differenceInCalendarDays, + eachDayOfInterval, + formatISO, + getDay, + nextDay, + parseISO, + subWeeks, + getYear, + getMonth, + isValid, +} from 'date-fns' +import type { + WeekdayIndex, + GitHubActivityApiResponse, + GitHubActivityDay, + GitHubActivityWeek, + GitHubActivityMonthLabel, +} from '~/types' + +interface Props { + username: string + year?: number +} + +function range(n: number) { + return [...Array(n).keys()] +} + +async function fetchData( + username: string, + year: number | 'last', +): Promise { + function validateActivities(activities: Array) { + if (activities.length === 0) { + throw new Error('Activity data must not be empty.') + } + for (const { date, count } of activities) { + if (!isValid(parseISO(date))) { + throw new Error(`Activity date '${date}' is not a valid ISO 8601 date string.`) + } + if (count < 0) { + throw new RangeError(`Activity count must not be negative, found ${count}.`) + } + } + } + const apiUrl = 'https://github-contributions-api.jogruber.de/v4/' + const response = await fetch(`${apiUrl}${username}?y=${String(year)}`) + const data = (await response.json()) as GitHubActivityApiResponse + if (!response.ok) { + const message = data.error || 'Unknown error' + throw Error(`Fetching GitHub contribution data for "${username}" failed: ${message}`) + } + + validateActivities(data.contributions) + + return data +} + +function calcColorScale([start, end]: [string, string], steps: number): Array { + return range(steps).map((i) => { + switch (i) { + case 0: + return start + case steps - 1: + return end + default: { + const pos = (i / (steps - 1)) * 100 + return `color-mix(in oklab, ${end} ${parseFloat(pos.toFixed(2))}%, ${start})` + } + } + }) +} + +function fillHoles(activities: Array): Array { + const calendar = new Map(activities.map((a) => [a.date, a])) + const firstActivity = activities[0] as GitHubActivityDay + const lastActivity = activities[activities.length - 1] as GitHubActivityDay + + return eachDayOfInterval({ + start: parseISO(firstActivity.date), + end: parseISO(lastActivity.date), + }).map((day) => { + const date = formatISO(day, { representation: 'date' }) + if (calendar.has(date)) { + return calendar.get(date) as GitHubActivityDay + } + return { + date, + count: 0, + level: 0, + } + }) +} + +function groupByWeeks( + activities: Array, + weekStart: WeekdayIndex = 0, // 0 = Sunday +): Array { + const normalizedActivities = fillHoles(activities) + // Determine the first date of the calendar. If the first date is not the + // passed weekday, the respective weekday one week earlier is used. + const firstActivity = normalizedActivities[0] as GitHubActivityDay + const firstDate = parseISO(firstActivity.date) + const firstCalendarDate = + getDay(firstDate) === weekStart + ? firstDate + : subWeeks(nextDay(firstDate, weekStart), 1) + // To correctly group activities by week, it is necessary to left-pad the list + // because the first date might not be set start weekday. + const paddedActivities = [ + ...(Array(differenceInCalendarDays(firstDate, firstCalendarDate)).fill( + undefined, + ) as Array), + ...normalizedActivities, + ] + const numberOfWeeks = Math.ceil(paddedActivities.length / 7) + + // Finally, group activities by week + return [...Array(numberOfWeeks).keys()].map((weekIndex) => + paddedActivities.slice(weekIndex * 7, weekIndex * 7 + 7), + ) +} + +function getMonthLabels( + weeks: Array, + monthNames: Array, +): Array { + return weeks + .reduce>((labels, week, weekIndex) => { + const firstActivity = week.find((activity) => activity !== undefined) + if (!firstActivity) { + throw new Error(`Unexpected error: Week ${weekIndex + 1} is empty.`) + } + const month = monthNames[getMonth(parseISO(firstActivity.date))] + if (!month) { + const monthName = new Date(firstActivity.date).toLocaleString('en-US', { + month: 'short', + }) + throw new Error(`Unexpected error: undefined month label for ${monthName}.`) + } + const prevLabel = labels[labels.length - 1] + if (weekIndex === 0 || !prevLabel || prevLabel.label !== month) { + return [...labels, { weekIndex, label: month }] + } + return labels + }, []) + .filter(({ weekIndex }, index, labels) => { + const minWeeks = 3 + // Skip the first month label if there is not enough space to the next one. + if (index === 0) { + return labels[1] && labels[1].weekIndex - weekIndex >= minWeeks + } + // Skip the last month label if there is not enough data in that month + if (index === labels.length - 1) { + return weeks.slice(weekIndex).length >= minWeeks + } + return true + }) +} + +const { username, year = 'last' } = Astro.props + +const data = await fetchData(username, year) + +const themeFromColorscheme: [string, string] = [ + 'var(--theme-background)', + 'var(--theme-accent)', +] + +const totalCount = year === 'last' ? data.total.lastYear : data.total[year] +const maxLevel = 4 +const blockMargin = 4 +const labelMargin = 8 +const blockRadius = 2 +const blockSize = 12 +const fontSize = 14 +const hideColorLegend = false +const hideMonthLabels = false +const hideTotalCount = false +const weekStart = 0 // 0 = Sunday, 1 = Monday, etc. + +const colorScale = calcColorScale(themeFromColorscheme, maxLevel + 1) +const activities = data.contributions + +const firstActivity = activities[0] +const activityYear = getYear(parseISO(firstActivity.date)) +const weeks = groupByWeeks(activities, weekStart) +const labels = { + months: [ + 'Jan', + 'Feb', + 'Mar', + 'Apr', + 'May', + 'Jun', + 'Jul', + 'Aug', + 'Sep', + 'Oct', + 'Nov', + 'Dec', + ], + totalCount: `{{count}} contributions in ${year === 'last' ? 'the last year' : '{{year}}'}`, + legend: { + less: 'Less', + more: 'More', + }, +} +const labelHeight = hideMonthLabels ? 0 : fontSize + labelMargin +const width = weeks.length * (blockSize + blockMargin) - blockMargin +const height = labelHeight + (blockSize + blockMargin) * 7 - blockMargin +--- + +
+
+ + { + !hideMonthLabels && ( + + {getMonthLabels(weeks, labels.months).map(({ label, weekIndex }) => ( + + {label} + + ))} + + ) + } + { + weeks.map((week, weekIndex) => ( + + {week.map((activity, dayIndex) => { + if (!activity) return null + return ( + + ) + })} + + )) + } + +
+ { + !(hideTotalCount && hideColorLegend) && ( +
+ {!hideTotalCount && ( +
+ {labels.totalCount + ? labels.totalCount + .replace('{{count}}', String(totalCount)) + .replace('{{year}}', String(activityYear)) + : `${totalCount} activities in ${activityYear}`} +
+ )} + {!hideColorLegend && ( +
+ {labels.legend.less} + {range(maxLevel + 1).map((level) => ( + + + + ))} + {labels.legend.more} +
+ )} +
+ ) + } +
diff --git a/src/components/Header.astro b/src/components/Header.astro new file mode 100644 index 0000000..2b849f1 --- /dev/null +++ b/src/components/Header.astro @@ -0,0 +1,100 @@ +--- +import siteConfig from '~/site.config' +import LightDarkAutoButton from '~/components/LightDarkAutoButton.astro' +import Search from '~/components/Search.astro' +import SelectTheme from '~/components/SelectTheme.astro' +import NavLink from '~/components/NavLink.astro' + +const lightDarkAutoTheme = siteConfig.themes.mode === 'light-dark-auto' +const selectTheme = + siteConfig.themes.mode === 'select' && siteConfig.themes.include.length > 1 +--- + +
+
+ +
+ + {lightDarkAutoTheme && } + {selectTheme && } + +
+
+ +
+ + diff --git a/src/components/HomeBanner.astro b/src/components/HomeBanner.astro new file mode 100644 index 0000000..e368e2c --- /dev/null +++ b/src/components/HomeBanner.astro @@ -0,0 +1,37 @@ +--- +import { Image } from 'astro:assets' +import GitHubActivityCalendar from '~/components/GitHubActivityCalendar.astro' +import type { FrontmatterImage } from '~/types' + +interface Props { + avatarImage?: FrontmatterImage + githubCalendar?: string +} +const { avatarImage, githubCalendar } = Astro.props +--- + +
+
+ { + avatarImage && ( + {avatarImage.alt} + ) + } +
+
+ +
+
+
+ {githubCalendar && } +
diff --git a/src/components/LightDarkAutoButton.astro b/src/components/LightDarkAutoButton.astro new file mode 100644 index 0000000..794065d --- /dev/null +++ b/src/components/LightDarkAutoButton.astro @@ -0,0 +1,71 @@ +--- +import IconSun from '~/icons/sun.svg' +import IconMoon from '~/icons/moon.svg' +import IconSunMoon from '~/icons/sun-moon.svg' +import siteConfig from '~/site.config' +let lightTheme = siteConfig.themes.include[0] +let darkTheme = siteConfig.themes.include[1] +--- + + + + diff --git a/src/components/LightDarkAutoThemeLoader.astro b/src/components/LightDarkAutoThemeLoader.astro new file mode 100644 index 0000000..5c5b74d --- /dev/null +++ b/src/components/LightDarkAutoThemeLoader.astro @@ -0,0 +1,48 @@ +--- + +--- + + diff --git a/src/components/NavLink.astro b/src/components/NavLink.astro new file mode 100644 index 0000000..22b2114 --- /dev/null +++ b/src/components/NavLink.astro @@ -0,0 +1,18 @@ +--- +import type { NavLink } from '~/types' + +interface Props { + link: NavLink +} + +const { link } = Astro.props +--- + + + {link.name} + diff --git a/src/components/PageHeader.astro b/src/components/PageHeader.astro new file mode 100644 index 0000000..2500abe --- /dev/null +++ b/src/components/PageHeader.astro @@ -0,0 +1,29 @@ +--- +interface Props { + title?: string + titlePieces?: string[] +} + +const { title, titlePieces } = Astro.props + +const splitPath: string[] = Astro.url.pathname + .split('/') + .filter(Boolean) // Remove empty parts + .map((part) => decodeURIComponent(part)) // For Unicode chars kept by github-slugger + +const pieces = titlePieces ?? splitPath + +if (pieces.length === 0) { + pieces.push('home') +} + +const titleFromPieces = pieces.map((part) => `/ ${part}`) +--- + +
+

+ {title ? {title} : titleFromPieces.map((part) => {part})} +

+
diff --git a/src/components/Pagination.astro b/src/components/Pagination.astro new file mode 100644 index 0000000..3e7f8b2 --- /dev/null +++ b/src/components/Pagination.astro @@ -0,0 +1,43 @@ +--- +import IconChevronsLeft from '~/icons/chevrons-left.svg' +import IconChevronsRight from '~/icons/chevrons-right.svg' + +interface Props { + prevLink?: string + prevText?: string + nextLink?: string + nextText?: string +} + +const { prevLink, prevText, nextLink, nextText } = Astro.props +--- + +
+ { + prevLink && ( + + + {prevText || 'Previous'} + + ) + } + { + nextLink && ( + + {nextText || 'Next'} + + + ) + } +
diff --git a/src/components/PostAddendum.astro b/src/components/PostAddendum.astro new file mode 100644 index 0000000..d32a0f8 --- /dev/null +++ b/src/components/PostAddendum.astro @@ -0,0 +1,31 @@ +--- +import type { FrontmatterImage } from '~/types' +import { Image } from 'astro:assets' + +interface Props { + avatarImage?: FrontmatterImage +} +const { avatarImage } = Astro.props +--- + +
+ { + avatarImage && ( + {avatarImage.alt} + ) + } +
+
+ +
+
+
diff --git a/src/components/PostInfo.astro b/src/components/PostInfo.astro new file mode 100644 index 0000000..d346e24 --- /dev/null +++ b/src/components/PostInfo.astro @@ -0,0 +1,62 @@ +--- +import { dateString, SeriesGroup } from '~/utils' +import { render, type CollectionEntry } from 'astro:content' +import type { Collation } from '~/types' + +interface Props { + post: CollectionEntry<'posts'> + class?: string +} + +const { post, class: className } = Astro.props +const { remarkPluginFrontmatter } = await render(post) +const { minutesRead } = remarkPluginFrontmatter +const seriesFrontmatter = post.data.series +let series: Collation<'posts'> | undefined +let seriesPostNumber: number | undefined +let seriesTotal: number | undefined +if (seriesFrontmatter) { + const seriesGroup = await SeriesGroup.build() + series = seriesGroup.match(seriesFrontmatter) + if (!series) { + // This should never happen if the series data is correct + throw new Error(`Series "${seriesFrontmatter}" not found`) + } + seriesPostNumber = series.entries.findIndex((p) => p.id === post.id) + 1 + seriesTotal = series.entries.length +} +--- + +
+
+ { + series && seriesPostNumber && seriesTotal && ( + + {series.title} {seriesPostNumber} / {seriesTotal} + + ) + } +
+ + { + post.data.author && ( + + {post.data.author} + + ) + } + { + minutesRead && ( + + {minutesRead} + + ) + } +
+
+
diff --git a/src/components/PostPreview.astro b/src/components/PostPreview.astro new file mode 100644 index 0000000..546a33e --- /dev/null +++ b/src/components/PostPreview.astro @@ -0,0 +1,46 @@ +--- +import IconChevronsRight from '~/icons/chevrons-right.svg' +import type { CollectionEntry } from 'astro:content' +import { render } from 'astro:content' +import Tags from '~/components/Tags.astro' +import PostInfo from '~/components/PostInfo.astro' +import type { Collation } from '~/types' +import { TagsGroup } from '~/utils' + +interface Props { + post: CollectionEntry<'posts'> +} + +const { post } = Astro.props + +const { remarkPluginFrontmatter } = await render(post) +const description = remarkPluginFrontmatter.description || post.data.description +let tags: Collation<'posts'>[] | undefined +if (post.data.tags && post.data.tags.length > 0) { + const tagsGroup = await TagsGroup.build() + tags = tagsGroup.matchMany(post.data.tags) +} +const samePage = Astro.url.pathname === `/posts/${post.id}` +const articleLink = samePage ? `#${post.id}` : `/posts/${post.id}` +--- + + diff --git a/src/components/ScrollUpButton.astro b/src/components/ScrollUpButton.astro new file mode 100644 index 0000000..5375c2b --- /dev/null +++ b/src/components/ScrollUpButton.astro @@ -0,0 +1,94 @@ +--- +import IconChevronUp from '~/icons/chevron-up.svg' +--- + + + + + + diff --git a/src/components/Search.astro b/src/components/Search.astro new file mode 100644 index 0000000..bed6877 --- /dev/null +++ b/src/components/Search.astro @@ -0,0 +1,221 @@ +--- +import '@pagefind/default-ui/css/ui.css' +import IconCircleX from '~/icons/circle-x.svg' +import IconSearch from '~/icons/search.svg' + +const { trailingSlashes = false } = Astro.props +--- + + + + +
+ + { + import.meta.env.DEV ? ( +
+

+ Search is only available in production builds.
+ Try building and previewing the site to test it out locally. +

+
+ ) : ( +
+ + ) + } +
+
+
+ + + + diff --git a/src/components/SelectTheme.astro b/src/components/SelectTheme.astro new file mode 100644 index 0000000..f87bcd3 --- /dev/null +++ b/src/components/SelectTheme.astro @@ -0,0 +1,193 @@ +--- +import '@pagefind/default-ui/css/ui.css' +import IconPalette from '~/icons/palette.svg' +import IconCircleX from '~/icons/circle-x.svg' +import siteConfig from '~/site.config' + +function kebabToTitleCase(str: string): string { + return str + .split('-') // Split the string into words + .map((word) => word.charAt(0).toUpperCase() + word.slice(1)) // Capitalize each word + .join(' ') // Join the words with a space +} +--- + + + + +
+ +
    + { + siteConfig.themes.include.map((theme) => ( +
  • + +
  • + )) + } +
+
+
+
+ + + + diff --git a/src/components/SelectThemeLoader.astro b/src/components/SelectThemeLoader.astro new file mode 100644 index 0000000..cbf84b7 --- /dev/null +++ b/src/components/SelectThemeLoader.astro @@ -0,0 +1,25 @@ +--- + +--- + + diff --git a/src/components/SeriesSection.astro b/src/components/SeriesSection.astro new file mode 100644 index 0000000..9e961a8 --- /dev/null +++ b/src/components/SeriesSection.astro @@ -0,0 +1,30 @@ +--- +import type { CollectionEntry } from 'astro:content' +import { SeriesGroup } from '~/utils' + +interface Props { + posts: CollectionEntry<'posts'>[] +} + +const { posts } = Astro.props + +const seriesGroup = await SeriesGroup.build(posts) +--- + + diff --git a/src/components/SocialLinks.astro b/src/components/SocialLinks.astro new file mode 100644 index 0000000..c062b56 --- /dev/null +++ b/src/components/SocialLinks.astro @@ -0,0 +1,115 @@ +--- +import type { SocialLinks } from '~/types' +import IconGithub from '~/icons/github.svg' +import IconMastodon from '~/icons/mastodon.svg' +import IconTwitter from '~/icons/twitter.svg' +import IconLinkedin from '~/icons/linkedin.svg' +import IconBluesky from '~/icons/bluesky.svg' +import IconEmail from '~/icons/email.svg' +import IconRss from '~/icons/rss.svg' + +interface Props { + socialLinks: SocialLinks +} + +const { socialLinks } = Astro.props +--- + +
+ { + socialLinks.github && ( + + GitHub + + + ) + } + { + socialLinks.mastodon && ( + + Mastodon + + + ) + } + { + socialLinks.bluesky && ( + + Bluesky + + + ) + } + { + socialLinks.twitter && ( + + Twitter + + + ) + } + { + socialLinks.linkedin && ( + + LinkedIn + + + ) + } + { + socialLinks.email && ( + + Email + + + ) + } + { + socialLinks.rss && ( + + RSS + + + ) + } +
diff --git a/src/components/TableOfContents.astro b/src/components/TableOfContents.astro new file mode 100644 index 0000000..b24b245 --- /dev/null +++ b/src/components/TableOfContents.astro @@ -0,0 +1,54 @@ +--- +import type { MarkdownHeading } from 'astro' +import TOCHeading from '~/components/TableOfContentsHeading.astro' + +interface Props { + headings: MarkdownHeading[] +} + +const { headings } = Astro.props + +const filteredHeadings = headings.filter(({ depth }) => depth >= 2 && depth <= 3) +--- + +
+ Table of Contents + +
+ + + + diff --git a/src/components/TableOfContentsHeading.astro b/src/components/TableOfContentsHeading.astro new file mode 100644 index 0000000..b6686fb --- /dev/null +++ b/src/components/TableOfContentsHeading.astro @@ -0,0 +1,41 @@ +--- +import type { MarkdownHeading } from 'astro' + +interface Props { + heading: MarkdownHeading +} + +const { + heading: { depth, slug, text }, +} = Astro.props +--- + +
  • +
    + { + Array.from({ length: depth - 1 }, (_v, _k) => ( +
    + + +
    + )) + } +
    + {text} +
  • + + diff --git a/src/components/Tags.astro b/src/components/Tags.astro new file mode 100644 index 0000000..ae225e1 --- /dev/null +++ b/src/components/Tags.astro @@ -0,0 +1,22 @@ +--- +import type { Collation } from '~/types' + +interface Props { + tags: Collation<'posts'>[] +} + +const { tags } = Astro.props +--- + +
    + { + tags.map((tag) => ( + + {tag.title} + + )) + } +
    diff --git a/src/components/TagsSection.astro b/src/components/TagsSection.astro new file mode 100644 index 0000000..148b909 --- /dev/null +++ b/src/components/TagsSection.astro @@ -0,0 +1,29 @@ +--- +import type { CollectionEntry } from 'astro:content' +import { TagsGroup } from '~/utils' + +interface Props { + posts: CollectionEntry<'posts'>[] +} + +const { posts } = Astro.props +const tagsGroup = await TagsGroup.build(posts) +--- + + diff --git a/src/content.config.ts b/src/content.config.ts new file mode 100644 index 0000000..e447b1e --- /dev/null +++ b/src/content.config.ts @@ -0,0 +1,66 @@ +import { defineCollection, z } from 'astro:content' +import { glob } from 'astro/loaders' + +const postsCollection = defineCollection({ + loader: glob({ pattern: ['**/*.md', '**/*.mdx'], base: './src/content/posts' }), + schema: ({ image }) => + z.object({ + title: z.string(), + published: z.coerce.date(), + // updated: z.coerce.date().optional(), + draft: z.boolean().optional().default(false), + description: z.string().optional(), + author: z.string().optional(), + series: z.string().optional(), + tags: z.array(z.string()).optional().default([]), + coverImage: z + .strictObject({ + src: image(), + alt: z.string(), + }) + .optional(), + toc: z.boolean().optional().default(true), + }), +}) + +const homeCollection = defineCollection({ + loader: glob({ pattern: ['home.md', 'home.mdx'], base: './src/content' }), + schema: ({ image }) => + z.object({ + avatarImage: z + .object({ + src: image(), + alt: z.string().optional().default('My avatar'), + }) + .optional(), + githubCalendar: z.string().optional(), // GitHub username for calendar + }), +}) + +const addendumCollection = defineCollection({ + loader: glob({ pattern: ['addendum.md', 'addendum.mdx'], base: './src/content' }), + schema: ({ image }) => + z.object({ + avatarImage: z + .object({ + src: image(), + alt: z.string().optional().default('My avatar'), + }) + .optional(), + }), +}) + +const legalCollection = defineCollection({ + loader: glob({ pattern: ['**/*.md', '**/*.mdx'], base: './src/content/legal' }), + schema: z.object({ + title: z.string(), + updated: z.coerce.date(), + }), +}) + +export const collections = { + posts: postsCollection, + home: homeCollection, + addendum: addendumCollection, + legal: legalCollection, +} diff --git a/src/content/addendum.md b/src/content/addendum.md new file mode 100644 index 0000000..02e9ded --- /dev/null +++ b/src/content/addendum.md @@ -0,0 +1,7 @@ +--- +avatarImage: + src: './avatar.jpeg' + alt: 'Michael Kinder' +--- + +Thanks for reading my blog post! Feel free to check out my other posts or contact me via the social links in the footer. diff --git a/src/content/avatar.jpeg b/src/content/avatar.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..6745d97b3afdc5b03e74c1ad2334f6fc70660763 GIT binary patch literal 243228 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 + + + +{/if} +``` + +## Guest Comments: The Attribution Trick + +The clever part about guest comments is how they're stored. Since GitHub Discussions doesn't natively support "guest" authors, I: + +1. Post the comment using a bot account +2. Append the guest's display name in a specific format: `_(Posted by Jane Doe)_` +3. On fetch, parse this attribution and transform the comment object +4. Strip the attribution from the HTML before displaying + +This means the comment lives in GitHub Discussions, but appears to be from the guest user in my UI. + +## Spam Protection + +I implemented two layers of protection: + +### Honeypot + +A hidden field that bots might fill but humans won't: + +```svelte + +``` + +If this field has a value, the submission is rejected. + +### Math CAPTCHA + +For guest comments only, a simple math question: + +```typescript +if (!userToken) { + if (parseInt(num1) + parseInt(num2) !== parseInt(answer)) { + return new Response('Incorrect math answer', { status: 400 }) + } +} +``` + +It's basic, but effective against simple bots without annoying users with complex CAPTCHAs. + +## UI Polish + +I spent time making the UI feel native to my site: + +- Generic avatars for guests (using DiceBear's initials API) +- Changed "OWNER" badge to "ADMIN" +- Newest-first sorting (reversed the GitHub API response) +- Collapsible form (using native `
    ` element) +- Matched the styling to my "Buy me a coffee" modal + +## Configuration + +The system is configured in `site.config.ts`: + +```typescript +comments: { + repo: 'FoggyMtnDrifter/website', + repoId: 'R_kgDORBPuRw', + category: 'General', + categoryId: 'DIC_kwDORBPuR84C1bYd', +} +``` + +You'll also need environment variables: + +```bash +GITHUB_CLIENT_ID=your_oauth_app_client_id +GITHUB_CLIENT_SECRET=your_oauth_app_secret +GITHUB_PERSONAL_ACCESS_TOKEN=your_bot_token +``` + +## Lessons Learned + +1. **GitHub's GraphQL API is powerful** - The search query approach works better than trying to filter discussions directly +2. **HTTP-only cookies are your friend** - Storing OAuth tokens securely is critical +3. **Simple spam protection works** - You don't need reCAPTCHA for a personal blog +4. **Native HTML is underrated** - Using `
    ` for the collapsible form meant zero JavaScript for that feature + +## The Result + +I now have a comment system that: +- Costs nothing (uses GitHub's free tier) +- Supports both authenticated and guest users +- Matches my site's aesthetic perfectly +- Has basic spam protection +- Gives me full control over the UX + +The best part? All comments are stored in GitHub Discussions, so they're backed up, searchable, and I can manage them using GitHub's excellent moderation tools. + +If you're building an Astro site and want more control than Giscus provides, this approach is definitely worth considering. The code is all on my [GitHub repo](https://github.com/FoggyMtnDrifter/website) if you want to dig deeper. diff --git a/src/content/posts/integrating-gitea-and-vercel.md b/src/content/posts/integrating-gitea-and-vercel.md new file mode 100644 index 0000000..6466100 --- /dev/null +++ b/src/content/posts/integrating-gitea-and-vercel.md @@ -0,0 +1,118 @@ +--- +title: "Integrating Gitea & Vercel" +published: 2024-06-18 +draft: false +description: 'I share my experience integrating the open source tool Gitea and the hosting platform Vercel for streamlined code management and deployment.' +tags: ['Gitea', 'Vercel'] +--- + +I'm a strong supporter of open source software and find that the tools I choose strongly influence my development workflow. For managing my code, I use [Gitea](https://gitea.io/). It's a fantastic, open source version control platform that's lightweight and offers the features and security I need. One of the aspects I love is [Gitea Actions](https://docs.gitea.io/en-us/actions/), which makes it easy to streamline my deployment process to [Vercel](https://vercel.com). + +## Why Gitea? + +Gitea excels as a self-hosted, open source version control platform. If you like having flexibility and control over your development setup, it's a compelling alternative to larger, corporate-owned code hosting solutions. With Gitea Actions (which are compatible with GitHub Actions), I can tap into the rich ecosystem of Actions from the broader development community without sacrificing the benefits of an independent, open source platform. + +## Streamlining Deployment with Vercel + +Let's talk about how I use Gitea Actions for deployment. Here's my `preview.yaml` workflow that enables streamlined feedback cycles. Whenever I open a pull request to the main branch, this workflow triggers a preview deployment on Vercel. This lets me test and gather feedback before merging changes: + +```yaml +name: Vercel Preview Deployment +env: + VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }} + VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }} + +on: + pull_request: + branches: + - main + +jobs: + Deploy-Preview: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v4 + with: + node-version: ">=18.14.1" + - name: Install Vercel CLI + run: npm install --global vercel@latest + - name: Pull Vercel Environment Information + run: vercel pull --yes --environment=preview --token=${{ secrets.VERCEL_TOKEN }} + - name: Build Project Artifacts + run: vercel build --token=${{ secrets.VERCEL_TOKEN }} + - name: Deploy Project Artifacts to Vercel + id: deploy + run: | + echo "::group::Deploying" + DEPLOY_OUTPUT=$(vercel deploy --prebuilt --token=${{ secrets.VERCEL_TOKEN }} 2>&1) + echo "$DEPLOY_OUTPUT" + echo "::endgroup::" + PREVIEW_URL=$(echo "$DEPLOY_OUTPUT" | grep -o 'Preview: https://[1]*' | awk '{print $2}') + echo "PREVIEW_URL=$PREVIEW_URL" >> $GITHUB_ENV + echo "::set-output name=preview_url::$PREVIEW_URL" + if [[ -z "$PREVIEW_URL" ]]; then exit 1; fi + continue-on-error: false + - name: Comment on PR on Success + if: ${{ success() && env.PREVIEW_URL }} + uses: actions/github-script@v5 + with: + script: | + const previewUrl = '${{ env.PREVIEW_URL }}'; + github.rest.issues.createComment({ + issue_number: context.payload.pull_request.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: `Preview deployment successful.\n\nView Preview: ${previewUrl}` + }); + - name: Comment on PR on Error + if: ${{ failure() }} + uses: actions/github-script@v5 + with: + script: | + github.rest.issues.createComment({ + issue_number: context.payload.pull_request.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: 'Deployment encountered an issue. Please refer to the workflow logs for more information.' + }); +``` + +## Production Deployments + +Once the preview is approved, my `production.yaml` workflow deploys changes to my live site. It's very similar to the preview workflow, but tailored for the production environment: + +```yaml +name: Vercel Production Deployment +env: + VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }} + VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }} +on: + push: + branches: + - main +jobs: + Deploy-Production: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v4 + with: + node-version: ">=18.14.1" + - name: Install Vercel CLI + run: npm install --global vercel@latest + - name: Pull Vercel Environment Information + run: vercel pull --yes --environment=production --token=${{ secrets.VERCEL_TOKEN }} + - name: Build Project Artifacts + run: vercel build --prod --token=${{ secrets.VERCEL_TOKEN }} + - name: Deploy Project Artifacts to Vercel + run: vercel deploy --prebuilt --prod --token=${{ secrets.VERCEL_TOKEN }} +``` + +## Open Source in Practice + +Those workflows show how I use open source tools to maintain a flexible and efficient approach to development. Gitea's adaptability and the seamless integration with GitHub Actions demonstrates the power of open source in creating custom workflows without sacrificing efficiency. + +## My Thoughts on This Approach + +Using Gitea Actions has been a great experience for streamlining my deployment process. It highlights how open source development enables customization and the ability to tap into community resources. If you're seeking a flexible development environment that emphasizes open source principles, Gitea and Vercel make a powerful combination. \ No newline at end of file diff --git a/src/content/posts/introducing-clearproxy.md b/src/content/posts/introducing-clearproxy.md new file mode 100644 index 0000000..a91b8f0 --- /dev/null +++ b/src/content/posts/introducing-clearproxy.md @@ -0,0 +1,68 @@ +--- +title: "Introducing ClearProxy" +published: 2025-05-22 +draft: false +description: "ClearProxy is a modern web-based management interface for Caddy Server that simplifies reverse proxy configuration through an intuitive UI while maintaining Caddy's core features like automatic HTTPS and security defaults." +tags: ['Caddy', 'ClearProxy'] +--- + +As a long-time user of [Caddy Server](https://caddyserver.com/), I've always appreciated its simplicity, automatic HTTPS capabilities, and robust performance. However, one pain point kept nagging at me: maintaining Caddyfile configurations across multiple servers and projects. That's what led me to create ClearProxy, a modern web-based management interface for Caddy that focuses on making reverse proxy configuration as straightforward as possible. + +## The Journey + +The idea for ClearProxy was born out of a simple desire: I wanted the power of Caddy without the hassle of manually editing configuration files. While Caddy's Caddyfile syntax is clean and intuitive, managing multiple proxy configurations across different environments can become tedious. I wanted a solution that would: + +1. Provide a beautiful, intuitive interface for managing proxy hosts +2. Maintain Caddy's core philosophy of simplicity and security +3. Offer advanced features for power users without overwhelming beginners + +## Technical Implementation + +I built ClearProxy using modern web technologies that prioritize performance and developer experience: + +- **SvelteKit** for the frontend, offering a responsive and snappy user interface +- **SQLite** for reliable data storage without the complexity of a separate database server +- **Docker** for easy deployment and consistent environments +- **Caddy's Admin API** for seamless integration with the Caddy server + +The architecture is deliberately simple: two containers working in harmony - one running the ClearProxy application and another running Caddy server. This setup ensures that users get all the benefits of Caddy (automatic HTTPS, modern security defaults) while enjoying a user-friendly management interface. + +## Key Features + +Some of the features I'm most proud of include: + +- **Intuitive Proxy Management:** Add and configure proxy hosts with just a few clicks +- **Automatic HTTPS:** Leveraging Caddy's built-in ACME client for SSL/TLS certificates +- **Basic Authentication:** Easily secure proxied hosts when needed +- **Advanced Configuration:** Raw Caddyfile syntax support for power users +- **Access Logging:** Built-in monitoring capabilities + +## The Rewards + +Building ClearProxy has been incredibly rewarding for a couple reasons: + +1. **Learning Experiences:** The project pushed me to dive deep into Caddy's internals, modern web development practices, and container orchestration. Every challenge was an opportunity to learn something new. +2. **Open Source Collaboration:** The project is open source, and I'm hoping and looking forward to collaborating with other developers to make it better. + +## Looking Forward + +ClearProxy is more than just a personal tool - it's becoming a project that makes Caddy more accesible to everyone. Future plans include: + +- Enhanced monitoring and analytics +- Support for more advanced Caddy features +- Improved documentation and tutorials +- Community-requested features and improvements + +## Try It Yourself + +If you're using Caddy and want to simplify your proxy management, give ClearProxy a try. The project is [available on GitHub](https://github.com/FoggyMtnDrifter/ClearProxy), and getting started is as simple as running a few Docker commands. + +```bash +mkdir clearproxy && cd clearproxy +curl -L https://raw.githubusercontent.com/foggymtndrifter/clearproxy/main/docker-compose.yml -o docker-compose.yml +docker compose up -d +``` + +## Conclusion + +Building ClearProxy has been a journey of solving a personal pain point that turned into something much bigger. It's a testament to the power of open source and the satisfaction that comes from creating tools that make developers' lives easier. If you're using Caddy or looking for a more modern reverse proxy solution, I encourage you to give ClearProxy a try and join our community. \ No newline at end of file diff --git a/src/content/posts/rocky-linux-contributing-guide.md b/src/content/posts/rocky-linux-contributing-guide.md new file mode 100644 index 0000000..fd64d57 --- /dev/null +++ b/src/content/posts/rocky-linux-contributing-guide.md @@ -0,0 +1,33 @@ +--- +title: "Rocky Linux: A User's Guide to Contributing" +published: 2024-04-14 +draft: false +description: "Learn how to go from open source enthusiast to active contributor within the welcoming Rocky Linux community." +tags: ['Rocky Linux', 'Open Source'] +--- + +I've always been passionate about open source software. The idea of collaborative communities building powerful tools freely available to everyone resonated deeply with me. Yet, for a long time, I was just a user, a beneficiary. I'd never taken the plunge into actually *contributing* to an open source project. + +That all changed when the CentOS landscape shifted. Like many, I was caught off guard by the news around CentOS 8. Reading Greg Kurtzer's announcement of Rocky Linux on the CentOS blog, something clicked. This was my chance to put my belief in open source into action. + +With a mix of excitement and apprehension, I joined the Rocky Linux Slack (which later transitioned to Mattermost). I had zero open source contribution experience, yet I found a welcoming community eager to bring enthusiastic people on board. I started by talking to the then Web Team Lead, and soon I was making small contributions to the Rocky Linux website. + +My involvement grew quickly. As my contributions increased, so did my sense of ownership in the project. Before I knew it, I was leading the Web Team, overseeing the development and maintenance of the main Rocky Linux site. It was incredibly rewarding! + +I've since scaled back my involvement in that specific role, but remain integral in shaping the project's visual identity as the Design Team Lead. The thrill of helping a crucial open source project remains the same. + +## How You Can Make a Difference + +My story isn't about being a technical genius. It's about the power of the Rocky Linux community, a community that throws its doors wide open and says, "Come build with us!" If you're intrigued by this project, here's your roadmap for getting involved: + +1. **Join the Mattermost Chat:** The heart of the Rocky Linux community beats on [Mattermost](https://chat.rockylinux.org). Dive right in! +2. **Explore Your Interests:** Find channels that align with your skills or areas you want to learn about. Maybe you like to write; documentation is always needed. Love to design? Join me on the Design Team. If you're a developer, well, the possibilities are endless. +3. **Let Your Voice Be Heard:** Don't be shy! Introduce yourself within the channels, let people know you're interested in helping out. You'll be amazed at how quickly you'll be guided towards ways to contribute. + +## Open Doors, Open Community + +The core of Rocky Linux is its inclusivity. Whether you're a seasoned expert, a student wanting to learn, or someone who just wants to give back to the open source world, there's a place for you. + +Don't think you have to become a team lead like I did to make a difference. Every pull request reviewed, every documentation page written, every design asset created; it all matters. We're not just building an operating system; we're building a vibrant community. + +What are you waiting for? Join us! You might be surprised by how much you can achieve and who you might become. \ No newline at end of file diff --git a/src/content/posts/virtual-machine-manager-void-linux.md b/src/content/posts/virtual-machine-manager-void-linux.md new file mode 100644 index 0000000..42c708e --- /dev/null +++ b/src/content/posts/virtual-machine-manager-void-linux.md @@ -0,0 +1,75 @@ +--- +title: "Installing Virtual Machine Manager on Void Linux" +published: 2024-04-22 +draft: false +description: "This step-by-step tutorial shows you how to install and use Virtual Machine Manager on Void Linux." +tags: ['Virtual Machine Manager', 'Void Linux'] +--- + +If you're a fellow Void Linux enthusiast like me, you know the thrill of a lean, customizable system. But sometimes, you might want to run other operating systems within your streamlined Void environment. That's where virtual machines (VMs) come to the rescue, and Virtual Machine Manager makes it super easy to set them up. + +In this guide, I'll walk you through the steps I took to get this working. + +## Step 1: Installing the Essentials + +```bash +sudo xbps-install libvirt virt-manager qemu polkit +``` + +This gets us all the pieces we need; `libvirt` for virtualization magic, `virt-manager` for a friendly interface, `qemu` as our trusty emulator, and `polkit` for handling permissions. + +## Step 2: Getting the Right Permissions + +We need to make sure our regular user account can play with virtual machines. Let's add ourselves to the libvirt and kvm groups: + +```bash +sudo usermod -a -G libvirt,kvm your_username +``` + +(Remember to replace `your_username` with your actual username.) + +## Step 3: A Quick Log Out and Back In + +Just to be sure the group changes stick, log out of your account and log back in. + +## Step 4: A Tiny Bit of Configuration + +Let's setup a config file for `libvirt` so it knows what's up: + +```bash +mkdir ~/.config/libvirt && sudo cp -rv /etc/libvirt/libvirt.conf ~/.config/libvirt/ && sudo chown your_username:your_user_group ~/.config/libvirt/libvirt.conf +``` + +## Step 5: Tweaking libvirt Settings + +Open `~/.config/libvirt/libvirt.conf` in your favorite text editor and find the line that says `uri_default`. Change it to: + +```bash +uri_default = "qemu:///system" +``` + +## Step 6: QEMU Permissions + +Edit `/etc/libvirt/qemu.conf`, setting the user and group to match your username and libvirt respectively. This lets you manage the VMs you create. + +## Step 7: Starting the Services + +Void Linux uses `runit` for services. Let's enable the ones we need: + +```bash +sudo ln -s /etc/sv/dbus /var/service/ +sudo ln -s /etc/sv/polkitd /var/service/ +sudo ln -s /etc/sv/libvirtd /var/service/ +sudo ln -s /etc/sv/virtlockd /var/service/ +sudo ln -s /etc/sv/virtlogd /var/service/ +``` + +## Step 8: Launch Time! + +That's it! Go ahead, launch Virtual Machine Manager, and get ready to spin up new virtual machines! + +--- + +## Bonus Tip: Pump Up the Graphics + +Want smoother graphics in your VMs? Edit a VM's settings, go to "Video", select "Virtio", and check the "3D Acceleration" box. \ No newline at end of file diff --git a/src/env.d.ts b/src/env.d.ts new file mode 100644 index 0000000..22989de --- /dev/null +++ b/src/env.d.ts @@ -0,0 +1,5 @@ +declare module '@pagefind/default-ui' { + declare class PagefindUI { + constructor(arg: unknown) + } +} diff --git a/src/icons/bluesky.svg b/src/icons/bluesky.svg new file mode 100644 index 0000000..c4a8ca3 --- /dev/null +++ b/src/icons/bluesky.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/chevron-up.svg b/src/icons/chevron-up.svg new file mode 100644 index 0000000..58567c9 --- /dev/null +++ b/src/icons/chevron-up.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/chevrons-left.svg b/src/icons/chevrons-left.svg new file mode 100644 index 0000000..fc28a3d --- /dev/null +++ b/src/icons/chevrons-left.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/chevrons-right.svg b/src/icons/chevrons-right.svg new file mode 100644 index 0000000..47ba012 --- /dev/null +++ b/src/icons/chevrons-right.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/circle-x.svg b/src/icons/circle-x.svg new file mode 100644 index 0000000..982309c --- /dev/null +++ b/src/icons/circle-x.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/email.svg b/src/icons/email.svg new file mode 100644 index 0000000..54a9559 --- /dev/null +++ b/src/icons/email.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/github.svg b/src/icons/github.svg new file mode 100644 index 0000000..7b643a9 --- /dev/null +++ b/src/icons/github.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/linkedin.svg b/src/icons/linkedin.svg new file mode 100644 index 0000000..e97efdd --- /dev/null +++ b/src/icons/linkedin.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/mastodon.svg b/src/icons/mastodon.svg new file mode 100644 index 0000000..36f581c --- /dev/null +++ b/src/icons/mastodon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/moon.svg b/src/icons/moon.svg new file mode 100644 index 0000000..07320f1 --- /dev/null +++ b/src/icons/moon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/palette.svg b/src/icons/palette.svg new file mode 100644 index 0000000..47a44c2 --- /dev/null +++ b/src/icons/palette.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/rss.svg b/src/icons/rss.svg new file mode 100644 index 0000000..7d895b4 --- /dev/null +++ b/src/icons/rss.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/search.svg b/src/icons/search.svg new file mode 100644 index 0000000..2fa5416 --- /dev/null +++ b/src/icons/search.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/sun-moon.svg b/src/icons/sun-moon.svg new file mode 100644 index 0000000..538f7bb --- /dev/null +++ b/src/icons/sun-moon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/sun.svg b/src/icons/sun.svg new file mode 100644 index 0000000..65c97c7 --- /dev/null +++ b/src/icons/sun.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/twitter.svg b/src/icons/twitter.svg new file mode 100644 index 0000000..cbaf65f --- /dev/null +++ b/src/icons/twitter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/layouts/Layout.astro b/src/layouts/Layout.astro new file mode 100644 index 0000000..2653e7f --- /dev/null +++ b/src/layouts/Layout.astro @@ -0,0 +1,179 @@ +--- +import '~/styles/global.css' +import '@fontsource/varela' +import Header from '~/components/Header.astro' +import Footer from '~/components/Footer.astro' +import LightDarkAutoThemeLoader from '~/components/LightDarkAutoThemeLoader.astro' +import SelectThemeLoader from '~/components/SelectThemeLoader.astro' +import siteConfig from '~/site.config' +import { pick, resolveThemeColorStyles } from '~/utils' +import crypto from 'crypto' +import BuyMeACoffeeModal from '~/components/BuyMeACoffeeModal.svelte' +import CookieConsent from '~/components/CookieConsent.astro' + + +interface Props { + title?: string + description?: string + tags?: string[] + author?: string +} + +const { title, description, tags, author } = Astro.props +const pageUrl = new URL(Astro.url.pathname, Astro.site).href.replace(/\/$/, '') // Remove trailing slash for consistency +const pageType = Astro.url.pathname.startsWith('/posts') ? 'article' : 'website' +const pageTitle = title ? `${title} - ${siteConfig.title}` : siteConfig.title +const pageDescription = description || siteConfig.description +const pageAuthor = author || siteConfig.author +const pageImage = + pageType === 'article' + ? Astro.url.origin + + Astro.url.pathname.replace(/\/posts\//, '/social-cards/') + + '.png' + : `${Astro.url.origin}/social-cards/__default.png` +const pageKeywords = [ + ...new Set(siteConfig.tags.concat(tags || []).map((word) => word.toLowerCase())), +].join(', ') +const baseCssVars: { [key: string]: string } = { + 'theme-font': siteConfig.font, + 'ec-frm-frameBoxShdCssVal': 'none', + 'ec-frm-edTabBrdRad': '0', + 'ec-frm-edTabBarBrdCol': + 'color-mix(in srgb, var(--theme-foreground), 10%, transparent)', + 'ec-brdCol': 'color-mix(in srgb, var(--theme-foreground), 10%, transparent)', +} + +let themeMode = siteConfig.themes.mode +if (siteConfig.themes.include.length < 1) { + throw new Error('No themes defined in site.config. Please add at least one theme.') +} +if (themeMode === 'light-dark-auto' && siteConfig.themes.include.length < 2) { + console.warn( + 'Theme mode "dark-light-auto" requires at least two themes. Defaulting to "single".', + ) + themeMode = 'single' +} +let defaultTheme = siteConfig.themes.default || siteConfig.themes.include[0] +let includedThemes = siteConfig.themes.include as string[] +const themeNotIncluded = !includedThemes.includes(defaultTheme) +if ( + (themeMode !== 'light-dark-auto' && themeNotIncluded) || + (themeMode === 'light-dark-auto' && defaultTheme !== 'auto' && themeNotIncluded) +) { + console.warn( + `Default theme "${defaultTheme}" not found in themes. Using first theme: "${siteConfig.themes.include[0]}".`, + ) + defaultTheme = siteConfig.themes.include[0] +} +let lightTheme = themeMode === 'light-dark-auto' ? includedThemes[0] : undefined +let darkTheme = themeMode === 'light-dark-auto' ? includedThemes[1] : undefined + +// Generate a hash to use for cache busting the theme settings in localStorage. +const themeHash = crypto + .createHash('md5') + .update(themeMode + defaultTheme + includedThemes.join('')) + .digest('hex') + .slice(0, 8) // Truncate to the first 8 characters + +const resolvedThemes = await resolveThemeColorStyles( + siteConfig.themes.include, + siteConfig.themes.overrides, +) + +let cssLines: string[] = [] +for (const [themeId, themeStyles] of Object.entries(resolvedThemes)) { + const relevantStyles = pick(themeStyles, [ + 'foreground', + 'background', + 'accent', + 'heading1', + 'heading2', + 'heading3', + 'heading4', + 'heading5', + 'heading6', + 'list', + 'italic', + 'link', + 'separator', + 'note', + 'tip', + 'important', + 'caution', + 'warning', + 'blue', + 'green', + 'red', + 'yellow', + 'magenta', + 'cyan', + ]) + cssLines.push(`:root[data-theme="${themeId}"] {`) + for (const [key, value] of Object.entries(relevantStyles)) { + cssLines.push(`--theme-${key}: ${value};`) + } + cssLines.push(`}`) +} +let generatedCss: string = cssLines.join('\n') +--- + + + + + + + + + + + + + + + {pageImage && } + + + + {pageImage && } + + + + + + {pageTitle} + + + {themeMode === 'light-dark-auto' && } + {themeMode === 'select' && } + + + + +
    +
    +
    + +
    +
    +
    + + + + diff --git a/src/layouts/MarkdownLayout.astro b/src/layouts/MarkdownLayout.astro new file mode 100644 index 0000000..dc764a1 --- /dev/null +++ b/src/layouts/MarkdownLayout.astro @@ -0,0 +1,25 @@ +--- +import Layout from '~/layouts/Layout.astro' +import type { MarkdownLayoutProps } from 'astro' + +type Props = MarkdownLayoutProps<{ + // Define frontmatter props here + title: string + description?: string +}> + +// Now, `frontmatter`, `url`, and other Markdown layout properties +// are accessible with type safety +const { frontmatter } = Astro.props +--- + + +
    +

    + # {frontmatter.title} +

    +
    + +
    +
    +
    diff --git a/src/pages/404.astro b/src/pages/404.astro new file mode 100644 index 0000000..8248217 --- /dev/null +++ b/src/pages/404.astro @@ -0,0 +1,7 @@ +--- +import Layout from '~/layouts/Layout.astro' +--- + + +

    404

    +
    diff --git a/src/pages/about.astro b/src/pages/about.astro new file mode 100644 index 0000000..6f10369 --- /dev/null +++ b/src/pages/about.astro @@ -0,0 +1,368 @@ +--- +import Layout from '~/layouts/Layout.astro' +import { Image } from 'astro:assets' +import myAvatar from '../content/avatar.jpeg' +import siteConfig from '~/site.config' + +import IconEmail from '~/icons/email.svg' +import BlockHeader from '~/components/BlockHeader.astro' + +const title = 'About Michael Kinder' +const description = 'Professional experience and skills of Michael Kinder.' +--- + + +
    + +
    +
    + Michael Kinder + { + siteConfig.hireMe && ( +
    + + + + + + + Available for Hire • Available for Hire •  + + + +
    + ) + } +
    + +
    +

    Michael Kinder

    +

    Technical Leader

    + +
    + + + Pikeville, Kentucky + + { + siteConfig.socialLinks.email && ( + + + + {siteConfig.socialLinks.email.replace('mailto:', '')} + + + ) + } +
    +
    +
    + + +
    + Summary +

    + Located in Pikeville, KY, I am a Technical Support professional with hands-on + experience providing remote end-user support, troubleshooting hardware and + software issues, and leading technical support teams in fast-paced hosting and + services environments. +

    +
    + + +
    + Experience + +
    + {/* Experience Item 1 */} +
    + +

    Technical Support Team Lead

    +
    + hosting.com + Mar 2023 - Dec 2025 +
    +
      +
    • + Led a team of 32 employees, providing guidance and support to ensure + successful completion of projects. +
    • +
    • + Implemented effective communication strategies to foster collaboration and + improve team productivity. +
    • +
    • + Developed and implemented training programs for new team members, resulting + in reduced onboarding time. +
    • +
    • + Monitored team performance and provided regular feedback to drive continous + improvement. +
    • +
    • + Collaborated with cross-functional teams to identify process improvements + and implement best practices. +
    • +
    +
    + + {/* Experience Item 2 (Inferred/Generic based on "career") */} +
    + + + +

    Technical Support Specialist

    +
    + InMotion Hosting + Feb 2022 - Feb 2023 +
    +
      +
    • + Provided technical support to end-users and troubleshooting hardware and + software issues. +
    • +
    • + Resolved 95% of customer inquiries on the first call and exceeding + departmental targets. +
    • +
    • + Collaborated with cross-functional teams to identify and resolve complex + technical problems. +
    • +
    • + Documented all support interactions accurately and thoroughly in the + ticketing system. +
    • +
    • + Performed remote troubleshooting through diagnostic techniques and pertinent + questions. +
    • +
    +
    + +
    + + + +

    Data Services Expert

    +
    + Intuit + Sep 2018 - May 2021 +
    +
      +
    • + Repaired and restored QuickBooks databases, ensuring data integrity, and + minimizing downtime for small business users. +
    • +
    • + Utilized SQL for data analysis, troubleshooting, and custom Query + development to resolve complex data-related issues. +
    • +
    • + Leveraged Splunk to investigate service anomalies, identify root causes, and + support resolution workflows. +
    • +
    • + Interpreted large datasets to diagnose problems, implement fixes, and + deliver accurate and timely support solutions. +
    • +
    • + Maintained a strong focus on data privacy and customer satisfaction in a + high-volume and customercentric environment. +
    • +
    +
    + +
    + + + +

    Tier 2 AppleCare Advisor

    +
    + Apple + Apr 2018 - Sep 2018 +
    +
      +
    • + Provided technical support to customers via phone, email, chat, and resolved + 95% of issues on the first contact. +
    • +
    • + Collaborated with Tier 1 support team to escalate complex issues and ensure + timely resolution. +
    • +
    • + Troubleshot hardware and software problems for a wide range of products + including computers, printers, routers, and mobile devices. +
    • +
    • + Demonstrated expertise in troubleshooting network connectivity issues by + analyzing logs and conducting remote diagnostics. +
    • +
    • + Assisted customers in configuring software applications and resolving + compatibility issues. +
    • +
    +
    + +
    + + + +

    Assistant Store Manager

    +
    + Family Dollar + May 2017 - May 2018 +
    +
      +
    • + Assisted store manager in overseeing daily operations including inventory + management, staff scheduling, and customer service. +
    • +
    • + Trained and mentored new employees on company policies, procedures, and + customer service standards. +
    • +
    • + Collaborated with the store manager to develop and implement effective + merchandising displays to drive sales. +
    • +
    • + Managed cash handling procedures and ensured accuracy and compliance with + company guidelines. +
    • +
    • + Resolved customer complaints or concerns promptly and effectively, to + maintain high levels of customer satisfaction. +
    • +
    +
    +
    +
    + + +
    + Skills + +
    +
    +

    + Technical +

    +
    + { + [ + 'Computer Science', + 'Problem-Solving', + 'e-Commerce', + 'Linux', + 'Computer Operation', + 'Analysis Skills', + 'Typing', + ].map((skill) => ( + + {skill} + + )) + } +
    +
    + +
    +

    + General +

    +
    + { + [ + 'Customer Service', + 'Leadership', + 'Team Training', + 'Teamwork', + 'Time Management', + 'Communication Skills', + ].map((skill) => ( + + {skill} + + )) + } +
    +
    +
    +
    +
    +
    diff --git a/src/pages/api/auth/callback.ts b/src/pages/api/auth/callback.ts new file mode 100644 index 0000000..d3dd1a5 --- /dev/null +++ b/src/pages/api/auth/callback.ts @@ -0,0 +1,63 @@ +import type { APIRoute } from 'astro' + +export const prerender = false + +export const GET: APIRoute = async ({ request, cookies, redirect }) => { + const url = new URL(request.url) + const code = url.searchParams.get('code') + const state = url.searchParams.get('state') + const storedState = cookies.get('github_oauth_state')?.value + + if (!state || !storedState || state !== storedState) { + return new Response('Invalid state', { status: 400 }) + } + + cookies.delete('github_oauth_state', { path: '/' }) + + const client_id = import.meta.env.GITHUB_CLIENT_ID + const client_secret = import.meta.env.GITHUB_CLIENT_SECRET + + if (!client_id || !client_secret) { + return new Response('Missing GitHub credentials', { status: 500 }) + } + + try { + const response = await fetch('https://github.com/login/oauth/access_token', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + Accept: 'application/json', + }, + body: JSON.stringify({ + client_id, + client_secret, + code, + }), + }) + + const data = await response.json() + + if (data.error) { + return new Response(data.error_description || 'OAuth Error', { status: 400 }) + } + + const { access_token } = data + + // Securely store the token + cookies.set('github_access_token', access_token, { + path: '/', + secure: import.meta.env.PROD, + httpOnly: true, + maxAge: 60 * 60 * 24 * 30, // 30 days + sameSite: 'lax', + }) + + const redirectTo = cookies.get('github_redirect_to')?.value + cookies.delete('github_redirect_to', { path: '/' }) + + return redirect(redirectTo || '/') + } catch (err) { + console.error(err) + return new Response('Authentication failed', { status: 500 }) + } +} diff --git a/src/pages/api/auth/signin.ts b/src/pages/api/auth/signin.ts new file mode 100644 index 0000000..6156976 --- /dev/null +++ b/src/pages/api/auth/signin.ts @@ -0,0 +1,44 @@ +import type { APIRoute } from 'astro' + +export const prerender = false + +export const GET: APIRoute = async ({ request, redirect, cookies }) => { + const client_id = import.meta.env.GITHUB_CLIENT_ID + if (!client_id) { + return new Response('Missing GITHUB_CLIENT_ID', { status: 500 }) + } + + const state = crypto.randomUUID() + cookies.set('github_oauth_state', state, { + path: '/', + secure: import.meta.env.PROD, + httpOnly: true, + maxAge: 60 * 10, // 10 minutes + sameSite: 'lax', + }) + + const url = new URL(request.url) + const redirectTo = url.searchParams.get('redirect_to') + if (redirectTo) { + cookies.set('github_redirect_to', redirectTo, { + path: '/', + secure: import.meta.env.PROD, + httpOnly: true, + maxAge: 60 * 10, // 10 minutes + sameSite: 'lax', + }) + } + + // Store the return URL if provided + // We can't easily pass it through state efficiently without encoding, + // so let's check headers or a query param if we want to support deep linking back. + // For now, let's keep it simple. callback will handle redirect. + + const params = new URLSearchParams({ + client_id, + scope: 'public_repo read:user user:email', + state, + }) + + return redirect(`https://github.com/login/oauth/authorize?${params.toString()}`) +} diff --git a/src/pages/api/auth/signout.ts b/src/pages/api/auth/signout.ts new file mode 100644 index 0000000..358e172 --- /dev/null +++ b/src/pages/api/auth/signout.ts @@ -0,0 +1,8 @@ +import type { APIRoute } from 'astro' + +export const prerender = false + +export const GET: APIRoute = async ({ cookies, redirect }) => { + cookies.delete('github_access_token', { path: '/' }) + return redirect('/') +} diff --git a/src/pages/api/auth/user.ts b/src/pages/api/auth/user.ts new file mode 100644 index 0000000..5855377 --- /dev/null +++ b/src/pages/api/auth/user.ts @@ -0,0 +1,33 @@ +import type { APIRoute } from 'astro' +import { Octokit } from 'octokit' + +export const prerender = false + +export const GET: APIRoute = async ({ cookies }) => { + const token = cookies.get('github_access_token')?.value + + if (!token) { + return new Response(JSON.stringify({ user: null }), { + status: 200, + headers: { 'Content-Type': 'application/json' }, + }) + } + + try { + const octokit = new Octokit({ auth: token }) + const { data: user } = await octokit.rest.users.getAuthenticated() + + return new Response(JSON.stringify({ user }), { + status: 200, + headers: { 'Content-Type': 'application/json' }, + }) + } catch (error) { + console.error('Error fetching user:', error) + // If token is invalid, clear it? + // cookies.delete('github_access_token', { path: '/' }) + return new Response(JSON.stringify({ user: null }), { + status: 200, + headers: { 'Content-Type': 'application/json' }, + }) + } +} diff --git a/src/pages/api/checkout.ts b/src/pages/api/checkout.ts new file mode 100644 index 0000000..acd5c09 --- /dev/null +++ b/src/pages/api/checkout.ts @@ -0,0 +1,71 @@ + +import type { APIRoute } from 'astro' +export const prerender = false +import Stripe from 'stripe' + +// Use a dummy key if env var is missing to allow build to pass (e.g. during static generation or if user hasn't set it yet) +const STRIPE_SECRET_KEY = import.meta.env.STRIPE_SECRET_KEY || process.env.STRIPE_SECRET_KEY || 'sk_test_dummy' +if (STRIPE_SECRET_KEY === 'sk_test_dummy') { + console.warn('Using dummy Stripe key. Checkout will fail.') +} +const stripe = new Stripe(STRIPE_SECRET_KEY) + +export const POST: APIRoute = async ({ request, redirect }) => { + let amount: number + let isCustom: boolean + + const contentType = request.headers.get('content-type') || '' + + if (contentType.includes('application/json')) { + const json = await request.json() + amount = parseFloat(json.amount || '0') + isCustom = json.isCustom === true + } else if (contentType.includes('multipart/form-data') || contentType.includes('application/x-www-form-urlencoded')) { + const data = await request.formData() + amount = parseFloat(data.get('amount')?.toString() || '0') + isCustom = data.get('isCustom') === 'true' + } else { + console.error('Unexpected Content-Type:', contentType) + return new Response(JSON.stringify({ error: 'Invalid Content-Type' }), { status: 400 }) + } + + if (!amount || amount <= 0) { + return new Response(JSON.stringify({ error: 'Invalid amount' }), { status: 400 }) + } + + // Ensure minimum amount for Stripe (usually $0.50 USD) + if (amount < 0.5) { + return new Response(JSON.stringify({ error: 'Amount must be at least $0.50' }), { status: 400 }) + } + + try { + const session = await stripe.checkout.sessions.create({ + line_items: [ + { + price_data: { + currency: 'usd', + product_data: { + name: 'Buy me a coffee', + description: isCustom ? 'Custom donation' : `Support for FoggyMtnDrifter`, + }, + unit_amount: Math.round(amount * 100), // Stripe expects cents + }, + quantity: 1, + }, + ], + mode: 'payment', + success_url: `${request.headers.get('origin')}/?success=true`, + cancel_url: `${request.headers.get('origin')}/?canceled=true`, + }) + + if (session.url) { + return new Response(JSON.stringify({ url: session.url }), { status: 200 }) + } + + return new Response(JSON.stringify({ error: 'Failed to create session' }), { status: 500 }) + + } catch (err) { + console.error('Stripe error:', err) + return new Response(JSON.stringify({ error: (err as Error).message }), { status: 500 }) + } +} diff --git a/src/pages/api/comments/[slug].ts b/src/pages/api/comments/[slug].ts new file mode 100644 index 0000000..6a399de --- /dev/null +++ b/src/pages/api/comments/[slug].ts @@ -0,0 +1,278 @@ +import type { APIRoute } from 'astro' +import { Octokit } from 'octokit' +import siteConfig from '~/site.config' + +export const prerender = false + +const GITHUB_TOKEN = import.meta.env.GITHUB_PERSONAL_ACCESS_TOKEN +const OWNER = 'FoggyMtnDrifter' +const REPO = 'website' + +// Helper to get Octokit instance +const getOctokit = (auth?: string) => new Octokit({ auth: auth || GITHUB_TOKEN }) + +export const GET: APIRoute = async ({ params, request }) => { + if (!siteConfig.comments) { + return new Response(JSON.stringify({ error: 'Comments not configured' }), { status: 500 }) + } + + const { slug } = params + // Mapping is pathname. With the slug, we construct the pathname. + // Assuming slugs align with pathnames. E.g. posts/slug -> /posts/slug OR just The Title? + // "pathname" mapping usually uses the pathname of the page. + // The user's pages are at /posts/[slug]. So search term is likely `/posts/${slug}` or just `/${slug}`? + // Let's assume `/posts/${slug}` based on typical structure. + // Wait, the slug param might capture the whole path if it was [...slug], but it's [slug]. + // Let's verify the logic in `src/pages/posts/[slug].astro`. + // The comments loader uses `pathname`. + + const term = `/posts/${slug}` + + const query = ` + query($term: String!) { + search(type: DISCUSSION, query: $term, first: 1) { + nodes { + ... on Discussion { + id + title + number + comments(first: 100) { + nodes { + id + body + bodyHTML + createdAt + author { + login + avatarUrl + url + } + replies(first: 20) { + nodes { + id + body + bodyHTML + createdAt + author { + login + avatarUrl + url + } + } + } + } + } + } + } + } + } + ` + + try { + const octokit = getOctokit() + const searchQuery = `repo:${siteConfig.comments.repo} in:title ${term}` + + const result: any = await octokit.graphql(query, { + term: searchQuery + }) + + const discussion = result.search?.nodes?.[0] + + if (discussion && discussion.comments) { + const transformComment = (comment: any) => { + const attributionMatch = comment.body.match(/\n\n_\(Posted by (.*?)\)_$/) + if (attributionMatch) { + const displayName = attributionMatch[1] + comment.author.login = displayName + comment.author.url = '' // Guest has no profile + // Use DiceBear for guest avatar + comment.author.avatarUrl = `https://api.dicebear.com/9.x/initials/svg?seed=${encodeURIComponent(displayName)}` + } + + // The HTML is:

    (Posted by Name)

    + // parsing HTML with regex is fragile but for this specific pattern it's consistent from GitHub + // We accept optional whitespace and attributes on the p tag. + if (comment.bodyHTML) { + comment.bodyHTML = comment.bodyHTML.replace(/]*>\s*\(Posted by .*?\)<\/em>\s*<\/p>\s*$/, '') + } + + if (comment.replies && comment.replies.nodes) { + comment.replies.nodes.forEach(transformComment) + // Sort replies: Newest first + comment.replies.nodes.reverse() + } + } + + discussion.comments.nodes.forEach(transformComment) + // Sort comments: Newest first + discussion.comments.nodes.reverse() + } + + return new Response(JSON.stringify({ discussion }), { + status: 200, + headers: { 'Content-Type': 'application/json' } + }) + } catch (error) { + console.error('Error fetching comments:', error) + return new Response(JSON.stringify({ error: 'Failed to fetch comments' }), { status: 500 }) + } +} + +export const POST: APIRoute = async ({ params, request, cookies }) => { + const { slug } = params + const term = `/posts/${slug}` + + let body + try { + body = await request.json() + } catch (e) { + return new Response('Invalid JSON', { status: 400 }) + } + + const { content, displayName, discussionId, website_honey, captcha } = body + const userToken = cookies.get('github_access_token')?.value + + // 1. Honeypot Check + if (website_honey) { + // Silently fail or return error. Let's return error to stop processing. + console.log('Honeypot triggered') + return new Response('Spam detected', { status: 400 }) + } + + // 2. Basic Math Captcha Check (for guests or everyone? User said safeguards. Let's apply to anonymous mainly, but maybe all for safety? Let's apply to ANONYMOUS only as auth users are trusted) + if (!userToken) { + if (!captcha || !captcha.num1 || !captcha.num2 || !captcha.answer) { + return new Response('Captcha required', { status: 400 }) + } + const { num1, num2, answer } = captcha + if (parseInt(num1) + parseInt(num2) !== parseInt(answer)) { + return new Response('Incorrect math answer', { status: 400 }) + } + } + + // Decide which token and attribution to use + let finalContent = content + let auth = userToken + + if (!auth) { + // Anonymous mode + if (!displayName) { + return new Response('Display name required for anonymous comments', { status: 400 }) + } + auth = GITHUB_TOKEN // Use bot token + finalContent = `${content}\n\n_(Posted by ${displayName})_` + } + + if (!auth) { + return new Response('Server configuration error: No bot token available', { status: 500 }) + } + + const octokit = getOctokit(auth) + + try { + let finalDiscussionId = discussionId + + // If no discussion ID provided, we must find or create it. + // This requires the BOT token usually, as regular users might not have permission to create discussions in the category? + // Actually, users usually CAN create discussions if the repo is public. + // But for consistency, let's look it up first. + + if (!finalDiscussionId) { + // Logic to find or create discussion... + // Re-use logic from GET or extracting it to a shared helper would be better. + // For now, let's just error if not found to keep it simple, or implement create logic. + + // Let's implement Find-Or-Create logic using Bot Token (to ensure it's created correctly). + const botOctokit = getOctokit(GITHUB_TOKEN) + + // 1. Find + const searchQuery = `repo:${siteConfig.comments!.repo} in:title ${term}` + const findQuery = ` + query($term: String!) { + search(type: DISCUSSION, query: $term, first: 1) { + nodes { ... on Discussion { id } } + } + } + ` + const findResult: any = await botOctokit.graphql(findQuery, { term: searchQuery }) + const found = findResult.search.nodes[0] + + if (found) { + finalDiscussionId = found.id + } else { + // 2. Create + if (!siteConfig.comments?.repoId || !siteConfig.comments?.categoryId) { + return new Response('Missing repoId or categoryId configuration', { status: 500 }) + } + + const createQuery = ` + mutation($repositoryId: ID!, $categoryId: ID!, $title: String!, $body: String!) { + createDiscussion(input: { + repositoryId: $repositoryId, + categoryId: $categoryId, + title: $title, + body: $body + }) { + discussion { id } + } + } + ` + // GitHub Discussions usually creates it with a specific body. + const createResult: any = await botOctokit.graphql(createQuery, { + repositoryId: siteConfig.comments.repoId, + categoryId: siteConfig.comments.categoryId, + title: term, + body: `Comments for ${term}\n\n[View Post](${new URL(term, siteConfig.site)})` + }) + + finalDiscussionId = createResult.createDiscussion.discussion.id + } + } + + const createCommentQuery = ` + mutation($discussionId: ID!, $body: String!) { + addDiscussionComment(input: {discussionId: $discussionId, body: $body}) { + comment { + id + body + bodyHTML + createdAt + author { + login + avatarUrl + url + } + } + } + } + ` + + const response: any = await octokit.graphql(createCommentQuery, { + discussionId: finalDiscussionId, + body: finalContent + }) + + const newComment = response.addDiscussionComment.comment + + // If it was an anonymous post, we want to return it with the display name immediately + // so the UI updates correctly without a refetch. + if (!userToken && displayName) { + newComment.author.login = displayName + newComment.author.url = '' + newComment.author.avatarUrl = `https://api.dicebear.com/9.x/initials/svg?seed=${encodeURIComponent(displayName)}` + // Strip the attribution from bodyHTML if present + if (newComment.bodyHTML) { + newComment.bodyHTML = newComment.bodyHTML.replace(/]*>\s*\(Posted by .*?\)<\/em>\s*<\/p>\s*$/, '') + } + } + + return new Response(JSON.stringify(newComment), { + status: 200, + headers: { 'Content-Type': 'application/json' } + }) + + } catch (error) { + console.error('Error posting comment:', error) + return new Response(JSON.stringify({ error: 'Failed to post comment', details: error }), { status: 500 }) + } +} diff --git a/src/pages/api/payment-intent.ts b/src/pages/api/payment-intent.ts new file mode 100644 index 0000000..97a63c6 --- /dev/null +++ b/src/pages/api/payment-intent.ts @@ -0,0 +1,40 @@ + +import type { APIRoute } from 'astro' +export const prerender = false +import Stripe from 'stripe' + +// Use a dummy key if env var is missing to allow build to pass +const STRIPE_SECRET_KEY = import.meta.env.STRIPE_SECRET_KEY || process.env.STRIPE_SECRET_KEY || 'sk_test_dummy' +const stripe = new Stripe(STRIPE_SECRET_KEY) + +export const POST: APIRoute = async ({ request }) => { + try { + const body = await request.json() + const amount = parseFloat(body.amount) + const isCustom = body.isCustom === true + + if (!amount || amount <= 0) { + return new Response(JSON.stringify({ error: 'Invalid amount' }), { status: 400 }) + } + + // Ensure minimum amount for Stripe (custom requirement: $5 USD) + if (amount < 5) { + return new Response(JSON.stringify({ error: 'Amount must be at least $5.00' }), { status: 400 }) + } + + const paymentIntent = await stripe.paymentIntents.create({ + amount: Math.round(amount * 100), // Stripe expects cents + currency: 'usd', + automatic_payment_methods: { + enabled: true, + }, + description: isCustom ? 'Custom donation' : 'Support for FoggyMtnDrifter', + }) + + return new Response(JSON.stringify({ clientSecret: paymentIntent.client_secret }), { status: 200 }) + + } catch (err) { + console.error('Stripe error:', err) + return new Response(JSON.stringify({ error: (err as Error).message }), { status: 500 }) + } +} diff --git a/src/pages/index.astro b/src/pages/index.astro new file mode 100644 index 0000000..2670cc2 --- /dev/null +++ b/src/pages/index.astro @@ -0,0 +1,76 @@ +--- +import Layout from '~/layouts/Layout.astro' +import { getSortedPosts } from '~/utils' +import { getCollection, render } from 'astro:content' +import PostPreview from '~/components/PostPreview.astro' +import Pagination from '~/components/Pagination.astro' +import BlockHeader from '~/components/BlockHeader.astro' +import HomeBanner from '~/components/HomeBanner.astro' +import siteConfig from '~/site.config' +import TagsSection from '~/components/TagsSection.astro' +import SeriesSection from '~/components/SeriesSection.astro' + +const home = await getCollection('home') +let HomeContent +let homeAvatarImage +let homeGithubCalendar +if (home.length > 0) { + const homeEntry = home[0] + const { Content } = await render(homeEntry) + HomeContent = Content + homeAvatarImage = homeEntry.data.avatarImage + homeGithubCalendar = homeEntry.data.githubCalendar +} +const sortedPosts = await getSortedPosts() +const postsHaveTags = sortedPosts.some( + (post) => post.data.tags && post.data.tags.length > 0, +) + +const postsHaveSeries = sortedPosts.some((post) => post.data.series) +--- + + + { + HomeContent && ( + + + + ) + } + { + postsHaveSeries && ( +
    + Series + +
    + ) + } + { + postsHaveTags && ( +
    + Tags + +
    + ) + } + { + sortedPosts.length > 0 && ( +
    + Latest Posts + {sortedPosts + .reverse() + .slice(0, Math.floor(siteConfig.pageSize / 2)) + .map((post) => ( + + ))} + +
    + ) + } +
    + + diff --git a/src/pages/legal/[slug].astro b/src/pages/legal/[slug].astro new file mode 100644 index 0000000..156f7ef --- /dev/null +++ b/src/pages/legal/[slug].astro @@ -0,0 +1,32 @@ +--- +import { getCollection, render } from 'astro:content' +import Layout from '~/layouts/Layout.astro' +import type { GetStaticPaths } from 'astro' + +export const getStaticPaths = (async () => { + const legalEntries = await getCollection('legal') + return legalEntries.map((entry) => ({ + params: { slug: entry.id }, + props: { entry }, + })) +}) satisfies GetStaticPaths + +const { entry } = Astro.props +const { Content } = await render(entry) +--- + + +
    + +
    +

    + Last updated: { + entry.data.updated.toLocaleDateString('en-US', { + year: 'numeric', + month: 'long', + day: 'numeric', + }) + } +

    +
    +
    diff --git a/src/pages/posts/[...page].astro b/src/pages/posts/[...page].astro new file mode 100644 index 0000000..7edc7c4 --- /dev/null +++ b/src/pages/posts/[...page].astro @@ -0,0 +1,31 @@ +--- +import type { GetStaticPaths } from 'astro' +import Layout from '~/layouts/Layout.astro' +import { getSortedPosts } from '~/utils' +import Pagination from '~/components/Pagination.astro' +import siteConfig from '~/site.config' +import PostPreview from '~/components/PostPreview.astro' +import PageHeader from '~/components/PageHeader.astro' + +// Note: Pagination like '/', '/2', '/3' only works with spread param like [...page] +export const getStaticPaths = (async ({ paginate }) => { + const sortedPosts = await getSortedPosts() + return paginate(sortedPosts.reverse(), { pageSize: siteConfig.pageSize }) +}) satisfies GetStaticPaths + +const { page } = Astro.props +const pageTitle = 'Archive' + (page.currentPage > 1 ? ` - Page ${page.currentPage}` : '') +--- + + +
    + + {page.data.map((post) => )} + +
    +
    diff --git a/src/pages/posts/[slug].astro b/src/pages/posts/[slug].astro new file mode 100644 index 0000000..a43ef2f --- /dev/null +++ b/src/pages/posts/[slug].astro @@ -0,0 +1,149 @@ +--- +import type { GetStaticPaths } from 'astro' +import Layout from '~/layouts/Layout.astro' +import { SeriesGroup, TagsGroup, getSortedPosts } from '~/utils' +import PostPreview from '~/components/PostPreview.astro' +import DividerText from '~/components/DividerText.astro' +import { getCollection, render, type CollectionEntry } from 'astro:content' +import PostAddendum from '~/components/PostAddendum.astro' +import TableOfContents from '~/components/TableOfContents.astro' +import { Image } from 'astro:assets' +import Comments from '~/components/Comments.svelte' +import siteConfig from '~/site.config' +import Tags from '~/components/Tags.astro' +import PostInfo from '~/components/PostInfo.astro' +import ScrollUpButton from '~/components/ScrollUpButton.astro' +import type { Collation } from '~/types' +import ChevronsRight from '~/icons/chevrons-right.svg' +import { getPostSequenceContext } from '~/utils' + +export const getStaticPaths = (async () => { + const posts = await getSortedPosts() + return posts.map((post) => { + // Get sequence context for the post + const { prev, next } = getPostSequenceContext(post, posts) + return { + params: { slug: post.id }, + props: { post, prev, next }, + } + }) +}) satisfies GetStaticPaths + +const { post, prev, next } = Astro.props +const postData = post.data +const { headings, Content: PostContent } = await render(post) +const addendum = await getCollection('addendum') +let AddendumContent +let addendumAvatarImage +if (addendum.length > 0) { + const addendumEntry = addendum[0] + const { Content } = await render(addendumEntry) + AddendumContent = Content + addendumAvatarImage = addendumEntry.data.avatarImage +} + +const sortedPosts = await getSortedPosts() + +// Get series posts if this post is part of a series +let series: Collation<'posts'> | undefined +let nextPostInSeries: CollectionEntry<'posts'> | undefined +if (postData.series) { + const seriesGroup = await SeriesGroup.build(sortedPosts) + series = seriesGroup.match(postData.series) + if (!series) { + // This should not happen if series data is correct + throw new Error(`Series "${postData.series}" not found`) + } + const sequenceContext = getPostSequenceContext(post, series.entries) + nextPostInSeries = sequenceContext.next +} +const showSeries = series && series.entries.length > 1 + +let tags: Collation<'posts'>[] | undefined +if (postData.tags && postData.tags.length > 0) { + const tagsGroup = await TagsGroup.build(sortedPosts) + tags = tagsGroup.matchMany(postData.tags) +} +--- + + +
    + { + postData.coverImage && ( + {postData.coverImage.alt} + ) + } +
    +

    + {postData.title} +

    +
    + + { + tags && ( +
    + +
    + ) + } +
    +
    + +
    + {postData.toc && headings.length > 0 && } +
    + +
    +
    +
    + { + nextPostInSeries && ( + + Next: {nextPostInSeries.data.title} + + ) + } + { + AddendumContent && ( + + + + ) + } + { + showSeries && series ? ( +
    + + {series.entries.map((seriesPost) => ( + + ))} +
    + ) : prev || next ? ( +
    + + {prev && } + {next && } +
    + ) : null + } +
    + + +
    + +
    diff --git a/src/pages/robots.txt.ts b/src/pages/robots.txt.ts new file mode 100644 index 0000000..147941f --- /dev/null +++ b/src/pages/robots.txt.ts @@ -0,0 +1,13 @@ +import type { APIRoute } from 'astro' + +const getRobotsTxt = (sitemapURL: URL) => `\ +User-agent: * +Allow: / + +Sitemap: ${sitemapURL.href} +` + +export const GET: APIRoute = ({ site }) => { + const sitemapURL = new URL('sitemap-index.xml', site) + return new Response(getRobotsTxt(sitemapURL)) +} diff --git a/src/pages/rss.xml.ts b/src/pages/rss.xml.ts new file mode 100644 index 0000000..49f68c1 --- /dev/null +++ b/src/pages/rss.xml.ts @@ -0,0 +1,35 @@ +import rss from '@astrojs/rss' +import siteConfig from '~/site.config' +import type { AstroGlobal } from 'astro' +import { getSortedPosts } from '~/utils' +import sanitizeHtml from 'sanitize-html' +import MarkdownIt from 'markdown-it' +const parser = new MarkdownIt() + +// https://docs.astro.build/en/recipes/rss/ +export async function GET(_context: AstroGlobal) { + if (!siteConfig.site) { + console.warn( + 'Site URL is required for RSS feed generation. Skipping RSS feed generation.', + ) + return + } + const posts = await getSortedPosts() + return rss({ + stylesheet: '/rss.xsl', + title: siteConfig.title, + description: siteConfig.description, + site: siteConfig.site, + items: posts.map((post) => ({ + title: post.data.title, + pubDate: post.data.published, + description: post.data.description, + author: post.data.author || siteConfig.author, + link: `/posts/${post.id}`, + content: sanitizeHtml(parser.render(post.body || ''), { + allowedTags: sanitizeHtml.defaults.allowedTags.concat(['img']), + }), + })), + trailingSlash: false, + }) +} diff --git a/src/pages/series/[slug].astro b/src/pages/series/[slug].astro new file mode 100644 index 0000000..d91f200 --- /dev/null +++ b/src/pages/series/[slug].astro @@ -0,0 +1,29 @@ +--- +import type { GetStaticPaths } from 'astro' +import Layout from '~/layouts/Layout.astro' +import { SeriesGroup } from '~/utils' +import PageHeader from '~/components/PageHeader.astro' +import PostPreview from '~/components/PostPreview.astro' + +export const getStaticPaths = (async () => { + const seriesGroup = await SeriesGroup.build() + return seriesGroup.collations.map((series) => { + return { + params: { slug: series.titleSlug }, + props: { posts: series.entries, seriesTitle: series.title }, + } + }) +}) satisfies GetStaticPaths + +const { posts, seriesTitle } = Astro.props +--- + + +
    + + {posts.map((post) => )} +
    +
    diff --git a/src/pages/social-cards/[slug].png.ts b/src/pages/social-cards/[slug].png.ts new file mode 100644 index 0000000..bdc8a0f --- /dev/null +++ b/src/pages/social-cards/[slug].png.ts @@ -0,0 +1,109 @@ +import siteConfig from '~/site.config' +import { Resvg } from '@resvg/resvg-js' +import type { APIContext, InferGetStaticPropsType } from 'astro' +import satori, { type SatoriOptions } from 'satori' +import { html } from 'satori-html' +import { dateString, getSortedPosts, resolveThemeColorStyles } from '~/utils' +import path from 'path' +import fs from 'fs' +import type { ReactNode } from 'react' + +// Load the font file as binary data +const fontPath = path.resolve( + './node_modules/@expo-google-fonts/jetbrains-mono/400Regular/JetBrainsMono_400Regular.ttf', +) +const fontData = fs.readFileSync(fontPath) // Reads the file as a Buffer + +const avatarPath = path.resolve(siteConfig.socialCardAvatarImage) +let avatarData: Buffer | undefined +let avatarBase64: string | undefined +if ( + fs.existsSync(avatarPath) && + (path.extname(avatarPath).toLowerCase() === '.jpg' || + path.extname(avatarPath).toLowerCase() === '.jpeg') +) { + avatarData = fs.readFileSync(avatarPath) + avatarBase64 = `data:image/jpeg;base64,${avatarData.toString('base64')}` +} + +const defaultTheme = + siteConfig.themes.default === 'auto' + ? siteConfig.themes.include[0] + : siteConfig.themes.default + +const themeStyles = await resolveThemeColorStyles( + [defaultTheme], + siteConfig.themes.overrides, +) +const bg = themeStyles[defaultTheme]?.background +const fg = themeStyles[defaultTheme]?.foreground +const accent = themeStyles[defaultTheme]?.accent + +if (!bg || !fg || !accent) { + throw new Error(`Theme ${defaultTheme} does not have required colors`) +} + +const ogOptions: SatoriOptions = { + // debug: true, + fonts: [ + { + data: fontData, + name: 'JetBrains Mono', + style: 'normal', + weight: 400, + }, + ], + height: 630, + width: 1200, +} + +const markup = (title: string, pubDate: string | undefined, author: string) => + html(`
    +
    + ${ + avatarBase64 + ? `
    + +
    ` + : '' + } +
    + ${pubDate ? `

    ${pubDate}

    ` : ''} +

    ${title}

    + ${author !== title ? `

    ${author}

    ` : ''} +
    +
    +
    `) + +type Props = InferGetStaticPropsType + +export async function GET(context: APIContext) { + const { pubDate, title, author } = context.props as Props + const svg = await satori(markup(title, pubDate, author) as ReactNode, ogOptions) + const png = new Resvg(svg).render().asPng() + return new Response(png, { + headers: { + 'Cache-Control': 'public, max-age=31536000, immutable', + 'Content-Type': 'image/png', + }, + }) +} + +export async function getStaticPaths() { + const posts = await getSortedPosts() + return posts + .map((post) => ({ + params: { slug: post.id }, + props: { + pubDate: post.data.published ? dateString(post.data.published) : undefined, + title: post.data.title, + author: post.data.author || siteConfig.author, + }, + })) + .concat([ + { + params: { slug: '__default' }, + props: { pubDate: undefined, title: siteConfig.title, author: siteConfig.author }, + }, + ]) +} diff --git a/src/pages/tags/[tag]/[...page].astro b/src/pages/tags/[tag]/[...page].astro new file mode 100644 index 0000000..a017b5a --- /dev/null +++ b/src/pages/tags/[tag]/[...page].astro @@ -0,0 +1,40 @@ +--- +import type { GetStaticPaths } from 'astro' +import Layout from '~/layouts/Layout.astro' +import { TagsGroup } from '~/utils' +import Pagination from '~/components/Pagination.astro' +import siteConfig from '~/site.config' +import PostPreview from '~/components/PostPreview.astro' +import PageHeader from '~/components/PageHeader.astro' + +// Note: Pagination like '/', '/2', '/3' only works with spread param like [...page] +export const getStaticPaths = (async ({ paginate }) => { + const tagsGroup = await TagsGroup.build() + const pages = tagsGroup.collations.flatMap((tags) => { + // Use flatMap to lift the posts for each tag into a single array + return paginate(tags.entries.reverse(), { + props: { tagTitle: tags.title }, + params: { tag: tags.titleSlug }, + pageSize: siteConfig.pageSize, + }) + }) + return pages +}) satisfies GetStaticPaths + +const { page, tagTitle } = Astro.props +const pageTitle = + `Tag: ${tagTitle}` + (page.currentPage > 1 ? ` - Page ${page.currentPage}` : '') +--- + + +
    + + {page.data.map((post) => )} + +
    +
    diff --git a/src/plugins/rehype-pixelated.ts b/src/plugins/rehype-pixelated.ts new file mode 100644 index 0000000..b0e485b --- /dev/null +++ b/src/plugins/rehype-pixelated.ts @@ -0,0 +1,19 @@ +import { visit } from 'unist-util-visit' +import type { Plugin } from 'unified' +import type { Root } from 'hast' + +const plugin: Plugin<[], Root> = () => { + return function transformer(tree) { + visit(tree, 'element', (el) => { + if (el.tagName === 'img') { + const alt = el.properties?.alt + if (alt && typeof alt === 'string' && alt.endsWith('#pixelated')) { + el.properties['data-pixelated'] = true + el.properties.alt = alt.substring(0, alt.length - '#pixelated'.length).trim() + } + } + }) + } +} + +export default plugin diff --git a/src/plugins/rehype-title-figure.ts b/src/plugins/rehype-title-figure.ts new file mode 100644 index 0000000..b088ac6 --- /dev/null +++ b/src/plugins/rehype-title-figure.ts @@ -0,0 +1,34 @@ +import type * as hast from 'hast' +import type { RehypePlugin } from '@astrojs/markdown-remark' +import { h } from 'hastscript' + +export const rehypeTitleFigure: RehypePlugin = (_options?) => { + function buildFigure(el: hast.Element) { + const title = `${el.properties?.title || ''}` + if (!title) return el + const figure = h('figure', [h('img', { ...el.properties }), h('figcaption', title)]) + return figure + } + function isElement(content: hast.RootContent): content is hast.Element { + return content.type === 'element' + } + function transformTree(node: hast.Root | hast.Element) { + if (node.children) { + node.children = node.children.map((child) => { + if (isElement(child)) { + if (child.tagName === 'img') { + return buildFigure(child) + } else { + transformTree(child) // Recursively process child nodes + } + } + return child + }) + } + } + return function (tree: hast.Root) { + transformTree(tree) // Start the recursive transformation + } +} + +export default rehypeTitleFigure diff --git a/src/plugins/remark-admonitions.ts b/src/plugins/remark-admonitions.ts new file mode 100644 index 0000000..edf394f --- /dev/null +++ b/src/plugins/remark-admonitions.ts @@ -0,0 +1,73 @@ +import type { PhrasingContent, Root } from 'mdast' +import { toString as mdastToString } from 'mdast-util-to-string' +import type { Plugin } from 'unified' +import { visit } from 'unist-util-visit' +import type { AdmonitionType } from '~/types' +import { h as _h, type Properties } from 'hastscript' +import type { Paragraph as P } from 'mdast' + +/** From Astro Starlight: Function that generates an mdast HTML tree ready for conversion to HTML by rehype. */ +function h(el: string, attrs: Properties = {}, children: any[] = []): P { + const { properties, tagName } = _h(el, attrs) + return { + children, + data: { hName: tagName, hProperties: properties }, + type: 'paragraph', + } +} + +// Supported admonition types +const Admonitions = new Set([ + 'tip', + 'note', + 'important', + 'caution', + 'warning', +]) + +/** Checks if a string is a supported admonition type. */ +function isAdmonition(s: string): s is AdmonitionType { + return Admonitions.has(s as AdmonitionType) +} + +export const remarkAdmonitions: Plugin<[], Root> = () => (tree) => { + visit(tree, (node, index, parent) => { + if (!parent || index === undefined || node.type !== 'containerDirective') return + + const admonitionType = node.name + if (!isAdmonition(admonitionType)) return + + let title: string = admonitionType + let titleNode: PhrasingContent[] = [{ type: 'text', value: title }] + + // Check if there's a custom title + const firstChild = node.children[0] + if ( + firstChild?.type === 'paragraph' && + firstChild.data && + 'directiveLabel' in firstChild.data && + firstChild.children.length > 0 + ) { + titleNode = firstChild.children + title = mdastToString(firstChild.children) + // The first paragraph contains a custom title, we can safely remove it. + node.children.splice(0, 1) + } + + // Do not change prefix to AD, ADM, or similar, adblocks will block the content inside. + const admonition = h( + 'aside', + { + 'aria-label': title, + class: 'admonition', + 'data-admonition-type': admonitionType, + }, + [ + h('p', { class: 'admonition-title', 'aria-hidden': 'true' }, [...titleNode]), + h('div', { class: 'admonition-content' }, node.children), + ], + ) + + parent.children[index] = admonition + }) +} diff --git a/src/plugins/remark-character-dialogue.ts b/src/plugins/remark-character-dialogue.ts new file mode 100644 index 0000000..9bbd23e --- /dev/null +++ b/src/plugins/remark-character-dialogue.ts @@ -0,0 +1,62 @@ +import type { Root } from 'mdast' +import type { Plugin } from 'unified' +import { visit } from 'unist-util-visit' +import { h as _h, type Properties } from 'hastscript' +import type { Paragraph as P } from 'mdast' + +/** From Astro Starlight: Function that generates an mdast HTML tree ready for conversion to HTML by rehype. */ +function h(el: string, attrs: Properties = {}, children: any[] = []): P { + const { properties, tagName } = _h(el, attrs) + return { + children, + data: { hName: tagName, hProperties: properties }, + type: 'paragraph', + } +} + +const remarkCharacterDialogue: Plugin<[{ characters: Record }], Root> = + (opts) => (tree) => { + // Type guard to check if a string is a valid character dialogue key + function isCharacterDialogue(s: string): s is keyof typeof opts.characters { + return opts.characters.hasOwnProperty(s) && opts.characters[s] !== undefined + } + + // Do nothing if no characters are defined + if (!opts.characters || Object.keys(opts.characters).length === 0) { + return + } + + visit(tree, (node, index, parent) => { + if (!parent || index === undefined || node.type !== 'containerDirective') return + + const characterName = node.name + if (!isCharacterDialogue(characterName)) return + + const align = node.attributes?.align ?? null + const alignClass = align === 'left' || align === 'right' ? ` align-${align}` : '' + + // Do not change prefix to AD, ADM, or similar, adblocks will block the content inside. + const admonition = h( + 'aside', + { + 'aria-label': `Character dialogue: ${characterName}`, + class: 'character-dialogue' + alignClass, + 'data-character': characterName, + }, + [ + h('img', { + class: 'character-dialogue-image', + alt: characterName, + loading: 'lazy', + src: opts.characters[characterName], + width: 100, + }), + h('div', { class: 'character-dialogue-content' }, node.children), + ], + ) + + parent.children[index] = admonition + }) + } + +export default remarkCharacterDialogue diff --git a/src/plugins/remark-description.ts b/src/plugins/remark-description.ts new file mode 100644 index 0000000..b45911b --- /dev/null +++ b/src/plugins/remark-description.ts @@ -0,0 +1,43 @@ +import type * as mdast from 'mdast' +import type { RemarkPlugin } from '@astrojs/markdown-remark' +import { toString } from 'mdast-util-to-string' + +const remarkDescription: RemarkPlugin = (options?: { maxChars?: number }) => { + const maxChars = (options && options.maxChars) || 200 + return function (tree, { data }) { + function findFirstParagraph( + node: mdast.Root | mdast.RootContent, + ): string | undefined { + if ('children' in node && Array.isArray(node.children)) { + for (const child of node.children) { + if ( + child.type === 'paragraph' && + child.children.length > 0 && + child.children[0].type !== 'image' + ) { + const s = toString(child).trim() + if (s.length > 0) { + return s + } + } else { + const result = findFirstParagraph(child) + if (result) { + return result + } + } + } + } + return undefined + } + let description = data.astro?.frontmatter?.description || findFirstParagraph(tree) + if (description && data.astro?.frontmatter) { + if (description.length > maxChars) { + const lastSpace = description.slice(0, maxChars).lastIndexOf(' ') + description = description.slice(0, lastSpace) + '…' + } + data.astro.frontmatter.description = description + } + } +} + +export default remarkDescription diff --git a/src/plugins/remark-gemoji.ts b/src/plugins/remark-gemoji.ts new file mode 100644 index 0000000..7d280b3 --- /dev/null +++ b/src/plugins/remark-gemoji.ts @@ -0,0 +1,44 @@ +import type { Root, Text } from 'mdast' +import type { Plugin } from 'unified' +import { nameToEmoji, emojiToName } from 'gemoji' +import emojiRegex from 'emoji-regex' +import { findAndReplace } from 'mdast-util-find-and-replace' + +function emojiSpan(emojiLiteral: string, emojiDescription: string): Text { + return { + type: 'text', + value: emojiLiteral, + data: { + hName: 'span', + hProperties: { role: 'img', ariaLabel: emojiDescription.replace(/_/g, ' ') }, + hChildren: [{ type: 'text', value: emojiLiteral }], + }, + } +} + +/** + * Plugin to replace emoji shortcodes with their corresponding emoji characters. + * It uses the `gemoji` package to map shortcode names to emoji characters. + */ +const plugin: Plugin<[], Root> = () => (tree) => { + findAndReplace(tree, [ + [ + /:(\+1|[-\w]+):/g, + (_: string, emojiShortcode: string) => { + return Object.hasOwn(nameToEmoji, emojiShortcode) + ? emojiSpan(nameToEmoji[emojiShortcode], emojiShortcode) + : false + }, + ], + [ + emojiRegex(), + (emojiLiteral: string) => { + return Object.hasOwn(emojiToName, emojiLiteral) + ? emojiSpan(emojiLiteral, emojiToName[emojiLiteral]) + : false + }, + ], + ]) +} + +export default plugin diff --git a/src/plugins/remark-github-card.ts b/src/plugins/remark-github-card.ts new file mode 100644 index 0000000..2782894 --- /dev/null +++ b/src/plugins/remark-github-card.ts @@ -0,0 +1,159 @@ +import type { Root, RootContent } from 'mdast' +import type { Plugin } from 'unified' +import type { Directives } from 'mdast-util-directive' +import type { Node, Paragraph as P } from 'mdast' +import { h as _h, type Properties } from 'hastscript' + +/** Checks if a node is a directive. */ +function isNodeDirective(node: Node): node is Directives { + return ( + node.type === 'containerDirective' || + node.type === 'leafDirective' || + node.type === 'textDirective' + ) +} + +/** From Astro Starlight: Function that generates an mdast HTML tree ready for conversion to HTML by rehype. */ +function h(el: string, attrs: Properties = {}, children: any[] = []): P { + const { properties, tagName } = _h(el, attrs) + return { + children: children.filter((child) => !!child), + data: { hName: tagName, hProperties: properties }, + type: 'paragraph', + } +} + +const DIRECTIVE_NAME = 'github' +const USER_AGENT = 'nodejs' +// 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:137.0) Gecko/20100101 Firefox/137.0', + +export const remarkGithubCard: Plugin<[], Root> = () => async (tree) => { + tree.children = await Promise.all( + tree.children.map(async (node): Promise => { + if (!isNodeDirective(node)) return node + + // We only want a leaf directive named DIRECTIVE_NAME + if (node.type !== 'leafDirective' || node.name !== DIRECTIVE_NAME) return node + + let repoName = node.attributes?.repo ?? node.attributes?.user ?? null + if (!repoName) return node // Leave the directive as-is if no repo is provided + + repoName = repoName.endsWith('/') ? repoName.slice(0, -1) : repoName // Remove trailing slash + repoName = repoName.startsWith('https://github.com/') + ? repoName.replace('https://github.com/', '') + : repoName // Remove leading URL + + const repoParts = repoName.split('/') + const realUrl = `https://github.com/${repoName}` + + // If its a repo link + if (repoParts.length > 1) { + const res = await fetch(`https://api.github.com/repos/${repoName}`, { + headers: { + 'User-Agent': USER_AGENT, + }, + }) + if (!res || res.status !== 200) { + throw new Error(`Fetching GitHub repo data for "${repoName}" failed`) + } + const data = await res.json() + const description = data.description + ? data.description.replace(/:[a-zA-Z0-9_]+:/g, '') + : undefined + const backgroundImage = data.owner?.avatar_url + const language = data.language + const forks = Intl.NumberFormat(undefined, { + notation: 'compact', + maximumFractionDigits: 1, + }) + .format(data.forks) + .replaceAll('\u202f', '') + const stars = Intl.NumberFormat(undefined, { + notation: 'compact', + maximumFractionDigits: 1, + }) + .format(data.stargazers_count) + .replaceAll('\u202f', '') + const license = data.license?.spdx_id + + return h('div', { class: 'github-card' }, [ + h('div', { class: 'gh-title' }, [ + h('span', { + class: 'gh-avatar', + style: `background-image: url('${backgroundImage}')`, + }), + h('a', { class: 'gh-text', href: realUrl }, [ + { type: 'text', value: `${repoParts[0]}/${repoParts[1]}` }, + ]), + h('span', { class: 'gh-icon' }), + ]), + description && + h('div', { class: 'gh-description' }, [ + { + type: 'text', + value: description, + }, + ]), + h('div', { class: 'gh-chips' }, [ + h('span', { class: 'gh-stars' }, [{ type: 'text', value: stars }]), + h('span', { class: 'gh-forks' }, [{ type: 'text', value: forks }]), + license && + h('span', { class: 'gh-license' }, [{ type: 'text', value: license }]), + language && + h('span', { class: 'gh-language' }, [{ type: 'text', value: language }]), + ]), + ]) + } + + // If its a user link + else if (repoParts.length === 1) { + const res = await fetch(`https://api.github.com/users/${repoName}`, { + headers: { + 'User-Agent': USER_AGENT, + }, + }) + if (!res || res.status !== 200) { + throw new Error(`Fetching GitHub user data for "${repoName}" failed`) + } + const data = await res.json() + const backgroundImage = data.avatar_url + const followers = Intl.NumberFormat(undefined, { + notation: 'compact', + maximumFractionDigits: 1, + }) + .format(data.followers) + .replaceAll('\u202f', '') + const repositories = Intl.NumberFormat(undefined, { + notation: 'compact', + maximumFractionDigits: 1, + }) + .format(data.public_repos) + .replaceAll('\u202f', '') + const region = data.location + + return h('div', { class: 'github-card' }, [ + h('div', { class: 'gh-title' }, [ + h('span', { + class: 'gh-avatar', + style: `background-image: url('${backgroundImage}')`, + }), + h('a', { class: 'gh-text', href: realUrl }, [ + { type: 'text', value: repoParts[0] }, + ]), + h('span', { class: 'gh-icon' }), + ]), + h('div', { class: 'gh-chips' }, [ + h('span', { class: 'gh-followers' }, [{ type: 'text', value: followers }]), + h('span', { class: 'gh-repositories' }, [ + { type: 'text', value: repositories }, + ]), + region && + h('span', { class: 'gh-region' }, [{ type: 'text', value: region }]), + ]), + ]) + } + + return node + }), + ) +} diff --git a/src/plugins/remark-reading-time.ts b/src/plugins/remark-reading-time.ts new file mode 100644 index 0000000..61c4373 --- /dev/null +++ b/src/plugins/remark-reading-time.ts @@ -0,0 +1,17 @@ +import type { RemarkPlugin } from '@astrojs/markdown-remark' +import getReadingTime from 'reading-time' +import { toString } from 'mdast-util-to-string' + +const remarkReadingTime: RemarkPlugin = (_options?) => { + return function (tree, { data }) { + if (data.astro?.frontmatter) { + const textOnPage = toString(tree) + const readingTime = getReadingTime(textOnPage) + // readingTime.text will give us minutes read as a friendly string, + // i.e. "3 min read" + data.astro.frontmatter.minutesRead = readingTime.text + } + } +} + +export default remarkReadingTime diff --git a/src/plugins/remark-unknown-directives.ts b/src/plugins/remark-unknown-directives.ts new file mode 100644 index 0000000..7ee89a4 --- /dev/null +++ b/src/plugins/remark-unknown-directives.ts @@ -0,0 +1,52 @@ +import type { Parent, Root } from 'mdast' +import type { LeafDirective, TextDirective } from 'mdast-util-directive' +import { directiveToMarkdown } from 'mdast-util-directive' +import { toMarkdown } from 'mdast-util-to-markdown' +import type { Plugin } from 'unified' +import { visit } from 'unist-util-visit' +import { h as _h } from 'hastscript' +import type { Node } from 'mdast' +import type { Directives } from 'mdast-util-directive' + +/** Checks if a node is a directive. */ +function isNodeDirective(node: Node): node is Directives { + return ( + node.type === 'containerDirective' || + node.type === 'leafDirective' || + node.type === 'textDirective' + ) +} + +/** + * From Astro Starlight: + * Transforms directives not supported back to original form as it can break user content and result in 'broken' output. + */ +function transformUnhandledDirective( + node: LeafDirective | TextDirective, + index: number, + parent: Parent, +) { + const textNode = { + type: 'text', + value: toMarkdown(node, { extensions: [directiveToMarkdown()] }), + } as const + if (node.type === 'textDirective') { + parent.children[index] = textNode + } else { + parent.children[index] = { + children: [textNode], + type: 'paragraph', + } + } +} + +const remarkUnknownAdmonitions: Plugin<[], Root> = () => (tree) => { + visit(tree, (node, index, parent) => { + if (!parent || index === undefined || !isNodeDirective(node)) return + if (node.type === 'textDirective' || node.type === 'leafDirective') { + transformUnhandledDirective(node, index, parent) + } + }) +} + +export default remarkUnknownAdmonitions diff --git a/src/site.config.ts b/src/site.config.ts new file mode 100644 index 0000000..f439293 --- /dev/null +++ b/src/site.config.ts @@ -0,0 +1,178 @@ +import type { SiteConfig } from '~/types' + +const config: SiteConfig = { + // Absolute URL to the root of your published site, used for generating links and sitemaps. + site: 'https://www.foggymtndrifter.com', + // The name of your site, used in the title and for SEO. + title: 'FoggyMtnDrifter', + // The description of your site, used for SEO and RSS feed. + description: + "Michael Kinder's personal site.", + // The author of the site, used in the footer, SEO, and RSS feed. + author: 'Michael Kinder', + // Keywords for SEO, used in the meta tags. + tags: ['Michael Kinder', 'FoggyMtnDrifter', 'Astro'], + // Path to the image used for generating social media previews. + // Needs to be a square JPEG file due to limitations of the social card generator. + // Try https://squoosh.app/ to easily convert images to JPEG. + socialCardAvatarImage: './src/content/avatar.jpeg', + // Font imported from @fontsource or elsewhere, used for the entire site. + // To change this see src/styles/global.css and import a different font. + font: 'Varela', + // For pagination, the number of posts to display per page. + // The homepage will display half this number in the "Latest Posts" section. + pageSize: 6, + // Whether Astro should resolve trailing slashes in URLs or not. + // This value is used in the astro.config.mjs file and in the "Search" component to make sure pagefind links match this setting. + // It is not recommended to change this, since most links existing in the site currently do not have trailing slashes. + trailingSlashes: false, + // Whether to show the "Available for Hire" badge on the About page. + hireMe: true, + // The navigation links to display in the header. + navLinks: [ + { + name: 'Home', + url: '/', + }, + { + name: 'About', + url: '/about', + }, + { + name: 'Blog', + url: '/posts', + }, + ], + // The theming configuration for the site. + themes: { + // The theming mode. One of "single" | "select" | "light-dark-auto". + mode: 'single', + // The default theme identifier, used when themeMode is "select" or "light-dark-auto". + // Make sure this is one of the themes listed in `themes` or "auto" for "light-dark-auto" mode. + default: 'dracula', + // Shiki themes to bundle with the site. + // https://expressive-code.com/guides/themes/#using-bundled-themes + // These will be used to theme the entire site along with syntax highlighting. + // To use light-dark-auto mode, only include a light and a dark theme in that order. + // include: [ + // 'github-light', + // 'github-dark', + // ] + include: [ + 'andromeeda', + 'aurora-x', + 'ayu-dark', + 'catppuccin-frappe', + 'catppuccin-latte', + 'catppuccin-macchiato', + 'catppuccin-mocha', + 'dark-plus', + 'dracula', + 'dracula-soft', + 'everforest-dark', + 'everforest-light', + 'github-dark', + 'github-dark-default', + 'github-dark-dimmed', + 'github-dark-high-contrast', + 'github-light', + 'github-light-default', + 'github-light-high-contrast', + 'gruvbox-dark-hard', + 'gruvbox-dark-medium', + 'gruvbox-dark-soft', + 'gruvbox-light-hard', + 'gruvbox-light-medium', + 'gruvbox-light-soft', + 'houston', + 'kanagawa-dragon', + 'kanagawa-lotus', + 'kanagawa-wave', + 'laserwave', + 'light-plus', + 'material-theme', + 'material-theme-darker', + 'material-theme-lighter', + 'material-theme-ocean', + 'material-theme-palenight', + 'min-dark', + 'min-light', + 'monokai', + 'night-owl', + 'nord', + 'one-dark-pro', + 'one-light', + 'plastic', + 'poimandres', + 'red', + 'rose-pine', + 'rose-pine-dawn', + 'rose-pine-moon', + 'slack-dark', + 'slack-ochin', + 'snazzy-light', + 'solarized-dark', + 'solarized-light', + 'synthwave-84', + 'tokyo-night', + 'vesper', + 'vitesse-black', + 'vitesse-dark', + 'vitesse-light', + ], + // Optional overrides for specific themes to customize colors. + // Their values can be either a literal color (hex, rgb, hsl) or another theme key. + // See themeKeys list in src/types.ts for available keys to override and reference. + overrides: { + // Improve readability for aurora-x theme + // 'aurora-x': { + // background: '#292929FF', + // foreground: '#DDDDDDFF', + // warning: '#FF7876FF', + // important: '#FF98FFFF', + // note: '#83AEFFFF', + // }, + // Make the GitHub dark theme a little cuter + // 'github-light': { + // accent: 'magenta', + // heading1: 'magenta', + // heading2: 'magenta', + // heading3: 'magenta', + // heading4: 'magenta', + // heading5: 'magenta', + // heading6: 'magenta', + // separator: 'magenta', + // link: 'list', + // }, + }, + }, + // Social links to display in the footer. + socialLinks: { + github: 'https://github.com/FoggyMtnDrifter', + // mastodon: 'https://github.com/stelcodes/multiterm-astro', + email: 'mailto:michael@foggymtndrifter.com', + linkedin: 'https://linkedin.com/in/foggymtndrifter', + bluesky: 'https://bsky.app/profile/foggymtndrifter.com', + // twitter: 'https://github.com/stelcodes/multiterm-astro', + rss: true, // Set to true to include an RSS feed link in the footer + }, + // Configuration for Comments. + comments: { + repo: 'FoggyMtnDrifter/website', + repoId: 'R_kgDORBPuRw', + category: 'Comments', + categoryId: 'DIC_kwDORBPuR84C1bYd', + }, + + // These are characters available for the character chat feature. + // To add your own character, add an image file to the top-level `/public` directory + // Make sure to compress the image to a web-friendly size (<100kb) + // Try using the excellent https://squoosh.app web app for creating small webp files + characters: { + owl: '/owl.webp', + unicorn: '/unicorn.webp', + duck: '/duck.webp', + }, +} + +export default config diff --git a/src/styles/global.css b/src/styles/global.css new file mode 100644 index 0000000..1d950d9 --- /dev/null +++ b/src/styles/global.css @@ -0,0 +1,614 @@ +@import 'tailwindcss'; +@import 'katex/dist/katex.css'; + +/* https://fontsource.org/fonts/jetbrains-mono/install */ +/* jetbrains-mono-latin-wght-normal */ +@font-face { + font-family: 'JetBrains Mono Variable'; + font-style: normal; + font-display: swap; + font-weight: 100 800; + src: url(@fontsource-variable/jetbrains-mono/files/jetbrains-mono-latin-wght-normal.woff2) format('woff2-variations'); + unicode-range: + U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, + U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +@theme { + --color-accent: var(--theme-accent); + --color-foreground: var(--theme-foreground); + --color-background: var(--theme-background); + --color-heading1: var(--theme-heading1); + --color-heading2: var(--theme-heading2); + --color-heading3: var(--theme-heading3); + --color-heading4: var(--theme-heading4); + --color-heading5: var(--theme-heading5); + --color-heading6: var(--theme-heading6); + + --animate-spin-slow: spin 10s linear infinite; + + --color-list: var(--theme-list); + --color-link: var(--theme-link); + --color-separator: var(--theme-separator); + --color-note: var(--theme-note); + --color-tip: var(--theme-tip); + --color-important: var(--theme-important); + --color-caution: var(--theme-caution); + --color-warning: var(--theme-warning); + --color-blue: var(--theme-blue); + --color-green: var(--theme-green); + --color-red: var(--theme-red); + --color-yellow: var(--theme-yellow); + --color-magenta: var(--theme-magenta); + --color-cyan: var(--theme-cyan); + --default-font-family: var(--theme-font), sans-serif; + --default-mono-font-family: 'JetBrains Mono Variable', monospace; +} + +header { + view-transition-name: none; +} + +@view-transition { + navigation: auto; +} + +* { + /* Custom scrollbar styles */ + scrollbar-width: thin; + scrollbar-color: color-mix(in oklab, var(--theme-accent) 20%, transparent) transparent; +} + +html { + /* Slightly more accented scrollbar for better visibility */ + scrollbar-color: color-mix(in oklab, var(--theme-accent) 30%, transparent) transparent !important; + /* Prevents layout from jumping when opening theme select or search dialog menus */ + scrollbar-gutter: stable; + scroll-behavior: smooth; +} + +body { + @apply transition-colors; + font-display: block; + font-size-adjust: from-font var(--theme-font); +} + +input:focus-visible, +textarea:focus-visible, +select:focus-visible, +button:focus-visible, +a:focus-visible, +input:active, +textarea:active, +select:active, +button:active { + @apply outline-1 outline-accent outline-offset-2; +} + +a, +button { + @apply hover:cursor-pointer; +} + +a { + @apply underline-offset-2; +} + +a.button { + @apply inline-flex text-accent border-3 border-accent/30 border-double py-1.5 px-3 whitespace-nowrap hover:bg-accent/8 rounded-xl transition-colors; +} + +header button, +header input { + @apply !outline-none; +} + +button { + @apply cursor-pointer; +} + +article img { + @apply block max-w-full border-8 border-foreground/10 rounded-xl overflow-hidden mx-auto; + + &[data-pixelated] { + image-rendering: pixelated; + } +} + +.prose { + @apply text-base/7; + + code:not(.expressive-code code) { + @apply text-sm text-foreground/90 bg-foreground/5 px-2 py-1 rounded-lg whitespace-nowrap; + } + + &>*:not(div.expressive-code, img, figure, video, hr, blockquote, aside), + figcaption { + @apply md:mx-2; + } + + div.expressive-code { + @apply my-8; + + --ec-codeFontFml: var(--default-mono-font-family); + + /* Prevent italics in code blocks */ + /* Feel free to remove this if you want italics */ + div.code span { + font-style: normal !important; + } + + div.copy { + --button-spacing: 9px; + + button { + @apply hidden sm:flex; + --code-background: var(--theme-background); + } + } + + figure { + @apply border-2 border-foreground/8 !rounded-xl; + box-shadow: none !important; + + &.has-title div.copy, + &.is-terminal div.copy { + --button-spacing: 28px; + } + + &.has-title.is-terminal { + span.title { + @apply !px-15; + } + + --button-spacing: 30px !important; + } + + figcaption { + border-radius: 10px 10px 0 0 !important; + background: transparent !important; + padding-block: 0 !important; + border: none !important; + + &::after, + &::before { + border: none !important; + } + + span.title { + @apply !text-foreground/90 !bg-foreground/8 text-center !border-b-2 !border-t-0 !border-r-0 !border-l-0 !border-foreground/10; + width: 100%; + font-family: var(--theme-font); + font-size: var(--ec-codeFontSize); + border-radius: 10px 10px 0 0 !important; + border-bottom-width: 0 !important; + padding: 0 12px !important; + + &::after, + &::before { + border: none !important; + } + } + } + + &>pre { + border-radius: 10px !important; + border: none !important; + scrollbar-width: thin; + background: transparent !important; + } + } + } + + blockquote, + aside { + div.expressive-code { + @apply my-3; + } + } + + h1, + h2, + h3, + h4, + h5, + h6 { + @apply my-6.5 font-semibold; + + a { + @apply underline-offset-3 text-inherit no-underline; + } + } + + h1 { + @apply text-[1.75rem] text-heading1 mt-8; + + + + .heading-anchor svg { + @apply size-5.5; + } + } + + h2 { + @apply text-[1.6rem] text-heading2 mt-12; + + + + .heading-anchor svg { + @apply size-5.5; + } + } + + h3 { + @apply text-2xl text-heading3 mt-10; + + + + .heading-anchor svg { + @apply size-5; + } + } + + h4 { + @apply text-2xl text-heading4 mt-8; + + + + .heading-anchor svg { + @apply size-5; + } + } + + h5 { + @apply text-lg text-heading5; + + + + .heading-anchor svg { + @apply size-4.5; + } + } + + h6 { + @apply text-lg text-heading6; + + + + .heading-anchor svg { + @apply size-4.5; + } + } + + p, + ul, + ol, + img, + figure, + video, + table, + blockquote, + aside, + .github-card { + @apply my-6.5; + } + + b, + strong, + th, + button { + @apply font-semibold; + } + + a { + @apply text-link underline hover:underline; + + &.heading-anchor { + text-decoration: none; + color: inherit; + + &:hover { + text-decoration: underline; + } + } + } + + button { + @apply font-bold text-center text-accent py-1 px-4.5 border-4 border-accent rounded-xl cursor-pointer hover:bg-accent/15 transition-colors; + } + + figure:not(.expressive-code figure) { + @apply block mx-auto rounded-xl py-2; + + figcaption { + @apply text-center italic; + } + } + + ul, + ol { + @apply pl-8 sm:pl-9.5; + } + + li { + @apply pl-2 my-4 marker:text-list; + } + + ul li { + list-style-type: '-'; + } + + ol li { + @apply list-decimal; + } + + hr { + @apply h-0.5 my-16 bg-separator border-none rounded-xl; + } + + blockquote, + aside { + @apply px-7 md:px-6 rounded-xl py-6; + + &>*:not(div.expressive-code, img, figure, video, hr), + figcaption { + @apply md:mx-2; + } + + p:first-child { + @apply mt-0; + } + + p:last-child { + @apply mb-0; + } + } + + blockquote { + @apply relative bg-foreground/5 italic; + } + + aside { + @apply bg-foreground/7; + + &.character-dialogue { + @apply sm:bg-transparent flex items-center sm:items-start justify-center sm:justify-start gap-3 py-4 px-2 md:px-5; + + &:has(+ aside.character-dialogue) { + @apply mb-4 sm:mb-0 sm:pb-0; + } + + &+aside.character-dialogue:nth-of-type(even):not(.align-left), + &.align-right { + @apply flex-row-reverse; + + .character-dialogue-content:after { + @apply -right-3 -rotate-90; + left: initial; + } + } + + &+aside.character-dialogue { + @apply mt-4 sm:mt-3 sm:pt-0; + } + + img.character-dialogue-image { + @apply m-0 border-none shrink-1 w-20 sm:w-25; + } + + .character-dialogue-content { + @apply relative shrink-5 sm:bg-foreground/6 px-1 mx-1.5 sm:px-6 sm:mt-0.5 rounded-xl sm:py-6 max-w-full sm:min-w-1/8; + + /* Add pointy part of speech bubble to the bottom left corner */ + &:after { + @apply hidden sm:block absolute top-8 -left-3 rotate-90 w-0 h-0 border-l-8 border-r-8 border-t-8 border-l-transparent border-r-transparent border-t-foreground/6; + content: ''; + } + } + } + + p.admonition-title { + @apply mb-2 inline-block font-semibold relative ml-6.5 md:ml-8.5; + + &:before { + @apply size-4 bg-blue -left-6 top-1.5 absolute; + content: ''; + mask-size: contain; + mask-position: center; + mask-repeat: no-repeat; + } + } + + p:not(.admonition-title):first-child { + @apply mt-0; + } + + &[data-admonition-type='note'] { + @apply bg-note/7; + + p.admonition-title { + @apply text-note; + } + + p.admonition-title:before { + @apply bg-note; + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' version='1.1' width='16' height='16' aria-hidden='true'%3E%3Cpath d='M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z'%3E%3C/path%3E%3C/svg%3E"); + } + } + + &[data-admonition-type='tip'] { + @apply bg-tip/7; + + p.admonition-title { + @apply text-tip; + } + + p.admonition-title:before { + @apply bg-tip; + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' version='1.1' width='16' height='16' aria-hidden='true'%3E%3Cpath d='M8 1.5c-2.363 0-4 1.69-4 3.75 0 .984.424 1.625.984 2.304l.214.253c.223.264.47.556.673.848.284.411.537.896.621 1.49a.75.75 0 0 1-1.484.211c-.04-.282-.163-.547-.37-.847a8.456 8.456 0 0 0-.542-.68c-.084-.1-.173-.205-.268-.32C3.201 7.75 2.5 6.766 2.5 5.25 2.5 2.31 4.863 0 8 0s5.5 2.31 5.5 5.25c0 1.516-.701 2.5-1.328 3.259-.095.115-.184.22-.268.319-.207.245-.383.453-.541.681-.208.3-.33.565-.37.847a.751.751 0 0 1-1.485-.212c.084-.593.337-1.078.621-1.489.203-.292.45-.584.673-.848.075-.088.147-.173.213-.253.561-.679.985-1.32.985-2.304 0-2.06-1.637-3.75-4-3.75ZM5.75 12h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5ZM6 15.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 0 1.5h-2.5a.75.75 0 0 1-.75-.75Z'%3E%3C/path%3E%3C/svg%3E"); + } + } + + &[data-admonition-type='important'] { + @apply bg-important/7; + + p.admonition-title { + @apply text-important; + } + + p.admonition-title:before { + @apply bg-important; + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' version='1.1' width='16' height='16' aria-hidden='true'%3E%3Cpath d='M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v9.5A1.75 1.75 0 0 1 14.25 13H8.06l-2.573 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25Zm1.75-.25a.25.25 0 0 0-.25.25v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25Zm7 2.25v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 9a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z'%3E%3C/path%3E%3C/svg%3E"); + } + } + + &[data-admonition-type='caution'] { + @apply bg-caution/7; + + p.admonition-title { + @apply text-caution; + } + + p.admonition-title:before { + @apply bg-caution; + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' version='1.1' width='16' height='16' aria-hidden='true'%3E%3Cpath d='M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z'%3E%3C/path%3E%3C/svg%3E"); + } + } + + &[data-admonition-type='warning'] { + @apply bg-warning/7; + + p.admonition-title { + @apply text-warning; + } + + p.admonition-title:before { + @apply bg-warning; + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' version='1.1' width='16' height='16' aria-hidden='true'%3E%3Cpath d='M4.47.22A.749.749 0 0 1 5 0h6c.199 0 .389.079.53.22l4.25 4.25c.141.14.22.331.22.53v6a.749.749 0 0 1-.22.53l-4.25 4.25A.749.749 0 0 1 11 16H5a.749.749 0 0 1-.53-.22L.22 11.53A.749.749 0 0 1 0 11V5c0-.199.079-.389.22-.53Zm.84 1.28L1.5 5.31v5.38l3.81 3.81h5.38l3.81-3.81V5.31L10.69 1.5ZM8 4a.75.75 0 0 1 .75.75v3.5a.75.75 0 0 1-1.5 0v-3.5A.75.75 0 0 1 8 4Zm0 8a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z'%3E%3C/path%3E%3C/svg%3E"); + } + } + } + + .github-card { + @apply bg-foreground/5 rounded-xl px-4 py-3; + + .gh-title { + @apply relative flex items-center gap-2 text-base; + + .gh-avatar { + @apply bg-foreground/20 h-6 w-6 flex-none rounded-full bg-none bg-cover bg-center; + } + + .gh-text { + @apply line-clamp-2; + + &:after { + @apply absolute inset-0 content-['']; + } + } + + .gh-icon { + @apply bg-foreground pointer-events-none ms-auto h-6 w-6 flex-none; + mask: url("data:image/svg+xml;utf8,"); + } + + .gh-forks { + --chip-image: url("data:image/svg+xml;utf8,"); + } + + .gh-license { + --chip-image: url("data:image/svg+xml;utf8,"); + } + + .gh-followers { + --chip-image: url("data:image/svg+xml;utf8,"); + } + + .gh-repositories { + --chip-image: url("data:image/svg+xml;utf8,"); + } + + .gh-language, + .gh-region { + @apply ms-auto; + } + } + } + + table, + th, + td { + @apply border-2 border-foreground/80 p-2.5; + } + + th { + @apply uppercase text-left; + } + + .katex-display { + @apply overflow-x-auto py-2 my-4; + } + + fieldset { + @apply inline-block border-2 border-accent/80 p-2.5 rounded-xl; + } + + fieldset *:first-child { + @apply mb-0; + } + + fieldset input, + fieldset select, + fieldset textarea, + fieldset label, + fieldset button { + @apply mt-3 w-full; + } + + label { + @apply inline-block; + } + + label input { + @apply mt-0; + } + + input, + textarea, + select { + @apply bg-transparent text-foreground border-1 border-foreground p-2.5 rounded-xl; + } + + input[type='checkbox'] { + @apply w-auto; + } + + input[type='submit'] { + @apply border-accent cursor-pointer; + } +} \ No newline at end of file diff --git a/src/types.ts b/src/types.ts new file mode 100644 index 0000000..2a44d8d --- /dev/null +++ b/src/types.ts @@ -0,0 +1,173 @@ +import type { MarkdownHeading } from 'astro' +import type { BundledShikiTheme } from 'astro-expressive-code' +import type { CollectionEntry, DataEntryMap } from 'astro:content' + +export type WeekdayIndex = 0 | 1 | 2 | 3 | 4 | 5 | 6 // 0 = Sunday, 1 = Monday etc. + +export type GitHubActivityDay = { + date: string + count: number + level: 0 | 1 | 2 | 3 | 4 +} + +export type GitHubActivityWeek = Array + +export type GitHubActivityApiResponse = { + total: { + [year: number]: number + [year: string]: number // 'lastYear; + } + contributions: Array + error?: string +} + +export type GitHubActivityMonthLabel = { + weekIndex: number + label: string +} + +export interface TocItem extends MarkdownHeading { + children: TocItem[] +} + +export interface TocOpts { + maxHeadingLevel?: number | undefined + minHeadingLevel?: number | undefined +} + +export interface FrontmatterImage { + alt: string + src: { + height: number + src: string + width: number + format: 'avif' | 'png' | 'webp' | 'jpeg' | 'jpg' | 'svg' | 'tiff' | 'gif' + } +} + +export interface Collation { + title: string + url: string + titleSlug: string + entries: CollectionEntry[] +} + +export interface CollationGroup { + title: string + url: string + collations: Collation[] + // Return this.collations to allow chaining + sortCollationsAlpha(): Collation[] + sortCollationsMostRecent(): Collation[] + sortCollationsLargest(): Collation[] + add(item: CollectionEntry, rawKey: string): void + match(title: string): Collation | undefined + matchMany(titles: string[]): Collation[] | undefined +} + +export type NavLink = { + name: string + url: string + external?: boolean +} + +export type AdmonitionType = 'tip' | 'note' | 'important' | 'caution' | 'warning' + +export const themeKeys = [ + 'foreground', + 'background', + 'accent', + // Markdown styles + 'heading1', + 'heading2', + 'heading3', + 'heading4', + 'heading5', + 'heading6', + 'list', + 'separator', + 'italic', + 'link', + // For admonition styling + 'note', + 'tip', + 'important', + 'caution', + 'warning', + // Terminal colors for user customization only, not used by default + 'blue', + 'green', + 'red', + 'yellow', + 'magenta', + 'cyan', +] as const + +export type ThemeKey = (typeof themeKeys)[number] + +// const example: TextmateStyles = { +// foreground: ['editor.foreground'], +// background: ['editor.background'], +// } +export type TextmateStyles = { + [key in ThemeKey]: string[] +} + +// const example: ColorStyles = { +// foreground: '#000000', +// background: '#ffffff', +// } +export type ColorStyles = { + [key in ThemeKey]: string +} + +// const example: ThemesWithColorStyles = { +// 'github-light': { +// foreground: '#24292e', +// background: '#ffffff', +// }, +// } +export type ThemesWithColorStyles = Partial> +export type ThemeOverrides = Partial>> + +export interface ThemesConfig { + default: BundledShikiTheme | 'auto' + mode: 'single' | 'light-dark-auto' | 'select' + include: BundledShikiTheme[] + overrides?: ThemeOverrides +} + +export type SocialLinks = { + github?: string + twitter?: string + mastodon?: string + bluesky?: string + linkedin?: string + email?: string + rss?: boolean +} + +export interface SiteConfig { + site: string + font: string + title: string + description: string + author: string + socialCardAvatarImage: string + tags: string[] + pageSize: number + hireMe?: boolean + trailingSlashes: boolean + themes: ThemesConfig + socialLinks: SocialLinks + navLinks: NavLink[] + comments: CommentsConfig + characters: Record +} + +export type CommentsConfig = { + repo: string + repoId: string + category: string + categoryId: string +} diff --git a/src/utils.ts b/src/utils.ts new file mode 100644 index 0000000..bb4d74b --- /dev/null +++ b/src/utils.ts @@ -0,0 +1,331 @@ +import { + type TextmateStyles, + type ThemesWithColorStyles, + type ThemeKey, + themeKeys, + type ThemeOverrides, + type Collation, + type CollationGroup, +} from '~/types' +import { + loadShikiTheme, + type BundledShikiTheme, + type ExpressiveCodeTheme, +} from 'astro-expressive-code' +import { getCollection, type CollectionEntry } from 'astro:content' +import Color from 'color' +import { slug } from 'github-slugger' + +export function dateString(date: Date) { + return date.toISOString().split('T')[0] +} + +export function pick(obj: Record, keys: string[]) { + return Object.fromEntries( + keys.filter((key) => key in obj).map((key) => [key, obj[key]]), + ) +} + +export function flattenThemeColors(theme: ExpressiveCodeTheme): { + [key: string]: string +} { + const scopedThemeSettings = theme.settings.reduce( + (acc, item) => { + const { scope, settings } = item + const { foreground } = settings + if (scope && foreground) { + for (const s of scope) { + acc[s] = foreground.toLowerCase().trim() + } + } + return acc + }, + {} as { [key: string]: string }, + ) + return { ...theme.colors, ...scopedThemeSettings } +} + +const unresolvedStyles: TextmateStyles = { + // VSCode Command: Inspect Editor Tokens And Scopes + foreground: ['editor.foreground'], + background: ['editor.background'], + accent: [ + 'heading.1.markdown entity.name', + 'heading.1.markdown', + 'markup.heading.markdown', + 'markup.heading', + 'editor.foreground', + ], + // Markdown styles + heading1: [ + 'heading.1.markdown entity.name', + 'heading.1.markdown', + 'markup.heading.markdown', + 'markup.heading', + 'editor.foreground', + ], + heading2: [ + 'heading.2.markdown entity.name', + 'heading.2.markdown', + 'markup.heading.markdown', + 'markup.heading', + 'editor.foreground', + ], + heading3: [ + 'heading.3.markdown entity.name', + 'heading.3.markdown', + 'markup.heading.markdown', + 'markup.heading', + 'editor.foreground', + ], + heading4: [ + 'heading.4.markdown entity.name', + 'heading.4.markdown', + 'markup.heading.markdown', + 'markup.heading', + 'editor.foreground', + ], + heading5: [ + 'heading.5.markdown entity.name', + 'heading.5.markdown', + 'markup.heading.markdown', + 'markup.heading', + 'editor.foreground', + ], + heading6: [ + 'heading.6.markdown entity.name', + 'heading.6.markdown', + 'markup.heading.markdown', + 'markup.heading', + 'editor.foreground', + ], + list: [ + 'markup.list.bullet', + 'punctuation.definition.list.begin.markdown', + 'editor.foreground', + ], + italic: [ + 'markup.italic.markdown', + 'markup.italic', + 'punctuation.definition.italic.markdown', + 'editor.foreground', + ], + link: ['string.other.link.title.markdown', 'markup.link', 'editor.foreground'], + separator: ['meta.separator.markdown', 'meta.separator', 'editor.foreground'], + // For admonition styling + note: ['terminal.ansiBlue', 'terminal.ansiBrightBlue'], + tip: ['terminal.ansiGreen', 'terminal.ansiBrightGreen'], + important: ['terminal.ansiMagenta', 'terminal.ansiBrightMagenta'], + caution: ['terminal.ansiYellow', 'terminal.ansiBrightYellow'], + warning: ['terminal.ansiRed', 'terminal.ansiBrightRed'], + // For Giscus syntax highlighting only + comment: ['comment', 'punctuation.definition.comment', 'foreground'], + constant: ['constant.language.boolean', 'constant.language', 'foreground'], + entity: ['entity.name.function', 'support.function', 'function', 'foreground'], + tag: [ + 'entity.name.tag', + 'punctuation.definition.tag', + 'punctuation.definition.tag.html', + 'meta.tag', + 'foreground', + ], + keyword: [ + 'keyword', + 'punctuation.definition.keyword', + 'keyword.operator', + 'foreground', + ], + string: ['string', 'string.quoted', 'string.value', 'string variable', 'foreground'], + variable: [ + 'variable', + 'variable.language', + 'variable.other', + 'support.variable', + 'foreground', + ], + regexp: [ + 'string.regexp', + 'string.regexp.source', + 'constant.other.character-class.regexp', + 'string', + 'foreground', + ], + // Terminal colors for user customization only, not used by default + blue: ['terminal.ansiBlue', 'terminal.ansiBrightBlue'], + green: ['terminal.ansiGreen', 'terminal.ansiBrightGreen'], + red: ['terminal.ansiRed', 'terminal.ansiBrightRed'], + yellow: ['terminal.ansiYellow', 'terminal.ansiBrightYellow'], + magenta: ['terminal.ansiMagenta', 'terminal.ansiBrightMagenta'], + cyan: ['terminal.ansiCyan', 'terminal.ansiBrightCyan'], +} + +export async function resolveThemeColorStyles( + themes: BundledShikiTheme[], + overrides?: ThemeOverrides, +): Promise { + const validateColor = (color: string) => { + // Check if the color is a valid hex, rgb, or hsl color via regex + const colorRegex = /^(#|rgb|hsl)/i + if (!colorRegex.test(color)) return undefined + try { + return new Color(color).hex() + } catch { + return undefined + } + } + const resolvedThemes = themes.map(async (theme) => { + const loadedTheme = await loadShikiTheme(theme) + const flattenedTheme = flattenThemeColors(loadedTheme) + const result = {} as { [key in ThemeKey]: string } + for (const themeKey of Object.keys(unresolvedStyles) as ThemeKey[]) { + if (overrides?.[theme]?.[themeKey]) { + const override = overrides[theme][themeKey] + const overrideColor = validateColor(override) + if (overrideColor) { + result[themeKey] = override + continue + } + // If the override is not a valid color, try to resolve it as a highlight group + if (themeKeys.includes(override as ThemeKey)) { + for (const textmateGroup of unresolvedStyles[override as ThemeKey]) { + if (flattenedTheme[textmateGroup]) { + result[themeKey] = flattenedTheme[textmateGroup] + break + } + } + } + if (result[themeKey]) { + continue + } else { + console.warn( + `Theme "${theme}" has an override for "${themeKey}" with value "${override}", but it is neither a theme key nor valid color.`, + ) + } + } + for (const textmateGroup of unresolvedStyles[themeKey]) { + if (flattenedTheme[textmateGroup]) { + result[themeKey] = flattenedTheme[textmateGroup] + break + } + } + } + return [theme, result] + }) + return Object.fromEntries(await Promise.all(resolvedThemes)) as ThemesWithColorStyles +} + +export async function getSortedPosts() { + const allPosts = await getCollection('posts', ({ data }) => { + return import.meta.env.PROD ? data.draft !== true : true + }) + const sortedPosts = allPosts.sort((a, b) => { + return a.data.published < b.data.published ? -1 : 1 + }) + return sortedPosts +} + +abstract class PostsCollationGroup implements CollationGroup<'posts'> { + title: string + url: string + collations: Collation<'posts'>[] + + constructor(title: string, url: string, collations: Collation<'posts'>[]) { + this.title = title + this.url = url + this.collations = collations + } + + sortCollationsAlpha(): Collation<'posts'>[] { + this.collations.sort((a, b) => a.title.localeCompare(b.title)) + return this.collations + } + + sortCollationsLargest(): Collation<'posts'>[] { + this.collations.sort((a, b) => b.entries.length - a.entries.length) + return this.collations + } + + sortCollationsMostRecent(): Collation<'posts'>[] { + this.collations.sort((a, b) => { + const aDate = a.entries[a.entries.length - 1].data.published + const bDate = b.entries[b.entries.length - 1].data.published + return aDate < bDate ? 1 : -1 + }) + return this.collations + } + + add(item: CollectionEntry<'posts'>, collationTitle: string): void { + const collationTitleSlug = slug(collationTitle.trim()) + const existing = this.collations.find((i) => i.titleSlug === collationTitleSlug) + if (existing) { + const alreadyHasThisPost = existing.entries.find((e) => e.id === item.id) + if (!alreadyHasThisPost) { + existing.entries.push(item) + } + } else { + this.collations.push({ + title: collationTitle, + titleSlug: collationTitleSlug, + url: `${this.url}/${encodeURIComponent(collationTitleSlug)}`, + entries: [item], + }) + } + } + + match(rawKey: string): Collation<'posts'> | undefined { + return this.collations.find((entry) => entry.title === rawKey) + } + + matchMany(rawKeys: string[]): Collation<'posts'>[] { + return this.collations.filter((entry) => rawKeys.includes(entry.title)) + } +} + +export class SeriesGroup extends PostsCollationGroup { + // Private constructor to enforce the use of the static build method + private constructor(title: string, url: string, items: Collation<'posts'>[]) { + super(title, url, items) + } + // Factory method to create a SeriesGroup instance with async data fetching + static async build(posts?: CollectionEntry<'posts'>[]): Promise { + const sortedPosts = posts || (await getSortedPosts()) + const seriesGroup = new SeriesGroup('Series', '/series', []) + sortedPosts.forEach((post) => { + const frontmatterSeries = post.data.series + if (frontmatterSeries) { + seriesGroup.add(post, frontmatterSeries) + } + }) + return seriesGroup + } +} + +export class TagsGroup extends PostsCollationGroup { + // Private constructor to enforce the use of the static build method + private constructor(title: string, url: string, items: Collation<'posts'>[]) { + super(title, url, items) + } + + // Factory method to create a SeriesGroup instance with async data fetching + static async build(posts?: CollectionEntry<'posts'>[]): Promise { + const sortedPosts = posts || (await getSortedPosts()) + const tagsGroup = new TagsGroup('Tags', '/tags', []) + sortedPosts.forEach((post) => { + const frontmatterTags = post.data.tags || [] + frontmatterTags.forEach((tag) => { + tagsGroup.add(post, tag) + }) + }) + return tagsGroup + } +} + +export function getPostSequenceContext( + post: CollectionEntry<'posts'>, + posts: CollectionEntry<'posts'>[], +) { + const index = posts.findIndex((p) => p.id === post.id) + const prev = index > 0 ? posts[index - 1] : undefined + const next = index < posts.length - 1 ? posts[index + 1] : undefined + return { index, prev, next } +} diff --git a/svelte.config.js b/svelte.config.js new file mode 100644 index 0000000..5fae627 --- /dev/null +++ b/svelte.config.js @@ -0,0 +1,5 @@ +import { vitePreprocess } from '@astrojs/svelte'; + +export default { + preprocess: vitePreprocess(), +}; diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..e5fffaf --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,19 @@ +{ + "extends": "astro/tsconfigs/strict", + "include": [".astro/types.d.ts", "**/*"], + "exclude": ["dist"], + "compilerOptions": { + "verbatimModuleSyntax": true, + "baseUrl": ".", + "paths": { + "~/*": ["src/*"] + }, + "plugins": [ + { + "name": "@astrojs/ts-plugin" + } + ], + "jsx": "react-jsx", + "jsxImportSource": "react" + } +}