diff --git a/.commitlintrc.json b/.commitlintrc.json
deleted file mode 100644
index b3d3d17..0000000
--- a/.commitlintrc.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "extends": ["custom"]
-}
diff --git a/.eslintignore b/.eslintignore
deleted file mode 100644
index b113373..0000000
--- a/.eslintignore
+++ /dev/null
@@ -1,3 +0,0 @@
-coverage
-dist
-*.config.cjs
diff --git a/.eslintrc.json b/.eslintrc.json
deleted file mode 100644
index b3d3d17..0000000
--- a/.eslintrc.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "extends": ["custom"]
-}
diff --git a/.github/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md
deleted file mode 100644
index 1adae37..0000000
--- a/.github/CODE_OF_CONDUCT.md
+++ /dev/null
@@ -1,128 +0,0 @@
-# Contributor Covenant Code of Conduct
-
-## Our Pledge
-
-We as members, contributors, and leaders pledge to make participation in our
-community a harassment-free experience for everyone, regardless of age, body
-size, visible or invisible disability, ethnicity, sex characteristics, gender
-identity and expression, level of experience, education, socio-economic status,
-nationality, personal appearance, race, religion, or sexual identity
-and orientation.
-
-We pledge to act and interact in ways that contribute to an open, welcoming,
-diverse, inclusive, and healthy community.
-
-## Our Standards
-
-Examples of behavior that contributes to a positive environment for our
-community include:
-
-- Demonstrating empathy and kindness toward other people
-- Being respectful of differing opinions, viewpoints, and experiences
-- Giving and gracefully accepting constructive feedback
-- Accepting responsibility and apologizing to those affected by our mistakes,
- and learning from the experience
-- Focusing on what is best not just for us as individuals, but for the
- overall community
-
-Examples of unacceptable behavior include:
-
-- The use of sexualized language or imagery, and sexual attention or
- advances of any kind
-- Trolling, insulting or derogatory comments, and personal or political attacks
-- Public or private harassment
-- Publishing others' private information, such as a physical or email
- address, without their explicit permission
-- Other conduct which could reasonably be considered inappropriate in a
- professional setting
-
-## Enforcement Responsibilities
-
-Community leaders are responsible for clarifying and enforcing our standards of
-acceptable behavior and will take appropriate and fair corrective action in
-response to any behavior that they deem inappropriate, threatening, offensive,
-or harmful.
-
-Community leaders have the right and responsibility to remove, edit, or reject
-comments, commits, code, wiki edits, issues, and other contributions that are
-not aligned to this Code of Conduct, and will communicate reasons for moderation
-decisions when appropriate.
-
-## Scope
-
-This Code of Conduct applies within all community spaces, and also applies when
-an individual is officially representing the community in public spaces.
-Examples of representing our community include using an official e-mail address,
-posting via an official social media account, or acting as an appointed
-representative at an online or offline event.
-
-## Enforcement
-
-Instances of abusive, harassing, or otherwise unacceptable behavior may be
-reported to the community leaders responsible for enforcement at
-mrcaidev@gmail.com.
-All complaints will be reviewed and investigated promptly and fairly.
-
-All community leaders are obligated to respect the privacy and security of the
-reporter of any incident.
-
-## Enforcement Guidelines
-
-Community leaders will follow these Community Impact Guidelines in determining
-the consequences for any action they deem in violation of this Code of Conduct:
-
-### 1. Correction
-
-**Community Impact**: Use of inappropriate language or other behavior deemed
-unprofessional or unwelcome in the community.
-
-**Consequence**: A private, written warning from community leaders, providing
-clarity around the nature of the violation and an explanation of why the
-behavior was inappropriate. A public apology may be requested.
-
-### 2. Warning
-
-**Community Impact**: A violation through a single incident or series
-of actions.
-
-**Consequence**: A warning with consequences for continued behavior. No
-interaction with the people involved, including unsolicited interaction with
-those enforcing the Code of Conduct, for a specified period of time. This
-includes avoiding interactions in community spaces as well as external channels
-like social media. Violating these terms may lead to a temporary or
-permanent ban.
-
-### 3. Temporary Ban
-
-**Community Impact**: A serious violation of community standards, including
-sustained inappropriate behavior.
-
-**Consequence**: A temporary ban from any sort of interaction or public
-communication with the community for a specified period of time. No public or
-private interaction with the people involved, including unsolicited interaction
-with those enforcing the Code of Conduct, is allowed during this period.
-Violating these terms may lead to a permanent ban.
-
-### 4. Permanent Ban
-
-**Community Impact**: Demonstrating a pattern of violation of community
-standards, including sustained inappropriate behavior, harassment of an
-individual, or aggression toward or disparagement of classes of individuals.
-
-**Consequence**: A permanent ban from any sort of public interaction within
-the community.
-
-## Attribution
-
-This Code of Conduct is adapted from the [Contributor Covenant][homepage],
-version 2.0, available at
-https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
-
-Community Impact Guidelines were inspired by [Mozilla's code of conduct
-enforcement ladder](https://github.com/mozilla/diversity).
-
-[homepage]: https://www.contributor-covenant.org
-
-For answers to common questions about this code of conduct, see the FAQ at
-https://www.contributor-covenant.org/faq. Translations are available at
-https://www.contributor-covenant.org/translations.
diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
deleted file mode 100644
index a244329..0000000
--- a/.github/CONTRIBUTING.md
+++ /dev/null
@@ -1,132 +0,0 @@
-# Contributing Guide
-
-Thank you for your interest in contributing to this project!
-
-Before submitting your contribution, please take a moment and read through the following guidelines:
-
-- [Code of Conduct](https://github.com/mrcaidev/hooks/tree/master/.github/CODE_OF_CONDUCT.md)
-- [Issues](#issues)
-- [Pull Requests](#pull-requests)
-- [Local Development](#local-development)
-
-## Issues
-
-[Open an issue](https://github.com/mrcaidev/hooks/issues/new) if you want to:
-
-- report a bug
-- suggest a feature
-- improve the documentation
-
-### Opening
-
-Please do:
-
-- Search [existing issues](https://github.com/mrcaidev/hooks/issues) to avoid duplicates.
-- Make sure that you are using the latest version of the package.
-- Complete all of the required fields in the template.
-
-Please don't:
-
-- Talk about irrelevant topics. [Send an email](mailto:mrcaidev@gmail.com) instead.
-- Ask questions. [Start a discussion](https://github.com/mrcaidev/hooks/discussions) instead.
-
-### Commenting
-
-Please do:
-
-- Provide additional useful information under open issues.
-- Explain why it should not be closed under closed issues.
-
-Please don't:
-
-- Bring up another topic. [Open a new issue](https://github.com/mrcaidev/hooks/issues/new) instead.
-- Leave meaningless comments like "+1" or "me too". Use reactions instead.
-
-## Pull Requests
-
-[Create a pull request](https://github.com/mrcaidev/hooks/pulls) if you:
-
-- fixed a bug
-- implemented a new feature
-- modified the documentation
-
-### Working
-
-Please do:
-
-- Ideally, you should [open an issue](https://github.com/mrcaidev/hooks/issues/new) first, and have it thoroughly discussed and approved before actually working on it.
-- If your work is related to an existing issue, mention it under that issue to avoid duplicate work.
-- Fork the `master` branch, and work in your own repository.
-- Follow the guidelines for [local development](#local-development).
-- Commit as many times as you want, and use any style of commit messages you like.
-
-### Merging
-
-Please do:
-
-- Merge back against the `master` branch.
-- Make sure that your title follows the [commit message convention](https://www.conventionalcommits.org/en/v1.0.0/), and include a link to the related issue if any.
-
-## Local Development
-
-You will need [Node.js](https://nodejs.org/) and [pnpm](https://pnpm.io/) installed beforehand.
-
-After cloning the repository, run:
-
-```
-pnpm i
-```
-
-### Project Structure
-
-```
-.
-├── docs # Documentation website
-├── packages # All packages
-│ ├── commitlint-config-custom # Commitlint config
-│ ├── eslint-config-custom # ESLint config
-│ ├── hooks # @mrcaidev/hooks
-│ ├── prettier-config-custom # Prettier config
-│ └── typescript-config-custom # TypeScript config
-└── scripts # Utility scripts
-```
-
-### Build
-
-Build both package and documentation:
-
-```
-pnpm run build
-```
-
-Build package `@mrcaidev/hooks`:
-
-```
-pnpm run build:package
-```
-
-Build documentation website:
-
-```
-pnpm run build:docs
-```
-
-If you added a new hook, you will additionally need to run:
-
-```
-pnpm run build:docs:nav
-```
-
-### Test
-
-Test package:
-
-```
-pnpm run test
-```
-
-Test package in watch mode:
-
-```
-pnpm run --filter @mrcaidev/hooks test:watch
-```
diff --git a/.github/ISSUE_TEMPLATE/bug-report.md b/.github/ISSUE_TEMPLATE/bug-report.md
deleted file mode 100644
index a232e2f..0000000
--- a/.github/ISSUE_TEMPLATE/bug-report.md
+++ /dev/null
@@ -1,44 +0,0 @@
----
-name: Bug Report
-about: Report a possible bug.
-title: ''
-labels: bug
-assignees: mrcaidev
-
----
-
-## Description
-
-> This does not work properly...
-
-## Minimal Reproducible Example
-
-> Here is a [CodeSandbox template](https://codesandbox.io/p/sandbox/thirsty-chaum-9oplqq) to reproduce the bug...
-
-## To Reproduce
-
-> Scroll down to ..., click on ..., and something breaks.
-
-## Expected behavior
-
-> However, it is supposed to...
-
-## Screenshots (Optional)
-
-> I took a screenshot to show the bug on my machine...
-
-## Environment
-
-- **OS:** Windows, MacOS, Ubuntu...
-- **Browser:** Chrome, Edge, Firefox...
-- **React version:** v16.8.0, v18.2.0...
-
-## Additional context (Optional)
-
-> This might also be helpful...
-
-## Checklist
-
-- [ ] I have searched existing issues and found no duplicate.
-- [ ] I am using the latest version of the package.
-- [ ] I am willing to submit a PR to fix this bug.
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
deleted file mode 100644
index e472b6c..0000000
--- a/.github/ISSUE_TEMPLATE/config.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-blank_issues_enabled: false
-contact_links:
- - name: Ask a question
- url: https://github.com/mrcaidev/hooks/discussions
- about: Ask anything about this project.
diff --git a/.github/ISSUE_TEMPLATE/documentation-improvement.md b/.github/ISSUE_TEMPLATE/documentation-improvement.md
deleted file mode 100644
index 2f97753..0000000
--- a/.github/ISSUE_TEMPLATE/documentation-improvement.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-name: Documentation Improvement
-about: Add or correct the documentation.
-title: ''
-labels: documentation
-assignees: mrcaidev
-
----
-
-## Description
-
-> I found a mistake in the documentation...
-
-## Checklist
-
-- [ ] I have searched existing issues and found no duplicate.
-- [ ] I am willing to submit a PR to modify the documentation.
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
deleted file mode 100644
index 9535e96..0000000
--- a/.github/ISSUE_TEMPLATE/feature_request.md
+++ /dev/null
@@ -1,34 +0,0 @@
----
-name: Feature request
-about: Suggest a new feature.
-title: ''
-labels: enhancement
-assignees: mrcaidev
-
----
-
-## Description
-
-> I have a good idea on...
-
-## Reason
-
-> I think it is important to add this feature, because...
-
-## Related Issue (Optional)
-
-> This is related to this issue...
-
-## Alternatives (Optional)
-
-> If this can't be done, may be we can...
-
-## Additional Context (Optional)
-
-> This might also be helpful...
-
-## Checklist
-
-- [ ] I have searched existing issues and found no duplicate.
-- [ ] I am using the latest version of the package.
-- [ ] I am willing to submit a PR to implement this feature.
diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
new file mode 100644
index 0000000..6afd7e5
--- /dev/null
+++ b/.github/workflows/ci.yaml
@@ -0,0 +1,106 @@
+name: CI
+
+on:
+ push:
+ branches:
+ - main
+ paths-ignore:
+ - docs/**
+
+ pull_request:
+ branches:
+ - main
+ paths-ignore:
+ - docs/**
+
+jobs:
+ lint:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Check out repository
+ uses: actions/checkout@v4
+
+ - name: Set up pnpm
+ uses: pnpm/action-setup@v4
+
+ - name: Set up Node.js
+ uses: actions/setup-node@v4
+ with:
+ node-version: lts/*
+ cache: pnpm
+
+ - name: Install dependencies
+ run: pnpm install
+
+ - name: Lint with TSC
+ run: pnpm tsc
+
+ - name: Lint with ESLint
+ run: pnpm eslint .
+
+ format:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Check out repository
+ uses: actions/checkout@v4
+
+ - name: Set up pnpm
+ uses: pnpm/action-setup@v4
+
+ - name: Set up Node.js
+ uses: actions/setup-node@v4
+ with:
+ node-version: lts/*
+ cache: pnpm
+
+ - name: Install dependencies
+ run: pnpm install
+
+ - name: Check format
+ run: pnpm prettier --check .
+
+ build:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Check out repository
+ uses: actions/checkout@v4
+
+ - name: Set up pnpm
+ uses: pnpm/action-setup@v4
+
+ - name: Set up Node.js
+ uses: actions/setup-node@v4
+ with:
+ node-version: lts/*
+ cache: pnpm
+
+ - name: Install dependencies
+ run: pnpm install
+
+ - name: Build
+ run: pnpm run build
+
+ test:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Check out repository
+ uses: actions/checkout@v4
+
+ - name: Set up pnpm
+ uses: pnpm/action-setup@v4
+
+ - name: Set up Node.js
+ uses: actions/setup-node@v4
+ with:
+ node-version: lts/*
+ cache: pnpm
+
+ - name: Install dependencies
+ run: pnpm install
+
+ - name: Test
+ run: pnpm run test
diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml
deleted file mode 100644
index d680a7c..0000000
--- a/.github/workflows/codeql.yml
+++ /dev/null
@@ -1,40 +0,0 @@
-name: CodeQL
-
-on:
- push:
- branches:
- - master
- pull_request:
- branches:
- - master
-
-jobs:
- analyze:
- name: Analyze
- runs-on: ubuntu-latest
- permissions:
- actions: read
- contents: read
- security-events: write
-
- strategy:
- fail-fast: false
- matrix:
- language: ["javascript"]
-
- steps:
- - name: Checkout repository
- uses: actions/checkout@v3
-
- - name: Initialize CodeQL
- uses: github/codeql-action/init@v2
- with:
- languages: ${{ matrix.language }}
-
- - name: Autobuild
- uses: github/codeql-action/autobuild@v2
-
- - name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@v2
- with:
- category: "/language:${{matrix.language}}"
diff --git a/.github/workflows/deploy-documentation.yml b/.github/workflows/deploy-docs.yaml
similarity index 68%
rename from .github/workflows/deploy-documentation.yml
rename to .github/workflows/deploy-docs.yaml
index 2e00762..8c60038 100644
--- a/.github/workflows/deploy-documentation.yml
+++ b/.github/workflows/deploy-docs.yaml
@@ -1,16 +1,16 @@
-name: Deploy Documentation
+name: Deploy documentation
on:
push:
branches:
- - master
+ - main
paths:
- - "docs/**"
- workflow_dispatch:
+ - docs/**
jobs:
deploy:
runs-on: ubuntu-latest
+
steps:
- name: Call deploy hook
run: curl -X POST ${{ secrets.DEPLOY_HOOK }}
diff --git a/.github/workflows/publish-package.yml b/.github/workflows/publish-package.yml
deleted file mode 100644
index 1e94566..0000000
--- a/.github/workflows/publish-package.yml
+++ /dev/null
@@ -1,43 +0,0 @@
-name: Publish Package
-
-on:
- release:
- types:
- - published
- workflow_dispatch:
-
-jobs:
- publish:
- runs-on: ubuntu-latest
- env:
- TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
- TURBO_TEAM: ${{ secrets.TURBO_TEAM }}
- steps:
- - name: Checkout repository
- uses: actions/checkout@v3
-
- - name: Setup pnpm
- uses: pnpm/action-setup@v2
- with:
- version: latest
-
- - name: Setup node
- uses: actions/setup-node@v3
- with:
- node-version: 16
- registry-url: "https://registry.npmjs.org"
- cache: "pnpm"
-
- - name: Install dependencies
- run: pnpm i
-
- - name: Test
- run: pnpm run test
-
- - name: Build package
- run: pnpm run build:package
-
- - name: Publish to NPM
- run: pnpm publish --filter @mrcaidev/hooks --no-git-checks
- env:
- NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml
new file mode 100644
index 0000000..adb45c1
--- /dev/null
+++ b/.github/workflows/publish.yaml
@@ -0,0 +1,36 @@
+name: Publish
+
+on:
+ release:
+ types:
+ - published
+ workflow_dispatch:
+
+jobs:
+ publish:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Check out repository
+ uses: actions/checkout@v4
+
+ - name: Set up pnpm
+ uses: pnpm/action-setup@v4
+
+ - name: Set up Node.js
+ uses: actions/setup-node@v4
+ with:
+ node-version: lts/*
+ cache: pnpm
+ registry-url: https://registry.npmjs.org
+
+ - name: Install dependencies
+ run: pnpm install
+
+ - name: Build
+ run: pnpm run build
+
+ - name: Publish
+ run: pnpm publish --no-git-checks
+ env:
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
diff --git a/.github/workflows/test-package.yml b/.github/workflows/test-package.yml
deleted file mode 100644
index 74215d1..0000000
--- a/.github/workflows/test-package.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Test package
-
-on:
- push:
- branches:
- - master
- pull_request:
- branches:
- - master
- workflow_dispatch:
-
-jobs:
- test:
- runs-on: ubuntu-latest
- env:
- TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
- TURBO_TEAM: ${{ secrets.TURBO_TEAM }}
- steps:
- - name: Checkout repository
- uses: actions/checkout@v3
-
- - name: Setup pnpm
- uses: pnpm/action-setup@v2
- with:
- version: latest
-
- - name: Setup node
- uses: actions/setup-node@v3
- with:
- node-version: 16
- cache: "pnpm"
-
- - name: Install dependencies
- run: pnpm i
-
- - name: Test
- run: pnpm run test
diff --git a/.gitignore b/.gitignore
index 735b75f..2eed64f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,37 +1,8 @@
-# dependencies
-node_modules
-.pnp
-.pnp.js
-
-# output
-dist
-build
-out
-.next
-
-# testing
coverage
-
-# debug
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-.pnpm-debug.log*
-
-# log
-logs
-*.log
-
-# env
-.env*
-
-# turbo
-.turbo
-
-# misc
-temp
-next-env.d.ts
+dist
+node_modules
*.tgz
*.tsbuildinfo
-.DS_Store
-*.pem
+
+docs/.vitepress/cache
+docs/.vitepress/dist
diff --git a/.husky/commit-msg b/.husky/commit-msg
index 10cb551..cfe7510 100755
--- a/.husky/commit-msg
+++ b/.husky/commit-msg
@@ -1,4 +1 @@
-#!/bin/sh
-. "$(dirname "$0")/_/husky.sh"
-
-pnpm commitlint --edit "$1"
+pnpm commitlint --edit $1
diff --git a/.husky/pre-commit b/.husky/pre-commit
index fab6428..cb2c84d 100755
--- a/.husky/pre-commit
+++ b/.husky/pre-commit
@@ -1,4 +1 @@
-#!/bin/sh
-. "$(dirname "$0")/_/husky.sh"
-
pnpm lint-staged
diff --git a/.husky/pre-push b/.husky/pre-push
new file mode 100644
index 0000000..cc36afe
--- /dev/null
+++ b/.husky/pre-push
@@ -0,0 +1 @@
+pnpm vitest run
diff --git a/.lintstagedrc.json b/.lintstagedrc.json
deleted file mode 100644
index cd9ddaf..0000000
--- a/.lintstagedrc.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "*.{ts,tsx,astro}": [
- "eslint --fix --cache --cache-location ./node_modules/.cache/eslint/.eslintcache",
- "prettier --write --cache --plugin-search-dir=."
- ],
- "*.{css,json,md}": "prettier --write --cache --plugin-search-dir=."
-}
diff --git a/.prettierignore b/.prettierignore
index 9f7f384..0709120 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -1,3 +1,6 @@
coverage
dist
pnpm-lock.yaml
+
+docs/.vitepress/cache
+docs/.vitepress/dist
diff --git a/.prettierrc.json b/.prettierrc.json
deleted file mode 100644
index ba63a7c..0000000
--- a/.prettierrc.json
+++ /dev/null
@@ -1 +0,0 @@
-"prettier-config-custom"
diff --git a/LICENSE b/LICENSE
index 2dda4d3..f1517f0 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,6 @@
MIT License
-Copyright (c) 2022 Yuwang Cai
+Copyright (c) 2024 Yuwang Cai
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/README.md b/README.md
deleted file mode 120000
index f2fcc40..0000000
--- a/README.md
+++ /dev/null
@@ -1 +0,0 @@
-packages/hooks/README.md
\ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..79436bb
--- /dev/null
+++ b/README.md
@@ -0,0 +1,40 @@
+# @mrcaidev/hooks
+
+A collection of React utility hooks.
+
+- **Easy to use:** Good defaults, while highly customizable.
+- **Fully typed:** Enjoy 100% type safety with TypeScript.
+- **Server ready:** SSG/SSR support out of the box.
+- **Lightweight:** <3KB gzipped. Tree-shaking supported.
+
+## Getting started
+
+Please follow the [documentation](https://hooks.mrcai.dev) to get started with `@mrcaidev/hooks`.
+
+## Built with
+
+[![TypeScript](https://img.shields.io/badge/typescript-3178c6?style=for-the-badge&logo=typescript&logoColor=ffffff)](https://www.typescriptlang.org/)
+[![React](https://img.shields.io/badge/react-23272f?style=for-the-badge&logo=react)](https://reactjs.org/)
+[![Vite](https://img.shields.io/badge/vite-646cff?style=for-the-badge&logo=vite&logoColor=ffffff)](https://vitejs.dev/)
+[![Vitest](https://img.shields.io/badge/vitest-6da13f?style=for-the-badge&logo=vitest&logoColor=ffffff)](https://vitest.dev/)
+[![Testing Library](https://shields.io/badge/testing%20library-e33433?style=for-the-badge&logo=testinglibrary&logoColor=ffffff)](https://testing-library.com/)
+[![Astro](https://img.shields.io/badge/astro-7e22ce?style=for-the-badge&logo=astro&logoColor=ffffff)](https://astro.build/)
+[![Tailwind CSS](https://shields.io/badge/tailwind%20css-38bdf8?style=for-the-badge&logo=tailwindcss&logoColor=ffffff)](https://tailwindcss.com/)
+[![pnpm](https://img.shields.io/badge/pnpm-f69220?style=for-the-badge&logo=pnpm&logoColor=ffffff)](https://pnpm.io/)
+[![Turborepo](https://img.shields.io/badge/turborepo-000000?style=for-the-badge&logo=turborepo)](https://turbo.build/repo)
+[![ESLint](https://shields.io/badge/eslint-4b32c3?style=for-the-badge&logo=eslint&logoColor=ffffff)](https://eslint.org/)
+[![Prettier](https://shields.io/badge/prettier-24292e?style=for-the-badge&logo=prettier)](https://prettier.io/)
+[![Commitlint](https://shields.io/badge/commitlint-121212?style=for-the-badge&logo=commitlint&logoColor=ffffff)](https://commitlint.js.org/)
+[![EditorConfig](https://shields.io/badge/editorconfig-000?style=for-the-badge&logo=editorconfig&logoColor=ffffff)](https://editorconfig.org/)
+[![Husky](https://shields.io/badge/husky-42b983?style=for-the-badge&logo=git&logoColor=ffffff)](https://typicode.github.io/husky/)
+[![Lint staged](https://shields.io/badge/lint%20staged-f54d27?style=for-the-badge&logo=git&logoColor=ffffff)](https://github.com/okonet/lint-staged)
+
+## Contributing
+
+Please read the [contributing guide](https://github.com/mrcaidev/hooks/tree/master/.github/CONTRIBUTING.md) before any contribution.
+
+> Currently this is really just a personal project. I'm trying to build a library that can make me proud of, while also learning React and Web APIs. But if you decide to help out, I believe it will definitely make this project better, and we can surely learn a lot from each other.
+
+## License
+
+[MIT](https://github.com/mrcaidev/hooks/tree/master/LICENSE)
diff --git a/commitlint.config.ts b/commitlint.config.ts
new file mode 100644
index 0000000..983a213
--- /dev/null
+++ b/commitlint.config.ts
@@ -0,0 +1,5 @@
+import type { UserConfig } from "@commitlint/types";
+
+export default {
+ extends: ["@commitlint/config-conventional"],
+} satisfies UserConfig;
diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts
new file mode 100644
index 0000000..300b32d
--- /dev/null
+++ b/docs/.vitepress/config.ts
@@ -0,0 +1,60 @@
+import { defineConfig } from "vitepress";
+
+export default defineConfig({
+ title: "@mrcaidev/hooks",
+ description: "React utility hooks",
+ head: [
+ [
+ "link",
+ {
+ rel: "icon",
+ type: "image/svg+xml",
+ href: "/logo.svg",
+ },
+ ],
+ ],
+ cleanUrls: true,
+ metaChunk: true,
+ lastUpdated: true,
+ themeConfig: {
+ logo: "/logo.svg",
+ nav: [
+ {
+ text: "Docs",
+ link: "/introduction/getting-started",
+ },
+ {
+ text: "Playground",
+ link: "https://codesandbox.io/p/sandbox/thirsty-chaum-9oplqq",
+ },
+ ],
+ sidebar: [
+ {
+ text: "Introduction",
+ base: "/introduction",
+ items: [
+ {
+ text: "Getting Started",
+ link: "/getting-started",
+ },
+ ],
+ },
+ ],
+ socialLinks: [
+ {
+ icon: "github",
+ link: "https://github.com/mrcaidev/hooks",
+ },
+ ],
+ footer: {
+ message: "Released under the MIT License.",
+ copyright: "© 2022-present Yuwang Cai",
+ },
+ editLink: {
+ pattern: "https://github.com/mrcaidev/hooks/edit/main/docs/:path",
+ },
+ search: {
+ provider: "local",
+ },
+ },
+});
diff --git a/docs/astro.config.ts b/docs/astro.config.ts
deleted file mode 100644
index 12fbb90..0000000
--- a/docs/astro.config.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-import { rehypeHeadingIds } from "@astrojs/markdown-remark";
-import sitemap from "@astrojs/sitemap";
-import tailwind from "@astrojs/tailwind";
-import { defineConfig } from "astro/config";
-import { autolinkHeadings } from "./src/plugins/autolink-headings";
-import { injectFrontmatter } from "./src/plugins/inject-frontmatter";
-
-export default defineConfig({
- integrations: [
- sitemap(),
- tailwind({
- config: {
- applyBaseStyles: false,
- },
- }),
- ],
- markdown: {
- remarkPlugins: [injectFrontmatter],
- rehypePlugins: [rehypeHeadingIds, autolinkHeadings],
- },
- site: "https://hooks.mrcai.dev",
- vite: {
- build: {
- assetsInlineLimit: 0,
- },
- },
-});
diff --git a/docs/index.md b/docs/index.md
new file mode 100644
index 0000000..c5810ee
--- /dev/null
+++ b/docs/index.md
@@ -0,0 +1,32 @@
+---
+layout: home
+
+hero:
+ name: "@mrcaidev/hooks"
+ text: React Utility Hooks
+ tagline: Collection of 40+ common hooks
+ image:
+ src: /logo.svg
+ alt: React logo
+ actions:
+ - theme: brand
+ text: Getting Started
+ link: /introduction/getting-started
+ - theme: alt
+ text: GitHub
+ link: https://github.com/mrcaidev/hooks
+
+features:
+ - icon: 👍
+ title: Easy to use
+ details: Reasonable defaults, flexible customization
+ - icon: 💯
+ title: 100% TypeScript
+ details: Every hook is fully typed
+ - icon: ✅
+ title: SSR ready
+ details: Runs on server without any error
+ - icon: ☁️
+ title: Lightweight
+ details: <3KB gzipped, tree-shaking supported
+---
diff --git a/docs/introduction/getting-started.md b/docs/introduction/getting-started.md
new file mode 100644
index 0000000..a6e670b
--- /dev/null
+++ b/docs/introduction/getting-started.md
@@ -0,0 +1,47 @@
+# Getting Started
+
+## Try It Online
+
+You can try @mrcaidev/hooks directly in your browser on [CodeSandbox](https://codesandbox.io/p/sandbox/thirsty-chaum-9oplqq).
+
+## Installation
+
+### Prerequisites
+
+[React](https://www.npmjs.com/package/react) and [React DOM](https://www.npmjs.com/package/react-dom) (version 16.8.0 or higher) are required.
+
+For TypeScript users, you may also want to install [@types/react](https://www.npmjs.com/package/@types/react) and [@types/react-dom](https://www.npmjs.com/package/@types/react-dom).
+
+### Install Package
+
+::: code-group
+
+```sh [npm]
+npm add @mrcaidev/hooks
+```
+
+```sh [yarn]
+yarn add @mrcaidev/hooks
+```
+
+```sh [pnpm]
+pnpm add @mrcaidev/hooks
+```
+
+```sh [bun]
+bun add @mrcaidev/hooks
+```
+
+:::
+
+### Usage
+
+```tsx
+import { useBoolean } from "@mrcaidev/hooks";
+
+function Component() {
+ const { value, toggle } = useBoolean();
+
+ return {value ? "On" : "Off"} ;
+}
+```
diff --git a/docs/package.json b/docs/package.json
deleted file mode 100644
index 4149035..0000000
--- a/docs/package.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "name": "docs",
- "version": "0.0.0",
- "private": true,
- "scripts": {
- "dev": "astro dev",
- "build": "astro build",
- "preview": "astro preview"
- },
- "dependencies": {
- "@astrojs/markdown-remark": "^2.0.1",
- "@astrojs/sitemap": "^1.0.1",
- "@astrojs/tailwind": "^3.0.1",
- "@fontsource/inter": "^4.5.15",
- "@tailwindcss/typography": "^0.5.9",
- "astro": "^2.0.6",
- "cross-spawn": "^7.0.3",
- "hastscript": "^7.2.0",
- "rehype-autolink-headings": "^6.1.1",
- "tailwindcss": "^3.2.4",
- "tailwindcss-radix-colors": "^0.3.0"
- },
- "devDependencies": {
- "@types/cross-spawn": "^6.0.2",
- "@types/node": "^18.11.18",
- "typescript": "^4.9.5",
- "typescript-config-custom": "workspace:^0.0.0"
- }
-}
diff --git a/docs/public/banner.png b/docs/public/banner.png
deleted file mode 100644
index cfa26db..0000000
Binary files a/docs/public/banner.png and /dev/null differ
diff --git a/docs/public/favicon.svg b/docs/public/favicon.svg
deleted file mode 100644
index 6c748f0..0000000
--- a/docs/public/favicon.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
diff --git a/docs/public/logo.svg b/docs/public/logo.svg
new file mode 100644
index 0000000..b7615a1
--- /dev/null
+++ b/docs/public/logo.svg
@@ -0,0 +1 @@
+
diff --git a/docs/public/robots.txt b/docs/public/robots.txt
deleted file mode 100644
index 5c20652..0000000
--- a/docs/public/robots.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-User-agent: *
-Allow: /
-Sitemap: https://hooks.mrcai.dev/sitemap-index.xml
diff --git a/docs/src/components/doc-footer/doc-footer.astro b/docs/src/components/doc-footer/doc-footer.astro
deleted file mode 100644
index d7ac523..0000000
--- a/docs/src/components/doc-footer/doc-footer.astro
+++ /dev/null
@@ -1,27 +0,0 @@
----
-import EditLink from "./edit-link.astro";
-import LastUpdatedAt from "./last-updated-at.astro";
-import PageLink from "./page-link.astro";
-import { findPreviousAndNext } from "./utils";
-
-export type Props = {
- updateIso: string;
- url: string;
-};
-const { updateIso, url } = Astro.props;
-
-const editUrl = `https://github.com/mrcaidev/hooks/blob/master/docs/src/pages${url}.md`;
-const { previous, next } = findPreviousAndNext(url);
----
-
-
diff --git a/docs/src/components/doc-footer/edit-link.astro b/docs/src/components/doc-footer/edit-link.astro
deleted file mode 100644
index 8e5219c..0000000
--- a/docs/src/components/doc-footer/edit-link.astro
+++ /dev/null
@@ -1,17 +0,0 @@
----
-import Edit from "icons/edit.astro";
-
-export type Props = {
- url: string;
-};
-const { url } = Astro.props;
----
-
-
-
- Edit this page on GitHub
-
diff --git a/docs/src/components/doc-footer/index.ts b/docs/src/components/doc-footer/index.ts
deleted file mode 100644
index d24be7b..0000000
--- a/docs/src/components/doc-footer/index.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-// @ts-expect-error: It actually works.
-export { default } from "./doc-footer.astro";
diff --git a/docs/src/components/doc-footer/last-updated-at.astro b/docs/src/components/doc-footer/last-updated-at.astro
deleted file mode 100644
index d049356..0000000
--- a/docs/src/components/doc-footer/last-updated-at.astro
+++ /dev/null
@@ -1,21 +0,0 @@
----
-export type Props = {
- iso: string;
-};
-const { iso } = Astro.props;
----
-
-
- Last updated:
- ...
-
-
-
diff --git a/docs/src/components/doc-footer/page-link.astro b/docs/src/components/doc-footer/page-link.astro
deleted file mode 100644
index 9084d83..0000000
--- a/docs/src/components/doc-footer/page-link.astro
+++ /dev/null
@@ -1,27 +0,0 @@
----
-export type Props = {
- type: "previous" | "next";
- name: string;
- href: string;
-};
-const { type, name, href } = Astro.props;
-
-const hint = type === "previous" ? "Previous page" : "Next page";
----
-
-
diff --git a/docs/src/components/doc-footer/utils.ts b/docs/src/components/doc-footer/utils.ts
deleted file mode 100644
index 61fbd26..0000000
--- a/docs/src/components/doc-footer/utils.ts
+++ /dev/null
@@ -1,36 +0,0 @@
-import navigation from "data/navigation.json";
-
-export function findPreviousAndNext(href: string) {
- let previous = { name: "", href: "" };
- let isFindingNext = false;
-
- for (const { links } of navigation) {
- for (const link of links) {
- if (isFindingNext) {
- return {
- previous,
- next: link,
- };
- }
-
- if (link.href !== href) {
- previous = link;
- continue;
- }
-
- isFindingNext = true;
- }
- }
-
- if (isFindingNext) {
- return {
- previous,
- next: { name: "", href: "" },
- };
- }
-
- return {
- previous: { name: "", href: "" },
- next: { name: "", href: "" },
- };
-}
diff --git a/docs/src/components/header/header.astro b/docs/src/components/header/header.astro
deleted file mode 100644
index a4b6d4a..0000000
--- a/docs/src/components/header/header.astro
+++ /dev/null
@@ -1,22 +0,0 @@
----
-import Logo from "./logo.astro";
-import NavigationToggler from "./navigation-toggler.astro";
-import SourceCodeLink from "./source-code-link.astro";
-import ThemeToggler from "./theme-toggler.astro";
-
-export type Props = {
- hasNavigation?: boolean;
-};
-const { hasNavigation = false } = Astro.props;
----
-
-
diff --git a/docs/src/components/header/index.ts b/docs/src/components/header/index.ts
deleted file mode 100644
index f622c40..0000000
--- a/docs/src/components/header/index.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-// @ts-expect-error: It actually works.
-export { default } from "./header.astro";
diff --git a/docs/src/components/header/logo.astro b/docs/src/components/header/logo.astro
deleted file mode 100644
index 121ea43..0000000
--- a/docs/src/components/header/logo.astro
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
- @mrcaidev/hooks
-
diff --git a/docs/src/components/header/navigation-toggler.astro b/docs/src/components/header/navigation-toggler.astro
deleted file mode 100644
index f296fa9..0000000
--- a/docs/src/components/header/navigation-toggler.astro
+++ /dev/null
@@ -1,29 +0,0 @@
----
-import Menu from "icons/menu.astro";
----
-
-
-
- Toggle menu
-
-
-
diff --git a/docs/src/components/header/source-code-link.astro b/docs/src/components/header/source-code-link.astro
deleted file mode 100644
index fa885a2..0000000
--- a/docs/src/components/header/source-code-link.astro
+++ /dev/null
@@ -1,12 +0,0 @@
----
-import Github from "icons/github.astro";
----
-
-
-
- View source code on GitHub
-
diff --git a/docs/src/components/header/theme-toggler.astro b/docs/src/components/header/theme-toggler.astro
deleted file mode 100644
index 365acbd..0000000
--- a/docs/src/components/header/theme-toggler.astro
+++ /dev/null
@@ -1,50 +0,0 @@
----
-import Moon from "icons/moon.astro";
-import Sun from "icons/sun.astro";
----
-
-
-
-
- Toggle dark theme
-
-
-
diff --git a/docs/src/components/navigation/index.ts b/docs/src/components/navigation/index.ts
deleted file mode 100644
index 036a189..0000000
--- a/docs/src/components/navigation/index.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-// @ts-expect-error: It actually works.
-export { default } from "./navigation.astro";
diff --git a/docs/src/components/navigation/link.astro b/docs/src/components/navigation/link.astro
deleted file mode 100644
index 901b674..0000000
--- a/docs/src/components/navigation/link.astro
+++ /dev/null
@@ -1,22 +0,0 @@
----
-export type Props = {
- href: string;
- name: string;
-};
-const { href, name } = Astro.props;
-
-const isCurrent = Astro.url.pathname.startsWith(href);
----
-
-
- {name}
-
diff --git a/docs/src/components/navigation/navigation.astro b/docs/src/components/navigation/navigation.astro
deleted file mode 100644
index 25f7c4a..0000000
--- a/docs/src/components/navigation/navigation.astro
+++ /dev/null
@@ -1,35 +0,0 @@
----
-import navigation from "data/navigation.json";
-import ChevronRight from "icons/chevron-right.astro";
-import Link from "./link.astro";
----
-
-
diff --git a/docs/src/components/on-this-page/anchor.astro b/docs/src/components/on-this-page/anchor.astro
deleted file mode 100644
index ba9db87..0000000
--- a/docs/src/components/on-this-page/anchor.astro
+++ /dev/null
@@ -1,16 +0,0 @@
----
-import type { MarkdownHeading } from "astro";
-
-export type Props = MarkdownHeading;
-const { slug, depth, text } = Astro.props;
-
-const href = "#" + slug;
-const name = depth === 1 ? "Overview" : text;
----
-
-
- {name}
-
diff --git a/docs/src/components/on-this-page/index.ts b/docs/src/components/on-this-page/index.ts
deleted file mode 100644
index 078ff12..0000000
--- a/docs/src/components/on-this-page/index.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-// @ts-expect-error: It actually works.
-export { default } from "./on-this-page.astro";
diff --git a/docs/src/components/on-this-page/on-this-page.astro b/docs/src/components/on-this-page/on-this-page.astro
deleted file mode 100644
index 2cde545..0000000
--- a/docs/src/components/on-this-page/on-this-page.astro
+++ /dev/null
@@ -1,95 +0,0 @@
----
-import type { MarkdownHeading } from "astro";
-import Anchor from "./anchor.astro";
-
-export type Props = {
- anchors: MarkdownHeading[];
-};
-const { anchors } = Astro.props;
----
-
-
-
- On this page
-
-
-
- {anchors.map((anchor) => )}
-
-
-
-
diff --git a/docs/src/data/navigation.json b/docs/src/data/navigation.json
deleted file mode 100644
index c57bbaf..0000000
--- a/docs/src/data/navigation.json
+++ /dev/null
@@ -1,172 +0,0 @@
-[
- {
- "section": "Getting Started",
- "links": [
- {
- "name": "Introduction",
- "href": "/introduction"
- },
- {
- "name": "Installation",
- "href": "/installation"
- }
- ]
- },
- {
- "section": "Hooks",
- "links": [
- {
- "name": "useAsyncEffect",
- "href": "/use-async-effect"
- },
- {
- "name": "useBoolean",
- "href": "/use-boolean"
- },
- {
- "name": "useClickOutside",
- "href": "/use-click-outside"
- },
- {
- "name": "useClipboardText",
- "href": "/use-clipboard-text"
- },
- {
- "name": "useConstFn",
- "href": "/use-const-fn"
- },
- {
- "name": "useConst",
- "href": "/use-const"
- },
- {
- "name": "useCounter",
- "href": "/use-counter"
- },
- {
- "name": "useDebounceEffect",
- "href": "/use-debounce-effect"
- },
- {
- "name": "useDebounce",
- "href": "/use-debounce"
- },
- {
- "name": "useDocument",
- "href": "/use-document"
- },
- {
- "name": "useElementSize",
- "href": "/use-element-size"
- },
- {
- "name": "useEventListener",
- "href": "/use-event-listener"
- },
- {
- "name": "useFocusTrap",
- "href": "/use-focus-trap"
- },
- {
- "name": "useHover",
- "href": "/use-hover"
- },
- {
- "name": "useInterval",
- "href": "/use-interval"
- },
- {
- "name": "useIsMounted",
- "href": "/use-is-mounted"
- },
- {
- "name": "useKeydown",
- "href": "/use-keydown"
- },
- {
- "name": "useLatest",
- "href": "/use-latest"
- },
- {
- "name": "useLocalStorage",
- "href": "/use-local-storage"
- },
- {
- "name": "useMediaQuery",
- "href": "/use-media-query"
- },
- {
- "name": "useMount",
- "href": "/use-mount"
- },
- {
- "name": "usePrevious",
- "href": "/use-previous"
- },
- {
- "name": "useRerender",
- "href": "/use-rerender"
- },
- {
- "name": "useSafeLayoutEffect",
- "href": "/use-safe-layout-effect"
- },
- {
- "name": "useSelection",
- "href": "/use-selection"
- },
- {
- "name": "useSessionStorage",
- "href": "/use-session-storage"
- },
- {
- "name": "useTheme",
- "href": "/use-theme"
- },
- {
- "name": "useThrottleEffect",
- "href": "/use-throttle-effect"
- },
- {
- "name": "useThrottle",
- "href": "/use-throttle"
- },
- {
- "name": "useTimeout",
- "href": "/use-timeout"
- },
- {
- "name": "useTitle",
- "href": "/use-title"
- },
- {
- "name": "useToggle",
- "href": "/use-toggle"
- },
- {
- "name": "useUnmount",
- "href": "/use-unmount"
- },
- {
- "name": "useUnsafeOnceEffect",
- "href": "/use-unsafe-once-effect"
- },
- {
- "name": "useUpdateDeps",
- "href": "/use-update-deps"
- },
- {
- "name": "useUpdate",
- "href": "/use-update"
- },
- {
- "name": "useWindowSize",
- "href": "/use-window-size"
- },
- {
- "name": "useWindow",
- "href": "/use-window"
- }
- ]
- }
-]
diff --git a/docs/src/env.d.ts b/docs/src/env.d.ts
deleted file mode 100644
index f964fe0..0000000
--- a/docs/src/env.d.ts
+++ /dev/null
@@ -1 +0,0 @@
-///
diff --git a/docs/src/global.css b/docs/src/global.css
deleted file mode 100644
index ad9feb6..0000000
--- a/docs/src/global.css
+++ /dev/null
@@ -1,36 +0,0 @@
-@tailwind base;
-@tailwind components;
-@tailwind utilities;
-
-@layer base {
- *::-webkit-scrollbar {
- @apply w-2 h-1 bg-gray-1 dark:bg-graydark-1;
- }
- *::-webkit-scrollbar-thumb {
- @apply w-2 h-1 rounded bg-gray-7 dark:bg-graydark-7 hover:bg-gray-8 dark:hover:bg-graydark-8;
- }
- *::-webkit-scrollbar-corner {
- @apply hidden;
- }
-}
-
-@layer components {
- .typography {
- @apply prose dark:prose-invert
- prose-headings:text-gray-12 dark:prose-headings:text-graydark-12
- prose-headings:scroll-mt-20
- prose-a:text-cyan-11 dark:prose-a:text-cyandark-11 hover:prose-a:text-cyan-11 dark:hover:prose-a:text-cyandark-11
- prose-a:no-underline hover:prose-a:underline underline-offset-4
- [&_sup_a]:no-underline
- prose-blockquote:text-gray-11 dark:prose-blockquote:text-graydark-11
- prose-blockquote:border-gray-6 dark:prose-blockquote:border-graydark-6
- [&_blockquote_p]:before:content-none [&_blockquote_p]:after:content-none
- prose-strong:text-current
- prose-code:text-current
- prose-li:marker:text-current
- prose-thead:border-b prose-thead:border-gray-6 dark:prose-thead:border-graydark-6
- prose-tr:border-gray-6 dark:prose-tr:border-graydark-6
- prose-img:mx-auto
- prose-hr:border-gray-6 dark:prose-hr:border-graydark-6;
- }
-}
diff --git a/docs/src/icons/chevron-right.astro b/docs/src/icons/chevron-right.astro
deleted file mode 100644
index 5abeba6..0000000
--- a/docs/src/icons/chevron-right.astro
+++ /dev/null
@@ -1,22 +0,0 @@
----
-import type { IconProps } from "./utils";
-
-export type Props = IconProps;
-const { size = 24, ...rest } = Astro.props;
----
-
-
-
-
diff --git a/docs/src/icons/edit.astro b/docs/src/icons/edit.astro
deleted file mode 100644
index 9e7878f..0000000
--- a/docs/src/icons/edit.astro
+++ /dev/null
@@ -1,23 +0,0 @@
----
-import type { IconProps } from "./utils";
-
-export type Props = IconProps;
-const { size = 24, ...rest } = Astro.props;
----
-
-
-
-
-
diff --git a/docs/src/icons/github.astro b/docs/src/icons/github.astro
deleted file mode 100644
index 8b4e53d..0000000
--- a/docs/src/icons/github.astro
+++ /dev/null
@@ -1,24 +0,0 @@
----
-import type { IconProps } from "./utils";
-
-export type Props = IconProps;
-const { size = 24, ...rest } = Astro.props;
----
-
-
-
-
diff --git a/docs/src/icons/menu.astro b/docs/src/icons/menu.astro
deleted file mode 100644
index 5e5d662..0000000
--- a/docs/src/icons/menu.astro
+++ /dev/null
@@ -1,24 +0,0 @@
----
-import type { IconProps } from "./utils";
-
-export type Props = IconProps;
-const { size = 24, ...rest } = Astro.props;
----
-
-
-
-
-
-
diff --git a/docs/src/icons/moon.astro b/docs/src/icons/moon.astro
deleted file mode 100644
index 84cd71c..0000000
--- a/docs/src/icons/moon.astro
+++ /dev/null
@@ -1,22 +0,0 @@
----
-import type { IconProps } from "./utils";
-
-export type Props = IconProps;
-const { size = 24, ...rest } = Astro.props;
----
-
-
-
-
diff --git a/docs/src/icons/sun.astro b/docs/src/icons/sun.astro
deleted file mode 100644
index dcd6812..0000000
--- a/docs/src/icons/sun.astro
+++ /dev/null
@@ -1,30 +0,0 @@
----
-import type { IconProps } from "./utils";
-
-export type Props = IconProps;
-const { size = 24, ...rest } = Astro.props;
----
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/docs/src/icons/utils.ts b/docs/src/icons/utils.ts
deleted file mode 100644
index d35a56d..0000000
--- a/docs/src/icons/utils.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-import type { HTMLAttributes } from "astro/types";
-
-export type IconProps = HTMLAttributes<"svg"> & { size?: number };
diff --git a/docs/src/layouts/doc-layout.astro b/docs/src/layouts/doc-layout.astro
deleted file mode 100644
index 5a16375..0000000
--- a/docs/src/layouts/doc-layout.astro
+++ /dev/null
@@ -1,55 +0,0 @@
----
-import type { MarkdownLayoutProps } from "astro";
-import DocFooter from "components/doc-footer";
-import Header from "components/header";
-import Navigation from "components/navigation";
-import OnThisPage from "components/on-this-page";
-import { getGitUpdateDate } from "utils/get-git-update-date";
-import Layout from "./layout.astro";
-
-type Frontmatter = {
- description: string;
-};
-
-export type Props = MarkdownLayoutProps;
-const {
- frontmatter: { description },
- headings,
- file,
- url = "",
-} = Astro.props;
-
-const title =
- headings.find((heading) => heading.depth === 1)?.text || "@mrcaidev/hooks";
-const updateDate = await getGitUpdateDate(file);
-const updateIso = updateDate.toISOString();
-const anchors = headings.filter((heading) => [1, 2].includes(heading.depth));
----
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/docs/src/layouts/layout.astro b/docs/src/layouts/layout.astro
deleted file mode 100644
index 8e7803c..0000000
--- a/docs/src/layouts/layout.astro
+++ /dev/null
@@ -1,82 +0,0 @@
----
-import "@fontsource/inter/400.css";
-import "@fontsource/inter/500.css";
-import "@fontsource/inter/700.css";
-import "global.css";
-
-export type Props = {
- title: string;
- description: string;
-};
-const { title, description } = Astro.props;
-
-const canonicalUrl = new URL(Astro.url.pathname, Astro.site);
-const bannerUrl = new URL("/banner.png", Astro.site);
----
-
-
-
-
-
- {title} - @mrcaidev/hooks
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/docs/src/layouts/normal-layout.astro b/docs/src/layouts/normal-layout.astro
deleted file mode 100644
index de153e1..0000000
--- a/docs/src/layouts/normal-layout.astro
+++ /dev/null
@@ -1,20 +0,0 @@
----
-import Header from "components/header";
-import Layout from "./layout.astro";
-
-export type Props = {
- title: string;
- description: string;
-};
-const { title, description } = Astro.props;
----
-
-
-
-
-
-
-
-
-
-
diff --git a/docs/src/pages/404.astro b/docs/src/pages/404.astro
deleted file mode 100644
index 50ab079..0000000
--- a/docs/src/pages/404.astro
+++ /dev/null
@@ -1,25 +0,0 @@
----
-import NormalLayout from "layouts/normal-layout.astro";
----
-
-
-
-
- Page Not Found
- This page does not exist.
-
- Back to homepage
-
-
-
diff --git a/docs/src/pages/index.astro b/docs/src/pages/index.astro
deleted file mode 100644
index 03345e6..0000000
--- a/docs/src/pages/index.astro
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/docs/src/pages/installation.md b/docs/src/pages/installation.md
deleted file mode 100644
index d10d343..0000000
--- a/docs/src/pages/installation.md
+++ /dev/null
@@ -1,48 +0,0 @@
----
-description: Install the package @mrcaidev/hooks in your project, and start to use it.
----
-
-# Installation
-
-`@mrcaidev/hooks` is available in the npm registry. Use it with your favourite package manager!
-
-## Prerequisites
-
-You should have [React](https://www.npmjs.com/package/react) and [React DOM](https://www.npmjs.com/package/react-dom) installed beforehand.
-
-```sh
-npm i react react-dom # npm
-yarn add react react-dom # yarn
-pnpm add react react-dom # pnpm
-```
-
-For TypeScript projects, you may also want to install [@types/react](https://www.npmjs.com/package/@types/react) and [@types/react-dom](https://www.npmjs.com/package/@types/react-dom).
-
-```sh
-npm i @types/react @types/react-dom # npm
-yarn add @types/react @types/react-dom # yarn
-pnpm add @types/react @types/react-dom # pnpm
-```
-
-## Install the Package
-
-`@mrcaidev/hooks` is available in npm registry. Install it with your favourite package manager!
-
-```
-npm i @mrcaidev/hooks # npm
-yarn add @mrcaidev/hooks # yarn
-pnpm add @mrcaidev/hooks # pnpm
-```
-
-## Basic Usage
-
-Import hooks directly from the package.
-
-```ts
-import { useBoolean } from "@mrcaidev/hooks";
-
-export function Component() {
- // Immediately start using hooks in your component,
- // with full typing support!
-}
-```
diff --git a/docs/src/pages/introduction.md b/docs/src/pages/introduction.md
deleted file mode 100644
index ed21907..0000000
--- a/docs/src/pages/introduction.md
+++ /dev/null
@@ -1,32 +0,0 @@
----
-description: The package @mrcaidev/hooks is a collection of React utility hooks, which is easy to use, fully typed, server ready and lightweight.
----
-
-# Introdution
-
-`@mrcaidev/hooks` is a collection of React utility hooks.
-
-## Features
-
-- **Easy to use:** Good defaults, while highly customizable.
-- **Fully typed:** Enjoy 100% type safety with TypeScript.
-- **Server ready:** SSG/SSR support out of the box.
-- **Lightweight:** <3KB gzipped. Tree-shaking supported.
-
-## Try it Out
-
-> Interested, but too lazy to create another repository for it?
-
-No worries, we have prepared a [playground](https://codesandbox.io/p/sandbox/thirsty-chaum-9oplqq) for you to try out the hooks right in the browser.
-
-This is also the official CodeSandbox template to create a minimal reproducible example.
-
-## Contributing
-
-Please read the [contributing guide](https://github.com/mrcaidev/hooks/blob/master/.github/CONTRIBUTING.md) before any contribution.
-
-> Currently this is really just a personal project. I'm trying to build a library that can make me proud of, while also learning React and Web APIs. But if you decide to help out, I believe it will definitely make this project better, and we can surely learn a lot from each other.
-
-## License
-
-[MIT](https://github.com/mrcaidev/hooks/blob/master/LICENSE)
diff --git a/docs/src/pages/use-async-effect.md b/docs/src/pages/use-async-effect.md
deleted file mode 100644
index 9433f4b..0000000
--- a/docs/src/pages/use-async-effect.md
+++ /dev/null
@@ -1,46 +0,0 @@
----
-description: The same as useEffect, but for async functions.
----
-
-# useAsyncEffect
-
-The same as `useEffect`, but for async functions.
-
-## Signature
-
-```ts
-useAsyncEffect(effect: () => Promise, deps?: unknown[]): void;
-```
-
-## Parameters
-
-### effect
-
-An async function, such as data fetching, subscriptions and timers.
-
-Cleanup function is currently not supported.
-
-### deps
-
-Dependencies of effect. The function will be executed every time one of the dependencies changes.
-
-Default: `undefined`
-
-## Example
-
-```tsx
-import { useState } from "react";
-import { useAsyncEffect } from "@mrcaidev/hooks";
-
-export function Component() {
- const [message, setMessage] = useState("");
-
- useAsyncEffect(async () => {
- const data = await fetch("https://example.com");
- const json = await data.json();
- setMessage(json.message);
- }, []);
-
- return {message}
;
-}
-```
diff --git a/docs/src/pages/use-boolean.md b/docs/src/pages/use-boolean.md
deleted file mode 100644
index 900e2b5..0000000
--- a/docs/src/pages/use-boolean.md
+++ /dev/null
@@ -1,63 +0,0 @@
----
-description: Use a boolean value.
----
-
-# useBoolean
-
-Use a boolean value.
-
-Useful when managing the opening and closing of modals, drawers, etc.
-
-## Signature
-
-```ts
-useBoolean(defaultValue?: boolean): {
- value: boolean;
- set: (value: boolean) => void;
- toggle: () => void;
- on: () => void;
- off: () => void;
-};
-```
-
-## Parameters
-
-### defaultValue
-
-The initial boolean value.
-
-Default: `false`
-
-## Returns
-
-### value
-
-The stateful boolean value.
-
-### set
-
-Set value to either `true` or `false`.
-
-### toggle
-
-Toggle value between `true` and `false`.
-
-### on
-
-Set value to `true`.
-
-### off
-
-Set value to `false`.
-
-### Example
-
-```tsx
-import { useBoolean } from "@mrcaidev/hooks";
-
-export function Component() {
- const { value, toggle } = useBoolean();
-
- return {value ? "On" : "Off"} ;
-}
-```
diff --git a/docs/src/plugins/autolink-headings.ts b/docs/src/plugins/autolink-headings.ts
deleted file mode 100644
index 4e0b2bb..0000000
--- a/docs/src/plugins/autolink-headings.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-import type { RehypePlugin } from "@astrojs/markdown-remark";
-import { h } from "hastscript";
-import type { Options } from "rehype-autolink-headings";
-import rehypeAutolinkHeadings from "rehype-autolink-headings";
-
-const options: Options = {
- group: () => h("div", { class: "group relative" }),
- behavior: "after",
- properties: { class: "absolute top-0 bottom-0 left-0 right-0" },
- content: () => [
- h(
- "span",
- {
- ariaHidden: "true",
- class:
- "hidden group-hover:inline absolute top-1/2 -left-5 -translate-y-1/2",
- },
- "#"
- ),
- h("span", { class: "sr-only" }, "This link goes to this heading"),
- ],
-};
-
-export const autolinkHeadings: [RehypePlugin, Options] = [
- rehypeAutolinkHeadings,
- options,
-];
diff --git a/docs/src/plugins/inject-frontmatter.ts b/docs/src/plugins/inject-frontmatter.ts
deleted file mode 100644
index 2b2609c..0000000
--- a/docs/src/plugins/inject-frontmatter.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-import type { RemarkPlugin } from "@astrojs/markdown-remark";
-
-export const injectFrontmatter: RemarkPlugin = () => {
- return (_, { data }) => {
- (data.astro as any).frontmatter.layout = "layouts/doc-layout.astro";
- };
-};
diff --git a/docs/src/utils/get-git-update-date.ts b/docs/src/utils/get-git-update-date.ts
deleted file mode 100644
index 20de559..0000000
--- a/docs/src/utils/get-git-update-date.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-import { spawn } from "cross-spawn";
-
-export async function getGitUpdateDate(file: string) {
- return new Promise((resolve, reject) => {
- const child = spawn("git", ["log", "-1", "--format=%ci", file]);
- let stdout = "";
-
- child.stdout.on("data", (data) => {
- stdout += data;
- });
-
- child.on("close", () => {
- resolve(stdout ? new Date(stdout) : new Date());
- });
-
- child.on("error", reject);
- });
-}
diff --git a/docs/tailwind.config.cjs b/docs/tailwind.config.cjs
deleted file mode 100644
index 43862f3..0000000
--- a/docs/tailwind.config.cjs
+++ /dev/null
@@ -1,19 +0,0 @@
-/** @type {import("tailwindcss").Config} */
-module.exports = {
- content: [
- "src/{components,layouts,pages}/**/*.astro",
- "src/plugins/autolink-headings.ts",
- ],
- darkMode: "class",
- theme: {
- extend: {
- fontFamily: {
- sans: ["Inter", "sans-serif"],
- },
- },
- },
- plugins: [
- require("@tailwindcss/typography"),
- require("tailwindcss-radix-colors"),
- ],
-};
diff --git a/docs/tsconfig.json b/docs/tsconfig.json
deleted file mode 100644
index 7349ef8..0000000
--- a/docs/tsconfig.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "extends": "typescript-config-custom/base.json",
- "compilerOptions": {
- "baseUrl": "src",
- "noEmit": true,
- "resolveJsonModule": true,
- "target": "ESNext"
- },
- "include": ["src/**/*.ts", "src/**/*.json"]
-}
diff --git a/docs/vercel.json b/docs/vercel.json
deleted file mode 100644
index c9663ea..0000000
--- a/docs/vercel.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "redirects": [
- {
- "source": "/",
- "destination": "/introduction"
- }
- ],
- "git": {
- "deploymentEnabled": {
- "master": false
- }
- },
- "github": {
- "silent": true
- }
-}
diff --git a/eslint.config.js b/eslint.config.js
new file mode 100644
index 0000000..6059ebb
--- /dev/null
+++ b/eslint.config.js
@@ -0,0 +1,17 @@
+import js from "@eslint/js";
+import prettier from "eslint-config-prettier";
+import ts from "typescript-eslint";
+
+export default ts.config(
+ js.configs.recommended,
+ ...ts.configs.recommended,
+ prettier,
+ {
+ ignores: [
+ "coverage",
+ "dist",
+ "docs/.vitepress/cache",
+ "docs/.vitepress/dist",
+ ],
+ },
+);
diff --git a/lint-staged.config.js b/lint-staged.config.js
new file mode 100644
index 0000000..13a6275
--- /dev/null
+++ b/lint-staged.config.js
@@ -0,0 +1,4 @@
+export default {
+ "*.{js,ts}": ["eslint --fix", "prettier --write"],
+ "*.{json,md}": "prettier --write",
+};
diff --git a/package.json b/package.json
index c9a5051..bacd5e2 100644
--- a/package.json
+++ b/package.json
@@ -1,29 +1,78 @@
{
- "name": "root",
- "version": "0.0.0",
- "private": true,
+ "name": "@mrcaidev/hooks",
+ "version": "0.9.0",
+ "description": "React utility hooks",
+ "keywords": [
+ "react",
+ "hooks",
+ "typescript",
+ "ssr"
+ ],
+ "homepage": "https://hooks.mrcai.dev",
+ "bugs": "https://github.com/mrcaidev/hooks/issues",
+ "license": "MIT",
+ "author": {
+ "name": "Yuwang Cai",
+ "email": "mrcaidev@gmail.com",
+ "url": "https://mrcai.dev"
+ },
+ "files": [
+ "dist"
+ ],
+ "exports": {
+ ".": {
+ "import": "./dist/index.js",
+ "require": "./dist/index.umd.cjs"
+ }
+ },
+ "module": "dist/index.js",
+ "main": "dist/index.umd.cjs",
+ "types": "dist/index.d.ts",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/mrcaidev/hooks.git"
+ },
"type": "module",
+ "packageManager": "pnpm@9.12.3",
"scripts": {
- "build": "turbo run build",
- "build:package": "turbo run build --filter @mrcaidev/hooks",
- "build:docs": "turbo run build --filter docs",
- "build:docs:nav": "node scripts/generate-navigation-json.js > docs/src/data/navigation.json",
- "test": "turbo run test",
- "lint": "turbo run lint:script",
- "lint:script": "eslint . --fix --cache --cache-location ./node_modules/.cache/eslint/.eslintcache",
- "format": "turbo run format:script",
- "format:script": "prettier . --write --cache --plugin-search-dir=.",
- "prepare": "husky install"
+ "build": "vite build",
+ "test": "vitest",
+ "prepare": "husky",
+ "docs:dev": "vitepress dev docs",
+ "docs:build": "vitepress build docs",
+ "docs:preview": "vitepress preview docs"
},
"devDependencies": {
- "commitlint": "^17.4.2",
- "commitlint-config-custom": "workspace:^0.0.0",
- "eslint": "^8.33.0",
- "eslint-config-custom": "workspace:^0.0.0",
- "husky": "^8.0.3",
- "lint-staged": "^13.1.0",
- "prettier": "^2.8.3",
- "prettier-config-custom": "workspace:^0.0.0",
- "turbo": "^1.7.3"
+ "@commitlint/cli": "^19.5.0",
+ "@commitlint/config-conventional": "^19.5.0",
+ "@commitlint/types": "^19.5.0",
+ "@eslint/js": "^9.14.0",
+ "@testing-library/react": "^16.0.1",
+ "@testing-library/user-event": "^14.5.2",
+ "@types/eslint-config-prettier": "^6.11.3",
+ "@types/eslint__js": "^8.42.3",
+ "@types/node": "^22.9.0",
+ "@types/react": "^18.3.12",
+ "@types/react-dom": "^18.3.1",
+ "@vitest/coverage-v8": "^2.1.4",
+ "eslint": "^9.14.0",
+ "eslint-config-prettier": "^9.1.0",
+ "husky": "^9.1.6",
+ "jsdom": "^25.0.1",
+ "lint-staged": "^15.2.10",
+ "prettier": "^3.3.3",
+ "react": "^18.3.1",
+ "react-dom": "^18.3.1",
+ "typescript": "^5.6.3",
+ "typescript-eslint": "^8.13.0",
+ "vite": "^5.4.10",
+ "vite-plugin-dts": "^4.3.0",
+ "vite-tsconfig-paths": "^5.1.2",
+ "vitepress": "^1.5.0",
+ "vitest": "^2.1.4"
+ },
+ "peerDependencies": {
+ "react": ">=16.8.0",
+ "react-dom": ">=16.8.0"
}
}
diff --git a/packages/commitlint-config-custom/index.json b/packages/commitlint-config-custom/index.json
deleted file mode 100644
index c30e5a9..0000000
--- a/packages/commitlint-config-custom/index.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "extends": ["@commitlint/config-conventional"]
-}
diff --git a/packages/commitlint-config-custom/package.json b/packages/commitlint-config-custom/package.json
deleted file mode 100644
index e05fbcc..0000000
--- a/packages/commitlint-config-custom/package.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "name": "commitlint-config-custom",
- "version": "0.0.0",
- "private": true,
- "main": "index.json",
- "dependencies": {
- "@commitlint/config-conventional": "^17.4.2"
- },
- "devDependencies": {
- "commitlint": "^17.4.2"
- },
- "peerDependencies": {
- "commitlint": "^17.4.2"
- }
-}
diff --git a/packages/eslint-config-custom/index.json b/packages/eslint-config-custom/index.json
deleted file mode 100644
index 4c9e7b5..0000000
--- a/packages/eslint-config-custom/index.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "$schema": "https://json.schemastore.org/eslintrc",
- "extends": [
- "eslint:recommended",
- "plugin:@typescript-eslint/recommended",
- "plugin:react-hooks/recommended",
- "plugin:astro/recommended",
- "plugin:astro/jsx-a11y-recommended",
- "turbo",
- "prettier"
- ],
- "env": {
- "browser": true,
- "node": true,
- "es2022": true
- },
- "parserOptions": {
- "ecmaVersion": "latest",
- "sourceType": "module"
- },
- "overrides": [
- {
- "files": ["*.ts", "*.astro"],
- "rules": {
- "no-undef": "off",
- "@typescript-eslint/no-explicit-any": "off"
- }
- }
- ]
-}
diff --git a/packages/eslint-config-custom/package.json b/packages/eslint-config-custom/package.json
deleted file mode 100644
index 717ed60..0000000
--- a/packages/eslint-config-custom/package.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "name": "eslint-config-custom",
- "version": "0.0.0",
- "private": true,
- "main": "index.json",
- "dependencies": {
- "@typescript-eslint/eslint-plugin": "^5.50.0",
- "@typescript-eslint/parser": "^5.50.0",
- "eslint-config-prettier": "^8.6.0",
- "eslint-config-turbo": "^0.0.7",
- "eslint-plugin-astro": "^0.23.0",
- "eslint-plugin-jsx-a11y": "^6.7.1",
- "eslint-plugin-react-hooks": "^4.6.0"
- },
- "devDependencies": {
- "eslint": "^8.33.0",
- "typescript": "^4.9.5"
- },
- "peerDependencies": {
- "eslint": "^8.32.0",
- "typescript": "^4.9.4"
- }
-}
diff --git a/packages/hooks/README.md b/packages/hooks/README.md
deleted file mode 100644
index 79436bb..0000000
--- a/packages/hooks/README.md
+++ /dev/null
@@ -1,40 +0,0 @@
-# @mrcaidev/hooks
-
-A collection of React utility hooks.
-
-- **Easy to use:** Good defaults, while highly customizable.
-- **Fully typed:** Enjoy 100% type safety with TypeScript.
-- **Server ready:** SSG/SSR support out of the box.
-- **Lightweight:** <3KB gzipped. Tree-shaking supported.
-
-## Getting started
-
-Please follow the [documentation](https://hooks.mrcai.dev) to get started with `@mrcaidev/hooks`.
-
-## Built with
-
-[![TypeScript](https://img.shields.io/badge/typescript-3178c6?style=for-the-badge&logo=typescript&logoColor=ffffff)](https://www.typescriptlang.org/)
-[![React](https://img.shields.io/badge/react-23272f?style=for-the-badge&logo=react)](https://reactjs.org/)
-[![Vite](https://img.shields.io/badge/vite-646cff?style=for-the-badge&logo=vite&logoColor=ffffff)](https://vitejs.dev/)
-[![Vitest](https://img.shields.io/badge/vitest-6da13f?style=for-the-badge&logo=vitest&logoColor=ffffff)](https://vitest.dev/)
-[![Testing Library](https://shields.io/badge/testing%20library-e33433?style=for-the-badge&logo=testinglibrary&logoColor=ffffff)](https://testing-library.com/)
-[![Astro](https://img.shields.io/badge/astro-7e22ce?style=for-the-badge&logo=astro&logoColor=ffffff)](https://astro.build/)
-[![Tailwind CSS](https://shields.io/badge/tailwind%20css-38bdf8?style=for-the-badge&logo=tailwindcss&logoColor=ffffff)](https://tailwindcss.com/)
-[![pnpm](https://img.shields.io/badge/pnpm-f69220?style=for-the-badge&logo=pnpm&logoColor=ffffff)](https://pnpm.io/)
-[![Turborepo](https://img.shields.io/badge/turborepo-000000?style=for-the-badge&logo=turborepo)](https://turbo.build/repo)
-[![ESLint](https://shields.io/badge/eslint-4b32c3?style=for-the-badge&logo=eslint&logoColor=ffffff)](https://eslint.org/)
-[![Prettier](https://shields.io/badge/prettier-24292e?style=for-the-badge&logo=prettier)](https://prettier.io/)
-[![Commitlint](https://shields.io/badge/commitlint-121212?style=for-the-badge&logo=commitlint&logoColor=ffffff)](https://commitlint.js.org/)
-[![EditorConfig](https://shields.io/badge/editorconfig-000?style=for-the-badge&logo=editorconfig&logoColor=ffffff)](https://editorconfig.org/)
-[![Husky](https://shields.io/badge/husky-42b983?style=for-the-badge&logo=git&logoColor=ffffff)](https://typicode.github.io/husky/)
-[![Lint staged](https://shields.io/badge/lint%20staged-f54d27?style=for-the-badge&logo=git&logoColor=ffffff)](https://github.com/okonet/lint-staged)
-
-## Contributing
-
-Please read the [contributing guide](https://github.com/mrcaidev/hooks/tree/master/.github/CONTRIBUTING.md) before any contribution.
-
-> Currently this is really just a personal project. I'm trying to build a library that can make me proud of, while also learning React and Web APIs. But if you decide to help out, I believe it will definitely make this project better, and we can surely learn a lot from each other.
-
-## License
-
-[MIT](https://github.com/mrcaidev/hooks/tree/master/LICENSE)
diff --git a/packages/hooks/package.json b/packages/hooks/package.json
deleted file mode 100644
index d7d4559..0000000
--- a/packages/hooks/package.json
+++ /dev/null
@@ -1,68 +0,0 @@
-{
- "name": "@mrcaidev/hooks",
- "version": "0.9.0",
- "description": "React utility hooks",
- "keywords": [
- "react",
- "hooks",
- "typescript"
- ],
- "homepage": "https://hooks.mrcai.dev",
- "bugs": "https://github.com/mrcaidev/hooks/issues",
- "license": "MIT",
- "author": {
- "name": "Yuwang Cai",
- "email": "mrcaidev@gmail.com",
- "url": "https://mrcai.dev"
- },
- "files": [
- "dist"
- ],
- "type": "module",
- "main": "dist/index.umd.cjs",
- "module": "dist/index.js",
- "types": "dist/index.d.ts",
- "exports": {
- ".": {
- "import": "./dist/index.js",
- "require": "./dist/index.umd.cjs"
- }
- },
- "repository": {
- "type": "git",
- "url": "https://github.com/mrcaidev/hooks",
- "directory": "packages/hooks"
- },
- "scripts": {
- "build": "vite build",
- "test": "vitest run",
- "test:watch": "vitest",
- "test:coverage": "vitest run --coverage"
- },
- "devDependencies": {
- "@testing-library/react": "^13.4.0",
- "@types/node": "^18.11.18",
- "@types/react": "^18.0.27",
- "@types/react-dom": "^18.0.10",
- "@vitest/coverage-c8": "^0.28.4",
- "fast-glob": "^3.2.12",
- "jsdom": "^21.1.0",
- "react": "^18.2.0",
- "react-dom": "^18.2.0",
- "typescript": "^4.9.5",
- "typescript-config-custom": "workspace:^0.0.0",
- "vite": "^4.1.1",
- "vite-plugin-dts": "^1.7.2",
- "vite-tsconfig-paths": "^4.0.5",
- "vitest": "^0.28.4"
- },
- "peerDependencies": {
- "react": ">=16.8.0",
- "react-dom": ">=16.8.0"
- },
- "publishConfig": {
- "access": "public",
- "registry": "https://registry.npmjs.org/",
- "tag": "latest"
- }
-}
diff --git a/packages/hooks/plugins/remove-redundant-dts.ts b/packages/hooks/plugins/remove-redundant-dts.ts
deleted file mode 100644
index 78232cf..0000000
--- a/packages/hooks/plugins/remove-redundant-dts.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import glob from "fast-glob";
-import { rm } from "fs/promises";
-import { normalizePath } from "vite";
-
-export async function removeRedundantDts() {
- const files = await glob("*.d.ts", {
- cwd: "dist",
- ignore: ["!index.d.ts"],
- });
- files.forEach((file) => rm(normalizePath(`dist/${file}`)));
-}
diff --git a/packages/hooks/src/types/events.d.ts b/packages/hooks/src/types/events.d.ts
deleted file mode 100644
index 7f51949..0000000
--- a/packages/hooks/src/types/events.d.ts
+++ /dev/null
@@ -1,136 +0,0 @@
-export type EventMap = T extends HTMLVideoElement
- ? HTMLVideoElementEventMap
- : T extends HTMLBodyElement
- ? HTMLBodyElementEventMap
- : T extends HTMLMediaElement
- ? HTMLMediaElementEventMap
- : T extends SVGSVGElement
- ? SVGSVGElementEventMap
- : T extends Document
- ? DocumentEventMap
- : T extends HTMLElement
- ? HTMLElementEventMap
- : T extends IDBOpenDBRequest
- ? IDBOpenDBRequestEventMap
- : T extends MathMLElement
- ? MathMLElementEventMap
- : T extends OfflineAudioContext
- ? OfflineAudioContextEventMap
- : T extends ServiceWorker
- ? ServiceWorkerEventMap
- : T extends SVGElement
- ? SVGElementEventMap
- : T extends Window
- ? WindowEventMap
- : T extends Worker
- ? WorkerEventMap
- : T extends XMLHttpRequest
- ? XMLHttpRequestEventMap
- : T extends AbortSignal
- ? AbortSignalEventMap
- : T extends AbstractWorker
- ? AbstractWorkerEventMap
- : T extends Animation
- ? AnimationEventMap
- : T extends AudioScheduledSourceNode
- ? AudioScheduledSourceNodeEventMap
- : T extends AudioWorkletNode
- ? AudioWorkletNodeEventMap
- : T extends BaseAudioContext
- ? BaseAudioContextEventMap
- : T extends BroadcastChannel
- ? BroadcastChannelEventMap
- : T extends DocumentAndElementEventHandlers
- ? DocumentAndElementEventHandlersEventMap
- : T extends Element
- ? ElementEventMap
- : T extends EventSource
- ? EventSourceEventMap
- : T extends FileReader
- ? FileReaderEventMap
- : T extends FontFaceSet
- ? FontFaceSetEventMap
- : T extends GlobalEventHandlers
- ? GlobalEventHandlersEventMap
- : T extends IDBDatabase
- ? IDBDatabaseEventMap
- : T extends IDBRequest
- ? IDBRequestEventMap
- : T extends IDBTransaction
- ? IDBTransactionEventMap
- : T extends MediaDevices
- ? MediaDevicesEventMap
- : T extends MediaKeySession
- ? MediaKeySessionEventMap
- : T extends MediaQueryList
- ? MediaQueryListEventMap
- : T extends MediaRecorder
- ? MediaRecorderEventMap
- : T extends MediaSource
- ? MediaSourceEventMap
- : T extends MediaStream
- ? MediaStreamEventMap
- : T extends MediaStreamTrack
- ? MediaStreamTrackEventMap
- : T extends MessagePort
- ? MessagePortEventMap
- : T extends Notification
- ? NotificationEventMap
- : T extends PaymentRequest
- ? PaymentRequestEventMap
- : T extends Performance
- ? PerformanceEventMap
- : T extends PermissionStatus
- ? PermissionStatusEventMap
- : T extends PictureInPictureWindow
- ? PictureInPictureWindowEventMap
- : T extends RTCDTMFSender
- ? RTCDTMFSenderEventMap
- : T extends RTCDataChannel
- ? RTCDataChannelEventMap
- : T extends RTCDtlsTransport
- ? RTCDtlsTransportEventMap
- : T extends RTCIceTransport
- ? RTCIceTransportEventMap
- : T extends RTCPeerConnection
- ? RTCPeerConnectionEventMap
- : T extends RTCSctpTransport
- ? RTCSctpTransportEventMap
- : T extends RemotePlayback
- ? RemotePlaybackEventMap
- : T extends ScreenOrientation
- ? ScreenOrientationEventMap
- : T extends ServiceWorkerContainer
- ? ServiceWorkerContainerEventMap
- : T extends ServiceWorkerRegistration
- ? ServiceWorkerRegistrationEventMap
- : T extends ShadowRoot
- ? ShadowRootEventMap
- : T extends SourceBuffer
- ? SourceBufferEventMap
- : T extends SourceBufferList
- ? SourceBufferListEventMap
- : T extends SpeechSynthesis
- ? SpeechSynthesisEventMap
- : T extends SpeechSynthesisUtterance
- ? SpeechSynthesisUtteranceEventMap
- : T extends TextTrack
- ? TextTrackEventMap
- : T extends TextTrackCue
- ? TextTrackCueEventMap
- : T extends TextTrackList
- ? TextTrackListEventMap
- : T extends VisualViewport
- ? VisualViewportEventMap
- : T extends WebSocket
- ? WebSocketEventMap
- : T extends WindowEventHandlers
- ? WindowEventHandlersEventMap
- : T extends XMLHttpRequestEventTarget
- ? XMLHttpRequestEventTargetEventMap
- : Record;
-
-export type EventType = Extract<
- keyof EventMap,
- string
->;
diff --git a/packages/hooks/src/types/utils.d.ts b/packages/hooks/src/types/utils.d.ts
deleted file mode 100644
index 178d839..0000000
--- a/packages/hooks/src/types/utils.d.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-// eslint-disable-next-line @typescript-eslint/no-explicit-any
-export type Fn = (...args: any) => any;
-
-export type Async = (
- ...args: Parameters
-) => Promise>;
diff --git a/packages/hooks/src/use-boolean.ts b/packages/hooks/src/use-boolean.ts
deleted file mode 100644
index 384d804..0000000
--- a/packages/hooks/src/use-boolean.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import { useState } from "react";
-
-/**
- * Use a boolean value.
- */
-export function useBoolean(defaultValue = false) {
- const [value, setValue] = useState(defaultValue);
-
- const toggle = () => setValue((value) => !value);
- const on = () => setValue(true);
- const off = () => setValue(false);
-
- return { value, set: setValue, toggle, on, off };
-}
diff --git a/packages/hooks/src/use-click-outside.ts b/packages/hooks/src/use-click-outside.ts
deleted file mode 100644
index 11ba9e7..0000000
--- a/packages/hooks/src/use-click-outside.ts
+++ /dev/null
@@ -1,29 +0,0 @@
-import type { RefObject } from "react";
-import { useDocument } from "./use-document";
-import { useEventListener } from "./use-event-listener";
-import { useLatest } from "./use-latest";
-
-/**
- * Listen for click events outside of an element.
- */
-export function useClickOutside(
- ref: RefObject,
- callback: (e: MouseEvent) => void
-) {
- const callbackRef = useLatest(callback);
- const documentRef = useDocument();
-
- useEventListener(documentRef, "mousedown", (e) => {
- const container = ref.current;
- if (!container) {
- return;
- }
-
- const isClickInside = container.contains(e.target as Node);
- if (isClickInside) {
- return;
- }
-
- callbackRef.current(e);
- });
-}
diff --git a/packages/hooks/src/use-clipboard-text.ts b/packages/hooks/src/use-clipboard-text.ts
deleted file mode 100644
index 3cc51f1..0000000
--- a/packages/hooks/src/use-clipboard-text.ts
+++ /dev/null
@@ -1,51 +0,0 @@
-import { useEffect, useState } from "react";
-import { useDocument } from "./use-document";
-import { useEventListener } from "./use-event-listener";
-import { toError } from "./utils";
-
-export type UseClipboardTextOptions = {
- readOnMount?: boolean;
-};
-
-/**
- * Manage text on clipboard.
- */
-export function useClipboardText(options: UseClipboardTextOptions = {}) {
- const { readOnMount = true } = options;
-
- const [text, setText] = useState("");
- const [error, setError] = useState(undefined);
-
- const read = async () => {
- try {
- setError(undefined);
- const text = await navigator.clipboard.readText();
- setText(text);
- } catch (err) {
- setError(toError(err));
- }
- };
-
- const write = async (text: string) => {
- try {
- setError(undefined);
- await navigator.clipboard.writeText(text);
- setText(text);
- } catch (err) {
- setError(toError(err));
- }
- };
-
- useEffect(() => {
- if (!readOnMount) {
- return;
- }
- read();
- }, [readOnMount]);
-
- const documentRef = useDocument();
- useEventListener(documentRef, "cut", read);
- useEventListener(documentRef, "copy", read);
-
- return { text, error, read, write };
-}
diff --git a/packages/hooks/src/use-const.ts b/packages/hooks/src/use-const.ts
deleted file mode 100644
index 6a8e495..0000000
--- a/packages/hooks/src/use-const.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import { useMemo } from "react";
-
-/**
- * Make a value constant.
- */
-export function useConst(fn: () => T) {
- // eslint-disable-next-line react-hooks/exhaustive-deps
- return useMemo(fn, []);
-}
diff --git a/packages/hooks/src/use-debounce.ts b/packages/hooks/src/use-debounce.ts
deleted file mode 100644
index 7171f90..0000000
--- a/packages/hooks/src/use-debounce.ts
+++ /dev/null
@@ -1,28 +0,0 @@
-import { useEffect, useRef, useState } from "react";
-
-export type UseDebounceOptions = {
- timeout?: number;
- onMount?: boolean;
-};
-
-/**
- * Debounce a value.
- */
-export function useDebounce(value: T, options: UseDebounceOptions = {}) {
- const { timeout = 500, onMount = false } = options;
-
- const [debouncedValue, setDebouncedValue] = useState(value);
- const shouldSkipRef = useRef(true);
-
- useEffect(() => {
- if (!onMount && shouldSkipRef.current) {
- shouldSkipRef.current = false;
- return;
- }
-
- const timer = setTimeout(() => setDebouncedValue(value), timeout);
- return () => clearTimeout(timer);
- }, [value, timeout, onMount]);
-
- return debouncedValue;
-}
diff --git a/packages/hooks/src/use-element-size.ts b/packages/hooks/src/use-element-size.ts
deleted file mode 100644
index c63d34b..0000000
--- a/packages/hooks/src/use-element-size.ts
+++ /dev/null
@@ -1,29 +0,0 @@
-import { useEffect, useState, type RefObject } from "react";
-
-/**
- * Use the size of an element.
- */
-export function useElementSize(ref: RefObject) {
- const [width, setWidth] = useState(0);
- const [height, setHeight] = useState(0);
-
- useEffect(() => {
- const target = ref.current;
- if (!target) {
- return;
- }
-
- const observer = new ResizeObserver((entries) => {
- entries.forEach((entry) => {
- const { clientWidth, clientHeight } = entry.target;
- setWidth(clientWidth);
- setHeight(clientHeight);
- });
- });
-
- observer.observe(target);
- return () => observer.disconnect();
- }, [ref]);
-
- return { width, height };
-}
diff --git a/packages/hooks/src/use-event-listener.ts b/packages/hooks/src/use-event-listener.ts
deleted file mode 100644
index f5bea36..0000000
--- a/packages/hooks/src/use-event-listener.ts
+++ /dev/null
@@ -1,40 +0,0 @@
-import { useEffect, type DependencyList, type RefObject } from "react";
-import type { EventMap, EventType } from "./types/events";
-import { useLatest } from "./use-latest";
-
-export type UseEventListenerOptions = AddEventListenerOptions & {
- extraDeps?: DependencyList;
-};
-
-/**
- * Listen for any events.
- */
-export function useEventListener>(
- ref: RefObject,
- type: K,
- callback: (e: EventMap[K]) => void,
- options: UseEventListenerOptions = {}
-) {
- const {
- capture = false,
- once = false,
- passive = false,
- extraDeps = [],
- } = options;
-
- const callbackRef = useLatest(callback);
-
- useEffect(() => {
- const target = ref.current;
- if (!target) {
- return;
- }
-
- const listener = callbackRef.current as EventListener;
-
- target.addEventListener(type, listener, { capture, once, passive });
- return () => target.removeEventListener(type, listener);
-
- // eslint-disable-next-line react-hooks/exhaustive-deps
- }, [ref, type, callbackRef, capture, once, passive, ...extraDeps]);
-}
diff --git a/packages/hooks/src/use-focus-trap.ts b/packages/hooks/src/use-focus-trap.ts
deleted file mode 100644
index cdc5642..0000000
--- a/packages/hooks/src/use-focus-trap.ts
+++ /dev/null
@@ -1,40 +0,0 @@
-import type { RefObject } from "react";
-import { useEventListener } from "./use-event-listener";
-
-/**
- * Trap tab focus between two elements.
- */
-export function useFocusTrap(
- firstRef: RefObject,
- lastRef: RefObject
-) {
- useEventListener(firstRef, "keydown", (e) => {
- const first = firstRef.current;
- const last = lastRef.current;
- if (!first || !last) {
- return;
- }
-
- if (e.code !== "Tab" || !e.shiftKey) {
- return;
- }
-
- e.preventDefault();
- last.focus();
- });
-
- useEventListener(lastRef, "keydown", (e) => {
- const first = firstRef.current;
- const last = lastRef.current;
- if (!first || !last) {
- return;
- }
-
- if (e.code !== "Tab" || e.shiftKey) {
- return;
- }
-
- e.preventDefault();
- first.focus();
- });
-}
diff --git a/packages/hooks/src/use-interval.ts b/packages/hooks/src/use-interval.ts
deleted file mode 100644
index d34137c..0000000
--- a/packages/hooks/src/use-interval.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import { useEffect, type EffectCallback } from "react";
-import { useLatest } from "./use-latest";
-
-/**
- * Run an effect at a regular interval.
- */
-export function useInterval(effect: EffectCallback, timeout = 500) {
- const effectRef = useLatest(effect);
-
- useEffect(() => {
- const timer = setInterval(effectRef.current, timeout);
- return () => clearInterval(timer);
- }, [effectRef, timeout]);
-}
diff --git a/packages/hooks/src/use-is-mounted.ts b/packages/hooks/src/use-is-mounted.ts
deleted file mode 100644
index 7078213..0000000
--- a/packages/hooks/src/use-is-mounted.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import { useEffect, useRef } from "react";
-
-/**
- * Check if the component is mounted.
- */
-export function useIsMounted() {
- const isMountedRef = useRef(false);
-
- useEffect(() => {
- isMountedRef.current = true;
- return () => {
- isMountedRef.current = false;
- };
- }, []);
-
- return isMountedRef;
-}
diff --git a/packages/hooks/src/use-keydown.ts b/packages/hooks/src/use-keydown.ts
deleted file mode 100644
index f403eb1..0000000
--- a/packages/hooks/src/use-keydown.ts
+++ /dev/null
@@ -1,42 +0,0 @@
-import { useDocument } from "./use-document";
-import { useEventListener } from "./use-event-listener";
-import { useLatest } from "./use-latest";
-
-export type ModifierKeys = {
- ctrl?: boolean;
- shift?: boolean;
- alt?: boolean;
- meta?: boolean;
-};
-
-/**
- * Listen for keydown events.
- */
-export function useKeydown(
- code: string,
- callback: (e: KeyboardEvent) => void,
- modifier: ModifierKeys = {}
-) {
- const { ctrl = false, shift = false, alt = false, meta = false } = modifier;
-
- const callbackRef = useLatest(callback);
- const documentRef = useDocument();
-
- useEventListener(
- documentRef,
- "keydown",
- (e) => {
- if (
- e.code !== code ||
- e.ctrlKey !== ctrl ||
- e.shiftKey !== shift ||
- e.altKey !== alt ||
- e.metaKey !== meta
- ) {
- return;
- }
- callbackRef.current(e);
- },
- { extraDeps: [code, ctrl, shift, alt, meta] }
- );
-}
diff --git a/packages/hooks/src/use-local-storage.ts b/packages/hooks/src/use-local-storage.ts
deleted file mode 100644
index 70471b6..0000000
--- a/packages/hooks/src/use-local-storage.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-import { useStorage, type UseStorageOptions } from "./use-storage";
-
-export type UseLocalStorageOptions = Omit<
- UseStorageOptions,
- "storageName"
->;
-
-/**
- * Manage local storage.
- */
-export function useLocalStorage(
- key: string,
- options: UseLocalStorageOptions = {}
-) {
- return useStorage(key, { storageName: "localStorage", ...options });
-}
diff --git a/packages/hooks/src/use-selection.ts b/packages/hooks/src/use-selection.ts
deleted file mode 100644
index 692dc42..0000000
--- a/packages/hooks/src/use-selection.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-import { useState } from "react";
-import { useDocument } from "./use-document";
-import { useEventListener } from "./use-event-listener";
-
-export type UseSelectionOptions = {
- sticky?: boolean;
-};
-
-/**
- * Responds to user's text selection changes.
- */
-export function useSelection(options: UseSelectionOptions = {}) {
- const { sticky = false } = options;
-
- const [selection, setSelection] = useState("");
- const documentRef = useDocument();
-
- useEventListener(
- documentRef,
- "mouseup",
- () => {
- const selection = document.getSelection()?.toString() ?? "";
- if (sticky && !selection) {
- return;
- }
- setSelection(selection);
- },
- { extraDeps: [sticky] }
- );
-
- return selection;
-}
diff --git a/packages/hooks/src/use-session-storage.ts b/packages/hooks/src/use-session-storage.ts
deleted file mode 100644
index d93784a..0000000
--- a/packages/hooks/src/use-session-storage.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-import { useStorage, type UseStorageOptions } from "./use-storage";
-
-export type UseSessionStorageOptions = Omit<
- UseStorageOptions,
- "storageName"
->;
-
-/**
- * Manage session storage.
- */
-export function useSessionStorage(
- key: string,
- options: UseSessionStorageOptions = {}
-) {
- return useStorage(key, { storageName: "sessionStorage", ...options });
-}
diff --git a/packages/hooks/src/use-storage.ts b/packages/hooks/src/use-storage.ts
deleted file mode 100644
index 32c11f5..0000000
--- a/packages/hooks/src/use-storage.ts
+++ /dev/null
@@ -1,101 +0,0 @@
-import { useEffect, useState } from "react";
-import { useLatest } from "./use-latest";
-
-export type StorageName = "localStorage" | "sessionStorage";
-
-export type UseStorageOptions = {
- storageName: StorageName;
- defaultValue?: T | undefined;
- serializer?: (value: T) => string;
- deserializer?: (value: string) => T;
-};
-
-/**
- * Manage storage.
- */
-export function useStorage(key: string, options: UseStorageOptions) {
- const {
- storageName,
- defaultValue = undefined,
- serializer = JSON.stringify,
- deserializer = JSON.parse,
- } = options;
-
- const storage = getStorage(storageName);
-
- const [value, setValue] = useState(defaultValue);
- const deserializerRef = useLatest(deserializer);
-
- useEffect(() => {
- const storedValue = getItem(key, {
- storage,
- deserializer: deserializerRef.current,
- });
- setValue(storedValue ?? defaultValue);
- }, [key, storage, defaultValue, deserializerRef]);
-
- const set: typeof setValue = (action) => {
- const newValue = action instanceof Function ? action(value) : action;
- setItem(key, newValue, { storage, serializer });
- setValue(newValue);
- };
-
- const remove = () => set(undefined);
-
- return { value, set, remove };
-}
-
-function getStorage(storageName: StorageName) {
- try {
- const map = { localStorage, sessionStorage };
- return map[storageName];
- } catch {
- return undefined;
- }
-}
-
-type GetItemOptions = {
- storage: Storage | undefined;
- deserializer: (value: string) => T;
-};
-
-function getItem(key: string, options: GetItemOptions) {
- const { storage, deserializer } = options;
-
- if (!storage) {
- return null;
- }
-
- try {
- const value = storage.getItem(key);
- if (value === null) {
- return null;
- }
- return deserializer(value);
- } catch {
- return null;
- }
-}
-
-type SetItemOptions = {
- storage: Storage | undefined;
- serializer: (value: T) => string;
-};
-
-function setItem(key: string, value: T, options: SetItemOptions) {
- const { storage, serializer } = options;
-
- if (!storage) {
- return;
- }
-
- try {
- if (value === undefined) {
- storage.removeItem(key);
- return;
- }
- storage.setItem(key, serializer(value));
- } catch {
- return;
- }
-}
diff --git a/packages/hooks/src/use-theme.ts b/packages/hooks/src/use-theme.ts
deleted file mode 100644
index a3917f4..0000000
--- a/packages/hooks/src/use-theme.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-import { useLocalStorage } from "./use-local-storage";
-import { useMediaQuery } from "./use-media-query";
-
-export type Theme = "light" | "dark";
-
-export type UseThemeOptions = {
- defaultTheme?: Theme;
- storageKey?: string;
-};
-
-/**
- * Use current theme.
- */
-export function useTheme(options: UseThemeOptions = {}) {
- const { defaultTheme, storageKey = "theme" } = options;
-
- const isDarkOs = useMediaQuery("(prefers-color-scheme: dark)");
- const osTheme = isDarkOs ? "dark" : "light";
-
- const { value: theme, set } = useLocalStorage(storageKey, {
- defaultValue: defaultTheme ?? osTheme,
- serializer: (value) => value,
- deserializer: (value) => value as Theme,
- });
-
- const toggle = () => set((theme) => (theme === "dark" ? "light" : "dark"));
- const setLight = () => set("light");
- const setDark = () => set("dark");
-
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- return { theme: theme!, set, toggle, setLight, setDark };
-}
diff --git a/packages/hooks/src/use-throttle.ts b/packages/hooks/src/use-throttle.ts
deleted file mode 100644
index d727617..0000000
--- a/packages/hooks/src/use-throttle.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-import { useEffect, useRef, useState } from "react";
-
-export type UseThrottleOptions = {
- timeout?: number;
- onMount?: boolean;
-};
-
-/**
- * Throttle a value.
- */
-export function useThrottle(value: T, options: UseThrottleOptions = {}) {
- const { timeout = 500, onMount = false } = options;
-
- const shouldSkipRef = useRef(true);
- const isCoolingDownRef = useRef(false);
- const [throttledValue, setThrottledValue] = useState(value);
-
- useEffect(() => {
- if (!onMount && shouldSkipRef.current) {
- shouldSkipRef.current = false;
- return;
- }
-
- if (isCoolingDownRef.current) {
- return;
- }
-
- setThrottledValue(value);
-
- isCoolingDownRef.current = true;
- setTimeout(() => {
- isCoolingDownRef.current = false;
- }, timeout);
- }, [value, timeout, onMount]);
-
- return throttledValue;
-}
diff --git a/packages/hooks/src/use-timeout.ts b/packages/hooks/src/use-timeout.ts
deleted file mode 100644
index 0ed1dde..0000000
--- a/packages/hooks/src/use-timeout.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import { useEffect, type EffectCallback } from "react";
-import { useLatest } from "./use-latest";
-
-/**
- * Run an effect after a timeout.
- */
-export function useTimeout(effect: EffectCallback, timeout = 500) {
- const effectRef = useLatest(effect);
-
- useEffect(() => {
- const timer = setTimeout(effectRef.current, timeout);
- return () => clearTimeout(timer);
- }, [effectRef, timeout]);
-}
diff --git a/packages/hooks/src/use-title.ts b/packages/hooks/src/use-title.ts
deleted file mode 100644
index 0c3e676..0000000
--- a/packages/hooks/src/use-title.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import { useEffect } from "react";
-
-/**
- * Manage page title.
- */
-export function useTitle(title: string) {
- useEffect(() => {
- document.title = title;
- }, [title]);
-}
diff --git a/packages/hooks/src/use-unmount.ts b/packages/hooks/src/use-unmount.ts
deleted file mode 100644
index 558f6cc..0000000
--- a/packages/hooks/src/use-unmount.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import { useEffect } from "react";
-
-/**
- * Trigger effect before the component is unmounted.
- */
-export function useUnmount(cleanup: () => void) {
- // eslint-disable-next-line react-hooks/exhaustive-deps
- useEffect(() => cleanup, []);
-}
diff --git a/packages/hooks/src/use-unsafe-once-effect.ts b/packages/hooks/src/use-unsafe-once-effect.ts
deleted file mode 100644
index 37fa2fe..0000000
--- a/packages/hooks/src/use-unsafe-once-effect.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-import { useEffect, useRef, type EffectCallback } from "react";
-import { useLatest } from "./use-latest";
-
-/**
- * Trigger effect only once, even under React 18 strict dev mode.
- */
-export function useUnsafeOnceEffect(effect: EffectCallback) {
- const effectRef = useLatest(effect);
- const shouldSkipRef = useRef(false);
-
- useEffect(() => {
- if (shouldSkipRef.current) {
- return;
- }
- shouldSkipRef.current = true;
-
- return effectRef.current();
- }, [effectRef]);
-}
diff --git a/packages/hooks/src/use-update.ts b/packages/hooks/src/use-update.ts
deleted file mode 100644
index 30526f6..0000000
--- a/packages/hooks/src/use-update.ts
+++ /dev/null
@@ -1,24 +0,0 @@
-import { EffectCallback, useEffect, useRef } from "react";
-import { useLatest } from "./use-latest";
-import { useUnmount } from "./use-unmount";
-
-/**
- * Trigger effect after the component is updated.
- */
-export function useUpdate(effect: EffectCallback) {
- const effectRef = useLatest(effect);
- const shouldSkipRef = useRef(true);
-
- useEffect(() => {
- if (shouldSkipRef.current) {
- shouldSkipRef.current = false;
- return;
- }
-
- return effectRef.current();
- });
-
- useUnmount(() => {
- shouldSkipRef.current = true;
- });
-}
diff --git a/packages/hooks/src/utils.ts b/packages/hooks/src/utils.ts
deleted file mode 100644
index a192b70..0000000
--- a/packages/hooks/src/utils.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-export function toError(err: unknown) {
- return err instanceof Error ? err : new Error(String(err));
-}
diff --git a/packages/hooks/tests/use-clipboard-text.test.ts b/packages/hooks/tests/use-clipboard-text.test.ts
deleted file mode 100644
index 4d98e8c..0000000
--- a/packages/hooks/tests/use-clipboard-text.test.ts
+++ /dev/null
@@ -1,150 +0,0 @@
-import { act, fireEvent, renderHook, waitFor } from "@testing-library/react";
-import { useClipboardText } from "src";
-
-let clipboard = "hello";
-const readText = vi.fn(async () => clipboard);
-const writeText = vi.fn(async (text: string) => (clipboard = text));
-
-beforeAll(() => {
- vi.stubGlobal("navigator", {
- clipboard: {
- readText,
- writeText,
- },
- });
-});
-afterAll(() => {
- vi.unstubAllGlobals();
-});
-beforeEach(() => {
- clipboard = "hello";
- readText.mockClear();
- writeText.mockClear();
-});
-
-it("reads clipboard on mount", async () => {
- const { result } = renderHook(() => useClipboardText());
- await waitFor(() => expect(result.current.text).toEqual("hello"));
- expect(result.current.error).toEqual(undefined);
- expect(readText).toHaveBeenCalledTimes(1);
-});
-
-it("can disable read on mount", async () => {
- const { result } = renderHook(() => useClipboardText({ readOnMount: false }));
- expect(result.current.text).toEqual("");
- expect(result.current.error).toEqual(undefined);
- expect(readText).toHaveBeenCalledTimes(0);
-});
-
-it("responds to stateful readOnMount", async () => {
- const { result, rerender } = renderHook(
- (readOnMount) => useClipboardText({ readOnMount }),
- { initialProps: false }
- );
- expect(result.current.text).toEqual("");
- expect(result.current.error).toEqual(undefined);
- expect(readText).toHaveBeenCalledTimes(0);
-
- rerender(true);
- await waitFor(() => expect(result.current.text).toEqual("hello"));
- expect(result.current.error).toEqual(undefined);
- expect(readText).toHaveBeenCalledTimes(1);
-});
-
-it("can manually read", async () => {
- const { result } = renderHook(() => useClipboardText({ readOnMount: false }));
- expect(result.current.text).toEqual("");
- expect(result.current.error).toEqual(undefined);
- expect(readText).toHaveBeenCalledTimes(0);
-
- await act(async () => await result.current.read());
- await waitFor(() => expect(result.current.text).toEqual("hello"));
- expect(result.current.error).toEqual(undefined);
- expect(readText).toHaveBeenCalledTimes(1);
-});
-
-it("can manually write", async () => {
- const { result } = renderHook(() => useClipboardText());
- await waitFor(() => expect(result.current.text).toEqual("hello"));
- expect(result.current.error).toEqual(undefined);
- expect(writeText).toHaveBeenCalledTimes(0);
-
- await act(async () => await result.current.write("world"));
- await waitFor(() => expect(result.current.text).toEqual("world"));
- expect(result.current.error).toEqual(undefined);
- expect(writeText).toHaveBeenCalledTimes(1);
-});
-
-it("responds to cut events", async () => {
- const { result } = renderHook(() => useClipboardText());
- await waitFor(() => expect(result.current.text).toEqual("hello"));
- expect(result.current.error).toEqual(undefined);
-
- clipboard = "world";
- fireEvent.cut(document);
- await waitFor(() => expect(result.current.text).toEqual("world"));
- expect(result.current.error).toEqual(undefined);
-});
-
-it("responds to copy events", async () => {
- const { result } = renderHook(() => useClipboardText());
- await waitFor(() => expect(result.current.text).toEqual("hello"));
- expect(result.current.error).toEqual(undefined);
-
- clipboard = "world";
- fireEvent.copy(document);
- await waitFor(() => expect(result.current.text).toEqual("world"));
- expect(result.current.error).toEqual(undefined);
-});
-
-it("returns error when read fails", async () => {
- const error = new Error("read failed");
- readText.mockImplementationOnce(async () => {
- throw error;
- });
-
- const { result } = renderHook(() => useClipboardText());
- await waitFor(() => expect(result.current.error).toEqual(error));
- expect(result.current.text).toEqual("");
-});
-
-it("recovers from error on any successful read", async () => {
- readText.mockImplementationOnce(async () => {
- throw new Error("fail");
- });
-
- const { result } = renderHook(() => useClipboardText());
- await waitFor(() => expect(result.current.error).not.toEqual(undefined));
-
- await act(async () => await result.current.write("world"));
- await waitFor(() => expect(result.current.text).toEqual("world"));
- expect(result.current.error).toEqual(undefined);
-});
-
-it("returns error when write fails", async () => {
- const error = new Error("write failed");
- writeText.mockImplementationOnce(async () => {
- throw error;
- });
-
- const { result } = renderHook(() => useClipboardText());
- await waitFor(() => expect(result.current.text).toEqual("hello"));
- expect(result.current.error).toEqual(undefined);
-
- await act(async () => await result.current.write("world"));
- await waitFor(() => expect(result.current.error).toEqual(error));
- expect(result.current.text).toEqual("hello");
-});
-
-it("recovers from error on any successful write", async () => {
- readText.mockImplementationOnce(async () => {
- throw new Error("fail");
- });
-
- const { result } = renderHook(() => useClipboardText());
- await waitFor(() => expect(result.current.error).not.toEqual(undefined));
-
- await act(async () => await result.current.write("world"));
- await waitFor(() => expect(result.current.text).toEqual("world"));
- expect(result.current.error).toEqual(undefined);
-});
diff --git a/packages/hooks/tests/use-const.test.ts b/packages/hooks/tests/use-const.test.ts
deleted file mode 100644
index efe7f94..0000000
--- a/packages/hooks/tests/use-const.test.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import { renderHook } from "@testing-library/react";
-import { useConst } from "src";
-
-it("remembers the value", () => {
- const { result } = renderHook(() => useConst(() => 1));
- expect(result.current).toEqual(1);
-});
-
-it("computes only once across re-renders", () => {
- const compute = vi.fn();
-
- const { rerender } = renderHook(() => useConst(compute));
- expect(compute).toHaveBeenCalledTimes(1);
-
- rerender();
- expect(compute).toHaveBeenCalledTimes(1);
-});
diff --git a/packages/hooks/tests/use-element-size.test.ts b/packages/hooks/tests/use-element-size.test.ts
deleted file mode 100644
index 8fa33da..0000000
--- a/packages/hooks/tests/use-element-size.test.ts
+++ /dev/null
@@ -1,29 +0,0 @@
-import { renderHook, screen } from "@testing-library/react";
-import { useElementSize } from "src";
-
-beforeAll(() => {
- document.body.innerHTML = `
-
- `;
-
- vi.stubGlobal("ResizeObserver", function (this: Record) {
- this.observe = () => 0;
- this.disconnect = () => 0;
- });
-});
-afterAll(() => {
- vi.unstubAllGlobals();
-});
-
-it("reads the size of element", () => {
- const target = screen.getByRole("textbox");
- const { result } = renderHook(() => useElementSize({ current: target }));
- expect(result.current.width).not.toEqual(undefined);
- expect(result.current.height).not.toEqual(undefined);
-});
-
-it("does not throw with null ref", () => {
- const { result } = renderHook(() => useElementSize({ current: null }));
- expect(result.current.width).not.toEqual(undefined);
- expect(result.current.height).not.toEqual(undefined);
-});
diff --git a/packages/hooks/tests/use-event-listener.test.ts b/packages/hooks/tests/use-event-listener.test.ts
deleted file mode 100644
index 08bcf9f..0000000
--- a/packages/hooks/tests/use-event-listener.test.ts
+++ /dev/null
@@ -1,132 +0,0 @@
-import { fireEvent, renderHook, screen } from "@testing-library/react";
-import { useEventListener } from "src";
-
-beforeAll(() => {
- document.body.innerHTML = `
-
- `;
-});
-
-it("responds to document events", () => {
- const callback = vi.fn();
-
- renderHook(() => useEventListener({ current: document }, "click", callback));
- expect(callback).toHaveBeenCalledTimes(0);
-
- fireEvent.click(document.body);
- expect(callback).toHaveBeenCalledTimes(1);
-
- fireEvent.click(document.body);
- expect(callback).toHaveBeenCalledTimes(2);
-});
-
-it("responds to element events", () => {
- const target = screen.getByTestId("target");
- const callback = vi.fn();
-
- renderHook(() => useEventListener({ current: target }, "click", callback));
- expect(callback).toHaveBeenCalledTimes(0);
-
- fireEvent.click(target);
- expect(callback).toHaveBeenCalledTimes(1);
-
- fireEvent.click(target);
- expect(callback).toHaveBeenCalledTimes(2);
-});
-
-it("responds to window events", () => {
- const callback = vi.fn();
-
- renderHook(() => useEventListener({ current: window }, "click", callback));
- expect(callback).toHaveBeenCalledTimes(0);
-
- fireEvent.click(window);
- expect(callback).toHaveBeenCalledTimes(1);
-
- fireEvent.click(window);
- expect(callback).toHaveBeenCalledTimes(2);
-});
-
-it("does not throw with null ref", () => {
- const callback = vi.fn();
-
- renderHook(() => useEventListener({ current: null }, "click", callback));
- expect(callback).toHaveBeenCalledTimes(0);
-
- fireEvent.click(document.body);
- expect(callback).toHaveBeenCalledTimes(0);
-});
-
-it("responds to stateful event type", () => {
- const callback = vi.fn();
-
- const { rerender } = renderHook(
- (type) => useEventListener({ current: document }, type, callback),
- { initialProps: "click" as keyof DocumentEventMap }
- );
- expect(callback).toHaveBeenCalledTimes(0);
-
- fireEvent.click(document.body);
- expect(callback).toHaveBeenCalledTimes(1);
-
- rerender("keydown");
- fireEvent.keyDown(document.body);
- expect(callback).toHaveBeenCalledTimes(2);
-
- fireEvent.click(document.body);
- expect(callback).toHaveBeenCalledTimes(2);
-});
-
-it.skip("works with capture option", () => {
- const target = screen.getByTestId("target");
- const callOrder: string[] = [];
- const documentCallback = vi.fn(() => callOrder.push("document"));
- const targetCallback = vi.fn(() => callOrder.push("target"));
-
- renderHook(() =>
- useEventListener({ current: document }, "click", documentCallback, {
- capture: true,
- })
- );
- renderHook(() =>
- useEventListener({ current: target }, "click", targetCallback)
- );
- expect(documentCallback).toHaveBeenCalledTimes(0);
- expect(targetCallback).toHaveBeenCalledTimes(0);
- expect(callOrder).toEqual([]);
-
- fireEvent.click(target);
- expect(documentCallback).toHaveBeenCalledTimes(1);
- expect(targetCallback).toHaveBeenCalledTimes(1);
- expect(callOrder).toEqual(["document", "target"]);
-});
-
-it.skip("works with passive option", () => {
- const callback = vi.fn((e: MouseEvent) => e.preventDefault());
-
- renderHook(() =>
- useEventListener({ current: document }, "click", callback, {
- passive: true,
- })
- );
- expect(callback).toHaveBeenCalledTimes(0);
-
- fireEvent.click(document.body);
- expect(callback).toHaveBeenCalledTimes(1);
- expect(callback).toThrow();
-});
-
-it.skip("works with once option", () => {
- const callback = vi.fn();
-
- renderHook(() =>
- useEventListener({ current: document }, "click", callback, { once: true })
- );
- expect(callback).toHaveBeenCalledTimes(0);
-
- fireEvent.click(document.body);
- expect(callback).toHaveBeenCalledTimes(1);
-
- fireEvent.click(document.body);
- expect(callback).toHaveBeenCalledTimes(1);
-});
diff --git a/packages/hooks/tests/use-focus-trap.test.ts b/packages/hooks/tests/use-focus-trap.test.ts
deleted file mode 100644
index 9f6f179..0000000
--- a/packages/hooks/tests/use-focus-trap.test.ts
+++ /dev/null
@@ -1,51 +0,0 @@
-import { fireEvent, renderHook, screen } from "@testing-library/react";
-import { useFocusTrap } from "src";
-
-beforeAll(() => {
- document.body.innerHTML = `
- First
- Middle
- Last
- `;
-});
-
-it("traps the focus", () => {
- const first = screen.getByTestId("first");
- const last = screen.getByTestId("last");
- first.focus();
-
- renderHook(() => useFocusTrap({ current: first }, { current: last }));
- expect(document.activeElement).toEqual(first);
-
- fireEvent.keyDown(first, { code: "Tab", shiftKey: true });
- expect(document.activeElement).toEqual(last);
-
- fireEvent.keyDown(last, { code: "Tab" });
- expect(document.activeElement).toEqual(first);
-});
-
-it("does not throw on other keydown events", () => {
- const first = screen.getByTestId("first");
- const last = screen.getByTestId("last");
- first.focus();
-
- renderHook(() => useFocusTrap({ current: first }, { current: last }));
- expect(document.activeElement).toEqual(first);
-
- fireEvent.keyDown(first, { code: "Enter" });
- expect(document.activeElement).toEqual(first);
-
- fireEvent.keyDown(last, { code: "Escape" });
- expect(document.activeElement).toEqual(first);
-});
-
-it("does not throw with null ref", () => {
- const last = screen.getByTestId("last");
- last.focus();
-
- renderHook(() => useFocusTrap({ current: null }, { current: null }));
- expect(document.activeElement).toEqual(last);
-
- fireEvent.keyDown(last, { code: "Tab" });
- expect(document.activeElement).toEqual(last);
-});
diff --git a/packages/hooks/tests/use-hover.test.ts b/packages/hooks/tests/use-hover.test.ts
deleted file mode 100644
index d39a370..0000000
--- a/packages/hooks/tests/use-hover.test.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-import { fireEvent, renderHook, screen } from "@testing-library/react";
-import { useHover } from "src";
-
-beforeAll(() => {
- document.body.innerHTML = `
-
- `;
-});
-
-it("responds to hover events", () => {
- const target = screen.getByTestId("target");
-
- const { result } = renderHook(() => useHover({ current: target }));
- expect(result.current).toEqual(false);
-
- fireEvent.mouseEnter(target);
- expect(result.current).toEqual(true);
-
- fireEvent.mouseLeave(target);
- expect(result.current).toEqual(false);
-});
-
-it("does not throw with null ref", () => {
- const target = screen.getByTestId("target");
-
- const { result } = renderHook(() => useHover({ current: null }));
- expect(result.current).toEqual(false);
-
- fireEvent.mouseEnter(target);
- expect(result.current).toEqual(false);
-
- fireEvent.mouseLeave(target);
- expect(result.current).toEqual(false);
-});
diff --git a/packages/hooks/tests/use-interval.test.ts b/packages/hooks/tests/use-interval.test.ts
deleted file mode 100644
index 0044a53..0000000
--- a/packages/hooks/tests/use-interval.test.ts
+++ /dev/null
@@ -1,50 +0,0 @@
-import { renderHook } from "@testing-library/react";
-import { useInterval } from "src";
-
-beforeAll(() => {
- vi.useFakeTimers();
-});
-afterAll(() => {
- vi.useRealTimers();
-});
-afterEach(() => {
- vi.clearAllTimers();
-});
-
-it("triggers effect after every timeout", () => {
- const effect = vi.fn();
-
- renderHook(() => useInterval(effect));
- expect(effect).toHaveBeenCalledTimes(0);
-
- vi.advanceTimersByTime(499);
- expect(effect).toHaveBeenCalledTimes(0);
-
- vi.advanceTimersByTime(1);
- expect(effect).toHaveBeenCalledTimes(1);
-
- vi.advanceTimersByTime(499);
- expect(effect).toHaveBeenCalledTimes(1);
-
- vi.advanceTimersByTime(1);
- expect(effect).toHaveBeenCalledTimes(2);
-});
-
-it("can customize timeout", () => {
- const effect = vi.fn();
-
- renderHook(() => useInterval(effect, 100));
- expect(effect).toHaveBeenCalledTimes(0);
-
- vi.advanceTimersByTime(99);
- expect(effect).toHaveBeenCalledTimes(0);
-
- vi.advanceTimersByTime(1);
- expect(effect).toHaveBeenCalledTimes(1);
-
- vi.advanceTimersByTime(99);
- expect(effect).toHaveBeenCalledTimes(1);
-
- vi.advanceTimersByTime(1);
- expect(effect).toHaveBeenCalledTimes(2);
-});
diff --git a/packages/hooks/tests/use-is-mounted.test.ts b/packages/hooks/tests/use-is-mounted.test.ts
deleted file mode 100644
index 164640c..0000000
--- a/packages/hooks/tests/use-is-mounted.test.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-import { renderHook } from "@testing-library/react";
-import { useIsMounted } from "src";
-
-it("returns true on mount", () => {
- const { result } = renderHook(() => useIsMounted());
- expect(result.current.current).toEqual(true);
-});
-
-it("returns true on update", () => {
- const { result, rerender } = renderHook(() => useIsMounted());
- expect(result.current.current).toEqual(true);
-
- rerender();
- expect(result.current.current).toEqual(true);
-});
-
-it("returns false on unmount", () => {
- const { result, unmount } = renderHook(() => useIsMounted());
- expect(result.current.current).toEqual(true);
-
- unmount();
- expect(result.current.current).toEqual(false);
-});
diff --git a/packages/hooks/tests/use-keydown.test.ts b/packages/hooks/tests/use-keydown.test.ts
deleted file mode 100644
index 7c25576..0000000
--- a/packages/hooks/tests/use-keydown.test.ts
+++ /dev/null
@@ -1,95 +0,0 @@
-import { fireEvent, renderHook } from "@testing-library/react";
-import { useKeydown } from "src";
-
-it("responds to target keydown", () => {
- const callback = vi.fn();
-
- renderHook(() => useKeydown("Tab", callback));
- expect(callback).toHaveBeenCalledTimes(0);
-
- fireEvent.keyDown(document.body, { code: "Tab" });
- expect(callback).toHaveBeenCalledTimes(1);
-
- fireEvent.keyDown(document.body, { code: "Tab" });
- expect(callback).toHaveBeenCalledTimes(2);
-});
-
-it("does not respond to irrelevant keydown", () => {
- const callback = vi.fn();
-
- renderHook(() => useKeydown("Tab", callback));
- expect(callback).toHaveBeenCalledTimes(0);
-
- fireEvent.keyDown(document.body, { code: "Enter" });
- expect(callback).toHaveBeenCalledTimes(0);
-
- fireEvent.keyDown(document.body, { code: "Escape" });
- expect(callback).toHaveBeenCalledTimes(0);
-});
-
-it("responds to stateful key code", () => {
- const callback = vi.fn();
-
- const { rerender } = renderHook((code) => useKeydown(code, callback), {
- initialProps: "Tab",
- });
- expect(callback).toHaveBeenCalledTimes(0);
-
- fireEvent.keyDown(document.body, { code: "Tab" });
- expect(callback).toHaveBeenCalledTimes(1);
-
- rerender("Enter");
- fireEvent.keyDown(document.body, { code: "Enter" });
- expect(callback).toHaveBeenCalledTimes(2);
-
- fireEvent.keyDown(document.body, { code: "Tab" });
- expect(callback).toHaveBeenCalledTimes(2);
-});
-
-it("requires pressed modifier keys to be exactly the same", () => {
- const callback = vi.fn();
-
- renderHook(() => useKeydown("Tab", callback, { ctrl: true, shift: true }));
- expect(callback).toHaveBeenCalledTimes(0);
-
- fireEvent.keyDown(document.body, { code: "Tab" });
- expect(callback).toHaveBeenCalledTimes(0);
-
- fireEvent.keyDown(document.body, { code: "Tab", ctrlKey: true });
- expect(callback).toHaveBeenCalledTimes(0);
-
- fireEvent.keyDown(document.body, {
- code: "Tab",
- ctrlKey: true,
- shiftKey: true,
- });
- expect(callback).toHaveBeenCalledTimes(1);
-
- fireEvent.keyDown(document.body, {
- code: "Tab",
- ctrlKey: true,
- shiftKey: true,
- altKey: true,
- });
- expect(callback).toHaveBeenCalledTimes(1);
-});
-
-it("responds to stateful modifier keys", () => {
- const callback = vi.fn();
-
- const { rerender } = renderHook(
- (ctrl) => useKeydown("Tab", callback, { ctrl }),
- { initialProps: false }
- );
- expect(callback).toHaveBeenCalledTimes(0);
-
- fireEvent.keyDown(document.body, { code: "Tab" });
- expect(callback).toHaveBeenCalledTimes(1);
-
- rerender(true);
- fireEvent.keyDown(document.body, { code: "Tab", ctrlKey: true });
- expect(callback).toHaveBeenCalledTimes(2);
-
- fireEvent.keyDown(document.body, { code: "Tab" });
- expect(callback).toHaveBeenCalledTimes(2);
-});
diff --git a/packages/hooks/tests/use-local-storage.test.ts b/packages/hooks/tests/use-local-storage.test.ts
deleted file mode 100644
index e527351..0000000
--- a/packages/hooks/tests/use-local-storage.test.ts
+++ /dev/null
@@ -1,142 +0,0 @@
-import { act, renderHook } from "@testing-library/react";
-import { useLocalStorage } from "src";
-
-afterEach(() => localStorage.clear());
-
-describe("without stored value", () => {
- it("defaults to undefined", () => {
- const { result } = renderHook(() => useLocalStorage("age"));
- expect(result.current.value).toEqual(undefined);
- expect(localStorage.getItem("age")).toEqual(null);
- });
-
- it("can customize default value", () => {
- const { result } = renderHook(() =>
- useLocalStorage("age", { defaultValue: 24 })
- );
- expect(result.current.value).toEqual(24);
- expect(localStorage.getItem("age")).toEqual(null);
- });
-
- it("responds to stateful default value", () => {
- const { result, rerender } = renderHook(
- (defaultValue) => useLocalStorage("age", { defaultValue }),
- { initialProps: 24 }
- );
- expect(result.current.value).toEqual(24);
- expect(localStorage.getItem("age")).toEqual(null);
-
- rerender(18);
- expect(result.current.value).toEqual(18);
- expect(localStorage.getItem("age")).toEqual(null);
- });
-
- it("can create value in storage when setting", () => {
- const { result } = renderHook(() => useLocalStorage("age"));
- expect(result.current.value).toEqual(undefined);
- expect(localStorage.getItem("age")).toEqual(null);
-
- act(() => result.current.set(18));
- expect(result.current.value).toEqual(18);
- expect(localStorage.getItem("age")).toEqual("18");
- });
-
- it("does nothing when removing", () => {
- const { result } = renderHook(() => useLocalStorage("age"));
- expect(result.current.value).toEqual(undefined);
- expect(localStorage.getItem("age")).toEqual(null);
-
- act(() => result.current.remove());
- expect(result.current.value).toEqual(undefined);
- expect(localStorage.getItem("age")).toEqual(null);
- });
-});
-
-describe("with stored value", () => {
- beforeEach(() => localStorage.setItem("age", "18"));
-
- it("defaults to stored value", () => {
- const { result } = renderHook(() => useLocalStorage("age"));
- expect(result.current.value).toEqual(18);
- expect(localStorage.getItem("age")).toEqual("18");
- });
-
- it("responds to stateful storage key", () => {
- const { result, rerender } = renderHook((key) => useLocalStorage(key), {
- initialProps: "age",
- });
- expect(result.current.value).toEqual(18);
- expect(localStorage.getItem("age")).toEqual("18");
-
- rerender("name");
- expect(result.current.value).toEqual(undefined);
- expect(localStorage.getItem("name")).toEqual(null);
- });
-
- it("ignores default value", () => {
- const { result } = renderHook(() =>
- useLocalStorage("age", { defaultValue: 24 })
- );
- expect(result.current.value).toEqual(18);
- expect(localStorage.getItem("age")).toEqual("18");
- });
-
- it("can customize serializer and deserializer", () => {
- const { result } = renderHook(() =>
- useLocalStorage
("age", {
- serializer: (num) => String(num + 1),
- deserializer: (str) => Number(str) - 1,
- })
- );
- expect(result.current.value).toEqual(17);
- expect(localStorage.getItem("age")).toEqual("18");
-
- act(() => result.current.set(24));
- expect(result.current.value).toEqual(24);
- expect(localStorage.getItem("age")).toEqual("25");
-
- act(() => result.current.remove());
- expect(result.current.value).toEqual(undefined);
- expect(localStorage.getItem("age")).toEqual(null);
- });
-
- it("can set storage", () => {
- const { result } = renderHook(() => useLocalStorage("age"));
- expect(result.current.value).toEqual(18);
- expect(localStorage.getItem("age")).toEqual("18");
-
- act(() => result.current.set(24));
- expect(result.current.value).toEqual(24);
- expect(localStorage.getItem("age")).toEqual("24");
- });
-
- it("can set storage with a function", () => {
- const { result } = renderHook(() => useLocalStorage("age"));
- expect(result.current.value).toEqual(18);
- expect(localStorage.getItem("age")).toEqual("18");
-
- act(() => result.current.set((prev: number) => prev + 6));
- expect(result.current.value).toEqual(24);
- expect(localStorage.getItem("age")).toEqual("24");
- });
-
- it("can remove storage", () => {
- const { result } = renderHook(() => useLocalStorage("age"));
- expect(result.current.value).toEqual(18);
- expect(localStorage.getItem("age")).toEqual("18");
-
- act(() => result.current.remove());
- expect(result.current.value).toEqual(undefined);
- expect(localStorage.getItem("age")).toEqual(null);
- });
-
- it("can remove storage by setting value to undefined", () => {
- const { result } = renderHook(() => useLocalStorage("age"));
- expect(result.current.value).toEqual(18);
- expect(localStorage.getItem("age")).toEqual("18");
-
- act(() => result.current.set(undefined));
- expect(result.current.value).toEqual(undefined);
- expect(localStorage.getItem("age")).toEqual(null);
- });
-});
diff --git a/packages/hooks/tests/use-media-query.test.ts b/packages/hooks/tests/use-media-query.test.ts
deleted file mode 100644
index 9bcddcc..0000000
--- a/packages/hooks/tests/use-media-query.test.ts
+++ /dev/null
@@ -1,33 +0,0 @@
-import { renderHook } from "@testing-library/react";
-import { useMediaQuery } from "src";
-import { matchMedia } from "./utils/match-media";
-
-beforeAll(() => {
- vi.stubGlobal("matchMedia", matchMedia);
-});
-afterAll(() => {
- vi.unstubAllGlobals();
-});
-beforeEach(() => {
- window.innerWidth = 1024;
-});
-
-it("returns true if matched", () => {
- const { result } = renderHook(() => useMediaQuery("(max-width: 1280px)"));
- expect(result.current).toEqual(true);
-});
-
-it("returns false if not matched", () => {
- const { result } = renderHook(() => useMediaQuery("(max-width: 640px)"));
- expect(result.current).toEqual(false);
-});
-
-it("responds to stateful query", () => {
- const { result, rerender } = renderHook((query) => useMediaQuery(query), {
- initialProps: "max-width: 1280px",
- });
- expect(result.current).toEqual(true);
-
- rerender("max-width: 640px");
- expect(result.current).toEqual(false);
-});
diff --git a/packages/hooks/tests/use-selection.test.ts b/packages/hooks/tests/use-selection.test.ts
deleted file mode 100644
index fb341b9..0000000
--- a/packages/hooks/tests/use-selection.test.ts
+++ /dev/null
@@ -1,69 +0,0 @@
-import { fireEvent, renderHook, screen } from "@testing-library/react";
-import { useSelection } from "src";
-
-beforeAll(() => {
- document.body.innerHTML = `
- Hello
- `;
-});
-
-function selectOneLetter() {
- const text = screen.getByText("Hello").firstChild as Text;
- document.getSelection()?.setBaseAndExtent(text, 0, text, 1);
- fireEvent.mouseUp(document);
-}
-
-function selectTwoLetters() {
- const text = screen.getByText("Hello").firstChild as Text;
- document.getSelection()?.setBaseAndExtent(text, 0, text, 2);
- fireEvent.mouseUp(document);
-}
-
-function cancelSelection() {
- document.getSelection()?.removeAllRanges();
- fireEvent.mouseUp(document);
-}
-
-it("responds to selection changes", () => {
- const { result } = renderHook(() => useSelection());
- expect(result.current).toEqual("");
-
- selectOneLetter();
- expect(result.current).toEqual("H");
-
- cancelSelection();
- expect(result.current).toEqual("");
-
- selectTwoLetters();
- expect(result.current).toEqual("He");
-});
-
-it("can keep selection after cancelling selection", () => {
- const { result } = renderHook(() => useSelection({ sticky: true }));
- selectOneLetter();
- expect(result.current).toEqual("H");
-
- cancelSelection();
- expect(result.current).toEqual("H");
-});
-
-it("responds to stateful sticky", () => {
- const { result, rerender } = renderHook(
- (sticky) => useSelection({ sticky }),
- { initialProps: false }
- );
- selectOneLetter();
- expect(result.current).toEqual("H");
-
- cancelSelection();
- expect(result.current).toEqual("");
-
- rerender(true);
- expect(result.current).toEqual("");
-
- selectOneLetter();
- expect(result.current).toEqual("H");
-
- cancelSelection();
- expect(result.current).toEqual("H");
-});
diff --git a/packages/hooks/tests/use-session-storage.test.ts b/packages/hooks/tests/use-session-storage.test.ts
deleted file mode 100644
index e5495c0..0000000
--- a/packages/hooks/tests/use-session-storage.test.ts
+++ /dev/null
@@ -1,142 +0,0 @@
-import { act, renderHook } from "@testing-library/react";
-import { useSessionStorage } from "src";
-
-afterEach(() => sessionStorage.clear());
-
-describe("without stored value", () => {
- it("defaults to undefined", () => {
- const { result } = renderHook(() => useSessionStorage("age"));
- expect(result.current.value).toEqual(undefined);
- expect(sessionStorage.getItem("age")).toEqual(null);
- });
-
- it("can customize default value", () => {
- const { result } = renderHook(() =>
- useSessionStorage("age", { defaultValue: 24 })
- );
- expect(result.current.value).toEqual(24);
- expect(sessionStorage.getItem("age")).toEqual(null);
- });
-
- it("responds to stateful default value", () => {
- const { result, rerender } = renderHook(
- (defaultValue) => useSessionStorage("age", { defaultValue }),
- { initialProps: 24 }
- );
- expect(result.current.value).toEqual(24);
- expect(sessionStorage.getItem("age")).toEqual(null);
-
- rerender(18);
- expect(result.current.value).toEqual(18);
- expect(sessionStorage.getItem("age")).toEqual(null);
- });
-
- it("can create value in storage when setting", () => {
- const { result } = renderHook(() => useSessionStorage("age"));
- expect(result.current.value).toEqual(undefined);
- expect(sessionStorage.getItem("age")).toEqual(null);
-
- act(() => result.current.set(18));
- expect(result.current.value).toEqual(18);
- expect(sessionStorage.getItem("age")).toEqual("18");
- });
-
- it("does nothing when removing", () => {
- const { result } = renderHook(() => useSessionStorage("age"));
- expect(result.current.value).toEqual(undefined);
- expect(sessionStorage.getItem("age")).toEqual(null);
-
- act(() => result.current.remove());
- expect(result.current.value).toEqual(undefined);
- expect(sessionStorage.getItem("age")).toEqual(null);
- });
-});
-
-describe("with stored value", () => {
- beforeEach(() => sessionStorage.setItem("age", "18"));
-
- it("defaults to stored value", () => {
- const { result } = renderHook(() => useSessionStorage("age"));
- expect(result.current.value).toEqual(18);
- expect(sessionStorage.getItem("age")).toEqual("18");
- });
-
- it("responds to stateful storage key", () => {
- const { result, rerender } = renderHook((key) => useSessionStorage(key), {
- initialProps: "age",
- });
- expect(result.current.value).toEqual(18);
- expect(sessionStorage.getItem("age")).toEqual("18");
-
- rerender("name");
- expect(result.current.value).toEqual(undefined);
- expect(sessionStorage.getItem("name")).toEqual(null);
- });
-
- it("ignores default value", () => {
- const { result } = renderHook(() =>
- useSessionStorage("age", { defaultValue: 24 })
- );
- expect(result.current.value).toEqual(18);
- expect(sessionStorage.getItem("age")).toEqual("18");
- });
-
- it("can customize serializer and deserializer", () => {
- const { result } = renderHook(() =>
- useSessionStorage("age", {
- serializer: (num) => String(num + 1),
- deserializer: (str) => Number(str) - 1,
- })
- );
- expect(result.current.value).toEqual(17);
- expect(sessionStorage.getItem("age")).toEqual("18");
-
- act(() => result.current.set(24));
- expect(result.current.value).toEqual(24);
- expect(sessionStorage.getItem("age")).toEqual("25");
-
- act(() => result.current.remove());
- expect(result.current.value).toEqual(undefined);
- expect(sessionStorage.getItem("age")).toEqual(null);
- });
-
- it("can set storage", () => {
- const { result } = renderHook(() => useSessionStorage("age"));
- expect(result.current.value).toEqual(18);
- expect(sessionStorage.getItem("age")).toEqual("18");
-
- act(() => result.current.set(24));
- expect(result.current.value).toEqual(24);
- expect(sessionStorage.getItem("age")).toEqual("24");
- });
-
- it("can set storage with a function", () => {
- const { result } = renderHook(() => useSessionStorage("age"));
- expect(result.current.value).toEqual(18);
- expect(sessionStorage.getItem("age")).toEqual("18");
-
- act(() => result.current.set((prev: number) => prev + 6));
- expect(result.current.value).toEqual(24);
- expect(sessionStorage.getItem("age")).toEqual("24");
- });
-
- it("can remove storage", () => {
- const { result } = renderHook(() => useSessionStorage("age"));
- expect(result.current.value).toEqual(18);
- expect(sessionStorage.getItem("age")).toEqual("18");
-
- act(() => result.current.remove());
- expect(result.current.value).toEqual(undefined);
- expect(sessionStorage.getItem("age")).toEqual(null);
- });
-
- it("can remove storage by setting value to undefined", () => {
- const { result } = renderHook(() => useSessionStorage("age"));
- expect(result.current.value).toEqual(18);
- expect(sessionStorage.getItem("age")).toEqual("18");
-
- act(() => result.current.set(undefined));
- expect(result.current.value).toEqual(undefined);
- expect(sessionStorage.getItem("age")).toEqual(null);
- });
-});
diff --git a/packages/hooks/tests/use-timeout.test.ts b/packages/hooks/tests/use-timeout.test.ts
deleted file mode 100644
index 02719af..0000000
--- a/packages/hooks/tests/use-timeout.test.ts
+++ /dev/null
@@ -1,38 +0,0 @@
-import { renderHook } from "@testing-library/react";
-import { useTimeout } from "src";
-
-beforeAll(() => {
- vi.useFakeTimers();
-});
-afterAll(() => {
- vi.useRealTimers();
-});
-afterEach(() => {
- vi.clearAllTimers();
-});
-
-it("triggers effect after timeout", () => {
- const effect = vi.fn();
-
- renderHook(() => useTimeout(effect));
- expect(effect).toHaveBeenCalledTimes(0);
-
- vi.advanceTimersByTime(499);
- expect(effect).toHaveBeenCalledTimes(0);
-
- vi.advanceTimersByTime(1);
- expect(effect).toHaveBeenCalledTimes(1);
-});
-
-it("can customize timeout", () => {
- const effect = vi.fn();
-
- renderHook(() => useTimeout(effect, 100));
- expect(effect).toHaveBeenCalledTimes(0);
-
- vi.advanceTimersByTime(99);
- expect(effect).toHaveBeenCalledTimes(0);
-
- vi.advanceTimersByTime(1);
- expect(effect).toHaveBeenCalledTimes(1);
-});
diff --git a/packages/hooks/tests/use-title.test.ts b/packages/hooks/tests/use-title.test.ts
deleted file mode 100644
index 90c3f5f..0000000
--- a/packages/hooks/tests/use-title.test.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-import { renderHook } from "@testing-library/react";
-import { useTitle } from "src";
-
-it("responds to stateful title", () => {
- const { rerender } = renderHook((title) => useTitle(title), {
- initialProps: "1",
- });
- expect(document.title).toEqual("1");
-
- rerender("2");
- expect(document.title).toEqual("2");
-});
diff --git a/packages/hooks/tests/use-update.test.ts b/packages/hooks/tests/use-update.test.ts
deleted file mode 100644
index 0a15a7f..0000000
--- a/packages/hooks/tests/use-update.test.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-import { renderHook } from "@testing-library/react";
-import { useUpdate } from "src";
-
-it("only runs on component updates", () => {
- const cleanup = vi.fn();
- const effect = vi.fn(() => cleanup);
-
- const { rerender, unmount } = renderHook(() => useUpdate(effect));
- expect(effect).toHaveBeenCalledTimes(0);
- expect(cleanup).toHaveBeenCalledTimes(0);
-
- rerender();
- expect(effect).toHaveBeenCalledTimes(1);
- expect(cleanup).toHaveBeenCalledTimes(0);
-
- rerender();
- expect(effect).toHaveBeenCalledTimes(2);
- expect(cleanup).toHaveBeenCalledTimes(1);
-
- unmount();
- expect(effect).toHaveBeenCalledTimes(2);
- expect(cleanup).toHaveBeenCalledTimes(2);
-});
diff --git a/packages/hooks/tests/use-window-size.test.ts b/packages/hooks/tests/use-window-size.test.ts
deleted file mode 100644
index 90a3f40..0000000
--- a/packages/hooks/tests/use-window-size.test.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-import { fireEvent, renderHook } from "@testing-library/react";
-import { useWindowSize } from "src";
-
-beforeEach(() => {
- window.innerWidth = 1024;
- window.innerHeight = 768;
-});
-
-it("reads window size", () => {
- const { result } = renderHook(() => useWindowSize());
- expect(result.current.width).toEqual(1024);
- expect(result.current.height).toEqual(768);
-});
-
-it("responds to window resize events", () => {
- const { result } = renderHook(() => useWindowSize());
- expect(result.current.width).toEqual(1024);
- expect(result.current.height).toEqual(768);
-
- window.innerWidth = 500;
- window.innerHeight = 200;
- fireEvent.resize(window);
- expect(result.current.width).toEqual(500);
- expect(result.current.height).toEqual(200);
-});
diff --git a/packages/hooks/tests/utils/match-media.ts b/packages/hooks/tests/utils/match-media.ts
deleted file mode 100644
index 6f8c7c8..0000000
--- a/packages/hooks/tests/utils/match-media.ts
+++ /dev/null
@@ -1,62 +0,0 @@
-export function matchMedia(query: string) {
- const defaultMediaQueryList = getDefaultMediaQueryList();
-
- const widthQueryResult = getWidthQueryResult(query);
- if (widthQueryResult !== undefined) {
- return {
- ...defaultMediaQueryList,
- matches: widthQueryResult,
- };
- }
-
- const themeQueryResult = getThemeQueryResult(query);
- if (themeQueryResult !== undefined) {
- return {
- ...defaultMediaQueryList,
- matches: themeQueryResult,
- };
- }
-
- return defaultMediaQueryList;
-}
-
-function getDefaultMediaQueryList() {
- return {
- matches: false,
- addEventListener: () => 0,
- removeEventListener: () => 0,
- } as unknown as MediaQueryList;
-}
-
-function getWidthQueryResult(query: string) {
- const regex = /(max|min)-width:\s*(\d+?)px/;
- const regexResult = query.match(regex);
- if (!regexResult) {
- return undefined;
- }
-
- const condition = regexResult[1];
- const width = Number(regexResult[2]);
- if (!condition || !width) {
- return undefined;
- }
-
- return condition === "max"
- ? window.innerWidth <= width
- : window.innerWidth >= width;
-}
-
-function getThemeQueryResult(query: string) {
- const regex = /prefers-color-scheme:\s*(light|dark)/;
- const regexResult = query.match(regex);
- if (!regexResult) {
- return undefined;
- }
-
- const theme = regexResult[1];
- if (!theme) {
- return undefined;
- }
-
- return theme === "dark";
-}
diff --git a/packages/hooks/tsconfig.json b/packages/hooks/tsconfig.json
deleted file mode 100644
index d46de1b..0000000
--- a/packages/hooks/tsconfig.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "extends": "typescript-config-custom/base.json",
- "compilerOptions": {
- "baseUrl": ".",
- "rootDir": ".",
- "types": ["node", "react", "react-dom", "vitest/globals"]
- },
- "include": ["src", "tests"]
-}
diff --git a/packages/prettier-config-custom/index.json b/packages/prettier-config-custom/index.json
deleted file mode 100644
index a66cb3c..0000000
--- a/packages/prettier-config-custom/index.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "overrides": [
- {
- "files": ["*.astro"],
- "options": {
- "plugins": ["prettier-plugin-astro"],
- "parser": "astro"
- }
- }
- ]
-}
diff --git a/packages/prettier-config-custom/package.json b/packages/prettier-config-custom/package.json
deleted file mode 100644
index 58fd531..0000000
--- a/packages/prettier-config-custom/package.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "name": "prettier-config-custom",
- "version": "0.0.0",
- "private": true,
- "main": "index.json",
- "dependencies": {
- "prettier-plugin-astro": "^0.8.0"
- },
- "devDependencies": {
- "prettier": "^2.8.3"
- },
- "peerDependencies": {
- "prettier": "^2.8.3"
- }
-}
diff --git a/packages/typescript-config-custom/base.json b/packages/typescript-config-custom/base.json
deleted file mode 100644
index 5d81852..0000000
--- a/packages/typescript-config-custom/base.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "$schema": "https://json.schemastore.org/tsconfig",
- "compilerOptions": {
- "allowUnreachableCode": false,
- "allowUnusedLabels": false,
- "exactOptionalPropertyTypes": true,
- "noFallthroughCasesInSwitch": true,
- "noImplicitOverride": true,
- "noImplicitReturns": true,
- "noUncheckedIndexedAccess": true,
- "noUnusedLocals": true,
- "noUnusedParameters": true,
- "strict": true,
- "module": "ESNext",
- "moduleResolution": "Node",
- "resolveJsonModule": true,
- "declaration": true,
- "importsNotUsedAsValues": "error",
- "stripInternal": true,
- "allowJs": true,
- "checkJs": true,
- "allowSyntheticDefaultImports": true,
- "esModuleInterop": true,
- "forceConsistentCasingInFileNames": true,
- "isolatedModules": true,
- "jsx": "react-jsx",
- "lib": ["DOM", "DOM.Iterable", "ESNext"],
- "target": "ES6",
- "composite": true,
- "incremental": true,
- "skipLibCheck": true
- }
-}
diff --git a/packages/typescript-config-custom/package.json b/packages/typescript-config-custom/package.json
deleted file mode 100644
index c17b56f..0000000
--- a/packages/typescript-config-custom/package.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "name": "typescript-config-custom",
- "version": "0.0.0",
- "private": true,
- "files": [
- "base.json"
- ],
- "devDependencies": {
- "typescript": "^4.9.5"
- },
- "peerDependencies": {
- "typescript": "^4.9.4"
- }
-}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 89d1772..a8da6d3 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -1,4 +1,4 @@
-lockfileVersion: '6.0'
+lockfileVersion: '9.0'
settings:
autoInstallPeers: true
@@ -8,6812 +8,5042 @@ importers:
.:
devDependencies:
- commitlint:
- specifier: ^17.4.2
- version: 17.4.2
- commitlint-config-custom:
- specifier: workspace:^0.0.0
- version: link:packages/commitlint-config-custom
- eslint:
- specifier: ^8.33.0
- version: 8.33.0
- eslint-config-custom:
- specifier: workspace:^0.0.0
- version: link:packages/eslint-config-custom
- husky:
- specifier: ^8.0.3
- version: 8.0.3
- lint-staged:
- specifier: ^13.1.0
- version: 13.1.0
- prettier:
- specifier: ^2.8.3
- version: 2.8.3
- prettier-config-custom:
- specifier: workspace:^0.0.0
- version: link:packages/prettier-config-custom
- turbo:
- specifier: ^1.7.3
- version: 1.7.3
-
- docs:
- dependencies:
- '@astrojs/markdown-remark':
- specifier: ^2.0.1
- version: 2.0.1(astro@2.0.6)
- '@astrojs/sitemap':
- specifier: ^1.0.1
- version: 1.0.1
- '@astrojs/tailwind':
- specifier: ^3.0.1
- version: 3.0.1(astro@2.0.6)(tailwindcss@3.2.4)(ts-node@10.9.1)
- '@fontsource/inter':
- specifier: ^4.5.15
- version: 4.5.15
- '@tailwindcss/typography':
- specifier: ^0.5.9
- version: 0.5.9(tailwindcss@3.2.4)
- astro:
- specifier: ^2.0.6
- version: 2.0.6(@types/node@18.11.18)
- cross-spawn:
- specifier: ^7.0.3
- version: 7.0.3
- hastscript:
- specifier: ^7.2.0
- version: 7.2.0
- rehype-autolink-headings:
- specifier: ^6.1.1
- version: 6.1.1
- tailwindcss:
- specifier: ^3.2.4
- version: 3.2.4(postcss@8.4.21)(ts-node@10.9.1)
- tailwindcss-radix-colors:
- specifier: ^0.3.0
- version: 0.3.0(tailwindcss@3.2.4)
- devDependencies:
- '@types/cross-spawn':
- specifier: ^6.0.2
- version: 6.0.2
- '@types/node':
- specifier: ^18.11.18
- version: 18.11.18
- typescript:
- specifier: ^4.9.5
- version: 4.9.5
- typescript-config-custom:
- specifier: workspace:^0.0.0
- version: link:../packages/typescript-config-custom
-
- packages/commitlint-config-custom:
- dependencies:
+ '@commitlint/cli':
+ specifier: ^19.5.0
+ version: 19.5.0(@types/node@22.9.0)(typescript@5.6.3)
'@commitlint/config-conventional':
- specifier: ^17.4.2
- version: 17.4.2
- devDependencies:
- commitlint:
- specifier: ^17.4.2
- version: 17.4.2
-
- packages/eslint-config-custom:
- dependencies:
- '@typescript-eslint/eslint-plugin':
- specifier: ^5.50.0
- version: 5.50.0(@typescript-eslint/parser@5.50.0)(eslint@8.33.0)(typescript@4.9.5)
- '@typescript-eslint/parser':
- specifier: ^5.50.0
- version: 5.50.0(eslint@8.33.0)(typescript@4.9.5)
- eslint-config-prettier:
- specifier: ^8.6.0
- version: 8.6.0(eslint@8.33.0)
- eslint-config-turbo:
- specifier: ^0.0.7
- version: 0.0.7(eslint@8.33.0)
- eslint-plugin-astro:
- specifier: ^0.23.0
- version: 0.23.0(eslint@8.33.0)
- eslint-plugin-jsx-a11y:
- specifier: ^6.7.1
- version: 6.7.1(eslint@8.33.0)
- eslint-plugin-react-hooks:
- specifier: ^4.6.0
- version: 4.6.0(eslint@8.33.0)
- devDependencies:
- eslint:
- specifier: ^8.33.0
- version: 8.33.0
- typescript:
- specifier: ^4.9.5
- version: 4.9.5
-
- packages/hooks:
- devDependencies:
+ specifier: ^19.5.0
+ version: 19.5.0
+ '@commitlint/types':
+ specifier: ^19.5.0
+ version: 19.5.0
+ '@eslint/js':
+ specifier: ^9.14.0
+ version: 9.14.0
'@testing-library/react':
- specifier: ^13.4.0
- version: 13.4.0(react-dom@18.2.0)(react@18.2.0)
+ specifier: ^16.0.1
+ version: 16.0.1(@testing-library/dom@10.4.0)(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@testing-library/user-event':
+ specifier: ^14.5.2
+ version: 14.5.2(@testing-library/dom@10.4.0)
+ '@types/eslint-config-prettier':
+ specifier: ^6.11.3
+ version: 6.11.3
+ '@types/eslint__js':
+ specifier: ^8.42.3
+ version: 8.42.3
'@types/node':
- specifier: ^18.11.18
- version: 18.11.18
+ specifier: ^22.9.0
+ version: 22.9.0
'@types/react':
- specifier: ^18.0.27
- version: 18.0.27
+ specifier: ^18.3.12
+ version: 18.3.12
'@types/react-dom':
- specifier: ^18.0.10
- version: 18.0.10
- '@vitest/coverage-c8':
- specifier: ^0.28.4
- version: 0.28.4(jsdom@21.1.0)
- fast-glob:
- specifier: ^3.2.12
- version: 3.2.12
+ specifier: ^18.3.1
+ version: 18.3.1
+ '@vitest/coverage-v8':
+ specifier: ^2.1.4
+ version: 2.1.4(vitest@2.1.4(@types/node@22.9.0)(jsdom@25.0.1))
+ eslint:
+ specifier: ^9.14.0
+ version: 9.14.0(jiti@1.21.6)
+ eslint-config-prettier:
+ specifier: ^9.1.0
+ version: 9.1.0(eslint@9.14.0(jiti@1.21.6))
+ husky:
+ specifier: ^9.1.6
+ version: 9.1.6
jsdom:
- specifier: ^21.1.0
- version: 21.1.0
+ specifier: ^25.0.1
+ version: 25.0.1
+ lint-staged:
+ specifier: ^15.2.10
+ version: 15.2.10
+ prettier:
+ specifier: ^3.3.3
+ version: 3.3.3
react:
- specifier: ^18.2.0
- version: 18.2.0
+ specifier: ^18.3.1
+ version: 18.3.1
react-dom:
- specifier: ^18.2.0
- version: 18.2.0(react@18.2.0)
+ specifier: ^18.3.1
+ version: 18.3.1(react@18.3.1)
typescript:
- specifier: ^4.9.5
- version: 4.9.5
- typescript-config-custom:
- specifier: workspace:^0.0.0
- version: link:../typescript-config-custom
+ specifier: ^5.6.3
+ version: 5.6.3
+ typescript-eslint:
+ specifier: ^8.13.0
+ version: 8.13.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3)
vite:
- specifier: ^4.1.1
- version: 4.1.1(@types/node@18.11.18)
+ specifier: ^5.4.10
+ version: 5.4.10(@types/node@22.9.0)
vite-plugin-dts:
- specifier: ^1.7.2
- version: 1.7.2(@types/node@18.11.18)(vite@4.1.1)
+ specifier: ^4.3.0
+ version: 4.3.0(@types/node@22.9.0)(rollup@4.25.0)(typescript@5.6.3)(vite@5.4.10(@types/node@22.9.0))
vite-tsconfig-paths:
- specifier: ^4.0.5
- version: 4.0.5(typescript@4.9.5)
+ specifier: ^5.1.2
+ version: 5.1.2(typescript@5.6.3)(vite@5.4.10(@types/node@22.9.0))
+ vitepress:
+ specifier: ^1.5.0
+ version: 1.5.0(@algolia/client-search@5.13.0)(@types/node@22.9.0)(@types/react@18.3.12)(postcss@8.4.48)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.2)(typescript@5.6.3)
vitest:
- specifier: ^0.28.4
- version: 0.28.4(jsdom@21.1.0)
-
- packages/prettier-config-custom:
- dependencies:
- prettier-plugin-astro:
- specifier: ^0.8.0
- version: 0.8.0
- devDependencies:
- prettier:
- specifier: ^2.8.3
- version: 2.8.3
-
- packages/typescript-config-custom:
- devDependencies:
- typescript:
- specifier: ^4.9.5
- version: 4.9.5
+ specifier: ^2.1.4
+ version: 2.1.4(@types/node@22.9.0)(jsdom@25.0.1)
packages:
- /@ampproject/remapping@2.2.0:
- resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==}
- engines: {node: '>=6.0.0'}
- dependencies:
- '@jridgewell/gen-mapping': 0.1.1
- '@jridgewell/trace-mapping': 0.3.17
- dev: false
+ '@algolia/autocomplete-core@1.17.6':
+ resolution: {integrity: sha512-lkDoW4I7h2kKlIgf3pUt1LqvxyYKkVyiypoGLlUnhPSnCpmeOwudM6rNq6YYsCmdQtnDQoW5lUNNuj6ASg3qeg==}
- /@astrojs/compiler@0.31.4:
- resolution: {integrity: sha512-6bBFeDTtPOn4jZaiD3p0f05MEGQL9pw2Zbfj546oFETNmjJFWO3nzHz6/m+P53calknCvyVzZ5YhoBLIvzn5iw==}
- dev: false
-
- /@astrojs/compiler@1.0.1:
- resolution: {integrity: sha512-77aacobLKcL98NmhK3OBS5EHIrX9gs1ckB/vGSIdkVZuB7u51V4jh05I6W0tSvG7/86tALv6QtHTRZ8rLhFTbQ==}
- dev: false
+ '@algolia/autocomplete-plugin-algolia-insights@1.17.6':
+ resolution: {integrity: sha512-17NnaacuFzSWVuZu4NKzVeaFIe9Abpw8w+/gjc7xhZFtqj+GadufzodIdchwiB2eM2cDdiR3icW7gbNTB3K2YA==}
+ peerDependencies:
+ search-insights: '>= 1 < 3'
- /@astrojs/language-server@0.28.3:
- resolution: {integrity: sha512-fPovAX/X46eE2w03jNRMpQ7W9m2mAvNt4Ay65lD9wl1Z5vIQYxlg7Enp9qP225muTr4jSVB5QiLumFJmZMAaVA==}
- hasBin: true
- dependencies:
- '@vscode/emmet-helper': 2.8.6
- events: 3.3.0
- prettier: 2.8.3
- prettier-plugin-astro: 0.7.2
- source-map: 0.7.4
- vscode-css-languageservice: 6.2.3
- vscode-html-languageservice: 5.0.4
- vscode-languageserver: 8.0.2
- vscode-languageserver-protocol: 3.17.2
- vscode-languageserver-textdocument: 1.0.8
- vscode-languageserver-types: 3.17.2
- vscode-uri: 3.0.7
- dev: false
-
- /@astrojs/markdown-remark@2.0.1(astro@2.0.6):
- resolution: {integrity: sha512-xQF1rXGJN18m+zZucwRRtmNehuhPMMhZhi6HWKrtpEAKnHSPk8lqf1GXgKH7/Sypglu8ivdECZ+EGs6kOYVasQ==}
+ '@algolia/autocomplete-preset-algolia@1.17.6':
+ resolution: {integrity: sha512-Cvg5JENdSCMuClwhJ1ON1/jSuojaYMiUW2KePm18IkdCzPJj/NXojaOxw58RFtQFpJgfVW8h2E8mEoDtLlMdeA==}
peerDependencies:
- astro: ^2.0.2
- dependencies:
- '@astrojs/prism': 2.0.0
- astro: 2.0.6(@types/node@18.11.18)
- github-slugger: 1.5.0
- import-meta-resolve: 2.2.1
- rehype-raw: 6.1.1
- rehype-stringify: 9.0.3
- remark-gfm: 3.0.1
- remark-parse: 10.0.1
- remark-rehype: 10.1.0
- remark-smartypants: 2.0.0
- shiki: 0.11.1
- unified: 10.1.2
- unist-util-visit: 4.1.2
- vfile: 5.3.6
- transitivePeerDependencies:
- - supports-color
- dev: false
+ '@algolia/client-search': '>= 4.9.1 < 6'
+ algoliasearch: '>= 4.9.1 < 6'
- /@astrojs/prism@2.0.0:
- resolution: {integrity: sha512-YgeoeEPqsxaEpg0rwe/bUq3653LqSQnMjrLlpYwrbQQMQQqz6Y5yXN+RX3SfLJ6ppNb4+Fu2+Z49EXjk48Ihjw==}
- engines: {node: '>=16.12.0'}
- dependencies:
- prismjs: 1.29.0
- dev: false
+ '@algolia/autocomplete-shared@1.17.6':
+ resolution: {integrity: sha512-aq/3V9E00Tw2GC/PqgyPGXtqJUlVc17v4cn1EUhSc+O/4zd04Uwb3UmPm8KDaYQQOrkt1lwvCj2vG2wRE5IKhw==}
+ peerDependencies:
+ '@algolia/client-search': '>= 4.9.1 < 6'
+ algoliasearch: '>= 4.9.1 < 6'
- /@astrojs/sitemap@1.0.1:
- resolution: {integrity: sha512-qexepZPH6/dLToI/njxr2FjvyxJU0HBAnQRNzEggF0ok811oSNC6su1DkyW2VKp0TNPbWoujuSbcb1yFOjnAqA==}
- dependencies:
- sitemap: 7.1.1
- zod: 3.20.2
- dev: false
+ '@algolia/client-abtesting@5.13.0':
+ resolution: {integrity: sha512-6CoQjlMi1pmQYMQO8tXfuGxSPf6iKX5FP9MuMe6IWmvC81wwTvOehnwchyBl2wuPVhcw2Ar53K53mQ60DAC64g==}
+ engines: {node: '>= 14.0.0'}
- /@astrojs/tailwind@3.0.1(astro@2.0.6)(tailwindcss@3.2.4)(ts-node@10.9.1):
- resolution: {integrity: sha512-QSYh/xmz454j1yZU9rjw2J24PpH7j3h2ClesqMaAniOtcuL8RfP7KYCnCrk01xvjwqqO+QBpZNDD/SUhHNtFFg==}
- peerDependencies:
- astro: ^2.0.4
- tailwindcss: ^3.0.24
- dependencies:
- '@proload/core': 0.3.3
- astro: 2.0.6(@types/node@18.11.18)
- autoprefixer: 10.4.13(postcss@8.4.21)
- postcss: 8.4.21
- postcss-load-config: 4.0.1(postcss@8.4.21)(ts-node@10.9.1)
- tailwindcss: 3.2.4(postcss@8.4.21)(ts-node@10.9.1)
- transitivePeerDependencies:
- - ts-node
- dev: false
-
- /@astrojs/telemetry@2.0.0:
- resolution: {integrity: sha512-RnWojVMIsql3GGWDP5pNWmhmBQVkCpxGNZ8yPr2cbmUqsUYGSvErhqfkLfro9j2/STi5UDmSpNgjPkQmXpgnKw==}
- engines: {node: '>=16.12.0'}
- dependencies:
- ci-info: 3.7.1
- debug: 4.3.4
- dlv: 1.1.3
- dset: 3.1.2
- is-docker: 3.0.0
- is-wsl: 2.2.0
- undici: 5.16.0
- which-pm-runs: 1.1.0
- transitivePeerDependencies:
- - supports-color
- dev: false
+ '@algolia/client-analytics@5.13.0':
+ resolution: {integrity: sha512-pS3qyXiWTwKnrt/jE79fqkNqZp7kjsFNlJDcBGkSWid74DNc6DmArlkvPqyLxnoaYGjUGACT6g56n7E3mVV2TA==}
+ engines: {node: '>= 14.0.0'}
- /@astrojs/webapi@2.0.0:
- resolution: {integrity: sha512-gziwy+XvY+/B9mq/eurgJMZ4iFnkcqg1wb0tA8BsVfiUPwl7yQKAFrBxrs2rWfKMXyWlVaTFc8rAYcB5VXQEuw==}
- dependencies:
- undici: 5.16.0
- dev: false
+ '@algolia/client-common@5.13.0':
+ resolution: {integrity: sha512-2SP6bGGWOTN920MLZv8s7yIR3OqY03vEe4U+vb2MGdL8a/8EQznF3L/nTC/rGf/hvEfZlX2tGFxPJaF2waravg==}
+ engines: {node: '>= 14.0.0'}
- /@babel/code-frame@7.18.6:
- resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==}
- engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/highlight': 7.18.6
+ '@algolia/client-insights@5.13.0':
+ resolution: {integrity: sha512-ldHTe+LVgC6L4Wr6doAQQ7Ku0jAdhaaPg1T+IHzmmiRZb2Uq5OsjW2yC65JifOmzPCiMkIZE2mGRpWgkn5ktlw==}
+ engines: {node: '>= 14.0.0'}
- /@babel/compat-data@7.20.14:
- resolution: {integrity: sha512-0YpKHD6ImkWMEINCyDAD0HLLUH/lPCefG8ld9it8DJB2wnApraKuhgYTvTY1z7UFIfBTGy5LwncZ+5HWWGbhFw==}
- engines: {node: '>=6.9.0'}
- dev: false
+ '@algolia/client-personalization@5.13.0':
+ resolution: {integrity: sha512-RnCfOSN4OUJDuMNHFca2M8lY64Tmw0kQOZikge4TknTqHmlbKJb8IbJE7Rol79Z80W2Y+B1ydcjV7DPje4GMRA==}
+ engines: {node: '>= 14.0.0'}
- /@babel/core@7.20.12:
- resolution: {integrity: sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==}
- engines: {node: '>=6.9.0'}
- dependencies:
- '@ampproject/remapping': 2.2.0
- '@babel/code-frame': 7.18.6
- '@babel/generator': 7.20.14
- '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.20.12)
- '@babel/helper-module-transforms': 7.20.11
- '@babel/helpers': 7.20.13
- '@babel/parser': 7.20.15
- '@babel/template': 7.20.7
- '@babel/traverse': 7.20.13
- '@babel/types': 7.20.7
- convert-source-map: 1.9.0
- debug: 4.3.4
- gensync: 1.0.0-beta.2
- json5: 2.2.3
- semver: 6.3.0
- transitivePeerDependencies:
- - supports-color
- dev: false
+ '@algolia/client-query-suggestions@5.13.0':
+ resolution: {integrity: sha512-pYo0jbLUtPDN1r341UHTaF2fgN5rbaZfDZqjPRKPM+FRlRmxFxqFQm1UUfpkSUWYGn7lECwDpbKYiKUf81MTwA==}
+ engines: {node: '>= 14.0.0'}
- /@babel/generator@7.20.14:
- resolution: {integrity: sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg==}
- engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/types': 7.20.7
- '@jridgewell/gen-mapping': 0.3.2
- jsesc: 2.5.2
- dev: false
+ '@algolia/client-search@5.13.0':
+ resolution: {integrity: sha512-s2ge3uZ6Zg2sPSFibqijgEYsuorxcc8KVHg3I95nOPHvFHdnBtSHymhZvq4sp/fu8ijt/Y8jLwkuqm5myn+2Sg==}
+ engines: {node: '>= 14.0.0'}
- /@babel/helper-annotate-as-pure@7.18.6:
- resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==}
- engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/types': 7.20.7
- dev: false
+ '@algolia/ingestion@1.13.0':
+ resolution: {integrity: sha512-fm5LEOe4FPDOc1D+M9stEs8hfcdmbdD+pt9og5shql6ueTZJANDbFoQhDOpiPJizR/ps1GwmjkWfUEywx3sV+Q==}
+ engines: {node: '>= 14.0.0'}
- /@babel/helper-compilation-targets@7.20.7(@babel/core@7.20.12):
- resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
- dependencies:
- '@babel/compat-data': 7.20.14
- '@babel/core': 7.20.12
- '@babel/helper-validator-option': 7.18.6
- browserslist: 4.21.5
- lru-cache: 5.1.1
- semver: 6.3.0
- dev: false
-
- /@babel/helper-environment-visitor@7.18.9:
- resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==}
- engines: {node: '>=6.9.0'}
- dev: false
+ '@algolia/monitoring@1.13.0':
+ resolution: {integrity: sha512-e8Hshlnm2G5fapyUgWTBwhJ22yXcnLtPC4LWZKx7KOvv35GcdoHtlUBX94I/sWCJLraUr65JvR8qOo3LXC43dg==}
+ engines: {node: '>= 14.0.0'}
- /@babel/helper-function-name@7.19.0:
- resolution: {integrity: sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==}
- engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/template': 7.20.7
- '@babel/types': 7.20.7
- dev: false
+ '@algolia/recommend@5.13.0':
+ resolution: {integrity: sha512-53/wW96oaj1FKMzGdFcZ/epygfTppLDUvgI1thLkd475EtVZCH3ZZVUNCEvf1AtnNyH1RnItkFzX8ayWCpx2PQ==}
+ engines: {node: '>= 14.0.0'}
- /@babel/helper-hoist-variables@7.18.6:
- resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==}
- engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/types': 7.20.7
- dev: false
+ '@algolia/requester-browser-xhr@5.13.0':
+ resolution: {integrity: sha512-NV6oSCt5lFuzfsVQoSBpewEWf/h4ySr7pv2bfwu9yF/jc/g39pig8+YpuqsxlRWBm/lTGVA2V0Ai9ySwrNumIA==}
+ engines: {node: '>= 14.0.0'}
- /@babel/helper-module-imports@7.18.6:
- resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==}
- engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/types': 7.20.7
- dev: false
+ '@algolia/requester-fetch@5.13.0':
+ resolution: {integrity: sha512-094bK4rumf+rXJazxv3mq6eKRM0ep5AxIo8T0YmOdldswQt79apeufFiPLN19nHEWH22xR2FelimD+T/wRSP+Q==}
+ engines: {node: '>= 14.0.0'}
- /@babel/helper-module-transforms@7.20.11:
- resolution: {integrity: sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==}
- engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/helper-environment-visitor': 7.18.9
- '@babel/helper-module-imports': 7.18.6
- '@babel/helper-simple-access': 7.20.2
- '@babel/helper-split-export-declaration': 7.18.6
- '@babel/helper-validator-identifier': 7.19.1
- '@babel/template': 7.20.7
- '@babel/traverse': 7.20.13
- '@babel/types': 7.20.7
- transitivePeerDependencies:
- - supports-color
- dev: false
+ '@algolia/requester-node-http@5.13.0':
+ resolution: {integrity: sha512-JY5xhEYMgki53Wm+A6R2jUpOUdD0zZnBq+PC5R1TGMNOYL1s6JjDrJeMsvaI2YWxYMUSoCnRoltN/yf9RI8n3A==}
+ engines: {node: '>= 14.0.0'}
- /@babel/helper-plugin-utils@7.20.2:
- resolution: {integrity: sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==}
- engines: {node: '>=6.9.0'}
- dev: false
+ '@ampproject/remapping@2.3.0':
+ resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
+ engines: {node: '>=6.0.0'}
- /@babel/helper-simple-access@7.20.2:
- resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==}
+ '@babel/code-frame@7.26.2':
+ resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==}
engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/types': 7.20.7
- dev: false
- /@babel/helper-split-export-declaration@7.18.6:
- resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==}
+ '@babel/helper-string-parser@7.25.9':
+ resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==}
engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/types': 7.20.7
- dev: false
- /@babel/helper-string-parser@7.19.4:
- resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==}
+ '@babel/helper-validator-identifier@7.25.9':
+ resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==}
engines: {node: '>=6.9.0'}
- dev: false
- /@babel/helper-validator-identifier@7.19.1:
- resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==}
- engines: {node: '>=6.9.0'}
+ '@babel/parser@7.26.2':
+ resolution: {integrity: sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
- /@babel/helper-validator-option@7.18.6:
- resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==}
+ '@babel/runtime@7.26.0':
+ resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==}
engines: {node: '>=6.9.0'}
- dev: false
- /@babel/helpers@7.20.13:
- resolution: {integrity: sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg==}
+ '@babel/types@7.26.0':
+ resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==}
engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/template': 7.20.7
- '@babel/traverse': 7.20.13
- '@babel/types': 7.20.7
- transitivePeerDependencies:
- - supports-color
- dev: false
- /@babel/highlight@7.18.6:
- resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==}
- engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/helper-validator-identifier': 7.19.1
- chalk: 2.4.2
- js-tokens: 4.0.0
+ '@bcoe/v8-coverage@0.2.3':
+ resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
- /@babel/parser@7.20.15:
- resolution: {integrity: sha512-DI4a1oZuf8wC+oAJA9RW6ga3Zbe8RZFt7kD9i4qAspz3I/yHet1VvC3DiSy/fsUvv5pvJuNPh0LPOdCcqinDPg==}
- engines: {node: '>=6.0.0'}
+ '@commitlint/cli@19.5.0':
+ resolution: {integrity: sha512-gaGqSliGwB86MDmAAKAtV9SV1SHdmN8pnGq4EJU4+hLisQ7IFfx4jvU4s+pk6tl0+9bv6yT+CaZkufOinkSJIQ==}
+ engines: {node: '>=v18'}
hasBin: true
- dependencies:
- '@babel/types': 7.20.7
- dev: false
- /@babel/plugin-syntax-jsx@7.18.6(@babel/core@7.20.12):
- resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.20.12
- '@babel/helper-plugin-utils': 7.20.2
- dev: false
+ '@commitlint/config-conventional@19.5.0':
+ resolution: {integrity: sha512-OBhdtJyHNPryZKg0fFpZNOBM1ZDbntMvqMuSmpfyP86XSfwzGw4CaoYRG4RutUPg0BTK07VMRIkNJT6wi2zthg==}
+ engines: {node: '>=v18'}
- /@babel/plugin-transform-react-jsx@7.20.13(@babel/core@7.20.12):
- resolution: {integrity: sha512-MmTZx/bkUrfJhhYAYt3Urjm+h8DQGrPrnKQ94jLo7NLuOU+T89a7IByhKmrb8SKhrIYIQ0FN0CHMbnFRen4qNw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.20.12
- '@babel/helper-annotate-as-pure': 7.18.6
- '@babel/helper-module-imports': 7.18.6
- '@babel/helper-plugin-utils': 7.20.2
- '@babel/plugin-syntax-jsx': 7.18.6(@babel/core@7.20.12)
- '@babel/types': 7.20.7
- dev: false
-
- /@babel/runtime@7.20.13:
- resolution: {integrity: sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==}
- engines: {node: '>=6.9.0'}
- dependencies:
- regenerator-runtime: 0.13.11
+ '@commitlint/config-validator@19.5.0':
+ resolution: {integrity: sha512-CHtj92H5rdhKt17RmgALhfQt95VayrUo2tSqY9g2w+laAXyk7K/Ef6uPm9tn5qSIwSmrLjKaXK9eiNuxmQrDBw==}
+ engines: {node: '>=v18'}
- /@babel/template@7.20.7:
- resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==}
- engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/code-frame': 7.18.6
- '@babel/parser': 7.20.15
- '@babel/types': 7.20.7
- dev: false
+ '@commitlint/ensure@19.5.0':
+ resolution: {integrity: sha512-Kv0pYZeMrdg48bHFEU5KKcccRfKmISSm9MvgIgkpI6m+ohFTB55qZlBW6eYqh/XDfRuIO0x4zSmvBjmOwWTwkg==}
+ engines: {node: '>=v18'}
- /@babel/traverse@7.20.13:
- resolution: {integrity: sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ==}
- engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/code-frame': 7.18.6
- '@babel/generator': 7.20.14
- '@babel/helper-environment-visitor': 7.18.9
- '@babel/helper-function-name': 7.19.0
- '@babel/helper-hoist-variables': 7.18.6
- '@babel/helper-split-export-declaration': 7.18.6
- '@babel/parser': 7.20.15
- '@babel/types': 7.20.7
- debug: 4.3.4
- globals: 11.12.0
- transitivePeerDependencies:
- - supports-color
- dev: false
+ '@commitlint/execute-rule@19.5.0':
+ resolution: {integrity: sha512-aqyGgytXhl2ejlk+/rfgtwpPexYyri4t8/n4ku6rRJoRhGZpLFMqrZ+YaubeGysCP6oz4mMA34YSTaSOKEeNrg==}
+ engines: {node: '>=v18'}
- /@babel/types@7.20.7:
- resolution: {integrity: sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==}
- engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/helper-string-parser': 7.19.4
- '@babel/helper-validator-identifier': 7.19.1
- to-fast-properties: 2.0.0
- dev: false
+ '@commitlint/format@19.5.0':
+ resolution: {integrity: sha512-yNy088miE52stCI3dhG/vvxFo9e4jFkU1Mj3xECfzp/bIS/JUay4491huAlVcffOoMK1cd296q0W92NlER6r3A==}
+ engines: {node: '>=v18'}
- /@bcoe/v8-coverage@0.2.3:
- resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
- dev: true
+ '@commitlint/is-ignored@19.5.0':
+ resolution: {integrity: sha512-0XQ7Llsf9iL/ANtwyZ6G0NGp5Y3EQ8eDQSxv/SRcfJ0awlBY4tHFAvwWbw66FVUaWICH7iE5en+FD9TQsokZ5w==}
+ engines: {node: '>=v18'}
- /@commitlint/cli@17.4.2:
- resolution: {integrity: sha512-0rPGJ2O1owhpxMIXL9YJ2CgPkdrFLKZElIZHXDN8L8+qWK1DGH7Q7IelBT1pchXTYTuDlqkOTdh//aTvT3bSUA==}
- engines: {node: '>=v14'}
- hasBin: true
- dependencies:
- '@commitlint/format': 17.4.0
- '@commitlint/lint': 17.4.2
- '@commitlint/load': 17.4.2
- '@commitlint/read': 17.4.2
- '@commitlint/types': 17.4.0
- execa: 5.1.1
- lodash.isfunction: 3.0.9
- resolve-from: 5.0.0
- resolve-global: 1.0.0
- yargs: 17.6.2
- transitivePeerDependencies:
- - '@swc/core'
- - '@swc/wasm'
- dev: true
+ '@commitlint/lint@19.5.0':
+ resolution: {integrity: sha512-cAAQwJcRtiBxQWO0eprrAbOurtJz8U6MgYqLz+p9kLElirzSCc0vGMcyCaA1O7AqBuxo11l1XsY3FhOFowLAAg==}
+ engines: {node: '>=v18'}
- /@commitlint/config-conventional@17.4.2:
- resolution: {integrity: sha512-JVo1moSj5eDMoql159q8zKCU8lkOhQ+b23Vl3LVVrS6PXDLQIELnJ34ChQmFVbBdSSRNAbbXnRDhosFU+wnuHw==}
- engines: {node: '>=v14'}
- dependencies:
- conventional-changelog-conventionalcommits: 5.0.0
- dev: false
+ '@commitlint/load@19.5.0':
+ resolution: {integrity: sha512-INOUhkL/qaKqwcTUvCE8iIUf5XHsEPCLY9looJ/ipzi7jtGhgmtH7OOFiNvwYgH7mA8osUWOUDV8t4E2HAi4xA==}
+ engines: {node: '>=v18'}
- /@commitlint/config-validator@17.4.0:
- resolution: {integrity: sha512-Sa/+8KNpDXz4zT4bVbz2fpFjvgkPO6u2V2fP4TKgt6FjmOw2z3eEX859vtfeaTav/ukBw0/0jr+5ZTZp9zCBhA==}
- engines: {node: '>=v14'}
- dependencies:
- '@commitlint/types': 17.4.0
- ajv: 8.12.0
- dev: true
+ '@commitlint/message@19.5.0':
+ resolution: {integrity: sha512-R7AM4YnbxN1Joj1tMfCyBryOC5aNJBdxadTZkuqtWi3Xj0kMdutq16XQwuoGbIzL2Pk62TALV1fZDCv36+JhTQ==}
+ engines: {node: '>=v18'}
- /@commitlint/ensure@17.4.0:
- resolution: {integrity: sha512-7oAxt25je0jeQ/E0O/M8L3ADb1Cvweu/5lc/kYF8g/kXatI0wxGE5La52onnAUAWeWlsuvBNar15WcrmDmr5Mw==}
- engines: {node: '>=v14'}
- dependencies:
- '@commitlint/types': 17.4.0
- lodash.camelcase: 4.3.0
- lodash.kebabcase: 4.1.1
- lodash.snakecase: 4.1.1
- lodash.startcase: 4.4.0
- lodash.upperfirst: 4.3.1
- dev: true
+ '@commitlint/parse@19.5.0':
+ resolution: {integrity: sha512-cZ/IxfAlfWYhAQV0TwcbdR1Oc0/r0Ik1GEessDJ3Lbuma/MRO8FRQX76eurcXtmhJC//rj52ZSZuXUg0oIX0Fw==}
+ engines: {node: '>=v18'}
- /@commitlint/execute-rule@17.4.0:
- resolution: {integrity: sha512-LIgYXuCSO5Gvtc0t9bebAMSwd68ewzmqLypqI2Kke1rqOqqDbMpYcYfoPfFlv9eyLIh4jocHWwCK5FS7z9icUA==}
- engines: {node: '>=v14'}
- dev: true
+ '@commitlint/read@19.5.0':
+ resolution: {integrity: sha512-TjS3HLPsLsxFPQj6jou8/CZFAmOP2y+6V4PGYt3ihbQKTY1Jnv0QG28WRKl/d1ha6zLODPZqsxLEov52dhR9BQ==}
+ engines: {node: '>=v18'}
- /@commitlint/format@17.4.0:
- resolution: {integrity: sha512-Z2bWAU5+f1YZh9W76c84J8iLIWIvvm+mzqogTz0Nsc1x6EHW0Z2gI38g5HAjB0r0I3ZjR15IDEJKhsxyblcyhA==}
- engines: {node: '>=v14'}
- dependencies:
- '@commitlint/types': 17.4.0
- chalk: 4.1.2
- dev: true
-
- /@commitlint/is-ignored@17.4.2:
- resolution: {integrity: sha512-1b2Y2qJ6n7bHG9K6h8S4lBGUl6kc7mMhJN9gy1SQfUZqe92ToDjUTtgNWb6LbzR1X8Cq4SEus4VU8Z/riEa94Q==}
- engines: {node: '>=v14'}
- dependencies:
- '@commitlint/types': 17.4.0
- semver: 7.3.8
- dev: true
-
- /@commitlint/lint@17.4.2:
- resolution: {integrity: sha512-HcymabrdBhsDMNzIv146+ZPNBPBK5gMNsVH+el2lCagnYgCi/4ixrHooeVyS64Fgce2K26+MC7OQ4vVH8wQWVw==}
- engines: {node: '>=v14'}
- dependencies:
- '@commitlint/is-ignored': 17.4.2
- '@commitlint/parse': 17.4.2
- '@commitlint/rules': 17.4.2
- '@commitlint/types': 17.4.0
- dev: true
-
- /@commitlint/load@17.4.2:
- resolution: {integrity: sha512-Si++F85rJ9t4hw6JcOw1i2h0fdpdFQt0YKwjuK4bk9KhFjyFkRxvR3SB2dPaMs+EwWlDrDBGL+ygip1QD6gmPw==}
- engines: {node: '>=v14'}
- dependencies:
- '@commitlint/config-validator': 17.4.0
- '@commitlint/execute-rule': 17.4.0
- '@commitlint/resolve-extends': 17.4.0
- '@commitlint/types': 17.4.0
- '@types/node': 18.11.18
- chalk: 4.1.2
- cosmiconfig: 8.0.0
- cosmiconfig-typescript-loader: 4.3.0(@types/node@18.11.18)(cosmiconfig@8.0.0)(ts-node@10.9.1)(typescript@4.9.5)
- lodash.isplainobject: 4.0.6
- lodash.merge: 4.6.2
- lodash.uniq: 4.5.0
- resolve-from: 5.0.0
- ts-node: 10.9.1(@types/node@18.11.18)(typescript@4.9.5)
- typescript: 4.9.5
- transitivePeerDependencies:
- - '@swc/core'
- - '@swc/wasm'
- dev: true
-
- /@commitlint/message@17.4.2:
- resolution: {integrity: sha512-3XMNbzB+3bhKA1hSAWPCQA3lNxR4zaeQAQcHj0Hx5sVdO6ryXtgUBGGv+1ZCLMgAPRixuc6en+iNAzZ4NzAa8Q==}
- engines: {node: '>=v14'}
- dev: true
-
- /@commitlint/parse@17.4.2:
- resolution: {integrity: sha512-DK4EwqhxfXpyCA+UH8TBRIAXAfmmX4q9QRBz/2h9F9sI91yt6mltTrL6TKURMcjUVmgaB80wgS9QybNIyVBIJA==}
- engines: {node: '>=v14'}
- dependencies:
- '@commitlint/types': 17.4.0
- conventional-changelog-angular: 5.0.13
- conventional-commits-parser: 3.2.4
- dev: true
-
- /@commitlint/read@17.4.2:
- resolution: {integrity: sha512-hasYOdbhEg+W4hi0InmXHxtD/1favB4WdwyFxs1eOy/DvMw6+2IZBmATgGOlqhahsypk4kChhxjAFJAZ2F+JBg==}
- engines: {node: '>=v14'}
- dependencies:
- '@commitlint/top-level': 17.4.0
- '@commitlint/types': 17.4.0
- fs-extra: 11.1.0
- git-raw-commits: 2.0.11
- minimist: 1.2.7
- dev: true
-
- /@commitlint/resolve-extends@17.4.0:
- resolution: {integrity: sha512-3JsmwkrCzoK8sO22AzLBvNEvC1Pmdn/65RKXzEtQMy6oYMl0Snrq97a5bQQEFETF0VsvbtUuKttLqqgn99OXRQ==}
- engines: {node: '>=v14'}
- dependencies:
- '@commitlint/config-validator': 17.4.0
- '@commitlint/types': 17.4.0
- import-fresh: 3.3.0
- lodash.mergewith: 4.6.2
- resolve-from: 5.0.0
- resolve-global: 1.0.0
- dev: true
+ '@commitlint/resolve-extends@19.5.0':
+ resolution: {integrity: sha512-CU/GscZhCUsJwcKTJS9Ndh3AKGZTNFIOoQB2n8CmFnizE0VnEuJoum+COW+C1lNABEeqk6ssfc1Kkalm4bDklA==}
+ engines: {node: '>=v18'}
- /@commitlint/rules@17.4.2:
- resolution: {integrity: sha512-OGrPsMb9Fx3/bZ64/EzJehY9YDSGWzp81Pj+zJiY+r/NSgJI3nUYdlS37jykNIugzazdEXfMtQ10kmA+Kx2pZQ==}
- engines: {node: '>=v14'}
- dependencies:
- '@commitlint/ensure': 17.4.0
- '@commitlint/message': 17.4.2
- '@commitlint/to-lines': 17.4.0
- '@commitlint/types': 17.4.0
- execa: 5.1.1
- dev: true
+ '@commitlint/rules@19.5.0':
+ resolution: {integrity: sha512-hDW5TPyf/h1/EufSHEKSp6Hs+YVsDMHazfJ2azIk9tHPXS6UqSz1dIRs1gpqS3eMXgtkT7JH6TW4IShdqOwhAw==}
+ engines: {node: '>=v18'}
- /@commitlint/to-lines@17.4.0:
- resolution: {integrity: sha512-LcIy/6ZZolsfwDUWfN1mJ+co09soSuNASfKEU5sCmgFCvX5iHwRYLiIuoqXzOVDYOy7E7IcHilr/KS0e5T+0Hg==}
- engines: {node: '>=v14'}
- dev: true
+ '@commitlint/to-lines@19.5.0':
+ resolution: {integrity: sha512-R772oj3NHPkodOSRZ9bBVNq224DOxQtNef5Pl8l2M8ZnkkzQfeSTr4uxawV2Sd3ui05dUVzvLNnzenDBO1KBeQ==}
+ engines: {node: '>=v18'}
- /@commitlint/top-level@17.4.0:
- resolution: {integrity: sha512-/1loE/g+dTTQgHnjoCy0AexKAEFyHsR2zRB4NWrZ6lZSMIxAhBJnmCqwao7b4H8888PsfoTBCLBYIw8vGnej8g==}
- engines: {node: '>=v14'}
- dependencies:
- find-up: 5.0.0
- dev: true
+ '@commitlint/top-level@19.5.0':
+ resolution: {integrity: sha512-IP1YLmGAk0yWrImPRRc578I3dDUI5A2UBJx9FbSOjxe9sTlzFiwVJ+zeMLgAtHMtGZsC8LUnzmW1qRemkFU4ng==}
+ engines: {node: '>=v18'}
- /@commitlint/types@17.4.0:
- resolution: {integrity: sha512-2NjAnq5IcxY9kXtUeO2Ac0aPpvkuOmwbH/BxIm36XXK5LtWFObWJWjXOA+kcaABMrthjWu6la+FUpyYFMHRvbA==}
- engines: {node: '>=v14'}
- dependencies:
- chalk: 4.1.2
- dev: true
+ '@commitlint/types@19.5.0':
+ resolution: {integrity: sha512-DSHae2obMSMkAtTBSOulg5X7/z+rGLxcXQIkg3OmWvY6wifojge5uVMydfhUvs7yQj+V7jNmRZ2Xzl8GJyqRgg==}
+ engines: {node: '>=v18'}
- /@cspotcode/source-map-support@0.8.1:
- resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
- engines: {node: '>=12'}
- dependencies:
- '@jridgewell/trace-mapping': 0.3.9
+ '@docsearch/css@3.7.0':
+ resolution: {integrity: sha512-1OorbTwi1eeDmr0v5t+ckSRlt1zM5GHjm92iIl3kUu7im3GHuP+csf6E0WBg8pdXQczTWP9J9+o9n+Vg6DH5cQ==}
- /@emmetio/abbreviation@2.2.3:
- resolution: {integrity: sha512-87pltuCPt99aL+y9xS6GPZ+Wmmyhll2WXH73gG/xpGcQ84DRnptBsI2r0BeIQ0EB/SQTOe2ANPqFqj3Rj5FOGA==}
- dependencies:
- '@emmetio/scanner': 1.0.0
- dev: false
+ '@docsearch/js@3.7.0':
+ resolution: {integrity: sha512-ScfqOIKrSr8SImbpxVaD59xc/bytbL8QEM2GUpe3aICmoICflWp5DyTRzAdFky16HY+yEOAVZXt3COXQ1NOCWw==}
- /@emmetio/css-abbreviation@2.1.4:
- resolution: {integrity: sha512-qk9L60Y+uRtM5CPbB0y+QNl/1XKE09mSO+AhhSauIfr2YOx/ta3NJw2d8RtCFxgzHeRqFRr8jgyzThbu+MZ4Uw==}
- dependencies:
- '@emmetio/scanner': 1.0.0
- dev: false
+ '@docsearch/react@3.7.0':
+ resolution: {integrity: sha512-8e6tdDfkYoxafEEPuX5eE1h9cTkLvhe4KgoFkO5JCddXSQONnN1FHcDZRI4r8894eMpbYq6rdJF0dVYh8ikwNQ==}
+ peerDependencies:
+ '@types/react': '>= 16.8.0 < 19.0.0'
+ react: '>= 16.8.0 < 19.0.0'
+ react-dom: '>= 16.8.0 < 19.0.0'
+ search-insights: '>= 1 < 3'
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ react:
+ optional: true
+ react-dom:
+ optional: true
+ search-insights:
+ optional: true
- /@emmetio/scanner@1.0.0:
- resolution: {integrity: sha512-8HqW8EVqjnCmWXVpqAOZf+EGESdkR27odcMMMGefgKXtar00SoYNSryGv//TELI4T3QFsECo78p+0lmalk/CFA==}
- dev: false
+ '@esbuild/aix-ppc64@0.21.5':
+ resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [aix]
- /@esbuild/android-arm64@0.16.17:
- resolution: {integrity: sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==}
+ '@esbuild/android-arm64@0.21.5':
+ resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==}
engines: {node: '>=12'}
cpu: [arm64]
os: [android]
- requiresBuild: true
- optional: true
- /@esbuild/android-arm@0.16.17:
- resolution: {integrity: sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==}
+ '@esbuild/android-arm@0.21.5':
+ resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==}
engines: {node: '>=12'}
cpu: [arm]
os: [android]
- requiresBuild: true
- optional: true
- /@esbuild/android-x64@0.16.17:
- resolution: {integrity: sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==}
+ '@esbuild/android-x64@0.21.5':
+ resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==}
engines: {node: '>=12'}
cpu: [x64]
os: [android]
- requiresBuild: true
- optional: true
- /@esbuild/darwin-arm64@0.16.17:
- resolution: {integrity: sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==}
+ '@esbuild/darwin-arm64@0.21.5':
+ resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==}
engines: {node: '>=12'}
cpu: [arm64]
os: [darwin]
- requiresBuild: true
- optional: true
- /@esbuild/darwin-x64@0.16.17:
- resolution: {integrity: sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==}
+ '@esbuild/darwin-x64@0.21.5':
+ resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==}
engines: {node: '>=12'}
cpu: [x64]
os: [darwin]
- requiresBuild: true
- optional: true
- /@esbuild/freebsd-arm64@0.16.17:
- resolution: {integrity: sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==}
+ '@esbuild/freebsd-arm64@0.21.5':
+ resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==}
engines: {node: '>=12'}
cpu: [arm64]
os: [freebsd]
- requiresBuild: true
- optional: true
- /@esbuild/freebsd-x64@0.16.17:
- resolution: {integrity: sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==}
+ '@esbuild/freebsd-x64@0.21.5':
+ resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==}
engines: {node: '>=12'}
cpu: [x64]
os: [freebsd]
- requiresBuild: true
- optional: true
- /@esbuild/linux-arm64@0.16.17:
- resolution: {integrity: sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==}
+ '@esbuild/linux-arm64@0.21.5':
+ resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==}
engines: {node: '>=12'}
cpu: [arm64]
os: [linux]
- requiresBuild: true
- optional: true
- /@esbuild/linux-arm@0.16.17:
- resolution: {integrity: sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==}
+ '@esbuild/linux-arm@0.21.5':
+ resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==}
engines: {node: '>=12'}
cpu: [arm]
os: [linux]
- requiresBuild: true
- optional: true
- /@esbuild/linux-ia32@0.16.17:
- resolution: {integrity: sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==}
+ '@esbuild/linux-ia32@0.21.5':
+ resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==}
engines: {node: '>=12'}
cpu: [ia32]
os: [linux]
- requiresBuild: true
- optional: true
- /@esbuild/linux-loong64@0.16.17:
- resolution: {integrity: sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==}
+ '@esbuild/linux-loong64@0.21.5':
+ resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==}
engines: {node: '>=12'}
cpu: [loong64]
os: [linux]
- requiresBuild: true
- optional: true
- /@esbuild/linux-mips64el@0.16.17:
- resolution: {integrity: sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==}
+ '@esbuild/linux-mips64el@0.21.5':
+ resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==}
engines: {node: '>=12'}
cpu: [mips64el]
os: [linux]
- requiresBuild: true
- optional: true
- /@esbuild/linux-ppc64@0.16.17:
- resolution: {integrity: sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==}
+ '@esbuild/linux-ppc64@0.21.5':
+ resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==}
engines: {node: '>=12'}
cpu: [ppc64]
os: [linux]
- requiresBuild: true
- optional: true
- /@esbuild/linux-riscv64@0.16.17:
- resolution: {integrity: sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==}
+ '@esbuild/linux-riscv64@0.21.5':
+ resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==}
engines: {node: '>=12'}
cpu: [riscv64]
os: [linux]
- requiresBuild: true
- optional: true
- /@esbuild/linux-s390x@0.16.17:
- resolution: {integrity: sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==}
+ '@esbuild/linux-s390x@0.21.5':
+ resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==}
engines: {node: '>=12'}
cpu: [s390x]
os: [linux]
- requiresBuild: true
- optional: true
- /@esbuild/linux-x64@0.16.17:
- resolution: {integrity: sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==}
+ '@esbuild/linux-x64@0.21.5':
+ resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==}
engines: {node: '>=12'}
cpu: [x64]
os: [linux]
- requiresBuild: true
- optional: true
- /@esbuild/netbsd-x64@0.16.17:
- resolution: {integrity: sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==}
+ '@esbuild/netbsd-x64@0.21.5':
+ resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==}
engines: {node: '>=12'}
cpu: [x64]
os: [netbsd]
- requiresBuild: true
- optional: true
- /@esbuild/openbsd-x64@0.16.17:
- resolution: {integrity: sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==}
+ '@esbuild/openbsd-x64@0.21.5':
+ resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==}
engines: {node: '>=12'}
cpu: [x64]
os: [openbsd]
- requiresBuild: true
- optional: true
- /@esbuild/sunos-x64@0.16.17:
- resolution: {integrity: sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==}
+ '@esbuild/sunos-x64@0.21.5':
+ resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==}
engines: {node: '>=12'}
cpu: [x64]
os: [sunos]
- requiresBuild: true
- optional: true
- /@esbuild/win32-arm64@0.16.17:
- resolution: {integrity: sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==}
+ '@esbuild/win32-arm64@0.21.5':
+ resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==}
engines: {node: '>=12'}
cpu: [arm64]
os: [win32]
- requiresBuild: true
- optional: true
- /@esbuild/win32-ia32@0.16.17:
- resolution: {integrity: sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==}
+ '@esbuild/win32-ia32@0.21.5':
+ resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==}
engines: {node: '>=12'}
cpu: [ia32]
os: [win32]
- requiresBuild: true
- optional: true
- /@esbuild/win32-x64@0.16.17:
- resolution: {integrity: sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==}
+ '@esbuild/win32-x64@0.21.5':
+ resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==}
engines: {node: '>=12'}
cpu: [x64]
os: [win32]
- requiresBuild: true
- optional: true
- /@eslint/eslintrc@1.4.1:
- resolution: {integrity: sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==}
+ '@eslint-community/eslint-utils@4.4.1':
+ resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- dependencies:
- ajv: 6.12.6
- debug: 4.3.4
- espree: 9.4.1
- globals: 13.20.0
- ignore: 5.2.4
- import-fresh: 3.3.0
- js-yaml: 4.1.0
- minimatch: 3.1.2
- strip-json-comments: 3.1.1
- transitivePeerDependencies:
- - supports-color
+ peerDependencies:
+ eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
- /@fontsource/inter@4.5.15:
- resolution: {integrity: sha512-FzleM9AxZQK2nqsTDtBiY0PMEVWvnKnuu2i09+p6DHvrHsuucoV2j0tmw+kAT3L4hvsLdAIDv6MdGehsPIdT+Q==}
- dev: false
+ '@eslint-community/regexpp@4.12.1':
+ resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
+ engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
- /@humanwhocodes/config-array@0.11.8:
- resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==}
- engines: {node: '>=10.10.0'}
- dependencies:
- '@humanwhocodes/object-schema': 1.2.1
- debug: 4.3.4
- minimatch: 3.1.2
- transitivePeerDependencies:
- - supports-color
+ '@eslint/config-array@0.18.0':
+ resolution: {integrity: sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/core@0.7.0':
+ resolution: {integrity: sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/eslintrc@3.1.0':
+ resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/js@9.14.0':
+ resolution: {integrity: sha512-pFoEtFWCPyDOl+C6Ift+wC7Ro89otjigCf5vcuWqWgqNSQbRrpjSvdeE6ofLz4dHmyxD5f7gIdGT4+p36L6Twg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/object-schema@2.1.4':
+ resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/plugin-kit@0.2.2':
+ resolution: {integrity: sha512-CXtq5nR4Su+2I47WPOlWud98Y5Lv8Kyxp2ukhgFx/eW6Blm18VXJO5WuQylPugRo8nbluoi6GvvxBLqHcvqUUw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- /@humanwhocodes/module-importer@1.0.1:
+ '@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@1.2.1:
- resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==}
+ '@humanwhocodes/retry@0.3.1':
+ resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==}
+ engines: {node: '>=18.18'}
+
+ '@humanwhocodes/retry@0.4.1':
+ resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==}
+ engines: {node: '>=18.18'}
+
+ '@iconify-json/simple-icons@1.2.11':
+ resolution: {integrity: sha512-AHCGDtBRqP+JzAbBzgO8uN/08CXxEmuaC6lQQZ3b5burKhRU12AJnJczwbUw2K5Mb/U85EpSUNhYMG3F28b8NA==}
- /@istanbuljs/schema@0.1.3:
+ '@iconify/types@2.0.0':
+ resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
+
+ '@isaacs/cliui@8.0.2':
+ resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
+ engines: {node: '>=12'}
+
+ '@istanbuljs/schema@0.1.3':
resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==}
engines: {node: '>=8'}
- dev: true
-
- /@jridgewell/gen-mapping@0.1.1:
- resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==}
- engines: {node: '>=6.0.0'}
- dependencies:
- '@jridgewell/set-array': 1.1.2
- '@jridgewell/sourcemap-codec': 1.4.14
- dev: false
- /@jridgewell/gen-mapping@0.3.2:
- resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==}
+ '@jridgewell/gen-mapping@0.3.5':
+ resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}
engines: {node: '>=6.0.0'}
- dependencies:
- '@jridgewell/set-array': 1.1.2
- '@jridgewell/sourcemap-codec': 1.4.14
- '@jridgewell/trace-mapping': 0.3.17
- dev: false
- /@jridgewell/resolve-uri@3.1.0:
- resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==}
+ '@jridgewell/resolve-uri@3.1.2':
+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
engines: {node: '>=6.0.0'}
- /@jridgewell/set-array@1.1.2:
- resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==}
+ '@jridgewell/set-array@1.2.1':
+ resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
engines: {node: '>=6.0.0'}
- dev: false
-
- /@jridgewell/sourcemap-codec@1.4.14:
- resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==}
- /@jridgewell/trace-mapping@0.3.17:
- resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==}
- dependencies:
- '@jridgewell/resolve-uri': 3.1.0
- '@jridgewell/sourcemap-codec': 1.4.14
-
- /@jridgewell/trace-mapping@0.3.9:
- resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
- dependencies:
- '@jridgewell/resolve-uri': 3.1.0
- '@jridgewell/sourcemap-codec': 1.4.14
+ '@jridgewell/sourcemap-codec@1.5.0':
+ resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
- /@ljharb/has-package-exports-patterns@0.0.2:
- resolution: {integrity: sha512-4/RWEeXDO6bocPONheFe6gX/oQdP/bEpv0oL4HqjPP5DCenBSt0mHgahppY49N0CpsaqffdwPq+TlX9CYOq2Dw==}
- dev: false
+ '@jridgewell/trace-mapping@0.3.25':
+ resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
- /@microsoft/api-extractor-model@7.26.2(@types/node@18.11.18):
- resolution: {integrity: sha512-V9tTHbYTNelTrNDXBzeDlszq29nQcjJdP6s27QJiATbqSRjEbKTeztlSVsCRHL2Wkkv5IN5jT4xkYjnFFPbK0A==}
- dependencies:
- '@microsoft/tsdoc': 0.14.2
- '@microsoft/tsdoc-config': 0.16.2
- '@rushstack/node-core-library': 3.55.0(@types/node@18.11.18)
- transitivePeerDependencies:
- - '@types/node'
- dev: true
+ '@microsoft/api-extractor-model@7.29.8':
+ resolution: {integrity: sha512-t3Z/xcO6TRbMcnKGVMs4uMzv/gd5j0NhMiJIGjD4cJMeFJ1Hf8wnLSx37vxlRlL0GWlGJhnFgxvnaL6JlS+73g==}
- /@microsoft/api-extractor@7.34.2(@types/node@18.11.18):
- resolution: {integrity: sha512-oREyUU7p3JgjrqapJxEHe83gA1SXOWgaA4XCiY9PvsiLkgGHtn2ibTRgw9GCI/4kZzcb+OQv5waUDxsnQSKfwQ==}
+ '@microsoft/api-extractor@7.47.11':
+ resolution: {integrity: sha512-lrudfbPub5wzBhymfFtgZKuBvXxoSIAdrvS2UbHjoMT2TjIEddq6Z13pcve7A03BAouw0x8sW8G4txdgfiSwpQ==}
hasBin: true
- dependencies:
- '@microsoft/api-extractor-model': 7.26.2(@types/node@18.11.18)
- '@microsoft/tsdoc': 0.14.2
- '@microsoft/tsdoc-config': 0.16.2
- '@rushstack/node-core-library': 3.55.0(@types/node@18.11.18)
- '@rushstack/rig-package': 0.3.17
- '@rushstack/ts-command-line': 4.13.1
- colors: 1.2.5
- lodash: 4.17.21
- resolve: 1.22.1
- semver: 7.3.8
- source-map: 0.6.1
- typescript: 4.8.4
- transitivePeerDependencies:
- - '@types/node'
- dev: true
- /@microsoft/tsdoc-config@0.16.2:
- resolution: {integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==}
- dependencies:
- '@microsoft/tsdoc': 0.14.2
- ajv: 6.12.6
- jju: 1.4.0
- resolve: 1.19.0
- dev: true
+ '@microsoft/tsdoc-config@0.17.0':
+ resolution: {integrity: sha512-v/EYRXnCAIHxOHW+Plb6OWuUoMotxTN0GLatnpOb1xq0KuTNw/WI3pamJx/UbsoJP5k9MCw1QxvvhPcF9pH3Zg==}
- /@microsoft/tsdoc@0.14.2:
- resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==}
- dev: true
+ '@microsoft/tsdoc@0.15.0':
+ resolution: {integrity: sha512-HZpPoABogPvjeJOdzCOSJsXeL/SMCBgBZMVC3X3d7YYp2gf31MfxhUoYUNwf1ERPJOnQc0wkFn9trqI6ZEdZuA==}
- /@nodelib/fs.scandir@2.1.5:
+ '@nodelib/fs.scandir@2.1.5':
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
engines: {node: '>= 8'}
- dependencies:
- '@nodelib/fs.stat': 2.0.5
- run-parallel: 1.2.0
- /@nodelib/fs.stat@2.0.5:
+ '@nodelib/fs.stat@2.0.5':
resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
engines: {node: '>= 8'}
- /@nodelib/fs.walk@1.2.8:
+ '@nodelib/fs.walk@1.2.8':
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
engines: {node: '>= 8'}
- dependencies:
- '@nodelib/fs.scandir': 2.1.5
- fastq: 1.15.0
-
- /@pkgr/utils@2.3.1:
- resolution: {integrity: sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==}
- engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
- dependencies:
- cross-spawn: 7.0.3
- is-glob: 4.0.3
- open: 8.4.0
- picocolors: 1.0.0
- tiny-glob: 0.2.9
- tslib: 2.5.0
- dev: false
-
- /@proload/core@0.3.3:
- resolution: {integrity: sha512-7dAFWsIK84C90AMl24+N/ProHKm4iw0akcnoKjRvbfHifJZBLhaDsDus1QJmhG12lXj4e/uB/8mB/0aduCW+NQ==}
- dependencies:
- deepmerge: 4.3.0
- escalade: 3.1.1
- dev: false
- /@radix-ui/colors@0.1.8:
- resolution: {integrity: sha512-jwRMXYwC0hUo0mv6wGpuw254Pd9p/R6Td5xsRpOmaWkUHlooNWqVcadgyzlRumMq3xfOTXwJReU0Jv+EIy4Jbw==}
- dev: false
+ '@pkgjs/parseargs@0.11.0':
+ resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
+ engines: {node: '>=14'}
- /@rollup/pluginutils@5.0.2:
- resolution: {integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==}
+ '@rollup/pluginutils@5.1.3':
+ resolution: {integrity: sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==}
engines: {node: '>=14.0.0'}
peerDependencies:
- rollup: ^1.20.0||^2.0.0||^3.0.0
+ rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
peerDependenciesMeta:
rollup:
optional: true
- dependencies:
- '@types/estree': 1.0.0
- estree-walker: 2.0.2
- picomatch: 2.3.1
- dev: true
- /@rushstack/node-core-library@3.55.0(@types/node@18.11.18):
- resolution: {integrity: sha512-6lSel8w3DeGaD/JCKw64wfezEBijlCQlMwBoYg9Ci5VPy+dZ+FpBkIBrY8mi3Ge4xNzr4gyTbQ5XEt0QP1Kv/w==}
- peerDependencies:
- '@types/node': ^14.18.36
- peerDependenciesMeta:
- '@types/node':
- optional: true
- dependencies:
- '@types/node': 18.11.18
- colors: 1.2.5
- fs-extra: 7.0.1
- import-lazy: 4.0.0
- jju: 1.4.0
- resolve: 1.22.1
- semver: 7.3.8
- z-schema: 5.0.5
- dev: true
+ '@rollup/rollup-android-arm-eabi@4.25.0':
+ resolution: {integrity: sha512-CC/ZqFZwlAIbU1wUPisHyV/XRc5RydFrNLtgl3dGYskdwPZdt4HERtKm50a/+DtTlKeCq9IXFEWR+P6blwjqBA==}
+ cpu: [arm]
+ os: [android]
- /@rushstack/rig-package@0.3.17:
- resolution: {integrity: sha512-nxvAGeIMnHl1LlZSQmacgcRV4y1EYtgcDIrw6KkeVjudOMonlxO482PhDj3LVZEp6L7emSf6YSO2s5JkHlwfZA==}
- dependencies:
- resolve: 1.17.0
- strip-json-comments: 3.1.1
- dev: true
+ '@rollup/rollup-android-arm64@4.25.0':
+ resolution: {integrity: sha512-/Y76tmLGUJqVBXXCfVS8Q8FJqYGhgH4wl4qTA24E9v/IJM0XvJCGQVSW1QZ4J+VURO9h8YCa28sTFacZXwK7Rg==}
+ cpu: [arm64]
+ os: [android]
- /@rushstack/ts-command-line@4.13.1:
- resolution: {integrity: sha512-UTQMRyy/jH1IS2U+6pyzyn9xQ2iMcoUKkTcZUzOP/aaMiKlWLwCTDiBVwhw/M1crDx6apF9CwyjuWO9r1SBdJQ==}
- dependencies:
- '@types/argparse': 1.0.38
- argparse: 1.0.10
- colors: 1.2.5
- string-argv: 0.3.1
- dev: true
+ '@rollup/rollup-darwin-arm64@4.25.0':
+ resolution: {integrity: sha512-YVT6L3UrKTlC0FpCZd0MGA7NVdp7YNaEqkENbWQ7AOVOqd/7VzyHpgIpc1mIaxRAo1ZsJRH45fq8j4N63I/vvg==}
+ cpu: [arm64]
+ os: [darwin]
- /@tailwindcss/typography@0.5.9(tailwindcss@3.2.4):
- resolution: {integrity: sha512-t8Sg3DyynFysV9f4JDOVISGsjazNb48AeIYQwcL+Bsq5uf4RYL75C1giZ43KISjeDGBaTN3Kxh7Xj/vRSMJUUg==}
- peerDependencies:
- tailwindcss: '>=3.0.0 || insiders'
- dependencies:
- lodash.castarray: 4.4.0
- lodash.isplainobject: 4.0.6
- lodash.merge: 4.6.2
- postcss-selector-parser: 6.0.10
- tailwindcss: 3.2.4(postcss@8.4.21)(ts-node@10.9.1)
- dev: false
+ '@rollup/rollup-darwin-x64@4.25.0':
+ resolution: {integrity: sha512-ZRL+gexs3+ZmmWmGKEU43Bdn67kWnMeWXLFhcVv5Un8FQcx38yulHBA7XR2+KQdYIOtD0yZDWBCudmfj6lQJoA==}
+ cpu: [x64]
+ os: [darwin]
- /@testing-library/dom@8.20.0:
- resolution: {integrity: sha512-d9ULIT+a4EXLX3UU8FBjauG9NnsZHkHztXoIcTsOKoOw030fyjheN9svkTULjJxtYag9DZz5Jz5qkWZDPxTFwA==}
- engines: {node: '>=12'}
- dependencies:
- '@babel/code-frame': 7.18.6
- '@babel/runtime': 7.20.13
- '@types/aria-query': 5.0.1
- aria-query: 5.1.3
- chalk: 4.1.2
- dom-accessibility-api: 0.5.16
- lz-string: 1.4.4
- pretty-format: 27.5.1
- dev: true
+ '@rollup/rollup-freebsd-arm64@4.25.0':
+ resolution: {integrity: sha512-xpEIXhiP27EAylEpreCozozsxWQ2TJbOLSivGfXhU4G1TBVEYtUPi2pOZBnvGXHyOdLAUUhPnJzH3ah5cqF01g==}
+ cpu: [arm64]
+ os: [freebsd]
- /@testing-library/react@13.4.0(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-sXOGON+WNTh3MLE9rve97ftaZukN3oNf2KjDy7YTx6hcTO2uuLHuCGynMDhFwGw/jYf4OJ2Qk0i4i79qMNNkyw==}
- engines: {node: '>=12'}
- peerDependencies:
- react: ^18.0.0
- react-dom: ^18.0.0
- dependencies:
- '@babel/runtime': 7.20.13
- '@testing-library/dom': 8.20.0
- '@types/react-dom': 18.0.10
- react: 18.2.0
- react-dom: 18.2.0(react@18.2.0)
- dev: true
+ '@rollup/rollup-freebsd-x64@4.25.0':
+ resolution: {integrity: sha512-sC5FsmZGlJv5dOcURrsnIK7ngc3Kirnx3as2XU9uER+zjfyqIjdcMVgzy4cOawhsssqzoAX19qmxgJ8a14Qrqw==}
+ cpu: [x64]
+ os: [freebsd]
- /@tootallnate/once@2.0.0:
- resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==}
- engines: {node: '>= 10'}
- dev: true
+ '@rollup/rollup-linux-arm-gnueabihf@4.25.0':
+ resolution: {integrity: sha512-uD/dbLSs1BEPzg564TpRAQ/YvTnCds2XxyOndAO8nJhaQcqQGFgv/DAVko/ZHap3boCvxnzYMa3mTkV/B/3SWA==}
+ cpu: [arm]
+ os: [linux]
- /@ts-morph/common@0.18.1:
- resolution: {integrity: sha512-RVE+zSRICWRsfrkAw5qCAK+4ZH9kwEFv5h0+/YeHTLieWP7F4wWq4JsKFuNWG+fYh/KF+8rAtgdj5zb2mm+DVA==}
- dependencies:
- fast-glob: 3.2.12
- minimatch: 5.1.6
- mkdirp: 1.0.4
- path-browserify: 1.0.1
- dev: true
+ '@rollup/rollup-linux-arm-musleabihf@4.25.0':
+ resolution: {integrity: sha512-ZVt/XkrDlQWegDWrwyC3l0OfAF7yeJUF4fq5RMS07YM72BlSfn2fQQ6lPyBNjt+YbczMguPiJoCfaQC2dnflpQ==}
+ cpu: [arm]
+ os: [linux]
- /@tsconfig/node10@1.0.9:
- resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==}
+ '@rollup/rollup-linux-arm64-gnu@4.25.0':
+ resolution: {integrity: sha512-qboZ+T0gHAW2kkSDPHxu7quaFaaBlynODXpBVnPxUgvWYaE84xgCKAPEYE+fSMd3Zv5PyFZR+L0tCdYCMAtG0A==}
+ cpu: [arm64]
+ os: [linux]
- /@tsconfig/node12@1.0.11:
- resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==}
+ '@rollup/rollup-linux-arm64-musl@4.25.0':
+ resolution: {integrity: sha512-ndWTSEmAaKr88dBuogGH2NZaxe7u2rDoArsejNslugHZ+r44NfWiwjzizVS1nUOHo+n1Z6qV3X60rqE/HlISgw==}
+ cpu: [arm64]
+ os: [linux]
- /@tsconfig/node14@1.0.3:
- resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==}
+ '@rollup/rollup-linux-powerpc64le-gnu@4.25.0':
+ resolution: {integrity: sha512-BVSQvVa2v5hKwJSy6X7W1fjDex6yZnNKy3Kx1JGimccHft6HV0THTwNtC2zawtNXKUu+S5CjXslilYdKBAadzA==}
+ cpu: [ppc64]
+ os: [linux]
- /@tsconfig/node16@1.0.3:
- resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==}
+ '@rollup/rollup-linux-riscv64-gnu@4.25.0':
+ resolution: {integrity: sha512-G4hTREQrIdeV0PE2JruzI+vXdRnaK1pg64hemHq2v5fhv8C7WjVaeXc9P5i4Q5UC06d/L+zA0mszYIKl+wY8oA==}
+ cpu: [riscv64]
+ os: [linux]
- /@types/argparse@1.0.38:
- resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==}
- dev: true
+ '@rollup/rollup-linux-s390x-gnu@4.25.0':
+ resolution: {integrity: sha512-9T/w0kQ+upxdkFL9zPVB6zy9vWW1deA3g8IauJxojN4bnz5FwSsUAD034KpXIVX5j5p/rn6XqumBMxfRkcHapQ==}
+ cpu: [s390x]
+ os: [linux]
- /@types/aria-query@5.0.1:
- resolution: {integrity: sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q==}
- dev: true
+ '@rollup/rollup-linux-x64-gnu@4.25.0':
+ resolution: {integrity: sha512-ThcnU0EcMDn+J4B9LD++OgBYxZusuA7iemIIiz5yzEcFg04VZFzdFjuwPdlURmYPZw+fgVrFzj4CA64jSTG4Ig==}
+ cpu: [x64]
+ os: [linux]
- /@types/babel__core@7.20.0:
- resolution: {integrity: sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==}
- dependencies:
- '@babel/parser': 7.20.15
- '@babel/types': 7.20.7
- '@types/babel__generator': 7.6.4
- '@types/babel__template': 7.4.1
- '@types/babel__traverse': 7.18.3
- dev: false
+ '@rollup/rollup-linux-x64-musl@4.25.0':
+ resolution: {integrity: sha512-zx71aY2oQxGxAT1JShfhNG79PnjYhMC6voAjzpu/xmMjDnKNf6Nl/xv7YaB/9SIa9jDYf8RBPWEnjcdlhlv1rQ==}
+ cpu: [x64]
+ os: [linux]
- /@types/babel__generator@7.6.4:
- resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==}
- dependencies:
- '@babel/types': 7.20.7
- dev: false
+ '@rollup/rollup-win32-arm64-msvc@4.25.0':
+ resolution: {integrity: sha512-JT8tcjNocMs4CylWY/CxVLnv8e1lE7ff1fi6kbGocWwxDq9pj30IJ28Peb+Y8yiPNSF28oad42ApJB8oUkwGww==}
+ cpu: [arm64]
+ os: [win32]
- /@types/babel__template@7.4.1:
- resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==}
- dependencies:
- '@babel/parser': 7.20.15
- '@babel/types': 7.20.7
- dev: false
+ '@rollup/rollup-win32-ia32-msvc@4.25.0':
+ resolution: {integrity: sha512-dRLjLsO3dNOfSN6tjyVlG+Msm4IiZnGkuZ7G5NmpzwF9oOc582FZG05+UdfTbz5Jd4buK/wMb6UeHFhG18+OEg==}
+ cpu: [ia32]
+ os: [win32]
- /@types/babel__traverse@7.18.3:
- resolution: {integrity: sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==}
- dependencies:
- '@babel/types': 7.20.7
- dev: false
+ '@rollup/rollup-win32-x64-msvc@4.25.0':
+ resolution: {integrity: sha512-/RqrIFtLB926frMhZD0a5oDa4eFIbyNEwLLloMTEjmqfwZWXywwVVOVmwTsuyhC9HKkVEZcOOi+KV4U9wmOdlg==}
+ cpu: [x64]
+ os: [win32]
- /@types/chai-subset@1.3.3:
- resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==}
- dependencies:
- '@types/chai': 4.3.4
- dev: true
+ '@rushstack/node-core-library@5.9.0':
+ resolution: {integrity: sha512-MMsshEWkTbXqxqFxD4gcIUWQOCeBChlGczdZbHfqmNZQFLHB3yWxDFSMHFUdu2/OB9NUk7Awn5qRL+rws4HQNg==}
+ peerDependencies:
+ '@types/node': '*'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
- /@types/chai@4.3.4:
- resolution: {integrity: sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==}
- dev: true
+ '@rushstack/rig-package@0.5.3':
+ resolution: {integrity: sha512-olzSSjYrvCNxUFZowevC3uz8gvKr3WTpHQ7BkpjtRpA3wK+T0ybep/SRUMfr195gBzJm5gaXw0ZMgjIyHqJUow==}
- /@types/cross-spawn@6.0.2:
- resolution: {integrity: sha512-KuwNhp3eza+Rhu8IFI5HUXRP0LIhqH5cAjubUvGXXthh4YYBuP2ntwEX+Cz8GJoZUHlKo247wPWOfA9LYEq4cw==}
- dependencies:
- '@types/node': 18.11.18
- dev: true
+ '@rushstack/terminal@0.14.2':
+ resolution: {integrity: sha512-2fC1wqu1VCExKC0/L+0noVcFQEXEnoBOtCIex1TOjBzEDWcw8KzJjjj7aTP6mLxepG0XIyn9OufeFb6SFsa+sg==}
+ peerDependencies:
+ '@types/node': '*'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
- /@types/debug@4.1.7:
- resolution: {integrity: sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==}
- dependencies:
- '@types/ms': 0.7.31
- dev: false
+ '@rushstack/ts-command-line@4.23.0':
+ resolution: {integrity: sha512-jYREBtsxduPV6ptNq8jOKp9+yx0ld1Tb/Tkdnlj8gTjazl1sF3DwX2VbluyYrNd0meWIL0bNeer7WDf5tKFjaQ==}
- /@types/estree@1.0.0:
- resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==}
+ '@shikijs/core@1.22.2':
+ resolution: {integrity: sha512-bvIQcd8BEeR1yFvOYv6HDiyta2FFVePbzeowf5pPS1avczrPK+cjmaxxh0nx5QzbON7+Sv0sQfQVciO7bN72sg==}
- /@types/hast@2.3.4:
- resolution: {integrity: sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==}
- dependencies:
- '@types/unist': 2.0.6
- dev: false
+ '@shikijs/engine-javascript@1.22.2':
+ resolution: {integrity: sha512-iOvql09ql6m+3d1vtvP8fLCVCK7BQD1pJFmHIECsujB0V32BJ0Ab6hxk1ewVSMFA58FI0pR2Had9BKZdyQrxTw==}
- /@types/istanbul-lib-coverage@2.0.4:
- resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==}
- dev: true
+ '@shikijs/engine-oniguruma@1.22.2':
+ resolution: {integrity: sha512-GIZPAGzQOy56mGvWMoZRPggn0dTlBf1gutV5TdceLCZlFNqWmuc7u+CzD0Gd9vQUTgLbrt0KLzz6FNprqYAxlA==}
- /@types/json-schema@7.0.11:
- resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==}
- dev: false
+ '@shikijs/transformers@1.22.2':
+ resolution: {integrity: sha512-8f78OiBa6pZDoZ53lYTmuvpFPlWtevn23bzG+azpPVvZg7ITax57o/K3TC91eYL3OMJOO0onPbgnQyZjRos8XQ==}
- /@types/json5@0.0.30:
- resolution: {integrity: sha512-sqm9g7mHlPY/43fcSNrCYfOeX9zkTTK+euO5E6+CVijSMm5tTjkVdwdqRkY3ljjIAf8679vps5jKUoJBCLsMDA==}
- dev: false
+ '@shikijs/types@1.22.2':
+ resolution: {integrity: sha512-NCWDa6LGZqTuzjsGfXOBWfjS/fDIbDdmVDug+7ykVe1IKT4c1gakrvlfFYp5NhAXH/lyqLM8wsAPo5wNy73Feg==}
- /@types/mdast@3.0.10:
- resolution: {integrity: sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==}
- dependencies:
- '@types/unist': 2.0.6
- dev: false
+ '@shikijs/vscode-textmate@9.3.0':
+ resolution: {integrity: sha512-jn7/7ky30idSkd/O5yDBfAnVt+JJpepofP/POZ1iMOxK59cOfqIgg/Dj0eFsjOTMw+4ycJN0uhZH/Eb0bs/EUA==}
- /@types/minimist@1.2.2:
- resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==}
- dev: true
+ '@testing-library/dom@10.4.0':
+ resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==}
+ engines: {node: '>=18'}
- /@types/ms@0.7.31:
- resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==}
- dev: false
+ '@testing-library/react@16.0.1':
+ resolution: {integrity: sha512-dSmwJVtJXmku+iocRhWOUFbrERC76TX2Mnf0ATODz8brzAZrMBbzLwQixlBSanZxR6LddK3eiwpSFZgDET1URg==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@testing-library/dom': ^10.0.0
+ '@types/react': ^18.0.0
+ '@types/react-dom': ^18.0.0
+ react: ^18.0.0
+ react-dom: ^18.0.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
- /@types/nlcst@1.0.0:
- resolution: {integrity: sha512-3TGCfOcy8R8mMQ4CNSNOe3PG66HttvjcLzCoOpvXvDtfWOTi+uT/rxeOKm/qEwbM4SNe1O/PjdiBK2YcTjU4OQ==}
- dependencies:
- '@types/unist': 2.0.6
- dev: false
+ '@testing-library/user-event@14.5.2':
+ resolution: {integrity: sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==}
+ engines: {node: '>=12', npm: '>=6'}
+ peerDependencies:
+ '@testing-library/dom': '>=7.21.4'
- /@types/node@17.0.45:
- resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==}
- dev: false
+ '@types/argparse@1.0.38':
+ resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==}
- /@types/node@18.11.18:
- resolution: {integrity: sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==}
+ '@types/aria-query@5.0.4':
+ resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==}
- /@types/normalize-package-data@2.4.1:
- resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==}
- dev: true
+ '@types/conventional-commits-parser@5.0.0':
+ resolution: {integrity: sha512-loB369iXNmAZglwWATL+WRe+CRMmmBPtpolYzIebFaX4YA3x+BEfLqhUAV9WanycKI3TG1IMr5bMJDajDKLlUQ==}
- /@types/parse5@6.0.3:
- resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==}
- dev: false
+ '@types/eslint-config-prettier@6.11.3':
+ resolution: {integrity: sha512-3wXCiM8croUnhg9LdtZUJQwNcQYGWxxdOWDjPe1ykCqJFPVpzAKfs/2dgSoCtAvdPeaponcWPI7mPcGGp9dkKQ==}
- /@types/prop-types@15.7.5:
- resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==}
- dev: true
+ '@types/eslint@9.6.1':
+ resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==}
- /@types/react-dom@18.0.10:
- resolution: {integrity: sha512-E42GW/JA4Qv15wQdqJq8DL4JhNpB3prJgjgapN3qJT9K2zO5IIAQh4VXvCEDupoqAwnz0cY4RlXeC/ajX5SFHg==}
- dependencies:
- '@types/react': 18.0.27
- dev: true
+ '@types/eslint__js@8.42.3':
+ resolution: {integrity: sha512-alfG737uhmPdnvkrLdZLcEKJ/B8s9Y4hrZ+YAdzUeoArBlSUERA2E87ROfOaS4jd/C45fzOoZzidLc1IPwLqOw==}
- /@types/react@18.0.27:
- resolution: {integrity: sha512-3vtRKHgVxu3Jp9t718R9BuzoD4NcQ8YJ5XRzsSKxNDiDonD2MXIT1TmSkenxuCycZJoQT5d2vE8LwWJxBC1gmA==}
- dependencies:
- '@types/prop-types': 15.7.5
- '@types/scheduler': 0.16.2
- csstype: 3.1.1
- dev: true
+ '@types/estree@1.0.6':
+ resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
- /@types/resolve@1.20.2:
- resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==}
- dev: false
+ '@types/hast@3.0.4':
+ resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==}
- /@types/sax@1.2.4:
- resolution: {integrity: sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw==}
- dependencies:
- '@types/node': 18.11.18
- dev: false
+ '@types/json-schema@7.0.15':
+ resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
- /@types/scheduler@0.16.2:
- resolution: {integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==}
- dev: true
+ '@types/linkify-it@5.0.0':
+ resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==}
- /@types/semver@7.3.13:
- resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==}
- dev: false
+ '@types/markdown-it@14.1.2':
+ resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==}
- /@types/unist@2.0.6:
- resolution: {integrity: sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==}
- dev: false
+ '@types/mdast@4.0.4':
+ resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==}
- /@types/yargs-parser@21.0.0:
- resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==}
- dev: false
+ '@types/mdurl@2.0.0':
+ resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==}
- /@typescript-eslint/eslint-plugin@5.50.0(@typescript-eslint/parser@5.50.0)(eslint@8.33.0)(typescript@4.9.5):
- resolution: {integrity: sha512-vwksQWSFZiUhgq3Kv7o1Jcj0DUNylwnIlGvKvLLYsq8pAWha6/WCnXUeaSoNNha/K7QSf2+jvmkxggC1u3pIwQ==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ '@types/node@22.9.0':
+ resolution: {integrity: sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==}
+
+ '@types/prop-types@15.7.13':
+ resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==}
+
+ '@types/react-dom@18.3.1':
+ resolution: {integrity: sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==}
+
+ '@types/react@18.3.12':
+ resolution: {integrity: sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==}
+
+ '@types/unist@3.0.3':
+ resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
+
+ '@types/web-bluetooth@0.0.20':
+ resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==}
+
+ '@typescript-eslint/eslint-plugin@8.13.0':
+ resolution: {integrity: sha512-nQtBLiZYMUPkclSeC3id+x4uVd1SGtHuElTxL++SfP47jR0zfkZBJHc+gL4qPsgTuypz0k8Y2GheaDYn6Gy3rg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- '@typescript-eslint/parser': ^5.0.0
- eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
+ '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0
+ eslint: ^8.57.0 || ^9.0.0
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
- dependencies:
- '@typescript-eslint/parser': 5.50.0(eslint@8.33.0)(typescript@4.9.5)
- '@typescript-eslint/scope-manager': 5.50.0
- '@typescript-eslint/type-utils': 5.50.0(eslint@8.33.0)(typescript@4.9.5)
- '@typescript-eslint/utils': 5.50.0(eslint@8.33.0)(typescript@4.9.5)
- debug: 4.3.4
- eslint: 8.33.0
- grapheme-splitter: 1.0.4
- ignore: 5.2.4
- natural-compare-lite: 1.4.0
- regexpp: 3.2.0
- semver: 7.3.8
- tsutils: 3.21.0(typescript@4.9.5)
- typescript: 4.9.5
- transitivePeerDependencies:
- - supports-color
- dev: false
- /@typescript-eslint/parser@5.50.0(eslint@8.33.0)(typescript@4.9.5):
- resolution: {integrity: sha512-KCcSyNaogUDftK2G9RXfQyOCt51uB5yqC6pkUYqhYh8Kgt+DwR5M0EwEAxGPy/+DH6hnmKeGsNhiZRQxjH71uQ==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ '@typescript-eslint/parser@8.13.0':
+ resolution: {integrity: sha512-w0xp+xGg8u/nONcGw1UXAr6cjCPU1w0XVyBs6Zqaj5eLmxkKQAByTdV/uGgNN5tVvN/kKpoQlP2cL7R+ajZZIQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
+ eslint: ^8.57.0 || ^9.0.0
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
- dependencies:
- '@typescript-eslint/scope-manager': 5.50.0
- '@typescript-eslint/types': 5.50.0
- '@typescript-eslint/typescript-estree': 5.50.0(typescript@4.9.5)
- debug: 4.3.4
- eslint: 8.33.0
- typescript: 4.9.5
- transitivePeerDependencies:
- - supports-color
- dev: false
- /@typescript-eslint/scope-manager@5.50.0:
- resolution: {integrity: sha512-rt03kaX+iZrhssaT974BCmoUikYtZI24Vp/kwTSy841XhiYShlqoshRFDvN1FKKvU2S3gK+kcBW1EA7kNUrogg==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- dependencies:
- '@typescript-eslint/types': 5.50.0
- '@typescript-eslint/visitor-keys': 5.50.0
- dev: false
+ '@typescript-eslint/scope-manager@8.13.0':
+ resolution: {integrity: sha512-XsGWww0odcUT0gJoBZ1DeulY1+jkaHUciUq4jKNv4cpInbvvrtDoyBH9rE/n2V29wQJPk8iCH1wipra9BhmiMA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- /@typescript-eslint/type-utils@5.50.0(eslint@8.33.0)(typescript@4.9.5):
- resolution: {integrity: sha512-dcnXfZ6OGrNCO7E5UY/i0ktHb7Yx1fV6fnQGGrlnfDhilcs6n19eIRcvLBqx6OQkrPaFlDPk3OJ0WlzQfrV0bQ==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ '@typescript-eslint/type-utils@8.13.0':
+ resolution: {integrity: sha512-Rqnn6xXTR316fP4D2pohZenJnp+NwQ1mo7/JM+J1LWZENSLkJI8ID8QNtlvFeb0HnFSK94D6q0cnMX6SbE5/vA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- eslint: '*'
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
- dependencies:
- '@typescript-eslint/typescript-estree': 5.50.0(typescript@4.9.5)
- '@typescript-eslint/utils': 5.50.0(eslint@8.33.0)(typescript@4.9.5)
- debug: 4.3.4
- eslint: 8.33.0
- tsutils: 3.21.0(typescript@4.9.5)
- typescript: 4.9.5
- transitivePeerDependencies:
- - supports-color
- dev: false
- /@typescript-eslint/types@5.50.0:
- resolution: {integrity: sha512-atruOuJpir4OtyNdKahiHZobPKFvZnBnfDiyEaBf6d9vy9visE7gDjlmhl+y29uxZ2ZDgvXijcungGFjGGex7w==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- dev: false
+ '@typescript-eslint/types@8.13.0':
+ resolution: {integrity: sha512-4cyFErJetFLckcThRUFdReWJjVsPCqyBlJTi6IDEpc1GWCIIZRFxVppjWLIMcQhNGhdWJJRYFHpHoDWvMlDzng==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- /@typescript-eslint/typescript-estree@5.50.0(typescript@4.9.5):
- resolution: {integrity: sha512-Gq4zapso+OtIZlv8YNAStFtT6d05zyVCK7Fx3h5inlLBx2hWuc/0465C2mg/EQDDU2LKe52+/jN4f0g9bd+kow==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ '@typescript-eslint/typescript-estree@8.13.0':
+ resolution: {integrity: sha512-v7SCIGmVsRK2Cy/LTLGN22uea6SaUIlpBcO/gnMGT/7zPtxp90bphcGf4fyrCQl3ZtiBKqVTG32hb668oIYy1g==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
- dependencies:
- '@typescript-eslint/types': 5.50.0
- '@typescript-eslint/visitor-keys': 5.50.0
- debug: 4.3.4
- globby: 11.1.0
- is-glob: 4.0.3
- semver: 7.3.8
- tsutils: 3.21.0(typescript@4.9.5)
- typescript: 4.9.5
- transitivePeerDependencies:
- - supports-color
- dev: false
- /@typescript-eslint/utils@5.50.0(eslint@8.33.0)(typescript@4.9.5):
- resolution: {integrity: sha512-v/AnUFImmh8G4PH0NDkf6wA8hujNNcrwtecqW4vtQ1UOSNBaZl49zP1SHoZ/06e+UiwzHpgb5zP5+hwlYYWYAw==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ '@typescript-eslint/utils@8.13.0':
+ resolution: {integrity: sha512-A1EeYOND6Uv250nybnLZapeXpYMl8tkzYUxqmoKAWnI4sei3ihf2XdZVd+vVOmHGcp3t+P7yRrNsyyiXTvShFQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
- dependencies:
- '@types/json-schema': 7.0.11
- '@types/semver': 7.3.13
- '@typescript-eslint/scope-manager': 5.50.0
- '@typescript-eslint/types': 5.50.0
- '@typescript-eslint/typescript-estree': 5.50.0(typescript@4.9.5)
- eslint: 8.33.0
- eslint-scope: 5.1.1
- eslint-utils: 3.0.0(eslint@8.33.0)
- semver: 7.3.8
- transitivePeerDependencies:
- - supports-color
- - typescript
- dev: false
+ eslint: ^8.57.0 || ^9.0.0
- /@typescript-eslint/visitor-keys@5.50.0:
- resolution: {integrity: sha512-cdMeD9HGu6EXIeGOh2yVW6oGf9wq8asBgZx7nsR/D36gTfQ0odE5kcRYe5M81vjEFAcPeugXrHg78Imu55F6gg==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- dependencies:
- '@typescript-eslint/types': 5.50.0
- eslint-visitor-keys: 3.3.0
- dev: false
+ '@typescript-eslint/visitor-keys@8.13.0':
+ resolution: {integrity: sha512-7N/+lztJqH4Mrf0lb10R/CbI1EaAMMGyF5y0oJvFoAhafwgiRA7TXyd8TFn8FC8k5y2dTsYogg238qavRGNnlw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- /@vitest/coverage-c8@0.28.4(jsdom@21.1.0):
- resolution: {integrity: sha512-btelLBxaWhHnywXRQxDlrvPhGdnuIaD3XulsxcZRIcnpLPbFu39dNTT0IYu2QWP2ZZrV0AmNtdLIfD4c77zMAg==}
- dependencies:
- c8: 7.12.0
- picocolors: 1.0.0
- std-env: 3.3.2
- vitest: 0.28.4(jsdom@21.1.0)
- transitivePeerDependencies:
- - '@edge-runtime/vm'
- - '@vitest/browser'
- - '@vitest/ui'
- - happy-dom
- - jsdom
- - less
- - sass
- - stylus
- - sugarss
- - supports-color
- - terser
- dev: true
+ '@ungap/structured-clone@1.2.0':
+ resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
- /@vitest/expect@0.28.4:
- resolution: {integrity: sha512-JqK0NZ4brjvOSL8hXAnIsfi+jxDF7rH/ZWCGCt0FAqRnVFc1hXsfwXksQvEnKqD84avRt3gmeXoK4tNbmkoVsQ==}
- dependencies:
- '@vitest/spy': 0.28.4
- '@vitest/utils': 0.28.4
- chai: 4.3.7
- dev: true
+ '@vitejs/plugin-vue@5.1.5':
+ resolution: {integrity: sha512-dlnib73G05CDBAUR/YpuZcQQ47fpjihnnNouAAqN62z+oqSsWJ+kh52GRzIxpkgFG3q11eXK7Di7RMmoCwISZA==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+ peerDependencies:
+ vite: ^5.0.0
+ vue: ^3.2.25
- /@vitest/runner@0.28.4:
- resolution: {integrity: sha512-Q8UV6GjDvBSTfUoq0QXVCNpNOUrWu4P2qvRq7ssJWzn0+S0ojbVOxEjMt+8a32X6SdkhF8ak+2nkppsqV0JyNQ==}
- dependencies:
- '@vitest/utils': 0.28.4
- p-limit: 4.0.0
- pathe: 1.1.0
- dev: true
+ '@vitest/coverage-v8@2.1.4':
+ resolution: {integrity: sha512-FPKQuJfR6VTfcNMcGpqInmtJuVXFSCd9HQltYncfR01AzXhLucMEtQ5SinPdZxsT5x/5BK7I5qFJ5/ApGCmyTQ==}
+ peerDependencies:
+ '@vitest/browser': 2.1.4
+ vitest: 2.1.4
+ peerDependenciesMeta:
+ '@vitest/browser':
+ optional: true
- /@vitest/spy@0.28.4:
- resolution: {integrity: sha512-8WuhfXLlvCXpNXEGJW6Gc+IKWI32435fQJLh43u70HnZ1otJOa2Cmg2Wy2Aym47ZnNCP4NolF+8cUPwd0MigKQ==}
- dependencies:
- tinyspy: 1.0.2
- dev: true
+ '@vitest/expect@2.1.4':
+ resolution: {integrity: sha512-DOETT0Oh1avie/D/o2sgMHGrzYUFFo3zqESB2Hn70z6QB1HrS2IQ9z5DfyTqU8sg4Bpu13zZe9V4+UTNQlUeQA==}
- /@vitest/utils@0.28.4:
- resolution: {integrity: sha512-l2QztOLdc2LkR+w/lP52RGh8hW+Ul4KESmCAgVE8q737I7e7bQoAfkARKpkPJ4JQtGpwW4deqlj1732VZD7TFw==}
- dependencies:
- cli-truncate: 3.1.0
- diff: 5.1.0
- loupe: 2.3.6
- picocolors: 1.0.0
- pretty-format: 27.5.1
- dev: true
+ '@vitest/mocker@2.1.4':
+ resolution: {integrity: sha512-Ky/O1Lc0QBbutJdW0rqLeFNbuLEyS+mIPiNdlVlp2/yhJ0SbyYqObS5IHdhferJud8MbbwMnexg4jordE5cCoQ==}
+ peerDependencies:
+ msw: ^2.4.9
+ vite: ^5.0.0
+ peerDependenciesMeta:
+ msw:
+ optional: true
+ vite:
+ optional: true
- /@vscode/emmet-helper@2.8.6:
- resolution: {integrity: sha512-IIB8jbiKy37zN8bAIHx59YmnIelY78CGHtThnibD/d3tQOKRY83bYVi9blwmZVUZh6l9nfkYH3tvReaiNxY9EQ==}
- dependencies:
- emmet: 2.3.6
- jsonc-parser: 2.3.1
- vscode-languageserver-textdocument: 1.0.8
- vscode-languageserver-types: 3.17.2
- vscode-uri: 2.1.2
- dev: false
+ '@vitest/pretty-format@2.1.4':
+ resolution: {integrity: sha512-L95zIAkEuTDbUX1IsjRl+vyBSLh3PwLLgKpghl37aCK9Jvw0iP+wKwIFhfjdUtA2myLgjrG6VU6JCFLv8q/3Ww==}
- /@vscode/l10n@0.0.11:
- resolution: {integrity: sha512-ukOMWnCg1tCvT7WnDfsUKQOFDQGsyR5tNgRpwmqi+5/vzU3ghdDXzvIM4IOPdSb3OeSsBNvmSL8nxIVOqi2WXA==}
- dev: false
+ '@vitest/runner@2.1.4':
+ resolution: {integrity: sha512-sKRautINI9XICAMl2bjxQM8VfCMTB0EbsBc/EDFA57V6UQevEKY/TOPOF5nzcvCALltiLfXWbq4MaAwWx/YxIA==}
- /JSONStream@1.3.5:
- resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
- hasBin: true
- dependencies:
- jsonparse: 1.3.1
- through: 2.3.8
- dev: true
+ '@vitest/snapshot@2.1.4':
+ resolution: {integrity: sha512-3Kab14fn/5QZRog5BPj6Rs8dc4B+mim27XaKWFWHWA87R56AKjHTGcBFKpvZKDzC4u5Wd0w/qKsUIio3KzWW4Q==}
- /abab@2.0.6:
- resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==}
- dev: true
+ '@vitest/spy@2.1.4':
+ resolution: {integrity: sha512-4JOxa+UAizJgpZfaCPKK2smq9d8mmjZVPMt2kOsg/R8QkoRzydHH1qHxIYNvr1zlEaFj4SXiaaJWxq/LPLKaLg==}
- /acorn-globals@7.0.1:
- resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==}
- dependencies:
- acorn: 8.8.2
- acorn-walk: 8.2.0
- dev: true
+ '@vitest/utils@2.1.4':
+ resolution: {integrity: sha512-MXDnZn0Awl2S86PSNIim5PWXgIAx8CIkzu35mBdSApUip6RFOGXBCf3YFyeEu8n1IHk4bWD46DeYFu9mQlFIRg==}
- /acorn-jsx@5.3.2(acorn@8.8.2):
- resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
+ '@volar/language-core@2.4.10':
+ resolution: {integrity: sha512-hG3Z13+nJmGaT+fnQzAkS0hjJRa2FCeqZt6Bd+oGNhUkQ+mTFsDETg5rqUTxyzIh5pSOGY7FHCWUS8G82AzLCA==}
+
+ '@volar/source-map@2.4.10':
+ resolution: {integrity: sha512-OCV+b5ihV0RF3A7vEvNyHPi4G4kFa6ukPmyVocmqm5QzOd8r5yAtiNvaPEjl8dNvgC/lj4JPryeeHLdXd62rWA==}
+
+ '@volar/typescript@2.4.10':
+ resolution: {integrity: sha512-F8ZtBMhSXyYKuBfGpYwqA5rsONnOwAVvjyE7KPYJ7wgZqo2roASqNWUnianOomJX5u1cxeRooHV59N0PhvEOgw==}
+
+ '@vue/compiler-core@3.5.12':
+ resolution: {integrity: sha512-ISyBTRMmMYagUxhcpyEH0hpXRd/KqDU4ymofPgl2XAkY9ZhQ+h0ovEZJIiPop13UmR/54oA2cgMDjgroRelaEw==}
+
+ '@vue/compiler-dom@3.5.12':
+ resolution: {integrity: sha512-9G6PbJ03uwxLHKQ3P42cMTi85lDRvGLB2rSGOiQqtXELat6uI4n8cNz9yjfVHRPIu+MsK6TE418Giruvgptckg==}
+
+ '@vue/compiler-sfc@3.5.12':
+ resolution: {integrity: sha512-2k973OGo2JuAa5+ZlekuQJtitI5CgLMOwgl94BzMCsKZCX/xiqzJYzapl4opFogKHqwJk34vfsaKpfEhd1k5nw==}
+
+ '@vue/compiler-ssr@3.5.12':
+ resolution: {integrity: sha512-eLwc7v6bfGBSM7wZOGPmRavSWzNFF6+PdRhE+VFJhNCgHiF8AM7ccoqcv5kBXA2eWUfigD7byekvf/JsOfKvPA==}
+
+ '@vue/compiler-vue2@2.7.16':
+ resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==}
+
+ '@vue/devtools-api@7.6.4':
+ resolution: {integrity: sha512-5AaJ5ELBIuevmFMZYYLuOO9HUuY/6OlkOELHE7oeDhy4XD/hSODIzktlsvBOsn+bto3aD0psj36LGzwVu5Ip8w==}
+
+ '@vue/devtools-kit@7.6.4':
+ resolution: {integrity: sha512-Zs86qIXXM9icU0PiGY09PQCle4TI750IPLmAJzW5Kf9n9t5HzSYf6Rz6fyzSwmfMPiR51SUKJh9sXVZu78h2QA==}
+
+ '@vue/devtools-shared@7.6.4':
+ resolution: {integrity: sha512-nD6CUvBEel+y7zpyorjiUocy0nh77DThZJ0k1GRnJeOmY3ATq2fWijEp7wk37gb023Cb0R396uYh5qMSBQ5WFg==}
+
+ '@vue/language-core@2.1.6':
+ resolution: {integrity: sha512-MW569cSky9R/ooKMh6xa2g1D0AtRKbL56k83dzus/bx//RDJk24RHWkMzbAlXjMdDNyxAaagKPRquBIxkxlCkg==}
peerDependencies:
- acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
- dependencies:
- acorn: 8.8.2
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
- /acorn-node@1.8.2:
- resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==}
- dependencies:
- acorn: 7.4.1
- acorn-walk: 7.2.0
- xtend: 4.0.2
- dev: false
+ '@vue/reactivity@3.5.12':
+ resolution: {integrity: sha512-UzaN3Da7xnJXdz4Okb/BGbAaomRHc3RdoWqTzlvd9+WBR5m3J39J1fGcHes7U3za0ruYn/iYy/a1euhMEHvTAg==}
- /acorn-walk@7.2.0:
- resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==}
- engines: {node: '>=0.4.0'}
- dev: false
+ '@vue/runtime-core@3.5.12':
+ resolution: {integrity: sha512-hrMUYV6tpocr3TL3Ad8DqxOdpDe4zuQY4HPY3X/VRh+L2myQO8MFXPAMarIOSGNu0bFAjh1yBkMPXZBqCk62Uw==}
- /acorn-walk@8.2.0:
- resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==}
- engines: {node: '>=0.4.0'}
+ '@vue/runtime-dom@3.5.12':
+ resolution: {integrity: sha512-q8VFxR9A2MRfBr6/55Q3umyoN7ya836FzRXajPB6/Vvuv0zOPL+qltd9rIMzG/DbRLAIlREmnLsplEF/kotXKA==}
- /acorn@7.4.1:
- resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==}
- engines: {node: '>=0.4.0'}
+ '@vue/server-renderer@3.5.12':
+ resolution: {integrity: sha512-I3QoeDDeEPZm8yR28JtY+rk880Oqmj43hreIBVTicisFTx/Dl7JpG72g/X7YF8hnQD3IFhkky5i2bPonwrTVPg==}
+ peerDependencies:
+ vue: 3.5.12
+
+ '@vue/shared@3.5.12':
+ resolution: {integrity: sha512-L2RPSAwUFbgZH20etwrXyVyCBu9OxRSi8T/38QsvnkJyvq2LufW2lDCOzm7t/U9C1mkhJGWYfCuFBCmIuNivrg==}
+
+ '@vueuse/core@11.2.0':
+ resolution: {integrity: sha512-JIUwRcOqOWzcdu1dGlfW04kaJhW3EXnnjJJfLTtddJanymTL7lF1C0+dVVZ/siLfc73mWn+cGP1PE1PKPruRSA==}
+
+ '@vueuse/integrations@11.2.0':
+ resolution: {integrity: sha512-zGXz3dsxNHKwiD9jPMvR3DAxQEOV6VWIEYTGVSB9PNpk4pTWR+pXrHz9gvXWcP2sTk3W2oqqS6KwWDdntUvNVA==}
+ peerDependencies:
+ async-validator: ^4
+ axios: ^1
+ change-case: ^5
+ drauu: ^0.4
+ focus-trap: ^7
+ fuse.js: ^7
+ idb-keyval: ^6
+ jwt-decode: ^4
+ nprogress: ^0.2
+ qrcode: ^1.5
+ sortablejs: ^1
+ universal-cookie: ^7
+ peerDependenciesMeta:
+ async-validator:
+ optional: true
+ axios:
+ optional: true
+ change-case:
+ optional: true
+ drauu:
+ optional: true
+ focus-trap:
+ optional: true
+ fuse.js:
+ optional: true
+ idb-keyval:
+ optional: true
+ jwt-decode:
+ optional: true
+ nprogress:
+ optional: true
+ qrcode:
+ optional: true
+ sortablejs:
+ optional: true
+ universal-cookie:
+ optional: true
+
+ '@vueuse/metadata@11.2.0':
+ resolution: {integrity: sha512-L0ZmtRmNx+ZW95DmrgD6vn484gSpVeRbgpWevFKXwqqQxW9hnSi2Ppuh2BzMjnbv4aJRiIw8tQatXT9uOB23dQ==}
+
+ '@vueuse/shared@11.2.0':
+ resolution: {integrity: sha512-VxFjie0EanOudYSgMErxXfq6fo8vhr5ICI+BuE3I9FnX7ePllEsVrRQ7O6Q1TLgApeLuPKcHQxAXpP+KnlrJsg==}
+
+ JSONStream@1.3.5:
+ resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
hasBin: true
- dev: false
- /acorn@8.8.2:
- resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==}
+ acorn-jsx@5.3.2:
+ resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
+ peerDependencies:
+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+
+ acorn@8.14.0:
+ resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==}
engines: {node: '>=0.4.0'}
hasBin: true
- /agent-base@6.0.2:
- resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
- engines: {node: '>= 6.0.0'}
- dependencies:
- debug: 4.3.4
- transitivePeerDependencies:
- - supports-color
- dev: true
+ agent-base@7.1.1:
+ resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==}
+ engines: {node: '>= 14'}
- /aggregate-error@3.1.0:
- resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==}
- engines: {node: '>=8'}
- dependencies:
- clean-stack: 2.2.0
- indent-string: 4.0.0
- dev: true
+ ajv-draft-04@1.0.0:
+ resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==}
+ peerDependencies:
+ ajv: ^8.5.0
+ peerDependenciesMeta:
+ ajv:
+ optional: true
+
+ ajv-formats@3.0.1:
+ resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==}
+ peerDependencies:
+ ajv: ^8.0.0
+ peerDependenciesMeta:
+ ajv:
+ optional: true
- /ajv@6.12.6:
+ ajv@6.12.6:
resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
- dependencies:
- fast-deep-equal: 3.1.3
- fast-json-stable-stringify: 2.1.0
- json-schema-traverse: 0.4.1
- uri-js: 4.4.1
- /ajv@8.12.0:
+ ajv@8.12.0:
resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==}
- dependencies:
- fast-deep-equal: 3.1.3
- json-schema-traverse: 1.0.0
- require-from-string: 2.0.2
- uri-js: 4.4.1
- dev: true
- /ansi-align@3.0.1:
- resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==}
- dependencies:
- string-width: 4.2.3
- dev: false
+ ajv@8.13.0:
+ resolution: {integrity: sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==}
- /ansi-escapes@4.3.2:
- resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
- engines: {node: '>=8'}
- dependencies:
- type-fest: 0.21.3
- dev: true
+ algoliasearch@5.13.0:
+ resolution: {integrity: sha512-04lyQX3Ev/oLYQx+aagamQDXvkUUfX1mwrLrus15+9fNaYj28GDxxEzbwaRfvmHFcZyoxvup7mMtDTTw8SrTEQ==}
+ engines: {node: '>= 14.0.0'}
- /ansi-regex@5.0.1:
+ ansi-escapes@7.0.0:
+ resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==}
+ engines: {node: '>=18'}
+
+ ansi-regex@5.0.1:
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
engines: {node: '>=8'}
- /ansi-regex@6.0.1:
- resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==}
+ ansi-regex@6.1.0:
+ resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==}
engines: {node: '>=12'}
- /ansi-styles@3.2.1:
- resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
- engines: {node: '>=4'}
- dependencies:
- color-convert: 1.9.3
-
- /ansi-styles@4.3.0:
+ ansi-styles@4.3.0:
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
engines: {node: '>=8'}
- dependencies:
- color-convert: 2.0.1
- /ansi-styles@5.2.0:
+ ansi-styles@5.2.0:
resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==}
engines: {node: '>=10'}
- dev: true
- /ansi-styles@6.2.1:
+ ansi-styles@6.2.1:
resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
engines: {node: '>=12'}
- /anymatch@3.1.3:
- resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
- engines: {node: '>= 8'}
- dependencies:
- normalize-path: 3.0.0
- picomatch: 2.3.1
- dev: false
-
- /arg@4.1.3:
- resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==}
-
- /arg@5.0.2:
- resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
- dev: false
-
- /argparse@1.0.10:
+ argparse@1.0.10:
resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
- dependencies:
- sprintf-js: 1.0.3
- /argparse@2.0.1:
+ argparse@2.0.1:
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
- /aria-query@5.1.3:
- resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==}
- dependencies:
- deep-equal: 2.2.0
+ aria-query@5.3.0:
+ resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==}
- /array-ify@1.0.0:
+ array-ify@1.0.0:
resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==}
- /array-includes@3.1.6:
- resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==}
- engines: {node: '>= 0.4'}
- dependencies:
- call-bind: 1.0.2
- define-properties: 1.1.4
- es-abstract: 1.21.1
- get-intrinsic: 1.2.0
- is-string: 1.0.7
- dev: false
+ assertion-error@2.0.1:
+ resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
+ engines: {node: '>=12'}
- /array-iterate@2.0.1:
- resolution: {integrity: sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==}
- dev: false
+ asynckit@0.4.0:
+ resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
- /array-union@2.1.0:
- resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
- engines: {node: '>=8'}
- dev: false
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
- /array.prototype.flatmap@1.3.1:
- resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==}
- engines: {node: '>= 0.4'}
- dependencies:
- call-bind: 1.0.2
- define-properties: 1.1.4
- es-abstract: 1.21.1
- es-shim-unscopables: 1.0.0
- dev: false
+ birpc@0.2.19:
+ resolution: {integrity: sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ==}
- /arrify@1.0.1:
- resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
- engines: {node: '>=0.10.0'}
- dev: true
+ brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
- /assertion-error@1.1.0:
- resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
- dev: true
+ brace-expansion@2.0.1:
+ resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
- /ast-types-flow@0.0.7:
- resolution: {integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==}
- dev: false
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
- /astral-regex@2.0.0:
- resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==}
+ cac@6.7.14:
+ resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
engines: {node: '>=8'}
- dev: true
- /astro-eslint-parser@0.11.0:
- resolution: {integrity: sha512-vcz8KBQ20WNOot6qK6w7DQtz2hwg+aLLqlUa6nAnitJLqbR12GxJN/+96U3O+VI4da5Up+FMWqNoL9mywSENtA==}
- engines: {node: ^14.18.0 || >=16.0.0}
- dependencies:
- '@astrojs/compiler': 1.0.1
- '@typescript-eslint/scope-manager': 5.50.0
- '@typescript-eslint/types': 5.50.0
- astrojs-compiler-sync: 0.3.1(@astrojs/compiler@1.0.1)
- debug: 4.3.4
- eslint-visitor-keys: 3.3.0
- espree: 9.4.1
- transitivePeerDependencies:
- - supports-color
- dev: false
+ callsites@3.1.0:
+ resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
+ engines: {node: '>=6'}
- /astro@2.0.6(@types/node@18.11.18):
- resolution: {integrity: sha512-aI8Ijy2EpMyP5SpjmDJpEUdNL6CUAxnja6IeaBC1BokD/mNAnijtmMnTyWVI3UeEZ727wYLISQMyqCfEUq8VNA==}
- engines: {node: '>=16.12.0', npm: '>=6.14.0'}
- hasBin: true
- dependencies:
- '@astrojs/compiler': 1.0.1
- '@astrojs/language-server': 0.28.3
- '@astrojs/markdown-remark': 2.0.1(astro@2.0.6)
- '@astrojs/telemetry': 2.0.0
- '@astrojs/webapi': 2.0.0
- '@babel/core': 7.20.12
- '@babel/generator': 7.20.14
- '@babel/parser': 7.20.15
- '@babel/plugin-transform-react-jsx': 7.20.13(@babel/core@7.20.12)
- '@babel/traverse': 7.20.13
- '@babel/types': 7.20.7
- '@types/babel__core': 7.20.0
- '@types/yargs-parser': 21.0.0
- acorn: 8.8.2
- boxen: 6.2.1
- ci-info: 3.7.1
- common-ancestor-path: 1.0.1
- cookie: 0.5.0
- debug: 4.3.4
- deepmerge-ts: 4.2.2
- devalue: 4.2.3
- diff: 5.1.0
- es-module-lexer: 1.1.0
- estree-walker: 3.0.3
- execa: 6.1.0
- fast-glob: 3.2.12
- github-slugger: 2.0.0
- gray-matter: 4.0.3
- html-escaper: 3.0.3
- kleur: 4.1.5
- magic-string: 0.27.0
- mime: 3.0.0
- ora: 6.1.2
- path-to-regexp: 6.2.1
- preferred-pm: 3.0.3
- prompts: 2.4.2
- rehype: 12.0.1
- semver: 7.3.8
- server-destroy: 1.0.1
- shiki: 0.11.1
- slash: 4.0.0
- string-width: 5.1.2
- strip-ansi: 7.0.1
- supports-esm: 1.0.0
- tsconfig-resolver: 3.0.1
- typescript: 4.9.5
- unist-util-visit: 4.1.2
- vfile: 5.3.6
- vite: 4.1.1(@types/node@18.11.18)
- vitefu: 0.2.4(vite@4.1.1)
- yargs-parser: 21.1.1
- zod: 3.20.2
- transitivePeerDependencies:
- - '@types/node'
- - less
- - sass
- - stylus
- - sugarss
- - supports-color
- - terser
- dev: false
+ ccount@2.0.1:
+ resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
- /astrojs-compiler-sync@0.3.1(@astrojs/compiler@1.0.1):
- resolution: {integrity: sha512-IzPuzkwdiRIZoBhCTuFhuBMWVESXgthTdwQ24QS8LvLargcWAA4E21KmZo4wimsmOG5vj4KKs9QFpy9zhXuo9Q==}
- engines: {node: ^14.18.0 || >=16.0.0}
- peerDependencies:
- '@astrojs/compiler': '>=0.27.0'
- dependencies:
- '@astrojs/compiler': 1.0.1
- synckit: 0.8.5
- dev: false
-
- /asynckit@0.4.0:
- resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
- dev: true
-
- /autoprefixer@10.4.13(postcss@8.4.21):
- resolution: {integrity: sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==}
- engines: {node: ^10 || ^12 || >=14}
- hasBin: true
- peerDependencies:
- postcss: ^8.1.0
- dependencies:
- browserslist: 4.21.5
- caniuse-lite: 1.0.30001450
- fraction.js: 4.2.0
- normalize-range: 0.1.2
- picocolors: 1.0.0
- postcss: 8.4.21
- postcss-value-parser: 4.2.0
- dev: false
-
- /available-typed-arrays@1.0.5:
- resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==}
- engines: {node: '>= 0.4'}
+ chai@5.1.2:
+ resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==}
+ engines: {node: '>=12'}
- /axe-core@4.6.3:
- resolution: {integrity: sha512-/BQzOX780JhsxDnPpH4ZiyrJAzcd8AfzFPkv+89veFSr1rcMjuq2JDCwypKaPeB6ljHp9KjXhPpjgCvQlWYuqg==}
- engines: {node: '>=4'}
- dev: false
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
- /axobject-query@3.1.1:
- resolution: {integrity: sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==}
- dependencies:
- deep-equal: 2.2.0
- dev: false
+ chalk@5.3.0:
+ resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
- /bail@2.0.2:
- resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==}
- dev: false
+ character-entities-html4@2.1.0:
+ resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==}
- /balanced-match@1.0.2:
- resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+ character-entities-legacy@3.0.0:
+ resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==}
- /base64-js@1.5.1:
- resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
- dev: false
+ check-error@2.1.1:
+ resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==}
+ engines: {node: '>= 16'}
- /binary-extensions@2.2.0:
- resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
- engines: {node: '>=8'}
- dev: false
+ cli-cursor@5.0.0:
+ resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==}
+ engines: {node: '>=18'}
- /bl@5.1.0:
- resolution: {integrity: sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==}
- dependencies:
- buffer: 6.0.3
- inherits: 2.0.4
- readable-stream: 3.6.0
- dev: false
+ cli-truncate@4.0.0:
+ resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==}
+ engines: {node: '>=18'}
- /boxen@6.2.1:
- resolution: {integrity: sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- dependencies:
- ansi-align: 3.0.1
- camelcase: 6.3.0
- chalk: 4.1.2
- cli-boxes: 3.0.0
- string-width: 5.1.2
- type-fest: 2.19.0
- widest-line: 4.0.1
- wrap-ansi: 8.1.0
- dev: false
+ cliui@8.0.1:
+ resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
+ engines: {node: '>=12'}
- /brace-expansion@1.1.11:
- resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
- dependencies:
- balanced-match: 1.0.2
- concat-map: 0.0.1
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
- /brace-expansion@2.0.1:
- resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
- dependencies:
- balanced-match: 1.0.2
- dev: true
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
- /braces@3.0.2:
- resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
- engines: {node: '>=8'}
- dependencies:
- fill-range: 7.0.1
+ colorette@2.0.20:
+ resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
- /browserslist@4.21.5:
- resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==}
- engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
- hasBin: true
- dependencies:
- caniuse-lite: 1.0.30001450
- electron-to-chromium: 1.4.286
- node-releases: 2.0.9
- update-browserslist-db: 1.0.10(browserslist@4.21.5)
- dev: false
+ combined-stream@1.0.8:
+ resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
+ engines: {node: '>= 0.8'}
- /buffer-from@1.1.2:
- resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
- dev: true
+ comma-separated-tokens@2.0.3:
+ resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
- /buffer@6.0.3:
- resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
- dependencies:
- base64-js: 1.5.1
- ieee754: 1.2.1
- dev: false
+ commander@12.1.0:
+ resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==}
+ engines: {node: '>=18'}
- /busboy@1.6.0:
- resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
- engines: {node: '>=10.16.0'}
- dependencies:
- streamsearch: 1.1.0
- dev: false
+ compare-func@2.0.0:
+ resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==}
- /c8@7.12.0:
- resolution: {integrity: sha512-CtgQrHOkyxr5koX1wEUmN/5cfDa2ckbHRA4Gy5LAL0zaCFtVWJS5++n+w4/sr2GWGerBxgTjpKeDclk/Qk6W/A==}
- engines: {node: '>=10.12.0'}
- hasBin: true
- dependencies:
- '@bcoe/v8-coverage': 0.2.3
- '@istanbuljs/schema': 0.1.3
- find-up: 5.0.0
- foreground-child: 2.0.0
- istanbul-lib-coverage: 3.2.0
- istanbul-lib-report: 3.0.0
- istanbul-reports: 3.1.5
- rimraf: 3.0.2
- test-exclude: 6.0.0
- v8-to-istanbul: 9.0.1
- yargs: 16.2.0
- yargs-parser: 20.2.9
- dev: true
-
- /cac@6.7.14:
- resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
- engines: {node: '>=8'}
- dev: true
+ compare-versions@6.1.1:
+ resolution: {integrity: sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==}
- /call-bind@1.0.2:
- resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==}
- dependencies:
- function-bind: 1.1.1
- get-intrinsic: 1.2.0
+ computeds@0.0.1:
+ resolution: {integrity: sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==}
- /callsites@3.1.0:
- resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
- engines: {node: '>=6'}
+ concat-map@0.0.1:
+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
- /camelcase-css@2.0.1:
- resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
- engines: {node: '>= 6'}
- dev: false
+ confbox@0.1.8:
+ resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==}
- /camelcase-keys@6.2.2:
- resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==}
- engines: {node: '>=8'}
- dependencies:
- camelcase: 5.3.1
- map-obj: 4.3.0
- quick-lru: 4.0.1
- dev: true
+ conventional-changelog-angular@7.0.0:
+ resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==}
+ engines: {node: '>=16'}
- /camelcase@5.3.1:
- resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==}
- engines: {node: '>=6'}
- dev: true
+ conventional-changelog-conventionalcommits@7.0.2:
+ resolution: {integrity: sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==}
+ engines: {node: '>=16'}
- /camelcase@6.3.0:
- resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
- engines: {node: '>=10'}
- dev: false
+ conventional-commits-parser@5.0.0:
+ resolution: {integrity: sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==}
+ engines: {node: '>=16'}
+ hasBin: true
- /caniuse-lite@1.0.30001450:
- resolution: {integrity: sha512-qMBmvmQmFXaSxexkjjfMvD5rnDL0+m+dUMZKoDYsGG8iZN29RuYh9eRoMvKsT6uMAWlyUUGDEQGJJYjzCIO9ew==}
- dev: false
+ copy-anything@3.0.5:
+ resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==}
+ engines: {node: '>=12.13'}
- /ccount@2.0.1:
- resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
- dev: false
+ cosmiconfig-typescript-loader@5.1.0:
+ resolution: {integrity: sha512-7PtBB+6FdsOvZyJtlF3hEPpACq7RQX6BVGsgC7/lfVXnKMvNCu/XY3ykreqG5w/rBNdu2z8LCIKoF3kpHHdHlA==}
+ engines: {node: '>=v16'}
+ peerDependencies:
+ '@types/node': '*'
+ cosmiconfig: '>=8.2'
+ typescript: '>=4'
- /chai@4.3.7:
- resolution: {integrity: sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==}
- engines: {node: '>=4'}
- dependencies:
- assertion-error: 1.1.0
- check-error: 1.0.2
- deep-eql: 4.1.3
- get-func-name: 2.0.0
- loupe: 2.3.6
- pathval: 1.1.1
- type-detect: 4.0.8
- dev: true
-
- /chalk@2.4.2:
- resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
- engines: {node: '>=4'}
- dependencies:
- ansi-styles: 3.2.1
- escape-string-regexp: 1.0.5
- supports-color: 5.5.0
+ cosmiconfig@9.0.0:
+ resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ typescript: '>=4.9.5'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
- /chalk@4.1.2:
- resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
- engines: {node: '>=10'}
- dependencies:
- ansi-styles: 4.3.0
- supports-color: 7.2.0
+ cross-spawn@7.0.5:
+ resolution: {integrity: sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==}
+ engines: {node: '>= 8'}
- /chalk@5.2.0:
- resolution: {integrity: sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==}
- engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
- dev: false
+ cssstyle@4.1.0:
+ resolution: {integrity: sha512-h66W1URKpBS5YMI/V8PyXvTMFT8SupJ1IzoIV8IeBC/ji8WVmrO8dGlTi+2dh6whmdk6BiKJLD/ZBkhWbcg6nA==}
+ engines: {node: '>=18'}
- /character-entities-html4@2.1.0:
- resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==}
- dev: false
+ csstype@3.1.3:
+ resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
- /character-entities-legacy@3.0.0:
- resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==}
- dev: false
+ dargs@8.1.0:
+ resolution: {integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==}
+ engines: {node: '>=12'}
- /character-entities@2.0.2:
- resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==}
- dev: false
+ data-urls@5.0.0:
+ resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==}
+ engines: {node: '>=18'}
- /check-error@1.0.2:
- resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==}
- dev: true
+ de-indent@1.0.2:
+ resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==}
- /chokidar@3.5.3:
- resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
- engines: {node: '>= 8.10.0'}
- dependencies:
- anymatch: 3.1.3
- braces: 3.0.2
- glob-parent: 5.1.2
- is-binary-path: 2.1.0
- is-glob: 4.0.3
- normalize-path: 3.0.0
- readdirp: 3.6.0
- optionalDependencies:
- fsevents: 2.3.2
- dev: false
+ debug@4.3.7:
+ resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
- /ci-info@3.7.1:
- resolution: {integrity: sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==}
- engines: {node: '>=8'}
- dev: false
+ decimal.js@10.4.3:
+ resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==}
- /clean-stack@2.2.0:
- resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==}
+ deep-eql@5.0.2:
+ resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==}
engines: {node: '>=6'}
- dev: true
-
- /cli-boxes@3.0.0:
- resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==}
- engines: {node: '>=10'}
- dev: false
- /cli-cursor@3.1.0:
- resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==}
- engines: {node: '>=8'}
- dependencies:
- restore-cursor: 3.1.0
- dev: true
+ deep-is@0.1.4:
+ resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
- /cli-cursor@4.0.0:
- resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- dependencies:
- restore-cursor: 4.0.0
- dev: false
+ delayed-stream@1.0.0:
+ resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
+ engines: {node: '>=0.4.0'}
- /cli-spinners@2.7.0:
- resolution: {integrity: sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==}
+ dequal@2.0.3:
+ resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
engines: {node: '>=6'}
- dev: false
- /cli-truncate@2.1.0:
- resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==}
+ devlop@1.1.0:
+ resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
+
+ dom-accessibility-api@0.5.16:
+ resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==}
+
+ dot-prop@5.3.0:
+ resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==}
engines: {node: '>=8'}
- dependencies:
- slice-ansi: 3.0.0
- string-width: 4.2.3
- dev: true
- /cli-truncate@3.1.0:
- resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- dependencies:
- slice-ansi: 5.0.0
- string-width: 5.1.2
- dev: true
+ eastasianwidth@0.2.0:
+ resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
- /cliui@7.0.4:
- resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
- dependencies:
- string-width: 4.2.3
- strip-ansi: 6.0.1
- wrap-ansi: 7.0.0
- dev: true
+ emoji-regex@10.4.0:
+ resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==}
- /cliui@8.0.1:
- resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
- engines: {node: '>=12'}
- dependencies:
- string-width: 4.2.3
- strip-ansi: 6.0.1
- wrap-ansi: 7.0.0
- dev: true
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
- /clone@1.0.4:
- resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==}
- engines: {node: '>=0.8'}
- dev: false
+ emoji-regex@9.2.2:
+ resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
- /code-block-writer@11.0.3:
- resolution: {integrity: sha512-NiujjUFB4SwScJq2bwbYUtXbZhBSlY6vYzm++3Q6oC+U+injTqfPYFK8wS9COOmb2lueqp0ZRB4nK1VYeHgNyw==}
- dev: true
+ entities@4.5.0:
+ resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
+ engines: {node: '>=0.12'}
- /color-convert@1.9.3:
- resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
- dependencies:
- color-name: 1.1.3
+ env-paths@2.2.1:
+ resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==}
+ engines: {node: '>=6'}
- /color-convert@2.0.1:
- resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
- engines: {node: '>=7.0.0'}
- dependencies:
- color-name: 1.1.4
+ environment@1.1.0:
+ resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==}
+ engines: {node: '>=18'}
- /color-name@1.1.3:
- resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
+ error-ex@1.3.2:
+ resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
- /color-name@1.1.4:
- resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+ esbuild@0.21.5:
+ resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==}
+ engines: {node: '>=12'}
+ hasBin: true
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
- /colorette@2.0.19:
- resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==}
- dev: true
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
- /colors@1.2.5:
- resolution: {integrity: sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==}
- engines: {node: '>=0.1.90'}
- dev: true
+ eslint-config-prettier@9.1.0:
+ resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==}
+ hasBin: true
+ peerDependencies:
+ eslint: '>=7.0.0'
- /combined-stream@1.0.8:
- resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
- engines: {node: '>= 0.8'}
- dependencies:
- delayed-stream: 1.0.0
- dev: true
+ eslint-scope@8.2.0:
+ resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- /comma-separated-tokens@2.0.3:
- resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
- dev: false
+ 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}
- /commander@9.5.0:
- resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==}
- engines: {node: ^12.20.0 || >=14}
- dev: true
+ eslint-visitor-keys@4.2.0:
+ resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- /commitlint@17.4.2:
- resolution: {integrity: sha512-1UQecX+vSJHQXTKFMRZmf8EG3BYYjkT26JLe6FTQhu7N67FiWdWbqXMpcQSpqx/kWNz9a+DX2au2e61IH89PDA==}
- engines: {node: '>=v14'}
+ eslint@9.14.0:
+ resolution: {integrity: sha512-c2FHsVBr87lnUtjP4Yhvk4yEhKrQavGafRA/Se1ouse8PfbfC/Qh9Mxa00yWsZRlqeUB9raXip0aiiUZkgnr9g==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
hasBin: true
- dependencies:
- '@commitlint/cli': 17.4.2
- '@commitlint/types': 17.4.0
- transitivePeerDependencies:
- - '@swc/core'
- - '@swc/wasm'
- dev: true
-
- /common-ancestor-path@1.0.1:
- resolution: {integrity: sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==}
- dev: false
+ peerDependencies:
+ jiti: '*'
+ peerDependenciesMeta:
+ jiti:
+ optional: true
- /compare-func@2.0.0:
- resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==}
- dependencies:
- array-ify: 1.0.0
- dot-prop: 5.3.0
+ espree@10.3.0:
+ resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- /concat-map@0.0.1:
- resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+ esquery@1.6.0:
+ resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
+ engines: {node: '>=0.10'}
- /conventional-changelog-angular@5.0.13:
- resolution: {integrity: sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==}
- engines: {node: '>=10'}
- dependencies:
- compare-func: 2.0.0
- q: 1.5.1
- dev: true
+ esrecurse@4.3.0:
+ resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
+ engines: {node: '>=4.0'}
- /conventional-changelog-conventionalcommits@5.0.0:
- resolution: {integrity: sha512-lCDbA+ZqVFQGUj7h9QBKoIpLhl8iihkO0nCTyRNzuXtcd7ubODpYB04IFy31JloiJgG0Uovu8ot8oxRzn7Nwtw==}
- engines: {node: '>=10'}
- dependencies:
- compare-func: 2.0.0
- lodash: 4.17.21
- q: 1.5.1
- dev: false
+ estraverse@5.3.0:
+ resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
+ engines: {node: '>=4.0'}
- /conventional-commits-parser@3.2.4:
- resolution: {integrity: sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==}
- engines: {node: '>=10'}
- hasBin: true
- dependencies:
- JSONStream: 1.3.5
- is-text-path: 1.0.1
- lodash: 4.17.21
- meow: 8.1.2
- split2: 3.2.2
- through2: 4.0.2
- dev: true
+ estree-walker@2.0.2:
+ resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
- /convert-source-map@1.9.0:
- resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==}
+ estree-walker@3.0.3:
+ resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
- /cookie@0.5.0:
- resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==}
- engines: {node: '>= 0.6'}
- dev: false
+ esutils@2.0.3:
+ resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
+ engines: {node: '>=0.10.0'}
- /cosmiconfig-typescript-loader@4.3.0(@types/node@18.11.18)(cosmiconfig@8.0.0)(ts-node@10.9.1)(typescript@4.9.5):
- resolution: {integrity: sha512-NTxV1MFfZDLPiBMjxbHRwSh5LaLcPMwNdCutmnHJCKoVnlvldPWlllonKwrsRJ5pYZBIBGRWWU2tfvzxgeSW5Q==}
- engines: {node: '>=12', npm: '>=6'}
- peerDependencies:
- '@types/node': '*'
- cosmiconfig: '>=7'
- ts-node: '>=10'
- typescript: '>=3'
- dependencies:
- '@types/node': 18.11.18
- cosmiconfig: 8.0.0
- ts-node: 10.9.1(@types/node@18.11.18)(typescript@4.9.5)
- typescript: 4.9.5
- dev: true
-
- /cosmiconfig@8.0.0:
- resolution: {integrity: sha512-da1EafcpH6b/TD8vDRaWV7xFINlHlF6zKsGwS1TsuVJTZRkquaS5HTMq7uq6h31619QjbsYl21gVDOm32KM1vQ==}
- engines: {node: '>=14'}
- dependencies:
- import-fresh: 3.3.0
- js-yaml: 4.1.0
- parse-json: 5.2.0
- path-type: 4.0.0
- dev: true
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
- /create-require@1.1.1:
- resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==}
+ execa@8.0.1:
+ resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==}
+ engines: {node: '>=16.17'}
- /cross-spawn@7.0.3:
- resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
- engines: {node: '>= 8'}
- dependencies:
- path-key: 3.1.1
- shebang-command: 2.0.0
- which: 2.0.2
+ expect-type@1.1.0:
+ resolution: {integrity: sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==}
+ engines: {node: '>=12.0.0'}
- /cssesc@3.0.0:
- resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
- engines: {node: '>=4'}
- hasBin: true
- dev: false
+ fast-deep-equal@3.1.3:
+ resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
- /cssom@0.3.8:
- resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==}
- dev: true
+ fast-glob@3.3.2:
+ resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
+ engines: {node: '>=8.6.0'}
- /cssom@0.5.0:
- resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==}
- dev: true
+ fast-json-stable-stringify@2.1.0:
+ resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
- /cssstyle@2.3.0:
- resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==}
- engines: {node: '>=8'}
- dependencies:
- cssom: 0.3.8
- dev: true
+ fast-levenshtein@2.0.6:
+ resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
- /csstype@3.1.1:
- resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==}
- dev: true
+ fastq@1.17.1:
+ resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==}
- /damerau-levenshtein@1.0.8:
- resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==}
- dev: false
+ file-entry-cache@8.0.0:
+ resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
+ engines: {node: '>=16.0.0'}
- /dargs@7.0.0:
- resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==}
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
engines: {node: '>=8'}
- dev: true
- /data-urls@3.0.2:
- resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==}
- engines: {node: '>=12'}
- dependencies:
- abab: 2.0.6
- whatwg-mimetype: 3.0.0
- whatwg-url: 11.0.0
- dev: true
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
- /debug@4.3.4:
- resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
- engines: {node: '>=6.0'}
- peerDependencies:
- supports-color: '*'
- peerDependenciesMeta:
- supports-color:
- optional: true
- dependencies:
- ms: 2.1.2
+ find-up@7.0.0:
+ resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==}
+ engines: {node: '>=18'}
- /decamelize-keys@1.1.1:
- resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==}
- engines: {node: '>=0.10.0'}
- dependencies:
- decamelize: 1.2.0
- map-obj: 1.0.1
- dev: true
+ flat-cache@4.0.1:
+ resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
+ engines: {node: '>=16'}
- /decamelize@1.2.0:
- resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==}
- engines: {node: '>=0.10.0'}
- dev: true
+ flatted@3.3.1:
+ resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==}
- /decimal.js@10.4.3:
- resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==}
- dev: true
+ focus-trap@7.6.1:
+ resolution: {integrity: sha512-nB8y4nQl8PshahLpGKZOq1sb0xrMVFSn6at7u/qOsBZTlZRzaapISGENcB6mOkoezbClZyiMwEF/dGY8AZ00rA==}
- /decode-named-character-reference@1.0.2:
- resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==}
- dependencies:
- character-entities: 2.0.2
- dev: false
+ foreground-child@3.3.0:
+ resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==}
+ engines: {node: '>=14'}
- /deep-eql@4.1.3:
- resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==}
- engines: {node: '>=6'}
- dependencies:
- type-detect: 4.0.8
- dev: true
-
- /deep-equal@2.2.0:
- resolution: {integrity: sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==}
- dependencies:
- call-bind: 1.0.2
- es-get-iterator: 1.1.3
- get-intrinsic: 1.2.0
- is-arguments: 1.1.1
- is-array-buffer: 3.0.1
- is-date-object: 1.0.5
- is-regex: 1.1.4
- is-shared-array-buffer: 1.0.2
- isarray: 2.0.5
- object-is: 1.1.5
- object-keys: 1.1.1
- object.assign: 4.1.4
- regexp.prototype.flags: 1.4.3
- side-channel: 1.0.4
- which-boxed-primitive: 1.0.2
- which-collection: 1.0.1
- which-typed-array: 1.1.9
-
- /deep-is@0.1.4:
- resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
+ form-data@4.0.1:
+ resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==}
+ engines: {node: '>= 6'}
- /deepmerge-ts@4.2.2:
- resolution: {integrity: sha512-Ka3Kb21tiWjvQvS9U+1Dx+aqFAHsdTnMdYptLTmC2VAmDFMugWMY1e15aTODstipmCun8iNuqeSfcx6rsUUk0Q==}
- engines: {node: '>=12.4.0'}
- dev: false
+ fs-extra@7.0.1:
+ resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==}
+ engines: {node: '>=6 <7 || >=8'}
- /deepmerge@4.3.0:
- resolution: {integrity: sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==}
- engines: {node: '>=0.10.0'}
- dev: false
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
- /defaults@1.0.4:
- resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==}
- dependencies:
- clone: 1.0.4
- dev: false
+ function-bind@1.1.2:
+ resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
- /define-lazy-prop@2.0.0:
- resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==}
- engines: {node: '>=8'}
- dev: false
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
- /define-properties@1.1.4:
- resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==}
- engines: {node: '>= 0.4'}
- dependencies:
- has-property-descriptors: 1.0.0
- object-keys: 1.1.1
+ get-east-asian-width@1.3.0:
+ resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==}
+ engines: {node: '>=18'}
- /defined@1.0.1:
- resolution: {integrity: sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==}
- dev: false
+ get-stream@8.0.1:
+ resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==}
+ engines: {node: '>=16'}
- /delayed-stream@1.0.0:
- resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
- engines: {node: '>=0.4.0'}
- dev: true
+ git-raw-commits@4.0.0:
+ resolution: {integrity: sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==}
+ engines: {node: '>=16'}
+ hasBin: true
- /dequal@2.0.3:
- resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
- engines: {node: '>=6'}
- dev: false
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob-parent@6.0.2:
+ resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
+ engines: {node: '>=10.13.0'}
- /detective@5.2.1:
- resolution: {integrity: sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==}
- engines: {node: '>=0.8.0'}
+ glob@10.4.5:
+ resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
hasBin: true
- dependencies:
- acorn-node: 1.8.2
- defined: 1.0.1
- minimist: 1.2.7
- dev: false
- /devalue@4.2.3:
- resolution: {integrity: sha512-JG6Q248aN0pgFL57e3zqTVeFraBe+5W2ugvv1mLXsJP6YYIYJhRZhAl7QP8haJrqob6X10F9NEkuCvNILZTPeQ==}
- dev: false
+ global-directory@4.0.1:
+ resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==}
+ engines: {node: '>=18'}
+
+ globals@14.0.0:
+ resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
+ engines: {node: '>=18'}
- /didyoumean@1.2.2:
- resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
- dev: false
+ globrex@0.1.2:
+ resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==}
- /diff@4.0.2:
- resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
- engines: {node: '>=0.3.1'}
+ graceful-fs@4.2.11:
+ resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
- /diff@5.1.0:
- resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==}
- engines: {node: '>=0.3.1'}
+ graphemer@1.4.0:
+ resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
- /dir-glob@3.0.1:
- resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
engines: {node: '>=8'}
- dependencies:
- path-type: 4.0.0
- dev: false
- /dlv@1.1.3:
- resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
- dev: false
+ hasown@2.0.2:
+ resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
+ engines: {node: '>= 0.4'}
- /doctrine@3.0.0:
- resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
- engines: {node: '>=6.0.0'}
- dependencies:
- esutils: 2.0.3
+ hast-util-to-html@9.0.3:
+ resolution: {integrity: sha512-M17uBDzMJ9RPCqLMO92gNNUDuBSq10a25SDBI08iCCxmorf4Yy6sYHK57n9WAbRAAaU+DuR4W6GN9K4DFZesYg==}
+
+ hast-util-whitespace@3.0.0:
+ resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ hookable@5.5.3:
+ resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==}
+
+ html-encoding-sniffer@4.0.0:
+ resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==}
+ engines: {node: '>=18'}
+
+ html-escaper@2.0.2:
+ resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==}
+
+ html-void-elements@3.0.0:
+ resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==}
+
+ http-proxy-agent@7.0.2:
+ resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==}
+ engines: {node: '>= 14'}
+
+ https-proxy-agent@7.0.5:
+ resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==}
+ engines: {node: '>= 14'}
+
+ human-signals@5.0.0:
+ resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==}
+ engines: {node: '>=16.17.0'}
+
+ husky@9.1.6:
+ resolution: {integrity: sha512-sqbjZKK7kf44hfdE94EoX8MZNk0n7HeW37O4YrVGCF4wzgQjp+akPAkfUK5LZ6KuR/6sqeAVuXHji+RzQgOn5A==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ iconv-lite@0.6.3:
+ resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
+ engines: {node: '>=0.10.0'}
+
+ ignore@5.3.2:
+ resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
+ engines: {node: '>= 4'}
+
+ import-fresh@3.3.0:
+ resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
+ engines: {node: '>=6'}
+
+ import-lazy@4.0.0:
+ resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==}
+ engines: {node: '>=8'}
+
+ import-meta-resolve@4.1.0:
+ resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==}
+
+ imurmurhash@0.1.4:
+ resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
+ engines: {node: '>=0.8.19'}
+
+ ini@4.1.1:
+ resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+ is-arrayish@0.2.1:
+ resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
+
+ is-core-module@2.15.1:
+ resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==}
+ engines: {node: '>= 0.4'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-fullwidth-code-point@4.0.0:
+ resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==}
+ engines: {node: '>=12'}
+
+ is-fullwidth-code-point@5.0.0:
+ resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==}
+ engines: {node: '>=18'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-obj@2.0.0:
+ resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==}
+ engines: {node: '>=8'}
+
+ is-potential-custom-element-name@1.0.1:
+ resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==}
+
+ is-stream@3.0.0:
+ resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ is-text-path@2.0.0:
+ resolution: {integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==}
+ engines: {node: '>=8'}
+
+ is-what@4.1.16:
+ resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==}
+ engines: {node: '>=12.13'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ istanbul-lib-coverage@3.2.2:
+ resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==}
+ engines: {node: '>=8'}
+
+ istanbul-lib-report@3.0.1:
+ resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==}
+ engines: {node: '>=10'}
+
+ istanbul-lib-source-maps@5.0.6:
+ resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==}
+ engines: {node: '>=10'}
+
+ istanbul-reports@3.1.7:
+ resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==}
+ engines: {node: '>=8'}
+
+ jackspeak@3.4.3:
+ resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
+
+ jiti@1.21.6:
+ resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==}
+ hasBin: true
+
+ jju@1.4.0:
+ resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==}
+
+ js-tokens@4.0.0:
+ resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ jsdom@25.0.1:
+ resolution: {integrity: sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ canvas: ^2.11.2
+ peerDependenciesMeta:
+ canvas:
+ optional: true
+
+ json-buffer@3.0.1:
+ resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
+
+ json-parse-even-better-errors@2.3.1:
+ resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
+
+ json-schema-traverse@0.4.1:
+ resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
+
+ json-schema-traverse@1.0.0:
+ resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
+
+ json-stable-stringify-without-jsonify@1.0.1:
+ resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
+
+ jsonfile@4.0.0:
+ resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==}
+
+ jsonparse@1.3.1:
+ resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
+ engines: {'0': node >= 0.2.0}
+
+ keyv@4.5.4:
+ resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
+
+ kolorist@1.8.0:
+ resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==}
+
+ levn@0.4.1:
+ resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
+ engines: {node: '>= 0.8.0'}
+
+ lilconfig@3.1.2:
+ resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==}
+ engines: {node: '>=14'}
+
+ lines-and-columns@1.2.4:
+ resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
+
+ lint-staged@15.2.10:
+ resolution: {integrity: sha512-5dY5t743e1byO19P9I4b3x8HJwalIznL5E1FWYnU6OWw33KxNBSLAc6Cy7F2PsFEO8FKnLwjwm5hx7aMF0jzZg==}
+ engines: {node: '>=18.12.0'}
+ hasBin: true
+
+ listr2@8.2.5:
+ resolution: {integrity: sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==}
+ engines: {node: '>=18.0.0'}
+
+ local-pkg@0.5.0:
+ resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==}
+ engines: {node: '>=14'}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ locate-path@7.2.0:
+ resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ lodash.camelcase@4.3.0:
+ resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==}
+
+ lodash.isplainobject@4.0.6:
+ resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==}
+
+ lodash.kebabcase@4.1.1:
+ resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==}
+
+ lodash.merge@4.6.2:
+ resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
+
+ lodash.mergewith@4.6.2:
+ resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==}
+
+ lodash.snakecase@4.1.1:
+ resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==}
+
+ lodash.startcase@4.4.0:
+ resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==}
+
+ lodash.uniq@4.5.0:
+ resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==}
+
+ lodash.upperfirst@4.3.1:
+ resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==}
+
+ lodash@4.17.21:
+ resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
+
+ log-update@6.1.0:
+ resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==}
+ engines: {node: '>=18'}
+
+ loose-envify@1.4.0:
+ resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
+ hasBin: true
+
+ loupe@3.1.2:
+ resolution: {integrity: sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==}
+
+ lru-cache@10.4.3:
+ resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
+
+ lru-cache@6.0.0:
+ resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
+ engines: {node: '>=10'}
+
+ lz-string@1.5.0:
+ resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==}
+ hasBin: true
+
+ magic-string@0.30.12:
+ resolution: {integrity: sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==}
+
+ magicast@0.3.5:
+ resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==}
+
+ make-dir@4.0.0:
+ resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==}
+ engines: {node: '>=10'}
+
+ mark.js@8.11.1:
+ resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==}
+
+ mdast-util-to-hast@13.2.0:
+ resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==}
+
+ meow@12.1.1:
+ resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==}
+ engines: {node: '>=16.10'}
+
+ merge-stream@2.0.0:
+ resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
+
+ merge2@1.4.1:
+ resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
+ engines: {node: '>= 8'}
+
+ micromark-util-character@2.1.0:
+ resolution: {integrity: sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==}
+
+ micromark-util-encode@2.0.0:
+ resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==}
+
+ micromark-util-sanitize-uri@2.0.0:
+ resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==}
+
+ micromark-util-symbol@2.0.0:
+ resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==}
+
+ micromark-util-types@2.0.0:
+ resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==}
+
+ micromatch@4.0.8:
+ resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
+ engines: {node: '>=8.6'}
+
+ mime-db@1.52.0:
+ resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
+ engines: {node: '>= 0.6'}
+
+ mime-types@2.1.35:
+ resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
+ engines: {node: '>= 0.6'}
+
+ mimic-fn@4.0.0:
+ resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==}
+ engines: {node: '>=12'}
+
+ mimic-function@5.0.1:
+ resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==}
+ engines: {node: '>=18'}
+
+ minimatch@3.0.8:
+ resolution: {integrity: sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@9.0.5:
+ resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ minipass@7.1.2:
+ resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ minisearch@7.1.0:
+ resolution: {integrity: sha512-tv7c/uefWdEhcu6hvrfTihflgeEi2tN6VV7HJnCjK6VxM75QQJh4t9FwJCsA2EsRS8LCnu3W87CuGPWMocOLCA==}
+
+ mitt@3.0.1:
+ resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==}
+
+ mlly@1.7.2:
+ resolution: {integrity: sha512-tN3dvVHYVz4DhSXinXIk7u9syPYaJvio118uomkovAtWBT+RdbP6Lfh/5Lvo519YMmwBafwlh20IPTXIStscpA==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ muggle-string@0.4.1:
+ resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==}
+
+ nanoid@3.3.7:
+ resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ natural-compare@1.4.0:
+ resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
+
+ npm-run-path@5.3.0:
+ resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ nwsapi@2.2.13:
+ resolution: {integrity: sha512-cTGB9ptp9dY9A5VbMSe7fQBcl/tt22Vcqdq8+eN93rblOuE0aCFu4aZ2vMwct/2t+lFnosm8RkQW1I0Omb1UtQ==}
+
+ onetime@6.0.0:
+ resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==}
+ engines: {node: '>=12'}
+
+ onetime@7.0.0:
+ resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==}
+ engines: {node: '>=18'}
+
+ oniguruma-to-js@0.4.3:
+ resolution: {integrity: sha512-X0jWUcAlxORhOqqBREgPMgnshB7ZGYszBNspP+tS9hPD3l13CdaXcHbgImoHUHlrvGx/7AvFEkTRhAGYh+jzjQ==}
+
+ optionator@0.9.4:
+ resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
+ engines: {node: '>= 0.8.0'}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-limit@4.0.0:
+ resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ p-locate@6.0.0:
+ resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ package-json-from-dist@1.0.1:
+ resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
+
+ parent-module@1.0.1:
+ resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
+ engines: {node: '>=6'}
+
+ parse-json@5.2.0:
+ resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
+ engines: {node: '>=8'}
+
+ parse5@7.2.1:
+ resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==}
+
+ path-browserify@1.0.1:
+ resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-exists@5.0.0:
+ resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ path-key@3.1.1:
+ resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
+ engines: {node: '>=8'}
+
+ path-key@4.0.0:
+ resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==}
+ engines: {node: '>=12'}
+
+ path-parse@1.0.7:
+ resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
+
+ path-scurry@1.11.1:
+ resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
+ engines: {node: '>=16 || 14 >=14.18'}
+
+ pathe@1.1.2:
+ resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==}
+
+ pathval@2.0.0:
+ resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==}
+ engines: {node: '>= 14.16'}
+
+ perfect-debounce@1.0.0:
+ resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==}
+
+ picocolors@1.1.1:
+ resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ picomatch@4.0.2:
+ resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
+ engines: {node: '>=12'}
+
+ pidtree@0.6.0:
+ resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==}
+ engines: {node: '>=0.10'}
+ hasBin: true
+
+ pkg-types@1.2.1:
+ resolution: {integrity: sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw==}
+
+ postcss@8.4.48:
+ resolution: {integrity: sha512-GCRK8F6+Dl7xYniR5a4FYbpBzU8XnZVeowqsQFYdcXuSbChgiks7qybSkbvnaeqv0G0B+dd9/jJgH8kkLDQeEA==}
+ engines: {node: ^10 || ^12 || >=14}
+
+ preact@10.24.3:
+ resolution: {integrity: sha512-Z2dPnBnMUfyQfSQ+GBdsGa16hz35YmLmtTLhM169uW944hYL6xzTYkJjC07j+Wosz733pMWx0fgON3JNw1jJQA==}
+
+ prelude-ls@1.2.1:
+ resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
+ engines: {node: '>= 0.8.0'}
+
+ prettier@3.3.3:
+ resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==}
+ engines: {node: '>=14'}
+ hasBin: true
+
+ pretty-format@27.5.1:
+ resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==}
+ engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
+
+ property-information@6.5.0:
+ resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==}
+
+ punycode@2.3.1:
+ resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
+ engines: {node: '>=6'}
+
+ queue-microtask@1.2.3:
+ resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+
+ react-dom@18.3.1:
+ resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==}
+ peerDependencies:
+ react: ^18.3.1
+
+ react-is@17.0.2:
+ resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==}
+
+ react@18.3.1:
+ resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==}
+ engines: {node: '>=0.10.0'}
+
+ regenerator-runtime@0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
+ regex@4.4.0:
+ resolution: {integrity: sha512-uCUSuobNVeqUupowbdZub6ggI5/JZkYyJdDogddJr60L764oxC2pMZov1fQ3wM9bdyzUILDG+Sqx6NAKAz9rKQ==}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ require-from-string@2.0.2:
+ resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
+ engines: {node: '>=0.10.0'}
+
+ resolve-from@4.0.0:
+ resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
+ engines: {node: '>=4'}
+
+ resolve-from@5.0.0:
+ resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
+ engines: {node: '>=8'}
+
+ resolve@1.22.8:
+ resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
+ hasBin: true
+
+ restore-cursor@5.1.0:
+ resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==}
+ engines: {node: '>=18'}
+
+ reusify@1.0.4:
+ resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
+ engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+
+ rfdc@1.4.1:
+ resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
+
+ rollup@4.25.0:
+ resolution: {integrity: sha512-uVbClXmR6wvx5R1M3Od4utyLUxrmOcEm3pAtMphn73Apq19PDtHpgZoEvqH2YnnaNUuvKmg2DgRd2Sqv+odyqg==}
+ engines: {node: '>=18.0.0', npm: '>=8.0.0'}
+ hasBin: true
+
+ rrweb-cssom@0.7.1:
+ resolution: {integrity: sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==}
+
+ run-parallel@1.2.0:
+ resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
+
+ safer-buffer@2.1.2:
+ resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
+
+ saxes@6.0.0:
+ resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==}
+ engines: {node: '>=v12.22.7'}
+
+ scheduler@0.23.2:
+ resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==}
+
+ search-insights@2.17.2:
+ resolution: {integrity: sha512-zFNpOpUO+tY2D85KrxJ+aqwnIfdEGi06UH2+xEb+Bp9Mwznmauqc9djbnBibJO5mpfUPPa8st6Sx65+vbeO45g==}
+
+ semver@7.5.4:
+ resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ semver@7.6.3:
+ resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ shebang-command@2.0.0:
+ resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
+ engines: {node: '>=8'}
+
+ shebang-regex@3.0.0:
+ resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
+ engines: {node: '>=8'}
+
+ shiki@1.22.2:
+ resolution: {integrity: sha512-3IZau0NdGKXhH2bBlUk4w1IHNxPh6A5B2sUpyY+8utLu2j/h1QpFkAaUA1bAMxOWWGtTWcAh531vnS4NJKS/lA==}
+
+ siginfo@2.0.0:
+ resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
+
+ signal-exit@4.1.0:
+ resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
+ engines: {node: '>=14'}
+
+ slice-ansi@5.0.0:
+ resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==}
+ engines: {node: '>=12'}
+
+ slice-ansi@7.1.0:
+ resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==}
+ engines: {node: '>=18'}
+
+ source-map-js@1.2.1:
+ resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
+ engines: {node: '>=0.10.0'}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ space-separated-tokens@2.0.2:
+ resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
+
+ speakingurl@14.0.1:
+ resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==}
+ engines: {node: '>=0.10.0'}
+
+ split2@4.2.0:
+ resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==}
+ engines: {node: '>= 10.x'}
+
+ sprintf-js@1.0.3:
+ resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
+
+ stackback@0.0.2:
+ resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
+
+ std-env@3.8.0:
+ resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==}
+
+ string-argv@0.3.2:
+ resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==}
+ engines: {node: '>=0.6.19'}
- /dom-accessibility-api@0.5.16:
- resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==}
- dev: true
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
- /domexception@4.0.0:
- resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==}
+ string-width@5.1.2:
+ resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
engines: {node: '>=12'}
- dependencies:
- webidl-conversions: 7.0.0
- dev: true
- /dot-prop@5.3.0:
- resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==}
- engines: {node: '>=8'}
- dependencies:
- is-obj: 2.0.0
+ string-width@7.2.0:
+ resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==}
+ engines: {node: '>=18'}
- /dset@3.1.2:
- resolution: {integrity: sha512-g/M9sqy3oHe477Ar4voQxWtaPIFw1jTdKZuomOjhCcBx9nHUNn0pu6NopuFFrTh/TRZIKEj+76vLWFu9BNKk+Q==}
- engines: {node: '>=4'}
- dev: false
+ stringify-entities@4.0.4:
+ resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==}
- /eastasianwidth@0.2.0:
- resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
- /electron-to-chromium@1.4.286:
- resolution: {integrity: sha512-Vp3CVhmYpgf4iXNKAucoQUDcCrBQX3XLBtwgFqP9BUXuucgvAV9zWp1kYU7LL9j4++s9O+12cb3wMtN4SJy6UQ==}
- dev: false
+ strip-ansi@7.1.0:
+ resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
+ engines: {node: '>=12'}
- /emmet@2.3.6:
- resolution: {integrity: sha512-pLS4PBPDdxuUAmw7Me7+TcHbykTsBKN/S9XJbUOMFQrNv9MoshzyMFK/R57JBm94/6HSL4vHnDeEmxlC82NQ4A==}
- dependencies:
- '@emmetio/abbreviation': 2.2.3
- '@emmetio/css-abbreviation': 2.1.4
- dev: false
+ strip-final-newline@3.0.0:
+ resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==}
+ engines: {node: '>=12'}
- /emoji-regex@8.0.0:
- resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
- /emoji-regex@9.2.2:
- resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
+ superjson@2.2.1:
+ resolution: {integrity: sha512-8iGv75BYOa0xRJHK5vRLEjE2H/i4lulTjzpUXic3Eg8akftYjkmQDa8JARQ42rlczXyFR3IeRoeFCc7RxHsYZA==}
+ engines: {node: '>=16'}
- /entities@4.4.0:
- resolution: {integrity: sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==}
- engines: {node: '>=0.12'}
- dev: true
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
- /error-ex@1.3.2:
- resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
- dependencies:
- is-arrayish: 0.2.1
- dev: true
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
- /es-abstract@1.21.1:
- resolution: {integrity: sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==}
- engines: {node: '>= 0.4'}
- dependencies:
- available-typed-arrays: 1.0.5
- call-bind: 1.0.2
- es-set-tostringtag: 2.0.1
- es-to-primitive: 1.2.1
- function-bind: 1.1.1
- function.prototype.name: 1.1.5
- get-intrinsic: 1.2.0
- get-symbol-description: 1.0.0
- globalthis: 1.0.3
- gopd: 1.0.1
- has: 1.0.3
- has-property-descriptors: 1.0.0
- has-proto: 1.0.1
- has-symbols: 1.0.3
- internal-slot: 1.0.4
- is-array-buffer: 3.0.1
- is-callable: 1.2.7
- is-negative-zero: 2.0.2
- is-regex: 1.1.4
- is-shared-array-buffer: 1.0.2
- is-string: 1.0.7
- is-typed-array: 1.1.10
- is-weakref: 1.0.2
- object-inspect: 1.12.3
- object-keys: 1.1.1
- object.assign: 4.1.4
- regexp.prototype.flags: 1.4.3
- safe-regex-test: 1.0.0
- string.prototype.trimend: 1.0.6
- string.prototype.trimstart: 1.0.6
- typed-array-length: 1.0.4
- unbox-primitive: 1.0.2
- which-typed-array: 1.1.9
- dev: false
-
- /es-get-iterator@1.1.3:
- resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==}
- dependencies:
- call-bind: 1.0.2
- get-intrinsic: 1.2.0
- has-symbols: 1.0.3
- is-arguments: 1.1.1
- is-map: 2.0.2
- is-set: 2.0.2
- is-string: 1.0.7
- isarray: 2.0.5
- stop-iteration-iterator: 1.0.0
-
- /es-module-lexer@1.1.0:
- resolution: {integrity: sha512-fJg+1tiyEeS8figV+fPcPpm8WqJEflG3yPU0NOm5xMvrNkuiy7HzX/Ljng4Y0hAoiw4/3hQTCFYw+ub8+a2pRA==}
- dev: false
-
- /es-set-tostringtag@2.0.1:
- resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==}
+ supports-preserve-symlinks-flag@1.0.0:
+ resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
- dependencies:
- get-intrinsic: 1.2.0
- has: 1.0.3
- has-tostringtag: 1.0.0
- dev: false
- /es-shim-unscopables@1.0.0:
- resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==}
- dependencies:
- has: 1.0.3
- dev: false
+ symbol-tree@3.2.4:
+ resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==}
- /es-to-primitive@1.2.1:
- resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==}
- engines: {node: '>= 0.4'}
- dependencies:
- is-callable: 1.2.7
- is-date-object: 1.0.5
- is-symbol: 1.0.4
- dev: false
+ tabbable@6.2.0:
+ resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==}
- /esbuild@0.16.17:
- resolution: {integrity: sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==}
- engines: {node: '>=12'}
- hasBin: true
- requiresBuild: true
- optionalDependencies:
- '@esbuild/android-arm': 0.16.17
- '@esbuild/android-arm64': 0.16.17
- '@esbuild/android-x64': 0.16.17
- '@esbuild/darwin-arm64': 0.16.17
- '@esbuild/darwin-x64': 0.16.17
- '@esbuild/freebsd-arm64': 0.16.17
- '@esbuild/freebsd-x64': 0.16.17
- '@esbuild/linux-arm': 0.16.17
- '@esbuild/linux-arm64': 0.16.17
- '@esbuild/linux-ia32': 0.16.17
- '@esbuild/linux-loong64': 0.16.17
- '@esbuild/linux-mips64el': 0.16.17
- '@esbuild/linux-ppc64': 0.16.17
- '@esbuild/linux-riscv64': 0.16.17
- '@esbuild/linux-s390x': 0.16.17
- '@esbuild/linux-x64': 0.16.17
- '@esbuild/netbsd-x64': 0.16.17
- '@esbuild/openbsd-x64': 0.16.17
- '@esbuild/sunos-x64': 0.16.17
- '@esbuild/win32-arm64': 0.16.17
- '@esbuild/win32-ia32': 0.16.17
- '@esbuild/win32-x64': 0.16.17
-
- /escalade@3.1.1:
- resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
- engines: {node: '>=6'}
+ test-exclude@7.0.1:
+ resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==}
+ engines: {node: '>=18'}
- /escape-string-regexp@1.0.5:
- resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
- engines: {node: '>=0.8.0'}
+ text-extensions@2.4.0:
+ resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==}
+ engines: {node: '>=8'}
- /escape-string-regexp@4.0.0:
- resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
- engines: {node: '>=10'}
+ text-table@0.2.0:
+ resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
- /escape-string-regexp@5.0.0:
- resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
- engines: {node: '>=12'}
- dev: false
+ through@2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
- /escodegen@2.0.0:
- resolution: {integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==}
- engines: {node: '>=6.0'}
+ tinybench@2.9.0:
+ resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==}
+
+ tinyexec@0.3.1:
+ resolution: {integrity: sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==}
+
+ tinypool@1.0.1:
+ resolution: {integrity: sha512-URZYihUbRPcGv95En+sz6MfghfIc2OJ1sv/RmhWZLouPY0/8Vo80viwPvg3dlaS9fuq7fQMEfgRRK7BBZThBEA==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+
+ tinyrainbow@1.2.0:
+ resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==}
+ engines: {node: '>=14.0.0'}
+
+ tinyspy@3.0.2:
+ resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==}
+ engines: {node: '>=14.0.0'}
+
+ tldts-core@6.1.60:
+ resolution: {integrity: sha512-XHjoxak8SFQnHnmYHb3PcnW5TZ+9ErLZemZei3azuIRhQLw4IExsVbL3VZJdHcLeNaXq6NqawgpDPpjBOg4B5g==}
+
+ tldts@6.1.60:
+ resolution: {integrity: sha512-TYVHm7G9NCnhgqOsFalbX6MG1Po5F4efF+tLfoeiOGQq48Oqgwcgz8upY2R1BHWa4aDrj28RYx0dkYJ63qCFMg==}
hasBin: true
- dependencies:
- esprima: 4.0.1
- estraverse: 5.3.0
- esutils: 2.0.3
- optionator: 0.8.3
- optionalDependencies:
- source-map: 0.6.1
- dev: true
- /eslint-config-prettier@8.6.0(eslint@8.33.0):
- resolution: {integrity: sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA==}
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ tough-cookie@5.0.0:
+ resolution: {integrity: sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==}
+ engines: {node: '>=16'}
+
+ tr46@5.0.0:
+ resolution: {integrity: sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==}
+ engines: {node: '>=18'}
+
+ trim-lines@3.0.1:
+ resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
+
+ ts-api-utils@1.4.0:
+ resolution: {integrity: sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ typescript: '>=4.2.0'
+
+ tsconfck@3.1.4:
+ resolution: {integrity: sha512-kdqWFGVJqe+KGYvlSO9NIaWn9jT1Ny4oKVzAJsKii5eoE9snzTJzL4+MMVOMn+fikWGFmKEylcXL710V/kIPJQ==}
+ engines: {node: ^18 || >=20}
hasBin: true
peerDependencies:
- eslint: '>=7.0.0'
- dependencies:
- eslint: 8.33.0
- dev: false
+ typescript: ^5.0.0
+ peerDependenciesMeta:
+ typescript:
+ optional: true
- /eslint-config-turbo@0.0.7(eslint@8.33.0):
- resolution: {integrity: sha512-WbrGlyfs94rOXrhombi1wjIAYGdV2iosgJRndOZtmDQeq5GLTzYmBUCJQZWtLBEBUPCj96RxZ2OL7Cn+xv/Azg==}
+ type-check@0.4.0:
+ resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
+ engines: {node: '>= 0.8.0'}
+
+ typescript-eslint@8.13.0:
+ resolution: {integrity: sha512-vIMpDRJrQd70au2G8w34mPps0ezFSPMEX4pXkTzUkrNbRX+36ais2ksGWN0esZL+ZMaFJEneOBHzCgSqle7DHw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- eslint: '>6.6.0'
- dependencies:
- eslint: 8.33.0
- eslint-plugin-turbo: 0.0.7(eslint@8.33.0)
- dev: false
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ typescript@5.4.2:
+ resolution: {integrity: sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ typescript@5.6.3:
+ resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ ufo@1.5.4:
+ resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==}
+
+ undici-types@6.19.8:
+ resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==}
+
+ unicorn-magic@0.1.0:
+ resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==}
+ engines: {node: '>=18'}
+
+ unist-util-is@6.0.0:
+ resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==}
+
+ unist-util-position@5.0.0:
+ resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==}
+
+ unist-util-stringify-position@4.0.0:
+ resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==}
+
+ unist-util-visit-parents@6.0.1:
+ resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==}
+
+ unist-util-visit@5.0.0:
+ resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==}
- /eslint-plugin-astro@0.23.0(eslint@8.33.0):
- resolution: {integrity: sha512-KsIL1sOrz40qf/d9RP4E3sH6+p6nrIBBXB6rPuE9EWb5de+m9BWfvURuoECXfiXCmQh8UlHJUxgSWxn1bLsD8g==}
+ universalify@0.1.2:
+ resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==}
+ engines: {node: '>= 4.0.0'}
+
+ uri-js@4.4.1:
+ resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+
+ vfile-message@4.0.2:
+ resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==}
+
+ vfile@6.0.3:
+ resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==}
+
+ vite-node@2.1.4:
+ resolution: {integrity: sha512-kqa9v+oi4HwkG6g8ufRnb5AeplcRw8jUF6/7/Qz1qRQOXHImG8YnLbB+LLszENwFnoBl9xIf9nVdCFzNd7GQEg==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+ hasBin: true
+
+ vite-plugin-dts@4.3.0:
+ resolution: {integrity: sha512-LkBJh9IbLwL6/rxh0C1/bOurDrIEmRE7joC+jFdOEEciAFPbpEKOLSAr5nNh5R7CJ45cMbksTrFfy52szzC5eA==}
engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies:
- eslint: '>=7.0.0'
- dependencies:
- '@jridgewell/sourcemap-codec': 1.4.14
- '@typescript-eslint/types': 5.50.0
- astro-eslint-parser: 0.11.0
- eslint: 8.33.0
- eslint-utils: 3.0.0(eslint@8.33.0)
- postcss: 8.4.21
- postcss-selector-parser: 6.0.11
- transitivePeerDependencies:
- - supports-color
- dev: false
+ typescript: '*'
+ vite: '*'
+ peerDependenciesMeta:
+ vite:
+ optional: true
- /eslint-plugin-jsx-a11y@6.7.1(eslint@8.33.0):
- resolution: {integrity: sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==}
- engines: {node: '>=4.0'}
+ vite-tsconfig-paths@5.1.2:
+ resolution: {integrity: sha512-gEIbKfJzSEv0yR3XS2QEocKetONoWkbROj6hGx0FHM18qKUojhvcokQsxQx5nMkelZq2n37zbSGCJn+FSODSjA==}
peerDependencies:
- eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8
- dependencies:
- '@babel/runtime': 7.20.13
- aria-query: 5.1.3
- array-includes: 3.1.6
- array.prototype.flatmap: 1.3.1
- ast-types-flow: 0.0.7
- axe-core: 4.6.3
- axobject-query: 3.1.1
- damerau-levenshtein: 1.0.8
- emoji-regex: 9.2.2
- eslint: 8.33.0
- has: 1.0.3
- jsx-ast-utils: 3.3.3
- language-tags: 1.0.5
- minimatch: 3.1.2
- object.entries: 1.1.6
- object.fromentries: 2.0.6
- semver: 6.3.0
- dev: false
+ vite: '*'
+ peerDependenciesMeta:
+ vite:
+ optional: true
- /eslint-plugin-react-hooks@4.6.0(eslint@8.33.0):
- resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==}
- engines: {node: '>=10'}
+ vite@5.4.10:
+ resolution: {integrity: sha512-1hvaPshuPUtxeQ0hsVH3Mud0ZanOLwVTneA1EgbAM5LhaZEqyPWGRQ7BtaMvUrTDeEaC8pxtj6a6jku3x4z6SQ==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+ hasBin: true
peerDependencies:
- eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0
- dependencies:
- eslint: 8.33.0
- dev: false
+ '@types/node': ^18.0.0 || >=20.0.0
+ less: '*'
+ lightningcss: ^1.21.0
+ sass: '*'
+ sass-embedded: '*'
+ stylus: '*'
+ sugarss: '*'
+ terser: ^5.4.0
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ less:
+ optional: true
+ lightningcss:
+ optional: true
+ sass:
+ optional: true
+ sass-embedded:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
- /eslint-plugin-turbo@0.0.7(eslint@8.33.0):
- resolution: {integrity: sha512-iajOH8eD4jha3duztGVBD1BEmvNrQBaA/y3HFHf91vMDRYRwH7BpHSDFtxydDpk5ghlhRxG299SFxz7D6z4MBQ==}
+ vitepress@1.5.0:
+ resolution: {integrity: sha512-q4Q/G2zjvynvizdB3/bupdYkCJe2umSAMv9Ju4d92E6/NXJ59z70xB0q5p/4lpRyAwflDsbwy1mLV9Q5+nlB+g==}
+ hasBin: true
peerDependencies:
- eslint: '>6.6.0'
- dependencies:
- eslint: 8.33.0
- dev: false
+ markdown-it-mathjax3: ^4
+ postcss: ^8
+ peerDependenciesMeta:
+ markdown-it-mathjax3:
+ optional: true
+ postcss:
+ optional: true
- /eslint-scope@5.1.1:
- resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
- engines: {node: '>=8.0.0'}
- dependencies:
- esrecurse: 4.3.0
- estraverse: 4.3.0
- dev: false
+ vitest@2.1.4:
+ resolution: {integrity: sha512-eDjxbVAJw1UJJCHr5xr/xM86Zx+YxIEXGAR+bmnEID7z9qWfoxpHw0zdobz+TQAFOLT+nEXz3+gx6nUJ7RgmlQ==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+ hasBin: true
+ peerDependencies:
+ '@edge-runtime/vm': '*'
+ '@types/node': ^18.0.0 || >=20.0.0
+ '@vitest/browser': 2.1.4
+ '@vitest/ui': 2.1.4
+ happy-dom: '*'
+ jsdom: '*'
+ peerDependenciesMeta:
+ '@edge-runtime/vm':
+ optional: true
+ '@types/node':
+ optional: true
+ '@vitest/browser':
+ optional: true
+ '@vitest/ui':
+ optional: true
+ happy-dom:
+ optional: true
+ jsdom:
+ optional: true
- /eslint-scope@7.1.1:
- resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- dependencies:
- esrecurse: 4.3.0
- estraverse: 5.3.0
+ vscode-uri@3.0.8:
+ resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==}
- /eslint-utils@3.0.0(eslint@8.33.0):
- resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==}
- engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0}
+ vue-demi@0.14.10:
+ resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==}
+ engines: {node: '>=12'}
+ hasBin: true
peerDependencies:
- eslint: '>=5'
- dependencies:
- eslint: 8.33.0
- eslint-visitor-keys: 2.1.0
+ '@vue/composition-api': ^1.0.0-rc.1
+ vue: ^3.0.0-0 || ^2.6.0
+ peerDependenciesMeta:
+ '@vue/composition-api':
+ optional: true
+
+ vue@3.5.12:
+ resolution: {integrity: sha512-CLVZtXtn2ItBIi/zHZ0Sg1Xkb7+PU32bJJ8Bmy7ts3jxXTcbfsEfBivFYYWz1Hur+lalqGAh65Coin0r+HRUfg==}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ w3c-xmlserializer@5.0.0:
+ resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==}
+ engines: {node: '>=18'}
+
+ webidl-conversions@7.0.0:
+ resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==}
+ engines: {node: '>=12'}
+
+ whatwg-encoding@3.1.1:
+ resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==}
+ engines: {node: '>=18'}
+
+ whatwg-mimetype@4.0.0:
+ resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==}
+ engines: {node: '>=18'}
+
+ whatwg-url@14.0.0:
+ resolution: {integrity: sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==}
+ engines: {node: '>=18'}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ why-is-node-running@2.3.0:
+ resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ word-wrap@1.2.5:
+ resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
+ engines: {node: '>=0.10.0'}
- /eslint-visitor-keys@2.1.0:
- resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==}
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
engines: {node: '>=10'}
- /eslint-visitor-keys@3.3.0:
- resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ wrap-ansi@8.1.0:
+ resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
+ engines: {node: '>=12'}
- /eslint@8.33.0:
- resolution: {integrity: sha512-WjOpFQgKK8VrCnAtl8We0SUOy/oVZ5NHykyMiagV1M9r8IFpIJX7DduK6n1mpfhlG7T1NLWm2SuD8QB7KFySaA==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ wrap-ansi@9.0.0:
+ resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==}
+ engines: {node: '>=18'}
+
+ ws@8.18.0:
+ resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ xml-name-validator@5.0.0:
+ resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==}
+ engines: {node: '>=18'}
+
+ xmlchars@2.2.0:
+ resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==}
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yallist@4.0.0:
+ resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
+
+ yaml@2.5.1:
+ resolution: {integrity: sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==}
+ engines: {node: '>= 14'}
hasBin: true
- dependencies:
- '@eslint/eslintrc': 1.4.1
- '@humanwhocodes/config-array': 0.11.8
- '@humanwhocodes/module-importer': 1.0.1
- '@nodelib/fs.walk': 1.2.8
- ajv: 6.12.6
- chalk: 4.1.2
- cross-spawn: 7.0.3
- debug: 4.3.4
- doctrine: 3.0.0
- escape-string-regexp: 4.0.0
- eslint-scope: 7.1.1
- eslint-utils: 3.0.0(eslint@8.33.0)
- eslint-visitor-keys: 3.3.0
- espree: 9.4.1
- esquery: 1.4.0
- esutils: 2.0.3
- fast-deep-equal: 3.1.3
- file-entry-cache: 6.0.1
- find-up: 5.0.0
- glob-parent: 6.0.2
- globals: 13.20.0
- grapheme-splitter: 1.0.4
- ignore: 5.2.4
- import-fresh: 3.3.0
- imurmurhash: 0.1.4
- is-glob: 4.0.3
- is-path-inside: 3.0.3
- js-sdsl: 4.3.0
- 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.1
- regexpp: 3.2.0
- strip-ansi: 6.0.1
- strip-json-comments: 3.1.1
- text-table: 0.2.0
- transitivePeerDependencies:
- - supports-color
- /espree@9.4.1:
- resolution: {integrity: sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- dependencies:
- acorn: 8.8.2
- acorn-jsx: 5.3.2(acorn@8.8.2)
- eslint-visitor-keys: 3.3.0
+ yargs-parser@21.1.1:
+ resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
+ engines: {node: '>=12'}
+
+ yargs@17.7.2:
+ resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
+ engines: {node: '>=12'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+ yocto-queue@1.1.1:
+ resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==}
+ engines: {node: '>=12.20'}
- /esprima@4.0.1:
- resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
- engines: {node: '>=4'}
- hasBin: true
+ zwitch@2.0.4:
+ resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
- /esquery@1.4.0:
- resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==}
- engines: {node: '>=0.10'}
- dependencies:
- estraverse: 5.3.0
+snapshots:
- /esrecurse@4.3.0:
- resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
- engines: {node: '>=4.0'}
+ '@algolia/autocomplete-core@1.17.6(@algolia/client-search@5.13.0)(algoliasearch@5.13.0)(search-insights@2.17.2)':
dependencies:
- estraverse: 5.3.0
+ '@algolia/autocomplete-plugin-algolia-insights': 1.17.6(@algolia/client-search@5.13.0)(algoliasearch@5.13.0)(search-insights@2.17.2)
+ '@algolia/autocomplete-shared': 1.17.6(@algolia/client-search@5.13.0)(algoliasearch@5.13.0)
+ transitivePeerDependencies:
+ - '@algolia/client-search'
+ - algoliasearch
+ - search-insights
- /estraverse@4.3.0:
- resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==}
- engines: {node: '>=4.0'}
- dev: false
+ '@algolia/autocomplete-plugin-algolia-insights@1.17.6(@algolia/client-search@5.13.0)(algoliasearch@5.13.0)(search-insights@2.17.2)':
+ dependencies:
+ '@algolia/autocomplete-shared': 1.17.6(@algolia/client-search@5.13.0)(algoliasearch@5.13.0)
+ search-insights: 2.17.2
+ transitivePeerDependencies:
+ - '@algolia/client-search'
+ - algoliasearch
- /estraverse@5.3.0:
- resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
- engines: {node: '>=4.0'}
+ '@algolia/autocomplete-preset-algolia@1.17.6(@algolia/client-search@5.13.0)(algoliasearch@5.13.0)':
+ dependencies:
+ '@algolia/autocomplete-shared': 1.17.6(@algolia/client-search@5.13.0)(algoliasearch@5.13.0)
+ '@algolia/client-search': 5.13.0
+ algoliasearch: 5.13.0
- /estree-walker@2.0.2:
- resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
- dev: true
+ '@algolia/autocomplete-shared@1.17.6(@algolia/client-search@5.13.0)(algoliasearch@5.13.0)':
+ dependencies:
+ '@algolia/client-search': 5.13.0
+ algoliasearch: 5.13.0
- /estree-walker@3.0.3:
- resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
+ '@algolia/client-abtesting@5.13.0':
dependencies:
- '@types/estree': 1.0.0
- dev: false
+ '@algolia/client-common': 5.13.0
+ '@algolia/requester-browser-xhr': 5.13.0
+ '@algolia/requester-fetch': 5.13.0
+ '@algolia/requester-node-http': 5.13.0
- /esutils@2.0.3:
- resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
- engines: {node: '>=0.10.0'}
+ '@algolia/client-analytics@5.13.0':
+ dependencies:
+ '@algolia/client-common': 5.13.0
+ '@algolia/requester-browser-xhr': 5.13.0
+ '@algolia/requester-fetch': 5.13.0
+ '@algolia/requester-node-http': 5.13.0
- /events@3.3.0:
- resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
- engines: {node: '>=0.8.x'}
- dev: false
+ '@algolia/client-common@5.13.0': {}
- /execa@5.1.1:
- resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
- engines: {node: '>=10'}
+ '@algolia/client-insights@5.13.0':
dependencies:
- cross-spawn: 7.0.3
- get-stream: 6.0.1
- human-signals: 2.1.0
- is-stream: 2.0.1
- merge-stream: 2.0.0
- npm-run-path: 4.0.1
- onetime: 5.1.2
- signal-exit: 3.0.7
- strip-final-newline: 2.0.0
- dev: true
-
- /execa@6.1.0:
- resolution: {integrity: sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ '@algolia/client-common': 5.13.0
+ '@algolia/requester-browser-xhr': 5.13.0
+ '@algolia/requester-fetch': 5.13.0
+ '@algolia/requester-node-http': 5.13.0
+
+ '@algolia/client-personalization@5.13.0':
dependencies:
- cross-spawn: 7.0.3
- get-stream: 6.0.1
- human-signals: 3.0.1
- is-stream: 3.0.0
- merge-stream: 2.0.0
- npm-run-path: 5.1.0
- onetime: 6.0.0
- signal-exit: 3.0.7
- strip-final-newline: 3.0.0
+ '@algolia/client-common': 5.13.0
+ '@algolia/requester-browser-xhr': 5.13.0
+ '@algolia/requester-fetch': 5.13.0
+ '@algolia/requester-node-http': 5.13.0
- /extend-shallow@2.0.1:
- resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==}
- engines: {node: '>=0.10.0'}
+ '@algolia/client-query-suggestions@5.13.0':
dependencies:
- is-extendable: 0.1.1
- dev: false
+ '@algolia/client-common': 5.13.0
+ '@algolia/requester-browser-xhr': 5.13.0
+ '@algolia/requester-fetch': 5.13.0
+ '@algolia/requester-node-http': 5.13.0
- /extend@3.0.2:
- resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
- dev: false
+ '@algolia/client-search@5.13.0':
+ dependencies:
+ '@algolia/client-common': 5.13.0
+ '@algolia/requester-browser-xhr': 5.13.0
+ '@algolia/requester-fetch': 5.13.0
+ '@algolia/requester-node-http': 5.13.0
- /fast-deep-equal@3.1.3:
- resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
+ '@algolia/ingestion@1.13.0':
+ dependencies:
+ '@algolia/client-common': 5.13.0
+ '@algolia/requester-browser-xhr': 5.13.0
+ '@algolia/requester-fetch': 5.13.0
+ '@algolia/requester-node-http': 5.13.0
- /fast-glob@3.2.12:
- resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==}
- engines: {node: '>=8.6.0'}
+ '@algolia/monitoring@1.13.0':
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.5
+ '@algolia/client-common': 5.13.0
+ '@algolia/requester-browser-xhr': 5.13.0
+ '@algolia/requester-fetch': 5.13.0
+ '@algolia/requester-node-http': 5.13.0
- /fast-json-stable-stringify@2.1.0:
- resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
+ '@algolia/recommend@5.13.0':
+ dependencies:
+ '@algolia/client-common': 5.13.0
+ '@algolia/requester-browser-xhr': 5.13.0
+ '@algolia/requester-fetch': 5.13.0
+ '@algolia/requester-node-http': 5.13.0
- /fast-levenshtein@2.0.6:
- resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
+ '@algolia/requester-browser-xhr@5.13.0':
+ dependencies:
+ '@algolia/client-common': 5.13.0
- /fastq@1.15.0:
- resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==}
+ '@algolia/requester-fetch@5.13.0':
dependencies:
- reusify: 1.0.4
+ '@algolia/client-common': 5.13.0
- /file-entry-cache@6.0.1:
- resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
- engines: {node: ^10.12.0 || >=12.0.0}
+ '@algolia/requester-node-http@5.13.0':
dependencies:
- flat-cache: 3.0.4
+ '@algolia/client-common': 5.13.0
- /fill-range@7.0.1:
- resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
- engines: {node: '>=8'}
+ '@ampproject/remapping@2.3.0':
dependencies:
- to-regex-range: 5.0.1
+ '@jridgewell/gen-mapping': 0.3.5
+ '@jridgewell/trace-mapping': 0.3.25
- /find-up@4.1.0:
- resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
- engines: {node: '>=8'}
+ '@babel/code-frame@7.26.2':
dependencies:
- locate-path: 5.0.0
- path-exists: 4.0.0
+ '@babel/helper-validator-identifier': 7.25.9
+ js-tokens: 4.0.0
+ picocolors: 1.1.1
- /find-up@5.0.0:
- resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
- engines: {node: '>=10'}
+ '@babel/helper-string-parser@7.25.9': {}
+
+ '@babel/helper-validator-identifier@7.25.9': {}
+
+ '@babel/parser@7.26.2':
dependencies:
- locate-path: 6.0.0
- path-exists: 4.0.0
+ '@babel/types': 7.26.0
- /find-yarn-workspace-root2@1.2.16:
- resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==}
+ '@babel/runtime@7.26.0':
dependencies:
- micromatch: 4.0.5
- pkg-dir: 4.2.0
- dev: false
+ regenerator-runtime: 0.14.1
- /flat-cache@3.0.4:
- resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==}
- engines: {node: ^10.12.0 || >=12.0.0}
+ '@babel/types@7.26.0':
dependencies:
- flatted: 3.2.7
- rimraf: 3.0.2
+ '@babel/helper-string-parser': 7.25.9
+ '@babel/helper-validator-identifier': 7.25.9
- /flatted@3.2.7:
- resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==}
+ '@bcoe/v8-coverage@0.2.3': {}
- /for-each@0.3.3:
- resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
+ '@commitlint/cli@19.5.0(@types/node@22.9.0)(typescript@5.6.3)':
dependencies:
- is-callable: 1.2.7
+ '@commitlint/format': 19.5.0
+ '@commitlint/lint': 19.5.0
+ '@commitlint/load': 19.5.0(@types/node@22.9.0)(typescript@5.6.3)
+ '@commitlint/read': 19.5.0
+ '@commitlint/types': 19.5.0
+ tinyexec: 0.3.1
+ yargs: 17.7.2
+ transitivePeerDependencies:
+ - '@types/node'
+ - typescript
- /foreground-child@2.0.0:
- resolution: {integrity: sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==}
- engines: {node: '>=8.0.0'}
+ '@commitlint/config-conventional@19.5.0':
dependencies:
- cross-spawn: 7.0.3
- signal-exit: 3.0.7
- dev: true
+ '@commitlint/types': 19.5.0
+ conventional-changelog-conventionalcommits: 7.0.2
- /form-data@4.0.0:
- resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==}
- engines: {node: '>= 6'}
+ '@commitlint/config-validator@19.5.0':
dependencies:
- asynckit: 0.4.0
- combined-stream: 1.0.8
- mime-types: 2.1.35
- dev: true
+ '@commitlint/types': 19.5.0
+ ajv: 8.13.0
- /fraction.js@4.2.0:
- resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==}
- dev: false
+ '@commitlint/ensure@19.5.0':
+ dependencies:
+ '@commitlint/types': 19.5.0
+ lodash.camelcase: 4.3.0
+ lodash.kebabcase: 4.1.1
+ lodash.snakecase: 4.1.1
+ lodash.startcase: 4.4.0
+ lodash.upperfirst: 4.3.1
- /fs-extra@10.1.0:
- resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==}
- engines: {node: '>=12'}
+ '@commitlint/execute-rule@19.5.0': {}
+
+ '@commitlint/format@19.5.0':
dependencies:
- graceful-fs: 4.2.10
- jsonfile: 6.1.0
- universalify: 2.0.0
- dev: true
+ '@commitlint/types': 19.5.0
+ chalk: 5.3.0
- /fs-extra@11.1.0:
- resolution: {integrity: sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==}
- engines: {node: '>=14.14'}
+ '@commitlint/is-ignored@19.5.0':
dependencies:
- graceful-fs: 4.2.10
- jsonfile: 6.1.0
- universalify: 2.0.0
- dev: true
+ '@commitlint/types': 19.5.0
+ semver: 7.6.3
- /fs-extra@7.0.1:
- resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==}
- engines: {node: '>=6 <7 || >=8'}
+ '@commitlint/lint@19.5.0':
dependencies:
- graceful-fs: 4.2.10
- jsonfile: 4.0.0
- universalify: 0.1.2
- dev: true
+ '@commitlint/is-ignored': 19.5.0
+ '@commitlint/parse': 19.5.0
+ '@commitlint/rules': 19.5.0
+ '@commitlint/types': 19.5.0
- /fs.realpath@1.0.0:
- resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+ '@commitlint/load@19.5.0(@types/node@22.9.0)(typescript@5.6.3)':
+ dependencies:
+ '@commitlint/config-validator': 19.5.0
+ '@commitlint/execute-rule': 19.5.0
+ '@commitlint/resolve-extends': 19.5.0
+ '@commitlint/types': 19.5.0
+ chalk: 5.3.0
+ cosmiconfig: 9.0.0(typescript@5.6.3)
+ cosmiconfig-typescript-loader: 5.1.0(@types/node@22.9.0)(cosmiconfig@9.0.0(typescript@5.6.3))(typescript@5.6.3)
+ lodash.isplainobject: 4.0.6
+ lodash.merge: 4.6.2
+ lodash.uniq: 4.5.0
+ transitivePeerDependencies:
+ - '@types/node'
+ - typescript
- /fsevents@2.3.2:
- resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
- engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
- os: [darwin]
- requiresBuild: true
- optional: true
+ '@commitlint/message@19.5.0': {}
- /function-bind@1.1.1:
- resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
+ '@commitlint/parse@19.5.0':
+ dependencies:
+ '@commitlint/types': 19.5.0
+ conventional-changelog-angular: 7.0.0
+ conventional-commits-parser: 5.0.0
- /function.prototype.name@1.1.5:
- resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==}
- engines: {node: '>= 0.4'}
+ '@commitlint/read@19.5.0':
dependencies:
- call-bind: 1.0.2
- define-properties: 1.1.4
- es-abstract: 1.21.1
- functions-have-names: 1.2.3
- dev: false
+ '@commitlint/top-level': 19.5.0
+ '@commitlint/types': 19.5.0
+ git-raw-commits: 4.0.0
+ minimist: 1.2.8
+ tinyexec: 0.3.1
- /functions-have-names@1.2.3:
- resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
+ '@commitlint/resolve-extends@19.5.0':
+ dependencies:
+ '@commitlint/config-validator': 19.5.0
+ '@commitlint/types': 19.5.0
+ global-directory: 4.0.1
+ import-meta-resolve: 4.1.0
+ lodash.mergewith: 4.6.2
+ resolve-from: 5.0.0
- /gensync@1.0.0-beta.2:
- resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
- engines: {node: '>=6.9.0'}
- dev: false
+ '@commitlint/rules@19.5.0':
+ dependencies:
+ '@commitlint/ensure': 19.5.0
+ '@commitlint/message': 19.5.0
+ '@commitlint/to-lines': 19.5.0
+ '@commitlint/types': 19.5.0
- /get-caller-file@2.0.5:
- resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
- engines: {node: 6.* || 8.* || >= 10.*}
- dev: true
+ '@commitlint/to-lines@19.5.0': {}
- /get-func-name@2.0.0:
- resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==}
- dev: true
+ '@commitlint/top-level@19.5.0':
+ dependencies:
+ find-up: 7.0.0
- /get-intrinsic@1.2.0:
- resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==}
+ '@commitlint/types@19.5.0':
dependencies:
- function-bind: 1.1.1
- has: 1.0.3
- has-symbols: 1.0.3
+ '@types/conventional-commits-parser': 5.0.0
+ chalk: 5.3.0
- /get-stream@6.0.1:
- resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
- engines: {node: '>=10'}
+ '@docsearch/css@3.7.0': {}
- /get-symbol-description@1.0.0:
- resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==}
- engines: {node: '>= 0.4'}
+ '@docsearch/js@3.7.0(@algolia/client-search@5.13.0)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.2)':
dependencies:
- call-bind: 1.0.2
- get-intrinsic: 1.2.0
- dev: false
+ '@docsearch/react': 3.7.0(@algolia/client-search@5.13.0)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.2)
+ preact: 10.24.3
+ transitivePeerDependencies:
+ - '@algolia/client-search'
+ - '@types/react'
+ - react
+ - react-dom
+ - search-insights
+
+ '@docsearch/react@3.7.0(@algolia/client-search@5.13.0)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.2)':
+ dependencies:
+ '@algolia/autocomplete-core': 1.17.6(@algolia/client-search@5.13.0)(algoliasearch@5.13.0)(search-insights@2.17.2)
+ '@algolia/autocomplete-preset-algolia': 1.17.6(@algolia/client-search@5.13.0)(algoliasearch@5.13.0)
+ '@docsearch/css': 3.7.0
+ algoliasearch: 5.13.0
+ optionalDependencies:
+ '@types/react': 18.3.12
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ search-insights: 2.17.2
+ transitivePeerDependencies:
+ - '@algolia/client-search'
- /git-raw-commits@2.0.11:
- resolution: {integrity: sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==}
- engines: {node: '>=10'}
- hasBin: true
- dependencies:
- dargs: 7.0.0
- lodash: 4.17.21
- meow: 8.1.2
- split2: 3.2.2
- through2: 4.0.2
- dev: true
+ '@esbuild/aix-ppc64@0.21.5':
+ optional: true
- /github-slugger@1.5.0:
- resolution: {integrity: sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==}
- dev: false
+ '@esbuild/android-arm64@0.21.5':
+ optional: true
- /github-slugger@2.0.0:
- resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==}
- dev: false
+ '@esbuild/android-arm@0.21.5':
+ optional: true
- /glob-parent@5.1.2:
- resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
- engines: {node: '>= 6'}
- dependencies:
- is-glob: 4.0.3
+ '@esbuild/android-x64@0.21.5':
+ optional: true
- /glob-parent@6.0.2:
- resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
- engines: {node: '>=10.13.0'}
- dependencies:
- is-glob: 4.0.3
+ '@esbuild/darwin-arm64@0.21.5':
+ optional: true
- /glob@7.2.3:
- resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
- dependencies:
- fs.realpath: 1.0.0
- inflight: 1.0.6
- inherits: 2.0.4
- minimatch: 3.1.2
- once: 1.4.0
- path-is-absolute: 1.0.1
+ '@esbuild/darwin-x64@0.21.5':
+ optional: true
- /global-dirs@0.1.1:
- resolution: {integrity: sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==}
- engines: {node: '>=4'}
- dependencies:
- ini: 1.3.8
- dev: true
+ '@esbuild/freebsd-arm64@0.21.5':
+ optional: true
- /globals@11.12.0:
- resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
- engines: {node: '>=4'}
- dev: false
+ '@esbuild/freebsd-x64@0.21.5':
+ optional: true
- /globals@13.20.0:
- resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==}
- engines: {node: '>=8'}
- dependencies:
- type-fest: 0.20.2
+ '@esbuild/linux-arm64@0.21.5':
+ optional: true
- /globalthis@1.0.3:
- resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==}
- engines: {node: '>= 0.4'}
- dependencies:
- define-properties: 1.1.4
- dev: false
+ '@esbuild/linux-arm@0.21.5':
+ optional: true
- /globalyzer@0.1.0:
- resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==}
- dev: false
+ '@esbuild/linux-ia32@0.21.5':
+ optional: true
- /globby@11.1.0:
- resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
- engines: {node: '>=10'}
- dependencies:
- array-union: 2.1.0
- dir-glob: 3.0.1
- fast-glob: 3.2.12
- ignore: 5.2.4
- merge2: 1.4.1
- slash: 3.0.0
- dev: false
+ '@esbuild/linux-loong64@0.21.5':
+ optional: true
- /globrex@0.1.2:
- resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==}
+ '@esbuild/linux-mips64el@0.21.5':
+ optional: true
- /gopd@1.0.1:
- resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
- dependencies:
- get-intrinsic: 1.2.0
+ '@esbuild/linux-ppc64@0.21.5':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.21.5':
+ optional: true
- /graceful-fs@4.2.10:
- resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==}
+ '@esbuild/linux-s390x@0.21.5':
+ optional: true
- /grapheme-splitter@1.0.4:
- resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==}
+ '@esbuild/linux-x64@0.21.5':
+ optional: true
- /gray-matter@4.0.3:
- resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==}
- engines: {node: '>=6.0'}
- dependencies:
- js-yaml: 3.14.1
- kind-of: 6.0.3
- section-matter: 1.0.0
- strip-bom-string: 1.0.0
- dev: false
+ '@esbuild/netbsd-x64@0.21.5':
+ optional: true
- /hard-rejection@2.1.0:
- resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==}
- engines: {node: '>=6'}
- dev: true
+ '@esbuild/openbsd-x64@0.21.5':
+ optional: true
+
+ '@esbuild/sunos-x64@0.21.5':
+ optional: true
- /has-bigints@1.0.2:
- resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==}
+ '@esbuild/win32-arm64@0.21.5':
+ optional: true
- /has-flag@3.0.0:
- resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
- engines: {node: '>=4'}
+ '@esbuild/win32-ia32@0.21.5':
+ optional: true
- /has-flag@4.0.0:
- resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
- engines: {node: '>=8'}
+ '@esbuild/win32-x64@0.21.5':
+ optional: true
+
+ '@eslint-community/eslint-utils@4.4.1(eslint@9.14.0(jiti@1.21.6))':
+ dependencies:
+ eslint: 9.14.0(jiti@1.21.6)
+ eslint-visitor-keys: 3.4.3
+
+ '@eslint-community/regexpp@4.12.1': {}
- /has-package-exports@1.3.0:
- resolution: {integrity: sha512-e9OeXPQnmPhYoJ63lXC4wWe34TxEGZDZ3OQX9XRqp2VwsfLl3bQBy7VehLnd34g3ef8CmYlBLGqEMKXuz8YazQ==}
+ '@eslint/config-array@0.18.0':
dependencies:
- '@ljharb/has-package-exports-patterns': 0.0.2
- dev: false
+ '@eslint/object-schema': 2.1.4
+ debug: 4.3.7
+ minimatch: 3.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@eslint/core@0.7.0': {}
- /has-property-descriptors@1.0.0:
- resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==}
+ '@eslint/eslintrc@3.1.0':
dependencies:
- get-intrinsic: 1.2.0
+ ajv: 6.12.6
+ debug: 4.3.7
+ espree: 10.3.0
+ globals: 14.0.0
+ ignore: 5.3.2
+ import-fresh: 3.3.0
+ js-yaml: 4.1.0
+ minimatch: 3.1.2
+ strip-json-comments: 3.1.1
+ transitivePeerDependencies:
+ - supports-color
- /has-proto@1.0.1:
- resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==}
- engines: {node: '>= 0.4'}
- dev: false
+ '@eslint/js@9.14.0': {}
- /has-symbols@1.0.3:
- resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
- engines: {node: '>= 0.4'}
+ '@eslint/object-schema@2.1.4': {}
- /has-tostringtag@1.0.0:
- resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==}
- engines: {node: '>= 0.4'}
+ '@eslint/plugin-kit@0.2.2':
dependencies:
- has-symbols: 1.0.3
+ levn: 0.4.1
+
+ '@humanfs/core@0.19.1': {}
- /has@1.0.3:
- resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
- engines: {node: '>= 0.4.0'}
+ '@humanfs/node@0.16.6':
dependencies:
- function-bind: 1.1.1
+ '@humanfs/core': 0.19.1
+ '@humanwhocodes/retry': 0.3.1
+
+ '@humanwhocodes/module-importer@1.0.1': {}
+
+ '@humanwhocodes/retry@0.3.1': {}
- /hast-util-from-parse5@7.1.1:
- resolution: {integrity: sha512-R6PoNcUs89ZxLJmMWsVbwSWuz95/9OriyQZ3e2ybwqGsRXzhA6gv49rgGmQvLbZuSNDv9fCg7vV7gXUsvtUFaA==}
+ '@humanwhocodes/retry@0.4.1': {}
+
+ '@iconify-json/simple-icons@1.2.11':
dependencies:
- '@types/hast': 2.3.4
- '@types/unist': 2.0.6
- hastscript: 7.2.0
- property-information: 6.2.0
- vfile: 5.3.6
- vfile-location: 4.0.1
- web-namespaces: 2.0.1
- dev: false
+ '@iconify/types': 2.0.0
- /hast-util-has-property@2.0.1:
- resolution: {integrity: sha512-X2+RwZIMTMKpXUzlotatPzWj8bspCymtXH3cfG3iQKV+wPF53Vgaqxi/eLqGck0wKq1kS9nvoB1wchbCPEL8sg==}
- dev: false
+ '@iconify/types@2.0.0': {}
- /hast-util-heading-rank@2.1.1:
- resolution: {integrity: sha512-iAuRp+ESgJoRFJbSyaqsfvJDY6zzmFoEnL1gtz1+U8gKtGGj1p0CVlysuUAUjq95qlZESHINLThwJzNGmgGZxA==}
+ '@isaacs/cliui@8.0.2':
dependencies:
- '@types/hast': 2.3.4
- dev: false
+ string-width: 5.1.2
+ string-width-cjs: string-width@4.2.3
+ strip-ansi: 7.1.0
+ strip-ansi-cjs: strip-ansi@6.0.1
+ wrap-ansi: 8.1.0
+ wrap-ansi-cjs: wrap-ansi@7.0.0
+
+ '@istanbuljs/schema@0.1.3': {}
- /hast-util-is-element@2.1.3:
- resolution: {integrity: sha512-O1bKah6mhgEq2WtVMk+Ta5K7pPMqsBBlmzysLdcwKVrqzZQ0CHqUPiIVspNhAG1rvxpvJjtGee17XfauZYKqVA==}
+ '@jridgewell/gen-mapping@0.3.5':
dependencies:
- '@types/hast': 2.3.4
- '@types/unist': 2.0.6
- dev: false
+ '@jridgewell/set-array': 1.2.1
+ '@jridgewell/sourcemap-codec': 1.5.0
+ '@jridgewell/trace-mapping': 0.3.25
- /hast-util-parse-selector@3.1.1:
- resolution: {integrity: sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==}
+ '@jridgewell/resolve-uri@3.1.2': {}
+
+ '@jridgewell/set-array@1.2.1': {}
+
+ '@jridgewell/sourcemap-codec@1.5.0': {}
+
+ '@jridgewell/trace-mapping@0.3.25':
dependencies:
- '@types/hast': 2.3.4
- dev: false
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.0
- /hast-util-raw@7.2.3:
- resolution: {integrity: sha512-RujVQfVsOrxzPOPSzZFiwofMArbQke6DJjnFfceiEbFh7S05CbPt0cYN+A5YeD3pso0JQk6O1aHBnx9+Pm2uqg==}
+ '@microsoft/api-extractor-model@7.29.8(@types/node@22.9.0)':
dependencies:
- '@types/hast': 2.3.4
- '@types/parse5': 6.0.3
- hast-util-from-parse5: 7.1.1
- hast-util-to-parse5: 7.1.0
- html-void-elements: 2.0.1
- parse5: 6.0.1
- unist-util-position: 4.0.4
- unist-util-visit: 4.1.2
- vfile: 5.3.6
- web-namespaces: 2.0.1
- zwitch: 2.0.4
- dev: false
+ '@microsoft/tsdoc': 0.15.0
+ '@microsoft/tsdoc-config': 0.17.0
+ '@rushstack/node-core-library': 5.9.0(@types/node@22.9.0)
+ transitivePeerDependencies:
+ - '@types/node'
- /hast-util-to-html@8.0.4:
- resolution: {integrity: sha512-4tpQTUOr9BMjtYyNlt0P50mH7xj0Ks2xpo8M943Vykljf99HW6EzulIoJP1N3eKOSScEHzyzi9dm7/cn0RfGwA==}
+ '@microsoft/api-extractor@7.47.11(@types/node@22.9.0)':
dependencies:
- '@types/hast': 2.3.4
- '@types/unist': 2.0.6
- ccount: 2.0.1
- comma-separated-tokens: 2.0.3
- hast-util-raw: 7.2.3
- hast-util-whitespace: 2.0.1
- html-void-elements: 2.0.1
- property-information: 6.2.0
- space-separated-tokens: 2.0.2
- stringify-entities: 4.0.3
- zwitch: 2.0.4
- dev: false
+ '@microsoft/api-extractor-model': 7.29.8(@types/node@22.9.0)
+ '@microsoft/tsdoc': 0.15.0
+ '@microsoft/tsdoc-config': 0.17.0
+ '@rushstack/node-core-library': 5.9.0(@types/node@22.9.0)
+ '@rushstack/rig-package': 0.5.3
+ '@rushstack/terminal': 0.14.2(@types/node@22.9.0)
+ '@rushstack/ts-command-line': 4.23.0(@types/node@22.9.0)
+ lodash: 4.17.21
+ minimatch: 3.0.8
+ resolve: 1.22.8
+ semver: 7.5.4
+ source-map: 0.6.1
+ typescript: 5.4.2
+ transitivePeerDependencies:
+ - '@types/node'
- /hast-util-to-parse5@7.1.0:
- resolution: {integrity: sha512-YNRgAJkH2Jky5ySkIqFXTQiaqcAtJyVE+D5lkN6CdtOqrnkLfGYYrEcKuHOJZlp+MwjSwuD3fZuawI+sic/RBw==}
+ '@microsoft/tsdoc-config@0.17.0':
dependencies:
- '@types/hast': 2.3.4
- comma-separated-tokens: 2.0.3
- property-information: 6.2.0
- space-separated-tokens: 2.0.2
- web-namespaces: 2.0.1
- zwitch: 2.0.4
- dev: false
+ '@microsoft/tsdoc': 0.15.0
+ ajv: 8.12.0
+ jju: 1.4.0
+ resolve: 1.22.8
- /hast-util-whitespace@2.0.1:
- resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==}
- dev: false
+ '@microsoft/tsdoc@0.15.0': {}
- /hastscript@7.2.0:
- resolution: {integrity: sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==}
+ '@nodelib/fs.scandir@2.1.5':
dependencies:
- '@types/hast': 2.3.4
- comma-separated-tokens: 2.0.3
- hast-util-parse-selector: 3.1.1
- property-information: 6.2.0
- space-separated-tokens: 2.0.2
- dev: false
+ '@nodelib/fs.stat': 2.0.5
+ run-parallel: 1.2.0
- /hosted-git-info@2.8.9:
- resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==}
- dev: true
+ '@nodelib/fs.stat@2.0.5': {}
- /hosted-git-info@4.1.0:
- resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==}
- engines: {node: '>=10'}
+ '@nodelib/fs.walk@1.2.8':
dependencies:
- lru-cache: 6.0.0
- dev: true
+ '@nodelib/fs.scandir': 2.1.5
+ fastq: 1.17.1
- /html-encoding-sniffer@3.0.0:
- resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==}
- engines: {node: '>=12'}
+ '@pkgjs/parseargs@0.11.0':
+ optional: true
+
+ '@rollup/pluginutils@5.1.3(rollup@4.25.0)':
dependencies:
- whatwg-encoding: 2.0.0
- dev: true
+ '@types/estree': 1.0.6
+ estree-walker: 2.0.2
+ picomatch: 4.0.2
+ optionalDependencies:
+ rollup: 4.25.0
- /html-escaper@2.0.2:
- resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==}
- dev: true
+ '@rollup/rollup-android-arm-eabi@4.25.0':
+ optional: true
- /html-escaper@3.0.3:
- resolution: {integrity: sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==}
- dev: false
+ '@rollup/rollup-android-arm64@4.25.0':
+ optional: true
- /html-void-elements@2.0.1:
- resolution: {integrity: sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==}
- dev: false
+ '@rollup/rollup-darwin-arm64@4.25.0':
+ optional: true
- /http-proxy-agent@5.0.0:
- resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==}
- engines: {node: '>= 6'}
- dependencies:
- '@tootallnate/once': 2.0.0
- agent-base: 6.0.2
- debug: 4.3.4
- transitivePeerDependencies:
- - supports-color
- dev: true
+ '@rollup/rollup-darwin-x64@4.25.0':
+ optional: true
- /https-proxy-agent@5.0.1:
- resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==}
- engines: {node: '>= 6'}
- dependencies:
- agent-base: 6.0.2
- debug: 4.3.4
- transitivePeerDependencies:
- - supports-color
- dev: true
+ '@rollup/rollup-freebsd-arm64@4.25.0':
+ optional: true
- /human-signals@2.1.0:
- resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
- engines: {node: '>=10.17.0'}
- dev: true
+ '@rollup/rollup-freebsd-x64@4.25.0':
+ optional: true
- /human-signals@3.0.1:
- resolution: {integrity: sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==}
- engines: {node: '>=12.20.0'}
+ '@rollup/rollup-linux-arm-gnueabihf@4.25.0':
+ optional: true
- /husky@8.0.3:
- resolution: {integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==}
- engines: {node: '>=14'}
- hasBin: true
- dev: true
+ '@rollup/rollup-linux-arm-musleabihf@4.25.0':
+ optional: true
- /iconv-lite@0.6.3:
- resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
- engines: {node: '>=0.10.0'}
- dependencies:
- safer-buffer: 2.1.2
- dev: true
+ '@rollup/rollup-linux-arm64-gnu@4.25.0':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-musl@4.25.0':
+ optional: true
- /ieee754@1.2.1:
- resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
- dev: false
+ '@rollup/rollup-linux-powerpc64le-gnu@4.25.0':
+ optional: true
- /ignore@5.2.4:
- resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==}
- engines: {node: '>= 4'}
+ '@rollup/rollup-linux-riscv64-gnu@4.25.0':
+ optional: true
- /import-fresh@3.3.0:
- resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
- engines: {node: '>=6'}
- dependencies:
- parent-module: 1.0.1
- resolve-from: 4.0.0
+ '@rollup/rollup-linux-s390x-gnu@4.25.0':
+ optional: true
+
+ '@rollup/rollup-linux-x64-gnu@4.25.0':
+ optional: true
+
+ '@rollup/rollup-linux-x64-musl@4.25.0':
+ optional: true
+
+ '@rollup/rollup-win32-arm64-msvc@4.25.0':
+ optional: true
- /import-lazy@4.0.0:
- resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==}
- engines: {node: '>=8'}
- dev: true
+ '@rollup/rollup-win32-ia32-msvc@4.25.0':
+ optional: true
- /import-meta-resolve@2.2.1:
- resolution: {integrity: sha512-C6lLL7EJPY44kBvA80gq4uMsVFw5x3oSKfuMl1cuZ2RkI5+UJqQXgn+6hlUew0y4ig7Ypt4CObAAIzU53Nfpuw==}
- dev: false
+ '@rollup/rollup-win32-x64-msvc@4.25.0':
+ optional: true
- /imurmurhash@0.1.4:
- resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
- engines: {node: '>=0.8.19'}
+ '@rushstack/node-core-library@5.9.0(@types/node@22.9.0)':
+ dependencies:
+ ajv: 8.13.0
+ ajv-draft-04: 1.0.0(ajv@8.13.0)
+ ajv-formats: 3.0.1(ajv@8.13.0)
+ fs-extra: 7.0.1
+ import-lazy: 4.0.0
+ jju: 1.4.0
+ resolve: 1.22.8
+ semver: 7.5.4
+ optionalDependencies:
+ '@types/node': 22.9.0
- /indent-string@4.0.0:
- resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==}
- engines: {node: '>=8'}
- dev: true
+ '@rushstack/rig-package@0.5.3':
+ dependencies:
+ resolve: 1.22.8
+ strip-json-comments: 3.1.1
+
+ '@rushstack/terminal@0.14.2(@types/node@22.9.0)':
+ dependencies:
+ '@rushstack/node-core-library': 5.9.0(@types/node@22.9.0)
+ supports-color: 8.1.1
+ optionalDependencies:
+ '@types/node': 22.9.0
- /inflight@1.0.6:
- resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ '@rushstack/ts-command-line@4.23.0(@types/node@22.9.0)':
dependencies:
- once: 1.4.0
- wrappy: 1.0.2
+ '@rushstack/terminal': 0.14.2(@types/node@22.9.0)
+ '@types/argparse': 1.0.38
+ argparse: 1.0.10
+ string-argv: 0.3.2
+ transitivePeerDependencies:
+ - '@types/node'
- /inherits@2.0.4:
- resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+ '@shikijs/core@1.22.2':
+ dependencies:
+ '@shikijs/engine-javascript': 1.22.2
+ '@shikijs/engine-oniguruma': 1.22.2
+ '@shikijs/types': 1.22.2
+ '@shikijs/vscode-textmate': 9.3.0
+ '@types/hast': 3.0.4
+ hast-util-to-html: 9.0.3
- /ini@1.3.8:
- resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
- dev: true
+ '@shikijs/engine-javascript@1.22.2':
+ dependencies:
+ '@shikijs/types': 1.22.2
+ '@shikijs/vscode-textmate': 9.3.0
+ oniguruma-to-js: 0.4.3
- /internal-slot@1.0.4:
- resolution: {integrity: sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==}
- engines: {node: '>= 0.4'}
+ '@shikijs/engine-oniguruma@1.22.2':
dependencies:
- get-intrinsic: 1.2.0
- has: 1.0.3
- side-channel: 1.0.4
+ '@shikijs/types': 1.22.2
+ '@shikijs/vscode-textmate': 9.3.0
- /is-arguments@1.1.1:
- resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==}
- engines: {node: '>= 0.4'}
+ '@shikijs/transformers@1.22.2':
dependencies:
- call-bind: 1.0.2
- has-tostringtag: 1.0.0
+ shiki: 1.22.2
- /is-array-buffer@3.0.1:
- resolution: {integrity: sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==}
+ '@shikijs/types@1.22.2':
dependencies:
- call-bind: 1.0.2
- get-intrinsic: 1.2.0
- is-typed-array: 1.1.10
+ '@shikijs/vscode-textmate': 9.3.0
+ '@types/hast': 3.0.4
- /is-arrayish@0.2.1:
- resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
- dev: true
+ '@shikijs/vscode-textmate@9.3.0': {}
- /is-bigint@1.0.4:
- resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==}
+ '@testing-library/dom@10.4.0':
dependencies:
- has-bigints: 1.0.2
+ '@babel/code-frame': 7.26.2
+ '@babel/runtime': 7.26.0
+ '@types/aria-query': 5.0.4
+ aria-query: 5.3.0
+ chalk: 4.1.2
+ dom-accessibility-api: 0.5.16
+ lz-string: 1.5.0
+ pretty-format: 27.5.1
- /is-binary-path@2.1.0:
- resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
- engines: {node: '>=8'}
+ '@testing-library/react@16.0.1(@testing-library/dom@10.4.0)(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
- binary-extensions: 2.2.0
- dev: false
+ '@babel/runtime': 7.26.0
+ '@testing-library/dom': 10.4.0
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.12
+ '@types/react-dom': 18.3.1
- /is-boolean-object@1.1.2:
- resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==}
- engines: {node: '>= 0.4'}
+ '@testing-library/user-event@14.5.2(@testing-library/dom@10.4.0)':
dependencies:
- call-bind: 1.0.2
- has-tostringtag: 1.0.0
+ '@testing-library/dom': 10.4.0
- /is-buffer@2.0.5:
- resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==}
- engines: {node: '>=4'}
- dev: false
+ '@types/argparse@1.0.38': {}
- /is-callable@1.2.7:
- resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
- engines: {node: '>= 0.4'}
+ '@types/aria-query@5.0.4': {}
- /is-core-module@2.11.0:
- resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==}
+ '@types/conventional-commits-parser@5.0.0':
dependencies:
- has: 1.0.3
+ '@types/node': 22.9.0
- /is-date-object@1.0.5:
- resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==}
- engines: {node: '>= 0.4'}
+ '@types/eslint-config-prettier@6.11.3': {}
+
+ '@types/eslint@9.6.1':
dependencies:
- has-tostringtag: 1.0.0
+ '@types/estree': 1.0.6
+ '@types/json-schema': 7.0.15
- /is-docker@2.2.1:
- resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
- engines: {node: '>=8'}
- hasBin: true
- dev: false
+ '@types/eslint__js@8.42.3':
+ dependencies:
+ '@types/eslint': 9.6.1
- /is-docker@3.0.0:
- resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- hasBin: true
- dev: false
+ '@types/estree@1.0.6': {}
- /is-extendable@0.1.1:
- resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==}
- engines: {node: '>=0.10.0'}
- dev: false
+ '@types/hast@3.0.4':
+ dependencies:
+ '@types/unist': 3.0.3
- /is-extglob@2.1.1:
- resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
- engines: {node: '>=0.10.0'}
+ '@types/json-schema@7.0.15': {}
- /is-fullwidth-code-point@3.0.0:
- resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
- engines: {node: '>=8'}
+ '@types/linkify-it@5.0.0': {}
- /is-fullwidth-code-point@4.0.0:
- resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==}
- engines: {node: '>=12'}
- dev: true
+ '@types/markdown-it@14.1.2':
+ dependencies:
+ '@types/linkify-it': 5.0.0
+ '@types/mdurl': 2.0.0
- /is-glob@4.0.3:
- resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
- engines: {node: '>=0.10.0'}
+ '@types/mdast@4.0.4':
dependencies:
- is-extglob: 2.1.1
+ '@types/unist': 3.0.3
- /is-interactive@2.0.0:
- resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==}
- engines: {node: '>=12'}
- dev: false
+ '@types/mdurl@2.0.0': {}
- /is-map@2.0.2:
- resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==}
+ '@types/node@22.9.0':
+ dependencies:
+ undici-types: 6.19.8
- /is-negative-zero@2.0.2:
- resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==}
- engines: {node: '>= 0.4'}
- dev: false
+ '@types/prop-types@15.7.13': {}
- /is-number-object@1.0.7:
- resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==}
- engines: {node: '>= 0.4'}
+ '@types/react-dom@18.3.1':
dependencies:
- has-tostringtag: 1.0.0
+ '@types/react': 18.3.12
- /is-number@7.0.0:
- resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
- engines: {node: '>=0.12.0'}
+ '@types/react@18.3.12':
+ dependencies:
+ '@types/prop-types': 15.7.13
+ csstype: 3.1.3
- /is-obj@2.0.0:
- resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==}
- engines: {node: '>=8'}
+ '@types/unist@3.0.3': {}
- /is-path-inside@3.0.3:
- resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
- engines: {node: '>=8'}
+ '@types/web-bluetooth@0.0.20': {}
- /is-plain-obj@1.1.0:
- resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==}
- engines: {node: '>=0.10.0'}
- dev: true
+ '@typescript-eslint/eslint-plugin@8.13.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3))(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3)':
+ dependencies:
+ '@eslint-community/regexpp': 4.12.1
+ '@typescript-eslint/parser': 8.13.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3)
+ '@typescript-eslint/scope-manager': 8.13.0
+ '@typescript-eslint/type-utils': 8.13.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3)
+ '@typescript-eslint/utils': 8.13.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3)
+ '@typescript-eslint/visitor-keys': 8.13.0
+ eslint: 9.14.0(jiti@1.21.6)
+ graphemer: 1.4.0
+ ignore: 5.3.2
+ natural-compare: 1.4.0
+ ts-api-utils: 1.4.0(typescript@5.6.3)
+ optionalDependencies:
+ typescript: 5.6.3
+ transitivePeerDependencies:
+ - supports-color
- /is-plain-obj@4.1.0:
- resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
- engines: {node: '>=12'}
- dev: false
+ '@typescript-eslint/parser@8.13.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3)':
+ dependencies:
+ '@typescript-eslint/scope-manager': 8.13.0
+ '@typescript-eslint/types': 8.13.0
+ '@typescript-eslint/typescript-estree': 8.13.0(typescript@5.6.3)
+ '@typescript-eslint/visitor-keys': 8.13.0
+ debug: 4.3.7
+ eslint: 9.14.0(jiti@1.21.6)
+ optionalDependencies:
+ typescript: 5.6.3
+ transitivePeerDependencies:
+ - supports-color
- /is-potential-custom-element-name@1.0.1:
- resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==}
- dev: true
+ '@typescript-eslint/scope-manager@8.13.0':
+ dependencies:
+ '@typescript-eslint/types': 8.13.0
+ '@typescript-eslint/visitor-keys': 8.13.0
- /is-regex@1.1.4:
- resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==}
- engines: {node: '>= 0.4'}
+ '@typescript-eslint/type-utils@8.13.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3)':
dependencies:
- call-bind: 1.0.2
- has-tostringtag: 1.0.0
+ '@typescript-eslint/typescript-estree': 8.13.0(typescript@5.6.3)
+ '@typescript-eslint/utils': 8.13.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3)
+ debug: 4.3.7
+ ts-api-utils: 1.4.0(typescript@5.6.3)
+ optionalDependencies:
+ typescript: 5.6.3
+ transitivePeerDependencies:
+ - eslint
+ - supports-color
- /is-set@2.0.2:
- resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==}
+ '@typescript-eslint/types@8.13.0': {}
- /is-shared-array-buffer@1.0.2:
- resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==}
+ '@typescript-eslint/typescript-estree@8.13.0(typescript@5.6.3)':
dependencies:
- call-bind: 1.0.2
-
- /is-stream@2.0.1:
- resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
- engines: {node: '>=8'}
- dev: true
+ '@typescript-eslint/types': 8.13.0
+ '@typescript-eslint/visitor-keys': 8.13.0
+ debug: 4.3.7
+ fast-glob: 3.3.2
+ is-glob: 4.0.3
+ minimatch: 9.0.5
+ semver: 7.6.3
+ ts-api-utils: 1.4.0(typescript@5.6.3)
+ optionalDependencies:
+ typescript: 5.6.3
+ transitivePeerDependencies:
+ - supports-color
- /is-stream@3.0.0:
- resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ '@typescript-eslint/utils@8.13.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3)':
+ dependencies:
+ '@eslint-community/eslint-utils': 4.4.1(eslint@9.14.0(jiti@1.21.6))
+ '@typescript-eslint/scope-manager': 8.13.0
+ '@typescript-eslint/types': 8.13.0
+ '@typescript-eslint/typescript-estree': 8.13.0(typescript@5.6.3)
+ eslint: 9.14.0(jiti@1.21.6)
+ transitivePeerDependencies:
+ - supports-color
+ - typescript
- /is-string@1.0.7:
- resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==}
- engines: {node: '>= 0.4'}
+ '@typescript-eslint/visitor-keys@8.13.0':
dependencies:
- has-tostringtag: 1.0.0
+ '@typescript-eslint/types': 8.13.0
+ eslint-visitor-keys: 3.4.3
- /is-symbol@1.0.4:
- resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==}
- engines: {node: '>= 0.4'}
+ '@ungap/structured-clone@1.2.0': {}
+
+ '@vitejs/plugin-vue@5.1.5(vite@5.4.10(@types/node@22.9.0))(vue@3.5.12(typescript@5.6.3))':
dependencies:
- has-symbols: 1.0.3
+ vite: 5.4.10(@types/node@22.9.0)
+ vue: 3.5.12(typescript@5.6.3)
- /is-text-path@1.0.1:
- resolution: {integrity: sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==}
- engines: {node: '>=0.10.0'}
+ '@vitest/coverage-v8@2.1.4(vitest@2.1.4(@types/node@22.9.0)(jsdom@25.0.1))':
dependencies:
- text-extensions: 1.9.0
- dev: true
+ '@ampproject/remapping': 2.3.0
+ '@bcoe/v8-coverage': 0.2.3
+ debug: 4.3.7
+ istanbul-lib-coverage: 3.2.2
+ istanbul-lib-report: 3.0.1
+ istanbul-lib-source-maps: 5.0.6
+ istanbul-reports: 3.1.7
+ magic-string: 0.30.12
+ magicast: 0.3.5
+ std-env: 3.8.0
+ test-exclude: 7.0.1
+ tinyrainbow: 1.2.0
+ vitest: 2.1.4(@types/node@22.9.0)(jsdom@25.0.1)
+ transitivePeerDependencies:
+ - supports-color
- /is-typed-array@1.1.10:
- resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==}
- engines: {node: '>= 0.4'}
+ '@vitest/expect@2.1.4':
dependencies:
- available-typed-arrays: 1.0.5
- call-bind: 1.0.2
- for-each: 0.3.3
- gopd: 1.0.1
- has-tostringtag: 1.0.0
+ '@vitest/spy': 2.1.4
+ '@vitest/utils': 2.1.4
+ chai: 5.1.2
+ tinyrainbow: 1.2.0
- /is-unicode-supported@1.3.0:
- resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==}
- engines: {node: '>=12'}
- dev: false
+ '@vitest/mocker@2.1.4(vite@5.4.10(@types/node@22.9.0))':
+ dependencies:
+ '@vitest/spy': 2.1.4
+ estree-walker: 3.0.3
+ magic-string: 0.30.12
+ optionalDependencies:
+ vite: 5.4.10(@types/node@22.9.0)
- /is-weakmap@2.0.1:
- resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==}
+ '@vitest/pretty-format@2.1.4':
+ dependencies:
+ tinyrainbow: 1.2.0
- /is-weakref@1.0.2:
- resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==}
+ '@vitest/runner@2.1.4':
dependencies:
- call-bind: 1.0.2
- dev: false
+ '@vitest/utils': 2.1.4
+ pathe: 1.1.2
- /is-weakset@2.0.2:
- resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==}
+ '@vitest/snapshot@2.1.4':
dependencies:
- call-bind: 1.0.2
- get-intrinsic: 1.2.0
+ '@vitest/pretty-format': 2.1.4
+ magic-string: 0.30.12
+ pathe: 1.1.2
- /is-wsl@2.2.0:
- resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
- engines: {node: '>=8'}
+ '@vitest/spy@2.1.4':
dependencies:
- is-docker: 2.2.1
- dev: false
+ tinyspy: 3.0.2
- /isarray@2.0.5:
- resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
+ '@vitest/utils@2.1.4':
+ dependencies:
+ '@vitest/pretty-format': 2.1.4
+ loupe: 3.1.2
+ tinyrainbow: 1.2.0
- /isexe@2.0.0:
- resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+ '@volar/language-core@2.4.10':
+ dependencies:
+ '@volar/source-map': 2.4.10
- /istanbul-lib-coverage@3.2.0:
- resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==}
- engines: {node: '>=8'}
- dev: true
+ '@volar/source-map@2.4.10': {}
- /istanbul-lib-report@3.0.0:
- resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==}
- engines: {node: '>=8'}
+ '@volar/typescript@2.4.10':
dependencies:
- istanbul-lib-coverage: 3.2.0
- make-dir: 3.1.0
- supports-color: 7.2.0
- dev: true
+ '@volar/language-core': 2.4.10
+ path-browserify: 1.0.1
+ vscode-uri: 3.0.8
- /istanbul-reports@3.1.5:
- resolution: {integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==}
- engines: {node: '>=8'}
+ '@vue/compiler-core@3.5.12':
dependencies:
- html-escaper: 2.0.2
- istanbul-lib-report: 3.0.0
- dev: true
+ '@babel/parser': 7.26.2
+ '@vue/shared': 3.5.12
+ entities: 4.5.0
+ estree-walker: 2.0.2
+ source-map-js: 1.2.1
- /jju@1.4.0:
- resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==}
- dev: true
+ '@vue/compiler-dom@3.5.12':
+ dependencies:
+ '@vue/compiler-core': 3.5.12
+ '@vue/shared': 3.5.12
- /js-sdsl@4.3.0:
- resolution: {integrity: sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==}
+ '@vue/compiler-sfc@3.5.12':
+ dependencies:
+ '@babel/parser': 7.26.2
+ '@vue/compiler-core': 3.5.12
+ '@vue/compiler-dom': 3.5.12
+ '@vue/compiler-ssr': 3.5.12
+ '@vue/shared': 3.5.12
+ estree-walker: 2.0.2
+ magic-string: 0.30.12
+ postcss: 8.4.48
+ source-map-js: 1.2.1
- /js-tokens@4.0.0:
- resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+ '@vue/compiler-ssr@3.5.12':
+ dependencies:
+ '@vue/compiler-dom': 3.5.12
+ '@vue/shared': 3.5.12
- /js-yaml@3.14.1:
- resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==}
- hasBin: true
+ '@vue/compiler-vue2@2.7.16':
dependencies:
- argparse: 1.0.10
- esprima: 4.0.1
- dev: false
+ de-indent: 1.0.2
+ he: 1.2.0
- /js-yaml@4.1.0:
- resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
- hasBin: true
+ '@vue/devtools-api@7.6.4':
dependencies:
- argparse: 2.0.1
+ '@vue/devtools-kit': 7.6.4
- /jsdom@21.1.0:
- resolution: {integrity: sha512-m0lzlP7qOtthD918nenK3hdItSd2I+V3W9IrBcB36sqDwG+KnUs66IF5GY7laGWUnlM9vTsD0W1QwSEBYWWcJg==}
- engines: {node: '>=14'}
- peerDependencies:
- canvas: ^2.5.0
- peerDependenciesMeta:
- canvas:
- optional: true
+ '@vue/devtools-kit@7.6.4':
dependencies:
- abab: 2.0.6
- acorn: 8.8.2
- acorn-globals: 7.0.1
- cssom: 0.5.0
- cssstyle: 2.3.0
- data-urls: 3.0.2
- decimal.js: 10.4.3
- domexception: 4.0.0
- escodegen: 2.0.0
- form-data: 4.0.0
- html-encoding-sniffer: 3.0.0
- http-proxy-agent: 5.0.0
- https-proxy-agent: 5.0.1
- is-potential-custom-element-name: 1.0.1
- nwsapi: 2.2.2
- parse5: 7.1.2
- saxes: 6.0.0
- symbol-tree: 3.2.4
- tough-cookie: 4.1.2
- w3c-xmlserializer: 4.0.0
- webidl-conversions: 7.0.0
- whatwg-encoding: 2.0.0
- whatwg-mimetype: 3.0.0
- whatwg-url: 11.0.0
- ws: 8.12.0
- xml-name-validator: 4.0.0
- transitivePeerDependencies:
- - bufferutil
- - supports-color
- - utf-8-validate
- dev: true
+ '@vue/devtools-shared': 7.6.4
+ birpc: 0.2.19
+ hookable: 5.5.3
+ mitt: 3.0.1
+ perfect-debounce: 1.0.0
+ speakingurl: 14.0.1
+ superjson: 2.2.1
- /jsesc@2.5.2:
- resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==}
- engines: {node: '>=4'}
- hasBin: true
- dev: false
+ '@vue/devtools-shared@7.6.4':
+ dependencies:
+ rfdc: 1.4.1
- /json-parse-even-better-errors@2.3.1:
- resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
- dev: true
+ '@vue/language-core@2.1.6(typescript@5.6.3)':
+ dependencies:
+ '@volar/language-core': 2.4.10
+ '@vue/compiler-dom': 3.5.12
+ '@vue/compiler-vue2': 2.7.16
+ '@vue/shared': 3.5.12
+ computeds: 0.0.1
+ minimatch: 9.0.5
+ muggle-string: 0.4.1
+ path-browserify: 1.0.1
+ optionalDependencies:
+ typescript: 5.6.3
- /json-schema-traverse@0.4.1:
- resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
+ '@vue/reactivity@3.5.12':
+ dependencies:
+ '@vue/shared': 3.5.12
- /json-schema-traverse@1.0.0:
- resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
- dev: true
+ '@vue/runtime-core@3.5.12':
+ dependencies:
+ '@vue/reactivity': 3.5.12
+ '@vue/shared': 3.5.12
- /json-stable-stringify-without-jsonify@1.0.1:
- resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
+ '@vue/runtime-dom@3.5.12':
+ dependencies:
+ '@vue/reactivity': 3.5.12
+ '@vue/runtime-core': 3.5.12
+ '@vue/shared': 3.5.12
+ csstype: 3.1.3
- /json5@2.2.3:
- resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
- engines: {node: '>=6'}
- hasBin: true
- dev: false
+ '@vue/server-renderer@3.5.12(vue@3.5.12(typescript@5.6.3))':
+ dependencies:
+ '@vue/compiler-ssr': 3.5.12
+ '@vue/shared': 3.5.12
+ vue: 3.5.12(typescript@5.6.3)
- /jsonc-parser@2.3.1:
- resolution: {integrity: sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg==}
- dev: false
+ '@vue/shared@3.5.12': {}
- /jsonc-parser@3.2.0:
- resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==}
+ '@vueuse/core@11.2.0(vue@3.5.12(typescript@5.6.3))':
+ dependencies:
+ '@types/web-bluetooth': 0.0.20
+ '@vueuse/metadata': 11.2.0
+ '@vueuse/shared': 11.2.0(vue@3.5.12(typescript@5.6.3))
+ vue-demi: 0.14.10(vue@3.5.12(typescript@5.6.3))
+ transitivePeerDependencies:
+ - '@vue/composition-api'
+ - vue
- /jsonfile@4.0.0:
- resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==}
+ '@vueuse/integrations@11.2.0(focus-trap@7.6.1)(vue@3.5.12(typescript@5.6.3))':
+ dependencies:
+ '@vueuse/core': 11.2.0(vue@3.5.12(typescript@5.6.3))
+ '@vueuse/shared': 11.2.0(vue@3.5.12(typescript@5.6.3))
+ vue-demi: 0.14.10(vue@3.5.12(typescript@5.6.3))
optionalDependencies:
- graceful-fs: 4.2.10
- dev: true
+ focus-trap: 7.6.1
+ transitivePeerDependencies:
+ - '@vue/composition-api'
+ - vue
- /jsonfile@6.1.0:
- resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
+ '@vueuse/metadata@11.2.0': {}
+
+ '@vueuse/shared@11.2.0(vue@3.5.12(typescript@5.6.3))':
dependencies:
- universalify: 2.0.0
- optionalDependencies:
- graceful-fs: 4.2.10
- dev: true
+ vue-demi: 0.14.10(vue@3.5.12(typescript@5.6.3))
+ transitivePeerDependencies:
+ - '@vue/composition-api'
+ - vue
- /jsonparse@1.3.1:
- resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
- engines: {'0': node >= 0.2.0}
- dev: true
+ JSONStream@1.3.5:
+ dependencies:
+ jsonparse: 1.3.1
+ through: 2.3.8
- /jsx-ast-utils@3.3.3:
- resolution: {integrity: sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==}
- engines: {node: '>=4.0'}
+ acorn-jsx@5.3.2(acorn@8.14.0):
dependencies:
- array-includes: 3.1.6
- object.assign: 4.1.4
- dev: false
+ acorn: 8.14.0
- /kind-of@6.0.3:
- resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
- engines: {node: '>=0.10.0'}
+ acorn@8.14.0: {}
- /kleur@3.0.3:
- resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==}
- engines: {node: '>=6'}
- dev: false
+ agent-base@7.1.1:
+ dependencies:
+ debug: 4.3.7
+ transitivePeerDependencies:
+ - supports-color
- /kleur@4.1.5:
- resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
- engines: {node: '>=6'}
- dev: false
+ ajv-draft-04@1.0.0(ajv@8.13.0):
+ optionalDependencies:
+ ajv: 8.13.0
- /kolorist@1.7.0:
- resolution: {integrity: sha512-ymToLHqL02udwVdbkowNpzjFd6UzozMtshPQKVi5k1EjKRqKqBrOnE9QbLEb0/pV76SAiIT13hdL8R6suc+f3g==}
- dev: true
+ ajv-formats@3.0.1(ajv@8.13.0):
+ optionalDependencies:
+ ajv: 8.13.0
- /language-subtag-registry@0.3.22:
- resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==}
- dev: false
+ ajv@6.12.6:
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-json-stable-stringify: 2.1.0
+ json-schema-traverse: 0.4.1
+ uri-js: 4.4.1
- /language-tags@1.0.5:
- resolution: {integrity: sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==}
+ ajv@8.12.0:
dependencies:
- language-subtag-registry: 0.3.22
- dev: false
+ fast-deep-equal: 3.1.3
+ json-schema-traverse: 1.0.0
+ require-from-string: 2.0.2
+ uri-js: 4.4.1
- /levn@0.3.0:
- resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==}
- engines: {node: '>= 0.8.0'}
+ ajv@8.13.0:
dependencies:
- prelude-ls: 1.1.2
- type-check: 0.3.2
- dev: true
+ fast-deep-equal: 3.1.3
+ json-schema-traverse: 1.0.0
+ require-from-string: 2.0.2
+ uri-js: 4.4.1
- /levn@0.4.1:
- resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
- engines: {node: '>= 0.8.0'}
+ algoliasearch@5.13.0:
dependencies:
- prelude-ls: 1.2.1
- type-check: 0.4.0
+ '@algolia/client-abtesting': 5.13.0
+ '@algolia/client-analytics': 5.13.0
+ '@algolia/client-common': 5.13.0
+ '@algolia/client-insights': 5.13.0
+ '@algolia/client-personalization': 5.13.0
+ '@algolia/client-query-suggestions': 5.13.0
+ '@algolia/client-search': 5.13.0
+ '@algolia/ingestion': 1.13.0
+ '@algolia/monitoring': 1.13.0
+ '@algolia/recommend': 5.13.0
+ '@algolia/requester-browser-xhr': 5.13.0
+ '@algolia/requester-fetch': 5.13.0
+ '@algolia/requester-node-http': 5.13.0
- /lilconfig@2.0.6:
- resolution: {integrity: sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==}
- engines: {node: '>=10'}
+ ansi-escapes@7.0.0:
+ dependencies:
+ environment: 1.1.0
- /lines-and-columns@1.2.4:
- resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
- dev: true
+ ansi-regex@5.0.1: {}
- /lint-staged@13.1.0:
- resolution: {integrity: sha512-pn/sR8IrcF/T0vpWLilih8jmVouMlxqXxKuAojmbiGX5n/gDnz+abdPptlj0vYnbfE0SQNl3CY/HwtM0+yfOVQ==}
- engines: {node: ^14.13.1 || >=16.0.0}
- hasBin: true
- dependencies:
- cli-truncate: 3.1.0
- colorette: 2.0.19
- commander: 9.5.0
- debug: 4.3.4
- execa: 6.1.0
- lilconfig: 2.0.6
- listr2: 5.0.7
- micromatch: 4.0.5
- normalize-path: 3.0.0
- object-inspect: 1.12.3
- pidtree: 0.6.0
- string-argv: 0.3.1
- yaml: 2.2.1
- transitivePeerDependencies:
- - enquirer
- - supports-color
- dev: true
+ ansi-regex@6.1.0: {}
- /listr2@5.0.7:
- resolution: {integrity: sha512-MD+qXHPmtivrHIDRwPYdfNkrzqDiuaKU/rfBcec3WMyMF3xylQj3jMq344OtvQxz7zaCFViRAeqlr2AFhPvXHw==}
- engines: {node: ^14.13.1 || >=16.0.0}
- peerDependencies:
- enquirer: '>= 2.3.0 < 3'
- peerDependenciesMeta:
- enquirer:
- optional: true
+ ansi-styles@4.3.0:
dependencies:
- cli-truncate: 2.1.0
- colorette: 2.0.19
- log-update: 4.0.0
- p-map: 4.0.0
- rfdc: 1.3.0
- rxjs: 7.8.0
- through: 2.3.8
- wrap-ansi: 7.0.0
- dev: true
+ color-convert: 2.0.1
- /load-yaml-file@0.2.0:
- resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==}
- engines: {node: '>=6'}
- dependencies:
- graceful-fs: 4.2.10
- js-yaml: 3.14.1
- pify: 4.0.1
- strip-bom: 3.0.0
- dev: false
+ ansi-styles@5.2.0: {}
- /local-pkg@0.4.3:
- resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==}
- engines: {node: '>=14'}
- dev: true
+ ansi-styles@6.2.1: {}
- /locate-path@5.0.0:
- resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
- engines: {node: '>=8'}
+ argparse@1.0.10:
dependencies:
- p-locate: 4.1.0
+ sprintf-js: 1.0.3
- /locate-path@6.0.0:
- resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
- engines: {node: '>=10'}
+ argparse@2.0.1: {}
+
+ aria-query@5.3.0:
dependencies:
- p-locate: 5.0.0
+ dequal: 2.0.3
- /lodash.camelcase@4.3.0:
- resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==}
- dev: true
+ array-ify@1.0.0: {}
- /lodash.castarray@4.4.0:
- resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==}
- dev: false
+ assertion-error@2.0.1: {}
- /lodash.get@4.4.2:
- resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==}
- dev: true
+ asynckit@0.4.0: {}
- /lodash.isequal@4.5.0:
- resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==}
- dev: true
+ balanced-match@1.0.2: {}
- /lodash.isfunction@3.0.9:
- resolution: {integrity: sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==}
- dev: true
+ birpc@0.2.19: {}
- /lodash.isplainobject@4.0.6:
- resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==}
+ brace-expansion@1.1.11:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
- /lodash.kebabcase@4.1.1:
- resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==}
- dev: true
+ brace-expansion@2.0.1:
+ dependencies:
+ balanced-match: 1.0.2
- /lodash.merge@4.6.2:
- resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
- /lodash.mergewith@4.6.2:
- resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==}
- dev: true
+ cac@6.7.14: {}
- /lodash.snakecase@4.1.1:
- resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==}
- dev: true
+ callsites@3.1.0: {}
- /lodash.startcase@4.4.0:
- resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==}
- dev: true
+ ccount@2.0.1: {}
- /lodash.uniq@4.5.0:
- resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==}
- dev: true
+ chai@5.1.2:
+ dependencies:
+ assertion-error: 2.0.1
+ check-error: 2.1.1
+ deep-eql: 5.0.2
+ loupe: 3.1.2
+ pathval: 2.0.0
- /lodash.upperfirst@4.3.1:
- resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==}
- dev: true
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
- /lodash@4.17.21:
- resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
+ chalk@5.3.0: {}
- /log-symbols@5.1.0:
- resolution: {integrity: sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==}
- engines: {node: '>=12'}
- dependencies:
- chalk: 5.2.0
- is-unicode-supported: 1.3.0
- dev: false
+ character-entities-html4@2.1.0: {}
- /log-update@4.0.0:
- resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==}
- engines: {node: '>=10'}
- dependencies:
- ansi-escapes: 4.3.2
- cli-cursor: 3.1.0
- slice-ansi: 4.0.0
- wrap-ansi: 6.2.0
- dev: true
+ character-entities-legacy@3.0.0: {}
- /longest-streak@3.1.0:
- resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==}
- dev: false
+ check-error@2.1.1: {}
- /loose-envify@1.4.0:
- resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
- hasBin: true
+ cli-cursor@5.0.0:
dependencies:
- js-tokens: 4.0.0
- dev: true
+ restore-cursor: 5.1.0
- /loupe@2.3.6:
- resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==}
+ cli-truncate@4.0.0:
dependencies:
- get-func-name: 2.0.0
- dev: true
+ slice-ansi: 5.0.0
+ string-width: 7.2.0
- /lru-cache@5.1.1:
- resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
+ cliui@8.0.1:
dependencies:
- yallist: 3.1.1
- dev: false
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
- /lru-cache@6.0.0:
- resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
- engines: {node: '>=10'}
+ color-convert@2.0.1:
dependencies:
- yallist: 4.0.0
+ color-name: 1.1.4
- /lz-string@1.4.4:
- resolution: {integrity: sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==}
- hasBin: true
- dev: true
+ color-name@1.1.4: {}
- /magic-string@0.27.0:
- resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==}
- engines: {node: '>=12'}
- dependencies:
- '@jridgewell/sourcemap-codec': 1.4.14
- dev: false
+ colorette@2.0.20: {}
- /make-dir@3.1.0:
- resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==}
- engines: {node: '>=8'}
+ combined-stream@1.0.8:
dependencies:
- semver: 6.3.0
- dev: true
-
- /make-error@1.3.6:
- resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
+ delayed-stream: 1.0.0
- /map-obj@1.0.1:
- resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==}
- engines: {node: '>=0.10.0'}
- dev: true
+ comma-separated-tokens@2.0.3: {}
- /map-obj@4.3.0:
- resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==}
- engines: {node: '>=8'}
- dev: true
-
- /markdown-table@3.0.3:
- resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==}
- dev: false
-
- /mdast-util-definitions@5.1.2:
- resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==}
- dependencies:
- '@types/mdast': 3.0.10
- '@types/unist': 2.0.6
- unist-util-visit: 4.1.2
- dev: false
-
- /mdast-util-find-and-replace@2.2.2:
- resolution: {integrity: sha512-MTtdFRz/eMDHXzeK6W3dO7mXUlF82Gom4y0oOgvHhh/HXZAGvIQDUvQ0SuUx+j2tv44b8xTHOm8K/9OoRFnXKw==}
- dependencies:
- '@types/mdast': 3.0.10
- escape-string-regexp: 5.0.0
- unist-util-is: 5.2.0
- unist-util-visit-parents: 5.1.3
- dev: false
-
- /mdast-util-from-markdown@1.3.0:
- resolution: {integrity: sha512-HN3W1gRIuN/ZW295c7zi7g9lVBllMgZE40RxCX37wrTPWXCWtpvOZdfnuK+1WNpvZje6XuJeI3Wnb4TJEUem+g==}
- dependencies:
- '@types/mdast': 3.0.10
- '@types/unist': 2.0.6
- decode-named-character-reference: 1.0.2
- mdast-util-to-string: 3.1.1
- micromark: 3.1.0
- micromark-util-decode-numeric-character-reference: 1.0.0
- micromark-util-decode-string: 1.0.2
- micromark-util-normalize-identifier: 1.0.0
- micromark-util-symbol: 1.0.1
- micromark-util-types: 1.0.2
- unist-util-stringify-position: 3.0.3
- uvu: 0.5.6
- transitivePeerDependencies:
- - supports-color
- dev: false
+ commander@12.1.0: {}
- /mdast-util-gfm-autolink-literal@1.0.3:
- resolution: {integrity: sha512-My8KJ57FYEy2W2LyNom4n3E7hKTuQk/0SES0u16tjA9Z3oFkF4RrC/hPAPgjlSpezsOvI8ObcXcElo92wn5IGA==}
+ compare-func@2.0.0:
dependencies:
- '@types/mdast': 3.0.10
- ccount: 2.0.1
- mdast-util-find-and-replace: 2.2.2
- micromark-util-character: 1.1.0
- dev: false
+ array-ify: 1.0.0
+ dot-prop: 5.3.0
- /mdast-util-gfm-footnote@1.0.2:
- resolution: {integrity: sha512-56D19KOGbE00uKVj3sgIykpwKL179QsVFwx/DCW0u/0+URsryacI4MAdNJl0dh+u2PSsD9FtxPFbHCzJ78qJFQ==}
- dependencies:
- '@types/mdast': 3.0.10
- mdast-util-to-markdown: 1.5.0
- micromark-util-normalize-identifier: 1.0.0
- dev: false
+ compare-versions@6.1.1: {}
+
+ computeds@0.0.1: {}
+
+ concat-map@0.0.1: {}
- /mdast-util-gfm-strikethrough@1.0.3:
- resolution: {integrity: sha512-DAPhYzTYrRcXdMjUtUjKvW9z/FNAMTdU0ORyMcbmkwYNbKocDpdk+PX1L1dQgOID/+vVs1uBQ7ElrBQfZ0cuiQ==}
+ confbox@0.1.8: {}
+
+ conventional-changelog-angular@7.0.0:
dependencies:
- '@types/mdast': 3.0.10
- mdast-util-to-markdown: 1.5.0
- dev: false
+ compare-func: 2.0.0
- /mdast-util-gfm-table@1.0.7:
- resolution: {integrity: sha512-jjcpmNnQvrmN5Vx7y7lEc2iIOEytYv7rTvu+MeyAsSHTASGCCRA79Igg2uKssgOs1i1po8s3plW0sTu1wkkLGg==}
+ conventional-changelog-conventionalcommits@7.0.2:
dependencies:
- '@types/mdast': 3.0.10
- markdown-table: 3.0.3
- mdast-util-from-markdown: 1.3.0
- mdast-util-to-markdown: 1.5.0
- transitivePeerDependencies:
- - supports-color
- dev: false
+ compare-func: 2.0.0
- /mdast-util-gfm-task-list-item@1.0.2:
- resolution: {integrity: sha512-PFTA1gzfp1B1UaiJVyhJZA1rm0+Tzn690frc/L8vNX1Jop4STZgOE6bxUhnzdVSB+vm2GU1tIsuQcA9bxTQpMQ==}
+ conventional-commits-parser@5.0.0:
dependencies:
- '@types/mdast': 3.0.10
- mdast-util-to-markdown: 1.5.0
- dev: false
+ JSONStream: 1.3.5
+ is-text-path: 2.0.0
+ meow: 12.1.1
+ split2: 4.2.0
- /mdast-util-gfm@2.0.2:
- resolution: {integrity: sha512-qvZ608nBppZ4icQlhQQIAdc6S3Ffj9RGmzwUKUWuEICFnd1LVkN3EktF7ZHAgfcEdvZB5owU9tQgt99e2TlLjg==}
+ copy-anything@3.0.5:
dependencies:
- mdast-util-from-markdown: 1.3.0
- mdast-util-gfm-autolink-literal: 1.0.3
- mdast-util-gfm-footnote: 1.0.2
- mdast-util-gfm-strikethrough: 1.0.3
- mdast-util-gfm-table: 1.0.7
- mdast-util-gfm-task-list-item: 1.0.2
- mdast-util-to-markdown: 1.5.0
- transitivePeerDependencies:
- - supports-color
- dev: false
+ is-what: 4.1.16
- /mdast-util-phrasing@3.0.1:
- resolution: {integrity: sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==}
+ cosmiconfig-typescript-loader@5.1.0(@types/node@22.9.0)(cosmiconfig@9.0.0(typescript@5.6.3))(typescript@5.6.3):
dependencies:
- '@types/mdast': 3.0.10
- unist-util-is: 5.2.0
- dev: false
+ '@types/node': 22.9.0
+ cosmiconfig: 9.0.0(typescript@5.6.3)
+ jiti: 1.21.6
+ typescript: 5.6.3
- /mdast-util-to-hast@12.3.0:
- resolution: {integrity: sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==}
+ cosmiconfig@9.0.0(typescript@5.6.3):
dependencies:
- '@types/hast': 2.3.4
- '@types/mdast': 3.0.10
- mdast-util-definitions: 5.1.2
- micromark-util-sanitize-uri: 1.1.0
- trim-lines: 3.0.1
- unist-util-generated: 2.0.1
- unist-util-position: 4.0.4
- unist-util-visit: 4.1.2
- dev: false
-
- /mdast-util-to-markdown@1.5.0:
- resolution: {integrity: sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==}
- dependencies:
- '@types/mdast': 3.0.10
- '@types/unist': 2.0.6
- longest-streak: 3.1.0
- mdast-util-phrasing: 3.0.1
- mdast-util-to-string: 3.1.1
- micromark-util-decode-string: 1.0.2
- unist-util-visit: 4.1.2
- zwitch: 2.0.4
- dev: false
+ env-paths: 2.2.1
+ import-fresh: 3.3.0
+ js-yaml: 4.1.0
+ parse-json: 5.2.0
+ optionalDependencies:
+ typescript: 5.6.3
- /mdast-util-to-string@3.1.1:
- resolution: {integrity: sha512-tGvhT94e+cVnQt8JWE9/b3cUQZWS732TJxXHktvP+BYo62PpYD53Ls/6cC60rW21dW+txxiM4zMdc6abASvZKA==}
+ cross-spawn@7.0.5:
dependencies:
- '@types/mdast': 3.0.10
- dev: false
+ path-key: 3.1.1
+ shebang-command: 2.0.0
+ which: 2.0.2
- /meow@8.1.2:
- resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==}
- engines: {node: '>=10'}
+ cssstyle@4.1.0:
dependencies:
- '@types/minimist': 1.2.2
- camelcase-keys: 6.2.2
- decamelize-keys: 1.1.1
- hard-rejection: 2.1.0
- minimist-options: 4.1.0
- normalize-package-data: 3.0.3
- read-pkg-up: 7.0.1
- redent: 3.0.0
- trim-newlines: 3.0.1
- type-fest: 0.18.1
- yargs-parser: 20.2.9
- dev: true
-
- /merge-stream@2.0.0:
- resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
+ rrweb-cssom: 0.7.1
- /merge2@1.4.1:
- resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
- engines: {node: '>= 8'}
+ csstype@3.1.3: {}
- /micromark-core-commonmark@1.0.6:
- resolution: {integrity: sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA==}
- dependencies:
- decode-named-character-reference: 1.0.2
- micromark-factory-destination: 1.0.0
- micromark-factory-label: 1.0.2
- micromark-factory-space: 1.0.0
- micromark-factory-title: 1.0.2
- micromark-factory-whitespace: 1.0.0
- micromark-util-character: 1.1.0
- micromark-util-chunked: 1.0.0
- micromark-util-classify-character: 1.0.0
- micromark-util-html-tag-name: 1.1.0
- micromark-util-normalize-identifier: 1.0.0
- micromark-util-resolve-all: 1.0.0
- micromark-util-subtokenize: 1.0.2
- micromark-util-symbol: 1.0.1
- micromark-util-types: 1.0.2
- uvu: 0.5.6
- dev: false
-
- /micromark-extension-gfm-autolink-literal@1.0.3:
- resolution: {integrity: sha512-i3dmvU0htawfWED8aHMMAzAVp/F0Z+0bPh3YrbTPPL1v4YAlCZpy5rBO5p0LPYiZo0zFVkoYh7vDU7yQSiCMjg==}
- dependencies:
- micromark-util-character: 1.1.0
- micromark-util-sanitize-uri: 1.1.0
- micromark-util-symbol: 1.0.1
- micromark-util-types: 1.0.2
- uvu: 0.5.6
- dev: false
-
- /micromark-extension-gfm-footnote@1.0.4:
- resolution: {integrity: sha512-E/fmPmDqLiMUP8mLJ8NbJWJ4bTw6tS+FEQS8CcuDtZpILuOb2kjLqPEeAePF1djXROHXChM/wPJw0iS4kHCcIg==}
- dependencies:
- micromark-core-commonmark: 1.0.6
- micromark-factory-space: 1.0.0
- micromark-util-character: 1.1.0
- micromark-util-normalize-identifier: 1.0.0
- micromark-util-sanitize-uri: 1.1.0
- micromark-util-symbol: 1.0.1
- micromark-util-types: 1.0.2
- uvu: 0.5.6
- dev: false
-
- /micromark-extension-gfm-strikethrough@1.0.4:
- resolution: {integrity: sha512-/vjHU/lalmjZCT5xt7CcHVJGq8sYRm80z24qAKXzaHzem/xsDYb2yLL+NNVbYvmpLx3O7SYPuGL5pzusL9CLIQ==}
- dependencies:
- micromark-util-chunked: 1.0.0
- micromark-util-classify-character: 1.0.0
- micromark-util-resolve-all: 1.0.0
- micromark-util-symbol: 1.0.1
- micromark-util-types: 1.0.2
- uvu: 0.5.6
- dev: false
-
- /micromark-extension-gfm-table@1.0.5:
- resolution: {integrity: sha512-xAZ8J1X9W9K3JTJTUL7G6wSKhp2ZYHrFk5qJgY/4B33scJzE2kpfRL6oiw/veJTbt7jiM/1rngLlOKPWr1G+vg==}
- dependencies:
- micromark-factory-space: 1.0.0
- micromark-util-character: 1.1.0
- micromark-util-symbol: 1.0.1
- micromark-util-types: 1.0.2
- uvu: 0.5.6
- dev: false
-
- /micromark-extension-gfm-tagfilter@1.0.1:
- resolution: {integrity: sha512-Ty6psLAcAjboRa/UKUbbUcwjVAv5plxmpUTy2XC/3nJFL37eHej8jrHrRzkqcpipJliuBH30DTs7+3wqNcQUVA==}
- dependencies:
- micromark-util-types: 1.0.2
- dev: false
-
- /micromark-extension-gfm-task-list-item@1.0.3:
- resolution: {integrity: sha512-PpysK2S1Q/5VXi72IIapbi/jliaiOFzv7THH4amwXeYXLq3l1uo8/2Be0Ac1rEwK20MQEsGH2ltAZLNY2KI/0Q==}
- dependencies:
- micromark-factory-space: 1.0.0
- micromark-util-character: 1.1.0
- micromark-util-symbol: 1.0.1
- micromark-util-types: 1.0.2
- uvu: 0.5.6
- dev: false
-
- /micromark-extension-gfm@2.0.1:
- resolution: {integrity: sha512-p2sGjajLa0iYiGQdT0oelahRYtMWvLjy8J9LOCxzIQsllMCGLbsLW+Nc+N4vi02jcRJvedVJ68cjelKIO6bpDA==}
- dependencies:
- micromark-extension-gfm-autolink-literal: 1.0.3
- micromark-extension-gfm-footnote: 1.0.4
- micromark-extension-gfm-strikethrough: 1.0.4
- micromark-extension-gfm-table: 1.0.5
- micromark-extension-gfm-tagfilter: 1.0.1
- micromark-extension-gfm-task-list-item: 1.0.3
- micromark-util-combine-extensions: 1.0.0
- micromark-util-types: 1.0.2
- dev: false
-
- /micromark-factory-destination@1.0.0:
- resolution: {integrity: sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==}
- dependencies:
- micromark-util-character: 1.1.0
- micromark-util-symbol: 1.0.1
- micromark-util-types: 1.0.2
- dev: false
-
- /micromark-factory-label@1.0.2:
- resolution: {integrity: sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg==}
- dependencies:
- micromark-util-character: 1.1.0
- micromark-util-symbol: 1.0.1
- micromark-util-types: 1.0.2
- uvu: 0.5.6
- dev: false
-
- /micromark-factory-space@1.0.0:
- resolution: {integrity: sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==}
- dependencies:
- micromark-util-character: 1.1.0
- micromark-util-types: 1.0.2
- dev: false
-
- /micromark-factory-title@1.0.2:
- resolution: {integrity: sha512-zily+Nr4yFqgMGRKLpTVsNl5L4PMu485fGFDOQJQBl2NFpjGte1e86zC0da93wf97jrc4+2G2GQudFMHn3IX+A==}
- dependencies:
- micromark-factory-space: 1.0.0
- micromark-util-character: 1.1.0
- micromark-util-symbol: 1.0.1
- micromark-util-types: 1.0.2
- uvu: 0.5.6
- dev: false
-
- /micromark-factory-whitespace@1.0.0:
- resolution: {integrity: sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==}
- dependencies:
- micromark-factory-space: 1.0.0
- micromark-util-character: 1.1.0
- micromark-util-symbol: 1.0.1
- micromark-util-types: 1.0.2
- dev: false
-
- /micromark-util-character@1.1.0:
- resolution: {integrity: sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==}
- dependencies:
- micromark-util-symbol: 1.0.1
- micromark-util-types: 1.0.2
- dev: false
-
- /micromark-util-chunked@1.0.0:
- resolution: {integrity: sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==}
- dependencies:
- micromark-util-symbol: 1.0.1
- dev: false
-
- /micromark-util-classify-character@1.0.0:
- resolution: {integrity: sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==}
- dependencies:
- micromark-util-character: 1.1.0
- micromark-util-symbol: 1.0.1
- micromark-util-types: 1.0.2
- dev: false
-
- /micromark-util-combine-extensions@1.0.0:
- resolution: {integrity: sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==}
- dependencies:
- micromark-util-chunked: 1.0.0
- micromark-util-types: 1.0.2
- dev: false
-
- /micromark-util-decode-numeric-character-reference@1.0.0:
- resolution: {integrity: sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==}
- dependencies:
- micromark-util-symbol: 1.0.1
- dev: false
-
- /micromark-util-decode-string@1.0.2:
- resolution: {integrity: sha512-DLT5Ho02qr6QWVNYbRZ3RYOSSWWFuH3tJexd3dgN1odEuPNxCngTCXJum7+ViRAd9BbdxCvMToPOD/IvVhzG6Q==}
- dependencies:
- decode-named-character-reference: 1.0.2
- micromark-util-character: 1.1.0
- micromark-util-decode-numeric-character-reference: 1.0.0
- micromark-util-symbol: 1.0.1
- dev: false
-
- /micromark-util-encode@1.0.1:
- resolution: {integrity: sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA==}
- dev: false
-
- /micromark-util-html-tag-name@1.1.0:
- resolution: {integrity: sha512-BKlClMmYROy9UiV03SwNmckkjn8QHVaWkqoAqzivabvdGcwNGMMMH/5szAnywmsTBUzDsU57/mFi0sp4BQO6dA==}
- dev: false
-
- /micromark-util-normalize-identifier@1.0.0:
- resolution: {integrity: sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==}
- dependencies:
- micromark-util-symbol: 1.0.1
- dev: false
-
- /micromark-util-resolve-all@1.0.0:
- resolution: {integrity: sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==}
- dependencies:
- micromark-util-types: 1.0.2
- dev: false
-
- /micromark-util-sanitize-uri@1.1.0:
- resolution: {integrity: sha512-RoxtuSCX6sUNtxhbmsEFQfWzs8VN7cTctmBPvYivo98xb/kDEoTCtJQX5wyzIYEmk/lvNFTat4hL8oW0KndFpg==}
- dependencies:
- micromark-util-character: 1.1.0
- micromark-util-encode: 1.0.1
- micromark-util-symbol: 1.0.1
- dev: false
-
- /micromark-util-subtokenize@1.0.2:
- resolution: {integrity: sha512-d90uqCnXp/cy4G881Ub4psE57Sf8YD0pim9QdjCRNjfas2M1u6Lbt+XZK9gnHL2XFhnozZiEdCa9CNfXSfQ6xA==}
- dependencies:
- micromark-util-chunked: 1.0.0
- micromark-util-symbol: 1.0.1
- micromark-util-types: 1.0.2
- uvu: 0.5.6
- dev: false
-
- /micromark-util-symbol@1.0.1:
- resolution: {integrity: sha512-oKDEMK2u5qqAptasDAwWDXq0tG9AssVwAx3E9bBF3t/shRIGsWIRG+cGafs2p/SnDSOecnt6hZPCE2o6lHfFmQ==}
- dev: false
-
- /micromark-util-types@1.0.2:
- resolution: {integrity: sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w==}
- dev: false
-
- /micromark@3.1.0:
- resolution: {integrity: sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==}
- dependencies:
- '@types/debug': 4.1.7
- debug: 4.3.4
- decode-named-character-reference: 1.0.2
- micromark-core-commonmark: 1.0.6
- micromark-factory-space: 1.0.0
- micromark-util-character: 1.1.0
- micromark-util-chunked: 1.0.0
- micromark-util-combine-extensions: 1.0.0
- micromark-util-decode-numeric-character-reference: 1.0.0
- micromark-util-encode: 1.0.1
- micromark-util-normalize-identifier: 1.0.0
- micromark-util-resolve-all: 1.0.0
- micromark-util-sanitize-uri: 1.1.0
- micromark-util-subtokenize: 1.0.2
- micromark-util-symbol: 1.0.1
- micromark-util-types: 1.0.2
- uvu: 0.5.6
- transitivePeerDependencies:
- - supports-color
- dev: false
+ dargs@8.1.0: {}
- /micromatch@4.0.5:
- resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
- engines: {node: '>=8.6'}
+ data-urls@5.0.0:
dependencies:
- braces: 3.0.2
- picomatch: 2.3.1
+ whatwg-mimetype: 4.0.0
+ whatwg-url: 14.0.0
- /mime-db@1.52.0:
- resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
- engines: {node: '>= 0.6'}
- dev: true
+ de-indent@1.0.2: {}
- /mime-types@2.1.35:
- resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
- engines: {node: '>= 0.6'}
+ debug@4.3.7:
dependencies:
- mime-db: 1.52.0
- dev: true
-
- /mime@3.0.0:
- resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==}
- engines: {node: '>=10.0.0'}
- hasBin: true
- dev: false
+ ms: 2.1.3
- /mimic-fn@2.1.0:
- resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
- engines: {node: '>=6'}
+ decimal.js@10.4.3: {}
- /mimic-fn@4.0.0:
- resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==}
- engines: {node: '>=12'}
+ deep-eql@5.0.2: {}
- /min-indent@1.0.1:
- resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
- engines: {node: '>=4'}
- dev: true
+ deep-is@0.1.4: {}
- /minimatch@3.1.2:
- resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
- dependencies:
- brace-expansion: 1.1.11
+ delayed-stream@1.0.0: {}
- /minimatch@5.1.6:
- resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
- engines: {node: '>=10'}
- dependencies:
- brace-expansion: 2.0.1
- dev: true
+ dequal@2.0.3: {}
- /minimist-options@4.1.0:
- resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==}
- engines: {node: '>= 6'}
+ devlop@1.1.0:
dependencies:
- arrify: 1.0.1
- is-plain-obj: 1.1.0
- kind-of: 6.0.3
- dev: true
-
- /minimist@1.2.7:
- resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==}
+ dequal: 2.0.3
- /mkdirp@1.0.4:
- resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==}
- engines: {node: '>=10'}
- hasBin: true
- dev: true
+ dom-accessibility-api@0.5.16: {}
- /mlly@1.1.0:
- resolution: {integrity: sha512-cwzBrBfwGC1gYJyfcy8TcZU1f+dbH/T+TuOhtYP2wLv/Fb51/uV7HJQfBPtEupZ2ORLRU1EKFS/QfS3eo9+kBQ==}
+ dot-prop@5.3.0:
dependencies:
- acorn: 8.8.2
- pathe: 1.1.0
- pkg-types: 1.0.1
- ufo: 1.0.1
- dev: true
+ is-obj: 2.0.0
- /mri@1.2.0:
- resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
- engines: {node: '>=4'}
- dev: false
+ eastasianwidth@0.2.0: {}
- /ms@2.1.2:
- resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+ emoji-regex@10.4.0: {}
- /nanoid@3.3.4:
- resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==}
- engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
- hasBin: true
+ emoji-regex@8.0.0: {}
- /natural-compare-lite@1.4.0:
- resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==}
- dev: false
+ emoji-regex@9.2.2: {}
- /natural-compare@1.4.0:
- resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
+ entities@4.5.0: {}
- /nlcst-to-string@3.1.1:
- resolution: {integrity: sha512-63mVyqaqt0cmn2VcI2aH6kxe1rLAmSROqHMA0i4qqg1tidkfExgpb0FGMikMCn86mw5dFtBtEANfmSSK7TjNHw==}
- dependencies:
- '@types/nlcst': 1.0.0
- dev: false
+ env-paths@2.2.1: {}
- /node-releases@2.0.9:
- resolution: {integrity: sha512-2xfmOrRkGogbTK9R6Leda0DGiXeY3p2NJpy4+gNCffdUvV6mdEJnaDEic1i3Ec2djAo8jWYoJMR5PB0MSMpxUA==}
- dev: false
+ environment@1.1.0: {}
- /normalize-package-data@2.5.0:
- resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==}
+ error-ex@1.3.2:
dependencies:
- hosted-git-info: 2.8.9
- resolve: 1.22.1
- semver: 5.7.2
- validate-npm-package-license: 3.0.4
- dev: true
+ is-arrayish: 0.2.1
- /normalize-package-data@3.0.3:
- resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==}
- engines: {node: '>=10'}
+ esbuild@0.21.5:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.21.5
+ '@esbuild/android-arm': 0.21.5
+ '@esbuild/android-arm64': 0.21.5
+ '@esbuild/android-x64': 0.21.5
+ '@esbuild/darwin-arm64': 0.21.5
+ '@esbuild/darwin-x64': 0.21.5
+ '@esbuild/freebsd-arm64': 0.21.5
+ '@esbuild/freebsd-x64': 0.21.5
+ '@esbuild/linux-arm': 0.21.5
+ '@esbuild/linux-arm64': 0.21.5
+ '@esbuild/linux-ia32': 0.21.5
+ '@esbuild/linux-loong64': 0.21.5
+ '@esbuild/linux-mips64el': 0.21.5
+ '@esbuild/linux-ppc64': 0.21.5
+ '@esbuild/linux-riscv64': 0.21.5
+ '@esbuild/linux-s390x': 0.21.5
+ '@esbuild/linux-x64': 0.21.5
+ '@esbuild/netbsd-x64': 0.21.5
+ '@esbuild/openbsd-x64': 0.21.5
+ '@esbuild/sunos-x64': 0.21.5
+ '@esbuild/win32-arm64': 0.21.5
+ '@esbuild/win32-ia32': 0.21.5
+ '@esbuild/win32-x64': 0.21.5
+
+ escalade@3.2.0: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eslint-config-prettier@9.1.0(eslint@9.14.0(jiti@1.21.6)):
+ dependencies:
+ eslint: 9.14.0(jiti@1.21.6)
+
+ eslint-scope@8.2.0:
dependencies:
- hosted-git-info: 4.1.0
- is-core-module: 2.11.0
- semver: 7.3.8
- validate-npm-package-license: 3.0.4
- dev: true
+ esrecurse: 4.3.0
+ estraverse: 5.3.0
- /normalize-path@3.0.0:
- resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
- engines: {node: '>=0.10.0'}
+ eslint-visitor-keys@3.4.3: {}
- /normalize-range@0.1.2:
- resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
- engines: {node: '>=0.10.0'}
- dev: false
+ eslint-visitor-keys@4.2.0: {}
- /npm-run-path@4.0.1:
- resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
- engines: {node: '>=8'}
+ eslint@9.14.0(jiti@1.21.6):
dependencies:
- path-key: 3.1.1
- dev: true
+ '@eslint-community/eslint-utils': 4.4.1(eslint@9.14.0(jiti@1.21.6))
+ '@eslint-community/regexpp': 4.12.1
+ '@eslint/config-array': 0.18.0
+ '@eslint/core': 0.7.0
+ '@eslint/eslintrc': 3.1.0
+ '@eslint/js': 9.14.0
+ '@eslint/plugin-kit': 0.2.2
+ '@humanfs/node': 0.16.6
+ '@humanwhocodes/module-importer': 1.0.1
+ '@humanwhocodes/retry': 0.4.1
+ '@types/estree': 1.0.6
+ '@types/json-schema': 7.0.15
+ ajv: 6.12.6
+ chalk: 4.1.2
+ cross-spawn: 7.0.5
+ debug: 4.3.7
+ escape-string-regexp: 4.0.0
+ eslint-scope: 8.2.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: 8.0.0
+ find-up: 5.0.0
+ glob-parent: 6.0.2
+ ignore: 5.3.2
+ imurmurhash: 0.1.4
+ is-glob: 4.0.3
+ json-stable-stringify-without-jsonify: 1.0.1
+ lodash.merge: 4.6.2
+ minimatch: 3.1.2
+ natural-compare: 1.4.0
+ optionator: 0.9.4
+ text-table: 0.2.0
+ optionalDependencies:
+ jiti: 1.21.6
+ transitivePeerDependencies:
+ - supports-color
- /npm-run-path@5.1.0:
- resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ espree@10.3.0:
dependencies:
- path-key: 4.0.0
-
- /nwsapi@2.2.2:
- resolution: {integrity: sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==}
- dev: true
+ acorn: 8.14.0
+ acorn-jsx: 5.3.2(acorn@8.14.0)
+ eslint-visitor-keys: 4.2.0
- /object-hash@3.0.0:
- resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
- engines: {node: '>= 6'}
- dev: false
-
- /object-inspect@1.12.3:
- resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==}
+ esquery@1.6.0:
+ dependencies:
+ estraverse: 5.3.0
- /object-is@1.1.5:
- resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==}
- engines: {node: '>= 0.4'}
+ esrecurse@4.3.0:
dependencies:
- call-bind: 1.0.2
- define-properties: 1.1.4
+ estraverse: 5.3.0
- /object-keys@1.1.1:
- resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
- engines: {node: '>= 0.4'}
+ estraverse@5.3.0: {}
- /object.assign@4.1.4:
- resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==}
- engines: {node: '>= 0.4'}
- dependencies:
- call-bind: 1.0.2
- define-properties: 1.1.4
- has-symbols: 1.0.3
- object-keys: 1.1.1
+ estree-walker@2.0.2: {}
- /object.entries@1.1.6:
- resolution: {integrity: sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==}
- engines: {node: '>= 0.4'}
+ estree-walker@3.0.3:
dependencies:
- call-bind: 1.0.2
- define-properties: 1.1.4
- es-abstract: 1.21.1
- dev: false
+ '@types/estree': 1.0.6
- /object.fromentries@2.0.6:
- resolution: {integrity: sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==}
- engines: {node: '>= 0.4'}
- dependencies:
- call-bind: 1.0.2
- define-properties: 1.1.4
- es-abstract: 1.21.1
- dev: false
+ esutils@2.0.3: {}
- /once@1.4.0:
- resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
- dependencies:
- wrappy: 1.0.2
+ eventemitter3@5.0.1: {}
- /onetime@5.1.2:
- resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
- engines: {node: '>=6'}
+ execa@8.0.1:
dependencies:
- mimic-fn: 2.1.0
+ cross-spawn: 7.0.5
+ get-stream: 8.0.1
+ human-signals: 5.0.0
+ is-stream: 3.0.0
+ merge-stream: 2.0.0
+ npm-run-path: 5.3.0
+ onetime: 6.0.0
+ signal-exit: 4.1.0
+ strip-final-newline: 3.0.0
- /onetime@6.0.0:
- resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==}
- engines: {node: '>=12'}
- dependencies:
- mimic-fn: 4.0.0
+ expect-type@1.1.0: {}
- /open@8.4.0:
- resolution: {integrity: sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==}
- engines: {node: '>=12'}
- dependencies:
- define-lazy-prop: 2.0.0
- is-docker: 2.2.1
- is-wsl: 2.2.0
- dev: false
+ fast-deep-equal@3.1.3: {}
- /optionator@0.8.3:
- resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==}
- engines: {node: '>= 0.8.0'}
- dependencies:
- deep-is: 0.1.4
- fast-levenshtein: 2.0.6
- levn: 0.3.0
- prelude-ls: 1.1.2
- type-check: 0.3.2
- word-wrap: 1.2.3
- dev: true
-
- /optionator@0.9.1:
- resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==}
- engines: {node: '>= 0.8.0'}
+ fast-glob@3.3.2:
dependencies:
- deep-is: 0.1.4
- fast-levenshtein: 2.0.6
- levn: 0.4.1
- prelude-ls: 1.2.1
- type-check: 0.4.0
- word-wrap: 1.2.3
+ '@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
- /ora@6.1.2:
- resolution: {integrity: sha512-EJQ3NiP5Xo94wJXIzAyOtSb0QEIAUu7m8t6UZ9krbz0vAJqr92JpcK/lEXg91q6B9pEGqrykkd2EQplnifDSBw==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- dependencies:
- bl: 5.1.0
- chalk: 5.2.0
- cli-cursor: 4.0.0
- cli-spinners: 2.7.0
- is-interactive: 2.0.0
- is-unicode-supported: 1.3.0
- log-symbols: 5.1.0
- strip-ansi: 7.0.1
- wcwidth: 1.0.1
- dev: false
-
- /p-limit@2.3.0:
- resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
- engines: {node: '>=6'}
+ fast-json-stable-stringify@2.1.0: {}
+
+ fast-levenshtein@2.0.6: {}
+
+ fastq@1.17.1:
dependencies:
- p-try: 2.2.0
+ reusify: 1.0.4
- /p-limit@3.1.0:
- resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
- engines: {node: '>=10'}
+ file-entry-cache@8.0.0:
dependencies:
- yocto-queue: 0.1.0
+ flat-cache: 4.0.1
- /p-limit@4.0.0:
- resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ fill-range@7.1.1:
dependencies:
- yocto-queue: 1.0.0
- dev: true
+ to-regex-range: 5.0.1
- /p-locate@4.1.0:
- resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
- engines: {node: '>=8'}
+ find-up@5.0.0:
dependencies:
- p-limit: 2.3.0
+ locate-path: 6.0.0
+ path-exists: 4.0.0
- /p-locate@5.0.0:
- resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
- engines: {node: '>=10'}
+ find-up@7.0.0:
dependencies:
- p-limit: 3.1.0
+ locate-path: 7.2.0
+ path-exists: 5.0.0
+ unicorn-magic: 0.1.0
- /p-map@4.0.0:
- resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==}
- engines: {node: '>=10'}
+ flat-cache@4.0.1:
dependencies:
- aggregate-error: 3.1.0
- dev: true
+ flatted: 3.3.1
+ keyv: 4.5.4
- /p-try@2.2.0:
- resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
- engines: {node: '>=6'}
+ flatted@3.3.1: {}
- /parent-module@1.0.1:
- resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
- engines: {node: '>=6'}
+ focus-trap@7.6.1:
dependencies:
- callsites: 3.1.0
+ tabbable: 6.2.0
- /parse-json@5.2.0:
- resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
- engines: {node: '>=8'}
+ foreground-child@3.3.0:
dependencies:
- '@babel/code-frame': 7.18.6
- error-ex: 1.3.2
- json-parse-even-better-errors: 2.3.1
- lines-and-columns: 1.2.4
- dev: true
+ cross-spawn: 7.0.5
+ signal-exit: 4.1.0
- /parse-latin@5.0.1:
- resolution: {integrity: sha512-b/K8ExXaWC9t34kKeDV8kGXBkXZ1HCSAZRYE7HR14eA1GlXX5L8iWhs8USJNhQU9q5ci413jCKF0gOyovvyRBg==}
+ form-data@4.0.1:
dependencies:
- nlcst-to-string: 3.1.1
- unist-util-modify-children: 3.1.1
- unist-util-visit-children: 2.0.2
- dev: false
-
- /parse5@6.0.1:
- resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==}
- dev: false
+ asynckit: 0.4.0
+ combined-stream: 1.0.8
+ mime-types: 2.1.35
- /parse5@7.1.2:
- resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==}
+ fs-extra@7.0.1:
dependencies:
- entities: 4.4.0
- dev: true
+ graceful-fs: 4.2.11
+ jsonfile: 4.0.0
+ universalify: 0.1.2
- /path-browserify@1.0.1:
- resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==}
- dev: true
+ fsevents@2.3.3:
+ optional: true
- /path-exists@4.0.0:
- resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
- engines: {node: '>=8'}
+ function-bind@1.1.2: {}
- /path-is-absolute@1.0.1:
- resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
- engines: {node: '>=0.10.0'}
+ get-caller-file@2.0.5: {}
- /path-key@3.1.1:
- resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
- engines: {node: '>=8'}
+ get-east-asian-width@1.3.0: {}
- /path-key@4.0.0:
- resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==}
- engines: {node: '>=12'}
+ get-stream@8.0.1: {}
- /path-parse@1.0.7:
- resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
+ git-raw-commits@4.0.0:
+ dependencies:
+ dargs: 8.1.0
+ meow: 12.1.1
+ split2: 4.2.0
- /path-to-regexp@6.2.1:
- resolution: {integrity: sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==}
- dev: false
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
- /path-type@4.0.0:
- resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
- engines: {node: '>=8'}
+ glob-parent@6.0.2:
+ dependencies:
+ is-glob: 4.0.3
- /pathe@1.1.0:
- resolution: {integrity: sha512-ODbEPR0KKHqECXW1GoxdDb+AZvULmXjVPy4rt+pGo2+TnjJTIPJQSVS6N63n8T2Ip+syHhbn52OewKicV0373w==}
- dev: true
+ glob@10.4.5:
+ dependencies:
+ foreground-child: 3.3.0
+ jackspeak: 3.4.3
+ minimatch: 9.0.5
+ minipass: 7.1.2
+ package-json-from-dist: 1.0.1
+ path-scurry: 1.11.1
- /pathval@1.1.1:
- resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
- dev: true
+ global-directory@4.0.1:
+ dependencies:
+ ini: 4.1.1
- /picocolors@1.0.0:
- resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
+ globals@14.0.0: {}
- /picomatch@2.3.1:
- resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
- engines: {node: '>=8.6'}
+ globrex@0.1.2: {}
- /pidtree@0.6.0:
- resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==}
- engines: {node: '>=0.10'}
- hasBin: true
- dev: true
+ graceful-fs@4.2.11: {}
- /pify@2.3.0:
- resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
- engines: {node: '>=0.10.0'}
- dev: false
+ graphemer@1.4.0: {}
- /pify@4.0.1:
- resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==}
- engines: {node: '>=6'}
- dev: false
+ has-flag@4.0.0: {}
- /pkg-dir@4.2.0:
- resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==}
- engines: {node: '>=8'}
+ hasown@2.0.2:
dependencies:
- find-up: 4.1.0
- dev: false
+ function-bind: 1.1.2
- /pkg-types@1.0.1:
- resolution: {integrity: sha512-jHv9HB+Ho7dj6ItwppRDDl0iZRYBD0jsakHXtFgoLr+cHSF6xC+QL54sJmWxyGxOLYSHm0afhXhXcQDQqH9z8g==}
+ hast-util-to-html@9.0.3:
dependencies:
- jsonc-parser: 3.2.0
- mlly: 1.1.0
- pathe: 1.1.0
- dev: true
+ '@types/hast': 3.0.4
+ '@types/unist': 3.0.3
+ ccount: 2.0.1
+ comma-separated-tokens: 2.0.3
+ hast-util-whitespace: 3.0.0
+ html-void-elements: 3.0.0
+ mdast-util-to-hast: 13.2.0
+ property-information: 6.5.0
+ space-separated-tokens: 2.0.2
+ stringify-entities: 4.0.4
+ zwitch: 2.0.4
- /postcss-import@14.1.0(postcss@8.4.21):
- resolution: {integrity: sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==}
- engines: {node: '>=10.0.0'}
- peerDependencies:
- postcss: ^8.0.0
+ hast-util-whitespace@3.0.0:
dependencies:
- postcss: 8.4.21
- postcss-value-parser: 4.2.0
- read-cache: 1.0.0
- resolve: 1.22.1
- dev: false
+ '@types/hast': 3.0.4
- /postcss-js@4.0.0(postcss@8.4.21):
- resolution: {integrity: sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==}
- engines: {node: ^12 || ^14 || >= 16}
- peerDependencies:
- postcss: ^8.3.3
- dependencies:
- camelcase-css: 2.0.1
- postcss: 8.4.21
- dev: false
+ he@1.2.0: {}
- /postcss-load-config@3.1.4(postcss@8.4.21)(ts-node@10.9.1):
- resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==}
- engines: {node: '>= 10'}
- peerDependencies:
- postcss: '>=8.0.9'
- ts-node: '>=9.0.0'
- peerDependenciesMeta:
- postcss:
- optional: true
- ts-node:
- optional: true
- dependencies:
- lilconfig: 2.0.6
- postcss: 8.4.21
- ts-node: 10.9.1(@types/node@18.11.18)(typescript@4.9.5)
- yaml: 1.10.2
- dev: false
+ hookable@5.5.3: {}
- /postcss-load-config@4.0.1(postcss@8.4.21)(ts-node@10.9.1):
- resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==}
- engines: {node: '>= 14'}
- peerDependencies:
- postcss: '>=8.0.9'
- ts-node: '>=9.0.0'
- peerDependenciesMeta:
- postcss:
- optional: true
- ts-node:
- optional: true
+ html-encoding-sniffer@4.0.0:
dependencies:
- lilconfig: 2.0.6
- postcss: 8.4.21
- ts-node: 10.9.1(@types/node@18.11.18)(typescript@4.9.5)
- yaml: 2.2.1
- dev: false
+ whatwg-encoding: 3.1.1
- /postcss-nested@6.0.0(postcss@8.4.21):
- resolution: {integrity: sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==}
- engines: {node: '>=12.0'}
- peerDependencies:
- postcss: ^8.2.14
- dependencies:
- postcss: 8.4.21
- postcss-selector-parser: 6.0.11
- dev: false
+ html-escaper@2.0.2: {}
- /postcss-selector-parser@6.0.10:
- resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==}
- engines: {node: '>=4'}
+ html-void-elements@3.0.0: {}
+
+ http-proxy-agent@7.0.2:
dependencies:
- cssesc: 3.0.0
- util-deprecate: 1.0.2
- dev: false
+ agent-base: 7.1.1
+ debug: 4.3.7
+ transitivePeerDependencies:
+ - supports-color
- /postcss-selector-parser@6.0.11:
- resolution: {integrity: sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==}
- engines: {node: '>=4'}
+ https-proxy-agent@7.0.5:
dependencies:
- cssesc: 3.0.0
- util-deprecate: 1.0.2
- dev: false
+ agent-base: 7.1.1
+ debug: 4.3.7
+ transitivePeerDependencies:
+ - supports-color
- /postcss-value-parser@4.2.0:
- resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
- dev: false
+ human-signals@5.0.0: {}
- /postcss@8.4.21:
- resolution: {integrity: sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==}
- engines: {node: ^10 || ^12 || >=14}
- dependencies:
- nanoid: 3.3.4
- picocolors: 1.0.0
- source-map-js: 1.0.2
+ husky@9.1.6: {}
- /preferred-pm@3.0.3:
- resolution: {integrity: sha512-+wZgbxNES/KlJs9q40F/1sfOd/j7f1O9JaHcW5Dsn3aUUOZg3L2bjpVUcKV2jvtElYfoTuQiNeMfQJ4kwUAhCQ==}
- engines: {node: '>=10'}
+ iconv-lite@0.6.3:
dependencies:
- find-up: 5.0.0
- find-yarn-workspace-root2: 1.2.16
- path-exists: 4.0.0
- which-pm: 2.0.0
- dev: false
-
- /prelude-ls@1.1.2:
- resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==}
- engines: {node: '>= 0.8.0'}
- dev: true
+ safer-buffer: 2.1.2
- /prelude-ls@1.2.1:
- resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
- engines: {node: '>= 0.8.0'}
+ ignore@5.3.2: {}
- /prettier-plugin-astro@0.7.2:
- resolution: {integrity: sha512-mmifnkG160BtC727gqoimoxnZT/dwr8ASxpoGGl6EHevhfblSOeu+pwH1LAm5Qu1MynizktztFujHHaijLCkww==}
- engines: {node: ^14.15.0 || >=16.0.0, pnpm: '>=7.14.0'}
+ import-fresh@3.3.0:
dependencies:
- '@astrojs/compiler': 0.31.4
- prettier: 2.8.3
- sass-formatter: 0.7.5
- synckit: 0.8.5
- dev: false
+ parent-module: 1.0.1
+ resolve-from: 4.0.0
- /prettier-plugin-astro@0.8.0:
- resolution: {integrity: sha512-kt9wk33J7HvFGwFaHb8piwy4zbUmabC8Nu+qCw493jhe96YkpjscqGBPy4nJ9TPy9pd7+kEx1zM81rp+MIdrXg==}
- engines: {node: ^14.15.0 || >=16.0.0, pnpm: '>=7.14.0'}
- dependencies:
- '@astrojs/compiler': 1.0.1
- prettier: 2.8.3
- sass-formatter: 0.7.5
- synckit: 0.8.5
- dev: false
+ import-lazy@4.0.0: {}
- /prettier@2.8.3:
- resolution: {integrity: sha512-tJ/oJ4amDihPoufT5sM0Z1SKEuKay8LfVAMlbbhnnkvt6BUserZylqo2PN+p9KeljLr0OHa2rXHU1T8reeoTrw==}
- engines: {node: '>=10.13.0'}
- hasBin: true
+ import-meta-resolve@4.1.0: {}
- /pretty-format@27.5.1:
- resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==}
- engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
- dependencies:
- ansi-regex: 5.0.1
- ansi-styles: 5.2.0
- react-is: 17.0.2
- dev: true
+ imurmurhash@0.1.4: {}
- /prismjs@1.29.0:
- resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==}
- engines: {node: '>=6'}
- dev: false
+ ini@4.1.1: {}
- /prompts@2.4.2:
- resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==}
- engines: {node: '>= 6'}
+ is-arrayish@0.2.1: {}
+
+ is-core-module@2.15.1:
dependencies:
- kleur: 3.0.3
- sisteransi: 1.0.5
- dev: false
+ hasown: 2.0.2
- /property-information@6.2.0:
- resolution: {integrity: sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==}
- dev: false
+ is-extglob@2.1.1: {}
- /psl@1.9.0:
- resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==}
- dev: true
+ is-fullwidth-code-point@3.0.0: {}
- /punycode@2.3.0:
- resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==}
- engines: {node: '>=6'}
+ is-fullwidth-code-point@4.0.0: {}
- /q@1.5.1:
- resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==}
- engines: {node: '>=0.6.0', teleport: '>=0.2.0'}
+ is-fullwidth-code-point@5.0.0:
+ dependencies:
+ get-east-asian-width: 1.3.0
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
- /querystringify@2.2.0:
- resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==}
- dev: true
+ is-number@7.0.0: {}
- /queue-microtask@1.2.3:
- resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+ is-obj@2.0.0: {}
- /quick-lru@4.0.1:
- resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==}
- engines: {node: '>=8'}
- dev: true
+ is-potential-custom-element-name@1.0.1: {}
- /quick-lru@5.1.1:
- resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==}
- engines: {node: '>=10'}
- dev: false
+ is-stream@3.0.0: {}
- /react-dom@18.2.0(react@18.2.0):
- resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==}
- peerDependencies:
- react: ^18.2.0
+ is-text-path@2.0.0:
dependencies:
- loose-envify: 1.4.0
- react: 18.2.0
- scheduler: 0.23.0
- dev: true
-
- /react-is@17.0.2:
- resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==}
- dev: true
+ text-extensions: 2.4.0
- /react@18.2.0:
- resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==}
- engines: {node: '>=0.10.0'}
- dependencies:
- loose-envify: 1.4.0
- dev: true
+ is-what@4.1.16: {}
- /read-cache@1.0.0:
- resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
- dependencies:
- pify: 2.3.0
- dev: false
+ isexe@2.0.0: {}
- /read-pkg-up@7.0.1:
- resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==}
- engines: {node: '>=8'}
- dependencies:
- find-up: 4.1.0
- read-pkg: 5.2.0
- type-fest: 0.8.1
- dev: true
+ istanbul-lib-coverage@3.2.2: {}
- /read-pkg@5.2.0:
- resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==}
- engines: {node: '>=8'}
+ istanbul-lib-report@3.0.1:
dependencies:
- '@types/normalize-package-data': 2.4.1
- normalize-package-data: 2.5.0
- parse-json: 5.2.0
- type-fest: 0.6.0
- dev: true
+ istanbul-lib-coverage: 3.2.2
+ make-dir: 4.0.0
+ supports-color: 7.2.0
- /readable-stream@3.6.0:
- resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==}
- engines: {node: '>= 6'}
+ istanbul-lib-source-maps@5.0.6:
dependencies:
- inherits: 2.0.4
- string_decoder: 1.3.0
- util-deprecate: 1.0.2
+ '@jridgewell/trace-mapping': 0.3.25
+ debug: 4.3.7
+ istanbul-lib-coverage: 3.2.2
+ transitivePeerDependencies:
+ - supports-color
- /readdirp@3.6.0:
- resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
- engines: {node: '>=8.10.0'}
+ istanbul-reports@3.1.7:
dependencies:
- picomatch: 2.3.1
- dev: false
+ html-escaper: 2.0.2
+ istanbul-lib-report: 3.0.1
- /redent@3.0.0:
- resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==}
- engines: {node: '>=8'}
+ jackspeak@3.4.3:
dependencies:
- indent-string: 4.0.0
- strip-indent: 3.0.0
- dev: true
+ '@isaacs/cliui': 8.0.2
+ optionalDependencies:
+ '@pkgjs/parseargs': 0.11.0
- /regenerator-runtime@0.13.11:
- resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==}
+ jiti@1.21.6: {}
- /regexp.prototype.flags@1.4.3:
- resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==}
- engines: {node: '>= 0.4'}
- dependencies:
- call-bind: 1.0.2
- define-properties: 1.1.4
- functions-have-names: 1.2.3
+ jju@1.4.0: {}
- /regexpp@3.2.0:
- resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==}
- engines: {node: '>=8'}
+ js-tokens@4.0.0: {}
- /rehype-autolink-headings@6.1.1:
- resolution: {integrity: sha512-NMYzZIsHM3sA14nC5rAFuUPIOfg+DFmf9EY1YMhaNlB7+3kK/ZlE6kqPfuxr1tsJ1XWkTrMtMoyHosU70d35mA==}
- dependencies:
- '@types/hast': 2.3.4
- extend: 3.0.2
- hast-util-has-property: 2.0.1
- hast-util-heading-rank: 2.1.1
- hast-util-is-element: 2.1.3
- unified: 10.1.2
- unist-util-visit: 4.1.2
- dev: false
-
- /rehype-parse@8.0.4:
- resolution: {integrity: sha512-MJJKONunHjoTh4kc3dsM1v3C9kGrrxvA3U8PxZlP2SjH8RNUSrb+lF7Y0KVaUDnGH2QZ5vAn7ulkiajM9ifuqg==}
- dependencies:
- '@types/hast': 2.3.4
- hast-util-from-parse5: 7.1.1
- parse5: 6.0.1
- unified: 10.1.2
- dev: false
-
- /rehype-raw@6.1.1:
- resolution: {integrity: sha512-d6AKtisSRtDRX4aSPsJGTfnzrX2ZkHQLE5kiUuGOeEoLpbEulFF4hj0mLPbsa+7vmguDKOVVEQdHKDSwoaIDsQ==}
- dependencies:
- '@types/hast': 2.3.4
- hast-util-raw: 7.2.3
- unified: 10.1.2
- dev: false
-
- /rehype-stringify@9.0.3:
- resolution: {integrity: sha512-kWiZ1bgyWlgOxpqD5HnxShKAdXtb2IUljn3hQAhySeak6IOQPPt6DeGnsIh4ixm7yKJWzm8TXFuC/lPfcWHJqw==}
- dependencies:
- '@types/hast': 2.3.4
- hast-util-to-html: 8.0.4
- unified: 10.1.2
- dev: false
-
- /rehype@12.0.1:
- resolution: {integrity: sha512-ey6kAqwLM3X6QnMDILJthGvG1m1ULROS9NT4uG9IDCuv08SFyLlreSuvOa//DgEvbXx62DS6elGVqusWhRUbgw==}
- dependencies:
- '@types/hast': 2.3.4
- rehype-parse: 8.0.4
- rehype-stringify: 9.0.3
- unified: 10.1.2
- dev: false
-
- /remark-gfm@3.0.1:
- resolution: {integrity: sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==}
- dependencies:
- '@types/mdast': 3.0.10
- mdast-util-gfm: 2.0.2
- micromark-extension-gfm: 2.0.1
- unified: 10.1.2
- transitivePeerDependencies:
- - supports-color
- dev: false
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
- /remark-parse@10.0.1:
- resolution: {integrity: sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw==}
+ jsdom@25.0.1:
dependencies:
- '@types/mdast': 3.0.10
- mdast-util-from-markdown: 1.3.0
- unified: 10.1.2
+ cssstyle: 4.1.0
+ data-urls: 5.0.0
+ decimal.js: 10.4.3
+ form-data: 4.0.1
+ html-encoding-sniffer: 4.0.0
+ http-proxy-agent: 7.0.2
+ https-proxy-agent: 7.0.5
+ is-potential-custom-element-name: 1.0.1
+ nwsapi: 2.2.13
+ parse5: 7.2.1
+ rrweb-cssom: 0.7.1
+ saxes: 6.0.0
+ symbol-tree: 3.2.4
+ tough-cookie: 5.0.0
+ w3c-xmlserializer: 5.0.0
+ webidl-conversions: 7.0.0
+ whatwg-encoding: 3.1.1
+ whatwg-mimetype: 4.0.0
+ whatwg-url: 14.0.0
+ ws: 8.18.0
+ xml-name-validator: 5.0.0
transitivePeerDependencies:
+ - bufferutil
- supports-color
- dev: false
+ - utf-8-validate
- /remark-rehype@10.1.0:
- resolution: {integrity: sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==}
- dependencies:
- '@types/hast': 2.3.4
- '@types/mdast': 3.0.10
- mdast-util-to-hast: 12.3.0
- unified: 10.1.2
- dev: false
+ json-buffer@3.0.1: {}
- /remark-smartypants@2.0.0:
- resolution: {integrity: sha512-Rc0VDmr/yhnMQIz8n2ACYXlfw/P/XZev884QU1I5u+5DgJls32o97Vc1RbK3pfumLsJomS2yy8eT4Fxj/2MDVA==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- dependencies:
- retext: 8.1.0
- retext-smartypants: 5.2.0
- unist-util-visit: 4.1.2
- dev: false
+ json-parse-even-better-errors@2.3.1: {}
- /require-directory@2.1.1:
- resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
- engines: {node: '>=0.10.0'}
- dev: true
+ json-schema-traverse@0.4.1: {}
- /require-from-string@2.0.2:
- resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
- engines: {node: '>=0.10.0'}
- dev: true
+ json-schema-traverse@1.0.0: {}
- /requires-port@1.0.0:
- resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==}
- dev: true
+ json-stable-stringify-without-jsonify@1.0.1: {}
- /resolve-from@4.0.0:
- resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
- engines: {node: '>=4'}
+ jsonfile@4.0.0:
+ optionalDependencies:
+ graceful-fs: 4.2.11
- /resolve-from@5.0.0:
- resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
- engines: {node: '>=8'}
- dev: true
+ jsonparse@1.3.1: {}
- /resolve-global@1.0.0:
- resolution: {integrity: sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==}
- engines: {node: '>=8'}
+ keyv@4.5.4:
dependencies:
- global-dirs: 0.1.1
- dev: true
+ json-buffer: 3.0.1
- /resolve@1.17.0:
- resolution: {integrity: sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==}
- dependencies:
- path-parse: 1.0.7
- dev: true
+ kolorist@1.8.0: {}
- /resolve@1.19.0:
- resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==}
+ levn@0.4.1:
dependencies:
- is-core-module: 2.11.0
- path-parse: 1.0.7
- dev: true
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
- /resolve@1.22.1:
- resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==}
- hasBin: true
- dependencies:
- is-core-module: 2.11.0
- path-parse: 1.0.7
- supports-preserve-symlinks-flag: 1.0.0
+ lilconfig@3.1.2: {}
- /restore-cursor@3.1.0:
- resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==}
- engines: {node: '>=8'}
- dependencies:
- onetime: 5.1.2
- signal-exit: 3.0.7
- dev: true
+ lines-and-columns@1.2.4: {}
- /restore-cursor@4.0.0:
- resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ lint-staged@15.2.10:
dependencies:
- onetime: 5.1.2
- signal-exit: 3.0.7
- dev: false
+ chalk: 5.3.0
+ commander: 12.1.0
+ debug: 4.3.7
+ execa: 8.0.1
+ lilconfig: 3.1.2
+ listr2: 8.2.5
+ micromatch: 4.0.8
+ pidtree: 0.6.0
+ string-argv: 0.3.2
+ yaml: 2.5.1
+ transitivePeerDependencies:
+ - supports-color
- /retext-latin@3.1.0:
- resolution: {integrity: sha512-5MrD1tuebzO8ppsja5eEu+ZbBeUNCjoEarn70tkXOS7Bdsdf6tNahsv2bY0Z8VooFF6cw7/6S+d3yI/TMlMVVQ==}
+ listr2@8.2.5:
dependencies:
- '@types/nlcst': 1.0.0
- parse-latin: 5.0.1
- unherit: 3.0.1
- unified: 10.1.2
- dev: false
+ cli-truncate: 4.0.0
+ colorette: 2.0.20
+ eventemitter3: 5.0.1
+ log-update: 6.1.0
+ rfdc: 1.4.1
+ wrap-ansi: 9.0.0
- /retext-smartypants@5.2.0:
- resolution: {integrity: sha512-Do8oM+SsjrbzT2UNIKgheP0hgUQTDDQYyZaIY3kfq0pdFzoPk+ZClYJ+OERNXveog4xf1pZL4PfRxNoVL7a/jw==}
+ local-pkg@0.5.0:
dependencies:
- '@types/nlcst': 1.0.0
- nlcst-to-string: 3.1.1
- unified: 10.1.2
- unist-util-visit: 4.1.2
- dev: false
+ mlly: 1.7.2
+ pkg-types: 1.2.1
- /retext-stringify@3.1.0:
- resolution: {integrity: sha512-767TLOaoXFXyOnjx/EggXlb37ZD2u4P1n0GJqVdpipqACsQP+20W+BNpMYrlJkq7hxffnFk+jc6mAK9qrbuB8w==}
+ locate-path@6.0.0:
dependencies:
- '@types/nlcst': 1.0.0
- nlcst-to-string: 3.1.1
- unified: 10.1.2
- dev: false
+ p-locate: 5.0.0
- /retext@8.1.0:
- resolution: {integrity: sha512-N9/Kq7YTn6ZpzfiGW45WfEGJqFf1IM1q8OsRa1CGzIebCJBNCANDRmOrholiDRGKo/We7ofKR4SEvcGAWEMD3Q==}
+ locate-path@7.2.0:
dependencies:
- '@types/nlcst': 1.0.0
- retext-latin: 3.1.0
- retext-stringify: 3.1.0
- unified: 10.1.2
- dev: false
+ p-locate: 6.0.0
- /reusify@1.0.4:
- resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
- engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+ lodash.camelcase@4.3.0: {}
- /rfdc@1.3.0:
- resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==}
- dev: true
+ lodash.isplainobject@4.0.6: {}
- /rimraf@3.0.2:
- resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
- hasBin: true
- dependencies:
- glob: 7.2.3
+ lodash.kebabcase@4.1.1: {}
- /rollup@3.13.0:
- resolution: {integrity: sha512-HJwQtrXAc0AmyDohTJ/2c+Bx/sWPScJLlAUJ1kuD7rAkCro8Cr2SnVB2gVYBiSLxpgD2kZ24jbyXtG++GumrYQ==}
- engines: {node: '>=14.18.0', npm: '>=8.0.0'}
- hasBin: true
- optionalDependencies:
- fsevents: 2.3.2
+ lodash.merge@4.6.2: {}
- /run-parallel@1.2.0:
- resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
- dependencies:
- queue-microtask: 1.2.3
+ lodash.mergewith@4.6.2: {}
- /rxjs@7.8.0:
- resolution: {integrity: sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==}
- dependencies:
- tslib: 2.5.0
- dev: true
+ lodash.snakecase@4.1.1: {}
- /s.color@0.0.15:
- resolution: {integrity: sha512-AUNrbEUHeKY8XsYr/DYpl+qk5+aM+DChopnWOPEzn8YKzOhv4l2zH6LzZms3tOZP3wwdOyc0RmTciyi46HLIuA==}
- dev: false
+ lodash.startcase@4.4.0: {}
- /sade@1.8.1:
- resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==}
- engines: {node: '>=6'}
- dependencies:
- mri: 1.2.0
- dev: false
+ lodash.uniq@4.5.0: {}
- /safe-buffer@5.2.1:
- resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+ lodash.upperfirst@4.3.1: {}
- /safe-regex-test@1.0.0:
- resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==}
- dependencies:
- call-bind: 1.0.2
- get-intrinsic: 1.2.0
- is-regex: 1.1.4
- dev: false
+ lodash@4.17.21: {}
- /safer-buffer@2.1.2:
- resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
- dev: true
+ log-update@6.1.0:
+ dependencies:
+ ansi-escapes: 7.0.0
+ cli-cursor: 5.0.0
+ slice-ansi: 7.1.0
+ strip-ansi: 7.1.0
+ wrap-ansi: 9.0.0
- /sass-formatter@0.7.5:
- resolution: {integrity: sha512-NKFP8ddjhUYi6A/iD1cEtzkEs91U61kzqe3lY9SVNuvX7LGc88xnEN0mmsWL7Ol//YTi2GL/ol7b9XZ2+hgXuA==}
+ loose-envify@1.4.0:
dependencies:
- suf-log: 2.5.3
- dev: false
+ js-tokens: 4.0.0
- /sax@1.2.4:
- resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==}
- dev: false
+ loupe@3.1.2: {}
- /saxes@6.0.0:
- resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==}
- engines: {node: '>=v12.22.7'}
+ lru-cache@10.4.3: {}
+
+ lru-cache@6.0.0:
dependencies:
- xmlchars: 2.2.0
- dev: true
+ yallist: 4.0.0
+
+ lz-string@1.5.0: {}
- /scheduler@0.23.0:
- resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==}
+ magic-string@0.30.12:
dependencies:
- loose-envify: 1.4.0
- dev: true
+ '@jridgewell/sourcemap-codec': 1.5.0
- /section-matter@1.0.0:
- resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==}
- engines: {node: '>=4'}
+ magicast@0.3.5:
dependencies:
- extend-shallow: 2.0.1
- kind-of: 6.0.3
- dev: false
+ '@babel/parser': 7.26.2
+ '@babel/types': 7.26.0
+ source-map-js: 1.2.1
- /semver@5.7.2:
- resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==}
- hasBin: true
- dev: true
+ make-dir@4.0.0:
+ dependencies:
+ semver: 7.6.3
- /semver@6.3.0:
- resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==}
- hasBin: true
+ mark.js@8.11.1: {}
- /semver@7.3.8:
- resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==}
- engines: {node: '>=10'}
- hasBin: true
+ mdast-util-to-hast@13.2.0:
dependencies:
- lru-cache: 6.0.0
+ '@types/hast': 3.0.4
+ '@types/mdast': 4.0.4
+ '@ungap/structured-clone': 1.2.0
+ devlop: 1.1.0
+ micromark-util-sanitize-uri: 2.0.0
+ trim-lines: 3.0.1
+ unist-util-position: 5.0.0
+ unist-util-visit: 5.0.0
+ vfile: 6.0.3
- /server-destroy@1.0.1:
- resolution: {integrity: sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==}
- dev: false
+ meow@12.1.1: {}
- /shebang-command@2.0.0:
- resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
- engines: {node: '>=8'}
- dependencies:
- shebang-regex: 3.0.0
+ merge-stream@2.0.0: {}
- /shebang-regex@3.0.0:
- resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
- engines: {node: '>=8'}
+ merge2@1.4.1: {}
- /shiki@0.11.1:
- resolution: {integrity: sha512-EugY9VASFuDqOexOgXR18ZV+TbFrQHeCpEYaXamO+SZlsnT/2LxuLBX25GGtIrwaEVFXUAbUQ601SWE2rMwWHA==}
+ micromark-util-character@2.1.0:
dependencies:
- jsonc-parser: 3.2.0
- vscode-oniguruma: 1.7.0
- vscode-textmate: 6.0.0
- dev: false
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
+
+ micromark-util-encode@2.0.0: {}
- /side-channel@1.0.4:
- resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==}
+ micromark-util-sanitize-uri@2.0.0:
dependencies:
- call-bind: 1.0.2
- get-intrinsic: 1.2.0
- object-inspect: 1.12.3
+ micromark-util-character: 2.1.0
+ micromark-util-encode: 2.0.0
+ micromark-util-symbol: 2.0.0
- /siginfo@2.0.0:
- resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
- dev: true
+ micromark-util-symbol@2.0.0: {}
- /signal-exit@3.0.7:
- resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
+ micromark-util-types@2.0.0: {}
- /sisteransi@1.0.5:
- resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
- dev: false
+ micromatch@4.0.8:
+ dependencies:
+ braces: 3.0.3
+ picomatch: 2.3.1
- /sitemap@7.1.1:
- resolution: {integrity: sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==}
- engines: {node: '>=12.0.0', npm: '>=5.6.0'}
- hasBin: true
+ mime-db@1.52.0: {}
+
+ mime-types@2.1.35:
dependencies:
- '@types/node': 17.0.45
- '@types/sax': 1.2.4
- arg: 5.0.2
- sax: 1.2.4
- dev: false
+ mime-db: 1.52.0
- /slash@3.0.0:
- resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
- engines: {node: '>=8'}
- dev: false
+ mimic-fn@4.0.0: {}
- /slash@4.0.0:
- resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==}
- engines: {node: '>=12'}
- dev: false
+ mimic-function@5.0.1: {}
- /slice-ansi@3.0.0:
- resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==}
- engines: {node: '>=8'}
+ minimatch@3.0.8:
dependencies:
- ansi-styles: 4.3.0
- astral-regex: 2.0.0
- is-fullwidth-code-point: 3.0.0
- dev: true
+ brace-expansion: 1.1.11
- /slice-ansi@4.0.0:
- resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==}
- engines: {node: '>=10'}
+ minimatch@3.1.2:
dependencies:
- ansi-styles: 4.3.0
- astral-regex: 2.0.0
- is-fullwidth-code-point: 3.0.0
- dev: true
+ brace-expansion: 1.1.11
- /slice-ansi@5.0.0:
- resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==}
- engines: {node: '>=12'}
+ minimatch@9.0.5:
dependencies:
- ansi-styles: 6.2.1
- is-fullwidth-code-point: 4.0.0
- dev: true
-
- /source-map-js@1.0.2:
- resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
- engines: {node: '>=0.10.0'}
+ brace-expansion: 2.0.1
- /source-map-support@0.5.21:
- resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
- dependencies:
- buffer-from: 1.1.2
- source-map: 0.6.1
- dev: true
+ minimist@1.2.8: {}
- /source-map@0.6.1:
- resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
- engines: {node: '>=0.10.0'}
- dev: true
+ minipass@7.1.2: {}
- /source-map@0.7.4:
- resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==}
- engines: {node: '>= 8'}
- dev: false
+ minisearch@7.1.0: {}
- /space-separated-tokens@2.0.2:
- resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
- dev: false
+ mitt@3.0.1: {}
- /spdx-correct@3.1.1:
- resolution: {integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==}
+ mlly@1.7.2:
dependencies:
- spdx-expression-parse: 3.0.1
- spdx-license-ids: 3.0.12
- dev: true
-
- /spdx-exceptions@2.3.0:
- resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==}
- dev: true
+ acorn: 8.14.0
+ pathe: 1.1.2
+ pkg-types: 1.2.1
+ ufo: 1.5.4
- /spdx-expression-parse@3.0.1:
- resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==}
- dependencies:
- spdx-exceptions: 2.3.0
- spdx-license-ids: 3.0.12
- dev: true
+ ms@2.1.3: {}
- /spdx-license-ids@3.0.12:
- resolution: {integrity: sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==}
- dev: true
+ muggle-string@0.4.1: {}
- /split2@3.2.2:
- resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==}
- dependencies:
- readable-stream: 3.6.0
- dev: true
+ nanoid@3.3.7: {}
- /sprintf-js@1.0.3:
- resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
+ natural-compare@1.4.0: {}
- /stackback@0.0.2:
- resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
- dev: true
+ npm-run-path@5.3.0:
+ dependencies:
+ path-key: 4.0.0
- /std-env@3.3.2:
- resolution: {integrity: sha512-uUZI65yrV2Qva5gqE0+A7uVAvO40iPo6jGhs7s8keRfHCmtg+uB2X6EiLGCI9IgL1J17xGhvoOqSz79lzICPTA==}
- dev: true
+ nwsapi@2.2.13: {}
- /stop-iteration-iterator@1.0.0:
- resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==}
- engines: {node: '>= 0.4'}
+ onetime@6.0.0:
dependencies:
- internal-slot: 1.0.4
-
- /streamsearch@1.1.0:
- resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
- engines: {node: '>=10.0.0'}
- dev: false
+ mimic-fn: 4.0.0
- /string-argv@0.3.1:
- resolution: {integrity: sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==}
- engines: {node: '>=0.6.19'}
- dev: true
+ onetime@7.0.0:
+ dependencies:
+ mimic-function: 5.0.1
- /string-width@4.2.3:
- resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
- engines: {node: '>=8'}
+ oniguruma-to-js@0.4.3:
dependencies:
- emoji-regex: 8.0.0
- is-fullwidth-code-point: 3.0.0
- strip-ansi: 6.0.1
+ regex: 4.4.0
- /string-width@5.1.2:
- resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
- engines: {node: '>=12'}
+ optionator@0.9.4:
dependencies:
- eastasianwidth: 0.2.0
- emoji-regex: 9.2.2
- strip-ansi: 7.0.1
+ deep-is: 0.1.4
+ fast-levenshtein: 2.0.6
+ levn: 0.4.1
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+ word-wrap: 1.2.5
- /string.prototype.trimend@1.0.6:
- resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==}
+ p-limit@3.1.0:
dependencies:
- call-bind: 1.0.2
- define-properties: 1.1.4
- es-abstract: 1.21.1
- dev: false
+ yocto-queue: 0.1.0
- /string.prototype.trimstart@1.0.6:
- resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==}
+ p-limit@4.0.0:
dependencies:
- call-bind: 1.0.2
- define-properties: 1.1.4
- es-abstract: 1.21.1
- dev: false
+ yocto-queue: 1.1.1
- /string_decoder@1.3.0:
- resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
+ p-locate@5.0.0:
dependencies:
- safe-buffer: 5.2.1
+ p-limit: 3.1.0
- /stringify-entities@4.0.3:
- resolution: {integrity: sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==}
+ p-locate@6.0.0:
dependencies:
- character-entities-html4: 2.1.0
- character-entities-legacy: 3.0.0
- dev: false
+ p-limit: 4.0.0
- /strip-ansi@6.0.1:
- resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
- engines: {node: '>=8'}
+ package-json-from-dist@1.0.1: {}
+
+ parent-module@1.0.1:
dependencies:
- ansi-regex: 5.0.1
+ callsites: 3.1.0
- /strip-ansi@7.0.1:
- resolution: {integrity: sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==}
- engines: {node: '>=12'}
+ parse-json@5.2.0:
dependencies:
- ansi-regex: 6.0.1
+ '@babel/code-frame': 7.26.2
+ error-ex: 1.3.2
+ json-parse-even-better-errors: 2.3.1
+ lines-and-columns: 1.2.4
- /strip-bom-string@1.0.0:
- resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==}
- engines: {node: '>=0.10.0'}
- dev: false
+ parse5@7.2.1:
+ dependencies:
+ entities: 4.5.0
- /strip-bom@3.0.0:
- resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
- engines: {node: '>=4'}
- dev: false
+ path-browserify@1.0.1: {}
- /strip-bom@4.0.0:
- resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==}
- engines: {node: '>=8'}
- dev: false
+ path-exists@4.0.0: {}
- /strip-final-newline@2.0.0:
- resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
- engines: {node: '>=6'}
- dev: true
+ path-exists@5.0.0: {}
- /strip-final-newline@3.0.0:
- resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==}
- engines: {node: '>=12'}
+ path-key@3.1.1: {}
- /strip-indent@3.0.0:
- resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==}
- engines: {node: '>=8'}
- dependencies:
- min-indent: 1.0.1
- dev: true
+ path-key@4.0.0: {}
- /strip-json-comments@3.1.1:
- resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
- engines: {node: '>=8'}
+ path-parse@1.0.7: {}
- /strip-literal@1.0.1:
- resolution: {integrity: sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q==}
+ path-scurry@1.11.1:
dependencies:
- acorn: 8.8.2
- dev: true
+ lru-cache: 10.4.3
+ minipass: 7.1.2
- /suf-log@2.5.3:
- resolution: {integrity: sha512-KvC8OPjzdNOe+xQ4XWJV2whQA0aM1kGVczMQ8+dStAO6KfEB140JEVQ9dE76ONZ0/Ylf67ni4tILPJB41U0eow==}
- dependencies:
- s.color: 0.0.15
- dev: false
+ pathe@1.1.2: {}
- /supports-color@5.5.0:
- resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
- engines: {node: '>=4'}
- dependencies:
- has-flag: 3.0.0
+ pathval@2.0.0: {}
- /supports-color@7.2.0:
- resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
- engines: {node: '>=8'}
- dependencies:
- has-flag: 4.0.0
+ perfect-debounce@1.0.0: {}
- /supports-esm@1.0.0:
- resolution: {integrity: sha512-96Am8CDqUaC0I2+C/swJ0yEvM8ZnGn4unoers/LSdE4umhX7mELzqyLzx3HnZAluq5PXIsGMKqa7NkqaeHMPcg==}
- dependencies:
- has-package-exports: 1.3.0
- dev: false
+ picocolors@1.1.1: {}
- /supports-preserve-symlinks-flag@1.0.0:
- resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
- engines: {node: '>= 0.4'}
+ picomatch@2.3.1: {}
- /symbol-tree@3.2.4:
- resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==}
- dev: true
+ picomatch@4.0.2: {}
- /synckit@0.8.5:
- resolution: {integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==}
- engines: {node: ^14.18.0 || >=16.0.0}
- dependencies:
- '@pkgr/utils': 2.3.1
- tslib: 2.5.0
- dev: false
+ pidtree@0.6.0: {}
- /tailwindcss-radix-colors@0.3.0(tailwindcss@3.2.4):
- resolution: {integrity: sha512-OTnb4PXfLYDd2Lb3JL75qPjRLktag8V9WN59stZ/6wwGbwXCifY3HTZigC+EjHOzt/xuOoom4Z3CqLMLRqVieA==}
- peerDependencies:
- tailwindcss: '>=3.0.0'
+ pkg-types@1.2.1:
dependencies:
- '@radix-ui/colors': 0.1.8
- tailwindcss: 3.2.4(postcss@8.4.21)(ts-node@10.9.1)
- dev: false
+ confbox: 0.1.8
+ mlly: 1.7.2
+ pathe: 1.1.2
- /tailwindcss@3.2.4(postcss@8.4.21)(ts-node@10.9.1):
- resolution: {integrity: sha512-AhwtHCKMtR71JgeYDaswmZXhPcW9iuI9Sp2LvZPo9upDZ7231ZJ7eA9RaURbhpXGVlrjX4cFNlB4ieTetEb7hQ==}
- engines: {node: '>=12.13.0'}
- hasBin: true
- peerDependencies:
- postcss: ^8.0.9
+ postcss@8.4.48:
dependencies:
- arg: 5.0.2
- chokidar: 3.5.3
- color-name: 1.1.4
- detective: 5.2.1
- didyoumean: 1.2.2
- dlv: 1.1.3
- fast-glob: 3.2.12
- glob-parent: 6.0.2
- is-glob: 4.0.3
- lilconfig: 2.0.6
- micromatch: 4.0.5
- normalize-path: 3.0.0
- object-hash: 3.0.0
- picocolors: 1.0.0
- postcss: 8.4.21
- postcss-import: 14.1.0(postcss@8.4.21)
- postcss-js: 4.0.0(postcss@8.4.21)
- postcss-load-config: 3.1.4(postcss@8.4.21)(ts-node@10.9.1)
- postcss-nested: 6.0.0(postcss@8.4.21)
- postcss-selector-parser: 6.0.11
- postcss-value-parser: 4.2.0
- quick-lru: 5.1.1
- resolve: 1.22.1
- transitivePeerDependencies:
- - ts-node
- dev: false
+ nanoid: 3.3.7
+ picocolors: 1.1.1
+ source-map-js: 1.2.1
- /test-exclude@6.0.0:
- resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==}
- engines: {node: '>=8'}
+ preact@10.24.3: {}
+
+ prelude-ls@1.2.1: {}
+
+ prettier@3.3.3: {}
+
+ pretty-format@27.5.1:
dependencies:
- '@istanbuljs/schema': 0.1.3
- glob: 7.2.3
- minimatch: 3.1.2
- dev: true
+ ansi-regex: 5.0.1
+ ansi-styles: 5.2.0
+ react-is: 17.0.2
- /text-extensions@1.9.0:
- resolution: {integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==}
- engines: {node: '>=0.10'}
- dev: true
+ property-information@6.5.0: {}
- /text-table@0.2.0:
- resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
+ punycode@2.3.1: {}
- /through2@4.0.2:
- resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==}
+ queue-microtask@1.2.3: {}
+
+ react-dom@18.3.1(react@18.3.1):
dependencies:
- readable-stream: 3.6.0
- dev: true
+ loose-envify: 1.4.0
+ react: 18.3.1
+ scheduler: 0.23.2
- /through@2.3.8:
- resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
- dev: true
+ react-is@17.0.2: {}
- /tiny-glob@0.2.9:
- resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==}
+ react@18.3.1:
dependencies:
- globalyzer: 0.1.0
- globrex: 0.1.2
- dev: false
+ loose-envify: 1.4.0
- /tinybench@2.3.1:
- resolution: {integrity: sha512-hGYWYBMPr7p4g5IarQE7XhlyWveh1EKhy4wUBS1LrHXCKYgvz+4/jCqgmJqZxxldesn05vccrtME2RLLZNW7iA==}
- dev: true
+ regenerator-runtime@0.14.1: {}
- /tinypool@0.3.1:
- resolution: {integrity: sha512-zLA1ZXlstbU2rlpA4CIeVaqvWq41MTWqLY3FfsAXgC8+f7Pk7zroaJQxDgxn1xNudKW6Kmj4808rPFShUlIRmQ==}
- engines: {node: '>=14.0.0'}
- dev: true
+ regex@4.4.0: {}
- /tinyspy@1.0.2:
- resolution: {integrity: sha512-bSGlgwLBYf7PnUsQ6WOc6SJ3pGOcd+d8AA6EUnLDDM0kWEstC1JIlSZA3UNliDXhd9ABoS7hiRBDCu+XP/sf1Q==}
- engines: {node: '>=14.0.0'}
- dev: true
+ require-directory@2.1.1: {}
- /to-fast-properties@2.0.0:
- resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
- engines: {node: '>=4'}
- dev: false
+ require-from-string@2.0.2: {}
- /to-regex-range@5.0.1:
- resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
- engines: {node: '>=8.0'}
- dependencies:
- is-number: 7.0.0
+ resolve-from@4.0.0: {}
- /tough-cookie@4.1.2:
- resolution: {integrity: sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==}
- engines: {node: '>=6'}
+ resolve-from@5.0.0: {}
+
+ resolve@1.22.8:
dependencies:
- psl: 1.9.0
- punycode: 2.3.0
- universalify: 0.2.0
- url-parse: 1.5.10
- dev: true
+ is-core-module: 2.15.1
+ path-parse: 1.0.7
+ supports-preserve-symlinks-flag: 1.0.0
- /tr46@3.0.0:
- resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==}
- engines: {node: '>=12'}
+ restore-cursor@5.1.0:
dependencies:
- punycode: 2.3.0
- dev: true
+ onetime: 7.0.0
+ signal-exit: 4.1.0
- /trim-lines@3.0.1:
- resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
- dev: false
+ reusify@1.0.4: {}
- /trim-newlines@3.0.1:
- resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==}
- engines: {node: '>=8'}
- dev: true
+ rfdc@1.4.1: {}
+
+ rollup@4.25.0:
+ dependencies:
+ '@types/estree': 1.0.6
+ optionalDependencies:
+ '@rollup/rollup-android-arm-eabi': 4.25.0
+ '@rollup/rollup-android-arm64': 4.25.0
+ '@rollup/rollup-darwin-arm64': 4.25.0
+ '@rollup/rollup-darwin-x64': 4.25.0
+ '@rollup/rollup-freebsd-arm64': 4.25.0
+ '@rollup/rollup-freebsd-x64': 4.25.0
+ '@rollup/rollup-linux-arm-gnueabihf': 4.25.0
+ '@rollup/rollup-linux-arm-musleabihf': 4.25.0
+ '@rollup/rollup-linux-arm64-gnu': 4.25.0
+ '@rollup/rollup-linux-arm64-musl': 4.25.0
+ '@rollup/rollup-linux-powerpc64le-gnu': 4.25.0
+ '@rollup/rollup-linux-riscv64-gnu': 4.25.0
+ '@rollup/rollup-linux-s390x-gnu': 4.25.0
+ '@rollup/rollup-linux-x64-gnu': 4.25.0
+ '@rollup/rollup-linux-x64-musl': 4.25.0
+ '@rollup/rollup-win32-arm64-msvc': 4.25.0
+ '@rollup/rollup-win32-ia32-msvc': 4.25.0
+ '@rollup/rollup-win32-x64-msvc': 4.25.0
+ fsevents: 2.3.3
+
+ rrweb-cssom@0.7.1: {}
+
+ run-parallel@1.2.0:
+ dependencies:
+ queue-microtask: 1.2.3
- /trough@2.1.0:
- resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==}
- dev: false
+ safer-buffer@2.1.2: {}
- /ts-morph@17.0.1:
- resolution: {integrity: sha512-10PkHyXmrtsTvZSL+cqtJLTgFXkU43Gd0JCc0Rw6GchWbqKe0Rwgt1v3ouobTZwQzF1mGhDeAlWYBMGRV7y+3g==}
+ saxes@6.0.0:
dependencies:
- '@ts-morph/common': 0.18.1
- code-block-writer: 11.0.3
- dev: true
+ xmlchars: 2.2.0
- /ts-node@10.9.1(@types/node@18.11.18)(typescript@4.9.5):
- resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==}
- hasBin: true
- peerDependencies:
- '@swc/core': '>=1.2.50'
- '@swc/wasm': '>=1.2.50'
- '@types/node': '*'
- typescript: '>=2.7'
- peerDependenciesMeta:
- '@swc/core':
- optional: true
- '@swc/wasm':
- optional: true
+ scheduler@0.23.2:
dependencies:
- '@cspotcode/source-map-support': 0.8.1
- '@tsconfig/node10': 1.0.9
- '@tsconfig/node12': 1.0.11
- '@tsconfig/node14': 1.0.3
- '@tsconfig/node16': 1.0.3
- '@types/node': 18.11.18
- acorn: 8.8.2
- acorn-walk: 8.2.0
- arg: 4.1.3
- create-require: 1.1.1
- diff: 4.0.2
- make-error: 1.3.6
- typescript: 4.9.5
- v8-compile-cache-lib: 3.0.1
- yn: 3.1.1
-
- /tsconfck@2.0.2(typescript@4.9.5):
- resolution: {integrity: sha512-H3DWlwKpow+GpVLm/2cpmok72pwRr1YFROV3YzAmvzfGFiC1zEM/mc9b7+1XnrxuXtEbhJ7xUSIqjPFbedp7aQ==}
- engines: {node: ^14.13.1 || ^16 || >=18, pnpm: ^7.18.0}
- hasBin: true
- peerDependencies:
- typescript: ^4.3.5
- peerDependenciesMeta:
- typescript:
- optional: true
+ loose-envify: 1.4.0
+
+ search-insights@2.17.2: {}
+
+ semver@7.5.4:
+ dependencies:
+ lru-cache: 6.0.0
+
+ semver@7.6.3: {}
+
+ shebang-command@2.0.0:
dependencies:
- typescript: 4.9.5
- dev: true
+ shebang-regex: 3.0.0
- /tsconfig-resolver@3.0.1:
- resolution: {integrity: sha512-ZHqlstlQF449v8glscGRXzL6l2dZvASPCdXJRWG4gHEZlUVx2Jtmr+a2zeVG4LCsKhDXKRj5R3h0C/98UcVAQg==}
+ shebang-regex@3.0.0: {}
+
+ shiki@1.22.2:
dependencies:
- '@types/json5': 0.0.30
- '@types/resolve': 1.20.2
- json5: 2.2.3
- resolve: 1.22.1
- strip-bom: 4.0.0
- type-fest: 0.13.1
- dev: false
+ '@shikijs/core': 1.22.2
+ '@shikijs/engine-javascript': 1.22.2
+ '@shikijs/engine-oniguruma': 1.22.2
+ '@shikijs/types': 1.22.2
+ '@shikijs/vscode-textmate': 9.3.0
+ '@types/hast': 3.0.4
- /tslib@1.14.1:
- resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
- dev: false
+ siginfo@2.0.0: {}
- /tslib@2.5.0:
- resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==}
+ signal-exit@4.1.0: {}
- /tsutils@3.21.0(typescript@4.9.5):
- resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==}
- engines: {node: '>= 6'}
- peerDependencies:
- typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta'
+ slice-ansi@5.0.0:
dependencies:
- tslib: 1.14.1
- typescript: 4.9.5
- dev: false
+ ansi-styles: 6.2.1
+ is-fullwidth-code-point: 4.0.0
- /turbo-darwin-64@1.7.3:
- resolution: {integrity: sha512-7j9+j1CVztmdevnClT3rG/GRhULf3ukwmv+l48l8uwsXNI53zLso+UYMql6RsjZDbD6sESwh0CHeKNwGmOylFA==}
- cpu: [x64]
- os: [darwin]
- requiresBuild: true
- dev: true
- optional: true
+ slice-ansi@7.1.0:
+ dependencies:
+ ansi-styles: 6.2.1
+ is-fullwidth-code-point: 5.0.0
- /turbo-darwin-arm64@1.7.3:
- resolution: {integrity: sha512-puS9+pqpiy4MrIvWRBTg3qfO2+JPXR7reQcXQ7qUreuyAJnSw9H9/TIHjeK6FFxUfQbmruylPtH6dNpfcML9CA==}
- cpu: [arm64]
- os: [darwin]
- requiresBuild: true
- dev: true
- optional: true
+ source-map-js@1.2.1: {}
- /turbo-linux-64@1.7.3:
- resolution: {integrity: sha512-BnbpgcK8Wag6fhnff7tMaecswmFHN/T56VIDnjcwcJnK9H3jdwpjwZlmcDtkoslzjPj3VuqHyqLDMvSb3ejXSg==}
- cpu: [x64]
- os: [linux]
- requiresBuild: true
- dev: true
- optional: true
+ source-map@0.6.1: {}
- /turbo-linux-arm64@1.7.3:
- resolution: {integrity: sha512-+epY+0dfjmAJNZHfj7rID2hENRaeM3D0Ijqkhh/M53o46fQMwPNqI5ff9erh+f9r8sWuTpVnRlZeu7TE1P/Okw==}
- cpu: [arm64]
- os: [linux]
- requiresBuild: true
- dev: true
- optional: true
+ space-separated-tokens@2.0.2: {}
- /turbo-windows-64@1.7.3:
- resolution: {integrity: sha512-/2Z8WB4fASlq/diO6nhmHYuDCRPm3dkdUE6yhwQarXPOm936m4zj3xGQA2eSWMpvfst4xjVxxU7P7HOIOyWChA==}
- cpu: [x64]
- os: [win32]
- requiresBuild: true
- dev: true
- optional: true
+ speakingurl@14.0.1: {}
- /turbo-windows-arm64@1.7.3:
- resolution: {integrity: sha512-UD9Uhop42xj1l1ba5LRdwqRq1Of+RgqQuv+QMd1xOAZ2FXn/91uhkfLv+H4Pkiw7XdUohOxpj/FcOvjCiiUxGw==}
- cpu: [arm64]
- os: [win32]
- requiresBuild: true
- dev: true
- optional: true
+ split2@4.2.0: {}
- /turbo@1.7.3:
- resolution: {integrity: sha512-mrqo72vPQO6ykmARThaNP/KXPDuBDSqDXfkUxD8hX1ET3YSFbOWJixlHU32tPtiFIhScIKbEGShEVWBrLeM0wg==}
- hasBin: true
- requiresBuild: true
- optionalDependencies:
- turbo-darwin-64: 1.7.3
- turbo-darwin-arm64: 1.7.3
- turbo-linux-64: 1.7.3
- turbo-linux-arm64: 1.7.3
- turbo-windows-64: 1.7.3
- turbo-windows-arm64: 1.7.3
- dev: true
-
- /type-check@0.3.2:
- resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==}
- engines: {node: '>= 0.8.0'}
+ sprintf-js@1.0.3: {}
+
+ stackback@0.0.2: {}
+
+ std-env@3.8.0: {}
+
+ string-argv@0.3.2: {}
+
+ string-width@4.2.3:
dependencies:
- prelude-ls: 1.1.2
- dev: true
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
- /type-check@0.4.0:
- resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
- engines: {node: '>= 0.8.0'}
+ string-width@5.1.2:
dependencies:
- prelude-ls: 1.2.1
+ eastasianwidth: 0.2.0
+ emoji-regex: 9.2.2
+ strip-ansi: 7.1.0
- /type-detect@4.0.8:
- resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
- engines: {node: '>=4'}
- dev: true
+ string-width@7.2.0:
+ dependencies:
+ emoji-regex: 10.4.0
+ get-east-asian-width: 1.3.0
+ strip-ansi: 7.1.0
- /type-fest@0.13.1:
- resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==}
- engines: {node: '>=10'}
- dev: false
+ stringify-entities@4.0.4:
+ dependencies:
+ character-entities-html4: 2.1.0
+ character-entities-legacy: 3.0.0
- /type-fest@0.18.1:
- resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==}
- engines: {node: '>=10'}
- dev: true
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
- /type-fest@0.20.2:
- resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
- engines: {node: '>=10'}
+ strip-ansi@7.1.0:
+ dependencies:
+ ansi-regex: 6.1.0
- /type-fest@0.21.3:
- resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
- engines: {node: '>=10'}
- dev: true
+ strip-final-newline@3.0.0: {}
- /type-fest@0.6.0:
- resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==}
- engines: {node: '>=8'}
- dev: true
+ strip-json-comments@3.1.1: {}
- /type-fest@0.8.1:
- resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==}
- engines: {node: '>=8'}
- dev: true
+ superjson@2.2.1:
+ dependencies:
+ copy-anything: 3.0.5
- /type-fest@2.19.0:
- resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==}
- engines: {node: '>=12.20'}
- dev: false
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
- /typed-array-length@1.0.4:
- resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==}
+ supports-color@8.1.1:
dependencies:
- call-bind: 1.0.2
- for-each: 0.3.3
- is-typed-array: 1.1.10
- dev: false
+ has-flag: 4.0.0
- /typescript@4.8.4:
- resolution: {integrity: sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==}
- engines: {node: '>=4.2.0'}
- hasBin: true
- dev: true
+ supports-preserve-symlinks-flag@1.0.0: {}
- /typescript@4.9.5:
- resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
- engines: {node: '>=4.2.0'}
- hasBin: true
+ symbol-tree@3.2.4: {}
- /ufo@1.0.1:
- resolution: {integrity: sha512-boAm74ubXHY7KJQZLlXrtMz52qFvpsbOxDcZOnw/Wf+LS4Mmyu7JxmzD4tDLtUQtmZECypJ0FrCz4QIe6dvKRA==}
- dev: true
+ tabbable@6.2.0: {}
- /unbox-primitive@1.0.2:
- resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==}
+ test-exclude@7.0.1:
dependencies:
- call-bind: 1.0.2
- has-bigints: 1.0.2
- has-symbols: 1.0.3
- which-boxed-primitive: 1.0.2
- dev: false
+ '@istanbuljs/schema': 0.1.3
+ glob: 10.4.5
+ minimatch: 9.0.5
- /undici@5.16.0:
- resolution: {integrity: sha512-KWBOXNv6VX+oJQhchXieUznEmnJMqgXMbs0xxH2t8q/FUAWSJvOSr/rMaZKnX5RIVq7JDn0JbP4BOnKG2SGXLQ==}
- engines: {node: '>=12.18'}
- dependencies:
- busboy: 1.6.0
- dev: false
+ text-extensions@2.4.0: {}
- /unherit@3.0.1:
- resolution: {integrity: sha512-akOOQ/Yln8a2sgcLj4U0Jmx0R5jpIg2IUyRrWOzmEbjBtGzBdHtSeFKgoEcoH4KYIG/Pb8GQ/BwtYm0GCq1Sqg==}
- dev: false
+ text-table@0.2.0: {}
- /unified@10.1.2:
- resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==}
- dependencies:
- '@types/unist': 2.0.6
- bail: 2.0.2
- extend: 3.0.2
- is-buffer: 2.0.5
- is-plain-obj: 4.1.0
- trough: 2.1.0
- vfile: 5.3.6
- dev: false
+ through@2.3.8: {}
- /unist-util-generated@2.0.1:
- resolution: {integrity: sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==}
- dev: false
+ tinybench@2.9.0: {}
- /unist-util-is@5.2.0:
- resolution: {integrity: sha512-Glt17jWwZeyqrFqOK0pF1Ded5U3yzJnFr8CG1GMjCWTp9zDo2p+cmD6pWbZU8AgM5WU3IzRv6+rBwhzsGh6hBQ==}
- dev: false
+ tinyexec@0.3.1: {}
- /unist-util-modify-children@3.1.1:
- resolution: {integrity: sha512-yXi4Lm+TG5VG+qvokP6tpnk+r1EPwyYL04JWDxLvgvPV40jANh7nm3udk65OOWquvbMDe+PL9+LmkxDpTv/7BA==}
- dependencies:
- '@types/unist': 2.0.6
- array-iterate: 2.0.1
- dev: false
+ tinypool@1.0.1: {}
- /unist-util-position@4.0.4:
- resolution: {integrity: sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==}
- dependencies:
- '@types/unist': 2.0.6
- dev: false
+ tinyrainbow@1.2.0: {}
+
+ tinyspy@3.0.2: {}
+
+ tldts-core@6.1.60: {}
- /unist-util-stringify-position@3.0.3:
- resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==}
+ tldts@6.1.60:
dependencies:
- '@types/unist': 2.0.6
- dev: false
+ tldts-core: 6.1.60
- /unist-util-visit-children@2.0.2:
- resolution: {integrity: sha512-+LWpMFqyUwLGpsQxpumsQ9o9DG2VGLFrpz+rpVXYIEdPy57GSy5HioC0g3bg/8WP9oCLlapQtklOzQ8uLS496Q==}
+ to-regex-range@5.0.1:
dependencies:
- '@types/unist': 2.0.6
- dev: false
+ is-number: 7.0.0
- /unist-util-visit-parents@5.1.3:
- resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==}
+ tough-cookie@5.0.0:
dependencies:
- '@types/unist': 2.0.6
- unist-util-is: 5.2.0
- dev: false
+ tldts: 6.1.60
- /unist-util-visit@4.1.2:
- resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==}
+ tr46@5.0.0:
dependencies:
- '@types/unist': 2.0.6
- unist-util-is: 5.2.0
- unist-util-visit-parents: 5.1.3
- dev: false
+ punycode: 2.3.1
- /universalify@0.1.2:
- resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==}
- engines: {node: '>= 4.0.0'}
- dev: true
+ trim-lines@3.0.1: {}
- /universalify@0.2.0:
- resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==}
- engines: {node: '>= 4.0.0'}
- dev: true
+ ts-api-utils@1.4.0(typescript@5.6.3):
+ dependencies:
+ typescript: 5.6.3
- /universalify@2.0.0:
- resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==}
- engines: {node: '>= 10.0.0'}
- dev: true
+ tsconfck@3.1.4(typescript@5.6.3):
+ optionalDependencies:
+ typescript: 5.6.3
- /update-browserslist-db@1.0.10(browserslist@4.21.5):
- resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==}
- hasBin: true
- peerDependencies:
- browserslist: '>= 4.21.0'
+ type-check@0.4.0:
dependencies:
- browserslist: 4.21.5
- escalade: 3.1.1
- picocolors: 1.0.0
- dev: false
+ prelude-ls: 1.2.1
- /uri-js@4.4.1:
- resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+ typescript-eslint@8.13.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3):
dependencies:
- punycode: 2.3.0
+ '@typescript-eslint/eslint-plugin': 8.13.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3))(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3)
+ '@typescript-eslint/parser': 8.13.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3)
+ '@typescript-eslint/utils': 8.13.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3)
+ optionalDependencies:
+ typescript: 5.6.3
+ transitivePeerDependencies:
+ - eslint
+ - supports-color
- /url-parse@1.5.10:
- resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==}
- dependencies:
- querystringify: 2.2.0
- requires-port: 1.0.0
- dev: true
+ typescript@5.4.2: {}
- /util-deprecate@1.0.2:
- resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
+ typescript@5.6.3: {}
- /uvu@0.5.6:
- resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==}
- engines: {node: '>=8'}
- hasBin: true
+ ufo@1.5.4: {}
+
+ undici-types@6.19.8: {}
+
+ unicorn-magic@0.1.0: {}
+
+ unist-util-is@6.0.0:
dependencies:
- dequal: 2.0.3
- diff: 5.1.0
- kleur: 4.1.5
- sade: 1.8.1
- dev: false
+ '@types/unist': 3.0.3
- /v8-compile-cache-lib@3.0.1:
- resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==}
+ unist-util-position@5.0.0:
+ dependencies:
+ '@types/unist': 3.0.3
+
+ unist-util-stringify-position@4.0.0:
+ dependencies:
+ '@types/unist': 3.0.3
- /v8-to-istanbul@9.0.1:
- resolution: {integrity: sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==}
- engines: {node: '>=10.12.0'}
+ unist-util-visit-parents@6.0.1:
dependencies:
- '@jridgewell/trace-mapping': 0.3.17
- '@types/istanbul-lib-coverage': 2.0.4
- convert-source-map: 1.9.0
- dev: true
+ '@types/unist': 3.0.3
+ unist-util-is: 6.0.0
- /validate-npm-package-license@3.0.4:
- resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==}
+ unist-util-visit@5.0.0:
dependencies:
- spdx-correct: 3.1.1
- spdx-expression-parse: 3.0.1
- dev: true
+ '@types/unist': 3.0.3
+ unist-util-is: 6.0.0
+ unist-util-visit-parents: 6.0.1
- /validator@13.9.0:
- resolution: {integrity: sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==}
- engines: {node: '>= 0.10'}
- dev: true
+ universalify@0.1.2: {}
- /vfile-location@4.0.1:
- resolution: {integrity: sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==}
+ uri-js@4.4.1:
dependencies:
- '@types/unist': 2.0.6
- vfile: 5.3.6
- dev: false
+ punycode: 2.3.1
- /vfile-message@3.1.3:
- resolution: {integrity: sha512-0yaU+rj2gKAyEk12ffdSbBfjnnj+b1zqTBv3OQCTn8yEB02bsPizwdBPrLJjHnK+cU9EMMcUnNv938XcZIkmdA==}
+ vfile-message@4.0.2:
dependencies:
- '@types/unist': 2.0.6
- unist-util-stringify-position: 3.0.3
- dev: false
+ '@types/unist': 3.0.3
+ unist-util-stringify-position: 4.0.0
- /vfile@5.3.6:
- resolution: {integrity: sha512-ADBsmerdGBs2WYckrLBEmuETSPyTD4TuLxTrw0DvjirxW1ra4ZwkbzG8ndsv3Q57smvHxo677MHaQrY9yxH8cA==}
+ vfile@6.0.3:
dependencies:
- '@types/unist': 2.0.6
- is-buffer: 2.0.5
- unist-util-stringify-position: 3.0.3
- vfile-message: 3.1.3
- dev: false
+ '@types/unist': 3.0.3
+ vfile-message: 4.0.2
- /vite-node@0.28.4(@types/node@18.11.18):
- resolution: {integrity: sha512-KM0Q0uSG/xHHKOJvVHc5xDBabgt0l70y7/lWTR7Q0pR5/MrYxadT+y32cJOE65FfjGmJgxpVEEY+69btJgcXOQ==}
- engines: {node: '>=v14.16.0'}
- hasBin: true
+ vite-node@2.1.4(@types/node@22.9.0):
dependencies:
cac: 6.7.14
- debug: 4.3.4
- mlly: 1.1.0
- pathe: 1.1.0
- picocolors: 1.0.0
- source-map: 0.6.1
- source-map-support: 0.5.21
- vite: 4.1.1(@types/node@18.11.18)
+ debug: 4.3.7
+ pathe: 1.1.2
+ vite: 5.4.10(@types/node@22.9.0)
transitivePeerDependencies:
- '@types/node'
- less
+ - lightningcss
- sass
+ - sass-embedded
- stylus
- sugarss
- supports-color
- terser
- dev: true
- /vite-plugin-dts@1.7.2(@types/node@18.11.18)(vite@4.1.1):
- resolution: {integrity: sha512-55Jwfv6n8gAlRSVGCpIY13TCqadtaKex9d2mCbaSxMFAU06suMDsFhIch1x55eptpC2RpeiresqbTjhN2HSEtQ==}
- engines: {node: ^14.18.0 || >=16.0.0}
- peerDependencies:
- vite: '>=2.9.0'
- dependencies:
- '@microsoft/api-extractor': 7.34.2(@types/node@18.11.18)
- '@rollup/pluginutils': 5.0.2
- '@rushstack/node-core-library': 3.55.0(@types/node@18.11.18)
- debug: 4.3.4
- fast-glob: 3.2.12
- fs-extra: 10.1.0
- kolorist: 1.7.0
- ts-morph: 17.0.1
- vite: 4.1.1(@types/node@18.11.18)
+ vite-plugin-dts@4.3.0(@types/node@22.9.0)(rollup@4.25.0)(typescript@5.6.3)(vite@5.4.10(@types/node@22.9.0)):
+ dependencies:
+ '@microsoft/api-extractor': 7.47.11(@types/node@22.9.0)
+ '@rollup/pluginutils': 5.1.3(rollup@4.25.0)
+ '@volar/typescript': 2.4.10
+ '@vue/language-core': 2.1.6(typescript@5.6.3)
+ compare-versions: 6.1.1
+ debug: 4.3.7
+ kolorist: 1.8.0
+ local-pkg: 0.5.0
+ magic-string: 0.30.12
+ typescript: 5.6.3
+ optionalDependencies:
+ vite: 5.4.10(@types/node@22.9.0)
transitivePeerDependencies:
- '@types/node'
- rollup
- supports-color
- dev: true
- /vite-tsconfig-paths@4.0.5(typescript@4.9.5):
- resolution: {integrity: sha512-/L/eHwySFYjwxoYt1WRJniuK/jPv+WGwgRGBYx3leciR5wBeqntQpUE6Js6+TJemChc+ter7fDBKieyEWDx4yQ==}
+ vite-tsconfig-paths@5.1.2(typescript@5.6.3)(vite@5.4.10(@types/node@22.9.0)):
dependencies:
- debug: 4.3.4
+ debug: 4.3.7
globrex: 0.1.2
- tsconfck: 2.0.2(typescript@4.9.5)
+ tsconfck: 3.1.4(typescript@5.6.3)
+ optionalDependencies:
+ vite: 5.4.10(@types/node@22.9.0)
transitivePeerDependencies:
- supports-color
- typescript
- dev: true
- /vite@4.1.1(@types/node@18.11.18):
- resolution: {integrity: sha512-LM9WWea8vsxhr782r9ntg+bhSFS06FJgCvvB0+8hf8UWtvaiDagKYWXndjfX6kGl74keHJUcpzrQliDXZlF5yg==}
- engines: {node: ^14.18.0 || >=16.0.0}
- hasBin: true
- peerDependencies:
- '@types/node': '>= 14'
- less: '*'
- sass: '*'
- stylus: '*'
- sugarss: '*'
- terser: ^5.4.0
- peerDependenciesMeta:
- '@types/node':
- optional: true
- less:
- optional: true
- sass:
- optional: true
- stylus:
- optional: true
- sugarss:
- optional: true
- terser:
- optional: true
+ vite@5.4.10(@types/node@22.9.0):
dependencies:
- '@types/node': 18.11.18
- esbuild: 0.16.17
- postcss: 8.4.21
- resolve: 1.22.1
- rollup: 3.13.0
+ esbuild: 0.21.5
+ postcss: 8.4.48
+ rollup: 4.25.0
optionalDependencies:
- fsevents: 2.3.2
-
- /vitefu@0.2.4(vite@4.1.1):
- resolution: {integrity: sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==}
- peerDependencies:
- vite: ^3.0.0 || ^4.0.0
- peerDependenciesMeta:
- vite:
- optional: true
- dependencies:
- vite: 4.1.1(@types/node@18.11.18)
- dev: false
-
- /vitest@0.28.4(jsdom@21.1.0):
- resolution: {integrity: sha512-sfWIy0AdlbyGRhunm+TLQEJrFH9XuRPdApfubsyLcDbCRrUX717BRQKInTgzEfyl2Ipi1HWoHB84Nqtcwxogcg==}
- engines: {node: '>=v14.16.0'}
- hasBin: true
- peerDependencies:
- '@edge-runtime/vm': '*'
- '@vitest/browser': '*'
- '@vitest/ui': '*'
- happy-dom: '*'
- jsdom: '*'
- peerDependenciesMeta:
- '@edge-runtime/vm':
- optional: true
- '@vitest/browser':
- optional: true
- '@vitest/ui':
- optional: true
- happy-dom:
- optional: true
- jsdom:
- optional: true
- dependencies:
- '@types/chai': 4.3.4
- '@types/chai-subset': 1.3.3
- '@types/node': 18.11.18
- '@vitest/expect': 0.28.4
- '@vitest/runner': 0.28.4
- '@vitest/spy': 0.28.4
- '@vitest/utils': 0.28.4
- acorn: 8.8.2
- acorn-walk: 8.2.0
- cac: 6.7.14
- chai: 4.3.7
- debug: 4.3.4
- jsdom: 21.1.0
- local-pkg: 0.4.3
- pathe: 1.1.0
- picocolors: 1.0.0
- source-map: 0.6.1
- std-env: 3.3.2
- strip-literal: 1.0.1
- tinybench: 2.3.1
- tinypool: 0.3.1
- tinyspy: 1.0.2
- vite: 4.1.1(@types/node@18.11.18)
- vite-node: 0.28.4(@types/node@18.11.18)
- why-is-node-running: 2.2.2
+ '@types/node': 22.9.0
+ fsevents: 2.3.3
+
+ vitepress@1.5.0(@algolia/client-search@5.13.0)(@types/node@22.9.0)(@types/react@18.3.12)(postcss@8.4.48)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.2)(typescript@5.6.3):
+ dependencies:
+ '@docsearch/css': 3.7.0
+ '@docsearch/js': 3.7.0(@algolia/client-search@5.13.0)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.2)
+ '@iconify-json/simple-icons': 1.2.11
+ '@shikijs/core': 1.22.2
+ '@shikijs/transformers': 1.22.2
+ '@shikijs/types': 1.22.2
+ '@types/markdown-it': 14.1.2
+ '@vitejs/plugin-vue': 5.1.5(vite@5.4.10(@types/node@22.9.0))(vue@3.5.12(typescript@5.6.3))
+ '@vue/devtools-api': 7.6.4
+ '@vue/shared': 3.5.12
+ '@vueuse/core': 11.2.0(vue@3.5.12(typescript@5.6.3))
+ '@vueuse/integrations': 11.2.0(focus-trap@7.6.1)(vue@3.5.12(typescript@5.6.3))
+ focus-trap: 7.6.1
+ mark.js: 8.11.1
+ minisearch: 7.1.0
+ shiki: 1.22.2
+ vite: 5.4.10(@types/node@22.9.0)
+ vue: 3.5.12(typescript@5.6.3)
+ optionalDependencies:
+ postcss: 8.4.48
+ transitivePeerDependencies:
+ - '@algolia/client-search'
+ - '@types/node'
+ - '@types/react'
+ - '@vue/composition-api'
+ - async-validator
+ - axios
+ - change-case
+ - drauu
+ - fuse.js
+ - idb-keyval
+ - jwt-decode
+ - less
+ - lightningcss
+ - nprogress
+ - qrcode
+ - react
+ - react-dom
+ - sass
+ - sass-embedded
+ - search-insights
+ - sortablejs
+ - stylus
+ - sugarss
+ - terser
+ - typescript
+ - universal-cookie
+
+ vitest@2.1.4(@types/node@22.9.0)(jsdom@25.0.1):
+ dependencies:
+ '@vitest/expect': 2.1.4
+ '@vitest/mocker': 2.1.4(vite@5.4.10(@types/node@22.9.0))
+ '@vitest/pretty-format': 2.1.4
+ '@vitest/runner': 2.1.4
+ '@vitest/snapshot': 2.1.4
+ '@vitest/spy': 2.1.4
+ '@vitest/utils': 2.1.4
+ chai: 5.1.2
+ debug: 4.3.7
+ expect-type: 1.1.0
+ magic-string: 0.30.12
+ pathe: 1.1.2
+ std-env: 3.8.0
+ tinybench: 2.9.0
+ tinyexec: 0.3.1
+ tinypool: 1.0.1
+ tinyrainbow: 1.2.0
+ vite: 5.4.10(@types/node@22.9.0)
+ vite-node: 2.1.4(@types/node@22.9.0)
+ why-is-node-running: 2.3.0
+ optionalDependencies:
+ '@types/node': 22.9.0
+ jsdom: 25.0.1
transitivePeerDependencies:
- less
+ - lightningcss
+ - msw
- sass
+ - sass-embedded
- stylus
- sugarss
- supports-color
- terser
- dev: true
-
- /vscode-css-languageservice@6.2.3:
- resolution: {integrity: sha512-EAyhyIVHpEaf+GjtI+tVe7SekdoANfG0aubnspsQwak3Qkimn/97FpAufNyXk636ngW05pjNKAR9zyTCzo6avQ==}
- dependencies:
- '@vscode/l10n': 0.0.11
- vscode-languageserver-textdocument: 1.0.8
- vscode-languageserver-types: 3.17.2
- vscode-uri: 3.0.7
- dev: false
- /vscode-html-languageservice@5.0.4:
- resolution: {integrity: sha512-tvrySfpglu4B2rQgWGVO/IL+skvU7kBkQotRlxA7ocSyRXOZUd6GA13XHkxo8LPe07KWjeoBlN1aVGqdfTK4xA==}
- dependencies:
- '@vscode/l10n': 0.0.11
- vscode-languageserver-textdocument: 1.0.8
- vscode-languageserver-types: 3.17.2
- vscode-uri: 3.0.7
- dev: false
-
- /vscode-jsonrpc@8.0.2:
- resolution: {integrity: sha512-RY7HwI/ydoC1Wwg4gJ3y6LpU9FJRZAUnTYMXthqhFXXu77ErDd/xkREpGuk4MyYkk4a+XDWAMqe0S3KkelYQEQ==}
- engines: {node: '>=14.0.0'}
- dev: false
-
- /vscode-languageserver-protocol@3.17.2:
- resolution: {integrity: sha512-8kYisQ3z/SQ2kyjlNeQxbkkTNmVFoQCqkmGrzLH6A9ecPlgTbp3wDTnUNqaUxYr4vlAcloxx8zwy7G5WdguYNg==}
- dependencies:
- vscode-jsonrpc: 8.0.2
- vscode-languageserver-types: 3.17.2
- dev: false
-
- /vscode-languageserver-textdocument@1.0.8:
- resolution: {integrity: sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q==}
- dev: false
+ vscode-uri@3.0.8: {}
- /vscode-languageserver-types@3.17.2:
- resolution: {integrity: sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA==}
- dev: false
-
- /vscode-languageserver@8.0.2:
- resolution: {integrity: sha512-bpEt2ggPxKzsAOZlXmCJ50bV7VrxwCS5BI4+egUmure/oI/t4OlFzi/YNtVvY24A2UDOZAgwFGgnZPwqSJubkA==}
- hasBin: true
+ vue-demi@0.14.10(vue@3.5.12(typescript@5.6.3)):
dependencies:
- vscode-languageserver-protocol: 3.17.2
- dev: false
+ vue: 3.5.12(typescript@5.6.3)
- /vscode-oniguruma@1.7.0:
- resolution: {integrity: sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==}
- dev: false
-
- /vscode-textmate@6.0.0:
- resolution: {integrity: sha512-gu73tuZfJgu+mvCSy4UZwd2JXykjK9zAZsfmDeut5dx/1a7FeTk0XwJsSuqQn+cuMCGVbIBfl+s53X4T19DnzQ==}
- dev: false
-
- /vscode-uri@2.1.2:
- resolution: {integrity: sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A==}
- dev: false
-
- /vscode-uri@3.0.7:
- resolution: {integrity: sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==}
- dev: false
-
- /w3c-xmlserializer@4.0.0:
- resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==}
- engines: {node: '>=14'}
+ vue@3.5.12(typescript@5.6.3):
dependencies:
- xml-name-validator: 4.0.0
- dev: true
+ '@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/shared': 3.5.12
+ optionalDependencies:
+ typescript: 5.6.3
- /wcwidth@1.0.1:
- resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==}
+ w3c-xmlserializer@5.0.0:
dependencies:
- defaults: 1.0.4
- dev: false
+ xml-name-validator: 5.0.0
- /web-namespaces@2.0.1:
- resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==}
- dev: false
-
- /webidl-conversions@7.0.0:
- resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==}
- engines: {node: '>=12'}
- dev: true
+ webidl-conversions@7.0.0: {}
- /whatwg-encoding@2.0.0:
- resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==}
- engines: {node: '>=12'}
+ whatwg-encoding@3.1.1:
dependencies:
iconv-lite: 0.6.3
- dev: true
- /whatwg-mimetype@3.0.0:
- resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==}
- engines: {node: '>=12'}
- dev: true
+ whatwg-mimetype@4.0.0: {}
- /whatwg-url@11.0.0:
- resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==}
- engines: {node: '>=12'}
+ whatwg-url@14.0.0:
dependencies:
- tr46: 3.0.0
+ tr46: 5.0.0
webidl-conversions: 7.0.0
- dev: true
-
- /which-boxed-primitive@1.0.2:
- resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==}
- dependencies:
- is-bigint: 1.0.4
- is-boolean-object: 1.1.2
- is-number-object: 1.0.7
- is-string: 1.0.7
- is-symbol: 1.0.4
-
- /which-collection@1.0.1:
- resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==}
- dependencies:
- is-map: 2.0.2
- is-set: 2.0.2
- is-weakmap: 2.0.1
- is-weakset: 2.0.2
-
- /which-pm-runs@1.1.0:
- resolution: {integrity: sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==}
- engines: {node: '>=4'}
- dev: false
-
- /which-pm@2.0.0:
- resolution: {integrity: sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==}
- engines: {node: '>=8.15'}
- dependencies:
- load-yaml-file: 0.2.0
- path-exists: 4.0.0
- dev: false
-
- /which-typed-array@1.1.9:
- resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==}
- engines: {node: '>= 0.4'}
- dependencies:
- available-typed-arrays: 1.0.5
- call-bind: 1.0.2
- for-each: 0.3.3
- gopd: 1.0.1
- has-tostringtag: 1.0.0
- is-typed-array: 1.1.10
- /which@2.0.2:
- resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
- engines: {node: '>= 8'}
- hasBin: true
+ which@2.0.2:
dependencies:
isexe: 2.0.0
- /why-is-node-running@2.2.2:
- resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==}
- engines: {node: '>=8'}
- hasBin: true
+ why-is-node-running@2.3.0:
dependencies:
siginfo: 2.0.0
stackback: 0.0.2
- dev: true
-
- /widest-line@4.0.1:
- resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==}
- engines: {node: '>=12'}
- dependencies:
- string-width: 5.1.2
- dev: false
-
- /word-wrap@1.2.3:
- resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==}
- engines: {node: '>=0.10.0'}
- /wrap-ansi@6.2.0:
- resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
- engines: {node: '>=8'}
- dependencies:
- ansi-styles: 4.3.0
- string-width: 4.2.3
- strip-ansi: 6.0.1
- dev: true
+ word-wrap@1.2.5: {}
- /wrap-ansi@7.0.0:
- resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
- engines: {node: '>=10'}
+ wrap-ansi@7.0.0:
dependencies:
ansi-styles: 4.3.0
string-width: 4.2.3
strip-ansi: 6.0.1
- dev: true
- /wrap-ansi@8.1.0:
- resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
- engines: {node: '>=12'}
+ wrap-ansi@8.1.0:
dependencies:
ansi-styles: 6.2.1
string-width: 5.1.2
- strip-ansi: 7.0.1
- dev: false
-
- /wrappy@1.0.2:
- resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
-
- /ws@8.12.0:
- resolution: {integrity: sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig==}
- engines: {node: '>=10.0.0'}
- peerDependencies:
- bufferutil: ^4.0.1
- utf-8-validate: '>=5.0.2'
- peerDependenciesMeta:
- bufferutil:
- optional: true
- utf-8-validate:
- optional: true
- dev: true
-
- /xml-name-validator@4.0.0:
- resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==}
- engines: {node: '>=12'}
- dev: true
-
- /xmlchars@2.2.0:
- resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==}
- dev: true
-
- /xtend@4.0.2:
- resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
- engines: {node: '>=0.4'}
- dev: false
+ strip-ansi: 7.1.0
- /y18n@5.0.8:
- resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
- engines: {node: '>=10'}
- dev: true
+ wrap-ansi@9.0.0:
+ dependencies:
+ ansi-styles: 6.2.1
+ string-width: 7.2.0
+ strip-ansi: 7.1.0
- /yallist@3.1.1:
- resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
- dev: false
+ ws@8.18.0: {}
- /yallist@4.0.0:
- resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
+ xml-name-validator@5.0.0: {}
- /yaml@1.10.2:
- resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
- engines: {node: '>= 6'}
- dev: false
+ xmlchars@2.2.0: {}
- /yaml@2.2.1:
- resolution: {integrity: sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw==}
- engines: {node: '>= 14'}
+ y18n@5.0.8: {}
- /yargs-parser@20.2.9:
- resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==}
- engines: {node: '>=10'}
- dev: true
+ yallist@4.0.0: {}
- /yargs-parser@21.1.1:
- resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
- engines: {node: '>=12'}
+ yaml@2.5.1: {}
- /yargs@16.2.0:
- resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
- engines: {node: '>=10'}
- dependencies:
- cliui: 7.0.4
- escalade: 3.1.1
- get-caller-file: 2.0.5
- require-directory: 2.1.1
- string-width: 4.2.3
- y18n: 5.0.8
- yargs-parser: 20.2.9
- dev: true
+ yargs-parser@21.1.1: {}
- /yargs@17.6.2:
- resolution: {integrity: sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==}
- engines: {node: '>=12'}
+ yargs@17.7.2:
dependencies:
cliui: 8.0.1
- escalade: 3.1.1
+ escalade: 3.2.0
get-caller-file: 2.0.5
require-directory: 2.1.1
string-width: 4.2.3
y18n: 5.0.8
yargs-parser: 21.1.1
- dev: true
-
- /yn@3.1.1:
- resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==}
- engines: {node: '>=6'}
-
- /yocto-queue@0.1.0:
- resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
- engines: {node: '>=10'}
-
- /yocto-queue@1.0.0:
- resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==}
- engines: {node: '>=12.20'}
- dev: true
- /z-schema@5.0.5:
- resolution: {integrity: sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==}
- engines: {node: '>=8.0.0'}
- hasBin: true
- dependencies:
- lodash.get: 4.4.2
- lodash.isequal: 4.5.0
- validator: 13.9.0
- optionalDependencies:
- commander: 9.5.0
- dev: true
+ yocto-queue@0.1.0: {}
- /zod@3.20.2:
- resolution: {integrity: sha512-1MzNQdAvO+54H+EaK5YpyEy0T+Ejo/7YLHS93G3RnYWh5gaotGHwGeN/ZO687qEDU2y4CdStQYXVHIgrUl5UVQ==}
- dev: false
+ yocto-queue@1.1.1: {}
- /zwitch@2.0.4:
- resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
- dev: false
+ zwitch@2.0.4: {}
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
deleted file mode 100644
index 661bdfe..0000000
--- a/pnpm-workspace.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-packages:
- - "packages/*"
- - "docs"
diff --git a/prettier.config.js b/prettier.config.js
new file mode 100644
index 0000000..e947bf9
--- /dev/null
+++ b/prettier.config.js
@@ -0,0 +1,2 @@
+/** @type {import("prettier").Config} */
+export default {};
diff --git a/scripts/generate-navigation-json.js b/scripts/generate-navigation-json.js
deleted file mode 100644
index b6baf63..0000000
--- a/scripts/generate-navigation-json.js
+++ /dev/null
@@ -1,51 +0,0 @@
-import { readdirSync } from "fs";
-
-console.log(generateNavigationJson());
-
-function generateNavigationJson() {
- const ignoredFiles = getIgnoredFiles();
-
- const hooks = readdirSync("packages/hooks/src")
- .filter((file) => !ignoredFiles.includes(file))
- .map((file) => {
- const kebabName = file.replace(".ts", "");
- const camelName = kebabToCamel(kebabName);
- return {
- name: camelName,
- href: `/${kebabName}`,
- };
- });
-
- const navigation = generateNavigation(hooks);
- return JSON.stringify(navigation, null, 2);
-}
-
-function getIgnoredFiles() {
- return ["index.ts", "types", "use-storage.ts", "utils.ts"];
-}
-
-function kebabToCamel(str) {
- return str.replace(/-([a-z])/g, (g) => g[1].toUpperCase());
-}
-
-function generateNavigation(hooks) {
- return [
- {
- section: "Getting Started",
- links: [
- {
- name: "Introduction",
- href: "/introduction",
- },
- {
- name: "Installation",
- href: "/installation",
- },
- ],
- },
- {
- section: "Hooks",
- links: hooks,
- },
- ];
-}
diff --git a/packages/hooks/src/index.ts b/src/index.ts
similarity index 91%
rename from packages/hooks/src/index.ts
rename to src/index.ts
index 09ca806..b2891ee 100644
--- a/packages/hooks/src/index.ts
+++ b/src/index.ts
@@ -1,4 +1,3 @@
-export type { EventMap, EventType } from "./types/events";
export { useAsyncEffect, type AsyncEffectCallback } from "./use-async-effect";
export { useBoolean } from "./use-boolean";
export { useClickOutside } from "./use-click-outside";
@@ -15,9 +14,12 @@ export {
type UseDebounceEffectOptions,
} from "./use-debounce-effect";
export { useDocument } from "./use-document";
+export { useDocumentEventListener } from "./use-document-event-listener";
export { useElementSize } from "./use-element-size";
export {
useEventListener,
+ type EventMap,
+ type EventType,
type UseEventListenerOptions,
} from "./use-event-listener";
export { useFocusTrap } from "./use-focus-trap";
@@ -35,11 +37,14 @@ export { useMount } from "./use-mount";
export { usePrevious } from "./use-previous";
export { useRerender } from "./use-rerender";
export { useSafeLayoutEffect } from "./use-safe-layout-effect";
-export { useSelection, type UseSelectionOptions } from "./use-selection";
export {
useSessionStorage,
type UseSessionStorageOptions,
} from "./use-session-storage";
+export {
+ useTextSelection,
+ type UseTextSelectionOptions,
+} from "./use-text-selection";
export { useTheme, type Theme, type UseThemeOptions } from "./use-theme";
export { useThrottle, type UseThrottleOptions } from "./use-throttle";
export {
@@ -52,6 +57,5 @@ export { useToggle } from "./use-toggle";
export { useUnmount } from "./use-unmount";
export { useUnsafeOnceEffect } from "./use-unsafe-once-effect";
export { useUpdate } from "./use-update";
-export { useUpdateDeps } from "./use-update-deps";
export { useWindow } from "./use-window";
export { useWindowSize } from "./use-window-size";
diff --git a/src/types.ts b/src/types.ts
new file mode 100644
index 0000000..9fad9cd
--- /dev/null
+++ b/src/types.ts
@@ -0,0 +1,2 @@
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
+export type Fn = (...args: any[]) => any;
diff --git a/packages/hooks/src/use-async-effect.ts b/src/use-async-effect.ts
similarity index 52%
rename from packages/hooks/src/use-async-effect.ts
rename to src/use-async-effect.ts
index 7c35c8a..e8d6217 100644
--- a/packages/hooks/src/use-async-effect.ts
+++ b/src/use-async-effect.ts
@@ -1,21 +1,23 @@
import { useEffect, type DependencyList, type EffectCallback } from "react";
-import type { Async } from "./types/utils";
import { useLatest } from "./use-latest";
-export type AsyncEffectCallback = Async;
+/**
+ * Same as `EffectCallback`, but can return a promise.
+ */
+export type AsyncEffectCallback = (
+ ...args: Parameters
+) => Promise>;
/**
- * The same as `useEffect`, but for async functions.
+ * Same as `useEffect`, but can accept an async function.
*/
export function useAsyncEffect(
effect: AsyncEffectCallback,
- deps?: DependencyList
+ deps?: DependencyList,
) {
const effectRef = useLatest(effect);
useEffect(() => {
effectRef.current();
-
- // eslint-disable-next-line react-hooks/exhaustive-deps
}, deps);
}
diff --git a/src/use-boolean.ts b/src/use-boolean.ts
new file mode 100644
index 0000000..d46b589
--- /dev/null
+++ b/src/use-boolean.ts
@@ -0,0 +1,15 @@
+import { useState } from "react";
+
+/**
+ * Use a boolean value.
+ */
+export function useBoolean(initialValue = false) {
+ const [value, setValue] = useState(initialValue);
+
+ const setTrue = () => setValue(true);
+ const setFalse = () => setValue(false);
+ const toggle = () => setValue((value) => !value);
+ const reset = () => setValue(initialValue);
+
+ return { value, set: setValue, setTrue, setFalse, toggle, reset };
+}
diff --git a/src/use-click-outside.ts b/src/use-click-outside.ts
new file mode 100644
index 0000000..636943c
--- /dev/null
+++ b/src/use-click-outside.ts
@@ -0,0 +1,29 @@
+import type { RefObject } from "react";
+import { useDocumentEventListener } from "./use-document-event-listener";
+import { useLatest } from "./use-latest";
+
+/**
+ * Listen to click events outside of a node.
+ */
+export function useClickOutside(
+ ref: RefObject,
+ callback: (event: MouseEvent, target: Target) => void,
+) {
+ const callbackRef = useLatest(callback);
+
+ useDocumentEventListener("mousedown", (event) => {
+ const target = ref.current;
+
+ if (!target) {
+ return;
+ }
+
+ const isClickInside = target.contains(event.target as Node);
+
+ if (isClickInside) {
+ return;
+ }
+
+ callbackRef.current(event, target);
+ });
+}
diff --git a/src/use-clipboard-text.ts b/src/use-clipboard-text.ts
new file mode 100644
index 0000000..3146d96
--- /dev/null
+++ b/src/use-clipboard-text.ts
@@ -0,0 +1,64 @@
+import { useEffect, useState } from "react";
+import { useDocumentEventListener } from "./use-document-event-listener";
+
+export type UseClipboardTextOptions = {
+ readOnMount?: boolean;
+};
+
+/**
+ * Use the text on user's clipboard.
+ */
+export function useClipboardText(options: UseClipboardTextOptions = {}) {
+ const { readOnMount = true } = options;
+
+ const [text, setText] = useState("");
+
+ const [error, setError] = useState(null);
+
+ const read = async () => {
+ try {
+ const text = await navigator.clipboard.readText();
+
+ setText(text);
+ setError(null);
+ } catch (error) {
+ if (error instanceof Error) {
+ setError(error);
+ return;
+ }
+
+ setError(new Error("Failed to read from clipboard", { cause: error }));
+ }
+ };
+
+ const write = async (text: string) => {
+ try {
+ await navigator.clipboard.writeText(text);
+
+ setText(text);
+ setError(null);
+ } catch (error) {
+ if (error instanceof Error) {
+ setError(error);
+ return;
+ }
+
+ setError(new Error("Failed to write to clipboard", { cause: error }));
+ }
+ };
+
+ useEffect(() => {
+ if (!readOnMount) {
+ return;
+ }
+
+ read();
+ }, [readOnMount]);
+
+ useDocumentEventListener("cut", read);
+ useDocumentEventListener("copy", read);
+
+ // TODO: Visibility change event listener
+
+ return { text, error, write };
+}
diff --git a/packages/hooks/src/use-const-fn.ts b/src/use-const-fn.ts
similarity index 50%
rename from packages/hooks/src/use-const-fn.ts
rename to src/use-const-fn.ts
index 5871ad2..a9070a4 100644
--- a/packages/hooks/src/use-const-fn.ts
+++ b/src/use-const-fn.ts
@@ -1,10 +1,9 @@
import { useCallback } from "react";
-import type { Fn } from "./types/utils";
+import type { Fn } from "./types";
/**
- * Make a function constant.
+ * Use an immutable function, which stays the same across re-renders.
*/
export function useConstFn(fn: T) {
- // eslint-disable-next-line react-hooks/exhaustive-deps
return useCallback(fn, []);
}
diff --git a/src/use-const.ts b/src/use-const.ts
new file mode 100644
index 0000000..a132c3c
--- /dev/null
+++ b/src/use-const.ts
@@ -0,0 +1,8 @@
+import { useMemo } from "react";
+
+/**
+ * Use an immutable value, which stays the same across re-renders.
+ */
+export function useConst(factory: () => T) {
+ return useMemo(factory, []);
+}
diff --git a/packages/hooks/src/use-counter.ts b/src/use-counter.ts
similarity index 50%
rename from packages/hooks/src/use-counter.ts
rename to src/use-counter.ts
index 6535c87..06b3ecf 100644
--- a/packages/hooks/src/use-counter.ts
+++ b/src/use-counter.ts
@@ -3,14 +3,14 @@ import { useState } from "react";
/**
* Use a counter.
*/
-export function useCounter(defaultValue = 0) {
- const [count, setCount] = useState(defaultValue);
+export function useCounter(initialCount = 0) {
+ const [count, setCount] = useState(initialCount);
const increment = () => setCount((count) => count + 1);
const decrement = () => setCount((count) => count - 1);
- const incrementBy = (value: number) => setCount((count) => count + value);
- const decrementBy = (value: number) => setCount((count) => count - value);
- const reset = () => setCount(defaultValue);
+ const incrementBy = (delta: number) => setCount((count) => count + delta);
+ const decrementBy = (delta: number) => setCount((count) => count - delta);
+ const reset = () => setCount(initialCount);
return {
count,
diff --git a/packages/hooks/src/use-debounce-effect.ts b/src/use-debounce-effect.ts
similarity index 82%
rename from packages/hooks/src/use-debounce-effect.ts
rename to src/use-debounce-effect.ts
index 12a7193..947351f 100644
--- a/packages/hooks/src/use-debounce-effect.ts
+++ b/src/use-debounce-effect.ts
@@ -17,11 +17,12 @@ export type UseDebounceEffectOptions = {
export function useDebounceEffect(
effect: EffectCallback,
deps: DependencyList = [],
- options: UseDebounceEffectOptions = {}
+ options: UseDebounceEffectOptions = {},
) {
const { timeout = 500, onMount = false } = options;
const effectRef = useLatest(effect);
+
const shouldSkipRef = useRef(true);
useEffect(() => {
@@ -31,8 +32,7 @@ export function useDebounceEffect(
}
const timer = setTimeout(effectRef.current, timeout);
- return () => clearTimeout(timer);
- // eslint-disable-next-line react-hooks/exhaustive-deps
- }, [effectRef, ...deps, timeout, onMount]);
+ return () => clearTimeout(timer);
+ }, [...deps, timeout, onMount]);
}
diff --git a/src/use-debounce.ts b/src/use-debounce.ts
new file mode 100644
index 0000000..fdfbb1a
--- /dev/null
+++ b/src/use-debounce.ts
@@ -0,0 +1,18 @@
+import { useState } from "react";
+import { useDebounceEffect } from "./use-debounce-effect";
+
+export type UseDebounceOptions = {
+ timeout?: number;
+ onMount?: boolean;
+};
+
+/**
+ * Debounce a value.
+ */
+export function useDebounce(value: T, options: UseDebounceOptions = {}) {
+ const [debouncedValue, setDebouncedValue] = useState(value);
+
+ useDebounceEffect(() => setDebouncedValue(value), [value], options);
+
+ return debouncedValue;
+}
diff --git a/src/use-document-event-listener.ts b/src/use-document-event-listener.ts
new file mode 100644
index 0000000..5a89feb
--- /dev/null
+++ b/src/use-document-event-listener.ts
@@ -0,0 +1,18 @@
+import { useDocument } from "./use-document";
+import {
+ useEventListener,
+ type UseEventListenerOptions,
+} from "./use-event-listener";
+
+/**
+ * Listen to events on the `document` object.
+ */
+export function useDocumentEventListener(
+ type: Type,
+ callback: (event: DocumentEventMap[Type], document: Document) => void,
+ options: UseEventListenerOptions = {},
+) {
+ const documentRef = useDocument();
+
+ useEventListener(documentRef, type, callback, options);
+}
diff --git a/packages/hooks/src/use-document.ts b/src/use-document.ts
similarity index 61%
rename from packages/hooks/src/use-document.ts
rename to src/use-document.ts
index d321b17..e6075e6 100644
--- a/packages/hooks/src/use-document.ts
+++ b/src/use-document.ts
@@ -1,4 +1,5 @@
-import { useEffect, useRef } from "react";
+import { useRef } from "react";
+import { useMount } from "./use-mount";
/**
* Use `document` object.
@@ -6,9 +7,9 @@ import { useEffect, useRef } from "react";
export function useDocument() {
const ref = useRef(null);
- useEffect(() => {
+ useMount(() => {
ref.current = document;
- }, []);
+ });
return ref;
}
diff --git a/src/use-element-size.ts b/src/use-element-size.ts
new file mode 100644
index 0000000..3fe54ba
--- /dev/null
+++ b/src/use-element-size.ts
@@ -0,0 +1,35 @@
+import { useState, type RefObject } from "react";
+import { useMount } from "./use-mount";
+
+/**
+ * Use the size of an element.
+ */
+export function useElementSize(ref: RefObject) {
+ const [width, setWidth] = useState(0);
+ const [height, setHeight] = useState(0);
+
+ useMount(() => {
+ const target = ref.current;
+
+ if (!target) {
+ return;
+ }
+
+ const observer = new ResizeObserver(([entry]) => {
+ if (!entry) {
+ return;
+ }
+
+ const { clientWidth, clientHeight } = entry.target;
+
+ setWidth(clientWidth);
+ setHeight(clientHeight);
+ });
+
+ observer.observe(target);
+
+ return () => observer.disconnect();
+ });
+
+ return { width, height };
+}
diff --git a/src/use-event-listener.ts b/src/use-event-listener.ts
new file mode 100644
index 0000000..6042fc5
--- /dev/null
+++ b/src/use-event-listener.ts
@@ -0,0 +1,190 @@
+import { useEffect, type DependencyList, type RefObject } from "react";
+import { useLatest } from "./use-latest";
+
+export type UseEventListenerOptions = AddEventListenerOptions & {
+ extraDeps?: DependencyList;
+};
+
+/**
+ * Listen to any events.
+ */
+export function useEventListener<
+ Target extends EventTarget,
+ Type extends EventType,
+>(
+ ref: RefObject,
+ type: Type,
+ callback: (event: EventMap[Type], target: Target) => void,
+ options: UseEventListenerOptions = {},
+) {
+ const {
+ capture = false,
+ once = false,
+ passive = false,
+ extraDeps = [],
+ } = options;
+
+ const callbackRef = useLatest(callback);
+
+ useEffect(() => {
+ const target = ref.current;
+
+ if (!target) {
+ return;
+ }
+
+ const listener: EventListener = (event) =>
+ callbackRef.current(event as EventMap[Type], target);
+
+ target.addEventListener(type, listener, { capture, once, passive });
+
+ return () => target.removeEventListener(type, listener);
+ }, [type, capture, once, passive, ...extraDeps]);
+}
+
+export type EventMap =
+ Target extends HTMLVideoElement // -> HTMLMediaElement -> HTMLElement -> Element -> Node -> EventTarget
+ ? HTMLVideoElementEventMap
+ : Target extends SVGSVGElement // -> SVGGraphicsElement -> SVGElement -> Element -> Node -> EventTarget
+ ? SVGSVGElementEventMap
+ : Target extends HTMLMediaElement // -> HTMLElement -> Element -> Node -> EventTarget
+ ? HTMLMediaElementEventMap
+ : Target extends HTMLBodyElement // -> HTMLElement -> Element -> Node -> EventTarget
+ ? HTMLBodyElementEventMap
+ : Target extends HTMLElement // -> Element -> Node -> EventTarget
+ ? HTMLElementEventMap
+ : Target extends MathMLElement // -> Element -> Node -> EventTarget
+ ? MathMLElementEventMap
+ : Target extends SVGElement // -> Element -> Node -> EventTarget
+ ? SVGElementEventMap
+ : Target extends ShadowRoot // -> DocumentFragment -> Node -> EventTarget
+ ? ShadowRootEventMap
+ : Target extends Document // -> Node -> EventTarget
+ ? DocumentEventMap
+ : Target extends Element // -> Node -> EventTarget
+ ? ElementEventMap
+ : Target extends IDBOpenDBRequest // -> IDBRequest -> EventTarget
+ ? IDBOpenDBRequestEventMap
+ : Target extends MIDIInput // -> MIDIPort -> EventTarget
+ ? MIDIInputEventMap
+ : Target extends OfflineAudioContext // -> AudioContext -> EventTarget
+ ? OfflineAudioContextEventMap
+ : Target extends XMLHttpRequest // -> XMLHttpRequestEventTarget -> EventTarget
+ ? XMLHttpRequestEventMap
+ : Target extends AbortSignal // -> EventTarget
+ ? AbortSignalEventMap
+ : Target extends Animation // -> EventTarget
+ ? AnimationEventMap
+ : Target extends AudioScheduledSourceNode // -> EventTarget
+ ? AudioScheduledSourceNodeEventMap
+ : Target extends AudioWorkletNode // -> EventTarget
+ ? AudioWorkletNodeEventMap
+ : Target extends BaseAudioContext // -> EventTarget
+ ? BaseAudioContextEventMap
+ : Target extends BroadcastChannel // -> EventTarget
+ ? BroadcastChannelEventMap
+ : Target extends EventSource // -> EventTarget
+ ? EventSourceEventMap
+ : Target extends FileReader // -> EventTarget
+ ? FileReaderEventMap
+ : Target extends FontFaceSet // -> EventTarget
+ ? FontFaceSetEventMap
+ : Target extends IDBDatabase // -> EventTarget
+ ? IDBDatabaseEventMap
+ : Target extends IDBRequest // -> EventTarget
+ ? IDBRequestEventMap
+ : Target extends IDBTransaction // -> EventTarget
+ ? IDBTransactionEventMap
+ : Target extends MIDIAccess // -> EventTarget
+ ? MIDIAccessEventMap
+ : Target extends MIDIPort // -> EventTarget
+ ? MIDIPortEventMap
+ : Target extends MediaDevices // -> EventTarget
+ ? MediaDevicesEventMap
+ : Target extends MediaKeySession // -> EventTarget
+ ? MediaKeySessionEventMap
+ : Target extends MediaQueryList // -> EventTarget
+ ? MediaQueryListEventMap
+ : Target extends MediaRecorder // -> EventTarget
+ ? MediaRecorderEventMap
+ : Target extends MediaSource // -> EventTarget
+ ? MediaSourceEventMap
+ : Target extends MediaStream // -> EventTarget
+ ? MediaStreamEventMap
+ : Target extends MediaStreamTrack // -> EventTarget
+ ? MediaStreamTrackEventMap
+ : Target extends MessagePort // -> EventTarget
+ ? MessagePortEventMap
+ : Target extends Notification // -> EventTarget
+ ? NotificationEventMap
+ : Target extends OffscreenCanvas // -> EventTarget
+ ? OffscreenCanvasEventMap
+ : Target extends PaymentRequest // -> EventTarget
+ ? PaymentRequestEventMap
+ : Target extends Performance // -> EventTarget
+ ? PerformanceEventMap
+ : Target extends PermissionStatus // -> EventTarget
+ ? PermissionStatusEventMap
+ : Target extends PictureInPictureWindow // -> EventTarget
+ ? PictureInPictureWindowEventMap
+ : Target extends RTCDTMFSender // -> EventTarget
+ ? RTCDTMFSenderEventMap
+ : Target extends RTCDataChannel // -> EventTarget
+ ? RTCDataChannelEventMap
+ : Target extends RTCDtlsTransport // -> EventTarget
+ ? RTCDtlsTransportEventMap
+ : Target extends RTCIceTransport // -> EventTarget
+ ? RTCIceTransportEventMap
+ : Target extends RTCPeerConnection // -> EventTarget
+ ? RTCPeerConnectionEventMap
+ : Target extends RTCSctpTransport // -> EventTarget
+ ? RTCSctpTransportEventMap
+ : Target extends RemotePlayback // -> EventTarget
+ ? RemotePlaybackEventMap
+ : Target extends ScreenOrientation // -> EventTarget
+ ? ScreenOrientationEventMap
+ : Target extends ServiceWorker // -> EventTarget
+ ? ServiceWorkerEventMap
+ : Target extends ServiceWorkerContainer // -> EventTarget
+ ? ServiceWorkerContainerEventMap
+ : Target extends ServiceWorkerRegistration // -> EventTarget
+ ? ServiceWorkerRegistrationEventMap
+ : Target extends SourceBuffer // -> EventTarget
+ ? SourceBufferEventMap
+ : Target extends SourceBufferList // -> EventTarget
+ ? SourceBufferListEventMap
+ : Target extends SpeechSynthesis // -> EventTarget
+ ? SpeechSynthesisEventMap
+ : Target extends SpeechSynthesisUtterance // -> EventTarget
+ ? SpeechSynthesisUtteranceEventMap
+ : Target extends TextTrack // -> EventTarget
+ ? TextTrackEventMap
+ : Target extends TextTrackCue // -> EventTarget
+ ? TextTrackCueEventMap
+ : Target extends TextTrackList // -> EventTarget
+ ? TextTrackListEventMap
+ : Target extends VideoDecoder // -> EventTarget
+ ? VideoDecoderEventMap
+ : Target extends VideoEncoder // -> EventTarget
+ ? VideoEncoderEventMap
+ : Target extends VisualViewport // -> EventTarget
+ ? VisualViewportEventMap
+ : Target extends WakeLockSentinel // -> EventTarget
+ ? WakeLockSentinelEventMap
+ : Target extends WebSocket // -> EventTarget
+ ? WebSocketEventMap
+ : Target extends Window // -> EventTarget
+ ? WindowEventMap
+ : Target extends Worker // -> EventTarget
+ ? WorkerEventMap
+ : Target extends XMLHttpRequestEventTarget // -> EventTarget
+ ? XMLHttpRequestEventTargetEventMap
+ : Record<
+ string,
+ Event
+ >;
+
+export type EventType = Extract<
+ keyof EventMap,
+ string
+>;
diff --git a/src/use-focus-trap.ts b/src/use-focus-trap.ts
new file mode 100644
index 0000000..ab236de
--- /dev/null
+++ b/src/use-focus-trap.ts
@@ -0,0 +1,44 @@
+import type { RefObject } from "react";
+import { useEventListener } from "./use-event-listener";
+
+/**
+ * Trap tab focus between two HTML elements.
+ */
+export function useFocusTrap(
+ firstRef: RefObject,
+ lastRef: RefObject,
+) {
+ useEventListener(firstRef, "keydown", (event) => {
+ const last = lastRef.current;
+
+ if (!last) {
+ return;
+ }
+
+ const isShiftTab = event.shiftKey && event.code === "Tab";
+
+ if (!isShiftTab) {
+ return;
+ }
+
+ event.preventDefault();
+ last.focus();
+ });
+
+ useEventListener(lastRef, "keydown", (event) => {
+ const first = firstRef.current;
+
+ if (!first) {
+ return;
+ }
+
+ const isTab = !event.shiftKey && event.code === "Tab";
+
+ if (!isTab) {
+ return;
+ }
+
+ event.preventDefault();
+ first.focus();
+ });
+}
diff --git a/packages/hooks/src/use-hover.ts b/src/use-hover.ts
similarity index 89%
rename from packages/hooks/src/use-hover.ts
rename to src/use-hover.ts
index 30af68f..21ca759 100644
--- a/packages/hooks/src/use-hover.ts
+++ b/src/use-hover.ts
@@ -2,7 +2,7 @@ import { useState, type RefObject } from "react";
import { useEventListener } from "./use-event-listener";
/**
- * Listen for hover events on an element.
+ * Listen to hover events on an HTML element.
*/
export function useHover(ref: RefObject) {
const [isHovering, setIsHovering] = useState(false);
diff --git a/src/use-interval.ts b/src/use-interval.ts
new file mode 100644
index 0000000..7903b82
--- /dev/null
+++ b/src/use-interval.ts
@@ -0,0 +1,16 @@
+import { useEffect } from "react";
+import type { Fn } from "./types";
+import { useLatest } from "./use-latest";
+
+/**
+ * Run a function at a regular interval.
+ */
+export function useInterval(fn: Fn, timeout = 500) {
+ const fnRef = useLatest(fn);
+
+ useEffect(() => {
+ const timer = setInterval(fnRef.current, timeout);
+
+ return () => clearInterval(timer);
+ }, [timeout]);
+}
diff --git a/src/use-is-mounted.ts b/src/use-is-mounted.ts
new file mode 100644
index 0000000..012e781
--- /dev/null
+++ b/src/use-is-mounted.ts
@@ -0,0 +1,20 @@
+import { useRef } from "react";
+import { useMount } from "./use-mount";
+import { useUnmount } from "./use-unmount";
+
+/**
+ * Check if the component is mounted.
+ */
+export function useIsMounted() {
+ const isMountedRef = useRef(false);
+
+ useMount(() => {
+ isMountedRef.current = true;
+ });
+
+ useUnmount(() => {
+ isMountedRef.current = false;
+ });
+
+ return isMountedRef;
+}
diff --git a/src/use-keydown.ts b/src/use-keydown.ts
new file mode 100644
index 0000000..05adaae
--- /dev/null
+++ b/src/use-keydown.ts
@@ -0,0 +1,40 @@
+import { useDocumentEventListener } from "./use-document-event-listener";
+import { useLatest } from "./use-latest";
+
+export type ModifierKeys = {
+ ctrl?: boolean;
+ shift?: boolean;
+ alt?: boolean;
+ meta?: boolean;
+};
+
+/**
+ * Listen to keydown events.
+ */
+export function useKeydown(
+ key: string,
+ callback: (event: KeyboardEvent, document: Document) => void,
+ modifier: ModifierKeys = {},
+) {
+ const { ctrl = false, shift = false, alt = false, meta = false } = modifier;
+
+ const callbackRef = useLatest(callback);
+
+ useDocumentEventListener(
+ "keydown",
+ (event, document) => {
+ if (
+ event.key !== key ||
+ event.ctrlKey !== ctrl ||
+ event.shiftKey !== shift ||
+ event.altKey !== alt ||
+ event.metaKey !== meta
+ ) {
+ return;
+ }
+
+ callbackRef.current(event, document);
+ },
+ { extraDeps: [key, ctrl, shift, alt, meta] },
+ );
+}
diff --git a/packages/hooks/src/use-latest.ts b/src/use-latest.ts
similarity index 99%
rename from packages/hooks/src/use-latest.ts
rename to src/use-latest.ts
index baba241..edfd4f4 100644
--- a/packages/hooks/src/use-latest.ts
+++ b/src/use-latest.ts
@@ -5,6 +5,8 @@ import { useRef } from "react";
*/
export function useLatest(value: T) {
const ref = useRef(value);
+
ref.current = value;
+
return ref;
}
diff --git a/src/use-local-storage.ts b/src/use-local-storage.ts
new file mode 100644
index 0000000..6f1d7a6
--- /dev/null
+++ b/src/use-local-storage.ts
@@ -0,0 +1,13 @@
+import { useStorage, type UseStorageOptions } from "./use-storage";
+
+export type UseLocalStorageOptions = Omit, "type">;
+
+/**
+ * Use local storage.
+ */
+export function useLocalStorage(
+ key: string,
+ options: UseLocalStorageOptions = {},
+) {
+ return useStorage(key, { type: "local", ...options });
+}
diff --git a/packages/hooks/src/use-media-query.ts b/src/use-media-query.ts
similarity index 83%
rename from packages/hooks/src/use-media-query.ts
rename to src/use-media-query.ts
index 7b24105..713e627 100644
--- a/packages/hooks/src/use-media-query.ts
+++ b/src/use-media-query.ts
@@ -2,23 +2,26 @@ import { useEffect, useRef, useState } from "react";
import { useEventListener } from "./use-event-listener";
/**
- * Manage the result of a media query.
+ * Use the result of a media query.
*/
export function useMediaQuery(query: string) {
const [isMatched, setIsMatched] = useState(false);
+
const mediaQueryListRef = useRef(null);
useEffect(() => {
const mediaQueryList = matchMedia(query);
+
mediaQueryListRef.current = mediaQueryList;
+
setIsMatched(mediaQueryList.matches);
}, [query]);
useEventListener(
mediaQueryListRef,
"change",
- (e) => setIsMatched(e.matches),
- { extraDeps: [query] }
+ (event) => setIsMatched(event.matches),
+ { extraDeps: [query] },
);
return isMatched;
diff --git a/packages/hooks/src/use-mount.ts b/src/use-mount.ts
similarity index 56%
rename from packages/hooks/src/use-mount.ts
rename to src/use-mount.ts
index 79e8d42..cdc8d26 100644
--- a/packages/hooks/src/use-mount.ts
+++ b/src/use-mount.ts
@@ -1,9 +1,8 @@
import { useEffect, type EffectCallback } from "react";
/**
- * Trigger effect after the component is mounted.
+ * Trigger an effect only after the component is mounted.
*/
export function useMount(effect: EffectCallback) {
- // eslint-disable-next-line react-hooks/exhaustive-deps
useEffect(effect, []);
}
diff --git a/packages/hooks/src/use-previous.ts b/src/use-previous.ts
similarity index 66%
rename from packages/hooks/src/use-previous.ts
rename to src/use-previous.ts
index d51230a..f8adfad 100644
--- a/packages/hooks/src/use-previous.ts
+++ b/src/use-previous.ts
@@ -3,8 +3,12 @@ import { useRef } from "react";
/**
* Use the previous value of a state.
*/
-export function usePrevious(value: T, equalFn = (a: T, b: T) => a === b) {
- const previousRef = useRef(undefined);
+export function usePrevious(
+ value: T,
+ equalFn = (old: T, now: T) => old === now,
+) {
+ const previousRef = useRef(null);
+
const currentRef = useRef(value);
if (!equalFn(currentRef.current, value)) {
diff --git a/packages/hooks/src/use-rerender.ts b/src/use-rerender.ts
similarity index 99%
rename from packages/hooks/src/use-rerender.ts
rename to src/use-rerender.ts
index fbc017e..5f62f27 100644
--- a/packages/hooks/src/use-rerender.ts
+++ b/src/use-rerender.ts
@@ -5,6 +5,7 @@ import { useState } from "react";
*/
export function useRerender() {
const [, setState] = useState({});
+
const rerender = () => setState({});
return rerender;
diff --git a/packages/hooks/src/use-safe-layout-effect.ts b/src/use-safe-layout-effect.ts
similarity index 100%
rename from packages/hooks/src/use-safe-layout-effect.ts
rename to src/use-safe-layout-effect.ts
diff --git a/src/use-session-storage.ts b/src/use-session-storage.ts
new file mode 100644
index 0000000..6898131
--- /dev/null
+++ b/src/use-session-storage.ts
@@ -0,0 +1,13 @@
+import { useStorage, type UseStorageOptions } from "./use-storage";
+
+export type UseSessionStorageOptions = Omit, "type">;
+
+/**
+ * Use session storage.
+ */
+export function useSessionStorage(
+ key: string,
+ options: UseSessionStorageOptions = {},
+) {
+ return useStorage(key, { type: "session", ...options });
+}
diff --git a/src/use-storage.ts b/src/use-storage.ts
new file mode 100644
index 0000000..28c544b
--- /dev/null
+++ b/src/use-storage.ts
@@ -0,0 +1,75 @@
+import { useEffect, useState } from "react";
+import { useLatest } from "./use-latest";
+
+export type StorageType = "local" | "session";
+
+export type UseStorageOptions = {
+ type: StorageType;
+ serializer?: (value: T) => string;
+ deserializer?: (value: string) => T;
+};
+
+/**
+ * Use storage.
+ */
+export function useStorage(key: string, options: UseStorageOptions) {
+ const {
+ type,
+ serializer = JSON.stringify,
+ deserializer = JSON.parse,
+ } = options;
+
+ const [value, setValue] = useState(null);
+
+ const deserializerRef = useLatest(deserializer);
+
+ useEffect(() => {
+ try {
+ const storage = chooseStorage(type);
+
+ const value = storage.getItem(key);
+
+ if (value === null) {
+ setValue(null);
+ return;
+ }
+
+ const storedValue = deserializerRef.current(value);
+
+ setValue(storedValue);
+ } catch {
+ setValue(null);
+ }
+ }, [key, type]);
+
+ const set: typeof setValue = (action) => {
+ try {
+ const storage = chooseStorage(type);
+
+ const newValue = action instanceof Function ? action(value) : action;
+
+ if (newValue === null) {
+ storage.removeItem(key);
+ } else {
+ storage.setItem(key, serializer(newValue));
+ }
+
+ setValue(newValue);
+ } catch {
+ return;
+ }
+ };
+
+ const remove = () => set(null);
+
+ return { value, set, remove };
+}
+
+function chooseStorage(type: StorageType) {
+ switch (type) {
+ case "local":
+ return localStorage;
+ case "session":
+ return sessionStorage;
+ }
+}
diff --git a/src/use-text-selection.ts b/src/use-text-selection.ts
new file mode 100644
index 0000000..22f6de1
--- /dev/null
+++ b/src/use-text-selection.ts
@@ -0,0 +1,36 @@
+import { useState } from "react";
+import { useDocumentEventListener } from "./use-document-event-listener";
+import { useMount } from "./use-mount";
+
+export type UseTextSelectionOptions = {
+ sticky?: boolean;
+};
+
+/**
+ * Use user's text selection.
+ */
+export function useTextSelection(options: UseTextSelectionOptions = {}) {
+ const { sticky = false } = options;
+
+ const [selection, setSelection] = useState("");
+
+ useMount(() => {
+ setSelection(document.getSelection()?.toString() ?? "");
+ });
+
+ useDocumentEventListener(
+ "mouseup",
+ () => {
+ const selection = document.getSelection()?.toString() ?? "";
+
+ if (!selection && sticky) {
+ return;
+ }
+
+ setSelection(selection);
+ },
+ { extraDeps: [sticky] },
+ );
+
+ return selection;
+}
diff --git a/src/use-theme.ts b/src/use-theme.ts
new file mode 100644
index 0000000..c3e26e7
--- /dev/null
+++ b/src/use-theme.ts
@@ -0,0 +1,37 @@
+import { useLocalStorage } from "./use-local-storage";
+import { useMediaQuery } from "./use-media-query";
+
+export type Theme = "light" | "dark";
+
+export type UseThemeOptions = {
+ defaultTheme?: Theme;
+ storageKey?: string;
+};
+
+/**
+ * Use light/dark/system theme.
+ */
+export function useTheme(options: UseThemeOptions = {}) {
+ const { defaultTheme, storageKey = "theme" } = options;
+
+ const isDarkDevice = useMediaQuery("(prefers-color-scheme: dark)");
+ const deviceTheme = isDarkDevice ? "dark" : "light";
+
+ const {
+ value: storedTheme,
+ set: setStoredTheme,
+ remove: removeStoredTheme,
+ } = useLocalStorage(storageKey, {
+ serializer: (value) => value,
+ deserializer: (value) => value as Theme,
+ });
+
+ const theme = storedTheme ?? defaultTheme ?? deviceTheme;
+
+ const setLight = () => setStoredTheme("light");
+ const setDark = () => setStoredTheme("dark");
+ const toggle = () => setStoredTheme(theme === "dark" ? "light" : "dark");
+ const reset = () => removeStoredTheme();
+
+ return { theme, set: setStoredTheme, setLight, setDark, toggle, reset };
+}
diff --git a/packages/hooks/src/use-throttle-effect.ts b/src/use-throttle-effect.ts
similarity index 85%
rename from packages/hooks/src/use-throttle-effect.ts
rename to src/use-throttle-effect.ts
index a2ac7f8..08992d2 100644
--- a/packages/hooks/src/use-throttle-effect.ts
+++ b/src/use-throttle-effect.ts
@@ -17,12 +17,14 @@ export type UseThrottleEffectOptions = {
export function useThrottleEffect(
effect: EffectCallback,
deps: DependencyList = [],
- options: UseThrottleEffectOptions = {}
+ options: UseThrottleEffectOptions = {},
) {
const { timeout = 500, onMount = false } = options;
const effectRef = useLatest(effect);
+
const shouldSkipRef = useRef(true);
+
const isCoolingDownRef = useRef(false);
useEffect(() => {
@@ -38,10 +40,9 @@ export function useThrottleEffect(
effectRef.current();
isCoolingDownRef.current = true;
+
setTimeout(() => {
isCoolingDownRef.current = false;
}, timeout);
-
- // eslint-disable-next-line react-hooks/exhaustive-deps
- }, [effectRef, ...deps, timeout, onMount]);
+ }, [...deps, timeout, onMount]);
}
diff --git a/src/use-throttle.ts b/src/use-throttle.ts
new file mode 100644
index 0000000..e848f0f
--- /dev/null
+++ b/src/use-throttle.ts
@@ -0,0 +1,18 @@
+import { useState } from "react";
+import { useThrottleEffect } from "./use-throttle-effect";
+
+export type UseThrottleOptions = {
+ timeout?: number;
+ onMount?: boolean;
+};
+
+/**
+ * Throttle a value.
+ */
+export function useThrottle(value: T, options: UseThrottleOptions = {}) {
+ const [throttledValue, setThrottledValue] = useState(value);
+
+ useThrottleEffect(() => setThrottledValue(value), [value], options);
+
+ return throttledValue;
+}
diff --git a/src/use-timeout.ts b/src/use-timeout.ts
new file mode 100644
index 0000000..d5fedea
--- /dev/null
+++ b/src/use-timeout.ts
@@ -0,0 +1,16 @@
+import { useEffect } from "react";
+import type { Fn } from "./types";
+import { useLatest } from "./use-latest";
+
+/**
+ * Run a function after a timeout.
+ */
+export function useTimeout(fn: Fn, timeout = 500) {
+ const fnRef = useLatest(fn);
+
+ useEffect(() => {
+ const timer = setTimeout(fnRef.current, timeout);
+
+ return () => clearTimeout(timer);
+ }, [timeout]);
+}
diff --git a/src/use-title.ts b/src/use-title.ts
new file mode 100644
index 0000000..9fa8f02
--- /dev/null
+++ b/src/use-title.ts
@@ -0,0 +1,35 @@
+import { useState } from "react";
+import { useMount } from "./use-mount";
+
+/**
+ * Use page title.
+ */
+export function useTitle() {
+ const [title, setTitle] = useState("");
+
+ useMount(() => {
+ setTitle(document.title);
+ });
+
+ useMount(() => {
+ const title = document.querySelector("title");
+
+ if (!title) {
+ return;
+ }
+
+ const observer = new MutationObserver(([mutation]) => {
+ setTitle(mutation?.target.textContent ?? "");
+ });
+
+ observer.observe(title, {
+ subtree: true,
+ characterData: true,
+ childList: true,
+ });
+
+ return () => observer.disconnect();
+ });
+
+ return title;
+}
diff --git a/packages/hooks/src/use-toggle.ts b/src/use-toggle.ts
similarity index 56%
rename from packages/hooks/src/use-toggle.ts
rename to src/use-toggle.ts
index aa7caad..82ec656 100644
--- a/packages/hooks/src/use-toggle.ts
+++ b/src/use-toggle.ts
@@ -1,17 +1,14 @@
import { useState } from "react";
-// TODO: Add `const` modifier on `L` and `R`.
-// See: https://github.com/microsoft/TypeScript/pull/51865
-
/**
* Use an either-or value.
*/
-export function useToggle(left: L, right: R) {
+export function useToggle(left: L, right: R) {
const [value, setValue] = useState(left);
- const toggle = () => setValue((value) => (value === left ? right : left));
const setLeft = () => setValue(left);
const setRight = () => setValue(right);
+ const toggle = () => setValue((value) => (value === left ? right : left));
- return { value, set: setValue, toggle, setLeft, setRight };
+ return { value, set: setValue, setLeft, setRight, toggle };
}
diff --git a/src/use-unmount.ts b/src/use-unmount.ts
new file mode 100644
index 0000000..8f9f042
--- /dev/null
+++ b/src/use-unmount.ts
@@ -0,0 +1,8 @@
+import { useMount } from "./use-mount";
+
+/**
+ * Trigger an effect just before the component is unmounted.
+ */
+export function useUnmount(cleanup: () => void) {
+ useMount(() => cleanup);
+}
diff --git a/src/use-unsafe-once-effect.ts b/src/use-unsafe-once-effect.ts
new file mode 100644
index 0000000..fff932c
--- /dev/null
+++ b/src/use-unsafe-once-effect.ts
@@ -0,0 +1,21 @@
+import { useRef, type EffectCallback } from "react";
+import { useLatest } from "./use-latest";
+import { useMount } from "./use-mount";
+
+/**
+ * Trigger an effect exactly once.
+ */
+export function useUnsafeOnceEffect(effect: EffectCallback) {
+ const effectRef = useLatest(effect);
+
+ const isFirstRenderRef = useRef(true);
+
+ useMount(() => {
+ if (isFirstRenderRef.current) {
+ isFirstRenderRef.current = false;
+ return;
+ }
+
+ return effectRef.current();
+ });
+}
diff --git a/packages/hooks/src/use-update-deps.ts b/src/use-update.ts
similarity index 53%
rename from packages/hooks/src/use-update-deps.ts
rename to src/use-update.ts
index 966c85c..8e98522 100644
--- a/packages/hooks/src/use-update-deps.ts
+++ b/src/use-update.ts
@@ -1,17 +1,17 @@
import {
- useEffect,
- useRef,
type DependencyList,
type EffectCallback,
+ useEffect,
+ useRef,
} from "react";
import { useLatest } from "./use-latest";
-import { useUnmount } from "./use-unmount";
/**
- * Trigger effect after given dependencies are updated.
+ * Trigger an effect only after component or dependency updates.
*/
-export function useUpdateDeps(effect: EffectCallback, deps: DependencyList) {
+export function useUpdate(effect: EffectCallback, deps?: DependencyList) {
const effectRef = useLatest(effect);
+
const shouldSkipRef = useRef(true);
useEffect(() => {
@@ -21,11 +21,5 @@ export function useUpdateDeps(effect: EffectCallback, deps: DependencyList) {
}
return effectRef.current();
-
- // eslint-disable-next-line react-hooks/exhaustive-deps
- }, [effectRef, ...deps]);
-
- useUnmount(() => {
- shouldSkipRef.current = true;
- });
+ }, deps);
}
diff --git a/packages/hooks/src/use-window-size.ts b/src/use-window-size.ts
similarity index 84%
rename from packages/hooks/src/use-window-size.ts
rename to src/use-window-size.ts
index b08e91f..3dd9a96 100644
--- a/packages/hooks/src/use-window-size.ts
+++ b/src/use-window-size.ts
@@ -1,5 +1,6 @@
-import { useEffect, useState } from "react";
+import { useState } from "react";
import { useEventListener } from "./use-event-listener";
+import { useMount } from "./use-mount";
import { useWindow } from "./use-window";
/**
@@ -11,10 +12,10 @@ export function useWindowSize() {
const windowRef = useWindow();
- useEffect(() => {
+ useMount(() => {
setWidth(window.innerWidth);
setHeight(window.innerHeight);
- }, []);
+ });
useEventListener(windowRef, "resize", () => {
setWidth(window.innerWidth);
diff --git a/packages/hooks/src/use-window.ts b/src/use-window.ts
similarity index 60%
rename from packages/hooks/src/use-window.ts
rename to src/use-window.ts
index 6e8984c..61c3c7a 100644
--- a/packages/hooks/src/use-window.ts
+++ b/src/use-window.ts
@@ -1,4 +1,5 @@
-import { useEffect, useRef } from "react";
+import { useRef } from "react";
+import { useMount } from "./use-mount";
/**
* Use `window` object.
@@ -6,9 +7,9 @@ import { useEffect, useRef } from "react";
export function useWindow() {
const ref = useRef(null);
- useEffect(() => {
+ useMount(() => {
ref.current = window;
- }, []);
+ });
return ref;
}
diff --git a/packages/hooks/tests/use-async-effect.test.ts b/tests/use-async-effect.test.ts
similarity index 73%
rename from packages/hooks/tests/use-async-effect.test.ts
rename to tests/use-async-effect.test.ts
index a7a2676..5da9414 100644
--- a/packages/hooks/tests/use-async-effect.test.ts
+++ b/tests/use-async-effect.test.ts
@@ -1,41 +1,44 @@
import { renderHook } from "@testing-library/react";
import { useAsyncEffect } from "src";
-const asyncFn = async () => {
- // Some async logic.
-};
-
it("triggers effect after every re-render by default", () => {
- const effect = vi.fn(asyncFn);
+ const effect = vi.fn(async () => {});
const { rerender } = renderHook(() => useAsyncEffect(effect));
+
expect(effect).toHaveBeenCalledTimes(1);
rerender();
+
expect(effect).toHaveBeenCalledTimes(2);
});
-it("triggers effect only on mount with empty dependency list", () => {
- const effect = vi.fn(asyncFn);
+it("triggers effect only on mount if dependency list is empty", () => {
+ const effect = vi.fn(async () => {});
const { rerender } = renderHook(() => useAsyncEffect(effect, []));
+
expect(effect).toHaveBeenCalledTimes(1);
rerender();
+
expect(effect).toHaveBeenCalledTimes(1);
});
-it("triggers effect after every dependency updates", () => {
- const effect = vi.fn(asyncFn);
+it("triggers effect after every dependency update", () => {
+ const effect = vi.fn(async () => {});
const { rerender } = renderHook((count) => useAsyncEffect(effect, [count]), {
initialProps: 0,
});
+
expect(effect).toHaveBeenCalledTimes(1);
rerender(1);
+
expect(effect).toHaveBeenCalledTimes(2);
rerender(1);
+
expect(effect).toHaveBeenCalledTimes(2);
});
diff --git a/packages/hooks/tests/use-boolean.test.ts b/tests/use-boolean.test.ts
similarity index 68%
rename from packages/hooks/tests/use-boolean.test.ts
rename to tests/use-boolean.test.ts
index f303868..69801e6 100644
--- a/packages/hooks/tests/use-boolean.test.ts
+++ b/tests/use-boolean.test.ts
@@ -3,48 +3,82 @@ import { useBoolean } from "src";
it("defaults to false", () => {
const { result } = renderHook(() => useBoolean());
+
expect(result.current.value).toEqual(false);
});
-it("can customize default value", () => {
+it("can customize initial value", () => {
const { result } = renderHook(() => useBoolean(true));
+
expect(result.current.value).toEqual(true);
});
it("can set value", () => {
const { result } = renderHook(() => useBoolean());
+
expect(result.current.value).toEqual(false);
act(() => result.current.set(true));
+
expect(result.current.value).toEqual(true);
act(() => result.current.set(false));
+
+ expect(result.current.value).toEqual(false);
+});
+
+it("can set value to true", () => {
+ const { result } = renderHook(() => useBoolean());
+
+ expect(result.current.value).toEqual(false);
+
+ act(() => result.current.setTrue());
+
+ expect(result.current.value).toEqual(true);
+
+ act(() => result.current.setTrue());
+
+ expect(result.current.value).toEqual(true);
+});
+
+it("can set value to false", () => {
+ const { result } = renderHook(() => useBoolean(true));
+
+ expect(result.current.value).toEqual(true);
+
+ act(() => result.current.setFalse());
+
+ expect(result.current.value).toEqual(false);
+
+ act(() => result.current.setFalse());
+
expect(result.current.value).toEqual(false);
});
it("can toggle value", () => {
const { result } = renderHook(() => useBoolean());
+
expect(result.current.value).toEqual(false);
act(() => result.current.toggle());
+
expect(result.current.value).toEqual(true);
act(() => result.current.toggle());
+
expect(result.current.value).toEqual(false);
});
-it("can set value to true", () => {
+it("can reset value", () => {
const { result } = renderHook(() => useBoolean());
+
expect(result.current.value).toEqual(false);
- act(() => result.current.on());
- expect(result.current.value).toEqual(true);
-});
+ act(() => result.current.toggle());
-it("can set value to false", () => {
- const { result } = renderHook(() => useBoolean(true));
expect(result.current.value).toEqual(true);
- act(() => result.current.off());
+ act(() => result.current.reset());
+
expect(result.current.value).toEqual(false);
});
diff --git a/packages/hooks/tests/use-click-outside.test.ts b/tests/use-click-outside.test.ts
similarity index 52%
rename from packages/hooks/tests/use-click-outside.test.ts
rename to tests/use-click-outside.test.ts
index da94288..921c585 100644
--- a/packages/hooks/tests/use-click-outside.test.ts
+++ b/tests/use-click-outside.test.ts
@@ -1,4 +1,5 @@
-import { fireEvent, renderHook, screen } from "@testing-library/react";
+import { renderHook, screen } from "@testing-library/react";
+import userEvent from "@testing-library/user-event";
import { useClickOutside } from "src";
beforeAll(() => {
@@ -11,47 +12,57 @@ beforeAll(() => {
`;
});
-it("responds to clicks outside", () => {
- const container = screen.getByTestId("container");
+it("listens to click events outside", async () => {
+ const user = userEvent.setup();
const outside = screen.getByTestId("outside");
+ const container = screen.getByTestId("container");
+ const inside = screen.getByTestId("inside");
const callback = vi.fn();
renderHook(() => useClickOutside({ current: container }, callback));
+
expect(callback).toHaveBeenCalledTimes(0);
- fireEvent.mouseDown(outside);
+ await user.click(outside);
+
expect(callback).toHaveBeenCalledTimes(1);
- fireEvent.mouseDown(outside);
- expect(callback).toHaveBeenCalledTimes(2);
+ await user.click(inside);
+
+ expect(callback).toHaveBeenCalledTimes(1);
});
-it("does not respond to clicks inside", () => {
+it("responds to dynamic `ref`", async () => {
+ const user = userEvent.setup();
+ const outside = screen.getByTestId("outside");
const container = screen.getByTestId("container");
const inside = screen.getByTestId("inside");
const callback = vi.fn();
- renderHook(() => useClickOutside({ current: container }, callback));
- expect(callback).toHaveBeenCalledTimes(0);
+ const { rerender } = renderHook(
+ (element) => useClickOutside({ current: element }, callback),
+ { initialProps: null as Element | null },
+ );
- fireEvent.mouseDown(inside);
expect(callback).toHaveBeenCalledTimes(0);
- fireEvent.mouseDown(inside);
+ await user.click(container);
+
expect(callback).toHaveBeenCalledTimes(0);
-});
-it("does not throw with null ref", () => {
- const outside = screen.getByTestId("outside");
- const inside = screen.getByTestId("inside");
- const callback = vi.fn();
+ rerender(inside);
- renderHook(() => useClickOutside({ current: null }, callback));
expect(callback).toHaveBeenCalledTimes(0);
- fireEvent.mouseDown(inside);
- expect(callback).toHaveBeenCalledTimes(0);
+ await user.click(container);
- fireEvent.mouseDown(outside);
- expect(callback).toHaveBeenCalledTimes(0);
+ expect(callback).toHaveBeenCalledTimes(1);
+
+ rerender(outside);
+
+ expect(callback).toHaveBeenCalledTimes(1);
+
+ await user.click(container);
+
+ expect(callback).toHaveBeenCalledTimes(1);
});
diff --git a/tests/use-clipboard-text.test.ts b/tests/use-clipboard-text.test.ts
new file mode 100644
index 0000000..3ca55ba
--- /dev/null
+++ b/tests/use-clipboard-text.test.ts
@@ -0,0 +1,155 @@
+import { act, fireEvent, renderHook, waitFor } from "@testing-library/react";
+import { useClipboardText } from "src";
+
+const mockReadText = vi.fn();
+const mockWriteText = vi.fn();
+
+beforeAll(() => {
+ vi.stubGlobal("navigator", {
+ clipboard: {
+ readText: mockReadText,
+ writeText: mockWriteText,
+ },
+ });
+});
+
+afterEach(() => {
+ vi.clearAllMocks();
+});
+
+afterAll(() => {
+ vi.restoreAllMocks();
+ vi.unstubAllGlobals();
+});
+
+it("reads clipboard on mount by default", async () => {
+ mockReadText.mockResolvedValueOnce("hello");
+
+ const { result } = renderHook(() => useClipboardText());
+
+ await waitFor(() => expect(result.current.text).toEqual("hello"));
+ expect(result.current.error).toEqual(null);
+ expect(mockReadText).toHaveBeenCalledTimes(1);
+});
+
+it("can disable read on mount", async () => {
+ const { result } = renderHook(() => useClipboardText({ readOnMount: false }));
+
+ expect(result.current.text).toEqual("");
+ expect(result.current.error).toEqual(null);
+ expect(mockReadText).toHaveBeenCalledTimes(0);
+});
+
+it("responds to dynamic `readOnMount`", async () => {
+ mockReadText.mockResolvedValueOnce("hello");
+
+ const { result, rerender } = renderHook(
+ (readOnMount) => useClipboardText({ readOnMount }),
+ { initialProps: false },
+ );
+
+ expect(result.current.text).toEqual("");
+ expect(result.current.error).toEqual(null);
+ expect(mockReadText).toHaveBeenCalledTimes(0);
+
+ rerender(true);
+
+ await waitFor(() => expect(result.current.text).toEqual("hello"));
+ expect(result.current.error).toEqual(null);
+ expect(mockReadText).toHaveBeenCalledTimes(1);
+});
+
+it("provides `write` function to manually write", async () => {
+ mockReadText.mockResolvedValueOnce("hello");
+ mockWriteText.mockResolvedValueOnce(void 0);
+
+ const { result } = renderHook(() => useClipboardText());
+
+ await waitFor(() => expect(result.current.text).toEqual("hello"));
+ expect(result.current.error).toEqual(null);
+ expect(mockWriteText).toHaveBeenCalledTimes(0);
+
+ await act(async () => await result.current.write("world"));
+
+ await waitFor(() => expect(result.current.text).toEqual("world"));
+ expect(result.current.error).toEqual(null);
+ expect(mockWriteText).toHaveBeenCalledTimes(1);
+});
+
+it("returns error if `write` fails", async () => {
+ mockReadText.mockResolvedValueOnce("hello");
+ mockWriteText.mockRejectedValueOnce(new Error("test"));
+
+ const { result } = renderHook(() => useClipboardText());
+
+ await waitFor(() => expect(result.current.text).toEqual("hello"));
+ expect(result.current.error).toEqual(null);
+ expect(mockWriteText).toHaveBeenCalledTimes(0);
+
+ await act(async () => await result.current.write("world"));
+
+ await waitFor(() => expect(result.current.error).toEqual(new Error("test")));
+ expect(result.current.text).toEqual("hello");
+ expect(mockWriteText).toHaveBeenCalledTimes(1);
+});
+
+it("listens to cut events", async () => {
+ mockReadText.mockResolvedValueOnce("hello").mockResolvedValueOnce("world");
+
+ const { result } = renderHook(() => useClipboardText());
+
+ await waitFor(() => expect(result.current.text).toEqual("hello"));
+ expect(result.current.error).toEqual(null);
+ expect(mockReadText).toHaveBeenCalledTimes(1);
+
+ fireEvent.cut(document);
+
+ await waitFor(() => expect(result.current.text).toEqual("world"));
+ expect(result.current.error).toEqual(null);
+ expect(mockReadText).toHaveBeenCalledTimes(2);
+});
+
+it("listens to copy events", async () => {
+ mockReadText.mockResolvedValueOnce("hello").mockResolvedValueOnce("world");
+
+ const { result } = renderHook(() => useClipboardText());
+
+ await waitFor(() => expect(result.current.text).toEqual("hello"));
+ expect(result.current.error).toEqual(null);
+ expect(mockReadText).toHaveBeenCalledTimes(1);
+
+ fireEvent.copy(document);
+
+ await waitFor(() => expect(result.current.text).toEqual("world"));
+ expect(result.current.error).toEqual(null);
+ expect(mockReadText).toHaveBeenCalledTimes(2);
+});
+
+it("recovers from error after any successful read", async () => {
+ mockReadText
+ .mockRejectedValueOnce(new Error("error"))
+ .mockResolvedValueOnce("world");
+
+ const { result } = renderHook(() => useClipboardText());
+
+ await waitFor(() => expect(result.current.error).toEqual(new Error("error")));
+
+ fireEvent.copy(document);
+
+ await waitFor(() => expect(result.current.text).toEqual("world"));
+ expect(result.current.error).toEqual(null);
+});
+
+it("recovers from error after any successful write", async () => {
+ mockReadText.mockRejectedValueOnce(new Error("error"));
+ mockWriteText.mockResolvedValueOnce(void 0);
+
+ const { result } = renderHook(() => useClipboardText());
+
+ await waitFor(() => expect(result.current.error).toEqual(new Error("error")));
+
+ await act(async () => await result.current.write("world"));
+
+ await waitFor(() => expect(result.current.text).toEqual("world"));
+ expect(result.current.error).toEqual(null);
+});
diff --git a/packages/hooks/tests/use-const-fn.test.ts b/tests/use-const-fn.test.ts
similarity index 59%
rename from packages/hooks/tests/use-const-fn.test.ts
rename to tests/use-const-fn.test.ts
index 7853805..fa6f98d 100644
--- a/packages/hooks/tests/use-const-fn.test.ts
+++ b/tests/use-const-fn.test.ts
@@ -1,17 +1,14 @@
import { renderHook } from "@testing-library/react";
import { useConstFn } from "src";
-it("remembers the function", () => {
- const { result } = renderHook(() => useConstFn(() => 1));
- expect(result.current()).toEqual(1);
-});
-
-it("stays the same across re-renders", () => {
+it("memoizes the function across re-renders", () => {
const fn = vi.fn();
const { result, rerender } = renderHook(() => useConstFn(fn));
+
expect(result.current).toEqual(fn);
rerender();
+
expect(result.current).toEqual(fn);
});
diff --git a/tests/use-const.test.ts b/tests/use-const.test.ts
new file mode 100644
index 0000000..bd4cc58
--- /dev/null
+++ b/tests/use-const.test.ts
@@ -0,0 +1,16 @@
+import { renderHook } from "@testing-library/react";
+import { useConst } from "src";
+
+it("memoizes the value across re-renders", () => {
+ const compute = vi.fn(() => 1);
+
+ const { result, rerender } = renderHook(() => useConst(compute));
+
+ expect(result.current).toEqual(1);
+ expect(compute).toHaveBeenCalledTimes(1);
+
+ rerender();
+
+ expect(result.current).toEqual(1);
+ expect(compute).toHaveBeenCalledTimes(1);
+});
diff --git a/packages/hooks/tests/use-counter.test.ts b/tests/use-counter.test.ts
similarity index 92%
rename from packages/hooks/tests/use-counter.test.ts
rename to tests/use-counter.test.ts
index 1b6be35..6f45f2d 100644
--- a/packages/hooks/tests/use-counter.test.ts
+++ b/tests/use-counter.test.ts
@@ -3,66 +3,83 @@ import { useCounter } from "src";
it("defaults to 0", () => {
const { result } = renderHook(() => useCounter());
+
expect(result.current.count).toEqual(0);
});
-it("can customize default value", () => {
+it("can customize initial value", () => {
const { result } = renderHook(() => useCounter(1));
+
expect(result.current.count).toEqual(1);
});
it("can set value", () => {
const { result } = renderHook(() => useCounter());
+
expect(result.current.count).toEqual(0);
act(() => result.current.set(1));
+
expect(result.current.count).toEqual(1);
act(() => result.current.set(-1));
+
expect(result.current.count).toEqual(-1);
});
it("can increment value by 1", () => {
const { result } = renderHook(() => useCounter());
+
expect(result.current.count).toEqual(0);
act(() => result.current.increment());
+
expect(result.current.count).toEqual(1);
act(() => result.current.increment());
+
expect(result.current.count).toEqual(2);
});
-it("can increment value by any number", () => {
+it("can increment value by arbitrary number", () => {
const { result } = renderHook(() => useCounter());
+
expect(result.current.count).toEqual(0);
act(() => result.current.incrementBy(2));
+
expect(result.current.count).toEqual(2);
act(() => result.current.incrementBy(2));
+
expect(result.current.count).toEqual(4);
});
it("can decrement value by 1", () => {
const { result } = renderHook(() => useCounter());
+
expect(result.current.count).toEqual(0);
act(() => result.current.decrement());
+
expect(result.current.count).toEqual(-1);
act(() => result.current.decrement());
+
expect(result.current.count).toEqual(-2);
});
-it("can decrement value by any number", () => {
+it("can decrement value by arbitrary number", () => {
const { result } = renderHook(() => useCounter());
+
expect(result.current.count).toEqual(0);
act(() => result.current.decrementBy(2));
+
expect(result.current.count).toEqual(-2);
act(() => result.current.decrementBy(2));
+
expect(result.current.count).toEqual(-4);
});
diff --git a/packages/hooks/tests/use-debounce-effect.test.ts b/tests/use-debounce-effect.test.ts
similarity index 58%
rename from packages/hooks/tests/use-debounce-effect.test.ts
rename to tests/use-debounce-effect.test.ts
index f0fcaf4..3a79419 100644
--- a/packages/hooks/tests/use-debounce-effect.test.ts
+++ b/tests/use-debounce-effect.test.ts
@@ -4,20 +4,27 @@ import { useDebounceEffect } from "src";
beforeAll(() => {
vi.useFakeTimers();
});
-afterAll(() => {
- vi.useRealTimers();
-});
+
afterEach(() => {
vi.clearAllTimers();
});
-it("triggers effect only once after continuous updates", () => {
+afterAll(() => {
+ vi.useRealTimers();
+});
+
+it("triggers effect only once after multiple updates", () => {
const effect = vi.fn();
const { rerender } = renderHook(
(count) => useDebounceEffect(effect, [count]),
- { initialProps: 0 }
+ { initialProps: 0 },
);
+
+ expect(effect).toHaveBeenCalledTimes(0);
+
+ vi.advanceTimersByTime(500);
+
expect(effect).toHaveBeenCalledTimes(0);
rerender(1);
@@ -26,9 +33,11 @@ it("triggers effect only once after continuous updates", () => {
vi.advanceTimersByTime(499);
rerender(3);
vi.advanceTimersByTime(499);
+
expect(effect).toHaveBeenCalledTimes(0);
vi.advanceTimersByTime(1);
+
expect(effect).toHaveBeenCalledTimes(1);
});
@@ -37,8 +46,13 @@ it("can customize timeout", () => {
const { rerender } = renderHook(
(count) => useDebounceEffect(effect, [count], { timeout: 100 }),
- { initialProps: 0 }
+ { initialProps: 0 },
);
+
+ expect(effect).toHaveBeenCalledTimes(0);
+
+ vi.advanceTimersByTime(100);
+
expect(effect).toHaveBeenCalledTimes(0);
rerender(1);
@@ -47,21 +61,56 @@ it("can customize timeout", () => {
vi.advanceTimersByTime(99);
rerender(3);
vi.advanceTimersByTime(99);
+
+ expect(effect).toHaveBeenCalledTimes(0);
+
+ vi.advanceTimersByTime(1);
+
+ expect(effect).toHaveBeenCalledTimes(1);
+});
+
+it("responds to dynamic `timeout`", () => {
+ const effect = vi.fn();
+
+ const { rerender } = renderHook(
+ ({ count, timeout }) => useDebounceEffect(effect, [count], { timeout }),
+ { initialProps: { count: 0, timeout: 500 } },
+ );
+
+ expect(effect).toHaveBeenCalledTimes(0);
+
+ vi.advanceTimersByTime(500);
+
expect(effect).toHaveBeenCalledTimes(0);
+ rerender({ count: 1, timeout: 500 });
+ vi.advanceTimersByTime(499);
+ rerender({ count: 1, timeout: 100 });
vi.advanceTimersByTime(1);
+
+ expect(effect).toHaveBeenCalledTimes(0);
+
+ vi.advanceTimersByTime(98);
+
+ expect(effect).toHaveBeenCalledTimes(0);
+
+ vi.advanceTimersByTime(1);
+
expect(effect).toHaveBeenCalledTimes(1);
});
-it("can start timing on mount", () => {
+it("can run on mount", () => {
const effect = vi.fn();
renderHook(() => useDebounceEffect(effect, [], { onMount: true }));
+
expect(effect).toHaveBeenCalledTimes(0);
vi.advanceTimersByTime(499);
+
expect(effect).toHaveBeenCalledTimes(0);
vi.advanceTimersByTime(1);
+
expect(effect).toHaveBeenCalledTimes(1);
});
diff --git a/packages/hooks/tests/use-debounce.test.ts b/tests/use-debounce.test.ts
similarity index 51%
rename from packages/hooks/tests/use-debounce.test.ts
rename to tests/use-debounce.test.ts
index 3ea9666..0596c35 100644
--- a/packages/hooks/tests/use-debounce.test.ts
+++ b/tests/use-debounce.test.ts
@@ -4,17 +4,24 @@ import { useDebounce } from "src";
beforeAll(() => {
vi.useFakeTimers();
});
-afterAll(() => {
- vi.useRealTimers();
-});
+
afterEach(() => {
vi.clearAllTimers();
});
-it("updates value only once after continuous updates", () => {
+afterAll(() => {
+ vi.useRealTimers();
+});
+
+it("updates value only once after multiple updates", () => {
const { result, rerender } = renderHook((count) => useDebounce(count), {
initialProps: 0,
});
+
+ expect(result.current).toEqual(0);
+
+ vi.advanceTimersByTime(500);
+
expect(result.current).toEqual(0);
rerender(1);
@@ -23,19 +30,24 @@ it("updates value only once after continuous updates", () => {
vi.advanceTimersByTime(499);
rerender(3);
vi.advanceTimersByTime(499);
+
expect(result.current).toEqual(0);
- act(() => {
- vi.advanceTimersByTime(1);
- });
+ act(() => vi.advanceTimersByTime(1));
+
expect(result.current).toEqual(3);
});
it("can customize timeout", () => {
const { result, rerender } = renderHook(
(count) => useDebounce(count, { timeout: 100 }),
- { initialProps: 0 }
+ { initialProps: 0 },
);
+
+ expect(result.current).toEqual(0);
+
+ vi.advanceTimersByTime(100);
+
expect(result.current).toEqual(0);
rerender(1);
@@ -44,26 +56,55 @@ it("can customize timeout", () => {
vi.advanceTimersByTime(99);
rerender(3);
vi.advanceTimersByTime(99);
+
expect(result.current).toEqual(0);
- act(() => {
- vi.advanceTimersByTime(1);
- });
+ act(() => vi.advanceTimersByTime(1));
+
expect(result.current).toEqual(3);
});
-it("can start timing on mount", () => {
+it("responds to dynamic `timeout`", () => {
+ const { result, rerender } = renderHook(
+ ({ count, timeout }) => useDebounce(count, { timeout }),
+ { initialProps: { count: 0, timeout: 500 } },
+ );
+
+ expect(result.current).toEqual(0);
+
+ vi.advanceTimersByTime(500);
+
+ expect(result.current).toEqual(0);
+
+ rerender({ count: 1, timeout: 500 });
+ vi.advanceTimersByTime(499);
+ rerender({ count: 1, timeout: 100 });
+ vi.advanceTimersByTime(1);
+
+ expect(result.current).toEqual(0);
+
+ vi.advanceTimersByTime(98);
+
+ expect(result.current).toEqual(0);
+
+ act(() => vi.advanceTimersByTime(1));
+
+ expect(result.current).toEqual(1);
+});
+
+it("can run on mount", () => {
const { result } = renderHook(
- (count) => useDebounce(count, { timeout: 100 }),
- { initialProps: 0 }
+ (count) => useDebounce(count, { onMount: true }),
+ { initialProps: 0 },
);
+
expect(result.current).toEqual(0);
vi.advanceTimersByTime(499);
+
expect(result.current).toEqual(0);
- act(() => {
- vi.advanceTimersByTime(1);
- });
+ act(() => vi.advanceTimersByTime(1));
+
expect(result.current).toEqual(0);
});
diff --git a/packages/hooks/tests/use-document.test.ts b/tests/use-document.test.ts
similarity index 99%
rename from packages/hooks/tests/use-document.test.ts
rename to tests/use-document.test.ts
index 7a1d98d..d6e108e 100644
--- a/packages/hooks/tests/use-document.test.ts
+++ b/tests/use-document.test.ts
@@ -3,5 +3,6 @@ import { useDocument } from "src";
it("returns document", () => {
const { result } = renderHook(() => useDocument());
+
expect(result.current.current).toEqual(document);
});
diff --git a/tests/use-element-size.test.ts b/tests/use-element-size.test.ts
new file mode 100644
index 0000000..54a0c18
--- /dev/null
+++ b/tests/use-element-size.test.ts
@@ -0,0 +1,61 @@
+import { renderHook, screen } from "@testing-library/react";
+import { useElementSize } from "src";
+
+const mockClientWidth = vi.spyOn(
+ window.Element.prototype,
+ "clientWidth",
+ "get",
+);
+const mockClientHeight = vi.spyOn(
+ window.Element.prototype,
+ "clientHeight",
+ "get",
+);
+
+beforeAll(() => {
+ document.body.innerHTML = `
+
+ `;
+
+ vi.stubGlobal(
+ "ResizeObserver",
+ class {
+ constructor(private callback: ResizeObserverCallback) {}
+
+ observe(target: Element) {
+ this.callback([{ target } as ResizeObserverEntry], this);
+ }
+
+ disconnect() {}
+ unobserve() {}
+ },
+ );
+});
+
+afterEach(() => {
+ vi.clearAllMocks();
+});
+
+afterAll(() => {
+ vi.restoreAllMocks();
+ vi.unstubAllGlobals();
+});
+
+it("reads the size of element", () => {
+ mockClientWidth
+ .mockReturnValueOnce(200)
+ .mockReturnValueOnce(200)
+ .mockReturnValueOnce(200);
+ mockClientHeight
+ .mockReturnValueOnce(100)
+ .mockReturnValueOnce(100)
+ .mockReturnValueOnce(100);
+ const target = screen.getByTestId("target");
+
+ const { result } = renderHook(() => useElementSize({ current: target }));
+
+ expect(result.current.width).toEqual(200);
+ expect(result.current.height).toEqual(100);
+});
+
+it.todo("listens to resize events", () => {});
diff --git a/tests/use-event-listener.test.ts b/tests/use-event-listener.test.ts
new file mode 100644
index 0000000..dfdb8a5
--- /dev/null
+++ b/tests/use-event-listener.test.ts
@@ -0,0 +1,212 @@
+import { renderHook, screen } from "@testing-library/react";
+import userEvent from "@testing-library/user-event";
+import { useEventListener } from "src";
+
+beforeAll(() => {
+ document.body.innerHTML = `
+
+ `;
+});
+
+it("listens to element events", async () => {
+ const user = userEvent.setup();
+ const target = screen.getByTestId("target");
+ const callback = vi.fn();
+
+ renderHook(() => useEventListener({ current: target }, "click", callback));
+
+ expect(callback).toHaveBeenCalledTimes(0);
+
+ await user.click(target);
+
+ expect(callback).toHaveBeenCalledTimes(1);
+ expect(callback).toHaveBeenLastCalledWith(expect.any(MouseEvent), target);
+
+ await user.click(target);
+
+ expect(callback).toHaveBeenCalledTimes(2);
+ expect(callback).toHaveBeenLastCalledWith(expect.any(MouseEvent), target);
+});
+
+it("listens to document events", async () => {
+ const user = userEvent.setup();
+ const callback = vi.fn();
+
+ renderHook(() => useEventListener({ current: document }, "click", callback));
+
+ expect(callback).toHaveBeenCalledTimes(0);
+
+ await user.click(document.body);
+
+ expect(callback).toHaveBeenCalledTimes(1);
+ expect(callback).toHaveBeenLastCalledWith(expect.any(MouseEvent), document);
+
+ await user.click(document.body);
+
+ expect(callback).toHaveBeenCalledTimes(2);
+ expect(callback).toHaveBeenLastCalledWith(expect.any(MouseEvent), document);
+});
+
+it("responds to dynamic `type`", async () => {
+ const user = userEvent.setup();
+ const callback = vi.fn();
+
+ const { rerender } = renderHook(
+ (type) => useEventListener({ current: document }, type, callback),
+ { initialProps: "click" as keyof DocumentEventMap },
+ );
+
+ expect(callback).toHaveBeenCalledTimes(0);
+
+ await user.click(document.body);
+
+ expect(callback).toHaveBeenCalledTimes(1);
+ expect(callback).toHaveBeenLastCalledWith(expect.any(MouseEvent), document);
+
+ rerender("keydown");
+
+ expect(callback).toHaveBeenCalledTimes(1);
+
+ await user.click(document.body);
+
+ expect(callback).toHaveBeenCalledTimes(1);
+
+ await user.tab();
+
+ expect(callback).toHaveBeenCalledTimes(2);
+ expect(callback).toHaveBeenLastCalledWith(
+ expect.any(KeyboardEvent),
+ document,
+ );
+});
+
+it("responds to dynamic `capture`", async () => {
+ const user = userEvent.setup();
+ const target = screen.getByTestId("target");
+ const callOrder: string[] = [];
+ const documentCallback = vi.fn(() => callOrder.push("document"));
+ const targetCallback = vi.fn(() => callOrder.push("target"));
+
+ renderHook(() =>
+ useEventListener({ current: target }, "click", targetCallback),
+ );
+ const { rerender } = renderHook(
+ (capture) =>
+ useEventListener({ current: document }, "click", documentCallback, {
+ capture,
+ }),
+ { initialProps: false },
+ );
+
+ expect(documentCallback).toHaveBeenCalledTimes(0);
+ expect(targetCallback).toHaveBeenCalledTimes(0);
+ expect(callOrder).toEqual([]);
+
+ await user.click(target);
+
+ expect(documentCallback).toHaveBeenCalledTimes(1);
+ expect(targetCallback).toHaveBeenCalledTimes(1);
+ expect(callOrder).toEqual(["target", "document"]);
+
+ rerender(true);
+
+ expect(documentCallback).toHaveBeenCalledTimes(1);
+ expect(targetCallback).toHaveBeenCalledTimes(1);
+ expect(callOrder).toEqual(["target", "document"]);
+
+ await user.click(target);
+
+ expect(documentCallback).toHaveBeenCalledTimes(2);
+ expect(targetCallback).toHaveBeenCalledTimes(2);
+ expect(callOrder).toEqual(["target", "document", "document", "target"]);
+});
+
+it("responds to dynamic `passive`", async () => {
+ const user = userEvent.setup();
+ const callback = vi.fn((event: MouseEvent) => event.preventDefault());
+
+ const { rerender } = renderHook(
+ (passive) =>
+ useEventListener({ current: document }, "click", callback, { passive }),
+ { initialProps: false },
+ );
+
+ expect(callback).toHaveBeenCalledTimes(0);
+
+ await user.click(document.body);
+
+ expect(callback).toHaveBeenCalledTimes(1);
+
+ rerender(true);
+
+ expect(callback).toHaveBeenCalledTimes(1);
+
+ await user.click(document.body);
+
+ expect(callback).toHaveBeenCalledTimes(2);
+ expect(callback).toThrow();
+});
+
+it("responds to dynamic `once`", async () => {
+ const user = userEvent.setup();
+ const callback = vi.fn();
+
+ const { rerender } = renderHook(
+ (once) =>
+ useEventListener({ current: document }, "click", callback, { once }),
+ { initialProps: true },
+ );
+
+ expect(callback).toHaveBeenCalledTimes(0);
+
+ await user.click(document.body);
+
+ expect(callback).toHaveBeenCalledTimes(1);
+
+ await user.click(document.body);
+
+ expect(callback).toHaveBeenCalledTimes(1);
+
+ rerender(false);
+
+ expect(callback).toHaveBeenCalledTimes(1);
+
+ await user.click(document.body);
+
+ expect(callback).toHaveBeenCalledTimes(2);
+});
+
+it("responds to dynamic `extraDeps`", async () => {
+ const user = userEvent.setup();
+ const history: number[] = [];
+ const callback = vi.fn((numbers: number[]) => history.push(...numbers));
+
+ const { rerender } = renderHook(
+ (extraDeps) =>
+ useEventListener(
+ { current: document },
+ "click",
+ () => callback(extraDeps),
+ { extraDeps },
+ ),
+ { initialProps: [1, 2] },
+ );
+
+ expect(callback).toHaveBeenCalledTimes(0);
+ expect(history).toEqual([]);
+
+ await user.click(document.body);
+
+ expect(callback).toHaveBeenCalledTimes(1);
+ expect(history).toEqual([1, 2]);
+
+ rerender([1, 3]);
+
+ expect(callback).toHaveBeenCalledTimes(1);
+ expect(history).toEqual([1, 2]);
+
+ await user.click(document.body);
+
+ expect(callback).toHaveBeenCalledTimes(2);
+ expect(history).toEqual([1, 2, 1, 3]);
+});
diff --git a/tests/use-focus-trap.test.ts b/tests/use-focus-trap.test.ts
new file mode 100644
index 0000000..d7e4ac9
--- /dev/null
+++ b/tests/use-focus-trap.test.ts
@@ -0,0 +1,74 @@
+import { renderHook, screen } from "@testing-library/react";
+import userEvent from "@testing-library/user-event";
+import { useFocusTrap } from "src";
+
+beforeAll(() => {
+ document.body.innerHTML = `
+ First
+ Middle
+ Last
+ `;
+});
+
+it("traps the focus", async () => {
+ const user = userEvent.setup();
+ const first = screen.getByTestId("first");
+ const middle = screen.getByTestId("middle");
+ const last = screen.getByTestId("last");
+ first.focus();
+
+ renderHook(() => useFocusTrap({ current: first }, { current: last }));
+
+ expect(document.activeElement).toEqual(first);
+
+ await user.tab();
+
+ expect(document.activeElement).toEqual(middle);
+
+ await user.tab();
+
+ expect(document.activeElement).toEqual(last);
+
+ await user.tab();
+
+ expect(document.activeElement).toEqual(first);
+
+ await user.tab({ shift: true });
+
+ expect(document.activeElement).toEqual(last);
+
+ await user.tab({ shift: true });
+
+ expect(document.activeElement).toEqual(middle);
+
+ await user.tab({ shift: true });
+
+ expect(document.activeElement).toEqual(first);
+});
+
+it("responds to dynamic `ref`", async () => {
+ const user = userEvent.setup();
+ const first = screen.getByTestId("first");
+ const middle = screen.getByTestId("middle");
+ const last = screen.getByTestId("last");
+ first.focus();
+
+ const { rerender } = renderHook(
+ ({ first, last }) => useFocusTrap({ current: first }, { current: last }),
+ { initialProps: { first, last } },
+ );
+
+ expect(document.activeElement).toEqual(first);
+
+ await user.tab({ shift: true });
+
+ expect(document.activeElement).toEqual(last);
+
+ rerender({ first: middle, last });
+
+ expect(document.activeElement).toEqual(last);
+
+ await user.tab();
+
+ expect(document.activeElement).toEqual(middle);
+});
diff --git a/tests/use-hover.test.ts b/tests/use-hover.test.ts
new file mode 100644
index 0000000..fc6656a
--- /dev/null
+++ b/tests/use-hover.test.ts
@@ -0,0 +1,26 @@
+import { renderHook, screen } from "@testing-library/react";
+import userEvent from "@testing-library/user-event";
+import { useHover } from "src";
+
+beforeAll(() => {
+ document.body.innerHTML = `
+
+ `;
+});
+
+it("listens to hover events", async () => {
+ const user = userEvent.setup();
+ const target = screen.getByTestId("target");
+
+ const { result } = renderHook(() => useHover({ current: target }));
+
+ expect(result.current).toEqual(false);
+
+ await user.hover(target);
+
+ expect(result.current).toEqual(true);
+
+ await user.unhover(target);
+
+ expect(result.current).toEqual(false);
+});
diff --git a/tests/use-interval.test.ts b/tests/use-interval.test.ts
new file mode 100644
index 0000000..9637bba
--- /dev/null
+++ b/tests/use-interval.test.ts
@@ -0,0 +1,92 @@
+import { renderHook } from "@testing-library/react";
+import { useInterval } from "src";
+
+beforeAll(() => {
+ vi.useFakeTimers();
+});
+
+afterEach(() => {
+ vi.clearAllTimers();
+});
+
+afterAll(() => {
+ vi.useRealTimers();
+});
+
+it("runs function after every interval", () => {
+ const fn = vi.fn();
+
+ renderHook(() => useInterval(fn));
+
+ expect(fn).toHaveBeenCalledTimes(0);
+
+ vi.advanceTimersByTime(499);
+
+ expect(fn).toHaveBeenCalledTimes(0);
+
+ vi.advanceTimersByTime(1);
+
+ expect(fn).toHaveBeenCalledTimes(1);
+
+ vi.advanceTimersByTime(499);
+
+ expect(fn).toHaveBeenCalledTimes(1);
+
+ vi.advanceTimersByTime(1);
+
+ expect(fn).toHaveBeenCalledTimes(2);
+});
+
+it("can customize timeout", () => {
+ const fn = vi.fn();
+
+ renderHook(() => useInterval(fn, 100));
+
+ expect(fn).toHaveBeenCalledTimes(0);
+
+ vi.advanceTimersByTime(99);
+
+ expect(fn).toHaveBeenCalledTimes(0);
+
+ vi.advanceTimersByTime(1);
+
+ expect(fn).toHaveBeenCalledTimes(1);
+
+ vi.advanceTimersByTime(99);
+
+ expect(fn).toHaveBeenCalledTimes(1);
+
+ vi.advanceTimersByTime(1);
+
+ expect(fn).toHaveBeenCalledTimes(2);
+});
+
+it("responds to dynamic `timeout`", () => {
+ const fn = vi.fn();
+
+ const { rerender } = renderHook((timeout) => useInterval(fn, timeout), {
+ initialProps: 100,
+ });
+
+ expect(fn).toHaveBeenCalledTimes(0);
+
+ vi.advanceTimersByTime(99);
+
+ expect(fn).toHaveBeenCalledTimes(0);
+
+ vi.advanceTimersByTime(1);
+
+ expect(fn).toHaveBeenCalledTimes(1);
+
+ rerender(200);
+
+ expect(fn).toHaveBeenCalledTimes(1);
+
+ vi.advanceTimersByTime(199);
+
+ expect(fn).toHaveBeenCalledTimes(1);
+
+ vi.advanceTimersByTime(1);
+
+ expect(fn).toHaveBeenCalledTimes(2);
+});
diff --git a/tests/use-is-mounted.test.ts b/tests/use-is-mounted.test.ts
new file mode 100644
index 0000000..1cb63ea
--- /dev/null
+++ b/tests/use-is-mounted.test.ts
@@ -0,0 +1,16 @@
+import { renderHook } from "@testing-library/react";
+import { useIsMounted } from "src";
+
+it("returns mount status", () => {
+ const { result, rerender, unmount } = renderHook(() => useIsMounted());
+
+ expect(result.current.current).toEqual(true);
+
+ rerender();
+
+ expect(result.current.current).toEqual(true);
+
+ unmount();
+
+ expect(result.current.current).toEqual(false);
+});
diff --git a/tests/use-keydown.test.ts b/tests/use-keydown.test.ts
new file mode 100644
index 0000000..c2d48dc
--- /dev/null
+++ b/tests/use-keydown.test.ts
@@ -0,0 +1,121 @@
+import { renderHook } from "@testing-library/react";
+import userEvent from "@testing-library/user-event";
+import { useKeydown } from "src";
+
+it("listens to keydown events", async () => {
+ const user = userEvent.setup();
+ const fn = vi.fn();
+
+ renderHook(() => useKeydown("Enter", fn));
+
+ expect(fn).toHaveBeenCalledTimes(0);
+
+ await user.keyboard("[Enter]");
+
+ expect(fn).toHaveBeenCalledTimes(1);
+
+ await user.keyboard("[Tab]");
+
+ expect(fn).toHaveBeenCalledTimes(1);
+});
+
+it("can customize modifier keys", async () => {
+ const user = userEvent.setup();
+ const fn = vi.fn();
+
+ renderHook(() => useKeydown("Enter", fn, { ctrl: true, shift: true }));
+
+ expect(fn).toHaveBeenCalledTimes(0);
+
+ await user.keyboard("[Enter]");
+
+ expect(fn).toHaveBeenCalledTimes(0);
+
+ await user.keyboard("[ControlLeft>][Enter][/ControlLeft]");
+
+ expect(fn).toHaveBeenCalledTimes(0);
+
+ await user.keyboard("[ShiftLeft>][Enter][/ShiftLeft]");
+
+ expect(fn).toHaveBeenCalledTimes(0);
+
+ await user.keyboard(
+ "[ControlLeft>][ShiftLeft>][Enter][/ShiftLeft][/ControlLeft]",
+ );
+
+ expect(fn).toHaveBeenCalledTimes(1);
+
+ await user.keyboard(
+ "[ControlRight>][ShiftRight>][Enter][/ShiftRight][/ControlRight]",
+ );
+
+ expect(fn).toHaveBeenCalledTimes(2);
+
+ await user.keyboard(
+ "[ControlLeft>][ShiftLeft>][AltLeft>][Enter][/AltLeft][/ShiftLeft][/ControlLeft]",
+ );
+
+ expect(fn).toHaveBeenCalledTimes(2);
+});
+
+it("responds to dynamic `key`", async () => {
+ const user = userEvent.setup();
+ const fn = vi.fn();
+
+ const { rerender } = renderHook((code) => useKeydown(code, fn), {
+ initialProps: "Enter",
+ });
+
+ expect(fn).toHaveBeenCalledTimes(0);
+
+ await user.keyboard("[Enter]");
+
+ expect(fn).toHaveBeenCalledTimes(1);
+
+ await user.keyboard("[Tab]");
+
+ expect(fn).toHaveBeenCalledTimes(1);
+
+ rerender("Tab");
+
+ expect(fn).toHaveBeenCalledTimes(1);
+
+ await user.keyboard("[Enter]");
+
+ expect(fn).toHaveBeenCalledTimes(1);
+
+ await user.keyboard("[Tab]");
+
+ expect(fn).toHaveBeenCalledTimes(2);
+});
+
+it("responds to dynamic `modifierKeys`", async () => {
+ const user = userEvent.setup();
+ const fn = vi.fn();
+
+ const { rerender } = renderHook((ctrl) => useKeydown("Enter", fn, { ctrl }), {
+ initialProps: false,
+ });
+
+ expect(fn).toHaveBeenCalledTimes(0);
+
+ await user.keyboard("[Enter]");
+
+ expect(fn).toHaveBeenCalledTimes(1);
+
+ await user.keyboard("[ControlLeft>][Enter][/ControlLeft]");
+
+ expect(fn).toHaveBeenCalledTimes(1);
+
+ rerender(true);
+
+ expect(fn).toHaveBeenCalledTimes(1);
+
+ await user.keyboard("[Enter]");
+
+ expect(fn).toHaveBeenCalledTimes(1);
+
+ await user.keyboard("[ControlLeft>][Enter][/ControlLeft]");
+
+ expect(fn).toHaveBeenCalledTimes(2);
+});
diff --git a/packages/hooks/tests/use-latest.test.ts b/tests/use-latest.test.ts
similarity index 99%
rename from packages/hooks/tests/use-latest.test.ts
rename to tests/use-latest.test.ts
index 53de13f..37b8101 100644
--- a/packages/hooks/tests/use-latest.test.ts
+++ b/tests/use-latest.test.ts
@@ -5,12 +5,15 @@ it("returns latest primitive", () => {
const { result, rerender } = renderHook((count) => useLatest(count), {
initialProps: 0,
});
+
expect(result.current.current).toEqual(0);
rerender(1);
+
expect(result.current.current).toEqual(1);
rerender(2);
+
expect(result.current.current).toEqual(2);
});
@@ -18,12 +21,15 @@ it("returns latest object", () => {
const { result, rerender } = renderHook((obj) => useLatest(obj), {
initialProps: { a: 1 },
});
+
expect(result.current.current).toEqual({ a: 1 });
rerender({ a: 2 });
+
expect(result.current.current).toEqual({ a: 2 });
rerender({ a: 3 });
+
expect(result.current.current).toEqual({ a: 3 });
});
@@ -31,11 +37,14 @@ it("returns latest function", () => {
const { result, rerender } = renderHook((fn) => useLatest(fn), {
initialProps: () => 1 as number,
});
+
expect(result.current.current()).toEqual(1);
rerender(() => 2);
+
expect(result.current.current()).toEqual(2);
rerender(() => 3);
+
expect(result.current.current()).toEqual(3);
});
diff --git a/tests/use-local-storage.test.ts b/tests/use-local-storage.test.ts
new file mode 100644
index 0000000..53a0df6
--- /dev/null
+++ b/tests/use-local-storage.test.ts
@@ -0,0 +1,167 @@
+import { act, renderHook } from "@testing-library/react";
+import { useLocalStorage } from "src";
+
+const mockGetItem = vi.spyOn(Storage.prototype, "getItem");
+const mockSetItem = vi.spyOn(Storage.prototype, "setItem");
+const mockRemoveItem = vi.spyOn(Storage.prototype, "removeItem");
+
+afterEach(() => {
+ localStorage.clear();
+ vi.clearAllMocks();
+});
+
+afterAll(() => {
+ vi.restoreAllMocks();
+});
+
+it("returns `null` if there is no stored value", () => {
+ const { result } = renderHook(() => useLocalStorage("test"));
+
+ expect(result.current.value).toEqual(null);
+ expect(localStorage.getItem("test")).toEqual(null);
+});
+
+it("returns stored value if there is stored value", () => {
+ localStorage.setItem("test", "1");
+
+ const { result } = renderHook(() => useLocalStorage("test"));
+
+ expect(result.current.value).toEqual(1);
+ expect(localStorage.getItem("test")).toEqual("1");
+});
+
+it("responds to dynamic `key`", () => {
+ localStorage.setItem("test1", "1");
+
+ const { result, rerender } = renderHook((key) => useLocalStorage(key), {
+ initialProps: "test1",
+ });
+
+ expect(result.current.value).toEqual(1);
+ expect(localStorage.getItem("test1")).toEqual("1");
+
+ rerender("test2");
+
+ expect(result.current.value).toEqual(null);
+ expect(localStorage.getItem("test2")).toEqual(null);
+});
+
+it("can set value with a value", () => {
+ const { result } = renderHook(() => useLocalStorage("test"));
+
+ expect(result.current.value).toEqual(null);
+ expect(localStorage.getItem("test")).toEqual(null);
+
+ act(() => result.current.set(1));
+
+ expect(result.current.value).toEqual(1);
+ expect(localStorage.getItem("test")).toEqual("1");
+
+ act(() => result.current.set(2));
+
+ expect(result.current.value).toEqual(2);
+ expect(localStorage.getItem("test")).toEqual("2");
+});
+
+it("can set value with a function", () => {
+ const { result } = renderHook(() => useLocalStorage("test"));
+
+ expect(result.current.value).toEqual(null);
+ expect(localStorage.getItem("test")).toEqual(null);
+
+ act(() => result.current.set((prev: number) => (prev ?? 0) + 1));
+
+ expect(result.current.value).toEqual(1);
+ expect(localStorage.getItem("test")).toEqual("1");
+
+ act(() => result.current.set((prev: number) => (prev ?? 0) + 1));
+
+ expect(result.current.value).toEqual(2);
+ expect(localStorage.getItem("test")).toEqual("2");
+});
+
+it("can remove value", () => {
+ localStorage.setItem("test", "1");
+
+ const { result } = renderHook(() => useLocalStorage("test"));
+
+ expect(result.current.value).toEqual(1);
+ expect(localStorage.getItem("test")).toEqual("1");
+
+ act(() => result.current.remove());
+
+ expect(result.current.value).toEqual(null);
+ expect(localStorage.getItem("test")).toEqual(null);
+
+ act(() => result.current.remove());
+
+ expect(result.current.value).toEqual(null);
+ expect(localStorage.getItem("test")).toEqual(null);
+});
+
+it("can customize `serializer` and `deserializer`", () => {
+ const { result } = renderHook(() =>
+ useLocalStorage("test", {
+ serializer: (value) => String(value + 1),
+ deserializer: (value) => Number(value) - 1,
+ }),
+ );
+
+ expect(result.current.value).toEqual(null);
+ expect(localStorage.getItem("test")).toEqual(null);
+
+ act(() => result.current.set(1));
+
+ expect(result.current.value).toEqual(1);
+ expect(localStorage.getItem("test")).toEqual("2");
+
+ act(() => result.current.set(2));
+
+ expect(result.current.value).toEqual(2);
+ expect(localStorage.getItem("test")).toEqual("3");
+});
+
+it("returns `null` if `localStorage.getItem` throws an error", () => {
+ localStorage.setItem("test", "1");
+ mockGetItem.mockImplementationOnce(() => {
+ throw new Error("test");
+ });
+
+ const { result } = renderHook(() => useLocalStorage("test"));
+
+ expect(result.current.value).toEqual(null);
+ expect(localStorage.getItem("test")).toEqual("1");
+});
+
+it("does not set value if `localStorage.setItem` throws an error", () => {
+ mockSetItem.mockImplementationOnce(() => {
+ throw new Error("test");
+ });
+
+ const { result } = renderHook(() => useLocalStorage("test"));
+
+ expect(result.current.value).toEqual(null);
+ expect(localStorage.getItem("test")).toEqual(null);
+
+ act(() => result.current.set(1));
+
+ expect(result.current.value).toEqual(null);
+ expect(localStorage.getItem("test")).toEqual(null);
+});
+
+it("does not remove value if `localStorage.removeItem` throws an error", () => {
+ localStorage.setItem("test", "1");
+ mockRemoveItem.mockImplementationOnce(() => {
+ throw new Error("test");
+ });
+
+ const { result } = renderHook(() => useLocalStorage("test"));
+
+ expect(result.current.value).toEqual(1);
+ expect(localStorage.getItem("test")).toEqual("1");
+
+ act(() => result.current.remove());
+
+ expect(result.current.value).toEqual(1);
+ expect(localStorage.getItem("test")).toEqual("1");
+});
diff --git a/tests/use-media-query.test.ts b/tests/use-media-query.test.ts
new file mode 100644
index 0000000..bc68ba0
--- /dev/null
+++ b/tests/use-media-query.test.ts
@@ -0,0 +1,55 @@
+import { renderHook } from "@testing-library/react";
+import { useMediaQuery } from "src";
+
+const mockMatchMedia = vi.fn();
+
+const commonReturnValue = {
+ addEventListener: () => {},
+ removeEventListener: () => {},
+};
+
+beforeAll(() => {
+ window.innerWidth = 1024;
+ vi.stubGlobal("matchMedia", mockMatchMedia);
+});
+
+afterEach(() => {
+ vi.clearAllMocks();
+});
+
+afterAll(() => {
+ vi.unstubAllGlobals();
+ vi.restoreAllMocks();
+});
+
+it("returns `true` if matched", () => {
+ mockMatchMedia.mockReturnValueOnce({ matches: true, ...commonReturnValue });
+
+ const { result } = renderHook(() => useMediaQuery("(max-width: 1280px)"));
+
+ expect(result.current).toEqual(true);
+});
+
+it("returns `false` if not matched", () => {
+ mockMatchMedia.mockReturnValueOnce({ matches: false, ...commonReturnValue });
+
+ const { result } = renderHook(() => useMediaQuery("(max-width: 640px)"));
+
+ expect(result.current).toEqual(false);
+});
+
+it("responds to dynamic `query`", () => {
+ mockMatchMedia.mockReturnValueOnce({ matches: true, ...commonReturnValue });
+
+ const { result, rerender } = renderHook((query) => useMediaQuery(query), {
+ initialProps: "max-width: 1280px",
+ });
+
+ expect(result.current).toEqual(true);
+
+ mockMatchMedia.mockReturnValueOnce({ matches: false, ...commonReturnValue });
+
+ rerender("max-width: 640px");
+
+ expect(result.current).toEqual(false);
+});
diff --git a/packages/hooks/tests/use-mount.test.ts b/tests/use-mount.test.ts
similarity index 78%
rename from packages/hooks/tests/use-mount.test.ts
rename to tests/use-mount.test.ts
index e263cae..b795cac 100644
--- a/packages/hooks/tests/use-mount.test.ts
+++ b/tests/use-mount.test.ts
@@ -1,19 +1,27 @@
import { renderHook } from "@testing-library/react";
import { useMount } from "src";
-it("only runs on mount", () => {
+it("runs only on mount", () => {
const cleanup = vi.fn();
const effect = vi.fn(() => cleanup);
const { rerender, unmount } = renderHook(() => useMount(effect));
+
+ expect(effect).toHaveBeenCalledTimes(1);
+ expect(cleanup).toHaveBeenCalledTimes(0);
+
+ rerender();
+
expect(effect).toHaveBeenCalledTimes(1);
expect(cleanup).toHaveBeenCalledTimes(0);
rerender();
+
expect(effect).toHaveBeenCalledTimes(1);
expect(cleanup).toHaveBeenCalledTimes(0);
unmount();
+
expect(effect).toHaveBeenCalledTimes(1);
expect(cleanup).toHaveBeenCalledTimes(1);
});
diff --git a/packages/hooks/tests/use-previous.test.ts b/tests/use-previous.test.ts
similarity index 60%
rename from packages/hooks/tests/use-previous.test.ts
rename to tests/use-previous.test.ts
index 7fc9146..3912bbc 100644
--- a/packages/hooks/tests/use-previous.test.ts
+++ b/tests/use-previous.test.ts
@@ -1,29 +1,35 @@
import { renderHook } from "@testing-library/react";
import { usePrevious } from "src";
-it("stores previous state", () => {
+it("returns previous state", () => {
const { result, rerender } = renderHook((count) => usePrevious(count), {
initialProps: 0,
});
- expect(result.current).toEqual(undefined);
+
+ expect(result.current).toEqual(null);
rerender(1);
+
expect(result.current).toEqual(0);
rerender(2);
+
expect(result.current).toEqual(1);
});
-it("can customize equal function", () => {
+it("can customize `equalFn`", () => {
const { result, rerender } = renderHook(
(count) => usePrevious(count, () => true),
- { initialProps: 0 }
+ { initialProps: 0 },
);
- expect(result.current).toEqual(undefined);
+
+ expect(result.current).toEqual(null);
rerender(1);
- expect(result.current).toEqual(undefined);
+
+ expect(result.current).toEqual(null);
rerender(2);
- expect(result.current).toEqual(undefined);
+
+ expect(result.current).toEqual(null);
});
diff --git a/packages/hooks/tests/use-rerender.test.ts b/tests/use-rerender.test.ts
similarity index 78%
rename from packages/hooks/tests/use-rerender.test.ts
rename to tests/use-rerender.test.ts
index 35735b3..4428f20 100644
--- a/packages/hooks/tests/use-rerender.test.ts
+++ b/tests/use-rerender.test.ts
@@ -2,7 +2,7 @@ import { act, renderHook } from "@testing-library/react";
import { useEffect } from "react";
import { useRerender } from "src";
-it("can force a re-render", () => {
+it("forces a re-render", () => {
const effect = vi.fn();
const { result } = renderHook(() => {
@@ -10,8 +10,14 @@ it("can force a re-render", () => {
useEffect(effect);
return rerender;
});
+
expect(effect).toHaveBeenCalledTimes(1);
act(() => result.current());
+
expect(effect).toHaveBeenCalledTimes(2);
+
+ act(() => result.current());
+
+ expect(effect).toHaveBeenCalledTimes(3);
});
diff --git a/packages/hooks/tests/use-safe-layout-effect.test.ts b/tests/use-safe-layout-effect.test.ts
similarity index 78%
rename from packages/hooks/tests/use-safe-layout-effect.test.ts
rename to tests/use-safe-layout-effect.test.ts
index 4f9576a..7c6bb5b 100644
--- a/packages/hooks/tests/use-safe-layout-effect.test.ts
+++ b/tests/use-safe-layout-effect.test.ts
@@ -3,17 +3,18 @@ import { useSafeLayoutEffect } from "src";
beforeAll(() => {
document.body.innerHTML = `
-
+
`;
});
-it("runs exactly as useLayoutEffect", () => {
+it("is exactly same as `useLayoutEffect`", () => {
const target = screen.getByTestId("target");
renderHook(() =>
useSafeLayoutEffect(() => {
target.innerHTML = "foo";
- })
+ }),
);
+
expect(target.innerHTML).toEqual("foo");
});
diff --git a/tests/use-session-storage.test.ts b/tests/use-session-storage.test.ts
new file mode 100644
index 0000000..fcfd03a
--- /dev/null
+++ b/tests/use-session-storage.test.ts
@@ -0,0 +1,167 @@
+import { act, renderHook } from "@testing-library/react";
+import { useSessionStorage } from "src";
+
+const mockGetItem = vi.spyOn(Storage.prototype, "getItem");
+const mockSetItem = vi.spyOn(Storage.prototype, "setItem");
+const mockRemoveItem = vi.spyOn(Storage.prototype, "removeItem");
+
+afterEach(() => {
+ sessionStorage.clear();
+ vi.clearAllMocks();
+});
+
+afterAll(() => {
+ vi.restoreAllMocks();
+});
+
+it("returns `null` if there is no stored value", () => {
+ const { result } = renderHook(() => useSessionStorage("test"));
+
+ expect(result.current.value).toEqual(null);
+ expect(sessionStorage.getItem("test")).toEqual(null);
+});
+
+it("returns stored value if there is stored value", () => {
+ sessionStorage.setItem("test", "1");
+
+ const { result } = renderHook(() => useSessionStorage("test"));
+
+ expect(result.current.value).toEqual(1);
+ expect(sessionStorage.getItem("test")).toEqual("1");
+});
+
+it("responds to dynamic `key`", () => {
+ sessionStorage.setItem("test1", "1");
+
+ const { result, rerender } = renderHook((key) => useSessionStorage(key), {
+ initialProps: "test1",
+ });
+
+ expect(result.current.value).toEqual(1);
+ expect(sessionStorage.getItem("test1")).toEqual("1");
+
+ rerender("test2");
+
+ expect(result.current.value).toEqual(null);
+ expect(sessionStorage.getItem("test2")).toEqual(null);
+});
+
+it("can set value with a value", () => {
+ const { result } = renderHook(() => useSessionStorage("test"));
+
+ expect(result.current.value).toEqual(null);
+ expect(sessionStorage.getItem("test")).toEqual(null);
+
+ act(() => result.current.set(1));
+
+ expect(result.current.value).toEqual(1);
+ expect(sessionStorage.getItem("test")).toEqual("1");
+
+ act(() => result.current.set(2));
+
+ expect(result.current.value).toEqual(2);
+ expect(sessionStorage.getItem("test")).toEqual("2");
+});
+
+it("can set value with a function", () => {
+ const { result } = renderHook(() => useSessionStorage("test"));
+
+ expect(result.current.value).toEqual(null);
+ expect(sessionStorage.getItem("test")).toEqual(null);
+
+ act(() => result.current.set((prev: number) => (prev ?? 0) + 1));
+
+ expect(result.current.value).toEqual(1);
+ expect(sessionStorage.getItem("test")).toEqual("1");
+
+ act(() => result.current.set((prev: number) => (prev ?? 0) + 1));
+
+ expect(result.current.value).toEqual(2);
+ expect(sessionStorage.getItem("test")).toEqual("2");
+});
+
+it("can remove value", () => {
+ sessionStorage.setItem("test", "1");
+
+ const { result } = renderHook(() => useSessionStorage("test"));
+
+ expect(result.current.value).toEqual(1);
+ expect(sessionStorage.getItem("test")).toEqual("1");
+
+ act(() => result.current.remove());
+
+ expect(result.current.value).toEqual(null);
+ expect(sessionStorage.getItem("test")).toEqual(null);
+
+ act(() => result.current.remove());
+
+ expect(result.current.value).toEqual(null);
+ expect(sessionStorage.getItem("test")).toEqual(null);
+});
+
+it("can customize `serializer` and `deserializer`", () => {
+ const { result } = renderHook(() =>
+ useSessionStorage("test", {
+ serializer: (value) => String(value + 1),
+ deserializer: (value) => Number(value) - 1,
+ }),
+ );
+
+ expect(result.current.value).toEqual(null);
+ expect(sessionStorage.getItem("test")).toEqual(null);
+
+ act(() => result.current.set(1));
+
+ expect(result.current.value).toEqual(1);
+ expect(sessionStorage.getItem("test")).toEqual("2");
+
+ act(() => result.current.set(2));
+
+ expect(result.current.value).toEqual(2);
+ expect(sessionStorage.getItem("test")).toEqual("3");
+});
+
+it("returns `null` if `sessionStorage.getItem` throws an error", () => {
+ sessionStorage.setItem("test", "1");
+ mockGetItem.mockImplementationOnce(() => {
+ throw new Error("test");
+ });
+
+ const { result } = renderHook(() => useSessionStorage("test"));
+
+ expect(result.current.value).toEqual(null);
+ expect(sessionStorage.getItem("test")).toEqual("1");
+});
+
+it("does not set value if `sessionStorage.setItem` throws an error", () => {
+ mockSetItem.mockImplementationOnce(() => {
+ throw new Error("test");
+ });
+
+ const { result } = renderHook(() => useSessionStorage("test"));
+
+ expect(result.current.value).toEqual(null);
+ expect(sessionStorage.getItem("test")).toEqual(null);
+
+ act(() => result.current.set(1));
+
+ expect(result.current.value).toEqual(null);
+ expect(sessionStorage.getItem("test")).toEqual(null);
+});
+
+it("does not remove value if `sessionStorage.removeItem` throws an error", () => {
+ sessionStorage.setItem("test", "1");
+ mockRemoveItem.mockImplementationOnce(() => {
+ throw new Error("test");
+ });
+
+ const { result } = renderHook(() => useSessionStorage("test"));
+
+ expect(result.current.value).toEqual(1);
+ expect(sessionStorage.getItem("test")).toEqual("1");
+
+ act(() => result.current.remove());
+
+ expect(result.current.value).toEqual(1);
+ expect(sessionStorage.getItem("test")).toEqual("1");
+});
diff --git a/tests/use-text-selection.test.ts b/tests/use-text-selection.test.ts
new file mode 100644
index 0000000..a7142d8
--- /dev/null
+++ b/tests/use-text-selection.test.ts
@@ -0,0 +1,110 @@
+import { fireEvent, renderHook, screen } from "@testing-library/react";
+import { useTextSelection } from "src";
+
+beforeAll(() => {
+ document.body.innerHTML = `
+ hello
+ `;
+});
+
+afterEach(() => {
+ cancelSelection();
+});
+
+function selectOneLetter() {
+ const text = screen.getByTestId("target").firstChild as Text;
+ document.getSelection()?.setBaseAndExtent(text, 0, text, 1);
+ fireEvent.mouseUp(document);
+}
+
+function selectTwoLetters() {
+ const text = screen.getByTestId("target").firstChild as Text;
+ document.getSelection()?.setBaseAndExtent(text, 0, text, 2);
+ fireEvent.mouseUp(document);
+}
+
+function cancelSelection() {
+ document.getSelection()?.removeAllRanges();
+ fireEvent.mouseUp(document);
+}
+
+it("returns selected text", () => {
+ selectOneLetter();
+
+ const { result } = renderHook(() => useTextSelection());
+
+ expect(result.current).toEqual("h");
+});
+
+it("listens to selection changes", () => {
+ const { result } = renderHook(() => useTextSelection());
+
+ expect(result.current).toEqual("");
+
+ selectOneLetter();
+
+ expect(result.current).toEqual("h");
+
+ cancelSelection();
+
+ expect(result.current).toEqual("");
+
+ selectTwoLetters();
+
+ expect(result.current).toEqual("he");
+
+ cancelSelection();
+
+ expect(result.current).toEqual("");
+});
+
+it("can keep selection after cancellation", () => {
+ const { result } = renderHook(() => useTextSelection({ sticky: true }));
+
+ expect(result.current).toEqual("");
+
+ selectOneLetter();
+
+ expect(result.current).toEqual("h");
+
+ cancelSelection();
+
+ expect(result.current).toEqual("h");
+
+ selectTwoLetters();
+
+ expect(result.current).toEqual("he");
+
+ cancelSelection();
+
+ expect(result.current).toEqual("he");
+});
+
+it("responds to dynamic `sticky`", () => {
+ const { result, rerender } = renderHook(
+ (sticky) => useTextSelection({ sticky }),
+ { initialProps: false },
+ );
+
+ expect(result.current).toEqual("");
+
+ selectOneLetter();
+
+ expect(result.current).toEqual("h");
+
+ cancelSelection();
+
+ expect(result.current).toEqual("");
+
+ rerender(true);
+
+ expect(result.current).toEqual("");
+
+ selectOneLetter();
+
+ expect(result.current).toEqual("h");
+
+ cancelSelection();
+
+ expect(result.current).toEqual("h");
+});
diff --git a/packages/hooks/tests/use-theme.test.ts b/tests/use-theme.test.ts
similarity index 66%
rename from packages/hooks/tests/use-theme.test.ts
rename to tests/use-theme.test.ts
index 1492999..22185aa 100644
--- a/packages/hooks/tests/use-theme.test.ts
+++ b/tests/use-theme.test.ts
@@ -1,117 +1,177 @@
import { act, renderHook } from "@testing-library/react";
import { useTheme, type Theme } from "src";
-import { matchMedia } from "./utils/match-media";
beforeAll(() => {
- vi.stubGlobal("matchMedia", matchMedia);
+ vi.stubGlobal("matchMedia", () => ({
+ matches: true,
+ addEventListener: () => {},
+ removeEventListener: () => {},
+ }));
});
+
+afterEach(() => {
+ localStorage.clear();
+});
+
afterAll(() => {
vi.unstubAllGlobals();
});
-afterEach(() => localStorage.clear());
it("defaults to device theme", () => {
const { result } = renderHook(() => useTheme());
+
expect(result.current.theme).toEqual("dark");
expect(localStorage.getItem("theme")).toEqual(null);
});
-it("prefers default theme to OS theme", () => {
+it("prefers default theme to device theme", () => {
const { result } = renderHook(() => useTheme({ defaultTheme: "light" }));
+
expect(result.current.theme).toEqual("light");
expect(localStorage.getItem("theme")).toEqual(null);
});
-it("responds to stateful default theme", () => {
+it("prefers stored theme to device theme", () => {
+ localStorage.setItem("theme", "light");
+
+ const { result } = renderHook(() => useTheme());
+
+ expect(result.current.theme).toEqual("light");
+ expect(localStorage.getItem("theme")).toEqual("light");
+});
+
+it("prefers stored theme to default theme", () => {
+ localStorage.setItem("theme", "light");
+
+ const { result } = renderHook(() => useTheme({ defaultTheme: "dark" }));
+
+ expect(result.current.theme).toEqual("light");
+ expect(localStorage.getItem("theme")).toEqual("light");
+});
+
+it("responds to dynamic `defaultTheme`", () => {
const { result, rerender } = renderHook(
(defaultTheme: Theme) => useTheme({ defaultTheme }),
- { initialProps: "light" }
+ { initialProps: "light" },
);
+
expect(result.current.theme).toEqual("light");
expect(localStorage.getItem("theme")).toEqual(null);
rerender("dark");
+
expect(result.current.theme).toEqual("dark");
expect(localStorage.getItem("theme")).toEqual(null);
});
-it("prefers user theme to default theme", () => {
- localStorage.setItem("theme", "light");
-
- const { result } = renderHook(() => useTheme({ defaultTheme: "dark" }));
- expect(result.current.theme).toEqual("light");
-});
-
-it("can customize storage key", () => {
+it("can customize `storageKey`", () => {
const { result } = renderHook(() => useTheme({ storageKey: "test" }));
+
expect(result.current.theme).toEqual("dark");
expect(localStorage.getItem("test")).toEqual(null);
act(() => result.current.toggle());
+
expect(result.current.theme).toEqual("light");
expect(localStorage.getItem("test")).toEqual("light");
});
-it("responds to stateful storage key", () => {
- localStorage.setItem("test", "light");
- localStorage.setItem("theme", "dark");
+it("responds to dynamic `storageKey`", () => {
+ localStorage.setItem("test1", "light");
+ localStorage.setItem("test2", "dark");
const { result, rerender } = renderHook(
(storageKey: string) => useTheme({ storageKey }),
- { initialProps: "test" }
+ { initialProps: "test1" },
);
+
expect(result.current.theme).toEqual("light");
- expect(localStorage.getItem("test")).toEqual("light");
+ expect(localStorage.getItem("test1")).toEqual("light");
+
+ rerender("test2");
- rerender("theme");
expect(result.current.theme).toEqual("dark");
- expect(localStorage.getItem("theme")).toEqual("dark");
+ expect(localStorage.getItem("test2")).toEqual("dark");
});
it("can set theme", () => {
const { result } = renderHook(() => useTheme());
+
expect(result.current.theme).toEqual("dark");
expect(localStorage.getItem("theme")).toEqual(null);
act(() => result.current.set("light"));
+
expect(result.current.theme).toEqual("light");
expect(localStorage.getItem("theme")).toEqual("light");
act(() => result.current.set("dark"));
+
expect(result.current.theme).toEqual("dark");
expect(localStorage.getItem("theme")).toEqual("dark");
});
-it("can toggle theme", () => {
- const { result } = renderHook(() => useTheme());
+it("can set theme to light", () => {
+ const { result } = renderHook(() => useTheme({ defaultTheme: "dark" }));
+
expect(result.current.theme).toEqual("dark");
expect(localStorage.getItem("theme")).toEqual(null);
- act(() => result.current.toggle());
+ act(() => result.current.setLight());
+
expect(result.current.theme).toEqual("light");
expect(localStorage.getItem("theme")).toEqual("light");
- act(() => result.current.toggle());
+ act(() => result.current.setLight());
+
+ expect(result.current.theme).toEqual("light");
+ expect(localStorage.getItem("theme")).toEqual("light");
+});
+
+it("can set theme to dark", () => {
+ const { result } = renderHook(() => useTheme({ defaultTheme: "light" }));
+
+ expect(result.current.theme).toEqual("light");
+ expect(localStorage.getItem("theme")).toEqual(null);
+
+ act(() => result.current.setDark());
+
+ expect(result.current.theme).toEqual("dark");
+ expect(localStorage.getItem("theme")).toEqual("dark");
+
+ act(() => result.current.setDark());
+
expect(result.current.theme).toEqual("dark");
expect(localStorage.getItem("theme")).toEqual("dark");
});
-it("can set theme to light", () => {
- const { result } = renderHook(() => useTheme({ defaultTheme: "dark" }));
+it("can toggle theme", () => {
+ const { result } = renderHook(() => useTheme());
+
expect(result.current.theme).toEqual("dark");
expect(localStorage.getItem("theme")).toEqual(null);
- act(() => result.current.setLight());
+ act(() => result.current.toggle());
+
expect(result.current.theme).toEqual("light");
expect(localStorage.getItem("theme")).toEqual("light");
+
+ act(() => result.current.toggle());
+
+ expect(result.current.theme).toEqual("dark");
+ expect(localStorage.getItem("theme")).toEqual("dark");
});
-it("can set theme to dark", () => {
- const { result } = renderHook(() => useTheme({ defaultTheme: "light" }));
+it("can reset theme", () => {
+ localStorage.setItem("theme", "light");
+
+ const { result } = renderHook(() => useTheme());
+
expect(result.current.theme).toEqual("light");
- expect(localStorage.getItem("theme")).toEqual(null);
+ expect(localStorage.getItem("theme")).toEqual("light");
+
+ act(() => result.current.reset());
- act(() => result.current.setDark());
expect(result.current.theme).toEqual("dark");
- expect(localStorage.getItem("theme")).toEqual("dark");
+ expect(localStorage.getItem("theme")).toEqual(null);
});
diff --git a/packages/hooks/tests/use-throttle-effect.test.ts b/tests/use-throttle-effect.test.ts
similarity index 63%
rename from packages/hooks/tests/use-throttle-effect.test.ts
rename to tests/use-throttle-effect.test.ts
index 3f61e73..98e58f7 100644
--- a/packages/hooks/tests/use-throttle-effect.test.ts
+++ b/tests/use-throttle-effect.test.ts
@@ -4,78 +4,119 @@ import { useThrottleEffect } from "src";
beforeAll(() => {
vi.useFakeTimers();
});
-afterAll(() => {
- vi.useRealTimers();
-});
+
afterEach(() => {
vi.clearAllTimers();
});
-it("triggers effect only once in a period", () => {
+afterAll(() => {
+ vi.useRealTimers();
+});
+
+it("triggers effect only once in a while", () => {
const effect = vi.fn();
const { rerender } = renderHook(
(count) => useThrottleEffect(effect, [count]),
- { initialProps: 0 }
+ { initialProps: 0 },
);
+
expect(effect).toHaveBeenCalledTimes(0);
rerender(1);
+
expect(effect).toHaveBeenCalledTimes(1);
vi.advanceTimersByTime(499);
rerender(2);
rerender(3);
rerender(4);
+
expect(effect).toHaveBeenCalledTimes(1);
vi.advanceTimersByTime(1);
rerender(5);
+
expect(effect).toHaveBeenCalledTimes(2);
});
-it("can customize timeout", () => {
+it("can customize `timeout`", () => {
const effect = vi.fn();
const { rerender } = renderHook(
(count) => useThrottleEffect(effect, [count], { timeout: 100 }),
- { initialProps: 0 }
+ { initialProps: 0 },
);
+
expect(effect).toHaveBeenCalledTimes(0);
rerender(1);
+
expect(effect).toHaveBeenCalledTimes(1);
vi.advanceTimersByTime(99);
rerender(2);
rerender(3);
rerender(4);
+
expect(effect).toHaveBeenCalledTimes(1);
vi.advanceTimersByTime(1);
rerender(5);
+
+ expect(effect).toHaveBeenCalledTimes(2);
+});
+
+it("responds to dynamic `timeout`", () => {
+ const effect = vi.fn();
+
+ const { rerender } = renderHook(
+ ({ count, timeout }) => useThrottleEffect(effect, [count], { timeout }),
+ { initialProps: { count: 0, timeout: 100 } },
+ );
+
+ expect(effect).toHaveBeenCalledTimes(0);
+
+ rerender({ count: 1, timeout: 200 });
+
+ expect(effect).toHaveBeenCalledTimes(1);
+
+ vi.advanceTimersByTime(199);
+ rerender({ count: 2, timeout: 200 });
+ rerender({ count: 3, timeout: 200 });
+ rerender({ count: 4, timeout: 200 });
+
+ expect(effect).toHaveBeenCalledTimes(1);
+
+ vi.advanceTimersByTime(1);
+ rerender({ count: 5, timeout: 200 });
+
expect(effect).toHaveBeenCalledTimes(2);
});
-it("can start timing on mount", () => {
+it("can run on mount", () => {
const effect = vi.fn();
const { rerender } = renderHook(
(count) => useThrottleEffect(effect, [count], { onMount: true }),
- { initialProps: 0 }
+ { initialProps: 0 },
);
+
expect(effect).toHaveBeenCalledTimes(1);
rerender(1);
+
expect(effect).toHaveBeenCalledTimes(1);
vi.advanceTimersByTime(499);
rerender(2);
rerender(3);
rerender(4);
+
expect(effect).toHaveBeenCalledTimes(1);
vi.advanceTimersByTime(1);
rerender(5);
+
expect(effect).toHaveBeenCalledTimes(2);
});
diff --git a/packages/hooks/tests/use-throttle.test.ts b/tests/use-throttle.test.ts
similarity index 63%
rename from packages/hooks/tests/use-throttle.test.ts
rename to tests/use-throttle.test.ts
index 47a464b..304ee1e 100644
--- a/packages/hooks/tests/use-throttle.test.ts
+++ b/tests/use-throttle.test.ts
@@ -4,71 +4,110 @@ import { useThrottle } from "src";
beforeAll(() => {
vi.useFakeTimers();
});
-afterAll(() => {
- vi.useRealTimers();
-});
+
afterEach(() => {
vi.clearAllTimers();
});
-it("updates value only once in a period", () => {
+afterAll(() => {
+ vi.useRealTimers();
+});
+
+it("updates value only once in a while", () => {
const { result, rerender } = renderHook((count) => useThrottle(count), {
initialProps: 0,
});
+
expect(result.current).toEqual(0);
rerender(1);
+
expect(result.current).toEqual(1);
vi.advanceTimersByTime(499);
rerender(2);
rerender(3);
rerender(4);
+
expect(result.current).toEqual(1);
vi.advanceTimersByTime(1);
rerender(5);
+
expect(result.current).toEqual(5);
});
-it("can customize timeout", () => {
+it("can customize `timeout`", () => {
const { result, rerender } = renderHook(
(count) => useThrottle(count, { timeout: 100 }),
- { initialProps: 0 }
+ { initialProps: 0 },
);
+
expect(result.current).toEqual(0);
rerender(1);
+
expect(result.current).toEqual(1);
vi.advanceTimersByTime(99);
rerender(2);
rerender(3);
rerender(4);
+
expect(result.current).toEqual(1);
vi.advanceTimersByTime(1);
rerender(5);
+
+ expect(result.current).toEqual(5);
+});
+
+it("responds to dynamic `timeout`", () => {
+ const { result, rerender } = renderHook(
+ ({ count, timeout }) => useThrottle(count, { timeout }),
+ { initialProps: { count: 0, timeout: 100 } },
+ );
+
+ expect(result.current).toEqual(0);
+
+ rerender({ count: 1, timeout: 200 });
+
+ expect(result.current).toEqual(1);
+
+ vi.advanceTimersByTime(199);
+ rerender({ count: 2, timeout: 200 });
+ rerender({ count: 3, timeout: 200 });
+ rerender({ count: 4, timeout: 200 });
+
+ expect(result.current).toEqual(1);
+
+ vi.advanceTimersByTime(1);
+ rerender({ count: 5, timeout: 200 });
+
expect(result.current).toEqual(5);
});
-it("can start timing on mount", () => {
+it("can run on mount", () => {
const { result, rerender } = renderHook(
(count) => useThrottle(count, { onMount: true }),
- { initialProps: 0 }
+ { initialProps: 0 },
);
+
expect(result.current).toEqual(0);
rerender(1);
+
expect(result.current).toEqual(0);
vi.advanceTimersByTime(499);
rerender(2);
rerender(3);
rerender(4);
+
expect(result.current).toEqual(0);
vi.advanceTimersByTime(1);
rerender(5);
+
expect(result.current).toEqual(5);
});
diff --git a/tests/use-timeout.test.ts b/tests/use-timeout.test.ts
new file mode 100644
index 0000000..f50deee
--- /dev/null
+++ b/tests/use-timeout.test.ts
@@ -0,0 +1,74 @@
+import { renderHook } from "@testing-library/react";
+import { useTimeout } from "src";
+
+beforeAll(() => {
+ vi.useFakeTimers();
+});
+
+afterEach(() => {
+ vi.clearAllTimers();
+});
+
+afterAll(() => {
+ vi.useRealTimers();
+});
+
+it("runs function after timeout", () => {
+ const fn = vi.fn();
+
+ renderHook(() => useTimeout(fn));
+
+ expect(fn).toHaveBeenCalledTimes(0);
+
+ vi.advanceTimersByTime(499);
+
+ expect(fn).toHaveBeenCalledTimes(0);
+
+ vi.advanceTimersByTime(1);
+
+ expect(fn).toHaveBeenCalledTimes(1);
+});
+
+it("can customize `timeout`", () => {
+ const fn = vi.fn();
+
+ renderHook(() => useTimeout(fn, 100));
+
+ expect(fn).toHaveBeenCalledTimes(0);
+
+ vi.advanceTimersByTime(99);
+
+ expect(fn).toHaveBeenCalledTimes(0);
+
+ vi.advanceTimersByTime(1);
+
+ expect(fn).toHaveBeenCalledTimes(1);
+});
+
+it("responds to dynamic `timeout`", () => {
+ const fn = vi.fn();
+
+ const { rerender } = renderHook((timeout) => useTimeout(fn, timeout), {
+ initialProps: 100,
+ });
+
+ expect(fn).toHaveBeenCalledTimes(0);
+
+ vi.advanceTimersByTime(99);
+
+ expect(fn).toHaveBeenCalledTimes(0);
+
+ vi.advanceTimersByTime(1);
+
+ expect(fn).toHaveBeenCalledTimes(1);
+
+ rerender(200);
+
+ vi.advanceTimersByTime(199);
+
+ expect(fn).toHaveBeenCalledTimes(1);
+
+ vi.advanceTimersByTime(1);
+
+ expect(fn).toHaveBeenCalledTimes(2);
+});
diff --git a/tests/use-title.test.ts b/tests/use-title.test.ts
new file mode 100644
index 0000000..c592f8d
--- /dev/null
+++ b/tests/use-title.test.ts
@@ -0,0 +1,14 @@
+import { act, renderHook } from "@testing-library/react";
+import { useTitle } from "src";
+
+it("returns title", async () => {
+ await act(async () => (document.title = "hello"));
+
+ const { result } = renderHook(() => useTitle());
+
+ expect(result.current).toEqual("hello");
+
+ await act(async () => (document.title = "world"));
+
+ expect(result.current).toEqual("world");
+});
diff --git a/packages/hooks/tests/use-toggle.test.ts b/tests/use-toggle.test.ts
similarity index 81%
rename from packages/hooks/tests/use-toggle.test.ts
rename to tests/use-toggle.test.ts
index 353ef78..c30de82 100644
--- a/packages/hooks/tests/use-toggle.test.ts
+++ b/tests/use-toggle.test.ts
@@ -1,48 +1,68 @@
import { act, renderHook } from "@testing-library/react";
import { useToggle } from "src";
-it("defaults to left-side value", () => {
+it("defaults to left-hand value", () => {
const { result } = renderHook(() => useToggle("hello", "world"));
+
expect(result.current.value).toEqual("hello");
});
it("can set value", () => {
const { result } = renderHook(() => useToggle("hello", "world"));
+
expect(result.current.value).toEqual("hello");
act(() => result.current.set("world"));
+
expect(result.current.value).toEqual("world");
act(() => result.current.set("hello"));
+
expect(result.current.value).toEqual("hello");
});
-it("can toggle value", () => {
+it("can set value to left-hand", () => {
const { result } = renderHook(() => useToggle("hello", "world"));
+
expect(result.current.value).toEqual("hello");
- act(() => result.current.toggle());
+ act(() => result.current.setRight());
+
expect(result.current.value).toEqual("world");
- act(() => result.current.toggle());
+ act(() => result.current.setLeft());
+
+ expect(result.current.value).toEqual("hello");
+
+ act(() => result.current.setLeft());
+
expect(result.current.value).toEqual("hello");
});
-it("can set value to left-side", () => {
+it("can set value to right-hand", () => {
const { result } = renderHook(() => useToggle("hello", "world"));
+
expect(result.current.value).toEqual("hello");
act(() => result.current.setRight());
+
expect(result.current.value).toEqual("world");
- act(() => result.current.setLeft());
- expect(result.current.value).toEqual("hello");
+ act(() => result.current.setRight());
+
+ expect(result.current.value).toEqual("world");
});
-it("can set value to right-side", () => {
+it("can toggle value", () => {
const { result } = renderHook(() => useToggle("hello", "world"));
+
expect(result.current.value).toEqual("hello");
- act(() => result.current.setRight());
+ act(() => result.current.toggle());
+
expect(result.current.value).toEqual("world");
+
+ act(() => result.current.toggle());
+
+ expect(result.current.value).toEqual("hello");
});
diff --git a/packages/hooks/tests/use-unmount.test.ts b/tests/use-unmount.test.ts
similarity index 78%
rename from packages/hooks/tests/use-unmount.test.ts
rename to tests/use-unmount.test.ts
index 72d8b3f..a30aa60 100644
--- a/packages/hooks/tests/use-unmount.test.ts
+++ b/tests/use-unmount.test.ts
@@ -1,15 +1,22 @@
import { renderHook } from "@testing-library/react";
import { useUnmount } from "src";
-it("only runs on unmount", () => {
+it("runs only on unmount", () => {
const cleanup = vi.fn();
const { rerender, unmount } = renderHook(() => useUnmount(cleanup));
+
expect(cleanup).toHaveBeenCalledTimes(0);
rerender();
+
+ expect(cleanup).toHaveBeenCalledTimes(0);
+
+ rerender();
+
expect(cleanup).toHaveBeenCalledTimes(0);
unmount();
+
expect(cleanup).toHaveBeenCalledTimes(1);
});
diff --git a/packages/hooks/tests/use-unsafe-once-effect.test.ts b/tests/use-unsafe-once-effect.test.ts
similarity index 71%
rename from packages/hooks/tests/use-unsafe-once-effect.test.ts
rename to tests/use-unsafe-once-effect.test.ts
index 956867c..1795a52 100644
--- a/packages/hooks/tests/use-unsafe-once-effect.test.ts
+++ b/tests/use-unsafe-once-effect.test.ts
@@ -1,19 +1,29 @@
-import { renderHook } from "@testing-library/react";
+import { configure, renderHook } from "@testing-library/react";
import { useUnsafeOnceEffect } from "src";
+configure({ reactStrictMode: true });
+
it("runs exactly once", () => {
const cleanup = vi.fn();
const effect = vi.fn(() => cleanup);
const { rerender, unmount } = renderHook(() => useUnsafeOnceEffect(effect));
+
expect(effect).toHaveBeenCalledTimes(1);
expect(cleanup).toHaveBeenCalledTimes(0);
rerender();
+
+ expect(effect).toHaveBeenCalledTimes(1);
+ expect(cleanup).toHaveBeenCalledTimes(0);
+
+ rerender();
+
expect(effect).toHaveBeenCalledTimes(1);
expect(cleanup).toHaveBeenCalledTimes(0);
unmount();
+
expect(effect).toHaveBeenCalledTimes(1);
expect(cleanup).toHaveBeenCalledTimes(1);
});
diff --git a/packages/hooks/tests/use-update-deps.test.ts b/tests/use-update.test.ts
similarity index 64%
rename from packages/hooks/tests/use-update-deps.test.ts
rename to tests/use-update.test.ts
index a7b1b34..24b68da 100644
--- a/packages/hooks/tests/use-update-deps.test.ts
+++ b/tests/use-update.test.ts
@@ -1,80 +1,85 @@
import { renderHook } from "@testing-library/react";
-import { useUpdateDeps } from "src";
+import { useUpdate } from "src";
-it("runs on dependency update", () => {
+it("runs only on component updates", () => {
const cleanup = vi.fn();
const effect = vi.fn(() => cleanup);
- const { rerender, unmount } = renderHook(
- (count) => useUpdateDeps(effect, [count]),
- { initialProps: 0 }
- );
+ const { rerender, unmount } = renderHook(() => useUpdate(effect));
+
expect(effect).toHaveBeenCalledTimes(0);
expect(cleanup).toHaveBeenCalledTimes(0);
- rerender(1);
+ rerender();
+
expect(effect).toHaveBeenCalledTimes(1);
expect(cleanup).toHaveBeenCalledTimes(0);
- rerender(2);
+ rerender();
+
expect(effect).toHaveBeenCalledTimes(2);
expect(cleanup).toHaveBeenCalledTimes(1);
unmount();
+
expect(effect).toHaveBeenCalledTimes(2);
expect(cleanup).toHaveBeenCalledTimes(2);
});
-it("does not run when dependency stays the same", () => {
+it("never runs if dependency list is empty", () => {
const cleanup = vi.fn();
- const effect = vi.fn();
+ const effect = vi.fn(() => cleanup);
+
+ const { rerender, unmount } = renderHook(() => useUpdate(effect, []));
- const { rerender, unmount } = renderHook(
- (count) =>
- useUpdateDeps(() => {
- effect();
- return cleanup;
- }, [count]),
- { initialProps: 0 }
- );
expect(effect).toHaveBeenCalledTimes(0);
expect(cleanup).toHaveBeenCalledTimes(0);
- rerender(0);
+ rerender();
+
expect(effect).toHaveBeenCalledTimes(0);
expect(cleanup).toHaveBeenCalledTimes(0);
- rerender(0);
+ rerender();
+
expect(effect).toHaveBeenCalledTimes(0);
expect(cleanup).toHaveBeenCalledTimes(0);
unmount();
+
expect(effect).toHaveBeenCalledTimes(0);
expect(cleanup).toHaveBeenCalledTimes(0);
});
-it("never runs with empty dependency list", () => {
+it("runs only on dependency updates if dependency list is not empty", () => {
const cleanup = vi.fn();
- const effect = vi.fn();
+ const effect = vi.fn(() => cleanup);
- const { rerender, unmount } = renderHook(() =>
- useUpdateDeps(() => {
- effect();
- return cleanup;
- }, [])
+ const { rerender, unmount } = renderHook(
+ (count) => useUpdate(effect, [count]),
+ { initialProps: 0 },
);
+
expect(effect).toHaveBeenCalledTimes(0);
expect(cleanup).toHaveBeenCalledTimes(0);
- rerender();
+ rerender(0);
+
expect(effect).toHaveBeenCalledTimes(0);
expect(cleanup).toHaveBeenCalledTimes(0);
- rerender();
- expect(effect).toHaveBeenCalledTimes(0);
+ rerender(1);
+
+ expect(effect).toHaveBeenCalledTimes(1);
expect(cleanup).toHaveBeenCalledTimes(0);
- unmount();
- expect(effect).toHaveBeenCalledTimes(0);
+ rerender(1);
+
+ expect(effect).toHaveBeenCalledTimes(1);
expect(cleanup).toHaveBeenCalledTimes(0);
+
+ unmount();
+
+ expect(effect).toHaveBeenCalledTimes(1);
+ expect(cleanup).toHaveBeenCalledTimes(1);
});
diff --git a/tests/use-window-size.test.ts b/tests/use-window-size.test.ts
new file mode 100644
index 0000000..2eb2255
--- /dev/null
+++ b/tests/use-window-size.test.ts
@@ -0,0 +1,19 @@
+import { fireEvent, renderHook } from "@testing-library/react";
+import { useWindowSize } from "src";
+
+it("returns window size", () => {
+ window.innerWidth = 200;
+ window.innerHeight = 100;
+
+ const { result } = renderHook(() => useWindowSize());
+
+ expect(result.current.width).toEqual(200);
+ expect(result.current.height).toEqual(100);
+
+ window.innerWidth = 400;
+ window.innerHeight = 300;
+ fireEvent.resize(window);
+
+ expect(result.current.width).toEqual(400);
+ expect(result.current.height).toEqual(300);
+});
diff --git a/packages/hooks/tests/use-window.test.ts b/tests/use-window.test.ts
similarity index 99%
rename from packages/hooks/tests/use-window.test.ts
rename to tests/use-window.test.ts
index a1e7eb1..cf279d5 100644
--- a/packages/hooks/tests/use-window.test.ts
+++ b/tests/use-window.test.ts
@@ -3,5 +3,6 @@ import { useWindow } from "src";
it("returns window", () => {
const { result } = renderHook(() => useWindow());
+
expect(result.current.current).toEqual(window);
});
diff --git a/tsconfig.json b/tsconfig.json
index 2826aaa..da88ee8 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,11 +1,43 @@
{
- "files": [],
- "references": [
- {
- "path": "packages/hooks"
- },
- {
- "path": "docs"
- }
- ]
+ "compilerOptions": {
+ "allowUnreachableCode": false,
+ "allowUnusedLabels": false,
+ "alwaysStrict": true,
+ "exactOptionalPropertyTypes": true,
+ "noFallthroughCasesInSwitch": true,
+ "noImplicitAny": true,
+ "noImplicitOverride": true,
+ "noImplicitReturns": true,
+ "noImplicitThis": true,
+ "noPropertyAccessFromIndexSignature": true,
+ "noUncheckedIndexedAccess": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "strict": true,
+ "strictBindCallApply": true,
+ // "strictBuiltinIteratorReturn": true,
+ "strictFunctionTypes": true,
+ "strictNullChecks": true,
+ "strictPropertyInitialization": true,
+ "useUnknownInCatchVariables": true,
+ "baseUrl": ".",
+ "module": "ESNext",
+ "moduleResolution": "Bundler",
+ "paths": { "@/*": ["src/*"] },
+ "resolveJsonModule": true,
+ "types": ["vitest/globals"],
+ "noEmit": true,
+ "allowJs": true,
+ "allowSyntheticDefaultImports": true,
+ "esModuleInterop": true,
+ "forceConsistentCasingInFileNames": true,
+ "isolatedModules": true,
+ "verbatimModuleSyntax": true,
+ "jsx": "react-jsx",
+ "lib": ["ESNext", "DOM", "DOM.Iterable"],
+ "target": "ESNext",
+ "incremental": true,
+ "skipLibCheck": true
+ },
+ "exclude": ["dist"]
}
diff --git a/turbo.json b/turbo.json
deleted file mode 100644
index 6699c09..0000000
--- a/turbo.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "$schema": "https://turborepo.org/schema.json",
- "pipeline": {
- "build": {
- "dependsOn": ["^build"],
- "outputs": ["dist/**"]
- },
- "dev": {
- "cache": false
- },
- "test": {},
- "//#lint:script": {},
- "//#format:script": {}
- }
-}
diff --git a/vercel.json b/vercel.json
new file mode 100644
index 0000000..45c873b
--- /dev/null
+++ b/vercel.json
@@ -0,0 +1,5 @@
+{
+ "git": {
+ "deploymentEnabled": false
+ }
+}
diff --git a/packages/hooks/vite.config.ts b/vite.config.ts
similarity index 69%
rename from packages/hooks/vite.config.ts
rename to vite.config.ts
index dce52e5..6751c6d 100644
--- a/packages/hooks/vite.config.ts
+++ b/vite.config.ts
@@ -1,18 +1,11 @@
-///
+///
import { defineConfig } from "vite";
import dts from "vite-plugin-dts";
import tsconfigPaths from "vite-tsconfig-paths";
-import { removeRedundantDts } from "./plugins/remove-redundant-dts";
export default defineConfig({
- plugins: [
- tsconfigPaths(),
- dts({
- rollupTypes: true,
- afterBuild: removeRedundantDts,
- }),
- ],
+ plugins: [tsconfigPaths(), dts({ rollupTypes: true })],
build: {
lib: {
entry: "src/index.ts",
@@ -30,7 +23,14 @@ export default defineConfig({
},
},
test: {
- globals: true,
environment: "jsdom",
+ globals: true,
+ // isolate: false,
+ // sequence: {
+ // concurrent: true,
+ // },
+ coverage: {
+ include: ["src/**/*.ts"],
+ },
},
});