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 **β οΈ NOTE:** The Gatsby code is located in the root directory. After the build process the `./public` directory is generated. Gatsby does not allow to edit or customize the public directory, so we have to build code every time the Gatsby code changes. Gatsby automatically provides a build script on `Package.json` which is required by the GitHub action to execute the build process.
+Pull requests are test-built on Node 24 and 26 by `build.yml`; `lint.yml` runs ESLint (uploaded to code scanning), Prettier and Stylelint.
diff --git a/docs/project-structure.md b/docs/project-structure.md
index b6d9ba95..fae28fce 100644
--- a/docs/project-structure.md
+++ b/docs/project-structure.md
@@ -1,58 +1,36 @@
-## Project Structure (Only includes important files)
-
-```
-βββ blog - Markdown files for the blog posts
-βββ data - Meta data for the website
-βββ modules - Markdown files for the modules data
-βββ scripts - Scripts to deploy the website to GitHub and Render
-βββ src - Most of the website's actual code as explained β
-β βββ components - React components we see throughout the websiteΒΉ
-β βββ layout - The structure of the website, may be interpreted as a skeleton which is later filled with react components to bring it to life
-β βββ pages - Gatsby uses the pages directory to generate all the pages we see throughout the websiteΒ²
-β βββ template - Not all pages needs to hard-coded, Gatsby uses templates to programmatically generate pages Β³
-βββ static - Images, Logos, robots.txt etc
-
-βββ ...
-βββ gatsby-node.js - Gatsby's website generating pipeline
-βββ ...
-```
-
----
-
-**ΒΉ :** Pages can consist of two types of data, static and dynamic. If the data is static (like the homepage, about page), it can be hard-coded but if some elements require a state to be maintained to be reused on a different part of the website we can extract it out by building them as components and using by importing them as needed. So things like a search bar, search results, a header that is used on multiple pages are extracted into their components.
-
-> **β οΈ Note:** Right now, even things like about page and homepage have their components but we can develop them as their own page without needing components.
-
----
-
-**Β² :** As stated Gatsby uses this directory to generate pages, any filed place here will generate into the page using the file name. As most of the pages have the same structure [Header > Body > Footer] we use a predefined layout to reduce redundancy and have a central point to modify our layout. Gatsby consumes the layout, data, and components if any to generate the pages.
-
-This is how a page generates or a relationship looks,
-
-
-
----
-
-**Β³ :** We'll be constantly adding new blog posts, modules to the website. Creating their pages manually is a tedious task. So we let Gatsby figure out where the files are and then generate those pages automatically.
-
-Imagine this website a conveyor belt (a pipeline), Gatsby goes step by step to generate the website, one of the initial steps is processing all the markdown files inside the project directory (which are inside /blog and /module) directory and index them. Gatsby provides us with an API to modify how the build pipeline works.
-
-Navigate to [LN50](https://github.com/MovingBlocks/ModuleSite/blob/master/gatsby-node.js#L50) of gatsby-node.js and you will find a `createPages` function, which is called after all of the markdown files are processed. Gatsby doesn't know how to differentiate between them, so we use front-matter to filter them. Front-matter is the header of the markdown files filled with metadata. For eg:
-
-```
----
-posttype: "blog"
-title: "Say Hello to Our New Website!"
-description: "If you have visited our website before you might notice something different now. Yep, we have a new design!"
----
-```
-
-Here we use 3 GraphQL queries,
-[`markdownQueryResult`](https://github.com/MovingBlocks/ModuleSite/blob/master/gatsby-node.js#L55-L79) > To list down all markdown files and generate the blog and module pages. It also scans front-matter to identify whether it is a blog post or module and gives it an appropriate slug/URL.
-
-[`blogQueryResult`](https://github.com/MovingBlocks/ModuleSite/blob/master/gatsby-node.js#L89-L157) > To generate the /blog, /blog/2 ..... /blog/n pages to index all of our blog posts.
-
-[`moduleQueryResult`](https://github.com/MovingBlocks/ModuleSite/blob/master/gatsby-node.js#L159-L221) > To generate the /blog, /blog/2 ..... /blog/n pages to index all of our blog posts.
-For the above two queries there are some math operations going on, this is to ensure we generate a page with 6 blog/modules cards and then move onto generate a new page for pagination.
-
-From [LN129-140](https://github.com/MovingBlocks/ModuleSite/blob/master/gatsby-node.js#L129-L140) and [LN192-204](https://github.com/MovingBlocks/ModuleSite/blob/master/gatsby-node.js#L192-L204) we are generating a JSON file. This files are later consumed by the search-bar and are used to dynamically generate new cards based on search queries.
+## Project Structure (only important files)
+
+```
+βββ blog - one directory per post: index.md plus its images
+βββ public - files served as-is (logos, robots.txt)
+βββ src
+β βββ assets/gallery - gallery screenshots, optimized at build time
+β βββ components - Astro components (static) and React .jsx islands (interactive)
+β βββ content.config.ts - content collections: blog, modules, engineIssues, trello
+β βββ integrations - build hook copying raw-HTML post assets to /blog//
+β βββ layouts - page skeleton: head/SEO, header, footer
+β βββ lib - shared helpers (blog cards, gallery, formatting)
+β βββ loaders - content loaders for GitHub (modules, engine issues) and Trello
+β βββ pages - file-based routes, see below
+β βββ styles - SCSS on top of Bootstrap 5
+βββ astro.config.mjs
+```
+
+## Routes
+
+| Route | Source |
+| --- | --- |
+| `/`, `/404`, `/contribute`, `/downloads`, `/programs` | `src/pages/*.astro` |
+| `/blog`, `/blog/2`, β¦ (27 posts per page) | `src/pages/blog/[...page].astro` |
+| `/blog/` | `src/pages/blog/[slug].astro` |
+| `/gallery`, `/gallery/2`, β¦ (9 images per page) | `src/pages/gallery/[...page].astro` |
+| `/modules/a` β¦ `/modules/z`, `/modules/search` | `src/pages/modules/` |
+| `/projects/` | `src/pages/projects/[id].astro` |
+
+A blog post's URL is derived from its `title` frontmatter (`lodash.kebabcase`), not from its directory name, so changing a title changes the URL.
+
+## Data
+
+- **Blog**: `glob` loader over `blog/*/index.md`; frontmatter is validated in `src/content.config.ts`.
+- **Modules / engine issues**: `src/loaders/github.ts` queries the GitHub GraphQL API with `GITHUB_TOKEN`, caches results for 12 hours, and keeps cached (or empty) data with a warning when the token is missing or the request fails.
+- **Contributor programs**: `src/loaders/trello.ts` reads the public "GSoC/GSoD ideas" and "Mentors" Trello boards and renders card descriptions as markdown.
diff --git a/eslint.config.js b/eslint.config.js
new file mode 100644
index 00000000..37f476ce
--- /dev/null
+++ b/eslint.config.js
@@ -0,0 +1,24 @@
+import js from "@eslint/js";
+import astro from "eslint-plugin-astro";
+import reactHooks from "eslint-plugin-react-hooks";
+import globals from "globals";
+import tseslint from "typescript-eslint";
+
+export default [
+ { ignores: ["dist/", ".astro/", "node_modules/"] },
+ js.configs.recommended,
+ ...tseslint.configs.recommended,
+ ...astro.configs.recommended,
+ {
+ files: ["**/*.{js,jsx,ts}"],
+ languageOptions: {
+ parserOptions: { ecmaFeatures: { jsx: true } },
+ globals: { ...globals.browser, ...globals.node },
+ },
+ },
+ {
+ files: ["**/*.jsx"],
+ plugins: { "react-hooks": reactHooks },
+ rules: reactHooks.configs.recommended.rules,
+ },
+];
diff --git a/gatsby-config.js b/gatsby-config.js
deleted file mode 100644
index d7349279..00000000
--- a/gatsby-config.js
+++ /dev/null
@@ -1,126 +0,0 @@
-const urljoin = require("url-join");
-const config = require("./data/SiteConfig");
-
-module.exports = {
- pathPrefix: config.pathPrefix,
- siteMetadata: {
- title: config.siteTitle,
- siteUrl: urljoin(config.siteUrl, config.pathPrefix),
- twitterUsername: config.twitterUsername,
- image: config.siteLogo,
- },
- plugins: [
- "gatsby-plugin-image",
- {
- resolve: `gatsby-plugin-sharp`,
- options: {
- useMozJpeg: false,
- stripMetadata: true,
- defaultQuality: 90,
- },
- },
- "gatsby-transformer-sharp",
- {
- resolve: "gatsby-transformer-remark",
- options: {
- plugins: [
- {
- resolve: "gatsby-remark-images",
- options: {
- maxWidth: 768,
- withWebp: true,
- linkImagesToOriginal: false,
- backgroundColor: `transparent`,
- wrapperStyle: `left:0; width: 100%;`,
- },
- },
- "gatsby-remark-prismjs",
- "gatsby-remark-copy-linked-files",
- "gatsby-remark-autolink-headers",
- ],
- },
- },
- "gatsby-plugin-sass",
- {
- resolve: "gatsby-source-filesystem",
- options: {
- name: "assets",
- path: `${__dirname}/static/`,
- },
- },
- {
- resolve: "gatsby-source-filesystem",
- options: {
- name: "posts",
- path: `${__dirname}/blog/`,
- },
- },
- {
- resolve: "gatsby-source-filesystem",
- options: {
- name: "images",
- path: `${__dirname}/static/images`,
- },
- },
- {
- resolve: "gatsby-source-trello-board",
- options: {
- token: "",
- key: "",
- // https://trello.com/b/5QQGHuTt/gsoc-gsod-ideas
- board_id: "5c3aaac60b229715c199b69e",
- },
- },
- {
- resolve: "gatsby-source-trello-board",
- options: {
- token: "",
- key: "",
- // https://trello.com/b/wdOVNQgo/mentors
- board_id: "5eb7158715e9136e6a4ef285",
- include_custom_fields: true,
- },
- },
- {
- resolve: "source-terasology-modules",
- options: {
- accessToken: process.env.GITHUB_TOKEN,
- },
- },
- {
- resolve: "source-terasology-engine",
- options: {
- accessToken: process.env.GITHUB_TOKEN,
- },
- },
- {
- resolve: "gatsby-plugin-nprogress",
- options: {
- color: config.themeColor,
- },
- },
- "gatsby-plugin-catch-links",
- "gatsby-plugin-twitter",
- "gatsby-plugin-sitemap",
- {
- resolve: "gatsby-plugin-manifest",
- options: {
- name: config.siteTitle,
- short_name: config.siteTitle,
- description: config.siteDescription,
- start_url: `{${config.pathPrefix}/}`,
- background_color: config.backgroundColor,
- theme_color: config.themeColor,
- display: "minimal-ui",
- icons: [
- {
- src: "/static/logos/logo.png",
- sizes: "192x192",
- type: "image/png",
- },
- ],
- },
- },
- "gatsby-plugin-offline",
- ],
-};
diff --git a/gatsby-node.js b/gatsby-node.js
deleted file mode 100644
index 80522283..00000000
--- a/gatsby-node.js
+++ /dev/null
@@ -1,291 +0,0 @@
-/* eslint-disable no-console */
-const fs = require("fs");
-const kebabCase = require("lodash.kebabcase");
-const moment = require("moment");
-const path = require("path");
-
-exports.onCreateNode = ({ node, actions, getNode }) => {
- const { createNodeField } = actions;
- let slug;
- if (node.internal.type === "MarkdownRemark") {
- const fileNode = getNode(node.parent);
- const { relativePath } = fileNode;
- if (relativePath) {
- const parsedFilePath = path.parse(fileNode.relativePath);
- if (
- Object.prototype.hasOwnProperty.call(node, "frontmatter") &&
- Object.prototype.hasOwnProperty.call(node.frontmatter, "title")
- ) {
- slug = `/${kebabCase(node.frontmatter.title)}`;
- } else if (parsedFilePath.name !== "index" && parsedFilePath.dir !== "") {
- slug = `/${parsedFilePath.dir}/${parsedFilePath.name}/`;
- } else if (parsedFilePath.dir === "") {
- slug = `/${parsedFilePath.name}/`;
- } else {
- slug = `/${parsedFilePath.dir}/`;
- }
- }
-
- if (Object.prototype.hasOwnProperty.call(node, "frontmatter")) {
- if (Object.prototype.hasOwnProperty.call(node.frontmatter, "slug"))
- slug = `/${kebabCase(node.frontmatter.slug)}`;
- if (Object.prototype.hasOwnProperty.call(node.frontmatter, "date")) {
- const date = moment.utc(node.frontmatter.date);
- if (!date.isValid)
- console.warn(`WARNING: Invalid date.`, node.frontmatter);
-
- createNodeField({
- node,
- name: "date",
- value: date.toISOString(),
- });
- }
- }
- createNodeField({
- node,
- name: "slug",
- value: slug,
- });
- }
-};
-
-exports.createPages = async ({ graphql, actions, reporter }) => {
- const { createPage } = actions;
-
- const terasologyQueryResult = await graphql(`
- {
- modules: allTerasologyModule {
- totalCount
- }
- }
- `);
-
- reporter.info(
- `Loaded ${terasologyQueryResult.data.modules.totalCount} Terasology modules from GitHub.`
- );
-
- async function createBlogPages() {
- const blogPostTemplate = path.resolve("src/templates/Blog.jsx");
- const blogQueryResult = await graphql(
- `
- {
- allMarkdownRemark(
- filter: { frontmatter: { posttype: { eq: "blog" } } }
- ) {
- edges {
- node {
- fields {
- slug
- }
- }
- }
- }
- }
- `
- );
- const posts = blogQueryResult.data.allMarkdownRemark.edges;
- posts.forEach((edge) => {
- createPage({
- path: `/blog${edge.node.fields.slug}`,
- component: blogPostTemplate,
- context: {
- slug: edge.node.fields.slug,
- },
- });
- });
-
- const blogListTemplate = path.resolve("./src/templates/BlogList.jsx");
- const blogsPerPage = 27;
- const numBlogPages = Math.ceil(posts.length / blogsPerPage);
- Array.from({ length: numBlogPages }).forEach((_, i) => {
- createPage({
- path: i === 0 ? `/blog` : `/blog/${i + 1}`,
- component: blogListTemplate,
- context: {
- limit: blogsPerPage,
- skip: i * blogsPerPage,
- postsNumPages: numBlogPages,
- blogCurrentPage: i + 1,
- },
- });
- });
- }
-
- async function createModulePages() {
- const modulesFromGithub = await graphql(`
- query Modules {
- modules: allTerasologyModule(sort: { name: ASC }) {
- nodes {
- name
- }
- }
- }
- `);
-
- const ghModules = modulesFromGithub.data.modules.nodes;
-
- const availableLetters = ghModules.reduce((keys, { name }) => {
- keys.add(name.charAt(0).toLowerCase());
- return keys;
- }, new Set());
-
- const alphabet = [..."abcdefghijklmnopqrstuvwxyz"];
-
- alphabet.forEach((letter) => {
- createPage({
- path: `/modules/${letter}`,
- component: path.resolve("src/templates/ModulesByLetter.jsx"),
- context: {
- letter,
- availableLetters: Array.from(availableLetters),
- regex: `/^${letter}.*/i`,
- },
- });
- });
- }
-
- async function createGalleryPages() {
- const queryResult = await graphql(
- `
- {
- allFile(filter: { relativeDirectory: { eq: "images" } }) {
- totalCount
- }
- }
- `
- );
-
- const numImages = queryResult.data.allFile.totalCount;
-
- const galleryTemplate = path.resolve("./src/templates/Gallery.jsx");
- const imagesPerPage = 9;
- const numGalleryPages = Math.ceil(numImages / imagesPerPage);
- Array.from({ length: numGalleryPages }).forEach((_, i) => {
- createPage({
- path: i === 0 ? `/gallery` : `/gallery/${i + 1}`,
- component: galleryTemplate,
- context: {
- limit: imagesPerPage,
- skip: i * imagesPerPage,
- galleryNumPages: numGalleryPages,
- galleryCurrentPage: i + 1,
- numImages,
- },
- });
- });
- }
-
- async function createProjectPages() {
- const projectPageTemplate = path.resolve("src/templates/Project.jsx");
- const projectQueryResult = await graphql(
- `
- {
- allTrelloCard {
- edges {
- node {
- id
- list_id
- }
- }
- }
- }
- `
- );
-
- const projects = projectQueryResult.data.allTrelloCard.edges;
- projects
- .filter(
- (edge) =>
- edge.node.list_id === "5c3aab0bd640fe19e4069de5" ||
- edge.node.list_id === "60ddd7cf64da4b3ee8c5a2e9"
- )
- .forEach((edge) => {
- createPage({
- path: `/projects/${edge.node.id}`,
- component: projectPageTemplate,
- context: {
- id: edge.node.id,
- },
- });
- });
- }
-
- await createBlogPages();
- await createModulePages();
- await createGalleryPages();
- await createProjectPages();
-
- // TODO: replace below with proper search index generation, see
- // https://www.gatsbyjs.com/docs/how-to/adding-common-features/adding-search/
-
- async function buildBlogSearchIndex() {
- const blogSearchIndexQueryResult = await graphql(
- `
- {
- allMarkdownRemark(
- filter: { frontmatter: { posttype: { eq: "blog" } } }
- sort: { frontmatter: { date: DESC } }
- ) {
- edges {
- node {
- excerpt
- fields {
- slug
- date(formatString: "MMMM DD, YYYY")
- }
- frontmatter {
- author
- date
- tags
- title
- cover {
- childImageSharp {
- gatsbyImageData
- }
- }
- }
- internal {
- content
- }
- }
- }
- }
- }
- `
- );
- const index = blogSearchIndexQueryResult.data.allMarkdownRemark.edges.map(
- (edge) => {
- const { excerpt, fields, frontmatter, internal } = edge.node;
- const { slug, date: ddate } = fields;
- const { title, tags, author, date, cover } = frontmatter;
- const { content } = internal;
-
- return {
- author,
- excerpt,
- content,
- cover,
- date,
- ddate,
- path: `/blog${slug}`,
- tags,
- title,
- posttype: "blog",
- };
- }
- );
-
- return index;
- }
-
- const blogIndex = await buildBlogSearchIndex();
-
- if (!fs.existsSync("src/generated")) {
- fs.mkdirSync("src/generated");
- }
-
- fs.writeFileSync(
- "./src/generated/blog-result.json",
- JSON.stringify(blogIndex, null, 2)
- );
-};
diff --git a/jsconfig.json b/jsconfig.json
deleted file mode 100644
index 12e46813..00000000
--- a/jsconfig.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "compilerOptions": {
- "target": "ES6",
- "allowSyntheticDefaultImports": true,
- "experimentalDecorators": true,
- "baseUrl": "src",
- "jsx": "react",
- "paths": {
- "*": ["*", "src/*"]
- }
- },
- "typeAcquisition": {
- "enable": true
- },
- "typingOptions": {
- "enableAutoDiscovery": true
- },
- "compileOnSave": true,
- "allowJS": true,
- "include": ["src/**/*"]
-}
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 00000000..cf172821
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,12091 @@
+{
+ "name": "terasology-web-presence",
+ "version": "2.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "terasology-web-presence",
+ "version": "2.0.0",
+ "license": "MIT",
+ "dependencies": {
+ "@astrojs/react": "^7.1.5",
+ "@astrojs/sitemap": "^3.7.4",
+ "@popperjs/core": "^2.11.8",
+ "astro": "^7.4.8",
+ "bootstrap": "^5.3.8",
+ "js-search": "^2.0.1",
+ "lodash.kebabcase": "^4.1.1",
+ "react": "^19.3.1",
+ "react-dom": "^19.3.1",
+ "react-icons": "^5.7.0",
+ "react-select": "^5.10.2",
+ "sharp": "^0.35.5",
+ "slugify": "^1.6.9"
+ },
+ "devDependencies": {
+ "@astrojs/check": "^0.9.12",
+ "@eslint/js": "^10.0.1",
+ "@microsoft/eslint-formatter-sarif": "^3.1.0",
+ "@types/react": "^19.3.0",
+ "@types/react-dom": "^19.3.0",
+ "eslint": "^10.14.0",
+ "eslint-plugin-astro": "^3.2.1",
+ "eslint-plugin-react-hooks": "^7.1.1",
+ "globals": "^17.14.0",
+ "prettier": "^3.9.10",
+ "prettier-plugin-astro": "^1.1.2",
+ "remark-cli": "^12.0.1",
+ "remark-preset-lint-recommended": "^7.0.1",
+ "sass": "^1.108.1",
+ "stylelint": "^17.16.0",
+ "stylelint-config-standard-scss": "^17.0.0",
+ "typescript": "^6.0.3",
+ "typescript-eslint": "^8.72.2"
+ },
+ "engines": {
+ "node": ">=24"
+ }
+ },
+ "node_modules/@astrojs/astro2tsx": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/@astrojs/astro2tsx/-/astro2tsx-0.1.4.tgz",
+ "integrity": "sha512-5dJqY4i1AlXxcsSFHkaegnrgdVs9J4U93y/YF0xmvmSOcNYVQnf4db3IhvqHZ5v8biLPlPlFmlYsqHj0c4/ZSA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@emnapi/core": "1.11.3",
+ "@emnapi/runtime": "1.11.3",
+ "@napi-rs/wasm-runtime": "1.2.4"
+ },
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@astrojs/check": {
+ "version": "0.9.12",
+ "resolved": "https://registry.npmjs.org/@astrojs/check/-/check-0.9.12.tgz",
+ "integrity": "sha512-hazpqxIfZWj2VhyPyR0pOEQ/IhFDM/2nIApL96zMXABdD8NrUKYDmhxTy7h+drTDl9MQG/Sd1ET/4amadVJUUA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@astrojs/language-server": "^2.17.3",
+ "chokidar": "^5.0.0",
+ "kleur": "^4.1.5",
+ "yargs": "^18.2.0"
+ },
+ "bin": {
+ "astro-check": "bin/astro-check.js"
+ },
+ "peerDependencies": {
+ "typescript": "^5.0.0 || ^6.0.0"
+ }
+ },
+ "node_modules/@astrojs/compiler-binding": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding/-/compiler-binding-0.5.3.tgz",
+ "integrity": "sha512-fHG6eWKvnSlV11dUMZSi4AynOGjVbNBgZZc704Hi9DW8WeKtbsS7fJQT3omz1Nba+5mccLQQGAWOQ65cnuNLtg==",
+ "license": "MIT",
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ },
+ "optionalDependencies": {
+ "@astrojs/compiler-binding-android-arm64": "0.5.3",
+ "@astrojs/compiler-binding-darwin-arm64": "0.5.3",
+ "@astrojs/compiler-binding-darwin-x64": "0.5.3",
+ "@astrojs/compiler-binding-linux-arm64-gnu": "0.5.3",
+ "@astrojs/compiler-binding-linux-arm64-musl": "0.5.3",
+ "@astrojs/compiler-binding-linux-x64-gnu": "0.5.3",
+ "@astrojs/compiler-binding-linux-x64-musl": "0.5.3",
+ "@astrojs/compiler-binding-wasm32-wasi": "0.5.3",
+ "@astrojs/compiler-binding-win32-arm64-msvc": "0.5.3",
+ "@astrojs/compiler-binding-win32-x64-msvc": "0.5.3"
+ }
+ },
+ "node_modules/@astrojs/compiler-binding-android-arm64": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-android-arm64/-/compiler-binding-android-arm64-0.5.3.tgz",
+ "integrity": "sha512-ThyoCqtrdp6UwmMvScluDll4vvj4kXwUPKHYozLbXJKPH5zrJ8sr5xQJVOk0YvgBrCvGBA/lPVVLyEp1aLuBYg==",
+ "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.5.3",
+ "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-darwin-arm64/-/compiler-binding-darwin-arm64-0.5.3.tgz",
+ "integrity": "sha512-zMI4ndCVCd0Wsrm8sXVcIk6uviKsgndFLnxqNd6Qx26LINSkb0lQ7SL8gKyGcTu0hJRTBwl7Y1WcpMk37aeaKQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@astrojs/compiler-binding-darwin-x64": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-darwin-x64/-/compiler-binding-darwin-x64-0.5.3.tgz",
+ "integrity": "sha512-Ce51oGlDgBAwoVOy5Y4FeIqFkXbS/vJkIAPN5pXIYchn/3izF4c2t//KuUZJopwzD6Kblj46kKiqmxRUt/mAJg==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@astrojs/compiler-binding-linux-arm64-gnu": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-linux-arm64-gnu/-/compiler-binding-linux-arm64-gnu-0.5.3.tgz",
+ "integrity": "sha512-WCBGgpmUqbuWW3KAsNOKRXDeQIAeQLftZhZ+CNyl3eg4JtkfZRXHav2qItzVg6ODyzmS2e+QkpgsQuwMSInGgA==",
+ "cpu": [
+ "arm64"
+ ],
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@astrojs/compiler-binding-linux-arm64-musl": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-linux-arm64-musl/-/compiler-binding-linux-arm64-musl-0.5.3.tgz",
+ "integrity": "sha512-DRcjEOFWcMbaaTsbOEferYozr2zDUf/roDzcF6WxHSSto+rqZ1N87xxj/pjOpz0JtTBlZ3V59nZGONcNiQUSWw==",
+ "cpu": [
+ "arm64"
+ ],
+ "libc": [
+ "musl"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@astrojs/compiler-binding-linux-x64-gnu": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-linux-x64-gnu/-/compiler-binding-linux-x64-gnu-0.5.3.tgz",
+ "integrity": "sha512-8rIMmEFtuVe5mMvwBR59uSHZL7CaJ/CPm5Hh3r3Bd5JLoSPkBbl1xk8kwUkNKJ0QSbGEFdWkUnx73JRZq46i2A==",
+ "cpu": [
+ "x64"
+ ],
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@astrojs/compiler-binding-linux-x64-musl": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-linux-x64-musl/-/compiler-binding-linux-x64-musl-0.5.3.tgz",
+ "integrity": "sha512-+sZCsIXq/PQBiemALIr+GbERKQbQ82mHW2ibJUlCDtsjyFA/8Udm8WGZhS7AGjb2P9ekQ4j7Z8dbxb0f3E0oZw==",
+ "cpu": [
+ "x64"
+ ],
+ "libc": [
+ "musl"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@astrojs/compiler-binding-wasm32-wasi": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-wasm32-wasi/-/compiler-binding-wasm32-wasi-0.5.3.tgz",
+ "integrity": "sha512-cEhZ7XAoZYffJdNYb3MDWci1UKhSEjPN+DMaLEB8X1tKlhlYNw9eVWUyNZTe1gb3nr7JJBVXdXDioqE00dyVLQ==",
+ "cpu": [
+ "wasm32"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@emnapi/core": "1.11.3",
+ "@emnapi/runtime": "1.11.3",
+ "@napi-rs/wasm-runtime": "^1.2.7"
+ },
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@astrojs/compiler-binding-wasm32-wasi/node_modules/@napi-rs/wasm-runtime": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.2.7.tgz",
+ "integrity": "sha512-zJccwplOAbgfZju95IUHazLnx9RAPtPN2YGJXI6UbrgeaR9QfPjGrQL6ERkSAtnVCA4Q+83ApGyaX5zdpCaKkQ==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@tybys/wasm-util": "^0.10.3"
+ },
+ "engines": {
+ "node": "^20.19.0 || ^22.13.0 || >=23.5.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/Brooooooklyn"
+ },
+ "peerDependencies": {
+ "@emnapi/core": "^1.7.1 || 2.0.0-beta.2 || 2.0.0-beta.3",
+ "@emnapi/runtime": "^1.7.1 || 2.0.0-beta.2 || 2.0.0-beta.3"
+ }
+ },
+ "node_modules/@astrojs/compiler-binding-win32-arm64-msvc": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-win32-arm64-msvc/-/compiler-binding-win32-arm64-msvc-0.5.3.tgz",
+ "integrity": "sha512-Vcg6+NlU2SOmVGweQEmufu40MHuDuRR80dp9xNLutBWGdJG1HP0XivjGWKGkx/2EK3HN5rwB2NwPgBNDkhKsnQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@astrojs/compiler-binding-win32-x64-msvc": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-win32-x64-msvc/-/compiler-binding-win32-x64-msvc-0.5.3.tgz",
+ "integrity": "sha512-Mt5bK4l5ZcUdNcVxJ7VVt2x5Ck46cXgxCmIhT8sVyUST04FBRYqcYTXQLvy1Py4ejglcWRxAS6z+jBVHs3LPfg==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@astrojs/compiler-rs": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/@astrojs/compiler-rs/-/compiler-rs-0.5.3.tgz",
+ "integrity": "sha512-rNSAYm5IcRJMpNm+cSMaaPNCmzCXIdiz67kcBwC1qN8eTmO48wEJ6hZdlGq60+0HIHwUlncfaMxti1Fk2uJu7w==",
+ "license": "MIT",
+ "dependencies": {
+ "@astrojs/compiler-binding": "0.5.3"
+ },
+ "engines": {
+ "node": ">=22.12.0"
+ }
+ },
+ "node_modules/@astrojs/internal-helpers": {
+ "version": "0.13.1",
+ "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.13.1.tgz",
+ "integrity": "sha512-LgGLGzoC0wCT3mjDYrxz+hct/tws0enpWsLJW3bswHR3PKgusp/H9xRIT8rTdsyvLM0TcRhhvRL30J2oaZNcqA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.5",
+ "@types/mdast": "^4.0.4",
+ "picomatch": "^4.0.7",
+ "retext-smartypants": "^6.2.0",
+ "shiki": "^4.5.0",
+ "smol-toml": "^1.9.1",
+ "unified": "^11.0.5",
+ "yaml": "^2.9.1"
+ }
+ },
+ "node_modules/@astrojs/language-server": {
+ "version": "2.17.3",
+ "resolved": "https://registry.npmjs.org/@astrojs/language-server/-/language-server-2.17.3.tgz",
+ "integrity": "sha512-QIAFu1e/4quJMTPdmBOm+ZPXc5NDGZE4/YQjgR3EgjhGLl/tdidaWJDr5WmO2lesVc+BW1qN/xNBURmuePDG2A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@astrojs/astro2tsx": "^0.1.2",
+ "@astrojs/yaml2ts": "^0.2.4",
+ "@volar/kit": "~2.4.28",
+ "@volar/language-core": "~2.4.28",
+ "@volar/language-server": "~2.4.28",
+ "@volar/language-service": "~2.4.28",
+ "muggle-string": "^0.4.1",
+ "tinyglobby": "^0.2.17",
+ "volar-service-css": "0.0.71",
+ "volar-service-emmet": "0.0.71",
+ "volar-service-html": "0.0.71",
+ "volar-service-prettier": "0.0.71",
+ "volar-service-typescript": "0.0.71",
+ "volar-service-typescript-twoslash-queries": "0.0.71",
+ "volar-service-yaml": "0.0.71",
+ "vscode-html-languageservice": "^5.6.2",
+ "vscode-uri": "^3.2.0"
+ },
+ "bin": {
+ "astro-ls": "bin/nodeServer.js"
+ },
+ "peerDependencies": {
+ "prettier": "^3.0.0",
+ "prettier-plugin-astro": ">=0.11.0"
+ },
+ "peerDependenciesMeta": {
+ "prettier": {
+ "optional": true
+ },
+ "prettier-plugin-astro": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@astrojs/markdown-satteri": {
+ "version": "0.4.7",
+ "resolved": "https://registry.npmjs.org/@astrojs/markdown-satteri/-/markdown-satteri-0.4.7.tgz",
+ "integrity": "sha512-MZvnec/898GGGHQZfkArVbkdZmL1imjIM8RWkmzbAmse737zr8D9inUjFQ5eLBXV3vPobOUs/ZRV/D6Po/bVDg==",
+ "license": "MIT",
+ "dependencies": {
+ "@astrojs/internal-helpers": "0.13.1",
+ "@astrojs/prism": "4.1.2",
+ "github-slugger": "^2.0.0",
+ "satteri": "^0.11.6"
+ }
+ },
+ "node_modules/@astrojs/prism": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-4.1.2.tgz",
+ "integrity": "sha512-jMrUEpFDarDO1KWPvVc9eSa8DSfwBlwEOHwX+8zvZQpiqXRGDxFnOXHsYqV6DP7w+0qIgTr98gS1GdQlm8ypWg==",
+ "license": "MIT",
+ "dependencies": {
+ "prismjs": "^1.30.0"
+ },
+ "engines": {
+ "node": ">=22.23.4"
+ }
+ },
+ "node_modules/@astrojs/react": {
+ "version": "7.1.5",
+ "resolved": "https://registry.npmjs.org/@astrojs/react/-/react-7.1.5.tgz",
+ "integrity": "sha512-RvtvNZNfrK2cDIaCgbbGoZAkNwjoAJEkNk50Z59ksci+mudqtVz5y1G5o3nW6LJ0xkQcJyGbBiT1tmr23lkusw==",
+ "license": "MIT",
+ "dependencies": {
+ "@astrojs/internal-helpers": "0.13.1",
+ "@vitejs/plugin-react": "^6.2.1",
+ "devalue": "^6.0.3",
+ "ultrahtml": "^1.7.0",
+ "vite": "^8.3.6"
+ },
+ "engines": {
+ "node": ">=22.23.4"
+ },
+ "peerDependencies": {
+ "@types/react": "^17.0.50 || ^18.0.21 || ^19.0.0",
+ "@types/react-dom": "^17.0.17 || ^18.0.6 || ^19.0.0",
+ "oxc-transform-react": ">=0.145.0 <0.157.0",
+ "react": "^17.0.2 || ^18.0.0 || ^19.0.0",
+ "react-dom": "^17.0.2 || ^18.0.0 || ^19.0.0"
+ },
+ "peerDependenciesMeta": {
+ "oxc-transform-react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@astrojs/sitemap": {
+ "version": "3.7.4",
+ "resolved": "https://registry.npmjs.org/@astrojs/sitemap/-/sitemap-3.7.4.tgz",
+ "integrity": "sha512-LbKNC24bdUWcQf/pThB6qLlSqHojxGjZDURIzFocY8rlWnAn2t74nnhnK6S5x0NHriHoAduLEpVjRykmeGiVvA==",
+ "license": "MIT",
+ "dependencies": {
+ "sitemap": "^9.0.0",
+ "zod": "^4.3.6"
+ }
+ },
+ "node_modules/@astrojs/telemetry": {
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.4.2.tgz",
+ "integrity": "sha512-2JOMRUxJrBSfiVDfeKLv1wBmvSIx1Y6u2YEO8awZ9qSq3u/rNAiUyFdOYi8dHv91kHrmYEQX7pRDw0J4xyj3UA==",
+ "license": "MIT",
+ "dependencies": {
+ "ci-info": "^4.4.0",
+ "dset": "^3.1.4",
+ "is-docker": "^4.0.0",
+ "package-manager-detector": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=22.23.4"
+ }
+ },
+ "node_modules/@astrojs/yaml2ts": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/@astrojs/yaml2ts/-/yaml2ts-0.2.4.tgz",
+ "integrity": "sha512-8oddpOae35pJsXPQXhTkM0ypfKPskVsh2bCxRtbf7e+/Epw2nReakFYpLKjZMEr75CsoF203PMnCocpfz0s69A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "yaml": "^2.8.3"
+ }
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz",
+ "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.29.7",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.1.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/compat-data": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz",
+ "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/core": {
+ "version": "7.29.13",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.13.tgz",
+ "integrity": "sha512-j1nvOQCZYSgp7HLmisnCXFTpVvFODiijQ9QHkORfGKWH6YDtskTEeCJS7eV545GZ9UBzrq0e2xsOd5QQ5PjIqw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.29.7",
+ "@babel/generator": "^7.29.13",
+ "@babel/helper-compilation-targets": "^7.29.13",
+ "@babel/helper-module-transforms": "^7.29.13",
+ "@babel/helpers": "^7.29.13",
+ "@babel/parser": "^7.29.13",
+ "@babel/template": "^7.29.7",
+ "@babel/traverse": "^7.29.13",
+ "@babel/types": "^7.29.11",
+ "@jridgewell/remapping": "^2.3.5",
+ "convert-source-map": "^2.0.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.2",
+ "json5": "^2.2.3",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/babel"
+ }
+ },
+ "node_modules/@babel/core/node_modules/semver": {
+ "version": "6.3.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.2.tgz",
+ "integrity": "sha512-GYrCADwpu6yV5OAvchkQ27Z5wwMxWAEMg5NNWjyHh/5DboFFqbdbvYNIvZouQpxXyeMPoTOh0vdPYKlf0ZswdQ==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/@babel/generator": {
+ "version": "7.29.13",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.13.tgz",
+ "integrity": "sha512-T5FRo+RzVHvGjWOuF1Ljc44b+NXAOazodHkGUHp4I3zCkQ4/sNVJm56h1S278LMR0bY5xBhztGziSbli8zObIw==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.29.13",
+ "@babel/types": "^7.29.11",
+ "@jridgewell/gen-mapping": "^0.3.12",
+ "@jridgewell/trace-mapping": "^0.3.28",
+ "jsesc": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-compilation-targets": {
+ "version": "7.29.13",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.13.tgz",
+ "integrity": "sha512-8WxJ4/Vmes3ghacj8VOJy3NW8eyHiFY/4thU/LSBuBE470+igjR/j1ZTNn8fV5VdNrLx6iXUwig526UdOvfP0w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/compat-data": "^7.29.7",
+ "@babel/helper-validator-option": "^7.29.7",
+ "browserslist": "^4.24.0",
+ "lru-cache": "^5.1.1",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-compilation-targets/node_modules/semver": {
+ "version": "6.3.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.2.tgz",
+ "integrity": "sha512-GYrCADwpu6yV5OAvchkQ27Z5wwMxWAEMg5NNWjyHh/5DboFFqbdbvYNIvZouQpxXyeMPoTOh0vdPYKlf0ZswdQ==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/@babel/helper-globals": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz",
+ "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-imports": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz",
+ "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/traverse": "^7.29.7",
+ "@babel/types": "^7.29.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-transforms": {
+ "version": "7.29.13",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.13.tgz",
+ "integrity": "sha512-/U96wOz+SCoZ7Da/8kjDGltcNY280JPQcRNPK0Hk3PTbdpaiBDQImtC6JsbVwb1HGMr3usZQU2WsWVjhYNmRzw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-module-imports": "^7.29.7",
+ "@babel/helper-validator-identifier": "^7.29.7",
+ "@babel/traverse": "^7.29.13"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-string-parser": {
+ "version": "7.29.13",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.13.tgz",
+ "integrity": "sha512-fWegr+WsEsiMVW4KUNdIIzzMTZSzNiqhy0//6+2MRi2d5NFNsL/AYwBQW8eBnRbTBVRnDVzjaJEUqKaCWjMMdQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz",
+ "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-option": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz",
+ "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helpers": {
+ "version": "7.29.13",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.13.tgz",
+ "integrity": "sha512-laoRpD/kO/iA4CDlgJbixHekg7oPvWALK0PQyK3Ob2I2njZRvVAD77RfWCIImtqWCq6KijoBoZK7bp/HlTWASQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/template": "^7.29.7",
+ "@babel/types": "^7.29.11"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.29.13",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.13.tgz",
+ "integrity": "sha512-fJM50YYjlTiBhgdkGmC1tBpv+FMAyo4annf2X6Aks+0yRlaiVkYW/3f07xAfVVkYIoZ9fFZp+mEThUFnuybhkQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.29.11"
+ },
+ "bin": {
+ "parser": "bin/babel-parser.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/runtime": {
+ "version": "7.29.13",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.13.tgz",
+ "integrity": "sha512-v+oN26xP4YIlQsbQ/CbTH1WG5m/l/DjKKZNy/Kp3f/AFvbgt7Em/D0FeMM3O2hX0YzeN2M16W8lOpyhIkfCBcQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/template": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz",
+ "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.29.7",
+ "@babel/parser": "^7.29.7",
+ "@babel/types": "^7.29.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/traverse": {
+ "version": "7.29.13",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.13.tgz",
+ "integrity": "sha512-0ve0xMlFA73dgY1oyJRY6RoW+/bncdcOQqg6jjYcVfXBK90OdLXjm9R6lmRetdZVrPjXkKIoMVBqYFPjcAlZ4Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.29.7",
+ "@babel/generator": "^7.29.13",
+ "@babel/helper-globals": "^7.29.7",
+ "@babel/parser": "^7.29.13",
+ "@babel/template": "^7.29.7",
+ "@babel/types": "^7.29.11",
+ "debug": "^4.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/types": {
+ "version": "7.29.11",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.11.tgz",
+ "integrity": "sha512-WCsemW40Cpc6gouC1SrY6PBaZ+oLRlEVY9XBvZBI7il/HyUrb2nJ505wE1MHEFyDZNnrWDEuy4jL50WVHfTTSQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-string-parser": "^7.29.11",
+ "@babel/helper-validator-identifier": "^7.29.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@bruits/satteri-android-arm64": {
+ "version": "0.11.7",
+ "resolved": "https://registry.npmjs.org/@bruits/satteri-android-arm64/-/satteri-android-arm64-0.11.7.tgz",
+ "integrity": "sha512-ej+1rIKs+yb6/OtcIe1SO22OXjJV0qqUopl5VNZF8Sqc/Pj4m1DXoqBQsPxW5OUYYiDUymIy6hnnn8M78VYk2w==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@bruits/satteri-darwin-arm64": {
+ "version": "0.11.7",
+ "resolved": "https://registry.npmjs.org/@bruits/satteri-darwin-arm64/-/satteri-darwin-arm64-0.11.7.tgz",
+ "integrity": "sha512-yllQOX1kVWrwqL7tamQlp4NP0loIb4KuadjuNrAe4JEOerHpgYISPRDb8DqLipgvP7Ks4e87LydZpdakMR1rhQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@bruits/satteri-darwin-x64": {
+ "version": "0.11.7",
+ "resolved": "https://registry.npmjs.org/@bruits/satteri-darwin-x64/-/satteri-darwin-x64-0.11.7.tgz",
+ "integrity": "sha512-RMQrKzEZRZSiYyLFifiSuk0nBH6uAY1TVMNR/h/aE4rr2OS6l82e4MJTpC6H/tqSMoE+3CwbkUKBQGLHIweYlg==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@bruits/satteri-freebsd-x64": {
+ "version": "0.11.7",
+ "resolved": "https://registry.npmjs.org/@bruits/satteri-freebsd-x64/-/satteri-freebsd-x64-0.11.7.tgz",
+ "integrity": "sha512-EFlqw+RDRo3wYdy1ZSR/dNYhfWjuZL86PYwRcpLWWEZskjfpNnhIdxS13Xw2QJE1hSjTGVq4aZaVvlUjoj8p5A==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@bruits/satteri-linux-arm64-gnu": {
+ "version": "0.11.7",
+ "resolved": "https://registry.npmjs.org/@bruits/satteri-linux-arm64-gnu/-/satteri-linux-arm64-gnu-0.11.7.tgz",
+ "integrity": "sha512-aeH365GHaqv01wRSiHaGUlpL28U8e9UnV9LxjIF6BOyTj71/M5bop4HKomcis4VxFZjd68fDqNyU22yFkF/h7A==",
+ "cpu": [
+ "arm64"
+ ],
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@bruits/satteri-linux-arm64-musl": {
+ "version": "0.11.7",
+ "resolved": "https://registry.npmjs.org/@bruits/satteri-linux-arm64-musl/-/satteri-linux-arm64-musl-0.11.7.tgz",
+ "integrity": "sha512-72WlBhuwOHm+2Nv4Qf1WzfS75PHOLz81sYkDJnmj0Rm2C4Xax5faSiTDt7vWo1IcK6rDlkuRDNnWIw8uIKWuVQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "libc": [
+ "musl"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@bruits/satteri-linux-x64-gnu": {
+ "version": "0.11.7",
+ "resolved": "https://registry.npmjs.org/@bruits/satteri-linux-x64-gnu/-/satteri-linux-x64-gnu-0.11.7.tgz",
+ "integrity": "sha512-gDp4v1jjckeNCetLtrMUfDV4CKGYL6fayDPdoaQq09nkDCSrclxEFK7kAmRuHhoalgsao4bZMFqQr3HQtN2NEQ==",
+ "cpu": [
+ "x64"
+ ],
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@bruits/satteri-linux-x64-musl": {
+ "version": "0.11.7",
+ "resolved": "https://registry.npmjs.org/@bruits/satteri-linux-x64-musl/-/satteri-linux-x64-musl-0.11.7.tgz",
+ "integrity": "sha512-zqzSpQLA6V3J/TO2Vjuc1VRQPIQQdoSYmzKKFL+3GwGlbXiFQP2ZUDSLw9xlm0tTKXkCM9ANr4jMiDASZ+JGUw==",
+ "cpu": [
+ "x64"
+ ],
+ "libc": [
+ "musl"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@bruits/satteri-wasm32-wasi": {
+ "version": "0.11.7",
+ "resolved": "https://registry.npmjs.org/@bruits/satteri-wasm32-wasi/-/satteri-wasm32-wasi-0.11.7.tgz",
+ "integrity": "sha512-L46f6rtlaBR4fsTWGCTFcXtbtka2GyM3l9TsmE0FgTxjXGq+sndYg5X3hzlhWDkNvJpRtCHCmgTRJ5+cIi4o3A==",
+ "cpu": [
+ "wasm32"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@emnapi/core": "1.11.1",
+ "@emnapi/runtime": "1.11.1",
+ "@napi-rs/wasm-runtime": "^1.2.7"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@bruits/satteri-wasm32-wasi/node_modules/@emnapi/core": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.1.tgz",
+ "integrity": "sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@emnapi/wasi-threads": "1.2.2",
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@bruits/satteri-wasm32-wasi/node_modules/@emnapi/runtime": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.1.tgz",
+ "integrity": "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@bruits/satteri-wasm32-wasi/node_modules/@emnapi/wasi-threads": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz",
+ "integrity": "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@bruits/satteri-wasm32-wasi/node_modules/@napi-rs/wasm-runtime": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.2.7.tgz",
+ "integrity": "sha512-zJccwplOAbgfZju95IUHazLnx9RAPtPN2YGJXI6UbrgeaR9QfPjGrQL6ERkSAtnVCA4Q+83ApGyaX5zdpCaKkQ==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@tybys/wasm-util": "^0.10.3"
+ },
+ "engines": {
+ "node": "^20.19.0 || ^22.13.0 || >=23.5.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/Brooooooklyn"
+ },
+ "peerDependencies": {
+ "@emnapi/core": "^1.7.1 || 2.0.0-beta.2 || 2.0.0-beta.3",
+ "@emnapi/runtime": "^1.7.1 || 2.0.0-beta.2 || 2.0.0-beta.3"
+ }
+ },
+ "node_modules/@bruits/satteri-win32-arm64-msvc": {
+ "version": "0.11.7",
+ "resolved": "https://registry.npmjs.org/@bruits/satteri-win32-arm64-msvc/-/satteri-win32-arm64-msvc-0.11.7.tgz",
+ "integrity": "sha512-R2+o6EbJK4pqbd086H9BGUVYAyZ5F6FnShfoyRIu0Zu9DTE3H6EU/Z+ua7p9dmYf6JQQbE9DCwwavi4xiaGAhQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@bruits/satteri-win32-x64-msvc": {
+ "version": "0.11.7",
+ "resolved": "https://registry.npmjs.org/@bruits/satteri-win32-x64-msvc/-/satteri-win32-x64-msvc-0.11.7.tgz",
+ "integrity": "sha512-OIyBFJ35uMu5CH5RWnIR3bKsZwScKZ7vXmhCohZ+qonT1SkxmHCEf4H8YRWThRL2EXdVDjkjhfOsaiA4O24Vvw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@cacheable/memory": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@cacheable/memory/-/memory-2.2.0.tgz",
+ "integrity": "sha512-CTLKqLItRCEixEAewD3/j9DB3/o96gpTPD4eJ1v+DGOlxZRZncRQkGYqqnAGCscYd6RNeXfGeiuCphsPtqyIfQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@cacheable/utils": "^2.5.0",
+ "@keyv/bigmap": "^1.3.1",
+ "hookified": "^1.15.1",
+ "keyv": "^5.6.0"
+ }
+ },
+ "node_modules/@cacheable/utils": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/@cacheable/utils/-/utils-2.5.0.tgz",
+ "integrity": "sha512-buipgOVDkkPXNR5+xBpDw7Zk2n1EvU7qBJCNUcL7rhQ//kfpOXPAvQ511Os0vpLYJ1pZnvudNytkQt2hst3wqA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "hashery": "^1.5.1",
+ "keyv": "^5.6.0"
+ }
+ },
+ "node_modules/@capsizecss/unpack": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/@capsizecss/unpack/-/unpack-4.0.1.tgz",
+ "integrity": "sha512-CuNiSqg7+e1cO/GjffyMOm5Tt2jUF9CWHHnvQ/UkqvtkGfHdgwEC0wpmq7fkN3gxwpRnrAN0WzO3vREKmNolMQ==",
+ "license": "MIT",
+ "dependencies": {
+ "fontkitten": "^1.0.3"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@clack/core": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/@clack/core/-/core-1.6.0.tgz",
+ "integrity": "sha512-4GZynIB2IIe431odxesswvWTCP6orvqd6e2b07b3VFWBQRqUqIHc/EPIZwFoKS692QBp+ooPuXKaJV8g4kXuYA==",
+ "license": "MIT",
+ "dependencies": {
+ "fast-string-width": "^3.0.2",
+ "fast-wrap-ansi": "^0.2.0",
+ "sisteransi": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 20.12.0"
+ }
+ },
+ "node_modules/@clack/prompts": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-1.9.0.tgz",
+ "integrity": "sha512-tEj8X2No2A1c9NDnZECxiiJ8TP3vmFlN9tLlLeSaMqVW4tUmVG2R4qpv/eP4zymWxnymYLkLcIYVV0VcWj3RCQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@clack/core": "1.6.0",
+ "fast-string-width": "^3.0.2",
+ "fast-wrap-ansi": "^0.2.0",
+ "sisteransi": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 20.12.0"
+ }
+ },
+ "node_modules/@csstools/css-calc": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-3.4.3.tgz",
+ "integrity": "sha512-iex20d8CHVkyvg6B7UKV7uHnI2Bqo9g+EFfT9E0y+GvTvhZ/DwONJ+9aKb1dlqm0ZiGsL5RXjp0fCoJYnkeDjA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=20.19.0"
+ },
+ "peerDependencies": {
+ "@csstools/css-parser-algorithms": "^4.0.2",
+ "@csstools/css-tokenizer": "^4.0.2"
+ }
+ },
+ "node_modules/@csstools/css-parser-algorithms": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-4.0.2.tgz",
+ "integrity": "sha512-40cSKyMvK+tq4qz6Awrlye2WGuOKt3FwPgtGg6KTfbHOWNw+Rk1rzbAtZnZ6IBhsY491HLRnDXwoyBAijmmILA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=20.19.0"
+ },
+ "peerDependencies": {
+ "@csstools/css-tokenizer": "^4.0.2"
+ }
+ },
+ "node_modules/@csstools/css-syntax-patches-for-csstree": {
+ "version": "1.1.16",
+ "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.16.tgz",
+ "integrity": "sha512-LsDbJPP/B8cPasUJyTA5S99F7C4G93ngW8hUluXz8CFeOaaRnBPtBiIlvgcPYU0HmHNz8CXg+1vwFrIB4F6Dgw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT-0",
+ "peerDependencies": {
+ "css-tree": "^3.2.1"
+ },
+ "peerDependenciesMeta": {
+ "css-tree": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@csstools/css-tokenizer": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-4.0.2.tgz",
+ "integrity": "sha512-OoKoR0f76dCY666JlcbhmVTs2drYj1GUXZTYTcbUgJjh9Nv41aFfZ21bPQTERm5+L5cBDo466NltB2lplS5GBw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=20.19.0"
+ }
+ },
+ "node_modules/@csstools/media-query-list-parser": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-5.0.2.tgz",
+ "integrity": "sha512-qx19O8AbbLLbDSAcI6YOby/Vq8rV51psgIvlF5OZT/L8fQJDCyQifL6k+kYU4a8ySpzJ4RBzZkIs530bAn8y4Q==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=20.19.0"
+ },
+ "peerDependencies": {
+ "@csstools/css-parser-algorithms": "^4.0.2",
+ "@csstools/css-tokenizer": "^4.0.2"
+ }
+ },
+ "node_modules/@csstools/selector-resolve-nested": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-4.0.2.tgz",
+ "integrity": "sha512-JpjNBJFA+4OnAHKRK4AMp8xrYyLhI9XapOeBlP2PhRU/IylSw+1ep3BFNTksBJnrTS3KT6kqKNVfpzLLwZUW5Q==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT-0",
+ "engines": {
+ "node": ">=20.19.0"
+ },
+ "peerDependencies": {
+ "postcss-selector-parser": "^7.1.1"
+ }
+ },
+ "node_modules/@csstools/selector-specificity": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-6.0.1.tgz",
+ "integrity": "sha512-MBuqFIIvqk4S593MGAskTkPpEUUzZNvGzh8mMxEwl3oHwjQlXmqHEDxNbN3Y0Tsh+xjmem4GZjeg7I0qkwBivg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT-0",
+ "engines": {
+ "node": ">=20.19.0"
+ },
+ "peerDependencies": {
+ "postcss-selector-parser": "^7.1.1"
+ }
+ },
+ "node_modules/@emmetio/abbreviation": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/@emmetio/abbreviation/-/abbreviation-2.3.3.tgz",
+ "integrity": "sha512-mgv58UrU3rh4YgbE/TzgLQwJ3pFsHHhCLqY20aJq+9comytTXUDNGG/SMtSeMJdkpxgXSXunBGLD8Boka3JyVA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@emmetio/scanner": "^1.0.4"
+ }
+ },
+ "node_modules/@emmetio/css-abbreviation": {
+ "version": "2.1.8",
+ "resolved": "https://registry.npmjs.org/@emmetio/css-abbreviation/-/css-abbreviation-2.1.8.tgz",
+ "integrity": "sha512-s9yjhJ6saOO/uk1V74eifykk2CBYi01STTK3WlXWGOepyKa23ymJ053+DNQjpFcy1ingpaO7AxCcwLvHFY9tuw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@emmetio/scanner": "^1.0.4"
+ }
+ },
+ "node_modules/@emmetio/css-parser": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/@emmetio/css-parser/-/css-parser-0.4.1.tgz",
+ "integrity": "sha512-2bC6m0MV/voF4CTZiAbG5MWKbq5EBmDPKu9Sb7s7nVcEzNQlrZP6mFFFlIaISM8X6514H9shWMme1fCm8cWAfQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@emmetio/stream-reader": "^2.2.0",
+ "@emmetio/stream-reader-utils": "^0.1.0"
+ }
+ },
+ "node_modules/@emmetio/html-matcher": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@emmetio/html-matcher/-/html-matcher-1.3.0.tgz",
+ "integrity": "sha512-NTbsvppE5eVyBMuyGfVu2CRrLvo7J4YHb6t9sBFLyY03WYhXET37qA4zOYUjBWFCRHO7pS1B9khERtY0f5JXPQ==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "@emmetio/scanner": "^1.0.0"
+ }
+ },
+ "node_modules/@emmetio/scanner": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@emmetio/scanner/-/scanner-1.0.4.tgz",
+ "integrity": "sha512-IqRuJtQff7YHHBk4G8YZ45uB9BaAGcwQeVzgj/zj8/UdOhtQpEIupUhSk8dys6spFIWVZVeK20CzGEnqR5SbqA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@emmetio/stream-reader": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@emmetio/stream-reader/-/stream-reader-2.2.0.tgz",
+ "integrity": "sha512-fXVXEyFA5Yv3M3n8sUGT7+fvecGrZP4k6FnWWMSZVQf69kAq0LLpaBQLGcPR30m3zMmKYhECP4k/ZkzvhEW5kw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@emmetio/stream-reader-utils": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/@emmetio/stream-reader-utils/-/stream-reader-utils-0.1.0.tgz",
+ "integrity": "sha512-ZsZ2I9Vzso3Ho/pjZFsmmZ++FWeEd/txqybHTm4OgaZzdS8V9V/YYWQwg5TC38Z7uLWUV1vavpLLbjJtKubR1A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@emnapi/core": {
+ "version": "1.11.3",
+ "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.3.tgz",
+ "integrity": "sha512-zLpS5asjEb7lq8jYLq37N6XKaE41DIexlY1rF/z4/tIl3wo13Sqm28fRyfIsKZD+NZ8mM5RoKkpW/rBcuoSZSg==",
+ "devOptional": true,
+ "license": "MIT",
+ "dependencies": {
+ "@emnapi/wasi-threads": "1.2.3",
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@emnapi/runtime": {
+ "version": "1.11.3",
+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.3.tgz",
+ "integrity": "sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==",
+ "devOptional": true,
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@emnapi/wasi-threads": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.3.tgz",
+ "integrity": "sha512-ELEBe8PsLvvJ6QMr0zLt8ffvOHW/dc1m3CEzNMg7aJUv3bMaoDtw2TXyDAwkYBuroxxuHEwhRTLJSe5sya547g==",
+ "devOptional": true,
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@emotion/babel-plugin": {
+ "version": "11.13.5",
+ "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz",
+ "integrity": "sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-module-imports": "^7.16.7",
+ "@babel/runtime": "^7.18.3",
+ "@emotion/hash": "^0.9.2",
+ "@emotion/memoize": "^0.9.0",
+ "@emotion/serialize": "^1.3.3",
+ "babel-plugin-macros": "^3.1.0",
+ "convert-source-map": "^1.5.0",
+ "escape-string-regexp": "^4.0.0",
+ "find-root": "^1.1.0",
+ "source-map": "^0.5.7",
+ "stylis": "4.2.0"
+ }
+ },
+ "node_modules/@emotion/babel-plugin/node_modules/convert-source-map": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
+ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
+ "license": "MIT"
+ },
+ "node_modules/@emotion/cache": {
+ "version": "11.14.0",
+ "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.14.0.tgz",
+ "integrity": "sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==",
+ "license": "MIT",
+ "dependencies": {
+ "@emotion/memoize": "^0.9.0",
+ "@emotion/sheet": "^1.4.0",
+ "@emotion/utils": "^1.4.2",
+ "@emotion/weak-memoize": "^0.4.0",
+ "stylis": "4.2.0"
+ }
+ },
+ "node_modules/@emotion/hash": {
+ "version": "0.9.2",
+ "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz",
+ "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==",
+ "license": "MIT"
+ },
+ "node_modules/@emotion/memoize": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz",
+ "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==",
+ "license": "MIT"
+ },
+ "node_modules/@emotion/react": {
+ "version": "11.14.0",
+ "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.14.0.tgz",
+ "integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.18.3",
+ "@emotion/babel-plugin": "^11.13.5",
+ "@emotion/cache": "^11.14.0",
+ "@emotion/serialize": "^1.3.3",
+ "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0",
+ "@emotion/utils": "^1.4.2",
+ "@emotion/weak-memoize": "^0.4.0",
+ "hoist-non-react-statics": "^3.3.1"
+ },
+ "peerDependencies": {
+ "react": ">=16.8.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@emotion/serialize": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.3.tgz",
+ "integrity": "sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==",
+ "license": "MIT",
+ "dependencies": {
+ "@emotion/hash": "^0.9.2",
+ "@emotion/memoize": "^0.9.0",
+ "@emotion/unitless": "^0.10.0",
+ "@emotion/utils": "^1.4.2",
+ "csstype": "^3.0.2"
+ }
+ },
+ "node_modules/@emotion/sheet": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz",
+ "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==",
+ "license": "MIT"
+ },
+ "node_modules/@emotion/unitless": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz",
+ "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==",
+ "license": "MIT"
+ },
+ "node_modules/@emotion/use-insertion-effect-with-fallbacks": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz",
+ "integrity": "sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": ">=16.8.0"
+ }
+ },
+ "node_modules/@emotion/utils": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.2.tgz",
+ "integrity": "sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==",
+ "license": "MIT"
+ },
+ "node_modules/@emotion/weak-memoize": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz",
+ "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==",
+ "license": "MIT"
+ },
+ "node_modules/@eslint-community/eslint-utils": {
+ "version": "4.10.1",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.10.1.tgz",
+ "integrity": "sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "eslint-visitor-keys": "^3.4.3"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ }
+ },
+ "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint-community/regexpp": {
+ "version": "4.12.3",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.3.tgz",
+ "integrity": "sha512-R76UKbvsqI68DJJVTVyqFKqU98CN4+B+acxNfEA2IFarSzP0SjtKf/3+fFiXzTyv5Fj3PxLkGHe2wnVWWMxobQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@eslint/config-array": {
+ "version": "0.23.5",
+ "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.5.tgz",
+ "integrity": "sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@eslint/object-schema": "^3.0.5",
+ "debug": "^4.3.1",
+ "minimatch": "^10.2.4"
+ },
+ "engines": {
+ "node": "^20.19.0 || ^22.13.0 || >=24"
+ }
+ },
+ "node_modules/@eslint/config-helpers": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.7.0.tgz",
+ "integrity": "sha512-DObd/KKUsU+FaFv4PLxSRenpXfQWmPXXP3pPZ6/K1PCrMu2vQpMDMuQe/BqYeoLcz8ro0bVDF1RxOJgfVEdhUw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@eslint/core": "^1.2.1"
+ },
+ "engines": {
+ "node": "^20.19.0 || ^22.13.0 || >=24"
+ }
+ },
+ "node_modules/@eslint/core": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.1.tgz",
+ "integrity": "sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@types/json-schema": "^7.0.15"
+ },
+ "engines": {
+ "node": "^20.19.0 || ^22.13.0 || >=24"
+ }
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
+ "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.6.0",
+ "globals": "^13.19.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@eslint/eslintrc/node_modules/brace-expansion": {
+ "version": "1.1.21",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.21.tgz",
+ "integrity": "sha512-9zeA+KLZNNzglF2TPKRQEDyx6Yby7daAkuy8MiPzpXPsYDWi/DRM8jmwUDxokQjYqBpv5DgPiwD4h4ZZSy1Ujw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/espree": {
+ "version": "9.6.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+ "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "acorn": "^8.9.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.4.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/globals": {
+ "version": "13.24.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+ "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/minimatch": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/@eslint/js": {
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz",
+ "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^20.19.0 || ^22.13.0 || >=24"
+ },
+ "funding": {
+ "url": "https://eslint.org/donate"
+ },
+ "peerDependencies": {
+ "eslint": "^10.0.0"
+ },
+ "peerDependenciesMeta": {
+ "eslint": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@eslint/object-schema": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.5.tgz",
+ "integrity": "sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^20.19.0 || ^22.13.0 || >=24"
+ }
+ },
+ "node_modules/@eslint/plugin-kit": {
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.3.tgz",
+ "integrity": "sha512-IkO+/KEUvwbVpiURZg+P7zF74z5Jxe0UgJxVni+RtoHQ6IZieXaO02kmadomap/q+l6bc/jdPGGqTjhuZnuz1Q==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@eslint/core": "^1.2.1",
+ "levn": "^0.4.1"
+ },
+ "engines": {
+ "node": "^20.19.0 || ^22.13.0 || >=24"
+ }
+ },
+ "node_modules/@floating-ui/core": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.8.0.tgz",
+ "integrity": "sha512-0CIZ5itps/8x7BG8dEIhs53BvCUH2PCoogtakwRTut+Arm58sJooJ0AuZhLw2HJYIR5cMLNPBSS728sPho2khQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@floating-ui/utils": "^0.2.12"
+ }
+ },
+ "node_modules/@floating-ui/dom": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.8.0.tgz",
+ "integrity": "sha512-yXSrzeHZBTZadLOlfyhCkJHNeLJnHRnRInwdZ40L7ZiaAtrBwoYlsDrX3v5zB1Utk7CLfzcOVnVVWoXEky7Ceg==",
+ "license": "MIT",
+ "dependencies": {
+ "@floating-ui/core": "^1.8.0",
+ "@floating-ui/utils": "^0.2.12"
+ }
+ },
+ "node_modules/@floating-ui/utils": {
+ "version": "0.2.12",
+ "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.12.tgz",
+ "integrity": "sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww==",
+ "license": "MIT"
+ },
+ "node_modules/@humanfs/core": {
+ "version": "0.19.2",
+ "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz",
+ "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@humanfs/types": "^0.15.0"
+ },
+ "engines": {
+ "node": ">=18.18.0"
+ }
+ },
+ "node_modules/@humanfs/node": {
+ "version": "0.16.8",
+ "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz",
+ "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@humanfs/core": "^0.19.2",
+ "@humanfs/types": "^0.15.0",
+ "@humanwhocodes/retry": "^0.4.0"
+ },
+ "engines": {
+ "node": ">=18.18.0"
+ }
+ },
+ "node_modules/@humanfs/types": {
+ "version": "0.15.0",
+ "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz",
+ "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18.18.0"
+ }
+ },
+ "node_modules/@humanwhocodes/config-array": {
+ "version": "0.13.0",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz",
+ "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==",
+ "deprecated": "Use @eslint/config-array instead",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@humanwhocodes/object-schema": "^2.0.3",
+ "debug": "^4.3.1",
+ "minimatch": "^3.0.5"
+ },
+ "engines": {
+ "node": ">=10.10.0"
+ }
+ },
+ "node_modules/@humanwhocodes/config-array/node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": {
+ "version": "1.1.21",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.21.tgz",
+ "integrity": "sha512-9zeA+KLZNNzglF2TPKRQEDyx6Yby7daAkuy8MiPzpXPsYDWi/DRM8jmwUDxokQjYqBpv5DgPiwD4h4ZZSy1Ujw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/@humanwhocodes/config-array/node_modules/minimatch": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=12.22"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@humanwhocodes/object-schema": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
+ "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
+ "deprecated": "Use @eslint/object-schema instead",
+ "dev": true,
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/@humanwhocodes/retry": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz",
+ "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18.18"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@img/colour": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz",
+ "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@img/sharp-darwin-arm64": {
+ "version": "0.35.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.35.5.tgz",
+ "integrity": "sha512-QRUlFQ0WxvdWyqqG/WtI3iupfD5rBzmCHXSdPsY91sAtVtTo7Q4cb6zOccZ3gqEqkr0f1As1ehLqmEpDsRf+lg==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-darwin-arm64": "1.3.4"
+ }
+ },
+ "node_modules/@img/sharp-darwin-x64": {
+ "version": "0.35.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.35.5.tgz",
+ "integrity": "sha512-+BR255RhDlpygUpOc/Jdt1nT6DQ3XG/ERo5wbcdOf5Q320dKtPCKPLR1LJs9VGXRaMa8l1uUa0tkCNOXiAxZUw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-darwin-x64": "1.3.4"
+ }
+ },
+ "node_modules/@img/sharp-freebsd-wasm32": {
+ "version": "0.35.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-freebsd-wasm32/-/sharp-freebsd-wasm32-0.35.5.tgz",
+ "integrity": "sha512-Y/z91nEZ4uIBX5X3nfTovjU9lHNKFYbL2lpHCLVNmXQK03VIZvXBBt0KxbPGp2SdGSF+2mQU4e+hQaWOt86iAw==",
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "dependencies": {
+ "@img/sharp-wasm32": "0.35.5"
+ },
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-darwin-arm64": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.3.4.tgz",
+ "integrity": "sha512-5R89nBYiRdUlSWJxPhO+GVtaXzXSxKnRu/xqMn3KTA3L9EB9Oy/P+Nn2f2vlhPuUdy/Zusb2DarbyTpGCfEDuw==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-darwin-x64": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.3.4.tgz",
+ "integrity": "sha512-iR2OKH80yi0U+dUplyh3/xdpFvps6YkCwsXenIJxqxR1v9o+xtKTGbS9H7cps+2Vxjc8B1j96p75NmTGjIhtpQ==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-arm": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.3.4.tgz",
+ "integrity": "sha512-LmRtTsOHuvM2+wlO2Db37dx5MiZhB0FvSunciw48YjdOkZz9KAiRbm8ujeMOA1INqmei5NapFxYEK1D1ZSidmw==",
+ "cpu": [
+ "arm"
+ ],
+ "libc": [
+ "glibc"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-arm64": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.3.4.tgz",
+ "integrity": "sha512-Y3dgX/6lE2QhQb+Gxy0WZxfg9MEm/JBjamZpS2IklP7xIQoKN4hzAm7KcMVGtaVDt3neE9OKBC7vAfonA/Lr1A==",
+ "cpu": [
+ "arm64"
+ ],
+ "libc": [
+ "glibc"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-ppc64": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.3.4.tgz",
+ "integrity": "sha512-Le6boB8Tai0Nis+gIxIpKx68UDVVIqdR8Tin5Yf1z2LJJQLDJvCDRqRu+jC2qCoD+eIomonmOwB4smBRxfVpYQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "libc": [
+ "glibc"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-riscv64": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.3.4.tgz",
+ "integrity": "sha512-aHkkIEHPRdQEegJN20MLmGtxYD9R2wQr3Cwpddnu5+YKMt6Uzax7S9h5gpZTo8wyrGuZSlfQ63OevL5mTyOC7Q==",
+ "cpu": [
+ "riscv64"
+ ],
+ "libc": [
+ "glibc"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-s390x": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.3.4.tgz",
+ "integrity": "sha512-ra/mB6MikESDUO7Yg+Mi95bFBb9GsObURuhnOv3OqknjGe9sZrG8tCe9q0xSIGrtLgvgw0gKnFWcK4blSgQOuQ==",
+ "cpu": [
+ "s390x"
+ ],
+ "libc": [
+ "glibc"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-x64": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.3.4.tgz",
+ "integrity": "sha512-GJ//SSXbnwSDes02umB3nDJLFcQzw8a18V8fyhqr6tV515tOEMdImjjxj1AoafMRz56F3PHgftnj1QEKSU1zkw==",
+ "cpu": [
+ "x64"
+ ],
+ "libc": [
+ "glibc"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linuxmusl-arm64": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.3.4.tgz",
+ "integrity": "sha512-hvulFwtjUcagsis6BBxHwGFwWoNZjgYmULGVrZcyfNbjA8hKILbRxGg15/7w5HDyXHXUos/j6baAWqnCyQ2DWA==",
+ "cpu": [
+ "arm64"
+ ],
+ "libc": [
+ "musl"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linuxmusl-x64": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.3.4.tgz",
+ "integrity": "sha512-6zXKeE/p39I1AmA3cJG35eyBGNqNddLnUXjhwBnsGjFPWqf5VKkDBEqaEkPDoTEtkxwi2vv8Tcr2mDyP4So7Fg==",
+ "cpu": [
+ "x64"
+ ],
+ "libc": [
+ "musl"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-linux-arm": {
+ "version": "0.35.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.35.5.tgz",
+ "integrity": "sha512-LEaXK2WdXVK5ykcw0buWyPMsmLLL2vpHLD6yrNSW+JGEL3BZPA4tpKN6iaMc4AxTTAoaX/sU1rOL51lcIz48ZQ==",
+ "cpu": [
+ "arm"
+ ],
+ "libc": [
+ "glibc"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-arm": "1.3.4"
+ }
+ },
+ "node_modules/@img/sharp-linux-arm64": {
+ "version": "0.35.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.35.5.tgz",
+ "integrity": "sha512-LYVx5JTsOM2CBzmxreh+nl64/3H6Xb09iSLknqH47z2T2DFFxDeFLP5y4dJwe6H7uGQlHPyEEtIqyo3DYsRwdQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "libc": [
+ "glibc"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-arm64": "1.3.4"
+ }
+ },
+ "node_modules/@img/sharp-linux-ppc64": {
+ "version": "0.35.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.35.5.tgz",
+ "integrity": "sha512-QVxAAq8evVRI9ia2vqgwrmWucn5Dfv+JdWzj75pD8omHLPSP7f8p20O8jxzjCcuCEQEOtYOZUmX1hkiZ0kdevA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "libc": [
+ "glibc"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-ppc64": "1.3.4"
+ }
+ },
+ "node_modules/@img/sharp-linux-riscv64": {
+ "version": "0.35.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.35.5.tgz",
+ "integrity": "sha512-LtdreXguaavKODPIfzJ4kffx7UNt1omwtK0rch4EBbbSTXPnxWmYSayXdLJw0fJzQ97kHt1gL/yh4tvU+nCyRQ==",
+ "cpu": [
+ "riscv64"
+ ],
+ "libc": [
+ "glibc"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-riscv64": "1.3.4"
+ }
+ },
+ "node_modules/@img/sharp-linux-s390x": {
+ "version": "0.35.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.35.5.tgz",
+ "integrity": "sha512-UZasTOFiYzotTsGOCu42BfUzP6Tu6Do/947iRm1RsLKvlllxwGcn4RN27LibGWceix4Y+Pmw3jsnTcCQIgWjqA==",
+ "cpu": [
+ "s390x"
+ ],
+ "libc": [
+ "glibc"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-s390x": "1.3.4"
+ }
+ },
+ "node_modules/@img/sharp-linux-x64": {
+ "version": "0.35.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.35.5.tgz",
+ "integrity": "sha512-SxFtLTeJInhAA9Q836kux2vZNeOBQEx658qvbboZScr0wIARym3IcGmW7KpVD5sbVg0Ojy+udFQdayYIZyoNog==",
+ "cpu": [
+ "x64"
+ ],
+ "libc": [
+ "glibc"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-x64": "1.3.4"
+ }
+ },
+ "node_modules/@img/sharp-linuxmusl-arm64": {
+ "version": "0.35.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.35.5.tgz",
+ "integrity": "sha512-9HbMclmI1zlNkFRs3z9/eBtDjfD0sGlrX1z6b1qwmiFY5ElDLh4BC0LPBdVp7z1DXFiKlIcznf+ZlsuZzLxQqg==",
+ "cpu": [
+ "arm64"
+ ],
+ "libc": [
+ "musl"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linuxmusl-arm64": "1.3.4"
+ }
+ },
+ "node_modules/@img/sharp-linuxmusl-x64": {
+ "version": "0.35.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.35.5.tgz",
+ "integrity": "sha512-4KOphqB035HrVdqLZfCgMzzERrQkkzOwRhl4OAkRO1YCldbaFjySXMaK534Mo0V+LndnlJk+sbUyLeU0ULyD1A==",
+ "cpu": [
+ "x64"
+ ],
+ "libc": [
+ "musl"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linuxmusl-x64": "1.3.4"
+ }
+ },
+ "node_modules/@img/sharp-wasm32": {
+ "version": "0.35.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.35.5.tgz",
+ "integrity": "sha512-Ptsga1su4tQx+LLF1ECS9U6nz5kmrXKo6XVbtR48Ke3ZRxxgaWBu7IDtEe1quo8hiupwm6WFqxVlXaSf7IINGQ==",
+ "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT",
+ "optional": true,
+ "dependencies": {
+ "@emnapi/runtime": "^1.11.3"
+ },
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-webcontainers-wasm32": {
+ "version": "0.35.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-webcontainers-wasm32/-/sharp-webcontainers-wasm32-0.35.5.tgz",
+ "integrity": "sha512-hfhF/FmoQyTUkA0bIKFOtw536BQSeBMe6BF6QyWlrPxT754+TFLaZ7sKKTfvvM0yJgKgaYTwnFCIZ/GuDw5SUA==",
+ "cpu": [
+ "wasm32"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "dependencies": {
+ "@img/sharp-wasm32": "0.35.5"
+ },
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-win32-arm64": {
+ "version": "0.35.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.35.5.tgz",
+ "integrity": "sha512-X4t7g+7ZA5DKblCBEXGjUqqemj4vczING/5viFwAL8h4N3qYeyjwdCvRLHi4EdOUI+2Z7UFlp1VM+p/AuEtm6Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "Apache-2.0 AND LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-win32-ia32": {
+ "version": "0.35.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.35.5.tgz",
+ "integrity": "sha512-5Zm82LoBc43nhwNybZlG7Y1KO//Zhsn306fQl29ZOuStHLGTo3BWL83q3cznX0poxSAMuYL1On/BHBxkBeKr6A==",
+ "cpu": [
+ "ia32"
+ ],
+ "license": "Apache-2.0 AND LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": "^20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-win32-x64": {
+ "version": "0.35.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.35.5.tgz",
+ "integrity": "sha512-x76eH0vEiHlcMQu8Y8IenntaACtddpT6W0wmXtWrnKcnKI7ME5DdgqhAD6SEWOEl1v2zDvkZDhFA9KnURwpfqg==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "Apache-2.0 AND LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@isaacs/cliui": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
+ "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^5.1.2",
+ "string-width-cjs": "npm:string-width@^4.2.0",
+ "strip-ansi": "^7.0.1",
+ "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
+ "wrap-ansi": "^8.1.0",
+ "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@isaacs/cliui/node_modules/string-width": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "eastasianwidth": "^0.2.0",
+ "emoji-regex": "^9.2.2",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.13",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
+ "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.0",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ }
+ },
+ "node_modules/@jridgewell/remapping": {
+ "version": "2.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
+ "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz",
+ "integrity": "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==",
+ "license": "MIT"
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.31",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
+ "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "node_modules/@keyv/bigmap": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@keyv/bigmap/-/bigmap-1.3.1.tgz",
+ "integrity": "sha512-WbzE9sdmQtKy8vrNPa9BRnwZh5UF4s1KTmSK0KUVLo3eff5BlQNNWDnFOouNpKfPKDnms9xynJjsMYjMaT/aFQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "hashery": "^1.4.0",
+ "hookified": "^1.15.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ },
+ "peerDependencies": {
+ "keyv": "^5.6.0"
+ }
+ },
+ "node_modules/@keyv/serialize": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.1.1.tgz",
+ "integrity": "sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@microsoft/eslint-formatter-sarif": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@microsoft/eslint-formatter-sarif/-/eslint-formatter-sarif-3.1.0.tgz",
+ "integrity": "sha512-/mn4UXziHzGXnKCg+r8HGgPy+w4RzpgdoqFuqaKOqUVBT5x2CygGefIrO4SusaY7t0C4gyIWMNu6YQT6Jw64Cw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "eslint": "^8.9.0",
+ "jschardet": "latest",
+ "lodash": "^4.17.14",
+ "utf8": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/@microsoft/eslint-formatter-sarif/node_modules/@eslint/js": {
+ "version": "8.57.1",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz",
+ "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@microsoft/eslint-formatter-sarif/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@microsoft/eslint-formatter-sarif/node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@microsoft/eslint-formatter-sarif/node_modules/brace-expansion": {
+ "version": "1.1.21",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.21.tgz",
+ "integrity": "sha512-9zeA+KLZNNzglF2TPKRQEDyx6Yby7daAkuy8MiPzpXPsYDWi/DRM8jmwUDxokQjYqBpv5DgPiwD4h4ZZSy1Ujw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/@microsoft/eslint-formatter-sarif/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/@microsoft/eslint-formatter-sarif/node_modules/eslint": {
+ "version": "8.57.1",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz",
+ "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==",
+ "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.6.1",
+ "@eslint/eslintrc": "^2.1.4",
+ "@eslint/js": "8.57.1",
+ "@humanwhocodes/config-array": "^0.13.0",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@nodelib/fs.walk": "^1.2.8",
+ "@ungap/structured-clone": "^1.2.0",
+ "ajv": "^6.12.4",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.2.2",
+ "eslint-visitor-keys": "^3.4.3",
+ "espree": "^9.6.1",
+ "esquery": "^1.4.2",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "globals": "^13.19.0",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.2.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "is-path-inside": "^3.0.3",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.3",
+ "strip-ansi": "^6.0.1",
+ "text-table": "^0.2.0"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@microsoft/eslint-formatter-sarif/node_modules/eslint-scope": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
+ "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@microsoft/eslint-formatter-sarif/node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@microsoft/eslint-formatter-sarif/node_modules/espree": {
+ "version": "9.6.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+ "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "acorn": "^8.9.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.4.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@microsoft/eslint-formatter-sarif/node_modules/file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "flat-cache": "^3.0.4"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/@microsoft/eslint-formatter-sarif/node_modules/flat-cache": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
+ "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "flatted": "^3.2.9",
+ "keyv": "^4.5.3",
+ "rimraf": "^3.0.2"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/@microsoft/eslint-formatter-sarif/node_modules/globals": {
+ "version": "13.24.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+ "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@microsoft/eslint-formatter-sarif/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@microsoft/eslint-formatter-sarif/node_modules/is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@microsoft/eslint-formatter-sarif/node_modules/keyv": {
+ "version": "4.5.4",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
+ "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "json-buffer": "3.0.1"
+ }
+ },
+ "node_modules/@microsoft/eslint-formatter-sarif/node_modules/minimatch": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/@microsoft/eslint-formatter-sarif/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@microsoft/eslint-formatter-sarif/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@napi-rs/wasm-runtime": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.2.4.tgz",
+ "integrity": "sha512-AJxoUD2/15ESHbvpcyjU274nsAPLuOtPHCk0vKJM5pj//Fg/B1FXNWjPnXTT9PymCYYiHo4zPj0ZomXBKhoy7g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@tybys/wasm-util": "^0.10.3"
+ },
+ "engines": {
+ "node": "^20.19.0 || ^22.13.0 || >=23.5.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/Brooooooklyn"
+ },
+ "peerDependencies": {
+ "@emnapi/core": "^1.7.1 || ^2.0.0-alpha.4",
+ "@emnapi/runtime": "^1.7.1 || ^2.0.0-alpha.4"
+ }
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@npmcli/config": {
+ "version": "8.3.4",
+ "resolved": "https://registry.npmjs.org/@npmcli/config/-/config-8.3.4.tgz",
+ "integrity": "sha512-01rtHedemDNhUXdicU7s+QYz/3JyV5Naj84cvdXGH4mgCdL+agmSYaLF4LUG4vMCLzhBO8YtS0gPpH1FGvbgAw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "@npmcli/map-workspaces": "^3.0.2",
+ "@npmcli/package-json": "^5.1.1",
+ "ci-info": "^4.0.0",
+ "ini": "^4.1.2",
+ "nopt": "^7.2.1",
+ "proc-log": "^4.2.0",
+ "semver": "^7.3.5",
+ "walk-up-path": "^3.0.1"
+ },
+ "engines": {
+ "node": "^16.14.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@npmcli/config/node_modules/ini": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz",
+ "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@npmcli/git": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.8.tgz",
+ "integrity": "sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "@npmcli/promise-spawn": "^7.0.0",
+ "ini": "^4.1.3",
+ "lru-cache": "^10.0.1",
+ "npm-pick-manifest": "^9.0.0",
+ "proc-log": "^4.0.0",
+ "promise-inflight": "^1.0.1",
+ "promise-retry": "^2.0.1",
+ "semver": "^7.3.5",
+ "which": "^4.0.0"
+ },
+ "engines": {
+ "node": "^16.14.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@npmcli/git/node_modules/ini": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz",
+ "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@npmcli/git/node_modules/isexe": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.5.tgz",
+ "integrity": "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@npmcli/git/node_modules/lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/@npmcli/git/node_modules/which": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz",
+ "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^3.1.1"
+ },
+ "bin": {
+ "node-which": "bin/which.js"
+ },
+ "engines": {
+ "node": "^16.13.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@npmcli/map-workspaces": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-3.0.6.tgz",
+ "integrity": "sha512-tkYs0OYnzQm6iIRdfy+LcLBjcKuQCeE5YLb8KnrIlutJfheNaPvPpgoFEyEFgbjzl5PLZ3IA/BWAwRU0eHuQDA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "@npmcli/name-from-folder": "^2.0.0",
+ "glob": "^10.2.2",
+ "minimatch": "^9.0.0",
+ "read-package-json-fast": "^3.0.0"
+ },
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@npmcli/map-workspaces/node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@npmcli/map-workspaces/node_modules/brace-expansion": {
+ "version": "2.1.7",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.7.tgz",
+ "integrity": "sha512-uZbew1NqdmPDTMJ8ah1y+b+9QEJrfkXFk3RcTQw3X0jW/xRUvFKsg1CfQdSYGdTbXZWExtU3J3ccxtnfw1Fi0g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/@npmcli/map-workspaces/node_modules/minimatch": {
+ "version": "9.0.9",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
+ "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@npmcli/name-from-folder": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz",
+ "integrity": "sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@npmcli/package-json": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.2.1.tgz",
+ "integrity": "sha512-f7zYC6kQautXHvNbLEWgD/uGu1+xCn9izgqBfgItWSx22U0ZDekxN08A1vM8cTxj/cRVe0Q94Ode+tdoYmIOOQ==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "@npmcli/git": "^5.0.0",
+ "glob": "^10.2.2",
+ "hosted-git-info": "^7.0.0",
+ "json-parse-even-better-errors": "^3.0.0",
+ "normalize-package-data": "^6.0.0",
+ "proc-log": "^4.0.0",
+ "semver": "^7.5.3"
+ },
+ "engines": {
+ "node": "^16.14.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@npmcli/package-json/node_modules/json-parse-even-better-errors": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz",
+ "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@npmcli/promise-spawn": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.2.tgz",
+ "integrity": "sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "which": "^4.0.0"
+ },
+ "engines": {
+ "node": "^16.14.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@npmcli/promise-spawn/node_modules/isexe": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.5.tgz",
+ "integrity": "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@npmcli/promise-spawn/node_modules/which": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz",
+ "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^3.1.1"
+ },
+ "bin": {
+ "node-which": "bin/which.js"
+ },
+ "engines": {
+ "node": "^16.13.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@oslojs/encoding": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@oslojs/encoding/-/encoding-1.1.0.tgz",
+ "integrity": "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==",
+ "license": "MIT"
+ },
+ "node_modules/@oxc-project/types": {
+ "version": "0.156.0",
+ "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.156.0.tgz",
+ "integrity": "sha512-1Duyg48TdJNdyhEB8Xn1L36bT9Pv6GUtlKjHxOys8xkaF/rQq3XJE+bAurSK/AgIz5mGFsb77cn9Pb20+WCScw==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/oxc-project"
+ }
+ },
+ "node_modules/@parcel/watcher": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.6.0.tgz",
+ "integrity": "sha512-7FNeNl8NCE7aINx7WXiKQrPYZWC/hvrTsmk6zmxbI7LTXE7hVek/n8AfVgpe2y82zl3w0HvCHN0bVKMBoJcC0w==",
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "detect-libc": "^2.0.3",
+ "is-glob": "^4.0.3",
+ "node-addon-api": "^7.0.0",
+ "picomatch": "^4.0.4"
+ },
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ },
+ "optionalDependencies": {
+ "@parcel/watcher-android-arm64": "2.6.0",
+ "@parcel/watcher-darwin-arm64": "2.6.0",
+ "@parcel/watcher-darwin-x64": "2.6.0",
+ "@parcel/watcher-freebsd-x64": "2.6.0",
+ "@parcel/watcher-linux-arm-glibc": "2.6.0",
+ "@parcel/watcher-linux-arm-musl": "2.6.0",
+ "@parcel/watcher-linux-arm64-glibc": "2.6.0",
+ "@parcel/watcher-linux-arm64-musl": "2.6.0",
+ "@parcel/watcher-linux-x64-glibc": "2.6.0",
+ "@parcel/watcher-linux-x64-musl": "2.6.0",
+ "@parcel/watcher-win32-arm64": "2.6.0",
+ "@parcel/watcher-win32-x64": "2.6.0"
+ }
+ },
+ "node_modules/@parcel/watcher-android-arm64": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.6.0.tgz",
+ "integrity": "sha512-trgpLSCKRC/huFjXX/Smh+0sWe4+YtKfktIToiMl59ghz7z+qkH6kMvNnUbLyRs9N11t8l4svSCs1+5B3rOAhA==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-darwin-arm64": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.6.0.tgz",
+ "integrity": "sha512-Y3QV0gl7Q1zbfueunkWIERICbEojQFCgpyG7YqOGNFLsckXyI1xu9mAIUpKY9QBYzBtSkN8dBPwd3yiAO9ovMw==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-darwin-x64": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.6.0.tgz",
+ "integrity": "sha512-Ohv6OpzhUfKYD7Beb8kDvG0jbIxORCYY1JRdZnaBtnjjkJxgD7ZVL0nw2sCYd0yTMKTvz3nnTnOF3cDifK+kvw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-freebsd-x64": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.6.0.tgz",
+ "integrity": "sha512-5HmXvDgs8VK+74jF9y9/2FE3/OnlcKmc56tjmSrEuZjpSZOGL+fvAu+HKJBdPs9uwoP2hE6TlSUpXZ/C5jUFmQ==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-linux-arm-glibc": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.6.0.tgz",
+ "integrity": "sha512-Ps/hui3A+vMbjdqlqAowK2ZL8+BO8dBjxeWXj6npTBs3jx4wWmbPpaLuqwrQrSqIVMCnpWo238bJ1U37GhQOYg==",
+ "cpu": [
+ "arm"
+ ],
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-linux-arm-musl": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.6.0.tgz",
+ "integrity": "sha512-9c6AUHgHoG+IY88MRIHupztQiQnrbqHYQjkM2btA+Bf/wQnQMuiD0Wfk1EVv3TlNT3x41uU71rn6E4xh/+zvkw==",
+ "cpu": [
+ "arm"
+ ],
+ "libc": [
+ "musl"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-linux-arm64-glibc": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.6.0.tgz",
+ "integrity": "sha512-yHRqS2owEXe6Hic9z6Mh1ECsCd+ODVOGvZDyciqRd21+v+o+DnXMOrw50DSpIG2sb8GPEaPPmfeCAWKPJdq46g==",
+ "cpu": [
+ "arm64"
+ ],
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-linux-arm64-musl": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.6.0.tgz",
+ "integrity": "sha512-WhB2e/V7rqdHHWZusBSPuy5Ei8S6lSz6FE5TKKQz5h3a0O+C+mhY7vxU9b/stqvMb8beLnPY82ZrFTLKs+SrKA==",
+ "cpu": [
+ "arm64"
+ ],
+ "libc": [
+ "musl"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-linux-x64-glibc": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.6.0.tgz",
+ "integrity": "sha512-ulGE6x6Oz6iAwg75T8YQSoguBWasniIbX+QWpaYPcCnDOpdWX3k+4xbEYPZVLxOuoJI+svJJPD3sEj8G7lrQ3A==",
+ "cpu": [
+ "x64"
+ ],
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-linux-x64-musl": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.6.0.tgz",
+ "integrity": "sha512-tkBYKt7YQrjIJWYDnto2YgO8MRkjlMTSNoRHzsXinBqbLdeOM3L32wPZJvIZxqaLMfSlS/4sUjH/6STVP/XDLw==",
+ "cpu": [
+ "x64"
+ ],
+ "libc": [
+ "musl"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-win32-arm64": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.6.0.tgz",
+ "integrity": "sha512-gIZAP23jaHjGWasY/TY6yL7NHFClf0Ga7FN+iINvk+KN94rhm94lYZhFsbYFNcA04/onvGD9kKmiJLJB2HbNwQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-win32-x64": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.6.0.tgz",
+ "integrity": "sha512-cA+/pXV2YkfxlIcXOQ5fSWqAzzPyD78/x5qbK/I0vUkrlYHA8TIz+MXjAbGouguKVSI4bOmkTSJ1/poVSsgt+A==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@pkgjs/parseargs": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
+ "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@pkgr/core": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.3.6.tgz",
+ "integrity": "sha512-SEeaJLb3qBNF/OaXnaR1NmmBbFYk1zC0ZH/52fATcRPLFg/p791YrcyFFy44Bo9sLaGuSuLp5Q6axbb/O+v/RA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/pkgr"
+ }
+ },
+ "node_modules/@popperjs/core": {
+ "version": "2.11.8",
+ "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz",
+ "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==",
+ "license": "MIT",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/popperjs"
+ }
+ },
+ "node_modules/@prettier/parse-srcset": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@prettier/parse-srcset/-/parse-srcset-3.1.0.tgz",
+ "integrity": "sha512-FIRv2rZotO9NP/r66taYqD1zICpPiBbrECqjKV/xqNotqDxF7fLzzUeK+1RSRx9Tenk0DajR/GcRmTJ2qtHaKQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@rolldown/binding-android-arm-eabi": {
+ "version": "1.2.18",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.18.tgz",
+ "integrity": "sha512-ubTG+4KlidvioxjOFdsdEa2F6JVGZb8m2ByJUqQ7fYzUeT1cEn194POcsQ10PKH4p//q0YQn4SB3YpSuzcA1Yg==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-android-arm64": {
+ "version": "1.2.18",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.18.tgz",
+ "integrity": "sha512-2Xa1t/JeFGTZn5TbzgPppcCftF8sCVnTNvrIvoSdcZhoFzAuVy1L3xxQUQ4sfWDtwVzg1u6Yi1R3SlJugRNV2Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-darwin-arm64": {
+ "version": "1.2.18",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.18.tgz",
+ "integrity": "sha512-iUzw9HshVvrWci9gVXjxWS7/M/IcLvNo67vu2c/w9zKBz4hIvPRixdUpIW/iCfhldLaq9ER2hecsI9UY5z0/yA==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-darwin-x64": {
+ "version": "1.2.18",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.18.tgz",
+ "integrity": "sha512-XuDHFzbFEtZl0QGJi92+fmG67tfnp1iZ9VOeDkwasGyTq2VG3/5PnJnvAr+MTzFh/rNScJ3VhN+XpZyyGsN7Jw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-freebsd-x64": {
+ "version": "1.2.18",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.18.tgz",
+ "integrity": "sha512-MM8opLfsLK15oEXDz6iBc0t3ahu+ew9jsAmha+ovZ33hSwYgqo7YmpRITqFTfW7xA71BLEQ3jJdTsaCmhB1c9w==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-linux-arm-gnueabihf": {
+ "version": "1.2.18",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.18.tgz",
+ "integrity": "sha512-J6EoCWiy5RnFQzHrKyHXXevZ9lukQfGpnchX/zG/k/WC2nc9O9XyS1JgA8kI9VxMFggMbCPjpv7LcikriXfehw==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-linux-arm64-gnu": {
+ "version": "1.2.18",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.18.tgz",
+ "integrity": "sha512-HIkFuLF7CdDeki+1aCZLLbLq0hk/PHntb+z4/YCTo47JbksTD6jJEELIz92tYROmDmvMrNqUMqBi71BkJLDR+A==",
+ "cpu": [
+ "arm64"
+ ],
+ "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.2.18",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.18.tgz",
+ "integrity": "sha512-4oqWItLLYt7IceOnElCct8T2ek5p7PmD7LN04TRJRXGo5f3HtKTgGH6PhYRFK4C2ICkq/LMUU0BVPvvlAKhm8g==",
+ "cpu": [
+ "arm64"
+ ],
+ "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.18",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.18.tgz",
+ "integrity": "sha512-+AkRly5SrCEgnPhGRfub7pucASYEC2fTsxZg7VCcnozpA2+Wn/gCYy1t7LuJS67/xyJu/7noYBJncDUkbwgw2A==",
+ "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.18",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.18.tgz",
+ "integrity": "sha512-Ttg1r9vVykMnQrE/GwYO9icKtXiuiMfRe/w74xJkeoVuvhRG+WtT6LEMOf58Yl63yd77lhHzO8Y55R8CC3XALA==",
+ "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.2.18",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.18.tgz",
+ "integrity": "sha512-xX1Tt4o5jUMma0vJsXp5eRZA9nOuyigb2dKJMMzZRmzMxLYGE9PaKKSqHPzPvSQgM8ZOEacSTQwDQcwWfh0xmQ==",
+ "cpu": [
+ "x64"
+ ],
+ "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.2.18",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.18.tgz",
+ "integrity": "sha512-4VVlGI5K2kociZlW3lSN8VjG3TW5yQIlAcfCdBXMgGjJxZll15Fa4ocRHXHvIVVnwlibCw/NQajJrNDiqqpiiw==",
+ "cpu": [
+ "x64"
+ ],
+ "libc": [
+ "musl"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-openharmony-arm64": {
+ "version": "1.2.18",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.18.tgz",
+ "integrity": "sha512-PApTsgH1jLYuyy3tSCz9De82Gq5qXwi7vImVZhEzTgX1C4150Cp5M2ZfL3pLvbCvbEHL0oJeC6pd6podtv8Y5w==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-win32-arm64-msvc": {
+ "version": "1.2.18",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.18.tgz",
+ "integrity": "sha512-J2XjWjx/SP+4x0H4r6dz3Vzb5WVkg7re40Do9K7HJ3sK2/xcmZrWwakXlSwaMvOkvruLJCD4CL/3wqsIR/thgg==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-win32-x64-msvc": {
+ "version": "1.2.18",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.18.tgz",
+ "integrity": "sha512-XwRJxRQvkuEtS0hIIt29QrqPJ+JzMJSNYHJw4ae/mc6uEarfRG1ceyg4HmmWiBdL/YCb6g7N5BLbSvmRJRYZHw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/pluginutils": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.1.0.tgz",
+ "integrity": "sha512-K+NU2HDCEem4sClgHH4ZZXwdJeNFkJo+hRk479DIwdIviAPN2hFJH1KHHwg8CxHQXvi0M5XY4deTXINfIiSG6w==",
+ "license": "MIT"
+ },
+ "node_modules/@shikijs/core": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-4.6.0.tgz",
+ "integrity": "sha512-bfd4OKgvoyXYiYmMRuleA656P4V7M/Du9lcTl38Ngm6KszMj7bq4J1IGZwSYR4c95Tv5UQALtYNWUwaI9UT3xw==",
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/primitive": "4.6.0",
+ "@shikijs/types": "4.6.0",
+ "@shikijs/vscode-textmate": "^10.1.0",
+ "@types/hast": "^3.0.5",
+ "hast-util-to-html": "^9.0.6"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/@shikijs/engine-javascript": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-4.6.0.tgz",
+ "integrity": "sha512-K0oqxFoL+kEMdz89mHLFO15Tsbv3kFZ6WR1cXZKMvLSc+oqaM00A6pyga1qSeXB22dP0tTiSApRcGBaKWsEccg==",
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/types": "4.6.0",
+ "@shikijs/vscode-textmate": "^10.1.0",
+ "oniguruma-to-es": "^4.3.6"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/@shikijs/engine-oniguruma": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-4.6.0.tgz",
+ "integrity": "sha512-aggd6Q7SuJOXNnsUbfG2XesxBJKBMAw/PDTUo9PyRjMaaJJ2dNrI+q0C+25ARXAK9yLHAlwxc9oRT2u68YKZ7w==",
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/types": "4.6.0",
+ "@shikijs/vscode-textmate": "^10.1.0"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/@shikijs/langs": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-4.6.0.tgz",
+ "integrity": "sha512-1yMEX3oCVV54LUq/ovfpRkDQoYDkcvjSWFFa/YLUDMiSoRzMi2uxLJYbv41ahT8Lu9lFMaa7hecd3Q39trqUyg==",
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/types": "4.6.0"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/@shikijs/primitive": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/primitive/-/primitive-4.6.0.tgz",
+ "integrity": "sha512-c54+TQEo9ToqgfL/AU8FpjnV09+GA9Oa7M5ROkkXteZfp5XzpAJGXjjvZQFQioJOwm/w/6Z3lIzQstAkl8coag==",
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/types": "4.6.0",
+ "@shikijs/vscode-textmate": "^10.1.0",
+ "@types/hast": "^3.0.5"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/@shikijs/themes": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-4.6.0.tgz",
+ "integrity": "sha512-qHAVAs80RiGD+IRuH9G+JPDOEc9A/kHsng4EzCUCwB9bLzW6Z0y9WETh2YyCcADJBmfrIaJ1Jp7KBNP6FHkgtQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/types": "4.6.0"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/@shikijs/types": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-4.6.0.tgz",
+ "integrity": "sha512-+ENG1adsKt/X7cRYw1Nl7BEpBmPOjmQ7bR/eGmHuMlT8gtOFf3KEi5l31DJYyAWhW6Y6bjP1plU7FmaxWGENFw==",
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/vscode-textmate": "^10.1.0",
+ "@types/hast": "^3.0.5"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/@shikijs/vscode-textmate": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.1.0.tgz",
+ "integrity": "sha512-cVBuhDQjBZaNMTwBquYfPydrUP+E3hE6oYGasx8h6ZrODIM7/r+gxLDXdd66oszbrggZHEntdE6j+5gYIVyMWQ==",
+ "license": "MIT"
+ },
+ "node_modules/@sindresorhus/merge-streams": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz",
+ "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@tybys/wasm-util": {
+ "version": "0.10.4",
+ "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.4.tgz",
+ "integrity": "sha512-W3c4gRigFS0T/Ma4qIYF3GDAc5AQdHb1yL5znJT1Zv1YaD9Kitx656wBjvr19qbiosmZT8lWDM5BEMynUqX65A==",
+ "devOptional": true,
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@types/concat-stream": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-2.0.3.tgz",
+ "integrity": "sha512-3qe4oQAPNwVNwK4C9c8u+VJqv9kez+2MR4qJpoPFfXtgxxif1QbFusvXzK0/Wra2VX07smostI2VMmJNSpZjuQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/debug": {
+ "version": "4.1.13",
+ "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.13.tgz",
+ "integrity": "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/ms": "*"
+ }
+ },
+ "node_modules/@types/esrecurse": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz",
+ "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.10.tgz",
+ "integrity": "sha512-lTyOMnOcmRBzdCv6/4zUZCrEhV0xrqQiUZBZtVcbmLHBXKLnN8q89v/wKRF/Q0HbwVsqbIG3o5HDoFl9sduM+g==",
+ "license": "MIT"
+ },
+ "node_modules/@types/estree-jsx": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz",
+ "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "*"
+ }
+ },
+ "node_modules/@types/hast": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.5.tgz",
+ "integrity": "sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "*"
+ }
+ },
+ "node_modules/@types/is-empty": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@types/is-empty/-/is-empty-1.2.3.tgz",
+ "integrity": "sha512-4J1l5d79hoIvsrKh5VUKVRA1aIdsOb10Hu5j3J2VfP/msDnfTdGPmNp2E1Wg+vs97Bktzo+MZePFFXSGoykYJw==",
+ "dev": true,
+ "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",
+ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/mdast": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
+ "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "*"
+ }
+ },
+ "node_modules/@types/ms": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz",
+ "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/nlcst": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-2.0.3.tgz",
+ "integrity": "sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "*"
+ }
+ },
+ "node_modules/@types/node": {
+ "version": "24.19.2",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-24.19.2.tgz",
+ "integrity": "sha512-93d49wCWJkCyN87MxLpNN6KXPCwFw7bVUg79mGUV1OS40JGWwVCr8n61DXCSqz7CV6/VfPkb7xec7uP2M+QHWQ==",
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": ">=7.24.0 <7.24.7"
+ }
+ },
+ "node_modules/@types/parse-json": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz",
+ "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==",
+ "license": "MIT"
+ },
+ "node_modules/@types/react": {
+ "version": "19.3.0",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-19.3.0.tgz",
+ "integrity": "sha512-N0rFCuH9YoxG9/m61l9MfpJKfmLOVU0em7ipIz6TRgSSkvReLB9vL85GB+yr8Bs5leqpvg96JSwF4ZS1s4viQg==",
+ "license": "MIT",
+ "dependencies": {
+ "csstype": "^3.2.2"
+ }
+ },
+ "node_modules/@types/react-dom": {
+ "version": "19.3.0",
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.3.0.tgz",
+ "integrity": "sha512-ZI7bU42mZXXKHn/qNLEw2IrbiINU7X5+vfgdixBHkCNpYWXjKgfQ/P+uyGb5CjOLB9UcnTeg3rylQtV2hym44Q==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@types/react": "^19.3.0"
+ }
+ },
+ "node_modules/@types/react-transition-group": {
+ "version": "4.4.12",
+ "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.12.tgz",
+ "integrity": "sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@types/react": "*"
+ }
+ },
+ "node_modules/@types/sax": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz",
+ "integrity": "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/supports-color": {
+ "version": "8.1.3",
+ "resolved": "https://registry.npmjs.org/@types/supports-color/-/supports-color-8.1.3.tgz",
+ "integrity": "sha512-Hy6UMpxhE3j1tLpl27exp1XqHD7n8chAiNPzWfz16LPZoMMoSc4dzLl6w9qijkEb/r5O1ozdu1CWGA2L83ZeZg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/text-table": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/@types/text-table/-/text-table-0.2.5.tgz",
+ "integrity": "sha512-hcZhlNvMkQG/k1vcZ6yHOl6WAYftQ2MLfTHcYRZ2xYZFD8tGVnE3qFV0lj1smQeDSR7/yY0PyuUalauf33bJeA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/unist": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
+ "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
+ "license": "MIT"
+ },
+ "node_modules/@typescript-eslint/eslint-plugin": {
+ "version": "8.72.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.72.2.tgz",
+ "integrity": "sha512-222PKFXKihmFpi/pS5njoBgdAqsPhj2/GBmFbrNw8Tq8gEG9Sv+kSlKFy4u2q+mJv9ZzJgM2Gkv/bUzRZwZw5g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/regexpp": "^4.12.2",
+ "@typescript-eslint/scope-manager": "8.72.2",
+ "@typescript-eslint/type-utils": "8.72.2",
+ "@typescript-eslint/utils": "8.72.2",
+ "@typescript-eslint/visitor-keys": "8.72.2",
+ "ignore": "^7.0.5",
+ "natural-compare": "^1.4.0",
+ "ts-api-utils": "^2.5.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/parser": "^8.72.2",
+ "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
+ "typescript": ">=4.8.4 <6.1.0"
+ }
+ },
+ "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": {
+ "version": "7.0.14",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.14.tgz",
+ "integrity": "sha512-wCBiZ77u1tuWde6G/nfOtLaCTYcFDU5yCzARzK10y+rLhzYoL7a7yEemcopcc2Mzow7gZOIjnV2ym1NYmdiJOQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/@typescript-eslint/parser": {
+ "version": "8.72.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.72.2.tgz",
+ "integrity": "sha512-llP+T1YuJOLlxEciP6OyQGtz5SMxyn+9LA2BvZw5RmToGVa1y4beEDVQL6Gje7T5WFYh19WREjDCN9Ev4gm5AA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/scope-manager": "8.72.2",
+ "@typescript-eslint/types": "8.72.2",
+ "@typescript-eslint/typescript-estree": "8.72.2",
+ "@typescript-eslint/visitor-keys": "8.72.2",
+ "debug": "^4.4.3"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
+ "typescript": ">=4.8.4 <6.1.0"
+ }
+ },
+ "node_modules/@typescript-eslint/project-service": {
+ "version": "8.72.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.72.2.tgz",
+ "integrity": "sha512-6y5dLTZdHhI8Eh3yIQ/bfQhRKwn5e+TpJj64o18Cngc0iW/BCrVvrr6zGYqXPnYH31u6YXAYiFh0+qxX5mybJw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/tsconfig-utils": "^8.72.2",
+ "@typescript-eslint/types": "^8.72.2",
+ "debug": "^4.4.3"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4 <6.1.0"
+ }
+ },
+ "node_modules/@typescript-eslint/scope-manager": {
+ "version": "8.72.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.72.2.tgz",
+ "integrity": "sha512-iIoMJ6/8c1/QpFNyFjU0d1YzPco4MsZjQw0k3V+vfzNWAFmUmvhlyMoYEoYYDQZXc+J6Gi1X5XcxlzW2taIIGQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/types": "8.72.2",
+ "@typescript-eslint/visitor-keys": "8.72.2"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/tsconfig-utils": {
+ "version": "8.72.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.72.2.tgz",
+ "integrity": "sha512-+h3iCgZXuTNtoLXcnnjP12ZUHLMqoUcIHPfQrFEXTUqvb9dF8QK9b5nv5VtSo5fLkdHuks8ehbTzZj3rImAm9w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4 <6.1.0"
+ }
+ },
+ "node_modules/@typescript-eslint/type-utils": {
+ "version": "8.72.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.72.2.tgz",
+ "integrity": "sha512-STfkR38qIdhfkLpgtXnUjAzsNy4xouqiBO0lrVc/Wpk9Kem5/aHXUx1J8dGC16zpdYN1+yc2ILQ28er1kXX7ag==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/types": "8.72.2",
+ "@typescript-eslint/typescript-estree": "8.72.2",
+ "@typescript-eslint/utils": "8.72.2",
+ "debug": "^4.4.3",
+ "ts-api-utils": "^2.5.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
+ "typescript": ">=4.8.4 <6.1.0"
+ }
+ },
+ "node_modules/@typescript-eslint/types": {
+ "version": "8.72.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.72.2.tgz",
+ "integrity": "sha512-Xfn37OLZx03+PCU7qWx9DTv2FCRh1E6fk2+wONeNY15HXIwtcwuveaSwVpGAUptkNmPQegRxW5JyRel9T7wrog==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree": {
+ "version": "8.72.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.72.2.tgz",
+ "integrity": "sha512-pQEGqIK/cqEvKivVWaFLYpe7XYejFxfuAOi4mu1oAWFvIo36aRHI9esRFTUxcIy/z8N482RJyH+LpZB0ZIU7Ow==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/project-service": "8.72.2",
+ "@typescript-eslint/tsconfig-utils": "8.72.2",
+ "@typescript-eslint/types": "8.72.2",
+ "@typescript-eslint/visitor-keys": "8.72.2",
+ "debug": "^4.4.3",
+ "minimatch": "^10.2.2",
+ "semver": "^7.7.3",
+ "tinyglobby": "^0.2.15",
+ "ts-api-utils": "^2.5.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4 <6.1.0"
+ }
+ },
+ "node_modules/@typescript-eslint/utils": {
+ "version": "8.72.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.72.2.tgz",
+ "integrity": "sha512-hv3eRYbpPbbpezuax1EfGrzpa3C4ySgNZkPUkLOWOAjU8HsOKowEDAr8C7nsNl1C+SBSKDpvno6VKHnlhvp9iA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.9.1",
+ "@typescript-eslint/scope-manager": "8.72.2",
+ "@typescript-eslint/types": "8.72.2",
+ "@typescript-eslint/typescript-estree": "8.72.2"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
+ "typescript": ">=4.8.4 <6.1.0"
+ }
+ },
+ "node_modules/@typescript-eslint/visitor-keys": {
+ "version": "8.72.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.72.2.tgz",
+ "integrity": "sha512-NAGrjn0Pitjqzq/GkgMC4kBYm233PQ8GffyQ9+kTA3AlNQYEzOf25EIM02BAHZv5FRJSpHpJk+OGUxVkOB93GQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/types": "8.72.2",
+ "eslint-visitor-keys": "^5.0.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@ungap/structured-clone": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.4.0.tgz",
+ "integrity": "sha512-1mEZtMKPM09vDmQt5y7YvmN2+DFTP7Tg0EWXdic8/C6VRnpb33e4ghisCIE3WZjsE2N8mf+QV1Zqh7ZFYLWInQ==",
+ "license": "ISC"
+ },
+ "node_modules/@vitejs/plugin-react": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-6.3.0.tgz",
+ "integrity": "sha512-H9E955aVvD2F4zNHCw4eIZbIfF6xKldlh7MNu+hSU7xwQzh65lI/N+CJWqmfhi0PEjDXIt/H7T7J/4wU63KJiw==",
+ "license": "MIT",
+ "dependencies": {
+ "@rolldown/pluginutils": "^1.0.1"
+ },
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ },
+ "peerDependencies": {
+ "@rolldown/plugin-babel": "^0.1.7 || ^0.2.0 || ^0.3.0",
+ "babel-plugin-react-compiler": "^1.0.0",
+ "oxc-transform-react": ">=0.152.0 <0.157.0",
+ "vite": "^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@rolldown/plugin-babel": {
+ "optional": true
+ },
+ "babel-plugin-react-compiler": {
+ "optional": true
+ },
+ "oxc-transform-react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@volar/kit": {
+ "version": "2.4.31",
+ "resolved": "https://registry.npmjs.org/@volar/kit/-/kit-2.4.31.tgz",
+ "integrity": "sha512-pQgvegC28dfdNcs/iDNZVHkMs+dG7rpD9Aj+sNU2hildv1QuH7/MIoff/cSJW/IR25AGOeHWbJXWWFKDXXWtVw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@volar/language-service": "2.4.31",
+ "@volar/typescript": "2.4.31",
+ "typesafe-path": "^0.2.2",
+ "vscode-languageserver-textdocument": "^1.0.11",
+ "vscode-uri": "^3.0.8"
+ },
+ "peerDependencies": {
+ "typescript": "<7"
+ }
+ },
+ "node_modules/@volar/language-core": {
+ "version": "2.4.31",
+ "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.31.tgz",
+ "integrity": "sha512-OM+OZfynHa1/4WlC8klqvwTQVmhYUZuwpAKdfl/rlvK8jaIozMD5qwXsOkxcRJA2tC+TEFsG1K81lNP4s/IAzQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@volar/source-map": "2.4.31"
+ }
+ },
+ "node_modules/@volar/language-server": {
+ "version": "2.4.31",
+ "resolved": "https://registry.npmjs.org/@volar/language-server/-/language-server-2.4.31.tgz",
+ "integrity": "sha512-PI/3CLcoHzb3RUNuh3ecWEf3d3doGnJ7/dYTvvE+8Y9dnV2SjVXp6BP7G2S5mdq9L1yFYP5yhoEHXc1OIfmX0A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@volar/language-core": "2.4.31",
+ "@volar/language-service": "2.4.31",
+ "@volar/typescript": "2.4.31",
+ "path-browserify": "^1.0.1",
+ "request-light": "^0.7.0",
+ "vscode-languageserver": "^9.0.1",
+ "vscode-languageserver-protocol": "^3.17.5",
+ "vscode-languageserver-textdocument": "^1.0.11",
+ "vscode-uri": "^3.0.8"
+ },
+ "peerDependencies": {
+ "typescript": "<7"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@volar/language-service": {
+ "version": "2.4.31",
+ "resolved": "https://registry.npmjs.org/@volar/language-service/-/language-service-2.4.31.tgz",
+ "integrity": "sha512-LM9HFsBVhHZ7RbFUZK9P23FvamK8XCDcN0kNgOTts02wVgnygo3ReLbmBmUZ3GuYnrYn6HHoQvqk/eHIzzTnrg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@volar/language-core": "2.4.31",
+ "vscode-languageserver-protocol": "^3.17.5",
+ "vscode-languageserver-textdocument": "^1.0.11",
+ "vscode-uri": "^3.0.8"
+ },
+ "peerDependencies": {
+ "typescript": "<7"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@volar/source-map": {
+ "version": "2.4.31",
+ "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.31.tgz",
+ "integrity": "sha512-odi31S3mKm57aO7Pd5P624FmGIB49U4lUPnYRUKvCDa8WZy5N5Yb+GMp2WJNaeIr4+q0ijNpuHsJLrfEiWvHtA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@volar/typescript": {
+ "version": "2.4.31",
+ "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.31.tgz",
+ "integrity": "sha512-OBHLLAi03AmaRWqzytdFhgtW2B3HM+2/vXFkvnZAlEKltalUTyu+No7g9aZx7e9efrDLOtHsd/3PgCHSfgVJ/Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@volar/language-core": "2.4.31",
+ "@volar/language-service": "2.4.31",
+ "path-browserify": "^1.0.1",
+ "vscode-uri": "^3.0.8"
+ },
+ "peerDependencies": {
+ "typescript": "<7"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@vscode/emmet-helper": {
+ "version": "2.11.0",
+ "resolved": "https://registry.npmjs.org/@vscode/emmet-helper/-/emmet-helper-2.11.0.tgz",
+ "integrity": "sha512-QLxjQR3imPZPQltfbWRnHU6JecWTF1QSWhx3GAKQpslx7y3Dp6sIIXhKjiUJ/BR9FX8PVthjr9PD6pNwOJfAzw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emmet": "^2.4.3",
+ "jsonc-parser": "^2.3.0",
+ "vscode-languageserver-textdocument": "^1.0.1",
+ "vscode-languageserver-types": "^3.15.1",
+ "vscode-uri": "^3.0.8"
+ }
+ },
+ "node_modules/@vscode/emmet-helper/node_modules/jsonc-parser": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.3.1.tgz",
+ "integrity": "sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@vscode/l10n": {
+ "version": "0.0.18",
+ "resolved": "https://registry.npmjs.org/@vscode/l10n/-/l10n-0.0.18.tgz",
+ "integrity": "sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/abbrev": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz",
+ "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ }
+ },
+ "node_modules/acorn": {
+ "version": "8.19.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.19.0.tgz",
+ "integrity": "sha512-oJlA3XiRm7Cyk6qFD2Jn8ak9B7jSy0qy00ADO3+8dpT0LSjFihQYv4C02LFCSYJV3Q37xYwwRy5m+IpIiUzqWw==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "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==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.15.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz",
+ "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/am-i-vibing": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/am-i-vibing/-/am-i-vibing-0.5.0.tgz",
+ "integrity": "sha512-KLcsDhqf1XRrJmJr+9I/C0EX2K+sGrAGZFgkmd84c8TJO9zJBu+/kFInjazu1KfJWFhWDKdRWkpBzEs7s35DVA==",
+ "license": "MIT",
+ "dependencies": {
+ "process-ancestry": "^0.1.0"
+ },
+ "bin": {
+ "am-i-vibing": "dist/cli.mjs"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "6.6.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.6.0.tgz",
+ "integrity": "sha512-XZ5apbzreCbXSKwPjJstu8R0zOi247w3XYwWxtwBXgpZrCyc1Ka7p9/xY0A9/diMewmHbEKz+FIraWaEWjlN5g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "license": "ISC",
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/anymatch/node_modules/picomatch": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
+ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/arg": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
+ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
+ "license": "MIT"
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true,
+ "license": "Python-2.0"
+ },
+ "node_modules/aria-query": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz",
+ "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/astral-regex": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
+ "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/astro": {
+ "version": "7.4.8",
+ "resolved": "https://registry.npmjs.org/astro/-/astro-7.4.8.tgz",
+ "integrity": "sha512-xBcOeUvOQGPDKeHiIRJCKNZStf+TyPEJ2kHrUBKpVEyEdhhPfHd0T9GP8NVvaA3I7aKPn6SGy8xEcvWPym4GsA==",
+ "license": "MIT",
+ "dependencies": {
+ "@astrojs/compiler-rs": "^0.5.2",
+ "@astrojs/internal-helpers": "0.13.1",
+ "@astrojs/markdown-satteri": "0.4.7",
+ "@astrojs/telemetry": "3.4.2",
+ "@capsizecss/unpack": "^4.0.1",
+ "@clack/prompts": "^1.8.1",
+ "@oslojs/encoding": "^1.1.0",
+ "am-i-vibing": "^0.5.0",
+ "aria-query": "^5.3.2",
+ "axobject-query": "^4.1.0",
+ "ci-info": "^4.4.0",
+ "clsx": "^2.1.1",
+ "common-ancestor-path": "^2.0.0",
+ "cookie": "^2.0.2",
+ "devalue": "^6.0.3",
+ "diff": "^9.0.0",
+ "dset": "^3.1.4",
+ "es-module-lexer": "^3.0.4",
+ "flattie": "^1.1.1",
+ "fontace": "~0.4.1",
+ "get-tsconfig": "5.0.0-beta.6",
+ "github-slugger": "^2.0.0",
+ "html-escaper": "3.0.3",
+ "http-cache-semantics": "^4.3.0",
+ "jsonc-parser": "^3.3.1",
+ "magic-string": "^1.4.5",
+ "magicast": "^0.5.5",
+ "mri": "^1.2.0",
+ "mrmime": "^2.0.1",
+ "neotraverse": "^1.0.1",
+ "obug": "^3.0.0",
+ "p-limit": "^7.3.3",
+ "p-queue": "^10.0.0",
+ "package-manager-detector": "^1.9.0",
+ "piccolore": "^0.1.3",
+ "picomatch": "^4.0.7",
+ "rolldown": "~1.2.16",
+ "shiki": "^4.6.0",
+ "smol-toml": "^1.9.1",
+ "svgo": "^4.1.0",
+ "tinyclip": "^1.0.3",
+ "tinyexec": "^1.3.1",
+ "tinyglobby": "^0.2.17",
+ "tinyps": "^0.5.1",
+ "ultrahtml": "^1.7.0",
+ "unifont": "^1.0.3",
+ "unstorage": "^1.17.6",
+ "verkit": "^0.5.0",
+ "vite": "^8.3.6",
+ "vitefu": "^1.1.3",
+ "xxhash-wasm": "^1.1.0",
+ "zod": "^4.6.7"
+ },
+ "bin": {
+ "astro": "bin/astro.mjs"
+ },
+ "engines": {
+ "node": ">=22.23.4",
+ "npm": ">=9.6.5",
+ "pnpm": ">=7.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/astrodotbuild"
+ },
+ "optionalDependencies": {
+ "sharp": "^0.35.4"
+ },
+ "peerDependencies": {
+ "@astrojs/markdown-remark": "^7.3.0"
+ },
+ "peerDependenciesMeta": {
+ "@astrojs/markdown-remark": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/astro-eslint-parser": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/astro-eslint-parser/-/astro-eslint-parser-3.2.0.tgz",
+ "integrity": "sha512-WavQUarfgwSbpCq4xsdcIBdX5KArfI2d6DD8EIloJIMthnB1508iNpx4C77EhUyMd03LpEt8HAPzwF/cG0V39g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@astrojs/compiler-rs": "^0.4.0 || ^0.5.0",
+ "@typescript-eslint/scope-manager": "^8.61.0",
+ "@typescript-eslint/types": "^8.61.0",
+ "debug": "^4.4.3",
+ "eslint-scope": "^9.1.2",
+ "eslint-visitor-keys": "^5.0.1",
+ "espree": "^11.2.0",
+ "semver": "^7.8.4",
+ "tinyglobby": "^0.2.17"
+ },
+ "engines": {
+ "node": "^22.22.3 || ^24.16.0 || >=26.3.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ota-meshi"
+ }
+ },
+ "node_modules/axobject-query": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz",
+ "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/babel-plugin-macros": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz",
+ "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.12.5",
+ "cosmiconfig": "^7.0.0",
+ "resolve": "^1.19.0"
+ },
+ "engines": {
+ "node": ">=10",
+ "npm": ">=6"
+ }
+ },
+ "node_modules/bail": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
+ "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
+ "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "18 || 20 || >=22"
+ }
+ },
+ "node_modules/baseline-browser-mapping": {
+ "version": "2.11.35",
+ "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.35.tgz",
+ "integrity": "sha512-GNk8KX52CHqeNKGk8+7tZnQab/2k1t/BgrUHPKNdijzpEhF1saPQZHVKb6m5loSAxB39gyrTYw34Qf9CQ3u1qQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "baseline-browser-mapping": "dist/cli.cjs"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/binary-extensions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+ "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/boolbase": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
+ "license": "ISC"
+ },
+ "node_modules/bootstrap": {
+ "version": "5.3.8",
+ "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.8.tgz",
+ "integrity": "sha512-HP1SZDqaLDPwsNiqRqi5NcP0SSXciX2s9E+RyqJIIqGo+vJeN5AJVM98CXmW/Wux0nQ5L7jeWUdplCEf0Ee+tg==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/twbs"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/bootstrap"
+ }
+ ],
+ "license": "MIT",
+ "peerDependencies": {
+ "@popperjs/core": "^2.11.8"
+ }
+ },
+ "node_modules/brace-expansion": {
+ "version": "5.0.12",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.12.tgz",
+ "integrity": "sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^4.0.2"
+ },
+ "engines": {
+ "node": "20 || >=22"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fill-range": "^7.1.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/browserslist": {
+ "version": "4.29.5",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.29.5.tgz",
+ "integrity": "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "baseline-browser-mapping": "^2.11.33",
+ "caniuse-lite": "^1.0.30001819",
+ "electron-to-chromium": "^1.5.464",
+ "node-releases": "^2.0.60",
+ "update-browserslist-db": "^1.3.4"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "node_modules/buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/cacheable": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-2.5.0.tgz",
+ "integrity": "sha512-60cyAOytib/OzBw1JNSoSV/boK1AtHryDIjvVBk7XbN4ugfkM3+Sry7fEjNgPMGgOjuaZPAp8ruZ0Cxafwyq9g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@cacheable/memory": "^2.2.0",
+ "@cacheable/utils": "^2.5.0",
+ "hookified": "^1.15.0",
+ "keyv": "^5.6.0",
+ "qified": "^0.10.1"
+ }
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001823",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001823.tgz",
+ "integrity": "sha512-TQ5s/djDjNk1axreUW+4rULH+BmdCMLiJkhaXnO5wqivG7tITkSUj4ItIdzqdZHKaXcHAV8dhH3JxOM7/7bwqw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "CC-BY-4.0"
+ },
+ "node_modules/ccount": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",
+ "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/chalk": {
+ "version": "5.6.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz",
+ "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.17.0 || ^14.13 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/character-entities": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz",
+ "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/character-entities-html4": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz",
+ "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/character-entities-legacy": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz",
+ "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/character-reference-invalid": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz",
+ "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz",
+ "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==",
+ "license": "MIT",
+ "dependencies": {
+ "readdirp": "^5.0.0"
+ },
+ "engines": {
+ "node": ">= 20.19.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/ci-info": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.5.0.tgz",
+ "integrity": "sha512-d1uM8k5UZEyPza1n/MG3ko8nKupKN0KJpFsipgPcgaCCvV+IqIfJ+NzTjetlLM+UcXZx3+cLrNr76+eAO7G1Mw==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/sibiraj-s"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cliui": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz",
+ "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^7.2.0",
+ "strip-ansi": "^7.1.0",
+ "wrap-ansi": "^9.0.0"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/cliui/node_modules/ansi-styles": {
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz",
+ "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/cliui/node_modules/emoji-regex": {
+ "version": "10.6.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz",
+ "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/cliui/node_modules/string-width": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
+ "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^10.3.0",
+ "get-east-asian-width": "^1.0.0",
+ "strip-ansi": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/cliui/node_modules/wrap-ansi": {
+ "version": "9.0.2",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz",
+ "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^6.2.1",
+ "string-width": "^7.0.0",
+ "strip-ansi": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/clsx": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
+ "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/collapse-white-space": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz",
+ "integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "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==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/colord": {
+ "version": "2.11.0",
+ "resolved": "https://registry.npmjs.org/colord/-/colord-2.11.0.tgz",
+ "integrity": "sha512-R7EZD9e+sWpUQFr3F6v747NAazZCD+OhsM0VnPkHGxSaQvw4ZvJoCVz51gemztBBoZaFvMP0qdKgFyBdBurfgA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/comma-separated-tokens": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
+ "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/commander": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz",
+ "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/common-ancestor-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-2.0.0.tgz",
+ "integrity": "sha512-dnN3ibLeoRf2HNC+OlCiNc5d2zxbLJXOtiZUudNFSXZrNSydxcCsSpRzXwfu7BBWCIfHPw+xTayeBvJCP/D8Ng==",
+ "license": "BlueOak-1.0.0",
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/concat-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz",
+ "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==",
+ "dev": true,
+ "engines": [
+ "node >= 6.0"
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^3.0.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "node_modules/convert-source-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/cookie": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-2.0.2.tgz",
+ "integrity": "sha512-SL0cVuEdETEp7pN0FuZb01toc3vnODEfVUCooxG1SJN0yIirh7JMb9X9bvfCFf0vzzbT68RdbKDHYTiWy7a7iw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=22"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/cookie-es": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.2.3.tgz",
+ "integrity": "sha512-lXVyvUvrNXblMqzIRrxHb57UUVmqsSWlxqt3XIjCkUP0wDAf6uicO6KMbEgYrMNtEvWgWHwe42CKxPu9MYAnWw==",
+ "license": "MIT"
+ },
+ "node_modules/cosmiconfig": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
+ "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/parse-json": "^4.0.0",
+ "import-fresh": "^3.2.1",
+ "parse-json": "^5.0.0",
+ "path-type": "^4.0.0",
+ "yaml": "^1.10.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/cosmiconfig/node_modules/yaml": {
+ "version": "1.10.3",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.3.tgz",
+ "integrity": "sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==",
+ "license": "ISC",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/crossws": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.5.tgz",
+ "integrity": "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==",
+ "license": "MIT",
+ "dependencies": {
+ "uncrypto": "^0.1.3"
+ }
+ },
+ "node_modules/css-functions-list": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.3.3.tgz",
+ "integrity": "sha512-8HFEBPKhOpJPEPu70wJJetjKta86Gw9+CCyCnB3sui2qQfOvRyqBy4IKLKKAwdMpWb2lHXWk9Wb4Z6AmaUT1Pg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/css-select": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-6.0.0.tgz",
+ "integrity": "sha512-rZZVSLle8v0+EY8QAkDWrKhpgt6SA5OtHsgBnsj6ZaLb5dmDVOWUDtQitd9ydxxvEjhewNudS6eTVU7uOyzvXw==",
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "boolbase": "^1.0.0",
+ "css-what": "^7.0.0",
+ "domhandler": "^5.0.3",
+ "domutils": "^3.2.2",
+ "nth-check": "^2.1.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/fb55"
+ }
+ },
+ "node_modules/css-tree": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz",
+ "integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==",
+ "license": "MIT",
+ "dependencies": {
+ "mdn-data": "2.27.1",
+ "source-map-js": "^1.2.1"
+ },
+ "engines": {
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
+ }
+ },
+ "node_modules/css-what": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-7.0.0.tgz",
+ "integrity": "sha512-wD5oz5xibMOPHzy13CyGmogB3phdvcDaB5t0W/Nr5Z2O/agcB8YwOz6e2Lsp10pNDzBoDO9nVa3RGs/2BttpHQ==",
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">= 6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/fb55"
+ }
+ },
+ "node_modules/csso": {
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz",
+ "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==",
+ "license": "MIT",
+ "dependencies": {
+ "css-tree": "~2.2.0"
+ },
+ "engines": {
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
+ "npm": ">=7.0.0"
+ }
+ },
+ "node_modules/csso/node_modules/css-tree": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz",
+ "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==",
+ "license": "MIT",
+ "dependencies": {
+ "mdn-data": "2.0.28",
+ "source-map-js": "^1.0.1"
+ },
+ "engines": {
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
+ "npm": ">=7.0.0"
+ }
+ },
+ "node_modules/csso/node_modules/mdn-data": {
+ "version": "2.0.28",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz",
+ "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==",
+ "license": "CC0-1.0"
+ },
+ "node_modules/csstype": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz",
+ "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
+ "license": "MIT"
+ },
+ "node_modules/debug": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/decode-named-character-reference": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz",
+ "integrity": "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "character-entities": "^2.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/defu": {
+ "version": "6.1.7",
+ "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.7.tgz",
+ "integrity": "sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==",
+ "license": "MIT"
+ },
+ "node_modules/dequal": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
+ "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/destr": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz",
+ "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==",
+ "license": "MIT"
+ },
+ "node_modules/detect-libc": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
+ "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/devalue": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/devalue/-/devalue-6.0.3.tgz",
+ "integrity": "sha512-3woMEITftG1wKeO/4d/QXH1DVKctTSZg3jNGPpjp9hNr5Hos8MCFF5McTML5ZtgKDObm2R591B0spRp2IVernA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/devlop": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz",
+ "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==",
+ "license": "MIT",
+ "dependencies": {
+ "dequal": "^2.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/diff": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-9.0.0.tgz",
+ "integrity": "sha512-svtcdpS8CgJyqAjEQIXdb3OjhFVVYjzGAPO8WGCmRbrml64SPw/jJD4GoE98aR7r25A0XcgrK3F02yw9R/vhQw==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.3.1"
+ }
+ },
+ "node_modules/doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/dom-helpers": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz",
+ "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.8.7",
+ "csstype": "^3.0.2"
+ }
+ },
+ "node_modules/dom-serializer": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
+ "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
+ "license": "MIT",
+ "dependencies": {
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.2",
+ "entities": "^4.2.0"
+ },
+ "funding": {
+ "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
+ }
+ },
+ "node_modules/domelementtype": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
+ "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fb55"
+ }
+ ],
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/domhandler": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
+ "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "domelementtype": "^2.3.0"
+ },
+ "engines": {
+ "node": ">= 4"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/domhandler?sponsor=1"
+ }
+ },
+ "node_modules/domutils": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz",
+ "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==",
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "dom-serializer": "^2.0.0",
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/domutils?sponsor=1"
+ }
+ },
+ "node_modules/dset": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.4.tgz",
+ "integrity": "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/eastasianwidth": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.5.478",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.478.tgz",
+ "integrity": "sha512-pftG+ma5Lm8O6/p45bhYT6StBN5ziQymaRzmCZwFl8DwWHKPPD93FdOmP1aqftcepolQYvrcyTLa17kE8Yf+jg==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/emmet": {
+ "version": "2.4.11",
+ "resolved": "https://registry.npmjs.org/emmet/-/emmet-2.4.11.tgz",
+ "integrity": "sha512-23QPJB3moh/U9sT4rQzGgeyyGIrcM+GH5uVYg2C6wZIxAIJq7Ng3QLT79tl8FUwDXhyq9SusfknOrofAKqvgyQ==",
+ "dev": true,
+ "license": "MIT",
+ "workspaces": [
+ "./packages/scanner",
+ "./packages/abbreviation",
+ "./packages/css-abbreviation",
+ "./"
+ ],
+ "dependencies": {
+ "@emmetio/abbreviation": "^2.3.3",
+ "@emmetio/css-abbreviation": "^2.1.8"
+ }
+ },
+ "node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/entities": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/env-paths": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
+ "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/err-code": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz",
+ "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/error-ex": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz",
+ "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==",
+ "license": "MIT",
+ "dependencies": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-module-lexer": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-3.0.4.tgz",
+ "integrity": "sha512-BldNY5mwkVu+cQ5Ymn3e6hB9Sx8XHx4ZevWbiUyZbfKxJxYO27Hf0wfzkxIaD5CAJMaGl3YspKELj0ff/7nCMA==",
+ "license": "MIT"
+ },
+ "node_modules/escalade": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint": {
+ "version": "10.14.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.14.0.tgz",
+ "integrity": "sha512-T0pNsxkb9IKmtQjhpK3d7nWOpFv+YHuMbTJnSVMoQblF0onvXfErrtp4V1jHtsQPan7dKaGVD0q1WCXnzMF31A==",
+ "dev": true,
+ "license": "MIT",
+ "workspaces": [
+ "packages/*"
+ ],
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.8.0",
+ "@eslint-community/regexpp": "^4.12.2",
+ "@eslint/config-array": "^0.23.5",
+ "@eslint/config-helpers": "^0.7.0",
+ "@eslint/core": "^1.2.1",
+ "@eslint/plugin-kit": "^0.7.3",
+ "@humanfs/node": "^0.16.8",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@humanwhocodes/retry": "^0.4.2",
+ "@types/estree": "^1.0.6",
+ "ajv": "^6.14.0",
+ "cross-spawn": "^7.0.6",
+ "debug": "^4.3.2",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^9.1.2",
+ "eslint-visitor-keys": "^5.0.1",
+ "espree": "^11.2.0",
+ "esquery": "^1.7.0",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "11.1.5 || >11.1.6 <12",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "ignore": "^5.2.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "minimatch": "^10.2.6",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.3"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^20.19.0 || ^22.13.0 || >=24"
+ },
+ "funding": {
+ "url": "https://eslint.org/donate"
+ },
+ "peerDependencies": {
+ "jiti": "*"
+ },
+ "peerDependenciesMeta": {
+ "jiti": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-plugin-astro": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-astro/-/eslint-plugin-astro-3.2.1.tgz",
+ "integrity": "sha512-IgU7LIkpEg0r6bQGwc3Ck5jHgkUk3rOrEfRhUxDtMx/M0GD3SG/turMtvwj989KRR12Wt1l89faZ5ynjvVL7hg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.5.1",
+ "@jridgewell/sourcemap-codec": "^1.5.0",
+ "@typescript-eslint/types": "^8.61.0",
+ "astro-eslint-parser": "^3.0.0",
+ "espree": "^11.0.0",
+ "globals": "^17.0.0",
+ "postcss": "^8.5.3",
+ "postcss-selector-parser": "^7.1.0",
+ "synckit": "^0.11.13"
+ },
+ "engines": {
+ "node": "^22.22.3 || ^24.16.0 || >=26.3.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ota-meshi"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/parser": ">=8.61.0",
+ "eslint": ">=10.0.0",
+ "eslint-plugin-jsx-a11y": ">=6.10.2",
+ "eslint-plugin-jsx-a11y-x": ">=0.2.0",
+ "typescript-eslint": ">=8.61.0"
+ },
+ "peerDependenciesMeta": {
+ "@typescript-eslint/parser": {
+ "optional": true
+ },
+ "eslint-plugin-jsx-a11y": {
+ "optional": true
+ },
+ "eslint-plugin-jsx-a11y-x": {
+ "optional": true
+ },
+ "typescript-eslint": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-plugin-react-hooks": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.1.1.tgz",
+ "integrity": "sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/core": "^7.24.4",
+ "@babel/parser": "^7.24.4",
+ "hermes-parser": "^0.25.1",
+ "zod": "^3.25.0 || ^4.0.0",
+ "zod-validation-error": "^3.5.0 || ^4.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 || ^10.0.0"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "9.1.2",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz",
+ "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "@types/esrecurse": "^4.3.1",
+ "@types/estree": "^1.0.8",
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^20.19.0 || ^22.13.0 || >=24"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz",
+ "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^20.19.0 || ^22.13.0 || >=24"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/espree": {
+ "version": "11.2.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz",
+ "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "acorn": "^8.16.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^5.0.1"
+ },
+ "engines": {
+ "node": "^20.19.0 || ^22.13.0 || >=24"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/esquery": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz",
+ "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+ "license": "MIT"
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-glob": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
+ "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.8"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fast-glob/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-string-truncated-width": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/fast-string-truncated-width/-/fast-string-truncated-width-3.0.3.tgz",
+ "integrity": "sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==",
+ "license": "MIT"
+ },
+ "node_modules/fast-string-width": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/fast-string-width/-/fast-string-width-3.0.2.tgz",
+ "integrity": "sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==",
+ "license": "MIT",
+ "dependencies": {
+ "fast-string-truncated-width": "^3.0.2"
+ }
+ },
+ "node_modules/fast-uri": {
+ "version": "3.1.9",
+ "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.9.tgz",
+ "integrity": "sha512-hS/0Wt3Ya043oKXs0sIxrMpKQITXhMLIrVAKKXi4gozGC9v7YRWVnXIZzjNPTO02M9BdxLCWqK1yRXgNziVyJQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ],
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/fast-wrap-ansi": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/fast-wrap-ansi/-/fast-wrap-ansi-0.2.2.tgz",
+ "integrity": "sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==",
+ "license": "MIT",
+ "dependencies": {
+ "fast-string-width": "^3.0.2"
+ }
+ },
+ "node_modules/fastest-levenshtein": {
+ "version": "1.0.16",
+ "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz",
+ "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4.9.1"
+ }
+ },
+ "node_modules/fastq": {
+ "version": "1.20.3",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.3.tgz",
+ "integrity": "sha512-XKv5nnLs6nLF71NgiKJLIZFLkPyIEuOselLG7ujZnGrRfQK8HpvY+WqKhAJUAdLomwVHErVS4LfxFlPq0/FTAw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/fdir": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/file-entry-cache": {
+ "version": "11.1.5",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-11.1.5.tgz",
+ "integrity": "sha512-+PFTHITI08JIGhnNpGNI8T8inUpgZfk3GNEqfT9R2zZV2iFXg3CvqzSl/uEhs7TSGujYRELEANyDvS8Fj7+S7Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "flat-cache": "^6.1.23"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-root": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
+ "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==",
+ "license": "MIT"
+ },
+ "node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/flat-cache": {
+ "version": "6.1.23",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.23.tgz",
+ "integrity": "sha512-f++BY9pTk+983xK1FLzlLpmM0i0z+jHmx3QESGkURMXujQZz1k5wzwX6hjnQ8goaD0B+sYnDK1yZ6MTyZfUaqA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cacheable": "^2.5.0",
+ "flatted": "^3.4.2",
+ "hookified": "^1.15.0"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.4.4",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.4.tgz",
+ "integrity": "sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/flattie": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/flattie/-/flattie-1.1.1.tgz",
+ "integrity": "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/fnv1a-64": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/fnv1a-64/-/fnv1a-64-0.1.2.tgz",
+ "integrity": "sha512-mJbcILTPybAR1jdOwt/lVv8N2cffeJFFP+gVbSAwLEx1ujXH27RpPd8Rokec/KX9c76UYIB6Co+H4lQzxPnJfA==",
+ "license": "MIT"
+ },
+ "node_modules/fontace": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/fontace/-/fontace-0.4.1.tgz",
+ "integrity": "sha512-lDMvbAzSnHmbYMTEld5qdtvNH2/pWpICOqpean9IgC7vUbUJc3k+k5Dokp85CegamqQpFbXf0rAVkbzpyTA8aw==",
+ "license": "MIT",
+ "dependencies": {
+ "fontkitten": "^1.0.2"
+ }
+ },
+ "node_modules/fontkitten": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/fontkitten/-/fontkitten-1.0.3.tgz",
+ "integrity": "sha512-Wp1zXWPVUPBmfoa3Cqc9ctaKuzKAV6uLstRqlR56kSjplf5uAce+qeyYym7F+PHbGTk+tCEdkCW6RD7DX/gBZw==",
+ "license": "MIT",
+ "dependencies": {
+ "tiny-inflate": "^1.0.3"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/foreground-child": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz",
+ "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "cross-spawn": "^7.0.6",
+ "signal-exit": "^4.0.1"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/gensync": {
+ "version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
+ "node_modules/get-east-asian-width": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.7.0.tgz",
+ "integrity": "sha512-XjH1AECxf0giL2V1aU8vKyRR2ppRUb5c0EvT7zuJTokQ74bNo52zOtghqdWIqrhUD79fo3x0WfKZdOqxF6LG1Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/get-tsconfig": {
+ "version": "5.0.0-beta.6",
+ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-5.0.0-beta.6.tgz",
+ "integrity": "sha512-X6fBC0pmImC70gvX2zm56go9hx0MyoGVdG0tUCkg/D+Xnh5TJsOZ7iDbOdI3PvmtrDxnu1YdDufpK2QJX1Meqw==",
+ "license": "MIT",
+ "dependencies": {
+ "resolve-pkg-maps": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=20.20.0"
+ },
+ "funding": {
+ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
+ }
+ },
+ "node_modules/github-slugger": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz",
+ "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==",
+ "license": "ISC"
+ },
+ "node_modules/glob": {
+ "version": "10.5.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
+ "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
+ "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/glob/node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/glob/node_modules/brace-expansion": {
+ "version": "2.1.7",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.7.tgz",
+ "integrity": "sha512-uZbew1NqdmPDTMJ8ah1y+b+9QEJrfkXFk3RcTQw3X0jW/xRUvFKsg1CfQdSYGdTbXZWExtU3J3ccxtnfw1Fi0g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/glob/node_modules/minimatch": {
+ "version": "9.0.9",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
+ "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/global-modules": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz",
+ "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "global-prefix": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/global-prefix": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz",
+ "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ini": "^1.3.5",
+ "kind-of": "^6.0.2",
+ "which": "^1.3.1"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/global-prefix/node_modules/which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "which": "bin/which"
+ }
+ },
+ "node_modules/globals": {
+ "version": "17.14.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-17.14.0.tgz",
+ "integrity": "sha512-UtdkTVyAJePQv0J2M9Xe4L0ruNSDV314XiIJsADI2Zf40bcdAonE/D/OhAU8AT99oij9mhLByb+NvA3QWZYgCg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/globby": {
+ "version": "16.2.4",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-16.2.4.tgz",
+ "integrity": "sha512-c8B/VNLmxRcmqqenRA9t+9IyOjf9+V6lTxPaUJLqOCONdQkWZ0ETYgX0qbtJqPsgCNusT9MZ5Jeidw8Eb9tn2g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@sindresorhus/merge-streams": "^4.0.0",
+ "fast-glob": "^3.3.3",
+ "ignore": "^7.0.5",
+ "is-path-inside": "^4.0.0",
+ "micromatch": "^4.0.8",
+ "slash": "^5.1.0",
+ "unicorn-magic": "^0.4.0"
+ },
+ "engines": {
+ "node": ">=20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/globby/node_modules/ignore": {
+ "version": "7.0.14",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.14.tgz",
+ "integrity": "sha512-wCBiZ77u1tuWde6G/nfOtLaCTYcFDU5yCzARzK10y+rLhzYoL7a7yEemcopcc2Mzow7gZOIjnV2ym1NYmdiJOQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/globjoin": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz",
+ "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/h3": {
+ "version": "1.15.11",
+ "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.11.tgz",
+ "integrity": "sha512-L3THSe2MPeBwgIZVSH5zLdBBU90TOxarvhK9d04IDY2AmVS8j2Jz2LIWtwsGOU3lu2I5jCN7FNvVfY2+XyF+mg==",
+ "license": "MIT",
+ "dependencies": {
+ "cookie-es": "^1.2.3",
+ "crossws": "^0.3.5",
+ "defu": "^6.1.6",
+ "destr": "^2.0.5",
+ "iron-webcrypto": "^1.2.1",
+ "node-mock-http": "^1.0.4",
+ "radix3": "^1.1.2",
+ "ufo": "^1.6.3",
+ "uncrypto": "^0.1.3"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "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/hashery": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/hashery/-/hashery-1.5.1.tgz",
+ "integrity": "sha512-iZyKG96/JwPz1N55vj2Ie2vXbhu440zfUfJvSwEqEbeLluk7NnapfGqa7LH0mOsnDxTF85Mx8/dyR6HfqcbmbQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "hookified": "^1.15.0"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/hasown": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz",
+ "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==",
+ "license": "MIT",
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/hast-util-to-html": {
+ "version": "9.0.6",
+ "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.6.tgz",
+ "integrity": "sha512-1SZUxCN3TtJAE7e2BQN2MBHsoZ1gnmi9GoCP5Di59CSWptIezSAW09yDZyVbanb78V9eCwrKqdQsjtfVTxYHWA==",
+ "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-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/hermes-estree": {
+ "version": "0.25.1",
+ "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz",
+ "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/hermes-parser": {
+ "version": "0.25.1",
+ "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz",
+ "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "hermes-estree": "0.25.1"
+ }
+ },
+ "node_modules/hoist-non-react-statics": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
+ "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "react-is": "^16.7.0"
+ }
+ },
+ "node_modules/hookified": {
+ "version": "1.15.1",
+ "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.15.1.tgz",
+ "integrity": "sha512-MvG/clsADq1GPM2KGo2nyfaWVyn9naPiXrqIe4jYjXNZQt238kWyOGrsyc/DmRAQ+Re6yeo6yX/yoNCG5KAEVg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/hosted-git-info": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz",
+ "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "lru-cache": "^10.0.1"
+ },
+ "engines": {
+ "node": "^16.14.0 || >=18.0.0"
+ }
+ },
+ "node_modules/hosted-git-info/node_modules/lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/html-escaper": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz",
+ "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==",
+ "license": "MIT"
+ },
+ "node_modules/html-tags": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-5.1.0.tgz",
+ "integrity": "sha512-n6l5uca7/y5joxZ3LUePhzmBFUJ+U2YWzhMa8XUTecSeSlQiZdF5XAd/Q3/WUl0VsXgUwWi8I7CNIwdI5WN1SQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=20.10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/html-void-elements": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz",
+ "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/http-cache-semantics": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.3.0.tgz",
+ "integrity": "sha512-M5t5LlJpS1UHMjvwRQVdFHvPISGeLAxNcrWuJkeGh0KxsqCHZ1O3NXZU/8x7cD0BDcGW8kapxMKTvwlqrNkHkA==",
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/ignore": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
+ "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/immutable": {
+ "version": "5.1.10",
+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.10.tgz",
+ "integrity": "sha512-Uu72qZXUtm+n98uML3Xr6pVFHl4xnmeCuAsrm0VqFlQim/Ib6NrPSJLpx6CrZ/G6DnoGaCUgtx8gY+o+ovxnCw==",
+ "devOptional": true,
+ "license": "MIT"
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
+ "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
+ "license": "MIT",
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/import-meta-resolve": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz",
+ "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/ini": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/iron-webcrypto": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz",
+ "integrity": "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/brc-dd"
+ }
+ },
+ "node_modules/is-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==",
+ "dev": true,
+ "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==",
+ "dev": true,
+ "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-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
+ "license": "MIT"
+ },
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-core-module": {
+ "version": "2.18.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.18.0.tgz",
+ "integrity": "sha512-qyax9fgaKOEC4qK8WZn7Q4IcoZC9RC1O1fFxRcRTq/oMMkWT/uXpqpXa12kzWR409zAt1drYN9N9BO26UmBCmw==",
+ "license": "MIT",
+ "dependencies": {
+ "hasown": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "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==",
+ "dev": true,
+ "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",
+ "integrity": "sha512-LHE+wROyG/Y/0ZnbktRCoTix2c1RhgWaZraMZ8o1Q7zCh0VSrICJQO5oqIIISrcSBtrXv0o233w1IYwsWCjTzA==",
+ "license": "MIT",
+ "bin": {
+ "is-docker": "cli.js"
+ },
+ "engines": {
+ "node": ">=20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-empty": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/is-empty/-/is-empty-1.2.0.tgz",
+ "integrity": "sha512-F2FnH/otLNJv0J6wc73A5Xo7oHLNnqplYqZhUu01tD54DIPvxIRSTSLkrUB/M0nHO4vo1O9PDfN4KoTxCzLh/w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "devOptional": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "devOptional": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-hexadecimal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz",
+ "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-path-inside": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz",
+ "integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-plain-obj": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
+ "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-plain-object": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.1.0.tgz",
+ "integrity": "sha512-bUi/yjmtKYcRVUtWRGr0UA6xEFh2I6zWUwMrUXB3s7bmYCaZ8a+0ZsTRkrawh/mzlSD1Y0Ph8bp/U+TvBpWDNw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/jackspeak": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+ "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "@isaacs/cliui": "^8.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ },
+ "optionalDependencies": {
+ "@pkgjs/parseargs": "^0.11.0"
+ }
+ },
+ "node_modules/js-search": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/js-search/-/js-search-2.0.1.tgz",
+ "integrity": "sha512-8k12LiC3fPt7gLRJTc1azE1BFvlxIw+BG3J9YzjuYf4wSE65uqYSYP4VhweApcTfV51Fzq/ogBulQew5937A9A==",
+ "license": "MIT"
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "license": "MIT"
+ },
+ "node_modules/js-yaml": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.2.tgz",
+ "integrity": "sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/puzrin"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/nodeca"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/jschardet": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/jschardet/-/jschardet-4.1.0.tgz",
+ "integrity": "sha512-ighRZ11mb6l4m+xSKoivuqNj44qkObODXsAnnkkfYcY4JfYRnEgAe/w1c3mbnJtTQmLtfebAUfXGsUGUJImexg==",
+ "dev": true,
+ "license": "0BSD",
+ "bin": {
+ "jschardet": "build/cli.js"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/jsesc": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
+ "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
+ "license": "MIT",
+ "bin": {
+ "jsesc": "bin/jsesc"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/json-buffer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+ "license": "MIT"
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "json5": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/jsonc-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz",
+ "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==",
+ "license": "MIT"
+ },
+ "node_modules/keyv": {
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz",
+ "integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@keyv/serialize": "^1.1.1"
+ }
+ },
+ "node_modules/kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/kleur": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz",
+ "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/known-css-properties": {
+ "version": "0.37.0",
+ "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.37.0.tgz",
+ "integrity": "sha512-JCDrsP4Z1Sb9JwG0aJ8Eo2r7k4Ou5MwmThS/6lcIe1ICyb7UBJKGRIUUdqc2ASdE/42lgz6zFUnzAIhtXnBVrQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/lightningcss": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz",
+ "integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==",
+ "license": "MPL-2.0",
+ "dependencies": {
+ "detect-libc": "^2.0.3"
+ },
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ },
+ "optionalDependencies": {
+ "lightningcss-android-arm64": "1.33.0",
+ "lightningcss-darwin-arm64": "1.33.0",
+ "lightningcss-darwin-x64": "1.33.0",
+ "lightningcss-freebsd-x64": "1.33.0",
+ "lightningcss-linux-arm-gnueabihf": "1.33.0",
+ "lightningcss-linux-arm64-gnu": "1.33.0",
+ "lightningcss-linux-arm64-musl": "1.33.0",
+ "lightningcss-linux-x64-gnu": "1.33.0",
+ "lightningcss-linux-x64-musl": "1.33.0",
+ "lightningcss-win32-arm64-msvc": "1.33.0",
+ "lightningcss-win32-x64-msvc": "1.33.0"
+ }
+ },
+ "node_modules/lightningcss-android-arm64": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.33.0.tgz",
+ "integrity": "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-darwin-arm64": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.33.0.tgz",
+ "integrity": "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-darwin-x64": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.33.0.tgz",
+ "integrity": "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-freebsd-x64": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.33.0.tgz",
+ "integrity": "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-arm-gnueabihf": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.33.0.tgz",
+ "integrity": "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-arm64-gnu": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.33.0.tgz",
+ "integrity": "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==",
+ "cpu": [
+ "arm64"
+ ],
+ "libc": [
+ "glibc"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-arm64-musl": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.33.0.tgz",
+ "integrity": "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "libc": [
+ "musl"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-x64-gnu": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.33.0.tgz",
+ "integrity": "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==",
+ "cpu": [
+ "x64"
+ ],
+ "libc": [
+ "glibc"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-x64-musl": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.33.0.tgz",
+ "integrity": "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==",
+ "cpu": [
+ "x64"
+ ],
+ "libc": [
+ "musl"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-win32-arm64-msvc": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.33.0.tgz",
+ "integrity": "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-win32-x64-msvc": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.33.0.tgz",
+ "integrity": "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+ "license": "MIT"
+ },
+ "node_modules/load-plugin": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/load-plugin/-/load-plugin-6.0.3.tgz",
+ "integrity": "sha512-kc0X2FEUZr145odl68frm+lMJuQ23+rTXYmR6TImqPtbpmXC4vVXbWKDQ9IzndA0HfyQamWfKLhzsqGSTxE63w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@npmcli/config": "^8.0.0",
+ "import-meta-resolve": "^4.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lodash": {
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz",
+ "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash.kebabcase": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz",
+ "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==",
+ "license": "MIT"
+ },
+ "node_modules/lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/longest-streak": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz",
+ "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "license": "MIT",
+ "dependencies": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ },
+ "bin": {
+ "loose-envify": "cli.js"
+ }
+ },
+ "node_modules/lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "node_modules/magic-string": {
+ "version": "1.4.5",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-1.4.5.tgz",
+ "integrity": "sha512-oLLC2+YvQUfAa+vxoufE/yc1icb87M9iXIRqAoR/2EhE/8cb3SF/+Gi0c2By1B+5Vz2e2vQtUvHiu1+63Znh+w==",
+ "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==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/mathml-tag-names": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-4.0.0.tgz",
+ "integrity": "sha512-aa6AU2Pcx0VP/XWnh8IGL0SYSgQHDT6Ucror2j2mXeFAlN3ahaNs8EZtG1YiticMkSLj3Gt6VPFfZogt7G5iFQ==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/mdast-comment-marker": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/mdast-comment-marker/-/mdast-comment-marker-3.0.0.tgz",
+ "integrity": "sha512-bt08sLmTNg00/UtVDiqZKocxqvQqqyQZAg1uaRuO/4ysXV5motg7RolF5o5yy/sY1rG0v2XgZEqFWho1+2UquA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "mdast-util-mdx-expression": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-directive": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-directive/-/mdast-util-directive-3.2.0.tgz",
+ "integrity": "sha512-Yxq+hH4pBEmtaLIJyMVcNbtBiCIKzdOK3HvDeM+JAqC8XVAT1e5PUYbHBpwFvQLIJuJfO2zCu7aNUXWoyZLmhw==",
+ "dev": true,
+ "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.2.0",
+ "micromark-util-character": "^2.0.0",
+ "parse-entities": "^4.0.0",
+ "stringify-entities": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-from-markdown": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.1.0.tgz",
+ "integrity": "sha512-KRLgmPaP2H1ul2bpoJkOS+9pAcDAAj9Nu1mqLnh8NLeJG5tlvj42TH80PIGBpROWlRXLk0lDrWNuZCFy/tsB4A==",
+ "dev": true,
+ "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-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==",
+ "dev": true,
+ "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==",
+ "dev": true,
+ "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.2.3",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.2.3.tgz",
+ "integrity": "sha512-dImdB6VZRMRac1SwAW6o1c0ESk/7pFFAMCMuKM+9v7LpTSthMM5nzXpqKw4Mjo66aXVKhNkyrP4bMB9MurPyWg==",
+ "dev": true,
+ "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-character": "^2.0.0",
+ "micromark-util-classify-character": "^2.0.0",
+ "micromark-util-decode-string": "^2.0.0",
+ "micromark-util-html-tag-name": "^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==",
+ "dev": true,
+ "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/memoize-one": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz",
+ "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==",
+ "license": "MIT"
+ },
+ "node_modules/meow": {
+ "version": "14.1.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-14.1.0.tgz",
+ "integrity": "sha512-EDYo6VlmtnumlcBCbh1gLJ//9jvM/ndXHfVXIFrZVr6fGcwTUyCTFNTLCKuY3ffbK8L/+3Mzqnd58RojiZqHVw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "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/micromark": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.3.tgz",
+ "integrity": "sha512-oGYfQzHSG5dOMovQcJ3fyTmZlWAWpi0XA0sJwJs+i6OT88o1+Jtw/8z0CmdowSLxGhhFK89rQ/oXph/wN02PNw==",
+ "dev": true,
+ "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-edit-map": "^1.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.4",
+ "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.4.tgz",
+ "integrity": "sha512-wxEeE8v8XVvOrxn1TZj74qYhAtTQsSqufHVS3uNVyT1MupXxhyaHk8/9xDNPh9BmL77QNDgWTkZ3RsYHB2ry7w==",
+ "dev": true,
+ "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.1.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-edit-map": "^1.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.3"
+ }
+ },
+ "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==",
+ "dev": true,
+ "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==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "devlop": "^1.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-factory-space": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.1.0.tgz",
+ "integrity": "sha512-fS8hnLIjnjvdQIj39Geug8wWsR0HrYZ43KShKxNfwT7t2LOHo/LbWZEzEaSOjwtjdCsjoE6syHhonEzW0zv0+Q==",
+ "dev": true,
+ "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==",
+ "dev": true,
+ "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==",
+ "dev": true,
+ "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==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-symbol": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-classify-character": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz",
+ "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-combine-extensions": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz",
+ "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-chunked": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-decode-numeric-character-reference": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz",
+ "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-symbol": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-decode-string": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz",
+ "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "decode-named-character-reference": "^1.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-decode-numeric-character-reference": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-edit-map": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-edit-map/-/micromark-util-edit-map-1.0.0.tgz",
+ "integrity": "sha512-Pa2ljlsEL6sVwFaYeyrOLSYbQt73JvGbPOYFq+9AElXiSnfI5Q4465RRZ1sHv7lDjDOnGRDDaqPXqClqWK/q1Q==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-encode": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz",
+ "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/micromark-util-html-tag-name": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz",
+ "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==",
+ "dev": true,
+ "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==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-symbol": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-resolve-all": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz",
+ "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-sanitize-uri": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz",
+ "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-encode": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-subtokenize": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz",
+ "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "devlop": "^1.0.0",
+ "micromark-util-chunked": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-symbol": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz",
+ "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/micromark-util-types": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.3.tgz",
+ "integrity": "sha512-oxB2Ik03hI0gv+VNn9tnh1t1YEe9MDPptViAEgfdf3YQHsn0pzGTgCdlSCJXcwhqm8phaEuM7zeEu3QQzVBrPg==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "braces": "^3.0.3",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/micromatch/node_modules/picomatch": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
+ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "10.2.6",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz",
+ "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "brace-expansion": "^5.0.8"
+ },
+ "engines": {
+ "node": "18 || 20 || >=22"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/minipass": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz",
+ "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
+ "node_modules/mri": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz",
+ "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/mrmime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz",
+ "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "license": "MIT"
+ },
+ "node_modules/muggle-string": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz",
+ "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.20",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.20.tgz",
+ "integrity": "sha512-uKdg2G3GNCKQn9byYOpxbGqrT2fGO5KRt5J/8b3pok8rT6qxGWF6hxMyJiEYtAf+FVyYuD9hRaDqX5uPFYJ4ZQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/neotraverse": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-1.0.1.tgz",
+ "integrity": "sha512-WmmLty1YWwJl9yZi77v2dVIV6X2kuYV8YYBI/G3LWGKdGHmHUvL1z7FW0iDvEvGAwNEoc5x1tOOOyDnf5jJw/w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/nlcst-to-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-4.0.0.tgz",
+ "integrity": "sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/nlcst": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/node-addon-api": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz",
+ "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==",
+ "license": "MIT",
+ "optional": true
+ },
+ "node_modules/node-fetch-native": {
+ "version": "1.6.7",
+ "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz",
+ "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==",
+ "license": "MIT"
+ },
+ "node_modules/node-mock-http": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/node-mock-http/-/node-mock-http-1.0.5.tgz",
+ "integrity": "sha512-KQyt/wLjG3TAc7DOUhpqWzgd4ERxR80JOlTK5VE5R1S12IaPVN5qkj4klBce9HPG1Njuup4Sb5bljaT34lIyjw==",
+ "license": "MIT"
+ },
+ "node_modules/node-releases": {
+ "version": "2.0.63",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.63.tgz",
+ "integrity": "sha512-6li2QanLsAXpIH2R6j77MzRyvOyrvdTqlKtO4CgBdHGNvN99ZZfyxszHc5o5+IZBWD5u6Hzwg83JoGXmqZNG9Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/nopt": {
+ "version": "7.2.1",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz",
+ "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "abbrev": "^2.0.0"
+ },
+ "bin": {
+ "nopt": "bin/nopt.js"
+ },
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ }
+ },
+ "node_modules/normalize-package-data": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz",
+ "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "hosted-git-info": "^7.0.0",
+ "semver": "^7.3.5",
+ "validate-npm-package-license": "^3.0.4"
+ },
+ "engines": {
+ "node": "^16.14.0 || >=18.0.0"
+ }
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm-install-checks": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz",
+ "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "semver": "^7.1.1"
+ },
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ }
+ },
+ "node_modules/npm-normalize-package-bin": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz",
+ "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ }
+ },
+ "node_modules/npm-package-arg": {
+ "version": "11.0.3",
+ "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.3.tgz",
+ "integrity": "sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "hosted-git-info": "^7.0.0",
+ "proc-log": "^4.0.0",
+ "semver": "^7.3.5",
+ "validate-npm-package-name": "^5.0.0"
+ },
+ "engines": {
+ "node": "^16.14.0 || >=18.0.0"
+ }
+ },
+ "node_modules/npm-pick-manifest": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.1.0.tgz",
+ "integrity": "sha512-nkc+3pIIhqHVQr085X9d2JzPzLyjzQS96zbruppqC9aZRm/x8xx6xhI98gHtsfELP2bE+loHq8ZaHFHhe+NauA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "npm-install-checks": "^6.0.0",
+ "npm-normalize-package-bin": "^3.0.0",
+ "npm-package-arg": "^11.0.0",
+ "semver": "^7.3.5"
+ },
+ "engines": {
+ "node": "^16.14.0 || >=18.0.0"
+ }
+ },
+ "node_modules/nth-check": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
+ "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "boolbase": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/nth-check?sponsor=1"
+ }
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "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/ofetch": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.5.1.tgz",
+ "integrity": "sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==",
+ "license": "MIT",
+ "dependencies": {
+ "destr": "^2.0.5",
+ "node-fetch-native": "^1.6.7",
+ "ufo": "^1.6.1"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/oniguruma-parser": {
+ "version": "0.12.2",
+ "resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.2.tgz",
+ "integrity": "sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw==",
+ "license": "MIT"
+ },
+ "node_modules/oniguruma-to-es": {
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.6.tgz",
+ "integrity": "sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==",
+ "license": "MIT",
+ "dependencies": {
+ "oniguruma-parser": "^0.12.2",
+ "regex": "^6.1.0",
+ "regex-recursion": "^6.0.2"
+ }
+ },
+ "node_modules/optionator": {
+ "version": "0.9.4",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
+ "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.5"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "7.3.3",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-7.3.3.tgz",
+ "integrity": "sha512-SKgVvDU5TNIxQ4r30U75BNLC6a+6GOEjngrk/ysM5+Zu3oJuk1SC5ApzIzY/7PjCEjoVPMWJ0zho/4QUiEB7TQ==",
+ "license": "MIT",
+ "dependencies": {
+ "yocto-queue": "^1.2.1"
+ },
+ "engines": {
+ "node": ">=20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate/node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate/node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-queue": {
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-10.0.0.tgz",
+ "integrity": "sha512-P2wrCri3bhGLPo3kX7qYVXbo/5GvaVATU0DpO24CbeT53Y4z35t8JUWku04ERpXHUYB5rPMi3TkWE3fmJgx5rA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=22"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/package-json-from-dist": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
+ "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
+ "dev": true,
+ "license": "BlueOak-1.0.0"
+ },
+ "node_modules/package-manager-detector": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.9.0.tgz",
+ "integrity": "sha512-zAMfbta9nPA8AKkA4WdmNAT8R8s6Dk0/xwPsqNnRidMFcLo1YkLuPDTgs2f64XdzS8vbLNnoJ+uUIkgbz7oRHA==",
+ "license": "MIT"
+ },
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "license": "MIT",
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "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==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "character-entities-legacy": "^3.0.0",
+ "character-reference-invalid": "^2.0.0",
+ "decode-named-character-reference": "^1.0.0",
+ "is-alphanumerical": "^2.0.0",
+ "is-decimal": "^2.0.0",
+ "is-hexadecimal": "^2.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/parse-entities/node_modules/@types/unist": {
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz",
+ "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/path-browserify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
+ "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "license": "MIT"
+ },
+ "node_modules/path-scurry": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+ "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "lru-cache": "^10.2.0",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/path-scurry/node_modules/lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/piccolore": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/piccolore/-/piccolore-0.1.3.tgz",
+ "integrity": "sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw==",
+ "license": "ISC"
+ },
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "license": "ISC"
+ },
+ "node_modules/picomatch": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz",
+ "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pluralize": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz",
+ "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.5.32",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.32.tgz",
+ "integrity": "sha512-LJlKCCAUFKOuZxipUdYw1NzIITEsPcgyOG9LkvRJvuKj/bRzbuRY0ARXvL0pWGpsZvn8jku+LMep2eU0seHp8g==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "nanoid": "^3.3.20",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.2"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/postcss-media-query-parser": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz",
+ "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/postcss-resolve-nested-selector": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.7.tgz",
+ "integrity": "sha512-lFcugRCQXWManq7nyZ0dDtir52wc7gKYJfWpSuz4GxvnGc7dtlpXcZYX4A0asatzTuqpQ3ngDdyD+QG/szeXWw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/postcss-safe-parser": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.1.0.tgz",
+ "integrity": "sha512-1WzZxRLaAFwEh6Do+zyGpjWV3nGJNxxhuh7Ubu/q1ICImMgZJnLwhoaEpRbG4pJppp2Y1ncL9ffA2f+LhrefQg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss-safe-parser"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=18.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.31"
+ }
+ },
+ "node_modules/postcss-scss": {
+ "version": "4.0.9",
+ "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz",
+ "integrity": "sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss-scss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.29"
+ }
+ },
+ "node_modules/postcss-selector-parser": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.2.0.tgz",
+ "integrity": "sha512-Khh/tERVBn0I1499dvBSHY0pWJloMJWUxDsOBM0CCDPAcVZ10Jl2L1qy1f19uEX22spa8Mv7DCdEQJc0cGwBhQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "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==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/prettier": {
+ "version": "3.9.10",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.9.10.tgz",
+ "integrity": "sha512-skGHTH1Yb9QvaTC4hWnRTzEYtCpApF0UMBPz+t/0ZPzP8ihefo/btKd+QA7pUE0fEwA1SbS/NmhyEcstdXOIdA==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "prettier": "bin/prettier.cjs"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/prettier/prettier?sponsor=1"
+ }
+ },
+ "node_modules/prettier-plugin-astro": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prettier-plugin-astro/-/prettier-plugin-astro-1.1.2.tgz",
+ "integrity": "sha512-vKyJW7Bb/QcIPUebEehbG+Tn+3yTIhoJ8ecm6NyJgcOj5T2xP+eF1IxY4zv809YyA69nV4ZFj+H9mdpC5cTaQA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@astrojs/compiler-rs": "^0.5.2",
+ "@prettier/parse-srcset": "^3.1.0",
+ "sass-formatter": "^0.8.0"
+ },
+ "engines": {
+ "node": ">=22.12.0"
+ },
+ "peerDependencies": {
+ "prettier": "^3.5.3"
+ }
+ },
+ "node_modules/prismjs": {
+ "version": "1.30.0",
+ "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz",
+ "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/proc-log": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz",
+ "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ }
+ },
+ "node_modules/process-ancestry": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/process-ancestry/-/process-ancestry-0.1.0.tgz",
+ "integrity": "sha512-tGqJW/UnclpYASFcM6Xh8D8l/BMtaQ9+CSG0vlJSJTcdMM4lDRv4c6H0Pdcsfted+bVczdYSfk2fdukg2gQkZg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/promise-inflight": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
+ "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/promise-retry": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz",
+ "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "err-code": "^2.0.2",
+ "retry": "^0.12.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/prop-types": {
+ "version": "15.8.1",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
+ "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.4.0",
+ "object-assign": "^4.1.1",
+ "react-is": "^16.13.1"
+ }
+ },
+ "node_modules/property-information": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.2.0.tgz",
+ "integrity": "sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/punycode": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/qified": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/qified/-/qified-0.10.1.tgz",
+ "integrity": "sha512-+Owyggi9IxT1ePKGafcI87ubSmxol6smwJ+RAHDQlx9+9cPwFWDiKFFCPuWhr9ignlGpZ9vDQLw67N4dcTVFEA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "hookified": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/qified/node_modules/hookified": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/hookified/-/hookified-2.2.0.tgz",
+ "integrity": "sha512-p/LgFzRN5FeoD3DLS6bkUapeye6E4SI6yJs6KetENd18S+FBthqYq2amJUWpt5z0EQwwHemidjY5OqJGEKm5uA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": 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"
+ },
+ "node_modules/radix3": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz",
+ "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==",
+ "license": "MIT"
+ },
+ "node_modules/react": {
+ "version": "19.3.1",
+ "resolved": "https://registry.npmjs.org/react/-/react-19.3.1.tgz",
+ "integrity": "sha512-QNhWdt7nrgVWWQG58QuGsAR3jv3Hbe4mb4vz7w2csnHavciZJgda1CPNaldF6eVxv90ud3jUXpKlHL69gO38yw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/react-dom": {
+ "version": "19.3.1",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.3.1.tgz",
+ "integrity": "sha512-Y0bARz53lhEC1NMCASs0/j+faB/zqt3R8hpvg1e8+61ZVJ4UL0UdC4cBbXfZMcIuhrfgeILTLe+ZeBCavQPtKQ==",
+ "license": "MIT",
+ "dependencies": {
+ "scheduler": "^0.28.0"
+ },
+ "peerDependencies": {
+ "react": "^19.3.1"
+ }
+ },
+ "node_modules/react-icons": {
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.7.0.tgz",
+ "integrity": "sha512-LBLy340Rzqy6+/yVhZKT3B/QpP1BZaesGqasf09HPOBzRarcDIFH0WwXlXQfE7q7ipxK4MSiC5DIBWURCny6fw==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": "*"
+ }
+ },
+ "node_modules/react-is": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
+ "license": "MIT"
+ },
+ "node_modules/react-select": {
+ "version": "5.10.2",
+ "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.10.2.tgz",
+ "integrity": "sha512-Z33nHdEFWq9tfnfVXaiM12rbJmk+QjFEztWLtmXqQhz6Al4UZZ9xc0wiatmGtUOCCnHN0WizL3tCMYRENX4rVQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.12.0",
+ "@emotion/cache": "^11.4.0",
+ "@emotion/react": "^11.8.1",
+ "@floating-ui/dom": "^1.0.1",
+ "@types/react-transition-group": "^4.4.0",
+ "memoize-one": "^6.0.0",
+ "prop-types": "^15.6.0",
+ "react-transition-group": "^4.3.0",
+ "use-isomorphic-layout-effect": "^1.2.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+ }
+ },
+ "node_modules/react-transition-group": {
+ "version": "4.4.5",
+ "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz",
+ "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@babel/runtime": "^7.5.5",
+ "dom-helpers": "^5.0.1",
+ "loose-envify": "^1.4.0",
+ "prop-types": "^15.6.2"
+ },
+ "peerDependencies": {
+ "react": ">=16.6.0",
+ "react-dom": ">=16.6.0"
+ }
+ },
+ "node_modules/read-package-json-fast": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz",
+ "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "json-parse-even-better-errors": "^3.0.0",
+ "npm-normalize-package-bin": "^3.0.0"
+ },
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ }
+ },
+ "node_modules/read-package-json-fast/node_modules/json-parse-even-better-errors": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz",
+ "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ }
+ },
+ "node_modules/readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.1.1.tgz",
+ "integrity": "sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 20.19.0"
+ },
+ "funding": {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/regex": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/regex/-/regex-6.1.0.tgz",
+ "integrity": "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==",
+ "license": "MIT",
+ "dependencies": {
+ "regex-utilities": "^2.3.0"
+ }
+ },
+ "node_modules/regex-recursion": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz",
+ "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==",
+ "license": "MIT",
+ "dependencies": {
+ "regex-utilities": "^2.3.0"
+ }
+ },
+ "node_modules/regex-utilities": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz",
+ "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==",
+ "license": "MIT"
+ },
+ "node_modules/remark": {
+ "version": "15.0.1",
+ "resolved": "https://registry.npmjs.org/remark/-/remark-15.0.1.tgz",
+ "integrity": "sha512-Eht5w30ruCXgFmxVUSlNWQ9iiimq07URKeFS3hNc8cUWy1llX4KDWfyEDZRycMc+znsN9Ux5/tJ/BFdgdOwA3A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.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-cli": {
+ "version": "12.0.1",
+ "resolved": "https://registry.npmjs.org/remark-cli/-/remark-cli-12.0.1.tgz",
+ "integrity": "sha512-2NAEOACoTgo+e+YAaCTODqbrWyhMVmlUyjxNCkTrDRHHQvH6+NbrnqVvQaLH/Q8Ket3v90A43dgAJmXv8y5Tkw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "import-meta-resolve": "^4.0.0",
+ "markdown-extensions": "^2.0.0",
+ "remark": "^15.0.0",
+ "unified-args": "^11.0.0"
+ },
+ "bin": {
+ "remark": "cli.js"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-lint": {
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint/-/remark-lint-10.0.1.tgz",
+ "integrity": "sha512-1+PYGFziOg4pH7DDf1uMd4AR3YuO2EMnds/SdIWMPGT7CAfDRSnAmpxPsJD0Ds3IKpn97h3d5KPGf1WFOg6hXQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "remark-message-control": "^8.0.0",
+ "unified": "^11.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-lint-final-newline": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-final-newline/-/remark-lint-final-newline-3.0.1.tgz",
+ "integrity": "sha512-q5diKHD6BMbzqWqgvYPOB8AJgLrMzEMBAprNXjcpKoZ/uCRqly+gxjco+qVUMtMWSd+P+KXZZEqoa7Y6QiOudw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "devlop": "^1.0.0",
+ "unified-lint-rule": "^3.0.0",
+ "vfile-location": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-lint-hard-break-spaces": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-hard-break-spaces/-/remark-lint-hard-break-spaces-4.1.1.tgz",
+ "integrity": "sha512-AKDPDt39fvmr3yk38OKZEWJxxCOOUBE+96AsBfs+ExS5LW6oLa9041X5ahFDQHvHGzdoremEIaaElursaPEkNg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "unified-lint-rule": "^3.0.0",
+ "unist-util-position": "^5.0.0",
+ "unist-util-visit": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-lint-list-item-bullet-indent": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-list-item-bullet-indent/-/remark-lint-list-item-bullet-indent-5.0.1.tgz",
+ "integrity": "sha512-LKuTxkw5aYChzZoF3BkfaBheSCHs0T8n8dPHLQEuOLo6iC5wy98iyryz0KZ61GD8stlZgQO2KdWSdnP6vr40Iw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "pluralize": "^8.0.0",
+ "unified-lint-rule": "^3.0.0",
+ "unist-util-position": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-lint-list-item-indent": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-list-item-indent/-/remark-lint-list-item-indent-4.0.1.tgz",
+ "integrity": "sha512-gJd1Q+jOAeTgmGRsdMpnRh01DUrAm0O5PCQxE8ttv1QZOV015p/qJH+B4N6QSmcUuPokHLAh9USuq05C73qpiA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "mdast-util-phrasing": "^4.0.0",
+ "pluralize": "^8.0.0",
+ "unified-lint-rule": "^3.0.0",
+ "unist-util-position": "^5.0.0",
+ "unist-util-visit-parents": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-lint-no-blockquote-without-marker": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-no-blockquote-without-marker/-/remark-lint-no-blockquote-without-marker-6.0.1.tgz",
+ "integrity": "sha512-b4IOkNcG7C16HYAdKUeAhO7qPt45m+v7SeYbVrqvbSFtlD3EUBL8fgHRgLK1mdujFXDP1VguOEMx+Txv8JOT4w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "devlop": "^1.0.0",
+ "mdast-util-directive": "^3.0.0",
+ "mdast-util-phrasing": "^4.0.0",
+ "pluralize": "^8.0.0",
+ "unified-lint-rule": "^3.0.0",
+ "unist-util-position": "^5.0.0",
+ "unist-util-visit-parents": "^6.0.0",
+ "vfile-location": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-lint-no-duplicate-definitions": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-no-duplicate-definitions/-/remark-lint-no-duplicate-definitions-4.0.1.tgz",
+ "integrity": "sha512-Ek+A/xDkv5Nn+BXCFmf+uOrFSajCHj6CjhsHjtROgVUeEPj726yYekDBoDRA0Y3+z+U30AsJoHgf/9Jj1IFSug==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "devlop": "^1.0.0",
+ "mdast-util-phrasing": "^4.0.0",
+ "unified-lint-rule": "^3.0.0",
+ "unist-util-visit-parents": "^6.0.0",
+ "vfile-message": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-lint-no-heading-content-indent": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-no-heading-content-indent/-/remark-lint-no-heading-content-indent-5.0.1.tgz",
+ "integrity": "sha512-YIWktnZo7M9aw7PGnHdshvetSH3Y0qW+Fm143R66zsk5lLzn1XA5NEd/MtDzP8tSxxV+gcv+bDd5St1QUI4oSQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "mdast-util-phrasing": "^4.0.0",
+ "pluralize": "^8.0.0",
+ "unified-lint-rule": "^3.0.0",
+ "unist-util-position": "^5.0.0",
+ "unist-util-visit-parents": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-lint-no-literal-urls": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-no-literal-urls/-/remark-lint-no-literal-urls-4.0.1.tgz",
+ "integrity": "sha512-RhTANFkFFXE6bM+WxWcPo2TTPEfkWG3lJZU50ycW7tJJmxUzDNzRed/z80EVJIdGwFa0NntVooLUJp3xrogalQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "mdast-util-to-string": "^4.0.0",
+ "micromark-util-character": "^2.0.0",
+ "unified-lint-rule": "^3.0.0",
+ "unist-util-position": "^5.0.0",
+ "unist-util-visit-parents": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-lint-no-shortcut-reference-image": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-image/-/remark-lint-no-shortcut-reference-image-4.0.1.tgz",
+ "integrity": "sha512-hQhJ3Dr8ZWRdj7qm6+9vcPpqtGchhENA2UHOmcTraLf6dN1cFATCgY/HbTbRIN6NkG/EEClTgRC1QCokWR2Mmw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "unified-lint-rule": "^3.0.0",
+ "unist-util-visit-parents": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-lint-no-shortcut-reference-link": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-link/-/remark-lint-no-shortcut-reference-link-4.0.1.tgz",
+ "integrity": "sha512-YxciuUZc90QaJYhayGO80lS3zxEOBgwwLW1MKYB7AfUdkrLcLVlS+DFloiq0MZ7EDVXuuGUEnIzyjyLSbI5BUA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "unified-lint-rule": "^3.0.0",
+ "unist-util-visit-parents": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-lint-no-undefined-references": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/remark-lint-no-undefined-references/-/remark-lint-no-undefined-references-5.0.2.tgz",
+ "integrity": "sha512-5prkVb1tKwJwr5+kct/UjsLjvMdEDO7uClPeGfrxfAcN59+pWU8OUSYiqYmpSKWJPIdyxPRS8Oyf1HtaYvg8VQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "collapse-white-space": "^2.0.0",
+ "devlop": "^1.0.0",
+ "micromark-util-normalize-identifier": "^2.0.0",
+ "unified-lint-rule": "^3.0.0",
+ "unist-util-position": "^5.0.0",
+ "unist-util-visit-parents": "^6.0.0",
+ "vfile-location": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-lint-no-unused-definitions": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/remark-lint-no-unused-definitions/-/remark-lint-no-unused-definitions-4.0.2.tgz",
+ "integrity": "sha512-KRzPmvfq6b3LSEcAQZobAn+5eDfPTle0dPyDEywgPSc3E7MIdRZQenL9UL8iIqHQWK4FvdUD0GX8FXGqu5EuCw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "devlop": "^1.0.0",
+ "unified-lint-rule": "^3.0.0",
+ "unist-util-visit-parents": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-lint-ordered-list-marker-style": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-style/-/remark-lint-ordered-list-marker-style-4.0.1.tgz",
+ "integrity": "sha512-vZTAbstcBPbGwJacwldGzdGmKwy5/4r29SZ9nQkME4alEl5B1ReSBlYa8t7QnTSW7+tqvA9Sg71RPadgAKWa4w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "mdast-util-phrasing": "^4.0.0",
+ "micromark-util-character": "^2.0.0",
+ "unified-lint-rule": "^3.0.0",
+ "unist-util-position": "^5.0.0",
+ "unist-util-visit-parents": "^6.0.0",
+ "vfile-message": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-message-control": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/remark-message-control/-/remark-message-control-8.0.0.tgz",
+ "integrity": "sha512-brpzOO+jdyE/mLqvqqvbogmhGxKygjpCUCG/PwSCU43+JZQ+RM+sSzkCWBcYvgF3KIAVNIoPsvXjBkzO7EdsYQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "mdast-comment-marker": "^3.0.0",
+ "unified-message-control": "^5.0.0",
+ "vfile": "^6.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==",
+ "dev": true,
+ "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-preset-lint-recommended": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/remark-preset-lint-recommended/-/remark-preset-lint-recommended-7.0.1.tgz",
+ "integrity": "sha512-j1CY5u48PtZl872BQ40uWSQMT3R4gXKp0FUgevMu5gW7hFMtvaCiDq+BfhzeR8XKKiW9nIMZGfIMZHostz5X4g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "remark-lint": "^10.0.0",
+ "remark-lint-final-newline": "^3.0.0",
+ "remark-lint-hard-break-spaces": "^4.0.0",
+ "remark-lint-list-item-bullet-indent": "^5.0.0",
+ "remark-lint-list-item-indent": "^4.0.0",
+ "remark-lint-no-blockquote-without-marker": "^6.0.0",
+ "remark-lint-no-duplicate-definitions": "^4.0.0",
+ "remark-lint-no-heading-content-indent": "^5.0.0",
+ "remark-lint-no-literal-urls": "^4.0.0",
+ "remark-lint-no-shortcut-reference-image": "^4.0.0",
+ "remark-lint-no-shortcut-reference-link": "^4.0.0",
+ "remark-lint-no-undefined-references": "^5.0.0",
+ "remark-lint-no-unused-definitions": "^4.0.0",
+ "remark-lint-ordered-list-marker-style": "^4.0.0",
+ "unified": "^11.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-stringify": {
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz",
+ "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==",
+ "dev": true,
+ "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",
+ "integrity": "sha512-lMbBMrDoxgsyO+yB3sDcrDuX85yYt7sS8BfQd11jtbW/z5ZWgLZRcEGLsLoYw7I0WSUGQBs8CC8ScIxkTX1+6Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/require-from-string": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
+ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/resolve": {
+ "version": "1.22.14",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.14.tgz",
+ "integrity": "sha512-1ZjYvR9sbkiwC5+9QHetqW5HmA2pHRMaoupD01t2HlYnV/vydC2zPwLixhsMieSWVZt0JJRg5LVIk0Ow1D/TrA==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "is-core-module": "^2.18.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/resolve-pkg-maps": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
+ "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
+ }
+ },
+ "node_modules/retext-smartypants": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/retext-smartypants/-/retext-smartypants-6.2.0.tgz",
+ "integrity": "sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/nlcst": "^2.0.0",
+ "nlcst-to-string": "^4.0.0",
+ "unist-util-visit": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/retry": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
+ "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
+ "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "deprecated": "Rimraf versions prior to v4 are no longer supported",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/rimraf/node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/rimraf/node_modules/brace-expansion": {
+ "version": "1.1.21",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.21.tgz",
+ "integrity": "sha512-9zeA+KLZNNzglF2TPKRQEDyx6Yby7daAkuy8MiPzpXPsYDWi/DRM8jmwUDxokQjYqBpv5DgPiwD4h4ZZSy1Ujw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/rimraf/node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/rimraf/node_modules/minimatch": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/rolldown": {
+ "version": "1.2.18",
+ "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.18.tgz",
+ "integrity": "sha512-C1uuT3UR60SShuCaPQFAAZyefJCWZlAKB02BV3BuPE2Rs4fevRQltEKoFO2tV5W9/eJhU5RieV6vJj3euulfNQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@oxc-project/types": "=0.156.0",
+ "@rolldown/pluginutils": "^1.0.0"
+ },
+ "bin": {
+ "rolldown": "bin/cli.mjs"
+ },
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ },
+ "optionalDependencies": {
+ "@rolldown/binding-android-arm-eabi": "1.2.18",
+ "@rolldown/binding-android-arm64": "1.2.18",
+ "@rolldown/binding-darwin-arm64": "1.2.18",
+ "@rolldown/binding-darwin-x64": "1.2.18",
+ "@rolldown/binding-freebsd-x64": "1.2.18",
+ "@rolldown/binding-linux-arm-gnueabihf": "1.2.18",
+ "@rolldown/binding-linux-arm64-gnu": "1.2.18",
+ "@rolldown/binding-linux-arm64-musl": "1.2.18",
+ "@rolldown/binding-linux-ppc64-gnu": "1.2.18",
+ "@rolldown/binding-linux-s390x-gnu": "1.2.18",
+ "@rolldown/binding-linux-x64-gnu": "1.2.18",
+ "@rolldown/binding-linux-x64-musl": "1.2.18",
+ "@rolldown/binding-openharmony-arm64": "1.2.18",
+ "@rolldown/binding-win32-arm64-msvc": "1.2.18",
+ "@rolldown/binding-win32-x64-msvc": "1.2.18"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": 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",
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/s.color": {
+ "version": "0.0.15",
+ "resolved": "https://registry.npmjs.org/s.color/-/s.color-0.0.15.tgz",
+ "integrity": "sha512-AUNrbEUHeKY8XsYr/DYpl+qk5+aM+DChopnWOPEzn8YKzOhv4l2zH6LzZms3tOZP3wwdOyc0RmTciyi46HLIuA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "dev": 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"
+ },
+ "node_modules/sass": {
+ "version": "1.108.1",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.108.1.tgz",
+ "integrity": "sha512-sIYgSvOPeD9wABwDS/ofNjHASSck+7h3jLkk7wG1NPFL3XeS6vOQjBlAFSmRV09kZr1yt/Tuayt6kKtBbLjHNQ==",
+ "devOptional": true,
+ "license": "MIT",
+ "dependencies": {
+ "chokidar": "^5.0.0",
+ "immutable": "^5.1.5",
+ "source-map-js": ">=0.6.2 <2.0.0"
+ },
+ "bin": {
+ "sass": "sass.js"
+ },
+ "engines": {
+ "node": ">=20.19.0"
+ },
+ "optionalDependencies": {
+ "@parcel/watcher": "^2.4.1"
+ }
+ },
+ "node_modules/sass-formatter": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/sass-formatter/-/sass-formatter-0.8.0.tgz",
+ "integrity": "sha512-Nf4eMGE2O5vnJG7KPCRyksWS9gVKSYoUWtPeMXRRxwZSPVQhSGtL602xVYS65LvMkHmkvKa7xpauF0+/5pPwrg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "suf-log": "^2.5.3"
+ },
+ "bin": {
+ "sass-formatter": "dist/cli.js"
+ }
+ },
+ "node_modules/satteri": {
+ "version": "0.11.7",
+ "resolved": "https://registry.npmjs.org/satteri/-/satteri-0.11.7.tgz",
+ "integrity": "sha512-xDOSxkc1ew3z3IovIjmsqJaVHRXTGYJkPvx0LL/U6o90km8kSU+pmrZVvnWd5creJeE0UnvMEienlkPuYQdJaA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree-jsx": "^1.0.5",
+ "@types/hast": "^3.0.5",
+ "@types/mdast": "^4.0.4",
+ "@types/unist": "^3.0.3"
+ },
+ "optionalDependencies": {
+ "@bruits/satteri-android-arm64": "0.11.7",
+ "@bruits/satteri-darwin-arm64": "0.11.7",
+ "@bruits/satteri-darwin-x64": "0.11.7",
+ "@bruits/satteri-freebsd-x64": "0.11.7",
+ "@bruits/satteri-linux-arm64-gnu": "0.11.7",
+ "@bruits/satteri-linux-arm64-musl": "0.11.7",
+ "@bruits/satteri-linux-x64-gnu": "0.11.7",
+ "@bruits/satteri-linux-x64-musl": "0.11.7",
+ "@bruits/satteri-wasm32-wasi": "0.11.7",
+ "@bruits/satteri-win32-arm64-msvc": "0.11.7",
+ "@bruits/satteri-win32-x64-msvc": "0.11.7"
+ }
+ },
+ "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/scheduler": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.28.0.tgz",
+ "integrity": "sha512-juorfCmIkIw8tT+p5BXSm6PJjQF/ycEYmKyzURCIt/RaZIhL+PulbQ9Yu2z1HdOJDdqDTlxA1+xKBmHXJsczAw==",
+ "license": "MIT"
+ },
+ "node_modules/semver": {
+ "version": "7.8.6",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.6.tgz",
+ "integrity": "sha512-9lpSSU4Mly3mrtruwLs1eLK6+gzbzqeBFwRNjIjE+9LuDpWdYctrQlQ3ej1Ilgi7gknpsTRnPoLP8DpCHqHIJw==",
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/sharp": {
+ "version": "0.35.5",
+ "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.35.5.tgz",
+ "integrity": "sha512-Ywn4OnzGukp7CDMrp08RQ50YKmuwG47brZgIVPTvBaaAfQlRlygrRqSrxdCiL9M+LlzLBiJ68IR1QqvzHyjC7g==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@img/colour": "^1.1.0",
+ "detect-libc": "^2.1.2",
+ "semver": "^7.8.5"
+ },
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-darwin-arm64": "0.35.5",
+ "@img/sharp-darwin-x64": "0.35.5",
+ "@img/sharp-freebsd-wasm32": "0.35.5",
+ "@img/sharp-libvips-darwin-arm64": "1.3.4",
+ "@img/sharp-libvips-darwin-x64": "1.3.4",
+ "@img/sharp-libvips-linux-arm": "1.3.4",
+ "@img/sharp-libvips-linux-arm64": "1.3.4",
+ "@img/sharp-libvips-linux-ppc64": "1.3.4",
+ "@img/sharp-libvips-linux-riscv64": "1.3.4",
+ "@img/sharp-libvips-linux-s390x": "1.3.4",
+ "@img/sharp-libvips-linux-x64": "1.3.4",
+ "@img/sharp-libvips-linuxmusl-arm64": "1.3.4",
+ "@img/sharp-libvips-linuxmusl-x64": "1.3.4",
+ "@img/sharp-linux-arm": "0.35.5",
+ "@img/sharp-linux-arm64": "0.35.5",
+ "@img/sharp-linux-ppc64": "0.35.5",
+ "@img/sharp-linux-riscv64": "0.35.5",
+ "@img/sharp-linux-s390x": "0.35.5",
+ "@img/sharp-linux-x64": "0.35.5",
+ "@img/sharp-linuxmusl-arm64": "0.35.5",
+ "@img/sharp-linuxmusl-x64": "0.35.5",
+ "@img/sharp-webcontainers-wasm32": "0.35.5",
+ "@img/sharp-win32-arm64": "0.35.5",
+ "@img/sharp-win32-ia32": "0.35.5",
+ "@img/sharp-win32-x64": "0.35.5"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shiki": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/shiki/-/shiki-4.6.0.tgz",
+ "integrity": "sha512-imjLsVHgPuWhvpU3P+zOekvMYqnel7QmKsFC4Sn0fCuAvaaalBsxwKEsrU8Ko5BdFnZA6Go/8a0RzahS634UgA==",
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/core": "4.6.0",
+ "@shikijs/engine-javascript": "4.6.0",
+ "@shikijs/engine-oniguruma": "4.6.0",
+ "@shikijs/langs": "4.6.0",
+ "@shikijs/themes": "4.6.0",
+ "@shikijs/types": "4.6.0",
+ "@shikijs/vscode-textmate": "^10.1.0",
+ "@types/hast": "^3.0.5"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/sisteransi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-2.0.0.tgz",
+ "integrity": "sha512-2WCqLdt12eN6ehLI50S2/ZxoowXU3DD1KVPRyVP0WEsFahrGZZmCdq1K59qjJljMRIDTwx1D9YaRK+hDneBUMg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/sitemap": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-9.0.1.tgz",
+ "integrity": "sha512-S6hzjGJSG3d6if0YoF5kTyeRJvia6FSTBroE5fQ0bu1QNxyJqhhinfUsXi9fH3MgtXODWvwo2BDyQSnhPQ88uQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "^24.9.2",
+ "@types/sax": "^1.2.1",
+ "arg": "^5.0.0",
+ "sax": "^1.4.1"
+ },
+ "bin": {
+ "sitemap": "dist/esm/cli.js"
+ },
+ "engines": {
+ "node": ">=20.19.5",
+ "npm": ">=10.8.2"
+ }
+ },
+ "node_modules/slash": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz",
+ "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/slice-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
+ "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "astral-regex": "^2.0.0",
+ "is-fullwidth-code-point": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/slice-ansi?sponsor=1"
+ }
+ },
+ "node_modules/slugify": {
+ "version": "1.6.9",
+ "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.9.tgz",
+ "integrity": "sha512-vZ7rfeehZui7wQs438JXBckYLkIIdfHOXsaVEUMyS5fHo1483l1bMdo0EDSWYclY0yZKFOipDy4KHuKs6ssvdg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/smol-toml": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.9.1.tgz",
+ "integrity": "sha512-j7WyPdf0CJoutMzMoPLF/bVXHtKZIT9Rb4eGeEbWw8X2t5oirjPgpL+OpaENZrILYaXqYwnVH+qgUwVbl+pUJQ==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">= 18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/cyyynthia"
+ }
+ },
+ "node_modules/source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.2.tgz",
+ "integrity": "sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/space-separated-tokens": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz",
+ "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/spdx-correct": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
+ "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "node_modules/spdx-exceptions": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
+ "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==",
+ "dev": true,
+ "license": "CC-BY-3.0"
+ },
+ "node_modules/spdx-expression-parse": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+ "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "node_modules/spdx-license-ids": {
+ "version": "3.0.24",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.24.tgz",
+ "integrity": "sha512-cLS9TtWkIQFyLkJ3/5aFQAOHOSKTlOs/7WDut/XPSdjom1fJhUdkepeJAKXa9Y05+FabHd0sti+Et559vDtkpQ==",
+ "dev": true,
+ "license": "CC0-1.0"
+ },
+ "node_modules/std-env": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.3.0.tgz",
+ "integrity": "sha512-OtU/EgQ1kIm5KwqQpBC6ZEMXrZRui11w8zgfTWp8cdO9B8OaPsbA8bTHO2P+HNo1VlUTGMVBwPhydu6poeXiag==",
+ "license": "MIT"
+ },
+ "node_modules/string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.2.0"
+ }
+ },
+ "node_modules/string-width": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.3.0.tgz",
+ "integrity": "sha512-ZbmZM0JCihQN91dWnxoipT2KOEyHqEyfRXUyjuRhW8b/xnqPDoq4gWEVApTVa9db2wN8mmoikgFBbjh71+cGeQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "get-east-asian-width": "^1.5.0",
+ "strip-ansi": "^7.1.2"
+ },
+ "engines": {
+ "node": ">=20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/string-width-cjs": {
+ "name": "string-width",
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/string-width-cjs/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/string-width-cjs/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/stringify-entities": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz",
+ "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==",
+ "license": "MIT",
+ "dependencies": {
+ "character-entities-html4": "^2.0.0",
+ "character-entities-legacy": "^3.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz",
+ "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^6.2.2"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "node_modules/strip-ansi-cjs": {
+ "name": "strip-ansi",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi-cjs/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/stylelint": {
+ "version": "17.16.0",
+ "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-17.16.0.tgz",
+ "integrity": "sha512-ejlWnbJ13x1GU32+zZXa6sYQJsKKkwSdv2B4rAdO3OWdEmvhSJKcXi5pOphQYSzyaj1kXpuGJr7pcMBNfDIuPw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/stylelint"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/stylelint"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@csstools/css-calc": "^3.3.0",
+ "@csstools/css-parser-algorithms": "^4.0.0",
+ "@csstools/css-syntax-patches-for-csstree": "^1.1.9",
+ "@csstools/css-tokenizer": "^4.0.0",
+ "@csstools/media-query-list-parser": "^5.0.0",
+ "@csstools/selector-resolve-nested": "^4.0.1",
+ "@csstools/selector-specificity": "^6.0.0",
+ "colord": "^2.10.0",
+ "cosmiconfig": "^9.0.2",
+ "css-functions-list": "^3.3.3",
+ "css-tree": "^3.2.1",
+ "debug": "^4.4.3",
+ "fast-glob": "^3.3.3",
+ "fastest-levenshtein": "^1.0.16",
+ "file-entry-cache": "^11.1.5",
+ "global-modules": "^2.0.0",
+ "globby": "^16.2.4",
+ "globjoin": "^0.1.4",
+ "html-tags": "^5.1.0",
+ "ignore": "^7.0.6",
+ "import-meta-resolve": "^4.2.0",
+ "mathml-tag-names": "^4.0.0",
+ "meow": "^14.1.0",
+ "micromatch": "^4.0.8",
+ "normalize-path": "^3.0.0",
+ "picocolors": "^1.1.1",
+ "postcss": "^8.5.26",
+ "postcss-safe-parser": "^7.0.1",
+ "postcss-selector-parser": "^7.1.5",
+ "postcss-value-parser": "^4.2.0",
+ "string-width": "^8.2.2",
+ "supports-hyperlinks": "^4.5.0",
+ "svg-tags": "^1.0.0",
+ "table": "^6.9.0",
+ "write-file-atomic": "^7.0.1"
+ },
+ "bin": {
+ "stylelint": "bin/stylelint.mjs"
+ },
+ "engines": {
+ "node": ">=20.19.0"
+ }
+ },
+ "node_modules/stylelint-config-recommended": {
+ "version": "18.0.0",
+ "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-18.0.0.tgz",
+ "integrity": "sha512-mxgT2XY6YZ3HWWe3Di8umG6aBmWmHTblTgu/f10rqFXnyWxjKWwNdjSWkgkwCtxIKnqjSJzvFmPT5yabVIRxZg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/stylelint"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/stylelint"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=20.19.0"
+ },
+ "peerDependencies": {
+ "stylelint": "^17.0.0"
+ }
+ },
+ "node_modules/stylelint-config-recommended-scss": {
+ "version": "17.0.1",
+ "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-17.0.1.tgz",
+ "integrity": "sha512-x5DVehzJudcwF0od3sGpgkln2PLLranFE7twwbp7dqDINCyZvwzFkMc6TLhNOvazRiVBJYATQLouJY0xPGB8WA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "postcss-scss": "^4.0.9",
+ "stylelint-config-recommended": "^18.0.0",
+ "stylelint-scss": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=20"
+ },
+ "peerDependencies": {
+ "postcss": "^8.3.3",
+ "stylelint": "^17.0.0"
+ },
+ "peerDependenciesMeta": {
+ "postcss": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/stylelint-config-standard": {
+ "version": "40.0.0",
+ "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-40.0.0.tgz",
+ "integrity": "sha512-EznGJxOUhtWck2r6dJpbgAdPATIzvpLdK9+i5qPd4Lx70es66TkBPljSg4wN3Qnc6c4h2n+WbUrUynQ3fanjHw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/stylelint"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/stylelint"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "stylelint-config-recommended": "^18.0.0"
+ },
+ "engines": {
+ "node": ">=20.19.0"
+ },
+ "peerDependencies": {
+ "stylelint": "^17.0.0"
+ }
+ },
+ "node_modules/stylelint-config-standard-scss": {
+ "version": "17.0.0",
+ "resolved": "https://registry.npmjs.org/stylelint-config-standard-scss/-/stylelint-config-standard-scss-17.0.0.tgz",
+ "integrity": "sha512-uLJS6xgOCBw5EMsDW7Ukji8l28qRoMnkRch15s0qwZpskXvWt9oPzMmcYM307m9GN4MxuWLsQh4I6hU9yI53cQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "stylelint-config-recommended-scss": "^17.0.0",
+ "stylelint-config-standard": "^40.0.0"
+ },
+ "engines": {
+ "node": ">=20"
+ },
+ "peerDependencies": {
+ "postcss": "^8.3.3",
+ "stylelint": "^17.0.0"
+ },
+ "peerDependenciesMeta": {
+ "postcss": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/stylelint-scss": {
+ "version": "7.4.0",
+ "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-7.4.0.tgz",
+ "integrity": "sha512-OvN+AestcvtB/IFvde1kpFLq2mpIsPaeB8E+Cjlxu7qjf0ja7NCoTrDW97tuNeXFlYGUdwqGq5cXaByLpNwuxA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@csstools/css-calc": "^3.4.3",
+ "@csstools/css-parser-algorithms": "^4.0.0",
+ "@csstools/css-syntax-patches-for-csstree": "^1.1.15",
+ "@csstools/css-tokenizer": "^4.0.0",
+ "css-tree": "^3.2.1",
+ "is-plain-object": "^5.1.0",
+ "known-css-properties": "^0.37.0",
+ "postcss-media-query-parser": "^0.2.3",
+ "postcss-resolve-nested-selector": "^0.1.7",
+ "postcss-selector-parser": "^7.1.6",
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": ">=20.19.0"
+ },
+ "peerDependencies": {
+ "stylelint": "^16.8.2 || ^17.0.0"
+ }
+ },
+ "node_modules/stylelint/node_modules/cosmiconfig": {
+ "version": "9.0.2",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.2.tgz",
+ "integrity": "sha512-gtTZxTDau1wL7Y7zifc2dd8jHSK/k6BTx/2Xp/BpdlAdnlYWFVt7qhJqgwi7637yRwRQ3qL4ZidbB4I8tA5VOg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "env-paths": "^2.2.1",
+ "import-fresh": "^3.3.0",
+ "js-yaml": "^4.1.0",
+ "parse-json": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/d-fischer"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.9.5"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/stylelint/node_modules/ignore": {
+ "version": "7.0.14",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.14.tgz",
+ "integrity": "sha512-wCBiZ77u1tuWde6G/nfOtLaCTYcFDU5yCzARzK10y+rLhzYoL7a7yEemcopcc2Mzow7gZOIjnV2ym1NYmdiJOQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/stylis": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz",
+ "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==",
+ "license": "MIT"
+ },
+ "node_modules/suf-log": {
+ "version": "2.5.3",
+ "resolved": "https://registry.npmjs.org/suf-log/-/suf-log-2.5.3.tgz",
+ "integrity": "sha512-KvC8OPjzdNOe+xQ4XWJV2whQA0aM1kGVczMQ8+dStAO6KfEB140JEVQ9dE76ONZ0/Ylf67ni4tILPJB41U0eow==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "s.color": "0.0.15"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "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.6.0",
+ "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-4.6.0.tgz",
+ "integrity": "sha512-FL/q/YePS4tFFTNiBOR+zPk2ZrKheqNtmTJ/9OUZ4e1wKHJofDbGQSmSsxS0XNnabSkqexryCaXGvEKz1vf9UQ==",
+ "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/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/svg-tags": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz",
+ "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==",
+ "dev": true
+ },
+ "node_modules/svgo": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.1.0.tgz",
+ "integrity": "sha512-bkxnTg1kSU0guhIBmibA6UUhrQmPVA1XsQLN+ylCd+UWzbnLkySOcXpyk1mrl05f+pcaCx2eHb+sp6BgMZWX+Q==",
+ "license": "MIT",
+ "dependencies": {
+ "commander": "^11.1.0",
+ "css-select": "^6.0.0",
+ "css-tree": "^3.0.1",
+ "css-what": "^7.0.0",
+ "csso": "^5.0.5",
+ "picocolors": "^1.1.1",
+ "sax": "1.6.1"
+ },
+ "bin": {
+ "svgo": "bin/svgo.js"
+ },
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/svgo"
+ }
+ },
+ "node_modules/synckit": {
+ "version": "0.11.13",
+ "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.13.tgz",
+ "integrity": "sha512-eNRKgb3z66Yp3D2CixVujOUvXLFUTij/zVnV8KRyvFdQwpz7I5DS8UfRkTeLzb64u+dkzDSdelE24izu+zSSUg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@pkgr/core": "^0.3.6"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/synckit"
+ }
+ },
+ "node_modules/table": {
+ "version": "6.10.1",
+ "resolved": "https://registry.npmjs.org/table/-/table-6.10.1.tgz",
+ "integrity": "sha512-f05boz6UD5S70AJiUxqKOnDuE45mBIVagX490oQmcW38+Lq/H1s7CjIpFgJjR/kpV87L4lw/AN+14D2PktQJsQ==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "ajv": "^8.0.1",
+ "slice-ansi": "^4.0.0",
+ "string-width": "^4.2.3",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/table/node_modules/ajv": {
+ "version": "8.20.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz",
+ "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3",
+ "fast-uri": "^3.0.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/table/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/table/node_modules/json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/table/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/table/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/tiny-inflate": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz",
+ "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==",
+ "license": "MIT"
+ },
+ "node_modules/tinyclip": {
+ "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"
+ }
+ },
+ "node_modules/tinyexec": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.3.1.tgz",
+ "integrity": "sha512-GCvB3aoys96IuDFBMcTB46JOR6mdMtAToqwiW8JlWhsoh1mhHi/xn9ss/Dg7N555GiJyEt2qzoG/NHCwM6h1EA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tinyglobby": {
+ "version": "0.2.17",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz",
+ "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==",
+ "license": "MIT",
+ "dependencies": {
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.4"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/SuperchupuDev"
+ }
+ },
+ "node_modules/tinyps": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/tinyps/-/tinyps-0.5.2.tgz",
+ "integrity": "sha512-sYhvdbpuo2rGE7u/jPUMiZz4H2LCaOodUtRD9ot4DLNFQbr884g9zozoJnxLI+1r4hXqWkmdHUl8Yig2Rllxxw==",
+ "license": "MIT"
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/trim-lines": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz",
+ "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/trough": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz",
+ "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/ts-api-utils": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz",
+ "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18.12"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "2.9.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.9.1.tgz",
+ "integrity": "sha512-a4Ux9VKuIMHsOS7ENbEq6hK2ZGYIT27Rtl0E4eD9KqwxhKiQeMZE/9xb3IdYwWaSOyIBQLExhQgXDTYoiCxnWA==",
+ "devOptional": true,
+ "license": "0BSD"
+ },
+ "node_modules/type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "prelude-ls": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true,
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/typesafe-path": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/typesafe-path/-/typesafe-path-0.2.2.tgz",
+ "integrity": "sha512-OJabfkAg1WLZSqJAJ0Z6Sdt3utnbzr/jh+NAHoyWHJe8CMSy79Gm085094M9nvTPy22KzTVn5Zq5mbapCI/hPA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/typescript": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz",
+ "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/typescript-auto-import-cache": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/typescript-auto-import-cache/-/typescript-auto-import-cache-0.3.6.tgz",
+ "integrity": "sha512-RpuHXrknHdVdK7wv/8ug3Fr0WNsNi5l5aB8MYYuXhq2UH5lnEB1htJ1smhtD5VeCsGr2p8mUDtd83LCQDFVgjQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "semver": "^7.3.8"
+ }
+ },
+ "node_modules/typescript-eslint": {
+ "version": "8.72.2",
+ "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.72.2.tgz",
+ "integrity": "sha512-c/+AKMW1KB81r28Sp0AAdcyXj5dzNmAsZFcsrxKbZTKmcBK2xIwBR31dcSYSDu3bKmzXe8GKrSxO+eDQ401Uzg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/eslint-plugin": "8.72.2",
+ "@typescript-eslint/parser": "8.72.2",
+ "@typescript-eslint/typescript-estree": "8.72.2",
+ "@typescript-eslint/utils": "8.72.2"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
+ "typescript": ">=4.8.4 <6.1.0"
+ }
+ },
+ "node_modules/ufo": {
+ "version": "1.6.4",
+ "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.4.tgz",
+ "integrity": "sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==",
+ "license": "MIT"
+ },
+ "node_modules/ultrahtml": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/ultrahtml/-/ultrahtml-1.7.0.tgz",
+ "integrity": "sha512-2xRd0VHoAQE4M+vF/DvFFB7pUV0ZxTW1TLi7lHQWnF/Sb5TPeEUV/l+hxcNnGO00ZXGnR0voCMmYRKQf+rvJ2g==",
+ "license": "MIT"
+ },
+ "node_modules/uncrypto": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz",
+ "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==",
+ "license": "MIT"
+ },
+ "node_modules/undici": {
+ "version": "8.12.4",
+ "resolved": "https://registry.npmjs.org/undici/-/undici-8.12.4.tgz",
+ "integrity": "sha512-8Mx+uNKKER2bA4AdtedkqRbwUCIJFr2nJckXRe5yrDqzePqwLP7VNcctN8/XdmDSbF7mS+jJKIszlL+vbam1VA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=22.19.0"
+ }
+ },
+ "node_modules/undici-types": {
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.24.6.tgz",
+ "integrity": "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==",
+ "license": "MIT"
+ },
+ "node_modules/unicorn-magic": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.4.1.tgz",
+ "integrity": "sha512-lzlXPoVB0Uy/FvTaUgX39RbixYiSKoc3JSoSf01+0c2B6FR3qdYIPN7Qjo/AV7n6sqLCk0509cT3LRj1oSZ1+A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/unified": {
+ "version": "11.0.5",
+ "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz",
+ "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "bail": "^2.0.0",
+ "devlop": "^1.0.0",
+ "extend": "^3.0.0",
+ "is-plain-obj": "^4.0.0",
+ "trough": "^2.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unified-args": {
+ "version": "11.0.1",
+ "resolved": "https://registry.npmjs.org/unified-args/-/unified-args-11.0.1.tgz",
+ "integrity": "sha512-WEQghE91+0s3xPVs0YW6a5zUduNLjmANswX7YbBfksHNDGMjHxaWCql4SR7c9q0yov/XiIEdk6r/LqfPjaYGcw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/text-table": "^0.2.0",
+ "chalk": "^5.0.0",
+ "chokidar": "^3.0.0",
+ "comma-separated-tokens": "^2.0.0",
+ "json5": "^2.0.0",
+ "minimist": "^1.0.0",
+ "strip-ansi": "^7.0.0",
+ "text-table": "^0.2.0",
+ "unified-engine": "^11.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unified-args/node_modules/chokidar": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+ "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/unified-args/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/unified-args/node_modules/picomatch": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
+ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/unified-args/node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/unified-engine": {
+ "version": "11.2.2",
+ "resolved": "https://registry.npmjs.org/unified-engine/-/unified-engine-11.2.2.tgz",
+ "integrity": "sha512-15g/gWE7qQl9tQ3nAEbMd5h9HV1EACtFs6N9xaRBZICoCwnNGbal1kOs++ICf4aiTdItZxU2s/kYWhW7htlqJg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/concat-stream": "^2.0.0",
+ "@types/debug": "^4.0.0",
+ "@types/is-empty": "^1.0.0",
+ "@types/node": "^22.0.0",
+ "@types/unist": "^3.0.0",
+ "concat-stream": "^2.0.0",
+ "debug": "^4.0.0",
+ "extend": "^3.0.0",
+ "glob": "^10.0.0",
+ "ignore": "^6.0.0",
+ "is-empty": "^1.0.0",
+ "is-plain-obj": "^4.0.0",
+ "load-plugin": "^6.0.0",
+ "parse-json": "^7.0.0",
+ "trough": "^2.0.0",
+ "unist-util-inspect": "^8.0.0",
+ "vfile": "^6.0.0",
+ "vfile-message": "^4.0.0",
+ "vfile-reporter": "^8.0.0",
+ "vfile-statistics": "^3.0.0",
+ "yaml": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unified-engine/node_modules/@types/node": {
+ "version": "22.20.5",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.20.5.tgz",
+ "integrity": "sha512-U2+DNr+wSjpsTS/wZGYHq7GcwfuSmKiKvoPvK22zwTlRhU91yOniN4qRR5KhIjvif7ysw/dz/hKmfDH0Ris4aA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~6.21.0"
+ }
+ },
+ "node_modules/unified-engine/node_modules/ignore": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-6.0.2.tgz",
+ "integrity": "sha512-InwqeHHN2XpumIkMvpl/DCJVrAHgCsG5+cn1XlnLWGwtZBm8QJfSusItfrwx81CTp5agNZqpKU2J/ccC5nGT4A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/unified-engine/node_modules/json-parse-even-better-errors": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz",
+ "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ }
+ },
+ "node_modules/unified-engine/node_modules/lines-and-columns": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.4.tgz",
+ "integrity": "sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ }
+ },
+ "node_modules/unified-engine/node_modules/parse-json": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-7.1.1.tgz",
+ "integrity": "sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.21.4",
+ "error-ex": "^1.3.2",
+ "json-parse-even-better-errors": "^3.0.0",
+ "lines-and-columns": "^2.0.3",
+ "type-fest": "^3.8.0"
+ },
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/unified-engine/node_modules/type-fest": {
+ "version": "3.13.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz",
+ "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==",
+ "dev": true,
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/unified-engine/node_modules/undici-types": {
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
+ "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/unified-lint-rule": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.1.tgz",
+ "integrity": "sha512-HxIeQOmwL19DGsxHXbeyzKHBsoSCFO7UtRVUvT2v61ptw/G+GbysWcrpHdfs5jqbIFDA11MoKngIhQK0BeTVjA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "trough": "^2.0.0",
+ "unified": "^11.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unified-message-control": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/unified-message-control/-/unified-message-control-5.0.0.tgz",
+ "integrity": "sha512-B2cSAkpuMVVmPP90KCfKdBhm1e9KYJ+zK3x5BCa0N65zpq1Ybkc9C77+M5qwR8FWO7RF3LM5QRRPZtgjW6DUCw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "devlop": "^1.0.0",
+ "space-separated-tokens": "^2.0.0",
+ "unist-util-is": "^6.0.0",
+ "unist-util-visit": "^5.0.0",
+ "vfile": "^6.0.0",
+ "vfile-location": "^5.0.0",
+ "vfile-message": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unifont": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/unifont/-/unifont-1.0.3.tgz",
+ "integrity": "sha512-XGnEwj5sWdCbiBX01mWLSBncS0yMRjnLygau3IfdOlfjMacNIQvTGW4VH7pWBq+gGWArfSef/CensMLjMmIr/A==",
+ "license": "MIT",
+ "dependencies": {
+ "css-tree": "^3.1.0",
+ "fnv1a-64": "^0.1.2",
+ "std-env": "^4.2.0",
+ "undici": "^8.0.0"
+ }
+ },
+ "node_modules/unist-util-inspect": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/unist-util-inspect/-/unist-util-inspect-8.1.0.tgz",
+ "integrity": "sha512-mOlg8Mp33pR0eeFpo5d2902ojqFFOKMMG2hF8bmH7ZlhnmjFgh0NI3/ZDwdaBJNbvrS7LZFVrBVtIE9KZ9s7vQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.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",
+ "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-position": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz",
+ "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-stringify-position": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz",
+ "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-visit": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.2.0.tgz",
+ "integrity": "sha512-fpsYs/VVoZxfGY9/j3FQpZmN8wdLJaV1Pt38AaJNZu9uKIHcFU3halCdBveEq1HGKO1OEfJY65w1zvoFV1b3qQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-is": "^6.0.0",
+ "unist-util-visit-parents": "^6.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-visit-parents": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.1.0.tgz",
+ "integrity": "sha512-vKXxz6O38sKDj1mtx/k2cWvkkFBuYGx6uGrlzBkVeWCRF/F8sdI0j3Wbkz/5rVNRRuVc8UrgRdbCxNhmYXgP3w==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-is": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unstorage": {
+ "version": "1.17.6",
+ "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.17.6.tgz",
+ "integrity": "sha512-gjKtcmn/KwZuJZO9o2sc0esAQnhmTw0LviDHwevTXbJMYs0dRTp8ZEEWXHU0vTpzbN3cA0yxlTeyXssMp3zDqw==",
+ "license": "MIT",
+ "dependencies": {
+ "anymatch": "^3.1.3",
+ "chokidar": "^5.0.0",
+ "destr": "^2.0.5",
+ "h3": "^1.15.11",
+ "lru-cache": "^11.5.3",
+ "node-fetch-native": "^1.6.7",
+ "ofetch": "^1.5.1",
+ "ufo": "^1.6.4"
+ },
+ "peerDependencies": {
+ "@azure/app-configuration": "^1.8.0",
+ "@azure/cosmos": "^4.2.0",
+ "@azure/data-tables": "^13.3.0",
+ "@azure/identity": "^4.6.0",
+ "@azure/keyvault-secrets": "^4.9.0",
+ "@azure/storage-blob": "^12.26.0",
+ "@capacitor/preferences": "^6 || ^7 || ^8",
+ "@deno/kv": ">=0.9.0",
+ "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0 || ^11.0.0",
+ "@planetscale/database": "^1.19.0",
+ "@upstash/redis": "^1.34.3",
+ "@vercel/blob": ">=0.27.1",
+ "@vercel/functions": "^2.2.12 || ^3.0.0",
+ "@vercel/kv": "^1 || ^2 || ^3",
+ "aws4fetch": "^1.0.20",
+ "db0": ">=0.2.1",
+ "idb-keyval": "^6.2.1",
+ "ioredis": "^5.4.2",
+ "uploadthing": "^7.4.4"
+ },
+ "peerDependenciesMeta": {
+ "@azure/app-configuration": {
+ "optional": true
+ },
+ "@azure/cosmos": {
+ "optional": true
+ },
+ "@azure/data-tables": {
+ "optional": true
+ },
+ "@azure/identity": {
+ "optional": true
+ },
+ "@azure/keyvault-secrets": {
+ "optional": true
+ },
+ "@azure/storage-blob": {
+ "optional": true
+ },
+ "@capacitor/preferences": {
+ "optional": true
+ },
+ "@deno/kv": {
+ "optional": true
+ },
+ "@netlify/blobs": {
+ "optional": true
+ },
+ "@planetscale/database": {
+ "optional": true
+ },
+ "@upstash/redis": {
+ "optional": true
+ },
+ "@vercel/blob": {
+ "optional": true
+ },
+ "@vercel/functions": {
+ "optional": true
+ },
+ "@vercel/kv": {
+ "optional": true
+ },
+ "aws4fetch": {
+ "optional": true
+ },
+ "db0": {
+ "optional": true
+ },
+ "idb-keyval": {
+ "optional": true
+ },
+ "ioredis": {
+ "optional": true
+ },
+ "uploadthing": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/unstorage/node_modules/lru-cache": {
+ "version": "11.5.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.3.tgz",
+ "integrity": "sha512-U4N8FgzmWxc8k1VH8Kr6lQg18U7Fjvby6wXHVRX/ZZ7IwWbRMgrRbP0Wrb5q5NVinryp4SQampHKdvtecItxUg==",
+ "license": "BlueOak-1.0.0",
+ "engines": {
+ "node": "20 || >=22"
+ }
+ },
+ "node_modules/update-browserslist-db": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.4.tgz",
+ "integrity": "sha512-t8wonIOdQyOjtPd2VktlBu6QjTVTks6v8bSi7kd0r2Vll8TK1JYDZtRRdbmCHOAMphkZgrzK+L+vXK4pyZ8t4A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "escalade": "^3.2.0",
+ "picocolors": "^1.1.1"
+ },
+ "bin": {
+ "update-browserslist-db": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
+ }
+ },
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/use-isomorphic-layout-effect": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.2.1.tgz",
+ "integrity": "sha512-tpZZ+EX0gaghDAiFR37hj5MgY6ZN55kLiPkJsKxBMZ6GZdOSPJXiOzPM984oPYZ5AnehYx5WQp1+ME8I/P/pRA==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/utf8": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz",
+ "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "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==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/validate-npm-package-license": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "node_modules/validate-npm-package-name": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz",
+ "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ }
+ },
+ "node_modules/verkit": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/verkit/-/verkit-0.5.0.tgz",
+ "integrity": "sha512-u4J1hr6Y+C/hit34GwL3eIcUf3wngT8TlYUjK7tk0jxydKLAq3sYvifjdTDA6U3KCKRcQCQDGf/srjxfZF3l7g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18.12.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sxzz"
+ }
+ },
+ "node_modules/vfile": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz",
+ "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "vfile-message": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/vfile-location": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.4.tgz",
+ "integrity": "sha512-vEvxatYZCIpNvzGk2UD+u4I/sZkSKoOsdRCbkOIsN73QpJbriJ1qvvBAL1PeI0y55Leoqf7pORbaSPpG/smmOg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/vfile-message": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.4.tgz",
+ "integrity": "sha512-66ycRswIkNmHH9PHku7ADtv5RVwgIrOcuv3J8Svz6h4qgGRrKVa+9/neuKyJZUXyOpYwLTvS+whZ4R2urHHgQg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-stringify-position": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/vfile-reporter": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/vfile-reporter/-/vfile-reporter-8.1.1.tgz",
+ "integrity": "sha512-qxRZcnFSQt6pWKn3PAk81yLK2rO2i7CDXpy8v8ZquiEOMLSnPw6BMSi9Y1sUCwGGl7a9b3CJT1CKpnRF7pp66g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/supports-color": "^8.0.0",
+ "string-width": "^6.0.0",
+ "supports-color": "^9.0.0",
+ "unist-util-stringify-position": "^4.0.0",
+ "vfile": "^6.0.0",
+ "vfile-message": "^4.0.0",
+ "vfile-sort": "^4.0.0",
+ "vfile-statistics": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/vfile-reporter/node_modules/emoji-regex": {
+ "version": "10.6.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz",
+ "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/vfile-reporter/node_modules/string-width": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-6.1.0.tgz",
+ "integrity": "sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "eastasianwidth": "^0.2.0",
+ "emoji-regex": "^10.2.1",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/vfile-reporter/node_modules/supports-color": {
+ "version": "9.4.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz",
+ "integrity": "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
+ "node_modules/vfile-sort": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/vfile-sort/-/vfile-sort-4.0.0.tgz",
+ "integrity": "sha512-lffPI1JrbHDTToJwcq0rl6rBmkjQmMuXkAxsZPRS9DXbaJQvc642eCg6EGxcX2i1L+esbuhq+2l9tBll5v8AeQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "vfile": "^6.0.0",
+ "vfile-message": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/vfile-statistics": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/vfile-statistics/-/vfile-statistics-3.0.0.tgz",
+ "integrity": "sha512-/qlwqwWBWFOmpXujL/20P+Iuydil0rZZNglR+VNm6J0gpLHwuVM5s7g2TfVoswbXjZ4HuIhLMySEyIw5i7/D8w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "vfile": "^6.0.0",
+ "vfile-message": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/vite": {
+ "version": "8.3.7",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-8.3.7.tgz",
+ "integrity": "sha512-oxh0dMxrayBr33ScJvvBJ2HBQ2jc1TBrXKR2NyL/MJ9WPuX19mN2DXWUmywKdyw5RFVQBo8hmtb2FMC0LHrnng==",
+ "license": "MIT",
+ "dependencies": {
+ "lightningcss": "^1.33.0",
+ "picomatch": "^4.0.7",
+ "postcss": "^8.5.32",
+ "rolldown": "~1.2.18",
+ "tinyglobby": "^0.2.17"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ },
+ "funding": {
+ "url": "https://github.com/vitejs/vite?sponsor=1"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
+ },
+ "peerDependencies": {
+ "@types/node": "^20.19.0 || >=22.12.0",
+ "@vitejs/devtools": "^0.7.1 || ^0.8.0",
+ "esbuild": "^0.27.0 || ^0.28.0",
+ "jiti": ">=1.21.0",
+ "less": "^4.0.0",
+ "sass": "^1.70.0",
+ "sass-embedded": "^1.70.0",
+ "stylus": ">=0.54.8",
+ "sugarss": "^5.0.0",
+ "terser": "^5.16.0",
+ "tsx": "^4.8.1",
+ "yaml": "^2.4.2"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "@vitejs/devtools": {
+ "optional": true
+ },
+ "esbuild": {
+ "optional": true
+ },
+ "jiti": {
+ "optional": true
+ },
+ "less": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "sass-embedded": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "sugarss": {
+ "optional": true
+ },
+ "terser": {
+ "optional": true
+ },
+ "tsx": {
+ "optional": true
+ },
+ "yaml": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vitefu": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.3.tgz",
+ "integrity": "sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg==",
+ "license": "MIT",
+ "workspaces": [
+ "tests/deps/*",
+ "tests/projects/*",
+ "tests/projects/workspace/packages/*"
+ ],
+ "peerDependencies": {
+ "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "vite": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/volar-service-css": {
+ "version": "0.0.71",
+ "resolved": "https://registry.npmjs.org/volar-service-css/-/volar-service-css-0.0.71.tgz",
+ "integrity": "sha512-wRRFt9BpjMKCazcgOh67MSjUjiWUCAh99DyYSDIOTuxaRjEtDC7PpB0k1Y1wbJIW/pVtMUSVbpPo3UGSm0Byxw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "vscode-css-languageservice": "^6.3.0",
+ "vscode-languageserver-textdocument": "^1.0.11",
+ "vscode-uri": "^3.0.8"
+ },
+ "peerDependencies": {
+ "@volar/language-service": "~2.4.0"
+ },
+ "peerDependenciesMeta": {
+ "@volar/language-service": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/volar-service-emmet": {
+ "version": "0.0.71",
+ "resolved": "https://registry.npmjs.org/volar-service-emmet/-/volar-service-emmet-0.0.71.tgz",
+ "integrity": "sha512-zqjzt6bN95e3CUstBm0PBFAJnrfz0ZAARka87fart46/gNCLLuP3Vujy8V/J8HEziTFLnfkgIASLFYPUhonJcA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@emmetio/css-parser": "^0.4.1",
+ "@emmetio/html-matcher": "^1.3.0",
+ "@vscode/emmet-helper": "^2.9.3",
+ "vscode-uri": "^3.0.8"
+ },
+ "peerDependencies": {
+ "@volar/language-service": "~2.4.0"
+ },
+ "peerDependenciesMeta": {
+ "@volar/language-service": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/volar-service-html": {
+ "version": "0.0.71",
+ "resolved": "https://registry.npmjs.org/volar-service-html/-/volar-service-html-0.0.71.tgz",
+ "integrity": "sha512-e8tHPhgQ7ooLfudAEIku+kgd9pWkq3SSz8RbnQDI1+Eb8wbenkLGHqoirLqz5ORLV6wIMr2Iv08RWBG5eOcgpw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "vscode-html-languageservice": "^5.3.0",
+ "vscode-languageserver-textdocument": "^1.0.11",
+ "vscode-uri": "^3.0.8"
+ },
+ "peerDependencies": {
+ "@volar/language-service": "~2.4.0"
+ },
+ "peerDependenciesMeta": {
+ "@volar/language-service": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/volar-service-prettier": {
+ "version": "0.0.71",
+ "resolved": "https://registry.npmjs.org/volar-service-prettier/-/volar-service-prettier-0.0.71.tgz",
+ "integrity": "sha512-Rz7JVH3qD108UCdmIEiZvOBNljMt2nLFdbN8AXcDfn7xD9F5I2aCIsDVqBbXw21PsnxG0b7MfwtNF+zPS/NKUg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "vscode-uri": "^3.0.8"
+ },
+ "peerDependencies": {
+ "@volar/language-service": "~2.4.0",
+ "prettier": "^2.2 || ^3.0"
+ },
+ "peerDependenciesMeta": {
+ "@volar/language-service": {
+ "optional": true
+ },
+ "prettier": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/volar-service-typescript": {
+ "version": "0.0.71",
+ "resolved": "https://registry.npmjs.org/volar-service-typescript/-/volar-service-typescript-0.0.71.tgz",
+ "integrity": "sha512-yTtM/BVT6hoyEYnDtaCyAtNhdNeS/mhTTABlBOdw3NNiRBUin3IznFJpgfjer4c6RYopiPjjQjc9VFhxVl1mLw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "path-browserify": "^1.0.1",
+ "semver": "^7.6.2",
+ "typescript-auto-import-cache": "^0.3.5",
+ "vscode-languageserver-textdocument": "^1.0.11",
+ "vscode-nls": "^5.2.0",
+ "vscode-uri": "^3.0.8"
+ },
+ "peerDependencies": {
+ "@volar/language-service": "~2.4.0"
+ },
+ "peerDependenciesMeta": {
+ "@volar/language-service": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/volar-service-typescript-twoslash-queries": {
+ "version": "0.0.71",
+ "resolved": "https://registry.npmjs.org/volar-service-typescript-twoslash-queries/-/volar-service-typescript-twoslash-queries-0.0.71.tgz",
+ "integrity": "sha512-9K2k72s4n7rV9s4bX0MyjbX9iBribvKZbBJKuEmTCZfeWJXs6Yh7bGpY4eoc7UufAjvpheBqwyZCOIPBvxCv0A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "vscode-uri": "^3.0.8"
+ },
+ "peerDependencies": {
+ "@volar/language-service": "~2.4.0"
+ },
+ "peerDependenciesMeta": {
+ "@volar/language-service": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/volar-service-yaml": {
+ "version": "0.0.71",
+ "resolved": "https://registry.npmjs.org/volar-service-yaml/-/volar-service-yaml-0.0.71.tgz",
+ "integrity": "sha512-qYGWGuVpUTnZGu5P/CR4KLK4aIR8RrcVnmfZ2eRcj9q/I8VZCoC5yy9FtEvfNvnDp4MU17yhdJcvpQPIqhJS2Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "vscode-uri": "^3.0.8",
+ "yaml-language-server": "~1.23.0"
+ },
+ "peerDependencies": {
+ "@volar/language-service": "~2.4.0"
+ },
+ "peerDependenciesMeta": {
+ "@volar/language-service": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vscode-css-languageservice": {
+ "version": "6.3.10",
+ "resolved": "https://registry.npmjs.org/vscode-css-languageservice/-/vscode-css-languageservice-6.3.10.tgz",
+ "integrity": "sha512-eq5N9Er3fC4vA9zd9EFhyBG90wtCCuXgRSpAndaOgXMh1Wgep5lBgRIeDgjZBW9pa+332yC9+49cZMW8jcL3MA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vscode/l10n": "^0.0.18",
+ "vscode-languageserver-textdocument": "^1.0.12",
+ "vscode-languageserver-types": "3.17.5",
+ "vscode-uri": "^3.1.0"
+ }
+ },
+ "node_modules/vscode-css-languageservice/node_modules/vscode-languageserver-types": {
+ "version": "3.17.5",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz",
+ "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/vscode-html-languageservice": {
+ "version": "5.6.2",
+ "resolved": "https://registry.npmjs.org/vscode-html-languageservice/-/vscode-html-languageservice-5.6.2.tgz",
+ "integrity": "sha512-ulCrSnFnfQ16YzvwnYUgEbUEl/ZG7u2eV27YhvLObSHKkb8fw1Z9cgsnUwjTEeDIdJDoTDTDpxuhQwoenoLNMg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vscode/l10n": "^0.0.18",
+ "vscode-languageserver-textdocument": "^1.0.12",
+ "vscode-languageserver-types": "^3.17.5",
+ "vscode-uri": "^3.1.0"
+ }
+ },
+ "node_modules/vscode-json-languageservice": {
+ "version": "4.1.8",
+ "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.1.8.tgz",
+ "integrity": "sha512-0vSpg6Xd9hfV+eZAaYN63xVVMOTmJ4GgHxXnkLCh+9RsQBkWKIghzLhW2B9ebfG+LQQg8uLtsQ2aUKjTgE+QOg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "jsonc-parser": "^3.0.0",
+ "vscode-languageserver-textdocument": "^1.0.1",
+ "vscode-languageserver-types": "^3.16.0",
+ "vscode-nls": "^5.0.0",
+ "vscode-uri": "^3.0.2"
+ },
+ "engines": {
+ "npm": ">=7.0.0"
+ }
+ },
+ "node_modules/vscode-jsonrpc": {
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-10.0.0.tgz",
+ "integrity": "sha512-USSfxg0vDIpTQqlQBGxF3mBARyoS8cU7LHLpbYNh6dOJt32dlskxPWB0Irrh5TllTmyf7oNLAvqDqzklbwwnpA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.17.0"
+ }
+ },
+ "node_modules/vscode-languageserver": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-9.0.1.tgz",
+ "integrity": "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "vscode-languageserver-protocol": "3.17.5"
+ },
+ "bin": {
+ "installServerIntoExtension": "bin/installServerIntoExtension"
+ }
+ },
+ "node_modules/vscode-languageserver-protocol": {
+ "version": "3.18.5",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.18.5.tgz",
+ "integrity": "sha512-FW4fBMzZ99N8xeob4py0l050wgCoRgTpEq5Xcsb9lM1bc29UKGR/wSV+4knaqFxssFHajy7OzNiKP/m3U1ZEuA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "vscode-jsonrpc": "10.0.0",
+ "vscode-languageserver-types": "3.18.5"
+ }
+ },
+ "node_modules/vscode-languageserver-textdocument": {
+ "version": "1.0.16",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.16.tgz",
+ "integrity": "sha512-qeNEuOi9a3qkqRf7Gfez2WL2VwlBTLCNekHBGO9kxPVUp9XuY15yfTJ9jwvOwKI0I2MhUUfZq95NSp+LK1CLQg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/vscode-languageserver-types": {
+ "version": "3.18.5",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.18.5.tgz",
+ "integrity": "sha512-kPd6+JQNz3HMJvjKlqUxERSlZHAntl/aGpsk7ImwIh0ewDKDcjgAEyVSYciPiOJD3ftbK9IrfiqUeTZLSbCizw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/vscode-languageserver/node_modules/vscode-jsonrpc": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz",
+ "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/vscode-languageserver/node_modules/vscode-languageserver-protocol": {
+ "version": "3.17.5",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz",
+ "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "vscode-jsonrpc": "8.2.0",
+ "vscode-languageserver-types": "3.17.5"
+ }
+ },
+ "node_modules/vscode-languageserver/node_modules/vscode-languageserver-types": {
+ "version": "3.17.5",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz",
+ "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/vscode-nls": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.2.0.tgz",
+ "integrity": "sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/vscode-uri": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.2.0.tgz",
+ "integrity": "sha512-m2gXo3bn0G1kT9InzMf07fTbqMbGtyckj3bH5ktLO+1Ssv+yiATZ4dhwaQv9UZWxJh6E9IFGnQyjgWVDWVBDrg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/walk-up-path": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-3.0.1.tgz",
+ "integrity": "sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/word-wrap": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
+ "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/wrap-ansi": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+ "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^6.1.0",
+ "string-width": "^5.0.1",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi-cjs": {
+ "name": "wrap-ansi",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/ansi-styles": {
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz",
+ "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/wrap-ansi/node_modules/string-width": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "eastasianwidth": "^0.2.0",
+ "emoji-regex": "^9.2.2",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/write-file-atomic": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-7.0.1.tgz",
+ "integrity": "sha512-OTIk8iR8/aCRWBqvxrzxR0hgxWpnYBblY1S5hDWBQfk/VFmJwzmJgQFN3WsoUKHISv2eAwe+PpbUzyL1CKTLXg==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "signal-exit": "^4.0.1"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/xxhash-wasm": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.1.0.tgz",
+ "integrity": "sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==",
+ "license": "MIT"
+ },
+ "node_modules/y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/yaml": {
+ "version": "2.9.1",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.1.tgz",
+ "integrity": "sha512-3NxN8+78OdzbT7C/WjGsyfPAtJaN3FNDsWxv7Y7mcDsT/oOmgW8BpyQQFFBnvZE3j9Y2Sdz1ULFLezL7Eb2yFw==",
+ "license": "ISC",
+ "bin": {
+ "yaml": "bin.mjs"
+ },
+ "engines": {
+ "node": ">= 14.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/eemeli"
+ }
+ },
+ "node_modules/yaml-language-server": {
+ "version": "1.23.0",
+ "resolved": "https://registry.npmjs.org/yaml-language-server/-/yaml-language-server-1.23.0.tgz",
+ "integrity": "sha512-3qVyCOexLCWw06PQa5kRPwvMWMZ/eZeCRWUvgD6a0OkqL/4iCnxy2WumbWifa937Uo5xhyWJ0uxlU39ljhNh7A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vscode/l10n": "^0.0.18",
+ "ajv": "^8.17.1",
+ "ajv-draft-04": "^1.0.0",
+ "ajv-i18n": "^4.2.0",
+ "prettier": "^3.8.1",
+ "request-light": "^0.5.7",
+ "vscode-json-languageservice": "4.1.8",
+ "vscode-languageserver": "^9.0.0",
+ "vscode-languageserver-textdocument": "^1.0.1",
+ "vscode-languageserver-types": "^3.16.0",
+ "vscode-uri": "^3.0.2",
+ "yaml": "2.8.3"
+ },
+ "bin": {
+ "yaml-language-server": "bin/yaml-language-server"
+ }
+ },
+ "node_modules/yaml-language-server/node_modules/ajv": {
+ "version": "8.20.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz",
+ "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3",
+ "fast-uri": "^3.0.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/yaml-language-server/node_modules/ajv-draft-04": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz",
+ "integrity": "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "ajv": "^8.5.0"
+ },
+ "peerDependenciesMeta": {
+ "ajv": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/yaml-language-server/node_modules/ajv-i18n": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/ajv-i18n/-/ajv-i18n-4.2.0.tgz",
+ "integrity": "sha512-v/ei2UkCEeuKNXh8RToiFsUclmU+G57LO1Oo22OagNMENIw+Yb8eMwvHu7Vn9fmkjJyv6XclhJ8TbuigSglPkg==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "ajv": "^8.0.0-beta.0"
+ }
+ },
+ "node_modules/yaml-language-server/node_modules/json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/yaml-language-server/node_modules/request-light": {
+ "version": "0.5.8",
+ "resolved": "https://registry.npmjs.org/request-light/-/request-light-0.5.8.tgz",
+ "integrity": "sha512-3Zjgh+8b5fhRJBQZoy+zbVKpAQGLyka0MPgW3zruTF4dFFJ8Fqcfu9YsAvi/rvdcaTeWG3MkbZv4WKxAn/84Lg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/yaml-language-server/node_modules/yaml": {
+ "version": "2.8.3",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.3.tgz",
+ "integrity": "sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "yaml": "bin.mjs"
+ },
+ "engines": {
+ "node": ">= 14.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/eemeli"
+ }
+ },
+ "node_modules/yargs": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.2.0.tgz",
+ "integrity": "sha512-9OpKOLeaoNFecEp7P6iYbzze/5CqWoH7N3SMs/6y1XF4nMvFMspEGZzJ6uFi9MmQwXhyzqYoSEKO3tvA3Z/o2w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cliui": "^9.0.1",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "string-width": "^8.2.1",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^22.0.0"
+ },
+ "engines": {
+ "node": "^20.19.0 || ^22.12.0 || >=23"
+ }
+ },
+ "node_modules/yargs-parser": {
+ "version": "22.0.0",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz",
+ "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": "^20.19.0 || ^22.12.0 || >=23"
+ }
+ },
+ "node_modules/yocto-queue": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz",
+ "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/zod": {
+ "version": "4.6.7",
+ "resolved": "https://registry.npmjs.org/zod/-/zod-4.6.7.tgz",
+ "integrity": "sha512-g8W2D2kU6a8untc053fX1uVBKzM7yqAxW/3zwk83+6RyF2+SKOuV+c0wBDhUwzV1PaGapmZH+rmcUzPf+3CGwg==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/colinhacks"
+ }
+ },
+ "node_modules/zod-validation-error": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-4.0.2.tgz",
+ "integrity": "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "peerDependencies": {
+ "zod": "^3.25.0 || ^4.0.0"
+ }
+ },
+ "node_modules/zwitch": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz",
+ "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
index b46c7a63..8b5cae22 100644
--- a/package.json
+++ b/package.json
@@ -1,97 +1,64 @@
{
"name": "terasology-web-presence",
"description": "Web Presence of Terasology - a Voxel Engine and Game",
- "version": "1.1.0",
- "private": "true",
- "workspaces": [
- ".",
- "plugins/source-terasology-modules",
- "plugins/source-terasology-engine"
- ],
+ "version": "2.0.0",
+ "private": true,
+ "type": "module",
"author": "The Terasology Foundation",
+ "license": "MIT",
+ "keywords": [
+ "astro"
+ ],
+ "engines": {
+ "node": ">=24"
+ },
+ "scripts": {
+ "dev": "astro dev",
+ "build": "astro build",
+ "preview": "astro preview",
+ "check": "astro check",
+ "clean": "rm -rf dist .astro node_modules/.astro",
+ "astro": "astro",
+ "format:check": "prettier . --check",
+ "format": "prettier . --write",
+ "lint:js": "eslint .",
+ "lint:css": "stylelint \"src/**/*.{css,scss}\"",
+ "lint:md": "remark blog/ docs/ --quiet"
+ },
"dependencies": {
- "@reach/router": "^1.3.4",
- "bootstrap": "^4.3.1",
- "canvas": "^2.8.0",
- "gatsby": "^5.9.1",
- "gatsby-plugin-catch-links": "^5.3.0",
- "gatsby-plugin-image": "^3.3.2",
- "gatsby-plugin-manifest": "^5.3.1",
- "gatsby-plugin-nprogress": "^5.3.0",
- "gatsby-plugin-offline": "^6.3.1",
- "gatsby-plugin-sass": "^6.3.1",
- "gatsby-plugin-sharp": "^5.8.1",
- "gatsby-plugin-sitemap": "^6.3.1",
- "gatsby-plugin-twitter": "^5.3.1",
- "gatsby-remark-autolink-headers": "^6.3.1",
- "gatsby-remark-copy-linked-files": "^6.3.0",
- "gatsby-remark-images": "^7.3.1",
- "gatsby-remark-prismjs": "^7.3.0",
- "gatsby-source-filesystem": "^5.3.1",
- "gatsby-source-trello-board": "https://github.com/skaldarnar/gatsby-source-trello-board/#v2.0.0-rc.3",
- "gatsby-transformer-remark": "^6.3.2",
- "gatsby-transformer-sharp": "^5.3.1",
- "html-react-parser": "^1.2.7",
- "js-search": "^2.0.0",
+ "@astrojs/react": "^7.1.5",
+ "@astrojs/sitemap": "^3.7.4",
+ "@popperjs/core": "^2.11.8",
+ "astro": "^7.4.8",
+ "bootstrap": "^5.3.8",
+ "js-search": "^2.0.1",
"lodash.kebabcase": "^4.1.1",
- "moment": "^2.29.2",
- "moment-timezone": "^0.5.33",
- "prismjs": "^1.16.0",
- "react": "^18.0.0",
- "react-dom": "^18.0.0",
- "react-github-corner": "^2.5.0",
- "react-icons": "^3.7.0",
- "react-multi-carousel": "^2.6.3",
- "react-select": "^5.7.0",
- "react-share": "^4.4.0",
- "react-twitter-widgets": "^1.7.1",
- "reactstrap": "^8.0.0",
- "remarkable": "^2.0.1",
- "slugify": "^1.6.5",
- "url-join": "^4.0.0"
+ "react": "^19.3.1",
+ "react-dom": "^19.3.1",
+ "react-icons": "^5.7.0",
+ "react-select": "^5.10.2",
+ "sharp": "^0.35.5",
+ "slugify": "^1.6.9"
},
"devDependencies": {
- "@microsoft/eslint-formatter-sarif": "^3.0.0",
- "cli-glob": "^0.1.0",
- "eslint": "^8.30.0",
- "eslint-config-airbnb": "^19.0.4",
- "eslint-config-prettier": "^8.5.0",
- "eslint-plugin-import": "^2.26.0",
- "eslint-plugin-jsx-a11y": "^6.6.1",
- "eslint-plugin-react": "^7.31.11",
- "eslint-plugin-react-hooks": "^4.6.0",
- "gatsby-cli": "^5.0.0",
- "postcss": "^8.4.31",
- "postcss-scss": "^4.0.6",
- "prettier": "^2.8.1",
- "remark-cli": "^11.0.0",
- "remark-preset-lint-recommended": "^6.1.2",
- "sass": "^1.52.3",
- "stylelint": "^14.0.0",
- "stylelint-config-prettier": "^9.0.4",
- "stylelint-config-standard-scss": "^6.1.0"
- },
- "engines": {
- "node": "^18.0.0"
- },
- "keywords": [
- "gatsby"
- ],
- "license": "MIT",
- "main": "n/a",
- "scripts": {
- "build:pp": "set NODE_OPTIONS=--no-experimental-fetch && gatsby build --prefix-paths",
- "build": "set NODE_OPTIONS=--no-experimental-fetch && gatsby build",
- "clean": "gatsby clean && rm -r src/generated",
- "develop": "set NODE_OPTIONS=--no-experimental-fetch && gatsby develop",
- "format-check:js": "prettier '**/*.{js,jsx}' --check --ignore-path=.eslintignore",
- "format:js": "prettier '**/*.{js,jsx}' --write --ignore-path=.eslintignore",
- "generate-images": "node ./scripts/image-generation.js",
- "lint:css": "stylelint --ignore-path --ignore-path=.eslintignore '**/*.{css,scss}'",
- "lint:js": "eslint --ext .js,.jsx .",
- "lint:md": "remark blog/ docs/",
- "serve:pp": "gatsby serve --prefix-paths",
- "serve": "gatsby serve"
+ "@astrojs/check": "^0.9.12",
+ "@eslint/js": "^10.0.1",
+ "@microsoft/eslint-formatter-sarif": "^3.1.0",
+ "@types/react": "^19.3.0",
+ "@types/react-dom": "^19.3.0",
+ "eslint": "^10.14.0",
+ "eslint-plugin-astro": "^3.2.1",
+ "eslint-plugin-react-hooks": "^7.1.1",
+ "globals": "^17.14.0",
+ "prettier": "^3.9.10",
+ "prettier-plugin-astro": "^1.1.2",
+ "remark-cli": "^12.0.1",
+ "remark-preset-lint-recommended": "^7.0.1",
+ "sass": "^1.108.1",
+ "stylelint": "^17.16.0",
+ "stylelint-config-standard-scss": "^17.0.0",
+ "typescript": "^6.0.3",
+ "typescript-eslint": "^8.72.2"
},
"remarkConfig": {
"plugins": [
diff --git a/plugins/source-terasology-engine/README.md b/plugins/source-terasology-engine/README.md
deleted file mode 100644
index ed2252c5..00000000
--- a/plugins/source-terasology-engine/README.md
+++ /dev/null
@@ -1,51 +0,0 @@
-# source-terasology-engine
-
-Custom [Gatsby Source Plugin](https://www.gatsbyjs.com/docs/how-to/plugins-and-themes/creating-a-source-plugin/) to fetch enriched information for the [Terasology Engine](https://github.com/MovingBlocks/Terasology) from GitHub.
-
-## Install
-
-This is a local plugin that is automatically loaded from the `plugins/` folder.
-
-## Configuration
-
-```js
-// in gatsby-config.js
-module.exports = {
- plugins: [
- //...
- {
- resolve: "source-terasology-engine",
- options: {
- accessToken: ``
- }
- }
- ]
-}
-```
-
-Use [Environment Variables](https://www.gatsbyjs.com/docs/how-to/local-development/environment-variables/) to avoid exposing secrets.
-
-## Usage
-
-```graphql
-query Engine {
- allTerasologyEngine {
- issues{
- nodes {
- id
- title
- author {
- login
- }
- labels {
- nodes {
- name
- }
- }
- updatedAt
- url
- }
- }
- }
-}
-```
diff --git a/plugins/source-terasology-engine/gatsby-node.js b/plugins/source-terasology-engine/gatsby-node.js
deleted file mode 100644
index 0266121c..00000000
--- a/plugins/source-terasology-engine/gatsby-node.js
+++ /dev/null
@@ -1,103 +0,0 @@
-const { graphql } = require("@octokit/graphql");
-const { DateTime } = require("luxon");
-const fs = require("fs");
-
-const PLUGIN_NAME = "source-terasology-engine";
-
-const query = `
-query Engine {
- organization(login: "MovingBlocks") {
- repository(name: "Terasology") {
- issues(first: 10, filterBy: {labels: "Good First Issue", states: OPEN}, orderBy: {field: UPDATED_AT, direction: DESC}) {
- nodes {
- id
- title
- author {
- login
- }
- labels(first: 10) {
- nodes {
- name
- }
- }
- updatedAt
- url
- }
- }
- }
- }
-}
-`;
-
-exports.onPreInit = ({ reporter }) =>
- reporter.verbose("Loaded source-terasology-engine");
-
-exports.sourceNodes = async (
- {
- actions: { createNode },
- createContentDigest,
- createNodeId,
- reporter,
- cache,
- },
- { accessToken }
-) => {
- const gql = graphql.defaults({
- headers: {
- authorization: `token ${accessToken}`,
- },
- });
-
- const lastFetchedKey = "terasology-engine-last-fetched";
- const dataKey = "terasology-engine-data";
-
- const now = DateTime.utc();
- const lastFetched = DateTime.fromISO(await cache.get(lastFetchedKey), {
- zone: "utc",
- });
-
- let engine = {};
-
- // Temporary hack to avoid fetching data from GitHub during local testing.
- // Un-/comment as needed after changing the query.
- if (fs.existsSync(`${__dirname}/data.json`)) {
- // engine = JSON.parse(fs.readFileSync(`${__dirname}/data.json`));
- }
-
- if (lastFetched.plus({ hours: 12 }) > now) {
- reporter.info(
- `[${PLUGIN_NAME}] Loading Terasology engine info from cache ...`
- );
- engine = JSON.parse(await cache.get(dataKey));
- } else {
- reporter.info(
- `[${PLUGIN_NAME}] Fetching Terasology engine info from GitHub ...`
- );
-
- const { organization } = await gql(query);
- engine = organization.repository;
-
- await cache.set(dataKey, JSON.stringify(engine));
- await cache.set(lastFetchedKey, now.toISO());
-
- fs.writeFileSync(`${__dirname}/data.json`, JSON.stringify(engine, null, 2));
- }
-
- reporter.success(`[${PLUGIN_NAME}] Loaded Terasology engine info.`);
-
- const node = {
- id: createNodeId(`TerasologyEngine`),
- issues: engine.issues,
- parent: "__SOURCE__",
- children: [],
- internal: {
- type: "TerasologyEngine",
- },
- };
-
- node.internal.contentDigest = createContentDigest(node);
-
- createNode(node);
-
- reporter.success(`[${PLUGIN_NAME}] Created node for Terasology engine.`);
-};
diff --git a/plugins/source-terasology-engine/index.js b/plugins/source-terasology-engine/index.js
deleted file mode 100644
index 172f1ae6..00000000
--- a/plugins/source-terasology-engine/index.js
+++ /dev/null
@@ -1 +0,0 @@
-// noop
diff --git a/plugins/source-terasology-engine/package.json b/plugins/source-terasology-engine/package.json
deleted file mode 100644
index 148f64c3..00000000
--- a/plugins/source-terasology-engine/package.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "name": "source-terasology-engine",
- "version": "0.0.1",
- "private": true,
- "description": "A Gatsby source plugin to fetch Terasology engine information.",
- "main": "index.js",
- "scripts": {
- "test": "echo \"Error: no test specified\" && exit 1",
- "build": "echo \"No build script setup\""
- },
- "keywords": [
- "gatsby",
- "gatsby-plugin"
- ],
- "author": "The Terasology Foundation ",
- "dependencies": {
- "@octokit/graphql": "^5.0.4",
- "gatsby-source-filesystem": "^5.3.1",
- "luxon": "^3.2.0"
- }
-}
diff --git a/plugins/source-terasology-modules/README.md b/plugins/source-terasology-modules/README.md
deleted file mode 100644
index 3607ea95..00000000
--- a/plugins/source-terasology-modules/README.md
+++ /dev/null
@@ -1,80 +0,0 @@
-# source-terasology-modules
-
-Custom [Gatsby Source Plugin](https://www.gatsbyjs.com/docs/how-to/plugins-and-themes/creating-a-source-plugin/) to fetch enriched information for [Terasology](https://github.com/Terasology) modules from GitHub.
-
-## Install
-
-This is a local plugin that is automatically loaded from the `plugins/` folder.
-
-## Configuration
-
-```js
-// in gatsby-config.js
-
-module.exports = {
- plugins: [
- //...
- {
- resolve: "source-terasology-modules",
- options: {
- accessToken: ``
- }
- }
- ]
-}
-```
-
-Use [Environment Variables](https://www.gatsbyjs.com/docs/how-to/local-development/environment-variables/) to avoid exposing secrets.
-
-## Usage
-
-- `cover` is the URL to the custom banner image, if set
-- `moduleTxt.tags` are derived from `is...` flags in the module's `module.txt`
-
-```graphql
-query Modules {
- allTerasologyModule(limit: 10) {
- nodes {
- name
- url
- description
- homepageUrl
-
- cover
-
- moduleTxt {
- id
- tags
- version
- displayName
- description
- dependencies {
- id
- optional
- }
- }
-
- readme {
- text
- }
-
- issues {
- nodes {
- id
- title
- author {
- login
- }
- labels {
- nodes {
- name
- }
- }
- updatedAt
- url
- }
- }
- }
- }
-}
-```
diff --git a/plugins/source-terasology-modules/gatsby-node.js b/plugins/source-terasology-modules/gatsby-node.js
deleted file mode 100644
index d32b6de9..00000000
--- a/plugins/source-terasology-modules/gatsby-node.js
+++ /dev/null
@@ -1,237 +0,0 @@
-const { graphql } = require("@octokit/graphql");
-const { DateTime } = require("luxon");
-const { createRemoteFileNode } = require("gatsby-source-filesystem");
-const fs = require("fs");
-
-const PLUGIN_NAME = "source-terasology-modules";
-
-const query = `
-query Modules($cursor:String) {
- organization(login: "Terasology") {
- repositories(orderBy: {field: NAME, direction: ASC}, first: 20, after: $cursor) {
- nodes {
- id
- name
- url
- description
- homepageUrl
- openGraphImageUrl
- usesCustomOpenGraphImage
-
- moduleTxt: object(expression: "develop:module.txt") {
- ...on Blob {
- text
- }
- }
-
- readme: object(expression: "develop:README.md") {
- ...on Blob {
- text
- }
- }
-
- issues(first: 25, filterBy: {labels: "Good First Issue", states: OPEN}) {
- nodes {
- id
- title
- author {
- login
- }
- labels(first: 10) {
- nodes {
- name
- }
- }
- updatedAt
- url
- }
- }
- }
- pageInfo {
- hasNextPage
- endCursor
- }
- }
- }
-}
-`;
-
-exports.onPreInit = ({ reporter }) =>
- reporter.verbose("Loaded source-terasology-modules");
-
-exports.sourceNodes = async (
- {
- actions: { createNode, createParentChildLink },
- createContentDigest,
- createNodeId,
- reporter,
- cache,
- },
- { accessToken }
-) => {
- const gql = graphql.defaults({
- headers: {
- authorization: `token ${accessToken}`,
- },
- });
-
- const lastFetchedKey = "terasology-modules-last-fetched";
- const dataKey = "terasology-modules-data";
-
- const now = DateTime.utc();
- const lastFetched = DateTime.fromISO(await cache.get(lastFetchedKey), {
- zone: "utc",
- });
-
- let repositories = [];
-
- // Temporary hack to avoid fetching data from GitHub during local testing.
- // Un-/comment as needed after changing the query.
- if (fs.existsSync(`${__dirname}/data.json`)) {
- // repositories = JSON.parse(fs.readFileSync(`${__dirname}/data.json`));
- }
-
- if (repositories.length > 0) {
- reporter.info(
- `[${PLUGIN_NAME}] Loaded Terasology module info from file ...`
- );
- } else if (lastFetched.plus({ hours: 12 }) > now) {
- reporter.info(
- `[${PLUGIN_NAME}] Loading Terasology module info from cache ...`
- );
- repositories = JSON.parse(await cache.get(dataKey));
- } else {
- reporter.info(
- `[${PLUGIN_NAME}] Fetching Terasology module info from GitHub ...`
- );
- let hasNextPage = true;
- let cursor;
-
- /* Loop iterations depend on the outcome of the previous request, thus 'await' is required here. */
- /* eslint-disable no-await-in-loop */
- while (hasNextPage) {
- const { organization } = await gql(query, { cursor });
-
- organization.repositories.nodes.forEach((repo) =>
- repositories.push(repo)
- );
-
- hasNextPage = organization.repositories.pageInfo.hasNextPage;
- cursor = organization.repositories.pageInfo.endCursor;
- }
-
- await cache.set(dataKey, JSON.stringify(repositories));
- await cache.set(lastFetchedKey, now.toISO());
-
- fs.writeFileSync(
- `${__dirname}/data.json`,
- JSON.stringify(repositories, null, 2)
- );
- }
-
- reporter.success(`[${PLUGIN_NAME}] Loaded ${repositories.length} modules.`);
-
- const nodes = repositories.flatMap(async (repo) => {
- if (!repo.moduleTxt) {
- // skip non-module repositories
- return [];
- }
-
- let moduleTxt;
- try {
- moduleTxt = JSON.parse(repo.moduleTxt?.text);
- } catch (err) {
- console.warn(
- `[${PLUGIN_NAME}] Could not parse 'module.txt' of ${repo.url}.`
- );
- return [];
- }
-
- const tags = [
- moduleTxt.isTutorial ? "Tutorial" : undefined,
- moduleTxt.isAsset ? "Asset" : undefined,
- moduleTxt.isLibrary ? "Library" : undefined,
- moduleTxt.isSpecial ? "Special" : undefined,
- moduleTxt.isRendering ? "Rendering" : undefined,
- moduleTxt.isAugmentation ? "Augmentation" : undefined,
- moduleTxt.isServerSideOnly ? "Server" : undefined,
- moduleTxt.isGameplay ? "Gameplay" : undefined,
- ].filter((x) => x);
-
- const { id, version, displayName, description, dependencies } = moduleTxt;
-
- const cover = repo.usesCustomOpenGraphImage
- ? repo.openGraphImageUrl
- : undefined;
-
- const moduleInfo = {
- id,
- version,
- displayName,
- description,
- dependencies,
- tags,
- };
-
- moduleInfo.dependencies = moduleInfo.dependencies.map((dep) => ({
- ...dep,
- optional: /true/i.test(dep.optional),
- }));
-
- const node = {
- ...repo,
- usesCustomOpenGraphImage: undefined,
- openGraphImageUrl: undefined,
- cover,
- moduleTxt: moduleInfo,
- issues: repo.issues,
- id: createNodeId(`TerasologyModule-${repo.id}`),
- parent: "__SOURCE__",
- children: [],
- internal: {
- type: "TerasologyModule",
- },
- };
- node.internal.contentDigest = createContentDigest(node);
-
- let fileNode;
- if (node.cover) {
- try {
- fileNode = await createRemoteFileNode({
- url: node.cover,
- parentNodeId: node.id,
- cache,
- createNodeId,
- createNode,
- ext: ".png",
- });
- } catch (err) {
- reporter.error(err);
- }
- if (fileNode) {
- node.coverImage___NODE = fileNode.id;
- reporter.info(
- `Created remote file node for ${node.name}: ${node.cover}`
- );
- }
- }
-
- createNode(node);
-
- if (fileNode) {
- try {
- createParentChildLink({
- parent: node,
- child: fileNode,
- });
- } catch (err) {
- reporter.error(err);
- }
- }
- return Promise.resolve();
- });
-
- await Promise.all(nodes);
-
- reporter.success(`[${PLUGIN_NAME}] Created nodes for Terasology modules.`);
-};
diff --git a/plugins/source-terasology-modules/index.js b/plugins/source-terasology-modules/index.js
deleted file mode 100644
index 172f1ae6..00000000
--- a/plugins/source-terasology-modules/index.js
+++ /dev/null
@@ -1 +0,0 @@
-// noop
diff --git a/plugins/source-terasology-modules/package.json b/plugins/source-terasology-modules/package.json
deleted file mode 100644
index f009905c..00000000
--- a/plugins/source-terasology-modules/package.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "name": "source-terasology-modules",
- "version": "0.0.1",
- "private": true,
- "description": "A Gatsby source plugin to fetch Terasology module information.",
- "main": "index.js",
- "scripts": {
- "test": "echo \"Error: no test specified\" && exit 1",
- "build": "echo \"No build script setup\""
- },
- "keywords": [
- "gatsby",
- "gatsby-plugin"
- ],
- "author": "The Terasology Foundation ",
- "dependencies": {
- "@octokit/graphql": "^5.0.4",
- "gatsby-source-filesystem": "^5.3.1",
- "luxon": "^3.2.0"
- }
-}
diff --git a/static/logos/collaspe.svg b/public/logos/collaspe.svg
similarity index 100%
rename from static/logos/collaspe.svg
rename to public/logos/collaspe.svg
diff --git a/static/logos/cover.jpg b/public/logos/cover.jpg
similarity index 100%
rename from static/logos/cover.jpg
rename to public/logos/cover.jpg
diff --git a/static/logos/defaultCardcover.jpg b/public/logos/defaultCardcover.jpg
similarity index 100%
rename from static/logos/defaultCardcover.jpg
rename to public/logos/defaultCardcover.jpg
diff --git a/static/logos/gooey-1.png b/public/logos/gooey-1.png
similarity index 100%
rename from static/logos/gooey-1.png
rename to public/logos/gooey-1.png
diff --git a/static/logos/gooey_gray.png b/public/logos/gooey_gray.png
similarity index 100%
rename from static/logos/gooey_gray.png
rename to public/logos/gooey_gray.png
diff --git a/static/logos/gsoc.png b/public/logos/gsoc.png
similarity index 100%
rename from static/logos/gsoc.png
rename to public/logos/gsoc.png
diff --git a/static/logos/logo.png b/public/logos/logo.png
similarity index 100%
rename from static/logos/logo.png
rename to public/logos/logo.png
diff --git a/static/logos/nav_logo.png b/public/logos/nav_logo.png
similarity index 100%
rename from static/logos/nav_logo.png
rename to public/logos/nav_logo.png
diff --git a/static/logos/profile-placeholder.png b/public/logos/profile-placeholder.png
similarity index 100%
rename from static/logos/profile-placeholder.png
rename to public/logos/profile-placeholder.png
diff --git a/static/robots.txt b/public/robots.txt
similarity index 100%
rename from static/robots.txt
rename to public/robots.txt
diff --git a/scripts/image-generation.js b/scripts/image-generation.js
deleted file mode 100644
index 2bbd1e30..00000000
--- a/scripts/image-generation.js
+++ /dev/null
@@ -1,158 +0,0 @@
-const { createCanvas, loadImage, registerFont } = require("canvas");
-const fs = require("fs");
-const blogList = require("../src/generated/blog-result.json");
-
-registerFont("./static/fonts/PressStart2P-Regular.tff", {
- family: "Press Start 2P",
-});
-
-registerFont("./static/fonts/NotoSans-Bold.ttf", {
- family: "Noto Sans",
-});
-
-const c = {
- width: 1200,
- height: 700,
-};
-
-// functions to generate TeraSaturday and TeraSpotlight image
-const generateTeraSaturdayImage = (
- date,
- postNumber,
- defaultImage,
- imageTag,
- title
-) => {
- const canvas = createCanvas(c.width, c.height);
-
- const blogName = `${date}-${title
- .replace(/[^a-zA-Z0-9 ]/g, "")
- .replace(/\s/g, "-")
- .toLowerCase()}`;
-
- const ctx = canvas.getContext("2d");
- ctx.save();
- loadImage(defaultImage).then((image) => {
- ctx.drawImage(image, 0, 0, c.width, c.height);
-
- const tag = imageTag.slice(4);
- let tagColor = "#8DE10D";
-
- if (tag === "Saturday") {
- tagColor = "#E8BE36";
- }
-
- const postid = postNumber;
- ctx.font = '100px "Press Start 2P"';
- ctx.strokeStyle = "black";
- ctx.lineWidth = 18;
- ctx.lineCap = "round";
- ctx.strokeText("Tera", c.width / 2 - c.height / 2 - 150, c.height / 3);
- ctx.fillStyle = "white";
- ctx.fillText("Tera", c.width / 2 - c.height / 2 - 150, c.height / 3);
-
- ctx.globalAlpha = 0.5;
- ctx.font = '100px "Press Start 2P"';
- ctx.strokeStyle = "black";
- ctx.lineWidth = 18;
- ctx.lineCap = "round";
- ctx.strokeText("sology", c.width / 2 - 90, c.height / 3);
-
- ctx.fillStyle = "white";
- ctx.fillText("sology", c.width / 2 - 90, c.height / 3);
- ctx.fillStyle = "white";
- ctx.fillText("sology", c.width / 2 - 90, c.height / 3);
- ctx.fillStyle = "white";
- ctx.fillText("sology", c.width / 2 - 90, c.height / 3);
- ctx.fillStyle = "white";
- ctx.fillText("sology", c.width / 2 - 90, c.height / 3);
-
- ctx.globalAlpha = 1;
- ctx.translate(-100, 150);
- ctx.rotate(10 * (-Math.PI / 180));
- ctx.font = 'bold 130px "Noto Sans"';
- ctx.strokeStyle = "black";
- ctx.lineWidth = 25;
- ctx.strokeText(tag, c.width / 2 - 20, c.height / 3);
- ctx.fillStyle = tagColor;
- ctx.fillText(tag, c.width / 2 - 20, c.height / 3);
-
- const pst =
- ctx.measureText("sology").width - ctx.measureText(postid).width + 70;
-
- ctx.restore();
-
- ctx.font = 'bold 100px "Noto Sans"';
- ctx.strokeStyle = "black";
- ctx.lineWidth = 25;
- ctx.strokeText(postid, pst + c.width / 2 + 60, c.height / 3 + 120);
- ctx.fillStyle = tagColor;
- ctx.fillText(postid, pst + c.width / 2 + 60, c.height / 3 + 120);
- ctx.restore();
-
- const buffer = canvas.toBuffer("image/jpg");
- fs.writeFileSync(`./blog/${blogName}/cover.jpg`, buffer);
- });
-};
-
-// functions to generate image with logo
-const generateCustomLogoImage = (
- date,
- defaultImage,
- position,
- customLogo,
- title
-) => {
- const canvas = createCanvas(c.width, c.height);
- const blogName = `${date}-${title
- .replace(/[^a-zA-Z0-9 ]/g, "")
- .replace(/\s/g, "-")
- .toLowerCase()}`;
-
- const ctx = canvas.getContext("2d");
- const customImage = customLogo;
-
- loadImage(defaultImage).then((image) => {
- ctx.drawImage(image, 0, 0, c.width, c.height);
- ctx.strokeStyle = "black";
- ctx.strokeRect(0, 0, c.width, c.height);
-
- loadImage(customImage).then((logoImage) => {
- if (position === "end" || position === "End") {
- ctx.drawImage(logoImage, c.width - 350, 50, 300, 300);
- } else if (position === "start" || position === "Start") {
- ctx.drawImage(logoImage, 100, 50, 300, 300);
- } else if (position === "center" || position === "Center") {
- ctx.drawImage(logoImage, c.width / 2, c.width / 2, 300, 300);
- } else {
- ctx.drawImage(logoImage, c.width - 350, 50, 300, 300);
- }
-
- const buffer = canvas.toBuffer("image/jpg");
- fs.writeFileSync(`./blog/${blogName}/cover.jpg`, buffer);
- });
- });
-};
-
-// Fetch data and generate image
-blogList.forEach((edge) => {
- if (edge.imageTag === "TeraSaturday" || edge.imageTag === "TeraSpotlight") {
- generateTeraSaturdayImage(
- edge.date,
- edge.postNumber,
- edge.mainImage,
- edge.imageTag,
- edge.title
- );
- }
-
- if (edge.imageTag === "other" || edge.imageTag === "Other") {
- generateCustomLogoImage(
- edge.date,
- edge.mainImage,
- edge.position,
- edge.customLogo,
- edge.title
- );
- }
-});
diff --git a/static/images/A_Towering_View.jpg b/src/assets/gallery/A_Towering_View.jpg
similarity index 100%
rename from static/images/A_Towering_View.jpg
rename to src/assets/gallery/A_Towering_View.jpg
diff --git a/static/images/Autumn_Day.jpg b/src/assets/gallery/Autumn_Day.jpg
similarity index 100%
rename from static/images/Autumn_Day.jpg
rename to src/assets/gallery/Autumn_Day.jpg
diff --git a/static/images/Back_to_School.jpg b/src/assets/gallery/Back_to_School.jpg
similarity index 100%
rename from static/images/Back_to_School.jpg
rename to src/assets/gallery/Back_to_School.jpg
diff --git a/static/images/Caged_Animals.jpg b/src/assets/gallery/Caged_Animals.jpg
similarity index 100%
rename from static/images/Caged_Animals.jpg
rename to src/assets/gallery/Caged_Animals.jpg
diff --git a/static/images/Cave_with_Ores.jpg b/src/assets/gallery/Cave_with_Ores.jpg
similarity index 100%
rename from static/images/Cave_with_Ores.jpg
rename to src/assets/gallery/Cave_with_Ores.jpg
diff --git a/static/images/Colored_Torches.jpg b/src/assets/gallery/Colored_Torches.jpg
similarity index 100%
rename from static/images/Colored_Torches.jpg
rename to src/assets/gallery/Colored_Torches.jpg
diff --git a/static/images/Companion_Shrine.jpg b/src/assets/gallery/Companion_Shrine.jpg
similarity index 100%
rename from static/images/Companion_Shrine.jpg
rename to src/assets/gallery/Companion_Shrine.jpg
diff --git a/static/images/Crab_on_the_Beach.jpg b/src/assets/gallery/Crab_on_the_Beach.jpg
similarity index 100%
rename from static/images/Crab_on_the_Beach.jpg
rename to src/assets/gallery/Crab_on_the_Beach.jpg
diff --git a/static/images/Desert.jpg b/src/assets/gallery/Desert.jpg
similarity index 100%
rename from static/images/Desert.jpg
rename to src/assets/gallery/Desert.jpg
diff --git a/static/images/Extreme_View_Distance_1.jpg b/src/assets/gallery/Extreme_View_Distance_1.jpg
similarity index 100%
rename from static/images/Extreme_View_Distance_1.jpg
rename to src/assets/gallery/Extreme_View_Distance_1.jpg
diff --git a/static/images/Extreme_View_Distance_2.jpg b/src/assets/gallery/Extreme_View_Distance_2.jpg
similarity index 100%
rename from static/images/Extreme_View_Distance_2.jpg
rename to src/assets/gallery/Extreme_View_Distance_2.jpg
diff --git a/static/images/Extreme_View_Distance_3.jpg b/src/assets/gallery/Extreme_View_Distance_3.jpg
similarity index 100%
rename from static/images/Extreme_View_Distance_3.jpg
rename to src/assets/gallery/Extreme_View_Distance_3.jpg
diff --git a/static/images/Extreme_View_Distance_4.jpg b/src/assets/gallery/Extreme_View_Distance_4.jpg
similarity index 100%
rename from static/images/Extreme_View_Distance_4.jpg
rename to src/assets/gallery/Extreme_View_Distance_4.jpg
diff --git a/static/images/Flowing_Water.jpg b/src/assets/gallery/Flowing_Water.jpg
similarity index 100%
rename from static/images/Flowing_Water.jpg
rename to src/assets/gallery/Flowing_Water.jpg
diff --git a/static/images/Flying_Islands.jpg b/src/assets/gallery/Flying_Islands.jpg
similarity index 100%
rename from static/images/Flying_Islands.jpg
rename to src/assets/gallery/Flying_Islands.jpg
diff --git a/static/images/Forest_Hut.jpg b/src/assets/gallery/Forest_Hut.jpg
similarity index 100%
rename from static/images/Forest_Hut.jpg
rename to src/assets/gallery/Forest_Hut.jpg
diff --git a/static/images/Getting_Closer.jpg b/src/assets/gallery/Getting_Closer.jpg
similarity index 100%
rename from static/images/Getting_Closer.jpg
rename to src/assets/gallery/Getting_Closer.jpg
diff --git a/static/images/God_Rays.jpg b/src/assets/gallery/God_Rays.jpg
similarity index 100%
rename from static/images/God_Rays.jpg
rename to src/assets/gallery/God_Rays.jpg
diff --git a/static/images/Going_Uphill.jpg b/src/assets/gallery/Going_Uphill.jpg
similarity index 100%
rename from static/images/Going_Uphill.jpg
rename to src/assets/gallery/Going_Uphill.jpg
diff --git a/static/images/Gooey_Defence.jpg b/src/assets/gallery/Gooey_Defence.jpg
similarity index 100%
rename from static/images/Gooey_Defence.jpg
rename to src/assets/gallery/Gooey_Defence.jpg
diff --git a/static/images/Gothic_Village.jpg b/src/assets/gallery/Gothic_Village.jpg
similarity index 100%
rename from static/images/Gothic_Village.jpg
rename to src/assets/gallery/Gothic_Village.jpg
diff --git a/static/images/Gothic_Village_from_Above.jpg b/src/assets/gallery/Gothic_Village_from_Above.jpg
similarity index 100%
rename from static/images/Gothic_Village_from_Above.jpg
rename to src/assets/gallery/Gothic_Village_from_Above.jpg
diff --git a/static/images/Gun_Shot.jpg b/src/assets/gallery/Gun_Shot.jpg
similarity index 100%
rename from static/images/Gun_Shot.jpg
rename to src/assets/gallery/Gun_Shot.jpg
diff --git a/static/images/Hide_and_Sheep.jpg b/src/assets/gallery/Hide_and_Sheep.jpg
similarity index 100%
rename from static/images/Hide_and_Sheep.jpg
rename to src/assets/gallery/Hide_and_Sheep.jpg
diff --git a/static/images/High_Above.jpg b/src/assets/gallery/High_Above.jpg
similarity index 100%
rename from static/images/High_Above.jpg
rename to src/assets/gallery/High_Above.jpg
diff --git a/static/images/Hjerl_Hede_House.jpg b/src/assets/gallery/Hjerl_Hede_House.jpg
similarity index 100%
rename from static/images/Hjerl_Hede_House.jpg
rename to src/assets/gallery/Hjerl_Hede_House.jpg
diff --git a/static/images/Light_and_Shadow.jpg b/src/assets/gallery/Light_and_Shadow.jpg
similarity index 100%
rename from static/images/Light_and_Shadow.jpg
rename to src/assets/gallery/Light_and_Shadow.jpg
diff --git a/static/images/Light_at_the_End_of_the_Tunnel.jpg b/src/assets/gallery/Light_at_the_End_of_the_Tunnel.jpg
similarity index 100%
rename from static/images/Light_at_the_End_of_the_Tunnel.jpg
rename to src/assets/gallery/Light_at_the_End_of_the_Tunnel.jpg
diff --git a/static/images/Lonely_Tree_Island.jpg b/src/assets/gallery/Lonely_Tree_Island.jpg
similarity index 100%
rename from static/images/Lonely_Tree_Island.jpg
rename to src/assets/gallery/Lonely_Tree_Island.jpg
diff --git a/static/images/Lost.jpg b/src/assets/gallery/Lost.jpg
similarity index 100%
rename from static/images/Lost.jpg
rename to src/assets/gallery/Lost.jpg
diff --git a/static/images/Mesas_in_Metal_Renegades.jpg b/src/assets/gallery/Mesas_in_Metal_Renegades.jpg
similarity index 100%
rename from static/images/Mesas_in_Metal_Renegades.jpg
rename to src/assets/gallery/Mesas_in_Metal_Renegades.jpg
diff --git a/static/images/Metal_Renegades.jpg b/src/assets/gallery/Metal_Renegades.jpg
similarity index 100%
rename from static/images/Metal_Renegades.jpg
rename to src/assets/gallery/Metal_Renegades.jpg
diff --git a/static/images/Mine_Cart_Avalanche.jpg b/src/assets/gallery/Mine_Cart_Avalanche.jpg
similarity index 100%
rename from static/images/Mine_Cart_Avalanche.jpg
rename to src/assets/gallery/Mine_Cart_Avalanche.jpg
diff --git a/static/images/Misty_Tree.jpg b/src/assets/gallery/Misty_Tree.jpg
similarity index 100%
rename from static/images/Misty_Tree.jpg
rename to src/assets/gallery/Misty_Tree.jpg
diff --git a/static/images/ParadIce.jpg b/src/assets/gallery/ParadIce.jpg
similarity index 100%
rename from static/images/ParadIce.jpg
rename to src/assets/gallery/ParadIce.jpg
diff --git a/static/images/Path_to_the_Bridge.jpg b/src/assets/gallery/Path_to_the_Bridge.jpg
similarity index 100%
rename from static/images/Path_to_the_Bridge.jpg
rename to src/assets/gallery/Path_to_the_Bridge.jpg
diff --git a/static/images/Playtest_Session_August_2022.jpg b/src/assets/gallery/Playtest_Session_August_2022.jpg
similarity index 100%
rename from static/images/Playtest_Session_August_2022.jpg
rename to src/assets/gallery/Playtest_Session_August_2022.jpg
diff --git a/static/images/Quiet_Village.jpg b/src/assets/gallery/Quiet_Village.jpg
similarity index 100%
rename from static/images/Quiet_Village.jpg
rename to src/assets/gallery/Quiet_Village.jpg
diff --git a/static/images/Ready_to_Harvest.jpg b/src/assets/gallery/Ready_to_Harvest.jpg
similarity index 100%
rename from static/images/Ready_to_Harvest.jpg
rename to src/assets/gallery/Ready_to_Harvest.jpg
diff --git a/static/images/Spring_Time.jpg b/src/assets/gallery/Spring_Time.jpg
similarity index 100%
rename from static/images/Spring_Time.jpg
rename to src/assets/gallery/Spring_Time.jpg
diff --git a/static/images/Stonehenge_in_Lost.jpg b/src/assets/gallery/Stonehenge_in_Lost.jpg
similarity index 100%
rename from static/images/Stonehenge_in_Lost.jpg
rename to src/assets/gallery/Stonehenge_in_Lost.jpg
diff --git a/static/images/The_Rock.jpg b/src/assets/gallery/The_Rock.jpg
similarity index 100%
rename from static/images/The_Rock.jpg
rename to src/assets/gallery/The_Rock.jpg
diff --git a/static/images/View_from_the_Lake_1.jpg b/src/assets/gallery/View_from_the_Lake_1.jpg
similarity index 100%
rename from static/images/View_from_the_Lake_1.jpg
rename to src/assets/gallery/View_from_the_Lake_1.jpg
diff --git a/static/images/View_from_the_Lake_2.jpg b/src/assets/gallery/View_from_the_Lake_2.jpg
similarity index 100%
rename from static/images/View_from_the_Lake_2.jpg
rename to src/assets/gallery/View_from_the_Lake_2.jpg
diff --git a/static/images/View_from_the_Lake_3.jpg b/src/assets/gallery/View_from_the_Lake_3.jpg
similarity index 100%
rename from static/images/View_from_the_Lake_3.jpg
rename to src/assets/gallery/View_from_the_Lake_3.jpg
diff --git a/src/components/BlogList.jsx b/src/components/BlogList.jsx
new file mode 100644
index 00000000..17da5ee2
--- /dev/null
+++ b/src/components/BlogList.jsx
@@ -0,0 +1,194 @@
+import { useEffect, useMemo, useState } from "react";
+import { FaFilter } from "react-icons/fa";
+import { FiArrowLeft, FiArrowRight } from "react-icons/fi";
+import { useLocationSearch } from "../lib/useLocationSearch";
+import PostListing from "./PostListing";
+
+const KEYS = ["keywords", "tag", "author", "date"];
+const EMPTY = { keywords: "", tag: "", author: "", date: "" };
+
+const escape = (s) => s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
+const matches = (value, needle) => new RegExp(escape(needle), "i").test(value ?? "");
+
+/** Paginated blog listing with client-side search & filter (?keywords=&tag=&author=&date=). */
+export default function BlogList({ posts, authors, tags, prevUrl, nextUrl }) {
+ const search = useLocationSearch();
+ const [edited, setFilter] = useState(null);
+ const [showFilter, setShowFilter] = useState(false);
+ const [index, setIndex] = useState(null);
+
+ const fromUrl = useMemo(() => {
+ const params = new URLSearchParams(search);
+ return Object.fromEntries(KEYS.map((k) => [k, params.get(k) || ""]));
+ }, [search]);
+ const filter = edited ?? fromUrl;
+
+ const searching = KEYS.some((k) => filter[k]);
+
+ useEffect(() => {
+ if (!searching || index) return;
+ fetch("/blog/search-index.json")
+ .then((r) => r.json())
+ .then(setIndex)
+ .catch(() => setIndex([]));
+ }, [searching, index]);
+
+ const update = (key, value) => {
+ const next = { ...filter, [key]: value };
+ setFilter(next);
+ const params = new URLSearchParams();
+ KEYS.forEach((k) => next[k] && params.set(k, next[k]));
+ const query = params.toString();
+ window.history.replaceState(null, "", query ? `/blog?${query}` : "/blog");
+ };
+
+ const results = useMemo(
+ () =>
+ (index ?? []).filter(
+ (p) =>
+ (matches(p.content, filter.keywords) || matches(p.title, filter.keywords)) &&
+ (!filter.tag || p.tags.some((t) => matches(t, filter.tag))) &&
+ matches(p.author, filter.author) &&
+ matches(p.date, filter.date),
+ ),
+ [index, filter],
+ );
+
+ return (
+ <>
+
+
+ {searching ? (
+
+ {results.length > 0 && filter.keywords ? (
+
+ {`Found ${results.length} blog${results.length > 1 ? "s" : ""} matching with "${filter.keywords}"`}
+
+ ) : null}
+ {index && results.length === 0 ?
Found nothing : null}
+
+
+ ) : (
+
+ )}
+
+ {!searching ? (
+
+ {prevUrl ? (
+
+ ) : null}
+ {nextUrl ? (
+
+ ) : null}
+
+ ) : null}
+ >
+ );
+}
diff --git a/src/components/BlogSearchForm/BlogSearchForm.jsx b/src/components/BlogSearchForm/BlogSearchForm.jsx
deleted file mode 100644
index c9f3c59b..00000000
--- a/src/components/BlogSearchForm/BlogSearchForm.jsx
+++ /dev/null
@@ -1,185 +0,0 @@
-import React, { useState } from "react";
-import { navigate } from "gatsby";
-import { Col, Form, FormGroup, Input, Label, Button, Row } from "reactstrap";
-import { FaFilter } from "react-icons/fa";
-import blogList from "../../generated/blog-result.json";
-
-const moment = require("moment");
-
-moment.locale("en");
-
-function BlogSearchForm({ query, tag, author, date, location, prefix }) {
- const [showFilter, setShowFilter] = useState(false);
- let srcLocation = location;
-
- if (typeof window !== `undefined`) {
- srcLocation = location.search;
- }
- const urlTag = new URLSearchParams(srcLocation).get("tag") || "";
- const urlAuthor = new URLSearchParams(srcLocation).get("author") || "";
- const urldate = new URLSearchParams(srcLocation).get("date") || "";
- const authorList = new Set();
- const tagList = new Set();
-
- blogList.forEach((blog) => {
- authorList.add(blog.author);
- blog.tags.forEach((blogTag) => {
- tagList.add(blogTag);
- });
- });
-
- return (
-
- );
-}
-
-export default BlogSearchForm;
diff --git a/src/components/Cards/Cards.jsx b/src/components/Cards/Cards.jsx
deleted file mode 100644
index 84c34202..00000000
--- a/src/components/Cards/Cards.jsx
+++ /dev/null
@@ -1,65 +0,0 @@
-import React from "react";
-import { Link } from "gatsby";
-import {
- Card,
- CardBody,
- CardSubtitle,
- CardText,
- CardTitle,
- Col,
-} from "reactstrap";
-import { GatsbyImage, getImage } from "gatsby-plugin-image";
-import Tags from "../common/Tags";
-
-function Cards({ title, cover, tags, excerpt, path, author, date, type }) {
- // we use cover images with different aspect ratios for modules and blogs
- // the respective aspect ratio is encoded in the type-specific css class
- const imgClass = type ? `card-img-${type}` : "";
-
- return (
-
-
- {cover ? (
-
- ) : (
- ""
- )}
-
-
-
-
-
- {title}
-
- {excerpt}
- {author ? (
-
- By: {author}
-
- ) : (
- ""
- )}
- {date ? (
-
- Posted on: {date}
-
- ) : (
- ""
- )}
-
-
- Read More
-
-
-
- );
-}
-
-export default Cards;
diff --git a/src/components/Cards/MentorCards.jsx b/src/components/Cards/MentorCards.jsx
deleted file mode 100644
index a92ff6f8..00000000
--- a/src/components/Cards/MentorCards.jsx
+++ /dev/null
@@ -1,62 +0,0 @@
-import React from "react";
-import { FaGithub } from "react-icons/fa";
-import {
- Card,
- CardBody,
- CardSubtitle,
- CardText,
- CardTitle,
- Col,
-} from "reactstrap";
-import { GatsbyImage, getImage } from "gatsby-plugin-image";
-import Tags from "../common/Tags";
-
-function MentorCards({
- name,
- avatar,
- tags,
- html,
- githubProfile,
- timeZone,
- flagUrl,
-}) {
- return (
-
-
- {avatar ? (
-
- ) : (
- ""
- )}
-
-
-
-
-
-
- {name}
-
-
- {`${timeZone} | `}
-
- {` @${githubProfile}`}
-
-
-
-
-
-
-
- );
-}
-
-export default MentorCards;
diff --git a/src/components/Download.jsx b/src/components/Download.jsx
new file mode 100644
index 00000000..f3998f6a
--- /dev/null
+++ b/src/components/Download.jsx
@@ -0,0 +1,93 @@
+import { useState, useSyncExternalStore } from "react";
+import { FaDownload } from "react-icons/fa";
+
+// Option value = release asset name; assets are matched by name, not position.
+const BUILDS = [
+ { asset: "TerasologyLauncher-windows64.zip", label: "Windows (64-bit)" },
+ { asset: "TerasologyLauncher-windowsarm64.zip", label: "Windows (ARM64)" },
+ { asset: "TerasologyLauncher-linux64.zip", label: "Linux (64-bit)" },
+ { asset: "TerasologyLauncher-linuxarm64.zip", label: "Linux (ARM64)" },
+ { asset: "TerasologyLauncher-mac64.zip", label: "macOS (Intel 64-bit)" },
+ { asset: "TerasologyLauncher-macarm64.zip", label: "macOS (Apple Silicon)" },
+];
+
+const RELEASE_URL = "https://api.github.com/repos/MovingBlocks/TerasologyLauncher/releases/latest";
+
+// navigator.platform can't tell ARM from x86, so detection defaults to 64-bit.
+const detectAsset = (navPlatform = "") => {
+ if (navPlatform.startsWith("Mac")) return "TerasologyLauncher-mac64.zip";
+ if (navPlatform.startsWith("Linux")) return "TerasologyLauncher-linux64.zip";
+ return "TerasologyLauncher-windows64.zip";
+};
+
+const noopSubscribe = () => () => {};
+
+export default function Download() {
+ // detected on the client only; the server snapshot keeps hydration markup identical
+ const detected = useSyncExternalStore(
+ noopSubscribe,
+ () => detectAsset(window.navigator.platform),
+ () => detectAsset(),
+ );
+ const [chosen, setPlatform] = useState(null);
+ const platform = chosen ?? detected;
+ const [error, setError] = useState("");
+
+ const download = async () => {
+ const response = await fetch(RELEASE_URL);
+ if (!response.ok) {
+ setError(response.status);
+ return;
+ }
+ const data = await response.json();
+ const asset = (data.assets || []).find((a) => a.name === platform);
+ if (asset) window.location.href = asset.browser_download_url;
+ else setError(`no asset named ${platform}`);
+ };
+
+ return (
+
+
+
+
+ Platform:
+
+
+
+
setPlatform(e.target.value)}
+ >
+ {BUILDS.map((b) => (
+
+ {b.label}
+
+ ))}
+
+ {error ? (
+
+ {`Problem fetching download link.(Error Code: ${error})`}
+ setError("")}
+ />
+
+ ) : null}
+
+
+
+
+ );
+}
diff --git a/src/components/Download/Download.jsx b/src/components/Download/Download.jsx
deleted file mode 100644
index 5b1e0158..00000000
--- a/src/components/Download/Download.jsx
+++ /dev/null
@@ -1,173 +0,0 @@
-import React, { useState, useEffect, useMemo } from "react";
-import { NavLink, Input, Row, Col, Alert } from "reactstrap";
-import { IconContext } from "react-icons";
-import { FaDownload } from "react-icons/fa";
-import Section from "../Section";
-
-function Download() {
- const isBrowser = typeof window !== "undefined";
- let srcNavigator;
- let srcLoc;
- if (isBrowser) {
- srcNavigator = window.navigator.platform;
- srcLoc = window.location;
- }
-
- const [platform, setPlatform] = useState("");
- const [visible, setVisible] = useState(false);
- const [status, setStatus] = useState("");
-
- const onDismiss = () => setVisible(false);
-
- useEffect(() => {
- const availableOs = ["Win32", "Linux x86_64", "MacIntel"];
- const detectedOs = srcNavigator;
- if (availableOs.includes(detectedOs)) {
- setPlatform(detectedOs);
- } else {
- setPlatform("Win32");
- }
- }, [srcNavigator]);
-
- const download = async () => {
- const url =
- "https://api.github.com/repos/MovingBlocks/TerasologyLauncher/releases/latest";
- const response = await fetch(url);
-
- if (response.ok) {
- const data = await response.json();
- let downloadUrl;
-
- if (platform === "Win32") {
- downloadUrl = data.assets && data.assets[2].browser_download_url;
- srcLoc.href = downloadUrl;
- } else if (platform === "Linux x86_64") {
- downloadUrl = data.assets && data.assets[0].browser_download_url;
- srcLoc.href = downloadUrl;
- } else if (platform === "MacIntel") {
- downloadUrl = data.assets && data.assets[1].browser_download_url;
- srcLoc.href = downloadUrl;
- }
- } else {
- setVisible(true);
- setStatus(response.status);
- }
- };
-
- const downloadIconAttributes = useMemo(
- () => ({ size: "1em", className: "download" }),
- []
- );
- return (
-
-
-
-
- Platform:
-
-
- {
- const selectedos = e.target.value;
- setPlatform(selectedos);
- }}
- >
-
- Windows (64-bit)
-
-
- Linux (64-bit)
-
-
- macOS
-
-
-
-
-
- {`Problem fetching download link.(Error Code: ${status})`}
-
-
-
-
-
- download()}>
-
-
-
- Download
-
-
-
-
-
-
-
-
-
- System (OS)
-
-
- Windows, MacOS, Linux (64 bit)
-
-
-
-
- Processor (CPU)
-
-
- dual-core CPU
-
-
-
-
- Memory (RAM)
-
-
- 2 GB
-
-
-
-
- Storage (HDD/SSD)
-
-
- 1 GB
-
-
-
-
- Graphics (GPU)
-
-
- Intel HD Graphics (Gen 7) or GeForce 8xxx series (or higher) or
- Radeon HD 2000 series (or higher) with OpenGL 3.3
-
-
-
-
- );
-}
-
-export default Download;
diff --git a/src/components/Footer.astro b/src/components/Footer.astro
new file mode 100644
index 00000000..86603f46
--- /dev/null
+++ b/src/components/Footer.astro
@@ -0,0 +1,55 @@
+---
+import {
+ FaDiscord,
+ FaFacebookSquare,
+ FaGithubSquare,
+ FaPatreon,
+ FaRedditSquare,
+ FaTwitterSquare,
+ FaYoutubeSquare,
+} from "react-icons/fa";
+
+const links = [
+ ["github-icon-color", "https://github.com/MovingBlocks/Terasology", FaGithubSquare, "GitHub"],
+ ["facebook-icon-color", "https://www.facebook.com/Terasology", FaFacebookSquare, "Facebook"],
+ ["twitter-icon-color", "https://twitter.com/terasology", FaTwitterSquare, "Twitter"],
+ ["discord-icon-color", "https://discord.gg/terasology", FaDiscord, "Discord"],
+ ["youtube-icon-color", "https://www.youtube.com/user/blockmaniaTV", FaYoutubeSquare, "YouTube"],
+ ["reddit-icon-color", "https://reddit.com/r/Terasology", FaRedditSquare, "Reddit"],
+ ["ms-2 mt-2 patreon-icon-color", "https://www.patreon.com/Terasology", FaPatreon, "Patreon"],
+] as const;
+---
+
+
diff --git a/src/components/Footer/Footer.jsx b/src/components/Footer/Footer.jsx
deleted file mode 100644
index 840f18cd..00000000
--- a/src/components/Footer/Footer.jsx
+++ /dev/null
@@ -1,119 +0,0 @@
-import React, { useMemo } from "react";
-import { IconContext } from "react-icons";
-import { Container, Row, Col } from "reactstrap";
-import {
- FaGithubSquare,
- FaFacebookSquare,
- FaTwitterSquare,
- FaDiscord,
- FaYoutubeSquare,
- FaRedditSquare,
- FaPatreon,
-} from "react-icons/fa";
-
-function Footer() {
- const footerIconSize = useMemo(() => ({ size: "2.5em" }), []);
- return (
-
-
-
-
-
- The Terasology Foundation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- );
-}
-
-export default Footer;
diff --git a/src/components/Gallery.jsx b/src/components/Gallery.jsx
new file mode 100644
index 00000000..b51a99ce
--- /dev/null
+++ b/src/components/Gallery.jsx
@@ -0,0 +1,122 @@
+import { useState } from "react";
+import { GiPlainSquare, GiSquare } from "react-icons/gi";
+import { ImCross } from "react-icons/im";
+import { formatDate } from "../lib/format";
+import { useLocationSearch } from "../lib/useLocationSearch";
+
+const PREFIX = "/gallery";
+const pageUrl = (n) => (n === 1 ? PREFIX : `${PREFIX}/${n}`);
+
+/** Image grid for one gallery page plus a lightbox that pages across gallery pages (?index=N). */
+export default function Gallery({ images, currentPage, lastPage, total, perPage }) {
+ const lastCount = total - (lastPage - 1) * perPage;
+ const search = useLocationSearch();
+ // undefined until the user acts, then the open index or null (closed); until then ?index= decides
+ const [chosen, setActive] = useState(undefined);
+ const index = new URLSearchParams(search).get("index");
+ const fromUrl = index === null ? null : Math.min(Number(index) || 0, images.length - 1);
+ const active = chosen === undefined ? fromUrl : chosen;
+
+ const show = (i) => {
+ setActive(i);
+ window.history.replaceState(null, "", i === null ? pageUrl(currentPage) : `?index=${i}`);
+ };
+
+ const next = () => {
+ if (active < images.length - 1) show(active + 1);
+ else
+ window.location.href = `${pageUrl(currentPage === lastPage ? 1 : currentPage + 1)}?index=0`;
+ };
+
+ const prev = () => {
+ if (active > 0) show(active - 1);
+ else if (currentPage === 1)
+ window.location.href = `${pageUrl(lastPage)}?index=${lastCount - 1}`;
+ else window.location.href = `${pageUrl(currentPage - 1)}?index=${perPage - 1}`;
+ };
+
+ const current = active === null ? null : images[active];
+
+ return (
+ <>
+ {current ? (
+
+
+
+ show(null)}
+ >
+
+
+
+
+
+
+
+
+
+
{current.name.replaceAll("_", " ")}
+
{formatDate(current.date)}
+
+
+
+
+
+ Previous
+
+
+
+ Next
+
+
+
+
+
+ ) : null}
+
+
+ {images.map((image, index) => (
+
+
show(index)}
+ >
+
+
+
+ ))}
+
+
+
+ >
+ );
+}
diff --git a/src/components/Header.astro b/src/components/Header.astro
new file mode 100644
index 00000000..12aff2d1
--- /dev/null
+++ b/src/components/Header.astro
@@ -0,0 +1,108 @@
+---
+import { FaDownload } from "react-icons/fa";
+
+const path = Astro.url.pathname.replace(/\/$/, "") || "/";
+const active = (href: string) => (path === href ? "text-color active" : "text-color");
+const menus = [
+ {
+ label: "Modules",
+ items: [
+ ["/modules/a", "Browse all"],
+ ["/modules/search", "Search"],
+ ],
+ },
+ {
+ label: "Contribute",
+ items: [
+ ["/contribute", "Getting Started"],
+ ["/programs", "Contributor Programs"],
+ ],
+ },
+];
+---
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/Header/Header.jsx b/src/components/Header/Header.jsx
deleted file mode 100644
index aad185d6..00000000
--- a/src/components/Header/Header.jsx
+++ /dev/null
@@ -1,148 +0,0 @@
-import React, { useState, useMemo } from "react";
-import { IconContext } from "react-icons";
-import GithubCorner from "react-github-corner";
-import {
- Container,
- Collapse,
- Navbar,
- NavbarToggler,
- NavbarBrand,
- Nav,
- NavItem,
- NavLink,
- UncontrolledDropdown,
- DropdownToggle,
- DropdownMenu,
- DropdownItem,
-} from "reactstrap";
-import { FaDownload } from "react-icons/fa";
-import { Link } from "gatsby";
-import navLogo from "../../../static/logos/nav_logo.png";
-
-function Header() {
- const [isOpen, toggle] = useState(false);
- const downloadIconAttributes = useMemo(
- () => ({ size: "1em", className: "download" }),
- []
- );
- return (
-
-
- toggle(!isOpen)} />
-
-
-
-
-
-
-
-
-
-
- Home
-
-
-
-
-
-
- Blog
-
-
-
-
-
-
- Gallery
-
-
-
-
-
- Modules
-
-
-
-
-
- Browse all
-
-
-
-
-
-
- Search
-
-
-
-
-
-
-
- Contribute
-
-
-
-
-
- Getting Started
-
-
-
-
-
-
- Contributor Programs
-
-
-
-
-
-
-
-
-
-
-
- Download
-
-
-
-
-
-
-
-
- );
-}
-
-export default Header;
diff --git a/src/components/HighlightBox.astro b/src/components/HighlightBox.astro
new file mode 100644
index 00000000..0afaae6a
--- /dev/null
+++ b/src/components/HighlightBox.astro
@@ -0,0 +1,26 @@
+---
+import { getImage } from "astro:assets";
+import type { ImageMetadata } from "astro";
+
+interface Props {
+ title: string;
+ image: ImageMetadata;
+ align?: "start" | "end";
+}
+
+const { title, image, align = "start" } = Astro.props;
+const bg = await getImage({ src: image, width: 1600, format: "webp" });
+---
+
+
diff --git a/src/components/Home/HighlightBox.jsx b/src/components/Home/HighlightBox.jsx
deleted file mode 100644
index 4edc8c25..00000000
--- a/src/components/Home/HighlightBox.jsx
+++ /dev/null
@@ -1,22 +0,0 @@
-import React from "react";
-import { Row, Col } from "reactstrap";
-
-function HighlightBox({ title, children, bgImage, align = "start" }) {
- return (
-
-
-
-
- {title}
- {children}
-
-
-
-
- );
-}
-
-export default HighlightBox;
diff --git a/src/components/Home/Index.jsx b/src/components/Home/Index.jsx
deleted file mode 100644
index b15b40c9..00000000
--- a/src/components/Home/Index.jsx
+++ /dev/null
@@ -1,234 +0,0 @@
-import React from "react";
-import { Row, Col, Button } from "reactstrap";
-import { Link, graphql, useStaticQuery, withPrefix } from "gatsby";
-import { FaRegArrowAltCircleRight, FaDiscord } from "react-icons/fa";
-import Section from "../Section";
-import PostListing from "../PostListing/PostListing";
-import HighlightBox from "./HighlightBox";
-
-function Index() {
- const data = useStaticQuery(graphql`
- query homePageQuery {
- allMarkdownRemark(
- sort: { frontmatter: { date: DESC } }
- filter: { frontmatter: { posttype: { eq: "blog" } } }
- limit: 3
- ) {
- edges {
- node {
- fields {
- slug
- date
- }
- excerpt(format: PLAIN, pruneLength: 120, truncate: true)
- timeToRead
- frontmatter {
- title
- date
- author
- tags
- posttype
- description
- cover {
- childImageSharp {
- gatsbyImageData
- }
- }
- }
- }
- }
- }
- }
- `);
- const recentPostEdges = data.allMarkdownRemark.edges;
- const recentPostList = recentPostEdges.map(({ node }) => {
- const { frontmatter, fields, excerpt } = node;
- const { posttype, tags, cover, title, author } = frontmatter;
- const { slug, date } = fields;
- return {
- posttype,
- title,
- path: `/blog${slug}`,
- cover,
- tags,
- excerpt,
- date,
- author,
- };
- });
-
- return (
-
-
-
- What is Terasology?
-
- An open source voxel world - imagine the possibilities!
-
-
- The Terasology project was born from a Minecraft-inspired tech demo
- in 2011. Over the years it has been a playground for different kinds
- of technical experiments and proof of concepts. The community
- strives to make Terasology a stable platform for various types of
- gameplay settings in a voxel world.
-
-
-
-
- Learn more
-
-
-
-
- Join our Discord
-
-
-
-
-
-
- VIDEO
-
-
-
-
-
-
-
-
-
-
-
- Find More Blogs
-
-
-
-
-
-
-
-
-
-
-
- The project was founded in 2011 by {`Benjamin "Begla" Glatzel `}
- while researching procedural terrain generation and effective
- rendering techniques. He succeeded in creating a minecraft-like
- demo engine, the foundation stone for what Terasology is today.
-
-
- We are always on the lookout for contributors with expertise in
- rendering, networking and concurrency, as well as in-game
- physics and AI technology.
-
-
- If you are interested in game engine development, come check out
- our{" "}
-
- Terasology Engine & Module Land
-
- .
-
-
-
-
-
-
- From the ground up, Terasology was built to be very modular and
- support different kinds of gameplay ideas. We still host a large
- number of modules under the {`"Terasology" `}GitHub organization
- providing basic and advanced gameplay content as well as world
- generation options and technical libraries.
-
-
- Combining these modules allows to create very different kinds of
- gameplay in our voxel worlds. The possibilities are manifold and
- range from crafting- or trading-oriented survival over
- capture-the-flag to puzzle-style experiences and tower defenses.
-
-
- We especially appreciate expertise or interest in UI/UX, world
- generation or well-thought out gameplay mechanics, but also
- always have an open ear for crazy ideas for existing or new
- modules and gameplay content.
-
-
- If you are interested in gameplay development, come check out
- our{" "}
-
- Terasology Engine & Module Land
-
- .
-
-
-
-
-
-
- The Terasology community is a diverse mix of software
- developers, designers, game testers, graphic artists, musicians
- and other open source loving {`"Gooeys"`}. We value a positive,
- inclusive and respectful environment without harassment, attacks
- or inappropriate activities of any form.
-
-
- We encourage and appreciate contributions from everybody, and
- try to accept constructive criticism even by newcomers as
- gracefully and warmly as possible. and welcoming as possible to
- newcomers.
-
-
- If you want to talk to us or be the next in our group of Gooeys,
- come join us on our{" "}
-
- Terasology Discord
-
- .
-
-
-
-
-
-
- );
-}
-
-export default Index;
diff --git a/src/components/IssueCard.astro b/src/components/IssueCard.astro
new file mode 100644
index 00000000..3a2d35dc
--- /dev/null
+++ b/src/components/IssueCard.astro
@@ -0,0 +1,48 @@
+---
+import { FaGithub } from "react-icons/fa";
+import Tags from "./Tags.jsx";
+import { formatDate } from "../lib/format";
+import type { Issue } from "../loaders/github";
+
+interface Props {
+ issue: Issue;
+ /** Module name and URL for the header; omitted for engine issues. */
+ module?: { name: string; url: string };
+}
+
+const { issue, module } = Astro.props;
+---
+
+
diff --git a/src/components/LinkList.astro b/src/components/LinkList.astro
new file mode 100644
index 00000000..ead004b3
--- /dev/null
+++ b/src/components/LinkList.astro
@@ -0,0 +1,17 @@
+---
+interface Props {
+ links: [href: string, label: string][];
+}
+
+const { links } = Astro.props;
+---
+
+
+ {links.map(([href, label]) => (
+
+
+ {label}
+
+
+ ))}
+
diff --git a/src/components/MentorCard.astro b/src/components/MentorCard.astro
new file mode 100644
index 00000000..174e8117
--- /dev/null
+++ b/src/components/MentorCard.astro
@@ -0,0 +1,70 @@
+---
+import { getImage } from "astro:assets";
+import { render, type CollectionEntry } from "astro:content";
+import { FaGithub } from "react-icons/fa";
+import Tags from "./Tags.jsx";
+
+interface Props {
+ mentor: CollectionEntry<"trello">;
+}
+
+const { mentor } = Astro.props;
+const { name, tags, avatarUrl, githubProfile, timeZone, countryCode } = mentor.data;
+const { Content } = await render(mentor);
+
+// Trello avatars are optimized at build time; if Astro can't read one, link it directly.
+let avatar = avatarUrl ?? "/logos/profile-placeholder.png";
+if (avatarUrl) {
+ try {
+ avatar = (await getImage({ src: avatarUrl, inferSize: true, width: 200, format: "webp" })).src;
+ } catch (err) {
+ console.warn(`[programs] avatar for ${name} not optimized, linking original: ${err}`);
+ }
+}
+
+// Mentor's local time at build time, "HH:mm (GMT+hh:mm)" as on the Gatsby site.
+let localTime = "";
+if (timeZone) {
+ try {
+ const parts = new Intl.DateTimeFormat("en-GB", {
+ timeZone,
+ hour: "2-digit",
+ minute: "2-digit",
+ hourCycle: "h23",
+ timeZoneName: "longOffset",
+ }).formatToParts(new Date());
+ const get = (t: string) => parts.find((p) => p.type === t)?.value ?? "";
+ const offset = get("timeZoneName").replace("GMT", "") || "+00:00";
+ localTime = `${get("hour")}:${get("minute")} (GMT ${offset})`;
+ } catch {
+ localTime = "";
+ }
+}
+---
+
+
+
+
+
+
+
+
+
+ {countryCode && (
+
+ )}
+ {name}
+
+
+ {localTime} | @{githubProfile}
+
+
+
+
+
+
+
diff --git a/src/components/ModuleListing.jsx b/src/components/ModuleListing.jsx
new file mode 100644
index 00000000..eb004a79
--- /dev/null
+++ b/src/components/ModuleListing.jsx
@@ -0,0 +1,51 @@
+import { FaGithub } from "react-icons/fa";
+import Tags from "./Tags";
+
+function ModuleCard({ name, url, tags, description }) {
+ return (
+
+ );
+}
+
+/** modules: entries of the `modules` collection (data only). */
+export default function ModuleListing({ modules }) {
+ return (
+
+
+ {modules.map((m) => (
+
+ ))}
+
+
+ );
+}
diff --git a/src/components/ModuleSearch.jsx b/src/components/ModuleSearch.jsx
new file mode 100644
index 00000000..b2927a45
--- /dev/null
+++ b/src/components/ModuleSearch.jsx
@@ -0,0 +1,118 @@
+import { useEffect, useMemo, useState } from "react";
+import Select from "react-select";
+import * as JsSearch from "js-search";
+import { useLocationSearch } from "../lib/useLocationSearch";
+import ModuleListing from "./ModuleListing";
+
+const PER_PAGE = 9;
+const HINT = "Filter by tags or type a search term to show matching modules.";
+
+/** Module search with tag filter, state kept in ?term=&tag=&tag=β¦ */
+export default function ModuleSearch({ modules }) {
+ const locationSearch = useLocationSearch();
+ // null until the user edits; until then the URL query supplies the values
+ const [editedTerm, setTerm] = useState(null);
+ const [editedTags, setTags] = useState(null);
+ const [shown, setShown] = useState(PER_PAGE);
+
+ const fromUrl = useMemo(() => {
+ const params = new URLSearchParams(locationSearch);
+ return { term: params.get("term") || "", tags: params.getAll("tag").filter(Boolean) };
+ }, [locationSearch]);
+ const term = editedTerm ?? fromUrl.term;
+ const tags = editedTags ?? fromUrl.tags;
+
+ const search = useMemo(() => {
+ const s = new JsSearch.Search("name");
+ s.indexStrategy = new JsSearch.AllSubstringsIndexStrategy();
+ s.sanitizer = new JsSearch.LowerCaseSanitizer();
+ s.addIndex("name");
+ s.addIndex("moduleDescription");
+ s.addIndex("tags");
+ s.addDocuments(modules);
+ return s;
+ }, [modules]);
+
+ const allTags = useMemo(
+ () => [...new Set(modules.flatMap((m) => m.tags))].sort().map((t) => ({ value: t, label: t })),
+ [modules],
+ );
+
+ const results = useMemo(() => {
+ if (!term && tags.length === 0) return [];
+ const found = term ? search.search(term) : modules;
+ return found.filter((m) => tags.every((t) => m.tags.includes(t)));
+ }, [term, tags, search, modules]);
+
+ useEffect(() => {
+ // only after an edit, so the initial render doesn't wipe the query it has yet to read
+ if (editedTerm === null && editedTags === null) return;
+ const params = new URLSearchParams();
+ if (term) params.set("term", term);
+ tags.forEach((t) => params.append("tag", t));
+ const query = params.toString();
+ window.history.replaceState(null, "", query ? `?${query}` : window.location.pathname);
+ }, [term, tags, editedTerm, editedTags]);
+
+ let message = "";
+ if (!term && tags.length === 0) message = HINT;
+ else if (results.length === 0) message = "No modules found matching the search criteria.";
+
+ return (
+ <>
+
+
+
+
+ {message ? (
+
+ ) : null}
+ {shown < results.length ? (
+
+ setShown(shown + PER_PAGE)}
+ >
+ Load More
+
+
+ ) : null}
+ >
+ );
+}
diff --git a/src/components/PostListing.jsx b/src/components/PostListing.jsx
new file mode 100644
index 00000000..c051533a
--- /dev/null
+++ b/src/components/PostListing.jsx
@@ -0,0 +1,52 @@
+import Tags from "./Tags";
+import { formatDate } from "../lib/format";
+
+const DEFAULT_COVER = "/logos/defaultCardcover.jpg";
+
+export function PostCard({ title, cover, tags, excerpt, path, author, date, type }) {
+ // blog and project covers use different aspect ratios, see _cards.scss
+ return (
+
+
+
+
+
+
+
+
{title}
+
{excerpt}
+ {author ? (
+
+ By: {author}
+
+ ) : null}
+ {date ? (
+
+ Posted on: {formatDate(date)}
+
+ ) : null}
+
+
+ Read More
+
+
+
+ );
+}
+
+export default function PostListing({ postList }) {
+ return (
+
+
+ {postList.map((post) => (
+
+ ))}
+
+
+ );
+}
diff --git a/src/components/PostListing/PostListing.jsx b/src/components/PostListing/PostListing.jsx
deleted file mode 100644
index 26fab3d7..00000000
--- a/src/components/PostListing/PostListing.jsx
+++ /dev/null
@@ -1,30 +0,0 @@
-import React from "react";
-import { Row, Col } from "reactstrap";
-import moment from "moment";
-
-import Cards from "../Cards/Cards";
-
-function PostListing({ postList }) {
- return (
-
-
- {postList.map(
- ({ title, cover, tags, excerpt, author, path, date, posttype }) => (
-
- )
- )}
-
-
- );
-}
-
-export default PostListing;
diff --git a/src/components/PostTags/PostTags.jsx b/src/components/PostTags/PostTags.jsx
deleted file mode 100644
index dc5dae33..00000000
--- a/src/components/PostTags/PostTags.jsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import React from "react";
-import { Link } from "gatsby";
-import { Button } from "reactstrap";
-
-const kebabCase = require("lodash.kebabcase");
-
-function PostTags({ tags, type }) {
- return (
-
- {tags && (
-
-
- {tags}
-
-
- )}
-
- );
-}
-
-export default PostTags;
diff --git a/src/components/SEO/SEO.jsx b/src/components/SEO/SEO.jsx
deleted file mode 100644
index 56153db1..00000000
--- a/src/components/SEO/SEO.jsx
+++ /dev/null
@@ -1,40 +0,0 @@
-import React from "react";
-import urljoin from "url-join";
-import { useSiteMetadata } from "../../hooks/useSiteMetadata";
-
-function SEO({ title, description, pathname, children }) {
- const {
- title: defaultTitle,
- description: defaultDescription,
- siteUrl,
- image,
- twitterUsername,
- } = useSiteMetadata();
-
- const seo = {
- title: title || defaultTitle,
- description: description || defaultDescription,
- url: urljoin(siteUrl, pathname || ""),
- image: urljoin(siteUrl, image),
- twitterUsername,
- };
-
- return (
- <>
- {seo.title}
-
-
-
-
-
-
-
-
-
-
- {children}
- >
- );
-}
-
-export default SEO;
diff --git a/src/components/SearchResult/SearchResult.jsx b/src/components/SearchResult/SearchResult.jsx
deleted file mode 100644
index 0471e581..00000000
--- a/src/components/SearchResult/SearchResult.jsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import React from "react";
-import PostListing from "../PostListing/PostListing";
-
-function SearchResults({ query, results, type }) {
- return (
-
- {!!results.length && query && (
-
- {`Found ${results.length} `}
- {results.length === 1 && `${type} matching with`}
- {results.length > 1 && `${type}s matching with`}
- {` "${query}"`}
-
- )}
-
{results.length < 1 && "Found nothing"}
-
-
- );
-}
-
-export default SearchResults;
diff --git a/src/components/Section.astro b/src/components/Section.astro
new file mode 100644
index 00000000..ad036e15
--- /dev/null
+++ b/src/components/Section.astro
@@ -0,0 +1,21 @@
+---
+import slugify from "slugify";
+
+interface Props {
+ title: string;
+ id?: string;
+ tag?: "h2" | "h3" | "h4";
+}
+
+const { title, id = slugify(title, { lower: true }), tag: Tag = "h2" } = Astro.props;
+---
+
+
+
diff --git a/src/components/Section.jsx b/src/components/Section.jsx
deleted file mode 100644
index 0b78c964..00000000
--- a/src/components/Section.jsx
+++ /dev/null
@@ -1,23 +0,0 @@
-import React from "react";
-import slugify from "slugify";
-
-function Section({ title, children, id, tag: Tag = "h2" }) {
- return (
- <>
-
- {children}
- >
- );
-}
-
-export default Section;
diff --git a/src/components/SocialLinks.astro b/src/components/SocialLinks.astro
new file mode 100644
index 00000000..2a46a991
--- /dev/null
+++ b/src/components/SocialLinks.astro
@@ -0,0 +1,36 @@
+---
+import { FaFacebook, FaLinkedin, FaReddit, FaTelegram, FaTwitter } from "react-icons/fa";
+import { site } from "../site.config";
+
+interface Props {
+ title: string;
+ path: string;
+}
+
+const { title, path } = Astro.props;
+const url = encodeURIComponent(new URL(path, site.url).href);
+const text = encodeURIComponent(title);
+const shares = [
+ ["reddit", `https://www.reddit.com/submit?url=${url}&title=${text}`, FaReddit],
+ ["twitter", `https://twitter.com/intent/tweet?url=${url}&text=${text}`, FaTwitter],
+ ["facebook", `https://www.facebook.com/sharer/sharer.php?u=${url}`, FaFacebook],
+ ["linkedin", `https://www.linkedin.com/sharing/share-offsite/?url=${url}`, FaLinkedin],
+ ["telegram", `https://t.me/share/url?url=${url}&text=${text}`, FaTelegram],
+] as const;
+---
+
+
+ {shares.map(([name, href, Icon]) => (
+
+ ))}
+
diff --git a/src/components/SocialLinks/SocialLinks.jsx b/src/components/SocialLinks/SocialLinks.jsx
deleted file mode 100644
index 31bcfbb9..00000000
--- a/src/components/SocialLinks/SocialLinks.jsx
+++ /dev/null
@@ -1,65 +0,0 @@
-import React, { useMemo } from "react";
-import { IconContext } from "react-icons";
-import {
- FacebookShareButton,
- LinkedinShareButton,
- TwitterShareButton,
- TelegramShareButton,
- RedditShareButton,
-} from "react-share";
-import {
- FaReddit,
- FaTwitter,
- FaFacebook,
- FaLinkedin,
- FaTelegram,
-} from "react-icons/fa";
-import urljoin from "url-join";
-import config from "../../../data/SiteConfig";
-
-function SocialLinks({ title, excerpt, path, mobile }) {
- const url = urljoin(config.siteUrl, config.pathPrefix, path);
-
- const iconSize = useMemo(() => ({ size: mobile ? 36 : 48 }), [mobile]);
- return (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- );
-}
-
-export default SocialLinks;
diff --git a/src/components/Tags.jsx b/src/components/Tags.jsx
new file mode 100644
index 00000000..a0bf2eff
--- /dev/null
+++ b/src/components/Tags.jsx
@@ -0,0 +1,12 @@
+/** @param {{ tags?: string[] }} props */
+export default function Tags({ tags = [] }) {
+ if (tags.length === 0) {
+ // invisible dummy badge keeps the space for tags
+ return ;
+ }
+ return tags.map((tag) => (
+
+ {tag}
+
+ ));
+}
diff --git a/src/components/common/Tags.jsx b/src/components/common/Tags.jsx
deleted file mode 100644
index 4c468419..00000000
--- a/src/components/common/Tags.jsx
+++ /dev/null
@@ -1,17 +0,0 @@
-import React from "react";
-import { Badge } from "reactstrap";
-
-function Tags({ tags }) {
- return tags.length === 0 ? (
- // invisible dummy badge to keep the space for tags
-
- ) : (
- <>
- {tags.map((tag) => (
- {tag}
- ))}
- >
- );
-}
-
-export default Tags;
diff --git a/src/components/common/withLocation.jsx b/src/components/common/withLocation.jsx
deleted file mode 100644
index 0d328992..00000000
--- a/src/components/common/withLocation.jsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import React from "react";
-import { Location } from "@reach/router";
-
-// Based on https://medium.com/@chrisfitkin/how-to-get-query-string-parameter-values-in-gatsby-f714161104f
-
-/* Explicitly use property spreading for higher-order component (a component wrapping another component). */
-/* eslint-disable react/jsx-props-no-spreading */
-function withLocation(ComponentToWrap) {
- return function wrapComponent(props) {
- return (
-
- {({ location, navigate }) => (
-
- )}
-
- );
- };
-}
-
-export default withLocation;
diff --git a/src/components/modules/ModuleCard.jsx b/src/components/modules/ModuleCard.jsx
deleted file mode 100644
index 09142c43..00000000
--- a/src/components/modules/ModuleCard.jsx
+++ /dev/null
@@ -1,48 +0,0 @@
-import React from "react";
-import { FaGithub } from "react-icons/fa";
-import {
- Card,
- CardBody,
- CardSubtitle,
- CardText,
- CardTitle,
- Col,
-} from "reactstrap";
-import { GatsbyImage, getImage } from "gatsby-plugin-image";
-import Tags from "../common/Tags";
-
-function ModuleCard({ title, cover, tags, description, url }) {
- return (
-
-
- {cover ? (
-
- ) : (
- ""
- )}
-
-
-
-
-
- {title}
-
- {description}
-
-
- View on GitHub
-
-
-
- );
-}
-
-export default ModuleCard;
diff --git a/src/components/modules/ModuleListing.jsx b/src/components/modules/ModuleListing.jsx
deleted file mode 100644
index e1a97d1c..00000000
--- a/src/components/modules/ModuleListing.jsx
+++ /dev/null
@@ -1,30 +0,0 @@
-import React from "react";
-import { Col, Row } from "reactstrap";
-import ModuleCard from "./ModuleCard";
-
-function ModuleListing({ modules, defaultCover }) {
- return (
-
-
- {modules.map(
- ({
- name,
- moduleTxt: { tags, description: moduleDescription },
- description: repoDescription,
- url,
- }) => (
-
- )
- )}
-
-
- );
-}
-
-export default ModuleListing;
diff --git a/src/components/modules/ModulePagination.jsx b/src/components/modules/ModulePagination.jsx
deleted file mode 100644
index e8c91ebe..00000000
--- a/src/components/modules/ModulePagination.jsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import React from "react";
-import { Pagination, PaginationItem, PaginationLink, Row } from "reactstrap";
-
-function ModulePagination({ currentLetter, availableLetters }) {
- const alphabet = [..."abcdefghijklmnopqrstuvwxyz"];
-
- return (
-
-
- {alphabet.map((letter) => (
-
-
- {letter.toUpperCase()}
-
-
- ))}
-
-
- );
-}
-
-export default ModulePagination;
diff --git a/src/components/modules/useJsSearch.jsx b/src/components/modules/useJsSearch.jsx
deleted file mode 100644
index 3d2e5fc4..00000000
--- a/src/components/modules/useJsSearch.jsx
+++ /dev/null
@@ -1,28 +0,0 @@
-import * as JsSearch from "js-search";
-
-// Based on https://www.dolthub.com/blog/2021-11-29-gatsby-search-and-pagination/
-
-function useJsSearch(modules) {
- // Search configuration
- const dataToSearch = new JsSearch.Search("name");
- // TODO: understand how JsSearch works and which parameters we want to use here
- dataToSearch.indexStrategy = new JsSearch.AllSubstringsIndexStrategy();
- dataToSearch.sanitizer = new JsSearch.LowerCaseSanitizer();
-
- // Fields to search
- dataToSearch.addIndex("name");
- dataToSearch.addIndex(["moduleTxt", "description"]);
- dataToSearch.addIndex(["moduleTxt", "tags"]);
-
- dataToSearch.addDocuments(modules);
-
- function search(query) {
- return dataToSearch.search(query);
- }
-
- return {
- search,
- };
-}
-
-export default useJsSearch;
diff --git a/src/content.config.ts b/src/content.config.ts
new file mode 100644
index 00000000..9a52bea7
--- /dev/null
+++ b/src/content.config.ts
@@ -0,0 +1,65 @@
+import { defineCollection } from "astro:content";
+import { glob } from "astro/loaders";
+import { z } from "astro/zod";
+import kebabCase from "lodash.kebabcase";
+import { terasologyEngine, terasologyModules } from "./loaders/github";
+import { trelloCards } from "./loaders/trello";
+
+const issue = z.object({
+ title: z.string(),
+ author: z.string(),
+ tags: z.array(z.string()),
+ date: z.string(),
+ url: z.string(),
+});
+
+const blog = defineCollection({
+ // Slug = kebab-cased title, as on the Gatsby site (/blog/).
+ loader: glob({
+ base: "./blog",
+ pattern: "*/index.md",
+ generateId: ({ data }) => kebabCase(String(data.title)),
+ }),
+ schema: ({ image }) =>
+ z.object({
+ posttype: z.literal("blog"),
+ title: z.string(),
+ cover: image(),
+ description: z.string().optional(),
+ author: z.string(),
+ date: z.coerce.date(),
+ tags: z.array(z.string()).default([]),
+ }),
+});
+
+const modules = defineCollection({
+ loader: terasologyModules(),
+ schema: z.object({
+ name: z.string(),
+ url: z.string(),
+ description: z.string(),
+ moduleDescription: z.string(),
+ tags: z.array(z.string()),
+ issues: z.array(issue),
+ }),
+});
+
+const engineIssues = defineCollection({ loader: terasologyEngine(), schema: issue });
+
+const trello = defineCollection({
+ loader: trelloCards(),
+ schema: z.object({
+ name: z.string(),
+ url: z.string(),
+ listId: z.string(),
+ index: z.number(),
+ tags: z.array(z.string()),
+ excerpt: z.string(),
+ avatarUrl: z.string().optional(),
+ githubProfile: z.string().optional(),
+ timeZone: z.string().optional(),
+ countryCode: z.string().optional(),
+ }),
+});
+
+export const collections = { blog, modules, engineIssues, trello };
diff --git a/src/env.d.ts b/src/env.d.ts
new file mode 100644
index 00000000..2ed0df0a
--- /dev/null
+++ b/src/env.d.ts
@@ -0,0 +1,3 @@
+declare module "lodash.kebabcase" {
+ export default function kebabCase(input: string): string;
+}
diff --git a/src/hooks/useSiteMetadata.jsx b/src/hooks/useSiteMetadata.jsx
deleted file mode 100644
index 70ad5c4d..00000000
--- a/src/hooks/useSiteMetadata.jsx
+++ /dev/null
@@ -1,23 +0,0 @@
-import { graphql, useStaticQuery } from "gatsby";
-
-// TODO: make this a higher-order component to allow wrapping components
-// export default withLocation(withSiteMetadata(Component))
-export const useSiteMetadata = () => {
- const data = useStaticQuery(graphql`
- query {
- site {
- siteMetadata {
- title
- description
- twitterUsername
- image
- siteUrl
- }
- }
- }
- `);
-
- return data.site.siteMetadata;
-};
-
-export default useSiteMetadata;
diff --git a/src/integrations/blog-assets.ts b/src/integrations/blog-assets.ts
new file mode 100644
index 00000000..21574909
--- /dev/null
+++ b/src/integrations/blog-assets.ts
@@ -0,0 +1,58 @@
+import { createReadStream, existsSync } from "node:fs";
+import { cp, readdir, readFile } from "node:fs/promises";
+import path from "node:path";
+import { fileURLToPath } from "node:url";
+import type { AstroIntegration } from "astro";
+import kebabCase from "lodash.kebabcase";
+
+/** Map of post slug -> post directory; slug = kebab-cased frontmatter title. */
+async function postDirs(blogDir: string): Promise> {
+ const dirs = new Map();
+ for (const dir of await readdir(blogDir)) {
+ const md = path.join(blogDir, dir, "index.md");
+ if (!existsSync(md)) continue;
+ const title = /^title:\s*["']?(.*?)["']?\s*$/m.exec(await readFile(md, "utf8"))?.[1];
+ if (title) dirs.set(kebabCase(title), path.join(blogDir, dir));
+ }
+ return dirs;
+}
+
+/**
+ * Serves files co-located with a post (raw-HTML / sources that Astro's
+ * markdown pipeline leaves untouched) at /blog//, like Gatsby's
+ * copy-linked-files did.
+ */
+export default function blogAssets(): AstroIntegration {
+ let root: string;
+ return {
+ name: "blog-assets",
+ hooks: {
+ "astro:config:done": ({ config }) => {
+ root = fileURLToPath(config.root);
+ },
+ "astro:server:setup": async ({ server }) => {
+ const dirs = await postDirs(path.join(root, "blog"));
+ server.middlewares.use((req, res, next) => {
+ const m = /^\/blog\/([^/]+)\/([^/?]+\.[a-z0-9]+)(?:\?.*)?$/i.exec(req.url ?? "");
+ const file = m && dirs.get(m[1]) && path.join(dirs.get(m[1])!, decodeURIComponent(m[2]));
+ if (file && !file.endsWith(".md") && existsSync(file)) {
+ createReadStream(file).pipe(res);
+ return;
+ }
+ next();
+ });
+ },
+ "astro:build:done": async ({ dir, logger }) => {
+ const out = fileURLToPath(dir);
+ const dirs = await postDirs(path.join(root, "blog"));
+ for (const [slug, src] of dirs) {
+ await cp(src, path.join(out, "blog", slug), {
+ recursive: true,
+ filter: (f) => !f.endsWith(".md"),
+ });
+ }
+ logger.info(`copied co-located assets of ${dirs.size} posts`);
+ },
+ },
+ };
+}
diff --git a/src/layout/css/_variables.scss b/src/layout/css/_variables.scss
deleted file mode 100644
index 83fc01cf..00000000
--- a/src/layout/css/_variables.scss
+++ /dev/null
@@ -1,9 +0,0 @@
-// Color System
-
-$primary: #08a045 !default;
-$secondary: lighten($primary, 5) !default;
-$white: #fdfdfd !default;
-$gray: darken($white, 2) !default;
-$gray-2: darken($white, 75) !default;
-$black: #0f1211 !default;
-$lg-accent: #f2e205 !default;
diff --git a/src/layout/css/style.scss b/src/layout/css/style.scss
deleted file mode 100644
index c28deb9b..00000000
--- a/src/layout/css/style.scss
+++ /dev/null
@@ -1,17 +0,0 @@
-@import "variables";
-@import "layout";
-@import "typography";
-@import "cards";
-@import "buttons";
-@import "footer";
-@import "header";
-@import "search";
-@import "posts";
-@import "media";
-@import "mediaPagination";
-@import "download";
-@import "home";
-@import "socialLinks";
-@import "Modal";
-@import "programs";
-@import "modules";
diff --git a/src/layout/index.jsx b/src/layout/index.jsx
deleted file mode 100644
index 960528f2..00000000
--- a/src/layout/index.jsx
+++ /dev/null
@@ -1,37 +0,0 @@
-import React from "react";
-import { Container } from "reactstrap";
-import config from "../../data/SiteConfig";
-import Header from "../components/Header/Header";
-import Footer from "../components/Footer/Footer";
-
-import "bootstrap/dist/css/bootstrap.min.css";
-import "./css/style.scss";
-import favicon from "../../static/logos/logo.png";
-
-// eslint-disable-next-line no-unused-vars
-function Layout({ title, children }) {
- return (
-
-
-
-
- {children}
-
-
-
- );
-}
-
-export default Layout;
-
-export function Head() {
- return (
- <>
-
-
- >
- );
-}
diff --git a/src/layouts/Layout.astro b/src/layouts/Layout.astro
new file mode 100644
index 00000000..09453d3d
--- /dev/null
+++ b/src/layouts/Layout.astro
@@ -0,0 +1,62 @@
+---
+import "bootstrap/dist/css/bootstrap.min.css";
+import "../styles/style.scss";
+import Header from "../components/Header.astro";
+import Footer from "../components/Footer.astro";
+import { site } from "../site.config";
+
+interface Props {
+ /** Heading shown above the page content. */
+ heading: string;
+ /** Document title prefix; " | Terasology". Omit for the plain site title. */
+ title?: string;
+ description?: string;
+}
+
+const { heading, title, description = site.description } = Astro.props;
+const fullTitle = title ? `${title} | ${site.title}` : site.title;
+const url = new URL(Astro.url.pathname, site.url).href;
+const image = new URL(site.logo, site.url).href;
+---
+
+
+
+
+
+
+
+
+
+
+
+
+ {fullTitle}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/lib/blog.ts b/src/lib/blog.ts
new file mode 100644
index 00000000..f4f14a94
--- /dev/null
+++ b/src/lib/blog.ts
@@ -0,0 +1,36 @@
+import { getImage } from "astro:assets";
+import { getCollection, type CollectionEntry } from "astro:content";
+import { excerpt } from "./format";
+
+export type Post = CollectionEntry<"blog">;
+
+/** Card data shared by Astro listings and the React search island. */
+export interface CardData {
+ title: string;
+ path: string;
+ cover?: string;
+ tags: string[];
+ excerpt: string;
+ author?: string;
+ date?: string;
+ type: "blog" | "project";
+}
+
+export async function getPosts(): Promise {
+ const posts = await getCollection("blog");
+ return posts.sort((a, b) => b.data.date.getTime() - a.data.date.getTime());
+}
+
+export async function toCard(post: Post): Promise {
+ const cover = await getImage({ src: post.data.cover, width: 600, format: "webp" });
+ return {
+ title: post.data.title,
+ path: `/blog/${post.id}`,
+ cover: cover.src,
+ tags: post.data.tags,
+ excerpt: excerpt(post.body),
+ author: post.data.author,
+ date: post.data.date.toISOString(),
+ type: "blog",
+ };
+}
diff --git a/src/lib/format.ts b/src/lib/format.ts
new file mode 100644
index 00000000..12d0af26
--- /dev/null
+++ b/src/lib/format.ts
@@ -0,0 +1,42 @@
+const MONTHS = [
+ "January",
+ "February",
+ "March",
+ "April",
+ "May",
+ "June",
+ "July",
+ "August",
+ "September",
+ "October",
+ "November",
+ "December",
+];
+
+/** "MMMM DD, YYYY" in UTC, matching the Gatsby site's moment format. */
+export function formatDate(value: Date | string | undefined): string {
+ if (!value) return "";
+ const d = new Date(value);
+ if (Number.isNaN(d.getTime())) return "";
+ const day = String(d.getUTCDate()).padStart(2, "0");
+ return `${MONTHS[d.getUTCMonth()]} ${day}, ${d.getUTCFullYear()}`;
+}
+
+/** Plain-text excerpt of markdown/HTML, like gatsby-transformer-remark's. */
+export function excerpt(source = "", length = 120): string {
+ const text = source
+ .replace(/<[^>]*>/g, " ")
+ .replace(/```[\s\S]*?```/g, " ")
+ .replace(/!\[[^\]]*\]\([^)]*\)/g, " ")
+ .replace(/\[([^\]]*)\]\([^)]*\)/g, "$1")
+ .replace(/\[([^\]]*)\]\[[^\]]*\]/g, "$1")
+ .replace(/^\s*\[[^\]]+\]:.*$/gm, " ")
+ .replace(/[#>*_`~|]/g, "")
+ .replace(/ /g, " ")
+ .replace(/\s+/g, " ")
+ .trim();
+ if (text.length <= length) return text;
+ const cut = text.slice(0, length);
+ const space = cut.lastIndexOf(" ");
+ return `${space > 0 ? cut.slice(0, space) : cut}β¦`;
+}
diff --git a/src/lib/gallery.ts b/src/lib/gallery.ts
new file mode 100644
index 00000000..ecac79aa
--- /dev/null
+++ b/src/lib/gallery.ts
@@ -0,0 +1,39 @@
+import { statSync } from "node:fs";
+import { join } from "node:path";
+import { getImage } from "astro:assets";
+import type { ImageMetadata } from "astro";
+
+export const PER_PAGE = 9;
+
+export interface GalleryImage {
+ name: string;
+ date: string;
+ thumb: string;
+ full: string;
+}
+
+const files = import.meta.glob<{ default: ImageMetadata }>("../assets/gallery/*.jpg", {
+ eager: true,
+});
+
+/** All gallery images, newest file first (like the Gatsby site's modifiedTime sort). */
+export async function getGalleryImages(): Promise {
+ const entries = Object.entries(files).map(([path, mod]) => {
+ const name = path
+ .split("/")
+ .pop()!
+ .replace(/\.jpg$/, "");
+ // import.meta.url points into the build output, so resolve from the project root
+ const mtime = statSync(join(process.cwd(), "src/assets/gallery", `${name}.jpg`)).mtime;
+ return { name, mtime, image: mod.default };
+ });
+ entries.sort((a, b) => b.mtime.getTime() - a.mtime.getTime() || a.name.localeCompare(b.name));
+ return Promise.all(
+ entries.map(async ({ name, mtime, image }) => ({
+ name,
+ date: mtime.toISOString(),
+ thumb: (await getImage({ src: image, width: 600, format: "webp" })).src,
+ full: (await getImage({ src: image, width: 1200, format: "webp" })).src,
+ })),
+ );
+}
diff --git a/src/lib/trello.ts b/src/lib/trello.ts
new file mode 100644
index 00000000..0a750183
--- /dev/null
+++ b/src/lib/trello.ts
@@ -0,0 +1,19 @@
+import { getCollection } from "astro:content";
+import type { CardData } from "./blog";
+
+/** Cards of one Trello list in board order. */
+export async function cardsOfList(listId: string) {
+ const cards = await getCollection("trello", (c) => c.data.listId === listId);
+ return cards.sort((a, b) => a.data.index - b.data.index);
+}
+
+/** Project cards for PostListing (default cover, no author/date). */
+export async function projectCards(listId: string): Promise {
+ return (await cardsOfList(listId)).map((c) => ({
+ title: c.data.name,
+ path: `/projects/${c.id}`,
+ tags: c.data.tags,
+ excerpt: c.data.excerpt,
+ type: "project",
+ }));
+}
diff --git a/src/lib/useLocationSearch.js b/src/lib/useLocationSearch.js
new file mode 100644
index 00000000..df05fb59
--- /dev/null
+++ b/src/lib/useLocationSearch.js
@@ -0,0 +1,14 @@
+import { useSyncExternalStore } from "react";
+
+const subscribe = (onChange) => {
+ window.addEventListener("popstate", onChange);
+ return () => window.removeEventListener("popstate", onChange);
+};
+
+/** The current `?query` string; "" on the server and during hydration so markup matches. */
+export const useLocationSearch = () =>
+ useSyncExternalStore(
+ subscribe,
+ () => window.location.search,
+ () => "",
+ );
diff --git a/src/loaders/github.ts b/src/loaders/github.ts
new file mode 100644
index 00000000..39843ba9
--- /dev/null
+++ b/src/loaders/github.ts
@@ -0,0 +1,187 @@
+import type { Loader, LoaderContext } from "astro/loaders";
+
+const CACHE_HOURS = 12;
+
+const ISSUE_FIELDS = `
+ id
+ title
+ author { login }
+ labels(first: 10) { nodes { name } }
+ updatedAt
+ url
+`;
+
+const MODULES_QUERY = `
+query Modules($cursor: String) {
+ organization(login: "Terasology") {
+ repositories(orderBy: {field: NAME, direction: ASC}, first: 20, after: $cursor) {
+ nodes {
+ id
+ name
+ url
+ description
+ moduleTxt: object(expression: "develop:module.txt") { ... on Blob { text } }
+ issues(first: 25, filterBy: {labels: "Good First Issue", states: OPEN}) {
+ nodes { ${ISSUE_FIELDS} }
+ }
+ }
+ pageInfo { hasNextPage endCursor }
+ }
+ }
+}`;
+
+const ENGINE_QUERY = `
+query Engine {
+ organization(login: "MovingBlocks") {
+ repository(name: "Terasology") {
+ issues(first: 10, filterBy: {labels: "Good First Issue", states: OPEN}, orderBy: {field: UPDATED_AT, direction: DESC}) {
+ nodes { ${ISSUE_FIELDS} }
+ }
+ }
+ }
+}`;
+
+interface RawIssue {
+ id: string;
+ title: string;
+ author: { login: string } | null;
+ labels: { nodes: { name: string }[] };
+ updatedAt: string;
+ url: string;
+}
+
+export interface Issue {
+ title: string;
+ author: string;
+ tags: string[];
+ date: string;
+ url: string;
+}
+
+const toIssue = (i: RawIssue): Issue => ({
+ title: i.title,
+ author: i.author?.login ?? "(deleted user)",
+ tags: i.labels.nodes.map((l) => l.name),
+ date: i.updatedAt,
+ url: i.url,
+});
+
+async function gql(token: string, query: string, variables = {}): Promise {
+ const res = await fetch("https://api.github.com/graphql", {
+ method: "POST",
+ headers: { authorization: `bearer ${token}`, "content-type": "application/json" },
+ body: JSON.stringify({ query, variables }),
+ });
+ if (!res.ok) throw new Error(`GitHub GraphQL ${res.status} ${res.statusText}`);
+ const json = (await res.json()) as { data: T; errors?: { message: string }[] };
+ if (json.errors?.length) throw new Error(json.errors.map((e) => e.message).join("; "));
+ return json.data;
+}
+
+/**
+ * Wraps a fetch in the shared policy: reuse store data younger than 12h,
+ * and without GITHUB_TOKEN (or on fetch errors) keep whatever is stored.
+ */
+function cachedLoader(
+ name: string,
+ fetchEntries: (token: string) => Promise<{ id: string; data: object }[]>,
+): Loader {
+ return {
+ name,
+ load: async ({ store, meta, logger, parseData, generateDigest }: LoaderContext) => {
+ const last = Number(meta.get("lastFetched") ?? 0);
+ if (store.keys().length > 0 && Date.now() - last < CACHE_HOURS * 3600e3) {
+ logger.info(`using cached data (${store.keys().length} entries)`);
+ return;
+ }
+ const token = process.env.GITHUB_TOKEN;
+ if (!token) {
+ logger.warn(`GITHUB_TOKEN not set; keeping ${store.keys().length} cached entries`);
+ return;
+ }
+ let entries;
+ try {
+ entries = await fetchEntries(token);
+ } catch (err) {
+ logger.warn(`GitHub fetch failed (${err}); keeping cached entries`);
+ return;
+ }
+ store.clear();
+ for (const { id, data } of entries) {
+ const parsed = await parseData({ id, data: data as Record });
+ store.set({ id, data: parsed, digest: generateDigest(parsed) });
+ }
+ meta.set("lastFetched", String(Date.now()));
+ logger.info(`loaded ${entries.length} entries from GitHub`);
+ },
+ };
+}
+
+const MODULE_TAGS: [string, string][] = [
+ ["isTutorial", "Tutorial"],
+ ["isAsset", "Asset"],
+ ["isLibrary", "Library"],
+ ["isSpecial", "Special"],
+ ["isRendering", "Rendering"],
+ ["isAugmentation", "Augmentation"],
+ ["isServerSideOnly", "Server"],
+ ["isGameplay", "Gameplay"],
+];
+
+interface RawRepo {
+ name: string;
+ url: string;
+ description: string | null;
+ moduleTxt: { text: string } | null;
+ issues: { nodes: RawIssue[] };
+}
+
+export const terasologyModules = () =>
+ cachedLoader("terasology-modules", async (token) => {
+ const repos: RawRepo[] = [];
+ let cursor: string | undefined;
+ for (;;) {
+ const { organization } = await gql<{
+ organization: {
+ repositories: {
+ nodes: RawRepo[];
+ pageInfo: { hasNextPage: boolean; endCursor: string };
+ };
+ };
+ }>(token, MODULES_QUERY, { cursor });
+ repos.push(...organization.repositories.nodes);
+ if (!organization.repositories.pageInfo.hasNextPage) break;
+ cursor = organization.repositories.pageInfo.endCursor;
+ }
+ return repos.flatMap((repo) => {
+ if (!repo.moduleTxt) return []; // not a module repository
+ let txt: Record;
+ try {
+ txt = JSON.parse(repo.moduleTxt.text);
+ } catch {
+ console.warn(`[terasology-modules] cannot parse module.txt of ${repo.url}`);
+ return [];
+ }
+ return [
+ {
+ id: repo.name,
+ data: {
+ name: repo.name,
+ url: repo.url,
+ description: repo.description ?? "",
+ moduleDescription: (txt.description as string) ?? "",
+ tags: MODULE_TAGS.filter(([k]) => txt[k]).map(([, t]) => t),
+ issues: repo.issues.nodes.map(toIssue),
+ },
+ },
+ ];
+ });
+ });
+
+export const terasologyEngine = () =>
+ cachedLoader("terasology-engine", async (token) => {
+ const { organization } = await gql<{
+ organization: { repository: { issues: { nodes: RawIssue[] } } };
+ }>(token, ENGINE_QUERY);
+ return organization.repository.issues.nodes.map((i) => ({ id: i.id, data: toIssue(i) }));
+ });
diff --git a/src/loaders/trello.ts b/src/loaders/trello.ts
new file mode 100644
index 00000000..cd1cb399
--- /dev/null
+++ b/src/loaders/trello.ts
@@ -0,0 +1,71 @@
+import type { Loader } from "astro/loaders";
+import { excerpt } from "../lib/format";
+
+// Public boards: https://trello.com/b/5QQGHuTt (ideas), https://trello.com/b/wdOVNQgo (mentors)
+export const LISTS = {
+ readyIdeas: "5c3aab0bd640fe19e4069de5",
+ ongoingProjects: "60ddd7cf64da4b3ee8c5a2e9",
+ mentors: "5eb715b48caa18614425c25e",
+} as const;
+
+const FIELDS = {
+ github: "5eb71b3551de3a59ce8d9bd8",
+ timeZone: "5eb71b53f52d88487f550e83",
+ country: "5eb71b7081a67c3b58ea67ed",
+};
+
+interface RawCard {
+ id: string;
+ name: string;
+ desc: string;
+ url: string;
+ labels: { name: string }[];
+ attachments?: { url: string; mimeType: string | null; name: string }[];
+ customFieldItems?: { idCustomField: string; value?: { text?: string } }[];
+}
+
+/** Cards of the listed Trello lists; keeps cached cards if Trello is unreachable. */
+export const trelloCards = (): Loader => ({
+ name: "trello-cards",
+ load: async ({ store, logger, parseData, generateDigest, renderMarkdown }) => {
+ const entries: { card: RawCard; listId: string; index: number }[] = [];
+ try {
+ for (const listId of Object.values(LISTS)) {
+ const res = await fetch(
+ `https://api.trello.com/1/lists/${listId}/cards?fields=id,name,desc,url,labels` +
+ "&attachments=true&attachment_fields=url,name,mimeType&customFieldItems=true",
+ );
+ if (!res.ok) throw new Error(`Trello ${res.status} for list ${listId}`);
+ const cards = (await res.json()) as RawCard[];
+ cards.forEach((card, index) => entries.push({ card, listId, index }));
+ }
+ } catch (err) {
+ logger.warn(`Trello fetch failed (${err}); keeping ${store.keys().length} cached cards`);
+ return;
+ }
+ store.clear();
+ for (const { card, listId, index } of entries) {
+ const field = (id: string) =>
+ card.customFieldItems?.find((f) => f.idCustomField === id)?.value?.text;
+ const avatar = card.attachments?.find((a) => /\.(png|jpe?g|gif|webp)$/i.test(a.name));
+ const data = await parseData({
+ id: card.id,
+ data: {
+ name: card.name,
+ url: card.url,
+ listId,
+ index,
+ tags: card.labels.map((l) => l.name),
+ excerpt: excerpt(card.desc, 140),
+ avatarUrl: avatar?.url,
+ githubProfile: field(FIELDS.github),
+ timeZone: field(FIELDS.timeZone),
+ countryCode: field(FIELDS.country)?.toLowerCase(),
+ },
+ });
+ const rendered = await renderMarkdown(card.desc);
+ store.set({ id: card.id, data, rendered, digest: generateDigest({ data, desc: card.desc }) });
+ }
+ logger.info(`loaded ${entries.length} Trello cards`);
+ },
+});
diff --git a/src/pages/404.astro b/src/pages/404.astro
new file mode 100644
index 00000000..a493544a
--- /dev/null
+++ b/src/pages/404.astro
@@ -0,0 +1,8 @@
+---
+import Layout from "../layouts/Layout.astro";
+---
+
+
+
+ No goo to be found on this block...
+
diff --git a/src/pages/404.jsx b/src/pages/404.jsx
deleted file mode 100644
index c4033123..00000000
--- a/src/pages/404.jsx
+++ /dev/null
@@ -1,18 +0,0 @@
-import React from "react";
-import Layout from "../layout";
-import config from "../../data/SiteConfig";
-
-const error404 = () => (
-
-
-
- No goo to be found on this block...
-
-
-);
-
-export default error404;
-
-export function Head() {
- return {`Not Found | ${config.siteTitle}`} ;
-}
diff --git a/src/pages/blog/[...page].astro b/src/pages/blog/[...page].astro
new file mode 100644
index 00000000..0dc6a220
--- /dev/null
+++ b/src/pages/blog/[...page].astro
@@ -0,0 +1,31 @@
+---
+import type { GetStaticPaths, Page } from "astro";
+import Layout from "../../layouts/Layout.astro";
+import BlogList from "../../components/BlogList.jsx";
+import { getPosts, toCard, type CardData } from "../../lib/blog";
+
+export const getStaticPaths = (async ({ paginate }) => {
+ const posts = await getPosts();
+ const cards = await Promise.all(posts.map(toCard));
+ const authors = [...new Set(posts.map((p) => p.data.author))];
+ const tags = [...new Set(posts.flatMap((p) => p.data.tags))];
+ return paginate(cards, { pageSize: 27, props: { authors, tags } });
+}) satisfies GetStaticPaths;
+
+const { page, authors, tags } = Astro.props as {
+ page: Page;
+ authors: string[];
+ tags: string[];
+};
+---
+
+
+
+
diff --git a/src/pages/blog/[slug].astro b/src/pages/blog/[slug].astro
new file mode 100644
index 00000000..9acfd1ab
--- /dev/null
+++ b/src/pages/blog/[slug].astro
@@ -0,0 +1,34 @@
+---
+import { Image } from "astro:assets";
+import { render } from "astro:content";
+import Layout from "../../layouts/Layout.astro";
+import SocialLinks from "../../components/SocialLinks.astro";
+import { getPosts, type Post } from "../../lib/blog";
+import { formatDate } from "../../lib/format";
+
+export async function getStaticPaths() {
+ const posts = await getPosts();
+ return posts.map((post) => ({ params: { slug: post.id }, props: { post } }));
+}
+
+const { post } = Astro.props as { post: Post };
+const { Content } = await render(post);
+const { title, author, date, cover, description } = post.data;
+---
+
+
+
+
Posted by {author} on {formatDate(date)}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/blog/search-index.json.ts b/src/pages/blog/search-index.json.ts
new file mode 100644
index 00000000..5bd28ba3
--- /dev/null
+++ b/src/pages/blog/search-index.json.ts
@@ -0,0 +1,17 @@
+import type { APIRoute } from "astro";
+import { getPosts, toCard } from "../../lib/blog";
+import { excerpt } from "../../lib/format";
+
+// Full-text index for the blog search island, fetched only when searching.
+export const GET: APIRoute = async () => {
+ const posts = await getPosts();
+ const index = await Promise.all(
+ posts.map(async (post) => ({
+ ...(await toCard(post)),
+ content: excerpt(post.body, Number.MAX_SAFE_INTEGER),
+ })),
+ );
+ return new Response(JSON.stringify(index), {
+ headers: { "content-type": "application/json" },
+ });
+};
diff --git a/src/pages/contribute.astro b/src/pages/contribute.astro
new file mode 100644
index 00000000..fe6532d5
--- /dev/null
+++ b/src/pages/contribute.astro
@@ -0,0 +1,249 @@
+---
+import { getCollection } from "astro:content";
+import Layout from "../layouts/Layout.astro";
+import Section from "../components/Section.astro";
+import IssueCard from "../components/IssueCard.astro";
+import LinkList from "../components/LinkList.astro";
+import PostListing from "../components/PostListing.jsx";
+import { LISTS } from "../loaders/trello";
+import { projectCards } from "../lib/trello";
+
+const byDateDesc = (a: { date: string }, b: { date: string }) => b.date.localeCompare(a.date);
+
+const ongoingProjects = await projectCards(LISTS.ongoingProjects);
+const engineIssues = (await getCollection("engineIssues")).map((e) => e.data).sort(byDateDesc);
+const moduleIssues = (await getCollection("modules"))
+ .flatMap(({ data }) =>
+ data.issues.map((issue) => ({ ...issue, module: { name: data.name, url: data.url } })),
+ )
+ .sort(byDateDesc)
+ .slice(0, 10);
+
+const wiki = "https://terasology.org/Terasology/#/";
+const engineTree =
+ "https://github.com/MovingBlocks/Terasology/tree/develop/engine/src/main/java/org/terasology/engine/";
+const discord = "https://discordapp.com/invite/Terasology";
+---
+
+
+
+
+
+ All beginnings are difficult, but the below mentioned learning resources for{" "}
+
+ Workspace Setup
+ {" "}
+ and{" "}
+
+ Terasology Engine & Module Land
+ {" "}
+ should help you to get started and set yourself up for success.
+
+
+ To get started with your first contribution, you will also find our current{" "}
+
+ Hot Topics
+ {" "}
+ below that you can consider joining.
+
+
+ Make sure to also join our{" "}
+
+ Discord
+ {" "}
+ to get answers to your questions and help with any issues you might face.
+
+
+
+
+
+
+
+ Setting up your Terasology Workspace is the first step in your journey as a Terasology
+ contributor. Follow the Contributor Quickstart and make sure you understand our multi-repo
+ setup.
+
+
+ If you are new to Git and GitHub, we also recommend to especially get familiar with the
+ Git branching basics and GitHub forking workflow.
+
+
+ Further, remember that all submissions must be licensed under Apache License, Version 2.0,
+ that we encourage certain best practices regarding code style, commits and pull requests,
+ and that we maintain a code of conduct.
+
+
+
+
+
+
+
+
+
+
+
+ We recommend to start contributing in Module Land rather than the Terasology Engine,
+ especially if you do not have a lot of experience with Java or have not worked with an
+ already existing and big codebase yet. However, the following concepts are important for
+ both areas:
+
+
+
+
+
+ Contributing to Terasology's Module Land requires basic Java knowledge and interest
+ in UI/UX, world generation or gameplay mechanics. Browse through our existing modules, see
+ what we already have and what we might still be missing.
+
+
+ To get started, you should make yourself familiar with module development and testing.
+ Furthermore, you should to learn about module dependencies and world generation.
+
+
+
+ Jump below to our{" "}
+
+ Good First Issues in Module Land
+
+ .
+
+
+
+
+ Contributing to the Terasology Engine requires being very comfortable with Java and
+ ideally having expertise in game engine topics like rendering, networking and concurrency,
+ as well as in-game physics and AI technology.
+
+
+ To get started, you should make yourself familiar with the codebase itself and any
+ specific areas within it that match your interest. Most of the engine-related
+ documentation is in-code.
+
+
+
+ Jump below to our{" "}
+
+ Good First Issues in Engine
+
+ .
+
+
+
+
+
+
+
+
+ While you are free to roam our codebase and contribute in any area you would like, below
+ are some tasks and topics that we encourage you to consider. Their scope and feasibility
+ are potentially more realistic than a goal you might set for yourself without knowing the
+ depths and intricacies of our codebase.
+
+
+
+ {ongoingProjects.length !== 0 && (
+
+
+
+
+ Find our currently ongoing efforts below. Come talk to us on our{" "}
+
+ Discord
+ {" "}
+ if you would like to join one of them. You can also propose your own project ideas.
+
+
+
+
+
+ )}
+
+
+
+
+ Find some of our module-land issues below. If you would like to work on one of them,
+ start a draft PR for it. You can also view the full list on{" "}
+
+ GitHub
+
+ .
+
+
+
+
+ {moduleIssues.map((issue) => (
+
+ ))}
+
+
+
+
+
+
+ Find some of our engine issues below. If you would like to work on one of them, start a
+ draft PR for it. You can also view the full list on{" "}
+
+ GitHub
+
+ .
+
+
+
+
+ {engineIssues.map((issue) => (
+
+ ))}
+
+
+
+
diff --git a/src/pages/contribute.jsx b/src/pages/contribute.jsx
deleted file mode 100644
index efeac00c..00000000
--- a/src/pages/contribute.jsx
+++ /dev/null
@@ -1,641 +0,0 @@
-import React, { useMemo } from "react";
-import { graphql, Link } from "gatsby";
-import {
- Row,
- Col,
- Card,
- CardBody,
- CardHeader,
- CardSubtitle,
- CardTitle,
-} from "reactstrap";
-import moment from "moment";
-import { IconContext } from "react-icons";
-import { FaGithub } from "react-icons/fa";
-import PostListing from "../components/PostListing/PostListing";
-import Section from "../components/Section";
-import SEO from "../components/SEO/SEO";
-import Layout from "../layout";
-import Tags from "../components/common/Tags";
-
-function GettingStarted({ data }) {
- function toCardData(project, defaultCover) {
- const { id, name: title, labels, childMarkdownRemark } = project;
- const { excerpt } = childMarkdownRemark;
- const posttype = "project";
- const tags = labels.map((l) => l.name);
- const cover = defaultCover;
- return { posttype, title, path: `/projects/${id}`, excerpt, tags, cover };
- }
-
- const defaultCover = data.projectCover;
- const ongoingProjects = data.ongoingProjects.nodes.map((project) =>
- toCardData(project, defaultCover)
- );
-
- const engine = data.engineIssues.nodes[0];
- const engineIssues = engine.issues.nodes
- .map((issue) => {
- const { title, author, labels, updatedAt, url } = issue;
- const login = author?.login || "(deleted user)";
- const { nodes } = labels;
- const tags = nodes.flatMap((node) => node.name);
- return { title, author: login, tags, date: updatedAt, url };
- })
- .sort((a, b) =>
- new Date(a.date).getTime() <= new Date(b.date).getTime() ? 1 : 0
- );
- const moduleIssues = data.moduleIssues.nodes
- .filter((module) => module.issues.nodes.length !== 0)
- .flatMap((module) => {
- const { name, url: moduleUrl, issues } = module;
- return issues.nodes.map((issue) => {
- const { title, author, labels, updatedAt, url } = issue;
- const login = author?.login || "(deleted user)";
- const { nodes } = labels;
- const tags = nodes.flatMap((node) => node.name);
- return {
- module: name,
- moduleUrl,
- title,
- author: login,
- tags,
- date: updatedAt,
- url,
- };
- });
- })
- .sort((a, b) =>
- new Date(a.date).getTime() <= new Date(b.date).getTime() ? 1 : 0
- );
-
- const githubIconSize = useMemo(() => ({ size: "4em" }), []);
- return (
-
-
-
-
- All beginnings are difficult, but the below mentioned learning
- resources for{" "}
-
- Workspace Setup
-
- {` and `}
-
- Terasology Engine & Module Land
- {" "}
- should help you to get started and set yourself up for success.
-
-
- To get started with your first contribution, you will also find our
- current{" "}
-
- Hot Topics
-
- {` below that you can consider joining.`}
-
-
- Make sure to also join our{" "}
-
- Discord
- {" "}
- to get answers to your questions and help with any issues you might
- face.
-
-
-
-
-
-
-
- Setting up your Terasology Workspace is the first step in your
- journey as a Terasology contributor. Follow the Contributor
- Quickstart and make sure you understand our multi-repo setup.
-
-
- If you are new to Git and GitHub, we also recommend to especially
- get familiar with the Git branching basics and GitHub forking
- workflow.
-
-
- Further, remember that all submissions must be licensed under
- Apache License, Version 2.0, that we encourage certain best
- practices regarding code style, commits and pull requests, and
- that we maintain a code of conduct.
-
-
-
-
-
-
-
-
-
-
-
- We recommend to start contributing in Module Land rather than the
- Terasology Engine, especially if you do not have a lot of
- experience with Java or have not worked with an already existing
- and big codebase yet. However, the following concepts are
- important for both areas:
-
-
-
-
-
- Contributing to {`Terasology's Module Land`} requires basic
- Java knowledge and interest in UI/UX, world generation or gameplay
- mechanics. Browse through our existing modules, see what we
- already have and what we might still be missing.
-
-
- To get started, you should make yourself familiar with module
- development and testing. Furthermore, you should to learn about
- module dependencies and world generation.
-
-
-
- Jump below to our{" "}
-
- Good First Issues in Module Land
-
- .
-
-
-
-
- Contributing to the Terasology Engine requires being very
- comfortable with Java and ideally having expertise in game engine
- topics like rendering, networking and concurrency, as well as
- in-game physics and AI technology.
-
-
- To get started, you should make yourself familiar with the
- codebase itself and any specific areas within it that match your
- interest. Most of the engine-related documentation is in-code.
-
-
-
- Jump below to our{" "}
-
- Good First Issues in Engine
-
- .
-
-
-
-
-
-
-
-
- While you are free to roam our codebase and contribute in any area
- you would like, below are some tasks and topics that we encourage
- you to consider. Their scope and feasibility are potentially more
- realistic than a goal you might set for yourself without knowing
- the depths and intricacies of our codebase.
-
-
-
- {ongoingProjects.length !== 0 ? (
-
-
-
-
- Find our currently ongoing efforts below. Come talk to us on
- our{" "}
-
- Discord
- {" "}
- if you would like to join one of them. You can also propose
- your own project ideas.
-
-
-
-
-
- ) : null}
-
-
-
-
- );
-}
-export default GettingStarted;
-
-export const pageQuery = graphql`
- query pageQuery {
- ongoingProjects: allTrelloCard(
- filter: { list_id: { eq: "60ddd7cf64da4b3ee8c5a2e9" } }
- sort: { index: ASC }
- ) {
- nodes {
- id
- list_id
- name
- labels {
- name
- }
- childMarkdownRemark {
- excerpt
- }
- }
- }
- moduleIssues: allTerasologyModule {
- nodes {
- name
- url
- issues {
- nodes {
- id
- title
- author {
- login
- }
- labels {
- nodes {
- name
- }
- }
- updatedAt
- url
- }
- }
- }
- }
- engineIssues: allTerasologyEngine {
- nodes {
- issues {
- nodes {
- id
- title
- author {
- login
- }
- labels {
- nodes {
- name
- }
- }
- updatedAt
- url
- }
- }
- }
- }
- projectCover: file(name: { eq: "defaultCardcover" }, ext: { eq: ".jpg" }) {
- childImageSharp {
- gatsbyImageData
- }
- }
- site {
- siteMetadata {
- title
- }
- }
- }
-`;
-
-export function Head({ data }) {
- return (
-
- );
-}
diff --git a/src/pages/downloads.astro b/src/pages/downloads.astro
new file mode 100644
index 00000000..03486744
--- /dev/null
+++ b/src/pages/downloads.astro
@@ -0,0 +1,28 @@
+---
+import Layout from "../layouts/Layout.astro";
+import Section from "../components/Section.astro";
+import Download from "../components/Download.jsx";
+
+const requirements = [
+ ["System (OS)", "Windows, MacOS, Linux (64 bit)"],
+ ["Processor (CPU)", "dual-core CPU"],
+ ["Memory (RAM)", "2 GB"],
+ ["Storage (HDD/SSD)", "1 GB"],
+ [
+ "Graphics (GPU)",
+ "Intel HD Graphics (Gen 7) or GeForce 8xxx series (or higher) or Radeon HD 2000 series (or higher) with OpenGL 3.3",
+ ],
+];
+---
+
+
+
+
+ {requirements.map(([key, value]) => (
+
+ ))}
+
+
diff --git a/src/pages/downloads.jsx b/src/pages/downloads.jsx
deleted file mode 100644
index db21667b..00000000
--- a/src/pages/downloads.jsx
+++ /dev/null
@@ -1,17 +0,0 @@
-import React from "react";
-import Layout from "../layout";
-import Download from "../components/Download/Download";
-import config from "../../data/SiteConfig";
-import SEO from "../components/SEO/SEO";
-
-const download = () => (
-
-
-
-);
-
-export default download;
-
-export function Head() {
- return ;
-}
diff --git a/src/pages/gallery/[...page].astro b/src/pages/gallery/[...page].astro
new file mode 100644
index 00000000..5d9972b2
--- /dev/null
+++ b/src/pages/gallery/[...page].astro
@@ -0,0 +1,22 @@
+---
+import type { GetStaticPaths, Page } from "astro";
+import Layout from "../../layouts/Layout.astro";
+import Gallery from "../../components/Gallery.jsx";
+import { getGalleryImages, PER_PAGE, type GalleryImage } from "../../lib/gallery";
+
+export const getStaticPaths = (async ({ paginate }) =>
+ paginate(await getGalleryImages(), { pageSize: PER_PAGE })) satisfies GetStaticPaths;
+
+const { page } = Astro.props as { page: Page };
+---
+
+
+
+
diff --git a/src/pages/index.astro b/src/pages/index.astro
new file mode 100644
index 00000000..01827630
--- /dev/null
+++ b/src/pages/index.astro
@@ -0,0 +1,143 @@
+---
+import { FaDiscord, FaRegArrowAltCircleRight } from "react-icons/fa";
+import Layout from "../layouts/Layout.astro";
+import Section from "../components/Section.astro";
+import HighlightBox from "../components/HighlightBox.astro";
+import PostListing from "../components/PostListing.jsx";
+import { getPosts, toCard } from "../lib/blog";
+import tunnel from "../assets/gallery/Light_at_the_End_of_the_Tunnel.jpg";
+import village from "../assets/gallery/Quiet_Village.jpg";
+import water from "../assets/gallery/Flowing_Water.jpg";
+
+const recent = await Promise.all((await getPosts()).slice(0, 3).map(toCard));
+const discord = "https://discordapp.com/invite/Terasology";
+const engineLand = "/contribute#terasology-engine-and-module-land";
+---
+
+
+
+
+
+
+
What is Terasology?
+
An open source voxel world - imagine the possibilities!
+
+ The Terasology project was born from a Minecraft-inspired tech demo in 2011. Over the
+ years it has been a playground for different kinds of technical experiments and proof of
+ concepts. The community strives to make Terasology a stable platform for various types
+ of gameplay settings in a voxel world.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The project was founded in 2011 by Benjamin "Begla" Glatzel while researching
+ procedural terrain generation and effective rendering techniques. He succeeded in
+ creating a minecraft-like demo engine, the foundation stone for what Terasology is
+ today.
+
+
+ We are always on the lookout for contributors with expertise in rendering,
+ networking and concurrency, as well as in-game physics and AI technology.
+
+
+ If you are interested in game engine development, come check out our{" "}
+
+ Terasology Engine & Module Land
+
+ .
+
+
+
+
+
+
+ From the ground up, Terasology was built to be very modular and support different
+ kinds of gameplay ideas. We still host a large number of modules under the
+ "Terasology" GitHub organization providing basic and advanced gameplay content as
+ well as world generation options and technical libraries.
+
+
+ Combining these modules allows to create very different kinds of gameplay in our
+ voxel worlds. The possibilities are manifold and range from crafting- or
+ trading-oriented survival over capture-the-flag to puzzle-style experiences and
+ tower defenses.
+
+
+ We especially appreciate expertise or interest in UI/UX, world generation or
+ well-thought out gameplay mechanics, but also always have an open ear for crazy
+ ideas for existing or new modules and gameplay content.
+
+
+ If you are interested in gameplay development, come check out our{" "}
+
+ Terasology Engine & Module Land
+
+ .
+
+
+
+
+
+
+ The Terasology community is a diverse mix of software developers, designers, game
+ testers, graphic artists, musicians and other open source loving "Gooeys". We value
+ a positive, inclusive and respectful environment without harassment, attacks or
+ inappropriate activities of any form.
+
+
+ We encourage and appreciate contributions from everybody, and try to accept
+ constructive criticism even by newcomers as gracefully and warmly as possible. and
+ welcoming as possible to newcomers.
+
+
+ If you want to talk to us or be the next in our group of Gooeys, come join us on our{" "}
+
+ Terasology Discord
+
+ .
+
+
+
+
+
+
+
+
diff --git a/src/pages/index.jsx b/src/pages/index.jsx
deleted file mode 100644
index 684ef3a3..00000000
--- a/src/pages/index.jsx
+++ /dev/null
@@ -1,18 +0,0 @@
-import React from "react";
-import Layout from "../layout";
-import SEO from "../components/SEO/SEO";
-import Index from "../components/Home/Index";
-
-const index = () => (
-
-
-
-
-
-);
-
-export default index;
-
-export function Head() {
- return ;
-}
diff --git a/src/pages/modules/[letter].astro b/src/pages/modules/[letter].astro
new file mode 100644
index 00000000..d48b00a7
--- /dev/null
+++ b/src/pages/modules/[letter].astro
@@ -0,0 +1,43 @@
+---
+import { getCollection } from "astro:content";
+import Layout from "../../layouts/Layout.astro";
+import ModuleListing from "../../components/ModuleListing.jsx";
+
+const ALPHABET = [..."abcdefghijklmnopqrstuvwxyz"];
+
+export async function getStaticPaths() {
+ return [..."abcdefghijklmnopqrstuvwxyz"].map((letter) => ({ params: { letter } }));
+}
+
+const { letter } = Astro.params;
+const modules = (await getCollection("modules"))
+ .map((m) => m.data)
+ .sort((a, b) => a.name.localeCompare(b.name));
+const available = new Set(modules.map((m) => m.name.charAt(0).toLowerCase()));
+const shown = modules.filter((m) => m.name.charAt(0).toLowerCase() === letter);
+---
+
+
+
+ {[0, 1].map((n) => (
+ <>
+ {n === 1 && (
+
+
+
+ )}
+
+
+
+ >
+ ))}
+
+
diff --git a/src/pages/modules/search.astro b/src/pages/modules/search.astro
new file mode 100644
index 00000000..a178c38d
--- /dev/null
+++ b/src/pages/modules/search.astro
@@ -0,0 +1,21 @@
+---
+import { getCollection } from "astro:content";
+import Layout from "../../layouts/Layout.astro";
+import ModuleSearch from "../../components/ModuleSearch.jsx";
+
+const modules = (await getCollection("modules"))
+ .map(({ data: { name, url, description, moduleDescription, tags } }) => ({
+ name,
+ url,
+ description,
+ moduleDescription,
+ tags,
+ }))
+ .sort((a, b) => a.name.localeCompare(b.name));
+---
+
+
+
+
+
+
diff --git a/src/pages/modules/search.jsx b/src/pages/modules/search.jsx
deleted file mode 100644
index 66c4b3af..00000000
--- a/src/pages/modules/search.jsx
+++ /dev/null
@@ -1,214 +0,0 @@
-import React, { useState, useEffect, useCallback } from "react";
-import { graphql, navigate } from "gatsby";
-import { Button, Col, Form, FormGroup, Input, Row } from "reactstrap";
-import Select from "react-select";
-import SEO from "../../components/SEO/SEO";
-import Layout from "../../layout";
-import ModuleListing from "../../components/modules/ModuleListing";
-import withLocation from "../../components/common/withLocation";
-import useJsSearch from "../../components/modules/useJsSearch";
-
-// TODO: factor this out into it's own component in components/modules.
-function SearchForm({ searchParams, allTags, setSearchParams }) {
- const options = allTags.sort().map((t) => ({ value: t, label: t }));
-
- return (
-
- );
-}
-
-export function Head({ data: { site } }) {
- return ;
-}
-
-function Search({ data, searchParams: initialSearchParams }) {
- const MODULES_PER_PAGE = 9;
-
- const allModules = data.modules.nodes;
- const allTags = allModules.reduce((acc, m) => {
- m.moduleTxt.tags.forEach((t) => acc.add(t));
- return acc;
- }, new Set());
-
- // build search index for all modules
- const { search } = useJsSearch(allModules);
-
- const [searchParams, setSearchParams] = useState(initialSearchParams);
- const [searchDirty, setSearchDirty] = useState(true);
- const [filteredModules, setFilteredModules] = useState(allModules);
- const [noResults, setNoResults] = useState(
- "Filter by tags or type a search term to show matching modules."
- );
-
- const updateSearchParams = useCallback(
- (params) => {
- setSearchParams(params);
- setSearchDirty(true);
- },
- [setSearchParams, setSearchDirty]
- );
-
- useEffect(() => {
- if (searchDirty) {
- const tags = searchParams.getAll("tag").filter((x) => x);
- const term = searchParams.get("term") || "";
- const hasSearchParams = term || tags.length > 0;
- let result = [];
- if (hasSearchParams) {
- // filter based on searched term
- const searchResults = term ? search(term) : allModules;
- // filter based on tags
- result = searchResults.filter((m) =>
- tags.every((t) => m.moduleTxt.tags.includes(t))
- );
- }
- setFilteredModules(result);
- setSearchDirty(false);
- navigate(`?${searchParams.toString()}`);
- }
- }, [searchDirty, searchParams, allModules, search]);
-
- useEffect(() => {
- if (!searchParams.get("term") && !searchParams.get("tag")) {
- setNoResults(
- "Filter by tags or type a search term to show matching modules."
- );
- } else if (filteredModules.length) {
- setNoResults("");
- } else {
- setNoResults("No modules found matching the search criteria.");
- }
- }, [searchParams, filteredModules]);
-
- // "Load More" functionality based on https://www.erichowey.dev/writing/load-more-button-and-infinite-scroll-in-gatsby/
- const [modules, setModules] = useState(
- filteredModules.slice(0, MODULES_PER_PAGE)
- );
- const [loadMore, setLoadMore] = useState(false);
- const [hasMore, setHasMore] = useState(allModules.length > MODULES_PER_PAGE);
-
- // reset number of shown modules when the result changes
- useEffect(() => {
- setModules(filteredModules.slice(0, MODULES_PER_PAGE));
- }, [filteredModules]);
-
- // show more results if there are more available and the user requested to load more
- useEffect(() => {
- if (loadMore && hasMore) {
- const nextModules = filteredModules.slice(
- 0,
- modules.length + MODULES_PER_PAGE
- );
- setModules(nextModules);
- }
- setLoadMore(false);
- }, [loadMore, hasMore, filteredModules, modules.length]);
-
- // compute whether there are more results to show whenever the list of results changes
- useEffect(() => {
- setHasMore(modules.length < filteredModules.length);
- }, [modules, filteredModules]);
-
- return (
-
-
-
-
-
-
-
-
-
-
- {noResults ? (
-
- {noResults}
-
- ) : null}
- {hasMore ? (
-
- setLoadMore(true)}>Load More
-
- ) : null}
-
-
- );
-}
-
-export const query = graphql`
- query AllModules {
- modules: allTerasologyModule(sort: { name: ASC }) {
- nodes {
- name
- description
- url
- moduleTxt {
- description
- tags
- }
- }
- }
- defaultCover: file(relativePath: { eq: "logos/defaultCardcover.jpg" }) {
- childImageSharp {
- gatsbyImageData
- }
- }
- site {
- metadata: siteMetadata {
- title
- }
- }
- }
-`;
-
-export default withLocation(Search);
diff --git a/src/pages/programs.astro b/src/pages/programs.astro
new file mode 100644
index 00000000..63cca1d8
--- /dev/null
+++ b/src/pages/programs.astro
@@ -0,0 +1,56 @@
+---
+import Layout from "../layouts/Layout.astro";
+import Section from "../components/Section.astro";
+import MentorCard from "../components/MentorCard.astro";
+import PostListing from "../components/PostListing.jsx";
+import { LISTS } from "../loaders/trello";
+import { cardsOfList, projectCards } from "../lib/trello";
+
+const availableProjects = await projectCards(LISTS.readyIdeas);
+const mentors = await cardsOfList(LISTS.mentors);
+---
+
+
+
+
+
+
Google Summer of Code (GSoC)
+ is a global, online program focused on bringing new contributors into open source software
+ development. GSoC Contributors work with an open source organization on a 12+ week
+ programming project under the guidance of mentors.
+
+ For more information visit{" "}
+
+ Google Summer of Code
+
+ .
+
+
+
Terasology Summer of Code (TSoC)
+ is similar to Google Summer of Code (GSoC). It is sponsored by The Terasology Foundation and
+ comes with more flexibility than GSoC. It allows for projects tailored to your skill level
+ and availability. Lower stipend than GSoC.
+
+ For more information join our{" "}
+
+ Discord
+
+ .
+
+
+
+ {availableProjects.length !== 0 && (
+
+ )}
+
+
+
+ {mentors.map((mentor) => (
+
+ ))}
+
+
+
+
diff --git a/src/pages/programs.jsx b/src/pages/programs.jsx
deleted file mode 100644
index 7f110466..00000000
--- a/src/pages/programs.jsx
+++ /dev/null
@@ -1,191 +0,0 @@
-import React from "react";
-import { Row, Col } from "reactstrap";
-import { graphql } from "gatsby";
-import moment from "moment-timezone";
-import Section from "../components/Section";
-import PostListing from "../components/PostListing/PostListing";
-import SEO from "../components/SEO/SEO";
-import Layout from "../layout";
-import MentorCards from "../components/Cards/MentorCards";
-
-function toCardData(trelloCard, defaultCover) {
- const { id, name: title, labels, childMarkdownRemark } = trelloCard;
- const { excerpt } = childMarkdownRemark;
- const posttype = "project";
- const tags = labels.map((l) => l.name);
- const cover = defaultCover;
- return { posttype, title, path: `/projects/${id}`, excerpt, tags, cover };
-}
-
-function ContributorPrograms({ data }) {
- const defaultCover = data.projectCover;
- const availableProjects = data.availableProjects.nodes.map((node) =>
- toCardData(node, defaultCover)
- );
- const defaultAvatar = data.profilePlaceholder;
- const mentorList = data.mentors.nodes.map((node) => {
- const {
- name,
- labels,
- custom_fields: customFields,
- childMarkdownRemark,
- childCardMedia,
- } = node;
- const { html } = childMarkdownRemark;
- const avatar = childCardMedia ? childCardMedia.localFile : defaultAvatar;
-
- const tags = labels.map((l) => l.name);
- const githubProfile = customFields.find(
- (field) => field.idCustomField === "5eb71b3551de3a59ce8d9bd8"
- )?.value.text;
- const timeZone = customFields.find(
- (field) => field.idCustomField === "5eb71b53f52d88487f550e83"
- )?.value.text;
- const countryCode = customFields
- .find((field) => field.idCustomField === "5eb71b7081a67c3b58ea67ed")
- ?.value.text.toLowerCase();
-
- return { name, avatar, tags, html, githubProfile, timeZone, countryCode };
- });
-
- return (
-
-
-
-
- Google Summer of Code (GSoC)
- is a global, online program focused on bringing new contributors
- into open source software development. GSoC Contributors work with
- an open source organization on a 12+ week programming project under
- the guidance of mentors.
-
- For more information visit{" "}
-
- Google Summer of Code
-
- .
-
-
- Terasology Summer of Code (TSoC)
- is similar to Google Summer of Code (GSoC). It is sponsored by The
- Terasology Foundation and comes with more flexibility than GSoC. It
- allows for projects tailored to your skill level and availability.
- Lower stipend than GSoC.
-
- For more information join our{" "}
-
- Discord
-
- .
-
-
-
- {availableProjects.length !== 0 ? (
-
- ) : null}
-
-
-
- {mentorList.map((mentor) => (
-
- ))}
-
-
-
-
- );
-}
-export default ContributorPrograms;
-
-export const pageQuery = graphql`
- query projectQuery {
- availableProjects: allTrelloCard(
- filter: { list_id: { eq: "5c3aab0bd640fe19e4069de5" } }
- sort: { index: ASC }
- ) {
- nodes {
- id
- list_id
- name
- labels {
- name
- }
- childMarkdownRemark {
- excerpt
- }
- }
- }
- mentors: allTrelloCard(
- filter: { list_id: { eq: "5eb715b48caa18614425c25e" } }
- sort: { index: ASC }
- ) {
- nodes {
- id
- list_id
- name
- labels {
- name
- }
- custom_fields {
- idCustomField
- value {
- text
- }
- }
- childMarkdownRemark {
- excerpt
- html
- }
- childCardMedia {
- localFile {
- childImageSharp {
- gatsbyImageData
- }
- }
- }
- }
- }
- projectCover: file(name: { eq: "defaultCardcover" }, ext: { eq: ".jpg" }) {
- childImageSharp {
- gatsbyImageData
- }
- }
- profilePlaceholder: file(
- name: { eq: "profile-placeholder" }
- ext: { eq: ".png" }
- ) {
- childImageSharp {
- gatsbyImageData
- }
- }
- site {
- siteMetadata {
- title
- }
- }
- }
-`;
-
-export function Head({ data }) {
- return (
-
- );
-}
diff --git a/src/pages/projects/[id].astro b/src/pages/projects/[id].astro
new file mode 100644
index 00000000..d952734a
--- /dev/null
+++ b/src/pages/projects/[id].astro
@@ -0,0 +1,30 @@
+---
+import { getCollection, render, type CollectionEntry } from "astro:content";
+import { FaTrello } from "react-icons/fa";
+import Layout from "../../layouts/Layout.astro";
+import SocialLinks from "../../components/SocialLinks.astro";
+import { LISTS } from "../../loaders/trello";
+
+export async function getStaticPaths() {
+ const projectLists: string[] = [LISTS.readyIdeas, LISTS.ongoingProjects];
+ const cards = await getCollection("trello", (c) => projectLists.includes(c.data.listId));
+ return cards.map((card) => ({ params: { id: card.id }, props: { card } }));
+}
+
+const { card } = Astro.props as { card: CollectionEntry<"trello"> };
+const { Content } = await render(card);
+const { name, url } = card.data;
+---
+
+
+
+
+
+
+
diff --git a/src/site.config.ts b/src/site.config.ts
new file mode 100644
index 00000000..6000b638
--- /dev/null
+++ b/src/site.config.ts
@@ -0,0 +1,10 @@
+export const site = {
+ title: "Terasology",
+ titleAlt: "Terasology Project | An Open Source Voxel World",
+ logo: "/logos/logo.png",
+ url: "https://terasology.org",
+ description:
+ "Terasology is a super extensible open source voxel-based game. Born from a Minecraft-inspired tech demo, it is gradually becoming a stable platform for all sorts of gameplay settings in a voxel world.",
+ themeColor: "#08a045",
+ twitterUsername: "@Terasology",
+};
diff --git a/src/layout/css/_Modal.scss b/src/styles/_Modal.scss
similarity index 92%
rename from src/layout/css/_Modal.scss
rename to src/styles/_Modal.scss
index 4d802efc..2b3e9b89 100644
--- a/src/layout/css/_Modal.scss
+++ b/src/styles/_Modal.scss
@@ -1,3 +1,5 @@
+@use "variables" as *;
+
.modal {
z-index: 9999 !important;
}
@@ -16,7 +18,7 @@
.modal {
padding-top: 10px !important;
-
+
::-webkit-scrollbar {
width: 0;
background: transparent;
diff --git a/src/layout/css/_buttons.scss b/src/styles/_buttons.scss
similarity index 64%
rename from src/layout/css/_buttons.scss
rename to src/styles/_buttons.scss
index 29834f05..fbb1e3fe 100644
--- a/src/layout/css/_buttons.scss
+++ b/src/styles/_buttons.scss
@@ -1,3 +1,5 @@
+@use "variables" as *;
+
.btn-primary {
margin-right: 1em;
border-radius: 2px;
@@ -12,7 +14,9 @@
background-color: $secondary !important;
border-color: $secondary !important;
color: $lg-accent;
- box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.05), 0 1px 5px 0 rgba(0, 0, 0, 0.1);
+ box-shadow:
+ 0 2px 4px 0 rgb(0 0 0 / 5%),
+ 0 1px 5px 0 rgb(0 0 0 / 10%);
transition: all 150ms linear;
}
@@ -22,13 +26,24 @@ a.btn-primary {
}
.btn-primary:focus {
- box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05), 0 1px 5px 0 rgba(0, 0, 0, 0.1) !important;
+ box-shadow:
+ 0 1px 2px 0 rgb(0 0 0 / 5%),
+ 0 1px 5px 0 rgb(0 0 0 / 10%) !important;
background-color: $primary !important ;
border-color: transparent;
}
.download-btn {
margin-left: 0.5em;
+
+ // Bootstrap 5 sets nav-link padding via vars on .nav, so restate the BS4 value.
+ // The old element was an , which the typography sheet sizes at 1.6rem.
+ .nav-link {
+ padding: 0.5rem 1rem;
+ font-family: "Noto Sans", sans-serif;
+ font-size: 1.6rem;
+ font-weight: 400;
+ }
}
.home-btn {
@@ -58,7 +73,7 @@ a.btn-primary {
height: 40px;
}
-@media screen and (max-width: 768px) {
+@media screen and (width <= 768px) {
.search-btn {
margin-top: 10px;
}
diff --git a/src/layout/css/_cards.scss b/src/styles/_cards.scss
similarity index 77%
rename from src/layout/css/_cards.scss
rename to src/styles/_cards.scss
index 16c15f10..2b83618d 100644
--- a/src/layout/css/_cards.scss
+++ b/src/styles/_cards.scss
@@ -1,3 +1,6 @@
+@use "sass:color";
+@use "variables" as *;
+
section {
padding: 100px 0;
}
@@ -52,7 +55,9 @@ section {
background: $white;
border: 4px;
border-radius: 2px;
- box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.2), 0 2px 10px 0 rgba(0, 0, 0, 0.2);
+ box-shadow:
+ 0 2px 5px 0 rgb(0 0 0 / 20%),
+ 0 2px 10px 0 rgb(0 0 0 / 20%);
margin-bottom: 0.5em;
}
@@ -66,7 +71,7 @@ section {
width: 100%;
height: auto;
display: block;
- border-radius: 2px 2px 0px 0px;
+ border-radius: 2px 2px 0 0;
object-fit: cover;
}
@@ -78,14 +83,10 @@ section {
min-width: 100%;
overflow: hidden;
height: 25px;
- -webkit-border-radius: 25%;
- -moz-border-radius: 25%;
- border-radius: 2px 2px 0px 0px;
+ border-radius: 2px 2px 0 0;
color: $white;
font-weight: 700;
text-align: center;
- -webkti-box-sizing: border-box;
- -moz-box-sizing: border-box;
box-sizing: border-box;
}
@@ -109,9 +110,9 @@ section {
}
.card-desc p {
- color: lighten($black, 20);
+ color: color.adjust($black, $lightness: 20%);
line-height: 1.5;
- margin: 0px;
+ margin: 0;
margin-bottom: 20px;
padding: 0;
}
@@ -121,13 +122,10 @@ section {
}
.word-break {
- -webkit-hyphens: auto;
- -moz-hyphens: auto;
- -ms-hyphens: auto;
hyphens: auto;
}
.card-spacing {
- padding-top: 0px !important;
- padding-bottom: 0px !important;
+ padding-top: 0 !important;
+ padding-bottom: 0 !important;
}
diff --git a/src/layout/css/_download.scss b/src/styles/_download.scss
similarity index 100%
rename from src/layout/css/_download.scss
rename to src/styles/_download.scss
diff --git a/src/layout/css/_footer.scss b/src/styles/_footer.scss
similarity index 62%
rename from src/layout/css/_footer.scss
rename to src/styles/_footer.scss
index 12456f1c..ffbad68f 100644
--- a/src/layout/css/_footer.scss
+++ b/src/styles/_footer.scss
@@ -1,8 +1,8 @@
+@use "variables" as *;
+
footer {
border-top: 0.25em solid $primary;
- -webkit-box-shadow: 0px -2px 20px 0px rgba(0, 0, 0, 0.05);
- -moz-box-shadow: 0px -2px 20px 0px rgba(0, 0, 0, 0.05);
- box-shadow: 0px -2px 20px 0px rgba(0, 0, 0, 0.05);
+ box-shadow: 0 -2px 20px 0 rgb(0 0 0 / 5%);
padding: 2em;
}
@@ -11,12 +11,12 @@ footer {
}
.link {
- color: rgba(0, 0, 0, 0.5);
+ color: rgb(0 0 0 / 50%);
transition: all 150ms linear;
}
.link:hover {
- color: rgba(0, 0, 0, 0.7);
+ color: rgb(0 0 0 / 70%);
transition: all 150ms linear;
}
@@ -45,15 +45,15 @@ a:hover {
}
.youtube-icon-color {
- color: #ff0000;
+ color: #f00;
}
.github-icon-color {
- color: #333333;
+ color: #333;
}
.telegram-icon-color {
- color: #0088cc;
+ color: #08c;
}
.linkedin-icon-color {
@@ -63,11 +63,11 @@ a:hover {
.gooey-icon {
width: 43px;
height: 44px;
- background-image: url("../../../static/logos/gooey-1.png");
+ background-image: url("/logos/gooey-1.png");
background-repeat: no-repeat;
background-size: cover;
}
.gooey-icon:hover {
- background-image: url("../../../static/logos/gooey_gray.png");
+ background-image: url("/logos/gooey_gray.png");
}
diff --git a/src/layout/css/_header.scss b/src/styles/_header.scss
similarity index 60%
rename from src/layout/css/_header.scss
rename to src/styles/_header.scss
index b829081c..01be862d 100644
--- a/src/layout/css/_header.scss
+++ b/src/styles/_header.scss
@@ -1,11 +1,19 @@
+@use "sass:color";
+@use "variables" as *;
+
/* Navbar Specific */
+.github-corner svg {
+ position: absolute;
+ top: 0;
+ right: 0;
+ border: 0;
+}
+
nav {
padding: 1em !important;
background: $white;
- -webkit-box-shadow: 0px 2px 20px 0px rgba(0, 0, 0, 0.05);
- -moz-box-shadow: 0px 2px 20px 0px rgba(0, 0, 0, 0.05);
- box-shadow: 0px 2px 20px 0px rgba(0, 0, 0, 0.05);
+ box-shadow: 0 2px 20px 0 rgb(0 0 0 / 5%);
}
.navbar-brand {
@@ -22,9 +30,8 @@ nav {
/* Dropdown Specific */
-.slideIn {
- -webkit-animation-name: slideIn;
- animation-name: slideIn;
+.slide-in {
+ animation-name: slide-in;
}
.dropdown-item {
@@ -41,19 +48,17 @@ nav {
.dropdown-item:active,
.dropdown-item:focus {
- background-color: darken($lg-accent, 2);
+ background-color: color.adjust($lg-accent, $lightness: -2%);
}
.dropdown-menu.show {
margin-bottom: 1em;
padding: 10px;
border: 0 solid transparent;
- -webkit-box-shadow: 0px 0px 20px 0px rgba(0, 0, 0, 0.2);
- -moz-box-shadow: 0px 0px 20px 0px rgba(0, 0, 0, 0.2);
- box-shadow: 0px 0px 20px 0px rgba(0, 0, 0, 0.2);
+ box-shadow: 0 0 20px 0 rgb(0 0 0 / 20%);
- @media (min-width: 768px) {
- &:before {
+ @media (width >= 768px) {
+ &::before {
position: absolute;
top: -5px;
left: 175px;
@@ -69,9 +74,11 @@ nav {
.text-color {
color: #6c757d;
}
+
.text-color:hover {
color: $gray-2;
}
+
.active {
color: $black;
border-bottom: 4px solid $primary;
@@ -97,45 +104,21 @@ nav {
}
/* Dropdown Animation */
-@media (min-width: 992px) {
+@media (width >= 992px) {
.animate {
animation-duration: 0.3s;
- -webkit-animation-duration: 0.3s;
animation-fill-mode: both;
- -webkit-animation-fill-mode: both;
}
}
-@keyframes slideIn {
+@keyframes slide-in {
0% {
transform: translateY(1rem);
opacity: 0;
}
100% {
- transform: translateY(0rem);
+ transform: translateY(0);
opacity: 1;
}
-
- 0% {
- transform: translateY(1rem);
- opacity: 0;
- }
-}
-
-@-webkit-keyframes slideIn {
- 0% {
- -webkit-transform: transform;
- -webkit-opacity: 0;
- }
-
- 100% {
- -webkit-transform: translateY(0);
- -webkit-opacity: 1;
- }
-
- 0% {
- -webkit-transform: translateY(1rem);
- -webkit-opacity: 0;
- }
}
diff --git a/src/layout/css/_home.scss b/src/styles/_home.scss
similarity index 51%
rename from src/layout/css/_home.scss
rename to src/styles/_home.scss
index 46d0f9b4..baf378af 100644
--- a/src/layout/css/_home.scss
+++ b/src/styles/_home.scss
@@ -1,3 +1,5 @@
+@use "variables" as *;
+
iframe {
width: 100%;
min-height: 300px;
@@ -23,22 +25,25 @@ iframe {
color: $white;
}
+// The old buttons wrapped an , so the text took the typography sheet's 1.6rem;
+// Bootstrap 5's .btn-lg font size would otherwise win on the .
+.btn.link-about {
+ font-family: "Noto Sans", sans-serif;
+ font-size: 1.6rem;
+}
+
.sect-home {
padding-top: 0%;
}
.row_shadow {
- box-shadow: 0px 5px 10px 0px rgba(0, 0, 0, 0.3);
- -webkit-box-shadow: 0px 5px 10px 0px rgba(0, 0, 0, 0.3);
- -moz-box-shadow: 0px 5px 10px 0px rgba(0, 0, 0, 0.3);
+ box-shadow: 0 5px 10px 0 rgb(0 0 0 / 30%);
border-radius: 5px;
transition: box-shadow 0.3s ease-in-out;
}
.row_shadow:hover {
- box-shadow: 0px 3px 10px 0px rgba(0, 0, 0, 0.15);
- -webkit-box-shadow: 0px 3px 10px 0px rgba(0, 0, 0, 0.15);
- -moz-box-shadow: 0px 3px 10px 0px rgba(0, 0, 0, 0.15);
+ box-shadow: 0 3px 10px 0 rgb(0 0 0 / 15%);
transition: box-shadow 0.3s ease-in-out;
}
@@ -47,7 +52,7 @@ iframe {
color: $gray-2;
}
-.home-img{
+.home-img {
border-radius: 5px 5px 0 0;
cursor: initial;
}
@@ -61,31 +66,16 @@ iframe {
.about {
display: flex;
- justify-content: center;
- align-content: center;
+ place-content: center center;
align-items: center;
min-height: 300px;
flex-direction: column;
}
-.about_bg {
- background-image: url("../../../static/images/Going_Uphill.jpg");
- width: 100%;
- height: 400px;
- background-repeat: no-repeat;
- background-size: cover;
- background-position: right;
- border-radius: 5px;
-}
-
.about__bg-overlay {
width: 100%;
height: 400px;
- background: linear-gradient(
- 0deg,
- rgba(17, 191, 86, 0.1) 0%,
- rgba(5, 173, 73, 0.7) 0%
- );
+ background: linear-gradient(0deg, rgb(17 191 86 / 10%) 0%, rgb(5 173 73 / 70%) 0%);
color: $white;
text-align: center;
padding-top: 2rem;
@@ -109,38 +99,22 @@ section p {
}
.ts-gradient-background-start {
- background: linear-gradient(
- 0deg,
- rgba(17, 191, 86, 0.1) 0%,
- rgba(5, 173, 73, 0.9) 0%
- );
+ background: linear-gradient(0deg, rgb(17 191 86 / 10%) 0%, rgb(5 173 73 / 90%) 0%);
}
.ts-gradient-background-end {
- background: linear-gradient(
- 90deg,
- rgba(17, 191, 86, 0.1) 0%,
- rgba(5, 173, 73, 0.9) 0%
- );
+ background: linear-gradient(90deg, rgb(17 191 86 / 10%) 0%, rgb(5 173 73 / 90%) 0%);
}
-// Align with Bootstrap's responsive breakpoints,
+// Align with Bootstrap's responsive breakpoints,
// https://getbootstrap.com/docs/4.6/layout/overview/#responsive-breakpoints
-@media (min-width: 768px) {
+@media (width >= 768px) {
.ts-gradient-background-start {
- background: linear-gradient(
- 270deg,
- rgba(17, 191, 86, 0.2) 43%,
- rgba(5, 173, 73, 0.9) 65%
- );
+ background: linear-gradient(270deg, rgb(17 191 86 / 20%) 43%, rgb(5 173 73 / 90%) 65%);
}
.ts-gradient-background-end {
- background: linear-gradient(
- 90deg,
- rgba(17, 191, 86, 0.2) 43%,
- rgba(5, 173, 73, 0.9) 65%
- );
+ background: linear-gradient(90deg, rgb(17 191 86 / 20%) 43%, rgb(5 173 73 / 90%) 65%);
}
}
diff --git a/src/layout/css/_layout.scss b/src/styles/_layout.scss
similarity index 78%
rename from src/layout/css/_layout.scss
rename to src/styles/_layout.scss
index bc9f5247..b5b5fe32 100644
--- a/src/layout/css/_layout.scss
+++ b/src/styles/_layout.scss
@@ -1,7 +1,14 @@
+@use "variables" as *;
+
* {
box-sizing: border-box;
}
+// Bootstrap 5 dropped .text-justify
+.text-justify {
+ text-align: justify;
+}
+
html,
body {
font-size: 10px;
@@ -32,4 +39,4 @@ a {
.ts-anchor {
scroll-margin-top: 72px;
-}
\ No newline at end of file
+}
diff --git a/src/layout/css/_media.scss b/src/styles/_media.scss
similarity index 67%
rename from src/layout/css/_media.scss
rename to src/styles/_media.scss
index 3b3c2c1f..a7d3cae8 100644
--- a/src/layout/css/_media.scss
+++ b/src/styles/_media.scss
@@ -5,12 +5,12 @@
width: 100vw;
height: 100vh;
backdrop-filter: blur(5px);
- background-color: rgba(41, 41, 41, 0.8);
+ background-color: rgb(41 41 41 / 80%);
display: flex;
align-items: center;
justify-content: space-around;
- bottom: 0px;
- left: 0px;
+ bottom: 0;
+ left: 0;
}
.lightbox {
@@ -20,7 +20,7 @@
}
.carousel-caption {
- background-color: rgba(41, 41, 41, 0.3);
+ background-color: rgb(41 41 41 / 30%);
}
.carousel-indicators li {
@@ -29,16 +29,6 @@
border-color: white;
}
-@-webkit-keyframes zoom {
- from {
- -webkit-transform: scale(0);
- }
-
- to {
- -webkit-transform: scale(1);
- }
-}
-
@keyframes zoom {
from {
transform: scale(0);
@@ -47,4 +37,4 @@
to {
transform: scale(1);
}
-}
\ No newline at end of file
+}
diff --git a/src/layout/css/_mediaPagination.scss b/src/styles/_mediaPagination.scss
similarity index 93%
rename from src/layout/css/_mediaPagination.scss
rename to src/styles/_mediaPagination.scss
index 4801bf0b..6185ad3c 100644
--- a/src/layout/css/_mediaPagination.scss
+++ b/src/styles/_mediaPagination.scss
@@ -1,3 +1,5 @@
+@use "variables" as *;
+
.page-section {
list-style-type: none;
justify-content: center;
diff --git a/src/layout/css/_modules.scss b/src/styles/_modules.scss
similarity index 64%
rename from src/layout/css/_modules.scss
rename to src/styles/_modules.scss
index 60f8a346..591d244b 100644
--- a/src/layout/css/_modules.scss
+++ b/src/styles/_modules.scss
@@ -1,3 +1,5 @@
+@use "variables" as *;
+
.module-container {
dl,
ol,
@@ -14,7 +16,11 @@
justify-content: center;
}
+ // Bootstrap 5 sizes .page-link at 1rem (10px on this site); the old took 1.6rem.
.page-link {
+ padding: 0.5rem 0.75rem;
+ font-family: "Noto Sans", sans-serif;
+ font-size: 1.6rem;
color: $primary;
border: none;
background-color: transparent;
@@ -25,13 +31,14 @@
background-color: $gray;
}
- .page-item.active .page-link {
- background-color: $primary;
- color: $white;
- }
-
.page-item.disabled .page-link {
background-color: transparent;
color: $gray-2;
}
+
+ // After .disabled so the current letter stays marked even when it has no modules.
+ .page-item.active .page-link {
+ background-color: $primary;
+ color: $white;
+ }
}
diff --git a/src/layout/css/_posts.scss b/src/styles/_posts.scss
similarity index 63%
rename from src/layout/css/_posts.scss
rename to src/styles/_posts.scss
index f95daaad..5e82a060 100644
--- a/src/layout/css/_posts.scss
+++ b/src/styles/_posts.scss
@@ -1,3 +1,6 @@
+@use "sass:color";
+@use "variables" as *;
+
.post-meta {
display: flex;
flex-direction: column;
@@ -9,6 +12,8 @@
}
.post-content img {
+ max-width: 100%;
+ height: auto;
display: block;
margin-left: auto;
margin-right: auto;
@@ -16,11 +21,13 @@
.post-cover {
border-radius: 5px;
- box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.05), 0 1px 5px 0 rgba(0, 0, 0, 0.1);
+ box-shadow:
+ 0 4px 8px 0 rgb(0 0 0 / 5%),
+ 0 1px 5px 0 rgb(0 0 0 / 10%);
}
.title span {
- color: lighten($gray-2, 10);
+ color: color.adjust($gray-2, $lightness: 10%);
}
.title * {
diff --git a/src/layout/css/_programs.scss b/src/styles/_programs.scss
similarity index 100%
rename from src/layout/css/_programs.scss
rename to src/styles/_programs.scss
diff --git a/src/layout/css/_search.scss b/src/styles/_search.scss
similarity index 90%
rename from src/layout/css/_search.scss
rename to src/styles/_search.scss
index 233b884b..1d75bc1b 100644
--- a/src/layout/css/_search.scss
+++ b/src/styles/_search.scss
@@ -1,6 +1,6 @@
#search-form > div {
- padding-top: 0px;
- padding-bottom: 0px;
+ padding-top: 0;
+ padding-bottom: 0;
}
.search-input,
diff --git a/src/layout/css/_socialLinks.scss b/src/styles/_socialLinks.scss
similarity index 65%
rename from src/layout/css/_socialLinks.scss
rename to src/styles/_socialLinks.scss
index 8b6d70b6..55b62c67 100644
--- a/src/layout/css/_socialLinks.scss
+++ b/src/styles/_socialLinks.scss
@@ -1,9 +1,7 @@
.social-links {
display: flex;
- flex-direction: row;
- flex-wrap: wrap;
- justify-content: center;
- align-content: center;
+ flex-flow: row wrap;
+ place-content: center center;
align-items: center;
margin: 15px 0;
}
diff --git a/src/layout/css/_typography.scss b/src/styles/_typography.scss
similarity index 63%
rename from src/layout/css/_typography.scss
rename to src/styles/_typography.scss
index 160cb4f2..cbcc2acd 100644
--- a/src/layout/css/_typography.scss
+++ b/src/styles/_typography.scss
@@ -1,59 +1,59 @@
-@import url("https://fonts.googleapis.com/css?family=Noto+Sans:400,700");
+// Noto Sans is loaded via in Layout.astro
h1 {
- font-family: Noto Sans, sans-serif;
+ font-family: "Noto Sans", sans-serif;
font-size: 4.8828125rem;
font-weight: 700;
font-style: normal;
- letter-spacing: 0em;
+ letter-spacing: 0;
}
h2 {
- font-family: Noto Sans, sans-serif;
+ font-family: "Noto Sans", sans-serif;
font-size: 3.90625rem;
font-weight: 700;
font-style: normal;
- letter-spacing: 0em;
+ letter-spacing: 0;
}
h3 {
- font-family: Noto Sans, sans-serif;
+ font-family: "Noto Sans", sans-serif;
font-size: 3.125rem;
font-weight: 700;
font-style: normal;
- letter-spacing: 0em;
+ letter-spacing: 0;
}
h4 {
- font-family: Noto Sans, sans-serif;
+ font-family: "Noto Sans", sans-serif;
font-size: 2.5rem;
font-weight: 700;
font-style: normal;
- letter-spacing: 0em;
+ letter-spacing: 0;
}
h5 {
- font-family: Noto Sans, sans-serif;
+ font-family: "Noto Sans", sans-serif;
font-size: 2rem;
font-weight: 700;
font-style: normal;
- letter-spacing: 0em;
+ letter-spacing: 0;
}
h6 {
- font-family: Noto Sans, sans-serif;
+ font-family: "Noto Sans", sans-serif;
font-size: 1.8rem;
font-weight: 700;
font-style: normal;
- letter-spacing: 0em;
+ letter-spacing: 0;
}
h7 {
- font-family: Noto Sans, sans-serif;
+ font-family: "Noto Sans", sans-serif;
font-size: 1.5rem;
font-weight: 500;
font-style: normal;
- letter-spacing: 0em;
+ letter-spacing: 0;
}
h1 a {
@@ -89,60 +89,60 @@ h6 a {
a,
p,
li {
- font-family: Noto Sans, sans-serif;
+ font-family: "Noto Sans", sans-serif;
font-size: 1.6rem;
font-weight: 400;
font-style: normal;
- letter-spacing: 0em;
+ letter-spacing: 0;
}
-@media screen and (max-width: 768px) {
+@media screen and (width <= 768px) {
h1 {
- font-family: Noto Sans, sans-serif;
+ font-family: "Noto Sans", sans-serif;
font-size: 3.5em;
font-weight: 700;
font-style: normal;
- letter-spacing: 0em;
+ letter-spacing: 0;
}
h2 {
- font-family: Noto Sans, sans-serif;
+ font-family: "Noto Sans", sans-serif;
font-size: 2.75em;
font-weight: 700;
font-style: normal;
- letter-spacing: 0em;
+ letter-spacing: 0;
}
h3 {
- font-family: Noto Sans, sans-serif;
+ font-family: "Noto Sans", sans-serif;
font-size: 2.25em;
font-weight: 700;
font-style: normal;
- letter-spacing: 0em;
+ letter-spacing: 0;
}
h4 {
- font-family: Noto Sans, sans-serif;
+ font-family: "Noto Sans", sans-serif;
font-size: 2em;
font-weight: 700;
font-style: normal;
- letter-spacing: 0em;
+ letter-spacing: 0;
}
h5 {
- font-family: Noto Sans, sans-serif;
+ font-family: "Noto Sans", sans-serif;
font-size: 2em;
font-weight: 700;
font-style: normal;
- letter-spacing: 0em;
+ letter-spacing: 0;
}
h6 {
- font-family: Noto Sans, sans-serif;
+ font-family: "Noto Sans", sans-serif;
font-size: 1.8em;
font-weight: 700;
font-style: normal;
- letter-spacing: 0em;
+ letter-spacing: 0;
}
h1 a {
@@ -178,10 +178,10 @@ li {
a,
p,
li {
- font-family: Noto Sans, sans-serif;
+ font-family: "Noto Sans", sans-serif;
font-size: 1.6rem;
font-weight: 400;
font-style: normal;
- letter-spacing: 0em;
+ letter-spacing: 0;
}
}
diff --git a/src/styles/_variables.scss b/src/styles/_variables.scss
new file mode 100644
index 00000000..9c27f9da
--- /dev/null
+++ b/src/styles/_variables.scss
@@ -0,0 +1,10 @@
+// Color System
+@use "sass:color";
+
+$primary: #08a045;
+$secondary: color.adjust($primary, $lightness: 5%);
+$white: #fdfdfd;
+$gray: color.adjust($white, $lightness: -2%);
+$gray-2: color.adjust($white, $lightness: -75%);
+$black: #0f1211;
+$lg-accent: #f2e205;
diff --git a/src/styles/style.scss b/src/styles/style.scss
new file mode 100644
index 00000000..f754b3c4
--- /dev/null
+++ b/src/styles/style.scss
@@ -0,0 +1,16 @@
+@use "layout";
+@use "typography";
+@use "cards";
+@use "buttons";
+@use "footer";
+@use "header";
+@use "search";
+@use "posts";
+@use "media";
+@use "mediaPagination";
+@use "download";
+@use "home";
+@use "socialLinks";
+@use "Modal";
+@use "programs";
+@use "modules";
diff --git a/src/templates/Blog.jsx b/src/templates/Blog.jsx
deleted file mode 100644
index 07d03dd0..00000000
--- a/src/templates/Blog.jsx
+++ /dev/null
@@ -1,92 +0,0 @@
-import React from "react";
-import { graphql } from "gatsby";
-import { GatsbyImage } from "gatsby-plugin-image";
-import moment from "moment";
-import Layout from "../layout";
-import SocialLinks from "../components/SocialLinks/SocialLinks";
-import SEO from "../components/SEO/SEO";
-import config from "../../data/SiteConfig";
-
-export default class Blog extends React.Component {
- render() {
- const { data, pageContext } = this.props;
- const { slug } = pageContext;
- const postNode = data.markdownRemark;
- const post = postNode.frontmatter;
- if (!post.id) {
- post.id = slug;
- }
- if (!post.category_id) {
- post.category_id = config.postDefaultCategoryID;
- }
- const { date } = postNode.fields;
- return (
-
-
-
-
-
- {`Posted by ${post.author} on `}
- {moment(date).format("MMMM DD, YYYY")}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- );
- }
-}
-
-/* eslint no-undef: "off" */
-export const pageQuery = graphql`
- query BlogPostBySlug($slug: String!) {
- markdownRemark(fields: { slug: { eq: $slug } }) {
- html
- timeToRead
- excerpt
- frontmatter {
- title
- tags
- author
- cover {
- publicURL
- childImageSharp {
- gatsbyImageData
- }
- }
- }
- fields {
- slug
- date
- }
- }
- }
-`;
-
-export function Head({ data, pageContext }) {
- return (
-
- );
-}
diff --git a/src/templates/BlogList.jsx b/src/templates/BlogList.jsx
deleted file mode 100644
index ad95bff8..00000000
--- a/src/templates/BlogList.jsx
+++ /dev/null
@@ -1,170 +0,0 @@
-import React, { useState, useEffect } from "react";
-import { Link, graphql } from "gatsby";
-import { FiArrowLeft, FiArrowRight } from "react-icons/fi";
-import { Row, Col } from "reactstrap";
-import Layout from "../layout";
-import PostListing from "../components/PostListing/PostListing";
-import SEO from "../components/SEO/SEO";
-import BlogSearchForm from "../components/BlogSearchForm/BlogSearchForm";
-import SearchResults from "../components/SearchResult/SearchResult";
-import config from "../../data/SiteConfig";
-import blogList from "../generated/blog-result.json";
-
-function BlogList({ data, pageContext, location }) {
- const { blogCurrentPage, postsNumPages } = pageContext;
- const postEdges = data.allMarkdownRemark.edges;
- const blogData = blogList;
-
- const prefix = "/blog";
- const isFirst = blogCurrentPage === 1;
- const isLast = blogCurrentPage === postsNumPages;
- const prevPage =
- blogCurrentPage - 1 === 1 ? "" : (blogCurrentPage - 1).toString();
- const nextPage = (blogCurrentPage + 1).toString();
-
- const [isShown, setIsShown] = useState(false);
-
- const [results, setResults] = useState([]);
- let srcLocation = location;
- if (typeof window !== `undefined`) {
- srcLocation = location.search;
- }
- const searchQuery = new URLSearchParams(srcLocation).get("keywords") || "";
- const filterTag = new URLSearchParams(srcLocation).get("tag") || "";
- const filterAuthor = new URLSearchParams(srcLocation).get("author") || "";
- const filterdate = new URLSearchParams(srcLocation).get("date") || "";
- function escapeRegExp(string) {
- return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
- }
-
- useEffect(() => {
- if (searchQuery || filterTag || filterAuthor || filterdate) {
- setResults(
- blogData.filter((blogPost) => {
- const searchRgx = new RegExp(escapeRegExp(searchQuery), "gi");
- const tagRgx = new RegExp(escapeRegExp(filterTag), "gi");
- const authorRgx = new RegExp(escapeRegExp(filterAuthor), "gi");
- const dateRgx = new RegExp(escapeRegExp(filterdate), "gi");
- const matchedTag = blogPost.tags
- .filter((tag) => tag != null)
- .map((t) => t.match(tagRgx));
-
- return (
- (blogPost.content?.match(searchRgx) ||
- blogPost.title?.match(searchRgx)) &&
- matchedTag.toString().match(tagRgx) &&
- blogPost.author?.match(authorRgx) &&
- blogPost.date?.match(dateRgx)
- );
- })
- );
- setIsShown(true);
- } else {
- setResults([]);
- setIsShown(false);
- }
- }, [blogData, filterAuthor, filterTag, filterdate, searchQuery]);
-
- const postList = postEdges.map(({ node }) => {
- const { frontmatter, fields, excerpt } = node;
- const { posttype, tags, cover, title, author } = frontmatter;
- const { slug, date } = fields;
- return {
- posttype,
- title,
- path: `${prefix}${slug}`,
- cover,
- tags,
- excerpt,
- date,
- author,
- };
- });
-
- return (
-
-
-
- {isShown && (
-
- )}
- {!isShown &&
}
-
-
- {!isFirst && results.length === 0 && (
-
-
-
- {` Previous Page`}
-
-
- )}
- {!isLast && results.length === 0 && (
-
-
- {`Next Page `}
-
-
-
- )}
-
-
- );
-}
-
-/* eslint no-undef: "off" */
-export const blogQuery = graphql`
- query blogQuery($skip: Int!, $limit: Int!) {
- allMarkdownRemark(
- sort: { frontmatter: { date: DESC } }
- filter: { frontmatter: { posttype: { eq: "blog" } } }
- limit: $limit
- skip: $skip
- ) {
- edges {
- node {
- fields {
- slug
- date
- }
- excerpt(format: PLAIN, pruneLength: 120, truncate: true)
- timeToRead
- frontmatter {
- title
- date
- author
- tags
- posttype
- description
- cover {
- childImageSharp {
- gatsbyImageData
- }
- }
- }
- }
- }
- }
- }
-`;
-
-export default BlogList;
-
-export function Head() {
- return ;
-}
diff --git a/src/templates/Gallery.jsx b/src/templates/Gallery.jsx
deleted file mode 100644
index 5e7700d2..00000000
--- a/src/templates/Gallery.jsx
+++ /dev/null
@@ -1,243 +0,0 @@
-import React, { useState, useMemo } from "react";
-import { GatsbyImage, getImage } from "gatsby-plugin-image";
-import {
- Row,
- Col,
- Card,
- Carousel,
- CarouselItem,
- CarouselControl,
- CarouselIndicators,
- CarouselCaption,
- PaginationItem,
- PaginationLink,
-} from "reactstrap";
-import { graphql, navigate, withPrefix } from "gatsby";
-import { GiPlainSquare, GiSquare } from "react-icons/gi";
-import { ImCross } from "react-icons/im";
-import { IconContext } from "react-icons";
-import moment from "moment";
-import Layout from "../layout";
-import SEO from "../components/SEO/SEO";
-
-function Gallery({ data, pageContext, location }) {
- const prefix = "/gallery";
-
- const imageList = data.images.nodes.map((node) => {
- const { id, name, modifiedTime } = node;
- const image = getImage(node);
-
- return { image, name, id, date: modifiedTime };
- });
-
- const { galleryCurrentPage, galleryNumPages, numImages, limit } = pageContext;
- const slideNumbers = Array.from(Array(galleryNumPages).keys());
-
- const searchParams = new URLSearchParams(location.search);
-
- const closeIconAttributes = useMemo(() => ({ size: "1.5em" }), []);
- const paginationAttributes = useMemo(
- () => ({ className: "pagination-icon", size: "1.5em" }),
- []
- );
-
- // use Boolean() on purpose to set imageDisplay to a truthy value based on whether an index is given or not
- const [imageDisplay, setImageDisplay] = useState(
- Boolean(searchParams.get("index"))
- );
- const [activeIndex, setActiveIndex] = useState(
- parseInt(searchParams.get("index"), 10) || 0
- );
-
- const hideImage = () => {
- setImageDisplay(false);
- navigate(
- galleryCurrentPage === 1 ? `${prefix}` : `${prefix}/${galleryCurrentPage}`
- );
- };
-
- const showNext = () => {
- if (
- galleryCurrentPage === galleryNumPages &&
- activeIndex >= (numImages % limit) - 1
- ) {
- // continue on first page
- setActiveIndex(0);
- navigate(`${prefix}?index=0`);
- } else if (
- galleryCurrentPage !== galleryNumPages &&
- activeIndex >= limit - 1
- ) {
- // continue on next page
- setActiveIndex(0);
- navigate(`${prefix}/${galleryCurrentPage + 1}?index=0`);
- } else {
- // continue on same page
- setActiveIndex(activeIndex + 1);
- navigate(`?index=${activeIndex + 1}`);
- }
- };
-
- const showPrev = () => {
- if (activeIndex <= 0 && galleryCurrentPage === 1) {
- // continue on last page
- setActiveIndex(limit - 1);
- navigate(`${prefix}/${galleryNumPages}?index=${(numImages % limit) - 1}`);
- } else if (activeIndex <= 0 && galleryCurrentPage !== 0) {
- // continue on prev page
- setActiveIndex(limit - 1);
- navigate(
- galleryCurrentPage === 2
- ? `${prefix}?index=${limit - 1}`
- : `${prefix}/${galleryCurrentPage - 1}?index=${limit - 1}`
- );
- } else {
- // continue on same page
- setActiveIndex(activeIndex - 1);
- navigate(`?index=${activeIndex - 1}`);
- }
- };
-
- const goToIndex = (newIndex) => {
- setActiveIndex(newIndex);
- navigate(`?index=${newIndex}`);
- };
-
- const slides = imageList.map(({ id, name, date, image }) => (
-
-
-
-
- ));
-
- return (
-
- {/* Modal Carousel */}
- {imageDisplay ? (
-
-
-
-
-
-
-
-
-
-
-
-
- {slides}
-
-
-
-
-
-
- ) : (
- ""
- )}
- {/* Image Grid */}
-
-
- {imageList.map(({ image }, index) => (
-
- {
- setImageDisplay(true);
- setActiveIndex(index);
- navigate(`?index=${index}`);
- }}
- style={{ borderColor: "#08a045" }}
- >
-
-
-
- ))}
-
-
- {/* Pagination */}
-
- {slideNumbers.map((number) => (
-
-
-
- {(() => {
- if (galleryCurrentPage === number + 1) {
- return ;
- }
- return ;
- })()}
-
-
-
- ))}
-
-
- );
-}
-
-export default Gallery;
-
-export const imageQuery = graphql`
- query imageQuery($skip: Int!, $limit: Int!) {
- images: allFile(
- filter: { relativeDirectory: { eq: "images" } }
- sort: { modifiedTime: DESC }
- limit: $limit
- skip: $skip
- ) {
- nodes {
- id
- name
- modifiedTime
- childImageSharp {
- gatsbyImageData(width: 1200, placeholder: BLURRED)
- }
- }
- }
- site {
- siteMetadata {
- title
- }
- }
- }
-`;
-
-export function Head({ data: { site } }) {
- return ;
-}
diff --git a/src/templates/ModulesByLetter.jsx b/src/templates/ModulesByLetter.jsx
deleted file mode 100644
index 48022eea..00000000
--- a/src/templates/ModulesByLetter.jsx
+++ /dev/null
@@ -1,68 +0,0 @@
-import React from "react";
-import { graphql } from "gatsby";
-import { Row } from "reactstrap";
-import SEO from "../components/SEO/SEO";
-import Layout from "../layout";
-import ModuleListing from "../components/modules/ModuleListing";
-import ModulePagination from "../components/modules/ModulePagination";
-
-export function Head({ data: { site } }) {
- return ;
-}
-
-function ModulesByLetter({ data, pageContext }) {
- const { letter, availableLetters } = pageContext;
-
- return (
-
-
-
-
-
-
-
-
-
-
-
-
-
- );
-}
-
-export const query = graphql`
- query ModulesForLetter($regex: String!) {
- modules: allTerasologyModule(filter: { name: { regex: $regex } }) {
- nodes {
- name
- description
- url
- moduleTxt {
- description
- tags
- }
- }
- }
- defaultCover: file(relativePath: { eq: "logos/defaultCardcover.jpg" }) {
- childImageSharp {
- gatsbyImageData
- }
- }
- site {
- metadata: siteMetadata {
- title
- }
- }
- }
-`;
-
-export default ModulesByLetter;
diff --git a/src/templates/Project.jsx b/src/templates/Project.jsx
deleted file mode 100644
index a7fc8cb0..00000000
--- a/src/templates/Project.jsx
+++ /dev/null
@@ -1,57 +0,0 @@
-import React from "react";
-import { graphql } from "gatsby";
-import { FaTrello } from "react-icons/fa";
-import Layout from "../layout";
-import SocialLinks from "../components/SocialLinks/SocialLinks";
-import SEO from "../components/SEO/SEO";
-import config from "../../data/SiteConfig";
-
-export default class Project extends React.Component {
- render() {
- const { data, pageContext } = this.props;
- const { id } = pageContext;
- const project = data.trelloCard;
- const { name, url, childMarkdownRemark } = project;
- const { html, excerpt } = childMarkdownRemark;
- return (
-
-
-
-
- );
- }
-}
-
-/* eslint no-undef: "off" */
-export const pageQuery = graphql`
- query ProjectsById($id: String!) {
- trelloCard(id: { eq: $id }) {
- name
- url
- childMarkdownRemark {
- html
- excerpt
- }
- }
- }
-`;
-
-export function Head({ data, pageContext }) {
- return (
-
- );
-}
diff --git a/static/fonts/NotoSans-Bold.ttf b/static/fonts/NotoSans-Bold.ttf
deleted file mode 100644
index 54ad879b41b5db8b21dca1aa00a2d474697e7bf0..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 398652
zcmb5X31C!3wm)2Tx8CNFsO(bLUMVm>U-ax1V}=0?x|C!&VJ4%
zln~;;9}=-&KJcl93+J2;d^4gVfy^Z-`^=6!`d_=O}%!?qzMzn=id35
zNRQd^?-f(<1M5L^5uUdT-{(x3anmi!YB&BF{|@|$Z=62s`U$BA#0QBq?Gb!`%Zv%P
z%(kwQv+?~cSf4d>!i-5%M?UN#(y^V`@buZU=G@fLNG9X?IqctO-#BUZpWh3OBGM;k
z2@(E81hO0JjPed55*^8mS|m}BMOkl+!qT~-`+IB8XtBkTy5mbikBU?qO<7KgOG
zG)0)-zD(Y6Zs-*0E5MoC@g@C$!?BS|qxpg)8YQFMVW(MCSWmanzf#dgGpS$@DHSXh
z-NKl~CEy9wg$^gFN+}-KP+#BFy8cX@XZIbdWILuJ)zF3F3mf
zK+ng>?87%ce9s9^-HOf=isa=xyk4IpKQAv*UQrndd%Qj!ewHD~<$3v@3hMUyB8oKd
ztHaCB?7Zf`<1gL6@r!qsfBAC5x~KPU9Ik#aaNynQ%)SE`(}RE5?K*T&9!d3u0~A`3
zI^v~etN!AC^dV#IH&Ltl$rUs2yrFxq%wK%MYdxwmzIA~VwH@CnM1F^)gA}D?VRQfq
zhw?LYMV4ZtH^-Hq?h{gl{2Zf2rz;B!g5B?@_ViG(*C^)Lg>)(83;O+%ojUE^r^oD)
z6l{!1E>c}cQuuFdz1Ue*g-?f*?;YPe@TpOP(WJ{qX-P1c4@SsgB;bV5SVKoEDuX!X
zT(>t|R!J3wmgj}C6_49jQK1lZ*__vZJfr?|{^~0Rp4j`!@q5Gnx#Yp+Y`4TGyL9X@V!UDMLfUSGa@)ab|SA9>~3RrB`6)NkkRT&8whzhv~}zI14h
z@xon^zR})erk2zb$~ca$;~eLHiHM>k3yjkaF+O9Lg(etG<1PG$YGJgLuDFSnltfdB
zm0G}}vd&^P8ccedT`-BF*{rt`QvGICF<2nZ5E>(hxjxwiR?c_jR?4EVt$@xAs#}kL
zv2OWy$JFQY>5Kx!t*)HXmZE+1K5M=M~r=##vr_ExaJtJ@e%q)0bBYrWKk0j0{gxWP6OJYxPRSVZj#MQ>
zvyi-~Tc#37sMC{0;xRmH!2vi*kTtgsttP#LwF@=_}Mv`~INXThyT-&g70!$^o!!gha{6
zXrZUTo!zs->h42QQ~OwZO8p1)Tj}`B@qEZ?
zs^a>t{K<}ualBh$k~%-c|B93o+)$tB4wqF#%JXn3CBb7S!Lpo6j}puxj&f&CuuO7N
zwxF_-U0UTp-R4|DX
zT^MAiAK9rrCosgG;~p~1PQ|TuD)q8cKmQbMc4|=Ub{ionjWHtHQX6A7XI#`K73{eB
zruuRCC@idRYD(;aOJ40*`R#KBvm~fooyQB!D}{noJHJrK;ox5dchUp2lKK}+zITCo
z{A~L%TG4uY(}JZ>y}jsGwN2jf!tN!T9mdQpE8hA{oHJtVs3Gn9)FszV+5vW+*YTZn
z1lq*Qu7_xG=`Er!#X%Zl4wxW~F=IkEB<~^32FnD?DjiBlW0-ImG+&;W`}`Yp*4m@3
z|4?_U&uyZWM?U;`V(ljBp!&q
zap{E=eM%sWfLSesnm{JmWU@ELaP7P}nND_y@0vYKlbo8Opg{*j4LE~|6);8!?840e
zM^N}e7`Wn>JJdg`Ptk|y4WA#mVg0iQPw#zY!bJ63G16}AnM;?_>GV2!-`KM?>gj)-
zJnyEZ8fE0k{OqPgtMw9;r2!h!Y{3DV6}^b_)6O3q0%Eh+qZA46}Q)J+g95)qL$E(DQYb}iRW104p;?~9%9fS67V9))=r;c
z4^aSHAsconlL^4wE@U>2s2MPM46XP^t@TpD-Mma5dv0?FQP0H5S_7bF=;VNj5Gy0C
zS*bRWR#CQM{03%mVIu)XXXf2C0q{sS?6gu2I*kitd4lB%^ag*|B
zsvygX#p$w%R>kV^8mLQDOgfQR;UiRs*%?EIa&(#Tt`VAsoE`?2hQXvkSTU{;3_^9i
z!3CpX6CJD2S#*D`5>^cK_$6y522h)
zI+NWYnsipZNOcJoi$6a3^kC=X1)Pq2P`$bRPX6d+!UCO*`lMR*=)!iK$oZFP`prTs
zWF&;M{Iz@tQp>|lHHA17hu3FtHOAl#+8SeG=Y70DMr!vDViH#`%V7^@EArRsBkDGM
zJVG1kNPJ8>|KTey(>ZF(%e#bQ>O<Qf`td35ma(o7!AY37A6&v&P|Bw{q0?2<|HrML_PA{~JTB7j!J>@hjbpqn{P
zH)hZ=K^_+r%>9gibRnNZBONmdum^f_;_CZa)--^0TWEKhasM6kId!x8lvs3K@=gnmBh70pN`a?nl8ZgaPSAaR=|(dWx(jQJ!HNOs{a
zlDJMlMx!6>5GHH5uz@L=-&2T`=P>IM#sGKr;2wLul283Y{igN7Lsw6pQBvP>*IhMK
z_wO4IH%*-T=+H3@c~?Dl=n=YR|G&o2tN|4xh8JGiZ(#LJYj4=|kBZVCOY&+56!fhc
zdfh(YTmbz&A0*Y0+^Cbl<`zZ0fjV`f1nD6$+Hv`cE6;4FP5~}_r@pPuk!tX}l?ti~
zP|x8~H2{r`l;1b@@saQ0DkT8L*44W(qQU#0cJWpM|*mvDMPlUh{iOR
z308?FdbsG*UPl)>sB_M0M-QexQ$(S0v1{Y$A=DRg~E
zb3e3pHyL|4U!kQUDWJ4R#i?*R%%`@09@|iLYJeDSJ5>44kt0qF7Bk}89L={`9`zdu
zu_%&WHo;bsm?jh?12iu)=D6l%VzH}v%asUYV*V+QR-aI};-i&*srI6yX>a&WBh-jc
z(EhP-T6nYlv|w#7)Sf9ZYe^3>*aV|al4XMtasb|Yg1nkay8XS;-+%TkK6CeLnfUY
zVq1wY)#9N+spm_l;1aA5
z35p}yo)c@;UH1`6he@A^E0iEMnHn{N-;L5D8yN>#2$waL2Q}dCQ{25s(ChOEd#le3
zq@%01N}u%DH^4LLtpHYz#$E3%&4ojgO|FTSIMekh=4^d-C`Z6$_umk^(mc*Ah?!<;
zHoJ+(W`jlLwvCUu?Q-V0nC#VLc_A~9xJYM?N_@{usxx7LT_?Ru_>7VAP_{0=f(3#c
zRHq>5!)}Z?xwn4!Q%jzF`Iqy1p1bSMlXidm`48%mo0s14;MC?vCS0*|%l1DSl+rCD
z-<$O2TkSqUk)$zW7vDMw8(5DGv?4&`B$+suG`mSmH>GC+_w2@v8^JSm9p8z^5ZUlB@5v(Q
z5I*(#WK(@iwi6pLOW>50OER>vW*9?AI_#hg94SSZ-2M|yqlP_e#}2-&-^r6>)?6|4
zVYkqirqiNf-=*h5BJ3u=#{b#?Y`u1XZ(LFl8KY;kBF6zAO!CgSl}Ar6OYMWA2U&%TcU1?%VN{i
zkAoTbpfs~PlLkI#KW1)*BA_hp1^0;*peY*Fv+Ci^n|B?4V!?>I5&e5ny*R&ZnK*xS
zZSCvZia$#q-e(XyZq+R{ftn_Sdj~~x9fk~Zjwq&hGo<`(A%7s4YYXb?V?ld>G{gd4
zn|oZ$7D!y%1U~#SFsZ9u*j(I5e#+2i%o5Aak3g?QB9$Qp?pmBDDucqT1yg4&_;{Ky
zNBvs;=D*LrbK+ZrVcPo#k9~RYy_@xZDjZ$$MDB}^tIuuTbnM4p2AmnKdY5mc71YF8
zqXk4<50SbVtm=Wq?zfrsdIO;b>h;+SP9whZIHmfSQ;YXOJFu{Or-z{_aYz$|8|}EX
zxV22INSoEet&46{57Sbe&OZ4c``#5+oPKU^`)ORzy}8TBKK-}-Alqtq49D?kJ;X#f
z8juVIm|zyG9}b62M~#S1Ump{Q$!7FG8{^o(XXCgN$cY3;sytlAvm8vIuimujs;f59
ze(afY^Ft3^e&uTVO(v^e?@RG}@E8vsWA|JivlD}j$dCr{
zbNSWNG{23V0r%V7ikNu#pt++44HtXf2PMKBIDBf}oR02W3Ik+}I*@)0
z!{D_gY~OZa{1!S&4YV(#`x@1!6?gkkW=-LU=@C3zL^v9!OA&G>l+jeX1)3#Bk1z;W
z#ncvSbIS<%6KC)-p59p^HoOgz3QHYJv)P
zE9?tbu&c%YgyMm7$7PtbTs=JUnz>We!zT(HMO$W`j|GaJpZVHe^}UhT%$_Bzm_L8(
zzV_2nL(A}Mo*prJ@5k-=>}TtrORz5Rbd#P@FT)c)3H}C(z>wj`&||m#LcaY?yfmI2
z-N2X@h=gCfaqrvgL4VrMA3pM`4-UlT`Xl_J`l6YFEPgiuW0
z5*%DYh2fq+=LEC!ga}hGUMF2WW5KP{rZ2d4x+trksU1)LbSKTABK{IeH*NXjGn+PT
zd`3N`zPp0zw^1i8xlcU@B-TUPv;qki)Gd??f*Cq{x(*6gG!l#6rVCiy^^nmd&_%gj
zq+B%rN`|uKC&A7p4E^gC6fvQ5aXg~3Z?@g89zI)Wo%a6z&l>j}<2v`yBzMbwUbVL}
zbk!#HJ@tnd)wB1AtGUXhwNSZTkG4_s-qkt5o+Y7=`s_9(*DoBJTUc%KKcM$
ziT5m)(hWzKZpv+4$0Xn>SeD4D(ej#6Ex+ubANHL#a+JnK;ylpPPV%GRaHHUGT45r~
z6JfO^g-;iY3MX3T6FKuH_*%60EAZt;9(YPU{B@D7`~_)_LH(z3&9e3bQp2u>Id}-O
zLbl=|xy+&S6D5;7bb0yiOu`+y^l>qtT{Mo1i3wWZiMUA#VXOHeJf#aw05QaJ1Kgow
zmx}vyFqM26g1Gh6$y>KxarK8IH}#l4cJchmumAS;>vf|Z7`E)1)k|*eMTc!|4Q91<
zs~DeCRFzjzH}9Hi-EE^-BK7v|1f4HMB38vasnUVIc?SMj&h-
zzy+8OsHCQ)3r1wX{fZ50h70*{GW-RsMI=2rbQhq<{XYmw_8_Tp^o@ph)t%}dTC&)i
zua`3I_t2Up=8&K_b+g_@3)R=?GJ3M@Ua3KKj8RVv+jzB*(*Ezt4|~PF2-8y>8E~_-
zhVQL7>Z2w_G{`!gftVzgnKVh%riYb&vG1pG9DGu?TVNQZOA(kF`^iz16Ff*4svE!k
zPTeH*7DDPeIE&vE{~w>ca#&^mk@K^ip!L1Avv0Uon0wy!{Bw@e
zmg^^0;>ne;2e;tK1`>&;aof;^~i}iLohfFQNHAIvbyWP^Z
zLQqt{I6&14##UkXiT&*(p*atz#li-~s%cVK#fWngG1Ntq!buF#14oZ4*0VuiG)Bmm
zst{-JkP%V42vS%PZzhgyjyI4i+}ZI)G-S37b~s3;QmxEVki}qMj8mGC&3IlptejFh
z6r;lP%;Dm~`tW}HetyRwfgq+MxcP|RF#m+#v-~_dpmJfw4UZ04e8uAHBDYsedThWg
zW0wf)FRl1`Mpjm3wCd{_skxUxKF?KKknC;1Hf)g3-Hf6nh=Se03QdZsIF3>pb$OAJ
zv1@fF7LnJTFcX@jp!9$Tzb>dcafQJoTsU$2*}M5nSlvV$5;%6NdiZrsq8KC-vpbBDJq!7f!AgS7s_uOeZzb?kP5>!D31EIs}u~DQ9H5oHlcc
zKjoH~!S8oMQvgYw({^*rnG(0^8C#_kbIVAxnB#^$_r;+-Sk8s{7x-}Npu{2-u=Ycd
zFsLW&+Pk;@@i`+#(Ru3fhlTgf|NDmF+qZuyzf=2FGax-+&n}D!bS>
zyDAp1ZoYPE+Hdm(WN|)$znW;xH<3xD!x!%{Mf+!xjWn1m~folc(
zI_wE~*zX`e5F83(QiG`;x@z&>pMLsD{ru;je|}9}M*FbXRJ&*UJ=>2R!ym%8MCc+P
zbg&Pdf}$YQtvA3zlOzZv9TydeY8}nj!$To6fCiTvOmegxQJdS2V5d`|iJRfy_JCx&
zCfd^wNGTJFvWQ(OB7r<_Sy>*Dq)Vz?k(3evzoiVF&N3sWqZv6fVi}!D2WCaEZ6=iD
zg*(Q*jBM
zXkowVQwQI9VC4QmdveFtyt3^0!ucbn-=0@42G=%>TD|y*QLmR}7Zvv$QheFdjoWLw
zH4c67`6~|>RL#vV31?ric6oGSY1K8C)fd^W02zJKS#h5tK^L>~7Z++$%mf$CCW@XK
z16^dG22CdNU1_Nckdf^|Lpm?F%h%L*MRdRw!}>?BpsPpr=|6l#w9iO+VgErx`}P?!
zsCrQU!PR{S_lGE)h?=c|xbeuclM3AW(tMw2%PcN-8*Dzg@)AOvcIRy8BB$hZ29#zq
zwV5-`&E^)fWHyJw0jV$qlE)L5O<~kyT~O-5CAOAiMbLv8MRA%_lyihp&f#$j2-fEa
zm2RgLF3WL7%7q+O`XMfyw`}gRakuojuK(^2{_)x!xAvLZw)!pF@HYFsN8Rw(!|H~;
zGq%#gty^jLXSb>!Zr!SW^sJQmr$-;(T)ZUU`{C%3v;7uUsJr<8Q8&E3Pu=v_!*uL^
zwyev41G^OqKL|VJ1E6^jDUl+3iq4ebqclS&W`{C~$!^Lri6)Z^f<`KlR!X8Y-?H2y
zOtDalD-&CBaBb(Z~a<0Fu8_qz9=%FXK
z9co@jb(o)?Y_r;sp@n(TwY;;7*18p)TG^JgT4(+`4^>O{ZDj1ns(|$>I{12Qz<{yW_K#jG
zHL;&=sH=Z+?15F$v332b8|v`TF*x2Tgkwyw#0Ew45MVVLMU*w#pzG`olL5gRWv4(V
z3G`Co13{=lt%AkO7+PZ^$n{Ra&UG1%4eSIaXWmwbGHdpzx{xk8N|&e$@s;?wu;C~y
z`2|PSX7%{dqhRD>VW{vL7koXV9y28l4|Slj#+M>ckHMPhp;=t8T^Rb)Vy2Nw7%nW1
z6Hh0AQFKA!wf6a+O|B~GHuCxft6yFIM8o1nI$jvM`RK%0Szfm>k1Sp~_v$rs$KlDn
zv7sIEK{&-@qvcs9lN%F=^E0b|O1pAT+ukRBP+a67!-uM2J6ZyD2XN|r3M
zP#--qfBv&?GVgcI)mQiIarNWs8_H1N(xkRYErPa+2SIA
z;z>&5$xJeYP;3UZX0HebrIsf*ZRj`Zf8P1~zlA!rO{w{1n;3SUJ5MDRjhrhK&=24f
znMfwm#PQ--o1xm!Yl0SHL|cr
zu=5BxDl2gx@^iz&;FF>pC>b$>7QHSErLWB%m(#s(GYm#j1)cjjbS|@W@=@puQ%7;a
z(jj7rxDr_xkAbOH*yfxhOn0$^=9K2dk-OO5!sjpj;nA00eCm-`)KLGygR83t5AHA3
z{b~2UXa2Zn-=>L^CQY1p{q+~A%pOsfBnYC(V9*(fXcVnBs+YNd>5S%ZxxyceN>W6j
zW$iC%t-9hU^{U?-MTLse`85Ipz30(7S~pLvO6~j-YONx5KsUHePK@S-R
zsJbS0W$XCK*Zn;8
z)AJKr#zkniPCt3*b@vY+F{Zj|Xs_=?h~rMfvn9y(;O
zQ+NjottH-)#A~K#iWKW_C+noE?Tp&S`hQ*PAKnotY>!;T|6%1@~v>LO-NwEu5
zrrjY_EKtZYNTens?Z*=V&oC<+nH)Q%D@
zBdTZz8RNKJ@(nw!G-Rm$Teac9UthN98BsBJ|-tYSwcjonTa#6ew(YbvT2
zDJo(*>s(ne74&p*C!_v$#VaENPlJF4lvxV=H_~V!U2faMs%MS5PiT?Wv>!q#$7vya
zKAqm$%=a0ug@ryJ0oIxawS~fDoT-bm;&>q)yEW~gmFYfZ+x*Iz$K@@
z>tYQu<3J6OnvP$v7#t|jpqwXAqd7xc&M;x9bZ4cb9J*h_T>VE^%y$8Er3*3x5DV#uJukSzg{r5}g9Do8SI20fj;O$a^lX?+d7$rS88&SLsM|UIhP-&kb%?R+3{j)YKB67e|a4p
zq`~Ivm-qtz%VNmQz465mY63|M{dzIOnj-?N6N^(BAExI0dNDhD4eJ`dn9I#VIZqS>
zZ#QkZcJ?9)Qa8z8BY46b^=vXMTIe>)dZ&$~rP+LXolyzpWO_4vl0Rs3>QVk>vG{pO
zCYsDHt|f%j>}pO!&9UqykNIg8GAtHI-9DPfGMnZ36osr>4eP#p$8H$ApH;E$e_+)5
zF?-H`cnLi>su5+ZUxiikuqkwoR?pgh+4Q^jpy>c5t%DX$S+YmH>-C$2Gey7rw{>p2
zBOeFM3jz6=<;Ksfke?Za9)j?Apw$;Jz=KZ+kBgVrQLAcQh&TMUbaTb6R
zf7Y)Tvt!T@so{(H73{_iO>pIE%M-!_f>2U9<|tDEx7Crwap(>}pJ}w}ggD-~uS_(t
z3SKir6H>Yc3o57Mb;KUj5gQcr)l7>?lA;q?@ia3u+JqRi#9e8OA
zDm>3U%F4dCtJK^+aN?@_oA16&6uvyGqBj1^lWL#FTc=H7jtB}bry%4QK>)1K9qd`G
z3zB?mYHEJ4SgNQ*#R5EloM48SnqTY*cW;P=sUu}v%#q9lGWEmQ<|5Y7RIU{bGAu>O
z1B
z**N|@()S0ycmb@%%kGpQPP7OIq>vs@p}wA3QL9_?3Y|W7IKQ!~ZU$3uLVYOzq9s`g
zK(zSh4h_)Pt=&p4T4hbHsz7LmKkj^MK2m`fJWfiiA~g`Y_7_Bmr?ai0h_Z&Pt!ry72*uaIh{7fn6}5%kNEx|=EQwy>Hsoa%8L}*8nH3df2C=G_n4)+s1vkVj
z5nC1tzam+aV;dv1F+$CevPA+&IO?(i!{45?B-&s7{sfB1#(bCGO-PlbYpz8RBmLpK*|*`eQOLz=1wmG5P+Z#a
zbctrrgomF*nIO8lz5B}Z~S`4cYyyeL*
zxM&IE2klukNH2@hL~>V~%wX^-5q3=As=-TJ@+Mjia;*X2knl
z*41@frtNONY)CBXxC@KE?Oa5Q)pxZ;#OO#a`T~nqDGV*`i8XwYIU{{X_^jblnQPUMte#$mh#wHc6cjLz+)7!<9-+72R&s
zx4PX{6s1sW?zosWE@hB8Pl`VXnodE;a&8xBEG~BP@+-YOYvn{6Whk5Q21{RM9`snk
z+-F`JRb$nY9-R64#4YO{RR7WOU-j=)I(BG~KDy|uiGuUiY4c~@GJC;P+1WdL+of0B
zw{}X4y7q+nZ}k9metUvCu9F_S_5OA3)2H9D{DJ%Ke;TZ`9wL3S!tQ%7#wD~O96yrw
zR)4O^-GxgY;neP}@zRrVUV5-KBim*E%~ed7EaPV)%nxM#&LV{to8zE5TC?&mTE)=f
z52O`X1)d`r-7i|g4p+me21^*vk<=dA8s?qVb+k&4NUOM&5hBB*J(!h2(wsJ1S_U&S
zbUC>fn;EPqNetHis>0mneH)({*+(t2{Sn8-D^B=9
z^w$nTyVSJfmR5hdA#q$6u3`tVNxK|3c~gI95e@=Z7d{aQWM8y|kyv|L4aAN81pyXK
zN2@1aTgJpZuchEv;if{=)b-_{u1`rL2F4q>W4sy+;W`hTfB!dZcVa>UH1cX*j17`6@7JLA))RI9ErUlSYr~RTVq4d?R0B_l2@cU$
zpzVq8o5eU36^k6$w~m&QF`Drt$PPP;EWn0J1~|APm$zauSLC!bp;_Bn^Kz4#73YMo
z$-*Savd&J^v
z4h@Q16YKudT3SX@;_G;yFE<%Ace)M*jXY9AGhs5mpOU8e)S92n3d+9VtieQ`}h0@Y7*2qzStR*LYJeg2?o(2C;-}jYCWW#GA5GE`lg!cEPYjgIAO3OTvR4
zEzji?MEw;WT0*7(o~Kpta2M~jR=-2;;^KjZN-oC{un;u#!3}0O3U%GOSuF8W0s73B
zMl$Xe{3BOtGEzp!66KR=(O%ZvT+!*Zo4kgM42+^E=%zco@PI0q|DKfMIL=vq45#)G~+F@?
z&xA5?J3G#`I?ca=$giFTu}nJ=OLp2t5Ql(kG>BnTEk#&Flez%XWX4R8i!kJ8%-}IT
ztkxj<)3Q1t;)bGkDhV+nMED|lDm6ek!+)FyizWJHR&eUiuWYuuO%qV2T=(L%tp<)$YwV?m32&e1-Oelgh@KMlB@^y*+YeZr08
z7@`k>-w+rZIOJlqh6A3ls5~Ptj-LjPi9ros8F?)ZkKN&GgMnYeV`5N)R|d%nc=n?F
zi{LStpur2%wm7_Oz?&S%{53o#6Bs;p7B$*gWak%lLR5RRe)j}KAq69V*kfsJC`$wO
ztDWiuKhX?z!P}!a35iLA$((j6aoVldIFAJfcXp_)7e?9EGmA~P1rIKdFOSgWEKnH|
zwB>0bqbJT-kOTOoWWr~6VdoD=#|VCt-KW=E3@FNRxMhQ!;upOpv#AMH#2sdgF);hA
z#D@g0Plt%FkACE%P9Gw^KKgmK$vxQX*TURct|O#KYW7LLj<}4^~}DZDmtWR8=6ACGZS>5u@1!#a
z&VRs~=cS?pd-m*U-`m=XkN|jyH;AN>anUf^nCxtmP8afmE`yk!;WhYO*yf~|-E8(-
z{pc1Ue!D-*FZ%rkD{CN$C&sjY(9UXnPr9#$XMrKO~Kj(T|AI^-^U
ztNW}@^p(6V)SP~Pk6J8kWwOk9)sCm%KLC&DM;?l05jGw$r4`BOsvSp9?P*=2tIT~8
z{)b!YAM;i~_)7%vz#EP(oOGOQ0Spr95M2%1!#{sIFjXFr~IznF49xMBt
z8Zg|P2INf7aCrz32N@B;L^s^&a3IadO-d|5ARBRScBeJW!eo?oZFz{-vY{JD!M6**xmNnq+>hV^$+Zc#%XElT}
z#xr3Z!&FBqgrQicML9OMq6{FHEo2TbW-o{ae$i9;2^OnN#V~~+x&j7cE{pyp%th7@
zBz(<;q~MJ&ek<|#wpMMqmWY5HLZ?5d5Mb+s6tXU{ZbPdF1DWDzu2*|Y=QJi{Cn`r(ekl$OmKmMf@f2~th#>-W
zCk?e441%WjcoG=6ic7md^^wDX3YD=|hi08myt+b>~2Z$%-OW<*k^2KclL3kEL)4JJ$jG_iRs>~PVStTQP3
zs2~uGKr%HZ2WTLAk$Q+by}VL@9V|QAumi=k5Y&}E8Gr7)tZ4_WXql_F2_xxu1#iw0
z-e_+d^X3!k7bry>_qwHx-iNj;m2Rm)%#ug8s
zbl$3?t?6B$LBn^!5BC1aIDRnrX{z7x`}ireWCZ6CZ-zIC9ipxB28bq%T_EQe8`Bft
z$Fcjl)$28Bb|uD~K!mXYBYx65nrXCHtZu!}>C_8W32jYAy=e7d=!uia(~{F)kdpp&
zoFmcbaN*by%rX$q-gs60kQ=AU?S`)7M}EYJnA7gqBxyu^3`yGpnm&*Icy8$7<4ndt
zV1j12fW4yWsHL!_>TJ6745tmfX*Q47$ePr;HaW83EsFtkNg*Ht5U-MQBvf&{aSx4R
zz^m`H;l2AT;H{k}3S4E|Zrc0yF5d9CMfl-pyjSkZt3No<_S}na;1rp)`8C&?nT#di
z$0ssfFu?@DpVBqc#iNB>Yr<0m=}Y6Gsr0mDXo|z*I#YvJb^$z+=KU2st}``wNhclw
zvDAw|G8WfBR?-1rA)a4@g)Is*e7PFXL}G`d$=O^3Te(0Bk6jxmNQB4uR2W?iCZTxI
zM0s!Y>QtS>WftFaaI(BL{UlU;;Ym3l1dx9rP&&b+DvAerR*FIFNF6
zIH-jp1w@?|40y7LM$At!N>X~4(OWD9dr=zpw})IYArlND_8y=7B=sv(N2@v8^<%e#)InB38QtLYnz$xp@E}`J
zo(5Lt@E}`THQ6e3yw;kTW==#gp@dn(Bi1ocuxz?2VU(mK>_8}CxeI=fu3_NED~(P@
z4VftnMZ{^6C|(5=cXpykOCF8O&U3A)&Loz6v<=^ND8B0vahbiKTMu_?E-mQ-5|>Tf
z%0X6ZyXGD!y)nPgoiG(Hf`>|qgz@JqiZFPQi{S0)ghz{?;#4&C2zSDR6vgNrP)EaW
zJiRWVp}uPE8Bex@+ALRuj!vv&sIgoT!jGCJ`?|G9UMD;xL42M2r6ryCm2_kH6LO788K!D&&^>Z5mJ!)10xUYW
zron!CYet4mE4FZOgO@{xinNi-q9Jt5QAl$c0ZkohNo{;2kXgd`Jf}&gheNDSjt7Fh
zlBgSj!qog(O>!|87FG-UfLqI^2Aw^t%?!A?gxNIEgbZ8O!h7AI#v
z=bxzEXC1D*7&G206mN5dRDt8lTV2Z^8uH4P=H^7VE321e9k2e>9lIXfznk~G?%w}k
z|9&8`R=mKR)?9ub6=YrfJbXA0(HH7kkDz5DSRRLG5NHJ=NQ?{oxyd90hsTw#2Cp<(
z-+=N!DtJA=g2$Dw2CuX@&N3aXDZUFqa{a4;EV}?C@wB@DDhIDiG*STC>XJxmt|>NXSr_;ZaM6@MDip7o3ZRg#UQ9$O$R-B$wn@N
z+~m%_uw;V){*Yfj23SWc$u8VzmYlf7o70(;c}{h+;Z#YaBf?-T1Mz(sehnZVz7|ph
z9n5hgS)<96hCxS_fV2kXiD$Aga~RY`#6G^#uwwi
z^JC90P#{V8O~p^T7M{>z;*LXP$4+hDWZ?dyZ|9Z3jy)PvGS6Z-W!w*;SA+`_js2#cZCut$(`
zWnvW&(BQFf1cwJl%m)MzmtzrC7LG7le+`kjm<%HPJhB5@;Nq`yX%Z}x-x}DGjvwQ6
zGCNI32(kEdQnfKOHPyz^#YR#2g)Sv|b#&=a>@UMCkVKVK(p^gZ
zJ0sJSj;fsW@v+oYr|9%ykb+LsBgdB*E29-;@IJ?6Xpq@K`0OlwN98+f%}=zVg|a;?
zqad8vwGCE&?}eK;Kfh200bequVNmz^oRd-jZ#rISZnT?1zi>p9g+NBdryZezv0qg{Dr
z@{X(fojXQ{sypORuWM#5THIDdgI`^C`J3wN(!KWXw`7`AZ>m&}vO?cFNeH74j3**N
z4Fl}29tfKZBrVaa)AF6w;i9T+Zx5wM6%9L;%LW~mj-wq+lol1^jQiLsFk7W!KuOf>
z7+jKJHfDH3nEB-$hdPQ($Utv~(PQ%?Zkz%8H^Xi#!0@1C4i^B{mw-*r!T&K6=mONrfaXUJ+}dx0v9A{r1jwU3pzet;EU;J^K(6k?Cvqlg1oZ5B*TRtA|y
zn^szWp+0NT>@}f=zdGU%0
zwBs1wKtLz4Ay6tAF#$%ub4$dbU2i}|32uOV;3C!ro<@Y@*Mm77Bt2?|2}(>RCuSdL
zT}ugt0gQdjIo0Mouqzuz%VSZfvQO>Mrscz?yf|pY7u~x#xBHrJxb)`X17-m3Vd-Nu
zHX`GMSWrl^V-GsXH3a`)(~U#tf3xls`u+!*sm^S3jdKYuc2bvzsD-Bc{Fi0#VYSOa~Jez(TCQ4&dZ}OwUF=_fh7os0KBPJRcF=M-Q
zw&K%KDX+W;#(f11=U*tTICn3?6_{bDkhDyP*_=tltYGS*%uIt7orxFqp0hYEYwu%j
z3j4UQVJ#Q)!Q$QM=rCluNEdqL@?KR#hgS8vTnH^;U-Y^BCtJRrD!mrnBQLx>8ohjA
z|NaA)@xMlt?uxn>y@=!n1O%!~{tG+B!Q>RZr2WT^he@}nM`*US*aTv$w$<2<+fLbj
zuqieaik7yzT(XvSaMU+3LwK%`kB++q7|ekg)D*3;Nb9zwPuR+}ps6C^p
z^f#bVyCcg1(0f}Q4jy-}j}Q$ugCzf#LrVF7g`_a|@&ZWW#~hNMv~|G=JN-?Zc6PiA
zbU2VCHv3V~Q3V(X=GAJuI)z=8MAL+3e~Vur{%U`X|G58@{|CQ2DURmQ=A0Hx
z_sprzsmVE>b1LVD93_X6ypp`}d9(AR>3Mm)_@on=gK%ekN-NUPQ#mSC9S9{7d(5AR()IE(Lv5*#4P|;;Q>a}JSn(ci3hOC2?d#>(}AeKCQpjML(EJca!jP%MY@H}o}^+w@ipiazew>Z
z+Qb$SQBgLHQfpgC&XK+-0?Hdv(22rIlj9c@TSEGq4PevapILnJw$|dFtw`bav*NB_
z&EG!!`YW&Q+Vz*eydh3j)#VqD;68o+{OQwe=dsNJxL7Rps<4!4eA_H}sIcTA=#F1}
z%&?hY%&;CRohSy`slDldocR3@R64%tTl%%m}+`}{y=N#kLm&Sl(CPrz283y
z+E%lH!{V&;AG8Otf$Mk>lBn?qv;2y}GB%)hEe@QGb7$|VGLgpUrFgZIh%OL}<`)r!
zCiEk`e+w->K|)_Z!w-6Yo&vfo2z^1{55||U8O}zev3{%X=i-1fL?N`j$TU9K=#X%>
zU0*A%Ynv#(+2#`GsbXKXZEy#k1BBxY0fceQG!B*f0%0~q+QHh7Wr``%j8=_kchi_O
z;nFaf%aY6NL+*U<#p4=N`kK=7oHv5VlfG1y}^+G5f6>==Pjj1ln*b!d1S
z-LHmzD58hY2uAwO_o_+l+kVE}!S)-EivcM_-S9nru_?*;9{+-4Lc~*93ZD;ClMy$s
zjdsts`ABxQyU>t^9G^|>QItiyn@ruO#dIk-E?3U9n9Jlc89WkuzYwy0nCqaG-fMp*
z**_VyN_K_N2pc#8Ya%DiN<+{v0)2%kBq0yw9+Nj57Tc^(zO-d^fqKIGiu&&-Td4J=
z2=zta_^y0X{r4+g^+dtyEv-*m>8?MnzI)^O1D`LU%KFECS<%|M;+MzPtLK({E>%6f
zd?jnu!Y>&UsIkv(_>z(t5RPkb&H-djv#chMj3Xv~w7rRG=^lrq*E^=g^m+w}8m;9e
zUiHnwa-Dn9)GljFVr4ENTx|RWONqq^VX-w
zx=SGPQ9x22F0my-)FTi`%jHWZYfBK_L$u`D;vU|#xc9|#m3+w*ZOJ^oWPF$8E_#um
z_1J?nt#?U>1)KvovKMbQh{I{=I4SMos_|wHr)nU^0c?j}+}ZJct2bZbU8v|M*6KD9
zn1U4SP6kGEvi$~Iy5z_Bdz)C;!&_j+kS{)vGBO
z(TpjTTQ_d}4=usuW-l!nHL9U#-&|tX}6)|jFetcY_A_(`YuU^sv(;53d
z?HOQIq^iuPX2J%9I7kE$7Gt4Umr_J5RlP~8UG0rBT2M)Q@J*mlV5vGieb%@>@|Go
zIzb1NmT#qBe*fc#vyQBoU$=G4kfHb7v-4TJvEb)3>e1c8rQ;eGEW4#~)~({2hhJa$
zRMCKsiz+L6Rx}Q3_-Vb`uAVyk{*E8imGx_Sh5mf|q=k2bbo|;O;hKkLo6C{fz?9*T
zH_c?CUONU+BO;n7EQn3Zqp>{tGHOv#V2wMRcREk#llN|(Aer*eAPn2n@6Q?^^V==D
zhE7&VHh8fa-*|b_Z@vbLSy)_i1bIR=n8jZ@82J@3!s6h~53Hu<8$OL~RnI{Nf4yks
zhw3+TPK;@ochB&qnM+%QZ6EX>ys)U?%(r$p
zW=TUhS490*QSqQ*+C&tS63osph#pKk8W(e6R0$Wz#XZ>xU8uTcjNRk?hWR;;a*~Uv
z0xBat3PEpThJXQR;^}+TLzi873w*`@hIZs@=1iQI>F*FRRA
zRp1&h^Hy@-m5D+HVFMf>A8{oCu72<9P5zo_;Ilp$pNqcc8{u)aWMmmRxg}K%L+~#@b;|4TeRYnTDXE^
z5|Jt5q;U-%Kv2r1CDNre7}0-H{aHPU(c^XuPVu#WK6jd|R!WWYr_VId{rW~xQD>^R
z(1+0uyqeynPH*e?)wlmXACAFO=lLBKZfmNc7NJpCeY04TllK!F5Cm
z<Qhj5kf>-Pd^Fe)Qu}E
zzw(+nPt6Haf9|l#V2>>Pg9&+t!RJnXh|g(4wVX&
zNKg|Uu-)Qc#ODykuW4Rh-2=;yE_?LQrCu@TikH7#yn55-XV(@_xO>wR@tgX|ak}I7
z*DH+WZ%6#D5#bqVe2>XPVoEqHJHPX>Ehd^kH4!p8anFFc={<}K-<0I+$EDww7(rLg(jMhBVGf{9B|)?qF#i{
z(u`@DS;l}BvvaL>5uK9B0nwe_x_0;Y%QN^qZ##R1q!TqPo}`+V*8KPHYnz>R^$_)R
zJoeok?LRh6Exf7Ejn_{QiqRqW-tevC)vu*=ycVE%g?jc6k8V`Y78XAK!nP+8908=#
z5Fhf$PLB`5#YZs5+m`C#S*Q5xK)c9UrU`MvkOzrjr*7zIHZBcv7q%|0OC2hkvUff^
z=GiH?-&i(r=`)Yx93QN`9>;i+4yJu;{ypH$y+a$S(nEJledOJbCgc>lyPt@gadv4u
zo|Av4L%
zy=VQL&-y%qNAF2ZvjmJNMmO4J=cpJ<5>nHHR5mxwN5@Bs@oh3O6^8AGxxrrLO~TP7
z?^=E3kF=S7DlQVc(=VEuFD$xw!7Vj)W!vv0AKm}?5>iAAV(rJTY~Q-$q5I}MfBg=O
zP5~B^fW_m&g!yg6;?i3fajMN>8yj=9lTbVyr|Jq!Shf>WVYXJp`Te>z%$@P@E70us
zNqN#@28XS|V=te44iDq%E*|D(;L3K3PJ(%40a=4=7l1)8Xq|37?^u78kf@nOYCj>B
zp^JzcXuO4#O}lB?O=*RsJU^ZO-~x!DRU8}NbpMJ&$7g)-!XM7xOy8t$vq6X2c^PHo
zM&!gGox^4F+Vqi#-vl26BArNRbC^<7r7^Kohu&{SGDVgd&UVcj!ZKxEr8WY9Pl6gy
za#mInXEthbT?{qJ>rgmxt-$P1y;D9tdPH?}&8~P8j*fG)Z#g@nKe2sq=u;wWr2p72
z4&M65A>-ngEq`eqM?T3Qp?^P2GVi}{$;rj^`_7{L;)nEaSDvC*9(K|Y5@t_gV;z%c
zadR%>*W2w`hCoIjjQ_ogR{<-F-JdF?jYF}9(=sjwby;0KYU7#h&%TmK3yci{;D3HU
zTs2TW6Q21z3GXHCB)B-@riOz4h*g)<>LY1=x|epoVfL~|J5R-szC?b$Go??LE;TpF
zv&!c!Jxk8Vbu=ehVZD&K`VrD6zEN68#`fvq{wb49IrZrJ0QDgS<(*-j>;*lGHDEK!
zvdtw0Q7)}>+ij^NU=ILCpG5|>aYxz6Z;U#|y8@7`sPGh6mT|UbF#Da-#eM4<;1;Lv
z(GTf4`gi&_61nYho$K;j&L^JxgmiOOwKTeuU{%U017R%#DpMJoi)S!*C;IvqZ
zWtj){IULTkIUJ@GUruHw7_IXQWUJq=4_obNZoL~e2;+^>+Q@O_*toWuReZrB!o#DJ
zBFJvRal$u>O1r`LDyoQmDCQRBgG;s+m^wYY=!5S|q9kY8gt6BTBq;-jj-I%TVlmlTNW;8lnNR9FXPRj3hJ6t~K(9>dW
zFjyjoISD4r++jG`Tb-(ji~^0)Qst~+XP@>7y%lI5@~j2JCiJT;OSygw==zS+4e|)u
zpN#zC-zQwiaVgBKt6CoG8y_um`Zs#kFp6yj-dO
z?hh>D;`l1-v6r9v=kyaxK>YXn{bbN*x1XIkXV|^+u~&D~{jY<5H$MX1clzgK*ukoj
z=A3RA0gVO_8Xs~I@gA$Fotydp)!UO`Da8$uNdm#{X!%~x65fM&z^rIbAvF~Q1DPOv
z$j%WW(_$r1l0|6W(hB&7N5L2C#cN@{AOeY7Fr=h_WH$xDO62dk?8s?Oju*rxSN*uX
zfT}eP3)MPc`~WCte91C%-|9sXei9Y*-{o?vt~-VcC10Ko0G~YiSJe7Xqh}pG#_WG|
zXtZm2MUSc*L(=fk>sGFOyk1)M_4{9(lbi0OgihM!qn>d{X&pw)SL!ECo^T`jhz+9O
zg+99AYXo7m8Hn5?Ga?XXGm79OgG&aFWr75mqt0QCFcZ05r5?*)Nea1E&x+dl#7+VJRV!eR
zewWtg2nA*jIZG<|K*Z7IJ63P2C`x*Gh65KlwEsH)--DxObQjneS~k$U8z7P^|*F
z7u`3)iDCm6tqsH`dY9E`!s0e1Q!X_;jW$vkZgpmXCbu!e{e@HZWS<85`{e#z@$Q$R
z*mmEZIu!p(-L}eDzHK*a+xC*SZCU-;aEqgD3AP8@cCdZ}_V{D$V$mzi*DhuiCiYaX
zEs=$R-W{ZkJT_p4g%&U<$S(jkyaEP85C=ygmU7{=e=IFq0!(
zVvzIzTVs^7sydpGByD$v>YGq?X2SLbR8zh#RLwLJAs3ba<>_7$5qzXrB{7fh>c`$Qn~TdA=qP9!{!hFR4b%&t`Wd`GL!zhxG=Rz8Pd~<2
zlXwZJ#oa(&$-a8U4dS_YD*Hm4m<;|92TQK71P6;Or-m&;svaQlJ|J-CgBQo|n-MET
z4R63tdi%*yKhnsEKik@`gMYVQlr|80>N@j4>dT7>vBU`_E4u`;fkfPQ7wubbL0McmC@&OTT`9
z)v9+6uU2JZsljw9ACe?>7QJ
z6QzAJxIZm=5mkEzrIo-G+GMM$&elShF9p6Bl(BSM`~s7zqJ{L2f5#>njpNgf&f`4f
z62=Yt3RGw&;_(uf3!z7sWI#|5i0VnZKzoKNTCP6ASTvGu!GZPMBdrJ4!@oYH)M5Bl
z1UDHm$M4$(NVQ=@fE0Tgv0e3jYm`&Ho`Z7gu*cc&aU}410UmHf7rDg6I3k3AE?V_A
z5Gw&PS@EFU9Orq0KAu&es#~7fs>H^;3!Ju`RiHAe9%V4Cx#9Q6ANU(S0GG(e*LNIGl(g>|9Cmre5%V*k%McgkxevwSR(S-E+Po&uJfZ|W}z&aVgQ3Y
z(7=sJ=?+*Z$af~*RlD*k`JR&~4dC+quk`elzo_E<=lIx!d`IUIbyP6l7@ESU*K81g
z#EL2AVoxR@7)C5yLyy&_m#=R~V<>fu$x36DLY=0PO5fgcV$`Y6NyYeu*FC-nPs5fx
z2JDb{^Yj_v0+Ep`GS%ZN-lbA@UC(JQ0JXZhM+g(PT0$6e^$6hq%iohXNyVj8
z&;{Ov6(Gt@jB%KqS?nRS(eN4`Vn;DzhQ%mYSyqRhSdFs7X~W*oXW`T`;t*nB0&MUg
z&>=Y6JdDdr_MkR{s6G+{`Ab&oQ?EqZjHbxMwFWcl6(&Tx>OhhsLr^pNbJVPr7`GY4
z&)`K~VTAIC7(NOPB;$M|lt-gc*6X2bfg2jTDxpAe(f2ErF>yG;<|av%sjaf4EJSGc
zG;O3C#2ridFWNCrzFVf^alhg^6U^2+O7e)eqwe5NwhS
ziMp`WN_5+F;%7QETZd-r&}_Wc&DWvXprHXJ1~#|ERsfVE)jQj^#fecydsXG5ZFA*U
znC3w$RVAcERX@lvrhK%HEfMOqlQJO8kM@&oMxWaap#r>FXi8pYf_cd(FFETa13^H<
zO)z|CCK#AFK{H_YuJ=N<_IfQk9n=q5hxyhXm5h?P0DOAkQ%G;2QI5Z
zZUl7@^eUL}>ZtKww~*ds0)2q)I)CJ!Pm$%W_?_Y{y2J9ZE_s)y(0TL^bQ4`RfXIW$
z0=oNEHrOrS8&Z$};6i529nl8HjOw-`jVYirN*PG=hq+*3P#zZYfrYq$@Da9{!pj?!H
zBA+tEGnhhZtjLf;pP@%_@HYhkOUJB+j4aZR1V}eBxVdoGV`ShHkMDRAu&bNtA~J~d
zh=X7$euT+#dJEnB(=X)wPnW?i+43`vi!E4Vj4rirG)Dw6u+Hp5U;P0IZbu}>cpYAp
zX99o0B7%+&VkME4lkoW`J+8drY~SKB4C6B!f;8-O@)#i;{o)R~o9-gpZoLDQIcD-V
z`u0P&+;Q6-8^qH1NpWS_se6x|fxb{Gu5O$-ZZ1wTo?j0fEgdQim^RBQaUVgfD+Q@E
zXsX_0&B_uyX+l~~t}_D=l};qqJDu<=>c_=^$f6^i
zDrdyJw~LRE6=Z#dJHp78in^5~86jlF8<
zrGBC^`D_=QQRt$y16^#Jcj#3_MATJi{Wf`r42|3=?Vv^Uq&)gu^J@H+D5TRl3eZFF
z_imwAG_06RuugEw31%2Bdb1G~W6ay`QgF~A1i<>P9(0AAoRTGMx0T5`PUK`D*N$%`
zM8}xVK^l23W!NBOr(K9U=!MZ^Zx2eo9UqHZ4$=Mh$L}K>=p1qGMjXG{%`31L+1g`Z
zP&$_Jhz{aI*Ng@_aR`U>ZkuE>38*46+Z~F_4XXvZv(6?HhaK5}XdT#ckc*zr+jiB1p&Y1>Vg>a)chjA@>Eo4&n7gQX|%inek8Y^>zG^SQS6Uzxtr;
zS4{jlt09SnyX{=YL5BNMu%O1S^RAa07;U$5iNF&Kwh|AP1h_
zFn!6OBMl=KeRB7y=8xAbyyNnd^y^KHC&q64{nqU_i~G8CudK`spDxPVw&qXOrmSU?
zCO^{HyE(tpH9hKjvPuFhE+vAox58p^ON>GXAsCz8Bw1vuU2kE-%?{~SM>8an(*s{U
z2DvlTStohRFUn*NJ>!W}dOz?|`t+d}CC8QR$TP-r=IOUv?np?So+II1MN*d
zqdRGpikXv`Uqov^WlIf9Zw+5+P~aJ#v&&7q4vDRQJz^KFyzFW=FP4^SqqOz1xxq<+j2X*&JgQdmDab5pJ=qJw(vYcqN)w(dA6+n@O2RWmN*`)-{qFb^-
z!SwpUlElVVTgj>%nOS9jqYhI5Thz$C3-%TrLll|)a%6rfVGgu&s2|#lc5ww^VD>00X
zk?hP+{oCZP1ZD-fnGgcQJAiKx{pL1cIv|xvWCOESCQek=I_;C3BD+Z`#-x$S9XN;f
zV){?eaz6QNw*xpDyS)aJuFmsjw1_9EDmpw|G#EvlS1*r^={1SQ6zs%^5bYsAEq#a1
zU=O&moe{~aD+{41@Hyk=-MC$Zhj9>M9YapU!|=b{U3-{Il8LO73`W^2f^kH98c$Qz
zL>$%ST7O{XwftwYN>Wy0?TLiJCJmk?hF~OO@iq8YlUb+28cXON|
z2u1dz4nXm_c?d&Er=XkkKrrkJgqzOM*GOlQOH$)Ux7@knQEB+5)vGqk6aDo4AOB51
z^wTu*MUWI^I%|(y+X=9W(R>hx_Py<7!N@Wn7j=S
zaWP{O_3}EC)5J7hKo#3eAOtnx0o*!BC>iR&u+%^RZLo!>S(RkZ>fsL#VykcZfg4`<
zGnU_!`}0HObF9FZyL5W#X;cXDHK%7=(G0Sq0Jw)>O&S#({cwJYb_13LHbZNV+M0Lj
z_ScqRSRejnIeN25{Zc!lbqJ%TXQag(qzXJhuq9!GTa5}VNlCG>k+ZZLI#`nBTjh!=Q{R0b`WS84v6F7a#)*qPyV6UlqNXcCD@~YkAKF!XHNws`pg)O*CQQdr)R9;pd3MJv+lSgvvWe+yJP3G&*6;Vt!4DSNEgKlWr;0D?C|TOW!S=c
zpi-IONwxjgrXoV3M`ze!)oLy#TbUS4h??Y3CYnf2VI(h6SNwZ4Z`;%4?Zw-d?s|G9JTLucJ|
z1lei-^P+W)1O7Cc=!ii7;pu&$fe6R{U3)501QGQG{Tn^a1{6Ll2C?Kq^mJ;pHenPZ
zZ=C^4SoC9K7QO&1Z(GF4mY;!=W?>7!f(5{AK)ccFNE-!68xF{vXnU&-m>gntA)xJi
zB{1Cb>^v38v79-2+m){9cF}KtK1=_dc8o296Y0eH!FiGr&lx{&&iDy)=Zpsg_Idiw
zrEl0-Mz8zeJUvGL^~Wcl{No>=*ohwDL(aq!(d<1U+H8smW$kA0|5=?@EE8wcDY{@t
z8O+3M@L=^O4!Hkl?}b%!kJUsV3rgY%`LLZ>Ej1~cIp?4M1K0b>UB_m}cApw>136T*
zd;a!=kagS0_&!5OuwO#G<^c0huZd1*KtmY@xig7-k98#DG~0#KD_58k?IxzU9O(#U
zdmJgjY`s3{kn-}=9ibrN*pp&@w>#twnUNtAa)d%5pn!xz4zGZJ3Vx;~duVpJ=7r)X
zn+lGV*p--!#Ec|CvT~U*%X+E8YkFG&D_h~RMmPQ%xAJ8THEaLu*;nINHh;&lv#@tn
zWCRrEuptBZ-$;EuA|@5bBNZ4ktyuNyReHC2@Q|_m)Zs#$cgKl&o)hf_
z{0FcF`XR|(F1;BkK!Ojgwb_hgV>aG3+uJsAvh8OZc-2_fZ0H&)6CKPgp!c^5_4bDk
zKo%Hfhh`=7Wv(7Vyc296Yo7^0FOTLOpf$jqgxCS$Un!~My;0@8syj11T01`fe~Bc^
zPtc!O;Xi@r7}+%=g}qo~*oO@kM-oYitJTalWNI}cpBU
zE`-lXWj$_&-1WrG>@ut>+|euIoD;QE!0{$F1Qt%h)Jfj-6g?@X5jPd((WEr~Ewerl
z4QYdQBXktBfL|^La#`DymHS`NZgBZ(+<}87tOnCcTfm!kw;f3iX(7X_z)~_O3h5JuIosXey_L%
zDys8&L1I;t8rT6ZstF2DiM2EA>L>s7(em0tzg}!{l9r=?}IX
ze%@%QCyEZQp0oPuVS*NxzgYo#PofemhjFn>t4H&
zzFlXC&mGAX^QuT~PV}RiaUha7@UIqOIWgbhL(efF(jp89<0j9Fx){T%47ZeaCkrdN
zE=OBb=OmPAwK0m;rX9R<2n~Izz6dDW)NUqvE3)27kMQ1Fu}{+z4-h1W#2$i}kELD5
z!C|eDv%^Sh|Fpyikk8r=g+DnWuy&=L(6-D-ElL;Q&jJLmK{64d2b2w*F_33K+cgL*
z#>7-9t}Cf>fgdNWXG#ug5|j!B^qV=-PTEvOzpbLjNL3Z_RUtcXTSjv)>6MIsWRS<`
zm<&wCJUne*bEjGRZ=rYL+i7%RJh-T~$psiY29XWdm9!j9
z13bkEE;)HE1XC9{mdND1N`?@f{Cs-nkQ7s^P<
z@@37Jmo7W^)%lOfvGadd-+l2le@CXPZ@>KN{3rMOx|*C)uj7Vq+Dh0Pm$<{JjGC
zNl+C(8uKAzX9AH*l(A9ZsWm8&nv6h7s};bkAbXqWQGP%FBNX2HKcefz?&PgS(0Fz%
zB1hZZCm00~yND$T5Nik-?Kau~a@u5Z+i!Cuqqz%P&dDq*ArG0n^-P1{&{`bnoE9|&
zgL0Uq!2m{_qDofWfGZ`z{eqx~Xt>B$b^<^EQzdR_KK%nAjQFsjiIc@<$pnUJ7qWdz
zn7!(PHvshsf{}!b4aVDy`;4C$;Y)HDON>$DT;qL++FwLXvnfNiGw$iy6Qkzc)CzdR
zS45&Z4SFqVi^@Y@r&!mmdPMzO+f!}*?j@qwOg0RRj-7|RszXC3U8W4@3JI)o9$M}c
zV$l-4BG?#WHK;li`G^~rG}*(<;ge1p{WH|WWY8>Kn%*Tt0hSLEP+dYS0|~(k;MSg!L+2hVI1bxX>V
zL{g)IY!2?zK;mmzqFfI(Q&r_`5Rmjw&h%Ql?ss<$6@iaOzp9`glZC_qAl{3EuOD~!
zXb3Z-0L|ehFljS1w0RmhXI;^q4v2yYr{$iEh_ml6%2{zfyS(
zJM7iyBAwA_Nca0w(^3qXzHFyr_NAnPicXiFf>5eGoj7zE>5F5MJtH$iG-d=Wevon?
zj}Jc&_!q~F!2m&s;p+ey5*QO$A9yt&j|t4di%0QNkpcmC794(NU6wFEmIYiZymZ@c
zj=A}8L04vQ&0J;X^d0k%OJ2@@FlLmq918{5ZOOOVV!>c0KCxJ`c&fSH>&GDZ!ez)e
zk7NmXSR=U=Y_(LP_KPhiDYE1dKY4(T7Dc2z>@6p@^>-|I_Fwdkf;BhG;(}EQ-d$Iz*WEhP{m1syUu
zYKvgXE*3NOrDYw{vQh*q30cWSE3qOkPjuyF$td^W(V^N}#~VzBfQ>u3`V$9BTlB1C
zB^Hhuf@CX3aF3qgomVZUS2FoALM}Z2hm9}n-?r%hE$Y#?u6y^ozCGe2{`ks)rx#AF
znjG!d@16xChN$xI%Jw~n-`KVLwYPRmoHS|T#0e8fmxH_azgYHg!Q?To6z(X3l2*`i
zLHZa3@~KE7sE>waP$g#tgLab-g?Bl*DQ-(vhE=kn%1S~iiarBCS>?qnn8?mdh7PN`
zh*axGnoKdeop>`r6^Q4z1J~
zPKxJ5z!=2;AQmpCL&a0^(_&$~m~3AYKaC^23daE8LJ)-<0S!YGCbyggj6ps3L3N9!
zdo7tZn`{Zla6(x#i!*C8MNg(D(`j%DX@Ds!FUHp3+9?{Au%*>DDp?FIgeRi7AQe@#
za^$qQfz%FHwo_dEhkvZP`=^bY|GB#PXz9-DR=#j;{rEEvls!KD=_Qc|i1LT0TJE`*
z#-E^DEBZ`ZQSk7s;#%UZ=(Ui3gI0HK`C7LZ!
zG?=bf!Lg-kaPcYZ6n60??c$&L#W&*JRTq!o7pr$}cd-cG?5i)n1{Xi1HRBQO&abdL
zix`}C7h_~=Smp)JYd=(qe$fI~Ru&e$HC2z26>|n0nP!JMWR~0#h&a4*fK`He?W1B|
z2(tF+Fs`^#c859|AIK8*_^#!F6ZPnQosBXyIBElhJ1b4G04w{c@1n=gUAgU5fMnE
z00<=&LrFk^39OXXA;BFvV7}2G!k9gwVH}(x0b#TjlhxhJ&k$$o3h}j47V_o>%0T4j0h8d*w?nzLrmOAy0;rQF6813u+e37~v?
zq;M57L*0HoG))9C#M0%*V&9U620B)hR~{RAp6(q&9wXc7`Ju0VwEGN6X*_af_ea>f
zjj&;=mF`$7COFU15EnN{k|H3#r&xXlekypZU_xRcGO*E6T&5Q@rxo)t@TW7JEjO}z
zy@WJMpNh?y(x>sE;+~H_LK^yk`^XPJ(AVkLc+l|n4}t-Nta0^0re{o|2{8Kq@j-YL
zgC+~3vXeb%xb$grrno0Qlzqp8F0r(WAE@&_+FyH61C%=$fG7uW>7f||iXT&BG8^@*
zM?x*zL~MO%Rxuw$*qNjpKnZTSfp))%b|*(}dg-U1eiA>9hsBS@&*B+m3!O}-U`4R%
zgG;NkmqI^4p$dkq$aMeHyBj3bJrIrNHV38D-9;G!AzApkZY%5ZE%
z6ars{CU|0x`M3uei_}U
zGgjD_i=RID;1;oG{KSsN@xht?S0NCFiq+zAoHaop*oOR)A;lxvJhs#{Czg*eSGY~M
zh*c}-0>~gocUc-5Z$fgZs?XM(YHG$ItC`Bu=P_(TeI;49{+U-^cw}PPs;WK1uC47d
zD+f{Ot&T48@{PA`*w*=QsKd(IsH>11Jh<9`=G0(NK16c>CK$CV1VB~rS_mOU6eZSw
zS9PM?p1F-6UA$xq8A=CN5acq@5>K%y!}~
zJEU0V=>WmQfaf^e5m~iv*EItN^oqRt;A1cJ9kzV0r)zahw^frC78Z5R%`NMo9A7-G
zc4A?N?)^G0+<4C|J*Rhy{ch@#`0S$U>Y{5qb|jA%rx%oY-DQR8#W+fa(iQsGlna;#
zGyFP!*ie~J%JN{16ocWj3dwS{2#53)t`}|;W(W&}TZJ{GAbNPh#EDBvxr9t^Xp{4Kc}F#N%nYLccd;4
zESXz8qhsdqH0NN8^X|117A{;mbL~uV#LVe4MQP^D86$6Bwybf$fSYHGxVCP_&>0hF
zygx$@%_x~6iVLn?HA5~L867!y0WtDp+y>l9qtYABH0c!9Xl7zQEWbgVn+;7oxpp
z-Z81prIj1$vxz{+B};7)pu{EANn!
zS-%K#4lA}Jv*P`T^U9~hMt=kV&gB(?i_Tw-5Ax}rS#vvetSOl_`sC7How7R=*Yq#V89_#OPAg1lTsBR9g_O*B?X@}d
z-Pe8*N%8BmX1z{Nu_x&0oH>_wLH!kp{c_E$S!5@k-Jd6FZ3O9Q`(I-MZoa
zhqpX%^ynMouDQOn4*Ek~muq8Wd{!tc{qrq_IsNHn(_}*X22|F~?O#LB*Vgyz5$#v6COnAeSx{P|uq;XN
ziwZtFqq_tq0&{G9udwO}J+|Wf=rsX*$fa~FFD=c@7dpD^`py-CRF;p$S~fOTUT!T8
zGJL?GBUln_2+j@O7DPf*Fla3