Skip to content

feat(i18n): language switcher in the profile menu - #224

Merged
0xmanhnv merged 1 commit into
developfrom
feat/i18n-language-switcher
Jul 7, 2026
Merged

feat(i18n): language switcher in the profile menu#224
0xmanhnv merged 1 commit into
developfrom
feat/i18n-language-switcher

Conversation

@0xmanhnv

@0xmanhnv 0xmanhnv commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

Completes the i18n MVP loop on top of the foundation (#222) — users can now actually pick a language.

  • LanguageSwitcher submenu in the profile dropdown: lists supported locales by their native name (English / Tiếng Việt / العربية), checks the active one, sets the locale cookie (which the proxy reads above Accept-Language), and reloads so the server re-renders with the new x-locale.
  • Its own label is translated via t('common.language') (added to en/vi), exercising the t() path end-to-end.

Switching to Tiếng Việt now flips the sidebar section titles to Phạm vi / Khám phá / Ưu tiên hóa / … (the strings converted in #222), and ar additionally flips direction to RTL. Everything else falls back to English until translated incrementally.

tsc + eslint + vitest (i18n 6/6) + npm run build all green.

Completes the i18n MVP loop from the foundation (#222): users can now actually
pick a language. A LanguageSwitcher submenu in the profile dropdown lists the
supported locales (native names), checks the active one, sets the `locale`
cookie (which the proxy reads above Accept-Language), and reloads so the server
re-renders with the new x-locale. Its own label is translated (common.language),
demonstrating the t() path end-to-end.
@0xmanhnv
0xmanhnv merged commit 17154eb into develop Jul 7, 2026
13 checks passed
0xmanhnv added a commit that referenced this pull request Aug 3, 2026
* deps(npm): bump the nextjs group with 13 updates

Bumps the nextjs group with 13 updates:

| Package | From | To |
| --- | --- | --- |
| [next](https://github.com/vercel/next.js) | `16.2.9` | `16.2.10` |
| [@next/bundle-analyzer](https://github.com/vercel/next.js/tree/HEAD/packages/next-bundle-analyzer) | `16.2.9` | `16.2.10` |
| [eslint-config-next](https://github.com/vercel/next.js/tree/HEAD/packages/eslint-config-next) | `16.2.9` | `16.2.10` |
| [@next/env](https://github.com/vercel/next.js/tree/HEAD/packages/next-env) | `16.2.9` | `16.2.10` |
| [@next/eslint-plugin-next](https://github.com/vercel/next.js/tree/HEAD/packages/eslint-plugin-next) | `16.2.9` | `16.2.10` |
| [@next/swc-darwin-arm64](https://github.com/vercel/next.js/tree/HEAD/crates/next-napi-bindings/npm/darwin-arm64) | `16.2.9` | `16.2.10` |
| [@next/swc-darwin-x64](https://github.com/vercel/next.js/tree/HEAD/crates/next-napi-bindings/npm/darwin-x64) | `16.2.9` | `16.2.10` |
| [@next/swc-linux-arm64-gnu](https://github.com/vercel/next.js/tree/HEAD/crates/next-napi-bindings/npm/linux-arm64-gnu) | `16.2.9` | `16.2.10` |
| [@next/swc-linux-arm64-musl](https://github.com/vercel/next.js/tree/HEAD/crates/next-napi-bindings/npm/linux-arm64-musl) | `16.2.9` | `16.2.10` |
| [@next/swc-linux-x64-gnu](https://github.com/vercel/next.js/tree/HEAD/crates/next-napi-bindings/npm/linux-x64-gnu) | `16.2.9` | `16.2.10` |
| [@next/swc-linux-x64-musl](https://github.com/vercel/next.js/tree/HEAD/crates/next-napi-bindings/npm/linux-x64-musl) | `16.2.9` | `16.2.10` |
| [@next/swc-win32-arm64-msvc](https://github.com/vercel/next.js/tree/HEAD/crates/next-napi-bindings/npm/win32-arm64-msvc) | `16.2.9` | `16.2.10` |
| [@next/swc-win32-x64-msvc](https://github.com/vercel/next.js/tree/HEAD/crates/next-napi-bindings/npm/win32-x64-msvc) | `16.2.9` | `16.2.10` |


Updates `next` from 16.2.9 to 16.2.10
- [Release notes](https://github.com/vercel/next.js/releases)
- [Commits](https://github.com/vercel/next.js/compare/v16.2.9...v16.2.10)

Updates `@next/bundle-analyzer` from 16.2.9 to 16.2.10
- [Release notes](https://github.com/vercel/next.js/releases)
- [Commits](https://github.com/vercel/next.js/commits/v16.2.10/packages/next-bundle-analyzer)

Updates `eslint-config-next` from 16.2.9 to 16.2.10
- [Release notes](https://github.com/vercel/next.js/releases)
- [Commits](https://github.com/vercel/next.js/commits/v16.2.10/packages/eslint-config-next)

Updates `@next/env` from 16.2.9 to 16.2.10
- [Release notes](https://github.com/vercel/next.js/releases)
- [Commits](https://github.com/vercel/next.js/commits/v16.2.10/packages/next-env)

Updates `@next/eslint-plugin-next` from 16.2.9 to 16.2.10
- [Release notes](https://github.com/vercel/next.js/releases)
- [Commits](https://github.com/vercel/next.js/commits/v16.2.10/packages/eslint-plugin-next)

Updates `@next/swc-darwin-arm64` from 16.2.9 to 16.2.10
- [Release notes](https://github.com/vercel/next.js/releases)
- [Commits](https://github.com/vercel/next.js/commits/v16.2.10/crates/next-napi-bindings/npm/darwin-arm64)

Updates `@next/swc-darwin-x64` from 16.2.9 to 16.2.10
- [Release notes](https://github.com/vercel/next.js/releases)
- [Commits](https://github.com/vercel/next.js/commits/v16.2.10/crates/next-napi-bindings/npm/darwin-x64)

Updates `@next/swc-linux-arm64-gnu` from 16.2.9 to 16.2.10
- [Release notes](https://github.com/vercel/next.js/releases)
- [Commits](https://github.com/vercel/next.js/commits/v16.2.10/crates/next-napi-bindings/npm/linux-arm64-gnu)

Updates `@next/swc-linux-arm64-musl` from 16.2.9 to 16.2.10
- [Release notes](https://github.com/vercel/next.js/releases)
- [Commits](https://github.com/vercel/next.js/commits/v16.2.10/crates/next-napi-bindings/npm/linux-arm64-musl)

Updates `@next/swc-linux-x64-gnu` from 16.2.9 to 16.2.10
- [Release notes](https://github.com/vercel/next.js/releases)
- [Commits](https://github.com/vercel/next.js/commits/v16.2.10/crates/next-napi-bindings/npm/linux-x64-gnu)

Updates `@next/swc-linux-x64-musl` from 16.2.9 to 16.2.10
- [Release notes](https://github.com/vercel/next.js/releases)
- [Commits](https://github.com/vercel/next.js/commits/v16.2.10/crates/next-napi-bindings/npm/linux-x64-musl)

Updates `@next/swc-win32-arm64-msvc` from 16.2.9 to 16.2.10
- [Release notes](https://github.com/vercel/next.js/releases)
- [Commits](https://github.com/vercel/next.js/commits/v16.2.10/crates/next-napi-bindings/npm/win32-arm64-msvc)

Updates `@next/swc-win32-x64-msvc` from 16.2.9 to 16.2.10
- [Release notes](https://github.com/vercel/next.js/releases)
- [Commits](https://github.com/vercel/next.js/commits/v16.2.10/crates/next-napi-bindings/npm/win32-x64-msvc)

---
updated-dependencies:
- dependency-name: next
  dependency-version: 16.2.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: nextjs
- dependency-name: "@next/bundle-analyzer"
  dependency-version: 16.2.10
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: nextjs
- dependency-name: eslint-config-next
  dependency-version: 16.2.10
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: nextjs
- dependency-name: "@next/env"
  dependency-version: 16.2.10
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: nextjs
- dependency-name: "@next/eslint-plugin-next"
  dependency-version: 16.2.10
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: nextjs
- dependency-name: "@next/swc-darwin-arm64"
  dependency-version: 16.2.10
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: nextjs
- dependency-name: "@next/swc-darwin-x64"
  dependency-version: 16.2.10
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: nextjs
- dependency-name: "@next/swc-linux-arm64-gnu"
  dependency-version: 16.2.10
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: nextjs
- dependency-name: "@next/swc-linux-arm64-musl"
  dependency-version: 16.2.10
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: nextjs
- dependency-name: "@next/swc-linux-x64-gnu"
  dependency-version: 16.2.10
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: nextjs
- dependency-name: "@next/swc-linux-x64-musl"
  dependency-version: 16.2.10
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: nextjs
- dependency-name: "@next/swc-win32-arm64-msvc"
  dependency-version: 16.2.10
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: nextjs
- dependency-name: "@next/swc-win32-x64-msvc"
  dependency-version: 16.2.10
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: nextjs
...

Signed-off-by: dependabot[bot] <support@github.com>

* deps(npm): bump the linting group with 2 updates

Bumps the linting group with 2 updates: [prettier](https://github.com/prettier/prettier) and [eslint-module-utils](https://github.com/import-js/eslint-plugin-import/tree/HEAD/utils).


Updates `prettier` from 3.9.1 to 3.9.4
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.9.1...3.9.4)

Updates `eslint-module-utils` from 2.13.0 to 2.14.0
- [Release notes](https://github.com/import-js/eslint-plugin-import/releases)
- [Changelog](https://github.com/import-js/eslint-plugin-import/blob/main/utils/CHANGELOG.md)
- [Commits](https://github.com/import-js/eslint-plugin-import/commits/v2.14.0/utils)

---
updated-dependencies:
- dependency-name: prettier
  dependency-version: 3.9.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: linting
- dependency-name: eslint-module-utils
  dependency-version: 2.14.0
  dependency-type: indirect
  update-type: version-update:semver-minor
  dependency-group: linting
...

Signed-off-by: dependabot[bot] <support@github.com>

* deps(npm): bump the tailwind group with 16 updates

Bumps the tailwind group with 16 updates:

| Package | From | To |
| --- | --- | --- |
| [@tailwindcss/postcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-postcss) | `4.3.1` | `4.3.2` |
| [tailwindcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss) | `4.3.1` | `4.3.2` |
| [@tailwindcss/node](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-node) | `4.3.1` | `4.3.2` |
| [@tailwindcss/oxide](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/crates/node) | `4.3.1` | `4.3.2` |
| [@tailwindcss/oxide-android-arm64](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/crates/node/npm/android-arm64) | `4.3.1` | `4.3.2` |
| [@tailwindcss/oxide-darwin-arm64](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/crates/node/npm/darwin-arm64) | `4.3.1` | `4.3.2` |
| [@tailwindcss/oxide-darwin-x64](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/crates/node/npm/darwin-x64) | `4.3.1` | `4.3.2` |
| [@tailwindcss/oxide-freebsd-x64](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/crates/node/npm/freebsd-x64) | `4.3.1` | `4.3.2` |
| [@tailwindcss/oxide-linux-arm-gnueabihf](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/crates/node/npm/linux-arm-gnueabihf) | `4.3.1` | `4.3.2` |
| [@tailwindcss/oxide-linux-arm64-gnu](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/crates/node/npm/linux-arm64-gnu) | `4.3.1` | `4.3.2` |
| [@tailwindcss/oxide-linux-arm64-musl](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/crates/node/npm/linux-arm64-musl) | `4.3.1` | `4.3.2` |
| [@tailwindcss/oxide-linux-x64-gnu](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/crates/node/npm/linux-x64-gnu) | `4.3.1` | `4.3.2` |
| [@tailwindcss/oxide-linux-x64-musl](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/crates/node/npm/linux-x64-musl) | `4.3.1` | `4.3.2` |
| [@tailwindcss/oxide-wasm32-wasi](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/crates/node) | `4.3.1` | `4.3.2` |
| [@tailwindcss/oxide-win32-arm64-msvc](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/crates/node/npm/win32-arm64-msvc) | `4.3.1` | `4.3.2` |
| [@tailwindcss/oxide-win32-x64-msvc](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/crates/node/npm/win32-x64-msvc) | `4.3.1` | `4.3.2` |


Updates `@tailwindcss/postcss` from 4.3.1 to 4.3.2
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.3.2/packages/@tailwindcss-postcss)

Updates `tailwindcss` from 4.3.1 to 4.3.2
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.3.2/packages/tailwindcss)

Updates `@tailwindcss/node` from 4.3.1 to 4.3.2
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.3.2/packages/@tailwindcss-node)

Updates `@tailwindcss/oxide` from 4.3.1 to 4.3.2
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.3.2/crates/node)

Updates `@tailwindcss/oxide-android-arm64` from 4.3.1 to 4.3.2
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.3.2/crates/node/npm/android-arm64)

Updates `@tailwindcss/oxide-darwin-arm64` from 4.3.1 to 4.3.2
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.3.2/crates/node/npm/darwin-arm64)

Updates `@tailwindcss/oxide-darwin-x64` from 4.3.1 to 4.3.2
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.3.2/crates/node/npm/darwin-x64)

Updates `@tailwindcss/oxide-freebsd-x64` from 4.3.1 to 4.3.2
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.3.2/crates/node/npm/freebsd-x64)

Updates `@tailwindcss/oxide-linux-arm-gnueabihf` from 4.3.1 to 4.3.2
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.3.2/crates/node/npm/linux-arm-gnueabihf)

Updates `@tailwindcss/oxide-linux-arm64-gnu` from 4.3.1 to 4.3.2
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.3.2/crates/node/npm/linux-arm64-gnu)

Updates `@tailwindcss/oxide-linux-arm64-musl` from 4.3.1 to 4.3.2
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.3.2/crates/node/npm/linux-arm64-musl)

Updates `@tailwindcss/oxide-linux-x64-gnu` from 4.3.1 to 4.3.2
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.3.2/crates/node/npm/linux-x64-gnu)

Updates `@tailwindcss/oxide-linux-x64-musl` from 4.3.1 to 4.3.2
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.3.2/crates/node/npm/linux-x64-musl)

Updates `@tailwindcss/oxide-wasm32-wasi` from 4.3.1 to 4.3.2
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.3.2/crates/node)

Updates `@tailwindcss/oxide-win32-arm64-msvc` from 4.3.1 to 4.3.2
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.3.2/crates/node/npm/win32-arm64-msvc)

Updates `@tailwindcss/oxide-win32-x64-msvc` from 4.3.1 to 4.3.2
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.3.2/crates/node/npm/win32-x64-msvc)

---
updated-dependencies:
- dependency-name: "@tailwindcss/postcss"
  dependency-version: 4.3.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: tailwind
- dependency-name: tailwindcss
  dependency-version: 4.3.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: tailwind
- dependency-name: "@tailwindcss/node"
  dependency-version: 4.3.2
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: tailwind
- dependency-name: "@tailwindcss/oxide"
  dependency-version: 4.3.2
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: tailwind
- dependency-name: "@tailwindcss/oxide-android-arm64"
  dependency-version: 4.3.2
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: tailwind
- dependency-name: "@tailwindcss/oxide-darwin-arm64"
  dependency-version: 4.3.2
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: tailwind
- dependency-name: "@tailwindcss/oxide-darwin-x64"
  dependency-version: 4.3.2
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: tailwind
- dependency-name: "@tailwindcss/oxide-freebsd-x64"
  dependency-version: 4.3.2
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: tailwind
- dependency-name: "@tailwindcss/oxide-linux-arm-gnueabihf"
  dependency-version: 4.3.2
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: tailwind
- dependency-name: "@tailwindcss/oxide-linux-arm64-gnu"
  dependency-version: 4.3.2
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: tailwind
- dependency-name: "@tailwindcss/oxide-linux-arm64-musl"
  dependency-version: 4.3.2
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: tailwind
- dependency-name: "@tailwindcss/oxide-linux-x64-gnu"
  dependency-version: 4.3.2
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: tailwind
- dependency-name: "@tailwindcss/oxide-linux-x64-musl"
  dependency-version: 4.3.2
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: tailwind
- dependency-name: "@tailwindcss/oxide-wasm32-wasi"
  dependency-version: 4.3.2
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: tailwind
- dependency-name: "@tailwindcss/oxide-win32-arm64-msvc"
  dependency-version: 4.3.2
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: tailwind
- dependency-name: "@tailwindcss/oxide-win32-x64-msvc"
  dependency-version: 4.3.2
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: tailwind
...

Signed-off-by: dependabot[bot] <support@github.com>

* deps(npm): bump the radix-ui group with 35 updates

Bumps the radix-ui group with 35 updates:

| Package | From | To |
| --- | --- | --- |
| [@radix-ui/react-accordion](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/accordion) | `1.2.14` | `1.2.15` |
| [@radix-ui/react-alert-dialog](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/alert-dialog) | `1.1.17` | `1.1.18` |
| [@radix-ui/react-aspect-ratio](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/aspect-ratio) | `1.1.10` | `1.1.11` |
| [@radix-ui/react-avatar](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/avatar) | `1.2.0` | `1.2.1` |
| [@radix-ui/react-checkbox](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/checkbox) | `1.3.5` | `1.3.6` |
| [@radix-ui/react-context-menu](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/context-menu) | `2.3.1` | `2.3.2` |
| [@radix-ui/react-dialog](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/dialog) | `1.1.17` | `1.1.18` |
| [@radix-ui/react-dropdown-menu](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/dropdown-menu) | `2.1.18` | `2.1.19` |
| [@radix-ui/react-hover-card](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/hover-card) | `1.1.17` | `1.1.18` |
| [@radix-ui/react-label](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/label) | `2.1.10` | `2.1.11` |
| [@radix-ui/react-menubar](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/menubar) | `1.1.18` | `1.1.19` |
| [@radix-ui/react-navigation-menu](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/navigation-menu) | `1.2.16` | `1.2.17` |
| [@radix-ui/react-popover](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/popover) | `1.1.17` | `1.1.18` |
| [@radix-ui/react-progress](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/progress) | `1.1.10` | `1.1.11` |
| [@radix-ui/react-radio-group](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/radio-group) | `1.4.1` | `1.4.2` |
| [@radix-ui/react-scroll-area](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/scroll-area) | `1.2.12` | `1.2.13` |
| [@radix-ui/react-select](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/select) | `2.3.1` | `2.3.2` |
| [@radix-ui/react-separator](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/separator) | `1.1.10` | `1.1.11` |
| [@radix-ui/react-slider](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/slider) | `1.4.1` | `1.4.2` |
| [@radix-ui/react-switch](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/switch) | `1.3.1` | `1.3.2` |
| [@radix-ui/react-tabs](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/tabs) | `1.1.15` | `1.1.16` |
| [@radix-ui/react-toggle-group](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/toggle-group) | `1.1.13` | `1.1.14` |
| [@radix-ui/react-tooltip](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/tooltip) | `1.2.10` | `1.2.11` |
| [@radix-ui/react-arrow](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/arrow) | `1.1.10` | `1.1.11` |
| [@radix-ui/react-collapsible](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/collapsible) | `1.1.14` | `1.1.15` |
| [@radix-ui/react-collection](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/collection) | `1.1.10` | `1.1.11` |
| [@radix-ui/react-dismissable-layer](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/dismissable-layer) | `1.1.13` | `1.1.14` |
| [@radix-ui/react-focus-scope](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/focus-scope) | `1.1.10` | `1.1.11` |
| [@radix-ui/react-menu](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/menu) | `2.1.18` | `2.1.19` |
| [@radix-ui/react-popper](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/popper) | `1.3.1` | `1.3.2` |
| [@radix-ui/react-portal](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/portal) | `1.1.12` | `1.1.13` |
| [@radix-ui/react-primitive](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/primitive) | `2.1.6` | `2.1.7` |
| [@radix-ui/react-roving-focus](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/roving-focus) | `1.1.13` | `1.1.14` |
| [@radix-ui/react-toggle](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/toggle) | `1.1.12` | `1.1.13` |
| [@radix-ui/react-visually-hidden](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/visually-hidden) | `1.2.6` | `1.2.7` |


Updates `@radix-ui/react-accordion` from 1.2.14 to 1.2.15
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/accordion/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/accordion)

Updates `@radix-ui/react-alert-dialog` from 1.1.17 to 1.1.18
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/alert-dialog/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/alert-dialog)

Updates `@radix-ui/react-aspect-ratio` from 1.1.10 to 1.1.11
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/aspect-ratio/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/aspect-ratio)

Updates `@radix-ui/react-avatar` from 1.2.0 to 1.2.1
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/avatar/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/avatar)

Updates `@radix-ui/react-checkbox` from 1.3.5 to 1.3.6
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/checkbox/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/checkbox)

Updates `@radix-ui/react-context-menu` from 2.3.1 to 2.3.2
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/context-menu/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/context-menu)

Updates `@radix-ui/react-dialog` from 1.1.17 to 1.1.18
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/dialog/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/dialog)

Updates `@radix-ui/react-dropdown-menu` from 2.1.18 to 2.1.19
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/dropdown-menu/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/dropdown-menu)

Updates `@radix-ui/react-hover-card` from 1.1.17 to 1.1.18
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/hover-card/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/hover-card)

Updates `@radix-ui/react-label` from 2.1.10 to 2.1.11
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/label/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/label)

Updates `@radix-ui/react-menubar` from 1.1.18 to 1.1.19
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/menubar/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/menubar)

Updates `@radix-ui/react-navigation-menu` from 1.2.16 to 1.2.17
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/navigation-menu/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/navigation-menu)

Updates `@radix-ui/react-popover` from 1.1.17 to 1.1.18
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/popover/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/popover)

Updates `@radix-ui/react-progress` from 1.1.10 to 1.1.11
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/progress/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/progress)

Updates `@radix-ui/react-radio-group` from 1.4.1 to 1.4.2
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/radio-group/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/radio-group)

Updates `@radix-ui/react-scroll-area` from 1.2.12 to 1.2.13
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/scroll-area/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/scroll-area)

Updates `@radix-ui/react-select` from 2.3.1 to 2.3.2
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/select/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/select)

Updates `@radix-ui/react-separator` from 1.1.10 to 1.1.11
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/separator/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/separator)

Updates `@radix-ui/react-slider` from 1.4.1 to 1.4.2
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/slider/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/slider)

Updates `@radix-ui/react-switch` from 1.3.1 to 1.3.2
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/switch/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/switch)

Updates `@radix-ui/react-tabs` from 1.1.15 to 1.1.16
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/tabs/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/tabs)

Updates `@radix-ui/react-toggle-group` from 1.1.13 to 1.1.14
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/toggle-group/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/toggle-group)

Updates `@radix-ui/react-tooltip` from 1.2.10 to 1.2.11
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/tooltip/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/tooltip)

Updates `@radix-ui/react-arrow` from 1.1.10 to 1.1.11
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/arrow/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/arrow)

Updates `@radix-ui/react-collapsible` from 1.1.14 to 1.1.15
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/collapsible/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/collapsible)

Updates `@radix-ui/react-collection` from 1.1.10 to 1.1.11
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/collection/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/collection)

Updates `@radix-ui/react-dismissable-layer` from 1.1.13 to 1.1.14
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/dismissable-layer/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/dismissable-layer)

Updates `@radix-ui/react-focus-scope` from 1.1.10 to 1.1.11
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/focus-scope/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/focus-scope)

Updates `@radix-ui/react-menu` from 2.1.18 to 2.1.19
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/menu/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/menu)

Updates `@radix-ui/react-popper` from 1.3.1 to 1.3.2
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/popper/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/popper)

Updates `@radix-ui/react-portal` from 1.1.12 to 1.1.13
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/portal/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/portal)

Updates `@radix-ui/react-primitive` from 2.1.6 to 2.1.7
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/primitive/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/primitive)

Updates `@radix-ui/react-roving-focus` from 1.1.13 to 1.1.14
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/roving-focus/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/roving-focus)

Updates `@radix-ui/react-toggle` from 1.1.12 to 1.1.13
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/toggle/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/toggle)

Updates `@radix-ui/react-visually-hidden` from 1.2.6 to 1.2.7
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/visually-hidden/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/visually-hidden)

---
updated-dependencies:
- dependency-name: "@radix-ui/react-accordion"
  dependency-version: 1.2.15
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: radix-ui
- dependency-name: "@radix-ui/react-alert-dialog"
  dependency-version: 1.1.18
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: radix-ui
- dependency-name: "@radix-ui/react-aspect-ratio"
  dependency-version: 1.1.11
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: radix-ui
- dependency-name: "@radix-ui/react-avatar"
  dependency-version: 1.2.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: radix-ui
- dependency-name: "@radix-ui/react-checkbox"
  dependency-version: 1.3.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: radix-ui
- dependency-name: "@radix-ui/react-context-menu"
  dependency-version: 2.3.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: radix-ui
- dependency-name: "@radix-ui/react-dialog"
  dependency-version: 1.1.18
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: radix-ui
- dependency-name: "@radix-ui/react-dropdown-menu"
  dependency-version: 2.1.19
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: radix-ui
- dependency-name: "@radix-ui/react-hover-card"
  dependency-version: 1.1.18
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: radix-ui
- dependency-name: "@radix-ui/react-label"
  dependency-version: 2.1.11
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: radix-ui
- dependency-name: "@radix-ui/react-menubar"
  dependency-version: 1.1.19
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: radix-ui
- dependency-name: "@radix-ui/react-navigation-menu"
  dependency-version: 1.2.17
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: radix-ui
- dependency-name: "@radix-ui/react-popover"
  dependency-version: 1.1.18
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: radix-ui
- dependency-name: "@radix-ui/react-progress"
  dependency-version: 1.1.11
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: radix-ui
- dependency-name: "@radix-ui/react-radio-group"
  dependency-version: 1.4.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: radix-ui
- dependency-name: "@radix-ui/react-scroll-area"
  dependency-version: 1.2.13
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: radix-ui
- dependency-name: "@radix-ui/react-select"
  dependency-version: 2.3.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: radix-ui
- dependency-name: "@radix-ui/react-separator"
  dependency-version: 1.1.11
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: radix-ui
- dependency-name: "@radix-ui/react-slider"
  dependency-version: 1.4.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: radix-ui
- dependency-name: "@radix-ui/react-switch"
  dependency-version: 1.3.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: radix-ui
- dependency-name: "@radix-ui/react-tabs"
  dependency-version: 1.1.16
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: radix-ui
- dependency-name: "@radix-ui/react-toggle-group"
  dependency-version: 1.1.14
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: radix-ui
- dependency-name: "@radix-ui/react-tooltip"
  dependency-version: 1.2.11
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: radix-ui
- dependency-name: "@radix-ui/react-arrow"
  dependency-version: 1.1.11
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: radix-ui
- dependency-name: "@radix-ui/react-collapsible"
  dependency-version: 1.1.15
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: radix-ui
- dependency-name: "@radix-ui/react-collection"
  dependency-version: 1.1.11
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: radix-ui
- dependency-name: "@radix-ui/react-dismissable-layer"
  dependency-version: 1.1.14
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: radix-ui
- dependency-name: "@radix-ui/react-focus-scope"
  dependency-version: 1.1.11
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: radix-ui
- dependency-name: "@radix-ui/react-menu"
  dependency-version: 2.1.19
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: radix-ui
- dependency-name: "@radix-ui/react-popper"
  dependency-version: 1.3.2
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: radix-ui
- dependency-name: "@radix-ui/react-portal"
  dependency-version: 1.1.13
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: radix-ui
- dependency-name: "@radix-ui/react-primitive"
  dependency-version: 2.1.7
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: radix-ui
- dependency-name: "@radix-ui/react-roving-focus"
  dependency-version: 1.1.14
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: radix-ui
- dependency-name: "@radix-ui/react-toggle"
  dependency-version: 1.1.13
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: radix-ui
- dependency-name: "@radix-ui/react-visually-hidden"
  dependency-version: 1.2.7
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: radix-ui
...

Signed-off-by: dependabot[bot] <support@github.com>

* feat(nav): surface Attack Paths in Prioritization + harden coverage card

- The /attack-paths page (Attack Path Analysis — asset reachability scoring via
  the real useAttackPathScoring hook, 445 lines, production-complete) was built
  but had no sidebar entry, so users couldn't reach it. Wire it into
  Prioritization next to Exposure Chains (icon Waypoints) + route-permission.
  A pre-release orphan-route triage confirmed this is the only complete,
  real-data feature page that was unreachable (the rest are dashboard-stats
  facades or Coming-Soon stubs, deliberately left out).
- ValidationCoverageCard: guard sortBands(data.by_severity ?? []) so the card
  can't crash if the API omits by_severity while total > 0.

* feat(i18n): lightweight translation layer (en/vi) on the existing locale scaffold

The app already detects locale (proxy → x-locale header → layout) and drives RTL
direction, but there was no translation layer — every string was hardcoded English.
This wires a dependency-free t() mechanism that can be filled in incrementally.

- src/lib/i18n.ts: getDictionary(locale) + translate(dict, key, fallback?, vars?)
  with `{var}` interpolation and en-fallback (a key missing only from a non-en
  catalog still renders sensible text). Catalogs: dictionaries/en.json + vi.json
  (ar falls back to en; its RTL is already handled).
- I18nProvider + useTranslation() — locale resolved server-side and threaded
  through layout → Providers so first paint matches the detected language.
- Pilot: sidebar group titles render via t() (English string as fallback, so
  sidebar-data.ts is unchanged and untranslated items degrade gracefully).
- Unit test: locale lookup, en-fallback, key-fallback, interpolation, ar→en,
  region-stripping, and RTL-still-from-locale.

Chosen custom-over-next-intl for a zero-dependency, fully-incremental foundation;
next-intl remains a clean future migration if ICU features are needed.

* deps(npm): bump the minor-patch group across 1 directory with 31 updates

Bumps the minor-patch group with 11 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [@sentry/nextjs](https://github.com/getsentry/sentry-javascript) | `10.62.0` | `10.63.0` |
| [react-hook-form](https://github.com/react-hook-form/react-hook-form) | `7.80.0` | `7.81.0` |
| [recharts](https://github.com/recharts/recharts) | `3.9.0` | `3.9.2` |
| [baseline-browser-mapping](https://github.com/web-platform-dx/baseline-browser-mapping) | `2.10.40` | `2.10.42` |
| [caniuse-lite](https://github.com/browserslist/caniuse-lite) | `1.0.30001799` | `1.0.30001800` |
| [electron-to-chromium](https://github.com/Kilian/electron-to-chromium) | `1.5.380` | `1.5.387` |
| [fast-uri](https://github.com/fastify/fast-uri) | `3.1.2` | `3.1.3` |
| [oxc-resolver](https://github.com/oxc-project/oxc-resolver) | `11.21.3` | `11.23.0` |
| [tldts](https://github.com/remusao/tldts) | `7.4.5` | `7.4.6` |
| [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) | `8.62.0` | `8.62.1` |
| [webpack](https://github.com/webpack/webpack) | `5.108.1` | `5.108.4` |



Updates `@sentry/nextjs` from 10.62.0 to 10.63.0
- [Release notes](https://github.com/getsentry/sentry-javascript/releases)
- [Changelog](https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/getsentry/sentry-javascript/compare/10.62.0...10.63.0)

Updates `react-hook-form` from 7.80.0 to 7.81.0
- [Release notes](https://github.com/react-hook-form/react-hook-form/releases)
- [Changelog](https://github.com/react-hook-form/react-hook-form/blob/master/CHANGELOG.md)
- [Commits](https://github.com/react-hook-form/react-hook-form/compare/v7.80.0...v7.81.0)

Updates `recharts` from 3.9.0 to 3.9.2
- [Release notes](https://github.com/recharts/recharts/releases)
- [Changelog](https://github.com/recharts/recharts/blob/main/CHANGELOG.md)
- [Commits](https://github.com/recharts/recharts/compare/v3.9.0...v3.9.2)

Updates `@apm-js-collab/tracing-hooks` from 0.10.0 to 0.10.1
- [Release notes](https://github.com/apm-js-collab/tracing-hooks/releases)
- [Changelog](https://github.com/apm-js-collab/tracing-hooks/blob/main/CHANGELOG.md)
- [Commits](https://github.com/apm-js-collab/tracing-hooks/compare/tracing-hooks-v0.10.0...tracing-hooks-v0.10.1)

Updates `@opentelemetry/core` from 2.8.0 to 2.9.0
- [Release notes](https://github.com/open-telemetry/opentelemetry-js/releases)
- [Changelog](https://github.com/open-telemetry/opentelemetry-js/blob/main/CHANGELOG.md)
- [Commits](https://github.com/open-telemetry/opentelemetry-js/compare/v2.8.0...v2.9.0)

Updates `@opentelemetry/resources` from 2.8.0 to 2.9.0
- [Release notes](https://github.com/open-telemetry/opentelemetry-js/releases)
- [Changelog](https://github.com/open-telemetry/opentelemetry-js/blob/main/CHANGELOG.md)
- [Commits](https://github.com/open-telemetry/opentelemetry-js/compare/v2.8.0...v2.9.0)

Updates `@opentelemetry/sdk-trace-base` from 2.8.0 to 2.9.0
- [Release notes](https://github.com/open-telemetry/opentelemetry-js/releases)
- [Changelog](https://github.com/open-telemetry/opentelemetry-js/blob/main/CHANGELOG.md)
- [Commits](https://github.com/open-telemetry/opentelemetry-js/compare/v2.8.0...v2.9.0)

Updates `immer` from 10.2.0 to 11.1.11
- [Release notes](https://github.com/immerjs/immer/releases)
- [Commits](https://github.com/immerjs/immer/compare/v10.2.0...v11.1.11)

Updates `@sentry/browser` from 10.62.0 to 10.63.0
- [Release notes](https://github.com/getsentry/sentry-javascript/releases)
- [Changelog](https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/getsentry/sentry-javascript/compare/10.62.0...10.63.0)

Updates `@sentry/browser-utils` from 10.62.0 to 10.63.0
- [Release notes](https://github.com/getsentry/sentry-javascript/releases)
- [Changelog](https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/getsentry/sentry-javascript/compare/10.62.0...10.63.0)

Updates `@sentry/core` from 10.62.0 to 10.63.0
- [Release notes](https://github.com/getsentry/sentry-javascript/releases)
- [Changelog](https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/getsentry/sentry-javascript/compare/10.62.0...10.63.0)

Updates `@sentry/feedback` from 10.62.0 to 10.63.0
- [Release notes](https://github.com/getsentry/sentry-javascript/releases)
- [Changelog](https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/getsentry/sentry-javascript/compare/10.62.0...10.63.0)

Updates `@sentry/node` from 10.62.0 to 10.63.0
- [Release notes](https://github.com/getsentry/sentry-javascript/releases)
- [Changelog](https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/getsentry/sentry-javascript/compare/10.62.0...10.63.0)

Updates `@sentry/node-core` from 10.62.0 to 10.63.0
- [Release notes](https://github.com/getsentry/sentry-javascript/releases)
- [Changelog](https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/getsentry/sentry-javascript/compare/10.62.0...10.63.0)

Updates `@sentry/opentelemetry` from 10.62.0 to 10.63.0
- [Release notes](https://github.com/getsentry/sentry-javascript/releases)
- [Changelog](https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/getsentry/sentry-javascript/compare/10.62.0...10.63.0)

Updates `@sentry/react` from 10.62.0 to 10.63.0
- [Release notes](https://github.com/getsentry/sentry-javascript/releases)
- [Changelog](https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/getsentry/sentry-javascript/compare/10.62.0...10.63.0)

Updates `@sentry/replay` from 10.62.0 to 10.63.0
- [Release notes](https://github.com/getsentry/sentry-javascript/releases)
- [Changelog](https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/getsentry/sentry-javascript/compare/10.62.0...10.63.0)

Updates `@sentry/replay-canvas` from 10.62.0 to 10.63.0
- [Release notes](https://github.com/getsentry/sentry-javascript/releases)
- [Changelog](https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/getsentry/sentry-javascript/compare/10.62.0...10.63.0)

Updates `@sentry/server-utils` from 10.62.0 to 10.63.0
- [Release notes](https://github.com/getsentry/sentry-javascript/releases)
- [Changelog](https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/getsentry/sentry-javascript/compare/10.62.0...10.63.0)

Updates `@sentry/vercel-edge` from 10.62.0 to 10.63.0
- [Release notes](https://github.com/getsentry/sentry-javascript/releases)
- [Changelog](https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/getsentry/sentry-javascript/compare/10.62.0...10.63.0)

Updates `baseline-browser-mapping` from 2.10.40 to 2.10.42
- [Release notes](https://github.com/web-platform-dx/baseline-browser-mapping/releases)
- [Commits](https://github.com/web-platform-dx/baseline-browser-mapping/compare/v2.10.40...v2.10.42)

Updates `caniuse-lite` from 1.0.30001799 to 1.0.30001800
- [Commits](https://github.com/browserslist/caniuse-lite/compare/1.0.30001799...1.0.30001800)

Updates `electron-to-chromium` from 1.5.380 to 1.5.387
- [Changelog](https://github.com/Kilian/electron-to-chromium/blob/main/CHANGELOG.md)
- [Commits](https://github.com/Kilian/electron-to-chromium/compare/v1.5.380...v1.5.387)

Updates `es-module-lexer` from 2.1.0 to 2.3.0
- [Release notes](https://github.com/guybedford/es-module-lexer/releases)
- [Commits](https://github.com/guybedford/es-module-lexer/compare/2.1.0...2.3.0)

Updates `fast-uri` from 3.1.2 to 3.1.3
- [Release notes](https://github.com/fastify/fast-uri/releases)
- [Commits](https://github.com/fastify/fast-uri/compare/v3.1.2...v3.1.3)

Updates `import-in-the-middle` from 3.2.0 to 3.3.0
- [Release notes](https://github.com/nodejs/import-in-the-middle/releases)
- [Changelog](https://github.com/nodejs/import-in-the-middle/blob/main/CHANGELOG.md)
- [Commits](https://github.com/nodejs/import-in-the-middle/compare/import-in-the-middle-v3.2.0...import-in-the-middle-v3.3.0)

Updates `oxc-resolver` from 11.21.3 to 11.23.0
- [Release notes](https://github.com/oxc-project/oxc-resolver/releases)
- [Changelog](https://github.com/oxc-project/oxc-resolver/blob/main/CHANGELOG.md)
- [Commits](https://github.com/oxc-project/oxc-resolver/compare/v11.21.3...v11.23.0)

Updates `tldts` from 7.4.5 to 7.4.6
- [Release notes](https://github.com/remusao/tldts/releases)
- [Changelog](https://github.com/remusao/tldts/blob/master/CHANGELOG.md)
- [Commits](https://github.com/remusao/tldts/compare/v7.4.5...v7.4.6)

Updates `tldts-core` from 7.4.5 to 7.4.6
- [Release notes](https://github.com/remusao/tldts/releases)
- [Changelog](https://github.com/remusao/tldts/blob/master/CHANGELOG.md)
- [Commits](https://github.com/remusao/tldts/compare/v7.4.5...v7.4.6)

Updates `typescript-eslint` from 8.62.0 to 8.62.1
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.62.1/packages/typescript-eslint)

Updates `webpack` from 5.108.1 to 5.108.4
- [Release notes](https://github.com/webpack/webpack/releases)
- [Changelog](https://github.com/webpack/webpack/blob/main/CHANGELOG.md)
- [Commits](https://github.com/webpack/webpack/compare/v5.108.1...v5.108.4)

---
updated-dependencies:
- dependency-name: "@sentry/nextjs"
  dependency-version: 10.63.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-patch
- dependency-name: react-hook-form
  dependency-version: 7.81.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-patch
- dependency-name: recharts
  dependency-version: 3.9.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-patch
- dependency-name: "@apm-js-collab/tracing-hooks"
  dependency-version: 0.10.1
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: minor-patch
- dependency-name: "@opentelemetry/core"
  dependency-version: 2.9.0
  dependency-type: indirect
  update-type: version-update:semver-minor
  dependency-group: minor-patch
- dependency-name: "@opentelemetry/resources"
  dependency-version: 2.9.0
  dependency-type: indirect
  update-type: version-update:semver-minor
  dependency-group: minor-patch
- dependency-name: "@opentelemetry/sdk-trace-base"
  dependency-version: 2.9.0
  dependency-type: indirect
  update-type: version-update:semver-minor
  dependency-group: minor-patch
- dependency-name: immer
  dependency-version: 11.1.11
  dependency-type: indirect
  update-type: version-update:semver-major
  dependency-group: minor-patch
- dependency-name: "@sentry/browser"
  dependency-version: 10.63.0
  dependency-type: indirect
  update-type: version-update:semver-minor
  dependency-group: minor-patch
- dependency-name: "@sentry/browser-utils"
  dependency-version: 10.63.0
  dependency-type: indirect
  update-type: version-update:semver-minor
  dependency-group: minor-patch
- dependency-name: "@sentry/core"
  dependency-version: 10.63.0
  dependency-type: indirect
  update-type: version-update:semver-minor
  dependency-group: minor-patch
- dependency-name: "@sentry/feedback"
  dependency-version: 10.63.0
  dependency-type: indirect
  update-type: version-update:semver-minor
  dependency-group: minor-patch
- dependency-name: "@sentry/node"
  dependency-version: 10.63.0
  dependency-type: indirect
  update-type: version-update:semver-minor
  dependency-group: minor-patch
- dependency-name: "@sentry/node-core"
  dependency-version: 10.63.0
  dependency-type: indirect
  update-type: version-update:semver-minor
  dependency-group: minor-patch
- dependency-name: "@sentry/opentelemetry"
  dependency-version: 10.63.0
  dependency-type: indirect
  update-type: version-update:semver-minor
  dependency-group: minor-patch
- dependency-name: "@sentry/react"
  dependency-version: 10.63.0
  dependency-type: indirect
  update-type: version-update:semver-minor
  dependency-group: minor-patch
- dependency-name: "@sentry/replay"
  dependency-version: 10.63.0
  dependency-type: indirect
  update-type: version-update:semver-minor
  dependency-group: minor-patch
- dependency-name: "@sentry/replay-canvas"
  dependency-version: 10.63.0
  dependency-type: indirect
  update-type: version-update:semver-minor
  dependency-group: minor-patch
- dependency-name: "@sentry/server-utils"
  dependency-version: 10.63.0
  dependency-type: indirect
  update-type: version-update:semver-minor
  dependency-group: minor-patch
- dependency-name: "@sentry/vercel-edge"
  dependency-version: 10.63.0
  dependency-type: indirect
  update-type: version-update:semver-minor
  dependency-group: minor-patch
- dependency-name: baseline-browser-mapping
  dependency-version: 2.10.42
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: minor-patch
- dependency-name: caniuse-lite
  dependency-version: 1.0.30001800
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: minor-patch
- dependency-name: electron-to-chromium
  dependency-version: 1.5.387
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: minor-patch
- dependency-name: es-module-lexer
  dependency-version: 2.3.0
  dependency-type: indirect
  update-type: version-update:semver-minor
  dependency-group: minor-patch
- dependency-name: fast-uri
  dependency-version: 3.1.3
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: minor-patch
- dependency-name: import-in-the-middle
  dependency-version: 3.3.0
  dependency-type: indirect
  update-type: version-update:semver-minor
  dependency-group: minor-patch
- dependency-name: oxc-resolver
  dependency-version: 11.23.0
  dependency-type: indirect
  update-type: version-update:semver-minor
  dependency-group: minor-patch
- dependency-name: tldts
  dependency-version: 7.4.6
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: minor-patch
- dependency-name: tldts-core
  dependency-version: 7.4.6
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: minor-patch
- dependency-name: typescript-eslint
  dependency-version: 8.62.1
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: minor-patch
- dependency-name: webpack
  dependency-version: 5.108.4
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: minor-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* feat(i18n): language switcher in the profile menu

Completes the i18n MVP loop from the foundation (#222): users can now actually
pick a language. A LanguageSwitcher submenu in the profile dropdown lists the
supported locales (native names), checks the active one, sets the `locale`
cookie (which the proxy reads above Accept-Language), and reloads so the server
re-renders with the new x-locale. Its own label is translated (common.language),
demonstrating the t() path end-to-end.

* fix(export): warn when "export all" is truncated at the page cap

fetchAllPages / fetchAllAssets stop at a hard maxPages cap (~50k rows) to avoid a
runaway loop, but silently returned the partial set — the success toast then
claimed "Exported N rows" as if complete, so a tenant with >50k rows exported an
incomplete CSV believing it was whole.

Both now invoke an onTruncated callback when the cap cuts the result short, and
the export handlers (assets, exposures, components, remediation) surface a
warning toast ("Export limited to the first N … — refine filters to export the
rest"). No truncation → no callback, unchanged behaviour. Adds fetchAllPages
unit tests for the truncated and non-truncated paths.

* feat(i18n): translate all sidebar item labels (Vietnamese)

Extends the i18n foundation (#222) + switcher (#224): the entire sidebar now
localizes, not just the group titles. Adds 95 nav.item.* entries to en + vi
(acronyms/technical terms — API, CI/CD, SBOM, SCIM, SAML, SIEM, MITRE, K8s — kept)
and a NavLabel component that renders each menu item's label via t() with the
English title as fallback (so untranslated items degrade gracefully). Also adds
a catalog-parity test guarding that en and vi keep identical, non-empty keys.

Switch to Tiếng Việt → the whole sidebar reads Bề mặt tấn công / Kho tài sản /
Phát hiện / Kiểm chứng / … Tooltips stay English for now (follow-up).

* fix(shared): break barrel self-import cycle (undefined component on /crown-jewels)

coming-soon-page.tsx is part of the @/features/shared barrel yet imported
PageHeader FROM '@/features/shared' — a circular dependency through the barrel.
Under Turbopack that leaves some barrel exports (e.g. RiskScoreBadge) undefined
at module-init depending on load order, which crashed the crown-jewels table
cell with 'Element type is invalid ... got: undefined'.

Import PageHeader directly from './page-header' to break the cycle. No other
shared component self-imports the barrel.

* feat(assets): make criticality / scope / exposure editable on every asset form

The asset deep-dive found the headline CTEM classification fields were shown but
not settable: the shared asset form hardcoded criticality='medium',
scope='internal', exposure='unknown' on create and never sent them on update —
even though the API accepts them. So an operator could not mark an asset
critical or set its exposure; those fields were backend-inference-only.

- AssetFormDialogShared now renders universal Criticality / Scope / Exposure
  selects (a responsive 3-col row) on every asset type, prefilled from the asset
  in edit mode and sensible defaults on create, and forwards them in the
  submit payload alongside owner_ref.
- asset-page.tsx create/update handlers read these from the form instead of
  hardcoding (create) / omitting (update). The updateAsset hook already forwards
  them.

Pairs with the backend ingest-seam fix (api #276): the scanner infers exposure/
classification on ingest, and humans can now review and override it in the UI.
tsc clean.

* feat(assets): dedup review UI — approve/reject correlator-flagged merges

The asset deep-dive found the identity/dedup pipeline was built end-to-end on the
backend (correlator enqueues reviews; approve/reject endpoints; useDedupReviews/
approveDedupReview/rejectDedupReview hooks all existed) but had ZERO UI consumers
— merges happened invisibly and operators only saw them after the fact in
Identity History. This ships the missing operator surface.

- DedupReviewPage: lists pending reviews (identity, keep asset + finding count,
  merge candidates + finding count, when flagged) with Merge / Keep-separate
  actions wired to the existing approve/reject endpoints; toast + SWR revalidate;
  AssetsWrite-gated; empty/loading/error states.
- Route /assets/duplicates (covered by the existing /assets/** permission wildcard).
- Sidebar: 'Duplicates' item under Asset Inventory (sidebar-route-consistency
  test green — the nav item resolves to a real route).

tsc + lint clean.

* chore(assets): purge ~5.2k lines of dead asset mock-data + unused scaffolding

The asset deep-dive found a large dead mock tree shipping unused: the per-type
mock-data (~3.7k lines across 15 files), mock-relationships.ts (1.3k), the
unused AssetPageTemplate scaffold, and a getCachedAssetStats fetcher (zero
consumers) that was the only thing referencing the mock getAssetStats.

All verified unused: the real inventory hits live APIs (useAssets/useAssetStats
etc.), the only getMock* usage elsewhere is asset-groups' own stats, and tsc
caught + I removed the single latent consumer (getCachedAssetStats). Removed the
two barrel re-exports (features/assets + lib). tsc, lint, and the 49 asset
feature tests all green.

Net: -5,206 lines, smaller bundle graph, and no more mock tree misleading future
readers about what's real.

* feat(remediations): Remediations page — resolve a solution family in one action (RFC-015 Phase 2)

Frontend for the backend remediation-groups API (api#288). A single patch that
fixes many findings can now be resolved in one click instead of closing each
finding.

- src/features/remediation-groups/: types, SWR hooks (useRemediationGroups +
  useResolveRemediationGroup), and the ResolveGroupDialog (outcome fix_applied
  default / resolved, optional note, large-bulk confirm).
- /remediations page: DataTable of groups (fix title, finding/asset counts,
  severity breakdown reusing the shared SeverityBadge), per-row 'Resolve all'
  gated by findings:remediation:write.
- Sidebar entry under Mobilization + route-permission entries.

Reuses shared primitives (PageHeader, DataTable, SeverityBadge) and the API
client (CSRF-safe post). Default outcome fix_applied → the next rescan verifies.

Tests: hook URL construction (incl. key URL-encoding). type-check + lint clean;
next build green (/remediations route registered).

* feat(remediation): campaign 'Resolve open findings' action (RFC-015 Phase 3 UI) (#232)

Surfaces the backend campaign-resolve endpoint (api#291) in the UI. The
campaign detail Progress card now shows a 'Resolve open findings' button (when
any remain, gated by findings:remediation:write) that opens a dialog to
transition all the campaign's open findings at once — outcome fix_applied
(default, verify-on-rescan) or resolved, optional note, large-bulk confirm.

- useResolveRemediationCampaign hook (POST /remediation/campaigns/{id}/resolve).
- ResolveCampaignDialog (mirrors the remediation-groups resolve dialog).
- Wired into the campaign detail page; refreshes progress on success.

type-check + lint clean; build green; hook test.

Co-authored-by: Nguyen Manh <0xmanhnv@gmail.com>

* feat(remediation): track a solution-family group as a campaign (#233)

Adds a 'Track as campaign' action to each remediation group row. It creates a
tracked remediation campaign (name + priority) scoped to the group's
remediation_key via finding_filter, then navigates to the campaign — turning a
one-shot bulk-resolve into an ongoing, assignable effort whose progress follows
the whole solution family as new matching findings arrive.

Reuses the existing useCreateRemediationCampaign hook; no new endpoint.

Co-authored-by: Nguyen Manh <0xmanhnv@gmail.com>

* feat(mcp): AI Access (MCP) connect settings page (#234)

Adds settings/integrations/mcp — mint a read-only MCP connection key and copy the
Claude Desktop/Code client config. The key is pre-scoped to exactly the read
permissions the MCP server's tools require (findings:read, assets:read,
compliance:frameworks:read), so a scopeless key can't reach the endpoint.

- Reuses the existing useCreateApiKey hook; no new API surface.
- Reveal-once key + copyable client configuration (URL + Authorization: Bearer),
  endpoint defaulted to this origin's /api/v1/mcp.
- Generate action gated on integrations:api_keys:write.
- Sidebar entry under Integrations (Bot icon).

Pairs with api#299 (RFC-016).

Co-authored-by: Nguyen Manh <0xmanhnv@gmail.com>

* deps(npm): bump the testing group with 9 updates (#235)

Bumps the testing group with 9 updates:

| Package | From | To |
| --- | --- | --- |
| [@vitest/coverage-v8](https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8) | `4.1.9` | `4.1.10` |
| [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest) | `4.1.9` | `4.1.10` |
| [@vitest/expect](https://github.com/vitest-dev/vitest/tree/HEAD/packages/expect) | `4.1.9` | `4.1.10` |
| [@vitest/mocker](https://github.com/vitest-dev/vitest/tree/HEAD/packages/mocker) | `4.1.9` | `4.1.10` |
| [@vitest/pretty-format](https://github.com/vitest-dev/vitest/tree/HEAD/packages/pretty-format) | `4.1.9` | `4.1.10` |
| [@vitest/runner](https://github.com/vitest-dev/vitest/tree/HEAD/packages/runner) | `4.1.9` | `4.1.10` |
| [@vitest/snapshot](https://github.com/vitest-dev/vitest/tree/HEAD/packages/snapshot) | `4.1.9` | `4.1.10` |
| [@vitest/spy](https://github.com/vitest-dev/vitest/tree/HEAD/packages/spy) | `4.1.9` | `4.1.10` |
| [@vitest/utils](https://github.com/vitest-dev/vitest/tree/HEAD/packages/utils) | `4.1.9` | `4.1.10` |


Updates `@vitest/coverage-v8` from 4.1.9 to 4.1.10
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Changelog](https://github.com/vitest-dev/vitest/blob/main/docs/releases.md)
- [Commits](https://github.com/vitest-dev/vitest/commits/v4.1.10/packages/coverage-v8)

Up…
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant