diff --git a/.claude/skills/create-pr/SKILL.md b/.claude/skills/create-pr/SKILL.md new file mode 100644 index 00000000..a15bc923 --- /dev/null +++ b/.claude/skills/create-pr/SKILL.md @@ -0,0 +1,203 @@ +--- +name: sdlc:create-pr +description: Use when creating a pull request -- reads the PR template, auto-fills from git context and linked issue, confirms with the user, then creates via gh CLI. +--- + +# /sdlc:create-pr + +Create a well-structured GitHub pull request by reading the repo's PR template and filling it from context. + +**Core principle:** Templates own the format. Context owns the content. User owns the final word. + +## Template Location + +Read `.github/PULL_REQUEST_TEMPLATE.md` relative to the project root on every invocation. This path is fixed -- do not search for it. + +## Core Pattern + +1. **Gather** -- Collect all inputs silently. Ask only when auto-derivation fails. +2. **Draft** -- Fill every template section from the gathered context. +3. **Confirm** -- Show the full draft. Wait for explicit approval. Iterate. +4. **Create** -- Run `gh pr create` with `--body-file`. Report the URL. + +## Step 1: Gather + +**Auto-derive (no user interaction):** + +- Read `.github/PULL_REQUEST_TEMPLATE.md` +- Run `git diff ...HEAD` -- the branch diff +- Run `git log ..HEAD --oneline` -- the commit history +- Extract issue number from branch name (pattern: `type/NNN-description`, e.g., `feat/17-add-skill` → `#17`) +- If issue number found, run `gh issue view NNN --json title,body,labels` and extract acceptance criteria from the body + +**Ask when needed (use multiple-choice where possible):** + +| Question | When | Options | +|----------|------|---------| +| "Which issue does this PR close?" | Branch name has no issue number | List of recent open issues (via `gh issue list --state open --limit 5 --json number,title`) + "None" + Other | +| "PR type?" | Always; pre-select "Ready for review" | "Ready for review" / "Draft" | +| "Base branch?" | Always; **must be asked even when auto-detected** -- the auto-detected value is the pre-selected default, not a reason to skip | Branch we branched from (auto-detected via `git merge-base` against known remote branches; pre-selected as default) / `develop` (if present in remote) / `main` / Other | +| "Who should review this PR?" | Always; multi-select | All reviewers returned by script (see below), in order, plus "Other" as the last option | +| "Who should this PR be assigned to?" | Always; pre-select "Me" | "Me" (resolved via `gh api user --jq '.login'`) / "Nobody" (default if "Me" feels presumptuous) / Other | +| "Which checklist items have you completed?" | Always; multi-select; zero selections is valid (means none completed yet) | "Self-reviewed my own diff" / "Tests added or updated" / "Docs updated (if applicable)" / "No unrelated changes bundled in" | +| "Will you add screenshots to this PR?" | Always | "Yes, I'll add them after creation" / "No" (default) | + +### Helper scripts + +**IMPORTANT:** Do NOT run `bash .claude/skills/create-pr/*.sh` directly -- that path only works for project-local installs. Always use the commands below, which resolve the script location first. + +Auto-detect base branch: + +```bash +if [[ -f .claude/skills/create-pr/get-base-branch.sh ]]; then bash .claude/skills/create-pr/get-base-branch.sh; elif [[ -f "$HOME/.claude/skills/create-pr/get-base-branch.sh" ]]; then bash "$HOME/.claude/skills/create-pr/get-base-branch.sh"; fi +``` + +It outputs the branch name (e.g., `main`, `develop`) whose merge-base with HEAD is most recent -- i.e., the branch we most likely forked from. Present it as the pre-selected default in the base branch question. + +Fetch recent reviewers: + +```bash +if [[ -f .claude/skills/create-pr/get-reviewers.sh ]]; then bash .claude/skills/create-pr/get-reviewers.sh; elif [[ -f "$HOME/.claude/skills/create-pr/get-reviewers.sh" ]]; then bash "$HOME/.claude/skills/create-pr/get-reviewers.sh"; fi +``` + +It outputs up to 4 reviewer logins, one per line, ordered most-recent-first (excludes the current user; falls back to alphabetical collaborators for new repos). Show every login the script returns as an option, in the exact order returned. Add "Other" as the last option. Do not add a "Skip" or "None" option -- if the user wants no reviewers, they select only "Other" and leave it empty. + +Do not add labels to the PR. Labels are managed separately. + +## Step 2: Draft + +### PR Title + +Conventional commit format: `type(scope): subject` or `type: subject`. + +Allowed types: `feat`, `fix`, `docs`, `test`, `ci`, `refactor`, `perf`, `chore`, `revert`, `wip`, `build`, `style`, `release`. + + + +- Derive from branch name and commit history +- Scope is optional +- Subject: lowercase, imperative mood, no trailing period + +### PR Body + +Fill every section in template order. Strip all HTML comments (``). + +#### Summary + +First line: `Closes #` + +If no linked issue, first line: `No related issue. ` + +Followed by 1-3 sentences synthesizing commits and issue description, focused on *why* not *what*. If no issue is linked, derive from commits and branch name only. + +#### Changes + +Bullet list. Each bullet = one discrete change from the diff or commit messages. + +#### Acceptance criteria + +- **Issue has AC:** Mirror as checkboxes. Check off items the diff demonstrates are fulfilled. +- **Issue has no AC, or no issue:** Suggest AC based on the changes made. Present as unchecked checkboxes. +- **AC diverged from issue:** Note it explicitly. Example: "Note: criterion X was moved to #M" or "Added: Y discovered during implementation." + +#### Test plan + +Two subsections, always present: + +##### Automated tests +List test files added/modified in the diff and the command to run them. If none: `No automated tests added.` + +##### Manual verification +If the change has user-facing or integration behavior, list manual steps. If purely internal: `No manual steps required.` + +#### Breaking changes + +If breaking changes detected (API changes, removed exports, schema changes): describe what breaks and migration steps. + +If none: `None.` + +#### Checklist + +Render all four items based on the user's selections from the Gather step: + +- Items selected by the user → `- [x] ` +- Items not selected → `- [ ] ` + +The four items, in order: + +1. Self-reviewed my own diff +2. Tests added or updated +3. Docs updated (if applicable) +4. No unrelated changes bundled in + +#### Screenshots + +Based on the Step 1 answer: + +- "Yes": `To be added after PR creation.` (remind user to attach via GitHub UI) +- "No" (default): `None.` + +**The section is always present.** + +## Step 3: Confirm + +Show to the user: +- PR title +- Complete body (all sections, no HTML comments) +- Target base branch +- The exact `gh pr create` command that will run + +Wait for explicit approval. Accept edits to any section. Loop until approved. + +## Step 4: Create + +```bash +BODY_FILE=$(mktemp /tmp/gh_pr_body_XXXXXX) + +# Replace the placeholder below with the actual drafted PR body: +cat > "$BODY_FILE" << 'EOF' +{{PR_BODY}} +EOF + +gh pr create \ + --title "" \ + --base "<base-branch>" \ + --body-file "$BODY_FILE" \ + [--reviewer <handle> ...] \ + [--assignee <handle>] +``` + +Add `--draft` if user selected "Draft" in Step 1. Add one `--reviewer <handle>` flag per reviewer selected in Step 1; if "Other" was selected, use the handle the user provided. Add `--assignee <handle>` using the resolved login if "Me" or "Other" was selected; omit if "Nobody". + +After reporting the PR URL: if the user selected "Yes" for screenshots in Step 1, remind them to attach screenshots via the GitHub UI. + +## Edge Cases + +### Branch is behind base +Present options: +1. **Continue as-is** -- create the PR and note it's behind +2. **Rebase onto base** -- run `git rebase <base>`; if conflicts, help resolve +3. **Merge base in** -- run `git merge <base>`; if conflicts, help resolve +4. **Abort** -- stop; do not create the PR + +### No commits ahead of base +Stop. "No commits ahead of `<base>`. Nothing to create a PR from." + +## Common Mistakes + +- **Reconstructing the template from memory** -- read `.github/PULL_REQUEST_TEMPLATE.md` every time. +- **Generating an ad-hoc format** -- every section from the template must appear, in template order. +- **Creating before confirmation** -- never run `gh pr create` without explicit user approval. +- **Leaving HTML comments** -- strip all `<!-- ... -->` from the output. +- **Silently omitting `Closes #`** -- if no issue, say so explicitly on the first line. +- **Deleting empty sections** -- Breaking changes and Screenshots are always present; use `None.` +- **Ignoring AC divergence** -- note explicitly when PR criteria differ from the issue's. +- **Skipping the base-branch question** -- always present it. Auto-detection provides the default, not the answer. + +## Installation + +This skill includes helper scripts alongside `SKILL.md`. When installing or updating, copy (or symlink) the **entire `create-pr/` directory** -- not just `SKILL.md`. All files in this directory are required: + +- `SKILL.md` -- skill definition +- `get-base-branch.sh` -- auto-detects the base branch +- `get-reviewers.sh` -- fetches recent reviewer logins diff --git a/.claude/skills/create-pr/get-base-branch.sh b/.claude/skills/create-pr/get-base-branch.sh new file mode 100755 index 00000000..6bc2d1ff --- /dev/null +++ b/.claude/skills/create-pr/get-base-branch.sh @@ -0,0 +1,60 @@ +#!/usr/bin/env bash +set -euo pipefail + +# Find the base branch: the most likely target for a pull request. +# +# Strategy: pick the remote branch whose merge-base with HEAD is most recent +# (i.e., the branch we most likely forked from). This works even when the +# base branch has advanced past the fork point. +# +# 1. Check well-known stable branches first (main, master, develop, staging). +# Among those that exist, pick the one with the closest merge-base to HEAD. +# 2. If none match, fall back to any remote branch with the closest merge-base. + +current=$(git rev-parse --abbrev-ref HEAD) + +# Priority 1: well-known base branches -- pick closest merge-base +best_branch="" +best_ts=0 + +for candidate in main master develop staging; do + ref="origin/$candidate" + git rev-parse --verify "$ref" >/dev/null 2>&1 || continue + [[ "$candidate" == "$current" ]] && continue + mb=$(git merge-base HEAD "$ref" 2>/dev/null) || continue + ts=$(git log -1 --format=%ct "$mb" 2>/dev/null) || continue + [[ -n "$ts" ]] || continue + if (( ts > best_ts )); then + best_ts=$ts + best_branch=$candidate + fi +done + +if [[ -n "$best_branch" ]]; then + echo "$best_branch" + exit 0 +fi + +# Priority 2: any other remote branch, pick closest merge-base +best_branch="" +best_ts=0 + +while IFS= read -r ref; do + branch="${ref#origin/}" + [[ "$branch" == "HEAD" ]] && continue + [[ "$branch" == "$current" ]] && continue + mb=$(git merge-base HEAD "$ref" 2>/dev/null) || continue + ts=$(git log -1 --format=%ct "$mb" 2>/dev/null) || continue + [[ -n "$ts" ]] || continue + if (( ts > best_ts )); then + best_ts=$ts + best_branch=$branch + fi +done < <(git for-each-ref --format='%(refname:short)' refs/remotes/origin/) + +if [[ -z "$best_branch" ]]; then + echo "No base branch found" >&2 + exit 1 +fi + +echo "$best_branch" diff --git a/.claude/skills/create-pr/get-reviewers.sh b/.claude/skills/create-pr/get-reviewers.sh new file mode 100755 index 00000000..733e3753 --- /dev/null +++ b/.claude/skills/create-pr/get-reviewers.sh @@ -0,0 +1,34 @@ +#!/usr/bin/env bash +set -euo pipefail + +me=$(gh api user --jq '.login' 2>/dev/null) || true + +# Attempt: recent PR reviewers sorted by most-recent-first +reviewers=$( + gh pr list --state all --limit 20 --json reviews \ + --jq " + [ .[].reviews[] + | { login: .author.login, ts: .submittedAt } + ] + | sort_by(.ts) | reverse + | map(.login) + | map(select(. != \"$me\")) + | reduce .[] as \$x ( + { seen: {}, out: [] }; + if .seen[\$x] then . else { seen: (.seen | .[\$x] = true), out: (.out + [\$x]) } end + ) + | .out[:4] + | .[] + " 2>/dev/null || true +) + +if [[ -n "$reviewers" ]]; then + echo "$reviewers" + exit 0 +fi + +# Fallback: collaborators (alphabetical, excluding self) +repo=$(gh repo view --json nameWithOwner -q .nameWithOwner 2>/dev/null) || exit 0 +gh api "/repos/$repo/collaborators" \ + --jq "[ .[].login | select(. != \"$me\") ] | sort | .[:4] | .[]" \ + 2>/dev/null || true diff --git a/.claude/skills/issue/SKILL.md b/.claude/skills/issue/SKILL.md new file mode 100644 index 00000000..169eea68 --- /dev/null +++ b/.claude/skills/issue/SKILL.md @@ -0,0 +1,87 @@ +--- +name: sdlc:issue +description: Use when creating a GitHub issue from a brief -- bug, feature, epic, or spike -- against the repo's GitHub issue templates via gh CLI. +--- + +# /sdlc:issue + +Create a well-structured GitHub issue using the repo's own templates and `gh` CLI. + +**Core principle:** Templates own the format. Skill owns the behavior. + +## Core Pattern + +1. **Classify** -- Determine type from brief: bug / feature / epic / spike. If unclear, ask once. +2. **Read** -- Load `.github/ISSUE_TEMPLATE/<type>.yml`. Extract all fields, required vs optional, and label. Do this every time -- never reconstruct from memory. +3. **Interview** -- Ask only for missing required fields. If the brief already covers a field, don't re-ask. Scale ceremony to issue weight. +4. **Draft** -- Build title and body. Sections follow template field order using `label` as heading. Omit empty optional fields. +5. **Confirm** -- Show full draft including labels. Wait for explicit approval. Iterate until approved. +6. **Create** -- Write body to temp file, run `gh issue create` with all labels, report issue URL. + +## Title Format + +Issue titles must be **natural language, sentence case** (code terms and command names retain their canonical casing) -- no conventional commit prefixes, no scope tags. + +Conventional commit format (`type(scope): subject`) is for **commits and PR titles only**. It is not appropriate for issue titles, which appear in GitHub's issue list and must be scannable at a glance. + +**Good:** +- `Issue skill defaults to conventional commit format for titles` +- `mktemp fails with .md suffix` +- `Add natural language title guidance to issue skill` + +**Bad:** +- `fix(skills): mktemp fails with .md suffix` +- `fix: issue skill defaults to conventional commit format` +- `feat(issue): add title guidance` + +Rule: if a reader has to mentally strip a prefix to understand the title, the title is wrong. + +## Template Map + +| Type | File | Type label | Additional labels | +|---------|-----------------|---------------|---------------------------| +| Bug | `1-bug.yml` | `bug` | `priority: <level>` | +| Feature | `2-feature.yml` | `enhancement` | `priority: <level>` | +| Epic | `3-epic.yml` | `epic` | `priority: <level>` | +| Spike | `4-spike.yml` | `spike` | -- | + +## Labels + +Priority is applied as a label, not a form dropdown. See the Label Conventions section in `CLAUDE.md` for the full table and descriptions. + +- Bugs, features, and epics each get a `priority: <level>` label. +- Spikes don't carry priority. +- If the brief doesn't specify a level, ask once using a numbered list -- never default silently: + + 1. Critical + 2. High + 3. Medium + 4. Low + +## gh Command + +```bash +BODY_FILE=$(mktemp /tmp/gh_issue_body_XXXXXX) + +cat > "$BODY_FILE" << 'EOF' +<body> +EOF + +gh issue create \ + --title "<title>" \ + --label "<type-label>" \ + # omit the next label for spikes + --label "<priority-label>" \ + --body-file "$BODY_FILE" +``` + +Multiple `--label` flags can be chained. The type label is always present. The priority label is added for bugs, features, and epics -- omit it for spikes. + +Optional flags: `--assignee "<username>"`, `--milestone "<name>"`, `--project "<name>"` + +## Common Mistakes + +- **Skipping the template read** -- Field names and order come from the YAML, not assumptions. Read it every time. +- **Pre-emptively asking for optional fields** -- Required fields are the floor. Let the user volunteer the rest. +- **Creating before confirmation** -- Never run `gh` without explicit approval. Always show the full draft first. +- **Omitting priority labels** -- Form dropdowns do not survive `gh` CLI creation. Always apply these as labels. diff --git a/.env.example b/.env.example index 6a518dd9..d06daa43 100644 --- a/.env.example +++ b/.env.example @@ -24,19 +24,23 @@ PUBLIC_WALLETCONNECT_PROJECT_ID='' # Native token address PUBLIC_NATIVE_TOKEN_ADDRESS=0x0000000000000000000000000000000000000000 -# RPCs. Complete if you want to use a different RPC from the one provided by wagmi. +# RPCs. Use these to override the default RPC for each chain. +# +# Configured in src/lib/networks.config.ts -- fall back to CORS-friendly publicnode.com RPCs when unset: +PUBLIC_RPC_MAINNET= PUBLIC_RPC_ARBITRUM= +PUBLIC_RPC_OPTIMISM= +PUBLIC_RPC_OPTIMISM_SEPOLIA= +PUBLIC_RPC_POLYGON= +PUBLIC_RPC_SEPOLIA= +# +# Not configured by default -- add them to src/lib/networks.config.ts first, then set the RPC here: PUBLIC_RPC_ARBITRUM_SEPOLIA= PUBLIC_RPC_BASE= PUBLIC_RPC_BASE_SEPOLIA= PUBLIC_RPC_GNOSIS= PUBLIC_RPC_GNOSIS_CHIADO= -PUBLIC_RPC_MAINNET= -PUBLIC_RPC_OPTIMISM= -PUBLIC_RPC_OPTIMISM_SEPOLIA= -PUBLIC_RPC_POLYGON= PUBLIC_RPC_POLYGON_MUMBAI= -PUBLIC_RPC_SEPOLIA= # Subgraph ########################################################### diff --git a/.env.test b/.env.test index f4bf82d2..4fc516d0 100644 --- a/.env.test +++ b/.env.test @@ -5,3 +5,7 @@ PUBLIC_WALLETCONNECT_PROJECT_ID=test-project-id PUBLIC_SUBGRAPHS_API_KEY=test-api-key PUBLIC_SUBGRAPHS_CHAINS_RESOURCE_IDS=1:test:test-resource-id PUBLIC_SUBGRAPHS_ENVIRONMENT=production + +# Explicitly unset optional RPC vars so .env.local values don't leak into tests +PUBLIC_RPC_MAINNET= +PUBLIC_RPC_SEPOLIA= diff --git a/.github/ISSUE_TEMPLATE/1-bug.yml b/.github/ISSUE_TEMPLATE/1-bug.yml new file mode 100644 index 00000000..c57894cd --- /dev/null +++ b/.github/ISSUE_TEMPLATE/1-bug.yml @@ -0,0 +1,90 @@ +name: Bug Report +description: Report a bug or unexpected behavior. +title: "" +labels: ["bug"] +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to report this. Before opening a new issue, please search existing issues to avoid duplicates. + + - type: textarea + id: description + attributes: + label: Description + description: A clear and concise description of the bug. + placeholder: What happened? + validations: + required: true + + - type: textarea + id: steps + attributes: + label: Steps to reproduce + description: Minimal steps to reproduce the behavior. + placeholder: | + 1. Go to '...' + 2. Click on '...' + 3. Scroll down to '...' + 4. See error + validations: + required: true + + - type: textarea + id: expected + attributes: + label: Expected vs actual behavior + description: What did you expect to happen, and what actually happened? + placeholder: | + **Expected:** ... + **Actual:** ... + validations: + required: true + + - type: input + id: reproduction + attributes: + label: Reproduction link + description: Link to a minimal reproduction (repo, sandbox, deploy). Issues without a reproduction may be closed. + placeholder: https://github.com/... + validations: + required: false + + - type: textarea + id: environment + attributes: + label: Environment + description: Relevant environment details (OS, browser, runtime, package versions). + render: bash + placeholder: | + OS: macOS 15.3 + Node: 24.x + Package: 1.0.0 + validations: + required: false + + - type: markdown + attributes: + value: | + > **Programmatic creation:** When using `gh` CLI or REST API, apply `priority: <level>` labels instead of using the Priority dropdown (e.g., `--label "priority: high"`). See the Label Conventions section in `CLAUDE.md` for the full table. + + - type: dropdown + id: priority + attributes: + label: Priority + description: How urgently does this need to be addressed? + options: + - Critical — blocking work, system down, or security issue + - High — must be addressed in current sprint + - Medium — should be addressed soon + - Low — nice to have, can wait + validations: + required: false + + - type: textarea + id: context + attributes: + label: Additional context + description: Screenshots, logs, error messages, or anything else that might help. + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/2-feature.yml b/.github/ISSUE_TEMPLATE/2-feature.yml new file mode 100644 index 00000000..725bdf8e --- /dev/null +++ b/.github/ISSUE_TEMPLATE/2-feature.yml @@ -0,0 +1,88 @@ +name: Feature +description: Propose a new feature or enhancement. +title: "" +labels: ["enhancement"] +body: + - type: markdown + attributes: + value: | + Before opening a feature request, please check if a similar one already exists. + + - type: markdown + attributes: + value: | + > **Programmatic creation:** When using `gh` CLI or REST API, apply `priority: <level>` labels instead of using the Priority dropdown (e.g., `--label "priority: high"`). See the Label Conventions section in `CLAUDE.md` for the full table. + + - type: dropdown + id: priority + attributes: + label: Priority + description: How urgently does this need to be addressed? + options: + - Critical — blocking work, system down, or security issue + - High — must be addressed in current sprint + - Medium — should be addressed soon + - Low — nice to have, can wait + validations: + required: false + + - type: textarea + id: user-story + attributes: + label: User story / Problem statement + description: 'Who needs this and why? Pick the format that fits: "As a [role]..." for new capabilities with a clear user beneficiary; "Currently..." for UX fixes, missing feedback, or when the user role is implicit.' + placeholder: | + As a [role], I want [goal], so that [benefit]. + + — or — + + Currently, ... This is a problem because ... + validations: + required: true + + - type: textarea + id: expected-outcome + attributes: + label: Expected outcome + description: What does success look like? Describe the desired end state from the user's perspective, not the implementation approach. + placeholder: | + When this is done, a user should be able to... + The system should behave as follows... + validations: + required: true + + - type: textarea + id: acceptance-criteria + attributes: + label: Acceptance criteria + description: Specific, testable conditions that verify the expected outcome was achieved. These will be mirrored in the PR checklist. + placeholder: | + - [ ] ... + - [ ] ... + - [ ] ... + validations: + required: true + + - type: textarea + id: alternatives + attributes: + label: Alternatives considered + description: Other approaches you explored and why they were discarded. + validations: + required: false + + - type: textarea + id: technical-notes + attributes: + label: Technical notes + description: Architecture considerations, dependencies, migration concerns, or anything the implementer should know. + validations: + required: false + + - type: textarea + id: context + attributes: + label: Additional context + description: Mockups, screenshots, references, or related issues. + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/3-epic.yml b/.github/ISSUE_TEMPLATE/3-epic.yml new file mode 100644 index 00000000..99b2badf --- /dev/null +++ b/.github/ISSUE_TEMPLATE/3-epic.yml @@ -0,0 +1,116 @@ +name: Epic +description: Define a large body of work that will be broken into smaller issues. +title: "" +labels: ["epic"] +body: + - type: markdown + attributes: + value: | + Epics capture the vision and scope of a significant effort. They get decomposed into smaller, independently deliverable issues. Invest time here — the quality of the epic sets the ceiling for everything downstream. + + - type: markdown + attributes: + value: | + > **Programmatic creation:** When using `gh` CLI or REST API, apply `priority: <level>` labels instead of using the Priority dropdown (e.g., `--label "priority: high"`). See the Label Conventions section in `CLAUDE.md` for the full table. + + - type: dropdown + id: priority + attributes: + label: Priority + description: How urgently does this need to be addressed? + options: + - Critical — blocking work, system down, or security issue + - High — must be addressed in current sprint + - Medium — should be addressed soon + - Low — nice to have, can wait + validations: + required: false + + - type: textarea + id: objective + attributes: + label: Objective + description: What are we trying to achieve? The high-level goal in one or two sentences. + placeholder: Enable users to... + validations: + required: true + + - type: textarea + id: rationale + attributes: + label: Rationale + description: Why does this matter? Business value, user impact, or technical justification. + placeholder: This is important because... + validations: + required: true + + - type: textarea + id: scope + attributes: + label: Scope + description: What is in scope and, just as importantly, what is out of scope. + placeholder: | + **In scope:** + - ... + + **Out of scope:** + - ... + validations: + required: true + + - type: textarea + id: architecture + attributes: + label: Architecture & technical considerations + description: Key technical decisions, patterns, constraints, or risks. Link to ADRs or design docs if they exist. + validations: + required: false + + - type: textarea + id: dependencies + attributes: + label: Dependencies + description: What blocks this epic or what does this epic block? External services, other teams, infrastructure, etc. + validations: + required: false + + - type: textarea + id: issues + attributes: + label: Issue breakdown + description: Checklist of sub-issues that compose this epic. Can start as a rough draft — the agent or the team will refine and create the actual issues. + placeholder: | + - [ ] #issue or description + - [ ] #issue or description + - [ ] #issue or description + validations: + required: false + + - type: textarea + id: acceptance-criteria + attributes: + label: Acceptance criteria + description: How do we know this epic is done? High-level conditions, not per-issue details. + placeholder: | + - [ ] ... + - [ ] ... + validations: + required: true + + - type: input + id: owner + attributes: + label: Owner / DRI + description: Who is responsible for driving this epic to completion? + placeholder: "@username" + validations: + required: false + + - type: input + id: milestone + attributes: + label: Target milestone + description: Which milestone or release is this epic targeting? + placeholder: v1.0, Q2 2026, Sprint 5... + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/4-spike.yml b/.github/ISSUE_TEMPLATE/4-spike.yml new file mode 100644 index 00000000..94cd18d4 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/4-spike.yml @@ -0,0 +1,102 @@ +name: Spike / Research +description: Time-boxed investigation to answer a question or reduce uncertainty. +title: "" +labels: ["spike"] +body: + - type: markdown + attributes: + value: | + A spike is not about delivering code — it's about answering a question. Define the question clearly, time-box the effort, and document findings here. The issue itself becomes the deliverable. + + - type: textarea + id: question + attributes: + label: Research question + description: What question(s) are we trying to answer? Be specific. + placeholder: | + Can we use X to solve Y? + What are the trade-offs between A and B for our use case? + validations: + required: true + + - type: dropdown + id: timebox + attributes: + label: Time-box + description: Maximum time to spend before reporting back, regardless of outcome. + options: + - 2 hours + - Half day + - 1 day + - 2 days + - 3 days + validations: + required: true + + - type: textarea + id: background + attributes: + label: Background / What we already know + description: Context, prior decisions, links to related issues or docs. Prevents the investigator from repeating work. + validations: + required: false + + - type: textarea + id: method + attributes: + label: Investigation approach + description: How should this be investigated? Prototype, docs research, vendor comparison, proof of concept, talk to someone? + placeholder: | + - Read the docs for X + - Build a minimal prototype that tests Y + - Compare options A and B against criteria Z + validations: + required: false + + - type: dropdown + id: output + attributes: + label: Expected output + description: What does "done" look like for this spike? + options: + - Decision (go / no-go) + - Technical recommendation with trade-offs + - Proof of concept / prototype + - Written summary / findings document + - Architecture or design proposal + multiple: true + validations: + required: true + + - type: markdown + attributes: + value: | + --- + **The sections below are filled in after the investigation.** + + - type: textarea + id: findings + attributes: + label: Findings + description: What did you learn? Evidence, data, demos, links. + validations: + required: false + + - type: textarea + id: conclusions + attributes: + label: Conclusions & recommendations + description: Answers to the original question(s). What do you recommend and why? + validations: + required: false + + - type: textarea + id: next-steps + attributes: + label: Next steps + description: Follow-up issues, decisions to make, or work to schedule based on findings. + placeholder: | + - [ ] Create issue for... + - [ ] Discuss with team... + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index b8e90d9d..00000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -name: Bug report -about: Create a report to help us improve -title: '' -labels: bug -assignees: '' ---- - -**Describe the bug** -A clear and concise description of what the bug is. - -**To Reproduce** -Steps to reproduce the behavior: - -1. Go to '...' -2. Click on '....' -3. Scroll down to '....' -4. See error - -**Expected behavior** -A clear and concise description of what you expected to happen. - -**Screenshots** -If applicable, add screenshots to help explain your problem. - -**Additional context** -Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index 5f0a04ce..00000000 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -name: Feature request -about: Suggest an idea for this project -title: '' -labels: enhancement -assignees: '' ---- - -**Is your feature request related to a problem? Please describe.** -A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] - -**Describe the solution you'd like** -A clear and concise description of what you want to happen. - -**Describe alternatives you've considered** -A clear and concise description of any alternative solutions or features you've considered. - -**Additional context** -Add any other context or screenshots about the feature request here. diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 00000000..73fcc919 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,42 @@ +## Summary + +Closes # +<!-- Or: No related issue. <motivation> --> + +<!-- Why this change? What problem does it solve? Link motivation, not just mechanics. --> + +## Changes + +<!-- Brief description of what was changed. Bullet points work well. --> + +- + +## Acceptance criteria + +<!-- Mirror the criteria from the linked issue. Check them off as you go. --> +<!-- If criteria diverged from the issue (new discoveries, scope splits, etc.), note what changed and why. --> + +- [ ] + +## Test plan + +<!-- How was this tested? Include both automated and manual verification. --> + +### Automated tests + +### Manual verification + +## Breaking changes + +None. + +## Checklist + +- [ ] Self-reviewed my own diff +- [ ] Tests added or updated +- [ ] Docs updated (if applicable) +- [ ] No unrelated changes bundled in + +## Screenshots + +None. diff --git a/.github/workflows/conventional-commits-PR-title.yml b/.github/workflows/conventional-commits-PR-title.yml index 15cf4077..4a6740b0 100644 --- a/.github/workflows/conventional-commits-PR-title.yml +++ b/.github/workflows/conventional-commits-PR-title.yml @@ -9,7 +9,8 @@ jobs: runs-on: ubuntu-latest steps: - name: PR Conventional Commit Validation - uses: ytanikin/PRConventionalCommits@1.1.0 + uses: ytanikin/pr-conventional-commits@1.4.0 with: - task_types: '["feat","fix","docs","test","ci","refactor","perf","chore","revert"]' - add_label: 'false' + task_types: '["feat", "fix", "docs", "test", "ci", "refactor", "perf", "chore", "revert", "hotfix", "wip", "build", "style", "release"]' + custom_labels: '{"feat": "feature", "fix": "fix", "docs": "documentation", "test": "test", "ci": "CI/CD", "refactor": "refactor", "perf": "performance", "chore": "chore", "revert": "revert", "hotfix": "hotfix", "wip": "WIP", "build": "build", "style": "style", "release": "release"}' + add_scope_label: 'true' diff --git a/.github/workflows/pr-self-assign.yml b/.github/workflows/pr-self-assign.yml new file mode 100644 index 00000000..f96a1c22 --- /dev/null +++ b/.github/workflows/pr-self-assign.yml @@ -0,0 +1,15 @@ +name: PR Self-Assignment + +on: + pull_request: + types: [opened, ready_for_review] + +jobs: + assign: + runs-on: ubuntu-latest + permissions: + pull-requests: write + steps: + - uses: hkusu/review-assign-action@v1 + with: + assignees: ${{ github.actor }} # assign pull request author diff --git a/.gitignore b/.gitignore index 9203123b..3b156c1f 100644 --- a/.gitignore +++ b/.gitignore @@ -33,6 +33,8 @@ CLAUDE.local.md # Builds /dist /docs/dist +/docs/superpowers +/docs/plan dist-ssr # Logs diff --git a/AGENTS.md b/AGENTS.md index eceea487..7f0d014b 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,231 +1,5 @@ -# dAppBooster +# Agent Configuration -> This file is mirrored as `CLAUDE.md` for Claude. Keep both files in sync when making changes. +This project's agent configuration lives in [`CLAUDE.md`](./CLAUDE.md). -A repository template / starter-kit for building decentralized applications (dApps). Built by BootNode based on 5+ years of dApp development. Docs: https://docs.dappbooster.dev/ Components: https://components.dappbooster.dev/ - -## Requirements - -- Node 24+ (see `.nvmrc`) -- pnpm 10.30.2+ (enforced via `packageManager` in package.json; corepack will block npm/yarn) - -## Setup - -1. `pnpm install` (postinstall automatically runs `pnpm wagmi-generate`) -2. `cp .env.example .env.local` -3. Edit `.env.local`: - - `PUBLIC_APP_NAME` is mandatory - - `PUBLIC_WALLETCONNECT_PROJECT_ID` is needed for wallet connection to work - - RPC vars (`PUBLIC_RPC_*`) are optional -- wagmi falls back to default public RPCs - - Subgraph vars are all-or-nothing: if ANY `PUBLIC_SUBGRAPHS_*` var is missing or empty, codegen will skip and the app will crash at runtime. Either set them all or remove all subgraph-related code. -4. `pnpm subgraph-codegen` (only if subgraph vars are configured) -5. `pnpm dev` - -## Git Hooks (Husky) - -Three hooks run automatically and will block on failure: - -- **pre-commit:** lint-staged runs Biome check + Vitest on related files for staged changes -- **commit-msg:** commitlint enforces conventional commit format. Valid types: `feat`, `fix`, `docs`, `test`, `ci`, `refactor`, `perf`, `chore`, `revert`. PR titles are also validated via CI. -- **pre-push:** full `tsc --noEmit` type check (pushes with type errors will be rejected) - -## Quick Reference - -- **Dev server:** `pnpm dev` -- **Build:** `pnpm build` (runs tsc + vite build) -- **Lint:** `pnpm lint` (Biome) / `pnpm lint:fix` -- **Test:** `pnpm test` / `pnpm test:watch` / `pnpm test:coverage` -- **Generate contract hooks:** `pnpm wagmi-generate` -- **Generate routes:** `pnpm routes:generate` -- **Generate subgraph types:** `pnpm subgraph-codegen` -- **Docs site:** `pnpm docs:dev` - -## Tech Stack - -- React 19 + TypeScript (strict mode, ESM -- `"type": "module"`, no `require()`) -- Vite + SWC (fast JSX transform) -- Wagmi 2 + viem 2 (Ethereum interaction) -- TanStack Router (file-based routing with auto code-splitting) -- TanStack Query (server state / data fetching) -- Chakra UI 3 (component library + theming) -- ConnectKit (default wallet connector; RainbowKit and Web3Modal also available) -- LI.FI SDK (token prices/balances) -- Zod + @t3-oss/env-core (environment variable validation) -- Biome (linting + formatting) -- Vitest + Testing Library (testing) - -## Project Structure - -``` -src/ - components/ - pageComponents/ # Page-level components (home/, weth/, demos/) - sharedComponents/ # Reusable UI + business components - ui/ # Chakra provider + theme setup - hooks/ # Custom React hooks - generated.ts # Auto-generated by wagmi-cli (do not edit) - providers/ # Web3Provider, TransactionNotificationProvider - routes/ # TanStack Router file-based routes - __root.tsx # Root layout (provider stack + shell) - lib/ - networks.config.ts # Chain + transport configuration - wagmi/ # Wagmi CLI config + custom Suspense plugin - wallets/ # ConnectKit, RainbowKit, Web3Modal configs - constants/ - contracts/ # Contract ABIs + addresses per chain - tokenLists.ts # Token list URLs - common.ts # Shared constants (isDev, includeTestnets) - types/ # TypeScript type definitions - utils/ # Utility functions - subgraphs/ # GraphQL codegen config + queries - env.ts # Zod-validated environment variables - main.tsx # Entry point - routeTree.gen.ts # Auto-generated route tree (do not edit) -``` - -No top-level barrel exports. Import directly from each file/folder path. - -## Provider Stack - -The root layout (`src/routes/__root.tsx`) wraps the app in this order: - -``` -Chakra Provider (theme, color mode) - Web3Provider (WagmiProvider -> QueryClientProvider -> WalletProvider) - TransactionNotificationProvider (tx toast context) - Header / Outlet (page) / Footer -``` - -New providers should be inserted at the appropriate layer based on their dependencies. - -## Code Style - -- **No semicolons** in TypeScript/JavaScript -- **Single quotes** -- 2-space indentation, 100 char line width -- Import organization handled by Biome -- Path aliases: `@/src/*` and `@packageJSON` -- All env vars prefixed with `PUBLIC_` and validated in `src/env.ts` -- JSDoc comments on exported functions/components (follow existing patterns) - -## Styling - -- **Chakra UI props** are the primary styling method. No CSS modules, no Tailwind, no styled-components. -- Theme is defined in `src/components/ui/provider.tsx` using `createSystem` extending `defaultConfig`. -- Use **semantic tokens** for colors: `bg`, `primary`, `text`, `danger`, `ok`, `warning`. These support light/dark mode. Do not hardcode color values. -- Fonts: Manrope (body/heading), Roboto Mono (mono/code). -- Complex components export style objects from a `styles.ts` file, consumed via Chakra's `css` prop or spread into component props. - -## Component Conventions - -- **Simple components:** single file (e.g., `ExplorerLink.tsx`, `SwitchNetwork.tsx`) -- **Complex components:** folder with: - - `index.tsx` -- main component and public API - - `Components.tsx` -- sub-components (styled primitives, layout pieces) - - `styles.ts` -- style objects - - `useComponentName.ts` -- dedicated hook (optional) -- Page components go in `src/components/pageComponents/<pagename>/` -- Shared/reusable components go in `src/components/sharedComponents/` - -## Key Patterns - -### Adding a New Contract - -1. Save ABI in `src/constants/contracts/abis/YourContract.ts` (export as const) -2. Register in `src/constants/contracts/contracts.ts` with name, ABI, and addresses per chain -3. Run `pnpm wagmi-generate` to auto-generate typed hooks in `src/hooks/generated.ts` - -The contracts array uses `as const satisfies ContractConfig<Abi>[]` for full type inference. Follow this pattern. - -Use `getContract(name, chainId)` to retrieve a typed contract config at runtime (e.g., `getContract('WETH', sepolia.id)` returns `{ abi, address }`). - -### Generated Hook Naming Convention - -`pnpm wagmi-generate` produces hooks in `src/hooks/generated.ts` following this naming pattern: - -- `useReadContractNameFunctionName` -- standard read hook -- `useWriteContractNameFunctionName` -- write hook -- `useSuspenseReadContractNameFunctionName` -- Suspense-enabled read hook -- `useSimulateContractNameFunctionName` -- simulation hook - -Example: contract named `WETH` with function `allowance` generates `useReadWethAllowance`, `useWriteWethApprove`, `useSuspenseReadWethAllowance`, etc. - -### Adding a New Route/Page - -1. Create route file in `src/routes/` using `.lazy.tsx` extension for code-split lazy loading (e.g., `yourpage.lazy.tsx`). Use plain `.tsx` only for routes that must be eagerly loaded. -2. Create page component in `src/components/pageComponents/yourpage/` -3. Route tree auto-generates via TanStack Router plugin - -### Adding a New Network - -1. Import chain from `viem/chains` in `src/lib/networks.config.ts` -2. Add to the appropriate chain array (devChains or prodChains) -3. Add transport entry with optional custom RPC from env -4. Add RPC env var to `src/env.ts` if needed - -### Environment Variables - -- Defined and validated with Zod in `src/env.ts` -- Access via `import { env } from '@/src/env'` (never `import.meta.env` directly) -- New variables MUST be added to both `.env.example` and `src/env.ts` - -### Web3 Status - -- Use `useWeb3Status()` for unified wallet/chain state -- Use `useWeb3StatusConnected()` when wallet connection is guaranteed (throws otherwise) -- Use `withWalletStatusVerifier()` HOC to gate components behind wallet connection - -### Suspense and Error Boundaries - -- Contract read hooks use React Suspense via custom `reactSuspenseRead` wagmi plugin -- `useTokenLists` is Suspense-based -- Wrap async components with `withSuspenseAndRetry()` from `src/utils/suspenseWrapper.tsx` -- this is the primary error boundary pattern. It integrates with TanStack Query's `QueryErrorResetBoundary` for automatic retry on query failures. -- `withSuspenseAndRetry` accepts: `suspenseFallback`, `errorFallback`, `defaultFallbackFormat` ('dialog' | 'default'), `spinnerSize` -- Simpler variant `withSuspense()` available when retry logic is not needed - -### Transaction Handling - -Two components for two different jobs -- both auto-wrap with `withWalletStatusVerifier` (do not double-wrap): - -- **`TransactionButton`** -- for on-chain transactions. Takes `transaction: () => Promise<Hash>` prop. Attach a `methodId` string property to the function for notification context. Calls `onMined(receipt)` on confirmation. -- **`SignButton`** -- for message signing only (uses `useSignMessage`). Takes `message`, `onSign`, `onError` props. - -`TransactionNotificationProvider` handles toast notifications and tx watching for both. - -### Token Management - -- Token lists configured in `src/constants/tokenLists.ts` -- Fetch with `useTokenLists()` hook (Suspense-based). Tokens are deduplicated by `chainId + address` (lowercased). Native tokens are auto-injected for each configured chain. -- Token prices/balances via `useTokens()` (LI.FI SDK) -- `TokenInput` + `useTokenInput()` for amount input with validation -- For raw bigint/decimal conversion in inputs, use `BigNumberInput` (wraps viem's `parseUnits`/`formatUnits`). Never use `parseFloat` or `Number()` for token amounts. - -### Wallet Provider - -- Default: ConnectKit (configured in `src/lib/wallets/connectkit.config.tsx`) -- To switch: modify `src/providers/Web3Provider.tsx` imports -- Alternatives available: RainbowKit (`rainbowkit.config.tsx`), Web3Modal (`web3modal.config.tsx`) - -## Auto-Generated Files (Do Not Edit, Do Not Commit) - -These files are gitignored and regenerated from source: - -- `src/hooks/generated.ts` -- regenerate with `pnpm wagmi-generate` -- `src/routeTree.gen.ts` -- regenerate with `pnpm routes:generate` -- `src/subgraphs/gql/` -- regenerate with `pnpm subgraph-codegen` - -## Utilities - -- **Number formatting:** Use `formatNumber()` from `src/utils/numberFormat.ts` with the appropriate `NumberType` context (`TokenTx`, `FiatTokenPrice`, `SwapPrice`, `PortfolioBalance`, etc.). Never use raw `.toString()` or `.toFixed()` for user-facing numbers. -- **Explorer links:** `getExplorerLink()` from `src/utils/getExplorerLink.ts` -- **String truncation:** `truncateStringInTheMiddle()`, `getTruncatedHash()` from `src/utils/strings.ts` -- **Native token check:** `isNativeToken()` from `src/utils/address.ts` -- **Hash detection:** `detectHash()` from `src/utils/hash.ts` -- identifies ENS names, transaction hashes, contract addresses, and EOAs - -## Testing - -- Framework: Vitest with jsdom environment -- Test files: colocated as `*.test.ts` / `*.test.tsx` -- Mocking: `vi.mock()` for module mocks -- Component testing: Testing Library + jest-dom matchers -- Run: `pnpm test` (single run) or `pnpm test:watch` +Claude Code reads `CLAUDE.md` natively. If your agent reads `AGENTS.md` (Cursor, Windsurf, etc.), load rules from `CLAUDE.md` -- it is the single source of truth for this project's conventions, stack, and working rules. diff --git a/CLAUDE.md b/CLAUDE.md index cb3ccf5c..aa0deee8 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,9 +1,9 @@ # dAppBooster -> This file is mirrored as `AGENTS.md` for non-Claude AI agents. Keep both files in sync when making changes. - A repository template / starter-kit for building decentralized applications (dApps). Built by BootNode based on 5+ years of dApp development. Docs: https://docs.dappbooster.dev/ Components: https://components.dappbooster.dev/ +System architecture, data flow, provider hierarchy, and structural conventions are documented in [architecture.md](./architecture.md). Read it when working on tasks that involve the system's structure or patterns. + ## Requirements - Node 24+ (see `.nvmrc`) @@ -26,77 +26,66 @@ A repository template / starter-kit for building decentralized applications (dAp Three hooks run automatically and will block on failure: - **pre-commit:** lint-staged runs Biome check + Vitest on related files for staged changes -- **commit-msg:** commitlint enforces conventional commit format. Valid types: `feat`, `fix`, `docs`, `test`, `ci`, `refactor`, `perf`, `chore`, `revert`. PR titles are also validated via CI. +- **commit-msg:** commitlint enforces conventional commit format. Valid types: `feat`, `fix`, `docs`, `test`, `ci`, `refactor`, `perf`, `chore`, `revert`, `style`, `build`, `hotfix`, `wip`, `release`. PR titles are also validated via CI. - **pre-push:** full `tsc --noEmit` type check (pushes with type errors will be rejected) -## Quick Reference - -- **Dev server:** `pnpm dev` -- **Build:** `pnpm build` (runs tsc + vite build) -- **Lint:** `pnpm lint` (Biome) / `pnpm lint:fix` -- **Test:** `pnpm test` / `pnpm test:watch` / `pnpm test:coverage` -- **Generate contract hooks:** `pnpm wagmi-generate` -- **Generate routes:** `pnpm routes:generate` -- **Generate subgraph types:** `pnpm subgraph-codegen` -- **Docs site:** `pnpm docs:dev` - -## Tech Stack - -- React 19 + TypeScript (strict mode, ESM -- `"type": "module"`, no `require()`) -- Vite + SWC (fast JSX transform) -- Wagmi 2 + viem 2 (Ethereum interaction) -- TanStack Router (file-based routing with auto code-splitting) -- TanStack Query (server state / data fetching) -- Chakra UI 3 (component library + theming) -- ConnectKit (default wallet connector; RainbowKit and Web3Modal also available) -- LI.FI SDK (token prices/balances) -- Zod + @t3-oss/env-core (environment variable validation) -- Biome (linting + formatting) -- Vitest + Testing Library (testing) - -## Project Structure - -``` -src/ - components/ - pageComponents/ # Page-level components (home/, weth/, demos/) - sharedComponents/ # Reusable UI + business components - ui/ # Chakra provider + theme setup - hooks/ # Custom React hooks - generated.ts # Auto-generated by wagmi-cli (do not edit) - providers/ # Web3Provider, TransactionNotificationProvider - routes/ # TanStack Router file-based routes - __root.tsx # Root layout (provider stack + shell) - lib/ - networks.config.ts # Chain + transport configuration - wagmi/ # Wagmi CLI config + custom Suspense plugin - wallets/ # ConnectKit, RainbowKit, Web3Modal configs - constants/ - contracts/ # Contract ABIs + addresses per chain - tokenLists.ts # Token list URLs - common.ts # Shared constants (isDev, includeTestnets) - types/ # TypeScript type definitions - utils/ # Utility functions - subgraphs/ # GraphQL codegen config + queries - env.ts # Zod-validated environment variables - main.tsx # Entry point - routeTree.gen.ts # Auto-generated route tree (do not edit) -``` - -No top-level barrel exports. Import directly from each file/folder path. - -## Provider Stack - -The root layout (`src/routes/__root.tsx`) wraps the app in this order: - -``` -Chakra Provider (theme, color mode) - Web3Provider (WagmiProvider -> QueryClientProvider -> WalletProvider) - TransactionNotificationProvider (tx toast context) - Header / Outlet (page) / Footer -``` - -New providers should be inserted at the appropriate layer based on their dependencies. +## Commit Standards + +Use [Conventional Commits](https://www.conventionalcommits.org/): + +**Format:** `type(scope): subject` + +- **Scope** is optional: `feat: add login` and `feat(auth): add login` are both valid +- **Subject** uses imperative mood, lowercase after the colon, no trailing period +- **Body** (optional): separated by a blank line, explains *what* and *why* + +**Prefixes:** + +| Prefix | Purpose | +|--------|---------| +| `feat` | New feature | +| `fix` | Bug fix | +| `chore` | Maintenance, dependencies, config | +| `docs` | Documentation only | +| `refactor` | Code change that neither fixes a bug nor adds a feature | +| `test` | Adding or updating tests | +| `style` | Formatting, whitespace, semicolons | +| `ci` | CI/CD pipeline changes | +| `perf` | Performance improvement | +| `build` | Build system or external dependencies | +| `revert` | Reverts a previous commit | +| `hotfix` | Urgent fix that bypasses the normal release cycle | +| `wip` | Work in progress (avoid on main) | +| `release` | Release-related changes | + +## PR Workflow + +- Every PR must reference an issue (`Closes #N`) + + > No related issue? Use `No related issue.` as the first line of the Summary section. + +- Mirror the issue's acceptance criteria in the PR +- Self-review your diff before requesting peer review +- Keep PRs small and focused -- one issue, one PR +- PR titles use the same conventional commit format (`feat: add user dashboard`) +- Use `/sdlc:create-pr` to create PRs -- it reads the template and fills every section automatically + +## Label Conventions + +GitHub form dropdowns (like the Priority field in issue templates) only work through the web UI. When issues are created via `gh` CLI or REST API, dropdown values become unstructured body text -- not queryable, not consistent. **Labels are the API-reliable mechanism for structured metadata.** + +**Priority** (bugs, features, and epics): + +| Label | Description | +|-------|-------------| +| `priority: critical` | Blocking work, system down, or security issue | +| `priority: high` | Must be addressed in current sprint | +| `priority: medium` | Should be addressed soon | +| `priority: low` | Nice to have, can wait | + +Labels are queryable: `gh issue list --label "priority: high"`. + +The `/sdlc:issue` skill applies these labels automatically when creating issues via CLI. Bug, feature, and epic templates include a Priority dropdown for web UI users, but labels are the source of truth for programmatic workflows. ## Code Style @@ -139,17 +128,6 @@ The contracts array uses `as const satisfies ContractConfig<Abi>[]` for full typ Use `getContract(name, chainId)` to retrieve a typed contract config at runtime (e.g., `getContract('WETH', sepolia.id)` returns `{ abi, address }`). -### Generated Hook Naming Convention - -`pnpm wagmi-generate` produces hooks in `src/hooks/generated.ts` following this naming pattern: - -- `useReadContractNameFunctionName` -- standard read hook -- `useWriteContractNameFunctionName` -- write hook -- `useSuspenseReadContractNameFunctionName` -- Suspense-enabled read hook -- `useSimulateContractNameFunctionName` -- simulation hook - -Example: contract named `WETH` with function `allowance` generates `useReadWethAllowance`, `useWriteWethApprove`, `useSuspenseReadWethAllowance`, etc. - ### Adding a New Route/Page 1. Create route file in `src/routes/` using `.lazy.tsx` extension for code-split lazy loading (e.g., `yourpage.lazy.tsx`). Use plain `.tsx` only for routes that must be eagerly loaded. @@ -169,43 +147,6 @@ Example: contract named `WETH` with function `allowance` generates `useReadWethA - Access via `import { env } from '@/src/env'` (never `import.meta.env` directly) - New variables MUST be added to both `.env.example` and `src/env.ts` -### Web3 Status - -- Use `useWeb3Status()` for unified wallet/chain state -- Use `useWeb3StatusConnected()` when wallet connection is guaranteed (throws otherwise) -- Use `withWalletStatusVerifier()` HOC to gate components behind wallet connection - -### Suspense and Error Boundaries - -- Contract read hooks use React Suspense via custom `reactSuspenseRead` wagmi plugin -- `useTokenLists` is Suspense-based -- Wrap async components with `withSuspenseAndRetry()` from `src/utils/suspenseWrapper.tsx` -- this is the primary error boundary pattern. It integrates with TanStack Query's `QueryErrorResetBoundary` for automatic retry on query failures. -- `withSuspenseAndRetry` accepts: `suspenseFallback`, `errorFallback`, `defaultFallbackFormat` ('dialog' | 'default'), `spinnerSize` -- Simpler variant `withSuspense()` available when retry logic is not needed - -### Transaction Handling - -Two components for two different jobs -- both auto-wrap with `withWalletStatusVerifier` (do not double-wrap): - -- **`TransactionButton`** -- for on-chain transactions. Takes `transaction: () => Promise<Hash>` prop. Attach a `methodId` string property to the function for notification context. Calls `onMined(receipt)` on confirmation. -- **`SignButton`** -- for message signing only (uses `useSignMessage`). Takes `message`, `onSign`, `onError` props. - -`TransactionNotificationProvider` handles toast notifications and tx watching for both. - -### Token Management - -- Token lists configured in `src/constants/tokenLists.ts` -- Fetch with `useTokenLists()` hook (Suspense-based). Tokens are deduplicated by `chainId + address` (lowercased). Native tokens are auto-injected for each configured chain. -- Token prices/balances via `useTokens()` (LI.FI SDK) -- `TokenInput` + `useTokenInput()` for amount input with validation -- For raw bigint/decimal conversion in inputs, use `BigNumberInput` (wraps viem's `parseUnits`/`formatUnits`). Never use `parseFloat` or `Number()` for token amounts. - -### Wallet Provider - -- Default: ConnectKit (configured in `src/lib/wallets/connectkit.config.tsx`) -- To switch: modify `src/providers/Web3Provider.tsx` imports -- Alternatives available: RainbowKit (`rainbowkit.config.tsx`), Web3Modal (`web3modal.config.tsx`) - ## Auto-Generated Files (Do Not Edit, Do Not Commit) These files are gitignored and regenerated from source: @@ -214,14 +155,6 @@ These files are gitignored and regenerated from source: - `src/routeTree.gen.ts` -- regenerate with `pnpm routes:generate` - `src/subgraphs/gql/` -- regenerate with `pnpm subgraph-codegen` -## Utilities - -- **Number formatting:** Use `formatNumber()` from `src/utils/numberFormat.ts` with the appropriate `NumberType` context (`TokenTx`, `FiatTokenPrice`, `SwapPrice`, `PortfolioBalance`, etc.). Never use raw `.toString()` or `.toFixed()` for user-facing numbers. -- **Explorer links:** `getExplorerLink()` from `src/utils/getExplorerLink.ts` -- **String truncation:** `truncateStringInTheMiddle()`, `getTruncatedHash()` from `src/utils/strings.ts` -- **Native token check:** `isNativeToken()` from `src/utils/address.ts` -- **Hash detection:** `detectHash()` from `src/utils/hash.ts` -- identifies ENS names, transaction hashes, contract addresses, and EOAs - ## Testing - Framework: Vitest with jsdom environment @@ -229,3 +162,33 @@ These files are gitignored and regenerated from source: - Mocking: `vi.mock()` for module mocks - Component testing: Testing Library + jest-dom matchers - Run: `pnpm test` (single run) or `pnpm test:watch` +- **What to test:** Business logic, API integrations, component behavior +- **What not to test:** Styling, third-party library internals, trivial getters/setters +- **Coverage:** Aim for meaningful coverage, not a number. Cover the paths that matter. + +## Guardrails + +- Do not commit secrets, API keys, or credentials +- Do not modify CI/CD pipelines without team review +- Do not skip tests or linting to make a build pass +- When in doubt, ask -- don't assume + +## Change Strategy + +- Prefer small, focused diffs over broad refactors +- Preserve existing UX unless the task explicitly changes it +- Avoid introducing new patterns when a project pattern already exists +- Update docs only when behavior or workflow changes + +## Validation Checklist + +Run before declaring work done: + +- `pnpm lint` +- `pnpm test` +- `pnpm build` (when feasible for runtime-impacting changes) + +## References + +- [dAppBooster Docs](https://docs.dappbooster.dev/) +- [Component Library](https://components.dappbooster.dev/) diff --git a/architecture.md b/architecture.md new file mode 100644 index 00000000..d7d81948 --- /dev/null +++ b/architecture.md @@ -0,0 +1,269 @@ +# Architecture Overview + +<!-- Keep this document up to date as the system evolves. It captures structural + knowledge that helps both humans onboarding and agents building context at + session start. Focus on the "shape" of the system — not usage instructions + (that's CLAUDE.md) or API docs (that's code comments). --> + +## Tech Stack + +| Category | Technology | Notes | +|----------|-----------|-------| +| Framework | React 19 | StrictMode enabled | +| Language | TypeScript 6 (strict, ESM) | Path aliases: `@/src/*`, `@packageJSON` | +| Blockchain | wagmi 2 + viem 2 | Type-safe Ethereum interaction | +| Data fetching | TanStack Query 5, graphql-request | Suspense-based contract reads | +| Routing | TanStack Router | File-based with auto code-splitting | +| UI | Chakra UI 3 + Emotion | Semantic tokens, light/dark mode | +| Testing | Vitest + Testing Library | jsdom environment, colocated test files | +| Build | Vite 8 + React plugin | Manual chunk splitting for vendors | +| Linting | Biome | Format + lint in one tool | +| Env validation | Zod + @t3-oss/env-core | All vars `PUBLIC_` prefixed | + +## Project Structure + +``` +src/ + components/ + pageComponents/ Page-level components (home/, demos/) + sharedComponents/ Reusable UI + business components + ui/ Chakra provider, color mode, toaster, tooltip + hooks/ Custom React hooks + generated.ts Auto-generated by wagmi-cli (do not edit) + providers/ Web3Provider, TransactionNotificationProvider + routes/ TanStack Router file-based routes + __root.tsx Root layout (provider stack + shell) + lib/ + networks.config.ts Chain + transport configuration + wagmi/ Wagmi CLI config + custom Suspense plugin + wallets/ ConnectKit, RainbowKit, Web3Modal, Porto configs + constants/ + contracts/ Contract ABIs + addresses per chain + tokenLists.ts Token list URLs + common.ts Shared constants (isDev, includeTestnets) + types/ TypeScript type definitions (Token via Zod) + utils/ Utility functions + subgraphs/ GraphQL codegen config + queries + env.ts Zod-validated environment variables + main.tsx Entry point + routeTree.gen.ts Auto-generated route tree (do not edit) +``` + +No top-level barrel exports. Import directly from each file/folder path. + +## Key Abstractions + +**Component structure** -- simple components are a single file; complex components use a folder: +``` +ComponentName/ + index.tsx main component and public API + Components.tsx sub-components (styled primitives, layout pieces) + styles.ts style objects consumed via Chakra's css prop + useComponentName.ts dedicated hook (optional) +``` + +**HOC patterns:** +- `withSuspenseAndRetry(Component)` -- primary pattern for async components; wraps in `QueryErrorResetBoundary` + `ErrorBoundary` + `Suspense` for automatic retry on query failures +- `withSuspense(Component)` -- simpler variant without retry + +**Contract hooks** (auto-generated by wagmi-cli from ABIs): +- `useRead{Contract}{Function}` -- standard read +- `useSuspenseRead{Contract}{Function}` -- Suspense-enabled read (preferred) +- `useWrite{Contract}{Function}` -- write/mutation +- `useSimulate{Contract}{Function}` -- simulation before write + +**Contract lookup:** `getContract(name, chainId)` from `src/constants/contracts/contracts.ts` returns typed `{ abi, address }`. Validates address with `isAddress()`, throws with a helpful message if not found. + +**Utility functions** (`src/utils/`): +- `formatNumber(value, type)` -- user-facing number formatting with `NumberType` contexts (`TokenTx`, `FiatTokenPrice`, `SwapPrice`, `PortfolioBalance`) +- `getExplorerLink(chainId, hash, type)` -- block explorer URLs per chain +- `truncateStringInTheMiddle(str)`, `getTruncatedHash(hash)` -- string display helpers +- `isNativeToken(address)` -- checks against native token address +- `detectHash(str)` -- identifies ENS names, tx hashes, contract addresses, EOAs + +### Data Access Layer + +Four external data paths. Components never call external services directly -- they use hooks. + +1. **Blockchain reads**: `useSuspenseRead{Contract}{Function}` hooks (generated) -> wagmi `readContract` -> TanStack Query cache. All contract reads are Suspense-based via the custom `reactSuspenseRead` wagmi plugin in `src/lib/wagmi/plugins/`. + +2. **Blockchain writes**: `TransactionButton` calls `transaction: () => Promise<Hash>` prop -> wagmi `writeContract` -> `useWaitForTransactionReceipt` -> `TransactionNotificationProvider` toasts (loading, success/revert, explorer link). + +3. **Subgraph queries**: `graphql-request` with typed document nodes from `@graphql-codegen` -> TanStack Query cache. Queries live in `src/subgraphs/queries/`, generated types in `src/subgraphs/gql/`. + +4. **Token data**: LI.FI SDK (`getChains` -> `getTokens` -> `getTokenBalances`) via `useTokens` hook. Token lists fetched in parallel via `useTokenLists` (Suspense-based, source: CoinGecko, optional Uniswap default list). Tokens deduplicated by `chainId + address`, native tokens auto-injected per chain. + +## Routes + +| Route | Module | Description | +|-------|--------|-------------| +| `/` | `src/components/pageComponents/home/` | Landing page with welcome + feature demos | +| `*` | `src/components/pageComponents/NotFound404.tsx` | Catch-all 404 page | + +File-based routing via TanStack Router. Use `.lazy.tsx` extension for code-split lazy loading; plain `.tsx` only for routes that must eagerly load. Route tree auto-generates to `src/routeTree.gen.ts` via the TanStack Router Vite plugin. + +## Data Flow + +``` +External source Data layer State UI +─────────────── ────────── ───── ── +EVM chains (RPC) ───> wagmi readContract ───> TanStack Query cache ───> Chakra components +EVM chains (write) ───> wagmi writeContract ───> TransactionContext ───> Toast notifications +The Graph subgraphs ───> graphql-request ───> TanStack Query cache ───> Chakra components +LI.FI API (prices/balances) ───> @lifi/sdk ───> TanStack Query cache ───> Chakra components +Token list URLs ───> fetch + Zod validate ───> TanStack Query cache ───> Chakra components +``` + +Caching strategy: +- All async state lives in TanStack Query. Components do not hold async data in local state. +- Token lists: `staleTime: 1 hour`, `gcTime: 1 hour`. +- Token balances: refreshed every ~32s (`BALANCE_EXPIRATION_TIME`). +- Contract reads: Suspense-based -- component suspends until data arrives, then cached normally. + +## Environment Variables + +All variables use the `PUBLIC_` prefix and are validated with Zod in `src/env.ts`. Access via `import { env } from '@/src/env'` -- never `import.meta.env` directly. + +**App** + +| Variable | Required | Purpose | +|----------|----------|---------| +| `PUBLIC_APP_NAME` | yes | Application name | +| `PUBLIC_APP_DESCRIPTION` | no | App description | +| `PUBLIC_APP_URL` | no | Canonical URL | +| `PUBLIC_APP_LOGO` | no | Logo URL | +| `PUBLIC_ENABLE_PORTO` | no (default: true) | Enable Porto wallet connector | +| `PUBLIC_INCLUDE_TESTNETS` | no (default: true) | Include testnet chains | +| `PUBLIC_USE_DEFAULT_TOKENS` | no (default: true) | Include Uniswap default token list | + +**RPC endpoints** (all optional -- wagmi falls back to public RPCs) + +`PUBLIC_RPC_MAINNET`, `PUBLIC_RPC_OPTIMISM`, `PUBLIC_RPC_POLYGON`, `PUBLIC_RPC_ARBITRUM`, `PUBLIC_RPC_BASE`, `PUBLIC_RPC_GNOSIS`, `PUBLIC_RPC_SEPOLIA`, `PUBLIC_RPC_OPTIMISM_SEPOLIA`, `PUBLIC_RPC_ARBITRUM_SEPOLIA`, `PUBLIC_RPC_BASE_SEPOLIA`, `PUBLIC_RPC_GNOSIS_CHIADO`, `PUBLIC_RPC_POLYGON_MUMBAI` + +**Wallet / API** + +| Variable | Required | Purpose | +|----------|----------|---------| +| `PUBLIC_WALLETCONNECT_PROJECT_ID` | no (default: '') | WalletConnect project ID | +| `PUBLIC_ALCHEMY_KEY` | no | Alchemy RPC key | +| `PUBLIC_INFURA_KEY` | no | Infura RPC key | +| `PUBLIC_NATIVE_TOKEN_ADDRESS` | no (default: `0x0...0`) | Native token sentinel address | + +**Subgraph** (all-or-nothing: set all or remove subgraph code) + +| Variable | Required | Purpose | +|----------|----------|---------| +| `PUBLIC_SUBGRAPHS_API_KEY` | yes | The Graph API key | +| `PUBLIC_SUBGRAPHS_CHAINS_RESOURCE_IDS` | yes | `chainId:subgraphId:resourceId` comma-separated | +| `PUBLIC_SUBGRAPHS_ENVIRONMENT` | no (default: production) | `development` or `production` | +| `PUBLIC_SUBGRAPHS_DEVELOPMENT_URL` | no | Dev subgraph URL template | +| `PUBLIC_SUBGRAPHS_PRODUCTION_URL` | no | Production subgraph URL template | + +## Scripts + +| Command | Purpose | +|---------|---------| +| `pnpm dev` | Vite dev server + TanStack Router route watching | +| `pnpm build` | `tsc --noEmit` + Vite production build | +| `pnpm test` | Vitest single run | +| `pnpm test:watch` | Vitest watch mode | +| `pnpm test:coverage` | Coverage report (v8) | +| `pnpm lint` | Biome check | +| `pnpm lint:fix` | Biome auto-fix | +| `pnpm wagmi-generate` | Generate typed contract hooks from ABIs into `src/hooks/generated.ts` | +| `pnpm routes:generate` | Generate TanStack Router route tree into `src/routeTree.gen.ts` | +| `pnpm subgraph-codegen` | Generate GraphQL types from subgraph schemas into `src/subgraphs/gql/` | +| `pnpm docs:dev` | Documentation site dev server (vocs) | + +--- + +## Domain-Specific Sections + +### Number / Precision Handling + +Token amounts are always `bigint` internally. Never use `parseFloat`, `Number()`, or `.toFixed()` on token values. + +- **Input**: `BigNumberInput` component wraps `react-number-format` + viem's `parseUnits` / `formatUnits`. The `BigNumberInput` is the only place raw user strings convert to bigint. +- **Display**: `formatNumber(value, type)` from `src/utils/numberFormat.ts` with a `NumberType` context that sets decimal precision and formatting rules: + - `TokenTx` -- token transaction amounts + - `FiatTokenPrice` -- USD prices + - `SwapPrice` -- swap rate display + - `PortfolioBalance` -- portfolio totals +- The bigint -> formatted string conversion only happens at the UI boundary. + +### Provider / Context Hierarchy + +From `src/routes/__root.tsx`, outermost to innermost: + +``` +Chakra Provider (theme system, color mode via next-themes, default: dark) + Web3Provider + WagmiProvider (chains, transports, wallet connectors) + QueryClientProvider (TanStack Query client) + WalletProvider (ConnectKit wallet UI) + TransactionNotificationProvider (tx/signature toast context) + Header + Outlet (page content) + Footer + Devtools (React Query + Router devtools, dev only) + Vercel Analytics + Toaster +``` + +When adding a new provider: place it inside the outermost provider it depends on. Anything needing blockchain access goes inside `Web3Provider`. Anything needing tx notifications goes inside `TransactionNotificationProvider`. + +### Hook Patterns + +**Generated contract hooks** (`src/hooks/generated.ts`, auto-generated by `pnpm wagmi-generate`): +- `useRead{Contract}{Function}` -- standard read, manual refetch +- `useSuspenseRead{Contract}{Function}` -- Suspense read (preferred; component suspends until resolved) +- `useWrite{Contract}{Function}` -- write/mutation +- `useSimulate{Contract}{Function}` -- simulate before write to surface errors early + +**Web3 connection state** (`src/hooks/useWeb3Status.tsx`): +- `useWeb3Status()` -- returns `{ readOnlyClient, appChainId, address, isWalletConnected, isWalletSynced, switchChain, disconnect, ... }` + +**Token hooks**: +- `useTokens()` -- token list + LI.FI prices + account balances, sorted by balance value +- `useTokenLists()` -- Suspense-based parallel fetch of all configured token list URLs +- `useTokenInput()` -- manages selected token + amount state, fetches balance +- `useTokenSearch(tokens, query)` -- filters by name or symbol + +**Suspense convention**: all contract reads use Suspense. Wrap consuming components with `withSuspenseAndRetry()` to handle the loading and error states. + +### Error Handling Patterns + +**`withSuspenseAndRetry(Component)`** (`src/utils/suspenseWrapper.tsx`) -- primary pattern: +- Wraps in `QueryErrorResetBoundary` (TanStack Query) + `ErrorBoundary` + `Suspense` +- On error: shows error UI with a retry button that resets the query and re-renders +- Props: `suspenseFallback`, `errorFallback`, `defaultFallbackFormat` (`'default'` | `'dialog'`), `spinnerSize` + +**`withSuspense(Component)`** -- simpler variant when retry is not needed (no query resets). + +**`defaultFallbackFormat: 'dialog'`** -- renders the error in a modal. Use for critical errors where inline display is disruptive. + +**Transaction errors** -- handled by `TransactionNotificationProvider`. It catches rejected signatures, reverted transactions, and gas estimation failures, and surfaces them as toast notifications with user-friendly messages. Handles transaction replacement (gas bump) and cancellation by the wallet. + +### Smart Contract Integration + +Contracts are registered centrally and consumed via generated hooks. + +1. **ABIs**: stored as `as const` typed exports in `src/constants/contracts/abis/`. +2. **Registration**: `src/constants/contracts/contracts.ts` -- array typed as `ContractConfig<Abi>[]` with `name`, `abi`, and optional `address: { [chainId]: '0x...' }`. +3. **Runtime lookup**: `getContract(name, chainId)` returns `{ abi, address }` -- throws if contract or chain address not found. +4. **Hook generation**: `pnpm wagmi-generate` reads the contracts array and writes `src/hooks/generated.ts`. The custom `reactSuspenseRead` plugin in `src/lib/wagmi/plugins/reactSuspenseRead.ts` adds Suspense variants for all read functions. + +To add a new contract: save the ABI, add it to the contracts array, run `pnpm wagmi-generate`. + +### Wallet Access Control + +**`WalletStatusVerifier`** component (`src/components/sharedComponents/WalletStatusVerifier.tsx`) -- renders a fallback cascade based on wallet state: +1. Not connected -> `ConnectWalletButton` +2. Connected but `walletChainId !== targetChainId` (where `targetChainId` is the optional `chainId` prop if provided, otherwise `appChainId`) -> "Switch to [Network]" button +3. Connected + synced -> renders children + +`useWeb3StatusConnected()` (same file) -- companion hook that provides typed connected-wallet status (`address`, `readOnlyClient`, etc.) inside the `<WalletStatusVerifier>` tree. Throws a `DeveloperError` if called outside it. + +`TransactionButton` and `SignButton` use the `useWalletStatus()` hook directly for inline wallet state checks rather than wrapping with the `WalletStatusVerifier` component. + +Sync check: `isWalletSynced = isWalletConnected && walletChainId === appChainId`. diff --git a/biome.json b/biome.json index da16e165..2a2495da 100644 --- a/biome.json +++ b/biome.json @@ -1,15 +1,13 @@ { - "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json", - "organizeImports": { - "enabled": true - }, + "$schema": "https://biomejs.dev/schemas/2.4.10/schema.json", + "assist": { "actions": { "source": { "organizeImports": "on" } } }, "vcs": { "clientKind": "git", "enabled": true, "useIgnoreFile": true }, "files": { - "ignore": ["src/routeTree.gen.ts", ".install-files/**/*"] + "includes": ["**", "!**/src/routeTree.gen.ts", "!**/.install-files/**/*"] }, "formatter": { "attributePosition": "multiline", diff --git a/commitlint.config.js b/commitlint.config.js index 7c4ff4d9..45f89143 100644 --- a/commitlint.config.js +++ b/commitlint.config.js @@ -1 +1,25 @@ -export default { extends: ['@commitlint/config-conventional'] } +export default { + extends: ['@commitlint/config-conventional'], + rules: { + 'type-enum': [ + 2, + 'always', + [ + 'build', + 'chore', + 'ci', + 'docs', + 'feat', + 'fix', + 'hotfix', + 'perf', + 'refactor', + 'release', + 'revert', + 'style', + 'test', + 'wip', + ], + ], + }, +} diff --git a/package.json b/package.json index 29e5067f..eb5ba679 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "dappbooster", "private": true, - "version": "2.0.4", + "version": "2.5.0", "type": "module", "scripts": { "build": "tsc --noEmit --pretty && vite build", @@ -33,63 +33,68 @@ "@reown/appkit": "^1.8.19", "@reown/appkit-adapter-wagmi": "^1.8.19", "@t3-oss/env-core": "^0.13.11", - "@tanstack/react-query": "^5.95.2", - "@tanstack/react-router": "^1.168.3", + "@tanstack/react-query": "^5.96.1", + "@tanstack/react-router": "^1.168.10", "@tanstack/react-virtual": "^3.13.23", - "@uniswap/default-token-list": "^13.33.0", - "@vercel/analytics": "^1.5.0", + "@uniswap/default-token-list": "^18.13.0", + "@vercel/analytics": "^2.0.1", "@web3icons/core": "^4.0.13", "@web3icons/react": "^4.0.13", - "connectkit": "^1.9.0", - "graphql": "^16.13.1", + "buffer": "^6.0.3", + "connectkit": "^1.9.2", + "graphql": "^16.13.2", "graphql-request": "^7.1.2", "next-themes": "^0.4.6", "porto": "^0.2.28", - "react": "19.1.0", - "react-dom": "19.1.0", + "react": "19.2.4", + "react-dom": "19.2.4", "react-error-boundary": "^6.0.0", "react-jazzicon": "^1.0.4", "react-number-format": "^5.4.5", - "use-debounce": "^10.0.4", + "use-debounce": "^10.1.1", "viem": "^2.47.6", "wagmi": "^2.17.5", - "zod": "^3.24.4" + "zod": "^4" }, "devDependencies": { - "@biomejs/biome": "1.9.4", - "@commitlint/cli": "^19.8.1", - "@commitlint/config-conventional": "^19.8.1", - "@graphql-codegen/cli": "^5.0.6", + "@biomejs/biome": "2.4.10", + "@commitlint/cli": "^20.5.0", + "@commitlint/config-conventional": "^20.5.0", + "@graphql-codegen/cli": "^6", "@graphql-typed-document-node/core": "^3.2.0", "@parcel/watcher": "^2.5.1", - "@tanstack/react-query-devtools": "^5.95.2", - "@tanstack/router-cli": "^1.166.18", - "@tanstack/router-devtools": "^1.166.11", - "@tanstack/router-plugin": "^1.167.4", + "@tanstack/react-query-devtools": "^5.96.1", + "@tanstack/react-router-devtools": "^1.166.11", + "@tanstack/router-cli": "^1.166.25", + "@tanstack/router-plugin": "^1.167.12", "@testing-library/jest-dom": "^6.6.3", "@testing-library/react": "^16.3.0", "@testing-library/user-event": "^14.6.1", "@types/react": "^19.1.3", "@types/react-dom": "^19.1.3", - "@vitejs/plugin-react-swc": "^3.9.0", - "@vitest/coverage-v8": "^3.1.3", + "@vitejs/plugin-react": "^6.0.1", + "@vitest/coverage-v8": "^4.1.2", "@wagmi/cli": "^2.3.1", "change-case": "^5.4.4", "husky": "^9.1.7", - "jsdom": "^26.1.0", - "lint-staged": "^15.5.2", + "jsdom": "^29.0.1", + "lint-staged": "^16.4.0", "ts-node": "^10.9.2", - "typedoc": "^0.28.4", - "typedoc-github-theme": "^0.3.0", + "typedoc": "^0.28.18", + "typedoc-github-theme": "^0.4.0", "typedoc-plugin-inline-sources": "^1.3.0", "typedoc-plugin-missing-exports": "^4.0.0", "typedoc-plugin-rename-defaults": "^0.7.3", - "typescript": "^5.8.3", - "vite": "^6.3.5", - "vite-plugin-sitemap": "^0.7.1", - "vite-tsconfig-paths": "^5.1.4", - "vitest": "^3.1.3", - "vocs": "1.0.11" + "typescript": "^6", + "vite": "^8", + "vite-plugin-sitemap": "^0.8.2", + "vitest": "^4.1.2", + "vocs": "1.4.1" }, - "packageManager": "pnpm@10.30.2" + "packageManager": "pnpm@10.33.0", + "pnpm": { + "overrides": { + "@graphql-codegen/cli": "^6" + } + } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f30a3eb9..d35cd3f5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,134 +4,140 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false +overrides: + '@graphql-codegen/cli': ^6 + importers: .: dependencies: '@bootnodedev/db-subgraph': specifier: ^0.1.2 - version: 0.1.2(@parcel/watcher@2.5.6)(@tanstack/react-query@5.95.2(react@19.1.0))(@types/node@25.3.0)(bufferutil@4.1.0)(crossws@0.3.5)(graphql-tag@2.12.6(graphql@16.13.1))(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)) + version: 0.1.2(@parcel/watcher@2.5.6)(@tanstack/react-query@5.96.1(react@19.2.4))(@types/node@25.3.0)(bufferutil@4.1.0)(crossws@0.3.5)(graphql-tag@2.12.6(graphql@16.13.2))(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6)) '@chakra-ui/react': specifier: ^3.34.0 - version: 3.34.0(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 3.34.0(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@emotion/react': specifier: ^11.14.0 - version: 11.14.0(@types/react@19.2.14)(react@19.1.0) + version: 11.14.0(@types/react@19.2.14)(react@19.2.4) '@lifi/sdk': specifier: ^3.16.3 - version: 3.16.3(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76) + version: 3.16.3(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(use-sync-external-store@1.4.0(react@19.2.4))(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6))(zod@4.3.6) '@rainbow-me/rainbowkit': specifier: ^2.2.9 - version: 2.2.10(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(babel-plugin-macros@3.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.9.3)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.95.2)(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)) + version: 2.2.10(@tanstack/react-query@5.96.1(react@19.2.4))(@types/react@19.2.14)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2)(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6))(wagmi@2.19.5(@tanstack/query-core@5.96.1)(@tanstack/react-query@5.96.1(react@19.2.4))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6))(zod@4.3.6)) '@reown/appkit': specifier: ^1.8.19 - version: 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(zod@3.25.76) + version: 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(use-sync-external-store@1.4.0(react@19.2.4))(utf-8-validate@5.0.10)(zod@4.3.6) '@reown/appkit-adapter-wagmi': specifier: ^1.8.19 - version: 1.8.19(3041b67b8915d842a532aec1c6c6eb72) + version: 1.8.19(2de72959fc98ac49fc53ea96fd4099ec) '@t3-oss/env-core': specifier: ^0.13.11 - version: 0.13.11(typescript@5.9.3)(valibot@1.2.0(typescript@5.9.3))(zod@3.25.76) + version: 0.13.11(typescript@6.0.2)(valibot@1.2.0(typescript@6.0.2))(zod@4.3.6) '@tanstack/react-query': - specifier: ^5.95.2 - version: 5.95.2(react@19.1.0) + specifier: ^5.96.1 + version: 5.96.1(react@19.2.4) '@tanstack/react-router': - specifier: ^1.168.3 - version: 1.168.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: ^1.168.10 + version: 1.168.10(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@tanstack/react-virtual': specifier: ^3.13.23 - version: 3.13.23(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 3.13.23(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@uniswap/default-token-list': - specifier: ^13.33.0 - version: 13.47.0 + specifier: ^18.13.0 + version: 18.13.0 '@vercel/analytics': - specifier: ^1.5.0 - version: 1.6.1(react@19.1.0) + specifier: ^2.0.1 + version: 2.0.1(react@19.2.4) '@web3icons/core': specifier: ^4.0.13 - version: 4.0.51(typescript@5.9.3) + version: 4.0.51(typescript@6.0.2) '@web3icons/react': specifier: ^4.0.13 - version: 4.1.17(react@19.1.0)(typescript@5.9.3) + version: 4.1.17(react@19.2.4)(typescript@6.0.2) + buffer: + specifier: ^6.0.3 + version: 6.0.3 connectkit: - specifier: ^1.9.0 - version: 1.9.1(@babel/core@7.29.0)(@tanstack/react-query@5.95.2(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react-is@17.0.2)(react@19.1.0)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.95.2)(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)) + specifier: ^1.9.2 + version: 1.9.2(@babel/core@7.29.0)(@tanstack/react-query@5.96.1(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react-is@17.0.2)(react@19.2.4)(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6))(wagmi@2.19.5(@tanstack/query-core@5.96.1)(@tanstack/react-query@5.96.1(react@19.2.4))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6))(zod@4.3.6)) graphql: - specifier: ^16.13.1 - version: 16.13.1 + specifier: ^16.13.2 + version: 16.13.2 graphql-request: specifier: ^7.1.2 - version: 7.4.0(graphql@16.13.1) + version: 7.4.0(graphql@16.13.2) next-themes: specifier: ^0.4.6 - version: 0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 0.4.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4) porto: specifier: ^0.2.28 - version: 0.2.37(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(@wagmi/core@3.4.0(@tanstack/query-core@5.95.2)(@types/react@19.2.14)(ox@0.14.7(typescript@5.9.3)(zod@3.25.76))(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)))(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.95.2)(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)) + version: 0.2.37(@tanstack/react-query@5.96.1(react@19.2.4))(@types/react@19.2.14)(@wagmi/core@3.4.0(@tanstack/query-core@5.96.1)(@types/react@19.2.14)(ox@0.14.7(typescript@6.0.2)(zod@4.3.6))(react@19.2.4)(typescript@6.0.2)(use-sync-external-store@1.4.0(react@19.2.4))(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6)))(react@19.2.4)(typescript@6.0.2)(use-sync-external-store@1.4.0(react@19.2.4))(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6))(wagmi@2.19.5(@tanstack/query-core@5.96.1)(@tanstack/react-query@5.96.1(react@19.2.4))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6))(zod@4.3.6)) react: - specifier: 19.1.0 - version: 19.1.0 + specifier: 19.2.4 + version: 19.2.4 react-dom: - specifier: 19.1.0 - version: 19.1.0(react@19.1.0) + specifier: 19.2.4 + version: 19.2.4(react@19.2.4) react-error-boundary: specifier: ^6.0.0 - version: 6.1.1(react@19.1.0) + version: 6.1.1(react@19.2.4) react-jazzicon: specifier: ^1.0.4 - version: 1.0.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.0.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react-number-format: specifier: ^5.4.5 - version: 5.4.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 5.4.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4) use-debounce: - specifier: ^10.0.4 - version: 10.1.0(react@19.1.0) + specifier: ^10.1.1 + version: 10.1.1(react@19.2.4) viem: specifier: ^2.47.6 - version: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + version: 2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) wagmi: specifier: ^2.17.5 - version: 2.19.5(@tanstack/query-core@5.95.2)(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76) + version: 2.19.5(@tanstack/query-core@5.96.1)(@tanstack/react-query@5.96.1(react@19.2.4))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6))(zod@4.3.6) zod: - specifier: ^3.24.4 - version: 3.25.76 + specifier: ^4 + version: 4.3.6 devDependencies: '@biomejs/biome': - specifier: 1.9.4 - version: 1.9.4 + specifier: 2.4.10 + version: 2.4.10 '@commitlint/cli': - specifier: ^19.8.1 - version: 19.8.1(@types/node@25.3.0)(typescript@5.9.3) + specifier: ^20.5.0 + version: 20.5.0(@types/node@25.3.0)(conventional-commits-parser@6.4.0)(typescript@6.0.2) '@commitlint/config-conventional': - specifier: ^19.8.1 - version: 19.8.1 + specifier: ^20.5.0 + version: 20.5.0 '@graphql-codegen/cli': - specifier: ^5.0.6 - version: 5.0.7(@parcel/watcher@2.5.6)(@types/node@25.3.0)(bufferutil@4.1.0)(crossws@0.3.5)(graphql@16.13.1)(typescript@5.9.3)(utf-8-validate@5.0.10) + specifier: ^6 + version: 6.2.1(@parcel/watcher@2.5.6)(@types/node@25.3.0)(bufferutil@4.1.0)(crossws@0.3.5)(graphql@16.13.2)(typescript@6.0.2)(utf-8-validate@5.0.10) '@graphql-typed-document-node/core': specifier: ^3.2.0 - version: 3.2.0(graphql@16.13.1) + version: 3.2.0(graphql@16.13.2) '@parcel/watcher': specifier: ^2.5.1 version: 2.5.6 '@tanstack/react-query-devtools': - specifier: ^5.95.2 - version: 5.95.2(@tanstack/react-query@5.95.2(react@19.1.0))(react@19.1.0) - '@tanstack/router-cli': - specifier: ^1.166.18 - version: 1.166.18 - '@tanstack/router-devtools': + specifier: ^5.96.1 + version: 5.96.1(@tanstack/react-query@5.96.1(react@19.2.4))(react@19.2.4) + '@tanstack/react-router-devtools': specifier: ^1.166.11 - version: 1.166.11(@tanstack/react-router@1.168.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.168.3)(csstype@3.2.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.166.11(@tanstack/react-router@1.168.10(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@tanstack/router-core@1.168.9)(csstype@3.2.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@tanstack/router-cli': + specifier: ^1.166.25 + version: 1.166.25 '@tanstack/router-plugin': - specifier: ^1.167.4 - version: 1.167.4(@tanstack/react-router@1.168.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@6.4.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) + specifier: ^1.167.12 + version: 1.167.12(@tanstack/react-router@1.168.10(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@types/node@25.3.0)(esbuild@0.25.12)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) '@testing-library/jest-dom': specifier: ^6.6.3 version: 6.9.1 '@testing-library/react': specifier: ^16.3.0 - version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@testing-library/user-event': specifier: ^14.6.1 version: 14.6.1(@testing-library/dom@10.4.1) @@ -141,15 +147,15 @@ importers: '@types/react-dom': specifier: ^19.1.3 version: 19.2.3(@types/react@19.2.14) - '@vitejs/plugin-react-swc': - specifier: ^3.9.0 - version: 3.11.0(@swc/helpers@0.5.19)(vite@6.4.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) + '@vitejs/plugin-react': + specifier: ^6.0.1 + version: 6.0.1(vite@8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@types/node@25.3.0)(esbuild@0.25.12)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) '@vitest/coverage-v8': - specifier: ^3.1.3 - version: 3.2.4(vitest@3.2.4(@types/debug@4.1.13)(@types/node@25.3.0)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) + specifier: ^4.1.2 + version: 4.1.2(vitest@4.1.2(@types/node@25.3.0)(jsdom@29.0.1(@noble/hashes@1.8.0))(vite@8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@types/node@25.3.0)(esbuild@0.25.12)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))) '@wagmi/cli': specifier: ^2.3.1 - version: 2.10.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) + version: 2.10.0(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10) change-case: specifier: ^5.4.4 version: 5.4.4 @@ -157,47 +163,44 @@ importers: specifier: ^9.1.7 version: 9.1.7 jsdom: - specifier: ^26.1.0 - version: 26.1.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) + specifier: ^29.0.1 + version: 29.0.1(@noble/hashes@1.8.0) lint-staged: - specifier: ^15.5.2 - version: 15.5.2 + specifier: ^16.4.0 + version: 16.4.0 ts-node: specifier: ^10.9.2 - version: 10.9.2(@swc/core@1.15.13(@swc/helpers@0.5.19))(@types/node@25.3.0)(typescript@5.9.3) + version: 10.9.2(@swc/core@1.15.13(@swc/helpers@0.5.19))(@types/node@25.3.0)(typescript@6.0.2) typedoc: - specifier: ^0.28.4 - version: 0.28.17(typescript@5.9.3) + specifier: ^0.28.18 + version: 0.28.18(typescript@6.0.2) typedoc-github-theme: - specifier: ^0.3.0 - version: 0.3.1(typedoc@0.28.17(typescript@5.9.3)) + specifier: ^0.4.0 + version: 0.4.0(typedoc@0.28.18(typescript@6.0.2)) typedoc-plugin-inline-sources: specifier: ^1.3.0 - version: 1.3.0(typedoc@0.28.17(typescript@5.9.3)) + version: 1.3.0(typedoc@0.28.18(typescript@6.0.2)) typedoc-plugin-missing-exports: specifier: ^4.0.0 - version: 4.1.2(typedoc@0.28.17(typescript@5.9.3)) + version: 4.1.2(typedoc@0.28.18(typescript@6.0.2)) typedoc-plugin-rename-defaults: specifier: ^0.7.3 - version: 0.7.3(typedoc@0.28.17(typescript@5.9.3)) + version: 0.7.3(typedoc@0.28.18(typescript@6.0.2)) typescript: - specifier: ^5.8.3 - version: 5.9.3 + specifier: ^6 + version: 6.0.2 vite: - specifier: ^6.3.5 - version: 6.4.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) + specifier: ^8 + version: 8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@types/node@25.3.0)(esbuild@0.25.12)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) vite-plugin-sitemap: - specifier: ^0.7.1 - version: 0.7.1 - vite-tsconfig-paths: - specifier: ^5.1.4 - version: 5.1.4(typescript@5.9.3)(vite@6.4.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) + specifier: ^0.8.2 + version: 0.8.2 vitest: - specifier: ^3.1.3 - version: 3.2.4(@types/debug@4.1.13)(@types/node@25.3.0)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) + specifier: ^4.1.2 + version: 4.1.2(@types/node@25.3.0)(jsdom@29.0.1(@noble/hashes@1.8.0))(vite@8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@types/node@25.3.0)(esbuild@0.25.12)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) vocs: - specifier: 1.0.11 - version: 1.0.11(@types/node@25.3.0)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(babel-plugin-macros@3.1.0)(jiti@2.6.1)(lightningcss@1.31.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rollup@4.59.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) + specifier: 1.4.1 + version: 1.4.1(@tanstack/react-router@1.168.10(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/node@25.3.0)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(babel-plugin-macros@3.1.0)(jiti@2.6.1)(lightningcss@1.32.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(rollup@4.59.0)(tsx@4.21.0)(typescript@6.0.2) packages: @@ -215,15 +218,31 @@ packages: graphql: ^15.5.0 || ^16.0.0 || ^17.0.0 typescript: ^5.0.0 + '@aave/account@0.2.0': + resolution: {integrity: sha512-fk9KcC0He0WNvUGytxVv4urh8F+zznm6ZdpgKnNvq9jKUpnc2HSSn7mS3n4h13h80WtF8OL6rpL50ctqqc4/Nw==} + peerDependencies: + react: 17.x || 18.x || 19.x + react-dom: 17.x || 18.x || 19.x + viem: 2.x + wagmi: 2.x + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + viem: + optional: true + wagmi: + optional: true + '@adobe/css-tools@4.4.4': resolution: {integrity: sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==} '@adraffy/ens-normalize@1.11.1': resolution: {integrity: sha512-nhCBV3quEgesuf7c7KYfperqSS14T8bYuvJ8PcLJp6znkZpFc0AuW4qBtr8eKVyPPe/8RSr7sglCWPU5eaxwKQ==} - '@ampproject/remapping@2.3.0': - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} - engines: {node: '>=6.0.0'} + '@antfu/install-pkg@1.1.0': + resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==} '@ardatan/relay-compiler@12.0.0': resolution: {integrity: sha512-9anThAaj1dQr6IGmzBMcfzOQKTa5artjuPmw8NYK/fiGEMjADbSguBY2FMDykt+QhilR3wc9VA/3yVju7JHg7Q==} @@ -231,9 +250,8 @@ packages: peerDependencies: graphql: '*' - '@ardatan/relay-compiler@12.0.3': - resolution: {integrity: sha512-mBDFOGvAoVlWaWqs3hm1AciGHSQE1rqFc/liZTyYz/Oek9yZdT5H26pH2zAFuEiTiBVPPyMuqf5VjOFPI2DGsQ==} - hasBin: true + '@ardatan/relay-compiler@13.0.1': + resolution: {integrity: sha512-afG3YPwuSA0E5foouZusz5GlXKs74dObv4cuWyLyfKsYFj2r7oGRNB28v18HvwuLSQtQFCi+DpIe0TZkgQDYyg==} peerDependencies: graphql: '*' @@ -243,8 +261,16 @@ packages: react: '>=18.0.0' react-dom: '>=18.0.0' - '@asamuzakjp/css-color@3.2.0': - resolution: {integrity: sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==} + '@asamuzakjp/css-color@5.1.1': + resolution: {integrity: sha512-iGWN8E45Ws0XWx3D44Q1t6vX2LqhCKcwfmwBYCDsFrYFS6m4q/Ks61L2veETaLv+ckDC6+dTETJoaAAb7VjLiw==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + + '@asamuzakjp/dom-selector@7.0.4': + resolution: {integrity: sha512-jXR6x4AcT3eIrS2fSNAwJpwirOkGcd+E7F7CP3zjdTqz9B/2huHOL8YJZBgekKwLML+u7qB/6P1LXQuMScsx0w==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + + '@asamuzakjp/nwsapi@2.3.9': + resolution: {integrity: sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==} '@babel/code-frame@7.29.0': resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} @@ -333,6 +359,11 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.29.2': + resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/plugin-proposal-class-properties@7.18.6': resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} engines: {node: '>=6.9.0'} @@ -545,59 +576,59 @@ packages: peerDependencies: bs58: ^6.0.0 - '@biomejs/biome@1.9.4': - resolution: {integrity: sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==} + '@biomejs/biome@2.4.10': + resolution: {integrity: sha512-xxA3AphFQ1geij4JTHXv4EeSTda1IFn22ye9LdyVPoJU19fNVl0uzfEuhsfQ4Yue/0FaLs2/ccVi4UDiE7R30w==} engines: {node: '>=14.21.3'} hasBin: true - '@biomejs/cli-darwin-arm64@1.9.4': - resolution: {integrity: sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw==} + '@biomejs/cli-darwin-arm64@2.4.10': + resolution: {integrity: sha512-vuzzI1cWqDVzOMIkYyHbKqp+AkQq4K7k+UCXWpkYcY/HDn1UxdsbsfgtVpa40shem8Kax4TLDLlx8kMAecgqiw==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [darwin] - '@biomejs/cli-darwin-x64@1.9.4': - resolution: {integrity: sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg==} + '@biomejs/cli-darwin-x64@2.4.10': + resolution: {integrity: sha512-14fzASRo+BPotwp7nWULy2W5xeUyFnTaq1V13Etrrxkrih+ez/2QfgFm5Ehtf5vSjtgx/IJycMMpn5kPd5ZNaA==} engines: {node: '>=14.21.3'} cpu: [x64] os: [darwin] - '@biomejs/cli-linux-arm64-musl@1.9.4': - resolution: {integrity: sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA==} + '@biomejs/cli-linux-arm64-musl@2.4.10': + resolution: {integrity: sha512-WrJY6UuiSD/Dh+nwK2qOTu8kdMDlLV3dLMmychIghHPAysWFq1/DGC1pVZx8POE3ZkzKR3PUUnVrtZfMfaJjyQ==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] libc: [musl] - '@biomejs/cli-linux-arm64@1.9.4': - resolution: {integrity: sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g==} + '@biomejs/cli-linux-arm64@2.4.10': + resolution: {integrity: sha512-7MH1CMW5uuxQ/s7FLST63qF8B3Hgu2HRdZ7tA1X1+mk+St4JOuIrqdhIBnnyqeyWJNI+Bww7Es5QZ0wIc1Cmkw==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] libc: [glibc] - '@biomejs/cli-linux-x64-musl@1.9.4': - resolution: {integrity: sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg==} + '@biomejs/cli-linux-x64-musl@2.4.10': + resolution: {integrity: sha512-kDTi3pI6PBN6CiczsWYOyP2zk0IJI08EWEQyDMQWW221rPaaEz6FvjLhnU07KMzLv8q3qSuoB93ua6inSQ55Tw==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] libc: [musl] - '@biomejs/cli-linux-x64@1.9.4': - resolution: {integrity: sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg==} + '@biomejs/cli-linux-x64@2.4.10': + resolution: {integrity: sha512-tZLvEEi2u9Xu1zAqRjTcpIDGVtldigVvzug2fTuPG0ME/g8/mXpRPcNgLB22bGn6FvLJpHHnqLnwliOu8xjYrg==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] libc: [glibc] - '@biomejs/cli-win32-arm64@1.9.4': - resolution: {integrity: sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg==} + '@biomejs/cli-win32-arm64@2.4.10': + resolution: {integrity: sha512-umwQU6qPzH+ISTf/eHyJ/QoQnJs3V9Vpjz2OjZXe9MVBZ7prgGafMy7yYeRGnlmDAn87AKTF3Q6weLoMGpeqdQ==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [win32] - '@biomejs/cli-win32-x64@1.9.4': - resolution: {integrity: sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA==} + '@biomejs/cli-win32-x64@2.4.10': + resolution: {integrity: sha512-aW/JU5GuyH4uxMrNYpoC2kjaHlyJGLgIa3XkhPEZI0uKhZhJZU8BuEyJmvgzSPQNGozBwWjC972RaNdcJ9KyJg==} engines: {node: '>=14.21.3'} cpu: [x64] os: [win32] @@ -612,6 +643,13 @@ packages: react: ^18 viem: ^2 + '@braintree/sanitize-url@7.1.2': + resolution: {integrity: sha512-jigsZK+sMF/cuiB7sERuo9V7N9jx+dhmHHnQyDSVdpZwVutaBu7WvNYqMDLSgFgfB30n452TP3vjDAvFC973mA==} + + '@bramus/specificity@2.4.2': + resolution: {integrity: sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw==} + hasBin: true + '@chakra-ui/react@3.34.0': resolution: {integrity: sha512-VLhpVwv5IVxhwajO10KnS1VQT4hDqQMQP/A796Ya+uVu8AdoSX+5HHyTLTkYIeXIDMe0xLqJfov04OBKbBchJA==} peerDependencies: @@ -619,6 +657,21 @@ packages: react: '>=18' react-dom: '>=18' + '@chevrotain/cst-dts-gen@11.1.2': + resolution: {integrity: sha512-XTsjvDVB5nDZBQB8o0o/0ozNelQtn2KrUVteIHSlPd2VAV2utEb6JzyCJaJ8tGxACR4RiBNWy5uYUHX2eji88Q==} + + '@chevrotain/gast@11.1.2': + resolution: {integrity: sha512-Z9zfXR5jNZb1Hlsd/p+4XWeUFugrHirq36bKzPWDSIacV+GPSVXdk+ahVWZTwjhNwofAWg/sZg58fyucKSQx5g==} + + '@chevrotain/regexp-to-ast@11.1.2': + resolution: {integrity: sha512-nMU3Uj8naWer7xpZTYJdxbAs6RIv/dxYzkYU8GSwgUtcAAlzjcPfX1w+RKRcYG8POlzMeayOQ/znfwxEGo5ulw==} + + '@chevrotain/types@11.1.2': + resolution: {integrity: sha512-U+HFai5+zmJCkK86QsaJtoITlboZHBqrVketcO2ROv865xfCMSFpELQoz1GkX5GzME8pTa+3kbKrZHQtI0gdbw==} + + '@chevrotain/utils@11.1.2': + resolution: {integrity: sha512-4mudFAQ6H+MqBTfqLmU7G1ZwRzCLfJEooL/fsF6rCX5eePMbGhoy5n4g+G4vlh2muDcsCTJtL+uKbOzWxs5LHA==} + '@clack/core@0.3.5': resolution: {integrity: sha512-5cfhQNH+1VQ2xLQlmzXMqUoiaH0lRBq9/CLW9lTyMbuKLC3+xEK01tHVvyut++mLOn5urSHmkm6I0Lg9MaJSTQ==} @@ -636,106 +689,126 @@ packages: '@coinbase/wallet-sdk@4.3.6': resolution: {integrity: sha512-4q8BNG1ViL4mSAAvPAtpwlOs1gpC+67eQtgIwNvT3xyeyFFd+guwkc8bcX5rTmQhXpqnhzC4f0obACbP9CqMSA==} - '@commitlint/cli@19.8.1': - resolution: {integrity: sha512-LXUdNIkspyxrlV6VDHWBmCZRtkEVRpBKxi2Gtw3J54cGWhLCTouVD/Q6ZSaSvd2YaDObWK8mDjrz3TIKtaQMAA==} + '@commitlint/cli@20.5.0': + resolution: {integrity: sha512-yNkyN/tuKTJS3wdVfsZ2tXDM4G4Gi7z+jW54Cki8N8tZqwKBltbIvUUrSbT4hz1bhW/h0CdR+5sCSpXD+wMKaQ==} engines: {node: '>=v18'} hasBin: true - '@commitlint/config-conventional@19.8.1': - resolution: {integrity: sha512-/AZHJL6F6B/G959CsMAzrPKKZjeEiAVifRyEwXxcT6qtqbPwGw+iQxmNS+Bu+i09OCtdNRW6pNpBvgPrtMr9EQ==} + '@commitlint/config-conventional@20.5.0': + resolution: {integrity: sha512-t3Ni88rFw1XMa4nZHgOKJ8fIAT9M2j5TnKyTqJzsxea7FUetlNdYFus9dz+MhIRZmc16P0PPyEfh6X2d/qw8SA==} engines: {node: '>=v18'} - '@commitlint/config-validator@19.8.1': - resolution: {integrity: sha512-0jvJ4u+eqGPBIzzSdqKNX1rvdbSU1lPNYlfQQRIFnBgLy26BtC0cFnr7c/AyuzExMxWsMOte6MkTi9I3SQ3iGQ==} + '@commitlint/config-validator@20.5.0': + resolution: {integrity: sha512-T/Uh6iJUzyx7j35GmHWdIiGRQB+ouZDk0pwAaYq4SXgB54KZhFdJ0vYmxiW6AMYICTIWuyMxDBl1jK74oFp/Gw==} engines: {node: '>=v18'} - '@commitlint/ensure@19.8.1': - resolution: {integrity: sha512-mXDnlJdvDzSObafjYrOSvZBwkD01cqB4gbnnFuVyNpGUM5ijwU/r/6uqUmBXAAOKRfyEjpkGVZxaDsCVnHAgyw==} + '@commitlint/ensure@20.5.0': + resolution: {integrity: sha512-IpHqAUesBeW1EDDdjzJeaOxU9tnogLAyXLRBn03SHlj1SGENn2JGZqSWGkFvBJkJzfXAuCNtsoYzax+ZPS+puw==} engines: {node: '>=v18'} - '@commitlint/execute-rule@19.8.1': - resolution: {integrity: sha512-YfJyIqIKWI64Mgvn/sE7FXvVMQER/Cd+s3hZke6cI1xgNT/f6ZAz5heND0QtffH+KbcqAwXDEE1/5niYayYaQA==} + '@commitlint/execute-rule@20.0.0': + resolution: {integrity: sha512-xyCoOShoPuPL44gVa+5EdZsBVao/pNzpQhkzq3RdtlFdKZtjWcLlUFQHSWBuhk5utKYykeJPSz2i8ABHQA+ZZw==} engines: {node: '>=v18'} - '@commitlint/format@19.8.1': - resolution: {integrity: sha512-kSJj34Rp10ItP+Eh9oCItiuN/HwGQMXBnIRk69jdOwEW9llW9FlyqcWYbHPSGofmjsqeoxa38UaEA5tsbm2JWw==} + '@commitlint/format@20.5.0': + resolution: {integrity: sha512-TI9EwFU/qZWSK7a5qyXMpKPPv3qta7FO4tKW+Wt2al7sgMbLWTsAcDpX1cU8k16TRdsiiet9aOw0zpvRXNJu7Q==} engines: {node: '>=v18'} - '@commitlint/is-ignored@19.8.1': - resolution: {integrity: sha512-AceOhEhekBUQ5dzrVhDDsbMaY5LqtN8s1mqSnT2Kz1ERvVZkNihrs3Sfk1Je/rxRNbXYFzKZSHaPsEJJDJV8dg==} + '@commitlint/is-ignored@20.5.0': + resolution: {integrity: sha512-JWLarAsurHJhPozbuAH6GbP4p/hdOCoqS9zJMfqwswne+/GPs5V0+rrsfOkP68Y8PSLphwtFXV0EzJ+GTXTTGg==} engines: {node: '>=v18'} - '@commitlint/lint@19.8.1': - resolution: {integrity: sha512-52PFbsl+1EvMuokZXLRlOsdcLHf10isTPlWwoY1FQIidTsTvjKXVXYb7AvtpWkDzRO2ZsqIgPK7bI98x8LRUEw==} + '@commitlint/lint@20.5.0': + resolution: {integrity: sha512-jiM3hNUdu04jFBf1VgPdjtIPvbuVfDTBAc6L98AWcoLjF5sYqkulBHBzlVWll4rMF1T5zeQFB6r//a+s+BBKlA==} engines: {node: '>=v18'} - '@commitlint/load@19.8.1': - resolution: {integrity: sha512-9V99EKG3u7z+FEoe4ikgq7YGRCSukAcvmKQuTtUyiYPnOd9a2/H9Ak1J9nJA1HChRQp9OA/sIKPugGS+FK/k1A==} + '@commitlint/load@20.5.0': + resolution: {integrity: sha512-sLhhYTL/KxeOTZjjabKDhwidGZan84XKK1+XFkwDYL/4883kIajcz/dZFAhBJmZPtL8+nBx6bnkzA95YxPeDPw==} engines: {node: '>=v18'} - '@commitlint/message@19.8.1': - resolution: {integrity: sha512-+PMLQvjRXiU+Ae0Wc+p99EoGEutzSXFVwQfa3jRNUZLNW5odZAyseb92OSBTKCu+9gGZiJASt76Cj3dLTtcTdg==} + '@commitlint/message@20.4.3': + resolution: {integrity: sha512-6akwCYrzcrFcTYz9GyUaWlhisY4lmQ3KvrnabmhoeAV8nRH4dXJAh4+EUQ3uArtxxKQkvxJS78hNX2EU3USgxQ==} engines: {node: '>=v18'} - '@commitlint/parse@19.8.1': - resolution: {integrity: sha512-mmAHYcMBmAgJDKWdkjIGq50X4yB0pSGpxyOODwYmoexxxiUCy5JJT99t1+PEMK7KtsCtzuWYIAXYAiKR+k+/Jw==} + '@commitlint/parse@20.5.0': + resolution: {integrity: sha512-SeKWHBMk7YOTnnEWUhx+d1a9vHsjjuo6Uo1xRfPNfeY4bdYFasCH1dDpAv13Lyn+dDPOels+jP6D2GRZqzc5fA==} engines: {node: '>=v18'} - '@commitlint/read@19.8.1': - resolution: {integrity: sha512-03Jbjb1MqluaVXKHKRuGhcKWtSgh3Jizqy2lJCRbRrnWpcM06MYm8th59Xcns8EqBYvo0Xqb+2DoZFlga97uXQ==} + '@commitlint/read@20.5.0': + resolution: {integrity: sha512-JDEIJ2+GnWpK8QqwfmW7O42h0aycJEWNqcdkJnyzLD11nf9dW2dWLTVEa8Wtlo4IZFGLPATjR5neA5QlOvIH1w==} engines: {node: '>=v18'} - '@commitlint/resolve-extends@19.8.1': - resolution: {integrity: sha512-GM0mAhFk49I+T/5UCYns5ayGStkTt4XFFrjjf0L4S26xoMTSkdCf9ZRO8en1kuopC4isDFuEm7ZOm/WRVeElVg==} + '@commitlint/resolve-extends@20.5.0': + resolution: {integrity: sha512-3SHPWUW2v0tyspCTcfSsYml0gses92l6TlogwzvM2cbxDgmhSRc+fldDjvGkCXJrjSM87BBaWYTPWwwyASZRrg==} engines: {node: '>=v18'} - '@commitlint/rules@19.8.1': - resolution: {integrity: sha512-Hnlhd9DyvGiGwjfjfToMi1dsnw1EXKGJNLTcsuGORHz6SS9swRgkBsou33MQ2n51/boIDrbsg4tIBbRpEWK2kw==} + '@commitlint/rules@20.5.0': + resolution: {integrity: sha512-5NdQXQEdnDPT5pK8O39ZA7HohzPRHEsDGU23cyVCNPQy4WegAbAwrQk3nIu7p2sl3dutPk8RZd91yKTrMTnRkQ==} engines: {node: '>=v18'} - '@commitlint/to-lines@19.8.1': - resolution: {integrity: sha512-98Mm5inzbWTKuZQr2aW4SReY6WUukdWXuZhrqf1QdKPZBCCsXuG87c+iP0bwtD6DBnmVVQjgp4whoHRVixyPBg==} + '@commitlint/to-lines@20.0.0': + resolution: {integrity: sha512-2l9gmwiCRqZNWgV+pX1X7z4yP0b3ex/86UmUFgoRt672Ez6cAM2lOQeHFRUTuE6sPpi8XBCGnd8Kh3bMoyHwJw==} engines: {node: '>=v18'} - '@commitlint/top-level@19.8.1': - resolution: {integrity: sha512-Ph8IN1IOHPSDhURCSXBz44+CIu+60duFwRsg6HqaISFHQHbmBtxVw4ZrFNIYUzEP7WwrNPxa2/5qJ//NK1FGcw==} + '@commitlint/top-level@20.4.3': + resolution: {integrity: sha512-qD9xfP6dFg5jQ3NMrOhG0/w5y3bBUsVGyJvXxdWEwBm8hyx4WOk3kKXw28T5czBYvyeCVJgJJ6aoJZUWDpaacQ==} engines: {node: '>=v18'} - '@commitlint/types@19.8.1': - resolution: {integrity: sha512-/yCrWGCoA1SVKOks25EGadP9Pnj0oAIHGpl2wH2M2Y46dPM2ueb8wyCVOD7O3WCTkaJ0IkKvzhl1JY7+uCT2Dw==} + '@commitlint/types@20.5.0': + resolution: {integrity: sha512-ZJoS8oSq2CAZEpc/YI9SulLrdiIyXeHb/OGqGrkUP6Q7YV+0ouNAa7GjqRdXeQPncHQIDz/jbCTlHScvYvO/gA==} engines: {node: '>=v18'} + '@conventional-changelog/git-client@2.6.0': + resolution: {integrity: sha512-T+uPDciKf0/ioNNDpMGc8FDsehJClZP0yR3Q5MN6wE/Y/1QZ7F+80OgznnTCOlMEG4AV0LvH2UJi3C/nBnaBUg==} + engines: {node: '>=18'} + peerDependencies: + conventional-commits-filter: ^5.0.0 + conventional-commits-parser: ^6.3.0 + peerDependenciesMeta: + conventional-commits-filter: + optional: true + conventional-commits-parser: + optional: true + '@cspotcode/source-map-support@0.8.1': resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} - '@csstools/color-helpers@5.1.0': - resolution: {integrity: sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==} - engines: {node: '>=18'} + '@csstools/color-helpers@6.0.2': + resolution: {integrity: sha512-LMGQLS9EuADloEFkcTBR3BwV/CGHV7zyDxVRtVDTwdI2Ca4it0CCVTT9wCkxSgokjE5Ho41hEPgb8OEUwoXr6Q==} + engines: {node: '>=20.19.0'} - '@csstools/css-calc@2.1.4': - resolution: {integrity: sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==} - engines: {node: '>=18'} + '@csstools/css-calc@3.1.1': + resolution: {integrity: sha512-HJ26Z/vmsZQqs/o3a6bgKslXGFAungXGbinULZO3eMsOyNJHeBBZfup5FiZInOghgoM4Hwnmw+OgbJCNg1wwUQ==} + engines: {node: '>=20.19.0'} peerDependencies: - '@csstools/css-parser-algorithms': ^3.0.5 - '@csstools/css-tokenizer': ^3.0.4 + '@csstools/css-parser-algorithms': ^4.0.0 + '@csstools/css-tokenizer': ^4.0.0 - '@csstools/css-color-parser@3.1.0': - resolution: {integrity: sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==} - engines: {node: '>=18'} + '@csstools/css-color-parser@4.0.2': + resolution: {integrity: sha512-0GEfbBLmTFf0dJlpsNU7zwxRIH0/BGEMuXLTCvFYxuL1tNhqzTbtnFICyJLTNK4a+RechKP75e7w42ClXSnJQw==} + engines: {node: '>=20.19.0'} peerDependencies: - '@csstools/css-parser-algorithms': ^3.0.5 - '@csstools/css-tokenizer': ^3.0.4 + '@csstools/css-parser-algorithms': ^4.0.0 + '@csstools/css-tokenizer': ^4.0.0 - '@csstools/css-parser-algorithms@3.0.5': - resolution: {integrity: sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==} - engines: {node: '>=18'} + '@csstools/css-parser-algorithms@4.0.0': + resolution: {integrity: sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==} + engines: {node: '>=20.19.0'} peerDependencies: - '@csstools/css-tokenizer': ^3.0.4 + '@csstools/css-tokenizer': ^4.0.0 - '@csstools/css-tokenizer@3.0.4': - resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==} - engines: {node: '>=18'} + '@csstools/css-syntax-patches-for-csstree@1.1.2': + resolution: {integrity: sha512-5GkLzz4prTIpoyeUiIu3iV6CSG3Plo7xRVOFPKI7FVEJ3mZ0A8SwK0XU3Gl7xAkiQ+mDyam+NNp875/C5y+jSA==} + peerDependencies: + css-tree: ^3.2.1 + peerDependenciesMeta: + css-tree: + optional: true + + '@csstools/css-tokenizer@4.0.0': + resolution: {integrity: sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==} + engines: {node: '>=20.19.0'} '@ecies/ciphers@0.2.5': resolution: {integrity: sha512-GalEZH4JgOMHYYcYmVqnFirFsjZHeoGMDt9IxEnM9F7GRUUyUksJ7Ou53L83WHJq3RWKD3AcBpo0iQh0oMpf8A==} @@ -743,6 +816,15 @@ packages: peerDependencies: '@noble/ciphers': ^1.0.0 + '@emnapi/core@1.9.2': + resolution: {integrity: sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==} + + '@emnapi/runtime@1.9.2': + resolution: {integrity: sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==} + + '@emnapi/wasi-threads@1.2.1': + resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} + '@emotion/babel-plugin@11.13.5': resolution: {integrity: sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==} @@ -817,8 +899,8 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/aix-ppc64@0.27.3': - resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==} + '@esbuild/aix-ppc64@0.27.4': + resolution: {integrity: sha512-cQPwL2mp2nSmHHJlCyoXgHGhbEPMrEEU5xhkcy3Hs/O7nGZqEpZ2sUtLaL9MORLtDfRvVl2/3PAuEkYZH0Ty8Q==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] @@ -829,8 +911,8 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.27.3': - resolution: {integrity: sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==} + '@esbuild/android-arm64@0.27.4': + resolution: {integrity: sha512-gdLscB7v75wRfu7QSm/zg6Rx29VLdy9eTr2t44sfTW7CxwAtQghZ4ZnqHk3/ogz7xao0QAgrkradbBzcqFPasw==} engines: {node: '>=18'} cpu: [arm64] os: [android] @@ -841,8 +923,8 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-arm@0.27.3': - resolution: {integrity: sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==} + '@esbuild/android-arm@0.27.4': + resolution: {integrity: sha512-X9bUgvxiC8CHAGKYufLIHGXPJWnr0OCdR0anD2e21vdvgCI8lIfqFbnoeOz7lBjdrAGUhqLZLcQo6MLhTO2DKQ==} engines: {node: '>=18'} cpu: [arm] os: [android] @@ -853,8 +935,8 @@ packages: cpu: [x64] os: [android] - '@esbuild/android-x64@0.27.3': - resolution: {integrity: sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==} + '@esbuild/android-x64@0.27.4': + resolution: {integrity: sha512-PzPFnBNVF292sfpfhiyiXCGSn9HZg5BcAz+ivBuSsl6Rk4ga1oEXAamhOXRFyMcjwr2DVtm40G65N3GLeH1Lvw==} engines: {node: '>=18'} cpu: [x64] os: [android] @@ -865,8 +947,8 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.27.3': - resolution: {integrity: sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==} + '@esbuild/darwin-arm64@0.27.4': + resolution: {integrity: sha512-b7xaGIwdJlht8ZFCvMkpDN6uiSmnxxK56N2GDTMYPr2/gzvfdQN8rTfBsvVKmIVY/X7EM+/hJKEIbbHs9oA4tQ==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] @@ -877,8 +959,8 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.27.3': - resolution: {integrity: sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==} + '@esbuild/darwin-x64@0.27.4': + resolution: {integrity: sha512-sR+OiKLwd15nmCdqpXMnuJ9W2kpy0KigzqScqHI3Hqwr7IXxBp3Yva+yJwoqh7rE8V77tdoheRYataNKL4QrPw==} engines: {node: '>=18'} cpu: [x64] os: [darwin] @@ -889,8 +971,8 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.27.3': - resolution: {integrity: sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==} + '@esbuild/freebsd-arm64@0.27.4': + resolution: {integrity: sha512-jnfpKe+p79tCnm4GVav68A7tUFeKQwQyLgESwEAUzyxk/TJr4QdGog9sqWNcUbr/bZt/O/HXouspuQDd9JxFSw==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] @@ -901,8 +983,8 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.27.3': - resolution: {integrity: sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==} + '@esbuild/freebsd-x64@0.27.4': + resolution: {integrity: sha512-2kb4ceA/CpfUrIcTUl1wrP/9ad9Atrp5J94Lq69w7UwOMolPIGrfLSvAKJp0RTvkPPyn6CIWrNy13kyLikZRZQ==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] @@ -913,8 +995,8 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.27.3': - resolution: {integrity: sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==} + '@esbuild/linux-arm64@0.27.4': + resolution: {integrity: sha512-7nQOttdzVGth1iz57kxg9uCz57dxQLHWxopL6mYuYthohPKEK0vU0C3O21CcBK6KDlkYVcnDXY099HcCDXd9dA==} engines: {node: '>=18'} cpu: [arm64] os: [linux] @@ -925,8 +1007,8 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.27.3': - resolution: {integrity: sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==} + '@esbuild/linux-arm@0.27.4': + resolution: {integrity: sha512-aBYgcIxX/wd5n2ys0yESGeYMGF+pv6g0DhZr3G1ZG4jMfruU9Tl1i2Z+Wnj9/KjGz1lTLCcorqE2viePZqj4Eg==} engines: {node: '>=18'} cpu: [arm] os: [linux] @@ -937,8 +1019,8 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.27.3': - resolution: {integrity: sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==} + '@esbuild/linux-ia32@0.27.4': + resolution: {integrity: sha512-oPtixtAIzgvzYcKBQM/qZ3R+9TEUd1aNJQu0HhGyqtx6oS7qTpvjheIWBbes4+qu1bNlo2V4cbkISr8q6gRBFA==} engines: {node: '>=18'} cpu: [ia32] os: [linux] @@ -949,8 +1031,8 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.27.3': - resolution: {integrity: sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==} + '@esbuild/linux-loong64@0.27.4': + resolution: {integrity: sha512-8mL/vh8qeCoRcFH2nM8wm5uJP+ZcVYGGayMavi8GmRJjuI3g1v6Z7Ni0JJKAJW+m0EtUuARb6Lmp4hMjzCBWzA==} engines: {node: '>=18'} cpu: [loong64] os: [linux] @@ -961,8 +1043,8 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.27.3': - resolution: {integrity: sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==} + '@esbuild/linux-mips64el@0.27.4': + resolution: {integrity: sha512-1RdrWFFiiLIW7LQq9Q2NES+HiD4NyT8Itj9AUeCl0IVCA459WnPhREKgwrpaIfTOe+/2rdntisegiPWn/r/aAw==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] @@ -973,8 +1055,8 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.27.3': - resolution: {integrity: sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==} + '@esbuild/linux-ppc64@0.27.4': + resolution: {integrity: sha512-tLCwNG47l3sd9lpfyx9LAGEGItCUeRCWeAx6x2Jmbav65nAwoPXfewtAdtbtit/pJFLUWOhpv0FpS6GQAmPrHA==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] @@ -985,8 +1067,8 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.27.3': - resolution: {integrity: sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==} + '@esbuild/linux-riscv64@0.27.4': + resolution: {integrity: sha512-BnASypppbUWyqjd1KIpU4AUBiIhVr6YlHx/cnPgqEkNoVOhHg+YiSVxM1RLfiy4t9cAulbRGTNCKOcqHrEQLIw==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] @@ -997,8 +1079,8 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.27.3': - resolution: {integrity: sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==} + '@esbuild/linux-s390x@0.27.4': + resolution: {integrity: sha512-+eUqgb/Z7vxVLezG8bVB9SfBie89gMueS+I0xYh2tJdw3vqA/0ImZJ2ROeWwVJN59ihBeZ7Tu92dF/5dy5FttA==} engines: {node: '>=18'} cpu: [s390x] os: [linux] @@ -1009,8 +1091,8 @@ packages: cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.27.3': - resolution: {integrity: sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==} + '@esbuild/linux-x64@0.27.4': + resolution: {integrity: sha512-S5qOXrKV8BQEzJPVxAwnryi2+Iq5pB40gTEIT69BQONqR7JH1EPIcQ/Uiv9mCnn05jff9umq/5nqzxlqTOg9NA==} engines: {node: '>=18'} cpu: [x64] os: [linux] @@ -1021,8 +1103,8 @@ packages: cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-arm64@0.27.3': - resolution: {integrity: sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==} + '@esbuild/netbsd-arm64@0.27.4': + resolution: {integrity: sha512-xHT8X4sb0GS8qTqiwzHqpY00C95DPAq7nAwX35Ie/s+LO9830hrMd3oX0ZMKLvy7vsonee73x0lmcdOVXFzd6Q==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] @@ -1033,8 +1115,8 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.27.3': - resolution: {integrity: sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==} + '@esbuild/netbsd-x64@0.27.4': + resolution: {integrity: sha512-RugOvOdXfdyi5Tyv40kgQnI0byv66BFgAqjdgtAKqHoZTbTF2QqfQrFwa7cHEORJf6X2ht+l9ABLMP0dnKYsgg==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] @@ -1045,8 +1127,8 @@ packages: cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-arm64@0.27.3': - resolution: {integrity: sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==} + '@esbuild/openbsd-arm64@0.27.4': + resolution: {integrity: sha512-2MyL3IAaTX+1/qP0O1SwskwcwCoOI4kV2IBX1xYnDDqthmq5ArrW94qSIKCAuRraMgPOmG0RDTA74mzYNQA9ow==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] @@ -1057,8 +1139,8 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.27.3': - resolution: {integrity: sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==} + '@esbuild/openbsd-x64@0.27.4': + resolution: {integrity: sha512-u8fg/jQ5aQDfsnIV6+KwLOf1CmJnfu1ShpwqdwC0uA7ZPwFws55Ngc12vBdeUdnuWoQYx/SOQLGDcdlfXhYmXQ==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] @@ -1069,8 +1151,8 @@ packages: cpu: [arm64] os: [openharmony] - '@esbuild/openharmony-arm64@0.27.3': - resolution: {integrity: sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==} + '@esbuild/openharmony-arm64@0.27.4': + resolution: {integrity: sha512-JkTZrl6VbyO8lDQO3yv26nNr2RM2yZzNrNHEsj9bm6dOwwu9OYN28CjzZkH57bh4w0I2F7IodpQvUAEd1mbWXg==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] @@ -1081,8 +1163,8 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.27.3': - resolution: {integrity: sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==} + '@esbuild/sunos-x64@0.27.4': + resolution: {integrity: sha512-/gOzgaewZJfeJTlsWhvUEmUG4tWEY2Spp5M20INYRg2ZKl9QPO3QEEgPeRtLjEWSW8FilRNacPOg8R1uaYkA6g==} engines: {node: '>=18'} cpu: [x64] os: [sunos] @@ -1093,8 +1175,8 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.27.3': - resolution: {integrity: sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==} + '@esbuild/win32-arm64@0.27.4': + resolution: {integrity: sha512-Z9SExBg2y32smoDQdf1HRwHRt6vAHLXcxD2uGgO/v2jK7Y718Ix4ndsbNMU/+1Qiem9OiOdaqitioZwxivhXYg==} engines: {node: '>=18'} cpu: [arm64] os: [win32] @@ -1105,8 +1187,8 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.27.3': - resolution: {integrity: sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==} + '@esbuild/win32-ia32@0.27.4': + resolution: {integrity: sha512-DAyGLS0Jz5G5iixEbMHi5KdiApqHBWMGzTtMiJ72ZOLhbu/bzxgAe8Ue8CTS3n3HbIUHQz/L51yMdGMeoxXNJw==} engines: {node: '>=18'} cpu: [ia32] os: [win32] @@ -1117,8 +1199,8 @@ packages: cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.27.3': - resolution: {integrity: sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==} + '@esbuild/win32-x64@0.27.4': + resolution: {integrity: sha512-+knoa0BDoeXgkNvvV1vvbZX4+hizelrkwmGJBdT17t8FNPwG2lKemmuMZlmaNQ3ws3DKKCxpb4zRZEIp3UxFCg==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -1139,18 +1221,21 @@ packages: resolution: {integrity: sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==} engines: {node: '>=14'} + '@exodus/bytes@1.15.0': + resolution: {integrity: sha512-UY0nlA+feH81UGSHv92sLEPLCeZFjXOuHhrIo0HQydScuQc8s0A7kL/UdgwgDq8g8ilksmuoF35YVTNphV2aBQ==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + peerDependencies: + '@noble/hashes': ^1.8.0 || ^2.0.0 + peerDependenciesMeta: + '@noble/hashes': + optional: true + '@fastify/busboy@3.2.0': resolution: {integrity: sha512-m9FVDXU3GT2ITSe0UaMA5rU3QkfC/UXtCU8y0gSN/GugTqtVldOBWIB5V6V3sbmenVZUIpU6f+mPEO2+m5iTaA==} - '@floating-ui/core@1.7.4': - resolution: {integrity: sha512-C3HlIdsBxszvm5McXlB8PeOEWfBhcGBTZGkGlWc2U0KFY5IwG5OQEuQ8rq52DZmcHDlPLd+YFBK+cZcytwIFWg==} - '@floating-ui/core@1.7.5': resolution: {integrity: sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==} - '@floating-ui/dom@1.7.5': - resolution: {integrity: sha512-N0bD2kIPInNHUHehXhMke1rBGs1dwqvC9O9KYMyyjK7iXt7GAhnro7UlcuYcGdS/yYOlq0MAVgrow8IbWJwyqg==} - '@floating-ui/dom@1.7.6': resolution: {integrity: sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==} @@ -1166,19 +1251,20 @@ packages: react: '>=17.0.0' react-dom: '>=17.0.0' - '@floating-ui/utils@0.2.10': - resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} - '@floating-ui/utils@0.2.11': resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==} + '@fortawesome/fontawesome-free@6.7.2': + resolution: {integrity: sha512-JUOtgFW6k9u4Y+xeIaEiLr3+cjoUPiAuLXoyKOJSia6Duzb7pq+A76P9ZdPDoAoxHdHzq6gE9/jKBGXlZT8FbA==} + engines: {node: '>=6'} + '@gemini-wallet/core@0.3.2': resolution: {integrity: sha512-Z4aHi3ECFf5oWYWM3F1rW83GJfB9OvhBYPTmb5q+VyK3uvzvS48lwo+jwh2eOoCRWEuT/crpb9Vwp2QaS5JqgQ==} peerDependencies: viem: '>=2.0.0' - '@gerrit0/mini-shiki@3.22.0': - resolution: {integrity: sha512-jMpciqEVUBKE1QwU64S4saNMzpsSza6diNCk4MWAeCxO2+LFi2FIFmL2S0VDLzEJCxuvCbU783xi8Hp/gkM5CQ==} + '@gerrit0/mini-shiki@3.23.0': + resolution: {integrity: sha512-bEMORlG0cqdjVyCEuU0cDQbORWX+kYCeo0kV1lbxF5bt4r7SID2l9bqsxJEM0zndaxpOUT7riCyIVEuqq/Ynxg==} '@gql.tada/cli-utils@1.7.2': resolution: {integrity: sha512-Qbc7hbLvCz6IliIJpJuKJa9p05b2Jona7ov7+qofCsMRxHRZE1kpAmZMvL8JCI4c0IagpIlWNaMizXEQUe8XjQ==} @@ -1200,13 +1286,14 @@ packages: graphql: ^15.5.0 || ^16.0.0 || ^17.0.0 typescript: ^5.0.0 - '@graphql-codegen/add@5.0.3': - resolution: {integrity: sha512-SxXPmramkth8XtBlAHu4H4jYcYXM/o3p01+psU+0NADQowA8jtYkK6MW5rV6T+CxkEaNZItfSmZRPgIuypcqnA==} + '@graphql-codegen/add@6.0.0': + resolution: {integrity: sha512-biFdaURX0KTwEJPQ1wkT6BRgNasqgQ5KbCI1a3zwtLtO7XTo7/vKITPylmiU27K5DSOWYnY/1jfSqUAEBuhZrQ==} + engines: {node: '>=16'} peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - '@graphql-codegen/cli@5.0.7': - resolution: {integrity: sha512-h/sxYvSaWtxZxo8GtaA8SvcHTyViaaPd7dweF/hmRDpaQU1o3iU3EZxlcJ+oLTunU0tSMFsnrIXm/mhXxI11Cw==} + '@graphql-codegen/cli@6.2.1': + resolution: {integrity: sha512-E1B+5nBda2l89Pci5M0HcEj2Hmx2yhORFX+1T3rmwpQjdOiulo+h9JifWxKomUpjfbmU1YkBSd47CCGLFPU10A==} engines: {node: '>=16'} hasBin: true peerDependencies: @@ -1216,8 +1303,8 @@ packages: '@parcel/watcher': optional: true - '@graphql-codegen/client-preset@4.8.3': - resolution: {integrity: sha512-QpEsPSO9fnRxA6Z66AmBuGcwHjZ6dYSxYo5ycMlYgSPzAbyG8gn/kWljofjJfWqSY+T/lRn+r8IXTH14ml24vQ==} + '@graphql-codegen/client-preset@5.2.4': + resolution: {integrity: sha512-k4f9CoepkVznXRReCHBVnG/FeQVQgIOhgtkaJ6I9FcQRzUkrm9ASmQjOdNdMlZt0DHTU4nbVxIBGZW7gk1RavA==} engines: {node: '>=16'} peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 @@ -1226,13 +1313,14 @@ packages: graphql-sock: optional: true - '@graphql-codegen/core@4.0.2': - resolution: {integrity: sha512-IZbpkhwVqgizcjNiaVzNAzm/xbWT6YnGgeOLwVjm4KbJn3V2jchVtuzHH09G5/WkkLSk2wgbXNdwjM41JxO6Eg==} + '@graphql-codegen/core@5.0.1': + resolution: {integrity: sha512-eQD7aXpKkKvaydMv5Bu0FnKCPnNMAhZ3vZW+K4Rl9IAC2w5PDv9lJhs3YTWM9W58zNOZpGQGT2F0ekS3QNIiKw==} + engines: {node: '>=16'} peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - '@graphql-codegen/gql-tag-operations@4.0.17': - resolution: {integrity: sha512-2pnvPdIG6W9OuxkrEZ6hvZd142+O3B13lvhrZ48yyEBh2ujtmKokw0eTwDHtlXUqjVS0I3q7+HB2y12G/m69CA==} + '@graphql-codegen/gql-tag-operations@5.1.4': + resolution: {integrity: sha512-tDj/0a1U7rDH3PQgLeA+PlgBNb593MIJ43oAOKMRgJPwIQ9T7p2oqBRLxwfFZFTDLwnwsGZ7xIKqIcGgyAIj5Q==} engines: {node: '>=16'} peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 @@ -1242,19 +1330,20 @@ packages: peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - '@graphql-codegen/plugin-helpers@5.1.1': - resolution: {integrity: sha512-28GHODK2HY1NhdyRcPP3sCz0Kqxyfiz7boIZ8qIxFYmpLYnlDgiYok5fhFLVSZihyOpCs4Fa37gVHf/Q4I2FEg==} + '@graphql-codegen/plugin-helpers@6.2.1': + resolution: {integrity: sha512-shRr26TfVZ6KFBjzRYUj02gLNh6yaECz9gTGgI6riANw5sSH9PONwTsBRYkEgU+6IXiL7VQeCumahvxSGFbRlQ==} engines: {node: '>=16'} peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - '@graphql-codegen/schema-ast@4.1.0': - resolution: {integrity: sha512-kZVn0z+th9SvqxfKYgztA6PM7mhnSZaj4fiuBWvMTqA+QqQ9BBed6Pz41KuD/jr0gJtnlr2A4++/0VlpVbCTmQ==} + '@graphql-codegen/schema-ast@5.0.1': + resolution: {integrity: sha512-svLffXddnXxq1qFXQqqh+zYrxdiMnIKm+CXCUv0MYhLh0R4L5vpnaTzIUCk3icHNNXhKRm2uBD70+K8VY0xiCg==} + engines: {node: '>=16'} peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - '@graphql-codegen/typed-document-node@5.1.2': - resolution: {integrity: sha512-jaxfViDqFRbNQmfKwUY8hDyjnLTw2Z7DhGutxoOiiAI0gE/LfPe0LYaVFKVmVOOD7M3bWxoWfu4slrkbWbUbEw==} + '@graphql-codegen/typed-document-node@6.1.7': + resolution: {integrity: sha512-VLL9hB+YPigc/W2QYCkSNMZrkKv42nTchb9mJ0h5VY98YmW/zWb6NeYM80iHSpk8ZvHsuUT5geA53/s1phO2NQ==} engines: {node: '>=16'} peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 @@ -1267,8 +1356,8 @@ packages: graphql-request: ^6.0.0 || ^7.0.0 graphql-tag: ^2.0.0 - '@graphql-codegen/typescript-operations@4.6.1': - resolution: {integrity: sha512-k92laxhih7s0WZ8j5WMIbgKwhe64C0As6x+PdcvgZFMudDJ7rPJ/hFqJ9DCRxNjXoHmSjnr6VUuQZq4lT1RzCA==} + '@graphql-codegen/typescript-operations@5.0.9': + resolution: {integrity: sha512-jJFdJKMS5Cqisb5QMi7xXHPsJH9yHBMYOxBc8laFkFjHk/AOqJK90qCKbO9lwwTMPZUDe6N/HslmA0ax4J0zsg==} engines: {node: '>=16'} peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 @@ -1277,8 +1366,8 @@ packages: graphql-sock: optional: true - '@graphql-codegen/typescript@4.1.6': - resolution: {integrity: sha512-vpw3sfwf9A7S+kIUjyFxuvrywGxd4lmwmyYnnDVjVE4kSQ6Td3DpqaPTy8aNQ6O96vFoi/bxbZS2BW49PwSUUA==} + '@graphql-codegen/typescript@5.0.9': + resolution: {integrity: sha512-YlIZ4nqdFdzr5vxuNtQtZnnMYuZ5cLYB2HaGhGI2zvqHxCmkBjIRpu/5sfccawKy23wetV+aoWvoNqxGKIryig==} engines: {node: '>=16'} peerDependencies: graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 @@ -1288,15 +1377,15 @@ packages: peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - '@graphql-codegen/visitor-plugin-common@5.8.0': - resolution: {integrity: sha512-lC1E1Kmuzi3WZUlYlqB4fP6+CvbKH9J+haU1iWmgsBx5/sO2ROeXJG4Dmt8gP03bI2BwjiwV5WxCEMlyeuzLnA==} + '@graphql-codegen/visitor-plugin-common@6.2.4': + resolution: {integrity: sha512-iwiVCc7Mv8/XAa3K35AdFQ9chJSDv/gYEnBeQFF/Sq/W8EyJoHypOGOTTLk7OSrWO4xea65ggv0e7fGt7rPJjQ==} engines: {node: '>=16'} peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - '@graphql-hive/signal@1.0.0': - resolution: {integrity: sha512-RiwLMc89lTjvyLEivZ/qxAC5nBHoS2CtsWFSOsN35sxG9zoo5Z+JsFHM8MlvmO9yt+MJNIyC5MLE1rsbOphlag==} - engines: {node: '>=18.0.0'} + '@graphql-hive/signal@2.0.0': + resolution: {integrity: sha512-Pz8wB3K0iU6ae9S1fWfsmJX24CcGeTo6hE7T44ucmV/ALKRj+bxClmqrYcDT7v3f0d12Rh4FAXBb6gon+WkDpQ==} + engines: {node: '>=20.0.0'} '@graphql-tools/apollo-engine-loader@8.0.28': resolution: {integrity: sha512-MzgDrUuoxp6dZeo54zLBL3cEJKJtM3N/2RqK0rbPxPq5X2z6TUA7EGg8vIFTUkt5xelAsUrm8/4ai41ZDdxOng==} @@ -1304,9 +1393,9 @@ packages: peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/batch-execute@9.0.19': - resolution: {integrity: sha512-VGamgY4PLzSx48IHPoblRw0oTaBa7S26RpZXt0Y4NN90ytoE0LutlpB2484RbkfcTjv9wa64QD474+YP1kEgGA==} - engines: {node: '>=18.0.0'} + '@graphql-tools/batch-execute@10.0.8': + resolution: {integrity: sha512-Kobt37qrVTFhX4HUK5/vPgMXFw/5f97AzmAlfmDBSRh/GnoAmLKCb48FrEI3gdeIwZB2fEhVHJyDqsojldnLQA==} + engines: {node: '>=20.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 @@ -1316,9 +1405,9 @@ packages: peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/delegate@10.2.23': - resolution: {integrity: sha512-xrPtl7f1LxS+B6o+W7ueuQh67CwRkfl+UKJncaslnqYdkxKmNBB4wnzVcW8ZsRdwbsla/v43PtwAvSlzxCzq2w==} - engines: {node: '>=18.0.0'} + '@graphql-tools/delegate@12.0.13': + resolution: {integrity: sha512-Aei3SI5HezLt7kKQNbX/GrZv5c5YibdbP0N6BvuEWQYG+lpRO3RRX2fZ+g+KshJOGuTJQFK1umIjki++vKoJ+A==} + engines: {node: '>=20.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 @@ -1328,32 +1417,26 @@ packages: peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/executor-common@0.0.4': - resolution: {integrity: sha512-SEH/OWR+sHbknqZyROCFHcRrbZeUAyjCsgpVWCRjqjqRbiJiXq6TxNIIOmpXgkrXWW/2Ev4Wms6YSGJXjdCs6Q==} - engines: {node: '>=18.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - - '@graphql-tools/executor-common@0.0.6': - resolution: {integrity: sha512-JAH/R1zf77CSkpYATIJw+eOJwsbWocdDjY+avY7G+P5HCXxwQjAjWVkJI1QJBQYjPQDVxwf1fmTZlIN3VOadow==} - engines: {node: '>=18.0.0'} + '@graphql-tools/executor-common@1.0.6': + resolution: {integrity: sha512-23/K5C+LSlHDI0mj2SwCJ33RcELCcyDUgABm1Z8St7u/4Z5+95i925H/NAjUyggRjiaY8vYtNiMOPE49aPX1sg==} + engines: {node: '>=20.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/executor-graphql-ws@2.0.7': - resolution: {integrity: sha512-J27za7sKF6RjhmvSOwOQFeNhNHyP4f4niqPnerJmq73OtLx9Y2PGOhkXOEB0PjhvPJceuttkD2O1yMgEkTGs3Q==} - engines: {node: '>=18.0.0'} + '@graphql-tools/executor-graphql-ws@3.1.5': + resolution: {integrity: sha512-WXRsfwu9AkrORD9nShrd61OwwxeQ5+eXYcABRR3XPONFIS8pWQfDJGGqxql9/227o/s0DV5SIfkBURb5Knzv+A==} + engines: {node: '>=20.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/executor-http@1.3.3': - resolution: {integrity: sha512-LIy+l08/Ivl8f8sMiHW2ebyck59JzyzO/yF9SFS4NH6MJZUezA1xThUXCDIKhHiD56h/gPojbkpcFvM2CbNE7A==} - engines: {node: '>=18.0.0'} + '@graphql-tools/executor-http@3.2.1': + resolution: {integrity: sha512-53i0TYO0cznIlZDJcnq4gQ6SOZ8efGgCDV33MYh6oqEapcp36tCMEVnVGVxcX5qRRyNHkqTY6hkA+/AyK9kicQ==} + engines: {node: '>=20.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/executor-legacy-ws@1.1.25': - resolution: {integrity: sha512-6uf4AEXO0QMxJ7AWKVPqEZXgYBJaiz5vf29X0boG8QtcqWy8mqkXKWLND2Swdx0SbEx0efoGFcjuKufUcB0ASQ==} + '@graphql-tools/executor-legacy-ws@1.1.26': + resolution: {integrity: sha512-rlFHk8XoRCXjARQAlHTgtisyE5KJxMb9UyR4hRbD6tLlYjmzNf9ms8GjsLYe/j1QpHJ7fNDm9aXqj1+evhQ/MQ==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 @@ -1370,14 +1453,14 @@ packages: peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/github-loader@8.0.22': - resolution: {integrity: sha512-uQ4JNcNPsyMkTIgzeSbsoT9hogLjYrZooLUYd173l5eUGUi49EAcsGdiBCKaKfEjanv410FE8hjaHr7fjSRkJw==} - engines: {node: '>=16.0.0'} + '@graphql-tools/github-loader@9.1.0': + resolution: {integrity: sha512-S/nlKtnmX3JzTrGwbPyXw+GKGj/1+A1lRQ73QEMDMjQK3TXygoKml5WqZwHEvp6qp3Jdncx9FHUzg9nge+rizQ==} + engines: {node: '>=20.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/graphql-file-loader@8.1.9': - resolution: {integrity: sha512-rkLK46Q62Zxift8B6Kfw6h8SH3pCR3DPCfNeC/lpLwYReezZz+2ARuLDFZjQGjW+4lpMwiAw8CIxDyQAUgqU6A==} + '@graphql-tools/graphql-file-loader@8.1.12': + resolution: {integrity: sha512-Nma7gBgJoUbqXWTmdHjouo36tjzewA8MptVcHoH7widzkciaUVzBhriHzqICFB/dVxig//g9MX8s1XawZo7UAg==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 @@ -1388,8 +1471,14 @@ packages: peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/import@7.1.9': - resolution: {integrity: sha512-mHzOgyfzsAgstaZPIFEtKg4GVH4FbDHeHYrSs73mAPKS5F59/FlRuUJhAoRnxbVnc3qIZ6EsWBjOjNbnPK8viA==} + '@graphql-tools/graphql-tag-pluck@8.3.29': + resolution: {integrity: sha512-aKX6ooaSjROHhGqlW1B2pARKjWk1OQOLvmQJe8GmP9vvKwjxuTl9FgZazjWvhN0GO9LFxd/JGzx0xCiXE6KQZw==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/import@7.1.12': + resolution: {integrity: sha512-QSsdPsdJ7yCgQ5XODyKYpC7NlB9R1Koi0R3418PT7GiRm+9O8gYXSs/23dumcOnpiLrnf4qR2aytBn1+JOAhnA==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 @@ -1423,20 +1512,13 @@ packages: peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/prisma-loader@8.0.17': - resolution: {integrity: sha512-fnuTLeQhqRbA156pAyzJYN0KxCjKYRU5bz1q/SKOwElSnAU4k7/G1kyVsWLh7fneY78LoMNH5n+KlFV8iQlnyg==} - engines: {node: '>=16.0.0'} - deprecated: 'This package was intended to be used with an older versions of Prisma.\nThe newer versions of Prisma has a different approach to GraphQL integration.\nTherefore, this package is no longer needed and has been deprecated and removed.\nLearn more: https://www.prisma.io/graphql' - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/relay-operation-optimizer@6.5.18': resolution: {integrity: sha512-mc5VPyTeV+LwiM+DNvoDQfPqwQYhPV/cl5jOBjTgSniyaq8/86aODfMkrE2OduhQ5E00hqrkuL2Fdrgk0w1QJg==} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/relay-operation-optimizer@7.0.27': - resolution: {integrity: sha512-rdkL1iDMFaGDiHWd7Bwv7hbhrhnljkJaD0MXeqdwQlZVgVdUDlMot2WuF7CEKVgijpH6eSC6AxXMDeqVgSBS2g==} + '@graphql-tools/relay-operation-optimizer@7.1.2': + resolution: {integrity: sha512-n/yNuj9aQVdk1bxHvnbqQdvZ5P3Ru8L7BoDlBGK9OXr2Q44XBhFIonqaxREqAWyMme5WnE+DjUswa5H70PQbRg==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 @@ -1447,15 +1529,9 @@ packages: peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/url-loader@8.0.33': - resolution: {integrity: sha512-Fu626qcNHcqAj8uYd7QRarcJn5XZ863kmxsg1sm0fyjyfBJnsvC7ddFt6Hayz5kxVKfsnjxiDfPMXanvsQVBKw==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - - '@graphql-tools/utils@10.11.0': - resolution: {integrity: sha512-iBFR9GXIs0gCD+yc3hoNswViL1O5josI33dUqiNStFI/MHLCEPduasceAcazRH77YONKNiviHBV8f7OgcT4o2Q==} - engines: {node: '>=16.0.0'} + '@graphql-tools/url-loader@9.1.0': + resolution: {integrity: sha512-G3Ul5sLsLOJlfT4LkdQSKcHoJ+4CuSeUbRT1XjBXZSgNkeXZt2MXHJQX0X8+b4mJq7fI3thcfbiB+5sEUlnT7g==} + engines: {node: '>=20.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 @@ -1470,9 +1546,9 @@ packages: peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/wrap@10.1.4': - resolution: {integrity: sha512-7pyNKqXProRjlSdqOtrbnFRMQAVamCmEREilOXtZujxY6kYit3tvWWSjUrcIOheltTffoRh7EQSjpy2JDCzasg==} - engines: {node: '>=18.0.0'} + '@graphql-tools/wrap@11.1.13': + resolution: {integrity: sha512-oWdhddkcFy9vKjvAZiw7oH/1mrgg0uMpwdeFeFt7S/MlLiySx+Vuk7kjARktjUBl+yAMt9q1/BADnoT+5vH0hw==} + engines: {node: '>=20.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 @@ -1487,6 +1563,61 @@ packages: peerDependencies: hono: ^4 + '@iconify/types@2.0.0': + resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} + + '@iconify/utils@3.1.0': + resolution: {integrity: sha512-Zlzem1ZXhI1iHeeERabLNzBHdOa4VhQbqAcOQaMKuTuyZCpwKbC2R4Dd0Zo3g9EAc+Y4fiarO8HIHRAth7+skw==} + + '@inquirer/ansi@1.0.2': + resolution: {integrity: sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==} + engines: {node: '>=18'} + + '@inquirer/checkbox@4.3.2': + resolution: {integrity: sha512-VXukHf0RR1doGe6Sm4F0Em7SWYLTHSsbGfJdS9Ja2bX5/D5uwVOEjr07cncLROdBvmnvCATYEWlHqYmXv2IlQA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/confirm@5.1.21': + resolution: {integrity: sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/core@10.3.2': + resolution: {integrity: sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/editor@4.2.23': + resolution: {integrity: sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/expand@4.0.23': + resolution: {integrity: sha512-nRzdOyFYnpeYTTR2qFwEVmIWypzdAx/sIkCMeTNTcflFOovfqUk+HcFhQQVBftAh9gmGrpFj6QcGEqrDMDOiew==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + '@inquirer/external-editor@1.0.3': resolution: {integrity: sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==} engines: {node: '>=18'} @@ -1496,20 +1627,88 @@ packages: '@types/node': optional: true + '@inquirer/figures@1.0.15': + resolution: {integrity: sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==} + engines: {node: '>=18'} + + '@inquirer/input@4.3.1': + resolution: {integrity: sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/number@3.0.23': + resolution: {integrity: sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/password@4.0.23': + resolution: {integrity: sha512-zREJHjhT5vJBMZX/IUbyI9zVtVfOLiTO66MrF/3GFZYZ7T4YILW5MSkEYHceSii/KtRk+4i3RE7E1CUXA2jHcA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/prompts@7.10.1': + resolution: {integrity: sha512-Dx/y9bCQcXLI5ooQ5KyvA4FTgeo2jYj/7plWfV5Ak5wDPKQZgudKez2ixyfz7tKXzcJciTxqLeK7R9HItwiByg==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/rawlist@4.1.11': + resolution: {integrity: sha512-+LLQB8XGr3I5LZN/GuAHo+GpDJegQwuPARLChlMICNdwW7OwV2izlCSCxN6cqpL0sMXmbKbFcItJgdQq5EBXTw==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/search@3.2.2': + resolution: {integrity: sha512-p2bvRfENXCZdWF/U2BXvnSI9h+tuA8iNqtUKb9UWbmLYCRQxd8WkvwWvYn+3NgYaNwdUkHytJMGG4MMLucI1kA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/select@4.4.2': + resolution: {integrity: sha512-l4xMuJo55MAe+N7Qr4rX90vypFwCajSakx59qe/tMaC1aEHWLyw68wF4o0A4SLAY4E0nd+Vt+EyskeDIqu1M6w==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/type@3.0.10': + resolution: {integrity: sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + '@internationalized/date@3.11.0': resolution: {integrity: sha512-BOx5huLAWhicM9/ZFs84CzP+V3gBW6vlpM02yzsdYC7TGlZJX1OJiEEHcSayF00Z+3jLlm4w79amvSt6RqKN3Q==} '@internationalized/number@3.6.5': resolution: {integrity: sha512-6hY4Kl4HPBvtfS62asS/R22JzNNy8vi/Ssev7x6EobfCp+9QIB2hKvI2EtbdJ0VSQacxVNtqhE/NmF/NZ0gm6g==} - '@isaacs/cliui@8.0.2': - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} - - '@istanbuljs/schema@0.1.3': - resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} - engines: {node: '>=8'} - '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -1564,6 +1763,9 @@ packages: peerDependencies: rollup: '>=2' + '@mermaid-js/parser@1.1.0': + resolution: {integrity: sha512-gxK9ZX2+Fex5zu8LhRQoMeMPEHbc73UKZ0FQ54YrQtUxE1VVhMwzeNtKRPAu5aXks4FasbMe4xB4bWrmq6Jlxw==} + '@metamask/eth-json-rpc-provider@1.0.1': resolution: {integrity: sha512-whiUMPlAOrVGmX8aKYVPvlKyG4CpQXiNNyt74vE1xb5sPvmx5oA7B/kOi/JdBvhGQq97U1/AVdXEdk2zkP8qyA==} engines: {node: '>=14.0.0'} @@ -1679,6 +1881,12 @@ packages: '@mysten/wallet-standard@0.19.9': resolution: {integrity: sha512-jHFt+62os7x7y+4ZVMLck8WSanEO9b8deCD+VApUQkdAHA99TuxbREaujQTjnGQN5DaGEz8wQgeBPqxRY/vKQA==} + '@napi-rs/wasm-runtime@1.1.2': + resolution: {integrity: sha512-sNXv5oLJ7ob93xkZ1XnxisYhGYXfaG9f65/ZgYuAu3qt7b3NadcOEhLvx28hv31PgX8SZJRYrAIPQilQmFpLVw==} + peerDependencies: + '@emnapi/core': ^1.7.1 + '@emnapi/runtime': ^1.7.1 + '@noble/ciphers@1.2.1': resolution: {integrity: sha512-rONPWMC7PeExE077uLE4oqWrZ1IvAfz3oH9LibVAcVCopJiA9R62uavnbEzdkVmJYI6M6Zgkbeb07+tWjlq2XA==} engines: {node: ^14.21.3 || >=16} @@ -1738,6 +1946,9 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@oxc-project/types@0.122.0': + resolution: {integrity: sha512-oLAl5kBpV4w69UtFZ9xqcmTi+GENWOcPF7FCrczTiBbmC0ibXxCwyvZGbO39rCVEuLGAZM84DH0pUIyyv/YJzA==} + '@pandacss/is-valid-prop@1.8.2': resolution: {integrity: sha512-wfZ4kzvHXQ9pG3wuIGTUCcbC7Op8pqIQZNIRY/bqWQu67WTHxZUHUPSZgQMhguI8Tz4ot+DNf4Qhha0bhLvNEQ==} @@ -1836,10 +2047,6 @@ packages: '@phosphor-icons/webcomponents@2.1.5': resolution: {integrity: sha512-JcvQkZxvcX2jK+QCclm8+e8HXqtdFW9xV4/kk2aL9Y3dJA2oQVt+pzbv1orkumz3rfx4K9mn9fDoMr1He1yr7Q==} - '@pkgjs/parseargs@0.11.0': - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} - '@protobuf-ts/grpcweb-transport@2.11.1': resolution: {integrity: sha512-1W4utDdvOB+RHMFQ0soL4JdnxjXV+ddeGIUg08DvZrA8Ms6k5NN6GBFU2oHZdTOcJVpPrDJ02RJlqtaoCMNBtw==} @@ -2660,8 +2867,109 @@ packages: '@repeaterjs/repeater@3.0.6': resolution: {integrity: sha512-Javneu5lsuhwNCryN+pXH93VPQ8g0dBX7wItHFgYiwQmzE1sVdg5tWHiOgHywzL2W21XQopa7IwIEnNbmeUJYA==} - '@rolldown/pluginutils@1.0.0-beta.27': - resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==} + '@rolldown/binding-android-arm64@1.0.0-rc.12': + resolution: {integrity: sha512-pv1y2Fv0JybcykuiiD3qBOBdz6RteYojRFY1d+b95WVuzx211CRh+ytI/+9iVyWQ6koTh5dawe4S/yRfOFjgaA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@rolldown/binding-darwin-arm64@1.0.0-rc.12': + resolution: {integrity: sha512-cFYr6zTG/3PXXF3pUO+umXxt1wkRK/0AYT8lDwuqvRC+LuKYWSAQAQZjCWDQpAH172ZV6ieYrNnFzVVcnSflAg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@rolldown/binding-darwin-x64@1.0.0-rc.12': + resolution: {integrity: sha512-ZCsYknnHzeXYps0lGBz8JrF37GpE9bFVefrlmDrAQhOEi4IOIlcoU1+FwHEtyXGx2VkYAvhu7dyBf75EJQffBw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@rolldown/binding-freebsd-x64@1.0.0-rc.12': + resolution: {integrity: sha512-dMLeprcVsyJsKolRXyoTH3NL6qtsT0Y2xeuEA8WQJquWFXkEC4bcu1rLZZSnZRMtAqwtrF/Ib9Ddtpa/Gkge9Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.12': + resolution: {integrity: sha512-YqWjAgGC/9M1lz3GR1r1rP79nMgo3mQiiA+Hfo+pvKFK1fAJ1bCi0ZQVh8noOqNacuY1qIcfyVfP6HoyBRZ85Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.12': + resolution: {integrity: sha512-/I5AS4cIroLpslsmzXfwbe5OmWvSsrFuEw3mwvbQ1kDxJ822hFHIx+vsN/TAzNVyepI/j/GSzrtCIwQPeKCLIg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.12': + resolution: {integrity: sha512-V6/wZztnBqlx5hJQqNWwFdxIKN0m38p8Jas+VoSfgH54HSj9tKTt1dZvG6JRHcjh6D7TvrJPWFGaY9UBVOaWPw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.12': + resolution: {integrity: sha512-AP3E9BpcUYliZCxa3w5Kwj9OtEVDYK6sVoUzy4vTOJsjPOgdaJZKFmN4oOlX0Wp0RPV2ETfmIra9x1xuayFB7g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.12': + resolution: {integrity: sha512-nWwpvUSPkoFmZo0kQazZYOrT7J5DGOJ/+QHHzjvNlooDZED8oH82Yg67HvehPPLAg5fUff7TfWFHQS8IV1n3og==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.12': + resolution: {integrity: sha512-RNrafz5bcwRy+O9e6P8Z/OCAJW/A+qtBczIqVYwTs14pf4iV1/+eKEjdOUta93q2TsT/FI0XYDP3TCky38LMAg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-musl@1.0.0-rc.12': + resolution: {integrity: sha512-Jpw/0iwoKWx3LJ2rc1yjFrj+T7iHZn2JDg1Yny1ma0luviFS4mhAIcd1LFNxK3EYu3DHWCps0ydXQ5i/rrJ2ig==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rolldown/binding-openharmony-arm64@1.0.0-rc.12': + resolution: {integrity: sha512-vRugONE4yMfVn0+7lUKdKvN4D5YusEiPilaoO2sgUWpCvrncvWgPMzK00ZFFJuiPgLwgFNP5eSiUlv2tfc+lpA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@rolldown/binding-wasm32-wasi@1.0.0-rc.12': + resolution: {integrity: sha512-ykGiLr/6kkiHc0XnBfmFJuCjr5ZYKKofkx+chJWDjitX+KsJuAmrzWhwyOMSHzPhzOHOy7u9HlFoa5MoAOJ/Zg==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.12': + resolution: {integrity: sha512-5eOND4duWkwx1AzCxadcOrNeighiLwMInEADT0YM7xeEOOFcovWZCq8dadXgcRHSf3Ulh1kFo/qvzoFiCLOL1Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.12': + resolution: {integrity: sha512-PyqoipaswDLAZtot351MLhrlrh6lcZPo2LSYE+VDxbVk24LVKAGOuE4hb8xZQmrPAuEtTZW8E6D2zc5EUZX4Lw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@rolldown/pluginutils@1.0.0-rc.12': + resolution: {integrity: sha512-HHMwmarRKvoFsJorqYlFeFRzXZqCt2ETQlEDOb9aqssrnVBB1/+xgTGtuTrIk5vzLNX1MjMtTf7W9z3tsSbrxw==} + + '@rolldown/pluginutils@1.0.0-rc.3': + resolution: {integrity: sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==} + + '@rolldown/pluginutils@1.0.0-rc.7': + resolution: {integrity: sha512-qujRfC8sFVInYSPPMLQByRh7zhwkGFS4+tyMQ83srV1qrxL4g8E2tyxVVyxd0+8QeBM1mIk9KbWxkegRr76XzA==} '@rollup/pluginutils@5.3.0': resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} @@ -2853,14 +3161,14 @@ packages: '@shikijs/engine-oniguruma@1.29.2': resolution: {integrity: sha512-7iiOx3SG8+g1MnlzZVDYiaeHe7Ez2Kf2HrJzdmGwkRisT7r4rak0e655AcM/tF9JG/kg5fMNYlLLKglbN7gBqA==} - '@shikijs/engine-oniguruma@3.22.0': - resolution: {integrity: sha512-DyXsOG0vGtNtl7ygvabHd7Mt5EY8gCNqR9Y7Lpbbd/PbJvgWrqaKzH1JW6H6qFkuUa8aCxoiYVv8/YfFljiQxA==} + '@shikijs/engine-oniguruma@3.23.0': + resolution: {integrity: sha512-1nWINwKXxKKLqPibT5f4pAFLej9oZzQTsby8942OTlsJzOBZ0MWKiwzMsd+jhzu8YPCHAswGnnN1YtQfirL35g==} '@shikijs/langs@1.29.2': resolution: {integrity: sha512-FIBA7N3LZ+223U7cJDUYd5shmciFQlYkFXlkKVaHsCPgfVLiO+e12FmQE6Tf9vuyEsFe3dIl8qGWKXgEHL9wmQ==} - '@shikijs/langs@3.22.0': - resolution: {integrity: sha512-x/42TfhWmp6H00T6uwVrdTJGKgNdFbrEdhaDwSR5fd5zhQ1Q46bHq9EO61SCEWJR0HY7z2HNDMaBZp8JRmKiIA==} + '@shikijs/langs@3.23.0': + resolution: {integrity: sha512-2Ep4W3Re5aB1/62RSYQInK9mM3HsLeB91cHqznAJMuylqjzNVAVCMnNWRHFtcNHXsoNRayP9z1qj4Sq3nMqYXg==} '@shikijs/rehype@1.29.2': resolution: {integrity: sha512-sxi53HZe5XDz0s2UqF+BVN/kgHPMS9l6dcacM4Ra3ZDzCJa5rDGJ+Ukpk4LxdD1+MITBM6hoLbPfGv9StV8a5Q==} @@ -2868,8 +3176,8 @@ packages: '@shikijs/themes@1.29.2': resolution: {integrity: sha512-i9TNZlsq4uoyqSbluIcZkmPL9Bfi3djVxRnofUHwvx/h6SRW3cwgBC5SML7vsDcWyukY0eCzVN980rqP6qNl9g==} - '@shikijs/themes@3.22.0': - resolution: {integrity: sha512-o+tlOKqsr6FE4+mYJG08tfCFDS+3CG20HbldXeVoyP+cYSUxDhrFf3GPjE60U55iOkkjbpY2uC3It/eeja35/g==} + '@shikijs/themes@3.23.0': + resolution: {integrity: sha512-5qySYa1ZgAT18HR/ypENL9cUSGOeI2x+4IvYJu4JgVJdizn6kG4ia5Q1jDEOi7gTbN4RbuYtmHh0W3eccOrjMA==} '@shikijs/transformers@1.29.2': resolution: {integrity: sha512-NHQuA+gM7zGuxGWP9/Ub4vpbwrYCrho9nQCLcCPfOe3Yc7LOYwmSuhElI688oiqIXk9dlZwDiyAG9vPBTuPJMA==} @@ -2880,14 +3188,18 @@ packages: '@shikijs/types@1.29.2': resolution: {integrity: sha512-VJjK0eIijTZf0QSTODEXCqinjBn0joAHQ+aPSBzrv4O2d/QSbsMw+ZeSRx03kV34Hy7NzUvV/7NqfYGRLrASmw==} - '@shikijs/types@3.22.0': - resolution: {integrity: sha512-491iAekgKDBFE67z70Ok5a8KBMsQ2IJwOWw3us/7ffQkIBCyOQfm/aNwVMBUriP02QshIfgHCBSIYAl3u2eWjg==} + '@shikijs/types@3.23.0': + resolution: {integrity: sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ==} '@shikijs/vscode-textmate@10.0.2': resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} - '@sindresorhus/merge-streams@2.3.0': - resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} + '@simple-libs/child-process-utils@1.0.2': + resolution: {integrity: sha512-/4R8QKnd/8agJynkNdJmNw2MBxuFTRcNFnE5Sg/G+jkSsV8/UBgULMzhizWWW42p8L5H7flImV2ATi79Ove2Tw==} + engines: {node: '>=18'} + + '@simple-libs/stream-utils@1.2.0': + resolution: {integrity: sha512-KxXvfapcixpz6rVEB6HPjOUZT22yN6v0vI0urQSk1L8MlEWPDFCZkhw2xmkyoTGYeFw7tWTZd7e3lVzRZRN/EA==} engines: {node: '>=18'} '@socket.io/component-emitter@3.1.2': @@ -3294,6 +3606,12 @@ packages: '@solana/web3.js@1.98.4': resolution: {integrity: sha512-vv9lfnvjUsRiq//+j5pBdXig0IQdtzA0BRZ3bXEP4KaIyF1CcaydWqgyzQgfZMNIsWNWmG+AUHwPy4AHOD6gpw==} + '@standard-schema/spec@1.0.0': + resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} + + '@standard-schema/spec@1.1.0': + resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + '@swc/core-darwin-arm64@1.15.13': resolution: {integrity: sha512-ztXusRuC5NV2w+a6pDhX13CGioMLq8CjX5P4XgVJ21ocqz9t19288Do0y8LklplDtwcEhYGTNdMbkmUT7+lDTg==} engines: {node: '>=10'} @@ -3393,106 +3711,118 @@ packages: zod: optional: true - '@tailwindcss/node@4.0.7': - resolution: {integrity: sha512-dkFXufkbRB2mu3FPsW5xLAUWJyexpJA+/VtQj18k3SUiJVLdpgzBd1v1gRRcIpEJj7K5KpxBKfOXlZxT3ZZRuA==} + '@tailwindcss/node@4.1.15': + resolution: {integrity: sha512-HF4+7QxATZWY3Jr8OlZrBSXmwT3Watj0OogeDvdUY/ByXJHQ+LBtqA2brDb3sBxYslIFx6UP94BJ4X6a4L9Bmw==} - '@tailwindcss/oxide-android-arm64@4.0.7': - resolution: {integrity: sha512-5iQXXcAeOHBZy8ASfHFm1k0O/9wR2E3tKh6+P+ilZZbQiMgu+qrnfpBWYPc3FPuQdWiWb73069WT5D+CAfx/tg==} + '@tailwindcss/oxide-android-arm64@4.1.15': + resolution: {integrity: sha512-TkUkUgAw8At4cBjCeVCRMc/guVLKOU1D+sBPrHt5uVcGhlbVKxrCaCW9OKUIBv1oWkjh4GbunD/u/Mf0ql6kEA==} engines: {node: '>= 10'} cpu: [arm64] os: [android] - '@tailwindcss/oxide-darwin-arm64@4.0.7': - resolution: {integrity: sha512-7yGZtEc5IgVYylqK/2B0yVqoofk4UAbkn1ygNpIJZyrOhbymsfr8uUFCueTu2fUxmAYIfMZ8waWo2dLg/NgLgg==} + '@tailwindcss/oxide-darwin-arm64@4.1.15': + resolution: {integrity: sha512-xt5XEJpn2piMSfvd1UFN6jrWXyaKCwikP4Pidcf+yfHTSzSpYhG3dcMktjNkQO3JiLCp+0bG0HoWGvz97K162w==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@tailwindcss/oxide-darwin-x64@4.0.7': - resolution: {integrity: sha512-tPQDV20fBjb26yWbPqT1ZSoDChomMCiXTKn4jupMSoMCFyU7+OJvIY1ryjqBuY622dEBJ8LnCDDWsnj1lX9nNQ==} + '@tailwindcss/oxide-darwin-x64@4.1.15': + resolution: {integrity: sha512-TnWaxP6Bx2CojZEXAV2M01Yl13nYPpp0EtGpUrY+LMciKfIXiLL2r/SiSRpagE5Fp2gX+rflp/Os1VJDAyqymg==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@tailwindcss/oxide-freebsd-x64@4.0.7': - resolution: {integrity: sha512-sZqJpTyTZiknU9LLHuByg5GKTW+u3FqM7q7myequAXxKOpAFiOfXpY710FuMY+gjzSapyRbDXJlsTQtCyiTo5w==} + '@tailwindcss/oxide-freebsd-x64@4.1.15': + resolution: {integrity: sha512-quISQDWqiB6Cqhjc3iWptXVZHNVENsWoI77L1qgGEHNIdLDLFnw3/AfY7DidAiiCIkGX/MjIdB3bbBZR/G2aJg==} engines: {node: '>= 10'} cpu: [x64] os: [freebsd] - '@tailwindcss/oxide-linux-arm-gnueabihf@4.0.7': - resolution: {integrity: sha512-PBgvULgeSswjd8cbZ91gdIcIDMdc3TUHV5XemEpxlqt9M8KoydJzkuB/Dt910jYdofOIaTWRL6adG9nJICvU4A==} + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.15': + resolution: {integrity: sha512-ObG76+vPlab65xzVUQbExmDU9FIeYLQ5k2LrQdR2Ud6hboR+ZobXpDoKEYXf/uOezOfIYmy2Ta3w0ejkTg9yxg==} engines: {node: '>= 10'} cpu: [arm] os: [linux] - '@tailwindcss/oxide-linux-arm64-gnu@4.0.7': - resolution: {integrity: sha512-By/a2yeh+e9b+C67F88ndSwVJl2A3tcUDb29FbedDi+DZ4Mr07Oqw9Y1DrDrtHIDhIZ3bmmiL1dkH2YxrtV+zw==} + '@tailwindcss/oxide-linux-arm64-gnu@4.1.15': + resolution: {integrity: sha512-4WbBacRmk43pkb8/xts3wnOZMDKsPFyEH/oisCm2q3aLZND25ufvJKcDUpAu0cS+CBOL05dYa8D4U5OWECuH/Q==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] libc: [glibc] - '@tailwindcss/oxide-linux-arm64-musl@4.0.7': - resolution: {integrity: sha512-WHYs3cpPEJb/ccyT20NOzopYQkl7JKncNBUbb77YFlwlXMVJLLV3nrXQKhr7DmZxz2ZXqjyUwsj2rdzd9stYdw==} + '@tailwindcss/oxide-linux-arm64-musl@4.1.15': + resolution: {integrity: sha512-AbvmEiteEj1nf42nE8skdHv73NoR+EwXVSgPY6l39X12Ex8pzOwwfi3Kc8GAmjsnsaDEbk+aj9NyL3UeyHcTLg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] libc: [musl] - '@tailwindcss/oxide-linux-x64-gnu@4.0.7': - resolution: {integrity: sha512-7bP1UyuX9kFxbOwkeIJhBZNevKYPXB6xZI37v09fqi6rqRJR8elybwjMUHm54GVP+UTtJ14ueB1K54Dy1tIO6w==} + '@tailwindcss/oxide-linux-x64-gnu@4.1.15': + resolution: {integrity: sha512-+rzMVlvVgrXtFiS+ES78yWgKqpThgV19ISKD58Ck+YO5pO5KjyxLt7AWKsWMbY0R9yBDC82w6QVGz837AKQcHg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] libc: [glibc] - '@tailwindcss/oxide-linux-x64-musl@4.0.7': - resolution: {integrity: sha512-gBQIV8nL/LuhARNGeroqzXymMzzW5wQzqlteVqOVoqwEfpHOP3GMird5pGFbnpY+NP0fOlsZGrxxOPQ4W/84bQ==} + '@tailwindcss/oxide-linux-x64-musl@4.1.15': + resolution: {integrity: sha512-fPdEy7a8eQN9qOIK3Em9D3TO1z41JScJn8yxl/76mp4sAXFDfV4YXxsiptJcOwy6bGR+70ZSwFIZhTXzQeqwQg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] libc: [musl] - '@tailwindcss/oxide-win32-arm64-msvc@4.0.7': - resolution: {integrity: sha512-aH530NFfx0kpQpvYMfWoeG03zGnRCMVlQG8do/5XeahYydz+6SIBxA1tl/cyITSJyWZHyVt6GVNkXeAD30v0Xg==} + '@tailwindcss/oxide-wasm32-wasi@4.1.15': + resolution: {integrity: sha512-sJ4yd6iXXdlgIMfIBXuVGp/NvmviEoMVWMOAGxtxhzLPp9LOj5k0pMEMZdjeMCl4C6Up+RM8T3Zgk+BMQ0bGcQ==} + 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.15': + resolution: {integrity: sha512-sJGE5faXnNQ1iXeqmRin7Ds/ru2fgCiaQZQQz3ZGIDtvbkeV85rAZ0QJFMDg0FrqsffZG96H1U9AQlNBRLsHVg==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@tailwindcss/oxide-win32-x64-msvc@4.0.7': - resolution: {integrity: sha512-8Cva6bbJN7ZJx320k7vxGGdU0ewmpfS5A4PudyzUuofdi8MgeINuiiWiPQ0VZCda/GX88K6qp+6UpDZNVr8HMQ==} + '@tailwindcss/oxide-win32-x64-msvc@4.1.15': + resolution: {integrity: sha512-NLeHE7jUV6HcFKS504bpOohyi01zPXi2PXmjFfkzTph8xRxDdxkRsXm/xDO5uV5K3brrE1cCwbUYmFUSHR3u1w==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@tailwindcss/oxide@4.0.7': - resolution: {integrity: sha512-yr6w5YMgjy+B+zkJiJtIYGXW+HNYOPfRPtSs+aqLnKwdEzNrGv4ZuJh9hYJ3mcA+HMq/K1rtFV+KsEr65S558g==} + '@tailwindcss/oxide@4.1.15': + resolution: {integrity: sha512-krhX+UOOgnsUuks2SR7hFafXmLQrKxB4YyRTERuCE59JlYL+FawgaAlSkOYmDRJdf1Q+IFNDMl9iRnBW7QBDfQ==} engines: {node: '>= 10'} - '@tailwindcss/vite@4.0.7': - resolution: {integrity: sha512-GYx5sxArfIMtdZCsxfya3S/efMmf4RvfqdiLUozkhmSFBNUFnYVodatpoO/en4/BsOIGvq/RB6HwcTLn9prFnQ==} + '@tailwindcss/vite@4.1.15': + resolution: {integrity: sha512-B6s60MZRTUil+xKoZoGe6i0Iar5VuW+pmcGlda2FX+guDuQ1G1sjiIy1W0frneVpeL/ZjZ4KEgWZHNrIm++2qA==} peerDependencies: - vite: ^5.2.0 || ^6 + vite: ^5.2.0 || ^6 || ^7 '@tanstack/history@1.161.6': resolution: {integrity: sha512-NaOGLRrddszbQj9upGat6HG/4TKvXLvu+osAIgfxPYA+eIvYKv8GKDJOrY2D3/U9MRnKfMWD7bU4jeD4xmqyIg==} engines: {node: '>=20.19'} - '@tanstack/query-core@5.95.2': - resolution: {integrity: sha512-o4T8vZHZET4Bib3jZ/tCW9/7080urD4c+0/AUaYVpIqOsr7y0reBc1oX3ttNaSW5mYyvZHctiQ/UOP2PfdmFEQ==} + '@tanstack/query-core@5.96.1': + resolution: {integrity: sha512-u1yBgtavSy+N8wgtW3PiER6UpxcplMje65yXnnVgiHTqiMwLlxiw4WvQDrXyn+UD6lnn8kHaxmerJUzQcV/MMg==} - '@tanstack/query-devtools@5.95.2': - resolution: {integrity: sha512-QfaoqBn9uAZ+ICkA8brd1EHj+qBF6glCFgt94U8XP5BT6ppSsDBI8IJ00BU+cAGjQzp6wcKJL2EmRYvxy0TWIg==} + '@tanstack/query-devtools@5.96.1': + resolution: {integrity: sha512-A4+uQTWbiqZDgrLeyjpFYLfMaWaKWpkwTkR1cUfocVj6vPYgym7QTG2se9A01WSxceDdmgxOqvn1ivcTvgWD8w==} - '@tanstack/react-query-devtools@5.95.2': - resolution: {integrity: sha512-AFQFmbznVkbtfpx8VJ2DylW17wWagQel/qLstVLkYmNRo2CmJt3SNej5hvl6EnEeljJIdC3BTB+W7HZtpsH+3g==} + '@tanstack/react-query-devtools@5.96.1': + resolution: {integrity: sha512-3ZZ58fupIXtJFM0evj8YvWrauaZPUrQEqRYaq9e4ER/WPqTKeWEucqWCXn+KJLgWlcot5JIIUtQNynbovGjTTA==} peerDependencies: - '@tanstack/react-query': ^5.95.2 + '@tanstack/react-query': ^5.96.1 react: ^18 || ^19 - '@tanstack/react-query@5.95.2': - resolution: {integrity: sha512-/wGkvLj/st5Ud1Q76KF1uFxScV7WeqN1slQx5280ycwAyYkIPGaRZAEgHxe3bjirSd5Zpwkj6zNcR4cqYni/ZA==} + '@tanstack/react-query@5.96.1': + resolution: {integrity: sha512-2X7KYK5KKWUKGeWCVcqxXAkYefJtrKB7tSKWgeG++b0H6BRHxQaLSSi8AxcgjmUnnosHuh9WsFZqvE16P1WCzA==} peerDependencies: react: ^18 || ^19 @@ -3508,15 +3838,15 @@ packages: '@tanstack/router-core': optional: true - '@tanstack/react-router@1.168.3': - resolution: {integrity: sha512-hMWXhckeaSvjepHT5x9tUYJVXMvT/kUjaVHOUDmCfyOBtjxJNYJKbEWClXoopGwWlHjRTAzhsndhnQQRbIiKmA==} + '@tanstack/react-router@1.168.10': + resolution: {integrity: sha512-/RmDlOwDkCug609KdPB3U+U1zmrtadJpvsmRg2zEn8TRCKRNri7dYZIjQZbNg8PgUiRL4T6njrZBV1ChzblNaA==} engines: {node: '>=20.19'} peerDependencies: react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' - '@tanstack/react-store@0.9.2': - resolution: {integrity: sha512-Vt5usJE5sHG/cMechQfmwvwne6ktGCELe89Lmvoxe3LKRoFrhPa8OCKWs0NliG8HTJElEIj7PLtaBQIcux5pAQ==} + '@tanstack/react-store@0.9.3': + resolution: {integrity: sha512-y2iHd/N9OkoQbFJLUX1T9vbc2O9tjH0pQRgTcx1/Nz4IlwLvkgpuglXUx+mXt0g5ZDFrEeDnONPqkbfxXJKwRg==} 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 @@ -3527,13 +3857,13 @@ packages: 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-cli@1.166.18': - resolution: {integrity: sha512-NR48iTLMuNm53SUWBBEQyE0TG3zAoqalPbcmVyQ9NOrzcXW/E7QLo96/8TYF4hiAu/x51e+z2fZ5wYl8XcGB7w==} + '@tanstack/router-cli@1.166.25': + resolution: {integrity: sha512-COkW3lKmVw2lDgw75zEmHzE1FaWMoHJQfuCGrAUrNnpkPIXwVQgIP0O3+COToELxbegPktXozEpYnGD0m9YoVg==} engines: {node: '>=20.19'} hasBin: true - '@tanstack/router-core@1.168.3': - resolution: {integrity: sha512-qcjArls3v12UQQkEpU0+todc0/MCyrEZeXxhtgZZ0e5gxZDG25BUe/HlNcIjzyb7NZaw0TQAUBXbTClmFaHZiw==} + '@tanstack/router-core@1.168.9': + resolution: {integrity: sha512-18oeEwEDyXOIuO1VBP9ACaK7tYHZUjynGDCoUh/5c/BNhia9vCJCp9O0LfhZXOorDc/PmLSgvmweFhVmIxF10g==} engines: {node: '>=20.19'} hasBin: true @@ -3547,29 +3877,17 @@ packages: csstype: optional: true - '@tanstack/router-devtools@1.166.11': - resolution: {integrity: sha512-jvFKr1fQ5pWMOZTILhitJc1kJt1wj8qqtRClVJvyD1AjHc1XINihkqK+R6+FmC8F2m+XOhKME4CSnTtJ6Nf34w==} - engines: {node: '>=20.19'} - peerDependencies: - '@tanstack/react-router': ^1.168.2 - csstype: ^3.0.10 - react: '>=18.0.0 || >=19.0.0' - react-dom: '>=18.0.0 || >=19.0.0' - peerDependenciesMeta: - csstype: - optional: true - - '@tanstack/router-generator@1.166.17': - resolution: {integrity: sha512-sBs6lyvA+B51hpUWYLx0KdaAIO/m9Ml2bsAdfVYyvs5DZXiAZZEbVD0myndyIkWaPR5x+kzuBakkrgTxJ9/m9Q==} + '@tanstack/router-generator@1.166.24': + resolution: {integrity: sha512-vdaGKwuH+r+DPe6R1mjk+TDDmDH6NTG7QqwxHqGEvOH4aGf9sPjhmRKNJZqQr8cPIbfp6u5lXyZ1TeDcSNMVEA==} engines: {node: '>=20.19'} - '@tanstack/router-plugin@1.167.4': - resolution: {integrity: sha512-VChByI+CHdHMW350E6winbgqdX4tzmZIHovys8vXidRZkxGAhlygj/zhbnepF/TGX88rubj+SXDwSHY25qEcpQ==} + '@tanstack/router-plugin@1.167.12': + resolution: {integrity: sha512-StEHcctCuFI5taSjO+lhR/yQ+EK63BdyYa+ne6FoNQPB3MMrOUrz2ZVnbqILRLkh2b+p2EfBKt65sgAKdKygPQ==} engines: {node: '>=20.19'} hasBin: true peerDependencies: '@rsbuild/core': '>=1.0.2' - '@tanstack/react-router': ^1.168.3 + '@tanstack/react-router': ^1.168.10 vite: '>=5.0.0 || >=6.0.0 || >=7.0.0' vite-plugin-solid: ^2.11.10 webpack: '>=5.92.0' @@ -3589,8 +3907,8 @@ packages: resolution: {integrity: sha512-nRcYw+w2OEgK6VfjirYvGyPLOK+tZQz1jkYcmH5AjMamQ9PycnlxZF2aEZtPpNoUsaceX2bHptn6Ub5hGXqNvw==} engines: {node: '>=20.19'} - '@tanstack/store@0.9.2': - resolution: {integrity: sha512-K013lUJEFJK2ofFQ/hZKJUmCnpcV00ebLyOyFOWQvyQHUOZp/iYO84BM6aOGiV81JzwbX0APTVmW8YI7yiG5oA==} + '@tanstack/store@0.9.3': + resolution: {integrity: sha512-8reSzl/qGWGGVKhBoxXPMWzATSbZLZFWhwBAFO9NAyp0TxzfBP0mIrGb8CP8KrQTmvzXlR/vFPPUrHTLBGyFyw==} '@tanstack/virtual-core@3.13.23': resolution: {integrity: sha512-zSz2Z2HNyLjCplANTDyl3BcdQJc2k1+yyFoKhNRmCr7V7dY8o8q5m8uFTI1/Pg1kL+Hgrz6u3Xo6eFUB7l66cg==} @@ -3629,12 +3947,6 @@ packages: peerDependencies: '@testing-library/dom': '>=7.21.4' - '@theguild/federation-composition@0.21.3': - resolution: {integrity: sha512-+LlHTa4UbRpZBog3ggAxjYIFvdfH3UMvvBUptur19TMWkqU4+n3GmN+mDjejU+dyBXIG27c25RsiQP1HyvM99g==} - engines: {node: '>=18'} - peerDependencies: - graphql: ^16.0.0 - '@tsconfig/node10@1.0.12': resolution: {integrity: sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==} @@ -3647,6 +3959,9 @@ packages: '@tsconfig/node16@1.0.4': resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + '@tybys/wasm-util@0.10.1': + resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} + '@types/aria-query@5.0.4': resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} @@ -3668,8 +3983,98 @@ packages: '@types/connect@3.4.38': resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} - '@types/conventional-commits-parser@5.0.2': - resolution: {integrity: sha512-BgT2szDXnVypgpNxOK8aL5SGjUdaQbC++WZNjF1Qge3Og2+zhHj+RWhmehLhYyvQwqAmvezruVfOf8+3m74W+g==} + '@types/d3-array@3.2.2': + resolution: {integrity: sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==} + + '@types/d3-axis@3.0.6': + resolution: {integrity: sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==} + + '@types/d3-brush@3.0.6': + resolution: {integrity: sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==} + + '@types/d3-chord@3.0.6': + resolution: {integrity: sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==} + + '@types/d3-color@3.1.3': + resolution: {integrity: sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==} + + '@types/d3-contour@3.0.6': + resolution: {integrity: sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==} + + '@types/d3-delaunay@6.0.4': + resolution: {integrity: sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==} + + '@types/d3-dispatch@3.0.7': + resolution: {integrity: sha512-5o9OIAdKkhN1QItV2oqaE5KMIiXAvDWBDPrD85e58Qlz1c1kI/J0NcqbEG88CoTwJrYe7ntUCVfeUl2UJKbWgA==} + + '@types/d3-drag@3.0.7': + resolution: {integrity: sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==} + + '@types/d3-dsv@3.0.7': + resolution: {integrity: sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==} + + '@types/d3-ease@3.0.2': + resolution: {integrity: sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==} + + '@types/d3-fetch@3.0.7': + resolution: {integrity: sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==} + + '@types/d3-force@3.0.10': + resolution: {integrity: sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==} + + '@types/d3-format@3.0.4': + resolution: {integrity: sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==} + + '@types/d3-geo@3.1.0': + resolution: {integrity: sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==} + + '@types/d3-hierarchy@3.1.7': + resolution: {integrity: sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==} + + '@types/d3-interpolate@3.0.4': + resolution: {integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==} + + '@types/d3-path@3.1.1': + resolution: {integrity: sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==} + + '@types/d3-polygon@3.0.2': + resolution: {integrity: sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==} + + '@types/d3-quadtree@3.0.6': + resolution: {integrity: sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==} + + '@types/d3-random@3.0.3': + resolution: {integrity: sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==} + + '@types/d3-scale-chromatic@3.1.0': + resolution: {integrity: sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==} + + '@types/d3-scale@4.0.9': + resolution: {integrity: sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==} + + '@types/d3-selection@3.0.11': + resolution: {integrity: sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==} + + '@types/d3-shape@3.1.8': + resolution: {integrity: sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w==} + + '@types/d3-time-format@4.0.3': + resolution: {integrity: sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==} + + '@types/d3-time@3.0.4': + resolution: {integrity: sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==} + + '@types/d3-timer@3.0.2': + resolution: {integrity: sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==} + + '@types/d3-transition@3.0.9': + resolution: {integrity: sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==} + + '@types/d3-zoom@3.0.8': + resolution: {integrity: sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==} + + '@types/d3@7.4.3': + resolution: {integrity: sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==} '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} @@ -3686,12 +4091,12 @@ packages: '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@types/geojson@7946.0.16': + resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==} + '@types/hast@3.0.4': resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} - '@types/js-yaml@4.0.9': - resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} - '@types/lodash@4.17.24': resolution: {integrity: sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==} @@ -3747,8 +4152,11 @@ packages: '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} - '@uniswap/default-token-list@13.47.0': - resolution: {integrity: sha512-1ZxEAmSUejJGggU0F70/7QHqhQNuE7EFtJIccB/Gs4cOBQGIwCfNBfeDXvw+koGPhXeaBpQRmvMpD5wldjWpXw==} + '@uniswap/default-token-list@18.13.0': + resolution: {integrity: sha512-dtvHgX2RxD3cqqiiJexNrisvn7GCEwS2l6YJSFOTrmnQn+EtpznLuXeKZRpvTu8YhtUyboNJhBw7ZzS9KpRQwg==} + + '@upsetjs/venn.js@2.0.0': + resolution: {integrity: sha512-WbBhLrooyePuQ1VZxrJjtLvTc4NVfpOyKx0sKqioq9bX1C1m7Jgykkn8gLrtwumBioXIqam8DLxp88Adbue6Hw==} '@vanilla-extract/babel-plugin-debug-ids@1.2.2': resolution: {integrity: sha512-MeDWGICAF9zA/OZLOKwhoRlsUW+fiMwnfuOAqFVohL31Agj7Q/RBWAYweqjHLgFBCsdnr6XIfwjJnmb2znEWxw==} @@ -3784,12 +4192,13 @@ packages: peerDependencies: vite: ^5.0.0 || ^6.0.0 || ^7.0.0 - '@vercel/analytics@1.6.1': - resolution: {integrity: sha512-oH9He/bEM+6oKlv3chWuOOcp8Y6fo6/PSro8hEkgCW3pu9/OiCXiUpRUogDh3Fs3LH2sosDrx8CxeOLBEE+afg==} + '@vercel/analytics@2.0.1': + resolution: {integrity: sha512-MTQG6V9qQrt1tsDeF+2Uoo5aPjqbVPys1xvnIftXSJYG2SrwXRHnqEvVoYID7BTruDz4lCd2Z7rM1BdkUehk2g==} peerDependencies: '@remix-run/react': ^2 '@sveltejs/kit': ^1 || ^2 next: '>= 13' + nuxt: '>= 3' react: ^18 || ^19 || ^19.0.0-rc svelte: '>= 4' vue: ^3 @@ -3801,6 +4210,8 @@ packages: optional: true next: optional: true + nuxt: + optional: true react: optional: true svelte: @@ -3810,54 +4221,62 @@ packages: vue-router: optional: true - '@vitejs/plugin-react-swc@3.11.0': - resolution: {integrity: sha512-YTJCGFdNMHCMfjODYtxRNVAYmTWQ1Lb8PulP/2/f/oEEtglw8oKxKIZmmRkyXrVrHfsKOaVkAc3NT9/dMutO5w==} + '@vitejs/plugin-react@5.2.0': + resolution: {integrity: sha512-YmKkfhOAi3wsB1PhJq5Scj3GXMn3WvtQ/JC0xoopuHoXSdmtdStOpFrYaT1kie2YgFBcIe64ROzMYRjCrYOdYw==} + engines: {node: ^20.19.0 || >=22.12.0} peerDependencies: - vite: ^4 || ^5 || ^6 || ^7 + vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 - '@vitejs/plugin-react@4.7.0': - resolution: {integrity: sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==} - engines: {node: ^14.18.0 || >=16.0.0} + '@vitejs/plugin-react@6.0.1': + resolution: {integrity: sha512-l9X/E3cDb+xY3SWzlG1MOGt2usfEHGMNIaegaUGFsLkb3RCn/k8/TOXBcab+OndDI4TBtktT8/9BwwW8Vi9KUQ==} + engines: {node: ^20.19.0 || >=22.12.0} peerDependencies: - vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + '@rolldown/plugin-babel': ^0.1.7 || ^0.2.0 + babel-plugin-react-compiler: ^1.0.0 + vite: ^8.0.0 + peerDependenciesMeta: + '@rolldown/plugin-babel': + optional: true + babel-plugin-react-compiler: + optional: true - '@vitest/coverage-v8@3.2.4': - resolution: {integrity: sha512-EyF9SXU6kS5Ku/U82E259WSnvg6c8KTjppUncuNdm5QHpe17mwREHnjDzozC8x9MZ0xfBUFSaLkRv4TMA75ALQ==} + '@vitest/coverage-v8@4.1.2': + resolution: {integrity: sha512-sPK//PHO+kAkScb8XITeB1bf7fsk85Km7+rt4eeuRR3VS1/crD47cmV5wicisJmjNdfeokTZwjMk4Mj2d58Mgg==} peerDependencies: - '@vitest/browser': 3.2.4 - vitest: 3.2.4 + '@vitest/browser': 4.1.2 + vitest: 4.1.2 peerDependenciesMeta: '@vitest/browser': optional: true - '@vitest/expect@3.2.4': - resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} + '@vitest/expect@4.1.2': + resolution: {integrity: sha512-gbu+7B0YgUJ2nkdsRJrFFW6X7NTP44WlhiclHniUhxADQJH5Szt9mZ9hWnJPJ8YwOK5zUOSSlSvyzRf0u1DSBQ==} - '@vitest/mocker@3.2.4': - resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==} + '@vitest/mocker@4.1.2': + resolution: {integrity: sha512-Ize4iQtEALHDttPRCmN+FKqOl2vxTiNUhzobQFFt/BM1lRUTG7zRCLOykG/6Vo4E4hnUdfVLo5/eqKPukcWW7Q==} peerDependencies: msw: ^2.4.9 - vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: msw: optional: true vite: optional: true - '@vitest/pretty-format@3.2.4': - resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} + '@vitest/pretty-format@4.1.2': + resolution: {integrity: sha512-dwQga8aejqeuB+TvXCMzSQemvV9hNEtDDpgUKDzOmNQayl2OG241PSWeJwKRH3CiC+sESrmoFd49rfnq7T4RnA==} - '@vitest/runner@3.2.4': - resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==} + '@vitest/runner@4.1.2': + resolution: {integrity: sha512-Gr+FQan34CdiYAwpGJmQG8PgkyFVmARK8/xSijia3eTFgVfpcpztWLuP6FttGNfPLJhaZVP/euvujeNYar36OQ==} - '@vitest/snapshot@3.2.4': - resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==} + '@vitest/snapshot@4.1.2': + resolution: {integrity: sha512-g7yfUmxYS4mNxk31qbOYsSt2F4m1E02LFqO53Xpzg3zKMhLAPZAjjfyl9e6z7HrW6LvUdTwAQR3HHfLjpko16A==} - '@vitest/spy@3.2.4': - resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} + '@vitest/spy@4.1.2': + resolution: {integrity: sha512-DU4fBnbVCJGNBwVA6xSToNXrkZNSiw59H8tcuUspVMsBDBST4nfvsPsEHDHGtWRRnqBERBQu7TrTKskmjqTXKA==} - '@vitest/utils@3.2.4': - resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} + '@vitest/utils@4.1.2': + resolution: {integrity: sha512-xw2/TiX82lQHA06cgbqRKFb5lCAy3axQ4H4SoUFhUsg+wztiet+co86IAMDtF6Vm1hc7J6j09oh/rgDn+JdKIQ==} '@wagmi/cli@2.10.0': resolution: {integrity: sha512-2tYt6Bp1q26mWexH+XE6dMpPB5/Gp/3OVtE2SeeJ/gNHKLZmVF/TuoZR75mpJKTpofyvpz/fnuMCkUxzbc/kRw==} @@ -4333,10 +4752,6 @@ packages: '@zag-js/utils@1.35.3': resolution: {integrity: sha512-LHcC+9y6TFhDsIz9I3koYxONl2JFfx5yQDzc6ZEQO2cqzXedRcN0R9IPqNGCX7JuhGt14ctDkVCm1JWGP2J6Wg==} - JSONStream@1.3.5: - resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} - hasBin: true - abitype@1.0.6: resolution: {integrity: sha512-MMSqYh4+C/aVqI2RQaWqbvI4Kxo5cQV40WQ4QFtDnNzCkqChm8MuENhElmynZlO0qUy/ObkEUaXtKqYnx1Kp3A==} peerDependencies: @@ -4384,25 +4799,13 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - agent-base@7.1.4: - resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} - engines: {node: '>= 14'} - agentkeepalive@4.6.0: resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} engines: {node: '>= 8.0.0'} - aggregate-error@3.1.0: - resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} - engines: {node: '>=8'} - ajv@8.18.0: resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} - ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} - ansi-escapes@7.3.0: resolution: {integrity: sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==} engines: {node: '>=18'} @@ -4470,12 +4873,8 @@ packages: resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} engines: {node: '>=4'} - ast-v8-to-istanbul@0.3.11: - resolution: {integrity: sha512-Qya9fkoofMjCBNVdWINMjB5KZvkYfaO9/anwkWnjxibpWUxo5iHl2sOdP7/uAqaRuUYuoo8rDwnbaaKVFxoUvw==} - - astral-regex@2.0.0: - resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} - engines: {node: '>=8'} + ast-v8-to-istanbul@1.0.0: + resolution: {integrity: sha512-1fSfIwuDICFA4LKkCzRPO7F0hzFf0B7+Xqrl27ynQaa+Rh0e1Es0v6kWHPott3lU10AyAr7oKHa65OppjLn3Rg==} astring@1.9.0: resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} @@ -4564,6 +4963,9 @@ packages: bech32@2.0.0: resolution: {integrity: sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==} + bidi-js@1.0.3: + resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==} + big.js@6.2.2: resolution: {integrity: sha512-y/ie+Faknx7sZA5MfGA2xKlu0GDv8RWrXGsmlteyJQ2lvoKv9GBK/fpRMc2qlSoBAgNxrixICFCBefIq8WCQpQ==} @@ -4579,9 +4981,6 @@ packages: resolution: {integrity: sha512-vwEmpL5Tpj0I0RBdNkcDMXePoaYSTeKY6mL6/l5esbnTs+jGdPDuLp4NY1hSh6Zk5wSgePygZ4Wx5JJao30Pww==} engines: {node: '>=18.0.0'} - bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - bl@5.1.0: resolution: {integrity: sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==} @@ -4600,11 +4999,11 @@ packages: bowser@2.14.1: resolution: {integrity: sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg==} - brace-expansion@1.1.12: - resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} + brace-expansion@1.1.13: + resolution: {integrity: sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==} - brace-expansion@5.0.3: - resolution: {integrity: sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==} + brace-expansion@5.0.5: + resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==} engines: {node: 18 || 20 || >=22} braces@3.0.3: @@ -4628,9 +5027,6 @@ packages: bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} - buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} - buffer@6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} @@ -4691,8 +5087,8 @@ packages: ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} - chai@5.3.3: - resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} + chai@6.2.2: + resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} engines: {node: '>=18'} chalk@4.1.2: @@ -4730,9 +5126,13 @@ packages: charenc@0.0.2: resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} - check-error@2.1.3: - resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==} - engines: {node: '>= 16'} + chevrotain-allstar@0.3.1: + resolution: {integrity: sha512-b7g+y9A0v4mxCW1qUhf3BSVPg+/NvGErk/dOkrDaHA0nQIQGAtrOjlX//9OQtRlSCy+x9rfB5N8yC71lH1nvMw==} + peerDependencies: + chevrotain: ^11.0.0 + + chevrotain@11.1.2: + resolution: {integrity: sha512-opLQzEVriiH1uUQ4Kctsd49bRoFDXGGSC4GUqj7pGyxM3RehRhvTlZJc1FL/Flew2p5uwxa1tUDWKzI4wNM8pg==} chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} @@ -4749,14 +5149,6 @@ packages: chroma-js@3.2.0: resolution: {integrity: sha512-os/OippSlX1RlWWr+QDPcGUZs0uoqr32urfxESG9U93lhUfbnlyckte84Q8P1UQY/qth983AS1JONKmLS4T0nw==} - clean-stack@2.2.0: - resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} - engines: {node: '>=6'} - - cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} - cli-cursor@4.0.0: resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -4769,17 +5161,13 @@ packages: resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} engines: {node: '>=6'} - cli-truncate@2.1.0: - resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} - engines: {node: '>=8'} - - cli-truncate@4.0.0: - resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} - engines: {node: '>=18'} + cli-truncate@5.2.0: + resolution: {integrity: sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==} + engines: {node: '>=20'} - cli-width@3.0.0: - resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} - engines: {node: '>= 10'} + cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} cliui@6.0.0: resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} @@ -4788,10 +5176,6 @@ packages: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} - clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} - engines: {node: '>=0.8'} - clsx@1.2.1: resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==} engines: {node: '>=6'} @@ -4835,6 +5219,14 @@ packages: commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + + commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + common-tags@1.8.2: resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} engines: {node: '>=4.0.0'} @@ -4856,8 +5248,8 @@ packages: confbox@0.1.8: resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} - connectkit@1.9.1: - resolution: {integrity: sha512-ac9Ki3+HdS3l5NCa6H86y7R+0PqwJ8yzsBQVtWk4/jkFo+JJioetO43A/Q0O7VtxLbfuLLfwDGZ09taePLNzfQ==} + connectkit@1.9.2: + resolution: {integrity: sha512-ZaYdL2UgHdcVy5j7Cn5C6KUtA5Ev3LEc3mPAzEoH3V3hdu3CdC8jgFTFsgInTXXpsdNpwTEEDPnP245ok7wOYg==} engines: {node: '>=12.4'} peerDependencies: '@tanstack/react-query': '>=5.0.0' @@ -4869,17 +5261,17 @@ packages: constant-case@3.0.4: resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==} - conventional-changelog-angular@7.0.0: - resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==} - engines: {node: '>=16'} + conventional-changelog-angular@8.3.1: + resolution: {integrity: sha512-6gfI3otXK5Ph5DfCOI1dblr+kN3FAm5a97hYoQkqNZxOaYa5WKfXH+AnpsmS+iUH2mgVC2Cg2Qw9m5OKcmNrIg==} + engines: {node: '>=18'} - conventional-changelog-conventionalcommits@7.0.2: - resolution: {integrity: sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==} - engines: {node: '>=16'} + conventional-changelog-conventionalcommits@9.3.1: + resolution: {integrity: sha512-dTYtpIacRpcZgrvBYvBfArMmK2xvIpv2TaxM0/ZI5CBtNUzvF2x0t15HsbRABWprS6UPmvj+PzHVjSx4qAVKyw==} + engines: {node: '>=18'} - conventional-commits-parser@5.0.0: - resolution: {integrity: sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==} - engines: {node: '>=16'} + conventional-commits-parser@6.4.0: + resolution: {integrity: sha512-tvRg7FIBNlyPzjdG8wWRlPHQJJHI7DylhtRGeU9Lq+JuoPh5BKpPRX83ZdLrvXuOSu5Eo/e7SzOQhU4Hd2Miuw==} + engines: {node: '>=18'} hasBin: true convert-source-map@1.9.0: @@ -4888,8 +5280,8 @@ packages: convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - cookie-es@1.2.2: - resolution: {integrity: sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==} + cookie-es@1.2.3: + resolution: {integrity: sha512-lXVyvUvrNXblMqzIRrxHb57UUVmqsSWlxqt3XIjCkUP0wDAf6uicO6KMbEgYrMNtEvWgWHwe42CKxPu9MYAnWw==} cookie-es@2.0.0: resolution: {integrity: sha512-RAj4E421UYRgqokKUmotqAwuplYw15qtdXfY+hGzgCJ/MBjCVZcSoHK/kH9kocfjRjcDME7IiDWR/1WX1TM2Pg==} @@ -4901,6 +5293,12 @@ packages: core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + cose-base@1.0.3: + resolution: {integrity: sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==} + + cose-base@2.2.0: + resolution: {integrity: sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==} + cosmiconfig-typescript-loader@6.2.0: resolution: {integrity: sha512-GEN39v7TgdxgIoNcdkRE3uiAzQt3UXLyHbRHD6YoL048XAeOomyxaP+Hh/+2C6C2wYjxJ2onhJcsQp+L4YEkVQ==} engines: {node: '>=v18'} @@ -4922,8 +5320,8 @@ packages: typescript: optional: true - cosmiconfig@9.0.0: - resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} + cosmiconfig@9.0.1: + resolution: {integrity: sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==} engines: {node: '>=14'} peerDependencies: typescript: '>=4.9.5' @@ -4973,6 +5371,10 @@ packages: css-to-react-native@3.2.0: resolution: {integrity: sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==} + css-tree@3.2.1: + resolution: {integrity: sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + css-what@6.2.2: resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} engines: {node: '>= 6'} @@ -4985,10 +5387,6 @@ packages: engines: {node: '>=4'} hasBin: true - cssstyle@4.6.0: - resolution: {integrity: sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==} - engines: {node: '>=18'} - csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} @@ -5002,17 +5400,169 @@ packages: typescript: optional: true - dargs@8.1.0: - resolution: {integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==} + cytoscape-cose-bilkent@4.1.0: + resolution: {integrity: sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==} + peerDependencies: + cytoscape: ^3.2.0 + + cytoscape-fcose@2.2.0: + resolution: {integrity: sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==} + peerDependencies: + cytoscape: ^3.2.0 + + cytoscape@3.33.1: + resolution: {integrity: sha512-iJc4TwyANnOGR1OmWhsS9ayRS3s+XQ185FmuHObThD+5AeJCakAAbWv8KimMTt08xCCLNgneQwFp+JRJOr9qGQ==} + engines: {node: '>=0.10'} + + d3-array@2.12.1: + resolution: {integrity: sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==} + + d3-array@3.2.4: + resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==} + engines: {node: '>=12'} + + d3-axis@3.0.0: + resolution: {integrity: sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==} + engines: {node: '>=12'} + + d3-brush@3.0.0: + resolution: {integrity: sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==} + engines: {node: '>=12'} + + d3-chord@3.0.1: + resolution: {integrity: sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==} + engines: {node: '>=12'} + + d3-color@3.1.0: + resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} + engines: {node: '>=12'} + + d3-contour@4.0.2: + resolution: {integrity: sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==} + engines: {node: '>=12'} + + d3-delaunay@6.0.4: + resolution: {integrity: sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==} + engines: {node: '>=12'} + + d3-dispatch@3.0.1: + resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==} + engines: {node: '>=12'} + + d3-drag@3.0.0: + resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==} + engines: {node: '>=12'} + + d3-dsv@3.0.1: + resolution: {integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==} + engines: {node: '>=12'} + hasBin: true + + d3-ease@3.0.1: + resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} + engines: {node: '>=12'} + + d3-fetch@3.0.1: + resolution: {integrity: sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==} + engines: {node: '>=12'} + + d3-force@3.0.0: + resolution: {integrity: sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==} + engines: {node: '>=12'} + + d3-format@3.1.2: + resolution: {integrity: sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==} + engines: {node: '>=12'} + + d3-geo@3.1.1: + resolution: {integrity: sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==} + engines: {node: '>=12'} + + d3-hierarchy@3.1.2: + resolution: {integrity: sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==} + engines: {node: '>=12'} + + d3-interpolate@3.0.1: + resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} + engines: {node: '>=12'} + + d3-path@1.0.9: + resolution: {integrity: sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==} + + d3-path@3.1.0: + resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==} + engines: {node: '>=12'} + + d3-polygon@3.0.1: + resolution: {integrity: sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==} + engines: {node: '>=12'} + + d3-quadtree@3.0.1: + resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==} + engines: {node: '>=12'} + + d3-random@3.0.1: + resolution: {integrity: sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==} + engines: {node: '>=12'} + + d3-sankey@0.12.3: + resolution: {integrity: sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==} + + d3-scale-chromatic@3.1.0: + resolution: {integrity: sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==} + engines: {node: '>=12'} + + d3-scale@4.0.2: + resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} + engines: {node: '>=12'} + + d3-selection@3.0.0: + resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==} + engines: {node: '>=12'} + + d3-shape@1.3.7: + resolution: {integrity: sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==} + + d3-shape@3.2.0: + resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==} + engines: {node: '>=12'} + + d3-time-format@4.1.0: + resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} engines: {node: '>=12'} + d3-time@3.1.0: + resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==} + engines: {node: '>=12'} + + d3-timer@3.0.1: + resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} + engines: {node: '>=12'} + + d3-transition@3.0.1: + resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==} + engines: {node: '>=12'} + peerDependencies: + d3-selection: 2 - 3 + + d3-zoom@3.0.0: + resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==} + engines: {node: '>=12'} + + d3@7.9.0: + resolution: {integrity: sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==} + engines: {node: '>=12'} + + dagre-d3-es@7.0.14: + resolution: {integrity: sha512-P4rFMVq9ESWqmOgK+dlXvOtLwYg0i7u0HBGJER0LZDJT2VHIPAMZ/riPxqJceWMStH5+E61QxFra9kIS3AqdMg==} + data-uri-to-buffer@4.0.1: resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} engines: {node: '>= 12'} - data-urls@5.0.0: - resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} - engines: {node: '>=18'} + data-urls@7.0.0: + resolution: {integrity: sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} dataloader@2.2.3: resolution: {integrity: sha512-y2krtASINtPFS1rSDjacrFgn1dcUuoREVabwlOGOe4SdxenREqwjwjElAdwvbGM7kgZz9a3KVicWR7vcz8rnzA==} @@ -5024,8 +5574,12 @@ packages: dayjs@1.11.13: resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} - debounce@1.2.1: - resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} + dayjs@1.11.20: + resolution: {integrity: sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==} + + debounce@2.2.0: + resolution: {integrity: sha512-Xks6RUDLZFdz8LIdR6q0MTH44k7FikOmnh5xkSjMig6ch45afc8sjTjRQf3P6ax8dMgcQrYO/AR2RGWURrruqw==} + engines: {node: '>=18'} debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} @@ -5078,10 +5632,6 @@ packages: babel-plugin-macros: optional: true - deep-eql@5.0.2: - resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} - engines: {node: '>=6'} - deep-object-diff@1.1.9: resolution: {integrity: sha512-Rn+RuwkmkDwCi2/oXOFS9Gsr5lJZu/yTGpK7wAaAIE75CC+LCGEZHpY6VQJa/RoJcrmaA/docWJZvYohlNkWPA==} @@ -5089,9 +5639,6 @@ packages: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} - defaults@1.0.4: - resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} - define-data-property@1.1.4: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} @@ -5099,6 +5646,9 @@ packages: defu@6.1.4: resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + delaunator@5.1.0: + resolution: {integrity: sha512-AGrQ4QSgssa1NGmWmLPqN5NY2KajF5MqxetNEO+o0n3ZwZZeTmt7bBnvzHWrmkZFxGgr4HdyFgelzgi06otLuQ==} + delay@5.0.0: resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} engines: {node: '>=10'} @@ -5115,6 +5665,10 @@ packages: resolution: {integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==} engines: {node: '>= 0.6.0'} + dependency-graph@1.0.0: + resolution: {integrity: sha512-cW3gggJ28HZ/LExwxP2B++aiKxhJXMSIt9K48FOXQkm+vuG5gyatXnLsONRJdzO/7VfjDIiaOOa/bs4l464Lwg==} + engines: {node: '>=4'} + dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} @@ -5177,6 +5731,9 @@ packages: dom-accessibility-api@0.6.3: resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} + dompurify@3.3.3: + resolution: {integrity: sha512-Oj6pzI2+RqBfFG+qOaOLbFXLQ90ARpcGG6UePL82bJLtdsa6CYJD7nmiU8MW9nQNOtCHV3lZ/Bzq1X0QYbBZCA==} + dot-case@3.0.4: resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} @@ -5192,10 +5749,6 @@ packages: resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} engines: {node: '>=12'} - 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'} @@ -5225,9 +5778,6 @@ packages: emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - encode-utf8@1.0.3: resolution: {integrity: sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==} @@ -5279,6 +5829,9 @@ packages: es-module-lexer@1.7.0: resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + es-module-lexer@2.0.0: + resolution: {integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==} + es-object-atoms@1.1.1: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} @@ -5310,8 +5863,8 @@ packages: engines: {node: '>=18'} hasBin: true - esbuild@0.27.3: - resolution: {integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==} + esbuild@0.27.4: + resolution: {integrity: sha512-Rq4vbHnYkK5fws5NF7MYTU68FPRE1ajX7heQ/8QXXWqNgqqJ/GkmmyxIzUnf2Sr/bakf8l54716CcMGHYhMrrQ==} engines: {node: '>=18'} hasBin: true @@ -5322,10 +5875,6 @@ packages: escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} @@ -5408,10 +5957,6 @@ packages: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} - execa@8.0.1: - resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} - engines: {node: '>=16.17'} - expect-type@1.3.0: resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} engines: {node: '>=12.0.0'} @@ -5427,23 +5972,6 @@ packages: resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} engines: {node: '> 0.1.90'} - family@0.1.6: - resolution: {integrity: sha512-ulHRThfhz+glfmVfSPcU16N1hZ/uj0Y1D79vl0PeJ3yFfgXlkiBbVwXRJhDQuP8oizxBCl16KT2PrMleiYwrPw==} - peerDependencies: - react: 17.x || 18.x || 19.x - react-dom: 17.x || 18.x || 19.x - viem: 2.x - wagmi: 2.x - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true - viem: - optional: true - wagmi: - optional: true - fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -5492,10 +6020,6 @@ packages: resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} engines: {node: ^12.20 || >= 14.13} - figures@3.2.0: - resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} - engines: {node: '>=8'} - fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} @@ -5515,10 +6039,6 @@ packages: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} - find-up@7.0.0: - resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==} - engines: {node: '>=18'} - follow-redirects@1.15.11: resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} engines: {node: '>=4.0'} @@ -5532,10 +6052,6 @@ packages: resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} engines: {node: '>= 0.4'} - foreground-child@3.3.1: - resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} - engines: {node: '>=14'} - form-data@4.0.5: resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} engines: {node: '>= 6'} @@ -5571,6 +6087,11 @@ packages: fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -5611,16 +6132,12 @@ packages: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} - get-stream@8.0.1: - resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} - engines: {node: '>=16'} - - get-tsconfig@4.13.6: - resolution: {integrity: sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==} + get-tsconfig@4.13.7: + resolution: {integrity: sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q==} - git-raw-commits@4.0.0: - resolution: {integrity: sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==} - engines: {node: '>=16'} + git-raw-commits@5.0.1: + resolution: {integrity: sha512-Y+csSm2GD/PCSh6Isd/WiMjNAydu0VBiG9J7EdQsNA5P9uXvLayqjmTsNlK5Gs9IhblFZqOU0yid5Il5JPoLiQ==} + engines: {node: '>=18'} hasBin: true github-slugger@2.0.0: @@ -5630,11 +6147,6 @@ packages: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} - glob@10.5.0: - resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} - deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me - hasBin: true - glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me @@ -5647,13 +6159,6 @@ packages: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} - globby@14.1.0: - resolution: {integrity: sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==} - engines: {node: '>=18'} - - globrex@0.1.2: - resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} - goober@2.1.18: resolution: {integrity: sha512-2vFqsaDVIT9Gz7N6kAL++pLpp41l3PfDuusHcjnGLfR6+huZkl6ziX+zgVC3ZxpqWhzH6pyDdGrCeDhMIvwaxw==} peerDependencies: @@ -5672,8 +6177,8 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - graphql-config@5.1.5: - resolution: {integrity: sha512-mG2LL1HccpU8qg5ajLROgdsBzx/o2M6kgI3uAmoaXiSH9PCUbtIyLomLqUtCFaAeG2YCFsl0M5cfQ9rKmDoMVA==} + graphql-config@5.1.6: + resolution: {integrity: sha512-fCkYnm4Kdq3un0YIM4BCZHVR5xl0UeLP6syxxO7KAstdY7QVyVvTHP0kRPDYEP1v08uwtJVgis5sj3IOTLOniQ==} engines: {node: '>= 16.0.0'} peerDependencies: cosmiconfig-toml-loader: ^1.0.0 @@ -5714,13 +6219,16 @@ packages: ws: optional: true - graphql@16.13.1: - resolution: {integrity: sha512-gGgrVCoDKlIZ8fIqXBBb0pPKqDgki0Z/FSKNiQzSGj2uEYHr1tq5wmBegGwJx6QB5S5cM0khSBpi/JFHMCvsmQ==} + graphql@16.13.2: + resolution: {integrity: sha512-5bJ+nf/UCpAjHM8i06fl7eLyVC9iuNAjm9qzkiu2ZGhM0VscSvS6WDPfAwkdkBuoXGM9FJSbKl6wylMwP9Ktig==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} h3@1.15.5: resolution: {integrity: sha512-xEyq3rSl+dhGX2Lm0+eFQIAzlDN6Fs0EcC4f7BNUmzaRX/PTzeuM+Tr2lHB8FoXggsQIeXLj8EDVgs5ywxyxmg==} + hachure-fill@0.5.2: + resolution: {integrity: sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==} + has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} @@ -5747,6 +6255,18 @@ packages: hast-util-classnames@3.0.0: resolution: {integrity: sha512-tI3JjoGDEBVorMAWK4jNRsfLMYmih1BUOG3VV36pH36njs1IEl7xkNrVTD2mD2yYHmQCa5R/fj61a8IAF4bRaQ==} + hast-util-from-dom@5.0.1: + resolution: {integrity: sha512-N+LqofjR2zuzTjCPzyDUdSshy4Ma6li7p/c3pA78uTwzFgENbgbUrm2ugwsOdcjI1muO+o6Dgzp9p8WHtn/39Q==} + + hast-util-from-html-isomorphic@2.0.0: + resolution: {integrity: sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw==} + + 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==} @@ -5774,12 +6294,18 @@ packages: 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@8.0.0: resolution: {integrity: sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==} + hastscript@9.0.1: + resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==} + header-case@2.0.4: resolution: {integrity: sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==} @@ -5793,9 +6319,9 @@ packages: resolution: {integrity: sha512-gJnaDHXKDayjt8ue0n8Gs0A007yKXj4Xzb8+cNjZeYsSzzwKc0Lr+OZgYwVfB0pHfUs17EPoLvrOsEaJ9mj+Tg==} engines: {node: '>=16.9.0'} - html-encoding-sniffer@4.0.0: - resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} - engines: {node: '>=18'} + html-encoding-sniffer@6.0.0: + resolution: {integrity: sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} @@ -5807,22 +6333,10 @@ packages: resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} engines: {node: '>= 0.8'} - http-proxy-agent@7.0.2: - resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} - engines: {node: '>= 14'} - - https-proxy-agent@7.0.6: - resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} - engines: {node: '>= 14'} - human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} - human-signals@5.0.0: - resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} - engines: {node: '>=16.17.0'} - humanize-ms@1.2.1: resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} @@ -5852,14 +6366,13 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} - ignore@7.0.5: - resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} - engines: {node: '>= 4'} - immutable@3.7.6: resolution: {integrity: sha512-AizQPcaofEtO11RZhPPHBOJRdo/20MKQF9mBLnVkBoyHi1/zXK8fzVdnEpSV9gxqtnh6Qomfp3F0xT5qP/vThw==} engines: {node: '>=0.8.0'} + immutable@5.1.5: + resolution: {integrity: sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A==} + import-fresh@3.3.1: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} @@ -5889,9 +6402,12 @@ packages: inline-style-parser@0.2.7: resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==} - inquirer@8.2.7: - resolution: {integrity: sha512-UjOaSel/iddGZJ5xP/Eixh6dY1XghiBw4XK13rCCIJcJfyhhoul/7KhLLUGtebEj6GDYM6Vnx/mVsjx2L/mFIA==} - engines: {node: '>=12.0.0'} + internmap@1.0.1: + resolution: {integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==} + + internmap@2.0.3: + resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} + engines: {node: '>=12'} invariant@2.2.4: resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} @@ -5942,10 +6458,6 @@ packages: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - is-fullwidth-code-point@4.0.0: - resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} - engines: {node: '>=12'} - is-fullwidth-code-point@5.1.0: resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==} engines: {node: '>=18'} @@ -5961,10 +6473,6 @@ packages: is-hexadecimal@2.0.1: resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} - is-interactive@1.0.0: - resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} - engines: {node: '>=8'} - is-interactive@2.0.0: resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} engines: {node: '>=12'} @@ -6003,14 +6511,6 @@ packages: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} - is-stream@3.0.0: - resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - is-text-path@2.0.0: - resolution: {integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==} - engines: {node: '>=8'} - is-typed-array@1.1.15: resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} engines: {node: '>= 0.4'} @@ -6075,17 +6575,10 @@ packages: resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} engines: {node: '>=10'} - istanbul-lib-source-maps@5.0.6: - resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==} - engines: {node: '>=10'} - istanbul-reports@3.2.0: resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} engines: {node: '>=8'} - jackspeak@3.4.3: - resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - javascript-stringify@2.1.0: resolution: {integrity: sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==} @@ -6094,17 +6587,10 @@ packages: engines: {node: '>=8'} hasBin: true - jiti@1.21.7: - resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} - hasBin: true - jiti@2.6.1: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true - jose@5.10.0: - resolution: {integrity: sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==} - jose@6.1.3: resolution: {integrity: sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==} @@ -6114,16 +6600,13 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-tokens@9.0.1: - resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} - js-yaml@4.1.1: resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true - jsdom@26.1.0: - resolution: {integrity: sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==} - engines: {node: '>=18'} + jsdom@29.0.1: + resolution: {integrity: sha512-z6JOK5gRO7aMybVq/y/MlIpKh8JIi68FBKMUtKkK2KH/wMSRlCxQ682d08LB9fYXplyY/UXG8P4XXTScmdjApg==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24.0.0} peerDependencies: canvas: ^3.0.0 peerDependenciesMeta: @@ -6163,9 +6646,9 @@ packages: jsonfile@6.2.0: resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} - jsonparse@1.3.1: - resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} - engines: {'0': node >= 0.2.0} + katex@0.16.44: + resolution: {integrity: sha512-EkxoDTk8ufHqHlf9QxGwcxeLkWRR3iOuYfRpfORgYfqc8s13bgb+YtRY59NK5ZpRaCwq1kqA6a5lpX8C/eLphQ==} + hasBin: true keccak@3.0.4: resolution: {integrity: sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==} @@ -6174,83 +6657,166 @@ packages: keyvaluestorage-interface@1.0.0: resolution: {integrity: sha512-8t6Q3TclQ4uZynJY9IGr2+SsIGwK9JHcO6ootkHCGA0CrQCRy+VkouYNO2xicET6b9al7QKzpebNow+gkpCL8g==} - lightningcss-android-arm64@1.31.1: - resolution: {integrity: sha512-HXJF3x8w9nQ4jbXRiNppBCqeZPIAfUo8zE/kOEGbW5NZvGc/K7nMxbhIr+YlFlHW5mpbg/YFPdbnCh1wAXCKFg==} + khroma@2.1.0: + resolution: {integrity: sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==} + + langium@4.2.1: + resolution: {integrity: sha512-zu9QWmjpzJcomzdJQAHgDVhLGq5bLosVak1KVa40NzQHXfqr4eAHupvnPOVXEoLkg6Ocefvf/93d//SB7du4YQ==} + engines: {node: '>=20.10.0', npm: '>=10.2.3'} + + layout-base@1.0.2: + resolution: {integrity: sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==} + + layout-base@2.0.1: + resolution: {integrity: sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==} + + lightningcss-android-arm64@1.30.2: + resolution: {integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [android] - lightningcss-darwin-arm64@1.31.1: - resolution: {integrity: sha512-02uTEqf3vIfNMq3h/z2cJfcOXnQ0GRwQrkmPafhueLb2h7mqEidiCzkE4gBMEH65abHRiQvhdcQ+aP0D0g67sg==} + lightningcss-android-arm64@1.32.0: + resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.30.2: + resolution: {integrity: sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [darwin] - lightningcss-darwin-x64@1.31.1: - resolution: {integrity: sha512-1ObhyoCY+tGxtsz1lSx5NXCj3nirk0Y0kB/g8B8DT+sSx4G9djitg9ejFnjb3gJNWo7qXH4DIy2SUHvpoFwfTA==} + lightningcss-darwin-arm64@1.32.0: + resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.30.2: + resolution: {integrity: sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-darwin-x64@1.32.0: + resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [darwin] - lightningcss-freebsd-x64@1.31.1: - resolution: {integrity: sha512-1RINmQKAItO6ISxYgPwszQE1BrsVU5aB45ho6O42mu96UiZBxEXsuQ7cJW4zs4CEodPUioj/QrXW1r9pLUM74A==} + lightningcss-freebsd-x64@1.30.2: + resolution: {integrity: sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-freebsd-x64@1.32.0: + resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [freebsd] - lightningcss-linux-arm-gnueabihf@1.31.1: - resolution: {integrity: sha512-OOCm2//MZJ87CdDK62rZIu+aw9gBv4azMJuA8/KB74wmfS3lnC4yoPHm0uXZ/dvNNHmnZnB8XLAZzObeG0nS1g==} + lightningcss-linux-arm-gnueabihf@1.30.2: + resolution: {integrity: sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==} engines: {node: '>= 12.0.0'} cpu: [arm] os: [linux] - lightningcss-linux-arm64-gnu@1.31.1: - resolution: {integrity: sha512-WKyLWztD71rTnou4xAD5kQT+982wvca7E6QoLpoawZ1gP9JM0GJj4Tp5jMUh9B3AitHbRZ2/H3W5xQmdEOUlLg==} + lightningcss-linux-arm-gnueabihf@1.32.0: + resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.30.2: + resolution: {integrity: sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] libc: [glibc] - lightningcss-linux-arm64-musl@1.31.1: - resolution: {integrity: sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg==} + lightningcss-linux-arm64-gnu@1.32.0: + resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + lightningcss-linux-arm64-musl@1.30.2: + resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] libc: [musl] - lightningcss-linux-x64-gnu@1.31.1: - resolution: {integrity: sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA==} + lightningcss-linux-arm64-musl@1.32.0: + resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + + lightningcss-linux-x64-gnu@1.30.2: + resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + + lightningcss-linux-x64-gnu@1.32.0: + resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] libc: [glibc] - lightningcss-linux-x64-musl@1.31.1: - resolution: {integrity: sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA==} + lightningcss-linux-x64-musl@1.30.2: + resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] libc: [musl] - lightningcss-win32-arm64-msvc@1.31.1: - resolution: {integrity: sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w==} + lightningcss-linux-x64-musl@1.32.0: + resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] + + lightningcss-win32-arm64-msvc@1.30.2: + resolution: {integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [win32] - lightningcss-win32-x64-msvc@1.31.1: - resolution: {integrity: sha512-I9aiFrbd7oYHwlnQDqr1Roz+fTz61oDDJX7n9tYF9FJymH1cIN1DtKw3iYt6b8WZgEjoNwVSncwF4wx/ZedMhw==} + lightningcss-win32-arm64-msvc@1.32.0: + resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.30.2: + resolution: {integrity: sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [win32] - lightningcss@1.31.1: - resolution: {integrity: sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ==} + lightningcss-win32-x64-msvc@1.32.0: + resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] - lilconfig@3.1.3: - resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} - engines: {node: '>=14'} + lightningcss@1.30.2: + resolution: {integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==} + engines: {node: '>= 12.0.0'} + + lightningcss@1.32.0: + resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} + engines: {node: '>= 12.0.0'} lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} @@ -6258,23 +6824,14 @@ packages: linkify-it@5.0.0: resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} - lint-staged@15.5.2: - resolution: {integrity: sha512-YUSOLq9VeRNAo/CTaVmhGDKG+LBtA8KF1X4K5+ykMSwWST1vDxJRB2kv2COgLb1fvpCo+A/y9A0G0znNVmdx4w==} - engines: {node: '>=18.12.0'} + lint-staged@16.4.0: + resolution: {integrity: sha512-lBWt8hujh/Cjysw5GYVmZpFHXDCgZzhrOm8vbcUdobADZNOK/bRshr2kM3DfgrrtR1DQhfupW9gnIXOfiFi+bw==} + engines: {node: '>=20.17'} hasBin: true - listr2@4.0.5: - resolution: {integrity: sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==} - engines: {node: '>=12'} - peerDependencies: - enquirer: '>= 2.3.0 < 3' - peerDependenciesMeta: - enquirer: - optional: true - - listr2@8.3.3: - resolution: {integrity: sha512-LWzX2KsqcB1wqQ4AHgYb4RsDXauQiqhjLk+6hjbaeHG4zpjjVAB6wC/gz6X0l+Du1cN3pUB5ZlrvTbhGSNnUQQ==} - engines: {node: '>=18.0.0'} + listr2@9.0.5: + resolution: {integrity: sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==} + engines: {node: '>=20.0.0'} lit-element@4.2.2: resolution: {integrity: sha512-aFKhNToWxoyhkNDmWZwEva2SlQia+jfG0fjIWV//YeTaWrVnOxD89dPKfigCUspXFmjzOEUQpOkejH5Ly6sG0w==} @@ -6297,22 +6854,15 @@ packages: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} - locate-path@7.2.0: - resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + lodash-es@4.17.23: + resolution: {integrity: sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==} lodash.camelcase@4.3.0: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} - lodash.isplainobject@4.0.6: - resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} - lodash.kebabcase@4.1.1: resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} - lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - lodash.mergewith@4.6.2: resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} @@ -6325,9 +6875,6 @@ packages: lodash.startcase@4.4.0: resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} - lodash.uniq@4.5.0: - resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} - lodash.upperfirst@4.3.1: resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==} @@ -6342,10 +6889,6 @@ packages: resolution: {integrity: sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==} engines: {node: '>=12'} - log-update@4.0.0: - resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} - engines: {node: '>=10'} - log-update@6.1.0: resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} engines: {node: '>=18'} @@ -6357,9 +6900,6 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true - loupe@3.2.1: - resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} - lower-case-first@2.0.2: resolution: {integrity: sha512-EVm/rR94FJTZi3zefZ82fLWab+GX14LJN4HrWBcuo6Evmsl9hEfnqxgcHCKb9q+mNf6EVdsjx/qucYFIIB84pg==} @@ -6373,6 +6913,10 @@ packages: resolution: {integrity: sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==} engines: {node: 20 || >=22} + lru-cache@11.2.7: + resolution: {integrity: sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==} + engines: {node: 20 || >=22} + lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -6386,8 +6930,8 @@ packages: magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - magicast@0.3.5: - resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} + magicast@0.5.2: + resolution: {integrity: sha512-E3ZJh4J3S9KfwdjZhe2afj6R9lGIN5Pher1pF39UGrXRqq/VDaGVIGN13BjHd2u8B61hArAGOnso7nBOouW3TQ==} make-dir@4.0.0: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} @@ -6414,6 +6958,11 @@ packages: markdown-table@3.0.4: resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} + marked@16.4.2: + resolution: {integrity: sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA==} + engines: {node: '>= 20'} + hasBin: true + math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} @@ -6475,15 +7024,18 @@ packages: mdast-util-to-string@4.0.0: resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + mdn-data@2.27.1: + resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==} + mdurl@2.0.0: resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} media-query-parser@2.0.2: resolution: {integrity: sha512-1N4qp+jE0pL5Xv4uEcwVUhIkwdUO3S/9gML90nqKA7v7FcOS5vUtatfzok9S9U1EJU8dHWlcv95WLnKmmxZI9w==} - meow@12.1.1: - resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} - engines: {node: '>=16.10'} + meow@13.2.0: + resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==} + engines: {node: '>=18'} merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -6492,6 +7044,17 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} + mermaid-isomorphic@3.1.0: + resolution: {integrity: sha512-mzrvfEVjnJIkJlEqxp3eMuR1wS0TeLCH1VK5E/T5yzWaBwI3JqjJuw70yUIThSCDJ5bRs6O3rgfp00oBAbvSeQ==} + peerDependencies: + playwright: '1' + peerDependenciesMeta: + playwright: + optional: true + + mermaid@11.14.0: + resolution: {integrity: sha512-GSGloRsBs+JINmmhl0JDwjpuezCsHB4WGI4NASHxL3fHo3o/BRXTxhDLKnln8/Q0lRFRyDdEjmk1/d5Sn1Xz8g==} + meros@1.3.2: resolution: {integrity: sha512-Q3mobPbvEx7XbwhnC1J1r60+5H6EZyNccdzSz0eGexJRwouUtTZxPVRGdqKtxlpD84ScK4+tIGldkqDtCKdI0A==} engines: {node: '>=13'} @@ -6643,10 +7206,6 @@ packages: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} - mimic-fn@4.0.0: - resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} - engines: {node: '>=12'} - mimic-function@5.0.1: resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} engines: {node: '>=18'} @@ -6655,26 +7214,22 @@ packages: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} - minimatch@10.2.2: - resolution: {integrity: sha512-+G4CpNBxa5MprY+04MbgOw1v7So6n5JY166pFi9KfYwT78fxScCeSNQSNzp6dpPSW2rONOps6Ocam1wFhCgoVw==} - engines: {node: 18 || 20 || >=22} + mini-svg-data-uri@1.4.4: + resolution: {integrity: sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==} + hasBin: true - minimatch@3.1.3: - resolution: {integrity: sha512-M2GCs7Vk83NxkUyQV1bkABc4yxgz9kILhHImZiBPAZ9ybuvCb0/H7lEl5XvIg3g+9d4eNotkZA5IWwYl0tibaA==} + minimatch@10.2.5: + resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} + engines: {node: 18 || 20 || >=22} - minimatch@9.0.6: - resolution: {integrity: sha512-kQAVowdR33euIqeA0+VZTDqU+qo1IeVY+hrKYtZMio3Pg0P0vuh/kwRylLUddJhB6pf3q/botcOvRtx4IN1wqQ==} - engines: {node: '>=16 || 14 >=14.17'} + minimatch@3.1.5: + resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - minipass@7.1.3: - resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} - engines: {node: '>=16 || 14 >=14.17'} - - minisearch@6.3.0: - resolution: {integrity: sha512-ihFnidEeU8iXzcVHy74dhkxh/dn8Dc08ERl0xwoMMGqp4+LvRSCgicb+zGqWthVokQKvCSxITlh3P08OzdTYCQ==} + minisearch@7.2.0: + resolution: {integrity: sha512-dqT2XBYUOZOiC5t2HRnwADjhNS2cecp9u+TJRiJ1Qp/f5qjkeT5APcGPjHw+bz89Ms8Jp+cG4AlE+QZ/QnDglg==} mipd@0.0.7: resolution: {integrity: sha512-aAPZPNDQ3uMTdKbuO2YmAw2TxLHO0moa4YKAyETM/DTj5FloZo+a+8tU+iv4GmW+sOxKLSRwcSFuczk+Cpt6fg==} @@ -6702,8 +7257,9 @@ packages: multiformats@9.9.0: resolution: {integrity: sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==} - mute-stream@0.0.8: - resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + mute-stream@2.0.0: + resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} + engines: {node: ^18.17.0 || >=20.5.0} nanoid@3.3.11: resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} @@ -6778,18 +7334,32 @@ packages: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} - npm-run-path@5.3.0: - resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} nullthrows@1.1.1: resolution: {integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==} - nwsapi@2.2.23: - resolution: {integrity: sha512-7wfH4sLbt4M0gCDzGE6vzQBo0bfTKjU7Sfpqy/7gs1qBfYz2vEJH6vXcBKpO3+6Yu1telwd0t9HpyOoLEQQbIQ==} + nuqs@2.8.9: + resolution: {integrity: sha512-8ou6AEwsxMWSYo2qkfZtYFVzngwbKmg4c00HVxC1fF6CEJv3Fwm6eoZmfVPALB+vw8Udo7KL5uy96PFcYe1BIQ==} + peerDependencies: + '@remix-run/react': '>=2' + '@tanstack/react-router': ^1 + next: '>=14.2.0' + react: '>=18.2.0 || ^19.0.0-0' + react-router: ^5 || ^6 || ^7 + react-router-dom: ^5 || ^6 || ^7 + peerDependenciesMeta: + '@remix-run/react': + optional: true + '@tanstack/react-router': + optional: true + next: + optional: true + react-router: + optional: true + react-router-dom: + optional: true obj-multiplex@1.0.0: resolution: {integrity: sha512-0GNJAOsHoBHeNTvl5Vt6IWnpUEcc3uSRxzBri7EDyIcMgYvnY2JL2qdeV5zTMjWQX5OHcD5amcW2HFfDh0gjIA==} @@ -6798,6 +7368,9 @@ packages: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} + obug@2.1.1: + resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} + ofetch@1.5.1: resolution: {integrity: sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==} @@ -6823,10 +7396,6 @@ packages: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} - onetime@6.0.0: - resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} - engines: {node: '>=12'} - onetime@7.0.0: resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} engines: {node: '>=18'} @@ -6840,10 +7409,6 @@ packages: openapi-typescript-helpers@0.0.15: resolution: {integrity: sha512-opyTPaunsklCBpTK8JGef6mfPhLSnyy5a0IN9vKtx3+4aExf+KxEqYwIy3hqkedXIB97u357uLMJsOnm3GVjsw==} - ora@5.4.1: - resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} - engines: {node: '>=10'} - ora@7.0.1: resolution: {integrity: sha512-0TUxTiFJWv+JnjWm4o9yvuskpEJLXTcng8MJuKd+SzAzp2o+OP3HWqNhB4OdJRt1Vsd9/mR0oyaEYlOnL7XIRw==} engines: {node: '>=16'} @@ -6896,10 +7461,6 @@ packages: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} - p-limit@4.0.0: - resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - p-limit@5.0.0: resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} engines: {node: '>=18'} @@ -6912,20 +7473,12 @@ packages: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} - p-locate@6.0.0: - resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - p-map@4.0.0: - resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} - engines: {node: '>=10'} - p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} - package-json-from-dist@1.0.1: - resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + package-manager-detector@1.6.0: + resolution: {integrity: sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==} param-case@3.0.4: resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} @@ -6948,6 +7501,9 @@ packages: parse5@7.3.0: resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} + parse5@8.0.0: + resolution: {integrity: sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==} + parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} @@ -6958,14 +7514,13 @@ packages: path-case@3.0.4: resolution: {integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==} + path-data-parser@0.1.0: + resolution: {integrity: sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==} + path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} - path-exists@5.0.0: - resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} @@ -6974,10 +7529,6 @@ packages: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} - path-key@4.0.0: - resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} - engines: {node: '>=12'} - path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} @@ -6989,28 +7540,16 @@ packages: resolution: {integrity: sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==} engines: {node: '>=0.10.0'} - path-scurry@1.11.1: - resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} - engines: {node: '>=16 || 14 >=14.18'} - path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} - path-type@6.0.0: - resolution: {integrity: sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==} - engines: {node: '>=18'} - pathe@1.1.2: resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - pathval@2.0.1: - resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} - engines: {node: '>= 14.16'} - perfect-freehand@1.2.3: resolution: {integrity: sha512-bHZSfqDHGNlPpgH2yxXgPHlQSPpEbo+qg7li0M78J9vNAi2yjwLeA4x79BEQhX44lEWpCLSFCeRZwpw0niiXPA==} @@ -7029,10 +7568,9 @@ packages: resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} engines: {node: '>=12'} - pidtree@0.6.0: - resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} - engines: {node: '>=0.10'} - hasBin: true + picomatch@4.0.4: + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} + engines: {node: '>=12'} pify@3.0.0: resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} @@ -7065,10 +7603,26 @@ packages: pkg-types@1.3.1: resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + playwright-core@1.59.1: + resolution: {integrity: sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==} + engines: {node: '>=18'} + hasBin: true + + playwright@1.59.1: + resolution: {integrity: sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==} + engines: {node: '>=18'} + hasBin: true + pngjs@5.0.0: resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==} engines: {node: '>=10.13.0'} + points-on-curve@0.2.0: + resolution: {integrity: sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==} + + points-on-path@0.2.1: + resolution: {integrity: sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==} + pony-cause@2.1.11: resolution: {integrity: sha512-M7LhCsdNbNgiLYiP4WjsfLUuFmCfnjdF6jKe2R9NKl4WFN+HZPGHJZ9lnLP7f9ZnKe3U9nuWD0szirmj+migUg==} engines: {node: '>=12.0.0'} @@ -7154,11 +7708,15 @@ packages: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} + postcss@8.5.8: + resolution: {integrity: sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==} + engines: {node: ^10 || ^12 || >=14} + preact@10.24.2: resolution: {integrity: sha512-1cSoF0aCC8uaARATfrlz4VCBqE8LwZwRfLgkxJOQwAlQt6ayTmi0D9OF7nXid1POI5SZidFuG9CnlXbDfLqY/Q==} - preact@10.29.0: - resolution: {integrity: sha512-wSAGyk2bYR1c7t3SZ3jHcM6xy0lcBcDel6lODcs9ME6Th++Dx2KU+6D3HD8wMMKGA8Wpw7OMd3/4RGzYRpzwRg==} + preact@10.29.1: + resolution: {integrity: sha512-gQCLc/vWroE8lIpleXtdJhTFDogTdZG9AjMUpVkDf2iTCNwYNWA+u16dL41TqUDJO4gm2IgrcMv3uTpjd4Pwmg==} prettier@3.8.1: resolution: {integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==} @@ -7254,10 +7812,10 @@ packages: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} - react-dom@19.1.0: - resolution: {integrity: sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==} + react-dom@19.2.4: + resolution: {integrity: sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==} peerDependencies: - react: ^19.1.0 + react: ^19.2.4 react-error-boundary@6.1.1: resolution: {integrity: sha512-BrYwPOdXi5mqkk5lw+Uvt0ThHx32rCt3BkukS4X23A2AIWDPSGX6iaWTc0y9TU/mHDA/6qOSGel+B2ERkOvD1w==} @@ -7291,8 +7849,8 @@ packages: react: ^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-refresh@0.17.0: - resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==} + react-refresh@0.18.0: + resolution: {integrity: sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==} engines: {node: '>=0.10.0'} react-remove-scroll-bar@2.3.8: @@ -7360,8 +7918,8 @@ packages: react-dom: optional: true - react@19.1.0: - resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==} + react@19.2.4: + resolution: {integrity: sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==} engines: {node: '>=0.10.0'} readable-stream@2.3.8: @@ -7428,6 +7986,14 @@ packages: rehype-class-names@2.0.0: resolution: {integrity: sha512-jldCIiAEvXKdq8hqr5f5PzNdIDkvHC6zfKhwta9oRoMu7bn0W7qLES/JrrjBvr9rKz3nJ8x4vY1EWI+dhjHVZQ==} + rehype-mermaid@3.0.0: + resolution: {integrity: sha512-fxrD5E4Fa1WXUjmjNDvLOMT4XB1WaxcfycFIWiYU0yEMQhcTDElc9aDFnbDFRLxG1Cfo1I3mfD5kg4sjlWaB+Q==} + peerDependencies: + playwright: '1' + peerDependenciesMeta: + playwright: + optional: true + rehype-recma@1.0.0: resolution: {integrity: sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==} @@ -7503,10 +8069,6 @@ packages: engines: {node: '>= 0.4'} hasBin: true - restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} - restore-cursor@4.0.0: resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -7522,26 +8084,30 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + robust-predicates@3.0.3: + resolution: {integrity: sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA==} + + rolldown@1.0.0-rc.12: + resolution: {integrity: sha512-yP4USLIMYrwpPHEFB5JGH1uxhcslv6/hL0OyvTuY+3qlOSJvZ7ntYnoWpehBxufkgN0cvXxppuTu5hHa/zPh+A==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + rollup@4.59.0: resolution: {integrity: sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + roughjs@4.6.6: + resolution: {integrity: sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==} + rpc-websockets@9.3.3: resolution: {integrity: sha512-OkCsBBzrwxX4DoSv4Zlf9DgXKRB0MzVfCFg5MC+fNnf9ktr4SMWjsri0VNZQlDbCnGcImT6KNEv4ZoxktQhdpA==} - rrweb-cssom@0.8.0: - resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==} - - run-async@2.4.1: - resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} - engines: {node: '>=0.12.0'} - run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - rxjs@7.8.2: - resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + rw@1.3.3: + resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} @@ -7564,11 +8130,8 @@ packages: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} - scheduler@0.26.0: - resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==} - - scuid@1.1.0: - resolution: {integrity: sha512-MuCAyrGZcTLfQoH2XoBlQ8C6bzwN88XT/0slOGz0pn8+gIP85BOAfYa44ZXQUTOwRwPU0QvgU+V+OSajl/59Xg==} + scheduler@0.27.0: + resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} @@ -7664,26 +8227,14 @@ packages: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} - slash@5.1.0: - resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} - engines: {node: '>=14.16'} - - slice-ansi@3.0.0: - resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} - engines: {node: '>=8'} - - slice-ansi@4.0.0: - resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} - engines: {node: '>=10'} - - slice-ansi@5.0.0: - resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} - engines: {node: '>=12'} - slice-ansi@7.1.2: resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==} engines: {node: '>=18'} + slice-ansi@8.0.0: + resolution: {integrity: sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==} + engines: {node: '>=20'} + slow-redact@0.3.2: resolution: {integrity: sha512-MseHyi2+E/hBRqdOi5COy6wZ7j7DxXRz9NkseavNYSvvWC06D8a5cidVZX3tcG5eCW3NIyVU4zT63hw0Q486jw==} @@ -7741,8 +8292,8 @@ packages: resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} engines: {node: '>= 0.8'} - std-env@3.10.0: - resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} + std-env@4.0.0: + resolution: {integrity: sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==} stdin-discarder@0.1.0: resolution: {integrity: sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==} @@ -7772,10 +8323,6 @@ packages: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} - string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} - string-width@6.1.0: resolution: {integrity: sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ==} engines: {node: '>=16'} @@ -7784,6 +8331,10 @@ packages: resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} engines: {node: '>=18'} + string-width@8.2.0: + resolution: {integrity: sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw==} + engines: {node: '>=20'} + string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} @@ -7805,17 +8356,10 @@ packages: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} - strip-final-newline@3.0.0: - resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} - engines: {node: '>=12'} - strip-indent@3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} - strip-literal@3.1.0: - resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==} - style-to-js@1.1.21: resolution: {integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==} @@ -7836,6 +8380,9 @@ packages: stylis@4.2.0: resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} + stylis@4.3.6: + resolution: {integrity: sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==} + superstruct@1.0.4: resolution: {integrity: sha512-7JpaAoX2NGyoFlI9NBh66BQXGONc+uE+MRS5i2iOBKuS4e+ccgMDjATgZldkah+33DakBxDHiss9kvUcGAO8UQ==} engines: {node: '>=14.0.0'} @@ -7866,40 +8413,25 @@ packages: resolution: {integrity: sha512-IELLEvzHuCfc1uTsshPK58ViSdNqXxlml1U+fmwJIKLYKOr/rAtBrorE2RYm5IHaMpDNlmC0fr1LAvdXvyheEQ==} engines: {node: '>=18'} - sync-fetch@0.6.0-2: - resolution: {integrity: sha512-c7AfkZ9udatCuAy9RSfiGPpeOKKUAUK5e1cXadLOGUjasdxqYqAK0jTNkM/FSEyJ3a5Ra27j/tw/PS0qLmaF/A==} - engines: {node: '>=18'} - tabbable@6.4.0: resolution: {integrity: sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==} - tailwindcss@4.0.7: - resolution: {integrity: sha512-yH5bPPyapavo7L+547h3c4jcBXcrKwybQRjwdEIVAd9iXRvy/3T1CC6XSQEgZtRySjKfqvo3Cc0ZF1DTheuIdA==} + tailwindcss@4.1.15: + resolution: {integrity: sha512-k2WLnWkYFkdpRv+Oby3EBXIyQC8/s1HOFMBUViwtAh6Z5uAozeUSMQlIsn/c6Q2iJzqG6aJT3wdPaRNj70iYxQ==} tapable@2.3.0: resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} engines: {node: '>=6'} - test-exclude@7.0.2: - resolution: {integrity: sha512-u9E6A+ZDYdp7a4WnarkXPZOx8Ilz46+kby6p1yZ8zsGTz9gYa6FIS7lj2oezzNKmtdyyJNNmmXDppga5GB7kSw==} - engines: {node: '>=18'} - text-encoding-utf-8@1.0.2: resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} - text-extensions@2.4.0: - resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==} - engines: {node: '>=8'} - thread-stream@0.15.2: resolution: {integrity: sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA==} thread-stream@3.1.0: resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==} - through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - timeout-signal@2.0.0: resolution: {integrity: sha512-YBGpG4bWsHoPvofT6y/5iqulfXIiIErl5B0LdtHT1mGXDFTAhhRrbUpTvBgYbovr+3cKblya2WAOcpoy90XguA==} engines: {node: '>=16'} @@ -7910,37 +8442,30 @@ packages: tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} - tinyexec@0.3.2: - resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} - tinyexec@1.0.2: resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==} engines: {node: '>=18'} + tinyexec@1.0.4: + resolution: {integrity: sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==} + engines: {node: '>=18'} + tinyglobby@0.2.15: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} - tinypool@1.1.1: - resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} - engines: {node: ^18.0.0 || >=20.0.0} - - tinyrainbow@2.0.0: - resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} - engines: {node: '>=14.0.0'} - - tinyspy@4.0.4: - resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==} + tinyrainbow@3.1.0: + resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==} engines: {node: '>=14.0.0'} title-case@3.0.3: resolution: {integrity: sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA==} - tldts-core@6.1.86: - resolution: {integrity: sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==} + tldts-core@7.0.27: + resolution: {integrity: sha512-YQ7uPjgWUibIK6DW5lrKujGwUKhLevU4hcGbP5O6TcIUb+oTjJYJVWPS4nZsIHrEEEG6myk/oqAJUEQmpZrHsg==} - tldts@6.1.86: - resolution: {integrity: sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==} + tldts@7.0.27: + resolution: {integrity: sha512-I4FZcVFcqCRuT0ph6dCDpPuO4Xgzvh+spkcTr1gK7peIvxWauoloVO0vuy1FQnijT63ss6AsHB6+OIM4aXHbPg==} hasBin: true to-buffer@1.2.2: @@ -7958,16 +8483,16 @@ packages: toml@3.0.0: resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} - tough-cookie@5.1.2: - resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==} + tough-cookie@6.0.1: + resolution: {integrity: sha512-LktZQb3IeoUWB9lqR5EWTHgW/VTITCXg4D21M+lvybRVdylLrRMnqaIONLVb5mav8vM19m44HIcGq4qASeu2Qw==} engines: {node: '>=16'} tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - tr46@5.1.1: - resolution: {integrity: sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==} - engines: {node: '>=18'} + tr46@6.0.0: + resolution: {integrity: sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==} + engines: {node: '>=20'} trim-lines@3.0.1: resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} @@ -7975,6 +8500,10 @@ packages: trough@2.2.0: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} + ts-dedent@2.2.0: + resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} + engines: {node: '>=6.10'} + ts-log@2.2.7: resolution: {integrity: sha512-320x5Ggei84AxzlXp91QkIGSw5wgaLT6GeAH0KsqDmRZdVWW2OiSeVvElVoatk3f7nicwXlElXsoFkARiGE2yg==} @@ -7992,16 +8521,6 @@ packages: '@swc/wasm': optional: 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==} @@ -8022,21 +8541,25 @@ packages: twoslash-protocol@0.2.12: resolution: {integrity: sha512-5qZLXVYfZ9ABdjqbvPc4RWMr7PrpPaaDSeaYY55vl/w1j6H6kzsWK/urAEIXlzYlyrFmyz1UbwIt+AA0ck+wbg==} + twoslash-protocol@0.3.6: + resolution: {integrity: sha512-FHGsJ9Q+EsNr5bEbgG3hnbkvEBdW5STgPU824AHUjB4kw0Dn4p8tABT7Ncg1Ie6V0+mDg3Qpy41VafZXcQhWMA==} + twoslash@0.2.12: resolution: {integrity: sha512-tEHPASMqi7kqwfJbkk7hc/4EhlrKCSLcur+TcvYki3vhIfaRMXnXjaYFgXpoZRbT6GdprD4tGuVBEmTpUgLBsw==} peerDependencies: typescript: '*' - type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} + twoslash@0.3.6: + resolution: {integrity: sha512-VuI5OKl+MaUO9UIW3rXKoPgHI3X40ZgB/j12VY6h98Ae1mCBihjPvhOPeJWlxCYcmSbmeZt5ZKkK0dsVtp+6pA==} + peerDependencies: + typescript: ^5.5.0 typed-array-buffer@1.0.3: resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} engines: {node: '>= 0.4'} - typedoc-github-theme@0.3.1: - resolution: {integrity: sha512-j6PmkAGmf/MGCzYjQcUH6jS9djPsNl/IoTXooxC+MoeMkBhbmPyKJlpR6Lw12BLoe2OYpYA2J1KMktUJXp/8Sw==} + typedoc-github-theme@0.4.0: + resolution: {integrity: sha512-lo/hr4EFZxq0SsMGeAscKUzljIKFgrJf5fb4nOAJcqaiSShQv7kzwF6M1s2fVRvUyx6UsmD4zEb+MtKkbucYpg==} engines: {node: '>=18.0.0'} peerDependencies: typedoc: ~0.28.0 @@ -8056,15 +8579,15 @@ packages: peerDependencies: typedoc: '>=0.22.x <0.29.x' - typedoc@0.28.17: - resolution: {integrity: sha512-ZkJ2G7mZrbxrKxinTQMjFqsCoYY6a5Luwv2GKbTnBCEgV2ihYm5CflA9JnJAwH0pZWavqfYxmDkFHPt4yx2oDQ==} + typedoc@0.28.18: + resolution: {integrity: sha512-NTWTUOFRQ9+SGKKTuWKUioUkjxNwtS3JDRPVKZAXGHZy2wCA8bdv2iJiyeePn0xkmK+TCCqZFT0X7+2+FLjngA==} engines: {node: '>= 18', pnpm: '>= 10'} hasBin: true peerDependencies: - typescript: 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x || 5.9.x + typescript: 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x || 5.9.x || 6.0.x - typescript@5.9.3: - resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + typescript@6.0.2: + resolution: {integrity: sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==} engines: {node: '>=14.17'} hasBin: true @@ -8105,17 +8628,16 @@ packages: undici-types@7.22.0: resolution: {integrity: sha512-RKZvifiL60xdsIuC80UY0dq8Z7DbJUV8/l2hOVbyZAxBzEeQU4Z58+4ZzJ6WN2Lidi9KzT5EbiGX+PI/UGYuRw==} - unicorn-magic@0.1.0: - resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} - engines: {node: '>=18'} - - unicorn-magic@0.3.0: - resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} - engines: {node: '>=18'} + undici@7.24.7: + resolution: {integrity: sha512-H/nlJ/h0ggGC+uRL3ovD+G0i4bqhvsDOpbDv7At5eFLlj2b41L8QliGbnl2H7SnDiYhENphh1tQFJZf+MyfLsQ==} + engines: {node: '>=20.18.1'} unified@11.0.5: resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} + unist-util-find-after@5.0.0: + resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} + unist-util-is@6.0.1: resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} @@ -8128,6 +8650,9 @@ packages: 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==} @@ -8239,8 +8764,8 @@ packages: '@types/react': optional: true - use-debounce@10.1.0: - resolution: {integrity: sha512-lu87Za35V3n/MyMoEpD5zJv0k7hCn0p+V/fK2kWD+3k2u3kOCwO593UArbczg1fhfs2rqPEnHpULJ3KmGdDzvg==} + use-debounce@10.1.1: + resolution: {integrity: sha512-kvds8BHR2k28cFsxW8k3nc/tRga2rs1RHYCqmmGqb90MEeE++oALwzh2COiuBLO1/QXiOuShXoSN2ZpWnMmvuQ==} engines: {node: '>= 16.0.0'} peerDependencies: react: '*' @@ -8280,6 +8805,10 @@ packages: util@0.12.5: resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + uuid@11.1.0: + resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} + hasBin: true + uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true @@ -8330,6 +8859,12 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} + vfile-location@5.0.3: + resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} + + vfile-matter@5.0.1: + resolution: {integrity: sha512-o6roP82AiX0XfkyTHyRCMXgHfltUNlXSEqCIS80f+mbAyiQBE2fxtDVMtseyytGx75sihiJFo/zR6r/4LTs2Cw==} + vfile-message@4.0.3: resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} @@ -8357,42 +8892,77 @@ packages: engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true - vite-plugin-sitemap@0.7.1: - resolution: {integrity: sha512-4NRTkiWytLuAmcikckrLcLl9iYA20+5v6l8XshcOrzxH1WR8H0O3S6sTQYfjMrE8su/LG6Y0cTodvOdcOIxaLw==} + vite-plugin-sitemap@0.8.2: + resolution: {integrity: sha512-bqIw6NVOXg6je81lzX8Lm0vjf8/QSAp8di8fYQzZ3ZdVicOm8+6idBGALJiy1R1FiXNIK8rgORO6HBqXyHW+iQ==} - vite-tsconfig-paths@5.1.4: - resolution: {integrity: sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w==} + vite@7.3.1: + resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true peerDependencies: - vite: '*' + '@types/node': ^20.19.0 || >=22.12.0 + jiti: '>=1.21.0' + less: ^4.0.0 + lightningcss: ^1.21.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 peerDependenciesMeta: - vite: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: optional: true - vite@6.4.1: - resolution: {integrity: sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + vite@8.0.5: + resolution: {integrity: sha512-nmu43Qvq9UopTRfMx2jOYW5l16pb3iDC1JH6yMuPkpVbzK0k+L7dfsEDH4jRgYFmsg0sTAqkojoZgzLMlwHsCQ==} + engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + '@types/node': ^20.19.0 || >=22.12.0 + '@vitejs/devtools': ^0.1.0 + esbuild: ^0.27.0 || ^0.28.0 jiti: '>=1.21.0' - less: '*' - lightningcss: ^1.21.0 - sass: '*' - sass-embedded: '*' - stylus: '*' - sugarss: '*' + less: ^4.0.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 terser: ^5.16.0 tsx: ^4.8.1 yaml: ^2.4.2 peerDependenciesMeta: '@types/node': optional: true + '@vitejs/devtools': + optional: true + esbuild: + optional: true jiti: optional: true less: optional: true - lightningcss: - optional: true sass: optional: true sass-embedded: @@ -8408,26 +8978,33 @@ packages: yaml: optional: true - vitest@3.2.4: - resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + vitest@4.1.2: + resolution: {integrity: sha512-xjR1dMTVHlFLh98JE3i/f/WePqJsah4A0FK9cc8Ehp9Udk0AZk6ccpIZhh1qJ/yxVWRZ+Q54ocnD8TXmkhspGg==} + engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' - '@types/debug': ^4.1.12 - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - '@vitest/browser': 3.2.4 - '@vitest/ui': 3.2.4 + '@opentelemetry/api': ^1.9.0 + '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 + '@vitest/browser-playwright': 4.1.2 + '@vitest/browser-preview': 4.1.2 + '@vitest/browser-webdriverio': 4.1.2 + '@vitest/ui': 4.1.2 happy-dom: '*' jsdom: '*' + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: '@edge-runtime/vm': optional: true - '@types/debug': + '@opentelemetry/api': optional: true '@types/node': optional: true - '@vitest/browser': + '@vitest/browser-playwright': + optional: true + '@vitest/browser-preview': + optional: true + '@vitest/browser-webdriverio': optional: true '@vitest/ui': optional: true @@ -8436,13 +9013,34 @@ packages: jsdom: optional: true - vocs@1.0.11: - resolution: {integrity: sha512-/hx66HYeqUaoF+RHl3t4CqNrHDQQSLdGrsAMIT8GmCspg0aOSpNxgrBxzqilKKQTNdsyRAZ7MgzSpp93e3T2jw==} + vocs@1.4.1: + resolution: {integrity: sha512-PwCODbht+/0f6wtAyz5czqdWaMX80KlxOc6Mkqfd0u6bboTZ+YcyBuZaiQwJ4lkDE6NvSrCosPVD5CxGyvtitg==} + engines: {node: '>=22'} hasBin: true peerDependencies: react: ^19 react-dom: ^19 + vscode-jsonrpc@8.2.0: + resolution: {integrity: sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==} + engines: {node: '>=14.0.0'} + + 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.17.5: + resolution: {integrity: sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==} + + vscode-languageserver@9.0.1: + resolution: {integrity: sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==} + hasBin: true + + vscode-uri@3.1.0: + resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} + w3c-xmlserializer@5.0.0: resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} engines: {node: '>=18'} @@ -8458,8 +9056,8 @@ packages: typescript: optional: true - wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + web-namespaces@2.0.1: + resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} web-streams-polyfill@3.3.3: resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} @@ -8471,25 +9069,24 @@ packages: webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - webidl-conversions@7.0.0: - resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} - engines: {node: '>=12'} + webidl-conversions@8.0.1: + resolution: {integrity: sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==} + engines: {node: '>=20'} webpack-virtual-modules@0.6.2: resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} - whatwg-encoding@3.1.1: - resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} - engines: {node: '>=18'} - deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation - whatwg-mimetype@4.0.0: resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} engines: {node: '>=18'} - whatwg-url@14.2.0: - resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==} - engines: {node: '>=18'} + whatwg-mimetype@5.0.0: + resolution: {integrity: sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw==} + engines: {node: '>=20'} + + whatwg-url@16.0.1: + resolution: {integrity: sha512-1to4zXBxmXHV3IiSSEInrreIlu02vUOvrhxJJH5vcxYTBDAx51cqZiKdyTxlecdKNSjj8EcxGBxNf6Vg+945gw==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} @@ -8519,10 +9116,6 @@ packages: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} - wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} - wrap-ansi@9.0.2: resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} engines: {node: '>=18'} @@ -8578,6 +9171,18 @@ packages: utf-8-validate: optional: true + ws@8.20.0: + resolution: {integrity: sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + xml-name-validator@5.0.0: resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} engines: {node: '>=18'} @@ -8603,9 +9208,6 @@ packages: yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - yaml-ast-parser@0.0.43: - resolution: {integrity: sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==} - yaml@1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} @@ -8643,6 +9245,10 @@ packages: resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==} engines: {node: '>=12.20'} + yoctocolors-cjs@2.1.3: + resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==} + engines: {node: '>=18'} + zod@3.22.4: resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} @@ -8729,26 +9335,33 @@ packages: snapshots: - '@0no-co/graphql.web@1.2.0(graphql@16.13.1)': + '@0no-co/graphql.web@1.2.0(graphql@16.13.2)': optionalDependencies: - graphql: 16.13.1 + graphql: 16.13.2 - '@0no-co/graphqlsp@1.15.2(graphql@16.13.1)(typescript@5.9.3)': + '@0no-co/graphqlsp@1.15.2(graphql@16.13.2)(typescript@6.0.2)': dependencies: - '@gql.tada/internal': 1.0.8(graphql@16.13.1)(typescript@5.9.3) - graphql: 16.13.1 - typescript: 5.9.3 + '@gql.tada/internal': 1.0.8(graphql@16.13.2)(typescript@6.0.2) + graphql: 16.13.2 + typescript: 6.0.2 + + '@aave/account@0.2.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6))(wagmi@2.19.5(@tanstack/query-core@5.96.1)(@tanstack/react-query@5.96.1(react@19.2.4))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6))(zod@4.3.6))': + optionalDependencies: + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + viem: 2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) + wagmi: 2.19.5(@tanstack/query-core@5.96.1)(@tanstack/react-query@5.96.1(react@19.2.4))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6))(zod@4.3.6) '@adobe/css-tools@4.4.4': {} '@adraffy/ens-normalize@1.11.1': {} - '@ampproject/remapping@2.3.0': + '@antfu/install-pkg@1.1.0': dependencies: - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 + package-manager-detector: 1.6.0 + tinyexec: 1.0.2 - '@ardatan/relay-compiler@12.0.0(graphql@16.13.1)': + '@ardatan/relay-compiler@12.0.0(graphql@16.13.2)': dependencies: '@babel/core': 7.29.0 '@babel/generator': 7.29.1 @@ -8761,7 +9374,7 @@ snapshots: fb-watchman: 2.0.2 fbjs: 3.0.5 glob: 7.2.3 - graphql: 16.13.1 + graphql: 16.13.2 immutable: 3.7.6 invariant: 2.2.4 nullthrows: 1.1.1 @@ -8772,23 +9385,14 @@ snapshots: - encoding - supports-color - '@ardatan/relay-compiler@12.0.3(graphql@16.13.1)': + '@ardatan/relay-compiler@13.0.1(graphql@16.13.2)': dependencies: - '@babel/generator': 7.29.1 - '@babel/parser': 7.29.0 - '@babel/runtime': 7.28.6 - chalk: 4.1.2 - fb-watchman: 2.0.2 - graphql: 16.13.1 - immutable: 3.7.6 + '@babel/runtime': 7.29.2 + graphql: 16.13.2 + immutable: 5.1.5 invariant: 2.2.4 - nullthrows: 1.1.1 - relay-runtime: 12.0.0 - signedsource: 1.0.0 - transitivePeerDependencies: - - encoding - '@ark-ui/react@5.34.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@ark-ui/react@5.34.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@internationalized/date': 3.11.0 '@zag-js/accordion': 1.35.3 @@ -8836,7 +9440,7 @@ snapshots: '@zag-js/qr-code': 1.35.3 '@zag-js/radio-group': 1.35.3 '@zag-js/rating-group': 1.35.3 - '@zag-js/react': 1.35.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@zag-js/react': 1.35.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@zag-js/scroll-area': 1.35.3 '@zag-js/select': 1.35.3 '@zag-js/signature-pad': 1.35.3 @@ -8855,16 +9459,26 @@ snapshots: '@zag-js/tree-view': 1.35.3 '@zag-js/types': 1.35.3 '@zag-js/utils': 1.35.3 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) - '@asamuzakjp/css-color@3.2.0': + '@asamuzakjp/css-color@5.1.1': dependencies: - '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) - '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) - '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) - '@csstools/css-tokenizer': 3.0.4 - lru-cache: 10.4.3 + '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + lru-cache: 11.2.7 + + '@asamuzakjp/dom-selector@7.0.4': + dependencies: + '@asamuzakjp/nwsapi': 2.3.9 + bidi-js: 1.0.3 + css-tree: 3.2.1 + is-potential-custom-element-name: 1.0.1 + lru-cache: 11.2.7 + + '@asamuzakjp/nwsapi@2.3.9': {} '@babel/code-frame@7.29.0': dependencies: @@ -8989,6 +9603,10 @@ snapshots: dependencies: '@babel/types': 7.29.0 + '@babel/parser@7.29.2': + dependencies: + '@babel/types': 7.29.0 + '@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -9207,17 +9825,17 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 - '@base-org/account@2.4.0(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(zod@3.25.76)': + '@base-org/account@2.4.0(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(use-sync-external-store@1.4.0(react@19.2.4))(utf-8-validate@5.0.10)(zod@4.3.6)': dependencies: - '@coinbase/cdp-sdk': 1.44.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@coinbase/cdp-sdk': 1.44.1(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10) '@noble/hashes': 1.4.0 clsx: 1.2.1 eventemitter3: 5.0.1 idb-keyval: 6.2.1 - ox: 0.6.9(typescript@5.9.3)(zod@3.25.76) + ox: 0.6.9(typescript@6.0.2)(zod@4.3.6) preact: 10.24.2 - viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - zustand: 5.0.3(@types/react@19.2.14)(react@19.1.0)(use-sync-external-store@1.4.0(react@19.1.0)) + viem: 2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) + zustand: 5.0.3(@types/react@19.2.14)(react@19.2.4)(use-sync-external-store@1.4.0(react@19.2.4)) transitivePeerDependencies: - '@types/react' - bufferutil @@ -9233,14 +9851,14 @@ snapshots: '@bcoe/v8-coverage@1.0.2': {} - '@bigmi/core@0.7.1(@types/react@19.2.14)(bs58@6.0.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))': + '@bigmi/core@0.7.1(@types/react@19.2.14)(bs58@6.0.0)(react@19.2.4)(typescript@6.0.2)(use-sync-external-store@1.4.0(react@19.2.4))': dependencies: '@noble/hashes': 1.8.0 bech32: 2.0.0 - bitcoinjs-lib: 7.0.1(typescript@5.9.3) + bitcoinjs-lib: 7.0.1(typescript@6.0.2) bs58: 6.0.0 eventemitter3: 5.0.4 - zustand: 5.0.12(@types/react@19.2.14)(react@19.1.0)(use-sync-external-store@1.4.0(react@19.1.0)) + zustand: 5.0.12(@types/react@19.2.14)(react@19.2.4)(use-sync-external-store@1.4.0(react@19.2.4)) transitivePeerDependencies: - '@types/react' - immer @@ -9248,54 +9866,54 @@ snapshots: - typescript - use-sync-external-store - '@biomejs/biome@1.9.4': + '@biomejs/biome@2.4.10': optionalDependencies: - '@biomejs/cli-darwin-arm64': 1.9.4 - '@biomejs/cli-darwin-x64': 1.9.4 - '@biomejs/cli-linux-arm64': 1.9.4 - '@biomejs/cli-linux-arm64-musl': 1.9.4 - '@biomejs/cli-linux-x64': 1.9.4 - '@biomejs/cli-linux-x64-musl': 1.9.4 - '@biomejs/cli-win32-arm64': 1.9.4 - '@biomejs/cli-win32-x64': 1.9.4 - - '@biomejs/cli-darwin-arm64@1.9.4': + '@biomejs/cli-darwin-arm64': 2.4.10 + '@biomejs/cli-darwin-x64': 2.4.10 + '@biomejs/cli-linux-arm64': 2.4.10 + '@biomejs/cli-linux-arm64-musl': 2.4.10 + '@biomejs/cli-linux-x64': 2.4.10 + '@biomejs/cli-linux-x64-musl': 2.4.10 + '@biomejs/cli-win32-arm64': 2.4.10 + '@biomejs/cli-win32-x64': 2.4.10 + + '@biomejs/cli-darwin-arm64@2.4.10': optional: true - '@biomejs/cli-darwin-x64@1.9.4': + '@biomejs/cli-darwin-x64@2.4.10': optional: true - '@biomejs/cli-linux-arm64-musl@1.9.4': + '@biomejs/cli-linux-arm64-musl@2.4.10': optional: true - '@biomejs/cli-linux-arm64@1.9.4': + '@biomejs/cli-linux-arm64@2.4.10': optional: true - '@biomejs/cli-linux-x64-musl@1.9.4': + '@biomejs/cli-linux-x64-musl@2.4.10': optional: true - '@biomejs/cli-linux-x64@1.9.4': + '@biomejs/cli-linux-x64@2.4.10': optional: true - '@biomejs/cli-win32-arm64@1.9.4': + '@biomejs/cli-win32-arm64@2.4.10': optional: true - '@biomejs/cli-win32-x64@1.9.4': + '@biomejs/cli-win32-x64@2.4.10': optional: true '@bitcoinerlab/secp256k1@1.2.0': dependencies: '@noble/curves': 1.9.7 - '@bootnodedev/db-subgraph@0.1.2(@parcel/watcher@2.5.6)(@tanstack/react-query@5.95.2(react@19.1.0))(@types/node@25.3.0)(bufferutil@4.1.0)(crossws@0.3.5)(graphql-tag@2.12.6(graphql@16.13.1))(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))': + '@bootnodedev/db-subgraph@0.1.2(@parcel/watcher@2.5.6)(@tanstack/react-query@5.96.1(react@19.2.4))(@types/node@25.3.0)(bufferutil@4.1.0)(crossws@0.3.5)(graphql-tag@2.12.6(graphql@16.13.2))(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6))': dependencies: - '@graphql-codegen/cli': 5.0.7(@parcel/watcher@2.5.6)(@types/node@25.3.0)(bufferutil@4.1.0)(crossws@0.3.5)(graphql@16.13.1)(typescript@5.9.3)(utf-8-validate@5.0.10) - '@graphql-codegen/typescript-graphql-request': 6.4.0(graphql-request@6.1.0(graphql@16.13.1))(graphql-tag@2.12.6(graphql@16.13.1))(graphql@16.13.1) - '@tanstack/react-query': 5.95.2(react@19.1.0) - graphql: 16.13.1 - graphql-request: 6.1.0(graphql@16.13.1) - react: 19.1.0 - viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@graphql-codegen/cli': 6.2.1(@parcel/watcher@2.5.6)(@types/node@25.3.0)(bufferutil@4.1.0)(crossws@0.3.5)(graphql@16.13.2)(typescript@6.0.2)(utf-8-validate@5.0.10) + '@graphql-codegen/typescript-graphql-request': 6.4.0(graphql-request@6.1.0(graphql@16.13.2))(graphql-tag@2.12.6(graphql@16.13.2))(graphql@16.13.2) + '@tanstack/react-query': 5.96.1(react@19.2.4) + graphql: 16.13.2 + graphql-request: 6.1.0(graphql@16.13.2) + react: 19.2.4 + viem: 2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) transitivePeerDependencies: - '@fastify/websocket' - '@parcel/watcher' @@ -9304,25 +9922,47 @@ snapshots: - cosmiconfig-toml-loader - crossws - encoding - - enquirer - graphql-sock - graphql-tag - supports-color - typescript - utf-8-validate - '@chakra-ui/react@3.34.0(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@braintree/sanitize-url@7.1.2': {} + + '@bramus/specificity@2.4.2': dependencies: - '@ark-ui/react': 5.34.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + css-tree: 3.2.1 + + '@chakra-ui/react@3.34.0(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@ark-ui/react': 5.34.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@emotion/is-prop-valid': 1.4.0 - '@emotion/react': 11.14.0(@types/react@19.2.14)(react@19.1.0) + '@emotion/react': 11.14.0(@types/react@19.2.14)(react@19.2.4) '@emotion/serialize': 1.3.3 - '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.1.0) + '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.2.4) '@emotion/utils': 1.4.2 '@pandacss/is-valid-prop': 1.8.2 csstype: 3.2.3 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + + '@chevrotain/cst-dts-gen@11.1.2': + dependencies: + '@chevrotain/gast': 11.1.2 + '@chevrotain/types': 11.1.2 + lodash-es: 4.17.23 + + '@chevrotain/gast@11.1.2': + dependencies: + '@chevrotain/types': 11.1.2 + lodash-es: 4.17.23 + + '@chevrotain/regexp-to-ast@11.1.2': {} + + '@chevrotain/types@11.1.2': {} + + '@chevrotain/utils@11.1.2': {} '@clack/core@0.3.5': dependencies: @@ -9335,19 +9975,19 @@ snapshots: picocolors: 1.1.1 sisteransi: 1.0.5 - '@coinbase/cdp-sdk@1.44.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)': + '@coinbase/cdp-sdk@1.44.1(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)': dependencies: - '@solana-program/system': 0.10.0(@solana/kit@5.5.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)) - '@solana-program/token': 0.9.0(@solana/kit@5.5.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)) - '@solana/kit': 5.5.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) - '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) - abitype: 1.0.6(typescript@5.9.3)(zod@3.25.76) + '@solana-program/system': 0.10.0(@solana/kit@5.5.1(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)) + '@solana-program/token': 0.9.0(@solana/kit@5.5.1(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)) + '@solana/kit': 5.5.1(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10) + abitype: 1.0.6(typescript@6.0.2)(zod@3.25.76) axios: 1.13.5 axios-retry: 4.5.0(axios@1.13.5) jose: 6.1.3 md5: 2.3.0 uncrypto: 0.1.3 - viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@3.25.76) zod: 3.25.76 transitivePeerDependencies: - bufferutil @@ -9366,21 +10006,21 @@ snapshots: eth-json-rpc-filters: 6.0.1 eventemitter3: 5.0.4 keccak: 3.0.4 - preact: 10.29.0 + preact: 10.29.1 sha.js: 2.4.12 transitivePeerDependencies: - supports-color - '@coinbase/wallet-sdk@4.3.6(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(zod@3.25.76)': + '@coinbase/wallet-sdk@4.3.6(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(use-sync-external-store@1.4.0(react@19.2.4))(utf-8-validate@5.0.10)(zod@4.3.6)': dependencies: '@noble/hashes': 1.4.0 clsx: 1.2.1 eventemitter3: 5.0.1 idb-keyval: 6.2.1 - ox: 0.6.9(typescript@5.9.3)(zod@3.25.76) + ox: 0.6.9(typescript@6.0.2)(zod@4.3.6) preact: 10.24.2 - viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - zustand: 5.0.3(@types/react@19.2.14)(react@19.1.0)(use-sync-external-store@1.4.0(react@19.1.0)) + viem: 2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) + zustand: 5.0.3(@types/react@19.2.14)(react@19.2.4)(use-sync-external-store@1.4.0(react@19.2.4)) transitivePeerDependencies: - '@types/react' - bufferutil @@ -9391,144 +10031,176 @@ snapshots: - utf-8-validate - zod - '@commitlint/cli@19.8.1(@types/node@25.3.0)(typescript@5.9.3)': + '@commitlint/cli@20.5.0(@types/node@25.3.0)(conventional-commits-parser@6.4.0)(typescript@6.0.2)': dependencies: - '@commitlint/format': 19.8.1 - '@commitlint/lint': 19.8.1 - '@commitlint/load': 19.8.1(@types/node@25.3.0)(typescript@5.9.3) - '@commitlint/read': 19.8.1 - '@commitlint/types': 19.8.1 + '@commitlint/format': 20.5.0 + '@commitlint/lint': 20.5.0 + '@commitlint/load': 20.5.0(@types/node@25.3.0)(typescript@6.0.2) + '@commitlint/read': 20.5.0(conventional-commits-parser@6.4.0) + '@commitlint/types': 20.5.0 tinyexec: 1.0.2 yargs: 17.7.2 transitivePeerDependencies: - '@types/node' + - conventional-commits-filter + - conventional-commits-parser - typescript - '@commitlint/config-conventional@19.8.1': + '@commitlint/config-conventional@20.5.0': dependencies: - '@commitlint/types': 19.8.1 - conventional-changelog-conventionalcommits: 7.0.2 + '@commitlint/types': 20.5.0 + conventional-changelog-conventionalcommits: 9.3.1 - '@commitlint/config-validator@19.8.1': + '@commitlint/config-validator@20.5.0': dependencies: - '@commitlint/types': 19.8.1 + '@commitlint/types': 20.5.0 ajv: 8.18.0 - '@commitlint/ensure@19.8.1': + '@commitlint/ensure@20.5.0': dependencies: - '@commitlint/types': 19.8.1 + '@commitlint/types': 20.5.0 lodash.camelcase: 4.3.0 lodash.kebabcase: 4.1.1 lodash.snakecase: 4.1.1 lodash.startcase: 4.4.0 lodash.upperfirst: 4.3.1 - '@commitlint/execute-rule@19.8.1': {} + '@commitlint/execute-rule@20.0.0': {} - '@commitlint/format@19.8.1': + '@commitlint/format@20.5.0': dependencies: - '@commitlint/types': 19.8.1 - chalk: 5.6.2 + '@commitlint/types': 20.5.0 + picocolors: 1.1.1 - '@commitlint/is-ignored@19.8.1': + '@commitlint/is-ignored@20.5.0': dependencies: - '@commitlint/types': 19.8.1 + '@commitlint/types': 20.5.0 semver: 7.7.4 - '@commitlint/lint@19.8.1': + '@commitlint/lint@20.5.0': dependencies: - '@commitlint/is-ignored': 19.8.1 - '@commitlint/parse': 19.8.1 - '@commitlint/rules': 19.8.1 - '@commitlint/types': 19.8.1 + '@commitlint/is-ignored': 20.5.0 + '@commitlint/parse': 20.5.0 + '@commitlint/rules': 20.5.0 + '@commitlint/types': 20.5.0 - '@commitlint/load@19.8.1(@types/node@25.3.0)(typescript@5.9.3)': + '@commitlint/load@20.5.0(@types/node@25.3.0)(typescript@6.0.2)': dependencies: - '@commitlint/config-validator': 19.8.1 - '@commitlint/execute-rule': 19.8.1 - '@commitlint/resolve-extends': 19.8.1 - '@commitlint/types': 19.8.1 - chalk: 5.6.2 - cosmiconfig: 9.0.0(typescript@5.9.3) - cosmiconfig-typescript-loader: 6.2.0(@types/node@25.3.0)(cosmiconfig@9.0.0(typescript@5.9.3))(typescript@5.9.3) - lodash.isplainobject: 4.0.6 - lodash.merge: 4.6.2 - lodash.uniq: 4.5.0 + '@commitlint/config-validator': 20.5.0 + '@commitlint/execute-rule': 20.0.0 + '@commitlint/resolve-extends': 20.5.0 + '@commitlint/types': 20.5.0 + cosmiconfig: 9.0.1(typescript@6.0.2) + cosmiconfig-typescript-loader: 6.2.0(@types/node@25.3.0)(cosmiconfig@9.0.1(typescript@6.0.2))(typescript@6.0.2) + is-plain-obj: 4.1.0 + lodash.mergewith: 4.6.2 + picocolors: 1.1.1 transitivePeerDependencies: - '@types/node' - typescript - '@commitlint/message@19.8.1': {} + '@commitlint/message@20.4.3': {} - '@commitlint/parse@19.8.1': + '@commitlint/parse@20.5.0': dependencies: - '@commitlint/types': 19.8.1 - conventional-changelog-angular: 7.0.0 - conventional-commits-parser: 5.0.0 + '@commitlint/types': 20.5.0 + conventional-changelog-angular: 8.3.1 + conventional-commits-parser: 6.4.0 - '@commitlint/read@19.8.1': + '@commitlint/read@20.5.0(conventional-commits-parser@6.4.0)': dependencies: - '@commitlint/top-level': 19.8.1 - '@commitlint/types': 19.8.1 - git-raw-commits: 4.0.0 + '@commitlint/top-level': 20.4.3 + '@commitlint/types': 20.5.0 + git-raw-commits: 5.0.1(conventional-commits-parser@6.4.0) minimist: 1.2.8 tinyexec: 1.0.2 + transitivePeerDependencies: + - conventional-commits-filter + - conventional-commits-parser - '@commitlint/resolve-extends@19.8.1': + '@commitlint/resolve-extends@20.5.0': dependencies: - '@commitlint/config-validator': 19.8.1 - '@commitlint/types': 19.8.1 + '@commitlint/config-validator': 20.5.0 + '@commitlint/types': 20.5.0 global-directory: 4.0.1 import-meta-resolve: 4.2.0 lodash.mergewith: 4.6.2 resolve-from: 5.0.0 - '@commitlint/rules@19.8.1': + '@commitlint/rules@20.5.0': dependencies: - '@commitlint/ensure': 19.8.1 - '@commitlint/message': 19.8.1 - '@commitlint/to-lines': 19.8.1 - '@commitlint/types': 19.8.1 + '@commitlint/ensure': 20.5.0 + '@commitlint/message': 20.4.3 + '@commitlint/to-lines': 20.0.0 + '@commitlint/types': 20.5.0 - '@commitlint/to-lines@19.8.1': {} + '@commitlint/to-lines@20.0.0': {} - '@commitlint/top-level@19.8.1': + '@commitlint/top-level@20.4.3': dependencies: - find-up: 7.0.0 + escalade: 3.2.0 - '@commitlint/types@19.8.1': + '@commitlint/types@20.5.0': dependencies: - '@types/conventional-commits-parser': 5.0.2 - chalk: 5.6.2 + conventional-commits-parser: 6.4.0 + picocolors: 1.1.1 + + '@conventional-changelog/git-client@2.6.0(conventional-commits-parser@6.4.0)': + dependencies: + '@simple-libs/child-process-utils': 1.0.2 + '@simple-libs/stream-utils': 1.2.0 + semver: 7.7.4 + optionalDependencies: + conventional-commits-parser: 6.4.0 '@cspotcode/source-map-support@0.8.1': dependencies: '@jridgewell/trace-mapping': 0.3.9 - '@csstools/color-helpers@5.1.0': {} + '@csstools/color-helpers@6.0.2': {} - '@csstools/css-calc@2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': + '@csstools/css-calc@3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': dependencies: - '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) - '@csstools/css-tokenizer': 3.0.4 + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 - '@csstools/css-color-parser@3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': + '@csstools/css-color-parser@4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': dependencies: - '@csstools/color-helpers': 5.1.0 - '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) - '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) - '@csstools/css-tokenizer': 3.0.4 + '@csstools/color-helpers': 6.0.2 + '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 - '@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4)': + '@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0)': dependencies: - '@csstools/css-tokenizer': 3.0.4 + '@csstools/css-tokenizer': 4.0.0 - '@csstools/css-tokenizer@3.0.4': {} + '@csstools/css-syntax-patches-for-csstree@1.1.2(css-tree@3.2.1)': + optionalDependencies: + css-tree: 3.2.1 + + '@csstools/css-tokenizer@4.0.0': {} '@ecies/ciphers@0.2.5(@noble/ciphers@1.3.0)': dependencies: '@noble/ciphers': 1.3.0 + '@emnapi/core@1.9.2': + dependencies: + '@emnapi/wasi-threads': 1.2.1 + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.9.2': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.2.1': + dependencies: + tslib: 2.8.1 + optional: true + '@emotion/babel-plugin@11.13.5': dependencies: '@babel/helper-module-imports': 7.28.6(supports-color@5.5.0) @@ -9569,17 +10241,17 @@ snapshots: '@emotion/memoize@0.9.0': {} - '@emotion/react@11.14.0(@types/react@19.2.14)(react@19.1.0)': + '@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.4)': dependencies: '@babel/runtime': 7.28.6 '@emotion/babel-plugin': 11.13.5 '@emotion/cache': 11.14.0 '@emotion/serialize': 1.3.3 - '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.1.0) + '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.2.4) '@emotion/utils': 1.4.2 '@emotion/weak-memoize': 0.4.0 hoist-non-react-statics: 3.3.2 - react: 19.1.0 + react: 19.2.4 optionalDependencies: '@types/react': 19.2.14 transitivePeerDependencies: @@ -9601,9 +10273,9 @@ snapshots: '@emotion/unitless@0.7.5': {} - '@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@19.1.0)': + '@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@19.2.4)': dependencies: - react: 19.1.0 + react: 19.2.4 '@emotion/utils@1.4.2': {} @@ -9629,157 +10301,157 @@ snapshots: '@esbuild/aix-ppc64@0.25.12': optional: true - '@esbuild/aix-ppc64@0.27.3': + '@esbuild/aix-ppc64@0.27.4': optional: true '@esbuild/android-arm64@0.25.12': optional: true - '@esbuild/android-arm64@0.27.3': + '@esbuild/android-arm64@0.27.4': optional: true '@esbuild/android-arm@0.25.12': optional: true - '@esbuild/android-arm@0.27.3': + '@esbuild/android-arm@0.27.4': optional: true '@esbuild/android-x64@0.25.12': optional: true - '@esbuild/android-x64@0.27.3': + '@esbuild/android-x64@0.27.4': optional: true '@esbuild/darwin-arm64@0.25.12': optional: true - '@esbuild/darwin-arm64@0.27.3': + '@esbuild/darwin-arm64@0.27.4': optional: true '@esbuild/darwin-x64@0.25.12': optional: true - '@esbuild/darwin-x64@0.27.3': + '@esbuild/darwin-x64@0.27.4': optional: true '@esbuild/freebsd-arm64@0.25.12': optional: true - '@esbuild/freebsd-arm64@0.27.3': + '@esbuild/freebsd-arm64@0.27.4': optional: true '@esbuild/freebsd-x64@0.25.12': optional: true - '@esbuild/freebsd-x64@0.27.3': + '@esbuild/freebsd-x64@0.27.4': optional: true '@esbuild/linux-arm64@0.25.12': optional: true - '@esbuild/linux-arm64@0.27.3': + '@esbuild/linux-arm64@0.27.4': optional: true '@esbuild/linux-arm@0.25.12': optional: true - '@esbuild/linux-arm@0.27.3': + '@esbuild/linux-arm@0.27.4': optional: true '@esbuild/linux-ia32@0.25.12': optional: true - '@esbuild/linux-ia32@0.27.3': + '@esbuild/linux-ia32@0.27.4': optional: true '@esbuild/linux-loong64@0.25.12': optional: true - '@esbuild/linux-loong64@0.27.3': + '@esbuild/linux-loong64@0.27.4': optional: true '@esbuild/linux-mips64el@0.25.12': optional: true - '@esbuild/linux-mips64el@0.27.3': + '@esbuild/linux-mips64el@0.27.4': optional: true '@esbuild/linux-ppc64@0.25.12': optional: true - '@esbuild/linux-ppc64@0.27.3': + '@esbuild/linux-ppc64@0.27.4': optional: true '@esbuild/linux-riscv64@0.25.12': optional: true - '@esbuild/linux-riscv64@0.27.3': + '@esbuild/linux-riscv64@0.27.4': optional: true '@esbuild/linux-s390x@0.25.12': optional: true - '@esbuild/linux-s390x@0.27.3': + '@esbuild/linux-s390x@0.27.4': optional: true '@esbuild/linux-x64@0.25.12': optional: true - '@esbuild/linux-x64@0.27.3': + '@esbuild/linux-x64@0.27.4': optional: true '@esbuild/netbsd-arm64@0.25.12': optional: true - '@esbuild/netbsd-arm64@0.27.3': + '@esbuild/netbsd-arm64@0.27.4': optional: true '@esbuild/netbsd-x64@0.25.12': optional: true - '@esbuild/netbsd-x64@0.27.3': + '@esbuild/netbsd-x64@0.27.4': optional: true '@esbuild/openbsd-arm64@0.25.12': optional: true - '@esbuild/openbsd-arm64@0.27.3': + '@esbuild/openbsd-arm64@0.27.4': optional: true '@esbuild/openbsd-x64@0.25.12': optional: true - '@esbuild/openbsd-x64@0.27.3': + '@esbuild/openbsd-x64@0.27.4': optional: true '@esbuild/openharmony-arm64@0.25.12': optional: true - '@esbuild/openharmony-arm64@0.27.3': + '@esbuild/openharmony-arm64@0.27.4': optional: true '@esbuild/sunos-x64@0.25.12': optional: true - '@esbuild/sunos-x64@0.27.3': + '@esbuild/sunos-x64@0.27.4': optional: true '@esbuild/win32-arm64@0.25.12': optional: true - '@esbuild/win32-arm64@0.27.3': + '@esbuild/win32-arm64@0.27.4': optional: true '@esbuild/win32-ia32@0.25.12': optional: true - '@esbuild/win32-ia32@0.27.3': + '@esbuild/win32-ia32@0.27.4': optional: true '@esbuild/win32-x64@0.25.12': optional: true - '@esbuild/win32-x64@0.27.3': + '@esbuild/win32-x64@0.27.4': optional: true '@ethereumjs/common@3.2.0': @@ -9802,109 +10474,104 @@ snapshots: ethereum-cryptography: 2.2.1 micro-ftch: 0.3.1 - '@fastify/busboy@3.2.0': {} + '@exodus/bytes@1.15.0(@noble/hashes@1.8.0)': + optionalDependencies: + '@noble/hashes': 1.8.0 - '@floating-ui/core@1.7.4': - dependencies: - '@floating-ui/utils': 0.2.10 + '@fastify/busboy@3.2.0': {} '@floating-ui/core@1.7.5': dependencies: '@floating-ui/utils': 0.2.11 - '@floating-ui/dom@1.7.5': - dependencies: - '@floating-ui/core': 1.7.4 - '@floating-ui/utils': 0.2.10 - '@floating-ui/dom@1.7.6': dependencies: '@floating-ui/core': 1.7.5 '@floating-ui/utils': 0.2.11 - '@floating-ui/react-dom@2.1.7(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@floating-ui/react-dom@2.1.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@floating-ui/dom': 1.7.5 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@floating-ui/dom': 1.7.6 + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) - '@floating-ui/react@0.27.18(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@floating-ui/react@0.27.18(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@floating-ui/react-dom': 2.1.7(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@floating-ui/utils': 0.2.10 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@floating-ui/react-dom': 2.1.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@floating-ui/utils': 0.2.11 + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) tabbable: 6.4.0 - '@floating-ui/utils@0.2.10': {} - '@floating-ui/utils@0.2.11': {} - '@gemini-wallet/core@0.3.2(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))': + '@fortawesome/fontawesome-free@6.7.2': {} + + '@gemini-wallet/core@0.3.2(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6))': dependencies: '@metamask/rpc-errors': 7.0.2 eventemitter3: 5.0.1 - viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) transitivePeerDependencies: - supports-color - '@gerrit0/mini-shiki@3.22.0': + '@gerrit0/mini-shiki@3.23.0': dependencies: - '@shikijs/engine-oniguruma': 3.22.0 - '@shikijs/langs': 3.22.0 - '@shikijs/themes': 3.22.0 - '@shikijs/types': 3.22.0 + '@shikijs/engine-oniguruma': 3.23.0 + '@shikijs/langs': 3.23.0 + '@shikijs/themes': 3.23.0 + '@shikijs/types': 3.23.0 '@shikijs/vscode-textmate': 10.0.2 - '@gql.tada/cli-utils@1.7.2(@0no-co/graphqlsp@1.15.2(graphql@16.13.1)(typescript@5.9.3))(graphql@16.13.1)(typescript@5.9.3)': + '@gql.tada/cli-utils@1.7.2(@0no-co/graphqlsp@1.15.2(graphql@16.13.2)(typescript@6.0.2))(graphql@16.13.2)(typescript@6.0.2)': dependencies: - '@0no-co/graphqlsp': 1.15.2(graphql@16.13.1)(typescript@5.9.3) - '@gql.tada/internal': 1.0.8(graphql@16.13.1)(typescript@5.9.3) - graphql: 16.13.1 - typescript: 5.9.3 + '@0no-co/graphqlsp': 1.15.2(graphql@16.13.2)(typescript@6.0.2) + '@gql.tada/internal': 1.0.8(graphql@16.13.2)(typescript@6.0.2) + graphql: 16.13.2 + typescript: 6.0.2 - '@gql.tada/internal@1.0.8(graphql@16.13.1)(typescript@5.9.3)': + '@gql.tada/internal@1.0.8(graphql@16.13.2)(typescript@6.0.2)': dependencies: - '@0no-co/graphql.web': 1.2.0(graphql@16.13.1) - graphql: 16.13.1 - typescript: 5.9.3 + '@0no-co/graphql.web': 1.2.0(graphql@16.13.2) + graphql: 16.13.2 + typescript: 6.0.2 - '@graphql-codegen/add@5.0.3(graphql@16.13.1)': + '@graphql-codegen/add@6.0.0(graphql@16.13.2)': dependencies: - '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.13.1) - graphql: 16.13.1 + '@graphql-codegen/plugin-helpers': 6.2.1(graphql@16.13.2) + graphql: 16.13.2 tslib: 2.6.3 - '@graphql-codegen/cli@5.0.7(@parcel/watcher@2.5.6)(@types/node@25.3.0)(bufferutil@4.1.0)(crossws@0.3.5)(graphql@16.13.1)(typescript@5.9.3)(utf-8-validate@5.0.10)': + '@graphql-codegen/cli@6.2.1(@parcel/watcher@2.5.6)(@types/node@25.3.0)(bufferutil@4.1.0)(crossws@0.3.5)(graphql@16.13.2)(typescript@6.0.2)(utf-8-validate@5.0.10)': dependencies: '@babel/generator': 7.29.1 '@babel/template': 7.28.6 '@babel/types': 7.29.0 - '@graphql-codegen/client-preset': 4.8.3(graphql@16.13.1) - '@graphql-codegen/core': 4.0.2(graphql@16.13.1) - '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.13.1) - '@graphql-tools/apollo-engine-loader': 8.0.28(graphql@16.13.1) - '@graphql-tools/code-file-loader': 8.1.28(graphql@16.13.1) - '@graphql-tools/git-loader': 8.0.32(graphql@16.13.1) - '@graphql-tools/github-loader': 8.0.22(@types/node@25.3.0)(graphql@16.13.1) - '@graphql-tools/graphql-file-loader': 8.1.9(graphql@16.13.1) - '@graphql-tools/json-file-loader': 8.0.26(graphql@16.13.1) - '@graphql-tools/load': 8.1.8(graphql@16.13.1) - '@graphql-tools/prisma-loader': 8.0.17(@types/node@25.3.0)(bufferutil@4.1.0)(crossws@0.3.5)(graphql@16.13.1)(utf-8-validate@5.0.10) - '@graphql-tools/url-loader': 8.0.33(@types/node@25.3.0)(bufferutil@4.1.0)(crossws@0.3.5)(graphql@16.13.1)(utf-8-validate@5.0.10) - '@graphql-tools/utils': 10.11.0(graphql@16.13.1) + '@graphql-codegen/client-preset': 5.2.4(graphql@16.13.2) + '@graphql-codegen/core': 5.0.1(graphql@16.13.2) + '@graphql-codegen/plugin-helpers': 6.2.1(graphql@16.13.2) + '@graphql-tools/apollo-engine-loader': 8.0.28(graphql@16.13.2) + '@graphql-tools/code-file-loader': 8.1.28(graphql@16.13.2) + '@graphql-tools/git-loader': 8.0.32(graphql@16.13.2) + '@graphql-tools/github-loader': 9.1.0(@types/node@25.3.0)(graphql@16.13.2) + '@graphql-tools/graphql-file-loader': 8.1.12(graphql@16.13.2) + '@graphql-tools/json-file-loader': 8.0.26(graphql@16.13.2) + '@graphql-tools/load': 8.1.8(graphql@16.13.2) + '@graphql-tools/merge': 9.1.7(graphql@16.13.2) + '@graphql-tools/url-loader': 9.1.0(@types/node@25.3.0)(bufferutil@4.1.0)(crossws@0.3.5)(graphql@16.13.2)(utf-8-validate@5.0.10) + '@graphql-tools/utils': 11.0.0(graphql@16.13.2) + '@inquirer/prompts': 7.10.1(@types/node@25.3.0) '@whatwg-node/fetch': 0.10.13 chalk: 4.1.2 - cosmiconfig: 8.3.6(typescript@5.9.3) - debounce: 1.2.1 + cosmiconfig: 9.0.1(typescript@6.0.2) + debounce: 2.2.0 detect-indent: 6.1.0 - graphql: 16.13.1 - graphql-config: 5.1.5(@types/node@25.3.0)(bufferutil@4.1.0)(crossws@0.3.5)(graphql@16.13.1)(typescript@5.9.3)(utf-8-validate@5.0.10) - inquirer: 8.2.7(@types/node@25.3.0) + graphql: 16.13.2 + graphql-config: 5.1.6(@types/node@25.3.0)(bufferutil@4.1.0)(crossws@0.3.5)(graphql@16.13.2)(typescript@6.0.2)(utf-8-validate@5.0.10) is-glob: 4.0.3 - jiti: 1.21.7 + jiti: 2.6.1 json-to-pretty-yaml: 1.2.2 - listr2: 4.0.5 + listr2: 9.0.5 log-symbols: 4.1.0 micromatch: 4.0.8 shell-quote: 1.8.3 @@ -9921,275 +10588,253 @@ snapshots: - bufferutil - cosmiconfig-toml-loader - crossws - - encoding - - enquirer - graphql-sock - supports-color - typescript - utf-8-validate - '@graphql-codegen/client-preset@4.8.3(graphql@16.13.1)': + '@graphql-codegen/client-preset@5.2.4(graphql@16.13.2)': dependencies: '@babel/helper-plugin-utils': 7.28.6 '@babel/template': 7.28.6 - '@graphql-codegen/add': 5.0.3(graphql@16.13.1) - '@graphql-codegen/gql-tag-operations': 4.0.17(graphql@16.13.1) - '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.13.1) - '@graphql-codegen/typed-document-node': 5.1.2(graphql@16.13.1) - '@graphql-codegen/typescript': 4.1.6(graphql@16.13.1) - '@graphql-codegen/typescript-operations': 4.6.1(graphql@16.13.1) - '@graphql-codegen/visitor-plugin-common': 5.8.0(graphql@16.13.1) - '@graphql-tools/documents': 1.0.1(graphql@16.13.1) - '@graphql-tools/utils': 10.11.0(graphql@16.13.1) - '@graphql-typed-document-node/core': 3.2.0(graphql@16.13.1) - graphql: 16.13.1 + '@graphql-codegen/add': 6.0.0(graphql@16.13.2) + '@graphql-codegen/gql-tag-operations': 5.1.4(graphql@16.13.2) + '@graphql-codegen/plugin-helpers': 6.2.1(graphql@16.13.2) + '@graphql-codegen/typed-document-node': 6.1.7(graphql@16.13.2) + '@graphql-codegen/typescript': 5.0.9(graphql@16.13.2) + '@graphql-codegen/typescript-operations': 5.0.9(graphql@16.13.2) + '@graphql-codegen/visitor-plugin-common': 6.2.4(graphql@16.13.2) + '@graphql-tools/documents': 1.0.1(graphql@16.13.2) + '@graphql-tools/utils': 11.0.0(graphql@16.13.2) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.13.2) + graphql: 16.13.2 tslib: 2.6.3 - transitivePeerDependencies: - - encoding - '@graphql-codegen/core@4.0.2(graphql@16.13.1)': + '@graphql-codegen/core@5.0.1(graphql@16.13.2)': dependencies: - '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.13.1) - '@graphql-tools/schema': 10.0.31(graphql@16.13.1) - '@graphql-tools/utils': 10.11.0(graphql@16.13.1) - graphql: 16.13.1 + '@graphql-codegen/plugin-helpers': 6.2.1(graphql@16.13.2) + '@graphql-tools/schema': 10.0.31(graphql@16.13.2) + '@graphql-tools/utils': 11.0.0(graphql@16.13.2) + graphql: 16.13.2 tslib: 2.6.3 - '@graphql-codegen/gql-tag-operations@4.0.17(graphql@16.13.1)': + '@graphql-codegen/gql-tag-operations@5.1.4(graphql@16.13.2)': dependencies: - '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.13.1) - '@graphql-codegen/visitor-plugin-common': 5.8.0(graphql@16.13.1) - '@graphql-tools/utils': 10.11.0(graphql@16.13.1) + '@graphql-codegen/plugin-helpers': 6.2.1(graphql@16.13.2) + '@graphql-codegen/visitor-plugin-common': 6.2.4(graphql@16.13.2) + '@graphql-tools/utils': 11.0.0(graphql@16.13.2) auto-bind: 4.0.0 - graphql: 16.13.1 + graphql: 16.13.2 tslib: 2.6.3 - transitivePeerDependencies: - - encoding - '@graphql-codegen/plugin-helpers@3.1.2(graphql@16.13.1)': + '@graphql-codegen/plugin-helpers@3.1.2(graphql@16.13.2)': dependencies: - '@graphql-tools/utils': 9.2.1(graphql@16.13.1) + '@graphql-tools/utils': 9.2.1(graphql@16.13.2) change-case-all: 1.0.15 common-tags: 1.8.2 - graphql: 16.13.1 + graphql: 16.13.2 import-from: 4.0.0 lodash: 4.17.23 tslib: 2.4.1 - '@graphql-codegen/plugin-helpers@5.1.1(graphql@16.13.1)': + '@graphql-codegen/plugin-helpers@6.2.1(graphql@16.13.2)': dependencies: - '@graphql-tools/utils': 10.11.0(graphql@16.13.1) + '@graphql-tools/utils': 11.0.0(graphql@16.13.2) change-case-all: 1.0.15 common-tags: 1.8.2 - graphql: 16.13.1 + graphql: 16.13.2 import-from: 4.0.0 - lodash: 4.17.23 tslib: 2.6.3 - '@graphql-codegen/schema-ast@4.1.0(graphql@16.13.1)': + '@graphql-codegen/schema-ast@5.0.1(graphql@16.13.2)': dependencies: - '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.13.1) - '@graphql-tools/utils': 10.11.0(graphql@16.13.1) - graphql: 16.13.1 + '@graphql-codegen/plugin-helpers': 6.2.1(graphql@16.13.2) + '@graphql-tools/utils': 11.0.0(graphql@16.13.2) + graphql: 16.13.2 tslib: 2.6.3 - '@graphql-codegen/typed-document-node@5.1.2(graphql@16.13.1)': + '@graphql-codegen/typed-document-node@6.1.7(graphql@16.13.2)': dependencies: - '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.13.1) - '@graphql-codegen/visitor-plugin-common': 5.8.0(graphql@16.13.1) + '@graphql-codegen/plugin-helpers': 6.2.1(graphql@16.13.2) + '@graphql-codegen/visitor-plugin-common': 6.2.4(graphql@16.13.2) auto-bind: 4.0.0 change-case-all: 1.0.15 - graphql: 16.13.1 + graphql: 16.13.2 tslib: 2.6.3 - transitivePeerDependencies: - - encoding - '@graphql-codegen/typescript-graphql-request@6.4.0(graphql-request@6.1.0(graphql@16.13.1))(graphql-tag@2.12.6(graphql@16.13.1))(graphql@16.13.1)': + '@graphql-codegen/typescript-graphql-request@6.4.0(graphql-request@6.1.0(graphql@16.13.2))(graphql-tag@2.12.6(graphql@16.13.2))(graphql@16.13.2)': dependencies: - '@graphql-codegen/plugin-helpers': 3.1.2(graphql@16.13.1) - '@graphql-codegen/visitor-plugin-common': 2.13.8(graphql@16.13.1) + '@graphql-codegen/plugin-helpers': 3.1.2(graphql@16.13.2) + '@graphql-codegen/visitor-plugin-common': 2.13.8(graphql@16.13.2) auto-bind: 4.0.0 - graphql: 16.13.1 - graphql-request: 6.1.0(graphql@16.13.1) - graphql-tag: 2.12.6(graphql@16.13.1) + graphql: 16.13.2 + graphql-request: 6.1.0(graphql@16.13.2) + graphql-tag: 2.12.6(graphql@16.13.2) tslib: 2.8.1 transitivePeerDependencies: - encoding - supports-color - '@graphql-codegen/typescript-operations@4.6.1(graphql@16.13.1)': + '@graphql-codegen/typescript-operations@5.0.9(graphql@16.13.2)': dependencies: - '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.13.1) - '@graphql-codegen/typescript': 4.1.6(graphql@16.13.1) - '@graphql-codegen/visitor-plugin-common': 5.8.0(graphql@16.13.1) + '@graphql-codegen/plugin-helpers': 6.2.1(graphql@16.13.2) + '@graphql-codegen/typescript': 5.0.9(graphql@16.13.2) + '@graphql-codegen/visitor-plugin-common': 6.2.4(graphql@16.13.2) auto-bind: 4.0.0 - graphql: 16.13.1 + graphql: 16.13.2 tslib: 2.6.3 - transitivePeerDependencies: - - encoding - '@graphql-codegen/typescript@4.1.6(graphql@16.13.1)': + '@graphql-codegen/typescript@5.0.9(graphql@16.13.2)': dependencies: - '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.13.1) - '@graphql-codegen/schema-ast': 4.1.0(graphql@16.13.1) - '@graphql-codegen/visitor-plugin-common': 5.8.0(graphql@16.13.1) + '@graphql-codegen/plugin-helpers': 6.2.1(graphql@16.13.2) + '@graphql-codegen/schema-ast': 5.0.1(graphql@16.13.2) + '@graphql-codegen/visitor-plugin-common': 6.2.4(graphql@16.13.2) auto-bind: 4.0.0 - graphql: 16.13.1 + graphql: 16.13.2 tslib: 2.6.3 - transitivePeerDependencies: - - encoding - '@graphql-codegen/visitor-plugin-common@2.13.8(graphql@16.13.1)': + '@graphql-codegen/visitor-plugin-common@2.13.8(graphql@16.13.2)': dependencies: - '@graphql-codegen/plugin-helpers': 3.1.2(graphql@16.13.1) - '@graphql-tools/optimize': 1.4.0(graphql@16.13.1) - '@graphql-tools/relay-operation-optimizer': 6.5.18(graphql@16.13.1) - '@graphql-tools/utils': 9.2.1(graphql@16.13.1) + '@graphql-codegen/plugin-helpers': 3.1.2(graphql@16.13.2) + '@graphql-tools/optimize': 1.4.0(graphql@16.13.2) + '@graphql-tools/relay-operation-optimizer': 6.5.18(graphql@16.13.2) + '@graphql-tools/utils': 9.2.1(graphql@16.13.2) auto-bind: 4.0.0 change-case-all: 1.0.15 dependency-graph: 0.11.0 - graphql: 16.13.1 - graphql-tag: 2.12.6(graphql@16.13.1) + graphql: 16.13.2 + graphql-tag: 2.12.6(graphql@16.13.2) parse-filepath: 1.0.2 tslib: 2.4.1 transitivePeerDependencies: - encoding - supports-color - '@graphql-codegen/visitor-plugin-common@5.8.0(graphql@16.13.1)': + '@graphql-codegen/visitor-plugin-common@6.2.4(graphql@16.13.2)': dependencies: - '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.13.1) - '@graphql-tools/optimize': 2.0.0(graphql@16.13.1) - '@graphql-tools/relay-operation-optimizer': 7.0.27(graphql@16.13.1) - '@graphql-tools/utils': 10.11.0(graphql@16.13.1) + '@graphql-codegen/plugin-helpers': 6.2.1(graphql@16.13.2) + '@graphql-tools/optimize': 2.0.0(graphql@16.13.2) + '@graphql-tools/relay-operation-optimizer': 7.1.2(graphql@16.13.2) + '@graphql-tools/utils': 11.0.0(graphql@16.13.2) auto-bind: 4.0.0 change-case-all: 1.0.15 - dependency-graph: 0.11.0 - graphql: 16.13.1 - graphql-tag: 2.12.6(graphql@16.13.1) + dependency-graph: 1.0.0 + graphql: 16.13.2 + graphql-tag: 2.12.6(graphql@16.13.2) parse-filepath: 1.0.2 tslib: 2.6.3 - transitivePeerDependencies: - - encoding - '@graphql-hive/signal@1.0.0': {} + '@graphql-hive/signal@2.0.0': {} - '@graphql-tools/apollo-engine-loader@8.0.28(graphql@16.13.1)': + '@graphql-tools/apollo-engine-loader@8.0.28(graphql@16.13.2)': dependencies: - '@graphql-tools/utils': 11.0.0(graphql@16.13.1) + '@graphql-tools/utils': 11.0.0(graphql@16.13.2) '@whatwg-node/fetch': 0.10.13 - graphql: 16.13.1 + graphql: 16.13.2 sync-fetch: 0.6.0 tslib: 2.8.1 - '@graphql-tools/batch-execute@9.0.19(graphql@16.13.1)': + '@graphql-tools/batch-execute@10.0.8(graphql@16.13.2)': dependencies: - '@graphql-tools/utils': 10.11.0(graphql@16.13.1) + '@graphql-tools/utils': 11.0.0(graphql@16.13.2) '@whatwg-node/promise-helpers': 1.3.2 dataloader: 2.2.3 - graphql: 16.13.1 + graphql: 16.13.2 tslib: 2.8.1 - '@graphql-tools/code-file-loader@8.1.28(graphql@16.13.1)': + '@graphql-tools/code-file-loader@8.1.28(graphql@16.13.2)': dependencies: - '@graphql-tools/graphql-tag-pluck': 8.3.27(graphql@16.13.1) - '@graphql-tools/utils': 11.0.0(graphql@16.13.1) + '@graphql-tools/graphql-tag-pluck': 8.3.27(graphql@16.13.2) + '@graphql-tools/utils': 11.0.0(graphql@16.13.2) globby: 11.1.0 - graphql: 16.13.1 + graphql: 16.13.2 tslib: 2.8.1 unixify: 1.0.0 transitivePeerDependencies: - supports-color - '@graphql-tools/delegate@10.2.23(graphql@16.13.1)': + '@graphql-tools/delegate@12.0.13(graphql@16.13.2)': dependencies: - '@graphql-tools/batch-execute': 9.0.19(graphql@16.13.1) - '@graphql-tools/executor': 1.5.1(graphql@16.13.1) - '@graphql-tools/schema': 10.0.31(graphql@16.13.1) - '@graphql-tools/utils': 10.11.0(graphql@16.13.1) + '@graphql-tools/batch-execute': 10.0.8(graphql@16.13.2) + '@graphql-tools/executor': 1.5.1(graphql@16.13.2) + '@graphql-tools/schema': 10.0.31(graphql@16.13.2) + '@graphql-tools/utils': 11.0.0(graphql@16.13.2) '@repeaterjs/repeater': 3.0.6 '@whatwg-node/promise-helpers': 1.3.2 dataloader: 2.2.3 - dset: 3.1.4 - graphql: 16.13.1 + graphql: 16.13.2 tslib: 2.8.1 - '@graphql-tools/documents@1.0.1(graphql@16.13.1)': + '@graphql-tools/documents@1.0.1(graphql@16.13.2)': dependencies: - graphql: 16.13.1 + graphql: 16.13.2 lodash.sortby: 4.7.0 tslib: 2.8.1 - '@graphql-tools/executor-common@0.0.4(graphql@16.13.1)': + '@graphql-tools/executor-common@1.0.6(graphql@16.13.2)': dependencies: '@envelop/core': 5.5.1 - '@graphql-tools/utils': 10.11.0(graphql@16.13.1) - graphql: 16.13.1 + '@graphql-tools/utils': 11.0.0(graphql@16.13.2) + graphql: 16.13.2 - '@graphql-tools/executor-common@0.0.6(graphql@16.13.1)': + '@graphql-tools/executor-graphql-ws@3.1.5(bufferutil@4.1.0)(crossws@0.3.5)(graphql@16.13.2)(utf-8-validate@5.0.10)': dependencies: - '@envelop/core': 5.5.1 - '@graphql-tools/utils': 10.11.0(graphql@16.13.1) - graphql: 16.13.1 - - '@graphql-tools/executor-graphql-ws@2.0.7(bufferutil@4.1.0)(crossws@0.3.5)(graphql@16.13.1)(utf-8-validate@5.0.10)': - dependencies: - '@graphql-tools/executor-common': 0.0.6(graphql@16.13.1) - '@graphql-tools/utils': 10.11.0(graphql@16.13.1) + '@graphql-tools/executor-common': 1.0.6(graphql@16.13.2) + '@graphql-tools/utils': 11.0.0(graphql@16.13.2) '@whatwg-node/disposablestack': 0.0.6 - graphql: 16.13.1 - graphql-ws: 6.0.7(crossws@0.3.5)(graphql@16.13.1)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)) - isomorphic-ws: 5.0.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)) + graphql: 16.13.2 + graphql-ws: 6.0.7(crossws@0.3.5)(graphql@16.13.2)(ws@8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)) + isows: 1.0.7(ws@8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)) tslib: 2.8.1 - ws: 8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) + ws: 8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) transitivePeerDependencies: - '@fastify/websocket' - bufferutil - crossws - utf-8-validate - '@graphql-tools/executor-http@1.3.3(@types/node@25.3.0)(graphql@16.13.1)': + '@graphql-tools/executor-http@3.2.1(@types/node@25.3.0)(graphql@16.13.2)': dependencies: - '@graphql-hive/signal': 1.0.0 - '@graphql-tools/executor-common': 0.0.4(graphql@16.13.1) - '@graphql-tools/utils': 10.11.0(graphql@16.13.1) + '@graphql-hive/signal': 2.0.0 + '@graphql-tools/executor-common': 1.0.6(graphql@16.13.2) + '@graphql-tools/utils': 11.0.0(graphql@16.13.2) '@repeaterjs/repeater': 3.0.6 '@whatwg-node/disposablestack': 0.0.6 '@whatwg-node/fetch': 0.10.13 '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.13.1 + graphql: 16.13.2 meros: 1.3.2(@types/node@25.3.0) tslib: 2.8.1 transitivePeerDependencies: - '@types/node' - '@graphql-tools/executor-legacy-ws@1.1.25(bufferutil@4.1.0)(graphql@16.13.1)(utf-8-validate@5.0.10)': + '@graphql-tools/executor-legacy-ws@1.1.26(bufferutil@4.1.0)(graphql@16.13.2)(utf-8-validate@5.0.10)': dependencies: - '@graphql-tools/utils': 11.0.0(graphql@16.13.1) + '@graphql-tools/utils': 11.0.0(graphql@16.13.2) '@types/ws': 8.18.1 - graphql: 16.13.1 - isomorphic-ws: 5.0.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)) + graphql: 16.13.2 + isomorphic-ws: 5.0.0(ws@8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)) tslib: 2.8.1 - ws: 8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) + ws: 8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - utf-8-validate - '@graphql-tools/executor@1.5.1(graphql@16.13.1)': + '@graphql-tools/executor@1.5.1(graphql@16.13.2)': dependencies: - '@graphql-tools/utils': 11.0.0(graphql@16.13.1) - '@graphql-typed-document-node/core': 3.2.0(graphql@16.13.1) + '@graphql-tools/utils': 11.0.0(graphql@16.13.2) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.13.2) '@repeaterjs/repeater': 3.0.6 '@whatwg-node/disposablestack': 0.0.6 '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.13.1 + graphql: 16.13.2 tslib: 2.8.1 - '@graphql-tools/git-loader@8.0.32(graphql@16.13.1)': + '@graphql-tools/git-loader@8.0.32(graphql@16.13.2)': dependencies: - '@graphql-tools/graphql-tag-pluck': 8.3.27(graphql@16.13.1) - '@graphql-tools/utils': 11.0.0(graphql@16.13.1) - graphql: 16.13.1 + '@graphql-tools/graphql-tag-pluck': 8.3.27(graphql@16.13.2) + '@graphql-tools/utils': 11.0.0(graphql@16.13.2) + graphql: 16.13.2 is-glob: 4.0.3 micromatch: 4.0.8 tslib: 2.8.1 @@ -10197,155 +10842,133 @@ snapshots: transitivePeerDependencies: - supports-color - '@graphql-tools/github-loader@8.0.22(@types/node@25.3.0)(graphql@16.13.1)': + '@graphql-tools/github-loader@9.1.0(@types/node@25.3.0)(graphql@16.13.2)': dependencies: - '@graphql-tools/executor-http': 1.3.3(@types/node@25.3.0)(graphql@16.13.1) - '@graphql-tools/graphql-tag-pluck': 8.3.27(graphql@16.13.1) - '@graphql-tools/utils': 10.11.0(graphql@16.13.1) + '@graphql-tools/executor-http': 3.2.1(@types/node@25.3.0)(graphql@16.13.2) + '@graphql-tools/graphql-tag-pluck': 8.3.29(graphql@16.13.2) + '@graphql-tools/utils': 11.0.0(graphql@16.13.2) '@whatwg-node/fetch': 0.10.13 '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.13.1 - sync-fetch: 0.6.0-2 + graphql: 16.13.2 + sync-fetch: 0.6.0 tslib: 2.8.1 transitivePeerDependencies: - '@types/node' - supports-color - '@graphql-tools/graphql-file-loader@8.1.9(graphql@16.13.1)': + '@graphql-tools/graphql-file-loader@8.1.12(graphql@16.13.2)': dependencies: - '@graphql-tools/import': 7.1.9(graphql@16.13.1) - '@graphql-tools/utils': 11.0.0(graphql@16.13.1) + '@graphql-tools/import': 7.1.12(graphql@16.13.2) + '@graphql-tools/utils': 11.0.0(graphql@16.13.2) globby: 11.1.0 - graphql: 16.13.1 + graphql: 16.13.2 tslib: 2.8.1 unixify: 1.0.0 - transitivePeerDependencies: - - supports-color - '@graphql-tools/graphql-tag-pluck@8.3.27(graphql@16.13.1)': + '@graphql-tools/graphql-tag-pluck@8.3.27(graphql@16.13.2)': dependencies: '@babel/core': 7.29.0 '@babel/parser': 7.29.0 '@babel/plugin-syntax-import-assertions': 7.28.6(@babel/core@7.29.0) '@babel/traverse': 7.29.0(supports-color@5.5.0) '@babel/types': 7.29.0 - '@graphql-tools/utils': 11.0.0(graphql@16.13.1) - graphql: 16.13.1 + '@graphql-tools/utils': 11.0.0(graphql@16.13.2) + graphql: 16.13.2 tslib: 2.8.1 transitivePeerDependencies: - supports-color - '@graphql-tools/import@7.1.9(graphql@16.13.1)': + '@graphql-tools/graphql-tag-pluck@8.3.29(graphql@16.13.2)': dependencies: - '@graphql-tools/utils': 11.0.0(graphql@16.13.1) - '@theguild/federation-composition': 0.21.3(graphql@16.13.1) - graphql: 16.13.1 - resolve-from: 5.0.0 + '@babel/core': 7.29.0 + '@babel/parser': 7.29.2 + '@babel/plugin-syntax-import-assertions': 7.28.6(@babel/core@7.29.0) + '@babel/traverse': 7.29.0(supports-color@5.5.0) + '@babel/types': 7.29.0 + '@graphql-tools/utils': 11.0.0(graphql@16.13.2) + graphql: 16.13.2 tslib: 2.8.1 transitivePeerDependencies: - supports-color - '@graphql-tools/json-file-loader@8.0.26(graphql@16.13.1)': + '@graphql-tools/import@7.1.12(graphql@16.13.2)': dependencies: - '@graphql-tools/utils': 11.0.0(graphql@16.13.1) - globby: 11.1.0 - graphql: 16.13.1 + '@graphql-tools/utils': 11.0.0(graphql@16.13.2) + graphql: 16.13.2 + resolve-from: 5.0.0 tslib: 2.8.1 - unixify: 1.0.0 - '@graphql-tools/load@8.1.8(graphql@16.13.1)': + '@graphql-tools/json-file-loader@8.0.26(graphql@16.13.2)': dependencies: - '@graphql-tools/schema': 10.0.31(graphql@16.13.1) - '@graphql-tools/utils': 11.0.0(graphql@16.13.1) - graphql: 16.13.1 - p-limit: 3.1.0 + '@graphql-tools/utils': 11.0.0(graphql@16.13.2) + globby: 11.1.0 + graphql: 16.13.2 tslib: 2.8.1 + unixify: 1.0.0 - '@graphql-tools/merge@9.1.7(graphql@16.13.1)': + '@graphql-tools/load@8.1.8(graphql@16.13.2)': dependencies: - '@graphql-tools/utils': 11.0.0(graphql@16.13.1) - graphql: 16.13.1 + '@graphql-tools/schema': 10.0.31(graphql@16.13.2) + '@graphql-tools/utils': 11.0.0(graphql@16.13.2) + graphql: 16.13.2 + p-limit: 3.1.0 tslib: 2.8.1 - '@graphql-tools/optimize@1.4.0(graphql@16.13.1)': + '@graphql-tools/merge@9.1.7(graphql@16.13.2)': dependencies: - graphql: 16.13.1 + '@graphql-tools/utils': 11.0.0(graphql@16.13.2) + graphql: 16.13.2 tslib: 2.8.1 - '@graphql-tools/optimize@2.0.0(graphql@16.13.1)': + '@graphql-tools/optimize@1.4.0(graphql@16.13.2)': dependencies: - graphql: 16.13.1 + graphql: 16.13.2 tslib: 2.8.1 - '@graphql-tools/prisma-loader@8.0.17(@types/node@25.3.0)(bufferutil@4.1.0)(crossws@0.3.5)(graphql@16.13.1)(utf-8-validate@5.0.10)': + '@graphql-tools/optimize@2.0.0(graphql@16.13.2)': dependencies: - '@graphql-tools/url-loader': 8.0.33(@types/node@25.3.0)(bufferutil@4.1.0)(crossws@0.3.5)(graphql@16.13.1)(utf-8-validate@5.0.10) - '@graphql-tools/utils': 10.11.0(graphql@16.13.1) - '@types/js-yaml': 4.0.9 - '@whatwg-node/fetch': 0.10.13 - chalk: 4.1.2 - debug: 4.4.3(supports-color@5.5.0) - dotenv: 16.6.1 - graphql: 16.13.1 - graphql-request: 6.1.0(graphql@16.13.1) - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 - jose: 5.10.0 - js-yaml: 4.1.1 - lodash: 4.17.23 - scuid: 1.1.0 + graphql: 16.13.2 tslib: 2.8.1 - yaml-ast-parser: 0.0.43 - transitivePeerDependencies: - - '@fastify/websocket' - - '@types/node' - - bufferutil - - crossws - - encoding - - supports-color - - utf-8-validate - '@graphql-tools/relay-operation-optimizer@6.5.18(graphql@16.13.1)': + '@graphql-tools/relay-operation-optimizer@6.5.18(graphql@16.13.2)': dependencies: - '@ardatan/relay-compiler': 12.0.0(graphql@16.13.1) - '@graphql-tools/utils': 9.2.1(graphql@16.13.1) - graphql: 16.13.1 + '@ardatan/relay-compiler': 12.0.0(graphql@16.13.2) + '@graphql-tools/utils': 9.2.1(graphql@16.13.2) + graphql: 16.13.2 tslib: 2.8.1 transitivePeerDependencies: - encoding - supports-color - '@graphql-tools/relay-operation-optimizer@7.0.27(graphql@16.13.1)': + '@graphql-tools/relay-operation-optimizer@7.1.2(graphql@16.13.2)': dependencies: - '@ardatan/relay-compiler': 12.0.3(graphql@16.13.1) - '@graphql-tools/utils': 11.0.0(graphql@16.13.1) - graphql: 16.13.1 + '@ardatan/relay-compiler': 13.0.1(graphql@16.13.2) + '@graphql-tools/utils': 11.0.0(graphql@16.13.2) + graphql: 16.13.2 tslib: 2.8.1 - transitivePeerDependencies: - - encoding - '@graphql-tools/schema@10.0.31(graphql@16.13.1)': + '@graphql-tools/schema@10.0.31(graphql@16.13.2)': dependencies: - '@graphql-tools/merge': 9.1.7(graphql@16.13.1) - '@graphql-tools/utils': 11.0.0(graphql@16.13.1) - graphql: 16.13.1 + '@graphql-tools/merge': 9.1.7(graphql@16.13.2) + '@graphql-tools/utils': 11.0.0(graphql@16.13.2) + graphql: 16.13.2 tslib: 2.8.1 - '@graphql-tools/url-loader@8.0.33(@types/node@25.3.0)(bufferutil@4.1.0)(crossws@0.3.5)(graphql@16.13.1)(utf-8-validate@5.0.10)': + '@graphql-tools/url-loader@9.1.0(@types/node@25.3.0)(bufferutil@4.1.0)(crossws@0.3.5)(graphql@16.13.2)(utf-8-validate@5.0.10)': dependencies: - '@graphql-tools/executor-graphql-ws': 2.0.7(bufferutil@4.1.0)(crossws@0.3.5)(graphql@16.13.1)(utf-8-validate@5.0.10) - '@graphql-tools/executor-http': 1.3.3(@types/node@25.3.0)(graphql@16.13.1) - '@graphql-tools/executor-legacy-ws': 1.1.25(bufferutil@4.1.0)(graphql@16.13.1)(utf-8-validate@5.0.10) - '@graphql-tools/utils': 10.11.0(graphql@16.13.1) - '@graphql-tools/wrap': 10.1.4(graphql@16.13.1) + '@graphql-tools/executor-graphql-ws': 3.1.5(bufferutil@4.1.0)(crossws@0.3.5)(graphql@16.13.2)(utf-8-validate@5.0.10) + '@graphql-tools/executor-http': 3.2.1(@types/node@25.3.0)(graphql@16.13.2) + '@graphql-tools/executor-legacy-ws': 1.1.26(bufferutil@4.1.0)(graphql@16.13.2)(utf-8-validate@5.0.10) + '@graphql-tools/utils': 11.0.0(graphql@16.13.2) + '@graphql-tools/wrap': 11.1.13(graphql@16.13.2) '@types/ws': 8.18.1 '@whatwg-node/fetch': 0.10.13 '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.13.1 - isomorphic-ws: 5.0.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)) - sync-fetch: 0.6.0-2 + graphql: 16.13.2 + isomorphic-ws: 5.0.0(ws@8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)) + sync-fetch: 0.6.0 tslib: 2.8.1 - ws: 8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) + ws: 8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) transitivePeerDependencies: - '@fastify/websocket' - '@types/node' @@ -10353,45 +10976,93 @@ snapshots: - crossws - utf-8-validate - '@graphql-tools/utils@10.11.0(graphql@16.13.1)': - dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@16.13.1) - '@whatwg-node/promise-helpers': 1.3.2 - cross-inspect: 1.0.1 - graphql: 16.13.1 - tslib: 2.8.1 - - '@graphql-tools/utils@11.0.0(graphql@16.13.1)': + '@graphql-tools/utils@11.0.0(graphql@16.13.2)': dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@16.13.1) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.13.2) '@whatwg-node/promise-helpers': 1.3.2 cross-inspect: 1.0.1 - graphql: 16.13.1 + graphql: 16.13.2 tslib: 2.8.1 - '@graphql-tools/utils@9.2.1(graphql@16.13.1)': + '@graphql-tools/utils@9.2.1(graphql@16.13.2)': dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@16.13.1) - graphql: 16.13.1 + '@graphql-typed-document-node/core': 3.2.0(graphql@16.13.2) + graphql: 16.13.2 tslib: 2.8.1 - '@graphql-tools/wrap@10.1.4(graphql@16.13.1)': + '@graphql-tools/wrap@11.1.13(graphql@16.13.2)': dependencies: - '@graphql-tools/delegate': 10.2.23(graphql@16.13.1) - '@graphql-tools/schema': 10.0.31(graphql@16.13.1) - '@graphql-tools/utils': 10.11.0(graphql@16.13.1) + '@graphql-tools/delegate': 12.0.13(graphql@16.13.2) + '@graphql-tools/schema': 10.0.31(graphql@16.13.2) + '@graphql-tools/utils': 11.0.0(graphql@16.13.2) '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.13.1 + graphql: 16.13.2 tslib: 2.8.1 - '@graphql-typed-document-node/core@3.2.0(graphql@16.13.1)': + '@graphql-typed-document-node/core@3.2.0(graphql@16.13.2)': dependencies: - graphql: 16.13.1 + graphql: 16.13.2 '@hono/node-server@1.19.9(hono@4.12.2)': dependencies: hono: 4.12.2 + '@iconify/types@2.0.0': {} + + '@iconify/utils@3.1.0': + dependencies: + '@antfu/install-pkg': 1.1.0 + '@iconify/types': 2.0.0 + mlly: 1.8.0 + + '@inquirer/ansi@1.0.2': {} + + '@inquirer/checkbox@4.3.2(@types/node@25.3.0)': + dependencies: + '@inquirer/ansi': 1.0.2 + '@inquirer/core': 10.3.2(@types/node@25.3.0) + '@inquirer/figures': 1.0.15 + '@inquirer/type': 3.0.10(@types/node@25.3.0) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 25.3.0 + + '@inquirer/confirm@5.1.21(@types/node@25.3.0)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@25.3.0) + '@inquirer/type': 3.0.10(@types/node@25.3.0) + optionalDependencies: + '@types/node': 25.3.0 + + '@inquirer/core@10.3.2(@types/node@25.3.0)': + dependencies: + '@inquirer/ansi': 1.0.2 + '@inquirer/figures': 1.0.15 + '@inquirer/type': 3.0.10(@types/node@25.3.0) + cli-width: 4.1.0 + mute-stream: 2.0.0 + signal-exit: 4.1.0 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 25.3.0 + + '@inquirer/editor@4.2.23(@types/node@25.3.0)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@25.3.0) + '@inquirer/external-editor': 1.0.3(@types/node@25.3.0) + '@inquirer/type': 3.0.10(@types/node@25.3.0) + optionalDependencies: + '@types/node': 25.3.0 + + '@inquirer/expand@4.0.23(@types/node@25.3.0)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@25.3.0) + '@inquirer/type': 3.0.10(@types/node@25.3.0) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 25.3.0 + '@inquirer/external-editor@1.0.3(@types/node@25.3.0)': dependencies: chardet: 2.1.1 @@ -10399,6 +11070,76 @@ snapshots: optionalDependencies: '@types/node': 25.3.0 + '@inquirer/figures@1.0.15': {} + + '@inquirer/input@4.3.1(@types/node@25.3.0)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@25.3.0) + '@inquirer/type': 3.0.10(@types/node@25.3.0) + optionalDependencies: + '@types/node': 25.3.0 + + '@inquirer/number@3.0.23(@types/node@25.3.0)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@25.3.0) + '@inquirer/type': 3.0.10(@types/node@25.3.0) + optionalDependencies: + '@types/node': 25.3.0 + + '@inquirer/password@4.0.23(@types/node@25.3.0)': + dependencies: + '@inquirer/ansi': 1.0.2 + '@inquirer/core': 10.3.2(@types/node@25.3.0) + '@inquirer/type': 3.0.10(@types/node@25.3.0) + optionalDependencies: + '@types/node': 25.3.0 + + '@inquirer/prompts@7.10.1(@types/node@25.3.0)': + dependencies: + '@inquirer/checkbox': 4.3.2(@types/node@25.3.0) + '@inquirer/confirm': 5.1.21(@types/node@25.3.0) + '@inquirer/editor': 4.2.23(@types/node@25.3.0) + '@inquirer/expand': 4.0.23(@types/node@25.3.0) + '@inquirer/input': 4.3.1(@types/node@25.3.0) + '@inquirer/number': 3.0.23(@types/node@25.3.0) + '@inquirer/password': 4.0.23(@types/node@25.3.0) + '@inquirer/rawlist': 4.1.11(@types/node@25.3.0) + '@inquirer/search': 3.2.2(@types/node@25.3.0) + '@inquirer/select': 4.4.2(@types/node@25.3.0) + optionalDependencies: + '@types/node': 25.3.0 + + '@inquirer/rawlist@4.1.11(@types/node@25.3.0)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@25.3.0) + '@inquirer/type': 3.0.10(@types/node@25.3.0) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 25.3.0 + + '@inquirer/search@3.2.2(@types/node@25.3.0)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@25.3.0) + '@inquirer/figures': 1.0.15 + '@inquirer/type': 3.0.10(@types/node@25.3.0) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 25.3.0 + + '@inquirer/select@4.4.2(@types/node@25.3.0)': + dependencies: + '@inquirer/ansi': 1.0.2 + '@inquirer/core': 10.3.2(@types/node@25.3.0) + '@inquirer/figures': 1.0.15 + '@inquirer/type': 3.0.10(@types/node@25.3.0) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 25.3.0 + + '@inquirer/type@3.0.10(@types/node@25.3.0)': + optionalDependencies: + '@types/node': 25.3.0 + '@internationalized/date@3.11.0': dependencies: '@swc/helpers': 0.5.19 @@ -10407,17 +11148,6 @@ snapshots: dependencies: '@swc/helpers': 0.5.19 - '@isaacs/cliui@8.0.2': - dependencies: - string-width: 5.1.2 - string-width-cjs: string-width@4.2.3 - strip-ansi: 7.1.2 - strip-ansi-cjs: strip-ansi@6.0.1 - wrap-ansi: 8.1.0 - wrap-ansi-cjs: wrap-ansi@7.0.0 - - '@istanbuljs/schema@0.1.3': {} - '@jridgewell/gen-mapping@0.3.13': dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -10442,20 +11172,20 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@lifi/sdk@3.16.3(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)': + '@lifi/sdk@3.16.3(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(use-sync-external-store@1.4.0(react@19.2.4))(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6))(zod@4.3.6)': dependencies: - '@bigmi/core': 0.7.1(@types/react@19.2.14)(bs58@6.0.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0)) + '@bigmi/core': 0.7.1(@types/react@19.2.14)(bs58@6.0.0)(react@19.2.4)(typescript@6.0.2)(use-sync-external-store@1.4.0(react@19.2.4)) '@bitcoinerlab/secp256k1': 1.2.0 - '@lifi/types': 17.65.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@mysten/sui': 1.45.2(typescript@5.9.3) - '@mysten/wallet-standard': 0.19.9(typescript@5.9.3) + '@lifi/types': 17.65.0(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) + '@mysten/sui': 1.45.2(typescript@6.0.2) + '@mysten/wallet-standard': 0.19.9(typescript@6.0.2) '@noble/curves': 1.9.7 - '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)) - '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)) + '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10) bech32: 2.0.0 - bitcoinjs-lib: 7.0.1(typescript@5.9.3) + bitcoinjs-lib: 7.0.1(typescript@6.0.2) bs58: 6.0.0 - viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) transitivePeerDependencies: - '@gql.tada/svelte-support' - '@gql.tada/vue-support' @@ -10468,9 +11198,9 @@ snapshots: - utf-8-validate - zod - '@lifi/types@17.65.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@lifi/types@17.65.0(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6)': dependencies: - viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) transitivePeerDependencies: - bufferutil - typescript @@ -10518,11 +11248,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.1.0)': + '@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4)': dependencies: '@types/mdx': 2.0.13 '@types/react': 19.2.14 - react: 19.1.0 + react: 19.2.4 '@mdx-js/rollup@3.1.1(rollup@4.59.0)': dependencies: @@ -10534,6 +11264,10 @@ snapshots: transitivePeerDependencies: - supports-color + '@mermaid-js/parser@1.1.0': + dependencies: + langium: 4.2.1 + '@metamask/eth-json-rpc-provider@1.0.1': dependencies: '@metamask/json-rpc-engine': 7.3.3 @@ -10698,7 +11432,7 @@ snapshots: '@noble/hashes': 1.8.0 '@scure/base': 1.2.6 '@types/debug': 4.1.12 - debug: 4.3.4 + debug: 4.4.3(supports-color@5.5.0) pony-cause: 2.1.11 semver: 7.7.4 uuid: 9.0.1 @@ -10712,7 +11446,7 @@ snapshots: '@noble/hashes': 1.8.0 '@scure/base': 1.2.6 '@types/debug': 4.1.12 - debug: 4.3.4 + debug: 4.4.3(supports-color@5.5.0) pony-cause: 2.1.11 semver: 7.7.4 uuid: 9.0.1 @@ -10761,9 +11495,9 @@ snapshots: '@mysten/utils': 0.2.0 '@scure/base': 1.2.6 - '@mysten/sui@1.45.2(typescript@5.9.3)': + '@mysten/sui@1.45.2(typescript@6.0.2)': dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@16.13.1) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.13.2) '@mysten/bcs': 1.9.2 '@mysten/utils': 0.2.0 '@noble/curves': 1.9.4 @@ -10774,10 +11508,10 @@ snapshots: '@scure/base': 1.2.6 '@scure/bip32': 1.7.0 '@scure/bip39': 1.6.0 - gql.tada: 1.9.0(graphql@16.13.1)(typescript@5.9.3) - graphql: 16.13.1 + gql.tada: 1.9.0(graphql@16.13.2)(typescript@6.0.2) + graphql: 16.13.2 poseidon-lite: 0.2.1 - valibot: 1.2.0(typescript@5.9.3) + valibot: 1.2.0(typescript@6.0.2) transitivePeerDependencies: - '@gql.tada/svelte-support' - '@gql.tada/vue-support' @@ -10787,15 +11521,22 @@ snapshots: dependencies: '@scure/base': 1.2.6 - '@mysten/wallet-standard@0.19.9(typescript@5.9.3)': + '@mysten/wallet-standard@0.19.9(typescript@6.0.2)': dependencies: - '@mysten/sui': 1.45.2(typescript@5.9.3) + '@mysten/sui': 1.45.2(typescript@6.0.2) '@wallet-standard/core': 1.1.1 transitivePeerDependencies: - '@gql.tada/svelte-support' - '@gql.tada/vue-support' - typescript + '@napi-rs/wasm-runtime@1.1.2(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)': + dependencies: + '@emnapi/core': 1.9.2 + '@emnapi/runtime': 1.9.2 + '@tybys/wasm-util': 0.10.1 + optional: true + '@noble/ciphers@1.2.1': {} '@noble/ciphers@1.3.0': {} @@ -10844,6 +11585,8 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.20.1 + '@oxc-project/types@0.122.0': {} + '@pandacss/is-valid-prop@1.8.2': {} '@parcel/watcher-android-arm64@2.5.6': @@ -10912,9 +11655,6 @@ snapshots: dependencies: lit: 3.3.0 - '@pkgjs/parseargs@0.11.0': - optional: true - '@protobuf-ts/grpcweb-transport@2.11.1': dependencies: '@protobuf-ts/runtime': 2.11.1 @@ -10932,813 +11672,813 @@ snapshots: '@radix-ui/primitive@1.1.3': {} - '@radix-ui/react-accessible-icon@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-accessible-icon@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-accordion@1.2.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-accordion@1.2.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-alert-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-alert-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-aspect-ratio@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-aspect-ratio@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-avatar@1.1.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-avatar@1.1.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-checkbox@1.3.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-checkbox@1.3.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-collapsible@1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-collapsible@1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.14)(react@19.1.0)': + '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.14)(react@19.2.4)': dependencies: - react: 19.1.0 + react: 19.2.4 optionalDependencies: '@types/react': 19.2.14 - '@radix-ui/react-context-menu@2.2.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-context-menu@2.2.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-context@1.1.2(@types/react@19.2.14)(react@19.1.0)': + '@radix-ui/react-context@1.1.2(@types/react@19.2.14)(react@19.2.4)': dependencies: - react: 19.1.0 + react: 19.2.4 optionalDependencies: '@types/react': 19.2.14 - '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) aria-hidden: 1.2.6 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.1.0) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.4) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-direction@1.1.1(@types/react@19.2.14)(react@19.1.0)': + '@radix-ui/react-direction@1.1.1(@types/react@19.2.14)(react@19.2.4)': dependencies: - react: 19.1.0 + react: 19.2.4 optionalDependencies: '@types/react': 19.2.14 - '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.14)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-dropdown-menu@2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-dropdown-menu@2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.14)(react@19.1.0)': + '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.14)(react@19.2.4)': dependencies: - react: 19.1.0 + react: 19.2.4 optionalDependencies: '@types/react': 19.2.14 - '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-form@0.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-form@0.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-label': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-label': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-hover-card@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-hover-card@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-icons@1.3.2(react@19.1.0)': + '@radix-ui/react-icons@1.3.2(react@19.2.4)': dependencies: - react: 19.1.0 + react: 19.2.4 - '@radix-ui/react-id@1.1.1(@types/react@19.2.14)(react@19.1.0)': + '@radix-ui/react-id@1.1.1(@types/react@19.2.14)(react@19.2.4)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.1.0) - react: 19.1.0 + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 optionalDependencies: '@types/react': 19.2.14 - '@radix-ui/react-label@2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-label@2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-label@2.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-label@2.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-menu@2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-menu@2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.1.0) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) aria-hidden: 1.2.6 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.1.0) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.4) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-menubar@1.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-menubar@1.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-navigation-menu@1.2.14(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-navigation-menu@1.2.14(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-one-time-password-field@0.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-one-time-password-field@0.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': 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.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-password-toggle-field@0.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-password-toggle-field@0.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.2.14)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) aria-hidden: 1.2.6 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.1.0) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.4) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@floating-ui/react-dom': 2.1.7(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.1.0) + '@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@floating-ui/react-dom': 2.1.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.4) '@radix-ui/rect': 1.1.1 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-primitive@2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-primitive@2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@radix-ui/react-slot': 1.2.4(@types/react@19.2.14)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-slot': 1.2.4(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-progress@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-progress@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-radio-group@1.3.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-radio-group@1.3.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-scroll-area@1.2.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-scroll-area@1.2.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/number': 1.1.1 '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-select@2.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-select@2.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': 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.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) aria-hidden: 1.2.6 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.1.0) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.4) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-separator@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-separator@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-slider@1.3.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-slider@1.3.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': 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.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-slot@1.2.3(@types/react@19.2.14)(react@19.1.0)': + '@radix-ui/react-slot@1.2.3(@types/react@19.2.14)(react@19.2.4)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.1.0) - react: 19.1.0 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 optionalDependencies: '@types/react': 19.2.14 - '@radix-ui/react-slot@1.2.4(@types/react@19.2.14)(react@19.1.0)': + '@radix-ui/react-slot@1.2.4(@types/react@19.2.14)(react@19.2.4)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.1.0) - react: 19.1.0 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 optionalDependencies: '@types/react': 19.2.14 - '@radix-ui/react-switch@1.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-switch@1.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-tabs@1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-tabs@1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-toast@1.2.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-toast@1.2.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-toggle-group@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-toggle-group@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-toggle': 1.1.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-toggle': 1.1.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-toggle@1.1.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-toggle@1.1.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-toolbar@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-toolbar@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-separator': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-toggle-group': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-separator': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-toggle-group': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-tooltip@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-tooltip@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.14)(react@19.1.0)': + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.14)(react@19.2.4)': dependencies: - react: 19.1.0 + react: 19.2.4 optionalDependencies: '@types/react': 19.2.14 - '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.14)(react@19.1.0)': + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.14)(react@19.2.4)': dependencies: - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.1.0) - react: 19.1.0 + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 optionalDependencies: '@types/react': 19.2.14 - '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.14)(react@19.1.0)': + '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.14)(react@19.2.4)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.1.0) - react: 19.1.0 + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 optionalDependencies: '@types/react': 19.2.14 - '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.14)(react@19.1.0)': + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.14)(react@19.2.4)': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.1.0) - react: 19.1.0 + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 optionalDependencies: '@types/react': 19.2.14 - '@radix-ui/react-use-is-hydrated@0.1.0(@types/react@19.2.14)(react@19.1.0)': + '@radix-ui/react-use-is-hydrated@0.1.0(@types/react@19.2.14)(react@19.2.4)': dependencies: - react: 19.1.0 - use-sync-external-store: 1.6.0(react@19.1.0) + react: 19.2.4 + use-sync-external-store: 1.6.0(react@19.2.4) optionalDependencies: '@types/react': 19.2.14 - '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.14)(react@19.1.0)': + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.14)(react@19.2.4)': dependencies: - react: 19.1.0 + react: 19.2.4 optionalDependencies: '@types/react': 19.2.14 - '@radix-ui/react-use-previous@1.1.1(@types/react@19.2.14)(react@19.1.0)': + '@radix-ui/react-use-previous@1.1.1(@types/react@19.2.14)(react@19.2.4)': dependencies: - react: 19.1.0 + react: 19.2.4 optionalDependencies: '@types/react': 19.2.14 - '@radix-ui/react-use-rect@1.1.1(@types/react@19.2.14)(react@19.1.0)': + '@radix-ui/react-use-rect@1.1.1(@types/react@19.2.14)(react@19.2.4)': dependencies: '@radix-ui/rect': 1.1.1 - react: 19.1.0 + react: 19.2.4 optionalDependencies: '@types/react': 19.2.14 - '@radix-ui/react-use-size@1.1.1(@types/react@19.2.14)(react@19.1.0)': + '@radix-ui/react-use-size@1.1.1(@types/react@19.2.14)(react@19.2.4)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.1.0) - react: 19.1.0 + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 optionalDependencies: '@types/react': 19.2.14 - '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) '@radix-ui/rect@1.1.1': {} - '@rainbow-me/rainbowkit@2.2.10(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(babel-plugin-macros@3.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.9.3)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.95.2)(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76))': + '@rainbow-me/rainbowkit@2.2.10(@tanstack/react-query@5.96.1(react@19.2.4))(@types/react@19.2.14)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2)(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6))(wagmi@2.19.5(@tanstack/query-core@5.96.1)(@tanstack/react-query@5.96.1(react@19.2.4))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6))(zod@4.3.6))': dependencies: - '@tanstack/react-query': 5.95.2(react@19.1.0) + '@tanstack/react-query': 5.96.1(react@19.2.4) '@vanilla-extract/css': 1.17.3(babel-plugin-macros@3.1.0) '@vanilla-extract/dynamic': 2.1.4 '@vanilla-extract/sprinkles': 1.6.4(@vanilla-extract/css@1.17.3(babel-plugin-macros@3.1.0)) clsx: 2.1.1 - cuer: 0.0.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.9.3) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - react-remove-scroll: 2.6.2(@types/react@19.2.14)(react@19.1.0) + cuer: 0.0.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + react-remove-scroll: 2.6.2(@types/react@19.2.14)(react@19.2.4) ua-parser-js: 1.0.41 - viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - wagmi: 2.19.5(@tanstack/query-core@5.95.2)(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76) + viem: 2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) + wagmi: 2.19.5(@tanstack/query-core@5.96.1)(@tanstack/react-query@5.96.1(react@19.2.4))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6))(zod@4.3.6) transitivePeerDependencies: - '@types/react' - babel-plugin-macros - typescript - '@reown/appkit-adapter-wagmi@1.8.19(3041b67b8915d842a532aec1c6c6eb72)': + '@reown/appkit-adapter-wagmi@1.8.19(2de72959fc98ac49fc53ea96fd4099ec)': dependencies: - '@reown/appkit': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-common': 1.8.19(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-controllers': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(use-sync-external-store@1.4.0(react@19.2.4))(utf-8-validate@5.0.10)(zod@4.3.6) + '@reown/appkit-common': 1.8.19(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) + '@reown/appkit-controllers': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) '@reown/appkit-polyfills': 1.8.19 - '@reown/appkit-scaffold-ui': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(valtio@2.1.7(@types/react@19.2.14)(react@19.1.0))(zod@3.25.76) - '@reown/appkit-utils': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(valtio@2.1.7(@types/react@19.2.14)(react@19.1.0))(zod@3.25.76) - '@reown/appkit-wallet': 1.8.19(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) - '@wagmi/core': 3.4.0(@tanstack/query-core@5.95.2)(@types/react@19.2.14)(ox@0.14.7(typescript@5.9.3)(zod@3.25.76))(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)) - '@walletconnect/universal-provider': 2.23.7(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - valtio: 2.1.7(@types/react@19.2.14)(react@19.1.0) - viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - wagmi: 2.19.5(@tanstack/query-core@5.95.2)(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76) + '@reown/appkit-scaffold-ui': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(use-sync-external-store@1.4.0(react@19.2.4))(utf-8-validate@5.0.10)(valtio@2.1.7(@types/react@19.2.14)(react@19.2.4))(zod@4.3.6) + '@reown/appkit-utils': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(use-sync-external-store@1.4.0(react@19.2.4))(utf-8-validate@5.0.10)(valtio@2.1.7(@types/react@19.2.14)(react@19.2.4))(zod@4.3.6) + '@reown/appkit-wallet': 1.8.19(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10) + '@wagmi/core': 3.4.0(@tanstack/query-core@5.96.1)(@types/react@19.2.14)(ox@0.14.7(typescript@6.0.2)(zod@4.3.6))(react@19.2.4)(typescript@6.0.2)(use-sync-external-store@1.4.0(react@19.2.4))(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6)) + '@walletconnect/universal-provider': 2.23.7(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) + valtio: 2.1.7(@types/react@19.2.14)(react@19.2.4) + viem: 2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) + wagmi: 2.19.5(@tanstack/query-core@5.96.1)(@tanstack/react-query@5.96.1(react@19.2.4))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6))(zod@4.3.6) optionalDependencies: - '@wagmi/connectors': 7.2.1(7a3af5fbb3d5f20af6e588f956426ab3) + '@wagmi/connectors': 7.2.1(b756c2b269709ceeeadc4224985368d3) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -11778,57 +12518,57 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-common@1.7.8(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.22.4)': + '@reown/appkit-common@1.7.8(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@3.22.4)': dependencies: big.js: 6.2.2 dayjs: 1.11.13 - viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.22.4) + viem: 2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@3.22.4) transitivePeerDependencies: - bufferutil - typescript - utf-8-validate - zod - '@reown/appkit-common@1.7.8(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@reown/appkit-common@1.7.8(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6)': dependencies: big.js: 6.2.2 dayjs: 1.11.13 - viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) transitivePeerDependencies: - bufferutil - typescript - utf-8-validate - zod - '@reown/appkit-common@1.8.19(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.22.4)': + '@reown/appkit-common@1.8.19(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@3.22.4)': dependencies: big.js: 6.2.2 dayjs: 1.11.13 - viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.22.4) + viem: 2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@3.22.4) transitivePeerDependencies: - bufferutil - typescript - utf-8-validate - zod - '@reown/appkit-common@1.8.19(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@reown/appkit-common@1.8.19(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6)': dependencies: big.js: 6.2.2 dayjs: 1.11.13 - viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) transitivePeerDependencies: - bufferutil - typescript - utf-8-validate - zod - '@reown/appkit-controllers@1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@reown/appkit-controllers@1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6)': dependencies: - '@reown/appkit-common': 1.7.8(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-wallet': 1.7.8(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) - '@walletconnect/universal-provider': 2.21.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - valtio: 1.13.2(@types/react@19.2.14)(react@19.1.0) - viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-common': 1.7.8(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) + '@reown/appkit-wallet': 1.7.8(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10) + '@walletconnect/universal-provider': 2.21.0(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) + valtio: 1.13.2(@types/react@19.2.14)(react@19.2.4) + viem: 2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -11857,13 +12597,13 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-controllers@1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@reown/appkit-controllers@1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6)': dependencies: - '@reown/appkit-common': 1.8.19(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-wallet': 1.8.19(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) - '@walletconnect/universal-provider': 2.23.7(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - valtio: 2.1.7(@types/react@19.2.14)(react@19.1.0) - viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-common': 1.8.19(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) + '@reown/appkit-wallet': 1.8.19(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10) + '@walletconnect/universal-provider': 2.23.7(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) + valtio: 2.1.7(@types/react@19.2.14)(react@19.2.4) + viem: 2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -11892,14 +12632,14 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-pay@1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@reown/appkit-pay@1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6)': dependencies: - '@reown/appkit-common': 1.7.8(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-controllers': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-ui': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-utils': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.2.14)(react@19.1.0))(zod@3.25.76) + '@reown/appkit-common': 1.7.8(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) + '@reown/appkit-controllers': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) + '@reown/appkit-ui': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) + '@reown/appkit-utils': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.2.14)(react@19.2.4))(zod@4.3.6) lit: 3.3.0 - valtio: 1.13.2(@types/react@19.2.14)(react@19.1.0) + valtio: 1.13.2(@types/react@19.2.14)(react@19.2.4) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -11928,14 +12668,14 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-pay@1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(zod@3.25.76)': + '@reown/appkit-pay@1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(use-sync-external-store@1.4.0(react@19.2.4))(utf-8-validate@5.0.10)(zod@4.3.6)': dependencies: - '@reown/appkit-common': 1.8.19(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-controllers': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-ui': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-utils': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(valtio@2.1.7(@types/react@19.2.14)(react@19.1.0))(zod@3.25.76) + '@reown/appkit-common': 1.8.19(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) + '@reown/appkit-controllers': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) + '@reown/appkit-ui': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) + '@reown/appkit-utils': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(use-sync-external-store@1.4.0(react@19.2.4))(utf-8-validate@5.0.10)(valtio@2.1.7(@types/react@19.2.14)(react@19.2.4))(zod@4.3.6) lit: 3.3.0 - valtio: 2.1.7(@types/react@19.2.14)(react@19.1.0) + valtio: 2.1.7(@types/react@19.2.14)(react@19.2.4) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -11976,13 +12716,13 @@ snapshots: dependencies: buffer: 6.0.3 - '@reown/appkit-scaffold-ui@1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.2.14)(react@19.1.0))(zod@3.25.76)': + '@reown/appkit-scaffold-ui@1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.2.14)(react@19.2.4))(zod@4.3.6)': dependencies: - '@reown/appkit-common': 1.7.8(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-controllers': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-ui': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-utils': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.2.14)(react@19.1.0))(zod@3.25.76) - '@reown/appkit-wallet': 1.7.8(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@reown/appkit-common': 1.7.8(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) + '@reown/appkit-controllers': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) + '@reown/appkit-ui': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) + '@reown/appkit-utils': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.2.14)(react@19.2.4))(zod@4.3.6) + '@reown/appkit-wallet': 1.7.8(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10) lit: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -12013,14 +12753,14 @@ snapshots: - valtio - zod - '@reown/appkit-scaffold-ui@1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(valtio@2.1.7(@types/react@19.2.14)(react@19.1.0))(zod@3.25.76)': + '@reown/appkit-scaffold-ui@1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(use-sync-external-store@1.4.0(react@19.2.4))(utf-8-validate@5.0.10)(valtio@2.1.7(@types/react@19.2.14)(react@19.2.4))(zod@4.3.6)': dependencies: - '@reown/appkit-common': 1.8.19(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-controllers': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-pay': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-ui': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-utils': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(valtio@2.1.7(@types/react@19.2.14)(react@19.1.0))(zod@3.25.76) - '@reown/appkit-wallet': 1.8.19(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@reown/appkit-common': 1.8.19(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) + '@reown/appkit-controllers': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) + '@reown/appkit-pay': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(use-sync-external-store@1.4.0(react@19.2.4))(utf-8-validate@5.0.10)(zod@4.3.6) + '@reown/appkit-ui': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) + '@reown/appkit-utils': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(use-sync-external-store@1.4.0(react@19.2.4))(utf-8-validate@5.0.10)(valtio@2.1.7(@types/react@19.2.14)(react@19.2.4))(zod@4.3.6) + '@reown/appkit-wallet': 1.8.19(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10) lit: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -12055,11 +12795,11 @@ snapshots: - valtio - zod - '@reown/appkit-ui@1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@reown/appkit-ui@1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6)': dependencies: - '@reown/appkit-common': 1.7.8(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-controllers': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-wallet': 1.7.8(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@reown/appkit-common': 1.7.8(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) + '@reown/appkit-controllers': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) + '@reown/appkit-wallet': 1.7.8(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10) lit: 3.3.0 qrcode: 1.5.3 transitivePeerDependencies: @@ -12090,12 +12830,12 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-ui@1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@reown/appkit-ui@1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6)': dependencies: '@phosphor-icons/webcomponents': 2.1.5 - '@reown/appkit-common': 1.8.19(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-controllers': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-wallet': 1.8.19(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@reown/appkit-common': 1.8.19(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) + '@reown/appkit-controllers': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) + '@reown/appkit-wallet': 1.8.19(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10) lit: 3.3.0 qrcode: 1.5.3 transitivePeerDependencies: @@ -12126,16 +12866,16 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-utils@1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.2.14)(react@19.1.0))(zod@3.25.76)': + '@reown/appkit-utils@1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.2.14)(react@19.2.4))(zod@4.3.6)': dependencies: - '@reown/appkit-common': 1.7.8(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-controllers': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-common': 1.7.8(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) + '@reown/appkit-controllers': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) '@reown/appkit-polyfills': 1.7.8 - '@reown/appkit-wallet': 1.7.8(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@reown/appkit-wallet': 1.7.8(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10) '@walletconnect/logger': 2.1.2 - '@walletconnect/universal-provider': 2.21.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - valtio: 1.13.2(@types/react@19.2.14)(react@19.1.0) - viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@walletconnect/universal-provider': 2.21.0(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) + valtio: 1.13.2(@types/react@19.2.14)(react@19.2.4) + viem: 2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -12164,21 +12904,21 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-utils@1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(valtio@2.1.7(@types/react@19.2.14)(react@19.1.0))(zod@3.25.76)': + '@reown/appkit-utils@1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(use-sync-external-store@1.4.0(react@19.2.4))(utf-8-validate@5.0.10)(valtio@2.1.7(@types/react@19.2.14)(react@19.2.4))(zod@4.3.6)': dependencies: - '@reown/appkit-common': 1.8.19(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-controllers': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-common': 1.8.19(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) + '@reown/appkit-controllers': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) '@reown/appkit-polyfills': 1.8.19 - '@reown/appkit-wallet': 1.8.19(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@reown/appkit-wallet': 1.8.19(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10) '@wallet-standard/wallet': 1.1.0 '@walletconnect/logger': 3.0.2 - '@walletconnect/universal-provider': 2.23.7(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - valtio: 2.1.7(@types/react@19.2.14)(react@19.1.0) - viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@walletconnect/universal-provider': 2.23.7(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) + valtio: 2.1.7(@types/react@19.2.14)(react@19.2.4) + viem: 2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) optionalDependencies: - '@base-org/account': 2.4.0(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(zod@3.25.76) - '@safe-global/safe-apps-provider': 0.18.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@base-org/account': 2.4.0(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(use-sync-external-store@1.4.0(react@19.2.4))(utf-8-validate@5.0.10)(zod@4.3.6) + '@safe-global/safe-apps-provider': 0.18.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) + '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -12211,9 +12951,9 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-wallet@1.7.8(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)': + '@reown/appkit-wallet@1.7.8(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)': dependencies: - '@reown/appkit-common': 1.7.8(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.22.4) + '@reown/appkit-common': 1.7.8(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@3.22.4) '@reown/appkit-polyfills': 1.7.8 '@walletconnect/logger': 2.1.2 zod: 3.22.4 @@ -12222,9 +12962,9 @@ snapshots: - typescript - utf-8-validate - '@reown/appkit-wallet@1.8.19(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)': + '@reown/appkit-wallet@1.8.19(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)': dependencies: - '@reown/appkit-common': 1.8.19(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.22.4) + '@reown/appkit-common': 1.8.19(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@3.22.4) '@reown/appkit-polyfills': 1.8.19 '@walletconnect/logger': 3.0.2 zod: 3.22.4 @@ -12233,21 +12973,21 @@ snapshots: - typescript - utf-8-validate - '@reown/appkit@1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@reown/appkit@1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6)': dependencies: - '@reown/appkit-common': 1.7.8(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-controllers': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-pay': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-common': 1.7.8(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) + '@reown/appkit-controllers': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) + '@reown/appkit-pay': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) '@reown/appkit-polyfills': 1.7.8 - '@reown/appkit-scaffold-ui': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.2.14)(react@19.1.0))(zod@3.25.76) - '@reown/appkit-ui': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-utils': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.2.14)(react@19.1.0))(zod@3.25.76) - '@reown/appkit-wallet': 1.7.8(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@reown/appkit-scaffold-ui': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.2.14)(react@19.2.4))(zod@4.3.6) + '@reown/appkit-ui': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) + '@reown/appkit-utils': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.2.14)(react@19.2.4))(zod@4.3.6) + '@reown/appkit-wallet': 1.7.8(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10) '@walletconnect/types': 2.21.0 - '@walletconnect/universal-provider': 2.21.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@walletconnect/universal-provider': 2.21.0(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) bs58: 6.0.0 - valtio: 1.13.2(@types/react@19.2.14)(react@19.1.0) - viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + valtio: 1.13.2(@types/react@19.2.14)(react@19.2.4) + viem: 2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -12276,21 +13016,21 @@ snapshots: - utf-8-validate - zod - '@reown/appkit@1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(zod@3.25.76)': + '@reown/appkit@1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(use-sync-external-store@1.4.0(react@19.2.4))(utf-8-validate@5.0.10)(zod@4.3.6)': dependencies: - '@reown/appkit-common': 1.8.19(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-controllers': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-pay': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-common': 1.8.19(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) + '@reown/appkit-controllers': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) + '@reown/appkit-pay': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(use-sync-external-store@1.4.0(react@19.2.4))(utf-8-validate@5.0.10)(zod@4.3.6) '@reown/appkit-polyfills': 1.8.19 - '@reown/appkit-scaffold-ui': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(valtio@2.1.7(@types/react@19.2.14)(react@19.1.0))(zod@3.25.76) - '@reown/appkit-ui': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-utils': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(valtio@2.1.7(@types/react@19.2.14)(react@19.1.0))(zod@3.25.76) - '@reown/appkit-wallet': 1.8.19(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) - '@walletconnect/universal-provider': 2.23.7(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-scaffold-ui': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(use-sync-external-store@1.4.0(react@19.2.4))(utf-8-validate@5.0.10)(valtio@2.1.7(@types/react@19.2.14)(react@19.2.4))(zod@4.3.6) + '@reown/appkit-ui': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) + '@reown/appkit-utils': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(use-sync-external-store@1.4.0(react@19.2.4))(utf-8-validate@5.0.10)(valtio@2.1.7(@types/react@19.2.14)(react@19.2.4))(zod@4.3.6) + '@reown/appkit-wallet': 1.8.19(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10) + '@walletconnect/universal-provider': 2.23.7(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) bs58: 6.0.0 semver: 7.7.2 - valtio: 2.1.7(@types/react@19.2.14)(react@19.1.0) - viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + valtio: 2.1.7(@types/react@19.2.14)(react@19.2.4) + viem: 2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) optionalDependencies: '@lit/react': 1.0.8(@types/react@19.2.14) transitivePeerDependencies: @@ -12327,7 +13067,61 @@ snapshots: '@repeaterjs/repeater@3.0.6': {} - '@rolldown/pluginutils@1.0.0-beta.27': {} + '@rolldown/binding-android-arm64@1.0.0-rc.12': + optional: true + + '@rolldown/binding-darwin-arm64@1.0.0-rc.12': + optional: true + + '@rolldown/binding-darwin-x64@1.0.0-rc.12': + optional: true + + '@rolldown/binding-freebsd-x64@1.0.0-rc.12': + optional: true + + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.12': + optional: true + + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.12': + optional: true + + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.12': + optional: true + + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.12': + optional: true + + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.12': + optional: true + + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.12': + optional: true + + '@rolldown/binding-linux-x64-musl@1.0.0-rc.12': + optional: true + + '@rolldown/binding-openharmony-arm64@1.0.0-rc.12': + optional: true + + '@rolldown/binding-wasm32-wasi@1.0.0-rc.12(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)': + dependencies: + '@napi-rs/wasm-runtime': 1.1.2(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + optional: true + + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.12': + optional: true + + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.12': + optional: true + + '@rolldown/pluginutils@1.0.0-rc.12': {} + + '@rolldown/pluginutils@1.0.0-rc.3': {} + + '@rolldown/pluginutils@1.0.0-rc.7': {} '@rollup/pluginutils@5.3.0(rollup@4.59.0)': dependencies: @@ -12412,9 +13206,9 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.59.0': optional: true - '@safe-global/safe-apps-provider@0.18.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@safe-global/safe-apps-provider@0.18.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6)': dependencies: - '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) events: 3.3.0 transitivePeerDependencies: - bufferutil @@ -12422,10 +13216,10 @@ snapshots: - utf-8-validate - zod - '@safe-global/safe-apps-sdk@9.1.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@safe-global/safe-apps-sdk@9.1.0(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6)': dependencies: '@safe-global/safe-gateway-typescript-sdk': 3.23.1 - viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) transitivePeerDependencies: - bufferutil - typescript @@ -12491,18 +13285,18 @@ snapshots: '@shikijs/types': 1.29.2 '@shikijs/vscode-textmate': 10.0.2 - '@shikijs/engine-oniguruma@3.22.0': + '@shikijs/engine-oniguruma@3.23.0': dependencies: - '@shikijs/types': 3.22.0 + '@shikijs/types': 3.23.0 '@shikijs/vscode-textmate': 10.0.2 '@shikijs/langs@1.29.2': dependencies: '@shikijs/types': 1.29.2 - '@shikijs/langs@3.22.0': + '@shikijs/langs@3.23.0': dependencies: - '@shikijs/types': 3.22.0 + '@shikijs/types': 3.23.0 '@shikijs/rehype@1.29.2': dependencies: @@ -12517,20 +13311,20 @@ snapshots: dependencies: '@shikijs/types': 1.29.2 - '@shikijs/themes@3.22.0': + '@shikijs/themes@3.23.0': dependencies: - '@shikijs/types': 3.22.0 + '@shikijs/types': 3.23.0 '@shikijs/transformers@1.29.2': dependencies: '@shikijs/core': 1.29.2 '@shikijs/types': 1.29.2 - '@shikijs/twoslash@1.29.2(typescript@5.9.3)': + '@shikijs/twoslash@1.29.2(typescript@6.0.2)': dependencies: '@shikijs/core': 1.29.2 '@shikijs/types': 1.29.2 - twoslash: 0.2.12(typescript@5.9.3) + twoslash: 0.2.12(typescript@6.0.2) transitivePeerDependencies: - supports-color - typescript @@ -12540,474 +13334,478 @@ snapshots: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 - '@shikijs/types@3.22.0': + '@shikijs/types@3.23.0': dependencies: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 '@shikijs/vscode-textmate@10.0.2': {} - '@sindresorhus/merge-streams@2.3.0': {} + '@simple-libs/child-process-utils@1.0.2': + dependencies: + '@simple-libs/stream-utils': 1.2.0 + + '@simple-libs/stream-utils@1.2.0': {} '@socket.io/component-emitter@3.1.2': {} - '@solana-program/system@0.10.0(@solana/kit@5.5.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10))': + '@solana-program/system@0.10.0(@solana/kit@5.5.1(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10))': dependencies: - '@solana/kit': 5.5.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@solana/kit': 5.5.1(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10) - '@solana-program/token@0.9.0(@solana/kit@5.5.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10))': + '@solana-program/token@0.9.0(@solana/kit@5.5.1(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10))': dependencies: - '@solana/kit': 5.5.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@solana/kit': 5.5.1(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10) - '@solana/accounts@5.5.1(typescript@5.9.3)': + '@solana/accounts@5.5.1(typescript@6.0.2)': dependencies: - '@solana/addresses': 5.5.1(typescript@5.9.3) - '@solana/codecs-core': 5.5.1(typescript@5.9.3) - '@solana/codecs-strings': 5.5.1(typescript@5.9.3) - '@solana/errors': 5.5.1(typescript@5.9.3) - '@solana/rpc-spec': 5.5.1(typescript@5.9.3) - '@solana/rpc-types': 5.5.1(typescript@5.9.3) + '@solana/addresses': 5.5.1(typescript@6.0.2) + '@solana/codecs-core': 5.5.1(typescript@6.0.2) + '@solana/codecs-strings': 5.5.1(typescript@6.0.2) + '@solana/errors': 5.5.1(typescript@6.0.2) + '@solana/rpc-spec': 5.5.1(typescript@6.0.2) + '@solana/rpc-types': 5.5.1(typescript@6.0.2) optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/addresses@5.5.1(typescript@5.9.3)': + '@solana/addresses@5.5.1(typescript@6.0.2)': dependencies: - '@solana/assertions': 5.5.1(typescript@5.9.3) - '@solana/codecs-core': 5.5.1(typescript@5.9.3) - '@solana/codecs-strings': 5.5.1(typescript@5.9.3) - '@solana/errors': 5.5.1(typescript@5.9.3) - '@solana/nominal-types': 5.5.1(typescript@5.9.3) + '@solana/assertions': 5.5.1(typescript@6.0.2) + '@solana/codecs-core': 5.5.1(typescript@6.0.2) + '@solana/codecs-strings': 5.5.1(typescript@6.0.2) + '@solana/errors': 5.5.1(typescript@6.0.2) + '@solana/nominal-types': 5.5.1(typescript@6.0.2) optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/assertions@5.5.1(typescript@5.9.3)': + '@solana/assertions@5.5.1(typescript@6.0.2)': dependencies: - '@solana/errors': 5.5.1(typescript@5.9.3) + '@solana/errors': 5.5.1(typescript@6.0.2) optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 '@solana/buffer-layout@4.0.1': dependencies: buffer: 6.0.3 - '@solana/codecs-core@2.3.0(typescript@5.9.3)': + '@solana/codecs-core@2.3.0(typescript@6.0.2)': dependencies: - '@solana/errors': 2.3.0(typescript@5.9.3) - typescript: 5.9.3 + '@solana/errors': 2.3.0(typescript@6.0.2) + typescript: 6.0.2 - '@solana/codecs-core@5.5.1(typescript@5.9.3)': + '@solana/codecs-core@5.5.1(typescript@6.0.2)': dependencies: - '@solana/errors': 5.5.1(typescript@5.9.3) + '@solana/errors': 5.5.1(typescript@6.0.2) optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 - '@solana/codecs-data-structures@5.5.1(typescript@5.9.3)': + '@solana/codecs-data-structures@5.5.1(typescript@6.0.2)': dependencies: - '@solana/codecs-core': 5.5.1(typescript@5.9.3) - '@solana/codecs-numbers': 5.5.1(typescript@5.9.3) - '@solana/errors': 5.5.1(typescript@5.9.3) + '@solana/codecs-core': 5.5.1(typescript@6.0.2) + '@solana/codecs-numbers': 5.5.1(typescript@6.0.2) + '@solana/errors': 5.5.1(typescript@6.0.2) optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 - '@solana/codecs-numbers@2.3.0(typescript@5.9.3)': + '@solana/codecs-numbers@2.3.0(typescript@6.0.2)': dependencies: - '@solana/codecs-core': 2.3.0(typescript@5.9.3) - '@solana/errors': 2.3.0(typescript@5.9.3) - typescript: 5.9.3 + '@solana/codecs-core': 2.3.0(typescript@6.0.2) + '@solana/errors': 2.3.0(typescript@6.0.2) + typescript: 6.0.2 - '@solana/codecs-numbers@5.5.1(typescript@5.9.3)': + '@solana/codecs-numbers@5.5.1(typescript@6.0.2)': dependencies: - '@solana/codecs-core': 5.5.1(typescript@5.9.3) - '@solana/errors': 5.5.1(typescript@5.9.3) + '@solana/codecs-core': 5.5.1(typescript@6.0.2) + '@solana/errors': 5.5.1(typescript@6.0.2) optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 - '@solana/codecs-strings@5.5.1(typescript@5.9.3)': + '@solana/codecs-strings@5.5.1(typescript@6.0.2)': dependencies: - '@solana/codecs-core': 5.5.1(typescript@5.9.3) - '@solana/codecs-numbers': 5.5.1(typescript@5.9.3) - '@solana/errors': 5.5.1(typescript@5.9.3) + '@solana/codecs-core': 5.5.1(typescript@6.0.2) + '@solana/codecs-numbers': 5.5.1(typescript@6.0.2) + '@solana/errors': 5.5.1(typescript@6.0.2) optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 - '@solana/codecs@5.5.1(typescript@5.9.3)': + '@solana/codecs@5.5.1(typescript@6.0.2)': dependencies: - '@solana/codecs-core': 5.5.1(typescript@5.9.3) - '@solana/codecs-data-structures': 5.5.1(typescript@5.9.3) - '@solana/codecs-numbers': 5.5.1(typescript@5.9.3) - '@solana/codecs-strings': 5.5.1(typescript@5.9.3) - '@solana/options': 5.5.1(typescript@5.9.3) + '@solana/codecs-core': 5.5.1(typescript@6.0.2) + '@solana/codecs-data-structures': 5.5.1(typescript@6.0.2) + '@solana/codecs-numbers': 5.5.1(typescript@6.0.2) + '@solana/codecs-strings': 5.5.1(typescript@6.0.2) + '@solana/options': 5.5.1(typescript@6.0.2) optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/errors@2.3.0(typescript@5.9.3)': + '@solana/errors@2.3.0(typescript@6.0.2)': dependencies: chalk: 5.6.2 commander: 14.0.3 - typescript: 5.9.3 + typescript: 6.0.2 - '@solana/errors@5.5.1(typescript@5.9.3)': + '@solana/errors@5.5.1(typescript@6.0.2)': dependencies: chalk: 5.6.2 commander: 14.0.2 optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 - '@solana/fast-stable-stringify@5.5.1(typescript@5.9.3)': + '@solana/fast-stable-stringify@5.5.1(typescript@6.0.2)': optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 - '@solana/functional@5.5.1(typescript@5.9.3)': + '@solana/functional@5.5.1(typescript@6.0.2)': optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 - '@solana/instruction-plans@5.5.1(typescript@5.9.3)': + '@solana/instruction-plans@5.5.1(typescript@6.0.2)': dependencies: - '@solana/errors': 5.5.1(typescript@5.9.3) - '@solana/instructions': 5.5.1(typescript@5.9.3) - '@solana/keys': 5.5.1(typescript@5.9.3) - '@solana/promises': 5.5.1(typescript@5.9.3) - '@solana/transaction-messages': 5.5.1(typescript@5.9.3) - '@solana/transactions': 5.5.1(typescript@5.9.3) + '@solana/errors': 5.5.1(typescript@6.0.2) + '@solana/instructions': 5.5.1(typescript@6.0.2) + '@solana/keys': 5.5.1(typescript@6.0.2) + '@solana/promises': 5.5.1(typescript@6.0.2) + '@solana/transaction-messages': 5.5.1(typescript@6.0.2) + '@solana/transactions': 5.5.1(typescript@6.0.2) optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/instructions@5.5.1(typescript@5.9.3)': + '@solana/instructions@5.5.1(typescript@6.0.2)': dependencies: - '@solana/codecs-core': 5.5.1(typescript@5.9.3) - '@solana/errors': 5.5.1(typescript@5.9.3) + '@solana/codecs-core': 5.5.1(typescript@6.0.2) + '@solana/errors': 5.5.1(typescript@6.0.2) optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 - '@solana/keys@5.5.1(typescript@5.9.3)': + '@solana/keys@5.5.1(typescript@6.0.2)': dependencies: - '@solana/assertions': 5.5.1(typescript@5.9.3) - '@solana/codecs-core': 5.5.1(typescript@5.9.3) - '@solana/codecs-strings': 5.5.1(typescript@5.9.3) - '@solana/errors': 5.5.1(typescript@5.9.3) - '@solana/nominal-types': 5.5.1(typescript@5.9.3) + '@solana/assertions': 5.5.1(typescript@6.0.2) + '@solana/codecs-core': 5.5.1(typescript@6.0.2) + '@solana/codecs-strings': 5.5.1(typescript@6.0.2) + '@solana/errors': 5.5.1(typescript@6.0.2) + '@solana/nominal-types': 5.5.1(typescript@6.0.2) optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/kit@5.5.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)': - dependencies: - '@solana/accounts': 5.5.1(typescript@5.9.3) - '@solana/addresses': 5.5.1(typescript@5.9.3) - '@solana/codecs': 5.5.1(typescript@5.9.3) - '@solana/errors': 5.5.1(typescript@5.9.3) - '@solana/functional': 5.5.1(typescript@5.9.3) - '@solana/instruction-plans': 5.5.1(typescript@5.9.3) - '@solana/instructions': 5.5.1(typescript@5.9.3) - '@solana/keys': 5.5.1(typescript@5.9.3) - '@solana/offchain-messages': 5.5.1(typescript@5.9.3) - '@solana/plugin-core': 5.5.1(typescript@5.9.3) - '@solana/programs': 5.5.1(typescript@5.9.3) - '@solana/rpc': 5.5.1(typescript@5.9.3) - '@solana/rpc-api': 5.5.1(typescript@5.9.3) - '@solana/rpc-parsed-types': 5.5.1(typescript@5.9.3) - '@solana/rpc-spec-types': 5.5.1(typescript@5.9.3) - '@solana/rpc-subscriptions': 5.5.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) - '@solana/rpc-types': 5.5.1(typescript@5.9.3) - '@solana/signers': 5.5.1(typescript@5.9.3) - '@solana/sysvars': 5.5.1(typescript@5.9.3) - '@solana/transaction-confirmation': 5.5.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) - '@solana/transaction-messages': 5.5.1(typescript@5.9.3) - '@solana/transactions': 5.5.1(typescript@5.9.3) + '@solana/kit@5.5.1(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)': + dependencies: + '@solana/accounts': 5.5.1(typescript@6.0.2) + '@solana/addresses': 5.5.1(typescript@6.0.2) + '@solana/codecs': 5.5.1(typescript@6.0.2) + '@solana/errors': 5.5.1(typescript@6.0.2) + '@solana/functional': 5.5.1(typescript@6.0.2) + '@solana/instruction-plans': 5.5.1(typescript@6.0.2) + '@solana/instructions': 5.5.1(typescript@6.0.2) + '@solana/keys': 5.5.1(typescript@6.0.2) + '@solana/offchain-messages': 5.5.1(typescript@6.0.2) + '@solana/plugin-core': 5.5.1(typescript@6.0.2) + '@solana/programs': 5.5.1(typescript@6.0.2) + '@solana/rpc': 5.5.1(typescript@6.0.2) + '@solana/rpc-api': 5.5.1(typescript@6.0.2) + '@solana/rpc-parsed-types': 5.5.1(typescript@6.0.2) + '@solana/rpc-spec-types': 5.5.1(typescript@6.0.2) + '@solana/rpc-subscriptions': 5.5.1(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10) + '@solana/rpc-types': 5.5.1(typescript@6.0.2) + '@solana/signers': 5.5.1(typescript@6.0.2) + '@solana/sysvars': 5.5.1(typescript@6.0.2) + '@solana/transaction-confirmation': 5.5.1(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10) + '@solana/transaction-messages': 5.5.1(typescript@6.0.2) + '@solana/transactions': 5.5.1(typescript@6.0.2) optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - bufferutil - fastestsmallesttextencoderdecoder - utf-8-validate - '@solana/nominal-types@5.5.1(typescript@5.9.3)': + '@solana/nominal-types@5.5.1(typescript@6.0.2)': optionalDependencies: - typescript: 5.9.3 - - '@solana/offchain-messages@5.5.1(typescript@5.9.3)': - dependencies: - '@solana/addresses': 5.5.1(typescript@5.9.3) - '@solana/codecs-core': 5.5.1(typescript@5.9.3) - '@solana/codecs-data-structures': 5.5.1(typescript@5.9.3) - '@solana/codecs-numbers': 5.5.1(typescript@5.9.3) - '@solana/codecs-strings': 5.5.1(typescript@5.9.3) - '@solana/errors': 5.5.1(typescript@5.9.3) - '@solana/keys': 5.5.1(typescript@5.9.3) - '@solana/nominal-types': 5.5.1(typescript@5.9.3) + typescript: 6.0.2 + + '@solana/offchain-messages@5.5.1(typescript@6.0.2)': + dependencies: + '@solana/addresses': 5.5.1(typescript@6.0.2) + '@solana/codecs-core': 5.5.1(typescript@6.0.2) + '@solana/codecs-data-structures': 5.5.1(typescript@6.0.2) + '@solana/codecs-numbers': 5.5.1(typescript@6.0.2) + '@solana/codecs-strings': 5.5.1(typescript@6.0.2) + '@solana/errors': 5.5.1(typescript@6.0.2) + '@solana/keys': 5.5.1(typescript@6.0.2) + '@solana/nominal-types': 5.5.1(typescript@6.0.2) optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/options@5.5.1(typescript@5.9.3)': + '@solana/options@5.5.1(typescript@6.0.2)': dependencies: - '@solana/codecs-core': 5.5.1(typescript@5.9.3) - '@solana/codecs-data-structures': 5.5.1(typescript@5.9.3) - '@solana/codecs-numbers': 5.5.1(typescript@5.9.3) - '@solana/codecs-strings': 5.5.1(typescript@5.9.3) - '@solana/errors': 5.5.1(typescript@5.9.3) + '@solana/codecs-core': 5.5.1(typescript@6.0.2) + '@solana/codecs-data-structures': 5.5.1(typescript@6.0.2) + '@solana/codecs-numbers': 5.5.1(typescript@6.0.2) + '@solana/codecs-strings': 5.5.1(typescript@6.0.2) + '@solana/errors': 5.5.1(typescript@6.0.2) optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/plugin-core@5.5.1(typescript@5.9.3)': + '@solana/plugin-core@5.5.1(typescript@6.0.2)': optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 - '@solana/programs@5.5.1(typescript@5.9.3)': + '@solana/programs@5.5.1(typescript@6.0.2)': dependencies: - '@solana/addresses': 5.5.1(typescript@5.9.3) - '@solana/errors': 5.5.1(typescript@5.9.3) + '@solana/addresses': 5.5.1(typescript@6.0.2) + '@solana/errors': 5.5.1(typescript@6.0.2) optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/promises@5.5.1(typescript@5.9.3)': + '@solana/promises@5.5.1(typescript@6.0.2)': optionalDependencies: - typescript: 5.9.3 - - '@solana/rpc-api@5.5.1(typescript@5.9.3)': - dependencies: - '@solana/addresses': 5.5.1(typescript@5.9.3) - '@solana/codecs-core': 5.5.1(typescript@5.9.3) - '@solana/codecs-strings': 5.5.1(typescript@5.9.3) - '@solana/errors': 5.5.1(typescript@5.9.3) - '@solana/keys': 5.5.1(typescript@5.9.3) - '@solana/rpc-parsed-types': 5.5.1(typescript@5.9.3) - '@solana/rpc-spec': 5.5.1(typescript@5.9.3) - '@solana/rpc-transformers': 5.5.1(typescript@5.9.3) - '@solana/rpc-types': 5.5.1(typescript@5.9.3) - '@solana/transaction-messages': 5.5.1(typescript@5.9.3) - '@solana/transactions': 5.5.1(typescript@5.9.3) + typescript: 6.0.2 + + '@solana/rpc-api@5.5.1(typescript@6.0.2)': + dependencies: + '@solana/addresses': 5.5.1(typescript@6.0.2) + '@solana/codecs-core': 5.5.1(typescript@6.0.2) + '@solana/codecs-strings': 5.5.1(typescript@6.0.2) + '@solana/errors': 5.5.1(typescript@6.0.2) + '@solana/keys': 5.5.1(typescript@6.0.2) + '@solana/rpc-parsed-types': 5.5.1(typescript@6.0.2) + '@solana/rpc-spec': 5.5.1(typescript@6.0.2) + '@solana/rpc-transformers': 5.5.1(typescript@6.0.2) + '@solana/rpc-types': 5.5.1(typescript@6.0.2) + '@solana/transaction-messages': 5.5.1(typescript@6.0.2) + '@solana/transactions': 5.5.1(typescript@6.0.2) optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/rpc-parsed-types@5.5.1(typescript@5.9.3)': + '@solana/rpc-parsed-types@5.5.1(typescript@6.0.2)': optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 - '@solana/rpc-spec-types@5.5.1(typescript@5.9.3)': + '@solana/rpc-spec-types@5.5.1(typescript@6.0.2)': optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 - '@solana/rpc-spec@5.5.1(typescript@5.9.3)': + '@solana/rpc-spec@5.5.1(typescript@6.0.2)': dependencies: - '@solana/errors': 5.5.1(typescript@5.9.3) - '@solana/rpc-spec-types': 5.5.1(typescript@5.9.3) + '@solana/errors': 5.5.1(typescript@6.0.2) + '@solana/rpc-spec-types': 5.5.1(typescript@6.0.2) optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 - '@solana/rpc-subscriptions-api@5.5.1(typescript@5.9.3)': + '@solana/rpc-subscriptions-api@5.5.1(typescript@6.0.2)': dependencies: - '@solana/addresses': 5.5.1(typescript@5.9.3) - '@solana/keys': 5.5.1(typescript@5.9.3) - '@solana/rpc-subscriptions-spec': 5.5.1(typescript@5.9.3) - '@solana/rpc-transformers': 5.5.1(typescript@5.9.3) - '@solana/rpc-types': 5.5.1(typescript@5.9.3) - '@solana/transaction-messages': 5.5.1(typescript@5.9.3) - '@solana/transactions': 5.5.1(typescript@5.9.3) + '@solana/addresses': 5.5.1(typescript@6.0.2) + '@solana/keys': 5.5.1(typescript@6.0.2) + '@solana/rpc-subscriptions-spec': 5.5.1(typescript@6.0.2) + '@solana/rpc-transformers': 5.5.1(typescript@6.0.2) + '@solana/rpc-types': 5.5.1(typescript@6.0.2) + '@solana/transaction-messages': 5.5.1(typescript@6.0.2) + '@solana/transactions': 5.5.1(typescript@6.0.2) optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/rpc-subscriptions-channel-websocket@5.5.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)': + '@solana/rpc-subscriptions-channel-websocket@5.5.1(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)': dependencies: - '@solana/errors': 5.5.1(typescript@5.9.3) - '@solana/functional': 5.5.1(typescript@5.9.3) - '@solana/rpc-subscriptions-spec': 5.5.1(typescript@5.9.3) - '@solana/subscribable': 5.5.1(typescript@5.9.3) + '@solana/errors': 5.5.1(typescript@6.0.2) + '@solana/functional': 5.5.1(typescript@6.0.2) + '@solana/rpc-subscriptions-spec': 5.5.1(typescript@6.0.2) + '@solana/subscribable': 5.5.1(typescript@6.0.2) ws: 8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - bufferutil - utf-8-validate - '@solana/rpc-subscriptions-spec@5.5.1(typescript@5.9.3)': + '@solana/rpc-subscriptions-spec@5.5.1(typescript@6.0.2)': dependencies: - '@solana/errors': 5.5.1(typescript@5.9.3) - '@solana/promises': 5.5.1(typescript@5.9.3) - '@solana/rpc-spec-types': 5.5.1(typescript@5.9.3) - '@solana/subscribable': 5.5.1(typescript@5.9.3) + '@solana/errors': 5.5.1(typescript@6.0.2) + '@solana/promises': 5.5.1(typescript@6.0.2) + '@solana/rpc-spec-types': 5.5.1(typescript@6.0.2) + '@solana/subscribable': 5.5.1(typescript@6.0.2) optionalDependencies: - typescript: 5.9.3 - - '@solana/rpc-subscriptions@5.5.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)': - dependencies: - '@solana/errors': 5.5.1(typescript@5.9.3) - '@solana/fast-stable-stringify': 5.5.1(typescript@5.9.3) - '@solana/functional': 5.5.1(typescript@5.9.3) - '@solana/promises': 5.5.1(typescript@5.9.3) - '@solana/rpc-spec-types': 5.5.1(typescript@5.9.3) - '@solana/rpc-subscriptions-api': 5.5.1(typescript@5.9.3) - '@solana/rpc-subscriptions-channel-websocket': 5.5.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) - '@solana/rpc-subscriptions-spec': 5.5.1(typescript@5.9.3) - '@solana/rpc-transformers': 5.5.1(typescript@5.9.3) - '@solana/rpc-types': 5.5.1(typescript@5.9.3) - '@solana/subscribable': 5.5.1(typescript@5.9.3) + typescript: 6.0.2 + + '@solana/rpc-subscriptions@5.5.1(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)': + dependencies: + '@solana/errors': 5.5.1(typescript@6.0.2) + '@solana/fast-stable-stringify': 5.5.1(typescript@6.0.2) + '@solana/functional': 5.5.1(typescript@6.0.2) + '@solana/promises': 5.5.1(typescript@6.0.2) + '@solana/rpc-spec-types': 5.5.1(typescript@6.0.2) + '@solana/rpc-subscriptions-api': 5.5.1(typescript@6.0.2) + '@solana/rpc-subscriptions-channel-websocket': 5.5.1(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10) + '@solana/rpc-subscriptions-spec': 5.5.1(typescript@6.0.2) + '@solana/rpc-transformers': 5.5.1(typescript@6.0.2) + '@solana/rpc-types': 5.5.1(typescript@6.0.2) + '@solana/subscribable': 5.5.1(typescript@6.0.2) optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - bufferutil - fastestsmallesttextencoderdecoder - utf-8-validate - '@solana/rpc-transformers@5.5.1(typescript@5.9.3)': + '@solana/rpc-transformers@5.5.1(typescript@6.0.2)': dependencies: - '@solana/errors': 5.5.1(typescript@5.9.3) - '@solana/functional': 5.5.1(typescript@5.9.3) - '@solana/nominal-types': 5.5.1(typescript@5.9.3) - '@solana/rpc-spec-types': 5.5.1(typescript@5.9.3) - '@solana/rpc-types': 5.5.1(typescript@5.9.3) + '@solana/errors': 5.5.1(typescript@6.0.2) + '@solana/functional': 5.5.1(typescript@6.0.2) + '@solana/nominal-types': 5.5.1(typescript@6.0.2) + '@solana/rpc-spec-types': 5.5.1(typescript@6.0.2) + '@solana/rpc-types': 5.5.1(typescript@6.0.2) optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/rpc-transport-http@5.5.1(typescript@5.9.3)': + '@solana/rpc-transport-http@5.5.1(typescript@6.0.2)': dependencies: - '@solana/errors': 5.5.1(typescript@5.9.3) - '@solana/rpc-spec': 5.5.1(typescript@5.9.3) - '@solana/rpc-spec-types': 5.5.1(typescript@5.9.3) + '@solana/errors': 5.5.1(typescript@6.0.2) + '@solana/rpc-spec': 5.5.1(typescript@6.0.2) + '@solana/rpc-spec-types': 5.5.1(typescript@6.0.2) undici-types: 7.22.0 optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 - '@solana/rpc-types@5.5.1(typescript@5.9.3)': + '@solana/rpc-types@5.5.1(typescript@6.0.2)': dependencies: - '@solana/addresses': 5.5.1(typescript@5.9.3) - '@solana/codecs-core': 5.5.1(typescript@5.9.3) - '@solana/codecs-numbers': 5.5.1(typescript@5.9.3) - '@solana/codecs-strings': 5.5.1(typescript@5.9.3) - '@solana/errors': 5.5.1(typescript@5.9.3) - '@solana/nominal-types': 5.5.1(typescript@5.9.3) + '@solana/addresses': 5.5.1(typescript@6.0.2) + '@solana/codecs-core': 5.5.1(typescript@6.0.2) + '@solana/codecs-numbers': 5.5.1(typescript@6.0.2) + '@solana/codecs-strings': 5.5.1(typescript@6.0.2) + '@solana/errors': 5.5.1(typescript@6.0.2) + '@solana/nominal-types': 5.5.1(typescript@6.0.2) optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/rpc@5.5.1(typescript@5.9.3)': - dependencies: - '@solana/errors': 5.5.1(typescript@5.9.3) - '@solana/fast-stable-stringify': 5.5.1(typescript@5.9.3) - '@solana/functional': 5.5.1(typescript@5.9.3) - '@solana/rpc-api': 5.5.1(typescript@5.9.3) - '@solana/rpc-spec': 5.5.1(typescript@5.9.3) - '@solana/rpc-spec-types': 5.5.1(typescript@5.9.3) - '@solana/rpc-transformers': 5.5.1(typescript@5.9.3) - '@solana/rpc-transport-http': 5.5.1(typescript@5.9.3) - '@solana/rpc-types': 5.5.1(typescript@5.9.3) + '@solana/rpc@5.5.1(typescript@6.0.2)': + dependencies: + '@solana/errors': 5.5.1(typescript@6.0.2) + '@solana/fast-stable-stringify': 5.5.1(typescript@6.0.2) + '@solana/functional': 5.5.1(typescript@6.0.2) + '@solana/rpc-api': 5.5.1(typescript@6.0.2) + '@solana/rpc-spec': 5.5.1(typescript@6.0.2) + '@solana/rpc-spec-types': 5.5.1(typescript@6.0.2) + '@solana/rpc-transformers': 5.5.1(typescript@6.0.2) + '@solana/rpc-transport-http': 5.5.1(typescript@6.0.2) + '@solana/rpc-types': 5.5.1(typescript@6.0.2) optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/signers@5.5.1(typescript@5.9.3)': - dependencies: - '@solana/addresses': 5.5.1(typescript@5.9.3) - '@solana/codecs-core': 5.5.1(typescript@5.9.3) - '@solana/errors': 5.5.1(typescript@5.9.3) - '@solana/instructions': 5.5.1(typescript@5.9.3) - '@solana/keys': 5.5.1(typescript@5.9.3) - '@solana/nominal-types': 5.5.1(typescript@5.9.3) - '@solana/offchain-messages': 5.5.1(typescript@5.9.3) - '@solana/transaction-messages': 5.5.1(typescript@5.9.3) - '@solana/transactions': 5.5.1(typescript@5.9.3) + '@solana/signers@5.5.1(typescript@6.0.2)': + dependencies: + '@solana/addresses': 5.5.1(typescript@6.0.2) + '@solana/codecs-core': 5.5.1(typescript@6.0.2) + '@solana/errors': 5.5.1(typescript@6.0.2) + '@solana/instructions': 5.5.1(typescript@6.0.2) + '@solana/keys': 5.5.1(typescript@6.0.2) + '@solana/nominal-types': 5.5.1(typescript@6.0.2) + '@solana/offchain-messages': 5.5.1(typescript@6.0.2) + '@solana/transaction-messages': 5.5.1(typescript@6.0.2) + '@solana/transactions': 5.5.1(typescript@6.0.2) optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/subscribable@5.5.1(typescript@5.9.3)': + '@solana/subscribable@5.5.1(typescript@6.0.2)': dependencies: - '@solana/errors': 5.5.1(typescript@5.9.3) + '@solana/errors': 5.5.1(typescript@6.0.2) optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 - '@solana/sysvars@5.5.1(typescript@5.9.3)': + '@solana/sysvars@5.5.1(typescript@6.0.2)': dependencies: - '@solana/accounts': 5.5.1(typescript@5.9.3) - '@solana/codecs': 5.5.1(typescript@5.9.3) - '@solana/errors': 5.5.1(typescript@5.9.3) - '@solana/rpc-types': 5.5.1(typescript@5.9.3) + '@solana/accounts': 5.5.1(typescript@6.0.2) + '@solana/codecs': 5.5.1(typescript@6.0.2) + '@solana/errors': 5.5.1(typescript@6.0.2) + '@solana/rpc-types': 5.5.1(typescript@6.0.2) optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/transaction-confirmation@5.5.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)': - dependencies: - '@solana/addresses': 5.5.1(typescript@5.9.3) - '@solana/codecs-strings': 5.5.1(typescript@5.9.3) - '@solana/errors': 5.5.1(typescript@5.9.3) - '@solana/keys': 5.5.1(typescript@5.9.3) - '@solana/promises': 5.5.1(typescript@5.9.3) - '@solana/rpc': 5.5.1(typescript@5.9.3) - '@solana/rpc-subscriptions': 5.5.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) - '@solana/rpc-types': 5.5.1(typescript@5.9.3) - '@solana/transaction-messages': 5.5.1(typescript@5.9.3) - '@solana/transactions': 5.5.1(typescript@5.9.3) + '@solana/transaction-confirmation@5.5.1(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)': + dependencies: + '@solana/addresses': 5.5.1(typescript@6.0.2) + '@solana/codecs-strings': 5.5.1(typescript@6.0.2) + '@solana/errors': 5.5.1(typescript@6.0.2) + '@solana/keys': 5.5.1(typescript@6.0.2) + '@solana/promises': 5.5.1(typescript@6.0.2) + '@solana/rpc': 5.5.1(typescript@6.0.2) + '@solana/rpc-subscriptions': 5.5.1(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10) + '@solana/rpc-types': 5.5.1(typescript@6.0.2) + '@solana/transaction-messages': 5.5.1(typescript@6.0.2) + '@solana/transactions': 5.5.1(typescript@6.0.2) optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - bufferutil - fastestsmallesttextencoderdecoder - utf-8-validate - '@solana/transaction-messages@5.5.1(typescript@5.9.3)': - dependencies: - '@solana/addresses': 5.5.1(typescript@5.9.3) - '@solana/codecs-core': 5.5.1(typescript@5.9.3) - '@solana/codecs-data-structures': 5.5.1(typescript@5.9.3) - '@solana/codecs-numbers': 5.5.1(typescript@5.9.3) - '@solana/errors': 5.5.1(typescript@5.9.3) - '@solana/functional': 5.5.1(typescript@5.9.3) - '@solana/instructions': 5.5.1(typescript@5.9.3) - '@solana/nominal-types': 5.5.1(typescript@5.9.3) - '@solana/rpc-types': 5.5.1(typescript@5.9.3) + '@solana/transaction-messages@5.5.1(typescript@6.0.2)': + dependencies: + '@solana/addresses': 5.5.1(typescript@6.0.2) + '@solana/codecs-core': 5.5.1(typescript@6.0.2) + '@solana/codecs-data-structures': 5.5.1(typescript@6.0.2) + '@solana/codecs-numbers': 5.5.1(typescript@6.0.2) + '@solana/errors': 5.5.1(typescript@6.0.2) + '@solana/functional': 5.5.1(typescript@6.0.2) + '@solana/instructions': 5.5.1(typescript@6.0.2) + '@solana/nominal-types': 5.5.1(typescript@6.0.2) + '@solana/rpc-types': 5.5.1(typescript@6.0.2) optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/transactions@5.5.1(typescript@5.9.3)': - dependencies: - '@solana/addresses': 5.5.1(typescript@5.9.3) - '@solana/codecs-core': 5.5.1(typescript@5.9.3) - '@solana/codecs-data-structures': 5.5.1(typescript@5.9.3) - '@solana/codecs-numbers': 5.5.1(typescript@5.9.3) - '@solana/codecs-strings': 5.5.1(typescript@5.9.3) - '@solana/errors': 5.5.1(typescript@5.9.3) - '@solana/functional': 5.5.1(typescript@5.9.3) - '@solana/instructions': 5.5.1(typescript@5.9.3) - '@solana/keys': 5.5.1(typescript@5.9.3) - '@solana/nominal-types': 5.5.1(typescript@5.9.3) - '@solana/rpc-types': 5.5.1(typescript@5.9.3) - '@solana/transaction-messages': 5.5.1(typescript@5.9.3) + '@solana/transactions@5.5.1(typescript@6.0.2)': + dependencies: + '@solana/addresses': 5.5.1(typescript@6.0.2) + '@solana/codecs-core': 5.5.1(typescript@6.0.2) + '@solana/codecs-data-structures': 5.5.1(typescript@6.0.2) + '@solana/codecs-numbers': 5.5.1(typescript@6.0.2) + '@solana/codecs-strings': 5.5.1(typescript@6.0.2) + '@solana/errors': 5.5.1(typescript@6.0.2) + '@solana/functional': 5.5.1(typescript@6.0.2) + '@solana/instructions': 5.5.1(typescript@6.0.2) + '@solana/keys': 5.5.1(typescript@6.0.2) + '@solana/nominal-types': 5.5.1(typescript@6.0.2) + '@solana/rpc-types': 5.5.1(typescript@6.0.2) + '@solana/transaction-messages': 5.5.1(typescript@6.0.2) optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10))': + '@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10))': dependencies: '@solana/wallet-standard-features': 1.3.0 - '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10) '@wallet-standard/base': 1.1.0 '@wallet-standard/features': 1.1.0 eventemitter3: 5.0.4 @@ -13017,13 +13815,13 @@ snapshots: '@wallet-standard/base': 1.1.0 '@wallet-standard/features': 1.1.0 - '@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)': + '@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)': dependencies: '@babel/runtime': 7.28.6 '@noble/curves': 1.9.7 '@noble/hashes': 1.4.0 '@solana/buffer-layout': 4.0.1 - '@solana/codecs-numbers': 2.3.0(typescript@5.9.3) + '@solana/codecs-numbers': 2.3.0(typescript@6.0.2) agentkeepalive: 4.6.0 bn.js: 5.2.3 borsh: 0.7.0 @@ -13040,6 +13838,10 @@ snapshots: - typescript - utf-8-validate + '@standard-schema/spec@1.0.0': {} + + '@standard-schema/spec@1.1.0': {} + '@swc/core-darwin-arm64@1.15.13': optional: true @@ -13086,8 +13888,10 @@ snapshots: '@swc/core-win32-ia32-msvc': 1.15.13 '@swc/core-win32-x64-msvc': 1.15.13 '@swc/helpers': 0.5.19 + optional: true - '@swc/counter@0.1.3': {} + '@swc/counter@0.1.3': + optional: true '@swc/helpers@0.5.19': dependencies: @@ -13096,163 +13900,158 @@ snapshots: '@swc/types@0.1.25': dependencies: '@swc/counter': 0.1.3 + optional: true - '@t3-oss/env-core@0.13.11(typescript@5.9.3)(valibot@1.2.0(typescript@5.9.3))(zod@3.25.76)': + '@t3-oss/env-core@0.13.11(typescript@6.0.2)(valibot@1.2.0(typescript@6.0.2))(zod@4.3.6)': optionalDependencies: - typescript: 5.9.3 - valibot: 1.2.0(typescript@5.9.3) - zod: 3.25.76 + typescript: 6.0.2 + valibot: 1.2.0(typescript@6.0.2) + zod: 4.3.6 - '@tailwindcss/node@4.0.7': + '@tailwindcss/node@4.1.15': dependencies: + '@jridgewell/remapping': 2.3.5 enhanced-resolve: 5.19.0 jiti: 2.6.1 - tailwindcss: 4.0.7 + lightningcss: 1.30.2 + magic-string: 0.30.21 + source-map-js: 1.2.1 + tailwindcss: 4.1.15 + + '@tailwindcss/oxide-android-arm64@4.1.15': + optional: true - '@tailwindcss/oxide-android-arm64@4.0.7': + '@tailwindcss/oxide-darwin-arm64@4.1.15': optional: true - '@tailwindcss/oxide-darwin-arm64@4.0.7': + '@tailwindcss/oxide-darwin-x64@4.1.15': optional: true - '@tailwindcss/oxide-darwin-x64@4.0.7': + '@tailwindcss/oxide-freebsd-x64@4.1.15': optional: true - '@tailwindcss/oxide-freebsd-x64@4.0.7': + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.15': optional: true - '@tailwindcss/oxide-linux-arm-gnueabihf@4.0.7': + '@tailwindcss/oxide-linux-arm64-gnu@4.1.15': optional: true - '@tailwindcss/oxide-linux-arm64-gnu@4.0.7': + '@tailwindcss/oxide-linux-arm64-musl@4.1.15': optional: true - '@tailwindcss/oxide-linux-arm64-musl@4.0.7': + '@tailwindcss/oxide-linux-x64-gnu@4.1.15': optional: true - '@tailwindcss/oxide-linux-x64-gnu@4.0.7': + '@tailwindcss/oxide-linux-x64-musl@4.1.15': optional: true - '@tailwindcss/oxide-linux-x64-musl@4.0.7': + '@tailwindcss/oxide-wasm32-wasi@4.1.15': optional: true - '@tailwindcss/oxide-win32-arm64-msvc@4.0.7': + '@tailwindcss/oxide-win32-arm64-msvc@4.1.15': optional: true - '@tailwindcss/oxide-win32-x64-msvc@4.0.7': + '@tailwindcss/oxide-win32-x64-msvc@4.1.15': optional: true - '@tailwindcss/oxide@4.0.7': + '@tailwindcss/oxide@4.1.15': optionalDependencies: - '@tailwindcss/oxide-android-arm64': 4.0.7 - '@tailwindcss/oxide-darwin-arm64': 4.0.7 - '@tailwindcss/oxide-darwin-x64': 4.0.7 - '@tailwindcss/oxide-freebsd-x64': 4.0.7 - '@tailwindcss/oxide-linux-arm-gnueabihf': 4.0.7 - '@tailwindcss/oxide-linux-arm64-gnu': 4.0.7 - '@tailwindcss/oxide-linux-arm64-musl': 4.0.7 - '@tailwindcss/oxide-linux-x64-gnu': 4.0.7 - '@tailwindcss/oxide-linux-x64-musl': 4.0.7 - '@tailwindcss/oxide-win32-arm64-msvc': 4.0.7 - '@tailwindcss/oxide-win32-x64-msvc': 4.0.7 - - '@tailwindcss/vite@4.0.7(vite@6.4.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2))': - dependencies: - '@tailwindcss/node': 4.0.7 - '@tailwindcss/oxide': 4.0.7 - lightningcss: 1.31.1 - tailwindcss: 4.0.7 - vite: 6.4.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) + '@tailwindcss/oxide-android-arm64': 4.1.15 + '@tailwindcss/oxide-darwin-arm64': 4.1.15 + '@tailwindcss/oxide-darwin-x64': 4.1.15 + '@tailwindcss/oxide-freebsd-x64': 4.1.15 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.15 + '@tailwindcss/oxide-linux-arm64-gnu': 4.1.15 + '@tailwindcss/oxide-linux-arm64-musl': 4.1.15 + '@tailwindcss/oxide-linux-x64-gnu': 4.1.15 + '@tailwindcss/oxide-linux-x64-musl': 4.1.15 + '@tailwindcss/oxide-wasm32-wasi': 4.1.15 + '@tailwindcss/oxide-win32-arm64-msvc': 4.1.15 + '@tailwindcss/oxide-win32-x64-msvc': 4.1.15 + + '@tailwindcss/vite@4.1.15(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.2))': + dependencies: + '@tailwindcss/node': 4.1.15 + '@tailwindcss/oxide': 4.1.15 + tailwindcss: 4.1.15 + vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.2) '@tanstack/history@1.161.6': {} - '@tanstack/query-core@5.95.2': {} + '@tanstack/query-core@5.96.1': {} - '@tanstack/query-devtools@5.95.2': {} + '@tanstack/query-devtools@5.96.1': {} - '@tanstack/react-query-devtools@5.95.2(@tanstack/react-query@5.95.2(react@19.1.0))(react@19.1.0)': + '@tanstack/react-query-devtools@5.96.1(@tanstack/react-query@5.96.1(react@19.2.4))(react@19.2.4)': dependencies: - '@tanstack/query-devtools': 5.95.2 - '@tanstack/react-query': 5.95.2(react@19.1.0) - react: 19.1.0 + '@tanstack/query-devtools': 5.96.1 + '@tanstack/react-query': 5.96.1(react@19.2.4) + react: 19.2.4 - '@tanstack/react-query@5.95.2(react@19.1.0)': + '@tanstack/react-query@5.96.1(react@19.2.4)': dependencies: - '@tanstack/query-core': 5.95.2 - react: 19.1.0 + '@tanstack/query-core': 5.96.1 + react: 19.2.4 - '@tanstack/react-router-devtools@1.166.11(@tanstack/react-router@1.168.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.168.3)(csstype@3.2.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@tanstack/react-router-devtools@1.166.11(@tanstack/react-router@1.168.10(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@tanstack/router-core@1.168.9)(csstype@3.2.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@tanstack/react-router': 1.168.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@tanstack/router-devtools-core': 1.167.1(@tanstack/router-core@1.168.3)(csstype@3.2.3) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@tanstack/react-router': 1.168.10(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@tanstack/router-devtools-core': 1.167.1(@tanstack/router-core@1.168.9)(csstype@3.2.3) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) optionalDependencies: - '@tanstack/router-core': 1.168.3 + '@tanstack/router-core': 1.168.9 transitivePeerDependencies: - csstype - '@tanstack/react-router@1.168.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@tanstack/react-router@1.168.10(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@tanstack/history': 1.161.6 - '@tanstack/react-store': 0.9.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@tanstack/router-core': 1.168.3 + '@tanstack/react-store': 0.9.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@tanstack/router-core': 1.168.9 isbot: 5.1.35 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) - '@tanstack/react-store@0.9.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@tanstack/react-store@0.9.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@tanstack/store': 0.9.2 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - use-sync-external-store: 1.6.0(react@19.1.0) + '@tanstack/store': 0.9.3 + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + use-sync-external-store: 1.6.0(react@19.2.4) - '@tanstack/react-virtual@3.13.23(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@tanstack/react-virtual@3.13.23(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@tanstack/virtual-core': 3.13.23 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) - '@tanstack/router-cli@1.166.18': + '@tanstack/router-cli@1.166.25': dependencies: - '@tanstack/router-generator': 1.166.17 + '@tanstack/router-generator': 1.166.24 chokidar: 3.6.0 yargs: 17.7.2 transitivePeerDependencies: - supports-color - '@tanstack/router-core@1.168.3': + '@tanstack/router-core@1.168.9': dependencies: '@tanstack/history': 1.161.6 cookie-es: 2.0.0 seroval: 1.5.1 seroval-plugins: 1.5.1(seroval@1.5.1) - '@tanstack/router-devtools-core@1.167.1(@tanstack/router-core@1.168.3)(csstype@3.2.3)': - dependencies: - '@tanstack/router-core': 1.168.3 - clsx: 2.1.1 - goober: 2.1.18(csstype@3.2.3) - optionalDependencies: - csstype: 3.2.3 - - '@tanstack/router-devtools@1.166.11(@tanstack/react-router@1.168.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.168.3)(csstype@3.2.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@tanstack/router-devtools-core@1.167.1(@tanstack/router-core@1.168.9)(csstype@3.2.3)': dependencies: - '@tanstack/react-router': 1.168.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@tanstack/react-router-devtools': 1.166.11(@tanstack/react-router@1.168.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.168.3)(csstype@3.2.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@tanstack/router-core': 1.168.9 clsx: 2.1.1 goober: 2.1.18(csstype@3.2.3) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) optionalDependencies: csstype: 3.2.3 - transitivePeerDependencies: - - '@tanstack/router-core' - '@tanstack/router-generator@1.166.17': + '@tanstack/router-generator@1.166.24': dependencies: - '@tanstack/router-core': 1.168.3 + '@tanstack/router-core': 1.168.9 '@tanstack/router-utils': 1.161.6 '@tanstack/virtual-file-routes': 1.161.7 prettier: 3.8.1 @@ -13263,7 +14062,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.167.4(@tanstack/react-router@1.168.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@6.4.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2))': + '@tanstack/router-plugin@1.167.12(@tanstack/react-router@1.168.10(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@types/node@25.3.0)(esbuild@0.25.12)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@babel/core': 7.29.0 '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) @@ -13271,16 +14070,16 @@ snapshots: '@babel/template': 7.28.6 '@babel/traverse': 7.29.0(supports-color@5.5.0) '@babel/types': 7.29.0 - '@tanstack/router-core': 1.168.3 - '@tanstack/router-generator': 1.166.17 + '@tanstack/router-core': 1.168.9 + '@tanstack/router-generator': 1.166.24 '@tanstack/router-utils': 1.161.6 '@tanstack/virtual-file-routes': 1.161.7 chokidar: 3.6.0 unplugin: 2.3.11 zod: 3.25.76 optionalDependencies: - '@tanstack/react-router': 1.168.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - vite: 6.4.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) + '@tanstack/react-router': 1.168.10(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + vite: 8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@types/node@25.3.0)(esbuild@0.25.12)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - supports-color @@ -13298,7 +14097,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/store@0.9.2': {} + '@tanstack/store@0.9.3': {} '@tanstack/virtual-core@3.13.23': {} @@ -13324,12 +14123,12 @@ snapshots: picocolors: 1.1.1 redent: 3.0.0 - '@testing-library/react@16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@testing-library/react@16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@babel/runtime': 7.28.6 '@testing-library/dom': 10.4.1 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) @@ -13338,16 +14137,6 @@ snapshots: dependencies: '@testing-library/dom': 10.4.1 - '@theguild/federation-composition@0.21.3(graphql@16.13.1)': - dependencies: - constant-case: 3.0.4 - debug: 4.4.3(supports-color@5.5.0) - graphql: 16.13.1 - json5: 2.2.3 - lodash.sortby: 4.7.0 - transitivePeerDependencies: - - supports-color - '@tsconfig/node10@1.0.12': {} '@tsconfig/node12@1.0.11': {} @@ -13356,6 +14145,11 @@ snapshots: '@tsconfig/node16@1.0.4': {} + '@tybys/wasm-util@0.10.1': + dependencies: + tslib: 2.8.1 + optional: true + '@types/aria-query@5.0.4': {} '@types/babel__core@7.20.5': @@ -13388,9 +14182,122 @@ snapshots: dependencies: '@types/node': 12.20.55 - '@types/conventional-commits-parser@5.0.2': + '@types/d3-array@3.2.2': {} + + '@types/d3-axis@3.0.6': dependencies: - '@types/node': 25.3.0 + '@types/d3-selection': 3.0.11 + + '@types/d3-brush@3.0.6': + dependencies: + '@types/d3-selection': 3.0.11 + + '@types/d3-chord@3.0.6': {} + + '@types/d3-color@3.1.3': {} + + '@types/d3-contour@3.0.6': + dependencies: + '@types/d3-array': 3.2.2 + '@types/geojson': 7946.0.16 + + '@types/d3-delaunay@6.0.4': {} + + '@types/d3-dispatch@3.0.7': {} + + '@types/d3-drag@3.0.7': + dependencies: + '@types/d3-selection': 3.0.11 + + '@types/d3-dsv@3.0.7': {} + + '@types/d3-ease@3.0.2': {} + + '@types/d3-fetch@3.0.7': + dependencies: + '@types/d3-dsv': 3.0.7 + + '@types/d3-force@3.0.10': {} + + '@types/d3-format@3.0.4': {} + + '@types/d3-geo@3.1.0': + dependencies: + '@types/geojson': 7946.0.16 + + '@types/d3-hierarchy@3.1.7': {} + + '@types/d3-interpolate@3.0.4': + dependencies: + '@types/d3-color': 3.1.3 + + '@types/d3-path@3.1.1': {} + + '@types/d3-polygon@3.0.2': {} + + '@types/d3-quadtree@3.0.6': {} + + '@types/d3-random@3.0.3': {} + + '@types/d3-scale-chromatic@3.1.0': {} + + '@types/d3-scale@4.0.9': + dependencies: + '@types/d3-time': 3.0.4 + + '@types/d3-selection@3.0.11': {} + + '@types/d3-shape@3.1.8': + dependencies: + '@types/d3-path': 3.1.1 + + '@types/d3-time-format@4.0.3': {} + + '@types/d3-time@3.0.4': {} + + '@types/d3-timer@3.0.2': {} + + '@types/d3-transition@3.0.9': + dependencies: + '@types/d3-selection': 3.0.11 + + '@types/d3-zoom@3.0.8': + dependencies: + '@types/d3-interpolate': 3.0.4 + '@types/d3-selection': 3.0.11 + + '@types/d3@7.4.3': + dependencies: + '@types/d3-array': 3.2.2 + '@types/d3-axis': 3.0.6 + '@types/d3-brush': 3.0.6 + '@types/d3-chord': 3.0.6 + '@types/d3-color': 3.1.3 + '@types/d3-contour': 3.0.6 + '@types/d3-delaunay': 6.0.4 + '@types/d3-dispatch': 3.0.7 + '@types/d3-drag': 3.0.7 + '@types/d3-dsv': 3.0.7 + '@types/d3-ease': 3.0.2 + '@types/d3-fetch': 3.0.7 + '@types/d3-force': 3.0.10 + '@types/d3-format': 3.0.4 + '@types/d3-geo': 3.1.0 + '@types/d3-hierarchy': 3.1.7 + '@types/d3-interpolate': 3.0.4 + '@types/d3-path': 3.1.1 + '@types/d3-polygon': 3.0.2 + '@types/d3-quadtree': 3.0.6 + '@types/d3-random': 3.0.3 + '@types/d3-scale': 4.0.9 + '@types/d3-scale-chromatic': 3.1.0 + '@types/d3-selection': 3.0.11 + '@types/d3-shape': 3.1.8 + '@types/d3-time': 3.0.4 + '@types/d3-time-format': 4.0.3 + '@types/d3-timer': 3.0.2 + '@types/d3-transition': 3.0.9 + '@types/d3-zoom': 3.0.8 '@types/debug@4.1.12': dependencies: @@ -13408,12 +14315,12 @@ snapshots: '@types/estree@1.0.8': {} + '@types/geojson@7946.0.16': {} + '@types/hast@3.0.4': dependencies: '@types/unist': 3.0.3 - '@types/js-yaml@4.0.9': {} - '@types/lodash@4.17.24': {} '@types/mdast@4.0.4': @@ -13456,16 +14363,21 @@ snapshots: dependencies: '@types/node': 25.3.0 - '@typescript/vfs@1.6.4(typescript@5.9.3)': + '@typescript/vfs@1.6.4(typescript@6.0.2)': dependencies: debug: 4.4.3(supports-color@5.5.0) - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - supports-color '@ungap/structured-clone@1.3.0': {} - '@uniswap/default-token-list@13.47.0': {} + '@uniswap/default-token-list@18.13.0': {} + + '@upsetjs/venn.js@2.0.0': + optionalDependencies: + d3-selection: 3.0.0 + d3-transition: 3.0.1(d3-selection@3.0.0) '@vanilla-extract/babel-plugin-debug-ids@1.2.2': dependencies: @@ -13473,12 +14385,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@vanilla-extract/compiler@0.3.4(@types/node@25.3.0)(babel-plugin-macros@3.1.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)': + '@vanilla-extract/compiler@0.3.4(@types/node@25.3.0)(babel-plugin-macros@3.1.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.2)': dependencies: '@vanilla-extract/css': 1.18.0(babel-plugin-macros@3.1.0) '@vanilla-extract/integration': 8.0.7(babel-plugin-macros@3.1.0) - vite: 6.4.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) - vite-node: 3.2.4(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.2) + vite-node: 3.2.4(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -13543,7 +14455,7 @@ snapshots: '@vanilla-extract/babel-plugin-debug-ids': 1.2.2 '@vanilla-extract/css': 1.18.0(babel-plugin-macros@3.1.0) dedent: 1.7.1(babel-plugin-macros@3.1.0) - esbuild: 0.27.3 + esbuild: 0.27.4 eval: 0.1.8 find-up: 5.0.0 javascript-stringify: 2.1.0 @@ -13558,11 +14470,11 @@ snapshots: dependencies: '@vanilla-extract/css': 1.17.3(babel-plugin-macros@3.1.0) - '@vanilla-extract/vite-plugin@5.1.4(@types/node@25.3.0)(babel-plugin-macros@3.1.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(vite@6.4.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2)': + '@vanilla-extract/vite-plugin@5.1.4(@types/node@25.3.0)(babel-plugin-macros@3.1.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2)': dependencies: - '@vanilla-extract/compiler': 0.3.4(@types/node@25.3.0)(babel-plugin-macros@3.1.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) + '@vanilla-extract/compiler': 0.3.4(@types/node@25.3.0)(babel-plugin-macros@3.1.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.2) '@vanilla-extract/integration': 8.0.7(babel-plugin-macros@3.1.0) - vite: 6.4.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -13578,94 +14490,85 @@ snapshots: - tsx - yaml - '@vercel/analytics@1.6.1(react@19.1.0)': + '@vercel/analytics@2.0.1(react@19.2.4)': optionalDependencies: - react: 19.1.0 - - '@vitejs/plugin-react-swc@3.11.0(@swc/helpers@0.5.19)(vite@6.4.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2))': - dependencies: - '@rolldown/pluginutils': 1.0.0-beta.27 - '@swc/core': 1.15.13(@swc/helpers@0.5.19) - vite: 6.4.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) - transitivePeerDependencies: - - '@swc/helpers' + react: 19.2.4 - '@vitejs/plugin-react@4.7.0(vite@6.4.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2))': + '@vitejs/plugin-react@5.2.0(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@babel/core': 7.29.0 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0) '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.29.0) - '@rolldown/pluginutils': 1.0.0-beta.27 + '@rolldown/pluginutils': 1.0.0-rc.3 '@types/babel__core': 7.20.5 - react-refresh: 0.17.0 - vite: 6.4.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) + react-refresh: 0.18.0 + vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - supports-color - '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/debug@4.1.13)(@types/node@25.3.0)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2))': + '@vitejs/plugin-react@6.0.1(vite@8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@types/node@25.3.0)(esbuild@0.25.12)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))': + dependencies: + '@rolldown/pluginutils': 1.0.0-rc.7 + vite: 8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@types/node@25.3.0)(esbuild@0.25.12)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + + '@vitest/coverage-v8@4.1.2(vitest@4.1.2(@types/node@25.3.0)(jsdom@29.0.1(@noble/hashes@1.8.0))(vite@8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@types/node@25.3.0)(esbuild@0.25.12)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)))': dependencies: - '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 1.0.2 - ast-v8-to-istanbul: 0.3.11 - debug: 4.4.3(supports-color@5.5.0) + '@vitest/utils': 4.1.2 + ast-v8-to-istanbul: 1.0.0 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 5.0.6 istanbul-reports: 3.2.0 - magic-string: 0.30.21 - magicast: 0.3.5 - std-env: 3.10.0 - test-exclude: 7.0.2 - tinyrainbow: 2.0.0 - vitest: 3.2.4(@types/debug@4.1.13)(@types/node@25.3.0)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) - transitivePeerDependencies: - - supports-color + magicast: 0.5.2 + obug: 2.1.1 + std-env: 4.0.0 + tinyrainbow: 3.1.0 + vitest: 4.1.2(@types/node@25.3.0)(jsdom@29.0.1(@noble/hashes@1.8.0))(vite@8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@types/node@25.3.0)(esbuild@0.25.12)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) - '@vitest/expect@3.2.4': + '@vitest/expect@4.1.2': dependencies: + '@standard-schema/spec': 1.1.0 '@types/chai': 5.2.3 - '@vitest/spy': 3.2.4 - '@vitest/utils': 3.2.4 - chai: 5.3.3 - tinyrainbow: 2.0.0 + '@vitest/spy': 4.1.2 + '@vitest/utils': 4.1.2 + chai: 6.2.2 + tinyrainbow: 3.1.0 - '@vitest/mocker@3.2.4(vite@6.4.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/mocker@4.1.2(vite@8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@types/node@25.3.0)(esbuild@0.25.12)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: - '@vitest/spy': 3.2.4 + '@vitest/spy': 4.1.2 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 6.4.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@types/node@25.3.0)(esbuild@0.25.12)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) - '@vitest/pretty-format@3.2.4': + '@vitest/pretty-format@4.1.2': dependencies: - tinyrainbow: 2.0.0 + tinyrainbow: 3.1.0 - '@vitest/runner@3.2.4': + '@vitest/runner@4.1.2': dependencies: - '@vitest/utils': 3.2.4 + '@vitest/utils': 4.1.2 pathe: 2.0.3 - strip-literal: 3.1.0 - '@vitest/snapshot@3.2.4': + '@vitest/snapshot@4.1.2': dependencies: - '@vitest/pretty-format': 3.2.4 + '@vitest/pretty-format': 4.1.2 + '@vitest/utils': 4.1.2 magic-string: 0.30.21 pathe: 2.0.3 - '@vitest/spy@3.2.4': - dependencies: - tinyspy: 4.0.4 + '@vitest/spy@4.1.2': {} - '@vitest/utils@3.2.4': + '@vitest/utils@4.1.2': dependencies: - '@vitest/pretty-format': 3.2.4 - loupe: 3.2.1 - tinyrainbow: 2.0.0 + '@vitest/pretty-format': 4.1.2 + convert-source-map: 2.0.0 + tinyrainbow: 3.1.0 - '@wagmi/cli@2.10.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)': + '@wagmi/cli@2.10.0(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)': dependencies: - abitype: 1.2.3(typescript@5.9.3)(zod@4.3.6) + abitype: 1.2.3(typescript@6.0.2)(zod@4.3.6) bundle-require: 5.1.0(esbuild@0.25.12) cac: 6.7.14 change-case: 5.4.4 @@ -13681,29 +14584,29 @@ snapshots: picocolors: 1.1.1 picomatch: 3.0.1 prettier: 3.8.1 - viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) + viem: 2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) zod: 4.3.6 optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - bufferutil - utf-8-validate - '@wagmi/connectors@6.2.0(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(@wagmi/core@2.22.1(@tanstack/query-core@5.95.2)(@types/react@19.2.14)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)))(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.95.2)(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76))(zod@3.25.76)': + '@wagmi/connectors@6.2.0(@tanstack/react-query@5.96.1(react@19.2.4))(@types/react@19.2.14)(@wagmi/core@2.22.1(@tanstack/query-core@5.96.1)(@types/react@19.2.14)(react@19.2.4)(typescript@6.0.2)(use-sync-external-store@1.4.0(react@19.2.4))(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6)))(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(use-sync-external-store@1.4.0(react@19.2.4))(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6))(wagmi@2.19.5(@tanstack/query-core@5.96.1)(@tanstack/react-query@5.96.1(react@19.2.4))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6))(zod@4.3.6))(zod@4.3.6)': dependencies: - '@base-org/account': 2.4.0(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(zod@3.25.76) - '@coinbase/wallet-sdk': 4.3.6(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(zod@3.25.76) - '@gemini-wallet/core': 0.3.2(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)) + '@base-org/account': 2.4.0(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(use-sync-external-store@1.4.0(react@19.2.4))(utf-8-validate@5.0.10)(zod@4.3.6) + '@coinbase/wallet-sdk': 4.3.6(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(use-sync-external-store@1.4.0(react@19.2.4))(utf-8-validate@5.0.10)(zod@4.3.6) + '@gemini-wallet/core': 0.3.2(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6)) '@metamask/sdk': 0.33.1(bufferutil@4.1.0)(utf-8-validate@5.0.10) - '@safe-global/safe-apps-provider': 0.18.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@wagmi/core': 2.22.1(@tanstack/query-core@5.95.2)(@types/react@19.2.14)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)) - '@walletconnect/ethereum-provider': 2.21.1(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@safe-global/safe-apps-provider': 0.18.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) + '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) + '@wagmi/core': 2.22.1(@tanstack/query-core@5.96.1)(@types/react@19.2.14)(react@19.2.4)(typescript@6.0.2)(use-sync-external-store@1.4.0(react@19.2.4))(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6)) + '@walletconnect/ethereum-provider': 2.21.1(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) cbw-sdk: '@coinbase/wallet-sdk@3.9.3' - porto: 0.2.35(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(@wagmi/core@2.22.1(@tanstack/query-core@5.95.2)(@types/react@19.2.14)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)))(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.95.2)(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)) - viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + porto: 0.2.35(@tanstack/react-query@5.96.1(react@19.2.4))(@types/react@19.2.14)(@wagmi/core@2.22.1(@tanstack/query-core@5.96.1)(@types/react@19.2.14)(react@19.2.4)(typescript@6.0.2)(use-sync-external-store@1.4.0(react@19.2.4))(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6)))(react@19.2.4)(typescript@6.0.2)(use-sync-external-store@1.4.0(react@19.2.4))(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6))(wagmi@2.19.5(@tanstack/query-core@5.96.1)(@tanstack/react-query@5.96.1(react@19.2.4))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6))(zod@4.3.6)) + viem: 2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -13742,45 +14645,45 @@ snapshots: - wagmi - zod - '@wagmi/connectors@7.2.1(7a3af5fbb3d5f20af6e588f956426ab3)': + '@wagmi/connectors@7.2.1(b756c2b269709ceeeadc4224985368d3)': dependencies: - '@wagmi/core': 3.4.0(@tanstack/query-core@5.95.2)(@types/react@19.2.14)(ox@0.14.7(typescript@5.9.3)(zod@3.25.76))(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)) - viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@wagmi/core': 3.4.0(@tanstack/query-core@5.96.1)(@types/react@19.2.14)(ox@0.14.7(typescript@6.0.2)(zod@4.3.6))(react@19.2.4)(typescript@6.0.2)(use-sync-external-store@1.4.0(react@19.2.4))(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6)) + viem: 2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) optionalDependencies: - '@coinbase/wallet-sdk': 4.3.6(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(zod@3.25.76) + '@coinbase/wallet-sdk': 4.3.6(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(use-sync-external-store@1.4.0(react@19.2.4))(utf-8-validate@5.0.10)(zod@4.3.6) '@metamask/sdk': 0.33.1(bufferutil@4.1.0)(utf-8-validate@5.0.10) - '@safe-global/safe-apps-provider': 0.18.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@walletconnect/ethereum-provider': 2.21.1(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - porto: 0.2.37(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(@wagmi/core@3.4.0(@tanstack/query-core@5.95.2)(@types/react@19.2.14)(ox@0.14.7(typescript@5.9.3)(zod@3.25.76))(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)))(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.95.2)(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)) - typescript: 5.9.3 + '@safe-global/safe-apps-provider': 0.18.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) + '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) + '@walletconnect/ethereum-provider': 2.21.1(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) + porto: 0.2.37(@tanstack/react-query@5.96.1(react@19.2.4))(@types/react@19.2.14)(@wagmi/core@3.4.0(@tanstack/query-core@5.96.1)(@types/react@19.2.14)(ox@0.14.7(typescript@6.0.2)(zod@4.3.6))(react@19.2.4)(typescript@6.0.2)(use-sync-external-store@1.4.0(react@19.2.4))(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6)))(react@19.2.4)(typescript@6.0.2)(use-sync-external-store@1.4.0(react@19.2.4))(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6))(wagmi@2.19.5(@tanstack/query-core@5.96.1)(@tanstack/react-query@5.96.1(react@19.2.4))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6))(zod@4.3.6)) + typescript: 6.0.2 optional: true - '@wagmi/core@2.22.1(@tanstack/query-core@5.95.2)(@types/react@19.2.14)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))': + '@wagmi/core@2.22.1(@tanstack/query-core@5.96.1)(@types/react@19.2.14)(react@19.2.4)(typescript@6.0.2)(use-sync-external-store@1.4.0(react@19.2.4))(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6))': dependencies: eventemitter3: 5.0.1 - mipd: 0.0.7(typescript@5.9.3) - viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - zustand: 5.0.0(@types/react@19.2.14)(react@19.1.0)(use-sync-external-store@1.4.0(react@19.1.0)) + mipd: 0.0.7(typescript@6.0.2) + viem: 2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) + zustand: 5.0.0(@types/react@19.2.14)(react@19.2.4)(use-sync-external-store@1.4.0(react@19.2.4)) optionalDependencies: - '@tanstack/query-core': 5.95.2 - typescript: 5.9.3 + '@tanstack/query-core': 5.96.1 + typescript: 6.0.2 transitivePeerDependencies: - '@types/react' - immer - react - use-sync-external-store - '@wagmi/core@3.4.0(@tanstack/query-core@5.95.2)(@types/react@19.2.14)(ox@0.14.7(typescript@5.9.3)(zod@3.25.76))(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))': + '@wagmi/core@3.4.0(@tanstack/query-core@5.96.1)(@types/react@19.2.14)(ox@0.14.7(typescript@6.0.2)(zod@4.3.6))(react@19.2.4)(typescript@6.0.2)(use-sync-external-store@1.4.0(react@19.2.4))(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6))': dependencies: eventemitter3: 5.0.1 - mipd: 0.0.7(typescript@5.9.3) - viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - zustand: 5.0.0(@types/react@19.2.14)(react@19.1.0)(use-sync-external-store@1.4.0(react@19.1.0)) + mipd: 0.0.7(typescript@6.0.2) + viem: 2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) + zustand: 5.0.0(@types/react@19.2.14)(react@19.2.4)(use-sync-external-store@1.4.0(react@19.2.4)) optionalDependencies: - '@tanstack/query-core': 5.95.2 - ox: 0.14.7(typescript@5.9.3)(zod@3.25.76) - typescript: 5.9.3 + '@tanstack/query-core': 5.96.1 + ox: 0.14.7(typescript@6.0.2)(zod@4.3.6) + typescript: 6.0.2 transitivePeerDependencies: - '@types/react' - immer @@ -13814,7 +14717,7 @@ snapshots: dependencies: '@wallet-standard/base': 1.1.0 - '@walletconnect/core@2.21.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@walletconnect/core@2.21.0(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6)': dependencies: '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-provider': 1.0.14 @@ -13828,7 +14731,7 @@ snapshots: '@walletconnect/safe-json': 1.0.2 '@walletconnect/time': 1.0.2 '@walletconnect/types': 2.21.0 - '@walletconnect/utils': 2.21.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@walletconnect/utils': 2.21.0(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) '@walletconnect/window-getters': 1.0.1 es-toolkit: 1.33.0 events: 3.3.0 @@ -13858,7 +14761,7 @@ snapshots: - utf-8-validate - zod - '@walletconnect/core@2.21.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@walletconnect/core@2.21.1(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6)': dependencies: '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-provider': 1.0.14 @@ -13872,7 +14775,7 @@ snapshots: '@walletconnect/safe-json': 1.0.2 '@walletconnect/time': 1.0.2 '@walletconnect/types': 2.21.1 - '@walletconnect/utils': 2.21.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@walletconnect/utils': 2.21.1(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) '@walletconnect/window-getters': 1.0.1 es-toolkit: 1.33.0 events: 3.3.0 @@ -13902,7 +14805,7 @@ snapshots: - utf-8-validate - zod - '@walletconnect/core@2.23.7(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@walletconnect/core@2.23.7(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6)': dependencies: '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-provider': 1.0.14 @@ -13916,7 +14819,7 @@ snapshots: '@walletconnect/safe-json': 1.0.2 '@walletconnect/time': 1.0.2 '@walletconnect/types': 2.23.7 - '@walletconnect/utils': 2.23.7(typescript@5.9.3)(zod@3.25.76) + '@walletconnect/utils': 2.23.7(typescript@6.0.2)(zod@4.3.6) '@walletconnect/window-getters': 1.0.1 es-toolkit: 1.44.0 events: 3.3.0 @@ -13950,18 +14853,18 @@ snapshots: dependencies: tslib: 1.14.1 - '@walletconnect/ethereum-provider@2.21.1(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@walletconnect/ethereum-provider@2.21.1(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6)': dependencies: - '@reown/appkit': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit': 1.7.8(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) '@walletconnect/jsonrpc-http-connection': 1.0.8 '@walletconnect/jsonrpc-provider': 1.0.14 '@walletconnect/jsonrpc-types': 1.0.4 '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/keyvaluestorage': 1.1.1 - '@walletconnect/sign-client': 2.21.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@walletconnect/sign-client': 2.21.1(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) '@walletconnect/types': 2.21.1 - '@walletconnect/universal-provider': 2.21.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@walletconnect/utils': 2.21.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@walletconnect/universal-provider': 2.21.1(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) + '@walletconnect/utils': 2.21.1(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) events: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -14089,16 +14992,16 @@ snapshots: dependencies: tslib: 1.14.1 - '@walletconnect/sign-client@2.21.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@walletconnect/sign-client@2.21.0(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6)': dependencies: - '@walletconnect/core': 2.21.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@walletconnect/core': 2.21.0(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) '@walletconnect/events': 1.0.1 '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/logger': 2.1.2 '@walletconnect/time': 1.0.2 '@walletconnect/types': 2.21.0 - '@walletconnect/utils': 2.21.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@walletconnect/utils': 2.21.0(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) events: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -14125,16 +15028,16 @@ snapshots: - utf-8-validate - zod - '@walletconnect/sign-client@2.21.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@walletconnect/sign-client@2.21.1(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6)': dependencies: - '@walletconnect/core': 2.21.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@walletconnect/core': 2.21.1(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) '@walletconnect/events': 1.0.1 '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/logger': 2.1.2 '@walletconnect/time': 1.0.2 '@walletconnect/types': 2.21.1 - '@walletconnect/utils': 2.21.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@walletconnect/utils': 2.21.1(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) events: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -14161,16 +15064,16 @@ snapshots: - utf-8-validate - zod - '@walletconnect/sign-client@2.23.7(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@walletconnect/sign-client@2.23.7(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6)': dependencies: - '@walletconnect/core': 2.23.7(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@walletconnect/core': 2.23.7(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) '@walletconnect/events': 1.0.1 '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/logger': 3.0.2 '@walletconnect/time': 1.0.2 '@walletconnect/types': 2.23.7 - '@walletconnect/utils': 2.23.7(typescript@5.9.3)(zod@3.25.76) + '@walletconnect/utils': 2.23.7(typescript@6.0.2)(zod@4.3.6) events: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -14288,7 +15191,7 @@ snapshots: - ioredis - uploadthing - '@walletconnect/universal-provider@2.21.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@walletconnect/universal-provider@2.21.0(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6)': dependencies: '@walletconnect/events': 1.0.1 '@walletconnect/jsonrpc-http-connection': 1.0.8 @@ -14297,9 +15200,9 @@ snapshots: '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/keyvaluestorage': 1.1.1 '@walletconnect/logger': 2.1.2 - '@walletconnect/sign-client': 2.21.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@walletconnect/sign-client': 2.21.0(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) '@walletconnect/types': 2.21.0 - '@walletconnect/utils': 2.21.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@walletconnect/utils': 2.21.0(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) es-toolkit: 1.33.0 events: 3.3.0 transitivePeerDependencies: @@ -14328,7 +15231,7 @@ snapshots: - utf-8-validate - zod - '@walletconnect/universal-provider@2.21.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@walletconnect/universal-provider@2.21.1(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6)': dependencies: '@walletconnect/events': 1.0.1 '@walletconnect/jsonrpc-http-connection': 1.0.8 @@ -14337,9 +15240,9 @@ snapshots: '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/keyvaluestorage': 1.1.1 '@walletconnect/logger': 2.1.2 - '@walletconnect/sign-client': 2.21.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@walletconnect/sign-client': 2.21.1(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) '@walletconnect/types': 2.21.1 - '@walletconnect/utils': 2.21.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@walletconnect/utils': 2.21.1(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) es-toolkit: 1.33.0 events: 3.3.0 transitivePeerDependencies: @@ -14368,7 +15271,7 @@ snapshots: - utf-8-validate - zod - '@walletconnect/universal-provider@2.23.7(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@walletconnect/universal-provider@2.23.7(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6)': dependencies: '@walletconnect/events': 1.0.1 '@walletconnect/jsonrpc-http-connection': 1.0.8 @@ -14377,9 +15280,9 @@ snapshots: '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/keyvaluestorage': 1.1.1 '@walletconnect/logger': 3.0.2 - '@walletconnect/sign-client': 2.23.7(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@walletconnect/sign-client': 2.23.7(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) '@walletconnect/types': 2.23.7 - '@walletconnect/utils': 2.23.7(typescript@5.9.3)(zod@3.25.76) + '@walletconnect/utils': 2.23.7(typescript@6.0.2)(zod@4.3.6) es-toolkit: 1.44.0 events: 3.3.0 transitivePeerDependencies: @@ -14408,7 +15311,7 @@ snapshots: - utf-8-validate - zod - '@walletconnect/utils@2.21.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@walletconnect/utils@2.21.0(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6)': dependencies: '@noble/ciphers': 1.2.1 '@noble/curves': 1.8.1 @@ -14426,7 +15329,7 @@ snapshots: detect-browser: 5.3.0 query-string: 7.1.3 uint8arrays: 3.1.0 - viem: 2.23.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.23.2(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -14452,7 +15355,7 @@ snapshots: - utf-8-validate - zod - '@walletconnect/utils@2.21.1(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@walletconnect/utils@2.21.1(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6)': dependencies: '@noble/ciphers': 1.2.1 '@noble/curves': 1.8.1 @@ -14470,7 +15373,7 @@ snapshots: detect-browser: 5.3.0 query-string: 7.1.3 uint8arrays: 3.1.0 - viem: 2.23.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.23.2(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -14496,7 +15399,7 @@ snapshots: - utf-8-validate - zod - '@walletconnect/utils@2.23.7(typescript@5.9.3)(zod@3.25.76)': + '@walletconnect/utils@2.23.7(typescript@6.0.2)(zod@4.3.6)': dependencies: '@msgpack/msgpack': 3.1.3 '@noble/ciphers': 1.3.0 @@ -14515,7 +15418,7 @@ snapshots: '@walletconnect/window-metadata': 1.0.1 blakejs: 1.2.1 detect-browser: 5.3.0 - ox: 0.9.3(typescript@5.9.3)(zod@3.25.76) + ox: 0.9.3(typescript@6.0.2)(zod@4.3.6) uint8arrays: 3.1.1 transitivePeerDependencies: - '@azure/app-configuration' @@ -14549,19 +15452,19 @@ snapshots: '@walletconnect/window-getters': 1.0.1 tslib: 1.14.1 - '@web3icons/common@0.11.46(typescript@5.9.3)': + '@web3icons/common@0.11.46(typescript@6.0.2)': dependencies: - typescript: 5.9.3 + typescript: 6.0.2 - '@web3icons/core@4.0.51(typescript@5.9.3)': + '@web3icons/core@4.0.51(typescript@6.0.2)': dependencies: - '@web3icons/common': 0.11.46(typescript@5.9.3) - typescript: 5.9.3 + '@web3icons/common': 0.11.46(typescript@6.0.2) + typescript: 6.0.2 - '@web3icons/react@4.1.17(react@19.1.0)(typescript@5.9.3)': + '@web3icons/react@4.1.17(react@19.2.4)(typescript@6.0.2)': dependencies: - '@web3icons/common': 0.11.46(typescript@5.9.3) - react: 19.1.0 + '@web3icons/common': 0.11.46(typescript@6.0.2) + react: 19.2.4 transitivePeerDependencies: - typescript @@ -14968,14 +15871,14 @@ snapshots: '@zag-js/types': 1.35.3 '@zag-js/utils': 1.35.3 - '@zag-js/react@1.35.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@zag-js/react@1.35.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@zag-js/core': 1.35.3 '@zag-js/store': 1.35.3 '@zag-js/types': 1.35.3 '@zag-js/utils': 1.35.3 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) '@zag-js/rect-utils@1.35.3': {} @@ -15142,34 +16045,29 @@ snapshots: '@zag-js/utils@1.35.3': {} - JSONStream@1.3.5: - dependencies: - jsonparse: 1.3.1 - through: 2.3.8 - - abitype@1.0.6(typescript@5.9.3)(zod@3.25.76): + abitype@1.0.6(typescript@6.0.2)(zod@3.25.76): optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 zod: 3.25.76 - abitype@1.0.8(typescript@5.9.3)(zod@3.25.76): + abitype@1.0.8(typescript@6.0.2)(zod@4.3.6): optionalDependencies: - typescript: 5.9.3 - zod: 3.25.76 + typescript: 6.0.2 + zod: 4.3.6 - abitype@1.2.3(typescript@5.9.3)(zod@3.22.4): + abitype@1.2.3(typescript@6.0.2)(zod@3.22.4): optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 zod: 3.22.4 - abitype@1.2.3(typescript@5.9.3)(zod@3.25.76): + abitype@1.2.3(typescript@6.0.2)(zod@3.25.76): optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 zod: 3.25.76 - abitype@1.2.3(typescript@5.9.3)(zod@4.3.6): + abitype@1.2.3(typescript@6.0.2)(zod@4.3.6): optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 zod: 4.3.6 acorn-jsx@5.3.2(acorn@8.16.0): @@ -15182,17 +16080,10 @@ snapshots: acorn@8.16.0: {} - agent-base@7.1.4: {} - agentkeepalive@4.6.0: dependencies: humanize-ms: 1.2.1 - aggregate-error@3.1.0: - dependencies: - clean-stack: 2.2.0 - indent-string: 4.0.0 - ajv@8.18.0: dependencies: fast-deep-equal: 3.1.3 @@ -15200,10 +16091,6 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - ansi-escapes@4.3.2: - dependencies: - type-fest: 0.21.3 - ansi-escapes@7.3.0: dependencies: environment: 1.1.0 @@ -15253,14 +16140,12 @@ snapshots: dependencies: tslib: 2.8.1 - ast-v8-to-istanbul@0.3.11: + ast-v8-to-istanbul@1.0.0: dependencies: '@jridgewell/trace-mapping': 0.3.31 estree-walker: 3.0.3 js-tokens: 10.0.0 - astral-regex@2.0.0: {} - astring@1.9.0: {} async-mutex@0.2.6: @@ -15314,14 +16199,14 @@ snapshots: cosmiconfig: 7.1.0 resolve: 1.22.11 - babel-plugin-styled-components@2.1.4(@babel/core@7.29.0)(styled-components@5.3.11(@babel/core@7.29.0)(react-dom@19.1.0(react@19.1.0))(react-is@17.0.2)(react@19.1.0))(supports-color@5.5.0): + babel-plugin-styled-components@2.1.4(@babel/core@7.29.0)(styled-components@5.3.11(@babel/core@7.29.0)(react-dom@19.2.4(react@19.2.4))(react-is@17.0.2)(react@19.2.4))(supports-color@5.5.0): dependencies: '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-module-imports': 7.28.6(supports-color@5.5.0) '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) lodash: 4.17.23 picomatch: 2.3.1 - styled-components: 5.3.11(@babel/core@7.29.0)(react-dom@19.1.0(react@19.1.0))(react-is@17.0.2)(react@19.1.0) + styled-components: 5.3.11(@babel/core@7.29.0)(react-dom@19.2.4(react@19.2.4))(react-is@17.0.2)(react@19.2.4) transitivePeerDependencies: - '@babel/core' - supports-color @@ -15381,6 +16266,10 @@ snapshots: bech32@2.0.0: {} + bidi-js@1.0.3: + dependencies: + require-from-string: 2.0.2 + big.js@6.2.2: {} binary-extensions@2.3.0: {} @@ -15390,24 +16279,18 @@ snapshots: uint8array-tools: 0.0.9 varuint-bitcoin: 2.0.0 - bitcoinjs-lib@7.0.1(typescript@5.9.3): + bitcoinjs-lib@7.0.1(typescript@6.0.2): dependencies: '@noble/hashes': 1.8.0 bech32: 2.0.0 bip174: 3.0.0 bs58check: 4.0.0 uint8array-tools: 0.0.9 - valibot: 1.2.0(typescript@5.9.3) + valibot: 1.2.0(typescript@6.0.2) varuint-bitcoin: 2.0.0 transitivePeerDependencies: - typescript - bl@4.1.0: - dependencies: - buffer: 5.7.1 - inherits: 2.0.4 - readable-stream: 3.6.2 - bl@5.1.0: dependencies: buffer: 6.0.3 @@ -15428,12 +16311,12 @@ snapshots: bowser@2.14.1: {} - brace-expansion@1.1.12: + brace-expansion@1.1.13: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - brace-expansion@5.0.3: + brace-expansion@5.0.5: dependencies: balanced-match: 4.0.4 @@ -15466,11 +16349,6 @@ snapshots: dependencies: node-int64: 0.4.0 - buffer@5.7.1: - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - buffer@6.0.3: dependencies: base64-js: 1.5.1 @@ -15529,13 +16407,7 @@ snapshots: ccount@2.0.1: {} - chai@5.3.3: - dependencies: - assertion-error: 2.0.1 - check-error: 2.1.3 - deep-eql: 5.0.2 - loupe: 3.2.1 - pathval: 2.0.1 + chai@6.2.2: {} chalk@4.1.2: dependencies: @@ -15586,7 +16458,19 @@ snapshots: charenc@0.0.2: {} - check-error@2.1.3: {} + chevrotain-allstar@0.3.1(chevrotain@11.1.2): + dependencies: + chevrotain: 11.1.2 + lodash-es: 4.17.23 + + chevrotain@11.1.2: + dependencies: + '@chevrotain/cst-dts-gen': 11.1.2 + '@chevrotain/gast': 11.1.2 + '@chevrotain/regexp-to-ast': 11.1.2 + '@chevrotain/types': 11.1.2 + '@chevrotain/utils': 11.1.2 + lodash-es: 4.17.23 chokidar@3.6.0: dependencies: @@ -15610,12 +16494,6 @@ snapshots: chroma-js@3.2.0: {} - clean-stack@2.2.0: {} - - cli-cursor@3.1.0: - dependencies: - restore-cursor: 3.1.0 - cli-cursor@4.0.0: dependencies: restore-cursor: 4.0.0 @@ -15626,17 +16504,12 @@ snapshots: cli-spinners@2.9.2: {} - cli-truncate@2.1.0: - dependencies: - slice-ansi: 3.0.0 - string-width: 4.2.3 - - cli-truncate@4.0.0: + cli-truncate@5.2.0: dependencies: - slice-ansi: 5.0.0 - string-width: 7.2.0 + slice-ansi: 8.0.0 + string-width: 8.2.0 - cli-width@3.0.0: {} + cli-width@4.1.0: {} cliui@6.0.0: dependencies: @@ -15650,8 +16523,6 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - clone@1.0.4: {} - clsx@1.2.1: {} clsx@2.1.1: {} @@ -15680,6 +16551,10 @@ snapshots: commander@2.20.3: {} + commander@7.2.0: {} + + commander@8.3.0: {} + common-tags@1.8.2: {} compare-func@2.0.0: @@ -15707,22 +16582,22 @@ snapshots: confbox@0.1.8: {} - connectkit@1.9.1(@babel/core@7.29.0)(@tanstack/react-query@5.95.2(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react-is@17.0.2)(react@19.1.0)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.95.2)(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)): + connectkit@1.9.2(@babel/core@7.29.0)(@tanstack/react-query@5.96.1(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react-is@17.0.2)(react@19.2.4)(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6))(wagmi@2.19.5(@tanstack/query-core@5.96.1)(@tanstack/react-query@5.96.1(react@19.2.4))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6))(zod@4.3.6)): dependencies: - '@tanstack/react-query': 5.95.2(react@19.1.0) + '@aave/account': 0.2.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6))(wagmi@2.19.5(@tanstack/query-core@5.96.1)(@tanstack/react-query@5.96.1(react@19.2.4))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6))(zod@4.3.6)) + '@tanstack/react-query': 5.96.1(react@19.2.4) buffer: 6.0.3 detect-browser: 5.3.0 - family: 0.1.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.95.2)(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)) - framer-motion: 6.5.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + framer-motion: 6.5.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) qrcode: 1.5.4 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - react-transition-state: 1.1.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react-use-measure: 2.1.7(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + react-transition-state: 1.1.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react-use-measure: 2.1.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4) resize-observer-polyfill: 1.5.1 - styled-components: 5.3.11(@babel/core@7.29.0)(react-dom@19.1.0(react@19.1.0))(react-is@17.0.2)(react@19.1.0) - viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - wagmi: 2.19.5(@tanstack/query-core@5.95.2)(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76) + styled-components: 5.3.11(@babel/core@7.29.0)(react-dom@19.2.4(react@19.2.4))(react-is@17.0.2)(react@19.2.4) + viem: 2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) + wagmi: 2.19.5(@tanstack/query-core@5.96.1)(@tanstack/react-query@5.96.1(react@19.2.4))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6))(zod@4.3.6) transitivePeerDependencies: - '@babel/core' - react-is @@ -15733,26 +16608,24 @@ snapshots: tslib: 2.8.1 upper-case: 2.0.2 - conventional-changelog-angular@7.0.0: + conventional-changelog-angular@8.3.1: dependencies: compare-func: 2.0.0 - conventional-changelog-conventionalcommits@7.0.2: + conventional-changelog-conventionalcommits@9.3.1: dependencies: compare-func: 2.0.0 - conventional-commits-parser@5.0.0: + conventional-commits-parser@6.4.0: dependencies: - JSONStream: 1.3.5 - is-text-path: 2.0.0 - meow: 12.1.1 - split2: 4.2.0 + '@simple-libs/stream-utils': 1.2.0 + meow: 13.2.0 convert-source-map@1.9.0: {} convert-source-map@2.0.0: {} - cookie-es@1.2.2: {} + cookie-es@1.2.3: {} cookie-es@2.0.0: {} @@ -15760,12 +16633,20 @@ snapshots: core-util-is@1.0.3: {} - cosmiconfig-typescript-loader@6.2.0(@types/node@25.3.0)(cosmiconfig@9.0.0(typescript@5.9.3))(typescript@5.9.3): + cose-base@1.0.3: + dependencies: + layout-base: 1.0.2 + + cose-base@2.2.0: + dependencies: + layout-base: 2.0.1 + + cosmiconfig-typescript-loader@6.2.0(@types/node@25.3.0)(cosmiconfig@9.0.1(typescript@6.0.2))(typescript@6.0.2): dependencies: '@types/node': 25.3.0 - cosmiconfig: 9.0.0(typescript@5.9.3) + cosmiconfig: 9.0.1(typescript@6.0.2) jiti: 2.6.1 - typescript: 5.9.3 + typescript: 6.0.2 cosmiconfig@7.1.0: dependencies: @@ -15775,23 +16656,23 @@ snapshots: path-type: 4.0.0 yaml: 1.10.2 - cosmiconfig@8.3.6(typescript@5.9.3): + cosmiconfig@8.3.6(typescript@6.0.2): dependencies: import-fresh: 3.3.1 js-yaml: 4.1.1 parse-json: 5.2.0 path-type: 4.0.0 optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 - cosmiconfig@9.0.0(typescript@5.9.3): + cosmiconfig@9.0.1(typescript@6.0.2): dependencies: env-paths: 2.2.1 import-fresh: 3.3.1 js-yaml: 4.1.1 parse-json: 5.2.0 optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 crc-32@1.2.2: {} @@ -15843,35 +16724,219 @@ snapshots: css-color-keywords: 1.0.0 postcss-value-parser: 4.2.0 + css-tree@3.2.1: + dependencies: + mdn-data: 2.27.1 + source-map-js: 1.2.1 + css-what@6.2.2: {} css.escape@1.5.1: {} cssesc@3.0.0: {} - cssstyle@4.6.0: - dependencies: - '@asamuzakjp/css-color': 3.2.0 - rrweb-cssom: 0.8.0 - csstype@3.2.3: {} - cuer@0.0.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.9.3): + cuer@0.0.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2): dependencies: qr: 0.5.4 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 + + cytoscape-cose-bilkent@4.1.0(cytoscape@3.33.1): + dependencies: + cose-base: 1.0.3 + cytoscape: 3.33.1 + + cytoscape-fcose@2.2.0(cytoscape@3.33.1): + dependencies: + cose-base: 2.2.0 + cytoscape: 3.33.1 + + cytoscape@3.33.1: {} + + d3-array@2.12.1: + dependencies: + internmap: 1.0.1 + + d3-array@3.2.4: + dependencies: + internmap: 2.0.3 + + d3-axis@3.0.0: {} + + d3-brush@3.0.0: + dependencies: + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-transition: 3.0.1(d3-selection@3.0.0) + + d3-chord@3.0.1: + dependencies: + d3-path: 3.1.0 + + d3-color@3.1.0: {} + + d3-contour@4.0.2: + dependencies: + d3-array: 3.2.4 + + d3-delaunay@6.0.4: + dependencies: + delaunator: 5.1.0 + + d3-dispatch@3.0.1: {} + + d3-drag@3.0.0: + dependencies: + d3-dispatch: 3.0.1 + d3-selection: 3.0.0 + + d3-dsv@3.0.1: + dependencies: + commander: 7.2.0 + iconv-lite: 0.6.3 + rw: 1.3.3 + + d3-ease@3.0.1: {} + + d3-fetch@3.0.1: + dependencies: + d3-dsv: 3.0.1 + + d3-force@3.0.0: + dependencies: + d3-dispatch: 3.0.1 + d3-quadtree: 3.0.1 + d3-timer: 3.0.1 + + d3-format@3.1.2: {} + + d3-geo@3.1.1: + dependencies: + d3-array: 3.2.4 - dargs@8.1.0: {} + d3-hierarchy@3.1.2: {} + + d3-interpolate@3.0.1: + dependencies: + d3-color: 3.1.0 + + d3-path@1.0.9: {} + + d3-path@3.1.0: {} + + d3-polygon@3.0.1: {} + + d3-quadtree@3.0.1: {} + + d3-random@3.0.1: {} + + d3-sankey@0.12.3: + dependencies: + d3-array: 2.12.1 + d3-shape: 1.3.7 + + d3-scale-chromatic@3.1.0: + dependencies: + d3-color: 3.1.0 + d3-interpolate: 3.0.1 + + d3-scale@4.0.2: + dependencies: + d3-array: 3.2.4 + d3-format: 3.1.2 + d3-interpolate: 3.0.1 + d3-time: 3.1.0 + d3-time-format: 4.1.0 + + d3-selection@3.0.0: {} + + d3-shape@1.3.7: + dependencies: + d3-path: 1.0.9 + + d3-shape@3.2.0: + dependencies: + d3-path: 3.1.0 + + d3-time-format@4.1.0: + dependencies: + d3-time: 3.1.0 + + d3-time@3.1.0: + dependencies: + d3-array: 3.2.4 + + d3-timer@3.0.1: {} + + d3-transition@3.0.1(d3-selection@3.0.0): + dependencies: + d3-color: 3.1.0 + d3-dispatch: 3.0.1 + d3-ease: 3.0.1 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-timer: 3.0.1 + + d3-zoom@3.0.0: + dependencies: + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-transition: 3.0.1(d3-selection@3.0.0) + + d3@7.9.0: + dependencies: + d3-array: 3.2.4 + d3-axis: 3.0.0 + d3-brush: 3.0.0 + d3-chord: 3.0.1 + d3-color: 3.1.0 + d3-contour: 4.0.2 + d3-delaunay: 6.0.4 + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-dsv: 3.0.1 + d3-ease: 3.0.1 + d3-fetch: 3.0.1 + d3-force: 3.0.0 + d3-format: 3.1.2 + d3-geo: 3.1.1 + d3-hierarchy: 3.1.2 + d3-interpolate: 3.0.1 + d3-path: 3.1.0 + d3-polygon: 3.0.1 + d3-quadtree: 3.0.1 + d3-random: 3.0.1 + d3-scale: 4.0.2 + d3-scale-chromatic: 3.1.0 + d3-selection: 3.0.0 + d3-shape: 3.2.0 + d3-time: 3.1.0 + d3-time-format: 4.1.0 + d3-timer: 3.0.1 + d3-transition: 3.0.1(d3-selection@3.0.0) + d3-zoom: 3.0.0 + + dagre-d3-es@7.0.14: + dependencies: + d3: 7.9.0 + lodash-es: 4.17.23 data-uri-to-buffer@4.0.1: {} - data-urls@5.0.0: + data-urls@7.0.0(@noble/hashes@1.8.0): dependencies: - whatwg-mimetype: 4.0.0 - whatwg-url: 14.2.0 + whatwg-mimetype: 5.0.0 + whatwg-url: 16.0.1(@noble/hashes@1.8.0) + transitivePeerDependencies: + - '@noble/hashes' dataloader@2.2.3: {} @@ -15881,7 +16946,9 @@ snapshots: dayjs@1.11.13: {} - debounce@1.2.1: {} + dayjs@1.11.20: {} + + debounce@2.2.0: {} debug@2.6.9: dependencies: @@ -15913,16 +16980,10 @@ snapshots: optionalDependencies: babel-plugin-macros: 3.1.0 - deep-eql@5.0.2: {} - deep-object-diff@1.1.9: {} deepmerge@4.3.1: {} - defaults@1.0.4: - dependencies: - clone: 1.0.4 - define-data-property@1.1.4: dependencies: es-define-property: 1.0.1 @@ -15931,6 +16992,10 @@ snapshots: defu@6.1.4: {} + delaunator@5.1.0: + dependencies: + robust-predicates: 3.0.3 + delay@5.0.0: {} delayed-stream@1.0.0: {} @@ -15939,11 +17004,13 @@ snapshots: dependency-graph@0.11.0: {} + dependency-graph@1.0.0: {} + dequal@2.0.3: {} - derive-valtio@0.1.0(valtio@1.13.2(@types/react@19.2.14)(react@19.1.0)): + derive-valtio@0.1.0(valtio@1.13.2(@types/react@19.2.14)(react@19.2.4)): dependencies: - valtio: 1.13.2(@types/react@19.2.14)(react@19.1.0) + valtio: 1.13.2(@types/react@19.2.14)(react@19.2.4) destr@2.0.5: {} @@ -15981,6 +17048,10 @@ snapshots: dom-accessibility-api@0.6.3: {} + dompurify@3.3.3: + optionalDependencies: + '@types/trusted-types': 2.0.7 + dot-case@3.0.4: dependencies: no-case: 3.0.4 @@ -15994,8 +17065,6 @@ snapshots: dotenv@16.6.1: {} - dset@3.1.4: {} - dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.2 @@ -16028,8 +17097,6 @@ snapshots: emoji-regex@8.0.0: {} - emoji-regex@9.2.2: {} - encode-utf8@1.0.3: {} encodeurl@2.0.0: {} @@ -16075,6 +17142,8 @@ snapshots: es-module-lexer@1.7.0: {} + es-module-lexer@2.0.0: {} + es-object-atoms@1.1.1: dependencies: es-errors: 1.3.0 @@ -16139,41 +17208,39 @@ snapshots: '@esbuild/win32-ia32': 0.25.12 '@esbuild/win32-x64': 0.25.12 - esbuild@0.27.3: + esbuild@0.27.4: optionalDependencies: - '@esbuild/aix-ppc64': 0.27.3 - '@esbuild/android-arm': 0.27.3 - '@esbuild/android-arm64': 0.27.3 - '@esbuild/android-x64': 0.27.3 - '@esbuild/darwin-arm64': 0.27.3 - '@esbuild/darwin-x64': 0.27.3 - '@esbuild/freebsd-arm64': 0.27.3 - '@esbuild/freebsd-x64': 0.27.3 - '@esbuild/linux-arm': 0.27.3 - '@esbuild/linux-arm64': 0.27.3 - '@esbuild/linux-ia32': 0.27.3 - '@esbuild/linux-loong64': 0.27.3 - '@esbuild/linux-mips64el': 0.27.3 - '@esbuild/linux-ppc64': 0.27.3 - '@esbuild/linux-riscv64': 0.27.3 - '@esbuild/linux-s390x': 0.27.3 - '@esbuild/linux-x64': 0.27.3 - '@esbuild/netbsd-arm64': 0.27.3 - '@esbuild/netbsd-x64': 0.27.3 - '@esbuild/openbsd-arm64': 0.27.3 - '@esbuild/openbsd-x64': 0.27.3 - '@esbuild/openharmony-arm64': 0.27.3 - '@esbuild/sunos-x64': 0.27.3 - '@esbuild/win32-arm64': 0.27.3 - '@esbuild/win32-ia32': 0.27.3 - '@esbuild/win32-x64': 0.27.3 + '@esbuild/aix-ppc64': 0.27.4 + '@esbuild/android-arm': 0.27.4 + '@esbuild/android-arm64': 0.27.4 + '@esbuild/android-x64': 0.27.4 + '@esbuild/darwin-arm64': 0.27.4 + '@esbuild/darwin-x64': 0.27.4 + '@esbuild/freebsd-arm64': 0.27.4 + '@esbuild/freebsd-x64': 0.27.4 + '@esbuild/linux-arm': 0.27.4 + '@esbuild/linux-arm64': 0.27.4 + '@esbuild/linux-ia32': 0.27.4 + '@esbuild/linux-loong64': 0.27.4 + '@esbuild/linux-mips64el': 0.27.4 + '@esbuild/linux-ppc64': 0.27.4 + '@esbuild/linux-riscv64': 0.27.4 + '@esbuild/linux-s390x': 0.27.4 + '@esbuild/linux-x64': 0.27.4 + '@esbuild/netbsd-arm64': 0.27.4 + '@esbuild/netbsd-x64': 0.27.4 + '@esbuild/openbsd-arm64': 0.27.4 + '@esbuild/openbsd-x64': 0.27.4 + '@esbuild/openharmony-arm64': 0.27.4 + '@esbuild/sunos-x64': 0.27.4 + '@esbuild/win32-arm64': 0.27.4 + '@esbuild/win32-ia32': 0.27.4 + '@esbuild/win32-x64': 0.27.4 escalade@3.2.0: {} escape-html@1.0.3: {} - escape-string-regexp@1.0.5: {} - escape-string-regexp@4.0.0: {} escape-string-regexp@5.0.0: {} @@ -16280,18 +17347,6 @@ snapshots: signal-exit: 3.0.7 strip-final-newline: 2.0.0 - execa@8.0.1: - dependencies: - cross-spawn: 7.0.6 - get-stream: 8.0.1 - human-signals: 5.0.0 - is-stream: 3.0.0 - merge-stream: 2.0.0 - npm-run-path: 5.3.0 - onetime: 6.0.0 - signal-exit: 4.1.0 - strip-final-newline: 3.0.0 - expect-type@1.3.0: {} extend@3.0.2: {} @@ -16303,13 +17358,6 @@ snapshots: eyes@0.1.8: {} - family@0.1.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.95.2)(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)): - optionalDependencies: - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - wagmi: 2.19.5(@tanstack/query-core@5.95.2)(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76) - fast-deep-equal@3.1.3: {} fast-glob@3.3.3: @@ -16367,10 +17415,6 @@ snapshots: node-domexception: 1.0.0 web-streams-polyfill: 3.3.3 - figures@3.2.0: - dependencies: - escape-string-regexp: 1.0.5 - fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 @@ -16389,23 +17433,12 @@ snapshots: locate-path: 6.0.0 path-exists: 4.0.0 - find-up@7.0.0: - dependencies: - locate-path: 7.2.0 - path-exists: 5.0.0 - unicorn-magic: 0.1.0 - follow-redirects@1.15.11: {} for-each@0.3.5: dependencies: is-callable: 1.2.7 - foreground-child@3.3.1: - dependencies: - cross-spawn: 7.0.6 - signal-exit: 4.1.0 - form-data@4.0.5: dependencies: asynckit: 0.4.0 @@ -16422,14 +17455,14 @@ snapshots: fraction.js@5.3.4: {} - framer-motion@6.5.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + framer-motion@6.5.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: '@motionone/dom': 10.12.0 framesync: 6.0.1 hey-listen: 1.0.8 popmotion: 11.0.3 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) style-value-types: 5.0.0 tslib: 2.8.1 optionalDependencies: @@ -16449,6 +17482,9 @@ snapshots: fs.realpath@1.0.0: {} + fsevents@2.3.2: + optional: true + fsevents@2.3.3: optional: true @@ -16484,17 +17520,17 @@ snapshots: get-stream@6.0.1: {} - get-stream@8.0.1: {} - - get-tsconfig@4.13.6: + get-tsconfig@4.13.7: dependencies: resolve-pkg-maps: 1.0.0 - git-raw-commits@4.0.0: + git-raw-commits@5.0.1(conventional-commits-parser@6.4.0): dependencies: - dargs: 8.1.0 - meow: 12.1.1 - split2: 4.2.0 + '@conventional-changelog/git-client': 2.6.0(conventional-commits-parser@6.4.0) + meow: 13.2.0 + transitivePeerDependencies: + - conventional-commits-filter + - conventional-commits-parser github-slugger@2.0.0: {} @@ -16502,21 +17538,12 @@ snapshots: dependencies: is-glob: 4.0.3 - glob@10.5.0: - dependencies: - foreground-child: 3.3.1 - jackspeak: 3.4.3 - minimatch: 9.0.6 - minipass: 7.1.3 - package-json-from-dist: 1.0.1 - path-scurry: 1.11.1 - glob@7.2.3: dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 - minimatch: 3.1.3 + minimatch: 3.1.5 once: 1.4.0 path-is-absolute: 1.0.1 @@ -16533,30 +17560,19 @@ snapshots: merge2: 1.4.1 slash: 3.0.0 - globby@14.1.0: - dependencies: - '@sindresorhus/merge-streams': 2.3.0 - fast-glob: 3.3.3 - ignore: 7.0.5 - path-type: 6.0.0 - slash: 5.1.0 - unicorn-magic: 0.3.0 - - globrex@0.1.2: {} - goober@2.1.18(csstype@3.2.3): dependencies: csstype: 3.2.3 gopd@1.2.0: {} - gql.tada@1.9.0(graphql@16.13.1)(typescript@5.9.3): + gql.tada@1.9.0(graphql@16.13.2)(typescript@6.0.2): dependencies: - '@0no-co/graphql.web': 1.2.0(graphql@16.13.1) - '@0no-co/graphqlsp': 1.15.2(graphql@16.13.1)(typescript@5.9.3) - '@gql.tada/cli-utils': 1.7.2(@0no-co/graphqlsp@1.15.2(graphql@16.13.1)(typescript@5.9.3))(graphql@16.13.1)(typescript@5.9.3) - '@gql.tada/internal': 1.0.8(graphql@16.13.1)(typescript@5.9.3) - typescript: 5.9.3 + '@0no-co/graphql.web': 1.2.0(graphql@16.13.2) + '@0no-co/graphqlsp': 1.15.2(graphql@16.13.2)(typescript@6.0.2) + '@gql.tada/cli-utils': 1.7.2(@0no-co/graphqlsp@1.15.2(graphql@16.13.2)(typescript@6.0.2))(graphql@16.13.2)(typescript@6.0.2) + '@gql.tada/internal': 1.0.8(graphql@16.13.2)(typescript@6.0.2) + typescript: 6.0.2 transitivePeerDependencies: - '@gql.tada/svelte-support' - '@gql.tada/vue-support' @@ -16564,18 +17580,18 @@ snapshots: graceful-fs@4.2.11: {} - graphql-config@5.1.5(@types/node@25.3.0)(bufferutil@4.1.0)(crossws@0.3.5)(graphql@16.13.1)(typescript@5.9.3)(utf-8-validate@5.0.10): + graphql-config@5.1.6(@types/node@25.3.0)(bufferutil@4.1.0)(crossws@0.3.5)(graphql@16.13.2)(typescript@6.0.2)(utf-8-validate@5.0.10): dependencies: - '@graphql-tools/graphql-file-loader': 8.1.9(graphql@16.13.1) - '@graphql-tools/json-file-loader': 8.0.26(graphql@16.13.1) - '@graphql-tools/load': 8.1.8(graphql@16.13.1) - '@graphql-tools/merge': 9.1.7(graphql@16.13.1) - '@graphql-tools/url-loader': 8.0.33(@types/node@25.3.0)(bufferutil@4.1.0)(crossws@0.3.5)(graphql@16.13.1)(utf-8-validate@5.0.10) - '@graphql-tools/utils': 10.11.0(graphql@16.13.1) - cosmiconfig: 8.3.6(typescript@5.9.3) - graphql: 16.13.1 + '@graphql-tools/graphql-file-loader': 8.1.12(graphql@16.13.2) + '@graphql-tools/json-file-loader': 8.0.26(graphql@16.13.2) + '@graphql-tools/load': 8.1.8(graphql@16.13.2) + '@graphql-tools/merge': 9.1.7(graphql@16.13.2) + '@graphql-tools/url-loader': 9.1.0(@types/node@25.3.0)(bufferutil@4.1.0)(crossws@0.3.5)(graphql@16.13.2)(utf-8-validate@5.0.10) + '@graphql-tools/utils': 11.0.0(graphql@16.13.2) + cosmiconfig: 8.3.6(typescript@6.0.2) + graphql: 16.13.2 jiti: 2.6.1 - minimatch: 9.0.6 + minimatch: 10.2.5 string-env-interpolation: 1.0.1 tslib: 2.8.1 transitivePeerDependencies: @@ -16583,40 +17599,39 @@ snapshots: - '@types/node' - bufferutil - crossws - - supports-color - typescript - utf-8-validate - graphql-request@6.1.0(graphql@16.13.1): + graphql-request@6.1.0(graphql@16.13.2): dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@16.13.1) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.13.2) cross-fetch: 3.2.0 - graphql: 16.13.1 + graphql: 16.13.2 transitivePeerDependencies: - encoding - graphql-request@7.4.0(graphql@16.13.1): + graphql-request@7.4.0(graphql@16.13.2): dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@16.13.1) - graphql: 16.13.1 + '@graphql-typed-document-node/core': 3.2.0(graphql@16.13.2) + graphql: 16.13.2 - graphql-tag@2.12.6(graphql@16.13.1): + graphql-tag@2.12.6(graphql@16.13.2): dependencies: - graphql: 16.13.1 + graphql: 16.13.2 tslib: 2.8.1 - graphql-ws@6.0.7(crossws@0.3.5)(graphql@16.13.1)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)): + graphql-ws@6.0.7(crossws@0.3.5)(graphql@16.13.2)(ws@8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)): dependencies: - graphql: 16.13.1 + graphql: 16.13.2 optionalDependencies: crossws: 0.3.5 - ws: 8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) + ws: 8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) - graphql@16.13.1: {} + graphql@16.13.2: {} h3@1.15.5: dependencies: - cookie-es: 1.2.2 + cookie-es: 1.2.3 crossws: 0.3.5 defu: 6.1.4 destr: 2.0.5 @@ -16626,6 +17641,8 @@ snapshots: ufo: 1.6.3 uncrypto: 0.1.3 + hachure-fill@0.5.2: {} + has-flag@3.0.0: {} has-flag@4.0.0: {} @@ -16649,6 +17666,39 @@ snapshots: '@types/hast': 3.0.4 space-separated-tokens: 2.0.2 + hast-util-from-dom@5.0.1: + dependencies: + '@types/hast': 3.0.4 + hastscript: 9.0.1 + web-namespaces: 2.0.1 + + hast-util-from-html-isomorphic@2.0.0: + dependencies: + '@types/hast': 3.0.4 + hast-util-from-dom: 5.0.1 + hast-util-from-html: 2.0.3 + unist-util-remove-position: 5.0.0 + + 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 @@ -16742,6 +17792,13 @@ snapshots: dependencies: '@types/hast': 3.0.4 + 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 + hast-util-whitespace@3.0.0: dependencies: '@types/hast': 3.0.4 @@ -16754,6 +17811,14 @@ snapshots: property-information: 6.5.0 space-separated-tokens: 2.0.2 + hastscript@9.0.1: + dependencies: + '@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 + header-case@2.0.4: dependencies: capital-case: 1.0.4 @@ -16767,9 +17832,11 @@ snapshots: hono@4.12.2: {} - html-encoding-sniffer@4.0.0: + html-encoding-sniffer@6.0.0(@noble/hashes@1.8.0): dependencies: - whatwg-encoding: 3.1.1 + '@exodus/bytes': 1.15.0(@noble/hashes@1.8.0) + transitivePeerDependencies: + - '@noble/hashes' html-escaper@2.0.2: {} @@ -16783,24 +17850,8 @@ snapshots: statuses: 2.0.2 toidentifier: 1.0.1 - http-proxy-agent@7.0.2: - dependencies: - agent-base: 7.1.4 - debug: 4.4.3(supports-color@5.5.0) - transitivePeerDependencies: - - supports-color - - https-proxy-agent@7.0.6: - dependencies: - agent-base: 7.1.4 - debug: 4.4.3(supports-color@5.5.0) - transitivePeerDependencies: - - supports-color - human-signals@2.1.0: {} - human-signals@5.0.0: {} - humanize-ms@1.2.1: dependencies: ms: 2.1.3 @@ -16823,10 +17874,10 @@ snapshots: ignore@5.3.2: {} - ignore@7.0.5: {} - immutable@3.7.6: {} + immutable@5.1.5: {} + import-fresh@3.3.1: dependencies: parent-module: 1.0.1 @@ -16849,25 +17900,9 @@ snapshots: inline-style-parser@0.2.7: {} - inquirer@8.2.7(@types/node@25.3.0): - dependencies: - '@inquirer/external-editor': 1.0.3(@types/node@25.3.0) - ansi-escapes: 4.3.2 - chalk: 4.1.2 - cli-cursor: 3.1.0 - cli-width: 3.0.0 - figures: 3.2.0 - lodash: 4.17.23 - mute-stream: 0.0.8 - ora: 5.4.1 - run-async: 2.4.1 - rxjs: 7.8.2 - string-width: 4.2.3 - strip-ansi: 6.0.1 - through: 2.3.8 - wrap-ansi: 6.2.0 - transitivePeerDependencies: - - '@types/node' + internmap@1.0.1: {} + + internmap@2.0.3: {} invariant@2.2.4: dependencies: @@ -16912,8 +17947,6 @@ snapshots: is-fullwidth-code-point@3.0.0: {} - is-fullwidth-code-point@4.0.0: {} - is-fullwidth-code-point@5.1.0: dependencies: get-east-asian-width: 1.5.0 @@ -16932,8 +17965,6 @@ snapshots: is-hexadecimal@2.0.1: {} - is-interactive@1.0.0: {} - is-interactive@2.0.0: {} is-lower-case@2.0.2: @@ -16963,12 +17994,6 @@ snapshots: is-stream@2.0.1: {} - is-stream@3.0.0: {} - - is-text-path@2.0.0: - dependencies: - text-extensions: 2.4.0 - is-typed-array@1.1.15: dependencies: which-typed-array: 1.1.20 @@ -16999,9 +18024,9 @@ snapshots: dependencies: ws: 7.5.10(bufferutil@4.1.0)(utf-8-validate@5.0.10) - isomorphic-ws@5.0.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)): + isomorphic-ws@5.0.0(ws@8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)): dependencies: - ws: 8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) + ws: 8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) isows@1.0.6(ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)): dependencies: @@ -17011,6 +18036,10 @@ snapshots: dependencies: ws: 8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10) + isows@1.0.7(ws@8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)): + dependencies: + ws: 8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) + istanbul-lib-coverage@3.2.2: {} istanbul-lib-report@3.0.1: @@ -17019,25 +18048,11 @@ snapshots: make-dir: 4.0.0 supports-color: 7.2.0 - istanbul-lib-source-maps@5.0.6: - dependencies: - '@jridgewell/trace-mapping': 0.3.31 - debug: 4.4.3(supports-color@5.5.0) - istanbul-lib-coverage: 3.2.2 - transitivePeerDependencies: - - supports-color - istanbul-reports@3.2.0: dependencies: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 - jackspeak@3.4.3: - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 - javascript-stringify@2.1.0: {} jayson@4.3.0(bufferutil@4.1.0)(utf-8-validate@5.0.10): @@ -17058,50 +18073,43 @@ snapshots: - bufferutil - utf-8-validate - jiti@1.21.7: {} - jiti@2.6.1: {} - jose@5.10.0: {} - jose@6.1.3: {} js-tokens@10.0.0: {} js-tokens@4.0.0: {} - js-tokens@9.0.1: {} - js-yaml@4.1.1: dependencies: argparse: 2.0.1 - jsdom@26.1.0(bufferutil@4.1.0)(utf-8-validate@5.0.10): + jsdom@29.0.1(@noble/hashes@1.8.0): dependencies: - cssstyle: 4.6.0 - data-urls: 5.0.0 + '@asamuzakjp/css-color': 5.1.1 + '@asamuzakjp/dom-selector': 7.0.4 + '@bramus/specificity': 2.4.2 + '@csstools/css-syntax-patches-for-csstree': 1.1.2(css-tree@3.2.1) + '@exodus/bytes': 1.15.0(@noble/hashes@1.8.0) + css-tree: 3.2.1 + data-urls: 7.0.0(@noble/hashes@1.8.0) decimal.js: 10.6.0 - html-encoding-sniffer: 4.0.0 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 + html-encoding-sniffer: 6.0.0(@noble/hashes@1.8.0) is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.23 - parse5: 7.3.0 - rrweb-cssom: 0.8.0 + lru-cache: 11.2.7 + parse5: 8.0.0 saxes: 6.0.0 symbol-tree: 3.2.4 - tough-cookie: 5.1.2 + tough-cookie: 6.0.1 + undici: 7.24.7 w3c-xmlserializer: 5.0.0 - webidl-conversions: 7.0.0 - whatwg-encoding: 3.1.1 - whatwg-mimetype: 4.0.0 - whatwg-url: 14.2.0 - ws: 8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) + webidl-conversions: 8.0.1 + whatwg-mimetype: 5.0.0 + whatwg-url: 16.0.1(@noble/hashes@1.8.0) xml-name-validator: 5.0.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate + transitivePeerDependencies: + - '@noble/hashes' jsesc@3.1.0: {} @@ -17131,7 +18139,9 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 - jsonparse@1.3.1: {} + katex@0.16.44: + dependencies: + commander: 8.3.0 keccak@3.0.4: dependencies: @@ -17141,56 +18151,117 @@ snapshots: keyvaluestorage-interface@1.0.0: {} - lightningcss-android-arm64@1.31.1: + khroma@2.1.0: {} + + langium@4.2.1: + dependencies: + chevrotain: 11.1.2 + chevrotain-allstar: 0.3.1(chevrotain@11.1.2) + vscode-languageserver: 9.0.1 + vscode-languageserver-textdocument: 1.0.12 + vscode-uri: 3.1.0 + + layout-base@1.0.2: {} + + layout-base@2.0.1: {} + + lightningcss-android-arm64@1.30.2: + optional: true + + lightningcss-android-arm64@1.32.0: + optional: true + + lightningcss-darwin-arm64@1.30.2: + optional: true + + lightningcss-darwin-arm64@1.32.0: + optional: true + + lightningcss-darwin-x64@1.30.2: + optional: true + + lightningcss-darwin-x64@1.32.0: + optional: true + + lightningcss-freebsd-x64@1.30.2: + optional: true + + lightningcss-freebsd-x64@1.32.0: + optional: true + + lightningcss-linux-arm-gnueabihf@1.30.2: + optional: true + + lightningcss-linux-arm-gnueabihf@1.32.0: + optional: true + + lightningcss-linux-arm64-gnu@1.30.2: + optional: true + + lightningcss-linux-arm64-gnu@1.32.0: optional: true - lightningcss-darwin-arm64@1.31.1: + lightningcss-linux-arm64-musl@1.30.2: optional: true - lightningcss-darwin-x64@1.31.1: + lightningcss-linux-arm64-musl@1.32.0: optional: true - lightningcss-freebsd-x64@1.31.1: + lightningcss-linux-x64-gnu@1.30.2: optional: true - lightningcss-linux-arm-gnueabihf@1.31.1: + lightningcss-linux-x64-gnu@1.32.0: optional: true - lightningcss-linux-arm64-gnu@1.31.1: + lightningcss-linux-x64-musl@1.30.2: optional: true - lightningcss-linux-arm64-musl@1.31.1: + lightningcss-linux-x64-musl@1.32.0: optional: true - lightningcss-linux-x64-gnu@1.31.1: + lightningcss-win32-arm64-msvc@1.30.2: optional: true - lightningcss-linux-x64-musl@1.31.1: + lightningcss-win32-arm64-msvc@1.32.0: optional: true - lightningcss-win32-arm64-msvc@1.31.1: + lightningcss-win32-x64-msvc@1.30.2: optional: true - lightningcss-win32-x64-msvc@1.31.1: + lightningcss-win32-x64-msvc@1.32.0: optional: true - lightningcss@1.31.1: + lightningcss@1.30.2: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.30.2 + lightningcss-darwin-arm64: 1.30.2 + lightningcss-darwin-x64: 1.30.2 + lightningcss-freebsd-x64: 1.30.2 + lightningcss-linux-arm-gnueabihf: 1.30.2 + lightningcss-linux-arm64-gnu: 1.30.2 + lightningcss-linux-arm64-musl: 1.30.2 + lightningcss-linux-x64-gnu: 1.30.2 + lightningcss-linux-x64-musl: 1.30.2 + lightningcss-win32-arm64-msvc: 1.30.2 + lightningcss-win32-x64-msvc: 1.30.2 + + lightningcss@1.32.0: dependencies: detect-libc: 2.1.2 optionalDependencies: - lightningcss-android-arm64: 1.31.1 - lightningcss-darwin-arm64: 1.31.1 - lightningcss-darwin-x64: 1.31.1 - lightningcss-freebsd-x64: 1.31.1 - lightningcss-linux-arm-gnueabihf: 1.31.1 - lightningcss-linux-arm64-gnu: 1.31.1 - lightningcss-linux-arm64-musl: 1.31.1 - lightningcss-linux-x64-gnu: 1.31.1 - lightningcss-linux-x64-musl: 1.31.1 - lightningcss-win32-arm64-msvc: 1.31.1 - lightningcss-win32-x64-msvc: 1.31.1 - - lilconfig@3.1.3: {} + lightningcss-android-arm64: 1.32.0 + lightningcss-darwin-arm64: 1.32.0 + lightningcss-darwin-x64: 1.32.0 + lightningcss-freebsd-x64: 1.32.0 + lightningcss-linux-arm-gnueabihf: 1.32.0 + lightningcss-linux-arm64-gnu: 1.32.0 + lightningcss-linux-arm64-musl: 1.32.0 + lightningcss-linux-x64-gnu: 1.32.0 + lightningcss-linux-x64-musl: 1.32.0 + lightningcss-win32-arm64-msvc: 1.32.0 + lightningcss-win32-x64-msvc: 1.32.0 lines-and-columns@1.2.4: {} @@ -17198,35 +18269,18 @@ snapshots: dependencies: uc.micro: 2.1.0 - lint-staged@15.5.2: + lint-staged@16.4.0: dependencies: - chalk: 5.6.2 - commander: 13.1.0 - debug: 4.4.3(supports-color@5.5.0) - execa: 8.0.1 - lilconfig: 3.1.3 - listr2: 8.3.3 - micromatch: 4.0.8 - pidtree: 0.6.0 + commander: 14.0.3 + listr2: 9.0.5 + picomatch: 4.0.3 string-argv: 0.3.2 + tinyexec: 1.0.4 yaml: 2.8.2 - transitivePeerDependencies: - - supports-color - listr2@4.0.5: + listr2@9.0.5: dependencies: - cli-truncate: 2.1.0 - colorette: 2.0.20 - log-update: 4.0.0 - p-map: 4.0.0 - rfdc: 1.4.1 - rxjs: 7.8.2 - through: 2.3.8 - wrap-ansi: 7.0.0 - - listr2@8.3.3: - dependencies: - cli-truncate: 4.0.0 + cli-truncate: 5.2.0 colorette: 2.0.20 eventemitter3: 5.0.4 log-update: 6.1.0 @@ -17259,18 +18313,12 @@ snapshots: dependencies: p-locate: 5.0.0 - locate-path@7.2.0: - dependencies: - p-locate: 6.0.0 + lodash-es@4.17.23: {} lodash.camelcase@4.3.0: {} - lodash.isplainobject@4.0.6: {} - lodash.kebabcase@4.1.1: {} - lodash.merge@4.6.2: {} - lodash.mergewith@4.6.2: {} lodash.snakecase@4.1.1: {} @@ -17279,8 +18327,6 @@ snapshots: lodash.startcase@4.4.0: {} - lodash.uniq@4.5.0: {} - lodash.upperfirst@4.3.1: {} lodash@4.17.23: {} @@ -17295,13 +18341,6 @@ snapshots: chalk: 5.6.2 is-unicode-supported: 1.3.0 - log-update@4.0.0: - dependencies: - ansi-escapes: 4.3.2 - cli-cursor: 3.1.0 - slice-ansi: 4.0.0 - wrap-ansi: 6.2.0 - log-update@6.1.0: dependencies: ansi-escapes: 7.3.0 @@ -17316,8 +18355,6 @@ snapshots: dependencies: js-tokens: 4.0.0 - loupe@3.2.1: {} - lower-case-first@2.0.2: dependencies: tslib: 2.8.1 @@ -17330,6 +18367,8 @@ snapshots: lru-cache@11.2.6: {} + lru-cache@11.2.7: {} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 @@ -17342,7 +18381,7 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 - magicast@0.3.5: + magicast@0.5.2: dependencies: '@babel/parser': 7.29.0 '@babel/types': 7.29.0 @@ -17371,6 +18410,8 @@ snapshots: markdown-table@3.0.4: {} + marked@16.4.2: {} + math-intrinsics@1.1.0: {} md5@2.3.0: @@ -17567,18 +18608,52 @@ snapshots: dependencies: '@types/mdast': 4.0.4 + mdn-data@2.27.1: {} + mdurl@2.0.0: {} media-query-parser@2.0.2: dependencies: '@babel/runtime': 7.28.6 - meow@12.1.1: {} + meow@13.2.0: {} merge-stream@2.0.0: {} merge2@1.4.1: {} + mermaid-isomorphic@3.1.0(playwright@1.59.1): + dependencies: + '@fortawesome/fontawesome-free': 6.7.2 + katex: 0.16.44 + mermaid: 11.14.0 + optionalDependencies: + playwright: 1.59.1 + + mermaid@11.14.0: + dependencies: + '@braintree/sanitize-url': 7.1.2 + '@iconify/utils': 3.1.0 + '@mermaid-js/parser': 1.1.0 + '@types/d3': 7.4.3 + '@upsetjs/venn.js': 2.0.0 + cytoscape: 3.33.1 + cytoscape-cose-bilkent: 4.1.0(cytoscape@3.33.1) + cytoscape-fcose: 2.2.0(cytoscape@3.33.1) + d3: 7.9.0 + d3-sankey: 0.12.3 + dagre-d3-es: 7.0.14 + dayjs: 1.11.20 + dompurify: 3.3.3 + katex: 0.16.44 + khroma: 2.1.0 + lodash-es: 4.17.23 + marked: 16.4.2 + roughjs: 4.6.6 + stylis: 4.3.6 + ts-dedent: 2.2.0 + uuid: 11.1.0 + meros@1.3.2(@types/node@25.3.0): optionalDependencies: '@types/node': 25.3.0 @@ -17848,7 +18923,7 @@ snapshots: micromark@4.0.2: dependencies: - '@types/debug': 4.1.12 + '@types/debug': 4.1.13 debug: 4.4.3(supports-color@5.5.0) decode-named-character-reference: 1.3.0 devlop: 1.1.0 @@ -17885,33 +18960,27 @@ snapshots: mimic-fn@2.1.0: {} - mimic-fn@4.0.0: {} - mimic-function@5.0.1: {} min-indent@1.0.1: {} - minimatch@10.2.2: - dependencies: - brace-expansion: 5.0.3 + mini-svg-data-uri@1.4.4: {} - minimatch@3.1.3: + minimatch@10.2.5: dependencies: - brace-expansion: 1.1.12 + brace-expansion: 5.0.5 - minimatch@9.0.6: + minimatch@3.1.5: dependencies: - brace-expansion: 5.0.3 + brace-expansion: 1.1.13 minimist@1.2.8: {} - minipass@7.1.3: {} - - minisearch@6.3.0: {} + minisearch@7.2.0: {} - mipd@0.0.7(typescript@5.9.3): + mipd@0.0.7(typescript@6.0.2): optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 mlly@1.8.0: dependencies: @@ -17930,7 +18999,7 @@ snapshots: multiformats@9.9.0: {} - mute-stream@0.0.8: {} + mute-stream@2.0.0: {} nanoid@3.3.11: {} @@ -17940,10 +19009,10 @@ snapshots: negotiator@0.6.4: {} - next-themes@0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + next-themes@0.4.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) no-case@3.0.4: dependencies: @@ -17986,17 +19055,19 @@ snapshots: dependencies: path-key: 3.1.1 - npm-run-path@5.3.0: - dependencies: - path-key: 4.0.0 - nth-check@2.1.1: dependencies: boolbase: 1.0.0 nullthrows@1.1.1: {} - nwsapi@2.2.23: {} + nuqs@2.8.9(@tanstack/react-router@1.168.10(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-router@7.13.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4): + dependencies: + '@standard-schema/spec': 1.0.0 + react: 19.2.4 + optionalDependencies: + '@tanstack/react-router': 1.168.10(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react-router: 7.13.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) obj-multiplex@1.0.0: dependencies: @@ -18006,6 +19077,8 @@ snapshots: object-assign@4.1.1: {} + obug@2.1.1: {} + ofetch@1.5.1: dependencies: destr: 2.0.5 @@ -18030,10 +19103,6 @@ snapshots: dependencies: mimic-fn: 2.1.0 - onetime@6.0.0: - dependencies: - mimic-fn: 4.0.0 - onetime@7.0.0: dependencies: mimic-function: 5.0.1 @@ -18050,18 +19119,6 @@ snapshots: openapi-typescript-helpers@0.0.15: {} - ora@5.4.1: - dependencies: - bl: 4.1.0 - chalk: 4.1.2 - cli-cursor: 3.1.0 - cli-spinners: 2.9.2 - is-interactive: 1.0.0 - is-unicode-supported: 0.1.0 - log-symbols: 4.1.0 - strip-ansi: 6.0.1 - wcwidth: 1.0.1 - ora@7.0.1: dependencies: chalk: 5.6.2 @@ -18074,7 +19131,7 @@ snapshots: string-width: 6.1.0 strip-ansi: 7.1.2 - ox@0.14.7(typescript@5.9.3)(zod@3.22.4): + ox@0.14.7(typescript@6.0.2)(zod@3.22.4): dependencies: '@adraffy/ens-normalize': 1.11.1 '@noble/ciphers': 1.3.0 @@ -18082,14 +19139,14 @@ snapshots: '@noble/hashes': 1.8.0 '@scure/bip32': 1.7.0 '@scure/bip39': 1.6.0 - abitype: 1.2.3(typescript@5.9.3)(zod@3.22.4) + abitype: 1.2.3(typescript@6.0.2)(zod@3.22.4) eventemitter3: 5.0.1 optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - zod - ox@0.14.7(typescript@5.9.3)(zod@3.25.76): + ox@0.14.7(typescript@6.0.2)(zod@3.25.76): dependencies: '@adraffy/ens-normalize': 1.11.1 '@noble/ciphers': 1.3.0 @@ -18097,14 +19154,14 @@ snapshots: '@noble/hashes': 1.8.0 '@scure/bip32': 1.7.0 '@scure/bip39': 1.6.0 - abitype: 1.2.3(typescript@5.9.3)(zod@3.25.76) + abitype: 1.2.3(typescript@6.0.2)(zod@3.25.76) eventemitter3: 5.0.1 optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - zod - ox@0.14.7(typescript@5.9.3)(zod@4.3.6): + ox@0.14.7(typescript@6.0.2)(zod@4.3.6): dependencies: '@adraffy/ens-normalize': 1.11.1 '@noble/ciphers': 1.3.0 @@ -18112,42 +19169,42 @@ snapshots: '@noble/hashes': 1.8.0 '@scure/bip32': 1.7.0 '@scure/bip39': 1.6.0 - abitype: 1.2.3(typescript@5.9.3)(zod@4.3.6) + abitype: 1.2.3(typescript@6.0.2)(zod@4.3.6) eventemitter3: 5.0.1 optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - zod - ox@0.6.7(typescript@5.9.3)(zod@3.25.76): + ox@0.6.7(typescript@6.0.2)(zod@4.3.6): dependencies: '@adraffy/ens-normalize': 1.11.1 '@noble/curves': 1.8.1 '@noble/hashes': 1.7.1 '@scure/bip32': 1.6.2 '@scure/bip39': 1.5.4 - abitype: 1.0.8(typescript@5.9.3)(zod@3.25.76) + abitype: 1.0.8(typescript@6.0.2)(zod@4.3.6) eventemitter3: 5.0.1 optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - zod - ox@0.6.9(typescript@5.9.3)(zod@3.25.76): + ox@0.6.9(typescript@6.0.2)(zod@4.3.6): dependencies: '@adraffy/ens-normalize': 1.11.1 '@noble/curves': 1.9.7 '@noble/hashes': 1.8.0 '@scure/bip32': 1.7.0 '@scure/bip39': 1.6.0 - abitype: 1.2.3(typescript@5.9.3)(zod@3.25.76) + abitype: 1.2.3(typescript@6.0.2)(zod@4.3.6) eventemitter3: 5.0.1 optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - zod - ox@0.9.17(typescript@5.9.3)(zod@4.3.6): + ox@0.9.17(typescript@6.0.2)(zod@4.3.6): dependencies: '@adraffy/ens-normalize': 1.11.1 '@noble/ciphers': 1.3.0 @@ -18155,14 +19212,14 @@ snapshots: '@noble/hashes': 1.8.0 '@scure/bip32': 1.7.0 '@scure/bip39': 1.6.0 - abitype: 1.2.3(typescript@5.9.3)(zod@4.3.6) + abitype: 1.2.3(typescript@6.0.2)(zod@4.3.6) eventemitter3: 5.0.1 optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - zod - ox@0.9.3(typescript@5.9.3)(zod@3.25.76): + ox@0.9.3(typescript@6.0.2)(zod@4.3.6): dependencies: '@adraffy/ens-normalize': 1.11.1 '@noble/ciphers': 1.3.0 @@ -18170,10 +19227,10 @@ snapshots: '@noble/hashes': 1.8.0 '@scure/bip32': 1.7.0 '@scure/bip39': 1.6.0 - abitype: 1.2.3(typescript@5.9.3)(zod@3.25.76) + abitype: 1.2.3(typescript@6.0.2)(zod@4.3.6) eventemitter3: 5.0.1 optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - zod @@ -18185,10 +19242,6 @@ snapshots: dependencies: yocto-queue: 0.1.0 - p-limit@4.0.0: - dependencies: - yocto-queue: 1.2.2 - p-limit@5.0.0: dependencies: yocto-queue: 1.2.2 @@ -18201,17 +19254,9 @@ snapshots: dependencies: p-limit: 3.1.0 - p-locate@6.0.0: - dependencies: - p-limit: 4.0.0 - - p-map@4.0.0: - dependencies: - aggregate-error: 3.1.0 - p-try@2.2.0: {} - package-json-from-dist@1.0.1: {} + package-manager-detector@1.6.0: {} param-case@3.0.4: dependencies: @@ -18249,6 +19294,10 @@ snapshots: dependencies: entities: 6.0.1 + parse5@8.0.0: + dependencies: + entities: 6.0.1 + parseurl@1.3.3: {} pascal-case@3.1.2: @@ -18261,16 +19310,14 @@ snapshots: dot-case: 3.0.4 tslib: 2.8.1 - path-exists@4.0.0: {} + path-data-parser@0.1.0: {} - path-exists@5.0.0: {} + path-exists@4.0.0: {} path-is-absolute@1.0.1: {} path-key@3.1.1: {} - path-key@4.0.0: {} - path-parse@1.0.7: {} path-root-regex@0.1.2: {} @@ -18279,21 +19326,12 @@ snapshots: dependencies: path-root-regex: 0.1.2 - path-scurry@1.11.1: - dependencies: - lru-cache: 10.4.3 - minipass: 7.1.3 - path-type@4.0.0: {} - path-type@6.0.0: {} - pathe@1.1.2: {} pathe@2.0.3: {} - pathval@2.0.1: {} - perfect-freehand@1.2.3: {} picocolors@1.1.1: {} @@ -18304,7 +19342,7 @@ snapshots: picomatch@4.0.3: {} - pidtree@0.6.0: {} + picomatch@4.0.4: {} pify@3.0.0: {} @@ -18357,8 +19395,23 @@ snapshots: mlly: 1.8.0 pathe: 2.0.3 + playwright-core@1.59.1: {} + + playwright@1.59.1: + dependencies: + playwright-core: 1.59.1 + optionalDependencies: + fsevents: 2.3.2 + pngjs@5.0.0: {} + points-on-curve@0.2.0: {} + + points-on-path@0.2.1: + dependencies: + path-data-parser: 0.1.0 + points-on-curve: 0.2.0 + pony-cause@2.1.11: {} popmotion@11.0.3: @@ -18368,41 +19421,41 @@ snapshots: style-value-types: 5.0.0 tslib: 2.8.1 - porto@0.2.35(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(@wagmi/core@2.22.1(@tanstack/query-core@5.95.2)(@types/react@19.2.14)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)))(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.95.2)(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)): + porto@0.2.35(@tanstack/react-query@5.96.1(react@19.2.4))(@types/react@19.2.14)(@wagmi/core@2.22.1(@tanstack/query-core@5.96.1)(@types/react@19.2.14)(react@19.2.4)(typescript@6.0.2)(use-sync-external-store@1.4.0(react@19.2.4))(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6)))(react@19.2.4)(typescript@6.0.2)(use-sync-external-store@1.4.0(react@19.2.4))(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6))(wagmi@2.19.5(@tanstack/query-core@5.96.1)(@tanstack/react-query@5.96.1(react@19.2.4))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6))(zod@4.3.6)): dependencies: - '@wagmi/core': 2.22.1(@tanstack/query-core@5.95.2)(@types/react@19.2.14)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)) + '@wagmi/core': 2.22.1(@tanstack/query-core@5.96.1)(@types/react@19.2.14)(react@19.2.4)(typescript@6.0.2)(use-sync-external-store@1.4.0(react@19.2.4))(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6)) hono: 4.12.2 idb-keyval: 6.2.2 - mipd: 0.0.7(typescript@5.9.3) - ox: 0.9.17(typescript@5.9.3)(zod@4.3.6) - viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + mipd: 0.0.7(typescript@6.0.2) + ox: 0.9.17(typescript@6.0.2)(zod@4.3.6) + viem: 2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) zod: 4.3.6 - zustand: 5.0.11(@types/react@19.2.14)(react@19.1.0)(use-sync-external-store@1.4.0(react@19.1.0)) + zustand: 5.0.11(@types/react@19.2.14)(react@19.2.4)(use-sync-external-store@1.4.0(react@19.2.4)) optionalDependencies: - '@tanstack/react-query': 5.95.2(react@19.1.0) - react: 19.1.0 - typescript: 5.9.3 - wagmi: 2.19.5(@tanstack/query-core@5.95.2)(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76) + '@tanstack/react-query': 5.96.1(react@19.2.4) + react: 19.2.4 + typescript: 6.0.2 + wagmi: 2.19.5(@tanstack/query-core@5.96.1)(@tanstack/react-query@5.96.1(react@19.2.4))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6))(zod@4.3.6) transitivePeerDependencies: - '@types/react' - immer - use-sync-external-store - porto@0.2.37(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(@wagmi/core@3.4.0(@tanstack/query-core@5.95.2)(@types/react@19.2.14)(ox@0.14.7(typescript@5.9.3)(zod@3.25.76))(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)))(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.95.2)(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)): + porto@0.2.37(@tanstack/react-query@5.96.1(react@19.2.4))(@types/react@19.2.14)(@wagmi/core@3.4.0(@tanstack/query-core@5.96.1)(@types/react@19.2.14)(ox@0.14.7(typescript@6.0.2)(zod@4.3.6))(react@19.2.4)(typescript@6.0.2)(use-sync-external-store@1.4.0(react@19.2.4))(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6)))(react@19.2.4)(typescript@6.0.2)(use-sync-external-store@1.4.0(react@19.2.4))(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6))(wagmi@2.19.5(@tanstack/query-core@5.96.1)(@tanstack/react-query@5.96.1(react@19.2.4))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6))(zod@4.3.6)): dependencies: - '@wagmi/core': 3.4.0(@tanstack/query-core@5.95.2)(@types/react@19.2.14)(ox@0.14.7(typescript@5.9.3)(zod@3.25.76))(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)) + '@wagmi/core': 3.4.0(@tanstack/query-core@5.96.1)(@types/react@19.2.14)(ox@0.14.7(typescript@6.0.2)(zod@4.3.6))(react@19.2.4)(typescript@6.0.2)(use-sync-external-store@1.4.0(react@19.2.4))(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6)) hono: 4.12.2 idb-keyval: 6.2.2 - mipd: 0.0.7(typescript@5.9.3) - ox: 0.9.17(typescript@5.9.3)(zod@4.3.6) - viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + mipd: 0.0.7(typescript@6.0.2) + ox: 0.9.17(typescript@6.0.2)(zod@4.3.6) + viem: 2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) zod: 4.3.6 - zustand: 5.0.11(@types/react@19.2.14)(react@19.1.0)(use-sync-external-store@1.4.0(react@19.1.0)) + zustand: 5.0.11(@types/react@19.2.14)(react@19.2.4)(use-sync-external-store@1.4.0(react@19.2.4)) optionalDependencies: - '@tanstack/react-query': 5.95.2(react@19.1.0) - react: 19.1.0 - typescript: 5.9.3 - wagmi: 2.19.5(@tanstack/query-core@5.95.2)(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76) + '@tanstack/react-query': 5.96.1(react@19.2.4) + react: 19.2.4 + typescript: 6.0.2 + wagmi: 2.19.5(@tanstack/query-core@5.96.1)(@tanstack/react-query@5.96.1(react@19.2.4))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6))(zod@4.3.6) transitivePeerDependencies: - '@types/react' - immer @@ -18420,9 +19473,15 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + postcss@8.5.8: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + preact@10.24.2: {} - preact@10.29.0: {} + preact@10.29.1: {} prettier@3.8.1: {} @@ -18491,65 +19550,65 @@ snapshots: quick-format-unescaped@4.0.4: {} - radix-ui@1.4.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + radix-ui@1.4.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-accessible-icon': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-accordion': 1.2.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-alert-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-aspect-ratio': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-avatar': 1.1.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-checkbox': 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-context-menu': 2.2.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-dropdown-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-form': 0.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-hover-card': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-label': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-menubar': 1.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-navigation-menu': 1.2.14(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-one-time-password-field': 0.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-password-toggle-field': 0.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-popover': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-progress': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-radio-group': 1.3.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-scroll-area': 1.2.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-select': 2.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-separator': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slider': 1.3.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-switch': 1.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-toast': 1.2.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-toggle': 1.1.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-toggle-group': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-toolbar': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-tooltip': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.1.0) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-accessible-icon': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-accordion': 1.2.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-alert-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-aspect-ratio': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-avatar': 1.1.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-checkbox': 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context-menu': 2.2.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-dropdown-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-form': 0.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-hover-card': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-label': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-menubar': 1.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-navigation-menu': 1.2.14(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-one-time-password-field': 0.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-password-toggle-field': 0.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-popover': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-progress': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-radio-group': 1.3.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-scroll-area': 1.2.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-select': 2.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-separator': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slider': 1.3.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-switch': 1.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-toast': 1.2.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-toggle': 1.1.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-toggle-group': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-toolbar': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-tooltip': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) @@ -18558,96 +19617,96 @@ snapshots: range-parser@1.2.1: {} - react-dom@19.1.0(react@19.1.0): + react-dom@19.2.4(react@19.2.4): dependencies: - react: 19.1.0 - scheduler: 0.26.0 + react: 19.2.4 + scheduler: 0.27.0 - react-error-boundary@6.1.1(react@19.1.0): + react-error-boundary@6.1.1(react@19.2.4): dependencies: - react: 19.1.0 + react: 19.2.4 - react-intersection-observer@9.16.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + react-intersection-observer@9.16.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: - react: 19.1.0 + react: 19.2.4 optionalDependencies: - react-dom: 19.1.0(react@19.1.0) + react-dom: 19.2.4(react@19.2.4) react-is@16.13.1: {} react-is@17.0.2: {} - react-jazzicon@1.0.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + react-jazzicon@1.0.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: mersenne-twister: 1.1.0 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) - react-number-format@5.4.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + react-number-format@5.4.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) - react-refresh@0.17.0: {} + react-refresh@0.18.0: {} - react-remove-scroll-bar@2.3.8(@types/react@19.2.14)(react@19.1.0): + react-remove-scroll-bar@2.3.8(@types/react@19.2.14)(react@19.2.4): dependencies: - react: 19.1.0 - react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.1.0) + react: 19.2.4 + react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.2.4) tslib: 2.8.1 optionalDependencies: '@types/react': 19.2.14 - react-remove-scroll@2.6.2(@types/react@19.2.14)(react@19.1.0): + react-remove-scroll@2.6.2(@types/react@19.2.14)(react@19.2.4): dependencies: - react: 19.1.0 - react-remove-scroll-bar: 2.3.8(@types/react@19.2.14)(react@19.1.0) - react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.1.0) + react: 19.2.4 + react-remove-scroll-bar: 2.3.8(@types/react@19.2.14)(react@19.2.4) + react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.2.4) tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@19.2.14)(react@19.1.0) - use-sidecar: 1.1.3(@types/react@19.2.14)(react@19.1.0) + use-callback-ref: 1.3.3(@types/react@19.2.14)(react@19.2.4) + use-sidecar: 1.1.3(@types/react@19.2.14)(react@19.2.4) optionalDependencies: '@types/react': 19.2.14 - react-remove-scroll@2.7.2(@types/react@19.2.14)(react@19.1.0): + react-remove-scroll@2.7.2(@types/react@19.2.14)(react@19.2.4): dependencies: - react: 19.1.0 - react-remove-scroll-bar: 2.3.8(@types/react@19.2.14)(react@19.1.0) - react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.1.0) + react: 19.2.4 + react-remove-scroll-bar: 2.3.8(@types/react@19.2.14)(react@19.2.4) + react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.2.4) tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@19.2.14)(react@19.1.0) - use-sidecar: 1.1.3(@types/react@19.2.14)(react@19.1.0) + use-callback-ref: 1.3.3(@types/react@19.2.14)(react@19.2.4) + use-sidecar: 1.1.3(@types/react@19.2.14)(react@19.2.4) optionalDependencies: '@types/react': 19.2.14 - react-router@7.13.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + react-router@7.13.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: cookie: 1.1.1 - react: 19.1.0 + react: 19.2.4 set-cookie-parser: 2.7.2 optionalDependencies: - react-dom: 19.1.0(react@19.1.0) + react-dom: 19.2.4(react@19.2.4) - react-style-singleton@2.2.3(@types/react@19.2.14)(react@19.1.0): + react-style-singleton@2.2.3(@types/react@19.2.14)(react@19.2.4): dependencies: get-nonce: 1.0.1 - react: 19.1.0 + react: 19.2.4 tslib: 2.8.1 optionalDependencies: '@types/react': 19.2.14 - react-transition-state@1.1.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + react-transition-state@1.1.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) - react-use-measure@2.1.7(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + react-use-measure@2.1.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: - react: 19.1.0 + react: 19.2.4 optionalDependencies: - react-dom: 19.1.0(react@19.1.0) + react-dom: 19.2.4(react@19.2.4) - react@19.1.0: {} + react@19.2.4: {} readable-stream@2.3.8: dependencies: @@ -18746,6 +19805,20 @@ snapshots: hast-util-select: 6.0.4 unified: 11.0.5 + rehype-mermaid@3.0.0(playwright@1.59.1): + dependencies: + '@types/hast': 3.0.4 + hast-util-from-html-isomorphic: 2.0.0 + hast-util-to-text: 4.0.2 + mermaid-isomorphic: 3.1.0(playwright@1.59.1) + mini-svg-data-uri: 1.4.4 + space-separated-tokens: 2.0.2 + unified: 11.0.5 + unist-util-visit-parents: 6.0.2 + vfile: 6.0.3 + optionalDependencies: + playwright: 1.59.1 + rehype-recma@1.0.0: dependencies: '@types/estree': 1.0.8 @@ -18866,11 +19939,6 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - restore-cursor@3.1.0: - dependencies: - onetime: 5.1.2 - signal-exit: 3.0.7 - restore-cursor@4.0.0: dependencies: onetime: 5.1.2 @@ -18885,6 +19953,32 @@ snapshots: rfdc@1.4.1: {} + robust-predicates@3.0.3: {} + + rolldown@1.0.0-rc.12(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2): + dependencies: + '@oxc-project/types': 0.122.0 + '@rolldown/pluginutils': 1.0.0-rc.12 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.0.0-rc.12 + '@rolldown/binding-darwin-arm64': 1.0.0-rc.12 + '@rolldown/binding-darwin-x64': 1.0.0-rc.12 + '@rolldown/binding-freebsd-x64': 1.0.0-rc.12 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.12 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.12 + '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.12 + '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.12 + '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.12 + '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.12 + '@rolldown/binding-linux-x64-musl': 1.0.0-rc.12 + '@rolldown/binding-openharmony-arm64': 1.0.0-rc.12 + '@rolldown/binding-wasm32-wasi': 1.0.0-rc.12(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.12 + '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.12 + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + rollup@4.59.0: dependencies: '@types/estree': 1.0.8 @@ -18916,30 +20010,31 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.59.0 fsevents: 2.3.3 + roughjs@4.6.6: + dependencies: + hachure-fill: 0.5.2 + path-data-parser: 0.1.0 + points-on-curve: 0.2.0 + points-on-path: 0.2.1 + rpc-websockets@9.3.3: dependencies: '@swc/helpers': 0.5.19 '@types/uuid': 8.3.4 '@types/ws': 8.18.1 buffer: 6.0.3 - eventemitter3: 5.0.1 + eventemitter3: 5.0.4 uuid: 8.3.2 ws: 8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) optionalDependencies: bufferutil: 4.1.0 utf-8-validate: 5.0.10 - rrweb-cssom@0.8.0: {} - - run-async@2.4.1: {} - run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 - rxjs@7.8.2: - dependencies: - tslib: 2.8.1 + rw@1.3.3: {} safe-buffer@5.1.2: {} @@ -18959,9 +20054,7 @@ snapshots: dependencies: xmlchars: 2.2.0 - scheduler@0.26.0: {} - - scuid@1.1.0: {} + scheduler@0.27.0: {} semver@6.3.1: {} @@ -19064,26 +20157,12 @@ snapshots: slash@3.0.0: {} - slash@5.1.0: {} - - slice-ansi@3.0.0: - dependencies: - ansi-styles: 4.3.0 - astral-regex: 2.0.0 - is-fullwidth-code-point: 3.0.0 - - slice-ansi@4.0.0: - dependencies: - ansi-styles: 4.3.0 - astral-regex: 2.0.0 - is-fullwidth-code-point: 3.0.0 - - slice-ansi@5.0.0: + slice-ansi@7.1.2: dependencies: ansi-styles: 6.2.3 - is-fullwidth-code-point: 4.0.0 + is-fullwidth-code-point: 5.1.0 - slice-ansi@7.1.2: + slice-ansi@8.0.0: dependencies: ansi-styles: 6.2.3 is-fullwidth-code-point: 5.1.0 @@ -19143,7 +20222,7 @@ snapshots: statuses@2.0.2: {} - std-env@3.10.0: {} + std-env@4.0.0: {} stdin-discarder@0.1.0: dependencies: @@ -19169,12 +20248,6 @@ snapshots: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - string-width@5.1.2: - dependencies: - eastasianwidth: 0.2.0 - emoji-regex: 9.2.2 - strip-ansi: 7.1.2 - string-width@6.1.0: dependencies: eastasianwidth: 0.2.0 @@ -19187,6 +20260,11 @@ snapshots: get-east-asian-width: 1.5.0 strip-ansi: 7.1.2 + string-width@8.2.0: + dependencies: + get-east-asian-width: 1.5.0 + strip-ansi: 7.1.2 + string_decoder@1.1.1: dependencies: safe-buffer: 5.1.2 @@ -19210,16 +20288,10 @@ snapshots: strip-final-newline@2.0.0: {} - strip-final-newline@3.0.0: {} - strip-indent@3.0.0: dependencies: min-indent: 1.0.1 - strip-literal@3.1.0: - dependencies: - js-tokens: 9.0.1 - style-to-js@1.1.21: dependencies: style-to-object: 1.0.14 @@ -19233,18 +20305,18 @@ snapshots: hey-listen: 1.0.8 tslib: 2.8.1 - styled-components@5.3.11(@babel/core@7.29.0)(react-dom@19.1.0(react@19.1.0))(react-is@17.0.2)(react@19.1.0): + styled-components@5.3.11(@babel/core@7.29.0)(react-dom@19.2.4(react@19.2.4))(react-is@17.0.2)(react@19.2.4): dependencies: '@babel/helper-module-imports': 7.28.6(supports-color@5.5.0) '@babel/traverse': 7.29.0(supports-color@5.5.0) '@emotion/is-prop-valid': 1.4.0 '@emotion/stylis': 0.8.5 '@emotion/unitless': 0.7.5 - babel-plugin-styled-components: 2.1.4(@babel/core@7.29.0)(styled-components@5.3.11(@babel/core@7.29.0)(react-dom@19.1.0(react@19.1.0))(react-is@17.0.2)(react@19.1.0))(supports-color@5.5.0) + babel-plugin-styled-components: 2.1.4(@babel/core@7.29.0)(styled-components@5.3.11(@babel/core@7.29.0)(react-dom@19.2.4(react@19.2.4))(react-is@17.0.2)(react@19.2.4))(supports-color@5.5.0) css-to-react-native: 3.2.0 hoist-non-react-statics: 3.3.2 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) react-is: 17.0.2 shallowequal: 1.1.0 supports-color: 5.5.0 @@ -19253,6 +20325,8 @@ snapshots: stylis@4.2.0: {} + stylis@4.3.6: {} + superstruct@1.0.4: {} superstruct@2.0.2: {} @@ -19279,28 +20353,14 @@ snapshots: timeout-signal: 2.0.0 whatwg-mimetype: 4.0.0 - sync-fetch@0.6.0-2: - dependencies: - node-fetch: 3.3.2 - timeout-signal: 2.0.0 - whatwg-mimetype: 4.0.0 - tabbable@6.4.0: {} - tailwindcss@4.0.7: {} + tailwindcss@4.1.15: {} tapable@2.3.0: {} - test-exclude@7.0.2: - dependencies: - '@istanbuljs/schema': 0.1.3 - glob: 10.5.0 - minimatch: 10.2.2 - text-encoding-utf-8@1.0.2: {} - text-extensions@2.4.0: {} - thread-stream@0.15.2: dependencies: real-require: 0.1.0 @@ -19309,38 +20369,32 @@ snapshots: dependencies: real-require: 0.2.0 - through@2.3.8: {} - timeout-signal@2.0.0: {} tiny-invariant@1.3.3: {} tinybench@2.9.0: {} - tinyexec@0.3.2: {} - tinyexec@1.0.2: {} + tinyexec@1.0.4: {} + tinyglobby@0.2.15: dependencies: fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 - tinypool@1.1.1: {} - - tinyrainbow@2.0.0: {} - - tinyspy@4.0.4: {} + tinyrainbow@3.1.0: {} title-case@3.0.3: dependencies: tslib: 2.8.1 - tldts-core@6.1.86: {} + tldts-core@7.0.27: {} - tldts@6.1.86: + tldts@7.0.27: dependencies: - tldts-core: 6.1.86 + tldts-core: 7.0.27 to-buffer@1.2.2: dependencies: @@ -19356,13 +20410,13 @@ snapshots: toml@3.0.0: {} - tough-cookie@5.1.2: + tough-cookie@6.0.1: dependencies: - tldts: 6.1.86 + tldts: 7.0.27 tr46@0.0.3: {} - tr46@5.1.1: + tr46@6.0.0: dependencies: punycode: 2.3.1 @@ -19370,9 +20424,11 @@ snapshots: trough@2.2.0: {} + ts-dedent@2.2.0: {} + ts-log@2.2.7: {} - ts-node@10.9.2(@swc/core@1.15.13(@swc/helpers@0.5.19))(@types/node@25.3.0)(typescript@5.9.3): + ts-node@10.9.2(@swc/core@1.15.13(@swc/helpers@0.5.19))(@types/node@25.3.0)(typescript@6.0.2): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.12 @@ -19386,16 +20442,12 @@ snapshots: create-require: 1.1.1 diff: 4.0.4 make-error: 1.3.6 - typescript: 5.9.3 + typescript: 6.0.2 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: '@swc/core': 1.15.13(@swc/helpers@0.5.19) - tsconfck@3.1.6(typescript@5.9.3): - optionalDependencies: - typescript: 5.9.3 - tslib@1.14.1: {} tslib@2.4.1: {} @@ -19406,22 +20458,30 @@ snapshots: tsx@4.21.0: dependencies: - esbuild: 0.27.3 - get-tsconfig: 4.13.6 + esbuild: 0.27.4 + get-tsconfig: 4.13.7 optionalDependencies: fsevents: 2.3.3 twoslash-protocol@0.2.12: {} - twoslash@0.2.12(typescript@5.9.3): + twoslash-protocol@0.3.6: {} + + twoslash@0.2.12(typescript@6.0.2): dependencies: - '@typescript/vfs': 1.6.4(typescript@5.9.3) + '@typescript/vfs': 1.6.4(typescript@6.0.2) twoslash-protocol: 0.2.12 - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - supports-color - type-fest@0.21.3: {} + twoslash@0.3.6(typescript@6.0.2): + dependencies: + '@typescript/vfs': 1.6.4(typescript@6.0.2) + twoslash-protocol: 0.3.6 + typescript: 6.0.2 + transitivePeerDependencies: + - supports-color typed-array-buffer@1.0.3: dependencies: @@ -19429,33 +20489,33 @@ snapshots: es-errors: 1.3.0 is-typed-array: 1.1.15 - typedoc-github-theme@0.3.1(typedoc@0.28.17(typescript@5.9.3)): + typedoc-github-theme@0.4.0(typedoc@0.28.18(typescript@6.0.2)): dependencies: - typedoc: 0.28.17(typescript@5.9.3) + typedoc: 0.28.18(typescript@6.0.2) - typedoc-plugin-inline-sources@1.3.0(typedoc@0.28.17(typescript@5.9.3)): + typedoc-plugin-inline-sources@1.3.0(typedoc@0.28.18(typescript@6.0.2)): dependencies: - typedoc: 0.28.17(typescript@5.9.3) + typedoc: 0.28.18(typescript@6.0.2) - typedoc-plugin-missing-exports@4.1.2(typedoc@0.28.17(typescript@5.9.3)): + typedoc-plugin-missing-exports@4.1.2(typedoc@0.28.18(typescript@6.0.2)): dependencies: - typedoc: 0.28.17(typescript@5.9.3) + typedoc: 0.28.18(typescript@6.0.2) - typedoc-plugin-rename-defaults@0.7.3(typedoc@0.28.17(typescript@5.9.3)): + typedoc-plugin-rename-defaults@0.7.3(typedoc@0.28.18(typescript@6.0.2)): dependencies: camelcase: 8.0.0 - typedoc: 0.28.17(typescript@5.9.3) + typedoc: 0.28.18(typescript@6.0.2) - typedoc@0.28.17(typescript@5.9.3): + typedoc@0.28.18(typescript@6.0.2): dependencies: - '@gerrit0/mini-shiki': 3.22.0 + '@gerrit0/mini-shiki': 3.23.0 lunr: 2.3.9 markdown-it: 14.1.1 - minimatch: 9.0.6 - typescript: 5.9.3 + minimatch: 10.2.5 + typescript: 6.0.2 yaml: 2.8.2 - typescript@5.9.3: {} + typescript@6.0.2: {} ua-parser-js@1.0.41: {} @@ -19483,9 +20543,7 @@ snapshots: undici-types@7.22.0: {} - unicorn-magic@0.1.0: {} - - unicorn-magic@0.3.0: {} + undici@7.24.7: {} unified@11.0.5: dependencies: @@ -19497,6 +20555,11 @@ snapshots: trough: 2.2.0 vfile: 6.0.3 + unist-util-find-after@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + unist-util-is@6.0.1: dependencies: '@types/unist': 3.0.3 @@ -19519,6 +20582,11 @@ snapshots: dependencies: '@types/unist': 3.0.3 + unist-util-remove-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-visit: 5.1.0 + unist-util-stringify-position@4.0.0: dependencies: '@types/unist': 3.0.3 @@ -19578,36 +20646,36 @@ snapshots: urlpattern-polyfill@10.1.0: {} - use-callback-ref@1.3.3(@types/react@19.2.14)(react@19.1.0): + use-callback-ref@1.3.3(@types/react@19.2.14)(react@19.2.4): dependencies: - react: 19.1.0 + react: 19.2.4 tslib: 2.8.1 optionalDependencies: '@types/react': 19.2.14 - use-debounce@10.1.0(react@19.1.0): + use-debounce@10.1.1(react@19.2.4): dependencies: - react: 19.1.0 + react: 19.2.4 - use-sidecar@1.1.3(@types/react@19.2.14)(react@19.1.0): + use-sidecar@1.1.3(@types/react@19.2.14)(react@19.2.4): dependencies: detect-node-es: 1.1.0 - react: 19.1.0 + react: 19.2.4 tslib: 2.8.1 optionalDependencies: '@types/react': 19.2.14 - use-sync-external-store@1.2.0(react@19.1.0): + use-sync-external-store@1.2.0(react@19.2.4): dependencies: - react: 19.1.0 + react: 19.2.4 - use-sync-external-store@1.4.0(react@19.1.0): + use-sync-external-store@1.4.0(react@19.2.4): dependencies: - react: 19.1.0 + react: 19.2.4 - use-sync-external-store@1.6.0(react@19.1.0): + use-sync-external-store@1.6.0(react@19.2.4): dependencies: - react: 19.1.0 + react: 19.2.4 utf-8-validate@5.0.10: dependencies: @@ -19623,31 +20691,33 @@ snapshots: is-typed-array: 1.1.15 which-typed-array: 1.1.20 + uuid@11.1.0: {} + uuid@8.3.2: {} uuid@9.0.1: {} v8-compile-cache-lib@3.0.1: {} - valibot@1.2.0(typescript@5.9.3): + valibot@1.2.0(typescript@6.0.2): optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 - valtio@1.13.2(@types/react@19.2.14)(react@19.1.0): + valtio@1.13.2(@types/react@19.2.14)(react@19.2.4): dependencies: - derive-valtio: 0.1.0(valtio@1.13.2(@types/react@19.2.14)(react@19.1.0)) + derive-valtio: 0.1.0(valtio@1.13.2(@types/react@19.2.14)(react@19.2.4)) proxy-compare: 2.6.0 - use-sync-external-store: 1.2.0(react@19.1.0) + use-sync-external-store: 1.2.0(react@19.2.4) optionalDependencies: '@types/react': 19.2.14 - react: 19.1.0 + react: 19.2.4 - valtio@2.1.7(@types/react@19.2.14)(react@19.1.0): + valtio@2.1.7(@types/react@19.2.14)(react@19.2.4): dependencies: proxy-compare: 3.0.1 optionalDependencies: '@types/react': 19.2.14 - react: 19.1.0 + react: 19.2.4 varuint-bitcoin@2.0.0: dependencies: @@ -19655,6 +20725,16 @@ snapshots: vary@1.1.2: {} + vfile-location@5.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile: 6.0.3 + + vfile-matter@5.0.1: + dependencies: + vfile: 6.0.3 + yaml: 2.8.2 + vfile-message@4.0.3: dependencies: '@types/unist': 3.0.3 @@ -19665,81 +20745,81 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - viem@2.23.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76): + viem@2.23.2(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6): dependencies: '@noble/curves': 1.8.1 '@noble/hashes': 1.7.1 '@scure/bip32': 1.6.2 '@scure/bip39': 1.5.4 - abitype: 1.0.8(typescript@5.9.3)(zod@3.25.76) + abitype: 1.0.8(typescript@6.0.2)(zod@4.3.6) isows: 1.0.6(ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)) - ox: 0.6.7(typescript@5.9.3)(zod@3.25.76) + ox: 0.6.7(typescript@6.0.2)(zod@4.3.6) ws: 8.18.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - bufferutil - utf-8-validate - zod - viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.22.4): + viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@3.22.4): dependencies: '@noble/curves': 1.9.1 '@noble/hashes': 1.8.0 '@scure/bip32': 1.7.0 '@scure/bip39': 1.6.0 - abitype: 1.2.3(typescript@5.9.3)(zod@3.22.4) + abitype: 1.2.3(typescript@6.0.2)(zod@3.22.4) isows: 1.0.7(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)) - ox: 0.14.7(typescript@5.9.3)(zod@3.22.4) + ox: 0.14.7(typescript@6.0.2)(zod@3.22.4) ws: 8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10) optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - bufferutil - utf-8-validate - zod - viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76): + viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@3.25.76): dependencies: '@noble/curves': 1.9.1 '@noble/hashes': 1.8.0 '@scure/bip32': 1.7.0 '@scure/bip39': 1.6.0 - abitype: 1.2.3(typescript@5.9.3)(zod@3.25.76) + abitype: 1.2.3(typescript@6.0.2)(zod@3.25.76) isows: 1.0.7(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)) - ox: 0.14.7(typescript@5.9.3)(zod@3.25.76) + ox: 0.14.7(typescript@6.0.2)(zod@3.25.76) ws: 8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10) optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - bufferutil - utf-8-validate - zod - viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6): + viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6): dependencies: '@noble/curves': 1.9.1 '@noble/hashes': 1.8.0 '@scure/bip32': 1.7.0 '@scure/bip39': 1.6.0 - abitype: 1.2.3(typescript@5.9.3)(zod@4.3.6) + abitype: 1.2.3(typescript@6.0.2)(zod@4.3.6) isows: 1.0.7(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)) - ox: 0.14.7(typescript@5.9.3)(zod@4.3.6) + ox: 0.14.7(typescript@6.0.2)(zod@4.3.6) ws: 8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10) optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - bufferutil - utf-8-validate - zod - vite-node@3.2.4(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2): + vite-node@3.2.4(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.2): dependencies: cac: 6.7.14 debug: 4.4.3(supports-color@5.5.0) es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 6.4.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - '@types/node' - jiti @@ -19754,22 +20834,11 @@ snapshots: - tsx - yaml - vite-plugin-sitemap@0.7.1: {} - - vite-tsconfig-paths@5.1.4(typescript@5.9.3)(vite@6.4.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)): - dependencies: - debug: 4.4.3(supports-color@5.5.0) - globrex: 0.1.2 - tsconfck: 3.1.6(typescript@5.9.3) - optionalDependencies: - vite: 6.4.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) - transitivePeerDependencies: - - supports-color - - typescript + vite-plugin-sitemap@0.8.2: {} - vite@6.4.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2): + vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.2): dependencies: - esbuild: 0.25.12 + esbuild: 0.27.4 fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 postcss: 8.5.6 @@ -19779,76 +20848,80 @@ snapshots: '@types/node': 25.3.0 fsevents: 2.3.3 jiti: 2.6.1 - lightningcss: 1.31.1 + lightningcss: 1.32.0 tsx: 4.21.0 yaml: 2.8.2 - vitest@3.2.4(@types/debug@4.1.13)(@types/node@25.3.0)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2): + vite@8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@types/node@25.3.0)(esbuild@0.25.12)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2): dependencies: - '@types/chai': 5.2.3 - '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@6.4.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) - '@vitest/pretty-format': 3.2.4 - '@vitest/runner': 3.2.4 - '@vitest/snapshot': 3.2.4 - '@vitest/spy': 3.2.4 - '@vitest/utils': 3.2.4 - chai: 5.3.3 - debug: 4.4.3(supports-color@5.5.0) + lightningcss: 1.32.0 + picomatch: 4.0.4 + postcss: 8.5.8 + rolldown: 1.0.0-rc.12(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + tinyglobby: 0.2.15 + optionalDependencies: + '@types/node': 25.3.0 + esbuild: 0.25.12 + fsevents: 2.3.3 + jiti: 2.6.1 + tsx: 4.21.0 + yaml: 2.8.2 + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + + vitest@4.1.2(@types/node@25.3.0)(jsdom@29.0.1(@noble/hashes@1.8.0))(vite@8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@types/node@25.3.0)(esbuild@0.25.12)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)): + dependencies: + '@vitest/expect': 4.1.2 + '@vitest/mocker': 4.1.2(vite@8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@types/node@25.3.0)(esbuild@0.25.12)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/pretty-format': 4.1.2 + '@vitest/runner': 4.1.2 + '@vitest/snapshot': 4.1.2 + '@vitest/spy': 4.1.2 + '@vitest/utils': 4.1.2 + es-module-lexer: 2.0.0 expect-type: 1.3.0 magic-string: 0.30.21 + obug: 2.1.1 pathe: 2.0.3 picomatch: 4.0.3 - std-env: 3.10.0 + std-env: 4.0.0 tinybench: 2.9.0 - tinyexec: 0.3.2 + tinyexec: 1.0.2 tinyglobby: 0.2.15 - tinypool: 1.1.1 - tinyrainbow: 2.0.0 - vite: 6.4.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) - vite-node: 3.2.4(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) + tinyrainbow: 3.1.0 + vite: 8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@types/node@25.3.0)(esbuild@0.25.12)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) why-is-node-running: 2.3.0 optionalDependencies: - '@types/debug': 4.1.13 '@types/node': 25.3.0 - jsdom: 26.1.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) + jsdom: 29.0.1(@noble/hashes@1.8.0) transitivePeerDependencies: - - jiti - - less - - lightningcss - msw - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - vocs@1.0.11(@types/node@25.3.0)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(babel-plugin-macros@3.1.0)(jiti@2.6.1)(lightningcss@1.31.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rollup@4.59.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2): + vocs@1.4.1(@tanstack/react-router@1.168.10(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/node@25.3.0)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(babel-plugin-macros@3.1.0)(jiti@2.6.1)(lightningcss@1.32.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(rollup@4.59.0)(tsx@4.21.0)(typescript@6.0.2): dependencies: - '@floating-ui/react': 0.27.18(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@floating-ui/react': 0.27.18(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@hono/node-server': 1.19.9(hono@4.12.2) - '@mdx-js/react': 3.1.1(@types/react@19.2.14)(react@19.1.0) + '@mdx-js/mdx': 3.1.1 + '@mdx-js/react': 3.1.1(@types/react@19.2.14)(react@19.2.4) '@mdx-js/rollup': 3.1.1(rollup@4.59.0) '@noble/hashes': 1.8.0 '@radix-ui/colors': 3.0.0 - '@radix-ui/react-accordion': 1.2.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-icons': 1.3.2(react@19.1.0) - '@radix-ui/react-label': 2.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-navigation-menu': 1.2.14(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-popover': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-accordion': 1.2.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-icons': 1.3.2(react@19.2.4) + '@radix-ui/react-label': 2.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-navigation-menu': 1.2.14(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-popover': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@shikijs/rehype': 1.29.2 '@shikijs/transformers': 1.29.2 - '@shikijs/twoslash': 1.29.2(typescript@5.9.3) - '@tailwindcss/vite': 4.0.7(vite@6.4.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) + '@shikijs/twoslash': 1.29.2(typescript@6.0.2) + '@tailwindcss/vite': 4.1.15(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.2)) '@vanilla-extract/css': 1.18.0(babel-plugin-macros@3.1.0) '@vanilla-extract/dynamic': 2.1.5 - '@vanilla-extract/vite-plugin': 5.1.4(@types/node@25.3.0)(babel-plugin-macros@3.1.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(vite@6.4.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2) - '@vitejs/plugin-react': 4.7.0(vite@6.4.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) + '@vanilla-extract/vite-plugin': 5.1.4(@types/node@25.3.0)(babel-plugin-macros@3.1.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2) + '@vitejs/plugin-react': 5.2.0(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.2)) autoprefixer: 10.4.24(postcss@8.5.6) cac: 6.7.14 chroma-js: 3.2.0 @@ -19857,7 +20930,6 @@ snapshots: create-vocs: 1.0.0 cross-spawn: 7.0.6 fs-extra: 11.3.3 - globby: 14.1.0 hastscript: 8.0.0 hono: 4.12.2 mark.js: 8.11.1 @@ -19869,18 +20941,21 @@ snapshots: mdast-util-mdx-jsx: 3.2.0 mdast-util-to-hast: 13.2.1 mdast-util-to-markdown: 2.1.2 - minimatch: 9.0.6 - minisearch: 6.3.0 + minisearch: 7.2.0 + nuqs: 2.8.9(@tanstack/react-router@1.168.10(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-router@7.13.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4) ora: 7.0.1 p-limit: 5.0.0 + picomatch: 4.0.3 + playwright: 1.59.1 postcss: 8.5.6 - radix-ui: 1.4.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - react-intersection-observer: 9.16.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react-router: 7.13.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + radix-ui: 1.4.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + react-intersection-observer: 9.16.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react-router: 7.13.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) rehype-autolink-headings: 7.1.0 rehype-class-names: 2.0.0 + rehype-mermaid: 3.0.0(playwright@1.59.1) rehype-slug: 6.0.0 remark-directive: 3.0.1 remark-frontmatter: 5.0.0 @@ -19891,12 +20966,16 @@ snapshots: serve-static: 1.16.3 shiki: 1.29.2 toml: 3.0.0 - twoslash: 0.2.12(typescript@5.9.3) + twoslash: 0.3.6(typescript@6.0.2) ua-parser-js: 1.0.41 unified: 11.0.5 unist-util-visit: 5.1.0 - vite: 6.4.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) + vfile-matter: 5.0.1 + vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.2) + yaml: 2.8.2 transitivePeerDependencies: + - '@remix-run/react' + - '@tanstack/react-router' - '@types/node' - '@types/react' - '@types/react-dom' @@ -19904,6 +20983,8 @@ snapshots: - jiti - less - lightningcss + - next + - react-router-dom - rollup - sass - sass-embedded @@ -19913,22 +20994,38 @@ snapshots: - terser - tsx - typescript - - yaml + + vscode-jsonrpc@8.2.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.17.5: {} + + vscode-languageserver@9.0.1: + dependencies: + vscode-languageserver-protocol: 3.17.5 + + vscode-uri@3.1.0: {} w3c-xmlserializer@5.0.0: dependencies: xml-name-validator: 5.0.0 - wagmi@2.19.5(@tanstack/query-core@5.95.2)(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76): + wagmi@2.19.5(@tanstack/query-core@5.96.1)(@tanstack/react-query@5.96.1(react@19.2.4))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6))(zod@4.3.6): dependencies: - '@tanstack/react-query': 5.95.2(react@19.1.0) - '@wagmi/connectors': 6.2.0(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(@wagmi/core@2.22.1(@tanstack/query-core@5.95.2)(@types/react@19.2.14)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)))(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.95.2)(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76))(zod@3.25.76) - '@wagmi/core': 2.22.1(@tanstack/query-core@5.95.2)(@types/react@19.2.14)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)) - react: 19.1.0 - use-sync-external-store: 1.4.0(react@19.1.0) - viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@tanstack/react-query': 5.96.1(react@19.2.4) + '@wagmi/connectors': 6.2.0(@tanstack/react-query@5.96.1(react@19.2.4))(@types/react@19.2.14)(@wagmi/core@2.22.1(@tanstack/query-core@5.96.1)(@types/react@19.2.14)(react@19.2.4)(typescript@6.0.2)(use-sync-external-store@1.4.0(react@19.2.4))(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6)))(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(use-sync-external-store@1.4.0(react@19.2.4))(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6))(wagmi@2.19.5(@tanstack/query-core@5.96.1)(@tanstack/react-query@5.96.1(react@19.2.4))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6))(zod@4.3.6))(zod@4.3.6) + '@wagmi/core': 2.22.1(@tanstack/query-core@5.96.1)(@types/react@19.2.14)(react@19.2.4)(typescript@6.0.2)(use-sync-external-store@1.4.0(react@19.2.4))(viem@2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6)) + react: 19.2.4 + use-sync-external-store: 1.4.0(react@19.2.4) + viem: 2.47.6(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@5.0.10)(zod@4.3.6) optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -19964,9 +21061,7 @@ snapshots: - utf-8-validate - zod - wcwidth@1.0.1: - dependencies: - defaults: 1.0.4 + web-namespaces@2.0.1: {} web-streams-polyfill@3.3.3: {} @@ -19974,20 +21069,21 @@ snapshots: webidl-conversions@3.0.1: {} - webidl-conversions@7.0.0: {} + webidl-conversions@8.0.1: {} webpack-virtual-modules@0.6.2: {} - whatwg-encoding@3.1.1: - dependencies: - iconv-lite: 0.6.3 - whatwg-mimetype@4.0.0: {} - whatwg-url@14.2.0: + whatwg-mimetype@5.0.0: {} + + whatwg-url@16.0.1(@noble/hashes@1.8.0): dependencies: - tr46: 5.1.1 - webidl-conversions: 7.0.0 + '@exodus/bytes': 1.15.0(@noble/hashes@1.8.0) + tr46: 6.0.0 + webidl-conversions: 8.0.1 + transitivePeerDependencies: + - '@noble/hashes' whatwg-url@5.0.0: dependencies: @@ -20027,12 +21123,6 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 - wrap-ansi@8.1.0: - dependencies: - ansi-styles: 6.2.3 - string-width: 5.1.2 - strip-ansi: 7.1.2 - wrap-ansi@9.0.2: dependencies: ansi-styles: 6.2.3 @@ -20061,6 +21151,11 @@ snapshots: bufferutil: 4.1.0 utf-8-validate: 5.0.10 + ws@8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.1.0 + utf-8-validate: 5.0.10 + xml-name-validator@5.0.0: {} xmlchars@2.2.0: {} @@ -20075,8 +21170,6 @@ snapshots: yallist@3.1.1: {} - yaml-ast-parser@0.0.43: {} - yaml@1.10.2: {} yaml@2.8.2: {} @@ -20118,34 +21211,36 @@ snapshots: yocto-queue@1.2.2: {} + yoctocolors-cjs@2.1.3: {} + zod@3.22.4: {} zod@3.25.76: {} zod@4.3.6: {} - zustand@5.0.0(@types/react@19.2.14)(react@19.1.0)(use-sync-external-store@1.4.0(react@19.1.0)): + zustand@5.0.0(@types/react@19.2.14)(react@19.2.4)(use-sync-external-store@1.4.0(react@19.2.4)): optionalDependencies: '@types/react': 19.2.14 - react: 19.1.0 - use-sync-external-store: 1.4.0(react@19.1.0) + react: 19.2.4 + use-sync-external-store: 1.4.0(react@19.2.4) - zustand@5.0.11(@types/react@19.2.14)(react@19.1.0)(use-sync-external-store@1.4.0(react@19.1.0)): + zustand@5.0.11(@types/react@19.2.14)(react@19.2.4)(use-sync-external-store@1.4.0(react@19.2.4)): optionalDependencies: '@types/react': 19.2.14 - react: 19.1.0 - use-sync-external-store: 1.4.0(react@19.1.0) + react: 19.2.4 + use-sync-external-store: 1.4.0(react@19.2.4) - zustand@5.0.12(@types/react@19.2.14)(react@19.1.0)(use-sync-external-store@1.4.0(react@19.1.0)): + zustand@5.0.12(@types/react@19.2.14)(react@19.2.4)(use-sync-external-store@1.4.0(react@19.2.4)): optionalDependencies: '@types/react': 19.2.14 - react: 19.1.0 - use-sync-external-store: 1.4.0(react@19.1.0) + react: 19.2.4 + use-sync-external-store: 1.4.0(react@19.2.4) - zustand@5.0.3(@types/react@19.2.14)(react@19.1.0)(use-sync-external-store@1.4.0(react@19.1.0)): + zustand@5.0.3(@types/react@19.2.14)(react@19.2.4)(use-sync-external-store@1.4.0(react@19.2.4)): optionalDependencies: '@types/react': 19.2.14 - react: 19.1.0 - use-sync-external-store: 1.4.0(react@19.1.0) + react: 19.2.4 + use-sync-external-store: 1.4.0(react@19.2.4) zwitch@2.0.4: {} diff --git a/pull_request_template.md b/pull_request_template.md deleted file mode 100644 index 80f6191b..00000000 --- a/pull_request_template.md +++ /dev/null @@ -1,36 +0,0 @@ -Closes # - -# Description: - -(Please include a summary of the changes and the related issue) - -# Steps: - -(Required steps to reproduce or test the fix / feature) - -## Type of change: - -- [ ] New feature -- [ ] Bug fix -- [ ] Breaking change -- [ ] Enhancement -- [ ] Refactoring -- [ ] Chore - -# How Has This Been Tested? - -- [ ] Manual testing -- [ ] Automated tests -- [ ] Other (explain) - -# Remember to check that: - -- Your code follows the style guidelines of this project -- You have performed a self-review of your code -- You have commented your code in hard-to-understand areas -- You have made corresponding changes to the documentation -- Your changes generate no new warnings - -# Screenshots - -(Add screenshots or videos to help test this pull request) diff --git a/src/components/pageComponents/NotFound404.tsx b/src/components/pageComponents/NotFound404.tsx index 3cbb7fea..7bfbb871 100644 --- a/src/components/pageComponents/NotFound404.tsx +++ b/src/components/pageComponents/NotFound404.tsx @@ -1,6 +1,6 @@ +import { useNavigate } from '@tanstack/react-router' import { GeneralMessage } from '@/src/components/sharedComponents/ui/GeneralMessage' import PrimaryButton from '@/src/components/sharedComponents/ui/PrimaryButton' -import { useNavigate } from '@tanstack/react-router' const Icon = () => ( <svg diff --git a/src/components/pageComponents/home/Examples/Item/index.tsx b/src/components/pageComponents/home/Examples/Item/index.tsx index 1e2900db..1f3c0ad8 100644 --- a/src/components/pageComponents/home/Examples/Item/index.tsx +++ b/src/components/pageComponents/home/Examples/Item/index.tsx @@ -1,8 +1,8 @@ +import { Dialog, Flex, type FlexProps, Heading, Portal, Text } from '@chakra-ui/react' +import { type FC, type ReactNode, useState } from 'react' import DemoButton from '@/src/components/pageComponents/home/Examples/Item/buttons/DemoButton' import DocumentationButton from '@/src/components/pageComponents/home/Examples/Item/buttons/DocumentationButton' import Modal from '@/src/components/sharedComponents/ui/Modal' -import { Dialog, Flex, type FlexProps, Heading, Portal, Text } from '@chakra-ui/react' -import { type FC, type ReactNode, useState } from 'react' import styles from './styles' export interface Props extends FlexProps { diff --git a/src/components/pageComponents/home/Examples/List/index.tsx b/src/components/pageComponents/home/Examples/List/index.tsx index ef7e9baf..2d45bd72 100644 --- a/src/components/pageComponents/home/Examples/List/index.tsx +++ b/src/components/pageComponents/home/Examples/List/index.tsx @@ -1,6 +1,6 @@ -import Item, { type Props as ItemProps } from '@/src/components/pageComponents/home/Examples/Item' import { Grid, type GridProps } from '@chakra-ui/react' import type { FC } from 'react' +import Item, { type Props as ItemProps } from '@/src/components/pageComponents/home/Examples/Item' interface Props extends GridProps { items: ItemProps[] diff --git a/src/components/pageComponents/home/Examples/demos/EnsName/index.tsx b/src/components/pageComponents/home/Examples/demos/EnsName/index.tsx index c8b6f952..69cf3741 100644 --- a/src/components/pageComponents/home/Examples/demos/EnsName/index.tsx +++ b/src/components/pageComponents/home/Examples/demos/EnsName/index.tsx @@ -1,12 +1,12 @@ -import Icon from '@/src/components/pageComponents/home/Examples/demos/EnsName/Icon' -import { OptionsDropdown } from '@/src/components/pageComponents/home/Examples/demos/OptionsDropdown' -import Spinner from '@/src/components/sharedComponents/ui/Spinner' import { Flex, Heading, Input } from '@chakra-ui/react' import { type ChangeEvent, useEffect, useState } from 'react' import { useDebouncedCallback } from 'use-debounce' import type { Address } from 'viem' import { useEnsName } from 'wagmi' import { mainnet } from 'wagmi/chains' +import Icon from '@/src/components/pageComponents/home/Examples/demos/EnsName/Icon' +import { OptionsDropdown } from '@/src/components/pageComponents/home/Examples/demos/OptionsDropdown' +import Spinner from '@/src/components/sharedComponents/ui/Spinner' const EnsNameSearch = ({ address }: { address?: Address }) => { const { data, error, status } = useEnsName({ diff --git a/src/components/pageComponents/home/Examples/demos/HashHandling/Hash.tsx b/src/components/pageComponents/home/Examples/demos/HashHandling/Hash.tsx index 11d841fe..377300a9 100644 --- a/src/components/pageComponents/home/Examples/demos/HashHandling/Hash.tsx +++ b/src/components/pageComponents/home/Examples/demos/HashHandling/Hash.tsx @@ -1,9 +1,9 @@ -import BaseHash from '@/src/components/sharedComponents/Hash' -import { toaster } from '@/src/components/ui/toaster' -import { getExplorerLink } from '@/src/utils/getExplorerLink' import type { FlexProps } from '@chakra-ui/react' import type { FC } from 'react' import type { Address, Chain } from 'viem' +import BaseHash from '@/src/components/sharedComponents/Hash' +import { toaster } from '@/src/components/ui/toaster' +import { getExplorerLink } from '@/src/utils/getExplorerLink' interface Props extends FlexProps { chain: Chain diff --git a/src/components/pageComponents/home/Examples/demos/HashHandling/index.tsx b/src/components/pageComponents/home/Examples/demos/HashHandling/index.tsx index 2b538551..844da2d9 100644 --- a/src/components/pageComponents/home/Examples/demos/HashHandling/index.tsx +++ b/src/components/pageComponents/home/Examples/demos/HashHandling/index.tsx @@ -1,16 +1,14 @@ +import { Box, chakra, Flex, Input } from '@chakra-ui/react' +import { useState } from 'react' +import type { Address } from 'viem' +import * as chains from 'viem/chains' import Hash from '@/src/components/pageComponents/home/Examples/demos/HashHandling/Hash' -import Wrapper from '@/src/components/pageComponents/home/Examples/wrapper' - import Icon from '@/src/components/pageComponents/home/Examples/demos/HashHandling/Icon' +import Wrapper from '@/src/components/pageComponents/home/Examples/wrapper' import HashInput from '@/src/components/sharedComponents/HashInput' - import Spinner from '@/src/components/sharedComponents/ui/Spinner' import { useWeb3Status } from '@/src/hooks/useWeb3Status' import type { DetectedHash } from '@/src/utils/hash' -import { Box, Flex, Input, chakra } from '@chakra-ui/react' -import { useState } from 'react' -import type { Address } from 'viem' -import * as chains from 'viem/chains' const AlertIcon = () => ( <chakra.svg diff --git a/src/components/pageComponents/home/Examples/demos/OptimismCrossDomainMessenger/index.tsx b/src/components/pageComponents/home/Examples/demos/OptimismCrossDomainMessenger/index.tsx index 00b518bf..69ef71fc 100644 --- a/src/components/pageComponents/home/Examples/demos/OptimismCrossDomainMessenger/index.tsx +++ b/src/components/pageComponents/home/Examples/demos/OptimismCrossDomainMessenger/index.tsx @@ -1,88 +1,92 @@ +import { Flex, Span } from '@chakra-ui/react' +import { useState } from 'react' +import type { Address } from 'viem' +import { parseEther } from 'viem' +import { optimismSepolia, sepolia } from 'viem/chains' +import { extractTransactionDepositedLogs, getL2TransactionHash } from 'viem/op-stack' import Icon from '@/src/components/pageComponents/home/Examples/demos/OptimismCrossDomainMessenger/Icon' import Wrapper from '@/src/components/pageComponents/home/Examples/wrapper' import Hash from '@/src/components/sharedComponents/Hash' import TransactionButton from '@/src/components/sharedComponents/TransactionButton' -import { withWalletStatusVerifier } from '@/src/components/sharedComponents/WalletStatusVerifier' +import { + useWeb3StatusConnected, + WalletStatusVerifier, +} from '@/src/components/sharedComponents/WalletStatusVerifier' import { getContract } from '@/src/constants/contracts/contracts' import { useL1CrossDomainMessengerProxy } from '@/src/hooks/useOPL1CrossDomainMessengerProxy' -import { useWeb3StatusConnected } from '@/src/hooks/useWeb3Status' import { getExplorerLink } from '@/src/utils/getExplorerLink' import { withSuspenseAndRetry } from '@/src/utils/suspenseWrapper' -import { Flex, Span } from '@chakra-ui/react' -import { useState } from 'react' -import type { Address } from 'viem' -import { parseEther } from 'viem' -import { optimismSepolia, sepolia } from 'viem/chains' -import { extractTransactionDepositedLogs, getL2TransactionHash } from 'viem/op-stack' -const OptimismCrossDomainMessenger = withWalletStatusVerifier( - withSuspenseAndRetry(() => { - // https://sepolia-optimism.etherscan.io/address/0xb50201558b00496a145fe76f7424749556e326d8 - const AAVEProxy = '0xb50201558b00496a145fe76f7424749556e326d8' - const { address: walletAddress, readOnlyClient } = useWeb3StatusConnected() +const OptimismCrossDomainMessenger = withSuspenseAndRetry(() => { + // https://sepolia-optimism.etherscan.io/address/0xb50201558b00496a145fe76f7424749556e326d8 + const AAVEProxy = '0xb50201558b00496a145fe76f7424749556e326d8' + const { address: walletAddress, readOnlyClient } = useWeb3StatusConnected() - const contract = getContract('AAVEWeth', optimismSepolia.id) - const depositValue = parseEther('0.01') + const contract = getContract('AAVEWeth', optimismSepolia.id) + const depositValue = parseEther('0.01') - const [l2Hash, setL2Hash] = useState<Address | null>(null) + const [l2Hash, setL2Hash] = useState<Address | null>(null) - const sendCrossChainMessage = useL1CrossDomainMessengerProxy({ - fromChain: sepolia, - contractName: 'AAVEWeth', - functionName: 'depositETH', - l2ContractAddress: contract.address, - args: [AAVEProxy, walletAddress, 0], - value: depositValue, - }) + const sendCrossChainMessage = useL1CrossDomainMessengerProxy({ + fromChain: sepolia, + contractName: 'AAVEWeth', + functionName: 'depositETH', + l2ContractAddress: contract.address, + args: [AAVEProxy, walletAddress, 0], + value: depositValue, + walletAddress, + }) - return ( - <Wrapper title="Execute transaction"> - <p> - Deposit <b>0.01</b> ETH in{' '} - <a - href="https://staging.aave.com/?marketName=proto_optimism_sepolia_v3" - rel="noreferrer" - target="_blank" - > - Optimism Sepolia AAVE market - </a>{' '} - from Sepolia. - </p> - <TransactionButton - key="send" - transaction={async () => { - setL2Hash(null) - const hash = await sendCrossChainMessage() - const receipt = await readOnlyClient.waitForTransactionReceipt({ hash }) - const [log] = extractTransactionDepositedLogs(receipt) - const l2Hash = getL2TransactionHash({ log }) - setL2Hash(l2Hash) - return hash - }} + return ( + <Wrapper title="Execute transaction"> + <p> + Deposit <b>0.01</b> ETH in{' '} + <a + href="https://staging.aave.com/?marketName=proto_optimism_sepolia_v3" + rel="noreferrer" + target="_blank" > - Deposit ETH - </TransactionButton> - {l2Hash && ( - <Flex - alignItems="center" - display="flex" - gap={2} - > - <Span>OpSepolia tx</Span> - <Hash - explorerURL={getExplorerLink({ chain: optimismSepolia, hashOrAddress: l2Hash })} - hash={l2Hash} - /> - </Flex> - )} - </Wrapper> - ) - }), - { chainId: sepolia.id }, -) + Optimism Sepolia AAVE market + </a>{' '} + from Sepolia. + </p> + <TransactionButton + key="send" + transaction={async () => { + setL2Hash(null) + const hash = await sendCrossChainMessage() + const receipt = await readOnlyClient.waitForTransactionReceipt({ hash }) + const [log] = extractTransactionDepositedLogs(receipt) + const l2Hash = getL2TransactionHash({ log }) + setL2Hash(l2Hash) + return hash + }} + > + Deposit ETH + </TransactionButton> + {l2Hash && ( + <Flex + alignItems="center" + display="flex" + gap={2} + > + <Span>OpSepolia tx</Span> + <Hash + explorerURL={getExplorerLink({ chain: optimismSepolia, hashOrAddress: l2Hash })} + hash={l2Hash} + /> + </Flex> + )} + </Wrapper> + ) +}) const optimismCrossdomainMessenger = { - demo: <OptimismCrossDomainMessenger />, + demo: ( + <WalletStatusVerifier chainId={sepolia.id}> + <OptimismCrossDomainMessenger /> + </WalletStatusVerifier> + ), href: 'https://bootnodedev.github.io/dAppBooster/functions/hooks_useOPL1CrossDomainMessengerProxy.useL1CrossDomainMessengerProxy.html', icon: <Icon />, text: ( diff --git a/src/components/pageComponents/home/Examples/demos/OptionsDropdown/index.tsx b/src/components/pageComponents/home/Examples/demos/OptionsDropdown/index.tsx index 7fdbacd2..c6d31084 100644 --- a/src/components/pageComponents/home/Examples/demos/OptionsDropdown/index.tsx +++ b/src/components/pageComponents/home/Examples/demos/OptionsDropdown/index.tsx @@ -1,4 +1,4 @@ -import { Box, type BoxProps, Menu, chakra } from '@chakra-ui/react' +import { Box, type BoxProps, chakra, Menu } from '@chakra-ui/react' import { type FC, useState } from 'react' import { buttonStyles, dropdownStyles } from './styles' diff --git a/src/components/pageComponents/home/Examples/demos/SignMessage/index.tsx b/src/components/pageComponents/home/Examples/demos/SignMessage/index.tsx index 0dd780f2..b3bbff9b 100644 --- a/src/components/pageComponents/home/Examples/demos/SignMessage/index.tsx +++ b/src/components/pageComponents/home/Examples/demos/SignMessage/index.tsx @@ -1,8 +1,8 @@ import Icon from '@/src/components/pageComponents/home/Examples/demos/SignMessage/Icon' import Wrapper from '@/src/components/pageComponents/home/Examples/wrapper' import SignButton from '@/src/components/sharedComponents/SignButton' -import { WalletStatusVerifier } from '@/src/components/sharedComponents/WalletStatusVerifier' import PrimaryButton from '@/src/components/sharedComponents/ui/PrimaryButton' +import { WalletStatusVerifier } from '@/src/components/sharedComponents/WalletStatusVerifier' const message = ` 👻🚀 Welcome to dAppBooster! 🚀👻 diff --git a/src/components/pageComponents/home/Examples/demos/SwitchNetwork/index.tsx b/src/components/pageComponents/home/Examples/demos/SwitchNetwork/index.tsx index 5bc08029..8764854f 100644 --- a/src/components/pageComponents/home/Examples/demos/SwitchNetwork/index.tsx +++ b/src/components/pageComponents/home/Examples/demos/SwitchNetwork/index.tsx @@ -1,7 +1,3 @@ -import Icon from '@/src/components/pageComponents/home/Examples/demos/SwitchNetwork/Icon' -import BaseSwitchNetwork, { type Networks } from '@/src/components/sharedComponents/SwitchNetwork' -import { useWeb3Status } from '@/src/hooks/useWeb3Status' -import { ConnectWalletButton } from '@/src/providers/Web3Provider' import { NetworkArbitrumOne, NetworkEthereum, @@ -9,6 +5,10 @@ import { NetworkPolygon, } from '@web3icons/react' import { arbitrum, mainnet, optimism, polygon } from 'viem/chains' +import Icon from '@/src/components/pageComponents/home/Examples/demos/SwitchNetwork/Icon' +import BaseSwitchNetwork, { type Networks } from '@/src/components/sharedComponents/SwitchNetwork' +import { useWeb3Status } from '@/src/hooks/useWeb3Status' +import { ConnectWalletButton } from '@/src/providers/Web3Provider' const SwitchNetwork = () => { const { isWalletConnected } = useWeb3Status() diff --git a/src/components/pageComponents/home/Examples/demos/TokenDropdown/index.tsx b/src/components/pageComponents/home/Examples/demos/TokenDropdown/index.tsx index 6d4fcfea..98da81c7 100644 --- a/src/components/pageComponents/home/Examples/demos/TokenDropdown/index.tsx +++ b/src/components/pageComponents/home/Examples/demos/TokenDropdown/index.tsx @@ -1,8 +1,8 @@ +import { type FC, useState } from 'react' import Icon from '@/src/components/pageComponents/home/Examples/demos/TokenDropdown/Icon' import Wrapper from '@/src/components/pageComponents/home/Examples/wrapper' import BaseTokenDropdown from '@/src/components/sharedComponents/TokenDropdown' import type { Token } from '@/src/types/token' -import { type FC, useState } from 'react' const TokenDropdown: FC = ({ ...restProps }) => { const [currentToken, setCurrentToken] = useState<Token>() diff --git a/src/components/pageComponents/home/Examples/demos/TokenInput/index.test.tsx b/src/components/pageComponents/home/Examples/demos/TokenInput/index.test.tsx index 9e86b8b7..c582dd3d 100644 --- a/src/components/pageComponents/home/Examples/demos/TokenInput/index.test.tsx +++ b/src/components/pageComponents/home/Examples/demos/TokenInput/index.test.tsx @@ -1,7 +1,8 @@ -import { createMockWeb3Status, renderWithProviders } from '@/src/test-utils' import { QueryClient, QueryClientProvider } from '@tanstack/react-query' -import { screen } from '@testing-library/react' +import { screen, waitFor } from '@testing-library/react' +import userEvent from '@testing-library/user-event' import { describe, expect, it, vi } from 'vitest' +import { createMockWeb3Status, renderWithProviders } from '@/src/test-utils' import tokenInput from './index' vi.mock('@/src/hooks/useWeb3Status', () => ({ @@ -20,6 +21,8 @@ vi.mock('@/src/hooks/useTokenLists', () => ({ vi.mock('@/src/hooks/useTokenSearch', () => ({ useTokenSearch: vi.fn(() => ({ searchResult: [], + searchTerm: '', + setSearchTerm: vi.fn(), })), })) @@ -32,18 +35,59 @@ vi.mock('@/src/components/sharedComponents/TokenInput/useTokenInput', () => ({ balance: 0n, balanceError: null, isLoadingBalance: false, + isLoadingPrice: false, + priceUSD: undefined, selectedToken: undefined, setTokenSelected: vi.fn(), })), })) +// TokenSelect calls useTokens internally; return empty arrays per chain to avoid +// TopTokens receiving undefined and crashing on .find() +vi.mock('@/src/hooks/useTokens', () => ({ + useTokens: vi.fn(() => ({ + tokens: [], + tokensByChainId: { 1: [], 10: [], 42161: [], 137: [], 11155111: [] }, + isLoadingBalances: false, + isLoadingPrices: false, + })), +})) + +vi.mock('@/src/constants/common', () => ({ + includeTestnets: true, + isDev: false, + NO_PRICE_DATA_LABEL: 'N/A', +})) + describe('TokenInput demo', () => { it('renders the token input container', () => { const queryClient = new QueryClient({ defaultOptions: { queries: { retry: false } } }) renderWithProviders( <QueryClientProvider client={queryClient}>{tokenInput.demo}</QueryClientProvider>, ) - // The mode dropdown should be visible - expect(screen.getByText('Single token')).toBeDefined() + expect(screen.getByText('Multi token')).toBeDefined() + }) + + it('shows Sepolia in the network selector when includeTestnets is true', async () => { + const user = userEvent.setup() + const queryClient = new QueryClient({ defaultOptions: { queries: { retry: false } } }) + + renderWithProviders( + <QueryClientProvider client={queryClient}>{tokenInput.demo}</QueryClientProvider>, + ) + + // Open the TokenSelect dialog + await user.click(screen.getByText('Select')) + + // There are two "Chevron down" SVGs: one in the DropdownButton trigger (pointer-events:none) + // and one in the NetworkButton inside the dialog. Click the last one (the network switcher). + const chevrons = await screen.findAllByTitle('Chevron down') + const networkChevron = chevrons[chevrons.length - 1] + const networkButton = networkChevron.closest('button') + expect(networkButton).not.toBeNull() + await user.click(networkButton as HTMLButtonElement) + + // Sepolia should be listed as a network option + await waitFor(() => expect(screen.getByText('Sepolia')).toBeDefined()) }) }) diff --git a/src/components/pageComponents/home/Examples/demos/TokenInput/index.tsx b/src/components/pageComponents/home/Examples/demos/TokenInput/index.tsx index c4544c5e..99d44408 100644 --- a/src/components/pageComponents/home/Examples/demos/TokenInput/index.tsx +++ b/src/components/pageComponents/home/Examples/demos/TokenInput/index.tsx @@ -1,21 +1,23 @@ +import { Box, Flex, Skeleton } from '@chakra-ui/react' +import { + NetworkArbitrumOne, + NetworkEthereum, + NetworkOptimism, + NetworkPolygon, + NetworkSepolia, +} from '@web3icons/react' +import { useState } from 'react' +import { arbitrum, mainnet, optimism, polygon, sepolia } from 'viem/chains' import OptionsDropdown from '@/src/components/pageComponents/home/Examples/demos/OptionsDropdown' import Icon from '@/src/components/pageComponents/home/Examples/demos/TokenInput/Icon' import BaseTokenInput from '@/src/components/sharedComponents/TokenInput' import { useTokenInput } from '@/src/components/sharedComponents/TokenInput/useTokenInput' import type { Networks } from '@/src/components/sharedComponents/TokenSelect/types' +import { includeTestnets } from '@/src/constants/common' import { useTokenLists } from '@/src/hooks/useTokenLists' import { useTokenSearch } from '@/src/hooks/useTokenSearch' import { useWeb3Status } from '@/src/hooks/useWeb3Status' import { withSuspenseAndRetry } from '@/src/utils/suspenseWrapper' -import { Box, Flex, Skeleton } from '@chakra-ui/react' -import { - NetworkArbitrumOne, - NetworkEthereum, - NetworkOptimism, - NetworkPolygon, -} from '@web3icons/react' -import { useState } from 'react' -import { arbitrum, mainnet, optimism, polygon } from 'viem/chains' type Options = 'single' | 'multi' @@ -105,6 +107,21 @@ const TokenInputMode = withSuspenseAndRetry( label: polygon.name, onClick: () => setCurrentNetworkId(polygon.id), }, + ...(includeTestnets + ? [ + { + icon: ( + <NetworkSepolia + size={24} + variant="background" + /> + ), + id: sepolia.id, + label: sepolia.name, + onClick: () => setCurrentNetworkId(sepolia.id), + }, + ] + : []), ] return ( @@ -127,10 +144,10 @@ const TokenInputMode = withSuspenseAndRetry( * token or multi token mode. */ const TokenInput = () => { - const [currentTokenInput, setCurrentTokenInput] = useState<Options>('single') + const [currentTokenInput, setCurrentTokenInput] = useState<Options>('multi') const dropdownItems = [ - { label: 'Single token', onClick: () => setCurrentTokenInput('single') }, { label: 'Multi token', onClick: () => setCurrentTokenInput('multi') }, + { label: 'Single token', onClick: () => setCurrentTokenInput('single') }, ] return ( diff --git a/src/components/pageComponents/home/Examples/demos/TransactionButton/ERC20ApproveAndTransferButton/ERC20ApproveAndTransferButton.tsx b/src/components/pageComponents/home/Examples/demos/TransactionButton/ERC20ApproveAndTransferButton/ERC20ApproveAndTransferButton.tsx index 93db6525..973ce924 100644 --- a/src/components/pageComponents/home/Examples/demos/TransactionButton/ERC20ApproveAndTransferButton/ERC20ApproveAndTransferButton.tsx +++ b/src/components/pageComponents/home/Examples/demos/TransactionButton/ERC20ApproveAndTransferButton/ERC20ApproveAndTransferButton.tsx @@ -1,13 +1,14 @@ +import type { FC } from 'react' +import { type Address, erc20Abi, type Hash, type TransactionReceipt } from 'viem' +import * as chains from 'viem/chains' +import { useWriteContract } from 'wagmi' import Wrapper from '@/src/components/pageComponents/home/Examples/demos/TransactionButton/Wrapper' import TransactionButton from '@/src/components/sharedComponents/TransactionButton' +import { useWeb3StatusConnected } from '@/src/components/sharedComponents/WalletStatusVerifier' import { useSuspenseReadErc20Allowance } from '@/src/hooks/generated' -import { useWeb3Status, useWeb3StatusConnected } from '@/src/hooks/useWeb3Status' +import { useWeb3Status } from '@/src/hooks/useWeb3Status' import type { Token } from '@/src/types/token' import { getExplorerLink } from '@/src/utils/getExplorerLink' -import type { FC } from 'react' -import { type Address, type Hash, type TransactionReceipt, erc20Abi } from 'viem' -import * as chains from 'viem/chains' -import { useWriteContract } from 'wagmi' interface Props { amount: bigint diff --git a/src/components/pageComponents/home/Examples/demos/TransactionButton/ERC20ApproveAndTransferButton/MintUSDC.tsx b/src/components/pageComponents/home/Examples/demos/TransactionButton/ERC20ApproveAndTransferButton/MintUSDC.tsx index 7dbad8f9..10c1e59f 100644 --- a/src/components/pageComponents/home/Examples/demos/TransactionButton/ERC20ApproveAndTransferButton/MintUSDC.tsx +++ b/src/components/pageComponents/home/Examples/demos/TransactionButton/ERC20ApproveAndTransferButton/MintUSDC.tsx @@ -1,9 +1,9 @@ +import { sepolia } from 'viem/chains' +import { useWriteContract } from 'wagmi' import TransactionButton from '@/src/components/sharedComponents/TransactionButton' +import { useWeb3StatusConnected } from '@/src/components/sharedComponents/WalletStatusVerifier' import { AaveFaucetABI } from '@/src/constants/contracts/abis/AaveFaucet' import { getContract } from '@/src/constants/contracts/contracts' -import { useWeb3StatusConnected } from '@/src/hooks/useWeb3Status' -import { sepolia } from 'viem/chains' -import { useWriteContract } from 'wagmi' export default function MintUSDC({ onSuccess }: { onSuccess: () => void }) { const { address } = useWeb3StatusConnected() diff --git a/src/components/pageComponents/home/Examples/demos/TransactionButton/ERC20ApproveAndTransferButton/index.tsx b/src/components/pageComponents/home/Examples/demos/TransactionButton/ERC20ApproveAndTransferButton/index.tsx index 66fec3ba..5aabb626 100644 --- a/src/components/pageComponents/home/Examples/demos/TransactionButton/ERC20ApproveAndTransferButton/index.tsx +++ b/src/components/pageComponents/home/Examples/demos/TransactionButton/ERC20ApproveAndTransferButton/index.tsx @@ -1,15 +1,14 @@ +import { type Address, formatUnits } from 'viem' +import { sepolia } from 'viem/chains' +import { useWriteContract } from 'wagmi' import BaseERC20ApproveAndTransferButton from '@/src/components/pageComponents/home/Examples/demos/TransactionButton/ERC20ApproveAndTransferButton/ERC20ApproveAndTransferButton' import MintUSDC from '@/src/components/pageComponents/home/Examples/demos/TransactionButton/ERC20ApproveAndTransferButton/MintUSDC' import Wrapper from '@/src/components/pageComponents/home/Examples/demos/TransactionButton/Wrapper' -import { withWalletStatusVerifier } from '@/src/components/sharedComponents/WalletStatusVerifier' +import { useWeb3StatusConnected } from '@/src/components/sharedComponents/WalletStatusVerifier' import { useSuspenseReadErc20BalanceOf } from '@/src/hooks/generated' -import { useWeb3StatusConnected } from '@/src/hooks/useWeb3Status' import type { Token } from '@/src/types/token' -import { NumberType, formatNumberOrString } from '@/src/utils/numberFormat' +import { formatNumberOrString, NumberType } from '@/src/utils/numberFormat' import { withSuspense } from '@/src/utils/suspenseWrapper' -import { type Address, formatUnits } from 'viem' -import { sepolia } from 'viem/chains' -import { useWriteContract } from 'wagmi' // USDC token on Sepolia chain const tokenUSDC_sepolia: Token = { @@ -57,59 +56,52 @@ const ABIExample = [ * * Works only on Sepolia chain. */ -const ERC20ApproveAndTransferButton = withWalletStatusVerifier( - withSuspense(() => { - const { address } = useWeb3StatusConnected() - const { writeContractAsync } = useWriteContract() +const ERC20ApproveAndTransferButton = withSuspense(() => { + const { address } = useWeb3StatusConnected() + const { writeContractAsync } = useWriteContract() - const { data: balance, refetch: refetchBalance } = useSuspenseReadErc20BalanceOf({ - address: tokenUSDC_sepolia.address as Address, - args: [address], - }) + const { data: balance, refetch: refetchBalance } = useSuspenseReadErc20BalanceOf({ + address: tokenUSDC_sepolia.address as Address, + args: [address], + }) - // AAVE staging contract pool address - const spender = '0x6Ae43d3271ff6888e7Fc43Fd7321a503ff738951' + // AAVE staging contract pool address + const spender = '0x6Ae43d3271ff6888e7Fc43Fd7321a503ff738951' - const amount = 10000000000n // 10,000.00 USDC + const amount = 10000000000n // 10,000.00 USDC - const handleTransaction = () => - writeContractAsync({ - abi: ABIExample, - address: spender, - functionName: 'supply', - args: [tokenUSDC_sepolia.address as Address, amount, address, 0], - }) - handleTransaction.methodId = 'Supply USDC' + const handleTransaction = () => + writeContractAsync({ + abi: ABIExample, + address: spender, + functionName: 'supply', + args: [tokenUSDC_sepolia.address as Address, amount, address, 0], + }) + handleTransaction.methodId = 'Supply USDC' - const formattedAmount = formatNumberOrString( - formatUnits(amount, tokenUSDC_sepolia.decimals), - NumberType.TokenTx, - ) + const formattedAmount = formatNumberOrString( + formatUnits(amount, tokenUSDC_sepolia.decimals), + NumberType.TokenTx, + ) - return ( - <> - {balance < amount ? ( - <Wrapper - text={'Get Sepolia USDC from Aave faucet'} - title={'Mint USDC'} - > - <MintUSDC onSuccess={refetchBalance} /> - </Wrapper> - ) : ( - <BaseERC20ApproveAndTransferButton - amount={amount} - label={`Supply ${formattedAmount} USDC`} - labelSending="Sending..." - onSuccess={() => refetchBalance} - spender={spender} - token={tokenUSDC_sepolia} - transaction={handleTransaction} - /> - )} - </> - ) - }), - { chainId: sepolia.id }, // this DEMO component only works on sepolia chain -) + return balance < amount ? ( + <Wrapper + text={'Get Sepolia USDC from Aave faucet'} + title={'Mint USDC'} + > + <MintUSDC onSuccess={refetchBalance} /> + </Wrapper> + ) : ( + <BaseERC20ApproveAndTransferButton + amount={amount} + label={`Supply ${formattedAmount} USDC`} + labelSending="Sending..." + onSuccess={() => refetchBalance()} + spender={spender} + token={tokenUSDC_sepolia} + transaction={handleTransaction} + /> + ) +}) export default ERC20ApproveAndTransferButton diff --git a/src/components/pageComponents/home/Examples/demos/TransactionButton/NativeToken.tsx b/src/components/pageComponents/home/Examples/demos/TransactionButton/NativeToken.tsx index a1894296..03d40677 100644 --- a/src/components/pageComponents/home/Examples/demos/TransactionButton/NativeToken.tsx +++ b/src/components/pageComponents/home/Examples/demos/TransactionButton/NativeToken.tsx @@ -1,87 +1,84 @@ -import Wrapper from '@/src/components/pageComponents/home/Examples/demos/TransactionButton/Wrapper' -import TransactionButton from '@/src/components/sharedComponents/TransactionButton' -import { withWalletStatusVerifier } from '@/src/components/sharedComponents/WalletStatusVerifier' -import { GeneralMessage } from '@/src/components/sharedComponents/ui/GeneralMessage' -import PrimaryButton from '@/src/components/sharedComponents/ui/PrimaryButton' -import { useWeb3StatusConnected } from '@/src/hooks/useWeb3Status' import { Dialog } from '@chakra-ui/react' import { type ReactElement, useState } from 'react' -import { type Hash, type TransactionReceipt, parseEther } from 'viem' +import { type Hash, parseEther, type TransactionReceipt } from 'viem' import { sepolia } from 'viem/chains' import { useSendTransaction } from 'wagmi' +import Wrapper from '@/src/components/pageComponents/home/Examples/demos/TransactionButton/Wrapper' +import TransactionButton from '@/src/components/sharedComponents/TransactionButton' +import { GeneralMessage } from '@/src/components/sharedComponents/ui/GeneralMessage' +import PrimaryButton from '@/src/components/sharedComponents/ui/PrimaryButton' +import { useWeb3StatusConnected } from '@/src/components/sharedComponents/WalletStatusVerifier' /** * This demo shows how to send a native token transaction. * * Works only on Sepolia chain. */ -const NativeToken = withWalletStatusVerifier( - () => { - const [isModalOpen, setIsModalOpen] = useState(false) - const { address } = useWeb3StatusConnected() - const { sendTransactionAsync } = useSendTransaction() - const [minedMessage, setMinedMessage] = useState<string | ReactElement>() +const NativeToken = () => { + const [isModalOpen, setIsModalOpen] = useState(false) + const { address } = useWeb3StatusConnected() + const { sendTransactionAsync } = useSendTransaction() + const [minedMessage, setMinedMessage] = useState<string | ReactElement>() - const handleOnMined = (receipt: TransactionReceipt) => { - setMinedMessage( - <> - <b>Hash:</b> <span>{receipt.transactionHash}</span> - </>, - ) - setIsModalOpen(true) - } + const handleOnMined = (receipt: TransactionReceipt) => { + setMinedMessage( + <> + <b>Hash:</b> <span>{receipt.transactionHash}</span> + </>, + ) + setIsModalOpen(true) + } - const handleSendTransaction = (): Promise<Hash> => { - // Send native token - return sendTransactionAsync({ - to: address, - value: parseEther('0.1'), - }) - } - handleSendTransaction.methodId = 'sendTransaction' + const handleSendTransaction = (): Promise<Hash> => { + // Send native token + return sendTransactionAsync({ + to: address, + value: parseEther('0.1'), + }) + } + handleSendTransaction.methodId = 'sendTransaction' - return ( - <Dialog.Root - open={isModalOpen} - size="xs" + return ( + <Dialog.Root + open={isModalOpen} + size="xs" + > + <Wrapper + text="Demo transaction that sends 0.1 Sepolia ETH from / to your wallet." + title="Native token demo" > - <Wrapper - text="Demo transaction that sends 0.1 Sepolia ETH from / to your wallet." - title="Native token demo" + {/* chainId must be explicit: the parent WalletStatusVerifier already verified Sepolia, + but TransactionButton checks against appChainId without it. */} + <TransactionButton + chainId={sepolia.id} + labelSending="Sending 0.1 ETH..." + onMined={handleOnMined} + transaction={handleSendTransaction} > - <TransactionButton - labelSending="Sending 0.1 ETH..." - onMined={handleOnMined} - transaction={handleSendTransaction} - > - Send 0.1 Sepolia ETH - </TransactionButton> - </Wrapper> - <Dialog.Backdrop /> - <Dialog.Positioner> - <Dialog.Content> - <GeneralMessage - actionButton={ - <PrimaryButton - onClick={() => { - setIsModalOpen(false) - setMinedMessage('') - }} - > - Close - </PrimaryButton> - } - message={minedMessage} - title={'Transaction completed!'} - /> - </Dialog.Content> - </Dialog.Positioner> - </Dialog.Root> - ) - }, - { - chainId: sepolia.id, // this DEMO component only works on sepolia chain - }, -) + Send 0.1 Sepolia ETH + </TransactionButton> + </Wrapper> + <Dialog.Backdrop /> + <Dialog.Positioner> + <Dialog.Content> + <GeneralMessage + actionButton={ + <PrimaryButton + onClick={() => { + setIsModalOpen(false) + setMinedMessage('') + }} + > + Close + </PrimaryButton> + } + message={minedMessage} + title={'Transaction completed!'} + /> + </Dialog.Content> + </Dialog.Positioner> + </Dialog.Root> + ) +} export default NativeToken diff --git a/src/components/pageComponents/home/Examples/demos/TransactionButton/index.test.tsx b/src/components/pageComponents/home/Examples/demos/TransactionButton/index.test.tsx index 1d7d3be8..fd29ee05 100644 --- a/src/components/pageComponents/home/Examples/demos/TransactionButton/index.test.tsx +++ b/src/components/pageComponents/home/Examples/demos/TransactionButton/index.test.tsx @@ -1,6 +1,6 @@ -import { createMockWeb3Status, renderWithProviders } from '@/src/test-utils' import { screen } from '@testing-library/react' import { describe, expect, it, vi } from 'vitest' +import { createMockWeb3Status, renderWithProviders } from '@/src/test-utils' import transactionButton from './index' vi.mock('@/src/hooks/useWeb3Status', () => ({ diff --git a/src/components/pageComponents/home/Examples/demos/TransactionButton/index.tsx b/src/components/pageComponents/home/Examples/demos/TransactionButton/index.tsx index a77c0dc4..a8733bb2 100644 --- a/src/components/pageComponents/home/Examples/demos/TransactionButton/index.tsx +++ b/src/components/pageComponents/home/Examples/demos/TransactionButton/index.tsx @@ -1,11 +1,11 @@ +import { Flex } from '@chakra-ui/react' +import { useState } from 'react' +import { sepolia } from 'wagmi/chains' import { OptionsDropdown } from '@/src/components/pageComponents/home/Examples/demos/OptionsDropdown' import ERC20ApproveAndTransferButton from '@/src/components/pageComponents/home/Examples/demos/TransactionButton/ERC20ApproveAndTransferButton' import Icon from '@/src/components/pageComponents/home/Examples/demos/TransactionButton/Icon' import NativeToken from '@/src/components/pageComponents/home/Examples/demos/TransactionButton/NativeToken' import { WalletStatusVerifier } from '@/src/components/sharedComponents/WalletStatusVerifier' -import { Flex } from '@chakra-ui/react' -import { useState } from 'react' -import { sepolia } from 'wagmi/chains' type Options = 'erc20' | 'native' @@ -18,20 +18,18 @@ const TransactionButton = () => { return ( <WalletStatusVerifier chainId={sepolia.id}> - <> - <OptionsDropdown items={items} /> - <Flex - alignItems="center" - display="flex" - flexDirection="column" - justifyContent="center" - paddingTop={{ base: 2, lg: 6 }} - width="100%" - > - {currentTokenInput === 'erc20' && <ERC20ApproveAndTransferButton />} - {currentTokenInput === 'native' && <NativeToken />} - </Flex> - </> + <OptionsDropdown items={items} /> + <Flex + alignItems="center" + display="flex" + flexDirection="column" + justifyContent="center" + paddingTop={{ base: 2, lg: 6 }} + width="100%" + > + {currentTokenInput === 'erc20' && <ERC20ApproveAndTransferButton />} + {currentTokenInput === 'native' && <NativeToken />} + </Flex> </WalletStatusVerifier> ) } diff --git a/src/components/pageComponents/home/Examples/demos/subgraphs/Subgraph/index.tsx b/src/components/pageComponents/home/Examples/demos/subgraphs/Subgraph/index.tsx index b1a16931..ada82963 100644 --- a/src/components/pageComponents/home/Examples/demos/subgraphs/Subgraph/index.tsx +++ b/src/components/pageComponents/home/Examples/demos/subgraphs/Subgraph/index.tsx @@ -1,3 +1,10 @@ +import { generateSchemasMapping } from '@bootnodedev/db-subgraph' +import { Box, Flex, Skeleton } from '@chakra-ui/react' +import { useSuspenseQuery } from '@tanstack/react-query' +import { NetworkArbitrumOne, NetworkBase, NetworkOptimism, NetworkPolygon } from '@web3icons/react' +import request from 'graphql-request' +import { useState } from 'react' +import { arbitrum, base, type Chain, optimism, polygon } from 'viem/chains' import { OptionsDropdown } from '@/src/components/pageComponents/home/Examples/demos/OptionsDropdown' import { Row, @@ -15,13 +22,6 @@ import { env } from '@/src/env' import { allAaveReservesQueryDocument } from '@/src/subgraphs/queries/aave/reserves' import { allUniswapPoolsQueryDocument } from '@/src/subgraphs/queries/uniswap/pools' import { withSuspenseAndRetry } from '@/src/utils/suspenseWrapper' -import { generateSchemasMapping } from '@bootnodedev/db-subgraph' -import { Box, Flex, Skeleton } from '@chakra-ui/react' -import { useSuspenseQuery } from '@tanstack/react-query' -import { NetworkArbitrumOne, NetworkBase, NetworkOptimism, NetworkPolygon } from '@web3icons/react' -import request from 'graphql-request' -import { useState } from 'react' -import { type Chain, arbitrum, base, optimism, polygon } from 'viem/chains' const chainNameMapping: { [key: number]: string } = { [arbitrum.id]: 'arbitrum', diff --git a/src/components/pageComponents/home/Examples/demos/subgraphs/SubgraphStatus/index.tsx b/src/components/pageComponents/home/Examples/demos/subgraphs/SubgraphStatus/index.tsx index 1b8cba4b..e61b3766 100644 --- a/src/components/pageComponents/home/Examples/demos/subgraphs/SubgraphStatus/index.tsx +++ b/src/components/pageComponents/home/Examples/demos/subgraphs/SubgraphStatus/index.tsx @@ -1,3 +1,7 @@ +import { type SchemaMappingConfig, useSubgraphIndexingStatus } from '@bootnodedev/db-subgraph' +import { Box, Flex, Skeleton, Span, Text } from '@chakra-ui/react' +import { type FC, useState } from 'react' +import { arbitrum, base, type Chain, optimism, polygon } from 'viem/chains' import { OptionsDropdown } from '@/src/components/pageComponents/home/Examples/demos/OptionsDropdown' import { getNetworkIcon } from '@/src/components/pageComponents/home/Examples/demos/subgraphs/Subgraph' import { @@ -11,10 +15,6 @@ import Icon from '@/src/components/pageComponents/home/Examples/demos/subgraphs/ import Spinner from '@/src/components/sharedComponents/ui/Spinner' import { env } from '@/src/env' import { withSuspenseAndRetry } from '@/src/utils/suspenseWrapper' -import { type SchemaMappingConfig, useSubgraphIndexingStatus } from '@bootnodedev/db-subgraph' -import { Box, Flex, Skeleton, Span, Text } from '@chakra-ui/react' -import { type FC, useState } from 'react' -import { type Chain, arbitrum, base, optimism, polygon } from 'viem/chains' export const SkeletonLoadingItem = () => ( <Flex diff --git a/src/components/pageComponents/home/Examples/index.tsx b/src/components/pageComponents/home/Examples/index.tsx index 7746646c..926fc1a3 100644 --- a/src/components/pageComponents/home/Examples/index.tsx +++ b/src/components/pageComponents/home/Examples/index.tsx @@ -1,18 +1,18 @@ -import type { Props as ItemProps } from '@/src/components/pageComponents/home/Examples/Item' -import List from '@/src/components/pageComponents/home/Examples/List' +import { Box, type BoxProps, chakra, Flex, Heading, Text } from '@chakra-ui/react' +import type { FC } from 'react' import connectWallet from '@/src/components/pageComponents/home/Examples/demos/ConnectWallet' import ensName from '@/src/components/pageComponents/home/Examples/demos/EnsName' import hashHandling from '@/src/components/pageComponents/home/Examples/demos/HashHandling' import optimismCrossDomainMessenger from '@/src/components/pageComponents/home/Examples/demos/OptimismCrossDomainMessenger' import signMessage from '@/src/components/pageComponents/home/Examples/demos/SignMessage' import switchNetwork from '@/src/components/pageComponents/home/Examples/demos/SwitchNetwork' +import subgraphs from '@/src/components/pageComponents/home/Examples/demos/subgraphs' import tokenDropdown from '@/src/components/pageComponents/home/Examples/demos/TokenDropdown' import tokenInput from '@/src/components/pageComponents/home/Examples/demos/TokenInput' import transactionButton from '@/src/components/pageComponents/home/Examples/demos/TransactionButton' -import subgraphs from '@/src/components/pageComponents/home/Examples/demos/subgraphs' +import type { Props as ItemProps } from '@/src/components/pageComponents/home/Examples/Item' +import List from '@/src/components/pageComponents/home/Examples/List' import { Inner } from '@/src/components/sharedComponents/ui/Inner' -import { Box, type BoxProps, Flex, Heading, Text, chakra } from '@chakra-ui/react' -import type { FC } from 'react' import styles from './styles' const Examples: FC<BoxProps> = ({ css, ...restProps }) => { diff --git a/src/components/pageComponents/home/Welcome/index.tsx b/src/components/pageComponents/home/Welcome/index.tsx index e1b1ca25..dcb1c64c 100644 --- a/src/components/pageComponents/home/Welcome/index.tsx +++ b/src/components/pageComponents/home/Welcome/index.tsx @@ -1,6 +1,6 @@ -import { Inner } from '@/src/components/sharedComponents/ui/Inner' -import { type FlexProps, Heading, Link, Span, Text, chakra } from '@chakra-ui/react' +import { chakra, type FlexProps, Heading, Link, Span, Text } from '@chakra-ui/react' import type { FC } from 'react' +import { Inner } from '@/src/components/sharedComponents/ui/Inner' import styles from './styles' const Arrow = () => ( diff --git a/src/components/pageComponents/home/index.test.tsx b/src/components/pageComponents/home/index.test.tsx index d498d8a1..529bfe7b 100644 --- a/src/components/pageComponents/home/index.test.tsx +++ b/src/components/pageComponents/home/index.test.tsx @@ -1,6 +1,6 @@ -import { renderWithProviders } from '@/src/test-utils' import { screen } from '@testing-library/react' import { describe, expect, it, vi } from 'vitest' +import { renderWithProviders } from '@/src/test-utils' import { Home } from './index' // Mock sub-components that pull in Web3 dependencies to keep this a pure structural test diff --git a/src/components/sharedComponents/Avatar.tsx b/src/components/sharedComponents/Avatar.tsx index 83242610..d2fb05b7 100644 --- a/src/components/sharedComponents/Avatar.tsx +++ b/src/components/sharedComponents/Avatar.tsx @@ -1,6 +1,18 @@ import { Box } from '@chakra-ui/react' import type { ComponentProps, FC } from 'react' -import Jazzicon, { jsNumberForAddress } from 'react-jazzicon' +// react-jazzicon is CJS with __esModule. Vite 8's pre-bundler wraps it as +// `export default module.exports`, so the default import is the module.exports +// object, not the component. Node.js/Vitest gives the component directly. +import _Jazzicon, { jsNumberForAddress as _jsNFA } from 'react-jazzicon' + +// Vite 8 pre-bundler wraps CJS __esModule packages as `export default module.exports`, +// so the default import may be the module.exports object instead of exports.default. +type CJSModule = Record<string, unknown> +const _mod = _Jazzicon as unknown as CJSModule +const Jazzicon: typeof _Jazzicon = + typeof _Jazzicon === 'function' ? _Jazzicon : (_mod.default as typeof _Jazzicon) +const jsNumberForAddress: typeof _jsNFA = + typeof _jsNFA === 'function' ? _jsNFA : (_mod.jsNumberForAddress as typeof _jsNFA) interface AvatarProps extends ComponentProps<'div'> { address: string diff --git a/src/components/sharedComponents/BigNumberInput.test.tsx b/src/components/sharedComponents/BigNumberInput.test.tsx index 03588853..d57c0384 100644 --- a/src/components/sharedComponents/BigNumberInput.test.tsx +++ b/src/components/sharedComponents/BigNumberInput.test.tsx @@ -1,8 +1,9 @@ import { ChakraProvider, createSystem, defaultConfig } from '@chakra-ui/react' -import { render, screen } from '@testing-library/react' +import { render, screen, waitFor } from '@testing-library/react' import userEvent from '@testing-library/user-event' import type { ComponentProps } from 'react' -import { maxUint256 } from 'viem' +import { NumericFormat } from 'react-number-format' +import { maxUint256, parseUnits } from 'viem' import { describe, expect, it, vi } from 'vitest' import { BigNumberInput } from './BigNumberInput' @@ -124,3 +125,98 @@ describe('BigNumberInput', () => { expect(onError).not.toHaveBeenCalled() }) }) + +describe('BigNumberInput with renderInput (NumericFormat)', () => { + function renderWithNumericFormat( + props: Partial<ComponentProps<typeof BigNumberInput>> & { + onChange?: (v: bigint) => void + } = {}, + initialValue = BigInt(0), + ) { + const onChange = props.onChange ?? vi.fn() + + const initialDecimals = props.decimals ?? 18 + + const makeJsx = (value: bigint, decimals = initialDecimals) => ( + <ChakraProvider value={system}> + <BigNumberInput + decimals={decimals} + value={value} + onChange={onChange} + renderInput={({ + onChange: handleChange, + value: displayVal, + inputRef: _inputRef, + ...restProps + }) => ( + <NumericFormat + thousandSeparator + onValueChange={({ value: v }) => handleChange(v)} + value={displayVal as string | undefined} + // biome-ignore lint/suspicious/noExplicitAny: mirrors TokenAmountField pattern + {...(restProps as any)} + /> + )} + {...props} + /> + </ChakraProvider> + ) + + const { container, rerender } = render(makeJsx(initialValue)) + + return { + input: container.querySelector('input') as HTMLInputElement, + onChange, + rerender: (newValue: bigint, decimals?: number) => rerender(makeJsx(newValue, decimals)), + } + } + + it('shows empty input (placeholder) when value is 0n', () => { + const { input } = renderWithNumericFormat() + expect(input.value).toBe('') + }) + + it('formats value with thousand separators when value changes externally', async () => { + const { input, rerender } = renderWithNumericFormat() + rerender(parseUnits('1000', 18)) + await waitFor(() => { + expect(input.value).toBe('1,000') + }) + }) + + it('shows empty input after value resets to 0n', async () => { + const { input, rerender } = renderWithNumericFormat() + rerender(parseUnits('1000', 18)) + await waitFor(() => { + expect(input.value).toBe('1,000') + }) + rerender(BigInt(0)) + await waitFor(() => { + expect(input.value).toBe('') + }) + }) + + it('preserves user-typed "0" without clearing to placeholder', async () => { + const { input } = renderWithNumericFormat() + await userEvent.type(input, '0') + expect(input.value).toBe('0') + }) + + it('shows formatted initial value when mounted with non-zero value', () => { + const { input } = renderWithNumericFormat({}, parseUnits('1000', 18)) + expect(input.value).toBe('1,000') + }) + + it('reformats value when decimals change (token switch)', async () => { + const value = parseUnits('1000', 18) + const { input, rerender } = renderWithNumericFormat({}, value) + await waitFor(() => { + expect(input.value).toBe('1,000') + }) + // Same bigint but with 6 decimals produces a completely different display value + rerender(value, 6) + await waitFor(() => { + expect(input.value).toBe('1,000,000,000,000,000') + }) + }) +}) diff --git a/src/components/sharedComponents/BigNumberInput.tsx b/src/components/sharedComponents/BigNumberInput.tsx index b9cce87b..24a45438 100644 --- a/src/components/sharedComponents/BigNumberInput.tsx +++ b/src/components/sharedComponents/BigNumberInput.tsx @@ -1,4 +1,4 @@ -import { type InputProps, chakra } from '@chakra-ui/react' +import { chakra, type InputProps } from '@chakra-ui/react' import { type ChangeEvent, type FC, @@ -68,8 +68,26 @@ export const BigNumberInput: FC<BigNumberInputProps> = ({ }: BigNumberInputProps) => { const inputRef = useRef<HTMLInputElement>(null) const [hasError, setHasError] = useState(false) + const [displayValue, setDisplayValue] = useState(() => + value === BigInt(0) ? '' : formatUnits(value, decimals), + ) + const prevValueRef = useRef(value) + const prevDecimalsRef = useRef(decimals) + + // Sync displayValue when an external change updates value or decimals (e.g. max click, token change). + // Using render-time state update to avoid a visible flash between renders. + if (prevValueRef.current !== value || prevDecimalsRef.current !== decimals) { + prevValueRef.current = value + prevDecimalsRef.current = decimals + if (renderInput) { + setDisplayValue(value === BigInt(0) ? '' : formatUnits(value, decimals)) + } + } - // update inputValue when value changes + // DOM sync for the native input path (no renderInput). + // When renderInput is provided (e.g. NumericFormat), inputRef is not attached to the DOM + // and this effect is a no-op. External value changes for that path are handled via + // the displayValue state above. useEffect(() => { const current = inputRef.current if (!current) { @@ -101,6 +119,8 @@ export const BigNumberInput: FC<BigNumberInputProps> = ({ const { value } = typeof event === 'string' ? { value: event } : event.currentTarget if (value === '') { + prevValueRef.current = BigInt(0) + if (renderInput) setDisplayValue('') setHasError(false) onChange(BigInt(0)) return @@ -142,6 +162,9 @@ export const BigNumberInput: FC<BigNumberInputProps> = ({ setHasError(false) } + // Set prevValueRef before onChange so the render-time sync doesn't override the user's input. + prevValueRef.current = newValue + if (renderInput) setDisplayValue(value) onChange(newValue) } @@ -154,7 +177,7 @@ export const BigNumberInput: FC<BigNumberInputProps> = ({ } return renderInput ? ( - renderInput({ ...inputProps, inputRef }) + renderInput({ ...inputProps, inputRef, value: displayValue }) ) : ( <chakra.input {...inputProps} diff --git a/src/components/sharedComponents/ConnectButton/index.tsx b/src/components/sharedComponents/ConnectButton/index.tsx index ee20c3cc..b5efd19b 100644 --- a/src/components/sharedComponents/ConnectButton/index.tsx +++ b/src/components/sharedComponents/ConnectButton/index.tsx @@ -1,6 +1,6 @@ -import { Button } from '@/src/components/sharedComponents/ui/Button' import { type ButtonProps, chakra } from '@chakra-ui/react' import type { FC } from 'react' +import { Button } from '@/src/components/sharedComponents/ui/Button' import styles from './styles' const BaseChevronDown = ({ ...restProps }) => ( diff --git a/src/components/sharedComponents/ExplorerLink.tsx b/src/components/sharedComponents/ExplorerLink.tsx index a8a05646..f342e87d 100644 --- a/src/components/sharedComponents/ExplorerLink.tsx +++ b/src/components/sharedComponents/ExplorerLink.tsx @@ -1,6 +1,6 @@ -import { type GetExplorerUrlParams, getExplorerLink } from '@/src/utils/getExplorerLink' -import { type LinkProps, chakra } from '@chakra-ui/react' +import { chakra, type LinkProps } from '@chakra-ui/react' import type { FC } from 'react' +import { type GetExplorerUrlParams, getExplorerLink } from '@/src/utils/getExplorerLink' interface ExplorerLinkProps extends GetExplorerUrlParams, LinkProps { text?: string diff --git a/src/components/sharedComponents/Hash.tsx b/src/components/sharedComponents/Hash.tsx index f44594df..6d091534 100644 --- a/src/components/sharedComponents/Hash.tsx +++ b/src/components/sharedComponents/Hash.tsx @@ -1,8 +1,8 @@ +import { Flex, type FlexProps, Span } from '@chakra-ui/react' +import type { FC, MouseEventHandler } from 'react' import CopyButton from '@/src/components/sharedComponents/ui/CopyButton' import ExternalLink from '@/src/components/sharedComponents/ui/ExternalLink' import { getTruncatedHash } from '@/src/utils/strings' -import { Flex, type FlexProps, Span } from '@chakra-ui/react' -import type { FC, MouseEventHandler } from 'react' interface HashProps extends Omit<FlexProps, 'onCopy'> { explorerURL?: string diff --git a/src/components/sharedComponents/HashInput.tsx b/src/components/sharedComponents/HashInput.tsx index a4addc93..b90c4406 100644 --- a/src/components/sharedComponents/HashInput.tsx +++ b/src/components/sharedComponents/HashInput.tsx @@ -1,5 +1,4 @@ -import detectHash, { type DetectedHash } from '@/src/utils/hash' -import { type InputProps, chakra } from '@chakra-ui/react' +import { chakra, type InputProps } from '@chakra-ui/react' import { type ChangeEvent, type FC, @@ -10,6 +9,7 @@ import { } from 'react' import { useDebouncedCallback } from 'use-debounce' import type { Chain } from 'viem' +import detectHash, { type DetectedHash } from '@/src/utils/hash' interface HashInputProps extends InputProps { chain: Chain diff --git a/src/components/sharedComponents/NotificationToast.tsx b/src/components/sharedComponents/NotificationToast.tsx index 3da3e540..1d5595aa 100644 --- a/src/components/sharedComponents/NotificationToast.tsx +++ b/src/components/sharedComponents/NotificationToast.tsx @@ -1,8 +1,8 @@ 'use client' +import { Toaster as ChakraToaster, createToaster, Portal, Stack, Toast } from '@chakra-ui/react' import Spinner from '@/src/components/sharedComponents/ui/Spinner' import { useWeb3Status } from '@/src/hooks/useWeb3Status' -import { Toaster as ChakraToaster, Portal, Stack, Toast, createToaster } from '@chakra-ui/react' export const notificationToaster = createToaster({ placement: 'bottom-end', diff --git a/src/components/sharedComponents/SignButton.test.tsx b/src/components/sharedComponents/SignButton.test.tsx new file mode 100644 index 00000000..4e5c40d5 --- /dev/null +++ b/src/components/sharedComponents/SignButton.test.tsx @@ -0,0 +1,148 @@ +import { ChakraProvider, createSystem, defaultConfig } from '@chakra-ui/react' +import { render, screen } from '@testing-library/react' +import type { ReactNode } from 'react' +import { createElement } from 'react' +import { beforeEach, describe, expect, it, vi } from 'vitest' +import type { Web3Status } from '@/src/hooks/useWeb3Status' +import SignButton from './SignButton' + +const mockSwitchChain = vi.fn() +const mockSignMessageAsync = vi.fn() +const mockWatchSignature = vi.fn() + +vi.mock('@/src/hooks/useWalletStatus', () => ({ + useWalletStatus: vi.fn(() => ({ + isReady: false, + needsConnect: true, + needsChainSwitch: false, + targetChain: { id: 1, name: 'Ethereum' }, + targetChainId: 1, + switchChain: mockSwitchChain, + })), +})) + +vi.mock('@/src/providers/Web3Provider', () => ({ + ConnectWalletButton: () => + createElement( + 'button', + { type: 'button', 'data-testid': 'connect-wallet-button' }, + 'Connect Wallet', + ), +})) + +vi.mock('@/src/providers/TransactionNotificationProvider', () => ({ + useTransactionNotification: vi.fn(() => ({ + watchSignature: mockWatchSignature, + })), +})) + +vi.mock('wagmi', () => ({ + useSignMessage: vi.fn(() => ({ + isPending: false, + signMessageAsync: mockSignMessageAsync, + })), +})) + +const { useWalletStatus } = await import('@/src/hooks/useWalletStatus') +const mockedUseWalletStatus = vi.mocked(useWalletStatus) + +const mockWeb3Status = { + readOnlyClient: undefined, + appChainId: 1, + address: '0xdeadbeef', + balance: undefined, + connectingWallet: false, + switchingChain: false, + isWalletConnected: true, + walletClient: undefined, + isWalletSynced: true, + walletChainId: 1, + switchChain: vi.fn(), + disconnect: vi.fn(), +} as unknown as Web3Status + +const system = createSystem(defaultConfig) + +const renderWithChakra = (ui: ReactNode) => + render(<ChakraProvider value={system}>{ui}</ChakraProvider>) + +describe('SignButton', () => { + beforeEach(() => { + vi.clearAllMocks() + }) + + it('renders connect button when wallet needs connect', () => { + mockedUseWalletStatus.mockReturnValue({ + isReady: false, + needsConnect: true, + needsChainSwitch: false, + targetChain: { id: 1, name: 'Ethereum' } as ReturnType<typeof useWalletStatus>['targetChain'], + targetChainId: 1, + switchChain: mockSwitchChain, + web3Status: mockWeb3Status, + }) + + renderWithChakra(<SignButton message="Hello" />) + + expect(screen.getByTestId('connect-wallet-button')).toBeInTheDocument() + expect(screen.queryByText('Sign Message')).toBeNull() + }) + + it('renders custom fallback when provided and wallet needs connect', () => { + mockedUseWalletStatus.mockReturnValue({ + isReady: false, + needsConnect: true, + needsChainSwitch: false, + targetChain: { id: 1, name: 'Ethereum' } as ReturnType<typeof useWalletStatus>['targetChain'], + targetChainId: 1, + switchChain: mockSwitchChain, + web3Status: mockWeb3Status, + }) + + renderWithChakra( + <SignButton + message="Hello" + fallback={createElement('div', { 'data-testid': 'custom-fallback' }, 'Custom')} + />, + ) + + expect(screen.getByTestId('custom-fallback')).toBeInTheDocument() + expect(screen.queryByText('Sign Message')).toBeNull() + }) + + it('renders switch chain button when wallet needs chain switch', () => { + mockedUseWalletStatus.mockReturnValue({ + isReady: false, + needsConnect: false, + needsChainSwitch: true, + targetChain: { id: 10, name: 'OP Mainnet' } as ReturnType< + typeof useWalletStatus + >['targetChain'], + targetChainId: 10, + switchChain: mockSwitchChain, + web3Status: mockWeb3Status, + }) + + renderWithChakra(<SignButton message="Hello" />) + + expect(screen.getByText(/Switch to/)).toBeInTheDocument() + expect(screen.getByText(/OP Mainnet/)).toBeInTheDocument() + expect(screen.queryByText('Sign Message')).toBeNull() + }) + + it('renders sign button when wallet is ready', () => { + mockedUseWalletStatus.mockReturnValue({ + isReady: true, + needsConnect: false, + needsChainSwitch: false, + targetChain: { id: 1, name: 'Ethereum' } as ReturnType<typeof useWalletStatus>['targetChain'], + targetChainId: 1, + switchChain: mockSwitchChain, + web3Status: mockWeb3Status, + }) + + renderWithChakra(<SignButton message="Hello" />) + + expect(screen.getByText('Sign Message')).toBeInTheDocument() + }) +}) diff --git a/src/components/sharedComponents/SignButton.tsx b/src/components/sharedComponents/SignButton.tsx index d548ab4a..da5d6f2c 100644 --- a/src/components/sharedComponents/SignButton.tsx +++ b/src/components/sharedComponents/SignButton.tsx @@ -1,29 +1,34 @@ -import { withWalletStatusVerifier } from '@/src/components/sharedComponents/WalletStatusVerifier' -import { useTransactionNotification } from '@/src/providers/TransactionNotificationProvider' import { type ButtonProps, chakra } from '@chakra-ui/react' -import type { FC } from 'react' +import type { FC, ReactElement } from 'react' import { useSignMessage } from 'wagmi' +import SwitchChainButton from '@/src/components/sharedComponents/ui/SwitchChainButton' +import { useWalletStatus } from '@/src/hooks/useWalletStatus' +import type { ChainsIds } from '@/src/lib/networks.config' +import { useTransactionNotification } from '@/src/providers/TransactionNotificationProvider' +import { ConnectWalletButton } from '@/src/providers/Web3Provider' interface SignButtonProps extends Omit<ButtonProps, 'onError'> { - label?: string + /** Target chain ID for wallet status verification. */ + chainId?: ChainsIds + /** Custom fallback when wallet needs connection. Defaults to ConnectWalletButton. */ + fallback?: ReactElement + /** Button label while signing. Defaults to 'Signing...'. */ labelSigning?: string + /** The message to sign. */ message: string + /** Callback function called when an error occurs. */ onError?: (error: Error) => void + /** Callback function called when the message is signed. */ onSign?: (signature: string) => void + /** Label for the switch chain button. Defaults to 'Switch to'. */ + switchChainLabel?: string } /** - * SignButton component that allows users to sign a message. + * Self-contained message signing button with wallet verification. * - * @param {SignButtonProps} props - SignButton component props. - * @param {string} props.message - The message to sign. - * @param {string|ReactNode} [props.children='Sign Message'] - The content to display in the button. - * @param {boolean} [props.disabled] - Whether the button is disabled. - * @param {(signature: string) => void} [props.onSign] - Callback function called when the message is signed. - * @param {(error: Error) => void} [props.onError] - Callback function called when an error occurs. - * @param {string} [props.label='Sign Message'] - The label for the button (alternative to children). - * @param {string} [props.labelSigning='Signing...'] - The label for the button when the message is being signed. - * @param {ButtonProps} [props.restProps] - Additional props inherited from Chakra UI ButtonProps. + * Handles wallet connection status internally — shows a connect button if not connected, + * a switch chain button if on the wrong chain, or the sign button when ready. * * @example * ```tsx @@ -34,44 +39,59 @@ interface SignButtonProps extends Omit<ButtonProps, 'onError'> { * /> * ``` */ -const SignButton: FC<SignButtonProps> = withWalletStatusVerifier( - ({ - children = 'Sign Message', - disabled, - labelSigning = 'Signing...', - message, - onError, - onSign, - ...restProps - }: SignButtonProps) => { - const { watchSignature } = useTransactionNotification() +const SignButton: FC<SignButtonProps> = ({ + chainId, + children = 'Sign Message', + disabled, + fallback = <ConnectWalletButton />, + labelSigning = 'Signing...', + message, + onError, + onSign, + switchChainLabel = 'Switch to', + ...restProps +}) => { + const { needsConnect, needsChainSwitch, targetChain, targetChainId, switchChain } = + useWalletStatus({ chainId }) + const { watchSignature } = useTransactionNotification() - const { isPending, signMessageAsync } = useSignMessage({ - mutation: { - onSuccess(data) { - onSign?.(data) - }, - onError(error) { - onError?.(error) - }, + const { isPending, signMessageAsync } = useSignMessage({ + mutation: { + onSuccess(data) { + onSign?.(data) + }, + onError(error) { + onError?.(error) }, - }) + }, + }) + if (needsConnect) { + return fallback + } + + if (needsChainSwitch) { return ( - <chakra.button - disabled={disabled || isPending} - onClick={() => { - watchSignature({ - message: 'Signing message...', - signaturePromise: signMessageAsync({ message }), - }) - }} - {...restProps} - > - {isPending ? labelSigning : children} - </chakra.button> + <SwitchChainButton onClick={() => switchChain(targetChainId)}> + {switchChainLabel} {targetChain.name} + </SwitchChainButton> ) - }, -) + } + + return ( + <chakra.button + disabled={disabled || isPending} + onClick={() => { + watchSignature({ + message: 'Signing message...', + signaturePromise: signMessageAsync({ message }), + }) + }} + {...restProps} + > + {isPending ? labelSigning : children} + </chakra.button> + ) +} export default SignButton diff --git a/src/components/sharedComponents/SwitchNetwork.test.tsx b/src/components/sharedComponents/SwitchNetwork.test.tsx index edbe1408..9cfad6a4 100644 --- a/src/components/sharedComponents/SwitchNetwork.test.tsx +++ b/src/components/sharedComponents/SwitchNetwork.test.tsx @@ -13,8 +13,8 @@ vi.mock('wagmi', () => ({ useSwitchChain: vi.fn(), })) -import * as useWeb3StatusModule from '@/src/hooks/useWeb3Status' import * as wagmiModule from 'wagmi' +import * as useWeb3StatusModule from '@/src/hooks/useWeb3Status' const mockNetworks: Networks = [ { id: 1, label: 'Ethereum', icon: <span>ETH</span> }, diff --git a/src/components/sharedComponents/SwitchNetwork.tsx b/src/components/sharedComponents/SwitchNetwork.tsx index d3308dcf..7e1ac77e 100644 --- a/src/components/sharedComponents/SwitchNetwork.tsx +++ b/src/components/sharedComponents/SwitchNetwork.tsx @@ -1,6 +1,3 @@ -import DropdownButton from '@/src/components/sharedComponents/ui/DropdownButton' -import { MenuContent, MenuItem } from '@/src/components/sharedComponents/ui/Menu' -import { useWeb3Status } from '@/src/hooks/useWeb3Status' import { Box, Flex, Menu } from '@chakra-ui/react' import { type ComponentPropsWithoutRef, @@ -11,6 +8,9 @@ import { } from 'react' import * as chains from 'viem/chains' import { useSwitchChain } from 'wagmi' +import DropdownButton from '@/src/components/sharedComponents/ui/DropdownButton' +import { MenuContent, MenuItem } from '@/src/components/sharedComponents/ui/Menu' +import { useWeb3Status } from '@/src/hooks/useWeb3Status' type NetworkItem = { icon: ReactElement diff --git a/src/components/sharedComponents/TokenDropdown.tsx b/src/components/sharedComponents/TokenDropdown.tsx index c81fbfb0..ba34631f 100644 --- a/src/components/sharedComponents/TokenDropdown.tsx +++ b/src/components/sharedComponents/TokenDropdown.tsx @@ -1,11 +1,11 @@ +import { Flex, Menu } from '@chakra-ui/react' +import type { ComponentPropsWithoutRef, FC } from 'react' +import { useState } from 'react' import TokenLogo from '@/src/components/sharedComponents/TokenLogo' import TokenSelect, { type TokenSelectProps } from '@/src/components/sharedComponents/TokenSelect' import DropdownButton from '@/src/components/sharedComponents/ui/DropdownButton' import { MenuContent } from '@/src/components/sharedComponents/ui/Menu' import type { Token } from '@/src/types/token' -import { Flex, Menu } from '@chakra-ui/react' -import type { ComponentPropsWithoutRef, FC } from 'react' -import { useState } from 'react' export interface TokenDropdownProps extends TokenSelectProps { currentToken?: Token | undefined @@ -28,8 +28,9 @@ type Props = ComponentPropsWithoutRef<'span'> & TokenDropdownProps * @param {string} [props.placeholder] - Placeholder text for the search input. * @param {number} [props.containerHeight] - Height of the virtualized tokens list. * @param {number} [props.itemHeight] - Height of each item in the tokens list. - * @param {boolean} [props.showBalance] - Whether to show the token balance in the list. + * @param {boolean} [props.showBalance] - Whether to show the token balance column in each row. * @param {boolean} [props.showTopTokens] - Whether to show the top tokens section in the list. + * @param {boolean} [props.sortByBalance] - Sort tokens with a positive balance to the top, ordered by USD value descending. Defaults to true when a wallet is connected. * @param {ComponentPropsWithoutRef<'span'>} props.restProps - Additional props for the span element. * * @example diff --git a/src/components/sharedComponents/TokenInput/Components.tsx b/src/components/sharedComponents/TokenInput/Components.tsx index a5a6c059..a7e80371 100644 --- a/src/components/sharedComponents/TokenInput/Components.tsx +++ b/src/components/sharedComponents/TokenInput/Components.tsx @@ -1,5 +1,6 @@ import { type ButtonProps, + chakra, Flex, type FlexProps, Heading, @@ -8,7 +9,6 @@ import { type InputProps, Span, type SpanProps, - chakra, } from '@chakra-ui/react' import type { FC } from 'react' @@ -277,9 +277,10 @@ export const CloseButton: FC<ButtonProps> = ({ children, ...restProps }) => ( border="none" color="var(--title-color-default)" cursor="pointer" - position="absolute" - right={0} - top={10} + marginLeft="auto" + marginRight={4} + marginBottom={4} + marginTop={0} _active={{ opacity: 0.7, }} diff --git a/src/components/sharedComponents/TokenInput/index.tsx b/src/components/sharedComponents/TokenInput/index.tsx index d558d39b..8fb86b61 100644 --- a/src/components/sharedComponents/TokenInput/index.tsx +++ b/src/components/sharedComponents/TokenInput/index.tsx @@ -1,3 +1,7 @@ +import { Dialog, type FlexProps, Portal } from '@chakra-ui/react' +import { type FC, useMemo, useState } from 'react' +import { type NumberFormatValues, NumericFormat } from 'react-number-format' +import { formatUnits } from 'viem' import { BigNumberInput, type BigNumberInputProps, @@ -23,11 +27,10 @@ import type { UseTokenInputReturnType } from '@/src/components/sharedComponents/ import TokenLogo from '@/src/components/sharedComponents/TokenLogo' import TokenSelect, { type TokenSelectProps } from '@/src/components/sharedComponents/TokenSelect' import Spinner from '@/src/components/sharedComponents/ui/Spinner' +import { NO_PRICE_DATA_LABEL } from '@/src/constants/common' +import { useWeb3Status } from '@/src/hooks/useWeb3Status' +import { chains } from '@/src/lib/networks.config' import type { Token } from '@/src/types/token' -import { Dialog, type FlexProps, Portal } from '@chakra-ui/react' -import { type FC, useMemo, useState } from 'react' -import { type NumberFormatValues, NumericFormat } from 'react-number-format' -import { formatUnits } from 'viem' import styles from './styles' interface TokenInputProps extends Omit<TokenSelectProps, 'onTokenSelect'> { @@ -55,8 +58,9 @@ type Props = FlexProps & TokenInputProps * @param {number} [props.iconSize=32] - Optional size of the token icon in the list. Default is 32. * @param {number} [props.itemHeight=64] - Optional height of each item in the list. Default is 64. * @param {boolean} [props.showAddTokenButton=false] - Optional flag to allow adding a token. Default is false. - * @param {boolean} [props.showBalance=false] - Optional flag to show the token balance in the list. Default is false. + * @param {boolean} [props.showBalance=false] - Optional flag to show the token balance column in each row. Default is false. * @param {boolean} [props.showTopTokens=false] - Optional flag to show the top tokens in the list. Default is false. + * @param {boolean} [props.sortByBalance] - Sort tokens with a positive balance to the top, ordered by USD value descending. Defaults to true when a wallet is connected. */ const TokenInput: FC<Props> = ({ containerHeight, @@ -70,6 +74,7 @@ const TokenInput: FC<Props> = ({ showBalance, showTopTokens, singleToken, + sortByBalance, thousandSeparator = true, title, tokenInput, @@ -82,6 +87,8 @@ const TokenInput: FC<Props> = ({ balance, balanceError, isLoadingBalance, + isLoadingPrice, + priceUSD, selectedToken, setAmount, setAmountError, @@ -92,6 +99,21 @@ const TokenInput: FC<Props> = ({ () => (balance && selectedToken ? balance : BigInt(0)), [balance, selectedToken], ) + + const { appChainId, walletChainId } = useWeb3Status() + const activeChainId = selectedToken?.chainId ?? currentNetworkId ?? walletChainId ?? appChainId + const isTestnetChain = useMemo( + () => chains.find((c) => c.id === activeChainId)?.testnet === true, + [activeChainId], + ) + + const estimatedUSDValue = useMemo(() => { + if (isTestnetChain) return null + if (!selectedToken || !priceUSD || !balance) return 0 + const tokenBalance = Number.parseFloat(formatUnits(balance, selectedToken.decimals ?? 0)) + return Number.parseFloat(priceUSD) * tokenBalance + }, [isTestnetChain, selectedToken, priceUSD, balance]) + const selectIconSize = 24 const decimals = selectedToken ? selectedToken.decimals : 2 @@ -102,6 +124,7 @@ const TokenInput: FC<Props> = ({ } const handleSetMax = () => { + setAmountError(null) setAmount(max) } @@ -166,7 +189,15 @@ const TokenInput: FC<Props> = ({ )} </TopRow> <BottomRow> - <EstimatedUSDValue>~$0.00</EstimatedUSDValue> + <EstimatedUSDValue> + {estimatedUSDValue === null ? ( + NO_PRICE_DATA_LABEL + ) : selectedToken && (isLoadingPrice || isLoadingBalance) ? ( + <Spinner size="sm" /> + ) : ( + `~$${estimatedUSDValue.toFixed(2)}` + )} + </EstimatedUSDValue> <Balance> <BalanceValue> {balanceError && 'Error...'} @@ -201,6 +232,7 @@ const TokenInput: FC<Props> = ({ showAddTokenButton={showAddTokenButton} showBalance={showBalance} showTopTokens={showTopTokens} + sortByBalance={sortByBalance} > <CloseButton aria-label="Close" @@ -228,7 +260,7 @@ function TokenAmountField({ const { onChange, inputRef, ...restProps } = renderInputProps const isAllowed = ({ value }: NumberFormatValues) => { - const [inputDecimals] = value.toString().split('.') + const [, inputDecimals] = value.toString().split('.') if (!inputDecimals) { return true diff --git a/src/components/sharedComponents/TokenInput/useTokenInput.test.ts b/src/components/sharedComponents/TokenInput/useTokenInput.test.ts new file mode 100644 index 00000000..68631017 --- /dev/null +++ b/src/components/sharedComponents/TokenInput/useTokenInput.test.ts @@ -0,0 +1,167 @@ +import { QueryClient, QueryClientProvider } from '@tanstack/react-query' +import { act, renderHook, waitFor } from '@testing-library/react' +import { createElement, type ReactNode } from 'react' +import { zeroAddress } from 'viem' +import { beforeEach, describe, expect, it, vi } from 'vitest' +import type { Token } from '@/src/types/token' +import { useTokenInput } from './useTokenInput' + +const walletAddress = '0x71C7656EC7ab88b098defB751B7401B5f6d8976F' as const + +const mockUseAccount = vi.fn() +const mockUsePublicClient = vi.fn() +const mockGetBalance = vi.fn() +const mockUseTokens = vi.fn() + +vi.mock('wagmi', () => ({ + useAccount: () => mockUseAccount(), + usePublicClient: (args: { chainId?: number } = {}) => { + mockUsePublicClient(args) + return { getBalance: mockGetBalance } + }, +})) + +vi.mock('@/src/hooks/useErc20Balance', () => ({ + useErc20Balance: () => ({ balance: undefined, balanceError: null, isLoadingBalance: false }), +})) + +vi.mock('@/src/hooks/useTokens', () => ({ + useTokens: (args: unknown) => mockUseTokens(args), +})) + +vi.mock('@/src/env', () => ({ + env: { PUBLIC_NATIVE_TOKEN_ADDRESS: zeroAddress.toLowerCase() }, +})) + +const mainnetUsdc: Token = { + address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', + chainId: 1, + decimals: 6, + name: 'USD Coin', + symbol: 'USDC', +} + +const sepoliaEth: Token = { + address: zeroAddress, + chainId: 11155111, + decimals: 18, + name: 'Sepolia Ether', + symbol: 'ETH', +} + +const wrapper = ({ children }: { children: ReactNode }) => + createElement( + QueryClientProvider, + { client: new QueryClient({ defaultOptions: { queries: { retry: false } } }) }, + children, + ) + +describe('useTokenInput', () => { + beforeEach(() => { + mockUseAccount.mockReturnValue({ address: walletAddress }) + mockUsePublicClient.mockClear() + mockGetBalance.mockReset() + mockUseTokens.mockReturnValue({ + tokensByChainId: {}, + isLoadingBalances: false, + isLoadingPrices: false, + tokens: [], + }) + }) + + it('rebinds the native public client to the selected token chain when the user switches chains', async () => { + mockGetBalance.mockResolvedValue(42n) + + const { result } = renderHook(() => useTokenInput(mainnetUsdc), { wrapper }) + + act(() => { + result.current.setTokenSelected(sepoliaEth) + }) + + await waitFor(() => + expect(mockUsePublicClient).toHaveBeenLastCalledWith({ chainId: sepoliaEth.chainId }), + ) + await waitFor(() => expect(result.current.balance).toBe(42n)) + }) + + it('binds the native public client to the selected token chain when no initial token is given', async () => { + mockGetBalance.mockResolvedValue(7n) + + const { result } = renderHook(() => useTokenInput(), { wrapper }) + + act(() => { + result.current.setTokenSelected(sepoliaEth) + }) + + await waitFor(() => + expect(mockUsePublicClient).toHaveBeenLastCalledWith({ chainId: sepoliaEth.chainId }), + ) + await waitFor(() => expect(result.current.balance).toBe(7n)) + }) + + it('does not fetch native balance when wallet is disconnected', () => { + mockUseAccount.mockReturnValue({ address: undefined }) + + const { result } = renderHook(() => useTokenInput(sepoliaEth), { wrapper }) + + expect(result.current.balance).toBeUndefined() + expect(result.current.balanceError).toBeNull() + expect(result.current.isLoadingBalance).toBe(false) + expect(mockGetBalance).not.toHaveBeenCalled() + }) + + it('exposes priceUSD for the selected token from useTokens', async () => { + mockUseTokens.mockReturnValue({ + tokensByChainId: { + 1: [{ ...mainnetUsdc, extensions: { priceUSD: '1.00' } }], + }, + isLoadingBalances: false, + isLoadingPrices: false, + tokens: [], + }) + + const { result } = renderHook(() => useTokenInput(mainnetUsdc), { wrapper }) + + await waitFor(() => expect(result.current.priceUSD).toBe('1.00')) + }) + + it('exposes isLoadingPrice as true while useTokens is loading', () => { + mockUseTokens.mockReturnValue({ + tokensByChainId: {}, + isLoadingBalances: true, + isLoadingPrices: true, + tokens: [], + }) + + const { result } = renderHook(() => useTokenInput(mainnetUsdc), { wrapper }) + + expect(result.current.isLoadingPrice).toBe(true) + }) + + it('updates priceUSD when a different token is selected', async () => { + const mainnetEth: Token = { + address: zeroAddress, + chainId: 1, + decimals: 18, + name: 'Ether', + symbol: 'ETH', + } + mockUseTokens.mockReturnValue({ + tokensByChainId: { + 1: [{ ...mainnetEth, extensions: { priceUSD: '3000.00' } }], + }, + isLoadingBalances: false, + isLoadingPrices: false, + tokens: [], + }) + mockGetBalance.mockResolvedValue(1000000000000000000n) + + const { result } = renderHook(() => useTokenInput(mainnetUsdc), { wrapper }) + + act(() => { + result.current.setTokenSelected(mainnetEth) + }) + + await waitFor(() => expect(result.current.priceUSD).toBe('3000.00')) + }) +}) diff --git a/src/components/sharedComponents/TokenInput/useTokenInput.tsx b/src/components/sharedComponents/TokenInput/useTokenInput.tsx index 12b94dd2..1c273ebf 100644 --- a/src/components/sharedComponents/TokenInput/useTokenInput.tsx +++ b/src/components/sharedComponents/TokenInput/useTokenInput.tsx @@ -1,10 +1,11 @@ -import { useErc20Balance } from '@/src/hooks/useErc20Balance' -import type { Token } from '@/src/types/token' -import { isNativeToken } from '@/src/utils/address' import { useQuery } from '@tanstack/react-query' import { useEffect, useState } from 'react' import { getAddress } from 'viem' import { useAccount, usePublicClient } from 'wagmi' +import { useErc20Balance } from '@/src/hooks/useErc20Balance' +import { useTokens } from '@/src/hooks/useTokens' +import type { Token } from '@/src/types/token' +import { isNativeToken } from '@/src/utils/address' export type UseTokenInputReturnType = ReturnType<typeof useTokenInput> @@ -25,6 +26,8 @@ export type UseTokenInputReturnType = ReturnType<typeof useTokenInput> * @returns {bigint} returns.balance - Current token balance (ERC20 or native) * @returns {Error|null} returns.balanceError - Error from balance fetching * @returns {boolean} returns.isLoadingBalance - Loading state for balance + * @returns {string|undefined} returns.priceUSD - USD price of the selected token (from useTokens) + * @returns {boolean} returns.isLoadingPrice - Loading state for the selected token's USD price * @returns {Token|undefined} returns.selectedToken - Currently selected token * @returns {function} returns.setTokenSelected - Function to update selected token * @@ -49,12 +52,22 @@ export function useTokenInput(token?: Token) { }, [token]) const { address: userWallet } = useAccount() + const { tokensByChainId, isLoadingPrices: isLoadingPrice } = useTokens({ + chainId: selectedToken?.chainId, + withBalance: true, + }) + const priceUSD = selectedToken + ? (tokensByChainId[selectedToken.chainId]?.find( + (t) => t.address.toLowerCase() === selectedToken.address.toLowerCase(), + )?.extensions?.priceUSD as string | undefined) + : undefined + const { balance, balanceError, isLoadingBalance } = useErc20Balance({ address: userWallet ? getAddress(userWallet) : undefined, token: selectedToken, }) - const publicClient = usePublicClient({ chainId: token?.chainId }) + const publicClient = usePublicClient({ chainId: selectedToken?.chainId }) const isNative = selectedToken?.address ? isNativeToken(selectedToken.address) : false const { @@ -64,7 +77,7 @@ export function useTokenInput(token?: Token) { } = useQuery({ queryKey: ['nativeBalance', selectedToken?.address, selectedToken?.chainId, userWallet], queryFn: () => publicClient?.getBalance({ address: getAddress(userWallet ?? '') }), - enabled: isNative, + enabled: isNative && !!userWallet, }) return { @@ -75,6 +88,8 @@ export function useTokenInput(token?: Token) { balance: isNative ? nativeBalance : balance, balanceError: isNative ? nativeBalanceError : balanceError, isLoadingBalance: isNative ? isLoadingNativeBalance : isLoadingBalance, + isLoadingPrice, + priceUSD, selectedToken, setTokenSelected, } diff --git a/src/components/sharedComponents/TokenLogo.test.tsx b/src/components/sharedComponents/TokenLogo/TokenLogo.test.tsx similarity index 57% rename from src/components/sharedComponents/TokenLogo.test.tsx rename to src/components/sharedComponents/TokenLogo/TokenLogo.test.tsx index b71166ed..6a8f12a5 100644 --- a/src/components/sharedComponents/TokenLogo.test.tsx +++ b/src/components/sharedComponents/TokenLogo/TokenLogo.test.tsx @@ -1,10 +1,10 @@ -import type { Token } from '@/src/types/token' -import { ChakraProvider, createSystem, defaultConfig } from '@chakra-ui/react' +import { ChakraProvider } from '@chakra-ui/react' import { fireEvent, render, screen } from '@testing-library/react' +import { zeroAddress } from 'viem' import { describe, expect, it } from 'vitest' -import TokenLogo from './TokenLogo' - -const system = createSystem(defaultConfig) +import { system } from '@/src/components/ui/provider' +import type { Token } from '@/src/types/token' +import TokenLogo from '.' const mockToken: Token = { address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', @@ -72,4 +72,46 @@ describe('TokenLogo', () => { const img = screen.getByRole('img') expect(img.getAttribute('src')).toBe('https://ipfs.io/ipfs/QmHash123') }) + + it('renders the chain icon (not the img or placeholder) for a native token on a mapped chain', () => { + const nativeEthToken: Token = { + address: zeroAddress, + chainId: 1, + decimals: 18, + name: 'Ether', + symbol: 'ETH', + } + const { container } = renderTokenLogo(nativeEthToken) + expect(screen.queryByRole('img')).toBeNull() + expect(screen.queryByText('E')).toBeNull() + expect(container.querySelector('svg')).not.toBeNull() + }) + + it('renders the chain icon for the native POL on Polygon (chainId 137)', () => { + const nativePolToken: Token = { + address: zeroAddress, + chainId: 137, + decimals: 18, + name: 'POL', + symbol: 'POL', + } + const { container } = renderTokenLogo(nativePolToken) + expect(screen.queryByRole('img')).toBeNull() + expect(screen.queryByText('P')).toBeNull() + expect(container.querySelector('svg')).not.toBeNull() + }) + + it('falls back to placeholder for a native token on an unmapped chain', () => { + const nativeUnknownToken: Token = { + address: zeroAddress, + chainId: 999999, + decimals: 18, + name: 'Unknown', + symbol: 'XXX', + } + const { container } = renderTokenLogo(nativeUnknownToken) + expect(screen.queryByRole('img')).toBeNull() + expect(container.querySelector('svg')).toBeNull() + expect(screen.getByText('X')).toBeDefined() + }) }) diff --git a/src/components/sharedComponents/TokenLogo.tsx b/src/components/sharedComponents/TokenLogo/index.tsx similarity index 53% rename from src/components/sharedComponents/TokenLogo.tsx rename to src/components/sharedComponents/TokenLogo/index.tsx index 87627cdf..0fbcfcdd 100644 --- a/src/components/sharedComponents/TokenLogo.tsx +++ b/src/components/sharedComponents/TokenLogo/index.tsx @@ -1,46 +1,41 @@ -import type { Token } from '@/src/types/token' import { Flex } from '@chakra-ui/react' -import { type ComponentProps, type FC, useCallback, useEffect, useState } from 'react' +import { type ComponentProps, type FC, useEffect, useMemo, useState } from 'react' + +import { nativeTokenIcons } from '@/src/components/sharedComponents/TokenLogo/nativeTokenIcons' +import type { ChainsIds } from '@/src/lib/networks.config' +import type { Token } from '@/src/types/token' +import { isNativeToken } from '@/src/utils/address' interface PlaceholderProps extends ComponentProps<'div'> { size: number symbol: string } -const Placeholder: FC<PlaceholderProps> = ({ size, symbol, ...restProps }) => { - const [backgroundColor, setBackgroundColor] = useState<string>('') - - const generateHexColor = useCallback((symbol: string): string => { - // Convert symbol to a hash number - let hash = 0 - for (let i = 0; i < symbol.length; i++) { - hash = symbol.charCodeAt(i) + ((hash << 5) - hash) - } - - // Convert hash to a hexadecimal string and ensure it is 6 characters long - const baseColor = - ((hash >> 24) & 0xff).toString(16).padStart(2, '0') + - ((hash >> 16) & 0xff).toString(16).padStart(2, '0') + - ((hash >> 8) & 0xff).toString(16).padStart(2, '0') - - // Ensure the baseColor is dark-ish by making sure each component is less than 196 - const r = Number.parseInt(baseColor.slice(0, 2), 16) % 196 - const g = Number.parseInt(baseColor.slice(2, 4), 16) % 196 - const b = Number.parseInt(baseColor.slice(4, 6), 16) % 196 - - // Convert back to hex string and pad with leading 6s if necessary and also - // because I love Satan - const color = - r.toString(16).padStart(2, '6') + - g.toString(16).padStart(2, '6') + - b.toString(16).padStart(2, '6') - - return `#${color}` - }, []) +const generateHexColor = (symbol: string): string => { + let hash = 0 + for (let i = 0; i < symbol.length; i++) { + hash = symbol.charCodeAt(i) + ((hash << 5) - hash) + } - useEffect(() => { - setBackgroundColor(generateHexColor(symbol)) - }, [symbol, generateHexColor]) + const baseColor = + ((hash >> 24) & 0xff).toString(16).padStart(2, '0') + + ((hash >> 16) & 0xff).toString(16).padStart(2, '0') + + ((hash >> 8) & 0xff).toString(16).padStart(2, '0') + + const r = Number.parseInt(baseColor.slice(0, 2), 16) % 196 + const g = Number.parseInt(baseColor.slice(2, 4), 16) % 196 + const b = Number.parseInt(baseColor.slice(4, 6), 16) % 196 + + const color = + r.toString(16).padStart(2, '0') + + g.toString(16).padStart(2, '0') + + b.toString(16).padStart(2, '0') + + return `#${color}` +} + +const Placeholder: FC<PlaceholderProps> = ({ size, symbol, ...restProps }) => { + const backgroundColor = useMemo(() => generateHexColor(symbol), [symbol]) return ( <Flex @@ -75,10 +70,15 @@ interface TokenLogoProps { /** * TokenLogo component, displays a token logo based on the provided token object. * + * Native tokens (detected via `isNativeToken(token.address)`, a case-insensitive + * match against `env.PUBLIC_NATIVE_TOKEN_ADDRESS`) render the chain-specific icon + * from `@web3icons/react` when the chain is mapped in `nativeTokenIcons`. Otherwise + * the component renders `logoURI` as an image, falling back to the colored-letter + * Placeholder on load failure or missing URI. + * * @param {TokenLogoProps} props - TokenLogo component props. * @param {Token} props.token - The token object to display the logo for. * @param {number} [props.size=24] - The size of the logo in pixels. - * @param {ComponentProps<'img'>} [props.restProps] - Additional props for the img element. * * @example * ```tsx @@ -97,6 +97,19 @@ const TokenLogo: FC<TokenLogoProps> = ({ size = 24, token }) => { setHasError(false) }, [logoURI]) + const NativeIcon = isNativeToken(token.address) + ? nativeTokenIcons[token.chainId as ChainsIds] + : undefined + + if (NativeIcon) { + return ( + <NativeIcon + size={size} + variant="background" + /> + ) + } + return logoURI && !hasError ? ( <img alt={token.name} diff --git a/src/components/sharedComponents/TokenLogo/nativeTokenIcons.tsx b/src/components/sharedComponents/TokenLogo/nativeTokenIcons.tsx new file mode 100644 index 00000000..56c0849a --- /dev/null +++ b/src/components/sharedComponents/TokenLogo/nativeTokenIcons.tsx @@ -0,0 +1,20 @@ +import type { IconComponent } from '@web3icons/react' +import { + NetworkArbitrumOne, + NetworkEthereum, + NetworkOptimism, + NetworkOptimismSepolia, + NetworkPolygon, + NetworkSepolia, +} from '@web3icons/react' + +import type { ChainsIds } from '@/src/lib/networks.config' + +export const nativeTokenIcons: Partial<Record<ChainsIds, IconComponent>> = { + 1: NetworkEthereum, + 10: NetworkOptimism, + 137: NetworkPolygon, + 42161: NetworkArbitrumOne, + 11155111: NetworkSepolia, + 11155420: NetworkOptimismSepolia, +} diff --git a/src/components/sharedComponents/TokenSelect/List/AddERC20TokenButton.tsx b/src/components/sharedComponents/TokenSelect/List/AddERC20TokenButton.tsx index 836a2975..f1501a15 100644 --- a/src/components/sharedComponents/TokenSelect/List/AddERC20TokenButton.tsx +++ b/src/components/sharedComponents/TokenSelect/List/AddERC20TokenButton.tsx @@ -1,8 +1,8 @@ +import { chakra } from '@chakra-ui/react' +import type { ComponentPropsWithoutRef, FC, MouseEventHandler } from 'react' import { useWeb3Status } from '@/src/hooks/useWeb3Status' import type { Token } from '@/src/types/token' import { isNativeToken } from '@/src/utils/address' -import { chakra } from '@chakra-ui/react' -import type { ComponentPropsWithoutRef, FC, MouseEventHandler } from 'react' interface AddERC20TokenButtonProps extends ComponentPropsWithoutRef<'button'> { $token: Token diff --git a/src/components/sharedComponents/TokenSelect/List/BalanceLoading.tsx b/src/components/sharedComponents/TokenSelect/List/BalanceLoading.tsx new file mode 100644 index 00000000..86688e92 --- /dev/null +++ b/src/components/sharedComponents/TokenSelect/List/BalanceLoading.tsx @@ -0,0 +1,26 @@ +import { Flex, type FlexProps, Skeleton } from '@chakra-ui/react' +import type { FC } from 'react' + +/** + * Skeleton placeholder for token balance and USD value, shown while data is loading. + */ +const BalanceLoading: FC<FlexProps> = ({ ...restProps }) => ( + <Flex + alignItems="flex-end" + display="flex" + flexDirection="column" + rowGap={1} + {...restProps} + > + <Skeleton + height="19px" + width="50px" + /> + <Skeleton + height="14px" + width="50px" + /> + </Flex> +) + +export default BalanceLoading diff --git a/src/components/sharedComponents/TokenSelect/List/Row.tsx b/src/components/sharedComponents/TokenSelect/List/Row.tsx index 88b6a2a9..ba4aeef4 100644 --- a/src/components/sharedComponents/TokenSelect/List/Row.tsx +++ b/src/components/sharedComponents/TokenSelect/List/Row.tsx @@ -1,9 +1,10 @@ +import { Box, Flex, type FlexProps } from '@chakra-ui/react' +import type { FC } from 'react' import TokenLogo from '@/src/components/sharedComponents/TokenLogo' import AddERC20TokenButton from '@/src/components/sharedComponents/TokenSelect/List/AddERC20TokenButton' +import BalanceLoading from '@/src/components/sharedComponents/TokenSelect/List/BalanceLoading' import TokenBalance from '@/src/components/sharedComponents/TokenSelect/List/TokenBalance' import type { Token } from '@/src/types/token' -import { Box, Flex, type FlexProps, Skeleton } from '@chakra-ui/react' -import type { FC } from 'react' const Icon: FC<{ size: number } & FlexProps> = ({ size, children, ...restProps }) => ( <Flex @@ -20,25 +21,6 @@ const Icon: FC<{ size: number } & FlexProps> = ({ size, children, ...restProps } </Flex> ) -const BalanceLoading: FC<FlexProps> = ({ ...restProps }) => ( - <Flex - alignItems="flex-end" - display="flex" - flexDirection="column" - rowGap={1} - {...restProps} - > - <Skeleton - height="19px" - width="50px" - /> - <Skeleton - height="14px" - width="50px" - /> - </Flex> -) - interface TokenSelectRowProps extends Omit<FlexProps, 'onClick'> { iconSize: number isLoadingBalances?: boolean diff --git a/src/components/sharedComponents/TokenSelect/List/TokenBalance.test.tsx b/src/components/sharedComponents/TokenSelect/List/TokenBalance.test.tsx new file mode 100644 index 00000000..a8376299 --- /dev/null +++ b/src/components/sharedComponents/TokenSelect/List/TokenBalance.test.tsx @@ -0,0 +1,167 @@ +import { QueryClient, QueryClientProvider } from '@tanstack/react-query' +import { screen } from '@testing-library/react' +import { beforeEach, describe, expect, it, vi } from 'vitest' +import { useBalance } from 'wagmi' +import { useErc20Balance } from '@/src/hooks/useErc20Balance' +import { useWeb3Status } from '@/src/hooks/useWeb3Status' +import { createMockWeb3Status, renderWithProviders } from '@/src/test-utils' +import TokenBalance from './TokenBalance' + +const mockAddress = '0x1234567890123456789012345678901234567890' as const +const nativeAddress = '0x0000000000000000000000000000000000000000' + +const erc20Token = { + name: 'USD Coin', + symbol: 'USDC', + address: '0x94a9D9AC8a22534E3FaCa9F4e7F2E2cf85d5E4C8' as `0x${string}`, + decimals: 6, + chainId: 11155111, +} + +const nativeToken = { + name: 'Sepolia Ether', + symbol: 'ETH', + address: nativeAddress as `0x${string}`, + decimals: 18, + chainId: 11155111, +} + +const tokenWithExtensions = { + ...erc20Token, + extensions: { + balance: 5_000_000n, + priceUSD: '1.00', + }, +} + +vi.mock('@/src/hooks/useWeb3Status', () => ({ + useWeb3Status: vi.fn(), +})) + +vi.mock('@/src/hooks/useErc20Balance', () => ({ + useErc20Balance: vi.fn(), +})) + +vi.mock('wagmi', () => ({ + useBalance: vi.fn(), +})) + +vi.mock('@/src/env', () => ({ + env: { + PUBLIC_NATIVE_TOKEN_ADDRESS: '0x0000000000000000000000000000000000000000', + PUBLIC_APP_NAME: 'test', + }, +})) + +function renderTokenBalance(props: { + isLoading?: boolean + token: typeof erc20Token | typeof nativeToken | typeof tokenWithExtensions +}) { + const queryClient = new QueryClient({ defaultOptions: { queries: { retry: false } } }) + return renderWithProviders( + <QueryClientProvider client={queryClient}> + <TokenBalance {...props} /> + </QueryClientProvider>, + ) +} + +describe('TokenBalance', () => { + beforeEach(() => { + vi.mocked(useWeb3Status).mockReturnValue( + createMockWeb3Status({ address: mockAddress, isWalletConnected: true }) as ReturnType< + typeof useWeb3Status + >, + ) + vi.mocked(useErc20Balance).mockReturnValue({ + balance: 0n, + balanceError: null, + isLoadingBalance: false, + }) + vi.mocked(useBalance).mockReturnValue({ + data: undefined, + isLoading: false, + } as ReturnType<typeof useBalance>) + }) + + it('suspends the component while isLoading is true, showing no balance or price text', () => { + renderTokenBalance({ isLoading: true, token: erc20Token }) + // DefaultFallback spinner renders; no component output visible. + expect(screen.queryByText('N/A')).toBeNull() + expect(screen.queryByText('$')).toBeNull() + }) + + it('renders LI.FI balance and USD value when extensions are present', () => { + renderTokenBalance({ isLoading: false, token: tokenWithExtensions }) + // balance: 5_000_000 / 10^6 = 5 (viem trims trailing zeros) + expect(screen.getByText('5')).toBeDefined() + expect(screen.getByText('$ 5.00')).toBeDefined() + }) + + it('shows two loading skeletons while on-chain ERC-20 fetch is in flight', () => { + vi.mocked(useErc20Balance).mockReturnValue({ + balance: undefined, + balanceError: null, + isLoadingBalance: true, + }) + renderTokenBalance({ isLoading: false, token: erc20Token }) + // BalanceLoading renders two skeletons; no balance text or N/A visible yet. + expect(screen.queryByText('0')).toBeNull() + expect(screen.queryByText('N/A')).toBeNull() + }) + + it('renders on-chain ERC-20 balance and N/A when no extensions', () => { + vi.mocked(useErc20Balance).mockReturnValue({ + balance: 2_500_000n, + balanceError: null, + isLoadingBalance: false, + }) + renderTokenBalance({ isLoading: false, token: erc20Token }) + // balance: 2_500_000 / 10^6 = 2.5 + expect(screen.getByText('2.5')).toBeDefined() + expect(screen.getByText('N/A')).toBeDefined() + }) + + it('renders on-chain native balance and N/A when no extensions', () => { + vi.mocked(useBalance).mockReturnValue({ + data: { value: 1_000_000_000_000_000_000n, decimals: 18, formatted: '1.0', symbol: 'ETH' }, + isLoading: false, + } as ReturnType<typeof useBalance>) + renderTokenBalance({ isLoading: false, token: nativeToken }) + // balance: 1e18 / 10^18 = 1 (viem trims trailing zeros) + expect(screen.getByText('1')).toBeDefined() + expect(screen.getByText('N/A')).toBeDefined() + }) + + it('shows zero balance and N/A when ERC-20 fetch returns an error', () => { + vi.mocked(useErc20Balance).mockReturnValue({ + balance: undefined, + balanceError: new Error('fetch failed'), + isLoadingBalance: false, + }) + renderTokenBalance({ isLoading: false, token: erc20Token }) + expect(screen.getByText('0')).toBeDefined() + expect(screen.getByText('N/A')).toBeDefined() + }) + + it('shows zero balance and N/A when native balance fetch returns an error', () => { + // useBalance returns undefined data on error; fallback resolves to 0n. + vi.mocked(useBalance).mockReturnValue({ + data: undefined, + isLoading: false, + } as ReturnType<typeof useBalance>) + renderTokenBalance({ isLoading: false, token: nativeToken }) + expect(screen.getByText('0')).toBeDefined() + expect(screen.getByText('N/A')).toBeDefined() + }) + + it('shows zero balance and N/A when no wallet is connected', () => { + vi.mocked(useWeb3Status).mockReturnValue( + createMockWeb3Status({ address: undefined, isWalletConnected: false }) as ReturnType< + typeof useWeb3Status + >, + ) + renderTokenBalance({ isLoading: false, token: erc20Token }) + expect(screen.getByText('0')).toBeDefined() + expect(screen.getByText('N/A')).toBeDefined() + }) +}) diff --git a/src/components/sharedComponents/TokenSelect/List/TokenBalance.tsx b/src/components/sharedComponents/TokenSelect/List/TokenBalance.tsx index 59a539b9..ee960d00 100644 --- a/src/components/sharedComponents/TokenSelect/List/TokenBalance.tsx +++ b/src/components/sharedComponents/TokenSelect/List/TokenBalance.tsx @@ -1,69 +1,105 @@ -import type { Token } from '@/src/types/token' -import { withSuspenseAndRetry } from '@/src/utils/suspenseWrapper' import { Box, Flex } from '@chakra-ui/react' import { formatUnits } from 'viem' +import { useBalance } from 'wagmi' +import { NO_PRICE_DATA_LABEL } from '@/src/constants/common' +import { useErc20Balance } from '@/src/hooks/useErc20Balance' +import { useWeb3Status } from '@/src/hooks/useWeb3Status' +import type { Token } from '@/src/types/token' +import { isNativeToken } from '@/src/utils/address' +import { withSuspenseAndRetry } from '@/src/utils/suspenseWrapper' +import BalanceLoading from './BalanceLoading' interface TokenBalanceProps { isLoading?: boolean token: Token } +const balanceBoxProps = { + color: 'var(--row-token-balance-color)', + fontSize: '16px', + fontWeight: '400', + lineHeight: '1.2', + _groupHover: { color: 'var(--row-token-balance-color-hover, var(--row-token-balance-color))' }, +} as const + +const valueBoxProps = { + color: 'var(--row-token-value-color)', + fontSize: '12px', + fontWeight: '400', + lineHeight: '1.2', + _groupHover: { color: 'var(--row-token-value-color-hover, var(--row-token-value-color))' }, +} as const + +const flexProps = { + alignItems: 'flex-end', + display: 'flex', + flexDirection: 'column', + rowGap: 1, +} as const + /** - * Renders the token balance in the token list row. + * Renders the token balance and USD value in a token list row. * - * @param {object} props - The component props. - * @param {boolean} props.isLoading - Indicates if the token balance is currently being loaded. - * @param {Token} props.token - The token object containing the amount, decimals, and price in USD. + * When LI.FI price/balance data is available (`token.extensions`), it displays + * the enriched balance and computed USD value. On chains LI.FI does not support + * (e.g. Sepolia), it falls back to on-chain balance via wagmi and renders "N/A" + * for the USD value. * - * @throws {Promise} If the token balance is still loading or if the token does not have balance information. - * @returns {JSX.Element} The rendered token balance component. + * @param {object} props + * @param {boolean} props.isLoading - True while the LI.FI price/balance fetch is in flight. + * @param {Token} props.token - The token to display. * - * @example - * ```tsx - * <TokenBalance isLoading={false} token={token} /> - * ``` + * @throws {Promise} While loading (triggers Suspense skeleton). */ const TokenBalance = withSuspenseAndRetry<TokenBalanceProps>(({ isLoading, token }) => { - const tokenHasBalanceInfo = !!token.extensions + const { address } = useWeb3Status() + const isNative = isNativeToken(token.address) + const hasExtensions = !!token.extensions - if (isLoading || !tokenHasBalanceInfo) { + const { data: nativeBalanceData, isLoading: isLoadingNative } = useBalance({ + address, + chainId: token.chainId, + query: { enabled: !!address && isNative && !hasExtensions }, + }) + + const { balance: erc20Balance, isLoadingBalance: isLoadingErc20 } = useErc20Balance({ + address: !isNative && !hasExtensions ? address : undefined, + token: !isNative && !hasExtensions ? token : undefined, + }) + + if (isLoading) { throw Promise.reject() } - const balance = formatUnits((token.extensions?.balance ?? 0n) as bigint, token.decimals) - const value = ( - Number.parseFloat((token.extensions?.priceUSD ?? '0') as string) * Number.parseFloat(balance) - ).toFixed(2) + if (hasExtensions) { + const balance = formatUnits((token.extensions?.balance ?? 0n) as bigint, token.decimals) + const priceUSD = token.extensions?.priceUSD as string | undefined + const usdLabel = + priceUSD !== undefined + ? `$ ${(Number.parseFloat(priceUSD) * Number.parseFloat(balance)).toFixed(2)}` + : NO_PRICE_DATA_LABEL + + return ( + <Flex {...flexProps}> + <Box {...balanceBoxProps}>{balance}</Box> + <Box {...valueBoxProps}>{usdLabel}</Box> + </Flex> + ) + } + + const isLoadingFallback = isNative ? isLoadingNative : isLoadingErc20 + if (isLoadingFallback) { + return <BalanceLoading /> + } + + const fallbackBalance = isNative + ? formatUnits(nativeBalanceData?.value ?? 0n, token.decimals) + : formatUnits(erc20Balance ?? 0n, token.decimals) return ( - <Flex - alignItems="flex-end" - display="flex" - flexDirection="column" - rowGap={1} - > - <Box - color="var(--row-token-balance-color)" - fontSize="16px" - fontWeight="400" - lineHeight="1.2" - _groupHover={{ - color: 'var(--row-token-balance-color-hover, var(--row-token-balance-color)', - }} - > - {balance} - </Box> - <Box - color="var(--row-token-value-color)" - fontSize="12px" - fontWeight="400" - lineHeight="1.2" - _groupHover={{ - color: 'var(--row-token-value-color-hover, var(--row-token-value-color)', - }} - > - $ {value} - </Box> + <Flex {...flexProps}> + <Box {...balanceBoxProps}>{fallbackBalance}</Box> + <Box {...valueBoxProps}>{NO_PRICE_DATA_LABEL}</Box> </Flex> ) }) diff --git a/src/components/sharedComponents/TokenSelect/List/index.tsx b/src/components/sharedComponents/TokenSelect/List/index.tsx index 8a634367..5aea0c56 100644 --- a/src/components/sharedComponents/TokenSelect/List/index.tsx +++ b/src/components/sharedComponents/TokenSelect/List/index.tsx @@ -1,8 +1,8 @@ +import { Flex, type FlexProps } from '@chakra-ui/react' +import type { FC } from 'react' import Row from '@/src/components/sharedComponents/TokenSelect/List/Row' import VirtualizedList from '@/src/components/sharedComponents/TokenSelect/List/VirtualizedList' import type { Token, Tokens } from '@/src/types/token' -import { Flex, type FlexProps } from '@chakra-ui/react' -import type { FC } from 'react' interface TokenSelectListProps extends FlexProps { containerHeight: number diff --git a/src/components/sharedComponents/TokenSelect/Search/index.tsx b/src/components/sharedComponents/TokenSelect/Search/index.tsx index c04c6686..ea841685 100644 --- a/src/components/sharedComponents/TokenSelect/Search/index.tsx +++ b/src/components/sharedComponents/TokenSelect/Search/index.tsx @@ -1,9 +1,9 @@ +import { Box, Flex, type FlexProps, Menu } from '@chakra-ui/react' +import type { Dispatch, FC, SetStateAction } from 'react' import SearchInput from '@/src/components/sharedComponents/TokenSelect/Search/Input' import NetworkButton from '@/src/components/sharedComponents/TokenSelect/Search/NetworkButton' import type { Networks } from '@/src/components/sharedComponents/TokenSelect/types' import { MenuContent, MenuItem } from '@/src/components/sharedComponents/ui/Menu' -import { Box, Flex, type FlexProps, Menu } from '@chakra-ui/react' -import type { Dispatch, FC, SetStateAction } from 'react' interface SearchProps extends FlexProps { currentNetworkId: number diff --git a/src/components/sharedComponents/TokenSelect/TopTokens/Item.tsx b/src/components/sharedComponents/TokenSelect/TopTokens/Item.tsx index a7b271ab..cba34232 100644 --- a/src/components/sharedComponents/TokenSelect/TopTokens/Item.tsx +++ b/src/components/sharedComponents/TokenSelect/TopTokens/Item.tsx @@ -1,7 +1,7 @@ +import { Box, chakra, Flex } from '@chakra-ui/react' +import type { ComponentPropsWithoutRef, FC } from 'react' import TokenLogo from '@/src/components/sharedComponents/TokenLogo' import type { Token } from '@/src/types/token' -import { Box, Flex, chakra } from '@chakra-ui/react' -import type { ComponentPropsWithoutRef, FC } from 'react' const ICON_SIZE = 24 diff --git a/src/components/sharedComponents/TokenSelect/TopTokens/index.tsx b/src/components/sharedComponents/TokenSelect/TopTokens/index.tsx index 41478d02..e8ab61a1 100644 --- a/src/components/sharedComponents/TokenSelect/TopTokens/index.tsx +++ b/src/components/sharedComponents/TokenSelect/TopTokens/index.tsx @@ -1,8 +1,8 @@ +import { Flex, type FlexProps } from '@chakra-ui/react' +import type { FC } from 'react' import Item from '@/src/components/sharedComponents/TokenSelect/TopTokens/Item' import type { Token, Tokens } from '@/src/types/token' import { isNativeToken } from '@/src/utils/address' -import { Flex, type FlexProps } from '@chakra-ui/react' -import type { FC } from 'react' interface TopTokensProps extends FlexProps { onTokenSelect: (token: Token | undefined) => void @@ -44,7 +44,7 @@ const TopTokens: FC<TopTokensProps> = ({ onTokenSelect, tokens, ...restProps }) <Item key={`token_${token?.address}`} onClick={() => onTokenSelect(token)} - // biome-ignore lint/style/noNonNullAssertion: <explanation> + // biome-ignore lint/style/noNonNullAssertion: token is defined when rendered via filter above token={token!} /> ))} diff --git a/src/components/sharedComponents/TokenSelect/index.tsx b/src/components/sharedComponents/TokenSelect/index.tsx index f8ac25f3..28d0f51e 100644 --- a/src/components/sharedComponents/TokenSelect/index.tsx +++ b/src/components/sharedComponents/TokenSelect/index.tsx @@ -1,3 +1,6 @@ +import { Flex, type FlexProps } from '@chakra-ui/react' +import { useEffect, useRef, useState } from 'react' +import type { Chain } from 'viem/chains' import List from '@/src/components/sharedComponents/TokenSelect/List' import Search from '@/src/components/sharedComponents/TokenSelect/Search' import TopTokens from '@/src/components/sharedComponents/TokenSelect/TopTokens' @@ -9,9 +12,6 @@ import { useWeb3Status } from '@/src/hooks/useWeb3Status' import { chains } from '@/src/lib/networks.config' import type { Token } from '@/src/types/token' import { withSuspenseAndRetry } from '@/src/utils/suspenseWrapper' -import { Flex, type FlexProps } from '@chakra-ui/react' -import { useEffect, useRef, useState } from 'react' -import type { Chain } from 'viem/chains' import styles from './styles' export interface TokenSelectProps { @@ -25,6 +25,7 @@ export interface TokenSelectProps { showAddTokenButton?: boolean showTopTokens?: boolean showBalance?: boolean + sortByBalance?: boolean } /** @ignore */ @@ -42,8 +43,9 @@ type Props = FlexProps & TokenSelectProps * @param {number} [props.iconSize=32] - Optional size of the token icon in the list. Default is 32. * @param {number} [props.itemHeight=64] - Optional height of each item in the list. Default is 64. * @param {boolean} [props.showAddTokenButton=false] - Optional flag to allow adding a token. Default is false. - * @param {boolean} [props.showBalance=false] - Optional flag to show the token balance in the list. Default is false. + * @param {boolean} [props.showBalance=false] - Optional flag to show the token balance column in each row. Default is false. * @param {boolean} [props.showTopTokens=false] - Optional flag to show the top tokens in the list. Default is false. + * @param {boolean} [props.sortByBalance] - Sort tokens with a positive balance to the top, ordered by USD value descending. Defaults to true when a wallet is connected. */ const TokenSelect = withSuspenseAndRetry<Props>( ({ @@ -59,9 +61,10 @@ const TokenSelect = withSuspenseAndRetry<Props>( showAddTokenButton = false, showBalance = false, showTopTokens = false, + sortByBalance, ...restProps }) => { - const { appChainId, walletChainId } = useWeb3Status() + const { appChainId, isWalletConnected, walletChainId } = useWeb3Status() const [chainId, setChainId] = useState<Chain['id']>(() => getValidChainId({ @@ -122,9 +125,12 @@ const TokenSelect = withSuspenseAndRetry<Props>( previousDepsRef.current = [appChainId, currentNetworkId, walletChainId] }, [appChainId, currentNetworkId, networks, walletChainId]) + const resolvedSortByBalance = sortByBalance ?? isWalletConnected + const { isLoadingBalances, tokensByChainId } = useTokens({ chainId, - withBalance: showBalance, + withBalance: showBalance || resolvedSortByBalance, + sortByBalance: resolvedSortByBalance, }) const { searchResult, searchTerm, setSearchTerm } = useTokenSearch( @@ -152,6 +158,7 @@ const TokenSelect = withSuspenseAndRetry<Props>( overflow="hidden" {...restProps} > + {children} <Search currentNetworkId={chainId} disabled={!tokensByChainId[chainId]?.length} @@ -176,7 +183,6 @@ const TokenSelect = withSuspenseAndRetry<Props>( showBalance={showBalance} tokenList={searchResult} /> - {children} </Flex> ) }, diff --git a/src/components/sharedComponents/TransactionButton.test.tsx b/src/components/sharedComponents/TransactionButton.test.tsx index 74e4686d..c733d990 100644 --- a/src/components/sharedComponents/TransactionButton.test.tsx +++ b/src/components/sharedComponents/TransactionButton.test.tsx @@ -1,146 +1,175 @@ import { ChakraProvider, createSystem, defaultConfig } from '@chakra-ui/react' -import { fireEvent, render, screen, waitFor } from '@testing-library/react' -import { describe, expect, it, vi } from 'vitest' +import { render, screen } from '@testing-library/react' +import { createElement, type ReactNode } from 'react' +import { beforeEach, describe, expect, it, vi } from 'vitest' +import type { Web3Status } from '@/src/hooks/useWeb3Status' import TransactionButton from './TransactionButton' -const system = createSystem(defaultConfig) +const mockSwitchChain = vi.fn() +const mockWatchTx = vi.fn() +const mockTransaction = vi.fn(() => Promise.resolve('0xabc' as `0x${string}`)) + +vi.mock('@/src/hooks/useWalletStatus', () => ({ + useWalletStatus: vi.fn(() => ({ + isReady: false, + needsConnect: true, + needsChainSwitch: false, + targetChain: { id: 1, name: 'Ethereum' }, + targetChainId: 1, + switchChain: mockSwitchChain, + })), +})) -vi.mock('@/src/hooks/useWeb3Status', () => ({ - useWeb3Status: vi.fn(), +vi.mock('@/src/providers/Web3Provider', () => ({ + ConnectWalletButton: () => + createElement( + 'button', + { type: 'button', 'data-testid': 'connect-wallet-button' }, + 'Connect Wallet', + ), })) vi.mock('@/src/providers/TransactionNotificationProvider', () => ({ useTransactionNotification: vi.fn(() => ({ - watchTx: vi.fn(), - watchHash: vi.fn(), - watchSignature: vi.fn(), + watchTx: mockWatchTx, })), })) vi.mock('wagmi', () => ({ - useWaitForTransactionReceipt: vi.fn(() => ({ data: undefined })), + useWaitForTransactionReceipt: vi.fn(() => ({ + data: undefined, + })), })) -vi.mock('@/src/providers/Web3Provider', () => ({ - ConnectWalletButton: () => <button type="button">Connect Wallet</button>, -})) +const { useWalletStatus } = await import('@/src/hooks/useWalletStatus') +const mockedUseWalletStatus = vi.mocked(useWalletStatus) + +const mockWeb3Status = { + readOnlyClient: undefined, + appChainId: 1, + address: '0xdeadbeef', + balance: undefined, + connectingWallet: false, + switchingChain: false, + isWalletConnected: true, + walletClient: undefined, + isWalletSynced: true, + walletChainId: 1, + switchChain: vi.fn(), + disconnect: vi.fn(), +} as unknown as Web3Status -import * as useWeb3StatusModule from '@/src/hooks/useWeb3Status' -import * as wagmiModule from 'wagmi' - -// chains[0] = optimismSepolia (id: 11155420) when PUBLIC_INCLUDE_TESTNETS=true (default) -const OP_SEPOLIA_ID = 11155420 as const - -function connectedStatus() { - return { - isWalletConnected: true, - isWalletSynced: true, - walletChainId: OP_SEPOLIA_ID, - appChainId: OP_SEPOLIA_ID, - address: '0x1234567890abcdef1234567890abcdef12345678' as `0x${string}`, - balance: undefined, - connectingWallet: false, - switchingChain: false, - walletClient: undefined, - readOnlyClient: undefined, - switchChain: vi.fn(), - disconnect: vi.fn(), - } -} - -// biome-ignore lint/suspicious/noExplicitAny: test helper accepts flexible props -function renderButton(props: any = {}) { - return render( - <ChakraProvider value={system}> - <TransactionButton - transaction={() => Promise.resolve('0x1' as `0x${string}`)} - {...props} - /> - </ChakraProvider>, - ) -} +const system = createSystem(defaultConfig) + +const renderWithChakra = (ui: ReactNode) => + render(<ChakraProvider value={system}>{ui}</ChakraProvider>) describe('TransactionButton', () => { - it('renders fallback when wallet not connected', () => { - vi.mocked(useWeb3StatusModule.useWeb3Status).mockReturnValue({ - ...connectedStatus(), - isWalletConnected: false, - isWalletSynced: false, - }) - renderButton() - expect(screen.getByText('Connect Wallet')).toBeDefined() + beforeEach(() => { + vi.clearAllMocks() }) - it('renders switch chain button when wallet is on wrong chain', () => { - vi.mocked(useWeb3StatusModule.useWeb3Status).mockReturnValue({ - ...connectedStatus(), - isWalletSynced: false, - walletChainId: 1, + it('renders connect button when wallet needs connect', () => { + mockedUseWalletStatus.mockReturnValue({ + isReady: false, + needsConnect: true, + needsChainSwitch: false, + targetChain: { id: 1, name: 'Ethereum' } as ReturnType<typeof useWalletStatus>['targetChain'], + targetChainId: 1, + switchChain: mockSwitchChain, + web3Status: mockWeb3Status, }) - renderButton() - expect(screen.getByRole('button').textContent?.toLowerCase()).toContain('switch to') - }) - it('renders with default label when wallet is connected and synced', () => { - vi.mocked(useWeb3StatusModule.useWeb3Status).mockReturnValue(connectedStatus()) - vi.mocked(wagmiModule.useWaitForTransactionReceipt).mockReturnValue({ - data: undefined, - } as ReturnType<typeof wagmiModule.useWaitForTransactionReceipt>) - renderButton() - expect(screen.getByText('Send Transaction')).toBeDefined() - }) + renderWithChakra(<TransactionButton transaction={mockTransaction}>Send</TransactionButton>) - it('renders with custom children label', () => { - vi.mocked(useWeb3StatusModule.useWeb3Status).mockReturnValue(connectedStatus()) - vi.mocked(wagmiModule.useWaitForTransactionReceipt).mockReturnValue({ - data: undefined, - } as ReturnType<typeof wagmiModule.useWaitForTransactionReceipt>) - renderButton({ children: 'Deposit ETH' }) - expect(screen.getByText('Deposit ETH')).toBeDefined() + expect(screen.getByTestId('connect-wallet-button')).toBeInTheDocument() + expect(screen.queryByText('Send')).toBeNull() }) - it('shows labelSending while transaction is pending', async () => { - vi.mocked(useWeb3StatusModule.useWeb3Status).mockReturnValue(connectedStatus()) - vi.mocked(wagmiModule.useWaitForTransactionReceipt).mockReturnValue({ - data: undefined, - } as ReturnType<typeof wagmiModule.useWaitForTransactionReceipt>) - - const neverResolves = () => new Promise<`0x${string}`>(() => {}) - renderButton({ transaction: neverResolves, labelSending: 'Processing...' }) + it('renders custom fallback when provided and wallet needs connect', () => { + mockedUseWalletStatus.mockReturnValue({ + isReady: false, + needsConnect: true, + needsChainSwitch: false, + targetChain: { id: 1, name: 'Ethereum' } as ReturnType<typeof useWalletStatus>['targetChain'], + targetChainId: 1, + switchChain: mockSwitchChain, + web3Status: mockWeb3Status, + }) - expect(screen.getByRole('button').textContent).not.toContain('Processing...') + renderWithChakra( + <TransactionButton + transaction={mockTransaction} + fallback={createElement('div', { 'data-testid': 'custom-fallback' }, 'Custom')} + > + Send + </TransactionButton>, + ) - fireEvent.click(screen.getByRole('button')) + expect(screen.getByTestId('custom-fallback')).toBeInTheDocument() + expect(screen.queryByText('Send')).toBeNull() + }) - await waitFor(() => { - expect(screen.getByRole('button').textContent).toContain('Processing...') + it('renders switch chain button when wallet needs chain switch', () => { + mockedUseWalletStatus.mockReturnValue({ + isReady: false, + needsConnect: false, + needsChainSwitch: true, + targetChain: { id: 10, name: 'OP Mainnet' } as ReturnType< + typeof useWalletStatus + >['targetChain'], + targetChainId: 10, + switchChain: mockSwitchChain, + web3Status: mockWeb3Status, }) + + renderWithChakra(<TransactionButton transaction={mockTransaction}>Send</TransactionButton>) + + expect(screen.getByText(/Switch to/)).toBeInTheDocument() + expect(screen.getByText(/OP Mainnet/)).toBeInTheDocument() + expect(screen.queryByText('Send')).toBeNull() }) - it('calls onMined when receipt becomes available', async () => { - // biome-ignore lint/suspicious/noExplicitAny: mock receipt shape - const mockReceipt = { status: 'success', transactionHash: '0x1' } as any - const onMined = vi.fn() - - vi.mocked(useWeb3StatusModule.useWeb3Status).mockReturnValue(connectedStatus()) - // Only return a receipt when called with the matching hash so the mock - // doesn't fire prematurely before the transaction is submitted. - vi.mocked(wagmiModule.useWaitForTransactionReceipt).mockImplementation( - (config) => - ({ - data: config?.hash === '0x1' ? mockReceipt : undefined, - }) as ReturnType<typeof wagmiModule.useWaitForTransactionReceipt>, + it('renders custom switch chain label when provided', () => { + mockedUseWalletStatus.mockReturnValue({ + isReady: false, + needsConnect: false, + needsChainSwitch: true, + targetChain: { id: 10, name: 'OP Mainnet' } as ReturnType< + typeof useWalletStatus + >['targetChain'], + targetChainId: 10, + switchChain: mockSwitchChain, + web3Status: mockWeb3Status, + }) + + renderWithChakra( + <TransactionButton + transaction={mockTransaction} + switchChainLabel="Change to" + > + Send + </TransactionButton>, ) - renderButton({ - transaction: () => Promise.resolve('0x1' as `0x${string}`), - onMined, + expect(screen.getByText(/Change to/)).toBeInTheDocument() + expect(screen.getByText(/OP Mainnet/)).toBeInTheDocument() + }) + + it('renders transaction button when wallet is ready', () => { + mockedUseWalletStatus.mockReturnValue({ + isReady: true, + needsConnect: false, + needsChainSwitch: false, + targetChain: { id: 1, name: 'Ethereum' } as ReturnType<typeof useWalletStatus>['targetChain'], + targetChainId: 1, + switchChain: mockSwitchChain, + web3Status: mockWeb3Status, }) - fireEvent.click(screen.getByRole('button')) + renderWithChakra(<TransactionButton transaction={mockTransaction}>Send ETH</TransactionButton>) - await waitFor(() => { - expect(onMined).toHaveBeenCalledWith(mockReceipt) - }) + expect(screen.getByText('Send ETH')).toBeInTheDocument() + expect(screen.queryByTestId('connect-wallet-button')).toBeNull() }) }) diff --git a/src/components/sharedComponents/TransactionButton.tsx b/src/components/sharedComponents/TransactionButton.tsx index 8710b8a3..620b0cbe 100644 --- a/src/components/sharedComponents/TransactionButton.tsx +++ b/src/components/sharedComponents/TransactionButton.tsx @@ -1,15 +1,29 @@ -import { withWalletStatusVerifier } from '@/src/components/sharedComponents/WalletStatusVerifier' -import PrimaryButton from '@/src/components/sharedComponents/ui/PrimaryButton' -import { useTransactionNotification } from '@/src/providers/TransactionNotificationProvider' import type { ButtonProps } from '@chakra-ui/react' +import type { ReactElement } from 'react' import { useEffect, useState } from 'react' import type { Hash, TransactionReceipt } from 'viem' import { useWaitForTransactionReceipt } from 'wagmi' +import PrimaryButton from '@/src/components/sharedComponents/ui/PrimaryButton' +import SwitchChainButton from '@/src/components/sharedComponents/ui/SwitchChainButton' +import { useWalletStatus } from '@/src/hooks/useWalletStatus' +import type { ChainsIds } from '@/src/lib/networks.config' +import { useTransactionNotification } from '@/src/providers/TransactionNotificationProvider' +import { ConnectWalletButton } from '@/src/providers/Web3Provider' interface TransactionButtonProps extends ButtonProps { + /** Target chain ID for wallet status verification. */ + chainId?: ChainsIds + /** Number of confirmations to wait for. Defaults to 1. */ confirmations?: number + /** Custom fallback when wallet needs connection. Defaults to ConnectWalletButton. */ + fallback?: ReactElement + /** Button label during pending transaction. Defaults to 'Sending...'. */ labelSending?: string + /** Callback function called when transaction is mined. */ onMined?: (receipt: TransactionReceipt) => void + /** Label for the switch chain button. Defaults to 'Switch to'. */ + switchChainLabel?: string + /** Function that initiates the transaction and returns a hash. */ transaction: { (): Promise<Hash> methodId?: string @@ -17,20 +31,10 @@ interface TransactionButtonProps extends ButtonProps { } /** - * TransactionButton component that handles blockchain transaction submission and monitoring. + * Self-contained transaction button with wallet verification, submission, and confirmation tracking. * - * Integrates with writeContractSync or sendTransactionSync functions to handle transaction - * submission and wait for confirmation. Displays transaction status and calls the onMined - * callback when the transaction is confirmed. - * - * @param {TransactionButtonProps} props - TransactionButton component props. - * @param {() => Promise<Hash>} props.transaction - Function that initiates the transaction. - * @param {(receipt: TransactionReceipt) => void} [props.onMined] - Callback function called when transaction is mined. - * @param {boolean} [props.disabled] - Whether the button is disabled. - * @param {string} [props.labelSending='Sending...'] - Button label during pending transaction. - * @param {number} [props.confirmations=1] - Number of confirmations to wait for. - * @param {ReactNode} [props.children='Send Transaction'] - Button content. - * @param {ButtonProps} props.restProps - Additional props inherited from Chakra UI ButtonProps. + * Handles wallet connection status internally — shows a connect button if not connected, + * a switch chain button if on the wrong chain, or the transaction button when ready. * * @example * ```tsx @@ -44,60 +48,76 @@ interface TransactionButtonProps extends ButtonProps { * </TransactionButton> * ``` */ -const TransactionButton = withWalletStatusVerifier<TransactionButtonProps>( - ({ - children = 'Send Transaction', - confirmations = 1, - disabled, - labelSending = 'Sending...', - onMined, - transaction, - ...restProps - }) => { - const [hash, setHash] = useState<Hash>() - const [isPending, setIsPending] = useState<boolean>(false) - - const { watchTx } = useTransactionNotification() - const { data: receipt } = useWaitForTransactionReceipt({ - hash: hash, - confirmations, - }) +function TransactionButton({ + chainId, + children = 'Send Transaction', + confirmations = 1, + disabled, + fallback = <ConnectWalletButton />, + labelSending = 'Sending...', + onMined, + switchChainLabel = 'Switch to', + transaction, + ...restProps +}: TransactionButtonProps) { + const { needsConnect, needsChainSwitch, targetChain, targetChainId, switchChain } = + useWalletStatus({ chainId }) - useEffect(() => { - const handleMined = async () => { - if (receipt && isPending) { - await onMined?.(receipt) - setIsPending(false) - setHash(undefined) - } - } + const [hash, setHash] = useState<Hash>() + const [isPending, setIsPending] = useState<boolean>(false) - handleMined() - }, [isPending, onMined, receipt]) + const { watchTx } = useTransactionNotification() + const { data: receipt } = useWaitForTransactionReceipt({ + hash: hash, + confirmations, + }) - const handleSendTransaction = async () => { - setIsPending(true) - try { - const txPromise = transaction() - watchTx({ txPromise, methodId: transaction.methodId }) - const hash = await txPromise - setHash(hash) - } catch (error: unknown) { - console.error('Error sending transaction', error instanceof Error ? error.message : error) + useEffect(() => { + const handleMined = async () => { + if (receipt && isPending) { + await onMined?.(receipt) setIsPending(false) + setHash(undefined) } } + handleMined() + }, [isPending, onMined, receipt]) + + if (needsConnect) { + return fallback + } + + if (needsChainSwitch) { return ( - <PrimaryButton - disabled={isPending || disabled} - onClick={handleSendTransaction} - {...restProps} - > - {isPending ? labelSending : children} - </PrimaryButton> + <SwitchChainButton onClick={() => switchChain(targetChainId)}> + {switchChainLabel} {targetChain.name} + </SwitchChainButton> ) - }, -) + } + + const handleSendTransaction = async () => { + setIsPending(true) + try { + const txPromise = transaction() + watchTx({ txPromise, methodId: transaction.methodId }) + const hash = await txPromise + setHash(hash) + } catch (error: unknown) { + console.error('Error sending transaction', error instanceof Error ? error.message : error) + setIsPending(false) + } + } + + return ( + <PrimaryButton + disabled={isPending || disabled} + onClick={handleSendTransaction} + {...restProps} + > + {isPending ? labelSending : children} + </PrimaryButton> + ) +} export default TransactionButton diff --git a/src/components/sharedComponents/WalletStatusVerifier.test.tsx b/src/components/sharedComponents/WalletStatusVerifier.test.tsx index 09c5b00d..7f9fc23e 100644 --- a/src/components/sharedComponents/WalletStatusVerifier.test.tsx +++ b/src/components/sharedComponents/WalletStatusVerifier.test.tsx @@ -1,122 +1,199 @@ import { ChakraProvider, createSystem, defaultConfig } from '@chakra-ui/react' import { render, screen } from '@testing-library/react' -import type { ReactElement } from 'react' -import { describe, expect, it, vi } from 'vitest' -import { WalletStatusVerifier, withWalletStatusVerifier } from './WalletStatusVerifier' +import userEvent from '@testing-library/user-event' +import { createElement, type ReactNode } from 'react' +import { beforeEach, describe, expect, it, vi } from 'vitest' +import type { Web3Status } from '@/src/hooks/useWeb3Status' +import { useWeb3StatusConnected, WalletStatusVerifier } from './WalletStatusVerifier' -const system = createSystem(defaultConfig) +const mockSwitchChain = vi.fn() + +const mockWeb3Status = { + readOnlyClient: undefined, + appChainId: 1, + address: '0xdeadbeef', + balance: undefined, + connectingWallet: false, + switchingChain: false, + isWalletConnected: true, + walletClient: undefined, + isWalletSynced: true, + walletChainId: 1, + switchChain: vi.fn(), + disconnect: vi.fn(), +} as unknown as Web3Status -vi.mock('@/src/hooks/useWeb3Status', () => ({ - useWeb3Status: vi.fn(), +vi.mock('@/src/hooks/useWalletStatus', () => ({ + useWalletStatus: vi.fn(() => ({ + isReady: false, + needsConnect: true, + needsChainSwitch: false, + targetChain: { id: 1, name: 'Ethereum' }, + targetChainId: 1, + switchChain: mockSwitchChain, + web3Status: mockWeb3Status, + })), })) vi.mock('@/src/providers/Web3Provider', () => ({ - ConnectWalletButton: () => <button type="button">Connect Wallet</button>, + ConnectWalletButton: () => + createElement( + 'button', + { type: 'button', 'data-testid': 'connect-wallet-button' }, + 'Connect Wallet', + ), })) -import * as useWeb3StatusModule from '@/src/hooks/useWeb3Status' - -// chains[0] = optimismSepolia (id: 11155420) when PUBLIC_INCLUDE_TESTNETS=true (default) -const OP_SEPOLIA_ID = 11155420 as const - -function connectedSyncedStatus(overrides = {}) { - return { - isWalletConnected: true, - isWalletSynced: true, - walletChainId: OP_SEPOLIA_ID, - appChainId: OP_SEPOLIA_ID, - switchChain: vi.fn(), - disconnect: vi.fn(), - address: '0x1234567890abcdef1234567890abcdef12345678' as `0x${string}`, - balance: undefined, - connectingWallet: false, - switchingChain: false, - walletClient: undefined, - readOnlyClient: undefined, - ...overrides, - } -} - -function wrap(ui: ReactElement) { - return render(<ChakraProvider value={system}>{ui}</ChakraProvider>) -} +const { useWalletStatus } = await import('@/src/hooks/useWalletStatus') +const mockedUseWalletStatus = vi.mocked(useWalletStatus) + +const system = createSystem(defaultConfig) + +const renderWithChakra = (ui: ReactNode) => + render(<ChakraProvider value={system}>{ui}</ChakraProvider>) describe('WalletStatusVerifier', () => { - it('renders default ConnectWalletButton fallback when wallet not connected', () => { - vi.mocked(useWeb3StatusModule.useWeb3Status).mockReturnValue( - // biome-ignore lint/suspicious/noExplicitAny: partial mock - connectedSyncedStatus({ isWalletConnected: false, isWalletSynced: false }) as any, - ) - wrap( - <WalletStatusVerifier> - <div>Protected Content</div> - </WalletStatusVerifier>, - ) - expect(screen.getByText('Connect Wallet')).toBeDefined() - expect(screen.queryByText('Protected Content')).toBeNull() + beforeEach(() => { + vi.clearAllMocks() }) - it('renders custom fallback when wallet not connected', () => { - vi.mocked(useWeb3StatusModule.useWeb3Status).mockReturnValue( - // biome-ignore lint/suspicious/noExplicitAny: partial mock - connectedSyncedStatus({ isWalletConnected: false, isWalletSynced: false }) as any, - ) - wrap( - <WalletStatusVerifier fallback={<div>Custom Fallback</div>}> - <div>Protected Content</div> - </WalletStatusVerifier>, + it('renders default fallback (ConnectWalletButton) when wallet needs connect', () => { + mockedUseWalletStatus.mockReturnValue({ + isReady: false, + needsConnect: true, + needsChainSwitch: false, + targetChain: { id: 1, name: 'Ethereum' } as ReturnType<typeof useWalletStatus>['targetChain'], + targetChainId: 1, + switchChain: mockSwitchChain, + web3Status: mockWeb3Status, + }) + + renderWithChakra( + createElement( + WalletStatusVerifier, + null, + createElement('div', { 'data-testid': 'protected-content' }, 'Protected'), + ), ) - expect(screen.getByText('Custom Fallback')).toBeDefined() + + expect(screen.getByTestId('connect-wallet-button')).toBeInTheDocument() + expect(screen.queryByTestId('protected-content')).toBeNull() }) - it('renders switch chain button when wallet is on wrong chain', () => { - vi.mocked(useWeb3StatusModule.useWeb3Status).mockReturnValue( - // biome-ignore lint/suspicious/noExplicitAny: partial mock - connectedSyncedStatus({ isWalletSynced: false, walletChainId: 1 }) as any, - ) - wrap( - <WalletStatusVerifier> - <div>Protected Content</div> - </WalletStatusVerifier>, + it('renders custom fallback when provided and wallet needs connect', () => { + mockedUseWalletStatus.mockReturnValue({ + isReady: false, + needsConnect: true, + needsChainSwitch: false, + targetChain: { id: 1, name: 'Ethereum' } as ReturnType<typeof useWalletStatus>['targetChain'], + targetChainId: 1, + switchChain: mockSwitchChain, + web3Status: mockWeb3Status, + }) + + renderWithChakra( + createElement( + WalletStatusVerifier, + { fallback: createElement('div', { 'data-testid': 'custom-fallback' }, 'Custom') }, + createElement('div', { 'data-testid': 'protected-content' }, 'Protected'), + ), ) - expect(screen.getByRole('button').textContent?.toLowerCase()).toContain('switch to') - expect(screen.queryByText('Protected Content')).toBeNull() + + expect(screen.getByTestId('custom-fallback')).toBeInTheDocument() + expect(screen.queryByTestId('protected-content')).toBeNull() }) - it('renders children when wallet is connected and synced', () => { - vi.mocked(useWeb3StatusModule.useWeb3Status).mockReturnValue( - // biome-ignore lint/suspicious/noExplicitAny: partial mock - connectedSyncedStatus() as any, - ) - wrap( - <WalletStatusVerifier> - <div>Protected Content</div> - </WalletStatusVerifier>, + it('renders switch chain button when wallet needs chain switch', () => { + mockedUseWalletStatus.mockReturnValue({ + isReady: false, + needsConnect: false, + needsChainSwitch: true, + targetChain: { id: 10, name: 'OP Mainnet' } as ReturnType< + typeof useWalletStatus + >['targetChain'], + targetChainId: 10, + switchChain: mockSwitchChain, + web3Status: mockWeb3Status, + }) + + renderWithChakra( + createElement( + WalletStatusVerifier, + null, + createElement('div', { 'data-testid': 'protected-content' }, 'Protected'), + ), ) - expect(screen.getByText('Protected Content')).toBeDefined() + + expect(screen.getByText(/Switch to/)).toBeInTheDocument() + expect(screen.getByText(/OP Mainnet/)).toBeInTheDocument() + expect(screen.queryByTestId('protected-content')).toBeNull() }) -}) -describe('withWalletStatusVerifier HOC', () => { - const ProtectedComponent = () => <div>Protected Component</div> - const Wrapped = withWalletStatusVerifier(ProtectedComponent) + it('renders children when wallet is ready', () => { + mockedUseWalletStatus.mockReturnValue({ + isReady: true, + needsConnect: false, + needsChainSwitch: false, + targetChain: { id: 1, name: 'Ethereum' } as ReturnType<typeof useWalletStatus>['targetChain'], + targetChainId: 1, + switchChain: mockSwitchChain, + web3Status: mockWeb3Status, + }) - it('renders fallback when wallet not connected', () => { - vi.mocked(useWeb3StatusModule.useWeb3Status).mockReturnValue( - // biome-ignore lint/suspicious/noExplicitAny: partial mock - connectedSyncedStatus({ isWalletConnected: false, isWalletSynced: false }) as any, + renderWithChakra( + createElement( + WalletStatusVerifier, + null, + createElement('div', { 'data-testid': 'protected-content' }, 'Protected'), + ), ) - wrap(<Wrapped />) - expect(screen.getByText('Connect Wallet')).toBeDefined() - expect(screen.queryByText('Protected Component')).toBeNull() + + expect(screen.getByTestId('protected-content')).toBeInTheDocument() }) - it('renders wrapped component when wallet is connected and synced', () => { - vi.mocked(useWeb3StatusModule.useWeb3Status).mockReturnValue( - // biome-ignore lint/suspicious/noExplicitAny: partial mock - connectedSyncedStatus() as any, + it('calls switchChain when switch button is clicked', async () => { + const user = userEvent.setup() + + mockedUseWalletStatus.mockReturnValue({ + isReady: false, + needsConnect: false, + needsChainSwitch: true, + targetChain: { id: 10, name: 'OP Mainnet' } as ReturnType< + typeof useWalletStatus + >['targetChain'], + targetChainId: 10, + switchChain: mockSwitchChain, + web3Status: mockWeb3Status, + }) + + renderWithChakra( + createElement(WalletStatusVerifier, null, createElement('div', null, 'Protected')), ) - wrap(<Wrapped />) - expect(screen.getByText('Protected Component')).toBeDefined() + + const switchButton = screen.getByText(/Switch to/) + await user.click(switchButton) + + expect(mockSwitchChain).toHaveBeenCalledWith(10) + }) + + it('provides web3 status context to children when wallet is ready', () => { + mockedUseWalletStatus.mockReturnValue({ + isReady: true, + needsConnect: false, + needsChainSwitch: false, + targetChain: { id: 1, name: 'Ethereum' } as ReturnType<typeof useWalletStatus>['targetChain'], + targetChainId: 1, + switchChain: mockSwitchChain, + web3Status: mockWeb3Status, + }) + + const ChildComponent = () => { + const { address } = useWeb3StatusConnected() + return createElement('div', { 'data-testid': 'address' }, address) + } + + renderWithChakra(createElement(WalletStatusVerifier, null, createElement(ChildComponent))) + + expect(screen.getByTestId('address')).toHaveTextContent('0xdeadbeef') }) }) diff --git a/src/components/sharedComponents/WalletStatusVerifier.tsx b/src/components/sharedComponents/WalletStatusVerifier.tsx index 7e9d46c2..5d30c336 100644 --- a/src/components/sharedComponents/WalletStatusVerifier.tsx +++ b/src/components/sharedComponents/WalletStatusVerifier.tsx @@ -1,44 +1,47 @@ -import PrimaryButton from '@/src/components/sharedComponents/ui/PrimaryButton' -import { useWeb3Status } from '@/src/hooks/useWeb3Status' -import { type ChainsIds, chains } from '@/src/lib/networks.config' +import { createContext, type FC, type ReactElement, type ReactNode, useContext } from 'react' +import SwitchChainButton from '@/src/components/sharedComponents/ui/SwitchChainButton' +import { useWalletStatus } from '@/src/hooks/useWalletStatus' +import type { Web3Status } from '@/src/hooks/useWeb3Status' +import type { ChainsIds } from '@/src/lib/networks.config' import { ConnectWalletButton } from '@/src/providers/Web3Provider' -import { chakra } from '@chakra-ui/react' -import type { ComponentType, FC, ReactElement } from 'react' -import { extractChain } from 'viem' +import type { RequiredNonNull } from '@/src/types/utils' +import { DeveloperError } from '@/src/utils/DeveloperError' -const Button = chakra(PrimaryButton, { - base: { - fontSize: '16px', - fontWeight: 500, - height: '48px', - paddingLeft: 6, - paddingRight: 6, - }, -}) +const WalletStatusVerifierContext = createContext<RequiredNonNull<Web3Status> | null>(null) + +/** + * Returns the connected wallet's Web3 status. + * + * Must be called inside a `<WalletStatusVerifier>` component tree. + * Throws if called outside one. + */ +export const useWeb3StatusConnected = () => { + const context = useContext(WalletStatusVerifierContext) + if (context === null) { + throw new DeveloperError( + 'useWeb3StatusConnected must be used inside a <WalletStatusVerifier> component.', + ) + } + return context +} interface WalletStatusVerifierProps { chainId?: ChainsIds - children?: ReactElement + children?: ReactNode fallback?: ReactElement - labelSwitchChain?: string + switchChainLabel?: string } /** - * WalletStatusVerifier Component + * Wrapper component that gates content on wallet connection and chain status. * - * This component checks the wallet connection and chain synchronization status. - * If the wallet is not connected, it displays a fallback component (default: ConnectWalletButton) - * If the wallet is connected but not synced with the correct chain, it provides an option to switch chain. - * - * @param {Object} props - WalletStatusVerifier component props - * @param {Chain['id']} [props.chainId] - The chain ID to check for synchronization - * @param {ReactElement} [props.fallback] - The fallback component to render if the wallet is not connected - * @param {ReactElement} props.children - The children components to render if the wallet is connected and synced + * This is the primary API for protecting UI that requires a connected wallet. + * Components that call `useWeb3StatusConnected` must be rendered inside this component. * * @example * ```tsx * <WalletStatusVerifier> - * <AComponentThatRequiresAConnectedWallet /> + * <MyProtectedComponent /> * </WalletStatusVerifier> * ``` */ @@ -46,77 +49,28 @@ const WalletStatusVerifier: FC<WalletStatusVerifierProps> = ({ chainId, children, fallback = <ConnectWalletButton />, - labelSwitchChain = 'Switch to', + switchChainLabel = 'Switch to', }: WalletStatusVerifierProps) => { - const { appChainId, isWalletConnected, isWalletSynced, switchChain, walletChainId } = - useWeb3Status() + const { needsConnect, needsChainSwitch, targetChain, targetChainId, switchChain, web3Status } = + useWalletStatus({ chainId }) - const chainToSwitch = extractChain({ chains, id: chainId || appChainId || chains[0].id }) - - if (!isWalletConnected) { + if (needsConnect) { return fallback } - if (!isWalletSynced || walletChainId !== chainToSwitch.id) { + if (needsChainSwitch) { return ( - <Button onClick={() => switchChain(chainToSwitch.id)}> - {labelSwitchChain} {chainToSwitch?.name} - </Button> - ) - } - - return children -} - -/** - * WalletStatusVerifier Component - * - * Checks the wallet connection and chain synchronization status. - * - If wallet is not connected, displays fallback component (default: ConnectWalletButton) - * - If wallet is connected but on wrong chain, provides option to switch networks - * - If wallet is connected and on correct chain, renders children - * - * @param {WalletStatusVerifierProps} props - Component props - * @param {ChainsIds} [props.chainId] - The required chain ID (defaults to appChainId) - * @param {ReactElement} [props.children] - The content to render when wallet is connected and synced - * @param {ReactElement} [props.fallback=<ConnectWalletButton />] - Component to render when wallet is not connected - * @param {string} [props.labelSwitchChain='Switch to'] - Label for the chain switching button - * - * @example - * ```tsx - * <WalletStatusVerifier chainId={1}> - * <MyProtectedComponent /> - * </WalletStatusVerifier> - * ``` - */ -const withWalletStatusVerifier = <P extends object>( - WrappedComponent: ComponentType<P>, - { - chainId, - fallback = <ConnectWalletButton />, - labelSwitchChain = 'Switch to', - }: WalletStatusVerifierProps = {}, -): FC<P> => { - const ComponentWithVerifier: FC<P> = (props: P) => { - const { appChainId, isWalletConnected, isWalletSynced, switchChain, walletChainId } = - useWeb3Status() - - const chainToSwitch = extractChain({ chains, id: chainId || appChainId || chains[0].id }) - - return !isWalletConnected ? ( - fallback - ) : !isWalletSynced || walletChainId !== chainToSwitch.id ? ( - <Button onClick={() => switchChain(chainToSwitch.id)}> - {labelSwitchChain} {chainToSwitch?.name} - </Button> - ) : ( - <WrappedComponent {...props} /> + <SwitchChainButton onClick={() => switchChain(targetChainId)}> + {switchChainLabel} {targetChain.name} + </SwitchChainButton> ) } - ComponentWithVerifier.displayName = `withWalletStatusVerifier(${WrappedComponent.displayName || WrappedComponent.name || 'Component'})` - - return ComponentWithVerifier + return ( + <WalletStatusVerifierContext.Provider value={web3Status as RequiredNonNull<Web3Status>}> + {children} + </WalletStatusVerifierContext.Provider> + ) } -export { WalletStatusVerifier, withWalletStatusVerifier } +export { WalletStatusVerifier } diff --git a/src/components/sharedComponents/dev/TanStackReactQueryDevtools.tsx b/src/components/sharedComponents/dev/TanStackReactQueryDevtools.tsx index 8887d721..83091c2c 100644 --- a/src/components/sharedComponents/dev/TanStackReactQueryDevtools.tsx +++ b/src/components/sharedComponents/dev/TanStackReactQueryDevtools.tsx @@ -1,4 +1,4 @@ -import { Suspense, lazy } from 'react' +import { lazy, Suspense } from 'react' const ReactQueryDevtools = import.meta.env.PROD ? () => null diff --git a/src/components/sharedComponents/dev/TanStackRouterDevtools.tsx b/src/components/sharedComponents/dev/TanStackRouterDevtools.tsx index cbc90b3a..ef00b957 100644 --- a/src/components/sharedComponents/dev/TanStackRouterDevtools.tsx +++ b/src/components/sharedComponents/dev/TanStackRouterDevtools.tsx @@ -1,9 +1,9 @@ -import { Suspense, lazy } from 'react' +import { lazy, Suspense } from 'react' const RouterDevtoolsBase = import.meta.env.PROD ? () => null : lazy(() => - import('@tanstack/router-devtools').then((res) => ({ + import('@tanstack/react-router-devtools').then((res) => ({ default: res.TanStackRouterDevtools, })), ) diff --git a/src/components/sharedComponents/ui/DropdownButton.tsx b/src/components/sharedComponents/ui/DropdownButton.tsx index 8e0a4b5c..3c9cdcb3 100644 --- a/src/components/sharedComponents/ui/DropdownButton.tsx +++ b/src/components/sharedComponents/ui/DropdownButton.tsx @@ -1,6 +1,6 @@ -import PrimaryButton from '@/src/components/sharedComponents/ui/PrimaryButton' import { type ButtonProps, chakra } from '@chakra-ui/react' import type { FC } from 'react' +import PrimaryButton from '@/src/components/sharedComponents/ui/PrimaryButton' const ChevronDown: FC = () => ( <chakra.svg diff --git a/src/components/sharedComponents/ui/ExternalLink/index.tsx b/src/components/sharedComponents/ui/ExternalLink/index.tsx index 4af70c36..d9b2ef4c 100644 --- a/src/components/sharedComponents/ui/ExternalLink/index.tsx +++ b/src/components/sharedComponents/ui/ExternalLink/index.tsx @@ -1,4 +1,4 @@ -import { Link, type LinkProps, chakra } from '@chakra-ui/react' +import { chakra, Link, type LinkProps } from '@chakra-ui/react' import type { FC, HTMLAttributes } from 'react' import styles from './styles' diff --git a/src/components/sharedComponents/ui/Footer/Socials/index.tsx b/src/components/sharedComponents/ui/Footer/Socials/index.tsx index 11eddfbb..2f859328 100644 --- a/src/components/sharedComponents/ui/Footer/Socials/index.tsx +++ b/src/components/sharedComponents/ui/Footer/Socials/index.tsx @@ -1,9 +1,9 @@ +import { Flex, type FlexProps, Link } from '@chakra-ui/react' +import type { FC } from 'react' import Github from '@/src/components/sharedComponents/ui/Footer/Socials/assets/Github' import LinkedIn from '@/src/components/sharedComponents/ui/Footer/Socials/assets/LinkedIn' import Telegram from '@/src/components/sharedComponents/ui/Footer/Socials/assets/Telegram' import Twitter from '@/src/components/sharedComponents/ui/Footer/Socials/assets/Twitter' -import { Flex, type FlexProps, Link } from '@chakra-ui/react' -import type { FC } from 'react' const Socials: FC<FlexProps> = ({ ...restProps }) => { const items = [ diff --git a/src/components/sharedComponents/ui/Footer/index.tsx b/src/components/sharedComponents/ui/Footer/index.tsx index fc4b75e8..823a17f4 100644 --- a/src/components/sharedComponents/ui/Footer/index.tsx +++ b/src/components/sharedComponents/ui/Footer/index.tsx @@ -1,9 +1,9 @@ -import { LogoMini } from '@/src/components/sharedComponents/ui/Footer/LogoMini' -import Socials from '@/src/components/sharedComponents/ui/Footer/Socials' -import { Inner } from '@/src/components/sharedComponents/ui/Inner' import { Box, Flex, type FlexProps } from '@chakra-ui/react' import packageJSON from '@packageJSON' import type { FC } from 'react' +import { LogoMini } from '@/src/components/sharedComponents/ui/Footer/LogoMini' +import Socials from '@/src/components/sharedComponents/ui/Footer/Socials' +import { Inner } from '@/src/components/sharedComponents/ui/Inner' import styles from './styles' export const Footer: FC<FlexProps> = ({ css, ...restProps }) => { diff --git a/src/components/sharedComponents/ui/Header/Logo.tsx b/src/components/sharedComponents/ui/Header/Logo.tsx index 3582afdc..449edd01 100644 --- a/src/components/sharedComponents/ui/Header/Logo.tsx +++ b/src/components/sharedComponents/ui/Header/Logo.tsx @@ -1,4 +1,4 @@ -import { type ImageProps, chakra } from '@chakra-ui/react' +import { chakra, type ImageProps } from '@chakra-ui/react' import type { FC } from 'react' const LogoDark = @@ -15,7 +15,6 @@ const LogoLight = const Logo: FC<ImageProps> = ({ ...restProps }) => ( <chakra.img width={193} - height={77} content="var(--base-logo)" display="block" flexShrink="0" diff --git a/src/components/sharedComponents/ui/Header/MainMenu.tsx b/src/components/sharedComponents/ui/Header/MainMenu.tsx index 4bcc72f4..edaa0eac 100644 --- a/src/components/sharedComponents/ui/Header/MainMenu.tsx +++ b/src/components/sharedComponents/ui/Header/MainMenu.tsx @@ -1,4 +1,4 @@ -import { Flex, type FlexProps, Link, type LinkProps, chakra } from '@chakra-ui/react' +import { chakra, Flex, type FlexProps, Link, type LinkProps } from '@chakra-ui/react' import type { FC } from 'react' const GitHub = () => ( diff --git a/src/components/sharedComponents/ui/Header/MobileMenu/MobileMenu.tsx b/src/components/sharedComponents/ui/Header/MobileMenu/MobileMenu.tsx index 789a182c..48cf1109 100644 --- a/src/components/sharedComponents/ui/Header/MobileMenu/MobileMenu.tsx +++ b/src/components/sharedComponents/ui/Header/MobileMenu/MobileMenu.tsx @@ -1,11 +1,10 @@ +import { Box, chakra, Drawer } from '@chakra-ui/react' +import { useTheme } from 'next-themes' +import { useState } from 'react' import Logo from '@/src/components/sharedComponents/ui/Header/Logo' import MainMenu from '@/src/components/sharedComponents/ui/Header/MainMenu' import { SwitchThemeButton } from '@/src/components/sharedComponents/ui/SwitchThemeButton' import { ConnectWalletButton } from '@/src/providers/Web3Provider' -import { Box, chakra } from '@chakra-ui/react' -import { Drawer } from '@chakra-ui/react' -import { useTheme } from 'next-themes' -import { useState } from 'react' import styles from './styles' const MenuIcon = () => ( diff --git a/src/components/sharedComponents/ui/Header/index.tsx b/src/components/sharedComponents/ui/Header/index.tsx index 10208e24..ccd79602 100644 --- a/src/components/sharedComponents/ui/Header/index.tsx +++ b/src/components/sharedComponents/ui/Header/index.tsx @@ -1,13 +1,13 @@ +import { Box, type BoxProps, chakra, Flex } from '@chakra-ui/react' +import { Link } from '@tanstack/react-router' +import { useTheme } from 'next-themes' +import type { FC } from 'react' import Logo from '@/src/components/sharedComponents/ui/Header/Logo' import MainMenu from '@/src/components/sharedComponents/ui/Header/MainMenu' import MobileMenu from '@/src/components/sharedComponents/ui/Header/MobileMenu/MobileMenu' import { Inner } from '@/src/components/sharedComponents/ui/Inner' import { SwitchThemeButton } from '@/src/components/sharedComponents/ui/SwitchThemeButton' import { ConnectWalletButton } from '@/src/providers/Web3Provider' -import { Box, type BoxProps, Flex, chakra } from '@chakra-ui/react' -import { Link } from '@tanstack/react-router' -import { useTheme } from 'next-themes' -import type { FC } from 'react' import styles from './styles' const HomeLink = chakra(Link) diff --git a/src/components/sharedComponents/ui/Menu/index.tsx b/src/components/sharedComponents/ui/Menu/index.tsx index ad018d36..65ff3695 100644 --- a/src/components/sharedComponents/ui/Menu/index.tsx +++ b/src/components/sharedComponents/ui/Menu/index.tsx @@ -10,6 +10,7 @@ export const MenuContent: FC<MenuContentProps> = ({ children, css, ...restProps css={{ ...css, ...styles }} padding="0" display="flex" + flexDirection="column" alignItems="stretch" {...restProps} > @@ -22,6 +23,11 @@ export const MenuItem: FC<MenuItemProps> = ({ children, css, ...restProps }) => alignItems="center" backgroundColor="var(--item-background-color)" borderBottom="1px solid var(--item-border-color)" + _last={{ + borderBottom: 'none', + _hover: { borderBottom: 'none' }, + _active: { borderBottom: 'none' }, + }} color="var(--item-color)" columnGap={2} cursor="pointer" diff --git a/src/components/sharedComponents/ui/Modal/index.tsx b/src/components/sharedComponents/ui/Modal/index.tsx index d72455e6..2a624976 100644 --- a/src/components/sharedComponents/ui/Modal/index.tsx +++ b/src/components/sharedComponents/ui/Modal/index.tsx @@ -2,9 +2,9 @@ import { Card as BaseCard, type ButtonProps, type CardRootProps, + chakra, Heading, Text, - chakra, } from '@chakra-ui/react' import type { FC, ReactNode } from 'react' import styles from './styles' diff --git a/src/components/sharedComponents/ui/PrimaryButton/index.tsx b/src/components/sharedComponents/ui/PrimaryButton/index.tsx index 6bf9e073..a2d962b3 100644 --- a/src/components/sharedComponents/ui/PrimaryButton/index.tsx +++ b/src/components/sharedComponents/ui/PrimaryButton/index.tsx @@ -1,6 +1,6 @@ -import Button from '@/src/components/sharedComponents/ui/Button' import type { ButtonProps } from '@chakra-ui/react' import type { FC } from 'react' +import Button from '@/src/components/sharedComponents/ui/Button' import styles from './styles' export const PrimaryButton: FC<ButtonProps> = ({ css, ...restProps }) => ( diff --git a/src/components/sharedComponents/ui/SecondaryButton/index.tsx b/src/components/sharedComponents/ui/SecondaryButton/index.tsx index c6c8ac3b..9d14e6ec 100644 --- a/src/components/sharedComponents/ui/SecondaryButton/index.tsx +++ b/src/components/sharedComponents/ui/SecondaryButton/index.tsx @@ -1,6 +1,6 @@ -import Button from '@/src/components/sharedComponents/ui/Button' import type { ButtonProps } from '@chakra-ui/react' import type { FC } from 'react' +import Button from '@/src/components/sharedComponents/ui/Button' import styles from './styles' export const SecondaryButton: FC<ButtonProps> = ({ css, ...restProps }) => ( diff --git a/src/components/sharedComponents/ui/SwitchChainButton.tsx b/src/components/sharedComponents/ui/SwitchChainButton.tsx new file mode 100644 index 00000000..22fb5fa7 --- /dev/null +++ b/src/components/sharedComponents/ui/SwitchChainButton.tsx @@ -0,0 +1,14 @@ +import { chakra } from '@chakra-ui/react' +import PrimaryButton from '@/src/components/sharedComponents/ui/PrimaryButton' + +const SwitchChainButton = chakra(PrimaryButton, { + base: { + fontSize: '16px', + fontWeight: 500, + height: '48px', + paddingLeft: 6, + paddingRight: 6, + }, +}) + +export default SwitchChainButton diff --git a/src/components/sharedComponents/ui/SwitchThemeButton/assets/Dark.tsx b/src/components/sharedComponents/ui/SwitchThemeButton/assets/Dark.tsx index 9302d573..97791b94 100644 --- a/src/components/sharedComponents/ui/SwitchThemeButton/assets/Dark.tsx +++ b/src/components/sharedComponents/ui/SwitchThemeButton/assets/Dark.tsx @@ -1,4 +1,4 @@ -import { type HTMLChakraProps, chakra } from '@chakra-ui/react' +import { chakra, type HTMLChakraProps } from '@chakra-ui/react' import type { FC, SVGAttributes } from 'react' const Dark: FC<HTMLChakraProps<'svg'> & SVGAttributes<SVGSVGElement>> = ({ css, ...restProps }) => ( diff --git a/src/components/sharedComponents/ui/SwitchThemeButton/assets/Light.tsx b/src/components/sharedComponents/ui/SwitchThemeButton/assets/Light.tsx index b7976a53..6059ec4d 100644 --- a/src/components/sharedComponents/ui/SwitchThemeButton/assets/Light.tsx +++ b/src/components/sharedComponents/ui/SwitchThemeButton/assets/Light.tsx @@ -1,4 +1,4 @@ -import { type HTMLChakraProps, chakra } from '@chakra-ui/react' +import { chakra, type HTMLChakraProps } from '@chakra-ui/react' import type { FC, SVGAttributes } from 'react' const Light: FC<HTMLChakraProps<'svg'> & SVGAttributes<SVGSVGElement>> = ({ diff --git a/src/components/sharedComponents/ui/SwitchThemeButton/index.tsx b/src/components/sharedComponents/ui/SwitchThemeButton/index.tsx index 557320be..420eee94 100644 --- a/src/components/sharedComponents/ui/SwitchThemeButton/index.tsx +++ b/src/components/sharedComponents/ui/SwitchThemeButton/index.tsx @@ -1,7 +1,7 @@ -import Dark from '@/src/components/sharedComponents/ui/SwitchThemeButton/assets/Dark' -import Light from '@/src/components/sharedComponents/ui/SwitchThemeButton/assets/Light' import { Box, type ButtonProps, chakra } from '@chakra-ui/react' import type { FC } from 'react' +import Dark from '@/src/components/sharedComponents/ui/SwitchThemeButton/assets/Dark' +import Light from '@/src/components/sharedComponents/ui/SwitchThemeButton/assets/Light' import styles from './styles' const Icon = chakra('div', { diff --git a/src/components/ui/provider.tsx b/src/components/ui/provider.tsx index e9451067..1d6fa447 100644 --- a/src/components/ui/provider.tsx +++ b/src/components/ui/provider.tsx @@ -3,129 +3,129 @@ import { ChakraProvider, createSystem, defaultConfig, defineConfig } from '@chakra-ui/react' import { ColorModeProvider, type ColorModeProviderProps } from './color-mode' -export function Provider(props: ColorModeProviderProps) { - const customConfig = defineConfig({ - theme: { - // Use tokens for values that don't change with light / dark themes - tokens: { - fonts: { - body: { - value: '"Manrope", "Arial", "Helvetica Neue", "Helvetica", sans-serif', - }, - heading: { - value: '{fonts.body}', - }, - mono: { - value: '"Roboto Mono", "Courier New", monospace', - }, +const customConfig = defineConfig({ + theme: { + // Use tokens for values that don't change with light / dark themes + tokens: { + fonts: { + body: { + value: '"Manrope", "Arial", "Helvetica Neue", "Helvetica", sans-serif', + }, + heading: { + value: '{fonts.body}', + }, + mono: { + value: '"Roboto Mono", "Courier New", monospace', }, }, - // Use semantic tokens for light / dark values - semanticTokens: { - colors: { - bg: { - default: { - value: { - _light: '#f7f7f7', - _dark: '#292B43', - }, - }, - emphasized: { - value: { - _light: '#ccc', - _dark: '#888', - }, + }, + // Use semantic tokens for light / dark values + semanticTokens: { + colors: { + bg: { + default: { + value: { + _light: '#f7f7f7', + _dark: '#292B43', }, }, - primary: { - default: { - value: { - _light: '#692581', - _dark: '#8b46a4', - }, + emphasized: { + value: { + _light: '#ccc', + _dark: '#888', }, }, - text: { - default: { - value: { - _light: '#4b4d60', - _dark: '#e2e0e7', - }, + }, + primary: { + default: { + value: { + _light: '#692581', + _dark: '#8b46a4', }, }, - danger: { - default: { - value: { - _light: '#800', - _dark: '#ff6666', - }, + }, + text: { + default: { + value: { + _light: '#4b4d60', + _dark: '#e2e0e7', }, }, - ok: { - default: { - value: { - _light: '#006600', - _dark: '#66ee66', - }, + }, + danger: { + default: { + value: { + _light: '#800', + _dark: '#ff6666', }, }, - warning: { - default: { - value: { - _light: '#996600', - _dark: '#e6b800', - }, + }, + ok: { + default: { + value: { + _light: '#006600', + _dark: '#66ee66', }, }, }, - }, - // Some custom animations - keyframes: { - rotateSwitch: { - from: { - transform: 'rotate(0)', - }, - to: { - transform: 'rotate(360deg)', + warning: { + default: { + value: { + _light: '#996600', + _dark: '#e6b800', + }, }, }, }, }, - globalCss: { - ////////////////////////////////////////////////// - // Just some basic stuff, don't add too much here. - ////////////////////////////////////////////////// - html: { - scrollBehavior: 'smooth', - overflowX: 'hidden', - }, - body: { - '--moz-osx-font-smoothing': 'grayscale', - '--webkit-font-smoothing': 'antialiased', - background: '{colors.bg.default}', - backgroundPosition: '100% 0', - backgroundRepeat: 'no-repeat', - color: '{colors.text.default}', - fontFamily: '{fonts.body}', - lineHeight: 1.5, - outlineColor: '{colors.text.default}', - overflowX: 'hidden', - }, - code: { - fontFamily: '{fonts.mono}', - }, - a: { - color: '{colors.primary.default}', - }, - img: { - display: 'block', - maxInlineSize: '100%', + // Some custom animations + keyframes: { + rotateSwitch: { + from: { + transform: 'rotate(0)', + }, + to: { + transform: 'rotate(360deg)', + }, }, }, - }) + }, + globalCss: { + ////////////////////////////////////////////////// + // Just some basic stuff, don't add too much here. + ////////////////////////////////////////////////// + html: { + scrollBehavior: 'smooth', + overflowX: 'hidden', + }, + body: { + '--moz-osx-font-smoothing': 'grayscale', + '--webkit-font-smoothing': 'antialiased', + background: '{colors.bg.default}', + backgroundPosition: '100% 0', + backgroundRepeat: 'no-repeat', + color: '{colors.text.default}', + fontFamily: '{fonts.body}', + lineHeight: 1.5, + outlineColor: '{colors.text.default}', + overflowX: 'hidden', + }, + code: { + fontFamily: '{fonts.mono}', + }, + a: { + color: '{colors.primary.default}', + }, + img: { + display: 'block', + maxInlineSize: '100%', + }, + }, +}) - const system = createSystem(defaultConfig, customConfig) +export const system = createSystem(defaultConfig, customConfig) +export function Provider(props: ColorModeProviderProps) { return ( <ChakraProvider value={system}> <ColorModeProvider {...props} /> diff --git a/src/components/ui/toaster.tsx b/src/components/ui/toaster.tsx index 4b4ff9e6..c8e09bf0 100644 --- a/src/components/ui/toaster.tsx +++ b/src/components/ui/toaster.tsx @@ -1,7 +1,7 @@ 'use client' +import { Toaster as ChakraToaster, createToaster, Portal, Stack, Toast } from '@chakra-ui/react' import Spinner from '@/src/components/sharedComponents/ui/Spinner' -import { Toaster as ChakraToaster, Portal, Stack, Toast, createToaster } from '@chakra-ui/react' export const toaster = createToaster({ placement: 'bottom-end', diff --git a/src/constants/aaveSepoliaFaucet.ts b/src/constants/aaveSepoliaFaucet.ts new file mode 100644 index 00000000..49e29bb9 --- /dev/null +++ b/src/constants/aaveSepoliaFaucet.ts @@ -0,0 +1,88 @@ +import { getAddress } from 'viem' +import { sepolia } from 'viem/chains' +import type { TokenList } from '@/src/types/token' + +// trustwallet/assets pinned 2026-04-18; bump SHA when icons need updating +const TW_SHA = 'a2c7ba6ca5cc1f16f1be80f642618396ed6df6be' +const TW = `https://raw.githubusercontent.com/trustwallet/assets/${TW_SHA}/blockchains/ethereum/assets` + +// Source: AAVE v3 Sepolia deployment - https://github.com/bgd-labs/aave-address-book/blob/main/src/AaveV3Sepolia.sol +export const aaveSepoliaFaucetTokens: TokenList = { + name: 'AAVE Sepolia Faucet', + timestamp: '2026-04-20T00:00:00Z', + version: { major: 1, minor: 0, patch: 0 }, + tokens: [ + { + chainId: sepolia.id, + address: getAddress('0xFF34B3d4Aee8ddCd6F9AFFFB6Fe49bD371b8a357'), + name: 'Dai Stablecoin', + symbol: 'DAI', + decimals: 18, + logoURI: `${TW}/0x6B175474E89094C44Da98b954EedeAC495271d0F/logo.png`, + }, + { + chainId: sepolia.id, + address: getAddress('0xf8Fb3713D459D7C1018BD0A49D19b4C44290EBE5'), + name: 'Chainlink Token', + symbol: 'LINK', + decimals: 18, + logoURI: `${TW}/0x514910771AF9Ca656af840dff83E8264EcF986CA/logo.png`, + }, + { + chainId: sepolia.id, + address: getAddress('0x94a9D9AC8a22534E3FaCa9F4e7F2E2cf85d5E4C8'), + name: 'USD Coin', + symbol: 'USDC', + decimals: 6, + logoURI: `${TW}/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/logo.png`, + }, + { + chainId: sepolia.id, + address: getAddress('0x29f2D40B0605204364af54EC677bD022dA425d03'), + name: 'Wrapped Bitcoin', + symbol: 'WBTC', + decimals: 8, + logoURI: `${TW}/0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599/logo.png`, + }, + { + chainId: sepolia.id, + address: getAddress('0xC558DBdd856501FCd9aaF1E62eae57A9F0629a3c'), + name: 'Wrapped Ether', + symbol: 'WETH', + decimals: 18, + logoURI: `${TW}/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2/logo.png`, + }, + { + chainId: sepolia.id, + address: getAddress('0xaA8E23Fb1079EA71e0a56F48a2aA51851D8433D0'), + name: 'Tether USD', + symbol: 'USDT', + decimals: 6, + logoURI: `${TW}/0xdAC17F958D2ee523a2206206994597C13D831ec7/logo.png`, + }, + { + chainId: sepolia.id, + address: getAddress('0x88541670E55cC00bEEFD87eB59EDd1b7C511AC9a'), + name: 'Aave Token', + symbol: 'AAVE', + decimals: 18, + logoURI: `${TW}/0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9/logo.png`, + }, + { + chainId: sepolia.id, + address: getAddress('0x6d906e526a4e2Ca02097BA9d0caA3c382F52278E'), + name: 'Euro Stablecoin', + symbol: 'EURS', + decimals: 2, + logoURI: `${TW}/0xdB25f211AB05b1c97D595516F45794528a807ad8/logo.png`, + }, + { + chainId: sepolia.id, + address: getAddress('0xc4bF5CbDaBE595361438F8c6a187bDc330539c60'), + name: 'Gho Token', + symbol: 'GHO', + decimals: 18, + logoURI: `${TW}/0x40D16FC0246aD3160Ccc09B8D0D3A2cD28aE6C2f/logo.png`, + }, + ], +} diff --git a/src/constants/common.ts b/src/constants/common.ts index a12b5a0e..991b8e66 100644 --- a/src/constants/common.ts +++ b/src/constants/common.ts @@ -9,3 +9,6 @@ export const isDev = import.meta.env.DEV * @source */ export const includeTestnets = env.PUBLIC_INCLUDE_TESTNETS + +/** Displayed when no price data is available (e.g. chains unsupported by LI.FI). */ +export const NO_PRICE_DATA_LABEL = 'N/A' diff --git a/src/constants/contracts/contracts.ts b/src/constants/contracts/contracts.ts index 0f789d98..00320e2d 100644 --- a/src/constants/contracts/contracts.ts +++ b/src/constants/contracts/contracts.ts @@ -1,10 +1,10 @@ import { type Abi, type Address, - type ContractFunctionArgs as WagmiContractFunctionArgs, - type ContractFunctionName as WagmiContractFunctionName, erc20Abi, isAddress, + type ContractFunctionArgs as WagmiContractFunctionArgs, + type ContractFunctionName as WagmiContractFunctionName, } from 'viem' import { mainnet, optimismSepolia, polygon, sepolia } from 'viem/chains' @@ -85,9 +85,8 @@ export type ContractNames = (typeof contracts)[number]['name'] type ContractOfName<CN extends ContractNames> = Extract<(typeof contracts)[number], { name: CN }> type AbiOfName<CN extends ContractNames> = ContractOfName<CN>['abi'] -type AddressRecord<T extends ContractNames> = ContractOfName<T> extends { address: infer K } - ? K - : never +type AddressRecord<T extends ContractNames> = + ContractOfName<T> extends { address: infer K } ? K : never type ChainIdOf<T extends ContractNames> = keyof AddressRecord<T> export type ContractFunctionName<CN extends ContractNames> = WagmiContractFunctionName< diff --git a/src/constants/tokenLists.ts b/src/constants/tokenLists.ts index eef5ed10..4f08f945 100644 --- a/src/constants/tokenLists.ts +++ b/src/constants/tokenLists.ts @@ -1,10 +1,33 @@ +import { aaveSepoliaFaucetTokens } from '@/src/constants/aaveSepoliaFaucet' +import { includeTestnets } from '@/src/constants/common' +import type { TokenList } from '@/src/types/token' + /** * @dev Here you can add the list of tokens you want to use in the app * The list follow the standard from: https://tokenlists.org/ * - * Token list must complain with the Schema defined in /src/token.ts + * Token list must comply with the Schema defined in /src/token.ts */ export const tokenLists = { - '1INCH': 'https://ipfs.io/ipns/tokens.1inch.eth', COINGECKO: 'https://tokens.coingecko.com/uniswap/all.json', } as const + +export type BundledTokenList = { + key: string + list: TokenList + enabled: boolean +} + +/** + * @dev Bundled (offline) token lists included at build time. + * Add entries here to ship curated token sets without a network request. + * Each entry is gated by an `enabled` flag so testnet lists stay out of + * production builds when PUBLIC_INCLUDE_TESTNETS is false. + */ +export const bundledTokenLists: BundledTokenList[] = [ + { + key: 'aave-sepolia-faucet', + list: aaveSepoliaFaucetTokens, + enabled: includeTestnets, + }, +] diff --git a/src/env.ts b/src/env.ts index 02d3f2ca..1dbce887 100644 --- a/src/env.ts +++ b/src/env.ts @@ -6,7 +6,7 @@ const zBoolean = z .enum(['true', 'false']) .transform((value) => value === 'true') .optional() - .default('true') + .default(true) /** * Represents the environment configuration object. diff --git a/src/hooks/useErc20Balance.test.ts b/src/hooks/useErc20Balance.test.ts index 04b3f033..c81c47d1 100644 --- a/src/hooks/useErc20Balance.test.ts +++ b/src/hooks/useErc20Balance.test.ts @@ -1,10 +1,10 @@ -import type { Token } from '@/src/types/token' import { QueryClient, QueryClientProvider } from '@tanstack/react-query' import { renderHook, waitFor } from '@testing-library/react' import type { ReactNode } from 'react' import { createElement } from 'react' import { zeroAddress } from 'viem' import { beforeEach, describe, expect, it, vi } from 'vitest' +import type { Token } from '@/src/types/token' import { useErc20Balance } from './useErc20Balance' const mockReadContract = vi.fn() diff --git a/src/hooks/useNetworkBlockNumber.ts b/src/hooks/useNetworkBlockNumber.ts index 6681f49b..33b673b6 100644 --- a/src/hooks/useNetworkBlockNumber.ts +++ b/src/hooks/useNetworkBlockNumber.ts @@ -1,7 +1,6 @@ -import { useMemo } from 'react' - import { type UseSuspenseQueryOptions, useSuspenseQuery } from '@tanstack/react-query' -import { http, createPublicClient } from 'viem' +import { useMemo } from 'react' +import { createPublicClient, http } from 'viem' import type { Chain } from 'viem/chains' /** diff --git a/src/hooks/useOPL1CrossDomainMessengerProxy.ts b/src/hooks/useOPL1CrossDomainMessengerProxy.ts index f0756615..08074ba4 100644 --- a/src/hooks/useOPL1CrossDomainMessengerProxy.ts +++ b/src/hooks/useOPL1CrossDomainMessengerProxy.ts @@ -1,6 +1,6 @@ import { useCallback } from 'react' -import { type Address, type Hash, createPublicClient, encodeFunctionData } from 'viem' +import { type Address, createPublicClient, encodeFunctionData, type Hash } from 'viem' import type { mainnet } from 'viem/chains' import { optimism, optimismSepolia, sepolia } from 'viem/chains' import { useWriteContract } from 'wagmi' @@ -11,7 +11,6 @@ import { type ContractNames, getContract, } from '@/src/constants/contracts/contracts' -import { useWeb3StatusConnected } from '@/src/hooks/useWeb3Status' import { transports } from '@/src/lib/networks.config' async function l2ContractCallInfo({ @@ -132,6 +131,7 @@ export function useL1CrossDomainMessengerProxy({ functionName, args, value, + walletAddress, }: { fromChain: typeof sepolia | typeof mainnet l2ContractAddress: Address @@ -139,8 +139,8 @@ export function useL1CrossDomainMessengerProxy({ functionName: ContractFunctionName<typeof contractName> args: ContractFunctionArgs<typeof contractName, typeof functionName> value: bigint -}) { - const { address: walletAddress } = useWeb3StatusConnected() + walletAddress: Address +}): () => Promise<Hash> { const contract = getContract('OPL1CrossDomainMessengerProxy', fromChain.id) const { writeContractAsync } = useWriteContract() diff --git a/src/hooks/useTokenLists.test.ts b/src/hooks/useTokenLists.test.ts index bb8ddc0f..a68e229a 100644 --- a/src/hooks/useTokenLists.test.ts +++ b/src/hooks/useTokenLists.test.ts @@ -1,11 +1,11 @@ -import type { Token } from '@/src/types/token' -import tokenListsCache, { updateTokenListsCache } from '@/src/utils/tokenListsCache' import { QueryClient, QueryClientProvider } from '@tanstack/react-query' import { renderHook } from '@testing-library/react' -import { createElement } from 'react' import type { ReactNode } from 'react' +import { createElement } from 'react' import { zeroAddress } from 'viem' import { beforeEach, describe, expect, it, vi } from 'vitest' +import { type Token, tokenSchema } from '@/src/types/token' +import tokenListsCache, { updateTokenListsCache } from '@/src/utils/tokenListsCache' vi.mock('@/src/utils/tokenListsCache', () => { const cache = { tokens: [] as Token[], tokensByChainId: {} as Record<number, Token[]> } @@ -28,6 +28,7 @@ vi.mock('@/src/env', () => ({ vi.mock('@/src/constants/tokenLists', () => ({ tokenLists: {}, + bundledTokenLists: [], })) vi.mock('@tanstack/react-query', async (importActual) => { @@ -36,7 +37,10 @@ vi.mock('@tanstack/react-query', async (importActual) => { }) import * as tanstackQuery from '@tanstack/react-query' -import { useTokenLists } from './useTokenLists' +import { fetchTokenList, useTokenLists } from './useTokenLists' + +const mockFetch = vi.fn() +vi.stubGlobal('fetch', mockFetch) const mockToken1: Token = { address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', @@ -73,6 +77,110 @@ beforeEach(() => { }) }) +describe('fetchTokenList', () => { + beforeEach(() => { + vi.clearAllMocks() + }) + + it('returns empty token list on HTTP error', async () => { + mockFetch.mockResolvedValue({ + ok: false, + status: 504, + statusText: 'Gateway Timeout', + }) + + const warnSpy = vi.spyOn(console, 'warn').mockImplementation(() => {}) + const result = await fetchTokenList('https://example.com/tokens.json') + + expect(result.tokens).toEqual([]) + expect(warnSpy).toHaveBeenCalledWith(expect.stringContaining('Token list fetch failed')) + warnSpy.mockRestore() + }) + + it('returns empty token list on network error', async () => { + mockFetch.mockRejectedValue(new Error('Network error')) + + const warnSpy = vi.spyOn(console, 'warn').mockImplementation(() => {}) + const result = await fetchTokenList('https://example.com/tokens.json') + + expect(result.tokens).toEqual([]) + expect(warnSpy).toHaveBeenCalledWith( + expect.stringContaining('Token list fetch failed'), + 'Network error', + ) + warnSpy.mockRestore() + }) + + it('returns empty token list on invalid JSON schema', async () => { + mockFetch.mockResolvedValue({ + ok: true, + json: () => Promise.resolve({ error: 'not a token list' }), + }) + + const warnSpy = vi.spyOn(console, 'warn').mockImplementation(() => {}) + const result = await fetchTokenList('https://example.com/tokens.json') + + expect(result.tokens).toEqual([]) + expect(warnSpy).toHaveBeenCalledWith(expect.stringContaining('invalid schema')) + warnSpy.mockRestore() + }) + + it('returns token list on valid response', async () => { + const validTokenList = { + name: 'Test', + timestamp: '2026-01-01', + version: { major: 1, minor: 0, patch: 0 }, + tokens: [{ symbol: 'ETH', name: 'Ether', address: '0x0', chainId: 1, decimals: 18 }], + } + + mockFetch.mockResolvedValue({ + ok: true, + json: () => Promise.resolve(validTokenList), + }) + + const result = await fetchTokenList('https://example.com/tokens.json') + + expect(result.tokens).toHaveLength(1) + expect(result.tokens[0].symbol).toBe('ETH') + }) + + it('returns empty token list when tokens field is not an array', async () => { + mockFetch.mockResolvedValue({ + ok: true, + json: () => Promise.resolve({ tokens: 'not an array' }), + }) + + const warnSpy = vi.spyOn(console, 'warn').mockImplementation(() => {}) + const result = await fetchTokenList('https://example.com/tokens.json') + + expect(result.tokens).toEqual([]) + warnSpy.mockRestore() + }) + + describe("'default' bundled token list", () => { + it('returns a non-empty tokens array', async () => { + const result = await fetchTokenList('default') + + expect(result.tokens.length).toBeGreaterThan(0) + expect(mockFetch).not.toHaveBeenCalled() + }) + + it('every EVM token conforms to tokenSchema', async () => { + const result = await fetchTokenList('default') + + // The bundled list includes non-EVM tokens (e.g. Solana with base58 addresses) + // alongside EVM tokens. Non-EVM entries are filtered out downstream by useTokenLists + // via safeParse. Here we validate only the EVM-addressable subset. + const evmTokens = result.tokens.filter(({ address }) => /^0x[a-fA-F0-9]{40}$/.test(address)) + expect(evmTokens.length).toBeGreaterThan(0) + for (const token of evmTokens) { + expect(() => tokenSchema.parse(token)).not.toThrow() + } + expect(mockFetch).not.toHaveBeenCalled() + }) + }) +}) + describe('useTokenLists', () => { it('returns tokens and tokensByChainId', () => { vi.mocked(tanstackQuery.useSuspenseQueries).mockReturnValueOnce( @@ -114,6 +222,30 @@ describe('useTokenLists', () => { expect(nativeToken?.symbol).toBe('ETH') }) + it('filters out tokens whose chainId is not present in viem/chains and does not log', () => { + // biome-ignore lint/suspicious/noExplicitAny: mocking internal combine param + vi.mocked(tanstackQuery.useSuspenseQueries).mockImplementation(({ combine }: any) => { + const ropstenToken: Token = { + address: '0xB4FBF271143F4FBf7B91A5ded31805e42b2208d6', + chainId: 3, + decimals: 18, + name: 'Wrapped Ether (Ropsten)', + symbol: 'WETH', + } + return combine([mockSuspenseQueryResult([mockToken1, ropstenToken])]) + }) + + const errorSpy = vi.spyOn(console, 'error').mockImplementation(() => {}) + const { result } = renderHook(() => useTokenLists(), { wrapper }) + + expect(result.current.tokens.some((t) => t.chainId === 3)).toBe(false) + expect(result.current.tokensByChainId[3]).toBeUndefined() + expect(errorSpy).not.toHaveBeenCalled() + expect(result.current.tokens.some((t) => t.address === mockToken1.address)).toBe(true) + + errorSpy.mockRestore() + }) + it('filters out tokens that fail schema validation', () => { // biome-ignore lint/suspicious/noExplicitAny: mocking internal combine param vi.mocked(tanstackQuery.useSuspenseQueries).mockImplementation(({ combine }: any) => { diff --git a/src/hooks/useTokenLists.ts b/src/hooks/useTokenLists.ts index 79009d9b..38c4397c 100644 --- a/src/hooks/useTokenLists.ts +++ b/src/hooks/useTokenLists.ts @@ -1,18 +1,22 @@ -import { useMemo } from 'react' - import { type UseSuspenseQueryOptions, type UseSuspenseQueryResult, useSuspenseQueries, } from '@tanstack/react-query' import defaultTokens from '@uniswap/default-token-list' +import { useMemo } from 'react' import * as chains from 'viem/chains' -import { tokenLists } from '@/src/constants/tokenLists' +import { bundledTokenLists, tokenLists } from '@/src/constants/tokenLists' import { env } from '@/src/env' import { type Token, type TokenList, tokenSchema } from '@/src/types/token' import { logger } from '@/src/utils/logger' -import tokenListsCache, { updateTokenListsCache, type TokensMap } from '@/src/utils/tokenListsCache' +import tokenListsCache, { type TokensMap, updateTokenListsCache } from '@/src/utils/tokenListsCache' + +const chainsById: Map<number, (typeof chains)[keyof typeof chains]> = new Map() +for (const chain of Object.values(chains)) { + if (!chainsById.has(chain.id)) chainsById.set(chain.id, chain) +} /** * Loads and processes token lists from configured sources @@ -59,13 +63,23 @@ export const useTokenLists = (): TokensMap => { return env.PUBLIC_USE_DEFAULT_TOKENS ? ['default', ...urls] : urls }, []) + const enabledBundledLists = useMemo(() => bundledTokenLists.filter((b) => b.enabled), []) + return useSuspenseQueries({ - queries: tokenListUrls.map<UseSuspenseQueryOptions<TokenList>>((url) => ({ - queryKey: ['tokens-list', url], - queryFn: () => fetchTokenList(url), - staleTime: Number.POSITIVE_INFINITY, - gcTime: Number.POSITIVE_INFINITY, - })), + queries: [ + ...tokenListUrls.map<UseSuspenseQueryOptions<TokenList>>((url) => ({ + queryKey: ['tokens-list', url], + queryFn: () => fetchTokenList(url), + staleTime: 60 * 60 * 1000, + gcTime: 60 * 60 * 1000, + })), + ...enabledBundledLists.map<UseSuspenseQueryOptions<TokenList>>((b) => ({ + queryKey: ['tokens-list', b.key], + queryFn: () => Promise.resolve(b.list), + staleTime: Number.POSITIVE_INFINITY, + gcTime: Number.POSITIVE_INFINITY, + })), + ], combine: combineTokenLists, }) } @@ -99,12 +113,11 @@ function combineTokenLists(results: Array<UseSuspenseQueryResult<TokenList>>): T new Map( results .flatMap((result) => result.data.tokens) - // ensure that only valid tokens are consumed in runtime - .filter((token) => { - const result = tokenSchema.safeParse(token) - - return result.success - }) + // tokenSchema enforces EVM address format, so non-EVM entries (e.g. Solana in + // @uniswap/default-token-list v18+) are dropped. Tokens on chainIds absent from + // viem/chains are also dropped, so buildNativeToken cannot throw and + // tokensByChainId never accumulates unreachable buckets. + .filter((token) => tokenSchema.safeParse(token).success && chainsById.has(token.chainId)) .map((token) => [tokenKey(token), token]), ).values(), ) @@ -114,18 +127,9 @@ function combineTokenLists(results: Array<UseSuspenseQueryResult<TokenList>>): T const tokensMap = uniqueTokens.reduce<TokensMap>( (acc, token) => { if (!acc.tokensByChainId[token.chainId]) { - try { - // if there's a native token for the chain - const nativeToken = buildNativeToken(token.chainId) - - // add it to the list - acc.tokensByChainId[token.chainId] = [nativeToken] - acc.tokens.push(nativeToken) - } catch (err) { - console.error(err) - // if there's no native token for the chain, ignore the error - acc.tokensByChainId[token.chainId] = [] - } + const nativeToken = buildNativeToken(token.chainId) + acc.tokensByChainId[token.chainId] = [nativeToken] + acc.tokens.push(nativeToken) } acc.tokens.push(token) @@ -145,26 +149,48 @@ function combineTokenLists(results: Array<UseSuspenseQueryResult<TokenList>>): T return tokensMap } +const emptyTokenList: TokenList = { + name: '', + timestamp: '', + version: { major: 0, minor: 0, patch: 0 }, + tokens: [], +} + /** - * A wrapper around fetch, to return the parsed JSON or throw an error if something goes wrong + * Fetches a token list from a URL. Returns an empty token list on failure + * instead of throwing, so one broken source doesn't block the entire app. * - * @param url - a link to a list of tokens or 'default' to use the list added as a dependency to the project - * @returns {Promise<TokenList>} a token list + * @param url - a link to a list of tokens or 'default' to use the bundled list + * @returns a token list (empty on failure) */ -async function fetchTokenList(url: string): Promise<TokenList> { +export async function fetchTokenList(url: string): Promise<TokenList> { if (url === 'default') { return defaultTokens as TokenList } - const result = await fetch(url) + try { + const result = await fetch(url) + + if (!result.ok) { + console.warn(`Token list fetch failed for ${url}: HTTP ${result.status} ${result.statusText}`) + return emptyTokenList + } - if (!result.ok) { - throw new Error( - `Something went wrong. HTTP status code: ${result.status}. Status Message: ${result.statusText}`, + const data = await result.json() + + if (!data || typeof data !== 'object' || !Array.isArray(data.tokens)) { + console.warn(`Token list fetch for ${url} returned invalid schema; expected a tokens array.`) + return emptyTokenList + } + + return data as TokenList + } catch (error) { + console.warn( + `Token list fetch failed for ${url}:`, + error instanceof Error ? error.message : error, ) + return emptyTokenList } - - return result.json() } /** @@ -174,7 +200,7 @@ async function fetchTokenList(url: string): Promise<TokenList> { * @returns The native token object. */ function buildNativeToken(chainId: Token['chainId']): Token { - const tokenInfo = Object.values(chains).find((chain) => chain.id === chainId)?.nativeCurrency + const tokenInfo = chainsById.get(chainId)?.nativeCurrency if (!tokenInfo) { throw new Error(`Native token not found for chain ID: ${chainId}`) diff --git a/src/hooks/useTokens.test.ts b/src/hooks/useTokens.test.ts new file mode 100644 index 00000000..b2b17906 --- /dev/null +++ b/src/hooks/useTokens.test.ts @@ -0,0 +1,220 @@ +import type { TokenAmount, TokensResponse } from '@lifi/sdk' +import { zeroAddress } from 'viem' +import { describe, expect, it, vi } from 'vitest' +import type { Token, Tokens } from '@/src/types/token' +import { updateTokensBalances, updateTokensWithRawBalances } from './useTokens' + +// Mimic a setup that overrides PUBLIC_NATIVE_TOKEN_ADDRESS to the Aave-style sentinel +// (0xEeee...), which env.ts lowercases. The merge must bridge this back to LI.FI's +// zero-address convention. +const { LOCAL_NATIVE } = vi.hoisted(() => ({ + LOCAL_NATIVE: '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', +})) + +vi.mock('@/src/env', () => ({ + env: { PUBLIC_NATIVE_TOKEN_ADDRESS: LOCAL_NATIVE, PUBLIC_APP_NAME: 'test' }, +})) + +const usdcAddress = '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48' + +const localTokens: Tokens = [ + { chainId: 1, address: LOCAL_NATIVE, name: 'Ether', symbol: 'ETH', decimals: 18 }, + { chainId: 1, address: usdcAddress, name: 'USD Coin', symbol: 'USDC', decimals: 6 }, +] + +const makeLifiToken = (address: string, symbol: string, decimals: number, priceUSD: string) => ({ + chainId: 1, + address, + symbol, + name: symbol, + decimals, + priceUSD, +}) + +const daiAddress = '0x6B175474E89094C44Da98b954EedeAC495271d0F' + +describe('updateTokensBalances', () => { + const threeTokens: Tokens = [ + { chainId: 1, address: LOCAL_NATIVE, name: 'Ether', symbol: 'ETH', decimals: 18 }, + { chainId: 1, address: usdcAddress, name: 'USD Coin', symbol: 'USDC', decimals: 6 }, + { chainId: 1, address: daiAddress, name: 'Dai', symbol: 'DAI', decimals: 18 }, + ] + it('merges LI.FI native balance onto a local native token that uses a non-zero sentinel', () => { + const prices: TokensResponse = { + tokens: { + 1: [ + makeLifiToken(zeroAddress, 'ETH', 18, '2300'), + makeLifiToken(usdcAddress, 'USDC', 6, '1'), + ], + }, + } + const balances: TokenAmount[] = [ + { ...makeLifiToken(zeroAddress, 'ETH', 18, '2300'), amount: 1_758_640_884_554_030_066n }, + { ...makeLifiToken(usdcAddress, 'USDC', 6, '1'), amount: 5_000_000n }, + ] + + const { tokens } = updateTokensBalances(localTokens, [balances, prices]) + + const eth = tokens.find((t: Token) => t.address === LOCAL_NATIVE) + const usdc = tokens.find((t: Token) => t.address === usdcAddress) + + expect(eth?.extensions?.balance).toBe(1_758_640_884_554_030_066n) + expect(eth?.extensions?.priceUSD).toBe('2300') + expect(usdc?.extensions?.balance).toBe(5_000_000n) + expect(usdc?.extensions?.priceUSD).toBe('1') + }) + + it('falls back to zero balance when LI.FI has no data for a local token', () => { + const prices: TokensResponse = { tokens: { 1: [] } } + const balances: TokenAmount[] = [] + + const { tokens } = updateTokensBalances(localTokens, [balances, prices]) + + for (const token of tokens) { + expect(token.extensions?.balance).toBe(0n) + expect(token.extensions?.priceUSD).toBe('0') + } + }) + + it('places tokens with positive balance before zero-balance tokens', () => { + const prices: TokensResponse = { + tokens: { + 1: [ + makeLifiToken(LOCAL_NATIVE, 'ETH', 18, '2300'), + makeLifiToken(usdcAddress, 'USDC', 6, '1'), + makeLifiToken(daiAddress, 'DAI', 18, '1'), + ], + }, + } + const balances: TokenAmount[] = [ + { ...makeLifiToken(LOCAL_NATIVE, 'ETH', 18, '2300'), amount: 0n }, + { ...makeLifiToken(usdcAddress, 'USDC', 6, '1'), amount: 5_000_000n }, + { ...makeLifiToken(daiAddress, 'DAI', 18, '1'), amount: 0n }, + ] + + const { tokens } = updateTokensBalances(threeTokens, [balances, prices]) + + expect(tokens[0].symbol).toBe('USDC') + expect(tokens[1].symbol).toBe('ETH') + expect(tokens[2].symbol).toBe('DAI') + }) + + it('zero-balance tokens retain source order among themselves', () => { + const prices: TokensResponse = { + tokens: { + 1: [ + makeLifiToken(LOCAL_NATIVE, 'ETH', 18, '2300'), + makeLifiToken(usdcAddress, 'USDC', 6, '1'), + makeLifiToken(daiAddress, 'DAI', 18, '1'), + ], + }, + } + const balances: TokenAmount[] = [] + + const { tokens } = updateTokensBalances(threeTokens, [balances, prices]) + + expect(tokens[0].symbol).toBe('ETH') + expect(tokens[1].symbol).toBe('USDC') + expect(tokens[2].symbol).toBe('DAI') + }) + + it('preserves source order when sortByBalance is false', () => { + const prices: TokensResponse = { + tokens: { + 1: [ + makeLifiToken(LOCAL_NATIVE, 'ETH', 18, '2300'), + makeLifiToken(usdcAddress, 'USDC', 6, '1'), + makeLifiToken(daiAddress, 'DAI', 18, '1'), + ], + }, + } + const balances: TokenAmount[] = [ + { ...makeLifiToken(LOCAL_NATIVE, 'ETH', 18, '2300'), amount: 0n }, + { ...makeLifiToken(usdcAddress, 'USDC', 6, '1'), amount: 5_000_000n }, + { ...makeLifiToken(daiAddress, 'DAI', 18, '1'), amount: 0n }, + ] + + const { tokens } = updateTokensBalances(threeTokens, [balances, prices], { + sortByBalance: false, + }) + + expect(tokens[0].symbol).toBe('ETH') + expect(tokens[1].symbol).toBe('USDC') + expect(tokens[2].symbol).toBe('DAI') + }) +}) + +describe('updateTokensWithRawBalances', () => { + it('places tokens with positive balance before zero-balance tokens', () => { + const rawBalances: Record<number, Record<string, bigint>> = { + 11155111: { + [LOCAL_NATIVE]: 2_000_000_000_000_000_000n, + [usdcAddress]: 0n, + }, + } + const sepoliaTokens: Tokens = [ + { chainId: 11155111, address: LOCAL_NATIVE, name: 'Ether', symbol: 'ETH', decimals: 18 }, + { chainId: 11155111, address: usdcAddress, name: 'USD Coin', symbol: 'USDC', decimals: 6 }, + ] + + const { tokens } = updateTokensWithRawBalances(sepoliaTokens, rawBalances) + + expect(tokens[0].symbol).toBe('ETH') + expect(tokens[1].symbol).toBe('USDC') + }) + + it('zero-balance tokens retain source order', () => { + const rawBalances: Record<number, Record<string, bigint>> = { + 11155111: { + [LOCAL_NATIVE]: 0n, + [usdcAddress]: 0n, + [daiAddress]: 0n, + }, + } + const sepoliaTokens: Tokens = [ + { chainId: 11155111, address: LOCAL_NATIVE, name: 'Ether', symbol: 'ETH', decimals: 18 }, + { chainId: 11155111, address: usdcAddress, name: 'USD Coin', symbol: 'USDC', decimals: 6 }, + { chainId: 11155111, address: daiAddress, name: 'Dai', symbol: 'DAI', decimals: 18 }, + ] + + const { tokens } = updateTokensWithRawBalances(sepoliaTokens, rawBalances) + + expect(tokens[0].symbol).toBe('ETH') + expect(tokens[1].symbol).toBe('USDC') + expect(tokens[2].symbol).toBe('DAI') + }) + + it('sets balance extension but omits priceUSD so the balance column shows N/A', () => { + const rawBalances: Record<number, Record<string, bigint>> = { + 11155111: { [LOCAL_NATIVE]: 500n }, + } + const sepoliaTokens: Tokens = [ + { chainId: 11155111, address: LOCAL_NATIVE, name: 'Ether', symbol: 'ETH', decimals: 18 }, + ] + + const { tokens } = updateTokensWithRawBalances(sepoliaTokens, rawBalances) + + expect(tokens[0].extensions?.balance).toBe(500n) + expect(tokens[0].extensions?.priceUSD).toBeUndefined() + }) + + it('preserves source order when sortByBalance is false', () => { + const rawBalances: Record<number, Record<string, bigint>> = { + 11155111: { + [LOCAL_NATIVE]: 0n, + [usdcAddress]: 1_000_000n, + }, + } + const sepoliaTokens: Tokens = [ + { chainId: 11155111, address: LOCAL_NATIVE, name: 'Ether', symbol: 'ETH', decimals: 18 }, + { chainId: 11155111, address: usdcAddress, name: 'USD Coin', symbol: 'USDC', decimals: 6 }, + ] + + const { tokens } = updateTokensWithRawBalances(sepoliaTokens, rawBalances, { + sortByBalance: false, + }) + + expect(tokens[0].symbol).toBe('ETH') + expect(tokens[1].symbol).toBe('USDC') + }) +}) diff --git a/src/hooks/useTokens.ts b/src/hooks/useTokens.ts index ba4e4a7a..95338b9b 100644 --- a/src/hooks/useTokens.ts +++ b/src/hooks/useTokens.ts @@ -1,21 +1,23 @@ -import { useMemo } from 'react' - import { - EVM, - type TokenAmount, - type TokensResponse, createConfig, + EVM, getChains, getTokenBalances, getTokens, + type TokenAmount, + type TokensResponse, } from '@lifi/sdk' import { useQuery } from '@tanstack/react-query' -import { type Address, type Chain, formatUnits } from 'viem' +import { useMemo } from 'react' +import { type Address, type Chain, erc20Abi, formatUnits, getAddress } from 'viem' +import { usePublicClient } from 'wagmi' import { env } from '@/src/env' import { useTokenLists } from '@/src/hooks/useTokenLists' import { useWeb3Status } from '@/src/hooks/useWeb3Status' +import { lifiRpcUrls } from '@/src/lib/networks.config' import type { Token, Tokens } from '@/src/types/token' +import { isNativeToken, toLocalNativeAddress } from '@/src/utils/address' import { logger } from '@/src/utils/logger' import type { TokensMap } from '@/src/utils/tokenListsCache' @@ -25,6 +27,7 @@ const BALANCE_EXPIRATION_TIME = 32_000 export const lifiConfig = createConfig({ integrator: env.PUBLIC_APP_NAME, providers: [EVM()], + rpcUrls: lifiRpcUrls, }) /** @@ -38,15 +41,21 @@ export const lifiConfig = createConfig({ * - Automatic sorting by token value (balance × price) * - Periodic refetching for up-to-date balances and prices * + * On chains not covered by LI.FI (e.g. Sepolia), balance fetching falls back to a + * direct on-chain multicall. In this mode `priceUSD` is absent from token extensions, + * so any UI that reads `extensions.priceUSD` should treat `undefined` as "N/A". + * * @param {Object} params - Parameters for tokens fetching * @param {Address} [params.account] - Account address for balance fetching (defaults to connected wallet) * @param {Chain['id']} [params.chainId] - Specific chain ID to filter tokens (defaults to all supported chains) * @param {boolean} [params.withBalance=true] - Whether to fetch token balances + * @param {boolean} [params.sortByBalance=true] - Whether to sort tokens by balance. When false, source order is preserved even if balances are fetched. * * @returns {Object} Token data and loading state * @returns {Token[]} returns.tokens - Array of tokens with price and balance information * @returns {Record<number, Token[]>} returns.tokensByChainId - Tokens organized by chain ID * @returns {boolean} returns.isLoadingBalances - Loading state for token balances and prices + * @returns {boolean} returns.isLoadingPrices - Loading state for token prices only * * @example * ```tsx @@ -70,8 +79,15 @@ export const useTokens = ( account, chainId, withBalance, - }: { account?: Address; chainId?: Chain['id']; withBalance?: boolean } = { + sortByBalance = true, + }: { + account?: Address + chainId?: Chain['id'] + withBalance?: boolean + sortByBalance?: boolean + } = { withBalance: true, + sortByBalance: true, }, ) => { const { address } = useWeb3Status() @@ -91,7 +107,7 @@ export const useTokens = ( const dAppChainsId = chainId ? [chainId] - : Object.keys(tokensData.tokensByChainId).map((id) => Number.parseInt(id)) + : Object.keys(tokensData.tokensByChainId).map((id) => Number.parseInt(id, 10)) const lifiChainsId = chains?.map((chain) => chain.id) ?? [] const chainsToFetch = dAppChainsId.filter((id) => lifiChainsId.includes(id)) @@ -101,51 +117,115 @@ export const useTokens = ( staleTime: BALANCE_EXPIRATION_TIME, refetchInterval: BALANCE_EXPIRATION_TIME, gcTime: Number.POSITIVE_INFINITY, - enabled: canFetchBalance && !!chains, + enabled: canFetchBalance && chainsToFetch.length > 0, }) const { data: tokensBalances, isLoading: isLoadingBalances } = useQuery({ queryKey: ['lifi', 'tokens', 'balances', account, chainsToFetch], queryFn: () => getTokenBalances( - // biome-ignore lint/style/noNonNullAssertion: <explanation> + // biome-ignore lint/style/noNonNullAssertion: guarded by enabled: canFetchBalance && !!tokensPricesByChain account!, - // biome-ignore lint/style/noNonNullAssertion: <explanation> + // biome-ignore lint/style/noNonNullAssertion: guarded by enabled: canFetchBalance && !!tokensPricesByChain Object.entries(tokensPricesByChain!.tokens) - .filter(([chainId]) => chainsToFetch.includes(Number.parseInt(chainId))) + .filter(([chainId]) => chainsToFetch.includes(Number.parseInt(chainId, 10))) .flatMap(([, tokens]) => tokens), ), staleTime: BALANCE_EXPIRATION_TIME, refetchInterval: BALANCE_EXPIRATION_TIME, gcTime: Number.POSITIVE_INFINITY, - enabled: canFetchBalance && !!tokensPricesByChain, + enabled: canFetchBalance && !!tokensPricesByChain && chainsToFetch.length > 0, + }) + + // Multicall fallback: used when a specific chain is provided and LI.FI does not + // cover it (e.g. Sepolia). We wait for the LI.FI chains list to load so we can + // confirm the chain is absent before triggering on-chain calls. + const publicClient = usePublicClient({ chainId }) + const useOnchainFallback = + canFetchBalance && !!chainId && !isLoadingChains && !!chains && !lifiChainsId.includes(chainId) + + const { data: onchainBalances, isLoading: isLoadingOnchainBalances } = useQuery({ + queryKey: ['onchain', 'balances', account, chainId], + queryFn: async () => { + // biome-ignore lint/style/noNonNullAssertion: chainId guarded by enabled: useOnchainFallback + const tokensForChain = tokensData.tokensByChainId[chainId!] ?? [] + const nativeTokens = tokensForChain.filter((t) => isNativeToken(t.address)) + const erc20Tokens = tokensForChain.filter((t) => !isNativeToken(t.address)) + + const balances: Record<string, bigint> = {} + + const nativeResults = await Promise.all( + nativeTokens.map((t) => + // biome-ignore lint/style/noNonNullAssertion: publicClient and account guarded by enabled: useOnchainFallback && !!publicClient + publicClient!.getBalance({ address: account! as Address }).then((b) => ({ t, b })), + ), + ) + for (const { t, b } of nativeResults) { + balances[t.address.toLowerCase()] = b + } + + if (erc20Tokens.length > 0) { + // biome-ignore lint/style/noNonNullAssertion: publicClient and account guarded by enabled: useOnchainFallback && !!publicClient + const results = await publicClient!.multicall({ + contracts: erc20Tokens.map((token) => ({ + address: getAddress(token.address), + abi: erc20Abi, + functionName: 'balanceOf' as const, + // biome-ignore lint/style/noNonNullAssertion: account guarded by enabled: useOnchainFallback + args: [account! as Address], + })), + }) + results.forEach((result, i) => { + balances[erc20Tokens[i].address.toLowerCase()] = + result.status === 'success' ? (result.result as bigint) : 0n + }) + } + + return balances + }, + staleTime: BALANCE_EXPIRATION_TIME, + refetchInterval: BALANCE_EXPIRATION_TIME, + gcTime: Number.POSITIVE_INFINITY, + enabled: useOnchainFallback && !!publicClient, }) const cache = useMemo(() => { - if ( - withBalance && - account && - !isLoadingPrices && - !isLoadingBalances && - tokensBalances && - tokensPricesByChain - ) { - return udpateTokensBalances(tokensData.tokens, [tokensBalances, tokensPricesByChain]) + if (withBalance && account) { + if (!isLoadingPrices && !isLoadingBalances && tokensBalances && tokensPricesByChain) { + return updateTokensBalances(tokensData.tokens, [tokensBalances, tokensPricesByChain], { + sortByBalance, + }) + } + if (useOnchainFallback && !isLoadingOnchainBalances && onchainBalances && chainId) { + return updateTokensWithRawBalances( + tokensData.tokens, + { [chainId]: onchainBalances }, + { sortByBalance }, + ) + } } return tokensData }, [ account, + chainId, isLoadingBalances, + isLoadingOnchainBalances, isLoadingPrices, + onchainBalances, + sortByBalance, tokensBalances, tokensData, tokensPricesByChain, + useOnchainFallback, withBalance, ]) return { ...cache, - isLoadingBalances: Boolean(isLoadingChains || isLoadingBalances || isLoadingPrices), + isLoadingBalances: Boolean( + isLoadingChains || isLoadingBalances || isLoadingPrices || isLoadingOnchainBalances, + ), + isLoadingPrices: Boolean(isLoadingChains || isLoadingPrices), } } @@ -156,7 +236,11 @@ export const useTokens = ( * @param results - The results containing the balance tokens and prices. * @returns An object containing the updated tokens and tokens grouped by chain ID. */ -function udpateTokensBalances(tokens: Tokens, results: [Array<TokenAmount>, TokensResponse]) { +export function updateTokensBalances( + tokens: Tokens, + results: [Array<TokenAmount>, TokensResponse], + { sortByBalance = true }: { sortByBalance?: boolean } = {}, +) { const [balanceTokens, prices] = results logger.time('extending tokens with balance info') @@ -164,9 +248,8 @@ function udpateTokensBalances(tokens: Tokens, results: [Array<TokenAmount>, Toke (acc, [chainId, tokens]) => { acc[chainId] = {} - // biome-ignore lint/complexity/noForEach: <explanation> tokens.forEach((token) => { - acc[chainId][token.address] = token.priceUSD ?? '0' + acc[chainId][toLocalNativeAddress(token.address)] = token.priceUSD ?? '0' }) return acc @@ -180,7 +263,8 @@ function udpateTokensBalances(tokens: Tokens, results: [Array<TokenAmount>, Toke acc[balanceToken.chainId] = {} } - acc[balanceToken.chainId][balanceToken.address] = balanceToken.amount ?? 0n + acc[balanceToken.chainId][toLocalNativeAddress(balanceToken.address)] = + balanceToken.amount ?? 0n return acc }, @@ -201,9 +285,11 @@ function udpateTokensBalances(tokens: Tokens, results: [Array<TokenAmount>, Toke }) logger.timeEnd('extending tokens with balance info') - logger.time('sorting tokens by balance') - tokensWithBalances.sort(sortFn) - logger.timeEnd('sorting tokens by balance') + if (sortByBalance) { + logger.time('sorting tokens by balance') + tokensWithBalances.sort(sortFn) + logger.timeEnd('sorting tokens by balance') + } logger.time('updating tokens cache') const tokensByChain = tokensWithBalances.reduce( @@ -217,10 +303,53 @@ function udpateTokensBalances(tokens: Tokens, results: [Array<TokenAmount>, Toke }, {} as TokensMap['tokensByChainId'], ) + logger.timeEnd('updating tokens cache') return { tokens: tokensWithBalances, tokensByChainId: tokensByChain } } +/** + * Updates tokens with raw on-chain balances (no price data), sorting tokens with + * a positive balance before zero-balance tokens. Within each group, source order + * is preserved. Used as a fallback for chains not covered by LI.FI. + * + * @param tokens - The array of tokens to enrich. + * @param rawBalances - Map of `chainId → address → bigint balance`. + * @returns Updated tokens and tokens grouped by chain ID. + */ +export function updateTokensWithRawBalances( + tokens: Tokens, + rawBalances: Record<number, Record<string, bigint>>, + { sortByBalance = true }: { sortByBalance?: boolean } = {}, +) { + const tokensWithBalances = tokens.map( + (token): Token => ({ + ...token, + extensions: { + balance: rawBalances[token.chainId]?.[token.address.toLowerCase()] ?? 0n, + }, + }), + ) + + if (sortByBalance) { + tokensWithBalances.sort(sortByBalancePresenceFn) + } + + const tokensByChainId = tokensWithBalances.reduce( + (acc, token) => { + if (!acc[token.chainId]) { + acc[token.chainId] = [token] + } else { + acc[token.chainId].push(token) + } + return acc + }, + {} as Record<number, Token[]>, + ) + + return { tokens: tokensWithBalances, tokensByChainId } +} + /** * A sorting function used to sort tokens by balance. * @param a The first token. @@ -236,3 +365,13 @@ function sortFn(a: Token, b: Token) { Number.parseFloat((a.extensions?.priceUSD as string) ?? '0') ) } + +/** + * Sorts tokens so those with a positive balance come first, preserving source + * order within each group. Used when USD price data is unavailable. + */ +function sortByBalancePresenceFn(a: Token, b: Token) { + const aHas = ((a.extensions?.balance as bigint) ?? 0n) > 0n ? 1 : 0 + const bHas = ((b.extensions?.balance as bigint) ?? 0n) > 0n ? 1 : 0 + return bHas - aHas +} diff --git a/src/hooks/useWalletStatus.test.ts b/src/hooks/useWalletStatus.test.ts new file mode 100644 index 00000000..63ba8c2c --- /dev/null +++ b/src/hooks/useWalletStatus.test.ts @@ -0,0 +1,163 @@ +import { renderHook } from '@testing-library/react' +import { beforeEach, describe, expect, it, vi } from 'vitest' +import { useWalletStatus } from './useWalletStatus' + +// Mock useWeb3Status +const mockSwitchChain = vi.fn() +const mockDisconnect = vi.fn() + +vi.mock('@/src/hooks/useWeb3Status', () => ({ + useWeb3Status: vi.fn(() => ({ + appChainId: 1, + isWalletConnected: false, + isWalletSynced: false, + switchChain: mockSwitchChain, + walletChainId: undefined, + })), +})) + +vi.mock('@/src/lib/networks.config', () => ({ + chains: [ + { id: 1, name: 'Ethereum' }, + { id: 10, name: 'OP Mainnet' }, + { id: 137, name: 'Polygon' }, + ], +})) + +vi.mock('viem', async () => { + const actual = await vi.importActual('viem') + return { + ...actual, + extractChain: vi.fn(({ chains, id }) => { + const chain = chains.find((c: { id: number }) => c.id === id) + if (!chain) { + throw new Error(`Chain with id ${id} not found`) + } + return chain + }), + } +}) + +// Import after mocks are set up +const { useWeb3Status } = await import('@/src/hooks/useWeb3Status') +const mockedUseWeb3Status = vi.mocked(useWeb3Status) + +const baseWeb3Status: ReturnType<typeof useWeb3Status> = { + readOnlyClient: undefined, + appChainId: 1, + address: undefined, + balance: undefined, + connectingWallet: false, + switchingChain: false, + isWalletConnected: false, + walletClient: undefined, + isWalletSynced: false, + walletChainId: undefined, + switchChain: mockSwitchChain, + disconnect: mockDisconnect, +} + +describe('useWalletStatus', () => { + beforeEach(() => { + vi.clearAllMocks() + }) + + it('returns needsConnect when wallet is not connected', () => { + mockedUseWeb3Status.mockReturnValue({ + ...baseWeb3Status, + appChainId: 1, + isWalletConnected: false, + isWalletSynced: false, + walletChainId: undefined, + }) + + const { result } = renderHook(() => useWalletStatus()) + + expect(result.current.needsConnect).toBe(true) + expect(result.current.needsChainSwitch).toBe(false) + expect(result.current.isReady).toBe(false) + }) + + it('returns needsChainSwitch when connected but on wrong chain', () => { + mockedUseWeb3Status.mockReturnValue({ + ...baseWeb3Status, + appChainId: 1, + isWalletConnected: true, + isWalletSynced: false, + walletChainId: 137, + }) + + const { result } = renderHook(() => useWalletStatus()) + + expect(result.current.needsConnect).toBe(false) + expect(result.current.needsChainSwitch).toBe(true) + expect(result.current.isReady).toBe(false) + expect(result.current.targetChain).toEqual({ id: 1, name: 'Ethereum' }) + expect(result.current.targetChainId).toBe(1) + }) + + it('returns isReady when connected and on correct chain', () => { + mockedUseWeb3Status.mockReturnValue({ + ...baseWeb3Status, + appChainId: 1, + isWalletConnected: true, + isWalletSynced: true, + walletChainId: 1, + }) + + const { result } = renderHook(() => useWalletStatus()) + + expect(result.current.needsConnect).toBe(false) + expect(result.current.needsChainSwitch).toBe(false) + expect(result.current.isReady).toBe(true) + expect(result.current.web3Status).toBeDefined() + expect(result.current.web3Status.appChainId).toBe(1) + expect(result.current.web3Status.isWalletConnected).toBe(true) + }) + + it('uses provided chainId over appChainId', () => { + mockedUseWeb3Status.mockReturnValue({ + ...baseWeb3Status, + appChainId: 1, + isWalletConnected: true, + isWalletSynced: true, + walletChainId: 1, + }) + + const { result } = renderHook(() => useWalletStatus({ chainId: 10 })) + + expect(result.current.needsChainSwitch).toBe(true) + expect(result.current.isReady).toBe(false) + expect(result.current.targetChain).toEqual({ id: 10, name: 'OP Mainnet' }) + expect(result.current.targetChainId).toBe(10) + }) + + it('falls back to chains[0].id when no chainId or appChainId', () => { + mockedUseWeb3Status.mockReturnValue({ + ...baseWeb3Status, + appChainId: undefined as unknown as ReturnType<typeof useWeb3Status>['appChainId'], + isWalletConnected: true, + isWalletSynced: false, + walletChainId: 137, + }) + + const { result } = renderHook(() => useWalletStatus()) + + expect(result.current.targetChain).toEqual({ id: 1, name: 'Ethereum' }) + }) + + it('switchChain calls through to useWeb3Status switchChain', () => { + mockedUseWeb3Status.mockReturnValue({ + ...baseWeb3Status, + appChainId: 1, + isWalletConnected: true, + isWalletSynced: false, + walletChainId: 137, + }) + + const { result } = renderHook(() => useWalletStatus()) + + result.current.switchChain(10) + expect(mockSwitchChain).toHaveBeenCalledWith(10) + }) +}) diff --git a/src/hooks/useWalletStatus.ts b/src/hooks/useWalletStatus.ts new file mode 100644 index 00000000..0a769bab --- /dev/null +++ b/src/hooks/useWalletStatus.ts @@ -0,0 +1,41 @@ +import type { Chain } from 'viem' +import { extractChain } from 'viem' + +import { useWeb3Status, type Web3Status } from '@/src/hooks/useWeb3Status' +import { type ChainsIds, chains } from '@/src/lib/networks.config' + +interface UseWalletStatusOptions { + chainId?: ChainsIds +} + +interface WalletStatus { + isReady: boolean + needsConnect: boolean + needsChainSwitch: boolean + targetChain: Chain + targetChainId: ChainsIds + switchChain: (chainId: ChainsIds) => void + web3Status: Web3Status +} + +export const useWalletStatus = (options?: UseWalletStatusOptions): WalletStatus => { + const web3Status = useWeb3Status() + const { appChainId, isWalletConnected, isWalletSynced, switchChain, walletChainId } = web3Status + + const targetChainId = options?.chainId ?? appChainId ?? chains[0].id + const targetChain = extractChain({ chains, id: targetChainId }) + + const needsConnect = !isWalletConnected + const needsChainSwitch = isWalletConnected && (!isWalletSynced || walletChainId !== targetChainId) + const isReady = isWalletConnected && !needsChainSwitch + + return { + isReady, + needsConnect, + needsChainSwitch, + targetChain, + targetChainId, + switchChain, + web3Status, + } +} diff --git a/src/hooks/useWeb3Status.test.ts b/src/hooks/useWeb3Status.test.ts index 1010ea0b..02e71aec 100644 --- a/src/hooks/useWeb3Status.test.ts +++ b/src/hooks/useWeb3Status.test.ts @@ -1,7 +1,9 @@ import { renderHook } from '@testing-library/react' +import { createElement } from 'react' import type { Address } from 'viem' import { beforeEach, describe, expect, it, vi } from 'vitest' -import { useWeb3Status, useWeb3StatusConnected } from './useWeb3Status' +import { useWeb3StatusConnected } from '@/src/components/sharedComponents/WalletStatusVerifier' +import { useWeb3Status } from './useWeb3Status' const mockDisconnect = vi.fn() const mockSwitchChain = vi.fn() @@ -21,7 +23,27 @@ vi.mock('wagmi', () => ({ useDisconnect: vi.fn(() => ({ disconnect: mockDisconnect })), })) +vi.mock('@/src/hooks/useWalletStatus', () => ({ + useWalletStatus: vi.fn(() => ({ + isReady: false, + needsConnect: true, + needsChainSwitch: false, + targetChain: { id: 1, name: 'Ethereum' }, + targetChainId: 1, + switchChain: vi.fn(), + })), +})) + +vi.mock('@/src/providers/Web3Provider', () => ({ + ConnectWalletButton: () => + createElement('button', { type: 'button', 'data-testid': 'connect-wallet-button' }, 'Connect'), +})) + import * as wagmi from 'wagmi' +import { WalletStatusVerifier } from '@/src/components/sharedComponents/WalletStatusVerifier' + +const { useWalletStatus } = await import('@/src/hooks/useWalletStatus') +const mockedUseWalletStatus = vi.mocked(useWalletStatus) type MockAccount = ReturnType<typeof wagmi.useAccount> type MockSwitchChain = ReturnType<typeof wagmi.useSwitchChain> @@ -107,20 +129,39 @@ describe('useWeb3Status', () => { describe('useWeb3StatusConnected', () => { it('throws when wallet is not connected', () => { expect(() => renderHook(() => useWeb3StatusConnected())).toThrow( - 'Use useWeb3StatusConnected only when a wallet is connected', + 'useWeb3StatusConnected must be used inside a <WalletStatusVerifier> component.', ) }) it('returns status when wallet is connected', () => { - const mock = { - address: '0xdeadbeef' as Address, - chainId: 1, - isConnected: true, - isConnecting: false, - } as unknown as MockAccount - // useWeb3StatusConnected calls useWeb3Status twice; both calls must see connected state - vi.mocked(wagmi.useAccount).mockReturnValueOnce(mock).mockReturnValueOnce(mock) - const { result } = renderHook(() => useWeb3StatusConnected()) + mockedUseWalletStatus.mockReturnValue({ + isReady: true, + needsConnect: false, + needsChainSwitch: false, + targetChain: { id: 1, name: 'Ethereum' } as ReturnType<typeof useWalletStatus>['targetChain'], + targetChainId: 1, + switchChain: vi.fn(), + web3Status: { + address: '0xdeadbeef' as Address, + appChainId: 1, + balance: undefined, + connectingWallet: false, + disconnect: vi.fn(), + isWalletConnected: true, + isWalletSynced: true, + readOnlyClient: undefined, + switchChain: vi.fn(), + switchingChain: false, + walletChainId: 1, + walletClient: undefined, + } as unknown as ReturnType<typeof useWalletStatus>['web3Status'], + }) + + const wrapper = ({ children }: { children: React.ReactNode }) => + createElement(WalletStatusVerifier, null, children) + + const { result } = renderHook(() => useWeb3StatusConnected(), { wrapper }) + expect(result.current.address).toBe('0xdeadbeef') expect(result.current.isWalletConnected).toBe(true) }) }) diff --git a/src/hooks/useWeb3Status.tsx b/src/hooks/useWeb3Status.tsx index af95dd25..0690ee13 100644 --- a/src/hooks/useWeb3Status.tsx +++ b/src/hooks/useWeb3Status.tsx @@ -13,7 +13,6 @@ import { } from 'wagmi' import { type ChainsIds, chains } from '@/src/lib/networks.config' -import type { RequiredNonNull } from '@/src/types/utils' export type AppWeb3Status = { readOnlyClient: UsePublicClientReturnType @@ -135,11 +134,3 @@ export const useWeb3Status = () => { return web3Connection } - -export const useWeb3StatusConnected = () => { - const context = useWeb3Status() - if (!context.isWalletConnected) { - throw new Error('Use useWeb3StatusConnected only when a wallet is connected') - } - return useWeb3Status() as RequiredNonNull<Web3Status> -} diff --git a/src/lib/networks.config.test.ts b/src/lib/networks.config.test.ts new file mode 100644 index 00000000..480cce87 --- /dev/null +++ b/src/lib/networks.config.test.ts @@ -0,0 +1,77 @@ +import { arbitrum, mainnet, optimism, optimismSepolia, polygon, sepolia } from 'viem/chains' +import { describe, expect, it, vi } from 'vitest' + +const CUSTOM_ARBITRUM_RPC = 'https://custom.example/arbitrum' + +vi.mock('@/src/env', () => ({ + env: { + PUBLIC_APP_NAME: 'test', + PUBLIC_INCLUDE_TESTNETS: true, + PUBLIC_RPC_ARBITRUM: CUSTOM_ARBITRUM_RPC, + }, +})) + +vi.mock('@/src/constants/common', () => ({ + includeTestnets: true, +})) + +const { chains, rpcUrls, lifiRpcUrls } = await import('@/src/lib/networks.config') + +const ALL_CHAIN_IDS = [ + mainnet.id, + arbitrum.id, + optimism.id, + optimismSepolia.id, + polygon.id, + sepolia.id, +] + +describe('rpcUrls', () => { + it('covers every configured chain', () => { + for (const id of ALL_CHAIN_IDS) { + expect(rpcUrls).toHaveProperty(String(id)) + expect(typeof rpcUrls[id as keyof typeof rpcUrls]).toBe('string') + expect(rpcUrls[id as keyof typeof rpcUrls].length).toBeGreaterThan(0) + } + }) + + it('uses the env-supplied URL when set', () => { + expect(rpcUrls[arbitrum.id]).toBe(CUSTOM_ARBITRUM_RPC) + }) + + it('falls back to publicnode.com when env var is absent', () => { + expect(rpcUrls[mainnet.id]).toContain('publicnode.com') + expect(rpcUrls[optimism.id]).toContain('publicnode.com') + expect(rpcUrls[polygon.id]).toContain('publicnode.com') + }) +}) + +describe('lifiRpcUrls', () => { + it('covers the same chain IDs as rpcUrls', () => { + const rpcKeys = Object.keys(rpcUrls).map(Number).sort() + const lifiKeys = Object.keys(lifiRpcUrls).map(Number).sort() + expect(lifiKeys).toEqual(rpcKeys) + }) + + it('wraps each rpcUrls value in a single-element array', () => { + for (const id of ALL_CHAIN_IDS) { + const lifiEntry = lifiRpcUrls[id as keyof typeof lifiRpcUrls] + expect(Array.isArray(lifiEntry)).toBe(true) + expect(lifiEntry).toHaveLength(1) + expect(lifiEntry[0]).toBe(rpcUrls[id as keyof typeof rpcUrls]) + } + }) + + it('propagates the env-supplied URL', () => { + expect(lifiRpcUrls[arbitrum.id]).toEqual([CUSTOM_ARBITRUM_RPC]) + }) +}) + +describe('chains', () => { + it('contains all chain IDs covered by rpcUrls when testnets enabled', () => { + const chainIds = chains.map((c) => c.id) + for (const id of ALL_CHAIN_IDS) { + expect(chainIds).toContain(id) + } + }) +}) diff --git a/src/lib/networks.config.ts b/src/lib/networks.config.ts index 9bcc8f86..c79b0420 100644 --- a/src/lib/networks.config.ts +++ b/src/lib/networks.config.ts @@ -16,12 +16,32 @@ const allChains = [...devChains, ...prodChains] as const export const chains = includeTestnets ? allChains : prodChains export type ChainsIds = (typeof chains)[number]['id'] +export const rpcUrls = { + [mainnet.id]: env.PUBLIC_RPC_MAINNET || 'https://ethereum-rpc.publicnode.com', + [arbitrum.id]: env.PUBLIC_RPC_ARBITRUM || 'https://arbitrum-one-rpc.publicnode.com', + [optimism.id]: env.PUBLIC_RPC_OPTIMISM || 'https://optimism-rpc.publicnode.com', + [optimismSepolia.id]: + env.PUBLIC_RPC_OPTIMISM_SEPOLIA || 'https://optimism-sepolia-rpc.publicnode.com', + [polygon.id]: env.PUBLIC_RPC_POLYGON || 'https://polygon-bor-rpc.publicnode.com', + [sepolia.id]: env.PUBLIC_RPC_SEPOLIA || 'https://ethereum-sepolia-rpc.publicnode.com', +} as const satisfies Record<ChainsIds, string> + +/** RPC URL map in the shape expected by LI.FI's `createConfig({ rpcUrls })`. */ +export const lifiRpcUrls: Record<ChainsIds, string[]> = { + [mainnet.id]: [rpcUrls[mainnet.id]], + [arbitrum.id]: [rpcUrls[arbitrum.id]], + [optimism.id]: [rpcUrls[optimism.id]], + [optimismSepolia.id]: [rpcUrls[optimismSepolia.id]], + [polygon.id]: [rpcUrls[polygon.id]], + [sepolia.id]: [rpcUrls[sepolia.id]], +} + type RestrictedTransports = Record<ChainsIds, Transport> export const transports: RestrictedTransports = { - [mainnet.id]: http(env.PUBLIC_RPC_MAINNET), - [arbitrum.id]: http(env.PUBLIC_RPC_ARBITRUM), - [optimism.id]: http(env.PUBLIC_RPC_OPTIMISM), - [optimismSepolia.id]: http(env.PUBLIC_RPC_OPTIMISM_SEPOLIA), - [polygon.id]: http(env.PUBLIC_RPC_POLYGON), - [sepolia.id]: http(env.PUBLIC_RPC_SEPOLIA), + [mainnet.id]: http(rpcUrls[mainnet.id]), + [arbitrum.id]: http(rpcUrls[arbitrum.id]), + [optimism.id]: http(rpcUrls[optimism.id]), + [optimismSepolia.id]: http(rpcUrls[optimismSepolia.id]), + [polygon.id]: http(rpcUrls[polygon.id]), + [sepolia.id]: http(rpcUrls[sepolia.id]), } diff --git a/src/lib/wagmi/plugins/reactSuspenseRead.ts b/src/lib/wagmi/plugins/reactSuspenseRead.ts index 272372fb..cf9c5151 100644 --- a/src/lib/wagmi/plugins/reactSuspenseRead.ts +++ b/src/lib/wagmi/plugins/reactSuspenseRead.ts @@ -12,7 +12,7 @@ const walletConfigImport = `import { config } from '@/src/lib/wallets/connectkit type ActionsResult = { name: string - // biome-ignore lint/suspicious/noExplicitAny: <explanation> + // biome-ignore lint/suspicious/noExplicitAny: wagmi plugin API does not expose typed ABI item types run: ({ contracts }: { contracts: any[] }) => Promise<{ imports: string content: string @@ -29,7 +29,7 @@ export function reactSuspenseRead(config: ActionsConfig = {}): ActionsResult { const actionNames = new Set<string>() - // biome-ignore lint/suspicious/noExplicitAny: <explanation> + // biome-ignore lint/suspicious/noExplicitAny: wagmi plugin API does not expose typed ABI item types const isReadFunction = (item: any) => item.type === 'function' && (item.stateMutability === 'view' || item.stateMutability === 'pure') diff --git a/src/lib/wallets/connectkit.config.tsx b/src/lib/wallets/connectkit.config.tsx index b542bc88..91996f0e 100644 --- a/src/lib/wallets/connectkit.config.tsx +++ b/src/lib/wallets/connectkit.config.tsx @@ -1,14 +1,13 @@ -import Avatar from '@/src/components/sharedComponents/Avatar' -import ConnectButton from '@/src/components/sharedComponents/ConnectButton' -import { env } from '@/src/env' -import { chains, transports } from '@/src/lib/networks.config' import type { ButtonProps } from '@chakra-ui/react' -import { ConnectKitButton, ConnectKitProvider, type Types, getDefaultConfig } from 'connectkit' +import { ConnectKitButton, ConnectKitProvider, getDefaultConfig, type Types } from 'connectkit' import type { FC, ReactNode } from 'react' import type { Address } from 'viem' import { normalize } from 'viem/ens' - import { createConfig, useEnsAvatar, useEnsName } from 'wagmi' +import Avatar from '@/src/components/sharedComponents/Avatar' +import ConnectButton from '@/src/components/sharedComponents/ConnectButton' +import { env } from '@/src/env' +import { chains, transports } from '@/src/lib/networks.config' interface Props { address: Address @@ -92,7 +91,7 @@ const defaultConfig = { // Optional App Info appDescription: env.PUBLIC_APP_DESCRIPTION, - appUrl: env.PUBLIC_APP_URL, + appUrl: typeof window !== 'undefined' ? window.location.origin : env.PUBLIC_APP_URL, appIcon: env.PUBLIC_APP_LOGO, } as const diff --git a/src/lib/wallets/portoInit.ts b/src/lib/wallets/portoInit.ts index fa76833e..917963d1 100644 --- a/src/lib/wallets/portoInit.ts +++ b/src/lib/wallets/portoInit.ts @@ -1,7 +1,7 @@ -import { env } from '@/src/env' import { Porto } from 'porto' +import { env } from '@/src/env' -if (env.PUBLIC_ENABLE_PORTO) { +if (env.PUBLIC_ENABLE_PORTO && globalThis.location?.protocol === 'https:') { try { Porto.create() } catch (error) { diff --git a/src/lib/wallets/web3modal.config.tsx b/src/lib/wallets/web3modal.config.tsx index 9c4590a8..6f283ab0 100644 --- a/src/lib/wallets/web3modal.config.tsx +++ b/src/lib/wallets/web3modal.config.tsx @@ -3,15 +3,13 @@ * version used: 4.2.1 */ -import type { DetailedHTMLProps, FC, HTMLAttributes, PropsWithChildren } from 'react' - -import { WagmiAdapter } from '@reown/appkit-adapter-wagmi' import { createAppKit } from '@reown/appkit/react' +import { WagmiAdapter } from '@reown/appkit-adapter-wagmi' +import type { DetailedHTMLProps, FC, HTMLAttributes, PropsWithChildren } from 'react' +import type { Chain } from 'viem' import { env } from '@/src/env' - import { chains } from '@/src/lib/networks.config' -import type { Chain } from 'viem' export const WalletProvider: FC<PropsWithChildren> = ({ children }) => children diff --git a/src/main.tsx b/src/main.tsx index 83a6df6f..a246ed66 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -1,10 +1,10 @@ +import { createRouter, RouterProvider } from '@tanstack/react-router' import { StrictMode } from 'react' - -import { RouterProvider, createRouter } from '@tanstack/react-router' import ReactDOM from 'react-dom/client' import NotFound404 from '@/src/components/pageComponents/NotFound404' import { routeTree } from '@/src/routeTree.gen' +import { printAppInfo } from '@/src/utils/printAppInfo' const router = createRouter({ routeTree, @@ -17,7 +17,9 @@ declare module '@tanstack/react-router' { } } -// biome-ignore lint/style/noNonNullAssertion: <explanation> +printAppInfo() + +// biome-ignore lint/style/noNonNullAssertion: root element is guaranteed by index.html const rootElement = document.getElementById('root')! if (!rootElement.innerHTML) { diff --git a/src/providers/TransactionNotificationProvider.tsx b/src/providers/TransactionNotificationProvider.tsx index 3cf7d456..66c69ac4 100644 --- a/src/providers/TransactionNotificationProvider.tsx +++ b/src/providers/TransactionNotificationProvider.tsx @@ -1,16 +1,16 @@ -import { ExplorerLink } from '@/src/components/sharedComponents/ExplorerLink' -import { - NotificationToast, - notificationToaster, -} from '@/src/components/sharedComponents/NotificationToast' -import { useWeb3Status } from '@/src/hooks/useWeb3Status' -import { type FC, type PropsWithChildren, type ReactNode, createContext, useContext } from 'react' +import { createContext, type FC, type PropsWithChildren, type ReactNode, useContext } from 'react' import type { Hash, ReplacementReturnType, SignMessageErrorType, TransactionExecutionError, } from 'viem' +import { ExplorerLink } from '@/src/components/sharedComponents/ExplorerLink' +import { + NotificationToast, + notificationToaster, +} from '@/src/components/sharedComponents/NotificationToast' +import { useWeb3Status } from '@/src/hooks/useWeb3Status' type WatchSignatureArgs = { successMessage?: string @@ -89,7 +89,7 @@ export const TransactionNotificationProvider: FC<PropsWithChildren> = ({ childre notificationToaster.create({ description: message, - type: 'success', + type: 'error', id: toastId, }) } @@ -122,8 +122,9 @@ export const TransactionNotificationProvider: FC<PropsWithChildren> = ({ childre let replacedTx = null as ReplacementReturnType | null const receipt = await readOnlyClient.waitForTransactionReceipt({ hash, - // biome-ignore lint/suspicious/noAssignInExpressions: <explanation> - onReplaced: (replacedTxData) => (replacedTx = replacedTxData), + onReplaced: (replacedTxData) => { + replacedTx = replacedTxData + }, }) if (replacedTx !== null) { @@ -201,8 +202,9 @@ export const TransactionNotificationProvider: FC<PropsWithChildren> = ({ childre message: `Signature requested: ${transactionMessage}`, signaturePromise: txPromise, showSuccessToast: false, - // biome-ignore lint/suspicious/noAssignInExpressions: <explanation> - onToastId: (id) => (toastId = id), + onToastId: (id) => { + toastId = id + }, }) const hash = await txPromise diff --git a/src/providers/Web3Provider.tsx b/src/providers/Web3Provider.tsx index d9eab5b9..98401513 100644 --- a/src/providers/Web3Provider.tsx +++ b/src/providers/Web3Provider.tsx @@ -1,10 +1,9 @@ -import type { FC, PropsWithChildren } from 'react' - import { QueryClient, QueryClientProvider } from '@tanstack/react-query' +import type { FC, PropsWithChildren } from 'react' import { WagmiProvider } from 'wagmi' import '@/src/lib/wallets/portoInit' -import { ConnectWalletButton, WalletProvider, config } from '@/src/lib/wallets/connectkit.config' +import { ConnectWalletButton, config, WalletProvider } from '@/src/lib/wallets/connectkit.config' const queryClient = new QueryClient() diff --git a/src/routes/__root.tsx b/src/routes/__root.tsx index 7037e400..f299c7d5 100644 --- a/src/routes/__root.tsx +++ b/src/routes/__root.tsx @@ -1,3 +1,6 @@ +import { chakra, Flex } from '@chakra-ui/react' +import { createRootRoute, Outlet } from '@tanstack/react-router' +import { Analytics } from '@vercel/analytics/react' import { TanStackReactQueryDevtools } from '@/src/components/sharedComponents/dev/TanStackReactQueryDevtools' import { TanStackRouterDevtools } from '@/src/components/sharedComponents/dev/TanStackRouterDevtools' import { Footer } from '@/src/components/sharedComponents/ui/Footer' @@ -6,21 +9,11 @@ import { Provider } from '@/src/components/ui/provider' import { Toaster } from '@/src/components/ui/toaster' import { TransactionNotificationProvider } from '@/src/providers/TransactionNotificationProvider' import { Web3Provider } from '@/src/providers/Web3Provider' -import { printAppInfo } from '@/src/utils/printAppInfo' -import { Flex, chakra } from '@chakra-ui/react' -import { Outlet, createRootRoute } from '@tanstack/react-router' -import { Analytics } from '@vercel/analytics/react' -import { useEffect } from 'react' - export const Route = createRootRoute({ component: Root, }) function Root() { - useEffect(() => { - printAppInfo() - }, []) - return ( <Provider> <Web3Provider> diff --git a/src/utils/DeveloperError.ts b/src/utils/DeveloperError.ts new file mode 100644 index 00000000..86b7af0a --- /dev/null +++ b/src/utils/DeveloperError.ts @@ -0,0 +1,7 @@ +/** Error for structural/developer mistakes that cannot be fixed by retrying at runtime. */ +export class DeveloperError extends Error { + constructor(message: string) { + super(message) + this.name = 'DeveloperError' + } +} diff --git a/src/utils/address.ts b/src/utils/address.ts index d9d0a5e4..49244839 100644 --- a/src/utils/address.ts +++ b/src/utils/address.ts @@ -1,3 +1,4 @@ +import { zeroAddress } from 'viem' import { env } from '@/src/env' /** @@ -19,3 +20,11 @@ import { env } from '@/src/env' export const isNativeToken = (address: string) => { return address.toLowerCase() === env.PUBLIC_NATIVE_TOKEN_ADDRESS } + +/** + * LI.FI reports native tokens at the zero address. Rewrite it to the app's + * configured native sentinel (env.PUBLIC_NATIVE_TOKEN_ADDRESS) so lookups keyed + * on local token addresses match. No-op when the app uses the zero-address sentinel. + */ +export const toLocalNativeAddress = (address: string): string => + address.toLowerCase() === zeroAddress ? env.PUBLIC_NATIVE_TOKEN_ADDRESS : address diff --git a/src/utils/getExplorerLink.test.ts b/src/utils/getExplorerLink.test.ts index 9833c82f..8a052a1b 100644 --- a/src/utils/getExplorerLink.test.ts +++ b/src/utils/getExplorerLink.test.ts @@ -1,6 +1,6 @@ -import { createMockChain } from '@/src/test-utils' import type { Chain } from 'viem' import { describe, expect, it } from 'vitest' +import { createMockChain } from '@/src/test-utils' import { getExplorerLink } from './getExplorerLink' const chain = createMockChain() diff --git a/src/utils/getTransactionOutputs.test.ts b/src/utils/getTransactionOutputs.test.ts index 751f8cd3..0e25ba18 100644 --- a/src/utils/getTransactionOutputs.test.ts +++ b/src/utils/getTransactionOutputs.test.ts @@ -1,10 +1,10 @@ -import { type AbiEvent, type TransactionReceipt, decodeEventLog } from 'viem' +import { type AbiEvent, decodeEventLog, type TransactionReceipt } from 'viem' import { beforeEach, describe, expect, it, vi } from 'vitest' import { + getTransactionOutputs, MissingOutputError, TransactionOutputError, - getTransactionOutputs, } from '@/src/utils/getTransactionOutputs' // Mock the viem decodeEventLog function diff --git a/src/utils/getTransactionOutputs.ts b/src/utils/getTransactionOutputs.ts index 866985f5..c12ce879 100644 --- a/src/utils/getTransactionOutputs.ts +++ b/src/utils/getTransactionOutputs.ts @@ -1,4 +1,4 @@ -import { type AbiEvent, type Log, type TransactionReceipt, decodeEventLog, isHex } from 'viem' +import { type AbiEvent, decodeEventLog, isHex, type Log, type TransactionReceipt } from 'viem' /** * Custom error class for transaction output processing errors diff --git a/src/utils/hash.test.ts b/src/utils/hash.test.ts index 1e83a403..58e9bac1 100644 --- a/src/utils/hash.test.ts +++ b/src/utils/hash.test.ts @@ -1,7 +1,7 @@ import type { Chain, Transaction } from 'viem' import * as viemActions from 'viem/actions' import { mainnet } from 'viem/chains' -import { type Mock, describe, expect, it, vi } from 'vitest' +import { describe, expect, it, type Mock, vi } from 'vitest' import detectHash from '@/src/utils/hash' diff --git a/src/utils/hash.ts b/src/utils/hash.ts index a9dcb330..17fb598a 100644 --- a/src/utils/hash.ts +++ b/src/utils/hash.ts @@ -1,12 +1,12 @@ import { - http, type Address, type Chain, - type Hash, - type Transaction, createPublicClient, + type Hash, + http, isAddress, isHex, + type Transaction, } from 'viem' import { getBytecode, getEnsAddress, getTransaction } from 'viem/actions' import { normalize } from 'viem/ens' diff --git a/src/utils/numberFormat.test.ts b/src/utils/numberFormat.test.ts index 69812c0e..bd4fd656 100644 --- a/src/utils/numberFormat.test.ts +++ b/src/utils/numberFormat.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' -import { NumberType, formatNumber, formatUSDPrice } from '@/src/utils/numberFormat' +import { formatNumber, formatUSDPrice, NumberType } from '@/src/utils/numberFormat' it('formats token reference numbers correctly', () => { expect(formatNumber(1234567000000000, NumberType.TokenNonTx)).toBe('>999T') diff --git a/src/utils/suspenseWrapper.tsx b/src/utils/suspenseWrapper.tsx index 38253c23..4f79e033 100644 --- a/src/utils/suspenseWrapper.tsx +++ b/src/utils/suspenseWrapper.tsx @@ -1,7 +1,4 @@ -import { GeneralMessage } from '@/src/components/sharedComponents/ui/GeneralMessage' -import PrimaryButton from '@/src/components/sharedComponents/ui/PrimaryButton' -import { Flex, Spinner } from '@chakra-ui/react' -import { Dialog, Portal } from '@chakra-ui/react' +import { Dialog, Flex, Portal, Spinner } from '@chakra-ui/react' import { QueryErrorResetBoundary } from '@tanstack/react-query' import { type ComponentType, type JSX, type ReactNode, Suspense } from 'react' import { @@ -9,6 +6,9 @@ import { type ErrorBoundaryPropsWithRender, type FallbackProps, } from 'react-error-boundary' +import { GeneralMessage } from '@/src/components/sharedComponents/ui/GeneralMessage' +import PrimaryButton from '@/src/components/sharedComponents/ui/PrimaryButton' +import { DeveloperError } from '@/src/utils/DeveloperError' export type DefaultFallbackFormat = 'dialog' | 'default' @@ -41,10 +41,7 @@ const DefaultFallback = ({ * A generic wrapper for all the components that use suspense * * @param WrappedComponent - a component that will be wrapped inside ErrorBoundary and Suspense - * @param {ReactNode} [errorFallback] - a custom fallback for ErrorBoundary - * @param {ReactNode} [suspenseFallback] - a custom fallback for Suspense - * @param {DefaultFallbackFormat} [defaultFallbackFormat] - Optional. Can be a dialog or just text or custom component (default). - * @returns {ComponentType} + * @returns {ComponentType} component accepting {@link WithSuspenseProps} */ export const withSuspense = <WrappedProps extends object>( WrappedComponent: ComponentType<WrappedProps>, @@ -101,6 +98,10 @@ const defaultFallbackRender: ErrorBoundaryPropsWithRender['fallbackRender'] = ({ }: FallbackProps): ReactNode => { const message = error instanceof Error ? error.message : 'Something went wrong.' + if (error instanceof DeveloperError) { + return <div>{message}</div> + } + return ( <> <div>{message}</div> @@ -122,6 +123,7 @@ const defaultFallbackRenderDialog: ErrorBoundaryPropsWithRender['fallbackRender' resetErrorBoundary, }: FallbackProps): ReactNode => { const message = error instanceof Error ? error.message : 'Something went wrong.' + const isDeveloperError = error instanceof DeveloperError return ( <Dialog.Root @@ -133,7 +135,11 @@ const defaultFallbackRenderDialog: ErrorBoundaryPropsWithRender['fallbackRender' <Dialog.Positioner> <Dialog.Content> <GeneralMessage - actionButton={<PrimaryButton onClick={resetErrorBoundary}>Try again</PrimaryButton>} + actionButton={ + isDeveloperError ? undefined : ( + <PrimaryButton onClick={resetErrorBoundary}>Try again</PrimaryButton> + ) + } message={message} /> </Dialog.Content> @@ -154,11 +160,7 @@ export type WithSuspenseAndRetryProps = { * A wrapper for a component that uses suspense, with the capacity to retry if a useSuspenseQuery fails * * @param WrappedComponent - a component wrapped inside a tanstack's QueryErrorResetBoundary, ErrorBoundary, and a Suspense - * @param {ReactNode} [fallbackRender] - a custom fallback render for ErrorBoundary - * @param {DefaultFallbackFormat} [defaultFallbackFormat] - Optional. Can be a dialog or just text (default). Has no effect if `fallbackRender` is provided - * @param {ReactNode} [suspenseFallback] - a custom fallback for Suspense - * @param {'xs' | 'sm' | 'md' | 'lg' | 'xl'} [spinnerSize] - Optional. Sets the size of the default spinner shown during suspense loading. Default is 'lg'. - * @returns {ComponentType} + * @returns {ComponentType} component accepting {@link WithSuspenseAndRetryProps} */ export const withSuspenseAndRetry = <WrappedProps extends object>( WrappedComponent: ComponentType<WrappedProps>, diff --git a/tsconfig.json b/tsconfig.json index e1c3e446..d77a179b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,11 +1,8 @@ { "compilerOptions": { "allowJs": false, - "allowSyntheticDefaultImports": true, - "baseUrl": "./", - "esModuleInterop": false, + "esModuleInterop": true, "forceConsistentCasingInFileNames": true, - "isolatedModules": true, "jsx": "react-jsx", "lib": ["DOM", "DOM.Iterable", "ESNext"], "module": "ESNext", @@ -18,8 +15,7 @@ "skipLibCheck": true, "strict": true, "target": "ESNext", - "types": ["vitest/globals"], - "useDefineForClassFields": true, + "types": ["vitest/globals", "@testing-library/jest-dom/vitest"], "paths": { "@/src/*": ["./src/*"], "@packageJSON": ["./package.json"] diff --git a/typedoc.json b/typedoc.json index 41da282c..d93acffc 100644 --- a/typedoc.json +++ b/typedoc.json @@ -25,7 +25,7 @@ "./src/{vite-env.d.ts,main.tsx,routeTree.gen.ts}", "./src/lib/{wagmi,wallets}/**/*", "./src/routes/**/*", - "./src/utils/{logger,tokenListsCache}.ts", + "./src/utils/logger.ts", "./src/constants/contracts/**/*", "./src/hooks/generated.ts", "./src/subgraphs/**/*", @@ -51,7 +51,16 @@ "visibilityFilters": { "inherited": true }, - "blockTags": ["@dev", "@source", "@name", "@description"], + "blockTags": [ + "@dev", + "@source", + "@name", + "@description", + "@param", + "@returns", + "@example", + "@throws" + ], "validation": { "invalidLink": true, "notDocumented": false diff --git a/vercel.json b/vercel.json index 9096ba56..153282ab 100644 --- a/vercel.json +++ b/vercel.json @@ -5,7 +5,7 @@ "headers": [ { "key": "Content-Security-Policy-Report-Only", - "value": "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://va.vercel-scripts.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com; img-src 'self' data: https: blob:; connect-src 'self' https: wss:; frame-src 'self' https://app.family.co https://id.porto.sh; frame-ancestors 'none'" + "value": "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://va.vercel-scripts.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com; img-src 'self' data: https: blob:; connect-src 'self' https: wss:; frame-src 'self' https://app.family.co https://id.porto.sh https://verify.walletconnect.org; frame-ancestors 'none'" }, { "key": "X-Content-Type-Options", diff --git a/vite.config.ts b/vite.config.ts index 7601ba38..f25e7563 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,10 +1,9 @@ -/// <reference types="vitest" /> +/// <reference types="vitest/config" /> import { resolve } from 'node:path' import { TanStackRouterVite } from '@tanstack/router-plugin/vite' -import react from '@vitejs/plugin-react-swc' +import react from '@vitejs/plugin-react' import { defineConfig, loadEnv } from 'vite' import Sitemap from 'vite-plugin-sitemap' -import tsconfigPaths from 'vite-tsconfig-paths' // https://vitejs.dev/config/ /** @type {import('vite').UserConfig} */ @@ -14,30 +13,43 @@ export default defineConfig(({ mode }) => { plugins: [ TanStackRouterVite({ target: 'react', autoCodeSplitting: true }), react(), - tsconfigPaths(), Sitemap({ hostname: env.PUBLIC_APP_URL || 'https://demo.dappbooster.dev', }), ], build: { sourcemap: mode === 'development' ? 'hidden' : false, - rollupOptions: { + rolldownOptions: { output: { - manualChunks: { - 'vendor-react': ['react', 'react-dom', 'react-dom/client'], - 'vendor-wagmi': ['wagmi', 'viem'], - 'vendor-tanstack': ['@tanstack/react-query', '@tanstack/react-router'], - 'vendor-chakra': ['@chakra-ui/react'], - 'vendor-web3': ['@reown/appkit', '@reown/appkit-adapter-wagmi'], + manualChunks(id) { + if (id.includes('node_modules/react-dom') || id.includes('node_modules/react/')) + return 'vendor-react' + if ( + id.includes('node_modules/wagmi') || + id.includes('node_modules/@wagmi/') || + id.includes('node_modules/viem') + ) + return 'vendor-wagmi' + if ( + id.includes('node_modules/@tanstack/react-query') || + id.includes('node_modules/@tanstack/react-router') || + id.includes('node_modules/@tanstack/router-core') || + id.includes('node_modules/@tanstack/query-core') + ) + return 'vendor-tanstack' + if (id.includes('node_modules/@chakra-ui/')) return 'vendor-chakra' + if (id.includes('node_modules/@reown/appkit')) return 'vendor-web3' }, }, }, }, envPrefix: 'PUBLIC_', resolve: { + tsconfigPaths: true, alias: { '@/src': resolve(__dirname, './src'), '@packageJSON': resolve(__dirname, 'package.json'), + buffer: 'buffer/', }, }, test: { diff --git a/vocs.config.ts b/vocs.config.ts index 647c669b..311549c4 100644 --- a/vocs.config.ts +++ b/vocs.config.ts @@ -1,4 +1,4 @@ -import { type SidebarItem, defineConfig } from 'vocs' +import { defineConfig, type SidebarItem } from 'vocs' export default defineConfig({ title: 'dAppBooster',