From e8263abbca8717364d107fb64e933d2cc7579c5e Mon Sep 17 00:00:00 2001 From: AlkenD Date: Mon, 27 Oct 2025 02:04:06 +0530 Subject: [PATCH] feat(docs): add comprehensive documentation and versioning system --- .changeset/QUICK_REFERENCE.md | 155 + .changeset/README.md | 8 + .changeset/config.json | 16 + .changeset/six-baths-thank.md | 26 + .cz-config.js | 174 +- .github/pull_request_template.md | 53 + .github/workflows/changeset-check.yml | 64 + .github/workflows/release.yml | 66 + .github/workflows/version-pr.yml | 79 + CONTRIBUTING.md | 462 ++ LICENSE | 33 + README.md | 363 +- apps/docs/.gitignore | 21 + apps/docs/.vscode/extensions.json | 4 + apps/docs/.vscode/launch.json | 11 + apps/docs/README.md | 49 + apps/docs/astro.config.mjs | 52 + apps/docs/package.json | 23 + apps/docs/public/favicon.svg | 1 + apps/docs/src/assets/houston.webp | Bin 0 -> 98506 bytes apps/docs/src/assets/logo.png | Bin 0 -> 63629 bytes apps/docs/src/content.config.ts | 7 + apps/docs/src/content/docs/api/overview.md | 169 + .../docs/development/commit-guidelines.md | 243 + .../content/docs/development/contributing.md | 370 + .../docs/development/quick-reference.md | 189 + .../src/content/docs/development/structure.md | 248 + .../content/docs/development/versioning.md | 334 + .../docs/getting-started/installation.md | 444 ++ .../docs/getting-started/quick-start.md | 137 + apps/docs/src/content/docs/guides/example.md | 11 + apps/docs/src/content/docs/index.mdx | 92 + .../src/content/docs/reference/example.md | 11 + apps/docs/tsconfig.json | 5 + package.json | 11 +- pnpm-lock.yaml | 6429 +++++++++++------ scripts/create-pr.sh | 80 + scripts/test-db.sh | 62 - turbo.json | 2 +- 39 files changed, 7702 insertions(+), 2802 deletions(-) create mode 100644 .changeset/QUICK_REFERENCE.md create mode 100644 .changeset/README.md create mode 100644 .changeset/config.json create mode 100644 .changeset/six-baths-thank.md create mode 100644 .github/pull_request_template.md create mode 100644 .github/workflows/changeset-check.yml create mode 100644 .github/workflows/release.yml create mode 100644 .github/workflows/version-pr.yml create mode 100644 CONTRIBUTING.md create mode 100644 LICENSE create mode 100644 apps/docs/.gitignore create mode 100644 apps/docs/.vscode/extensions.json create mode 100644 apps/docs/.vscode/launch.json create mode 100644 apps/docs/README.md create mode 100644 apps/docs/astro.config.mjs create mode 100644 apps/docs/package.json create mode 100644 apps/docs/public/favicon.svg create mode 100644 apps/docs/src/assets/houston.webp create mode 100644 apps/docs/src/assets/logo.png create mode 100644 apps/docs/src/content.config.ts create mode 100644 apps/docs/src/content/docs/api/overview.md create mode 100644 apps/docs/src/content/docs/development/commit-guidelines.md create mode 100644 apps/docs/src/content/docs/development/contributing.md create mode 100644 apps/docs/src/content/docs/development/quick-reference.md create mode 100644 apps/docs/src/content/docs/development/structure.md create mode 100644 apps/docs/src/content/docs/development/versioning.md create mode 100644 apps/docs/src/content/docs/getting-started/installation.md create mode 100644 apps/docs/src/content/docs/getting-started/quick-start.md create mode 100644 apps/docs/src/content/docs/guides/example.md create mode 100644 apps/docs/src/content/docs/index.mdx create mode 100644 apps/docs/src/content/docs/reference/example.md create mode 100644 apps/docs/tsconfig.json create mode 100755 scripts/create-pr.sh delete mode 100755 scripts/test-db.sh diff --git a/.changeset/QUICK_REFERENCE.md b/.changeset/QUICK_REFERENCE.md new file mode 100644 index 0000000..0ab7cb9 --- /dev/null +++ b/.changeset/QUICK_REFERENCE.md @@ -0,0 +1,155 @@ +# Changeset Quick Reference + +## Quick Commands + +```bash +# Add a changeset for your changes +pnpm changeset + +# Check what will be versioned +pnpm changeset:status + +# Apply version bumps (maintainers only) +pnpm version + +# Build and publish (maintainers only) +pnpm release +``` + +## When to Use Each Bump Type + +### Patch (0.0.X) - Bug Fixes +- πŸ› Bug fixes +- πŸ“ Documentation +- 🎨 Style/formatting +- ♻️ Refactoring (no API change) +- ⚑ Performance (no breaking change) + +**Example:** +``` +πŸ¦‹ Summary: Fix authentication token expiry bug +πŸ¦‹ Bump: patch +``` + +### Minor (0.X.0) - New Features +- ✨ New features +- πŸ”₯ Deprecations +- πŸš€ Enhancements +- πŸ“¦ New optional parameters + +**Example:** +``` +πŸ¦‹ Summary: Add user profile image upload endpoint +πŸ¦‹ Bump: minor +``` + +### Major (X.0.0) - Breaking Changes +- πŸ’₯ Breaking API changes +- ❌ Removed features +- πŸ”„ Changed behavior +- ⚠️ Required parameter changes + +**Example:** +``` +πŸ¦‹ Summary: Replace REST auth with OAuth2 (BREAKING) +πŸ¦‹ Bump: major +``` + +## Changeset Flow + +```mermaid +graph LR + A[Make Changes] --> B[Create Changeset] + B --> C[Commit & Push] + C --> D[Create PR to dev] + D --> E[Review & Merge] + E --> F[Version Bump] + F --> G[Merge to main] + G --> H[Auto Release] +``` + +## Example Changeset File + +```markdown +--- +"api": minor +--- + +Add WebSocket support for real-time notifications + +- New `/ws` endpoint for WebSocket connections +- Real-time event streaming +- Connection management utilities +``` + +## Commit Message Examples + +With `pnpm commit`: + +```bash +# Feature +feat(api): add user search endpoint + +# Bug fix +fix(api): resolve JWT validation error + +# Breaking change +feat(api)!: redesign authentication API + +BREAKING CHANGE: Replace /auth/login with OAuth2 +``` + +## PR Workflow + +1. **Create feature branch from `dev`** + ```bash + git checkout dev && git pull + git checkout -b feat/my-feature + ``` + +2. **Make changes and commit** + ```bash + git add . + pnpm commit + ``` + +3. **Add changeset** + ```bash + pnpm changeset + git add .changeset + git commit -m "chore: add changeset" + ``` + +4. **Push and create PR** + ```bash + git push -u origin feat/my-feature + ``` + +5. **After merge to dev β†’ version bump** + ```bash + pnpm version + git commit -am "chore: version packages" + ``` + +6. **Merge to main β†’ auto-release** + +## Tips + +βœ… **DO** +- Create changesets for user-facing changes +- Write clear, descriptive summaries +- One changeset per logical change +- Review generated CHANGELOGs + +❌ **DON'T** +- Skip changesets for features/fixes +- Bundle multiple features in one changeset +- Forget to commit the changeset file +- Edit CHANGELOGs manually + +## Need Help? + +- πŸ“– [Full Documentation](../VERSIONING.md) +- πŸ”— [Changesets Docs](https://github.com/changesets/changesets) +- πŸ”— [Semantic Versioning](https://semver.org/) + diff --git a/.changeset/README.md b/.changeset/README.md new file mode 100644 index 0000000..e5b6d8d --- /dev/null +++ b/.changeset/README.md @@ -0,0 +1,8 @@ +# Changesets + +Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works +with multi-package repos, or single-package repos to help you version and publish your code. You can +find the full documentation for it [in our repository](https://github.com/changesets/changesets) + +We have a quick list of common questions to get you started engaging with this project in +[our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md) diff --git a/.changeset/config.json b/.changeset/config.json new file mode 100644 index 0000000..04dedf7 --- /dev/null +++ b/.changeset/config.json @@ -0,0 +1,16 @@ +{ + "$schema": "https://unpkg.com/@changesets/config@3.1.1/schema.json", + "changelog": [ + "@changesets/changelog-github", + { + "repo": "DesterLib/desterlib" + } + ], + "commit": false, + "fixed": [], + "linked": [], + "access": "public", + "baseBranch": "dev", + "updateInternalDependencies": "patch", + "ignore": [] +} diff --git a/.changeset/six-baths-thank.md b/.changeset/six-baths-thank.md new file mode 100644 index 0000000..120a52c --- /dev/null +++ b/.changeset/six-baths-thank.md @@ -0,0 +1,26 @@ +--- +"docs": minor +--- + +Add comprehensive project documentation and community contribution guidelines + +New Documentation: + +- Contributing guide for external contributors with fork workflow +- API overview with Swagger documentation links +- Development guides (structure, versioning, commits, quick reference) +- Installation and quick start guides + +Infrastructure: + +- AGPL-3.0 license for copyleft protection +- Changesets for version management +- GitHub Actions workflows for releases +- PR template with changeset reminders + +Improvements: + +- Add DesterLib logo to docs navbar +- Fix Swagger URL references (api/docs) +- Remove web platform (not supported) +- Add complete documentation site with Starlight diff --git a/.cz-config.js b/.cz-config.js index 9505155..c978937 100644 --- a/.cz-config.js +++ b/.cz-config.js @@ -1,155 +1,69 @@ -const { execSync } = require("child_process"); -const path = require("path"); - -// Function to detect which package/app has changes -function detectScope() { - try { - const stagedFiles = execSync("git diff --cached --name-only", { - encoding: "utf8", - }) - .split("\n") - .filter((file) => file.trim()); - - if (stagedFiles.length === 0) { - return []; - } - - const scopes = new Set(); - - stagedFiles.forEach((file) => { - // Check if file is in apps/ - if (file.startsWith("apps/")) { - const parts = file.split("/"); - if (parts.length > 1) { - scopes.add(parts[1]); // e.g., 'web', 'docs' - } - } - - // Check if file is in packages/ - if (file.startsWith("packages/")) { - const parts = file.split("/"); - if (parts.length > 1) { - // Get package name from package.json - const packageJsonPath = path.join( - "packages", - parts[1], - "package.json" - ); - try { - const packageJson = require(path.resolve(packageJsonPath)); - const packageName = packageJson.name; - // Extract simple name from @repo/ui -> ui - const simpleName = packageName.replace("@repo/", ""); - scopes.add(simpleName); - } catch (e) { - // Fallback to directory name - scopes.add(parts[1]); - } - } - } - - // Root level changes (package.json, turbo.json, etc.) - if (!file.includes("/") || file.split("/").length === 1) { - scopes.add("root"); - } - }); - - return Array.from(scopes).sort(); - } catch (error) { - console.warn("Could not detect scope:", error.message); - return []; - } -} - -const availableScopes = detectScope(); - -// Define hardcoded scopes that should always be available -const hardcodedScopes = [ - { name: "web", value: "web" }, - { name: "api", value: "api" }, - { name: "eslint-config", value: "eslint-config" }, - { name: "typescript-config", value: "typescript-config" }, - { name: "root", value: "root" }, -]; - -// Merge detected scopes with hardcoded ones, removing duplicates -function mergeScopes(detectedScopes, hardcodedScopes) { - const scopeMap = new Map(); - - // Add detected scopes first - detectedScopes.forEach((scope) => { - scopeMap.set(scope, { name: scope, value: scope }); - }); - - // Add hardcoded scopes (won't overwrite existing keys) - hardcodedScopes.forEach((scope) => { - if (!scopeMap.has(scope.value)) { - scopeMap.set(scope.value, scope); - } - }); - - return Array.from(scopeMap.values()); -} - -const allScopes = mergeScopes(availableScopes, hardcodedScopes); - module.exports = { types: [ - { value: "feat", name: "feat: ✨ A new feature" }, - { value: "fix", name: "fix: πŸ› A bug fix" }, - { value: "docs", name: "docs: πŸ“ Documentation only changes" }, + { value: "feat", name: "feat: ✨ A new feature" }, + { value: "fix", name: "fix: πŸ› A bug fix" }, + { value: "docs", name: "docs: πŸ“ Documentation changes" }, { value: "style", - name: "style: πŸ’„ Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)", + name: "style: πŸ’„ Code style changes (formatting, semicolons, etc)", }, { value: "refactor", - name: "refactor: ♻️ A code change that neither fixes a bug nor adds a feature", - }, - { - value: "perf", - name: "perf: ⚑️ A code change that improves performance", + name: "refactor: ♻️ Code refactoring (no functional changes)", }, + { value: "perf", name: "perf: ⚑ Performance improvements" }, + { value: "test", name: "test: βœ… Adding or updating tests" }, { - value: "test", - name: "test: βœ… Adding missing tests or correcting existing tests", + value: "build", + name: "build: πŸ“¦ Build system or dependencies changes", }, + { value: "ci", name: "ci: πŸ‘· CI/CD changes" }, { value: "chore", - name: "chore: πŸ”§ Changes to the build process or auxiliary tools and libraries such as documentation generation", + name: "chore: πŸ”§ Other changes (no production code change)", }, - { - value: "ci", - name: "ci: πŸ‘· Changes to our CI configuration files and scripts", - }, - { - value: "build", - name: "build: πŸ“¦ Changes that affect the build system or external dependencies (example scopes: gulp, broccoli, npm)", - }, - { value: "revert", name: "revert: βͺ️ Reverts a previous commit" }, + { value: "revert", name: "revert: βͺ Revert a previous commit" }, ], - scopes: allScopes, + scopes: [ + { name: "api" }, + { name: "database" }, + { name: "websocket" }, + { name: "stream" }, + { name: "library" }, + { name: "movies" }, + { name: "tvshows" }, + { name: "scan" }, + { name: "settings" }, + { name: "auth" }, + { name: "middleware" }, + { name: "config" }, + { name: "deps" }, + { name: "docker" }, + { name: "ci" }, + { name: "docs" }, + { name: "release" }, + ], - scopeOverrides: { - feat: allScopes, - fix: allScopes, - }, + allowCustomScopes: true, + allowBreakingChanges: ["feat", "fix", "refactor", "perf"], + skipQuestions: [], messages: { type: "Select the type of change that you're committing:", - scope: "\nWhat is the scope of this change (e.g. component or file name):", - // used if allowCustomScopes is true - customScope: "Denote the custom scope:", - subject: "Write a short, imperative tense description of the change:\n", - body: "Provide a longer description of the change:\n", + scope: "\nDenote the SCOPE of this change (optional):", + customScope: "Denote the SCOPE of this change:", + subject: "Write a SHORT, IMPERATIVE description of the change:\n", + body: 'Provide a LONGER description of the change (optional). Use "|" to break new line:\n', breaking: "List any BREAKING CHANGES (optional):\n", - footer: "Issues this commit closes, e.g #123:", + footer: + "List any ISSUES CLOSED by this change (optional). E.g.: #31, #34:\n", confirmCommit: "Are you sure you want to proceed with the commit above?", }, - allowCustomScopes: true, - allowBreakingChanges: ["feat", "fix"], - skipQuestions: ["body"], + skipEmptyScopes: true, subjectLimit: 100, + breaklineChar: "|", + footerPrefix: "ISSUES CLOSED:", + askForBreakingChangeFirst: true, }; diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000..a6c4476 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,53 @@ +## Summary + + + +## Type of Change + +- [ ] πŸ› Bug fix (non-breaking change which fixes an issue) +- [ ] ✨ New feature (non-breaking change which adds functionality) +- [ ] πŸ’₯ Breaking change (fix or feature that would cause existing functionality to not work as expected) +- [ ] πŸ“ Documentation update +- [ ] 🎨 Style/UI update (no functional changes) +- [ ] ♻️ Code refactoring (no functional changes) +- [ ] ⚑ Performance improvement +- [ ] βœ… Test updates + +## Changes + + + +- +- +- + +## Testing + + + +- [ ] Tested locally +- [ ] Tested in development environment +- [ ] Added/updated tests + +## Checklist + +- [ ] My code follows the project's style guidelines +- [ ] I have performed a self-review of my own code +- [ ] I have commented my code, particularly in hard-to-understand areas +- [ ] I have made corresponding changes to the documentation +- [ ] My changes generate no new warnings +- [ ] I have added a changeset (if user-facing changes): `pnpm changeset` +- [ ] I have used conventional commits: `pnpm commit` + +## Related Issues + + + +## Screenshots (if applicable) + + + +## Additional Notes + + + diff --git a/.github/workflows/changeset-check.yml b/.github/workflows/changeset-check.yml new file mode 100644 index 0000000..39439b4 --- /dev/null +++ b/.github/workflows/changeset-check.yml @@ -0,0 +1,64 @@ +name: Changeset Check + +on: + pull_request: + branches: + - dev + - main + +jobs: + changeset-check: + name: Check for Changeset + runs-on: ubuntu-latest + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup pnpm + uses: pnpm/action-setup@v4 + with: + version: 9.0.0 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: 'pnpm' + + - name: Install Dependencies + run: pnpm install --frozen-lockfile + + - name: Check for Changesets + id: check + run: | + # Skip check for version bump PRs + if [[ "${{ github.head_ref }}" == *"version-packages"* ]]; then + echo "Skipping changeset check for version PR" + exit 0 + fi + + # Skip check for chore commits that don't need changesets + if [[ "${{ github.head_ref }}" == chore/* ]] || \ + [[ "${{ github.head_ref }}" == docs/* ]] || \ + [[ "${{ github.head_ref }}" == ci/* ]]; then + echo "Skipping changeset check for chore/docs/ci PR" + exit 0 + fi + + # Check if changesets exist + pnpm changeset status --since=origin/${{ github.base_ref }} + + - name: Comment on PR + if: failure() + uses: actions/github-script@v7 + with: + script: | + github.rest.issues.createComment({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: '⚠️ **No changeset found**\n\nThis PR appears to contain changes that should have a changeset.\n\nPlease run `pnpm changeset` and commit the generated changeset file.\n\nIf this PR doesn\'t need a changeset (e.g., docs, tests, or internal changes), you can ignore this message.' + }) + diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..773cb90 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,66 @@ +name: Release + +on: + push: + branches: + - main + +concurrency: ${{ github.workflow }}-${{ github.ref }} + +permissions: + contents: write + pull-requests: write + packages: write + +jobs: + release: + name: Release + runs-on: ubuntu-latest + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup pnpm + uses: pnpm/action-setup@v4 + with: + version: 9.0.0 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: 'pnpm' + + - name: Install Dependencies + run: pnpm install --frozen-lockfile + + - name: Build Packages + run: pnpm build + + - name: Create Release Pull Request or Publish + id: changesets + uses: changesets/action@v1 + with: + version: pnpm version + publish: pnpm release + commit: 'chore: version packages' + title: 'chore: version packages' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + + - name: Create GitHub Release + if: steps.changesets.outputs.published == 'true' + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: v${{ steps.changesets.outputs.publishedPackages[0].version }} + release_name: Release v${{ steps.changesets.outputs.publishedPackages[0].version }} + body: | + See [CHANGELOG.md](https://github.com/${{ github.repository }}/blob/main/CHANGELOG.md) for details. + draft: false + prerelease: false + diff --git a/.github/workflows/version-pr.yml b/.github/workflows/version-pr.yml new file mode 100644 index 0000000..be24a56 --- /dev/null +++ b/.github/workflows/version-pr.yml @@ -0,0 +1,79 @@ +name: Version PR + +on: + workflow_dispatch: + push: + branches: + - dev + paths: + - '.changeset/**' + +permissions: + contents: write + pull-requests: write + +jobs: + version-pr: + name: Create Version PR + runs-on: ubuntu-latest + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + token: ${{ secrets.GITHUB_TOKEN }} + + - name: Setup pnpm + uses: pnpm/action-setup@v4 + with: + version: 9.0.0 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: 'pnpm' + + - name: Install Dependencies + run: pnpm install --frozen-lockfile + + - name: Check for Changesets + id: check-changesets + run: | + if [ -n "$(ls -A .changeset/*.md 2>/dev/null | grep -v README)" ]; then + echo "has-changesets=true" >> $GITHUB_OUTPUT + else + echo "has-changesets=false" >> $GITHUB_OUTPUT + fi + + - name: Create Version Branch + if: steps.check-changesets.outputs.has-changesets == 'true' + run: | + git config --local user.email "github-actions[bot]@users.noreply.github.com" + git config --local user.name "github-actions[bot]" + git checkout -b chore/version-packages-$(date +%s) + pnpm version + git add . + git commit -m "chore: version packages" || echo "No changes to commit" + git push origin HEAD + + - name: Create Pull Request + if: steps.check-changesets.outputs.has-changesets == 'true' + uses: peter-evans/create-pull-request@v6 + with: + token: ${{ secrets.GITHUB_TOKEN }} + branch: chore/version-packages-${{ github.run_number }} + base: main + title: 'chore: version packages' + body: | + This PR was automatically generated by the Version PR workflow. + + It bumps package versions and updates changelogs based on changesets. + + **Please review the changes before merging!** + + Once merged to `main`, the release workflow will automatically publish the packages. + labels: | + automated + release + diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..bb3e65f --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,462 @@ +# Contributing to DesterLib + +Thank you for your interest in contributing to DesterLib! πŸŽ‰ + +We welcome contributions from the community. This guide will help you get started. + +## Table of Contents + +- [Code of Conduct](#code-of-conduct) +- [Getting Started](#getting-started) +- [Development Setup](#development-setup) +- [How to Contribute](#how-to-contribute) +- [Pull Request Process](#pull-request-process) +- [Commit Guidelines](#commit-guidelines) +- [Changeset Guidelines](#changeset-guidelines) +- [Need Help?](#need-help) + +## Code of Conduct + +We are committed to providing a welcoming and inspiring community for all. By participating in this project, you agree to: + +- Be respectful and inclusive +- Be patient and welcoming +- Be considerate of different viewpoints +- Focus on what's best for the community +- Show empathy towards other community members + +**Unacceptable behavior includes:** +- Harassment, trolling, or discriminatory language +- Personal attacks or insults +- Publishing others' private information +- Other conduct inappropriate in a professional setting + +Instances of unacceptable behavior may result in a temporary or permanent ban from the project. + +## Getting Started + +### Prerequisites + +Before contributing, make sure you have: + +- **Node.js** 18 or higher +- **pnpm** 9.0.0 or higher +- **Docker** (for testing database) +- **Git** for version control +- A **GitHub account** + +### Find an Issue to Work On + +1. Check [open issues](https://github.com/DesterLib/desterlib/issues) +2. Look for issues labeled `good first issue` or `help wanted` +3. Comment on the issue you want to work on +4. Wait for maintainer approval before starting work + +**Not sure where to start?** +- Look for `good first issue` labels +- Fix typos or improve documentation +- Report bugs you've found +- Suggest new features in discussions + +## Development Setup + +### 1. Fork the Repository + +Click the "Fork" button at the top right of the [DesterLib repository](https://github.com/DesterLib/desterlib). + +### 2. Clone Your Fork + +```bash +# Clone your fork +git clone https://github.com/YOUR-USERNAME/desterlib.git +cd desterlib + +# Add upstream remote +git remote add upstream https://github.com/DesterLib/desterlib.git +``` + +### 3. Install Dependencies + +```bash +# Install all dependencies +pnpm install +``` + +### 4. Set Up Development Database + +```bash +# Start test database with Docker +docker-compose -f docker-compose.test.yml up -d + +# Push database schema +cd apps/api +pnpm db:push +``` + +### 5. Start Development Server + +```bash +# From repository root +pnpm dev + +# Or run specific app +cd apps/api +pnpm dev +``` + +The API will be available at `http://localhost:3001` + +### 6. Verify Setup + +- Visit `http://localhost:3001/api/docs` for Swagger documentation +- Try making a test API request + +## How to Contribute + +### Workflow Overview + +``` +Fork β†’ Clone β†’ Create Branch β†’ Make Changes β†’ Commit β†’ Push β†’ Pull Request +``` + +### Step-by-Step Process + +#### 1. Sync with Upstream + +Always sync with the latest changes before starting new work: + +```bash +# Fetch latest changes from upstream +git fetch upstream + +# Switch to dev branch +git checkout dev + +# Merge upstream changes +git merge upstream/dev + +# Push to your fork +git push origin dev +``` + +#### 2. Create a Feature Branch + +```bash +# Create branch from dev +git checkout dev +git checkout -b feat/your-feature-name + +# For bug fixes +git checkout -b fix/bug-description + +# For documentation +git checkout -b docs/what-you-update +``` + +**Branch naming conventions:** +- `feat/feature-name` - New features +- `fix/bug-name` - Bug fixes +- `docs/update-name` - Documentation updates +- `refactor/what-changed` - Code refactoring +- `perf/improvement-name` - Performance improvements +- `test/test-name` - Test additions/updates + +#### 3. Make Your Changes + +- Write clean, readable code +- Follow existing code style +- Add comments for complex logic +- Update documentation if needed +- Add tests for new features + +#### 4. Test Your Changes + +```bash +# Run linter +pnpm lint + +# Check types +pnpm check-types + +# Run tests (when available) +pnpm test + +# Build to verify no errors +pnpm build +``` + +#### 5. Commit Your Changes + +We use **conventional commits** for consistent commit messages: + +```bash +# Use the interactive commit tool (recommended) +pnpm commit + +# This will guide you through: +# - Type (feat, fix, docs, etc.) +# - Scope (api, database, etc.) +# - Description +# - Body (optional) +# - Breaking changes (if any) +``` + +**Manual commit format:** +``` +(): + +[optional body] + +[optional footer] +``` + +**Examples:** +```bash +feat(api): add user search endpoint +fix(stream): resolve buffering issue on Safari +docs: update installation guide +refactor(database): simplify query logic +``` + +See [Commit Guidelines](apps/docs/src/content/docs/development/commit-guidelines.md) for more details. + +#### 6. Create a Changeset + +If your changes affect users (new features, bug fixes, breaking changes), create a changeset: + +```bash +# Create changeset +pnpm changeset + +# Follow the prompts: +# 1. Select affected packages (usually 'api') +# 2. Choose bump type (patch/minor/major) +# 3. Write a summary (appears in changelog) +``` + +**When to create a changeset:** +- βœ… New features +- βœ… Bug fixes +- βœ… Breaking changes +- βœ… Performance improvements +- βœ… Dependency updates affecting users + +**When to skip changesets:** +- ❌ Documentation updates +- ❌ Internal refactoring +- ❌ Test additions +- ❌ CI/CD changes + +**Commit the changeset:** +```bash +git add .changeset/ +git commit -m "chore: add changeset" +``` + +#### 7. Push to Your Fork + +```bash +# Push your branch to your fork +git push origin feat/your-feature-name +``` + +## Pull Request Process + +### Creating a Pull Request + +1. Go to [DesterLib repository](https://github.com/DesterLib/desterlib) +2. Click "Pull requests" β†’ "New pull request" +3. Click "compare across forks" +4. Select: + - **base repository:** `DesterLib/desterlib` + - **base branch:** `dev` + - **head repository:** `YOUR-USERNAME/desterlib` + - **compare branch:** `feat/your-feature-name` +5. Click "Create pull request" +6. Fill out the PR template completely +7. Click "Create pull request" + +### PR Checklist + +Before submitting, ensure: + +- [ ] Code follows project style guidelines +- [ ] Self-reviewed your own code +- [ ] Commented complex code sections +- [ ] Updated documentation if needed +- [ ] No new warnings generated +- [ ] Added changeset (if user-facing changes) +- [ ] Used conventional commits +- [ ] Tests pass (when available) +- [ ] Linter passes: `pnpm lint` +- [ ] Type check passes: `pnpm check-types` + +### PR Review Process + +1. **Automated Checks:** GitHub Actions will run: + - Changeset validation + - Linting + - Type checking + - Build verification + +2. **Code Review:** Maintainers will review your PR: + - Provide feedback and suggestions + - Request changes if needed + - Approve when ready + +3. **Address Feedback:** + ```bash + # Make requested changes + git add . + pnpm commit + git push origin feat/your-feature-name + # PR updates automatically + ``` + +4. **Merge:** Once approved, a maintainer will merge your PR to `dev` + +### After Your PR is Merged + +1. Sync your fork: + ```bash + git checkout dev + git pull upstream dev + git push origin dev + ``` + +2. Delete your feature branch: + ```bash + git branch -d feat/your-feature-name + git push origin --delete feat/your-feature-name + ``` + +3. Celebrate! πŸŽ‰ You've contributed to DesterLib! + +## Commit Guidelines + +### Commit Types + +| Type | Description | Example | +|------|-------------|---------| +| `feat` | New feature | `feat(api): add user search` | +| `fix` | Bug fix | `fix(auth): resolve JWT error` | +| `docs` | Documentation | `docs: update README` | +| `style` | Code style | `style: format with prettier` | +| `refactor` | Code refactoring | `refactor: simplify query` | +| `perf` | Performance | `perf: optimize caching` | +| `test` | Tests | `test: add auth tests` | +| `build` | Build system | `build: update deps` | +| `ci` | CI/CD | `ci: add workflow` | +| `chore` | Other changes | `chore: update gitignore` | + +### Available Scopes + +`api`, `database`, `websocket`, `stream`, `library`, `movies`, `tvshows`, `scan`, `settings`, `auth`, `middleware`, `config`, `deps`, `docker`, `ci`, `docs`, `release` + +### Breaking Changes + +If introducing breaking changes: + +1. Add `!` after type/scope: + ``` + feat(api)!: redesign authentication + ``` + +2. Add `BREAKING CHANGE:` in footer: + ``` + feat(api)!: redesign authentication + + BREAKING CHANGE: /auth/login endpoint removed. + Use OAuth2 flow instead. + ``` + +3. Create changeset with **major** bump + +## Changeset Guidelines + +### Semantic Versioning + +We follow [Semantic Versioning](https://semver.org/): + +- **Patch (0.0.X)** - Bug fixes, small changes +- **Minor (0.X.0)** - New features (backward-compatible) +- **Major (X.0.0)** - Breaking changes + +### Creating Effective Changesets + +**Good changeset summary:** +``` +Add WebSocket support for real-time notifications + +- New /ws endpoint for WebSocket connections +- Real-time event streaming +- Connection management utilities +``` + +**Bad changeset summary:** +``` +updates +``` + +The changeset summary becomes the changelog entry that users read. Make it descriptive! + +## Development Tips + +### Code Style + +- Use TypeScript strict mode +- Follow existing patterns in the codebase +- Keep functions small and focused +- Use meaningful variable names +- Add JSDoc comments for public APIs + +### Testing + +- Test your changes thoroughly +- Test edge cases +- Test error conditions +- Verify existing functionality still works + +### Documentation + +- Update docs for new features +- Add code comments for complex logic +- Update README if user-facing changes +- Include examples in docs + +## Project Structure + +``` +desterlib/ +β”œβ”€β”€ apps/ +β”‚ β”œβ”€β”€ api/ # Backend API (Express + TypeScript) +β”‚ └── docs/ # Documentation site (Starlight) +β”œβ”€β”€ packages/ +β”‚ β”œβ”€β”€ eslint-config/ # Shared ESLint config +β”‚ └── typescript-config/ # Shared TypeScript config +└── .changeset/ # Version management +``` + +See [Project Structure](apps/docs/src/content/docs/development/structure.md) for details. + +## Need Help? + +- πŸ“– [Documentation](http://localhost:4321) (run `cd apps/docs && pnpm dev`) +- πŸ’¬ [GitHub Discussions](https://github.com/DesterLib/desterlib/discussions) +- πŸ› [Report Issues](https://github.com/DesterLib/desterlib/issues) +- πŸ“§ Contact maintainers through GitHub + +## Recognition + +All contributors will be recognized in our README and release notes. Thank you for helping make DesterLib better! ❀️ + +## License + +By contributing to DesterLib, you agree that your contributions will be licensed under the GNU Affero General Public License v3.0 (AGPL-3.0). + +This means: +- Your contributions will remain open source +- Derivatives must also be open source under AGPL-3.0 +- Network use of the software requires source code sharing +- This protects the community and ensures DesterLib stays free and open + diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..0c5248a --- /dev/null +++ b/LICENSE @@ -0,0 +1,33 @@ +GNU AFFERO GENERAL PUBLIC LICENSE +Version 3, 19 November 2007 + +Copyright (C) 2025 DesterLib + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as published +by the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . + +--- + +Full license text: https://www.gnu.org/licenses/agpl-3.0.txt + +ADDITIONAL INFORMATION: + +The AGPL v3 license ensures that: +- Anyone who uses this software over a network must provide the source code +- All modifications and derivatives must remain open source under AGPL v3 +- You cannot create proprietary/closed-source versions of DesterLib +- Commercial use is allowed, but the source code must remain available +- This protects the community and ensures improvements benefit everyone + +For questions about licensing, please open an issue on GitHub. + diff --git a/README.md b/README.md index 921902c..0f9584a 100644 --- a/README.md +++ b/README.md @@ -1,338 +1,173 @@ -# 🎬 DesterLib - Your Personal Media Server +# 🎬 DesterLib -Welcome! **DesterLib** is a system that lets you watch your movies and TV shows from anywhere. It's like Netflix, but for YOUR personal collection! +**Your Personal Media Server** - Watch your movies and TV shows from anywhere. It's like Netflix, but for YOUR personal collection! -Think of it this way: -- πŸ“š **Library**: A place where all your movies and shows are organized -- 🎞️ **Player**: Tools to watch your media smoothly -- βš™οΈ **Engine**: The behind-the-scenes magic that makes everything work +[![GitHub](https://img.shields.io/badge/GitHub-DesterLib-blue?logo=github)](https://github.com/DesterLib/desterlib) +[![License](https://img.shields.io/badge/License-AGPL--3.0-blue.svg)](LICENSE) --- -## πŸ“¦ What's Inside? +## What is DesterLib? -This project has two main parts: - -1. **Backend API** (`apps/api/`) - The engine that does all the work - - Organizes your media files - - Streams videos to your devices - - Remembers what you're watching - - Talks to the database - -2. **Mobile & Desktop App** (`desterlib-flutter/`) - The way you watch on your devices - - Browse your media collection (Movies, TV Shows) - - Play videos smoothly - - Manage settings - - Works on Android, iOS, macOS, Linux, Windows, and TV (coming soon!) +DesterLib is a modern, self-hosted media server system that lets you: +- πŸ“š **Organize** your media collection automatically +- 🎞️ **Stream** movies and TV shows smoothly +- πŸ“± **Watch** on any device (Android, iOS, macOS, Linux, Windows) +- βš™οΈ **Control** your entire media library from one place --- -## πŸš€ Quick Start - -### What You Need First -- **Docker** installed on your computer ([Get Docker](https://www.docker.com/products/docker-desktop)) -- **Node.js 18+** and **pnpm** for development -- A folder with your movies/TV shows -- A few minutes to set up - -### For Development (Recommended) - -This setup runs only the database in Docker, while you run the API with pnpm for fast development: +## Quick Start -#### Step 1: Configure Your Environment +### Prerequisites +- Docker installed +- Node.js 18+ and pnpm (for development) +- Your media files -Create a file called `.env` in the `apps/api/` folder: +### Development Setup ```bash -# Database Configuration -DATABASE_URL=postgresql://postgres:postgres@localhost:5433/desterlib_test +# Clone the repository +git clone https://github.com/DesterLib/desterlib.git +cd desterlib -# Application Configuration -NODE_ENV=development -PORT=3001 - -# Rate Limiting -RATE_LIMIT_WINDOW_MS=900000 -RATE_LIMIT_MAX=100 -``` - -#### Step 2: Start the Test Database - -```bash -# Start only the PostgreSQL database (runs on port 5433) +# Start test database docker-compose -f docker-compose.test.yml up -d -``` - -#### Step 3: Install and Run the API -```bash -# Install dependencies +# Install dependencies and run pnpm install - -# Run the API in development mode cd apps/api pnpm dev ``` -#### Step 4: Access Your System +Access the API at `http://localhost:3001` -- **API**: `http://localhost:3001` -- **API Documentation**: `http://localhost:3001/api-docs` -- **Database**: Runs on `localhost:5433` - -### For Production (Full Docker) - -This setup runs everything in Docker containers: +### Production Setup ```bash -# Start the services (API + Database in containers) -docker-compose up +# Start all services with Docker +docker-compose up -d ``` -That's it! Docker will: -- 🐘 Start a PostgreSQL database -- πŸ”§ Build and run the API -- πŸ“ Set up your media library - -Access at `http://localhost:3001` - ---- - -## πŸ“± Using the Mobile App - -### Install - -1. Get the Flutter app source from `desterlib-flutter/` -2. Run: `flutter pub get` (downloads everything needed) -3. Build it for your phone: - - **Android**: `flutter build apk` - - **iOS**: `flutter build ios` - -### Configure - -When you open the app: -1. Enter your server address (like `http://192.168.1.100:3001`) -2. The app will connect and show your media -3. Tap any movie or show to watch! - --- -## πŸ”§ Development Setup - -Want to work on the code? Here's how: - -### Backend Development +## πŸ“š Documentation -See the **Quick Start > For Development** section above for the recommended setup. - -Additional commands: +**Full documentation is available at: http://localhost:4321** +To run the docs locally: ```bash -# Format code nicely -pnpm format - -# Check code for errors -pnpm lint - -# Fix code automatically -pnpm lint:fix -``` - -### Mobile App Development - -```bash -# Install dependencies -flutter pub get - -# Start development (interactive mode) -flutter run - -# Build for your phone -flutter build apk # Android -flutter build ios # iOS -flutter build web # Web browser -``` - ---- - -## πŸ“‚ How It's Organized - -### Backend Structure -``` -apps/api/src/ -β”œβ”€β”€ domains/ ← Features (movies, TV shows, streaming, etc.) -β”œβ”€β”€ lib/ ← Shared tools and helpers -β”œβ”€β”€ core/ ← Configuration and central services -└── routes/ ← API endpoints -``` - -### Mobile App Structure -``` -lib/ -β”œβ”€β”€ features/ ← Screens and features (watch, browse, settings) -β”œβ”€β”€ api/ ← Communication with the backend -β”œβ”€β”€ shared/ ← Reusable widgets and helpers -└── core/ ← Configuration and global setup +cd apps/docs +pnpm dev ``` ---- - -## 🎯 Main Features +### Quick Links -βœ… **Scan & Index** - Automatically finds and organizes your media -βœ… **Browse Library** - Find movies and shows easily -βœ… **Smooth Streaming** - Watch without buffering -βœ… **Multi-Device** - Watch on phone, tablet, or desktop (Linux, macOS, Windows) -βœ… **Track Progress** - Remember where you stopped (coming soon) -βœ… **Settings** - Personalize your experience +- πŸ“₯ [Download Flutter App](https://github.com/DesterLib/Dester-Flutter/releases/latest) - Get the alpha client app +- πŸš€ [Quick Start Guide](http://localhost:4321/getting-started/quick-start/) - Get up and running +- πŸ“¦ [Installation Guide](http://localhost:4321/getting-started/installation/) - Detailed setup +- πŸ—οΈ [Project Structure](http://localhost:4321/development/structure/) - Code organization +- πŸ“‹ [Versioning Guide](http://localhost:4321/development/versioning/) - Contributing +- πŸ’» [Commit Guidelines](http://localhost:4321/development/commit-guidelines/) - Commit format +- πŸ”— [API Documentation](http://localhost:3001/api/docs) - When API is running --- -## πŸ› Troubleshooting - -### "Can't connect to the server" -- **Development**: Make sure the test database is running (`docker-compose -f docker-compose.test.yml up -d`) and API is running (`pnpm dev`) -- **Production**: Make sure Docker is running: `docker-compose up` -- Check the server address in the app settings -- Make sure you're on the same network (or use your computer's IP) - -### "Movies aren't showing up" -- Go to Settings β†’ Scan Library -- Make sure your media folder is mounted correctly -- Check that file names follow standard formats (movie name + year) - -### "Video won't play" -- Check your internet connection -- Try a different video format (MP4, MKV usually work best) -- Restart the app - -### Database issues (Development) -- Stop the test database: `docker-compose -f docker-compose.test.yml down` -- Start fresh: `docker-compose -f docker-compose.test.yml up -d` -- This resets the test database completely - -### Database issues (Production) -- Run: `docker-compose down` then `docker-compose up -d` -- This resets the production database completely - ---- +## Contributing -## πŸ› οΈ Useful Commands +We welcome contributions from the community! πŸŽ‰ -### Backend (API) +### Quick Start for Contributors ```bash -# Check code for errors -pnpm lint +# Fork the repo, then: +git clone https://github.com/YOUR-USERNAME/desterlib.git +cd desterlib -# Fix code automatically -pnpm lint:fix +# Install dependencies +pnpm install -# Build for production -pnpm build +# Create feature branch +git checkout -b feat/your-feature -# Start in production -pnpm start +# Make changes and commit +pnpm commit -# Database management -pnpm db:studio # Open database viewer -pnpm db:migrate # Create new database changes -pnpm db:push # Apply changes to database +# Add changeset for user-facing changes +pnpm changeset -# Test database management (from root directory) -docker-compose -f docker-compose.test.yml up -d # Start test database -docker-compose -f docker-compose.test.yml down # Stop test database -docker-compose -f docker-compose.test.yml logs # View test database logs +# Push and create PR +git push origin feat/your-feature ``` -### Mobile App - -```bash -# Download dependencies -flutter pub get - -# Check code for issues -flutter analyze +### Branching Strategy -# Format code nicely -dart format lib/ +- `main` β†’ Production releases (tagged) +- `dev` β†’ Development (merge PRs here) +- `feat/*` β†’ New features +- `fix/*` β†’ Bug fixes +- `docs/*` β†’ Documentation updates -# Clean everything (use when things break) -flutter clean -``` +### Resources ---- +- πŸ“– **[Contributing Guide](CONTRIBUTING.md)** - Complete contribution instructions +- πŸ’» **[Commit Guidelines](http://localhost:4321/development/commit-guidelines/)** - Commit message format +- πŸ¦‹ **[Versioning Guide](http://localhost:4321/development/versioning/)** - Changesets workflow +- πŸ“‹ **[Quick Reference](http://localhost:4321/development/quick-reference/)** - Common commands -## πŸ“š Important Paths - -- **Media Files**: `/Volumes/External/Library/Media` - Your movies and shows -- **Database**: Stored automatically in PostgreSQL -- **Logs**: `logs/` folder - useful for debugging -- **API Docs**: `http://localhost:3001/api-docs` - what the API can do +**Before submitting a PR:** +1. Use conventional commits: `pnpm commit` +2. Add changeset: `pnpm changeset` (if needed) +3. Ensure tests pass: `pnpm lint && pnpm check-types` +4. Fill out the PR template completely --- -## 🚒 Production Deployment - -When you want to use this in the real world (not just locally): +## Project Structure -```bash -# Build and run production version -docker-compose up -d ``` - -The main `docker-compose.yml` file is configured for production deployment and: -- Runs both API and database in containers -- Optimizes performance -- Includes production settings -- Uses persistent volumes for data +desterlib/ +β”œβ”€β”€ apps/ +β”‚ β”œβ”€β”€ api/ # Backend API (Express + TypeScript) +β”‚ └── docs/ # Documentation site (Starlight) +β”œβ”€β”€ packages/ +β”‚ β”œβ”€β”€ eslint-config/ # Shared ESLint config +β”‚ └── typescript-config/ # Shared TypeScript config +└── .changeset/ # Version management +``` --- -## πŸ“– Learning More +## Key Features -- **API Documentation**: Visit `http://localhost:3001/api-docs` (Swagger UI) - note: some features in docs may be in development -- **Backend Architecture**: Read `apps/api/STRUCTURE.md` -- **Mobile Architecture**: Read `desterlib-flutter/CODE_STRUCTURE.md` -- **Database Schema**: Check `apps/api/prisma/schema.prisma` +βœ… Automatic media scanning and organization +βœ… Smooth video streaming +βœ… Multi-device support +βœ… REST API with WebSocket support +βœ… Docker-ready deployment +βœ… Cross-platform (Android, iOS, Desktop) --- -## πŸ’‘ Tips +## Get Help -1. **First time developing?** Use the development setup: `docker-compose -f docker-compose.test.yml up -d` then `pnpm dev` -2. **First time deploying?** Use production setup: `docker-compose up -d` -3. **Need help?** Check logs: - - Development: `pnpm dev` shows logs in terminal - - Production: `docker logs desterlib-api` -4. **Slow video?** Check your internet speed and video bitrate -5. **Want to contribute?** Follow the commit guidelines in `.commitlintrc` +- πŸ“– [Documentation](http://localhost:4321) +- πŸ› [Report Issues](https://github.com/DesterLib/desterlib/issues) +- πŸ’¬ [Discussions](https://github.com/DesterLib/desterlib/discussions) --- -## ❓ FAQ - -**Q: Can I watch when I'm away from home?** -A: Yes! Set up port forwarding on your router or use a service like ngrok. +## License -**Q: How much space do I need?** -A: At least as much as your media collection, plus 10% extra. - -**Q: Can multiple people watch at once?** -A: Yes, but each stream uses bandwidth. - -**Q: Is my data private?** -A: Yes! Everything stays on your computer. - ---- +**GNU Affero General Public License v3.0 (AGPL-3.0)** -## πŸ“ Need Help? +DesterLib is free and open source software licensed under AGPL-3.0. This ensures: +- The software remains free forever +- All modifications must be open source +- Network use requires source code sharing +- No proprietary forks allowed -Check these files: -- `docker-compose.yml` - Docker setup details -- `docker-compose.test.yml` - Test database setup -- `apps/api/STRUCTURE.md` - API organization -- `desterlib-flutter/CODE_STRUCTURE.md` - App organization +See [LICENSE](LICENSE) for full details. --- diff --git a/apps/docs/.gitignore b/apps/docs/.gitignore new file mode 100644 index 0000000..6240da8 --- /dev/null +++ b/apps/docs/.gitignore @@ -0,0 +1,21 @@ +# build output +dist/ +# generated types +.astro/ + +# dependencies +node_modules/ + +# logs +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + + +# environment variables +.env +.env.production + +# macOS-specific files +.DS_Store diff --git a/apps/docs/.vscode/extensions.json b/apps/docs/.vscode/extensions.json new file mode 100644 index 0000000..22a1505 --- /dev/null +++ b/apps/docs/.vscode/extensions.json @@ -0,0 +1,4 @@ +{ + "recommendations": ["astro-build.astro-vscode"], + "unwantedRecommendations": [] +} diff --git a/apps/docs/.vscode/launch.json b/apps/docs/.vscode/launch.json new file mode 100644 index 0000000..d642209 --- /dev/null +++ b/apps/docs/.vscode/launch.json @@ -0,0 +1,11 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "command": "./node_modules/.bin/astro dev", + "name": "Development server", + "request": "launch", + "type": "node-terminal" + } + ] +} diff --git a/apps/docs/README.md b/apps/docs/README.md new file mode 100644 index 0000000..909d737 --- /dev/null +++ b/apps/docs/README.md @@ -0,0 +1,49 @@ +# Starlight Starter Kit: Basics + +[![Built with Starlight](https://astro.badg.es/v2/built-with-starlight/tiny.svg)](https://starlight.astro.build) + +``` +pnpm create astro@latest -- --template starlight +``` + +> πŸ§‘β€πŸš€ **Seasoned astronaut?** Delete this file. Have fun! + +## πŸš€ Project Structure + +Inside of your Astro + Starlight project, you'll see the following folders and files: + +``` +. +β”œβ”€β”€ public/ +β”œβ”€β”€ src/ +β”‚ β”œβ”€β”€ assets/ +β”‚ β”œβ”€β”€ content/ +β”‚ β”‚ └── docs/ +β”‚ └── content.config.ts +β”œβ”€β”€ astro.config.mjs +β”œβ”€β”€ package.json +└── tsconfig.json +``` + +Starlight looks for `.md` or `.mdx` files in the `src/content/docs/` directory. Each file is exposed as a route based on its file name. + +Images can be added to `src/assets/` and embedded in Markdown with a relative link. + +Static assets, like favicons, can be placed in the `public/` directory. + +## 🧞 Commands + +All commands are run from the root of the project, from a terminal: + +| Command | Action | +| :------------------------ | :----------------------------------------------- | +| `pnpm install` | Installs dependencies | +| `pnpm dev` | Starts local dev server at `localhost:4321` | +| `pnpm build` | Build your production site to `./dist/` | +| `pnpm preview` | Preview your build locally, before deploying | +| `pnpm astro ...` | Run CLI commands like `astro add`, `astro check` | +| `pnpm astro -- --help` | Get help using the Astro CLI | + +## πŸ‘€ Want to learn more? + +Check out [Starlight’s docs](https://starlight.astro.build/), read [the Astro documentation](https://docs.astro.build), or jump into the [Astro Discord server](https://astro.build/chat). diff --git a/apps/docs/astro.config.mjs b/apps/docs/astro.config.mjs new file mode 100644 index 0000000..6c84e38 --- /dev/null +++ b/apps/docs/astro.config.mjs @@ -0,0 +1,52 @@ +// @ts-check +import { defineConfig } from 'astro/config'; +import starlight from '@astrojs/starlight'; + +// https://astro.build/config +export default defineConfig({ + integrations: [ + starlight({ + title: 'DesterLib Docs', + description: 'Documentation for DesterLib - Your Personal Media Server', + logo: { + src: './src/assets/logo.png', + alt: 'DesterLib Logo', + }, + social: [ + { icon: 'github', label: 'GitHub', href: 'https://github.com/DesterLib/desterlib' }, + ], + sidebar: [ + { + label: 'Getting Started', + items: [ + { label: 'Introduction', slug: 'index' }, + { label: 'Quick Start', slug: 'getting-started/quick-start' }, + { label: 'Installation', slug: 'getting-started/installation' }, + ], + }, + { + label: 'Development', + items: [ + { label: 'Contributing Guide', slug: 'development/contributing' }, + { label: 'Project Structure', slug: 'development/structure' }, + { label: 'Versioning Guide', slug: 'development/versioning' }, + { label: 'Quick Reference', slug: 'development/quick-reference' }, + { label: 'Commit Guidelines', slug: 'development/commit-guidelines' }, + ], + }, + { + label: 'API Reference', + items: [ + { label: 'Overview', slug: 'api/overview' }, + { label: 'Swagger Docs', link: 'http://localhost:3001/api/docs', attrs: { target: '_blank', rel: 'noopener noreferrer' } }, + ], + }, + // TODO: Add Deployment section when deployment guides are ready + // { + // label: 'Deployment', + // autogenerate: { directory: 'deployment' }, + // }, + ], + }), + ], +}); diff --git a/apps/docs/package.json b/apps/docs/package.json new file mode 100644 index 0000000..1151252 --- /dev/null +++ b/apps/docs/package.json @@ -0,0 +1,23 @@ +{ + "name": "docs", + "type": "module", + "version": "0.0.1", + "private": true, + "scripts": { + "dev": "astro dev", + "start": "astro dev", + "build": "astro check && astro build", + "preview": "astro preview", + "astro": "astro", + "check-types": "astro check" + }, + "dependencies": { + "@astrojs/starlight": "^0.36.1", + "astro": "^5.6.1", + "sharp": "^0.34.2" + }, + "devDependencies": { + "@astrojs/check": "^0.9.0", + "typescript": "^5.9.2" + } +} \ No newline at end of file diff --git a/apps/docs/public/favicon.svg b/apps/docs/public/favicon.svg new file mode 100644 index 0000000..cba5ac1 --- /dev/null +++ b/apps/docs/public/favicon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/docs/src/assets/houston.webp b/apps/docs/src/assets/houston.webp new file mode 100644 index 0000000000000000000000000000000000000000..930c164974ad8eb528878f15a98016249b8cf546 GIT binary patch literal 98506 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 b6~t;_wBcJ3AWgga7~Sz~izoKbpAY~5r|m$8 literal 0 HcmV?d00001 diff --git a/apps/docs/src/assets/logo.png b/apps/docs/src/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..985136a0b341994c7dc2cd324f0f3671ba04e235 GIT binary patch literal 63629 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

%vWq!`adQ9@6{4WrysZ+f)CjL*XnC-3<& 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 $QL<_R7V%n^&~HAtU&Vr2up`&=`8CFvmj z7%u)P*^_3Envz{mq9pn1i#VTbO?pXw(s`C$q!Q~Z?@!c?t{@ykx01H(Z)jYAfB1Z^ zN5b;2ScUJ$q*(`GNi!i_NVDTEmnnDWf}u3!+iLZ$a&rd`xR1VKf~IO&>Hyl0w>+m zZzDQQYJVKHg1qr{iRve*yc^D%d}VV6nT*n6;Lx+Lf@)n5*eJCOa;EapbizKKO6h!DKpB2 z3x02$9lv4=+8yA1M*f#lu{0a{esewnHNL z7D9Gav(->`T6_^UPaGiwJ;S34S|Ke2*Vl7d4@l{9*nW$!hF>zRsU+%Qv<5>r0%CUd z$H_(ZS{51J!B9$hF6WPqzVYtj_}XPVLWyyhQMqUZ-6#pbQThYR-HFJ<*0nJ81yLOhPp3s4~rhqD2HbO z;N-`XWv@=CHO^}fE>?DH=BUZ_^Ii*o^X90pvmdY8m+PA4Je)iQBZu&ycK8(UC{=9x zQd8@jkLq5OxQ`&ZZeVXnZC4Pm7hc%Pxn4(RM>q8EL$40_Tr|$2z~uPG(>7pm6K5>^a&Xpdizp8ds6Uv|aFd?k(Lk zqDdd`EF!bk8fJpS+FxLx6?bu4x|V~+cBgL%vN^&rRvKaO%lNxZe?Nj(zO**j%=V#G z7Ls(`?x^@#TbOSI7U#M4@4K?E;q7UnYB{0@P^J(<+TQS-ivjP>2gu(0R#_rHb)M__ z3d^e){A!pzGIY^1hK^e~ZiJ*ygOB?P!6-9g95YKBmI(Urzu9_T+}g(pFa(aJBmEP> z=zb+|j;B^NFG`{)L(ey2``*q8$f%eZJpY3TCm4yQ35Sk&K@jmXTzjKida*hl$y}Xo z1I}8b!!KTZCjWji;ra`k@Z16dE@!${ReHDiAcYqobuwL1J`xf-_~z4va?LuN(=r9k zc)if{)X9qT*FVJ+Px7CZfW2GG*xCnx^A7xSfG-y7uhwqCe8ZynS(w}hE1Y4hJkyrP z*Lx90XE3dp470r`WR0SZzfwgLa!$E*?Pdf7xr^ka)hEZq)exU`CByos{?td?09_pV zx%}C9Q`-!#D{FpX{nU_y>X7y&Yw8Io(C;x8B`Wd!-FF10J)$!0Mp0Px8%pygV0LOw z$R*>pCzaT2jNY?!mmdrX^_MNgx-|fB!no13vG&axwa)d_ze<*lQCW&iqIYOgA0Qj(hI6FN{mjc5#8f{k!ydocFq0!~pv7kqRke4a z2{#i>7k&(E<_TLYcDJEpx(DcahtATNg@@;W+V+_XquN*h-Z+_FH(P^4iSg#}W@28*_RLJZ)5U{% zaXTBKe$F|WSaqh)Rn^TizO&E{Y&}N zFWMS=X1r@^q{15u+NDYcKQ=75)p3_JAF71kDBybE;PWsQ?jPtf@J}5x@;9{owyG=p zFYC+bAvJbJjG}>)e@)lq@bQmUr6k;i(s`9oM{2{Ya!kgKy!p2W`l;_LKMHWY&|~1b zQ-x!ET6~fo(FmKet{ra=vL7?od%8%3O3FU(-COd>5j6>t3w4}Tuf1A3Hn3V5&dFc)%Byis;!(xKY+7E=%W zW8m5+QmJE}hqAVeO9su#JXue9=F(ZK16%L|S}pWI`ci&@@2+OwJWh3YbteH6iW!OdTW}n>2Ur~aD_9+_IN%5U;41N7|GpW_Pj zWS$3C+KLP&`0$PcY>i;sbc$Fit2wkzp*rL%ZPdL|jKykWOVpV61v3deyZG}WWeNe2 zuT0v*C&CQanoSid_WXEA-q$=EBH@);WFFJ=hXcP|sdbg_r=5@a&2RBl z#4sh_Vp2J5HA0AbZ{yJ)ss&AcbR#!@_jPw_;7&lCBVCoyP5=>*AyZ<5r8GG|NEYM3 ziebqlY%*J?iOhJ_Rl~-llwD#O5M>FG+V%a1bN**n^1XpH0bz0r7ow>$UvUX1z=A!J z?{=L}zRT-)ec^hj!@qv}G_&PmUa2krgf4@lV}mwckCkakG?k_h^-KQNz;hiB4?Uq% zOFX9pX4L%fHio~Zjc93h^geczhSxK?tI=sYbX-EcL@k?}KI3l4_T8fw3ZuHr3?0ekz_ zhwKy+6wmp0UV(pSEe_3f!buEN!a z=5x6`EJ(?*gn0k6oMg3sSEa{{SL0NZ4s#a4x=BSO$nESg@$%mFh4!(Cw#KLR+(LH@Fw~wduGDkv5{?AdneJ+pTX~VB$~o8 zzgvYD#m_$W5}kYk|B~NH^=(SLVCvwGFn~L_bf)we?&2w_&azuxBI{an;__$O8a73@ z2gdWnC#NCL+s!;y&-|dBMa?DZ)SJ`ji@ak}avqRp_8&%i%dn4P=spGGXs_C63v?nP0E+!14Nyn>#g0Fq9%-9KzMVRZ0!2aaC8y+F0{lCcIc8{q}R}1!Z2XAN3Q0r z8!6mDAda((>Fj1|hWw8!(!m)Rz>Ncn%$iV&qA z>bRSVL%!WB5%#%(AyJj>_yM=(!PpK?Wn30Vi{xDP&3})bVCS+ncdn|}%X98eoi>a- zap&Py$HF*Gdvoxrh-@JxnElv>fy!wL`l-Ia*fcm4h>q+ZqMpYT>Q0J2t@bQRs;(?r zdX!A<;$J+=YMcL@$DX`LF$B!G0zuOdIguv4H<1 zUh!kS2CS_Uz-r=lN`2#A2~YcJll*w-qd#fDC@}h&H_(OWgRj5;w&@KUY3di^6h|G< z@O}pMC%O~;>gC-lz+p>4+)kLC!);{AsKKedk9zW*Gu{{{jW9d=na?sVKE6))oZkHl ztz?S#zw$`O?h5Q^d72ldnWo8cxARQY^L+;sQ`SL(tRS$yUGqv>Ey9OVqesQ$l$JSJ zcV(ca_E(UQ)8NquLNVccs{MZ+6fTJI%wq?hAUL@;5PGpah-SDMzu<=u<;Vw z5%j;Jn>o@=#v3;L;GyMB_jGYB(}WO9*Xq=}JrzH%*T8( zM1=jd(`(4;fA7Z44m+!+bp`qfPRxtNzifhBuRa`iF0Jl9jA`mR^(@RO7}QHr=XP?Y zRDLz4{<>IQL4}<3-YQL2{;&|bKzbw%gUxOZzN4A5EP0=Gvr%vdQEBR-wzcRhB_2ni z*=O@+B^~JzEkmxo7$#WEI=X&yQKrgVRS_Et?l|l(vYKh>TKkwW{ugehd$E9`WII5JY=l~2yJZbyc1(TZfh16g*yT&jWeDt(&5+#ixI~Mo5#>T3J7kT^CI8f z0{$4Wf20AnRsz0XjT*n1b>3tHIVj@-K`%6-u~DHyJWN~ep$==qC2p3*f}@i?wU^od zjR$*kXoko&q){>zwWlX&$SU4nz|->pCkq^n)}?IqZh9@@?UT-BZ044eqi*ziPkL#RfSYUH z!aaUMpX*H+kAN_DbC**uogN6X6)0QAe!gpM=}wLoASdsd6=3_mm+talVtgE+I+iLi zN?NyEs@HD0?pX@H&maZ5cWkMJCKB1asQt3mZmItA=K1MYbZUa z(&1LaQ6}eoOC8qjjuw2<3jdk#47ulvS=fE1?15E)7i0}>d6R)Or@h@#CyVIfZL|9k zfK6LjLgjFFB$K|^V?nX|zcZ>7?vQ}5spfU=`PF~dne`*Dq5Mlh!v z6i4{RoN8%RGn)OZFOSFtmG>bnlJpQ3A6x`}SsVz+pwo)0m0Cb9xR}f4KDHz7D$x0a z>p>Uw1VJXhg}$2+=Jd>s^ep<`3az(1yI0hICyJh_80+(pYZI$6rZ#z=l&RHXyUTCy zq&OOO7BNbTsP}N_VjQsK1dXyJg}$+}=?!Z|lr9XtXeP#0iq^kg zCi}j#qhhs|DDcj19XiPm48WIdUMMA!=UwU{Oc4GCo#C7lz+2!%5;Fn?ApIzPaELI8WIsr3GL0#8w zMv_G@hhgEHlr=p--Yg>h?#EaGfmHZ9BqhZW%+6TgwBBYxuM!0&JVaDWQ{|u7j?b^G zatliB+F{_XM|!w~hpWD1Ye{&kk>FKnp(K2N*87GE6t|j}LA8fjcs8dQUOcZK%2y67FVa3!Y ziSWlxyDu_|Jgt9uSnZaSJCN*&$vbApnr0moCIl>=laoI%mj3SzC#@bQl zHG#ai85m8KpGmE-s(d7q3?G|3zH~L%83Ijz3>;DuE^ef?!PzeiuzL@lgyikqO?_k?)$;Y?M4D15IIpu|3jOc(B>k5rhhb%hKu8g&vEm1@KU#U~ z*$*)`YenNatb{#U>&(K50krU=bkCcVj8Ubl9u|3_k3zNEgDPg~3w3^E#2?qXujhJB z!9P{Ll5X*znw@7q7MgYDHzHjN-l)RuOU6*PLoiR>#~ELI%mP{qX9K&B6Ar5eh$K`? z=9XB8HftFoY3DKMOhk1p0U~_zEVC4d{qHvBHo3tp~InQt=>O`o-c+)pWQ z^`wQ#S6vXiQ#{FDL7cQh!p`dB)O`4AwiMYA=ki8CW!d3JBJqJ@A95QN8!O<~x(#p7 z2dx^htbD(uv2)~kr%zG!*^27CcfX7L)zc_9#Nq&T585B4Rnj1sx%%>yb>1gZJYZaqiA`}gkDjo zd3Zp#ODATg)?7lKdU%0_X)FDIM=+Dze6(3cL{8sjJVNL$N+_dq!o2i$F?(nO+Fo&V zP#PRx14%S%rPof1DgH`Q_{3@w+2SxESL)SLz%9-GMrb36Ew)}lAup3<$Mw>Wk$!pS z;*LUNz*p1Vw+20*z|JYcGF!#Bqxae^@!6UjSSN|1&8I#R&R60D{!n%oAl}`q!%kjk zfG_sK9vXZ(YF4nkep2T8BcJRBTw*|V9quCNBEfB;Fo?KV;QFCrP(^5cKHL|IR&mr) zO~jZfnxOm_Q@b4CJ({)xo;oHg?&@dB14dX}bWG%89Vv|JyCL$vr@01mi!r0UG`U0o ztsgbeIjiy@`C!Sd&P0{#%Q?|&1dzZ6gnPq2*9{um_Ui-E!|=1g@LJY)`f{I~d~ z-OMV8r)QuO!?5PU?W5);Dk{T-2SL7ze}oGc+^;vhjx-j^z2paU>fTmQV12W{8U?6o z?X{{dL5tta%mEz-^I{g0qy$$a4U1~!nv4H79O2&z*#Nw6eFm_td_q}%K%ndgTF^;@ zuvgjrpY_Ggb;l5!r;ZvQhO5^~c8Aik`D$Gfix<_wT@NZ)dEhsuXZ)0Yo)>HNvaQSV zWb_k@%mr}88HO2L$y0k@hfbSh8bQ)X>^!FZ5g%GDlfn}liMROC&+xaZ%L0FXcqJJW zhJKVAMlBMx(=pF1X7Gt3_ZUcYBH!~p;_i=8yu zK0nn0Gn6cEqt{lXSfao7)svp5M*k_j9Q4~~TY@zVh|5micWx z;COECnq}N7Owg;h^4w)_?@x({$=$Twsfja-R*e(YV5O;MYgV%gXW?D%Ux>0Rh zU1dsowR5by>5$4DmfY$*A|@HOV`ukZqdDwxTyTLwShIbECIhNSjsYR~_TkY%;~NlV zv`1wu?1z*7_FCX9b1wJ10qHd@=mQv1G%N&JTsxqWP|Sm2;bT(W7b|NYvMg?eE?YSl zL?l4w4Kb?c1_iACzFfeZ+(N57^OLyMRWJCt3%-+M^iPqhIES@CN2F~CefI!ukmh;= zdQ0s7z=H1+NqgR-fx4iw1!7!TZrG@g&>fVxe6ER zD1TGa-F`?zqZw^lt zF9`(2WN+dQk8(a}$nQ*r;l{eOy5{6xI&3=L#NU047x>qsp*+}5Sdwr&!ki`Y? zH5FN^F|x4n6nS`6}(Fg!s}0$I&zCmCM%V~B9VvzgcPm?>-D@{!ON2^$tlzs zl;(!@&~aTVmS$H`9CSeTw_2T-iP8j>V>$;vf}8U-?t|vVQ^A&MdN2tYLxsrf6hgK_ zwG-^^!>S+l0_DZFL37u2dRyv0Dby^RjVZ7Y;hrOo?UaP8LBG3Cms4SNWHH|<8y0Wm zn>?iKxoN#L7fpt10Noh()LHME6A~AEIIpkjBDg)r>e{yW{B3x|(Y$=&sc5~yuYC4& z=3otz!Ok4Kd&$Q1geBs;lqBaol>fGu`aU&8rq-XYh{2XGss93tR81MCI`VWaoH8>; z0Xh5g7koMS*-HLt_IJ8fNMyj1+r%aEdhNfM;p(tcme&>aA{*E5b^jq8sloCRv$l(O zmL#1DP#9>@XbEblaWW@bNXo>uG0W2Ov^aEaXm+$S<Nh5oUcJ8he%#6LjTk@ zzpJ~G3BdNb%Zoil=l@=2=BkKx!M8lUwVQOvLG^K`onLKk=+*zCgtDA5b zb+$_%#+}=MMdcuAlq-z{mPyxWi<3fUvWJ{dnj=*Spl%FC6|d|Nbf- zIU)A^%7RaJM3Voy=eK=KbxEi<7+$Q4|9F^E>AS0|CJpzP;TY>&d}weV!2J`?T9vOT z++D`Yxpq&}3ZSc}TkE}j`B%JtimNn^=XREM`ic~; zO>i5kqDk`4ic12m^fMvV@8iZJ<$<>}ZJjg0=ca{S0TIV`CkOKE+#~34WHhPWay0W1 zzH6QZkjjT8Si{D0q?$QKu$)XLsr>)8rG4eDY&epr?_1Jc_Y;maOY|H?h2FK%AB$&__;PgfO-nUIyoT!8}^mp6BGW?*qKiE!DK|(9wZ?{TJ-|$9j z$avkbdJb%v^vH7fYyoBNqsz=WVb>a7i3)0GTLWe~VuC-ve!Lzyz`ATxf%!xU-g*Dw zLT&SztZg!u=dV#u+eyyVA8Qk8x-Elmh&eB^lq7r51p^$#?p7+W`TmTlr&gae zzxqb6@jbC^4Vo2sO`u@SQjcHAKlBaOnIg@mc;9gIf~ZvxAbBqzTqwC@?0ycS0Q>R4 zdPEFqj*EIe=5w@p%m)c(&YpUiQ+1ybI>FV@uw%*QJkH=V^fz_w%@h zPgC`F_f$jInNWhSRztokmo}&#AMA=~UPaI~3U> zSdyd_0?L)0skaC+K6t#?nhRHSp}Bc}XHvUU9gwsM|0y*v?L z`wDwcdPhr@#Z@e7GTYt->HaWOH#@xINLQ;HE}bD#_^ZfD`RSiA2-AF&-}w6`e(5#NMXGJkZLoLwDbG)4@H5^ z()j^#xJo=R6cIZ+zzOp#la3sgE0pm@j+R#NE%a51cstZpjy#?2sCCO@OR@MT>t2C& zZ3&->wOEN>hN&;_z4YYSyf8VooP(B$0j4EURg~uA+c(wYj;^1H7DHVe9@JGyx;S-W zK1Y5z+Sas*x@eF_bsSb5#qFE8bZTHY!x4k*gTujbFNW*0(oMd!)RDf75*3_=1HcD- z>;4O{om6bdpxnzdav!D6IX@oKY-$gmVN$R!l5n^72aqu-&UQj#1gODm*Yn%LFPM^F zUqG|ftk;r7phJYytNFVKh@OD_Qqg!$Wr!B6#FGLO103t0V&a3D%LBi116@MBFpc#) zqXIwS8f^ylcA2#~nw{YRu9wx`mzqyuXFruL#r%@UioxCSqhSG)(Zdy;fwQ1mR2hep zqUd}c*`hoSW8W$pBwtl)(f-2h-e*m6dD{|TC)#~oGuq2QV4k~a|FQr%#4M@M5<6+2 zD~^9(c_|j=Iu=a$XVN6xeBcs|Y5uFf$vqy~3LYpfcSY2flp6BaZJ z`}eTmN!Tb7dvvR&tw>=1y&ywmwA0tp`O$14Hs3Ww;XyZ&EHjFp8lUD;?_iGg?LQhY z8nO7xG3-ev`Gm}jUx^KlA{kHtyH}aB=x${Ez9SCVMt*$~7sPYymY`kz@ zz=sv0SP8#0o7>HCJLF~EGj!nSOe6QJA$9ELy*6^^uJZH9Q*n<#R*jJTA`{y+rTtNk z_O2^{!M@|*E`@G`TlVb(r4qEdwcCsNi6&v*-lva7*LRrIe!n!Y2T)?j1Di;EsYCM_ zkFC@>UHON%@1E8*!fiYVu9A;z@-e;9P8Tn$>`{3oM>vK>A&xg?*+bON6fuwPx=zdW>M~iRlw<+F?ejCv)T=+Ox-%Gmw8rZ8c&3P0c>8quE82M^zGID* z<>g7{BkN}g`ftp?osviJUqt7FH{`%O9|o(2eb{pB z_=V=Jqcrc@v1}M`UCtGyC9e@2s&iBgplvyxVT3Q;nkD^#CJ>5>APAIu?_TX;Yxd$- z=LmH-eQsnW-#4@t$Y?F7HWl$r{NTo5>W%cnKP;evCQtl_ z1Y%{$?*NL_UueK~3JbhFyQMS!UH>Z<&9`u*^_+=hSIoxY^EX$-Cnpkm@dt+ z(7@Z$(A}~yUTG4C*;lsCEPBWy`sq7yy8i#PyWx6Uk)X}Foi4Fuvd1MN>cc{b`0sCO zz?H-H0r4j3Iv5?n^I`y$?VW2D)@_R91VBd{yX|QqwLoq`T-ZYkv}Q=+VPc-|D;>p` zX&e{f%?ejM{o3F^(Uo1)ruo&CawTuzN(u3XLfs&H-={=Z_Q%b;8KplPdO42!xHLMg znz=7oSiXNBBBC~uDUzvtsa34qRDNS~iT$FLBz_Gl`V;CiaG^lvI(?J79+5`*-amXE~8HZT%w<-beDe~3qDEd&d*e5yy z)IS4BxorB&et~HaT|Iu>b;9Oa*!3X9tS^2Vz0s!a$r{?!Wf#eU-qG?9941vl_y`Nq z@;0+QF#_V=tSxNy_F#hB-61+`L;G{vex`6nl=1jQ zINMp7^3I?^ym0o--YL*q)@_^SGItrZ+YB>~DysaNZqi2e5ut-t%;e~k!>*0VTGPG@ z!)x!^*@kc4RS~rQHcf|GZJ&BB_3%3B_AsUE^zUB8#s4kB)2$Sy+(Uc`33w;iiAmaQY)9nADiHEqp% z+^|1_CDDu<-&eMe)(3W*_|+4l9aM#T=GUg*R8|za9MGGZ9zCl)Yu^@m`)DAB7FsRg zx)i)D8uebW4v_SbChxLm@}80Jl?+<lcI>XimMEg80|OE8#3|b?^2bx_n|O)!rOo zo$>i+%{fwVXHf?n6p??&^ogvb;}f={K=mr6hp(HRhfq(@$9*I9(31P}%>Vt9cqVU< z6|AI%dJiL7WG1U@aT@KW*@*t(FWyKR*(xBrJW*ioYvAX-nt`=zT)>MUF1Hh;d}6-` z?q*~8S<*z)Sbi|Apv(nc4Kv$JWc$~!&d*kv>{TVcO(xZf$Dgj@mq!H@Yq;q!<7vg> z&88=IyRdF8MPfRrrXG9O?193Tg6=!q?o5<4acXs~$>Uv^K<{hb@)?B!E(!E&GO6jP zT9V*c0S`C6Ce7~T#-fM7`g|+P4S~KeYFWGzO8M2NBQ#kDukULJasn1vNS!%$cQY~m ziF9|!GT*ux zd3qewv+b-pXP{+0g@1Zp&R1_v(x3fz(%Vtb7mazrvIMslrImKkP*F%s+7HtRI=QjX z*Ytf;AOqMGmOTGkXRI>AZy;v-6`vaBWLb_E2{HXANr&P4`iG3?pJ4lL@;02K=M%I3 zwo3b7dP9rrk^|kMfuSjq|4_51lq7$8S+#oUPChf**=6lc#=U6k;_}jWN#e29pR=_0 zH2b5e=|la4V~KMrgK0wPHGA(0ONz4AnrX2MhSKg#yq&&kug2EuOXxr-9v#;^ z37zpVK4#mI5L9)(yc@72NATDv>Tr$jobFcqpLr{Y%@HR_B`L30g#l!&IL5u$;a#g`TBH+Iii zEt3X6e#sa?W6{6$aw1{wLo3G`1J$|G(_=5zJF|*9-3SZh&U~{z;-ho#2Tyaijp$jI zFf?^F1_haGuq+Or|IZLeUOAg(YjMJ%v%5b1UbQ0mnQ;FRbxM*AS5BR+Z`U(KNOKsn z1ywiA&w?#W1fJYu3+}?urtdD0+3j188@mTcU+?98)G$Xrw2cGAUwoLrzF8j^-YddjW1M@E9%{`xwEhbA{`?had#n`%o#zeE$KL-OVM(euw7(P%)NXZzw z9rL6#15A?&a31yw5$dg?gcniA1SkGgYZr~@Pf4g%b^kq1E4fGpbQk4po?oaI+%Ti3 z)}>BuN6#0GC!=qy1HhY;Ir}_JVZDL5jPXCm=s(WIpSusPEG_XZSU&QMLmu$p>!leN zd_0h1rK2}8SStCwl0&!7K1oa-pnDcIE|IajC;pbDbhVZKobMk9in9>_{}^a3AO9Pw zbWCloG3AShdLe@N3l?0{%wTzT{_=7LvI-PKf2{sBk@$|VBj0q%8vKlbf4=YXvvo)1 zqRJUS`b+G~dHJU(vHBA@dnU0uBbtVIEe_y0G3-S-nr|tJwI-bj&>-Daj*FlgCi%`f zcR9ttBvrMlk0)9uEsQ;1sFcDwtoFg@pv4v*7Ynm7(hXe-E`WV41nY?=x|F^BwzXZJY=&Nick6us; zhHE!dAS*4&A>E0Yywo#jLX^27WFK!x^)qM6IZIeC{qZpI&ppUi?3@6GG##t!86a)D z2>%!Qtw#CRqJ2j*K!f+W00Dg0MVYX$Gq>7|l;XincTwVnwvK#(-ly*y#?Hy)cm|Vw z@Ob+bxu4fvYy6gY=f6&ODat8wt8pZ#Kbh_egxNzymC&qL;`LjWu5qTDi%hY<=B7?V zFLuuStdWedmeNnGPS#s$b=`1T*!30FxY6&GFg*VoF%z{Q)5TIUv_DX84HfzGcz_z{ zmQCsc`YMIWjDy)#Lam>^));73(*`xML8)k2feslZ6Cm0dS1SAh`xU3oN0oR zmZ>QZsQp^^Um_ZvL%bx8KR)4Q{?P>A@3$`o{b#Tn}#m z*B_em>}tmSZWeb^aRXaOYyBM64ea&VwNT+YjE)aC`K>u~e$1a&SbL;{ykuHXy!GWp zSfSG9xfaa`fEFXf506+>t`rR1jx`Nzq_(;+aQinrOzY(iOU==EhL59`~vfL&0?;Rq^o?J zokY-4AK>u)nu@N;zS(E}&4{M^d>Kx0S`QO0eR36C+tO7Cm?i0$+yDS~PkEvZzn@Cv z`PKqBMYzByUp&d4@7ufg`Q+ z2r`R9jVVu&;SFrJfXTeRUZ?G~6%-XtTMe+d}D9vXlty=esi9g&DGueP#(=HCEB}+4@ zCCRQLxa7WUDG8EN)uFS~!TPlZe&EvM&Hr?n3;%2Hk49VWW+QhS4$b%&*Ci{aer@>x zec^BP@o^jxDfG= zfFs4|wT=0C+kaBdpz%iwgG}#}ZM@X>YImyf$Dx0rXVOuFZ$38P^1y^ElX^F;A}aw! zpZRxI0Xtw3^R1Kn>*pA_Jl8EhWJ-!Y5Sidq@%p*G>EwJ-b@;E^h7ZM`zYLhz$ntJL z2E(l7du8vfQ;x$P4ppl%KPN2xMLszo8c#e}Dxrfv{3Mcn{9482caHhIMI-G-u;&8M zG%~YYhx)JdWCm*Trk7~jKG&MwlGBmE@H`K3;grR8^dfK?>r`p(&G`G#hYdaTYBK&M z+TP+(K+2cOaolO=4$Bu0<1O^c>=qa72WyRzixT02^H(LVt$L3Q&tLu~OFx3J`;%zb zr1=776k0egE+|bK`Ma`W9=rCTidtiAQ9FbP&moe8Psv-tPey98kRKyH@rMeh7N+W`+Z(`;2pMsj!u1lp`~J`l;@3Md3hoSAwqEd(wB+N$Be^Qd*rGU%~zJtfx{$Tm;^rk z?A!inUJ*|w)lUs5n_^f^{!AiemK{wC=pathmw$6~ZO&CEQ2BdmpbI>|(PWcVOFHfS zz}UMp#ppZTSiLYU&TWD(wFT8aJ;w2C-8JEm1ba&ft6boE1SklLha9V(V7V1F)dacP zlm3a7C2aFv>W}DfS8mSutm3F@FkV(#fN#?hczvPd7{2UM5hFp=tPwj#g8cG% z{l5Rg^W5j0_kG>hIcEU-6k(3Y%9p#vr@^)qqf#>nEjbbpH;ZFW3(R0Kjh-q#hW>dB zrN7ZF5l~^v_AfX9^u&0#ygvKZ2O)U_h*`DAb!I^0xAfz-Zj-hKCB&9!$sh64?JJ6v zD#x4U!}q>s#zmeo>XjXNCP^a+@4_n@J>6fIUzuo){MnbW#;$MFFL7cwUb3#pLwXfC z?V)1H+HZGJg4I7<$S}gH6eI)d#wAcZBqx`Y;%okW9pJnO!6;+D#2##}|M>&}z}-qu zp$}jL{M5bWdvC1;Fcc|y_2Knb_szbfA{%6H?QMYqH=d8XL=JiYTKY`Ce#iBvZ`P1OchIT^a?(3*{JSk6e^{+4n(r; zhOV+i>n9cKwWmj~{$%xwH&FqP+GW2`CliUEw<%@FFtTYIaU7+}BU+9taSEW~=y|{7 z9u2DYDPo4{MkgHe1w_eZKwRbe@ovjO4=QbJp5-=u{50`4i8H2Xc1ozS7g8*O7b6;@ z!=+YJqI&;uf3R8By+)Y$aD`}Iy#PBbhjrci!rTyufdw7ONBc=(@V zp5CcHwTN&+f1Z0eIpxscmAY&T?tax#S&sOS^H_Sv%t9O(vUgBUxwvS3)tk}<&}ppz z3#(KK{%gWj9uxeq)A2L{HOv`DS~m#y+cbaGuh2)8*#+x8&lc&dW|K}=O#VJ|DeU! zd16c3Zs%){bU(cp@GsjYM}8JEb!I32wm}Se%;Xv1A;IyK19~1sGVutJPh?)AAwoh5 zAx^6G(|VR^hR(%n_)Qi26TV91(7W8^=phLEwZN|_7iHUufoFCJ^;RE-XSqftGym1< zU(Ys!n{JI}ebVthd1C2y7@4xuY>QbX*&9?Hdu8|!(~kO{mrzF?G2TT3h2ZBuRbv9N zHQ4#e)_DxB@RQ%lWCwkLH1qJtlCKqsnLDPiS^CCH%`1SN@fhxJvf!G5>EWh z%!Lkh*URrX$+h>McG}oNyl}!<-zYN?RSs|1h!sn|0^zCRHlu|!dXadk0lV;A_q+0s z*zNF>FSXPY{Cszmj)9M1RZ47~#_D!8f5DlBO2(w;@1`;!`8C1>P)))&?;Ardht`=H zrzYpS{~CemV+EG&N4&*Am}fqU-r5{w;3n%T5qb9Yr^iW#Wv0JmVp59bF3jiIV+|wt za3RqDoY^Q3#3OBZZM@yoElQzfWUz>%OZxPv9$YH@^{T>xg(FRP%kKMj^}>*aDLGXm zS5M~IYu2Gb2W>U*M%|V9_)eE5{8VgI&FZPwXUK6%Lu-re>=RAvyrU~&Q=%9%<3sq= zT9c;7C0NWD9b&wRAGr!xyl?ftV}(e(dvLM0$vW4EIc!u{D}5dika0TthK23-;W)Gq zL_^9-bjZcqE;mq09)KCI%G(;bD9A6I$As22gVe3XJ6`1Nc{1OgXMuk0gWdmCm8YGB*M`+A;{7sJ=-b}=J8y%LV~ zBzP{hg`UCTp0#z5`W{TA!dCUgSMA2KRK72q&mJJ=YgDMp1dT3C@bzOFjRz7ALRGI2g%u2;sqm%Y7G}eRSlv;E!*U*+y7{#gR~@S9`o5hvV{uJenH%NK3}muZTu!|;}!R5fis|aRqX(8{`z6eqsiK2TyIfqqET-1jEG_Gqi==$b19ELl)%yfz!W;NL zsJgI9)gPBAtU1hAMV3$ufv))XMRwG|VVoan2IgqK*^M`C3<;oiEbHsL+T|2-;k=|Z zq*)(%?VgFQL!osf2q;bgi2vnGnGN6scu$M3Jey;#?pF?xWc=GCoKr@;KgyY^KWbDa#`WnQYdQrpUIW!!YZB*|a)+%~-Y@3XzM*~}`- zy6m+QwH}&g-NRVA1P#7GakdIqvvkvHTnZ+z=JD+*QDyCoxzqcedX3d4aoFZ-!P!6N z{WpQ`jLu*$&T#anCPLO1;$m&0|O7qGhO@*~)g89^&&jvRo zFh8*+gIj`m^${oEefnFDJqaVl-<}bXG~*|JO)ZG9R~3d>>2Xi37J8+_{k-^VIQkjf zDKqY`Eqa`QN;Eur(NJ% z0~qdxKk^Sf;{^A!>##I=upT08>R>uS#K#-aja9v#4|QGYt8B|pF)ql6M6&=kJIJsI zL<-OO{QN*#T=mPM!X*J!ToP7Eq2976KV#`XBZzcw8P*^&>KL@yU=#vTZ?a=I>l-c) zYYGg#c@je#s*FzllzJ`@f{s@W_&RsI)MwyghxQd`KWoo|x9Y5);@oG+>D&D>OJ41u zr(oX?lf_Vi_43Ji|%73MZS?X0)L`uR6!F*=UWfyRK7|{=6QuR=>fWyu(tu%C>j> z-g=vMxxAsA?d(l#mEbczcDLwqcA*Xa-J`QQLA_`-rkh3O)`;n*Cf31|2_F`;N46WQ zhU|>UyV3FctpXufXn;e4 zPAa>?CM>Zstd(X;>wjgAj2~LuJ5i#Y7`s60!XQk*qmyMO^NvQl2JV(faG!Dt$vPR2r~Y z#e>3|GIyKl&NchXelj)!6y-BVK7|xCW+8O%KgPH>Xxu zlTkpWgFhZ8vhB9?-7`d(@@lu)gJ~$0-{MnnnyunPJgR-K4!?q2Je8?+Zwu{kee%6n>04LTj{sgb zdd}o(P|gEkIrHg4;E=eg3)LSnO#bDL>+|{ohqlVb`4PBQv#4oW&1!nx+3c*^#1~S? z)kK1;5g^MAK2XqbU!KmC+)^yCv(JaUIwG#<#?R1wYrJZ66Sp{NLL2u?Yne_TmH2|w z*KqmOS@Wm9$N;+MdGKTlLtk2Q1@pd8)u$noq`MYAni$d5MsvQ-; zn;}B1^J6~wPJ+{j?^j~(9KV_`z|ZtE$QuHSq} z7sz0+^qKo~{pp9z75RmNIeGitqWaSscp_gQd|KekohPz#{YiHxFKQn&dBQy{^&_hE zDFpjPC^Yywo4RwiZX`xUr5ka*E;CiGGZ94R_x*_z32FM*QU2(l6FJa+klLs|U%bBH zai}Yt&|qo&cl@9320T-{C3J4yVnNebn#>l;9S!zUX^?aehE z5_j)2zj&Cgk@|*K!*#P(27VdQq6SV&j#o4wKWonGQD{m_`MX@JUqk;HZ#^+QXWL9V zBv>g)pS>seK{V^^#$A&7;QhZ%7m`aM=Boib+|mVAbbu{x=tE7kr*6qp8;I_*Mp-VS z;yEDXtRs|q5U%#{$o)YoF2yxdBbJ(K*0A`vT%|&EZZ(ZOx@_1?#Ba7k(Ag8vQL%au zAzGN3+RhAVbAl;R7P}f8eBpeYS>lh_P)R*3jbxd)eo|=GE)IyNWCX}@NCWKn zxKRl^%%dRT_a?VJ!pt11!?%62o!5a)XSyYMp&=QsYFD36dy=Er zEt}Gqs_l4{2Yk z$#SHNjLR-$T)sm-GAgIW zLz$FDpG_vRW7%cJB`z-x!wKrvZN}rFniM0$x?f?GZz`(UvB6S?uyviPT0Vop2{*RqPa0I}Bu`B|0UU(r)2hD$m^y2&I-Ja<+E@4p5Rf$TZS zLw?k<+m$pzM~dlf?7`OEI&IM*eR*X{u;v>Wb~tG8sSnnsRK z+>g6~eiy3V_r$5>1jtY`!n5`G?I8~Zs6cn~^(S@WdGqEf>qD1-j};$VqFnFZ_jyvP zA2%`XH+q@j`ILpKHmK0@)c}kCmf*k5j^n8Az-E-A23;yF$r&7^om}UOs30yXQDsfQ ztN$GR6XWPv)k$=|QfB8j4hl}nE*=RMJd&I?G2;?kdr5s8G}h#ZiKTeX^(+q0Zv)9} z$Y0y6;`%-R@NGdjM`n&tiFI+v)is4kjGlppq1SG$u6VZ>!Mp0(lQ#U^{L_)0 z(Ex8w-)%XYk7*`3+0@x~Z`iF$dJDv|_?a-z#dHc(pUo58&N^m+eYzmz%!O``^7wNRKY`9V>>at=6BxrLJ(hI$E>k?I;y&oRX}2HzT}g;sd{ViJ^9)YzF)@uP5zW* ze+sF+aF%@ASduExR)R|3vU|1S=m}^PFuQsNf9rVKo{G7Y`F1!t!-C*#oLc;XZl7N$ zw9bn05H+V%mBF@GS?y_w`3s*tFyXzXQVRX#-vtk^!Ea;G86OOJ2_}GO`! z_-(bV>9uv5XIYK2*4i%6-)_l0F78q%LY78!ujgpD%{M$83+W(UE2eu;S@`!^YM|=4 zXJk@}E>qO(RQEFWHQ%d1^mfmD#KVir{9#ai(iIp(yiwAOXGSR1hss*{OU)YxS&oAa zE$dL(^`P`~W;u~tl-VqtfEr-@&hbN}BLF$OG^xo~-6xx~zorimNU!&6(QDOxEAPsT zU`R<=uPNK-j|~v$v;0oWl|={e`%{-w)n+;{-CUx@)d>YC#`L0?zant#^2uA#UlvD> zZ1hn?gOwq1nx)hm8NkQx4NL@KLZ+p?xXqTdw8lx6ZqLPQ58RIB+U*UA;PDZfkN|tk~yBAGaR>PWMw9le>2WD-j2RH!6;;RXrP>^{E@D$H|53hx6*pm zSi7B(nxZK;VEwy}slLdXT~k5S^ODtt2t0;z(Z!oyEt~znFEg^*KNNH&*u>UKgTS8t zOg0ShbOBWG?RmhHa-(UE`%~ zadzPJ^h>XWk7+b6_uFbvl&`kFv1JINRj>r}Mg^1dkL-TplKpy3Af&pQ$K3r{!e6by zzN&8N^OhE!&VepzD*U?V`vnr75>$y+3-&WXg5QV;-^-RVcTVW z4yPXBB(^WoMtDurnRM+T$NC?-C0SnMUFMrd5pkOiPr%EIi>J2~m!DbL(DrqlHCMU| zn9T2V>rfa72OKa@$Qyz>kdyV>FHhv}gt+0kWZAJ&dwS(ri4Rd?>> z>^MRRGTotGjp0}}2P05q_WgjlfQqM<`VL-lsst`l-sI0kH~jhdyp8JS8qeW{G>w&j zEy)(xrZg>N6lQ^4UC6my=a&e=E2=}EdFXuD8lf^=UWAPbk4`0CdA2d=vHDdKI#763 zWA-wzS!MB|JI)ZzY&OWYaTn$t<9`9GI4BjDoZc)vw<2yAEj%|S(4C%Bu0uyM6Ki(& zf$9P1=!0BiocI3x+_veiSK!Te`A#2G@VRjJ($A%CW_-Gx9uNF!?7ZCb@XIRQj6K|cBm3SL#0&D9?4zJWZNM@- zlyc+T+o5V3GFCTH=_a2vWxs`>x^&3;08ABlM(Ek0`T!0^<~O6Sx4%y|ZhX%Wt(ibag8& zblY0IcyZssn1824prh*I+Qn(IIoQ_^GGAahy!b5mX){yUcBc2&VC1-s+! zVIPT=@R!u);C9RJQ+ZG|B+*+;Q`nA&wgaT0xBK2rs!gE{SBd&*#SMNnO>`kh9g;>s;WKS7bIyyjCHvbg@%UpV>p}z7?8ut^Nl~xE+uQeWwMj^s zYRDp1|K9zFsH;+!JTR~EGz*{9aUDb*@MDNIXMo||@lpk!jLp6~{RxqWTv>_$fE*_S zsc+yvAX>Q}`5qhow*@KxI{OHi$AWpZd^#Z2ocGlxYfQq1wT6L`tSgH-&%qCY`W!3` zbKz=(zX2lQ`3Bd@c`ISjE!w-#8L9)Hmrb#O8mb*dtZy3x)NZL{1sOLm`p+4U11G~v zBwkvyyg^uEn!60y+SfXbnrI_Iw$@mXc)fT4^x~IpAY8Y7#PY)8V8Lv|N%g93{hvCn zGyu>>czGp-GhENxtT#$m#={mp2%8-V=wI;MfAiSQt>gnVZVbBpX&}SJZFggofW~K=iQiFa*9PD5>yIeK}>>myerp3?+Bx0zF79&QdO)vucva8h!NUq4aT zGep@%O$?V3Rtc9Zz?_l00FV30nKV5sW={&9;#MTPiAvPoESd77vTh9Dl#wv=|G^5ztk+xf$lTYZtauv*vtTCLFog$f(=U+|e3XR=4eVNc}TC9|9Yxys)r*D|m89jUjo zioiE5dIYoBWv`L0LwsEphGH$2LT29rV_V|Ns%Gvfkltbl?q}1hj@+)D6nT2};k(Eu z&`o)`@P)I`OjFnC_l`_6{o)tXw3gI*lI)L~)<2aTc}9eQPIipA*e6$u)!f+KQ%LAJ)Ir%X^i%z;p(dv>wypq|C; zydjEX#}w_-_5`^zFD^$r-3E?T8Y+&+Jdw)O@H4&giXP9YDup!(MzDW}ML>#MdmR5J zH)*)~>wF|i@p4O1^Zh}0>ci%3Q+vOy4%x`0zogD@0;hf2KghXe%|Tw{WJNH9xZTJe zhyF99OVwe;kSk7y6@}K8_^Ql zI$x2xMjBbgO6UMAeo!&(dXXH05OK%x_`uUL*&mWQ`6%-W@|`mizfnlY`dslOsKPTV z^hufAG$xMF3vol#p)9qFzvY)ZXPKRKnyW|$_@>t(ejunJ83NM*Nip;Iq4uTKH?wdZ z>HX~w^E-vTya5Z(3m>Dgv5nZIBd5$yMd0bwl<1Si>6X@Km?FBP;eQ3>0wwu@g)E2uJo&TO7?SE{S>lQ#P2nj06>Gk>9F zuASKxeGhQ~uF5sxY4WL4j#g^@-}2?DJx2l|9?evLzYFIbl5vDWLoi2WJt1qW(5S7P z0hXY7OCq3cv*3;Mw>8c^x2qxI1q4%@F<7yuz4wE+*23`GE*sA=YNFKDHwfm;^Be^P z@WR9hIQ`gjv&enoUw&)KYv{NBwY$p%lXvOxTh76Pvz4qcNR1Lz&}^Wd7J@B?;i-EA zBU3?mhls4$a!g7=1zUB6fvxyNG1pYJ=xT>)nKSWu^>60n2`SU0Rvkr^OXQY1{31)l zG7#1nZVmOU_$adxPnskY)C#=lbNsLd;b^GdbO*NIQ7t~ znfx7FQZ=jT$RScnPzNl$Wk~HFuxM%lHqLScJs%`+(4_jjd$Guqy&eECCR;9~JSEx> zVyFK}NX>EMH0;9&f8&a!7J{0vFEFFgd{<#-^nsQ^%?TpK#lmuH`4E){UcfPWU#GQe zH3_(&jZY&PS#Rrfr#&(zy{A?jw%R5eo;Sf2ewBWT=IJKsXHHb`lIpBm${Sr#<#|b3 z<=iAB3AT*YySYKS_FGZAG>GdDg1!2MM2hVtADQ)zF0W{P(gk>b4?L6Q{b^$KHZ(Hy zG={sNS@mhC0*EG5E*@@P{DF^3q+)+@)kY-@F|NyBIPi;`A`A(RfUJ-L|CNhdwQdii&+9m;^#XPwG|6F>(W6Nno{%;~Bjy zXFE1nD3_nM%G!MiG*?BhHqfyfI%q0qD^6}?Ep~`5zYj#0xYCQSp5b}hO4c$mWe?Bk zT{Hg3{PR>^o?=|4vXS_=w%TenFcwfkym%NV;gLx#d2pqqMqcmV3dffM^2z z>*ECx>-p!|cYdWlksWPhK<+we2N;%Ie|CKPFyS=@?FfI$8U7mnXqtQ^wu~tB*~wC$ z8Q;LSP~vZ|0kQy!5X+bUHazMZN%9SPTceb){!75-58paf|KTg$YsZco!=J?HH%Q2A zOV0HLE~>EFBb|U>Rb{>5$sF4Or;xYvj_yv_DS|a5^}dPB-vZ?U+129AS>Qh!PK))I zk!l zz%AwEy-%p0YroKahKtMOOWT;mvf(b81pCUOm$$qe;t=Ws^Yx9n=Thkn!{3(#vBxj? z__JgWvafE1WJ76gH@(wT!0!V!cQ{Q>Ttj#W7gFKX2G%0>k7~5cIm?pZSwXIeSmPQc zkQk>0Ht^{3v+Wu>axplE-unkx8E#idyDLM^8N1tx$Cbe#3s06b;e`qA%M7+KOi6Ze z)A(wnq?FE!h%YHc8NVau&TR86&6Fb?6aB&mbGw_?(3{__B}mVAOZxTv>}qc+nL=Uy zNepW@8m3yR0wQp}1>|Wd*KoIBQA)zhP5=12W20O3-i*_n4>K*^9HVy8_fD|_xz2y0 zRmH6}e&ic{Z51zeujuBd!0~pL>|9UWvU1r{gUZbAXHiT!hXpH*twr0xQ1%thr?(iM zp=QRyJ;lMbcyTSClb(>(G-qUg%A-EWwDGN_F#E&=v*h?&zpW0q$PRBMB9lqg?GcxOFrR;S8Ga&ZP3q)1t863)X_INBK2hHM;wUd_uPO8Z!8sv*AY9LT}YA@sK*Rlg8+TzGb>B+oLx z%7pHXPLf7$NWQt$OjYYaX-BA3H$KToT6gkL%s;>+=^_46>%QNz#3@?kCXvBMN$tnEw*sIn@c+S?;C74oYtY!|)D>Ny7^e|s2 z8qi)!swCEFw={kcPcn9)>(%u0n6ka&@0xm`Ba6OR3Lv7f>@wE;7eE^w=9*=Vm2E55}jU9pcAzjo~K<|4?eK8KCfxNe|-v%aEeZ z#q+tXcUy!%8uDlGf@Uz^E1p*G`{@eByhH{5Pa7KE&#uT2hB6e4 zW55oGe`daR2GGkdzxWyH+Q&3wX|tl}DlKCX_>R3+Ht6efS{rnqLcw64P-U98>SmDn zBR43Ty@iSdd8Yuw$uZB@Rb=u=@{uCKH2uzzBls892K6=vrj_x-@W#8KHDe_7X_}OI z{u#xC4G-m^h^|Ib=L_POMZS_RG=S~;lhqH(N<>(zGWMqT&8W=7Q%Bal19ZX4;uqs6)CjOKd#3{at#=W& z3;7jJm)C;6z2KD(&l3{E?mSc|#Xg&sX!M;E?N(xM#X^f^w$mx;qmFRZWsW;Kw3a(u9z0cDQ zFH#IdCIdEfMeH*m_n&pOw2{JC%y+wv79LUjEloAO7TkBy|M}5j70nALxbV9D{XKT(l-PdYlY9v@rQ{B{23AxPfUgzN}!|nQdo5=6dUGgFPW^px2Nq zxbSf!pTbwb0>bqq=g;NecD|_z;}Ew)r=*}Z+q8?;;Ws6*09+cQzQPUCjB8MP!`ajn zxJ?=J9k=oouY(b_9;Ptd{fKW*?A1KO;u;_9MV|1sk*QvhEQtRhUwBU5ao2`ubgD-D zJt1_;zIRi2gL_^(oZ-u4AT7f}MHgs#DqsJ=v}5S6JN6R`A13vk>p=Zlz>STM^0T}Q ze=4H_QJzjmgoajeW!i56;?@gk&Ad*~-!Uz#Cgm1WtJ*suL(Q|fn~gM|gyiV!xMY;m zK{FF#8yYvfKXX}$ZT+4sp<8OQCgpA2zk_i~8zqC|-rz#%I6a!Ie}K`J&0_TL>v+J0 zYA)lLfLB0GpDV_$oD4%!UF|T+zy1%v18PvLO*yFstpL*8Y`Vv$s8}>am3Bk*G(Z9$~D>FrLHbDtJJR1 z0|d!5XOZuoOB*kC8B^N3o?b}H|AchJA5nyaDVdxVVdI1n%0GyGw_YgQ*8SS?$j!}@ z^UWad>ytZdbD!rej?GW5@C!w+%~)gx{3nSY?8&wZ0pihbE=Vx|;s0_=V=zajmhXzn zn~isKiecsl8FecFZ$F`yjnTow9}o@F>SO@Zo`V|i;HeMzFL;~IDwb`CFE3-&gT-}; zCoGo_=|U;@tug;6Q>X{Fs<{f$ywl8>e?Uj%U);DNT6UnTjj?2-+0ay|-JNAF=a`y~ z(jH)ZpiXpbt!6>j!I(Gq>f7Smz-xF)MO69n`ernb^taS15O;b?KHAYRyh)|jnlW0! zYDvL-0k`C$$SN2t8~R!6x353SRfA6lk-}i}6Wbv|3}_o#3s3nQSQ$^-*qB=O!YQ#NC!BWvZkk8qlMAY<{aswr0l-PEQOD&pS=u!eVUO5GSEdc7B^LnmQ4 z3kj{Rk+`66 zrxc~{HKcq#=@$K)n;cu?b{2Z4`NiEQ8D$YQ3+UeyY!C4Jsn(b(R74H3G}(z5=oPyA z1*A)yBYxixul}oHx_KL|8@Ci+g8C-UE4c)DM@R>S87T#71f0YO?y8b-s_C5ewyXfH z-4e=dIdbfr6el(M$-kqsjPO5JJQ(?mjdw26CE0QGBj%XK{9$Eurc2g4YfqybMb#L7 z4$8gLWt1;BI8mMwo(e}sG4>ujwhZ)z4<~^hO9#eQ!p)NVRsQfafwz0{2oU$lS zbKzSpuoV{p0M3k!zs_~LZyH1StJP|6N*g~`VzxWX!^!yzPJJHxRpe(vHDoVR=yMO1YOM8$Zk3KIznO<%Mz$-WuIvsqmB#Q;9*MEWC==OA?k0hNaR!~XY;CjyL)1+nl?>ZH9CWy zPp}T9J@Vjk>n&Buz26r`)2ly{SY5j?M9Tua{VYR_UYtJNu6`#O(mm>n3iPH-t2Ct8 zj8S@MpJ=U80(5PilxOxUQ|HPPHIeEnAa|DKOrAmWpJXG*LqZ%gUMM_I#3Od=&`?jy z{xGZh^Kz=(gxAfLM$9l*k zj0X+==y(*C=<7P_NsJG5*9k0NA8fz=l+X5zwySs^-i9NV{kDr+#=gn$Y|(b5N>4kz zWIrWst17VqgzeieNdXl4++>3g%hLU~g}DsgAS~dffKZ_@a5 zx1Cih1<-HNWWto5SB6`wpWWvDuN*<|thmlTPEJo|2{at{%pc!g%hkX*q`9x=v;)i1 zoIV>Yl*Q5k16q<_92n0EoyvAsm2-XieJvrX2)$xQwvS5q9R!gFY>Am6Q9i%O7HTG%ZeBI9!5AEL#yTx zK4sh07AU=*Z6Dl;c|unXWEJ%|kp6P{7bm^v$-w#Cw(t(zf1JAH73iZHy+=xyrWCGxID(2$KT3nL$@XrN!B6x*D|I z(1yq6oga3Sv)-fd49!Ze2RF%`GV8I3r%3VSP*y>)A3tM zc6IHdc%j44obv?8briRzhzhejV?xP#1DSn({LKdW^I?SI#d99*zGq8f&P(Xty8JoN zant&9REYdcQ=0;H$sD3JW!d)Nh0_5&3ZeHkcZaYSANh#$*|Jo<>g8r6TAJMT!$J13 z_HUL6)Yuj$wTDe~1B*Mtd?_Oiev|Ih9i)`BT!k$WYh~>z4{oZi{4%n4 zk|x;E8aaET$*|GQdT@tWD7}G3H4vEL;ChEy6NDJT0WL zIc->09eCGegG(=oB*x?6IObvVN`9JYgY_-@Sdmc7(aZNUkJ5>Y2kV7)5Ar^g`?nph zX2^D06!8e;2d=37OHJL(-8MW?nred=hz!%v%tT`H1ptpsB&pv?KkI_94I z;?Z9+1OE1U**vvyUUl-4VzeCGJ5K+uO&s=+m%KmvP;e#J(&r>2l=zWsQ~1taRz5Z< z*)eS$J6>FlMNUxka*)cunu@(Vu79yO3k2d1Y!JoQdnc-J4TOnI=3z0>EePi(mckkD zeo+@DK1@Ww^|%XO%!`cABgd&q3kcQ*M3PgaxMgR2Z`ny%gZ_WGK}G7^kQY9sy-9xC z8EXX!uaNV_=mGd_e62N<4fOl%z~elSF*5IcFz{_grocF|v05OOH-AhN`>Mt^Phob;FxS-3ropBj>+k;$BjaEu%PBp&k%Lb5eO(1f41n zCskIfgYt-7OrH57uibrtbNO~ExETtx6m3YWEUmP>1ijkIUY?kFWfWHmn(k zhbAw|UKl>G#BlM&t1_~1a`=2@fF9}jCz4Xtr!iN~yx84UPNW~c%{qW!F zc5mR2arb9cmMMs)kjbP z!AozHxwPYZw_T9!Jrq#pv}f6a>5_z*CK>FI&A9;mkv>X0hcrKGyJ|h*(-X%G`o-68 ziaSzC7kMO&+`(J;*)u24w^DcutGS*LklOR-BdID%eqS$GUuGoX*nu%)c>a;LCTH-j zk?(@)gc}L zwD(Zl`)%!29FNOV^m3OZ`dzBjA@cAat7}@pw~z<$4zrWy_`{VHXOWA2th1#GwyvsA zBSkCVe0`LbR@cbp+GWNOvz+$xlGx7bt8W>f0u~qbRF`h~Y7_#Tn17WY^Z_sW*q3|W z;gDh%hNq3qa8>;Cl7ZS{JJpl#V)OIJHXAiCT;r*rqbAg1>~m8qe+O3;A3@sY1@1Hd^5O(q zaFHSU1bzO??n$yMUIP_1PWuir8aa!MYO~^>Je#rSaNLS(-RLQ^a&d+lL8A1^Y|EJ7 zAr*d&*MAR`wXRc>HXeELeN$IK`4&=R90^x?Z3A(Pm@&!H=N95J#vY%T@O2=D-DuL- z%6zeJJZYFq#PKxpANh4$1R^VwMhShs&P!4y;#B#`u`yjj$xoI5;x?7#CB54B$a2vt zZPxlK;$ltwSR{n96C7NbChzfSx1@H`-n^9#Gp^lqB)sEP_7X0?nwP5lu)5ASlkYWq zE}B=F?Pe8?uE3K$@bdd-JOs0l%-v$JU7N1=e8dj5ipe}mX?HnC1Wf$)DXA>vd6UUt zEA&pG30B7K8QUbvj~C!x0PzgDO@cH(-u~5x{wmiC=_X~0st0ASgi!7hkCx?fo#r|k?ctVSGJ1nTW$0_5nQavlW%S$R#E|xcK z>+DcAl?m2zyx$k;w~`v_ddB!UGLollV88= z#MSqzVu13~;4AVo^%QNv1deOyUN+C@LovYiGM%ncI zA?Lqsk;|i`L81!>10-|-beOm07|0FGA3)!FoVocY?2bP7jlqGii+3wqeT`xz zXRLJ%`hgT9{Fn66C#jjKi?vi*_F>*Px2za%-M;r=t1;YR+BehR>@U^lO;M?9cOaCE zj;dEZnb1Ax0>b@OGh4zR+TFl?!4T^$!}j`1Sbzn*<~YUWz-=PTT|}Cw-SR9v;mlvX zN8As1GI2fjE$gSbdU%Tidw>amunS=68mbrTA5D z2zo^y3%iblGhIfWXLURT=%byDH1S)M{Qtp)DL3`ryX^cR+w=HV;&@Qj0{kpy?a>-I zzitEEDxK5mldPsv5^rA@cvd8=zadz2pgPsHfnX~O)VO@u6)>;b=SGR#LA{ za&CZixp_!^#;Q%+YR1q0$JxWfe+jWs@K&C}XV%&dSU0}%qk;k5d(5*{nvaD0U|KfA z2=l1`S;ZC(oIO(Sq63%72!asX;qKDd$?;Z5F7xh=-LV5PqbWOYVl>a*+)NL^dZ&CU;D?_366qH$@Ko)>1t9$U9W@}Pb$BwBmz6qV{Q zO9;Q5zL6xwg6^&Rz8-!S=l zG<-GINdxsaji%Zh-@XcqH17(IOc{S!R9IX(;|FxQ2trk9 zUC$oS(R|^yE`cequD&x8y5NJ&CW#Lpw0vQG`LGWoi@?u%Y!Xhf?_e_z?p`2d6fgFg z@~x9Vc?PzxBxp&tVL6L@Y6k@Ws{IT=|80u5(V&Y`)f6@!YKbf@it`O!?DM80-6pGq zeRTsx*~tD0LX5wqzgWpp+riHFK6AWCfa+#x%jn8=bQ7{AMD#F}2}vLMT3w%~S3N54 zWJz?L)ikNZ;7L%wpV&Wm$jqW%)(0QUh-MZ2y*w4ZqqIOI^dve<7iM78wRw2t`6%+& zAj0FYxnlE0RM%J$Cw29Pw(6gJvxuZ1-Wry{<;CwYI@kLB>~?mM&c#>30bdwtAm2Sn zi3+DxQ*pN0)<4|0uYXG^Y}a;Y&5;RVFzGuzJr%c{@OoU)G*)LiIj`x!F@aUWkZdoB zapd3nojxiuU+W4WzKb}4jma*RwLP~!Ljo_Gg^yAcwRNrXoI#xn#lyxVtq{OX?QhaTG6^hlDW!|5b82P;|MXh-P-S; zl3@Wn>O#wzR6KWU=Q!FCN;5p6ic@Ewk);aes(`$AeWa_Nd92;?eS6()syr1k%XGqQ zKX?24iNDW5wQW#<8yDk{qo_i^77Zq>@tsDIUNFa?vJ%4aHFR7cLd$QPX%>8Yuzjr- zqbjS<0Fw~a!9b&e)2L9ECM`78;K4C7Ie+5oe!5+WW1l6L1*TSH{prhIei>6Di~BG7ar1pfOcI|@zz>Pj~1 z#<|DZZA7-H12dz!Q`GlVuSOWLu%Z92y{`<5dh7b$0|=4>#z9FD6-6mYsR09&6cv#k z1C<^{I%WVBJc^1zhu#QCdkh$Q5EUiFBP}(8fOPl7yZ+wK^?rK4y@ zt-aRTJ@-C9`=6eSz9+GL?ws1|X~7$g&diId7#6i3DbL(zpF1=@V(oEByQlV<{13RO z;%S?4Q(Q?&v5)NMFohwfYX!?`kIE}c41UZ1r!NFwD-mGh~Z|mCQOg`MJFiKZ&uDy3}n^MbE3v0GIj@)y(O_%>XbEW^lz=U<+ z4XfaNR;~soHnMO6A-j;aAw^bYLs7aJ9zS%`@i(D9gUsSDr82U&IDNcd8aP$`@N0%| zi}FdwLEW;mnz!`!FuFDo7hOFJzHuk*9Chqu*V>UE@t&Nb?>?NeOksl+Ql-9j~o_xaYStPMA)#d-ZQ?{7CFAzg;cF zNcJSw&qmF5tGW6s7Wu_4TPP&=B>Tuz7W=M;Ui~4Pks<=+>?h(jnEwyoo8tPhz_leug~)f%)hNU4FjF_5i|trER(Z(D$)!QRHGfTG#b& zja(1LRdrwJ?fT`bC)8)k@-&Ytj&Cctbn1!NO&0$Lmt9`|aw)Bk?t1PNFYsS<(yIJ1 z8tOm&t~=;kfU247;`^}!mm^ocNqF_?|8peyaGz*$@!c`2ympT2nrwFQa0zI9b=;?? z8rdtoQozk|&M}-iZnzh@?OicRN_f*hxGM1d)s$kfM&;ux7J-A)Ere$8 zd;0cYLZG6vn&Oym;sSQ(j$okE>>^w!5yEMo`rVY%9|E- zo>-Hd_gD7O?ez5Y`qlYjw4@_QeO#7Q)kl_^YhGlbv&szVb8xUr;wdb%*+<0iTq&xT ztDbfKWvs;b%DA4$v%_LZE;o=^k-F|Y5bRl$tx-c9HB{82I$F*-oK+7`v7F2{e|E{c zsaQdo*N!LNmsV(=I^P|*sz|VZ@a}ranS4H0=HH2PQF*ok5yr_ezFk|=Mp9K99#oy4 zkssx1N%9j|&pOUKJb992J-a0GuA!qVy4pF*a#vKmr|hvV?{&3(MGu#Dzp;!dCQF7b z-I%c}7iBGdH*&4I6nm-t zHE((R9ec?;)RZ+x(A~Mh^GdLm9ljN2D1MvCEzjfGrNoPAqV#4bR`bu^_$r<10~xeP z>Aozda*16@<0CDbo{u$I=UBE~BskwocrR32R#)@#N!nnIa#;7t=e2vw@ZqN@#R{J- z!=2yt?Dz&xBOH8`WoR&-#%R;Mq!%!~NxhaMMO^N~vGLE%?w@0|_wzQrvD%#^f1~I} z7o6-^!Oz*89=}me?L4l+_x)YaCLjMLb8qG^J1+JcD=|&{Xi0XHte_9xQ@L<|V%>uy zGs$LZ`MWx*(snYJ$BHvP&FDMLSt;_GGzHH3KkF4q6%lWE`MCJWoc)dIi6Pxz>Ele? z1O;{l{=I`Hk`(cAy`{GKrYTNdG`_)+BP?*$QssSz#G|E9U+rj*i0ITI9k+hotPWLy z?`LFUmsG|z_I-FLStMCBXEQ7NTJoT6)#EcY>qhg7Kj!Aj?pS+8%0CU#6A~9qy56(n zOjKLZym!BqYK^mhcJz>~W`$1S!-ILD0`+;%g}yG?#LjxK{r)Moq7^pkOOpw9UDo@Y>^_C+$s@@JjD9cJ;_r& ztG+tpUahq39C8d1d0?Pa3}<`qe_t3R%k*r0=EI)Yy81Dmg%4cLoc{1;;d?xRz3s_k z@6A#{%NIm-y4ia&BsLXS#_u*y^$tp{HTRBYUo~2Ea1$pE&Ae&Zz;5EvHtD>)bN7n( z8?mz*nX0bkZSpROjB`Z;uk)9jYnnXlSp%0m`c;bJtG9g3xv`%nFnNEoMYPRb;=I3? z%sKCQ?S#gm&KTGFlKy{spBVa@nspaGr%Gqf`CYx_*5DgSo(~T?)cEmMnc>xfiWJLj zBjVi6KEcr@p$tt=weK%%2UcokmE@UL?)KX~GMpP0b9M zc-J$#oMxD8p-4!SlH$`AU3)Os&Socu1g-ji&3?`wF!#%A@_Iw|P@sQvK+FD#o2rK< zu15&5dB(beVm-Az>*w7yOsWgAOLLN9Y|Q1}Dzt>PyL=m#i*!?W^~>$H<3AD~II~|Z z|G3?Y`>mRWuZ1F<_r;h#Z+Mqq(e#E&xStgFeQvV&Yr0ySr+fbm(mKETb;%U#V$a|+ z{H|REldMyJ?F*g!krltcHE`Xc-@0JD#!_M9>e{0qg*eYq=?vHIAEB{MWYqlAs$%~Z z3J%7(t<){Vaye&4fi8dC9$nIW$h))V^|ovb=V7B7;yysyZ@2F}EK3$2XM*gsq0eTruK1wNMZ zW|T+eLdG$sxZ>dXkKP_rTV{-vLTz&GmkX9&>YOjVQns^32*7VAFl{q?7a64es$FIpspdWW58rXIzf6C12#&1;rZiCEOY}b*c|` z+%uWMeqGoR_t%}=u+sbE4Y@Y=+tZ6CYY*X{x`o{@=ChAvH$_&KNBJ$v4{m-jAzI_5 z0{d1D_ORj5%j0zBx-mraX?3NjQyy;1$&%_Pq)UbEI;ZaZ*UXAD%S3-|fW5WaCcw(F zUSof6ZiY~ccBjUh$ZV&9)Z4Rl6>5ET`dPMu4j!exy9egWdNhiLd?oJCxx#Z)&I?&6 zb-y*|JZAAG^W*u_%A^&m^g=GTuX{!t-qw&MjHDYKCd)k{b5l0`o_sCYp3&-7dz?>p z(o>*>ozb>%+&%SjSeR>CdGdvl-d9DBy;eh>gdf*Ta_P9yhwGT)URwPzY%OQbJny<| zPD%RTu@#LIb58M}7H)PPUR&6*U(8|$QZ&r)L8=@)ITVvOP7`Y-ep?P)Hy6&|0 z-R8U;aSMa=<~FW%_nK$PUfDE@dX68>g4OTxHGFylzm!ot4ax4=ZRd_%`X^lG2~y;l zW!AfL3n$>~Q~28SWn3SeXg(Uz>-3c?*6Ukqe5!I)cV^(Iw~NE>Z8vfcKGDf9$&WAeFD^J|{Y;$sX+ccM zYMXh_2+z&T{F7~RZLYRIs^ofq-}kH`%NK}E{@bHKR3D1-ojlc58rJJ|o^x(T?VZ&! z-L%Y~2F$^h0-Jc!WO-YR=A?h}G8{P&9ctS5n_X1B=o!So^*reqsIWxEaK(gNls%_@ zx!O)TV{Tg0UvTF3^1C4(DOEKYhemG63l>Adu zrTII2>3bk2`Z3Omsv$m{x_+x*tM{CQQfH$JF_?WUufw(csjji%_446$?i4rigt{#W z$whszc5a{FT2rif{H3wvXFf;v-u#NVMaMkL4v&!XO8=aZz0vVjc9NH$ZkP^Lh&fpN z^LSINqqpkghJ{Qgz2Fmli4m-lY(n8I4=M6%Hu<6yFC`T_9#|WKItIUtkjqQe=q*aD zDZZSs+Z^ig{JWe;o8R8eE8#KGsFf7W8B^K#zT|20g`NVvK# z7bd=yyTAV2Fd~8?yLtX@#jV)c<`mYns}&u$y`6>^OLQnc9_tnHMfVh~V(PorqR)6Q z*DrIA>9DxSmHlQRuEu@>%Qc?su~U9MziyW-C9zj>2#o3{D)?!3MsWYd1Oladu6-eR z?I@bK$&FH8?0Xilqag$>b2Yn2ZJnv9X2dWSoY{55tMW=(U77w>qcV<<5@F9RuT`#n zdsEGQ)%+j)8&6l&WIa7tc79#>`mFY|j!1*;A-B%PIyE%@&j`^CRv%k}2e(!^o1HF3ZJ*nmPq%S7z;#q6lu^OGr zlk`o;2thg6rka^++HsuTF=AE-kq-l;T^$Xse zr*W?~gI9c=fTypevd82xx9(K& zeLp6vAJsXu|JJ!DCICCJ)4Srh|FdvA`mHC2->yhWSE9IA?kC=C9L=<(p=v^1tLsMJ z>sm&V>5=-Q4_wq}OwsBC1lFA9FP_tugi0ow`uup`3fUA*z$T-Vx1%qXn4>>EYu>F- z%yrC-ijtM2$+Ltk?(pjIh!?4EQ@@<5bJWT7f9;+=B9ZrVtoYTOt>{z`u02lUj)s=~ zo|!k{e)FXsyyv1^G{Vb@OEWWnl&f|gXquRg?5-+3C0u>_+w{?Ycjm2|y_230{!rfC z=k-dVWao|ko}YPvf~H>26bE1bh&|w5Q+~W3{nPL(!q-UqrF%jIv&buGjl59bk@yWy z(+^NnM=AW2R2a-Yu6sezoX!cW+P;;<`q=Mj#LHkflO03#`L2%rzNnCJ;NNp%+)j(R z8Z~x-)xQ!sGBaNehuU6iqq{w9=jT3_;&f%ccjEJezJW#Ul=)##ABC+O`|_H~?uCv_ zy<=o?L$Q6nx*{X|qr6UF@$< z;pS3y+3r^c{A*c5?3}uiGO4PhQi8hD)dTw!I(S+&o=JG!&5FIk%1=!uu2hy3XvWH~ zlz6{gZ#`T5Z`Np{b3tw4`lF^Rnc-LM2i#U`s(OZ3n?#*rqfX=55(~{W`ZxkbukII_ zrV2*!p}8zA)OOE?3MK01WTS90Gir3!IqMUJ-05(5X1qb^7X-4&_CiyaGCQhm^YQux zCpEdLHSrp_XST{OTe>IOd@_wYvpgef{7S1*{9aN@%t~{TlY@MFW6pZH5%)@G(+NBa zPGLG+GgBk-Hg4HD2Y>8l8lIV}YT3 zbJd6R(%DjG%_GaaOE`&yjx25pKaR9p4IvSK?oRLd7ZKHIV!UZ%qH}pUvBaTSQ>HicG$ZbT|v86Vm? z$-UU8IbFK!FTh-T+g~Do`h%ydnEH!^Pmz8%j#}djS{e-*c`6Un)5*Il-tx{}ad?BL zM=P&N&)mC;(7hZHdei97BXBn`t?I%Yfxi7;gw&{dJK%R8_WMu@FQtCrL4Aljt&Ri1 zKGE7kVlxtuQ{uENE%-e_8DiA+U!x2DiYRTnAfg#~aIF{s?G;}C@-Ugcs?394-OANZ zlnOflRH|vu8a}|{9zw+ltmlC~LD)M{h-CAXmlZw&^SQ4$#efquwPoZyO`X08(fQ8! zRvn>rV>NfbFJM#L-@{cgd|Bj>K9MOQENimXGDjh=ETUX_mOE{ZpXLLi*Y}SL%WJK? z^JkE*rV+%@JNkA$YzLkx$-Wjdcn4{WW@tTP%E3B{m9d$+C{2plhC{khqtY(|PtiKE z33ge)NMXn32r@kg4yaJMbFpJOm)6RaAO}?l4)Ju{6G1ffXttJK5({2WhWFc*g4p5W z2AqgwK1_a*RlRzhg69Hy^Pnt_GzrxgcC~I)wiNg*3C%%iO}g{!QbhG@#GxKx>rgGd zkiCuk@PV}T0i^YUb$puOh3f{u_5MVqoDg%=vk`6u^g5X$N@N+|GsVg%9!%k-8UmVL zcXF!^=~e6p8;QNvwvO*nhBlU5TH~3#L(0R-5W#r+1mFq191DK^Cmn+AzXe3N!HOq~ zOz%sU8Ycfz#Q24_l~ABjTtzN=v0qv5-hN(N3JdnkC&c$z@E z3wTcKvkpBS_b*!BfDnBp#WGd;0T->{JQsp<3uNK+4>H%@-s41+iysaNks6@UOA_&r zk|L|-e*^5N{m0#ihO=sexrL~feoRHR9E!{ZkthfKEQmyF$2{T5tX-+*&2DZEM5$f4 zNtdRI0~kWvHg5m|=TYFo7`Tv7R<)wrzmJB-ykhIaTJRJc4xq^XCl~LsU1a7Yke3=j zVWPPaeF~;rwRX;XlwG?|>9|!6Xi}JS2~e&*lzabNg*z>{r5}GY5WuJPmPW@ba8Qo` z2y#0uwyj+JIR{0N*87r16gMINzoEDf%JM+!d41!~PKu5ZD8_rROVVEs%G2R?X+%<` zPD;O$gLXeO+Mv5dQ3TR)mB&rzYL9f(1r zrvMC!qspxGt1FQG)nlOBwAAVWwex;A3m5#`3=uWcu?HW$`h-z%6f~rK?F^JwoGi!6 z7(|^I*PU&pK*=vpU`g>)Dj~|JIR5(x4{25@w(M}`$6XZUmzA5ov4k76LVpj7a|w3s zA%~C6AS2rHaWtVWhW*3}S=hFQmq4JNuT-roHT4)KK>Pdd==5R^j-G=$-2uHuMH+M>Xw{ID&% zUlj4g9D>qSty4#ER5?hT;AlpE@SDjaBn`0WKET?ddz(erij41q=B3%|+7h#f(0e*$!RD=CXp}KPWoR-3 zWn}tM5-+^LAfm*%0?$EGjvNFA?;|Z<;F+ocjzF%Z7VDo;^uyFCX{~)2-`dxa-Vq?XV1bV6h3yx?hnKGJ01U&frrtKXTq~D?0`@}t6q_EiDizTVjNM^aWC99^)O#a3ig7DD;DV|X zSX0o8sGjpLDvDG`r4a^|*U<`bglRHKQ))AV^C||_9zFO#>K>-ELva*ttZu7Z?S4TD z#yC~7aRpBV3yHjb@PNj7)m~}o4~F@F3_VwAu=!M1(UyMkYeG`k0tliTnal0;@%{iE zi;{ehhxs630Z-Gw5)1YKLX_lr?ivEc5$hcqy0Mx5P^1H_jMacQ!Dbr}X>edM8r}{@ zREwS|Jnbo#uvmHf4gm5>RWDYvjW8GHGQtk(>23jkp{t)3!PewLg@1V5j5Td0L@}$n zgbStN0P7yHKb`u*S~;fnxr#TtnYaKU3?ugh0Z{2HelplB&SosBymhFu9>WY^FC6Ax z=-_4Hbd`*N73-ES4Od!fu{Jq2))4gAsBi-`X6pS#5O;aNevLFvnh&O-{)eqczMyG9 zWm{q-TaE*DfbT(5d>B{COJIv>z8AUR;@}zu91d+uiUch|h1;>J?*y3AFo$~%nDG+8 zD2ZBpbQ^%@GDg|*KNJe^fWQlo_%W;_%qv*ZJ#nwQ9pV|d%T;z<14?w;|CGd;*>?lh>rgpylk3H>F#fr24Q(Qte zreFHvs8i<;@iZq5hEbv%h{h^^xO;^S?!r=qcL$|XJ@u%g8D1JNS)aVH7JL+{?FU~= zb2{AyQ3D5N_a@T$Z6nzHz)Kw@3-;80o>Y{52^v9^Zqj2FL66Yd0+ncS&3it9c!I*5 zjXj_TFK{6t%q}iD>6Qi^fKsCHS>)utU4YWn1WrV&p%+sSMQ}cx`59F3hy2q z7wKezurMOs{d%jLfz#TFY3;*5l-l7$%qsks^fGKG=*zu2kkWk-U{mN+O7tC5kZXr) zRpW%9*E|pX+%+(Pkz3`s7+nkg&S0$dMc-c{qx+asl*q>xxd5m6L!x`uIkD^H5$PM8 zdzc^n$qBmD)%cjH_jgP^HYW{sx@PbcsEBH3&sjfct|-zH!J5klhV;M9C6@Es?pa?q zL-d=N-OYf@v=Buywc%iwG-%o5TEN{n664Okv11)>#>0-sBGMTu2!Y<&qkfr>MfeM8 zoyY9jOVU1wB(BLcD6l|bQ*@y(YMJC}JM+yLfZls}35PwfXW(cNfT^*o8=@-xndd+x zH|j@eq=gmxHp_^jnH>c>M>0{olsLpbjL_EMKOY`f%e@bQ|1%lxXJB2OhG~Rxj6Ej@ z?F8{N0ZmY_VjrvmTQ5U3n3aY_1msb-8$u~3-F=KZ@NW}Oi?{9(7LI6)3FhD#Un#M* zVt~IF08#1Jq&e3n8GJD>(GOG4D8FLs>*&H7!#buI12>MnzN$7uv6Vd z-%m0T{S(LxMeA;w5&&y9$!U9=0nMNrL1>9Csq)dQ4)}9Zm0&#cHZkETO&WPgfdUz5 zJmzpR!+U?ep6-fhlL5L+*7tEd!s2d3d^x5oO4Hp$PXpgkUwWWp%^BkOcC5U6qnB=| zZm|Zpc3#Rw9luP54vR`2KqmUhw*L{DvJcBCy z9_?8T-U$Y;79{$LQ;`Qz3iK0LPO>XJ6y`_J1S*FS2QnCO*fxd#Z*)if4-7X`M}LBu zvgp2bpkz@;6wwU9?xM6Bm|z}Wn0XGdTw>9DdenL~VFP9~NXnptlq+iL9J&co`iYo3 zPPr}jT3}gjhKIuWVHX9>+#6UdENVC?@E5w@wYso;b*(q}E?pW4i2|i^xP9OzC@m1%qn>B0zk>9?q@_W~MztS# z&Bc0<&?Sv5He+&7uxg8X-N;XJM)akWhU+ol>LJ9zn7TVqfqZ0XM{qE+VMnC!N}945qIH5=E<+Fx zF$9)e6$Y4eEz!#hJV;j#U?SpG#1Q4l9cCJI(JP>4K5&r?TH5B%2hm)|GAHuFd;Fn1I{msh26z0N_ z&=!AwBxI4)I(_l>Dm+#Jm+c}FeSm@HU2w}AX!_dmE(z>IFtbQ0hcOS52-hOebY7cn z*+`#Kc}zgWX-vV5Z{Fbu*ZC+6g*t(kM)!pUakK*M_)RM<-FWb-7-S- zIC6&VLis*2zj=^^45n2d5(7EHcHHBmjcSV)jso=%P?2qgE-_7x{v6eL3e6GXGPBdW z)?rZ~9KbM$vchSd5`Dce*NnrIgLDD94a)!9XG6ul9uwiHD^qQ3Gm~!+J);zm7xdt} z@f#Zjab^ { + const data = JSON.parse(event.data); + console.log('Received:', data); +}; +``` + +See the Swagger documentation for WebSocket event types and payloads. + +## CORS Configuration + +The API supports CORS for cross-origin requests. Configure allowed origins via the `FRONTEND_URL` environment variable. + +## API Versioning + +Current API version: **v1** + +All endpoints are prefixed with `/api/v1/` + +Example: `http://localhost:3001/api/v1/movies` + +## Example Requests + +### Get All Movies + +```bash +curl http://localhost:3001/api/v1/movies +``` + +### Get Movie by ID + +```bash +curl http://localhost:3001/api/v1/movies/{movieId} +``` + +### Get TV Shows + +```bash +curl http://localhost:3001/api/v1/tvshows +``` + +For complete endpoint documentation with all parameters, request/response schemas, and interactive testing, visit the **[Swagger Documentation](http://localhost:3001/api/docs)** when your API server is running. + +## Client Libraries + +Currently, the DesterLib Flutter app uses the API directly. If you're building your own client: + +1. Use the Swagger/OpenAPI spec to generate client libraries +2. Export the spec: Visit `http://localhost:3001/api/docs.json` +3. Use tools like [OpenAPI Generator](https://openapi-generator.tech/) to create clients in your language + +## Need Help? + +- πŸ› [Report API Issues](https://github.com/DesterLib/desterlib/issues) +- πŸ’¬ [Ask Questions](https://github.com/DesterLib/desterlib/discussions) +- πŸ“– [View API Source](https://github.com/DesterLib/desterlib/tree/main/apps/api/src) + diff --git a/apps/docs/src/content/docs/development/commit-guidelines.md b/apps/docs/src/content/docs/development/commit-guidelines.md new file mode 100644 index 0000000..c5942fa --- /dev/null +++ b/apps/docs/src/content/docs/development/commit-guidelines.md @@ -0,0 +1,243 @@ +--- +title: Commit Guidelines +description: Conventional commit guidelines for DesterLib +--- + +This project uses [Conventional Commits](https://www.conventionalcommits.org/) for consistent commit messages. + +## Making Commits + +Use the interactive commit tool: + +```bash +pnpm commit +``` + +This will guide you through creating a properly formatted commit message. + +## Commit Message Format + +``` +(): + +[optional body] + +[optional footer] +``` + +### Type + +The type must be one of the following: + +| Type | Description | Example | +|------|-------------|---------| +| `feat` | ✨ A new feature | `feat(api): add user search endpoint` | +| `fix` | πŸ› A bug fix | `fix(auth): resolve JWT validation error` | +| `docs` | πŸ“ Documentation changes | `docs: update installation guide` | +| `style` | πŸ’„ Code style changes | `style(api): format with prettier` | +| `refactor` | ♻️ Code refactoring | `refactor(db): simplify query logic` | +| `perf` | ⚑ Performance improvements | `perf(stream): optimize video buffering` | +| `test` | βœ… Adding or updating tests | `test(api): add auth integration tests` | +| `build` | πŸ“¦ Build system changes | `build: update dependencies` | +| `ci` | πŸ‘· CI/CD changes | `ci: add automated release workflow` | +| `chore` | πŸ”§ Other changes | `chore: update gitignore` | +| `revert` | βͺ Revert a commit | `revert: revert "feat: add feature"` | + +### Scope + +The scope is optional and represents the area of the codebase affected: + +**Available scopes:** +- `api` - Backend API +- `database` - Database changes +- `websocket` - WebSocket functionality +- `stream` - Streaming features +- `library` - Library management +- `movies` - Movie-related features +- `tvshows` - TV show features +- `scan` - Media scanning +- `settings` - Settings functionality +- `auth` - Authentication +- `middleware` - Middleware +- `config` - Configuration +- `deps` - Dependencies +- `docker` - Docker configuration +- `ci` - CI/CD +- `docs` - Documentation +- `release` - Release management + +You can also use custom scopes when needed. + +### Subject + +The subject contains a succinct description of the change: + +- Use the imperative, present tense: "change" not "changed" nor "changes" +- Don't capitalize the first letter +- No period (.) at the end +- Keep it under 100 characters + +**Good examples:** +``` +add user authentication +fix memory leak in stream handler +update API documentation +``` + +**Bad examples:** +``` +Added user authentication (past tense) +Fix Memory Leak (capitalized) +updated API documentation. (period at end) +``` + +### Body + +The body is optional and should include: +- Motivation for the change +- Contrast with previous behavior +- Implementation details (if complex) + +Use `|` to break lines in the interactive commit tool. + +### Footer + +The footer is optional and should include: +- Breaking changes (prefixed with `BREAKING CHANGE:`) +- Issue references (e.g., `Closes #123`) + +## Breaking Changes + +Breaking changes must be indicated in two ways: + +1. Add `!` after the type/scope: + ``` + feat(api)!: redesign authentication API + ``` + +2. Add `BREAKING CHANGE:` in the footer: + ``` + feat(api)!: redesign authentication API + + Replace REST authentication with OAuth2 flow + + BREAKING CHANGE: The /auth/login endpoint has been removed. + Use OAuth2 flow instead. See migration guide for details. + ``` + +## Examples + +### Feature Addition + +``` +feat(api): add user search endpoint + +Implement search functionality for users with filters: +- Search by username +- Search by email +- Pagination support + +Closes #42 +``` + +### Bug Fix + +``` +fix(auth): resolve JWT validation error + +Fix issue where expired tokens were not properly rejected, +causing 401 errors on valid requests. + +Fixes #123 +``` + +### Breaking Change + +``` +feat(api)!: redesign authentication API + +Replace REST authentication endpoints with OAuth2 flow +for improved security and standards compliance. + +BREAKING CHANGE: The following endpoints have been removed: +- POST /auth/login +- POST /auth/register + +Use the new OAuth2 flow instead. See docs/migration.md for +migration guide. + +Closes #56 +``` + +### Documentation Update + +``` +docs: update versioning guide + +Add examples for breaking changes and clarify +when to create changesets. +``` + +### Performance Improvement + +``` +perf(stream): optimize video buffering + +Reduce initial buffering time by 50% through: +- Implement adaptive bitrate streaming +- Optimize chunk size +- Add memory caching layer +``` + +### Refactoring + +``` +refactor(database): simplify query logic + +Extract common query patterns into reusable functions +to reduce code duplication and improve maintainability. +``` + +### Multiple Changes + +If you have multiple logical changes, make separate commits: + +```bash +# Commit 1 +git add src/auth/ +pnpm commit +# feat(auth): add OAuth2 support + +# Commit 2 +git add src/api/ +pnpm commit +# docs(api): update authentication examples +``` + +## Commit Message Validation + +Commits are automatically validated using commitlint. If your commit message doesn't follow the convention, you'll see an error: + +``` +β§— input: Added new feature +βœ– subject may not be empty [subject-empty] +βœ– type may not be empty [type-empty] +``` + +## Best Practices + +1. **Atomic commits** - One logical change per commit +2. **Clear subjects** - Describe what changed, not how +3. **Add context** - Use the body for complex changes +4. **Reference issues** - Link to relevant issues +5. **Break changes properly** - Always document breaking changes +6. **Test before committing** - Ensure tests pass +7. **Use the interactive tool** - `pnpm commit` helps you follow the format + +## Resources + +- [Conventional Commits Specification](https://www.conventionalcommits.org/) +- [Commitizen](https://github.com/commitizen/cz-cli) +- [Commitlint](https://commitlint.js.org/) +- [Versioning Guide](/development/versioning/) + diff --git a/apps/docs/src/content/docs/development/contributing.md b/apps/docs/src/content/docs/development/contributing.md new file mode 100644 index 0000000..b57e496 --- /dev/null +++ b/apps/docs/src/content/docs/development/contributing.md @@ -0,0 +1,370 @@ +--- +title: Contributing Guide +description: How to contribute to DesterLib - for community members and external contributors +--- + +Thank you for your interest in contributing to DesterLib! This guide will help you get started with contributing to the project. + +## 🎯 Quick Start + +New to DesterLib? Here's the fastest way to start contributing: + +1. **Fork** the repository on GitHub +2. **Clone** your fork locally +3. **Create a branch** for your changes +4. **Make your changes** and commit with `pnpm commit` +5. **Add a changeset** with `pnpm changeset` (if needed) +6. **Push** to your fork and create a **Pull Request** + +:::tip[First Time Contributing?] +Check out our [CONTRIBUTING.md](https://github.com/DesterLib/desterlib/blob/dev/CONTRIBUTING.md) for detailed step-by-step instructions! +::: + +## πŸš€ For Community Contributors + +If you don't have write access to the repository, follow the **fork workflow**: + +### 1. Fork & Clone + +```bash +# Fork the repo on GitHub, then: +git clone https://github.com/YOUR-USERNAME/desterlib.git +cd desterlib + +# Add upstream remote +git remote add upstream https://github.com/DesterLib/desterlib.git +``` + +### 2. Sync with Upstream + +Before starting new work, always sync: + +```bash +git fetch upstream +git checkout dev +git merge upstream/dev +git push origin dev +``` + +### 3. Create Feature Branch + +```bash +# Create branch from dev +git checkout dev +git checkout -b feat/your-feature-name +``` + +### 4. Make Changes & Commit + +```bash +# Make your changes, then: +pnpm commit +# Follow the interactive prompts +``` + +### 5. Add Changeset (if needed) + +For user-facing changes: + +```bash +pnpm changeset +# Select packages and bump type +# Write a clear summary +git add .changeset/ +git commit -m "chore: add changeset" +``` + +### 6. Push to Your Fork + +```bash +git push origin feat/your-feature-name +``` + +### 7. Create Pull Request + +1. Go to the [DesterLib repository](https://github.com/DesterLib/desterlib) +2. Click "Pull requests" β†’ "New pull request" +3. Click "compare across forks" +4. Select: + - **base:** `DesterLib/desterlib` / `dev` + - **head:** `YOUR-USERNAME/desterlib` / `feat/your-feature-name` +5. Fill out the PR template +6. Submit! + +## πŸ‘₯ For Core Team Members + +If you have write access to the repository: + +### Workflow + +```bash +# Clone the repo +git clone https://github.com/DesterLib/desterlib.git +cd desterlib + +# Create feature branch from dev +git checkout dev +git pull origin dev +git checkout -b feat/your-feature-name + +# Make changes, commit, add changeset +pnpm commit +pnpm changeset + +# Push to origin +git push -u origin feat/your-feature-name + +# Create PR to dev +``` + +See the [Versioning Guide](/development/versioning/) for complete workflow. + +## πŸ” Finding Issues to Work On + +### Good First Issues + +Look for issues labeled: +- `good first issue` - Perfect for newcomers +- `help wanted` - Community help needed +- `documentation` - Improve docs + +### Before Starting Work + +1. **Comment on the issue** to let maintainers know you're interested +2. **Wait for approval** before starting work +3. **Ask questions** if anything is unclear + +Don't see an issue you want? Create one! + +## πŸ“‹ Contribution Types + +### Code Contributions + +- ✨ **New features** - Add functionality +- πŸ› **Bug fixes** - Fix issues +- ⚑ **Performance** - Optimize code +- ♻️ **Refactoring** - Improve code quality + +**Requirements:** +- Follow code style guidelines +- Add tests if possible +- Update documentation +- Create a changeset + +### Documentation Contributions + +- πŸ“ **Improve docs** - Fix typos, clarify content +- πŸ“– **Add examples** - Show how to use features +- πŸŽ“ **Tutorials** - Create guides +- 🌍 **Translations** - Help internationalize + +**Requirements:** +- Clear and concise writing +- Accurate information +- Proper formatting +- No changeset needed for docs-only + +### Testing Contributions + +- βœ… **Add tests** - Increase coverage +- πŸ§ͺ **Improve tests** - Better assertions +- πŸ”§ **Fix flaky tests** - Improve reliability + +**Requirements:** +- Tests pass locally +- Follow existing test patterns + +### Design Contributions + +- 🎨 **UI improvements** - Better user interface +- πŸ’„ **Style updates** - Visual enhancements +- πŸ–ΌοΈ **Assets** - Icons, images, etc. + +**Requirements:** +- Match existing design language +- Responsive design +- Accessibility considerations + +## βœ… Pull Request Checklist + +Before submitting your PR, verify: + +- [ ] Code follows project style (`pnpm lint`) +- [ ] Type checking passes (`pnpm check-types`) +- [ ] Build succeeds (`pnpm build`) +- [ ] Commits follow conventional format (`pnpm commit`) +- [ ] Changeset added (if user-facing changes) +- [ ] Documentation updated (if needed) +- [ ] PR template filled out completely +- [ ] Tests pass (when available) +- [ ] No merge conflicts with `dev` + +## πŸ“ Commit Message Format + +We use [Conventional Commits](https://www.conventionalcommits.org/): + +``` +(): + +[optional body] + +[optional footer] +``` + +### Examples + +```bash +feat(api): add user search endpoint +fix(stream): resolve buffering on Safari +docs: update contributing guide +refactor(database): simplify queries +perf(api): optimize video encoding +``` + +### Using the Interactive Tool + +```bash +pnpm commit +# Follow the prompts - it's easy! +``` + +See [Commit Guidelines](/development/commit-guidelines/) for details. + +## πŸ¦‹ When to Add a Changeset + +### βœ… Add Changeset For: + +- New features (minor bump) +- Bug fixes (patch bump) +- Breaking changes (major bump) +- Performance improvements (patch/minor) +- Dependency updates affecting users (patch) + +### ❌ Skip Changeset For: + +- Documentation changes +- Internal refactoring (no API changes) +- Test additions/updates +- CI/CD changes +- Code style/formatting + +### Creating a Changeset + +```bash +pnpm changeset + +# Select packages: Usually 'api' +# Choose bump type: +# - patch (0.0.X) for bug fixes +# - minor (0.X.0) for features +# - major (X.0.0) for breaking changes +# Write clear summary (becomes changelog) +``` + +See [Versioning Guide](/development/versioning/) for more. + +## πŸ”„ PR Review Process + +### 1. Automated Checks + +GitHub Actions will automatically: +- Validate changesets +- Run linters +- Check types +- Verify builds + +### 2. Code Review + +Maintainers will: +- Review your code +- Provide feedback +- Request changes (if needed) +- Approve when ready + +### 3. Address Feedback + +Make requested changes: + +```bash +# Make changes locally +git add . +pnpm commit +git push origin feat/your-feature-name +# PR updates automatically +``` + +### 4. Merge + +Once approved: +- Maintainer merges to `dev` +- Your contribution is part of DesterLib! +- Celebrate! πŸŽ‰ + +## 🌟 After Your PR is Merged + +### Update Your Fork + +```bash +git checkout dev +git pull upstream dev +git push origin dev +``` + +### Clean Up + +```bash +# Delete local branch +git branch -d feat/your-feature-name + +# Delete remote branch +git push origin --delete feat/your-feature-name +``` + +## πŸ“š Additional Resources + +- [Commit Guidelines](/development/commit-guidelines/) - Commit message format +- [Versioning Guide](/development/versioning/) - Changesets and releases +- [Quick Reference](/development/quick-reference/) - Common commands +- [Project Structure](/development/structure/) - Codebase organization + +## πŸ’¬ Getting Help + +Need assistance? + +- πŸ’­ [GitHub Discussions](https://github.com/DesterLib/desterlib/discussions) - Ask questions +- πŸ› [GitHub Issues](https://github.com/DesterLib/desterlib/issues) - Report bugs +- πŸ“– [Full Contributing Guide](https://github.com/DesterLib/desterlib/blob/dev/CONTRIBUTING.md) - Detailed instructions + +## πŸŽ‰ Recognition + +All contributors are recognized in: +- Project README +- Release notes +- GitHub contributors page + +Thank you for helping make DesterLib better! ❀️ + +## Code of Conduct + +We are committed to providing a welcoming and inclusive community. Be respectful, patient, and considerate of others. + +**Expected behavior:** +- Be welcoming and inclusive +- Be respectful of differing viewpoints +- Accept constructive criticism gracefully +- Focus on what's best for the community + +**Unacceptable behavior:** +- Harassment or discriminatory language +- Personal attacks or insults +- Publishing others' private information +- Other unprofessional conduct + +Violations may result in temporary or permanent ban from the project. + +## License + +By contributing, you agree that your contributions will be licensed under the GNU Affero General Public License v3.0 (AGPL-3.0). + +This ensures DesterLib remains free and open source, with all derivatives also remaining open source. + diff --git a/apps/docs/src/content/docs/development/quick-reference.md b/apps/docs/src/content/docs/development/quick-reference.md new file mode 100644 index 0000000..74ed138 --- /dev/null +++ b/apps/docs/src/content/docs/development/quick-reference.md @@ -0,0 +1,189 @@ +--- +title: Quick Reference +description: Quick reference guide for changesets and versioning +--- + +A quick reference guide for common versioning tasks with Changesets. + +## Quick Commands + +```bash +# Add a changeset for your changes +pnpm changeset + +# Check what will be versioned +pnpm changeset:status + +# Apply version bumps (maintainers only) +pnpm version + +# Build and publish (maintainers only) +pnpm release +``` + +## When to Use Each Bump Type + +### Patch (0.0.X) - Bug Fixes + +- πŸ› Bug fixes +- πŸ“ Documentation +- 🎨 Style/formatting +- ♻️ Refactoring (no API change) +- ⚑ Performance (no breaking change) + +**Example:** +``` +πŸ¦‹ Summary: Fix authentication token expiry bug +πŸ¦‹ Bump: patch +``` + +### Minor (0.X.0) - New Features + +- ✨ New features +- πŸ”₯ Deprecations +- πŸš€ Enhancements +- πŸ“¦ New optional parameters + +**Example:** +``` +πŸ¦‹ Summary: Add user profile image upload endpoint +πŸ¦‹ Bump: minor +``` + +### Major (X.0.0) - Breaking Changes + +- πŸ’₯ Breaking API changes +- ❌ Removed features +- πŸ”„ Changed behavior +- ⚠️ Required parameter changes + +**Example:** +``` +πŸ¦‹ Summary: Replace REST auth with OAuth2 (BREAKING) +πŸ¦‹ Bump: major +``` + +## Changeset Flow + +``` +Make Changes β†’ Create Changeset β†’ Commit & Push β†’ Create PR to dev + β†’ Review & Merge β†’ Version Bump β†’ Merge to main β†’ Auto Release +``` + +## Example Changeset File + +```markdown +--- +"api": minor +--- + +Add WebSocket support for real-time notifications + +- New `/ws` endpoint for WebSocket connections +- Real-time event streaming +- Connection management utilities +``` + +## Commit Message Examples + +Using `pnpm commit`: + +```bash +# Feature +feat(api): add user search endpoint + +# Bug fix +fix(api): resolve JWT validation error + +# Breaking change +feat(api)!: redesign authentication API + +BREAKING CHANGE: Replace /auth/login with OAuth2 +``` + +## PR Workflow + +1. **Create feature branch from `dev`** + ```bash + git checkout dev && git pull + git checkout -b feat/my-feature + ``` + +2. **Make changes and commit** + ```bash + git add . + pnpm commit + ``` + +3. **Add changeset** + ```bash + pnpm changeset + git add .changeset + git commit -m "chore: add changeset" + ``` + +4. **Push and create PR** + ```bash + git push -u origin feat/my-feature + ``` + +5. **After merge to dev β†’ version bump** + ```bash + pnpm version + git commit -am "chore: version packages" + ``` + +6. **Merge to main β†’ auto-release** + +## Tips + +### βœ… DO + +- Create changesets for user-facing changes +- Write clear, descriptive summaries +- One changeset per logical change +- Review generated CHANGELOGs + +### ❌ DON'T + +- Skip changesets for features/fixes +- Bundle multiple features in one changeset +- Forget to commit the changeset file +- Edit CHANGELOGs manually + +## Common Tasks + +### Check Pending Changes + +```bash +pnpm changeset:status +``` + +### Add Changeset for Multiple Packages + +```bash +pnpm changeset +# Select multiple packages when prompted +``` + +### View Changesets + +```bash +ls .changeset/*.md +cat .changeset/some-changeset.md +``` + +### Undo a Changeset + +Simply delete the changeset file: +```bash +rm .changeset/some-changeset.md +``` + +## Need Help? + +- πŸ“– [Full Versioning Guide](/development/versioning/) +- πŸ“š [Commit Guidelines](/development/commit-guidelines/) +- πŸ”— [Changesets Docs](https://github.com/changesets/changesets) +- πŸ”— [Semantic Versioning](https://semver.org/) + diff --git a/apps/docs/src/content/docs/development/structure.md b/apps/docs/src/content/docs/development/structure.md new file mode 100644 index 0000000..bbec4f3 --- /dev/null +++ b/apps/docs/src/content/docs/development/structure.md @@ -0,0 +1,248 @@ +--- +title: Project Structure +description: Understanding the DesterLib codebase organization +--- + +This guide explains how the DesterLib codebase is organized across the monorepo. + +## Repository Overview + +DesterLib is organized as a **pnpm monorepo** with multiple workspaces: + +``` +desterlib/ +β”œβ”€β”€ apps/ +β”‚ β”œβ”€β”€ api/ # Backend API (Express + TypeScript) +β”‚ └── docs/ # Documentation site (Starlight) +β”œβ”€β”€ packages/ +β”‚ β”œβ”€β”€ eslint-config/ # Shared ESLint configuration +β”‚ └── typescript-config/ # Shared TypeScript configuration +β”œβ”€β”€ .changeset/ # Changeset files for versioning +β”œβ”€β”€ .github/ # GitHub Actions workflows +└── ... (config files) +``` + +## Backend API Structure + +Location: `apps/api/` + +``` +apps/api/ +β”œβ”€β”€ src/ +β”‚ β”œβ”€β”€ domains/ # Feature domains (business logic) +β”‚ β”‚ β”œβ”€β”€ movies/ # Movie management +β”‚ β”‚ β”œβ”€β”€ tvshows/ # TV show management +β”‚ β”‚ β”œβ”€β”€ library/ # Library management +β”‚ β”‚ β”œβ”€β”€ stream/ # Streaming functionality +β”‚ β”‚ β”œβ”€β”€ scan/ # Media scanning +β”‚ β”‚ └── settings/ # Settings management +β”‚ β”œβ”€β”€ lib/ # Shared libraries and utilities +β”‚ β”‚ β”œβ”€β”€ database/ # Database client (Prisma) +β”‚ β”‚ β”œβ”€β”€ middleware/ # Express middleware +β”‚ β”‚ β”œβ”€β”€ services/ # Shared services +β”‚ β”‚ β”œβ”€β”€ utils/ # Utility functions +β”‚ β”‚ └── websocket/ # WebSocket server +β”‚ β”œβ”€β”€ core/ # Core configuration +β”‚ β”‚ β”œβ”€β”€ config/ # App configuration +β”‚ β”‚ └── services/ # Core services +β”‚ β”œβ”€β”€ routes/ # API route definitions +β”‚ β”‚ └── v1/ # API v1 routes +β”‚ └── index.ts # Application entry point +β”œβ”€β”€ prisma/ +β”‚ └── schema.prisma # Database schema +β”œβ”€β”€ dist/ # Compiled JavaScript output +└── package.json +``` + +### Key Concepts + +#### Domains + +Domains represent distinct features or business areas: + +- **movies/** - Movie catalog, metadata, CRUD operations +- **tvshows/** - TV show management, seasons, episodes +- **library/** - Overall library organization +- **stream/** - Video streaming logic +- **scan/** - File system scanning and indexing +- **settings/** - User and system settings + +Each domain typically contains: +- Controllers (route handlers) +- Services (business logic) +- Models/Types (data structures) +- Utilities (domain-specific helpers) + +#### Libraries + +The `lib/` directory contains code shared across domains: + +- **database/** - Prisma client and database utilities +- **middleware/** - Express middleware (auth, error handling, etc.) +- **services/** - Cross-cutting services (logging, caching, etc.) +- **utils/** - General-purpose utilities +- **websocket/** - WebSocket server implementation + +#### Core + +The `core/` directory contains: +- Application configuration +- Service initialization +- Dependency injection setup + +## Documentation Site + +Location: `apps/docs/` + +``` +apps/docs/ +β”œβ”€β”€ src/ +β”‚ β”œβ”€β”€ content/ +β”‚ β”‚ └── docs/ # Documentation pages +β”‚ β”‚ β”œβ”€β”€ getting-started/ +β”‚ β”‚ β”œβ”€β”€ development/ +β”‚ β”‚ β”œβ”€β”€ api/ +β”‚ β”‚ └── deployment/ +β”‚ β”œβ”€β”€ assets/ # Images and static assets +β”‚ └── styles/ # Custom CSS +β”œβ”€β”€ public/ # Public static files +β”œβ”€β”€ astro.config.mjs # Astro configuration +└── package.json +``` + +## Shared Packages + +### ESLint Config + +Location: `packages/eslint-config/` + +Provides shared ESLint configurations: +- `base.js` - Base rules for all projects +- `next.js` - Next.js specific rules +- `react-internal.js` - React component rules + +### TypeScript Config + +Location: `packages/typescript-config/` + +Provides shared TypeScript configurations: +- `base.json` - Base TypeScript config +- `nextjs.json` - Next.js specific config +- `react-library.json` - React library config + +## Database Schema + +Location: `apps/api/prisma/schema.prisma` + +The database uses PostgreSQL with Prisma ORM: + +```prisma +// Example models +model Movie { + id String @id @default(uuid()) + title String + year Int? + path String @unique + metadata Json? + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt +} + +model TVShow { + id String @id @default(uuid()) + title String + year Int? + seasons Season[] + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt +} +``` + +## Configuration Files + +### Root Level + +- `package.json` - Root workspace configuration +- `pnpm-workspace.yaml` - Workspace definitions +- `turbo.json` - Turbo build configuration +- `.cz-config.js` - Commitizen configuration +- `commitlint.config.js` - Commit linting rules + +### Changesets + +- `.changeset/config.json` - Changesets configuration +- `.changeset/*.md` - Individual changeset files + +### GitHub Actions + +- `.github/workflows/release.yml` - Automated releases +- `.github/workflows/version-pr.yml` - Version PR automation +- `.github/workflows/changeset-check.yml` - PR changeset validation + +## Development Workflow + +### Adding a New Feature + +1. **Choose the right location:** + - Domain-specific? β†’ `apps/api/src/domains/{domain}/` + - Shared utility? β†’ `apps/api/src/lib/utils/` + - API route? β†’ `apps/api/src/routes/v1/` + +2. **Follow the pattern:** + - Controller handles HTTP requests + - Service contains business logic + - Utilities are pure functions + +3. **Update documentation:** + - Add/update relevant docs in `apps/docs/` + +### File Naming Conventions + +- **Controllers:** `{feature}.controller.ts` +- **Services:** `{feature}.service.ts` +- **Utilities:** `{feature}.util.ts` +- **Types:** `{feature}.types.ts` +- **Tests:** `{feature}.test.ts` + +### Import Paths + +Use TypeScript path aliases (configured in `tsconfig.json`): + +```typescript +// Instead of: +import { db } from '../../../lib/database/client'; + +// Use: +import { db } from '@/lib/database/client'; +``` + +## Build System + +The project uses **Turbo** for orchestrating builds across the monorepo: + +```bash +# Build all packages +pnpm build + +# Build specific package +pnpm --filter api build +pnpm --filter docs build + +# Development mode +pnpm dev +``` + +## Testing Strategy + +(To be implemented) + +- Unit tests for utilities and services +- Integration tests for API endpoints +- E2E tests for critical workflows + +## Next Steps + +- [Versioning Guide](/development/versioning/) - Learn how to contribute +- [Quick Reference](/development/quick-reference/) - Common commands +- [Commit Guidelines](/development/commit-guidelines/) - Commit message format + diff --git a/apps/docs/src/content/docs/development/versioning.md b/apps/docs/src/content/docs/development/versioning.md new file mode 100644 index 0000000..af252fc --- /dev/null +++ b/apps/docs/src/content/docs/development/versioning.md @@ -0,0 +1,334 @@ +--- +title: Versioning Guide +description: How to track changes and manage releases with Changesets +--- + +This project uses [Changesets](https://github.com/changesets/changesets) for version management and changelog generation. + +## Overview + +We use **Changesets** to: +- Track changes across our monorepo packages +- Generate changelogs automatically +- Version packages based on changes +- Simplify the release process + +Each significant change should have an associated changeset file that describes what changed and the impact level (patch, minor, or major). + +## Branching Strategy + +- **main** - Production-ready code, tagged releases +- **dev** - Development branch, all features merge here first +- **feat/** - Feature branches created from `dev` +- **fix/** - Bug fix branches created from `dev` +- **chore/** - Maintenance branches created from `dev` + +## Making Changes + +### 1. Create a feature branch + +```bash +git checkout dev +git pull origin dev +git checkout -b feat/your-feature-name +``` + +### 2. Make your changes + +Write your code, tests, and documentation. + +### 3. Commit using conventional commits + +```bash +pnpm commit +``` + +This will guide you through creating a properly formatted commit message. + +### 4. Create a changeset + +See the [Creating a Changeset](#creating-a-changeset) section below. + +## Creating a Changeset + +After making changes that affect users, create a changeset: + +```bash +pnpm changeset +``` + +Or: +```bash +pnpm changeset:add +``` + +This will prompt you to: +1. **Select packages** that were changed +2. **Choose bump type** (patch, minor, or major) for each package +3. **Write a summary** of the changes (this will appear in the changelog) + +### Example Changeset Flow + +```bash +$ pnpm changeset + +πŸ¦‹ Which packages would you like to include? +β—‰ api +β—― @repo/eslint-config +β—― @repo/typescript-config + +πŸ¦‹ Which packages should have a major bump? +β—― api + +πŸ¦‹ Which packages should have a minor bump? +β—‰ api + +πŸ¦‹ Please enter a summary for this change: +Add WebSocket support for real-time notifications + +βœ” Changeset added! - see .changeset/random-words-here.md +``` + +### When to Create Changesets + +**Create a changeset for:** +- βœ… New features +- βœ… Bug fixes +- βœ… Breaking changes +- βœ… Performance improvements +- βœ… Dependency updates that affect users + +**Skip changesets for:** +- ❌ Documentation updates +- ❌ Internal refactoring (no API changes) +- ❌ Test additions/updates +- ❌ CI/CD changes + +## Version Bump Types + +Follow [Semantic Versioning](https://semver.org/) (SemVer): + +### Patch (0.0.X) + +Bug fixes and minor changes that don't affect the API: +- Bug fixes +- Documentation updates +- Internal refactoring +- Performance improvements (non-breaking) + +**Example:** `1.2.3` β†’ `1.2.4` + +### Minor (0.X.0) + +New features that are backward-compatible: +- New features +- New API endpoints +- New optional parameters +- Deprecations (with backward compatibility) + +**Example:** `1.2.3` β†’ `1.3.0` + +### Major (X.0.0) + +Breaking changes that require users to modify their code: +- Breaking API changes +- Removed features +- Changed behavior of existing features +- Required parameter changes + +**Example:** `1.2.3` β†’ `2.0.0` + +## Versioning Packages + +When you're ready to create a new version: + +### 1. Check changeset status + +```bash +pnpm changeset:status +``` + +### 2. Apply version bumps + +```bash +pnpm version +``` + +This command will: +- Read all changeset files in `.changeset/` +- Bump package versions according to semantic versioning +- Update `CHANGELOG.md` files +- Delete consumed changeset files +- Update lockfile + +### 3. Review the changes + +- Check updated `package.json` files +- Review generated `CHANGELOG.md` entries +- Verify version numbers are correct + +### 4. Commit version changes + +```bash +git add . +git commit -m "chore: version packages" +git push +``` + +## Publishing Releases + +### Manual Release + +1. Merge to main: + ```bash + git checkout main + git merge dev + ``` + +2. Build and publish: + ```bash + pnpm release + ``` + +3. Push with tags: + ```bash + git push --follow-tags + ``` + +### Automated Release (Recommended) + +GitHub Actions automatically handles releases: + +1. Merge PR to `main` that contains version bump commits +2. GitHub Action automatically: + - Builds packages + - Publishes to npm (if configured) + - Creates GitHub releases + - Tags commits + +## Workflow Examples + +### Example 1: Adding a Feature + +```bash +# 1. Create feature branch +git checkout dev +git pull origin dev +git checkout -b feat/add-user-search + +# 2. Make changes +# ... code changes ... + +# 3. Commit changes +git add . +pnpm commit +# Select: feat +# Scope: api +# Description: add user search endpoint + +# 4. Create changeset +pnpm changeset +# Select: api +# Bump: minor +# Summary: Add user search endpoint with filters + +# 5. Commit changeset +git add . +git commit -m "chore: add changeset for user search" + +# 6. Push and create PR +git push -u origin feat/add-user-search +``` + +### Example 2: Fixing a Bug + +```bash +# 1. Create fix branch +git checkout dev +git pull origin dev +git checkout -b fix/authentication-error + +# 2. Fix the bug +# ... code changes ... + +# 3. Commit fix +git add . +pnpm commit +# Select: fix +# Scope: api +# Description: resolve JWT token validation error + +# 4. Create changeset +pnpm changeset +# Select: api +# Bump: patch +# Summary: Fix JWT token validation error causing 401s + +# 5. Commit changeset +git add . +git commit -m "chore: add changeset for auth fix" + +# 6. Push and create PR +git push -u origin fix/authentication-error +``` + +### Example 3: Breaking Change + +```bash +# 1. Create feature branch +git checkout dev +git checkout -b feat/api-v2-breaking + +# 2. Make breaking changes +# ... code changes ... + +# 3. Commit with breaking change marker +git add . +pnpm commit +# Select: feat +# Scope: api +# Description: redesign authentication API +# Breaking change?: Yes + +# 4. Create changeset with major bump +pnpm changeset +# Select: api +# Bump: major +# Summary: | +# BREAKING CHANGE: Redesign authentication API +# +# - Replace /auth/login with OAuth2 flow +# - Remove /auth/register endpoint +# - Update response format + +# 5. Commit and push +git add . +git commit -m "chore: add changeset for breaking change" +git push -u origin feat/api-v2-breaking +``` + +## Commands Reference + +| Command | Description | +|---------|-------------| +| `pnpm changeset` | Create a new changeset | +| `pnpm changeset:add` | Alias for `pnpm changeset` | +| `pnpm changeset:status` | Check which packages will be versioned | +| `pnpm version` | Apply version bumps and update changelogs | +| `pnpm release` | Build and publish packages | + +## Best Practices + +1. **Write clear changeset summaries** - They become your changelog entries +2. **Create changesets per feature** - Don't bundle multiple features +3. **Version frequently** - Don't let changesets pile up +4. **Review generated CHANGELOGs** - Make sure they're clear for users +5. **Use conventional commits** - Makes history easier to understand + +## Additional Resources + +- [Changesets Documentation](https://github.com/changesets/changesets) +- [Semantic Versioning](https://semver.org/) +- [Conventional Commits](https://www.conventionalcommits.org/) +- [Quick Reference](/development/quick-reference/) for a shorter guide + diff --git a/apps/docs/src/content/docs/getting-started/installation.md b/apps/docs/src/content/docs/getting-started/installation.md new file mode 100644 index 0000000..772b0a1 --- /dev/null +++ b/apps/docs/src/content/docs/getting-started/installation.md @@ -0,0 +1,444 @@ +--- +title: Installation Guide +description: Complete installation guide for DesterLib server and clients +--- + +This guide covers complete installation for both the server and client applications. + +## System Requirements + +### Server Requirements +- **CPU**: 2 cores minimum +- **RAM**: 2GB minimum +- **Storage**: Your media collection size + 10% extra +- **OS**: Linux, macOS, or Windows with Docker support +- **Network**: Local network or internet access for remote streaming + +### Software Requirements +- **Docker** 20.10 or higher +- **Node.js** 18+ and **pnpm** 9.0+ (only for development) + +## Part 1: Server Installation + +### Docker Setup (Recommended) + +**Best for:** Everyone - simplest way to get started + +1. **Clone the repository:** + ```bash + git clone https://github.com/DesterLib/desterlib.git + cd desterlib + ``` + +2. **Start the server:** + ```bash + docker-compose up -d + ``` + +3. **Verify server is running:** + ```bash + curl http://localhost:3001/health + ``` + + Expected response: + ```json + { + "status": "ok", + "timestamp": "2024-01-01T00:00:00.000Z" + } + ``` + +That's it! Your server is ready. Now install the client app to scan your library and start watching. + +### Optional: Environment Configuration + +To customize settings, create `.env` in `apps/api/`: + +```bash +# Database (uses default Docker settings) +DATABASE_URL=postgresql://postgres:postgres@db:5432/desterlib + +# Server +NODE_ENV=production +PORT=3001 + +# Rate Limiting +RATE_LIMIT_WINDOW_MS=900000 +RATE_LIMIT_MAX=100 +``` + +## Part 2: Client Installation + +### Quick Download (Recommended) + +πŸ“₯ **[Download Latest Alpha Build](https://github.com/DesterLib/Dester-Flutter/releases/latest)** + +⚠️ **Alpha Release**: DesterLib is currently in alpha development. Expect bugs, missing features, and frequent updates! + +Choose your platform: +- **Android (Phone/Tablet)**: Download `Dester-*-Android-arm64-v8a.apk` and install +- **Android TV**: Download `Dester-*-AndroidTV-arm64.apk` for TV with remote support +- **macOS**: Download `Dester-*-macOS.dmg` and drag to Applications +- **Linux**: Download `Dester-*-Linux-x64.tar.gz` and extract +- **Windows**: Download `Dester-*-Windows-x64.zip` and extract +- **iOS**: See [Building from Source](#building-from-source) below + +:::tip +The `*` in filenames represents the version number (e.g., `v0.1.0-alpha`). +Download the file matching your platform from the latest release. +::: + +After installing: +1. Open the app +2. Enter server address: `http://YOUR_SERVER_IP:3001` +3. Go to Settings β†’ Library Management +4. Tap "Scan Library" to index your media +5. Start browsing and streaming! + +### Building from Source + +If you prefer to build from source or need iOS builds: + +#### Android + +1. **Clone the Flutter app repository:** + ```bash + git clone https://github.com/DesterLib/Dester-Flutter.git + cd Dester-Flutter + ``` + +2. **Install Flutter dependencies:** + ```bash + flutter pub get + ``` + +3. **Build and install APK:** + ```bash + # Build APK + flutter build apk --release + + # APK will be at: build/app/outputs/flutter-apk/app-release.apk + # Transfer to your Android device and install + + # Or install directly if device is connected: + flutter install + ``` + +#### iOS + +1. **Prerequisites:** + - macOS with Xcode installed + - Apple Developer account (for device deployment) + +2. **Clone and setup:** + ```bash + git clone https://github.com/DesterLib/Dester-Flutter.git + cd Dester-Flutter + flutter pub get + ``` + +3. **Install CocoaPods dependencies:** + ```bash + cd ios + pod install + cd .. + ``` + +4. **Open in Xcode:** + ```bash + open ios/Runner.xcworkspace + ``` + +5. **Build and run:** + - Select your device or simulator in Xcode + - Click Run (▢️) button + - Or use: `flutter run` + +#### Desktop Platforms + +**macOS:** +```bash +git clone https://github.com/DesterLib/Dester-Flutter.git +cd Dester-Flutter +flutter pub get +flutter build macos --release + +# App will be at: build/macos/Build/Products/Release/Dester.app +``` + +**Linux:** +```bash +# Install dependencies first +sudo apt-get install clang cmake ninja-build pkg-config libgtk-3-dev liblzma-dev libmpv-dev mpv + +git clone https://github.com/DesterLib/Dester-Flutter.git +cd Dester-Flutter +flutter pub get +flutter build linux --release + +# Binary will be at: build/linux/x64/release/bundle/ +``` + +**Windows:** +```bash +git clone https://github.com/DesterLib/Dester-Flutter.git +cd Dester-Flutter +flutter pub get +flutter build windows --release + +# App will be at: build/windows/x64/runner/Release/ +``` + +## Part 3: Connecting Everything + +### Finding Your Server IP + +**On the server machine:** + +```bash +# macOS/Linux +ifconfig | grep "inet " + +# Windows +ipconfig +``` + +Look for your local IP (usually starts with `192.168.x.x` or `10.0.x.x`) + +### Configure Client App + +1. Open the mobile/desktop app +2. Go to Settings or initial setup +3. Enter: `http://YOUR_SERVER_IP:3001` + - Example: `http://192.168.1.100:3001` + - If on same machine: `http://localhost:3001` +4. Save and connect + +### Test Connection + +From the client device, test if the server is reachable: + +```bash +# Replace with your server IP +curl http://192.168.1.100:3001/health +``` + +Should return: +```json +{"status": "ok", "timestamp": "..."} +``` + +## Advanced Setup + +### For Developers + +If you want to develop and contribute: + +1. **Clone the repository:** + ```bash + git clone https://github.com/DesterLib/desterlib.git + cd desterlib + ``` + +2. **Install dependencies:** + ```bash + pnpm install + ``` + +3. **Start test database:** + ```bash + docker-compose -f docker-compose.test.yml up -d + ``` + +4. **Configure environment** (`.env` in `apps/api/`): + ```bash + DATABASE_URL=postgresql://postgres:postgres@localhost:5433/desterlib_test + NODE_ENV=development + PORT=3001 + ``` + +5. **Run the API:** + ```bash + cd apps/api + pnpm db:generate + pnpm db:push + pnpm dev + ``` + +6. **Run the docs (optional):** + ```bash + cd apps/docs + pnpm dev + ``` + +### Remote Access Setup + +To access your server from outside your home network: + +1. **Port Forwarding:** + - Forward port 3001 on your router to your server + - Use your public IP or a dynamic DNS service + +2. **Security (Recommended):** + - Set up HTTPS with Let's Encrypt + - Use a reverse proxy (nginx/Caddy) + - Enable authentication + +3. **Or use tunneling services:** + - ngrok: `ngrok http 3001` + - Cloudflare Tunnel + - Tailscale + +## Maintenance + +### Updating Server + +```bash +cd desterlib +git pull origin main +docker-compose down +docker-compose build +docker-compose up -d +``` + +### Updating Client Apps + +Rebuild from source using the same installation steps. + +### Backup Database + +```bash +docker exec -t desterlib-db pg_dump -U postgres desterlib > backup.sql +``` + +### Restore Database + +```bash +cat backup.sql | docker exec -i desterlib-db psql -U postgres desterlib +``` + +### View Logs + +```bash +# Server logs +docker logs desterlib-api + +# Follow logs +docker logs -f desterlib-api + +# Database logs +docker logs desterlib-db +``` + +## Uninstallation + +### Remove Server + +```bash +cd desterlib +docker-compose down -v # -v removes volumes (database data) +cd .. +rm -rf desterlib +``` + +### Remove Client Apps + +- **Android/iOS:** Uninstall like any other app +- **Desktop:** Delete the app from Applications/Programs folder + +## Troubleshooting + +### Server Issues + +**Port already in use:** +```bash +# Change port in docker-compose.yml or .env +PORT=3002 +``` + +**Server won't start:** +```bash +# Check logs +docker logs desterlib-api + +# Restart containers +docker-compose restart + +# Full reset +docker-compose down -v +docker-compose up -d +``` + +**Database connection failed:** +```bash +# Check if database is running +docker ps | grep postgres + +# Restart database +docker-compose restart db +``` + +### Client Connection Issues + +**Can't connect to server:** +- Verify server is running: `docker ps` +- Test connection: `curl http://YOUR_IP:3001/health` +- Check firewall settings +- Ensure both devices are on same network +- Try using server's IP instead of hostname + +**Movies not showing:** +- Scan your library from the Flutter app (Settings β†’ Library Management β†’ Scan Library) +- Check media folder is mounted in `docker-compose.yml` +- Verify file naming (e.g., `Movie Name (2023).mp4`) +- Check scan status in the app or API logs for errors + +**Slow streaming:** +- Check network bandwidth +- Reduce video quality in app settings +- Consider transcoding large files +- Ensure server has adequate resources + +### Build Issues (Development) + +```bash +# Clear caches +pnpm clean +rm -rf node_modules +pnpm install + +# Flutter issues +cd desterlib-flutter +flutter clean +flutter pub get +``` + +### Permission Issues + +**Docker permission denied:** +```bash +# Add user to docker group +sudo usermod -aG docker $USER + +# Log out and back in, or: +newgrp docker +``` + +## Version Information + +### Current Limitation +⚠️ **Known Issue**: The app version shown in Settings currently doesn't match the release tag. For example, a `v1.0.0` release might still show `0.1.1` internally. This will be fixed in future releases. Check the release page or filename for the actual version. + +### Checking Your Version +- **Release filename**: Check the downloaded file name (e.g., `Dester-v1.0.0-alpha.1-Android-arm64.apk`) +- **GitHub Release page**: [View all releases](https://github.com/DesterLib/Dester-Flutter/releases) +- **In-app** (currently shows dev version): Settings β†’ About + +## Next Steps + +- 🎬 Start watching your media! +- πŸ“– Explore the [API Documentation](http://localhost:3001/api/docs) +- πŸ› οΈ [Project Structure](/development/structure/) if you want to contribute +- πŸ”„ [Versioning Guide](/development/versioning/) for contribution guidelines +- ❓ [Quick Start](/getting-started/quick-start/) for a faster overview + diff --git a/apps/docs/src/content/docs/getting-started/quick-start.md b/apps/docs/src/content/docs/getting-started/quick-start.md new file mode 100644 index 0000000..64698da --- /dev/null +++ b/apps/docs/src/content/docs/getting-started/quick-start.md @@ -0,0 +1,137 @@ +--- +title: Quick Start +description: Get DesterLib up and running in minutes +--- + +Get DesterLib streaming your media in just a few minutes! + +## Prerequisites + +- **Docker** installed ([Get Docker](https://www.docker.com/products/docker-desktop)) +- A folder with your movies/TV shows +- Your phone/tablet/computer to watch on + +## Setup in 2 Steps πŸš€ + +### Step 1: Start the Server + +```bash +# Clone the repository +git clone https://github.com/DesterLib/desterlib.git +cd desterlib + +# Start everything with Docker +docker-compose up -d +``` + +That's it! Docker will: +- 🐘 Start a PostgreSQL database +- πŸ”§ Build and run the API +- πŸ“ Set up your media server + +The server will be running at `http://localhost:3001` + +### Step 2: Connect with Flutter App + +1. **Download the Flutter app** on your device: + + πŸ“₯ **[Download Latest Alpha Build](https://github.com/DesterLib/Dester-Flutter/releases/latest)** + + ⚠️ **Alpha Release**: DesterLib is currently in alpha. Expect bugs and frequent updates! + + Choose your platform: + - **Android (Phone/Tablet)**: `Dester-*-Android-arm64-v8a.apk` + - **Android TV**: `Dester-*-AndroidTV-arm64.apk` + - **macOS**: `Dester-*-macOS.dmg` or `.zip` + - **Linux**: `Dester-*-Linux-x64.tar.gz` + - **Windows**: `Dester-*-Windows-x64.zip` + - **iOS**: Build from source (App Store coming soon) + + Or [build from source](https://github.com/DesterLib/Dester-Flutter#readme) if you prefer + +2. **Configure the app**: + - Open the app + - Enter your server address: `http://YOUR_IP:3001` + - For same device: `http://localhost:3001` + - For network: `http://192.168.1.XXX:3001` (your server's IP) + - The app will connect to your server + +3. **Scan your media library:** + - Go to Settings in the app + - Navigate to Library Management + - Tap "Scan Library" to index your media files + - Wait for the scan to complete + +4. **Start watching!** πŸŽ‰ + - Browse your movies and TV shows + - Tap to play + - Enjoy your personal streaming service + +## Access Points + +- **Server API**: `http://localhost:3001` +- **API Documentation**: `http://localhost:3001/api/docs` +- **Health Check**: `http://localhost:3001/health` + +## For Developers + +If you want to develop and contribute, see the [Development Setup](#development-setup) below. + +### Development Setup + +This setup runs only the database in Docker, while you run the API with pnpm for fast development: + +```bash +# Start test database +docker-compose -f docker-compose.test.yml up -d + +# Install dependencies +pnpm install + +# Configure environment (.env in apps/api/) +DATABASE_URL=postgresql://postgres:postgres@localhost:5433/desterlib_test +NODE_ENV=development +PORT=3001 + +# Run the API +cd apps/api +pnpm dev +``` + +Access at `http://localhost:3001` + +## Troubleshooting + +### Can't connect from mobile app + +- Make sure the server is running: `docker ps` +- Use your server's IP address, not `localhost` (unless on same device) +- Check your firewall allows connections on port 3001 +- Ensure both devices are on the same network + +### Movies aren't showing up + +- Make sure you've scanned your library from the Flutter app (Settings β†’ Library Management β†’ Scan Library) +- Check that your media folder is properly mounted in `docker-compose.yml` +- Verify file naming follows standard formats (e.g., `Movie Name (2023).mp4`) +- Check scan status in the app + +### Server won't start + +- Check if port 3001 is already in use +- Verify Docker is running: `docker ps` +- Check logs: `docker logs desterlib-api` + +### Reset everything + +```bash +docker-compose down -v +docker-compose up -d +``` + +## Next Steps + +- [Full Installation Guide](/getting-started/installation/) for detailed setup and mobile app builds +- [API Documentation](http://localhost:3001/api/docs) to explore all endpoints +- [Project Structure](/development/structure/) if you want to contribute + diff --git a/apps/docs/src/content/docs/guides/example.md b/apps/docs/src/content/docs/guides/example.md new file mode 100644 index 0000000..ebd0f3b --- /dev/null +++ b/apps/docs/src/content/docs/guides/example.md @@ -0,0 +1,11 @@ +--- +title: Example Guide +description: A guide in my new Starlight docs site. +--- + +Guides lead a user through a specific task they want to accomplish, often with a sequence of steps. +Writing a good guide requires thinking about what your users are trying to do. + +## Further reading + +- Read [about how-to guides](https://diataxis.fr/how-to-guides/) in the DiΓ‘taxis framework diff --git a/apps/docs/src/content/docs/index.mdx b/apps/docs/src/content/docs/index.mdx new file mode 100644 index 0000000..063151c --- /dev/null +++ b/apps/docs/src/content/docs/index.mdx @@ -0,0 +1,92 @@ +--- +title: Welcome to DesterLib +description: Your Personal Media Server - Documentation and Guides +template: splash +hero: + title: | + DesterLib + Your Personal Media Server + tagline: Watch your movies and TV shows from anywhere. It's like Netflix, but for YOUR personal collection! + actions: + - text: Get Started + link: /getting-started/quick-start/ + icon: right-arrow + variant: primary + - text: View on GitHub + link: https://github.com/DesterLib/desterlib + icon: external + variant: minimal +--- + +import { Card, CardGrid } from '@astrojs/starlight/components'; + +## What is DesterLib? + +DesterLib is a modern, self-hosted media server system that lets you organize and stream your personal media collection from any device. + + + + Automatically scan, organize, and catalog your movies and TV shows + + + Watch your media with smooth playback on any device + + + Quick installation with Docker or development mode with pnpm + + + Works on Android, iOS, macOS, Linux, and Windows + + + +## Main Features + +- βœ… **Scan & Index** - Automatically finds and organizes your media +- βœ… **Browse Library** - Find movies and shows easily +- βœ… **Smooth Streaming** - Watch without buffering +- βœ… **Multi-Device** - Watch on phone, tablet, or desktop +- βœ… **Track Progress** - Remember where you stopped (coming soon) +- βœ… **Customizable** - Personalize your experience + +## Quick Links + +- [Installation Guide](/getting-started/installation/) - Get up and running +- [Quick Start](/getting-started/quick-start/) - Start using DesterLib +- [API Overview](/api/overview/) - REST API documentation +- [Contributing Guide](/development/contributing/) - Help build DesterLib +- [Project Structure](/development/structure/) - Understand the codebase + +## Project Components + +### Backend API +The engine that does all the work: +- Organizes your media files +- Streams videos to your devices +- Remembers what you're watching +- Manages the database + +### Mobile & Desktop App +The way you watch on your devices: +- Browse your media collection +- Play videos smoothly +- Manage settings +- Cross-platform support + +## Alpha Status + +⚠️ **DesterLib is currently in alpha development**. This means: +- Features are still being developed +- Bugs and issues are expected +- APIs may change +- Documentation may be incomplete +- Frequent updates + +We appreciate your patience and feedback as we build DesterLib! + +## Get Help + +Need assistance? Check out these resources: +- [GitHub Issues](https://github.com/DesterLib/desterlib/issues) - Report bugs or request features +- [GitHub Discussions](https://github.com/DesterLib/desterlib/discussions) - Ask questions and share ideas +- [Contributing Guide](/development/contributing/) - Help us build DesterLib +- [Quick Reference](/development/quick-reference/) - Quick commands and tips diff --git a/apps/docs/src/content/docs/reference/example.md b/apps/docs/src/content/docs/reference/example.md new file mode 100644 index 0000000..0224f09 --- /dev/null +++ b/apps/docs/src/content/docs/reference/example.md @@ -0,0 +1,11 @@ +--- +title: Example Reference +description: A reference page in my new Starlight docs site. +--- + +Reference pages are ideal for outlining how things work in terse and clear terms. +Less concerned with telling a story or addressing a specific use case, they should give a comprehensive outline of what you're documenting. + +## Further reading + +- Read [about reference](https://diataxis.fr/reference/) in the DiΓ‘taxis framework diff --git a/apps/docs/tsconfig.json b/apps/docs/tsconfig.json new file mode 100644 index 0000000..8bf91d3 --- /dev/null +++ b/apps/docs/tsconfig.json @@ -0,0 +1,5 @@ +{ + "extends": "astro/tsconfigs/strict", + "include": [".astro/types.d.ts", "**/*"], + "exclude": ["dist"] +} diff --git a/package.json b/package.json index 9b6d7a5..bb8e637 100644 --- a/package.json +++ b/package.json @@ -9,9 +9,18 @@ "check-types": "turbo run check-types", "commit": "TERM=dumb git-cz", "commit:retry": "TERM=dumb git-cz --retry", - "prepare": "husky" + "prepare": "husky", + "changeset": "changeset", + "changeset:add": "changeset add", + "changeset:status": "changeset status", + "version": "changeset version && pnpm install --lockfile-only", + "release": "pnpm build && changeset publish", + "pr:create": "bash scripts/create-pr.sh", + "pr:create:main": "bash scripts/create-pr.sh main" }, "devDependencies": { + "@changesets/changelog-github": "^0.5.1", + "@changesets/cli": "^2.29.7", "@commitlint/cli": "^19.6.0", "@commitlint/config-conventional": "^19.6.0", "commitizen": "^4.3.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 995e315..8917fc4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,12 @@ importers: .: devDependencies: + '@changesets/changelog-github': + specifier: ^0.5.1 + version: 0.5.1 + '@changesets/cli': + specifier: ^2.29.7 + version: 2.29.7(@types/node@24.8.1) '@commitlint/cli': specifier: ^19.6.0 version: 19.8.1(@types/node@24.8.1)(typescript@5.9.2) @@ -90,7 +96,7 @@ importers: devDependencies: '@prisma/client': specifier: ^6.17.1 - version: 6.17.1(prisma@6.17.1(typescript@5.9.2))(typescript@5.9.2) + version: 6.17.1(prisma@6.17.1(magicast@0.3.5)(typescript@5.9.2))(typescript@5.9.2) '@types/compression': specifier: ^1.7.5 version: 1.8.1 @@ -120,7 +126,7 @@ importers: version: 10.0.0 prisma: specifier: ^6.17.1 - version: 6.17.1(typescript@5.9.2) + version: 6.17.1(magicast@0.3.5)(typescript@5.9.2) tsc-alias: specifier: ^1.8.16 version: 1.8.16 @@ -131,120 +137,24 @@ importers: specifier: ^5.5.3 version: 5.9.2 - apps/web: - dependencies: - '@noriginmedia/norigin-spatial-navigation': - specifier: ^2.3.0 - version: 2.3.0(react@19.2.0) - '@radix-ui/react-dialog': - specifier: ^1.1.15 - version: 1.1.15(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-label': - specifier: ^2.1.7 - version: 2.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-progress': - specifier: ^1.1.7 - version: 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-select': - specifier: ^2.2.6 - version: 2.2.6(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-separator': - specifier: ^1.1.7 - version: 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-slot': - specifier: ^1.2.3 - version: 1.2.3(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-switch': - specifier: ^1.2.6 - version: 1.2.6(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@tailwindcss/vite': - specifier: ^4.1.14 - version: 4.1.14(vite@7.1.11(@types/node@24.8.1)(jiti@2.6.1)(lightningcss@1.30.1)(tsx@4.20.6)(yaml@2.0.0-1)) - '@tanstack/react-form': - specifier: ^1.23.7 - version: 1.23.7(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@tanstack/react-query': - specifier: ^5.90.5 - version: 5.90.5(react@19.2.0) - '@tanstack/react-router': - specifier: ^1.133.15 - version: 1.133.15(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@tanstack/react-router-devtools': - specifier: ^1.133.15 - version: 1.133.15(@tanstack/react-router@1.133.15(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.133.15)(@types/node@24.8.1)(csstype@3.1.3)(jiti@2.6.1)(lightningcss@1.30.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(solid-js@1.9.9)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.0.0-1) - '@tanstack/zod-form-adapter': - specifier: ^0.42.1 - version: 0.42.1(zod@4.1.12) - axios: - specifier: ^1.12.2 - version: 1.12.2 - class-variance-authority: - specifier: ^0.7.1 - version: 0.7.1 - clsx: - specifier: ^2.1.1 - version: 2.1.1 - lucide-react: - specifier: ^0.546.0 - version: 0.546.0(react@19.2.0) - react: - specifier: ^19.1.1 - version: 19.2.0 - react-dom: - specifier: ^19.1.1 - version: 19.2.0(react@19.2.0) - tailwind-merge: - specifier: ^3.3.1 - version: 3.3.1 - tailwindcss: - specifier: ^4.1.14 - version: 4.1.14 - zod: - specifier: ^4.1.12 - version: 4.1.12 + apps/docs: + dependencies: + '@astrojs/starlight': + specifier: ^0.36.1 + version: 0.36.1(astro@5.15.1(@types/node@20.19.22)(jiti@2.6.1)(lightningcss@1.30.1)(rollup@4.52.5)(tsx@4.20.6)(typescript@5.9.2)(yaml@2.0.0-1)) + astro: + specifier: ^5.6.1 + version: 5.15.1(@types/node@20.19.22)(jiti@2.6.1)(lightningcss@1.30.1)(rollup@4.52.5)(tsx@4.20.6)(typescript@5.9.2)(yaml@2.0.0-1) + sharp: + specifier: ^0.34.2 + version: 0.34.4 devDependencies: - '@eslint/js': - specifier: ^9.36.0 - version: 9.38.0 - '@tanstack/router-plugin': - specifier: ^1.133.15 - version: 1.133.15(@tanstack/react-router@1.133.15(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.11(@types/node@24.8.1)(jiti@2.6.1)(lightningcss@1.30.1)(tsx@4.20.6)(yaml@2.0.0-1)) - '@types/node': - specifier: ^24.6.0 - version: 24.8.1 - '@types/react': - specifier: ^19.1.16 - version: 19.2.2 - '@types/react-dom': - specifier: ^19.1.9 - version: 19.2.2(@types/react@19.2.2) - '@vitejs/plugin-react-swc': - specifier: ^4.1.0 - version: 4.1.0(vite@7.1.11(@types/node@24.8.1)(jiti@2.6.1)(lightningcss@1.30.1)(tsx@4.20.6)(yaml@2.0.0-1)) - eslint: - specifier: ^9.36.0 - version: 9.38.0(jiti@2.6.1) - eslint-plugin-react-hooks: - specifier: ^5.2.0 - version: 5.2.0(eslint@9.38.0(jiti@2.6.1)) - eslint-plugin-react-refresh: - specifier: ^0.4.22 - version: 0.4.24(eslint@9.38.0(jiti@2.6.1)) - globals: - specifier: ^16.4.0 - version: 16.4.0 - tw-animate-css: - specifier: ^1.4.0 - version: 1.4.0 + '@astrojs/check': + specifier: ^0.9.0 + version: 0.9.5(prettier@3.6.2)(typescript@5.9.2) typescript: - specifier: ~5.9.3 - version: 5.9.3 - typescript-eslint: - specifier: ^8.45.0 - version: 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - vite: - specifier: ^7.1.11 - version: 7.1.11(@types/node@24.8.1)(jiti@2.6.1)(lightningcss@1.30.1)(tsx@4.20.6)(yaml@2.0.0-1) + specifier: ^5.9.2 + version: 5.9.2 packages/eslint-config: devDependencies: @@ -301,70 +211,60 @@ packages: peerDependencies: openapi-types: '>=7' - '@babel/code-frame@7.27.1': - resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} - engines: {node: '>=6.9.0'} - - '@babel/compat-data@7.28.4': - resolution: {integrity: sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==} - engines: {node: '>=6.9.0'} + '@astrojs/check@0.9.5': + resolution: {integrity: sha512-88vc8n2eJ1Oua74yXSGo/8ABMeypfQPGEzuoAx2awL9Ju8cE6tZ2Rz9jVx5hIExHK5gKVhpxfZj4WXm7e32g1w==} + hasBin: true + peerDependencies: + typescript: ^5.0.0 - '@babel/core@7.28.4': - resolution: {integrity: sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==} - engines: {node: '>=6.9.0'} + '@astrojs/compiler@2.13.0': + resolution: {integrity: sha512-mqVORhUJViA28fwHYaWmsXSzLO9osbdZ5ImUfxBarqsYdMlPbqAqGJCxsNzvppp1BEzc1mJNjOVvQqeDN8Vspw==} - '@babel/generator@7.28.3': - resolution: {integrity: sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==} - engines: {node: '>=6.9.0'} + '@astrojs/internal-helpers@0.7.4': + resolution: {integrity: sha512-lDA9MqE8WGi7T/t2BMi+EAXhs4Vcvr94Gqx3q15cFEz8oFZMO4/SFBqYr/UcmNlvW+35alowkVj+w9VhLvs5Cw==} - '@babel/helper-annotate-as-pure@7.27.3': - resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} - engines: {node: '>=6.9.0'} + '@astrojs/language-server@2.15.5': + resolution: {integrity: sha512-GizawjrIytYEOv8c/VUDrzGYo5t584w6S0fUAmVK2u11BtAZcbtXWNjGtwFWYLyR27J9pZe4Ipe/qP8mXUfCWQ==} + hasBin: true + peerDependencies: + prettier: ^3.0.0 + prettier-plugin-astro: '>=0.11.0' + peerDependenciesMeta: + prettier: + optional: true + prettier-plugin-astro: + optional: true - '@babel/helper-compilation-targets@7.27.2': - resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} - engines: {node: '>=6.9.0'} + '@astrojs/markdown-remark@6.3.8': + resolution: {integrity: sha512-uFNyFWadnULWK2cOw4n0hLKeu+xaVWeuECdP10cQ3K2fkybtTlhb7J7TcScdjmS8Yps7oje9S/ehYMfZrhrgCg==} - '@babel/helper-create-class-features-plugin@7.28.3': - resolution: {integrity: sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg==} - engines: {node: '>=6.9.0'} + '@astrojs/mdx@4.3.8': + resolution: {integrity: sha512-PXT0n2FfZAWEmQi4u4AZ0OPDDrDIF+aXPZGT5HCf52dex5EV3htMByeJUqYIoXdmazAFTASub0vRZLWBqJhJ9w==} + engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0} peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-globals@7.28.0': - resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} - engines: {node: '>=6.9.0'} + astro: ^5.0.0 - '@babel/helper-member-expression-to-functions@7.27.1': - resolution: {integrity: sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==} - engines: {node: '>=6.9.0'} + '@astrojs/prism@3.3.0': + resolution: {integrity: sha512-q8VwfU/fDZNoDOf+r7jUnMC2//H2l0TuQ6FkGJL8vD8nw/q5KiL3DS1KKBI3QhI9UQhpJ5dc7AtqfbXWuOgLCQ==} + engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0} - '@babel/helper-module-imports@7.27.1': - resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} - engines: {node: '>=6.9.0'} + '@astrojs/sitemap@3.6.0': + resolution: {integrity: sha512-4aHkvcOZBWJigRmMIAJwRQXBS+ayoP5z40OklTXYXhUDhwusz+DyDl+nSshY6y9DvkVEavwNcFO8FD81iGhXjg==} - '@babel/helper-module-transforms@7.28.3': - resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==} - engines: {node: '>=6.9.0'} + '@astrojs/starlight@0.36.1': + resolution: {integrity: sha512-Fmt8mIsAIZN18Y4YQDI6p521GsYGe4hYxh9jWmz0pHBXnS5J7Na3TSXNya4eyIymCcKkuiKFbs7b/knsdGVYPg==} peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-optimise-call-expression@7.27.1': - resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==} - engines: {node: '>=6.9.0'} + astro: ^5.5.0 - '@babel/helper-plugin-utils@7.27.1': - resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} - engines: {node: '>=6.9.0'} + '@astrojs/telemetry@3.3.0': + resolution: {integrity: sha512-UFBgfeldP06qu6khs/yY+q1cDAaArM2/7AEIqQ9Cuvf7B1hNLq0xDrZkct+QoIGyjq56y8IaE2I3CTvG99mlhQ==} + engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0} - '@babel/helper-replace-supers@7.27.1': - resolution: {integrity: sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 + '@astrojs/yaml2ts@0.2.2': + resolution: {integrity: sha512-GOfvSr5Nqy2z5XiwqTouBBpy5FyI6DEe+/g/Mk5am9SjILN1S5fOEvYK0GuWHg98yS/dobP4m8qyqw/URW35fQ==} - '@babel/helper-skip-transparent-expression-wrappers@7.27.1': - resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==} + '@babel/code-frame@7.27.1': + resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} '@babel/helper-string-parser@7.27.1': @@ -375,60 +275,83 @@ packages: resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.27.1': - resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} - engines: {node: '>=6.9.0'} - - '@babel/helpers@7.28.4': - resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} - engines: {node: '>=6.9.0'} - '@babel/parser@7.28.4': resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/plugin-syntax-jsx@7.27.1': - resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==} + '@babel/runtime@7.28.4': + resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==} engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-typescript@7.27.1': - resolution: {integrity: sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==} + '@babel/types@7.28.4': + resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==} engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-commonjs@7.27.1': - resolution: {integrity: sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@capsizecss/unpack@3.0.0': + resolution: {integrity: sha512-+ntATQe1AlL7nTOYjwjj6w3299CgRot48wL761TUGYpYgAou3AaONZazp0PKZyCyWhudWsjhq1nvRHOvbMzhTA==} + engines: {node: '>=18'} - '@babel/plugin-transform-typescript@7.28.0': - resolution: {integrity: sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@changesets/apply-release-plan@7.0.13': + resolution: {integrity: sha512-BIW7bofD2yAWoE8H4V40FikC+1nNFEKBisMECccS16W1rt6qqhNTBDmIw5HaqmMgtLNz9e7oiALiEUuKrQ4oHg==} - '@babel/preset-typescript@7.27.1': - resolution: {integrity: sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@changesets/assemble-release-plan@6.0.9': + resolution: {integrity: sha512-tPgeeqCHIwNo8sypKlS3gOPmsS3wP0zHt67JDuL20P4QcXiw/O4Hl7oXiuLnP9yg+rXLQ2sScdV1Kkzde61iSQ==} - '@babel/template@7.27.2': - resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} - engines: {node: '>=6.9.0'} + '@changesets/changelog-git@0.2.1': + resolution: {integrity: sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==} - '@babel/traverse@7.28.4': - resolution: {integrity: sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==} - engines: {node: '>=6.9.0'} + '@changesets/changelog-github@0.5.1': + resolution: {integrity: sha512-BVuHtF+hrhUScSoHnJwTELB4/INQxVFc+P/Qdt20BLiBFIHFJDDUaGsZw+8fQeJTRP5hJZrzpt3oZWh0G19rAQ==} - '@babel/types@7.28.4': - resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==} - engines: {node: '>=6.9.0'} + '@changesets/cli@2.29.7': + resolution: {integrity: sha512-R7RqWoaksyyKXbKXBTbT4REdy22yH81mcFK6sWtqSanxUCbUi9Uf+6aqxZtDQouIqPdem2W56CdxXgsxdq7FLQ==} + hasBin: true + + '@changesets/config@3.1.1': + resolution: {integrity: sha512-bd+3Ap2TKXxljCggI0mKPfzCQKeV/TU4yO2h2C6vAihIo8tzseAn2e7klSuiyYYXvgu53zMN1OeYMIQkaQoWnA==} + + '@changesets/errors@0.2.0': + resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==} + + '@changesets/get-dependents-graph@2.1.3': + resolution: {integrity: sha512-gphr+v0mv2I3Oxt19VdWRRUxq3sseyUpX9DaHpTUmLj92Y10AGy+XOtV+kbM6L/fDcpx7/ISDFK6T8A/P3lOdQ==} + + '@changesets/get-github-info@0.6.0': + resolution: {integrity: sha512-v/TSnFVXI8vzX9/w3DU2Ol+UlTZcu3m0kXTjTT4KlAdwSvwutcByYwyYn9hwerPWfPkT2JfpoX0KgvCEi8Q/SA==} + + '@changesets/get-release-plan@4.0.13': + resolution: {integrity: sha512-DWG1pus72FcNeXkM12tx+xtExyH/c9I1z+2aXlObH3i9YA7+WZEVaiHzHl03thpvAgWTRaH64MpfHxozfF7Dvg==} + + '@changesets/get-version-range-type@0.4.0': + resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==} + + '@changesets/git@3.0.4': + resolution: {integrity: sha512-BXANzRFkX+XcC1q/d27NKvlJ1yf7PSAgi8JG6dt8EfbHFHi4neau7mufcSca5zRhwOL8j9s6EqsxmT+s+/E6Sw==} + + '@changesets/logger@0.1.1': + resolution: {integrity: sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==} + + '@changesets/parse@0.4.1': + resolution: {integrity: sha512-iwksMs5Bf/wUItfcg+OXrEpravm5rEd9Bf4oyIPL4kVTmJQ7PNDSd6MDYkpSJR1pn7tz/k8Zf2DhTCqX08Ou+Q==} + + '@changesets/pre@2.0.2': + resolution: {integrity: sha512-HaL/gEyFVvkf9KFg6484wR9s0qjAXlZ8qWPDkTyKF6+zqjBe/I2mygg3MbpZ++hdi0ToqNUF8cjj7fBy0dg8Ug==} + + '@changesets/read@0.6.5': + resolution: {integrity: sha512-UPzNGhsSjHD3Veb0xO/MwvasGe8eMyNrR/sT9gR8Q3DhOQZirgKhhXv/8hVsI0QpPjR004Z9iFxoJU6in3uGMg==} + + '@changesets/should-skip-package@0.1.2': + resolution: {integrity: sha512-qAK/WrqWLNCP22UDdBTMPH5f41elVDlsNyat180A33dWxuUDyNpg6fPi/FyTZwRriVjg0L8gnjJn2F9XAoF0qw==} + + '@changesets/types@4.1.0': + resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} + + '@changesets/types@6.1.0': + resolution: {integrity: sha512-rKQcJ+o1nKNgeoYRHKOS07tAMNd3YSN0uHaJOZYjBAgxfV7TUE7JE+z4BzZdQwb5hKaYbayKN5KrYV7ODb2rAA==} + + '@changesets/write@0.4.0': + resolution: {integrity: sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==} '@colors/colors@1.6.0': resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} @@ -523,9 +446,38 @@ packages: resolution: {integrity: sha512-bVUNBqG6aznYcYjTjnc3+Cat/iBgbgpflxbIBTnsHTX0YVpnmINPEkSRWymT2Q8aSH3Y7aKnEbunilkYe8TybA==} engines: {node: '>=v18'} + '@ctrl/tinycolor@4.2.0': + resolution: {integrity: sha512-kzyuwOAQnXJNLS9PSyrk0CWk35nWJW/zl/6KvnTBMFK65gm7U1/Z5BqjxeapjZCIhQcM/DsrEmcbRwDyXyXK4A==} + engines: {node: '>=14'} + '@dabh/diagnostics@2.0.8': resolution: {integrity: sha512-R4MSXTVnuMzGD7bzHdW2ZhhdPC/igELENcq5IjEverBvq5hn1SXCWcsi6eSsdWP0/Ur+SItRRjAktmdoX/8R/Q==} + '@emmetio/abbreviation@2.3.3': + resolution: {integrity: sha512-mgv58UrU3rh4YgbE/TzgLQwJ3pFsHHhCLqY20aJq+9comytTXUDNGG/SMtSeMJdkpxgXSXunBGLD8Boka3JyVA==} + + '@emmetio/css-abbreviation@2.1.8': + resolution: {integrity: sha512-s9yjhJ6saOO/uk1V74eifykk2CBYi01STTK3WlXWGOepyKa23ymJ053+DNQjpFcy1ingpaO7AxCcwLvHFY9tuw==} + + '@emmetio/css-parser@https://codeload.github.com/ramya-rao-a/css-parser/tar.gz/370c480ac103bd17c7bcfb34bf5d577dc40d3660': + resolution: {tarball: https://codeload.github.com/ramya-rao-a/css-parser/tar.gz/370c480ac103bd17c7bcfb34bf5d577dc40d3660} + version: 0.4.0 + + '@emmetio/html-matcher@1.3.0': + resolution: {integrity: sha512-NTbsvppE5eVyBMuyGfVu2CRrLvo7J4YHb6t9sBFLyY03WYhXET37qA4zOYUjBWFCRHO7pS1B9khERtY0f5JXPQ==} + + '@emmetio/scanner@1.0.4': + resolution: {integrity: sha512-IqRuJtQff7YHHBk4G8YZ45uB9BaAGcwQeVzgj/zj8/UdOhtQpEIupUhSk8dys6spFIWVZVeK20CzGEnqR5SbqA==} + + '@emmetio/stream-reader-utils@0.1.0': + resolution: {integrity: sha512-ZsZ2I9Vzso3Ho/pjZFsmmZ++FWeEd/txqybHTm4OgaZzdS8V9V/YYWQwg5TC38Z7uLWUV1vavpLLbjJtKubR1A==} + + '@emmetio/stream-reader@2.2.0': + resolution: {integrity: sha512-fXVXEyFA5Yv3M3n8sUGT7+fvecGrZP4k6FnWWMSZVQf69kAq0LLpaBQLGcPR30m3zMmKYhECP4k/ZkzvhEW5kw==} + + '@emnapi/runtime@1.6.0': + resolution: {integrity: sha512-obtUmAHTMjll499P+D9A3axeJFlhdjOWdKUNs/U6QIGT7V5RjcUW1xToAzjvmgTSQhDbYn/NwfTRoJcQ2rNBxA==} + '@esbuild/aix-ppc64@0.25.11': resolution: {integrity: sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==} engines: {node: '>=18'} @@ -688,12 +640,6 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/eslint-utils@4.9.0': - resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/regexpp@4.12.1': resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} @@ -702,26 +648,14 @@ packages: resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/config-array@0.21.1': - resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/config-helpers@0.3.1': resolution: {integrity: sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/config-helpers@0.4.1': - resolution: {integrity: sha512-csZAzkNhsgwb0I/UAV6/RGFTbiakPCf0ZrGmrIxQpYvGZ00PhTkSnyKNolphgIvmnJeGw6rcGVEXfTzUnFuEvw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.15.2': resolution: {integrity: sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.16.0': - resolution: {integrity: sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/eslintrc@3.3.1': resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -730,40 +664,25 @@ packages: resolution: {integrity: sha512-EoyvqQnBNsV1CWaEJ559rxXL4c8V92gxirbawSmVUOWXlsRxxQXl6LmCpdUblgxgSkDIqKnhzba2SjRTI/A5Rw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.38.0': - resolution: {integrity: sha512-UZ1VpFvXf9J06YG9xQBdnzU+kthors6KjhMAl6f4gH4usHyh31rUf2DLGInT8RFYIReYXNSydgPY0V2LuWgl7A==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/object-schema@2.1.6': resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/object-schema@2.1.7': - resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.3.5': resolution: {integrity: sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.4.0': - resolution: {integrity: sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@floating-ui/core@1.7.3': - resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==} + '@expressive-code/core@0.41.3': + resolution: {integrity: sha512-9qzohqU7O0+JwMEEgQhnBPOw5DtsQRBXhW++5fvEywsuX44vCGGof1SL5OvPElvNgaWZ4pFZAFSlkNOkGyLwSQ==} - '@floating-ui/dom@1.7.4': - resolution: {integrity: sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==} + '@expressive-code/plugin-frames@0.41.3': + resolution: {integrity: sha512-rFQtmf/3N2CK3Cq/uERweMTYZnBu+CwxBdHuOftEmfA9iBE7gTVvwpbh82P9ZxkPLvc40UMhYt7uNuAZexycRQ==} - '@floating-ui/react-dom@2.1.6': - resolution: {integrity: sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==} - peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' + '@expressive-code/plugin-shiki@0.41.3': + resolution: {integrity: sha512-RlTARoopzhFJIOVHLGvuXJ8DCEme/hjV+ZnRJBIxzxsKVpGPW4Oshqg9xGhWTYdHstTsxO663s0cdBLzZj9TQA==} - '@floating-ui/utils@0.2.10': - resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} + '@expressive-code/plugin-text-markers@0.41.3': + resolution: {integrity: sha512-SN8tkIzDpA0HLAscEYD2IVrfLiid6qEdE9QLlGVSxO1KEw7qYvjpbNBQjUjMr5/jvTJ7ys6zysU2vLPHE0sb2g==} '@humanfs/core@0.19.1': resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} @@ -785,29 +704,156 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} - '@isaacs/fs-minipass@4.0.1': - resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} - engines: {node: '>=18.0.0'} + '@img/colour@1.0.0': + resolution: {integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==} + engines: {node: '>=18'} + + '@img/sharp-darwin-arm64@0.34.4': + resolution: {integrity: sha512-sitdlPzDVyvmINUdJle3TNHl+AG9QcwiAMsXmccqsCOMZNIdW2/7S26w0LyU8euiLVzFBL3dXPwVCq/ODnf2vA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [darwin] - '@jridgewell/gen-mapping@0.3.13': - resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + '@img/sharp-darwin-x64@0.34.4': + resolution: {integrity: sha512-rZheupWIoa3+SOdF/IcUe1ah4ZDpKBGWcsPX6MT0lYniH9micvIU7HQkYTfrx5Xi8u+YqwLtxC/3vl8TQN6rMg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [darwin] - '@jridgewell/remapping@2.3.5': - resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + '@img/sharp-libvips-darwin-arm64@1.2.3': + resolution: {integrity: sha512-QzWAKo7kpHxbuHqUC28DZ9pIKpSi2ts2OJnoIGI26+HMgq92ZZ4vk8iJd4XsxN+tYfNJxzH6W62X5eTcsBymHw==} + cpu: [arm64] + os: [darwin] - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} + '@img/sharp-libvips-darwin-x64@1.2.3': + resolution: {integrity: sha512-Ju+g2xn1E2AKO6YBhxjj+ACcsPQRHT0bhpglxcEf+3uyPY+/gL8veniKoo96335ZaPo03bdDXMv0t+BBFAbmRA==} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-linux-arm64@1.2.3': + resolution: {integrity: sha512-I4RxkXU90cpufazhGPyVujYwfIm9Nk1QDEmiIsaPwdnm013F7RIceaCc87kAH+oUB1ezqEvC6ga4m7MSlqsJvQ==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linux-arm@1.2.3': + resolution: {integrity: sha512-x1uE93lyP6wEwGvgAIV0gP6zmaL/a0tGzJs/BIDDG0zeBhMnuUPm7ptxGhUbcGs4okDJrk4nxgrmxpib9g6HpA==} + cpu: [arm] + os: [linux] + + '@img/sharp-libvips-linux-ppc64@1.2.3': + resolution: {integrity: sha512-Y2T7IsQvJLMCBM+pmPbM3bKT/yYJvVtLJGfCs4Sp95SjvnFIjynbjzsa7dY1fRJX45FTSfDksbTp6AGWudiyCg==} + cpu: [ppc64] + os: [linux] + + '@img/sharp-libvips-linux-s390x@1.2.3': + resolution: {integrity: sha512-RgWrs/gVU7f+K7P+KeHFaBAJlNkD1nIZuVXdQv6S+fNA6syCcoboNjsV2Pou7zNlVdNQoQUpQTk8SWDHUA3y/w==} + cpu: [s390x] + os: [linux] + + '@img/sharp-libvips-linux-x64@1.2.3': + resolution: {integrity: sha512-3JU7LmR85K6bBiRzSUc/Ff9JBVIFVvq6bomKE0e63UXGeRw2HPVEjoJke1Yx+iU4rL7/7kUjES4dZ/81Qjhyxg==} + cpu: [x64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-arm64@1.2.3': + resolution: {integrity: sha512-F9q83RZ8yaCwENw1GieztSfj5msz7GGykG/BA+MOUefvER69K/ubgFHNeSyUu64amHIYKGDs4sRCMzXVj8sEyw==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-x64@1.2.3': + resolution: {integrity: sha512-U5PUY5jbc45ANM6tSJpsgqmBF/VsL6LnxJmIf11kB7J5DctHgqm0SkuXzVWtIY90GnJxKnC/JT251TDnk1fu/g==} + cpu: [x64] + os: [linux] + + '@img/sharp-linux-arm64@0.34.4': + resolution: {integrity: sha512-YXU1F/mN/Wu786tl72CyJjP/Ngl8mGHN1hST4BGl+hiW5jhCnV2uRVTNOcaYPs73NeT/H8Upm3y9582JVuZHrQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linux-arm@0.34.4': + resolution: {integrity: sha512-Xyam4mlqM0KkTHYVSuc6wXRmM7LGN0P12li03jAnZ3EJWZqj83+hi8Y9UxZUbxsgsK1qOEwg7O0Bc0LjqQVtxA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm] + os: [linux] + + '@img/sharp-linux-ppc64@0.34.4': + resolution: {integrity: sha512-F4PDtF4Cy8L8hXA2p3TO6s4aDt93v+LKmpcYFLAVdkkD3hSxZzee0rh6/+94FpAynsuMpLX5h+LRsSG3rIciUQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ppc64] + os: [linux] + + '@img/sharp-linux-s390x@0.34.4': + resolution: {integrity: sha512-qVrZKE9Bsnzy+myf7lFKvng6bQzhNUAYcVORq2P7bDlvmF6u2sCmK2KyEQEBdYk+u3T01pVsPrkj943T1aJAsw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [s390x] + os: [linux] + + '@img/sharp-linux-x64@0.34.4': + resolution: {integrity: sha512-ZfGtcp2xS51iG79c6Vhw9CWqQC8l2Ot8dygxoDoIQPTat/Ov3qAa8qpxSrtAEAJW+UjTXc4yxCjNfxm4h6Xm2A==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-linuxmusl-arm64@0.34.4': + resolution: {integrity: sha512-8hDVvW9eu4yHWnjaOOR8kHVrew1iIX+MUgwxSuH2XyYeNRtLUe4VNioSqbNkB7ZYQJj9rUTT4PyRscyk2PXFKA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linuxmusl-x64@0.34.4': + resolution: {integrity: sha512-lU0aA5L8QTlfKjpDCEFOZsTYGn3AEiO6db8W5aQDxj0nQkVrZWmN3ZP9sYKWJdtq3PWPhUNlqehWyXpYDcI9Sg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-wasm32@0.34.4': + resolution: {integrity: sha512-33QL6ZO/qpRyG7woB/HUALz28WnTMI2W1jgX3Nu2bypqLIKx/QKMILLJzJjI+SIbvXdG9fUnmrxR7vbi1sTBeA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [wasm32] + + '@img/sharp-win32-arm64@0.34.4': + resolution: {integrity: sha512-2Q250do/5WXTwxW3zjsEuMSv5sUU4Tq9VThWKlU2EYLm4MB7ZeMwF+SFJutldYODXF6jzc6YEOC+VfX0SZQPqA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [win32] + + '@img/sharp-win32-ia32@0.34.4': + resolution: {integrity: sha512-3ZeLue5V82dT92CNL6rsal6I2weKw1cYu+rGKm8fOCCtJTR2gYeUfY3FqUnIJsMUPIH68oS5jmZ0NiJ508YpEw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ia32] + os: [win32] + + '@img/sharp-win32-x64@0.34.4': + resolution: {integrity: sha512-xIyj4wpYs8J18sVN3mSQjwrw7fKUqRw+Z5rnHNCy5fYTxigBz81u5mOMPmFumwjcn8+ld1ppptMBCLic1nz6ig==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + + '@inquirer/external-editor@1.0.2': + resolution: {integrity: sha512-yy9cOoBnx58TlsPrIxauKIFQTiyH+0MK4e97y4sV9ERbI+zDxw7i2hxHLCIEGIE/8PPvDxGhgzIOTSOWcs6/MQ==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true '@jridgewell/sourcemap-codec@1.5.5': resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - '@jridgewell/trace-mapping@0.3.31': - resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} - '@jsdevtools/ono@7.1.3': resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} + '@manypkg/find-root@1.1.0': + resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} + + '@manypkg/get-packages@1.1.3': + resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} + + '@mdx-js/mdx@3.1.1': + resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==} + '@next/eslint-plugin-next@15.5.0': resolution: {integrity: sha512-+k83U/fST66eQBjTltX2T9qUYd43ntAe+NZ5qeZVTQyTiFiHvTLtkpLKug4AnZAtuI/lwz5tl/4QDJymjVkybg==} @@ -823,10 +869,41 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@noriginmedia/norigin-spatial-navigation@2.3.0': - resolution: {integrity: sha512-gR//N45NnKz1h0/AVknkfg7QnNATETdgXUUD3EKPxuQPyhk7NhsphODzRamyvjYaxsU6VbY/szcUlzBWWBkNMw==} - peerDependencies: - react: '>=16.8.0' + '@oslojs/encoding@1.1.0': + resolution: {integrity: sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==} + + '@pagefind/darwin-arm64@1.4.0': + resolution: {integrity: sha512-2vMqkbv3lbx1Awea90gTaBsvpzgRs7MuSgKDxW0m9oV1GPZCZbZBJg/qL83GIUEN2BFlY46dtUZi54pwH+/pTQ==} + cpu: [arm64] + os: [darwin] + + '@pagefind/darwin-x64@1.4.0': + resolution: {integrity: sha512-e7JPIS6L9/cJfow+/IAqknsGqEPjJnVXGjpGm25bnq+NPdoD3c/7fAwr1OXkG4Ocjx6ZGSCijXEV4ryMcH2E3A==} + cpu: [x64] + os: [darwin] + + '@pagefind/default-ui@1.4.0': + resolution: {integrity: sha512-wie82VWn3cnGEdIjh4YwNESyS1G6vRHwL6cNjy9CFgNnWW/PGRjsLq300xjVH5sfPFK3iK36UxvIBymtQIEiSQ==} + + '@pagefind/freebsd-x64@1.4.0': + resolution: {integrity: sha512-WcJVypXSZ+9HpiqZjFXMUobfFfZZ6NzIYtkhQ9eOhZrQpeY5uQFqNWLCk7w9RkMUwBv1HAMDW3YJQl/8OqsV0Q==} + cpu: [x64] + os: [freebsd] + + '@pagefind/linux-arm64@1.4.0': + resolution: {integrity: sha512-PIt8dkqt4W06KGmQjONw7EZbhDF+uXI7i0XtRLN1vjCUxM9vGPdtJc2mUyVPevjomrGz5M86M8bqTr6cgDp1Uw==} + cpu: [arm64] + os: [linux] + + '@pagefind/linux-x64@1.4.0': + resolution: {integrity: sha512-z4oddcWwQ0UHrTHR8psLnVlz6USGJ/eOlDPTDYZ4cI8TK8PgwRUPQZp9D2iJPNIPcS6Qx/E4TebjuGJOyK8Mmg==} + cpu: [x64] + os: [linux] + + '@pagefind/windows-x64@1.4.0': + resolution: {integrity: sha512-NkT+YAdgS2FPCn8mIA9bQhiBs+xmniMGq1LFPDhcFn0+2yIUEiIG06t7bsZlhdjknEQRTSdT7YitP6fC5qwP0g==} + cpu: [x64] + os: [win32] '@prisma/client@6.17.1': resolution: {integrity: sha512-zL58jbLzYamjnNnmNA51IOZdbk5ci03KviXCuB0Tydc9btH2kDWsi1pQm2VecviRTM7jGia0OPPkgpGnT3nKvw==} @@ -858,368 +935,44 @@ packages: '@prisma/get-platform@6.17.1': resolution: {integrity: sha512-AKEn6fsfz0r482S5KRDFlIGEaq9wLNcgalD1adL+fPcFFblIKs1sD81kY/utrHdqKuVC6E1XSRpegDK3ZLL4Qg==} - '@radix-ui/number@1.1.1': - resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==} - - '@radix-ui/primitive@1.1.3': - resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==} - - '@radix-ui/react-arrow@1.1.7': - resolution: {integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==} + '@rollup/pluginutils@5.3.0': + resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} + engines: {node: '>=14.0.0'} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': + rollup: optional: true - '@radix-ui/react-collection@1.1.7': - resolution: {integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + '@rollup/rollup-android-arm-eabi@4.52.5': + resolution: {integrity: sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==} + cpu: [arm] + os: [android] - '@radix-ui/react-compose-refs@1.1.2': - resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true + '@rollup/rollup-android-arm64@4.52.5': + resolution: {integrity: sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==} + cpu: [arm64] + os: [android] - '@radix-ui/react-context@1.1.2': - resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true + '@rollup/rollup-darwin-arm64@4.52.5': + resolution: {integrity: sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==} + cpu: [arm64] + os: [darwin] - '@radix-ui/react-dialog@1.1.15': - resolution: {integrity: sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + '@rollup/rollup-darwin-x64@4.52.5': + resolution: {integrity: sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==} + cpu: [x64] + os: [darwin] - '@radix-ui/react-direction@1.1.1': - resolution: {integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true + '@rollup/rollup-freebsd-arm64@4.52.5': + resolution: {integrity: sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==} + cpu: [arm64] + os: [freebsd] - '@radix-ui/react-dismissable-layer@1.1.11': - resolution: {integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-focus-guards@1.1.3': - resolution: {integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-focus-scope@1.1.7': - resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-id@1.1.1': - resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-label@2.1.7': - resolution: {integrity: sha512-YT1GqPSL8kJn20djelMX7/cTRp/Y9w5IZHvfxQTVHrOqa2yMl7i/UfMqKRU5V7mEyKTrUVgJXhNQPVCG8PBLoQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-popper@1.2.8': - resolution: {integrity: sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-portal@1.1.9': - resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-presence@1.1.5': - resolution: {integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-primitive@2.1.3': - resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-progress@1.1.7': - resolution: {integrity: sha512-vPdg/tF6YC/ynuBIJlk1mm7Le0VgW6ub6J2UWnTQ7/D23KXcPI1qy+0vBkgKgd38RCMJavBXpB83HPNFMTb0Fg==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-select@2.2.6': - resolution: {integrity: sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-separator@1.1.7': - resolution: {integrity: sha512-0HEb8R9E8A+jZjvmFCy/J4xhbXy3TV+9XSnGJ3KvTtjlIUy/YQ/p6UYZvi7YbeoeXdyU9+Y3scizK6hkY37baA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-slot@1.2.3': - resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-switch@1.2.6': - resolution: {integrity: sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-use-callback-ref@1.1.1': - resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-use-controllable-state@1.2.2': - resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-use-effect-event@0.0.2': - resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-use-escape-keydown@1.1.1': - resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-use-layout-effect@1.1.1': - resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-use-previous@1.1.1': - resolution: {integrity: sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-use-rect@1.1.1': - resolution: {integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-use-size@1.1.1': - resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-visually-hidden@1.2.3': - resolution: {integrity: sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/rect@1.1.1': - resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} - - '@rolldown/pluginutils@1.0.0-beta.35': - resolution: {integrity: sha512-slYrCpoxJUqzFDDNlvrOYRazQUNRvWPjXA17dAOISY3rDMxX6k8K4cj2H+hEYMHF81HO3uNd5rHVigAWRM5dSg==} - - '@rollup/rollup-android-arm-eabi@4.52.5': - resolution: {integrity: sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==} - cpu: [arm] - os: [android] - - '@rollup/rollup-android-arm64@4.52.5': - resolution: {integrity: sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==} - cpu: [arm64] - os: [android] - - '@rollup/rollup-darwin-arm64@4.52.5': - resolution: {integrity: sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==} - cpu: [arm64] - os: [darwin] - - '@rollup/rollup-darwin-x64@4.52.5': - resolution: {integrity: sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==} - cpu: [x64] - os: [darwin] - - '@rollup/rollup-freebsd-arm64@4.52.5': - resolution: {integrity: sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==} - cpu: [arm64] - os: [freebsd] - - '@rollup/rollup-freebsd-x64@4.52.5': - resolution: {integrity: sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==} - cpu: [x64] - os: [freebsd] + '@rollup/rollup-freebsd-x64@4.52.5': + resolution: {integrity: sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==} + cpu: [x64] + os: [freebsd] '@rollup/rollup-linux-arm-gnueabihf@4.52.5': resolution: {integrity: sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==} @@ -1304,285 +1057,35 @@ packages: '@scarf/scarf@1.4.0': resolution: {integrity: sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ==} - '@so-ric/colorspace@1.1.6': - resolution: {integrity: sha512-/KiKkpHNOBgkFJwu9sh48LkHSMYGyuTcSFK/qMBdnOAlrRJzRSXAOFB5qwzaVQuDl8wAvHVMkaASQDReTahxuw==} + '@shikijs/core@3.14.0': + resolution: {integrity: sha512-qRSeuP5vlYHCNUIrpEBQFO7vSkR7jn7Kv+5X3FO/zBKVDGQbcnlScD3XhkrHi/R8Ltz0kEjvFR9Szp/XMRbFMw==} - '@standard-schema/spec@1.0.0': - resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} + '@shikijs/engine-javascript@3.14.0': + resolution: {integrity: sha512-3v1kAXI2TsWQuwv86cREH/+FK9Pjw3dorVEykzQDhwrZj0lwsHYlfyARaKmn6vr5Gasf8aeVpb8JkzeWspxOLQ==} - '@swc/core-darwin-arm64@1.13.5': - resolution: {integrity: sha512-lKNv7SujeXvKn16gvQqUQI5DdyY8v7xcoO3k06/FJbHJS90zEwZdQiMNRiqpYw/orU543tPaWgz7cIYWhbopiQ==} - engines: {node: '>=10'} - cpu: [arm64] - os: [darwin] + '@shikijs/engine-oniguruma@3.14.0': + resolution: {integrity: sha512-TNcYTYMbJyy+ZjzWtt0bG5y4YyMIWC2nyePz+CFMWqm+HnZZyy9SWMgo8Z6KBJVIZnx8XUXS8U2afO6Y0g1Oug==} - '@swc/core-darwin-x64@1.13.5': - resolution: {integrity: sha512-ILd38Fg/w23vHb0yVjlWvQBoE37ZJTdlLHa8LRCFDdX4WKfnVBiblsCU9ar4QTMNdeTBEX9iUF4IrbNWhaF1Ng==} - engines: {node: '>=10'} - cpu: [x64] - os: [darwin] + '@shikijs/langs@3.14.0': + resolution: {integrity: sha512-DIB2EQY7yPX1/ZH7lMcwrK5pl+ZkP/xoSpUzg9YC8R+evRCCiSQ7yyrvEyBsMnfZq4eBzLzBlugMyTAf13+pzg==} - '@swc/core-linux-arm-gnueabihf@1.13.5': - resolution: {integrity: sha512-Q6eS3Pt8GLkXxqz9TAw+AUk9HpVJt8Uzm54MvPsqp2yuGmY0/sNaPPNVqctCX9fu/Nu8eaWUen0si6iEiCsazQ==} - engines: {node: '>=10'} - cpu: [arm] - os: [linux] - - '@swc/core-linux-arm64-gnu@1.13.5': - resolution: {integrity: sha512-aNDfeN+9af+y+M2MYfxCzCy/VDq7Z5YIbMqRI739o8Ganz6ST+27kjQFd8Y/57JN/hcnUEa9xqdS3XY7WaVtSw==} - engines: {node: '>=10'} - cpu: [arm64] - os: [linux] + '@shikijs/themes@3.14.0': + resolution: {integrity: sha512-fAo/OnfWckNmv4uBoUu6dSlkcBc+SA1xzj5oUSaz5z3KqHtEbUypg/9xxgJARtM6+7RVm0Q6Xnty41xA1ma1IA==} - '@swc/core-linux-arm64-musl@1.13.5': - resolution: {integrity: sha512-9+ZxFN5GJag4CnYnq6apKTnnezpfJhCumyz0504/JbHLo+Ue+ZtJnf3RhyA9W9TINtLE0bC4hKpWi8ZKoETyOQ==} - engines: {node: '>=10'} - cpu: [arm64] - os: [linux] + '@shikijs/types@3.14.0': + resolution: {integrity: sha512-bQGgC6vrY8U/9ObG1Z/vTro+uclbjjD/uG58RvfxKZVD5p9Yc1ka3tVyEFy7BNJLzxuWyHH5NWynP9zZZS59eQ==} - '@swc/core-linux-x64-gnu@1.13.5': - resolution: {integrity: sha512-WD530qvHrki8Ywt/PloKUjaRKgstQqNGvmZl54g06kA+hqtSE2FTG9gngXr3UJxYu/cNAjJYiBifm7+w4nbHbA==} - engines: {node: '>=10'} - cpu: [x64] - os: [linux] + '@shikijs/vscode-textmate@10.0.2': + resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} - '@swc/core-linux-x64-musl@1.13.5': - resolution: {integrity: sha512-Luj8y4OFYx4DHNQTWjdIuKTq2f5k6uSXICqx+FSabnXptaOBAbJHNbHT/06JZh6NRUouaf0mYXN0mcsqvkhd7Q==} - engines: {node: '>=10'} - cpu: [x64] - os: [linux] - - '@swc/core-win32-arm64-msvc@1.13.5': - resolution: {integrity: sha512-cZ6UpumhF9SDJvv4DA2fo9WIzlNFuKSkZpZmPG1c+4PFSEMy5DFOjBSllCvnqihCabzXzpn6ykCwBmHpy31vQw==} - engines: {node: '>=10'} - cpu: [arm64] - os: [win32] - - '@swc/core-win32-ia32-msvc@1.13.5': - resolution: {integrity: sha512-C5Yi/xIikrFUzZcyGj9L3RpKljFvKiDMtyDzPKzlsDrKIw2EYY+bF88gB6oGY5RGmv4DAX8dbnpRAqgFD0FMEw==} - engines: {node: '>=10'} - cpu: [ia32] - os: [win32] - - '@swc/core-win32-x64-msvc@1.13.5': - resolution: {integrity: sha512-YrKdMVxbYmlfybCSbRtrilc6UA8GF5aPmGKBdPvjrarvsmf4i7ZHGCEnLtfOMd3Lwbs2WUZq3WdMbozYeLU93Q==} - engines: {node: '>=10'} - cpu: [x64] - os: [win32] - - '@swc/core@1.13.5': - resolution: {integrity: sha512-WezcBo8a0Dg2rnR82zhwoR6aRNxeTGfK5QCD6TQ+kg3xx/zNT02s/0o+81h/3zhvFSB24NtqEr8FTw88O5W/JQ==} - engines: {node: '>=10'} - peerDependencies: - '@swc/helpers': '>=0.5.17' - peerDependenciesMeta: - '@swc/helpers': - optional: true - - '@swc/counter@0.1.3': - resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - - '@swc/types@0.1.25': - resolution: {integrity: sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==} - - '@tailwindcss/node@4.1.14': - resolution: {integrity: sha512-hpz+8vFk3Ic2xssIA3e01R6jkmsAhvkQdXlEbRTk6S10xDAtiQiM3FyvZVGsucefq764euO/b8WUW9ysLdThHw==} - - '@tailwindcss/oxide-android-arm64@4.1.14': - resolution: {integrity: sha512-a94ifZrGwMvbdeAxWoSuGcIl6/DOP5cdxagid7xJv6bwFp3oebp7y2ImYsnZBMTwjn5Ev5xESvS3FFYUGgPODQ==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [android] - - '@tailwindcss/oxide-darwin-arm64@4.1.14': - resolution: {integrity: sha512-HkFP/CqfSh09xCnrPJA7jud7hij5ahKyWomrC3oiO2U9i0UjP17o9pJbxUN0IJ471GTQQmzwhp0DEcpbp4MZTA==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - - '@tailwindcss/oxide-darwin-x64@4.1.14': - resolution: {integrity: sha512-eVNaWmCgdLf5iv6Qd3s7JI5SEFBFRtfm6W0mphJYXgvnDEAZ5sZzqmI06bK6xo0IErDHdTA5/t7d4eTfWbWOFw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - - '@tailwindcss/oxide-freebsd-x64@4.1.14': - resolution: {integrity: sha512-QWLoRXNikEuqtNb0dhQN6wsSVVjX6dmUFzuuiL09ZeXju25dsei2uIPl71y2Ic6QbNBsB4scwBoFnlBfabHkEw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [freebsd] - - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.14': - resolution: {integrity: sha512-VB4gjQni9+F0VCASU+L8zSIyjrLLsy03sjcR3bM0V2g4SNamo0FakZFKyUQ96ZVwGK4CaJsc9zd/obQy74o0Fw==} - engines: {node: '>= 10'} - cpu: [arm] - os: [linux] - - '@tailwindcss/oxide-linux-arm64-gnu@4.1.14': - resolution: {integrity: sha512-qaEy0dIZ6d9vyLnmeg24yzA8XuEAD9WjpM5nIM1sUgQ/Zv7cVkharPDQcmm/t/TvXoKo/0knI3me3AGfdx6w1w==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - - '@tailwindcss/oxide-linux-arm64-musl@4.1.14': - resolution: {integrity: sha512-ISZjT44s59O8xKsPEIesiIydMG/sCXoMBCqsphDm/WcbnuWLxxb+GcvSIIA5NjUw6F8Tex7s5/LM2yDy8RqYBQ==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - - '@tailwindcss/oxide-linux-x64-gnu@4.1.14': - resolution: {integrity: sha512-02c6JhLPJj10L2caH4U0zF8Hji4dOeahmuMl23stk0MU1wfd1OraE7rOloidSF8W5JTHkFdVo/O7uRUJJnUAJg==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - - '@tailwindcss/oxide-linux-x64-musl@4.1.14': - resolution: {integrity: sha512-TNGeLiN1XS66kQhxHG/7wMeQDOoL0S33x9BgmydbrWAb9Qw0KYdd8o1ifx4HOGDWhVmJ+Ul+JQ7lyknQFilO3Q==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - - '@tailwindcss/oxide-wasm32-wasi@4.1.14': - resolution: {integrity: sha512-uZYAsaW/jS/IYkd6EWPJKW/NlPNSkWkBlaeVBi/WsFQNP05/bzkebUL8FH1pdsqx4f2fH/bWFcUABOM9nfiJkQ==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] - bundledDependencies: - - '@napi-rs/wasm-runtime' - - '@emnapi/core' - - '@emnapi/runtime' - - '@tybys/wasm-util' - - '@emnapi/wasi-threads' - - tslib - - '@tailwindcss/oxide-win32-arm64-msvc@4.1.14': - resolution: {integrity: sha512-Az0RnnkcvRqsuoLH2Z4n3JfAef0wElgzHD5Aky/e+0tBUxUhIeIqFBTMNQvmMRSP15fWwmvjBxZ3Q8RhsDnxAA==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [win32] - - '@tailwindcss/oxide-win32-x64-msvc@4.1.14': - resolution: {integrity: sha512-ttblVGHgf68kEE4om1n/n44I0yGPkCPbLsqzjvybhpwa6mKKtgFfAzy6btc3HRmuW7nHe0OOrSeNP9sQmmH9XA==} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - - '@tailwindcss/oxide@4.1.14': - resolution: {integrity: sha512-23yx+VUbBwCg2x5XWdB8+1lkPajzLmALEfMb51zZUBYaYVPDQvBSD/WYDqiVyBIo2BZFa3yw1Rpy3G2Jp+K0dw==} - engines: {node: '>= 10'} - - '@tailwindcss/vite@4.1.14': - resolution: {integrity: sha512-BoFUoU0XqgCUS1UXWhmDJroKKhNXeDzD7/XwabjkDIAbMnc4ULn5e2FuEuBbhZ6ENZoSYzKlzvZ44Yr6EUDUSA==} - peerDependencies: - vite: ^5.2.0 || ^6 || ^7 - - '@tanstack/devtools-event-client@0.3.3': - resolution: {integrity: sha512-RfV+OPV/M3CGryYqTue684u10jUt55PEqeBOnOtCe6tAmHI9Iqyc8nHeDhWPEV9715gShuauFVaMc9RiUVNdwg==} - engines: {node: '>=18'} - - '@tanstack/form-core@0.42.1': - resolution: {integrity: sha512-jTU0jyHqFceujdtPNv3jPVej1dTqBwa8TYdIyWB5BCwRVUBZEp1PiYEBkC9r92xu5fMpBiKc+JKud3eeVjuMiA==} - - '@tanstack/form-core@1.24.3': - resolution: {integrity: sha512-e+HzSD49NWr4aIqJWtPPzmi+/phBJAP3nSPN8dvxwmJWqAxuB/cH138EcmCFf3+oA7j3BXvwvTY0I+8UweGPjQ==} - - '@tanstack/history@1.133.3': - resolution: {integrity: sha512-zFQnGdX0S4g5xRuS+95iiEXM+qlGvYG7ksmOKx7LaMv60lDWa0imR8/24WwXXvBWJT1KnwVdZcjvhCwz9IiJCw==} - engines: {node: '>=12'} - - '@tanstack/query-core@5.90.5': - resolution: {integrity: sha512-wLamYp7FaDq6ZnNehypKI5fNvxHPfTYylE0m/ZpuuzJfJqhR5Pxg9gvGBHZx4n7J+V5Rg5mZxHHTlv25Zt5u+w==} - - '@tanstack/react-form@1.23.7': - resolution: {integrity: sha512-p/j9Gi2+s135sOjj48RjM+6xZQr1FVpliQlETLYBEGmmmxWHgYYs2b62mTDSnuv7AqtuZhpQ+t0CRFVfbQLsFA==} - peerDependencies: - '@tanstack/react-start': ^1.130.10 - react: ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - '@tanstack/react-start': - optional: true - - '@tanstack/react-query@5.90.5': - resolution: {integrity: sha512-pN+8UWpxZkEJ/Rnnj2v2Sxpx1WFlaa9L6a4UO89p6tTQbeo+m0MS8oYDjbggrR8QcTyjKoYWKS3xJQGr3ExT8Q==} - peerDependencies: - react: ^18 || ^19 - - '@tanstack/react-router-devtools@1.133.15': - resolution: {integrity: sha512-EBkWLTdafkWY+M0A32qeFMSJc6SLU3DBg2oPQ4zDOy55BTeFSRMw7Y2z3V00BwO2eGI+yB73Ym/Noy28qGySvQ==} - engines: {node: '>=12'} - peerDependencies: - '@tanstack/react-router': ^1.133.15 - react: '>=18.0.0 || >=19.0.0' - react-dom: '>=18.0.0 || >=19.0.0' - - '@tanstack/react-router@1.133.15': - resolution: {integrity: sha512-3gQitqq/5lL//KSv9Ro34Fw7xak2ZQcPbR7x6bu5X4W0v97xTE7+bMbBS5UAg9zXTq0FNyB124GabgyBgeQ0NA==} - engines: {node: '>=12'} - peerDependencies: - react: '>=18.0.0 || >=19.0.0' - react-dom: '>=18.0.0 || >=19.0.0' - - '@tanstack/react-store@0.7.7': - resolution: {integrity: sha512-qqT0ufegFRDGSof9D/VqaZgjNgp4tRPHZIJq2+QIHkMUtHjaJ0lYrrXjeIUJvjnTbgPfSD1XgOMEt0lmANn6Zg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - - '@tanstack/router-core@1.133.15': - resolution: {integrity: sha512-ZWAmoFcgi27Ojv2FH3Dq3D6Vt73LswdTnA1tyHShNWQf7wOMH/VKKB9JxiXJqpLTK4NJqpnUp/x0/3nvmdrIqg==} - engines: {node: '>=12'} - - '@tanstack/router-devtools-core@1.133.15': - resolution: {integrity: sha512-TseqoP0fRfgkdb1kYzPC0S8td3pRt04BudOpenCabn8/f1EDmraxHdWh5O7S5x0VXr9dpvnj0KAUG+ip7x+iEg==} - engines: {node: '>=12'} - peerDependencies: - '@tanstack/router-core': ^1.133.15 - csstype: ^3.0.10 - solid-js: '>=1.9.5' - tiny-invariant: ^1.3.3 - peerDependenciesMeta: - csstype: - optional: true - - '@tanstack/router-generator@1.133.15': - resolution: {integrity: sha512-TXI07UzV5t1j1LeJ2eOErV9TxvzBRx2oSCEmkVaWMXaGKuQL7I4VB9e9w15ylHnvCO2Z/4DgIhUVF6h9/ZS3Mw==} - engines: {node: '>=12'} - - '@tanstack/router-plugin@1.133.15': - resolution: {integrity: sha512-c3m7Pfuth/TXiRol0OpTw+cJyE7RxJpiMXDLooCiZgRDu2VhyXaanPLuuti9vyZiVdSrVZTQ7tJBFABymWbX5w==} - engines: {node: '>=12'} - peerDependencies: - '@rsbuild/core': '>=1.0.2' - '@tanstack/react-router': ^1.133.15 - vite: '>=5.0.0 || >=6.0.0 || >=7.0.0' - vite-plugin-solid: ^2.11.8 - webpack: '>=5.92.0' - peerDependenciesMeta: - '@rsbuild/core': - optional: true - '@tanstack/react-router': - optional: true - vite: - optional: true - vite-plugin-solid: - optional: true - webpack: - optional: true - - '@tanstack/router-utils@1.133.3': - resolution: {integrity: sha512-miPFlt0aG6ID5VDolYuRXgLS7cofvbZGMvHwf2Wmyxjo6GLp/kxxpkQrfM4T1I5cwjwYZZAQmdUKbVHwFZz9sQ==} - engines: {node: '>=12'} - - '@tanstack/store@0.7.7': - resolution: {integrity: sha512-xa6pTan1bcaqYDS9BDpSiS63qa6EoDkPN9RsRaxHuDdVDNntzq3xNwR5YKTU/V3SkSyC9T4YVOPh2zRQN0nhIQ==} + '@so-ric/colorspace@1.1.6': + resolution: {integrity: sha512-/KiKkpHNOBgkFJwu9sh48LkHSMYGyuTcSFK/qMBdnOAlrRJzRSXAOFB5qwzaVQuDl8wAvHVMkaASQDReTahxuw==} - '@tanstack/virtual-file-routes@1.133.3': - resolution: {integrity: sha512-6d2AP9hAjEi8mcIew2RkxBX+wClH1xedhfaYhs8fUiX+V2Cedk7RBD9E9ww2z6BGUYD8Es4fS0OIrzXZWHKGhw==} - engines: {node: '>=12'} + '@standard-schema/spec@1.0.0': + resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} - '@tanstack/zod-form-adapter@0.42.1': - resolution: {integrity: sha512-hPRM0lawVKP64yurW4c6KHZH6altMo2MQN14hfi+GMBTKjO9S7bW1x5LPZ5cayoJE3mBvdlahpSGT5rYZtSbXQ==} - peerDependencies: - zod: ^3.x + '@swc/helpers@0.5.17': + resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} '@types/body-parser@1.19.6': resolution: {integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==} @@ -1599,6 +1102,12 @@ packages: '@types/cors@2.8.19': resolution: {integrity: sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==} + '@types/debug@4.1.12': + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + + '@types/estree-jsx@1.0.5': + resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} + '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} @@ -1608,21 +1117,45 @@ packages: '@types/express@4.17.23': resolution: {integrity: sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ==} + '@types/fontkit@2.0.8': + resolution: {integrity: sha512-wN+8bYxIpJf+5oZdrdtaX04qUuWHcKxcDEgRS9Qm9ZClSHjzEn13SxUC+5eRM+4yXIeTYk8mTzLAWGF64847ew==} + + '@types/hast@3.0.4': + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + '@types/http-errors@2.0.5': resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==} + '@types/js-yaml@4.0.9': + resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} + '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} '@types/jsonwebtoken@9.0.10': resolution: {integrity: sha512-asx5hIG9Qmf/1oStypjanR7iKTv0gXQ1Ov/jfrX6kS/EO0OFni8orbmGCn0672NHR3kXHwpAwR+B368ZGN/2rA==} + '@types/mdast@4.0.4': + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + + '@types/mdx@2.0.13': + resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} + '@types/mime@1.3.5': resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + '@types/nlcst@2.0.3': + resolution: {integrity: sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==} + + '@types/node@12.20.55': + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + + '@types/node@17.0.45': + resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} + '@types/node@20.19.22': resolution: {integrity: sha512-hRnu+5qggKDSyWHlnmThnUqg62l29Aj/6vcYgUaSFL9oc7DVjeWEQN3PRgdSc6F8d9QRMWkf36CLMch1Do/+RQ==} @@ -1641,13 +1174,8 @@ packages: '@types/range-parser@1.2.7': resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} - '@types/react-dom@19.2.2': - resolution: {integrity: sha512-9KQPoO6mZCi7jcIStSnlOWn2nEF3mNmyr3rIAsGnAbQKYbRLyqmeSc39EVgtxXVia+LMT8j3knZLAZAh+xLmrw==} - peerDependencies: - '@types/react': ^19.2.0 - - '@types/react@19.2.2': - resolution: {integrity: sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==} + '@types/sax@1.2.7': + resolution: {integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==} '@types/send@0.17.5': resolution: {integrity: sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==} @@ -1667,6 +1195,12 @@ packages: '@types/triple-beam@1.3.5': resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==} + '@types/unist@2.0.11': + resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} + + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + '@types/ws@8.18.1': resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} @@ -1678,14 +1212,6 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/eslint-plugin@8.46.1': - resolution: {integrity: sha512-rUsLh8PXmBjdiPY+Emjz9NX2yHvhS11v0SR6xNJkm5GM1MO9ea/1GoDKlHHZGrOJclL/cZ2i/vRUYVtjRhrHVQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - '@typescript-eslint/parser': ^8.46.1 - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.40.0': resolution: {integrity: sha512-jCNyAuXx8dr5KJMkecGmZ8KI61KBUhkCob+SD+C+I5+Y1FWI2Y3QmY4/cxMCC5WAsZqoEtEETVhUiUMIGCf6Bw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1693,45 +1219,22 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.46.1': - resolution: {integrity: sha512-6JSSaBZmsKvEkbRUkf7Zj7dru/8ZCrJxAqArcLaVMee5907JdtEbKGsZ7zNiIm/UAkpGUkaSMZEXShnN2D1HZA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.40.0': resolution: {integrity: sha512-/A89vz7Wf5DEXsGVvcGdYKbVM9F7DyFXj52lNYUDS1L9yJfqjW/fIp5PgMuEJL/KeqVTe2QSbXAGUZljDUpArw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.46.1': - resolution: {integrity: sha512-FOIaFVMHzRskXr5J4Jp8lFVV0gz5ngv3RHmn+E4HYxSJ3DgDzU7fVI1/M7Ijh1zf6S7HIoaIOtln1H5y8V+9Zg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/scope-manager@8.40.0': resolution: {integrity: sha512-y9ObStCcdCiZKzwqsE8CcpyuVMwRouJbbSrNuThDpv16dFAj429IkM6LNb1dZ2m7hK5fHyzNcErZf7CEeKXR4w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/scope-manager@8.46.1': - resolution: {integrity: sha512-weL9Gg3/5F0pVQKiF8eOXFZp8emqWzZsOJuWRUNtHT+UNV2xSJegmpCNQHy37aEQIbToTq7RHKhWvOsmbM680A==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.40.0': resolution: {integrity: sha512-jtMytmUaG9d/9kqSl/W3E3xaWESo4hFDxAIHGVW/WKKtQhesnRIJSAJO6XckluuJ6KDB5woD1EiqknriCtAmcw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/tsconfig-utils@8.46.1': - resolution: {integrity: sha512-X88+J/CwFvlJB+mK09VFqx5FE4H5cXD+H/Bdza2aEWkSb8hnWIQorNcscRl4IEo1Cz9VI/+/r/jnGWkbWPx54g==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.40.0': resolution: {integrity: sha512-eE60cK4KzAc6ZrzlJnflXdrMqOBaugeukWICO2rB0KNvwdIMaEaYiywwHMzA1qFpTxrLhN9Lp4E/00EgWcD3Ow==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1739,33 +1242,16 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.46.1': - resolution: {integrity: sha512-+BlmiHIiqufBxkVnOtFwjah/vrkF4MtKKvpXrKSPLCkCtAp8H01/VV43sfqA98Od7nJpDcFnkwgyfQbOG0AMvw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/types@8.40.0': resolution: {integrity: sha512-ETdbFlgbAmXHyFPwqUIYrfc12ArvpBhEVgGAxVYSwli26dn8Ko+lIo4Su9vI9ykTZdJn+vJprs/0eZU0YMAEQg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.46.1': - resolution: {integrity: sha512-C+soprGBHwWBdkDpbaRC4paGBrkIXxVlNohadL5o0kfhsXqOC6GYH2S/Obmig+I0HTDl8wMaRySwrfrXVP8/pQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.40.0': resolution: {integrity: sha512-k1z9+GJReVVOkc1WfVKs1vBrR5MIKKbdAjDTPvIK3L8De6KbFfPFt6BKpdkdk7rZS2GtC/m6yI5MYX+UsuvVYQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/typescript-estree@8.46.1': - resolution: {integrity: sha512-uIifjT4s8cQKFQ8ZBXXyoUODtRoAd7F7+G8MKmtzj17+1UbdzFl52AzRyZRyKqPHhgzvXunnSckVu36flGy8cg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.40.0': resolution: {integrity: sha512-Cgzi2MXSZyAUOY+BFwGs17s7ad/7L+gKt6Y8rAVVWS+7o6wrjeFN4nVfTpbE25MNcxyJ+iYUXflbs2xR9h4UBg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1773,26 +1259,38 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.46.1': - resolution: {integrity: sha512-vkYUy6LdZS7q1v/Gxb2Zs7zziuXN0wxqsetJdeZdRe/f5dwJFglmuvZBfTUivCtjH725C1jWCDfpadadD95EDQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/visitor-keys@8.40.0': resolution: {integrity: sha512-8CZ47QwalyRjsypfwnbI3hKy5gJDPmrkLjkgMxhi0+DZZ2QNx2naS6/hWoVYUHU7LU2zleF68V9miaVZvhFfTA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/visitor-keys@8.46.1': - resolution: {integrity: sha512-ptkmIf2iDkNUjdeu2bQqhFPV1m6qTnFFjg7PPDjxKWaMaP0Z6I9l30Jr3g5QqbZGdw8YdYvLp+XnqnWWZOg/NA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@ungap/structured-clone@1.3.0': + resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} - '@vitejs/plugin-react-swc@4.1.0': - resolution: {integrity: sha512-Ff690TUck0Anlh7wdIcnsVMhofeEVgm44Y4OYdeeEEPSKyZHzDI9gfVBvySEhDfXtBp8tLCbfsVKPWEMEjq8/g==} - engines: {node: ^20.19.0 || >=22.12.0} + '@volar/kit@2.4.23': + resolution: {integrity: sha512-YuUIzo9zwC2IkN7FStIcVl1YS9w5vkSFEZfPvnu0IbIMaR9WHhc9ZxvlT+91vrcSoRY469H2jwbrGqpG7m1KaQ==} peerDependencies: - vite: ^4 || ^5 || ^6 || ^7 + typescript: '*' + + '@volar/language-core@2.4.23': + resolution: {integrity: sha512-hEEd5ET/oSmBC6pi1j6NaNYRWoAiDhINbT8rmwtINugR39loROSlufGdYMF9TaKGfz+ViGs1Idi3mAhnuPcoGQ==} + + '@volar/language-server@2.4.23': + resolution: {integrity: sha512-k0iO+tybMGMMyrNdWOxgFkP0XJTdbH0w+WZlM54RzJU3WZSjHEupwL30klpM7ep4FO6qyQa03h+VcGHD4Q8gEg==} + + '@volar/language-service@2.4.23': + resolution: {integrity: sha512-h5mU9DZ/6u3LCB9xomJtorNG6awBNnk9VuCioGsp6UtFiM8amvS5FcsaC3dabdL9zO0z+Gq9vIEMb/5u9K6jGQ==} + + '@volar/source-map@2.4.23': + resolution: {integrity: sha512-Z1Uc8IB57Lm6k7q6KIDu/p+JWtf3xsXJqAX/5r18hYOTpJyBn0KXUR8oTJ4WFYOcDzWC9n3IflGgHowx6U6z9Q==} + + '@volar/typescript@2.4.23': + resolution: {integrity: sha512-lAB5zJghWxVPqfcStmAP1ZqQacMpe90UrP5RJ3arDyrhy4aCUQqmxPPLB2PWDKugvylmO41ljK7vZ+t6INMTag==} + + '@vscode/emmet-helper@2.11.0': + resolution: {integrity: sha512-QLxjQR3imPZPQltfbWRnHU6JecWTF1QSWhx3GAKQpslx7y3Dp6sIIXhKjiUJ/BR9FX8PVthjr9PD6pNwOJfAzw==} + + '@vscode/l10n@0.0.18': + resolution: {integrity: sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ==} JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} @@ -1817,6 +1315,13 @@ packages: ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + ansi-align@3.0.1: + resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} + + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + ansi-escapes@3.2.0: resolution: {integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==} engines: {node: '>=4'} @@ -1837,6 +1342,10 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} + engines: {node: '>=12'} + ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} engines: {node: '>=4'} @@ -1845,20 +1354,26 @@ packages: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} - ansis@4.2.0: - resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==} - engines: {node: '>=14'} + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} + engines: {node: '>=12'} anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} + arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - aria-hidden@1.2.6: - resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} - engines: {node: '>=10'} + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} array-buffer-byte-length@1.0.2: resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} @@ -1874,6 +1389,9 @@ packages: resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==} engines: {node: '>= 0.4'} + array-iterate@2.0.1: + resolution: {integrity: sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==} + array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} @@ -1898,9 +1416,19 @@ packages: resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} engines: {node: '>= 0.4'} - ast-types@0.16.1: - resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} - engines: {node: '>=4'} + astring@1.9.0: + resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} + hasBin: true + + astro-expressive-code@0.41.3: + resolution: {integrity: sha512-u+zHMqo/QNLE2eqYRCrK3+XMlKakv33Bzuz+56V1gs8H0y6TZ0hIi3VNbIxeTn51NLn+mJfUV/A0kMNfE4rANw==} + peerDependencies: + astro: ^4.0.0-beta || ^5.0.0-beta || ^3.3.0 + + astro@5.15.1: + resolution: {integrity: sha512-VM679M1qxOjGo6q3vKYDNDddkALGgMopG93IwbEXd3Buc2xVLuuPj4HNziNugSbPQx5S6UReMp5uzw10EJN81A==} + engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0'} + hasBin: true async-function@1.0.0: resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} @@ -1923,18 +1451,31 @@ packages: axios@1.12.2: resolution: {integrity: sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==} - babel-dead-code-elimination@1.0.10: - resolution: {integrity: sha512-DV5bdJZTzZ0zn0DC24v3jD7Mnidh6xhKa4GfKCbq3sfW8kaWhDdZjP3i81geA8T33tdYqWKw4D3fVv0CwEgKVA==} + axobject-query@4.1.0: + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} + engines: {node: '>= 0.4'} + + bail@2.0.2: + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + base-64@1.0.0: + resolution: {integrity: sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==} + base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - baseline-browser-mapping@2.8.18: - resolution: {integrity: sha512-UYmTpOBwgPScZpS4A+YbapwWuBwasxvO/2IOHArSsAhL/+ZdmATBXTex3t+l2hXwLVYK382ibr/nKoY9GKe86w==} - hasBin: true + bcp-47-match@2.0.3: + resolution: {integrity: sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ==} + + bcp-47@2.1.0: + resolution: {integrity: sha512-9IIS3UPrvIa1Ej+lVDdDwO7zLehjqsaByECw0bu2RRGP73jALm6FYbzI5gWbgHLvNdkvfXB5YrSbocZdOS0c0w==} + + better-path-resolve@1.0.0: + resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} + engines: {node: '>=4'} binary-extensions@2.3.0: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} @@ -1947,6 +1488,13 @@ packages: resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + boxen@8.0.1: + resolution: {integrity: sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==} + engines: {node: '>=18'} + brace-expansion@1.1.12: resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} @@ -1957,10 +1505,8 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.26.3: - resolution: {integrity: sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true + brotli@1.3.3: + resolution: {integrity: sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==} buffer-equal-constant-time@1.0.1: resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} @@ -2007,8 +1553,12 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - caniuse-lite@1.0.30001751: - resolution: {integrity: sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==} + camelcase@8.0.0: + resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} + engines: {node: '>=16'} + + ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} @@ -2022,9 +1572,24 @@ packages: resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + + character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + + character-entities@2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + + character-reference-invalid@2.0.1: + resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + chardet@2.1.0: + resolution: {integrity: sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==} + chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} @@ -2033,15 +1598,20 @@ packages: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} - chownr@3.0.0: - resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} - engines: {node: '>=18'} + ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + + ci-info@4.3.1: + resolution: {integrity: sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==} + engines: {node: '>=8'} citty@0.1.6: resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} - class-variance-authority@0.7.1: - resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} + cli-boxes@3.0.0: + resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} + engines: {node: '>=10'} cli-cursor@2.1.0: resolution: {integrity: sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==} @@ -2070,10 +1640,17 @@ packages: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} + clone@2.1.2: + resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} + engines: {node: '>=0.8'} + clsx@2.1.1: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} + collapse-white-space@2.1.0: + resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==} + color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} @@ -2107,6 +1684,9 @@ packages: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} + comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + commander@6.2.0: resolution: {integrity: sha512-zP4jEKbe8SHzKJYQmq8Y9gYjtO/POJLgIdKgV7B9qNmABVFVc+ctqSX6iXh4mCpJfRBOabiZ2YKPg8ciDw6C+Q==} engines: {node: '>= 6'} @@ -2120,6 +1700,9 @@ packages: engines: {node: '>= 12'} hasBin: true + common-ancestor-path@1.0.1: + resolution: {integrity: sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==} + compare-func@2.0.0: resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} @@ -2165,11 +1748,8 @@ packages: engines: {node: '>=16'} hasBin: true - convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - - cookie-es@2.0.0: - resolution: {integrity: sha512-RAj4E421UYRgqokKUmotqAwuplYw15qtdXfY+hGzgCJ/MBjCVZcSoHK/kH9kocfjRjcDME7IiDWR/1WX1TM2Pg==} + cookie-es@1.2.2: + resolution: {integrity: sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==} cookie-signature@1.0.6: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} @@ -2178,6 +1758,10 @@ packages: resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} engines: {node: '>= 0.6'} + cookie@1.0.2: + resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} + engines: {node: '>=18'} + cors@2.8.5: resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} engines: {node: '>= 0.10'} @@ -2203,8 +1787,20 @@ packages: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} - csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + crossws@0.3.5: + resolution: {integrity: sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==} + + css-selector-parser@3.1.3: + resolution: {integrity: sha512-gJMigczVZqYAk0hPVzx/M4Hm1D9QOtqkdQk9005TNzDIUGzo5cnHEDiKUT7jGPximL/oYb+LIitcHFQ4aKupxg==} + + css-tree@3.1.0: + resolution: {integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true cz-conventional-changelog@3.3.0: resolution: {integrity: sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw==} @@ -2230,6 +1826,9 @@ packages: resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} engines: {node: '>= 0.4'} + dataloader@1.4.0: + resolution: {integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==} + debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: @@ -2247,8 +1846,8 @@ packages: supports-color: optional: true - decode-formdata@0.9.0: - resolution: {integrity: sha512-q5uwOjR3Um5YD+ZWPOF/1sGHVW9A5rCrRwITQChRXlmPkxDFBqCm4jNTIVdGHNH9OnR+V9MoZVgRhsFb+ARbUw==} + decode-named-character-reference@1.2.0: + resolution: {integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==} dedent@0.7.0: resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} @@ -2282,6 +1881,10 @@ packages: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + destr@2.0.5: resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} @@ -2301,20 +1904,34 @@ packages: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} - detect-node-es@1.1.0: - resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} + deterministic-object-hash@2.0.2: + resolution: {integrity: sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ==} + engines: {node: '>=18'} devalue@5.4.1: resolution: {integrity: sha512-YtoaOfsqjbZQKGIMRYDWKjUmSB4VJ/RElB+bXZawQAQYAo4xu08GKTMVlsZDTF6R2MbAgjcAQRPI5eIyRAT2OQ==} - diff@8.0.2: - resolution: {integrity: sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==} + devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + + dfa@1.2.0: + resolution: {integrity: sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==} + + diff@5.2.0: + resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} engines: {node: '>=0.3.1'} dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} + direction@2.0.1: + resolution: {integrity: sha512-9S6m9Sukh1cZNknO1CWAr2QAWsbKLafQiyM5gZ7VgXHeuaoUwffKN4q6NC4A/Mf9iiPlOXQEKW/Mv/mh9/3YFA==} + hasBin: true + + dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + doctrine@2.1.0: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} engines: {node: '>=0.10.0'} @@ -2347,6 +1964,14 @@ packages: resolution: {integrity: sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==} engines: {node: '>=12'} + dotenv@8.6.0: + resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==} + engines: {node: '>=10'} + + dset@3.1.4: + resolution: {integrity: sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==} + engines: {node: '>=4'} + dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} @@ -2363,8 +1988,11 @@ packages: effect@3.16.12: resolution: {integrity: sha512-N39iBk0K71F9nb442TLbTkjl24FLUzuvx2i1I2RsEAQsdAdUTuUoW0vlfUXgkMTUOnYqKnWcFfqw4hK4Pw27hg==} - electron-to-chromium@1.5.237: - resolution: {integrity: sha512-icUt1NvfhGLar5lSWH3tHNzablaA5js3HVHacQimfP8ViEBOQv+L7DKEuHdbTZ0SKCO1ogTJTIL1Gwk9S6Qvcg==} + emmet@2.4.11: + resolution: {integrity: sha512-23QPJB3moh/U9sT4rQzGgeyyGIrcM+GH5uVYg2C6wZIxAIJq7Ng3QLT79tl8FUwDXhyq9SusfknOrofAKqvgyQ==} + + emoji-regex@10.6.0: + resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -2384,9 +2012,13 @@ packages: resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} engines: {node: '>= 0.8'} - enhanced-resolve@5.18.3: - resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==} - engines: {node: '>=10.13.0'} + enquirer@2.4.1: + resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} + engines: {node: '>=8.6'} + + entities@6.0.1: + resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} + engines: {node: '>=0.12'} env-paths@2.2.1: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} @@ -2411,6 +2043,9 @@ packages: resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} engines: {node: '>= 0.4'} + es-module-lexer@1.7.0: + resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + es-object-atoms@1.1.1: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} @@ -2427,6 +2062,12 @@ packages: resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} + esast-util-from-estree@2.0.0: + resolution: {integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==} + + esast-util-from-js@2.0.1: + resolution: {integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==} + esbuild@0.25.11: resolution: {integrity: sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==} engines: {node: '>=18'} @@ -2447,6 +2088,10 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + eslint-config-prettier@10.1.1: resolution: {integrity: sha512-4EQQr6wXwS+ZJSzaR5ZCrYgLxqvUjdXctaEtBqHcbkW944B1NQyO4qpdHQbXBONfwxXdkAY81HH4+LUfrg+zPw==} hasBin: true @@ -2463,11 +2108,6 @@ packages: peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 - eslint-plugin-react-refresh@0.4.24: - resolution: {integrity: sha512-nLHIW7TEq3aLrEYWpVaJ1dRgFR+wLDPN8e8FpYAql/bMV2oBEfC37K0gLEGgv9fy66juNShSMV8OkTqzltcG/w==} - peerDependencies: - eslint: '>=8.40' - eslint-plugin-react@7.37.5: resolution: {integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==} engines: {node: '>=4'} @@ -2502,16 +2142,6 @@ packages: jiti: optional: true - eslint@9.38.0: - resolution: {integrity: sha512-t5aPOpmtJcZcz5UJyY2GbvpDlsK5E8JqRqoKtfiKE3cNh437KIqfJr3A3AKf5k64NPx6d0G3dno6XDY05PqPtw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - hasBin: true - peerDependencies: - jiti: '*' - peerDependenciesMeta: - jiti: - optional: true - espree@10.4.0: resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2533,6 +2163,30 @@ packages: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} + estree-util-attach-comments@3.0.0: + resolution: {integrity: sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==} + + estree-util-build-jsx@3.0.1: + resolution: {integrity: sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==} + + estree-util-is-identifier-name@3.0.0: + resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} + + estree-util-scope@1.0.0: + resolution: {integrity: sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==} + + estree-util-to-js@2.0.0: + resolution: {integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==} + + estree-util-visit@2.0.0: + resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==} + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} @@ -2541,6 +2195,9 @@ packages: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + expand-tilde@2.0.2: resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==} engines: {node: '>=0.10.0'} @@ -2555,9 +2212,18 @@ packages: resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} engines: {node: '>= 0.10.0'} + expressive-code@0.41.3: + resolution: {integrity: sha512-YLnD62jfgBZYrXIPQcJ0a51Afv9h8VlWqEGK9uU2T5nL/5rb8SnA86+7+mgCZe5D34Tff5RNEA5hjNVJYHzrFg==} + exsolve@1.0.7: resolution: {integrity: sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==} + extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + + extendable-error@0.1.7: + resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} + external-editor@3.1.0: resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} engines: {node: '>=4'} @@ -2631,6 +2297,10 @@ packages: find-root@1.1.0: resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} @@ -2650,6 +2320,10 @@ packages: flatted@3.3.3: resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + flattie@1.1.1: + resolution: {integrity: sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==} + engines: {node: '>=8'} + fn.name@1.1.0: resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} @@ -2662,6 +2336,12 @@ packages: debug: optional: true + fontace@0.3.1: + resolution: {integrity: sha512-9f5g4feWT1jWT8+SbL85aLIRLIXUaDygaM2xPXRmzPYxrOMNok79Lr3FGJoKVNKibE0WCunNiEVG2mwuE+2qEg==} + + fontkit@2.0.4: + resolution: {integrity: sha512-syetQadaUEDNdxdugga9CpEYVaQIxOwk7GlwZWWZ19//qW4zE5bknOKeMBDYAASwnpaSHKJITRLMF9m1fp3s6g==} + for-each@0.3.5: resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} engines: {node: '>= 0.4'} @@ -2678,6 +2358,14 @@ packages: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} + fs-extra@7.0.1: + resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} + engines: {node: '>=6 <7 || >=8'} + + fs-extra@8.1.0: + resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} + engines: {node: '>=6 <7 || >=8'} + fs-extra@9.1.0: resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} engines: {node: '>=10'} @@ -2700,22 +2388,18 @@ packages: functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} + get-east-asian-width@1.4.0: + resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==} + engines: {node: '>=18'} + get-intrinsic@1.3.0: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} - get-nonce@1.0.1: - resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} - engines: {node: '>=6'} - get-proto@1.0.1: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} @@ -2736,6 +2420,9 @@ packages: engines: {node: '>=16'} hasBin: true + github-slugger@2.0.0: + resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} + glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -2772,10 +2459,6 @@ packages: resolution: {integrity: sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==} engines: {node: '>=18'} - globals@16.4.0: - resolution: {integrity: sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==} - engines: {node: '>=18'} - globalthis@1.0.4: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} @@ -2784,11 +2467,6 @@ packages: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} - goober@2.1.18: - resolution: {integrity: sha512-2vFqsaDVIT9Gz7N6kAL++pLpp41l3PfDuusHcjnGLfR6+huZkl6ziX+zgVC3ZxpqWhzH6pyDdGrCeDhMIvwaxw==} - peerDependencies: - csstype: ^3.0.10 - gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} @@ -2799,6 +2477,9 @@ packages: graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + h3@1.15.4: + resolution: {integrity: sha512-z5cFQWDffyOe4vQ9xIqNfCZdV4p//vy6fBnr8Q1AWnVZ0teurKMG66rLj++TKwKPUP3u7iMUvrvKaEUiQw2QWQ==} + has-bigints@1.1.0: resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} engines: {node: '>= 0.4'} @@ -2830,6 +2511,66 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} + hast-util-embedded@3.0.0: + resolution: {integrity: sha512-naH8sld4Pe2ep03qqULEtvYr7EjrLK2QHY8KJR6RJkTUjPGObe1vnx585uzem2hGra+s1q08DZZpfgDVYRbaXA==} + + hast-util-format@1.1.0: + resolution: {integrity: sha512-yY1UDz6bC9rDvCWHpx12aIBGRG7krurX0p0Fm6pT547LwDIZZiNr8a+IHDogorAdreULSEzP82Nlv5SZkHZcjA==} + + hast-util-from-html@2.0.3: + resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==} + + hast-util-from-parse5@8.0.3: + resolution: {integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==} + + hast-util-has-property@3.0.0: + resolution: {integrity: sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA==} + + hast-util-is-body-ok-link@3.0.1: + resolution: {integrity: sha512-0qpnzOBLztXHbHQenVB8uNuxTnm/QBFUOmdOSsEn7GnBtyY07+ENTWVFBAnXd/zEgd9/SUG3lRY7hSIBWRgGpQ==} + + hast-util-is-element@3.0.0: + resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} + + hast-util-minify-whitespace@1.0.1: + resolution: {integrity: sha512-L96fPOVpnclQE0xzdWb/D12VT5FabA7SnZOUMtL1DbXmYiHJMXZvFkIZfiMmTCNJHUeO2K9UYNXoVyfz+QHuOw==} + + hast-util-parse-selector@4.0.0: + resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} + + hast-util-phrasing@3.0.1: + resolution: {integrity: sha512-6h60VfI3uBQUxHqTyMymMZnEbNl1XmEGtOxxKYL7stY2o601COo62AWAYBQR9lZbYXYSBoxag8UpPRXK+9fqSQ==} + + hast-util-raw@9.1.0: + resolution: {integrity: sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==} + + hast-util-select@6.0.4: + resolution: {integrity: sha512-RqGS1ZgI0MwxLaKLDxjprynNzINEkRHY2i8ln4DDjgv9ZhcYVIHN9rlpiYsqtFwrgpYU361SyWDQcGNIBVu3lw==} + + hast-util-to-estree@3.1.3: + resolution: {integrity: sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==} + + hast-util-to-html@9.0.5: + resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} + + hast-util-to-jsx-runtime@2.3.6: + resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==} + + hast-util-to-parse5@8.0.0: + resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==} + + hast-util-to-string@3.0.1: + resolution: {integrity: sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==} + + hast-util-to-text@4.0.2: + resolution: {integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==} + + hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + + hastscript@9.0.1: + resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==} + helmet@7.2.0: resolution: {integrity: sha512-ZRiwvN089JfMXokizgqEPXsl2Guk094yExfoDXR0cBYWxtBbaSww/w+vT4WEJsBW2iTUi1GgZ6swmoug3Oy4Xw==} engines: {node: '>=16.0.0'} @@ -2838,19 +2579,42 @@ packages: resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} engines: {node: '>=0.10.0'} + html-escaper@3.0.3: + resolution: {integrity: sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==} + + html-void-elements@3.0.0: + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + + html-whitespace-sensitive-tag-names@3.0.1: + resolution: {integrity: sha512-q+310vW8zmymYHALr1da4HyXUQ0zgiIwIicEfotYPWGN0OJVEN/58IJ3A4GBYcEq3LGAZqKb+ugvP0GNB9CEAA==} + + http-cache-semantics@4.2.0: + resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} + http-errors@2.0.0: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} + human-id@4.1.2: + resolution: {integrity: sha512-v/J+4Z/1eIJovEBdlV5TYj1IR+ZiohcYGRY+qN/oC9dAfKzVT023N/Bgw37hrKCoVRBvk3bqyzpr2PP5YeTMSg==} + hasBin: true + husky@9.1.7: resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} engines: {node: '>=18'} hasBin: true + i18next@23.16.8: + resolution: {integrity: sha512-06r/TitrM88Mg5FdUXAKL96dJMzgqLE5dv3ryBAra4KCwD9mJ4ndOTS95ZuymIGoE+2hzfdaMak2X11/es7ZWg==} + iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} + iconv-lite@0.7.0: + resolution: {integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==} + engines: {node: '>=0.10.0'} + ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -2887,6 +2651,9 @@ packages: resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + inline-style-parser@0.2.4: + resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==} + inquirer@6.5.2: resolution: {integrity: sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==} engines: {node: '>=6.0.0'} @@ -2903,6 +2670,15 @@ packages: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} + iron-webcrypto@1.2.1: + resolution: {integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==} + + is-alphabetical@2.0.1: + resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} + + is-alphanumerical@2.0.1: + resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} + is-array-buffer@3.0.5: resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} engines: {node: '>= 0.4'} @@ -2942,6 +2718,14 @@ packages: resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} engines: {node: '>= 0.4'} + is-decimal@2.0.1: + resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} + + 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 + is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -2966,6 +2750,14 @@ packages: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} + is-hexadecimal@2.0.1: + resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + is-interactive@1.0.0: resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} engines: {node: '>=8'} @@ -2990,6 +2782,10 @@ packages: resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} engines: {node: '>=8'} + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + is-regex@1.2.1: resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} engines: {node: '>= 0.4'} @@ -3010,6 +2806,10 @@ packages: resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} engines: {node: '>= 0.4'} + is-subdir@1.2.0: + resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} + engines: {node: '>=4'} + is-symbol@1.1.1: resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} engines: {node: '>= 0.4'} @@ -3045,13 +2845,13 @@ packages: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} + is-wsl@3.1.0: + resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} + engines: {node: '>=16'} + isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - isbot@5.1.31: - resolution: {integrity: sha512-DPgQshehErHAqSCKDb3rNW03pa2wS/v5evvUqtxt6TTnHRqAG8FdzcSSJs9656pK6Y+NT7K9R4acEYXLHYfpUQ==} - engines: {node: '>=18'} - isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -3066,14 +2866,13 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - jsesc@3.1.0: - resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} - engines: {node: '>=6'} - hasBin: true - json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} @@ -3089,10 +2888,14 @@ packages: json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true + jsonc-parser@2.3.1: + resolution: {integrity: sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg==} + + jsonc-parser@3.3.1: + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} + + jsonfile@4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} jsonfile@6.2.0: resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} @@ -3118,6 +2921,18 @@ packages: keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + + kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + + klona@2.0.6: + resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} + engines: {node: '>= 8'} + kuler@2.0.0: resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} @@ -3192,6 +3007,10 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} @@ -3267,6 +3086,9 @@ packages: resolution: {integrity: sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==} engines: {node: '>= 12.0.0'} + longest-streak@3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + longest@2.0.1: resolution: {integrity: sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q==} engines: {node: '>=0.10.0'} @@ -3274,21 +3096,83 @@ packages: loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - - lucide-react@0.546.0: - resolution: {integrity: sha512-Z94u6fKT43lKeYHiVyvyR8fT7pwCzDu7RyMPpTvh054+xahSgj4HFQ+NmflvzdXsoAjYGdCguGaFKYuvq0ThCQ==} - peerDependencies: - react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} magic-string@0.30.19: resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==} + magicast@0.3.5: + resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} + + markdown-extensions@2.0.0: + resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} + engines: {node: '>=16'} + + markdown-table@3.0.4: + resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} + math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} + mdast-util-definitions@6.0.0: + resolution: {integrity: sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==} + + mdast-util-directive@3.1.0: + resolution: {integrity: sha512-I3fNFt+DHmpWCYAT7quoM6lHf9wuqtI+oCOfvILnoicNIqjh5E3dEJWiXuYME2gNe8vl1iMQwyUHa7bgFmak6Q==} + + mdast-util-find-and-replace@3.0.2: + resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} + + mdast-util-from-markdown@2.0.2: + resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==} + + mdast-util-gfm-autolink-literal@2.0.1: + resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==} + + mdast-util-gfm-footnote@2.1.0: + resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==} + + mdast-util-gfm-strikethrough@2.0.0: + resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} + + mdast-util-gfm-table@2.0.0: + resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} + + mdast-util-gfm-task-list-item@2.0.0: + resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} + + mdast-util-gfm@3.1.0: + resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==} + + mdast-util-mdx-expression@2.0.1: + resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==} + + mdast-util-mdx-jsx@3.2.0: + resolution: {integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==} + + mdast-util-mdx@3.0.0: + resolution: {integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==} + + mdast-util-mdxjs-esm@2.0.1: + resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==} + + mdast-util-phrasing@4.1.0: + resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} + + mdast-util-to-hast@13.2.0: + resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} + + mdast-util-to-markdown@2.1.2: + resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} + + mdast-util-to-string@4.0.0: + resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + + mdn-data@2.12.2: + resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==} + media-typer@0.3.0: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} @@ -3311,6 +3195,114 @@ packages: resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} engines: {node: '>= 0.6'} + micromark-core-commonmark@2.0.3: + resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} + + micromark-extension-directive@3.0.2: + resolution: {integrity: sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA==} + + micromark-extension-gfm-autolink-literal@2.1.0: + resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} + + micromark-extension-gfm-footnote@2.1.0: + resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==} + + micromark-extension-gfm-strikethrough@2.1.0: + resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} + + micromark-extension-gfm-table@2.1.1: + resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==} + + micromark-extension-gfm-tagfilter@2.0.0: + resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} + + micromark-extension-gfm-task-list-item@2.1.0: + resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==} + + micromark-extension-gfm@3.0.0: + resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} + + micromark-extension-mdx-expression@3.0.1: + resolution: {integrity: sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==} + + micromark-extension-mdx-jsx@3.0.2: + resolution: {integrity: sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==} + + micromark-extension-mdx-md@2.0.0: + resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==} + + micromark-extension-mdxjs-esm@3.0.0: + resolution: {integrity: sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==} + + micromark-extension-mdxjs@3.0.0: + resolution: {integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==} + + micromark-factory-destination@2.0.1: + resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} + + micromark-factory-label@2.0.1: + resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} + + micromark-factory-mdx-expression@2.0.3: + resolution: {integrity: sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==} + + micromark-factory-space@2.0.1: + resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==} + + micromark-factory-title@2.0.1: + resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} + + micromark-factory-whitespace@2.0.1: + resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} + + micromark-util-character@2.1.1: + resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} + + micromark-util-chunked@2.0.1: + resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} + + micromark-util-classify-character@2.0.1: + resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} + + micromark-util-combine-extensions@2.0.1: + resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} + + micromark-util-decode-numeric-character-reference@2.0.2: + resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} + + micromark-util-decode-string@2.0.1: + resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} + + micromark-util-encode@2.0.1: + resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} + + micromark-util-events-to-acorn@2.0.3: + resolution: {integrity: sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==} + + micromark-util-html-tag-name@2.0.1: + resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} + + micromark-util-normalize-identifier@2.0.1: + resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} + + micromark-util-resolve-all@2.0.1: + resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} + + micromark-util-sanitize-uri@2.0.1: + resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} + + micromark-util-subtokenize@2.1.0: + resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==} + + micromark-util-symbol@2.0.1: + resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} + + micromark-util-types@2.0.2: + resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} + + micromark@4.0.2: + resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} + micromatch@4.0.8: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} @@ -3353,24 +3345,27 @@ packages: minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} - engines: {node: '>=16 || 14 >=14.17'} - - minizlib@3.1.0: - resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==} - engines: {node: '>= 18'} - mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true + mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + + mrmime@2.0.1: + resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} + engines: {node: '>=10'} + ms@2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + muggle-string@0.4.1: + resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} + mute-stream@0.0.7: resolution: {integrity: sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==} @@ -3397,20 +3392,39 @@ packages: resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} engines: {node: '>= 0.6'} + neotraverse@0.6.18: + resolution: {integrity: sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==} + engines: {node: '>= 10'} + + nlcst-to-string@4.0.0: + resolution: {integrity: sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==} + node-fetch-native@1.6.7: resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + node-gyp-build@4.8.4: resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} hasBin: true - node-releases@2.0.25: - resolution: {integrity: sha512-4auku8B/vw5psvTiiN9j1dAOsXvMoGqJuKJcR+dTdqiXEK20mMTk1UEo3HS16LeGQsVG6+qKTPM9u/qQ2LqATA==} + node-mock-http@1.0.3: + resolution: {integrity: sha512-jN8dK25fsfnMrVsEhluUTPkBFY+6ybu7jSB1n+ri/vOGjJxU8J9CZhpSGkHXSkFjtUhbmoncG/YG9ta5Ludqog==} normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + nypm@0.6.2: resolution: {integrity: sha512-7eM+hpOtrKrBDCh7Ypu2lJ9Z7PNZBdi/8AT3AX8xoCj43BBVHD0hPSTEvMtkMpfs8FCqBGhxB+uToIQimA111g==} engines: {node: ^14.16.0 || >=16.10.0} @@ -3444,6 +3458,9 @@ packages: resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} engines: {node: '>= 0.4'} + ofetch@1.4.1: + resolution: {integrity: sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==} + ohash@2.0.11: resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} @@ -3469,6 +3486,12 @@ packages: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} + oniguruma-parser@0.12.1: + resolution: {integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==} + + oniguruma-to-es@4.3.3: + resolution: {integrity: sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==} + openapi-types@12.1.3: resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==} @@ -3488,10 +3511,21 @@ packages: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} + outdent@0.5.0: + resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} + own-keys@1.0.1: resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} engines: {node: '>= 0.4'} + p-filter@2.1.0: + resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} + engines: {node: '>=8'} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} @@ -3500,6 +3534,14 @@ packages: resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + p-limit@6.2.0: + resolution: {integrity: sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==} + engines: {node: '>=18'} + + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} @@ -3508,22 +3550,63 @@ packages: resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + p-map@2.1.0: + resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} + engines: {node: '>=6'} + + p-queue@8.1.1: + resolution: {integrity: sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ==} + engines: {node: '>=18'} + + p-timeout@6.1.4: + resolution: {integrity: sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==} + engines: {node: '>=14.16'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + package-manager-detector@0.2.11: + resolution: {integrity: sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==} + + package-manager-detector@1.5.0: + resolution: {integrity: sha512-uBj69dVlYe/+wxj8JOpr97XfsxH/eumMt6HqjNTmJDf/6NO9s+0uxeOneIz3AsPt2m6y9PqzDzd3ATcU17MNfw==} + + pagefind@1.4.0: + resolution: {integrity: sha512-z2kY1mQlL4J8q5EIsQkLzQjilovKzfNVhX8De6oyE6uHpfFtyBaqUpcl/XzJC/4fjD8vBDyh1zolimIcVrCn9g==} + hasBin: true + + pako@0.2.9: + resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==} + parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} + parse-entities@4.0.2: + resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} + parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} + parse-latin@7.0.0: + resolution: {integrity: sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==} + parse-passwd@1.0.0: resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} engines: {node: '>=0.10.0'} + parse5@7.3.0: + resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} + parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} + 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'} @@ -3601,6 +3684,10 @@ packages: resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} engines: {node: '>=12'} + pify@4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + pkg-types@2.3.0: resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} @@ -3612,6 +3699,16 @@ packages: resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} + postcss-nested@6.2.0: + resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + + postcss-selector-parser@6.1.2: + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + engines: {node: '>=4'} + postcss@8.5.6: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} @@ -3636,6 +3733,16 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} + prettier@2.8.7: + resolution: {integrity: sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==} + engines: {node: '>=10.13.0'} + hasBin: true + + prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + prettier@3.6.2: resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} engines: {node: '>=14'} @@ -3650,9 +3757,23 @@ packages: typescript: optional: true + prismjs@1.30.0: + resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} + engines: {node: '>=6'} + + prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + property-information@6.5.0: + resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} + + property-information@7.1.0: + resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} + proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} @@ -3671,6 +3792,9 @@ packages: resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} engines: {node: '>=0.6'} + quansync@0.2.11: + resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} + queue-lit@1.5.2: resolution: {integrity: sha512-tLc36IOPeMAubu8BkW8YDBV+WyIgKlYU7zUNs0J5Vk9skSZ4JfGlPOqplP0aHdfv7HL0B2Pg6nwiq60Qc6M2Hw==} engines: {node: '>=12'} @@ -3678,6 +3802,9 @@ packages: queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + radix3@1.1.2: + resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==} + range-parser@1.2.1: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} @@ -3689,47 +3816,12 @@ packages: rc9@2.1.2: resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==} - react-dom@19.2.0: - resolution: {integrity: sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==} - peerDependencies: - react: ^19.2.0 - react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - react-remove-scroll-bar@2.3.8: - resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - - react-remove-scroll@2.7.1: - resolution: {integrity: sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - react-style-singleton@2.2.3: - resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - react@19.2.0: - resolution: {integrity: sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==} - engines: {node: '>=0.10.0'} + read-yaml-file@1.1.0: + resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} + engines: {node: '>=6'} readable-stream@3.6.2: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} @@ -3739,21 +3831,89 @@ packages: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} - readdirp@4.1.2: - resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} - engines: {node: '>= 14.18.0'} + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} + + recma-build-jsx@1.0.0: + resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==} + + recma-jsx@1.0.1: + resolution: {integrity: sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + recma-parse@1.0.0: + resolution: {integrity: sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==} + + recma-stringify@1.0.0: + resolution: {integrity: sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==} + + reflect.getprototypeof@1.0.10: + resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} + engines: {node: '>= 0.4'} + + regex-recursion@6.0.2: + resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} + + regex-utilities@2.3.0: + resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} + + regex@6.0.1: + resolution: {integrity: sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==} + + regexp.prototype.flags@1.5.4: + resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} + engines: {node: '>= 0.4'} + + rehype-expressive-code@0.41.3: + resolution: {integrity: sha512-8d9Py4c/V6I/Od2VIXFAdpiO2kc0SV2qTJsRAaqSIcM9aruW4ASLNe2kOEo1inXAAkIhpFzAHTc358HKbvpNUg==} + + rehype-format@5.0.1: + resolution: {integrity: sha512-zvmVru9uB0josBVpr946OR8ui7nJEdzZobwLOOqHb/OOD88W0Vk2SqLwoVOj0fM6IPCCO6TaV9CvQvJMWwukFQ==} + + rehype-parse@9.0.1: + resolution: {integrity: sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==} + + rehype-raw@7.0.0: + resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} + + rehype-recma@1.0.0: + resolution: {integrity: sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==} + + rehype-stringify@10.0.1: + resolution: {integrity: sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==} + + rehype@13.0.2: + resolution: {integrity: sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==} + + remark-directive@3.0.1: + resolution: {integrity: sha512-gwglrEQEZcZYgVyG1tQuA+h58EZfq5CSULw7J90AFuCTyib1thgHPoqQ+h9iFvU6R+vnZ5oNFQR5QKgGpk741A==} + + remark-gfm@4.0.1: + resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==} + + remark-mdx@3.1.1: + resolution: {integrity: sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==} + + remark-parse@11.0.0: + resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} - recast@0.23.11: - resolution: {integrity: sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==} - engines: {node: '>= 4'} + remark-rehype@11.1.2: + resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==} - reflect.getprototypeof@1.0.10: - resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} - engines: {node: '>= 0.4'} + remark-smartypants@3.0.2: + resolution: {integrity: sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==} + engines: {node: '>=16.0.0'} - regexp.prototype.flags@1.5.4: - resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} - engines: {node: '>= 0.4'} + remark-stringify@11.0.0: + resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + + request-light@0.5.8: + resolution: {integrity: sha512-3Zjgh+8b5fhRJBQZoy+zbVKpAQGLyka0MPgW3zruTF4dFFJ8Fqcfu9YsAvi/rvdcaTeWG3MkbZv4WKxAn/84Lg==} + + request-light@0.7.0: + resolution: {integrity: sha512-lMbBMrDoxgsyO+yB3sDcrDuX85yYt7sS8BfQd11jtbW/z5ZWgLZRcEGLsLoYw7I0WSUGQBs8CC8ScIxkTX1+6Q==} require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} @@ -3789,6 +3949,21 @@ packages: resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} engines: {node: '>=8'} + restructure@3.0.2: + resolution: {integrity: sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw==} + + retext-latin@4.0.0: + resolution: {integrity: sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==} + + retext-smartypants@6.2.0: + resolution: {integrity: sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==} + + retext-stringify@4.0.0: + resolution: {integrity: sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==} + + retext@9.0.0: + resolution: {integrity: sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==} + reusify@1.1.0: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -3839,8 +4014,8 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - scheduler@0.27.0: - resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} + sax@1.4.1: + resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} @@ -3853,16 +4028,6 @@ packages: resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} engines: {node: '>= 0.8.0'} - seroval-plugins@1.3.3: - resolution: {integrity: sha512-16OL3NnUBw8JG1jBLUoZJsLnQq0n5Ua6aHalhJK4fMQkz1lqR7Osz1sA30trBtd9VUDc2NgkuRCn8+/pBwqZ+w==} - engines: {node: '>=10'} - peerDependencies: - seroval: ^1.0 - - seroval@1.3.2: - resolution: {integrity: sha512-RbcPH1n5cfwKrru7v7+zrZvjLurgHhGyso3HTyGtRivGWgYjbOmGuivCQaORNELjNONoK35nj28EoWul9sb1zQ==} - engines: {node: '>=10'} - serve-static@1.16.2: resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} engines: {node: '>= 0.8.0'} @@ -3882,6 +4047,10 @@ packages: setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + sharp@0.34.4: + resolution: {integrity: sha512-FUH39xp3SBPnxWvd5iib1X8XY7J0K0X7d93sie9CJg2PO8/7gmg89Nve6OjItK53/MlAushNNxteBYfM6DEuoA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -3890,6 +4059,9 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + shiki@3.14.0: + resolution: {integrity: sha512-J0yvpLI7LSig3Z3acIuDLouV5UCKQqu8qOArwMx+/yPVC3WRMgrP67beaG8F+j4xfEWE0eVC4GeBCIXeOPra1g==} + side-channel-list@1.0.0: resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} engines: {node: '>= 0.4'} @@ -3909,29 +4081,47 @@ packages: signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + + sitemap@8.0.1: + resolution: {integrity: sha512-4Y8ynSMFAy/DadeAeio8Kx4zfC8/0VcKi7TH0I1SazvBcrU2fpJaGoeWsX1FMRaHoe3VGMA53DqVoLErZrtG9Q==} + engines: {node: '>=14.0.0', npm: '>=6.0.0'} + hasBin: true + slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} - solid-js@1.9.9: - resolution: {integrity: sha512-A0ZBPJQldAeGCTW0YRYJmt7RCeh5rbFfPZ2aOttgYnctHE7HgKeHCBB/PVc2P7eOfmNXqMFFFoYYdm3S4dcbkA==} + smol-toml@1.4.2: + resolution: {integrity: sha512-rInDH6lCNiEyn3+hH8KVGFdbjc099j47+OSgbMrfDYX1CmXLfdKd7qi6IfcWj2wFxvSVkuI46M+wPGYfEOEj6g==} + 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'} - source-map@0.7.6: resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} engines: {node: '>= 12'} + space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + + spawndamnit@3.0.1: + resolution: {integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==} + split2@4.2.0: resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} engines: {node: '>= 10.x'} + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + stack-trace@0.0.10: resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} @@ -3943,6 +4133,9 @@ packages: resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} engines: {node: '>= 0.4'} + stream-replace-string@2.0.0: + resolution: {integrity: sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w==} + string-width@2.1.1: resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==} engines: {node: '>=4'} @@ -3951,6 +4144,10 @@ packages: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} + string.prototype.matchall@4.0.12: resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} engines: {node: '>= 0.4'} @@ -3973,6 +4170,9 @@ packages: string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + strip-ansi@4.0.0: resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==} engines: {node: '>=4'} @@ -3985,6 +4185,14 @@ packages: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} + strip-ansi@7.1.2: + resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} + engines: {node: '>=12'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + strip-bom@4.0.0: resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} engines: {node: '>=8'} @@ -3993,6 +4201,12 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} + style-to-js@1.1.18: + resolution: {integrity: sha512-JFPn62D4kJaPTnhFUI244MThx+FEGbi+9dw1b9yBBQ+1CZpV7QAT8kUtJ7b7EUNdHajjF/0x8fT+16oLJoojLg==} + + style-to-object@1.0.11: + resolution: {integrity: sha512-5A560JmXr7wDyGLK12Nq/EYS38VkGlglVzkis1JEdbGWSnbQIEhZzTJhzURXN5/8WwwFCs/f/VVcmkTppbXLow==} + supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -4023,24 +4237,14 @@ packages: peerDependencies: express: '>=4.0.0 || >=5.0.0-beta' - tailwind-merge@3.3.1: - resolution: {integrity: sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g==} - - tailwindcss@4.1.14: - resolution: {integrity: sha512-b7pCxjGO98LnxVkKjaZSDeNuljC4ueKUddjENJOADtubtdo8llTaJy7HwBMeLNSSo2N5QIAgklslK1+Ir8r6CA==} - - tapable@2.3.0: - resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} - engines: {node: '>=6'} - - tar@7.5.1: - resolution: {integrity: sha512-nlGpxf+hv0v7GkWBK2V9spgactGOp0qvfWRxUMjqHyzrt3SgwE48DIv/FhqPHJYLHpgW1opq3nERbz5Anq7n1g==} - engines: {node: '>=18'} - temp@0.9.4: resolution: {integrity: sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==} engines: {node: '>=6.0.0'} + term-size@2.2.1: + resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} + engines: {node: '>=8'} + text-extensions@2.4.0: resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==} engines: {node: '>=8'} @@ -4051,11 +4255,8 @@ packages: through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - tiny-invariant@1.3.3: - resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} - - tiny-warning@1.0.3: - resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==} + tiny-inflate@1.0.3: + resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} tinyexec@1.0.1: resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==} @@ -4076,10 +4277,19 @@ packages: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + triple-beam@1.4.1: resolution: {integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==} engines: {node: '>= 14.0.0'} + trough@2.2.0: + resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} + ts-api-utils@2.1.0: resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} engines: {node: '>=18.12'} @@ -4091,6 +4301,16 @@ packages: engines: {node: '>=16.20.2'} hasBin: true + tsconfck@3.1.6: + resolution: {integrity: sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==} + engines: {node: ^18 || >=20} + hasBin: true + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} @@ -4136,9 +4356,6 @@ packages: resolution: {integrity: sha512-5c9Fdsr9qfpT3hA0EyYSFRZj1dVVsb6KIWubA9JBYZ/9ZEAijgUEae0BBR/Xl/wekt4w65/lYLTFaP3JmwSO8w==} hasBin: true - tw-animate-css@1.4.0: - resolution: {integrity: sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ==} - type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -4147,6 +4364,10 @@ packages: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} + type-fest@4.41.0: + resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} + engines: {node: '>=16'} + type-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} @@ -4167,6 +4388,12 @@ packages: resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} engines: {node: '>= 0.4'} + typesafe-path@0.2.2: + resolution: {integrity: sha512-OJabfkAg1WLZSqJAJ0Z6Sdt3utnbzr/jh+NAHoyWHJe8CMSy79Gm085094M9nvTPy22KzTVn5Zq5mbapCI/hPA==} + + typescript-auto-import-cache@0.3.6: + resolution: {integrity: sha512-RpuHXrknHdVdK7wv/8ug3Fr0WNsNi5l5aB8MYYuXhq2UH5lnEB1htJ1smhtD5VeCsGr2p8mUDtd83LCQDFVgjQ==} + typescript-eslint@8.40.0: resolution: {integrity: sha512-Xvd2l+ZmFDPEt4oj1QEXzA4A2uUK6opvKu3eGN9aGjB8au02lIVcLyi375w94hHyejTOmzIU77L8ol2sRg9n7Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -4174,36 +4401,79 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - typescript-eslint@8.46.1: - resolution: {integrity: sha512-VHgijW803JafdSsDO8I761r3SHrgk4T00IdyQ+/UsthtgPRsBWQLqoSxOolxTpxRKi1kGXK0bSz4CoAc9ObqJA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - typescript@5.9.2: resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} engines: {node: '>=14.17'} - typescript@5.9.3: - resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} - engines: {node: '>=14.17'} - hasBin: true + ufo@1.6.1: + resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} + + ultrahtml@1.6.0: + resolution: {integrity: sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==} unbox-primitive@1.1.0: resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} engines: {node: '>= 0.4'} + uncrypto@0.1.3: + resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} + undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} undici-types@7.14.0: resolution: {integrity: sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA==} + unicode-properties@1.4.1: + resolution: {integrity: sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==} + + unicode-trie@2.0.0: + resolution: {integrity: sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==} + unicorn-magic@0.1.0: resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} engines: {node: '>=18'} + unified@11.0.5: + resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} + + unifont@0.6.0: + resolution: {integrity: sha512-5Fx50fFQMQL5aeHyWnZX9122sSLckcDvcfFiBf3QYeHa7a1MKJooUy52b67moi2MJYkrfo/TWY+CoLdr/w0tTA==} + + unist-util-find-after@5.0.0: + resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} + + unist-util-is@6.0.1: + resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} + + unist-util-modify-children@4.0.0: + resolution: {integrity: sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==} + + unist-util-position-from-estree@2.0.0: + resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==} + + unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + + unist-util-remove-position@5.0.0: + resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} + + unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + + unist-util-visit-children@3.0.0: + resolution: {integrity: sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==} + + unist-util-visit-parents@6.0.2: + resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==} + + unist-util-visit@5.0.0: + resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + + universalify@0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + universalify@2.0.1: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} @@ -4212,43 +4482,70 @@ packages: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} - unplugin@2.3.10: - resolution: {integrity: sha512-6NCPkv1ClwH+/BGE9QeoTIl09nuiAt0gS28nn1PvYXsGKRwM2TCbFA2QiilmehPDTXIe684k4rZI1yl3A1PCUw==} - engines: {node: '>=18.12.0'} - - update-browserslist-db@1.1.3: - resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - - uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - - use-callback-ref@1.3.3: - resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} - engines: {node: '>=10'} + unstorage@1.17.1: + resolution: {integrity: sha512-KKGwRTT0iVBCErKemkJCLs7JdxNVfqTPc/85ae1XES0+bsHbc/sFBfVi5kJp156cc51BHinIH2l3k0EZ24vOBQ==} peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + '@azure/app-configuration': ^1.8.0 + '@azure/cosmos': ^4.2.0 + '@azure/data-tables': ^13.3.0 + '@azure/identity': ^4.6.0 + '@azure/keyvault-secrets': ^4.9.0 + '@azure/storage-blob': ^12.26.0 + '@capacitor/preferences': ^6.0.3 || ^7.0.0 + '@deno/kv': '>=0.9.0' + '@netlify/blobs': ^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0 + '@planetscale/database': ^1.19.0 + '@upstash/redis': ^1.34.3 + '@vercel/blob': '>=0.27.1' + '@vercel/functions': ^2.2.12 || ^3.0.0 + '@vercel/kv': ^1.0.1 + aws4fetch: ^1.0.20 + db0: '>=0.2.1' + idb-keyval: ^6.2.1 + ioredis: ^5.4.2 + uploadthing: ^7.4.4 peerDependenciesMeta: - '@types/react': + '@azure/app-configuration': optional: true - - use-sidecar@1.1.3: - resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': + '@azure/cosmos': + optional: true + '@azure/data-tables': + optional: true + '@azure/identity': + optional: true + '@azure/keyvault-secrets': + optional: true + '@azure/storage-blob': + optional: true + '@capacitor/preferences': + optional: true + '@deno/kv': + optional: true + '@netlify/blobs': + optional: true + '@planetscale/database': + optional: true + '@upstash/redis': + optional: true + '@vercel/blob': + optional: true + '@vercel/functions': + optional: true + '@vercel/kv': + optional: true + aws4fetch: + optional: true + db0: + optional: true + idb-keyval: + optional: true + ioredis: + optional: true + uploadthing: optional: true - use-sync-external-store@1.6.0: - resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} user-home@2.0.0: resolution: {integrity: sha512-KMWqdlOcjCYdtIJpicDSFBQ8nFwS2i9sslAd6f4+CBGcU4gist2REnr2fxj2YocvJFxSF3ZOHLYLVZnUxv4BZQ==} @@ -4269,19 +4566,28 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} - vite@7.1.11: - resolution: {integrity: sha512-uzcxnSDVjAopEUjljkWh8EIrg6tlzrjFUfMcR1EVsRDGwf/ccef0qQPRyOrROwhrTDaApueq+ja+KLPlzR/zdg==} - engines: {node: ^20.19.0 || >=22.12.0} + vfile-location@5.0.3: + resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} + + vfile-message@4.0.3: + resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} + + vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + + vite@6.4.1: + resolution: {integrity: sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: - '@types/node': ^20.19.0 || >=22.12.0 + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 jiti: '>=1.21.0' - less: ^4.0.0 + less: '*' lightningcss: ^1.21.0 - sass: ^1.70.0 - sass-embedded: ^1.70.0 - stylus: '>=0.54.8' - sugarss: ^5.0.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' terser: ^5.16.0 tsx: ^4.8.1 yaml: ^2.4.2 @@ -4309,11 +4615,131 @@ packages: yaml: optional: true + vitefu@1.1.1: + resolution: {integrity: sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==} + peerDependencies: + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0 + peerDependenciesMeta: + vite: + optional: true + + volar-service-css@0.0.65: + resolution: {integrity: sha512-oaImNguZF/8NfQh5jJZ2lJYBtF3aFS5H2w+6GmH7ykESAgBJ1UC7DrhmH5smBGGF7OOzzc9AzrrnriafoFJBdA==} + peerDependencies: + '@volar/language-service': ~2.4.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + + volar-service-emmet@0.0.65: + resolution: {integrity: sha512-YkAPlkJnjyAAUZGtG7STgy3ENFy7C0n3dl6MffUYkcovosfUUNgpUOmsj4t1qw1c7t5KMvLfAZHsEC3Ig5Qs3w==} + peerDependencies: + '@volar/language-service': ~2.4.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + + volar-service-html@0.0.65: + resolution: {integrity: sha512-AxXckCTbCr5j5z81d3bNiRRL32xCaBSa8lmYhq0QfzBPVPaRv06YYaxp22XizM061f96iizM7ZkSHCu1RuSwRA==} + peerDependencies: + '@volar/language-service': ~2.4.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + + volar-service-prettier@0.0.65: + resolution: {integrity: sha512-cJH+5MtYp5q+zL8d6rd9RwQpwXFJuBaRHMuUyG+kasEkeWMbJKVVFYzUzNtbM8HMGMq5yYy+UGn/Zuh3CvSjaA==} + peerDependencies: + '@volar/language-service': ~2.4.0 + prettier: ^2.2 || ^3.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + prettier: + optional: true + + volar-service-typescript-twoslash-queries@0.0.65: + resolution: {integrity: sha512-aghyUm2Rc4QNjKG1nvEjT2Kdzuvccs5H1TD0fIaM5i7X5d/vnm3QLP6wzIGGffa3sjD5b6YmLZR2XaFfNEusog==} + peerDependencies: + '@volar/language-service': ~2.4.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + + volar-service-typescript@0.0.65: + resolution: {integrity: sha512-zPJuLIMs7lkQCvL+Rza8+3/EIoXEIkX8+DL7bNNfPgnbalbvRDhqWLVMJ6Zk3pINjLJafDqyhSbw8srfkUv97w==} + peerDependencies: + '@volar/language-service': ~2.4.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + + volar-service-yaml@0.0.65: + resolution: {integrity: sha512-1C67p6M+Y11IVDOHfmbnF4AJiqmH5xaWsJhvM9eO4kazvHzVhk3+kzCtKcNoXIa77uPNmEbbox5CRysage8MNA==} + peerDependencies: + '@volar/language-service': ~2.4.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + + vscode-css-languageservice@6.3.8: + resolution: {integrity: sha512-dBk/9ullEjIMbfSYAohGpDOisOVU1x2MQHOeU12ohGJQI7+r0PCimBwaa/pWpxl/vH4f7ibrBfxIZY3anGmHKQ==} + + vscode-html-languageservice@5.6.0: + resolution: {integrity: sha512-FIVz83oGw2tBkOr8gQPeiREInnineCKGCz3ZD1Pi6opOuX3nSRkc4y4zLLWsuop+6ttYX//XZCI6SLzGhRzLmA==} + + vscode-json-languageservice@4.1.8: + resolution: {integrity: sha512-0vSpg6Xd9hfV+eZAaYN63xVVMOTmJ4GgHxXnkLCh+9RsQBkWKIghzLhW2B9ebfG+LQQg8uLtsQ2aUKjTgE+QOg==} + engines: {npm: '>=7.0.0'} + + vscode-jsonrpc@6.0.0: + resolution: {integrity: sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==} + engines: {node: '>=8.0.0 || >=10.0.0'} + + vscode-jsonrpc@8.2.0: + resolution: {integrity: sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==} + engines: {node: '>=14.0.0'} + + vscode-languageserver-protocol@3.16.0: + resolution: {integrity: sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==} + + vscode-languageserver-protocol@3.17.5: + resolution: {integrity: sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==} + + vscode-languageserver-textdocument@1.0.12: + resolution: {integrity: sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==} + + vscode-languageserver-types@3.16.0: + resolution: {integrity: sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==} + + vscode-languageserver-types@3.17.5: + resolution: {integrity: sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==} + + vscode-languageserver@7.0.0: + resolution: {integrity: sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==} + hasBin: true + + vscode-languageserver@9.0.1: + resolution: {integrity: sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==} + hasBin: true + + vscode-nls@5.2.0: + resolution: {integrity: sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==} + + vscode-uri@3.1.0: + resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} + wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} - webpack-virtual-modules@0.6.2: - resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} + web-namespaces@2.0.1: + resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} which-boxed-primitive@1.1.1: resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} @@ -4327,6 +4753,10 @@ packages: resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} engines: {node: '>= 0.4'} + which-pm-runs@1.1.0: + resolution: {integrity: sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==} + engines: {node: '>=4'} + which-typed-array@1.1.19: resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} engines: {node: '>= 0.4'} @@ -4339,6 +4769,10 @@ packages: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} + widest-line@5.0.0: + resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==} + engines: {node: '>=18'} + winston-transport@4.9.0: resolution: {integrity: sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==} engines: {node: '>= 12.0.0'} @@ -4355,6 +4789,10 @@ packages: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} + wrap-ansi@9.0.2: + resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} + engines: {node: '>=18'} + wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} @@ -4374,21 +4812,30 @@ packages: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} + xxhash-wasm@1.1.0: + resolution: {integrity: sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==} + y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} - yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - - yallist@5.0.0: - resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} - engines: {node: '>=18'} + yaml-language-server@1.15.0: + resolution: {integrity: sha512-N47AqBDCMQmh6mBLmI6oqxryHRzi33aPFPsJhYy3VTUGCdLHYjGh4FZzpUjRlphaADBBkDmnkM/++KNIOHi5Rw==} + hasBin: true yaml@2.0.0-1: resolution: {integrity: sha512-W7h5dEhywMKenDJh2iX/LABkbFnBxasD27oyXWDS/feDsxiw0dD5ncXdYXgkvAsXIY2MpW/ZKkr9IU30DBdMNQ==} engines: {node: '>= 6'} + yaml@2.2.2: + resolution: {integrity: sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==} + engines: {node: '>= 14'} + + yaml@2.8.1: + resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==} + engines: {node: '>= 14.6'} + hasBin: true + yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} @@ -4405,39 +4852,205 @@ packages: resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==} engines: {node: '>=12.20'} + yocto-spinner@0.2.3: + resolution: {integrity: sha512-sqBChb33loEnkoXte1bLg45bEBsOP9N1kzQh5JZNKj/0rik4zAPTNSAVPj3uQAdc6slYJ0Ksc403G2XgxsJQFQ==} + engines: {node: '>=18.19'} + + yoctocolors@2.1.2: + resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==} + engines: {node: '>=18'} + z-schema@5.0.5: resolution: {integrity: sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==} engines: {node: '>=8.0.0'} hasBin: true + zod-to-json-schema@3.24.6: + resolution: {integrity: sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==} + peerDependencies: + zod: ^3.24.1 + + zod-to-ts@1.2.0: + resolution: {integrity: sha512-x30XE43V+InwGpvTySRNz9kB7qFU8DlyEy7BsSTCHPH1R0QasMmHWZDCzYm6bVXtj/9NNJAZF3jW8rzFvH5OFA==} + peerDependencies: + typescript: ^4.9.4 || ^5.0.2 + zod: ^3 + zod@3.25.76: resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} zod@4.1.12: resolution: {integrity: sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==} -snapshots: + zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + +snapshots: + + '@apidevtools/json-schema-ref-parser@9.1.2': + dependencies: + '@jsdevtools/ono': 7.1.3 + '@types/json-schema': 7.0.15 + call-me-maybe: 1.0.2 + js-yaml: 4.1.0 + + '@apidevtools/openapi-schemas@2.1.0': {} + + '@apidevtools/swagger-methods@3.0.2': {} + + '@apidevtools/swagger-parser@10.0.3(openapi-types@12.1.3)': + dependencies: + '@apidevtools/json-schema-ref-parser': 9.1.2 + '@apidevtools/openapi-schemas': 2.1.0 + '@apidevtools/swagger-methods': 3.0.2 + '@jsdevtools/ono': 7.1.3 + call-me-maybe: 1.0.2 + openapi-types: 12.1.3 + z-schema: 5.0.5 + + '@astrojs/check@0.9.5(prettier@3.6.2)(typescript@5.9.2)': + dependencies: + '@astrojs/language-server': 2.15.5(prettier@3.6.2)(typescript@5.9.2) + chokidar: 4.0.3 + kleur: 4.1.5 + typescript: 5.9.2 + yargs: 17.7.2 + transitivePeerDependencies: + - prettier + - prettier-plugin-astro + + '@astrojs/compiler@2.13.0': {} + + '@astrojs/internal-helpers@0.7.4': {} + + '@astrojs/language-server@2.15.5(prettier@3.6.2)(typescript@5.9.2)': + dependencies: + '@astrojs/compiler': 2.13.0 + '@astrojs/yaml2ts': 0.2.2 + '@jridgewell/sourcemap-codec': 1.5.5 + '@volar/kit': 2.4.23(typescript@5.9.2) + '@volar/language-core': 2.4.23 + '@volar/language-server': 2.4.23 + '@volar/language-service': 2.4.23 + fast-glob: 3.3.3 + muggle-string: 0.4.1 + volar-service-css: 0.0.65(@volar/language-service@2.4.23) + volar-service-emmet: 0.0.65(@volar/language-service@2.4.23) + volar-service-html: 0.0.65(@volar/language-service@2.4.23) + volar-service-prettier: 0.0.65(@volar/language-service@2.4.23)(prettier@3.6.2) + volar-service-typescript: 0.0.65(@volar/language-service@2.4.23) + volar-service-typescript-twoslash-queries: 0.0.65(@volar/language-service@2.4.23) + volar-service-yaml: 0.0.65(@volar/language-service@2.4.23) + vscode-html-languageservice: 5.6.0 + vscode-uri: 3.1.0 + optionalDependencies: + prettier: 3.6.2 + transitivePeerDependencies: + - typescript + + '@astrojs/markdown-remark@6.3.8': + dependencies: + '@astrojs/internal-helpers': 0.7.4 + '@astrojs/prism': 3.3.0 + github-slugger: 2.0.0 + hast-util-from-html: 2.0.3 + hast-util-to-text: 4.0.2 + import-meta-resolve: 4.2.0 + js-yaml: 4.1.0 + mdast-util-definitions: 6.0.0 + rehype-raw: 7.0.0 + rehype-stringify: 10.0.1 + remark-gfm: 4.0.1 + remark-parse: 11.0.0 + remark-rehype: 11.1.2 + remark-smartypants: 3.0.2 + shiki: 3.14.0 + smol-toml: 1.4.2 + unified: 11.0.5 + unist-util-remove-position: 5.0.0 + unist-util-visit: 5.0.0 + unist-util-visit-parents: 6.0.2 + vfile: 6.0.3 + transitivePeerDependencies: + - supports-color + + '@astrojs/mdx@4.3.8(astro@5.15.1(@types/node@20.19.22)(jiti@2.6.1)(lightningcss@1.30.1)(rollup@4.52.5)(tsx@4.20.6)(typescript@5.9.2)(yaml@2.0.0-1))': + dependencies: + '@astrojs/markdown-remark': 6.3.8 + '@mdx-js/mdx': 3.1.1 + acorn: 8.15.0 + astro: 5.15.1(@types/node@20.19.22)(jiti@2.6.1)(lightningcss@1.30.1)(rollup@4.52.5)(tsx@4.20.6)(typescript@5.9.2)(yaml@2.0.0-1) + es-module-lexer: 1.7.0 + estree-util-visit: 2.0.0 + hast-util-to-html: 9.0.5 + picocolors: 1.1.1 + rehype-raw: 7.0.0 + remark-gfm: 4.0.1 + remark-smartypants: 3.0.2 + source-map: 0.7.6 + unist-util-visit: 5.0.0 + vfile: 6.0.3 + transitivePeerDependencies: + - supports-color + + '@astrojs/prism@3.3.0': + dependencies: + prismjs: 1.30.0 - '@apidevtools/json-schema-ref-parser@9.1.2': + '@astrojs/sitemap@3.6.0': dependencies: - '@jsdevtools/ono': 7.1.3 - '@types/json-schema': 7.0.15 - call-me-maybe: 1.0.2 - js-yaml: 4.1.0 + sitemap: 8.0.1 + stream-replace-string: 2.0.0 + zod: 3.25.76 - '@apidevtools/openapi-schemas@2.1.0': {} + '@astrojs/starlight@0.36.1(astro@5.15.1(@types/node@20.19.22)(jiti@2.6.1)(lightningcss@1.30.1)(rollup@4.52.5)(tsx@4.20.6)(typescript@5.9.2)(yaml@2.0.0-1))': + dependencies: + '@astrojs/markdown-remark': 6.3.8 + '@astrojs/mdx': 4.3.8(astro@5.15.1(@types/node@20.19.22)(jiti@2.6.1)(lightningcss@1.30.1)(rollup@4.52.5)(tsx@4.20.6)(typescript@5.9.2)(yaml@2.0.0-1)) + '@astrojs/sitemap': 3.6.0 + '@pagefind/default-ui': 1.4.0 + '@types/hast': 3.0.4 + '@types/js-yaml': 4.0.9 + '@types/mdast': 4.0.4 + astro: 5.15.1(@types/node@20.19.22)(jiti@2.6.1)(lightningcss@1.30.1)(rollup@4.52.5)(tsx@4.20.6)(typescript@5.9.2)(yaml@2.0.0-1) + astro-expressive-code: 0.41.3(astro@5.15.1(@types/node@20.19.22)(jiti@2.6.1)(lightningcss@1.30.1)(rollup@4.52.5)(tsx@4.20.6)(typescript@5.9.2)(yaml@2.0.0-1)) + bcp-47: 2.1.0 + hast-util-from-html: 2.0.3 + hast-util-select: 6.0.4 + hast-util-to-string: 3.0.1 + hastscript: 9.0.1 + i18next: 23.16.8 + js-yaml: 4.1.0 + klona: 2.0.6 + mdast-util-directive: 3.1.0 + mdast-util-to-markdown: 2.1.2 + mdast-util-to-string: 4.0.0 + pagefind: 1.4.0 + rehype: 13.0.2 + rehype-format: 5.0.1 + remark-directive: 3.0.1 + ultrahtml: 1.6.0 + unified: 11.0.5 + unist-util-visit: 5.0.0 + vfile: 6.0.3 + transitivePeerDependencies: + - supports-color - '@apidevtools/swagger-methods@3.0.2': {} + '@astrojs/telemetry@3.3.0': + dependencies: + ci-info: 4.3.1 + debug: 4.4.1 + dlv: 1.1.3 + dset: 3.1.4 + is-docker: 3.0.0 + is-wsl: 3.1.0 + which-pm-runs: 1.1.0 + transitivePeerDependencies: + - supports-color - '@apidevtools/swagger-parser@10.0.3(openapi-types@12.1.3)': + '@astrojs/yaml2ts@0.2.2': dependencies: - '@apidevtools/json-schema-ref-parser': 9.1.2 - '@apidevtools/openapi-schemas': 2.1.0 - '@apidevtools/swagger-methods': 3.0.2 - '@jsdevtools/ono': 7.1.3 - call-me-maybe: 1.0.2 - openapi-types: 12.1.3 - z-schema: 5.0.5 + yaml: 2.8.1 '@babel/code-frame@7.27.1': dependencies: @@ -4445,185 +5058,183 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.28.4': {} + '@babel/helper-string-parser@7.27.1': {} - '@babel/core@7.28.4': - dependencies: - '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.3 - '@babel/helper-compilation-targets': 7.27.2 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) - '@babel/helpers': 7.28.4 - '@babel/parser': 7.28.4 - '@babel/template': 7.27.2 - '@babel/traverse': 7.28.4 - '@babel/types': 7.28.4 - '@jridgewell/remapping': 2.3.5 - convert-source-map: 2.0.0 - debug: 4.4.1 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color + '@babel/helper-validator-identifier@7.27.1': {} - '@babel/generator@7.28.3': + '@babel/parser@7.28.4': dependencies: - '@babel/parser': 7.28.4 '@babel/types': 7.28.4 - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - jsesc: 3.1.0 - '@babel/helper-annotate-as-pure@7.27.3': - dependencies: - '@babel/types': 7.28.4 + '@babel/runtime@7.28.4': {} - '@babel/helper-compilation-targets@7.27.2': + '@babel/types@7.28.4': dependencies: - '@babel/compat-data': 7.28.4 - '@babel/helper-validator-option': 7.27.1 - browserslist: 4.26.3 - lru-cache: 5.1.1 - semver: 6.3.1 + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 - '@babel/helper-create-class-features-plugin@7.28.3(@babel/core@7.28.4)': + '@capsizecss/unpack@3.0.0': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-member-expression-to-functions': 7.27.1 - '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.4) - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/traverse': 7.28.4 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color + fontkit: 2.0.4 - '@babel/helper-globals@7.28.0': {} + '@changesets/apply-release-plan@7.0.13': + dependencies: + '@changesets/config': 3.1.1 + '@changesets/get-version-range-type': 0.4.0 + '@changesets/git': 3.0.4 + '@changesets/should-skip-package': 0.1.2 + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + detect-indent: 6.1.0 + fs-extra: 7.0.1 + lodash.startcase: 4.4.0 + outdent: 0.5.0 + prettier: 2.8.8 + resolve-from: 5.0.0 + semver: 7.7.2 - '@babel/helper-member-expression-to-functions@7.27.1': + '@changesets/assemble-release-plan@6.0.9': dependencies: - '@babel/traverse': 7.28.4 - '@babel/types': 7.28.4 - transitivePeerDependencies: - - supports-color + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.1.3 + '@changesets/should-skip-package': 0.1.2 + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + semver: 7.7.2 - '@babel/helper-module-imports@7.27.1': + '@changesets/changelog-git@0.2.1': dependencies: - '@babel/traverse': 7.28.4 - '@babel/types': 7.28.4 - transitivePeerDependencies: - - supports-color + '@changesets/types': 6.1.0 - '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.4)': + '@changesets/changelog-github@0.5.1': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-module-imports': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.28.4 + '@changesets/get-github-info': 0.6.0 + '@changesets/types': 6.1.0 + dotenv: 8.6.0 transitivePeerDependencies: - - supports-color + - encoding + + '@changesets/cli@2.29.7(@types/node@24.8.1)': + dependencies: + '@changesets/apply-release-plan': 7.0.13 + '@changesets/assemble-release-plan': 6.0.9 + '@changesets/changelog-git': 0.2.1 + '@changesets/config': 3.1.1 + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.1.3 + '@changesets/get-release-plan': 4.0.13 + '@changesets/git': 3.0.4 + '@changesets/logger': 0.1.1 + '@changesets/pre': 2.0.2 + '@changesets/read': 0.6.5 + '@changesets/should-skip-package': 0.1.2 + '@changesets/types': 6.1.0 + '@changesets/write': 0.4.0 + '@inquirer/external-editor': 1.0.2(@types/node@24.8.1) + '@manypkg/get-packages': 1.1.3 + ansi-colors: 4.1.3 + ci-info: 3.9.0 + enquirer: 2.4.1 + fs-extra: 7.0.1 + mri: 1.2.0 + p-limit: 2.3.0 + package-manager-detector: 0.2.11 + picocolors: 1.1.1 + resolve-from: 5.0.0 + semver: 7.7.2 + spawndamnit: 3.0.1 + term-size: 2.2.1 + transitivePeerDependencies: + - '@types/node' - '@babel/helper-optimise-call-expression@7.27.1': + '@changesets/config@3.1.1': dependencies: - '@babel/types': 7.28.4 + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.1.3 + '@changesets/logger': 0.1.1 + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + fs-extra: 7.0.1 + micromatch: 4.0.8 - '@babel/helper-plugin-utils@7.27.1': {} + '@changesets/errors@0.2.0': + dependencies: + extendable-error: 0.1.7 - '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.4)': + '@changesets/get-dependents-graph@2.1.3': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-member-expression-to-functions': 7.27.1 - '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/traverse': 7.28.4 - transitivePeerDependencies: - - supports-color + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + picocolors: 1.1.1 + semver: 7.7.2 - '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + '@changesets/get-github-info@0.6.0': dependencies: - '@babel/traverse': 7.28.4 - '@babel/types': 7.28.4 + dataloader: 1.4.0 + node-fetch: 2.7.0 transitivePeerDependencies: - - supports-color - - '@babel/helper-string-parser@7.27.1': {} + - encoding - '@babel/helper-validator-identifier@7.27.1': {} - - '@babel/helper-validator-option@7.27.1': {} - - '@babel/helpers@7.28.4': + '@changesets/get-release-plan@4.0.13': dependencies: - '@babel/template': 7.27.2 - '@babel/types': 7.28.4 + '@changesets/assemble-release-plan': 6.0.9 + '@changesets/config': 3.1.1 + '@changesets/pre': 2.0.2 + '@changesets/read': 0.6.5 + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 - '@babel/parser@7.28.4': - dependencies: - '@babel/types': 7.28.4 + '@changesets/get-version-range-type@0.4.0': {} - '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.4)': + '@changesets/git@3.0.4': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 + '@changesets/errors': 0.2.0 + '@manypkg/get-packages': 1.1.3 + is-subdir: 1.2.0 + micromatch: 4.0.8 + spawndamnit: 3.0.1 - '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.4)': + '@changesets/logger@0.1.1': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 + picocolors: 1.1.1 - '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.28.4)': + '@changesets/parse@0.4.1': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) - '@babel/helper-plugin-utils': 7.27.1 - transitivePeerDependencies: - - supports-color + '@changesets/types': 6.1.0 + js-yaml: 3.14.1 - '@babel/plugin-transform-typescript@7.28.0(@babel/core@7.28.4)': + '@changesets/pre@2.0.2': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4) - '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.4) - transitivePeerDependencies: - - supports-color + '@changesets/errors': 0.2.0 + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + fs-extra: 7.0.1 - '@babel/preset-typescript@7.27.1(@babel/core@7.28.4)': + '@changesets/read@0.6.5': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-typescript': 7.28.0(@babel/core@7.28.4) - transitivePeerDependencies: - - supports-color + '@changesets/git': 3.0.4 + '@changesets/logger': 0.1.1 + '@changesets/parse': 0.4.1 + '@changesets/types': 6.1.0 + fs-extra: 7.0.1 + p-filter: 2.1.0 + picocolors: 1.1.1 - '@babel/template@7.27.2': + '@changesets/should-skip-package@0.1.2': dependencies: - '@babel/code-frame': 7.27.1 - '@babel/parser': 7.28.4 - '@babel/types': 7.28.4 + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 - '@babel/traverse@7.28.4': - dependencies: - '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.3 - '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.28.4 - '@babel/template': 7.27.2 - '@babel/types': 7.28.4 - debug: 4.4.1 - transitivePeerDependencies: - - supports-color + '@changesets/types@4.1.0': {} - '@babel/types@7.28.4': + '@changesets/types@6.1.0': {} + + '@changesets/write@0.4.0': dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 + '@changesets/types': 6.1.0 + fs-extra: 7.0.1 + human-id: 4.1.2 + prettier: 2.8.8 '@colors/colors@1.6.0': {} @@ -4779,12 +5390,42 @@ snapshots: chalk: 5.6.2 optional: true + '@ctrl/tinycolor@4.2.0': {} + '@dabh/diagnostics@2.0.8': dependencies: '@so-ric/colorspace': 1.1.6 enabled: 2.0.0 kuler: 2.0.0 + '@emmetio/abbreviation@2.3.3': + dependencies: + '@emmetio/scanner': 1.0.4 + + '@emmetio/css-abbreviation@2.1.8': + dependencies: + '@emmetio/scanner': 1.0.4 + + '@emmetio/css-parser@https://codeload.github.com/ramya-rao-a/css-parser/tar.gz/370c480ac103bd17c7bcfb34bf5d577dc40d3660': + dependencies: + '@emmetio/stream-reader': 2.2.0 + '@emmetio/stream-reader-utils': 0.1.0 + + '@emmetio/html-matcher@1.3.0': + dependencies: + '@emmetio/scanner': 1.0.4 + + '@emmetio/scanner@1.0.4': {} + + '@emmetio/stream-reader-utils@0.1.0': {} + + '@emmetio/stream-reader@2.2.0': {} + + '@emnapi/runtime@1.6.0': + dependencies: + tslib: 2.8.1 + optional: true + '@esbuild/aix-ppc64@0.25.11': optional: true @@ -4868,16 +5509,6 @@ snapshots: eslint: 9.34.0(jiti@2.6.1) eslint-visitor-keys: 3.4.3 - '@eslint-community/eslint-utils@4.7.0(eslint@9.38.0(jiti@2.6.1))': - dependencies: - eslint: 9.38.0(jiti@2.6.1) - eslint-visitor-keys: 3.4.3 - - '@eslint-community/eslint-utils@4.9.0(eslint@9.38.0(jiti@2.6.1))': - dependencies: - eslint: 9.38.0(jiti@2.6.1) - eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.12.1': {} '@eslint/config-array@0.21.0': @@ -4888,28 +5519,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/config-array@0.21.1': - dependencies: - '@eslint/object-schema': 2.1.7 - debug: 4.4.1 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - '@eslint/config-helpers@0.3.1': {} - '@eslint/config-helpers@0.4.1': - dependencies: - '@eslint/core': 0.16.0 - '@eslint/core@0.15.2': dependencies: '@types/json-schema': 7.0.15 - '@eslint/core@0.16.0': - dependencies: - '@types/json-schema': 7.0.15 - '@eslint/eslintrc@3.3.1': dependencies: ajv: 6.12.6 @@ -4926,38 +5541,37 @@ snapshots: '@eslint/js@9.34.0': {} - '@eslint/js@9.38.0': {} - '@eslint/object-schema@2.1.6': {} - '@eslint/object-schema@2.1.7': {} - '@eslint/plugin-kit@0.3.5': dependencies: '@eslint/core': 0.15.2 levn: 0.4.1 - '@eslint/plugin-kit@0.4.0': + '@expressive-code/core@0.41.3': dependencies: - '@eslint/core': 0.16.0 - levn: 0.4.1 + '@ctrl/tinycolor': 4.2.0 + hast-util-select: 6.0.4 + hast-util-to-html: 9.0.5 + hast-util-to-text: 4.0.2 + hastscript: 9.0.1 + postcss: 8.5.6 + postcss-nested: 6.2.0(postcss@8.5.6) + unist-util-visit: 5.0.0 + unist-util-visit-parents: 6.0.2 - '@floating-ui/core@1.7.3': + '@expressive-code/plugin-frames@0.41.3': dependencies: - '@floating-ui/utils': 0.2.10 + '@expressive-code/core': 0.41.3 - '@floating-ui/dom@1.7.4': + '@expressive-code/plugin-shiki@0.41.3': dependencies: - '@floating-ui/core': 1.7.3 - '@floating-ui/utils': 0.2.10 + '@expressive-code/core': 0.41.3 + shiki: 3.14.0 - '@floating-ui/react-dom@2.1.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@expressive-code/plugin-text-markers@0.41.3': dependencies: - '@floating-ui/dom': 1.7.4 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - - '@floating-ui/utils@0.2.10': {} + '@expressive-code/core': 0.41.3 '@humanfs/core@0.19.1': {} @@ -4972,381 +5586,231 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} - '@isaacs/fs-minipass@4.0.1': - dependencies: - minipass: 7.1.2 + '@img/colour@1.0.0': {} - '@jridgewell/gen-mapping@0.3.13': - dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - '@jridgewell/trace-mapping': 0.3.31 + '@img/sharp-darwin-arm64@0.34.4': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.2.3 + optional: true - '@jridgewell/remapping@2.3.5': - dependencies: - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 + '@img/sharp-darwin-x64@0.34.4': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.2.3 + optional: true - '@jridgewell/resolve-uri@3.1.2': {} + '@img/sharp-libvips-darwin-arm64@1.2.3': + optional: true - '@jridgewell/sourcemap-codec@1.5.5': {} + '@img/sharp-libvips-darwin-x64@1.2.3': + optional: true - '@jridgewell/trace-mapping@0.3.31': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.5 + '@img/sharp-libvips-linux-arm64@1.2.3': + optional: true - '@jsdevtools/ono@7.1.3': {} + '@img/sharp-libvips-linux-arm@1.2.3': + optional: true - '@next/eslint-plugin-next@15.5.0': - dependencies: - fast-glob: 3.3.1 + '@img/sharp-libvips-linux-ppc64@1.2.3': + optional: true - '@nodelib/fs.scandir@2.1.5': - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 + '@img/sharp-libvips-linux-s390x@1.2.3': + optional: true - '@nodelib/fs.stat@2.0.5': {} + '@img/sharp-libvips-linux-x64@1.2.3': + optional: true - '@nodelib/fs.walk@1.2.8': - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.19.1 + '@img/sharp-libvips-linuxmusl-arm64@1.2.3': + optional: true - '@noriginmedia/norigin-spatial-navigation@2.3.0(react@19.2.0)': - dependencies: - lodash: 4.17.21 - react: 19.2.0 + '@img/sharp-libvips-linuxmusl-x64@1.2.3': + optional: true - '@prisma/client@6.17.1(prisma@6.17.1(typescript@5.9.2))(typescript@5.9.2)': + '@img/sharp-linux-arm64@0.34.4': optionalDependencies: - prisma: 6.17.1(typescript@5.9.2) - typescript: 5.9.2 + '@img/sharp-libvips-linux-arm64': 1.2.3 + optional: true - '@prisma/config@6.17.1': - dependencies: - c12: 3.1.0 - deepmerge-ts: 7.1.5 - effect: 3.16.12 - empathic: 2.0.0 - transitivePeerDependencies: - - magicast + '@img/sharp-linux-arm@0.34.4': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.2.3 + optional: true - '@prisma/debug@6.17.1': {} + '@img/sharp-linux-ppc64@0.34.4': + optionalDependencies: + '@img/sharp-libvips-linux-ppc64': 1.2.3 + optional: true - '@prisma/engines-version@6.17.1-1.272a37d34178c2894197e17273bf937f25acdeac': {} + '@img/sharp-linux-s390x@0.34.4': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.2.3 + optional: true - '@prisma/engines@6.17.1': - dependencies: - '@prisma/debug': 6.17.1 - '@prisma/engines-version': 6.17.1-1.272a37d34178c2894197e17273bf937f25acdeac - '@prisma/fetch-engine': 6.17.1 - '@prisma/get-platform': 6.17.1 + '@img/sharp-linux-x64@0.34.4': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.2.3 + optional: true - '@prisma/fetch-engine@6.17.1': - dependencies: - '@prisma/debug': 6.17.1 - '@prisma/engines-version': 6.17.1-1.272a37d34178c2894197e17273bf937f25acdeac - '@prisma/get-platform': 6.17.1 + '@img/sharp-linuxmusl-arm64@0.34.4': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.2.3 + optional: true - '@prisma/get-platform@6.17.1': + '@img/sharp-linuxmusl-x64@0.34.4': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.2.3 + optional: true + + '@img/sharp-wasm32@0.34.4': dependencies: - '@prisma/debug': 6.17.1 + '@emnapi/runtime': 1.6.0 + optional: true - '@radix-ui/number@1.1.1': {} + '@img/sharp-win32-arm64@0.34.4': + optional: true - '@radix-ui/primitive@1.1.3': {} + '@img/sharp-win32-ia32@0.34.4': + optional: true - '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': - dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - optionalDependencies: - '@types/react': 19.2.2 - '@types/react-dom': 19.2.2(@types/react@19.2.2) + '@img/sharp-win32-x64@0.34.4': + optional: true - '@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@inquirer/external-editor@1.0.2(@types/node@24.8.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.2)(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + chardet: 2.1.0 + iconv-lite: 0.7.0 optionalDependencies: - '@types/react': 19.2.2 - '@types/react-dom': 19.2.2(@types/react@19.2.2) + '@types/node': 24.8.1 - '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.2)(react@19.2.0)': - dependencies: - react: 19.2.0 - optionalDependencies: - '@types/react': 19.2.2 + '@jridgewell/sourcemap-codec@1.5.5': {} - '@radix-ui/react-context@1.1.2(@types/react@19.2.2)(react@19.2.0)': - dependencies: - react: 19.2.0 - optionalDependencies: - '@types/react': 19.2.2 - - '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0) - aria-hidden: 1.2.6 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - react-remove-scroll: 2.7.1(@types/react@19.2.2)(react@19.2.0) - optionalDependencies: - '@types/react': 19.2.2 - '@types/react-dom': 19.2.2(@types/react@19.2.2) + '@jsdevtools/ono@7.1.3': {} - '@radix-ui/react-direction@1.1.1(@types/react@19.2.2)(react@19.2.0)': + '@manypkg/find-root@1.1.0': dependencies: - react: 19.2.0 - optionalDependencies: - '@types/react': 19.2.2 + '@babel/runtime': 7.28.4 + '@types/node': 12.20.55 + find-up: 4.1.0 + fs-extra: 8.1.0 - '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@manypkg/get-packages@1.1.3': dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.2)(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - optionalDependencies: - '@types/react': 19.2.2 - '@types/react-dom': 19.2.2(@types/react@19.2.2) + '@babel/runtime': 7.28.4 + '@changesets/types': 4.1.0 + '@manypkg/find-root': 1.1.0 + fs-extra: 8.1.0 + globby: 11.1.0 + read-yaml-file: 1.1.0 - '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.2)(react@19.2.0)': + '@mdx-js/mdx@3.1.1': dependencies: - react: 19.2.0 - optionalDependencies: - '@types/react': 19.2.2 + '@types/estree': 1.0.8 + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdx': 2.0.13 + acorn: 8.15.0 + collapse-white-space: 2.1.0 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + estree-util-scope: 1.0.0 + estree-walker: 3.0.3 + hast-util-to-jsx-runtime: 2.3.6 + markdown-extensions: 2.0.0 + recma-build-jsx: 1.0.0 + recma-jsx: 1.0.1(acorn@8.15.0) + recma-stringify: 1.0.0 + rehype-recma: 1.0.0 + remark-mdx: 3.1.1 + remark-parse: 11.0.0 + remark-rehype: 11.1.2 + source-map: 0.7.6 + unified: 11.0.5 + unist-util-position-from-estree: 2.0.0 + unist-util-stringify-position: 4.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.3 + transitivePeerDependencies: + - supports-color - '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@next/eslint-plugin-next@15.5.0': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - optionalDependencies: - '@types/react': 19.2.2 - '@types/react-dom': 19.2.2(@types/react@19.2.2) + fast-glob: 3.3.1 - '@radix-ui/react-id@1.1.1(@types/react@19.2.2)(react@19.2.0)': + '@nodelib/fs.scandir@2.1.5': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0) - react: 19.2.0 - optionalDependencies: - '@types/react': 19.2.2 + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 - '@radix-ui/react-label@2.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': - dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - optionalDependencies: - '@types/react': 19.2.2 - '@types/react-dom': 19.2.2(@types/react@19.2.2) - - '@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': - dependencies: - '@floating-ui/react-dom': 2.1.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/rect': 1.1.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - optionalDependencies: - '@types/react': 19.2.2 - '@types/react-dom': 19.2.2(@types/react@19.2.2) + '@nodelib/fs.stat@2.0.5': {} - '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@nodelib/fs.walk@1.2.8': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - optionalDependencies: - '@types/react': 19.2.2 - '@types/react-dom': 19.2.2(@types/react@19.2.2) + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.19.1 + + '@oslojs/encoding@1.1.0': {} + + '@pagefind/darwin-arm64@1.4.0': + optional: true - '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - optionalDependencies: - '@types/react': 19.2.2 - '@types/react-dom': 19.2.2(@types/react@19.2.2) + '@pagefind/darwin-x64@1.4.0': + optional: true - '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': - dependencies: - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.2)(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - optionalDependencies: - '@types/react': 19.2.2 - '@types/react-dom': 19.2.2(@types/react@19.2.2) + '@pagefind/default-ui@1.4.0': {} - '@radix-ui/react-progress@1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': - dependencies: - '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - optionalDependencies: - '@types/react': 19.2.2 - '@types/react-dom': 19.2.2(@types/react@19.2.2) - - '@radix-ui/react-select@2.2.6(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': - dependencies: - '@radix-ui/number': 1.1.1 - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - aria-hidden: 1.2.6 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - react-remove-scroll: 2.7.1(@types/react@19.2.2)(react@19.2.0) - optionalDependencies: - '@types/react': 19.2.2 - '@types/react-dom': 19.2.2(@types/react@19.2.2) + '@pagefind/freebsd-x64@1.4.0': + optional: true - '@radix-ui/react-separator@1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': - dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - optionalDependencies: - '@types/react': 19.2.2 - '@types/react-dom': 19.2.2(@types/react@19.2.2) + '@pagefind/linux-arm64@1.4.0': + optional: true - '@radix-ui/react-slot@1.2.3(@types/react@19.2.2)(react@19.2.0)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) - react: 19.2.0 - optionalDependencies: - '@types/react': 19.2.2 - - '@radix-ui/react-switch@1.2.6(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.2)(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - optionalDependencies: - '@types/react': 19.2.2 - '@types/react-dom': 19.2.2(@types/react@19.2.2) + '@pagefind/linux-x64@1.4.0': + optional: true - '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.2)(react@19.2.0)': - dependencies: - react: 19.2.0 - optionalDependencies: - '@types/react': 19.2.2 + '@pagefind/windows-x64@1.4.0': + optional: true - '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.2)(react@19.2.0)': - dependencies: - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0) - react: 19.2.0 + '@prisma/client@6.17.1(prisma@6.17.1(magicast@0.3.5)(typescript@5.9.2))(typescript@5.9.2)': optionalDependencies: - '@types/react': 19.2.2 + prisma: 6.17.1(magicast@0.3.5)(typescript@5.9.2) + typescript: 5.9.2 - '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.2)(react@19.2.0)': + '@prisma/config@6.17.1(magicast@0.3.5)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0) - react: 19.2.0 - optionalDependencies: - '@types/react': 19.2.2 + c12: 3.1.0(magicast@0.3.5) + deepmerge-ts: 7.1.5 + effect: 3.16.12 + empathic: 2.0.0 + transitivePeerDependencies: + - magicast - '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.2)(react@19.2.0)': - dependencies: - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.2.0) - react: 19.2.0 - optionalDependencies: - '@types/react': 19.2.2 + '@prisma/debug@6.17.1': {} - '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.2)(react@19.2.0)': - dependencies: - react: 19.2.0 - optionalDependencies: - '@types/react': 19.2.2 + '@prisma/engines-version@6.17.1-1.272a37d34178c2894197e17273bf937f25acdeac': {} - '@radix-ui/react-use-previous@1.1.1(@types/react@19.2.2)(react@19.2.0)': + '@prisma/engines@6.17.1': dependencies: - react: 19.2.0 - optionalDependencies: - '@types/react': 19.2.2 + '@prisma/debug': 6.17.1 + '@prisma/engines-version': 6.17.1-1.272a37d34178c2894197e17273bf937f25acdeac + '@prisma/fetch-engine': 6.17.1 + '@prisma/get-platform': 6.17.1 - '@radix-ui/react-use-rect@1.1.1(@types/react@19.2.2)(react@19.2.0)': + '@prisma/fetch-engine@6.17.1': dependencies: - '@radix-ui/rect': 1.1.1 - react: 19.2.0 - optionalDependencies: - '@types/react': 19.2.2 + '@prisma/debug': 6.17.1 + '@prisma/engines-version': 6.17.1-1.272a37d34178c2894197e17273bf937f25acdeac + '@prisma/get-platform': 6.17.1 - '@radix-ui/react-use-size@1.1.1(@types/react@19.2.2)(react@19.2.0)': + '@prisma/get-platform@6.17.1': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0) - react: 19.2.0 - optionalDependencies: - '@types/react': 19.2.2 + '@prisma/debug': 6.17.1 - '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@rollup/pluginutils@5.3.0(rollup@4.52.5)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + '@types/estree': 1.0.8 + estree-walker: 2.0.2 + picomatch: 4.0.3 optionalDependencies: - '@types/react': 19.2.2 - '@types/react-dom': 19.2.2(@types/react@19.2.2) - - '@radix-ui/rect@1.1.1': {} - - '@rolldown/pluginutils@1.0.0-beta.35': {} + rollup: 4.52.5 '@rollup/rollup-android-arm-eabi@4.52.5': optional: true @@ -5416,297 +5880,49 @@ snapshots: '@scarf/scarf@1.4.0': {} - '@so-ric/colorspace@1.1.6': - dependencies: - color: 5.0.2 - text-hex: 1.0.0 - - '@standard-schema/spec@1.0.0': {} - - '@swc/core-darwin-arm64@1.13.5': - optional: true - - '@swc/core-darwin-x64@1.13.5': - optional: true - - '@swc/core-linux-arm-gnueabihf@1.13.5': - optional: true - - '@swc/core-linux-arm64-gnu@1.13.5': - optional: true - - '@swc/core-linux-arm64-musl@1.13.5': - optional: true - - '@swc/core-linux-x64-gnu@1.13.5': - optional: true - - '@swc/core-linux-x64-musl@1.13.5': - optional: true - - '@swc/core-win32-arm64-msvc@1.13.5': - optional: true - - '@swc/core-win32-ia32-msvc@1.13.5': - optional: true - - '@swc/core-win32-x64-msvc@1.13.5': - optional: true - - '@swc/core@1.13.5': - dependencies: - '@swc/counter': 0.1.3 - '@swc/types': 0.1.25 - optionalDependencies: - '@swc/core-darwin-arm64': 1.13.5 - '@swc/core-darwin-x64': 1.13.5 - '@swc/core-linux-arm-gnueabihf': 1.13.5 - '@swc/core-linux-arm64-gnu': 1.13.5 - '@swc/core-linux-arm64-musl': 1.13.5 - '@swc/core-linux-x64-gnu': 1.13.5 - '@swc/core-linux-x64-musl': 1.13.5 - '@swc/core-win32-arm64-msvc': 1.13.5 - '@swc/core-win32-ia32-msvc': 1.13.5 - '@swc/core-win32-x64-msvc': 1.13.5 - - '@swc/counter@0.1.3': {} - - '@swc/types@0.1.25': - dependencies: - '@swc/counter': 0.1.3 - - '@tailwindcss/node@4.1.14': - dependencies: - '@jridgewell/remapping': 2.3.5 - enhanced-resolve: 5.18.3 - jiti: 2.6.1 - lightningcss: 1.30.1 - magic-string: 0.30.19 - source-map-js: 1.2.1 - tailwindcss: 4.1.14 - - '@tailwindcss/oxide-android-arm64@4.1.14': - optional: true - - '@tailwindcss/oxide-darwin-arm64@4.1.14': - optional: true - - '@tailwindcss/oxide-darwin-x64@4.1.14': - optional: true - - '@tailwindcss/oxide-freebsd-x64@4.1.14': - optional: true - - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.14': - optional: true - - '@tailwindcss/oxide-linux-arm64-gnu@4.1.14': - optional: true - - '@tailwindcss/oxide-linux-arm64-musl@4.1.14': - optional: true - - '@tailwindcss/oxide-linux-x64-gnu@4.1.14': - optional: true - - '@tailwindcss/oxide-linux-x64-musl@4.1.14': - optional: true - - '@tailwindcss/oxide-wasm32-wasi@4.1.14': - optional: true - - '@tailwindcss/oxide-win32-arm64-msvc@4.1.14': - optional: true - - '@tailwindcss/oxide-win32-x64-msvc@4.1.14': - optional: true - - '@tailwindcss/oxide@4.1.14': - dependencies: - detect-libc: 2.1.2 - tar: 7.5.1 - optionalDependencies: - '@tailwindcss/oxide-android-arm64': 4.1.14 - '@tailwindcss/oxide-darwin-arm64': 4.1.14 - '@tailwindcss/oxide-darwin-x64': 4.1.14 - '@tailwindcss/oxide-freebsd-x64': 4.1.14 - '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.14 - '@tailwindcss/oxide-linux-arm64-gnu': 4.1.14 - '@tailwindcss/oxide-linux-arm64-musl': 4.1.14 - '@tailwindcss/oxide-linux-x64-gnu': 4.1.14 - '@tailwindcss/oxide-linux-x64-musl': 4.1.14 - '@tailwindcss/oxide-wasm32-wasi': 4.1.14 - '@tailwindcss/oxide-win32-arm64-msvc': 4.1.14 - '@tailwindcss/oxide-win32-x64-msvc': 4.1.14 - - '@tailwindcss/vite@4.1.14(vite@7.1.11(@types/node@24.8.1)(jiti@2.6.1)(lightningcss@1.30.1)(tsx@4.20.6)(yaml@2.0.0-1))': - dependencies: - '@tailwindcss/node': 4.1.14 - '@tailwindcss/oxide': 4.1.14 - tailwindcss: 4.1.14 - vite: 7.1.11(@types/node@24.8.1)(jiti@2.6.1)(lightningcss@1.30.1)(tsx@4.20.6)(yaml@2.0.0-1) - - '@tanstack/devtools-event-client@0.3.3': {} - - '@tanstack/form-core@0.42.1': - dependencies: - '@tanstack/store': 0.7.7 - - '@tanstack/form-core@1.24.3': - dependencies: - '@tanstack/devtools-event-client': 0.3.3 - '@tanstack/store': 0.7.7 - - '@tanstack/history@1.133.3': {} - - '@tanstack/query-core@5.90.5': {} - - '@tanstack/react-form@1.23.7(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': - dependencies: - '@tanstack/form-core': 1.24.3 - '@tanstack/react-store': 0.7.7(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - decode-formdata: 0.9.0 - devalue: 5.4.1 - react: 19.2.0 - transitivePeerDependencies: - - react-dom - - '@tanstack/react-query@5.90.5(react@19.2.0)': - dependencies: - '@tanstack/query-core': 5.90.5 - react: 19.2.0 - - '@tanstack/react-router-devtools@1.133.15(@tanstack/react-router@1.133.15(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.133.15)(@types/node@24.8.1)(csstype@3.1.3)(jiti@2.6.1)(lightningcss@1.30.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(solid-js@1.9.9)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.0.0-1)': + '@shikijs/core@3.14.0': dependencies: - '@tanstack/react-router': 1.133.15(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@tanstack/router-devtools-core': 1.133.15(@tanstack/router-core@1.133.15)(@types/node@24.8.1)(csstype@3.1.3)(jiti@2.6.1)(lightningcss@1.30.1)(solid-js@1.9.9)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.0.0-1) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - vite: 7.1.11(@types/node@24.8.1)(jiti@2.6.1)(lightningcss@1.30.1)(tsx@4.20.6)(yaml@2.0.0-1) - transitivePeerDependencies: - - '@tanstack/router-core' - - '@types/node' - - csstype - - jiti - - less - - lightningcss - - sass - - sass-embedded - - solid-js - - stylus - - sugarss - - terser - - tiny-invariant - - tsx - - yaml + '@shikijs/types': 3.14.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.5 - '@tanstack/react-router@1.133.15(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@shikijs/engine-javascript@3.14.0': dependencies: - '@tanstack/history': 1.133.3 - '@tanstack/react-store': 0.7.7(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@tanstack/router-core': 1.133.15 - isbot: 5.1.31 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - tiny-invariant: 1.3.3 - tiny-warning: 1.0.3 + '@shikijs/types': 3.14.0 + '@shikijs/vscode-textmate': 10.0.2 + oniguruma-to-es: 4.3.3 - '@tanstack/react-store@0.7.7(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@shikijs/engine-oniguruma@3.14.0': dependencies: - '@tanstack/store': 0.7.7 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - use-sync-external-store: 1.6.0(react@19.2.0) + '@shikijs/types': 3.14.0 + '@shikijs/vscode-textmate': 10.0.2 - '@tanstack/router-core@1.133.15': + '@shikijs/langs@3.14.0': dependencies: - '@tanstack/history': 1.133.3 - '@tanstack/store': 0.7.7 - cookie-es: 2.0.0 - seroval: 1.3.2 - seroval-plugins: 1.3.3(seroval@1.3.2) - tiny-invariant: 1.3.3 - tiny-warning: 1.0.3 + '@shikijs/types': 3.14.0 - '@tanstack/router-devtools-core@1.133.15(@tanstack/router-core@1.133.15)(@types/node@24.8.1)(csstype@3.1.3)(jiti@2.6.1)(lightningcss@1.30.1)(solid-js@1.9.9)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.0.0-1)': + '@shikijs/themes@3.14.0': dependencies: - '@tanstack/router-core': 1.133.15 - clsx: 2.1.1 - goober: 2.1.18(csstype@3.1.3) - solid-js: 1.9.9 - tiny-invariant: 1.3.3 - vite: 7.1.11(@types/node@24.8.1)(jiti@2.6.1)(lightningcss@1.30.1)(tsx@4.20.6)(yaml@2.0.0-1) - optionalDependencies: - csstype: 3.1.3 - transitivePeerDependencies: - - '@types/node' - - jiti - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - terser - - tsx - - yaml + '@shikijs/types': 3.14.0 - '@tanstack/router-generator@1.133.15': + '@shikijs/types@3.14.0': dependencies: - '@tanstack/router-core': 1.133.15 - '@tanstack/router-utils': 1.133.3 - '@tanstack/virtual-file-routes': 1.133.3 - prettier: 3.6.2 - recast: 0.23.11 - source-map: 0.7.6 - tsx: 4.20.6 - zod: 3.25.76 - transitivePeerDependencies: - - supports-color + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 - '@tanstack/router-plugin@1.133.15(@tanstack/react-router@1.133.15(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.11(@types/node@24.8.1)(jiti@2.6.1)(lightningcss@1.30.1)(tsx@4.20.6)(yaml@2.0.0-1))': - dependencies: - '@babel/core': 7.28.4 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.4) - '@babel/template': 7.27.2 - '@babel/traverse': 7.28.4 - '@babel/types': 7.28.4 - '@tanstack/router-core': 1.133.15 - '@tanstack/router-generator': 1.133.15 - '@tanstack/router-utils': 1.133.3 - '@tanstack/virtual-file-routes': 1.133.3 - babel-dead-code-elimination: 1.0.10 - chokidar: 3.6.0 - unplugin: 2.3.10 - zod: 3.25.76 - optionalDependencies: - '@tanstack/react-router': 1.133.15(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - vite: 7.1.11(@types/node@24.8.1)(jiti@2.6.1)(lightningcss@1.30.1)(tsx@4.20.6)(yaml@2.0.0-1) - transitivePeerDependencies: - - supports-color + '@shikijs/vscode-textmate@10.0.2': {} - '@tanstack/router-utils@1.133.3': + '@so-ric/colorspace@1.1.6': dependencies: - '@babel/core': 7.28.4 - '@babel/generator': 7.28.3 - '@babel/parser': 7.28.4 - '@babel/preset-typescript': 7.27.1(@babel/core@7.28.4) - ansis: 4.2.0 - diff: 8.0.2 - pathe: 2.0.3 - tinyglobby: 0.2.15 - transitivePeerDependencies: - - supports-color - - '@tanstack/store@0.7.7': {} + color: 5.0.2 + text-hex: 1.0.0 - '@tanstack/virtual-file-routes@1.133.3': {} + '@standard-schema/spec@1.0.0': {} - '@tanstack/zod-form-adapter@0.42.1(zod@4.1.12)': + '@swc/helpers@0.5.17': dependencies: - '@tanstack/form-core': 0.42.1 - zod: 4.1.12 + tslib: 2.8.1 '@types/body-parser@1.19.6': dependencies: @@ -5730,6 +5946,14 @@ snapshots: dependencies: '@types/node': 20.19.22 + '@types/debug@4.1.12': + dependencies: + '@types/ms': 2.1.0 + + '@types/estree-jsx@1.0.5': + dependencies: + '@types/estree': 1.0.8 + '@types/estree@1.0.8': {} '@types/express-serve-static-core@4.19.7': @@ -5746,8 +5970,18 @@ snapshots: '@types/qs': 6.14.0 '@types/serve-static': 1.15.9 + '@types/fontkit@2.0.8': + dependencies: + '@types/node': 20.19.22 + + '@types/hast@3.0.4': + dependencies: + '@types/unist': 3.0.3 + '@types/http-errors@2.0.5': {} + '@types/js-yaml@4.0.9': {} + '@types/json-schema@7.0.15': {} '@types/jsonwebtoken@9.0.10': @@ -5755,10 +5989,24 @@ snapshots: '@types/ms': 2.1.0 '@types/node': 22.15.3 + '@types/mdast@4.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/mdx@2.0.13': {} + '@types/mime@1.3.5': {} '@types/ms@2.1.0': {} + '@types/nlcst@2.0.3': + dependencies: + '@types/unist': 3.0.3 + + '@types/node@12.20.55': {} + + '@types/node@17.0.45': {} + '@types/node@20.19.22': dependencies: undici-types: 6.21.0 @@ -5781,13 +6029,9 @@ snapshots: '@types/range-parser@1.2.7': {} - '@types/react-dom@19.2.2(@types/react@19.2.2)': + '@types/sax@1.2.7': dependencies: - '@types/react': 19.2.2 - - '@types/react@19.2.2': - dependencies: - csstype: 3.1.3 + '@types/node': 20.19.22 '@types/send@0.17.5': dependencies: @@ -5813,6 +6057,10 @@ snapshots: '@types/triple-beam@1.3.5': {} + '@types/unist@2.0.11': {} + + '@types/unist@3.0.3': {} + '@types/ws@8.18.1': dependencies: '@types/node': 22.15.3 @@ -5834,23 +6082,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.46.1 - '@typescript-eslint/type-utils': 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.46.1 - eslint: 9.38.0(jiti@2.6.1) - graphemer: 1.4.0 - ignore: 7.0.5 - natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/parser@8.40.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2)': dependencies: '@typescript-eslint/scope-manager': 8.40.0 @@ -5863,18 +6094,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@typescript-eslint/scope-manager': 8.46.1 - '@typescript-eslint/types': 8.46.1 - '@typescript-eslint/typescript-estree': 8.46.1(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.46.1 - debug: 4.4.1 - eslint: 9.38.0(jiti@2.6.1) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/project-service@8.40.0(typescript@5.9.2)': dependencies: '@typescript-eslint/tsconfig-utils': 8.40.0(typescript@5.9.2) @@ -5884,33 +6103,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.46.1(typescript@5.9.3)': - dependencies: - '@typescript-eslint/tsconfig-utils': 8.46.1(typescript@5.9.3) - '@typescript-eslint/types': 8.46.1 - debug: 4.4.1 - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/scope-manager@8.40.0': dependencies: '@typescript-eslint/types': 8.40.0 '@typescript-eslint/visitor-keys': 8.40.0 - '@typescript-eslint/scope-manager@8.46.1': - dependencies: - '@typescript-eslint/types': 8.46.1 - '@typescript-eslint/visitor-keys': 8.46.1 - '@typescript-eslint/tsconfig-utils@8.40.0(typescript@5.9.2)': dependencies: typescript: 5.9.2 - '@typescript-eslint/tsconfig-utils@8.46.1(typescript@5.9.3)': - dependencies: - typescript: 5.9.3 - '@typescript-eslint/type-utils@8.40.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2)': dependencies: '@typescript-eslint/types': 8.40.0 @@ -5923,22 +6124,8 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@typescript-eslint/types': 8.46.1 - '@typescript-eslint/typescript-estree': 8.46.1(typescript@5.9.3) - '@typescript-eslint/utils': 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - debug: 4.4.1 - eslint: 9.38.0(jiti@2.6.1) - ts-api-utils: 2.1.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/types@8.40.0': {} - '@typescript-eslint/types@8.46.1': {} - '@typescript-eslint/typescript-estree@8.40.0(typescript@5.9.2)': dependencies: '@typescript-eslint/project-service': 8.40.0(typescript@5.9.2) @@ -5955,22 +6142,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.46.1(typescript@5.9.3)': - dependencies: - '@typescript-eslint/project-service': 8.46.1(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.46.1(typescript@5.9.3) - '@typescript-eslint/types': 8.46.1 - '@typescript-eslint/visitor-keys': 8.46.1 - debug: 4.4.1 - fast-glob: 3.3.3 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.7.2 - ts-api-utils: 2.1.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/utils@8.40.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2)': dependencies: '@eslint-community/eslint-utils': 4.7.0(eslint@9.34.0(jiti@2.6.1)) @@ -5982,34 +6153,62 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/visitor-keys@8.40.0': + dependencies: + '@typescript-eslint/types': 8.40.0 + eslint-visitor-keys: 4.2.1 + + '@ungap/structured-clone@1.3.0': {} + + '@volar/kit@2.4.23(typescript@5.9.2)': + dependencies: + '@volar/language-service': 2.4.23 + '@volar/typescript': 2.4.23 + typesafe-path: 0.2.2 + typescript: 5.9.2 + vscode-languageserver-textdocument: 1.0.12 + vscode-uri: 3.1.0 + + '@volar/language-core@2.4.23': + dependencies: + '@volar/source-map': 2.4.23 + + '@volar/language-server@2.4.23': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.38.0(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.46.1 - '@typescript-eslint/types': 8.46.1 - '@typescript-eslint/typescript-estree': 8.46.1(typescript@5.9.3) - eslint: 9.38.0(jiti@2.6.1) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color + '@volar/language-core': 2.4.23 + '@volar/language-service': 2.4.23 + '@volar/typescript': 2.4.23 + path-browserify: 1.0.1 + request-light: 0.7.0 + vscode-languageserver: 9.0.1 + vscode-languageserver-protocol: 3.17.5 + vscode-languageserver-textdocument: 1.0.12 + vscode-uri: 3.1.0 - '@typescript-eslint/visitor-keys@8.40.0': + '@volar/language-service@2.4.23': dependencies: - '@typescript-eslint/types': 8.40.0 - eslint-visitor-keys: 4.2.1 + '@volar/language-core': 2.4.23 + vscode-languageserver-protocol: 3.17.5 + vscode-languageserver-textdocument: 1.0.12 + vscode-uri: 3.1.0 - '@typescript-eslint/visitor-keys@8.46.1': + '@volar/source-map@2.4.23': {} + + '@volar/typescript@2.4.23': dependencies: - '@typescript-eslint/types': 8.46.1 - eslint-visitor-keys: 4.2.1 + '@volar/language-core': 2.4.23 + path-browserify: 1.0.1 + vscode-uri: 3.1.0 - '@vitejs/plugin-react-swc@4.1.0(vite@7.1.11(@types/node@24.8.1)(jiti@2.6.1)(lightningcss@1.30.1)(tsx@4.20.6)(yaml@2.0.0-1))': + '@vscode/emmet-helper@2.11.0': dependencies: - '@rolldown/pluginutils': 1.0.0-beta.35 - '@swc/core': 1.13.5 - vite: 7.1.11(@types/node@24.8.1)(jiti@2.6.1)(lightningcss@1.30.1)(tsx@4.20.6)(yaml@2.0.0-1) - transitivePeerDependencies: - - '@swc/helpers' + emmet: 2.4.11 + jsonc-parser: 2.3.1 + vscode-languageserver-textdocument: 1.0.12 + vscode-languageserver-types: 3.17.5 + vscode-uri: 3.1.0 + + '@vscode/l10n@0.0.18': {} JSONStream@1.3.5: dependencies: @@ -6041,6 +6240,12 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 + ansi-align@3.0.1: + dependencies: + string-width: 4.2.3 + + ansi-colors@4.1.3: {} + ansi-escapes@3.2.0: {} ansi-escapes@4.3.2: @@ -6053,6 +6258,8 @@ snapshots: ansi-regex@5.0.1: {} + ansi-regex@6.2.2: {} + ansi-styles@3.2.1: dependencies: color-convert: 1.9.3 @@ -6061,18 +6268,22 @@ snapshots: dependencies: color-convert: 2.0.1 - ansis@4.2.0: {} + ansi-styles@6.2.3: {} anymatch@3.1.3: dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 - argparse@2.0.1: {} + arg@5.0.2: {} - aria-hidden@1.2.6: + argparse@1.0.10: dependencies: - tslib: 2.8.1 + sprintf-js: 1.0.3 + + argparse@2.0.1: {} + + aria-query@5.3.2: {} array-buffer-byte-length@1.0.2: dependencies: @@ -6094,6 +6305,8 @@ snapshots: is-string: 1.1.1 math-intrinsics: 1.1.0 + array-iterate@2.0.1: {} + array-union@2.1.0: {} array.prototype.findlast@1.2.5: @@ -6137,9 +6350,113 @@ snapshots: get-intrinsic: 1.3.0 is-array-buffer: 3.0.5 - ast-types@0.16.1: + astring@1.9.0: {} + + astro-expressive-code@0.41.3(astro@5.15.1(@types/node@20.19.22)(jiti@2.6.1)(lightningcss@1.30.1)(rollup@4.52.5)(tsx@4.20.6)(typescript@5.9.2)(yaml@2.0.0-1)): dependencies: - tslib: 2.8.1 + astro: 5.15.1(@types/node@20.19.22)(jiti@2.6.1)(lightningcss@1.30.1)(rollup@4.52.5)(tsx@4.20.6)(typescript@5.9.2)(yaml@2.0.0-1) + rehype-expressive-code: 0.41.3 + + astro@5.15.1(@types/node@20.19.22)(jiti@2.6.1)(lightningcss@1.30.1)(rollup@4.52.5)(tsx@4.20.6)(typescript@5.9.2)(yaml@2.0.0-1): + dependencies: + '@astrojs/compiler': 2.13.0 + '@astrojs/internal-helpers': 0.7.4 + '@astrojs/markdown-remark': 6.3.8 + '@astrojs/telemetry': 3.3.0 + '@capsizecss/unpack': 3.0.0 + '@oslojs/encoding': 1.1.0 + '@rollup/pluginutils': 5.3.0(rollup@4.52.5) + acorn: 8.15.0 + aria-query: 5.3.2 + axobject-query: 4.1.0 + boxen: 8.0.1 + ci-info: 4.3.1 + clsx: 2.1.1 + common-ancestor-path: 1.0.1 + cookie: 1.0.2 + cssesc: 3.0.0 + debug: 4.4.1 + deterministic-object-hash: 2.0.2 + devalue: 5.4.1 + diff: 5.2.0 + dlv: 1.1.3 + dset: 3.1.4 + es-module-lexer: 1.7.0 + esbuild: 0.25.11 + estree-walker: 3.0.3 + flattie: 1.1.1 + fontace: 0.3.1 + github-slugger: 2.0.0 + html-escaper: 3.0.3 + http-cache-semantics: 4.2.0 + import-meta-resolve: 4.2.0 + js-yaml: 4.1.0 + magic-string: 0.30.19 + magicast: 0.3.5 + mrmime: 2.0.1 + neotraverse: 0.6.18 + p-limit: 6.2.0 + p-queue: 8.1.1 + package-manager-detector: 1.5.0 + picocolors: 1.1.1 + picomatch: 4.0.3 + prompts: 2.4.2 + rehype: 13.0.2 + semver: 7.7.2 + shiki: 3.14.0 + smol-toml: 1.4.2 + tinyexec: 1.0.1 + tinyglobby: 0.2.15 + tsconfck: 3.1.6(typescript@5.9.2) + ultrahtml: 1.6.0 + unifont: 0.6.0 + unist-util-visit: 5.0.0 + unstorage: 1.17.1 + vfile: 6.0.3 + vite: 6.4.1(@types/node@20.19.22)(jiti@2.6.1)(lightningcss@1.30.1)(tsx@4.20.6)(yaml@2.0.0-1) + vitefu: 1.1.1(vite@6.4.1(@types/node@20.19.22)(jiti@2.6.1)(lightningcss@1.30.1)(tsx@4.20.6)(yaml@2.0.0-1)) + xxhash-wasm: 1.1.0 + yargs-parser: 21.1.1 + yocto-spinner: 0.2.3 + zod: 3.25.76 + zod-to-json-schema: 3.24.6(zod@3.25.76) + zod-to-ts: 1.2.0(typescript@5.9.2)(zod@3.25.76) + optionalDependencies: + sharp: 0.34.4 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@types/node' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - db0 + - idb-keyval + - ioredis + - jiti + - less + - lightningcss + - rollup + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - typescript + - uploadthing + - yaml async-function@1.0.0: {} @@ -6161,20 +6478,27 @@ snapshots: transitivePeerDependencies: - debug - babel-dead-code-elimination@1.0.10: - dependencies: - '@babel/core': 7.28.4 - '@babel/parser': 7.28.4 - '@babel/traverse': 7.28.4 - '@babel/types': 7.28.4 - transitivePeerDependencies: - - supports-color + axobject-query@4.1.0: {} + + bail@2.0.2: {} balanced-match@1.0.2: {} + base-64@1.0.0: {} + base64-js@1.5.1: {} - baseline-browser-mapping@2.8.18: {} + bcp-47-match@2.0.3: {} + + bcp-47@2.1.0: + dependencies: + is-alphabetical: 2.0.1 + is-alphanumerical: 2.0.1 + is-decimal: 2.0.1 + + better-path-resolve@1.0.0: + dependencies: + is-windows: 1.0.2 binary-extensions@2.3.0: {} @@ -6201,6 +6525,19 @@ snapshots: transitivePeerDependencies: - supports-color + boolbase@1.0.0: {} + + boxen@8.0.1: + dependencies: + ansi-align: 3.0.1 + camelcase: 8.0.0 + chalk: 5.6.2 + cli-boxes: 3.0.0 + string-width: 7.2.0 + type-fest: 4.41.0 + widest-line: 5.0.0 + wrap-ansi: 9.0.2 + brace-expansion@1.1.12: dependencies: balanced-match: 1.0.2 @@ -6214,13 +6551,9 @@ snapshots: dependencies: fill-range: 7.1.1 - browserslist@4.26.3: + brotli@1.3.3: dependencies: - baseline-browser-mapping: 2.8.18 - caniuse-lite: 1.0.30001751 - electron-to-chromium: 1.5.237 - node-releases: 2.0.25 - update-browserslist-db: 1.1.3(browserslist@4.26.3) + base64-js: 1.5.1 buffer-equal-constant-time@1.0.1: {} @@ -6236,7 +6569,7 @@ snapshots: bytes@3.1.2: {} - c12@3.1.0: + c12@3.1.0(magicast@0.3.5): dependencies: chokidar: 4.0.3 confbox: 0.2.2 @@ -6250,6 +6583,8 @@ snapshots: perfect-debounce: 1.0.0 pkg-types: 2.3.0 rc9: 2.1.2 + optionalDependencies: + magicast: 0.3.5 cachedir@2.3.0: {} @@ -6274,7 +6609,9 @@ snapshots: callsites@3.1.0: {} - caniuse-lite@1.0.30001751: {} + camelcase@8.0.0: {} + + ccount@2.0.1: {} chalk@2.4.2: dependencies: @@ -6289,8 +6626,18 @@ snapshots: chalk@5.6.2: {} + character-entities-html4@2.1.0: {} + + character-entities-legacy@3.0.0: {} + + character-entities@2.0.2: {} + + character-reference-invalid@2.0.1: {} + chardet@0.7.0: {} + chardet@2.1.0: {} + chokidar@3.6.0: dependencies: anymatch: 3.1.3 @@ -6307,15 +6654,15 @@ snapshots: dependencies: readdirp: 4.1.2 - chownr@3.0.0: {} + ci-info@3.9.0: {} + + ci-info@4.3.1: {} citty@0.1.6: dependencies: consola: 3.4.2 - class-variance-authority@0.7.1: - dependencies: - clsx: 2.1.1 + cli-boxes@3.0.0: {} cli-cursor@2.1.0: dependencies: @@ -6339,8 +6686,12 @@ snapshots: clone@1.0.4: {} + clone@2.1.2: {} + clsx@2.1.1: {} + collapse-white-space@2.1.0: {} + color-convert@1.9.3: dependencies: color-name: 1.1.3 @@ -6372,6 +6723,8 @@ snapshots: dependencies: delayed-stream: 1.0.0 + comma-separated-tokens@2.0.3: {} + commander@6.2.0: {} commander@9.5.0: {} @@ -6396,6 +6749,8 @@ snapshots: - '@types/node' - typescript + common-ancestor-path@1.0.1: {} + compare-func@2.0.0: dependencies: array-ify: 1.0.0 @@ -6446,14 +6801,14 @@ snapshots: meow: 12.1.1 split2: 4.2.0 - convert-source-map@2.0.0: {} - - cookie-es@2.0.0: {} + cookie-es@1.2.2: {} cookie-signature@1.0.6: {} cookie@0.7.1: {} + cookie@1.0.2: {} + cors@2.8.5: dependencies: object-assign: 4.1.1 @@ -6481,7 +6836,18 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - csstype@3.1.3: {} + crossws@0.3.5: + dependencies: + uncrypto: 0.1.3 + + css-selector-parser@3.1.3: {} + + css-tree@3.1.0: + dependencies: + mdn-data: 2.12.2 + source-map-js: 1.2.1 + + cssesc@3.0.0: {} cz-conventional-changelog@3.3.0(@types/node@24.8.1)(typescript@5.9.2): dependencies: @@ -6526,6 +6892,8 @@ snapshots: es-errors: 1.3.0 is-data-view: 1.0.2 + dataloader@1.4.0: {} + debug@2.6.9: dependencies: ms: 2.0.0 @@ -6534,7 +6902,9 @@ snapshots: dependencies: ms: 2.1.3 - decode-formdata@0.9.0: {} + decode-named-character-reference@1.2.0: + dependencies: + character-entities: 2.0.2 dedent@0.7.0: {} @@ -6564,6 +6934,8 @@ snapshots: depd@2.0.0: {} + dequal@2.0.3: {} + destr@2.0.5: {} destroy@1.2.0: {} @@ -6574,16 +6946,28 @@ snapshots: detect-libc@2.1.2: {} - detect-node-es@1.1.0: {} + deterministic-object-hash@2.0.2: + dependencies: + base-64: 1.0.0 devalue@5.4.1: {} - diff@8.0.2: {} + devlop@1.1.0: + dependencies: + dequal: 2.0.3 + + dfa@1.2.0: {} + + diff@5.2.0: {} dir-glob@3.0.1: dependencies: path-type: 4.0.0 + direction@2.0.1: {} + + dlv@1.1.3: {} + doctrine@2.1.0: dependencies: esutils: 2.0.3 @@ -6613,6 +6997,10 @@ snapshots: dotenv@17.2.3: {} + dotenv@8.6.0: {} + + dset@3.1.4: {} + dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.2 @@ -6632,7 +7020,12 @@ snapshots: '@standard-schema/spec': 1.0.0 fast-check: 3.23.2 - electron-to-chromium@1.5.237: {} + emmet@2.4.11: + dependencies: + '@emmetio/abbreviation': 2.3.3 + '@emmetio/css-abbreviation': 2.1.8 + + emoji-regex@10.6.0: {} emoji-regex@8.0.0: {} @@ -6644,10 +7037,12 @@ snapshots: encodeurl@2.0.0: {} - enhanced-resolve@5.18.3: + enquirer@2.4.1: dependencies: - graceful-fs: 4.2.11 - tapable: 2.3.0 + ansi-colors: 4.1.3 + strip-ansi: 6.0.1 + + entities@6.0.1: {} env-paths@2.2.1: {} @@ -6735,6 +7130,8 @@ snapshots: iterator.prototype: 1.1.5 safe-array-concat: 1.1.3 + es-module-lexer@1.7.0: {} + es-object-atoms@1.1.1: dependencies: es-errors: 1.3.0 @@ -6756,6 +7153,20 @@ snapshots: is-date-object: 1.1.0 is-symbol: 1.1.1 + esast-util-from-estree@2.0.0: + dependencies: + '@types/estree-jsx': 1.0.5 + devlop: 1.1.0 + estree-util-visit: 2.0.0 + unist-util-position-from-estree: 2.0.0 + + esast-util-from-js@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + acorn: 8.15.0 + esast-util-from-estree: 2.0.0 + vfile-message: 4.0.3 + esbuild@0.25.11: optionalDependencies: '@esbuild/aix-ppc64': 0.25.11 @@ -6793,6 +7204,8 @@ snapshots: escape-string-regexp@4.0.0: {} + escape-string-regexp@5.0.0: {} + eslint-config-prettier@10.1.1(eslint@9.34.0(jiti@2.6.1)): dependencies: eslint: 9.34.0(jiti@2.6.1) @@ -6803,14 +7216,6 @@ snapshots: dependencies: eslint: 9.34.0(jiti@2.6.1) - eslint-plugin-react-hooks@5.2.0(eslint@9.38.0(jiti@2.6.1)): - dependencies: - eslint: 9.38.0(jiti@2.6.1) - - eslint-plugin-react-refresh@0.4.24(eslint@9.38.0(jiti@2.6.1)): - dependencies: - eslint: 9.38.0(jiti@2.6.1) - eslint-plugin-react@7.37.5(eslint@9.34.0(jiti@2.6.1)): dependencies: array-includes: 3.1.9 @@ -6890,47 +7295,6 @@ snapshots: transitivePeerDependencies: - supports-color - eslint@9.38.0(jiti@2.6.1): - dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0(jiti@2.6.1)) - '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.21.1 - '@eslint/config-helpers': 0.4.1 - '@eslint/core': 0.16.0 - '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.38.0 - '@eslint/plugin-kit': 0.4.0 - '@humanfs/node': 0.16.6 - '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.4.3 - '@types/estree': 1.0.8 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.6 - debug: 4.4.1 - escape-string-regexp: 4.0.0 - eslint-scope: 8.4.0 - eslint-visitor-keys: 4.2.1 - espree: 10.4.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 - optionalDependencies: - jiti: 2.6.1 - transitivePeerDependencies: - - supports-color - espree@10.4.0: dependencies: acorn: 8.15.0 @@ -6949,10 +7313,47 @@ snapshots: estraverse@5.3.0: {} + estree-util-attach-comments@3.0.0: + dependencies: + '@types/estree': 1.0.8 + + estree-util-build-jsx@3.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + estree-walker: 3.0.3 + + estree-util-is-identifier-name@3.0.0: {} + + estree-util-scope@1.0.0: + dependencies: + '@types/estree': 1.0.8 + devlop: 1.1.0 + + estree-util-to-js@2.0.0: + dependencies: + '@types/estree-jsx': 1.0.5 + astring: 1.9.0 + source-map: 0.7.6 + + estree-util-visit@2.0.0: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/unist': 3.0.3 + + estree-walker@2.0.2: {} + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.8 + esutils@2.0.3: {} etag@1.8.1: {} + eventemitter3@5.0.1: {} + expand-tilde@2.0.2: dependencies: homedir-polyfill: 1.0.3 @@ -6997,8 +7398,19 @@ snapshots: transitivePeerDependencies: - supports-color + expressive-code@0.41.3: + dependencies: + '@expressive-code/core': 0.41.3 + '@expressive-code/plugin-frames': 0.41.3 + '@expressive-code/plugin-shiki': 0.41.3 + '@expressive-code/plugin-text-markers': 0.41.3 + exsolve@1.0.7: {} + extend@3.0.2: {} + + extendable-error@0.1.7: {} + external-editor@3.1.0: dependencies: chardet: 0.7.0 @@ -7082,6 +7494,11 @@ snapshots: find-root@1.1.0: {} + find-up@4.1.0: + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + find-up@5.0.0: dependencies: locate-path: 6.0.0 @@ -7107,10 +7524,29 @@ snapshots: flatted@3.3.3: {} + flattie@1.1.1: {} + fn.name@1.1.0: {} follow-redirects@1.15.11: {} + fontace@0.3.1: + dependencies: + '@types/fontkit': 2.0.8 + fontkit: 2.0.4 + + fontkit@2.0.4: + dependencies: + '@swc/helpers': 0.5.17 + brotli: 1.3.3 + clone: 2.1.2 + dfa: 1.2.0 + fast-deep-equal: 3.1.3 + restructure: 3.0.2 + tiny-inflate: 1.0.3 + unicode-properties: 1.4.1 + unicode-trie: 2.0.0 + for-each@0.3.5: dependencies: is-callable: 1.2.7 @@ -7127,6 +7563,18 @@ snapshots: fresh@0.5.2: {} + fs-extra@7.0.1: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + + fs-extra@8.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + fs-extra@9.1.0: dependencies: at-least-node: 1.0.0 @@ -7152,10 +7600,10 @@ snapshots: functions-have-names@1.2.3: {} - gensync@1.0.0-beta.2: {} - get-caller-file@2.0.5: {} + get-east-asian-width@1.4.0: {} + get-intrinsic@1.3.0: dependencies: call-bind-apply-helpers: 1.0.2 @@ -7169,8 +7617,6 @@ snapshots: hasown: 2.0.2 math-intrinsics: 1.1.0 - get-nonce@1.0.1: {} - get-proto@1.0.1: dependencies: dunder-proto: 1.0.1 @@ -7201,6 +7647,8 @@ snapshots: meow: 12.1.1 split2: 4.2.0 + github-slugger@2.0.0: {} + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 @@ -7249,8 +7697,6 @@ snapshots: globals@16.3.0: {} - globals@16.4.0: {} - globalthis@1.0.4: dependencies: define-properties: 1.2.1 @@ -7265,39 +7711,236 @@ snapshots: merge2: 1.4.1 slash: 3.0.0 - goober@2.1.18(csstype@3.1.3): - dependencies: - csstype: 3.1.3 - gopd@1.2.0: {} graceful-fs@4.2.11: {} graphemer@1.4.0: {} + h3@1.15.4: + dependencies: + cookie-es: 1.2.2 + crossws: 0.3.5 + defu: 6.1.4 + destr: 2.0.5 + iron-webcrypto: 1.2.1 + node-mock-http: 1.0.3 + radix3: 1.1.2 + ufo: 1.6.1 + uncrypto: 0.1.3 + has-bigints@1.1.0: {} has-flag@3.0.0: {} - has-flag@4.0.0: {} + has-flag@4.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.1 + + has-proto@1.2.0: + dependencies: + dunder-proto: 1.0.1 + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + hast-util-embedded@3.0.0: + dependencies: + '@types/hast': 3.0.4 + hast-util-is-element: 3.0.0 + + hast-util-format@1.1.0: + dependencies: + '@types/hast': 3.0.4 + hast-util-embedded: 3.0.0 + hast-util-minify-whitespace: 1.0.1 + hast-util-phrasing: 3.0.1 + hast-util-whitespace: 3.0.0 + html-whitespace-sensitive-tag-names: 3.0.1 + unist-util-visit-parents: 6.0.2 + + hast-util-from-html@2.0.3: + dependencies: + '@types/hast': 3.0.4 + devlop: 1.1.0 + hast-util-from-parse5: 8.0.3 + parse5: 7.3.0 + vfile: 6.0.3 + vfile-message: 4.0.3 + + hast-util-from-parse5@8.0.3: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + devlop: 1.1.0 + hastscript: 9.0.1 + property-information: 7.1.0 + vfile: 6.0.3 + vfile-location: 5.0.3 + web-namespaces: 2.0.1 + + hast-util-has-property@3.0.0: + dependencies: + '@types/hast': 3.0.4 + + hast-util-is-body-ok-link@3.0.1: + dependencies: + '@types/hast': 3.0.4 + + hast-util-is-element@3.0.0: + dependencies: + '@types/hast': 3.0.4 + + hast-util-minify-whitespace@1.0.1: + dependencies: + '@types/hast': 3.0.4 + hast-util-embedded: 3.0.0 + hast-util-is-element: 3.0.0 + hast-util-whitespace: 3.0.0 + unist-util-is: 6.0.1 + + hast-util-parse-selector@4.0.0: + dependencies: + '@types/hast': 3.0.4 + + hast-util-phrasing@3.0.1: + dependencies: + '@types/hast': 3.0.4 + hast-util-embedded: 3.0.0 + hast-util-has-property: 3.0.0 + hast-util-is-body-ok-link: 3.0.1 + hast-util-is-element: 3.0.0 + + hast-util-raw@9.1.0: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + '@ungap/structured-clone': 1.3.0 + hast-util-from-parse5: 8.0.3 + hast-util-to-parse5: 8.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.0 + parse5: 7.3.0 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.3 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + + hast-util-select@6.0.4: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + bcp-47-match: 2.0.3 + comma-separated-tokens: 2.0.3 + css-selector-parser: 3.1.3 + devlop: 1.1.0 + direction: 2.0.1 + hast-util-has-property: 3.0.0 + hast-util-to-string: 3.0.1 + hast-util-whitespace: 3.0.0 + nth-check: 2.1.1 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + unist-util-visit: 5.0.0 + zwitch: 2.0.4 + + hast-util-to-estree@3.1.3: + dependencies: + '@types/estree': 1.0.8 + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + estree-util-attach-comments: 3.0.0 + estree-util-is-identifier-name: 3.0.0 + hast-util-whitespace: 3.0.0 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + style-to-js: 1.1.18 + unist-util-position: 5.0.0 + zwitch: 2.0.4 + transitivePeerDependencies: + - supports-color + + hast-util-to-html@9.0.5: + dependencies: + '@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: 7.1.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.4 + zwitch: 2.0.4 + + hast-util-to-jsx-runtime@2.3.6: + dependencies: + '@types/estree': 1.0.8 + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + hast-util-whitespace: 3.0.0 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + style-to-js: 1.1.18 + unist-util-position: 5.0.0 + vfile-message: 4.0.3 + transitivePeerDependencies: + - supports-color - has-property-descriptors@1.0.2: + hast-util-to-parse5@8.0.0: dependencies: - es-define-property: 1.0.1 + '@types/hast': 3.0.4 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + property-information: 6.5.0 + space-separated-tokens: 2.0.2 + web-namespaces: 2.0.1 + zwitch: 2.0.4 - has-proto@1.2.0: + hast-util-to-string@3.0.1: dependencies: - dunder-proto: 1.0.1 + '@types/hast': 3.0.4 - has-symbols@1.1.0: {} + hast-util-to-text@4.0.2: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + hast-util-is-element: 3.0.0 + unist-util-find-after: 5.0.0 - has-tostringtag@1.0.2: + hast-util-whitespace@3.0.0: dependencies: - has-symbols: 1.1.0 + '@types/hast': 3.0.4 - hasown@2.0.2: + hastscript@9.0.1: dependencies: - function-bind: 1.1.2 + '@types/hast': 3.0.4 + comma-separated-tokens: 2.0.3 + hast-util-parse-selector: 4.0.0 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 helmet@7.2.0: {} @@ -7305,6 +7948,14 @@ snapshots: dependencies: parse-passwd: 1.0.0 + html-escaper@3.0.3: {} + + html-void-elements@3.0.0: {} + + html-whitespace-sensitive-tag-names@3.0.1: {} + + http-cache-semantics@4.2.0: {} + http-errors@2.0.0: dependencies: depd: 2.0.0 @@ -7313,12 +7964,22 @@ snapshots: statuses: 2.0.1 toidentifier: 1.0.1 + human-id@4.1.2: {} + husky@9.1.7: {} + i18next@23.16.8: + dependencies: + '@babel/runtime': 7.28.4 + iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 + iconv-lite@0.7.0: + dependencies: + safer-buffer: 2.1.2 + ieee754@1.2.1: {} ignore@5.3.2: {} @@ -7345,6 +8006,8 @@ snapshots: ini@4.1.1: {} + inline-style-parser@0.2.4: {} + inquirer@6.5.2: dependencies: ansi-escapes: 3.2.0 @@ -7387,6 +8050,15 @@ snapshots: ipaddr.js@1.9.1: {} + iron-webcrypto@1.2.1: {} + + is-alphabetical@2.0.1: {} + + is-alphanumerical@2.0.1: + dependencies: + is-alphabetical: 2.0.1 + is-decimal: 2.0.1 + is-array-buffer@3.0.5: dependencies: call-bind: 1.0.8 @@ -7433,6 +8105,10 @@ snapshots: call-bound: 1.0.4 has-tostringtag: 1.0.2 + is-decimal@2.0.1: {} + + is-docker@3.0.0: {} + is-extglob@2.1.1: {} is-finalizationregistry@1.1.1: @@ -7454,6 +8130,12 @@ snapshots: dependencies: is-extglob: 2.1.1 + is-hexadecimal@2.0.1: {} + + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + is-interactive@1.0.0: {} is-map@2.0.3: {} @@ -7469,6 +8151,8 @@ snapshots: is-obj@2.0.0: {} + is-plain-obj@4.1.0: {} + is-regex@1.2.1: dependencies: call-bound: 1.0.4 @@ -7489,6 +8173,10 @@ snapshots: call-bound: 1.0.4 has-tostringtag: 1.0.2 + is-subdir@1.2.0: + dependencies: + better-path-resolve: 1.0.0 + is-symbol@1.1.1: dependencies: call-bound: 1.0.4 @@ -7520,9 +8208,11 @@ snapshots: is-windows@1.0.2: {} - isarray@2.0.5: {} + is-wsl@3.1.0: + dependencies: + is-inside-container: 1.0.0 - isbot@5.1.31: {} + isarray@2.0.5: {} isexe@2.0.0: {} @@ -7539,12 +8229,15 @@ snapshots: js-tokens@4.0.0: {} + js-yaml@3.14.1: + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + js-yaml@4.1.0: dependencies: argparse: 2.0.1 - jsesc@3.1.0: {} - json-buffer@3.0.1: {} json-parse-even-better-errors@2.3.1: {} @@ -7555,7 +8248,13 @@ snapshots: json-stable-stringify-without-jsonify@1.0.1: {} - json5@2.2.3: {} + jsonc-parser@2.3.1: {} + + jsonc-parser@3.3.1: {} + + jsonfile@4.0.0: + optionalDependencies: + graceful-fs: 4.2.11 jsonfile@6.2.0: dependencies: @@ -7600,6 +8299,12 @@ snapshots: dependencies: json-buffer: 3.0.1 + kleur@3.0.3: {} + + kleur@4.1.5: {} + + klona@2.0.6: {} + kuler@2.0.0: {} levn@0.4.1: @@ -7651,9 +8356,14 @@ snapshots: lightningcss-linux-x64-musl: 1.30.1 lightningcss-win32-arm64-msvc: 1.30.1 lightningcss-win32-x64-msvc: 1.30.1 + optional: true lines-and-columns@1.2.4: {} + locate-path@5.0.0: + dependencies: + p-locate: 4.1.0 + locate-path@6.0.0: dependencies: p-locate: 5.0.0 @@ -7714,26 +8424,217 @@ snapshots: safe-stable-stringify: 2.5.0 triple-beam: 1.4.1 + longest-streak@3.1.0: {} + longest@2.0.1: {} loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 - lru-cache@5.1.1: - dependencies: - yallist: 3.1.1 - - lucide-react@0.546.0(react@19.2.0): - dependencies: - react: 19.2.0 + lru-cache@10.4.3: {} magic-string@0.30.19: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 + magicast@0.3.5: + dependencies: + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 + source-map-js: 1.2.1 + + markdown-extensions@2.0.0: {} + + markdown-table@3.0.4: {} + math-intrinsics@1.1.0: {} + mdast-util-definitions@6.0.0: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + unist-util-visit: 5.0.0 + + mdast-util-directive@3.1.0: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + parse-entities: 4.0.2 + stringify-entities: 4.0.4 + unist-util-visit-parents: 6.0.2 + transitivePeerDependencies: + - supports-color + + mdast-util-find-and-replace@3.0.2: + dependencies: + '@types/mdast': 4.0.4 + escape-string-regexp: 5.0.0 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 + + mdast-util-from-markdown@2.0.2: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + decode-named-character-reference: 1.2.0 + devlop: 1.1.0 + mdast-util-to-string: 4.0.0 + micromark: 4.0.2 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-decode-string: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-stringify-position: 4.0.0 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-autolink-literal@2.0.1: + dependencies: + '@types/mdast': 4.0.4 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-find-and-replace: 3.0.2 + micromark-util-character: 2.1.1 + + mdast-util-gfm-footnote@2.1.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + micromark-util-normalize-identifier: 2.0.1 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-strikethrough@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-table@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + markdown-table: 3.0.4 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-task-list-item@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm@3.1.0: + dependencies: + mdast-util-from-markdown: 2.0.2 + mdast-util-gfm-autolink-literal: 2.0.1 + mdast-util-gfm-footnote: 2.1.0 + mdast-util-gfm-strikethrough: 2.0.0 + mdast-util-gfm-table: 2.0.0 + mdast-util-gfm-task-list-item: 2.0.0 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx-expression@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx-jsx@3.2.0: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + parse-entities: 4.0.2 + stringify-entities: 4.0.4 + unist-util-stringify-position: 4.0.0 + vfile-message: 4.0.3 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx@3.0.0: + dependencies: + mdast-util-from-markdown: 2.0.2 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-mdxjs-esm@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-phrasing@4.1.0: + dependencies: + '@types/mdast': 4.0.4 + unist-util-is: 6.0.1 + + mdast-util-to-hast@13.2.0: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@ungap/structured-clone': 1.3.0 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.1 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.3 + + mdast-util-to-markdown@2.1.2: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + longest-streak: 3.1.0 + mdast-util-phrasing: 4.1.0 + mdast-util-to-string: 4.0.0 + micromark-util-classify-character: 2.0.1 + micromark-util-decode-string: 2.0.1 + unist-util-visit: 5.0.0 + zwitch: 2.0.4 + + mdast-util-to-string@4.0.0: + dependencies: + '@types/mdast': 4.0.4 + + mdn-data@2.12.2: {} + media-typer@0.3.0: {} meow@12.1.1: {} @@ -7746,6 +8647,280 @@ snapshots: methods@1.1.2: {} + micromark-core-commonmark@2.0.3: + dependencies: + decode-named-character-reference: 1.2.0 + devlop: 1.1.0 + micromark-factory-destination: 2.0.1 + micromark-factory-label: 2.0.1 + micromark-factory-space: 2.0.1 + micromark-factory-title: 2.0.1 + micromark-factory-whitespace: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-html-tag-name: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-directive@3.0.2: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-factory-whitespace: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + parse-entities: 4.0.2 + + micromark-extension-gfm-autolink-literal@2.1.0: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-footnote@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-strikethrough@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-table@2.1.1: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-tagfilter@2.0.0: + dependencies: + micromark-util-types: 2.0.2 + + micromark-extension-gfm-task-list-item@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm@3.0.0: + dependencies: + micromark-extension-gfm-autolink-literal: 2.1.0 + micromark-extension-gfm-footnote: 2.1.0 + micromark-extension-gfm-strikethrough: 2.1.0 + micromark-extension-gfm-table: 2.1.1 + micromark-extension-gfm-tagfilter: 2.0.0 + micromark-extension-gfm-task-list-item: 2.1.0 + micromark-util-combine-extensions: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-mdx-expression@3.0.1: + dependencies: + '@types/estree': 1.0.8 + devlop: 1.1.0 + micromark-factory-mdx-expression: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-mdx-jsx@3.0.2: + dependencies: + '@types/estree': 1.0.8 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + micromark-factory-mdx-expression: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + vfile-message: 4.0.3 + + micromark-extension-mdx-md@2.0.0: + dependencies: + micromark-util-types: 2.0.2 + + micromark-extension-mdxjs-esm@3.0.0: + dependencies: + '@types/estree': 1.0.8 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-position-from-estree: 2.0.0 + vfile-message: 4.0.3 + + micromark-extension-mdxjs@3.0.0: + dependencies: + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + micromark-extension-mdx-expression: 3.0.1 + micromark-extension-mdx-jsx: 3.0.2 + micromark-extension-mdx-md: 2.0.0 + micromark-extension-mdxjs-esm: 3.0.0 + micromark-util-combine-extensions: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-destination@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-label@2.0.1: + dependencies: + devlop: 1.1.0 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-mdx-expression@2.0.3: + dependencies: + '@types/estree': 1.0.8 + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-position-from-estree: 2.0.0 + vfile-message: 4.0.3 + + micromark-factory-space@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-types: 2.0.2 + + micromark-factory-title@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-whitespace@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-character@2.1.1: + dependencies: + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-chunked@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-classify-character@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-combine-extensions@2.0.1: + dependencies: + micromark-util-chunked: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-decode-numeric-character-reference@2.0.2: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-decode-string@2.0.1: + dependencies: + decode-named-character-reference: 1.2.0 + micromark-util-character: 2.1.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-symbol: 2.0.1 + + micromark-util-encode@2.0.1: {} + + micromark-util-events-to-acorn@2.0.3: + dependencies: + '@types/estree': 1.0.8 + '@types/unist': 3.0.3 + devlop: 1.1.0 + estree-util-visit: 2.0.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + vfile-message: 4.0.3 + + micromark-util-html-tag-name@2.0.1: {} + + micromark-util-normalize-identifier@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-resolve-all@2.0.1: + dependencies: + micromark-util-types: 2.0.2 + + micromark-util-sanitize-uri@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-encode: 2.0.1 + micromark-util-symbol: 2.0.1 + + micromark-util-subtokenize@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-symbol@2.0.1: {} + + micromark-util-types@2.0.2: {} + + micromark@4.0.2: + dependencies: + '@types/debug': 4.1.12 + debug: 4.4.1 + decode-named-character-reference: 1.2.0 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-combine-extensions: 2.0.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-encode: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + transitivePeerDependencies: + - supports-color + micromatch@4.0.8: dependencies: braces: 3.0.3 @@ -7777,20 +8952,20 @@ snapshots: minimist@1.2.8: {} - minipass@7.1.2: {} - - minizlib@3.1.0: - dependencies: - minipass: 7.1.2 - mkdirp@0.5.6: dependencies: minimist: 1.2.8 + mri@1.2.0: {} + + mrmime@2.0.1: {} + ms@2.0.0: {} ms@2.1.3: {} + muggle-string@0.4.1: {} + mute-stream@0.0.7: {} mute-stream@0.0.8: {} @@ -7805,15 +8980,29 @@ snapshots: negotiator@0.6.4: {} + neotraverse@0.6.18: {} + + nlcst-to-string@4.0.0: + dependencies: + '@types/nlcst': 2.0.3 + node-fetch-native@1.6.7: {} + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + node-gyp-build@4.8.4: optional: true - node-releases@2.0.25: {} + node-mock-http@1.0.3: {} normalize-path@3.0.0: {} + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 + nypm@0.6.2: dependencies: citty: 0.1.6 @@ -7858,6 +9047,12 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.1.1 + ofetch@1.4.1: + dependencies: + destr: 2.0.5 + node-fetch-native: 1.6.7 + ufo: 1.6.1 + ohash@2.0.11: {} on-finished@2.4.1: @@ -7882,6 +9077,14 @@ snapshots: dependencies: mimic-fn: 2.1.0 + oniguruma-parser@0.12.1: {} + + oniguruma-to-es@4.3.3: + dependencies: + oniguruma-parser: 0.12.1 + regex: 6.0.1 + regex-recursion: 6.0.2 + openapi-types@12.1.3: {} optionator@0.9.4: @@ -7909,12 +9112,22 @@ snapshots: os-tmpdir@1.0.2: {} + outdent@0.5.0: {} + own-keys@1.0.1: dependencies: get-intrinsic: 1.3.0 object-keys: 1.1.1 safe-push-apply: 1.0.0 + p-filter@2.1.0: + dependencies: + p-map: 2.1.0 + + p-limit@2.3.0: + dependencies: + p-try: 2.2.0 + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 @@ -7923,6 +9136,14 @@ snapshots: dependencies: yocto-queue: 1.2.1 + p-limit@6.2.0: + dependencies: + yocto-queue: 1.2.1 + + p-locate@4.1.0: + dependencies: + p-limit: 2.3.0 + p-locate@5.0.0: dependencies: p-limit: 3.1.0 @@ -7931,10 +9152,48 @@ snapshots: dependencies: p-limit: 4.0.0 + p-map@2.1.0: {} + + p-queue@8.1.1: + dependencies: + eventemitter3: 5.0.1 + p-timeout: 6.1.4 + + p-timeout@6.1.4: {} + + p-try@2.2.0: {} + + package-manager-detector@0.2.11: + dependencies: + quansync: 0.2.11 + + package-manager-detector@1.5.0: {} + + pagefind@1.4.0: + optionalDependencies: + '@pagefind/darwin-arm64': 1.4.0 + '@pagefind/darwin-x64': 1.4.0 + '@pagefind/freebsd-x64': 1.4.0 + '@pagefind/linux-arm64': 1.4.0 + '@pagefind/linux-x64': 1.4.0 + '@pagefind/windows-x64': 1.4.0 + + pako@0.2.9: {} + parent-module@1.0.1: dependencies: callsites: 3.1.0 + parse-entities@4.0.2: + dependencies: + '@types/unist': 2.0.11 + character-entities-legacy: 3.0.0 + character-reference-invalid: 2.0.1 + decode-named-character-reference: 1.2.0 + is-alphanumerical: 2.0.1 + is-decimal: 2.0.1 + is-hexadecimal: 2.0.1 + parse-json@5.2.0: dependencies: '@babel/code-frame': 7.27.1 @@ -7942,10 +9201,25 @@ snapshots: json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 + parse-latin@7.0.0: + dependencies: + '@types/nlcst': 2.0.3 + '@types/unist': 3.0.3 + nlcst-to-string: 4.0.0 + unist-util-modify-children: 4.0.0 + unist-util-visit-children: 3.0.0 + vfile: 6.0.3 + parse-passwd@1.0.0: {} + parse5@7.3.0: + dependencies: + entities: 6.0.1 + parseurl@1.3.3: {} + path-browserify@1.0.1: {} + path-exists@4.0.0: {} path-exists@5.0.0: {} @@ -8005,6 +9279,8 @@ snapshots: picomatch@4.0.3: {} + pify@4.0.1: {} + pkg-types@2.3.0: dependencies: confbox: 0.2.2 @@ -8017,6 +9293,16 @@ snapshots: possible-typed-array-names@1.1.0: {} + postcss-nested@6.2.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-selector-parser: 6.1.2 + + postcss-selector-parser@6.1.2: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + postcss@8.5.6: dependencies: nanoid: 3.3.11 @@ -8035,23 +9321,39 @@ snapshots: prelude-ls@1.2.1: {} + prettier@2.8.7: + optional: true + + prettier@2.8.8: {} + prettier@3.6.2: {} - prisma@6.17.1(typescript@5.9.2): + prisma@6.17.1(magicast@0.3.5)(typescript@5.9.2): dependencies: - '@prisma/config': 6.17.1 + '@prisma/config': 6.17.1(magicast@0.3.5) '@prisma/engines': 6.17.1 optionalDependencies: typescript: 5.9.2 transitivePeerDependencies: - magicast + prismjs@1.30.0: {} + + prompts@2.4.2: + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + prop-types@15.8.1: dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 react-is: 16.13.1 + property-information@6.5.0: {} + + property-information@7.1.0: {} + proxy-addr@2.0.7: dependencies: forwarded: 0.2.0 @@ -8067,10 +9369,14 @@ snapshots: dependencies: side-channel: 1.1.0 + quansync@0.2.11: {} + queue-lit@1.5.2: {} queue-microtask@1.2.3: {} + radix3@1.1.2: {} + range-parser@1.2.1: {} raw-body@2.5.2: @@ -8085,41 +9391,14 @@ snapshots: defu: 6.1.4 destr: 2.0.5 - react-dom@19.2.0(react@19.2.0): - dependencies: - react: 19.2.0 - scheduler: 0.27.0 - react-is@16.13.1: {} - react-remove-scroll-bar@2.3.8(@types/react@19.2.2)(react@19.2.0): - dependencies: - react: 19.2.0 - react-style-singleton: 2.2.3(@types/react@19.2.2)(react@19.2.0) - tslib: 2.8.1 - optionalDependencies: - '@types/react': 19.2.2 - - react-remove-scroll@2.7.1(@types/react@19.2.2)(react@19.2.0): - dependencies: - react: 19.2.0 - react-remove-scroll-bar: 2.3.8(@types/react@19.2.2)(react@19.2.0) - react-style-singleton: 2.2.3(@types/react@19.2.2)(react@19.2.0) - tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@19.2.2)(react@19.2.0) - use-sidecar: 1.1.3(@types/react@19.2.2)(react@19.2.0) - optionalDependencies: - '@types/react': 19.2.2 - - react-style-singleton@2.2.3(@types/react@19.2.2)(react@19.2.0): + read-yaml-file@1.1.0: dependencies: - get-nonce: 1.0.1 - react: 19.2.0 - tslib: 2.8.1 - optionalDependencies: - '@types/react': 19.2.2 - - react@19.2.0: {} + graceful-fs: 4.2.11 + js-yaml: 3.14.1 + pify: 4.0.1 + strip-bom: 3.0.0 readable-stream@3.6.2: dependencies: @@ -8133,13 +9412,34 @@ snapshots: readdirp@4.1.2: {} - recast@0.23.11: + recma-build-jsx@1.0.0: dependencies: - ast-types: 0.16.1 - esprima: 4.0.1 - source-map: 0.6.1 - tiny-invariant: 1.3.3 - tslib: 2.8.1 + '@types/estree': 1.0.8 + estree-util-build-jsx: 3.0.1 + vfile: 6.0.3 + + recma-jsx@1.0.1(acorn@8.15.0): + dependencies: + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + estree-util-to-js: 2.0.0 + recma-parse: 1.0.0 + recma-stringify: 1.0.0 + unified: 11.0.5 + + recma-parse@1.0.0: + dependencies: + '@types/estree': 1.0.8 + esast-util-from-js: 2.0.1 + unified: 11.0.5 + vfile: 6.0.3 + + recma-stringify@1.0.0: + dependencies: + '@types/estree': 1.0.8 + estree-util-to-js: 2.0.0 + unified: 11.0.5 + vfile: 6.0.3 reflect.getprototypeof@1.0.10: dependencies: @@ -8152,6 +9452,16 @@ snapshots: get-proto: 1.0.1 which-builtin-type: 1.2.1 + regex-recursion@6.0.2: + dependencies: + regex-utilities: 2.3.0 + + regex-utilities@2.3.0: {} + + regex@6.0.1: + dependencies: + regex-utilities: 2.3.0 + regexp.prototype.flags@1.5.4: dependencies: call-bind: 1.0.8 @@ -8161,6 +9471,109 @@ snapshots: gopd: 1.2.0 set-function-name: 2.0.2 + rehype-expressive-code@0.41.3: + dependencies: + expressive-code: 0.41.3 + + rehype-format@5.0.1: + dependencies: + '@types/hast': 3.0.4 + hast-util-format: 1.1.0 + + rehype-parse@9.0.1: + dependencies: + '@types/hast': 3.0.4 + hast-util-from-html: 2.0.3 + unified: 11.0.5 + + rehype-raw@7.0.0: + dependencies: + '@types/hast': 3.0.4 + hast-util-raw: 9.1.0 + vfile: 6.0.3 + + rehype-recma@1.0.0: + dependencies: + '@types/estree': 1.0.8 + '@types/hast': 3.0.4 + hast-util-to-estree: 3.1.3 + transitivePeerDependencies: + - supports-color + + rehype-stringify@10.0.1: + dependencies: + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.5 + unified: 11.0.5 + + rehype@13.0.2: + dependencies: + '@types/hast': 3.0.4 + rehype-parse: 9.0.1 + rehype-stringify: 10.0.1 + unified: 11.0.5 + + remark-directive@3.0.1: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-directive: 3.1.0 + micromark-extension-directive: 3.0.2 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-gfm@4.0.1: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-gfm: 3.1.0 + micromark-extension-gfm: 3.0.0 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-mdx@3.1.1: + dependencies: + mdast-util-mdx: 3.0.0 + micromark-extension-mdxjs: 3.0.0 + transitivePeerDependencies: + - supports-color + + remark-parse@11.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.2 + micromark-util-types: 2.0.2 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-rehype@11.1.2: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + mdast-util-to-hast: 13.2.0 + unified: 11.0.5 + vfile: 6.0.3 + + remark-smartypants@3.0.2: + dependencies: + retext: 9.0.0 + retext-smartypants: 6.2.0 + unified: 11.0.5 + unist-util-visit: 5.0.0 + + remark-stringify@11.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-to-markdown: 2.1.2 + unified: 11.0.5 + + request-light@0.5.8: {} + + request-light@0.7.0: {} + require-directory@2.1.1: {} require-from-string@2.0.2: {} @@ -8192,6 +9605,33 @@ snapshots: onetime: 5.1.2 signal-exit: 3.0.7 + restructure@3.0.2: {} + + retext-latin@4.0.0: + dependencies: + '@types/nlcst': 2.0.3 + parse-latin: 7.0.0 + unified: 11.0.5 + + retext-smartypants@6.2.0: + dependencies: + '@types/nlcst': 2.0.3 + nlcst-to-string: 4.0.0 + unist-util-visit: 5.0.0 + + retext-stringify@4.0.0: + dependencies: + '@types/nlcst': 2.0.3 + nlcst-to-string: 4.0.0 + unified: 11.0.5 + + retext@9.0.0: + dependencies: + '@types/nlcst': 2.0.3 + retext-latin: 4.0.0 + retext-stringify: 4.0.0 + unified: 11.0.5 + reusify@1.1.0: {} rimraf@2.6.3: @@ -8265,7 +9705,7 @@ snapshots: safer-buffer@2.1.2: {} - scheduler@0.27.0: {} + sax@1.4.1: {} semver@6.3.1: {} @@ -8289,12 +9729,6 @@ snapshots: transitivePeerDependencies: - supports-color - seroval-plugins@1.3.3(seroval@1.3.2): - dependencies: - seroval: 1.3.2 - - seroval@1.3.2: {} - serve-static@1.16.2: dependencies: encodeurl: 2.0.0 @@ -8328,12 +9762,52 @@ snapshots: setprototypeof@1.2.0: {} + sharp@0.34.4: + dependencies: + '@img/colour': 1.0.0 + detect-libc: 2.1.2 + semver: 7.7.2 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.34.4 + '@img/sharp-darwin-x64': 0.34.4 + '@img/sharp-libvips-darwin-arm64': 1.2.3 + '@img/sharp-libvips-darwin-x64': 1.2.3 + '@img/sharp-libvips-linux-arm': 1.2.3 + '@img/sharp-libvips-linux-arm64': 1.2.3 + '@img/sharp-libvips-linux-ppc64': 1.2.3 + '@img/sharp-libvips-linux-s390x': 1.2.3 + '@img/sharp-libvips-linux-x64': 1.2.3 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.3 + '@img/sharp-libvips-linuxmusl-x64': 1.2.3 + '@img/sharp-linux-arm': 0.34.4 + '@img/sharp-linux-arm64': 0.34.4 + '@img/sharp-linux-ppc64': 0.34.4 + '@img/sharp-linux-s390x': 0.34.4 + '@img/sharp-linux-x64': 0.34.4 + '@img/sharp-linuxmusl-arm64': 0.34.4 + '@img/sharp-linuxmusl-x64': 0.34.4 + '@img/sharp-wasm32': 0.34.4 + '@img/sharp-win32-arm64': 0.34.4 + '@img/sharp-win32-ia32': 0.34.4 + '@img/sharp-win32-x64': 0.34.4 + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 shebang-regex@3.0.0: {} + shiki@3.14.0: + dependencies: + '@shikijs/core': 3.14.0 + '@shikijs/engine-javascript': 3.14.0 + '@shikijs/engine-oniguruma': 3.14.0 + '@shikijs/langs': 3.14.0 + '@shikijs/themes': 3.14.0 + '@shikijs/types': 3.14.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + side-channel-list@1.0.0: dependencies: es-errors: 1.3.0 @@ -8364,22 +9838,36 @@ snapshots: signal-exit@3.0.7: {} - slash@3.0.0: {} + signal-exit@4.1.0: {} + + sisteransi@1.0.5: {} - solid-js@1.9.9: + sitemap@8.0.1: dependencies: - csstype: 3.1.3 - seroval: 1.3.2 - seroval-plugins: 1.3.3(seroval@1.3.2) + '@types/node': 17.0.45 + '@types/sax': 1.2.7 + arg: 5.0.2 + sax: 1.4.1 - source-map-js@1.2.1: {} + slash@3.0.0: {} - source-map@0.6.1: {} + smol-toml@1.4.2: {} + + source-map-js@1.2.1: {} source-map@0.7.6: {} + space-separated-tokens@2.0.2: {} + + spawndamnit@3.0.1: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + split2@4.2.0: {} + sprintf-js@1.0.3: {} + stack-trace@0.0.10: {} statuses@2.0.1: {} @@ -8389,6 +9877,8 @@ snapshots: es-errors: 1.3.0 internal-slot: 1.1.0 + stream-replace-string@2.0.0: {} + string-width@2.1.1: dependencies: is-fullwidth-code-point: 2.0.0 @@ -8400,6 +9890,12 @@ snapshots: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 + string-width@7.2.0: + dependencies: + emoji-regex: 10.6.0 + get-east-asian-width: 1.4.0 + strip-ansi: 7.1.2 + string.prototype.matchall@4.0.12: dependencies: call-bind: 1.0.8 @@ -8448,6 +9944,11 @@ snapshots: dependencies: safe-buffer: 5.2.1 + stringify-entities@4.0.4: + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 + strip-ansi@4.0.0: dependencies: ansi-regex: 3.0.1 @@ -8460,10 +9961,24 @@ snapshots: dependencies: ansi-regex: 5.0.1 + strip-ansi@7.1.2: + dependencies: + ansi-regex: 6.2.2 + + strip-bom@3.0.0: {} + strip-bom@4.0.0: {} strip-json-comments@3.1.1: {} + style-to-js@1.1.18: + dependencies: + style-to-object: 1.0.11 + + style-to-object@1.0.11: + dependencies: + inline-style-parser: 0.2.4 + supports-color@5.5.0: dependencies: has-flag: 3.0.0 @@ -8500,34 +10015,20 @@ snapshots: express: 4.21.2 swagger-ui-dist: 5.29.5 - tailwind-merge@3.3.1: {} - - tailwindcss@4.1.14: {} - - tapable@2.3.0: {} - - tar@7.5.1: - dependencies: - '@isaacs/fs-minipass': 4.0.1 - chownr: 3.0.0 - minipass: 7.1.2 - minizlib: 3.1.0 - yallist: 5.0.0 - temp@0.9.4: dependencies: mkdirp: 0.5.6 rimraf: 2.6.3 + term-size@2.2.1: {} + text-extensions@2.4.0: {} text-hex@1.0.0: {} through@2.3.8: {} - tiny-invariant@1.3.3: {} - - tiny-warning@1.0.3: {} + tiny-inflate@1.0.3: {} tinyexec@1.0.1: {} @@ -8546,16 +10047,18 @@ snapshots: toidentifier@1.0.1: {} + tr46@0.0.3: {} + + trim-lines@3.0.1: {} + triple-beam@1.4.1: {} + trough@2.2.0: {} + ts-api-utils@2.1.0(typescript@5.9.2): dependencies: typescript: 5.9.2 - ts-api-utils@2.1.0(typescript@5.9.3): - dependencies: - typescript: 5.9.3 - tsc-alias@1.8.16: dependencies: chokidar: 3.6.0 @@ -8566,6 +10069,10 @@ snapshots: normalize-path: 3.0.0 plimit-lit: 1.6.1 + tsconfck@3.1.6(typescript@5.9.2): + optionalDependencies: + typescript: 5.9.2 + tslib@1.14.1: {} tslib@2.8.1: {} @@ -8604,14 +10111,14 @@ snapshots: turbo-windows-64: 2.5.8 turbo-windows-arm64: 2.5.8 - tw-animate-css@1.4.0: {} - type-check@0.4.0: dependencies: prelude-ls: 1.2.1 type-fest@0.21.3: {} + type-fest@4.41.0: {} + type-is@1.6.18: dependencies: media-typer: 0.3.0 @@ -8650,6 +10157,12 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 + typesafe-path@0.2.2: {} + + typescript-auto-import-cache@0.3.6: + dependencies: + semver: 7.7.2 + typescript-eslint@8.40.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2): dependencies: '@typescript-eslint/eslint-plugin': 8.40.0(@typescript-eslint/parser@8.40.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) @@ -8661,20 +10174,11 @@ snapshots: transitivePeerDependencies: - supports-color - typescript-eslint@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3): - dependencies: - '@typescript-eslint/eslint-plugin': 8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.46.1(typescript@5.9.3) - '@typescript-eslint/utils': 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.38.0(jiti@2.6.1) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - typescript@5.9.2: {} - typescript@5.9.3: {} + ufo@1.6.1: {} + + ultrahtml@1.6.0: {} unbox-primitive@1.1.0: dependencies: @@ -8683,51 +10187,106 @@ snapshots: has-symbols: 1.1.0 which-boxed-primitive: 1.1.1 + uncrypto@0.1.3: {} + undici-types@6.21.0: {} undici-types@7.14.0: {} + unicode-properties@1.4.1: + dependencies: + base64-js: 1.5.1 + unicode-trie: 2.0.0 + + unicode-trie@2.0.0: + dependencies: + pako: 0.2.9 + tiny-inflate: 1.0.3 + unicorn-magic@0.1.0: {} - universalify@2.0.1: {} + unified@11.0.5: + dependencies: + '@types/unist': 3.0.3 + bail: 2.0.2 + devlop: 1.1.0 + extend: 3.0.2 + is-plain-obj: 4.1.0 + trough: 2.2.0 + vfile: 6.0.3 - unpipe@1.0.0: {} + unifont@0.6.0: + dependencies: + css-tree: 3.1.0 + ofetch: 1.4.1 + ohash: 2.0.11 - unplugin@2.3.10: + unist-util-find-after@5.0.0: dependencies: - '@jridgewell/remapping': 2.3.5 - acorn: 8.15.0 - picomatch: 4.0.3 - webpack-virtual-modules: 0.6.2 + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 - update-browserslist-db@1.1.3(browserslist@4.26.3): + unist-util-is@6.0.1: dependencies: - browserslist: 4.26.3 - escalade: 3.2.0 - picocolors: 1.1.1 + '@types/unist': 3.0.3 - uri-js@4.4.1: + unist-util-modify-children@4.0.0: dependencies: - punycode: 2.3.1 + '@types/unist': 3.0.3 + array-iterate: 2.0.1 - use-callback-ref@1.3.3(@types/react@19.2.2)(react@19.2.0): + unist-util-position-from-estree@2.0.0: dependencies: - react: 19.2.0 - tslib: 2.8.1 - optionalDependencies: - '@types/react': 19.2.2 + '@types/unist': 3.0.3 - use-sidecar@1.1.3(@types/react@19.2.2)(react@19.2.0): + unist-util-position@5.0.0: dependencies: - detect-node-es: 1.1.0 - react: 19.2.0 - tslib: 2.8.1 - optionalDependencies: - '@types/react': 19.2.2 + '@types/unist': 3.0.3 + + unist-util-remove-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-visit: 5.0.0 + + unist-util-stringify-position@4.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-visit-children@3.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-visit-parents@6.0.2: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 - use-sync-external-store@1.6.0(react@19.2.0): + unist-util-visit@5.0.0: dependencies: - react: 19.2.0 + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 + + universalify@0.1.2: {} + + universalify@2.0.1: {} + + unpipe@1.0.0: {} + + unstorage@1.17.1: + dependencies: + anymatch: 3.1.3 + chokidar: 4.0.3 + destr: 2.0.5 + h3: 1.15.4 + lru-cache: 10.4.3 + node-fetch-native: 1.6.7 + ofetch: 1.4.1 + ufo: 1.6.1 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 user-home@2.0.0: dependencies: @@ -8741,7 +10300,22 @@ snapshots: vary@1.1.2: {} - vite@7.1.11(@types/node@24.8.1)(jiti@2.6.1)(lightningcss@1.30.1)(tsx@4.20.6)(yaml@2.0.0-1): + vfile-location@5.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile: 6.0.3 + + vfile-message@4.0.3: + dependencies: + '@types/unist': 3.0.3 + unist-util-stringify-position: 4.0.0 + + vfile@6.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile-message: 4.0.3 + + vite@6.4.1(@types/node@20.19.22)(jiti@2.6.1)(lightningcss@1.30.1)(tsx@4.20.6)(yaml@2.0.0-1): dependencies: esbuild: 0.25.11 fdir: 6.5.0(picomatch@4.0.3) @@ -8750,18 +10324,139 @@ snapshots: rollup: 4.52.5 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 24.8.1 + '@types/node': 20.19.22 fsevents: 2.3.3 jiti: 2.6.1 lightningcss: 1.30.1 tsx: 4.20.6 yaml: 2.0.0-1 + vitefu@1.1.1(vite@6.4.1(@types/node@20.19.22)(jiti@2.6.1)(lightningcss@1.30.1)(tsx@4.20.6)(yaml@2.0.0-1)): + optionalDependencies: + vite: 6.4.1(@types/node@20.19.22)(jiti@2.6.1)(lightningcss@1.30.1)(tsx@4.20.6)(yaml@2.0.0-1) + + volar-service-css@0.0.65(@volar/language-service@2.4.23): + dependencies: + vscode-css-languageservice: 6.3.8 + vscode-languageserver-textdocument: 1.0.12 + vscode-uri: 3.1.0 + optionalDependencies: + '@volar/language-service': 2.4.23 + + volar-service-emmet@0.0.65(@volar/language-service@2.4.23): + dependencies: + '@emmetio/css-parser': https://codeload.github.com/ramya-rao-a/css-parser/tar.gz/370c480ac103bd17c7bcfb34bf5d577dc40d3660 + '@emmetio/html-matcher': 1.3.0 + '@vscode/emmet-helper': 2.11.0 + vscode-uri: 3.1.0 + optionalDependencies: + '@volar/language-service': 2.4.23 + + volar-service-html@0.0.65(@volar/language-service@2.4.23): + dependencies: + vscode-html-languageservice: 5.6.0 + vscode-languageserver-textdocument: 1.0.12 + vscode-uri: 3.1.0 + optionalDependencies: + '@volar/language-service': 2.4.23 + + volar-service-prettier@0.0.65(@volar/language-service@2.4.23)(prettier@3.6.2): + dependencies: + vscode-uri: 3.1.0 + optionalDependencies: + '@volar/language-service': 2.4.23 + prettier: 3.6.2 + + volar-service-typescript-twoslash-queries@0.0.65(@volar/language-service@2.4.23): + dependencies: + vscode-uri: 3.1.0 + optionalDependencies: + '@volar/language-service': 2.4.23 + + volar-service-typescript@0.0.65(@volar/language-service@2.4.23): + dependencies: + path-browserify: 1.0.1 + semver: 7.7.2 + typescript-auto-import-cache: 0.3.6 + vscode-languageserver-textdocument: 1.0.12 + vscode-nls: 5.2.0 + vscode-uri: 3.1.0 + optionalDependencies: + '@volar/language-service': 2.4.23 + + volar-service-yaml@0.0.65(@volar/language-service@2.4.23): + dependencies: + vscode-uri: 3.1.0 + yaml-language-server: 1.15.0 + optionalDependencies: + '@volar/language-service': 2.4.23 + + vscode-css-languageservice@6.3.8: + dependencies: + '@vscode/l10n': 0.0.18 + vscode-languageserver-textdocument: 1.0.12 + vscode-languageserver-types: 3.17.5 + vscode-uri: 3.1.0 + + vscode-html-languageservice@5.6.0: + dependencies: + '@vscode/l10n': 0.0.18 + vscode-languageserver-textdocument: 1.0.12 + vscode-languageserver-types: 3.17.5 + vscode-uri: 3.1.0 + + vscode-json-languageservice@4.1.8: + dependencies: + jsonc-parser: 3.3.1 + vscode-languageserver-textdocument: 1.0.12 + vscode-languageserver-types: 3.17.5 + vscode-nls: 5.2.0 + vscode-uri: 3.1.0 + + vscode-jsonrpc@6.0.0: {} + + vscode-jsonrpc@8.2.0: {} + + vscode-languageserver-protocol@3.16.0: + dependencies: + vscode-jsonrpc: 6.0.0 + vscode-languageserver-types: 3.16.0 + + vscode-languageserver-protocol@3.17.5: + dependencies: + vscode-jsonrpc: 8.2.0 + vscode-languageserver-types: 3.17.5 + + vscode-languageserver-textdocument@1.0.12: {} + + vscode-languageserver-types@3.16.0: {} + + vscode-languageserver-types@3.17.5: {} + + vscode-languageserver@7.0.0: + dependencies: + vscode-languageserver-protocol: 3.16.0 + + vscode-languageserver@9.0.1: + dependencies: + vscode-languageserver-protocol: 3.17.5 + + vscode-nls@5.2.0: {} + + vscode-uri@3.1.0: {} + wcwidth@1.0.1: dependencies: defaults: 1.0.4 - webpack-virtual-modules@0.6.2: {} + web-namespaces@2.0.1: {} + + webidl-conversions@3.0.1: {} + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 which-boxed-primitive@1.1.1: dependencies: @@ -8794,6 +10489,8 @@ snapshots: is-weakmap: 2.0.2 is-weakset: 2.0.4 + which-pm-runs@1.1.0: {} + which-typed-array@1.1.19: dependencies: available-typed-arrays: 1.0.7 @@ -8812,6 +10509,10 @@ snapshots: dependencies: isexe: 2.0.0 + widest-line@5.0.0: + dependencies: + string-width: 7.2.0 + winston-transport@4.9.0: dependencies: logform: 2.7.0 @@ -8840,6 +10541,12 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 + wrap-ansi@9.0.2: + dependencies: + ansi-styles: 6.2.3 + string-width: 7.2.0 + strip-ansi: 7.1.2 + wrappy@1.0.2: {} ws@8.18.3(bufferutil@4.0.9): @@ -8848,14 +10555,31 @@ snapshots: xtend@4.0.2: {} - y18n@5.0.8: {} + xxhash-wasm@1.1.0: {} - yallist@3.1.1: {} + y18n@5.0.8: {} - yallist@5.0.0: {} + yaml-language-server@1.15.0: + dependencies: + ajv: 8.17.1 + lodash: 4.17.21 + request-light: 0.5.8 + vscode-json-languageservice: 4.1.8 + vscode-languageserver: 7.0.0 + vscode-languageserver-textdocument: 1.0.12 + vscode-languageserver-types: 3.17.5 + vscode-nls: 5.2.0 + vscode-uri: 3.1.0 + yaml: 2.2.2 + optionalDependencies: + prettier: 2.8.7 yaml@2.0.0-1: {} + yaml@2.2.2: {} + + yaml@2.8.1: {} + yargs-parser@21.1.1: {} yargs@17.7.2: @@ -8872,6 +10596,12 @@ snapshots: yocto-queue@1.2.1: {} + yocto-spinner@0.2.3: + dependencies: + yoctocolors: 2.1.2 + + yoctocolors@2.1.2: {} + z-schema@5.0.5: dependencies: lodash.get: 4.4.2 @@ -8880,6 +10610,17 @@ snapshots: optionalDependencies: commander: 9.5.0 + zod-to-json-schema@3.24.6(zod@3.25.76): + dependencies: + zod: 3.25.76 + + zod-to-ts@1.2.0(typescript@5.9.2)(zod@3.25.76): + dependencies: + typescript: 5.9.2 + zod: 3.25.76 + zod@3.25.76: {} zod@4.1.12: {} + + zwitch@2.0.4: {} diff --git a/scripts/create-pr.sh b/scripts/create-pr.sh new file mode 100755 index 0000000..2b767a3 --- /dev/null +++ b/scripts/create-pr.sh @@ -0,0 +1,80 @@ +#!/bin/bash + +# Auto-generate and create a PR using GitHub CLI +# Usage: ./scripts/create-pr.sh [target-branch] + +set -e + +# Default target branch is dev +TARGET_BRANCH="${1:-dev}" + +# Get current branch +CURRENT_BRANCH=$(git branch --show-current) + +# Check if gh is installed +if ! command -v gh &> /dev/null; then + echo "❌ GitHub CLI (gh) is not installed" + echo "Install it from: https://cli.github.com/" + exit 1 +fi + +# Check if we're on a branch +if [ "$CURRENT_BRANCH" == "main" ] || [ "$CURRENT_BRANCH" == "dev" ]; then + echo "❌ Cannot create PR from main or dev branch" + echo "Please switch to a feature branch" + exit 1 +fi + +# Get commits that will be in the PR +COMMITS=$(git log $TARGET_BRANCH..$CURRENT_BRANCH --oneline) + +if [ -z "$COMMITS" ]; then + echo "❌ No commits to create PR from" + exit 1 +fi + +echo "πŸ“ Commits that will be included:" +echo "$COMMITS" +echo "" + +# Generate PR title from branch name +# feat/setup-versioning -> feat: setup versioning +PR_TITLE=$(echo "$CURRENT_BRANCH" | sed 's/\//:/' | sed 's/-/ /g') + +# Create PR with auto-generated title and body from commits +echo "πŸš€ Creating PR: $PR_TITLE" +echo " Target: $TARGET_BRANCH" +echo "" + +gh pr create \ + --base "$TARGET_BRANCH" \ + --title "$PR_TITLE" \ + --body "$(cat <