diff --git a/.github/header.png b/.github/header.png new file mode 100644 index 00000000..4b5ca514 Binary files /dev/null and b/.github/header.png differ diff --git a/.github/header.svg b/.github/header.svg new file mode 100644 index 00000000..d7903e2a --- /dev/null +++ b/.github/header.svg @@ -0,0 +1 @@ +Open {re}Source: How it works, how to contribute, how to run your own project. diff --git a/README.md b/README.md index 934ffadc..fe5b9a23 100644 --- a/README.md +++ b/README.md @@ -1,26 +1,13 @@ -

- - - - - - - -

+

Open {re}Source. Open source, {re}explained: how it works, how to contribute, how to run your own project.

openresource.dev

- Open {re}Source is your platform for sharing and discovering the open source world. + Open source, {re}explained.
- Understand how it works, and learn how to create, manage, and contribute to open-source projects. + How it works, how to contribute, how to run your own project.
- Join the open source community today and start making a difference. + A free guide, articles and a showcase by the Open {re}Source community.

@@ -86,12 +73,12 @@ Content (including images) released under [CC BY-NC-SA 4.0](https://creativecomm - `src/assets` directory - `src/content` directory +The Open {re}Source mark, favicons and artwork (`src/brand`, `src/assets/resources` and `public/covers` directories, `.github/header.*`) are not covered by these licenses: all rights reserved. + ## Thanks [![Built with Astro](https://astro.badg.es/v2/built-with-astro/small.svg)](https://astro.build) -[![Built with Starlight](https://astro.badg.es/v2/built-with-starlight/small.svg)](https://starlight.astro.build) - ## Sponsors

diff --git a/astro.config.mjs b/astro.config.mjs index b387d285..0064c50c 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -1,8 +1,13 @@ import { defineConfig } from 'astro/config'; -import starlight from '@astrojs/starlight'; +import mdx from '@astrojs/mdx'; +import sitemap from '@astrojs/sitemap'; import vercel from '@astrojs/vercel'; -import starlightBlog from 'starlight-blog'; -import starlightLinksValidator from 'starlight-links-validator'; +import deramond from '@deramond.dev/astro/integration'; + +const guide = (label, dir, pages) => ({ + label, + items: [`guide/${dir}`, ...pages.map((page) => `guide/${dir}/${page}`)], +}); // https://astro.build/config export default defineConfig({ @@ -16,6 +21,7 @@ export default defineConfig({ }, }), site: 'https://openresource.dev', + trailingSlash: 'ignore', vite: { define: { 'import.meta.env.PUBLIC_VERCEL_ANALYTICS_ID': JSON.stringify(process.env.VERCEL_ANALYTICS_ID), @@ -28,348 +34,158 @@ export default defineConfig({ '/podcasts': '/resources/podcasts', '/resources': '/resources/books', '/rss.xml': '/articles/rss.xml', + '/articles/authors/julien-déramond': '/articles', }, integrations: [ - starlight({ - components: { - Footer: './src/components/Footer.astro', - Head: './src/components/Head.astro', - PageTitle: './src/components/PageTitleThenReadingTime.astro', - Pagination: './src/components/SupportThenPagination.astro', - Header: './src/components/Header.astro', + mdx(), + sitemap(), + deramond({ + site: { + name: 'Open {re}Source', + description: 'Open source, {re}explained. How it works, how to contribute, how to run your own project.', }, - plugins: [ - starlightLinksValidator({ - exclude: ['http://localhost:11434', '/articles'], - }), - starlightBlog({ - title: 'Articles', - prefix: 'articles', - authors: { - julien: { - name: 'Julien Déramond', - title: 'Open {re}Source • Bootstrap • Thales', - picture: 'https://avatars.githubusercontent.com/u/17381666?s=100', - url: 'https://github.com/julien-deramond/', - }, - }, - metrics: { - readingTime: true, - words: 'total', - }, - recentPostCount: 5, - postCount: Number.MAX_SAFE_INTEGER, - navigation: 'none', - }), + brand: { + mark: './src/brand/mark.svg', + favicons: './src/brand/favicons/', + accounts: [ + { label: 'GitHub', href: 'https://github.com/Open-reSource/openresource.dev' }, + { label: 'Discord', href: 'https://discord.gg/fpUDwEMGwE' }, + { label: 'Bluesky', href: 'https://bsky.app/profile/openresource.dev' }, + { label: 'Mastodon', href: 'https://fosstodon.org/@openresource' }, + { label: 'LinkedIn', href: 'https://www.linkedin.com/company/open-re-source/' }, + { label: 'X', href: 'https://x.com/open_resource' }, + { label: 'Threads', href: 'https://www.threads.net/@openresource' }, + ], + twitter: '@JulienDeramond', + }, + nav: [ + { label: 'Guide', href: '/guide/' }, + { label: 'Resources', href: '/resources/books/' }, + { label: 'Articles', href: '/articles/' }, + { label: 'Showcase', href: '/showcase/' }, ], - title: 'Open {re}Source', - favicon: '/favicon.ico', - head: [ - { - tag: 'link', - attrs: { - rel: 'apple-touch-icon', - href: '/apple-touch-icon.png', - size: '180x180', - }, - }, - { - tag: 'link', - attrs: { - rel: 'icon', - type: 'image/png', - href: '/favicon-32x32.png', - size: '32x32', + footer: { + columns: [ + { + title: 'Learn', + links: [ + { label: 'Guide', href: '/guide/' }, + { label: 'Resources', href: '/resources/books/' }, + { label: 'Articles', href: '/articles/' }, + { label: 'RSS', href: '/articles/rss.xml' }, + ], }, - }, - { - tag: 'link', - attrs: { - rel: 'icon', - type: 'image/png', - href: '/favicon-16x16.png', - size: '16x16', - }, - }, - { - tag: 'link', - attrs: { - rel: 'manifest', - href: '/site.webmanifest', - }, - }, - { - tag: 'link', - attrs: { - rel: 'mask-icon', - href: '/safari-pinned-tab.svg', - color: '#4a01fe', + { + title: 'Community', + links: [ + { label: 'Showcase', href: '/showcase/' }, + { label: 'Become a sponsor', href: 'https://github.com/sponsors/Open-reSource' }, + { label: 'About the author', href: '/about-author/' }, + { label: 'Cookie policy', href: '/cookie-policy/' }, + ], }, - }, - { - tag: 'meta', - attrs: { - name: 'msapplication-TileColor', - content: '#4a01fe', + ], + copyright: '2023-present © Open {re}Source', + meta: 'Content under CC BY-NC-SA 4.0', + }, + docs: { + route: '', + tabs: [ + { label: 'Guide', href: '/guide/' }, + { label: 'Resources', href: '/resources/books/' }, + { label: 'Articles', href: '/articles/' }, + { label: 'Showcase', href: '/showcase/' }, + ], + status: false, + edit: { repo: 'Open-reSource/openresource.dev' }, + sidebar: [ + { label: 'Guide', items: ['guide'] }, + guide('What Is Open Source?', 'what-is-open-source', [ + 'definition-of-open-source', + 'brief-history-of-open-source', + 'the-significance-of-open-source', + 'examples-of-successful-open-source-projects', + 'types-of-open-source-projects', + 'types-of-open-source-software-projects', + 'benefits-of-open-source', + ]), + guide('Getting Started', 'getting-started-with-open-source', [ + 'source-code-hosting-platforms', + 'finding-open-source-projects', + ]), + guide('Contributing', 'contributing-to-open-source-projects', [ + 'finding-open-source-projects', + 'contributing-to-open-source', + 'getting-involved-in-the-open-source-community', + 'building-a-portfolio-with-open-source-contributions', + 'overcoming-challenges-in-open-source-contributions', + ]), + guide('Creating', 'creating-your-own-open-source-project', [ + 'choosing-a-project-idea', + 'planning-your-project', + 'creating-your-project', + 'legal-considerations', + 'developing-your-project', + 'building-and-engaging-your-community', + ]), + guide('Maintaining', 'maintaining-open-source-projects', [ + 'introduction-to-open-source-project-maintenance', + 'managing-contributions-and-community-engagement', + 'managing-project-dependencies', + 'fostering-a-strong-and-inclusive-community', + 'ensuring-project-sustainability', + ]), + guide('Promoting', 'promoting-open-source-projects', [ + 'introduction-to-project-promotion', + 'building-a-strong-project-identity', + 'crafting-an-engaging-project-website', + ]), + guide('Financing', 'financing-open-source-projects', [ + 'importance-and-challenges-of-financing-open-source-projects', + 'understanding-funding-models', + 'effective-fundraising-strategies', + 'resource-allocation-and-budgeting', + 'fostering-a-sustainable-ecosystem', + 'transparency-accountability-and-community-involvement', + ]), + { + label: 'Resources', + items: [ + 'resources/books', + 'resources/events', + 'resources/open-sourcerers', + 'resources/podcasts', + 'resources/tools', + ], }, - }, - { - tag: 'meta', - attrs: { - name: 'theme-color', - content: '#ffffff', + ], + }, + blog: { + collection: 'articles', + route: 'articles', + title: 'Articles', + description: 'Articles about open source: tools, contribution, maintenance, community and funding.', + license: 'CC BY-NC-SA 4.0', + authors: { + julien: { + name: 'Julien Déramond', + title: 'Open {re}Source • Bootstrap • Thales', + picture: 'https://avatars.githubusercontent.com/u/17381666?s=100', + url: 'https://github.com/julien-deramond/', }, }, - ], - logo: { - light: './src/assets/logo.svg', - dark: './src/assets/logo-dark.svg', - replacesTitle: true, }, - editLink: { - baseUrl: 'https://github.com/Open-reSource/openresource.dev/edit/main/', - }, - social: [ - { - icon: 'github', - label: 'GitHub', - href: 'https://github.com/Open-reSource/openresource.dev', - }, - { - icon: 'discord', - label: 'Discord', - href: 'https://discord.gg/fpUDwEMGwE', - }, - { - icon: 'x.com', - label: 'X', - href: 'https://x.com/open_resource', - }, - { - icon: 'linkedin', - label: 'LinkedIn', - href: 'https://www.linkedin.com/company/open-re-source/', - }, - { - icon: 'mastodon', - label: 'Mastodon', - href: 'https://fosstodon.org/@openresource', - }, - { - icon: 'blueSky', - label: 'Blue Sky', - href: 'https://bsky.app/profile/openresource.dev', - }, - { - icon: 'threads', - label: 'Threads', - href: 'https://www.threads.net/@openresource', - }, - ], - customCss: ['./src/styles/custom.css'], - defaultLocale: 'root', - locales: { - root: { - label: 'English', - lang: 'en', - }, + og: { + art: './src/brand/og-art.png', + name: 'Open {re}Source', + title: 'Open source,', + accent: '{re}explained.', + subtitle: 'How it works, how to contribute, how to run your own project.', }, - sidebar: [ - { - label: 'Guide', - items: [ - { - label: 'Introduction', - slug: 'guide', - }, - { - label: 'What Is Open Source?', - collapsed: false, - items: [ - { - label: 'Introduction', - slug: 'guide/what-is-open-source', - }, - { - slug: 'guide/what-is-open-source/definition-of-open-source', - }, - { - slug: 'guide/what-is-open-source/brief-history-of-open-source', - }, - { - slug: 'guide/what-is-open-source/the-significance-of-open-source', - }, - { - slug: 'guide/what-is-open-source/examples-of-successful-open-source-projects', - }, - { - slug: 'guide/what-is-open-source/types-of-open-source-projects', - }, - { - slug: 'guide/what-is-open-source/types-of-open-source-software-projects', - }, - { - slug: 'guide/what-is-open-source/benefits-of-open-source', - }, - ], - }, - { - label: 'Getting Started', - collapsed: true, - items: [ - { - label: 'Introduction', - slug: 'guide/getting-started-with-open-source', - }, - { - slug: 'guide/getting-started-with-open-source/source-code-hosting-platforms', - }, - { - slug: 'guide/getting-started-with-open-source/finding-open-source-projects', - }, - ], - }, - { - label: 'Contributing', - collapsed: true, - items: [ - { - label: 'Introduction', - slug: 'guide/contributing-to-open-source-projects', - }, - { - slug: 'guide/contributing-to-open-source-projects/finding-open-source-projects', - }, - { - slug: 'guide/contributing-to-open-source-projects/contributing-to-open-source', - }, - { - slug: 'guide/contributing-to-open-source-projects/getting-involved-in-the-open-source-community', - }, - { - slug: 'guide/contributing-to-open-source-projects/building-a-portfolio-with-open-source-contributions', - }, - { - slug: 'guide/contributing-to-open-source-projects/overcoming-challenges-in-open-source-contributions', - }, - ], - }, - { - label: 'Creating', - collapsed: true, - items: [ - { - label: 'Introduction', - slug: 'guide/creating-your-own-open-source-project', - }, - { - slug: 'guide/creating-your-own-open-source-project/choosing-a-project-idea', - }, - { - slug: 'guide/creating-your-own-open-source-project/planning-your-project', - }, - { - slug: 'guide/creating-your-own-open-source-project/creating-your-project', - }, - { - slug: 'guide/creating-your-own-open-source-project/legal-considerations', - }, - { - slug: 'guide/creating-your-own-open-source-project/developing-your-project', - }, - { - slug: 'guide/creating-your-own-open-source-project/building-and-engaging-your-community', - }, - ], - }, - { - label: 'Maintaining', - collapsed: true, - items: [ - { - label: 'Introduction', - slug: 'guide/maintaining-open-source-projects', - }, - { - slug: 'guide/maintaining-open-source-projects/introduction-to-open-source-project-maintenance', - }, - { - slug: 'guide/maintaining-open-source-projects/managing-contributions-and-community-engagement', - badge: 'Coming soon', - }, - { - slug: 'guide/maintaining-open-source-projects/managing-project-dependencies', - }, - { - slug: 'guide/maintaining-open-source-projects/fostering-a-strong-and-inclusive-community', - }, - { - slug: 'guide/maintaining-open-source-projects/ensuring-project-sustainability', - badge: 'Coming soon', - }, - ], - }, - { - label: 'Promoting', - collapsed: true, - items: [ - { - label: 'Introduction', - slug: 'guide/promoting-open-source-projects', - }, - { - slug: 'guide/promoting-open-source-projects/introduction-to-project-promotion', - }, - { - slug: 'guide/promoting-open-source-projects/building-a-strong-project-identity', - }, - { - slug: 'guide/promoting-open-source-projects/crafting-an-engaging-project-website', - badge: 'Coming soon', - }, - ], - }, - { - label: 'Financing', - collapsed: true, - items: [ - { - label: 'Introduction', - slug: 'guide/financing-open-source-projects', - }, - { - slug: 'guide/financing-open-source-projects/importance-and-challenges-of-financing-open-source-projects', - }, - { - slug: 'guide/financing-open-source-projects/understanding-funding-models', - }, - { - slug: 'guide/financing-open-source-projects/effective-fundraising-strategies', - }, - { - slug: 'guide/financing-open-source-projects/resource-allocation-and-budgeting', - badge: 'Coming soon', - }, - { - slug: 'guide/financing-open-source-projects/fostering-a-sustainable-ecosystem', - badge: 'Coming soon', - }, - { - slug: 'guide/financing-open-source-projects/transparency-accountability-and-community-involvement', - badge: 'Coming soon', - }, - ], - }, - ], - }, - { - label: 'Resources', - items: [{ autogenerate: { directory: 'resources' } }], - }, - { - label: 'Articles', - link: '/articles', - }, + css: ['./src/styles/site.css'], + head: [ + { tag: 'meta', attrs: { name: 'twitter:site', content: '@open_resource' } }, + { tag: 'meta', attrs: { name: 'fediverse:creator', content: '@openresource@fosstodon.org' } }, ], }), ], diff --git a/package-lock.json b/package-lock.json index 141b55e1..0cebc833 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,11 +9,12 @@ "version": "0.0.0", "dependencies": { "@astrojs/check": "^0.9.10", - "@astrojs/markdown-remark": "^7.3.0", - "@astrojs/starlight": "^0.42.0", - "@astrojs/vercel": "^11.0.10", + "@astrojs/mdx": "^8.0.2", + "@astrojs/sitemap": "^3.7.4", + "@astrojs/vercel": "^11.0.11", + "@deramond.dev/astro": "^0.4.0", "@vercel/analytics": "^2.0.1", - "astro": "^7.2.9" + "astro": "^7.3.5" }, "devDependencies": { "@actions/core": "^3.0.1", @@ -21,17 +22,12 @@ "@octokit/graphql": "^9.0.5", "@octokit/graphql-schema": "^15.26.1", "@types/parse-github-url": "^1.0.3", - "astro-og-canvas": "^0.13.1", "dotenv": "^17.4.2", "gemoji": "^8.1.0", "linkedom": "^0.18.13", "parse-github-url": "^1.0.4", "prettier": "^3.9.6", "prettier-plugin-astro": "^1.0.0", - "reading-time": "^1.5.0", - "starlight-blog": "^0.29.0", - "starlight-links-validator": "^0.26.0", - "starlight-showcases": "^0.3.2", "tsx": "^4.23.13", "vercel": "^59.11.7", "vitest": "^5.0.0" @@ -76,33 +72,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@astro-community/astro-embed-twitter": { - "version": "0.5.11", - "resolved": "https://registry.npmjs.org/@astro-community/astro-embed-twitter/-/astro-embed-twitter-0.5.11.tgz", - "integrity": "sha512-6cmyQY4LVVJj6x7qC6XrhWcxNffLvR+QGE/iw5HTOtAn60AStr6u+IX2Txpy6N6bta0DLjGqhTBhkC3NxmVKJg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@astro-community/astro-embed-utils": "^0.2.0" - } - }, - "node_modules/@astro-community/astro-embed-utils": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@astro-community/astro-embed-utils/-/astro-embed-utils-0.2.0.tgz", - "integrity": "sha512-Ia70AMCFOUOSoaMfMaK7Ovk7VyIY4opwzBJoA6GeL+omkvpFwDbSWmA8MOiMF4gJC0j/1dgrEir+txIb+WvsCA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@astro-community/astro-embed-youtube": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/@astro-community/astro-embed-youtube/-/astro-embed-youtube-0.5.10.tgz", - "integrity": "sha512-hVlx77KQLjKzElVQnrU5znQ5/E60keVSAPrhuWvQQHuqva5auJtt8YBpOThkwDMuEKXjQybEF1/3C07RZ8MAOQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "lite-youtube-embed": "^0.3.4" - } - }, "node_modules/@astrojs/check": { "version": "0.9.10", "resolved": "https://registry.npmjs.org/@astrojs/check/-/check-0.9.10.tgz", @@ -131,6 +100,7 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding/-/compiler-binding-0.4.0.tgz", "integrity": "sha512-x2RjDUuWfwLNtc3mjAdSRInwqh/rqbLar9cm/5FOMbHvmYZB7yfKewzSclAxWjIZsypJDXv1lhaP2WG+P8TK3g==", + "devOptional": true, "license": "MIT", "engines": { "node": "^20.19.0 || >=22.12.0" @@ -147,6 +117,22 @@ "@astrojs/compiler-binding-win32-x64-msvc": "0.4.0" } }, + "node_modules/@astrojs/compiler-binding-android-arm64": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-android-arm64/-/compiler-binding-android-arm64-0.5.0.tgz", + "integrity": "sha512-wVviC/1KaBqGVF0DbTZ8UtAE3c8TN84CCe7w4ju3SGzo/ByWKn8HCqSU/+1wdltGCCSa30pjVk3H8DQUgnfhRQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, "node_modules/@astrojs/compiler-binding-darwin-arm64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-darwin-arm64/-/compiler-binding-darwin-arm64-0.4.0.tgz", @@ -307,6 +293,7 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/@astrojs/compiler-rs/-/compiler-rs-0.4.0.tgz", "integrity": "sha512-koVikeon1kreEy+/JzLQRy3vzHHQVOjycs4degg4vFufKApZOwMZvSSAEztYNhmcQVfNVsVZZI4cEge3cexAbQ==", + "devOptional": true, "license": "MIT", "dependencies": { "@astrojs/compiler-binding": "0.4.0" @@ -372,40 +359,10 @@ } } }, - "node_modules/@astrojs/markdown-remark": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-7.3.1.tgz", - "integrity": "sha512-QCjsjZQl0+Cgb91+T3Ip9hyUe1r5aLm4udi584rML9YO3syupbAYE+jWpAxYg+z4lFLNUugPrylFxZ+8qFTClg==", - "license": "MIT", - "dependencies": { - "@astrojs/internal-helpers": "0.11.0", - "@astrojs/prism": "4.0.2", - "@mdx-js/mdx": "^3.1.1", - "acorn": "^8.16.0", - "estree-util-visit": "^2.0.0", - "github-slugger": "^2.0.0", - "hast-util-from-html": "^2.0.3", - "hast-util-to-html": "^9.0.5", - "hast-util-to-text": "^4.0.2", - "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", - "source-map": "^0.7.6", - "unified": "^11.0.5", - "unist-util-remove-position": "^5.0.0", - "unist-util-visit": "^5.1.0", - "unist-util-visit-parents": "^6.0.2", - "vfile": "^6.0.3" - } - }, "node_modules/@astrojs/markdown-satteri": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@astrojs/markdown-satteri/-/markdown-satteri-0.4.1.tgz", - "integrity": "sha512-EniHbFNa6SQHDih7JnpPos3NWXO6hdt4raBcOosfGmlfc3gP9CI/sESA3VOf1PgJZ7SFfewlZW9Livn0JugEZg==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@astrojs/markdown-satteri/-/markdown-satteri-0.4.2.tgz", + "integrity": "sha512-g4QehXnB/MzxQWnSf17NciFInMqEJy9948p8cc7zGg/r7995m0Ln5PMr3Xlnj24iey1LchaoZ3SzTOa3D4P/3w==", "license": "MIT", "dependencies": { "@astrojs/internal-helpers": "0.11.0", @@ -415,13 +372,13 @@ } }, "node_modules/@astrojs/mdx": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@astrojs/mdx/-/mdx-8.0.1.tgz", - "integrity": "sha512-VKodp/f3+XE6L0950K+ZOAolY47vdt0R78Ao+L2RdJ1hfAdYffL7IEjc/MsoyuS7CPVvCsd5/I3RP0ZyAIewdQ==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@astrojs/mdx/-/mdx-8.0.2.tgz", + "integrity": "sha512-WedIVP2Bu8fXSzxb3ZYZ8xDrWWjf2SRKCneh52Llhoa+O3lcpHPhoZVP3FerlivUaH/0LJz2yVaCNvMdg0u8Bw==", "license": "MIT", "dependencies": { "@astrojs/internal-helpers": "0.11.0", - "@astrojs/markdown-satteri": "0.4.1", + "@astrojs/markdown-satteri": "0.4.2", "es-module-lexer": "^2.0.0" }, "engines": { @@ -430,7 +387,7 @@ "peerDependencies": { "@astrojs/markdown-remark": "^7.3.0", "@astrojs/markdown-satteri": "^0.4.0", - "astro": "^7.2.6" + "astro": "^7.2.10" }, "peerDependenciesMeta": { "@astrojs/markdown-remark": { @@ -450,18 +407,6 @@ "node": ">=22.12.0" } }, - "node_modules/@astrojs/rss": { - "version": "4.0.19", - "resolved": "https://registry.npmjs.org/@astrojs/rss/-/rss-4.0.19.tgz", - "integrity": "sha512-e+z5wYeYtffQdHQO8c2tkSd2JEBdAuRXJV4ZEU5IxkYeE6e39woDd7nw1PH1Kk2tEYNCYuKdylnnbhGmt61awA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-xml-parser": "^5.5.7", - "piccolore": "^0.1.3", - "zod": "^4.3.6" - } - }, "node_modules/@astrojs/sitemap": { "version": "3.7.4", "resolved": "https://registry.npmjs.org/@astrojs/sitemap/-/sitemap-3.7.4.tgz", @@ -472,51 +417,6 @@ "zod": "^4.3.6" } }, - "node_modules/@astrojs/starlight": { - "version": "0.42.0", - "resolved": "https://registry.npmjs.org/@astrojs/starlight/-/starlight-0.42.0.tgz", - "integrity": "sha512-EVsGnyGJ6rRNwGRZFYmGABo0qTQ55F7OSmfSL0VK+5lsqD+u6GWcB8tFqXETcUvP8kyn90W+QBLSL2aer9jNJQ==", - "license": "MIT", - "dependencies": { - "@astrojs/markdown-satteri": "^0.4.0", - "@astrojs/mdx": "^8.0.0", - "@astrojs/sitemap": "^3.7.3", - "@pagefind/default-ui": "^1.3.0", - "@types/hast": "^3.0.5", - "@types/js-yaml": "^4.0.9", - "@types/mdast": "^4.0.4", - "astro-expressive-code": "^0.44.0", - "bcp-47": "^2.1.0", - "hast-util-format": "^1.1.0", - "hast-util-select": "^6.0.4", - "hast-util-to-html": "^9.0.5", - "hast-util-to-string": "^3.0.1", - "hastscript": "^9.0.1", - "i18next": "^26.0.7", - "js-yaml": "^4.1.1", - "klona": "^2.0.6", - "magic-string": "^1.2.3", - "mdast-util-directive": "^3.1.0", - "mdast-util-to-markdown": "^2.1.2", - "mdast-util-to-string": "^4.0.0", - "pagefind": "^1.5.2", - "remark-directive": "^4.0.0", - "satteri": "^0.10.3", - "ultrahtml": "^1.6.0", - "unified": "^11.0.5", - "unist-util-visit": "^5.1.0", - "vfile": "^6.0.3" - }, - "peerDependencies": { - "@astrojs/markdown-remark": "^7.3.0", - "astro": "^7.2.10" - }, - "peerDependenciesMeta": { - "@astrojs/markdown-remark": { - "optional": true - } - } - }, "node_modules/@astrojs/telemetry": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.3.3.tgz", @@ -533,18 +433,18 @@ } }, "node_modules/@astrojs/vercel": { - "version": "11.0.10", - "resolved": "https://registry.npmjs.org/@astrojs/vercel/-/vercel-11.0.10.tgz", - "integrity": "sha512-QqqG24F0D2Ho3zgleio5KImcE335HxnUjtSJX92FGPbg7DKiTk3urno2aqmBGIpVOq3AKtx6r1r7DudOK3xwnA==", + "version": "11.0.11", + "resolved": "https://registry.npmjs.org/@astrojs/vercel/-/vercel-11.0.11.tgz", + "integrity": "sha512-OAh1CzR9eKlDBBpmp1VY95tFnAWDO46Ue7qxHjx0/2hdjHILvcZa6pnjjLOAOihuuR3CYpsZSPOscfJRKf8dOQ==", "license": "MIT", "dependencies": { "@astrojs/internal-helpers": "0.11.0", "@vercel/analytics": "^2.0.1", - "@vercel/functions": "^3.7.5", - "@vercel/nft": "^1.10.2", - "@vercel/routing-utils": "^6.4.0", + "@vercel/functions": "^3.9.8", + "@vercel/nft": "^1.11.0", + "@vercel/routing-utils": "^6.6.0", "esbuild": "^0.28.0", - "tinyglobby": "^0.2.15" + "tinyglobby": "^0.2.17" }, "peerDependencies": { "astro": "^7.0.0" @@ -817,15 +717,33 @@ "node": ">= 20.12.0" } }, - "node_modules/@ctrl/tinycolor": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-4.2.1.tgz", - "integrity": "sha512-Vh5uy9Y1JBMId6J1f68TMXnZrTCvNdo9Fu2k0d1YnJngR+sM5kWTKl441c/3TFs+cG0NWOjRWgQ/iaWhbYx+7A==", + "node_modules/@deramond.dev/astro": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@deramond.dev/astro/-/astro-0.4.0.tgz", + "integrity": "sha512-oJ2xwEm7PZBcfugCLwW8FFEktigRkuQvF5HCh6niQiavOirA1jjd2kTUkl3/qQ7LyoJDGs7tBfpmwLH48FIqIw==", "license": "MIT", + "dependencies": { + "@deramond.dev/tokens": "^0.1.0", + "@fontsource/chakra-petch": "^5.3.0", + "@fontsource/instrument-sans": "^5.3.0", + "@fontsource/roboto-mono": "^5.3.0", + "@resvg/resvg-js": "^2.6.2", + "pagefind": "^1.5.2", + "satori": "^0.33.5" + }, "engines": { - "node": ">=14" + "node": ">=22.12.0" + }, + "peerDependencies": { + "astro": "^7.3.0" } }, + "node_modules/@deramond.dev/tokens": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@deramond.dev/tokens/-/tokens-0.1.1.tgz", + "integrity": "sha512-QkGn2H7+5xWzkcBO2WG/rUeHBAojgmUdwMK3DGrP4f6JxrBQk2WOd+fJx7WA684PKenLXgIUDHH+dTfkk735Hw==", + "license": "MIT" + }, "node_modules/@edge-runtime/format": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@edge-runtime/format/-/format-2.2.1.tgz", @@ -940,7 +858,6 @@ "integrity": "sha512-zLpS5asjEb7lq8jYLq37N6XKaE41DIexlY1rF/z4/tIl3wo13Sqm28fRyfIsKZD+NZ8mM5RoKkpW/rBcuoSZSg==", "license": "MIT", "optional": true, - "peer": true, "dependencies": { "@emnapi/wasi-threads": "1.2.3", "tslib": "^2.4.0" @@ -962,7 +879,6 @@ "integrity": "sha512-ELEBe8PsLvvJ6QMr0zLt8ffvOHW/dc1m3CEzNMg7aJUv3bMaoDtw2TXyDAwkYBuroxxuHEwhRTLJSe5sya547g==", "license": "MIT", "optional": true, - "peer": true, "dependencies": { "tslib": "^2.4.0" } @@ -1383,51 +1299,6 @@ "node": ">=18" } }, - "node_modules/@expressive-code/core": { - "version": "0.44.2", - "resolved": "https://registry.npmjs.org/@expressive-code/core/-/core-0.44.2.tgz", - "integrity": "sha512-Yw5KonQCD1HoOO2P89y4wifqS9qrJcGVY0LkVMUsVZjhi++bhz4WwQ37inenKFNOEVo50P7cjoVsCdaVnUbq8w==", - "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.44.2", - "resolved": "https://registry.npmjs.org/@expressive-code/plugin-frames/-/plugin-frames-0.44.2.tgz", - "integrity": "sha512-gVLm6TQMNIRWIaM7o+mCtxkGNjLZY5/2faSTLoXeo9wv/Pkj/0QAtZyXPVPrRsPARqiipATNFmfvQFLJudxPHQ==", - "license": "MIT", - "dependencies": { - "@expressive-code/core": "^0.44.2" - } - }, - "node_modules/@expressive-code/plugin-shiki": { - "version": "0.44.2", - "resolved": "https://registry.npmjs.org/@expressive-code/plugin-shiki/-/plugin-shiki-0.44.2.tgz", - "integrity": "sha512-ebWIvCDzXvjyD8rH6T6DfytYJw1GoArLR4nusIAE4VxXrCQf3d+owytiv010KU/dUg+SRLZskDn0N+HaFXeuSg==", - "license": "MIT", - "dependencies": { - "@expressive-code/core": "^0.44.2", - "shiki": "^4.0.2" - } - }, - "node_modules/@expressive-code/plugin-text-markers": { - "version": "0.44.2", - "resolved": "https://registry.npmjs.org/@expressive-code/plugin-text-markers/-/plugin-text-markers-0.44.2.tgz", - "integrity": "sha512-SNI7EgUSiADqbqUzzMbj1ZeC/r2pa5eg3KyFOGAd3a7EsIA4qzjXQLp+ODWQtHVDKFCdGs4J3ovSJUqvKIK96g==", - "license": "MIT", - "dependencies": { - "@expressive-code/core": "^0.44.2" - } - }, "node_modules/@faker-js/faker": { "version": "10.6.0", "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-10.6.0.tgz", @@ -1455,6 +1326,33 @@ "node": ">=14" } }, + "node_modules/@fontsource/chakra-petch": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@fontsource/chakra-petch/-/chakra-petch-5.3.0.tgz", + "integrity": "sha512-QZvbM/q2R6n1pg2x+TJPftZmBNS+ADU37L4Z4L/6UJIz+JZ/SRaEf8usPFRiP7Ht28sIideMu/Bm1SnGlSrwNw==", + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, + "node_modules/@fontsource/instrument-sans": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@fontsource/instrument-sans/-/instrument-sans-5.3.0.tgz", + "integrity": "sha512-QwXc4hb/px3XvSPS2CPAOgey8nyrQFxgxrmXQQ+pN+P51hKdAcchxpg8rSbjANFfPu6VKXhDqkVDucXMZ9CM5g==", + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, + "node_modules/@fontsource/roboto-mono": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@fontsource/roboto-mono/-/roboto-mono-5.3.0.tgz", + "integrity": "sha512-yhwplHMHW9dCk+1pZuERfcJe+K3rosGVZEoK0XktkxRSqQ9qsipSwwiuW2/8Qmtp9lzu3Ixa/ie4BMH3i8CkZQ==", + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, "node_modules/@img/colour": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", @@ -2087,43 +1985,6 @@ "node": ">=18" } }, - "node_modules/@mdx-js/mdx": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.1.1.tgz", - "integrity": "sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdx": "^2.0.0", - "acorn": "^8.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/@napi-rs/keyring": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@napi-rs/keyring/-/keyring-1.2.0.tgz", @@ -2392,19 +2253,6 @@ "@emnapi/runtime": "^1.7.1 || ^2.0.0-alpha.4" } }, - "node_modules/@nodable/entities": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@nodable/entities/-/entities-3.0.0.tgz", - "integrity": "sha512-8L9xFeTYKhm49xfIypoe2W5wV1m/3Z58kT+7kR9A8OyFxcPduI4VmxaUMQyKYrRjUoLLSXv6EKKID5Tvj9cUVw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/nodable" - } - ], - "license": "MIT" - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -3301,12 +3149,6 @@ "darwin" ] }, - "node_modules/@pagefind/default-ui": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@pagefind/default-ui/-/default-ui-1.5.2.tgz", - "integrity": "sha512-pm1LMnQg8N2B3n2TnjKlhaFihpz6zTiA4HiGQ6/slKO/+8K9CAU5kcjdSSPgpuk1PMuuN4hxLipUIifnrkl3Sg==", - "license": "MIT" - }, "node_modules/@pagefind/freebsd-x64": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/@pagefind/freebsd-x64/-/freebsd-x64-1.5.2.tgz", @@ -3390,207 +3232,434 @@ "pnpm": "^10.0.0" } }, - "node_modules/@rolldown/binding-android-arm-eabi": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.8.tgz", - "integrity": "sha512-tN5aztYkKCte4i5SIrrz5yK/HMjEuCqCSCJa418jOV8tZ1cBY3YF2otxB1ktPxzsLA1BeTqwapK0bfjxNvHJVw==", + "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": "MIT", + "license": "MPL-2.0", "optional": true, "os": [ "android" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">= 10" } }, - "node_modules/@rolldown/binding-android-arm64": { - "version": "1.0.0-rc.1", - "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.1.tgz", - "integrity": "sha512-He6ZoCfv5D7dlRbrhNBkuMVIHd0GDnjJwbICE1OWpG7G3S2gmJ+eXkcNLJjzjNDpeI2aRy56ou39AJM9AD8YFA==", + "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" ], - "dev": true, - "license": "MIT", + "license": "MPL-2.0", "optional": true, "os": [ "android" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">= 10" } }, - "node_modules/@rolldown/binding-darwin-arm64": { - "version": "1.0.0-rc.1", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.1.tgz", - "integrity": "sha512-YzJdn08kSOXnj85ghHauH2iHpOJ6eSmstdRTLyaziDcUxe9SyQJgGyx/5jDIhDvtOcNvMm2Ju7m19+S/Rm1jFg==", + "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" ], - "dev": true, - "license": "MIT", + "license": "MPL-2.0", "optional": true, "os": [ "darwin" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">= 10" } }, - "node_modules/@rolldown/binding-darwin-x64": { - "version": "1.0.0-rc.1", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.1.tgz", - "integrity": "sha512-cIvAbqM+ZVV6lBSKSBtlNqH5iCiW933t1q8j0H66B3sjbe8AxIRetVqfGgcHcJtMzBIkIALlL9fcDrElWLJQcQ==", + "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" ], - "dev": true, - "license": "MIT", + "license": "MPL-2.0", "optional": true, "os": [ "darwin" ], "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-freebsd-x64": { - "version": "1.0.0-rc.1", - "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.1.tgz", - "integrity": "sha512-rVt+B1B/qmKwCl1XD02wKfgh3vQPXRXdB/TicV2w6g7RVAM1+cZcpigwhLarqiVCxDObFZ7UgXCxPC7tpDoRog==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">= 10" } }, - "node_modules/@rolldown/binding-linux-arm-gnueabihf": { - "version": "1.0.0-rc.1", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.1.tgz", - "integrity": "sha512-69YKwJJBOFprQa1GktPgbuBOfnn+EGxu8sBJ1TjPER+zhSpYeaU4N07uqmyBiksOLGXsMegymuecLobfz03h8Q==", + "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" ], - "dev": true, - "license": "MIT", + "license": "MPL-2.0", "optional": true, "os": [ "linux" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">= 10" } }, - "node_modules/@rolldown/binding-linux-arm64-gnu": { - "version": "1.0.0-rc.1", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.1.tgz", - "integrity": "sha512-9JDhHUf3WcLfnViFWm+TyorqUtnSAHaCzlSNmMOq824prVuuzDOK91K0Hl8DUcEb9M5x2O+d2/jmBMsetRIn3g==", + "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" ], - "dev": true, "libc": [ "glibc" ], - "license": "MIT", + "license": "MPL-2.0", "optional": true, "os": [ "linux" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">= 10" } }, - "node_modules/@rolldown/binding-linux-arm64-musl": { - "version": "1.0.0-rc.1", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.1.tgz", - "integrity": "sha512-UvApLEGholmxw/HIwmUnLq3CwdydbhaHHllvWiCTNbyGom7wTwOtz5OAQbAKZYyiEOeIXZNPkM7nA4Dtng7CLw==", + "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" ], - "dev": true, "libc": [ "musl" ], - "license": "MIT", + "license": "MPL-2.0", "optional": true, "os": [ "linux" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">= 10" } }, - "node_modules/@rolldown/binding-linux-ppc64-gnu": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.8.tgz", - "integrity": "sha512-FhiOziBDWPBjbcmRzfLyIJnaP7AVMFXT7YCXPjXxj7wKU3vx24RjrCNN/zjvVa+N2vVoHJwCoUBvsrN/DG3zIA==", + "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": [ - "ppc64" + "x64" ], "libc": [ "glibc" ], - "license": "MIT", + "license": "MPL-2.0", "optional": true, "os": [ "linux" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">= 10" } }, - "node_modules/@rolldown/binding-linux-s390x-gnu": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.8.tgz", - "integrity": "sha512-WnHfADMzOV2Y55wlx1hzzQnar/wDt/VdvWSD99r18Mz9ylNieIGOkRx3UV21h7m/eJvjySYJkO26VvGNFkwsIQ==", + "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": [ - "s390x" + "x64" ], "libc": [ - "glibc" + "musl" ], - "license": "MIT", + "license": "MPL-2.0", "optional": true, "os": [ "linux" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">= 10" } }, - "node_modules/@rolldown/binding-linux-x64-gnu": { - "version": "1.0.0-rc.1", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.1.tgz", - "integrity": "sha512-uVctNgZHiGnJx5Fij7wHLhgw4uyZBVi6mykeWKOqE7bVy9Hcxn0fM/IuqdMwk6hXlaf9fFShDTFz2+YejP+x0A==", + "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": [ - "x64" - ], - "dev": true, - "libc": [ - "glibc" + "arm64" ], - "license": "MIT", + "license": "MPL-2.0", "optional": true, "os": [ - "linux" + "win32" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">= 10" } }, - "node_modules/@rolldown/binding-linux-x64-musl": { - "version": "1.0.0-rc.1", + "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/@rolldown/binding-android-arm-eabi": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.8.tgz", + "integrity": "sha512-tN5aztYkKCte4i5SIrrz5yK/HMjEuCqCSCJa418jOV8tZ1cBY3YF2otxB1ktPxzsLA1BeTqwapK0bfjxNvHJVw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.1.tgz", + "integrity": "sha512-He6ZoCfv5D7dlRbrhNBkuMVIHd0GDnjJwbICE1OWpG7G3S2gmJ+eXkcNLJjzjNDpeI2aRy56ou39AJM9AD8YFA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.1.tgz", + "integrity": "sha512-YzJdn08kSOXnj85ghHauH2iHpOJ6eSmstdRTLyaziDcUxe9SyQJgGyx/5jDIhDvtOcNvMm2Ju7m19+S/Rm1jFg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.1.tgz", + "integrity": "sha512-cIvAbqM+ZVV6lBSKSBtlNqH5iCiW933t1q8j0H66B3sjbe8AxIRetVqfGgcHcJtMzBIkIALlL9fcDrElWLJQcQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.1.tgz", + "integrity": "sha512-rVt+B1B/qmKwCl1XD02wKfgh3vQPXRXdB/TicV2w6g7RVAM1+cZcpigwhLarqiVCxDObFZ7UgXCxPC7tpDoRog==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.1.tgz", + "integrity": "sha512-69YKwJJBOFprQa1GktPgbuBOfnn+EGxu8sBJ1TjPER+zhSpYeaU4N07uqmyBiksOLGXsMegymuecLobfz03h8Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.1.tgz", + "integrity": "sha512-9JDhHUf3WcLfnViFWm+TyorqUtnSAHaCzlSNmMOq824prVuuzDOK91K0Hl8DUcEb9M5x2O+d2/jmBMsetRIn3g==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.1.tgz", + "integrity": "sha512-UvApLEGholmxw/HIwmUnLq3CwdydbhaHHllvWiCTNbyGom7wTwOtz5OAQbAKZYyiEOeIXZNPkM7nA4Dtng7CLw==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.8.tgz", + "integrity": "sha512-FhiOziBDWPBjbcmRzfLyIJnaP7AVMFXT7YCXPjXxj7wKU3vx24RjrCNN/zjvVa+N2vVoHJwCoUBvsrN/DG3zIA==", + "cpu": [ + "ppc64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.8.tgz", + "integrity": "sha512-WnHfADMzOV2Y55wlx1hzzQnar/wDt/VdvWSD99r18Mz9ylNieIGOkRx3UV21h7m/eJvjySYJkO26VvGNFkwsIQ==", + "cpu": [ + "s390x" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.1.tgz", + "integrity": "sha512-uVctNgZHiGnJx5Fij7wHLhgw4uyZBVi6mykeWKOqE7bVy9Hcxn0fM/IuqdMwk6hXlaf9fFShDTFz2+YejP+x0A==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.0.0-rc.1", "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.1.tgz", "integrity": "sha512-T6Eg0xWwcxd/MzBcuv4Z37YVbUbJxy5cMNnbIt/Yr99wFwli30O4BPlY8hKeGyn6lWNtU0QioBS46lVzDN38bg==", "cpu": [ @@ -3812,6 +3881,22 @@ "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/@sinclair/typebox": { "version": "0.25.24", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz", @@ -3894,15 +3979,6 @@ "assertion-error": "^2.0.1" } }, - "node_modules/@types/debug": { - "version": "4.1.13", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.13.tgz", - "integrity": "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==", - "license": "MIT", - "dependencies": { - "@types/ms": "*" - } - }, "node_modules/@types/deep-eql": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", @@ -3934,12 +4010,6 @@ "@types/unist": "*" } }, - "node_modules/@types/js-yaml": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz", - "integrity": "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==", - "license": "MIT" - }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", @@ -3956,18 +4026,6 @@ "@types/unist": "*" } }, - "node_modules/@types/mdx": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.14.tgz", - "integrity": "sha512-T48PeuJtvLosNTPVhfnIp3i/n3a4g4Bad7YCq5k64D4u7NwDrAotikQ+5+sjtUvBmxCMlbo3dVL+C2dP0rWHzg==", - "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", @@ -3996,13 +4054,6 @@ "@types/node": "*" } }, - "node_modules/@types/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-iG0T6+nYJ9FAPmx9SsUlnwcq1ZVRuCXcVEvWnntoPlrOpwtSTKNDC9uVAxTsC3PUvJ+99n4RpAcNgBbHX3JSnQ==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/sax": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz", @@ -4787,6 +4838,7 @@ "version": "0.2.6", "resolved": "https://registry.npmjs.org/@vercel/cli-config/-/cli-config-0.2.6.tgz", "integrity": "sha512-2AsKCf6gE/Eniq09ARm1RK9rQMV5pcAHU7BFcR9MISO+4/RsjjkaYbQN6G85/xi9pYZ5CJNXvYn4TI6p1jKBcg==", + "dev": true, "license": "Apache-2.0", "dependencies": { "xdg-app-paths": "5", @@ -4797,6 +4849,7 @@ "version": "4.1.11", "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.11.tgz", "integrity": "sha512-WPsqwxITS2tzx1bzhIKsEs19ABD5vmCVa4xBo2tq/SrV4RNZtfws1EnCWQXM6yh8bD08a1idvkB5MZSBiZsjwg==", + "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" @@ -5119,12 +5172,12 @@ } }, "node_modules/@vercel/functions": { - "version": "3.9.7", - "resolved": "https://registry.npmjs.org/@vercel/functions/-/functions-3.9.7.tgz", - "integrity": "sha512-ICLzHbVZs10igkVMW/ovEMIXFa5ctpEjTa+VWRCOQbIqg9ALZcQcRjcfDuQZ/g2XtPS08EvHjzm538YJU9WsXA==", + "version": "3.9.9", + "resolved": "https://registry.npmjs.org/@vercel/functions/-/functions-3.9.9.tgz", + "integrity": "sha512-ocN/BNsIswReoyqfU1huilNyBM9tvY9kFXgYj0LlyPRATC1dt35gj2jN5hs9+Nag/CRyVQOX58L2FEhvL+0sSA==", "license": "Apache-2.0", "dependencies": { - "@vercel/oidc": "3.8.7" + "@vercel/oidc": "3.8.9" }, "engines": { "node": ">= 20" @@ -6526,12 +6579,12 @@ "license": "MIT" }, "node_modules/@vercel/oidc": { - "version": "3.8.7", - "resolved": "https://registry.npmjs.org/@vercel/oidc/-/oidc-3.8.7.tgz", - "integrity": "sha512-fRu59npOu+1vsV570tiLKskfuRyOJ1MqceAkXbTIfWPnM+c9ve1tSK81oj4umKKirymlGUss3V60Lm5I38rKDw==", + "version": "3.8.9", + "resolved": "https://registry.npmjs.org/@vercel/oidc/-/oidc-3.8.9.tgz", + "integrity": "sha512-TcbdH3YtGS2KU98T99dN4sbf+E4vbJZsJTRN97wKQ7QWQ0BR7U02QX3KN4+5GHxBtKTj1c5CnvTTitc2ZRad0A==", "license": "Apache-2.0", "dependencies": { - "@vercel/cli-config": "0.2.6", + "@vercel/cli-config": "0.3.0", "@vercel/cli-exec": "1.0.1", "jose": "^5.9.6" }, @@ -6539,11 +6592,30 @@ "node": ">= 20" } }, - "node_modules/@vercel/prepare-flags-definitions": { + "node_modules/@vercel/oidc/node_modules/@vercel/cli-config": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@vercel/prepare-flags-definitions/-/prepare-flags-definitions-0.3.0.tgz", - "integrity": "sha512-/0nuDFwYje0nqZnVKSd2VfJy2wOPQwbkas1qO1JQgtb0sLl+EeSCW4O9hrvq55pN50PNlAZ/APSeWHIAT9ZGHg==", - "dev": true, + "resolved": "https://registry.npmjs.org/@vercel/cli-config/-/cli-config-0.3.0.tgz", + "integrity": "sha512-kQLt5Pm8wKd7/imzDY9/9u0tf8OuRkAuXI+s7j057FSUrXapAmumJSKwDqnR4ZZqdWoUcNLlFAgVIAdiwcGTcw==", + "license": "Apache-2.0", + "dependencies": { + "xdg-app-paths": "5", + "zod": "4.1.11" + } + }, + "node_modules/@vercel/oidc/node_modules/zod": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.11.tgz", + "integrity": "sha512-WPsqwxITS2tzx1bzhIKsEs19ABD5vmCVa4xBo2tq/SrV4RNZtfws1EnCWQXM6yh8bD08a1idvkB5MZSBiZsjwg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/@vercel/prepare-flags-definitions": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@vercel/prepare-flags-definitions/-/prepare-flags-definitions-0.3.0.tgz", + "integrity": "sha512-/0nuDFwYje0nqZnVKSd2VfJy2wOPQwbkas1qO1JQgtb0sLl+EeSCW4O9hrvq55pN50PNlAZ/APSeWHIAT9ZGHg==", + "dev": true, "license": "MIT" }, "node_modules/@vercel/python": { @@ -6755,9 +6827,9 @@ "license": "MIT" }, "node_modules/@vercel/routing-utils": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@vercel/routing-utils/-/routing-utils-6.5.0.tgz", - "integrity": "sha512-2PXgATJyJYEaIuDEhljZ+sfOfJEsBl6OEzD+jHhy6NAb0k2mHdbTjcK3zTBNnYq0nebrXpq5ZGiwOxBFoUwB3A==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@vercel/routing-utils/-/routing-utils-6.6.0.tgz", + "integrity": "sha512-Z74zwk1ixcIsMN7Sp788SsZuOEqmJZ4N36WHusr6Vtck5eFAcjyD4oBpjDYRhkxovsh8t13s0L+uVbJYxUPa5w==", "license": "Apache-2.0", "dependencies": { "path-to-regexp": "6.1.0", @@ -7119,13 +7191,6 @@ "integrity": "sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ==", "license": "MIT" }, - "node_modules/@webgpu/types": { - "version": "0.1.21", - "resolved": "https://registry.npmjs.org/@webgpu/types/-/types-0.1.21.tgz", - "integrity": "sha512-pUrWq3V5PiSGFLeLxoGqReTZmiiXwY3jRkIG5sLLKjyqNxrwm/04b4nw7LSmGWJcKk59XOM/YRTUwOzo4MMlow==", - "dev": true, - "license": "BSD-3-Clause" - }, "node_modules/@workflow/serde": { "version": "4.1.0-beta.2", "resolved": "https://registry.npmjs.org/@workflow/serde/-/serde-4.1.0-beta.2.tgz", @@ -7163,15 +7228,6 @@ "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", @@ -7210,22 +7266,6 @@ "am-i-vibing": "dist/cli.mjs" } }, - "node_modules/ansi-escapes": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz", - "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==", - "dev": true, - "license": "MIT", - "dependencies": { - "environment": "^1.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/ansi-regex": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.3.0.tgz", @@ -7282,19 +7322,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/anynum": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/anynum/-/anynum-1.0.1.tgz", - "integrity": "sha512-N6//FLET/tXYNM/F6ABca1oH6fWB+KlTt909Le28WMDBk8oaT4vY17DCrwg2MvmuqUKt3Ni4N5dGJ/EoBgcO6A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT" - }, "node_modules/arg": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", @@ -7316,16 +7343,6 @@ "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/assertion-error": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", @@ -7336,24 +7353,15 @@ "node": ">=12" } }, - "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": "7.3.2", - "resolved": "https://registry.npmjs.org/astro/-/astro-7.3.2.tgz", - "integrity": "sha512-ysTcdpGP61XZpHoMRYC/CK19DQ94qkBvzXMtXEo0gEqPNkmOU/Tv++CtWmzaI4nF2Ck8RXFdiWvdlTWa2oOr9w==", + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/astro/-/astro-7.3.5.tgz", + "integrity": "sha512-1p/ernaq/RuESbM5NMjWzbO6SiebMGrGcYlGjMfBhzzgM+n/X7AUmVyw8BqW2QYCdivpsHwJBcD1fqmlTZjZHg==", "license": "MIT", "dependencies": { - "@astrojs/compiler-rs": "^0.4.0", + "@astrojs/compiler-rs": "^0.5.0", "@astrojs/internal-helpers": "0.11.0", - "@astrojs/markdown-satteri": "0.4.1", + "@astrojs/markdown-satteri": "0.4.2", "@astrojs/telemetry": "3.3.3", "@capsizecss/unpack": "^4.0.0", "@clack/prompts": "^1.1.0", @@ -7370,35 +7378,35 @@ "dset": "^3.1.4", "es-module-lexer": "^2.0.0", "esbuild": "^0.28.0", - "find-proc": "0.1.0", + "find-proc": "0.2.0", "flattie": "^1.1.1", "fontace": "~0.4.1", "get-tsconfig": "5.0.0-beta.4", "github-slugger": "^2.0.0", "html-escaper": "3.0.3", "http-cache-semantics": "^4.2.0", - "js-yaml": "^4.3.0", + "js-yaml": "^4.3.2", "jsonc-parser": "^3.3.1", "magic-string": "^1.0.0", "magicast": "^0.5.2", "mrmime": "^2.0.1", "neotraverse": "^1.0.1", - "obug": "^2.1.1", + "obug": "^3.0.0", "p-limit": "^7.3.0", "p-queue": "^9.1.0", "package-manager-detector": "^1.6.0", "piccolore": "^0.1.3", "picomatch": "^4.0.4", - "semver": "^7.7.4", "shiki": "^4.0.2", - "smol-toml": "^1.6.0", - "svgo": "^4.0.1", - "tinyclip": "^0.1.12", + "smol-toml": "^1.8.0", + "svgo": "^4.1.0", + "tinyclip": "^1.0.1", "tinyexec": "^1.0.4", "tinyglobby": "^0.2.15", "ultrahtml": "^1.6.0", "unifont": "~0.7.5", "unstorage": "^1.17.5", + "verkit": "^0.4.0", "vite": "^8.0.13", "vitefu": "^1.1.2", "xxhash-wasm": "^1.1.0", @@ -7429,32 +7437,208 @@ } } }, - "node_modules/astro-expressive-code": { - "version": "0.44.2", - "resolved": "https://registry.npmjs.org/astro-expressive-code/-/astro-expressive-code-0.44.2.tgz", - "integrity": "sha512-avop7nZcRwC7quvIxVguhwEZ9Tp6IoTzKUCLwP30Fb7+er+pWQgcysP01dcuzRIJo81kLGg30q/YAI2Yb1Sdzg==", + "node_modules/astro/node_modules/@astrojs/compiler-binding": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding/-/compiler-binding-0.5.0.tgz", + "integrity": "sha512-PxFTx3WoxQnbgUvvwmF6LRQwhHO77a4pewOtJvzxlrYtQ90tLgomLKvks/akrd2iix2ngGlOhxQonKNd8YoBHg==", + "license": "MIT", + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@astrojs/compiler-binding-android-arm64": "0.5.0", + "@astrojs/compiler-binding-darwin-arm64": "0.5.0", + "@astrojs/compiler-binding-darwin-x64": "0.5.0", + "@astrojs/compiler-binding-linux-arm64-gnu": "0.5.0", + "@astrojs/compiler-binding-linux-arm64-musl": "0.5.0", + "@astrojs/compiler-binding-linux-x64-gnu": "0.5.0", + "@astrojs/compiler-binding-linux-x64-musl": "0.5.0", + "@astrojs/compiler-binding-wasm32-wasi": "0.5.0", + "@astrojs/compiler-binding-win32-arm64-msvc": "0.5.0", + "@astrojs/compiler-binding-win32-x64-msvc": "0.5.0" + } + }, + "node_modules/astro/node_modules/@astrojs/compiler-binding-darwin-arm64": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-darwin-arm64/-/compiler-binding-darwin-arm64-0.5.0.tgz", + "integrity": "sha512-5NNIkaGeiztD9QQfhOy+nNrBCZVeHqVZPlfJVjTKq4yJiiSsxAhuBzmVlmK3BDhbSgUT8dai4JV5m6t4/BIQaw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/astro/node_modules/@astrojs/compiler-binding-darwin-x64": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-darwin-x64/-/compiler-binding-darwin-x64-0.5.0.tgz", + "integrity": "sha512-HU/waaccOQDXpvjoWA/9xzadNZIcWKblJoaw19lCxfVs6AHQYdZZOzZUQjY8HaLYGerTXjdADbra2XU+kXk9Og==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/astro/node_modules/@astrojs/compiler-binding-linux-arm64-gnu": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-linux-arm64-gnu/-/compiler-binding-linux-arm64-gnu-0.5.0.tgz", + "integrity": "sha512-a21petBJRi0mNBf+gkRZFoWdGH+VOo0zRQSzM4Nuez5RL5rFFkmbondMejkaRZzvE3LVYU2NVD5MGRgAs4V+nQ==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/astro/node_modules/@astrojs/compiler-binding-linux-arm64-musl": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-linux-arm64-musl/-/compiler-binding-linux-arm64-musl-0.5.0.tgz", + "integrity": "sha512-t5rmu23b/6e6v0bhPibCtwPdABXMRL+bUaJXdkJwTpkINp4zCgH6fNa5Z6+RgkgFSCpmg9uf1MtRIqx1gdmBaA==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/astro/node_modules/@astrojs/compiler-binding-linux-x64-gnu": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-linux-x64-gnu/-/compiler-binding-linux-x64-gnu-0.5.0.tgz", + "integrity": "sha512-JWtouuxSiDb2OKKFsxOwfqlpJuZHo1ExirlBGfDgoJVG5zeJWwcd2tU2w4UaJA4suT/tAFSLk/vFhM5fLjWV4A==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/astro/node_modules/@astrojs/compiler-binding-linux-x64-musl": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-linux-x64-musl/-/compiler-binding-linux-x64-musl-0.5.0.tgz", + "integrity": "sha512-LlaSO5v3UC6IxuTKXDViWV/fFHYhLKSO9Of118lNBXv/sjIWwziU+jjENxPgxfq/4oUeOu+613y6H93LBPNTOA==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/astro/node_modules/@astrojs/compiler-binding-wasm32-wasi": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-wasm32-wasi/-/compiler-binding-wasm32-wasi-0.5.0.tgz", + "integrity": "sha512-IP+Cp0m9yKg/AUT47077vHEaAOh/oT/iUZx1PDnV2GJzUxLSEotdQy5Hhv+ycvEadO/DbETSJfAWeV7kte4etQ==", + "cpu": [ + "wasm32" + ], "license": "MIT", + "optional": true, "dependencies": { - "rehype-expressive-code": "^0.44.2", - "url-extras": "^0.1.0" + "@emnapi/core": "1.11.3", + "@emnapi/runtime": "1.11.3", + "@napi-rs/wasm-runtime": "^1.2.4" }, - "peerDependencies": { - "astro": "^4.0.0-beta || ^5.0.0-beta || ^3.3.0 || ^6.0.0-beta || ^7.0.0" + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/astro-og-canvas": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/astro-og-canvas/-/astro-og-canvas-0.13.1.tgz", - "integrity": "sha512-YrsWTht6TwNWpP/GHZeQS9sUtxsyf5XeycFEekX0NMyljOVr93MfWcTkNw7GnFD862j4JdekiVGdn/xJ6+8C/g==", - "dev": true, + "node_modules/astro/node_modules/@astrojs/compiler-binding-win32-arm64-msvc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-win32-arm64-msvc/-/compiler-binding-win32-arm64-msvc-0.5.0.tgz", + "integrity": "sha512-v6plwy5GQBGvfv4QgiGhy/qkkQvYKW7Zh2vBArOnsGEDNHyUS43CWYwIQdw4ZdVVmLsFyhwTiueDZEP6zejddQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/astro/node_modules/@astrojs/compiler-binding-win32-x64-msvc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-win32-x64-msvc/-/compiler-binding-win32-x64-msvc-0.5.0.tgz", + "integrity": "sha512-SgM158cSCJ248UIXaCCW2WqSTjOoFlDv93ed/ATguJqYpZNNVMlOdcPlgNH7WYj/OYeD0rIQr7XyRAYhB7+G1A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/astro/node_modules/@astrojs/compiler-rs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-rs/-/compiler-rs-0.5.0.tgz", + "integrity": "sha512-2xIypn5R33FRWCXXXv0sfbDj8xcOvc2VmIbteytxMjOzP9LiGfvqaAFJjhdAjzhs6+ZKzYzbSE79rrPObYW5mg==", "license": "MIT", "dependencies": { - "canvaskit-wasm": "^0.42.0", - "deterministic-object-hash": "^2.0.2", - "entities": "^8.0.0" + "@astrojs/compiler-binding": "0.5.0" }, - "peerDependencies": { - "astro": "^5.0.0 || ^6.0.0 || ^7.0.0" + "engines": { + "node": ">=22.12.0" + } + }, + "node_modules/astro/node_modules/obug": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/obug/-/obug-3.0.0.tgz", + "integrity": "sha512-5vvB5+W7ePv+p3uqxi+RcW1XAzLW0/hxt3/4X4Lc4qHudzOhmBiBwOY6DRob4WnanAEGvNcLjF+KNOufrUoEQw==", + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], + "license": "MIT", + "engines": { + "node": ">=12.20.0" } }, "node_modules/async-listen": { @@ -7541,36 +7725,13 @@ } } }, - "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==", - "dev": true, - "license": "MIT" - }, - "node_modules/bcp-47": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bcp-47/-/bcp-47-2.1.1.tgz", - "integrity": "sha512-KLw+H/gd2p4zly1X7Yh/qziuyae5/w/QFnvTng9eZL5fvszL7Whl3MBoWF8yxL7ksUjBfOD+OxkytiqbBpG+Fw==", - "license": "MIT", - "dependencies": { - "is-alphabetical": "^2.0.0", - "is-alphanumerical": "^2.0.0", - "is-decimal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "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==", + "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", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "engines": { + "node": ">= 0.4" } }, "node_modules/bindings": { @@ -7641,14 +7802,13 @@ "node": ">= 0.8" } }, - "node_modules/canvaskit-wasm": { - "version": "0.42.0", - "resolved": "https://registry.npmjs.org/canvaskit-wasm/-/canvaskit-wasm-0.42.0.tgz", - "integrity": "sha512-N3ikotmzYwDVAcpQKDMptBT2P5pIEWS9ywdmrQA2awwaMF9cxKEFuxZZHv9ay1Em9kDjxDsPtwUzDm1uNj136g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@webgpu/types": "0.1.21" + "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": { @@ -7671,16 +7831,6 @@ "node": ">=18" } }, - "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", @@ -7701,16 +7851,6 @@ "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", @@ -7804,15 +7944,11 @@ "dev": true, "license": "MIT" }, - "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-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/comma-separated-tokens": { "version": "2.0.3", @@ -7924,6 +8060,36 @@ "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": "7.0.0", "resolved": "https://registry.npmjs.org/css-select/-/css-select-7.0.0.tgz", @@ -7962,21 +8128,16 @@ "url": "https://github.com/fb55/nth-check?sponsor=1" } }, - "node_modules/css-selector-parser": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/css-selector-parser/-/css-selector-parser-3.3.0.tgz", - "integrity": "sha512-Y2asgMGFqJKF4fq4xHDSlFYIkeVfRsm69lQC1q9kbEsH5XtnINTMrweLkjYMeaUgiXBy/uvKeO/a1JHTNnmB2g==", - "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.2.1", @@ -8005,18 +8166,6 @@ "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", @@ -8074,19 +8223,6 @@ } } }, - "node_modules/decode-named-character-reference": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz", - "integrity": "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==", - "license": "MIT", - "dependencies": { - "character-entities": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/define-lazy-prop": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", @@ -8137,19 +8273,6 @@ "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "base-64": "^1.0.0" - }, - "engines": { - "node": ">=18" - } - }, "node_modules/devalue": { "version": "5.9.2", "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.9.2.tgz", @@ -8178,19 +8301,6 @@ "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/dom-serializer": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-3.1.1.tgz", @@ -8360,6 +8470,15 @@ "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", "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/end-of-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.1.0.tgz", @@ -8383,57 +8502,12 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/environment": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", - "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/es-module-lexer": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.2.tgz", "integrity": "sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw==", "license": "MIT" }, - "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.28.2", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.2.tgz", @@ -8484,104 +8558,17 @@ "node": ">=6" } }, - "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/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.1", - "resolved": "https://registry.npmjs.org/estree-util-scope/-/estree-util-scope-1.0.1.tgz", - "integrity": "sha512-B0np3dcdxqILX5e9nEi5/Fr4K7gL4oYFVPV1zRa2e9wRCbQoZZNWOZFYyoInvXUPJXBXjss+QXlWLJChDEHDkA==", - "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/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/estree-walker": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, "license": "MIT", "dependencies": { "@types/estree": "^1.0.0" @@ -8653,18 +8640,6 @@ "node": ">=12.0.0" } }, - "node_modules/expressive-code": { - "version": "0.44.2", - "resolved": "https://registry.npmjs.org/expressive-code/-/expressive-code-0.44.2.tgz", - "integrity": "sha512-MLNghkvhyFgVW4oCD5DxBuYnnTXIf0PygzGmfT6OZeOOYWh/D4sH1j931biElkA5RG/J9wY/iuSMGAPF5vzHOg==", - "license": "MIT", - "dependencies": { - "@expressive-code/core": "^0.44.2", - "@expressive-code/plugin-frames": "^0.44.2", - "@expressive-code/plugin-shiki": "^0.44.2", - "@expressive-code/plugin-text-markers": "^0.44.2" - } - }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -8748,47 +8723,6 @@ "fast-string-width": "^3.0.2" } }, - "node_modules/fast-xml-builder": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/fast-xml-builder/-/fast-xml-builder-1.3.1.tgz", - "integrity": "sha512-pIM/1n3ntFXKYrUZwW7QCK0gAW7XY+wzj1YMIV3tLDvPj/V+zTGJK5e3/4WJfwj0qWw2ElNXiTixda/R+3YSug==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT", - "dependencies": { - "path-expression-matcher": "^1.6.2", - "xml-naming": "^0.3.0" - } - }, - "node_modules/fast-xml-parser": { - "version": "5.11.1", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.11.1.tgz", - "integrity": "sha512-TBw6K/fxoQGGjCmZDw9w/ZwP3uDcnTM4YH/g+PFRWr8sbe5idXtxNN6vITh4+1ruCZaho6uBFurElsA7F0zzgw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT", - "dependencies": { - "@nodable/entities": "^3.0.0", - "fast-xml-builder": "^1.2.0", - "is-unsafe": "^2.0.0", - "path-expression-matcher": "^1.6.2", - "strnum": "^2.4.2", - "xml-naming": "^0.3.0" - }, - "bin": { - "fxparser": "src/cli/cli.js" - } - }, "node_modules/fastq": { "version": "1.20.3", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.3.tgz", @@ -8826,6 +8760,12 @@ } } }, + "node_modules/fflate": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.7.3.tgz", + "integrity": "sha512-0Zz1jOzJWERhyhsimS54VTqOteCNwRtIlh8isdL0AXLo0g7xNTfTL7oWrkmCnPhZGocKIkWHBistBrrpoNH3aw==", + "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", @@ -8846,9 +8786,9 @@ } }, "node_modules/find-proc": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/find-proc/-/find-proc-0.1.0.tgz", - "integrity": "sha512-OaOpEYv2PiQ7SQ5LIrl+deA1XaWcxEjnpM6VuWXTUvn+teIXxeFTLDmu18/zDQpFmHN4o3oDBX+BT0AGwEhemg==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/find-proc/-/find-proc-0.2.0.tgz", + "integrity": "sha512-a6h2nTrgB3g5Wrn4au9Ux4kMk7IJtyF6oA8uGn+mk3weLZssUtc1cp6meHIzzuW2o1srrBAxzkmXLbqjRkgB6w==", "license": "MIT", "engines": { "node": "^20.19.0 || >=22.12.0" @@ -9080,382 +9020,58 @@ "uncrypto": "^0.1.3" } }, - "node_modules/has-flag": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-5.0.1.tgz", - "integrity": "sha512-CsNUt5x9LUdx6hnk/E2SZLsDyvfqANZSUq4+D3D8RzDJ2M+HDTIkF60ibS1vHaK55vzgiZw1bEPFG9yH7l33wA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/hast-util-embedded": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-embedded/-/hast-util-embedded-3.0.0.tgz", - "integrity": "sha512-naH8sld4Pe2ep03qqULEtvYr7EjrLK2QHY8KJR6RJkTUjPGObe1vnx585uzem2hGra+s1q08DZZpfgDVYRbaXA==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "hast-util-is-element": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } + "node_modules/harfbuzzjs": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/harfbuzzjs/-/harfbuzzjs-0.10.0.tgz", + "integrity": "sha512-SN8LVwCOzvTq3OPNd0+EAghgXugItz56wst567D1vs7LnnKGWprhi3EG58aVOBwhN8HEbQxL4I9NDWkcXUutRw==", + "license": "MIT" }, - "node_modules/hast-util-format": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hast-util-format/-/hast-util-format-1.1.0.tgz", - "integrity": "sha512-yY1UDz6bC9rDvCWHpx12aIBGRG7krurX0p0Fm6pT547LwDIZZiNr8a+IHDogorAdreULSEzP82Nlv5SZkHZcjA==", + "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", - "hast-util-embedded": "^3.0.0", - "hast-util-minify-whitespace": "^1.0.0", - "hast-util-phrasing": "^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-whitespace-sensitive-tag-names": "^3.0.0", - "unist-util-visit-parents": "^6.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-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==", + "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", - "devlop": "^1.1.0", - "hast-util-from-parse5": "^8.0.0", - "parse5": "^7.0.0", - "vfile": "^6.0.0", - "vfile-message": "^4.0.0" + "@types/hast": "^3.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==", + "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", - "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" + "engines": { + "node": ">=6" }, "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-is-body-ok-link": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/hast-util-is-body-ok-link/-/hast-util-is-body-ok-link-3.0.1.tgz", - "integrity": "sha512-0qpnzOBLztXHbHQenVB8uNuxTnm/QBFUOmdOSsEn7GnBtyY07+ENTWVFBAnXd/zEgd9/SUG3lRY7hSIBWRgGpQ==", - "license": "MIT", - "dependencies": { - "@types/hast": "^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-minify-whitespace": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hast-util-minify-whitespace/-/hast-util-minify-whitespace-1.0.1.tgz", - "integrity": "sha512-L96fPOVpnclQE0xzdWb/D12VT5FabA7SnZOUMtL1DbXmYiHJMXZvFkIZfiMmTCNJHUeO2K9UYNXoVyfz+QHuOw==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "hast-util-embedded": "^3.0.0", - "hast-util-is-element": "^3.0.0", - "hast-util-whitespace": "^3.0.0", - "unist-util-is": "^6.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-phrasing": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/hast-util-phrasing/-/hast-util-phrasing-3.0.1.tgz", - "integrity": "sha512-6h60VfI3uBQUxHqTyMymMZnEbNl1XmEGtOxxKYL7stY2o601COo62AWAYBQR9lZbYXYSBoxag8UpPRXK+9fqSQ==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "hast-util-embedded": "^3.0.0", - "hast-util-has-property": "^3.0.0", - "hast-util-is-body-ok-link": "^3.0.0", - "hast-util-is-element": "^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.1", - "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.1.tgz", - "integrity": "sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "devlop": "^1.0.0", - "property-information": "^7.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-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" + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/html-escaper": { @@ -9474,16 +9090,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/html-whitespace-sensitive-tag-names": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/html-whitespace-sensitive-tag-names/-/html-whitespace-sensitive-tag-names-3.0.1.tgz", - "integrity": "sha512-q+310vW8zmymYHALr1da4HyXUQ0zgiIwIicEfotYPWGN0OJVEN/58IJ3A4GBYcEq3LGAZqKb+ugvP0GNB9CEAA==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/htmlparser2": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.1.0.tgz", @@ -9634,34 +9240,6 @@ "node": ">=10.17.0" } }, - "node_modules/i18next": { - "version": "26.4.2", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-26.4.2.tgz", - "integrity": "sha512-RX+R0VLg13IbvRuJSxnqykUFS9vQZTl8wYpWPCIUDWVrSGjsQywB5Y+pjzrkboxGAuYfJZVH1InFTdgBdxq6ug==", - "funding": [ - { - "type": "individual", - "url": "https://www.locize.com/i18next" - }, - { - "type": "individual", - "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" - }, - { - "type": "individual", - "url": "https://www.locize.com" - } - ], - "license": "MIT", - "peerDependencies": { - "typescript": "^5 || ^6 || ^7" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -9682,12 +9260,6 @@ "dev": true, "license": "ISC" }, - "node_modules/inline-style-parser": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.7.tgz", - "integrity": "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==", - "license": "MIT" - }, "node_modules/iron-webcrypto": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz", @@ -9697,77 +9269,30 @@ "url": "https://github.com/sponsors/brc-dd" } }, - "node_modules/is-absolute-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-5.0.0.tgz", - "integrity": "sha512-sdJyNpBnQHuVnBunfzjAecOhZr2+A30ywfFvu3EnxtKLUWfwGgyWUmqHbGZiU6vTfHpCPm5GvLe4BAvlU9n8VQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=20" - }, - "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-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "devOptional": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "devOptional": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/is-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": "4.0.0", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-4.0.0.tgz", @@ -9806,16 +9331,6 @@ "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-node-process": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/is-node-process/-/is-node-process-1.2.0.tgz", @@ -9857,19 +9372,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-unsafe": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-unsafe/-/is-unsafe-2.0.2.tgz", - "integrity": "sha512-HgbIHPBH0KHHCcjLfGsCvhtPTVxjaAZlXjwdz7/GQC40SjSe4sfQsar8J5VFo8JOSbarkpV0OLG95bbaNd9aAQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT" - }, "node_modules/is-wsl": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", @@ -9996,15 +9498,6 @@ "node": ">=6" } }, - "node_modules/klona": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", - "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, "node_modules/lightningcss": { "version": "1.33.0", "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz", @@ -10266,6 +9759,16 @@ "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/linkedom": { "version": "0.18.13", "resolved": "https://registry.npmjs.org/linkedom/-/linkedom-0.18.13.tgz", @@ -10291,23 +9794,6 @@ } } }, - "node_modules/lite-youtube-embed": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/lite-youtube-embed/-/lite-youtube-embed-0.3.4.tgz", - "integrity": "sha512-aXgxpwK7AIW58GEbRzA8EYaY4LWvF3FKak6B9OtSJmuNyLhX2ouD4cMTxz/yR5HFInhknaYd2jLWOTRTvT8oAw==", - "dev": true, - "license": "Apache-2.0" - }, - "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.5.2", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.2.tgz", @@ -10327,1055 +9813,108 @@ "node": ">=12" } }, - "node_modules/magic-string": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-1.3.1.tgz", - "integrity": "sha512-rm91zr2Ou+XueDTohjQQjdQEcYM6zVi8KVUCG8Ec3vHwUEKrhSdCNyfuIywkA6hcCAteIn0ZOtAHA6eGpiX+Pg==", - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.6.0" - } - }, - "node_modules/magicast": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.5.tgz", - "integrity": "sha512-UicdXN8zQ3JHlxVq+28afMXPr1z7WNY6+7EJnzTdQWkTAlMLF5fNCCKxJHBQwGaNGR11581EiQmQzx73+MvszA==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.29.7", - "@babel/types": "^7.29.7", - "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-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/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.3", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz", - "integrity": "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==", - "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-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.1", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", - "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", - "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.27.1", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz", - "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==", - "license": "CC0-1.0" - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micro": { - "version": "9.3.5-canary.3", - "resolved": "https://registry.npmjs.org/micro/-/micro-9.3.5-canary.3.tgz", - "integrity": "sha512-viYIo9PefV+w9dvoIBh1gI44Mvx1BOk67B4BpC2QK77qdY0xZF0Q+vWLt/BII6cLkIc8rLmSIcJaB/OrXXKe1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "arg": "4.1.0", - "content-type": "1.0.4", - "raw-body": "2.4.1" - }, - "bin": { - "micro": "bin/micro.js" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/micro/node_modules/arg": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.0.tgz", - "integrity": "sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg==", - "dev": true, - "license": "MIT" - }, - "node_modules/micro/node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "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.2", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.2.tgz", - "integrity": "sha512-pRzm4kDTu0MjlmBkxmS9yYhw60nncfcEwu9NNdPFSQEFXS95ZKyIIyTSHu/o3ReBUrLKYEq+7YaXCRn/bPB4MA==", - "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-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" - } - ], + "node_modules/magic-string": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-1.3.1.tgz", + "integrity": "sha512-rm91zr2Ou+XueDTohjQQjdQEcYM6zVi8KVUCG8Ec3vHwUEKrhSdCNyfuIywkA6hcCAteIn0ZOtAHA6eGpiX+Pg==", "license": "MIT", "dependencies": { - "micromark-util-symbol": "^2.0.0" + "@jridgewell/sourcemap-codec": "^1.6.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" - } - ], + "node_modules/magicast": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.5.tgz", + "integrity": "sha512-UicdXN8zQ3JHlxVq+28afMXPr1z7WNY6+7EJnzTdQWkTAlMLF5fNCCKxJHBQwGaNGR11581EiQmQzx73+MvszA==", "license": "MIT", "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7", + "source-map-js": "^1.2.1" } }, - "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" - } - ], + "node_modules/mdast-util-to-hast": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", + "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", "license": "MIT", "dependencies": { - "micromark-util-chunked": "^2.0.0", - "micromark-util-types": "^2.0.0" + "@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/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" - } - ], + "node_modules/mdn-data": { + "version": "2.27.1", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz", + "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==", + "license": "CC0-1.0" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" + "engines": { + "node": ">= 8" } }, - "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" - } - ], + "node_modules/micro": { + "version": "9.3.5-canary.3", + "resolved": "https://registry.npmjs.org/micro/-/micro-9.3.5-canary.3.tgz", + "integrity": "sha512-viYIo9PefV+w9dvoIBh1gI44Mvx1BOk67B4BpC2QK77qdY0xZF0Q+vWLt/BII6cLkIc8rLmSIcJaB/OrXXKe1g==", + "dev": true, "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" + "arg": "4.1.0", + "content-type": "1.0.4", + "raw-body": "2.4.1" + }, + "bin": { + "micro": "bin/micro.js" + }, + "engines": { + "node": ">= 8.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" - } - ], + "node_modules/micro/node_modules/arg": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.0.tgz", + "integrity": "sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg==", + "dev": true, "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" - } - ], + "node_modules/micro/node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true, "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" + "engines": { + "node": ">= 0.6" } }, - "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==", + "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", @@ -11388,13 +9927,14 @@ ], "license": "MIT", "dependencies": { - "micromark-util-symbol": "^2.0.0" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/micromark-util-resolve-all": { + "node_modules/micromark-util-encode": { "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==", + "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", @@ -11405,10 +9945,7 @@ "url": "https://opencollective.com/unified" } ], - "license": "MIT", - "dependencies": { - "micromark-util-types": "^2.0.0" - } + "license": "MIT" }, "node_modules/micromark-util-sanitize-uri": { "version": "2.0.1", @@ -11431,28 +9968,6 @@ "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", @@ -11765,6 +10280,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/obug/-/obug-2.2.1.tgz", "integrity": "sha512-XrsrhT5sybtKI6wakr2SPOlGZWWYbUXZ7a0jT8/QOeAPau+1X/bSegNe5YR75oJmEZQbKningirmGOEJCIk61Q==", + "dev": true, "funding": [ "https://github.com/sponsors/sxzz", "https://opencollective.com/debug" @@ -12026,31 +10542,22 @@ "@pagefind/windows-x64": "1.5.2" } }, - "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==", + "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": { - "@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" + "color-name": "^1.1.4", + "hex-rgb": "^4.1.0" } }, - "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-github-url": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/parse-github-url/-/parse-github-url-1.0.4.tgz", @@ -12064,56 +10571,14 @@ "node": ">= 0.10" } }, - "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-ms": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", - "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/parse5": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", - "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", - "license": "MIT", - "dependencies": { - "entities": "^6.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/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", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", + "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "node": ">=6" } }, "node_modules/path-browserify": { @@ -12122,22 +10587,6 @@ "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", "license": "MIT" }, - "node_modules/path-expression-matcher": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/path-expression-matcher/-/path-expression-matcher-1.6.2.tgz", - "integrity": "sha512-enSlaiat05iasnzmgNxRj8reFdj3puY2QpNgP1aPIaVfT6nn9ICuPoFlKHk8EN22HcwewshO+mN2DGbkCEOtqQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } - }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -12235,43 +10684,11 @@ "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.4", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.4.tgz", - "integrity": "sha512-bIoJLOmjCO1S9XdY/DcnR5hJxvrDir1PbGChrzXG3vw0/FOliy/fA3dmdhQ441kah4gKv+TwckGzex6wNS5cnQ==", - "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.9.6", @@ -12434,80 +10851,6 @@ "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==", - "dev": true, - "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.1", - "resolved": "https://registry.npmjs.org/recma-jsx/-/recma-jsx-1.0.1.tgz", - "integrity": "sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==", - "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" - }, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "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", @@ -12532,171 +10875,6 @@ "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==", "license": "MIT" }, - "node_modules/rehype-expressive-code": { - "version": "0.44.2", - "resolved": "https://registry.npmjs.org/rehype-expressive-code/-/rehype-expressive-code-0.44.2.tgz", - "integrity": "sha512-jvjQpsfWKBquDrEl5YQA3CJybRRIuDOYsui1BJTs5oKDUK8pPkJSSxY8FjxNlIFIdtgrTjC1zuahuY4Cc1j9SQ==", - "license": "MIT", - "dependencies": { - "expressive-code": "^0.44.2" - } - }, - "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/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-mdx": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.1.1.tgz", - "integrity": "sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==", - "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.3", - "resolved": "https://registry.npmjs.org/remark-smartypants/-/remark-smartypants-3.0.3.tgz", - "integrity": "sha512-gCaK+ndZ0hYezlqFegHFCVh2CQemsi0Npdh1qVM9bxlUFknjkbP6VmojWhddOCrbK0PbbacmYLWfTULRiT1eWA==", - "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/request-light": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/request-light/-/request-light-0.7.0.tgz", @@ -12740,37 +10918,6 @@ "node": ">=10" } }, - "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", @@ -12786,21 +10933,6 @@ "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/retry": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", @@ -12933,6 +11065,30 @@ "sass-formatter": "dist/cli.js" } }, + "node_modules/satori": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/satori/-/satori-0.33.5.tgz", + "integrity": "sha512-PNW6ktrQ8SM6kk7u4aOuTkkUewkzyTOrj+QeEzXSsnNMAdff4ire9CAqIz8+4C3rCiBtK8QTELv52AZEd1PbRw==", + "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", + "fflate": "0.7.3", + "harfbuzzjs": "0.10.0", + "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/satteri": { "version": "0.10.5", "resolved": "https://registry.npmjs.org/satteri/-/satteri-0.10.5.tgz", @@ -12956,36 +11112,13 @@ "@bruits/satteri-win32-x64-msvc": "0.10.5" } }, - "node_modules/sax": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.1.tgz", - "integrity": "sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==", - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=11.0.0" - } - }, - "node_modules/schema-dts": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/schema-dts/-/schema-dts-2.0.0.tgz", - "integrity": "sha512-t7NoCy3Rn5GHGx6p7s1qIYK/AeIb8ZxJNR9WUNFkwMv2CiiGZBmqqYWc2FlZVm5ZbiHMY4OvBWhj7QtyrFO2Jw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "schema-dts-lib": "^1.0.0" - } - }, - "node_modules/schema-dts-lib": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-dts-lib/-/schema-dts-lib-1.0.0.tgz", - "integrity": "sha512-9MEO5vpQH9JdBioUupqluzxSYxPLjhmqRUudk15adUl/ypnRsM2/M1kN3AmVJQeG7nZqcL68H8JlGqQQT6vy9A==", - "dev": true, - "license": "Apache-2.0", + "node_modules/sax": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.1.tgz", + "integrity": "sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==", + "license": "BlueOak-1.0.0", "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "typescript": ">=4.9.5" + "node": ">=11.0.0" } }, "node_modules/semver": { @@ -13136,9 +11269,9 @@ } }, "node_modules/sitemap/node_modules/@types/node": { - "version": "24.13.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.13.4.tgz", - "integrity": "sha512-YJ7EqCstVTzIr0fMr7qul/977en+pQHrfmuKIo6Zr9i75Be21dr3MovcfvGtyvi2HAUrRerWps5sMO9I7WaxDw==", + "version": "24.13.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.13.6.tgz", + "integrity": "sha512-SGrw/h3KPFshy3OE6ZL53LMBG5vGQQ8/gIpiqz/kRZhPJ7HgwCEs8LBuNtWLa8dvGZVpSF7+Bf+c11HUrCb/yg==", "license": "MIT", "dependencies": { "undici-types": "~7.18.0" @@ -13162,15 +11295,6 @@ "url": "https://github.com/sponsors/cyyynthia" } }, - "node_modules/source-map": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", - "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", - "license": "BSD-3-Clause", - "engines": { - "node": ">= 12" - } - }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -13210,157 +11334,6 @@ "dev": true, "license": "MIT" }, - "node_modules/starlight-blog": { - "version": "0.29.0", - "resolved": "https://registry.npmjs.org/starlight-blog/-/starlight-blog-0.29.0.tgz", - "integrity": "sha512-Pdv5I84ux0109Zt23TbpCfuRZ8ioWvjmwVnmeYD2h0OH2bgVzo7cKsblzMolkaGc1QDnSX8985xaM1QJvcOhqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@astrojs/markdown-remark": "^7.2.0", - "@astrojs/mdx": "^7.0.0", - "@astrojs/rss": "^4.0.18", - "github-slugger": "^2.0.0", - "hast-util-from-html": "^2.0.3", - "hast-util-to-html": "^9.0.5", - "hast-util-to-string": "^3.0.1", - "mdast-util-mdx-expression": "^2.0.1", - "satteri": "^0.9.3", - "schema-dts": "^2.0.0", - "unist-util-is": "^6.0.1", - "unist-util-remove": "^4.0.0", - "unist-util-visit": "^5.1.0" - }, - "engines": { - "node": ">=22.12.0" - }, - "peerDependencies": { - "@astrojs/starlight": ">=0.41.0" - } - }, - "node_modules/starlight-blog/node_modules/@astrojs/internal-helpers": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.10.4.tgz", - "integrity": "sha512-nozZSy/mKYLqe4YrqbKtdOszedAfXYCtw3wZ0d+CAjz4GqQ4L9rl1ltIL5BlgwmYVinJg/RZ0MgGuWOdlyRZlA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.4", - "@types/mdast": "^4.0.4", - "js-yaml": "^4.3.0", - "picomatch": "^4.0.4", - "retext-smartypants": "^6.2.0", - "shiki": "^4.0.2", - "smol-toml": "^1.6.0", - "unified": "^11.0.5" - } - }, - "node_modules/starlight-blog/node_modules/@astrojs/markdown-remark": { - "version": "7.2.4", - "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-7.2.4.tgz", - "integrity": "sha512-MvspGMynWKAjTe4/lTUdmBPHIFKNVLTCF6UlyWGogTGzNrTvjD+D4n48k7h8swxsEPKHK2TwxkZO7uoaCv1Pow==", - "dev": true, - "license": "MIT", - "dependencies": { - "@astrojs/internal-helpers": "0.10.4", - "@astrojs/prism": "4.0.2", - "github-slugger": "^2.0.0", - "hast-util-from-html": "^2.0.3", - "hast-util-to-text": "^4.0.2", - "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", - "unified": "^11.0.5", - "unist-util-remove-position": "^5.0.0", - "unist-util-visit": "^5.1.0", - "unist-util-visit-parents": "^6.0.2", - "vfile": "^6.0.3" - } - }, - "node_modules/starlight-blog/node_modules/@astrojs/mdx": { - "version": "7.0.8", - "resolved": "https://registry.npmjs.org/@astrojs/mdx/-/mdx-7.0.8.tgz", - "integrity": "sha512-RNuwq2ccTSi7NX9YqlR0noaWoVdOrZuJvdfWXotAzdhMVB0b0zEMLnNU+xar7le0GwTMlTObD/QAu8jeHA/3nA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@astrojs/internal-helpers": "0.10.4", - "@astrojs/markdown-remark": "7.2.4", - "@mdx-js/mdx": "^3.1.1", - "acorn": "^8.16.0", - "es-module-lexer": "^2.0.0", - "estree-util-visit": "^2.0.0", - "hast-util-to-html": "^9.0.5", - "piccolore": "^0.1.3", - "rehype-raw": "^7.0.0", - "remark-gfm": "^4.0.1", - "remark-smartypants": "^3.0.2", - "source-map": "^0.7.6", - "unist-util-visit": "^5.1.0", - "vfile": "^6.0.3" - }, - "engines": { - "node": ">=22.12.0" - }, - "peerDependencies": { - "@astrojs/markdown-satteri": "^0.3.1", - "astro": "^7.0.0" - }, - "peerDependenciesMeta": { - "@astrojs/markdown-satteri": { - "optional": true - } - } - }, - "node_modules/starlight-links-validator": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/starlight-links-validator/-/starlight-links-validator-0.26.0.tgz", - "integrity": "sha512-b3JlzP5bczSDMQp10ST/Gldd6RNzcwpWfTrszzGPcqnuav2W31+MjyX92IXH+VCcG2pG9G1qyDcEcNuMRYi2ig==", - "dev": true, - "license": "MIT", - "dependencies": { - "@astrojs/markdown-satteri": "^0.4.0", - "@types/picomatch": "^4.0.2", - "github-slugger": "^2.0.0", - "hast-util-from-html": "^2.0.3", - "is-absolute-url": "^5.0.0", - "mdast-util-mdx-jsx": "^3.2.0", - "mdast-util-to-hast": "^13.2.1", - "picomatch": "^4.0.3", - "satteri": "^0.10.3", - "terminal-link": "^5.0.0", - "unist-util-visit": "^5.1.0", - "yaml": "^2.8.3" - }, - "engines": { - "node": ">=22.12.0" - }, - "peerDependencies": { - "@astrojs/starlight": ">=0.42.0", - "astro": ">=7.2.10" - } - }, - "node_modules/starlight-showcases": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/starlight-showcases/-/starlight-showcases-0.3.2.tgz", - "integrity": "sha512-PX+CDIaOkgmM+KxiD+OEF0NVppbbQia7iMZ1JeHnx0yyDkZCY6U6vtzoxpklhHU/JGHrmV6qj1qxzWS74SolqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@astro-community/astro-embed-twitter": "^0.5.11", - "@astro-community/astro-embed-youtube": "^0.5.10" - }, - "engines": { - "node": ">=22" - }, - "peerDependencies": { - "@astrojs/starlight": ">=0.30.0" - } - }, "node_modules/stat-mode": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-0.3.0.tgz", @@ -13436,6 +11409,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "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", @@ -13474,40 +11453,6 @@ "node": ">=6" } }, - "node_modules/strnum": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.4.2.tgz", - "integrity": "sha512-rDG3Ah4TV0k1hWvLSzkZtMmLN9+eS+h3knq4MP6A42Y3Yh5qGNnOUs1jJkoSr8FG5dsL28c7KgkIBzSEykqtuw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT", - "dependencies": { - "anynum": "^1.0.1" - } - }, - "node_modules/style-to-js": { - "version": "1.1.21", - "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.21.tgz", - "integrity": "sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==", - "license": "MIT", - "dependencies": { - "style-to-object": "1.0.14" - } - }, - "node_modules/style-to-object": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.14.tgz", - "integrity": "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==", - "license": "MIT", - "dependencies": { - "inline-style-parser": "0.2.7" - } - }, "node_modules/suf-log": { "version": "2.5.3", "resolved": "https://registry.npmjs.org/suf-log/-/suf-log-2.5.3.tgz", @@ -13518,36 +11463,6 @@ "s.color": "0.0.15" } }, - "node_modules/supports-color": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.2.2.tgz", - "integrity": "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/supports-hyperlinks": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-4.5.0.tgz", - "integrity": "sha512-ZW2OvfeCXrNTbLakPUzjQG922EeGCOteFSVoek5DKStTh898wf7zgtuFlzQN8HfZCxC3Eh02yJVrRW51hADf+w==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^5.0.1", - "supports-color": "^10.2.2" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/chalk/supports-hyperlinks?sponsor=1" - } - }, "node_modules/svgo": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.1.0.tgz", @@ -13702,23 +11617,6 @@ "streamx": "^2.15.0" } }, - "node_modules/terminal-link": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-5.0.0.tgz", - "integrity": "sha512-qFAy10MTMwjzjU8U16YS4YoZD+NQLHzLssFMNqgravjbvIPNiqkGFR4yjhJfmY9R5OFU7+yHxc6y+uGHkKwLRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-escapes": "^7.0.0", - "supports-hyperlinks": "^4.1.0" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/text-decoder": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.7.tgz", @@ -13775,9 +11673,9 @@ } }, "node_modules/tinyclip": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/tinyclip/-/tinyclip-0.1.15.tgz", - "integrity": "sha512-uo33abH+Ays0xYaDysoBt494Hb3hsEczMpcC0MwFl773pazORx4fmvKhclhR1wonUbB6vvpRsvVMwnhfqeMc+A==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tinyclip/-/tinyclip-1.0.3.tgz", + "integrity": "sha512-nTv2raKFMzGG6JJp0lpNDsRPdfFE6UHlu2rVEjXo8vkx1ZS3LW2CVXqIaLu8xZlu+6tbFs9V58Qc/Jmk/Ii7wA==", "license": "MIT", "engines": { "node": "^16.14.0 || >= 17.3.0" @@ -13998,6 +11896,16 @@ "integrity": "sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg==", "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", @@ -14037,20 +11945,6 @@ "node": ">=22.19.0" } }, - "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.1", "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", @@ -14064,20 +11958,6 @@ "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", @@ -14091,49 +11971,6 @@ "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": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-4.0.0.tgz", - "integrity": "sha512-b4gokeGId57UVRX/eVKej5gXqGlc9+trkORhFJpu9raqZkZhU0zm8Doi05+HaiBsMEIJowL+2WtQ5ItjsngPXg==", - "dev": true, - "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-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", @@ -14162,19 +11999,6 @@ "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", @@ -14350,24 +12174,6 @@ "punycode": "^2.1.0" } }, - "node_modules/url-extras": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/url-extras/-/url-extras-0.1.0.tgz", - "integrity": "sha512-8tzwTeXFPuX/5PHuCDQE5Dd9Ts4rwoq2t9aIT+HS4iAVpmj5l4Ao7Q+BuuFjvWRqrLswBhQDk8O96ZicgCqQqw==", - "license": "MIT", - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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/uuid": { "version": "14.0.1", "resolved": "https://registry.npmjs.org/uuid/-/uuid-14.0.1.tgz", @@ -14987,28 +12793,26 @@ "url": "https://github.com/sponsors/colinhacks" } }, - "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==", + "node_modules/verkit": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/verkit/-/verkit-0.4.1.tgz", + "integrity": "sha512-mMVzj0TXExtVdlDEq+Mzp0eyOuyznNpFobNM3uAqe3HVm/Ps2c+u17BligMkZjZCA6EiXpoon8iRTer3iu40SQ==", "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "vfile-message": "^4.0.0" + "engines": { + "node": ">=18.12.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sxzz" } }, - "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==", + "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": "^6.0.0" + "vfile-message": "^4.0.0" }, "funding": { "type": "opencollective", @@ -15732,16 +13536,6 @@ "integrity": "sha512-m2gXo3bn0G1kT9InzMf07fTbqMbGtyckj3bH5ktLO+1Ssv+yiATZ4dhwaQv9UZWxJh6E9IFGnQyjgWVDWVBDrg==", "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/web-vitals": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-0.2.4.tgz", @@ -15885,22 +13679,6 @@ "node": ">= 6.0" } }, - "node_modules/xml-naming": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/xml-naming/-/xml-naming-0.3.0.tgz", - "integrity": "sha512-ghig2TBE/H11aOVgmahA3MhimvkBr6JIYknH/Dhdk10nXwdbIqBJsbfMxpvFPG8bAw77gN29aQWvKpmVoPlvPQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT", - "engines": { - "node": ">=16.0.0" - } - }, "node_modules/xxhash-wasm": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.1.0.tgz", @@ -16105,6 +13883,12 @@ "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/zod": { "version": "4.6.5", "resolved": "https://registry.npmjs.org/zod/-/zod-4.6.5.tgz", diff --git a/package.json b/package.json index 23e7fb99..8a74f68a 100644 --- a/package.json +++ b/package.json @@ -17,11 +17,12 @@ }, "dependencies": { "@astrojs/check": "^0.9.10", - "@astrojs/markdown-remark": "^7.3.0", - "@astrojs/starlight": "^0.42.0", - "@astrojs/vercel": "^11.0.10", + "@astrojs/mdx": "^8.0.2", + "@astrojs/sitemap": "^3.7.4", + "@astrojs/vercel": "^11.0.11", + "@deramond.dev/astro": "^0.4.0", "@vercel/analytics": "^2.0.1", - "astro": "^7.2.9" + "astro": "^7.3.5" }, "devDependencies": { "@actions/core": "^3.0.1", @@ -29,17 +30,12 @@ "@octokit/graphql": "^9.0.5", "@octokit/graphql-schema": "^15.26.1", "@types/parse-github-url": "^1.0.3", - "astro-og-canvas": "^0.13.1", "dotenv": "^17.4.2", "gemoji": "^8.1.0", "linkedom": "^0.18.13", "parse-github-url": "^1.0.4", "prettier": "^3.9.6", "prettier-plugin-astro": "^1.0.0", - "reading-time": "^1.5.0", - "starlight-blog": "^0.29.0", - "starlight-links-validator": "^0.26.0", - "starlight-showcases": "^0.3.2", "tsx": "^4.23.13", "vercel": "^59.11.7", "vitest": "^5.0.0" diff --git a/public/android-chrome-192x192.png b/public/android-chrome-192x192.png deleted file mode 100644 index eab108be..00000000 Binary files a/public/android-chrome-192x192.png and /dev/null differ diff --git a/public/android-chrome-256x256.png b/public/android-chrome-256x256.png deleted file mode 100644 index 1a0e5c39..00000000 Binary files a/public/android-chrome-256x256.png and /dev/null differ diff --git a/public/android-chrome-512x512.png b/public/android-chrome-512x512.png deleted file mode 100644 index 855fae1a..00000000 Binary files a/public/android-chrome-512x512.png and /dev/null differ diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png deleted file mode 100644 index b1fefbcc..00000000 Binary files a/public/apple-touch-icon.png and /dev/null differ diff --git a/public/browserconfig.xml b/public/browserconfig.xml deleted file mode 100644 index 89504e7e..00000000 --- a/public/browserconfig.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - #4a01fe - - - diff --git a/public/covers/add-funding-links-to-your-packagejson.svg b/public/covers/add-funding-links-to-your-packagejson.svg new file mode 100644 index 00000000..e171e02b --- /dev/null +++ b/public/covers/add-funding-links-to-your-packagejson.svg @@ -0,0 +1 @@ +Article cover artwork diff --git a/public/covers/bluesky-starter-pack.svg b/public/covers/bluesky-starter-pack.svg new file mode 100644 index 00000000..370ddd8e --- /dev/null +++ b/public/covers/bluesky-starter-pack.svg @@ -0,0 +1 @@ +Article cover artwork diff --git a/public/covers/can-i-take-this-issue.svg b/public/covers/can-i-take-this-issue.svg new file mode 100644 index 00000000..ca9397ed --- /dev/null +++ b/public/covers/can-i-take-this-issue.svg @@ -0,0 +1 @@ +Article cover artwork diff --git a/public/covers/coding-linkedin-carousels.svg b/public/covers/coding-linkedin-carousels.svg new file mode 100644 index 00000000..4bd7fe23 --- /dev/null +++ b/public/covers/coding-linkedin-carousels.svg @@ -0,0 +1 @@ +Article cover artwork diff --git a/public/covers/contrib-rocks.svg b/public/covers/contrib-rocks.svg new file mode 100644 index 00000000..345a5825 --- /dev/null +++ b/public/covers/contrib-rocks.svg @@ -0,0 +1 @@ +Article cover artwork diff --git a/public/covers/display-your-sponsors-in-your-github-readmes.svg b/public/covers/display-your-sponsors-in-your-github-readmes.svg new file mode 100644 index 00000000..8302a267 --- /dev/null +++ b/public/covers/display-your-sponsors-in-your-github-readmes.svg @@ -0,0 +1 @@ +Article cover artwork diff --git a/public/covers/get-real-time-github-stars-notifications-in-discord.svg b/public/covers/get-real-time-github-stars-notifications-in-discord.svg new file mode 100644 index 00000000..6148351c --- /dev/null +++ b/public/covers/get-real-time-github-stars-notifications-in-discord.svg @@ -0,0 +1 @@ +Article cover artwork diff --git a/public/covers/github-ghost-user.svg b/public/covers/github-ghost-user.svg new file mode 100644 index 00000000..e475edae --- /dev/null +++ b/public/covers/github-ghost-user.svg @@ -0,0 +1 @@ +Article cover artwork diff --git a/public/covers/github-marketplace-social-preview-for-your-github-actions.svg b/public/covers/github-marketplace-social-preview-for-your-github-actions.svg new file mode 100644 index 00000000..eb6303ca --- /dev/null +++ b/public/covers/github-marketplace-social-preview-for-your-github-actions.svg @@ -0,0 +1 @@ +Article cover artwork diff --git a/public/covers/how-to-create-a-code-of-conduct-for-an-open-source-project.svg b/public/covers/how-to-create-a-code-of-conduct-for-an-open-source-project.svg new file mode 100644 index 00000000..add69e16 --- /dev/null +++ b/public/covers/how-to-create-a-code-of-conduct-for-an-open-source-project.svg @@ -0,0 +1 @@ +Article cover artwork diff --git a/public/covers/repobeats.svg b/public/covers/repobeats.svg new file mode 100644 index 00000000..ef8bd3f8 --- /dev/null +++ b/public/covers/repobeats.svg @@ -0,0 +1 @@ +Article cover artwork diff --git a/public/covers/running-a-local-ai-inside-obsidian-with-ollama.svg b/public/covers/running-a-local-ai-inside-obsidian-with-ollama.svg new file mode 100644 index 00000000..eaeb6496 --- /dev/null +++ b/public/covers/running-a-local-ai-inside-obsidian-with-ollama.svg @@ -0,0 +1 @@ +Article cover artwork diff --git a/public/favicon-16x16.png b/public/favicon-16x16.png deleted file mode 100644 index 75412fcc..00000000 Binary files a/public/favicon-16x16.png and /dev/null differ diff --git a/public/favicon-32x32.png b/public/favicon-32x32.png deleted file mode 100644 index eae92efa..00000000 Binary files a/public/favicon-32x32.png and /dev/null differ diff --git a/public/favicon.ico b/public/favicon.ico deleted file mode 100644 index 2b991dd8..00000000 Binary files a/public/favicon.ico and /dev/null differ diff --git a/public/mstile-150x150.png b/public/mstile-150x150.png deleted file mode 100644 index 8accd692..00000000 Binary files a/public/mstile-150x150.png and /dev/null differ diff --git a/public/safari-pinned-tab.svg b/public/safari-pinned-tab.svg deleted file mode 100644 index 0a91af8a..00000000 --- a/public/safari-pinned-tab.svg +++ /dev/null @@ -1,31 +0,0 @@ - - - - -Created by potrace 1.14, written by Peter Selinger 2001-2017 - - - - - - - - diff --git a/public/site.webmanifest b/public/site.webmanifest deleted file mode 100644 index b4eea308..00000000 --- a/public/site.webmanifest +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "", - "short_name": "", - "icons": [ - { - "src": "/android-chrome-192x192.png", - "sizes": "192x192", - "type": "image/png" - }, - { - "src": "/android-chrome-256x256.png", - "sizes": "256x256", - "type": "image/png" - } - ], - "theme_color": "#ffffff", - "background_color": "#ffffff", - "display": "standalone" -} diff --git a/src/assets/logo-dark.svg b/src/assets/logo-dark.svg deleted file mode 100644 index 835771e7..00000000 --- a/src/assets/logo-dark.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/src/assets/logo.svg b/src/assets/logo.svg deleted file mode 100644 index a23c5b32..00000000 --- a/src/assets/logo.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/src/assets/resources/books.png b/src/assets/resources/books.png deleted file mode 100644 index 1620de75..00000000 Binary files a/src/assets/resources/books.png and /dev/null differ diff --git a/src/assets/resources/books.svg b/src/assets/resources/books.svg new file mode 100644 index 00000000..3e11e637 --- /dev/null +++ b/src/assets/resources/books.svg @@ -0,0 +1 @@ +Books banner diff --git a/src/assets/resources/events.png b/src/assets/resources/events.png deleted file mode 100644 index 537d7a12..00000000 Binary files a/src/assets/resources/events.png and /dev/null differ diff --git a/src/assets/resources/events.svg b/src/assets/resources/events.svg new file mode 100644 index 00000000..8938dcaf --- /dev/null +++ b/src/assets/resources/events.svg @@ -0,0 +1 @@ +Events banner diff --git a/src/assets/resources/open-sourcerers.png b/src/assets/resources/open-sourcerers.png deleted file mode 100644 index 6f3df6dd..00000000 Binary files a/src/assets/resources/open-sourcerers.png and /dev/null differ diff --git a/src/assets/resources/open-sourcerers.svg b/src/assets/resources/open-sourcerers.svg new file mode 100644 index 00000000..5244c419 --- /dev/null +++ b/src/assets/resources/open-sourcerers.svg @@ -0,0 +1 @@ +Open sourcerers banner diff --git a/src/assets/resources/podcasts.svg b/src/assets/resources/podcasts.svg new file mode 100644 index 00000000..57247b10 --- /dev/null +++ b/src/assets/resources/podcasts.svg @@ -0,0 +1 @@ +Podcasts banner diff --git a/src/assets/resources/tools.png b/src/assets/resources/tools.png deleted file mode 100644 index 13b3e610..00000000 Binary files a/src/assets/resources/tools.png and /dev/null differ diff --git a/src/assets/resources/tools.svg b/src/assets/resources/tools.svg new file mode 100644 index 00000000..49b6ecb6 --- /dev/null +++ b/src/assets/resources/tools.svg @@ -0,0 +1 @@ +Tools banner diff --git a/src/brand/favicons/apple-touch-icon.png b/src/brand/favicons/apple-touch-icon.png new file mode 100644 index 00000000..c95c788e Binary files /dev/null and b/src/brand/favicons/apple-touch-icon.png differ diff --git a/src/brand/favicons/favicon.ico b/src/brand/favicons/favicon.ico new file mode 100644 index 00000000..7bd09a56 Binary files /dev/null and b/src/brand/favicons/favicon.ico differ diff --git a/src/brand/favicons/favicon.svg b/src/brand/favicons/favicon.svg new file mode 100644 index 00000000..5f954f43 --- /dev/null +++ b/src/brand/favicons/favicon.svg @@ -0,0 +1 @@ +Open {re}Source diff --git a/src/brand/favicons/icon-192.png b/src/brand/favicons/icon-192.png new file mode 100644 index 00000000..748c0a60 Binary files /dev/null and b/src/brand/favicons/icon-192.png differ diff --git a/src/brand/favicons/icon-512.png b/src/brand/favicons/icon-512.png new file mode 100644 index 00000000..c279ee0d Binary files /dev/null and b/src/brand/favicons/icon-512.png differ diff --git a/src/brand/favicons/icon-maskable-512.png b/src/brand/favicons/icon-maskable-512.png new file mode 100644 index 00000000..4c08fc8f Binary files /dev/null and b/src/brand/favicons/icon-maskable-512.png differ diff --git a/src/brand/hero.svg b/src/brand/hero.svg new file mode 100644 index 00000000..806db2cc --- /dev/null +++ b/src/brand/hero.svg @@ -0,0 +1 @@ +Open {re}Source: artwork diff --git a/src/brand/mark.svg b/src/brand/mark.svg new file mode 100644 index 00000000..b6d004b4 --- /dev/null +++ b/src/brand/mark.svg @@ -0,0 +1 @@ + diff --git a/src/brand/modules/contributing-to-open-source-projects.svg b/src/brand/modules/contributing-to-open-source-projects.svg new file mode 100644 index 00000000..61ac2488 --- /dev/null +++ b/src/brand/modules/contributing-to-open-source-projects.svg @@ -0,0 +1 @@ + diff --git a/src/brand/modules/creating-your-own-open-source-project.svg b/src/brand/modules/creating-your-own-open-source-project.svg new file mode 100644 index 00000000..7f6f3c35 --- /dev/null +++ b/src/brand/modules/creating-your-own-open-source-project.svg @@ -0,0 +1 @@ + diff --git a/src/brand/modules/financing-open-source-projects.svg b/src/brand/modules/financing-open-source-projects.svg new file mode 100644 index 00000000..bf936b9d --- /dev/null +++ b/src/brand/modules/financing-open-source-projects.svg @@ -0,0 +1 @@ + diff --git a/src/brand/modules/getting-started-with-open-source.svg b/src/brand/modules/getting-started-with-open-source.svg new file mode 100644 index 00000000..6bec933a --- /dev/null +++ b/src/brand/modules/getting-started-with-open-source.svg @@ -0,0 +1 @@ + diff --git a/src/brand/modules/maintaining-open-source-projects.svg b/src/brand/modules/maintaining-open-source-projects.svg new file mode 100644 index 00000000..99673755 --- /dev/null +++ b/src/brand/modules/maintaining-open-source-projects.svg @@ -0,0 +1 @@ + diff --git a/src/brand/modules/promoting-open-source-projects.svg b/src/brand/modules/promoting-open-source-projects.svg new file mode 100644 index 00000000..e29952b8 --- /dev/null +++ b/src/brand/modules/promoting-open-source-projects.svg @@ -0,0 +1 @@ + diff --git a/src/brand/modules/what-is-open-source.svg b/src/brand/modules/what-is-open-source.svg new file mode 100644 index 00000000..504a2475 --- /dev/null +++ b/src/brand/modules/what-is-open-source.svg @@ -0,0 +1 @@ + diff --git a/src/brand/og-art.png b/src/brand/og-art.png new file mode 100644 index 00000000..d71f0b3f Binary files /dev/null and b/src/brand/og-art.png differ diff --git a/src/components/Button.astro b/src/components/Button.astro deleted file mode 100644 index 6bbf2ee8..00000000 --- a/src/components/Button.astro +++ /dev/null @@ -1,77 +0,0 @@ ---- -import type { AstroBuiltinAttributes } from 'astro'; - -export interface Props { - href: string; - class?: string | undefined; - 'class:list'?: AstroBuiltinAttributes['class:list']; -} - -const { href, class: cssClass, 'class:list': cssClassList } = Astro.props; ---- - - - - - - diff --git a/src/components/Chat.astro b/src/components/Chat.astro index 0c5f9f44..0c6d7544 100644 --- a/src/components/Chat.astro +++ b/src/components/Chat.astro @@ -11,7 +11,7 @@ const { author, thinking, type } = Astro.props;

{author} - {thinking ? 'thinks' : 'says'} + {thinking ? 'thinks' : 'says'}
@@ -19,130 +19,51 @@ const { author, thinking, type } = Astro.props;
diff --git a/src/components/ContentImage.astro b/src/components/ContentImage.astro index 7a4bb932..8c189d13 100644 --- a/src/components/ContentImage.astro +++ b/src/components/ContentImage.astro @@ -15,6 +15,6 @@ import { Image } from 'astro:assets'; } img { - border-radius: 0.5rem; + border: var(--stroke-hairline) solid var(--color-line); } diff --git a/src/components/Footer.astro b/src/components/Footer.astro deleted file mode 100644 index 345e45cb..00000000 --- a/src/components/Footer.astro +++ /dev/null @@ -1,187 +0,0 @@ ---- -import Default from '@astrojs/starlight/components/Footer.astro'; -import { Icon } from '@astrojs/starlight/components'; -import FooterLink from './FooterLink.astro'; -import Button from './Button.astro'; - -const display = - Astro.locals.starlightRoute.id == '' || - Astro.locals.starlightRoute.id == 'showcase' || - Astro.locals.starlightRoute.id == 'cookie-policy' || - Astro.locals.starlightRoute.id == 'about-author'; -const currentSlug = Astro.locals.starlightRoute.id; ---- - - - - - -{display && ( - <> -
- - -)} - - diff --git a/src/components/FooterLink.astro b/src/components/FooterLink.astro deleted file mode 100644 index 96efdc2d..00000000 --- a/src/components/FooterLink.astro +++ /dev/null @@ -1,33 +0,0 @@ ---- -import { Icon } from '@astrojs/starlight/components'; - -const { icon, name, url } = Astro.props; ---- - - - - {name} - - - diff --git a/src/components/GuideReadingTime.astro b/src/components/GuideReadingTime.astro index b5b49a0c..d03e5e2c 100644 --- a/src/components/GuideReadingTime.astro +++ b/src/components/GuideReadingTime.astro @@ -1,31 +1,32 @@ --- -import readingTime from 'reading-time'; import { getCollection } from 'astro:content'; -import { Icon } from '@astrojs/starlight/components'; +import { readingTime } from '@deramond.dev/astro/blog'; -const slug = Astro.url.pathname.slice(1); +// Reading time of the guide, or of one module: every page under the current path. +const slug = Astro.url.pathname.replace(/^\/|\/$/g, ''); const docs = await getCollection('docs'); -let guideReadingTime = 0; -docs.filter((doc) => doc.id.startsWith(slug)).map((doc) => (guideReadingTime += readingTime(doc.body || '').minutes)); -guideReadingTime = Math.ceil(guideReadingTime); +const guideReadingTime = docs + .filter((doc) => doc.id !== slug && doc.id.startsWith(`${slug}/`)) + .reduce((total, doc) => total + readingTime(doc.body), 0); +const duration = + guideReadingTime >= 60 + ? `${Math.floor(guideReadingTime / 60)} h ${Math.ceil(guideReadingTime % 60)} min` + : `${guideReadingTime} min`; --- -

- This {slug === 'guide' || slug === 'guide/' ? 'guide' : 'module'} will take you - approximately - {guideReadingTime >= 60 - ? `${Math.floor(guideReadingTime / 60)} h ${Math.ceil(guideReadingTime % 60)} min` - : `${guideReadingTime} min`} - to read. +

+ This {slug === 'guide' ? 'guide' : 'module'} will take you approximately {duration} to read.

diff --git a/src/components/Head.astro b/src/components/Head.astro deleted file mode 100644 index 24337be9..00000000 --- a/src/components/Head.astro +++ /dev/null @@ -1,84 +0,0 @@ ---- -import Default from '@astrojs/starlight/components/Head.astro'; - -// Add a `.` to the ID to create the correct path to the image. -// e.g. `guide/creating-your-own-open-source-project` -> `og/guide/creating-your-own-open-source-project.png` -const filteredAstroPropsId = Astro.locals.starlightRoute.id ? Astro.locals.starlightRoute.id + '.' : 'index.png'; - -// Force the og:image to be the index image for the homepage for these kind of pages: -// - articles/tags/* -// - articles/authors/* -// - 404 -// - articles.* -// - articles/[0-9]*/ -const isOgIndex = - Astro.locals.starlightRoute.id.startsWith('articles/tags/') || - Astro.locals.starlightRoute.id.startsWith('articles.') || - /^articles\/\d+/.test(Astro.locals.starlightRoute.id) || - Astro.locals.starlightRoute.id.startsWith('404') || - Astro.locals.starlightRoute.id.startsWith('articles/authors/'); - -// Get the URL of the generated image for the current page using its -// ID and replace the file extension with `.png`. -const ogImageUrl = new URL( - isOgIndex ? '/og/index.png' : `/og/${filteredAstroPropsId.replace(/\.+$/, '.png')}`, - Astro.site -); - -const { entry } = Astro.locals.starlightRoute; -const { data } = entry; - -const isArticle = - Astro.locals.starlightRoute.id.startsWith('articles/') && - !Astro.locals.starlightRoute.id.startsWith('articles/tags') && - !Astro.locals.starlightRoute.id.startsWith('articles/authors') && - !Astro.locals.starlightRoute.id.match('articles/[0-9]*$'); - -let articleSchema; -if (isArticle) { - articleSchema = JSON.stringify({ - '@context': 'https://schema.org/', - '@type': 'Article', - headline: entry.data.title, - description: entry.data.description, - image: 'https://openresource.dev/og/' + entry.filePath + '.png', - author: { - '@type': 'Person', - name: 'Julien Déramond', - url: 'https://github.com/julien-deramond/', - }, - publisher: { - '@type': 'Organization', - name: 'Open {re}Source', - url: 'https://openresource.dev/', - logo: { - '@type': 'ImageObject', - url: 'https://openresource.dev/android-chrome-192x192.png', - }, - }, - datePublished: entry.data.date, - dateModified: entry.data.lastUpdated, - }); -} - -// Please note that "og:type" is forced to "article" by Starlight and can't be changed. ---- - - - - - - - - - - - - - - - - - - -{articleSchema && } diff --git a/src/components/Header.astro b/src/components/Header.astro deleted file mode 100644 index 4adf541f..00000000 --- a/src/components/Header.astro +++ /dev/null @@ -1,17 +0,0 @@ ---- -import Default from '@astrojs/starlight/components/Header.astro'; -import ProgressScroll from './ProgressScroll.astro'; - -const displayProgressScroll = - Astro.locals.starlightRoute.id.startsWith('guide') || - (Astro.locals.starlightRoute.id.startsWith('articles/') && - !Astro.locals.starlightRoute.id.startsWith('articles/tags') && - !Astro.locals.starlightRoute.id.startsWith('articles/authors') && - !Astro.locals.starlightRoute.id.match('articles/[0-9]*$')); ---- - - - - - -{displayProgressScroll && } diff --git a/src/components/PageTitleThenReadingTime.astro b/src/components/PageTitleThenReadingTime.astro deleted file mode 100644 index 0a54056b..00000000 --- a/src/components/PageTitleThenReadingTime.astro +++ /dev/null @@ -1,42 +0,0 @@ ---- -import readingTime from 'reading-time'; -import Default from '@astrojs/starlight/components/PageTitle.astro'; - -const { date } = Astro.locals.starlightRoute.entry.data; -const { entry, lang } = Astro.locals.starlightRoute; - -const isGuide = Astro.locals.starlightRoute.id.startsWith('guide'); -const displayReadingTime = isGuide && date; -const displayDate = date && isGuide; ---- - - - - - -{(displayDate || displayReadingTime) && ( -
- {displayDate && ( -

- -

- )} - {displayReadingTime && ( -  - {Math.ceil(readingTime(entry.body || '').minutes)} min read - )} -
-)} - - diff --git a/src/components/ProgressScroll.astro b/src/components/ProgressScroll.astro deleted file mode 100644 index 2f27e865..00000000 --- a/src/components/ProgressScroll.astro +++ /dev/null @@ -1,73 +0,0 @@ ---- ---- - - - - - - diff --git a/src/components/Showcase.astro b/src/components/Showcase.astro index db11d0c1..b6bec691 100644 --- a/src/components/Showcase.astro +++ b/src/components/Showcase.astro @@ -6,7 +6,7 @@ import { getCollection } from 'astro:content'; import type { ShowcaseLink } from '../content.config'; import ShowcaseBanner from './ShowcaseBanner.astro'; import ShowcaseGitHubRepo from './ShowcaseGitHubRepo.astro'; -import { CardGrid, LinkCard } from '@astrojs/starlight/components'; +import ShowcaseEntry from './ShowcaseEntry.astro'; const showcaseEntries = await getCollection('showcase'); const allShowcaseLinks: ShowcaseLink[] = shuffleLinks(showcaseEntries.map((entry) => entry.data.links).flat()); @@ -25,17 +25,42 @@ function shuffleLinks(links: ShowcaseLink[]): ShowcaseLink[] { } --- - +
{allShowcaseLinks.map((link: ShowcaseLink) => { if (link.type === 'github_repo') { return ( ); - } else if (link.type === 'github') { - return ; } - return ; + const host = link.type === 'github' ? 'GitHub' : 'GitLab'; + return ( + + ); })} - +
+ + diff --git a/src/components/ShowcaseBanner.astro b/src/components/ShowcaseBanner.astro index d20dc9a8..a768f8a1 100644 --- a/src/components/ShowcaseBanner.astro +++ b/src/components/ShowcaseBanner.astro @@ -1,53 +1,53 @@ --- -const { showProjectsButton = false } = Astro.props; +import { Button } from '@deramond.dev/astro'; -import { Card, Icon } from '@astrojs/starlight/components'; -import Button from './Button.astro'; +const { showProjectsButton = false } = Astro.props; --- -
- -

- Explore what the Open {re}Source community builds for the open source world. -

-

- Submit your open-source project(s), profiles or websites to the showcase and let the community discover your work. -

-
- + {showProjectsButton && ( + - {showProjectsButton && ( - - )} -
-
+ )} +
diff --git a/src/components/ShowcaseEntry.astro b/src/components/ShowcaseEntry.astro new file mode 100644 index 00000000..520ccea5 --- /dev/null +++ b/src/components/ShowcaseEntry.astro @@ -0,0 +1,62 @@ +--- +// One showcase entry: avatar, name and description, the whole card a link. +export interface Props { + href: string; + /** HTML: a repository shows `owner/` above its name. */ + name: string; + picture?: string; + description: string; +} + +const { href, name, picture, description } = Astro.props; +--- + + + {picture && } + + + + + + + diff --git a/src/components/ShowcaseGitHubRepo.astro b/src/components/ShowcaseGitHubRepo.astro index a8dd3def..12b0b809 100644 --- a/src/components/ShowcaseGitHubRepo.astro +++ b/src/components/ShowcaseGitHubRepo.astro @@ -1,5 +1,5 @@ --- -import { ShowcaseProfile } from 'starlight-showcases'; +import ShowcaseEntry from './ShowcaseEntry.astro'; export interface Props { description: string; @@ -10,16 +10,19 @@ export interface Props { const { description, env, img, repo } = Astro.props; -const picture = img.includes('https://') ? img : `https://avatars.githubusercontent.com/u/${img}?s=50`; +const picture = img.includes('https://') ? img : `https://avatars.githubusercontent.com/u/${img}?s=96`; --- -${env}/
${repo}`, - picture, - href: `https://github.com/${env}/${repo}`, - description, - }, - ]} +${env}/
${repo}`} + picture={picture} + href={`https://github.com/${env}/${repo}`} + description={description} /> + + diff --git a/src/components/ShowcaseGitHubUser.astro b/src/components/ShowcaseGitHubUser.astro index 6dec1d35..cefc709a 100644 --- a/src/components/ShowcaseGitHubUser.astro +++ b/src/components/ShowcaseGitHubUser.astro @@ -1,5 +1,5 @@ --- -import { ShowcaseProfile } from 'starlight-showcases'; +import ShowcaseEntry from './ShowcaseEntry.astro'; export interface Props { description: string; @@ -10,13 +10,9 @@ export interface Props { const { description, img, name } = Astro.props; --- - diff --git a/src/components/SupportThenPagination.astro b/src/components/SupportThenPagination.astro deleted file mode 100644 index c4ff3ef5..00000000 --- a/src/components/SupportThenPagination.astro +++ /dev/null @@ -1,43 +0,0 @@ ---- -import Default from '@astrojs/starlight/components/Pagination.astro'; - -const { editUrl } = Astro.locals.starlightRoute.entry.data; ---- - -{editUrl && ( -
-

- CC BY-NC-SA 4.0 2023-present © Open - {re}Source -

-

- Found something valuable on this page? -
- Show your support by dropping us a star on GitHub. - Your support helps us grow and reach more people! -

-

- Found a typo, a grammar error or a broken link? -
- Or this article is missing something important? Please{' '} - create an issue on GitHub. -

-
-)} - - - - - - diff --git a/src/content.config.ts b/src/content.config.ts index bbd032f4..6864a1c6 100644 --- a/src/content.config.ts +++ b/src/content.config.ts @@ -1,8 +1,7 @@ import { defineCollection } from 'astro:content'; import { z } from 'astro/zod'; -import { docsLoader } from '@astrojs/starlight/loaders'; -import { docsSchema } from '@astrojs/starlight/schema'; -import { blogSchema } from 'starlight-blog/schema'; +import { docsLoader, docsSchema } from '@deramond.dev/astro/docs'; +import { blogLoader, blogSchema } from '@deramond.dev/astro/blog'; const showcaseGitHubLinkSchema = z.object({ type: z.literal('github'), @@ -50,9 +49,22 @@ export const collections = { docs: defineCollection({ loader: docsLoader(), schema: docsSchema({ - extend: (context) => blogSchema(context), + // Pages open with their own lead paragraph: the description stays for meta tags and cards. + extend: z.object({ + hideDescription: z.boolean().default(true), + date: z.coerce.date().optional(), + lastUpdated: z.coerce.date().optional(), + }), }), }), + articles: defineCollection({ + loader: blogLoader({ base: './src/content/articles' }), + // Covers are files in public/covers/ (a URL), so the OG cards can read them too. + schema: () => + blogSchema({ + extend: z.object({ hideDescription: z.boolean().default(true), excerpt: z.string().optional() }), + }), + }), showcase: showcaseCollection, }; diff --git a/src/content/docs/articles/add-funding-links-to-your-package.json.mdx b/src/content/articles/add-funding-links-to-your-package.json.mdx similarity index 98% rename from src/content/docs/articles/add-funding-links-to-your-package.json.mdx rename to src/content/articles/add-funding-links-to-your-package.json.mdx index bda6465b..03679489 100644 --- a/src/content/docs/articles/add-funding-links-to-your-package.json.mdx +++ b/src/content/articles/add-funding-links-to-your-package.json.mdx @@ -6,6 +6,8 @@ lastUpdated: 2024-09-22 excerpt: "**Learn how to enhance your open-source project by adding funding links to your 'package.json'.** This guide highlights the importance of supporting maintainers and explores various ways contributors can provide financial assistance, including platforms like GitHub Sponsors and Open Collective. **By making your funding information visible, you can encourage users to support your project directly.**

We'll walk you through the process of implementing the funding field in your 'package.json', ensuring that your project is equipped to receive contributions. Whether it's a simple donation link or a Patreon page, letting the community know you're seeking support can make a difference. With just a few adjustments, you might find that your project receives the backing it deserves!" +authors: julien +cover: /covers/add-funding-links-to-your-packagejson.svg tags: - npm - Funding @@ -17,7 +19,7 @@ head: content: "website" --- -import ContentImage from '../../../components/ContentImage.astro'; +import ContentImage from '../../components/ContentImage.astro'; {/* prettier-ignore */}

Fund your open-source project by adding funding links to your package.json file. Who knows, you might get a coffee or two out of it!

diff --git a/src/content/docs/articles/bluesky-starter-pack.mdx b/src/content/articles/bluesky-starter-pack.mdx similarity index 94% rename from src/content/docs/articles/bluesky-starter-pack.mdx rename to src/content/articles/bluesky-starter-pack.mdx index e15fc37c..8160a6bd 100644 --- a/src/content/docs/articles/bluesky-starter-pack.mdx +++ b/src/content/articles/bluesky-starter-pack.mdx @@ -6,6 +6,8 @@ lastUpdated: 2024-11-03 excerpt: "**On June 26, 2024, Bluesky, the decentralized social media platform, introduced starter packs** to enhance user experience and facilitate community growth. These personalized invites allow users to bring friends directly into their customized Bluesky environments. A starter pack can include custom feeds and recommended follows, encouraging new users to connect with favorite accounts. Although not searchable, starter packs can be shared via links or embed previews within the Bluesky app.

**The Open {re}Source team has created a Bluesky starter pack focused on the open-source community.** They curated a selection of accounts and individuals related to open source, along with a custom \"Open Source\" feed. This starter pack, available through a QR code or link, invites users to join and engage with the open source community on Bluesky. Feedback and suggestions are welcomed, fostering a collaborative and personalized social media experience." +authors: julien +cover: /covers/bluesky-starter-pack.svg tags: - Bluesky - Social Media @@ -17,9 +19,9 @@ head: content: "website" --- -import BlueskyProfile from '../../../components/BlueskyProfile.astro'; -import ContentImage from '../../../components/ContentImage.astro'; -import ShowcaseGitHubRepo from '../../../components/ShowcaseGitHubRepo.astro'; +import BlueskyProfile from '../../components/BlueskyProfile.astro'; +import ContentImage from '../../components/ContentImage.astro'; +import ShowcaseGitHubRepo from '../../components/ShowcaseGitHubRepo.astro'; {/* prettier-ignore */}

Bluesky released starter packs on June 26, 2024. They are personalized invites that allow users to bring people directly into your slice of Bluesky!

diff --git a/src/content/docs/articles/can-i-take-this-issue.mdx b/src/content/articles/can-i-take-this-issue.mdx similarity index 92% rename from src/content/docs/articles/can-i-take-this-issue.mdx rename to src/content/articles/can-i-take-this-issue.mdx index 3b867a34..76e22a87 100644 --- a/src/content/docs/articles/can-i-take-this-issue.mdx +++ b/src/content/articles/can-i-take-this-issue.mdx @@ -6,15 +6,17 @@ lastUpdated: 2024-09-26 excerpt: "**Open-source software development thrives on the contributions of volunteers with varying skills and backgrounds.** Project maintainers play a critical role in ensuring these contributions are of high quality and align with the project's goals. **However, issues arise when contributors do not read guidelines or maintainers do not assign issues, leading to confusion and frustration.** This lack of clear communication can leave contributors feeling undervalued and discourage them from contributing further.

**Maintainers have different reasons for not assigning issues**, such as limited resources and large communities. Assigning issues can enhance efficiency, accountability, and resource management but may also create perceptions of favoritism or stifle collaboration. To address these challenges, maintainers should establish clear communication channels, use tools like saved replies, and maintain comprehensive contribution guidelines. By fostering a transparent and supportive environment, maintainers can better manage contributions and maintain a healthy, active community." +authors: julien +cover: /covers/can-i-take-this-issue.svg tags: - Community - Contribution --- -import { Badge } from '@astrojs/starlight/components'; -import Chat from '../../../components/Chat.astro'; -import ContentImage from '../../../components/ContentImage.astro'; -import ShowcaseGitHubRepo from '../../../components/ShowcaseGitHubRepo.astro'; +import { Badge } from '@deramond.dev/astro'; +import Chat from '../../components/Chat.astro'; +import ContentImage from '../../components/ContentImage.astro'; +import ShowcaseGitHubRepo from '../../components/ShowcaseGitHubRepo.astro'; {/* prettier-ignore */}

Open-source software development is a collaborative effort that relies on volunteers to contribute to the project. Contributors have different skill levels and come from various backgrounds. As such, project maintainers have a crucial role in ensuring that the contributions received are of high quality and meet the project's goals. One way maintainers do this is by providing clear guidelines on how contributors can submit their work. Unfortunately, contributors don't always take the time to read these guidelines, and maintainers don't always assign issues, which can lead to confusion and frustration on both sides. In this article, we'll explore the issue of unassigned contributions and discuss what can be done to address it.

@@ -51,7 +53,7 @@ If you are the maintainer of this open-source project, you start by receiving a If you are the contributor, you may feel frustrated. You may have spent time looking for an issue to work on, and you may have even started working on it. You then ask if you can take it, and the maintainer responds by saying that they don't assign issues. You then feel discouraged and decide not to contribute to the project. {/* prettier-ignore */} -This is a frustrating experience for both the contributor and the maintainer. +This is a frustrating experience for both the contributor and the maintainer. The contributor is left wondering if they can actually work on the issue, and the maintainer is left wondering why the contributor didn't read the contributing guidelines. @@ -193,9 +195,8 @@ Everything can start from the creation of these issues with the issues templates - [Description templates on GitLab](https://docs.gitlab.com/ee/user/project/description_templates.html) - [Configuring issue templates on GitHub](https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/configuring-issue-templates-for-your-repository) -:::tip -When you don't assign issues in your repository, it can be reminded at the end of the issues! -::: +> [!TIP] +> When you don't assign issues in your repository, it can be reminded at the end of the issues! At the time of writing, GitHub doesn't provide any options to add some Markdown content at the end of the issues when using issue templates. However, you can use GitHub Actions to do that. Here is an example of a GitHub Action that adds a message for newly created issues: @@ -206,7 +207,7 @@ At the time of writing, GitHub doesn't provide any options to add some Markdown description="[Labs] Automatically append Markdown to issues" /> -An infinite way of managing labels is possible. Let's imagine, for example, a label that can be picked up only by a core team member. When this core team member analyzed the issue and provided expectations, clarity, and guidance, the label could be transformed into an label, and a new label could be applied combined to and labels, and a label, or , if it is reserved for the core team, or when it is OK for external contributors to work on it. When doing that, contributors can start to help or not, filter the backlog by labels, and the core team can focus on the most important issues. If the workflow is automated, the issue can go to one or another project, be in a roadmap, etc. This is just an example, but you can imagine how powerful it can be. +An infinite way of managing labels is possible. Let's imagine, for example, a to analyze label that can be picked up only by a core team member. When this core team member analyzed the issue and provided expectations, clarity, and guidance, the label could be transformed into an analyzed label, and a new ready for dev label could be applied combined to high priority and low complexity labels, and a version 12 label, bug or feature, core team if it is reserved for the core team, or pr welcome when it is OK for external contributors to work on it. When doing that, contributors can start to help or not, filter the backlog by labels, and the core team can focus on the most important issues. If the workflow is automated, the issue can go to one or another project, be in a roadmap, etc. This is just an example, but you can imagine how powerful it can be. ### Communicate Clearly @@ -217,10 +218,10 @@ By taking the time to establish clear guidelines and protocols for issues assign Whether maintainers put in place a simple or advanced workflow, it must be clearly explained somewhere. Depending on the amount of information, it can be directly in the Contributing Guidelines or in a Wiki, documentation, etc. linked from the Contributing Guidelines. {/* prettier-ignore */} -If issues are assigned, make sure that it's clearly explained in the Contributing Guidelines. +If issues are assigned, make sure that it's clearly explained in the Contributing Guidelines. {/* prettier-ignore */} -If issues are not assigned, make sure that it's clearly explained in the Contributing Guidelines. +If issues are not assigned, make sure that it's clearly explained in the Contributing Guidelines. #### The Importance of Contribution Guidelines @@ -269,7 +270,7 @@ It is only a semi-automatic tool but it can help save a lot of time by not repea If you are maintaining OSS projects or communities on different platforms, you may opt for **decentralized messages and actions** stored in your own environment for transversal usage. Tools like [Alfred](https://www.alfredapp.com/) on macOS could be used in this spirit. -Writing this article was the occasion to try creating a **semi-automation tool based on labels**. Maintainer can add a label to an issue right after a comment asking to be assigned. This label will trigger a GitHub action that will write a personalized comment explaining that the repo is not handled that way, and then remove this label automatically. We could even hide the original contributor's comment in the process. +Writing this article was the occasion to try creating a **semi-automation tool based on labels**. Maintainer can add a we don't assign issues label to an issue right after a comment asking to be assigned. This label will trigger a GitHub action that will write a personalized comment explaining that the repo is not handled that way, and then remove this label automatically. We could even hide the original contributor's comment in the process.
Learn how to code LinkedIn carousels with Slidev and discover our open-source Slidev theme for LinkedIn carousels named `slidev-theme-linkedin-carousel`." +authors: julien +cover: /covers/coding-linkedin-carousels.svg tags: - LinkedIn - Social Media @@ -16,8 +18,8 @@ head: --- import { Image } from 'astro:assets'; -import ContentImage from '../../../components/ContentImage.astro'; -import ShowcaseGitHubRepo from '../../../components/ShowcaseGitHubRepo.astro'; +import ContentImage from '../../components/ContentImage.astro'; +import ShowcaseGitHubRepo from '../../components/ShowcaseGitHubRepo.astro'; {/* prettier-ignore */}

Coding LinkedIn carousels... yes, not using design tools but using developer tools! It's now possible!

diff --git a/src/content/docs/articles/contrib-rocks.mdx b/src/content/articles/contrib-rocks.mdx similarity index 97% rename from src/content/docs/articles/contrib-rocks.mdx rename to src/content/articles/contrib-rocks.mdx index cbc81cbe..526be226 100644 --- a/src/content/docs/articles/contrib-rocks.mdx +++ b/src/content/articles/contrib-rocks.mdx @@ -6,6 +6,8 @@ lastUpdated: 2024-04-27 excerpt: "**contrib.rocks is an online tool that generates an image showcasing the top contributors of a GitHub repository**, which can be embedded in websites or Markdown files, including README files. This free service, provides a visual representation of repository activity, celebrating and encouraging contributions.

Using contrib.rocks is straightforward: visit the website, enter a GitHub repository name, and generate an image representing its top contributors. The tool offers options to customize the image, such as setting the maximum number of contributors and the number of columns. This visual representation can be embedded using provided HTML or Markdown code, enhancing the visibility and appeal of a project's README or website." +authors: julien +cover: /covers/contrib-rocks.svg tags: - GitHub - Markdown @@ -13,7 +15,7 @@ tags: - Tools --- -import ShowcaseGitHubRepo from '../../../components/ShowcaseGitHubRepo.astro'; +import ShowcaseGitHubRepo from '../../components/ShowcaseGitHubRepo.astro'; {/* prettier-ignore */}

[contrib.rocks](https://contrib.rocks/) is a an online tool that generates an image of the top contributors of a GitHub repository that can be embedded in any website or Markdown file; including its README file.

diff --git a/src/content/docs/articles/display-your-sponsors-in-your-github-readmes.mdx b/src/content/articles/display-your-sponsors-in-your-github-readmes.mdx similarity index 98% rename from src/content/docs/articles/display-your-sponsors-in-your-github-readmes.mdx rename to src/content/articles/display-your-sponsors-in-your-github-readmes.mdx index e661cb07..8d1684cd 100644 --- a/src/content/docs/articles/display-your-sponsors-in-your-github-readmes.mdx +++ b/src/content/articles/display-your-sponsors-in-your-github-readmes.mdx @@ -4,14 +4,16 @@ description: 'Learn how to display the list of your sponsors in your GitHub READ date: 2023-05-18 lastUpdated: 2024-09-23 excerpt: "**Showcasing your sponsors in GitHub READMEs is a great way to acknowledge their support and attract potential sponsors.** An easy way to do this is by using **SponsorKit**, developed by Anthony Fu. SponsorKit generates sponsor images compatible with GitHub Sponsors, Open Collective, Patreon, and Afdian. By following a few steps, you can create and display these sponsor images in your project's README file. You'll need a GitHub account, at least one sponsor, and a personal access token. A template repository is available to simplify the setup process." +authors: julien +cover: /covers/display-your-sponsors-in-your-github-readmes.svg tags: - GitHub - Sponsors - Tutorial --- -import ContentImage from '../../../components/ContentImage.astro'; -import ShowcaseGitHubRepo from '../../../components/ShowcaseGitHubRepo.astro'; +import ContentImage from '../../components/ContentImage.astro'; +import ShowcaseGitHubRepo from '../../components/ShowcaseGitHubRepo.astro'; {/* prettier-ignore */}

A simple nice way to reward your sponsors could be to showcase them in the projects you create on GitHub. And what a better place to do that than in your READMEs? This article will show you how to do that easily!

diff --git a/src/content/docs/articles/get-real-time-github-stars-notifications-in-discord.mdx b/src/content/articles/get-real-time-github-stars-notifications-in-discord.mdx similarity index 84% rename from src/content/docs/articles/get-real-time-github-stars-notifications-in-discord.mdx rename to src/content/articles/get-real-time-github-stars-notifications-in-discord.mdx index fc5772dd..8896f779 100644 --- a/src/content/docs/articles/get-real-time-github-stars-notifications-in-discord.mdx +++ b/src/content/articles/get-real-time-github-stars-notifications-in-discord.mdx @@ -6,6 +6,8 @@ lastUpdated: 2024-09-17 excerpt: "After refactoring our website, we noticed a rise in statistics and new stars on our GitHub repository. While GitHub doesn't offer native notifications for new stars, we decided to create our own solution.

**This guide walks you through setting up a GitHub Actions workflow to send real-time notifications to a private Discord channel whenever your repository gains new stars**. It's a fun way to track your project's popularity and engage with your community. Follow along as we share our journey of building and tweaking this automation, complete with a screenshot of the notification we received on our phone." +authors: julien +cover: /covers/get-real-time-github-stars-notifications-in-discord.svg tags: - Automation - Discord @@ -21,7 +23,7 @@ head: content: "website" --- -import ContentImage from '../../../components/ContentImage.astro'; +import ContentImage from '../../components/ContentImage.astro'; {/* prettier-ignore */}

After the refactoring of this website, folks (maybe you) started to spread the word about it. The statistics started to rise a little bit, and we discovered along the way that the repository holding this website also started to receive some new stars. To our knowledge, there's no native way to get notified by GitHub when you receive stars on your repositories. So, we decided to do something about it!

@@ -80,9 +82,8 @@ To securely store your Discord Webhook URL to ensure that sensitive data isn't e ## Step 4: Create a GitHub Actions Workflow -:::note[What is GitHub Actions?] -If your not familiar with GitHub Actions, it allows you to automate workflows directly in your GitHub repository, and it can be triggered based on various events. More information can be found in the [GitHub Actions documentation](https://docs.github.com/en/actions). -::: +> [!NOTE] What is GitHub Actions? +> If your not familiar with GitHub Actions, it allows you to automate workflows directly in your GitHub repository, and it can be triggered based on various events. More information can be found in the [GitHub Actions documentation](https://docs.github.com/en/actions). In this repository: @@ -118,9 +119,8 @@ So for our main repository, you would make a request to: GET https://api.github.com/repos/Open-reSource/openresource.dev ``` -:::note[Try it out!] -You can try it out directly in your browser (or using a tool like [Curl](https://github.com/curl/curl)) to see the JSON response. In the browser, you can simply paste the URL into the address bar and hit enter. -::: +> [!NOTE] Try it out! +> You can try it out directly in your browser (or using a tool like [Curl](https://github.com/curl/curl)) to see the JSON response. In the browser, you can simply paste the URL into the address bar and hit enter. At the time of writing, Open \{re\}Source main repository has 61 stars, so the answer would be: @@ -132,11 +132,10 @@ At the time of writing, Open \{re\}Source main repository has 61 stars, so the a } ``` -:::caution[Be mindful of the GitHub API rate limits] -Be mindful of the GitHub API rate limits when making requests. You can find more information about the rate limits in the [GitHub API documentation](https://docs.github.com/en/rest/overview/resources-in-the-rest-api#rate-limiting). - -At the time of writing, the GitHub API allows for up to 60 requests per hour for unauthenticated requests and up to 5,000 requests per hour for authenticated requests. If you plan to make frequent requests, consider using a personal access token for authentication. -::: +> [!WARNING] Be mindful of the GitHub API rate limits +> Be mindful of the GitHub API rate limits when making requests. You can find more information about the rate limits in the [GitHub API documentation](https://docs.github.com/en/rest/overview/resources-in-the-rest-api#rate-limiting). +> +> At the time of writing, the GitHub API allows for up to 60 requests per hour for unauthenticated requests and up to 5,000 requests per hour for authenticated requests. If you plan to make frequent requests, consider using a personal access token for authentication. ### The Actual Workflow @@ -145,12 +144,11 @@ Now, let's create the actual workflow: 1. Clone your repository to your local machine or edit it directly on GitHub. 2. Add the following YAML code to your `gh-stars-to-discord.yml` file: -:::note - -- Make sure to replace `open-reSource/openresource.dev` with your own repository name. -- The workflow is set to run every hour, but you can adjust the schedule as needed by changing the `cron` expression. -- You can change the text of the notification sent to Discord by modifying the `curl` command in the `Compare and notify if new stars` step. - ::: +> [!NOTE] +> +> - Make sure to replace `open-reSource/openresource.dev` with your own repository name. +> - The workflow is set to run every hour, but you can adjust the schedule as needed by changing the `cron` expression. +> - You can change the text of the notification sent to Discord by modifying the `curl` command in the `Compare and notify if new stars` step. ```yaml name: GitHub Stars to Discord @@ -241,11 +239,10 @@ The workflow has a `workflow_dispatch` trigger, which means you can run it manua The first time you run the workflow, it will probably send a notification saying that you had 0 stars and now you have X stars (the current number of stars). -:::note -We voluntarily left some logging in the workflow to help you debug if needed. You can remove or comment out the `echo` statements if you want to clean up the logs. - -To check the logs, once your YAML file is pushed to the repository, go to the "Actions" tab, select the workflow, and click on the latest run. All the logs will be displayed there. -::: +> [!NOTE] +> We voluntarily left some logging in the workflow to help you debug if needed. You can remove or comment out the `echo` statements if you want to clean up the logs. +> +> To check the logs, once your YAML file is pushed to the repository, go to the "Actions" tab, select the workflow, and click on the latest run. All the logs will be displayed there. To be honest, we are a little bit lazy, so we didn't implement a complex logic to handle this first run, or even when the count of stars decreases. But you can always improve the workflow to suit your needs! This is just a starting point. diff --git a/src/content/docs/articles/github-ghost-user.mdx b/src/content/articles/github-ghost-user.mdx similarity index 96% rename from src/content/docs/articles/github-ghost-user.mdx rename to src/content/articles/github-ghost-user.mdx index 17861d08..92e05fe4 100644 --- a/src/content/docs/articles/github-ghost-user.mdx +++ b/src/content/articles/github-ghost-user.mdx @@ -6,12 +6,14 @@ lastUpdated: 2024-05-18 excerpt: "**This morning, I woke up to over 200+ GitHub notifications, all spam discussions cluttering my inbox.** Titles like \"WATCH Kingdom of the Planet of the Apes FuLLMovie (.Free.)...\" and \"FREE-ROBUX-GENERATOR-2024-FREE-ROBUX-NEW-CODES-DAILY BONUS\" demanded my attention. While deleting and reporting these, I mistakenly reported **the user \"ghost\", which GitHub Support clarified is a placeholder for deleted users' contributions**. The ghost user ensures that discussions, issues, and commits from deleted accounts remain intact.

The ghost user plays a vital role in maintaining repository integrity and continuity. By attributing deleted users' contributions to the ghost user, **GitHub preserves valuable historical insights and project cohesion**. This mechanism activates when users delete their accounts or GitHub removes accounts for policy violations. The ghost user helps future contributors benefit from past discussions and maintains the overall project flow, highlighting its importance in the GitHub ecosystem." +authors: julien +cover: /covers/github-ghost-user.svg tags: - GitHub --- -import ContentImage from '../../../components/ContentImage.astro'; -import ShowcaseGitHubUser from '../../../components/ShowcaseGitHubUser.astro'; +import ContentImage from '../../components/ContentImage.astro'; +import ShowcaseGitHubUser from '../../components/ShowcaseGitHubUser.astro'; {/* prettier-ignore */}

This morning, I woke up to a storm of 200+ GitHub notifications. My inbox, usually pristine, was drowning in a deluge of spams.

diff --git a/src/content/docs/articles/github-marketplace-social-preview-for-your-github-actions.mdx b/src/content/articles/github-marketplace-social-preview-for-your-github-actions.mdx similarity index 96% rename from src/content/docs/articles/github-marketplace-social-preview-for-your-github-actions.mdx rename to src/content/articles/github-marketplace-social-preview-for-your-github-actions.mdx index eefcb376..e187c2e3 100644 --- a/src/content/docs/articles/github-marketplace-social-preview-for-your-github-actions.mdx +++ b/src/content/articles/github-marketplace-social-preview-for-your-github-actions.mdx @@ -6,13 +6,15 @@ lastUpdated: 2023-09-18 excerpt: "**When sharing a GitHub Action on social media, the default preview image might prominently display your GitHub profile picture**, as seen with the \"Update Issue Body\" action on the GitHub Marketplace. To make a more informative and visually appealing preview, you can **add a custom social preview image to your GitHub repository**. This custom image enhances the appearance of social media posts and is also used when sharing links to your GitHub Action on the Marketplace.

Creating a custom social preview image is straightforward and guided by GitHub's documentation. The recommended size is 1280x640 pixels for optimal display on high-resolution devices. GitHub provides a template with safe zones to use as a starting point. After designing and uploading the image, tools like opengraph.xyz can verify its appearance across social media platforms. For a ready-made solution, a reusable Figma template named \"GitHub Actions and Repo Social Previews\" simplifies the creation of custom images." +authors: julien +cover: /covers/github-marketplace-social-preview-for-your-github-actions.svg tags: - Communication - GitHub - GitHub Actions --- -import ContentImage from '../../../components/ContentImage.astro'; +import ContentImage from '../../components/ContentImage.astro'; {/* prettier-ignore */}

You are finally ready to share your GitHub Action with the world. You have spent hours working on it, and now it is time to show it off. You open your favorite social media platform, start typing your post, link your GitHub Action on the GitHub Marketplace, click on send, and... your big face is on people's screen!

diff --git a/src/content/docs/articles/how-to-create-a-code-of-conduct-for-an-open-source-project.mdx b/src/content/articles/how-to-create-a-code-of-conduct-for-an-open-source-project.mdx similarity index 96% rename from src/content/docs/articles/how-to-create-a-code-of-conduct-for-an-open-source-project.mdx rename to src/content/articles/how-to-create-a-code-of-conduct-for-an-open-source-project.mdx index 16365f07..d27d8f00 100644 --- a/src/content/docs/articles/how-to-create-a-code-of-conduct-for-an-open-source-project.mdx +++ b/src/content/articles/how-to-create-a-code-of-conduct-for-an-open-source-project.mdx @@ -6,12 +6,14 @@ lastUpdated: 2023-04-18 excerpt: "**Creating a code of conduct is vital for fostering a safe and welcoming community within an open-source project.** Often, this document is prepared before the community even forms, setting clear expectations and behavioral guidelines from the outset. The process includes defining goals and scope, researching existing codes of conduct, drafting, reviewing and approving the document, publishing, and regularly updating it. **Having a code of conduct helps establish a positive social atmosphere, protecting participants and maintainers from unproductive attitudes and ensuring a supportive environment for all.**

A well-defined code of conduct outlines expected behaviors, the scope of its application, and procedures for handling violations. **The Contributor Covenant is a widely-adopted example, promoting respect and inclusion within open source communities.** By researching existing codes like the Contributor Covenant, Ubuntu Code of Conduct, and others, project maintainers can identify best practices to incorporate. Once drafted, the document should be reviewed by key stakeholders and communicated clearly to the community. Regular reviews ensure the code remains relevant and effective, fostering a healthy, collaborative environment and addressing any violations appropriately to maintain community standards." +authors: julien +cover: /covers/how-to-create-a-code-of-conduct-for-an-open-source-project.svg tags: - Community - Contribution --- -import ContentImage from '../../../components/ContentImage.astro'; +import ContentImage from '../../components/ContentImage.astro'; {/* prettier-ignore */}

Creating a code of conduct is an essential step in ensuring a safe and welcoming community for an open-source project. In many cases, the code of conduct may be created before the community even exists. This can be beneficial as it ensures that the project starts with clear expectations and guidelines for behavior. The process of creating a code of conduct involves several steps, including defining goals and scope, researching existing codes of conduct, drafting the document, reviewing and approving the document, publishing and communicating the code of conduct, and regularly reviewing and updating the document.

@@ -45,9 +47,8 @@ Adopting the Contributor Covenant as your code of conduct offers several benefit - If you are unsure about how to create your own code of conduct, the Contributor Covenant is readily available and can provide a practical starting point for creating conduct that reflects the values of your community. - It has been [translated into multiple languages](https://www.contributor-covenant.org/translations/), making it accessible and inclusive for a diverse range of contributors. -:::tip[Looking to make a big impact as an open source contributor?] -Translate or help to translate the Contributor Covenant into your non-English language. With only five languages currently available in the latest version at the time of writing this article, your contribution can help make the open source community more accessible and inclusive. Visit the [Contributor Covenant GitHub repository](https://github.com/EthicalSource/contributor_covenant#translating) for instructions on how to get started and make a significant difference. -::: +> [!TIP] Looking to make a big impact as an open source contributor? +> Translate or help to translate the Contributor Covenant into your non-English language. With only five languages currently available in the latest version at the time of writing this article, your contribution can help make the open source community more accessible and inclusive. Visit the [Contributor Covenant GitHub repository](https://github.com/EthicalSource/contributor_covenant#translating) for instructions on how to get started and make a significant difference. ### Other Existing Codes of Conduct diff --git a/src/content/docs/articles/repobeats.mdx b/src/content/articles/repobeats.mdx similarity index 92% rename from src/content/docs/articles/repobeats.mdx rename to src/content/articles/repobeats.mdx index 8c6b0494..ce25ec50 100644 --- a/src/content/docs/articles/repobeats.mdx +++ b/src/content/articles/repobeats.mdx @@ -6,6 +6,8 @@ lastUpdated: 2024-04-02 excerpt: "**Repobeats is a tool that provides analytics for GitHub repositories, allowing users to embed detailed visual representations of repository activity into any Markdown file, including README files.** Maintained by axiom.com, Repobeats is free to use but not open source. It offers insights like the number of contributions in the last 30 days, the ratio of opened to closed issues, the number of PRs opened and commits, and a heatmap showcasing top contributors' activity. This visual representation highlights repository activity, encourages contributions, and celebrates top contributors.

To install Repobeats, users need a GitHub account. Simply log into Repobeats with GitHub credentials, select the repository to analyze, and obtain a URL for embedding the analytics image into Markdown files. This URL provides a comprehensive snapshot of repository activity, demonstrated with examples from repositories like openresource.dev and freeCodeCamp. **Repobeats' ability to display real-time data makes it a valuable resource for promoting and managing open-source projects on GitHub.**" +authors: julien +cover: /covers/repobeats.svg tags: - GitHub - Markdown @@ -13,7 +15,7 @@ tags: - Tools --- -import ShowcaseGitHubRepo from '../../../components/ShowcaseGitHubRepo.astro'; +import ShowcaseGitHubRepo from '../../components/ShowcaseGitHubRepo.astro'; {/* prettier-ignore */}

[Repobeats](https://repobeats.axiom.co/) is a tool that provides analytics of a GitHub repository that can be embedded in any Markdown file; including its README file.

@@ -36,9 +38,8 @@ Behind the scene, Repobeats uses public data available on GitHub. Installing Repobeats requires a GitHub account. -:::caution -Please consult their [Frequency Asked Questions](https://repobeats.axiom.co/) for more information before installing it. They explain for example how they use your email address. -::: +> [!WARNING] +> Please consult their [Frequency Asked Questions](https://repobeats.axiom.co/) for more information before installing it. They explain for example how they use your email address. To install Repobeats, it is pretty straightforward: diff --git a/src/content/docs/articles/running-a-local-ai-inside-obsidian-with-ollama.mdx b/src/content/articles/running-a-local-ai-inside-obsidian-with-ollama.mdx similarity index 97% rename from src/content/docs/articles/running-a-local-ai-inside-obsidian-with-ollama.mdx rename to src/content/articles/running-a-local-ai-inside-obsidian-with-ollama.mdx index bcbc2bf8..0d26a1c2 100644 --- a/src/content/docs/articles/running-a-local-ai-inside-obsidian-with-ollama.mdx +++ b/src/content/articles/running-a-local-ai-inside-obsidian-with-ollama.mdx @@ -4,6 +4,8 @@ description: 'Learn to set up Ollama with Obsidian for a completely local AI wri date: 2026-02-01 lastUpdated: 2026-04-11 excerpt: "**What if your Obsidian notes could think with you, without sending a single word to the cloud?** This article shows you how to build a fully local AI setup inside Obsidian using Ollama and the open Gemma 4 model. You'll learn why local AI makes sense for knowledge work, how to install and test Ollama from the command line, and how to connect it to Obsidian using community plugins for a seamless writing experience.

By the end of this tutorial, you'll have a private AI assistant that can rewrite text, summarize notes, brainstorm ideas, and help draft content all while keeping full control over your data. This setup combines Obsidian's local-first philosophy with Ollama's open source AI capabilities to create a knowledge workspace that's private, hackable, and built to last, proving that powerful tools don't have to come at the cost of control." +authors: julien +cover: /covers/running-a-local-ai-inside-obsidian-with-ollama.svg tags: - AI - Tools @@ -16,9 +18,9 @@ head: --- import { Image } from 'astro:assets'; -import { Steps } from '@astrojs/starlight/components'; -import ContentImage from '../../../components/ContentImage.astro'; -import ShowcaseGitHubRepo from '../../../components/ShowcaseGitHubRepo.astro'; +import { Steps } from '@deramond.dev/astro'; +import ContentImage from '../../components/ContentImage.astro'; +import ShowcaseGitHubRepo from '../../components/ShowcaseGitHubRepo.astro'; {/* prettier-ignore */}

**What if your notes could think with you, without sending a single word to the cloud?** In this article, we'll build a fully local AI setup inside Obsidian using Ollama and the open Gemma 4 model. You'll learn why local AI makes sense for knowledge work, how to install and test Ollama from the command line, how to connect it to Obsidian using community plugins, and how to use it for practical, everyday note-taking workflows, all while keeping full control over your data.

diff --git a/src/content/docs/about-author/index.mdx b/src/content/docs/about-author/index.mdx deleted file mode 100644 index 7459fc6a..00000000 --- a/src/content/docs/about-author/index.mdx +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: 'Julien Déramond' -description: Find some information about Julien Déramond, the author of Open {re}Source. -template: splash -editUrl: false -head: - - tag: meta - attrs: - property: 'og:type' - content: 'website' ---- - -import { Image } from 'astro:assets'; -import { Icon } from '@astrojs/starlight/components'; -import Button from '../../../components/Button.astro'; -import FooterLink from '../../../components/FooterLink.astro'; - -
- -
- -{/* prettier-ignore */} -

Software front-end engineer at Thales in Paris, France. Tech lead of Quantum, the Thales Design System.

- -Previously, I spent 16 years as a software engineer at Orange, where I served as Tech Lead for the Orange Design System and its web framework Boosted (a fork of Bootstrap). During this time, I contributed to various OSS projects within the Orange Open Source organization. - -My earlier experience includes developing Qt/QML applications for set-top boxes and creating numerous C/C++ Web Services as Apache modules. - -I've been a Bootstrap contributor since 2021 and joined the core team in 2022. I dedicate my spare time to contributing to various open-source projects whenever I can make a meaningful impact. - -Since 2023, I've been maintaining Open \{re}Source, and in 2024, I launched Advent of Open Source. I'm passionate about fostering collaboration between developers, designers, and accessibility practitioners. - -Beyond tech, I'm an avid live music enthusiast. You can explore my work in detail on OSS Insight. - -
- -
- -
- - - - - - - - - - - - - -
diff --git a/src/content/docs/cookie-policy/index.mdx b/src/content/docs/cookie-policy/index.mdx deleted file mode 100644 index 4e8f92fd..00000000 --- a/src/content/docs/cookie-policy/index.mdx +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: Cookie Policy -description: Learn about our use of local storage to enhance your browsing experience. Our cookie-free policy prioritizes your privacy and preferences. -template: splash -editUrl: false -head: - - tag: meta - attrs: - property: 'og:type' - content: 'website' ---- - -{/* prettier-ignore */} -

This website does not use cookies, but it does use local storage to enhance your browsing experience.

- -Local storage is a feature of modern web browsers that allows websites to store small amounts of data on your device, such as your preferences or login information. This information is stored locally on your device and is not sent to our servers or any third-party services. - -Local storage is used on this website to remember your theme preference. This helps us provide you with a smoother and more personalized browsing experience. - -If you wish to disable local storage on this website, you can do so by adjusting your browser settings. However, please note that this may impact your experience on our website and some theming features may not be available. - -If you have any questions about our use of local storage, please contact us at any of our social media accounts listed in the footer of this page. diff --git a/src/content/docs/guide/contributing-to-open-source-projects/finding-open-source-projects.mdx b/src/content/docs/guide/contributing-to-open-source-projects/finding-open-source-projects.mdx index de72f235..8f1103b3 100644 --- a/src/content/docs/guide/contributing-to-open-source-projects/finding-open-source-projects.mdx +++ b/src/content/docs/guide/contributing-to-open-source-projects/finding-open-source-projects.mdx @@ -5,7 +5,7 @@ date: 2023-04-06 lastUpdated: 2024-10-06 --- -import { Badge } from '@astrojs/starlight/components'; +import { Badge } from '@deramond.dev/astro'; import ContentImage from '../../../../components/ContentImage.astro'; {/* prettier-ignore */} @@ -41,7 +41,7 @@ Additionally, contributing to a project that you already use regularly can be a ### GitHub Hidden "Contribute" Page -Although it's not visible from the main interface or mentioned in the official documentation, every GitHub repository includes a hidden "Contribute" page. This page gathers issues that are suitable for new contributors, usually marked with the label, and provides a link to the repository's contributing guidelines. +Although it's not visible from the main interface or mentioned in the official documentation, every GitHub repository includes a hidden "Contribute" page. This page gathers issues that are suitable for new contributors, usually marked with the good first issue label, and provides a link to the repository's contributing guidelines. To access this page, simply append `/contribute` to the repository URL. For instance, the "Contribute" page for the Astro repository can be found at https://github.com/withastro/astro/contribute. @@ -53,13 +53,13 @@ If you still can't find an open-source project that interests you, don't worry, - [goodfirstissue.dev](https://goodfirstissue.dev/) curates easy pickings from popular open-source projects and narrows down projects for new open-source contributors. - The projects are added manually by the community via pull requests in the repository and must meet certain criteria such as having at least 3 issues labeled as , at least 10 contributors, a README.md with detailed setup instructions, and a CONTRIBUTING.md with guidelines for new contributors. The projects must also be maintained. + The projects are added manually by the community via pull requests in the repository and must meet certain criteria such as having at least 3 issues labeled as good first issue, at least 10 contributors, a README.md with detailed setup instructions, and a CONTRIBUTING.md with guidelines for new contributors. The projects must also be maintained. You can filter projects by programming languages. - [Up For Grabs](https://up-for-grabs.net/) is a list of projects which have curated tasks specifically for new contributors. - They gather projects that actively want help and label some of their issues with known labels like , , , etc. + They gather projects that actively want help and label some of their issues with known labels like up-for-grabs, good first issue, help wanted, etc. You can filter projects by programming languages, difficulty level, and more. diff --git a/src/content/docs/guide/contributing-to-open-source-projects/getting-involved-in-the-open-source-community.mdx b/src/content/docs/guide/contributing-to-open-source-projects/getting-involved-in-the-open-source-community.mdx index b678c3ad..4359d56f 100644 --- a/src/content/docs/guide/contributing-to-open-source-projects/getting-involved-in-the-open-source-community.mdx +++ b/src/content/docs/guide/contributing-to-open-source-projects/getting-involved-in-the-open-source-community.mdx @@ -41,9 +41,8 @@ Open source events are a great way to get involved in the community and meet oth - Meetups: Open source meetups are smaller events where developers and users come together to discuss a specific topic related to open-source software development. -:::tip[Looking for open source events?] -Check out our [Events](/resources/events) page. -::: +> [!TIP] Looking for open source events? +> Check out our [Events](/resources/events) page. --- diff --git a/src/content/docs/guide/contributing-to-open-source-projects/index.mdx b/src/content/docs/guide/contributing-to-open-source-projects/index.mdx index c100fc58..82c364ea 100644 --- a/src/content/docs/guide/contributing-to-open-source-projects/index.mdx +++ b/src/content/docs/guide/contributing-to-open-source-projects/index.mdx @@ -1,5 +1,6 @@ --- title: Contributing to Open-Source Projects +label: Introduction description: Start contributing to open-source projects today! Learn the basics of finding the right project and following community guidelines to make a meaningful impact in the open source community. --- diff --git a/src/content/docs/guide/creating-your-own-open-source-project/building-and-engaging-your-community.mdx b/src/content/docs/guide/creating-your-own-open-source-project/building-and-engaging-your-community.mdx index 7a12a550..a7341117 100644 --- a/src/content/docs/guide/creating-your-own-open-source-project/building-and-engaging-your-community.mdx +++ b/src/content/docs/guide/creating-your-own-open-source-project/building-and-engaging-your-community.mdx @@ -121,9 +121,8 @@ Events provide opportunities for real-time interaction, learning, and collaborat 3. **Conferences and Summits** provide an immersive experience for networking, learning, and collaboration. - Participate in existing open-source conferences or organize your own. Plan sessions, workshops, and networking events that cater to different interests and skill levels within your community. Promote these events widely and provide resources for participants to stay engaged before and after the event. -:::tip[Looking for open source events?] -Check out our [Events](/resources/events) page. -::: +> [!TIP] Looking for open source events? +> Check out our [Events](/resources/events) page. ## Maintaining Community Health diff --git a/src/content/docs/guide/creating-your-own-open-source-project/developing-your-project.mdx b/src/content/docs/guide/creating-your-own-open-source-project/developing-your-project.mdx index e152b5e0..d0c975b5 100644 --- a/src/content/docs/guide/creating-your-own-open-source-project/developing-your-project.mdx +++ b/src/content/docs/guide/creating-your-own-open-source-project/developing-your-project.mdx @@ -65,6 +65,5 @@ As you open up your project to the community, you'll start receiving feedback an - **Setting up a dedicated communication channel** is also possible such as a Discord server or a mailing list, to facilitate real-time communication and collaboration among contributors. However, it might not be necessary right away so we'll keep it for later. -:::caution -This chapter isn't finished yet! More content soon! -::: +> [!WARNING] +> This chapter isn't finished yet! More content soon! diff --git a/src/content/docs/guide/creating-your-own-open-source-project/index.mdx b/src/content/docs/guide/creating-your-own-open-source-project/index.mdx index 48b5fe2d..08784fca 100644 --- a/src/content/docs/guide/creating-your-own-open-source-project/index.mdx +++ b/src/content/docs/guide/creating-your-own-open-source-project/index.mdx @@ -1,5 +1,6 @@ --- title: Creating Your Own Open-Source Project +label: Introduction description: Learn how to create and contribute to your own open-source project by choosing an idea, planning, developing, and building a community with this comprehensive guide. --- diff --git a/src/content/docs/guide/creating-your-own-open-source-project/legal-considerations.mdx b/src/content/docs/guide/creating-your-own-open-source-project/legal-considerations.mdx index 25bdf2ae..c88cde57 100644 --- a/src/content/docs/guide/creating-your-own-open-source-project/legal-considerations.mdx +++ b/src/content/docs/guide/creating-your-own-open-source-project/legal-considerations.mdx @@ -29,6 +29,5 @@ When selecting a license for your project, consider factors such as the project' Applying a license is as simple as including a copy of the license text in your project repository and clearly stating that the project is licensed under those terms. -:::caution -This chapter isn't finished yet! More content soon! -::: +> [!WARNING] +> This chapter isn't finished yet! More content soon! diff --git a/src/content/docs/guide/creating-your-own-open-source-project/planning-your-project.mdx b/src/content/docs/guide/creating-your-own-open-source-project/planning-your-project.mdx index a61ca642..03d924c3 100644 --- a/src/content/docs/guide/creating-your-own-open-source-project/planning-your-project.mdx +++ b/src/content/docs/guide/creating-your-own-open-source-project/planning-your-project.mdx @@ -8,9 +8,8 @@ lastUpdated: 2023-04-16 {/* prettier-ignore */}

Planning is often considered a crucial step in creating a successful open-source project. It can lay the groundwork for what you want to achieve, identify your target audience, and help you determine the best path forward. However, not all projects start with a specific plan in place. Some grow organically from a community or from the code itself. Each project has its own unique history and creation story, and what works for one project may not work for another. In this chapter, we'll explore the key aspects of planning your open-source project, while also acknowledging that every project is unique and there's no one-size-fits-all approach.

-:::note -Please note that while each part is designed to build on the previous one, it is not mandatory to read them right now. However, we understand that not all projects start with a specific plan in place. Think of these parts as a valuable resource that you can refer back to as needed. So feel free to read at your own pace and focus on the sections that are most relevant to you at the moment. -::: +> [!NOTE] +> Please note that while each part is designed to build on the previous one, it is not mandatory to read them right now. However, we understand that not all projects start with a specific plan in place. Think of these parts as a valuable resource that you can refer back to as needed. So feel free to read at your own pace and focus on the sections that are most relevant to you at the moment. ## Define the Problem You Want to Solve diff --git a/src/content/docs/guide/financing-open-source-projects/effective-fundraising-strategies.mdx b/src/content/docs/guide/financing-open-source-projects/effective-fundraising-strategies.mdx index 073d4606..bf5517ba 100644 --- a/src/content/docs/guide/financing-open-source-projects/effective-fundraising-strategies.mdx +++ b/src/content/docs/guide/financing-open-source-projects/effective-fundraising-strategies.mdx @@ -96,21 +96,18 @@ Several open-source projects have successfully leveraged crowdfunding campaigns ## Corporate Partnerships -:::caution -This section isn't written yet! More content soon! -::: +> [!WARNING] +> This section isn't written yet! More content soon! ## Subscriptions Models -:::caution -This section isn't written yet! More content soon! -::: +> [!WARNING] +> This section isn't written yet! More content soon! ## Grants and Foundations -:::caution -This section isn't written yet! More content soon! -::: +> [!WARNING] +> This section isn't written yet! More content soon! --- diff --git a/src/content/docs/guide/financing-open-source-projects/fostering-a-sustainable-ecosystem.mdx b/src/content/docs/guide/financing-open-source-projects/fostering-a-sustainable-ecosystem.mdx index 33fac340..af5efe8b 100644 --- a/src/content/docs/guide/financing-open-source-projects/fostering-a-sustainable-ecosystem.mdx +++ b/src/content/docs/guide/financing-open-source-projects/fostering-a-sustainable-ecosystem.mdx @@ -3,6 +3,5 @@ title: Fostering a Sustainable Ecosystem description: '' --- -:::caution -Content coming soon -::: +> [!WARNING] +> Content coming soon diff --git a/src/content/docs/guide/financing-open-source-projects/index.mdx b/src/content/docs/guide/financing-open-source-projects/index.mdx index 2c9ea833..2e10544b 100644 --- a/src/content/docs/guide/financing-open-source-projects/index.mdx +++ b/src/content/docs/guide/financing-open-source-projects/index.mdx @@ -1,5 +1,6 @@ --- title: Financing Open-Source Projects +label: Introduction description: Discover sustainable funding models and strategies to finance your open-source projects. Empower your project''s growth and long-term viability. --- diff --git a/src/content/docs/guide/financing-open-source-projects/resource-allocation-and-budgeting.mdx b/src/content/docs/guide/financing-open-source-projects/resource-allocation-and-budgeting.mdx index 4a6e10b0..4d993bc9 100644 --- a/src/content/docs/guide/financing-open-source-projects/resource-allocation-and-budgeting.mdx +++ b/src/content/docs/guide/financing-open-source-projects/resource-allocation-and-budgeting.mdx @@ -3,6 +3,5 @@ title: Resource Allocation and Budgeting description: '' --- -:::caution -Content coming soon -::: +> [!WARNING] +> Content coming soon diff --git a/src/content/docs/guide/financing-open-source-projects/transparency-accountability-and-community-involvement.mdx b/src/content/docs/guide/financing-open-source-projects/transparency-accountability-and-community-involvement.mdx index e01ecbef..b2b98ac3 100644 --- a/src/content/docs/guide/financing-open-source-projects/transparency-accountability-and-community-involvement.mdx +++ b/src/content/docs/guide/financing-open-source-projects/transparency-accountability-and-community-involvement.mdx @@ -3,6 +3,5 @@ title: Transparency, Accountability, and Community Involvement description: '' --- -:::caution -Content coming soon -::: +> [!WARNING] +> Content coming soon diff --git a/src/content/docs/guide/financing-open-source-projects/understanding-funding-models.mdx b/src/content/docs/guide/financing-open-source-projects/understanding-funding-models.mdx index d887f4f5..7f5b4d9a 100644 --- a/src/content/docs/guide/financing-open-source-projects/understanding-funding-models.mdx +++ b/src/content/docs/guide/financing-open-source-projects/understanding-funding-models.mdx @@ -43,11 +43,10 @@ But sponsorships and donations differ in that sponsorships brings a more busines - **Dependence**: Over-reliance on sponsors can create vulnerability if support is withdrawn. Diversification is essential. - **Influence**: Sponsors may expect influence over project decisions or branding. Maintaining project independence can be challenging. -:::tip[Looking to sponsor Open {re}Source?] -**Become a sponsor and support the development of this platform** dedicated to share knowledge and resources about open source. - -More information on our [GitHub Sponsors page](https://github.com/sponsors/Open-reSource). -::: +> [!TIP] Looking to sponsor Open {re}Source? +> **Become a sponsor and support the development of this platform** dedicated to share knowledge and resources about open source. +> +> More information on our [GitHub Sponsors page](https://github.com/sponsors/Open-reSource). ## Crowdfunding diff --git a/src/content/docs/guide/getting-started-with-open-source/index.mdx b/src/content/docs/guide/getting-started-with-open-source/index.mdx index 8a37a83a..ee84a1c9 100644 --- a/src/content/docs/guide/getting-started-with-open-source/index.mdx +++ b/src/content/docs/guide/getting-started-with-open-source/index.mdx @@ -1,5 +1,6 @@ --- title: Getting Started With Open Source +label: Introduction description: Discover the fundamentals of open source and unlock its benefits! Explore the vibrant world of collaborative projects and find your perfect fit. --- diff --git a/src/content/docs/guide/index.mdx b/src/content/docs/guide/index.mdx index 6d511823..c31fe256 100644 --- a/src/content/docs/guide/index.mdx +++ b/src/content/docs/guide/index.mdx @@ -1,5 +1,6 @@ --- title: Guide +label: Introduction description: 'Unlock the full potential of open source with our guide! Explore various topics in our themed modules and chapters that will guide your learning journey. Let this guide be your trusted companion on the road to open source mastery.' --- diff --git a/src/content/docs/guide/maintaining-open-source-projects/ensuring-project-sustainability.mdx b/src/content/docs/guide/maintaining-open-source-projects/ensuring-project-sustainability.mdx index 478669ab..9e51988c 100644 --- a/src/content/docs/guide/maintaining-open-source-projects/ensuring-project-sustainability.mdx +++ b/src/content/docs/guide/maintaining-open-source-projects/ensuring-project-sustainability.mdx @@ -3,6 +3,5 @@ title: Ensuring Project Sustainability description: '' --- -:::caution -Content coming soon -::: +> [!WARNING] +> Content coming soon diff --git a/src/content/docs/guide/maintaining-open-source-projects/fostering-a-strong-and-inclusive-community.mdx b/src/content/docs/guide/maintaining-open-source-projects/fostering-a-strong-and-inclusive-community.mdx index 96228ab8..5420f08d 100644 --- a/src/content/docs/guide/maintaining-open-source-projects/fostering-a-strong-and-inclusive-community.mdx +++ b/src/content/docs/guide/maintaining-open-source-projects/fostering-a-strong-and-inclusive-community.mdx @@ -20,6 +20,5 @@ Creating **a system of achievements** like [Astro Badges](https://astro.badg.es/ You can reproduce this system for your own project as [Chris Swithinbank](https://github.com/delucis) gratefully shared the [source code on GitHub](https://github.com/delucis/astro-badge). -:::caution -This chapter isn't finished yet! More content soon! -::: +> [!WARNING] +> This chapter isn't finished yet! More content soon! diff --git a/src/content/docs/guide/maintaining-open-source-projects/index.mdx b/src/content/docs/guide/maintaining-open-source-projects/index.mdx index 45e08d18..6c37b63a 100644 --- a/src/content/docs/guide/maintaining-open-source-projects/index.mdx +++ b/src/content/docs/guide/maintaining-open-source-projects/index.mdx @@ -1,5 +1,6 @@ --- title: Maintaining Open-Source Projects +label: Introduction description: Learn the essential strategies and best practices for successfully maintaining open-source projects. Master project management and community engagement. --- diff --git a/src/content/docs/guide/maintaining-open-source-projects/managing-contributions-and-community-engagement.mdx b/src/content/docs/guide/maintaining-open-source-projects/managing-contributions-and-community-engagement.mdx index 0acf0c52..e2bbce10 100644 --- a/src/content/docs/guide/maintaining-open-source-projects/managing-contributions-and-community-engagement.mdx +++ b/src/content/docs/guide/maintaining-open-source-projects/managing-contributions-and-community-engagement.mdx @@ -3,6 +3,5 @@ title: Managing Contributions and Community Engagement description: '' --- -:::caution -Content coming soon -::: +> [!WARNING] +> Content coming soon diff --git a/src/content/docs/guide/promoting-open-source-projects/building-a-strong-project-identity.mdx b/src/content/docs/guide/promoting-open-source-projects/building-a-strong-project-identity.mdx index 4f27172e..fc6e72c4 100644 --- a/src/content/docs/guide/promoting-open-source-projects/building-a-strong-project-identity.mdx +++ b/src/content/docs/guide/promoting-open-source-projects/building-a-strong-project-identity.mdx @@ -152,9 +152,8 @@ The world of events and conferences for your open-source project is not just abo First up, **strategically select the events and conferences** you want to participate in. Don't just go for the biggest names; consider the ones most aligned with your project. Quality over quantity is the name of the game. -:::tip[Looking for open source events?] -Check out our [Events](/resources/events) page. -::: +> [!TIP] Looking for open source events? +> Check out our [Events](/resources/events) page. When you're at these events, **prepare your elevator pitch**. Condense your project's essence into a brief and compelling pitch that you can deliver in the time it takes to ride an elevator. Make it catchy, clear, and intriguing to grab attention. diff --git a/src/content/docs/guide/promoting-open-source-projects/crafting-an-engaging-project-website.mdx b/src/content/docs/guide/promoting-open-source-projects/crafting-an-engaging-project-website.mdx index 81ec6d0a..15300b8b 100644 --- a/src/content/docs/guide/promoting-open-source-projects/crafting-an-engaging-project-website.mdx +++ b/src/content/docs/guide/promoting-open-source-projects/crafting-an-engaging-project-website.mdx @@ -3,6 +3,5 @@ title: Crafting an Engaging Project Website description: '' --- -:::caution -Content coming soon -::: +> [!WARNING] +> Content coming soon diff --git a/src/content/docs/guide/promoting-open-source-projects/index.mdx b/src/content/docs/guide/promoting-open-source-projects/index.mdx index a729e2a4..1f72b1d2 100644 --- a/src/content/docs/guide/promoting-open-source-projects/index.mdx +++ b/src/content/docs/guide/promoting-open-source-projects/index.mdx @@ -1,5 +1,6 @@ --- title: Promoting Open-Source Projects +label: Introduction description: Discover effective strategies to promote open-source projects, engage the community, and increase adoption. Unlock the power of open collaboration. --- diff --git a/src/content/docs/guide/what-is-open-source/benefits-of-open-source.mdx b/src/content/docs/guide/what-is-open-source/benefits-of-open-source.mdx index 4156d0eb..62a0fea3 100644 --- a/src/content/docs/guide/what-is-open-source/benefits-of-open-source.mdx +++ b/src/content/docs/guide/what-is-open-source/benefits-of-open-source.mdx @@ -170,21 +170,18 @@ While the flexibility of open source is a significant benefit, it also presents ## Longevity and Sustainability -:::caution -This section isn't written yet! More content soon! -::: +> [!WARNING] +> This section isn't written yet! More content soon! ## Ethical and Social Responsibility -:::caution -This section isn't written yet! More content soon! -::: +> [!WARNING] +> This section isn't written yet! More content soon! ## Community and Collaboration -:::caution -This section isn't written yet! More content soon! -::: +> [!WARNING] +> This section isn't written yet! More content soon! ## TL;DR: The Benefits of Open Source diff --git a/src/content/docs/guide/what-is-open-source/index.mdx b/src/content/docs/guide/what-is-open-source/index.mdx index 84a0780b..7c7d4a89 100644 --- a/src/content/docs/guide/what-is-open-source/index.mdx +++ b/src/content/docs/guide/what-is-open-source/index.mdx @@ -1,5 +1,6 @@ --- title: What Is Open Source? +label: Introduction description: Cover open source definition, brief history, and importance. Learn how community-driven innovation empowers developers. --- diff --git a/src/content/docs/index.mdx b/src/content/docs/index.mdx deleted file mode 100644 index b07f4ad4..00000000 --- a/src/content/docs/index.mdx +++ /dev/null @@ -1,154 +0,0 @@ ---- -title: Open {re}Source -description: Join open source, learn to create, manage, and contribute to projects with Open {re}Source. Make a difference today by sharing and collaborating. -template: splash -editUrl: false -hero: - tagline: "

Your platform for sharing and discovering the open source world

Understand how it works, and learn how to create, manage, and contribute to open-source projects. Join the open source community today and start making a difference.

" - image: - alt: Open {re}Source logo - dark: ../../assets/logo-dark.svg - light: ../../assets/logo.svg - actions: - - text: Follow the guide - link: /guide/ - icon: right-arrow - variant: primary - - text: Read the articles - link: /articles - icon: open-book - variant: secondary - - text: GitHub - link: https://github.com/Open-reSource/openresource.dev - icon: external - variant: minimal -head: - - tag: title - content: Open {re}Source - - tag: meta - attrs: - property: 'og:type' - content: 'website' ---- - -import { Image } from 'astro:assets'; -import { Icon } from '@astrojs/starlight/components'; -import Button from '../../components/Button.astro'; - -
- -
-
-
-

Support Us

-

- Help us continue to build and maintain this project by becoming a sponsor or dropping a star on our GitHub - repository. -

-
- - -
-
-
-
- -
- -
-
-
-
-

Showcase Your Project

-

- Showcase your amazing project and inspire others to join our community. Share your work and get feedback from - our talented team. -

-
- - -
-
-
- -
-
-
-
- -
- -
-
-
-
-
-
-
-
- -
-
-
-
-
-

Read the Guide

-

- Dive into our comprehensive guide to learn everything you need to know about open source. From getting started - to advanced topics, we've got you covered. -

-
- -
-
-
-
-
- -
- -
-
-
-
-

Read the Articles

-

- Explore our latest articles and blog posts to stay up-to-date with the latest trends, best practices, and - industry insights. -

-
- - -
-
-
-
-
-
-
- -
-
-
-
-
-
-
diff --git a/src/content/docs/resources/books.mdx b/src/content/docs/resources/books.mdx index 5a1dd0f3..4071db06 100644 --- a/src/content/docs/resources/books.mdx +++ b/src/content/docs/resources/books.mdx @@ -9,7 +9,7 @@ head: --- import { Image } from 'astro:assets'; -import banner from '../../../assets/resources/books.png'; +import banner from '../../../assets/resources/books.svg'; diff --git a/src/content/docs/resources/events.mdx b/src/content/docs/resources/events.mdx index 057d3426..1f855b3b 100644 --- a/src/content/docs/resources/events.mdx +++ b/src/content/docs/resources/events.mdx @@ -9,7 +9,7 @@ head: --- import { Image } from 'astro:assets'; -import banner from '../../../assets/resources/events.png'; +import banner from '../../../assets/resources/events.svg'; diff --git a/src/content/docs/resources/open-sourcerers.mdx b/src/content/docs/resources/open-sourcerers.mdx index d3330f62..b382489e 100644 --- a/src/content/docs/resources/open-sourcerers.mdx +++ b/src/content/docs/resources/open-sourcerers.mdx @@ -9,7 +9,7 @@ head: --- import { Image } from 'astro:assets'; -import banner from '../../../assets/resources/open-sourcerers.png'; +import banner from '../../../assets/resources/open-sourcerers.svg'; diff --git a/src/content/docs/resources/podcasts.md b/src/content/docs/resources/podcasts.md index 61e0baf5..64dcef54 100644 --- a/src/content/docs/resources/podcasts.md +++ b/src/content/docs/resources/podcasts.md @@ -8,6 +8,8 @@ head: content: 'website' --- +![](../../../assets/resources/podcasts.svg) + List of podcasts and interviews related to open source. - [Coffee & Open Source](https://coffeeandopensource.com) by Isaac Levin – Interviews with notable folks in the OSS Community. diff --git a/src/content/docs/resources/tools.mdx b/src/content/docs/resources/tools.mdx index e5d672a1..3d488db5 100644 --- a/src/content/docs/resources/tools.mdx +++ b/src/content/docs/resources/tools.mdx @@ -9,7 +9,7 @@ head: --- import { Image } from 'astro:assets'; -import banner from '../../../assets/resources/tools.png'; +import banner from '../../../assets/resources/tools.svg'; diff --git a/src/content/docs/showcase/index.mdx b/src/content/docs/showcase/index.mdx deleted file mode 100644 index b439512b..00000000 --- a/src/content/docs/showcase/index.mdx +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Showcase -description: 'Explore what the Open {re}Source community builds for the open source world.' -template: splash -editUrl: false -head: - - tag: meta - attrs: - property: 'og:type' - content: 'website' ---- - -import Showcase from '../../../components/Showcase.astro'; - -

Explore what the Open {re}Source community builds for the open source world.

- - diff --git a/src/layouts/Page.astro b/src/layouts/Page.astro new file mode 100644 index 00000000..0a7b54f4 --- /dev/null +++ b/src/layouts/Page.astro @@ -0,0 +1,15 @@ +--- +import { Prose, Section, SiteLayout } from '@deramond.dev/astro'; + +// Layout of the Markdown pages outside the guide (about the author, cookie policy). +const { frontmatter } = Astro.props; +--- + + +
+

{frontmatter.title}

+ + + +
+
diff --git a/src/og-background.png b/src/og-background.png deleted file mode 100644 index 4ca70b8e..00000000 Binary files a/src/og-background.png and /dev/null differ diff --git a/src/og-logo.png b/src/og-logo.png deleted file mode 100644 index 98098944..00000000 Binary files a/src/og-logo.png and /dev/null differ diff --git a/src/pages/about-author.mdx b/src/pages/about-author.mdx new file mode 100644 index 00000000..cd329f12 --- /dev/null +++ b/src/pages/about-author.mdx @@ -0,0 +1,41 @@ +--- +layout: ../layouts/Page.astro +title: 'Julien Déramond' +description: Find some information about Julien Déramond, the author of Open {re}Source. +--- + +export const prerender = true; + +import { Image } from 'astro:assets'; +import { Button, SocialLinks } from '@deramond.dev/astro'; + +
+ +
+ +{/* prettier-ignore */} +

Software front-end engineer at Thales in Paris, France. Tech lead of Quantum, the Thales Design System.

+ +Previously, I spent 16 years as a software engineer at Orange, where I served as Tech Lead for the Orange Design System and its web framework Boosted (a fork of Bootstrap). During this time, I contributed to various OSS projects within the Orange Open Source organization. + +My earlier experience includes developing Qt/QML applications for set-top boxes and creating numerous C/C++ Web Services as Apache modules. + +I've been a Bootstrap contributor since 2021 and joined the core team in 2022. I dedicate my spare time to contributing to various open-source projects whenever I can make a meaningful impact. + +Since 2023, I've been maintaining Open \{re}Source, and in 2024, I launched Advent of Open Source. I'm passionate about fostering collaboration between developers, designers, and accessibility practitioners. + +Beyond tech, I'm an avid live music enthusiast. You can explore my work in detail on OSS Insight. + +
+ +
+ + diff --git a/src/pages/cookie-policy.mdx b/src/pages/cookie-policy.mdx new file mode 100644 index 00000000..e7a7a873 --- /dev/null +++ b/src/pages/cookie-policy.mdx @@ -0,0 +1,16 @@ +--- +layout: ../layouts/Page.astro +title: Cookie Policy +description: This website uses neither cookies nor local storage. Our cookie-free policy prioritizes your privacy. +--- + +export const prerender = true; + +{/* prettier-ignore */} +

This website does not use cookies, and it does not use local storage either.

+ +Nothing is stored on your device when you browse this website: no preferences, no login information, no tracking identifier. + +Visits are counted with Vercel Web Analytics, which works without cookies and does not identify you across websites. + +If you have any questions about this policy, please contact us at any of our social media accounts listed in the footer of this page. diff --git a/src/pages/index.astro b/src/pages/index.astro new file mode 100644 index 00000000..d4902c67 --- /dev/null +++ b/src/pages/index.astro @@ -0,0 +1,140 @@ +--- +export const prerender = true; + +import { getCollection } from 'astro:content'; +import { + Button, + Hero, + PostCard, + ProjectCard, + ProjectGrid, + Section, + SectionHeader, + SiteLayout, +} from '@deramond.dev/astro'; +import { isoDate, postHref, readingTime, sortPosts } from '@deramond.dev/astro/blog'; +import ShowcaseBanner from '../components/ShowcaseBanner.astro'; +import hero from '../brand/hero.svg'; + +// One icon per guide module, keyed by the module's folder. +const icons = import.meta.glob('../brand/modules/*.svg', { query: '?raw', import: 'default', eager: true }); +const iconOf = (id: string) => icons[`../brand/modules/${id.slice('guide/'.length)}.svg`]; + +const modules = (await getCollection('docs')) + .filter((entry) => /^guide\/[^/]+$/.test(entry.id)) + .sort((a, b) => a.id.localeCompare(b.id)); +const order = [ + 'what-is-open-source', + 'getting-started-with-open-source', + 'contributing-to-open-source-projects', + 'creating-your-own-open-source-project', + 'maintaining-open-source-projects', + 'promoting-open-source-projects', + 'financing-open-source-projects', +]; +modules.sort((a, b) => order.indexOf(a.id.slice(6)) - order.indexOf(b.id.slice(6))); + +const articles = sortPosts(await getCollection('articles'), { production: import.meta.env.PROD }).slice(0, 3); +--- + + + + + Open source, {'{re}'}explained. + + + + + + + + +
+ + + {modules.map((entry, i) => ( + + + + ))} + +
+ +
+ +
+ {articles.map((post) => ( + + ))} +
+
+ +
+
+ +
+ + +
+ +
+ +
+ + +
+
+
+ + diff --git a/src/pages/og/[...slug].ts b/src/pages/og/[...slug].ts deleted file mode 100644 index c4f3dc3b..00000000 --- a/src/pages/og/[...slug].ts +++ /dev/null @@ -1,37 +0,0 @@ -import { getCollection } from 'astro:content'; -import { OGImageRoute } from 'astro-og-canvas'; - -export const prerender = true; - -const entries = await getCollection('docs'); - -const pages = Object.fromEntries(entries.map(({ data, id }) => [id, { data }])); - -export const { getStaticPaths, GET } = await OGImageRoute({ - pages, - getImageOptions: (_path, page: (typeof pages)[number]) => { - return { - title: page.data.title, - description: page.data.description, - logo: { - path: './src/og-logo.png', - size: [200], - }, - bgImage: { - path: './src/og-background.png', - }, - font: { - title: { - color: [255, 255, 255], - weight: 'Bold', - families: ['Inter Variable'], - }, - description: { - color: [255, 255, 255], - families: ['Inter Variable'], - }, - }, - fonts: ['https://cdn.jsdelivr.net/fontsource/fonts/inter:vf@latest/latin-wght-normal.woff2'], - }; - }, -}); diff --git a/src/pages/showcase.astro b/src/pages/showcase.astro new file mode 100644 index 00000000..343ccffe --- /dev/null +++ b/src/pages/showcase.astro @@ -0,0 +1,15 @@ +--- +export const prerender = true; + +import { Section, SectionHeader, SiteLayout } from '@deramond.dev/astro'; +import Showcase from '../components/Showcase.astro'; + +const description = 'Explore what the Open {re}Source community builds for the open source world.'; +--- + + +
+ + +
+
diff --git a/src/styles/custom.css b/src/styles/custom.css deleted file mode 100644 index 357958ee..00000000 --- a/src/styles/custom.css +++ /dev/null @@ -1,326 +0,0 @@ -/* Dark mode colors. */ -:root { - --sl-color-accent-low: #191b51; - --sl-color-accent: #7480ff; - --sl-color-accent-high: #b9c5ff; - --sl-color-secondary-low: #3a1624; - --sl-color-secondary: #892a75; - --sl-color-secondary-high: #eab9c8; - --sl-color-white: #ffffff; - --sl-color-gray-1: #eceef2; - --sl-color-gray-2: #c0c2c7; - --sl-color-gray-3: #888b96; - --sl-color-gray-4: #545861; - --sl-color-gray-5: #353841; - --sl-color-gray-6: #24272f; - --sl-color-black: #17181c; -} -/* Light mode colors. */ -:root[data-theme='light'] { - --sl-color-accent-low: #cbd4ff; - --sl-color-accent: #4a00ff; - --sl-color-accent-high: #232179; - --sl-color-secondary-low: #f49bb7; - --sl-color-secondary: #ff5c79; - --sl-color-secondary-high: #c1105a; - --sl-color-white: #17181c; - --sl-color-gray-1: #24272f; - --sl-color-gray-2: #353841; - --sl-color-gray-3: #545861; - --sl-color-gray-4: #888b96; - --sl-color-gray-5: #c0c2c7; - --sl-color-gray-6: #eceef2; - --sl-color-gray-7: #f5f6f8; - --sl-color-black: #ffffff; -} - -/* - * Ensure a double outline for focus-visible elements for better accessibility. - * For instance, for the primary button having the primary color as the background color. - */ -:focus-visible { - outline: 4px solid var(--sl-color-accent) !important; - outline-offset: 2px; - box-shadow: var(--sl-color-black) 0 0 0 2px; -} - -::selection { - background: var(--sl-color-accent); - color: var(--sl-color-black); -} - -.lead { - font-size: 1.125rem; - color: var(--sl-color-white); - font-weight: 500; -} - -:is(h1, h2, h3, h4, h5, h6), -.sl-markdown-content :is(h1, h2, h3, h4, h5, h6) { - letter-spacing: -1px; - font-weight: 800; - line-height: 1.1; -} - -.sl-markdown-content { - color: var(--sl-color-gray-2); - font-size: var(--sl-text-lg); - line-height: 1.6; - font-weight: 400; -} - -.sl-markdown-content strong { - color: var(--sl-color-white); -} - -.sl-markdown-content hr:not(:where(.not-content *)) { - padding-top: 1rem; - margin-bottom: 2rem; -} - -.sl-markdown-content blockquote { - margin-top: 1rem; -} - -.sl-markdown-content blockquote p { - font-style: italic; -} - -.stretched-link:after { - position: absolute; - inset: 0; - z-index: 1; - content: ''; -} - -.fw-bold { - font-weight: bold; -} - -.rounded-image { - display: block; - aspect-ratio: 1 / 1; - overflow: hidden; - width: 6rem; - border-radius: 9999px; -} - -.hero .stack h1 { - font-weight: bold; -} - -.hero a { - font-weight: 600; -} - -.hero img { - padding: 4rem; -} - -.homepage-section { - width: 100%; - padding-top: 3rem; - padding-bottom: 3rem; -} - -.homepage-section .container { - width: 100%; - margin-left: auto; - margin-right: auto; - padding-left: 1rem; - padding-right: 1rem; -} - -.homepage-section .grid { - display: grid; - gap: 2rem; -} - -.homepage-section .content { - text-align: center; -} - -.homepage-section .content h2 { - font-size: 1.875rem; - line-height: 2.25rem; - font-weight: 700; - letter-spacing: -1px; -} - -.homepage-section .content > p { - max-width: 700px; -} - -.homepage-section .actions { - display: flex; - gap: 0.5rem; - justify-content: center; - flex-direction: column; -} - -.homepage-section .homepage-img { - display: flex; - justify-content: center; - margin-top: 0; -} - -.homepage-section .homepage-img > img { - aspect-ratio: 500 / 400; - object-fit: cover; - border-radius: 0.5rem; -} - -@media (min-width: 400px) { - .homepage-section .actions { - flex-direction: row; - } -} - -@media (min-width: 640px) { - .homepage-section .content h2 { - font-size: 2.25rem; - line-height: 2.5rem; - } -} - -@media (min-width: 768px) { - .homepage-section { - padding-top: 6rem; - padding-bottom: 6rem; - } - - .homepage-section .container { - padding-left: 1.5rem; - padding-right: 1.5rem; - } - - .homepage-section .grid { - grid-template-columns: repeat(2, minmax(0, 1fr)); - } - - .homepage-section .content { - text-align: left; - } - - .homepage-section .content h2 { - font-size: 3rem; - line-height: 1; - } - - .homepage-section .actions { - justify-content: flex-start; - } - - .homepage-section .content > p { - font-size: 1.25rem; - line-height: 1.625; - } -} - -@media (min-width: 1024px) { - .homepage-section { - padding-top: 8rem; - padding-bottom: 8rem; - } -} - -@media (max-width: 768px) { - .homepage-section-mobile-inverted .grid { - display: flex; - flex-direction: column-reverse; - } -} - -/* - * Mockup phone rendering for the homepage based on daisyUI "Phone mockup" component - * Available at https://daisyui.com/components/mockup-phone/ - * Licensed under MIT License - */ - -.mockup-phone { - display: inline-block; - border: 4px solid #444; - border-radius: 50px; - background-color: #000; - padding: 10px; - margin: 0 auto; - overflow: hidden; -} - -.mockup-phone .camera { - position: relative; - top: 0; - left: 0; - background: #000; - height: 25px; - width: 150px; - margin: 0 auto; - border-bottom-left-radius: 17px; - border-bottom-right-radius: 17px; - z-index: 11; -} - -.mockup-phone .camera:before { - content: ''; - position: absolute; - top: 35%; - left: 50%; - width: 50px; - height: 4px; - border-radius: 5px; - background-color: #0c0b0e; - transform: translate(-50%, -50%); -} - -.mockup-phone .camera:after { - content: ''; - position: absolute; - top: 20%; - left: 70%; - width: 8px; - height: 8px; - border-radius: 5px; - background-color: #0f0b25; -} - -.mockup-phone .display { - overflow: hidden; - border-radius: 40px; - margin-top: -25px; -} - -.artboard { - width: 100%; -} - -.artboard-demo { - display: flex; - flex: none; - flex-direction: column; - align-items: center; - justify-content: center; -} - -.artboard-demo { - background-color: white; - box-shadow: - 0 1px 3px #0000001a, - 0 1px 2px #0000000f; -} - -.artboard.phone-1 { - width: 320px; - height: 568px; -} - -kbd { - background-color: var(--sl-color-gray-6); - border-radius: 6px; - box-shadow: inset 0 -1px 0 var(--sl-color-black); - color: var(--sl-color-white); - font-size: 0.875rem; - font-weight: 500; - line-height: 1; - padding: 4px 8px; - font-family: monospace; -} diff --git a/src/styles/site.css b/src/styles/site.css new file mode 100644 index 00000000..4d8248f0 --- /dev/null +++ b/src/styles/site.css @@ -0,0 +1,23 @@ +/* + * Open {re}Source's own rules, on top of @deramond.dev/astro (loaded after it on every page). + * Brand values come from the tokens; nothing here is a colour or a size of its own. + */ + +/* The opening paragraph of a page or an article. */ +.lead { + font: var(--type-lead); + color: var(--color-fg); +} + +.author-picture img { + display: block; + width: var(--space-18); + height: auto; + aspect-ratio: 1; + border-radius: var(--radius-pill); + border: var(--stroke-ui) solid var(--color-primary-dim); +} + +.author-actions { + margin-block: var(--space-7) var(--space-5); +}