diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index 306d0c2450..0000000000 --- a/.eslintrc.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "ignorePatterns": ["node_modules/", "dist/"], - "env": { - "browser": true, - "es2021": true - }, - "extends": [ - "eslint:recommended", - "plugin:@typescript-eslint/recommended", - "plugin:solid/typescript" - ], - "overrides": [ - { - "env": { - "node": true - }, - "files": [".eslintrc.{js,cjs}"], - "parserOptions": { - "sourceType": "script" - } - } - ], - "parser": "@typescript-eslint/parser", - "parserOptions": { - "ecmaVersion": "latest", - "sourceType": "module" - }, - "plugins": ["@typescript-eslint", "solid"], - "rules": { - "quotes": ["error", "double"], - "semi": "warn", - "@typescript-eslint/no-unused-vars": [ - "error", - { - "args": "all", - "argsIgnorePattern": "^_", - "caughtErrors": "all", - "caughtErrorsIgnorePattern": "^_", - "destructuredArrayIgnorePattern": "^_", - "varsIgnorePattern": "^_", - "ignoreRestSiblings": true - } - ] - } -} diff --git a/.github/ISSUE_TEMPLATE/BUGS.yml b/.github/ISSUE_TEMPLATE/BUGS.yml index 64dab21b75..18358ff125 100644 --- a/.github/ISSUE_TEMPLATE/BUGS.yml +++ b/.github/ISSUE_TEMPLATE/BUGS.yml @@ -1,13 +1,10 @@ name: "Bug Report 🪲" description: Report an issue or possible bug with the functionality of the Solid docs website. (Not related to the content of the site.) title: "[Bug]: " -labels: [ - "bug", - "pending review" -] -assignees: -- danieljcafonso -- atilafassina +labels: ["bug", "pending review"] +assignees: + - danieljcafonso + - atilafassina body: - type: textarea @@ -25,13 +22,13 @@ body: description: Please indicate on which page(s) the issue occurs. placeholder: https://docs.solidjs.com/concepts/intro-to-reactivity validations: - required: true + required: true - type: textarea id: expected attributes: label: "🤔 Expected Behavior" description: Please describe what the expected behavior should be. - placeholder: When on this page, I expected . . . + placeholder: When on this page, I expected . . . validations: required: true - type: textarea @@ -39,7 +36,7 @@ body: attributes: label: "👀 Current Behavior" description: Please describe what the current behavior is. - placeholder: But instead, on this page I'm noticing . . . + placeholder: But instead, on this page I'm noticing . . . validations: required: true - type: input diff --git a/.github/ISSUE_TEMPLATE/CONTENT.yml b/.github/ISSUE_TEMPLATE/CONTENT.yml index 477a961eee..1b1ebe748d 100644 --- a/.github/ISSUE_TEMPLATE/CONTENT.yml +++ b/.github/ISSUE_TEMPLATE/CONTENT.yml @@ -1,11 +1,9 @@ name: "Content Report 📄" title: "[Content]:" description: Report an issue with existing content. -labels: [ - "improve documentation", "pending review" -] -assignees: -- ladybluenotes +labels: ["improve documentation", "pending review"] +assignees: + - ladybluenotes body: - type: markdown attributes: @@ -25,7 +23,7 @@ body: description: Please provide the URL of the page(s) affected. placeholder: https://docs.solidjs.com/concepts/intro-to-reactivity validations: - required: true + required: true - type: textarea id: generalDesc attributes: @@ -33,11 +31,11 @@ body: description: Let us know what's wrong! placeholder: "..." validations: - required: true + required: true - type: textarea id: incorrectContent attributes: label: "🖥️ Reproduction in StackBlitz (if reporting incorrect content or code samples)" description: If you are reporting incorrect content or code samples, you can also attach a reproduction in stackblitz. validations: - required: false + required: false diff --git a/.github/ISSUE_TEMPLATE/OTHER.yml b/.github/ISSUE_TEMPLATE/OTHER.yml index 50ef31571e..27d160454c 100644 --- a/.github/ISSUE_TEMPLATE/OTHER.yml +++ b/.github/ISSUE_TEMPLATE/OTHER.yml @@ -1,9 +1,7 @@ name: "Other Report 🌐" title: "[Other]:" description: Report something else we should know about the docs site! -labels: [ -"pending review" -] +labels: ["pending review"] body: - type: textarea id: issue @@ -12,4 +10,4 @@ body: description: Please describe the problem with the documentation in detail. placeholder: "..." validations: - required: true + required: true diff --git a/.github/ISSUE_TEMPLATE/REQUEST.yml b/.github/ISSUE_TEMPLATE/REQUEST.yml index 55479fe1e9..f1aef4ba5a 100644 --- a/.github/ISSUE_TEMPLATE/REQUEST.yml +++ b/.github/ISSUE_TEMPLATE/REQUEST.yml @@ -1,11 +1,9 @@ name: "Request 💡" title: "[Request]:" description: Share an idea. -labels: [ - "request", "pending review" -] +labels: ["request", "pending review"] assignees: -- ladybluenotes + - ladybluenotes body: - type: markdown attributes: @@ -14,7 +12,7 @@ body: id: request-topic attributes: label: "What is this request related to?" - options: + options: - Request - Styling - Feature @@ -27,7 +25,7 @@ body: description: Please provide the URL of the page(s) or section this idea is related to. placeholder: https://docs.solidjs.com/concepts/intro-to-reactivity validations: - required: false + required: false - type: textarea id: generalDesc attributes: @@ -35,7 +33,7 @@ body: description: Please provide a general description or bullet points about what you would like to see added. placeholder: "..." validations: - required: true + required: true - type: textarea id: example attributes: @@ -43,4 +41,4 @@ body: description: If you would like to suggest code samples please attach a working reproduction. placeholder: "..." validations: - required: false + required: false diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index b105304437..06c2280099 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -2,4 +2,4 @@ blank_issues_enabled: true contact_links: - name: Support & Community 💁 url: https://discord.com/invite/solidjs - about: 'This issue tracker is not for support questions. Our Discord server hosts the community of Solid users. Come join us to discuss Solid or find assistance!' + about: "This issue tracker is not for support questions. Our Discord server hosts the community of Solid users. Come join us to discuss Solid or find assistance!" diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 1a6d7de3ac..b9f88f0cc9 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -4,6 +4,7 @@ - [ ] This PR references an issue (except for typos, broken links, or other minor problems) ### Description(required) + ### Related issues & labels diff --git a/.github/actions/install/action.yml b/.github/actions/install/action.yml new file mode 100644 index 0000000000..d5f890a025 --- /dev/null +++ b/.github/actions/install/action.yml @@ -0,0 +1,21 @@ +name: Install Tools & Dependencies +description: Installs pnpm, Node.js & package dependencies + +runs: + using: composite + steps: + - name: Setup pnpm + uses: pnpm/action-setup@v4 + with: + version: 9 + run_install: false + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: pnpm + + - name: Install dependencies + run: pnpm install + shell: bash diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml new file mode 100644 index 0000000000..d5f890a025 --- /dev/null +++ b/.github/workflows/format.yml @@ -0,0 +1,21 @@ +name: Install Tools & Dependencies +description: Installs pnpm, Node.js & package dependencies + +runs: + using: composite + steps: + - name: Setup pnpm + uses: pnpm/action-setup@v4 + with: + version: 9 + run_install: false + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: pnpm + + - name: Install dependencies + run: pnpm install + shell: bash diff --git a/.github/workflows/static_checks.yml b/.github/workflows/static_checks.yml index ebf813ff78..bbb9fda720 100644 --- a/.github/workflows/static_checks.yml +++ b/.github/workflows/static_checks.yml @@ -2,70 +2,37 @@ name: 🔍 Lint / Type Checks on: push: - branches: [main] + branches: + - main + pull_request: - branches: [main] + branches: + - main jobs: - setup: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v4 - with: - version: 9 - - uses: actions/setup-node@v4 - with: - node-version: "20" - cache: "pnpm" - - run: pnpm i - - uses: actions/cache/save@v4 - with: - path: | - node_modules - ~/.pnpm-store - key: ${{ runner.os }}-pnpm-${{ hashFiles('**/pnpm-lock.yaml') }} - typecheck: - needs: setup runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v4 - with: - version: 9 - - uses: actions/setup-node@v4 - with: - node-version: "20" - cache: "pnpm" - - uses: actions/cache/restore@v4 - with: - path: | - node_modules - ~/.pnpm-store - key: ${{ runner.os }}-pnpm-${{ hashFiles('**/pnpm-lock.yaml') }} + - name: Check out code + uses: actions/checkout@v4 + + - name: Install tools & dependencies + uses: ./.github/actions/install + - name: Generate virtual modules run: pnpm sync + - name: TypeScript check run: pnpm check:types lint: - needs: setup runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v4 - with: - version: 9 - - uses: actions/setup-node@v4 - with: - node-version: "20" - cache: "pnpm" - - uses: actions/cache/restore@v4 - with: - path: | - node_modules - ~/.pnpm-store - key: ${{ runner.os }}-pnpm-${{ hashFiles('**/pnpm-lock.yaml') }} + - name: Check out code + uses: actions/checkout@v4 + + - name: Install tools & dependencies + uses: ./.github/actions/install + - name: ESLint check run: pnpm check:lint diff --git a/.prettierrc b/.prettierrc index 42db1e7bc2..6a5c957392 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,5 +1,4 @@ { - "trailingComma": "es5", "tabWidth": 2, "semi": true, "singleQuote": false, diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 26b11b8c7d..3eafd70c76 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,11 +2,9 @@ Thank you for helping us make this project great and being a part of the Solid community! -We welcome contributions from anyone, regardless of your skill level. -We are happy to help with guidance on PRs, technical writing, and turning features into realities. +We welcome contributions from anyone, regardless of your skill level. We are happy to help with guidance on PRs, technical writing, and turning features into realities. -> **New to contributing?** -> Take a look at [this GitHub guide](https://docs.github.com/en/get-started/start-your-journey/hello-world) to learn how to use Git and GitHub to contribute to open-source. +> **New to contributing?** Take a look at [this GitHub guide](https://docs.github.com/en/get-started/start-your-journey/hello-world) to learn how to use Git and GitHub to contribute to open-source. If you're new to Solid, we ask that you check out our [Writing Guide](https://github.com/solidjs/solid-docs-next/blob/main/WRITING.md). @@ -14,15 +12,11 @@ If you're new to Solid, we ask that you check out our [Writing Guide](https:/ There are many ways to contribute to the Solid's documentation! -The Solid Docs website is built on Solid! -Maintaining it requires not only written content and Solid code maintenance, but it also needs to address accessibility (a11y), CSS, UI, and UX concerns. -We also aim to make our documentation available in several languages, so we need help translating the entire site. +The Solid Docs website is built on Solid! Maintaining it requires not only written content and Solid code maintenance, but it also needs to address accessibility (a11y), CSS, UI, and UX concerns. We also aim to make our documentation available in several languages, so we need help translating the entire site. You can help out by leaving review comments on [PRs](https://github.com/solidjs/solid-docs-next/pulls) and adding ideas in existing GitHub [issues ](https://github.com/solidjs/solid-docs-next/issues) and [discussions](https://github.com/solidjs/solid-docs-next/discussions). -Every PR, especially translation PRs, will need reviewers. -Reviewing PRs and leaving comments, suggestions, or even saying "Looks good!" can be a great way to get started on contributing alongside our Docs team. -It's also a great way to learn more about Solid! +Every PR, especially translation PRs, will need reviewers. Reviewing PRs and leaving comments, suggestions, or even saying "Looks good!" can be a great way to get started on contributing alongside our Docs team. It's also a great way to learn more about Solid! We encourage you to: @@ -71,8 +65,7 @@ We use labels as a way to organize and categorize our issues. Here are some comm ## Start a discussion -Discussions are a place within this repository where we can have open-ended conversations. -It's the perfect place for Q&A, sharing ideas, community engagement, and connecting with other members. +Discussions are a place within this repository where we can have open-ended conversations. It's the perfect place for Q&A, sharing ideas, community engagement, and connecting with other members. Feel free to start a [new discussion](https://github.com/solidjs/solid-docs-next/discussions) on any topic related to our docs! @@ -87,16 +80,14 @@ Feel free to start a [new discussion](https://github.com/solidjs/solid-docs-n > If you've never submitted a pull request on GitHub before, check out [this overview on how to open a PR](https://opensource.guide/how-to-contribute/#opening-a-pull-request). -PRs are the heart of collaboration on GitHub. -When you open a pull request, you are putting forward your suggested changes, inviting us to review it, and requesting for these changes to be merged into our main branch. +PRs are the heart of collaboration on GitHub. When you open a pull request, you are putting forward your suggested changes, inviting us to review it, and requesting for these changes to be merged into our main branch. Here's how to effectively contribute via a PR: - **Understand the Scope**: Before creating a PR, ensure it addresses an existing issue. Remember to link your PR to the issue it solves for easy tracking and understanding. - **Singular Focus**: Each PR should address a single issue or enhancement. Want to propose a larger change? Reach out to us on [Discord](https://discord.com/invite/solidjs) and let's discuss the best way forward! - **Drafts for Early Feedback**: If you're seeking early feedback but aren't quite finished with your changes, consider creating a draft PR. Simply prefix your PR title with `**[Draft]**`. This way, you can get input on your work-in-progress. -- **Quality over Quantity**: Strive for the quality of your contribution rather than the quantity. A well-thought-out, cleanly coded, and thoroughly tested PR is much more valuable than a hastily done large one. - Contributing via PRs not only enhances the project, but also allows you to be a part of the active community, sharing ideas, learning, and growing with the project. +- **Quality over Quantity**: Strive for the quality of your contribution rather than the quantity. A well-thought-out, cleanly coded, and thoroughly tested PR is much more valuable than a hastily done large one. Contributing via PRs not only enhances the project, but also allows you to be a part of the active community, sharing ideas, learning, and growing with the project. > Existing PRs and Issues need reviewing, triaging, and feedback, too! You can make valuable contributions by commenting, suggesting, testing, researching, brainstorming and generally helping in all areas! @@ -104,8 +95,7 @@ Here's how to effectively contribute via a PR: > Need help making a PR? [Join us on Discord](https://discord.com/invite/solidjs), we'll be more than happy to help you out! -Contributions to the documentation site are made by editing the docs repository. -You can do this directly on GitHub.com or by creating a copy of the repository locally, making your changes there, and contributing back to our repository. +Contributions to the documentation site are made by editing the docs repository. You can do this directly on GitHub.com or by creating a copy of the repository locally, making your changes there, and contributing back to our repository. #### Examples of helpful PRs @@ -115,11 +105,9 @@ You can do this directly on GitHub.com or by creating a copy of the repository l ### Edit this page via GitHub -Every page on [docs.solidjs.com](https://docs.solidjs.com/) has an **Edit this page** link at the bottom. -You can click on that button to edit the source code for that page in **GitHub**. +Every page on [docs.solidjs.com](https://docs.solidjs.com/) has an **Edit this page** link at the bottom. You can click on that button to edit the source code for that page in **GitHub**. -After you make your changes, click **Commit changes**. -This will automatically create a [fork](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/about-forks) of the docs in your GitHub account with the changes. +After you make your changes, click **Commit changes**. This will automatically create a [fork](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/about-forks) of the docs in your GitHub account with the changes. Once you have committed your edits within your fork, follow the prompts to create a **pull request** and submit your changes for review. @@ -133,13 +121,13 @@ Though it is not a hard requirement, we'd deeply appreciate if you could recomme 1. Create a dictionary file in `src/i18n/dictionaries/{locale}/ui.ts`. The name should follow our locale convention. - - language (ISO 639-1 - set 1): https://en.wikipedia.org/wiki/List_of_ISO_639_language_codes - - country code(optional) (ISO 3166-1 alpha-2): https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 - - E.g.: Canadian French would be: `fr-ca` +- language (ISO 639-1 - set 1): https://en.wikipedia.org/wiki/List_of_ISO_639_language_codes +- country code(optional) (ISO 3166-1 alpha-2): https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 +- E.g.: Canadian French would be: `fr-ca` 2. Add the `import` and language information to the objects in the barrel file: `./src/i18n/dictionaries/index.ts`. So it will be identified by the routing system, and an entry its added to the language dropdown. 3. Add the language to the `array` in `./scripts/collections/index.mjs` so internal files are created. -4. Add the important UI translations to `./src/i18n/dictionaries/{locale}/ui.ts` +4. Add the important UI translations to `./src/i18n/dictionaries/{locale}/ui.ts` 5. Add at least the index page `./src/routes/{locale}/index.mdx`, so others and yourself could see things in action. #### Adding translations to a supported language @@ -153,13 +141,11 @@ To translate a new entry to an existing language, go to `src/routes/{locale}` an Once you have made your changes using your preferred method, you're ready to create a 'pull request'. -This will let the Solid docs team know you have some changes you would like to propose. -At this point, we can give you feedback and possibly request changes. +This will let the Solid docs team know you have some changes you would like to propose. At this point, we can give you feedback and possibly request changes. [Read more about making a pull request in GitHub's docs.](https://docs.github.com/en/get-started/exploring-projects-on-github/contributing-to-a-project#making-a-pull-request) -Please include a clear title. -The description will have some pre-filled questions that we would like you to answer. +Please include a clear title. The description will have some pre-filled questions that we would like you to answer. Every pull request generates a preview of the site, including your proposed changes, using **Netlify** for anyone to see. @@ -171,11 +157,9 @@ The docs site will be automatically updated whenever pull requests are merged. ### Forks -On GitHub, you will need a 'fork' of this repository to work on. -This is your own copy of the code base where you can make changes. You can read more about forks in [GitHub's documentation](https://docs.github.com/en/get-started/exploring-projects-on-github/contributing-to-a-project). +On GitHub, you will need a 'fork' of this repository to work on. This is your own copy of the code base where you can make changes. You can read more about forks in [GitHub's documentation](https://docs.github.com/en/get-started/exploring-projects-on-github/contributing-to-a-project). -Not sure how to get started with GitHub, forks, pull requests, or want a refresher? -You can watch this video series: [How to Contribute to an Open Source Project on GitHub](https://egghead.io/courses/how-to-contribute-to-an-open-source-project-on-github). +Not sure how to get started with GitHub, forks, pull requests, or want a refresher? You can watch this video series: [How to Contribute to an Open Source Project on GitHub](https://egghead.io/courses/how-to-contribute-to-an-open-source-project-on-github). #### Creating a fork @@ -183,9 +167,7 @@ To create your copy, click the `Fork` button at the top right of any page in thi #### Maintaining a fork -When you first create your fork, it will be an exact copy of this repository. -Over time, our docs will change as they are updated, but your fork won’t automatically stay up-to-date. -Here are some ways to keep your fork in sync with this repo: +When you first create your fork, it will be an exact copy of this repository. Over time, our docs will change as they are updated, but your fork won’t automatically stay up-to-date. Here are some ways to keep your fork in sync with this repo: ##### Update through GitHub UI diff --git a/README.md b/README.md index 3c48337e62..539d543a0c 100644 --- a/README.md +++ b/README.md @@ -2,75 +2,49 @@ Welcome to Solid's documentation! -This is the repo for [docs.solidjs.com](https://docs.solidjs.com/). This repo -contains all the source code that we use to build our docs. +This is the repo for [docs.solidjs.com](https://docs.solidjs.com/). This repo contains all the source code that we use to build our docs. -[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/solidjs/solid-docs-next) -[![Open with CodeSandbox](https://assets.codesandbox.io/github/button-edit-lime.svg)](https://codesandbox.io/p/github/solidjs/solid-docs-next/) -[![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/solidjs/solid-docs-next) +[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/solidjs/solid-docs-next) [![Open with CodeSandbox](https://assets.codesandbox.io/github/button-edit-lime.svg)](https://codesandbox.io/p/github/solidjs/solid-docs-next/) [![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/solidjs/solid-docs-next) ## What is Solid? -Solid is a JavaScript framework used for building high-performance -user-interfaces. Using a reactive approach and component-based architecture, we -want to empower developers in creating efficient and scalable web applications. +Solid is a JavaScript framework used for building high-performance user-interfaces. Using a reactive approach and component-based architecture, we want to empower developers in creating efficient and scalable web applications. ## Thank you for being here! -You can help make our docs better for the community! Your feedback is welcomed. -In addition, any editing, translating, designing, and developing skills are -welcomed. We are grateful to welcome you into our community! +You can help make our docs better for the community! Your feedback is welcomed. In addition, any editing, translating, designing, and developing skills are welcomed. We are grateful to welcome you into our community! -If you want to see how you can contribute, check out our -[How You Can Help](#how-you-can-help) section. +If you want to see how you can contribute, check out our [How You Can Help](#how-you-can-help) section. ## Chat with us -You can learn more about Solid, get support, and meet other devs and -contributors in our [Discord community](https://discord.com/invite/solidjs). +You can learn more about Solid, get support, and meet other devs and contributors in our [Discord community](https://discord.com/invite/solidjs). ## Raise an issue -Have you noticed something is missing, confusing, or is wrong in our -documentation? +Have you noticed something is missing, confusing, or is wrong in our documentation? -Check to see if it has -[already been mentioned ](https://github.com/solidjs/solid-docs-next/issues) -and, if not, -[create an issue](https://github.com/solidjs/solid-docs-next/issues/new/choose) -to bring it to our attention! +Check to see if it has [already been mentioned ](https://github.com/solidjs/solid-docs-next/issues) and, if not, [create an issue](https://github.com/solidjs/solid-docs-next/issues/new/choose) to bring it to our attention! ## Share an idea -Do you think something could be better? Have an idea you feel could make the -docs better? +Do you think something could be better? Have an idea you feel could make the docs better? -Discussion threads are where you can offer feedback on things that might not be -problems that need addressing, but are ideas to be explored. +Discussion threads are where you can offer feedback on things that might not be problems that need addressing, but are ideas to be explored. -Join us in the -[Discussions section](https://github.com/solidjs/solid-docs-next/discussions/280) -where we can brainstorm these ideas, ask questions, and share goals! +Join us in the [Discussions section](https://github.com/solidjs/solid-docs-next/discussions/280) where we can brainstorm these ideas, ask questions, and share goals! ## Suggest a fix or contribute Have you found a typo, broken link, or another item with an obvious quick fix? -If you can see what the problem is, and you know how to fix it, you can make a -PR (pull request) with the change and contribute to the docs repo yourself. +If you can see what the problem is, and you know how to fix it, you can make a PR (pull request) with the change and contribute to the docs repo yourself. -If you're looking to make a larger contribution, please see our -[CONTRIBUTING.md](https://github.com/solidjs/solid-docs-next/blob/main/CONTRIBUTING.md) -first! +If you're looking to make a larger contribution, please see our [CONTRIBUTING.md](https://github.com/solidjs/solid-docs-next/blob/main/CONTRIBUTING.md) first! ## Running the Site Locally -At the moment, we recommend running the site locally through either -[CodeSandbox](https://codesandbox.io/p/github/solidjs/solid-docs-next/), -[Gitpod](https://gitpod.io/#https://github.com/solidjs/solid-docs-next), or -[StackBlitz](https://stackblitz.com/github/solidjs/solid-docs-next). These are -the quickest and easiest way to browse and edit the project files and run the -site locally. +At the moment, we recommend running the site locally through either [CodeSandbox](https://codesandbox.io/p/github/solidjs/solid-docs-next/), [Gitpod](https://gitpod.io/#https://github.com/solidjs/solid-docs-next), or [StackBlitz](https://stackblitz.com/github/solidjs/solid-docs-next). These are the quickest and easiest way to browse and edit the project files and run the site locally. The app uses [pnpm](https://pnpm.io) as the package manager and it runs on Node.js `v18+`. @@ -90,7 +64,6 @@ This will start your the app at [localhost:3000](http://localhost:3000) or the n ### Collections and virtual modules -The builds an [Astro](https://docs.astro.build/en/guides/content-collections/) inspired collection navigation, it will bring all routes and generate a couple of files at `/.solid`. -These files are exposed to your app via [Vite virtual modules](https://vitejs.dev/guide/api-plugin#virtual-modules-convention). This task is perform via our `sync` script (`pnpm sync`), ran before every build. +The builds an [Astro](https://docs.astro.build/en/guides/content-collections/) inspired collection navigation, it will bring all routes and generate a couple of files at `/.solid`. These files are exposed to your app via [Vite virtual modules](https://vitejs.dev/guide/api-plugin#virtual-modules-convention). This task is perform via our `sync` script (`pnpm sync`), ran before every build. If changes are made to the navigation (new entry, or repositioning entry), it is necessary to restart the server for changes to take effect. diff --git a/WRITING.md b/WRITING.md index e31df890b4..da91c42486 100644 --- a/WRITING.md +++ b/WRITING.md @@ -2,27 +2,19 @@ ## Introduction -Thank you for your interest in writing for Solid. -This writing guide is in-progress, so please be sure to check it often as we adjust things. -We welcome suggestions and feedback. +Thank you for your interest in writing for Solid. This writing guide is in-progress, so please be sure to check it often as we adjust things. We welcome suggestions and feedback. -Bear in mind that the following is a general guideline, but we will use it as a framework to edit any incoming contributions. -This is to ensure that Solid's documents remain consistent in tone, voice, structure, and conventions. +Bear in mind that the following is a general guideline, but we will use it as a framework to edit any incoming contributions. This is to ensure that Solid's documents remain consistent in tone, voice, structure, and conventions. ## Visual style -Solid wants to maintain a consistent brand across all of its documentation. -We want to present a consistent and professional face to our users and partners. -As such, we have several guidelines that will dictate how your contributions will look once published. -While it would be great if you followed these exactly — and our contributing editors would sure love you for it — we know that you'd probably prefer to focus on getting great Solid content ready to go. +Solid wants to maintain a consistent brand across all of its documentation. We want to present a consistent and professional face to our users and partners. As such, we have several guidelines that will dictate how your contributions will look once published. While it would be great if you followed these exactly — and our contributing editors would sure love you for it — we know that you'd probably prefer to focus on getting great Solid content ready to go. -So please try to follow this visual framework as best as you can to make the process as smooth as possible. -Of course, trends in documentation styling change over time, so we're fully aware that these guidelines will likely shift as we consider adopting new best practices. +So please try to follow this visual framework as best as you can to make the process as smooth as possible. Of course, trends in documentation styling change over time, so we're fully aware that these guidelines will likely shift as we consider adopting new best practices. ### Layout -The bulk of your contributions will be the body copy. -But beyond just your written content, there are several other things to consider while working on your document. +The bulk of your contributions will be the body copy. But beyond just your written content, there are several other things to consider while working on your document. #### Tables @@ -55,10 +47,7 @@ See below for an example of what this would look like in raw Markdown. #### Asides -Asides serve as callout boxes in Solid's documentation. -They represent a section of the document that is related to the content surrounding the aside, but not directly relevant to the page. -They work well with explaining how Solid differs from other popular frameworks, referring to other points in the documentation, or serving as a tangential note. -We ask that you use them sparingly. +Asides serve as callout boxes in Solid's documentation. They represent a section of the document that is related to the content surrounding the aside, but not directly relevant to the page. They work well with explaining how Solid differs from other popular frameworks, referring to other points in the documentation, or serving as a tangential note. We ask that you use them sparingly. 1. To use an aside, you must first import the correct component. 2. Use the following command in your terminal. (Remember to be in the cloned Solid repo directory.) @@ -73,8 +62,7 @@ We ask that you use them sparingly. ### Code examples -Solid's documentation contains example code, like you've seen here in this guide. -Markdown lets you create inline code and code blocks. +Solid's documentation contains example code, like you've seen here in this guide. Markdown lets you create inline code and code blocks. If you want to call out a single command or a file path, surround the text with single back ticks: `. @@ -84,8 +72,7 @@ Here's an example in raw Markdown: `npm` ``` -If, however, you need more than that, then a code block is more appropriate. -Start with three back ticks, ```, write your code, then close the block with three more back ticks. +If, however, you need more than that, then a code block is more appropriate. Start with three back ticks, ```, write your code, then close the block with three more back ticks. Here's an example in raw Markdown: @@ -94,21 +81,15 @@ Here's an example in raw Markdown: npm install ```` -Code examples are vital to providing users with quick tips on how to use Solid. -Knowing when to use inline code versus code blocks can further the understanding of the readers and users alike. +Code examples are vital to providing users with quick tips on how to use Solid. Knowing when to use inline code versus code blocks can further the understanding of the readers and users alike. ### Images -Good documentation takes advantage of images, such as screenshots and graphics, to expand upon the written content. -Images should not introduce or explain something new. -They are used in addition to the writing, such as increasing a reader's understanding, communicating ideas, emphasizing points, or providing a comparison. +Good documentation takes advantage of images, such as screenshots and graphics, to expand upon the written content. Images should not introduce or explain something new. They are used in addition to the writing, such as increasing a reader's understanding, communicating ideas, emphasizing points, or providing a comparison. -To maintain some consistency, we would prefer that you stick to the PNG format so that the images scale well at all screen sizes and resolutions. -Please avoid using GIFs if at all possible because they interfere with accessibility. +To maintain some consistency, we would prefer that you stick to the PNG format so that the images scale well at all screen sizes and resolutions. Please avoid using GIFs if at all possible because they interfere with accessibility. -Finally, we strongly request that you use alt text with your images. -This is very important for our accessibility initiatives. -If you are adding an image to a page, you can do that using HTML syntax. +Finally, we strongly request that you use alt text with your images. This is very important for our accessibility initiatives. If you are adding an image to a page, you can do that using HTML syntax. Here's an example of how to do that: @@ -120,14 +101,11 @@ Here's an example of how to do that: Now that we've laid out how we'd like your contribution to look, we'd like to take a moment to discuss how we'd like to see it organized. -Please note that, for editing purposes, **each sentence gets its own line**. -Paragraphs should have two lines between them. +Please note that, for editing purposes, **each sentence gets its own line**. Paragraphs should have two lines between them. ### Headings -Headings act as the primary means of document organization. -Solid uses Markdown, which means headings are defined by hashes `#` followed by a space. -For each additional hash, you go down one heading level. +Headings act as the primary means of document organization. Solid uses Markdown, which means headings are defined by hashes `#` followed by a space. For each additional hash, you go down one heading level. Here's an example of a Heading 1 (H1) and a Heading 2 (H2) in raw Markdown. @@ -137,9 +115,7 @@ Here's an example of a Heading 1 (H1) and a Heading 2 (H2) in raw Markdown. ## Introduction ``` -We primarily use Headings 1 through 3. -However, headings can go up to 6. -Note we rarely use Headings 5 and 6. +We primarily use Headings 1 through 3. However, headings can go up to 6. Note we rarely use Headings 5 and 6. Below is a quick breakdown on the different headings. @@ -153,35 +129,24 @@ H5/H6: Advanced concepts ### Lists -You will come across two types of lists in your contributions, ordered and unordered. -Here's a breakdown on when to use each one. +You will come across two types of lists in your contributions, ordered and unordered. Here's a breakdown on when to use each one. -Ordered: This is for step-based, how-to content. -You need an ordered list when the order or hierarchy is important. +Ordered: This is for step-based, how-to content. You need an ordered list when the order or hierarchy is important. -Unordered: Unordered lists help break up content with non-hierarchical items. -You will likely use them when writing exceptions and emphasizing important ideas. +Unordered: Unordered lists help break up content with non-hierarchical items. You will likely use them when writing exceptions and emphasizing important ideas. -In addition to these two types, you might need to use a nested list. -This is for when a listed item has a sub-part to it that is relevant to its content. +In addition to these two types, you might need to use a nested list. This is for when a listed item has a sub-part to it that is relevant to its content. -Finally, you may come across a point where you need to make a note on a listed item. -This would be an area where a nested point would not be appropriate. -These notes might link out to another part of the documentation or a piece of reference material; or, they may also inform the reader about a warning or a gotcha. -(Gotchas are unexpected and/or unreasonable outcomes that the reader should know about. An example is a command that is similar to the one you listed, but using it would cause some kind of issue.) +Finally, you may come across a point where you need to make a note on a listed item. This would be an area where a nested point would not be appropriate. These notes might link out to another part of the documentation or a piece of reference material; or, they may also inform the reader about a warning or a gotcha. (Gotchas are unexpected and/or unreasonable outcomes that the reader should know about. An example is a command that is similar to the one you listed, but using it would cause some kind of issue.) ### Page linking -We would prefer you to keep page linking in mind while you're working on your contribution. -The following two points are what you should pay attention to: +We would prefer you to keep page linking in mind while you're working on your contribution. The following two points are what you should pay attention to: -1. Interlink when you refer to a topic that has its own page. - This makes it possible for the user to easily seek additional information. -2. Be descriptive with the linked text. - Do not use "click here" or any variation therein, as this is not a best practice for accessibility. +1. Interlink when you refer to a topic that has its own page. This makes it possible for the user to easily seek additional information. +2. Be descriptive with the linked text. Do not use "click here" or any variation therein, as this is not a best practice for accessibility. -Links are written in Markdown. -Here's an example of what that looks like: +Links are written in Markdown. Here's an example of what that looks like: ``` Do: Check the [Solid homepage](https://www.solidjs.com) @@ -190,29 +155,17 @@ Don't: Click [here](https://www.solidjs.com) to go to the Solid homepage. ## Voice and tone -So far, we've dealt with how your contributions should look and function. -As important as all of that is, the core part of your documents is the writing itself, so we want to discuss how we would like our documentation to read. +So far, we've dealt with how your contributions should look and function. As important as all of that is, the core part of your documents is the writing itself, so we want to discuss how we would like our documentation to read. ### Approachable -Modern documentation has shifted toward a less formal tone to great effect. -Like modern documents, Solid aims to provide a friendly and approachable tone. -Of course, your contributions should still maintain a technical focus to provide the reader with the information that they're looking for. -We encourage you to pay attention to how [Google](https://developers.google.com/style/tone) defines a friendly tone. +Modern documentation has shifted toward a less formal tone to great effect. Like modern documents, Solid aims to provide a friendly and approachable tone. Of course, your contributions should still maintain a technical focus to provide the reader with the information that they're looking for. We encourage you to pay attention to how [Google](https://developers.google.com/style/tone) defines a friendly tone. > In your documents, aim for a voice and tone that's conversational, friendly, and respectful without being overly colloquial or frivolous; a voice that's casual and natural and approachable, not pedantic or pushy. Try to sound like a knowledgeable friend who understands what the developer wants to do. -The old way of writing documentation — the dry, formal, and very rigid method — created a divide between the reader and writer. -We don't want that here. -We want our users to enjoy reading Solid's docs so that they retain the information they came here for. -This requires writing engaging content that is also approachable for most skill levels. +The old way of writing documentation — the dry, formal, and very rigid method — created a divide between the reader and writer. We don't want that here. We want our users to enjoy reading Solid's docs so that they retain the information they came here for. This requires writing engaging content that is also approachable for most skill levels. -The tricky part for you is determining that baseline skill level. -Solid caters to a more technically advanced audience, the members of which are more likely to know what you might consider to be basic knowledge. -However, in the introductory documentation especially, we should be offering written work that is approachable even to beginners. -We'll discuss more what that looks like later, but just remember these two questions when considering your contribution's approachability. -Who is the document for? -What would I be looking for if I was coming to this document for the first time? +The tricky part for you is determining that baseline skill level. Solid caters to a more technically advanced audience, the members of which are more likely to know what you might consider to be basic knowledge. However, in the introductory documentation especially, we should be offering written work that is approachable even to beginners. We'll discuss more what that looks like later, but just remember these two questions when considering your contribution's approachability. Who is the document for? What would I be looking for if I was coming to this document for the first time? Please keep in mind, do not write like you are present with the user. @@ -230,68 +183,39 @@ When writing steps in a how-to section, please start sentences with a verb. ### Accessible -Accessibility has taken a front seat in most aspects of technology in recent years, including documentation. -Solid should be accessible to anyone who wishes to use it, meaning that your writing has to meet some basic standards. +Accessibility has taken a front seat in most aspects of technology in recent years, including documentation. Solid should be accessible to anyone who wishes to use it, meaning that your writing has to meet some basic standards. -Some accessibility comes down to visual style, as we discussed. -However, it goes hand-in-hand with inclusiveness (which we'll get to next), so there is some overlap between the two. -For now, we ask that you understand that Solid wants to ensure that everyone can read our documentation. -What does that look like? +Some accessibility comes down to visual style, as we discussed. However, it goes hand-in-hand with inclusiveness (which we'll get to next), so there is some overlap between the two. For now, we ask that you understand that Solid wants to ensure that everyone can read our documentation. What does that look like? -The first step towards accessibility is using proper English grammar. -This is especially helpful for those users who utilize screen readers. -Another way you can help the users of assistive technology is by keeping your paragraphs reasonably short. -A good rule of thumb is no more than four sentences, or four to five lines of text. +The first step towards accessibility is using proper English grammar. This is especially helpful for those users who utilize screen readers. Another way you can help the users of assistive technology is by keeping your paragraphs reasonably short. A good rule of thumb is no more than four sentences, or four to five lines of text. -Shorter paragraphs help readers of all abilities, since walls of text can discourage in-depth reading and understanding. -You can once again practice empathy here. -What would you like to read? +Shorter paragraphs help readers of all abilities, since walls of text can discourage in-depth reading and understanding. You can once again practice empathy here. What would you like to read? -As discussed in the Organization section, ensuring a strong layout is key to accessible documentation. -We encourage you to remember that your contributions should be organized logically. -Headings that give a strong indicator of the section's topic, as well as descriptive hyperlinks, go a very long way in helping our readers navigate our docs. +As discussed in the Organization section, ensuring a strong layout is key to accessible documentation. We encourage you to remember that your contributions should be organized logically. Headings that give a strong indicator of the section's topic, as well as descriptive hyperlinks, go a very long way in helping our readers navigate our docs. ### Inclusive -Great documentation strives to be as inclusive for as many people as possible. -That includes those from different backgrounds, such as varying countries and languages. -As Solid grows, so will its audience, and therefore we should work hard to ensure that everyone feels included while reading our docs. +Great documentation strives to be as inclusive for as many people as possible. That includes those from different backgrounds, such as varying countries and languages. As Solid grows, so will its audience, and therefore we should work hard to ensure that everyone feels included while reading our docs. What does inclusive language look like? -First, we want to focus on using plain, simple English. -That means avoiding the use of jargon wherever possible. -(We know that in more advanced documents, this becomes nearly impossible.) +First, we want to focus on using plain, simple English. That means avoiding the use of jargon wherever possible. (We know that in more advanced documents, this becomes nearly impossible.) -In cases where jargon is necessary, be sure the document contains at least one brief description upon the first mention. -For example, if you want to use an acronym, spell it out first with the acronym in parentheses after. -From then on, you can use the acronym in that document. +In cases where jargon is necessary, be sure the document contains at least one brief description upon the first mention. For example, if you want to use an acronym, spell it out first with the acronym in parentheses after. From then on, you can use the acronym in that document. -Plain and simple English also means avoiding contractions, as these are not always easily understood by those for whom English is not the first language. -We should also avoid using expressions or figures of speech wherever possible; remember, not everyone will understand what they mean. +Plain and simple English also means avoiding contractions, as these are not always easily understood by those for whom English is not the first language. We should also avoid using expressions or figures of speech wherever possible; remember, not everyone will understand what they mean. -Secondly, inclusive language means remaining as gender-neutral as possible. -Instead of defaulting to one gender, use a gender-neutral word instead. -As mentioned previously, we want to use friendly, second-person language to help connect our readers with our documentation. -Doing so makes it fairly simple to avoid gendered words. -Use your own common sense to determine which word to use, but if you slip up, an editor should catch it. +Secondly, inclusive language means remaining as gender-neutral as possible. Instead of defaulting to one gender, use a gender-neutral word instead. As mentioned previously, we want to use friendly, second-person language to help connect our readers with our documentation. Doing so makes it fairly simple to avoid gendered words. Use your own common sense to determine which word to use, but if you slip up, an editor should catch it. -Writing inclusively also entails avoiding ableist language. -That usually comes about in certain turns of phrase. -Alternatives to ableist words will go a long way to ensuring our documentation meets the needs of more people. +Writing inclusively also entails avoiding ableist language. That usually comes about in certain turns of phrase. Alternatives to ableist words will go a long way to ensuring our documentation meets the needs of more people. -Similarly, we should not use divisive terms to get our point across. -That means steering clear of socially- and racially-charged language for concepts, such as "blacklist" or "first-class." +Similarly, we should not use divisive terms to get our point across. That means steering clear of socially- and racially-charged language for concepts, such as "blacklist" or "first-class." We have chosen to use American English in our documentation, so please remember that especially with spelling. -Despite us aiming for an informal tone, that does not mean that we want to get too lax in our language. -We should try to avoid too many references to a specific culture (e.g. American). -Solid has a large North American audience, but our readers are not exclusive to that region. -Please keep this in mind before you use a certain term or phrase. +Despite us aiming for an informal tone, that does not mean that we want to get too lax in our language. We should try to avoid too many references to a specific culture (e.g. American). Solid has a large North American audience, but our readers are not exclusive to that region. Please keep this in mind before you use a certain term or phrase. -When it comes to the topic of inclusion and inclusive language, empathy is critical. -Once again, ask yourself throughout your writing process: Who is this document for? +When it comes to the topic of inclusion and inclusive language, empathy is critical. Once again, ask yourself throughout your writing process: Who is this document for? For more on what inclusive language looks like, [Google once again has a great breakdown](https://developers.google.com/style/inclusive-documentation). diff --git a/app.config.ts b/app.config.ts index 677f830441..e3ac7aad11 100644 --- a/app.config.ts +++ b/app.config.ts @@ -1,4 +1,5 @@ import { defineConfig } from "@solidjs/start/config"; +import eslint from "vite-plugin-eslint"; import { createWithSolidBase, defineTheme } from "@kobalte/solidbase/config"; @@ -58,7 +59,7 @@ export default defineConfig( }, }, vite: { - plugins: [docsData(), heroCodeSnippet()], + plugins: [docsData(), heroCodeSnippet(), eslint()], }, }, { @@ -68,7 +69,7 @@ export default defineConfig( editPath: "https://github.com/solidjs/solid-docs/edit/main/:path", markdown: { expressiveCode: { - themes: ["min-light", "material-theme-ocean"], + themes: ["github-light-default", "material-theme-ocean"], themeCssSelector: (theme) => `[data-theme="${theme.type}"]`, frames: false, styleOverrides: { diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000000..43e76e0381 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,85 @@ +import typescriptEslint from "@typescript-eslint/eslint-plugin"; +import globals from "globals"; +import tsParser from "@typescript-eslint/parser"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import js from "@eslint/js"; +import { FlatCompat } from "@eslint/eslintrc"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const compat = new FlatCompat({ + baseDirectory: __dirname, + recommendedConfig: js.configs.recommended, + allConfig: js.configs.all, +}); + +export default [ + { + ignores: ["**/node_modules/", "**/dist/"], + }, + ...compat.extends( + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "plugin:solid/typescript", + "plugin:mdx/recommended", + ), + { + plugins: { + "@typescript-eslint": typescriptEslint, + }, + + languageOptions: { + globals: { + ...globals.browser, + }, + + parser: tsParser, + ecmaVersion: "latest", + sourceType: "script", + }, + rules: { + "@typescript-eslint/no-unused-vars": [ + "error", + { + args: "all", + argsIgnorePattern: "^_", + caughtErrors: "all", + caughtErrorsIgnorePattern: "^_", + destructuredArrayIgnorePattern: "^_", + varsIgnorePattern: "^_", + ignoreRestSiblings: true, + }, + ], + }, + }, + { + files: ["**/*.mdx"], + extends: ["plugin:mdx/recommended"], + settings: { + "mdx/code-blocks": true, + }, + extensions: ["mdx"], + overrides: [ + { + files: ["*.mdx"], + extends: ["plugin:mdx/overrides"], + }, + { + files: "**/*.mdx", + extends: "plugin:mdx/code-blocks", + }, + ], + }, + { + files: ["**/.eslintrc.{js,cjs}"], + languageOptions: { + globals: { + ...globals.node, + }, + + ecmaVersion: 5, + sourceType: "commonjs", + }, + }, +]; diff --git a/lunaria.config.json b/lunaria.config.json deleted file mode 100644 index 63fd45cd1f..0000000000 --- a/lunaria.config.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "$schema": "./node_modules/@lunariajs/core/config.schema.json", - "repository": { - "name": "solidjs/solid-docs-next", - "branch": "main", - "hosting": "github" - }, - "defaultLocale": { - "label": "English", - "lang": "en" - }, - "files": [ - { - "type": "universal", - "location": "src/routes/**/*.{mdx,md}", - "pattern": "src/routes/@lang/@path" - }, - { - "location": "src/i18n/dictionaries/**/ui.ts", - "pattern": "src/i18n/dictionaries/@lang/@path", - "type": "dictionary" - } - ], - "locales": [ - { - "label": "Português do Brasil", - "lang": "pt-br" - } - ], - "outDir": "./public/i18n-status", - "dashboard": { - "site": "https://docs.solidjs.com/i18n-status", - "title": "Solid Docs Translation Status", - "description": "Translation progress tracker for the Solid Docs site", - "basesToHide": ["src/routes/", "src/i18n/dictionaries/"], - "favicon": { - "external": [ - { - "link": "https://docs.solidjs.com/favicon.ico", - "type": "image/x-icon" - }, - { - "link": "https://docs.solidjs.com/favicon.svg", - "type": "image/svg+xml" - } - ] - }, - "customCss": ["./lunaria/styles.css"], - "ui": { - "statusByLocale.heading": "Translation progress by locale", - "statusByLocale.incompleteLocalizationLink": "incomplete translation", - "statusByLocale.outdatedLocalizationLink": "outdated translation", - "statusByLocale.completeLocalization": "This translation is complete, amazing job! 🎉", - "statusByFile.heading": "Translation status by file" - } - } -} diff --git a/lunaria/styles.css b/lunaria/styles.css deleted file mode 100644 index cd92464a82..0000000000 --- a/lunaria/styles.css +++ /dev/null @@ -1,4 +0,0 @@ -:root { - --tw-bg-opacity: 1; - background-color: rgb(15 23 42 / var(--tw-bg-opacity)); -} diff --git a/package.json b/package.json index 1750c792b5..1563895ab4 100644 --- a/package.json +++ b/package.json @@ -8,20 +8,20 @@ "sync": "node scripts/collections/index.mjs", "sync:orama": "pnpm build && node scripts/sync-orama.mjs", "dev": "pnpm sync && vinxi dev", - "build": "pnpm sync && pnpm build:sitemap && pnpm build:lunaria && NODE_OPTIONS=\"--max-old-space-size=8192\" vinxi build", + "build": "pnpm sync && pnpm build:sitemap && vinxi build", "build:sitemap": "node scripts/generateSitemap.js", "start": "vinxi start", "e2e": "npx playwright test", - "build:lunaria": "lunaria build", - "preview:lunaria": "lunaria preview", - "check:lint": "eslint .", - "check:types": "tsc --noEmit" + "check:lint": "pnpm dlx eslint", + "check:types": "tsc --noEmit", + "check:format": "prettier . --check", + "format": "prettier . --write" }, "dependencies": { "@kobalte/core": "^0.13.9", - "@kobalte/solidbase": "^0.0.16", + "@kobalte/solidbase": "^0.0.23", "@lunariajs/core": "^0.0.31", - "@oramacloud/client": "^1.3.15", + "@oramacloud/client": "^1.3.16", "@solid-primitives/event-listener": "^2.3.3", "@solid-primitives/marker": "^0.1.0", "@solid-primitives/media": "^2.2.9", @@ -30,10 +30,12 @@ "@solidjs/start": "^1.1.1", "@vinxi/plugin-mdx": "^3.7.2", "dotenv": "^16.4.5", + "eslint-mdx": "^3.2.0", + "eslint-plugin-mdx": "^3.2.0", "glob": "^10.4.5", "gray-matter": "^4.0.3", - "postcss": "^8.4.47", - "shiki": "^1.17.6", + "postcss": "^8.5.3", + "shiki": "^1.22.0", "sitemap": "^7.1.2", "solid-heroicons": "^3.2.4", "solid-js": "^1.9.5", @@ -43,22 +45,26 @@ "zod": "^3.23.8" }, "devDependencies": { + "@eslint/eslintrc": "^3.3.0", + "@eslint/js": "^9.22.0", "@kobalte/tailwindcss": "^0.9.0", "@orama/crawly": "^0.0.4", "@tailwindcss/typography": "^0.5.15", "@types/node": "^22.9.0", - "@typescript-eslint/eslint-plugin": "^8.7.0", - "@typescript-eslint/parser": "^8.7.0", + "@typescript-eslint/eslint-plugin": "^8.26.0", + "@typescript-eslint/parser": "^8.26.0", "autoprefixer": "^10.4.20", - "eslint": "^8.57.1", - "eslint-plugin-solid": "^0.13.2", + "eslint": "^9.22.0", + "eslint-plugin-solid": "^0.14.5", + "globals": "^16.0.0", "prettier": "3.2.5", - "tailwindcss": "^3.4.11", - "typescript": "^5.6.2", - "vite": "^6.1.1" + "tailwindcss": "^3.4.14", + "typescript": "^5.8.2", + "vite": "^6.2.1", + "vite-plugin-eslint": "^1.8.1" }, "engines": { "node": ">=18", - "packageManager": "pnpm@8" + "pnpm": ">=9" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e7b344734b..dc54f086c1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,14 +12,14 @@ importers: specifier: ^0.13.9 version: 0.13.9(solid-js@1.9.5) '@kobalte/solidbase': - specifier: ^0.0.16 - version: 0.0.16(@algolia/client-search@5.14.2)(@solidjs/start@1.1.1(solid-js@1.9.5)(vinxi@0.5.3(@types/node@22.9.0)(db0@0.2.4)(ioredis@5.4.1)(jiti@2.4.2)(terser@5.34.1)(typescript@5.6.3)(yaml@2.6.0))(vite@6.1.1(@types/node@22.9.0)(jiti@2.4.2)(terser@5.34.1)(yaml@2.6.0)))(@vue/compiler-sfc@3.5.12)(acorn@8.14.0)(react@18.3.1)(search-insights@2.17.3)(solid-js@1.9.5)(vinxi@0.5.3(@types/node@22.9.0)(db0@0.2.4)(ioredis@5.4.1)(jiti@2.4.2)(terser@5.34.1)(typescript@5.6.3)(yaml@2.6.0))(vite@6.1.1(@types/node@22.9.0)(jiti@2.4.2)(terser@5.34.1)(yaml@2.6.0)) + specifier: ^0.0.23 + version: 0.0.23(@algolia/client-search@5.14.2)(@expressive-code/core@0.40.2)(@solidjs/start@1.1.1(solid-js@1.9.5)(vinxi@0.5.3(@types/node@22.9.0)(db0@0.2.4)(ioredis@5.4.1)(jiti@2.4.2)(terser@5.34.1)(typescript@5.8.2)(yaml@2.6.0))(vite@6.2.1(@types/node@22.9.0)(jiti@2.4.2)(terser@5.34.1)(yaml@2.6.0)))(@vue/compiler-sfc@3.5.12)(acorn@8.14.1)(expressive-code@0.40.2)(react@18.3.1)(search-insights@2.17.3)(solid-js@1.9.5)(vinxi@0.5.3(@types/node@22.9.0)(db0@0.2.4)(ioredis@5.4.1)(jiti@2.4.2)(terser@5.34.1)(typescript@5.8.2)(yaml@2.6.0))(vite@6.2.1(@types/node@22.9.0)(jiti@2.4.2)(terser@5.34.1)(yaml@2.6.0)) '@lunariajs/core': specifier: ^0.0.31 version: 0.0.31 '@oramacloud/client': - specifier: ^1.3.15 - version: 1.3.16(typescript@5.6.3)(zod@3.23.8) + specifier: ^1.3.16 + version: 1.3.16(typescript@5.8.2)(zod@3.23.8) '@solid-primitives/event-listener': specifier: ^2.3.3 version: 2.3.3(solid-js@1.9.5) @@ -37,13 +37,19 @@ importers: version: 0.15.3(solid-js@1.9.5) '@solidjs/start': specifier: ^1.1.1 - version: 1.1.1(solid-js@1.9.5)(vinxi@0.5.3(@types/node@22.9.0)(db0@0.2.4)(ioredis@5.4.1)(jiti@2.4.2)(terser@5.34.1)(typescript@5.6.3)(yaml@2.6.0))(vite@6.1.1(@types/node@22.9.0)(jiti@2.4.2)(terser@5.34.1)(yaml@2.6.0)) + version: 1.1.1(solid-js@1.9.5)(vinxi@0.5.3(@types/node@22.9.0)(db0@0.2.4)(ioredis@5.4.1)(jiti@2.4.2)(terser@5.34.1)(typescript@5.8.2)(yaml@2.6.0))(vite@6.2.1(@types/node@22.9.0)(jiti@2.4.2)(terser@5.34.1)(yaml@2.6.0)) '@vinxi/plugin-mdx': specifier: ^3.7.2 - version: 3.7.2(@mdx-js/mdx@3.1.0(acorn@8.14.0)) + version: 3.7.2(@mdx-js/mdx@3.1.0(acorn@8.14.1)) dotenv: specifier: ^16.4.5 version: 16.4.5 + eslint-mdx: + specifier: ^3.2.0 + version: 3.2.0(eslint@9.22.0(jiti@2.4.2)) + eslint-plugin-mdx: + specifier: ^3.2.0 + version: 3.2.0(eslint@9.22.0(jiti@2.4.2)) glob: specifier: ^10.4.5 version: 10.4.5 @@ -51,10 +57,10 @@ importers: specifier: ^4.0.3 version: 4.0.3 postcss: - specifier: ^8.4.47 + specifier: ^8.5.3 version: 8.5.3 shiki: - specifier: ^1.17.6 + specifier: ^1.22.0 version: 1.22.0 sitemap: specifier: ^7.1.2 @@ -70,14 +76,20 @@ importers: version: 0.3.0(solid-js@1.9.5) solid-mdx: specifier: ^0.0.7 - version: 0.0.7(solid-js@1.9.5)(vite@6.1.1(@types/node@22.9.0)(jiti@2.4.2)(terser@5.34.1)(yaml@2.6.0)) + version: 0.0.7(solid-js@1.9.5)(vite@6.2.1(@types/node@22.9.0)(jiti@2.4.2)(terser@5.34.1)(yaml@2.6.0)) vinxi: specifier: ^0.5.3 - version: 0.5.3(@types/node@22.9.0)(db0@0.2.4)(ioredis@5.4.1)(jiti@2.4.2)(terser@5.34.1)(typescript@5.6.3)(yaml@2.6.0) + version: 0.5.3(@types/node@22.9.0)(db0@0.2.4)(ioredis@5.4.1)(jiti@2.4.2)(terser@5.34.1)(typescript@5.8.2)(yaml@2.6.0) zod: specifier: ^3.23.8 version: 3.23.8 devDependencies: + '@eslint/eslintrc': + specifier: ^3.3.0 + version: 3.3.0 + '@eslint/js': + specifier: ^9.22.0 + version: 9.22.0 '@kobalte/tailwindcss': specifier: ^0.9.0 version: 0.9.0(tailwindcss@3.4.14) @@ -91,32 +103,38 @@ importers: specifier: ^22.9.0 version: 22.9.0 '@typescript-eslint/eslint-plugin': - specifier: ^8.7.0 - version: 8.9.0(@typescript-eslint/parser@8.9.0(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1)(typescript@5.6.3) + specifier: ^8.26.0 + version: 8.26.0(@typescript-eslint/parser@8.26.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2) '@typescript-eslint/parser': - specifier: ^8.7.0 - version: 8.9.0(eslint@8.57.1)(typescript@5.6.3) + specifier: ^8.26.0 + version: 8.26.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2) autoprefixer: specifier: ^10.4.20 version: 10.4.20(postcss@8.5.3) eslint: - specifier: ^8.57.1 - version: 8.57.1 + specifier: ^9.22.0 + version: 9.22.0(jiti@2.4.2) eslint-plugin-solid: - specifier: ^0.13.2 - version: 0.13.2(eslint@8.57.1)(typescript@5.6.3) + specifier: ^0.14.5 + version: 0.14.5(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2) + globals: + specifier: ^16.0.0 + version: 16.0.0 prettier: specifier: 3.2.5 version: 3.2.5 tailwindcss: - specifier: ^3.4.11 + specifier: ^3.4.14 version: 3.4.14 typescript: - specifier: ^5.6.2 - version: 5.6.3 + specifier: ^5.8.2 + version: 5.8.2 vite: - specifier: ^6.1.1 - version: 6.1.1(@types/node@22.9.0)(jiti@2.4.2)(terser@5.34.1)(yaml@2.6.0) + specifier: ^6.2.1 + version: 6.2.1(@types/node@22.9.0)(jiti@2.4.2)(terser@5.34.1)(yaml@2.6.0) + vite-plugin-eslint: + specifier: ^1.8.1 + version: 1.8.1(eslint@9.22.0(jiti@2.4.2))(vite@6.2.1(@types/node@22.9.0)(jiti@2.4.2)(terser@5.34.1)(yaml@2.6.0)) packages: @@ -290,10 +308,6 @@ packages: resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.25.7': - resolution: {integrity: sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==} - engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.25.9': resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} engines: {node: '>=6.9.0'} @@ -440,6 +454,12 @@ packages: cpu: [ppc64] os: [aix] + '@esbuild/aix-ppc64@0.25.0': + resolution: {integrity: sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + '@esbuild/android-arm64@0.18.7': resolution: {integrity: sha512-o0VVztxJPkfDYbaU1tA1G1iwKiBh6Zt3bX5OdHDoITMFdRg+Mgdt3nHXMEtNlIjYA/Xn6hmlOYDHjJfQUduPuw==} engines: {node: '>=12'} @@ -458,6 +478,12 @@ packages: cpu: [arm64] os: [android] + '@esbuild/android-arm64@0.25.0': + resolution: {integrity: sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm@0.18.7': resolution: {integrity: sha512-nDQ7AC5WVKOqxaip/E5YbaRgnilBMsoGKjoGLCeCOYNePaBCBDwJsLfa2fn3FEtktiLaAF990W592avsHjJ/Vg==} engines: {node: '>=12'} @@ -476,6 +502,12 @@ packages: cpu: [arm] os: [android] + '@esbuild/android-arm@0.25.0': + resolution: {integrity: sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + '@esbuild/android-x64@0.18.7': resolution: {integrity: sha512-ga8Dtpb01GorCi1dk3jEwDk3AK/3F+cR5P+//Tl0ERL2K2pK/J1f3t8hcJ+RRt3UYBV/uTL9GEnx7touX0KRPQ==} engines: {node: '>=12'} @@ -494,6 +526,12 @@ packages: cpu: [x64] os: [android] + '@esbuild/android-x64@0.25.0': + resolution: {integrity: sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + '@esbuild/darwin-arm64@0.18.7': resolution: {integrity: sha512-FVDOdfgyGOOISpd0b+UtA6YNbu5+RzZu7kDztjVsA/iZhGnyxbCR/vZ+B2j5yxbMZ9j3iz5uFiHIq1sl6nrZ0Q==} engines: {node: '>=12'} @@ -512,6 +550,12 @@ packages: cpu: [arm64] os: [darwin] + '@esbuild/darwin-arm64@0.25.0': + resolution: {integrity: sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-x64@0.18.7': resolution: {integrity: sha512-w7aeD1UjDFXqyrZQLBIPYGmLR+gJsl+7QSwmSz+nVrCZOB7cyWEkIjCF8s4inUD3ja3WtKUIqzX5S4qDnU5q7Q==} engines: {node: '>=12'} @@ -530,6 +574,12 @@ packages: cpu: [x64] os: [darwin] + '@esbuild/darwin-x64@0.25.0': + resolution: {integrity: sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + '@esbuild/freebsd-arm64@0.18.7': resolution: {integrity: sha512-wKyySDdoKVOPn9eDci/b3eP3EJVAVXC3b2CiaHphhCKfh4n5pWLwj7Ue96anK1HnpcZ0Uti8Sw9xq3Im0earHA==} engines: {node: '>=12'} @@ -548,6 +598,12 @@ packages: cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-arm64@0.25.0': + resolution: {integrity: sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-x64@0.18.7': resolution: {integrity: sha512-rbfjbgSvzWRjQMKIntogK1d2oIAiA/ZVayXfK1WjcIIMQYLg74sAoT8CZBj30+bwn13YR0t6lgIxA1mJaS2Lhw==} engines: {node: '>=12'} @@ -566,6 +622,12 @@ packages: cpu: [x64] os: [freebsd] + '@esbuild/freebsd-x64@0.25.0': + resolution: {integrity: sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + '@esbuild/linux-arm64@0.18.7': resolution: {integrity: sha512-cwfxKYroaD5BZ42NsfxdVU1issD2NxcuJHlCNsN5LtWq+kZMpwmIVDCJxKlgLIG7zH/4yq8lTuZJurxq058GsA==} engines: {node: '>=12'} @@ -584,6 +646,12 @@ packages: cpu: [arm64] os: [linux] + '@esbuild/linux-arm64@0.25.0': + resolution: {integrity: sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm@0.18.7': resolution: {integrity: sha512-GpUBqqJnQ+7qdb7NqKNVj7TgD2JnLrEdzPtatPow77Me/EQ01GE1tHKZLePqhf5thdLDb5Se2Kcf4D9WTbSjmw==} engines: {node: '>=12'} @@ -602,6 +670,12 @@ packages: cpu: [arm] os: [linux] + '@esbuild/linux-arm@0.25.0': + resolution: {integrity: sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + '@esbuild/linux-ia32@0.18.7': resolution: {integrity: sha512-SsvsGStwbArBcB/XNh+2MvUtgOLp0CR6Hn1PBWcdApCuAaMibHCDyzHS06+u/YOD1UpeXFHJZphix61HeVMH/w==} engines: {node: '>=12'} @@ -620,6 +694,12 @@ packages: cpu: [ia32] os: [linux] + '@esbuild/linux-ia32@0.25.0': + resolution: {integrity: sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-loong64@0.18.7': resolution: {integrity: sha512-WOqQ0eaWGE/e9vmbxFT2exbWuXxHuG8ld0fN7oX5f0v7W6oveUIF4DLJYVae93t1+Icv5R0NBo8wv/o4hEvxBQ==} engines: {node: '>=12'} @@ -638,6 +718,12 @@ packages: cpu: [loong64] os: [linux] + '@esbuild/linux-loong64@0.25.0': + resolution: {integrity: sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-mips64el@0.18.7': resolution: {integrity: sha512-/dKQ3OLr2Tmj0kuf4ZJioD+qnADUEJSBaiuDbk8v5602HnNNBSGHPrEB6S8PSb8y8jWsX9MMnxqk5KpLTf86OQ==} engines: {node: '>=12'} @@ -656,6 +742,12 @@ packages: cpu: [mips64el] os: [linux] + '@esbuild/linux-mips64el@0.25.0': + resolution: {integrity: sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-ppc64@0.18.7': resolution: {integrity: sha512-x/k1+daIqiGJt0Yhr5llFJ/zkRg1XAqcS2ntAYzS3pHogO8oIyc+LjsINgVyFCeFMFUZ9Ae9W5z2Ib05bMum3g==} engines: {node: '>=12'} @@ -674,6 +766,12 @@ packages: cpu: [ppc64] os: [linux] + '@esbuild/linux-ppc64@0.25.0': + resolution: {integrity: sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-riscv64@0.18.7': resolution: {integrity: sha512-LegTDzK9gL/sTkiZUGYLigTISwppZJvQL3MRmFgXgHrj3IzdWkPgMwEtOItK3YiFzhBSSNyKA0mSKEg4UuK8JQ==} engines: {node: '>=12'} @@ -692,6 +790,12 @@ packages: cpu: [riscv64] os: [linux] + '@esbuild/linux-riscv64@0.25.0': + resolution: {integrity: sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-s390x@0.18.7': resolution: {integrity: sha512-fjBl45O8ivc3Nl14hdGpbHoVtdHnYGsLpwnlv2rNyb5NOsgY3Y8EhVe/fqR9ndHgO4eL68knKxkrRveEJq+v1g==} engines: {node: '>=12'} @@ -710,6 +814,12 @@ packages: cpu: [s390x] os: [linux] + '@esbuild/linux-s390x@0.25.0': + resolution: {integrity: sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-x64@0.18.7': resolution: {integrity: sha512-apYLJsg3wd3hW8nEt7H++8c8rTDvwXxX7h7YeI89g1RDPCT2QSXTO/xT1BCvFa/BFFoau+yvepQg2o5556FIWQ==} engines: {node: '>=12'} @@ -728,12 +838,24 @@ packages: cpu: [x64] os: [linux] + '@esbuild/linux-x64@0.25.0': + resolution: {integrity: sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + '@esbuild/netbsd-arm64@0.24.2': resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] + '@esbuild/netbsd-arm64@0.25.0': + resolution: {integrity: sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + '@esbuild/netbsd-x64@0.18.7': resolution: {integrity: sha512-f82sUnrzdoW4MiiCDn1G3RSsPH8+no+okDhkHgGTGa+5F5wZCyxdXxzR6ctsiimvyPn9FIu9Zs+MesVsBRwyTw==} engines: {node: '>=12'} @@ -752,12 +874,24 @@ packages: cpu: [x64] os: [netbsd] + '@esbuild/netbsd-x64@0.25.0': + resolution: {integrity: sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + '@esbuild/openbsd-arm64@0.24.2': resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] + '@esbuild/openbsd-arm64@0.25.0': + resolution: {integrity: sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + '@esbuild/openbsd-x64@0.18.7': resolution: {integrity: sha512-1TNDfpFYhIloHeqSRbJFjHFMYtTJWgqI2+S9uCLVCWrADLl5tCe8vQKDfkM7Afz/lZyqi6qEX/Eg2KA5S7FcNQ==} engines: {node: '>=12'} @@ -776,6 +910,12 @@ packages: cpu: [x64] os: [openbsd] + '@esbuild/openbsd-x64@0.25.0': + resolution: {integrity: sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + '@esbuild/sunos-x64@0.18.7': resolution: {integrity: sha512-lBhsHaM6EYCmzQCj+xeFev+dgqTgpSRqF7qXrxp5V4waFuidTBbWgqSXY5rsLRNLOyMMCh1cA+RqF8UL30oOJQ==} engines: {node: '>=12'} @@ -794,6 +934,12 @@ packages: cpu: [x64] os: [sunos] + '@esbuild/sunos-x64@0.25.0': + resolution: {integrity: sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + '@esbuild/win32-arm64@0.18.7': resolution: {integrity: sha512-p9ipv7rPKitXAAeufg5BzmyYZHZtFfrLGUX15+AxpTQqSZDAZd2wIusaOW5oONTf8RB53ujIqQw7W0QnZMuiUw==} engines: {node: '>=12'} @@ -812,6 +958,12 @@ packages: cpu: [arm64] os: [win32] + '@esbuild/win32-arm64@0.25.0': + resolution: {integrity: sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-ia32@0.18.7': resolution: {integrity: sha512-WmNxuE+j1wUT2rK+e1Oakx3zobS1rPpQudPytGM4nxXEGv0gpXEvnZnrykRwriNFbGVCwFJoE4txayjW76LsCw==} engines: {node: '>=12'} @@ -830,6 +982,12 @@ packages: cpu: [ia32] os: [win32] + '@esbuild/win32-ia32@0.25.0': + resolution: {integrity: sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-x64@0.18.7': resolution: {integrity: sha512-6RENfAwwL6dxQk/V1PxO/ejYRiOUVUaHi99hP3Dso/38jfNKFzU6YSSR/haJGNV/2wAHIgBMROQodna0IejAuA==} engines: {node: '>=12'} @@ -848,47 +1006,67 @@ packages: cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.4.0': - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + '@esbuild/win32-x64@0.25.0': + resolution: {integrity: sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.4.1': + resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/regexpp@4.11.1': - resolution: {integrity: sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==} + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/eslintrc@2.1.4': - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/config-array@0.19.2': + resolution: {integrity: sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@8.57.1': - resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/config-helpers@0.1.0': + resolution: {integrity: sha512-kLrdPDJE1ckPo94kmPPf9Hfd0DU0Jw6oKYrhe+pwSC0iTUInmTa+w6fw8sGgcfkFJGNdWOUeOaDM4quW4a7OkA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@expressive-code/core@0.37.1': - resolution: {integrity: sha512-nYgsK3uxK4W46v0IolHdB5+T6MQfy5weTpyB3kbzr11ur2UKUy2oHGhbWa+hRThfYEF1PM+TFxMtWU7amcjF8A==} + '@eslint/core@0.12.0': + resolution: {integrity: sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@expressive-code/core@0.38.3': - resolution: {integrity: sha512-s0/OtdRpBONwcn23O8nVwDNQqpBGKscysejkeBkwlIeHRLZWgiTVrusT5Idrdz1d8cW5wRk9iGsAIQmwDPXgJg==} + '@eslint/eslintrc@3.3.0': + resolution: {integrity: sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@expressive-code/plugin-collapsible-sections@0.37.1': - resolution: {integrity: sha512-9YGGQRzQ35iRszs0YCyaJ9kLL78NrZAvLRB6BOb/IUJT221IF/Esy9hAWORuMVysSOsr4BnZ9+FsPmqvvm7V3w==} + '@eslint/js@9.22.0': + resolution: {integrity: sha512-vLFajx9o8d1/oL2ZkpMYbkLv8nDB6yaIwFNt7nI4+I80U/z03SxmfOMsLbvWr3p7C+Wnoh//aOu2pQW8cS0HCQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.6': + resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.2.7': + resolution: {integrity: sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@expressive-code/plugin-frames@0.37.1': - resolution: {integrity: sha512-U1Pk8qmSlGaIvNpmo42pxVS+ROVkPUPtAgVR5OU9261zKw6r/MN7b5dCDE5B6QBqRi7iOS7/DQ/zYTzHcIQJQw==} + '@expressive-code/core@0.40.2': + resolution: {integrity: sha512-gXY3v7jbgz6nWKvRpoDxK4AHUPkZRuJsM79vHX/5uhV9/qX6Qnctp/U/dMHog/LCVXcuOps+5nRmf1uxQVPb3w==} - '@expressive-code/plugin-frames@0.38.3': - resolution: {integrity: sha512-qL2oC6FplmHNQfZ8ZkTR64/wKo9x0c8uP2WDftR/ydwN/yhe1ed7ZWYb8r3dezxsls+tDokCnN4zYR594jbpvg==} + '@expressive-code/plugin-collapsible-sections@0.40.2': + resolution: {integrity: sha512-EtfuluXKk3CdFMAeCJoDsUJo/s+Yh9b+kX0hNHeFlZ/W2/H8FmdZ9Pu+Qel41vw4yP6AyiQpsamquO7bzlakug==} - '@expressive-code/plugin-line-numbers@0.37.1': - resolution: {integrity: sha512-Tg8ZpJUwB1T4v3BKRjo5iqDslbOtXy7vI59NNq5K5JvvFs7j3FLHtxNQjDwown3sEDRTOFc1Yw6VulZ9afJ+yA==} + '@expressive-code/plugin-frames@0.40.2': + resolution: {integrity: sha512-aLw5IlDlZWb10Jo/TTDCVsmJhKfZ7FJI83Zo9VDrV0OBlmHAg7klZqw68VDz7FlftIBVAmMby53/MNXPnMjTSQ==} - '@expressive-code/plugin-shiki@0.37.1': - resolution: {integrity: sha512-zzrX0kn6JMxm+0fKWpP1W8F3bLK8PYIUDvM5UUEplGjL5Z0otBqycHWalucl0Mk9aKX1UThXaUTuCQEVOkNSxg==} + '@expressive-code/plugin-line-numbers@0.40.2': + resolution: {integrity: sha512-YMLkn68n9a9DI/4fQW/f6QJ33uQUzHmGdV3pDl+f6fVTxv7rvhRja+UtPksm0ZJpft6vrrACV8wS2TaH77SBzw==} - '@expressive-code/plugin-text-markers@0.37.1': - resolution: {integrity: sha512-AjZG/SyE41uWcpAae0w9DVtSii/YkdhOsjl6godLsI8vRGBdUdYvgoCebjb33gySa7g+9NcWxGp3oEKCBut1wA==} + '@expressive-code/plugin-shiki@0.40.2': + resolution: {integrity: sha512-t2HMR5BO6GdDW1c1ISBTk66xO503e/Z8ecZdNcr6E4NpUfvY+MRje+LtrcvbBqMwWBBO8RpVKcam/Uy+1GxwKQ==} + + '@expressive-code/plugin-text-markers@0.40.2': + resolution: {integrity: sha512-/XoLjD67K9nfM4TgDlXAExzMJp6ewFKxNpfUw4F7q5Ecy+IU3/9zQQG/O70Zy+RxYTwKGw2MA9kd7yelsxnSmw==} '@floating-ui/core@1.6.8': resolution: {integrity: sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==} @@ -908,18 +1086,25 @@ packages: '@fontsource-variable/lexend@5.1.2': resolution: {integrity: sha512-5gY4aYZXvhCNrpqa7f/JmRnUyRMAPqGdE0IXicbqvusj+jEwuj1JuiLPl61hTbGntQP+sMZsDHECBhlrEY/8iQ==} - '@humanwhocodes/config-array@0.13.0': - resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} - engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.6': + resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} + engines: {node: '>=18.18.0'} '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - '@humanwhocodes/object-schema@2.0.3': - resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} - deprecated: Use @eslint/object-schema instead + '@humanwhocodes/retry@0.3.1': + resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} + engines: {node: '>=18.18'} + + '@humanwhocodes/retry@0.4.2': + resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==} + engines: {node: '>=18.18'} '@iconify/types@2.0.0': resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} @@ -974,8 +1159,8 @@ packages: peerDependencies: solid-js: ^1.8.15 - '@kobalte/solidbase@0.0.16': - resolution: {integrity: sha512-wHssmYhlmWxc4OrPpQ/b5OQUIJwSVlMHvb48kfMWr48AaAYAwjcTLg6WSFbB44UV5UEuTD2Ye/Xc1qchzXZRxw==} + '@kobalte/solidbase@0.0.23': + resolution: {integrity: sha512-2mujpnmLxR40veEwJnY3dh1+xLGhZ30qJe2MLnp3oyczp4nF8tVlCTAiMGCx69YcFa0jcTm9ajl0kR6Awo7fjQ==} peerDependencies: '@solidjs/start': ^1.0.8 solid-js: ^1.9.1 @@ -1039,6 +1224,30 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@npmcli/config@8.3.4': + resolution: {integrity: sha512-01rtHedemDNhUXdicU7s+QYz/3JyV5Naj84cvdXGH4mgCdL+agmSYaLF4LUG4vMCLzhBO8YtS0gPpH1FGvbgAw==} + engines: {node: ^16.14.0 || >=18.0.0} + + '@npmcli/git@5.0.8': + resolution: {integrity: sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ==} + engines: {node: ^16.14.0 || >=18.0.0} + + '@npmcli/map-workspaces@3.0.6': + resolution: {integrity: sha512-tkYs0OYnzQm6iIRdfy+LcLBjcKuQCeE5YLb8KnrIlutJfheNaPvPpgoFEyEFgbjzl5PLZ3IA/BWAwRU0eHuQDA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + '@npmcli/name-from-folder@2.0.0': + resolution: {integrity: sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + '@npmcli/package-json@5.2.1': + resolution: {integrity: sha512-f7zYC6kQautXHvNbLEWgD/uGu1+xCn9izgqBfgItWSx22U0ZDekxN08A1vM8cTxj/cRVe0Q94Ode+tdoYmIOOQ==} + engines: {node: ^16.14.0 || >=18.0.0} + + '@npmcli/promise-spawn@7.0.2': + resolution: {integrity: sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ==} + engines: {node: ^16.14.0 || >=18.0.0} + '@orama/crawly@0.0.4': resolution: {integrity: sha512-MN+naIueJ/Q6W8ldgpgbeJmoC0H9ZOBkASeVa5b3ncpe9ZvrcByP7rs+A5+UcMwMUW2W1V2/kfl8eCVmpT6h5A==} @@ -1144,6 +1353,10 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} + '@pkgr/core@0.1.1': + resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + '@redocly/ajv@8.11.2': resolution: {integrity: sha512-io1JpnwtIcvojV7QKDUSIuMN/ikdOUd1ReEnUnMKGfDVridQZ31J0MmIuqwuRjWDZfmvr+Q0MqCcfHM2gTivOg==} @@ -1217,6 +1430,10 @@ packages: rollup: optional: true + '@rollup/pluginutils@4.2.1': + resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} + engines: {node: '>= 8.0.0'} + '@rollup/pluginutils@5.1.4': resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==} engines: {node: '>=14.0.0'} @@ -1231,96 +1448,191 @@ packages: cpu: [arm] os: [android] + '@rollup/rollup-android-arm-eabi@4.35.0': + resolution: {integrity: sha512-uYQ2WfPaqz5QtVgMxfN6NpLD+no0MYHDBywl7itPYd3K5TjjSghNKmX8ic9S8NU8w81NVhJv/XojcHptRly7qQ==} + cpu: [arm] + os: [android] + '@rollup/rollup-android-arm64@4.34.8': resolution: {integrity: sha512-Gigjz7mNWaOL9wCggvoK3jEIUUbGul656opstjaUSGC3eT0BM7PofdAJaBfPFWWkXNVAXbaQtC99OCg4sJv70Q==} cpu: [arm64] os: [android] + '@rollup/rollup-android-arm64@4.35.0': + resolution: {integrity: sha512-FtKddj9XZudurLhdJnBl9fl6BwCJ3ky8riCXjEw3/UIbjmIY58ppWwPEvU3fNu+W7FUsAsB1CdH+7EQE6CXAPA==} + cpu: [arm64] + os: [android] + '@rollup/rollup-darwin-arm64@4.34.8': resolution: {integrity: sha512-02rVdZ5tgdUNRxIUrFdcMBZQoaPMrxtwSb+/hOfBdqkatYHR3lZ2A2EGyHq2sGOd0Owk80oV3snlDASC24He3Q==} cpu: [arm64] os: [darwin] + '@rollup/rollup-darwin-arm64@4.35.0': + resolution: {integrity: sha512-Uk+GjOJR6CY844/q6r5DR/6lkPFOw0hjfOIzVx22THJXMxktXG6CbejseJFznU8vHcEBLpiXKY3/6xc+cBm65Q==} + cpu: [arm64] + os: [darwin] + '@rollup/rollup-darwin-x64@4.34.8': resolution: {integrity: sha512-qIP/elwR/tq/dYRx3lgwK31jkZvMiD6qUtOycLhTzCvrjbZ3LjQnEM9rNhSGpbLXVJYQ3rq39A6Re0h9tU2ynw==} cpu: [x64] os: [darwin] + '@rollup/rollup-darwin-x64@4.35.0': + resolution: {integrity: sha512-3IrHjfAS6Vkp+5bISNQnPogRAW5GAV1n+bNCrDwXmfMHbPl5EhTmWtfmwlJxFRUCBZ+tZ/OxDyU08aF6NI/N5Q==} + cpu: [x64] + os: [darwin] + '@rollup/rollup-freebsd-arm64@4.34.8': resolution: {integrity: sha512-IQNVXL9iY6NniYbTaOKdrlVP3XIqazBgJOVkddzJlqnCpRi/yAeSOa8PLcECFSQochzqApIOE1GHNu3pCz+BDA==} cpu: [arm64] os: [freebsd] + '@rollup/rollup-freebsd-arm64@4.35.0': + resolution: {integrity: sha512-sxjoD/6F9cDLSELuLNnY0fOrM9WA0KrM0vWm57XhrIMf5FGiN8D0l7fn+bpUeBSU7dCgPV2oX4zHAsAXyHFGcQ==} + cpu: [arm64] + os: [freebsd] + '@rollup/rollup-freebsd-x64@4.34.8': resolution: {integrity: sha512-TYXcHghgnCqYFiE3FT5QwXtOZqDj5GmaFNTNt3jNC+vh22dc/ukG2cG+pi75QO4kACohZzidsq7yKTKwq/Jq7Q==} cpu: [x64] os: [freebsd] + '@rollup/rollup-freebsd-x64@4.35.0': + resolution: {integrity: sha512-2mpHCeRuD1u/2kruUiHSsnjWtHjqVbzhBkNVQ1aVD63CcexKVcQGwJ2g5VphOd84GvxfSvnnlEyBtQCE5hxVVw==} + cpu: [x64] + os: [freebsd] + '@rollup/rollup-linux-arm-gnueabihf@4.34.8': resolution: {integrity: sha512-A4iphFGNkWRd+5m3VIGuqHnG3MVnqKe7Al57u9mwgbyZ2/xF9Jio72MaY7xxh+Y87VAHmGQr73qoKL9HPbXj1g==} cpu: [arm] os: [linux] + '@rollup/rollup-linux-arm-gnueabihf@4.35.0': + resolution: {integrity: sha512-mrA0v3QMy6ZSvEuLs0dMxcO2LnaCONs1Z73GUDBHWbY8tFFocM6yl7YyMu7rz4zS81NDSqhrUuolyZXGi8TEqg==} + cpu: [arm] + os: [linux] + '@rollup/rollup-linux-arm-musleabihf@4.34.8': resolution: {integrity: sha512-S0lqKLfTm5u+QTxlFiAnb2J/2dgQqRy/XvziPtDd1rKZFXHTyYLoVL58M/XFwDI01AQCDIevGLbQrMAtdyanpA==} cpu: [arm] os: [linux] + '@rollup/rollup-linux-arm-musleabihf@4.35.0': + resolution: {integrity: sha512-DnYhhzcvTAKNexIql8pFajr0PiDGrIsBYPRvCKlA5ixSS3uwo/CWNZxB09jhIapEIg945KOzcYEAGGSmTSpk7A==} + cpu: [arm] + os: [linux] + '@rollup/rollup-linux-arm64-gnu@4.34.8': resolution: {integrity: sha512-jpz9YOuPiSkL4G4pqKrus0pn9aYwpImGkosRKwNi+sJSkz+WU3anZe6hi73StLOQdfXYXC7hUfsQlTnjMd3s1A==} cpu: [arm64] os: [linux] + '@rollup/rollup-linux-arm64-gnu@4.35.0': + resolution: {integrity: sha512-uagpnH2M2g2b5iLsCTZ35CL1FgyuzzJQ8L9VtlJ+FckBXroTwNOaD0z0/UF+k5K3aNQjbm8LIVpxykUOQt1m/A==} + cpu: [arm64] + os: [linux] + '@rollup/rollup-linux-arm64-musl@4.34.8': resolution: {integrity: sha512-KdSfaROOUJXgTVxJNAZ3KwkRc5nggDk+06P6lgi1HLv1hskgvxHUKZ4xtwHkVYJ1Rep4GNo+uEfycCRRxht7+Q==} cpu: [arm64] os: [linux] + '@rollup/rollup-linux-arm64-musl@4.35.0': + resolution: {integrity: sha512-XQxVOCd6VJeHQA/7YcqyV0/88N6ysSVzRjJ9I9UA/xXpEsjvAgDTgH3wQYz5bmr7SPtVK2TsP2fQ2N9L4ukoUg==} + cpu: [arm64] + os: [linux] + '@rollup/rollup-linux-loongarch64-gnu@4.34.8': resolution: {integrity: sha512-NyF4gcxwkMFRjgXBM6g2lkT58OWztZvw5KkV2K0qqSnUEqCVcqdh2jN4gQrTn/YUpAcNKyFHfoOZEer9nwo6uQ==} cpu: [loong64] os: [linux] + '@rollup/rollup-linux-loongarch64-gnu@4.35.0': + resolution: {integrity: sha512-5pMT5PzfgwcXEwOaSrqVsz/LvjDZt+vQ8RT/70yhPU06PTuq8WaHhfT1LW+cdD7mW6i/J5/XIkX/1tCAkh1W6g==} + cpu: [loong64] + os: [linux] + '@rollup/rollup-linux-powerpc64le-gnu@4.34.8': resolution: {integrity: sha512-LMJc999GkhGvktHU85zNTDImZVUCJ1z/MbAJTnviiWmmjyckP5aQsHtcujMjpNdMZPT2rQEDBlJfubhs3jsMfw==} cpu: [ppc64] os: [linux] + '@rollup/rollup-linux-powerpc64le-gnu@4.35.0': + resolution: {integrity: sha512-c+zkcvbhbXF98f4CtEIP1EBA/lCic5xB0lToneZYvMeKu5Kamq3O8gqrxiYYLzlZH6E3Aq+TSW86E4ay8iD8EA==} + cpu: [ppc64] + os: [linux] + '@rollup/rollup-linux-riscv64-gnu@4.34.8': resolution: {integrity: sha512-xAQCAHPj8nJq1PI3z8CIZzXuXCstquz7cIOL73HHdXiRcKk8Ywwqtx2wrIy23EcTn4aZ2fLJNBB8d0tQENPCmw==} cpu: [riscv64] os: [linux] + '@rollup/rollup-linux-riscv64-gnu@4.35.0': + resolution: {integrity: sha512-s91fuAHdOwH/Tad2tzTtPX7UZyytHIRR6V4+2IGlV0Cej5rkG0R61SX4l4y9sh0JBibMiploZx3oHKPnQBKe4g==} + cpu: [riscv64] + os: [linux] + '@rollup/rollup-linux-s390x-gnu@4.34.8': resolution: {integrity: sha512-DdePVk1NDEuc3fOe3dPPTb+rjMtuFw89gw6gVWxQFAuEqqSdDKnrwzZHrUYdac7A7dXl9Q2Vflxpme15gUWQFA==} cpu: [s390x] os: [linux] + '@rollup/rollup-linux-s390x-gnu@4.35.0': + resolution: {integrity: sha512-hQRkPQPLYJZYGP+Hj4fR9dDBMIM7zrzJDWFEMPdTnTy95Ljnv0/4w/ixFw3pTBMEuuEuoqtBINYND4M7ujcuQw==} + cpu: [s390x] + os: [linux] + '@rollup/rollup-linux-x64-gnu@4.34.8': resolution: {integrity: sha512-8y7ED8gjxITUltTUEJLQdgpbPh1sUQ0kMTmufRF/Ns5tI9TNMNlhWtmPKKHCU0SilX+3MJkZ0zERYYGIVBYHIA==} cpu: [x64] os: [linux] + '@rollup/rollup-linux-x64-gnu@4.35.0': + resolution: {integrity: sha512-Pim1T8rXOri+0HmV4CdKSGrqcBWX0d1HoPnQ0uw0bdp1aP5SdQVNBy8LjYncvnLgu3fnnCt17xjWGd4cqh8/hA==} + cpu: [x64] + os: [linux] + '@rollup/rollup-linux-x64-musl@4.34.8': resolution: {integrity: sha512-SCXcP0ZpGFIe7Ge+McxY5zKxiEI5ra+GT3QRxL0pMMtxPfpyLAKleZODi1zdRHkz5/BhueUrYtYVgubqe9JBNQ==} cpu: [x64] os: [linux] + '@rollup/rollup-linux-x64-musl@4.35.0': + resolution: {integrity: sha512-QysqXzYiDvQWfUiTm8XmJNO2zm9yC9P/2Gkrwg2dH9cxotQzunBHYr6jk4SujCTqnfGxduOmQcI7c2ryuW8XVg==} + cpu: [x64] + os: [linux] + '@rollup/rollup-win32-arm64-msvc@4.34.8': resolution: {integrity: sha512-YHYsgzZgFJzTRbth4h7Or0m5O74Yda+hLin0irAIobkLQFRQd1qWmnoVfwmKm9TXIZVAD0nZ+GEb2ICicLyCnQ==} cpu: [arm64] os: [win32] + '@rollup/rollup-win32-arm64-msvc@4.35.0': + resolution: {integrity: sha512-OUOlGqPkVJCdJETKOCEf1mw848ZyJ5w50/rZ/3IBQVdLfR5jk/6Sr5m3iO2tdPgwo0x7VcncYuOvMhBWZq8ayg==} + cpu: [arm64] + os: [win32] + '@rollup/rollup-win32-ia32-msvc@4.34.8': resolution: {integrity: sha512-r3NRQrXkHr4uWy5TOjTpTYojR9XmF0j/RYgKCef+Ag46FWUTltm5ziticv8LdNsDMehjJ543x/+TJAek/xBA2w==} cpu: [ia32] os: [win32] + '@rollup/rollup-win32-ia32-msvc@4.35.0': + resolution: {integrity: sha512-2/lsgejMrtwQe44glq7AFFHLfJBPafpsTa6JvP2NGef/ifOa4KBoglVf7AKN7EV9o32evBPRqfg96fEHzWo5kw==} + cpu: [ia32] + os: [win32] + '@rollup/rollup-win32-x64-msvc@4.34.8': resolution: {integrity: sha512-U0FaE5O1BCpZSeE6gBl3c5ObhePQSfk9vDRToMmTkbhCOgW4jqvtS5LGyQ76L1fH8sM0keRp4uDTsbjiUyjk0g==} cpu: [x64] os: [win32] + '@rollup/rollup-win32-x64-msvc@4.35.0': + resolution: {integrity: sha512-PIQeY5XDkrOysbQblSW7v3l1MDZzkTEzAfTPkj5VAu3FW8fS4ynyLg2sINp0fp3SjZ8xkRYpLqoKcYqAkhU1dw==} + cpu: [x64] + os: [win32] + '@shikijs/core@1.22.0': resolution: {integrity: sha512-S8sMe4q71TJAW+qG93s5VaiihujRK6rqDFqBnxqvga/3LvqHEnxqBIOPkt//IdXVtHkQWKu4nOQNk0uBGicU7Q==} @@ -1505,9 +1817,15 @@ packages: '@types/braces@3.0.4': resolution: {integrity: sha512-0WR3b8eaISjEW7RpZnclONaLFDf7buaowRHdqLp4vLj54AsSAYWfh3DRbfiYJY9XDxMgx1B4sE1Afw2PGpuHOA==} + '@types/concat-stream@2.0.3': + resolution: {integrity: sha512-3qe4oQAPNwVNwK4C9c8u+VJqv9kez+2MR4qJpoPFfXtgxxif1QbFusvXzK0/Wra2VX07smostI2VMmJNSpZjuQ==} + '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + '@types/eslint@8.56.12': + resolution: {integrity: sha512-03ruubjWyOHlmljCVoxSuNDdmfZDzsrrz0P2LeJsOXr+ZwFQ+0yQIwNCwt/GYhV7Z31fgtXJTAEs+FYlEL851g==} + '@types/estree-jsx@1.0.5': resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} @@ -1520,6 +1838,9 @@ packages: '@types/http-proxy@1.17.15': resolution: {integrity: sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==} + '@types/is-empty@1.2.3': + resolution: {integrity: sha512-4J1l5d79hoIvsrKh5VUKVRA1aIdsOb10Hu5j3J2VfP/msDnfTdGPmNp2E1Wg+vs97Bktzo+MZePFFXSGoykYJw==} + '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} @@ -1553,8 +1874,8 @@ packages: '@types/sax@1.2.7': resolution: {integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==} - '@types/semver@7.5.8': - resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} + '@types/supports-color@8.1.3': + resolution: {integrity: sha512-Hy6UMpxhE3j1tLpl27exp1XqHD7n8chAiNPzWfz16LPZoMMoSc4dzLl6w9qijkEb/r5O1ozdu1CWGA2L83ZeZg==} '@types/ungap__structured-clone@1.2.0': resolution: {integrity: sha512-ZoaihZNLeZSxESbk9PUAPZOlSpcKx81I1+4emtULDVmBLkYutTcMlCj2K9VNlf9EWODxdO6gkAqEaLorXwZQVA==} @@ -1565,90 +1886,58 @@ packages: '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - '@typescript-eslint/eslint-plugin@8.9.0': - resolution: {integrity: sha512-Y1n621OCy4m7/vTXNlCbMVp87zSd7NH0L9cXD8aIpOaNlzeWxIK4+Q19A68gSmTNRZn92UjocVUWDthGxtqHFg==} + '@typescript-eslint/eslint-plugin@8.26.0': + resolution: {integrity: sha512-cLr1J6pe56zjKYajK6SSSre6nl1Gj6xDp1TY0trpgPzjVbgDwd09v2Ws37LABxzkicmUjhEeg/fAUjPJJB1v5Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 eslint: ^8.57.0 || ^9.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/parser@8.9.0': - resolution: {integrity: sha512-U+BLn2rqTTHnc4FL3FJjxaXptTxmf9sNftJK62XLz4+GxG3hLHm/SUNaaXP5Y4uTiuYoL5YLy4JBCJe3+t8awQ==} + '@typescript-eslint/parser@8.26.0': + resolution: {integrity: sha512-mNtXP9LTVBy14ZF3o7JG69gRPBK/2QWtQd0j0oH26HcY/foyJJau6pNUez7QrM5UHnSvwlQcJXKsk0I99B9pOA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/scope-manager@6.21.0': - resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} - engines: {node: ^16.0.0 || >=18.0.0} - - '@typescript-eslint/scope-manager@8.9.0': - resolution: {integrity: sha512-bZu9bUud9ym1cabmOYH9S6TnbWRzpklVmwqICeOulTCZ9ue2/pczWzQvt/cGj2r2o1RdKoZbuEMalJJSYw3pHQ==} + '@typescript-eslint/scope-manager@8.26.0': + resolution: {integrity: sha512-E0ntLvsfPqnPwng8b8y4OGuzh/iIOm2z8U3S9zic2TeMLW61u5IH2Q1wu0oSTkfrSzwbDJIB/Lm8O3//8BWMPA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/type-utils@8.9.0': - resolution: {integrity: sha512-JD+/pCqlKqAk5961vxCluK+clkppHY07IbV3vett97KOV+8C6l+CPEPwpUuiMwgbOz/qrN3Ke4zzjqbT+ls+1Q==} + '@typescript-eslint/type-utils@8.26.0': + resolution: {integrity: sha512-ruk0RNChLKz3zKGn2LwXuVoeBcUMh+jaqzN461uMMdxy5H9epZqIBtYj7UiPXRuOpaALXGbmRuZQhmwHhaS04Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/types@6.21.0': - resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} - engines: {node: ^16.0.0 || >=18.0.0} + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/types@8.9.0': - resolution: {integrity: sha512-SjgkvdYyt1FAPhU9c6FiYCXrldwYYlIQLkuc+LfAhCna6ggp96ACncdtlbn8FmnG72tUkXclrDExOpEYf1nfJQ==} + '@typescript-eslint/types@8.26.0': + resolution: {integrity: sha512-89B1eP3tnpr9A8L6PZlSjBvnJhWXtYfZhECqlBl1D9Lme9mHO6iWlsprBtVenQvY1HMhax1mWOjhtL3fh/u+pA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@6.21.0': - resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/typescript-estree@8.9.0': - resolution: {integrity: sha512-9iJYTgKLDG6+iqegehc5+EqE6sqaee7kb8vWpmHZ86EqwDjmlqNNHeqDVqb9duh+BY6WCNHfIGvuVU3Tf9Db0g==} + '@typescript-eslint/typescript-estree@8.26.0': + resolution: {integrity: sha512-tiJ1Hvy/V/oMVRTbEOIeemA2XoylimlDQ03CgPPNaHYZbpsc78Hmngnt+WXZfJX1pjQ711V7g0H7cSJThGYfPQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/utils@6.21.0': - resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - - '@typescript-eslint/utils@8.9.0': - resolution: {integrity: sha512-PKgMmaSo/Yg/F7kIZvrgrWa1+Vwn036CdNUvYFEkYbPwOH4i8xvkaRlu148W3vtheWK9ckKRIz7PBP5oUlkrvQ==} + '@typescript-eslint/utils@8.26.0': + resolution: {integrity: sha512-2L2tU3FVwhvU14LndnQCA2frYC8JnPDVKyQtWFPf8IYFMt/ykEN1bPolNhNbCVgOmdzTlWdusCTKA/9nKrf8Ig==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/visitor-keys@6.21.0': - resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} - engines: {node: ^16.0.0 || >=18.0.0} - - '@typescript-eslint/visitor-keys@8.9.0': - resolution: {integrity: sha512-Ht4y38ubk4L5/U8xKUBfKNYGmvKvA1CANoxiTRMM+tOLk3lbF3DvzZCxJCRSE+2GdCMSh6zq9VZJc3asc1XuAA==} + '@typescript-eslint/visitor-keys@8.26.0': + resolution: {integrity: sha512-2z8JQJWAzPdDd51dRQ/oqIJxe99/hoLIqmf8RMCAJQtYDc535W/Jt2+RTP4bP0aKeBG1F65yjIZuczOXCmbWwg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript/vfs@1.6.1': + resolution: {integrity: sha512-JwoxboBh7Oz1v38tPbkrZ62ZXNHAk9bJ7c9x0eI5zBfBnBYGhURdbnh7Z4smN/MV48Y5OCcZb58n972UtbazsA==} + peerDependencies: + typescript: '*' + '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} @@ -1705,6 +1994,10 @@ packages: '@vue/shared@3.5.12': resolution: {integrity: sha512-L2RPSAwUFbgZH20etwrXyVyCBu9OxRSi8T/38QsvnkJyvq2LufW2lDCOzm7t/U9C1mkhJGWYfCuFBCmIuNivrg==} + abbrev@2.0.0: + resolution: {integrity: sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + abbrev@3.0.0: resolution: {integrity: sha512-+/kfrslGQ7TNV2ecmQwMJj/B65g5KVq1/L3SGVZ3tCYGqlzFuFCGBZJtMP99wH3NpEUyAjn0zPdPUg0D+DwrOA==} engines: {node: ^18.17.0 || >=20.5.0} @@ -1732,13 +2025,8 @@ packages: peerDependencies: acorn: '>=8.9.0' - acorn@8.12.1: - resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} - engines: {node: '>=0.4.0'} - hasBin: true - - acorn@8.14.0: - resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + acorn@8.14.1: + resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} engines: {node: '>=0.4.0'} hasBin: true @@ -1816,10 +2104,6 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - ast-types@0.16.1: resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} engines: {node: '>=4'} @@ -1993,6 +2277,10 @@ packages: resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} engines: {node: '>=18'} + ci-info@4.2.0: + resolution: {integrity: sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==} + engines: {node: '>=8'} + citty@0.1.6: resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} @@ -2058,6 +2346,10 @@ packages: concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + concat-stream@2.0.0: + resolution: {integrity: sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==} + engines: {'0': node >= 6.0} + confbox@0.1.8: resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} @@ -2091,6 +2383,10 @@ packages: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + crossws@0.3.4: resolution: {integrity: sha512-uj0O1ETYX1Bh6uSgktfPvwDiPYGQ3aI4qVsaC/LWpkIzGj1nUYm5FK3K+t11oOlpN01lGbprFCH4wBlKdJjVgw==} @@ -2231,14 +2527,14 @@ packages: resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + diff@5.2.0: + resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} + engines: {node: '>=0.3.1'} + diff@7.0.0: resolution: {integrity: sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==} engines: {node: '>=0.3.1'} - dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} - direction@2.0.1: resolution: {integrity: sha512-9S6m9Sukh1cZNknO1CWAr2QAWsbKLafQiyM5gZ7VgXHeuaoUwffKN4q6NC4A/Mf9iiPlOXQEKW/Mv/mh9/3YFA==} hasBin: true @@ -2246,10 +2542,6 @@ packages: dlv@1.1.3: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - dom-serializer@2.0.0: resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} @@ -2286,6 +2578,9 @@ packages: emoji-regex-xs@1.0.0: resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==} + emoji-regex@10.4.0: + resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} + emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -2304,6 +2599,12 @@ packages: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} + err-code@2.0.3: + resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + error-stack-parser@2.1.4: resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} @@ -2331,6 +2632,11 @@ packages: engines: {node: '>=18'} hasBin: true + esbuild@0.25.0: + resolution: {integrity: sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==} + engines: {node: '>=18'} + hasBin: true + escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} @@ -2350,25 +2656,50 @@ packages: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} - eslint-plugin-solid@0.13.2: - resolution: {integrity: sha512-Ndeuc6MEO11YVqzIzxtKKEG0t4HPJ4ob/WQyduwpTW//NtyZqWx/gPii5GF656DLqBbsfsmMaX0zkFQ8ElyOdQ==} - engines: {node: '>=12.0.0'} + eslint-mdx@3.2.0: + resolution: {integrity: sha512-7A6/TDZeUh8ORwM2pe+n1FyUjwEYfGF1OZI+sn45L11NMHSzj/RTK+VqAGjIi+kvDrGc3yScUa20L3DKW0IRjg==} + engines: {node: '>=18.0.0'} peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + eslint: '>=8.0.0' - eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-plugin-mdx@3.2.0: + resolution: {integrity: sha512-zMD6DoFf5tj86dF1M0g90IxeBzrckyhYwksvalO1vfOBPPzhpR2wAbILBHZnubNuQALVgiqYQbPQ922GpviuGA==} + engines: {node: '>=18.0.0'} + peerDependencies: + eslint: '>=8.0.0' + + eslint-plugin-solid@0.14.5: + resolution: {integrity: sha512-nfuYK09ah5aJG/oEN6P1qziy1zLgW4PDWe75VNPi4CEFYk1x2AEqwFeQfEPR7gNn0F2jOeqKhx2E+5oNCOBYWQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 + typescript: '>=4.8.4' + + eslint-scope@8.3.0: + resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint@8.57.1: - resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. + eslint-visitor-keys@4.2.0: + resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@9.22.0: + resolution: {integrity: sha512-9V/QURhsRN40xuHXWjV64yvrzMjcz7ZyNoF2jJFmy9j/SLk0u1OLSZgXi28MrXjymnjEGSR80WCdab3RGMDveQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.3.0: + resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} @@ -2441,8 +2772,15 @@ packages: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} - expressive-code@0.37.1: - resolution: {integrity: sha512-y7+5K2uJOt+Hy0KEPm83t974flu0O/DstvmezoiWXwV3Cwqf622CHMlWssaZ8uqFrJaJ1ES1cMcYXJtZSxe+9A==} + expressive-code-twoslash@0.4.0: + resolution: {integrity: sha512-7HffO04pYLNHX0P8/8xX+pdgWYpFWdP9/gYi7dAH1nSAxO1W7pQHW4Ly6OXD3fs4SChkGP/PWkE4oLo6CeXTfg==} + peerDependencies: + '@expressive-code/core': ^0.40.0 + expressive-code: ^0.40.0 + typescript: ^5.7 + + expressive-code@0.40.2: + resolution: {integrity: sha512-1zIda2rB0qiDZACawzw2rbdBQiWHBT56uBctS+ezFe5XMAaFaHLnnSYND/Kd+dVzO9HfCXRDpzH3d+3fvOWRcw==} extend-shallow@2.0.1: resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} @@ -2461,6 +2799,10 @@ packages: resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} engines: {node: '>=8.6.0'} + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} @@ -2481,9 +2823,9 @@ packages: picomatch: optional: true - file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} file-uri-to-path@1.0.0: resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} @@ -2496,12 +2838,12 @@ packages: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} - flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} - flatted@3.3.1: - resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + flatted@3.3.3: + resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} follow-redirects@1.15.9: resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} @@ -2603,17 +2945,17 @@ packages: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} - globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} globals@15.15.0: resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} engines: {node: '>=18'} - globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} + globals@16.0.0: + resolution: {integrity: sha512-iInW14XItCXET01CQFqudPOWP2jYMl7T+QRQT+UNcR/iQncN/F0UNpgd76iFkBPgNQb4+X3LV9tLJYzwh+Gl3A==} + engines: {node: '>=18'} globby@14.0.2: resolution: {integrity: sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==} @@ -2705,6 +3047,10 @@ packages: hookable@5.5.3: resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + hosted-git-info@7.0.2: + resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==} + engines: {node: ^16.14.0 || >=18.0.0} + html-entities@2.3.3: resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==} @@ -2754,10 +3100,17 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} - import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + ignore@6.0.2: + resolution: {integrity: sha512-InwqeHHN2XpumIkMvpl/DCJVrAHgCsG5+cn1XlnLWGwtZBm8QJfSusItfrwx81CTp5agNZqpKU2J/ccC5nGT4A==} + engines: {node: '>= 4'} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} + import-meta-resolve@4.1.0: + resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} + imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} @@ -2773,6 +3126,10 @@ packages: inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + ini@4.1.3: + resolution: {integrity: sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + inline-style-parser@0.1.1: resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} @@ -2792,6 +3149,9 @@ packages: is-alphanumerical@2.0.1: resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} @@ -2804,6 +3164,10 @@ packages: resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} engines: {node: '>= 0.4'} + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + is-decimal@2.0.1: resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} @@ -2817,6 +3181,9 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} hasBin: true + is-empty@1.2.0: + resolution: {integrity: sha512-F2FnH/otLNJv0J6wc73A5Xo7oHLNnqplYqZhUu01tD54DIPvxIRSTSLkrUB/M0nHO4vo1O9PDfN4KoTxCzLh/w==} + is-extendable@0.1.1: resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} engines: {node: '>=0.10.0'} @@ -2852,10 +3219,6 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - is-plain-obj@2.1.0: resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} engines: {node: '>=8'} @@ -2927,9 +3290,6 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-tokens@9.0.0: - resolution: {integrity: sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==} - js-tokens@9.0.1: resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} @@ -2949,6 +3309,10 @@ packages: json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + json-parse-even-better-errors@3.0.2: + resolution: {integrity: sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} @@ -2976,6 +3340,10 @@ packages: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} + kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + klona@2.0.6: resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} engines: {node: '>= 8'} @@ -2986,8 +3354,8 @@ packages: knitwork@1.2.0: resolution: {integrity: sha512-xYSH7AvuQ6nXkq42x0v5S8/Iry+cfulBz/DJQzhIyESdLD7425jXsPy4vn5cCXU+HhRN2kVw51Vd1K6/By4BQg==} - known-css-properties@0.24.0: - resolution: {integrity: sha512-RTSoaUAfLvpR357vWzAz/50Q/BmHfmE6ETSWfutT0AJiw10e6CmcdYRQJlLRd95B53D0Y2aD1jSxD3V3ySF+PA==} + known-css-properties@0.30.0: + resolution: {integrity: sha512-VSWXYUnsPu9+WYKkfmJyLKtIvaRJi1kXUqVmBACORXZQxT5oZDsoZ2vQP+bQFDnWtpI/4eq3MLoRMjI2fnLzTQ==} kolorist@1.8.0: resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} @@ -3011,10 +3379,17 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + lines-and-columns@2.0.4: + resolution: {integrity: sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + listhen@1.9.0: resolution: {integrity: sha512-I8oW2+QL5KJo8zXNWX046M134WchxsXC7SawLPvRQpogCbkyQIaFxPE89A2HiwR7vAK2Dm2ERBAmyjTYGYEpBg==} hasBin: true + load-plugin@6.0.3: + resolution: {integrity: sha512-kc0X2FEUZr145odl68frm+lMJuQ23+rTXYmR6TImqPtbpmXC4vVXbWKDQ9IzndA0HfyQamWfKLhzsqGSTxE63w==} + local-pkg@0.5.0: resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} engines: {node: '>=14'} @@ -3083,8 +3458,8 @@ packages: mdast-util-find-and-replace@3.0.1: resolution: {integrity: sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==} - mdast-util-from-markdown@2.0.1: - resolution: {integrity: sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==} + mdast-util-from-markdown@2.0.2: + resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==} mdast-util-frontmatter@2.0.1: resolution: {integrity: sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==} @@ -3107,6 +3482,9 @@ packages: mdast-util-gfm@3.0.0: resolution: {integrity: sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==} + mdast-util-gfm@3.1.0: + resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==} + mdast-util-mdx-expression@2.0.1: resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==} @@ -3294,10 +3672,6 @@ packages: resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} engines: {node: '>=10'} - minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} - engines: {node: '>=16 || 14 >=14.17'} - minimatch@9.0.5: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} @@ -3338,6 +3712,10 @@ packages: mlly@1.7.4: resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} + mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + ms@2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} @@ -3406,11 +3784,20 @@ packages: node-releases@2.0.18: resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} + nopt@7.2.1: + resolution: {integrity: sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + hasBin: true + nopt@8.1.0: resolution: {integrity: sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==} engines: {node: ^18.17.0 || >=20.5.0} hasBin: true + normalize-package-data@6.0.2: + resolution: {integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==} + engines: {node: ^16.14.0 || >=18.0.0} + normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} @@ -3419,6 +3806,22 @@ packages: resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} engines: {node: '>=0.10.0'} + npm-install-checks@6.3.0: + resolution: {integrity: sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + npm-normalize-package-bin@3.0.1: + resolution: {integrity: sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + npm-package-arg@11.0.3: + resolution: {integrity: sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw==} + engines: {node: ^16.14.0 || >=18.0.0} + + npm-pick-manifest@9.1.0: + resolution: {integrity: sha512-nkc+3pIIhqHVQr085X9d2JzPzLyjzQS96zbruppqC9aZRm/x8xx6xhI98gHtsfELP2bE+loHq8ZaHFHhe+NauA==} + engines: {node: ^16.14.0 || >=18.0.0} + npm-run-path@5.3.0: resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -3506,6 +3909,10 @@ packages: parse-entities@4.0.1: resolution: {integrity: sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==} + parse-json@7.1.1: + resolution: {integrity: sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw==} + engines: {node: '>=16'} + parse-json@8.1.0: resolution: {integrity: sha512-rum1bPifK5SSar35Z6EKZuYPJx85pkNaFrxBK3mwdfSJ1/WKbYrjoW/zTPSjRRamfmVX1ACBIdFAO0VRErW/EA==} engines: {node: '>=18'} @@ -3546,10 +3953,6 @@ packages: path-to-regexp@6.3.0: resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} - path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - path-type@5.0.0: resolution: {integrity: sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==} engines: {node: '>=12'} @@ -3664,6 +4067,10 @@ packages: resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + proc-log@4.2.0: + resolution: {integrity: sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} @@ -3671,6 +4078,18 @@ packages: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} + promise-inflight@1.0.1: + resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} + peerDependencies: + bluebird: '*' + peerDependenciesMeta: + bluebird: + optional: true + + promise-retry@2.0.1: + resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} + engines: {node: '>=10'} + property-information@6.5.0: resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} @@ -3713,9 +4132,17 @@ packages: read-cache@1.0.0: resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + read-package-json-fast@3.0.2: + resolution: {integrity: sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + readable-stream@2.3.8: resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + readable-stream@4.5.2: resolution: {integrity: sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -3770,8 +4197,8 @@ packages: rehype-autolink-headings@7.1.0: resolution: {integrity: sha512-rItO/pSdvnvsP4QRB1pmPiNHUskikqtPojZKJPPPAVx9Hj8i8TwMBhofrrAYRhYOOBZH9tgmG5lPqDLuIWPWmw==} - rehype-expressive-code@0.37.1: - resolution: {integrity: sha512-HK6RJubSfgC6jpfk7UpGQcEgpMP+dhKrUQ1MmnDFYT9mOHteoLJv09WMURpQrIvXDpKCiAsaWQUBfNqRxjfL2Q==} + rehype-expressive-code@0.40.2: + resolution: {integrity: sha512-+kn+AMGCrGzvtH8Q5lC6Y5lnmTV/r33fdmi5QU/IH1KPHKobKr5UnLwJuqHv5jBTSN/0v2wLDS7RTM73FVzqmQ==} rehype-raw@7.0.0: resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} @@ -3825,19 +4252,23 @@ packages: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} + resolve@1.22.10: + resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + engines: {node: '>= 0.4'} + hasBin: true + resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true + retry@0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} + reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - rimraf@5.0.10: resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} hasBin: true @@ -3852,14 +4283,28 @@ packages: rollup: optional: true + rollup@2.79.2: + resolution: {integrity: sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==} + engines: {node: '>=10.0.0'} + hasBin: true + rollup@4.34.8: resolution: {integrity: sha512-489gTVMzAYdiZHFVA/ig/iYFllCcWFHMvUHI1rpFmkoUtRlQxqh6/yiNqnYibjMZ2b/+FUQwldG+aLsEt6bglQ==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + rollup@4.35.0: + resolution: {integrity: sha512-kg6oI4g+vc41vePJyO6dHt/yl0Rz3Thv0kJeVQ3D1kS3E5XSuKbPc29G4IpT/Kv1KQwgHVcN+HtyS+HYLNSvQg==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + sade@1.8.1: + resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} + engines: {node: '>=6'} + safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} @@ -3888,6 +4333,11 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.7.1: + resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} + engines: {node: '>=10'} + hasBin: true + send@0.19.0: resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} engines: {node: '>= 0.8.0'} @@ -3944,10 +4394,6 @@ packages: engines: {node: '>=12.0.0', npm: '>=5.6.0'} hasBin: true - slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - slash@5.1.0: resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} engines: {node: '>=14.16'} @@ -4017,6 +4463,18 @@ packages: space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + + spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} + + spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + + spdx-license-ids@3.0.21: + resolution: {integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==} + sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} @@ -4044,6 +4502,10 @@ packages: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} + string-width@6.1.0: + resolution: {integrity: sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ==} + engines: {node: '>=16'} + string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} @@ -4079,9 +4541,6 @@ packages: strip-literal@3.0.0: resolution: {integrity: sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==} - style-to-object@0.3.0: - resolution: {integrity: sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==} - style-to-object@0.4.4: resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==} @@ -4109,6 +4568,10 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} + synckit@0.9.2: + resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==} + engines: {node: ^14.18.0 || >=16.0.0} + system-architecture@0.1.0: resolution: {integrity: sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA==} engines: {node: '>=18'} @@ -4143,9 +4606,6 @@ packages: text-decoder@1.2.0: resolution: {integrity: sha512-n1yg1mOj9DNpk3NeZOx7T6jchTbyJS3i3cucbNN6FcdPriMZx7NsgrGpWWdWZZGxD7ES1XB+3uoqHMgOKaN+fg==} - text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - thenify-all@1.6.0: resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} engines: {node: '>=0.8'} @@ -4190,11 +4650,11 @@ packages: trough@2.2.0: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} - ts-api-utils@1.3.0: - resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} - engines: {node: '>=16'} + ts-api-utils@2.0.1: + resolution: {integrity: sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==} + engines: {node: '>=18.12'} peerDependencies: - typescript: '>=4.2.0' + typescript: '>=4.8.4' ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} @@ -4202,24 +4662,38 @@ packages: tslib@2.8.0: resolution: {integrity: sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==} + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + twoslash-protocol@0.2.12: + resolution: {integrity: sha512-5qZLXVYfZ9ABdjqbvPc4RWMr7PrpPaaDSeaYY55vl/w1j6H6kzsWK/urAEIXlzYlyrFmyz1UbwIt+AA0ck+wbg==} + + twoslash@0.2.12: + resolution: {integrity: sha512-tEHPASMqi7kqwfJbkk7hc/4EhlrKCSLcur+TcvYki3vhIfaRMXnXjaYFgXpoZRbT6GdprD4tGuVBEmTpUgLBsw==} + peerDependencies: + typescript: '*' + type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - type-fest@2.19.0: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} + type-fest@3.13.1: + resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} + engines: {node: '>=14.16'} + type-fest@4.35.0: resolution: {integrity: sha512-2/AwEFQDFEy30iOLjrvHDIH7e4HEWH+f1Yl1bI5XMqzuoCUqwYCdxachgsgv0og/JdVZUhbfjcJAoHj5L1753A==} engines: {node: '>=16'} - typescript@5.6.3: - resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} + typedarray@0.0.6: + resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} + + typescript@5.8.2: + resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} engines: {node: '>=14.17'} hasBin: true @@ -4251,6 +4725,9 @@ packages: resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} engines: {node: '>=18'} + unified-engine@11.2.2: + resolution: {integrity: sha512-15g/gWE7qQl9tQ3nAEbMd5h9HV1EACtFs6N9xaRBZICoCwnNGbal1kOs++ICf4aiTdItZxU2s/kYWhW7htlqJg==} + unified@11.0.5: resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} @@ -4270,6 +4747,9 @@ packages: unist-util-find-after@5.0.0: resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} + unist-util-inspect@8.1.0: + resolution: {integrity: sha512-mOlg8Mp33pR0eeFpo5d2902ojqFFOKMMG2hF8bmH7ZlhnmjFgh0NI3/ZDwdaBJNbvrS7LZFVrBVtIE9KZ9s7vQ==} + unist-util-is@6.0.0: resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} @@ -4454,9 +4934,21 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + uvu@0.5.6: + resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} + engines: {node: '>=8'} + hasBin: true + validate-html-nesting@1.2.2: resolution: {integrity: sha512-hGdgQozCsQJMyfK5urgFcWEqsSSrK63Awe0t/IMR0bZ0QMtnuaiHzThW81guu3qx9abLi99NEuiaN6P9gVYsNg==} + validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + + validate-npm-package-name@5.0.1: + resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + vfile-location@5.0.3: resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} @@ -4469,6 +4961,15 @@ packages: vfile-message@4.0.2: resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} + vfile-reporter@8.1.1: + resolution: {integrity: sha512-qxRZcnFSQt6pWKn3PAk81yLK2rO2i7CDXpy8v8ZquiEOMLSnPw6BMSi9Y1sUCwGGl7a9b3CJT1CKpnRF7pp66g==} + + vfile-sort@4.0.0: + resolution: {integrity: sha512-lffPI1JrbHDTToJwcq0rl6rBmkjQmMuXkAxsZPRS9DXbaJQvc642eCg6EGxcX2i1L+esbuhq+2l9tBll5v8AeQ==} + + vfile-statistics@3.0.0: + resolution: {integrity: sha512-/qlwqwWBWFOmpXujL/20P+Iuydil0rZZNglR+VNm6J0gpLHwuVM5s7g2TfVoswbXjZ4HuIhLMySEyIw5i7/D8w==} + vfile@4.2.1: resolution: {integrity: sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==} @@ -4482,6 +4983,12 @@ packages: resolution: {integrity: sha512-4sL2SMrRzdzClapP44oXdGjCE1oq7/DagsbjY5A09EibmoIO4LP8ScRVdh03lfXxKRk7nCWK7n7dqKvm+fp/9w==} hasBin: true + vite-plugin-eslint@1.8.1: + resolution: {integrity: sha512-PqdMf3Y2fLO9FsNPmMX+//2BF5SF8nEWspZdgl4kSt7UvHDRHVVfHvxsD7ULYzZrJDGRxR81Nq7TOFgwMnUang==} + peerDependencies: + eslint: '>=7' + vite: '>=2' + vite-plugin-solid@2.11.2: resolution: {integrity: sha512-/OXVasW5OIRSFXnqzMgm8X3hPvf+JTbGecjQhmk7QnbDFq4hqdLssuYAWw9GsJGfzUPiMHM3ME2Y2XHPsTWmkw==} peerDependencies: @@ -4492,8 +4999,8 @@ packages: '@testing-library/jest-dom': optional: true - vite@6.1.1: - resolution: {integrity: sha512-4GgM54XrwRfrOp297aIYspIti66k56v16ZnqHvrIM7mG+HjDlAwS7p+Srr7J6fGvEdOJ5JcQ/D9T7HhtdXDTzA==} + vite@6.2.1: + resolution: {integrity: sha512-n2GnqDb6XPhlt9B8olZPrgMD/es/Nd1RdChF6CBD/fHW6pUyUTt2sQW2fPRX5GiD9XEa6+8A6A4f2vT6pSsE7Q==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: @@ -4548,6 +5055,9 @@ packages: typescript: optional: true + walk-up-path@3.0.1: + resolution: {integrity: sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA==} + web-namespaces@2.0.1: resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} @@ -4786,7 +5296,7 @@ snapshots: '@babel/traverse': 7.25.7 '@babel/types': 7.25.8 convert-source-map: 2.0.0 - debug: 4.3.7(supports-color@9.4.0) + debug: 4.4.0(supports-color@9.4.0) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -4806,7 +5316,7 @@ snapshots: '@babel/traverse': 7.26.9 '@babel/types': 7.26.9 convert-source-map: 2.0.0 - debug: 4.3.7(supports-color@9.4.0) + debug: 4.4.0(supports-color@9.4.0) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -4867,7 +5377,7 @@ snapshots: '@babel/core': 7.25.8 '@babel/helper-module-imports': 7.25.7 '@babel/helper-simple-access': 7.25.7 - '@babel/helper-validator-identifier': 7.25.7 + '@babel/helper-validator-identifier': 7.25.9 '@babel/traverse': 7.25.7 transitivePeerDependencies: - supports-color @@ -4896,8 +5406,6 @@ snapshots: '@babel/helper-string-parser@7.25.9': {} - '@babel/helper-validator-identifier@7.25.7': {} - '@babel/helper-validator-identifier@7.25.9': {} '@babel/helper-validator-option@7.25.7': {} @@ -4916,7 +5424,7 @@ snapshots: '@babel/highlight@7.25.7': dependencies: - '@babel/helper-validator-identifier': 7.25.7 + '@babel/helper-validator-identifier': 7.25.9 chalk: 2.4.2 js-tokens: 4.0.0 picocolors: 1.1.1 @@ -4953,7 +5461,7 @@ snapshots: '@babel/template@7.25.7': dependencies: - '@babel/code-frame': 7.25.7 + '@babel/code-frame': 7.26.2 '@babel/parser': 7.25.8 '@babel/types': 7.25.8 @@ -4965,12 +5473,12 @@ snapshots: '@babel/traverse@7.25.7': dependencies: - '@babel/code-frame': 7.25.7 + '@babel/code-frame': 7.26.2 '@babel/generator': 7.25.7 '@babel/parser': 7.25.8 '@babel/template': 7.25.7 '@babel/types': 7.25.8 - debug: 4.3.7(supports-color@9.4.0) + debug: 4.4.0(supports-color@9.4.0) globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -4982,7 +5490,7 @@ snapshots: '@babel/parser': 7.26.9 '@babel/template': 7.26.9 '@babel/types': 7.26.9 - debug: 4.3.7(supports-color@9.4.0) + debug: 4.4.0(supports-color@9.4.0) globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -4990,7 +5498,7 @@ snapshots: '@babel/types@7.25.8': dependencies: '@babel/helper-string-parser': 7.25.7 - '@babel/helper-validator-identifier': 7.25.7 + '@babel/helper-validator-identifier': 7.25.9 to-fast-properties: 2.0.0 '@babel/types@7.26.9': @@ -5054,6 +5562,9 @@ snapshots: '@esbuild/aix-ppc64@0.24.2': optional: true + '@esbuild/aix-ppc64@0.25.0': + optional: true + '@esbuild/android-arm64@0.18.7': optional: true @@ -5063,6 +5574,9 @@ snapshots: '@esbuild/android-arm64@0.24.2': optional: true + '@esbuild/android-arm64@0.25.0': + optional: true + '@esbuild/android-arm@0.18.7': optional: true @@ -5072,6 +5586,9 @@ snapshots: '@esbuild/android-arm@0.24.2': optional: true + '@esbuild/android-arm@0.25.0': + optional: true + '@esbuild/android-x64@0.18.7': optional: true @@ -5081,6 +5598,9 @@ snapshots: '@esbuild/android-x64@0.24.2': optional: true + '@esbuild/android-x64@0.25.0': + optional: true + '@esbuild/darwin-arm64@0.18.7': optional: true @@ -5090,6 +5610,9 @@ snapshots: '@esbuild/darwin-arm64@0.24.2': optional: true + '@esbuild/darwin-arm64@0.25.0': + optional: true + '@esbuild/darwin-x64@0.18.7': optional: true @@ -5099,6 +5622,9 @@ snapshots: '@esbuild/darwin-x64@0.24.2': optional: true + '@esbuild/darwin-x64@0.25.0': + optional: true + '@esbuild/freebsd-arm64@0.18.7': optional: true @@ -5108,6 +5634,9 @@ snapshots: '@esbuild/freebsd-arm64@0.24.2': optional: true + '@esbuild/freebsd-arm64@0.25.0': + optional: true + '@esbuild/freebsd-x64@0.18.7': optional: true @@ -5117,6 +5646,9 @@ snapshots: '@esbuild/freebsd-x64@0.24.2': optional: true + '@esbuild/freebsd-x64@0.25.0': + optional: true + '@esbuild/linux-arm64@0.18.7': optional: true @@ -5126,6 +5658,9 @@ snapshots: '@esbuild/linux-arm64@0.24.2': optional: true + '@esbuild/linux-arm64@0.25.0': + optional: true + '@esbuild/linux-arm@0.18.7': optional: true @@ -5135,6 +5670,9 @@ snapshots: '@esbuild/linux-arm@0.24.2': optional: true + '@esbuild/linux-arm@0.25.0': + optional: true + '@esbuild/linux-ia32@0.18.7': optional: true @@ -5144,6 +5682,9 @@ snapshots: '@esbuild/linux-ia32@0.24.2': optional: true + '@esbuild/linux-ia32@0.25.0': + optional: true + '@esbuild/linux-loong64@0.18.7': optional: true @@ -5153,6 +5694,9 @@ snapshots: '@esbuild/linux-loong64@0.24.2': optional: true + '@esbuild/linux-loong64@0.25.0': + optional: true + '@esbuild/linux-mips64el@0.18.7': optional: true @@ -5162,6 +5706,9 @@ snapshots: '@esbuild/linux-mips64el@0.24.2': optional: true + '@esbuild/linux-mips64el@0.25.0': + optional: true + '@esbuild/linux-ppc64@0.18.7': optional: true @@ -5171,6 +5718,9 @@ snapshots: '@esbuild/linux-ppc64@0.24.2': optional: true + '@esbuild/linux-ppc64@0.25.0': + optional: true + '@esbuild/linux-riscv64@0.18.7': optional: true @@ -5180,6 +5730,9 @@ snapshots: '@esbuild/linux-riscv64@0.24.2': optional: true + '@esbuild/linux-riscv64@0.25.0': + optional: true + '@esbuild/linux-s390x@0.18.7': optional: true @@ -5189,6 +5742,9 @@ snapshots: '@esbuild/linux-s390x@0.24.2': optional: true + '@esbuild/linux-s390x@0.25.0': + optional: true + '@esbuild/linux-x64@0.18.7': optional: true @@ -5198,9 +5754,15 @@ snapshots: '@esbuild/linux-x64@0.24.2': optional: true + '@esbuild/linux-x64@0.25.0': + optional: true + '@esbuild/netbsd-arm64@0.24.2': optional: true + '@esbuild/netbsd-arm64@0.25.0': + optional: true + '@esbuild/netbsd-x64@0.18.7': optional: true @@ -5210,9 +5772,15 @@ snapshots: '@esbuild/netbsd-x64@0.24.2': optional: true + '@esbuild/netbsd-x64@0.25.0': + optional: true + '@esbuild/openbsd-arm64@0.24.2': optional: true + '@esbuild/openbsd-arm64@0.25.0': + optional: true + '@esbuild/openbsd-x64@0.18.7': optional: true @@ -5222,6 +5790,9 @@ snapshots: '@esbuild/openbsd-x64@0.24.2': optional: true + '@esbuild/openbsd-x64@0.25.0': + optional: true + '@esbuild/sunos-x64@0.18.7': optional: true @@ -5231,6 +5802,9 @@ snapshots: '@esbuild/sunos-x64@0.24.2': optional: true + '@esbuild/sunos-x64@0.25.0': + optional: true + '@esbuild/win32-arm64@0.18.7': optional: true @@ -5240,6 +5814,9 @@ snapshots: '@esbuild/win32-arm64@0.24.2': optional: true + '@esbuild/win32-arm64@0.25.0': + optional: true + '@esbuild/win32-ia32@0.18.7': optional: true @@ -5249,6 +5826,9 @@ snapshots: '@esbuild/win32-ia32@0.24.2': optional: true + '@esbuild/win32-ia32@0.25.0': + optional: true + '@esbuild/win32-x64@0.18.7': optional: true @@ -5258,42 +5838,54 @@ snapshots: '@esbuild/win32-x64@0.24.2': optional: true - '@eslint-community/eslint-utils@4.4.0(eslint@8.57.1)': + '@esbuild/win32-x64@0.25.0': + optional: true + + '@eslint-community/eslint-utils@4.4.1(eslint@9.22.0(jiti@2.4.2))': dependencies: - eslint: 8.57.1 + eslint: 9.22.0(jiti@2.4.2) eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.11.1': {} + '@eslint-community/regexpp@4.12.1': {} + + '@eslint/config-array@0.19.2': + dependencies: + '@eslint/object-schema': 2.1.6 + debug: 4.4.0(supports-color@9.4.0) + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/config-helpers@0.1.0': {} + + '@eslint/core@0.12.0': + dependencies: + '@types/json-schema': 7.0.15 - '@eslint/eslintrc@2.1.4': + '@eslint/eslintrc@3.3.0': dependencies: ajv: 6.12.6 - debug: 4.3.7(supports-color@9.4.0) - espree: 9.6.1 - globals: 13.24.0 + debug: 4.4.0(supports-color@9.4.0) + espree: 10.3.0 + globals: 14.0.0 ignore: 5.3.2 - import-fresh: 3.3.0 + import-fresh: 3.3.1 js-yaml: 4.1.0 minimatch: 3.1.2 strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color - '@eslint/js@8.57.1': {} + '@eslint/js@9.22.0': {} + + '@eslint/object-schema@2.1.6': {} - '@expressive-code/core@0.37.1': + '@eslint/plugin-kit@0.2.7': dependencies: - '@ctrl/tinycolor': 4.1.0 - hast-util-select: 6.0.3 - hast-util-to-html: 9.0.5 - hast-util-to-text: 4.0.2 - hastscript: 9.0.0 - postcss: 8.5.3 - postcss-nested: 6.2.0(postcss@8.5.3) - unist-util-visit: 5.0.0 - unist-util-visit-parents: 6.0.1 + '@eslint/core': 0.12.0 + levn: 0.4.1 - '@expressive-code/core@0.38.3': + '@expressive-code/core@0.40.2': dependencies: '@ctrl/tinycolor': 4.1.0 hast-util-select: 6.0.3 @@ -5305,30 +5897,26 @@ snapshots: unist-util-visit: 5.0.0 unist-util-visit-parents: 6.0.1 - '@expressive-code/plugin-collapsible-sections@0.37.1': - dependencies: - '@expressive-code/core': 0.37.1 - - '@expressive-code/plugin-frames@0.37.1': + '@expressive-code/plugin-collapsible-sections@0.40.2': dependencies: - '@expressive-code/core': 0.37.1 + '@expressive-code/core': 0.40.2 - '@expressive-code/plugin-frames@0.38.3': + '@expressive-code/plugin-frames@0.40.2': dependencies: - '@expressive-code/core': 0.38.3 + '@expressive-code/core': 0.40.2 - '@expressive-code/plugin-line-numbers@0.37.1': + '@expressive-code/plugin-line-numbers@0.40.2': dependencies: - '@expressive-code/core': 0.37.1 + '@expressive-code/core': 0.40.2 - '@expressive-code/plugin-shiki@0.37.1': + '@expressive-code/plugin-shiki@0.40.2': dependencies: - '@expressive-code/core': 0.37.1 + '@expressive-code/core': 0.40.2 shiki: 1.29.2 - '@expressive-code/plugin-text-markers@0.37.1': + '@expressive-code/plugin-text-markers@0.40.2': dependencies: - '@expressive-code/core': 0.37.1 + '@expressive-code/core': 0.40.2 '@floating-ui/core@1.6.8': dependencies: @@ -5347,17 +5935,18 @@ snapshots: '@fontsource-variable/lexend@5.1.2': {} - '@humanwhocodes/config-array@0.13.0': + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.6': dependencies: - '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.7(supports-color@9.4.0) - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.3.1 '@humanwhocodes/module-importer@1.0.1': {} - '@humanwhocodes/object-schema@2.0.3': {} + '@humanwhocodes/retry@0.3.1': {} + + '@humanwhocodes/retry@0.4.2': {} '@iconify/types@2.0.0': {} @@ -5366,7 +5955,7 @@ snapshots: '@antfu/install-pkg': 1.0.0 '@antfu/utils': 8.1.1 '@iconify/types': 2.0.0 - debug: 4.4.0 + debug: 4.4.0(supports-color@9.4.0) globals: 15.15.0 kolorist: 1.8.0 local-pkg: 1.1.0 @@ -5435,19 +6024,19 @@ snapshots: solid-presence: 0.1.8(solid-js@1.9.5) solid-prevent-scroll: 0.1.10(solid-js@1.9.5) - '@kobalte/solidbase@0.0.16(@algolia/client-search@5.14.2)(@solidjs/start@1.1.1(solid-js@1.9.5)(vinxi@0.5.3(@types/node@22.9.0)(db0@0.2.4)(ioredis@5.4.1)(jiti@2.4.2)(terser@5.34.1)(typescript@5.6.3)(yaml@2.6.0))(vite@6.1.1(@types/node@22.9.0)(jiti@2.4.2)(terser@5.34.1)(yaml@2.6.0)))(@vue/compiler-sfc@3.5.12)(acorn@8.14.0)(react@18.3.1)(search-insights@2.17.3)(solid-js@1.9.5)(vinxi@0.5.3(@types/node@22.9.0)(db0@0.2.4)(ioredis@5.4.1)(jiti@2.4.2)(terser@5.34.1)(typescript@5.6.3)(yaml@2.6.0))(vite@6.1.1(@types/node@22.9.0)(jiti@2.4.2)(terser@5.34.1)(yaml@2.6.0))': + '@kobalte/solidbase@0.0.23(@algolia/client-search@5.14.2)(@expressive-code/core@0.40.2)(@solidjs/start@1.1.1(solid-js@1.9.5)(vinxi@0.5.3(@types/node@22.9.0)(db0@0.2.4)(ioredis@5.4.1)(jiti@2.4.2)(terser@5.34.1)(typescript@5.8.2)(yaml@2.6.0))(vite@6.2.1(@types/node@22.9.0)(jiti@2.4.2)(terser@5.34.1)(yaml@2.6.0)))(@vue/compiler-sfc@3.5.12)(acorn@8.14.1)(expressive-code@0.40.2)(react@18.3.1)(search-insights@2.17.3)(solid-js@1.9.5)(vinxi@0.5.3(@types/node@22.9.0)(db0@0.2.4)(ioredis@5.4.1)(jiti@2.4.2)(terser@5.34.1)(typescript@5.8.2)(yaml@2.6.0))(vite@6.2.1(@types/node@22.9.0)(jiti@2.4.2)(terser@5.34.1)(yaml@2.6.0))': dependencies: '@bprogress/core': 1.1.18 '@docsearch/css': 3.8.0 '@docsearch/js': 3.8.0(@algolia/client-search@5.14.2)(react@18.3.1)(search-insights@2.17.3) - '@expressive-code/plugin-collapsible-sections': 0.37.1 - '@expressive-code/plugin-frames': 0.38.3 - '@expressive-code/plugin-line-numbers': 0.37.1 + '@expressive-code/plugin-collapsible-sections': 0.40.2 + '@expressive-code/plugin-frames': 0.40.2 + '@expressive-code/plugin-line-numbers': 0.40.2 '@fontsource-variable/inter': 5.1.1 '@fontsource-variable/jetbrains-mono': 5.1.2 '@fontsource-variable/lexend': 5.1.2 '@kobalte/core': 0.13.9(solid-js@1.9.5) - '@mdx-js/mdx': 3.1.0(acorn@8.14.0) + '@mdx-js/mdx': 3.1.0(acorn@8.14.1) '@solid-primitives/clipboard': 1.5.10(solid-js@1.9.5) '@solid-primitives/context': 0.2.3(solid-js@1.9.5) '@solid-primitives/event-listener': 2.3.3(solid-js@1.9.5) @@ -5457,18 +6046,18 @@ snapshots: '@solid-primitives/scroll': 2.0.23(solid-js@1.9.5) '@solidjs/meta': 0.29.4(solid-js@1.9.5) '@solidjs/router': 0.15.3(solid-js@1.9.5) - '@solidjs/start': 1.1.1(solid-js@1.9.5)(vinxi@0.5.3(@types/node@22.9.0)(db0@0.2.4)(ioredis@5.4.1)(jiti@2.4.2)(terser@5.34.1)(typescript@5.6.3)(yaml@2.6.0))(vite@6.1.1(@types/node@22.9.0)(jiti@2.4.2)(terser@5.34.1)(yaml@2.6.0)) - '@vinxi/plugin-mdx': 3.7.2(@mdx-js/mdx@3.1.0(acorn@8.14.0)) + '@solidjs/start': 1.1.1(solid-js@1.9.5)(vinxi@0.5.3(@types/node@22.9.0)(db0@0.2.4)(ioredis@5.4.1)(jiti@2.4.2)(terser@5.34.1)(typescript@5.8.2)(yaml@2.6.0))(vite@6.2.1(@types/node@22.9.0)(jiti@2.4.2)(terser@5.34.1)(yaml@2.6.0)) + '@vinxi/plugin-mdx': 3.7.2(@mdx-js/mdx@3.1.0(acorn@8.14.1)) cross-spawn: 7.0.3 esast-util-from-js: 2.0.1 estree-util-value-to-estree: 3.2.1 + expressive-code-twoslash: 0.4.0(@expressive-code/core@0.40.2)(expressive-code@0.40.2)(typescript@5.8.2) gray-matter: 4.0.3 hastscript: 9.0.0 - lexend: link:@fontsource/variable/lexend mdast-util-find-and-replace: 3.0.1 mdast-util-toc: 7.1.0 rehype-autolink-headings: 7.1.0 - rehype-expressive-code: 0.37.1 + rehype-expressive-code: 0.40.2 rehype-raw: 7.0.0 rehype-slug: 6.0.0 remark-directive: 3.0.0 @@ -5476,17 +6065,19 @@ snapshots: remark-gfm: 4.0.0 remark-mdx-frontmatter: 5.0.0 solid-js: 1.9.5 - solid-mdx: 0.0.7(solid-js@1.9.5)(vite@6.1.1(@types/node@22.9.0)(jiti@2.4.2)(terser@5.34.1)(yaml@2.6.0)) + solid-mdx: 0.0.7(solid-js@1.9.5)(vite@6.2.1(@types/node@22.9.0)(jiti@2.4.2)(terser@5.34.1)(yaml@2.6.0)) + typescript: 5.8.2 unified: 11.0.5 unist-builder: 4.0.0 unist-util-visit: 5.0.0 unplugin-auto-import: 19.1.1 - unplugin-fonts: 1.3.1(vite@6.1.1(@types/node@22.9.0)(jiti@2.4.2)(terser@5.34.1)(yaml@2.6.0)) + unplugin-fonts: 1.3.1(vite@6.2.1(@types/node@22.9.0)(jiti@2.4.2)(terser@5.34.1)(yaml@2.6.0)) unplugin-icons: 22.1.0(@vue/compiler-sfc@3.5.12) - vinxi: 0.5.3(@types/node@22.9.0)(db0@0.2.4)(ioredis@5.4.1)(jiti@2.4.2)(terser@5.34.1)(typescript@5.6.3)(yaml@2.6.0) - vite: 6.1.1(@types/node@22.9.0)(jiti@2.4.2)(terser@5.34.1)(yaml@2.6.0) + vinxi: 0.5.3(@types/node@22.9.0)(db0@0.2.4)(ioredis@5.4.1)(jiti@2.4.2)(terser@5.34.1)(typescript@5.8.2)(yaml@2.6.0) + vite: 6.2.1(@types/node@22.9.0)(jiti@2.4.2)(terser@5.34.1)(yaml@2.6.0) transitivePeerDependencies: - '@algolia/client-search' + - '@expressive-code/core' - '@nuxt/kit' - '@svgr/core' - '@svgx/core' @@ -5494,6 +6085,7 @@ snapshots: - '@vue/compiler-sfc' - '@vueuse/core' - acorn + - expressive-code - react - react-dom - search-insights @@ -5519,7 +6111,7 @@ snapshots: '@kwsites/file-exists@1.1.1': dependencies: - debug: 4.3.7(supports-color@9.4.0) + debug: 4.4.0(supports-color@9.4.0) transitivePeerDependencies: - supports-color @@ -5547,13 +6139,13 @@ snapshots: https-proxy-agent: 7.0.6(supports-color@9.4.0) node-fetch: 2.7.0 nopt: 8.1.0 - semver: 7.6.3 + semver: 7.7.1 tar: 7.4.3 transitivePeerDependencies: - encoding - supports-color - '@mdx-js/mdx@3.1.0(acorn@8.14.0)': + '@mdx-js/mdx@3.1.0(acorn@8.14.1)': dependencies: '@types/estree': 1.0.6 '@types/estree-jsx': 1.0.5 @@ -5567,7 +6159,7 @@ snapshots: hast-util-to-jsx-runtime: 2.3.2 markdown-extensions: 2.0.0 recma-build-jsx: 1.0.0 - recma-jsx: 1.0.0(acorn@8.14.0) + recma-jsx: 1.0.0(acorn@8.14.1) recma-stringify: 1.0.0 rehype-recma: 1.0.0 remark-mdx: 3.1.0 @@ -5608,6 +6200,58 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 + '@npmcli/config@8.3.4': + dependencies: + '@npmcli/map-workspaces': 3.0.6 + '@npmcli/package-json': 5.2.1 + ci-info: 4.2.0 + ini: 4.1.3 + nopt: 7.2.1 + proc-log: 4.2.0 + semver: 7.7.1 + walk-up-path: 3.0.1 + transitivePeerDependencies: + - bluebird + + '@npmcli/git@5.0.8': + dependencies: + '@npmcli/promise-spawn': 7.0.2 + ini: 4.1.3 + lru-cache: 10.4.3 + npm-pick-manifest: 9.1.0 + proc-log: 4.2.0 + promise-inflight: 1.0.1 + promise-retry: 2.0.1 + semver: 7.7.1 + which: 4.0.0 + transitivePeerDependencies: + - bluebird + + '@npmcli/map-workspaces@3.0.6': + dependencies: + '@npmcli/name-from-folder': 2.0.0 + glob: 10.4.5 + minimatch: 9.0.5 + read-package-json-fast: 3.0.2 + + '@npmcli/name-from-folder@2.0.0': {} + + '@npmcli/package-json@5.2.1': + dependencies: + '@npmcli/git': 5.0.8 + glob: 10.4.5 + hosted-git-info: 7.0.2 + json-parse-even-better-errors: 3.0.2 + normalize-package-data: 6.0.2 + proc-log: 4.2.0 + semver: 7.7.1 + transitivePeerDependencies: + - bluebird + + '@npmcli/promise-spawn@7.0.2': + dependencies: + which: 4.0.0 + '@orama/crawly@0.0.4': dependencies: cheerio: 1.0.0-rc.12 @@ -5615,14 +6259,14 @@ snapshots: '@orama/orama@2.1.1': {} - '@oramacloud/client@1.3.16(typescript@5.6.3)(zod@3.23.8)': + '@oramacloud/client@1.3.16(typescript@5.8.2)(zod@3.23.8)': dependencies: '@orama/orama': 2.1.1 '@paralleldrive/cuid2': 2.2.2 lodash: 4.17.21 openai: 4.67.3(zod@3.23.8) react: 18.3.1 - vue: 3.5.12(typescript@5.6.3) + vue: 3.5.12(typescript@5.8.2) transitivePeerDependencies: - encoding - typescript @@ -5701,6 +6345,8 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true + '@pkgr/core@0.1.1': {} + '@redocly/ajv@8.11.2': dependencies: fast-deep-equal: 3.1.3 @@ -5779,6 +6425,11 @@ snapshots: optionalDependencies: rollup: 4.34.8 + '@rollup/pluginutils@4.2.1': + dependencies: + estree-walker: 2.0.2 + picomatch: 2.3.1 + '@rollup/pluginutils@5.1.4(rollup@4.34.8)': dependencies: '@types/estree': 1.0.6 @@ -5790,60 +6441,117 @@ snapshots: '@rollup/rollup-android-arm-eabi@4.34.8': optional: true + '@rollup/rollup-android-arm-eabi@4.35.0': + optional: true + '@rollup/rollup-android-arm64@4.34.8': optional: true + '@rollup/rollup-android-arm64@4.35.0': + optional: true + '@rollup/rollup-darwin-arm64@4.34.8': optional: true + '@rollup/rollup-darwin-arm64@4.35.0': + optional: true + '@rollup/rollup-darwin-x64@4.34.8': optional: true + '@rollup/rollup-darwin-x64@4.35.0': + optional: true + '@rollup/rollup-freebsd-arm64@4.34.8': optional: true + '@rollup/rollup-freebsd-arm64@4.35.0': + optional: true + '@rollup/rollup-freebsd-x64@4.34.8': optional: true + '@rollup/rollup-freebsd-x64@4.35.0': + optional: true + '@rollup/rollup-linux-arm-gnueabihf@4.34.8': optional: true + '@rollup/rollup-linux-arm-gnueabihf@4.35.0': + optional: true + '@rollup/rollup-linux-arm-musleabihf@4.34.8': optional: true + '@rollup/rollup-linux-arm-musleabihf@4.35.0': + optional: true + '@rollup/rollup-linux-arm64-gnu@4.34.8': optional: true + '@rollup/rollup-linux-arm64-gnu@4.35.0': + optional: true + '@rollup/rollup-linux-arm64-musl@4.34.8': optional: true + '@rollup/rollup-linux-arm64-musl@4.35.0': + optional: true + '@rollup/rollup-linux-loongarch64-gnu@4.34.8': optional: true + '@rollup/rollup-linux-loongarch64-gnu@4.35.0': + optional: true + '@rollup/rollup-linux-powerpc64le-gnu@4.34.8': optional: true + '@rollup/rollup-linux-powerpc64le-gnu@4.35.0': + optional: true + '@rollup/rollup-linux-riscv64-gnu@4.34.8': optional: true + '@rollup/rollup-linux-riscv64-gnu@4.35.0': + optional: true + '@rollup/rollup-linux-s390x-gnu@4.34.8': optional: true + '@rollup/rollup-linux-s390x-gnu@4.35.0': + optional: true + '@rollup/rollup-linux-x64-gnu@4.34.8': optional: true + '@rollup/rollup-linux-x64-gnu@4.35.0': + optional: true + '@rollup/rollup-linux-x64-musl@4.34.8': optional: true + '@rollup/rollup-linux-x64-musl@4.35.0': + optional: true + '@rollup/rollup-win32-arm64-msvc@4.34.8': optional: true + '@rollup/rollup-win32-arm64-msvc@4.35.0': + optional: true + '@rollup/rollup-win32-ia32-msvc@4.34.8': optional: true + '@rollup/rollup-win32-ia32-msvc@4.35.0': + optional: true + '@rollup/rollup-win32-x64-msvc@4.34.8': optional: true + '@rollup/rollup-win32-x64-msvc@4.35.0': + optional: true + '@shikijs/core@1.22.0': dependencies: '@shikijs/engine-javascript': 1.22.0 @@ -6008,11 +6716,11 @@ snapshots: dependencies: solid-js: 1.9.5 - '@solidjs/start@1.1.1(solid-js@1.9.5)(vinxi@0.5.3(@types/node@22.9.0)(db0@0.2.4)(ioredis@5.4.1)(jiti@2.4.2)(terser@5.34.1)(typescript@5.6.3)(yaml@2.6.0))(vite@6.1.1(@types/node@22.9.0)(jiti@2.4.2)(terser@5.34.1)(yaml@2.6.0))': + '@solidjs/start@1.1.1(solid-js@1.9.5)(vinxi@0.5.3(@types/node@22.9.0)(db0@0.2.4)(ioredis@5.4.1)(jiti@2.4.2)(terser@5.34.1)(typescript@5.8.2)(yaml@2.6.0))(vite@6.2.1(@types/node@22.9.0)(jiti@2.4.2)(terser@5.34.1)(yaml@2.6.0))': dependencies: '@tanstack/server-functions-plugin': 1.106.0 - '@vinxi/plugin-directives': 0.5.0(vinxi@0.5.3(@types/node@22.9.0)(db0@0.2.4)(ioredis@5.4.1)(jiti@2.4.2)(terser@5.34.1)(typescript@5.6.3)(yaml@2.6.0)) - '@vinxi/server-components': 0.5.0(vinxi@0.5.3(@types/node@22.9.0)(db0@0.2.4)(ioredis@5.4.1)(jiti@2.4.2)(terser@5.34.1)(typescript@5.6.3)(yaml@2.6.0)) + '@vinxi/plugin-directives': 0.5.0(vinxi@0.5.3(@types/node@22.9.0)(db0@0.2.4)(ioredis@5.4.1)(jiti@2.4.2)(terser@5.34.1)(typescript@5.8.2)(yaml@2.6.0)) + '@vinxi/server-components': 0.5.0(vinxi@0.5.3(@types/node@22.9.0)(db0@0.2.4)(ioredis@5.4.1)(jiti@2.4.2)(terser@5.34.1)(typescript@5.8.2)(yaml@2.6.0)) defu: 6.1.4 error-stack-parser: 2.1.4 html-to-image: 1.11.11 @@ -6023,8 +6731,8 @@ snapshots: source-map-js: 1.2.1 terracotta: 1.0.6(solid-js@1.9.5) tinyglobby: 0.2.12 - vinxi: 0.5.3(@types/node@22.9.0)(db0@0.2.4)(ioredis@5.4.1)(jiti@2.4.2)(terser@5.34.1)(typescript@5.6.3)(yaml@2.6.0) - vite-plugin-solid: 2.11.2(solid-js@1.9.5)(vite@6.1.1(@types/node@22.9.0)(jiti@2.4.2)(terser@5.34.1)(yaml@2.6.0)) + vinxi: 0.5.3(@types/node@22.9.0)(db0@0.2.4)(ioredis@5.4.1)(jiti@2.4.2)(terser@5.34.1)(typescript@5.8.2)(yaml@2.6.0) + vite-plugin-solid: 2.11.2(solid-js@1.9.5)(vite@6.2.1(@types/node@22.9.0)(jiti@2.4.2)(terser@5.34.1)(yaml@2.6.0)) transitivePeerDependencies: - '@testing-library/jest-dom' - babel-plugin-macros @@ -6122,10 +6830,19 @@ snapshots: '@types/braces@3.0.4': {} + '@types/concat-stream@2.0.3': + dependencies: + '@types/node': 22.9.0 + '@types/debug@4.1.12': dependencies: '@types/ms': 0.7.34 + '@types/eslint@8.56.12': + dependencies: + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 + '@types/estree-jsx@1.0.5': dependencies: '@types/estree': 1.0.6 @@ -6140,6 +6857,8 @@ snapshots: dependencies: '@types/node': 22.9.0 + '@types/is-empty@1.2.3': {} + '@types/json-schema@7.0.15': {} '@types/mdast@4.0.4': @@ -6175,7 +6894,7 @@ snapshots: dependencies: '@types/node': 22.9.0 - '@types/semver@7.5.8': {} + '@types/supports-color@8.1.3': {} '@types/ungap__structured-clone@1.2.0': {} @@ -6183,127 +6902,89 @@ snapshots: '@types/unist@3.0.3': {} - '@typescript-eslint/eslint-plugin@8.9.0(@typescript-eslint/parser@8.9.0(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1)(typescript@5.6.3)': + '@typescript-eslint/eslint-plugin@8.26.0(@typescript-eslint/parser@8.26.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2)': dependencies: - '@eslint-community/regexpp': 4.11.1 - '@typescript-eslint/parser': 8.9.0(eslint@8.57.1)(typescript@5.6.3) - '@typescript-eslint/scope-manager': 8.9.0 - '@typescript-eslint/type-utils': 8.9.0(eslint@8.57.1)(typescript@5.6.3) - '@typescript-eslint/utils': 8.9.0(eslint@8.57.1)(typescript@5.6.3) - '@typescript-eslint/visitor-keys': 8.9.0 - eslint: 8.57.1 + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.26.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2) + '@typescript-eslint/scope-manager': 8.26.0 + '@typescript-eslint/type-utils': 8.26.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2) + '@typescript-eslint/utils': 8.26.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2) + '@typescript-eslint/visitor-keys': 8.26.0 + eslint: 9.22.0(jiti@2.4.2) graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 - ts-api-utils: 1.3.0(typescript@5.6.3) - optionalDependencies: - typescript: 5.6.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@8.9.0(eslint@8.57.1)(typescript@5.6.3)': - dependencies: - '@typescript-eslint/scope-manager': 8.9.0 - '@typescript-eslint/types': 8.9.0 - '@typescript-eslint/typescript-estree': 8.9.0(typescript@5.6.3) - '@typescript-eslint/visitor-keys': 8.9.0 - debug: 4.3.7(supports-color@9.4.0) - eslint: 8.57.1 - optionalDependencies: - typescript: 5.6.3 + ts-api-utils: 2.0.1(typescript@5.8.2) + typescript: 5.8.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@6.21.0': - dependencies: - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/visitor-keys': 6.21.0 - - '@typescript-eslint/scope-manager@8.9.0': - dependencies: - '@typescript-eslint/types': 8.9.0 - '@typescript-eslint/visitor-keys': 8.9.0 - - '@typescript-eslint/type-utils@8.9.0(eslint@8.57.1)(typescript@5.6.3)': + '@typescript-eslint/parser@8.26.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2)': dependencies: - '@typescript-eslint/typescript-estree': 8.9.0(typescript@5.6.3) - '@typescript-eslint/utils': 8.9.0(eslint@8.57.1)(typescript@5.6.3) - debug: 4.3.7(supports-color@9.4.0) - ts-api-utils: 1.3.0(typescript@5.6.3) - optionalDependencies: - typescript: 5.6.3 + '@typescript-eslint/scope-manager': 8.26.0 + '@typescript-eslint/types': 8.26.0 + '@typescript-eslint/typescript-estree': 8.26.0(typescript@5.8.2) + '@typescript-eslint/visitor-keys': 8.26.0 + debug: 4.4.0(supports-color@9.4.0) + eslint: 9.22.0(jiti@2.4.2) + typescript: 5.8.2 transitivePeerDependencies: - - eslint - supports-color - '@typescript-eslint/types@6.21.0': {} - - '@typescript-eslint/types@8.9.0': {} - - '@typescript-eslint/typescript-estree@6.21.0(typescript@5.6.3)': - dependencies: - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.7(supports-color@9.4.0) - globby: 11.1.0 - is-glob: 4.0.3 - minimatch: 9.0.3 - semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.6.3) - optionalDependencies: - typescript: 5.6.3 - transitivePeerDependencies: - - supports-color + '@typescript-eslint/scope-manager@8.26.0': + dependencies: + '@typescript-eslint/types': 8.26.0 + '@typescript-eslint/visitor-keys': 8.26.0 - '@typescript-eslint/typescript-estree@8.9.0(typescript@5.6.3)': + '@typescript-eslint/type-utils@8.26.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2)': dependencies: - '@typescript-eslint/types': 8.9.0 - '@typescript-eslint/visitor-keys': 8.9.0 - debug: 4.3.7(supports-color@9.4.0) - fast-glob: 3.3.2 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.6.3) - optionalDependencies: - typescript: 5.6.3 + '@typescript-eslint/typescript-estree': 8.26.0(typescript@5.8.2) + '@typescript-eslint/utils': 8.26.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2) + debug: 4.4.0(supports-color@9.4.0) + eslint: 9.22.0(jiti@2.4.2) + ts-api-utils: 2.0.1(typescript@5.8.2) + typescript: 5.8.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@6.21.0(eslint@8.57.1)(typescript@5.6.3)': + '@typescript-eslint/types@8.26.0': {} + + '@typescript-eslint/typescript-estree@8.26.0(typescript@5.8.2)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.8 - '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.6.3) - eslint: 8.57.1 - semver: 7.6.3 + '@typescript-eslint/types': 8.26.0 + '@typescript-eslint/visitor-keys': 8.26.0 + debug: 4.4.0(supports-color@9.4.0) + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.1 + ts-api-utils: 2.0.1(typescript@5.8.2) + typescript: 5.8.2 transitivePeerDependencies: - supports-color - - typescript - '@typescript-eslint/utils@8.9.0(eslint@8.57.1)(typescript@5.6.3)': + '@typescript-eslint/utils@8.26.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) - '@typescript-eslint/scope-manager': 8.9.0 - '@typescript-eslint/types': 8.9.0 - '@typescript-eslint/typescript-estree': 8.9.0(typescript@5.6.3) - eslint: 8.57.1 + '@eslint-community/eslint-utils': 4.4.1(eslint@9.22.0(jiti@2.4.2)) + '@typescript-eslint/scope-manager': 8.26.0 + '@typescript-eslint/types': 8.26.0 + '@typescript-eslint/typescript-estree': 8.26.0(typescript@5.8.2) + eslint: 9.22.0(jiti@2.4.2) + typescript: 5.8.2 transitivePeerDependencies: - supports-color - - typescript - '@typescript-eslint/visitor-keys@6.21.0': + '@typescript-eslint/visitor-keys@8.26.0': dependencies: - '@typescript-eslint/types': 6.21.0 - eslint-visitor-keys: 3.4.3 + '@typescript-eslint/types': 8.26.0 + eslint-visitor-keys: 4.2.0 - '@typescript-eslint/visitor-keys@8.9.0': + '@typescript/vfs@1.6.1(typescript@5.8.2)': dependencies: - '@typescript-eslint/types': 8.9.0 - eslint-visitor-keys: 3.4.3 + debug: 4.4.0(supports-color@9.4.0) + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color '@ungap/structured-clone@1.2.0': {} @@ -6311,8 +6992,8 @@ snapshots: dependencies: '@mapbox/node-pre-gyp': 2.0.0 '@rollup/pluginutils': 5.1.4(rollup@4.34.8) - acorn: 8.14.0 - acorn-import-attributes: 1.9.5(acorn@8.14.0) + acorn: 8.14.1 + acorn-import-attributes: 1.9.5(acorn@8.14.1) async-sema: 3.1.1 bindings: 1.5.0 estree-walker: 2.0.2 @@ -6346,38 +7027,38 @@ snapshots: untun: 0.1.3 uqr: 0.1.2 - '@vinxi/plugin-directives@0.5.0(vinxi@0.5.3(@types/node@22.9.0)(db0@0.2.4)(ioredis@5.4.1)(jiti@2.4.2)(terser@5.34.1)(typescript@5.6.3)(yaml@2.6.0))': + '@vinxi/plugin-directives@0.5.0(vinxi@0.5.3(@types/node@22.9.0)(db0@0.2.4)(ioredis@5.4.1)(jiti@2.4.2)(terser@5.34.1)(typescript@5.8.2)(yaml@2.6.0))': dependencies: '@babel/parser': 7.25.8 - acorn: 8.12.1 - acorn-jsx: 5.3.2(acorn@8.12.1) + acorn: 8.14.1 + acorn-jsx: 5.3.2(acorn@8.14.1) acorn-loose: 8.4.0 - acorn-typescript: 1.4.13(acorn@8.12.1) + acorn-typescript: 1.4.13(acorn@8.14.1) astring: 1.9.0 magicast: 0.2.11 recast: 0.23.9 tslib: 2.8.0 - vinxi: 0.5.3(@types/node@22.9.0)(db0@0.2.4)(ioredis@5.4.1)(jiti@2.4.2)(terser@5.34.1)(typescript@5.6.3)(yaml@2.6.0) + vinxi: 0.5.3(@types/node@22.9.0)(db0@0.2.4)(ioredis@5.4.1)(jiti@2.4.2)(terser@5.34.1)(typescript@5.8.2)(yaml@2.6.0) - '@vinxi/plugin-mdx@3.7.2(@mdx-js/mdx@3.1.0(acorn@8.14.0))': + '@vinxi/plugin-mdx@3.7.2(@mdx-js/mdx@3.1.0(acorn@8.14.1))': dependencies: '@alloc/quick-lru': 5.2.0 - '@mdx-js/mdx': 3.1.0(acorn@8.14.0) + '@mdx-js/mdx': 3.1.0(acorn@8.14.1) esbuild: 0.18.7 - resolve: 1.22.8 + resolve: 1.22.10 unified: 9.2.2 vfile: 5.3.7 - '@vinxi/server-components@0.5.0(vinxi@0.5.3(@types/node@22.9.0)(db0@0.2.4)(ioredis@5.4.1)(jiti@2.4.2)(terser@5.34.1)(typescript@5.6.3)(yaml@2.6.0))': + '@vinxi/server-components@0.5.0(vinxi@0.5.3(@types/node@22.9.0)(db0@0.2.4)(ioredis@5.4.1)(jiti@2.4.2)(terser@5.34.1)(typescript@5.8.2)(yaml@2.6.0))': dependencies: - '@vinxi/plugin-directives': 0.5.0(vinxi@0.5.3(@types/node@22.9.0)(db0@0.2.4)(ioredis@5.4.1)(jiti@2.4.2)(terser@5.34.1)(typescript@5.6.3)(yaml@2.6.0)) - acorn: 8.12.1 + '@vinxi/plugin-directives': 0.5.0(vinxi@0.5.3(@types/node@22.9.0)(db0@0.2.4)(ioredis@5.4.1)(jiti@2.4.2)(terser@5.34.1)(typescript@5.8.2)(yaml@2.6.0)) + acorn: 8.14.1 acorn-loose: 8.4.0 - acorn-typescript: 1.4.13(acorn@8.12.1) + acorn-typescript: 1.4.13(acorn@8.14.1) astring: 1.9.0 magicast: 0.2.11 recast: 0.23.9 - vinxi: 0.5.3(@types/node@22.9.0)(db0@0.2.4)(ioredis@5.4.1)(jiti@2.4.2)(terser@5.34.1)(typescript@5.6.3)(yaml@2.6.0) + vinxi: 0.5.3(@types/node@22.9.0)(db0@0.2.4)(ioredis@5.4.1)(jiti@2.4.2)(terser@5.34.1)(typescript@5.8.2)(yaml@2.6.0) '@vue/compiler-core@3.5.12': dependencies: @@ -6425,43 +7106,39 @@ snapshots: '@vue/shared': 3.5.12 csstype: 3.1.3 - '@vue/server-renderer@3.5.12(vue@3.5.12(typescript@5.6.3))': + '@vue/server-renderer@3.5.12(vue@3.5.12(typescript@5.8.2))': dependencies: '@vue/compiler-ssr': 3.5.12 '@vue/shared': 3.5.12 - vue: 3.5.12(typescript@5.6.3) + vue: 3.5.12(typescript@5.8.2) '@vue/shared@3.5.12': {} + abbrev@2.0.0: {} + abbrev@3.0.0: {} abort-controller@3.0.0: dependencies: event-target-shim: 5.0.1 - acorn-import-attributes@1.9.5(acorn@8.14.0): - dependencies: - acorn: 8.14.0 - - acorn-jsx@5.3.2(acorn@8.12.1): + acorn-import-attributes@1.9.5(acorn@8.14.1): dependencies: - acorn: 8.12.1 + acorn: 8.14.1 - acorn-jsx@5.3.2(acorn@8.14.0): + acorn-jsx@5.3.2(acorn@8.14.1): dependencies: - acorn: 8.14.0 + acorn: 8.14.1 acorn-loose@8.4.0: dependencies: - acorn: 8.12.1 + acorn: 8.14.1 - acorn-typescript@1.4.13(acorn@8.12.1): + acorn-typescript@1.4.13(acorn@8.14.1): dependencies: - acorn: 8.12.1 - - acorn@8.12.1: {} + acorn: 8.14.1 - acorn@8.14.0: {} + acorn@8.14.1: {} agent-base@7.1.3: {} @@ -6551,8 +7228,6 @@ snapshots: argparse@2.0.1: {} - array-union@2.1.0: {} - ast-types@0.16.1: dependencies: tslib: 2.8.0 @@ -6752,6 +7427,8 @@ snapshots: chownr@3.0.0: {} + ci-info@4.2.0: {} + citty@0.1.6: dependencies: consola: 3.2.3 @@ -6812,6 +7489,13 @@ snapshots: concat-map@0.0.1: {} + concat-stream@2.0.0: + dependencies: + buffer-from: 1.1.2 + inherits: 2.0.4 + readable-stream: 3.6.2 + typedarray: 0.0.6 + confbox@0.1.8: {} consola@3.2.3: {} @@ -6837,6 +7521,12 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + crossws@0.3.4: dependencies: uncrypto: 0.1.3 @@ -6868,15 +7558,15 @@ snapshots: dependencies: ms: 2.0.0 - debug@4.3.7(supports-color@9.4.0): + debug@4.3.7: dependencies: ms: 2.1.3 - optionalDependencies: - supports-color: 9.4.0 - debug@4.4.0: + debug@4.4.0(supports-color@9.4.0): dependencies: ms: 2.1.3 + optionalDependencies: + supports-color: 9.4.0 decode-named-character-reference@1.0.2: dependencies: @@ -6916,20 +7606,14 @@ snapshots: diff-sequences@29.6.3: {} - diff@7.0.0: {} + diff@5.2.0: {} - dir-glob@3.0.1: - dependencies: - path-type: 4.0.0 + diff@7.0.0: {} direction@2.0.1: {} dlv@1.1.3: {} - doctrine@3.0.0: - dependencies: - esutils: 2.0.3 - dom-serializer@2.0.0: dependencies: domelementtype: 2.3.0 @@ -6964,6 +7648,8 @@ snapshots: emoji-regex-xs@1.0.0: {} + emoji-regex@10.4.0: {} + emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} @@ -6974,6 +7660,12 @@ snapshots: entities@4.5.0: {} + err-code@2.0.3: {} + + error-ex@1.3.2: + dependencies: + is-arrayish: 0.2.1 + error-stack-parser@2.1.4: dependencies: stackframe: 1.3.4 @@ -6990,7 +7682,7 @@ snapshots: esast-util-from-js@2.0.1: dependencies: '@types/estree-jsx': 1.0.5 - acorn: 8.14.0 + acorn: 8.14.1 esast-util-from-estree: 2.0.0 vfile-message: 4.0.2 @@ -7073,6 +7765,34 @@ snapshots: '@esbuild/win32-ia32': 0.24.2 '@esbuild/win32-x64': 0.24.2 + esbuild@0.25.0: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.0 + '@esbuild/android-arm': 0.25.0 + '@esbuild/android-arm64': 0.25.0 + '@esbuild/android-x64': 0.25.0 + '@esbuild/darwin-arm64': 0.25.0 + '@esbuild/darwin-x64': 0.25.0 + '@esbuild/freebsd-arm64': 0.25.0 + '@esbuild/freebsd-x64': 0.25.0 + '@esbuild/linux-arm': 0.25.0 + '@esbuild/linux-arm64': 0.25.0 + '@esbuild/linux-ia32': 0.25.0 + '@esbuild/linux-loong64': 0.25.0 + '@esbuild/linux-mips64el': 0.25.0 + '@esbuild/linux-ppc64': 0.25.0 + '@esbuild/linux-riscv64': 0.25.0 + '@esbuild/linux-s390x': 0.25.0 + '@esbuild/linux-x64': 0.25.0 + '@esbuild/netbsd-arm64': 0.25.0 + '@esbuild/netbsd-x64': 0.25.0 + '@esbuild/openbsd-arm64': 0.25.0 + '@esbuild/openbsd-x64': 0.25.0 + '@esbuild/sunos-x64': 0.25.0 + '@esbuild/win32-arm64': 0.25.0 + '@esbuild/win32-ia32': 0.25.0 + '@esbuild/win32-x64': 0.25.0 + escalade@3.2.0: {} escape-html@1.0.3: {} @@ -7083,73 +7803,117 @@ snapshots: escape-string-regexp@5.0.0: {} - eslint-plugin-solid@0.13.2(eslint@8.57.1)(typescript@5.6.3): + eslint-mdx@3.2.0(eslint@9.22.0(jiti@2.4.2)): + dependencies: + acorn: 8.14.1 + acorn-jsx: 5.3.2(acorn@8.14.1) + eslint: 9.22.0(jiti@2.4.2) + espree: 9.6.1 + estree-util-visit: 2.0.0 + remark-mdx: 3.1.0 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + synckit: 0.9.2 + tslib: 2.8.1 + unified: 11.0.5 + unified-engine: 11.2.2 + unist-util-visit: 5.0.0 + uvu: 0.5.6 + vfile: 6.0.3 + transitivePeerDependencies: + - bluebird + - supports-color + + eslint-plugin-mdx@3.2.0(eslint@9.22.0(jiti@2.4.2)): + dependencies: + eslint: 9.22.0(jiti@2.4.2) + eslint-mdx: 3.2.0(eslint@9.22.0(jiti@2.4.2)) + mdast-util-from-markdown: 2.0.2 + remark-mdx: 3.1.0 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + synckit: 0.9.2 + tslib: 2.8.1 + unified: 11.0.5 + vfile: 6.0.3 + transitivePeerDependencies: + - bluebird + - supports-color + + eslint-plugin-solid@0.14.5(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2): dependencies: - '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.6.3) - eslint: 8.57.1 + '@typescript-eslint/utils': 8.26.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2) + eslint: 9.22.0(jiti@2.4.2) estraverse: 5.3.0 is-html: 2.0.0 kebab-case: 1.0.2 - known-css-properties: 0.24.0 - style-to-object: 0.3.0 + known-css-properties: 0.30.0 + style-to-object: 1.0.8 + typescript: 5.8.2 transitivePeerDependencies: - supports-color - - typescript - eslint-scope@7.2.2: + eslint-scope@8.3.0: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 eslint-visitor-keys@3.4.3: {} - eslint@8.57.1: + eslint-visitor-keys@4.2.0: {} + + eslint@9.22.0(jiti@2.4.2): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) - '@eslint-community/regexpp': 4.11.1 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.1 - '@humanwhocodes/config-array': 0.13.0 + '@eslint-community/eslint-utils': 4.4.1(eslint@9.22.0(jiti@2.4.2)) + '@eslint-community/regexpp': 4.12.1 + '@eslint/config-array': 0.19.2 + '@eslint/config-helpers': 0.1.0 + '@eslint/core': 0.12.0 + '@eslint/eslintrc': 3.3.0 + '@eslint/js': 9.22.0 + '@eslint/plugin-kit': 0.2.7 + '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 + '@humanwhocodes/retry': 0.4.2 + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 ajv: 6.12.6 chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.7(supports-color@9.4.0) - doctrine: 3.0.0 + cross-spawn: 7.0.6 + debug: 4.4.0(supports-color@9.4.0) escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 + eslint-scope: 8.3.0 + eslint-visitor-keys: 4.2.0 + espree: 10.3.0 esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 + file-entry-cache: 8.0.0 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.24.0 - graphemer: 1.4.0 ignore: 5.3.2 imurmurhash: 0.1.4 is-glob: 4.0.3 - 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.4 - strip-ansi: 6.0.1 - text-table: 0.2.0 + optionalDependencies: + jiti: 2.4.2 transitivePeerDependencies: - supports-color + espree@10.3.0: + dependencies: + acorn: 8.14.1 + acorn-jsx: 5.3.2(acorn@8.14.1) + eslint-visitor-keys: 4.2.0 + espree@9.6.1: dependencies: - acorn: 8.12.1 - acorn-jsx: 5.3.2(acorn@8.12.1) + acorn: 8.14.1 + acorn-jsx: 5.3.2(acorn@8.14.1) eslint-visitor-keys: 3.4.3 esprima@4.0.1: {} @@ -7225,12 +7989,24 @@ snapshots: signal-exit: 4.1.0 strip-final-newline: 3.0.0 - expressive-code@0.37.1: + expressive-code-twoslash@0.4.0(@expressive-code/core@0.40.2)(expressive-code@0.40.2)(typescript@5.8.2): + dependencies: + '@expressive-code/core': 0.40.2 + expressive-code: 0.40.2 + mdast-util-from-markdown: 2.0.2 + mdast-util-gfm: 3.1.0 + mdast-util-to-hast: 13.2.0 + twoslash: 0.2.12(typescript@5.8.2) + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + + expressive-code@0.40.2: dependencies: - '@expressive-code/core': 0.37.1 - '@expressive-code/plugin-frames': 0.37.1 - '@expressive-code/plugin-shiki': 0.37.1 - '@expressive-code/plugin-text-markers': 0.37.1 + '@expressive-code/core': 0.40.2 + '@expressive-code/plugin-frames': 0.40.2 + '@expressive-code/plugin-shiki': 0.40.2 + '@expressive-code/plugin-text-markers': 0.40.2 extend-shallow@2.0.1: dependencies: @@ -7250,6 +8026,14 @@ snapshots: merge2: 1.4.1 micromatch: 4.0.8 + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + fast-json-stable-stringify@2.1.0: {} fast-levenshtein@2.0.6: {} @@ -7266,9 +8050,9 @@ snapshots: optionalDependencies: picomatch: 4.0.2 - file-entry-cache@6.0.1: + file-entry-cache@8.0.0: dependencies: - flat-cache: 3.2.0 + flat-cache: 4.0.1 file-uri-to-path@1.0.0: {} @@ -7281,13 +8065,12 @@ snapshots: locate-path: 6.0.0 path-exists: 4.0.0 - flat-cache@3.2.0: + flat-cache@4.0.1: dependencies: - flatted: 3.3.1 + flatted: 3.3.3 keyv: 4.5.4 - rimraf: 3.0.2 - flatted@3.3.1: {} + flatted@3.3.3: {} follow-redirects@1.15.9: {} @@ -7383,20 +8166,11 @@ snapshots: globals@11.12.0: {} - globals@13.24.0: - dependencies: - type-fest: 0.20.2 + globals@14.0.0: {} globals@15.15.0: {} - globby@11.1.0: - dependencies: - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.3.2 - ignore: 5.3.2 - merge2: 1.4.1 - slash: 3.0.0 + globals@16.0.0: {} globby@14.0.2: dependencies: @@ -7628,6 +8402,10 @@ snapshots: hookable@5.5.3: {} + hosted-git-info@7.0.2: + dependencies: + lru-cache: 10.4.3 + html-entities@2.3.3: {} html-tags@3.3.1: {} @@ -7664,7 +8442,7 @@ snapshots: https-proxy-agent@7.0.6(supports-color@9.4.0): dependencies: agent-base: 7.1.3 - debug: 4.3.7(supports-color@9.4.0) + debug: 4.4.0(supports-color@9.4.0) transitivePeerDependencies: - supports-color @@ -7680,11 +8458,15 @@ snapshots: ignore@5.3.2: {} - import-fresh@3.3.0: + ignore@6.0.2: {} + + import-fresh@3.3.1: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 + import-meta-resolve@4.1.0: {} + imurmurhash@0.1.4: {} index-to-position@0.1.2: {} @@ -7696,6 +8478,8 @@ snapshots: inherits@2.0.4: {} + ini@4.1.3: {} + inline-style-parser@0.1.1: {} inline-style-parser@0.2.4: {} @@ -7704,7 +8488,7 @@ snapshots: dependencies: '@ioredis/commands': 1.2.0 cluster-key-slot: 1.1.2 - debug: 4.3.7(supports-color@9.4.0) + debug: 4.4.0(supports-color@9.4.0) denque: 2.1.0 lodash.defaults: 4.2.0 lodash.isarguments: 3.1.0 @@ -7723,6 +8507,8 @@ snapshots: is-alphabetical: 2.0.1 is-decimal: 2.0.1 + is-arrayish@0.2.1: {} + is-binary-path@2.1.0: dependencies: binary-extensions: 2.3.0 @@ -7733,12 +8519,18 @@ snapshots: dependencies: hasown: 2.0.2 + is-core-module@2.16.1: + dependencies: + hasown: 2.0.2 + is-decimal@2.0.1: {} is-docker@2.2.1: {} is-docker@3.0.0: {} + is-empty@1.2.0: {} + is-extendable@0.1.1: {} is-extglob@2.1.1: {} @@ -7763,8 +8555,6 @@ snapshots: is-number@7.0.0: {} - is-path-inside@3.0.3: {} - is-plain-obj@2.1.0: {} is-plain-obj@4.1.0: {} @@ -7820,8 +8610,6 @@ snapshots: js-tokens@4.0.0: {} - js-tokens@9.0.0: {} - js-tokens@9.0.1: {} js-yaml@3.14.1: @@ -7837,6 +8625,8 @@ snapshots: json-buffer@3.0.1: {} + json-parse-even-better-errors@3.0.2: {} + json-schema-traverse@0.4.1: {} json-schema-traverse@1.0.0: {} @@ -7859,13 +8649,15 @@ snapshots: kind-of@6.0.3: {} + kleur@4.1.5: {} + klona@2.0.6: {} knitwork@1.1.0: {} knitwork@1.2.0: {} - known-css-properties@0.24.0: {} + known-css-properties@0.30.0: {} kolorist@1.8.0: {} @@ -7884,6 +8676,8 @@ snapshots: lines-and-columns@1.2.4: {} + lines-and-columns@2.0.4: {} + listhen@1.9.0: dependencies: '@parcel/watcher': 2.4.1 @@ -7905,6 +8699,13 @@ snapshots: untun: 0.1.3 uqr: 0.1.2 + load-plugin@6.0.3: + dependencies: + '@npmcli/config': 8.3.4 + import-meta-resolve: 4.1.0 + transitivePeerDependencies: + - bluebird + local-pkg@0.5.0: dependencies: mlly: 1.7.2 @@ -7973,7 +8774,7 @@ snapshots: '@types/mdast': 4.0.4 '@types/unist': 3.0.3 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.1 + mdast-util-from-markdown: 2.0.2 mdast-util-to-markdown: 2.1.0 parse-entities: 4.0.1 stringify-entities: 4.0.4 @@ -7988,7 +8789,7 @@ snapshots: unist-util-is: 6.0.0 unist-util-visit-parents: 6.0.1 - mdast-util-from-markdown@2.0.1: + mdast-util-from-markdown@2.0.2: dependencies: '@types/mdast': 4.0.4 '@types/unist': 3.0.3 @@ -8010,7 +8811,7 @@ snapshots: '@types/mdast': 4.0.4 devlop: 1.1.0 escape-string-regexp: 5.0.0 - mdast-util-from-markdown: 2.0.1 + mdast-util-from-markdown: 2.0.2 mdast-util-to-markdown: 2.1.0 micromark-extension-frontmatter: 2.0.0 transitivePeerDependencies: @@ -8028,7 +8829,7 @@ snapshots: dependencies: '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.1 + mdast-util-from-markdown: 2.0.2 mdast-util-to-markdown: 2.1.0 micromark-util-normalize-identifier: 2.0.0 transitivePeerDependencies: @@ -8037,7 +8838,7 @@ snapshots: mdast-util-gfm-strikethrough@2.0.0: dependencies: '@types/mdast': 4.0.4 - mdast-util-from-markdown: 2.0.1 + mdast-util-from-markdown: 2.0.2 mdast-util-to-markdown: 2.1.0 transitivePeerDependencies: - supports-color @@ -8047,7 +8848,7 @@ snapshots: '@types/mdast': 4.0.4 devlop: 1.1.0 markdown-table: 3.0.3 - mdast-util-from-markdown: 2.0.1 + mdast-util-from-markdown: 2.0.2 mdast-util-to-markdown: 2.1.0 transitivePeerDependencies: - supports-color @@ -8056,14 +8857,26 @@ snapshots: dependencies: '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.1 + mdast-util-from-markdown: 2.0.2 mdast-util-to-markdown: 2.1.0 transitivePeerDependencies: - supports-color mdast-util-gfm@3.0.0: dependencies: - mdast-util-from-markdown: 2.0.1 + mdast-util-from-markdown: 2.0.2 + mdast-util-gfm-autolink-literal: 2.0.1 + mdast-util-gfm-footnote: 2.0.0 + mdast-util-gfm-strikethrough: 2.0.0 + mdast-util-gfm-table: 2.0.0 + mdast-util-gfm-task-list-item: 2.0.0 + mdast-util-to-markdown: 2.1.0 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm@3.1.0: + dependencies: + mdast-util-from-markdown: 2.0.2 mdast-util-gfm-autolink-literal: 2.0.1 mdast-util-gfm-footnote: 2.0.0 mdast-util-gfm-strikethrough: 2.0.0 @@ -8079,7 +8892,7 @@ snapshots: '@types/hast': 3.0.4 '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.1 + mdast-util-from-markdown: 2.0.2 mdast-util-to-markdown: 2.1.0 transitivePeerDependencies: - supports-color @@ -8092,7 +8905,7 @@ snapshots: '@types/unist': 3.0.3 ccount: 2.0.1 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.1 + mdast-util-from-markdown: 2.0.2 mdast-util-to-markdown: 2.1.0 parse-entities: 4.0.1 stringify-entities: 4.0.4 @@ -8103,7 +8916,7 @@ snapshots: mdast-util-mdx@3.0.0: dependencies: - mdast-util-from-markdown: 2.0.1 + mdast-util-from-markdown: 2.0.2 mdast-util-mdx-expression: 2.0.1 mdast-util-mdx-jsx: 3.1.3 mdast-util-mdxjs-esm: 2.0.1 @@ -8117,7 +8930,7 @@ snapshots: '@types/hast': 3.0.4 '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.1 + mdast-util-from-markdown: 2.0.2 mdast-util-to-markdown: 2.1.0 transitivePeerDependencies: - supports-color @@ -8309,8 +9122,8 @@ snapshots: micromark-extension-mdxjs@3.0.0: dependencies: - acorn: 8.14.0 - acorn-jsx: 5.3.2(acorn@8.14.0) + acorn: 8.14.1 + acorn-jsx: 5.3.2(acorn@8.14.1) micromark-extension-mdx-expression: 3.0.0 micromark-extension-mdx-jsx: 3.0.1 micromark-extension-mdx-md: 2.0.0 @@ -8436,7 +9249,7 @@ snapshots: micromark@4.0.0: dependencies: '@types/debug': 4.1.12 - debug: 4.4.0 + debug: 4.4.0(supports-color@9.4.0) decode-named-character-reference: 1.0.2 devlop: 1.1.0 micromark-core-commonmark: 2.0.1 @@ -8482,10 +9295,6 @@ snapshots: dependencies: brace-expansion: 2.0.1 - minimatch@9.0.3: - dependencies: - brace-expansion: 2.0.1 - minimatch@9.0.5: dependencies: brace-expansion: 2.0.1 @@ -8514,18 +9323,20 @@ snapshots: mlly@1.7.2: dependencies: - acorn: 8.14.0 + acorn: 8.14.1 pathe: 1.1.2 pkg-types: 1.2.1 ufo: 1.5.4 mlly@1.7.4: dependencies: - acorn: 8.14.0 + acorn: 8.14.1 pathe: 2.0.3 pkg-types: 1.3.1 ufo: 1.5.4 + mri@1.2.0: {} + ms@2.0.0: {} ms@2.1.3: {} @@ -8542,7 +9353,7 @@ snapshots: natural-compare@1.4.0: {} - nitropack@2.10.4(typescript@5.6.3): + nitropack@2.10.4(typescript@5.8.2): dependencies: '@cloudflare/kv-asset-handler': 0.3.4 '@netlify/functions': 2.8.2 @@ -8591,7 +9402,7 @@ snapshots: node-fetch-native: 1.6.4 ofetch: 1.4.1 ohash: 1.1.4 - openapi-typescript: 7.6.1(typescript@5.6.3) + openapi-typescript: 7.6.1(typescript@5.8.2) pathe: 1.1.2 perfect-debounce: 1.0.0 pkg-types: 1.2.1 @@ -8660,14 +9471,44 @@ snapshots: node-releases@2.0.18: {} + nopt@7.2.1: + dependencies: + abbrev: 2.0.0 + nopt@8.1.0: dependencies: abbrev: 3.0.0 + normalize-package-data@6.0.2: + dependencies: + hosted-git-info: 7.0.2 + semver: 7.7.1 + validate-npm-package-license: 3.0.4 + normalize-path@3.0.0: {} normalize-range@0.1.2: {} + npm-install-checks@6.3.0: + dependencies: + semver: 7.7.1 + + npm-normalize-package-bin@3.0.1: {} + + npm-package-arg@11.0.3: + dependencies: + hosted-git-info: 7.0.2 + proc-log: 4.2.0 + semver: 7.7.1 + validate-npm-package-name: 5.0.1 + + npm-pick-manifest@9.1.0: + dependencies: + npm-install-checks: 6.3.0 + npm-normalize-package-bin: 3.0.1 + npm-package-arg: 11.0.3 + semver: 7.7.1 + npm-run-path@5.3.0: dependencies: path-key: 4.0.0 @@ -8739,14 +9580,14 @@ snapshots: transitivePeerDependencies: - encoding - openapi-typescript@7.6.1(typescript@5.6.3): + openapi-typescript@7.6.1(typescript@5.8.2): dependencies: '@redocly/openapi-core': 1.30.0(supports-color@9.4.0) ansi-colors: 4.1.3 change-case: 5.4.4 parse-json: 8.1.0 supports-color: 9.4.0 - typescript: 5.6.3 + typescript: 5.8.2 yargs-parser: 21.1.1 optionator@0.9.4: @@ -8787,9 +9628,17 @@ snapshots: is-decimal: 2.0.1 is-hexadecimal: 2.0.1 + parse-json@7.1.1: + dependencies: + '@babel/code-frame': 7.26.2 + error-ex: 1.3.2 + json-parse-even-better-errors: 3.0.2 + lines-and-columns: 2.0.4 + type-fest: 3.13.1 + parse-json@8.1.0: dependencies: - '@babel/code-frame': 7.25.7 + '@babel/code-frame': 7.26.2 index-to-position: 0.1.2 type-fest: 4.35.0 @@ -8821,8 +9670,6 @@ snapshots: path-to-regexp@6.3.0: {} - path-type@4.0.0: {} - path-type@5.0.0: {} pathe@1.1.2: {} @@ -8924,10 +9771,19 @@ snapshots: ansi-styles: 5.2.0 react-is: 18.3.1 + proc-log@4.2.0: {} + process-nextick-args@2.0.1: {} process@0.11.10: {} + promise-inflight@1.0.1: {} + + promise-retry@2.0.1: + dependencies: + err-code: 2.0.3 + retry: 0.12.0 + property-information@6.5.0: {} property-information@7.0.0: {} @@ -8963,6 +9819,11 @@ snapshots: dependencies: pify: 2.3.0 + read-package-json-fast@3.0.2: + dependencies: + json-parse-even-better-errors: 3.0.2 + npm-normalize-package-bin: 3.0.1 + readable-stream@2.3.8: dependencies: core-util-is: 1.0.3 @@ -8973,6 +9834,12 @@ snapshots: string_decoder: 1.1.1 util-deprecate: 1.0.2 + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + readable-stream@4.5.2: dependencies: abort-controller: 3.0.0 @@ -9005,9 +9872,9 @@ snapshots: estree-util-build-jsx: 3.0.1 vfile: 6.0.3 - recma-jsx@1.0.0(acorn@8.14.0): + recma-jsx@1.0.0(acorn@8.14.1): dependencies: - acorn-jsx: 5.3.2(acorn@8.14.0) + acorn-jsx: 5.3.2(acorn@8.14.1) estree-util-to-js: 2.0.0 recma-parse: 1.0.0 recma-stringify: 1.0.0 @@ -9057,9 +9924,9 @@ snapshots: unified: 11.0.5 unist-util-visit: 5.0.0 - rehype-expressive-code@0.37.1: + rehype-expressive-code@0.40.2: dependencies: - expressive-code: 0.37.1 + expressive-code: 0.40.2 rehype-raw@7.0.0: dependencies: @@ -9131,7 +9998,7 @@ snapshots: remark-parse@11.0.0: dependencies: '@types/mdast': 4.0.4 - mdast-util-from-markdown: 2.0.1 + mdast-util-from-markdown: 2.0.2 micromark-util-types: 2.0.0 unified: 11.0.5 transitivePeerDependencies: @@ -9161,17 +10028,21 @@ snapshots: resolve-from@5.0.0: {} + resolve@1.22.10: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + resolve@1.22.8: dependencies: is-core-module: 2.15.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - reusify@1.0.4: {} + retry@0.12.0: {} - rimraf@3.0.2: - dependencies: - glob: 7.2.3 + reusify@1.0.4: {} rimraf@5.0.10: dependencies: @@ -9186,6 +10057,10 @@ snapshots: optionalDependencies: rollup: 4.34.8 + rollup@2.79.2: + optionalDependencies: + fsevents: 2.3.3 + rollup@4.34.8: dependencies: '@types/estree': 1.0.6 @@ -9211,10 +10086,39 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.34.8 fsevents: 2.3.3 + rollup@4.35.0: + dependencies: + '@types/estree': 1.0.6 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.35.0 + '@rollup/rollup-android-arm64': 4.35.0 + '@rollup/rollup-darwin-arm64': 4.35.0 + '@rollup/rollup-darwin-x64': 4.35.0 + '@rollup/rollup-freebsd-arm64': 4.35.0 + '@rollup/rollup-freebsd-x64': 4.35.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.35.0 + '@rollup/rollup-linux-arm-musleabihf': 4.35.0 + '@rollup/rollup-linux-arm64-gnu': 4.35.0 + '@rollup/rollup-linux-arm64-musl': 4.35.0 + '@rollup/rollup-linux-loongarch64-gnu': 4.35.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.35.0 + '@rollup/rollup-linux-riscv64-gnu': 4.35.0 + '@rollup/rollup-linux-s390x-gnu': 4.35.0 + '@rollup/rollup-linux-x64-gnu': 4.35.0 + '@rollup/rollup-linux-x64-musl': 4.35.0 + '@rollup/rollup-win32-arm64-msvc': 4.35.0 + '@rollup/rollup-win32-ia32-msvc': 4.35.0 + '@rollup/rollup-win32-x64-msvc': 4.35.0 + fsevents: 2.3.3 + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 + sade@1.8.1: + dependencies: + mri: 1.2.0 + safe-buffer@5.1.2: {} safe-buffer@5.2.1: {} @@ -9234,6 +10138,8 @@ snapshots: semver@7.6.3: {} + semver@7.7.1: {} + send@0.19.0: dependencies: debug: 2.6.9 @@ -9309,7 +10215,7 @@ snapshots: dependencies: '@kwsites/file-exists': 1.1.1 '@kwsites/promise-deferred': 1.1.1 - debug: 4.3.7(supports-color@9.4.0) + debug: 4.3.7 transitivePeerDependencies: - supports-color @@ -9322,8 +10228,6 @@ snapshots: arg: 5.0.2 sax: 1.4.1 - slash@3.0.0: {} - slash@5.1.0: {} slugify@1.6.6: {} @@ -9345,10 +10249,10 @@ snapshots: '@corvu/utils': 0.4.2(solid-js@1.9.5) solid-js: 1.9.5 - solid-mdx@0.0.7(solid-js@1.9.5)(vite@6.1.1(@types/node@22.9.0)(jiti@2.4.2)(terser@5.34.1)(yaml@2.6.0)): + solid-mdx@0.0.7(solid-js@1.9.5)(vite@6.2.1(@types/node@22.9.0)(jiti@2.4.2)(terser@5.34.1)(yaml@2.6.0)): dependencies: solid-js: 1.9.5 - vite: 6.1.1(@types/node@22.9.0)(jiti@2.4.2)(terser@5.34.1)(yaml@2.6.0) + vite: 6.2.1(@types/node@22.9.0)(jiti@2.4.2)(terser@5.34.1)(yaml@2.6.0) solid-presence@0.1.8(solid-js@1.9.5): dependencies: @@ -9386,6 +10290,20 @@ snapshots: space-separated-tokens@2.0.2: {} + spdx-correct@3.2.0: + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.21 + + spdx-exceptions@2.5.0: {} + + spdx-expression-parse@3.0.1: + dependencies: + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.21 + + spdx-license-ids@3.0.21: {} + sprintf-js@1.0.3: {} stackframe@1.3.4: {} @@ -9416,6 +10334,12 @@ snapshots: emoji-regex: 9.2.2 strip-ansi: 7.1.0 + string-width@6.1.0: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 10.4.0 + strip-ansi: 7.1.0 + string_decoder@1.1.1: dependencies: safe-buffer: 5.1.2 @@ -9445,16 +10369,12 @@ snapshots: strip-literal@2.1.0: dependencies: - js-tokens: 9.0.0 + js-tokens: 9.0.1 strip-literal@3.0.0: dependencies: js-tokens: 9.0.1 - style-to-object@0.3.0: - dependencies: - inline-style-parser: 0.1.1 - style-to-object@0.4.4: dependencies: inline-style-parser: 0.1.1 @@ -9485,6 +10405,11 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} + synckit@0.9.2: + dependencies: + '@pkgr/core': 0.1.1 + tslib: 2.8.1 + system-architecture@0.1.0: {} tailwindcss@3.4.14: @@ -9546,7 +10471,7 @@ snapshots: terser@5.34.1: dependencies: '@jridgewell/source-map': 0.3.6 - acorn: 8.14.0 + acorn: 8.14.1 commander: 2.20.3 source-map-support: 0.5.21 @@ -9554,8 +10479,6 @@ snapshots: dependencies: b4a: 1.6.7 - text-table@0.2.0: {} - thenify-all@1.6.0: dependencies: thenify: 3.3.1 @@ -9591,25 +10514,39 @@ snapshots: trough@2.2.0: {} - ts-api-utils@1.3.0(typescript@5.6.3): + ts-api-utils@2.0.1(typescript@5.8.2): dependencies: - typescript: 5.6.3 + typescript: 5.8.2 ts-interface-checker@0.1.13: {} tslib@2.8.0: {} + tslib@2.8.1: {} + + twoslash-protocol@0.2.12: {} + + twoslash@0.2.12(typescript@5.8.2): + dependencies: + '@typescript/vfs': 1.6.1(typescript@5.8.2) + twoslash-protocol: 0.2.12 + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 - type-fest@0.20.2: {} - type-fest@2.19.0: {} + type-fest@3.13.1: {} + type-fest@4.35.0: {} - typescript@5.6.3: {} + typedarray@0.0.6: {} + + typescript@5.8.2: {} ufo@1.5.4: {} @@ -9619,7 +10556,7 @@ snapshots: unctx@2.3.1: dependencies: - acorn: 8.14.0 + acorn: 8.14.1 estree-walker: 3.0.3 magic-string: 0.30.12 unplugin: 1.14.1 @@ -9642,6 +10579,33 @@ snapshots: unicorn-magic@0.1.0: {} + unified-engine@11.2.2: + dependencies: + '@types/concat-stream': 2.0.3 + '@types/debug': 4.1.12 + '@types/is-empty': 1.2.3 + '@types/node': 22.9.0 + '@types/unist': 3.0.3 + concat-stream: 2.0.0 + debug: 4.4.0(supports-color@9.4.0) + extend: 3.0.2 + glob: 10.4.5 + ignore: 6.0.2 + is-empty: 1.2.0 + is-plain-obj: 4.1.0 + load-plugin: 6.0.3 + parse-json: 7.1.1 + trough: 2.2.0 + unist-util-inspect: 8.1.0 + vfile: 6.0.3 + vfile-message: 4.0.2 + vfile-reporter: 8.1.1 + vfile-statistics: 3.0.0 + yaml: 2.6.0 + transitivePeerDependencies: + - bluebird + - supports-color + unified@11.0.5: dependencies: '@types/unist': 3.0.3 @@ -9665,7 +10629,7 @@ snapshots: unimport@3.13.1(rollup@4.34.8): dependencies: '@rollup/pluginutils': 5.1.4(rollup@4.34.8) - acorn: 8.14.0 + acorn: 8.14.1 escape-string-regexp: 5.0.0 estree-walker: 3.0.3 fast-glob: 3.3.2 @@ -9683,7 +10647,7 @@ snapshots: unimport@4.1.2: dependencies: - acorn: 8.14.0 + acorn: 8.14.1 escape-string-regexp: 5.0.0 estree-walker: 3.0.3 local-pkg: 1.1.0 @@ -9707,6 +10671,10 @@ snapshots: '@types/unist': 3.0.3 unist-util-is: 6.0.0 + unist-util-inspect@8.1.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is@6.0.0: dependencies: '@types/unist': 3.0.3 @@ -9753,17 +10721,17 @@ snapshots: unplugin: 2.2.0 unplugin-utils: 0.2.4 - unplugin-fonts@1.3.1(vite@6.1.1(@types/node@22.9.0)(jiti@2.4.2)(terser@5.34.1)(yaml@2.6.0)): + unplugin-fonts@1.3.1(vite@6.2.1(@types/node@22.9.0)(jiti@2.4.2)(terser@5.34.1)(yaml@2.6.0)): dependencies: fast-glob: 3.3.2 unplugin: 2.0.0-beta.1 - vite: 6.1.1(@types/node@22.9.0)(jiti@2.4.2)(terser@5.34.1)(yaml@2.6.0) + vite: 6.2.1(@types/node@22.9.0)(jiti@2.4.2)(terser@5.34.1)(yaml@2.6.0) unplugin-icons@22.1.0(@vue/compiler-sfc@3.5.12): dependencies: '@antfu/install-pkg': 1.0.0 '@iconify/utils': 2.3.0 - debug: 4.4.0 + debug: 4.4.0(supports-color@9.4.0) local-pkg: 1.1.0 unplugin: 2.2.0 optionalDependencies: @@ -9778,17 +10746,17 @@ snapshots: unplugin@1.14.1: dependencies: - acorn: 8.14.0 + acorn: 8.14.1 webpack-virtual-modules: 0.6.2 unplugin@2.0.0-beta.1: dependencies: - acorn: 8.14.0 + acorn: 8.14.1 webpack-virtual-modules: 0.6.2 unplugin@2.2.0: dependencies: - acorn: 8.14.0 + acorn: 8.14.1 webpack-virtual-modules: 0.6.2 unstorage@1.15.0(db0@0.2.4)(ioredis@5.4.1): @@ -9853,8 +10821,22 @@ snapshots: util-deprecate@1.0.2: {} + uvu@0.5.6: + dependencies: + dequal: 2.0.3 + diff: 5.2.0 + kleur: 4.1.5 + sade: 1.8.1 + validate-html-nesting@1.2.2: {} + validate-npm-package-license@3.0.4: + dependencies: + spdx-correct: 3.2.0 + spdx-expression-parse: 3.0.1 + + validate-npm-package-name@5.0.1: {} + vfile-location@5.0.3: dependencies: '@types/unist': 3.0.3 @@ -9875,6 +10857,27 @@ snapshots: '@types/unist': 3.0.3 unist-util-stringify-position: 4.0.0 + vfile-reporter@8.1.1: + dependencies: + '@types/supports-color': 8.1.3 + string-width: 6.1.0 + supports-color: 9.4.0 + unist-util-stringify-position: 4.0.0 + vfile: 6.0.3 + vfile-message: 4.0.2 + vfile-sort: 4.0.0 + vfile-statistics: 3.0.0 + + vfile-sort@4.0.0: + dependencies: + vfile: 6.0.3 + vfile-message: 4.0.2 + + vfile-statistics@3.0.0: + dependencies: + vfile: 6.0.3 + vfile-message: 4.0.2 + vfile@4.2.1: dependencies: '@types/unist': 2.0.11 @@ -9894,7 +10897,7 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vinxi@0.5.3(@types/node@22.9.0)(db0@0.2.4)(ioredis@5.4.1)(jiti@2.4.2)(terser@5.34.1)(typescript@5.6.3)(yaml@2.6.0): + vinxi@0.5.3(@types/node@22.9.0)(db0@0.2.4)(ioredis@5.4.1)(jiti@2.4.2)(terser@5.34.1)(typescript@5.8.2)(yaml@2.6.0): dependencies: '@babel/core': 7.25.8 '@babel/plugin-syntax-jsx': 7.25.7(@babel/core@7.25.8) @@ -9916,7 +10919,7 @@ snapshots: hookable: 5.5.3 http-proxy: 1.18.1 micromatch: 4.0.8 - nitropack: 2.10.4(typescript@5.6.3) + nitropack: 2.10.4(typescript@5.8.2) node-fetch-native: 1.6.4 path-to-regexp: 6.3.0 pathe: 1.1.2 @@ -9928,7 +10931,7 @@ snapshots: unctx: 2.3.1 unenv: 1.10.0 unstorage: 1.15.0(db0@0.2.4)(ioredis@5.4.1) - vite: 6.1.1(@types/node@22.9.0)(jiti@2.4.2)(terser@5.34.1)(yaml@2.6.0) + vite: 6.2.1(@types/node@22.9.0)(jiti@2.4.2)(terser@5.34.1)(yaml@2.6.0) zod: 3.23.8 transitivePeerDependencies: - '@azure/app-configuration' @@ -9973,7 +10976,15 @@ snapshots: - xml2js - yaml - vite-plugin-solid@2.11.2(solid-js@1.9.5)(vite@6.1.1(@types/node@22.9.0)(jiti@2.4.2)(terser@5.34.1)(yaml@2.6.0)): + vite-plugin-eslint@1.8.1(eslint@9.22.0(jiti@2.4.2))(vite@6.2.1(@types/node@22.9.0)(jiti@2.4.2)(terser@5.34.1)(yaml@2.6.0)): + dependencies: + '@rollup/pluginutils': 4.2.1 + '@types/eslint': 8.56.12 + eslint: 9.22.0(jiti@2.4.2) + rollup: 2.79.2 + vite: 6.2.1(@types/node@22.9.0)(jiti@2.4.2)(terser@5.34.1)(yaml@2.6.0) + + vite-plugin-solid@2.11.2(solid-js@1.9.5)(vite@6.2.1(@types/node@22.9.0)(jiti@2.4.2)(terser@5.34.1)(yaml@2.6.0)): dependencies: '@babel/core': 7.25.8 '@types/babel__core': 7.20.5 @@ -9981,16 +10992,16 @@ snapshots: merge-anything: 5.1.7 solid-js: 1.9.5 solid-refresh: 0.6.3(solid-js@1.9.5) - vite: 6.1.1(@types/node@22.9.0)(jiti@2.4.2)(terser@5.34.1)(yaml@2.6.0) - vitefu: 1.0.5(vite@6.1.1(@types/node@22.9.0)(jiti@2.4.2)(terser@5.34.1)(yaml@2.6.0)) + vite: 6.2.1(@types/node@22.9.0)(jiti@2.4.2)(terser@5.34.1)(yaml@2.6.0) + vitefu: 1.0.5(vite@6.2.1(@types/node@22.9.0)(jiti@2.4.2)(terser@5.34.1)(yaml@2.6.0)) transitivePeerDependencies: - supports-color - vite@6.1.1(@types/node@22.9.0)(jiti@2.4.2)(terser@5.34.1)(yaml@2.6.0): + vite@6.2.1(@types/node@22.9.0)(jiti@2.4.2)(terser@5.34.1)(yaml@2.6.0): dependencies: - esbuild: 0.24.2 + esbuild: 0.25.0 postcss: 8.5.3 - rollup: 4.34.8 + rollup: 4.35.0 optionalDependencies: '@types/node': 22.9.0 fsevents: 2.3.3 @@ -9998,19 +11009,21 @@ snapshots: terser: 5.34.1 yaml: 2.6.0 - vitefu@1.0.5(vite@6.1.1(@types/node@22.9.0)(jiti@2.4.2)(terser@5.34.1)(yaml@2.6.0)): + vitefu@1.0.5(vite@6.2.1(@types/node@22.9.0)(jiti@2.4.2)(terser@5.34.1)(yaml@2.6.0)): optionalDependencies: - vite: 6.1.1(@types/node@22.9.0)(jiti@2.4.2)(terser@5.34.1)(yaml@2.6.0) + vite: 6.2.1(@types/node@22.9.0)(jiti@2.4.2)(terser@5.34.1)(yaml@2.6.0) - vue@3.5.12(typescript@5.6.3): + vue@3.5.12(typescript@5.8.2): dependencies: '@vue/compiler-dom': 3.5.12 '@vue/compiler-sfc': 3.5.12 '@vue/runtime-dom': 3.5.12 - '@vue/server-renderer': 3.5.12(vue@3.5.12(typescript@5.6.3)) + '@vue/server-renderer': 3.5.12(vue@3.5.12(typescript@5.8.2)) '@vue/shared': 3.5.12 optionalDependencies: - typescript: 5.6.3 + typescript: 5.8.2 + + walk-up-path@3.0.1: {} web-namespaces@2.0.1: {} diff --git a/scripts/collections/build-file-tree.mjs b/scripts/collections/build-file-tree.mjs index 627fb0beb8..99015719c0 100644 --- a/scripts/collections/build-file-tree.mjs +++ b/scripts/collections/build-file-tree.mjs @@ -3,6 +3,7 @@ import matter from "gray-matter"; import fs from "fs/promises"; import { getDirData } from "./utils/get-dir-data.mjs"; import { COLLECTIONS_ROOT } from "./index.mjs"; +import { cwd } from "process"; /** * @@ -10,7 +11,7 @@ import { COLLECTIONS_ROOT } from "./index.mjs"; * @returns */ export async function buildFileTree(entry = COLLECTIONS_ROOT) { - const entryPath = path.resolve(process.cwd(), entry); + const entryPath = path.resolve(cwd(), entry); const parentSegment = path.parse(entryPath).dir; try { const stats = await fs.stat(entryPath); @@ -56,7 +57,8 @@ export async function buildFileTree(entry = COLLECTIONS_ROOT) { path: "/" + path - .relative(path.join(process.cwd(), COLLECTIONS_ROOT), entryPath) + .relative(path.join(cwd(), COLLECTIONS_ROOT), entryPath) + // eslint-disable-next-line .replace(/\index\.mdx?/, "") .replace(/\.mdx?/, ""), slug: path.basename(entryPath, path.extname(entryPath)), diff --git a/scripts/collections/utils/create-dir.mjs b/scripts/collections/utils/create-dir.mjs index 177f55cca5..8ac08d0e54 100644 --- a/scripts/collections/utils/create-dir.mjs +++ b/scripts/collections/utils/create-dir.mjs @@ -1,11 +1,12 @@ import { existsSync } from "fs"; import fs from "fs/promises"; import path from "path"; +import { cwd } from "process"; export async function createSolidCollectionDir() { - const collectionDir = path.resolve(process.cwd(), ".solid"); + const collectionDir = path.resolve(cwd(), ".solid"); if (!existsSync(collectionDir)) { - fs.mkdir(path.resolve(process.cwd(), ".solid")); + fs.mkdir(path.resolve(cwd(), ".solid")); } } diff --git a/scripts/collections/utils/get-dir-data.mjs b/scripts/collections/utils/get-dir-data.mjs index a479dc3b84..8493e2bec0 100644 --- a/scripts/collections/utils/get-dir-data.mjs +++ b/scripts/collections/utils/get-dir-data.mjs @@ -2,6 +2,7 @@ import fs from "fs/promises"; import path from "path"; import { sectionData } from "../schemas.mjs"; import { languages } from "../index.mjs"; +import { cwd } from "process"; /** * @@ -17,7 +18,7 @@ function formatDirPath(path) { return path; } -export async function getDirData(dirPath = process.cwd()) { +export async function getDirData(dirPath = cwd()) { const dir = formatDirPath(dirPath); try { const data = JSON.parse( diff --git a/scripts/create-i18n-entries.mjs b/scripts/create-i18n-entries.mjs index 640a80238c..2f4802d071 100644 --- a/scripts/create-i18n-entries.mjs +++ b/scripts/create-i18n-entries.mjs @@ -2,6 +2,8 @@ import { existsSync } from "fs"; import path from "path"; import { COLLECTIONS_ROOT } from "./collections/index.mjs"; import { getFrontMatterData } from "./collections/utils/get-frontmatter.mjs"; +import { cwd } from "process"; + /** * @typedef {Object} DocsEntry * @property {string} type - The type of reference. @@ -32,7 +34,7 @@ async function buildSectionList(entryList = [], locale, project = "") { ? entry.path + "index" : entry.path; const i18nEntryPath = path.join( - process.cwd(), + cwd(), COLLECTIONS_ROOT, project, locale, diff --git a/scripts/create-i18n-tree.mjs b/scripts/create-i18n-tree.mjs index d3d3c43c2f..7491910655 100644 --- a/scripts/create-i18n-tree.mjs +++ b/scripts/create-i18n-tree.mjs @@ -2,6 +2,7 @@ import { existsSync } from "fs"; import path from "path"; import { COLLECTIONS_ROOT } from "./collections/index.mjs"; import { getFrontMatterData } from "./collections/utils/get-frontmatter.mjs"; +import { cwd } from "process"; /** * @typedef {Object} Leaf @@ -31,6 +32,8 @@ import { getFrontMatterData } from "./collections/utils/get-frontmatter.mjs"; * * @param {Branch["children"]} children */ + +// eslint-disable-next-line function traverseTree(children) { for (const child of children) { if (child.type === "section") { @@ -62,7 +65,7 @@ export async function createI18nTree(entryList, locale, project = "") { }); } else { const i18nEntryPath = path.join( - process.cwd(), + cwd(), COLLECTIONS_ROOT, project, locale, diff --git a/scripts/sync-orama.mjs b/scripts/sync-orama.mjs index 8d72936d4f..2a8b87dfb0 100644 --- a/scripts/sync-orama.mjs +++ b/scripts/sync-orama.mjs @@ -2,9 +2,10 @@ import { readFileSync } from "node:fs"; import { globSync } from "glob"; import { generalPurposeCrawler } from "@orama/crawly"; import "dotenv/config"; +import { env } from "process"; -const ORAMA_PRIVATE_API_KEY = process.env.ORAMA_PRIVATE_API_KEY; -const ORAMA_PRIVATE_INDEX_ID = process.env.ORAMA_PRIVATE_INDEX_ID; +const ORAMA_PRIVATE_API_KEY = env.ORAMA_PRIVATE_API_KEY; +const ORAMA_PRIVATE_INDEX_ID = env.ORAMA_PRIVATE_INDEX_ID; const baseURL = new URL("../dist", import.meta.url).pathname; const HTMLFiles = globSync("**/*.html", { cwd: baseURL }); diff --git a/src/middleware/legacy-routes-redirect.ts b/src/middleware/legacy-routes-redirect.ts index 73fcfffe2e..fff1e46a77 100644 --- a/src/middleware/legacy-routes-redirect.ts +++ b/src/middleware/legacy-routes-redirect.ts @@ -6,87 +6,152 @@ import { type FetchEvent } from "@solidjs/start/server"; * {origin: destination} */ const LEGACY_ROUTES = { - // api reference - "/references/api-reference/basic-reactivity/createEffect": "/reference/basic-reactivity/create-effect", - "/references/api-reference/basic-reactivity/createMemo": "/reference/basic-reactivity/create-memo", - "/references/api-reference/basic-reactivity/createResource": "/reference/basic-reactivity/create-resource", - "/references/api-reference/basic-reactivity/createSignal": "/reference/basic-reactivity/create-signal", - "/references/api-reference/component-apis/children": "/reference/component-apis/children", - "/references/api-reference/component-apis/createContext": "/reference/component-apis/create-context", - "/references/api-reference/component-apis/createUniqueId": "/reference/component-apis/create-unique-id", - "/references/api-reference/component-apis/lazy": "/reference/component-apis/lazy", - "/references/api-reference/component-apis/useContext": "/reference/component-apis/use-context", - "/references/api-reference/control-flow/Dynamic": "/reference/components/dynamic", - "/references/api-reference/control-flow/ErrorBoundary": "/reference/components/error-boundary", + "/references/api-reference/basic-reactivity/createEffect": + "/reference/basic-reactivity/create-effect", + "/references/api-reference/basic-reactivity/createMemo": + "/reference/basic-reactivity/create-memo", + "/references/api-reference/basic-reactivity/createResource": + "/reference/basic-reactivity/create-resource", + "/references/api-reference/basic-reactivity/createSignal": + "/reference/basic-reactivity/create-signal", + "/references/api-reference/component-apis/children": + "/reference/component-apis/children", + "/references/api-reference/component-apis/createContext": + "/reference/component-apis/create-context", + "/references/api-reference/component-apis/createUniqueId": + "/reference/component-apis/create-unique-id", + "/references/api-reference/component-apis/lazy": + "/reference/component-apis/lazy", + "/references/api-reference/component-apis/useContext": + "/reference/component-apis/use-context", + "/references/api-reference/control-flow/Dynamic": + "/reference/components/dynamic", + "/references/api-reference/control-flow/ErrorBoundary": + "/reference/components/error-boundary", "/references/api-reference/control-flow/For": "/reference/components/for", - "/references/api-reference/control-flow/Index": "/reference/components/index-component", - "/references/api-reference/control-flow/Portal": "/reference/components/portal", + "/references/api-reference/control-flow/Index": + "/reference/components/index-component", + "/references/api-reference/control-flow/Portal": + "/reference/components/portal", "/references/api-reference/control-flow/Show": "/reference/components/show", - "/references/api-reference/control-flow/Suspense": "/reference/components/suspense", - "/references/api-reference/control-flow/SuspenseList": "/reference/components/suspense-list", - "/references/api-reference/control-flow/Switch-and-Match": "/reference/components/switch-and-match", - "/references/api-reference/lifecycles/onCleanup": "/reference/lifecycle/on-cleanup", - "/references/api-reference/lifecycles/onError": "/reference/reactive-utilities/catch-error", - "/references/api-reference/lifecycles/onMount": "/reference/lifecycle/on-mount", - "/references/api-reference/reactive-utilities/batch": "/reference/reactive-utilities/batch", - "/references/api-reference/reactive-utilities/catchError": "/reference/reactive-utilities/catch-error", - "/references/api-reference/reactive-utilities/createRoot": "/reference/reactive-utilities/create-root", - "/references/api-reference/reactive-utilities/from": "/reference/reactive-utilities/from", - "/references/api-reference/reactive-utilities/getOwner": "/reference/reactive-utilities/get-owner", - "/references/api-reference/reactive-utilities/indexArray": "/reference/reactive-utilities/index-array", - "/references/api-reference/reactive-utilities/mapArray": "/reference/reactive-utilities/map-array", - "/references/api-reference/reactive-utilities/mergeProps": "/reference/reactive-utilities/merge-props", - "/references/api-reference/reactive-utilities/observable": "/reference/reactive-utilities/observable", - "/references/api-reference/reactive-utilities/on": "/reference/reactive-utilities/on", - "/references/api-reference/reactive-utilities/regularstartTransition": "/reference/reactive-utilities/start-transition", - "/references/api-reference/reactive-utilities/runWithOwner": "/reference/reactive-utilities/run-with-owner", - "/references/api-reference/reactive-utilities/splitProps": "/reference/reactive-utilities/split-props", - "/references/api-reference/reactive-utilities/untrack": "/reference/reactive-utilities/untrack", - "/references/api-reference/reactive-utilities/useTransition": "/reference/reactive-utilities/use-transition", + "/references/api-reference/control-flow/Suspense": + "/reference/components/suspense", + "/references/api-reference/control-flow/SuspenseList": + "/reference/components/suspense-list", + "/references/api-reference/control-flow/Switch-and-Match": + "/reference/components/switch-and-match", + "/references/api-reference/lifecycles/onCleanup": + "/reference/lifecycle/on-cleanup", + "/references/api-reference/lifecycles/onError": + "/reference/reactive-utilities/catch-error", + "/references/api-reference/lifecycles/onMount": + "/reference/lifecycle/on-mount", + "/references/api-reference/reactive-utilities/batch": + "/reference/reactive-utilities/batch", + "/references/api-reference/reactive-utilities/catchError": + "/reference/reactive-utilities/catch-error", + "/references/api-reference/reactive-utilities/createRoot": + "/reference/reactive-utilities/create-root", + "/references/api-reference/reactive-utilities/from": + "/reference/reactive-utilities/from", + "/references/api-reference/reactive-utilities/getOwner": + "/reference/reactive-utilities/get-owner", + "/references/api-reference/reactive-utilities/indexArray": + "/reference/reactive-utilities/index-array", + "/references/api-reference/reactive-utilities/mapArray": + "/reference/reactive-utilities/map-array", + "/references/api-reference/reactive-utilities/mergeProps": + "/reference/reactive-utilities/merge-props", + "/references/api-reference/reactive-utilities/observable": + "/reference/reactive-utilities/observable", + "/references/api-reference/reactive-utilities/on": + "/reference/reactive-utilities/on", + "/references/api-reference/reactive-utilities/regularstartTransition": + "/reference/reactive-utilities/start-transition", + "/references/api-reference/reactive-utilities/runWithOwner": + "/reference/reactive-utilities/run-with-owner", + "/references/api-reference/reactive-utilities/splitProps": + "/reference/reactive-utilities/split-props", + "/references/api-reference/reactive-utilities/untrack": + "/reference/reactive-utilities/untrack", + "/references/api-reference/reactive-utilities/useTransition": + "/reference/reactive-utilities/use-transition", "/references/api-reference/rendering/DEV": "/reference/rendering/dev", "/references/api-reference/rendering/hydrate": "/reference/rendering/hydrate", - "/references/api-reference/rendering/HydrationScript": "/reference/rendering/hydration-script", - "/references/api-reference/rendering/isServer": "/reference/rendering/is-server", + "/references/api-reference/rendering/HydrationScript": + "/reference/rendering/hydration-script", + "/references/api-reference/rendering/isServer": + "/reference/rendering/is-server", "/references/api-reference/rendering/render": "/reference/rendering/render", - "/references/api-reference/rendering/renderToStream": "/reference/rendering/render-to-stream", - "/references/api-reference/rendering/renderToString": "/reference/rendering/render-to-string", - "/references/api-reference/rendering/renderToStringAsync": "/reference/rendering/render-to-string-async", - "/references/api-reference/secondary-primitives/createComputed": "/reference/secondary-primitives/create-computed", - "/references/api-reference/secondary-primitives/createDeferred": "/reference/secondary-primitives/create-deferred", - "/references/api-reference/secondary-primitives/createReaction": "/reference/secondary-primitives/create-reaction", - "/references/api-reference/secondary-primitives/createRenderEffect": "/reference/secondary-primitives/create-render-effect", - "/references/api-reference/secondary-primitives/createSelector": "/reference/secondary-primitives/create-selector", - "/references/api-reference/special-jsx-attributes/attr_": "/reference/jsx-attributes/attr", - "/references/api-reference/special-jsx-attributes/classList": "/reference/jsx-attributes/classlist", - "/references/api-reference/special-jsx-attributes/innerHTML-or-textContent": "/reference/jsx-attributes/innerhtml", - "/references/api-reference/special-jsx-attributes/on_": "/reference/jsx-attributes/on_", - "/references/api-reference/special-jsx-attributes/on_-and-oncapture_": "/reference/jsx-attributes/on", + "/references/api-reference/rendering/renderToStream": + "/reference/rendering/render-to-stream", + "/references/api-reference/rendering/renderToString": + "/reference/rendering/render-to-string", + "/references/api-reference/rendering/renderToStringAsync": + "/reference/rendering/render-to-string-async", + "/references/api-reference/secondary-primitives/createComputed": + "/reference/secondary-primitives/create-computed", + "/references/api-reference/secondary-primitives/createDeferred": + "/reference/secondary-primitives/create-deferred", + "/references/api-reference/secondary-primitives/createReaction": + "/reference/secondary-primitives/create-reaction", + "/references/api-reference/secondary-primitives/createRenderEffect": + "/reference/secondary-primitives/create-render-effect", + "/references/api-reference/secondary-primitives/createSelector": + "/reference/secondary-primitives/create-selector", + "/references/api-reference/special-jsx-attributes/attr_": + "/reference/jsx-attributes/attr", + "/references/api-reference/special-jsx-attributes/classList": + "/reference/jsx-attributes/classlist", + "/references/api-reference/special-jsx-attributes/innerHTML-or-textContent": + "/reference/jsx-attributes/innerhtml", + "/references/api-reference/special-jsx-attributes/on_": + "/reference/jsx-attributes/on_", + "/references/api-reference/special-jsx-attributes/on_-and-oncapture_": + "/reference/jsx-attributes/on", - "/references/api-reference/special-jsx-attributes/once": "/reference/jsx-attributes/once", - "/references/api-reference/special-jsx-attributes/prop_": "/reference/jsx-attributes/prop", - "/references/api-reference/special-jsx-attributes/ref": "/reference/jsx-attributes/ref", - "/references/api-reference/special-jsx-attributes/style": "/reference/jsx-attributes/style", - "/references/api-reference/special-jsx-attributes/use_": "/reference/jsx-attributes/use", - "/references/api-reference/stores/store-utilities": "/concepts/stores#store-utilities", + "/references/api-reference/special-jsx-attributes/once": + "/reference/jsx-attributes/once", + "/references/api-reference/special-jsx-attributes/prop_": + "/reference/jsx-attributes/prop", + "/references/api-reference/special-jsx-attributes/ref": + "/reference/jsx-attributes/ref", + "/references/api-reference/special-jsx-attributes/style": + "/reference/jsx-attributes/style", + "/references/api-reference/special-jsx-attributes/use_": + "/reference/jsx-attributes/use", + "/references/api-reference/stores/store-utilities": + "/concepts/stores#store-utilities", "/references/api-reference/stores/using-stores": "/concepts/stores", // deployment "/guides/how-to-guides/deployment": "/guides/deploying-your-app", - "/guides/how-to-guides/deployment/deploying-to-cloudflare": "/guides/deployment-options/cloudflare", - "/guides/how-to-guides/deployment/deploying-to-firebase": "/guides/deployment-options/firebase", - "/guides/how-to-guides/deployment/deploying-to-flightcontrol": "/guides/deployment-options/aws-via-flightcontrol", - "/guides/how-to-guides/deployment/deploying-to-netlify": "/guides/deployment-options/netlify", - "/guides/how-to-guides/deployment/deploying-to-railway": "/guides/deployment-options/railway", - "/guides/how-to-guides/deployment/deploying-to-vercel": "/guides/deployment-options/vercel", + "/guides/how-to-guides/deployment/deploying-to-cloudflare": + "/guides/deployment-options/cloudflare", + "/guides/how-to-guides/deployment/deploying-to-firebase": + "/guides/deployment-options/firebase", + "/guides/how-to-guides/deployment/deploying-to-flightcontrol": + "/guides/deployment-options/aws-via-flightcontrol", + "/guides/how-to-guides/deployment/deploying-to-netlify": + "/guides/deployment-options/netlify", + "/guides/how-to-guides/deployment/deploying-to-railway": + "/guides/deployment-options/railway", + "/guides/how-to-guides/deployment/deploying-to-vercel": + "/guides/deployment-options/vercel", // styling "/guides/how-to-guides/styling-in-solid": "/guides/styling-your-components", - "/guides/how-to-guides/styling-in-solid/sass": "/guides/styling-components/sass", - "/guides/how-to-guides/styling-in-solid/less": "/guides/styling-components/less", - "/guides/how-to-guides/styling-in-solid/tailwind-css": "/guides/styling-components/tailwind", - "/guides/how-to-guides/styling-in-solid/css-modules": "/guides/styling-components/css-modules", - "/guides/how-to-guides/styling-in-solid/unocss": "/guides/styling-components/uno", + "/guides/how-to-guides/styling-in-solid/sass": + "/guides/styling-components/sass", + "/guides/how-to-guides/styling-in-solid/less": + "/guides/styling-components/less", + "/guides/how-to-guides/styling-in-solid/tailwind-css": + "/guides/styling-components/tailwind", + "/guides/how-to-guides/styling-in-solid/css-modules": + "/guides/styling-components/css-modules", + "/guides/how-to-guides/styling-in-solid/unocss": + "/guides/styling-components/uno", // trailing slash removal "/routing/migration/": "/routing/migration", @@ -97,17 +162,21 @@ const LEGACY_ROUTES = { "/guides/foundations/typescript-for-solid": "/configuration/typescript", "/guides/foundations/understanding-components": "/concepts/components/basics", "/guides/foundations/why-solid": "/#advantages-of-using-solid", - "/guides/how-to-guides/routing-in-solid/solid-router": "/routing/installation-and-setup", - "/guides/tutorials/getting-started-with-solid/installing-solid": "/quick-start", + "/guides/how-to-guides/routing-in-solid/solid-router": + "/routing/installation-and-setup", + "/guides/tutorials/getting-started-with-solid/installing-solid": + "/quick-start", "/references/concepts/reactivity": "/concepts/intro-to-reactivity", - "/references/concepts/reactivity/tracking": "/concepts/intro-to-reactivity#subscribers", + "/references/concepts/reactivity/tracking": + "/concepts/intro-to-reactivity#subscribers", "/references/concepts/ssr/async-ssr": "/guides/fetching-data", - "/references/concepts/ssr/simple-client-fetching-ssr": "/guides/fetching-data", - "/references/concepts/state-management/context": "/guides/complex-state-management#state-sharing", + "/references/concepts/ssr/simple-client-fetching-ssr": + "/guides/fetching-data", + "/references/concepts/state-management/context": + "/guides/complex-state-management#state-sharing", // solid-docs-next moves/new location for old pages/solid api updates "/reference/jsx-attributes/on-and-oncapture": "/reference/jsx-attributes/on", - } as const; function isLegacyRoute(path: string): path is keyof typeof LEGACY_ROUTES { diff --git a/src/routes/advanced-concepts/fine-grained-reactivity.mdx b/src/routes/advanced-concepts/fine-grained-reactivity.mdx index 7907f064c8..396a2c6845 100644 --- a/src/routes/advanced-concepts/fine-grained-reactivity.mdx +++ b/src/routes/advanced-concepts/fine-grained-reactivity.mdx @@ -2,40 +2,31 @@ title: Fine-grained reactivity --- -Reactivity ensures automatic responses to data changes, eliminating the need for manual updates to the user interface (UI). -By connecting UI elements to the underlying data, updates become automated. -In a fine-grained reactive system an application will now have the ability to make highly _targeted and specific_ updates. +Reactivity ensures automatic responses to data changes, eliminating the need for manual updates to the user interface (UI). By connecting UI elements to the underlying data, updates become automated. In a fine-grained reactive system an application will now have the ability to make highly _targeted and specific_ updates. -An example of this can be seen in the contrast between Solid and [React](https://react.dev/). -In Solid, updates are made to the targeted attribute that needs to be changed, avoiding broader and, sometimes unnecessary, updates. -In contrast, React would re-execute an entire component for a change in the single attribute, which can be less efficient. +An example of this can be seen in the contrast between Solid and [React](https://react.dev/). In Solid, updates are made to the targeted attribute that needs to be changed, avoiding broader and, sometimes unnecessary, updates. In contrast, React would re-execute an entire component for a change in the single attribute, which can be less efficient. -Because of the fine-grained reactive system, unnecessary recalculations are avoided. -Through targeting only the areas of an application that have changed the user experience becomes smoother and more optimized. +Because of the fine-grained reactive system, unnecessary recalculations are avoided. Through targeting only the areas of an application that have changed the user experience becomes smoother and more optimized. **Note:** If you're new to the concept of reactivity and want to learn the basics, consider starting with our [intro to reactivity guide](/concepts/intro-to-reactivity). ## Reactive primitives -In Solid's reactivity system, there are two key elements: signals and observers. -These core elements serve as the foundation for more specialized reactive features: +In Solid's reactivity system, there are two key elements: signals and observers. These core elements serve as the foundation for more specialized reactive features: - [Stores](/concepts/stores) which are [proxies](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy) that create, read, and write signals under the hood. -- [Memos](/concepts/derived-values/memos) resemble [effects](/concepts/effects) but are distinct in that they _return_ a signal and optimize computations through caching. - They update based on the behavior of effects, but are more ideal for computational optimization. +- [Memos](/concepts/derived-values/memos) resemble [effects](/concepts/effects) but are distinct in that they _return_ a signal and optimize computations through caching. They update based on the behavior of effects, but are more ideal for computational optimization. - [Resources](/guides/fetching-data), building on the concept of memos, convert the asynchronicity of network requests into synchronicity, where the results are embedded within a signal. - Render effects are a tailored type of effect that initiate immediately, specifically designed for managing the rendering process. ### Understanding signals -[Signals](/concepts/signals) are like mutable variables that can point to a value now and another in the future. -They are made up of two primary functions: +[Signals](/concepts/signals) are like mutable variables that can point to a value now and another in the future. They are made up of two primary functions: - **Getter**: how to read the current value of a signal. - **Setter**: a way to modify or update a signal's value. -In Solid, the [`createSignal`](/reference/basic-reactivity/create-signal) function can be used to create a signal. -This function returns the getter and setter as a pair in a two-element array, called a tuple. +In Solid, the [`createSignal`](/reference/basic-reactivity/create-signal) function can be used to create a signal. This function returns the getter and setter as a pair in a two-element array, called a tuple. ```js import { createSignal } from "solid-js"; @@ -53,8 +44,7 @@ Here, `count` serves as the getter, and `setCount` functions as the setter. ### Effects -[Effects](/concepts/effects) are functions that are triggered when the signals they depend on point to a different value. -They can be thought of as automated responders where any changes in the signal's value will trigger the effect to run. +[Effects](/concepts/effects) are functions that are triggered when the signals they depend on point to a different value. They can be thought of as automated responders where any changes in the signal's value will trigger the effect to run. ```jsx import { createSignal, createEffect } from "solid-js"; @@ -72,8 +62,7 @@ The effect takes a function that is called whenever _any_ of the signals it reli To grasp the concept of reactivity, it is often helpful to construct a reactive system from scratch. -The following example will follow the observer pattern, where data entities (signals) will maintain a list of their subscribers (effects). -This is a way to notify subscribers whenever a signal they observe changes. +The following example will follow the observer pattern, where data entities (signals) will maintain a list of their subscribers (effects). This is a way to notify subscribers whenever a signal they observe changes. Here is a basic code outline to begin: @@ -116,8 +105,7 @@ function createSignal(initialValue) { // .. ``` -This allows you to retrieve the current value through the getter and make any changes via the setter. -At this stage, reactivity is not present, however. +This allows you to retrieve the current value through the getter and make any changes via the setter. At this stage, reactivity is not present, however. ### `createEffect` @@ -178,19 +166,14 @@ function createEffect(fn) { //.. ``` -A variable is used to hold a reference to the current executing subscriber function. -This is used to determine which effects are dependent on which signals. +A variable is used to hold a reference to the current executing subscriber function. This is used to determine which effects are dependent on which signals. -Inside `createSignal`, the initial value is stored and a [Set](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set) is used to store any subscriber functions that are dependent on the signal. -This function will then return two functions for the signal: +Inside `createSignal`, the initial value is stored and a [Set](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set) is used to store any subscriber functions that are dependent on the signal. This function will then return two functions for the signal: - The `getter` function checks to see if the current subscriber function is being accessed and, if it is, adds it to the list of subscribers before returning the _current_ value of the signal. - The `setter` function evaluated the new value against the old value, notifying the dependent functions only when the signal has been updated. -When creating the `createEffect` function, a reference to any previous subscribers is initialized to handle any possible nested effects present. -The current subscriber is then passed to the given function, which is run immediately. -During this run, if the effect accesses any signals it is then registered as a subscriber to those signals. -The current subscriber, once the given function has been run, will be reset to its previous value so that, if there are any nested effects, they are operated correctly. +When creating the `createEffect` function, a reference to any previous subscribers is initialized to handle any possible nested effects present. The current subscriber is then passed to the given function, which is run immediately. During this run, if the effect accesses any signals it is then registered as a subscriber to those signals. The current subscriber, once the given function has been run, will be reset to its previous value so that, if there are any nested effects, they are operated correctly. ### Validating the reactive system @@ -214,12 +197,9 @@ This will display the incremented count value on the console at one-second inter ## Managing lifecycles in a reactive system -In reactive systems, various elements, often referred to as "nodes", are interconnected. -These nodes can be signals, effects, or other reactive primitives. -They serve as the individual units that collectively make up the reactive behavior of the system. +In reactive systems, various elements, often referred to as "nodes", are interconnected. These nodes can be signals, effects, or other reactive primitives. They serve as the individual units that collectively make up the reactive behavior of the system. -When a node changes, the system will re-evaluate the parts connected to that node. -This can result in updates, additions, or removals of these connections, which affect the overall behavior of the system. +When a node changes, the system will re-evaluate the parts connected to that node. This can result in updates, additions, or removals of these connections, which affect the overall behavior of the system. Now, consider a scenario where a condition influences the data used to calculate an output: @@ -247,19 +227,15 @@ console.log("4. Turn on displayTemp"); setDisplayTemp(true); ``` -In this example, the `createMemo` primitive is used to cache the state of a computation. -This means the computation doesn't have to be re-run if its dependencies remain unchanged. +In this example, the `createMemo` primitive is used to cache the state of a computation. This means the computation doesn't have to be re-run if its dependencies remain unchanged. -The `displayTemperature` memo has an early return condition based on the value of `displayTemp`. -When `displayTemp` is false, the memo returns a message saying "Temperature display is off," and as a result, `temperature` and `unit` are not tracked. +The `displayTemperature` memo has an early return condition based on the value of `displayTemp`. When `displayTemp` is false, the memo returns a message saying "Temperature display is off," and as a result, `temperature` and `unit` are not tracked. If the `unit` is changed while `displayTemp` is false, however, the effect won't trigger since none of the memo's current dependencies (`displayTemp` in this case) have changed. ### Synchronous nature of effect tracking -The reactivity system described above operates synchronously. -This operation has implications for how effects and their dependencies are tracked. -Specifically, the system registers the subscriber, runs the effect function, and then unregisters the subscriber — all in a linear, synchronous sequence. +The reactivity system described above operates synchronously. This operation has implications for how effects and their dependencies are tracked. Specifically, the system registers the subscriber, runs the effect function, and then unregisters the subscriber — all in a linear, synchronous sequence. Consider the following example: @@ -271,20 +247,12 @@ createEffect(() => { }); ``` -The `createEffect` function in this example, initiates a `setTimeout` to delay the console log. -Because the system is synchronous, it doesn't wait for this operation to complete. -By the time the `count` getter is triggered within the `setTimeout`, the global scope no longer has a registered subscriber. -As a result, this `count` signal will not add the callback as a subscriber which leads to potential issues with tracking the changes to `count`. +The `createEffect` function in this example, initiates a `setTimeout` to delay the console log. Because the system is synchronous, it doesn't wait for this operation to complete. By the time the `count` getter is triggered within the `setTimeout`, the global scope no longer has a registered subscriber. As a result, this `count` signal will not add the callback as a subscriber which leads to potential issues with tracking the changes to `count`. ### Handling asynchronous effects -While the basic reactivity system is synchronous, frameworks like Solid offer more advanced features to handle asynchronous scenarios. -For example, the `on` function provides a way to manually specify the dependencies of an effect. -This is particularly useful for to make sure asynchronous operations are correctly tied into the reactive system. +While the basic reactivity system is synchronous, frameworks like Solid offer more advanced features to handle asynchronous scenarios. For example, the `on` function provides a way to manually specify the dependencies of an effect. This is particularly useful for to make sure asynchronous operations are correctly tied into the reactive system. -Solid also introduces the concept of resources for managing asynchronous operations. -Resources are specialized reactive primitives that convert the asynchronicity of operations like network requests into synchronicity, embedding the results within a signal. -The system can then track asynchronous operations and their state, keeping the UI up-to-date when the operation completes or its' state changes. +Solid also introduces the concept of resources for managing asynchronous operations. Resources are specialized reactive primitives that convert the asynchronicity of operations like network requests into synchronicity, embedding the results within a signal. The system can then track asynchronous operations and their state, keeping the UI up-to-date when the operation completes or its' state changes. -Using resources in Solid can assist in complex scenarios when multiple asynchronous operations are involved and the completion may affect different parts of the reactive system. -By integrating resources into the system, you can ensure that dependencies are correctly tracked and that the UI remains consistent with the underlying asynchronous data. +Using resources in Solid can assist in complex scenarios when multiple asynchronous operations are involved and the completion may affect different parts of the reactive system. By integrating resources into the system, you can ensure that dependencies are correctly tracked and that the UI remains consistent with the underlying asynchronous data. diff --git a/src/routes/concepts/components/basics.mdx b/src/routes/concepts/components/basics.mdx index 0aff88effb..76ea49a8d5 100644 --- a/src/routes/concepts/components/basics.mdx +++ b/src/routes/concepts/components/basics.mdx @@ -3,8 +3,7 @@ title: Basics order: 4 --- -Components are the building blocks of Solid applications. -These units are reusable and can be combined to create more complex applications. +Components are the building blocks of Solid applications. These units are reusable and can be combined to create more complex applications. Components are functions that return [JSX](/concepts/understanding-jsx) elements: @@ -14,8 +13,7 @@ function MyComponent() { } ``` -A component can be as simple as a single element or as complex as a full page. -They can also be nested within each other to create more intricate applications: +A component can be as simple as a single element or as complex as a full page. They can also be nested within each other to create more intricate applications: ```tsx function App() { @@ -29,10 +27,7 @@ function App() { ## Component trees -A web page is displayed by rendering a component tree, which is a hierarchical structure of components. -At the top of the tree is the primary application component, which is the root of the tree. -Child components are nested within the primary component, and those components can have their own child components. -This nesting can continue as needed. +A web page is displayed by rendering a component tree, which is a hierarchical structure of components. At the top of the tree is the primary application component, which is the root of the tree. Child components are nested within the primary component, and those components can have their own child components. This nesting can continue as needed. A simple application may have a component tree that looks like this: @@ -41,8 +36,7 @@ App // primary application component └── MyComponent // child component ``` -When an application grows, the component tree can become more complex. -For example, a more complex application may have a component tree that looks like this: +When an application grows, the component tree can become more complex. For example, a more complex application may have a component tree that looks like this: ```json App @@ -62,34 +56,23 @@ App └── Footer ``` -In nesting components, you can create a hierarchy of components that can be reused throughout the application. -This allows for a more modular approach to building applications, as components can be reused in different contexts. +In nesting components, you can create a hierarchy of components that can be reused throughout the application. This allows for a more modular approach to building applications, as components can be reused in different contexts. ## Component lifecycles -Components have a lifecycle that defines how they are created, updated, and destroyed. -A Solid component's lifecycle is different from other frameworks, as it is tied to the [concept of reactivity](/concepts/intro-to-reactivity). +Components have a lifecycle that defines how they are created, updated, and destroyed. A Solid component's lifecycle is different from other frameworks, as it is tied to the [concept of reactivity](/concepts/intro-to-reactivity). -Where frameworks may re-run components on every state change, a Solid component's lifecycle is tied to its initial run. -What this means is that a Solid component is only run once, when it is first rendered into the DOM. -After that, the component is not re-run, even if the application's state changes. +Where frameworks may re-run components on every state change, a Solid component's lifecycle is tied to its initial run. What this means is that a Solid component is only run once, when it is first rendered into the DOM. After that, the component is not re-run, even if the application's state changes. -When the Solid component renders, it sets up a reactive system that monitors for state changes. -When a state change occurs, the component will update the relevant areas without re-running the entire component. -By bypassing the full component lifecycle on every state change, Solid has a more predictable behavior compared to frameworks that re-run functions on every update. +When the Solid component renders, it sets up a reactive system that monitors for state changes. When a state change occurs, the component will update the relevant areas without re-running the entire component. By bypassing the full component lifecycle on every state change, Solid has a more predictable behavior compared to frameworks that re-run functions on every update. Since the component's logic is not continuously visited, getting this setup right is important when working with Solid. ### Initialization & configuration -When a component is first rendered into the DOM, the component function is executed. -This is where you will set up the component's state and side-effects. -This includes setting up [signals](/concepts/signals), [stores](/concepts/stores), [effects](/concepts/effects), and other reactive elements. -Since the logic in the component function is not continuously visited, it is important to set up the component correctly from the outset. +When a component is first rendered into the DOM, the component function is executed. This is where you will set up the component's state and side-effects. This includes setting up [signals](/concepts/signals), [stores](/concepts/stores), [effects](/concepts/effects), and other reactive elements. Since the logic in the component function is not continuously visited, it is important to set up the component correctly from the outset. -Each component instance is independent of other instances, meaning that each component has its own state and side-effects. -Through establishing proper dependencies, you can ensure that the component is set up correctly. -This allows for components to be reused in different contexts without affecting each other. +Each component instance is independent of other instances, meaning that each component has its own state and side-effects. Through establishing proper dependencies, you can ensure that the component is set up correctly. This allows for components to be reused in different contexts without affecting each other. ```tsx function MyComponent() { @@ -106,12 +89,9 @@ function MyComponent() { } ``` -When this component is rendered into the DOM, the function body is executed. -This includes creating the `count` signal and executing the `console.log(count())` statement, which will log the current value of `count` to the console. -In addition, the component's JSX is returned, which will be rendered into the DOM. +When this component is rendered into the DOM, the function body is executed. This includes creating the `count` signal and executing the `console.log(count())` statement, which will log the current value of `count` to the console. In addition, the component's JSX is returned, which will be rendered into the DOM. -After the component is rendered, the `console.log` statement will not be executed again, even if the component's state changes. -However, because the component's JSX is reactive, each press of the button will update the DOM with the new value of `count`. +After the component is rendered, the `console.log` statement will not be executed again, even if the component's state changes. However, because the component's JSX is reactive, each press of the button will update the DOM with the new value of `count`. In essence, Solid splits the concerns: @@ -120,9 +100,7 @@ In essence, Solid splits the concerns: ### Conditional rendering -To display different content based on state or other criteria, you can use conditional rendering. -Given that the component function is only executed once, conditional statements must be placed within the return statement. -This design ensures that conditional paths are clear and immediately understood. +To display different content based on state or other criteria, you can use conditional rendering. Given that the component function is only executed once, conditional statements must be placed within the return statement. This design ensures that conditional paths are clear and immediately understood. ```tsx function MyComponent() { @@ -144,11 +122,10 @@ function MyComponent() { } ``` -This example uses a [ternary operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_operator) to conditionally render different content based on the value of `count`. -When `count` is greater than 5, the component will display `"Count limit reached"`. -Otherwise, it will display the current count with an increment button. +This example uses a [ternary operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_operator) to conditionally render different content based on the value of `count`. When `count` is greater than 5, the component will display `"Count limit reached"`. Otherwise, it will display the current count with an increment button. :::info + To simplify conditional rendering, Solid provides built-in [control-flow](/concepts/control-flow/conditional-rendering) components like [`Show`](/concepts/control-flow/conditional-rendering#show), which create a more readable conditional rendering experience. ```tsx @@ -177,18 +154,15 @@ To simplify conditional rendering, Solid provides built-in [control-flow](/conce ## Importing and exporting -For components to be reusable, they need to be exported from one module and imported into another. -This allows for components to be shared and used where needed. +For components to be reusable, they need to be exported from one module and imported into another. This allows for components to be shared and used where needed. ### Exporting components -Once defined, a component can be [exported](https://developer.mozilla.org/en-US/docs/web/javascript/reference/statements/export) to make it available for use in other parts of your application. -There are two ways to export a component: [named exports](https://developer.mozilla.org/en-US/docs/web/javascript/reference/statements/export#named_exports) and [default exports](https://developer.mozilla.org/en-US/docs/web/javascript/reference/statements/export#default_exports). +Once defined, a component can be [exported](https://developer.mozilla.org/en-US/docs/web/javascript/reference/statements/export) to make it available for use in other parts of your application. There are two ways to export a component: [named exports](https://developer.mozilla.org/en-US/docs/web/javascript/reference/statements/export#named_exports) and [default exports](https://developer.mozilla.org/en-US/docs/web/javascript/reference/statements/export#default_exports). **Named export:** -Named exports allow for multiple components to be exported from a single file. -To export a component, you must use the `export` keyword before the function definition or specify the name of the component to export in curly braces (`{}`). +Named exports allow for multiple components to be exported from a single file. To export a component, you must use the `export` keyword before the function definition or specify the name of the component to export in curly braces (`{}`). ```typescript export function MyComponent() { @@ -206,8 +180,7 @@ export { MyComponent } **Default export:** -Default exports specify a single component to export from a file. -This is done by using the `default` keyword. +Default exports specify a single component to export from a file. This is done by using the `default` keyword. ```typescript // MyComponent.ts @@ -218,8 +191,7 @@ export default function MyComponent() { ### Importing components -To use a component in another file or component, it must be [imported](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import). -To import a component, you must specify the path to the file containing the component and the name of the component to import. +To use a component in another file or component, it must be [imported](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import). To import a component, you must specify the path to the file containing the component and the name of the component to import. **Named import:** @@ -238,8 +210,7 @@ function App() { } ``` -This is the preferred way to import components, as it allows for better code readability and maintainability. -Additionally, it allows for multiple components to be imported from the same file. +This is the preferred way to import components, as it allows for better code readability and maintainability. Additionally, it allows for multiple components to be imported from the same file. ```tsx // App.ts @@ -274,8 +245,7 @@ function App() { ### Importing Solid and its utilities -To use Solid, you must import the Solid library. -The reactive primitives and utilities are exported from Solid's main module. +To use Solid, you must import the Solid library. The reactive primitives and utilities are exported from Solid's main module. ```tsx import { createSignal } from "solid-js"; diff --git a/src/routes/concepts/components/class-style.mdx b/src/routes/concepts/components/class-style.mdx index d71c419b1d..30a079c25d 100644 --- a/src/routes/concepts/components/class-style.mdx +++ b/src/routes/concepts/components/class-style.mdx @@ -10,8 +10,7 @@ Similar to HTML, Solid uses `class` and `style` attributes to style elements via ## Inline styling -The `style` attribute allows you to style a single element and define CSS variables dynamically during runtime. -To use it, you can pass either a string or an object. +The `style` attribute allows you to style a single element and define CSS variables dynamically during runtime. To use it, you can pass either a string or an object. ```tsx // String @@ -21,25 +20,20 @@ To use it, you can pass either a string or an object.
This is a red div
``` -When using an object, the keys represent the CSS property names, and the values represent the CSS property values. -The keys must be in dash-case, and the values must be strings. +When using an object, the keys represent the CSS property names, and the values represent the CSS property values. The keys must be in dash-case, and the values must be strings. -While inline styles are useful for rapid prototyping, they are not recommended for production use. -This is because they are not reusable, and they can be difficult to maintain over time. +While inline styles are useful for rapid prototyping, they are not recommended for production use. This is because they are not reusable, and they can be difficult to maintain over time. ## Classes -The `class` attribute allows you to style one or more elements through CSS rules. -This provides a more structured approach to styling, as it allows you to reuse styles across multiple elements. +The `class` attribute allows you to style one or more elements through CSS rules. This provides a more structured approach to styling, as it allows you to reuse styles across multiple elements. -Classes are defined in CSS files, which are then imported into the component files that use them. -You can import these files using the `import` statement at the top of your component file. -Once imported into a component, the classes are scoped to that component and any of its children. +Classes are defined in CSS files, which are then imported into the component files that use them. You can import these files using the `import` statement at the top of your component file. Once imported into a component, the classes are scoped to that component and any of its children. ```jsx import "./Card.css"; @@ -51,8 +45,7 @@ function Card() { ### Dynamic styling -Dynamic styling provides a way to change the appearance of a component based on state or other factors like user inputs. -This is useful for creating components that can adapt to different scenarios without having to create multiple versions of the same component: +Dynamic styling provides a way to change the appearance of a component based on state or other factors like user inputs. This is useful for creating components that can adapt to different scenarios without having to create multiple versions of the same component: ```tsx const [theme, setTheme] = createSignal("light"); @@ -62,8 +55,7 @@ const [theme, setTheme] = createSignal("light"); ; ``` -[Props](/concepts/components/props) are another way to change styles. -By passing props to components, you can adapt styles based on the component's usage or the data it receives: +[Props](/concepts/components/props) are another way to change styles. By passing props to components, you can adapt styles based on the component's usage or the data it receives: ```tsx function ThemedButton(props) { @@ -77,34 +69,30 @@ function ThemedButton(props) { ### `classList` -When you want to apply multiple classes to an element, you can use the [`classList` attribute](https://developer.mozilla.org/en-US/docs/Web/API/Element/classList). -To use it, you can pass either a string or an object where the keys represent the class names and the values represent a boolean expression. -When the value is `true`, the class is applied; when `false`, it is removed. +When you want to apply multiple classes to an element, you can use the [`classList` attribute](https://developer.mozilla.org/en-US/docs/Web/API/Element/classList). To use it, you can pass either a string or an object where the keys represent the class names and the values represent a boolean expression. When the value is `true`, the class is applied; when `false`, it is removed. ```tsx const [current, setCurrent] = createSignal("foo"); ; ``` -`classList` is often more efficient than `class` when handling multiple conditional classes. -This is because `classList` selectively toggles only the classes that require alteration, while `class` will be re-evaluated each time. -For a single conditional class, using `class` might be simpler but as the number of conditional classes increases, `classList` offers a more readable and declarative approach. +`classList` is often more efficient than `class` when handling multiple conditional classes. This is because `classList` selectively toggles only the classes that require alteration, while `class` will be re-evaluated each time. For a single conditional class, using `class` might be simpler but as the number of conditional classes increases, `classList` offers a more readable and declarative approach. -:::info - While it is possible, mixing `class` and `classList` can introduce unexpected errors. - If both are reactive when the `class` value changes, Solid will set the entire `class` attribute. - This will remove any classes set by `classList`. +:::info - To avoid this, the `class` attribute should be set to a static string or nothing. - Alternatively, `class` can be set to a static computed value (e.g. `class={baseClass()}`), but then it must be put before any `classList` attributes. +While it is possible, mixing `class` and `classList` can introduce unexpected errors. If both are reactive when the `class` value changes, Solid will set the entire `class` attribute. This will remove any classes set by `classList`. + +To avoid this, the `class` attribute should be set to a static string or nothing. +Alternatively, `class` can be set to a static computed value (e.g. `class={baseClass()}`), but then it must be put before any `classList` attributes. + +Additionally, since `classList` is a pseudo-attribute, it doesn't work in prop spreads like `
` or in ``. - Additionally, since `classList` is a pseudo-attribute, it doesn't work in prop spreads like `
` or in ``. ::: For a guide on how to style your components, see [Styling Your Components](/guides/styling-your-components), where we cover the different ways to style your components using libraries such as [Tailwind CSS](https://tailwindcss.com/). diff --git a/src/routes/concepts/components/event-handlers.mdx b/src/routes/concepts/components/event-handlers.mdx index f17764181b..6c26b7d684 100644 --- a/src/routes/concepts/components/event-handlers.mdx +++ b/src/routes/concepts/components/event-handlers.mdx @@ -10,8 +10,7 @@ Solid provides two ways to add event listeners to the browser: - [`on:__`](/reference/jsx-attributes/on): adds an event listener to the `element`. This is also known as a _native event_. - [`on__`](/reference/jsx-attributes/on_): adds an event listener to the `document` and dispatches it to the `element`. This can be referred to as a _delegated event_. -Delegated events flow through the [_component tree_](/concepts/components/basics#component-trees), and save some resources by performing better on commonly used events. -Native events, however, flow through the _DOM tree_, and provide more control over the behavior of the event. +Delegated events flow through the [_component tree_](/concepts/components/basics#component-trees), and save some resources by performing better on commonly used events. Native events, however, flow through the _DOM tree_, and provide more control over the behavior of the event. ## Using events @@ -25,15 +24,13 @@ To add an event handler, prefix the event name with either `on` or `on:`, and as
... very long text ...
``` -Delegated events are **not case sensitive**, therefore using delegated event handlers in Solid can be written using camelCase or all lowercase. -Note that while delegated events can be written both ways, native events _are_ case sensitive. +Delegated events are **not case sensitive**, therefore using delegated event handlers in Solid can be written using camelCase or all lowercase. Note that while delegated events can be written both ways, native events _are_ case sensitive. ```tsx ``` -For any other events, such as custom events or events you wish _not_ to be delegated, the `on:` attribute will add an event listener as-is. -This is what makes the event listener case sensitive. +For any other events, such as custom events or events you wish _not_ to be delegated, the `on:` attribute will add an event listener as-is. This is what makes the event listener case sensitive. ```tsx @@ -43,8 +40,7 @@ For typing standard or custom events using `on:`, the TypeScript page has a sect ## Binding events -To optimize event handlers, you can pass an array as the event handler, replacing the function. -When doing this, the second item passed into the array is supplied as the handler's first argument: +To optimize event handlers, you can pass an array as the event handler, replacing the function. When doing this, the second item passed into the array is supplied as the handler's first argument: ```tsx const handler = (data, event) => { @@ -60,15 +56,11 @@ By binding events in this way, Solid avoids the overhead of using JavaScript's [ ### Dynamic handlers -An event handler does not form part of the reactive system. -If you were to pass the handler as a signal, it will not respond to the changes of that signal. -In other words, events do not dynamically update, and the bindings are not reactive. -This is because attaching and detaching listeners is a resource-intensive task. +An event handler does not form part of the reactive system. If you were to pass the handler as a signal, it will not respond to the changes of that signal. In other words, events do not dynamically update, and the bindings are not reactive. This is because attaching and detaching listeners is a resource-intensive task. Since event handlers are called like a standard function, you can design them to call a reactive source, if needed. -In the following example, `handleClick` represents a prop that has the flexibility to adopt any function. -As a result, there is no requirement for these functions to be reactive. +In the following example, `handleClick` represents a prop that has the flexibility to adopt any function. As a result, there is no requirement for these functions to be reactive. ```tsx
props.handleClick?.()} /> @@ -76,14 +68,11 @@ As a result, there is no requirement for these functions to be reactive. ## Event delegation -Instead of attaching event listeners to every individual element, Solid uses _synthetic event delegation_, through the [`on__`](/reference/jsx-attributes/on_) form . -In this method event listeners are attached to the `document` element, and dispatch events to the relevant elements as they bubble up. +Instead of attaching event listeners to every individual element, Solid uses _synthetic event delegation_, through the [`on__`](/reference/jsx-attributes/on_) form . In this method event listeners are attached to the `document` element, and dispatch events to the relevant elements as they bubble up. -By keeping the number of event listeners to a minimum, events can be captured more effectively. -This is especially useful when working with a large number of elements, such as in a table or list. +By keeping the number of event listeners to a minimum, events can be captured more effectively. This is especially useful when working with a large number of elements, such as in a table or list. -Supported events such as `click`, `input` and `keydown` are just a few examples that are optimized in this way. -To view the full list see the [references below](#list-of-delegated-events). +Supported events such as `click`, `input` and `keydown` are just a few examples that are optimized in this way. To view the full list see the [references below](#list-of-delegated-events). If you need to attach an event listener to an element that is not supported by Solid's event delegation, such as a custom event in a [custom element](https://developer.mozilla.org/en-US/docs/Web/API/Web_components/Using_custom_elements), you can use the [`on:__`](/reference/jsx-attributes/on) form. @@ -95,14 +84,11 @@ If you need to attach an event listener to an element that is not supported by S While delegated events provide some performance enhancements, there are tradeoffs. -Event delegation is designed for event propagation through the JSX Tree, rather than the DOM Tree. -This can differ from the previous expectations of how events work and flow. +Event delegation is designed for event propagation through the JSX Tree, rather than the DOM Tree. This can differ from the previous expectations of how events work and flow. Some things to keep in mind include: -- Delegated event listeners are added _once_ per event type and handle all future events of that type. -This means that delegated event listeners remain active even if the element that added them and its handler is removed. - For example, if a `div` listens for `mousemove` and is later removed, the `mousemove` events will still be dispatched to the `document` in case a different element is also listening for mouse moves. +- Delegated event listeners are added _once_ per event type and handle all future events of that type. This means that delegated event listeners remain active even if the element that added them and its handler is removed. For example, if a `div` listens for `mousemove` and is later removed, the `mousemove` events will still be dispatched to the `document` in case a different element is also listening for mouse moves. ```tsx
@@ -110,8 +96,7 @@ This means that delegated event listeners remain active even if the element that :::tip[Occasional Events] -Rather than using delegated events for events that happen infrequently, **native events** are a better solution. -Since these events happen in specific circumstances, they do not benefit from the performance improvements you get with event delegation. +Rather than using delegated events for events that happen infrequently, **native events** are a better solution. Since these events happen in specific circumstances, they do not benefit from the performance improvements you get with event delegation. ```tsx
@@ -121,9 +106,7 @@ Since these events happen in specific circumstances, they do not benefit from th - `event.stopPropagation()` does not work as expected since events are attached to the `document` rather than the `element`. - With cases like this, a native event is recommended. - As an example, using a native event would stop the following event from reaching the `div native` handler, which is _not_ the case for delegated events. - You can [view this example in the Solid Playground](https://playground.solidjs.com/anonymous/c5346f84-01e4-4080-8ace-4443ffd0bb10). + With cases like this, a native event is recommended. As an example, using a native event would stop the following event from reaching the `div native` handler, which is _not_ the case for delegated events. You can [view this example in the Solid Playground](https://playground.solidjs.com/anonymous/c5346f84-01e4-4080-8ace-4443ffd0bb10). ```tsx onMount(() => { @@ -171,8 +154,7 @@ button [See how this solution differs in the Solid Playground](https://playground.solidjs.com/anonymous/9e2deddc-2e83-4ac2-8ee0-49c7c3a45d11). -- [Portals](/concepts/control-flow/portal) propagate events following the _component tree_ and not the _DOM tree_, making them easier to use. - This means when a `Portal` gets attached to the `body`, any events will propagate up to the `container`. +- [Portals](/concepts/control-flow/portal) propagate events following the _component tree_ and not the _DOM tree_, making them easier to use. This means when a `Portal` gets attached to the `body`, any events will propagate up to the `container`. ```tsx
console.log("portal key press")}> diff --git a/src/routes/concepts/components/props.mdx b/src/routes/concepts/components/props.mdx index 12e13afcce..2a12e86e64 100644 --- a/src/routes/concepts/components/props.mdx +++ b/src/routes/concepts/components/props.mdx @@ -2,8 +2,7 @@ title: Props --- -Props are a way to pass state from a parent component to a child component. -These read-only properties are passed to components as attributes within JSX and are accessible within the component via the `props` object: +Props are a way to pass state from a parent component to a child component. These read-only properties are passed to components as attributes within JSX and are accessible within the component via the `props` object: ```tsx function App() { @@ -26,9 +25,7 @@ function MyComponent(props) { ## `mergeProps` -[`mergeProps`](/reference/reactive-utilities/merge-props) is a Solid utility function designed to merge multiple potentially reactive objects together. -It behaves similar to [`Object.assign`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) but will retain the reactivity of the properties being merged. -This helps ensure that when individual properties within the merged object change, their reactivity is not lost. +[`mergeProps`](/reference/reactive-utilities/merge-props) is a Solid utility function designed to merge multiple potentially reactive objects together. It behaves similar to [`Object.assign`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) but will retain the reactivity of the properties being merged. This helps ensure that when individual properties within the merged object change, their reactivity is not lost. ```typescript import { mergeProps } from "solid-js"; @@ -43,16 +40,13 @@ function MyComponent(props) { // Usage: ``` -When merging props, if there is no existing value for a property, the value from the first object will be used. -However, if a value already exists, it will be used instead, all while retaining the reactivity of the property. +When merging props, if there is no existing value for a property, the value from the first object will be used. However, if a value already exists, it will be used instead, all while retaining the reactivity of the property. ## Destructuring props -Props are read-only so that child components do not directly modify the data passed by the parent. -This also encourages one-way data flow, a pattern often seen to promote more predictable data management. +Props are read-only so that child components do not directly modify the data passed by the parent. This also encourages one-way data flow, a pattern often seen to promote more predictable data management. -With Solid, destructuring props is not recommended as it can break reactivity. -Instead, you should access props directly from the `props` object, or wrap them in a function to ensure they are always up-to-date: +With Solid, destructuring props is not recommended as it can break reactivity. Instead, you should access props directly from the `props` object, or wrap them in a function to ensure they are always up-to-date: ```typescript function MyComponent(props) { @@ -64,11 +58,9 @@ function MyComponent(props) { ### `splitProps` -[`splitProps`](/reference/reactive-utilities/split-props) is a utility function designed to help split a single props object into multiple sets of props, retaining the reactivity of the individual properties. -It provides a way to destructure props without breaking reactivity. +[`splitProps`](/reference/reactive-utilities/split-props) is a utility function designed to help split a single props object into multiple sets of props, retaining the reactivity of the individual properties. It provides a way to destructure props without breaking reactivity. -`splitProps` gives you the ability to define one or more arrays of keys that you wish to extract into separate props objects, all while retaining the reactivity of the individual properties. -It will return an array of props objects related to each set of keys, plus an additional props object containing any remaining keys. +`splitProps` gives you the ability to define one or more arrays of keys that you wish to extract into separate props objects, all while retaining the reactivity of the individual properties. It will return an array of props objects related to each set of keys, plus an additional props object containing any remaining keys. When passing props to child components, you can use `splitProps` to split the props into multiple groups, and then pass each group to the appropriate child component: @@ -96,9 +88,7 @@ function ParentComponent(props) { ## Passing props to children -In most instances, simply using `props` within JSX will work without any issues. -However, there are some cases where accessing `props.children` multiple times can introduce problems and unexpected behaviours, such as repeated creation of child components or elements. -For instances like these, Solid provides a [`children`](/reference/component-apis/children) helper that ensures you always get the right child components without anything unwanted happening. +In most instances, simply using `props` within JSX will work without any issues. However, there are some cases where accessing `props.children` multiple times can introduce problems and unexpected behaviours, such as repeated creation of child components or elements. For instances like these, Solid provides a [`children`](/reference/component-apis/children) helper that ensures you always get the right child components without anything unwanted happening. ```typescript import { children } from "solid-js"; @@ -112,11 +102,6 @@ function ColoredList(props) { ## Prop drilling -Prop drilling is a term used to describe the process of passing props through multiple layers of components. -While it can be a useful pattern, it can also lead to problems. -When components are nested deeply, passing props through each component can become difficult to manage. -Additionally, this can lead to components receiving props that they do not need, unnecessary re-renders, and trouble refactoring. +Prop drilling is a term used to describe the process of passing props through multiple layers of components. While it can be a useful pattern, it can also lead to problems. When components are nested deeply, passing props through each component can become difficult to manage. Additionally, this can lead to components receiving props that they do not need, unnecessary re-renders, and trouble refactoring. -Since components in Solid do not own state, props are not needed to pass state between components, but may be used. -Because of this, there may be times when you need to pass props through multiple layers of components. -A common solution to this problem is to use [Context](/concepts/context) to pass state to deeply nested components without having to pass props through each component in between. +Since components in Solid do not own state, props are not needed to pass state between components, but may be used. Because of this, there may be times when you need to pass props through multiple layers of components. A common solution to this problem is to use [Context](/concepts/context) to pass state to deeply nested components without having to pass props through each component in between. diff --git a/src/routes/concepts/context.mdx b/src/routes/concepts/context.mdx index 1f486ab815..612ed8aaee 100644 --- a/src/routes/concepts/context.mdx +++ b/src/routes/concepts/context.mdx @@ -7,19 +7,15 @@ Context provides a way to pass data through the component tree without having to ## When to use context -When you have a large [component tree](/concepts/components/basics#component-trees) that requires state to be shared, context can be used. -Context can be employed to avoid [prop drilling](/concepts/components/props#prop-drilling), which is the practice of passing props through intermediate elements without using them directly. +When you have a large [component tree](/concepts/components/basics#component-trees) that requires state to be shared, context can be used. Context can be employed to avoid [prop drilling](/concepts/components/props#prop-drilling), which is the practice of passing props through intermediate elements without using them directly. -If you want to avoid passing some props through a few layers, when applicable, adjusting your component hierarchy may be an easier solution. -[Signals](/concepts/signals) are often the simplest solution since they can be imported directly into the components that need them. +If you want to avoid passing some props through a few layers, when applicable, adjusting your component hierarchy may be an easier solution. [Signals](/concepts/signals) are often the simplest solution since they can be imported directly into the components that need them. -Context, however, is designed to share data that is global to an application or for information that is regularly accessed by multiple components in an application's component tree. -This offers a way to access state across an application without passing props through intermediate layers or importing them directly into components. +Context, however, is designed to share data that is global to an application or for information that is regularly accessed by multiple components in an application's component tree. This offers a way to access state across an application without passing props through intermediate layers or importing them directly into components. ## Creating context -Context is created using the [`createContext`](/reference/component-apis/create-context) function. -This function has a `Provider` property that wraps the component tree you want to provide context to. +Context is created using the [`createContext`](/reference/component-apis/create-context) function. This function has a `Provider` property that wraps the component tree you want to provide context to.
@@ -27,7 +23,8 @@ This function has a `Provider` property that wraps the component tree you want t import { createContext } from "solid-js"; const MyContext = createContext(); -``` + +````
```jsx @@ -40,14 +37,14 @@ export function Provider (props) { ) }; -``` +```` +
## Providing context to children -To pass a value to the `Provider`, you use the `value` prop which can take in any value, including [signals](#updating-context-values). -Once a value is passed to the `Provider`, it is available to all components that are descendants of the `Provider`. +To pass a value to the `Provider`, you use the `value` prop which can take in any value, including [signals](#updating-context-values). Once a value is passed to the `Provider`, it is available to all components that are descendants of the `Provider`. When passing a single value, it can be directly passed to the `value` prop: @@ -61,32 +58,26 @@ const Provider = (props) => ( ``` -When passing multiple values (as an `array` or `object`), it is recommended to use a [store](/reference/component-apis/create-context#usage). + When passing multiple values (as an `array` or `object`), it is recommended to + use a [store](/reference/component-apis/create-context#usage). ## Consuming context -Once the values are available to all the components in the context's component tree, they can be accessed using the [`useContext`](/reference/component-apis/use-context) utility. -This utility takes in the context object and returns the value(s) passed to the `Provider`: +Once the values are available to all the components in the context's component tree, they can be accessed using the [`useContext`](/reference/component-apis/use-context) utility. This utility takes in the context object and returns the value(s) passed to the `Provider`: ```jsx title="/context/component.jsx" import { createContext, useContext } from "solid-js"; import { MyContext } from "./create"; const Provider = (props) => ( - - {props.children} - + {props.children} ); const Child = () => { const value = useContext(MyContext); - return ( - - {value} - - ); + return {value}; }; export const App = () => ( @@ -98,11 +89,9 @@ export const App = () => ( ## Customizing Context Utilities -When an application contains multiple context objects, it can be difficult to keep track of which context object is being used. -To solve this issue, you can create a custom utilities to create a more readable way to access the context values. +When an application contains multiple context objects, it can be difficult to keep track of which context object is being used. To solve this issue, you can create a custom utilities to create a more readable way to access the context values. -For example, when wrapping a component tree, you may want to create a custom `Provider` component that can be used to wrap the component tree. -This also provides you with the option of re-using the `Provider` component in other parts of your application, if needed. +For example, when wrapping a component tree, you may want to create a custom `Provider` component that can be used to wrap the component tree. This also provides you with the option of re-using the `Provider` component in other parts of your application, if needed. ```jsx import { createSignal, createContext, useContext } from "solid-js"; @@ -132,8 +121,7 @@ export function App() { } ``` -Similarly, you can create a custom utility to access the context values. -Instead of importing `useContext` and passing in the context object on each component that you're using it in, creating a customized utility can make it easier to access the values you need: +Similarly, you can create a custom utility to access the context values. Instead of importing `useContext` and passing in the context object on each component that you're using it in, creating a customized utility can make it easier to access the values you need: ```jsx export function useCounter() { @@ -158,8 +146,7 @@ export function CounterProvider(props) { ## Updating Context Values -[Signals](/concepts/signals) offer a way to synchronize and manage data shared across your components using context. -You can pass a signal directly to the `value` prop of the `Provider` component, and any changes to the signal will be reflected in all components that consume the context. +[Signals](/concepts/signals) offer a way to synchronize and manage data shared across your components using context. You can pass a signal directly to the `value` prop of the `Provider` component, and any changes to the signal will be reflected in all components that consume the context.
@@ -195,11 +182,12 @@ export function CounterProvider(props) { } ]; - return ( - - {props.children} - - ); + return ( + + {props.children} + + ); + } export function useCounter() { return useContext(CounterContext); } @@ -212,15 +200,17 @@ import { useCounter } from "./Context"; export function Child(props) { const [count, { increment, decrement }] = useCounter(); - return ( - <> -
{count()}
- - - - ); + return ( + <> +
{count()}
+ + + + ); + }; -``` + +````
@@ -251,32 +241,27 @@ function Child() { return
{value}
; } -``` +```` ## Common issues with `createContext` and `useContext` If no default value is passed to `createContext`, it is possible for `useContext` to return `undefined`. -Read more about default values in the [`createContext`](/reference/component-apis/create-context) entry. + Read more about default values in the + [`createContext`](/reference/component-apis/create-context) entry. -Because of this, if an initial value was not passed to `createContext`, the TS type signature of `useContext` will indicate that -the value returned might be `undefined` (as mentioned above). -This can be quite annoying when you want to use the context inside a component, and particularly when immediately destructuring the context. -Additionally, if you use `useContext` and it returns `undefined` (which is often, but not always, the result of a bug), the error message thrown at runtime can be confusing. +Because of this, if an initial value was not passed to `createContext`, the TS type signature of `useContext` will indicate that the value returned might be `undefined` (as mentioned above). This can be quite annoying when you want to use the context inside a component, and particularly when immediately destructuring the context. Additionally, if you use `useContext` and it returns `undefined` (which is often, but not always, the result of a bug), the error message thrown at runtime can be confusing. -The most common solution for it is to wrap all uses of `useContext` in a function that will explicitly throw a helpful error if the context is `undefined`. -This also serves to narrow the type returned, so TS doesn't complain. -As an example: +The most common solution for it is to wrap all uses of `useContext` in a function that will explicitly throw a helpful error if the context is `undefined`. This also serves to narrow the type returned, so TS doesn't complain. As an example: ```ts title="/context/counter-component.tsx" function useCounterContext() { - const context = useContext(CounterContext) + const context = useContext(CounterContext); if (!context) { - throw new Error("can't find CounterContext") + throw new Error("can't find CounterContext"); } - return context + return context; } ``` - diff --git a/src/routes/concepts/control-flow/conditional-rendering.mdx b/src/routes/concepts/control-flow/conditional-rendering.mdx index eecbdfe141..f8bc20aa96 100644 --- a/src/routes/concepts/control-flow/conditional-rendering.mdx +++ b/src/routes/concepts/control-flow/conditional-rendering.mdx @@ -3,79 +3,70 @@ title: "Conditional rendering" order: 1 --- -Conditional rendering is the process of displaying different UI elements based on certain conditions. -This is a common pattern in UI development, and is often used to show or hide elements based on user input, data, or other conditions. +Conditional rendering is the process of displaying different UI elements based on certain conditions. This is a common pattern in UI development, and is often used to show or hide elements based on user input, data, or other conditions. Solid offers dedicated components to handle conditional rendering in a more straightforward and readable way. ## Show -`` renders its children when a condition is evaluated to be true. -Similar to the [ternary operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator) in JavaScript, it uses control logic flow within JSX to determine what to render. +`` renders its children when a condition is evaluated to be true. Similar to the [ternary operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator) in JavaScript, it uses control logic flow within JSX to determine what to render. -`` has a `when` property that is used to determine whether or not to render its children. -When there is a change in the state or props it depends on, this property is re-evaluated. -This property can be a boolean value, or a function that returns a boolean value. +`` has a `when` property that is used to determine whether or not to render its children. When there is a change in the state or props it depends on, this property is re-evaluated. This property can be a boolean value, or a function that returns a boolean value. ```jsx -import { Show } from "solid-js" +import { Show } from "solid-js"; -
Loading...
-
+
Loading...
+
; ``` -`` has the `fallback` property that can be used to specify the content to be rendered when the condition evaluates to false. -This property can return a JSX element. +`` has the `fallback` property that can be used to specify the content to be rendered when the condition evaluates to false. This property can return a JSX element. ```jsx -import { Show } from "solid-js" +import { Show } from "solid-js"; Loading...
}>

Hi, I am {data().name}.

- +; ``` If there are multiple conditions that need to be handled, `` can be nested to handle each condition. ```jsx -import { Show } from "solid-js" +import { Show } from "solid-js"; -
Loading...
- -
Error: {data.error}
-
-
+
Loading...
+ +
Error: {data.error}
+
+
; ``` - ## Switch and Match -When there are multiple conditions that need to be handled, it can be difficult to manage the logic flow with nested `` components. -Solid has the `` and `` components for this purpose. +When there are multiple conditions that need to be handled, it can be difficult to manage the logic flow with nested `` components. Solid has the `` and `` components for this purpose. -Similar to JavaScript's [switch/case](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/switch) structure, `` wraps multiple `` components so that each condition is evaluated _in sequence_. -The first `` component that evaluates to true will have its children rendered, and the rest will be ignored. +Similar to JavaScript's [switch/case](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/switch) structure, `` wraps multiple `` components so that each condition is evaluated _in sequence_. The first `` component that evaluates to true will have its children rendered, and the rest will be ignored. ```jsx -import { Switch, Match } from "solid-js" +import { Switch, Match } from "solid-js"; - -

Outcome 1

-
- -

Outcome 2

-
-
+ +

Outcome 1

+
+ +

Outcome 2

+
+
; ``` -Similar to ``, each `` component has a `when` property that is used to determine whether or not to render its children. -An optional `fallback` property can also be passed to `` to specify the content be rendered when none of the `` components evaluate to true. +Similar to ``, each `` component has a `when` property that is used to determine whether or not to render its children. An optional `fallback` property can also be passed to `` to specify the content be rendered when none of the `` components evaluate to true. ```jsx -import { Switch, Match } from "solid-js" +import { Switch, Match } from "solid-js"; Fallback content

}> @@ -84,5 +75,5 @@ import { Switch, Match } from "solid-js"

Outcome 2

-
+
; ``` diff --git a/src/routes/concepts/control-flow/data.json b/src/routes/concepts/control-flow/data.json index 3b874c4f05..e8261711d7 100644 --- a/src/routes/concepts/control-flow/data.json +++ b/src/routes/concepts/control-flow/data.json @@ -2,9 +2,9 @@ "title": "Control flow", "pages": [ "conditional-rendering.mdx", - "dynamic.mdx", - "list-rendering.mdx", - "portal.mdx", - "error-boundary.mdx" + "dynamic.mdx", + "list-rendering.mdx", + "portal.mdx", + "error-boundary.mdx" ] } diff --git a/src/routes/concepts/control-flow/dynamic.mdx b/src/routes/concepts/control-flow/dynamic.mdx index 671eda05b1..38ef095b06 100644 --- a/src/routes/concepts/control-flow/dynamic.mdx +++ b/src/routes/concepts/control-flow/dynamic.mdx @@ -3,25 +3,24 @@ title: "Dynamic" order: 2 --- -`` is a Solid component that allows you to render components dynamically based on data. -By passing either a string representing a [native HTML element](https://developer.mozilla.org/en-US/docs/Web/HTML/Element) or a component function to the `component` prop, you can render the chosen component with the remaining props you provide. +`` is a Solid component that allows you to render components dynamically based on data. By passing either a string representing a [native HTML element](https://developer.mozilla.org/en-US/docs/Web/HTML/Element) or a component function to the `component` prop, you can render the chosen component with the remaining props you provide. ```jsx -import { createSignal, For } from "solid-js" -import { Dynamic } from "solid-js/web" +import { createSignal, For } from "solid-js"; +import { Dynamic } from "solid-js/web"; -const RedDiv = () =>
Red
-const GreenDiv = () =>
Green
-const BlueDiv = () =>
Blue
+const RedDiv = () =>
Red
; +const GreenDiv = () =>
Green
; +const BlueDiv = () =>
Blue
; const options = { red: RedDiv, green: GreenDiv, blue: BlueDiv, -} +}; function App() { - const [selected, setSelected] = createSignal("red") + const [selected, setSelected] = createSignal("red"); return ( <> @@ -30,36 +29,34 @@ function App() { onInput={(e) => setSelected(e.currentTarget.value)} > - {(color) => } + {(color) => } - ) + ); } ``` -This example renders a `` element that allows you to choose between three colors. Once a color is selected, the `` component will render the chosen color's corresponding component or element. -`` creates more concise code than alternative conditional rendering options. -For example, the following code renders the same result as the previous example: +`` creates more concise code than alternative conditional rendering options. For example, the following code renders the same result as the previous example: ```jsx -import { createSignal, Switch, Match, For } from "solid-js" +import { createSignal, Switch, Match, For } from "solid-js"; -const RedDiv = () =>
Red
-const GreenDiv = () =>
Green
-const BlueDiv = () =>
Blue
+const RedDiv = () =>
Red
; +const GreenDiv = () =>
Green
; +const BlueDiv = () =>
Blue
; const options = { red: RedDiv, green: GreenDiv, blue: BlueDiv, -} +}; function App() { - const [selected, setSelected] = createSignal("red") + const [selected, setSelected] = createSignal("red"); return ( <> @@ -68,7 +65,7 @@ function App() { onInput={(e) => setSelected(e.currentTarget.value)} > - {(color) => } + {(color) => } }> @@ -80,7 +77,7 @@ function App() {
- ) + ); } ``` @@ -88,15 +85,12 @@ Instead of a more verbose [`` and ``](/concepts/control-flow/cond ## Props -When working with these components, you can pass [props](/concepts/components/props) to the component you are rendering by passing them to the `` component. -This makes them available to the component you are rendering, similar to how you would pass props to components in JSX. +When working with these components, you can pass [props](/concepts/components/props) to the component you are rendering by passing them to the `` component. This makes them available to the component you are rendering, similar to how you would pass props to components in JSX. ```jsx -import { Dynamic } from "solid-js/web" +import { Dynamic } from "solid-js/web"; function App() { - return ( - - ) + return ; } ``` diff --git a/src/routes/concepts/control-flow/error-boundary.mdx b/src/routes/concepts/control-flow/error-boundary.mdx index 961dd29419..cb6c5670ea 100644 --- a/src/routes/concepts/control-flow/error-boundary.mdx +++ b/src/routes/concepts/control-flow/error-boundary.mdx @@ -3,16 +3,11 @@ title: "Error boundary" order: 5 --- -By default, if part of an application throws an error during rendering, the entire application can crash, resulting in Solid removing its UI from the screen. -Error boundaries provide a way to catch these errors and prevent the entire app from crashing. +By default, if part of an application throws an error during rendering, the entire application can crash, resulting in Solid removing its UI from the screen. Error boundaries provide a way to catch these errors and prevent the entire app from crashing. -The [``](/reference/components/error-boundary) component is used to create an error boundary. -It catches any error that occurs during the rendering or updating of its children. -However, an important note is that errors occurring outside the rendering process, such as in event handlers or after a `setTimeout`, are _not_ caught by error boundaries. +The [``](/reference/components/error-boundary) component is used to create an error boundary. It catches any error that occurs during the rendering or updating of its children. However, an important note is that errors occurring outside the rendering process, such as in event handlers or after a `setTimeout`, are _not_ caught by error boundaries. -The `fallback` prop can be used to display a user-friendly error message or notification when an error occurs. -If a function is passed to `fallback`, it will receive the error object as well as a `reset` function. -The `reset` function forces the `` to re-render its children and reset the error state, providing users with a way to recover from the error. +The `fallback` prop can be used to display a user-friendly error message or notification when an error occurs. If a function is passed to `fallback`, it will receive the error object as well as a `reset` function. The `reset` function forces the `` to re-render its children and reset the error state, providing users with a way to recover from the error. ```tsx import { ErrorBoundary } from "solid-js"; @@ -37,5 +32,4 @@ function App() { } ``` -In this example, when the `ErrorProne` component throws an error, the `` catches it, preventing it from affecting the rest of the application. -Instead, it displays the error message passed to the fallback prop. +In this example, when the `ErrorProne` component throws an error, the `` catches it, preventing it from affecting the rest of the application. Instead, it displays the error message passed to the fallback prop. diff --git a/src/routes/concepts/control-flow/list-rendering.mdx b/src/routes/concepts/control-flow/list-rendering.mdx index 3227d985b8..e4e6e24dd3 100644 --- a/src/routes/concepts/control-flow/list-rendering.mdx +++ b/src/routes/concepts/control-flow/list-rendering.mdx @@ -5,16 +5,13 @@ order: 3 List rendering allows you to generate multiple elements from a collection of data, such as an array or object, where each element corresponds to an item in the collection. -When dealing with dynamic data, Solid offers two ways to render lists: the `` and `` components. -Both of these components help you loop over data collections to generate elements, however, they both cater to different scenarios. +When dealing with dynamic data, Solid offers two ways to render lists: the `` and `` components. Both of these components help you loop over data collections to generate elements, however, they both cater to different scenarios. ## `` -`` is a looping component that allows you to render elements based on the contents of an array or object. -This component is designed to be used with **complex data structures**, such as arrays of objects, where the order and length of the list may change frequently. +`` is a looping component that allows you to render elements based on the contents of an array or object. This component is designed to be used with **complex data structures**, such as arrays of objects, where the order and length of the list may change frequently. -The sole property in `` is `each` , through which you can specify the data collection to loop over. -This property expects an array, however, it can also accept objects that have been converted to arrays using utilities such as [`Object.entries`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries) or [`Object.values`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values). +The sole property in `` is `each` , through which you can specify the data collection to loop over. This property expects an array, however, it can also accept objects that have been converted to arrays using utilities such as [`Object.entries`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries) or [`Object.values`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values). ```jsx import { For } from "solid-js" @@ -26,22 +23,21 @@ import { For } from "solid-js" ``` -Between the `` tags, the component requires a [callback function](https://developer.mozilla.org/en-US/docs/Glossary/Callback_function) which will dictate how each item in the data collection should be rendered. -This structure resembles the callback used within JavaScript's [`map`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) method, providing a familiar pattern to follow. +Between the `` tags, the component requires a [callback function](https://developer.mozilla.org/en-US/docs/Glossary/Callback_function) which will dictate how each item in the data collection should be rendered. This structure resembles the callback used within JavaScript's [`map`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) method, providing a familiar pattern to follow. The function receives two arguments: + - `item`: represents the current item in the data collection that is being rendered over. - `index`: the current item's index within the collection. -You can access the current `item` and `index` to dynamically set attributes or content of the JSX elements. -Index is a [*signal*](/concepts/signals) and must be called as a function to retrieve its value. +You can access the current `item` and `index` to dynamically set attributes or content of the JSX elements. Index is a [_signal_](/concepts/signals) and must be called as a function to retrieve its value. ```jsx {(item, index) => (
  • {item.name} @@ -52,8 +48,7 @@ Index is a [*signal*](/concepts/signals) and must be called as a function to ret ## `Index` -``, similar to ``, is a looping component that allows you to render elements based on the contents of an array or object. -However, when the order and length of the list remain _stable_, but the content may change frequently, `` is a better option because it results in fewer re-renders. +``, similar to ``, is a looping component that allows you to render elements based on the contents of an array or object. However, when the order and length of the list remain _stable_, but the content may change frequently, `` is a better option because it results in fewer re-renders. ```jsx import { Index } from "solid-js" @@ -67,12 +62,10 @@ import { Index } from "solid-js" Similar to the `` component, `` accepts a single property named `each`, which is where you pass the structure you wish to loop over. -Where the `index` is a signal with ``, it remains fixed with ``. -This is because `` is more concerned with the **index** of the elements in the array. -Because of this, the `item` is a signal, allowing the _content_ at each index to change without a re-render while the index remains fixed. +Where the `index` is a signal with ``, it remains fixed with ``. This is because `` is more concerned with the **index** of the elements in the array. Because of this, the `item` is a signal, allowing the _content_ at each index to change without a re-render while the index remains fixed. ```jsx -import { Index } from "solid-js" +import { Index } from "solid-js"; {(item, index) => ( @@ -80,33 +73,28 @@ import { Index } from "solid-js" {item().name} - {item().completed}
  • )} -
    +
    ; ``` ## `` vs `` -`` is designed to be used when the *order* and *length* of the list may change frequently. -When the list value changes in ``, the entire list is re-rendered. -However, if the array undergoes a change, such as an element shifting position, `` will manage this by simply **moving** the corresponding DOM node and **updating** the index. +`` is designed to be used when the _order_ and _length_ of the list may change frequently. When the list value changes in ``, the entire list is re-rendered. However, if the array undergoes a change, such as an element shifting position, `` will manage this by simply **moving** the corresponding DOM node and **updating** the index. -``, however, is designed to be used when the **order** and **length** of the list remain _stable_, but the content may change frequently. -When the list value changes in ``, only the content at the specified index is updated. +``, however, is designed to be used when the **order** and **length** of the list remain _stable_, but the content may change frequently. When the list value changes in ``, only the content at the specified index is updated. ### When to use `` -In cases where signals, nested loops, or dynamic lists are not required, `` is the best option. -For example, when creating a list of static elements, such as a list of links, `` is the best option to use. -This is because it will only modify the indexes of the elements in the list, rather than re-rendering the entire list. +In cases where signals, nested loops, or dynamic lists are not required, `` is the best option. For example, when creating a list of static elements, such as a list of links, `` is the best option to use. This is because it will only modify the indexes of the elements in the list, rather than re-rendering the entire list. ```jsx -import { createSignal, For } from "solid-js" +import { createSignal, For } from "solid-js"; function StringList() { - const [items, setItems] = createSignal(["Item 1", "Item 2", "Item 3"]) + const [items, setItems] = createSignal(["Item 1", "Item 2", "Item 3"]); return (
      - { // add the new item to the list @@ -114,26 +102,24 @@ function StringList() { /> {(item, index) => ( -
    • +
    • {item} - {index()}
    • )}
    - ) + ); } ``` -If you are working with signals, [JavaScript primitives like strings and numbers](https://developer.mozilla.org/en-US/docs/Glossary/Primitive) or input fields, `` is the better option to use. -If you were using ``, the entire list would be re-rendered when a value changes, even if the length of the list remains unchanged. -``, instead, will update the content at the specified index, while the rest of the list remains unchanged. +If you are working with signals, [JavaScript primitives like strings and numbers](https://developer.mozilla.org/en-US/docs/Glossary/Primitive) or input fields, `` is the better option to use. If you were using ``, the entire list would be re-rendered when a value changes, even if the length of the list remains unchanged. ``, instead, will update the content at the specified index, while the rest of the list remains unchanged. ```jsx -import { createSignal, Index } from "solid-js" +import { createSignal, Index } from "solid-js"; function FormList() { - const [inputs, setInputs] = createSignal(['input1','input2','input3']) - return( + const [inputs, setInputs] = createSignal(["input1", "input2", "input3"]); + return (
    {(input, index) => ( @@ -147,6 +133,6 @@ function FormList() { )}
    - ) + ); } -``` \ No newline at end of file +``` diff --git a/src/routes/concepts/control-flow/portal.mdx b/src/routes/concepts/control-flow/portal.mdx index fe20f754fc..414487a1f7 100644 --- a/src/routes/concepts/control-flow/portal.mdx +++ b/src/routes/concepts/control-flow/portal.mdx @@ -3,15 +3,14 @@ title: "Portal" order: 3 --- -When an element requires rendering outside of the usual document flow, challenges related to stacking contents and z-index can interfere with the desired intention or look of an application. -`` helps with this by putting elements in a different place in the document, bringing an element into the document flow so they can render as expected. +When an element requires rendering outside of the usual document flow, challenges related to stacking contents and z-index can interfere with the desired intention or look of an application. `` helps with this by putting elements in a different place in the document, bringing an element into the document flow so they can render as expected. ```jsx -import { Portal } from "solid-js/web" +import { Portal } from "solid-js/web"; - +; ``` The content nested within `` is rendered and positioned by default at the end of the document body. @@ -21,43 +20,40 @@ The content nested within `` is rendered and positioned by default at th preview="https://app.eraser.io/workspace/maDvFw5OryuPJOwSLyK9/preview?elements=IEPk0uiH2OC365hkpKf3wA&type=embed" /> -This can be changed by passing a `mount` prop to ``. -The `mount` prop accepts a [DOM node](https://developer.mozilla.org/en-US/docs/Web/API/Node), which will be used as the mount point for the portal content. +This can be changed by passing a `mount` prop to ``. The `mount` prop accepts a [DOM node](https://developer.mozilla.org/en-US/docs/Web/API/Node), which will be used as the mount point for the portal content. ```jsx -import { Portal } from "solid-js/web" +import { Portal } from "solid-js/web"; - +; ``` +Using `` can be particularly useful in cases where elements, like information popups, might be clipped or obscured due to the overflow settings of their parent elements. By putting the element outside of the parent element, it is no longer bound by the overflow settings of its parent. This creates a more accessible experience for users, as the content is no longer obscured. -Using `` can be particularly useful in cases where elements, like information popups, might be clipped or obscured due to the overflow settings of their parent elements. -By putting the element outside of the parent element, it is no longer bound by the overflow settings of its parent. -This creates a more accessible experience for users, as the content is no longer obscured. +:::info +`` will render wrapped unless specifically targeting `document.head`. -:::info - `` will render wrapped unless specifically targeting `document.head`. - - This is so events propagate through the Portal according to the component hierarchy instead of the elements hierarchy. +This is so events propagate through the Portal according to the component hierarchy instead of the elements hierarchy. By default, children will wrap in a `
    `. If you portal into an SVG, then the `isSVG` prop must be used to avoid wrapping the children in a `
    ` and wrap in a `` instead. ```jsx -import { Portal } from "solid-js/web" +import { Portal } from "solid-js/web"; function Rect() { - return ( - - - - ); + return ( + + + + ); } function SVG() { - return ; + return ; } ``` + ::: diff --git a/src/routes/concepts/derived-values/derived-signals.mdx b/src/routes/concepts/derived-values/derived-signals.mdx index e0086fb456..6a6c12abdd 100644 --- a/src/routes/concepts/derived-values/derived-signals.mdx +++ b/src/routes/concepts/derived-values/derived-signals.mdx @@ -5,26 +5,20 @@ order: 1 Derived signals are functions that rely on one or more [signals](/concepts/signals) to produce a value. -These functions are not executed immediately, but instead are only called when the values they rely on are changed. -When the underlying signal is changed, the function will be called again to produce a new value. +These functions are not executed immediately, but instead are only called when the values they rely on are changed. When the underlying signal is changed, the function will be called again to produce a new value. ```js const double = () => count() * 2; ``` -In the above example, the `double` function relies on the `count` signal to produce a value. -When the `count` signal is changed, the `double` function will be called again to produce a new value. +In the above example, the `double` function relies on the `count` signal to produce a value. When the `count` signal is changed, the `double` function will be called again to produce a new value. -Similarly you can create a derived signal that relies on a store value because stores use signals under the hood. -To learn more about how stores work, [you can visit the stores section](/concepts/stores). +Similarly you can create a derived signal that relies on a store value because stores use signals under the hood. To learn more about how stores work, [you can visit the stores section](/concepts/stores). ```js -const fullName = () => store.firstName + ' ' + store.lastName; +const fullName = () => store.firstName + " " + store.lastName; ``` -These dependent functions gain reactivity from the signal they access, ensuring that changes in the underlying data propagate throughout your application. -It is important to note that these functions do not store a value themselves; instead, they can update any effects or components that depend on them. -If included within a component's body, these derived signals will trigger an update when necessary. +These dependent functions gain reactivity from the signal they access, ensuring that changes in the underlying data propagate throughout your application. It is important to note that these functions do not store a value themselves; instead, they can update any effects or components that depend on them. If included within a component's body, these derived signals will trigger an update when necessary. -While you can create derived values in this manner, Solid created the [`createMemo`](/reference/basic-reactivity/create-memo) primitive. -To dive deeper into how memos work, [check out the memos section](/concepts/derived-values/memos). +While you can create derived values in this manner, Solid created the [`createMemo`](/reference/basic-reactivity/create-memo) primitive. To dive deeper into how memos work, [check out the memos section](/concepts/derived-values/memos). diff --git a/src/routes/concepts/derived-values/memos.mdx b/src/routes/concepts/derived-values/memos.mdx index 1c80f75ea7..b38b4c7e77 100644 --- a/src/routes/concepts/derived-values/memos.mdx +++ b/src/routes/concepts/derived-values/memos.mdx @@ -3,35 +3,28 @@ title: Memos order: 2 --- -Memos are a type of reactive value that can be used to memoize derived state or expensive computations. -They are similar to [derived signals](/concepts/derived-values/derived-signals) in that they are reactive values that automatically re-evaluate when their dependencies change. -However, unlike derived signals, memos are optimized to execute only once for each change in their dependencies. +Memos are a type of reactive value that can be used to memoize derived state or expensive computations. They are similar to [derived signals](/concepts/derived-values/derived-signals) in that they are reactive values that automatically re-evaluate when their dependencies change. However, unlike derived signals, memos are optimized to execute only once for each change in their dependencies. -Memos expose a _read-only_ reactive value (like a [signal](/concepts/signals)) and track changes in their dependencies (similar to an [effect](/concepts/effects)). -This makes them useful for caching the results of expensive or frequently accessed computations. -By doing this, memos minimize unnecessary work within an application by retaining the results of a computation until its dependencies change. +Memos expose a _read-only_ reactive value (like a [signal](/concepts/signals)) and track changes in their dependencies (similar to an [effect](/concepts/effects)). This makes them useful for caching the results of expensive or frequently accessed computations. By doing this, memos minimize unnecessary work within an application by retaining the results of a computation until its dependencies change. ## Using memos -A memo is created using the `createMemo` function. -Within this function, you can define the derived value or computations you wish to memoize. -When called, `createMemo` will return a **getter** function that reads the current value of the memo: +A memo is created using the `createMemo` function. Within this function, you can define the derived value or computations you wish to memoize. When called, `createMemo` will return a **getter** function that reads the current value of the memo: ```jsx -import { createMemo, createSignal } from "solid-js" +import { createMemo, createSignal } from "solid-js"; -const [count, setCount] = createSignal(0) +const [count, setCount] = createSignal(0); -const isEven = createMemo(() => count() % 2 === 0) +const isEven = createMemo(() => count() % 2 === 0); -console.log(isEven()) // true +console.log(isEven()); // true -setCount(3) -console.log(isEven()) // false +setCount(3); +console.log(isEven()); // false ``` -While memos look similar to effects, they are different in that they _return a value_. -This value is the result of the computation or derived state that you wish to memoize. +While memos look similar to effects, they are different in that they _return a value_. This value is the result of the computation or derived state that you wish to memoize. ### Advantages of using memos @@ -40,8 +33,7 @@ While you can use a [derived signal](/concepts/derived-values/derived-signals) t - Memos are optimized to execute only once for each change in their dependencies. - When working with expensive computations, memos can be used to cache the results so they are not recomputed unnecessarily. - A memo will only recompute when its dependencies change, and will not trigger subsequent updates (as determined by [`===` or strict equality](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Strict_equality)) if its dependencies change but its value remains the same. -- Any signal or memo accessed within a memo's function is **tracked**. - This means that the memo will re-evaluate automatically when these dependencies change. +- Any signal or memo accessed within a memo's function is **tracked**. This means that the memo will re-evaluate automatically when these dependencies change. count() % 2 === 0) // example of a pure function +const [count, setCount] = createSignal(0); +const isEven = createMemo(() => count() % 2 === 0); // example of a pure function ``` -A pure function is one that does not cause any side effects. -This means that the function's output should solely depend on its inputs. +A pure function is one that does not cause any side effects. This means that the function's output should solely depend on its inputs. -When you introduce side effects into a memo, it can complicate the reactivity chain. -This can lead to unexpected behavior, such as infinite loops, that lead your application to crash. +When you introduce side effects into a memo, it can complicate the reactivity chain. This can lead to unexpected behavior, such as infinite loops, that lead your application to crash. ```jsx -import { createSignal, createMemo } from "solid-js" +import { createSignal, createMemo } from "solid-js"; -const [count, setCount] = createSignal(0) -const [message, setMessage] = createSignal("") +const [count, setCount] = createSignal(0); +const [message, setMessage] = createSignal(""); const badMemo = createMemo(() => { if (count() > 10) { - setMessage("Count is too high!") // side effect + setMessage("Count is too high!"); // side effect } - return count() % 2 === 0 -}) + return count() % 2 === 0; +}); ``` -These infinite loops can be triggered when a memo has a side effect that causes its dependencies to change. -This will cause the memo to re-evaluate, which will then trigger the side effect again, and so on until the application crashes. +These infinite loops can be triggered when a memo has a side effect that causes its dependencies to change. This will cause the memo to re-evaluate, which will then trigger the side effect again, and so on until the application crashes. This can be avoided by using a [`createEffect`](/reference/basic-reactivity/create-effect) to handle the side effects instead: ```jsx -import { createSignal, createMemo, createEffect } from "solid-js" +import { createSignal, createMemo, createEffect } from "solid-js"; -const [count, setCount] = createSignal(0) -const [message, setMessage] = createSignal("") +const [count, setCount] = createSignal(0); +const [message, setMessage] = createSignal(""); -const isEven = createMemo(() => count() % 2 === 0) +const isEven = createMemo(() => count() % 2 === 0); createEffect(() => { if (count() > 10) { - setMessage("Count is too high!") + setMessage("Count is too high!"); } -}) +}); ``` Here, the `createEffect` will handle the side effects, while the `isEven` memo will remain pure. ### Keep logic in memos -Memos are optimized to execute only once for each change in their dependencies. -This means that you can remove unnecessary effects that are triggered by a memo's dependencies. +Memos are optimized to execute only once for each change in their dependencies. This means that you can remove unnecessary effects that are triggered by a memo's dependencies. -When working with derived state, memos are the recommended approach over effects. -Keeping the logic in a memo prevents unnecessary re-renders that can occur when using an effect. -Similarly, effects are better suited to handle side effects, such as DOM updates, rather than derived state. -This separation of concerns can help keep your code clean and easy to understand. +When working with derived state, memos are the recommended approach over effects. Keeping the logic in a memo prevents unnecessary re-renders that can occur when using an effect. Similarly, effects are better suited to handle side effects, such as DOM updates, rather than derived state. This separation of concerns can help keep your code clean and easy to understand. ```jsx // effect - runs whenever `count` changes createEffect(() => { if (count() > 10) { - setMessage("Count is too high!") + setMessage("Count is too high!"); } else { - setMessage("") + setMessage(""); } -}) +}); // memo - only runs when `count` changes to or from a value greater than 10 const message = createMemo(() => { if (count() > 10) { - return "Count is too high!" + return "Count is too high!"; } else { - return "" + return ""; } -}) +}); ``` diff --git a/src/routes/concepts/effects.mdx b/src/routes/concepts/effects.mdx index fe15500bdf..8e149e22e3 100644 --- a/src/routes/concepts/effects.mdx +++ b/src/routes/concepts/effects.mdx @@ -3,13 +3,11 @@ title: Effects order: 4 --- -Effects are functions that are triggered when the signals they depend on change. -They play a crucial role in managing side effects, which are actions that occur outside of the application's scope, such as DOM manipulations, data fetching, and subscriptions. +Effects are functions that are triggered when the signals they depend on change. They play a crucial role in managing side effects, which are actions that occur outside of the application's scope, such as DOM manipulations, data fetching, and subscriptions. ## Using an effect -An effect is created using the `createEffect` function. -This function takes a callback as its argument that runs when the effect is triggered. +An effect is created using the `createEffect` function. This function takes a callback as its argument that runs when the effect is triggered. ```jsx import { createEffect } from "solid-js"; @@ -21,19 +19,13 @@ createEffect(() => { }); ``` -In this example, an effect is created that logs the current value of `count` to the console. -When the value of `count` changes, the effect is triggered, causing it to run again and log the new value of `count`. +In this example, an effect is created that logs the current value of `count` to the console. When the value of `count` changes, the effect is triggered, causing it to run again and log the new value of `count`. ## Managing dependencies -Effects can be set to observe any number of dependencies. -Dependencies are what allow an effect to track changes and respond accordingly. -These can include signals, variables, props, context, or any other reactive values. -When any of these change, the effect is notified and will run again to update its state. +Effects can be set to observe any number of dependencies. Dependencies are what allow an effect to track changes and respond accordingly. These can include signals, variables, props, context, or any other reactive values. When any of these change, the effect is notified and will run again to update its state. -Upon initialization, an effect will run _once_, regardless of whether it has any dependencies. -This is useful for setting up the effect and initializing variables or subscribing to [signals](/concepts/signals). -After this run, the effect will only be triggered when any of its _dependencies_ change. +Upon initialization, an effect will run _once_, regardless of whether it has any dependencies. This is useful for setting up the effect and initializing variables or subscribing to [signals](/concepts/signals). After this run, the effect will only be triggered when any of its _dependencies_ change. ```jsx createEffect(() => { @@ -45,13 +37,11 @@ createEffect(() => { }); ``` -Solid automatically tracks the dependencies of an effect, so you do not need to manually specify them. -This improves the tracking and minimizes the chances of overlooking or incorrectly identifying dependencies. +Solid automatically tracks the dependencies of an effect, so you do not need to manually specify them. This improves the tracking and minimizes the chances of overlooking or incorrectly identifying dependencies. ## Subscribing to signals -When an effect is set to observe a signal, it creates a subscription to it. -This subscription allows the effect to track the changes in the signal's value, which causes it to observe any changes that may happen and to execute its callback accordingly. +When an effect is set to observe a signal, it creates a subscription to it. This subscription allows the effect to track the changes in the signal's value, which causes it to observe any changes that may happen and to execute its callback accordingly. ```jsx import { createSignal, createEffect } from "solid-js"; @@ -65,13 +55,9 @@ createEffect(() => { ### Managing multiple signals -Effects have the ability to observe multiple signals. -A single effect can subscribe to multiple signals, and similarly, multiple effects can keep track of a single signal. -This is useful when you need to update the UI based on multiple signals. +Effects have the ability to observe multiple signals. A single effect can subscribe to multiple signals, and similarly, multiple effects can keep track of a single signal. This is useful when you need to update the UI based on multiple signals. -When multiple signals are observed within a single effect, it will execute its callback whenever _any_ of the signals change. -The effect will run even if only one of the signals changes, not necessarily all of them. -This means that the effect will run with the latest values of all of the signals that it is observing. +When multiple signals are observed within a single effect, it will execute its callback whenever _any_ of the signals change. The effect will run even if only one of the signals changes, not necessarily all of them. This means that the effect will run with the latest values of all of the signals that it is observing. ```jsx import { createSignal, createEffect } from "solid-js"; @@ -88,15 +74,14 @@ setMessage("World"); // Output: 1, "World" ``` :::info -When a signal updates, it notifies all of its subscribers sequentially but the *order can vary*. -While effects are guaranteed to run when a signal updates, the execution might **not** be instantaneous. -This means that the order of execution of effects is *not guaranteed* and should not be relied upon. + +When a signal updates, it notifies all of its subscribers sequentially but the _order can vary_. While effects are guaranteed to run when a signal updates, the execution might **not** be instantaneous. This means that the order of execution of effects is _not guaranteed_ and should not be relied upon. + ::: ### Nested effects -When working with effects, it is possible to nest them within each other. -This allows each effect to independently track its own dependencies, without affecting the effect that it is nested within. +When working with effects, it is possible to nest them within each other. This allows each effect to independently track its own dependencies, without affecting the effect that it is nested within. ```jsx createEffect(() => { @@ -106,10 +91,7 @@ createEffect(() => { }); ``` -The order of execution is important to note. -An inner effect will _not_ affect the outer effect. -Signals that are accessed within an inner effect, will _not_ be registered as dependencies for the outer effect. -When the signal located within the inner effect changes, it will trigger only the _inner effect_ to re-run, not the outer one. +The order of execution is important to note. An inner effect will _not_ affect the outer effect. Signals that are accessed within an inner effect, will _not_ be registered as dependencies for the outer effect. When the signal located within the inner effect changes, it will trigger only the _inner effect_ to re-run, not the outer one. ```jsx import { createSignal, createEffect } from "solid-js"; @@ -123,20 +105,15 @@ createEffect(() => { }); ``` -This forces each effect to be independent of each other, which helps to avoid unexpected behaviour. -Additionally, it allows you to create effects that are only triggered when certain conditions are met. +This forces each effect to be independent of each other, which helps to avoid unexpected behaviour. Additionally, it allows you to create effects that are only triggered when certain conditions are met. ## Lifecycle functions -Effects have a lifecycle that can be managed using certain functions. -These functions allow you to control the initialization and disposal of effects to build the type of behaviour that you need. -This can include running a side effect only once, or cleaning up a task when it is no longer needed. +Effects have a lifecycle that can be managed using certain functions. These functions allow you to control the initialization and disposal of effects to build the type of behaviour that you need. This can include running a side effect only once, or cleaning up a task when it is no longer needed. ### `onMount` -In situations where you just want to run a side effect **once**, you can use the [`onMount`](/reference/lifecycle/on-mount) function. -This lifecycle function is similar to an effect, but it does not track any dependencies. -Rather, once the component has been initialized, the `onMount` callback will be executed and will not run again. +In situations where you just want to run a side effect **once**, you can use the [`onMount`](/reference/lifecycle/on-mount) function. This lifecycle function is similar to an effect, but it does not track any dependencies. Rather, once the component has been initialized, the `onMount` callback will be executed and will not run again. ```jsx import { onMount } from "solid-js"; @@ -158,14 +135,11 @@ function Component() { } ``` -`onMount` provides the assurance that the callback will only run once. -If using an effect in this situation, there is no guarantee that it will only run once, which can lead to unexpected behaviour. -This makes `onMount` useful for API calls and other side effects that only need to be run once per component instance. +`onMount` provides the assurance that the callback will only run once. If using an effect in this situation, there is no guarantee that it will only run once, which can lead to unexpected behaviour. This makes `onMount` useful for API calls and other side effects that only need to be run once per component instance. ### `onCleanup` -While `onMount` is useful for running a side effect once, [`onCleanup`](/reference/lifecycle/on-cleanup) is helpful for cleaning up a task when it is no longer needed. -`onCleanup` will run whenever the component unmounts, removing any subscriptions that the effect has. +While `onMount` is useful for running a side effect once, [`onCleanup`](/reference/lifecycle/on-cleanup) is helpful for cleaning up a task when it is no longer needed. `onCleanup` will run whenever the component unmounts, removing any subscriptions that the effect has. ```jsx import { onCleanup } from "solid-js"; @@ -185,9 +159,6 @@ function App() { } ``` -In this example, the `onCleanup` function is used to clear the interval that is set up in the effect. -To avoid the interval from running indefinitely, the `onCleanup` function is used to clear the interval once the component unmounts. +In this example, the `onCleanup` function is used to clear the interval that is set up in the effect. To avoid the interval from running indefinitely, the `onCleanup` function is used to clear the interval once the component unmounts. -`onCleanup` can be used to avoid memory leaks. -These occur when a component is unmounted, but references to it still exist and, as a result, could still be running in the background. -Using `onCleanup` to remove any subscriptions or references to the component can help to avoid this issue. +`onCleanup` can be used to avoid memory leaks. These occur when a component is unmounted, but references to it still exist and, as a result, could still be running in the background. Using `onCleanup` to remove any subscriptions or references to the component can help to avoid this issue. diff --git a/src/routes/concepts/intro-to-reactivity.mdx b/src/routes/concepts/intro-to-reactivity.mdx index fa3e35fc28..83e6e2365e 100644 --- a/src/routes/concepts/intro-to-reactivity.mdx +++ b/src/routes/concepts/intro-to-reactivity.mdx @@ -5,9 +5,7 @@ order: 1 **Note**: While this guide is useful for understanding reactive systems, it does use some Solid-specific terminology. -Reactivity powers the interactivity in Solid applications. -This programming paradigm refers to a system's ability to respond to changes in data or state automatically. -With Solid, reactivity is the basis of its design, ensuring application's stay up-to-date with its underlying data. +Reactivity powers the interactivity in Solid applications. This programming paradigm refers to a system's ability to respond to changes in data or state automatically. With Solid, reactivity is the basis of its design, ensuring application's stay up-to-date with its underlying data. ## Importance of reactivity @@ -32,8 +30,7 @@ function Counter() { } ``` -This `Counter` function sets up a button that, when clicked, calls the `increment` function to increase the `count` by one. -This updates just the number displayed _without_ refreshing the entire component. +This `Counter` function sets up a button that, when clicked, calls the `increment` function to increase the `count` by one. This updates just the number displayed _without_ refreshing the entire component. -- **Getter**: A function responsible for accessing the current value of the signal. - You call a getter to access the data stored in a signal within a component. +- **Getter**: A function responsible for accessing the current value of the signal. You call a getter to access the data stored in a signal within a component. -- **Setter**: - The function used to modify a signal's value. - To trigger reactive updates across an application, you call a setter to update the value of a signal. +- **Setter**: The function used to modify a signal's value. To trigger reactive updates across an application, you call a setter to update the value of a signal. ```js console.log(count()); // `count()` is a getter that returns the current value of `count`, which is `0`. @@ -75,17 +67,12 @@ console.log(count()); // the updated value of `count` is now `1`. ### Subscribers -Subscribers are the other core element in reactive systems. -They are responsible for tracking changes in signals and updating the system accordingly. -They are automated responders that keep the system up-to-date with the latest data changes. +Subscribers are the other core element in reactive systems. They are responsible for tracking changes in signals and updating the system accordingly. They are automated responders that keep the system up-to-date with the latest data changes. Subscribers work based on two main actions: -- **Observation**: At their core, subscribers observe signals. - This keeps the subscriber primed to pick up on any changes to the signal they are tracking. -- **Response**: When a signal changes, the subscriber is notified. - This triggers the subscriber to respond to the change in the signal. - This can involve tasks like updating the UI or calling external functions. +- **Observation**: At their core, subscribers observe signals. This keeps the subscriber primed to pick up on any changes to the signal they are tracking. +- **Response**: When a signal changes, the subscriber is notified. This triggers the subscriber to respond to the change in the signal. This can involve tasks like updating the UI or calling external functions. ```jsx function Counter() { @@ -101,19 +88,15 @@ function Counter() { ## State management -State management is the process of managing the state of an application. -This involves storing and updating data, as well as responding to the changes in it. +State management is the process of managing the state of an application. This involves storing and updating data, as well as responding to the changes in it. -With Solid, state management is handled through signals and subscribers. -Signals are used to store and update data, while subscribers are used to respond to changes in the data. +With Solid, state management is handled through signals and subscribers. Signals are used to store and update data, while subscribers are used to respond to changes in the data. ### Tracking changes -Tracking changes involves monitoring any updates to the data and responding accordingly. -This is done through the use of subscribers. +Tracking changes involves monitoring any updates to the data and responding accordingly. This is done through the use of subscribers. -When a signal is not accessed within a tracking scope, an update to the signal will not trigger an update. -This happens because if a signal is not being tracked, it is not able to notify any subscribers of the change. +When a signal is not accessed within a tracking scope, an update to the signal will not trigger an update. This happens because if a signal is not being tracked, it is not able to notify any subscribers of the change. ```jsx const [count, setCount] = createSignal(0); @@ -127,9 +110,7 @@ setCount(1); // `count` is not being tracked, so the console log will not update when `count` changes. ``` -Since initialization is a **one-time event**, if a signal is accessed _outside of a tracking scope_, it will not be tracked. -To track a signal, it must be accessed within the scope of a subscriber. -Reactive primitives, such as [effects](/concepts/effects), can be used to create subscribers. +Since initialization is a **one-time event**, if a signal is accessed _outside of a tracking scope_, it will not be tracked. To track a signal, it must be accessed within the scope of a subscriber. Reactive primitives, such as [effects](/concepts/effects), can be used to create subscribers. ```jsx const [count, setCount] = createSignal(0); @@ -146,8 +127,7 @@ setCount(1); ### Updating the UI -The UI of a Solid application is built using [JSX](/concepts/understanding-jsx). -JSX creates a tracking scope behind the scenes, which allows signals to be tracked within the return statement of a component. +The UI of a Solid application is built using [JSX](/concepts/understanding-jsx). JSX creates a tracking scope behind the scenes, which allows signals to be tracked within the return statement of a component. ```jsx function Counter() { @@ -166,8 +146,7 @@ function Counter() { } ``` -Components, much like other functions, will only run _once_. -This means that if a signal is accessed outside of the return statement, it will run on initialization, but any updates to the signal will not trigger an update. +Components, much like other functions, will only run _once_. This means that if a signal is accessed outside of the return statement, it will run on initialization, but any updates to the signal will not trigger an update. ```jsx function Counter() { @@ -182,7 +161,8 @@ function Counter() { return (
    - Count: {count()}{/* ✅ will update whenever `count()` changes. */} + Count: {count()} + {/* ✅ will update whenever `count()` changes. */} @@ -195,18 +175,13 @@ To learn more about managing state in Solid, visit the [guide on state managemen ## Synchronous vs. asynchronous -Reactive systems are designed to respond to changes in data. -These responses can be immediate or delayed, depending on the nature of the system. -Often, the choice between these two depends on the requirements of the application and the nature of the tasks involved. +Reactive systems are designed to respond to changes in data. These responses can be immediate or delayed, depending on the nature of the system. Often, the choice between these two depends on the requirements of the application and the nature of the tasks involved. ### Synchronous reactivity -[Synchronous](https://developer.mozilla.org/en-US/docs/Glossary/Synchronous) reactivity is Solid's default reactivity mode, where a system responds to changes in a direct and linear fashion. -When a signal changes, any corresponding subscribers are immediately updated in an ordered manner. +[Synchronous](https://developer.mozilla.org/en-US/docs/Glossary/Synchronous) reactivity is Solid's default reactivity mode, where a system responds to changes in a direct and linear fashion. When a signal changes, any corresponding subscribers are immediately updated in an ordered manner. -With synchronous reactivity, the system is able to respond to changes in a predictable manner. -This is useful in scenarios where the order of updates is important. -For example, if a subscriber depends on another signal, it is important that the subscriber is updated after the signal it depends on. +With synchronous reactivity, the system is able to respond to changes in a predictable manner. This is useful in scenarios where the order of updates is important. For example, if a subscriber depends on another signal, it is important that the subscriber is updated after the signal it depends on. ```jsx const [count, setCount] = createSignal(0); @@ -217,32 +192,23 @@ createEffect(() => { }); ``` -In this example, the `double` signal will always be updated after `count` due to synchronous reactivity. -This ensures that `double` is always up-to-date with the latest value of `count`. +In this example, the `double` signal will always be updated after `count` due to synchronous reactivity. This ensures that `double` is always up-to-date with the latest value of `count`. ### Asynchronous reactivity -[Asynchronous](https://developer.mozilla.org/en-US/docs/Glossary/Asynchronous) reactivity is when a system responds to changes in a delayed or non-linear fashion. -When a signal changes, the corresponding subscribers are not immediately updated. -Instead, the system waits for a specific event or task to complete before updating the subscribers. +[Asynchronous](https://developer.mozilla.org/en-US/docs/Glossary/Asynchronous) reactivity is when a system responds to changes in a delayed or non-linear fashion. When a signal changes, the corresponding subscribers are not immediately updated. Instead, the system waits for a specific event or task to complete before updating the subscribers. -This is important in scenarios where subscribers depend on multiple signals. -In these cases, updating one signal before another could result in data inconsistency. -For example, if a subscriber depends on two signals, it is important that the subscriber is updated after both signals have been updated. -Rather, the system waits for both signals to be updated before updating the subscriber. +This is important in scenarios where subscribers depend on multiple signals. In these cases, updating one signal before another could result in data inconsistency. For example, if a subscriber depends on two signals, it is important that the subscriber is updated after both signals have been updated. Rather, the system waits for both signals to be updated before updating the subscriber. -**Note:** When asynchronous reactivity is present, it is important to ensure that the system is able to handle the delay in updates. -[`batch`](/reference/reactive-utilities/batch) can be used to delay an update so the subscriber runs after each signal has been updated. +**Note:** When asynchronous reactivity is present, it is important to ensure that the system is able to handle the delay in updates. [`batch`](/reference/reactive-utilities/batch) can be used to delay an update so the subscriber runs after each signal has been updated. ## Key concepts -- Signals are the core elements of a reactive system. - They are responsible for storing and managing data. +- Signals are the core elements of a reactive system. They are responsible for storing and managing data. - Signals are both readable and writeable because of getters and setters. - Subscribers are automated responders that track changes in signals and update the system accordingly. - Signals and subscribers work together to ensure that the system is kept up-to-date with the latest data changes. -- A reactive system is built on the principles of data-driven reactivity. - This means that the system's reactivity is driven by the data it is built on. +- A reactive system is built on the principles of data-driven reactivity. This means that the system's reactivity is driven by the data it is built on. - Reactive systems can be synchronous or asynchronous. If you want to dive deeper, visit the [guide on fine-grained reactivity](/advanced-concepts/fine-grained-reactivity). diff --git a/src/routes/concepts/refs.mdx b/src/routes/concepts/refs.mdx index be36527bb4..7947ffdcc0 100644 --- a/src/routes/concepts/refs.mdx +++ b/src/routes/concepts/refs.mdx @@ -2,17 +2,13 @@ title: Refs --- -Refs, or references, are a special attribute that can be attached to any element, and are used to reference a DOM element or a component instance. -They are particularly useful when you need to access the DOM nodes directly or invoke methods on a component. +Refs, or references, are a special attribute that can be attached to any element, and are used to reference a DOM element or a component instance. They are particularly useful when you need to access the DOM nodes directly or invoke methods on a component. ## Accessing DOM elements -One way of accessing DOM elements is through [element selectors](https://developer.mozilla.org/en-US/docs/Web/API/Document_object_model/Locating_DOM_elements_using_selectors) such as [`document.querySelector`](https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelector) or [`document.getElementById`](https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementById). -Since elements in Solid can be added or removed from the DOM based on state, you need to wait until the element is attached to the DOM before accessing it. -This can be done by using [`onMount`](/reference/lifecycle/on-mount) to wait until the element is attached to the DOM before accessing it: +One way of accessing DOM elements is through [element selectors](https://developer.mozilla.org/en-US/docs/Web/API/Document_object_model/Locating_DOM_elements_using_selectors) such as [`document.querySelector`](https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelector) or [`document.getElementById`](https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementById). Since elements in Solid can be added or removed from the DOM based on state, you need to wait until the element is attached to the DOM before accessing it. This can be done by using [`onMount`](/reference/lifecycle/on-mount) to wait until the element is attached to the DOM before accessing it: -Accessing DOM elements through element selectors is not recommended for this reason. -As elements with the same selectors are added and removed from the DOM, the first element that matches the selector will be returned, which may not be the element you want. +Accessing DOM elements through element selectors is not recommended for this reason. As elements with the same selectors are added and removed from the DOM, the first element that matches the selector will be returned, which may not be the element you want. ## JSX as a value @@ -20,17 +16,15 @@ JSX can be used as a value and assigned to a variable when looking to directly a ```tsx function Component() { - const myElement =

    My Element

    + const myElement =

    My Element

    ; - return
    {myElement}
    + return
    {myElement}
    ; } ``` -This lets you create and access DOM elements similar to [`document.createElement`](https://developer.mozilla.org/en-US/docs/Web/API/Document/createElement) but without having to wait until it is attached to the DOM. -It can be used multiple times without having to worry about duplicate selectors. +This lets you create and access DOM elements similar to [`document.createElement`](https://developer.mozilla.org/en-US/docs/Web/API/Document/createElement) but without having to wait until it is attached to the DOM. It can be used multiple times without having to worry about duplicate selectors. -The downside of this approach is that it separates the element and any child elements from the rest of the JSX structure. -This makes the component's JSX structure more difficult to read and understand. +The downside of this approach is that it separates the element and any child elements from the rest of the JSX structure. This makes the component's JSX structure more difficult to read and understand. ## Refs in Solid @@ -46,40 +40,40 @@ function Component() {

    My Element

    - ) + ); } ``` -These assignments occur at _creation time_ prior to the element being added to the DOM. -If access to an element is needed before it is added to the DOM, you can use the callback form of `ref`: +These assignments occur at _creation time_ prior to the element being added to the DOM. If access to an element is needed before it is added to the DOM, you can use the callback form of `ref`: ```jsx -

    { - myElement = el // el is created but not yet added to the DOM - }}> +

    { + myElement = el; // el is created but not yet added to the DOM + }} +> My Element

    ``` :::info -In TypeScript, you must use a definitive assignment assertion. -Since Solid takes care of assigning the variable when the component is rendered, this signals to TypeScript that the variable will be assigned, even if it can't -confirm it. + +In TypeScript, you must use a definitive assignment assertion. Since Solid takes care of assigning the variable when the component is rendered, this signals to TypeScript that the variable will be assigned, even if it can't confirm it. ```tsx let myElement!: HTMLDivElement; ``` + ::: ### Signals as refs -[Signals](/concepts/signals) can also be used as refs. -This is useful when you want to access the element directly, but the element may not exist when the component is first rendered, or may be removed from the DOM at some point. +[Signals](/concepts/signals) can also be used as refs. This is useful when you want to access the element directly, but the element may not exist when the component is first rendered, or may be removed from the DOM at some point. ```jsx function App() { - const [show, setShow] = createSignal(false) - const [element, setElement] = createSignal() + const [show, setShow] = createSignal(false); + const [element, setElement] = createSignal(); return (
    @@ -89,46 +83,41 @@ function App() {

    This is the ref element

    - ) + ); } ``` -In this example, the paragraph element is only rendered when the `show` signal is `true`. -When the component initializes, the paragraph element does not exist, so the `element` variable is not assigned. -Once the `show` signal is set to `true`, the paragraph element is rendered, and the `element` variable is assigned to the paragraph element. +In this example, the paragraph element is only rendered when the `show` signal is `true`. When the component initializes, the paragraph element does not exist, so the `element` variable is not assigned. Once the `show` signal is set to `true`, the paragraph element is rendered, and the `element` variable is assigned to the paragraph element. You can see a detailed view of the ref update lifecycle in this [Solid playground example](https://playground.solidjs.com/anonymous/22a1abfa-a0f5-44a6-bbe6-40387cf63b95). ## Forwarding refs -Forwarding refs is a technique that allows you to pass a ref from a parent component to a child component. -This is useful when you want to access the DOM element of a child component from the parent component. +Forwarding refs is a technique that allows you to pass a ref from a parent component to a child component. This is useful when you want to access the DOM element of a child component from the parent component. To forward a ref, you need to pass the ref to the child component, and then assign the ref to the child component's element. -When a child component receives a `ref` attribute from its parent, the `ref` is passed as a callback function. -This is regardless of whether the parent passed it as a simple assignment or a callback. +When a child component receives a `ref` attribute from its parent, the `ref` is passed as a callback function. This is regardless of whether the parent passed it as a simple assignment or a callback. -Once the child component receives the `ref`, it can be assigned to the element that the child component wants to expose through the `ref` attribute. -To access the `ref` in the child component, it is passed as a prop: +Once the child component receives the `ref`, it can be assigned to the element that the child component wants to expose through the `ref` attribute. To access the `ref` in the child component, it is passed as a prop: ```tsx // Parent component -import { Canvas } from "./Canvas.jsx" +import { Canvas } from "./Canvas.jsx"; function ParentComponent() { - let canvasRef + let canvasRef; const animateCanvas = () => { // Manipulate the canvas using canvasRef... - } + }; return (
    - ) + ); } // Child component @@ -137,18 +126,15 @@ function Canvas(props) {
    {/* Assign the ref to the canvas element */}
    - ) + ); } ``` -In this example, the `canvas` element is directly assigned the `ref` attribute through the `props.ref` variable. -This forwards the reference to the parent component, giving it direct access to the `canvas` element. +In this example, the `canvas` element is directly assigned the `ref` attribute through the `props.ref` variable. This forwards the reference to the parent component, giving it direct access to the `canvas` element. ## Directives -Directives allow the attachment of reusable behaviours to DOM elements. -The [`use:`](/reference/jsx-attributes/use) prefix is used to denote these custom directives. -Unlike props or attributes, directives operate at a lower level through providing fine-grained control over the elements they are attached to. +Directives allow the attachment of reusable behaviours to DOM elements. The [`use:`](/reference/jsx-attributes/use) prefix is used to denote these custom directives. Unlike props or attributes, directives operate at a lower level through providing fine-grained control over the elements they are attached to. Directives are like callback refs but they enable two extra features: @@ -158,15 +144,13 @@ Directives are like callback refs but they enable two extra features: A directive is essentially a function with a specific signature: ```typescript -function directive(element: Element, accessor: () => any): void - +function directive(element: Element, accessor: () => any): void; ``` - `element`: The DOM element that the directive is applied to. - `accessor`: A function that gives access to the value(s) passed to the directive. -The directive functions are called at render time, but are called before the element is added to the DOM. -Due to this order, elements are fully primed with their attributes, properties, or event listeners, therefore minimizing unexpected behaviors or premature interactions. +The directive functions are called at render time, but are called before the element is added to the DOM. Due to this order, elements are fully primed with their attributes, properties, or event listeners, therefore minimizing unexpected behaviors or premature interactions. Within directives, you're able to perform a variety of tasks, including: diff --git a/src/routes/concepts/signals.mdx b/src/routes/concepts/signals.mdx index d4558fe66b..8a0dd756b6 100644 --- a/src/routes/concepts/signals.mdx +++ b/src/routes/concepts/signals.mdx @@ -3,16 +3,13 @@ title: Signals order: 2 --- -Signals are the primary means of [managing state](/concepts/intro-to-reactivity#state-management) in your Solid application. -They provide a way to store and update values, and are the foundation of [reactivity](/concepts/intro-to-reactivity) in Solid. +Signals are the primary means of [managing state](/concepts/intro-to-reactivity#state-management) in your Solid application. They provide a way to store and update values, and are the foundation of [reactivity](/concepts/intro-to-reactivity) in Solid. -Signals can be used to represent any kind of state in your application, such as the current user, the current page, or the current theme. -This can be any value, including primitive values such as strings and numbers, or complex values such as objects and arrays. +Signals can be used to represent any kind of state in your application, such as the current user, the current page, or the current theme. This can be any value, including primitive values such as strings and numbers, or complex values such as objects and arrays. ## Creating a signal -You can create a signal by calling the [`createSignal`](/reference/basic-reactivity/create-signal) function, which is imported from `solid-js`. -This function takes an initial value as an argument, and returns a pair of functions: a **getter** function, and a **setter** function. +You can create a signal by calling the [`createSignal`](/reference/basic-reactivity/create-signal) function, which is imported from `solid-js`. This function takes an initial value as an argument, and returns a pair of functions: a **getter** function, and a **setter** function. ```jsx import { createSignal } from "solid-js"; @@ -21,18 +18,17 @@ const [count, setCount] = createSignal(0); // ^ getter ^ setter ``` - :::info - The syntax using `[` and `]` is called [array destructuring](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment). +:::info + +The syntax using `[` and `]` is called [array destructuring](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment). -This lets you extract values from the array. -In the context of `createSignal`, the first value is the getter function, and the second value is the setter function. +This lets you extract values from the array. In the context of `createSignal`, the first value is the getter function, and the second value is the setter function. ::: ## Accessing values -The getter function returned by `createSignal` is used to access the value of the signal. -You call this function with no arguments to get the current value of the signal: +The getter function returned by `createSignal` is used to access the value of the signal. You call this function with no arguments to get the current value of the signal: ```jsx console.log(count()); // output: 0 @@ -40,8 +36,7 @@ console.log(count()); // output: 0 ## Updating values -The setter function returned by `createSignal` is used to update the value of the signal. -This function takes an argument that represents the new value of the signal: +The setter function returned by `createSignal` is used to update the value of the signal. This function takes an argument that represents the new value of the signal: ```jsx setCount(count() + 1); @@ -59,9 +54,7 @@ console.log(count()); // output: 1 ## Reactivity -Signals are reactive, which means that they automatically update when their value changes. -When a signal is called within a [tracking scope](/concepts/intro-to-reactivity#tracking-changes), the signal adds the dependency to a list of subscribers. -Once a signal's value changes, it notifies all of its dependencies of the change so they can re-evaluate their values and update accordingly. +Signals are reactive, which means that they automatically update when their value changes. When a signal is called within a [tracking scope](/concepts/intro-to-reactivity#tracking-changes), the signal adds the dependency to a list of subscribers. Once a signal's value changes, it notifies all of its dependencies of the change so they can re-evaluate their values and update accordingly. ```jsx function Counter() { @@ -80,10 +73,10 @@ function Counter() { ``` :::info -A tracking scope can be created by [`createEffect`](/reference/basic-reactivity/create-effect) or [`createMemo`](/reference/basic-reactivity/create-memo), which are other Solid primitives. -Both functions subscribe to the signals accessed within them, establishing a dependency relationship. -Once this relationship is established, the function is notified whenever the signal changes. +A tracking scope can be created by [`createEffect`](/reference/basic-reactivity/create-effect) or [`createMemo`](/reference/basic-reactivity/create-memo), which are other Solid primitives. + +Both functions subscribe to the signals accessed within them, establishing a dependency relationship. Once this relationship is established, the function is notified whenever the signal changes. ::: diff --git a/src/routes/concepts/stores.mdx b/src/routes/concepts/stores.mdx index 20ada72ab5..277a690f01 100644 --- a/src/routes/concepts/stores.mdx +++ b/src/routes/concepts/stores.mdx @@ -3,19 +3,16 @@ title: Stores order: 6 --- -Similar to [signals](/concepts/signals), stores are a state management primitive. -However, while signals manage a single piece of state, stores create a centralized location to reduce code redundancy. -Within Solid, these stores can spawn a collection of reactive signals, each corresponding to a particular property which can be useful when working with complex state. +Similar to [signals](/concepts/signals), stores are a state management primitive. However, while signals manage a single piece of state, stores create a centralized location to reduce code redundancy. Within Solid, these stores can spawn a collection of reactive signals, each corresponding to a particular property which can be useful when working with complex state. ## Creating a store Stores can manage many data types, including: objects, arrays, strings, and numbers. -Using JavaScript's [proxy](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy) mechanism, reactivity extends beyond just the top-level objects or arrays. -With stores, you can now target nested properties and elements within these structures to create a dynamic tree of reactive data. +Using JavaScript's [proxy](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy) mechanism, reactivity extends beyond just the top-level objects or arrays. With stores, you can now target nested properties and elements within these structures to create a dynamic tree of reactive data. ```jsx -import { createStore } from "solid-js/store" +import { createStore } from "solid-js/store"; // Initialize store const [store, setStore] = createStore({ @@ -40,7 +37,7 @@ const [store, setStore] = createStore({ loggedIn: true, }, ], -}) +}); ``` ## Accessing store values @@ -48,16 +45,14 @@ const [store, setStore] = createStore({ Store properties can be accessed directly from the state proxy through directly referencing the targeted property: ```jsx -console.log(store.userCount) // Outputs: 3 +console.log(store.userCount); // Outputs: 3 ``` -Accessing stores within a tracking scope follows a similar pattern to signals. -While signals are created using the [`createSignal`](/reference/basic-reactivity/create-signal) function and require calling the signal function to access their values, store values can be directly accessed without a function call. -This provides access to the store's value directly within a tracking scope: +Accessing stores within a tracking scope follows a similar pattern to signals. While signals are created using the [`createSignal`](/reference/basic-reactivity/create-signal) function and require calling the signal function to access their values, store values can be directly accessed without a function call. This provides access to the store's value directly within a tracking scope: ```jsx const App = () => { - const [mySignal, setMySignal] = createSignal("This is a signal.") + const [mySignal, setMySignal] = createSignal("This is a signal."); const [store, setStore] = createStore({ userCount: 3, users: [ @@ -80,24 +75,22 @@ const App = () => { loggedIn: true, }, ], - }) + }); return (

    Hello, {store.users[0].username}

    {/* Accessing a store value */} {mySignal()} {/* Accessing a signal */}
    - ) -} + ); +}; ``` -When a store is created, it starts with the initial state but does _not_ immediately set up signals to track changes. -These signals are created **lazily**, meaning they are only formed when accessed within a reactive context. +When a store is created, it starts with the initial state but does _not_ immediately set up signals to track changes. These signals are created **lazily**, meaning they are only formed when accessed within a reactive context. Once data is used within a reactive context, such as within the return statement of a component function, computed property, or an effect, a signal is created and dependencies are established. For example, if you wanted to print out every new user, adding the console log below will not work because it is not within a tracked scope. - ```tsx ins={9} const App = () => { const [store, setStore] = createStore({ @@ -147,8 +140,7 @@ const App = () => { ## Modifying store values -Updating values within a store is best accomplished using a setter provided by the `createStore` initialization. -This setter allows for the modification of a specific key and its associated value, following the format `setStore(key, newValue)`: +Updating values within a store is best accomplished using a setter provided by the `createStore` initialization. This setter allows for the modification of a specific key and its associated value, following the format `setStore(key, newValue)`: ```jsx "setStore" const [store, setStore] = createStore({ @@ -193,13 +185,17 @@ const App = () => { } ``` -:::info +:::info + Separating the read and write capabilities of a store provides a valuable debugging advantage. This separation facilitates the tracking and control of the components that are accessing or changing the values. -::: -:::advanced - A little hidden feature of stores is that you can also create nested stores to help with setting nested properties. + +::: + +:::advanced + +A little hidden feature of stores is that you can also create nested stores to help with setting nested properties. ```jsx const [store, setStore] = createStore({ @@ -220,24 +216,20 @@ This separation facilitates the tracking and control of the components that are ]) ``` - Changes made through `setUsers` will update the `store.users` property and reading `users` from this derived store will also be in sync with the values from `store.users`. - Note that the above relies on `store.users` to be set already in the existing store. +Changes made through `setUsers` will update the `store.users` property and reading `users` from this derived store will also be in sync with the values from `store.users`. + +Note that the above relies on `store.users` to be set already in the existing store. ::: ## Path syntax flexibility -Modifying a store using this method is referred to as "path syntax." -In this approach, the initial arguments are used to specify the keys that lead to the target value you want to modify, while the last argument provides the new value. +Modifying a store using this method is referred to as "path syntax." In this approach, the initial arguments are used to specify the keys that lead to the target value you want to modify, while the last argument provides the new value. -String keys are used to precisely target particular values with path syntax. -By specifying these exact key names, you can directly retrieve the targeted information. -However, path syntax goes beyond string keys and offers more versatility when accessing targeted values. +String keys are used to precisely target particular values with path syntax. By specifying these exact key names, you can directly retrieve the targeted information. However, path syntax goes beyond string keys and offers more versatility when accessing targeted values. -Instead of employing the use of just string keys, there is the option of using an array of keys. -This method grants you the ability to select multiple properties within the store, facilitating access to nested structures. -Alternatively, you can use filtering functions to access keys based on dynamic conditions or specific rules. +Instead of employing the use of just string keys, there is the option of using an array of keys. This method grants you the ability to select multiple properties within the store, facilitating access to nested structures. Alternatively, you can use filtering functions to access keys based on dynamic conditions or specific rules. [ @@ -265,7 +255,7 @@ setStore("users", (otherUsers) => [ location: "Nigeria", loggedIn: false, }, -]) +]); // can become @@ -274,147 +264,127 @@ setStore("users", store.users.length, { username: "michael584", location: "Nigeria", loggedIn: false, -}) +}); ``` ### Modifying multiple elements -With path syntax, you can target a subset of elements of an array, -or properties of an object, by specifying an array or range of indices. +With path syntax, you can target a subset of elements of an array, or properties of an object, by specifying an array or range of indices. -The most general form is to specify an array of values. -For example, if `store.users` is an array of objects, -you can set the `loggedIn` property of several indices at once like so: +The most general form is to specify an array of values. For example, if `store.users` is an array of objects, you can set the `loggedIn` property of several indices at once like so: ```jsx -setStore("users", [2, 7, 10], "loggedIn", false) +setStore("users", [2, 7, 10], "loggedIn", false); // equivalent to (but more efficient than): -setStore("users", 2, "loggedIn", false) -setStore("users", 7, "loggedIn", false) -setStore("users", 10, "loggedIn", false) +setStore("users", 2, "loggedIn", false); +setStore("users", 7, "loggedIn", false); +setStore("users", 10, "loggedIn", false); ``` -This array syntax also works for object property names. -For example, if `store.users` is an object mapping usernames to objects, -you can set the `loggedIn` property of several users at once like so: +This array syntax also works for object property names. For example, if `store.users` is an object mapping usernames to objects, you can set the `loggedIn` property of several users at once like so: ```jsx -setStore("users", ["me", "you"], "loggedIn", false) +setStore("users", ["me", "you"], "loggedIn", false); // equivalent to (but more efficient than): -setStore("users", ["me"], "loggedIn", false) -setStore("users", ["you"], "loggedIn", false) +setStore("users", ["me"], "loggedIn", false); +setStore("users", ["you"], "loggedIn", false); ``` -For arrays specifically, you can specify a range of indices via an object -with `from` and `to` keys (both of which are inclusive). -For example, assuming `store.users` is an array again, -you can set the `loggedIn` state for all users except index 0 as follows: +For arrays specifically, you can specify a range of indices via an object with `from` and `to` keys (both of which are inclusive). For example, assuming `store.users` is an array again, you can set the `loggedIn` state for all users except index 0 as follows: ```jsx -setStore("users", { from: 1, to: store.users.length - 1 }, "loggedIn", false) +setStore("users", { from: 1, to: store.users.length - 1 }, "loggedIn", false); // equivalent to (but more efficient than): for (let i = 1; i <= store.users.length - 1; i++) { - setStore("users", i, "loggedIn", false) + setStore("users", i, "loggedIn", false); } ``` -You can also include a `by` key in a range object to specify a step size, -and thereby update a regular subset of elements. -For example, you can set the `loggedIn` state for even-indexed users like so: +You can also include a `by` key in a range object to specify a step size, and thereby update a regular subset of elements. For example, you can set the `loggedIn` state for even-indexed users like so: ```jsx -setStore("users", { from: 0, to: store.users.length - 1, by: 2 }, "loggedIn", false) +setStore( + "users", + { from: 0, to: store.users.length - 1, by: 2 }, + "loggedIn", + false +); // equivalent to (but more efficient than): for (let i = 1; i <= store.users.length - 1; i += 2) { - setStore("users", i, "loggedIn", false) + setStore("users", i, "loggedIn", false); } ``` -Multi-setter syntax differs from the "equivalent" code in one key way: -a single store setter call automatically gets wrapped in a -[`batch`](/reference/reactive-utilities/batch), so all the elements update -at once before any downstream effects are triggered. +Multi-setter syntax differs from the "equivalent" code in one key way: a single store setter call automatically gets wrapped in a [`batch`](/reference/reactive-utilities/batch), so all the elements update at once before any downstream effects are triggered. ### Dynamic value assignment -Path syntax also provides a way to set values within an array using functions instead of static values. -These functions receive the old value as an argument, allowing you to compute the new value based on the existing one. -This dynamic approach is particularly useful for complex transformations. +Path syntax also provides a way to set values within an array using functions instead of static values. These functions receive the old value as an argument, allowing you to compute the new value based on the existing one. This dynamic approach is particularly useful for complex transformations. ```jsx -setStore("users", 3, "loggedIn" , (loggedIn) => !loggedIn) +setStore("users", 3, "loggedIn", (loggedIn) => !loggedIn); ``` ### Filtering values -In scenarios where you want to update elements in an array based on a specific condition, you can pass a function as an argument. -This function will act as a filter, allowing you to select elements that satisfy the condition. -It receives the old value and index as arguments, providing the flexibility to make conditional updates. +In scenarios where you want to update elements in an array based on a specific condition, you can pass a function as an argument. This function will act as a filter, allowing you to select elements that satisfy the condition. It receives the old value and index as arguments, providing the flexibility to make conditional updates. ```jsx -setStore("users", (user) => user.username.startsWith("t"), "loggedIn", false) +setStore("users", (user) => user.username.startsWith("t"), "loggedIn", false); ``` In addition to [`.startsWith`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith), you can use other array methods like [`.find`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find) to filter for the values that you need. ## Modifying objects -When using store setters to modify objects, if a new value is an object, it will be shallow merged with the existing value. -What this refers to is that the properties of the existing object will be combined with the properties of the "new" object you are setting, updating any overlapping properties with the values from the new object. +When using store setters to modify objects, if a new value is an object, it will be shallow merged with the existing value. What this refers to is that the properties of the existing object will be combined with the properties of the "new" object you are setting, updating any overlapping properties with the values from the new object. What this means, is that you can directly make the change to the store _without_ spreading out properties of the existing user object. ```jsx setStore("users", 0, { id: 109, -}) +}); // is equivalent to setStore("users", 0, (user) => ({ ...user, id: 109, -})) +})); ``` ## Store utilities ### Store updates with `produce` -Rather than directly modifying a store with setters, Solid has the `produce` utility. -This utility provides a way to work with data as if it were a [mutable](https://developer.mozilla.org/en-US/docs/Glossary/Mutable) JavaScript object. -`produce` also provides a way to make changes to multiple properties at the same time which eliminates the need for multiple setter calls. +Rather than directly modifying a store with setters, Solid has the `produce` utility. This utility provides a way to work with data as if it were a [mutable](https://developer.mozilla.org/en-US/docs/Glossary/Mutable) JavaScript object. `produce` also provides a way to make changes to multiple properties at the same time which eliminates the need for multiple setter calls. ```jsx -import { produce } from "solid-js/store" +import { produce } from "solid-js/store"; // without produce -setStore("users", 0, "username", "newUsername") -setStore("users", 0, "location", "newLocation") +setStore("users", 0, "username", "newUsername"); +setStore("users", 0, "location", "newLocation"); // with produce setStore( "users", 0, produce((user) => { - user.username = "newUsername" - user.location = "newLocation" + user.username = "newUsername"; + user.location = "newLocation"; }) -) +); ``` -`produce` and `setStore` do have distinct functionalities. -While both can be used to modify the state, the key distinction lies in how they handle data. -`produce` allows you to work with a temporary draft of the state, apply the changes, then produce a new [immutable](https://developer.mozilla.org/en-US/docs/Glossary/Immutable) version of the store. -Comparatively, `setStore` provides a more straightforward way to update the store directly, without creating a new version. +`produce` and `setStore` do have distinct functionalities. While both can be used to modify the state, the key distinction lies in how they handle data. `produce` allows you to work with a temporary draft of the state, apply the changes, then produce a new [immutable](https://developer.mozilla.org/en-US/docs/Glossary/Immutable) version of the store. Comparatively, `setStore` provides a more straightforward way to update the store directly, without creating a new version. -It's important to note, however, `produce` is specifically designed to work with **arrays** and **objects**. -Other collection types, such as JavaScript [Sets](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set) and [Maps](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map), are not compatible with this utility. +It's important to note, however, `produce` is specifically designed to work with **arrays** and **objects**. Other collection types, such as JavaScript [Sets](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set) and [Maps](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map), are not compatible with this utility. ### Data integration with `reconcile` -When new information needs to be merged into an existing store `reconcile` can be useful. -`reconcile` will determine the differences between new and existing data and initiate updates only when there are _changed_ values, thereby avoiding unnecessary updates. +When new information needs to be merged into an existing store `reconcile` can be useful. `reconcile` will determine the differences between new and existing data and initiate updates only when there are _changed_ values, thereby avoiding unnecessary updates. ```jsx const { createStore, reconcile } from "solid-js/stores" @@ -428,27 +398,22 @@ setData('animals', reconcile(newData)) ``` -In this example, the store will look for the differences between the existing and incoming data sets. -Consequently, only `'koala'` - the new edition - will cause an update. +In this example, the store will look for the differences between the existing and incoming data sets. Consequently, only `'koala'` - the new edition - will cause an update. ### Extracting raw data with `unwrap` -When there is a need for dealing with data outside of a reactive context, the `unwrap` utility offers a way to transform a store to a standard [object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object). -This conversion serves several important purposes. +When there is a need for dealing with data outside of a reactive context, the `unwrap` utility offers a way to transform a store to a standard [object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object). This conversion serves several important purposes. -Firstly, it provides a snapshot of the current state without the processing overhead associated with reactivity. -This can be useful in situations where an unaltered, non-reactive view of the data is needed. -Additionally, `unwrap` provides a means to interface with third-party libraries or tools that anticipate regular JavaScript objects. -This utility acts as a bridge to facilitate smooth integrations with external components and simplifies the incorporation of stores into various applications and workflows. +Firstly, it provides a snapshot of the current state without the processing overhead associated with reactivity. This can be useful in situations where an unaltered, non-reactive view of the data is needed. Additionally, `unwrap` provides a means to interface with third-party libraries or tools that anticipate regular JavaScript objects. This utility acts as a bridge to facilitate smooth integrations with external components and simplifies the incorporation of stores into various applications and workflows. ```jsx -import { createStore, unwrap } from "solid-js/store" +import { createStore, unwrap } from "solid-js/store"; const [data, setData] = createStore({ animals: ["cat", "dog", "bird", "gorilla"], -}) +}); -const rawData = unwrap(data) +const rawData = unwrap(data); ``` To learn more about how to use Stores in practice, visit the [guide on complex state management](/guides/complex-state-management). diff --git a/src/routes/concepts/understanding-jsx.mdx b/src/routes/concepts/understanding-jsx.mdx index 357f0d0946..c7a786be60 100644 --- a/src/routes/concepts/understanding-jsx.mdx +++ b/src/routes/concepts/understanding-jsx.mdx @@ -3,38 +3,33 @@ title: Understanding JSX order: 2 --- -JSX is an extension for JavaScript. -It allows you to write HTML-like code inside your JavaScript file which keeps your rendering logic and content in the same place. -This provides a concise and readable way to create and represent components. +JSX is an extension for JavaScript. It allows you to write HTML-like code inside your JavaScript file which keeps your rendering logic and content in the same place. This provides a concise and readable way to create and represent components. ## How Solid uses JSX Solid was designed to align closely with HTML standards. ```jsx -const element =

    I'm JSX!!

    +const element =

    I'm JSX!!

    ; ``` -It offers a distinct advantage, however: to copy/paste solutions from resources like Stack Overflow; and to allow direct usage of templates from design tools. -Solid sets itself apart by using JSX immediately as it returns [DOM](https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model/Introduction) elements. -This lets you use dynamic expressions within your HTML by allowing variables and functions to be references with the use of curly braces (`{ }`): +It offers a distinct advantage, however: to copy/paste solutions from resources like Stack Overflow; and to allow direct usage of templates from design tools. Solid sets itself apart by using JSX immediately as it returns [DOM](https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model/Introduction) elements. This lets you use dynamic expressions within your HTML by allowing variables and functions to be references with the use of curly braces (`{ }`): ```jsx const Component = () => { - const animal = { breed: "cat", name: "Midnight" } + const animal = { breed: "cat", name: "Midnight" }; return (

    I have a {animal.breed} named {animal.name}!

    - ) -} + ); +}; ``` This means JavaScript content can be rendered on web pages based on an application's state or logic. -Additionally, Solid's [reactive](/concepts/intro-to-reactivity) system introduces [fine-grained reactivity](/advanced-concepts/fine-grained-reactivity) with JSX. -This updates only the necessary parts of the DOM when changes occur in the underlying state. +Additionally, Solid's [reactive](/concepts/intro-to-reactivity) system introduces [fine-grained reactivity](/advanced-concepts/fine-grained-reactivity) with JSX. This updates only the necessary parts of the DOM when changes occur in the underlying state. ## Using JSX in Solid @@ -43,21 +38,18 @@ This updates only the necessary parts of the DOM when changes occur in the under Where HTML lets you have disconnected tags at the top level, JSX requires that a component to return a single root element. :::advanced -When working with JSX, parts of your code are translated into structured HTML that is placed at the start of the file. -Static elements are processed differently from dynamic ones, which might change based on data or user actions. -For dynamic elements, special markers are added for better handling during rendering. + +When working with JSX, parts of your code are translated into structured HTML that is placed at the start of the file. Static elements are processed differently from dynamic ones, which might change based on data or user actions. For dynamic elements, special markers are added for better handling during rendering. Having a single root creates a consistent and manageable hierarchy to optimize rendering and updates. + ::: -JSX maintains the familiar nested, tree-like structure found in HTML. -As a result, parent-child relationships between elements become easier to follow. +JSX maintains the familiar nested, tree-like structure found in HTML. As a result, parent-child relationships between elements become easier to follow. ### Close all tags -Self-closing tags are a must in JSX. -Unlike in HTML, where elements like ``, ``, or `
    ` don't require explicit closure, JSX requires consistent self-closing tags. -This helps to avoid potential rendering issues. +Self-closing tags are a must in JSX. Unlike in HTML, where elements like ``, ``, or `
    ` don't require explicit closure, JSX requires consistent self-closing tags. This helps to avoid potential rendering issues. ```jsx @@ -65,20 +57,15 @@ This helps to avoid potential rendering issues. ### Properties vs. attributes -HTML attributes and JSX properties may seem similar, but they serve different purposes and behave differently. -Both offer ways to specify configurations or pass information. -However, HTML is used for standard web content and JSX creates Solid's component logic. +HTML attributes and JSX properties may seem similar, but they serve different purposes and behave differently. Both offer ways to specify configurations or pass information. However, HTML is used for standard web content and JSX creates Solid's component logic. #### HTML attributes -[HTML attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes) are values set directly on HTML elements. -They provide additional information about an element to guide its initial behavior and state. -These attributes are often translated into properties on DOM objects once the browser parses the HTML. +[HTML attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes) are values set directly on HTML elements. They provide additional information about an element to guide its initial behavior and state. These attributes are often translated into properties on DOM objects once the browser parses the HTML. In JSX files, HTML attributes are used much like regular HTML, with a few key differences due to the blend of HTML and JavaScript: -- Event listeners such as `onClick` can be in camelCase or lowercase. - (**Note:** When using ESLint, you will get a warning if you use lowercase.) +- Event listeners such as `onClick` can be in camelCase or lowercase. (**Note:** When using ESLint, you will get a warning if you use lowercase.) - In cases where you can dynamically specify a value, you can replace the `"` and `"` with curly braces (`{ }`): ```jsx @@ -87,8 +74,9 @@ In JSX files, HTML attributes are used much like regular HTML, with a few key di ``` - :::info - If you wish to pass objects in JSX, such as with inline styling, you will have to use double curly braces (`{{ }}`). +:::info + +If you wish to pass objects in JSX, such as with inline styling, you will have to use double curly braces (`{{ }}`). ```jsx
    -
    -```bash frame="none" -yarn add --dev typescript -``` -
    +
    ```bash frame="none" yarn add --dev typescript ```
    -
    -```bash frame="none" -pnpm add --save-dev typescript -``` -
    +
    ```bash frame="none" pnpm add --save-dev typescript ```
    ```bash frame="none" @@ -87,17 +73,9 @@ npx tsc --init ```
    -
    -```bash frame="none" -yarn dlx tsc --init -``` -
    +
    ```bash frame="none" yarn dlx tsc --init ```
    -
    -```bash frame="none" -pnpm tsc --init -``` -
    +
    ```bash frame="none" pnpm tsc --init ```
    ```bash frame="none" @@ -157,7 +135,8 @@ function MyJsComponent() { } ``` -:::info +:::info + If you wish to change the entry point file from `index.jsx` to `index.tsx`, you need to modify the `src` attribute in `