(() => {
return isPackageSelected(props.result.package.name)
})
-function formatScore(value?: number): string {
- if (value === undefined || value === 0) return '-'
- return Math.round(value * 100).toString()
-}
-
function isColumnVisible(id: string): boolean {
return props.columns.find(c => c.id === id)?.visible ?? false
}
@@ -163,38 +157,6 @@ const compactNumberFormatter = useCompactNumberFormatter()
-
-
-
- {{ formatScore(score?.detail?.quality) }}
-
-
-
-
- {{ formatScore(score?.detail?.popularity) }}
-
-
-
-
- {{ formatScore(score?.detail?.maintenance) }}
-
-
-
-
- {{ formatScore(score?.final) }}
-
-
diff --git a/app/components/Package/TrendsChart.vue b/app/components/Package/TrendsChart.vue
index 21bddcf2f7..e81a32d804 100644
--- a/app/components/Package/TrendsChart.vue
+++ b/app/components/Package/TrendsChart.vue
@@ -1622,6 +1622,15 @@ watch(selectedMetric, value => {
if (!isMounted.value) return
loadMetric(value)
})
+
+// Sparkline charts (a11y alternative display for multi series)
+const chartLayout = usePermalink<'combined' | 'split'>('layout', 'combined')
+const isSparklineLayout = computed({
+ get: () => chartLayout.value === 'split',
+ set: (v: boolean) => {
+ chartLayout.value = v ? 'split' : 'combined'
+ },
+})
@@ -1630,6 +1639,26 @@ watch(selectedMetric, value => {
id="trends-chart"
:aria-busy="activeMetricState.pending ? 'true' : 'false'"
>
+
+
+
+ {{ $t('package.trends.chart_view_combined') }}
+
+
+ {{ $t('package.trends.chart_view_split') }}
+
+
+
+
{
role="region"
aria-labelledby="trends-chart-title"
:class="
- isMobile === false && width > 0
- ? showCorrectionControls
- ? 'h-[491px]'
- : 'h-[567px]'
- : 'min-h-[260px]'
+ isSparklineLayout || !inModal
+ ? undefined
+ : isMobile === false && width > 0
+ ? showCorrectionControls
+ ? 'h-[491px]'
+ : 'h-[567px]'
+ : 'min-h-[260px]'
"
>
-
+
+
+
+
+
route.name === 'package' || route.name === 'package-version')
const isActive = computed(() => !excludedRoutes.has(route.name as string) && !isPackagePage.value)
diff --git a/app/components/Tab/Item.vue b/app/components/Tab/Item.vue
new file mode 100644
index 0000000000..6b0f4c3aff
--- /dev/null
+++ b/app/components/Tab/Item.vue
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/app/components/Tab/List.vue b/app/components/Tab/List.vue
new file mode 100644
index 0000000000..f121ea94d2
--- /dev/null
+++ b/app/components/Tab/List.vue
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
diff --git a/app/components/Tab/Panel.vue b/app/components/Tab/Panel.vue
new file mode 100644
index 0000000000..af38532099
--- /dev/null
+++ b/app/components/Tab/Panel.vue
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
diff --git a/app/components/Tab/Root.vue b/app/components/Tab/Root.vue
new file mode 100644
index 0000000000..e6fbba2915
--- /dev/null
+++ b/app/components/Tab/Root.vue
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
diff --git a/app/composables/npm/search-utils.ts b/app/composables/npm/search-utils.ts
index c9b4816012..290feaea46 100644
--- a/app/composables/npm/search-utils.ts
+++ b/app/composables/npm/search-utils.ts
@@ -11,7 +11,6 @@ export function metaToSearchResult(meta: PackageMetaResponse): NpmSearchResult {
author: meta.author,
maintainers: meta.maintainers,
},
- score: { final: 0, detail: { quality: 0, popularity: 0, maintenance: 0 } },
searchScore: 0,
downloads: meta.weeklyDownloads !== undefined ? { weekly: meta.weeklyDownloads } : undefined,
updated: meta.date,
diff --git a/app/composables/npm/useAlgoliaSearch.ts b/app/composables/npm/useAlgoliaSearch.ts
index 5f8d08ab1a..a6ba645e18 100644
--- a/app/composables/npm/useAlgoliaSearch.ts
+++ b/app/composables/npm/useAlgoliaSearch.ts
@@ -91,14 +91,6 @@ function hitToSearchResult(hit: AlgoliaHit): NpmSearchResult {
}))
: [],
},
- score: {
- final: 0,
- detail: {
- quality: hit.popular ? 1 : 0,
- popularity: hit.downloadsRatio,
- maintenance: 0,
- },
- },
searchScore: 0,
downloads: {
weekly: Math.round(hit.downloadsLast30Days / 4.3),
diff --git a/app/composables/npm/usePackage.ts b/app/composables/npm/usePackage.ts
index 50a40e6c52..a71d8eb566 100644
--- a/app/composables/npm/usePackage.ts
+++ b/app/composables/npm/usePackage.ts
@@ -37,7 +37,7 @@ export function transformPackument(
const timeA = pkg.time[a]
const timeB = pkg.time[b]
if (!timeA || !timeB) return 0
- return new Date(timeB).getTime() - new Date(timeA).getTime()
+ return Date.parse(timeB) - Date.parse(timeA)
})
.slice(0, RECENT_VERSIONS_COUNT)
diff --git a/app/composables/useCharts.ts b/app/composables/useCharts.ts
index a767c54d0e..c2b3fa039a 100644
--- a/app/composables/useCharts.ts
+++ b/app/composables/useCharts.ts
@@ -6,6 +6,7 @@ import type {
WeeklyDataPoint,
YearlyDataPoint,
} from '~/types/chart'
+import { mapWithConcurrency } from '#shared/utils/async'
import { fetchNpmDownloadsRange } from '~/utils/npm/api'
export type PackumentLikeForTime = {
@@ -256,12 +257,12 @@ async function fetchDailyRangeChunked(packageName: string, startIso: string, end
return fetchDailyRangeCached(packageName, startIso, endIso)
}
- const all: DailyRawPoint[] = []
-
- for (const range of ranges) {
- const part = await fetchDailyRangeCached(packageName, range.startIso, range.endIso)
- all.push(...part)
- }
+ const parts = await mapWithConcurrency(
+ ranges,
+ range => fetchDailyRangeCached(packageName, range.startIso, range.endIso),
+ 10,
+ )
+ const all = parts.flat()
return mergeDailyPoints(all)
}
diff --git a/app/composables/useGlobalSearch.ts b/app/composables/useGlobalSearch.ts
index 77367a049a..45bb478487 100644
--- a/app/composables/useGlobalSearch.ts
+++ b/app/composables/useGlobalSearch.ts
@@ -4,6 +4,8 @@ import { debounce } from 'perfect-debounce'
// Pages that have their own local filter using ?q
const pagesWithLocalFilter = new Set(['~username', 'org'])
+const SEARCH_DEBOUNCE_MS = 100
+
export function useGlobalSearch(place: 'header' | 'content' = 'content') {
const { settings } = useSettings()
const { searchProvider } = useSearchProvider()
@@ -27,10 +29,14 @@ export function useGlobalSearch(place: 'header' | 'content' = 'content') {
// Syncs instantly when instantSearch is on, but only on Enter press when off
const committedSearchQuery = useState('committed-search-query', () => searchQuery.value)
+ const commitSearchQuery = debounce((val: string) => {
+ committedSearchQuery.value = val
+ }, SEARCH_DEBOUNCE_MS)
+
// This is basically doing instant search as user types
watch(searchQuery, val => {
if (settings.value.instantSearch) {
- committedSearchQuery.value = val
+ commitSearchQuery(val)
}
})
@@ -71,10 +77,11 @@ export function useGlobalSearch(place: 'header' | 'content' = 'content') {
})
}
- const updateUrlQuery = debounce(updateUrlQueryImpl, 250)
+ const updateUrlQuery = debounce(updateUrlQueryImpl, SEARCH_DEBOUNCE_MS)
function flushUpdateUrlQuery() {
// Commit the current query when explicitly submitted (Enter pressed)
+ commitSearchQuery.cancel()
committedSearchQuery.value = searchQuery.value
// When instant search is off the debounce queue is empty, so call directly
if (!settings.value.instantSearch) {
diff --git a/app/composables/useMarkdown.ts b/app/composables/useMarkdown.ts
index cd70bf6529..97355ecf59 100644
--- a/app/composables/useMarkdown.ts
+++ b/app/composables/useMarkdown.ts
@@ -4,8 +4,6 @@ interface UseMarkdownOptions {
text: string
/** When true, renders link text without the anchor tag (useful when inside another link) */
plain?: boolean
- /** Package name to strip from the beginning of the description (if present) */
- packageName?: string
}
export function useMarkdown(options: MaybeRefOrGetter) {
@@ -25,7 +23,7 @@ function stripMarkdownImages(text: string): string {
}
// Strip HTML tags and escape remaining HTML to prevent XSS
-function stripAndEscapeHtml(text: string, packageName?: string): string {
+function stripAndEscapeHtml(text: string): string {
// First decode any HTML entities in the input
let stripped = decodeHtmlEntities(text)
@@ -45,18 +43,6 @@ function stripAndEscapeHtml(text: string, packageName?: string): string {
(match, codeSpan: string | undefined) => codeSpan ?? '',
)
- if (packageName) {
- // Trim first to handle leading/trailing whitespace from stripped HTML
- stripped = stripped.trim()
- // Collapse multiple whitespace into single space
- stripped = stripped.replace(/\s+/g, ' ')
- // Escape special regex characters in package name
- const escapedName = packageName.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
- // Match package name at the start, optionally followed by: space, dash, colon, hyphen, or just space
- const namePattern = new RegExp(`^${escapedName}\\s*[-:—]?\\s*`, 'i')
- stripped = stripped.replace(namePattern, '').trim()
- }
-
// Then escape any remaining HTML entities
return stripped
.replace(/&/g, '&')
@@ -67,11 +53,11 @@ function stripAndEscapeHtml(text: string, packageName?: string): string {
}
// Parse simple inline markdown to HTML
-function parseMarkdown({ text, packageName, plain }: UseMarkdownOptions): string {
+function parseMarkdown({ text, plain }: UseMarkdownOptions): string {
if (!text) return ''
// First strip HTML tags and escape remaining HTML
- let html = stripAndEscapeHtml(text, packageName)
+ let html = stripAndEscapeHtml(text)
// Bold: **text** or __text__
html = html.replace(/\*\*(.+?)\*\*/g, '$1 ')
diff --git a/app/composables/usePackageSelection.ts b/app/composables/usePackageSelection.ts
index 2e431abc7e..d677f4288a 100644
--- a/app/composables/usePackageSelection.ts
+++ b/app/composables/usePackageSelection.ts
@@ -1,4 +1,4 @@
-export const MAX_PACKAGE_SELECTION = 4
+export const MAX_PACKAGE_SELECTION = 10
export function usePackageSelection() {
const selectedPackagesParam = useRouteQuery('selection', '', { mode: 'replace' })
diff --git a/app/composables/useRepoMeta.ts b/app/composables/useRepoMeta.ts
index 226812338e..84038f88ec 100644
--- a/app/composables/useRepoMeta.ts
+++ b/app/composables/useRepoMeta.ts
@@ -3,6 +3,8 @@ import { parseRepoUrl, GITLAB_HOSTS } from '#shared/utils/git-providers'
// TTL for git repo metadata (10 minutes - repo stats don't change frequently)
const REPO_META_TTL = 60 * 10
+// Other TTLs for known sources
+const UNGH_REPO_META_TTL = 60 * 60 * 3 // 3 hours (ungh caches 6 hours server-side, but we run it half more frequently)
export type RepoMetaLinks = {
repo: string
@@ -134,7 +136,7 @@ const githubAdapter: ProviderAdapter = {
const { data } = await cachedFetch(
`https://ungh.cc/repos/${ref.owner}/${ref.repo}`,
{ headers: { 'User-Agent': 'npmx', ...options.headers }, ...options },
- REPO_META_TTL,
+ UNGH_REPO_META_TTL,
)
res = data
} catch {
diff --git a/app/composables/useStructuredFilters.ts b/app/composables/useStructuredFilters.ts
index 7b0af8cc01..f229384d6a 100644
--- a/app/composables/useStructuredFilters.ts
+++ b/app/composables/useStructuredFilters.ts
@@ -327,23 +327,11 @@ export function useStructuredFilters(options: UseStructuredFiltersOptions) {
diff = (a.downloads?.weekly ?? 0) - (b.downloads?.weekly ?? 0)
break
case 'updated':
- diff = new Date(a.package.date).getTime() - new Date(b.package.date).getTime()
+ diff = Date.parse(a.package.date) - Date.parse(b.package.date)
break
case 'name':
diff = a.package.name.localeCompare(b.package.name)
break
- case 'quality':
- diff = (a.score?.detail?.quality ?? 0) - (b.score?.detail?.quality ?? 0)
- break
- case 'popularity':
- diff = (a.score?.detail?.popularity ?? 0) - (b.score?.detail?.popularity ?? 0)
- break
- case 'maintenance':
- diff = (a.score?.detail?.maintenance ?? 0) - (b.score?.detail?.maintenance ?? 0)
- break
- case 'score':
- diff = (a.score?.final ?? 0) - (b.score?.final ?? 0)
- break
case 'relevance':
// Relevance preserves server order (already sorted by search relevance)
diff = 0
diff --git a/app/pages/brand.vue b/app/pages/brand.vue
new file mode 100644
index 0000000000..91dd3de30c
--- /dev/null
+++ b/app/pages/brand.vue
@@ -0,0 +1,331 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('brand.logos.title') }}
+
+
+ {{ $t('brand.logos.description') }}
+
+
+
+
+
+ {{ logo.name() }}
+
+
+
+
+
+
+
+
+
+
{{
+ $t('brand.logos.on_dark')
+ }}
+
+
+
+ {{ $t('brand.logos.download_svg') }}
+
+
+
+ {{ $t('brand.logos.download_png') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
{{
+ $t('brand.logos.on_light')
+ }}
+
+
+
+ {{ $t('brand.logos.download_svg') }}
+
+
+
+ {{ $t('brand.logos.download_png') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('brand.typography.title') }}
+
+
+ {{ $t('brand.typography.description') }}
+
+
+
+
+
+
+ {{ $t('brand.typography.sans') }}
+
+
+ {{ $t('brand.typography.sans_desc') }}
+
+
+
+ {{ $t('brand.typography.pangram') }}
+
+
+ {{ $t('brand.typography.numbers') }}
+
+
+
+
+
+
+
+ {{ $t('brand.typography.mono') }}
+
+
+ {{ $t('brand.typography.mono_desc') }}
+
+
+
+ {{ $t('brand.typography.pangram') }}
+
+
+ {{ $t('brand.typography.numbers') }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/pages/compare.vue b/app/pages/compare.vue
index db383e0e03..5f9bf00c0f 100644
--- a/app/pages/compare.vue
+++ b/app/pages/compare.vue
@@ -10,7 +10,6 @@ definePageMeta({
const { locale } = useI18n()
const { copied, copy } = useClipboard({ copiedDuring: 2000 })
-const maxPackages = 4
// Sync packages with URL query param (stable ref - doesn't change on other query changes)
const packagesParam = useRouteQuery('packages', '', { mode: 'replace' })
@@ -23,7 +22,7 @@ const packages = computed({
.split(',')
.map(p => p.trim())
.filter(p => p.length > 0)
- .slice(0, maxPackages)
+ .slice(0, MAX_PACKAGE_SELECTION)
},
set(value) {
packagesParam.value = value.length > 0 ? value.join(',') : ''
@@ -61,12 +60,12 @@ const gridColumns = computed(() =>
// Whether we can add the no-dep column (not already added and have room)
const canAddNoDep = computed(
- () => packages.value.length < maxPackages && !packages.value.includes(NO_DEPENDENCY_ID),
+ () => packages.value.length < MAX_PACKAGE_SELECTION && !packages.value.includes(NO_DEPENDENCY_ID),
)
// Add "no dependency" column to comparison
function addNoDep() {
- if (packages.value.length >= maxPackages) return
+ if (packages.value.length >= MAX_PACKAGE_SELECTION) return
if (packages.value.includes(NO_DEPENDENCY_ID)) return
packages.value = [...packages.value, NO_DEPENDENCY_ID]
}
@@ -77,7 +76,7 @@ const columnLoading = computed(() => packages.value.map((_, i) => isColumnLoadin
// Check if we have enough packages to compare
const canCompare = computed(() => packages.value.length >= 2)
-const comparisonView = ref<'table' | 'charts'>('table')
+const comparisonView = usePermalink<'table' | 'charts'>('view', 'table')
// Extract headers from columns for facet rows
const gridHeaders = computed(() =>
@@ -183,7 +182,7 @@ useSeoMeta({
{{ $t('compare.packages.section_packages') }}
-
+
@@ -274,57 +273,50 @@ useSeoMeta({
-
-
-
- {{ $t('compare.packages.table_view') }}
-
-
-
-
- {{ $t('compare.packages.charts_view') }}
-
-
-
-
-
-
-
-
-
+
+ {{ $t('compare.packages.table_view') }}
+
+
+ {{ $t('compare.packages.charts_view') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+ {{ $t('compare.packages.no_chartable_data') }}
+
+
+
(() => {
// Process package description
const pkgDescription = useMarkdown(() => ({
text: pkg.value?.description ?? '',
- packageName: pkg.value?.name,
}))
// Fetch dependency analysis (lazy, client-side)
diff --git a/app/pages/search.vue b/app/pages/search.vue
index b306359ca7..b635065aa0 100644
--- a/app/pages/search.vue
+++ b/app/pages/search.vue
@@ -134,10 +134,6 @@ const ALL_SORT_KEYS: SortKey[] = [
'downloads-year',
'updated',
'name',
- 'quality',
- 'popularity',
- 'maintenance',
- 'score',
]
// Disable sort keys the current provider can't meaningfully sort by
@@ -238,7 +234,7 @@ const displayResults = computed(() => {
diff = (a.downloads?.weekly ?? 0) - (b.downloads?.weekly ?? 0)
break
case 'updated':
- diff = new Date(a.package.date).getTime() - new Date(b.package.date).getTime()
+ diff = Date.parse(a.package.date) - Date.parse(b.package.date)
break
case 'name':
diff = a.package.name.localeCompare(b.package.name)
@@ -354,13 +350,19 @@ const canPublishToScope = computed(() => {
// Show claim prompt when valid name, available, either not connected or connected and has permission
const showClaimPrompt = computed(() => {
- return (
- isValidPackageName.value &&
- packageAvailability.value?.available === true &&
- packageAvailability.value.name === query.value.trim() &&
- (!isConnected.value || (isConnected.value && canPublishToScope.value)) &&
- status.value !== 'pending'
- )
+ if (!isValidPackageName.value) return false
+ if (isConnected.value && !canPublishToScope.value) return false
+
+ const avail = packageAvailability.value
+
+ // Confirmed: availability result matches current committed query
+ if (avail?.available === true && avail.name === committedQuery.value.trim()) return true
+
+ // Pending: a new fetch is in flight — keep the claim visible if the last known
+ // result was "available" so it doesn't flicker until new data arrives
+ if (status.value === 'pending' && avail?.available === true) return true
+
+ return false
})
const claimPackageModalRef = useTemplateRef('claimPackageModalRef')
@@ -711,22 +713,28 @@ onBeforeUnmount(() => {
status === 'success'
"
>
-
-
-
+
+
+
+
{
{{ $t('search.claim_button', { name: query }) }}
@@ -823,19 +832,25 @@ onBeforeUnmount(() => {
{{ $t('search.no_results', { query }) }}
-
-
-
+
+
+
+
+
diff --git a/app/utils/charts.ts b/app/utils/charts.ts
index 12ed2c0958..b11c8775bd 100644
--- a/app/utils/charts.ts
+++ b/app/utils/charts.ts
@@ -637,6 +637,7 @@ export async function copyAltTextForCompareFacetBarChart({
}
// Used in chart context menu callbacks
+// @todo replace with downloadFileLink
export function loadFile(link: string, filename: string) {
const a = document.createElement('a')
a.href = link
diff --git a/app/utils/download.ts b/app/utils/download.ts
new file mode 100644
index 0000000000..4b2c062bdc
--- /dev/null
+++ b/app/utils/download.ts
@@ -0,0 +1,30 @@
+/**
+ * Prompts the user to download the file that is at the given link, using
+ * the given default filename.
+ *
+ * Note: some browsers may ignore the `download` attribute for cross-origin URLs.
+ *
+ * @param link - The URL of the resource to download. This can be a normal URL,
+ * a data URL (e.g. "data:..."), or an object URL created via
+ * `URL.createObjectURL`.
+ * @param filename - Suggested filename for the downloaded file. The browser may
+ * override this value depending on user settings or the URL.
+ */
+export function downloadFileLink(link: string, filename: string) {
+ const a = document.createElement('a')
+ a.href = link
+ a.download = filename
+ a.click()
+}
+
+/**
+ * Prompt the user to download the provided Blob as a file with the given filename.
+ *
+ * @param blob - The Blob to download.
+ * @param filename - The filename that will be suggested to the user when saving.
+ */
+export function downloadFile(blob: Blob, filename: string) {
+ const url = URL.createObjectURL(blob)
+ downloadFileLink(url, filename)
+ URL.revokeObjectURL(url)
+}
diff --git a/app/utils/svg.ts b/app/utils/svg.ts
new file mode 100644
index 0000000000..2e0ac8b385
--- /dev/null
+++ b/app/utils/svg.ts
@@ -0,0 +1,47 @@
+/**
+ * Convert an SVG (URL or data URI) into a PNG Blob.
+ *
+ * @param svgUrl - URL or data URI pointing to the SVG to convert. If remote,
+ * the resource must be accessible (CORS allowed) for use in a canvas.
+ * @param width - Desired logical width (CSS pixels) of the output image.
+ * @param height - Desired logical height (CSS pixels) of the output image.
+ * @param scale - Optional pixel scale multiplier (use 2 for high-DPI output). Default: 2.
+ * @returns A Promise that resolves with a PNG Blob containing the rendered image.
+ * @throws {Error} If the SVG fails to load or if the canvas cannot produce a Blob.
+ */
+export async function svgToPng(
+ svgUrl: string,
+ width: number,
+ height: number,
+ scale = 2,
+): Promise
{
+ await document.fonts.ready
+
+ const img = new Image()
+ img.crossOrigin = 'anonymous'
+
+ const loaded = new Promise((resolve, reject) => {
+ // oxlint-disable-next-line eslint-plugin-unicorn(prefer-add-event-listener)
+ img.onload = () => resolve()
+ // oxlint-disable-next-line eslint-plugin-unicorn(prefer-add-event-listener)
+ img.onerror = () => reject(new Error(`Failed to load SVG: ${svgUrl}`))
+ })
+
+ img.src = svgUrl
+ await loaded
+
+ const canvas = document.createElement('canvas')
+ canvas.width = width * scale
+ canvas.height = height * scale
+
+ const ctx = canvas.getContext('2d')!
+ ctx.scale(scale, scale)
+ ctx.drawImage(img, 0, 0, width, height)
+
+ return new Promise((resolve, reject) => {
+ canvas.toBlob(blob => {
+ if (blob) resolve(blob)
+ else reject(new Error('Canvas toBlob failed'))
+ }, 'image/png')
+ })
+}
diff --git a/chromatic.config.json b/chromatic.config.json
index d03e414203..cb44a68276 100644
--- a/chromatic.config.json
+++ b/chromatic.config.json
@@ -3,5 +3,5 @@
"onlyChanged": true,
"autoAcceptChanges": "main",
"exitZeroOnChanges": false,
- "externals": ["public/**", "app/assets/**", ".storybook/**", "nuxt.config.ts", "uno.config.ts"]
+ "externals": [".storybook/**", "uno.config.ts"]
}
diff --git a/cli/package.json b/cli/package.json
index a924c17e1a..455fd222d8 100644
--- a/cli/package.json
+++ b/cli/package.json
@@ -43,7 +43,7 @@
"@types/node": "24.12.0",
"@types/validate-npm-package-name": "4.0.2",
"tsdown": "0.21.4",
- "typescript": "5.9.3"
+ "typescript": "6.0.2"
},
"engines": {
"node": ">=24"
diff --git a/cli/src/schemas.ts b/cli/src/schemas.ts
index de2cb627b9..7965ab59e6 100644
--- a/cli/src/schemas.ts
+++ b/cli/src/schemas.ts
@@ -95,6 +95,7 @@ export const PermissionSchema = v.picklist(
/**
* Validates operation types
+ * @internal
*/
export const OperationTypeSchema = v.picklist([
'org:add-user',
diff --git a/config/i18n.ts b/config/i18n.ts
index 5993b7551a..e775400e7c 100644
--- a/config/i18n.ts
+++ b/config/i18n.ts
@@ -33,6 +33,11 @@ export const countryLocaleVariants: Record & { code: str
name: 'Ελληνικά',
},*/
{
- code: 'de-DE',
- file: 'de-DE.json',
+ code: 'de',
+ file: 'de.json',
name: 'Deutsch',
},
{
@@ -338,13 +343,13 @@ const locales: (LocaleObjectData | (Omit & { code: str
code: 'tl-PH',
file: 'tl-PH.json',
name: 'Tagalog',
- },
- {
- code: 'vi-VN',
- file: 'vi-VN.json',
- name: 'Tiếng Việt',
- },
- {
+ },*/
+ {
+ code: 'vi-VN',
+ file: 'vi-VN.json',
+ name: 'Tiếng Việt',
+ },
+ /*{
code: 'cy',
file: 'cy.json',
name: 'Cymraeg',
diff --git a/docs/content/2.guide/6.badges.md b/docs/content/2.guide/6.badges.md
index 50ec38c5c4..ab7cfb4da3 100644
--- a/docs/content/2.guide/6.badges.md
+++ b/docs/content/2.guide/6.badges.md
@@ -27,10 +27,6 @@ npmx.dev offers many different SVG badges with stats about any package via its A
- **types**: Indicates if TypeScript types are included. :img{src="https://img.shields.io/badge/%233b82f6-3b82f6" class="inline align-middle h-5 w-14"} / :img{src="https://img.shields.io/badge/%2364748b-64748b" class="inline align-middle h-5 w-14"}
- **maintainers**: Displays the total count of package maintainers. :img{src="https://img.shields.io/badge/%2306b6d4-06b6d4" class="inline align-middle h-5 w-14"}
- **deprecated**: Shows if the package is active or deprecated. :img{src="https://img.shields.io/badge/%2322c55e-22c55e" class="inline align-middle h-5 w-14"} / :img{src="https://img.shields.io/badge/%23ef4444-ef4444" class="inline align-middle h-5 w-14"}
-- **quality**: NPMS.io quality score based on linting and tests. :img{src="https://img.shields.io/badge/%23a855f7-a855f7" class="inline align-middle h-5 w-14"}
-- **popularity**: NPMS.io popularity score based on downloads and stars. :img{src="https://img.shields.io/badge/%2306b6d4-06b6d4" class="inline align-middle h-5 w-14"}
-- **maintenance**: NPMS.io maintenance score based on activity. :img{src="https://img.shields.io/badge/%23eab308-eab308" class="inline align-middle h-5 w-14"}
-- **score**: The overall NPMS.io combined score. :img{src="https://img.shields.io/badge/%233b82f6-3b82f6" class="inline align-middle h-5 w-14"}
- **name**: Simple badge displaying the package name. :img{src="https://img.shields.io/badge/%2364748b-64748b" class="inline align-middle h-5 w-14"}
## Examples
@@ -55,10 +51,6 @@ npmx.dev offers many different SVG badges with stats about any package via its A
# Specific Version
[](https://npmx.dev/package/react)
-
-# Quality Score
-
-[](https://npmx.dev/package/pinia)
```
## Customization Parameters
diff --git a/docs/shared/utils/badges.ts b/docs/shared/utils/badges.ts
index c9152c0fad..2b7d425514 100644
--- a/docs/shared/utils/badges.ts
+++ b/docs/shared/utils/badges.ts
@@ -15,10 +15,6 @@ export const BADGE_TYPES = Object.freeze([
'types',
'maintainers',
'deprecated',
- 'quality',
- 'popularity',
- 'maintenance',
- 'score',
'name',
] as const)
diff --git a/i18n/locales/ar.json b/i18n/locales/ar.json
index c046ade81d..0edd42dcad 100644
--- a/i18n/locales/ar.json
+++ b/i18n/locales/ar.json
@@ -76,6 +76,10 @@
"links": "روابط",
"tap_to_search": "اضغط للبحث"
},
+ "blog": {
+ "author": {},
+ "atproto": {}
+ },
"settings": {
"title": "الإعدادات",
"tagline": "تخصيص تجربتك على npmx",
@@ -122,6 +126,7 @@
"edit_on_github": "تعديل على GitHub",
"view_guide": "دليل الترجمة"
},
+ "error": {},
"common": {
"loading": "جارٍ التحميل…",
"loading_more": "جارٍ تحميل المزيد…",
@@ -149,6 +154,9 @@
"github": "عرض على GitHub"
}
},
+ "profile": {
+ "invite": {}
+ },
"package": {
"not_found": "لم يتم العثور على الحزمة",
"not_found_message": "تعذّر العثور على الحزمة.",
@@ -161,6 +169,7 @@
"version": "تم إهمال هذا الإصدار.",
"no_reason": "لم يتم تقديم سبب"
},
+ "size_increase": {},
"replacement": {
"title": "قد لا تحتاج إلى هذه التبعية.",
"native": "يمكن استبدالها بـ {replacement}، المتوفرة منذ Node {nodeVersion}.",
@@ -307,7 +316,8 @@
"filter_help": "مساعدة فلتر نطاق semver",
"filter_tooltip": "فلترة الإصدارات باستخدام {link}. مثلاً ^3.0.0 يعرض كل إصدارات 3.x.",
"filter_tooltip_link": "نطاق semver",
- "no_matches": "لا توجد إصدارات تطابق هذا النطاق"
+ "no_matches": "لا توجد إصدارات تطابق هذا النطاق",
+ "copy_alt": {}
},
"dependencies": {
"title": "التبعيات ({count})",
@@ -367,7 +377,8 @@
"downloads": "التنزيلات",
"likes": "الإعجابات",
"contributors": "المساهمون"
- }
+ },
+ "copy_alt": {}
},
"downloads": {
"title": "التنزيلات الأسبوعية",
@@ -460,7 +471,8 @@
"b": "{size} بايت",
"kb": "{size} كيلوبايت",
"mb": "{size} ميجابايت"
- }
+ },
+ "download": {}
},
"connector": {
"modal": {
@@ -736,11 +748,7 @@
"downloads_month": "التنزيلات/الشهر",
"downloads_year": "التنزيلات/السنة",
"published": "آخر نشر",
- "name": "الاسم",
- "quality": "الجودة",
- "popularity": "الشعبية",
- "maintenance": "الصيانة",
- "score": "التنقيط"
+ "name": "الاسم"
},
"columns": {
"title": "الأعمدة",
@@ -754,10 +762,6 @@
"published": "آخر نشر",
"maintainers": "المشرفون",
"keywords": "الكلمات المفتاحية",
- "quality_score": "درجة الجودة",
- "popularity_score": "درجة الشعبية",
- "maintenance_score": "درجة الصيانة",
- "combined_score": "الدرجة المجمعة",
"security": "الأمان"
},
"view_mode": {
@@ -814,6 +818,8 @@
"managers": "مديري"
}
},
+ "sponsors": {},
+ "oss_partners": {},
"team": {
"title": "الفريق",
"governance": "الحوكمة",
@@ -841,6 +847,7 @@
"description": "تحدث، اطرح الأسئلة، وشارك الأفكار.",
"cta": "انضم إلى Discord"
},
+ "builders": {},
"follow": {
"title": "ابقَ على اطلاع",
"description": "اكتشف آخر الأخبار عن npmx.",
@@ -930,14 +937,11 @@
"add_column": "إضافة عمود «بدون تبعية» إلى المقارنة"
},
"facets": {
- "group_label": "محاور المقارنة",
"all": "الكل",
"none": "لا شيء",
"coming_soon": "قريبًا",
"select_all": "تحديد كل المحاور",
"deselect_all": "إلغاء تحديد كل المحاور",
- "select_category": "تحديد جميع محاور {category}",
- "deselect_category": "إلغاء تحديد جميع محاور {category}",
"binary_only_tooltip": "هذه الحزمة تعرض ملفات تنفيذية فقط دون تصديرات",
"categories": {
"performance": "الأداء",
@@ -1013,7 +1017,15 @@
"trends": {
"title": "مقارنة التوجهات"
}
- }
+ },
+ "version_invalid_url_format": {},
+ "file_filter_option": {},
+ "filter": {}
+ },
+ "pds": {
+ "join": {},
+ "server": {},
+ "community": {}
},
"privacy_policy": {
"title": "سياسة الخصوصية",
@@ -1124,5 +1136,9 @@
"p1": "إذا واجهت عائقاً في إمكانية الوصول على {app}، يرجى إبلاغنا بفتح بلاغ في {link}. نأخذ هذه البلاغات على محمل الجد وسنبذل قصارى جهدنا لمعالجتها.",
"link": "مستودع GitHub"
}
- }
+ },
+ "translation_status": {
+ "table": {}
+ },
+ "action_bar": {}
}
diff --git a/i18n/locales/az-AZ.json b/i18n/locales/az-AZ.json
index e6709653e9..85894165eb 100644
--- a/i18n/locales/az-AZ.json
+++ b/i18n/locales/az-AZ.json
@@ -574,7 +574,8 @@
"b": "{size} B",
"kb": "{size} kB",
"mb": "{size} MB"
- }
+ },
+ "download": {}
},
"connector": {
"modal": {
@@ -851,11 +852,7 @@
"downloads_month": "Endirmələr/ay",
"downloads_year": "Endirmələr/il",
"published": "Son Dərc",
- "name": "Ad",
- "quality": "Keyfiyyət",
- "popularity": "Populyarlıq",
- "maintenance": "Baxım",
- "score": "Xal"
+ "name": "Ad"
},
"columns": {
"title": "Sütunlar",
@@ -869,10 +866,6 @@
"published": "Son Dərc",
"maintainers": "Dəstəkçilər",
"keywords": "Açar sözlər",
- "quality_score": "Keyfiyyət xalı",
- "popularity_score": "Populyarlıq xalı",
- "maintenance_score": "Baxım xalı",
- "combined_score": "Ümumi xal",
"security": "Təhlükəsizlik"
},
"view_mode": {
@@ -1058,14 +1051,11 @@
"add_column": "Müqayisəyə asılılıqsız sütun əlavə et"
},
"facets": {
- "group_label": "Müqayisə aspektləri",
"all": "hamısı",
"none": "heç biri",
"coming_soon": "Tezliklə",
"select_all": "Bütün aspektləri seç",
"deselect_all": "Bütün aspektləri ləğv et",
- "select_category": "Bütün {category} aspektlərini seç",
- "deselect_category": "Bütün {category} aspektlərini ləğv et",
"binary_only_tooltip": "Bu paket yalnız binar fayllar təqdim edir, ixrac yoxdur",
"categories": {
"performance": "Performans",
@@ -1149,6 +1139,7 @@
"file_size_warning": "{size} müqayisə üçün 250KB limitini keçir",
"compare_versions": "fərq",
"compare_versions_title": "Versiyaları müqayisə et",
+ "version_invalid_url_format": {},
"summary": "Xülasə",
"deps_count": "{count} asılılıq",
"dependencies": "Asılılıqlar",
@@ -1313,5 +1304,9 @@
"p1": "{app} saytında əlçatanlıq maneəsi ilə qarşılaşsanız, xahiş edirik {link} issue açaraq bizə bildirin. Bu hesabatları ciddi qəbul edirik və onları həll etmək üçün əlimizdən gələni edəcəyik.",
"link": "GitHub repozitoriyası"
}
- }
+ },
+ "translation_status": {
+ "table": {}
+ },
+ "action_bar": {}
}
diff --git a/i18n/locales/bg-BG.json b/i18n/locales/bg-BG.json
index e1306999ac..032d82a6e5 100644
--- a/i18n/locales/bg-BG.json
+++ b/i18n/locales/bg-BG.json
@@ -535,7 +535,8 @@
"b": "{size} B",
"kb": "{size} kB",
"mb": "{size} MB"
- }
+ },
+ "download": {}
},
"connector": {
"modal": {
@@ -812,11 +813,7 @@
"downloads_month": "Изтегляния/месец",
"downloads_year": "Изтегляния/година",
"published": "Последно публикуван",
- "name": "Име",
- "quality": "Качество",
- "popularity": "Популярност",
- "maintenance": "Поддръжка",
- "score": "Резултат"
+ "name": "Име"
},
"columns": {
"title": "Колони",
@@ -830,10 +827,6 @@
"published": "Последно публикуван",
"maintainers": "Поддържащи",
"keywords": "Ключови думи",
- "quality_score": "Резултат за качество",
- "popularity_score": "Резултат за популярност",
- "maintenance_score": "Резултат за поддръжка",
- "combined_score": "Комбиниран резултат",
"security": "Сигурност"
},
"view_mode": {
@@ -1015,14 +1008,11 @@
"add_column": "Добавяне на колона без зависимости към сравнението"
},
"facets": {
- "group_label": "Аспекти на сравнението",
"all": "всички",
"none": "нито един",
"coming_soon": "Скоро",
"select_all": "Избор на всички аспекти",
"deselect_all": "Отмяна на избора на всички аспекти",
- "select_category": "Избор на всички {category} аспекти",
- "deselect_category": "Отмяна на избора на всички {category} аспекти",
"binary_only_tooltip": "Този пакет излага binaries и няма exports",
"categories": {
"performance": "Производителност",
@@ -1105,6 +1095,7 @@
"file_too_large": "Файлът е твърде голям за сравнение",
"file_size_warning": "{size} надвишава лимита от 250KB за сравнение",
"compare_versions": "diff",
+ "version_invalid_url_format": {},
"summary": "Резюме",
"deps_count": "{count} зависимости",
"dependencies": "Зависимости",
@@ -1246,5 +1237,9 @@
"p1": "Ако срещнете бариера за достъпност в {app}, моля, уведомете ни, като отворите проблем в нашето {link}. Приемаме сериозно тези доклади и ще направим всичко възможно да ги разгледаме.",
"link": "GitHub хранилище"
}
- }
+ },
+ "translation_status": {
+ "table": {}
+ },
+ "action_bar": {}
}
diff --git a/i18n/locales/bn-IN.json b/i18n/locales/bn-IN.json
index 530394cbc5..39d19eec65 100644
--- a/i18n/locales/bn-IN.json
+++ b/i18n/locales/bn-IN.json
@@ -53,6 +53,10 @@
"links": "লিংকগুলি",
"tap_to_search": "অনুসন্ধানের জন্য ট্যাপ করুন"
},
+ "blog": {
+ "author": {},
+ "atproto": {}
+ },
"settings": {
"title": "সেটিংস",
"tagline": "আপনার npmx অভিজ্ঞতা কাস্টমাইজ করুন",
@@ -78,7 +82,8 @@
"label": "এক্সেন্ট রং"
},
"clear_accent": "এক্সেন্ট রং সাফ করুন",
- "translation_progress": "অনুবাদের অগ্রগতি"
+ "translation_progress": "অনুবাদের অগ্রগতি",
+ "background_themes": {}
},
"i18n": {
"missing_keys": "{count} অনুবাদ নেই | {count} অনুবাদ নেই",
@@ -88,6 +93,7 @@
"edit_on_github": "GitHub এ সম্পাদনা করুন",
"view_guide": "অনুবাদ গাইড"
},
+ "error": {},
"common": {
"loading": "লোড হচ্ছে...",
"loading_more": "আরো লোড হচ্ছে...",
@@ -114,6 +120,9 @@
"github": "GitHub এ দেখুন"
}
},
+ "profile": {
+ "invite": {}
+ },
"package": {
"not_found": "প্যাকেজ পাওয়া যায়নি",
"not_found_message": "প্যাকেজ পাওয়া যায়নি।",
@@ -126,6 +135,7 @@
"version": "এই ভার্সনটি নিষ্ক্রিয় করা হয়েছে।",
"no_reason": "কোনো কারণ দেওয়া হয়নি"
},
+ "size_increase": {},
"replacement": {
"title": "আপনার এই ডিপেনডেন্সির প্রয়োজন নাও হতে পারে।",
"native": "এটিকে {replacement} দিয়ে প্রতিস্থাপন করা যেতে পারে, যা Node {nodeVersion} থেকে উপলব্ধ।",
@@ -221,7 +231,8 @@
"more_tagged": "{count}টি আরো ট্যাগ করা",
"all_covered": "সব ভার্সন উপরের ট্যাগ দ্বারা আবৃত",
"deprecated_title": "{version} (নিষ্ক্রিয়)",
- "view_all": "{count}টি ভার্সন দেখুন | সব {count}টি ভার্সন দেখুন"
+ "view_all": "{count}টি ভার্সন দেখুন | সব {count}টি ভার্সন দেখুন",
+ "copy_alt": {}
},
"dependencies": {
"title": "নির্ভরতা ({count})",
@@ -270,7 +281,8 @@
"date_range_multiline": "{start}\nথেকে {end}",
"download_file": "{fileType} ডাউনলোড করুন",
"toggle_annotator": "অ্যানোটেটর টগল করুন",
- "items": {}
+ "items": {},
+ "copy_alt": {}
},
"downloads": {
"title": "সাপ্তাহিক ডাউনলোড"
@@ -356,7 +368,8 @@
"name_asc": "নাম (A-Z)",
"name_desc": "নাম (Z-A)"
},
- "size": {}
+ "size": {},
+ "download": {}
},
"connector": {
"modal": {
@@ -622,11 +635,7 @@
"downloads_day": "ডাউনলোড/দিন",
"downloads_month": "ডাউনলোড/মাস",
"downloads_year": "ডাউনলোড/বছর",
- "name": "নাম",
- "quality": "গুণমান",
- "popularity": "জনপ্রিয়তা",
- "maintenance": "রক্ষণাবেক্ষণ",
- "score": "স্কোর"
+ "name": "নাম"
},
"columns": {
"title": "কলাম",
@@ -639,10 +648,6 @@
"downloads": "ডাউনলোড/সপ্তাহ",
"maintainers": "রক্ষণাবেক্ষণকারী",
"keywords": "কীওয়ার্ড",
- "quality_score": "গুণমান স্কোর",
- "popularity_score": "জনপ্রিয়তা স্কোর",
- "maintenance_score": "রক্ষণাবেক্ষণ স্কোর",
- "combined_score": "সম্মিলিত স্কোর",
"security": "নিরাপত্তা"
},
"view_mode": {
@@ -699,6 +704,8 @@
"managers": "ম্যানেজার"
}
},
+ "sponsors": {},
+ "oss_partners": {},
"team": {},
"contributors": {
"title": "অবদানকারী",
@@ -719,6 +726,7 @@
"description": "চ্যাট করুন, প্রশ্ন জিজ্ঞাসা করুন এবং ধারণা শেয়ার করুন।",
"cta": "Discord এ যোগ দিন"
},
+ "builders": {},
"follow": {
"title": "আপডেট পান",
"description": "npmx এর সর্বশেষ তথ্য পান।",
@@ -799,14 +807,11 @@
},
"no_dependency": {},
"facets": {
- "group_label": "তুলনা ফ্যাসেট",
"all": "সব",
"none": "কিছু না",
"coming_soon": "শীঘ্রই আসছে",
"select_all": "সব ফ্যাসেট নির্বাচন করুন",
"deselect_all": "সব ফ্যাসেট অনির্বাচিত করুন",
- "select_category": "সব {category} ফ্যাসেট নির্বাচন করুন",
- "deselect_category": "সব {category} ফ্যাসেট অনির্বাচিত করুন",
"categories": {
"performance": "কর্মক্ষমতা",
"health": "স্বাস্থ্য",
@@ -830,7 +835,15 @@
},
"values": {},
"trends": {}
- }
+ },
+ "version_invalid_url_format": {},
+ "file_filter_option": {},
+ "filter": {}
+ },
+ "pds": {
+ "join": {},
+ "server": {},
+ "community": {}
},
"privacy_policy": {
"cookies": {
@@ -851,5 +864,9 @@
"measures": {},
"limitations": {},
"contact": {}
- }
+ },
+ "translation_status": {
+ "table": {}
+ },
+ "action_bar": {}
}
diff --git a/i18n/locales/cs-CZ.json b/i18n/locales/cs-CZ.json
index fe06406e56..638904c4fb 100644
--- a/i18n/locales/cs-CZ.json
+++ b/i18n/locales/cs-CZ.json
@@ -586,7 +586,8 @@
"b": "{size} B",
"kb": "{size} kB",
"mb": "{size} MB"
- }
+ },
+ "download": {}
},
"connector": {
"modal": {
@@ -863,11 +864,7 @@
"downloads_month": "Stažení/měsíc",
"downloads_year": "Stažení/rok",
"published": "Naposledy publikováno",
- "name": "Název",
- "quality": "Kvalita",
- "popularity": "Popularita",
- "maintenance": "Údržba",
- "score": "Skóre"
+ "name": "Název"
},
"columns": {
"title": "Sloupce",
@@ -881,10 +878,6 @@
"published": "Naposledy publikováno",
"maintainers": "Správci",
"keywords": "Klíčová slova",
- "quality_score": "Skóre kvality",
- "popularity_score": "Skóre popularity",
- "maintenance_score": "Skóre údržby",
- "combined_score": "Kombinované skóre",
"security": "Bezpečnost"
},
"view_mode": {
@@ -1072,14 +1065,11 @@
"add_column": "Přidat sloupec bez závislosti do porovnání"
},
"facets": {
- "group_label": "Kategorie vlastností",
"all": "Vše",
"none": "Žádné",
"coming_soon": "Brzy k dispozici",
"select_all": "Vybrat všechny vlastnosti",
"deselect_all": "Zrušit výběr všech vlastností",
- "select_category": "Vybrat všechny vlastnosti kategorie {category}",
- "deselect_category": "Zrušit výběr všech vlastností kategorie {category}",
"binary_only_tooltip": "Tento balíček obsahuje pouze binární soubory a žádné exporty",
"categories": {
"performance": "Výkon",
@@ -1163,6 +1153,7 @@
"file_size_warning": "{size} překračuje limit 250KB pro porovnání",
"compare_versions": "porovnat",
"compare_versions_title": "Porovnat s nejnovější verzí",
+ "version_invalid_url_format": {},
"summary": "Souhrn",
"deps_count": "{count} závislostí",
"dependencies": "Závislosti",
@@ -1327,5 +1318,9 @@
"p1": "Pokud narazíte na překážku v přístupnosti na {app}, dejte nám prosím vědět otevřením problému na našem {link}. Tyto zprávy bereme vážně a uděláme vše pro to, abychom je řešili.",
"link": "GitHub repozitáři"
}
- }
+ },
+ "translation_status": {
+ "table": {}
+ },
+ "action_bar": {}
}
diff --git a/i18n/locales/de-AT.json b/i18n/locales/de-AT.json
new file mode 100644
index 0000000000..458cf38f23
--- /dev/null
+++ b/i18n/locales/de-AT.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "../schema.json",
+ "footer": {
+ "keyboard_shortcuts": "Tastaturkürzel"
+ },
+ "shortcuts": {
+ "show_kbd_hints": "Tastaturkürzel hervorheben",
+ "disable_shortcuts": "Tastaturkürzel können in den {settings} deaktiviert werden."
+ },
+ "settings": {
+ "sections": {
+ "keyboard_shortcuts": "Tastaturkürzel"
+ },
+ "keyboard_shortcuts_enabled": "Tastaturkürzel aktivieren",
+ "keyboard_shortcuts_enabled_description": "Tastaturkürzel können deaktiviert werden, wenn sie mit anderen Browser- oder Systemkürzeln in Konflikt stehen"
+ },
+ "search": {
+ "instant_search": "Schnellsuche",
+ "instant_search_on": "Schnellsuche aktiviert",
+ "instant_search_off": "Schnellsuche deaktiviert",
+ "instant_search_turn_on": "Schnellsuche aktivieren",
+ "instant_search_turn_off": "Schnellsuche deaktivieren",
+ "instant_search_advisory": "Die Schnellsuche sendet bei jedem Tastendruck eine Anfrage."
+ }
+}
diff --git a/i18n/locales/de-DE.json b/i18n/locales/de-DE.json
index 83503c1030..0618235d76 100644
--- a/i18n/locales/de-DE.json
+++ b/i18n/locales/de-DE.json
@@ -1,1317 +1,3 @@
{
- "$schema": "../schema.json",
- "seo": {
- "home": {
- "title": "npmx - Paket-Browser für die npm Registry",
- "description": "Ein schneller, moderner Browser für die npm Registry. Pakete suchen, durchstöbern und erkunden mit einer modernen Oberfläche."
- }
- },
- "built_at": "erstellt {0}",
- "alt_logo": "npmx Logo",
- "tagline": "ein schneller, moderner Browser für die npm Registry",
- "non_affiliation_disclaimer": "nicht verbunden mit npm, Inc.",
- "trademark_disclaimer": "npm ist eine eingetragene Marke von npm, Inc. Diese Seite ist nicht mit npm, Inc. verbunden.",
- "footer": {
- "about": "Über uns",
- "blog": "Blog",
- "docs": "Doku",
- "source": "Quellcode",
- "social": "Social",
- "chat": "Chat",
- "builders_chat": "Builders-Chat",
- "keyboard_shortcuts": "Tastenkombination"
- },
- "shortcuts": {
- "section": {
- "global": "Allgemein",
- "search": "Suche",
- "package": "Pakete"
- },
- "focus_search": "Suche fokusieren",
- "show_kbd_hints": "Tastenkombination hervorheben",
- "settings": "Einstellungen öffnen",
- "compare": "Vergleichen öffnen",
- "compare_from_package": "Vergleichen öffnen (mit aktuellem Paket vorausgefüllt)",
- "navigate_results": "Ergebnisse navigieren",
- "go_to_result": "Ergebnis aufrufen",
- "open_code_view": "Code-Ansicht öffnen",
- "open_docs": "Dokumentation öffnen",
- "disable_shortcuts": "Tastenkombinationen können in den {settings} deaktiviert werden."
- },
- "search": {
- "label": "npm-Pakete durchsuchen",
- "placeholder": "Pakete suchen...",
- "button": "Suchen",
- "searching": "Suche läuft...",
- "found_packages": "Keine Pakete gefunden | 1 Paket gefunden | {count} Pakete gefunden",
- "found_packages_sorted": "Sortiere bestes Resultat | Sortiere beste {count} Resultate",
- "updating": "(wird aktualisiert...)",
- "no_results": "Keine Pakete gefunden für \"{query}\"",
- "rate_limited": "npm Ratenbegrenzung erreicht, versuche es später erneut",
- "title": "Suche",
- "title_search": "Suche: {search}",
- "title_packages": "Suche Pakete",
- "meta_description": "Suchergebnisse für '{search}'",
- "meta_description_packages": "Suche nach npm-Paketen",
- "not_taken": "{name} ist noch frei",
- "claim_prompt": "Diesen Paketnamen auf npm beanspruchen",
- "claim_button": "\"{name}\" beanspruchen",
- "want_to_claim": "Möchtest du diesen Paketnamen beanspruchen?",
- "start_typing": "Tippe, um Pakete zu suchen",
- "algolia_disclaimer": "Bereitgestellt von Algolia",
- "exact_match": "exakt",
- "suggestion": {
- "user": "Benutzer",
- "org": "Organisation",
- "view_user_packages": "Pakete dieses Benutzers anzeigen",
- "view_org_packages": "Pakete dieser Organisation anzeigen"
- },
- "instant_search": "Sofortsuche",
- "instant_search_on": "Sofortsuche aktiviert",
- "instant_search_off": "Sofortsuche deaktiviert",
- "instant_search_turn_on": "Sofortsuche aktivieren",
- "instant_search_turn_off": "Sofortsuche deaktivieren",
- "instant_search_advisory": "Die Sofortsuche sendet bei jedem Tastendruck eine Anfrage."
- },
- "nav": {
- "main_navigation": "Hauptnavigation",
- "popular_packages": "Beliebte Pakete",
- "settings": "Einstellungen",
- "compare": "Vergleichen",
- "back": "Zurück",
- "menu": "Menü",
- "mobile_menu": "Navigationsmenü",
- "open_menu": "Menü öffnen",
- "links": "Links",
- "tap_to_search": "Tippen zum Suchen"
- },
- "blog": {
- "title": "Blog",
- "heading": "Blog",
- "meta_description": "Neuigkeiten, Updates und Artikel rund um npmx.",
- "author": {
- "view_profile": "Profil von {name} anzeigen"
- },
- "draft_badge": "Entwurf",
- "draft_banner": "Dies ist ein Entwurf und noch nicht öffentlich sichtbar.",
- "atproto": {
- "view_on_bluesky": "Auf Bluesky ansehen",
- "reply_on_bluesky": "Auf Bluesky antworten",
- "likes_on_bluesky": "{count} Like auf Bluesky | {count} Likes auf Bluesky",
- "like_or_reply_on_bluesky": "Auf Bluesky liken oder antworten",
- "no_comments_yet": "Noch keine Kommentare. Sei der Erste!",
- "could_not_load_comments": "Kommentare konnten nicht geladen werden.",
- "comments": "Kommentare",
- "loading_comments": "Kommentare werden geladen...",
- "updating": "(wird aktualisiert...)",
- "reply_count": "{count} Antwort | {count} Antworten",
- "like_count": "{count} Like | {count} Likes",
- "repost_count": "{count} Repost | {count} Reposts",
- "more_replies": "noch {count} Antwort… | noch {count} Antworten…"
- }
- },
- "settings": {
- "title": "Einstellungen",
- "tagline": "Passe npmx an deine Vorlieben an",
- "meta_description": "Passe dein npmx.dev-Erlebnis mit Einstellungen für Design, Sprache und Anzeige an.",
- "sections": {
- "appearance": "Erscheinungsbild",
- "display": "Anzeige",
- "search": "Datenquelle",
- "language": "Sprache",
- "keyboard_shortcuts": "Tastenkombinationen"
- },
- "data_source": {
- "label": "Datenquelle",
- "description": "Wähle, woher npmx Suchdaten abruft. Einzelne Paketseiten verwenden immer direkt die npm Registry.",
- "npm": "npm Registry",
- "npm_description": "Ruft Suche, Org- und Benutzerlisten direkt von der offiziellen npm Registry ab. Maßgeblich, aber kann langsamer sein.",
- "algolia": "Algolia",
- "algolia_description": "Nutzt Algolia für schnellere Suche, Org- und Benutzerseiten."
- },
- "instant_search": "Sofortsuche",
- "instant_search_description": "Suchergebnisse werden automatisch bei der Eingabe aktualisiert, ohne die Eingabetaste zu drücken.",
- "relative_dates": "Relative Datumsangaben",
- "include_types": "{'@'}types bei Installation einschließen",
- "include_types_description": "TypeScript-Typdefinitionen ({'@'}types-Paket) automatisch zu Installationsbefehlen für Pakete ohne Typen hinzufügen",
- "hide_platform_packages": "Plattformspezifische Pakete in der Suche ausblenden",
- "hide_platform_packages_description": "Native Binärpakete wie {'@'}esbuild/linux-x64 aus den Ergebnissen ausblenden",
- "theme": "Design",
- "theme_light": "Hell",
- "theme_dark": "Dunkel",
- "theme_system": "System",
- "language": "Sprache",
- "help_translate": "Hilf bei der Übersetzung von npmx",
- "accent_colors": {
- "label": "Akzentfarben"
- },
- "clear_accent": "Akzentfarbe zurücksetzen",
- "translation_progress": "Übersetzungsfortschritt",
- "background_themes": {
- "label": "Hintergrundschattierung"
- },
- "keyboard_shortcuts_enabled": "Tastenkombinationen aktivieren",
- "keyboard_shortcuts_enabled_description": "Tastenkombinationen können deaktiviert werden, wenn sie mit anderen Browser- oder Systemkürzeln in Konflikt stehen"
- },
- "i18n": {
- "missing_keys": "{count} fehlende Übersetzung | {count} fehlende Übersetzungen",
- "copy_keys": "Schlüssel kopieren",
- "show_more_keys": "{count} weitere anzeigen...",
- "contribute_hint": "Hilf mit, diese Übersetzung zu verbessern, indem du die fehlenden Schlüssel ergänzt.",
- "edit_on_github": "Auf GitHub bearbeiten",
- "view_guide": "Übersetzungsleitfaden"
- },
- "error": {
- "401": "Nicht autorisiert",
- "404": "Seite nicht gefunden",
- "500": "Interner Serverfehler",
- "503": "Dienst nicht verfügbar",
- "default": "Ein unerwarteter Fehler ist aufgetreten"
- },
- "common": {
- "loading": "Lädt...",
- "loading_more": "Lädt mehr...",
- "loading_packages": "Pakete werden geladen...",
- "end_of_results": "Keine weiteren Ergebnisse",
- "try_again": "Erneut versuchen",
- "close": "Schließen",
- "or": "oder",
- "retry": "Wiederholen",
- "copy": "Kopieren",
- "copied": "Kopiert!",
- "skip_link": "Zum Hauptinhalt springen",
- "warnings": "Warnungen:",
- "go_back_home": "Zur Startseite",
- "per_week": "/ Woche",
- "vanity_downloads_hint": "Vanity-Zahl: keine Pakete angezeigt | Vanity-Zahl: für das angezeigte Paket | Vanity-Zahl: Summe von {count} angezeigten Paketen",
- "sort": {
- "name": "Name",
- "role": "Rolle",
- "members": "Mitglieder"
- },
- "scroll_to_top": "Nach oben scrollen",
- "cancel": "Abbrechen",
- "save": "Speichern",
- "edit": "Bearbeiten",
- "error": "Fehler",
- "view_on": {
- "npm": "Auf npm ansehen",
- "github": "Auf GitHub ansehen"
- }
- },
- "profile": {
- "display_name": "Anzeigename",
- "description": "Beschreibung",
- "no_description": "Keine Beschreibung vorhanden",
- "website": "Website",
- "website_placeholder": "https://beispiel.de",
- "likes": "Likes",
- "seo_title": "{name} – Profil auf npmx",
- "seo_description": "Profil von {name} auf npmx – Pakete, Likes und mehr.",
- "not_found": "Profil nicht gefunden",
- "not_found_message": "Dieses Profil konnte nicht gefunden werden.",
- "invite": {
- "message": "Schau dir mein Profil auf npmx an!",
- "share_button": "Profil teilen",
- "compose_text": "Schau dir {name} auf npmx an: {url}"
- }
- },
- "package": {
- "not_found": "Paket nicht gefunden",
- "not_found_message": "Das Paket konnte nicht gefunden werden.",
- "no_description": "Keine Beschreibung vorhanden",
- "verified_provenance": "Verifizierte Herkunft",
- "navigation": "Paket",
- "copy_name": "Paketnamen kopieren",
- "deprecation": {
- "package": "Dieses Paket ist veraltet.",
- "version": "Diese Version ist veraltet.",
- "no_reason": "Kein Grund angegeben"
- },
- "size_increase": {
- "title_size": "Deutlicher Größenanstieg seit v{version}",
- "title_deps": "Deutlich mehr Abhängigkeiten seit v{version}",
- "title_both": "Größe und Abhängigkeiten deutlich gestiegen seit v{version}",
- "size": "Installationsgröße um {percent} gestiegen ({size} größer)",
- "deps": "{count} zusätzliche Abhängigkeiten"
- },
- "replacement": {
- "title": "Du brauchst diese Abhängigkeit vielleicht nicht.",
- "native": "Dies kann durch {replacement} ersetzt werden, verfügbar seit Node {nodeVersion}.",
- "simple": "Die {community} hat dieses Paket als überflüssig markiert und empfiehlt: {replacement}.",
- "documented": "Die {community} hat leistungsstärkere Alternativen für dieses Paket aufgezeigt.",
- "none": "Dieses Paket wurde als nicht mehr nötig markiert, und seine Funktionalität ist wahrscheinlich in allen Engines nativ verfügbar.",
- "learn_more": "Mehr erfahren",
- "learn_more_above": "Erfahre oben mehr.",
- "mdn": "MDN",
- "community": "Community",
- "consider_no_dep": "+ Ohne Abhängigkeit lösen?"
- },
- "stats": {
- "license": "Lizenz",
- "deps": "Abhängigkeiten",
- "install_size": "Installationsgröße",
- "vulns": "Sicherheitslücken",
- "published": "Veröffentlicht",
- "published_tooltip": "Datum, an dem {package}{'@'}{version} veröffentlicht wurde",
- "view_dependency_graph": "Abhängigkeitsgraph anzeigen",
- "inspect_dependency_tree": "Abhängigkeitsbaum untersuchen",
- "size_tooltip": {
- "unpacked": "{size} Größe nach dem Entpacken (dieses Paket)",
- "total": "{size} Gesamtgröße nach dem Entpacken (inklusive {count} Abhängigkeit für linux-x64) | {size} Gesamtgröße nach dem Entpacken (inklusive aller {count} Abhängigkeiten für linux-x64)"
- }
- },
- "skills": {
- "title": "Agentenfähigkeiten",
- "skills_available": "{count} Fähigkeit verfügbar | {count} Fähigkeiten verfügbar",
- "compatible_with": "Kompatibel mit {tool}",
- "install": "Installieren",
- "installation_method": "Installationsmethode",
- "learn_more": "Mehr erfahren",
- "available_skills": "Verfügbare Fähigkeiten",
- "click_to_expand": "Klicken zum Aufklappen",
- "no_description": "Keine Beschreibung",
- "file_counts": {
- "scripts": "{count} Skript | {count} Skripte",
- "refs": "{count} Referenz | {count} Referenzen",
- "assets": "{count} Asset | {count} Assets"
- },
- "view_source": "Quelltext ansehen"
- },
- "links": {
- "repo": "Repo",
- "homepage": "Homepage",
- "issues": "Issues",
- "jsr": "JSR",
- "code": "Code",
- "docs": "Doku",
- "fund": "Spenden",
- "compare": "Vergleichen"
- },
- "likes": {
- "like": "Dieses Paket liken",
- "unlike": "Like entfernen"
- },
- "docs": {
- "not_available": "Dokumentation nicht verfügbar",
- "not_available_detail": "Für diese Version konnte keine Dokumentation generiert werden."
- },
- "get_started": {
- "title": "Erste Schritte",
- "pm_label": "Paketmanager",
- "copy_command": "Installationsbefehl kopieren",
- "copy_dev_command": "Installationsbefehl (dev) kopieren",
- "dev_dependency_hint": "Wird normalerweise als Dev-Abhängigkeit installiert",
- "view_types": "{package} anzeigen"
- },
- "create": {
- "title": "Neues Projekt erstellen",
- "copy_command": "Erstellungsbefehl kopieren",
- "view": "{packageName} hat denselben Maintainer. Klicke für mehr Details."
- },
- "run": {
- "title": "Ausführen",
- "locally": "Lokal ausführen"
- },
- "readme": {
- "title": "Readme",
- "no_readme": "Keine README verfügbar.",
- "toc_title": "Gliederung",
- "callout": {
- "note": "Notiz",
- "tip": "Tipp",
- "important": "Wichtig",
- "warning": "Warnung",
- "caution": "Vorsicht"
- },
- "copy_as_markdown": "README als Markdown kopieren"
- },
- "provenance_section": {
- "title": "Herkunft",
- "built_and_signed_on": "Erstellt und signiert via {provider}",
- "view_build_summary": "Build-Zusammenfassung anzeigen",
- "source_commit": "Quell-Commit",
- "build_file": "Build-Datei",
- "public_ledger": "Öffentliches Hauptbuch",
- "transparency_log_entry": "Transparenzprotokolleintrag",
- "view_more_details": "Weitere Details anzeigen",
- "error_loading": "Fehler beim Laden der Herkunftsdaten"
- },
- "security_downgrade": {
- "title": "Vertrauensabbau",
- "description_to_none_provenance": "Diese Version wurde ohne {provenance} veröffentlicht.",
- "description_to_none_trustedPublisher": "Diese Version wurde ohne {trustedPublishing} veröffentlicht.",
- "description_to_provenance_trustedPublisher": "Diese Version verwendet {provenance}, aber nicht {trustedPublishing}.",
- "fallback_install_provenance": "Installationsbefehle sind auf {version} fixiert, die letzte Version mit {provenance}.",
- "fallback_install_trustedPublisher": "Installationsbefehle sind auf {version} fixiert, die letzte Version mit vertrauenswürdigem Publishing.",
- "provenance_link_text": "Herkunft",
- "trusted_publishing_link_text": "vertrauenswürdiges Publishing"
- },
- "keywords_title": "Schlüsselwörter",
- "compatibility": "Kompatibilität",
- "card": {
- "publisher": "Herausgeber",
- "published": "Veröffentlicht",
- "weekly_downloads": "Wöchentliche Downloads",
- "keywords": "Schlüsselwörter",
- "license": "Lizenz"
- },
- "versions": {
- "title": "Versionen",
- "collapse": "{tag} einklappen",
- "expand": "{tag} ausklappen",
- "collapse_other": "Andere Versionen einklappen",
- "expand_other": "Andere Versionen ausklappen",
- "collapse_major": "Major {major} einklappen",
- "expand_major": "Major {major} ausklappen",
- "other_versions": "Weitere Versionen",
- "more_tagged": "{count} weitere getaggt",
- "all_covered": "Alle Versionen sind durch obige Tags abgedeckt",
- "deprecated_title": "{version} (veraltet)",
- "view_all": "{count} Version anzeigen | Alle {count} Versionen anzeigen",
- "distribution_title": "SemVer Gruppe",
- "distribution_modal_title": "Versionen",
- "distribution_range_date_same_year": "von {from} bis {to} {endYear}",
- "distribution_range_date_multiple_years": "von {from} {startYear} bis {to} {endYear}",
- "grouping_major": "Major",
- "grouping_minor": "Minor",
- "grouping_versions_title": "Versionen",
- "grouping_versions_all": "Alle",
- "grouping_versions_only_recent": "Nur aktuelle",
- "grouping_usage_title": "Nutzung",
- "grouping_usage_all": "Alle",
- "recent_versions_only_tooltip": "Nur Versionen anzeigen, die im letzten Jahr veröffentlicht wurden.",
- "show_low_usage_tooltip": "Versionsgruppen anzeigen, die weniger als 1% aller Downloads ausmachen.",
- "y_axis_label": "Downloads",
- "filter_placeholder": "Nach SemVer filtern (z.B. ^3.0.0)",
- "filter_invalid": "Ungültiger SemVer-Bereich",
- "filter_help": "Hilfe zum SemVer-Filter",
- "filter_tooltip": "Filtere Versionen mit einem {link}. Zum Beispiel zeigt ^3.0.0 alle 3.x-Versionen.",
- "filter_tooltip_link": "SemVer-Bereich",
- "no_matches": "Keine Versionen entsprechen diesem Bereich",
- "copy_alt": {
- "per_version_analysis": "Die Version {version} wurde {downloads} mal heruntergeladen",
- "general_description": "Balkendiagramm, das die Downloads pro Version für {versions_count} {semver_grouping_mode} Versionen des Pakets {package_name} anzeigt, {date_range_label} von der Version {first_version} bis zur Version {last_version}. Die am häufigsten heruntergeladene Version ist {max_downloaded_version} mit {max_version_downloads} Downloads. {per_version_analysis}. {watermark}."
- }
- },
- "dependencies": {
- "title": "Abhängigkeit ({count}) | Abhängigkeiten ({count})",
- "list_label": "Paketabhängigkeiten",
- "show_all": "{count} Abhängigkeit anzeigen | alle {count} Abhängigkeiten anzeigen",
- "optional": "optional",
- "view_vulnerabilities": "Sicherheitslücken anzeigen",
- "outdated_major": "{count} Hauptversion zurück (neueste: {latest}) | {count} Hauptversionen zurück (neueste: {latest})",
- "outdated_minor": "{count} Nebenversion zurück (neueste: {latest}) | {count} Nebenversionen zurück (neueste: {latest})",
- "outdated_patch": "Patch-Update verfügbar (aktuellste: {latest})",
- "has_replacement": "Für diese Abhängigkeit gibt es empfohlene Alternativen"
- },
- "peer_dependencies": {
- "title": "Peer-Abhängigkeit ({count}) | Peer-Abhängigkeiten ({count})",
- "list_label": "Peer-Abhängigkeiten des Pakets",
- "show_all": "{count} Peer-Abhängigkeit anzeigen | alle {count} Peer-Abhängigkeiten anzeigen"
- },
- "optional_dependencies": {
- "title": "Optionale Abhängigkeit ({count}) | Optionale Abhängigkeiten ({count})",
- "list_label": "Optionale Abhängigkeiten des Pakets",
- "show_all": "{count} optionale Abhängigkeit anzeigen | alle {count} optionalen Abhängigkeiten anzeigen"
- },
- "maintainers": {
- "title": "Maintainer",
- "list_label": "Paket-Maintainer",
- "you": "(du)",
- "via": "via {teams}",
- "remove_owner": "{name} als Owner entfernen",
- "username_to_add": "Benutzername zum Hinzufügen als Owner",
- "username_placeholder": "Benutzername...",
- "add_button": "Hinzufügen",
- "cancel_add": "Owner-Hinzufügung abbrechen",
- "add_owner": "+ Owner hinzufügen",
- "show_more": "({count} weitere anzeigen)",
- "show_less": "(weniger anzeigen)"
- },
- "trends": {
- "granularity": "Granularität",
- "granularity_daily": "Täglich",
- "granularity_weekly": "Wöchentlich",
- "granularity_monthly": "Monatlich",
- "granularity_yearly": "Jährlich",
- "start_date": "Start",
- "end_date": "Ende",
- "loading": "Lädt...",
- "date_range": "{start} bis {end}",
- "date_range_multiline": "{start}\nbis {end}",
- "download_file": "{fileType} herunterladen",
- "toggle_annotator": "Annotation umschalten",
- "toggle_stack_mode": "Gestapelte Ansicht ein-/ausschalten",
- "open_options": "Diagrammoptionen öffnen",
- "close_options": "Diagrammoptionen schließen",
- "legend_estimation": "Schätzung",
- "no_data": "Keine Daten vorhanden",
- "y_axis_label": "{facet} {granularity}",
- "facet": "Facette",
- "title": "Trends",
- "contributors_skip": "Nicht angezeigt bei Mitwirkende (hat kein GitHub-Repository): | Nicht angezeigt bei Mitwirkende (haben kein GitHub-Repository):",
- "items": {
- "downloads": "Downloads",
- "likes": "Likes",
- "contributors": "Mitwirkende"
- },
- "data_correction": "Datenkorrektur",
- "average_window": "Durchschnittsfenster",
- "smoothing": "Glättung",
- "known_anomalies": "Bekannte Anomalien",
- "known_anomalies_description": "Gleicht bekannte Download-Ausreißer aus, die durch Bots oder CI-Probleme entstanden sind.",
- "known_anomalies_ranges": "Anomalie-Zeiträume",
- "known_anomalies_range": "Von {start} bis {end}",
- "known_anomalies_range_named": "{packageName}: vom {start} bis zum {end}",
- "known_anomalies_none": "Keine bekannten Anomalien für dieses Paket. | Keine bekannten Anomalien für diese Pakete.",
- "known_anomalies_contribute": "Anomalie-Daten einreichen",
- "apply_correction": "Korrektur anwenden",
- "copy_alt": {
- "trend_none": "weitgehend gleichbleibenden",
- "trend_strong": "starken",
- "trend_weak": "schwachen",
- "trend_undefined": "undefinierten (unzureichende Daten)",
- "button_label": "Alt-Text kopieren",
- "watermark": "Unten befindet sich ein Wasserzeichen mit der Aufschrift \"./npmx a fast, modern browser for the npm registry\"",
- "analysis": "{package_name} startet bei {start_value} und endet bei {end_value}, was einen {trend} Trend mit einer Steigung von {downloads_slope} Downloads pro Zeitintervall zeigt",
- "estimation": "Der Endwert ist eine Schätzung basierend auf Teildaten für den aktuellen Zeitraum.",
- "estimations": "Die Endwerte sind Schätzungen basierend auf Teildaten für den aktuellen Zeitraum.",
- "compare": "Vergleichsdiagramm für Paket-Downloads für: {packages}.",
- "single_package": "Download-Liniendiagramm für das Paket {package}.",
- "general_description": "Die Y-Achse stellt die Anzahl der Downloads dar. Die X-Achse stellt den Datumsbereich dar, von {start_date} bis {end_date}, mit einem {granularity}en Zeitraum.{estimation_notice} {packages_analysis}. {watermark}."
- }
- },
- "downloads": {
- "title": "Wöchentliche Downloads",
- "community_distribution": "Community-Adoptionsverteilung ansehen",
- "subtitle": "Downloads über die Zeit"
- },
- "install_scripts": {
- "title": "Installationsskripte",
- "script_label": "(Skript)",
- "npx_packages": "{count} npx-Paket | {count} npx-Pakete",
- "currently": "aktuell {version}"
- },
- "playgrounds": {
- "title": "Ausprobieren",
- "choose": "Testumgebung wählen"
- },
- "metrics": {
- "esm": "ES-Module unterstützt",
- "cjs": "CommonJS unterstützt",
- "no_esm": "Keine ESM-Unterstützung",
- "types_label": "Typen",
- "types_included": "Typen enthalten",
- "types_available": "Typen verfügbar via {package}",
- "no_types": "Keine TypeScript-Typen"
- },
- "license": {
- "view_spdx": "Lizenztext auf SPDX ansehen",
- "none": "Keine"
- },
- "vulnerabilities": {
- "tree_found": "{vulns} Sicherheitslücke in {packages}/{total} Paketen | {vulns} Sicherheitslücken in {packages}/{total} Paketen",
- "show_all_packages": "{count} betroffenes Paket anzeigen | Alle {count} betroffenen Pakete anzeigen",
- "path": "Pfad",
- "more": "+{count} weitere",
- "packages_failed": "{count} Paket konnte nicht geprüft werden | {count} Pakete konnten nicht geprüft werden",
- "scan_failed": "Sicherheits-Scan fehlgeschlagen",
- "severity": {
- "critical": "Kritisch",
- "high": "Hoch",
- "moderate": "Mittel",
- "low": "Niedrig"
- },
- "fixed_in_title": "Behoben in Version {version}"
- },
- "deprecated": {
- "label": "Veraltet",
- "tree_found": "{count} veraltete Abhängigkeit | {count} veraltete Abhängigkeiten",
- "show_all": "{count} veraltetes Paket anzeigen | alle {count} veralteten Pakete anzeigen"
- },
- "access": {
- "title": "Team-Zugriff",
- "refresh": "Team-Zugriff aktualisieren",
- "list_label": "Team-Zugriffsliste",
- "owner": "Owner",
- "rw": "rw",
- "ro": "ro",
- "revoke_access": "Zugriff von {name} entziehen",
- "no_access": "Kein Team-Zugriff konfiguriert",
- "select_team_label": "Team auswählen",
- "loading_teams": "Teams werden geladen...",
- "select_team": "Team auswählen",
- "permission_label": "Berechtigungsstufe",
- "permission": {
- "read_only": "Nur Lesen",
- "read_write": "Lesen/Schreiben"
- },
- "grant_button": "Gewähren",
- "cancel_grant": "Zugriffsvergabe abbrechen",
- "grant_access": "+ Team-Zugriff gewähren"
- },
- "list": {
- "filter_label": "Pakete filtern",
- "filter_placeholder": "Pakete filtern...",
- "sort_label": "Pakete sortieren",
- "showing_count": "Zeige {filtered} von {total} Paketen"
- },
- "skeleton": {
- "loading": "Paketdetails werden geladen",
- "maintainers": "Maintainer",
- "keywords": "Schlüsselwörter",
- "versions": "Versionen",
- "dependencies": "Abhängigkeiten"
- },
- "sort": {
- "downloads": "Meiste Downloads",
- "published": "Zuletzt veröffentlicht",
- "name_asc": "Name (A-Z)",
- "name_desc": "Name (Z-A)"
- },
- "size": {
- "b": "{size} B",
- "kb": "{size} kB",
- "mb": "{size} MB"
- }
- },
- "connector": {
- "modal": {
- "title": "Lokaler Connector",
- "connected": "Verbunden",
- "connected_as_user": "Verbunden als ~{user}",
- "connected_hint": "Du kannst jetzt Pakete und Organisationen über die Web-Oberfläche verwalten.",
- "disconnect": "Trennen",
- "run_hint": "Führe den Connector auf deinem Rechner aus, um Admin-Funktionen zu aktivieren.",
- "copy_command": "Befehl kopieren",
- "copied": "Kopiert",
- "paste_token": "Füge dann den Token unten ein, um dich zu verbinden:",
- "token_label": "Token",
- "token_placeholder": "Token hier einfügen...",
- "advanced": "Erweiterte Optionen",
- "port_label": "Port",
- "warning": "WARNUNG",
- "warning_text": "Dies erlaubt npmx Zugriff auf deine npm CLI. Verbinde dich nur mit Seiten, denen du vertraust.",
- "connect": "Verbinden",
- "connecting": "Verbinde...",
- "auto_open_url": "Anmeldeseite automatisch öffnen"
- }
- },
- "operations": {
- "queue": {
- "title": "Aktions-Warteschlange",
- "clear_all": "Alle löschen",
- "refresh": "Aktionen aktualisieren",
- "empty": "Keine Aktionen in der Warteschlange",
- "empty_hint": "Füge Aktionen von Paket- oder Org-Seiten hinzu",
- "active_label": "Aktive Aktionen",
- "otp_required": "OTP erforderlich",
- "otp_prompt": "OTP eingeben, um fortzufahren",
- "otp_placeholder": "OTP-Code eingeben...",
- "otp_label": "Einmalpasswort",
- "retry_otp": "Mit OTP wiederholen",
- "retry_web_auth": "Mit WebAuth wiederholen",
- "retrying": "Wird wiederholt...",
- "open_web_auth": "WebAuth Link öffnen",
- "approve_operation": "Aktion genehmigen",
- "remove_operation": "Aktion entfernen",
- "approve_all": "Alle genehmigen",
- "execute": "Ausführen",
- "executing": "Wird ausgeführt...",
- "log": "Protokoll",
- "log_label": "Protokoll abgeschlossener Aktionen",
- "remove_from_log": "Aus Protokoll entfernen"
- }
- },
- "org": {
- "teams": {
- "title": "Teams",
- "refresh": "Teams aktualisieren",
- "filter_label": "Teams filtern",
- "filter_placeholder": "Teams filtern...",
- "sort_by": "Sortieren nach",
- "loading": "Teams werden geladen...",
- "no_teams": "Keine Teams gefunden",
- "list_label": "Teams der Organisation",
- "delete_team": "Team {name} löschen",
- "member_count": "{count} Mitglied | {count} Mitglieder",
- "members_of": "Mitglieder von {team}",
- "no_members": "Keine Mitglieder",
- "remove_user": "{user} aus Team entfernen",
- "username_to_add": "Benutzername zum Hinzufügen zu {team}",
- "username_placeholder": "Benutzername...",
- "add_button": "Hinzufügen",
- "cancel_add_user": "Benutzer-Hinzufügung abbrechen",
- "add_member": "+ Mitglied hinzufügen",
- "team_name_label": "Teamname",
- "team_name_placeholder": "Teamname...",
- "create_button": "Erstellen",
- "no_match": "Keine Teams entsprechen \"{query}\"",
- "cancel_create": "Team-Erstellung abbrechen",
- "create_team": "+ Team erstellen"
- },
- "members": {
- "title": "Mitglieder",
- "refresh": "Mitglieder aktualisieren",
- "filter_label": "Mitglieder filtern",
- "filter_placeholder": "Mitglieder filtern...",
- "filter_by_role": "Nach Rolle filtern",
- "filter_by_team": "Nach Team filtern",
- "all_teams": "Alle Teams",
- "sort_by": "Sortieren nach",
- "loading": "Mitglieder werden geladen...",
- "no_members": "Keine Mitglieder gefunden",
- "list_label": "Mitglieder der Organisation",
- "change_role_for": "Rolle von {name} ändern",
- "remove_from_org": "{name} aus Organisation entfernen",
- "view_team": "Team {team} anzeigen",
- "no_match": "Keine Mitglieder entsprechen deinen Filtern",
- "username_label": "Benutzername",
- "username_placeholder": "Benutzername...",
- "role_label": "Rolle",
- "role": {
- "all": "Alle",
- "developer": "Entwickler",
- "admin": "Admin",
- "owner": "Owner"
- },
- "team_label": "Team",
- "no_team": "Kein Team",
- "add_button": "Hinzufügen",
- "cancel_add": "Mitglied-Hinzufügung abbrechen",
- "add_member": "+ Mitglied hinzufügen"
- },
- "public_packages": "{count} öffentliches Paket | {count} öffentliche Pakete",
- "page": {
- "packages_title": "Pakete",
- "members_tab": "Mitglieder",
- "teams_tab": "Teams",
- "no_packages": "Keine öffentlichen Pakete gefunden für",
- "no_packages_hint": "Diese Organisation existiert möglicherweise nicht oder hat keine öffentlichen Pakete.",
- "failed_to_load": "Organisation-Pakete konnten nicht geladen werden",
- "no_match": "Keine Pakete entsprechen \"{query}\"",
- "not_found": "Organisation nicht gefunden",
- "not_found_message": "Die Organisation \"{'@'}{name}\" existiert nicht auf npm"
- }
- },
- "user": {
- "combobox": {
- "add_to_org_hint": "(wird auch zur Organisation hinzugefügt)",
- "press_enter_to_add": "Enter drücken, um {'@'}{username} hinzuzufügen",
- "default_placeholder": "Benutzername...",
- "suggestions_label": "Benutzervorschläge"
- },
- "page": {
- "packages_title": "Pakete",
- "no_packages": "Keine öffentlichen Pakete gefunden für",
- "no_packages_hint": "Dieser Benutzer existiert möglicherweise nicht oder hat keine öffentlichen Pakete.",
- "failed_to_load": "Benutzer-Pakete konnten nicht geladen werden",
- "no_match": "Keine Pakete entsprechen \"{query}\"",
- "filter_placeholder": "{count} Paket filtern... | {count} Pakete filtern..."
- },
- "orgs_page": {
- "title": "Organisationen",
- "back_to_profile": "Zurück zum Profil",
- "connect_required": "Verbinde die lokale CLI, um deine Organisationen zu sehen.",
- "connect_hint_prefix": "Führe",
- "connect_hint_suffix": "aus, um zu starten.",
- "own_orgs_only": "Du kannst nur deine eigenen Organisationen sehen.",
- "view_your_orgs": "Deine Organisationen anzeigen",
- "loading": "Organisationen werden geladen...",
- "empty": "Keine Organisationen gefunden.",
- "empty_hint": "Organisationen werden aus deinen Scoped-Paketen erkannt.",
- "count": "{count} Organisation | {count} Organisationen",
- "packages_count": "{count} Paket | {count} Pakete"
- }
- },
- "claim": {
- "modal": {
- "title": "Paketnamen beanspruchen",
- "success": "Paket beansprucht!",
- "success_detail": "{name}{'@'}0.0.0 wurde auf npm veröffentlicht.",
- "success_hint": "Du kannst jetzt neue Versionen dieses Pakets mit npm publish veröffentlichen.",
- "view_package": "Paket anzeigen",
- "invalid_name": "Ungültiger Paketname:",
- "available": "Dieser Name ist verfügbar!",
- "taken": "Dieser Name ist bereits vergeben.",
- "missing_permission": "Du hast keine Berechtigung, ein Paket zum Scope {'@'}{scope} hinzuzufügen.",
- "similar_warning": "Ähnliche Pakete existieren - npm könnte diesen Namen ablehnen:",
- "related": "Verwandte Pakete:",
- "scope_warning_title": "Erwäge stattdessen ein Scoped-Paket",
- "scope_warning_text": "Unscoped-Paketnamen sind eine gemeinsame Ressource. Beanspruche einen Namen nur, wenn du vorhast, ein Paket zu veröffentlichen und zu pflegen. Für persönliche oder Organisationsprojekte nutze einen Scoped-Namen wie {'@'}{username}/{name}.",
- "connect_required": "Verbinde dich mit dem lokalen Connector, um diesen Paketnamen zu beanspruchen.",
- "connect_button": "Mit Connector verbinden",
- "publish_hint": "Dies veröffentlicht ein minimales Platzhalter-Paket.",
- "preview_json": "package.json Vorschau",
- "claim_button": "Paketnamen beanspruchen",
- "publishing": "Wird veröffentlicht...",
- "checking": "Verfügbarkeit wird geprüft...",
- "failed_to_check": "Namensverfügbarkeit konnte nicht geprüft werden",
- "failed_to_claim": "Paket konnte nicht beansprucht werden"
- }
- },
- "code": {
- "files_label": "Dateien",
- "no_files": "Keine Dateien in diesem Verzeichnis",
- "root": "Wurzel",
- "lines": "{count} Zeile | {count} Zeilen",
- "toggle_tree": "Dateibaum umschalten",
- "close_tree": "Dateibaum schließen",
- "copy_link": "Link kopieren",
- "raw": "Roh",
- "view_raw": "Rohdatei anzeigen",
- "file_too_large": "Datei zu groß für Vorschau",
- "file_size_warning": "{size} überschreitet das 500KB-Limit für Syntax-Highlighting",
- "failed_to_load": "Datei konnte nicht geladen werden",
- "unavailable_hint": "Die Datei ist möglicherweise zu groß oder nicht verfügbar",
- "version_required": "Version erforderlich, um Code zu durchsuchen",
- "go_to_package": "Zum Paket",
- "loading_tree": "Dateibaum wird geladen...",
- "failed_to_load_tree": "Dateien für diese Paketversion konnten nicht geladen werden",
- "back_to_package": "Zurück zum Paket",
- "table": {
- "name": "Name",
- "size": "Größe"
- },
- "markdown_view_mode": {
- "preview": "Vorschau",
- "code": "Code"
- },
- "file_path": "Dateipfad"
- },
- "badges": {
- "provenance": {
- "verified": "verifiziert",
- "verified_title": "Verifizierte Herkunft",
- "verified_via": "Verifiziert: veröffentlicht via {provider}"
- },
- "jsr": {
- "title": "auch auf JSR verfügbar"
- }
- },
- "filters": {
- "title": "Filter",
- "search": "Suche",
- "search_scope": "Suchumfang",
- "search_placeholder_name": "Nach Paketnamen filtern...",
- "search_placeholder_description": "Nach Beschreibung filtern...",
- "search_placeholder_keywords": "Nach Stichwörtern filtern...",
- "search_placeholder_all": "Suche nach allem oder verwende name: desc: kw:",
- "scope_name": "Name",
- "scope_name_description": "Nur nach Paketnamen suchen",
- "scope_description": "Beschreibung",
- "scope_description_description": "Nur nach Beschreibungen suchen",
- "scope_keywords": "Stichwörter",
- "scope_keywords_description": "Nur nach Stichwörtern suchen",
- "scope_all": "Alles",
- "scope_all_description": "Alle Felder durchsuchen, unterstützt name: desc: kw: Operatoren",
- "weekly_downloads": "Wöchentliche Downloads",
- "updated_within": "Aktualisiert innerhalb von",
- "security": "Sicherheit",
- "keywords": "Stichwörter",
- "more_keywords": "+{count} mehr",
- "clear_all": "Alles löschen",
- "remove_filter": "Filter {label} entfernen",
- "chips": {
- "search": "Suche",
- "downloads": "Downloads",
- "keyword": "Stichwort",
- "security": "Sicherheit",
- "updated": "Aktualisiert"
- },
- "download_range": {
- "any": "Beliebig",
- "lt100": "< 100",
- "100_1k": "100 - 1K",
- "1k_10k": "1K - 10K",
- "10k_100k": "10K - 100K",
- "gt100k": "> 100K"
- },
- "updated": {
- "any": "Jederzeit",
- "week": "Letzte Woche",
- "month": "Letzter Monat",
- "quarter": "Letzte 3 Monate",
- "year": "Letztes Jahr"
- },
- "security_options": {
- "all": "Alle Pakete",
- "secure": "Ohne Warnungen",
- "insecure": "Mit Warnungen"
- },
- "sort": {
- "label": "Pakete sortieren",
- "toggle_direction": "Sortierreihenfolge umschalten",
- "ascending": "Aufsteigend",
- "descending": "Absteigend",
- "relevance": "Relevanz",
- "downloads_week": "Downloads/Woche",
- "downloads_day": "Downloads/Tag",
- "downloads_month": "Downloads/Monat",
- "downloads_year": "Downloads/Jahr",
- "published": "Zuletzt veröffentlicht",
- "name": "Name",
- "quality": "Qualität",
- "popularity": "Beliebtheit",
- "maintenance": "Wartung",
- "score": "Bewertung"
- },
- "columns": {
- "title": "Spalten",
- "show": "Spalten anzeigen",
- "reset": "Auf Standardwerte zurücksetzen",
- "coming_soon": "Bald verfügbar",
- "name": "Name",
- "version": "Version",
- "description": "Beschreibung",
- "downloads": "Downloads/Woche",
- "published": "Zuletzt veröffentlicht",
- "maintainers": "Maintainer",
- "keywords": "Stichwörter",
- "quality_score": "Qualitätsfaktor",
- "popularity_score": "Beliebtheitswert",
- "maintenance_score": "Wartungsbewertung",
- "combined_score": "Gesamtwertung",
- "security": "Sicherheit"
- },
- "view_mode": {
- "label": "Anzeigemodus",
- "cards": "Kartenansicht",
- "table": "Tabellenansicht"
- },
- "pagination": {
- "mode_label": "Paginierungsmodus",
- "infinite": "Unendlich",
- "paginated": "Paginiert",
- "items_per_page": "Elemente pro Seite",
- "per_page": "{count} / Seite",
- "showing": "{range} von {total}",
- "previous": "Vorherige Seite",
- "next": "Nächste Seite",
- "nav_label": "Paginierung"
- },
- "count": {
- "showing_filtered": "{filtered} von {count} Paket | {filtered} von {count} Paketen",
- "showing_all": "{count} Paket | {count} Pakete",
- "showing_paginated": "{pageSize} von {count} Paket | {pageSize} von {count} Paketen"
- },
- "table": {
- "security_warning": "Sicherheitswarnung",
- "secure": "Sicher",
- "no_packages": "Keine Pakete gefunden"
- }
- },
- "about": {
- "title": "Über uns",
- "heading": "Über uns",
- "meta_description": "npmx ist ein schneller, moderner Browser für die npm Registry. Ein besseres UX/DX zum Erkunden von npm-Paketen.",
- "what_we_are": {
- "title": "Was wir sind",
- "better_ux_dx": "Bessere UX/DX",
- "admin_ui": "Admin-UI",
- "description": "npmx ist eine {betterUxDx} für die npm-Paket-Registry und Tooling. Wir bieten eine schnelle, moderne Oberfläche zum Erkunden von Paketen mit Funktionen wie Dark Mode, Tastaturnavigation, Code-Browsing und Verbindungen zu alternativen Registries wie {jsr}.",
- "admin_description": "Wir wollen auch eine bessere {adminUi} zum Verwalten deiner Pakete, Teams und Organisationen bieten — alles im Browser, angetrieben von deiner lokalen npm CLI."
- },
- "what_we_are_not": {
- "title": "Was wir nicht sind",
- "not_package_manager": "Kein Paketmanager.",
- "not_registry": "Keine Registry.",
- "registry_description": "Wir hosten keine Pakete. Wir sind nur ein schnellerer, modernerer Weg, sie zu durchstöbern.",
- "package_managers_exist": "{already} {people} {building} {really} {cool} {package} {managers}.",
- "words": {
- "already": "Es gibt",
- "people": "bereits",
- "building": "Leute,",
- "really": "die",
- "cool": "wirklich",
- "package": "coole",
- "managers": "Paketmanager bauen"
- }
- },
- "sponsors": {
- "title": "Sponsoren"
- },
- "oss_partners": {
- "title": "OSS-Partner"
- },
- "team": {
- "title": "Team",
- "governance": "Verwaltung",
- "role_steward": "Verwalter",
- "role_maintainer": "Maintainer",
- "sponsor": "Sponsor",
- "sponsor_aria": "Sponsore {name} auf GitHub"
- },
- "contributors": {
- "title": "... und {count} weiterer Mitwirkender | ... und {count} weitere Mitwirkende",
- "description": "npmx ist komplett Open Source und wird von einer großartigen Community von Mitwirkenden entwickelt. Mach mit und lass uns gemeinsam das npm-Browsing-Erlebnis gestalten, das wir uns schon immer gewünscht haben.",
- "loading": "Mitwirkende werden geladen...",
- "error": "Mitwirkende konnten nicht geladen werden",
- "view_profile": "GitHub-Profil von {name} anzeigen"
- },
- "get_involved": {
- "title": "Mitmachen",
- "contribute": {
- "title": "Beitragen",
- "description": "Hilf uns, ein besseres npm-Erlebnis zu bauen.",
- "cta": "Auf GitHub ansehen"
- },
- "community": {
- "title": "Tritt der Community bei",
- "description": "Chatte, stelle Fragen und teile Ideen.",
- "cta": "Discord beitreten"
- },
- "builders": {
- "title": "Builders-Community",
- "description": "Vernetze dich mit anderen Entwicklern, die auf npmx aufbauen.",
- "cta": "Builders-Chat beitreten"
- },
- "follow": {
- "title": "Bleib auf dem Laufenden",
- "description": "Erfahre das Neueste über npmx.",
- "cta": "Auf Bluesky folgen"
- }
- }
- },
- "account_menu": {
- "connect": "Verbinden",
- "account": "Konto",
- "npm_cli": "npm-CLI",
- "atmosphere": "Atmosphere",
- "npm_cli_desc": "Pakete & Organisationen verwalten",
- "atmosphere_desc": "Soziale Funktionen & Identität",
- "connect_npm_cli": "Mit npm-CLI verbinden",
- "connect_atmosphere": "Mit Atmosphere verbinden",
- "connecting": "Verbinde...",
- "ops": "{count} Operation | {count} Operationen"
- },
- "auth": {
- "modal": {
- "title": "Atmosphere",
- "connected_as": "Verbunden als {'@'}{handle}",
- "disconnect": "Trennen",
- "connect_prompt": "Verbinde dich mit deinem Atmosphere-Konto",
- "handle_label": "Handle",
- "handle_placeholder": "alice.npmx.social",
- "connect": "Verbinden",
- "create_account": "Neues Konto erstellen",
- "connect_bluesky": "Mit Bluesky verbinden",
- "what_is_atmosphere": "Was ist ein Atmosphere-Konto?",
- "atmosphere_explanation": "{npmx} nutzt das {atproto}, um viele seiner sozialen Funktionen zu betreiben. So können Nutzer ihre Daten selbst verwalten und ein einziges Konto für alle kompatiblen Anwendungen nutzen. Sobald du ein Konto erstellt hast, kannst du andere Apps wie {bluesky} und {tangled} mit demselben Konto nutzen.",
- "default_input_error": "Bitte gib einen gültigen Handle, eine DID oder eine vollständige PDS-URL ein",
- "profile": "Profil anzeigen"
- }
- },
- "header": {
- "home": "npmx Startseite",
- "packages": "Pakete",
- "packages_dropdown": {
- "title": "Deine Pakete",
- "loading": "Lädt...",
- "error": "Pakete konnten nicht geladen werden",
- "empty": "Keine Pakete gefunden",
- "view_all": "Alle anzeigen"
- },
- "orgs": "Organisationen",
- "orgs_dropdown": {
- "title": "Deine Organisationen",
- "loading": "Lädt...",
- "error": "Organisationen konnten nicht geladen werden",
- "empty": "Keine Organisationen gefunden",
- "view_all": "Alle anzeigen"
- }
- },
- "compare": {
- "packages": {
- "title": "Pakete vergleichen",
- "tagline": "Vergleiche npm-Pakete direkt miteinander, um das richtige für dich zu finden.",
- "meta_title": "{packages} vergleichen - npmx",
- "meta_title_empty": "Pakete vergleichen - npmx",
- "meta_description": "Direkter Vergleich von {packages}",
- "meta_description_empty": "Vergleiche npm-Pakete direkt miteinander",
- "section_packages": "Pakete",
- "section_facets": "Facetten",
- "section_comparison": "Vergleich",
- "copy_as_markdown": "Tabelle kopieren",
- "loading": "Paketdaten werden geladen...",
- "error": "Paketdaten konnten nicht geladen werden. Bitte versuche es erneut.",
- "empty_title": "Wähle Pakete zum Vergleichen aus",
- "empty_description": "Suche und füge oben mindestens 2 Pakete hinzu, um einen direkten Vergleich ihrer Metriken zu sehen."
- },
- "selector": {
- "search_label": "Nach Paketen suchen",
- "search_first": "Nach einem Paket suchen...",
- "search_add": "Weiteres Paket hinzufügen...",
- "searching": "Suche läuft...",
- "remove_package": "{package} entfernen",
- "packages_selected": "{count}/{max} Pakete ausgewählt.",
- "add_hint": "Füge mindestens 2 Pakete zum Vergleichen hinzu."
- },
- "no_dependency": {
- "label": "(Keine Abhängigkeit)",
- "typeahead_title": "Was würde James tun?",
- "typeahead_description": "Vergleiche mit der Option, gar keine Abhängigkeit zu nutzen! e18e-geprüft.",
- "tooltip_title": "Du brauchst vielleicht keine Abhängigkeit",
- "tooltip_description": "Vergleiche mit dem Verzicht auf eine Abhängigkeit! Die {link} pflegt eine Liste von Paketen, die durch native APIs oder einfachere Alternativen ersetzt werden können.",
- "e18e_community": "e18e Community",
- "add_column": "Spalte „Keine Abhängigkeit“ zum Vergleich hinzufügen"
- },
- "facets": {
- "group_label": "Vergleichsfacetten",
- "all": "Alle",
- "none": "Keine",
- "coming_soon": "Demnächst verfügbar",
- "select_all": "Alle Facetten auswählen",
- "deselect_all": "Alle Facetten abwählen",
- "select_category": "Alle {category}-Facetten auswählen",
- "deselect_category": "Alle {category}-Facetten abwählen",
- "binary_only_tooltip": "Dieses Paket stellt Binärdateien bereit und hat keine Exports",
- "categories": {
- "performance": "Performance",
- "health": "Gesundheit",
- "compatibility": "Kompatibilität",
- "security": "Sicherheit & Compliance"
- },
- "items": {
- "packageSize": {
- "label": "Paketgröße",
- "description": "Größe des Pakets selbst (entpackt)"
- },
- "installSize": {
- "label": "Installationsgröße",
- "description": "Gesamtgröße inklusive aller Abhängigkeiten"
- },
- "dependencies": {
- "label": "Direkte Abhängigkeiten",
- "description": "Anzahl der direkten Abhängigkeiten"
- },
- "totalDependencies": {
- "label": "Gesamt-Abhängigkeiten",
- "description": "Gesamtanzahl inklusive transitiver Abhängigkeiten"
- },
- "downloads": {
- "label": "Downloads/Woche",
- "description": "Wöchentliche Downloadzahlen"
- },
- "totalLikes": {
- "label": "Likes",
- "description": "Anzahl der Likes"
- },
- "lastUpdated": {
- "label": "Veröffentlicht",
- "description": "Wann diese Version veröffentlicht wurde"
- },
- "deprecated": {
- "label": "Veraltet?",
- "description": "Ob das Paket als veraltet markiert ist"
- },
- "engines": {
- "label": "Engines",
- "description": "Node.js-Versionsanforderungen"
- },
- "types": {
- "label": "Typen",
- "description": "TypeScript-Typdefinitionen"
- },
- "moduleFormat": {
- "label": "Modulformat",
- "description": "ESM/CJS-Unterstützung"
- },
- "license": {
- "label": "Lizenz",
- "description": "Paketlizenz"
- },
- "vulnerabilities": {
- "label": "Sicherheitslücken",
- "description": "Bekannte Sicherheitsrisiken"
- }
- },
- "values": {
- "any": "Beliebig",
- "none": "Keine",
- "unknown": "Unbekannt",
- "deprecated": "Veraltet",
- "not_deprecated": "Nein",
- "types_included": "Enthalten",
- "types_none": "Keine",
- "vulnerabilities_summary": "{count} ({critical}C/{high}H)",
- "up_to_you": "Deine Entscheidung!"
- },
- "trends": {
- "title": "Trends vergleichen"
- }
- },
- "file_changes": "Dateiänderungen",
- "files_count": "{count} Datei | {count} Dateien",
- "lines_hidden": "{count} Zeile ausgeblendet | {count} Zeilen ausgeblendet",
- "file_too_large": "Datei zu groß für Diff-Ansicht",
- "file_size_warning": "{size} überschreitet das Limit für die Diff-Anzeige",
- "compare_versions": "Diff",
- "compare_versions_title": "Mit neuester Version vergleichen",
- "summary": "Zusammenfassung",
- "deps_count": "{count} Abh.",
- "dependencies": "Abhängigkeiten",
- "dev_dependencies": "Dev-Abhängigkeiten",
- "peer_dependencies": "Peer-Abhängigkeiten",
- "optional_dependencies": "Optionale Abhängigkeiten",
- "no_dependency_changes": "Keine Änderungen an Abhängigkeiten",
- "file_filter_option": {
- "all": "Gesamt ({count})",
- "added": "Hinzugefügt ({count})",
- "removed": "Entfernt ({count})",
- "modified": "Geändert ({count})"
- },
- "search_files_placeholder": "Dateien suchen...",
- "no_files_all": "Keine Dateien",
- "no_files_search": "Keine Dateien für \"{query}\" gefunden",
- "no_files_filtered": "Keine {filter} Dateien",
- "filter": {
- "added": "hinzugefügten",
- "removed": "entfernten",
- "modified": "geänderten"
- },
- "files_button": "Dateien",
- "select_file_prompt": "Wähle eine Datei in der Seitenleiste, um die Änderungen anzuzeigen",
- "close_files_panel": "Dateibereich schließen",
- "filter_files_label": "Dateien nach Art der Änderung filtern"
- },
- "pds": {
- "title": "npmx PDS",
- "meta_description": "Tritt dem persönlichen Datenspeicher (PDS) von npmx bei – deiner Heimat im AT-Protokoll-Netzwerk.",
- "join": {
- "title": "Dem PDS beitreten",
- "description": "Erstelle ein Konto auf dem npmx PDS und werde Teil des dezentralen AT-Protokoll-Netzwerks.",
- "migrate": "Bestehendes Konto migrieren"
- },
- "server": {
- "title": "Serverinformationen",
- "location_label": "Standort",
- "location_value": "EU",
- "infrastructure_label": "Infrastruktur",
- "infrastructure_value": "Vercel",
- "privacy_label": "Datenschutz",
- "privacy_value": "Datenschutzerklärung ansehen",
- "learn_more": "Mehr über PDS erfahren"
- },
- "community": {
- "title": "Community",
- "description": "Nutzende, die diesen PDS verwenden.",
- "loading": "Community wird geladen...",
- "error": "Community konnte nicht geladen werden",
- "empty": "Noch keine Mitglieder gefunden.",
- "view_profile": "Profil von {name} anzeigen",
- "new_accounts": "Neue Konten"
- }
- },
- "privacy_policy": {
- "title": "Datenschutzerklärung",
- "last_updated": "Zuletzt aktualisiert: {date}",
- "welcome": "Willkommen bei {app}. Wir setzen uns für den Schutz deiner Privatsphäre ein. Diese Richtlinie erklärt, welche Daten wir sammeln, wie wir sie verwenden und welche Rechte du in Bezug auf deine Informationen hast.",
- "cookies": {
- "what_are": {
- "title": "Was sind Cookies?",
- "p1": "Cookies sind kleine Textdateien, die auf deinem Gerät gespeichert werden, wenn du eine Website besuchst. Ihr Zweck ist es, dein Surferlebnis zu verbessern, indem sie bestimmte Präferenzen und Einstellungen speichern."
- },
- "types": {
- "title": "Welche Cookies verwenden wir?",
- "p1": "Wir verwenden ausschließlich {bold} für Zwecke, die für die Funktionalität der Seite unbedingt erforderlich sind. Wir verwenden keine Cookies von Drittanbietern oder für Werbezwecke.",
- "bold": "technisch notwendige Cookies",
- "li1": "{li11}{separator} {li12}",
- "li2": "{li21}{separator} {li22}",
- "separator": ":",
- "cookie_vdpl": "__vdpl",
- "cookie_vdpl_desc": "Dieser Cookie wird von unserem Hosting-Anbieter (Vercel) für den Skew-Schutz verwendet. Er stellt sicher, dass du Assets der korrekten Deployment-Version lädst, wenn während deines Besuchs ein neues Update veröffentlicht wird. Er dient nicht dem Tracking.",
- "cookie_h3": "h3",
- "cookie_h3_desc": "Dies ist unser sicheres Sitzungs-Cookie. Es speichert das OAuth-Access-Token, wenn du dein Atmosphere-Konto verbindest. Es ist unerlässlich, um deine authentifizierte Sitzung aufrechtzuerhalten."
- },
- "local_storage": {
- "title": "Lokaler Speicher",
- "p1": "Zusätzlich zu Sitzungs-Cookies nutzen wir den {bold} deines Browsers, um deine Anzeige-Präferenzen zu speichern. Dies ermöglicht uns, das Design (Hell/Dunkel) und andere von dir gewählte {settings} zu speichern, damit du sie nicht bei jedem Besuch neu konfigurieren musst.",
- "bold": "Local Storage",
- "p2": "Diese Informationen sind rein funktional, werden nur auf deinem Gerät gespeichert und {bold2}. Wir nutzen sie ausschließlich, um deine Erfahrung auf unserer Website zu verbessern.",
- "bold2": "enthalten keine persönlichen Daten und werden nicht zum Tracking verwendet",
- "settings": "Einstellungen"
- },
- "management": {
- "title": "Verwalten von Cookies",
- "p1": "Du kannst deinen Browser so konfigurieren, dass Cookies nach deinen Wünschen akzeptiert, abgelehnt oder gelöscht werden. Bitte beachte jedoch, dass {bold}.",
- "bold": "das Ablehnen notwendiger Cookies den vollständigen Zugriff auf die Anwendung verhindern kann",
- "p2": "Nachfolgend findest du Links mit Anleitungen zur Cookie-Verwaltung in den gängigsten Browsern:",
- "chrome": "Google Chrome (öffnet in einem neuen Fenster)",
- "firefox": "Mozilla Firefox (öffnet in einem neuen Fenster)",
- "edge": "Microsoft Edge (öffnet in einem neuen Fenster)"
- }
- },
- "analytics": {
- "title": "Analyse",
- "p1": "Wir verwenden {bold}, um zu verstehen, wie Besucher unsere Website nutzen. Dies hilft uns, die Benutzererfahrung zu verbessern und Probleme zu identifizieren.",
- "bold": "Vercel Web Analytics",
- "p2": "Vercel Analytics wurde mit Fokus auf Datenschutz entwickelt:",
- "li1": "Es werden keine Cookies verwendet",
- "li2": "Es werden keine persönlichen Identifikationsmerkmale gesammelt",
- "li3": "Nutzer werden nicht über verschiedene Websites hinweg verfolgt",
- "li4": "Alle Daten werden aggregiert und anonymisiert",
- "p3": "Die einzigen gesammelten Informationen umfassen: Seiten-URLs, Referrer, Land/Region, Gerätetyp, Browser und Betriebssystem. Diese Daten können nicht zur Identifizierung einzelner Nutzer verwendet werden."
- },
- "authenticated": {
- "title": "Authentifizierte Benutzer",
- "p1": "Wenn du dein {bold}-Konto mit npmx verbindest, speichern wir deinen OAuth-Access-Token in einem sicheren, HTTP-only Sitzungs-Cookie. Dieser Token wird ausschließlich dazu verwendet, Anfragen in deinem Namen zu authentifizieren.",
- "bold": "Atmosphere",
- "p2": "Wir speichern keine Anmeldedaten und greifen auf keine Daten zu, die über das hinausgehen, was für die Bereitstellung der von dir genutzten Funktionen erforderlich ist. Du kannst dein Konto jederzeit auf der Seite {settings} trennen.",
- "settings": "Einstellungen"
- },
- "data_retention": {
- "title": "Datenspeicherung",
- "p1": "Sitzungs-Cookies werden automatisch gelöscht, wenn du deinen Browser schließt oder nach einer gewissen Zeit der Inaktivität. Local-Storage-Präferenzen bleiben auf deinem Gerät, bis du deine Browserdaten löschst. Analysedaten werden in aggregierter Form gespeichert und können nicht mit einzelnen Nutzern verknüpft werden."
- },
- "your_rights": {
- "title": "Deine Rechte",
- "p1": "Du hast das Recht:",
- "li1": "Informationen darüber zu erhalten, welche Daten wir sammeln",
- "li2": "Deinen Local Storage und deine Cookies jederzeit zu löschen",
- "li3": "Deine authentifizierte Sitzung zu beenden",
- "li4": "Auskunft über unsere Datenpraktiken zu verlangen",
- "p2": "Da wir keine personenbezogenen Daten sammeln, gibt es in der Regel keine persönlichen Informationen, die gelöscht oder exportiert werden könnten."
- },
- "contact": {
- "title": "Kontakt",
- "p1": "Bei Fragen oder Bedenken zu dieser Datenschutzerklärung kannst du uns kontaktieren, indem du ein Issue in unserem {link} eröffnest.",
- "link": "GitHub-Repository"
- },
- "changes": {
- "title": "Änderungen an dieser Richtlinie",
- "p1": "Wir können diese Datenschutzerklärung von Zeit zu Zeit aktualisieren. Alle Änderungen werden auf dieser Seite mit einem aktualisierten Revisionsdatum veröffentlicht."
- }
- },
- "a11y": {
- "title": "Barrierefreiheit",
- "footer_title": "a11y",
- "welcome": "Wir möchten, dass {app} für so viele Menschen wie möglich nutzbar ist.",
- "approach": {
- "title": "Unser Ansatz",
- "p1": "Wir versuchen, den Richtlinien für barrierefreie Webinhalte (WCAG) 2.2 zu folgen und nutzen diese als Referenz beim Erstellen neuer Funktionen. Wir beanspruchen keine vollständige Konformität mit einer bestimmten WCAG-Stufe — Barrierefreiheit ist ein kontinuierlicher Prozess und es gibt immer etwas zu tun.",
- "p2": "Diese Seite ist ein {about_link}. Verbesserungen der Barrierefreiheit werden schrittweise im Rahmen unserer regulären Entwicklung vorgenommen.",
- "about_link": "Open-Source-Projekt, das von der Community getragen wird"
- },
- "measures": {
- "title": "Was wir tun",
- "p1": "Einige der Dinge, die wir auf der gesamten Seite anstreben:",
- "li1": "Verwendung von semantischem HTML und ARIA-Attributen, wo angemessen.",
- "li2": "Verwendung relativer Textgrößen, damit du sie im Browser anpassen kannst.",
- "li3": "Unterstützung der Tastaturnavigation in der gesamten Benutzeroberfläche.",
- "li4": "Berücksichtigung der Media-Queries prefers-reduced-motion und prefers-color-scheme.",
- "li5": "Design mit ausreichendem Farbkontrast im Blick.",
- "li6": "Sicherstellung, dass wesentliche Inhalte ohne JavaScript verfügbar sind, auch wenn einige interaktive Funktionen es erfordern."
- },
- "limitations": {
- "title": "Bekannte Einschränkungen",
- "p1": "Einige Teile der Website — insbesondere Inhalte von Drittanbietern wie Paket-READMEs — entsprechen möglicherweise nicht den Standards für Barrierefreiheit. Wir arbeiten daran, diese Bereiche mit der Zeit zu verbessern."
- },
- "contact": {
- "title": "Feedback",
- "p1": "Wenn du bei {app} auf eine Barriere stößt, sag uns bitte Bescheid, indem du ein Ticket in unserem {link} eröffnest. Wir nehmen diese Meldungen ernst und werden unser Bestes tun, um sie zu beheben.",
- "link": "GitHub-Repository"
- }
- }
+ "$schema": "../schema.json"
}
diff --git a/i18n/locales/de.json b/i18n/locales/de.json
new file mode 100644
index 0000000000..4a17bed86d
--- /dev/null
+++ b/i18n/locales/de.json
@@ -0,0 +1,1466 @@
+{
+ "$schema": "../schema.json",
+ "seo": {
+ "home": {
+ "title": "npmx - Paket-Browser für die npm Registry",
+ "description": "Ein schneller, moderner Browser für die npm Registry. Pakete suchen, durchstöbern und erkunden mit einer modernen Oberfläche."
+ }
+ },
+ "built_at": "erstellt {0}",
+ "alt_logo": "npmx Logo",
+ "tagline": "ein schneller, moderner Browser für die npm Registry",
+ "non_affiliation_disclaimer": "nicht verbunden mit npm, Inc.",
+ "trademark_disclaimer": "npm ist eine eingetragene Marke von npm, Inc. Diese Seite ist nicht mit npm, Inc. verbunden.",
+ "footer": {
+ "about": "über uns",
+ "blog": "blog",
+ "docs": "dokumentation",
+ "source": "quellcode",
+ "social": "social media",
+ "chat": "chat",
+ "builders_chat": "builders chat",
+ "keyboard_shortcuts": "tastaturkürzel"
+ },
+ "shortcuts": {
+ "section": {
+ "global": "Global",
+ "search": "Suche",
+ "package": "Paket"
+ },
+ "focus_search": "Suche fokussieren",
+ "show_kbd_hints": "Tastaturkürzel anzeigen",
+ "settings": "Einstellungen öffnen",
+ "compare": "Pakete vergleichen",
+ "compare_from_package": "Paket zum Vergleich hinzufügen",
+ "navigate_results": "Suchergebnisse durchlaufen",
+ "go_to_result": "Zu ausgewähltem Paket gehen",
+ "open_code_view": "Code-Ansicht öffnen",
+ "open_docs": "Dokumentation öffnen",
+ "disable_shortcuts": "Tastaturkürzel deaktivieren",
+ "open_main": "Hauptansicht öffnen",
+ "open_diff": "Diff-Ansicht öffnen"
+ },
+ "search": {
+ "label": "npm-Pakete durchsuchen",
+ "placeholder": "Pakete suchen...",
+ "button": "Suchen",
+ "searching": "Suche läuft...",
+ "found_packages": "Keine Pakete gefunden | 1 Paket gefunden | {count} Pakete gefunden",
+ "found_packages_sorted": "Keine Ergebnisse gefunden | Sortiere bestes Resultat | Sortiere beste {count} Resultate",
+ "updating": "(wird aktualisiert...)",
+ "no_results": "Keine Pakete gefunden für „{query}“",
+ "rate_limited": "npm-Ratenbegrenzung erreicht, bitte versuche es gleich noch einmal",
+ "title": "Suche",
+ "title_search": "Suche: {search}",
+ "title_packages": "Pakete suchen",
+ "meta_description": "Suchergebnisse für „{search}“",
+ "meta_description_packages": "npm-Pakete suchen",
+ "not_taken": "{name} ist noch frei",
+ "claim_prompt": "Diesen Paketnamen auf npm beanspruchen",
+ "claim_button": "„{name}“ beanspruchen",
+ "want_to_claim": "Möchtest du diesen Paketnamen beanspruchen?",
+ "start_typing": "Beginne zu tippen, um Pakete zu suchen",
+ "algolia_disclaimer": "Unterstützt durch Algolia",
+ "exact_match": "Exakt",
+ "suggestion": {
+ "user": "Benutzer",
+ "org": "Organisation",
+ "view_user_packages": "Pakete dieses Benutzers anzeigen",
+ "view_org_packages": "Pakete dieser Organisation anzeigen"
+ },
+ "instant_search": "Schnellsuche",
+ "instant_search_on": "an",
+ "instant_search_off": "aus",
+ "instant_search_turn_on": "einschalten",
+ "instant_search_turn_off": "ausschalten",
+ "instant_search_advisory": "{label} {state} — {action}"
+ },
+ "nav": {
+ "main_navigation": "Hauptnavigation",
+ "popular_packages": "Beliebte Pakete",
+ "settings": "Einstellungen",
+ "compare": "Vergleichen",
+ "back": "Zurück",
+ "menu": "Menü",
+ "mobile_menu": "Navigationsmenü",
+ "open_menu": "Menü öffnen",
+ "links": "Links",
+ "tap_to_search": "Tippen zum Suchen"
+ },
+ "blog": {
+ "title": "blog",
+ "heading": "blog",
+ "meta_description": "Neuigkeiten, Updates und Artikel rund um npmx.",
+ "author": {
+ "view_profile": "Profil von {name} anzeigen"
+ },
+ "draft_badge": "Entwurf",
+ "draft_banner": "Dies ist ein Entwurf und noch nicht öffentlich sichtbar.",
+ "no_posts": "Keine Beiträge gefunden.",
+ "atproto": {
+ "view_on_bluesky": "Auf Bluesky ansehen",
+ "reply_on_bluesky": "Auf Bluesky antworten",
+ "likes_on_bluesky": "{count} Like auf Bluesky | {count} Likes auf Bluesky",
+ "like_or_reply_on_bluesky": "Auf Bluesky liken oder antworten",
+ "no_comments_yet": "Noch keine Kommentare. Sei der Erste!",
+ "could_not_load_comments": "Kommentare konnten nicht geladen werden.",
+ "comments": "Kommentare",
+ "loading_comments": "Kommentare werden geladen...",
+ "updating": "(wird aktualisiert...)",
+ "reply_count": "{count} Antwort | {count} Antworten",
+ "like_count": "{count} Like | {count} Likes",
+ "repost_count": "{count} Repost | {count} Reposts",
+ "more_replies": "noch {count} Antwort… | noch {count} Antworten…"
+ }
+ },
+ "settings": {
+ "title": "einstellungen",
+ "tagline": "Passe npmx an deine Vorlieben an",
+ "meta_description": "Passe dein npmx.dev-Erlebnis mit Einstellungen für Design, Sprache und Anzeige an.",
+ "sections": {
+ "appearance": "Erscheinungsbild",
+ "display": "Anzeige",
+ "search": "Suchfunktionen",
+ "language": "Sprache",
+ "keyboard_shortcuts": "Tastenkombinationen"
+ },
+ "data_source": {
+ "label": "Datenquelle",
+ "description": "Wähle, woher npmx Suchdaten abruft. Einzelne Paketseiten verwenden immer direkt die npm Registry.",
+ "npm": "npm Registry",
+ "npm_description": "Ruft Suche, Org- und Benutzerlisten direkt von der offiziellen npm Registry ab. Maßgeblich, aber kann langsamer sein.",
+ "algolia": "Algolia",
+ "algolia_description": "Nutzt Algolia für schnellere Suche, Org- und Benutzerseiten."
+ },
+ "instant_search": "Sofortsuche",
+ "instant_search_description": "Suchergebnisse werden automatisch bei der Eingabe aktualisiert, ohne die Eingabetaste zu drücken.",
+ "relative_dates": "Relative Datumsangaben",
+ "include_types": "{'@'}types bei Installation einschließen",
+ "include_types_description": "TypeScript-Typdefinitionen ({'@'}types-Paket) automatisch zu Installationsbefehlen für Pakete ohne Typen hinzufügen",
+ "hide_platform_packages": "Plattformspezifische Pakete in der Suche ausblenden",
+ "hide_platform_packages_description": "Native Binärpakete wie {'@'}esbuild/linux-x64 aus den Ergebnissen ausblenden",
+ "enable_graph_pulse_loop": "Endlosschleife des Pulse-Effekts im Minidiagramm aktivieren",
+ "enable_graph_pulse_loop_description": "Aktiviert eine kontinuierliche Pulse-Animation im wöchentlichen Download-Diagramm. Diese Animation kann für manche Benutzer ablenkend sein.",
+ "theme": "Design",
+ "theme_light": "Hell",
+ "theme_dark": "Dunkel",
+ "theme_system": "System",
+ "language": "Sprache",
+ "help_translate": "Hilf bei der Übersetzung von npmx",
+ "translation_status": "Globalen Übersetzungsstatus prüfen",
+ "accent_colors": {
+ "label": "Akzentfarben",
+ "sky": "Himmelblau",
+ "coral": "Koralle",
+ "amber": "Bernstein",
+ "emerald": "Smaragd",
+ "violet": "Violett",
+ "magenta": "Magenta"
+ },
+ "clear_accent": "Akzentfarbe zurücksetzen",
+ "translation_progress": "Übersetzungsfortschritt",
+ "background_themes": {
+ "label": "Hintergrundschattierung",
+ "neutral": "Neutral",
+ "stone": "Stein",
+ "zinc": "Zink",
+ "slate": "Schiefer",
+ "black": "Schwarz"
+ },
+ "keyboard_shortcuts_enabled": "Tastenkombinationen aktivieren",
+ "keyboard_shortcuts_enabled_description": "Tastenkombinationen können deaktiviert werden, wenn sie mit anderen Browser- oder Systemkürzeln in Konflikt stehen"
+ },
+ "i18n": {
+ "missing_keys": "{count} fehlende Übersetzung | {count} fehlende Übersetzungen",
+ "copy_keys": "Schlüssel kopieren",
+ "show_more_keys": "{count} weitere anzeigen...",
+ "contribute_hint": "Hilf mit, diese Übersetzung zu verbessern, indem du die fehlenden Schlüssel ergänzt.",
+ "edit_on_github": "Auf GitHub bearbeiten",
+ "view_guide": "Übersetzungsleitfaden"
+ },
+ "error": {
+ "401": "Nicht autorisiert",
+ "404": "Seite nicht gefunden",
+ "500": "Interner Serverfehler",
+ "503": "Dienst nicht verfügbar",
+ "default": "Ein unerwarteter Fehler ist aufgetreten"
+ },
+ "common": {
+ "loading": "Lädt...",
+ "loading_more": "Lädt mehr...",
+ "loading_packages": "Pakete werden geladen...",
+ "end_of_results": "Keine weiteren Ergebnisse",
+ "try_again": "Erneut versuchen",
+ "close": "Schließen",
+ "or": "oder",
+ "retry": "Wiederholen",
+ "copy": "Kopieren",
+ "copied": "Kopiert!",
+ "skip_link": "Zum Hauptinhalt springen",
+ "warnings": "Warnungen:",
+ "go_back_home": "Zur Startseite",
+ "per_week": "/ Woche",
+ "vanity_downloads_hint": "Vanity-Zahl: keine Pakete angezeigt | Vanity-Zahl: für das angezeigte Paket | Vanity-Zahl: Summe von {count} angezeigten Paketen",
+ "sort": {
+ "name": "Name",
+ "role": "Rolle",
+ "members": "Mitglieder"
+ },
+ "scroll_to_top": "Nach oben scrollen",
+ "cancel": "Abbrechen",
+ "save": "Speichern",
+ "edit": "Bearbeiten",
+ "error": "Fehler",
+ "view_on": {
+ "npm": "Auf npm ansehen",
+ "github": "Auf GitHub ansehen",
+ "gitlab": "Auf GitLab ansehen",
+ "bitbucket": "Auf Bitbucket ansehen",
+ "codeberg": "Auf Codeberg ansehen",
+ "git_repo": "Im Git-Repository ansehen",
+ "forgejo": "Auf Forgejo ansehen",
+ "gitea": "Auf Gitea ansehen",
+ "gitee": "Auf Gitee ansehen",
+ "radicle": "Auf Radicle ansehen",
+ "sourcehut": "Auf SourceHut ansehen",
+ "tangled": "Auf Tangled ansehen"
+ },
+ "collapse": "Einklappen",
+ "expand": "Ausklappen"
+ },
+ "profile": {
+ "display_name": "Anzeigename",
+ "description": "Beschreibung",
+ "no_description": "Keine Beschreibung vorhanden",
+ "website": "Website",
+ "website_placeholder": "https://beispiel.de",
+ "likes": "Likes",
+ "seo_title": "{handle} - npmx",
+ "seo_description": "npmx-Profil von {handle}",
+ "not_found": "Profil nicht gefunden",
+ "not_found_message": "Das Profil für {handle} konnte nicht gefunden werden.",
+ "invite": {
+ "message": "Es sieht nicht so aus, als ob sie npmx schon benutzen. Möchtest du ihnen davon erzählen?",
+ "share_button": "Auf Bluesky teilen",
+ "compose_text": "Hey {'@'}{handle}! Hast du schon npmx.dev ausprobiert? Es ist ein Browser für die npm Registry, der schnell, modern und Open-Source ist.\nhttps://npmx.dev"
+ }
+ },
+ "package": {
+ "not_found": "Paket nicht gefunden",
+ "not_found_message": "Das Paket konnte nicht gefunden werden.",
+ "no_description": "Keine Beschreibung vorhanden",
+ "verified_provenance": "Verifizierter Herkunftsnachweis",
+ "navigation": "Paket",
+ "copy_name": "Paketnamen kopieren",
+ "deprecation": {
+ "package": "Dieses Paket ist veraltet.",
+ "version": "Diese Version ist veraltet.",
+ "no_reason": "Kein Grund angegeben"
+ },
+ "size_increase": {
+ "title_size": "Deutlicher Größenanstieg seit v{version}",
+ "title_deps": "Deutlich mehr Abhängigkeiten seit v{version}",
+ "title_both": "Größe und Abhängigkeiten deutlich gestiegen seit v{version}",
+ "size": "Installationsgröße um {percent} gestiegen ({size} größer)",
+ "deps": "{count} zusätzliche Abhängigkeiten"
+ },
+ "replacement": {
+ "title": "Du brauchst diese Abhängigkeit vielleicht nicht.",
+ "native": "Dies kann durch {replacement} ersetzt werden, verfügbar seit Node {nodeVersion}.",
+ "simple": "Die {community} hat dieses Paket als überflüssig markiert und empfiehlt: {replacement}.",
+ "documented": "Die {community} hat leistungsstärkere Alternativen für dieses Paket aufgezeigt.",
+ "none": "Dieses Paket wurde als nicht mehr nötig markiert, und seine Funktionalität ist wahrscheinlich in allen Engines nativ verfügbar.",
+ "learn_more": "Mehr erfahren",
+ "learn_more_above": "Erfahre oben mehr.",
+ "mdn": "MDN",
+ "community": "Community",
+ "consider_no_dep": "+ Ohne Abhängigkeit lösen?"
+ },
+ "stats": {
+ "license": "Lizenz",
+ "deps": "Abhängigkeiten",
+ "install_size": "Installationsgröße",
+ "vulns": "Sicherheitslücken",
+ "published": "Veröffentlicht",
+ "published_tooltip": "Datum, an dem {package}{'@'}{version} veröffentlicht wurde",
+ "view_dependency_graph": "Abhängigkeitsgraph anzeigen",
+ "inspect_dependency_tree": "Abhängigkeitsbaum untersuchen",
+ "size_tooltip": {
+ "unpacked": "{size} Größe nach dem Entpacken (dieses Paket)",
+ "total": "{size} Gesamtgröße nach dem Entpacken (inklusive {count} Abhängigkeit für linux-x64) | {size} Gesamtgröße nach dem Entpacken (inklusive aller {count} Abhängigkeiten für linux-x64)"
+ }
+ },
+ "skills": {
+ "title": "Agentenfähigkeiten",
+ "skills_available": "{count} Fähigkeit verfügbar | {count} Fähigkeiten verfügbar",
+ "compatible_with": "Kompatibel mit {tool}",
+ "install": "Installieren",
+ "installation_method": "Installationsmethode",
+ "learn_more": "Mehr erfahren",
+ "available_skills": "Verfügbare Fähigkeiten",
+ "click_to_expand": "Klicken zum Aufklappen",
+ "no_description": "Keine Beschreibung",
+ "file_counts": {
+ "scripts": "{count} Skript | {count} Skripte",
+ "refs": "{count} Referenz | {count} Referenzen",
+ "assets": "{count} Asset | {count} Assets"
+ },
+ "view_source": "Quelltext ansehen",
+ "skills_cli": "Skills-CLI"
+ },
+ "links": {
+ "main": "Hauptseite",
+ "repo": "Repo",
+ "homepage": "Homepage",
+ "issues": "Issues",
+ "jsr": "JSR",
+ "code": "Code",
+ "docs": "Dokumentation",
+ "fund": "Spenden",
+ "compare": "Vergleichen",
+ "compare_this_package": "Dieses Paket vergleichen"
+ },
+ "likes": {
+ "like": "Dieses Paket liken",
+ "unlike": "Like entfernen"
+ },
+ "docs": {
+ "contents": "inhalt",
+ "default_not_available": "Dokumentation für diese Version ist nicht verfügbar.",
+ "not_available": "Dokumentation nicht verfügbar",
+ "not_available_detail": "Für diese Version konnte keine Dokumentation generiert werden.",
+ "page_title": "API-Dokumentation - npmx",
+ "page_title_name": "{name} Dokumentation - npmx",
+ "page_title_version": "{name} Dokumentation - npmx",
+ "og_title": "{name} - Dokumentation",
+ "view_package": "Paket anzeigen"
+ },
+ "get_started": {
+ "title": "Erste Schritte",
+ "pm_label": "Paketmanager",
+ "copy_command": "Installationsbefehl kopieren",
+ "copy_dev_command": "Installationsbefehl (dev) kopieren",
+ "dev_dependency_hint": "Wird normalerweise als Dev-Abhängigkeit installiert",
+ "view_types": "{package} anzeigen"
+ },
+ "create": {
+ "title": "Neues Projekt erstellen",
+ "copy_command": "Erstellungsbefehl kopieren",
+ "view": "{packageName} hat denselben Maintainer. Klicke für mehr Details."
+ },
+ "run": {
+ "title": "Ausführen",
+ "locally": "Lokal ausführen"
+ },
+ "readme": {
+ "title": "Readme",
+ "no_readme": "Keine README verfügbar.",
+ "toc_title": "Gliederung",
+ "callout": {
+ "note": "Notiz",
+ "tip": "Tipp",
+ "important": "Wichtig",
+ "warning": "Warnung",
+ "caution": "Vorsicht"
+ },
+ "copy_as_markdown": "README als Markdown kopieren"
+ },
+ "provenance_section": {
+ "title": "Herkunftsnachweis",
+ "built_and_signed_on": "Erstellt und signiert via {provider}",
+ "view_build_summary": "Build-Zusammenfassung anzeigen",
+ "source_commit": "Quell-Commit",
+ "build_file": "Build-Datei",
+ "public_ledger": "Öffentliches Hauptbuch",
+ "transparency_log_entry": "Transparenzprotokolleintrag",
+ "view_more_details": "Weitere Details anzeigen",
+ "error_loading": "Fehler beim Laden des Herkunftsnachweises"
+ },
+ "security_downgrade": {
+ "title": "Sicherheitsminderung",
+ "description_to_none_provenance": "Diese Version wurde ohne {provenance} veröffentlicht.",
+ "description_to_none_trustedPublisher": "Diese Version wurde ohne {trustedPublishing} veröffentlicht.",
+ "description_to_provenance_trustedPublisher": "Diese Version verwendet {provenance}, aber nicht {trustedPublishing}.",
+ "fallback_install_provenance": "Installationsbefehle sind auf {version} fixiert, die letzte Version mit Herkunftsnachweis.",
+ "fallback_install_trustedPublisher": "Installationsbefehle sind auf {version} fixiert, die letzte Version mit vertrauenswürdiger Veröffentlichung.",
+ "provenance_link_text": "Herkunftsnachweis",
+ "trusted_publishing_link_text": "vertrauenswürdige Veröffentlichung"
+ },
+ "keywords_title": "Schlüsselwörter",
+ "compatibility": "Kompatibilität",
+ "card": {
+ "publisher": "Herausgeber",
+ "published": "Veröffentlicht",
+ "weekly_downloads": "Wöchentliche Downloads",
+ "keywords": "Schlüsselwörter",
+ "license": "Lizenz",
+ "select": "Paket auswählen",
+ "select_maximum": "Maximal {count} Pakete können ausgewählt werden"
+ },
+ "versions": {
+ "title": "versionen",
+ "collapse": "{tag} einklappen",
+ "expand": "{tag} ausklappen",
+ "collapse_other": "Andere Versionen einklappen",
+ "expand_other": "Andere Versionen ausklappen",
+ "collapse_major": "Major {major} einklappen",
+ "expand_major": "Major {major} ausklappen",
+ "other_versions": "Weitere Versionen",
+ "more_tagged": "{count} weitere getaggt",
+ "all_covered": "Alle Versionen sind durch obige Tags abgedeckt",
+ "deprecated_title": "{version} (veraltet)",
+ "view_all": "{count} Version anzeigen | Alle {count} Versionen anzeigen",
+ "view_all_versions": "Alle Versionen anzeigen",
+ "distribution_title": "SemVer Gruppe",
+ "distribution_modal_title": "Versionen",
+ "distribution_range_date_same_year": "von {from} bis {to} {endYear}",
+ "distribution_range_date_multiple_years": "von {from} {startYear} bis {to} {endYear}",
+ "grouping_major": "Major",
+ "grouping_minor": "Minor",
+ "grouping_versions_title": "Versionen",
+ "grouping_versions_about": "Über Versionsgruppierung",
+ "grouping_versions_all": "Alle",
+ "grouping_versions_only_recent": "Nur aktuelle",
+ "grouping_usage_title": "Nutzung",
+ "grouping_usage_about": "Über Nutzungsgruppierung",
+ "grouping_usage_all": "Alle",
+ "grouping_usage_most_used": "Meistgenutzte",
+ "recent_versions_only_tooltip": "Nur Versionen anzeigen, die im letzten Jahr veröffentlicht wurden.",
+ "show_low_usage_tooltip": "Versionsgruppen anzeigen, die weniger als 1% aller Downloads ausmachen.",
+ "y_axis_label": "Downloads",
+ "filter_placeholder": "Nach SemVer filtern (z.B. ^3.0.0)",
+ "filter_invalid": "Ungültiger SemVer-Bereich",
+ "filter_help": "Hilfe zum SemVer-Filter",
+ "filter_tooltip": "Filtere Versionen mit einem {link}. Zum Beispiel zeigt ^3.0.0 alle 3.x-Versionen.",
+ "filter_tooltip_link": "SemVer-Bereich",
+ "no_matches": "Keine Versionen entsprechen diesem Bereich",
+ "copy_alt": {
+ "per_version_analysis": "Die Version {version} wurde {downloads} mal heruntergeladen",
+ "general_description": "Balkendiagramm, das die Downloads pro Version für {versions_count} {semver_grouping_mode} Versionen des Pakets {package_name} anzeigt, {date_range_label} von der Version {first_version} bis zur Version {last_version}. Die am häufigsten heruntergeladene Version ist {max_downloaded_version} mit {max_version_downloads} Downloads. {per_version_analysis}. {watermark}."
+ },
+ "page_title": "Versionshistorie",
+ "current_tags": "Aktuelle Tags",
+ "version_filter_placeholder": "Versionen filtern…",
+ "version_filter_label": "Versionen filtern",
+ "no_match_filter": "Keine Versionen entsprechen {filter}"
+ },
+ "dependencies": {
+ "title": "Abhängigkeit ({count}) | Abhängigkeiten ({count})",
+ "list_label": "Paketabhängigkeiten",
+ "show_all": "{count} Abhängigkeit anzeigen | alle {count} Abhängigkeiten anzeigen",
+ "optional": "optional",
+ "view_vulnerabilities": "Sicherheitslücken anzeigen",
+ "outdated_major": "{count} Hauptversion zurück (neueste: {latest}) | {count} Hauptversionen zurück (neueste: {latest})",
+ "outdated_minor": "{count} Nebenversion zurück (neueste: {latest}) | {count} Nebenversionen zurück (neueste: {latest})",
+ "outdated_patch": "Patch-Update verfügbar (aktuellste: {latest})",
+ "has_replacement": "Für diese Abhängigkeit gibt es empfohlene Alternativen",
+ "vulnerabilities_count": "{count} Sicherheitslücke | {count} Sicherheitslücken"
+ },
+ "peer_dependencies": {
+ "title": "Peer-Abhängigkeit ({count}) | Peer-Abhängigkeiten ({count})",
+ "list_label": "Peer-Abhängigkeiten des Pakets",
+ "show_all": "{count} Peer-Abhängigkeit anzeigen | alle {count} Peer-Abhängigkeiten anzeigen"
+ },
+ "optional_dependencies": {
+ "title": "Optionale Abhängigkeit ({count}) | Optionale Abhängigkeiten ({count})",
+ "list_label": "Optionale Abhängigkeiten des Pakets",
+ "show_all": "{count} optionale Abhängigkeit anzeigen | alle {count} optionalen Abhängigkeiten anzeigen"
+ },
+ "maintainers": {
+ "title": "Maintainer",
+ "list_label": "Paket-Maintainer",
+ "you": "(du)",
+ "via": "via {teams}",
+ "remove_owner": "{name} als Owner entfernen",
+ "username_to_add": "Benutzername zum Hinzufügen als Owner",
+ "username_placeholder": "Benutzername...",
+ "add_button": "Hinzufügen",
+ "cancel_add": "Owner-Hinzufügung abbrechen",
+ "add_owner": "+ Owner hinzufügen",
+ "show_more": "({count} weitere anzeigen)",
+ "show_less": "(weniger anzeigen)",
+ "maintainer_template": "{avatar} {char126}{name}"
+ },
+ "trends": {
+ "chart_assistive_text": {
+ "keyboard_navigation_horizontal": "Verwende die Links- und Rechts-Pfeiltasten, um durch die Datenpunkte zu navigieren.",
+ "keyboard_navigation_vertical": "Verwende die Auf- und Ab-Pfeiltasten, um durch die Datenpunkte zu navigieren.",
+ "table_available": "Eine Datentabelle für dieses Diagramm ist unten verfügbar.",
+ "table_caption": "Diagramm-Datentabelle"
+ },
+ "granularity": "Granularität",
+ "granularity_daily": "Täglich",
+ "granularity_weekly": "Wöchentlich",
+ "granularity_monthly": "Monatlich",
+ "granularity_yearly": "Jährlich",
+ "start_date": "Start",
+ "end_date": "Ende",
+ "loading": "Lädt...",
+ "date_range": "{start} bis {end}",
+ "date_range_multiline": "{start}\nbis {end}",
+ "download_file": "{fileType} herunterladen",
+ "toggle_annotator": "Annotation umschalten",
+ "toggle_stack_mode": "Gestapelte Ansicht ein-/ausschalten",
+ "open_options": "Diagrammoptionen öffnen",
+ "close_options": "Diagrammoptionen schließen",
+ "legend_estimation": "Schätzung",
+ "no_data": "Keine Daten vorhanden",
+ "y_axis_label": "{facet} {granularity}",
+ "facet": "Facette",
+ "title": "Trends",
+ "contributors_skip": "Nicht angezeigt bei Mitwirkende (hat kein GitHub-Repository): | Nicht angezeigt bei Mitwirkende (haben kein GitHub-Repository):",
+ "items": {
+ "downloads": "Downloads",
+ "likes": "Likes",
+ "contributors": "Mitwirkende"
+ },
+ "data_correction": "Datenkorrektur",
+ "average_window": "Durchschnittsfenster",
+ "smoothing": "Glättung",
+ "prediction": "Vorhersage",
+ "known_anomalies": "Bekannte Anomalien",
+ "known_anomalies_description": "Gleicht bekannte Download-Ausreißer aus, die durch Bots oder CI-Probleme entstanden sind.",
+ "known_anomalies_ranges": "Anomalie-Zeiträume",
+ "known_anomalies_range": "Von {start} bis {end}",
+ "known_anomalies_range_named": "{packageName}: vom {start} bis zum {end}",
+ "known_anomalies_none": "Keine bekannten Anomalien für dieses Paket. | Keine bekannten Anomalien für diese Pakete.",
+ "known_anomalies_contribute": "Anomalie-Daten einreichen",
+ "apply_correction": "Korrektur anwenden",
+ "copy_alt": {
+ "trend_none": "weitgehend gleichbleibenden",
+ "trend_strong": "starken",
+ "trend_weak": "schwachen",
+ "trend_undefined": "undefinierten (unzureichende Daten)",
+ "button_label": "Alt-Text kopieren",
+ "watermark": "Unten befindet sich ein Wasserzeichen mit der Aufschrift „./npmx a fast, modern browser for the npm registry“",
+ "analysis": "{package_name} startet bei {start_value} und endet bei {end_value}, was einen {trend} Trend mit einer Steigung von {downloads_slope} Downloads pro Zeitintervall zeigt",
+ "estimation": "Der Endwert ist eine Schätzung basierend auf Teildaten für den aktuellen Zeitraum.",
+ "estimations": "Die Endwerte sind Schätzungen basierend auf Teildaten für den aktuellen Zeitraum.",
+ "compare": "Vergleichsdiagramm für Paket-Downloads für: {packages}.",
+ "single_package": "Download-Liniendiagramm für das Paket {package}.",
+ "general_description": "Die Y-Achse stellt die Anzahl der Downloads dar. Die X-Achse stellt den Datumsbereich dar, von {start_date} bis {end_date}, mit einem {granularity}en Zeitraum.{estimation_notice} {packages_analysis}. {watermark}.",
+ "facet_bar_general_description": "Horizontales Balkendiagramm für: {packages}, Vergleich von {facet} ({description}). {facet_analysis} {watermark}.",
+ "facet_bar_analysis": "{package_name} hat einen Wert von {value}."
+ }
+ },
+ "downloads": {
+ "title": "Wöchentliche Downloads",
+ "community_distribution": "Community-Adoptionsverteilung ansehen",
+ "subtitle": "Über alle Versionen",
+ "sparkline_nav_hint": "Verwende ← →"
+ },
+ "install_scripts": {
+ "title": "Installationsskripte",
+ "script_label": "(Skript)",
+ "npx_packages": "{count} npx-Paket | {count} npx-Pakete",
+ "currently": "aktuell {version}"
+ },
+ "playgrounds": {
+ "title": "Ausprobieren",
+ "choose": "Testumgebung wählen"
+ },
+ "metrics": {
+ "esm": "ES-Module unterstützt",
+ "cjs": "CommonJS unterstützt",
+ "no_esm": "Keine ESM-Unterstützung",
+ "wasm": "Hat WebAssembly",
+ "types_label": "Typen",
+ "types_included": "Typen enthalten",
+ "types_available": "Typen verfügbar via {package}",
+ "no_types": "Keine TypeScript-Typen"
+ },
+ "license": {
+ "view_spdx": "Lizenztext auf SPDX ansehen",
+ "none": "Keine"
+ },
+ "vulnerabilities": {
+ "tree_found": "{vulns} Sicherheitslücke in {packages}/{total} Paketen | {vulns} Sicherheitslücken in {packages}/{total} Paketen",
+ "show_all_packages": "{count} betroffenes Paket anzeigen | Alle {count} betroffenen Pakete anzeigen",
+ "path": "Pfad",
+ "more": "+{count} weitere",
+ "packages_failed": "{count} Paket konnte nicht geprüft werden | {count} Pakete konnten nicht geprüft werden",
+ "scan_failed": "Sicherheits-Scan fehlgeschlagen",
+ "severity": {
+ "critical": "Kritisch",
+ "high": "Hoch",
+ "moderate": "Mittel",
+ "low": "Niedrig"
+ },
+ "fixed_in_title": "Behoben in Version {version}"
+ },
+ "deprecated": {
+ "label": "Veraltet",
+ "tree_found": "{count} veraltete Abhängigkeit | {count} veraltete Abhängigkeiten",
+ "show_all": "{count} veraltetes Paket anzeigen | alle {count} veralteten Pakete anzeigen"
+ },
+ "access": {
+ "title": "Team-Zugriff",
+ "refresh": "Team-Zugriff aktualisieren",
+ "list_label": "Team-Zugriffsliste",
+ "owner": "Owner",
+ "rw": "rw",
+ "ro": "ro",
+ "revoke_access": "Zugriff von {name} entziehen",
+ "no_access": "Kein Team-Zugriff konfiguriert",
+ "select_team_label": "Team auswählen",
+ "loading_teams": "Teams werden geladen...",
+ "select_team": "Team auswählen",
+ "permission_label": "Berechtigungsstufe",
+ "permission": {
+ "read_only": "Nur Lesen",
+ "read_write": "Lesen/Schreiben"
+ },
+ "grant_button": "Gewähren",
+ "cancel_grant": "Zugriffsvergabe abbrechen",
+ "grant_access": "+ Team-Zugriff gewähren"
+ },
+ "list": {
+ "filter_label": "Pakete filtern",
+ "filter_placeholder": "Pakete filtern...",
+ "sort_label": "Pakete sortieren",
+ "showing_count": "Zeige {filtered} von {total} Paketen"
+ },
+ "skeleton": {
+ "loading": "Paketdetails werden geladen",
+ "maintainers": "Maintainer",
+ "keywords": "Schlüsselwörter",
+ "versions": "Versionen",
+ "dependencies": "Abhängigkeiten"
+ },
+ "sort": {
+ "downloads": "Meiste Downloads",
+ "published": "Zuletzt veröffentlicht",
+ "name_asc": "Name (A-Z)",
+ "name_desc": "Name (Z-A)"
+ },
+ "size": {
+ "b": "{size} B",
+ "kb": "{size} kB",
+ "mb": "{size} MB"
+ },
+ "download": {
+ "button": "Herunterladen",
+ "tarball": "Tarball als .tar.gz herunterladen"
+ }
+ },
+ "connector": {
+ "modal": {
+ "title": "Lokaler Connector",
+ "connected": "Verbunden",
+ "connected_as_user": "Verbunden als ~{user}",
+ "connected_hint": "Du kannst jetzt Pakete und Organisationen über die Web-Oberfläche verwalten.",
+ "disconnect": "Trennen",
+ "run_hint": "Führe den Connector auf deinem Rechner aus, um Admin-Funktionen zu aktivieren.",
+ "copy_command": "Befehl kopieren",
+ "copied": "Kopiert",
+ "paste_token": "Füge dann den Token unten ein, um dich zu verbinden:",
+ "token_label": "Token",
+ "token_placeholder": "Token hier einfügen...",
+ "advanced": "Erweiterte Optionen",
+ "port_label": "Port",
+ "warning": "WARNUNG",
+ "warning_text": "Dies erlaubt npmx Zugriff auf deine npm CLI. Verbinde dich nur mit Seiten, denen du vertraust.",
+ "connect": "Verbinden",
+ "connecting": "Verbinde...",
+ "auto_open_url": "Anmeldeseite automatisch öffnen"
+ }
+ },
+ "operations": {
+ "queue": {
+ "title": "Aktions-Warteschlange",
+ "clear_all": "Alle löschen",
+ "refresh": "Aktionen aktualisieren",
+ "empty": "Keine Aktionen in der Warteschlange",
+ "empty_hint": "Füge Aktionen von Paket- oder Org-Seiten hinzu",
+ "active_label": "Aktive Aktionen",
+ "otp_required": "OTP erforderlich",
+ "otp_prompt": "OTP eingeben, um fortzufahren",
+ "otp_placeholder": "OTP-Code eingeben...",
+ "otp_label": "Einmalpasswort",
+ "retry_otp": "Mit OTP wiederholen",
+ "retry_web_auth": "Mit WebAuth wiederholen",
+ "retrying": "Wird wiederholt...",
+ "open_web_auth": "WebAuth Link öffnen",
+ "approve_operation": "Aktion genehmigen",
+ "remove_operation": "Aktion entfernen",
+ "approve_all": "Alle genehmigen",
+ "execute": "Ausführen",
+ "executing": "Wird ausgeführt...",
+ "log": "Protokoll",
+ "log_label": "Protokoll abgeschlossener Aktionen",
+ "remove_from_log": "Aus Protokoll entfernen"
+ }
+ },
+ "org": {
+ "teams": {
+ "title": "Teams",
+ "refresh": "Teams aktualisieren",
+ "filter_label": "Teams filtern",
+ "filter_placeholder": "Teams filtern...",
+ "sort_by": "Sortieren nach",
+ "loading": "Teams werden geladen...",
+ "no_teams": "Keine Teams gefunden",
+ "list_label": "Teams der Organisation",
+ "delete_team": "Team {name} löschen",
+ "member_count": "{count} Mitglied | {count} Mitglieder",
+ "members_of": "Mitglieder von {team}",
+ "no_members": "Keine Mitglieder",
+ "remove_user": "{user} aus Team entfernen",
+ "username_to_add": "Benutzername zum Hinzufügen zu {team}",
+ "username_placeholder": "Benutzername...",
+ "add_button": "Hinzufügen",
+ "cancel_add_user": "Benutzer-Hinzufügung abbrechen",
+ "add_member": "+ Mitglied hinzufügen",
+ "team_name_label": "Teamname",
+ "team_name_placeholder": "Teamname...",
+ "create_button": "Erstellen",
+ "no_match": "Keine Teams entsprechen „{query}“",
+ "cancel_create": "Team-Erstellung abbrechen",
+ "create_team": "+ Team erstellen"
+ },
+ "members": {
+ "title": "Mitglieder",
+ "refresh": "Mitglieder aktualisieren",
+ "filter_label": "Mitglieder filtern",
+ "filter_placeholder": "Mitglieder filtern...",
+ "filter_by_role": "Nach Rolle filtern",
+ "filter_by_team": "Nach Team filtern",
+ "all_teams": "Alle Teams",
+ "sort_by": "Sortieren nach",
+ "loading": "Mitglieder werden geladen...",
+ "no_members": "Keine Mitglieder gefunden",
+ "list_label": "Mitglieder der Organisation",
+ "change_role_for": "Rolle von {name} ändern",
+ "remove_from_org": "{name} aus Organisation entfernen",
+ "view_team": "Team {team} anzeigen",
+ "no_match": "Keine Mitglieder entsprechen deinen Filtern",
+ "username_label": "Benutzername",
+ "username_placeholder": "Benutzername...",
+ "role_label": "Rolle",
+ "role": {
+ "all": "Alle",
+ "developer": "Entwickler",
+ "admin": "Admin",
+ "owner": "Owner"
+ },
+ "team_label": "Team",
+ "no_team": "Kein Team",
+ "add_button": "Hinzufügen",
+ "cancel_add": "Mitglied-Hinzufügung abbrechen",
+ "add_member": "+ Mitglied hinzufügen"
+ },
+ "public_packages": "{count} öffentliches Paket | {count} öffentliche Pakete",
+ "page": {
+ "packages_title": "Pakete",
+ "members_tab": "Mitglieder",
+ "teams_tab": "Teams",
+ "no_packages": "Keine öffentlichen Pakete gefunden für",
+ "no_packages_hint": "Diese Organisation existiert möglicherweise nicht oder hat keine öffentlichen Pakete.",
+ "failed_to_load": "Organisation-Pakete konnten nicht geladen werden",
+ "no_match": "Keine Pakete entsprechen „{query}“",
+ "not_found": "Organisation nicht gefunden",
+ "not_found_message": "Die Organisation „{'@'}{name}“ existiert nicht auf npm"
+ }
+ },
+ "user": {
+ "combobox": {
+ "add_to_org_hint": "(wird auch zur Organisation hinzugefügt)",
+ "press_enter_to_add": "Enter drücken, um {'@'}{username} hinzuzufügen",
+ "default_placeholder": "Benutzername...",
+ "suggestions_label": "Benutzervorschläge"
+ },
+ "page": {
+ "packages_title": "Pakete",
+ "no_packages": "Keine öffentlichen Pakete gefunden für",
+ "no_packages_hint": "Dieser Benutzer existiert möglicherweise nicht oder hat keine öffentlichen Pakete.",
+ "failed_to_load": "Benutzer-Pakete konnten nicht geladen werden",
+ "no_match": "Keine Pakete entsprechen „{query}“",
+ "filter_placeholder": "{count} Paket filtern... | {count} Pakete filtern..."
+ },
+ "orgs_page": {
+ "title": "Organisationen",
+ "back_to_profile": "Zurück zum Profil",
+ "connect_required": "Verbinde die lokale CLI, um deine Organisationen zu sehen.",
+ "connect_hint_prefix": "Führe",
+ "connect_hint_suffix": "aus, um zu starten.",
+ "own_orgs_only": "Du kannst nur deine eigenen Organisationen sehen.",
+ "view_your_orgs": "Deine Organisationen anzeigen",
+ "loading": "Organisationen werden geladen...",
+ "empty": "Keine Organisationen gefunden.",
+ "empty_hint": "Organisationen werden aus deinen Scoped-Paketen erkannt.",
+ "count": "{count} Organisation | {count} Organisationen",
+ "packages_count": "{count} Paket | {count} Pakete"
+ }
+ },
+ "claim": {
+ "modal": {
+ "title": "Paketnamen beanspruchen",
+ "success": "Paket beansprucht!",
+ "success_detail": "{name}{'@'}0.0.0 wurde auf npm veröffentlicht.",
+ "success_hint": "Du kannst jetzt neue Versionen dieses Pakets mit npm publish veröffentlichen.",
+ "view_package": "Paket anzeigen",
+ "invalid_name": "Ungültiger Paketname:",
+ "available": "Dieser Name ist verfügbar!",
+ "taken": "Dieser Name ist bereits vergeben.",
+ "missing_permission": "Du hast keine Berechtigung, ein Paket zum Scope {'@'}{scope} hinzuzufügen.",
+ "similar_warning": "Ähnliche Pakete existieren - npm könnte diesen Namen ablehnen:",
+ "related": "Verwandte Pakete:",
+ "scope_warning_title": "Erwäge stattdessen ein Scoped-Paket",
+ "scope_warning_text": "Unscoped-Paketnamen sind eine gemeinsame Ressource. Beanspruche einen Namen nur, wenn du vorhast, ein Paket zu veröffentlichen und zu pflegen. Für persönliche oder Organisationsprojekte nutze einen Scoped-Namen wie {'@'}{username}/{name}.",
+ "connect_required": "Verbinde dich mit dem lokalen Connector, um diesen Paketnamen zu beanspruchen.",
+ "connect_button": "Mit Connector verbinden",
+ "publish_hint": "Dies veröffentlicht ein minimales Platzhalter-Paket.",
+ "preview_json": "package.json Vorschau",
+ "claim_button": "Paketnamen beanspruchen",
+ "publishing": "Wird veröffentlicht...",
+ "checking": "Verfügbarkeit wird geprüft...",
+ "failed_to_check": "Namensverfügbarkeit konnte nicht geprüft werden",
+ "failed_to_claim": "Paket konnte nicht beansprucht werden"
+ }
+ },
+ "code": {
+ "files_label": "Dateien",
+ "no_files": "Keine Dateien in diesem Verzeichnis",
+ "root": "Wurzel",
+ "lines": "{count} Zeile | {count} Zeilen",
+ "toggle_tree": "Dateibaum umschalten",
+ "close_tree": "Dateibaum schließen",
+ "copy_link": "Link kopieren",
+ "raw": "Roh",
+ "view_raw": "Rohdatei anzeigen",
+ "file_too_large": "Datei zu groß für Vorschau",
+ "file_size_warning": "{size} überschreitet das 500KB-Limit für Syntax-Highlighting",
+ "failed_to_load": "Datei konnte nicht geladen werden",
+ "unavailable_hint": "Die Datei ist möglicherweise zu groß oder nicht verfügbar",
+ "version_required": "Version erforderlich, um Code zu durchsuchen",
+ "go_to_package": "Zum Paket",
+ "loading_tree": "Dateibaum wird geladen...",
+ "failed_to_load_tree": "Dateien für diese Paketversion konnten nicht geladen werden",
+ "back_to_package": "Zurück zum Paket",
+ "table": {
+ "name": "Name",
+ "size": "Größe"
+ },
+ "markdown_view_mode": {
+ "preview": "Vorschau",
+ "code": "Code"
+ },
+ "file_path": "Dateipfad",
+ "binary_file": "Binärdatei",
+ "binary_rendering_warning": "Dateityp „{contentType}“ wird für die Vorschau nicht unterstützt."
+ },
+ "badges": {
+ "provenance": {
+ "verified": "verifiziert",
+ "verified_title": "Verifizierter Herkunftsnachweis",
+ "verified_via": "Verifiziert: veröffentlicht via {provider}"
+ },
+ "jsr": {
+ "title": "auch auf JSR verfügbar"
+ }
+ },
+ "filters": {
+ "title": "Filter",
+ "search": "Suche",
+ "search_scope": "Suchumfang",
+ "search_placeholder_name": "Nach Paketnamen filtern...",
+ "search_placeholder_description": "Nach Beschreibung filtern...",
+ "search_placeholder_keywords": "Nach Stichwörtern filtern...",
+ "search_placeholder_all": "Suche nach allem oder verwende name: desc: kw:",
+ "scope_name": "Name",
+ "scope_name_description": "Nur nach Paketnamen suchen",
+ "scope_description": "Beschreibung",
+ "scope_description_description": "Nur nach Beschreibungen suchen",
+ "scope_keywords": "Stichwörter",
+ "scope_keywords_description": "Nur nach Stichwörtern suchen",
+ "scope_all": "Alles",
+ "scope_all_description": "Alle Felder durchsuchen, unterstützt name: desc: kw: Operatoren",
+ "weekly_downloads": "Wöchentliche Downloads",
+ "updated_within": "Aktualisiert innerhalb von",
+ "security": "Sicherheit",
+ "keywords": "Stichwörter",
+ "more_keywords": "+{count} mehr",
+ "clear_all": "Alles löschen",
+ "remove_filter": "Filter {label} entfernen",
+ "chips": {
+ "search": "Suche",
+ "downloads": "Downloads",
+ "keyword": "Stichwort",
+ "security": "Sicherheit",
+ "updated": "Aktualisiert"
+ },
+ "download_range": {
+ "any": "Beliebig",
+ "lt100": "< 100",
+ "100_1k": "100 - 1K",
+ "1k_10k": "1K - 10K",
+ "10k_100k": "10K - 100K",
+ "gt100k": "> 100K"
+ },
+ "updated": {
+ "any": "Jederzeit",
+ "week": "Letzte Woche",
+ "month": "Letzter Monat",
+ "quarter": "Letzte 3 Monate",
+ "year": "Letztes Jahr"
+ },
+ "security_options": {
+ "all": "Alle Pakete",
+ "secure": "Ohne Warnungen",
+ "insecure": "Mit Warnungen"
+ },
+ "view_selected": "Auswahl anzeigen",
+ "clear_selected_label": "Auswahl aufheben",
+ "sort": {
+ "label": "Pakete sortieren",
+ "toggle_direction": "Sortierreihenfolge umschalten",
+ "ascending": "Aufsteigend",
+ "descending": "Absteigend",
+ "relevance": "Relevanz",
+ "downloads_week": "Downloads/Woche",
+ "downloads_day": "Downloads/Tag",
+ "downloads_month": "Downloads/Monat",
+ "downloads_year": "Downloads/Jahr",
+ "published": "Zuletzt veröffentlicht",
+ "name": "Name"
+ },
+ "columns": {
+ "title": "Spalten",
+ "show": "Spalten anzeigen",
+ "reset": "Auf Standardwerte zurücksetzen",
+ "coming_soon": "Bald verfügbar",
+ "name": "Name",
+ "version": "Version",
+ "description": "Beschreibung",
+ "downloads": "Downloads/Woche",
+ "published": "Zuletzt veröffentlicht",
+ "maintainers": "Maintainer",
+ "keywords": "Stichwörter",
+ "security": "Sicherheit",
+ "selection": "Paket auswählen"
+ },
+ "view_mode": {
+ "label": "Anzeigemodus",
+ "cards": "Kartenansicht",
+ "table": "Tabellenansicht"
+ },
+ "pagination": {
+ "mode_label": "Paginierungsmodus",
+ "infinite": "Unendlich",
+ "paginated": "Paginiert",
+ "items_per_page": "Elemente pro Seite",
+ "per_page": "{count} / Seite",
+ "showing": "{range} von {total}",
+ "previous": "Vorherige Seite",
+ "next": "Nächste Seite",
+ "nav_label": "Paginierung"
+ },
+ "count": {
+ "showing_filtered": "{filtered} von {count} Paket | {filtered} von {count} Paketen",
+ "showing_all": "{count} Paket | {count} Pakete",
+ "showing_paginated": "{pageSize} von {count} Paket | {pageSize} von {count} Paketen"
+ },
+ "table": {
+ "security_warning": "Sicherheitswarnung",
+ "secure": "Sicher",
+ "no_packages": "Keine Pakete gefunden"
+ }
+ },
+ "about": {
+ "title": "Über uns",
+ "heading": "über uns",
+ "meta_description": "npmx ist ein schneller, moderner Browser für die npm Registry. Ein besseres UX/DX zum Erkunden von npm-Paketen.",
+ "what_we_are": {
+ "title": "Was wir sind",
+ "better_ux_dx": "Bessere UX/DX",
+ "admin_ui": "Admin-UI",
+ "description": "npmx ist eine {betterUxDx} für die npm-Paket-Registry und Tooling. Wir bieten eine schnelle, moderne Oberfläche zum Erkunden von Paketen mit Funktionen wie Dark Mode, Tastaturnavigation, Code-Browsing und Verbindungen zu alternativen Registries wie {jsr}.",
+ "admin_description": "Wir wollen auch eine bessere {adminUi} zum Verwalten deiner Pakete, Teams und Organisationen bieten — alles im Browser, angetrieben von deiner lokalen npm CLI."
+ },
+ "what_we_are_not": {
+ "title": "Was wir nicht sind",
+ "not_package_manager": "Kein Paketmanager.",
+ "not_registry": "Keine Registry.",
+ "registry_description": "Wir hosten keine Pakete. Wir sind nur ein schnellerer, modernerer Weg, sie zu durchstöbern.",
+ "package_managers_exist": "{already} {people} {building} {really} {cool} {package} {managers}.",
+ "words": {
+ "already": "Es gibt",
+ "people": "bereits",
+ "building": "Leute,",
+ "really": "die",
+ "cool": "wirklich",
+ "package": "coole",
+ "managers": "Paketmanager bauen"
+ }
+ },
+ "sponsors": {
+ "title": "Sponsoren"
+ },
+ "oss_partners": {
+ "title": "OSS-Partner"
+ },
+ "team": {
+ "title": "Team",
+ "governance": "Verwaltung",
+ "role_steward": "Verwalter",
+ "role_maintainer": "Maintainer",
+ "sponsor": "Sponsor",
+ "sponsor_aria": "Sponsore {name} auf GitHub"
+ },
+ "contributors": {
+ "title": "... und {count} weiterer Mitwirkender | ... und {count} weitere Mitwirkende",
+ "description": "npmx ist komplett Open Source und wird von einer großartigen Community von Mitwirkenden entwickelt. Mach mit und lass uns gemeinsam das npm-Browsing-Erlebnis gestalten, das wir uns schon immer gewünscht haben.",
+ "loading": "Mitwirkende werden geladen...",
+ "error": "Mitwirkende konnten nicht geladen werden",
+ "view_profile": "GitHub-Profil von {name} anzeigen"
+ },
+ "get_involved": {
+ "title": "Mitmachen",
+ "contribute": {
+ "title": "Beitragen",
+ "description": "Hilf uns, ein besseres npm-Erlebnis zu bauen.",
+ "cta": "Auf GitHub ansehen"
+ },
+ "community": {
+ "title": "Tritt der Community bei",
+ "description": "Chatte, stelle Fragen und teile Ideen.",
+ "cta": "Discord beitreten"
+ },
+ "builders": {
+ "title": "Builders-Community",
+ "description": "Vernetze dich mit anderen Entwicklern, die auf npmx aufbauen.",
+ "cta": "Builders-Chat beitreten"
+ },
+ "follow": {
+ "title": "Bleib auf dem Laufenden",
+ "description": "Erfahre das Neueste über npmx.",
+ "cta": "Auf Bluesky folgen"
+ }
+ }
+ },
+ "account_menu": {
+ "connect": "Verbinden",
+ "account": "Konto",
+ "npm_cli": "npm-CLI",
+ "atmosphere": "Atmosphere",
+ "npm_cli_desc": "Pakete & Organisationen verwalten",
+ "atmosphere_desc": "Soziale Funktionen & Identität",
+ "connect_npm_cli": "Mit npm-CLI verbinden",
+ "connect_atmosphere": "Mit Atmosphere verbinden",
+ "connecting": "Verbinde...",
+ "ops": "{count} Operation | {count} Operationen"
+ },
+ "auth": {
+ "modal": {
+ "title": "Atmosphere",
+ "connected_as": "Verbunden als {'@'}{handle}",
+ "disconnect": "Trennen",
+ "connect_prompt": "Verbinde dich mit deinem Atmosphere-Konto",
+ "handle_label": "Handle",
+ "handle_placeholder": "alice.npmx.social",
+ "connect": "Verbinden",
+ "create_account": "Neues Konto erstellen",
+ "connect_bluesky": "Mit Bluesky verbinden",
+ "what_is_atmosphere": "Was ist ein Atmosphere-Konto?",
+ "atmosphere_explanation": "{npmx} nutzt das {atproto}, um viele seiner sozialen Funktionen zu betreiben. So können Nutzer ihre Daten selbst verwalten und ein einziges Konto für alle kompatiblen Anwendungen nutzen. Sobald du ein Konto erstellt hast, kannst du andere Apps wie {bluesky} und {tangled} mit demselben Konto nutzen.",
+ "default_input_error": "Bitte gib einen gültigen Handle, eine DID oder eine vollständige PDS-URL ein",
+ "profile": "Profil anzeigen"
+ }
+ },
+ "header": {
+ "home": "npmx Startseite",
+ "packages": "Pakete",
+ "packages_dropdown": {
+ "title": "Deine Pakete",
+ "loading": "Lädt...",
+ "error": "Pakete konnten nicht geladen werden",
+ "empty": "Keine Pakete gefunden",
+ "view_all": "Alle anzeigen"
+ },
+ "orgs": "Organisationen",
+ "orgs_dropdown": {
+ "title": "Deine Organisationen",
+ "loading": "Lädt...",
+ "error": "Organisationen konnten nicht geladen werden",
+ "empty": "Keine Organisationen gefunden",
+ "view_all": "Alle anzeigen"
+ },
+ "pr": "Öffne GitHub Pull Request #{prNumber}"
+ },
+ "compare": {
+ "packages": {
+ "title": "pakete vergleichen",
+ "tagline": "Vergleiche npm-Pakete direkt miteinander, um das richtige für dich zu finden.",
+ "meta_title": "{packages} vergleichen - npmx",
+ "meta_title_empty": "pakete vergleichen - npmx",
+ "meta_description": "Direkter Vergleich von {packages}",
+ "meta_description_empty": "Vergleiche npm-Pakete direkt miteinander",
+ "section_packages": "Pakete",
+ "section_facets": "Facetten",
+ "section_comparison": "Vergleich",
+ "copy_as_markdown": "Tabelle kopieren",
+ "loading": "Paketdaten werden geladen...",
+ "error": "Paketdaten konnten nicht geladen werden. Bitte versuche es erneut.",
+ "empty_title": "Wähle Pakete zum Vergleichen aus",
+ "empty_description": "Suche und füge oben mindestens 2 Pakete hinzu, um einen direkten Vergleich ihrer Metriken zu sehen.",
+ "table_view": "Tabelle",
+ "charts_view": "Diagramme",
+ "bar_chart_nav_hint": "Verwende ↑ ↓",
+ "line_chart_nav_hint": "Verwende ← →"
+ },
+ "selector": {
+ "search_label": "Nach Paketen suchen",
+ "search_first": "Nach einem Paket suchen...",
+ "search_add": "Weiteres Paket hinzufügen...",
+ "searching": "Suche läuft...",
+ "remove_package": "{package} entfernen",
+ "packages_selected": "{count}/{max} Pakete ausgewählt.",
+ "add_hint": "Füge mindestens 2 Pakete zum Vergleichen hinzu."
+ },
+ "no_dependency": {
+ "label": "(Keine Abhängigkeit)",
+ "typeahead_title": "Was würde James tun?",
+ "typeahead_description": "Vergleiche mit der Option, gar keine Abhängigkeit zu nutzen! e18e-geprüft.",
+ "tooltip_title": "Du brauchst vielleicht keine Abhängigkeit",
+ "tooltip_description": "Vergleiche mit dem Verzicht auf eine Abhängigkeit! Die {link} pflegt eine Liste von Paketen, die durch native APIs oder einfachere Alternativen ersetzt werden können.",
+ "e18e_community": "e18e Community",
+ "add_column": "Spalte „Keine Abhängigkeit“ zum Vergleich hinzufügen"
+ },
+ "facets": {
+ "all": "Alle",
+ "none": "Keine",
+ "coming_soon": "Demnächst verfügbar",
+ "select_all": "Alle Facetten auswählen",
+ "deselect_all": "Alle Facetten abwählen",
+ "binary_only_tooltip": "Dieses Paket stellt Binärdateien bereit und hat keine Exports",
+ "categories": {
+ "performance": "Performance",
+ "health": "Gesundheit",
+ "compatibility": "Kompatibilität",
+ "security": "Sicherheit & Compliance"
+ },
+ "items": {
+ "packageSize": {
+ "label": "Paketgröße",
+ "description": "Größe des Pakets selbst (entpackt)"
+ },
+ "installSize": {
+ "label": "Installationsgröße",
+ "description": "Gesamtgröße inklusive aller Abhängigkeiten"
+ },
+ "dependencies": {
+ "label": "Direkte Abhängigkeiten",
+ "description": "Anzahl der direkten Abhängigkeiten"
+ },
+ "totalDependencies": {
+ "label": "Gesamt-Abhängigkeiten",
+ "description": "Gesamtanzahl inklusive transitiver Abhängigkeiten"
+ },
+ "downloads": {
+ "label": "Downloads/Woche",
+ "description": "Wöchentliche Downloadzahlen"
+ },
+ "totalLikes": {
+ "label": "Likes",
+ "description": "Anzahl der Likes"
+ },
+ "lastUpdated": {
+ "label": "Veröffentlicht",
+ "description": "Wann diese Version veröffentlicht wurde"
+ },
+ "deprecated": {
+ "label": "Veraltet?",
+ "description": "Ob das Paket als veraltet markiert ist"
+ },
+ "engines": {
+ "label": "Engines",
+ "description": "Node.js-Versionsanforderungen"
+ },
+ "types": {
+ "label": "Typen",
+ "description": "TypeScript-Typdefinitionen"
+ },
+ "moduleFormat": {
+ "label": "Modulformat",
+ "description": "ESM/CJS-Unterstützung"
+ },
+ "license": {
+ "label": "Lizenz",
+ "description": "Paketlizenz"
+ },
+ "vulnerabilities": {
+ "label": "Sicherheitslücken",
+ "description": "Bekannte Sicherheitsrisiken"
+ }
+ },
+ "values": {
+ "any": "Beliebig",
+ "none": "Keine",
+ "unknown": "Unbekannt",
+ "deprecated": "Veraltet",
+ "not_deprecated": "Nein",
+ "types_included": "Enthalten",
+ "types_none": "Keine",
+ "vulnerabilities_summary": "{count} ({critical}C/{high}H)",
+ "up_to_you": "Deine Entscheidung!"
+ },
+ "trends": {
+ "title": "Trends vergleichen"
+ }
+ },
+ "file_changes": "Dateiänderungen",
+ "files_count": "{count} Datei | {count} Dateien",
+ "lines_hidden": "{count} Zeile ausgeblendet | {count} Zeilen ausgeblendet",
+ "file_too_large": "Datei zu groß für Diff-Ansicht",
+ "file_size_warning": "{size} überschreitet das Limit für die Diff-Anzeige",
+ "compare_versions": "Diff",
+ "compare_versions_title": "Mit neuester Version vergleichen",
+ "comparing_versions_label": "Versionen werden verglichen...",
+ "version_back_to_package": "Zurück zum Paket",
+ "version_error_message": "Versionen konnten nicht verglichen werden.",
+ "version_invalid_url_format": {
+ "hint": "Ungültiges Format der Vergleichs-URL. Verwende das Format: {0}",
+ "from_version": "von",
+ "to_version": "bis"
+ },
+ "version_selector_title": "Mit Version vergleichen",
+ "summary": "Zusammenfassung",
+ "deps_count": "{count} Abh.",
+ "dependencies": "Abhängigkeiten",
+ "dev_dependencies": "Dev-Abhängigkeiten",
+ "peer_dependencies": "Peer-Abhängigkeiten",
+ "optional_dependencies": "Optionale Abhängigkeiten",
+ "no_dependency_changes": "Keine Änderungen an Abhängigkeiten",
+ "file_filter_option": {
+ "all": "Gesamt ({count})",
+ "added": "Hinzugefügt ({count})",
+ "removed": "Entfernt ({count})",
+ "modified": "Geändert ({count})"
+ },
+ "search_files_placeholder": "Dateien suchen...",
+ "no_files_all": "Keine Dateien",
+ "no_files_search": "Keine Dateien für „{query}“ gefunden",
+ "no_files_filtered": "Keine {filter} Dateien",
+ "filter": {
+ "added": "hinzugefügten",
+ "removed": "entfernten",
+ "modified": "geänderten"
+ },
+ "files_button": "Dateien",
+ "select_file_prompt": "Wähle eine Datei in der Seitenleiste, um die Änderungen anzuzeigen",
+ "close_files_panel": "Dateibereich schließen",
+ "filter_files_label": "Dateien nach Art der Änderung filtern",
+ "change_ratio": "Änderungsrate",
+ "char_edits": "Zeichen-Edits",
+ "diff_distance": "Diff-Distanz",
+ "loading_diff": "Diff wird geladen...",
+ "loading_diff_error": "Diff konnte nicht geladen werden",
+ "merge_modified_lines": "Geänderte Zeilen zusammenführen",
+ "no_content_changes": "Keine Inhaltsänderungen erkannt",
+ "options": "Optionen",
+ "view_file": "Datei anzeigen",
+ "view_in_code_browser": "Im Code-Browser anzeigen",
+ "word_wrap": "Zeilenumbruch"
+ },
+ "pds": {
+ "title": "npmx.social",
+ "meta_description": "Der offizielle AT-Protokoll Personal Data Server (PDS) für die npmx-Community.",
+ "join": {
+ "title": "Tritt der Community bei",
+ "description": "Egal, ob du dein erstes Konto in der Atmosphere erstellst oder ein bestehendes migrierst, du gehörst hierher. Du kannst dein aktuelles Konto migrieren, ohne deinen Handle, deine Beiträge oder deine Follower zu verlieren.",
+ "migrate": "Migrieren mit PDS MOOver"
+ },
+ "server": {
+ "title": "Server-Details",
+ "location_label": "Standort:",
+ "location_value": "Nürnberg, Deutschland",
+ "infrastructure_label": "Infrastruktur:",
+ "infrastructure_value": "Gehostet bei Hetzner",
+ "privacy_label": "Datenschutz:",
+ "privacy_value": "Unterliegt den strengen EU-Datenschutzgesetzen",
+ "learn_more": "Erfahre, wie npmx die Atmosphere nutzt"
+ },
+ "community": {
+ "title": "Wer hier ist",
+ "description": "Einige der {count} Konten, die npmx.social bereits ihr Zuhause nennen:",
+ "loading": "PDS-Community wird geladen...",
+ "error": "PDS-Community konnte nicht geladen werden.",
+ "empty": "Keine Community-Mitglieder zum Anzeigen.",
+ "view_profile": "Profil von {handle} anzeigen",
+ "new_accounts": "...plus {count} weitere, die neu in der Atmosphere sind"
+ }
+ },
+ "privacy_policy": {
+ "title": "datenschutzerklärung",
+ "last_updated": "Zuletzt aktualisiert: {date}",
+ "welcome": "Willkommen bei {app}. Wir setzen uns für den Schutz deiner Privatsphäre ein. Diese Richtlinie erklärt, welche Daten wir sammeln, wie wir sie verwenden und welche Rechte du in Bezug auf deine Informationen hast.",
+ "cookies": {
+ "what_are": {
+ "title": "Was sind Cookies?",
+ "p1": "Cookies sind kleine Textdateien, die auf deinem Gerät gespeichert werden, wenn du eine Website besuchst. Ihr Zweck ist es, dein Surferlebnis zu verbessern, indem sie bestimmte Präferenzen und Einstellungen speichern."
+ },
+ "types": {
+ "title": "Welche Cookies verwenden wir?",
+ "p1": "Wir verwenden ausschließlich {bold} für Zwecke, die für die Funktionalität der Seite unbedingt erforderlich sind. Wir verwenden keine Cookies von Drittanbietern oder für Werbezwecke.",
+ "bold": "technisch notwendige Cookies",
+ "li1": "{li11}{separator} {li12}",
+ "li2": "{li21}{separator} {li22}",
+ "separator": ":",
+ "cookie_vdpl": "__vdpl",
+ "cookie_vdpl_desc": "Dieser Cookie wird von unserem Hosting-Anbieter (Vercel) für den Skew-Schutz verwendet. Er stellt sicher, dass du Assets der korrekten Deployment-Version lädst, wenn während deines Besuchs ein neues Update veröffentlicht wird. Er dient nicht dem Tracking.",
+ "cookie_h3": "h3",
+ "cookie_h3_desc": "Dies ist unser sicheres Sitzungs-Cookie. Es speichert das OAuth-Access-Token, wenn du dein Atmosphere-Konto verbindest. Es ist unerlässlich, um deine authentifizierte Sitzung aufrechtzuerhalten."
+ },
+ "local_storage": {
+ "title": "Lokaler Speicher",
+ "p1": "Zusätzlich zu Sitzungs-Cookies nutzen wir den {bold} deines Browsers, um deine Anzeige-Präferenzen zu speichern. Dies ermöglicht uns, das Design (Hell/Dunkel) und andere von dir gewählte {settings} zu speichern, damit du sie nicht bei jedem Besuch neu konfigurieren musst.",
+ "bold": "Local Storage",
+ "p2": "Diese Informationen sind rein funktional, werden nur auf deinem Gerät gespeichert und {bold2}. Wir nutzen sie ausschließlich, um deine Erfahrung auf unserer Website zu verbessern.",
+ "bold2": "enthalten keine persönlichen Daten und werden nicht zum Tracking verwendet",
+ "settings": "Einstellungen"
+ },
+ "management": {
+ "title": "Verwalten von Cookies",
+ "p1": "Du kannst deinen Browser so konfigurieren, dass Cookies nach deinen Wünschen akzeptiert, abgelehnt oder gelöscht werden. Bitte beachte jedoch, dass {bold}.",
+ "bold": "das Ablehnen notwendiger Cookies den vollständigen Zugriff auf die Anwendung verhindern kann",
+ "p2": "Nachfolgend findest du Links mit Anleitungen zur Cookie-Verwaltung in den gängigsten Browsern:",
+ "chrome": "Google Chrome (öffnet in einem neuen Fenster)",
+ "firefox": "Mozilla Firefox (öffnet in einem neuen Fenster)",
+ "edge": "Microsoft Edge (öffnet in einem neuen Fenster)"
+ }
+ },
+ "analytics": {
+ "title": "Analyse",
+ "p1": "Wir verwenden {bold}, um zu verstehen, wie Besucher unsere Website nutzen. Dies hilft uns, die Benutzererfahrung zu verbessern und Probleme zu identifizieren.",
+ "bold": "Vercel Web Analytics",
+ "p2": "Vercel Analytics wurde mit Fokus auf Datenschutz entwickelt:",
+ "li1": "Es werden keine Cookies verwendet",
+ "li2": "Es werden keine persönlichen Identifikationsmerkmale gesammelt",
+ "li3": "Nutzer werden nicht über verschiedene Websites hinweg verfolgt",
+ "li4": "Alle Daten werden aggregiert und anonymisiert",
+ "p3": "Die einzigen gesammelten Informationen umfassen: Seiten-URLs, Referrer, Land/Region, Gerätetyp, Browser und Betriebssystem. Diese Daten können nicht zur Identifizierung einzelner Nutzer verwendet werden."
+ },
+ "authenticated": {
+ "title": "Authentifizierte Benutzer",
+ "p1": "Wenn du dein {bold}-Konto mit npmx verbindest, speichern wir deinen OAuth-Access-Token in einem sicheren, HTTP-only Sitzungs-Cookie. Dieser Token wird ausschließlich dazu verwendet, Anfragen in deinem Namen zu authentifizieren.",
+ "bold": "Atmosphere",
+ "p2": "Wir speichern keine Anmeldedaten und greifen auf keine Daten zu, die über das hinausgehen, was für die Bereitstellung der von dir genutzten Funktionen erforderlich ist. Du kannst dein Konto jederzeit auf der Seite {settings} trennen.",
+ "settings": "Einstellungen"
+ },
+ "data_retention": {
+ "title": "Datenspeicherung",
+ "p1": "Sitzungs-Cookies werden automatisch gelöscht, wenn du deinen Browser schließt oder nach einer gewissen Zeit der Inaktivität. Local-Storage-Präferenzen bleiben auf deinem Gerät, bis du deine Browserdaten löschst. Analysedaten werden in aggregierter Form gespeichert und können nicht mit einzelnen Nutzern verknüpft werden."
+ },
+ "your_rights": {
+ "title": "Deine Rechte",
+ "p1": "Du hast das Recht:",
+ "li1": "Informationen darüber zu erhalten, welche Daten wir sammeln",
+ "li2": "Deinen Local Storage und deine Cookies jederzeit zu löschen",
+ "li3": "Deine authentifizierte Sitzung zu beenden",
+ "li4": "Auskunft über unsere Datenpraktiken zu verlangen",
+ "p2": "Da wir keine personenbezogenen Daten sammeln, gibt es in der Regel keine persönlichen Informationen, die gelöscht oder exportiert werden könnten."
+ },
+ "contact": {
+ "title": "Kontakt",
+ "p1": "Bei Fragen oder Bedenken zu dieser Datenschutzerklärung kannst du uns kontaktieren, indem du ein Issue in unserem {link} eröffnest.",
+ "link": "GitHub-Repository"
+ },
+ "changes": {
+ "title": "Änderungen an dieser Richtlinie",
+ "p1": "Wir können diese Datenschutzerklärung von Zeit zu Zeit aktualisieren. Alle Änderungen werden auf dieser Seite mit einem aktualisierten Revisionsdatum veröffentlicht."
+ }
+ },
+ "a11y": {
+ "title": "barrierefreiheit",
+ "footer_title": "a11y",
+ "welcome": "Wir möchten, dass {app} für so viele Menschen wie möglich nutzbar ist.",
+ "approach": {
+ "title": "Unser Ansatz",
+ "p1": "Wir versuchen, den Richtlinien für barrierefreie Webinhalte (WCAG) 2.2 zu folgen und nutzen diese als Referenz beim Erstellen neuer Funktionen. Wir beanspruchen keine vollständige Konformität mit einer bestimmten WCAG-Stufe — Barrierefreiheit ist ein kontinuierlicher Prozess und es gibt immer etwas zu tun.",
+ "p2": "Diese Seite ist ein {about_link}. Verbesserungen der Barrierefreiheit werden schrittweise im Rahmen unserer regulären Entwicklung vorgenommen.",
+ "about_link": "Open-Source-Projekt, das von der Community getragen wird"
+ },
+ "measures": {
+ "title": "Was wir tun",
+ "p1": "Einige der Dinge, die wir auf der gesamten Seite anstreben:",
+ "li1": "Verwendung von semantischem HTML und ARIA-Attributen, wo angemessen.",
+ "li2": "Verwendung relativer Textgrößen, damit du sie im Browser anpassen kannst.",
+ "li3": "Unterstützung der Tastaturnavigation in der gesamten Benutzeroberfläche.",
+ "li4": "Berücksichtigung der Media-Queries prefers-reduced-motion und prefers-color-scheme.",
+ "li5": "Design mit ausreichendem Farbkontrast im Blick.",
+ "li6": "Sicherstellung, dass wesentliche Inhalte ohne JavaScript verfügbar sind, auch wenn einige interaktive Funktionen es erfordern."
+ },
+ "limitations": {
+ "title": "Bekannte Einschränkungen",
+ "p1": "Einige Teile der Website — insbesondere Inhalte von Drittanbietern wie Paket-READMEs — entsprechen möglicherweise nicht den Standards für Barrierefreiheit. Wir arbeiten daran, diese Bereiche mit der Zeit zu verbessern."
+ },
+ "contact": {
+ "title": "Feedback",
+ "p1": "Wenn du bei {app} auf eine Barriere stößt, sag uns bitte Bescheid, indem du ein Ticket in unserem {link} eröffnest. Wir nehmen diese Meldungen ernst und werden unser Bestes tun, um sie zu beheben.",
+ "link": "GitHub-Repository"
+ }
+ },
+ "translation_status": {
+ "title": "übersetzungsstatus",
+ "generated_at": "Erstellungsdatum: {date}",
+ "welcome": "Wenn du uns helfen möchtest, {npmx} in eine der unten aufgeführten Sprachen zu übersetzen, bist du hier genau richtig! Diese automatisch aktualisierte Seite listet alle Inhalte auf, die derzeit deine Hilfe gebrauchen könnten.",
+ "p1": "Wir verwenden {lang} als Standardsprache mit insgesamt {count}. Wenn du beim Übersetzen helfen möchtest, suche die Sprache unter {bylang} und klappe die Details aus.",
+ "p1_lang": "Amerikanisches Englisch (en-US)",
+ "p1_count": "0 Nachrichten | 1 Nachricht | {count} Nachrichten",
+ "p2": "Bevor du beginnst, lies bitte unseren {guide}, um mehr über unseren Übersetzungsprozess zu erfahren und wie du dich beteiligen kannst.",
+ "guide": "Lokalisierungs-Leitfaden (i18n)",
+ "by_locale": "Übersetzungsfortschritt nach Sprache",
+ "by_file": "Übersetzungsfortschritt nach Datei",
+ "complete_text": "Diese Übersetzung ist vollständig, großartige Arbeit!",
+ "missing_text": "fehlt",
+ "missing_keys": "Keine fehlenden Übersetzungen | Fehlende Übersetzung | Fehlende Übersetzungen",
+ "progress_label": "Fortschrittsstatus für {locale}",
+ "table": {
+ "file": "Datei",
+ "status": "Status",
+ "error": "Fehler beim Laden der Dateiliste.",
+ "empty": "Keine Dateien gefunden",
+ "file_link": "Bearbeite {file} ({lang}) auf GitHub"
+ }
+ },
+ "vacations": {
+ "title": "im urlaub",
+ "meta_description": "Das npmx-Team hat neue Energie getankt. Der Discord wurde nach einer Woche wieder geöffnet.",
+ "heading": "auftanken",
+ "subtitle": "wir haben an npmx in einem Tempo gearbeitet, das {some} von uns den Schlaf gekostet hat. wir wollten nicht, dass das zur Norm wird! also haben wir uns eine Woche frei genommen. gemeinsam.",
+ "illustration_alt": "eine einzelne Reihe gemütlicher Icons",
+ "poke_log": "Das Lagerfeuer schüren",
+ "what": {
+ "title": "was passiert ist",
+ "p1": "Discord war {dates} geschlossen.",
+ "dates": "14. – 21. Februar",
+ "p2": "alle Einladungslinks waren weg und die Kanäle gesperrt – außer {garden}, der für Leute offen blieb, die weiterhin Zeit miteinander verbringen wollten.",
+ "garden": "#garden"
+ },
+ "meantime": {
+ "title": "in der Zwischenzeit",
+ "p1": "{site} and {repo} blieben offen – die Leute haben sich trotzdem reingekniet, einige Issues erstellt, ein paar PRs geöffnet, aber hauptsächlich hat jeder Zeit an einem gemütlichen Kamin verbracht.",
+ "repo_link": "das Repo"
+ },
+ "return": {
+ "title": "wir sind zurück!",
+ "p1": "wir sind erholt zurückgekommen und bereit für den Endspurt bis zum 3. März. Folge uns auf {social} für Updates.",
+ "social_link": "Bluesky"
+ },
+ "stats": {
+ "contributors": "Mitwirkende",
+ "commits": "Commits",
+ "pr": "Zusammengeführte PRs",
+ "subtitle": {
+ "some": "einige",
+ "all": "alle"
+ }
+ }
+ },
+ "action_bar": {
+ "title": "Aktionsleiste",
+ "selection": "0 ausgewählt | 1 ausgewählt | {count} ausgewählt",
+ "shortcut": "Drücke „{key}“, um Aktionen zu fokussieren",
+ "button_close_aria_label": "Aktionsleiste schließen"
+ }
+}
diff --git a/i18n/locales/en.json b/i18n/locales/en.json
index f03ed84bf1..0dd3ea035e 100644
--- a/i18n/locales/en.json
+++ b/i18n/locales/en.json
@@ -19,7 +19,8 @@
"social": "social",
"chat": "chat",
"builders_chat": "builders",
- "keyboard_shortcuts": "keyboard shortcuts"
+ "keyboard_shortcuts": "keyboard shortcuts",
+ "brand": "brand"
},
"shortcuts": {
"section": {
@@ -488,6 +489,9 @@
"table_available": "A data table for this chart is available below.",
"table_caption": "Chart data table"
},
+ "chart_view_toggle": "Toggle view",
+ "chart_view_combined": "Combined view",
+ "chart_view_split": "Split view",
"granularity": "Granularity",
"granularity_daily": "Daily",
"granularity_weekly": "Weekly",
@@ -922,11 +926,7 @@
"downloads_month": "Downloads/mo",
"downloads_year": "Downloads/yr",
"published": "Last Published",
- "name": "Name",
- "quality": "Quality",
- "popularity": "Popularity",
- "maintenance": "Maintenance",
- "score": "Score"
+ "name": "Name"
},
"columns": {
"title": "Columns",
@@ -940,10 +940,6 @@
"published": "Last Published",
"maintainers": "Maintainers",
"keywords": "Keywords",
- "quality_score": "Quality score",
- "popularity_score": "Popularity score",
- "maintenance_score": "Maintenance score",
- "combined_score": "Combined score",
"security": "Security",
"selection": "Select package"
},
@@ -1113,6 +1109,7 @@
"empty_description": "Search and add at least 2 packages above to see a side-by-side comparison of their metrics.",
"table_view": "Table",
"charts_view": "Charts",
+ "no_chartable_data": "No chartable data available for the selected facets.",
"bar_chart_nav_hint": "Use ↑ ↓",
"line_chart_nav_hint": "Use ← →"
},
@@ -1135,14 +1132,15 @@
"add_column": "Add no dependency column to comparison"
},
"facets": {
- "group_label": "Comparison facets",
"all": "all",
"none": "none",
+ "select_all_category_facets": "Select all {category} facets",
+ "deselect_all_category_facets": "Deselect all {category} facets",
+ "selected_all_category_facets": "Selected all {category} facets",
+ "deselected_all_category_facets": "Deselected all {category} facets",
"coming_soon": "Coming soon",
"select_all": "Select all facets",
"deselect_all": "Deselect all facets",
- "select_category": "Select all {category} facets",
- "deselect_category": "Deselect all {category} facets",
"binary_only_tooltip": "This package exposes binaries and no exports",
"categories": {
"performance": "Performance",
@@ -1473,5 +1471,55 @@
"selection": "0 selected | 1 selected | {count} selected",
"shortcut": "Press \"{key}\" to focus actions",
"button_close_aria_label": "Close action bar"
+ },
+ "logo_menu": {
+ "copy_svg": "Copy logo as SVG",
+ "copied": "Copied!",
+ "browse_brand": "Browse brand kit"
+ },
+ "brand": {
+ "title": "Brand",
+ "heading": "brand",
+ "meta_description": "npmx brand guidelines, logos, colors, and typography for use in press and media.",
+ "intro": "Resources and guidelines for using the npmx brand in your projects, articles, and media.",
+ "logos": {
+ "title": "logos",
+ "description": "Download npmx logos in SVG and PNG formats. Use the appropriate variant for your background.",
+ "wordmark": "FULL WORDMARK",
+ "wordmark_alt": "npmx full wordmark logo with blue slash on dark background",
+ "wordmark_light_alt": "npmx full wordmark logo with accent slash on light background",
+ "mark": "LOGO MARK",
+ "mark_alt": "npmx logo mark with dot and slash on dark background",
+ "mark_light_alt": "npmx logo mark with dot and slash on light background",
+ "on_dark": "on dark",
+ "on_light": "on light",
+ "download_svg": "SVG",
+ "download_png": "PNG",
+ "download_svg_aria": "Download {name} as SVG",
+ "download_png_aria": "Download {name} as PNG"
+ },
+ "customize": {
+ "title": "customize your logo",
+ "description": "Preview the npmx logo with your accent color and background. The preview reflects your current settings — pick a color, toggle the background, and download.",
+ "accent_label": "accent",
+ "bg_label": "background",
+ "download_svg_aria": "Download customized logo as SVG",
+ "download_png_aria": "Download customized logo as PNG"
+ },
+ "typography": {
+ "title": "typography",
+ "description": "npmx uses the Geist font family by Vercel for both interface text and code.",
+ "sans": "Geist Sans",
+ "sans_desc": "Used for body text and UI elements.",
+ "mono": "Geist Mono",
+ "mono_desc": "Used for code, headings, and technical content.",
+ "pangram": "The quick brown fox jumps over the lazy dog",
+ "numbers": "0123456789"
+ },
+ "guidelines": {
+ "title": "just a note",
+ "message": "Accessibility matters to us, and we would love you to follow us in this vision. When using mentioned media, ensure there is enough contrast against the background, and don't go smaller than 24px. If you need any other resources or additional information about the project, feel free to reach us at {link}.",
+ "discord_link_text": "chat.npmx.dev"
+ }
}
}
diff --git a/i18n/locales/es.json b/i18n/locales/es.json
index c3ab2a0e45..3fe046fe23 100644
--- a/i18n/locales/es.json
+++ b/i18n/locales/es.json
@@ -591,7 +591,8 @@
"b": "{size} B",
"kb": "{size} kB",
"mb": "{size} MB"
- }
+ },
+ "download": {}
},
"connector": {
"modal": {
@@ -870,11 +871,7 @@
"downloads_month": "Descargas/mes",
"downloads_year": "Descargas/año",
"published": "Última publicación",
- "name": "Nombre",
- "quality": "Calidad",
- "popularity": "Popularidad",
- "maintenance": "Mantenimiento",
- "score": "Puntuación"
+ "name": "Nombre"
},
"columns": {
"title": "Columnas",
@@ -888,10 +885,6 @@
"published": "Última publicación",
"maintainers": "Mantenedores",
"keywords": "Palabras clave",
- "quality_score": "Puntuación de calidad",
- "popularity_score": "Puntuación de popularidad",
- "maintenance_score": "Puntuación de mantenimiento",
- "combined_score": "Puntuación combinada",
"security": "Seguridad"
},
"view_mode": {
@@ -1079,14 +1072,11 @@
"add_column": "Añadir columna sin dependencia a la comparación"
},
"facets": {
- "group_label": "Facetas de comparación",
"all": "todas",
"none": "ninguna",
"coming_soon": "Próximamente",
"select_all": "Seleccionar todas las facetas",
"deselect_all": "Deseleccionar todas las facetas",
- "select_category": "Seleccionar todas las facetas de {category}",
- "deselect_category": "Deseleccionar todas las facetas de {category}",
"binary_only_tooltip": "Este paquete expone binarios y no exportaciones",
"categories": {
"performance": "Rendimiento",
@@ -1170,6 +1160,7 @@
"file_size_warning": "{size} excede el límite de 250KB para la comparación",
"compare_versions": "diferencia",
"compare_versions_title": "Comparar con la última versión",
+ "version_invalid_url_format": {},
"version_selector_title": "Comparar con la versión",
"summary": "Resumen",
"deps_count": "{count} dependencias",
@@ -1335,5 +1326,9 @@
"p1": "Si encuentras una barrera de accesibilidad en {app}, por favor háznoslo saber abriendo una incidencia en nuestro {link}. Nos tomamos estos informes muy en serio y haremos todo lo posible para abordarlos.",
"link": "repositorio de GitHub"
}
- }
+ },
+ "translation_status": {
+ "table": {}
+ },
+ "action_bar": {}
}
diff --git a/i18n/locales/fr-FR.json b/i18n/locales/fr-FR.json
index fa1bfe86e2..9bf5bb4b26 100644
--- a/i18n/locales/fr-FR.json
+++ b/i18n/locales/fr-FR.json
@@ -36,7 +36,9 @@
"go_to_result": "Ouvrir le résultat",
"open_code_view": "Ouvrir la vue code",
"open_docs": "Ouvrir la doc",
- "disable_shortcuts": "Vous pouvez désactiver les raccourcis clavier dans {settings}."
+ "disable_shortcuts": "Vous pouvez désactiver les raccourcis clavier dans {settings}.",
+ "open_main": "Ouvrir les informations principales",
+ "open_diff": "Ouvrir les différences de version"
},
"search": {
"label": "Rechercher des paquets npm",
@@ -94,6 +96,7 @@
},
"draft_badge": "Brouillon",
"draft_banner": "Ceci est un brouillon non publié. Il peut être incomplet ou contenir des inexactitudes.",
+ "no_posts": "Aucun article trouvé.",
"atproto": {
"view_on_bluesky": "Voir sur Bluesky",
"reply_on_bluesky": "Répondre sur Bluesky",
@@ -136,12 +139,15 @@
"include_types_description": "Inclure les paquets {'@'}types à la commande d'installation pour les paquets non typés",
"hide_platform_packages": "Masquer les paquets spécifiques à la plateforme dans la recherche",
"hide_platform_packages_description": "Masquer les paquets binaires natifs comme {'@'}esbuild/linux-x64 des résultats",
+ "enable_graph_pulse_loop": "Activer la boucle de l'effet de pulsation sur le mini-graphe",
+ "enable_graph_pulse_loop_description": "Activer une animation de pulsation continue sur le graphique des téléchargements hebdomadaires. Cette animation peut être gênante pour certaines personnes.",
"theme": "Thème",
"theme_light": "Clair",
"theme_dark": "Sombre",
"theme_system": "Système",
"language": "Langue de l'interface",
"help_translate": "Aidez-nous à traduire npmx",
+ "translation_status": "Consulter l'état global des traductions",
"accent_colors": {
"label": "Couleurs d'accentuation",
"sky": "Ciel",
@@ -207,8 +213,20 @@
"error": "Erreur",
"view_on": {
"npm": "voir sur npm",
- "github": "Voir sur GitHub"
- }
+ "github": "Voir sur GitHub",
+ "gitlab": "Voir sur GitLab",
+ "bitbucket": "Voir sur Bitbucket",
+ "codeberg": "Voir sur Codeberg",
+ "git_repo": "Voir le dépôt Git",
+ "forgejo": "Voir sur Forgejo",
+ "gitea": "Voir sur Gitea",
+ "gitee": "Voir sur Gitee",
+ "radicle": "Voir sur Radicle",
+ "sourcehut": "Voir sur SourceHut",
+ "tangled": "Voir sur Tangled"
+ },
+ "collapse": "Réduire",
+ "expand": "Développer"
},
"profile": {
"display_name": "Nom d'affichage",
@@ -290,6 +308,7 @@
"view_source": "Voir la source"
},
"links": {
+ "main": "principal",
"repo": "dépôt",
"homepage": "site web",
"issues": "issues",
@@ -373,7 +392,9 @@
"published": "Publié",
"weekly_downloads": "Téléchargements hebdomadaires",
"keywords": "Mots-clés",
- "license": "Licence"
+ "license": "Licence",
+ "select": "Sélectionner le paquet",
+ "select_maximum": "Vous pouvez sélectionner jusqu'à {count} paquets"
},
"versions": {
"title": "Versions",
@@ -388,6 +409,7 @@
"all_covered": "Toutes les versions sont couvertes par les tags ci-dessus",
"deprecated_title": "{version} (dépréciée)",
"view_all": "Voir la version | Voir les {count} versions",
+ "view_all_versions": "Voir toutes les versions",
"distribution_title": "Groupe Semver",
"distribution_modal_title": "Versions",
"distribution_range_date_same_year": "de {from} à {to} {endYear}",
@@ -395,10 +417,13 @@
"grouping_major": "Majeure",
"grouping_minor": "Mineure",
"grouping_versions_title": "Versions",
+ "grouping_versions_about": "À propos du regroupement des versions",
"grouping_versions_all": "Toutes",
"grouping_versions_only_recent": "Récentes seulement",
"grouping_usage_title": "Utilisation",
+ "grouping_usage_about": "À propos du regroupement par utilisation",
"grouping_usage_all": "Toutes",
+ "grouping_usage_most_used": "Les plus utilisées",
"recent_versions_only_tooltip": "Ne montrer que les versions publiées durant l'année écoulée.",
"show_low_usage_tooltip": "Inclure les groupes de versions avec moins d'1% des téléchargements totaux.",
"y_axis_label": "Téléchargements",
@@ -408,6 +433,11 @@
"filter_tooltip": "Filtrer les versions avec une {link}. Par exemple, ^3.0.0 affiche toutes les versions 3.x.",
"filter_tooltip_link": "plage semver",
"no_matches": "Aucune version ne correspond à cette plage",
+ "page_title": "Historique des versions",
+ "current_tags": "Tags actuels",
+ "version_filter_placeholder": "Filtrer les versions...",
+ "version_filter_label": "Filtrer les versions",
+ "no_match_filter": "Aucune version ne correspond à {filter}",
"copy_alt": {
"per_version_analysis": "La version {version} a été téléchargée {downloads} fois",
"general_description": "Graphique en barres montrant les téléchargements par version pour {versions_count} versions {semver_grouping_mode} du paquet {package_name}, {date_range_label} de la version {first_version} à la version {last_version}. La version la plus téléchargée est {max_downloaded_version} avec {max_version_downloads} téléchargements. {per_version_analysis}. {watermark}."
@@ -422,7 +452,8 @@
"outdated_major": "{count} version majeure en retard (dernière : {latest}) | {count} versions majeures en retard (dernière : {latest})",
"outdated_minor": "{count} version mineure en retard (dernière : {latest}) | {count} versions mineures en retard (dernière : {latest})",
"outdated_patch": "Mise à jour patch disponible (dernière : {latest})",
- "has_replacement": "Cette dépendance a des remplacements suggérés"
+ "has_replacement": "Cette dépendance a des remplacements suggérés",
+ "vulnerabilities_count": "{count} vulnérabilité | {count} vulnérabilités"
},
"peer_dependencies": {
"title": "Dépendances peer ({count})",
@@ -455,6 +486,9 @@
"table_available": "Un tableau de données pour ce graphique est disponible ci-dessous.",
"table_caption": "Tableau de données du graphique"
},
+ "chart_view_toggle": "Changer de vue",
+ "chart_view_combined": "Vue groupée",
+ "chart_view_split": "Vue séparée",
"granularity": "Granularité",
"granularity_daily": "Par Jour",
"granularity_weekly": "Par Semaine",
@@ -484,6 +518,7 @@
"data_correction": "Correction des données",
"average_window": "Plage de moyenne",
"smoothing": "Lissage",
+ "prediction": "Prédiction",
"known_anomalies": "Anomalies connues",
"known_anomalies_description": "Interpole les pics de téléchargements connus causés par des bots ou des problèmes de CI.",
"known_anomalies_ranges": "Plages d'anomalies",
@@ -529,6 +564,7 @@
"esm": "ES Modules supportés",
"cjs": "CommonJS supporté",
"no_esm": "Pas de support des ES Modules",
+ "wasm": "Dispose de WebAssembly",
"types_label": "Types",
"types_included": "Types inclus",
"types_available": "Types disponibles via {package}",
@@ -602,6 +638,10 @@
"b": "{size} o",
"kb": "{size} ko",
"mb": "{size} Mo"
+ },
+ "download": {
+ "button": "Télécharger",
+ "tarball": "Télécharger le tarball au format .tar.gz"
}
},
"connector": {
@@ -806,7 +846,9 @@
"preview": "aperçu",
"code": "code"
},
- "file_path": "Chemin du fichier"
+ "file_path": "Chemin du fichier",
+ "binary_file": "Fichier binaire",
+ "binary_rendering_warning": "Le type de fichier \"{contentType}\" n'est pas pris en charge pour l'aperçu."
},
"badges": {
"provenance": {
@@ -868,6 +910,8 @@
"secure": "Sans avertissements",
"insecure": "Avec avertissements"
},
+ "view_selected": "Voir la sélection",
+ "clear_selected_label": "Effacer la sélection",
"sort": {
"label": "Trier les paquets",
"toggle_direction": "Inverser l'ordre",
@@ -879,11 +923,7 @@
"downloads_month": "Téléch./mois",
"downloads_year": "Téléch./an",
"published": "Dern. publication",
- "name": "Nom",
- "quality": "Qualité",
- "popularity": "Popularité",
- "maintenance": "Maintenance",
- "score": "Score"
+ "name": "Nom"
},
"columns": {
"title": "Colonnes",
@@ -897,11 +937,8 @@
"published": "Dern. publication",
"maintainers": "Mainteneurs",
"keywords": "Mots-clés",
- "quality_score": "Score de qualité",
- "popularity_score": "Score de popularité",
- "maintenance_score": "Score de maintenance",
- "combined_score": "Score combiné",
- "security": "Sécurité"
+ "security": "Sécurité",
+ "selection": "Sélectionner le paquet"
},
"view_mode": {
"label": "Mode d'affichage",
@@ -1048,7 +1085,8 @@
"error": "Échec du chargement des organisations",
"empty": "Aucune organisation trouvée",
"view_all": "Tout voir"
- }
+ },
+ "pr": "Ouvrir la pull request GitHub #{prNumber}"
},
"compare": {
"packages": {
@@ -1090,14 +1128,11 @@
"add_column": "Ajouter la colonne sans dépendance à la comparaison"
},
"facets": {
- "group_label": "Facettes de comparaison",
"all": "tout",
"none": "aucun",
"coming_soon": "Bientôt disponible",
"select_all": "Sélectionner toutes les facettes",
"deselect_all": "Désélectionner toutes les facettes",
- "select_category": "Sélectionner toutes les facettes {category}",
- "deselect_category": "Désélectionner toutes les facettes {category}",
"binary_only_tooltip": "Ce paquet expose des binaires et aucun export",
"categories": {
"performance": "Performance",
@@ -1181,6 +1216,15 @@
"file_size_warning": "{size} dépasse la limite de 250 Ko pour la comparaison",
"compare_versions": "diff",
"compare_versions_title": "Comparer avec la dernière version",
+ "comparing_versions_label": "Comparaison des versions...",
+ "version_back_to_package": "Retour au paquet",
+ "version_error_message": "Échec de la comparaison des versions.",
+ "version_invalid_url_format": {
+ "hint": "URL de comparaison invalide. Utilisez le format : {0}",
+ "from_version": "de",
+ "to_version": "à"
+ },
+ "version_selector_title": "Comparer avec la version",
"summary": "Résumé",
"deps_count": "{count} dépendances",
"dependencies": "Dépendances",
@@ -1206,7 +1250,18 @@
"files_button": "Fichiers",
"select_file_prompt": "Sélectionnez un fichier dans la barre latérale pour voir son diff",
"close_files_panel": "Fermer le panneau de fichiers",
- "filter_files_label": "Filtrer les fichiers par type de modification"
+ "filter_files_label": "Filtrer les fichiers par type de modification",
+ "change_ratio": "Ratio de changement",
+ "char_edits": "Modifications de caractères",
+ "diff_distance": "Distance de diff",
+ "loading_diff": "Chargement du diff...",
+ "loading_diff_error": "Échec du chargement du diff",
+ "merge_modified_lines": "Fusionner les lignes modifiées",
+ "no_content_changes": "Aucun changement de contenu détecté",
+ "options": "Options",
+ "view_file": "Voir le fichier",
+ "view_in_code_browser": "Voir dans le navigateur de code",
+ "word_wrap": "Retour à la ligne"
},
"pds": {
"title": "npmx.social",
@@ -1345,5 +1400,34 @@
"p1": "Si vous rencontrez un problème d'accessibilité sur {app}, veuillez nous le faire savoir en ouvrant une issue sur notre {link}. Nous prenons ces rapports au sérieux et ferons de notre mieux pour les régler.",
"link": "dépôt GitHub"
}
+ },
+ "translation_status": {
+ "title": "état des traductions",
+ "generated_at": "Date de génération : {date}",
+ "welcome": "Si vous souhaitez nous aider à traduire {npmx} dans l'une des langues listées ci-dessous, vous êtes au bon endroit ! Cette page mise à jour automatiquement recense toujours tout le contenu qui a besoin de votre aide en ce moment.",
+ "p1": "Nous utilisons {lang} comme langue par défaut, avec un total de {count}. Si vous souhaitez aider à ajouter des traductions, trouvez la langue dans {bylang} et développez les détails.",
+ "p1_lang": "anglais américain (en-US)",
+ "p1_count": "0 message | 1 message | {count} messages",
+ "p2": "Avant de commencer, veuillez lire notre {guide} pour en savoir plus sur notre processus de traduction et sur la façon de contribuer.",
+ "guide": "guide de localisation (i18n)",
+ "by_locale": "Progression des traductions par langue",
+ "by_file": "Progression des traductions par fichier",
+ "complete_text": "Cette traduction est complète, bravo !",
+ "missing_text": "manquantes",
+ "missing_keys": "Aucune traduction manquante | Traduction manquante | Traductions manquantes",
+ "progress_label": "État d'avancement pour {locale}",
+ "table": {
+ "file": "Fichier",
+ "status": "Statut",
+ "error": "Erreur lors du chargement de la liste des fichiers.",
+ "empty": "Aucun fichier trouvé",
+ "file_link": "Modifier {file} ({lang}) sur GitHub"
+ }
+ },
+ "action_bar": {
+ "title": "barre d'actions",
+ "selection": "0 sélectionné | 1 sélectionné | {count} sélectionnés",
+ "shortcut": "Appuyez sur « {key} » pour cibler les actions",
+ "button_close_aria_label": "Fermer la barre d'actions"
}
}
diff --git a/i18n/locales/hi-IN.json b/i18n/locales/hi-IN.json
index 63f832c7fc..56873fa206 100644
--- a/i18n/locales/hi-IN.json
+++ b/i18n/locales/hi-IN.json
@@ -16,10 +16,29 @@
"docs": "दस्तावेज़",
"source": "स्रोत",
"social": "सोशल",
- "chat": "चैट"
+ "chat": "चैट",
+ "blog": "ब्लॉग",
+ "builders_chat": "बिल्डर्स",
+ "keyboard_shortcuts": "कीबोर्ड शॉर्टकट"
},
"shortcuts": {
- "section": {}
+ "section": {
+ "global": "वैश्विक",
+ "search": "खोज",
+ "package": "पैकेज"
+ },
+ "focus_search": "खोज पर फ़ोकस करें",
+ "show_kbd_hints": "कीबोर्ड संकेत हाइलाइट करें",
+ "settings": "सेटिंग्स खोलें",
+ "compare": "तुलना खोलें",
+ "compare_from_package": "तुलना खोलें (वर्तमान पैकेज के साथ पहले से भरा हुआ)",
+ "navigate_results": "परिणामों में नेविगेट करें",
+ "go_to_result": "परिणाम पर जाएं",
+ "open_code_view": "कोड दृश्य खोलें",
+ "open_docs": "दस्तावेज़ खोलें",
+ "disable_shortcuts": "आप {settings} में कीबोर्ड शॉर्टकट बंद कर सकते हैं।",
+ "open_main": "मुख्य जानकारी खोलें",
+ "open_diff": "संस्करण अंतर खोलें"
},
"search": {
"label": "npm पैकेज खोजें",
@@ -40,7 +59,21 @@
"org": "संगठन",
"view_user_packages": "इस उपभोक्ता के पैकेज देखें",
"view_org_packages": "इस संगठन के पैकेज देखें"
- }
+ },
+ "found_packages_sorted": "कोई परिणाम नहीं मिला | शीर्ष {count} परिणाम क्रमबद्ध किया जा रहा है | शीर्ष {count} परिणाम क्रमबद्ध किए जा रहे हैं",
+ "rate_limited": "npm की rate limit लग गई है, कुछ देर बाद फिर प्रयास करें",
+ "title": "खोज",
+ "title_search": "खोज: {search}",
+ "title_packages": "पैकेज खोजें",
+ "meta_description": "'{search}' के लिए खोज परिणाम",
+ "meta_description_packages": "npm पैकेज खोजें",
+ "algolia_disclaimer": "Algolia द्वारा संचालित",
+ "instant_search": "तुरंत खोज",
+ "instant_search_on": "चालू",
+ "instant_search_off": "बंद",
+ "instant_search_turn_on": "चालू करें",
+ "instant_search_turn_off": "बंद करें",
+ "instant_search_advisory": "{label} {state} — {action}"
},
"nav": {
"main_navigation": "मुख्य",
@@ -54,6 +87,32 @@
"links": "लिंक",
"tap_to_search": "खोजने के लिए टैप करें"
},
+ "blog": {
+ "author": {
+ "view_profile": "Bluesky पर {name} की प्रोफ़ाइल देखें"
+ },
+ "atproto": {
+ "view_on_bluesky": "Bluesky पर देखें",
+ "reply_on_bluesky": "Bluesky पर जवाब दें",
+ "likes_on_bluesky": "Bluesky पर लाइक्स",
+ "like_or_reply_on_bluesky": "इस पोस्ट को लाइक करें या Bluesky पर अपनी टिप्पणी जोड़ें",
+ "no_comments_yet": "अभी तक कोई टिप्पणी नहीं।",
+ "could_not_load_comments": "टिप्पणियाँ लोड नहीं हो सकीं।",
+ "comments": "टिप्पणियाँ",
+ "loading_comments": "टिप्पणियाँ लोड हो रही हैं...",
+ "updating": "अपडेट हो रहा है...",
+ "reply_count": "{count} जवाब | {count} जवाब",
+ "like_count": "{count} लाइक | {count} लाइक्स",
+ "repost_count": "{count} रिपोस्ट | {count} रिपोस्ट",
+ "more_replies": "{count} और जवाब... | {count} और जवाब..."
+ },
+ "title": "ब्लॉग",
+ "heading": "ब्लॉग",
+ "meta_description": "npmx समुदाय से अंतर्दृष्टि और अपडेट",
+ "draft_badge": "मसौदा",
+ "draft_banner": "यह एक अप्रकाशित मसौदा है। यह अधूरा हो सकता है या इसमें अशुद्धियाँ हो सकती हैं।",
+ "no_posts": "कोई पोस्ट नहीं मिली।"
+ },
"settings": {
"title": "सेटिंग्स",
"tagline": "अपने npmx अनुभव को अनुकूलित करें",
@@ -61,9 +120,18 @@
"sections": {
"appearance": "स्वरूप",
"display": "प्रदर्शन",
- "language": "भाषा"
+ "language": "भाषा",
+ "search": "खोज सुविधाएँ",
+ "keyboard_shortcuts": "कीबोर्ड शॉर्टकट"
+ },
+ "data_source": {
+ "label": "डेटा स्रोत",
+ "description": "चुनें कि npmx खोज डेटा कहाँ से प्राप्त करता है। व्यक्तिगत पैकेज पेज हमेशा सीधे npm रजिस्ट्री का उपयोग करते हैं।",
+ "npm": "npm Registry",
+ "npm_description": "आधिकारिक npm रजिस्ट्री से खोज, org और user सूचियाँ सीधे प्राप्त करता है। प्रामाणिक, लेकिन धीमा हो सकता है।",
+ "algolia": "Algolia",
+ "algolia_description": "तेज़ खोज, org और user पेजों के लिए Algolia का उपयोग करता है।"
},
- "data_source": {},
"relative_dates": "सापेक्ष तिथियाँ",
"include_types": "इंस्टॉल में {'@'}types शामिल करें",
"include_types_description": "अनटाइप्ड पैकेज के लिए इंस्टॉल कमांड में {'@'}types पैकेज जोड़ें",
@@ -76,19 +144,47 @@
"language": "भाषा",
"help_translate": "npmx का अनुवाद करने में मदद करें",
"accent_colors": {
- "label": "एक्सेंट रंग"
+ "label": "एक्सेंट रंग",
+ "sky": "आसमानी",
+ "coral": "कोरल",
+ "amber": "अंबर",
+ "emerald": "एमराल्ड",
+ "violet": "वायलेट",
+ "magenta": "मैजेंटा"
},
"clear_accent": "एक्सेंट रंग साफ़ करें",
- "translation_progress": "अनुवाद प्रगति"
+ "translation_progress": "अनुवाद प्रगति",
+ "background_themes": {
+ "label": "पृष्ठभूमि शेड",
+ "neutral": "न्यूट्रल",
+ "stone": "स्टोन",
+ "zinc": "जिंक",
+ "slate": "स्लेट",
+ "black": "काला"
+ },
+ "instant_search": "तुरंत खोज",
+ "instant_search_description": "खोज पेज पर ले जाता है और आपके टाइप करते ही परिणाम अपडेट करता है।",
+ "enable_graph_pulse_loop": "मिनी ग्राफ़ पर pulse प्रभाव का लूपिंग सक्षम करें",
+ "enable_graph_pulse_loop_description": "साप्ताहिक डाउनलोड ग्राफ़ पर लगातार pulse animation सक्रिय करें। यह animation कुछ उपयोगकर्ताओं के लिए विचलित करने वाला हो सकता है।",
+ "translation_status": "वैश्विक अनुवाद स्थिति देखें",
+ "keyboard_shortcuts_enabled": "कीबोर्ड शॉर्टकट सक्षम करें",
+ "keyboard_shortcuts_enabled_description": "यदि कीबोर्ड शॉर्टकट अन्य ब्राउज़र या सिस्टम शॉर्टकट से टकराते हैं, तो उन्हें बंद किया जा सकता है"
},
"i18n": {
"missing_keys": "{count} अनुवाद गायब है | {count} अनुवाद गायब हैं",
- "copy_keys": "कुंजियाँ अनुकरण करें",
+ "copy_keys": "कुंजियाँ कॉपी करें",
"show_more_keys": "{count} और दिखाएं...",
"contribute_hint": "गायब कुंजियों को जोड़कर इस अनुवाद को बेहतर बनाने में मदद करें।",
"edit_on_github": "GitHub पर संपादित करें",
"view_guide": "अनुवाद गाइड"
},
+ "error": {
+ "401": "अनधिकृत",
+ "404": "पृष्ठ नहीं मिला",
+ "500": "आंतरिक सर्वर त्रुटि",
+ "503": "सेवा उपलब्ध नहीं है",
+ "default": "कुछ गलत हो गया"
+ },
"common": {
"loading": "लोड हो रहा है...",
"loading_more": "और लोड हो रहा है...",
@@ -97,8 +193,8 @@
"try_again": "पुनः प्रयास करें",
"close": "बंद करें",
"retry": "पुनः प्रयास",
- "copy": "अनुकरण करें",
- "copied": "अनुकरण हो गया!",
+ "copy": "कॉपी करें",
+ "copied": "कॉपी हो गया!",
"skip_link": "मुख्य सामग्री पर जाएं",
"warnings": "चेतावनियाँ:",
"go_back_home": "होम पर वापस जाएं",
@@ -112,8 +208,42 @@
"scroll_to_top": "शीर्ष पर स्क्रॉल करें",
"view_on": {
"npm": "npm पर देखें",
- "github": "GitHub पर देखें"
- }
+ "github": "GitHub पर देखें",
+ "gitlab": "GitLab पर देखें",
+ "bitbucket": "Bitbucket पर देखें",
+ "codeberg": "Codeberg पर देखें",
+ "git_repo": "Git रिपॉजिटरी पर देखें",
+ "forgejo": "Forgejo पर देखें",
+ "gitea": "Gitea पर देखें",
+ "gitee": "Gitee पर देखें",
+ "radicle": "Radicle पर देखें",
+ "sourcehut": "SourceHut पर देखें",
+ "tangled": "Tangled पर देखें"
+ },
+ "or": "या",
+ "cancel": "रद्द करें",
+ "save": "सहेजें",
+ "edit": "संपादित करें",
+ "error": "त्रुटि",
+ "collapse": "संक्षिप्त करें",
+ "expand": "विस्तृत करें"
+ },
+ "profile": {
+ "invite": {
+ "message": "ऐसा नहीं लगता कि वे अभी npmx का उपयोग कर रहे हैं। क्या आप उन्हें इसके बारे में बताना चाहते हैं?",
+ "share_button": "Bluesky पर साझा करें",
+ "compose_text": "Hey {'@'}{handle}! Have you checked out npmx.dev yet? It's a browser for the npm registry that's fast, modern, and open-source.\nhttps://npmx.dev"
+ },
+ "display_name": "प्रदर्शित नाम",
+ "description": "विवरण",
+ "no_description": "कोई विवरण नहीं",
+ "website": "वेबसाइट",
+ "website_placeholder": "https://example.com",
+ "likes": "लाइक्स",
+ "seo_title": "{handle} - npmx",
+ "seo_description": "{handle} द्वारा npmx प्रोफ़ाइल",
+ "not_found": "प्रोफ़ाइल नहीं मिली",
+ "not_found_message": "{handle} की प्रोफ़ाइल नहीं मिल सकी।"
},
"package": {
"not_found": "पैकेज नहीं मिला",
@@ -121,12 +251,19 @@
"no_description": "कोई विवरण प्रदान नहीं किया गया",
"verified_provenance": "सत्यापित प्रोवेनेंस",
"navigation": "पैकेज",
- "copy_name": "पैकेज नाम अनुकरण करें",
+ "copy_name": "पैकेज नाम कॉपी करें",
"deprecation": {
"package": "यह पैकेज डेप्रीकेट कर दिया गया है।",
"version": "यह संस्करण डेप्रीकेट कर दिया गया है।",
"no_reason": "कोई कारण प्रदान नहीं किया गया"
},
+ "size_increase": {
+ "title_size": "v{version} के बाद से आकार में महत्वपूर्ण वृद्धि",
+ "title_deps": "v{version} के बाद से निर्भरता संख्या में महत्वपूर्ण वृद्धि",
+ "title_both": "v{version} के बाद से आकार और निर्भरता दोनों में महत्वपूर्ण वृद्धि",
+ "size": "इंस्टॉल आकार {percent} बढ़ा ({size} अधिक)",
+ "deps": "{count} और निर्भरताएँ"
+ },
"replacement": {
"title": "आपको इस निर्भरता की आवश्यकता नहीं हो सकती।",
"native": "इसे {replacement} से बदला जा सकता है, जो Node {nodeVersion} से उपलब्ध है।",
@@ -135,7 +272,9 @@
"none": "यह पैकेज अब आवश्यक नहीं होने के रूप में फ़्लैग किया गया है, और इसकी कार्यक्षमता सभी इंजनों में नेटिवली उपलब्ध होने की संभावना है।",
"learn_more": "और जानें",
"mdn": "MDN",
- "community": "समुदाय"
+ "community": "समुदाय",
+ "learn_more_above": "ऊपर और जानें।",
+ "consider_no_dep": "+ बिना निर्भरता पर विचार करें?"
},
"stats": {
"license": "अनुज्ञप्ति",
@@ -147,7 +286,9 @@
"size_tooltip": {
"unpacked": "{size} अनपैक्ड साइज़ (यह पैकेज)",
"total": "{size} कुल अनपैक्ड साइज़ (linux-x64 के लिए सभी {count} निर्भरता सहित)"
- }
+ },
+ "published": "प्रकाशित",
+ "published_tooltip": "{package}{'@'}{version} के प्रकाशित होने की तिथि"
},
"skills": {
"title": "एजेंट स्किल्स",
@@ -164,7 +305,8 @@
"refs": "{count} रेफ | {count} रेफ्स",
"assets": "{count} एसेट | {count} एसेट्स"
},
- "view_source": "स्रोत देखें"
+ "view_source": "स्रोत देखें",
+ "skills_cli": "skills CLI"
},
"links": {
"repo": "रिपो",
@@ -174,22 +316,37 @@
"code": "कोड",
"docs": "दस्तावेज़",
"fund": "दान करें",
- "compare": "तुलना करें"
+ "compare": "तुलना करें",
+ "main": "मुख्य",
+ "compare_this_package": "इस पैकेज की तुलना करें"
+ },
+ "likes": {
+ "like": "इस पैकेज को लाइक करें",
+ "unlike": "इस पैकेज को अनलाइक करें"
},
- "likes": {},
"docs": {
"not_available": "दस्तावेज़ उपलब्ध नहीं",
- "not_available_detail": "हम इस संस्करण के लिए दस्तावेज़ जेनरेट नहीं कर सके।"
+ "not_available_detail": "हम इस संस्करण के लिए दस्तावेज़ जेनरेट नहीं कर सके।",
+ "contents": "सामग्री",
+ "default_not_available": "इस संस्करण के लिए दस्तावेज़ उपलब्ध नहीं हैं।",
+ "page_title": "API Docs - npmx",
+ "page_title_name": "{name} docs - npmx",
+ "page_title_version": "{name} docs - npmx",
+ "og_title": "{name} - Docs",
+ "view_package": "पैकेज देखें"
},
"get_started": {
"title": "शुरू करें",
"pm_label": "पैकेज मैनेजर",
- "copy_command": "इंस्टॉल कमांड अनुकरण करें",
- "view_types": "{package} देखें"
+ "copy_command": "इंस्टॉल कमांड कॉपी करें",
+ "view_types": "{package} देखें",
+ "copy_dev_command": "dev इंस्टॉल कमांड कॉपी करें",
+ "dev_dependency_hint": "आमतौर पर dev dependency के रूप में इंस्टॉल किया जाता है"
},
"create": {
"title": "नया प्रोजेक्ट बनाएं",
- "copy_command": "क्रिएट कमांड अनुकरण करें"
+ "copy_command": "क्रिएट कमांड कॉपी करें",
+ "view": "{packageName} का maintainer वही है। अधिक जानकारी के लिए क्लिक करें।"
},
"run": {
"title": "चलाएं",
@@ -198,17 +355,47 @@
"readme": {
"title": "रीडमी",
"no_readme": "कोई README उपलब्ध नहीं है।",
- "callout": {}
+ "callout": {
+ "note": "नोट",
+ "tip": "सुझाव",
+ "important": "महत्वपूर्ण",
+ "warning": "चेतावनी",
+ "caution": "सावधानी"
+ },
+ "toc_title": "रूपरेखा",
+ "copy_as_markdown": "README को Markdown के रूप में कॉपी करें"
+ },
+ "provenance_section": {
+ "title": "प्रोवेनेंस",
+ "built_and_signed_on": "{provider} पर बनाया और हस्ताक्षरित किया गया",
+ "view_build_summary": "बिल्ड सारांश देखें",
+ "source_commit": "स्रोत कमिट",
+ "build_file": "बिल्ड फ़ाइल",
+ "public_ledger": "सार्वजनिक लेजर",
+ "transparency_log_entry": "पारदर्शिता लॉग प्रविष्टि",
+ "view_more_details": "और विवरण देखें",
+ "error_loading": "प्रोवेनेंस विवरण लोड नहीं हो सके"
+ },
+ "security_downgrade": {
+ "title": "विश्वास में कमी",
+ "description_to_none_provenance": "यह संस्करण {provenance} के बिना प्रकाशित किया गया था।",
+ "description_to_none_trustedPublisher": "यह संस्करण {trustedPublishing} के बिना प्रकाशित किया गया था।",
+ "description_to_provenance_trustedPublisher": "यह संस्करण {provenance} का उपयोग करता है लेकिन {trustedPublishing} का नहीं।",
+ "fallback_install_provenance": "इंस्टॉल कमांड्स {version} पर pin किए गए हैं, जो provenance वाला अंतिम संस्करण है।",
+ "fallback_install_trustedPublisher": "इंस्टॉल कमांड्स {version} पर pin किए गए हैं, जो trusted publishing वाला अंतिम संस्करण है।",
+ "provenance_link_text": "provenance",
+ "trusted_publishing_link_text": "trusted publishing"
},
- "provenance_section": {},
- "security_downgrade": {},
"keywords_title": "कीवर्ड्स",
"compatibility": "संगतता",
"card": {
"publisher": "प्रकाशक",
"weekly_downloads": "साप्ताहिक डाउनलोड्स",
"keywords": "कीवर्ड्स",
- "license": "अनुज्ञप्ति"
+ "license": "अनुज्ञप्ति",
+ "published": "प्रकाशित",
+ "select": "पैकेज चुनें",
+ "select_maximum": "अधिकतम {count} पैकेज चुने जा सकते हैं"
},
"versions": {
"title": "संस्करण",
@@ -222,7 +409,40 @@
"more_tagged": "{count} और टैग किए गए",
"all_covered": "सभी संस्करण ऊपर के टैग्स द्वारा कवर किए गए हैं",
"deprecated_title": "{version} (डेप्रीकेटेड)",
- "view_all": "{count} संस्करण देखें | सभी {count} संस्करण देखें"
+ "view_all": "{count} संस्करण देखें | सभी {count} संस्करण देखें",
+ "copy_alt": {
+ "per_version_analysis": "{version} संस्करण {downloads} बार डाउनलोड किया गया था",
+ "general_description": "बार चार्ट {package_name} पैकेज के {versions_count} {semver_grouping_mode} संस्करणों के प्रति-संस्करण डाउनलोड दिखाता है, {date_range_label} {first_version} संस्करण से {last_version} संस्करण तक। सबसे अधिक डाउनलोड किया गया संस्करण {max_downloaded_version} है, जिसके {max_version_downloads} डाउनलोड हैं। {per_version_analysis}. {watermark}."
+ },
+ "view_all_versions": "सभी संस्करण देखें",
+ "distribution_title": "Semver समूह",
+ "distribution_modal_title": "संस्करण",
+ "distribution_range_date_same_year": "{from} से {to}, {endYear} तक",
+ "distribution_range_date_multiple_years": "{from}, {startYear} से {to}, {endYear} तक",
+ "grouping_major": "मेजर",
+ "grouping_minor": "माइनर",
+ "grouping_versions_title": "संस्करण",
+ "grouping_versions_about": "संस्करण समूहिंग के बारे में",
+ "grouping_versions_all": "सभी",
+ "grouping_versions_only_recent": "केवल हाल के",
+ "grouping_usage_title": "उपयोग",
+ "grouping_usage_about": "उपयोग समूहिंग के बारे में",
+ "grouping_usage_all": "सभी",
+ "grouping_usage_most_used": "सबसे अधिक उपयोग किए गए",
+ "recent_versions_only_tooltip": "केवल पिछले एक वर्ष में प्रकाशित संस्करण दिखाएँ।",
+ "show_low_usage_tooltip": "कुल डाउनलोड के 1% से कम वाले संस्करण समूह शामिल करें।",
+ "y_axis_label": "डाउनलोड्स",
+ "filter_placeholder": "semver से फ़िल्टर करें (उदा. ^3.0.0)",
+ "filter_invalid": "अमान्य semver range",
+ "filter_help": "Semver range फ़िल्टर सहायता",
+ "filter_tooltip": "{link} का उपयोग करके संस्करण फ़िल्टर करें। उदाहरण के लिए, ^3.0.0 सभी 3.x संस्करण दिखाता है।",
+ "filter_tooltip_link": "semver range",
+ "no_matches": "इस range से कोई संस्करण मेल नहीं खाता",
+ "page_title": "संस्करण इतिहास",
+ "current_tags": "वर्तमान टैग्स",
+ "version_filter_placeholder": "संस्करण फ़िल्टर करें…",
+ "version_filter_label": "संस्करण फ़िल्टर करें",
+ "no_match_filter": "कोई संस्करण {filter} से मेल नहीं खाता"
},
"dependencies": {
"title": "निर्भरताएँ ({count})",
@@ -232,7 +452,9 @@
"view_vulnerabilities": "कमजोरियाँ देखें",
"outdated_major": "{count} मेजर संस्करण पीछे (नवीनतम: {latest}) | {count} मेजर संस्करण पीछे (नवीनतम: {latest})",
"outdated_minor": "{count} माइनर संस्करण पीछे (नवीनतम: {latest}) | {count} माइनर संस्करण पीछे (नवीनतम: {latest})",
- "outdated_patch": "पैच अद्यतन उपलब्ध (नवीनतम: {latest})"
+ "outdated_patch": "पैच अद्यतन उपलब्ध (नवीनतम: {latest})",
+ "has_replacement": "इस निर्भरता के सुझाए गए विकल्प हैं",
+ "vulnerabilities_count": "{count} कमजोरी | {count} कमजोरियाँ"
},
"peer_dependencies": {
"title": "पीयर निर्भरताएँ ({count})",
@@ -256,7 +478,8 @@
"cancel_add": "स्वामी जोड़ना रद्द करें",
"add_owner": "+ स्वामी जोड़ें",
"show_more": "({count} और दिखाएं)",
- "show_less": "(कम दिखाएं)"
+ "show_less": "(कम दिखाएं)",
+ "maintainer_template": "{avatar} {char126}{name}"
},
"trends": {
"granularity": "ग्रैन्युलैरिटी",
@@ -271,10 +494,60 @@
"date_range_multiline": "{start}\nसे {end}",
"download_file": "{fileType} डाउनलोड करें",
"toggle_annotator": "एनोटेटर टॉगल करें",
- "items": {}
+ "items": {
+ "downloads": "डाउनलोड्स",
+ "likes": "लाइक्स",
+ "contributors": "योगदानकर्ता"
+ },
+ "copy_alt": {
+ "trend_none": "लगभग स्थिर",
+ "trend_strong": "मज़बूत",
+ "trend_weak": "कमज़ोर",
+ "trend_undefined": "अपरिभाषित (पर्याप्त डेटा नहीं)",
+ "button_label": "वैकल्पिक पाठ कॉपी करें",
+ "watermark": "नीचे की ओर एक वॉटरमार्क लिखा है \"./npmx a fast, modern browser for the npm registry\"",
+ "analysis": "{package_name} {start_value} से शुरू होता है और {end_value} पर समाप्त होता है, जो प्रति समय अंतराल {downloads_slope} डाउनलोड की ढलान के साथ {trend} रुझान दिखाता है",
+ "estimation": "अंतिम मान वर्तमान अवधि के आंशिक डेटा पर आधारित एक अनुमान है।",
+ "estimations": "अंतिम मान वर्तमान अवधि के आंशिक डेटा पर आधारित अनुमान हैं।",
+ "compare": "इनके लिए पैकेज डाउनलोड तुलना रेखा चार्ट: {packages}।",
+ "single_package": "{package} पैकेज के लिए डाउनलोड रेखा चार्ट।",
+ "general_description": "Y अक्ष डाउनलोड की संख्या दर्शाता है। X अक्ष {start_date} से {end_date} तक की तारीख सीमा दर्शाता है, जिसमें {granularity} समय अवधि है।{estimation_notice} {packages_analysis}. {watermark}.",
+ "facet_bar_general_description": "इनके लिए क्षैतिज बार चार्ट: {packages}, {facet} की तुलना करते हुए ({description})। {facet_analysis} {watermark}.",
+ "facet_bar_analysis": "{package_name} का मान {value} है।"
+ },
+ "chart_assistive_text": {
+ "keyboard_navigation_horizontal": "डेटा बिंदुओं के बीच जाने के लिए बाएँ और दाएँ तीर कुंजियों का उपयोग करें।",
+ "keyboard_navigation_vertical": "डेटा बिंदुओं के बीच जाने के लिए ऊपर और नीचे तीर कुंजियों का उपयोग करें।",
+ "table_available": "इस चार्ट के लिए नीचे एक डेटा तालिका उपलब्ध है।",
+ "table_caption": "चार्ट डेटा तालिका"
+ },
+ "toggle_stack_mode": "स्टैक मोड टॉगल करें",
+ "open_options": "विकल्प खोलें",
+ "close_options": "विकल्प बंद करें",
+ "legend_estimation": "अनुमान",
+ "no_data": "कोई डेटा उपलब्ध नहीं",
+ "y_axis_label": "{granularity} {facet}",
+ "facet": "फेसेट",
+ "title": "रुझान",
+ "contributors_skip": "Contributors में नहीं दिखाया गया (कोई GitHub repo नहीं):",
+ "data_correction": "डेटा सुधार",
+ "average_window": "औसत विंडो",
+ "smoothing": "स्मूदिंग",
+ "prediction": "पूर्वानुमान",
+ "known_anomalies": "ज्ञात विसंगतियाँ",
+ "known_anomalies_description": "बॉट्स या CI समस्याओं के कारण होने वाले ज्ञात डाउनलोड स्पाइक्स पर इंटरपोलेट करता है।",
+ "known_anomalies_ranges": "विसंगति सीमाएँ",
+ "known_anomalies_range": "{start} से {end} तक",
+ "known_anomalies_range_named": "{packageName}: {start} से {end} तक",
+ "known_anomalies_none": "इस पैकेज के लिए कोई ज्ञात विसंगति नहीं। | इन पैकेजों के लिए कोई ज्ञात विसंगति नहीं।",
+ "known_anomalies_contribute": "विसंगति डेटा में योगदान दें",
+ "apply_correction": "सुधार लागू करें"
},
"downloads": {
- "title": "साप्ताहिक डाउनलोड्स"
+ "title": "साप्ताहिक डाउनलोड्स",
+ "community_distribution": "समुदाय अपनाने का वितरण देखें",
+ "subtitle": "सभी संस्करणों में",
+ "sparkline_nav_hint": "← → का उपयोग करें"
},
"install_scripts": {
"title": "इंस्टॉल स्क्रिप्ट्स",
@@ -293,7 +566,8 @@
"types_label": "टाइप्स",
"types_included": "टाइप्स शामिल हैं",
"types_available": "टाइप्स {package} के माध्यम से उपलब्ध",
- "no_types": "कोई TypeScript टाइप्स नहीं"
+ "no_types": "कोई TypeScript टाइप्स नहीं",
+ "wasm": "WebAssembly है"
},
"license": {
"view_spdx": "SPDX पर अनुज्ञप्ति टेक्स्ट देखें",
@@ -311,7 +585,8 @@
"high": "उच्च",
"moderate": "मध्यम",
"low": "निम्न"
- }
+ },
+ "fixed_in_title": "संस्करण {version} में ठीक किया गया"
},
"deprecated": {
"label": "डेप्रीकेटेड",
@@ -355,9 +630,18 @@
"sort": {
"downloads": "सबसे अधिक डाउनलोड किए गए",
"name_asc": "नाम (A-Z)",
- "name_desc": "नाम (Z-A)"
+ "name_desc": "नाम (Z-A)",
+ "published": "हाल ही में प्रकाशित"
},
- "size": {}
+ "size": {
+ "b": "{size} B",
+ "kb": "{size} kB",
+ "mb": "{size} MB"
+ },
+ "download": {
+ "button": "डाउनलोड करें",
+ "tarball": ".tar.gz के रूप में Tarball डाउनलोड करें"
+ }
},
"connector": {
"modal": {
@@ -367,8 +651,8 @@
"connected_hint": "अब आप वेब UI से पैकेज और संगठन प्रबंधित कर सकते हैं।",
"disconnect": "डिस्कनेक्ट करें",
"run_hint": "एडमिन सुविधाएँ सक्षम करने के लिए अपनी मशीन पर कनेक्टर चलाएं।",
- "copy_command": "कमांड अनुकरण करें",
- "copied": "अनुकरण किया गया",
+ "copy_command": "कमांड कॉपी करें",
+ "copied": "कॉपी किया गया",
"paste_token": "फिर कनेक्ट करने के लिए नीचे टोकन पेस्ट करें:",
"token_label": "टोकन",
"token_placeholder": "टोकन यहाँ पेस्ट करें...",
@@ -377,7 +661,8 @@
"warning": "चेतावनी",
"warning_text": "यह npmx को आपके npm CLI तक पहुँचने की अनुमति देता है। केवल उन साइटों से कनेक्ट करें जिन पर आप भरोसा करते हैं।",
"connect": "कनेक्ट करें",
- "connecting": "कनेक्ट हो रहा है..."
+ "connecting": "कनेक्ट हो रहा है...",
+ "auto_open_url": "प्रमाणीकरण पृष्ठ अपने आप खोलें"
}
},
"operations": {
@@ -401,7 +686,9 @@
"executing": "निष्पादित हो रहा है...",
"log": "लॉग",
"log_label": "पूर्ण ऑपरेशन्स लॉग",
- "remove_from_log": "लॉग से हटाएं"
+ "remove_from_log": "लॉग से हटाएं",
+ "retry_web_auth": "वेब प्रमाणीकरण के साथ पुनः प्रयास करें",
+ "open_web_auth": "वेब प्रमाणीकरण लिंक खोलें"
}
},
"org": {
@@ -527,7 +814,8 @@
"publishing": "प्रकाशित हो रहा है...",
"checking": "उपलब्धता जाँच रहे हैं...",
"failed_to_check": "नाम उपलब्धता जाँचने में विफल",
- "failed_to_claim": "पैकेज दावा करने में विफल"
+ "failed_to_claim": "पैकेज दावा करने में विफल",
+ "missing_permission": "आपके पास scope {'@'}{scope} में पैकेज जोड़ने की अनुमति नहीं है।"
}
},
"code": {
@@ -537,7 +825,7 @@
"lines": "{count} पंक्तियाँ",
"toggle_tree": "फ़ाइल ट्री टॉगल करें",
"close_tree": "फ़ाइल ट्री बंद करें",
- "copy_link": "लिंक अनुकरण करें",
+ "copy_link": "लिंक कॉपी करें",
"raw": "रॉ",
"view_raw": "रॉ फ़ाइल देखें",
"file_too_large": "फ़ाइल पूर्वावलोकन के लिए बहुत बड़ी है",
@@ -557,7 +845,9 @@
"preview": "पूर्वावलोकन",
"code": "कोड"
},
- "file_path": "फ़ाइल पाथ"
+ "file_path": "फ़ाइल पाथ",
+ "binary_file": "बाइनरी फ़ाइल",
+ "binary_rendering_warning": "फ़ाइल प्रकार \"{contentType}\" पूर्वावलोकन के लिए समर्थित नहीं है।"
},
"badges": {
"provenance": {
@@ -592,7 +882,13 @@
"more_keywords": "+{count} और",
"clear_all": "सभी साफ़ करें",
"remove_filter": "{label} फ़िल्टर हटाएं",
- "chips": {},
+ "chips": {
+ "search": "खोज",
+ "downloads": "डाउनलोड्स",
+ "keyword": "कीवर्ड",
+ "security": "सुरक्षा",
+ "updated": "अद्यतन"
+ },
"download_range": {
"any": "कोई भी",
"lt100": "< 100",
@@ -624,10 +920,7 @@
"downloads_month": "डाउनलोड्स/महीना",
"downloads_year": "डाउनलोड्स/वर्ष",
"name": "नाम",
- "quality": "गुणवत्ता",
- "popularity": "लोकप्रियता",
- "maintenance": "रखरखाव",
- "score": "स्कोर"
+ "published": "अंतिम प्रकाशन"
},
"columns": {
"title": "कॉलम्स",
@@ -640,11 +933,9 @@
"downloads": "डाउनलोड्स/सप्ताह",
"maintainers": "अनुरक्षक",
"keywords": "कीवर्ड्स",
- "quality_score": "गुणवत्ता स्कोर",
- "popularity_score": "लोकप्रियता स्कोर",
- "maintenance_score": "रखरखाव स्कोर",
- "combined_score": "संयुक्त स्कोर",
- "security": "सुरक्षा"
+ "security": "सुरक्षा",
+ "published": "अंतिम प्रकाशन",
+ "selection": "पैकेज चुनें"
},
"view_mode": {
"label": "व्यू मोड",
@@ -671,7 +962,9 @@
"security_warning": "सुरक्षा चेतावनी",
"secure": "सुरक्षित",
"no_packages": "कोई पैकेज नहीं मिले"
- }
+ },
+ "view_selected": "चयनित देखें",
+ "clear_selected_label": "चयन साफ़ करें"
},
"about": {
"title": "हमारे बारे में जानकारी",
@@ -700,7 +993,20 @@
"managers": "मैनेजर"
}
},
- "team": {},
+ "sponsors": {
+ "title": "प्रायोजक"
+ },
+ "oss_partners": {
+ "title": "OSS पार्टनर्स"
+ },
+ "team": {
+ "title": "टीम",
+ "governance": "शासन",
+ "role_steward": "संरक्षक",
+ "role_maintainer": "अनुरक्षक",
+ "sponsor": "प्रायोजक",
+ "sponsor_aria": "GitHub पर {name} को प्रायोजित करें"
+ },
"contributors": {
"title": "योगदानकर्ता",
"description": "npmx पूरी तरह से ओपन सोर्स है, जो योगदानकर्ताओं के एक अद्भुत समुदाय द्वारा बनाया गया है। हमसे जुड़ें और आइए एक साथ वह npm ब्राउज़िंग अनुभव बनाएं जो हमेशा से चाहते थे।",
@@ -720,6 +1026,11 @@
"description": "चैट करें, प्रश्न पूछें, और विचार साझा करें।",
"cta": "Discord से जुड़ें"
},
+ "builders": {
+ "title": "npmx बनाने में मदद करें",
+ "description": "npmx के भविष्य को आकार देने वाले builders से जुड़ें।",
+ "cta": "Builders Discord से जुड़ें"
+ },
"follow": {
"title": "अद्यतन रहें",
"description": "npmx पर नवीनतम जानकारी प्राप्त करें।",
@@ -751,7 +1062,9 @@
"create_account": "नया खाता बनाएं",
"connect_bluesky": "Bluesky से कनेक्ट करें",
"what_is_atmosphere": "Atmosphere खाता क्या है?",
- "atmosphere_explanation": "{npmx} अपनी कई सोशल सुविधाओं को संचालित करने के लिए {atproto} का उपयोग करता है, जिससे उपभोक्ता अपने डेटा के स्वामी बन सकते हैं और सभी संगत एप्लिकेशन के लिए एक खाते का उपयोग कर सकते हैं। एक बार जब आप खाता बना लेते हैं, तो आप {bluesky} और {tangled} जैसे अन्य ऐप्स को उसी खाते से उपयोग कर सकते हैं।"
+ "atmosphere_explanation": "{npmx} अपनी कई सोशल सुविधाओं को संचालित करने के लिए {atproto} का उपयोग करता है, जिससे उपभोक्ता अपने डेटा के स्वामी बन सकते हैं और सभी संगत एप्लिकेशन के लिए एक खाते का उपयोग कर सकते हैं। एक बार जब आप खाता बना लेते हैं, तो आप {bluesky} और {tangled} जैसे अन्य ऐप्स को उसी खाते से उपयोग कर सकते हैं।",
+ "default_input_error": "कृपया एक मान्य handle, DID, या पूर्ण PDS URL दर्ज करें",
+ "profile": "प्रोफ़ाइल"
}
},
"header": {
@@ -771,7 +1084,8 @@
"error": "संगठन लोड करने में विफल",
"empty": "कोई संगठन नहीं मिले",
"view_all": "सभी देखें"
- }
+ },
+ "pr": "GitHub pull request #{prNumber} खोलें"
},
"compare": {
"packages": {
@@ -787,7 +1101,12 @@
"loading": "पैकेज डेटा लोड हो रहा है...",
"error": "पैकेज डेटा लोड करने में विफल। कृपया पुनः प्रयास करें।",
"empty_title": "तुलना करने के लिए पैकेज चुनें",
- "empty_description": "उनके मेट्रिक्स की साथ-साथ तुलना देखने के लिए ऊपर कम से कम 2 पैकेज खोजें और जोड़ें।"
+ "empty_description": "उनके मेट्रिक्स की साथ-साथ तुलना देखने के लिए ऊपर कम से कम 2 पैकेज खोजें और जोड़ें।",
+ "copy_as_markdown": "तालिका कॉपी करें",
+ "table_view": "तालिका",
+ "charts_view": "चार्ट्स",
+ "bar_chart_nav_hint": "↑ ↓ का उपयोग करें",
+ "line_chart_nav_hint": "← → का उपयोग करें"
},
"selector": {
"search_label": "पैकेज खोजें",
@@ -798,16 +1117,21 @@
"packages_selected": "{count}/{max} पैकेज चुने गए।",
"add_hint": "तुलना करने के लिए कम से कम 2 पैकेज जोड़ें।"
},
- "no_dependency": {},
+ "no_dependency": {
+ "label": "(कोई निर्भरता नहीं)",
+ "typeahead_title": "James क्या करते?",
+ "typeahead_description": "बिना किसी निर्भरता के तुलना करें! e18e approved.",
+ "tooltip_title": "आपको किसी निर्भरता की ज़रूरत नहीं हो सकती",
+ "tooltip_description": "बिना किसी निर्भरता के तुलना करें! {link} उन पैकेजों की सूची रखता है जिन्हें native APIs या सरल विकल्पों से बदला जा सकता है।",
+ "e18e_community": "e18e समुदाय",
+ "add_column": "तुलना में no dependency कॉलम जोड़ें"
+ },
"facets": {
- "group_label": "तुलना फेसेट्स",
"all": "सभी",
"none": "कोई नहीं",
"coming_soon": "जल्द आ रहा है",
"select_all": "सभी फेसेट्स चुनें",
"deselect_all": "सभी फेसेट्स अचयनित करें",
- "select_category": "सभी {category} फेसेट्स चुनें",
- "deselect_category": "सभी {category} फेसेट्स अचयनित करें",
"categories": {
"performance": "प्रदर्शन",
"health": "स्वास्थ्य",
@@ -815,42 +1139,328 @@
"security": "सुरक्षा और अनुपालन"
},
"items": {
- "packageSize": {},
- "installSize": {},
- "dependencies": {},
- "totalDependencies": {},
- "downloads": {},
- "totalLikes": {},
- "lastUpdated": {},
- "deprecated": {},
- "engines": {},
- "types": {},
- "moduleFormat": {},
- "license": {},
- "vulnerabilities": {}
+ "packageSize": {
+ "label": "पैकेज आकार",
+ "description": "केवल पैकेज का आकार (unpacked)"
+ },
+ "installSize": {
+ "label": "इंस्टॉल आकार",
+ "description": "सभी निर्भरताओं सहित कुल इंस्टॉल आकार"
+ },
+ "dependencies": {
+ "label": "प्रत्यक्ष निर्भरताएँ",
+ "description": "प्रत्यक्ष निर्भरताओं की संख्या"
+ },
+ "totalDependencies": {
+ "label": "कुल निर्भरताएँ",
+ "description": "transitive सहित निर्भरताओं की कुल संख्या"
+ },
+ "downloads": {
+ "label": "डाउनलोड्स/सप्ताह",
+ "description": "साप्ताहिक डाउनलोड संख्या"
+ },
+ "totalLikes": {
+ "label": "लाइक्स",
+ "description": "लाइक्स की संख्या"
+ },
+ "lastUpdated": {
+ "label": "प्रकाशित",
+ "description": "यह संस्करण कब प्रकाशित हुआ"
+ },
+ "deprecated": {
+ "label": "डेप्रीकेटेड?",
+ "description": "क्या यह पैकेज डेप्रीकेटेड है"
+ },
+ "engines": {
+ "label": "इंजन",
+ "description": "Node.js संस्करण आवश्यकताएँ"
+ },
+ "types": {
+ "label": "टाइप्स",
+ "description": "TypeScript प्रकार परिभाषाएँ"
+ },
+ "moduleFormat": {
+ "label": "मॉड्यूल प्रारूप",
+ "description": "ESM/CJS समर्थन"
+ },
+ "license": {
+ "label": "अनुज्ञप्ति",
+ "description": "पैकेज अनुज्ञप्ति"
+ },
+ "vulnerabilities": {
+ "label": "कमजोरियाँ",
+ "description": "ज्ञात सुरक्षा कमजोरियाँ"
+ }
},
- "values": {},
- "trends": {}
- }
+ "values": {
+ "any": "कोई भी",
+ "none": "कोई नहीं",
+ "unknown": "अज्ञात",
+ "deprecated": "डेप्रीकेटेड",
+ "not_deprecated": "नहीं",
+ "types_included": "शामिल",
+ "types_none": "कोई नहीं",
+ "vulnerabilities_summary": "{count} ({critical}C/{high}H)",
+ "up_to_you": "यह आप पर है!"
+ },
+ "trends": {
+ "title": "रुझानों की तुलना करें"
+ },
+ "binary_only_tooltip": "यह पैकेज binaries दिखाता है और exports नहीं"
+ },
+ "version_invalid_url_format": {
+ "hint": "अमान्य तुलना URL. यह प्रारूप उपयोग करें: {0}",
+ "from_version": "from",
+ "to_version": "to"
+ },
+ "file_filter_option": {
+ "all": "सभी ({count})",
+ "added": "जोड़ी गई ({count})",
+ "removed": "हटाई गई ({count})",
+ "modified": "संशोधित ({count})"
+ },
+ "filter": {
+ "added": "जोड़ी गई",
+ "removed": "हटाई गई",
+ "modified": "संशोधित"
+ },
+ "file_changes": "फ़ाइल परिवर्तन",
+ "files_count": "{count} फ़ाइल | {count} फ़ाइलें",
+ "lines_hidden": "{count} पंक्ति छिपी | {count} पंक्तियाँ छिपी",
+ "file_too_large": "तुलना के लिए फ़ाइल बहुत बड़ी है",
+ "file_size_warning": "तुलना के लिए {size} 250KB सीमा से अधिक है",
+ "compare_versions": "diff",
+ "compare_versions_title": "नवीनतम संस्करण से तुलना करें",
+ "comparing_versions_label": "संस्करणों की तुलना की जा रही है...",
+ "version_back_to_package": "पैकेज पर वापस जाएं",
+ "version_error_message": "संस्करणों की तुलना करने में विफल।",
+ "version_selector_title": "संस्करण से तुलना करें",
+ "summary": "सारांश",
+ "deps_count": "{count} निर्भरता | {count} निर्भरताएँ",
+ "dependencies": "निर्भरताएँ",
+ "dev_dependencies": "डेव निर्भरताएँ",
+ "peer_dependencies": "पीयर निर्भरताएँ",
+ "optional_dependencies": "वैकल्पिक निर्भरताएँ",
+ "no_dependency_changes": "निर्भरता में कोई परिवर्तन नहीं",
+ "search_files_placeholder": "फ़ाइलें खोजें...",
+ "no_files_all": "कोई फ़ाइल नहीं",
+ "no_files_search": "\"{query}\" से मेल खाती कोई फ़ाइल नहीं",
+ "no_files_filtered": "कोई {filter} फ़ाइल नहीं",
+ "files_button": "फ़ाइलें",
+ "select_file_prompt": "उसका diff देखने के लिए sidebar से एक फ़ाइल चुनें",
+ "close_files_panel": "फ़ाइल पैनल बंद करें",
+ "filter_files_label": "परिवर्तन प्रकार से फ़ाइलें फ़िल्टर करें",
+ "change_ratio": "परिवर्तन अनुपात",
+ "char_edits": "अक्षर संपादन",
+ "diff_distance": "Diff दूरी",
+ "loading_diff": "diff लोड हो रहा है...",
+ "loading_diff_error": "diff लोड करने में विफल",
+ "merge_modified_lines": "संशोधित पंक्तियाँ मर्ज करें",
+ "no_content_changes": "कोई सामग्री परिवर्तन नहीं मिला",
+ "options": "विकल्प",
+ "view_file": "फ़ाइल देखें",
+ "view_in_code_browser": "कोड ब्राउज़र में देखें",
+ "word_wrap": "वर्ड रैप"
+ },
+ "pds": {
+ "join": {
+ "title": "समुदाय से जुड़ें",
+ "description": "चाहे आप atmosphere पर अपना पहला खाता बना रहे हों या किसी मौजूदा खाते को migrate कर रहे हों, आपका यहाँ स्वागत है। आप अपना handle, पोस्ट या followers खोए बिना अपने वर्तमान खाते को migrate कर सकते हैं।",
+ "migrate": "PDS MOOver के साथ migrate करें"
+ },
+ "server": {
+ "title": "सर्वर विवरण",
+ "location_label": "स्थान:",
+ "location_value": "न्यूरेमबर्ग, जर्मनी",
+ "infrastructure_label": "इन्फ्रास्ट्रक्चर:",
+ "infrastructure_value": "Hetzner पर होस्ट किया गया",
+ "privacy_label": "गोपनीयता:",
+ "privacy_value": "कड़े EU डेटा सुरक्षा कानूनों के अधीन",
+ "learn_more": "जानें कि npmx Atmosphere का उपयोग कैसे करता है"
+ },
+ "community": {
+ "title": "यहाँ कौन है",
+ "description": "{count} खातों में से कुछ, जो पहले से ही npmx.social को अपना घर कह रहे हैं:",
+ "loading": "PDS समुदाय लोड हो रहा है...",
+ "error": "PDS समुदाय लोड करने में विफल।",
+ "empty": "दिखाने के लिए कोई समुदाय सदस्य नहीं है।",
+ "view_profile": "{handle} की प्रोफ़ाइल देखें",
+ "new_accounts": "...और {count} जो atmosphere पर नए हैं"
+ },
+ "title": "npmx.social",
+ "meta_description": "npmx समुदाय के लिए आधिकारिक AT Protocol Personal Data Server (PDS)।"
},
"privacy_policy": {
"cookies": {
- "what_are": {},
- "types": {},
- "local_storage": {},
- "management": {}
- },
- "analytics": {},
- "authenticated": {},
- "data_retention": {},
- "your_rights": {},
- "contact": {},
- "changes": {}
+ "what_are": {
+ "title": "कुकीज़ क्या हैं?",
+ "p1": "कुकीज़ छोटे टेक्स्ट फ़ाइलें हैं जो किसी वेबसाइट पर जाने पर आपके डिवाइस में संग्रहीत होती हैं। इनका उद्देश्य कुछ प्राथमिकताओं और सेटिंग्स को याद रखकर आपके ब्राउज़िंग अनुभव को बेहतर बनाना है।"
+ },
+ "types": {
+ "title": "हम कौन-सी कुकीज़ उपयोग करते हैं?",
+ "p1": "हम केवल {bold} का उपयोग करते हैं, जो साइट की कार्यक्षमता के लिए सख्ती से आवश्यक हैं। हम third-party या विज्ञापन कुकीज़ का उपयोग नहीं करते।",
+ "bold": "आवश्यक तकनीकी कुकीज़",
+ "li1": "{li11}{separator} {li12}",
+ "li2": "{li21}{separator} {li22}",
+ "separator": ":",
+ "cookie_vdpl": "__vdpl",
+ "cookie_vdpl_desc": "यह कुकी हमारे hosting provider (Vercel) द्वारा skew protection के लिए उपयोग की जाती है। यदि आपके ब्राउज़ करते समय नया update जारी हो जाए, तो यह सुनिश्चित करती है कि आपको सही deployment version से assets मिलें। यह आपका ट्रैक नहीं करती।",
+ "cookie_h3": "h3",
+ "cookie_h3_desc": "यह हमारी सुरक्षित session cookie है। जब आप अपना Atmosphere खाता कनेक्ट करते हैं, तब यह OAuth access token संग्रहीत करती है। यह आपके authenticated session को बनाए रखने के लिए आवश्यक है।"
+ },
+ "local_storage": {
+ "title": "लोकल स्टोरेज",
+ "p1": "session cookies के अलावा, हम आपकी display preferences सहेजने के लिए आपके ब्राउज़र के {bold} का उपयोग करते हैं। इससे हम आपके चुने हुए theme (light/dark) और कुछ अन्य {settings} को याद रख पाते हैं, ताकि हर बार आने पर आपको उन्हें फिर से सेट न करना पड़े।",
+ "bold": "Local Storage",
+ "p2": "यह जानकारी पूरी तरह कार्यात्मक है, केवल आपके डिवाइस पर संग्रहीत रहती है, और {bold2}. हम इसका उपयोग केवल आपकी वेबसाइट अनुभव को बेहतर बनाने के लिए करते हैं।",
+ "bold2": "इसमें कोई व्यक्तिगत डेटा नहीं होता और न ही इसका उपयोग आपको ट्रैक करने के लिए किया जाता है",
+ "settings": "सेटिंग्स"
+ },
+ "management": {
+ "title": "कुकीज़ प्रबंधित करना",
+ "p1": "आप अपनी पसंद के अनुसार अपने ब्राउज़र को कुकीज़ स्वीकार करने, अस्वीकार करने या हटाने के लिए कॉन्फ़िगर कर सकते हैं। हालांकि, कृपया ध्यान दें कि {bold}.",
+ "bold": "आवश्यक कुकीज़ अस्वीकार करने से एप्लिकेशन तक पूर्ण पहुँच बाधित हो सकती है",
+ "p2": "नीचे सबसे अधिक उपयोग किए जाने वाले ब्राउज़रों में कुकी प्रबंधन के निर्देशों के लिंक दिए गए हैं:",
+ "chrome": "Google Chrome (नई विंडो में खुलता है)",
+ "firefox": "Mozilla Firefox (नई विंडो में खुलता है)",
+ "edge": "Microsoft Edge (नई विंडो में खुलता है)"
+ }
+ },
+ "analytics": {
+ "title": "Analytics",
+ "p1": "हम यह समझने के लिए {bold} का उपयोग करते हैं कि विज़िटर हमारी वेबसाइट का उपयोग कैसे करते हैं। इससे हमें उपयोगकर्ता अनुभव बेहतर बनाने और समस्याओं की पहचान करने में मदद मिलती है।",
+ "bold": "Vercel Web Analytics",
+ "p2": "Vercel Analytics को गोपनीयता को ध्यान में रखकर डिज़ाइन किया गया है:",
+ "li1": "यह कुकीज़ का उपयोग नहीं करता",
+ "li2": "यह व्यक्तिगत पहचानकर्ताओं को एकत्र नहीं करता",
+ "li3": "यह वेबसाइटों के बीच उपयोगकर्ताओं को ट्रैक नहीं करता",
+ "li4": "सारा डेटा समेकित और anonymised होता है",
+ "p3": "एकत्र की जाने वाली जानकारी में केवल यह शामिल है: पेज URL, referrer, देश/क्षेत्र, डिवाइस प्रकार, ब्राउज़र और operating system। इस डेटा का उपयोग व्यक्तिगत उपयोगकर्ताओं की पहचान के लिए नहीं किया जा सकता।"
+ },
+ "authenticated": {
+ "title": "प्रमाणीकृत उपयोगकर्ता",
+ "p1": "जब आप अपना {bold} खाता npmx से कनेक्ट करते हैं, तो हम आपका OAuth access token एक सुरक्षित, HTTP-only session cookie में संग्रहीत करते हैं। इस token का उपयोग केवल आपकी ओर से अनुरोधों को प्रमाणित करने के लिए किया जाता है।",
+ "bold": "Atmosphere",
+ "p2": "हम आपके credentials संग्रहीत नहीं करते, और न ही आपके उपयोग की गई सुविधाएँ प्रदान करने के लिए आवश्यक सीमा से अधिक डेटा तक पहुँचते हैं। आप किसी भी समय {settings} पेज से अपना खाता डिस्कनेक्ट कर सकते हैं।",
+ "settings": "सेटिंग्स"
+ },
+ "data_retention": {
+ "title": "डेटा संरक्षण अवधि",
+ "p1": "जब आप अपना ब्राउज़र बंद करते हैं या निष्क्रियता की अवधि के बाद session cookies स्वतः हट जाती हैं। Local storage preferences आपके ब्राउज़र डेटा साफ़ करने तक आपके डिवाइस पर बनी रहती हैं। Analytics डेटा समेकित रूप में रखा जाता है और उसे व्यक्तिगत उपयोगकर्ताओं से नहीं जोड़ा जा सकता।"
+ },
+ "your_rights": {
+ "title": "आपके अधिकार",
+ "p1": "आपको यह अधिकार है कि आप:",
+ "li1": "जान सकें कि हम कौन-सा डेटा एकत्र करते हैं",
+ "li2": "किसी भी समय अपना local storage और cookies साफ़ करें",
+ "li3": "अपना authenticated session डिस्कनेक्ट करें",
+ "li4": "हमारी डेटा प्रक्रियाओं के बारे में जानकारी माँगें",
+ "p2": "चूँकि हम व्यक्तिगत डेटा एकत्र नहीं करते, इसलिए सामान्यतः कोई व्यक्तिगत जानकारी हटाने या निर्यात करने के लिए उपलब्ध नहीं होती।"
+ },
+ "contact": {
+ "title": "हमसे संपर्क करें",
+ "p1": "यदि इस गोपनीयता नीति के बारे में आपके कोई प्रश्न या चिंताएँ हैं, तो आप हमारे {link} पर issue खोलकर हमसे संपर्क कर सकते हैं।",
+ "link": "GitHub रिपॉजिटरी"
+ },
+ "changes": {
+ "title": "इस नीति में बदलाव",
+ "p1": "हम समय-समय पर इस गोपनीयता नीति को अपडेट कर सकते हैं। किसी भी बदलाव को इस पेज पर अद्यतन संशोधन तिथि के साथ प्रकाशित किया जाएगा।"
+ },
+ "title": "गोपनीयता नीति",
+ "last_updated": "अंतिम अद्यतन: {date}",
+ "welcome": "{app} में आपका स्वागत है। हम आपकी गोपनीयता की रक्षा के लिए प्रतिबद्ध हैं। यह नीति बताती है कि हम कौन-सा डेटा एकत्र करते हैं, उसका उपयोग कैसे करते हैं, और आपकी जानकारी से जुड़े आपके अधिकार क्या हैं।"
},
"a11y": {
- "approach": {},
- "measures": {},
- "limitations": {},
- "contact": {}
+ "approach": {
+ "title": "हमारा दृष्टिकोण",
+ "p1": "हम Web Content Accessibility Guidelines (WCAG) 2.2 का पालन करने का प्रयास करते हैं और सुविधाएँ बनाते समय उन्हें संदर्भ के रूप में उपयोग करते हैं। हम WCAG के किसी भी स्तर के पूर्ण अनुरूप होने का दावा नहीं करते — सुगम्यता एक सतत प्रक्रिया है और अभी भी बहुत काम बाकी है।",
+ "p2": "यह साइट एक {about} है। सुगम्यता सुधार हमारे नियमित विकास के हिस्से के रूप में क्रमिक रूप से किए जाते हैं।",
+ "about_link": "ओपन-सोर्स, समुदाय-चालित परियोजना"
+ },
+ "measures": {
+ "title": "हम क्या करते हैं",
+ "p1": "साइट पर हम जिन बातों का लक्ष्य रखते हैं, उनमें से कुछ:",
+ "li1": "जहाँ उपयुक्त हो, semantic HTML और ARIA attributes का उपयोग करना।",
+ "li2": "सापेक्ष टेक्स्ट आकारों का उपयोग करना ताकि आप उन्हें अपने ब्राउज़र में समायोजित कर सकें।",
+ "li3": "पूरे इंटरफ़ेस में कीबोर्ड नेविगेशन का समर्थन करना।",
+ "li4": "prefers-reduced-motion और prefers-color-scheme media queries का सम्मान करना।",
+ "li5": "पर्याप्त रंग-विपरीतता को ध्यान में रखकर डिज़ाइन करना।",
+ "li6": "यह सुनिश्चित करना कि आवश्यक सामग्री JavaScript के बिना भी उपलब्ध हो, हालाँकि कुछ इंटरैक्टिव सुविधाओं के लिए इसकी आवश्यकता होती है।"
+ },
+ "limitations": {
+ "title": "ज्ञात सीमाएँ",
+ "p1": "साइट के कुछ हिस्से — विशेषकर third-party सामग्री जैसे पैकेज READMEs — सुगम्यता मानकों को पूरा नहीं कर सकते। हम समय के साथ इन क्षेत्रों को बेहतर बनाने पर काम कर रहे हैं।"
+ },
+ "contact": {
+ "title": "प्रतिक्रिया",
+ "p1": "यदि आपको {app} पर कोई accessibility बाधा दिखाई दे, तो कृपया हमारे {link} पर issue खोलकर हमें बताएं। हम ऐसी रिपोर्टों को गंभीरता से लेते हैं और उन्हें ठीक करने का पूरा प्रयास करेंगे।",
+ "link": "GitHub रिपॉजिटरी"
+ },
+ "title": "सुगम्यता",
+ "footer_title": "a11y",
+ "welcome": "हम चाहते हैं कि {app} अधिक से अधिक लोगों के लिए उपयोगी हो।"
+ },
+ "translation_status": {
+ "table": {
+ "file": "फ़ाइल",
+ "status": "स्थिति",
+ "error": "फ़ाइल सूची लोड करते समय त्रुटि।",
+ "empty": "कोई फ़ाइल नहीं मिली",
+ "file_link": "GitHub पर {file} ({lang}) संपादित करें"
+ },
+ "title": "अनुवाद स्थिति",
+ "generated_at": "निर्माण तिथि: {date}",
+ "welcome": "यदि आप नीचे सूचीबद्ध भाषाओं में से किसी एक में {npmx} का अनुवाद करने में हमारी मदद करना चाहते हैं, तो आप सही जगह पर हैं! यह अपने-आप अपडेट होने वाला पेज हमेशा वह सारी सामग्री दिखाता है, जिसमें इस समय आपकी मदद की ज़रूरत है।",
+ "p1": "हम {lang} को डिफ़ॉल्ट भाषा के रूप में उपयोग करते हैं, कुल {count} के साथ। यदि आप अनुवाद जोड़ने में मदद करना चाहते हैं, तो {bylang} में भाषा खोजें और विवरण विस्तृत करें।",
+ "p1_lang": "अमेरिकी अंग्रेज़ी (en-US)",
+ "p1_count": "0 संदेश | 1 संदेश | {count} संदेश",
+ "p2": "शुरू करने से पहले, हमारी {guide} पढ़ें ताकि आप हमारी अनुवाद प्रक्रिया और इसमें शामिल होने के तरीकों के बारे में जान सकें।",
+ "guide": "लोकलाइज़ेशन (i18n) गाइड",
+ "by_locale": "locale के अनुसार अनुवाद प्रगति",
+ "by_file": "फ़ाइल के अनुसार अनुवाद प्रगति",
+ "complete_text": "यह अनुवाद पूरा हो चुका है, शानदार काम!",
+ "missing_text": "गायब",
+ "missing_keys": "कोई अनुवाद गायब नहीं है | अनुवाद गायब है | अनुवाद गायब हैं",
+ "progress_label": "{locale} के लिए प्रगति स्थिति"
+ },
+ "action_bar": {
+ "title": "एक्शन बार",
+ "selection": "0 चयनित | 1 चयनित | {count} चयनित",
+ "shortcut": "क्रियाओं पर फ़ोकस करने के लिए \"{key}\" दबाएँ",
+ "button_close_aria_label": "एक्शन बार बंद करें"
+ },
+ "vacations": {
+ "title": "छुट्टी पर",
+ "meta_description": "npmx टीम थोड़ा आराम कर रही थी। एक सप्ताह बाद Discord फिर से खुल गया।",
+ "heading": "ऊर्जा फिर से भरना",
+ "subtitle": "हम npmx को इतनी तेज़ रफ़्तार से बना रहे थे कि हममें से {some} की नींद प्रभावित हो रही थी। हम नहीं चाहते थे कि यह सामान्य बात बने! इसलिए हमने एक हफ़्ते की छुट्टी ली। साथ में।",
+ "illustration_alt": "आरामदेह आइकनों की एक पंक्ति",
+ "poke_log": "अलाव को कुरेदें",
+ "what": {
+ "title": "क्या हुआ",
+ "p1": "Discord {dates} तक बंद था।",
+ "dates": "14 – 21 फ़रवरी",
+ "p2": "सभी invite links हटा दिए गए थे और channels लॉक थे — सिर्फ़ {garden} खुला रहा, उन लोगों के लिए जो वहीं बातचीत जारी रखना चाहते थे।",
+ "garden": "#garden"
+ },
+ "meantime": {
+ "title": "इस बीच",
+ "p1": "{site} और {repo} खुले रहे — लोग अब भी आए, कुछ issues दर्ज किए, कुछ PRs खोले, लेकिन ज़्यादातर सभी ने किसी आरामदेह अलाव के पास समय बिताया।",
+ "repo_link": "रिपॉजिटरी"
+ },
+ "return": {
+ "title": "हम लौट आए!",
+ "p1": "हम नई ऊर्जा के साथ लौटे और 3 मार्च तक अंतिम push के लिए तैयार थे। अपडेट के लिए {social}।",
+ "social_link": "Bluesky पर हमें फ़ॉलो करें"
+ },
+ "stats": {
+ "contributors": "योगदानकर्ता",
+ "commits": "कमिट्स",
+ "pr": "मर्ज किए गए PRs",
+ "subtitle": {
+ "some": "कुछ",
+ "all": "सभी"
+ }
+ }
}
}
diff --git a/i18n/locales/hu-HU.json b/i18n/locales/hu-HU.json
index ed65c307ea..b81921f621 100644
--- a/i18n/locales/hu-HU.json
+++ b/i18n/locales/hu-HU.json
@@ -535,7 +535,8 @@
"b": "{size} B",
"kb": "{size} kB",
"mb": "{size} MB"
- }
+ },
+ "download": {}
},
"connector": {
"modal": {
@@ -812,11 +813,7 @@
"downloads_month": "Letöltés/hó",
"downloads_year": "Letöltés/év",
"published": "Utoljára közzétéve",
- "name": "Név",
- "quality": "Minőség",
- "popularity": "Népszerűség",
- "maintenance": "Karbantartás",
- "score": "Pontszám"
+ "name": "Név"
},
"columns": {
"title": "Oszlopok",
@@ -830,10 +827,6 @@
"published": "Utoljára közzétéve",
"maintainers": "Karbantartók",
"keywords": "Kulcsszavak",
- "quality_score": "Minőség pontszám",
- "popularity_score": "Népszerűség pontszám",
- "maintenance_score": "Karbantartás pontszám",
- "combined_score": "Összesített pontszám",
"security": "Biztonság"
},
"view_mode": {
@@ -1015,14 +1008,11 @@
"add_column": "Nincs függőség oszlop hozzáadása az összehasonlításhoz"
},
"facets": {
- "group_label": "Összehasonlítási aspektusok",
"all": "összes",
"none": "nincs",
"coming_soon": "Hamarosan",
"select_all": "Az összes aspektus kiválasztása",
"deselect_all": "Az összes aspektus kijelölésének törlése",
- "select_category": "Az összes {category} aspektus kiválasztása",
- "deselect_category": "Az összes {category} aspektus kijelölésének törlése",
"binary_only_tooltip": "Ez a csomag binárisokat mutat ki és nincsenek exportok",
"categories": {
"performance": "Teljesítmény",
@@ -1105,6 +1095,7 @@
"file_too_large": "A fájl túl nagy az összehasonlításhoz",
"file_size_warning": "{size} meghaladja a 250KB-os limitet az összehasonlításhoz",
"compare_versions": "diff",
+ "version_invalid_url_format": {},
"summary": "Összegzés",
"deps_count": "{count} függ",
"dependencies": "Függőségek",
@@ -1246,5 +1237,9 @@
"p1": "Ha akadálymentességi problémákat tapasztalsz a(z) {app} -on, kérjük, közölj velünk egy kérdés megnyitásával a(z) {link} -ben. Komolyan vesszük ezeket a jelentéseket, és mindent megteszünk a megoldásukért.",
"link": "GitHub tárhelyen"
}
- }
+ },
+ "translation_status": {
+ "table": {}
+ },
+ "action_bar": {}
}
diff --git a/i18n/locales/id-ID.json b/i18n/locales/id-ID.json
index faa4c332fe..cf1e3edc84 100644
--- a/i18n/locales/id-ID.json
+++ b/i18n/locales/id-ID.json
@@ -591,7 +591,8 @@
"b": "{size} B",
"kb": "{size} kB",
"mb": "{size} MB"
- }
+ },
+ "download": {}
},
"connector": {
"modal": {
@@ -870,11 +871,7 @@
"downloads_month": "Unduhan/bulan",
"downloads_year": "Unduhan/tahun",
"published": "Paling Akhir Diterbitkan",
- "name": "Nama",
- "quality": "Kualitas",
- "popularity": "Popularitas",
- "maintenance": "Pemeliharaan",
- "score": "Skor"
+ "name": "Nama"
},
"columns": {
"title": "Kolom",
@@ -888,10 +885,6 @@
"published": "Paling Akhir Diterbitkan",
"maintainers": "Pemelihara",
"keywords": "Kata kunci",
- "quality_score": "Skor kualitas",
- "popularity_score": "Skor popularitas",
- "maintenance_score": "Skor pemeliharaan",
- "combined_score": "Skor gabungan",
"security": "Keamanan"
},
"view_mode": {
@@ -1079,14 +1072,11 @@
"add_column": "Menambahkan kolom tanpa ketergantungan ke perbandingan"
},
"facets": {
- "group_label": "Aspek perbandingan",
"all": "semua",
"none": "tidak ada",
"coming_soon": "Segera hadir",
"select_all": "Pilih semua aspek",
"deselect_all": "Batalkan semua aspek",
- "select_category": "Pilih semua aspek {category}",
- "deselect_category": "Batalkan semua aspek {category}",
"binary_only_tooltip": "Paket ini hanya mengekspos berkas biner dan bukan eksport",
"categories": {
"performance": "Performa",
@@ -1170,6 +1160,7 @@
"file_size_warning": "{size} melebihi batas 250KB untuk perbandingan",
"compare_versions": "perbarui",
"compare_versions_title": "Bandingkan dengan versi terbaru",
+ "version_invalid_url_format": {},
"version_selector_title": "Bandingkan dengan versi",
"summary": "Ringkasan",
"deps_count": "{count} ketergantungan",
@@ -1335,5 +1326,9 @@
"p1": "Jika kamu menemukan kendala terkait fitur aksesibilitas bagi penyandang disabilitas atau masalah tampilan di platform {app}, silakan laporkan masalahnya di {link}. Setiap laporan yang masuk akan kami tindak lanjuti dengan prioritas tinggi agar layanan kita lebih baik bagi seluruh pengguna.",
"link": "Repositori Pengembangan Isu Github"
}
- }
+ },
+ "translation_status": {
+ "table": {}
+ },
+ "action_bar": {}
}
diff --git a/i18n/locales/it-IT.json b/i18n/locales/it-IT.json
index ec6e221918..d96207920b 100644
--- a/i18n/locales/it-IT.json
+++ b/i18n/locales/it-IT.json
@@ -76,6 +76,10 @@
"links": "Link",
"tap_to_search": "Tocca per cercare"
},
+ "blog": {
+ "author": {},
+ "atproto": {}
+ },
"settings": {
"title": "impostazioni",
"tagline": "personalizza la tua esperienza npmx",
@@ -122,6 +126,7 @@
"edit_on_github": "Modifica su GitHub",
"view_guide": "Guida alla traduzione"
},
+ "error": {},
"common": {
"loading": "Caricando...",
"loading_more": "Caricando altri...",
@@ -452,7 +457,8 @@
"b": "{size} B",
"kb": "{size} kB",
"mb": "{size} MB"
- }
+ },
+ "download": {}
},
"connector": {
"modal": {
@@ -725,11 +731,7 @@
"downloads_month": "Download/mese",
"downloads_year": "Download/anno",
"published": "Ultimo pubblicato",
- "name": "Nome",
- "quality": "Qualità",
- "popularity": "Popolarità",
- "maintenance": "Manutenzione",
- "score": "Punteggio"
+ "name": "Nome"
},
"columns": {
"title": "Colonne",
@@ -743,10 +745,6 @@
"published": "Ultimo pubblicato",
"maintainers": "Manutentori",
"keywords": "Keywords",
- "quality_score": "Punteggio di qualità",
- "popularity_score": "Punteggio di popolarità",
- "maintenance_score": "Punteggio di manutenzione",
- "combined_score": "Punteggio combinato",
"security": "Sicurezza"
},
"view_mode": {
@@ -825,6 +823,7 @@
"description": "Chatta, fai domande e condividi idee.",
"cta": "Unisciti a Discord"
},
+ "builders": {},
"follow": {
"title": "Rimani aggiornato",
"description": "Scopri le ultime novità su npmx.",
@@ -914,14 +913,11 @@
"add_column": "Aggiungi una colonna per il confronto senza dipendenze"
},
"facets": {
- "group_label": "Sfaccettature di confronto",
"all": "tutto",
"none": "niente",
"coming_soon": "Prossimamente",
"select_all": "Seleziona tutte le sfaccettature",
"deselect_all": "Deseleziona tutte le sfaccettature",
- "select_category": "Seleziona tutte le sfaccettature {category}",
- "deselect_category": "Deseleziona tutte le sfaccettature {category}",
"binary_only_tooltip": "Questo pacchetto espone binari e nessuna esportazione",
"categories": {
"performance": "Prestazioni",
@@ -996,9 +992,15 @@
},
"trends": {}
},
+ "version_invalid_url_format": {},
"file_filter_option": {},
"filter": {}
},
+ "pds": {
+ "join": {},
+ "server": {},
+ "community": {}
+ },
"privacy_policy": {
"title": "Informativa sulla privacy",
"last_updated": "Ultimo aggiornamento: {date}",
@@ -1085,5 +1087,8 @@
"limitations": {},
"contact": {}
},
+ "translation_status": {
+ "table": {}
+ },
"action_bar": {}
}
diff --git a/i18n/locales/ja-JP.json b/i18n/locales/ja-JP.json
index b876175b49..2270f6c5d3 100644
--- a/i18n/locales/ja-JP.json
+++ b/i18n/locales/ja-JP.json
@@ -588,7 +588,8 @@
"b": "{size} B",
"kb": "{size} kB",
"mb": "{size} MB"
- }
+ },
+ "download": {}
},
"connector": {
"modal": {
@@ -865,11 +866,7 @@
"downloads_month": "ダウンロード数/月",
"downloads_year": "ダウンロード数/年",
"published": "最新の公開日",
- "name": "パッケージ名",
- "quality": "品質",
- "popularity": "人気度",
- "maintenance": "メンテナンス",
- "score": "スコア"
+ "name": "パッケージ名"
},
"columns": {
"title": "列",
@@ -883,10 +880,6 @@
"published": "最新の公開",
"maintainers": "メンテナ",
"keywords": "キーワード",
- "quality_score": "品質スコア",
- "popularity_score": "人気度スコア",
- "maintenance_score": "メンテナンススコア",
- "combined_score": "総合スコア",
"security": "セキュリティ"
},
"view_mode": {
@@ -1074,14 +1067,11 @@
"add_column": "比較項目に「依存関係なし」カラムを追加"
},
"facets": {
- "group_label": "比較項目",
"all": "すべて",
"none": "なし",
"coming_soon": "近日公開",
"select_all": "すべての項目を選択",
"deselect_all": "すべての項目の選択を解除",
- "select_category": "{category} のすべての項目を選択",
- "deselect_category": "{category} のすべての項目の選択を解除",
"binary_only_tooltip": "このパッケージはバイナリのみを提供し、エクスポートを含みません",
"categories": {
"performance": "パフォーマンス",
@@ -1165,6 +1155,7 @@
"file_size_warning": "{size} は比較制限の250KBを超えています",
"compare_versions": "diff",
"compare_versions_title": "最新バージョンと比較",
+ "version_invalid_url_format": {},
"summary": "要約",
"deps_count": "依存関係 {count} 件",
"dependencies": "依存関係",
@@ -1329,5 +1320,9 @@
"p1": "{app} でアクセシビリティ上のバリアを見つけた場合は、{link} でissueを作成して連絡してください。報告は真剣に受け止め、問題を解決するためにできる限り対応します。",
"link": "GitHubリポジトリ"
}
- }
+ },
+ "translation_status": {
+ "table": {}
+ },
+ "action_bar": {}
}
diff --git a/i18n/locales/kn-IN.json b/i18n/locales/kn-IN.json
index 5786e6a53c..f8ec04fa88 100644
--- a/i18n/locales/kn-IN.json
+++ b/i18n/locales/kn-IN.json
@@ -54,6 +54,10 @@
"links": "ಲಿಂಕ್ಗಳು",
"tap_to_search": "ಹುಡುಕಲು ಟ್ಯಾಪ್ ಮಾಡಿ"
},
+ "blog": {
+ "author": {},
+ "atproto": {}
+ },
"settings": {
"title": "ಸೆಟ್ಟಿಂಗ್ಗಳು",
"tagline": "ನಿಮ್ಮ npmx ಅನುಭವವನ್ನು ಕಸ್ಟಮೈಸ್ ಮಾಡಿ",
@@ -79,7 +83,8 @@
"label": "ಅಕ್ಸೆಂಟ್ ಬಣ್ಣಗಳು"
},
"clear_accent": "ಅಕ್ಸೆಂಟ್ ಬಣ್ಣ ತೆರವುಗೊಳಿಸಿ",
- "translation_progress": "ಅನುವಾದ ಪ್ರಗತಿ"
+ "translation_progress": "ಅನುವಾದ ಪ್ರಗತಿ",
+ "background_themes": {}
},
"i18n": {
"missing_keys": "{count} ಅನುವಾದ ಇಲ್ಲ | {count} ಅನುವಾದಗಳು ಇಲ್ಲ",
@@ -89,6 +94,7 @@
"edit_on_github": "GitHub ನಲ್ಲಿ ಸಂಪಾದಿಸಿ",
"view_guide": "ಅನುವಾದ ಮಾರ್ಗದರ್ಶಿ"
},
+ "error": {},
"common": {
"loading": "ಲೋಡ್ ಆಗುತ್ತಿದೆ...",
"loading_more": "ಇನ್ನಷ್ಟು ಲೋಡ್ ಆಗುತ್ತಿದೆ...",
@@ -115,6 +121,9 @@
"github": "GitHub ನಲ್ಲಿ ನೋಡಿ"
}
},
+ "profile": {
+ "invite": {}
+ },
"package": {
"not_found": "ಪ್ಯಾಕೇಜ್ ಕಂಡುಬಂದಿಲ್ಲ",
"not_found_message": "ಪ್ಯಾಕೇಜ್ ಕಂಡುಬಂದಿಲ್ಲ.",
@@ -127,6 +136,7 @@
"version": "ಈ ಆವೃತ್ತಿ ಅಮಾನ್ಯಗೊಳಿಸಲಾಗಿದೆ.",
"no_reason": "ಕಾರಣ ನೀಡಲಾಗಿಲ್ಲ"
},
+ "size_increase": {},
"replacement": {
"title": "ನಿಮಗೆ ಈ ಅವಲಂಬನೆ ಅಗತ್ಯವಿಲ್ಲದಿರಬಹುದು.",
"native": "ಇದನ್ನು {replacement} ಮೂಲಕ ಬದಲಾಯಿಸಬಹುದು, ಇದು Node {nodeVersion} ರಿಂದ ಲಭ್ಯವಿದೆ.",
@@ -222,7 +232,8 @@
"more_tagged": "{count} ಇನ್ನಷ್ಟು ಟ್ಯಾಗ್ ಮಾಡಲಾಗಿದೆ",
"all_covered": "ಎಲ್ಲಾ ಆವೃತ್ತಿಗಳು ಮೇಲಿನ ಟ್ಯಾಗ್ಗಳಿಂದ ಒಳಗೊಂಡಿವೆ",
"deprecated_title": "{version} (ಅಮಾನ್ಯಗೊಳಿಸಲಾಗಿದೆ)",
- "view_all": "{count} ಆವೃತ್ತಿ ನೋಡಿ | ಎಲ್ಲಾ {count} ಆವೃತ್ತಿಗಳನ್ನು ನೋಡಿ"
+ "view_all": "{count} ಆವೃತ್ತಿ ನೋಡಿ | ಎಲ್ಲಾ {count} ಆವೃತ್ತಿಗಳನ್ನು ನೋಡಿ",
+ "copy_alt": {}
},
"dependencies": {
"title": "ಅವಲಂಬನೆಗಳು ({count})",
@@ -271,7 +282,8 @@
"date_range_multiline": "{start}\nರಿಂದ {end}",
"download_file": "{fileType} ಡೌನ್ಲೋಡ್ ಮಾಡಿ",
"toggle_annotator": "ಅನೋಟೇಟರ್ ಟಾಗಲ್ ಮಾಡಿ",
- "items": {}
+ "items": {},
+ "copy_alt": {}
},
"downloads": {
"title": "ವಾರದ ಡೌನ್ಲೋಡ್ಗಳು"
@@ -357,7 +369,8 @@
"name_asc": "ಹೆಸರು (A-Z)",
"name_desc": "ಹೆಸರು (Z-A)"
},
- "size": {}
+ "size": {},
+ "download": {}
},
"connector": {
"modal": {
@@ -623,11 +636,7 @@
"downloads_day": "ಡೌನ್ಲೋಡ್ಗಳು/ದಿನ",
"downloads_month": "ಡೌನ್ಲೋಡ್ಗಳು/ತಿಂಗಳು",
"downloads_year": "ಡೌನ್ಲೋಡ್ಗಳು/ವರ್ಷ",
- "name": "ಹೆಸರು",
- "quality": "ಗುಣಮಟ್ಟ",
- "popularity": "ಜನಪ್ರಿಯತೆ",
- "maintenance": "ನಿರ್ವಹಣೆ",
- "score": "ಸ್ಕೋರ್"
+ "name": "ಹೆಸರು"
},
"columns": {
"title": "ಕಾಲಮ್ಗಳು",
@@ -640,10 +649,6 @@
"downloads": "ಡೌನ್ಲೋಡ್ಗಳು/ವಾರ",
"maintainers": "ನಿರ್ವಹಕರು",
"keywords": "ಕೀವರ್ಡ್ಗಳು",
- "quality_score": "ಗುಣಮಟ್ಟದ ಸ್ಕೋರ್",
- "popularity_score": "ಜನಪ್ರಿಯತಾ ಸ್ಕೋರ್",
- "maintenance_score": "ನಿರ್ವಹಣಾ ಸ್ಕೋರ್",
- "combined_score": "ಸಂಯುಕ್ತ ಸ್ಕೋರ್",
"security": "ಭದ್ರತೆ"
},
"view_mode": {
@@ -700,6 +705,8 @@
"managers": "ನಿರ್ವಾಹಕರು"
}
},
+ "sponsors": {},
+ "oss_partners": {},
"team": {},
"contributors": {
"title": "ಸಹಯೋಗಿಗಳು",
@@ -720,6 +727,7 @@
"description": "ಚಾಟ್ ಮಾಡಿ, ಪ್ರಶ್ನೆಗಳು ಕೇಳಿ ಮತ್ತು ಆಲೋಚನೆಗಳನ್ನು ಹಂಚಿಕೊಳ್ಳಿ.",
"cta": "Discord ನಲ್ಲಿ ಸೇರಿ"
},
+ "builders": {},
"follow": {
"title": "ನವೀಕರಣಗಳನ್ನು ಪಡೆಯಿರಿ",
"description": "npmx ಬಗ್ಗೆ ಇತ್ತೀಚಿನ ಮಾಹಿತಿ ಪಡೆಯಿರಿ.",
@@ -800,14 +808,11 @@
},
"no_dependency": {},
"facets": {
- "group_label": "ಹೋಲಿಕೆ ಫ್ಯಾಸೆಟ್ಗಳು",
"all": "ಎಲ್ಲ",
"none": "ಯಾವುದೂ ಇಲ್ಲ",
"coming_soon": "ಶೀಘ್ರದಲ್ಲೇ",
"select_all": "ಎಲ್ಲ ಫ್ಯಾಸೆಟ್ಗಳನ್ನು ಆಯ್ಕೆಮಾಡಿ",
"deselect_all": "ಎಲ್ಲ ಫ್ಯಾಸೆಟ್ಗಳನ್ನು ಅನಾಯ್ಕೆಮಾಡಿ",
- "select_category": "ಎಲ್ಲ {category} ಫ್ಯಾಸೆಟ್ಗಳನ್ನು ಆಯ್ಕೆಮಾಡಿ",
- "deselect_category": "ಎಲ್ಲ {category} ಫ್ಯಾಸೆಟ್ಗಳನ್ನು ಅನಾಯ್ಕೆಮಾಡಿ",
"categories": {
"performance": "ಕಾರ್ಯಕ್ಷಮತೆ",
"health": "ಆರೋಗ್ಯ",
@@ -831,7 +836,15 @@
},
"values": {},
"trends": {}
- }
+ },
+ "version_invalid_url_format": {},
+ "file_filter_option": {},
+ "filter": {}
+ },
+ "pds": {
+ "join": {},
+ "server": {},
+ "community": {}
},
"privacy_policy": {
"cookies": {
@@ -852,5 +865,9 @@
"measures": {},
"limitations": {},
"contact": {}
- }
+ },
+ "translation_status": {
+ "table": {}
+ },
+ "action_bar": {}
}
diff --git a/i18n/locales/mr-IN.json b/i18n/locales/mr-IN.json
index 129d7c4ddd..c2684b5a49 100644
--- a/i18n/locales/mr-IN.json
+++ b/i18n/locales/mr-IN.json
@@ -482,6 +482,7 @@
"maintainer_template": "{avatar} {char126}{name}"
},
"trends": {
+ "chart_assistive_text": {},
"granularity": "ग्रॅन्युलॅरिटी",
"granularity_daily": "दैनिक",
"granularity_weekly": "साप्ताहिक",
@@ -915,11 +916,7 @@
"downloads_month": "डाउनलोड्स/महिना",
"downloads_year": "डाउनलोड्स/वर्ष",
"published": "शेवटचे प्रकाशित",
- "name": "नाव",
- "quality": "गुणवत्ता",
- "popularity": "लोकप्रियता",
- "maintenance": "देखभाल",
- "score": "स्कोर"
+ "name": "नाव"
},
"columns": {
"title": "स्तंभ",
@@ -933,10 +930,6 @@
"published": "शेवटचे प्रकाशित",
"maintainers": "देखभालकर्ते",
"keywords": "कीवर्ड्स",
- "quality_score": "गुणवत्ता स्कोर",
- "popularity_score": "लोकप्रियता स्कोर",
- "maintenance_score": "देखभाल स्कोर",
- "combined_score": "एकत्रित स्कोर",
"security": "सुरक्षा",
"selection": "पॅकेज निवडा"
},
@@ -1126,14 +1119,11 @@
"add_column": "तुलनेत निर्भरता नसलेला स्तंभ जोडा"
},
"facets": {
- "group_label": "तुलना घटक",
"all": "सर्व",
"none": "काहीही नाही",
"coming_soon": "लवकरच येत आहे",
"select_all": "सर्व घटक निवडा",
"deselect_all": "सर्व घटकांची निवड रद्द करा",
- "select_category": "{category} मधील सर्व घटक निवडा",
- "deselect_category": "{category} मधील सर्व घटकांची निवड रद्द करा",
"binary_only_tooltip": "हे पॅकेज binaries उघड करते आणि exports नाहीत",
"categories": {
"performance": "कार्यक्षमता",
@@ -1425,6 +1415,14 @@
"file_link": "GitHub वर {file} ({lang}) संपादित करा"
}
},
+ "vacations": {
+ "what": {},
+ "meantime": {},
+ "return": {},
+ "stats": {
+ "subtitle": {}
+ }
+ },
"action_bar": {
"title": "क्रिया पट्टी",
"selection": "0 निवडले | 1 निवडले | {count} निवडले",
diff --git a/i18n/locales/nb-NO.json b/i18n/locales/nb-NO.json
index 0e6cbe9213..cb919c567b 100644
--- a/i18n/locales/nb-NO.json
+++ b/i18n/locales/nb-NO.json
@@ -17,7 +17,10 @@
"source": "kildekode",
"social": "sosialt",
"chat": "chat",
- "keyboard_shortcuts": "tastatursnarveier"
+ "keyboard_shortcuts": "tastatursnarveier",
+ "blog": "blogg",
+ "builders_chat": "utviklere",
+ "brand": "merkevare"
},
"shortcuts": {
"section": {
@@ -33,7 +36,10 @@
"navigate_results": "Naviger resultater",
"go_to_result": "Gå til resultat",
"open_code_view": "Åpne kodevisning",
- "open_docs": "Åpne dokumentasjon"
+ "open_docs": "Åpne dokumentasjon",
+ "disable_shortcuts": "Du kan deaktivere tastatursnarveier i {settings}.",
+ "open_main": "Åpne hovedinformasjon",
+ "open_diff": "Åpne versjonsforskjeller"
},
"search": {
"label": "Søk etter npm-pakker",
@@ -62,7 +68,13 @@
"org": "org",
"view_user_packages": "Vis pakker fra denne brukeren",
"view_org_packages": "Vis pakker fra denne organisasjonen"
- }
+ },
+ "instant_search": "Hurtigsøk",
+ "instant_search_on": "på",
+ "instant_search_off": "av",
+ "instant_search_turn_on": "slå på",
+ "instant_search_turn_off": "slå av",
+ "instant_search_advisory": "{label} {state} — {action}"
},
"nav": {
"main_navigation": "Hovedmeny",
@@ -76,6 +88,32 @@
"links": "Lenker",
"tap_to_search": "Trykk for å søke"
},
+ "blog": {
+ "author": {
+ "view_profile": "Vis {name}s profil på Bluesky"
+ },
+ "atproto": {
+ "view_on_bluesky": "Vis på Bluesky",
+ "reply_on_bluesky": "Svar på Bluesky",
+ "likes_on_bluesky": "Likerklikk på Bluesky",
+ "like_or_reply_on_bluesky": "Lik dette innlegget eller legg til en kommentar på Bluesky",
+ "no_comments_yet": "Ingen kommentarer ennå.",
+ "could_not_load_comments": "Kunne ikke laste kommentarer.",
+ "comments": "Kommentarer",
+ "loading_comments": "Laster kommentarer...",
+ "updating": "Oppdaterer...",
+ "reply_count": "{count} svar | {count} svar",
+ "like_count": "{count} likerklikk | {count} likerklikk",
+ "repost_count": "{count} deling | {count} delinger",
+ "more_replies": "{count} svar til... | {count} svar til..."
+ },
+ "title": "Blogg",
+ "heading": "blogg",
+ "meta_description": "Innsikt og oppdateringer fra npmx-fellesskapet",
+ "draft_badge": "Utkast",
+ "draft_banner": "Dette er et upublisert utkast. Det kan være ufullstendig eller inneholde unøyaktigheter.",
+ "no_posts": "Ingen innlegg funnet."
+ },
"settings": {
"title": "innstillinger",
"tagline": "tilpass din npmx-opplevelse",
@@ -83,8 +121,9 @@
"sections": {
"appearance": "Utseende",
"display": "Visning",
- "search": "Datakilde",
- "language": "Språk"
+ "search": "Søkefunksjoner",
+ "language": "Språk",
+ "keyboard_shortcuts": "Tastatursnarveier"
},
"data_source": {
"label": "Datakilde",
@@ -106,13 +145,31 @@
"language": "Språk",
"help_translate": "Hjelp med å oversette npmx",
"accent_colors": {
- "label": "Aksentfarger"
+ "label": "Aksentfarger",
+ "sky": "Himmel",
+ "coral": "Korall",
+ "amber": "Rav",
+ "emerald": "Smaragd",
+ "violet": "Fiolett",
+ "magenta": "Magenta"
},
"clear_accent": "Fjern aksentfarge",
"translation_progress": "Oversettelsesfremdrift",
"background_themes": {
- "label": "Bakgrunnsnyanse"
- }
+ "label": "Bakgrunnsnyanse",
+ "neutral": "Nøytral",
+ "stone": "Stein",
+ "zinc": "Sink",
+ "slate": "Skifer",
+ "black": "Svart"
+ },
+ "instant_search": "Hurtigsøk",
+ "instant_search_description": "Navigerer til søkesiden og oppdaterer resultatene mens du skriver.",
+ "enable_graph_pulse_loop": "Aktiver pulseffekt-løkke på mini-graf",
+ "enable_graph_pulse_loop_description": "Aktiver en kontinuerlig pulsanimasjon på ukentlig nedlastingsgraf. Denne animasjonen kan være forstyrrende for noen brukere.",
+ "translation_status": "Sjekk global oversettelsesstatus",
+ "keyboard_shortcuts_enabled": "Aktiver tastatursnarveier",
+ "keyboard_shortcuts_enabled_description": "Tastatursnarveier kan deaktiveres hvis de er i konflikt med andre nettleser- eller systemsnarveier"
},
"i18n": {
"missing_keys": "{count} manglende oversettelse | {count} manglende oversettelser",
@@ -122,6 +179,13 @@
"edit_on_github": "Rediger på GitHub",
"view_guide": "Oversettelsesguide"
},
+ "error": {
+ "401": "Ikke autorisert",
+ "404": "Side ble ikke funnet",
+ "500": "Intern serverfeil",
+ "503": "Tjenesten er utilgjengelig",
+ "default": "Noe gikk galt"
+ },
"common": {
"loading": "Laster...",
"loading_more": "Laster mer...",
@@ -145,8 +209,42 @@
"scroll_to_top": "Rull til toppen",
"view_on": {
"npm": "vis på npm",
- "github": "Vis på GitHub"
- }
+ "github": "Vis på GitHub",
+ "gitlab": "Vis på GitLab",
+ "bitbucket": "Vis på Bitbucket",
+ "codeberg": "Vis på Codeberg",
+ "git_repo": "Vis på Git-repositorium",
+ "forgejo": "Vis på Forgejo",
+ "gitea": "Vis på Gitea",
+ "gitee": "Vis på Gitee",
+ "radicle": "Vis på Radicle",
+ "sourcehut": "Vis på SourceHut",
+ "tangled": "Vis på Tangled"
+ },
+ "or": "eller",
+ "cancel": "Avbryt",
+ "save": "Lagre",
+ "edit": "Rediger",
+ "error": "Feil",
+ "collapse": "Skjul",
+ "expand": "Utvid"
+ },
+ "profile": {
+ "invite": {
+ "message": "Det ser ikke ut som de bruker npmx ennå. Vil du fortelle dem om det?",
+ "share_button": "Del på Bluesky",
+ "compose_text": "Hei {'@'}{handle}! Har du sjekket ut npmx.dev ennå? Det er en leser for npm-registeret som er rask, moderne og åpen kildekode.\nhttps://npmx.dev"
+ },
+ "display_name": "Visningsnavn",
+ "description": "Beskrivelse",
+ "no_description": "Ingen beskrivelse",
+ "website": "Nettsted",
+ "website_placeholder": "https://eksempel.no",
+ "likes": "Likerklikk",
+ "seo_title": "{handle} - npmx",
+ "seo_description": "npmx-profil av {handle}",
+ "not_found": "Profil ikke funnet",
+ "not_found_message": "Profilen for {handle} ble ikke funnet."
},
"package": {
"not_found": "Pakke ikke funnet",
@@ -160,6 +258,13 @@
"version": "Denne versjonen er utfaset.",
"no_reason": "Ingen årsak oppgitt"
},
+ "size_increase": {
+ "title_size": "Betydelig størrelsesøkning siden v{version}",
+ "title_deps": "Betydelig økning i antall avhengigheter siden v{version}",
+ "title_both": "Betydelig økning i størrelse og avhengigheter siden v{version}",
+ "size": "Installasjonsstørrelse økt med {percent} ({size} større)",
+ "deps": "{count} flere avhengigheter"
+ },
"replacement": {
"title": "Du trenger kanskje ikke denne avhengigheten.",
"native": "Denne kan erstattes med {replacement}, tilgjengelig siden Node {nodeVersion}.",
@@ -201,7 +306,8 @@
"refs": "{count} ref | {count} referanser",
"assets": "{count} ressurs | {count} ressurser"
},
- "view_source": "Vis kildekode"
+ "view_source": "Vis kildekode",
+ "skills_cli": "skills-kommandolinje"
},
"links": {
"repo": "repo",
@@ -211,7 +317,9 @@
"code": "kode",
"docs": "dok",
"fund": "støtt",
- "compare": "sammenlign"
+ "compare": "sammenlign",
+ "main": "hoved",
+ "compare_this_package": "sammenlign denne pakken"
},
"likes": {
"like": "Lik denne pakken",
@@ -219,13 +327,22 @@
},
"docs": {
"not_available": "Dokumentasjon ikke tilgjengelig",
- "not_available_detail": "Vi kunne ikke generere dokumentasjon for denne versjonen."
+ "not_available_detail": "Vi kunne ikke generere dokumentasjon for denne versjonen.",
+ "contents": "Innhold",
+ "default_not_available": "Dokumentasjon er ikke tilgjengelig for denne versjonen.",
+ "page_title": "API-dokumentasjon - npmx",
+ "page_title_name": "{name}-dokumentasjon - npmx",
+ "page_title_version": "{name}-dokumentasjon - npmx",
+ "og_title": "{name} - Dokumentasjon",
+ "view_package": "Vis pakke"
},
"get_started": {
"title": "Kom i gang",
"pm_label": "Pakkebehandler",
"copy_command": "Kopier installeringskommando",
- "view_types": "Vis {package}"
+ "view_types": "Vis {package}",
+ "copy_dev_command": "Kopier dev-installeringskommando",
+ "dev_dependency_hint": "Installeres vanligvis som en utviklingsavhengighet"
},
"create": {
"title": "Opprett nytt prosjekt",
@@ -249,8 +366,27 @@
},
"copy_as_markdown": "Kopier README som Markdown"
},
- "provenance_section": {},
- "security_downgrade": {},
+ "provenance_section": {
+ "title": "Opprinnelse",
+ "built_and_signed_on": "Bygget og signert på {provider}",
+ "view_build_summary": "Vis byggeoppsummering",
+ "source_commit": "Kilde-commit",
+ "build_file": "Byggefil",
+ "public_ledger": "Offentlig hovedbok",
+ "transparency_log_entry": "Transparensloggoppføring",
+ "view_more_details": "Vis flere detaljer",
+ "error_loading": "Kunne ikke laste opprinnelsesdetaljer"
+ },
+ "security_downgrade": {
+ "title": "Tillitsnedgradering",
+ "description_to_none_provenance": "Denne versjonen ble publisert uten {provenance}.",
+ "description_to_none_trustedPublisher": "Denne versjonen ble publisert uten {trustedPublishing}.",
+ "description_to_provenance_trustedPublisher": "Denne versjonen bruker {provenance} men ikke {trustedPublishing}.",
+ "fallback_install_provenance": "Installeringskommandoer er låst til {version}, siste versjon med opprinnelse.",
+ "fallback_install_trustedPublisher": "Installeringskommandoer er låst til {version}, siste versjon med pålitelig publisering.",
+ "provenance_link_text": "opprinnelse",
+ "trusted_publishing_link_text": "pålitelig publisering"
+ },
"keywords_title": "Nøkkelord",
"compatibility": "Kompatibilitet",
"card": {
@@ -258,7 +394,9 @@
"published": "Publisert",
"weekly_downloads": "Ukentlige nedlastinger",
"keywords": "Nøkkelord",
- "license": "Lisens"
+ "license": "Lisens",
+ "select": "Velg pakke",
+ "select_maximum": "Maksimalt {count} pakker kan velges"
},
"versions": {
"title": "Versjoner",
@@ -272,7 +410,40 @@
"more_tagged": "{count} flere tagget",
"all_covered": "Alle versjoner dekkes av taggene over",
"deprecated_title": "{version} (utfaset)",
- "view_all": "Vis {count} versjon | Vis alle {count} versjoner"
+ "view_all": "Vis {count} versjon | Vis alle {count} versjoner",
+ "copy_alt": {
+ "per_version_analysis": "{version}-versjonen ble lastet ned {downloads} ganger",
+ "general_description": "Stolpediagram som viser nedlastinger per versjon for {versions_count} {semver_grouping_mode}-versjoner av {package_name}-pakken, {date_range_label} fra {first_version}-versjonen til {last_version}-versjonen. Den mest nedlastede versjonen er {max_downloaded_version} med {max_version_downloads} nedlastinger. {per_version_analysis}. {watermark}."
+ },
+ "view_all_versions": "Vis alle versjoner",
+ "distribution_title": "Semver-gruppe",
+ "distribution_modal_title": "Versjoner",
+ "distribution_range_date_same_year": "fra {from} til {to}, {endYear}",
+ "distribution_range_date_multiple_years": "fra {from}, {startYear} til {to}, {endYear}",
+ "grouping_major": "Major",
+ "grouping_minor": "Minor",
+ "grouping_versions_title": "Versjoner",
+ "grouping_versions_about": "Om versjonsgruppering",
+ "grouping_versions_all": "Alle",
+ "grouping_versions_only_recent": "Kun nylige",
+ "grouping_usage_title": "Bruk",
+ "grouping_usage_about": "Om bruksgruppering",
+ "grouping_usage_all": "Alle",
+ "grouping_usage_most_used": "Mest brukt",
+ "recent_versions_only_tooltip": "Vis kun versjoner publisert det siste året.",
+ "show_low_usage_tooltip": "Inkluder versjonsgrupper med mindre enn 1% av totale nedlastinger.",
+ "y_axis_label": "Nedlastinger",
+ "filter_placeholder": "Filtrer etter semver (f.eks. ^3.0.0)",
+ "filter_invalid": "Ugyldig semver-område",
+ "filter_help": "Hjelp for semver-områdefilter",
+ "filter_tooltip": "Filtrer versjoner ved hjelp av et {link}. For eksempel viser ^3.0.0 alle 3.x-versjoner.",
+ "filter_tooltip_link": "semver-område",
+ "no_matches": "Ingen versjoner matcher dette området",
+ "page_title": "Versjonshistorikk",
+ "current_tags": "Nåværende tagger",
+ "version_filter_placeholder": "Filtrer versjoner…",
+ "version_filter_label": "Filtrer versjoner",
+ "no_match_filter": "Ingen versjoner matcher {filter}"
},
"dependencies": {
"title": "Avhengighet ({count}) | Avhengigheter ({count})",
@@ -282,7 +453,9 @@
"view_vulnerabilities": "Vis sårbarheter",
"outdated_major": "{count} major-versjon bak (nyeste: {latest}) | {count} major-versjoner bak (nyeste: {latest})",
"outdated_minor": "{count} minor-versjon bak (nyeste: {latest}) | {count} minor-versjoner bak (nyeste: {latest})",
- "outdated_patch": "Patch-oppdatering tilgjengelig (nyeste: {latest})"
+ "outdated_patch": "Patch-oppdatering tilgjengelig (nyeste: {latest})",
+ "has_replacement": "Denne avhengigheten har foreslåtte erstatninger",
+ "vulnerabilities_count": "{count} sårbarhet | {count} sårbarheter"
},
"peer_dependencies": {
"title": "Peer-avhengighet ({count}) | Peer-avhengigheter ({count})",
@@ -306,7 +479,8 @@
"cancel_add": "Avbryt å legge til eier",
"add_owner": "+ Legg til eier",
"show_more": "(vis {count} flere)",
- "show_less": "(vis færre)"
+ "show_less": "(vis færre)",
+ "maintainer_template": "{avatar} {char126}{name}"
},
"trends": {
"granularity": "Oppløsning",
@@ -325,12 +499,56 @@
"no_data": "Ingen data tilgjengelig",
"y_axis_label": "{granularity} {facet}",
"items": {
- "downloads": "Nedlastinger"
- }
+ "downloads": "Nedlastinger",
+ "likes": "Likerklikk",
+ "contributors": "Bidragsytere"
+ },
+ "copy_alt": {
+ "trend_none": "hovedsakelig flat",
+ "trend_strong": "sterk",
+ "trend_weak": "svak",
+ "trend_undefined": "udefinert (utilstrekkelig data)",
+ "button_label": "Kopier alternativ tekst",
+ "watermark": "Nederst står det et vannmerke: «./npmx en rask, moderne leser for npm-registeret»",
+ "analysis": "{package_name} starter på {start_value} og slutter på {end_value}, og viser en {trend} trend med en stigning på {downloads_slope} nedlastinger per tidsintervall",
+ "estimation": "Den endelige verdien er et estimat basert på delvise data for gjeldende periode.",
+ "estimations": "De endelige verdiene er estimater basert på delvise data for gjeldende periode.",
+ "compare": "Linjediagram for sammenligning av pakkenedlastinger for: {packages}.",
+ "single_package": "Linjediagram for nedlastinger av {package}-pakken.",
+ "general_description": "Y-aksen representerer antall nedlastinger. X-aksen representerer datoområdet, fra {start_date} til {end_date}, med en {granularity} tidsperiode.{estimation_notice} {packages_analysis}. {watermark}.",
+ "facet_bar_general_description": "Horisontalt stolpediagram for: {packages}, sammenligner {facet} ({description}). {facet_analysis} {watermark}.",
+ "facet_bar_analysis": "{package_name} har en verdi på {value}."
+ },
+ "chart_assistive_text": {
+ "keyboard_navigation_horizontal": "Bruk venstre og høyre piltaster for å bla gjennom datapunkter.",
+ "keyboard_navigation_vertical": "Bruk opp og ned piltaster for å bla gjennom datapunkter.",
+ "table_available": "En datatabell for dette diagrammet er tilgjengelig nedenfor.",
+ "table_caption": "Diagramdatatabell"
+ },
+ "toggle_stack_mode": "Veksle stablingsmodus",
+ "open_options": "Åpne alternativer",
+ "close_options": "Lukk alternativer",
+ "facet": "Fasett",
+ "title": "Trender",
+ "contributors_skip": "Ikke vist i Bidragsytere (ingen GitHub-repo):",
+ "data_correction": "Datakorrigering",
+ "average_window": "Gjennomsnittsvindu",
+ "smoothing": "Utjevning",
+ "prediction": "Prediksjon",
+ "known_anomalies": "Kjente anomalier",
+ "known_anomalies_description": "Interpolerer over kjente nedlastingstopper forårsaket av roboter eller CI-problemer.",
+ "known_anomalies_ranges": "Anomaliområder",
+ "known_anomalies_range": "Fra {start} til {end}",
+ "known_anomalies_range_named": "{packageName}: fra {start} til {end}",
+ "known_anomalies_none": "Ingen kjente anomalier for denne pakken. | Ingen kjente anomalier for disse pakkene.",
+ "known_anomalies_contribute": "Bidra med anomalidata",
+ "apply_correction": "Bruk korrigering"
},
"downloads": {
"title": "Ukentlige nedlastinger",
- "community_distribution": "Vis distribusjon av bruk i fellesskapet"
+ "community_distribution": "Vis distribusjon av bruk i fellesskapet",
+ "subtitle": "På tvers av alle versjoner",
+ "sparkline_nav_hint": "Bruk ← →"
},
"install_scripts": {
"title": "Installasjonsskript",
@@ -349,7 +567,8 @@
"types_label": "Typer",
"types_included": "Typer inkludert",
"types_available": "Typer tilgjengelig via {package}",
- "no_types": "Ingen TypeScript-typer"
+ "no_types": "Ingen TypeScript-typer",
+ "wasm": "Har WebAssembly"
},
"license": {
"view_spdx": "Vis lisenstekst på SPDX",
@@ -367,7 +586,8 @@
"high": "høy",
"moderate": "moderat",
"low": "lav"
- }
+ },
+ "fixed_in_title": "Fikset i versjon {version}"
},
"deprecated": {
"label": "Utfaset",
@@ -418,6 +638,10 @@
"b": "{size} B",
"kb": "{size} kB",
"mb": "{size} MB"
+ },
+ "download": {
+ "button": "Last ned",
+ "tarball": "Last ned tarball som .tar.gz"
}
},
"connector": {
@@ -438,7 +662,8 @@
"warning": "ADVARSEL",
"warning_text": "Dette gir npmx tilgang til din npm CLI. Koble kun til nettsteder du stoler på.",
"connect": "Koble til",
- "connecting": "Kobler til..."
+ "connecting": "Kobler til...",
+ "auto_open_url": "Åpne autentiseringssiden automatisk"
}
},
"operations": {
@@ -462,7 +687,9 @@
"executing": "Utfører...",
"log": "Logg",
"log_label": "Fullførte operasjoner logg",
- "remove_from_log": "Fjern fra logg"
+ "remove_from_log": "Fjern fra logg",
+ "retry_web_auth": "Prøv igjen med nettautentisering",
+ "open_web_auth": "Åpne nettautentiseringslenke"
}
},
"org": {
@@ -588,7 +815,8 @@
"publishing": "Publiserer...",
"checking": "Sjekker tilgjengelighet...",
"failed_to_check": "Kunne ikke sjekke navnetilgjengelighet",
- "failed_to_claim": "Kunne ikke gjøre krav på pakke"
+ "failed_to_claim": "Kunne ikke gjøre krav på pakke",
+ "missing_permission": "Du har ikke tillatelse til å legge til en pakke i scope {'@'}{scope}."
}
},
"code": {
@@ -618,7 +846,9 @@
"preview": "forhåndsvisning",
"code": "kode"
},
- "file_path": "Filsti"
+ "file_path": "Filsti",
+ "binary_file": "Binærfil",
+ "binary_rendering_warning": "Filtypen «{contentType}» støttes ikke for forhåndsvisning."
},
"badges": {
"provenance": {
@@ -691,11 +921,7 @@
"downloads_month": "Nedlastinger/mnd",
"downloads_year": "Nedlastinger/år",
"published": "Sist publisert",
- "name": "Navn",
- "quality": "Kvalitet",
- "popularity": "Popularitet",
- "maintenance": "Vedlikehold",
- "score": "Poengsum"
+ "name": "Navn"
},
"columns": {
"title": "Kolonner",
@@ -709,11 +935,8 @@
"published": "Sist publisert",
"maintainers": "Vedlikeholdere",
"keywords": "Nøkkelord",
- "quality_score": "Kvalitetspoeng",
- "popularity_score": "Popularitetspoeng",
- "maintenance_score": "Vedlikeholdspoeng",
- "combined_score": "Kombinert poengsum",
- "security": "Sikkerhet"
+ "security": "Sikkerhet",
+ "selection": "Velg pakke"
},
"view_mode": {
"label": "Visningsmodus",
@@ -740,7 +963,9 @@
"security_warning": "Sikkerhetsadvarsel",
"secure": "Sikker",
"no_packages": "Ingen pakker funnet"
- }
+ },
+ "view_selected": "Vis valgte",
+ "clear_selected_label": "Fjern valgte"
},
"about": {
"title": "Om",
@@ -769,7 +994,20 @@
"managers": "pakkebehandlere"
}
},
- "team": {},
+ "sponsors": {
+ "title": "Sponsorer"
+ },
+ "oss_partners": {
+ "title": "OSS-partnere"
+ },
+ "team": {
+ "title": "Team",
+ "governance": "Styring",
+ "role_steward": "forvalter",
+ "role_maintainer": "vedlikeholder",
+ "sponsor": "sponsor",
+ "sponsor_aria": "Sponser {name} på GitHub"
+ },
"contributors": {
"title": "{count} Bidragsyter | {count} Bidragsytere",
"description": "npmx er fullstendig åpen kildekode, bygget av et fantastisk fellesskap av bidragsytere. Bli med oss og la oss bygge npm-opplevelsen vi alltid har ønsket oss, sammen.",
@@ -789,6 +1027,11 @@
"description": "Chat, still spørsmål og del ideer.",
"cta": "Bli med på Discord"
},
+ "builders": {
+ "title": "Hjelp til med å bygge npmx",
+ "description": "Bli med utviklerne som former fremtiden til npmx.",
+ "cta": "Bli med på Builders Discord"
+ },
"follow": {
"title": "Hold deg oppdatert",
"description": "Få med deg det siste om npmx.",
@@ -821,7 +1064,8 @@
"connect_bluesky": "Koble til med Bluesky",
"what_is_atmosphere": "Hva er en Atmosphere-konto?",
"atmosphere_explanation": "{npmx} bruker {atproto} for å drive mange av sine sosiale funksjoner, slik at brukere kan eie sine egne data og bruke én konto for alle kompatible applikasjoner. Når du oppretter en konto, kan du bruke andre apper som {bluesky} og {tangled} med samme konto.",
- "default_input_error": "Vennligst skriv inn et gyldig brukernavn, DID eller en full PDS-URL"
+ "default_input_error": "Vennligst skriv inn et gyldig brukernavn, DID eller en full PDS-URL",
+ "profile": "Profil"
}
},
"header": {
@@ -841,7 +1085,8 @@
"error": "Kunne ikke laste organisasjoner",
"empty": "Ingen organisasjoner funnet",
"view_all": "Vis alle"
- }
+ },
+ "pr": "Åpne GitHub pull request #{prNumber}"
},
"compare": {
"packages": {
@@ -857,7 +1102,12 @@
"loading": "Laster pakkedata...",
"error": "Kunne ikke laste pakkedata. Vennligst prøv igjen.",
"empty_title": "Velg pakker å sammenligne",
- "empty_description": "Søk og legg til minst 2 pakker ovenfor for å se en side-om-side sammenligning av deres metrikker."
+ "empty_description": "Søk og legg til minst 2 pakker ovenfor for å se en side-om-side sammenligning av deres metrikker.",
+ "copy_as_markdown": "Kopier tabell",
+ "table_view": "Tabell",
+ "charts_view": "Diagrammer",
+ "bar_chart_nav_hint": "Bruk ↑ ↓",
+ "line_chart_nav_hint": "Bruk ← →"
},
"selector": {
"search_label": "Søk etter pakker",
@@ -878,14 +1128,11 @@
"add_column": "Legg til ingen avhengighet-kolonne i sammenligningen"
},
"facets": {
- "group_label": "Sammenligningsfasetter",
"all": "alle",
"none": "ingen",
"coming_soon": "Kommer snart",
"select_all": "Velg alle fasetter",
"deselect_all": "Fravelg alle fasetter",
- "select_category": "Velg alle {category}-fasetter",
- "deselect_category": "Fravelg alle {category}-fasetter",
"binary_only_tooltip": "Denne pakken eksponerer binærfiler og ingen eksporter",
"categories": {
"performance": "Ytelse",
@@ -959,28 +1206,316 @@
"up_to_you": "Opp til deg!"
},
"trends": {
- "title": "Ukentlige nedlastinger"
- }
- }
+ "title": "Sammenlign trender"
+ },
+ "select_all_category_facets": "Velg alle {category}-fasetter",
+ "deselect_all_category_facets": "Fravelg alle {category}-fasetter",
+ "selected_all_category_facets": "Valgte alle {category}-fasetter",
+ "deselected_all_category_facets": "Fravalgte alle {category}-fasetter"
+ },
+ "version_invalid_url_format": {
+ "hint": "Ugyldig sammenlignings-URL. Bruk formatet: {0}",
+ "from_version": "fra",
+ "to_version": "til"
+ },
+ "file_filter_option": {
+ "all": "Alle ({count})",
+ "added": "Lagt til ({count})",
+ "removed": "Fjernet ({count})",
+ "modified": "Endret ({count})"
+ },
+ "filter": {
+ "added": "lagt til",
+ "removed": "fjernet",
+ "modified": "endret"
+ },
+ "file_changes": "Filendringer",
+ "files_count": "{count} fil | {count} filer",
+ "lines_hidden": "{count} linje skjult | {count} linjer skjult",
+ "file_too_large": "Filen er for stor til å sammenligne",
+ "file_size_warning": "{size} overstiger grensen på 250KB for sammenligning",
+ "compare_versions": "diff",
+ "compare_versions_title": "Sammenlign med nyeste versjon",
+ "comparing_versions_label": "Sammenligner versjoner...",
+ "version_back_to_package": "Tilbake til pakke",
+ "version_error_message": "Kunne ikke sammenligne versjoner.",
+ "version_selector_title": "Sammenlign med versjon",
+ "summary": "Sammendrag",
+ "deps_count": "{count} avh. | {count} avh.",
+ "dependencies": "Avhengigheter",
+ "dev_dependencies": "Utviklingsavhengigheter",
+ "peer_dependencies": "Peer-avhengigheter",
+ "optional_dependencies": "Valgfrie avhengigheter",
+ "no_dependency_changes": "Ingen avhengighetsendringer",
+ "search_files_placeholder": "Søk i filer...",
+ "no_files_all": "Ingen filer",
+ "no_files_search": "Ingen filer matcher «{query}»",
+ "no_files_filtered": "Ingen {filter} filer",
+ "files_button": "Filer",
+ "select_file_prompt": "Velg en fil fra sidepanelet for å se dens diff",
+ "close_files_panel": "Lukk filpanelet",
+ "filter_files_label": "Filtrer filer etter endringstype",
+ "change_ratio": "Endringsforhold",
+ "char_edits": "Tegnredigeringer",
+ "diff_distance": "Diff-avstand",
+ "loading_diff": "Laster diff...",
+ "loading_diff_error": "Kunne ikke laste diff",
+ "merge_modified_lines": "Slå sammen endrede linjer",
+ "no_content_changes": "Ingen innholdsendringer oppdaget",
+ "options": "Alternativer",
+ "view_file": "Vis fil",
+ "view_in_code_browser": "Vis i kodenettleser",
+ "word_wrap": "Tekstbryting"
+ },
+ "pds": {
+ "join": {
+ "title": "Bli med i fellesskapet",
+ "description": "Enten du oppretter din første konto på atmosfæren eller migrerer en eksisterende, hører du hjemme her. Du kan migrere din nåværende konto uten å miste håndtaket, innleggene eller følgerne dine.",
+ "migrate": "Migrer med PDS MOOver"
+ },
+ "server": {
+ "title": "Serverdetaljer",
+ "location_label": "Plassering:",
+ "location_value": "Nürnberg, Tyskland",
+ "infrastructure_label": "Infrastruktur:",
+ "infrastructure_value": "Hostet på Hetzner",
+ "privacy_label": "Personvern:",
+ "privacy_value": "Underlagt strenge EU-personvernlover",
+ "learn_more": "Lær hvordan npmx bruker Atmosphere"
+ },
+ "community": {
+ "title": "Hvem er her",
+ "description": "Noen av de {count} kontoene som allerede kaller npmx.social hjem:",
+ "loading": "Laster PDS-fellesskap...",
+ "error": "Kunne ikke laste PDS-fellesskap.",
+ "empty": "Ingen fellesskapsmedlemmer å vise.",
+ "view_profile": "Vis {handle}s profil",
+ "new_accounts": "...pluss {count} flere som er nye i atmosfæren"
+ },
+ "title": "npmx.social",
+ "meta_description": "Den offisielle AT Protocol Personal Data Server (PDS) for npmx-fellesskapet."
},
"privacy_policy": {
"cookies": {
- "what_are": {},
- "types": {},
- "local_storage": {},
- "management": {}
- },
- "analytics": {},
- "authenticated": {},
- "data_retention": {},
- "your_rights": {},
- "contact": {},
- "changes": {}
+ "what_are": {
+ "title": "Hva er informasjonskapsler?",
+ "p1": "Informasjonskapsler er små tekstfiler som lagres på enheten din når du besøker et nettsted. Formålet er å forbedre nettleseropplevelsen din ved å huske visse preferanser og innstillinger."
+ },
+ "types": {
+ "title": "Hvilke informasjonskapsler bruker vi?",
+ "p1": "Vi bruker kun {bold} for formål som er strengt nødvendige for nettstedets funksjonalitet. Vi bruker ikke tredjeparts- eller reklamekapsler.",
+ "bold": "nødvendige tekniske informasjonskapsler",
+ "li1": "{li11}{separator} {li12}",
+ "li2": "{li21}{separator} {li22}",
+ "separator": ":",
+ "cookie_vdpl": "__vdpl",
+ "cookie_vdpl_desc": "Denne informasjonskapselen brukes av vår hostingleverandør (Vercel) for skjevhetsbeskyttelse. Den sikrer at du henter ressurser fra riktig distribusjonsversjon hvis en ny oppdatering utgis mens du surfer. Den sporer deg ikke.",
+ "cookie_h3": "h3",
+ "cookie_h3_desc": "Dette er vår sikre øktkapsel. Den lagrer OAuth-tilgangstokenet når du kobler til din Atmosphere-konto. Den er nødvendig for å opprettholde din autentiserte økt."
+ },
+ "local_storage": {
+ "title": "Lokal lagring",
+ "p1": "I tillegg til øktkapsler bruker vi nettleserens {bold} for å lagre visningspreferansene dine. Dette lar oss huske temaet (lys/mørk) og noen andre {settings} du har valgt, slik at du ikke trenger å konfigurere dem på nytt ved hvert besøk.",
+ "bold": "Lokal lagring",
+ "p2": "Denne informasjonen er rent funksjonell, lagres kun på enheten din, og {bold2}. Vi bruker den utelukkende for å forbedre opplevelsen din på nettstedet vårt.",
+ "bold2": "inneholder ingen personopplysninger og brukes ikke til å spore deg",
+ "settings": "innstillinger"
+ },
+ "management": {
+ "title": "Administrere informasjonskapsler",
+ "p1": "Du kan konfigurere nettleseren din til å godta, avvise eller slette informasjonskapsler etter dine preferanser. Vær imidlertid oppmerksom på at {bold}.",
+ "bold": "avvisning av nødvendige informasjonskapsler kan forhindre full tilgang til applikasjonen",
+ "p2": "Nedenfor er lenker med instruksjoner for administrasjon av informasjonskapsler i de mest brukte nettleserne:",
+ "chrome": "Google Chrome (åpnes i et nytt vindu)",
+ "firefox": "Mozilla Firefox (åpnes i et nytt vindu)",
+ "edge": "Microsoft Edge (åpnes i et nytt vindu)"
+ }
+ },
+ "analytics": {
+ "title": "Analyse",
+ "p1": "Vi bruker {bold} for å forstå hvordan besøkende bruker nettstedet vårt. Dette hjelper oss med å forbedre brukeropplevelsen og identifisere problemer.",
+ "bold": "Vercel Web Analytics",
+ "p2": "Vercel Analytics er designet med personvern i tankene:",
+ "li1": "Den bruker ikke informasjonskapsler",
+ "li2": "Den samler ikke inn personlige identifikatorer",
+ "li3": "Den sporer ikke brukere på tvers av nettsteder",
+ "li4": "Alle data er aggregerte og anonymiserte",
+ "p3": "Den eneste informasjonen som samles inn inkluderer: side-URLer, henviser, land/region, enhetstype, nettleser og operativsystem. Disse dataene kan ikke brukes til å identifisere individuelle brukere."
+ },
+ "authenticated": {
+ "title": "Autentiserte brukere",
+ "p1": "Når du kobler din {bold}-konto til npmx, lagrer vi ditt OAuth-tilgangstoken i en sikker, HTTP-only øktkapsel. Dette tokenet brukes kun til å autentisere forespørsler på dine vegne.",
+ "bold": "Atmosphere",
+ "p2": "Vi lagrer ikke legitimasjonen din, og vi har ikke tilgang til data utover det som er nødvendig for å tilby funksjonene du bruker. Du kan koble fra kontoen din når som helst fra {settings}-siden.",
+ "settings": "innstillinger"
+ },
+ "data_retention": {
+ "title": "Dataoppbevaring",
+ "p1": "Øktkapsler slettes automatisk når du lukker nettleseren eller etter en periode med inaktivitet. Lokale lagringspreferanser forblir på enheten din til du tømmer nettleserdataene dine. Analysedata beholdes i aggregert form og kan ikke kobles til individuelle brukere."
+ },
+ "your_rights": {
+ "title": "Dine rettigheter",
+ "p1": "Du har rett til å:",
+ "li1": "Få tilgang til informasjon om hvilke data vi samler inn",
+ "li2": "Tømme lokal lagring og informasjonskapsler når som helst",
+ "li3": "Koble fra din autentiserte økt",
+ "li4": "Be om informasjon om våre datapraksiser",
+ "p2": "Siden vi ikke samler inn personopplysninger, er det vanligvis ingen personlig informasjon å slette eller eksportere."
+ },
+ "contact": {
+ "title": "Kontakt oss",
+ "p1": "For spørsmål eller bekymringer om denne personvernpolicyen kan du kontakte oss ved å opprette en sak på vår {link}.",
+ "link": "GitHub-repositorium"
+ },
+ "changes": {
+ "title": "Endringer i denne policyen",
+ "p1": "Vi kan oppdatere denne personvernpolicyen fra tid til annen. Eventuelle endringer vil bli publisert på denne siden med en oppdatert revisjonsdato."
+ },
+ "title": "personvernpolicy",
+ "last_updated": "Sist oppdatert: {date}",
+ "welcome": "Velkommen til {app}. Vi er forpliktet til å beskytte personvernet ditt. Denne policyen forklarer hvilke data vi samler inn, hvordan vi bruker dem, og dine rettigheter angående informasjonen din."
},
"a11y": {
- "approach": {},
- "measures": {},
- "limitations": {},
- "contact": {}
+ "approach": {
+ "title": "Vår tilnærming",
+ "p1": "Vi prøver å følge retningslinjene for tilgjengelig webinnhold (WCAG) 2.2 og bruker dem som referanse når vi bygger funksjoner. Vi hevder ikke full samsvar med noe nivå av WCAG — tilgjengelighet er en kontinuerlig prosess og det er alltid mer arbeid å gjøre.",
+ "p2": "Dette nettstedet er et {about}. Tilgjengelighetsforbedringer gjøres gradvis som en del av vår vanlige utvikling.",
+ "about_link": "åpen kildekode, fellesskapsdrevet prosjekt"
+ },
+ "measures": {
+ "title": "Hva vi gjør",
+ "p1": "Noen av tingene vi har som mål å gjøre på tvers av nettstedet:",
+ "li1": "Bruke semantisk HTML og ARIA-attributter der det er hensiktsmessig.",
+ "li2": "Bruke relative tekststørrelser slik at du kan justere dem i nettleseren din.",
+ "li3": "Støtte tastaturnavigasjon i hele grensesnittet.",
+ "li4": "Respektere prefers-reduced-motion og prefers-color-scheme mediespørringer.",
+ "li5": "Designe med tilstrekkelig fargekontrast i tankene.",
+ "li6": "Sikre at essensielt innhold er tilgjengelig uten JavaScript, selv om noen interaktive funksjoner krever det."
+ },
+ "limitations": {
+ "title": "Kjente begrensninger",
+ "p1": "Noen deler av nettstedet — spesielt tredjepartsinnhold som pakke-README-er — oppfyller kanskje ikke tilgjengelighetsstandarder. Vi jobber med å forbedre disse områdene over tid."
+ },
+ "contact": {
+ "title": "Tilbakemelding",
+ "p1": "Hvis du støter på en tilgjengelighetsbarriere på {app}, vennligst gi oss beskjed ved å opprette en sak på vår {link}. Vi tar disse rapportene på alvor og vil gjøre vårt beste for å løse dem.",
+ "link": "GitHub-repositorium"
+ },
+ "title": "tilgjengelighet",
+ "footer_title": "a11y",
+ "welcome": "Vi ønsker at {app} skal kunne brukes av så mange mennesker som mulig."
+ },
+ "translation_status": {
+ "table": {
+ "file": "Fil",
+ "status": "Status",
+ "error": "Feil ved lasting av filliste.",
+ "empty": "Ingen filer funnet",
+ "file_link": "Rediger {file} ({lang}) på GitHub"
+ },
+ "title": "oversettelsesstatus",
+ "generated_at": "Genereringsdato: {date}",
+ "welcome": "Hvis du er interessert i å hjelpe oss med å oversette {npmx} til ett av språkene listet nedenfor, har du kommet til rett sted! Denne automatisk oppdaterende siden lister alltid alt innholdet som kan trenge din hjelp akkurat nå.",
+ "p1": "Vi bruker {lang} som standardspråk, med totalt {count}. Hvis du ønsker å hjelpe med å legge til oversettelser, finn språket i {bylang} og utvid detaljene.",
+ "p1_lang": "Amerikansk engelsk (en-US)",
+ "p1_count": "0 meldinger | 1 melding | {count} meldinger",
+ "p2": "Før du begynner, vennligst les vår {guide} for å lære om oversettelsesprosessen vår og hvordan du kan bli involvert.",
+ "guide": "lokaliseringsguide (i18n)",
+ "by_locale": "Oversettelsesfremdrift etter språk",
+ "by_file": "Oversettelsesfremdrift etter fil",
+ "complete_text": "Denne oversettelsen er fullført, fantastisk jobb!",
+ "missing_text": "mangler",
+ "missing_keys": "Det er ingen manglende oversettelser | Manglende oversettelse | Manglende oversettelser",
+ "progress_label": "Fremdriftsstatus for {locale}"
+ },
+ "action_bar": {
+ "title": "handlingslinje",
+ "selection": "0 valgt | 1 valgt | {count} valgt",
+ "shortcut": "Trykk «{key}» for å fokusere handlinger",
+ "button_close_aria_label": "Lukk handlingslinje"
+ },
+ "vacations": {
+ "title": "på ferie",
+ "meta_description": "npmx-teamet ladet opp. Discord åpnet igjen etter en uke.",
+ "heading": "lader opp",
+ "subtitle": "vi bygde npmx i et tempo som kostet {some} av oss søvn. vi ønsket ikke at det skulle være normen! så vi tok en uke fri. sammen.",
+ "illustration_alt": "en enkelt rad med koselige ikoner",
+ "poke_log": "Poke bålet",
+ "what": {
+ "title": "hva skjedde",
+ "p1": "discord var stengt {dates}.",
+ "dates": "14. – 21. februar",
+ "p2": "alle invitasjonslenker var borte og kanaler var låst – bortsett fra {garden}, som forble åpen for folk som ønsket å fortsette å henge.",
+ "garden": "#garden"
+ },
+ "meantime": {
+ "title": "i mellomtiden",
+ "p1": "{site} og {repo} forble åpne – folk gravde fortsatt inn, meldte inn noen saker, åpnet noen PRer, men hovedsakelig tilbrakte alle tid et sted nær en koselig peis.",
+ "repo_link": "repoet"
+ },
+ "return": {
+ "title": "vi kom tilbake!",
+ "p1": "vi kom tilbake oppladet og klare for den siste innspurten til 3. mars. {social} for oppdateringer.",
+ "social_link": "følg oss på Bluesky"
+ },
+ "stats": {
+ "contributors": "Bidragsytere",
+ "commits": "Commits",
+ "pr": "PRer sammenslått",
+ "subtitle": {
+ "some": "noen",
+ "all": "alle"
+ }
+ }
+ },
+ "logo_menu": {
+ "copy_svg": "Kopier logo som SVG",
+ "copied": "Kopiert!",
+ "browse_brand": "Utforsk merkevarekit"
+ },
+ "brand": {
+ "title": "Merkevare",
+ "heading": "merkevare",
+ "meta_description": "npmx merkevareretningslinjer, logoer, farger og typografi for bruk i presse og media.",
+ "intro": "Ressurser og retningslinjer for bruk av npmx-merkevaren i dine prosjekter, artikler og media.",
+ "logos": {
+ "title": "logoer",
+ "description": "Last ned npmx-logoer i SVG- og PNG-format. Bruk riktig variant for bakgrunnen din.",
+ "wordmark": "FULL ORDLOGO",
+ "wordmark_alt": "npmx full ordlogo med blå skråstrek på mørk bakgrunn",
+ "wordmark_light_alt": "npmx full ordlogo med aksentskråstrek på lys bakgrunn",
+ "mark": "LOGOMERKE",
+ "mark_alt": "npmx logomerke med prikk og skråstrek på mørk bakgrunn",
+ "mark_light_alt": "npmx logomerke med prikk og skråstrek på lys bakgrunn",
+ "on_dark": "på mørk",
+ "on_light": "på lys",
+ "download_svg": "SVG",
+ "download_png": "PNG",
+ "download_svg_aria": "Last ned {name} som SVG",
+ "download_png_aria": "Last ned {name} som PNG"
+ },
+ "customize": {
+ "title": "tilpass logoen din",
+ "description": "Forhåndsvis npmx-logoen med aksentfargen og bakgrunnen din. Forhåndsvisningen gjenspeiler dine nåværende innstillinger — velg en farge, veksle bakgrunn, og last ned.",
+ "accent_label": "aksent",
+ "bg_label": "bakgrunn",
+ "download_svg_aria": "Last ned tilpasset logo som SVG",
+ "download_png_aria": "Last ned tilpasset logo som PNG"
+ },
+ "typography": {
+ "title": "typografi",
+ "description": "npmx bruker Geist-skriftfamilien fra Vercel for både grensesnitt-tekst og kode.",
+ "sans": "Geist Sans",
+ "sans_desc": "Brukes til brødtekst og UI-elementer.",
+ "mono": "Geist Mono",
+ "mono_desc": "Brukes til kode, overskrifter og teknisk innhold.",
+ "pangram": "Høvansen får gull i sex-NM på Ibiza fjord",
+ "numbers": "0123456789"
+ },
+ "guidelines": {
+ "title": "bare en merknad",
+ "message": "Tilgjengelighet er viktig for oss, og vi vil gjerne at du følger oss i denne visjonen. Når du bruker nevnte media, sørg for at det er nok kontrast mot bakgrunnen, og ikke gå mindre enn 24px. Hvis du trenger andre ressurser eller tilleggsinformasjon om prosjektet, ta gjerne kontakt med oss på {link}.",
+ "discord_link_text": "chat.npmx.dev"
+ }
}
}
diff --git a/i18n/locales/ne-NP.json b/i18n/locales/ne-NP.json
index a996e03c80..58b5a3ffe9 100644
--- a/i18n/locales/ne-NP.json
+++ b/i18n/locales/ne-NP.json
@@ -54,6 +54,10 @@
"links": "लिङ्कहरू",
"tap_to_search": "खोज्न ट्याप गर्नुहोस्"
},
+ "blog": {
+ "author": {},
+ "atproto": {}
+ },
"settings": {
"title": "सेटिङ्स",
"tagline": "आफ्नो npmx अनुभव अनुकूल बनाउनुहोस्",
@@ -79,7 +83,8 @@
"label": "एक्सेन्ट रङहरू"
},
"clear_accent": "एक्सेन्ट रङ हटाउनुहोस्",
- "translation_progress": "अनुवाद प्रगति"
+ "translation_progress": "अनुवाद प्रगति",
+ "background_themes": {}
},
"i18n": {
"missing_keys": "{count} अनुवाद छुटेको छ | {count} अनुवादहरू छुटेका छन्",
@@ -89,6 +94,7 @@
"edit_on_github": "GitHub मा सम्पादन गर्नुहोस्",
"view_guide": "अनुवाद मार्गदर्शन"
},
+ "error": {},
"common": {
"loading": "लोड हुँदैछ...",
"loading_more": "अझै लोड हुँदैछ...",
@@ -115,6 +121,9 @@
"github": "GitHub मा हेर्नुहोस्"
}
},
+ "profile": {
+ "invite": {}
+ },
"package": {
"not_found": "प्याकेज फेला परेन",
"not_found_message": "प्याकेज फेला पार्न सकिएन।",
@@ -127,6 +136,7 @@
"version": "यो संस्करण अप्रचलित (deprecated) गरिएको छ।",
"no_reason": "कारण दिइएको छैन"
},
+ "size_increase": {},
"replacement": {
"title": "तपाईंलाई यो डिपेन्डेन्सी आवश्यक नपर्न सक्छ।",
"native": "Node {nodeVersion} देखि उपलब्ध {replacement} ले यसलाई प्रतिस्थापन गर्न सक्छ।",
@@ -208,7 +218,8 @@
"more_tagged": "{count} थप ट्याग गरिएको",
"all_covered": "माथिका ट्यागले सबै संस्करणहरू कभर गर्छन्",
"deprecated_title": "{version} (deprecated)",
- "view_all": "{count} संस्करण हेर्नुहोस् | सबै {count} संस्करणहरू हेर्नुहोस्"
+ "view_all": "{count} संस्करण हेर्नुहोस् | सबै {count} संस्करणहरू हेर्नुहोस्",
+ "copy_alt": {}
},
"dependencies": {
"title": "डिपेन्डेन्सीहरू ({count})",
@@ -257,7 +268,8 @@
"date_range_multiline": "{start}\nदेखि {end}",
"download_file": "{fileType} डाउनलोड गर्नुहोस्",
"toggle_annotator": "एनोटेटर टगल गर्नुहोस्",
- "items": {}
+ "items": {},
+ "copy_alt": {}
},
"downloads": {
"title": "साप्ताहिक डाउनलोड"
@@ -342,7 +354,8 @@
"name_asc": "नाम (A-Z)",
"name_desc": "नाम (Z-A)"
},
- "size": {}
+ "size": {},
+ "download": {}
},
"connector": {
"modal": {
@@ -608,11 +621,7 @@
"downloads_day": "डाउनलोड/दिन",
"downloads_month": "डाउनलोड/महिना",
"downloads_year": "डाउनलोड/वर्ष",
- "name": "नाम",
- "quality": "क्वालिटी",
- "popularity": "लोकप्रियता",
- "maintenance": "मेन्टेनेन्स",
- "score": "स्कोर"
+ "name": "नाम"
},
"columns": {
"title": "स्तम्भहरू",
@@ -625,10 +634,6 @@
"downloads": "डाउनलोड/हप्ता",
"maintainers": "मेन्टेनरहरू",
"keywords": "किवर्ड्स",
- "quality_score": "क्वालिटी स्कोर",
- "popularity_score": "लोकप्रियता स्कोर",
- "maintenance_score": "मेन्टेनेन्स स्कोर",
- "combined_score": "समग्र स्कोर",
"security": "सिक्युरिटी"
},
"view_mode": {
@@ -685,6 +690,8 @@
"managers": "म्यानेजरहरू बनाइरहेका छन्"
}
},
+ "sponsors": {},
+ "oss_partners": {},
"team": {},
"contributors": {
"title": "कन्ट्रिब्युटरहरू",
@@ -705,6 +712,7 @@
"description": "च्याट गर्नुहोस्, प्रश्न सोध्नुहोस्, र विचार साझा गर्नुहोस्।",
"cta": "Discord मा जोडिनुहोस्"
},
+ "builders": {},
"follow": {
"title": "अपडेट रहनुहोस्",
"description": "npmx का ताजा अपडेटहरू जान्नुहोस्।",
@@ -785,14 +793,11 @@
},
"no_dependency": {},
"facets": {
- "group_label": "तुलना पक्षहरू",
"all": "सबै",
"none": "कुनै पनि छैन",
"coming_soon": "छिट्टै आउँदैछ",
"select_all": "सबै पक्षहरू चयन गर्नुहोस्",
"deselect_all": "सबै पक्षहरू हटाउनुहोस्",
- "select_category": "सबै {category} पक्षहरू चयन गर्नुहोस्",
- "deselect_category": "सबै {category} पक्षहरू हटाउनुहोस्",
"categories": {
"performance": "परफर्मेन्स",
"health": "हेल्थ",
@@ -816,7 +821,15 @@
},
"values": {},
"trends": {}
- }
+ },
+ "version_invalid_url_format": {},
+ "file_filter_option": {},
+ "filter": {}
+ },
+ "pds": {
+ "join": {},
+ "server": {},
+ "community": {}
},
"privacy_policy": {
"cookies": {
@@ -837,5 +850,9 @@
"measures": {},
"limitations": {},
"contact": {}
- }
+ },
+ "translation_status": {
+ "table": {}
+ },
+ "action_bar": {}
}
diff --git a/i18n/locales/pl-PL.json b/i18n/locales/pl-PL.json
index 8c25224427..15d071ae0a 100644
--- a/i18n/locales/pl-PL.json
+++ b/i18n/locales/pl-PL.json
@@ -588,7 +588,8 @@
"b": "{size} B",
"kb": "{size} kB",
"mb": "{size} MB"
- }
+ },
+ "download": {}
},
"connector": {
"modal": {
@@ -865,11 +866,7 @@
"downloads_month": "Pobrania/mies.",
"downloads_year": "Pobrania/rok",
"published": "Ostatnio opublikowano",
- "name": "Nazwa",
- "quality": "Jakość",
- "popularity": "Popularność",
- "maintenance": "Utrzymanie",
- "score": "Wynik"
+ "name": "Nazwa"
},
"columns": {
"title": "Kolumny",
@@ -883,10 +880,6 @@
"published": "Ostatnio opublikowano",
"maintainers": "Opiekunowie",
"keywords": "Słowa kluczowe",
- "quality_score": "Wynik jakości",
- "popularity_score": "Wynik popularności",
- "maintenance_score": "Wynik utrzymania",
- "combined_score": "Wynik łączny",
"security": "Bezpieczeństwo"
},
"view_mode": {
@@ -1074,14 +1067,11 @@
"add_column": "Dodaj kolumnę z brakiem zależności do porównania"
},
"facets": {
- "group_label": "Aspekty porównania",
"all": "wszystkie",
"none": "brak",
"coming_soon": "Wkrótce",
"select_all": "Wybierz wszystkie aspekty",
"deselect_all": "Odznacz wszystkie aspekty",
- "select_category": "Wybierz wszystkie aspekty: {category}",
- "deselect_category": "Odznacz wszystkie aspekty: {category}",
"binary_only_tooltip": "Ten pakiet udostępnia tylko pliki binarne i nie ma eksportów",
"categories": {
"performance": "Wydajność",
@@ -1165,6 +1155,7 @@
"file_size_warning": "{size} przekracza limit dla porównań wynoszący 250KB",
"compare_versions": "porównaj",
"compare_versions_title": "Porównaj z najnowszą wersją",
+ "version_invalid_url_format": {},
"summary": "Podsumowanie",
"deps_count": "{count} zależności",
"dependencies": "Zależności",
@@ -1329,5 +1320,9 @@
"p1": "Jeśli napotkasz barierę dostępności w {app}, daj nam znać, otwierając zgłoszenie w naszym {link}. Traktujemy takie zgłoszenia poważnie i zrobimy wszystko, co w naszej mocy, aby rozwiązać problem.",
"link": "repozytorium GitHub"
}
- }
+ },
+ "translation_status": {
+ "table": {}
+ },
+ "action_bar": {}
}
diff --git a/i18n/locales/pt-BR.json b/i18n/locales/pt-BR.json
index f90b8a2943..f0fef7d598 100644
--- a/i18n/locales/pt-BR.json
+++ b/i18n/locales/pt-BR.json
@@ -599,7 +599,8 @@
"b": "{size} B",
"kb": "{size} KB",
"mb": "{size} MB"
- }
+ },
+ "download": {}
},
"connector": {
"modal": {
@@ -879,11 +880,7 @@
"downloads_month": "Downloads/mês",
"downloads_year": "Downloads/ano",
"published": "Última publicação",
- "name": "Nome",
- "quality": "Qualidade",
- "popularity": "Popularidade",
- "maintenance": "Manutenção",
- "score": "Pontuação"
+ "name": "Nome"
},
"columns": {
"title": "Colunas",
@@ -897,10 +894,6 @@
"published": "Última publicação",
"maintainers": "Mantenedores",
"keywords": "Palavras-chave",
- "quality_score": "Pontuação de qualidade",
- "popularity_score": "Pontuação de popularidade",
- "maintenance_score": "Pontuação de manutenção",
- "combined_score": "Pontuação combinada",
"security": "Segurança",
"selection": "Selecionar pacote"
},
@@ -1089,14 +1082,11 @@
"add_column": "Adicionar coluna sem dependência à comparação"
},
"facets": {
- "group_label": "Aspectos de comparação",
"all": "todos",
"none": "nenhum",
"coming_soon": "Em breve",
"select_all": "Selecionar todos os aspectos",
"deselect_all": "Desselecionar todos os aspectos",
- "select_category": "Selecionar todos os aspectos {category}",
- "deselect_category": "Desselecionar todos os aspectos {category}",
"binary_only_tooltip": "Este pacote expõe binários e nenhuma exportação",
"categories": {
"performance": "Performance",
@@ -1180,6 +1170,7 @@
"file_size_warning": "{size} excede o limite de 250 KB para comparação",
"compare_versions": "diferença",
"compare_versions_title": "Compare com a versão mais recente",
+ "version_invalid_url_format": {},
"version_selector_title": "Comparar com versão",
"summary": "Resumo",
"deps_count": "{count} dependência | {count} dependências",
@@ -1346,6 +1337,9 @@
"link": "Repositório GitHub"
}
},
+ "translation_status": {
+ "table": {}
+ },
"action_bar": {
"title": "Barra de ações",
"selection": "0 selecionados | 1 selecionado | {count} selecionados",
diff --git a/i18n/locales/ru-RU.json b/i18n/locales/ru-RU.json
index edb18a6447..3807b19ed9 100644
--- a/i18n/locales/ru-RU.json
+++ b/i18n/locales/ru-RU.json
@@ -574,7 +574,8 @@
"b": "{size} байт",
"kb": "{size} КБ",
"mb": "{size} МБ"
- }
+ },
+ "download": {}
},
"connector": {
"modal": {
@@ -851,11 +852,7 @@
"downloads_month": "Загрузок/мес",
"downloads_year": "Загрузок/год",
"published": "Опубликован",
- "name": "Имя",
- "quality": "Качество",
- "popularity": "Популярность",
- "maintenance": "Поддержка",
- "score": "Оценка"
+ "name": "Имя"
},
"columns": {
"title": "Столбцы",
@@ -869,10 +866,6 @@
"published": "Опубликован",
"maintainers": "Мейнтейнеры",
"keywords": "Ключевые слова",
- "quality_score": "Оценка качества",
- "popularity_score": "Оценка популярности",
- "maintenance_score": "Оценка поддержки",
- "combined_score": "Общая оценка",
"security": "Безопасность"
},
"view_mode": {
@@ -1058,14 +1051,11 @@
"add_column": "Добавить колонку «без зависимости» в сравнение"
},
"facets": {
- "group_label": "Параметры сравнения",
"all": "все",
"none": "ни одного",
"coming_soon": "Скоро появится",
"select_all": "Выбрать все параметры",
"deselect_all": "Снять выбор со всех",
- "select_category": "Выбрать все параметры в категории {category}",
- "deselect_category": "Снять выбор со всех в категории {category}",
"binary_only_tooltip": "Этот пакет предоставляет исполняемые файлы и не имеет экспортируемых модулей",
"categories": {
"performance": "Производительность",
@@ -1149,6 +1139,7 @@
"file_size_warning": "{size} превышает лимит в 250 КБ для сравнения",
"compare_versions": "сравнение",
"compare_versions_title": "Сравнить с последней версией",
+ "version_invalid_url_format": {},
"summary": "Сводка",
"deps_count": "зависимостей: {count}",
"dependencies": "Зависимости",
@@ -1313,5 +1304,9 @@
"p1": "Если вы столкнулись с какими-либо препятствиями при использовании {app}, пожалуйста, сообщите нам об этом, создав тикет (issue) в нашем {link}. Мы серьезно относимся к таким сообщениям и сделаем все возможное, чтобы исправить ситуацию.",
"link": "репозитории GitHub"
}
- }
+ },
+ "translation_status": {
+ "table": {}
+ },
+ "action_bar": {}
}
diff --git a/i18n/locales/ta-IN.json b/i18n/locales/ta-IN.json
index 335d4bc952..0f566ebfef 100644
--- a/i18n/locales/ta-IN.json
+++ b/i18n/locales/ta-IN.json
@@ -76,6 +76,10 @@
"links": "இணைப்புகள்",
"tap_to_search": "தேட தட்டவும்"
},
+ "blog": {
+ "author": {},
+ "atproto": {}
+ },
"settings": {
"title": "அமைப்புகள்",
"tagline": "உங்கள் npmx அனுபவத்தைத் தனிப்பயனாக்கு",
@@ -122,6 +126,7 @@
"edit_on_github": "GitHub-ல் திருத்து",
"view_guide": "மொழிபெயர்ப்பு வழிகாட்டி"
},
+ "error": {},
"common": {
"loading": "ஏற்றுகிறது...",
"loading_more": "மேலும் ஏற்றுகிறது...",
@@ -148,6 +153,9 @@
"github": "GitHub-ல் காண்க"
}
},
+ "profile": {
+ "invite": {}
+ },
"package": {
"not_found": "தொகுப்பு கிடைக்கவில்லை",
"not_found_message": "தொகுப்பைக் கண்டுபிடிக்க இயலவில்லை.",
@@ -160,6 +168,7 @@
"version": "இந்தப் பதிப்பு நிறுத்தப்பட்டது.",
"no_reason": "காரணம் வழங்கப்படவில்லை"
},
+ "size_increase": {},
"replacement": {
"title": "இந்த சார்பு உங்களுக்குத் தேவைப்படாமல் இருக்கலாம்.",
"native": "இதை {replacement} மூலம் மாற்றலாம், Node {nodeVersion} முதல் கிடைக்கிறது.",
@@ -291,7 +300,8 @@
"more_tagged": "{count} மேலும் குறியிடப்பட்டவை",
"all_covered": "அனைத்து பதிப்புகளும் மேலே உள்ள குறிச்சொற்களால் உள்ளடக்கப்பட்டுள்ளன",
"deprecated_title": "{version} (நிறுத்தப்பட்டது)",
- "view_all": "{count} பதிப்பைக் காண்க | அனைத்து {count} பதிப்புகளையும் காண்க"
+ "view_all": "{count} பதிப்பைக் காண்க | அனைத்து {count} பதிப்புகளையும் காண்க",
+ "copy_alt": {}
},
"dependencies": {
"title": "சார்பு ({count}) | சார்புகள் ({count})",
@@ -345,7 +355,8 @@
"y_axis_label": "{granularity} {facet}",
"items": {
"downloads": "பதிவிறக்கங்கள்"
- }
+ },
+ "copy_alt": {}
},
"downloads": {
"title": "வாராந்திர பதிவிறக்கங்கள்",
@@ -438,7 +449,8 @@
"b": "{size} B",
"kb": "{size} kB",
"mb": "{size} MB"
- }
+ },
+ "download": {}
},
"connector": {
"modal": {
@@ -711,11 +723,7 @@
"downloads_month": "பதிவிறக்கங்கள்/மாதம்",
"downloads_year": "பதிவிறக்கங்கள்/ஆண்டு",
"published": "கடைசியாக வெளியிடப்பட்டது",
- "name": "பெயர்",
- "quality": "தரம்",
- "popularity": "பிரபலம்",
- "maintenance": "பராமரிப்பு",
- "score": "மதிப்பெண்"
+ "name": "பெயர்"
},
"columns": {
"title": "நெடுவரிசைகள்",
@@ -729,10 +737,6 @@
"published": "கடைசியாக வெளியிடப்பட்டது",
"maintainers": "பராமரிப்பாளர்கள்",
"keywords": "முக்கிய வார்த்தைகள்",
- "quality_score": "தர மதிப்பெண்",
- "popularity_score": "பிரபல மதிப்பெண்",
- "maintenance_score": "பராமரிப்பு மதிப்பெண்",
- "combined_score": "ஒருங்கிணைந்த மதிப்பெண்",
"security": "பாதுகாப்பு"
},
"view_mode": {
@@ -789,6 +793,8 @@
"managers": "மேலாளர்கள்"
}
},
+ "sponsors": {},
+ "oss_partners": {},
"team": {},
"contributors": {
"title": "{count} பங்களிப்பாளர் | {count} பங்களிப்பாளர்கள்",
@@ -809,6 +815,7 @@
"description": "அரட்டையடிக்கவும், கேள்விகள் கேட்கவும், யோசனைகளைப் பகிரவும்.",
"cta": "Discord-ல் சேரவும்"
},
+ "builders": {},
"follow": {
"title": "புதுப்பிப்புகளைப் பெறுங்கள்",
"description": "npmx பற்றிய சமீபத்திய தகவல்களைக் கண்டறியுங்கள்.",
@@ -898,14 +905,11 @@
"add_column": "ஒப்பீட்டில் சார்பு இல்லாத நெடுவரிசையைச் சேர்"
},
"facets": {
- "group_label": "ஒப்பீட்டு அம்சங்கள்",
"all": "அனைத்தும்",
"none": "எதுவும் இல்லை",
"coming_soon": "விரைவில் வரும்",
"select_all": "அனைத்து அம்சங்களையும் தேர்வு செய்",
"deselect_all": "அனைத்து அம்சங்களின் தேர்வை நீக்கு",
- "select_category": "அனைத்து {category} அம்சங்களையும் தேர்வு செய்",
- "deselect_category": "அனைத்து {category} அம்சங்களின் தேர்வை நீக்கு",
"binary_only_tooltip": "இந்த தொகுப்பு பைனரிகளை மட்டுமே வெளிப்படுத்துகிறது, ஏற்றுமதிகள் இல்லை",
"categories": {
"performance": "செயல்திறன்",
@@ -981,7 +985,15 @@
"trends": {
"title": "வாராந்திர பதிவிறக்கங்கள்"
}
- }
+ },
+ "version_invalid_url_format": {},
+ "file_filter_option": {},
+ "filter": {}
+ },
+ "pds": {
+ "join": {},
+ "server": {},
+ "community": {}
},
"privacy_policy": {
"title": "தனியுரிமைக் கொள்கை",
@@ -1068,5 +1080,9 @@
"measures": {},
"limitations": {},
"contact": {}
- }
+ },
+ "translation_status": {
+ "table": {}
+ },
+ "action_bar": {}
}
diff --git a/i18n/locales/te-IN.json b/i18n/locales/te-IN.json
index 9c98d2507f..18dd0d5646 100644
--- a/i18n/locales/te-IN.json
+++ b/i18n/locales/te-IN.json
@@ -54,6 +54,10 @@
"links": "లింక్లు",
"tap_to_search": "శోధించడానికి టాప్ చేయండి"
},
+ "blog": {
+ "author": {},
+ "atproto": {}
+ },
"settings": {
"title": "సెట్టింగ్లు",
"tagline": "మీ npmx అనుభవాన్ని అనుకూలీకరించండి",
@@ -79,7 +83,8 @@
"label": "యాక్సెంట్ రంగులు"
},
"clear_accent": "యాక్సెంట్ రంగును క్లియర్ చేయండి",
- "translation_progress": "అనువాద పురోగతి"
+ "translation_progress": "అనువాద పురోగతి",
+ "background_themes": {}
},
"i18n": {
"missing_keys": "{count} అనువాదం లేదు | {count} అనువాదాలు లేవు",
@@ -89,6 +94,7 @@
"edit_on_github": "GitHub లో సవరించండి",
"view_guide": "అనువాద గైడ్"
},
+ "error": {},
"common": {
"loading": "లోడ్ అవుతున్నది...",
"loading_more": "మరిన్ని లోడ్ అవుతున్నది...",
@@ -115,6 +121,9 @@
"github": "GitHub లో వీక్షించండి"
}
},
+ "profile": {
+ "invite": {}
+ },
"package": {
"not_found": "ప్యాకేజ్ కనుగొనబడలేదు",
"not_found_message": "ప్యాకేజ్ కనుగొనబడలేదు.",
@@ -127,6 +136,7 @@
"version": "ఈ వెర్షన్ డిప్రికేట్ చేయబడింది.",
"no_reason": "కారణం అందించబడలేదు"
},
+ "size_increase": {},
"replacement": {
"title": "మీకు ఈ డిపెండెన్సీ అవసరం లేకపోవచ్చు.",
"native": "దీనిని {replacement} తో భర్తీ చేయవచ్చు, ఇది Node {nodeVersion} నుండి అందుబాటులో ఉంది.",
@@ -222,7 +232,8 @@
"more_tagged": "{count} మరిన్ని ట్యాగ్ చేయబడ్డాయి",
"all_covered": "అన్ని వెర్షన్లు పైన ఉన్న ట్యాగ్ల ద్వారా కవర్ చేయబడ్డాయి",
"deprecated_title": "{version} (డిప్రికేటెడ్)",
- "view_all": "{count} వెర్షన్లను వీక్షించండి | అన్ని {count} వెర్షన్లను వీక్షించండి"
+ "view_all": "{count} వెర్షన్లను వీక్షించండి | అన్ని {count} వెర్షన్లను వీక్షించండి",
+ "copy_alt": {}
},
"dependencies": {
"title": "డిపెండెన్సీలు ({count})",
@@ -271,7 +282,8 @@
"date_range_multiline": "{start}\nనుండి {end}",
"download_file": "{fileType} డౌన్లోడ్ చేయండి",
"toggle_annotator": "అనోటేటర్ను టాగుల్ చేయండి",
- "items": {}
+ "items": {},
+ "copy_alt": {}
},
"downloads": {
"title": "వారపు డౌన్లోడ్లు"
@@ -357,7 +369,8 @@
"name_asc": "పేరు (A-Z)",
"name_desc": "పేరు (Z-A)"
},
- "size": {}
+ "size": {},
+ "download": {}
},
"connector": {
"modal": {
@@ -623,11 +636,7 @@
"downloads_day": "డౌన్లోడ్లు/రోజు",
"downloads_month": "డౌన్లోడ్లు/నెల",
"downloads_year": "డౌన్లోడ్లు/సంవత్సరం",
- "name": "పేరు",
- "quality": "నాణ్యత",
- "popularity": "జనాదరణ",
- "maintenance": "నిర్వహణ",
- "score": "స్కోర్"
+ "name": "పేరు"
},
"columns": {
"title": "కాలమ్లు",
@@ -640,10 +649,6 @@
"downloads": "డౌన్లోడ్లు/వారం",
"maintainers": "నిర్వహకులు",
"keywords": "కీవర్డ్లు",
- "quality_score": "నాణ్యత స్కోర్",
- "popularity_score": "జనాదరణ స్కోర్",
- "maintenance_score": "నిర్వహణ స్కోర్",
- "combined_score": "సంయుక్త స్కోర్",
"security": "భద్రత"
},
"view_mode": {
@@ -700,6 +705,8 @@
"managers": "మేనేజర్లు"
}
},
+ "sponsors": {},
+ "oss_partners": {},
"team": {},
"contributors": {
"title": "కంట్రిబ్యూటర్లు",
@@ -720,6 +727,7 @@
"description": "చాట్ చేయండి, ప్రశ్నలు అడగండి, మరియు ఆలోచనలను పంచుకోండి.",
"cta": "Discord లో చేరండి"
},
+ "builders": {},
"follow": {
"title": "నవీకరణలతో ఉండండి",
"description": "npmx లో తాజా సమాచారాన్ని పొందండి.",
@@ -800,14 +808,11 @@
},
"no_dependency": {},
"facets": {
- "group_label": "పోలిక ఫేసెట్లు",
"all": "అన్నీ",
"none": "ఏదీ లేదు",
"coming_soon": "త్వరలో వస్తుంది",
"select_all": "అన్ని ఫేసెట్లను ఎంచుకోండి",
"deselect_all": "అన్ని ఫేసెట్లను అన్సెలెక్ట్ చేయండి",
- "select_category": "అన్ని {category} ఫేసెట్లను ఎంచుకోండి",
- "deselect_category": "అన్ని {category} ఫేసెట్లను అన్సెలెక్ట్ చేయండి",
"categories": {
"performance": "పనితీరు",
"health": "ఆరోగ్యం",
@@ -831,7 +836,15 @@
},
"values": {},
"trends": {}
- }
+ },
+ "version_invalid_url_format": {},
+ "file_filter_option": {},
+ "filter": {}
+ },
+ "pds": {
+ "join": {},
+ "server": {},
+ "community": {}
},
"privacy_policy": {
"cookies": {
@@ -852,5 +865,9 @@
"measures": {},
"limitations": {},
"contact": {}
- }
+ },
+ "translation_status": {
+ "table": {}
+ },
+ "action_bar": {}
}
diff --git a/i18n/locales/tr-TR.json b/i18n/locales/tr-TR.json
index c1b0a40b50..47ac20eb2b 100644
--- a/i18n/locales/tr-TR.json
+++ b/i18n/locales/tr-TR.json
@@ -574,7 +574,8 @@
"b": "{size} B",
"kb": "{size} kB",
"mb": "{size} MB"
- }
+ },
+ "download": {}
},
"connector": {
"modal": {
@@ -851,11 +852,7 @@
"downloads_month": "Aylık indirmeler",
"downloads_year": "Yıllık indirmeler",
"published": "Yayınlanma tarihi",
- "name": "Ad",
- "quality": "Kalite",
- "popularity": "Popülerlik",
- "maintenance": "Bakım",
- "score": "Skor"
+ "name": "Ad"
},
"columns": {
"title": "Sütunlar",
@@ -869,10 +866,6 @@
"published": "Yayınlandı",
"maintainers": "Geliştiriciler",
"keywords": "Anahtar kelimeler",
- "quality_score": "Kalite skoru",
- "popularity_score": "Popülerlik skoru",
- "maintenance_score": "Bakım skoru",
- "combined_score": "Birleşik skor",
"security": "Güvenlik"
},
"view_mode": {
@@ -1058,14 +1051,11 @@
"add_column": "Sütun ekle"
},
"facets": {
- "group_label": "Özellik grubu",
"all": "Tümü",
"none": "Hiçbiri",
"coming_soon": "Yakında",
"select_all": "Tümünü seç",
"deselect_all": "Tümünün seçimini kaldır",
- "select_category": "{category} kategorisini seç",
- "deselect_category": "{category} kategorisinin seçimini kaldır",
"binary_only_tooltip": "Yalnızca binary paketler için",
"categories": {
"performance": "Performans",
@@ -1148,6 +1138,7 @@
"file_too_large": "Dosya çok büyük",
"file_size_warning": "Dosya boyutu {size}",
"compare_versions_title": "Sürümleri karşılaştır",
+ "version_invalid_url_format": {},
"summary": "Özet",
"deps_count": "{count} bağımlılık",
"dependencies": "Bağımlılıklar",
@@ -1312,5 +1303,9 @@
"p1": "Erişilebilirlik sorunları için:",
"link": "GitHub'da issue açın"
}
- }
+ },
+ "translation_status": {
+ "table": {}
+ },
+ "action_bar": {}
}
diff --git a/i18n/locales/uk-UA.json b/i18n/locales/uk-UA.json
index 8b8bb8a4e1..eb7037f0d0 100644
--- a/i18n/locales/uk-UA.json
+++ b/i18n/locales/uk-UA.json
@@ -19,7 +19,8 @@
"social": "соціальні мережі",
"chat": "чат",
"builders_chat": "розробники",
- "keyboard_shortcuts": "гарячі клавіші"
+ "keyboard_shortcuts": "гарячі клавіші",
+ "brand": "бренд"
},
"shortcuts": {
"section": {
@@ -96,6 +97,7 @@
},
"draft_badge": "Чернетка",
"draft_banner": "Це неопублікована чернетка. Вона може бути неповною або містити неточності.",
+ "no_posts": "Немає публікацій.",
"atproto": {
"view_on_bluesky": "Переглянути у Bluesky",
"reply_on_bluesky": "Відповісти у Bluesky",
@@ -138,6 +140,8 @@
"include_types_description": "Додавайте пакет {'@'}types до команд встановлення для пакетів без типів",
"hide_platform_packages": "Приховати пакети для конкретної платформи в пошуку",
"hide_platform_packages_description": "Приховувати пакети з нативними бінарними файлами, наприклад {'@'}esbuild/linux-x64, в результатах",
+ "enable_graph_pulse_loop": "Увімкнути повторення ефекту пульсації на міні-графіку",
+ "enable_graph_pulse_loop_description": "Увімкнути безперервну анімацію пульсації на графіку щотижневих завантажень. Ця анімація може відволікати деяких користувачів.",
"theme": "Тема",
"theme_light": "Світла",
"theme_dark": "Темна",
@@ -146,12 +150,23 @@
"help_translate": "Допоможіть перекласти npmx",
"translation_status": "Переглянути глобальний статус перекладу",
"accent_colors": {
- "label": "Колірні акценти"
+ "label": "Колірні акценти",
+ "sky": "Небесний",
+ "coral": "Коралевий",
+ "amber": "Бурштиновий",
+ "emerald": "Смарагдовий",
+ "violet": "Фіолетовий",
+ "magenta": "Маджента"
},
"clear_accent": "Очистити колір акценту",
"translation_progress": "Статус перекладу",
"background_themes": {
- "label": "Колір фону"
+ "label": "Колір фону",
+ "neutral": "Нейтральний",
+ "stone": "Кам'яний",
+ "zinc": "Цинковий",
+ "slate": "Сланцевий",
+ "black": "Чорний"
},
"keyboard_shortcuts_enabled": "Увімкнути гарячі клавіші",
"keyboard_shortcuts_enabled_description": "Гарячі клавіші можна вимкнути, якщо вони конфліктують з налаштуваннями браузера або системи"
@@ -160,7 +175,7 @@
"missing_keys": "Відсутній 1 переклад | Відсутні {count} переклади",
"copy_keys": "Копіювати ключі",
"show_more_keys": "Показати ще {count}...",
- "contribute_hint": "Допоможіть поліпшити цей переклад, додавши відсутні ключі.",
+ "contribute_hint": "Допоможіть поліпшити цей переклад, додавши відсутні фрази.",
"edit_on_github": "Редагувати на GitHub",
"view_guide": "Керівництво з перекладу"
},
@@ -210,7 +225,9 @@
"radicle": "Переглянути на Radicle",
"sourcehut": "Переглянути на SourceHut",
"tangled": "Переглянути на Tangled"
- }
+ },
+ "collapse": "Згорнути",
+ "expand": "Розгорнути"
},
"profile": {
"display_name": "Відображуване ім'я",
@@ -289,7 +306,8 @@
"refs": "{count} посилання | {count} посилань",
"assets": "{count} ресурс | {count} ресурсів"
},
- "view_source": "Переглянути код"
+ "view_source": "Переглянути код",
+ "skills_cli": "CLI навичок"
},
"links": {
"main": "огляд",
@@ -300,15 +318,23 @@
"code": "код",
"docs": "документація",
"fund": "спонсорство",
- "compare": "порівняння"
+ "compare": "порівняти",
+ "compare_this_package": "порівняти цей пакет"
},
"likes": {
"like": "Подобається цей пакет",
"unlike": "Прибрати вподобання"
},
"docs": {
+ "contents": "Зміст",
+ "default_not_available": "Документація недоступна для цієї версії.",
"not_available": "Документація недоступна",
- "not_available_detail": "Ми не змогли згенерувати документацію для цієї версії."
+ "not_available_detail": "Ми не змогли згенерувати документацію для цієї версії.",
+ "page_title": "API Документація - npmx",
+ "page_title_name": "Документація {name} - npmx",
+ "page_title_version": "Документація {name} - npmx",
+ "og_title": "{name} - Документація",
+ "view_package": "Переглянути пакет"
},
"get_started": {
"title": "Розпочніть роботу",
@@ -368,7 +394,9 @@
"published": "Опубліковано",
"weekly_downloads": "Завантажень на тиждень",
"keywords": "Ключові слова",
- "license": "Ліцензія"
+ "license": "Ліцензія",
+ "select": "Обрати пакет",
+ "select_maximum": "Можна обрати не більше {count} пакетів"
},
"versions": {
"title": "Версії",
@@ -383,6 +411,7 @@
"all_covered": "Усі версії охоплені тегами вище",
"deprecated_title": "{version} (припинено)",
"view_all": "Переглянути {count} версію | Переглянути всі {count} версій",
+ "view_all_versions": "Переглянути всі версії",
"distribution_title": "Група Semver",
"distribution_modal_title": "Версії",
"distribution_range_date_same_year": "від {from} до {to}, {endYear}",
@@ -390,9 +419,11 @@
"grouping_major": "Основна",
"grouping_minor": "Мінорна",
"grouping_versions_title": "Версії",
+ "grouping_versions_about": "Про групування версій",
"grouping_versions_all": "Усі",
"grouping_versions_only_recent": "Тільки нещодавні",
"grouping_usage_title": "Використання",
+ "grouping_usage_about": "Про групування використання",
"grouping_usage_all": "Усі",
"grouping_usage_most_used": "Найбільш популярна",
"recent_versions_only_tooltip": "Показувати лише версії, опубліковані за останній рік.",
@@ -407,7 +438,12 @@
"copy_alt": {
"per_version_analysis": "Версія {version} була завантажена {downloads} разів",
"general_description": "Стовпчаста діаграма, що показує завантаження за версіями для {versions_count} {semver_grouping_mode} версій пакету {package_name}, {date_range_label} від версії {first_version} до версії {last_version}. Найбільш завантажувана версія — {max_downloaded_version} з {max_version_downloads} завантаженнями. {per_version_analysis}. {watermark}."
- }
+ },
+ "page_title": "Історія версій",
+ "current_tags": "Поточні теги",
+ "version_filter_placeholder": "Фільтрувати версії…",
+ "version_filter_label": "Фільтрувати версії",
+ "no_match_filter": "Версій за фільтром \"{filter}\" не знайдено"
},
"dependencies": {
"title": "Залежності ({count})",
@@ -418,7 +454,8 @@
"outdated_major": "{count} мажорна версія відставання (остання: {latest}) | {count} мажорних версій відставання (остання: {latest})",
"outdated_minor": "{count} мінорна версія відставання (остання: {latest}) | {count} мінорних версій відставання (остання: {latest})",
"outdated_patch": "Доступне оновлення (остання версія: {latest})",
- "has_replacement": "Ця залежність має запропоновані заміни"
+ "has_replacement": "Ця залежність має рекомендовані заміни",
+ "vulnerabilities_count": "{count} вразливість | {count} вразливості | {count} вразливостей"
},
"peer_dependencies": {
"title": "Залежності однорівневих об'єктів ({count})",
@@ -442,9 +479,16 @@
"cancel_add": "Скасувати додавання власника",
"add_owner": "+ Додати власника",
"show_more": "(показати ще {count})",
- "show_less": "(показати менше)"
+ "show_less": "(показати менше)",
+ "maintainer_template": "{avatar} {char126}{name}"
},
"trends": {
+ "chart_assistive_text": {
+ "keyboard_navigation_horizontal": "Використовуйте клавіші стрілок вліво та вправо для переходу між точками даних.",
+ "keyboard_navigation_vertical": "Використовуйте клавіші стрілок вгору та вниз для переходу між точками даних.",
+ "table_available": "Таблиця даних для цього графіка доступна нижче.",
+ "table_caption": "Таблиця даних графіка"
+ },
"granularity": "Деталізація",
"granularity_daily": "Щоденні",
"granularity_weekly": "Щотижневі",
@@ -503,7 +547,8 @@
"downloads": {
"title": "Завантажень на тиждень",
"community_distribution": "Переглянути розподіл впровадження у спільноті",
- "subtitle": "Для всіх версій"
+ "subtitle": "Для всіх версій",
+ "sparkline_nav_hint": "Використовуйте ← →"
},
"install_scripts": {
"title": "Скрипти встановлення",
@@ -519,6 +564,7 @@
"esm": "Підтримка ES Modules",
"cjs": "Підтримка CommonJS",
"no_esm": "Без підтримки ES Modules",
+ "wasm": "Має WebAssembly",
"types_label": "Типи",
"types_included": "Типи включені",
"types_available": "Типи доступні через {package}",
@@ -592,6 +638,10 @@
"b": "{size} Б",
"kb": "{size} кБ",
"mb": "{size} МБ"
+ },
+ "download": {
+ "button": "Завантажити",
+ "tarball": "Завантажити Tarball як .tar.gz"
}
},
"connector": {
@@ -860,6 +910,8 @@
"secure": "Без попереджень",
"insecure": "З попередженнями"
},
+ "view_selected": "Переглянути вибране",
+ "clear_selected_label": "Очистити вибране",
"sort": {
"label": "Сортувати пакети",
"toggle_direction": "Переключити напрямок сортування",
@@ -871,11 +923,7 @@
"downloads_month": "Завантажень/міс",
"downloads_year": "Завантажень/рік",
"published": "Останнє опублікування",
- "name": "Ім'я",
- "quality": "Якість",
- "popularity": "Популярність",
- "maintenance": "Підтримка",
- "score": "Оцінка"
+ "name": "Ім'я"
},
"columns": {
"title": "Колонки",
@@ -889,11 +937,8 @@
"published": "Останнє опублікування",
"maintainers": "Супроводжувачі",
"keywords": "Ключові слова",
- "quality_score": "Оцінка якості",
- "popularity_score": "Оцінка популярності",
- "maintenance_score": "Оцінка підтримки",
- "combined_score": "Комбінована оцінка",
- "security": "Безпечність"
+ "security": "Безпечність",
+ "selection": "Обрати пакет"
},
"view_mode": {
"label": "Режим перегляду",
@@ -1040,7 +1085,8 @@
"error": "Не вдалося завантажити організації",
"empty": "Організації не знайдено",
"view_all": "Переглянути всі"
- }
+ },
+ "pr": "Відкрити pull request #{prNumber} на GitHub"
},
"compare": {
"packages": {
@@ -1059,7 +1105,9 @@
"empty_title": "Виберіть пакети для порівняння",
"empty_description": "Знайдіть та додайте щонайменше 2 пакети вище, щоб побачити порівняння їх метрик.",
"table_view": "Таблиця",
- "charts_view": "Діаграми"
+ "charts_view": "Діаграми",
+ "bar_chart_nav_hint": "Використовуйте ↑ ↓",
+ "line_chart_nav_hint": "Використовуйте ← →"
},
"selector": {
"search_label": "Пошук пакетів",
@@ -1080,14 +1128,15 @@
"add_column": "Додати колонку без залежності до порівняння"
},
"facets": {
- "group_label": "Аспекти порівняння",
"all": "всі",
"none": "жодного",
+ "select_all_category_facets": "Вибрати всі аспекти {category}",
+ "deselect_all_category_facets": "Скасувати вибір всіх аспектів {category}",
+ "selected_all_category_facets": "Вибрано всі аспекти {category}",
+ "deselected_all_category_facets": "Знято вибір всіх аспектів {category}",
"coming_soon": "Скоро",
"select_all": "Вибрати всі аспекти",
"deselect_all": "Скасувати вибір всіх аспектів",
- "select_category": "Вибрати всі аспекти {category}",
- "deselect_category": "Скасувати вибір всіх аспектів {category}",
"binary_only_tooltip": "Цей пакет надає лише бінарні файли без експортів",
"categories": {
"performance": "Продуктивність",
@@ -1171,6 +1220,14 @@
"file_size_warning": "{size} перевищує ліміт 250 КБ для порівняння",
"compare_versions": "зміни",
"compare_versions_title": "Порівняти з останньою версією",
+ "comparing_versions_label": "Порівняння версій...",
+ "version_back_to_package": "Повернутися до пакету",
+ "version_error_message": "Не вдалося порівняти версії.",
+ "version_invalid_url_format": {
+ "hint": "Невірна URL-адреса для порівняння. Використовуйте формат: {0}",
+ "from_version": "від",
+ "to_version": "до"
+ },
"version_selector_title": "Порівняти з версією",
"summary": "Підсумок",
"deps_count": "{count} залежн.",
@@ -1195,9 +1252,20 @@
"modified": "змінено"
},
"files_button": "Файли",
- "select_file_prompt": "Виберіть файл з бічної панелі для перегляду різниці",
+ "select_file_prompt": "Виберіть файл з бічної панелі для перегляду змін",
"close_files_panel": "Закрити панель файлів",
- "filter_files_label": "Фільтрувати файли за типом зміни"
+ "filter_files_label": "Фільтрувати файли за типом змін",
+ "change_ratio": "Відношення змін",
+ "char_edits": "Правки символів",
+ "diff_distance": "Відстань різниці",
+ "loading_diff": "Завантаження порівняння...",
+ "loading_diff_error": "Не вдалося завантажити порівняння",
+ "merge_modified_lines": "Об'єднати змінені рядки",
+ "no_content_changes": "Змін вмісту не виявлено",
+ "options": "Параметри",
+ "view_file": "Переглянути файл",
+ "view_in_code_browser": "Переглянути в браузері коду",
+ "word_wrap": "Перенесення рядків"
},
"pds": {
"title": "npmx.social",
@@ -1336,5 +1404,118 @@
"p1": "Якщо ви зіткнулися з бар'єром доступності на {app}, будь ласка, повідомте нам, відкривши задачу в нашому {link}. Ми серйозно ставимося до цих повідомлень і зробимо все можливе для їх вирішення.",
"link": "репозиторії GitHub"
}
+ },
+ "translation_status": {
+ "title": "статус перекладу",
+ "generated_at": "Згенеровано: {date}",
+ "welcome": "Якщо вас зацікавила можливість допомогти у перекладі {npmx} однією з мов перелічених нижче, то ви потрапили куди потрібно! Ця сторінка, що автоматично оновлюється, завжди містить список усіх текстів, з яким ви можете допомогти прямо зараз.",
+ "p1": "Ми використовуємо {lang} як мову за замовчуванням, із загальною кількістю {count} фраз. Якщо ви хочете допомогти з перекладами, знайдіть мову в {bylang} та розгорніть деталі.",
+ "p1_lang": "Американська англійська (en-US)",
+ "p1_count": "0 повідомлень | 1 повідомлення | {count} повідомлення | {count} повідомлень",
+ "p2": "Перед початком, будь ласка, прочитайте наш {guide}, щоб дізнатися про наш процес перекладу та як ви можете долучитися.",
+ "guide": "посібник з локалізації (i18n)",
+ "by_locale": "Прогрес перекладу за мовою",
+ "by_file": "Прогрес перекладу за файлом",
+ "complete_text": "Цей переклад завершено, чудова робота!",
+ "missing_text": "відсутні",
+ "missing_keys": "Відсутніх перекладів немає | Відсутній переклад | Відсутні переклади",
+ "progress_label": "Статус прогресу для {locale}",
+ "table": {
+ "file": "Файл",
+ "status": "Статус",
+ "error": "Помилка під час завантаження списку файлів.",
+ "empty": "Файлів не знайдено",
+ "file_link": "Редагувати {file} ({lang}) на GitHub"
+ }
+ },
+ "vacations": {
+ "title": "у відпустці",
+ "meta_description": "Команда npmx відпочивала. Discord відкрився знову через тиждень.",
+ "heading": "підзарядка",
+ "subtitle": "Ми будували npmx у темпі, що коштував {some} з нас сну. Ми не хотіли, щоб це стало нормою! Тож ми взяли тиждень відпустки. Разом.",
+ "illustration_alt": "один ряд затишних іконок",
+ "poke_log": "Розбурхати вогнище",
+ "what": {
+ "title": "що відбулося",
+ "p1": "discord був закритий {dates}.",
+ "dates": "14 – 21 лютого",
+ "p2": "Всі посилання для запрошень зникли і канали були заблоковані – окрім {garden}, який залишився відкритим для тих, хто хотів продовжувати спілкування.",
+ "garden": "#garden"
+ },
+ "meantime": {
+ "title": "тим часом",
+ "p1": "{site} і {repo} залишалися відкритими – люди продовжували занурюватися, відкривати задачі, відкривати PR, але в основному всі проводили час десь біля затишного каміна.",
+ "repo_link": "репозиторій"
+ },
+ "return": {
+ "title": "ми повернулися!",
+ "p1": "ми повернулися зарядженими та готовими до фінального ривку до 3 березня. {social} для оновлень.",
+ "social_link": "стежте за нами в Bluesky"
+ },
+ "stats": {
+ "contributors": "Учасники",
+ "commits": "Коміти",
+ "pr": "Злиті PR",
+ "subtitle": {
+ "some": "деякі",
+ "all": "всі"
+ }
+ }
+ },
+ "action_bar": {
+ "title": "панель дій",
+ "selection": "0 вибрано | 1 вибрано | {count} вибрано",
+ "shortcut": "Натисніть \"{key}\" для фокусу на діях",
+ "button_close_aria_label": "Закрити панель дій"
+ },
+ "logo_menu": {
+ "copy_svg": "Копіювати логотип як SVG",
+ "copied": "Скопійовано!",
+ "browse_brand": "Переглянути брендбук"
+ },
+ "brand": {
+ "title": "Бренд",
+ "heading": "бренд",
+ "meta_description": "Брендбук npmx: рекомендації, логотипи, кольори та типографіка для використання в пресі та медіа.",
+ "intro": "Ресурси та рекомендації щодо використання бренду npmx у ваших проєктах, статтях та медіа.",
+ "logos": {
+ "title": "логотипи",
+ "description": "Завантажуйте логотипи npmx у форматах SVG та PNG. Обирайте відповідний варіант залежно від фону.",
+ "wordmark": "ПОВНИЙ ЛОГОТИП З НАПИСОМ",
+ "wordmark_alt": "Повний логотип npmx з написом та синьою косою рискою на темному фоні",
+ "wordmark_light_alt": "Повний логотип npmx з написом та акцентною косою рискою на світлому фоні",
+ "mark": "ЗНАК ЛОГОТИПУ",
+ "mark_alt": "Знак логотипу npmx з крапкою та косою рискою на темному фоні",
+ "mark_light_alt": "Знак логотипу npmx з крапкою та косою рискою на світлому фоні",
+ "on_dark": "на темному",
+ "on_light": "на світлому",
+ "download_svg": "SVG",
+ "download_png": "PNG",
+ "download_svg_aria": "Завантажити {name} як SVG",
+ "download_png_aria": "Завантажити {name} як PNG"
+ },
+ "customize": {
+ "title": "налаштуйте логотип",
+ "description": "Перегляньте логотип npmx з вашим акцентним кольором та фоном. Попередній перегляд відображає ваші поточні налаштування — оберіть колір, перемкніть фон та завантажте.",
+ "accent_label": "акцент",
+ "bg_label": "фон",
+ "download_svg_aria": "Завантажити налаштований логотип як SVG",
+ "download_png_aria": "Завантажити налаштований логотип як PNG"
+ },
+ "typography": {
+ "title": "типографіка",
+ "description": "npmx використовує сімейство шрифтів Geist від Vercel як для текстів інтерфейсу, так і для відображення коду.",
+ "sans": "Geist Sans",
+ "sans_desc": "Використовується для основного тексту та елементів інтерфейсу.",
+ "mono": "Geist Mono",
+ "mono_desc": "Використовується для коду, заголовків та технічного вмісту.",
+ "pangram": "Єхидна, ґава, їжак ще й шиплячі плазуни бігцем форсують Янцзи.",
+ "numbers": "0123456789"
+ },
+ "guidelines": {
+ "title": "примітка",
+ "message": "Доступність важлива для нас і ми хотіли б, щоб ви поділяли цю позицію. Використовуючи зазначені матеріали, переконайтеся, що є достатній контраст із фоном, і не зменшуйте розмір менше 24px. Якщо вам потрібні інші ресурси або додаткова інформація про проєкт, зв'яжіться з нами за посиланням {link}.",
+ "discord_link_text": "chat.npmx.dev"
+ }
}
}
diff --git a/i18n/locales/vi-VN.json b/i18n/locales/vi-VN.json
new file mode 100644
index 0000000000..362f1831f7
--- /dev/null
+++ b/i18n/locales/vi-VN.json
@@ -0,0 +1,1521 @@
+{
+ "$schema": "../schema.json",
+ "seo": {
+ "home": {
+ "title": "npmx - Trình duyệt cho package từ npm",
+ "description": "Tìm kiếm và khám phá package từ npm bằng một giao diện hiện đại"
+ }
+ },
+ "built_at": "dựng ngày {0}",
+ "alt_logo": "logo npmx",
+ "tagline": "trình duyệt tốc độ và hiện đại cho npm",
+ "non_affiliation_disclaimer": "không thuộc npm, Inc.",
+ "trademark_disclaimer": "npm là một thương hiệu đã đăng ký của npm, Inc. Trang này không liên quan đến npm, Inc.",
+ "footer": {
+ "about": "giới thiệu",
+ "blog": "blog",
+ "docs": "tài liệu",
+ "source": "mã nguồn",
+ "social": "kết nối",
+ "chat": "trò chuyện",
+ "builders_chat": "phát triển",
+ "keyboard_shortcuts": "phím tắt",
+ "brand": "thương hiệu"
+ },
+ "shortcuts": {
+ "section": {
+ "global": "Toàn cục",
+ "search": "Tìm kiếm",
+ "package": "Package"
+ },
+ "focus_search": "Nhập ô tìm kiếm",
+ "show_kbd_hints": "Đánh dấu phím tắt trên giao diện",
+ "settings": "Mở cài đặt",
+ "compare": "Mở so sánh",
+ "compare_from_package": "Mở so sánh (điền sẵn package hiện tại)",
+ "navigate_results": "Điều hướng kết quả tìm kiếm",
+ "go_to_result": "Đi đến kết quả tìm kiếm",
+ "open_code_view": "Mở chế độ xem mã nguồn",
+ "open_docs": "Mở tài liệu",
+ "disable_shortcuts": "Bạn có thể vô hiệu hóa phím tắt trong {settings}.",
+ "open_main": "Mở trang chính",
+ "open_diff": "Mở so sánh phiên bản"
+ },
+ "search": {
+ "label": "Tìm package từ npm",
+ "placeholder": "package abc...",
+ "button": "tìm kiếm",
+ "searching": "Đang tìm...",
+ "found_packages": "Không tìm thấy package nào | Tìm thấy 1 package | Tìm thấy {count} package",
+ "found_packages_sorted": "Không có kết quả | Sắp xếp {count} kết quả đầu | Sắp xếp {count} kết quả đầu",
+ "updating": "(đang cập nhật...)",
+ "no_results": "Không tìm thấy gói nào cho \"{query}\"",
+ "rate_limited": "Đã chạm giới hạn tốc độ của npm, vui lòng thử lại sau ít phút",
+ "title": "tìm kiếm",
+ "title_search": "tìm kiếm: {search}",
+ "title_packages": "tìm gói",
+ "meta_description": "Kết quả tìm kiếm cho '{search}'",
+ "meta_description_packages": "Tìm các gói npm",
+ "not_taken": "{name} chưa được sử dụng",
+ "claim_prompt": "Nhận tên gói này trên npm",
+ "claim_button": "Nhận \"{name}\"",
+ "want_to_claim": "Bạn muốn nhận tên gói này không?",
+ "start_typing": "Bắt đầu nhập để tìm gói",
+ "algolia_disclaimer": "Powered by Algolia",
+ "exact_match": "khớp chính xác",
+ "suggestion": {
+ "user": "người dùng",
+ "org": "tổ chức",
+ "view_user_packages": "Xem các gói của người dùng này",
+ "view_org_packages": "Xem các gói của tổ chức này"
+ },
+ "instant_search": "Chế độ tìm nhanh",
+ "instant_search_on": "đang bật",
+ "instant_search_off": "đang tắt",
+ "instant_search_turn_on": "bật",
+ "instant_search_turn_off": "tắt",
+ "instant_search_advisory": "{label} {state} — {action}"
+ },
+ "nav": {
+ "main_navigation": "Trang chính",
+ "popular_packages": "Package phổ biến",
+ "settings": "cài đặt",
+ "compare": "so sánh",
+ "back": "quay lại",
+ "menu": "Bảng chọn",
+ "mobile_menu": "Bảng điều hướng",
+ "open_menu": "Mở bảng chọn",
+ "links": "Liên kết",
+ "tap_to_search": "Nhấn để tìm kiếm"
+ },
+ "blog": {
+ "title": "Blog",
+ "heading": "blog",
+ "meta_description": "Góc nhìn và cập nhật từ cộng đồng npmx",
+ "author": {
+ "view_profile": "Xem hồ sơ của {name} trên Bluesky"
+ },
+ "draft_badge": "Bản nháp",
+ "draft_banner": "Đây là bản nháp chưa xuất bản. Nội dung có thể chưa hoàn chỉnh hoặc có sai sót.",
+ "no_posts": "Không tìm thấy bài viết nào.",
+ "atproto": {
+ "view_on_bluesky": "Xem trên Bluesky",
+ "reply_on_bluesky": "Trả lời trên Bluesky",
+ "likes_on_bluesky": "Lượt thích trên Bluesky",
+ "like_or_reply_on_bluesky": "Thích bài viết này hoặc thêm bình luận trên Bluesky",
+ "no_comments_yet": "Chưa có bình luận nào.",
+ "could_not_load_comments": "Không thể tải bình luận.",
+ "comments": "Bình luận",
+ "loading_comments": "Đang tải bình luận...",
+ "updating": "Đang cập nhật...",
+ "reply_count": "{count} phản hồi | {count} phản hồi",
+ "like_count": "{count} lượt thích | {count} lượt thích",
+ "repost_count": "{count} lượt đăng lại | {count} lượt đăng lại",
+ "more_replies": "Thêm {count} phản hồi... | Thêm {count} phản hồi..."
+ }
+ },
+ "settings": {
+ "title": "cài đặt",
+ "tagline": "tùy chỉnh trải nghiệm npmx của riêng bạn",
+ "meta_description": "Tùy chỉnh chế độ màu, ngôn ngữ, và giao diện tại npmx.dev",
+ "sections": {
+ "appearance": "Giao diện",
+ "display": "Hiển thị",
+ "search": "Tìm kiếm",
+ "language": "Ngôn ngữ",
+ "keyboard_shortcuts": "Phím tắt"
+ },
+ "data_source": {
+ "label": "Nguồn dữ liệu",
+ "description": "Chọn nguồn dữ liệu khi npmx tìm kiếm. Trang chi tiết package luôn sử dụng npm registry trực tiếp.",
+ "npm": "npm Registry",
+ "npm_description": "Tìm kiếm tổ chức và người dùng từ registry chính thức của npm. Đáng tin cậy, nhưng có thể chậm hơn.",
+ "algolia": "Algolia",
+ "algolia_description": "Dùng Algolia để tìm kiếm nhanh hơn."
+ },
+ "instant_search": "Tìm kiếm nhanh",
+ "instant_search_description": "Hiển thị và cập nhật kết quả tìm kiếm ngay khi đang gõ",
+ "relative_dates": "Hiển thị ngày tương đối",
+ "include_types": "Hiển thị {'@'}types tại phần cài đặt package",
+ "include_types_description": "Thêm package {'@'}types vào lệnh cài đặt đối với package không có sẵn types",
+ "hide_platform_packages": "Ẩn package đặc thù nền tảng khi tìm kiếm",
+ "hide_platform_packages_description": "Ẩn package binary native, v.d. {'@'}esbuild/linux-x64 trong kết quả tìm kiếm",
+ "enable_graph_pulse_loop": "Hiệu ứng động trên biểu đồ",
+ "enable_graph_pulse_loop_description": "Bật hiệu ứng giao động trên biểu đồ tải hàng tuần. Hiệu ứng này có thể gây sao lãng với một số người dùng",
+ "theme": "Chủ đề màu",
+ "theme_light": "Sáng",
+ "theme_dark": "Tối",
+ "theme_system": "Theo hệ thống",
+ "language": "Ngôn ngữ",
+ "help_translate": "Hỗ trợ dịch npmx",
+ "translation_status": "Kiểm tra toàn bộ tiến độ dịch",
+ "accent_colors": {
+ "label": "Màu nổi",
+ "sky": "Sky",
+ "coral": "Coral",
+ "amber": "Amber",
+ "emerald": "Emerald",
+ "violet": "Violet",
+ "magenta": "Magenta"
+ },
+ "clear_accent": "Đặt lại màu nổi",
+ "translation_progress": "Tiến độ dịch",
+ "background_themes": {
+ "label": "Màu nền",
+ "neutral": "Trung tính",
+ "stone": "Stone",
+ "zinc": "Zinc",
+ "slate": "Slate",
+ "black": "Black"
+ },
+ "keyboard_shortcuts_enabled": "Phím tắt",
+ "keyboard_shortcuts_enabled_description": "Bạn có thể vô hiệu hóa phím tắt nếu gặp xung đột với trình duyệt hoặc các phím tắt hệ thống khác."
+ },
+ "i18n": {
+ "missing_keys": "thiếu {count} bản dịch | thiếu {count} bản dịch",
+ "copy_keys": "Sao chép khóa",
+ "show_more_keys": "Hiển thị thêm {count}...",
+ "contribute_hint": "Giúp cải thiện bản dịch bằng cách thêm khóa còn thiếu.",
+ "edit_on_github": "Chỉnh sửa tại Github",
+ "view_guide": "Hướng dẫn dịch"
+ },
+ "error": {
+ "401": "Không được phép truy cập",
+ "404": "Không tìm thấy trang",
+ "500": "Lỗi nội bộ máy chủ",
+ "503": "Dịch vụ không khả dụng",
+ "default": "Đã xảy ra lỗi"
+ },
+ "common": {
+ "loading": "Đang tải...",
+ "loading_more": "Đang tải thêm...",
+ "loading_packages": "Đang tải package...",
+ "end_of_results": "Hết kết quả",
+ "try_again": "Thử lại",
+ "close": "Đóng",
+ "or": "hoặc",
+ "retry": "thử lại",
+ "copy": "sao chép",
+ "copied": "đã sao chép!",
+ "skip_link": "Bỏ qua để đến nội dung chính",
+ "warnings": "Cảnh báo:",
+ "go_back_home": "Quay về trang chủ",
+ "per_week": "/ tuần",
+ "vanity_downloads_hint": "Số liệu ảo: không có gói nào đang hiển thị | Số liệu ảo: cho gói đang hiển thị | Số liệu ảo: tổng của {count} gói đang hiển thị",
+ "sort": {
+ "name": "tên",
+ "role": "vai trò",
+ "members": "thành viên"
+ },
+ "scroll_to_top": "Cuộn lên đầu trang",
+ "cancel": "Hủy",
+ "save": "Lưu",
+ "edit": "Chỉnh sửa",
+ "error": "Lỗi",
+ "view_on": {
+ "npm": "xem trên npm",
+ "github": "Xem trên GitHub",
+ "gitlab": "Xem trên GitLab",
+ "bitbucket": "Xem trên Bitbucket",
+ "codeberg": "Xem trên Codeberg",
+ "git_repo": "Xem trên kho Git",
+ "forgejo": "Xem trên Forgejo",
+ "gitea": "Xem trên Gitea",
+ "gitee": "Xem trên Gitee",
+ "radicle": "Xem trên Radicle",
+ "sourcehut": "Xem trên SourceHut",
+ "tangled": "Xem trên Tangled"
+ },
+ "collapse": "Thu gọn",
+ "expand": "Mở rộng"
+ },
+ "profile": {
+ "display_name": "Tên hiển thị",
+ "description": "Mô tả",
+ "no_description": "Không có mô tả",
+ "website": "Trang web",
+ "website_placeholder": "https://example.com",
+ "likes": "Lượt thích",
+ "seo_title": "{handle} - npmx",
+ "seo_description": "npmx profile by {handle}",
+ "not_found": "Không tìm thấy hồ sơ",
+ "not_found_message": "Không tìm thấy hồ sơ của {handle}.",
+ "invite": {
+ "message": "Có vẻ họ chưa dùng npmx. Bạn có muốn giới thiệu cho họ không?",
+ "share_button": "Chia sẻ trên Bluesky",
+ "compose_text": "Chào {'@'}{handle}! Bạn đã thử npmx.dev chưa? Đây là trình duyệt cho npm registry, nhanh, hiện đại và mã nguồn mở.\nhttps://npmx.dev"
+ }
+ },
+ "package": {
+ "not_found": "Không tìm thấy gói",
+ "not_found_message": "Không tìm thấy gói này.",
+ "no_description": "Không có mô tả",
+ "verified_provenance": "Nguồn gốc đã xác minh",
+ "navigation": "Gói",
+ "copy_name": "Sao chép tên gói",
+ "deprecation": {
+ "package": "Gói này đã bị ngừng hỗ trợ.",
+ "version": "Phiên bản này đã bị ngừng hỗ trợ.",
+ "no_reason": "Không có lý do"
+ },
+ "size_increase": {
+ "title_size": "Kích thước tăng đáng kể kể từ v{version}",
+ "title_deps": "Số lượng dependency tăng đáng kể kể từ v{version}",
+ "title_both": "Kích thước và số dependency tăng đáng kể kể từ v{version}",
+ "size": "Kích thước cài đặt tăng {percent} (lớn hơn {size})",
+ "deps": "Thêm {count} dependency"
+ },
+ "replacement": {
+ "title": "Bạn có thể không cần dependency này.",
+ "native": "Có thể thay thế bằng {replacement}, có sẵn từ Node {nodeVersion}.",
+ "simple": "{community} đã đánh dấu gói này là dư thừa, với gợi ý: {replacement}.",
+ "documented": "{community} đã đánh dấu gói này có các lựa chọn thay thế hiệu năng tốt hơn.",
+ "none": "Gói này đã được đánh dấu là không còn cần thiết, chức năng của nó có thể đã có sẵn sẵn trong các engine.",
+ "learn_more": "Tìm hiểu thêm",
+ "learn_more_above": "Tìm hiểu thêm ở trên.",
+ "mdn": "MDN",
+ "community": "cộng đồng",
+ "consider_no_dep": "+ Cân nhắc không dùng dep?"
+ },
+ "stats": {
+ "license": "Giấy phép",
+ "deps": "Dependency",
+ "install_size": "Kích thước cài đặt",
+ "vulns": "Lỗ hổng",
+ "published": "Đã phát hành",
+ "published_tooltip": "Ngày {package}{'@'}{version} được phát hành",
+ "view_dependency_graph": "Xem đồ thị dependency",
+ "inspect_dependency_tree": "Xem cây dependency",
+ "size_tooltip": {
+ "unpacked": "{size} kích thước giải nén (gói này)",
+ "total": "{size} tổng kích thước giải nén (bao gồm {count} dependency cho linux-x64) | {size} tổng kích thước giải nén (bao gồm toàn bộ {count} dependency cho linux-x64)"
+ }
+ },
+ "skills": {
+ "title": "Kỹ năng Agent",
+ "skills_available": "Có {count} kỹ năng | Có {count} kỹ năng",
+ "compatible_with": "Tương thích với {tool}",
+ "install": "Cài đặt",
+ "installation_method": "Cách cài đặt",
+ "learn_more": "Tìm hiểu thêm",
+ "available_skills": "Các kỹ năng hiện có",
+ "click_to_expand": "Nhấn để mở rộng",
+ "no_description": "Không có mô tả",
+ "file_counts": {
+ "scripts": "{count} script | {count} script",
+ "refs": "{count} tham chiếu | {count} tham chiếu",
+ "assets": "{count} tài nguyên | {count} tài nguyên"
+ },
+ "view_source": "Xem mã nguồn",
+ "skills_cli": "skills CLI"
+ },
+ "links": {
+ "main": "main",
+ "repo": "repo",
+ "homepage": "homepage",
+ "issues": "issues",
+ "jsr": "jsr",
+ "code": "code",
+ "docs": "docs",
+ "fund": "fund",
+ "compare": "so sánh",
+ "compare_this_package": "so sánh gói này"
+ },
+ "likes": {
+ "like": "Thích gói này",
+ "unlike": "Bỏ thích gói này"
+ },
+ "docs": {
+ "contents": "Mục lục",
+ "default_not_available": "Tài liệu không khả dụng cho phiên bản này.",
+ "not_available": "Không có tài liệu",
+ "not_available_detail": "Không thể tạo tài liệu cho phiên bản này.",
+ "page_title": "Tài liệu API - npmx",
+ "page_title_name": "{name} docs - npmx",
+ "page_title_version": "{name} docs - npmx",
+ "og_title": "{name} - Tài liệu",
+ "view_package": "Xem gói"
+ },
+ "get_started": {
+ "title": "Bắt đầu",
+ "pm_label": "Trình quản lý gói",
+ "copy_command": "Sao chép lệnh cài đặt",
+ "copy_dev_command": "Sao chép lệnh cài đặt dev",
+ "dev_dependency_hint": "Thường được cài làm dependency dev",
+ "view_types": "Xem {package}"
+ },
+ "create": {
+ "title": "Tạo dự án mới",
+ "copy_command": "Sao chép lệnh tạo dự án",
+ "view": "{packageName} có cùng maintainer. Bấm để xem chi tiết."
+ },
+ "run": {
+ "title": "Chạy",
+ "locally": "Chạy cục bộ"
+ },
+ "readme": {
+ "title": "Readme",
+ "no_readme": "Không có README.",
+ "toc_title": "Dàn ý",
+ "callout": {
+ "note": "Ghi chú",
+ "tip": "Mẹo",
+ "important": "Quan trọng",
+ "warning": "Cảnh báo",
+ "caution": "Thận trọng"
+ },
+ "copy_as_markdown": "Sao chép README dạng Markdown"
+ },
+ "provenance_section": {
+ "title": "Provenance",
+ "built_and_signed_on": "Được build và ký trên {provider}",
+ "view_build_summary": "Xem tóm tắt build",
+ "source_commit": "Commit nguồn",
+ "build_file": "Tệp build",
+ "public_ledger": "Sổ cái công khai",
+ "transparency_log_entry": "Mục nhật ký minh bạch",
+ "view_more_details": "Xem thêm chi tiết",
+ "error_loading": "Không thể tải chi tiết provenance"
+ },
+ "security_downgrade": {
+ "title": "Giảm mức độ tin cậy",
+ "description_to_none_provenance": "Phiên bản này được phát hành mà không có {provenance}.",
+ "description_to_none_trustedPublisher": "Phiên bản này được phát hành mà không có {trustedPublishing}.",
+ "description_to_provenance_trustedPublisher": "Phiên bản này dùng {provenance} nhưng không dùng {trustedPublishing}.",
+ "fallback_install_provenance": "Lệnh cài đặt được ghim về {version}, phiên bản cuối cùng có provenance.",
+ "fallback_install_trustedPublisher": "Lệnh cài đặt được ghim về {version}, phiên bản cuối cùng có trusted publishing.",
+ "provenance_link_text": "provenance",
+ "trusted_publishing_link_text": "xuất bản đáng tin cậy"
+ },
+ "keywords_title": "Từ khóa",
+ "compatibility": "Tương thích",
+ "card": {
+ "publisher": "Nhà phát hành",
+ "published": "Đã phát hành",
+ "weekly_downloads": "Lượt tải hàng tuần",
+ "keywords": "Từ khóa",
+ "license": "Giấy phép",
+ "select": "Chọn gói",
+ "select_maximum": "Chỉ có thể chọn tối đa {count} gói"
+ },
+ "versions": {
+ "title": "Phiên bản",
+ "collapse": "Thu gọn {tag}",
+ "expand": "Mở rộng {tag}",
+ "collapse_other": "Thu gọn các phiên bản khác",
+ "expand_other": "Mở rộng các phiên bản khác",
+ "collapse_major": "Thu gọn major {major}",
+ "expand_major": "Mở rộng major {major}",
+ "other_versions": "Phiên bản khác",
+ "more_tagged": "Thêm {count} thẻ",
+ "all_covered": "Tất cả phiên bản đã được bao phủ bởi các thẻ ở trên",
+ "deprecated_title": "{version} (đã ngừng hỗ trợ)",
+ "view_all": "Xem {count} phiên bản | Xem tất cả {count} phiên bản",
+ "view_all_versions": "Xem tất cả phiên bản",
+ "distribution_title": "Nhóm Semver",
+ "distribution_modal_title": "Phiên bản",
+ "distribution_range_date_same_year": "từ {from} đến {to}, {endYear}",
+ "distribution_range_date_multiple_years": "từ {from}, {startYear} đến {to}, {endYear}",
+ "grouping_major": "Major",
+ "grouping_minor": "Minor",
+ "grouping_versions_title": "Phiên bản",
+ "grouping_versions_about": "Về cách nhóm phiên bản",
+ "grouping_versions_all": "Tất cả",
+ "grouping_versions_only_recent": "Chỉ gần đây",
+ "grouping_usage_title": "Mức sử dụng",
+ "grouping_usage_about": "Về cách nhóm mức sử dụng",
+ "grouping_usage_all": "Tất cả",
+ "grouping_usage_most_used": "Dùng nhiều nhất",
+ "recent_versions_only_tooltip": "Chỉ hiển thị phiên bản được phát hành trong vòng một năm gần nhất.",
+ "show_low_usage_tooltip": "Bao gồm các nhóm phiên bản có dưới 1% tổng lượt tải.",
+ "y_axis_label": "Lượt tải",
+ "filter_placeholder": "Lọc theo semver (ví dụ ^3.0.0)",
+ "filter_invalid": "Khoảng semver không hợp lệ",
+ "filter_help": "Trợ giúp lọc theo khoảng semver",
+ "filter_tooltip": "Lọc phiên bản bằng {link}. Ví dụ, ^3.0.0 sẽ hiện tất cả phiên bản 3.x.",
+ "filter_tooltip_link": "khoảng semver",
+ "no_matches": "Không có phiên bản khớp khoảng này",
+ "copy_alt": {
+ "per_version_analysis": "Phiên bản {version} được tải {downloads} lần",
+ "general_description": "Biểu đồ cột hiển thị lượt tải theo từng phiên bản cho {versions_count} phiên bản {semver_grouping_mode} của gói {package_name}, {date_range_label} từ phiên bản {first_version} đến {last_version}. Phiên bản được tải nhiều nhất là {max_downloaded_version} với {max_version_downloads} lượt tải. {per_version_analysis}. {watermark}."
+ },
+ "page_title": "Lịch sử phiên bản",
+ "current_tags": "Thẻ hiện tại",
+ "version_filter_placeholder": "Lọc phiên bản…",
+ "version_filter_label": "Lọc phiên bản",
+ "no_match_filter": "Không có phiên bản khớp {filter}"
+ },
+ "dependencies": {
+ "title": "Dependency ({count}) | Dependency ({count})",
+ "list_label": "Dependency của gói",
+ "show_all": "hiện {count} dep | hiện tất cả {count} dep",
+ "optional": "tùy chọn",
+ "view_vulnerabilities": "Xem lỗ hổng",
+ "outdated_major": "Chậm {count} major (mới nhất: {latest}) | Chậm {count} major (mới nhất: {latest})",
+ "outdated_minor": "Chậm {count} minor (mới nhất: {latest}) | Chậm {count} minor (mới nhất: {latest})",
+ "outdated_patch": "Có bản cập nhật patch (mới nhất: {latest})",
+ "has_replacement": "Dependency này có gợi ý thay thế",
+ "vulnerabilities_count": "{count} lỗ hổng | {count} lỗ hổng"
+ },
+ "peer_dependencies": {
+ "title": "Peer Dependency ({count}) | Peer Dependencies ({count})",
+ "list_label": "Peer dependency của gói",
+ "show_all": "hiện {count} peer dep | hiện tất cả {count} peer dep"
+ },
+ "optional_dependencies": {
+ "title": "Optional Dependency ({count}) | Optional Dependencies ({count})",
+ "list_label": "Optional dependency của gói",
+ "show_all": "hiện {count} optional dep | hiện tất cả {count} optional dep"
+ },
+ "maintainers": {
+ "title": "Người duy trì",
+ "list_label": "Người duy trì gói",
+ "you": "(bạn)",
+ "via": "qua {teams}",
+ "remove_owner": "Gỡ {name} khỏi chủ sở hữu",
+ "username_to_add": "Tên người dùng cần thêm làm chủ sở hữu",
+ "username_placeholder": "username...",
+ "add_button": "thêm",
+ "cancel_add": "Hủy thêm chủ sở hữu",
+ "add_owner": "+ Thêm chủ sở hữu",
+ "show_more": "(hiện thêm {count})",
+ "show_less": "(hiện ít hơn)",
+ "maintainer_template": "{avatar} {char126}{name}"
+ },
+ "trends": {
+ "chart_assistive_text": {
+ "keyboard_navigation_horizontal": "Dùng phím mũi tên trái và phải để duyệt các điểm dữ liệu.",
+ "keyboard_navigation_vertical": "Dùng phím mũi tên lên và xuống để duyệt các điểm dữ liệu.",
+ "table_available": "Bên dưới có bảng dữ liệu cho biểu đồ này.",
+ "table_caption": "Bảng dữ liệu biểu đồ"
+ },
+ "granularity": "Độ chi tiết",
+ "granularity_daily": "Hàng ngày",
+ "granularity_weekly": "Hàng tuần",
+ "granularity_monthly": "Hàng tháng",
+ "granularity_yearly": "Hàng năm",
+ "start_date": "Bắt đầu",
+ "end_date": "Kết thúc",
+ "loading": "Đang tải...",
+ "date_range": "{start} đến {end}",
+ "date_range_multiline": "{start}\nđến {end}",
+ "download_file": "Tải {fileType}",
+ "toggle_annotator": "Bật/tắt chú thích",
+ "toggle_stack_mode": "Bật/tắt chế độ xếp chồng",
+ "open_options": "Mở tùy chọn",
+ "close_options": "Đóng tùy chọn",
+ "legend_estimation": "Ước tính",
+ "no_data": "Không có dữ liệu",
+ "y_axis_label": "{granularity} {facet}",
+ "facet": "Khía cạnh",
+ "title": "Xu hướng",
+ "contributors_skip": "Không hiển thị trong mục Người đóng góp (không có repo GitHub):",
+ "items": {
+ "downloads": "Lượt tải",
+ "likes": "Lượt thích",
+ "contributors": "Người đóng góp"
+ },
+ "data_correction": "Hiệu chỉnh dữ liệu",
+ "average_window": "Cửa sổ trung bình",
+ "smoothing": "Làm mượt",
+ "prediction": "Dự đoán",
+ "known_anomalies": "Bất thường đã biết",
+ "known_anomalies_description": "Nội suy qua các đỉnh tải bất thường do bot hoặc sự cố CI gây ra.",
+ "known_anomalies_ranges": "Khoảng bất thường",
+ "known_anomalies_range": "Từ {start} đến {end}",
+ "known_anomalies_range_named": "{packageName}: từ {start} đến {end}",
+ "known_anomalies_none": "Không có bất thường đã biết cho gói này. | Không có bất thường đã biết cho các gói này.",
+ "known_anomalies_contribute": "Đóng góp dữ liệu bất thường",
+ "apply_correction": "Áp dụng hiệu chỉnh",
+ "copy_alt": {
+ "trend_none": "gần như đi ngang",
+ "trend_strong": "mạnh",
+ "trend_weak": "yếu",
+ "trend_undefined": "không xác định (thiếu dữ liệu)",
+ "button_label": "Sao chép văn bản thay thế",
+ "watermark": "Ở phía dưới có watermark ghi \"./npmx a fast, modern browser for the npm registry\"",
+ "analysis": "{package_name} bắt đầu ở {start_value} và kết thúc ở {end_value}, cho thấy xu hướng {trend} với độ dốc {downloads_slope} lượt tải mỗi khoảng thời gian",
+ "estimation": "Giá trị cuối là ước tính dựa trên dữ liệu một phần của kỳ hiện tại.",
+ "estimations": "Các giá trị cuối là ước tính dựa trên dữ liệu một phần của kỳ hiện tại.",
+ "compare": "Biểu đồ đường so sánh lượt tải cho các gói: {packages}.",
+ "single_package": "Biểu đồ đường lượt tải cho gói {package}.",
+ "general_description": "Trục Y biểu thị số lượt tải. Trục X biểu thị khoảng ngày, từ {start_date} đến {end_date}, với độ chi tiết {granularity}.{estimation_notice} {packages_analysis}. {watermark}.",
+ "facet_bar_general_description": "Biểu đồ cột ngang cho: {packages}, so sánh {facet} ({description}). {facet_analysis} {watermark}.",
+ "facet_bar_analysis": "{package_name} có giá trị {value}."
+ }
+ },
+ "downloads": {
+ "title": "Lượt tải hàng tuần",
+ "community_distribution": "Xem phân bố mức độ sử dụng theo cộng đồng",
+ "subtitle": "Trên tất cả phiên bản",
+ "sparkline_nav_hint": "Dùng ← →"
+ },
+ "install_scripts": {
+ "title": "Script cài đặt",
+ "script_label": "(script)",
+ "npx_packages": "{count} gói npx | {count} gói npx",
+ "currently": "hiện tại {version}"
+ },
+ "playgrounds": {
+ "title": "Thử ngay",
+ "choose": "chọn playground"
+ },
+ "metrics": {
+ "esm": "Hỗ trợ ES Modules",
+ "cjs": "Hỗ trợ CommonJS",
+ "no_esm": "Không hỗ trợ ES Modules",
+ "wasm": "Có WebAssembly",
+ "types_label": "Types",
+ "types_included": "Đã kèm types",
+ "types_available": "Có types qua {package}",
+ "no_types": "Không có types"
+ },
+ "license": {
+ "view_spdx": "Xem nội dung giấy phép trên SPDX",
+ "none": "Không có"
+ },
+ "vulnerabilities": {
+ "tree_found": "{vulns} lỗ hổng trong {packages}/{total} gói | {vulns} lỗ hổng trong {packages}/{total} gói",
+ "show_all_packages": "hiện {count} gói bị ảnh hưởng | hiện tất cả {count} gói bị ảnh hưởng",
+ "path": "đường dẫn",
+ "more": "+{count} nữa",
+ "packages_failed": "Không thể kiểm tra {count} gói | Không thể kiểm tra {count} gói",
+ "scan_failed": "Không thể quét lỗ hổng",
+ "severity": {
+ "critical": "nghiêm trọng",
+ "high": "cao",
+ "moderate": "trung bình",
+ "low": "thấp"
+ },
+ "fixed_in_title": "Đã khắc phục ở phiên bản {version}"
+ },
+ "deprecated": {
+ "label": "Đã ngừng hỗ trợ",
+ "tree_found": "{count} dependency đã ngừng hỗ trợ | {count} dependency đã ngừng hỗ trợ",
+ "show_all": "hiện {count} gói đã ngừng hỗ trợ | hiện tất cả {count} gói đã ngừng hỗ trợ"
+ },
+ "access": {
+ "title": "Quyền truy cập nhóm",
+ "refresh": "Làm mới quyền truy cập nhóm",
+ "list_label": "Danh sách quyền truy cập nhóm",
+ "owner": "owner",
+ "rw": "rw",
+ "ro": "ro",
+ "revoke_access": "Thu hồi quyền truy cập của {name}",
+ "no_access": "Chưa cấu hình quyền truy cập nhóm",
+ "select_team_label": "Chọn nhóm",
+ "loading_teams": "Đang tải nhóm...",
+ "select_team": "Chọn nhóm",
+ "permission_label": "Mức quyền",
+ "permission": {
+ "read_only": "chỉ đọc",
+ "read_write": "đọc-ghi"
+ },
+ "grant_button": "cấp quyền",
+ "cancel_grant": "Hủy cấp quyền truy cập",
+ "grant_access": "+ Cấp quyền truy cập nhóm"
+ },
+ "list": {
+ "filter_label": "Lọc gói",
+ "filter_placeholder": "Lọc gói...",
+ "sort_label": "Sắp xếp gói",
+ "showing_count": "Hiển thị {filtered} trên {total} gói"
+ },
+ "skeleton": {
+ "loading": "Đang tải chi tiết gói",
+ "maintainers": "Người duy trì",
+ "keywords": "Từ khóa",
+ "versions": "Phiên bản",
+ "dependencies": "Dependency"
+ },
+ "sort": {
+ "downloads": "Tải nhiều nhất",
+ "published": "Mới phát hành",
+ "name_asc": "Tên (A-Z)",
+ "name_desc": "Tên (Z-A)"
+ },
+ "size": {
+ "b": "{size} B",
+ "kb": "{size} kB",
+ "mb": "{size} MB"
+ },
+ "download": {
+ "button": "Tải xuống",
+ "tarball": "Tải tarball dạng .tar.gz"
+ }
+ },
+ "connector": {
+ "modal": {
+ "title": "Local Connector",
+ "connected": "Đã kết nối",
+ "connected_as_user": "Đã kết nối dưới tên ~{user}",
+ "connected_hint": "Bây giờ bạn có thể quản lý package và tổ chức từ giao diện web.",
+ "disconnect": "Ngắt kết nối",
+ "run_hint": "Chạy connector trên máy của bạn để bật các tính năng quản trị.",
+ "copy_command": "Sao chép lệnh",
+ "copied": "Đã sao chép",
+ "paste_token": "Sau đó dán token vào bên dưới để kết nối:",
+ "token_label": "Token",
+ "token_placeholder": "dán token tại đây...",
+ "advanced": "Tùy chọn nâng cao",
+ "port_label": "Cổng",
+ "warning": "CẢNH BÁO",
+ "warning_text": "Hành động này cho phép npmx truy cập npm CLI của bạn. Chỉ kết nối với các trang web bạn tin tưởng.",
+ "connect": "Kết nối",
+ "connecting": "Đang kết nối...",
+ "auto_open_url": "Tự động mở trang xác thực"
+ }
+ },
+ "operations": {
+ "queue": {
+ "title": "Chờ xử lý",
+ "clear_all": "xóa tất cả",
+ "refresh": "Làm mới thao tác",
+ "empty": "Không có thao tác nào trong hàng đợi",
+ "empty_hint": "Thêm thao tác từ trang package hoặc tổ chức",
+ "active_label": "Thao tác đang hoạt động",
+ "otp_required": "Yêu cầu OTP",
+ "otp_prompt": "Nhập OTP để tiếp tục",
+ "otp_placeholder": "Nhập mã OTP...",
+ "otp_label": "Mật khẩu dùng một lần",
+ "retry_otp": "Thử lại với OTP",
+ "retry_web_auth": "Thử lại bằng xác thực web",
+ "retrying": "Đang thử lại...",
+ "open_web_auth": "Mở liên kết xác thực web",
+ "approve_operation": "Phê duyệt thao tác",
+ "remove_operation": "Xóa thao tác",
+ "approve_all": "Phê duyệt tất cả",
+ "execute": "Thực thi",
+ "executing": "Đang thực thi...",
+ "log": "Nhật ký (Log)",
+ "log_label": "Nhật ký thao tác đã hoàn thành",
+ "remove_from_log": "Xóa khỏi nhật ký"
+ }
+ },
+ "org": {
+ "teams": {
+ "title": "Nhóm (Team)",
+ "refresh": "Tải lại danh sách nhóm",
+ "filter_label": "Lọc nhóm",
+ "filter_placeholder": "Lọc nhóm...",
+ "sort_by": "Sắp xếp theo",
+ "loading": "Đang tải danh sách nhóm...",
+ "no_teams": "Không tìm thấy nhóm nào",
+ "list_label": "Các nhóm trong tổ chức",
+ "delete_team": "Xóa nhóm {name}",
+ "member_count": "{count} thành viên | {count} thành viên",
+ "members_of": "Thành viên của {team}",
+ "no_members": "Không có thành viên",
+ "remove_user": "Bỏ {user} khỏi nhóm",
+ "username_to_add": "Tên người dùng cần thêm vào {team}",
+ "username_placeholder": "username...",
+ "add_button": "thêm",
+ "cancel_add_user": "Hủy thêm người dùng",
+ "add_member": "+ Thêm thành viên",
+ "team_name_label": "Tên nhóm",
+ "team_name_placeholder": "ten-nhom...",
+ "create_button": "tạo",
+ "no_match": "Không có nhóm nào khớp với \"{query}\"",
+ "cancel_create": "Hủy tạo nhóm",
+ "create_team": "+ Tạo nhóm"
+ },
+ "members": {
+ "title": "Thành viên",
+ "refresh": "Làm mới danh sách thành viên",
+ "filter_label": "Lọc thành viên",
+ "filter_placeholder": "Lọc thành viên...",
+ "filter_by_role": "Lọc theo vai trò",
+ "filter_by_team": "Lọc theo nhóm",
+ "all_teams": "tất cả nhóm",
+ "sort_by": "Sắp xếp theo",
+ "loading": "Đang tải danh sách thành viên...",
+ "no_members": "Không tìm thấy thành viên nào",
+ "list_label": "Thành viên tổ chức",
+ "change_role_for": "Thay đổi vai trò cho {name}",
+ "remove_from_org": "Gỡ {name} khỏi tổ chức",
+ "view_team": "Xem nhóm {team}",
+ "no_match": "Không có thành viên nào khớp với bộ lọc",
+ "username_label": "Tên người dùng",
+ "username_placeholder": "username...",
+ "role_label": "Vai trò",
+ "role": {
+ "all": "tất cả",
+ "developer": "nhà phát triển (developer)",
+ "admin": "quản trị viên (admin)",
+ "owner": "chủ sở hữu (owner)"
+ },
+ "team_label": "Nhóm",
+ "no_team": "không có nhóm",
+ "add_button": "thêm",
+ "cancel_add": "Hủy thêm thành viên",
+ "add_member": "+ Thêm thành viên"
+ },
+ "public_packages": "{count} package công khai | {count} package công khai",
+ "page": {
+ "packages_title": "Package",
+ "members_tab": "Thành viên",
+ "teams_tab": "Nhóm",
+ "no_packages": "Không tìm thấy package công khai nào cho",
+ "no_packages_hint": "Tổ chức này có thể không tồn tại hoặc không có package công khai nào.",
+ "failed_to_load": "Không thể tải package của tổ chức",
+ "no_match": "Không có package nào khớp với \"{query}\"",
+ "not_found": "Không tìm thấy tổ chức",
+ "not_found_message": "Tổ chức \"{'@'}{name}\" không tồn tại trên npm"
+ }
+ },
+ "user": {
+ "combobox": {
+ "add_to_org_hint": "(cũng sẽ thêm vào tổ chức)",
+ "press_enter_to_add": "Nhấn Enter để thêm {'@'}{username}",
+ "default_placeholder": "username...",
+ "suggestions_label": "Gợi ý người dùng"
+ },
+ "page": {
+ "packages_title": "Package",
+ "no_packages": "Không tìm thấy package công khai nào cho",
+ "no_packages_hint": "Người dùng này có thể không tồn tại hoặc không có package công khai nào.",
+ "failed_to_load": "Không thể tải package của người dùng",
+ "no_match": "Không có package nào khớp với \"{query}\"",
+ "filter_placeholder": "Lọc {count} package... | Lọc {count} package..."
+ },
+ "orgs_page": {
+ "title": "Tổ chức",
+ "back_to_profile": "Quay lại hồ sơ",
+ "connect_required": "Kết nối CLI cục bộ (local) để xem các tổ chức của bạn.",
+ "connect_hint_prefix": "Chạy",
+ "connect_hint_suffix": "để bắt đầu.",
+ "own_orgs_only": "Bạn chỉ có thể xem các tổ chức của chính mình.",
+ "view_your_orgs": "Xem các tổ chức của bạn",
+ "loading": "Đang tải danh sách tổ chức...",
+ "empty": "Không tìm thấy tổ chức nào.",
+ "empty_hint": "Tổ chức được nhận dạng dựa trên package trong phạm vi của bạn (scoped package).",
+ "count": "{count} Tổ chức | {count} Tổ chức",
+ "packages_count": "{count} package | {count} package"
+ }
+ },
+ "claim": {
+ "modal": {
+ "title": "Lấy tên Package",
+ "success": "Đã lấy package!",
+ "success_detail": "{name}{'@'}0.0.0 đã được xuất bản lên npm.",
+ "success_hint": "Bây giờ bạn có thể xuất bản các phiên bản mới cho package này bằng lệnh npm publish.",
+ "view_package": "Xem Package",
+ "invalid_name": "Tên package không hợp lệ:",
+ "available": "Bạn có thể lấy tên này!",
+ "taken": "Tên này đã được sử dụng.",
+ "missing_permission": "Bạn không có quyền thêm package vào scope {'@'}{scope}.",
+ "similar_warning": "Package tương tự đã tồn tại - npm có thể từ chối tên này:",
+ "related": "Package liên quan:",
+ "scope_warning_title": "Cân nhắc sử dụng package có scope",
+ "scope_warning_text": "Tên package không có scope là tài nguyên chung. Chỉ lấy tên nếu bạn thực sự định xuất bản và duy trì package. Đối với các dự án cá nhân hoặc tổ chức, hãy sử dụng tên có scope như {'@'}{username}/{name}.",
+ "connect_required": "Kết nối với connector cục bộ (local) để lấy tên package này.",
+ "connect_button": "Kết nối với Connector",
+ "publish_hint": "Hành động này sẽ xuất bản một package giữ chỗ tối giản.",
+ "preview_json": "Xem trước package.json",
+ "claim_button": "Lấy tên Package",
+ "publishing": "Đang xuất bản...",
+ "checking": "Đang kiểm tra tính khả dụng...",
+ "failed_to_check": "Không thể kiểm tra tính khả dụng của tên",
+ "failed_to_claim": "Không thể lấy package"
+ }
+ },
+ "code": {
+ "files_label": "Tệp",
+ "no_files": "Không có tệp nào trong thư mục này",
+ "root": "gốc",
+ "lines": "{count} dòng | {count} dòng",
+ "toggle_tree": "Bật/tắt cây thư mục",
+ "close_tree": "Đóng cây thư mục",
+ "copy_link": "Sao chép liên kết",
+ "raw": "Thô",
+ "view_raw": "Xem tệp thô",
+ "file_too_large": "Tệp quá lớn để xem trước",
+ "file_size_warning": "{size} vượt quá giới hạn 500KB để tô màu cú pháp (syntax highlight)",
+ "failed_to_load": "Không thể tải tệp",
+ "unavailable_hint": "Tệp có thể quá lớn hoặc không khả dụng",
+ "version_required": "Cần có phiên bản để xem mã nguồn",
+ "go_to_package": "Đến package",
+ "loading_tree": "Đang tải cây thư mục...",
+ "failed_to_load_tree": "Không thể tải các tệp tại phiên bản này",
+ "back_to_package": "Quay lại package",
+ "table": {
+ "name": "Tên",
+ "size": "Kích thước"
+ },
+ "markdown_view_mode": {
+ "preview": "xem trước",
+ "code": "mã nguồn"
+ },
+ "file_path": "Đường dẫn tệp",
+ "binary_file": "Tệp binary",
+ "binary_rendering_warning": "Loại tệp \"{contentType}\" không hỗ trợ xem trước."
+ },
+ "badges": {
+ "provenance": {
+ "verified": "đã xác minh",
+ "verified_title": "Provenance đã xác minh",
+ "verified_via": "Đã xác minh: xuất bản qua {provider}"
+ },
+ "jsr": {
+ "title": "cũng có trên JSR"
+ }
+ },
+ "filters": {
+ "title": "Bộ lọc",
+ "search": "Tìm kiếm",
+ "search_scope": "Phạm vi tìm kiếm",
+ "search_placeholder_name": "Lọc theo tên package...",
+ "search_placeholder_description": "Lọc theo mô tả...",
+ "search_placeholder_keywords": "Lọc theo từ khóa...",
+ "search_placeholder_all": "Tìm tất cả hoặc dùng name: desc: kw:",
+ "scope_name": "Tên",
+ "scope_name_description": "Chỉ tìm trong tên package",
+ "scope_description": "Mô tả",
+ "scope_description_description": "Chỉ tìm trong mô tả",
+ "scope_keywords": "Từ khóa",
+ "scope_keywords_description": "Chỉ tìm trong từ khóa",
+ "scope_all": "Tất cả",
+ "scope_all_description": "Tìm tất cả trường, hỗ trợ name: desc: kw:",
+ "weekly_downloads": "Lượt tải hàng tuần",
+ "updated_within": "Cập nhật trong vòng",
+ "security": "Bảo mật",
+ "keywords": "Từ khóa",
+ "more_keywords": "+{count} nữa",
+ "clear_all": "Xóa tất cả",
+ "remove_filter": "Gỡ bộ lọc {label}",
+ "chips": {
+ "search": "Tìm kiếm",
+ "downloads": "Lượt tải",
+ "keyword": "Từ khóa",
+ "security": "Bảo mật",
+ "updated": "Cập nhật"
+ },
+ "download_range": {
+ "any": "Bất kỳ",
+ "lt100": "< 100",
+ "100_1k": "100 - 1K",
+ "1k_10k": "1K - 10K",
+ "10k_100k": "10K - 100K",
+ "gt100k": "> 100K"
+ },
+ "updated": {
+ "any": "Mọi lúc",
+ "week": "Tuần qua",
+ "month": "Tháng qua",
+ "quarter": "3 tháng qua",
+ "year": "Năm qua"
+ },
+ "security_options": {
+ "all": "Tất cả package",
+ "secure": "Không có cảnh báo",
+ "insecure": "Có cảnh báo"
+ },
+ "view_selected": "Xem các mục đã chọn",
+ "clear_selected_label": "Xóa các mục đã chọn",
+ "sort": {
+ "label": "Sắp xếp package",
+ "toggle_direction": "Đổi chiều sắp xếp",
+ "ascending": "Tăng dần",
+ "descending": "Giảm dần",
+ "relevance": "Độ liên quan",
+ "downloads_week": "Lượt tải/tuần",
+ "downloads_day": "Lượt tải/ngày",
+ "downloads_month": "Lượt tải/tháng",
+ "downloads_year": "Lượt tải/năm",
+ "published": "Xuất bản lần cuối",
+ "name": "Tên"
+ },
+ "columns": {
+ "title": "Cột",
+ "show": "Hiển thị cột",
+ "reset": "Đặt lại mặc định",
+ "coming_soon": "Sắp ra mắt",
+ "name": "Tên",
+ "version": "Phiên bản",
+ "description": "Mô tả",
+ "downloads": "Lượt tải/tuần",
+ "published": "Xuất bản lần cuối",
+ "maintainers": "Người duy trì",
+ "keywords": "Từ khóa",
+ "security": "Bảo mật",
+ "selection": "Chọn package"
+ },
+ "view_mode": {
+ "label": "Chế độ xem",
+ "cards": "Dạng thẻ",
+ "table": "Dạng bảng"
+ },
+ "pagination": {
+ "mode_label": "Chế độ phân trang",
+ "infinite": "Vô hạn",
+ "paginated": "Phân trang",
+ "items_per_page": "Số mục mỗi trang",
+ "per_page": "{count} / trang",
+ "showing": "{range} trên {total}",
+ "previous": "Trang trước",
+ "next": "Trang sau",
+ "nav_label": "Phân trang"
+ },
+ "count": {
+ "showing_filtered": "{filtered} trên {count} package | {filtered} trên {count} package",
+ "showing_all": "{count} package | {count} package",
+ "showing_paginated": "{pageSize} trên {count} package | {pageSize} trên {count} package"
+ },
+ "table": {
+ "security_warning": "Cảnh báo bảo mật",
+ "secure": "An toàn",
+ "no_packages": "Không tìm thấy package nào"
+ }
+ },
+ "about": {
+ "title": "Giới thiệu",
+ "heading": "giới thiệu",
+ "meta_description": "npmx là trình duyệt nhanh và hiện đại cho npm registry. Trải nghiệm UX/DX vượt trội để khám phá package từ npm.",
+ "what_we_are": {
+ "title": "NPMX là:",
+ "better_ux_dx": "UX/DX vượt trội",
+ "admin_ui": "giao diện quản trị",
+ "description": "npmx mang đến {betterUxDx} cho npm registry và các công cụ liên quan. Chúng tôi nỗ lực cung cấp một giao diện nhanh, hiện đại để khám phá package, với các tính năng như chế độ tối, điều hướng bằng bàn phím, duyệt mã nguồn và kết nối với registry thay thế như {jsr}.",
+ "admin_description": "Chúng tôi cũng hướng tới việc cung cấp một {adminUi} tốt để quản lý package, nhóm và tổ chức của bạn — làm được tất cả từ trình duyệt, hỗ trợ bằng npm CLI cục bộ."
+ },
+ "what_we_are_not": {
+ "title": "NPMX không phải là:",
+ "not_package_manager": "Không phải trình quản lý package.",
+ "not_registry": "Không phải là một registry.",
+ "registry_description": "Chúng tôi không lưu trữ package. Đây chỉ là một công cụ tìm kiếm nhanh chóng và hiện đại hơn.",
+ "package_managers_exist": "{already} {people} {building} {really} {cool} {package} {managers}.",
+ "words": {
+ "already": "Đã có",
+ "people": "những nỗ lực",
+ "building": "xây dựng",
+ "really": "trình quản lý",
+ "cool": "package",
+ "package": "thực sự",
+ "managers": "tuyệt vời"
+ }
+ },
+ "sponsors": {
+ "title": "Nhà tài trợ"
+ },
+ "oss_partners": {
+ "title": "Đối tác nguồn mở (OSS)"
+ },
+ "team": {
+ "title": "Đội ngũ",
+ "governance": "Quản trị",
+ "role_steward": "người điều hành",
+ "role_maintainer": "người duy trì",
+ "sponsor": "tài trợ",
+ "sponsor_aria": "Tài trợ {name} trên GitHub"
+ },
+ "contributors": {
+ "title": "... và {count} người đóng góp khác | ... và {count} người đóng góp khác",
+ "description": "npmx hoàn toàn là mã nguồn mở, được xây dựng bởi một cộng đồng người đóng góp tuyệt vời. Hãy tham gia cùng chúng tôi để cùng nhau xây dựng trải nghiệm tìm kiếm npm mà chúng ta luôn mong muốn.",
+ "loading": "Đang tải danh sách người đóng góp...",
+ "error": "Không thể tải danh sách người đóng góp",
+ "view_profile": "Xem hồ sơ GitHub của {name}"
+ },
+ "get_involved": {
+ "title": "Tham gia",
+ "contribute": {
+ "title": "Đóng góp",
+ "description": "Giúp xây dựng một trải nghiệm npm mà ta đều mong muốn",
+ "cta": "Xem tại GitHub"
+ },
+ "community": {
+ "title": "Gia nhập cộng đồng",
+ "description": "Trò chuyện, hỏi đáp, và chia sẻ ý tưởng",
+ "cta": "Tham gia Discord"
+ },
+ "builders": {
+ "title": "Phát triển npmx",
+ "description": "Tham gia nhóm phát triển, cùng vẽ ra tương lai của npmx",
+ "cta": "Vào Builders Discord"
+ },
+ "follow": {
+ "title": "Theo dõi",
+ "description": "Cập nhật thông tin mới nhất từ npmx",
+ "cta": "Theo dõi Bluesky"
+ }
+ }
+ },
+ "account_menu": {
+ "connect": "kết nối",
+ "account": "Tài khoản",
+ "npm_cli": "npm CLI",
+ "atmosphere": "Atmosphere",
+ "npm_cli_desc": "Quản lý package & tổ chức",
+ "atmosphere_desc": "Mạng xã hội và định danh",
+ "connect_npm_cli": "Kết nối với npm CLI",
+ "connect_atmosphere": "Kết nối với Atmosphere",
+ "connecting": "Đang kết nối...",
+ "ops": "{count} thao tác | {count} thao tác"
+ },
+ "auth": {
+ "modal": {
+ "title": "Atmosphere",
+ "connected_as": "Đã kết nối dưới tên {'@'}{handle}",
+ "disconnect": "Ngắt kết nối",
+ "connect_prompt": "Kết nối với tài khoản Atmosphere của bạn",
+ "handle_label": "Handle",
+ "handle_placeholder": "alice.npmx.social",
+ "connect": "Kết nối",
+ "create_account": "Tạo tài khoản mới",
+ "connect_bluesky": "Kết nối với Bluesky",
+ "what_is_atmosphere": "Tài khoản Atmosphere là gì?",
+ "atmosphere_explanation": "{npmx} sử dụng {atproto} để vận hành nhiều tính năng mạng xã hội, cho phép người dùng sở hữu dữ liệu của chính mình và sử dụng một tài khoản cho tất cả các ứng dụng tương thích. Một khi bạn tạo tài khoản, bạn có thể sử dụng các ứng dụng khác như {bluesky} và {tangled} với cùng một tài khoản đó.",
+ "default_input_error": "Vui lòng nhập handle, DID hoặc URL PDS đầy đủ hợp lệ",
+ "profile": "Hồ sơ"
+ }
+ },
+ "header": {
+ "home": "trang chủ npmx",
+ "packages": "package",
+ "packages_dropdown": {
+ "title": "Package của bạn",
+ "loading": "Đang tải...",
+ "error": "Không thể tải package",
+ "empty": "Không tìm thấy package nào",
+ "view_all": "Xem tất cả"
+ },
+ "orgs": "tổ chức",
+ "orgs_dropdown": {
+ "title": "Tổ chức của bạn",
+ "loading": "Đang tải...",
+ "error": "Không thể tải tổ chức",
+ "empty": "Không tìm thấy tổ chức nào",
+ "view_all": "Xem tất cả"
+ },
+ "pr": "Mở GitHub pull request #{prNumber}"
+ },
+ "compare": {
+ "packages": {
+ "title": "so sánh package",
+ "tagline": "đối chiếu để đưa ra lựa chọn tốt nhất",
+ "meta_title": "So sánh {packages} - npmx",
+ "meta_title_empty": "So sánh package - npmx",
+ "meta_description": "Đối chiếu {packages}",
+ "meta_description_empty": "Đối chiếu package",
+ "section_packages": "Package",
+ "section_facets": "Bộ lọc",
+ "section_comparison": "So sánh",
+ "copy_as_markdown": "Sao chép bảng",
+ "loading": "Đang tải dữ liệu package...",
+ "error": "Không thể tải dữ liệu package. Vui lòng thử lại.",
+ "empty_title": "Chọn package để so sánh",
+ "empty_description": "Tìm và thêm ít nhất 2 package để đối chiếu dựa trên thông số của chúng.",
+ "table_view": "Bảng",
+ "charts_view": "Biểu đồ",
+ "bar_chart_nav_hint": "Dùng ↑ ↓",
+ "line_chart_nav_hint": "Dùng ← →"
+ },
+ "selector": {
+ "search_label": "Tìm kiếm package",
+ "search_first": "Tìm kiếm package...",
+ "search_add": "Thêm một package khác...",
+ "searching": "Đang tìm kiếm...",
+ "remove_package": "Gỡ {package}",
+ "packages_selected": "Đã chọn {count}/{max} package.",
+ "add_hint": "Thêm ít nhất 2 package để so sánh."
+ },
+ "no_dependency": {
+ "label": "(Không dependency)",
+ "typeahead_title": "Văn sẽ làm gì?",
+ "typeahead_description": "So sánh với việc không sử dụng dependency! Đã được e18e phê duyệt.",
+ "tooltip_title": "Bạn có thể không cần dependency",
+ "tooltip_description": "So sánh với việc không sử dụng dependency! {link} duy trì một danh sách các package có thể được thay thế bằng API có sẵn hoặc giải pháp đơn giản hơn.",
+ "e18e_community": "cộng đồng e18e",
+ "add_column": "Thêm cột không dependency vào so sánh"
+ },
+ "facets": {
+ "all": "tất cả",
+ "none": "không",
+ "select_all_category_facets": "Chọn tất cả phễu lọc {category}",
+ "deselect_all_category_facets": "Bỏ chọn tất cả phễu lọc {category}",
+ "selected_all_category_facets": "Đã chọn tất cả phễu lọc {category}",
+ "deselected_all_category_facets": "Đã bỏ chọn tất cả phễu lọc {category}",
+ "coming_soon": "Sắp ra mắt",
+ "select_all": "Chọn tất cả phễu lọc",
+ "deselect_all": "Bỏ chọn tất cả phễu lọc",
+ "binary_only_tooltip": "Package này cung cấp tệp thực thi và không có đầu xuất (export)",
+ "categories": {
+ "performance": "Hiệu năng",
+ "health": "Tình trạng (health)",
+ "compatibility": "Tương thích",
+ "security": "Bảo mật & Tuân thủ"
+ },
+ "items": {
+ "packageSize": {
+ "label": "Kích thước package",
+ "description": "Kích thước của chính package (sau khi giải nén)"
+ },
+ "installSize": {
+ "label": "Kích thước cài đặt",
+ "description": "Tổng kích thước cài đặt bao gồm tất cả dependency"
+ },
+ "dependencies": {
+ "label": "Dependency trực tiếp",
+ "description": "Số lượng dependency trực tiếp"
+ },
+ "totalDependencies": {
+ "label": "Tổng dependency",
+ "description": "Tổng số dependency bao gồm cả dependency bắc cầu"
+ },
+ "downloads": {
+ "label": "Lượt tải/tuần",
+ "description": "Số lượt tải hàng tuần"
+ },
+ "totalLikes": {
+ "label": "Lượt thích",
+ "description": "Số lượt thích"
+ },
+ "lastUpdated": {
+ "label": "Đã xuất bản",
+ "description": "Thời điểm phiên bản này được xuất bản"
+ },
+ "deprecated": {
+ "label": "Ngừng hỗ trợ (deprecated)?",
+ "description": "Liệu package có bị ngừng hỗ trợ hay không"
+ },
+ "engines": {
+ "label": "Engine",
+ "description": "Yêu cầu phiên bản Node.js"
+ },
+ "types": {
+ "label": "Types",
+ "description": "Định nghĩa kiểu TypeScript"
+ },
+ "moduleFormat": {
+ "label": "Định dạng Module",
+ "description": "Hỗ trợ ESM/CJS"
+ },
+ "license": {
+ "label": "Giấy phép",
+ "description": "Giấy phép của package"
+ },
+ "vulnerabilities": {
+ "label": "Lỗ hổng",
+ "description": "Các lỗ hổng bảo mật phổ biến"
+ }
+ },
+ "values": {
+ "any": "Bất kỳ",
+ "none": "Không",
+ "unknown": "Không xác định",
+ "deprecated": "Ngừng hỗ trợ (deprecated)",
+ "not_deprecated": "Không",
+ "types_included": "Bao gồm",
+ "types_none": "Không có",
+ "vulnerabilities_summary": "{count} ({critical}C/{high}H)",
+ "up_to_you": "Tùy bạn!"
+ },
+ "trends": {
+ "title": "So sánh xu hướng"
+ }
+ },
+ "file_changes": "Thay đổi tệp",
+ "files_count": "{count} tệp | {count} tệp",
+ "lines_hidden": "{count} dòng ẩn | {count} dòng ẩn",
+ "file_too_large": "Tệp quá lớn để so sánh",
+ "file_size_warning": "{size} vượt quá giới hạn 250KB để so sánh",
+ "compare_versions": "diff",
+ "compare_versions_title": "So sánh với phiên bản mới nhất",
+ "comparing_versions_label": "Đang so sánh các phiên bản...",
+ "version_back_to_package": "Quay lại package",
+ "version_error_message": "Không thể so sánh các phiên bản.",
+ "version_invalid_url_format": {
+ "hint": "URL so sánh không hợp lệ. Sử dụng định dạng: {0}",
+ "from_version": "từ",
+ "to_version": "đến"
+ },
+ "version_selector_title": "So sánh với phiên bản",
+ "summary": "Tóm tắt",
+ "deps_count": "{count} dep | {count} dep",
+ "dependencies": "Dependencies",
+ "dev_dependencies": "Dev Dependencies",
+ "peer_dependencies": "Peer Dependencies",
+ "optional_dependencies": "Optional Dependencies",
+ "no_dependency_changes": "Không có thay đổi về dependency",
+ "file_filter_option": {
+ "all": "Tất cả ({count})",
+ "added": "Đã thêm ({count})",
+ "removed": "Đã xóa ({count})",
+ "modified": "Đã sửa ({count})"
+ },
+ "search_files_placeholder": "Tìm kiếm tệp...",
+ "no_files_all": "Không có tệp",
+ "no_files_search": "Không có tệp nào khớp với \"{query}\"",
+ "no_files_filtered": "Không có tệp {filter}",
+ "filter": {
+ "added": "đã thêm",
+ "removed": "đã xóa",
+ "modified": "đã sửa"
+ },
+ "files_button": "Tệp",
+ "select_file_prompt": "Chọn một tệp từ thanh bên để xem thay đổi",
+ "close_files_panel": "Đóng bảng danh sách tệp",
+ "filter_files_label": "Lọc tệp theo loại thay đổi",
+ "change_ratio": "Tỷ lệ thay đổi",
+ "char_edits": "Chỉnh sửa ký tự",
+ "diff_distance": "Khoảng cách khác biệt",
+ "loading_diff": "Đang tải thay đổi...",
+ "loading_diff_error": "Không thể tải thay đổi",
+ "merge_modified_lines": "Gộp các dòng đã sửa",
+ "no_content_changes": "Không phát hiện thay đổi về nội dung",
+ "options": "Tùy chọn",
+ "view_file": "Xem tệp",
+ "view_in_code_browser": "Xem trong trình duyệt mã nguồn",
+ "word_wrap": "Ngắt dòng"
+ },
+ "pds": {
+ "title": "npmx.social",
+ "meta_description": "Server Dữ liệu Cá nhân (PDS) chính thức của AT Protocol cho cộng đồng npmx.",
+ "join": {
+ "title": "Gia nhập Cộng đồng",
+ "description": "Hoan nghênh bạn dù bạn đang tạo tài khoản đầu tiên trên atmosphere hay chuyển một tài khoản hiện có sang. Bạn có thể chuyển tài khoản hiện tại của mình mà không mất handle, bài đăng hoặc người theo dõi.",
+ "migrate": "Chuyển vùng với PDS MOOver"
+ },
+ "server": {
+ "title": "Chi tiết Server",
+ "location_label": "Vị trí:",
+ "location_value": "Nuremberg, Đức",
+ "infrastructure_label": "Cơ sở hạ tầng:",
+ "infrastructure_value": "Lưu trữ trên Hetzner",
+ "privacy_label": "Quyền riêng tư:",
+ "privacy_value": "Tuân thủ luật Bảo vệ Dữ liệu nghiêm ngặt của EU",
+ "learn_more": "Tìm hiểu cách npmx sử dụng Atmosphere"
+ },
+ "community": {
+ "title": "Ai đang ở đây",
+ "description": "Một số trong {count} tài khoản đã coi npmx.social là nhà:",
+ "loading": "Đang tải cộng đồng PDS...",
+ "error": "Không thể tải cộng đồng PDS.",
+ "empty": "Không có thành viên cộng đồng để hiển thị.",
+ "view_profile": "Xem hồ sơ của {handle}",
+ "new_accounts": "...cộng thêm {count} người nữa mới gia nhập atmosphere"
+ }
+ },
+ "privacy_policy": {
+ "title": "chính sách bảo mật",
+ "last_updated": "Cập nhật lần cuối: {date}",
+ "welcome": "Chào mừng bạn đến với {app}. Chúng tôi cam kết bảo vệ quyền riêng tư của bạn. Chính sách này giải thích những dữ liệu chúng tôi thu thập, cách chúng tôi sử dụng và các quyền của bạn đối với thông tin của mình.",
+ "cookies": {
+ "what_are": {
+ "title": "Cookie là gì?",
+ "p1": "Cookie là các tệp văn bản nhỏ được lưu trữ trên thiết bị của bạn khi bạn truy cập một trang web. Mục đích của chúng là cải thiện trải nghiệm duyệt web của bạn bằng cách ghi nhớ một số tùy chọn và cài đặt nhất định."
+ },
+ "types": {
+ "title": "Chúng tôi sử dụng những loại cookie nào?",
+ "p1": "Chúng tôi chỉ sử dụng {bold} cho các mục đích thực sự cần thiết đối với chức năng của trang web. Chúng tôi không sử dụng cookie của bên thứ ba hoặc cookie quảng cáo.",
+ "bold": "các cookie kỹ thuật thiết yếu",
+ "li1": "{li11}{separator} {li12}",
+ "li2": "{li21}{separator} {li22}",
+ "separator": ":",
+ "cookie_vdpl": "__vdpl",
+ "cookie_vdpl_desc": "Cookie này được sử dụng bởi nhà cung cấp dịch vụ lưu trữ của chúng tôi (Vercel) để bảo vệ chống sai lệch phiên bản, đảm bảo bạn tải các tài nguyên từ đúng phiên bản triển khai nếu có một bản cập nhật mới được phát hành trong khi bạn đang duyệt web, và không dùng để theo dõi bạn.",
+ "cookie_h3": "h3",
+ "cookie_h3_desc": "Đây là cookie secure session của chúng tôi. Nó lưu trữ mã xác thực OAuth khi bạn kết nối tài khoản Atmosphere, là thiết yếu để duy trì phiên đăng nhập của bạn."
+ },
+ "local_storage": {
+ "title": "Local storage",
+ "p1": "Ngoài các cookie session, chúng tôi sử dụng {bold} của trình duyệt để lưu các tùy chọn hiển thị của bạn. Điều này cho phép nhớ chủ đề (sáng/tối) và một số {settings} khác mà bạn đã chọn, giúp bạn không phải cấu hình lại mỗi lần truy cập.",
+ "bold": "Lưu trữ Cục bộ (Local Storage)",
+ "p2": "Thông tin này hoàn toàn mang tính chức năng, chỉ được lưu trữ trên thiết bị của bạn và {bold2}. Chúng tôi sử dụng với mục đích duy nhất để cải thiện trải nghiệm của bạn trên trang web.",
+ "bold2": "không chứa dữ liệu cá nhân cũng như không được dùng để theo dõi bạn",
+ "settings": "cài đặt"
+ },
+ "management": {
+ "title": "Quản lý cookie",
+ "p1": "Bạn có thể cấu hình trình duyệt của mình để chấp nhận, từ chối hoặc xóa cookie theo ý muốn. Tuy nhiên, xin lưu ý rằng {bold}.",
+ "bold": "từ chối các cookie thiết yếu có thể ngăn cản việc truy cập một cách đầy đủ vào ứng dụng",
+ "p2": "Dưới đây là các liên kết hướng dẫn quản lý cookie trong các trình duyệt phổ biến nhất:",
+ "chrome": "Google Chrome (mở trong cửa sổ mới)",
+ "firefox": "Mozilla Firefox (mở trong cửa sổ mới)",
+ "edge": "Microsoft Edge (mở trong cửa sổ mới)"
+ }
+ },
+ "analytics": {
+ "title": "Phân tích",
+ "p1": "Chúng tôi sử dụng {bold} để hiểu cách khách truy cập sử dụng trang web của chúng tôi. Điều này giúp chúng tôi cải thiện trải nghiệm người dùng và xác định các vấn đề.",
+ "bold": "Vercel Web Analytics",
+ "p2": "Vercel Analytics được thiết kế với sự ưu tiên về quyền riêng tư:",
+ "li1": "Không sử dụng cookie",
+ "li2": "Không thu thập các mã định danh cá nhân",
+ "li3": "Không theo dõi người dùng qua các trang web khác nhau",
+ "li4": "Tất cả dữ liệu được tổng hợp và ẩn danh",
+ "p3": "Thông tin duy nhất được thu thập bao gồm: URL trang, trang giới thiệu, quốc gia/khu vực, loại thiết bị, trình duyệt và hệ điều hành. Dữ liệu này không thể được sử dụng để nhận dạng từng người dùng cụ thể."
+ },
+ "authenticated": {
+ "title": "Người dùng đã đăng nhập",
+ "p1": "Khi bạn kết nối tài khoản {bold} với npmx, chúng tôi lưu trữ mã xác thực OAuth của bạn trong một cookie session an toàn, chỉ dành cho HTTP. Mã này chỉ được sử dụng để xác thực các yêu cầu thay mặt cho bạn.",
+ "bold": "Atmosphere",
+ "p2": "Chúng tôi không lưu trữ thông tin đăng nhập của bạn và không truy cập bất kỳ dữ liệu nào vượt quá mức cần thiết để cung cấp các tính năng bạn sử dụng. Bạn có thể ngắt kết nối tài khoản của mình bất kỳ lúc nào từ trang {settings}.",
+ "settings": "cài đặt"
+ },
+ "data_retention": {
+ "title": "Lưu trữ dữ liệu",
+ "p1": "Cookie session sẽ tự động bị xóa khi bạn đóng trình duyệt hoặc sau một khoảng thời gian không hoạt động. Các tùy chọn lưu trữ cục bộ vẫn còn trên thiết bị của bạn cho đến khi bạn xóa dữ liệu trình duyệt. Dữ liệu phân tích được giữ lại dưới dạng tổng hợp và không thể liên kết với người dùng cụ thể."
+ },
+ "your_rights": {
+ "title": "Quyền của bạn",
+ "p1": "Bạn có quyền:",
+ "li1": "Truy cập thông tin về những dữ liệu chúng tôi thu thập",
+ "li2": "Xóa lưu trữ cục bộ và cookie của bạn bất kỳ lúc nào",
+ "li3": "Ngắt kết nối phiên đăng nhập của bạn",
+ "li4": "Yêu cầu thông tin về các phương thức xử lý dữ liệu của chúng tôi",
+ "p2": "Vì chúng tôi không thu thập dữ liệu cá nhân, nên thường không có thông tin cá nhân nào để xóa hoặc xuất."
+ },
+ "contact": {
+ "title": "Liên hệ với chúng tôi",
+ "p1": "Đối với bất kỳ câu hỏi hoặc thắc mắc nào về chính sách bảo mật này, bạn có thể liên hệ với chúng tôi bằng cách mở một issue trên {link} của chúng tôi.",
+ "link": "kho mã nguồn GitHub"
+ },
+ "changes": {
+ "title": "Thay đổi đối với chính sách này",
+ "p1": "Chúng tôi có thể cập nhật chính sách bảo mật này theo thời gian. Bất kỳ thay đổi nào sẽ được công bố trên trang này với ngày cập nhật mới nhất."
+ }
+ },
+ "a11y": {
+ "title": "trợ năng",
+ "footer_title": "trợ năng",
+ "welcome": "Chúng tôi muốn {app} dễ sử dụng cho nhiều người nhất có thể.",
+ "approach": {
+ "title": "Cách tiếp cận",
+ "p1": "Chúng tôi cố gắng tuân theo Hướng dẫn về Trợ năng Nội dung Web (WCAG) 2.2 và sử dụng chúng làm tài liệu tham khảo khi xây dựng các tính năng. Chúng tôi không tuyên bố tuân thủ đầy đủ bất kỳ mức độ nào của WCAG — trợ năng là một quá trình liên tục và luôn có nhiều việc phải làm.",
+ "p2": "Trang web này là một {about}. Các cải tiến về trợ năng được thực hiện dần dần như một phần của quá trình phát triển thường xuyên của chúng tôi.",
+ "about_link": "dự án mã nguồn mở do cộng đồng xây dựng"
+ },
+ "measures": {
+ "title": "Cách thực hiện",
+ "p1": "Một số điều chúng tôi hướng tới thực hiện trên toàn bộ trang web:",
+ "li1": "Sử dụng HTML ngữ nghĩa (semantic) và các thuộc tính ARIA khi thích hợp.",
+ "li2": "Sử dụng kích thước văn bản tương đối để bạn có thể điều chỉnh chúng trong trình duyệt.",
+ "li3": "Hỗ trợ điều hướng bằng bàn phím trong toàn bộ giao diện.",
+ "li4": "Tôn trọng các truy vấn media prefers-reduced-motion và prefers-color-scheme.",
+ "li5": "Thiết kế với sự chú ý đến độ tương phản màu sắc đạt mức.",
+ "li6": "Đảm bảo nội dung thiết yếu luôn khả dụng mà không cần JavaScript, mặc dù một số tính năng tương tác yêu cầu nó."
+ },
+ "limitations": {
+ "title": "Hạn chế",
+ "p1": "Một số phần của trang web — đặc biệt là nội dung từ bên thứ ba như tệp README của package — có thể không đáp ứng các tiêu chuẩn trợ năng. Chúng tôi đang nỗ lực cải thiện những khu vực này theo thời gian."
+ },
+ "contact": {
+ "title": "Phản hồi",
+ "p1": "Nếu bạn gặp phải rào cản về trợ năng trên {app}, vui lòng cho chúng tôi biết bằng cách mở một issue trên {link} của chúng tôi. Chúng tôi xem xét các báo cáo này một cách nghiêm túc và sẽ cố gắng hết sức để giải quyết chúng.",
+ "link": "kho mã nguồn GitHub"
+ }
+ },
+ "translation_status": {
+ "title": "trạng thái bản dịch",
+ "generated_at": "Ngày tạo: {date}",
+ "welcome": "Bạn đã đến đúng nơi nếu quan tâm đến việc dịch {npmx} sang một trong các ngôn ngữ hiển thị dưới đây! Trang này được tự động cập nhật và liệt kê các nội dung cần được dịch.",
+ "p1": "Chúng ta dùng {lang} làm ngôn ngữ mặc định, với tổng cộng {count}. Nếu bạn muốn hỗ trợ, hãy xem chi tiết tại {bylang}.",
+ "p1_lang": "Tiếng Anh Mỹ (en-US)",
+ "p1_count": "0 chuỗi văn bản | 1 chuỗi văn bản | {count} chuỗi văn bản",
+ "p2": "Trước khi bắt đầu, bạn hãy đọc qua {guide} để hiểu thêm về quy trình dịch và cách đóng góp.",
+ "guide": "Hướng dẫn dịch (i18n)",
+ "by_locale": "Tiến độ dịch theo ngôn ngữ",
+ "by_file": "Tiến độ dịch theo tệp",
+ "complete_text": "Bản dịch đã hoàn chỉnh, tuyệt vời!",
+ "missing_text": "thiếu",
+ "missing_keys": "Không thiếu bản dịch | Thiếu bản dịch | Thiếu bản dịch",
+ "progress_label": "Tiến độ cho {locale}",
+ "table": {
+ "file": "Tệp",
+ "status": "Trạng thái",
+ "error": "Lỗi trong quá trình tải tệp",
+ "empty": "Không tìm thấy tệp nào",
+ "file_link": "Chỉnh sửa {file} ({lang}) tại GitHub"
+ }
+ },
+ "vacations": {
+ "title": "đang nghỉ lễ",
+ "meta_description": "Đội ngũ npmx đang nạp lại năng lượng. Discord sẽ mở lại sau một tuần.",
+ "heading": "đang nạp năng lượng",
+ "subtitle": "chúng tôi đã xây dựng npmx với cường độ khiến {some} thành viên mất ngủ. chúng tôi không muốn điều đó trở thành thường lệ! vì vậy chúng tôi đã cùng nhau nghỉ một tuần.",
+ "illustration_alt": "một dãy các biểu tượng ấm cúng",
+ "poke_log": "Khơi đống lửa trại",
+ "what": {
+ "title": "điều gì đã xảy ra",
+ "p1": "discord đã đóng cửa từ {dates}.",
+ "dates": "14 – 21 tháng 2",
+ "p2": "tất cả các liên kết mời đã bị gỡ và các kênh bị khóa – ngoại trừ {garden} vẫn mở cho những ai muốn tiếp tục trò chuyện.",
+ "garden": "#garden"
+ },
+ "meantime": {
+ "title": "trong thời gian đó",
+ "p1": "{site} và {repo} vẫn mở – mọi người vẫn miệt mài, báo cáo vấn đề, mở một vài PR, nhưng chủ yếu mọi người dành thời gian ở một nơi nào đó gần đống lửa ấm cúng.",
+ "repo_link": "kho mã nguồn"
+ },
+ "return": {
+ "title": "chúng tôi đã trở lại!",
+ "p1": "chúng tôi đã trở lại với năng lượng tràn đầy và sẵn sàng cho nỗ lực cuối cùng đến ngày 3 tháng 3. {social} để cập nhật thông tin.",
+ "social_link": "theo dõi chúng tôi trên Bluesky"
+ },
+ "stats": {
+ "contributors": "Người đóng góp",
+ "commits": "Commit",
+ "pr": "PR đã Merge",
+ "subtitle": {
+ "some": "một vài",
+ "all": "tất cả"
+ }
+ }
+ },
+ "action_bar": {
+ "title": "thanh thao tác",
+ "selection": "Đã chọn 0 | Đã chọn 1 | Đã chọn {count}",
+ "shortcut": "Nhấn \"{key}\" để tập trung vào các thao tác",
+ "button_close_aria_label": "Đóng thanh thao tác"
+ },
+ "logo_menu": {
+ "copy_svg": "Sao chép SVG",
+ "copied": "Đã sao chép!",
+ "browse_brand": "Xem bộ công cụ thương hiệu (brand kit)"
+ },
+ "brand": {
+ "title": "Thương hiệu",
+ "heading": "thương hiệu",
+ "meta_description": "Hướng dẫn về thương hiệu npmx, logo, màu sắc và kiểu chữ để sử dụng trong báo chí và truyền thông.",
+ "intro": "Các tài nguyên và nguyên tắc sử dụng thương hiệu npmx trong các dự án, bài viết và truyền thông của bạn.",
+ "logos": {
+ "title": "logo",
+ "description": "Tải xuống các logo npmx ở định dạng SVG và PNG. Sử dụng các biến thể phù hợp cho nền của bạn.",
+ "wordmark": "WORDMARK ĐẦY ĐỦ",
+ "wordmark_alt": "Logo wordmark npmx đầy đủ với dấu gạch chéo màu xanh trên nền tối",
+ "wordmark_light_alt": "Logo wordmark npmx đầy đủ với dấu gạch chéo nhấn mạnh trên nền sáng",
+ "mark": "LOGO MARK",
+ "mark_alt": "Logo mark npmx với dấu chấm và dấu gạch chéo trên nền tối",
+ "mark_light_alt": "Logo mark npmx với dấu chấm và dấu gạch chéo trên nền sáng",
+ "on_dark": "trên nền tối",
+ "on_light": "trên nền sáng",
+ "download_svg": "SVG",
+ "download_png": "PNG",
+ "download_svg_aria": "Tải xuống {name} dưới dạng SVG",
+ "download_png_aria": "Tải xuống {name} dưới dạng PNG"
+ },
+ "customize": {
+ "title": "tùy chỉnh logo của bạn",
+ "description": "Xem trước logo npmx với màu nhấn và nền của bạn. Bản xem trước phản ánh các cài đặt hiện tại của bạn — chọn một màu, chuyển đổi nền và tải xuống.",
+ "accent_label": "màu nhấn",
+ "bg_label": "nền",
+ "download_svg_aria": "Tải xuống logo tùy chỉnh dưới dạng SVG",
+ "download_png_aria": "Tải xuống logo tùy chỉnh dưới dạng PNG"
+ },
+ "typography": {
+ "title": "kiểu chữ",
+ "description": "npmx sử dụng bộ phông chữ Geist của Vercel cho cả văn bản giao diện và mã nguồn.",
+ "sans": "Geist Sans",
+ "sans_desc": "Được sử dụng cho nội dung văn bản và các thành phần giao diện.",
+ "mono": "Geist Mono",
+ "mono_desc": "Được sử dụng cho mã nguồn, tiêu đề và nội dung kỹ thuật.",
+ "pangram": "Thế giới này quả là rộng lớn và có rất nhiều điều để chúng ta khám phá",
+ "numbers": "0123456789"
+ },
+ "guidelines": {
+ "title": "một lưu ý nhỏ",
+ "message": "Trợ năng là vấn đề rất quan trọng đối với chúng tôi và chúng tôi rất mong bạn cùng chia sẻ tầm nhìn này. Khi sử dụng các phương tiện truyền thông đã đề cập, hãy đảm bảo có đủ độ tương phản với nền và không để kích thước nhỏ hơn 24px. Nếu bạn cần bất kỳ tài nguyên nào khác hoặc thông tin bổ sung về dự án, vui lòng liên hệ với chúng tôi tại {link}.",
+ "discord_link_text": "chat.npmx.dev"
+ }
+ }
+}
diff --git a/i18n/locales/zh-CN.json b/i18n/locales/zh-CN.json
index e75d889793..865e40a93f 100644
--- a/i18n/locales/zh-CN.json
+++ b/i18n/locales/zh-CN.json
@@ -602,7 +602,8 @@
"b": "{size} B",
"kb": "{size} kB",
"mb": "{size} MB"
- }
+ },
+ "download": {}
},
"connector": {
"modal": {
@@ -882,11 +883,7 @@
"downloads_month": "每月下载量",
"downloads_year": "每年下载量",
"published": "最近发布",
- "name": "名称",
- "quality": "质量评分",
- "popularity": "受欢迎度",
- "maintenance": "维护程度",
- "score": "总分"
+ "name": "名称"
},
"columns": {
"title": "列",
@@ -900,10 +897,6 @@
"published": "最近发布",
"maintainers": "维护者",
"keywords": "关键词",
- "quality_score": "质量评分",
- "popularity_score": "受欢迎度",
- "maintenance_score": "维护程度",
- "combined_score": "总分",
"security": "安全性",
"selection": "选择软件包"
},
@@ -1093,14 +1086,11 @@
"add_column": "添加与“不使用依赖”的比较"
},
"facets": {
- "group_label": "比较维度",
"all": "全选",
"none": "取消全选",
"coming_soon": "即将推出",
"select_all": "选择所有维度",
"deselect_all": "取消选择所有维度",
- "select_category": "选择所有{category}维度",
- "deselect_category": "取消选择所有{category}维度",
"binary_only_tooltip": "此包仅暴露二进制文件且无导出",
"categories": {
"performance": "性能",
@@ -1184,6 +1174,7 @@
"file_size_warning": "{size} 超出了 250KB 的对比限制",
"compare_versions": "差异",
"compare_versions_title": "与最新版本对比",
+ "version_invalid_url_format": {},
"version_selector_title": "版本对比",
"summary": "摘要",
"deps_count": "{count} 个依赖",
@@ -1350,6 +1341,9 @@
"link": "GitHub 仓库"
}
},
+ "translation_status": {
+ "table": {}
+ },
"action_bar": {
"title": "操作栏",
"selection": "0 个项目被选中 | 1 个项目被选中 | {count} 个项目被选中",
diff --git a/i18n/locales/zh-TW.json b/i18n/locales/zh-TW.json
index 363820fd49..d7e467d582 100644
--- a/i18n/locales/zh-TW.json
+++ b/i18n/locales/zh-TW.json
@@ -602,7 +602,8 @@
"b": "{size} B",
"kb": "{size} kB",
"mb": "{size} MB"
- }
+ },
+ "download": {}
},
"connector": {
"modal": {
@@ -882,11 +883,7 @@
"downloads_month": "每月下載量",
"downloads_year": "每年下載量",
"published": "最近發布",
- "name": "名稱",
- "quality": "品質",
- "popularity": "受歡迎度",
- "maintenance": "維護程度",
- "score": "分數"
+ "name": "名稱"
},
"columns": {
"title": "欄位",
@@ -900,10 +897,6 @@
"published": "最近發布",
"maintainers": "維護者",
"keywords": "關鍵字",
- "quality_score": "品質分數",
- "popularity_score": "受歡迎度分數",
- "maintenance_score": "維護程度分數",
- "combined_score": "總分",
"security": "安全性",
"selection": "選擇套件"
},
@@ -1092,14 +1085,11 @@
"add_column": "在比較中加入「無相依套件」欄位"
},
"facets": {
- "group_label": "比較維度",
"all": "全選",
"none": "取消全選",
"coming_soon": "即將推出",
"select_all": "選擇所有維度",
"deselect_all": "取消選擇所有維度",
- "select_category": "選擇所有{category}維度",
- "deselect_category": "取消選擇所有{category}維度",
"binary_only_tooltip": "此套件僅提供二進位檔且沒有匯出",
"categories": {
"performance": "效能",
@@ -1183,6 +1173,7 @@
"file_size_warning": "檔案大小 {size} 超過 250KB,無法比較",
"compare_versions": "差異",
"compare_versions_title": "比較最新版本",
+ "version_invalid_url_format": {},
"version_selector_title": "比較版本",
"summary": "摘要",
"deps_count": "{count} 個相依套件",
@@ -1349,6 +1340,9 @@
"link": "GitHub 儲存庫"
}
},
+ "translation_status": {
+ "table": {}
+ },
"action_bar": {
"title": "操作列",
"selection": "已選擇 0 個套件 | 已選擇 1 個套件 | {count} 個套件",
diff --git a/i18n/schema.json b/i18n/schema.json
index e1ae6a54eb..9c831eccde 100644
--- a/i18n/schema.json
+++ b/i18n/schema.json
@@ -63,6 +63,9 @@
},
"keyboard_shortcuts": {
"type": "string"
+ },
+ "brand": {
+ "type": "string"
}
},
"additionalProperties": false
@@ -1468,6 +1471,15 @@
},
"additionalProperties": false
},
+ "chart_view_toggle": {
+ "type": "string"
+ },
+ "chart_view_combined": {
+ "type": "string"
+ },
+ "chart_view_split": {
+ "type": "string"
+ },
"granularity": {
"type": "string"
},
@@ -2772,18 +2784,6 @@
},
"name": {
"type": "string"
- },
- "quality": {
- "type": "string"
- },
- "popularity": {
- "type": "string"
- },
- "maintenance": {
- "type": "string"
- },
- "score": {
- "type": "string"
}
},
"additionalProperties": false
@@ -2824,18 +2824,6 @@
"keywords": {
"type": "string"
},
- "quality_score": {
- "type": "string"
- },
- "popularity_score": {
- "type": "string"
- },
- "maintenance_score": {
- "type": "string"
- },
- "combined_score": {
- "type": "string"
- },
"security": {
"type": "string"
},
@@ -3343,6 +3331,9 @@
"charts_view": {
"type": "string"
},
+ "no_chartable_data": {
+ "type": "string"
+ },
"bar_chart_nav_hint": {
"type": "string"
},
@@ -3409,28 +3400,31 @@
"facets": {
"type": "object",
"properties": {
- "group_label": {
- "type": "string"
- },
"all": {
"type": "string"
},
"none": {
"type": "string"
},
- "coming_soon": {
+ "select_all_category_facets": {
"type": "string"
},
- "select_all": {
+ "deselect_all_category_facets": {
"type": "string"
},
- "deselect_all": {
+ "selected_all_category_facets": {
"type": "string"
},
- "select_category": {
+ "deselected_all_category_facets": {
"type": "string"
},
- "deselect_category": {
+ "coming_soon": {
+ "type": "string"
+ },
+ "select_all": {
+ "type": "string"
+ },
+ "deselect_all": {
"type": "string"
},
"binary_only_tooltip": {
@@ -4426,6 +4420,156 @@
},
"additionalProperties": false
},
+ "logo_menu": {
+ "type": "object",
+ "properties": {
+ "copy_svg": {
+ "type": "string"
+ },
+ "copied": {
+ "type": "string"
+ },
+ "browse_brand": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "brand": {
+ "type": "object",
+ "properties": {
+ "title": {
+ "type": "string"
+ },
+ "heading": {
+ "type": "string"
+ },
+ "meta_description": {
+ "type": "string"
+ },
+ "intro": {
+ "type": "string"
+ },
+ "logos": {
+ "type": "object",
+ "properties": {
+ "title": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "wordmark": {
+ "type": "string"
+ },
+ "wordmark_alt": {
+ "type": "string"
+ },
+ "wordmark_light_alt": {
+ "type": "string"
+ },
+ "mark": {
+ "type": "string"
+ },
+ "mark_alt": {
+ "type": "string"
+ },
+ "mark_light_alt": {
+ "type": "string"
+ },
+ "on_dark": {
+ "type": "string"
+ },
+ "on_light": {
+ "type": "string"
+ },
+ "download_svg": {
+ "type": "string"
+ },
+ "download_png": {
+ "type": "string"
+ },
+ "download_svg_aria": {
+ "type": "string"
+ },
+ "download_png_aria": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "customize": {
+ "type": "object",
+ "properties": {
+ "title": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "accent_label": {
+ "type": "string"
+ },
+ "bg_label": {
+ "type": "string"
+ },
+ "download_svg_aria": {
+ "type": "string"
+ },
+ "download_png_aria": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "typography": {
+ "type": "object",
+ "properties": {
+ "title": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "sans": {
+ "type": "string"
+ },
+ "sans_desc": {
+ "type": "string"
+ },
+ "mono": {
+ "type": "string"
+ },
+ "mono_desc": {
+ "type": "string"
+ },
+ "pangram": {
+ "type": "string"
+ },
+ "numbers": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "guidelines": {
+ "type": "object",
+ "properties": {
+ "title": {
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ },
+ "discord_link_text": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "additionalProperties": false
+ },
"$schema": {
"type": "string"
}
diff --git a/lunaria/styles.ts b/lunaria/styles.ts
index dc46647ea9..3c2bb86be9 100644
--- a/lunaria/styles.ts
+++ b/lunaria/styles.ts
@@ -41,24 +41,6 @@ export const BaseStyles = html`
--progress-bar-height: 16px;
}
- @media (prefers-color-scheme: dark) {
- :root {
- /* Dark theme colors */
- --ln-color-white: #030712;
- --ln-color-gray-1: #374151;
- --ln-color-gray-2: #4b5563;
- --ln-color-gray-3: #6b7280;
- --ln-color-gray-4: #9ca3af;
- --ln-color-gray-5: #d1d5db;
- --ln-color-gray-6: #e5e7eb;
- --ln-color-gray-7: #f3f4f6;
- --ln-color-black: #f9fafb;
- --ln-color-blue: #60a5fa;
- --ln-color-orange: #fb923c;
- --ln-color-purple: #c084fc;
- }
- }
-
* {
box-sizing: border-box;
margin: 0;
diff --git a/modules/blog.ts b/modules/blog.ts
index ee2fd3cd91..3ece7abae8 100644
--- a/modules/blog.ts
+++ b/modules/blog.ts
@@ -138,7 +138,7 @@ async function loadBlogPosts(blogDir: string, imagesDir: string): Promise new Date(b.date).getTime() - new Date(a.date).getTime())
+ posts.sort((a, b) => Date.parse(b.date) - Date.parse(a.date))
return posts
}
diff --git a/modules/runtime/server/cache.ts b/modules/runtime/server/cache.ts
index 9e35b46b1a..780f589e23 100644
--- a/modules/runtime/server/cache.ts
+++ b/modules/runtime/server/cache.ts
@@ -28,6 +28,7 @@ const FIXTURE_PATHS = {
esmTypes: 'esm-sh:types',
githubContributors: 'github:contributors.json',
githubContributorsStats: 'github:contributors-stats.json',
+ jsdelivr: 'jsdelivr',
} as const
type FixtureType = keyof typeof FIXTURE_PATHS
@@ -101,12 +102,8 @@ function parseScopedPackageWithVersion(input: string): { name: string; version?:
}
function getMockForUrl(url: string): MockResult | null {
- let urlObj: URL
- try {
- urlObj = new URL(url)
- } catch {
- return null
- }
+ const urlObj = URL.parse(url)
+ if (!urlObj) return null
const { host, pathname, searchParams } = urlObj
@@ -140,56 +137,6 @@ function getMockForUrl(url: string): MockResult | null {
}
}
- // npms.io API - return mock package score data
- if (host === 'api.npms.io') {
- const packageMatch = decodeURIComponent(pathname).match(/^\/v2\/package\/(.+)$/)
- if (packageMatch?.[1]) {
- return {
- data: {
- analyzedAt: new Date().toISOString(),
- collected: {
- metadata: { name: packageMatch[1] },
- },
- score: {
- final: 0.75,
- detail: {
- quality: 0.8,
- popularity: 0.7,
- maintenance: 0.75,
- },
- },
- },
- }
- }
- }
-
- // jsdelivr CDN - return 404 for README files, etc.
- if (host === 'cdn.jsdelivr.net') {
- // Return null data which will cause a 404 - README files are optional
- return { data: null }
- }
-
- // jsdelivr data API - return mock file listing
- if (host === 'data.jsdelivr.com') {
- const packageMatch = decodeURIComponent(pathname).match(/^\/v1\/packages\/npm\/(.+)$/)
- if (packageMatch?.[1]) {
- const pkgWithVersion = packageMatch[1]
- const parsed = parseScopedPackageWithVersion(pkgWithVersion)
- return {
- data: {
- type: 'npm',
- name: parsed.name,
- version: parsed.version || 'latest',
- files: [
- { name: 'package.json', hash: 'abc123', size: 1000 },
- { name: 'index.js', hash: 'def456', size: 500 },
- { name: 'README.md', hash: 'ghi789', size: 2000 },
- ],
- },
- }
- }
- }
-
// Gravatar API - return 404 (avatars not needed in tests)
if (host === 'www.gravatar.com') {
return { data: null }
@@ -385,12 +332,8 @@ async function handleFastNpmMeta(
url: string,
storage: ReturnType,
): Promise {
- let urlObj: URL
- try {
- urlObj = new URL(url)
- } catch {
- return null
- }
+ const urlObj = URL.parse(url)
+ if (!urlObj) return null
const { host, pathname, searchParams } = urlObj
@@ -430,12 +373,8 @@ async function handleGitHubApi(
url: string,
storage: ReturnType,
): Promise {
- let urlObj: URL
- try {
- urlObj = new URL(url)
- } catch {
- return null
- }
+ const urlObj = URL.parse(url)
+ if (!urlObj) return null
const { host, pathname } = urlObj
@@ -486,12 +425,8 @@ interface FixtureMatchWithVersion extends FixtureMatch {
}
function matchUrlToFixture(url: string): FixtureMatchWithVersion | null {
- let urlObj: URL
- try {
- urlObj = new URL(url)
- } catch {
- return null
- }
+ const urlObj = URL.parse(url)
+ if (!urlObj) return null
const { host, pathname, searchParams } = urlObj
@@ -571,6 +506,42 @@ function logUnmockedRequest(type: string, detail: string, url: string): void {
)
}
+async function handleJsdelivrDataApi(
+ url: string,
+ storage: ReturnType,
+): Promise {
+ const urlObj = URL.parse(url)
+ if (!urlObj) return null
+
+ if (urlObj.host !== 'data.jsdelivr.com') return null
+
+ const packageMatch = decodeURIComponent(urlObj.pathname).match(/^\/v1\/packages\/npm\/(.+)$/)
+ if (!packageMatch?.[1]) return null
+
+ const parsed = parseScopedPackageWithVersion(packageMatch[1])
+
+ // Try per-package fixture first
+ const fixturePath = getFixturePath('jsdelivr', parsed.name)
+ const fixture = await storage.getItem(fixturePath)
+ if (fixture) {
+ return { data: fixture }
+ }
+
+ // Fall back to generic stub (no declaration files)
+ return {
+ data: {
+ type: 'npm',
+ name: parsed.name,
+ version: parsed.version || 'latest',
+ files: [
+ { name: 'package.json', hash: 'abc123', size: 1000 },
+ { name: 'index.js', hash: 'def456', size: 500 },
+ { name: 'README.md', hash: 'ghi789', size: 2000 },
+ ],
+ },
+ }
+}
+
/**
* Shared fixture-backed fetch implementation.
* This is used by both cachedFetch and the global $fetch override.
@@ -593,6 +564,12 @@ async function fetchFromFixtures(
return { data: fastNpmMetaResult.data as T, isStale: false, cachedAt: Date.now() }
}
+ const jsdelivrResult = await handleJsdelivrDataApi(url, storage)
+ if (jsdelivrResult) {
+ if (VERBOSE) process.stdout.write(`[test-fixtures] jsDelivr Data API: ${url}\n`)
+ return { data: jsdelivrResult.data as T, isStale: false, cachedAt: Date.now() }
+ }
+
// Check for GitHub API
const githubResult = await handleGitHubApi(url, storage)
if (githubResult) {
diff --git a/nuxt.config.ts b/nuxt.config.ts
index 88d3822376..4ca8c85444 100644
--- a/nuxt.config.ts
+++ b/nuxt.config.ts
@@ -99,7 +99,7 @@ export default defineNuxtConfig({
routeRules: {
// API routes
- '/api/**': { isr: 60 },
+ '/api/**': { isr: 300 },
'/api/registry/badge/**': {
isr: {
expiration: 60 * 60 /* one hour */,
@@ -128,7 +128,7 @@ export default defineNuxtConfig({
'/api/registry/package-meta/**': { isr: 300 },
'/:pkg/.well-known/skills/**': { isr: 3600 },
'/:scope/:pkg/.well-known/skills/**': { isr: 3600 },
- '/__og-image__/**': getISRConfig(60),
+ '/__og-image__/**': getISRConfig(3600),
'/_avatar/**': { isr: 3600, proxy: 'https://www.gravatar.com/avatar/**' },
'/opensearch.xml': { isr: true },
'/oauth-client-metadata.json': { prerender: true },
@@ -161,19 +161,24 @@ export default defineNuxtConfig({
},
},
// pages
- '/package/**': getISRConfig(60, { fallback: 'html' }),
- '/package/:name/_payload.json': getISRConfig(60, { fallback: 'json' }),
- '/package/:name/v/:version/_payload.json': getISRConfig(60, { fallback: 'json' }),
- '/package/:org/:name/_payload.json': getISRConfig(60, { fallback: 'json' }),
- '/package/:org/:name/v/:version/_payload.json': getISRConfig(60, { fallback: 'json' }),
+ '/package/**': getISRConfig(300, { fallback: 'html' }),
+ '/package/:name/_payload.json': getISRConfig(300, { fallback: 'json' }),
+ '/package/:name/v/:version/_payload.json': getISRConfig(300, { fallback: 'json' }),
+ '/package/:org/:name/_payload.json': getISRConfig(300, { fallback: 'json' }),
+ '/package/:org/:name/v/:version/_payload.json': getISRConfig(300, { fallback: 'json' }),
// infinite cache (versioned - doesn't change)
- '/package-code/**': { isr: true, cache: { maxAge: 365 * 24 * 60 * 60 } },
- '/package-docs/**': { isr: true, cache: { maxAge: 365 * 24 * 60 * 60 } },
+ '/package-code/**': {
+ headers: { 'Cache-Control': 'public, s-maxage=31536000, stale-while-revalidate=31536000' },
+ },
+ '/package-docs/**': {
+ headers: { 'Cache-Control': 'public, s-maxage=31536000, stale-while-revalidate=31536000' },
+ },
// static pages
'/': { prerender: true },
'/200.html': { prerender: true },
'/about': { prerender: true },
'/accessibility': { prerender: true },
+ '/brand': { prerender: true },
'/privacy': { prerender: true },
'/search': { isr: false, cache: false }, // never cache
'/settings': { prerender: true },
diff --git a/package.json b/package.json
index fdf45fe86a..6ca8f7dabb 100644
--- a/package.json
+++ b/package.json
@@ -109,7 +109,7 @@
"vite-plugin-pwa": "1.2.0",
"vite-plus": "0.1.12",
"vue": "3.5.30",
- "vue-data-ui": "3.16.0"
+ "vue-data-ui": "3.16.5"
},
"devDependencies": {
"@e18e/eslint-plugin": "0.3.0",
@@ -124,22 +124,22 @@
"@types/sanitize-html": "2.16.1",
"@types/semver": "7.7.1",
"@types/validate-npm-package-name": "4.0.2",
- "@vitest/coverage-v8": "4.1.0",
+ "@vitest/coverage-v8": "4.1.1",
"@vue/test-utils": "2.4.6",
"axe-core": "4.11.1",
"changelogen": "0.6.2",
- "chromatic": "15.3.0",
+ "chromatic": "16.0.0",
"devalue": "5.6.4",
"eslint-plugin-regexp": "3.1.0",
"fast-check": "4.6.0",
"h3": "1.15.8",
"h3-next": "npm:h3@2.0.1-rc.16",
- "knip": "5.88.0",
+ "knip": "6.0.5",
"markdown-it-anchor": "9.2.0",
- "schema-dts": "1.1.5",
+ "schema-dts": "2.0.0",
"storybook": "catalog:storybook",
"storybook-i18n": "catalog:storybook",
- "typescript": "5.9.3",
+ "typescript": "6.0.2",
"unplugin-vue-markdown": "30.0.0",
"vitest": "npm:@voidzero-dev/vite-plus-test@0.1.12",
"vue-i18n-extract": "2.0.7",
diff --git a/playwright.config.ts b/playwright.config.ts
index 45c8d3ebf6..01e43f7a5d 100644
--- a/playwright.config.ts
+++ b/playwright.config.ts
@@ -15,7 +15,7 @@ export default defineConfig({
webServer: {
command: 'pnpm start:playwright:webserver',
url: baseURL,
- reuseExistingServer: false,
+ reuseExistingServer: !process.env.CI,
timeout: 60_000,
},
// Start/stop mock connector server before/after all tests (teardown via returned closure)
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 7c6998d51e..9e91751be7 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -62,7 +62,7 @@ importers:
version: '@jsr/deno__doc@0.189.1(patch_hash=24f326e123c822a07976329a5afe91a8713e82d53134b5586625b72431c87832)'
'@floating-ui/vue':
specifier: 1.1.11
- version: 1.1.11(vue@3.5.30(typescript@5.9.3))
+ version: 1.1.11(vue@3.5.30(typescript@6.0.2))
'@iconify-json/lucide':
specifier: 1.2.98
version: 1.2.98
@@ -92,19 +92,19 @@ importers:
version: 0.14.0(@upstash/redis@1.37.0)(db0@0.3.4(better-sqlite3@12.8.0))(ioredis@5.9.2)(magicast@0.5.2)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
'@nuxt/scripts':
specifier: 0.13.2
- version: 0.13.2(@unhead/vue@2.1.10(vue@3.5.30(typescript@5.9.3)))(@upstash/redis@1.37.0)(db0@0.3.4(better-sqlite3@12.8.0))(ioredis@5.9.2)(magicast@0.5.2)(typescript@5.9.3)(vue@3.5.30(typescript@5.9.3))
+ version: 0.13.2(@unhead/vue@2.1.10(vue@3.5.30(typescript@6.0.2)))(@upstash/redis@1.37.0)(db0@0.3.4(better-sqlite3@12.8.0))(ioredis@5.9.2)(magicast@0.5.2)(typescript@6.0.2)(vue@3.5.30(typescript@6.0.2))
'@nuxt/test-utils':
specifier: 4.0.0
- version: 4.0.0(@playwright/test@1.58.2)(@voidzero-dev/vite-plus-test@0.1.12(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(esbuild@0.27.3)(happy-dom@20.3.5)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@1.8.0))(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2))(@vue/test-utils@2.4.6)(happy-dom@20.3.5)(jsdom@27.4.0(@noble/hashes@1.8.0))(magicast@0.5.2)(playwright-core@1.58.2)(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
+ version: 4.0.0(@playwright/test@1.58.2)(@voidzero-dev/vite-plus-test@0.1.12(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(esbuild@0.27.3)(happy-dom@20.3.5)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@1.8.0))(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2))(@vue/test-utils@2.4.6)(happy-dom@20.3.5)(jsdom@27.4.0(@noble/hashes@1.8.0))(magicast@0.5.2)(playwright-core@1.58.2)(typescript@6.0.2)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
'@nuxtjs/color-mode':
specifier: 4.0.0
version: 4.0.0(magicast@0.5.2)
'@nuxtjs/html-validator':
specifier: 2.1.0
- version: 2.1.0(@voidzero-dev/vite-plus-test@0.1.12(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(esbuild@0.27.3)(happy-dom@20.3.5)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@1.8.0))(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2))(magicast@0.5.2)
+ version: 2.1.0(@voidzero-dev/vite-plus-test@0.1.12(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(esbuild@0.27.3)(happy-dom@20.3.5)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@1.8.0))(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2))(magicast@0.5.2)
'@nuxtjs/i18n':
specifier: 10.2.3
- version: 10.2.3(@upstash/redis@1.37.0)(@vue/compiler-dom@3.5.30)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(rollup@4.56.0)(vue@3.5.30(typescript@5.9.3))
+ version: 10.2.3(@upstash/redis@1.37.0)(@vue/compiler-dom@3.5.30)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(rollup@4.56.0)(vue@3.5.30(typescript@6.0.2))
'@shikijs/langs':
specifier: 4.0.2
version: 4.0.2
@@ -131,19 +131,19 @@ importers:
version: 1.1.1(@vite-pwa/assets-generator@1.0.2)(magicast@0.5.2)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(workbox-build@7.4.0)(workbox-window@7.4.0)
'@vueuse/core':
specifier: 14.2.1
- version: 14.2.1(vue@3.5.30(typescript@5.9.3))
+ version: 14.2.1(vue@3.5.30(typescript@6.0.2))
'@vueuse/integrations':
specifier: 14.2.1
- version: 14.2.1(focus-trap@8.0.0)(fuse.js@7.1.0)(vue@3.5.30(typescript@5.9.3))
+ version: 14.2.1(focus-trap@8.0.0)(fuse.js@7.1.0)(vue@3.5.30(typescript@6.0.2))
'@vueuse/nuxt':
specifier: 14.2.1
- version: 14.2.1(magicast@0.5.2)(nuxt@4.3.1(@parcel/watcher@2.5.4)(@types/node@24.12.0)(@upstash/redis@1.37.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3))
+ version: 14.2.1(magicast@0.5.2)(nuxt@4.3.1(@parcel/watcher@2.5.4)(@types/node@24.12.0)(@upstash/redis@1.37.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.2))(vue@3.5.30(typescript@6.0.2))
'@vueuse/router':
specifier: ^14.2.1
- version: 14.2.1(vue-router@4.6.4(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3))
+ version: 14.2.1(vue-router@4.6.4(vue@3.5.30(typescript@6.0.2)))(vue@3.5.30(typescript@6.0.2))
'@vueuse/shared':
specifier: 14.2.1
- version: 14.2.1(vue@3.5.30(typescript@5.9.3))
+ version: 14.2.1(vue@3.5.30(typescript@6.0.2))
algoliasearch:
specifier: 5.49.2
version: 5.49.2
@@ -173,10 +173,10 @@ importers:
version: 2.11.0
nuxt:
specifier: 4.3.1
- version: 4.3.1(@parcel/watcher@2.5.4)(@types/node@24.12.0)(@upstash/redis@1.37.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(yaml@2.8.2)
+ version: 4.3.1(@parcel/watcher@2.5.4)(@types/node@24.12.0)(@upstash/redis@1.37.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.2)
nuxt-og-image:
specifier: 5.1.13
- version: 5.1.13(@unhead/vue@2.1.10(vue@3.5.30(typescript@5.9.3)))(magicast@0.5.2)(unstorage@1.17.4(@upstash/redis@1.37.0)(db0@0.3.4(better-sqlite3@12.8.0))(ioredis@5.9.2))(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3))
+ version: 5.1.13(@unhead/vue@2.1.10(vue@3.5.30(typescript@6.0.2)))(magicast@0.5.2)(unstorage@1.17.4(@upstash/redis@1.37.0)(db0@0.3.4(better-sqlite3@12.8.0))(ioredis@5.9.2))(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@6.0.2))
ofetch:
specifier: 1.5.1
version: 1.5.1
@@ -215,28 +215,28 @@ importers:
version: 66.6.7(@unocss/webpack@66.6.7(webpack@5.104.1(esbuild@0.27.3)))(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
unplugin-vue-router:
specifier: 0.19.2
- version: 0.19.2(@vue/compiler-sfc@3.5.30)(vue-router@4.6.4(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3))
+ version: 0.19.2(@vue/compiler-sfc@3.5.30)(vue-router@4.6.4(vue@3.5.30(typescript@6.0.2)))(vue@3.5.30(typescript@6.0.2))
valibot:
specifier: 1.3.0
- version: 1.3.0(typescript@5.9.3)
+ version: 1.3.0(typescript@6.0.2)
validate-npm-package-name:
specifier: 7.0.2
version: 7.0.2
virtua:
specifier: 0.48.8
- version: 0.48.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vue@3.5.30(typescript@5.9.3))
+ version: 0.48.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vue@3.5.30(typescript@6.0.2))
vite-plugin-pwa:
specifier: 1.2.0
version: 1.2.0(@vite-pwa/assets-generator@1.0.2)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(workbox-build@7.4.0)(workbox-window@7.4.0)
vite-plus:
specifier: 0.1.12
- version: 0.1.12(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(esbuild@0.27.3)(happy-dom@20.3.5)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@1.8.0))(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2)
+ version: 0.1.12(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(esbuild@0.27.3)(happy-dom@20.3.5)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@1.8.0))(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2)
vue:
specifier: 3.5.30
- version: 3.5.30(typescript@5.9.3)
+ version: 3.5.30(typescript@6.0.2)
vue-data-ui:
- specifier: 3.16.0
- version: 3.16.0(vue@3.5.30(typescript@5.9.3))
+ specifier: 3.16.5
+ version: 3.16.5(vue@3.5.30(typescript@6.0.2))
devDependencies:
'@e18e/eslint-plugin':
specifier: 0.3.0
@@ -252,7 +252,7 @@ importers:
version: 1.58.2
'@storybook-vue/nuxt':
specifier: catalog:storybook
- version: 9.0.1(a948b6c1ae52494bf7069975102ca784)
+ version: 9.0.1(112edfd7bc85515f9be9dfb242ca54c2)
'@storybook/addon-a11y':
specifier: catalog:storybook
version: 10.3.1(storybook@10.3.1(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))
@@ -275,8 +275,8 @@ importers:
specifier: 4.0.2
version: 4.0.2
'@vitest/coverage-v8':
- specifier: 4.1.0
- version: 4.1.0(@voidzero-dev/vite-plus-test@0.1.12(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(esbuild@0.27.3)(happy-dom@20.3.5)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@1.8.0))(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2))
+ specifier: 4.1.1
+ version: 4.1.1(@voidzero-dev/vite-plus-test@0.1.12(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(esbuild@0.27.3)(happy-dom@20.3.5)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@1.8.0))(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2))
'@vue/test-utils':
specifier: 2.4.6
version: 2.4.6
@@ -287,8 +287,8 @@ importers:
specifier: 0.6.2
version: 0.6.2(magicast@0.5.2)
chromatic:
- specifier: 15.3.0
- version: 15.3.0
+ specifier: 16.0.0
+ version: 16.0.0
devalue:
specifier: 5.6.4
version: 5.6.4
@@ -305,14 +305,14 @@ importers:
specifier: npm:h3@2.0.1-rc.16
version: h3@2.0.1-rc.16
knip:
- specifier: 5.88.0
- version: 5.88.0(@types/node@24.12.0)(typescript@5.9.3)
+ specifier: 6.0.5
+ version: 6.0.5
markdown-it-anchor:
specifier: 9.2.0
version: 9.2.0(@types/markdown-it@14.1.2)(markdown-it@14.1.1)
schema-dts:
- specifier: 1.1.5
- version: 1.1.5
+ specifier: 2.0.0
+ version: 2.0.0(typescript@6.0.2)
storybook:
specifier: ^10.3.1
version: 10.3.1(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
@@ -320,20 +320,20 @@ importers:
specifier: catalog:storybook
version: 10.1.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@10.3.1(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))
typescript:
- specifier: 5.9.3
- version: 5.9.3
+ specifier: 6.0.2
+ version: 6.0.2
unplugin-vue-markdown:
specifier: 30.0.0
version: 30.0.0(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
vitest:
specifier: npm:@voidzero-dev/vite-plus-test@0.1.12
- version: '@voidzero-dev/vite-plus-test@0.1.12(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(esbuild@0.27.3)(happy-dom@20.3.5)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@1.8.0))(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2)'
+ version: '@voidzero-dev/vite-plus-test@0.1.12(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(esbuild@0.27.3)(happy-dom@20.3.5)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@1.8.0))(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2)'
vue-i18n-extract:
specifier: 2.0.7
version: 2.0.7
vue-tsc:
specifier: 3.2.6
- version: 3.2.6(typescript@5.9.3)
+ version: 3.2.6(typescript@6.0.2)
cli:
dependencies:
@@ -357,7 +357,7 @@ importers:
version: 0.11.12
valibot:
specifier: ^1.2.0
- version: 1.3.0(typescript@5.9.3)
+ version: 1.3.0(typescript@6.0.2)
validate-npm-package-name:
specifier: ^7.0.2
version: 7.0.2
@@ -370,16 +370,16 @@ importers:
version: 4.0.2
tsdown:
specifier: 0.21.4
- version: 0.21.4(oxc-resolver@11.19.1)(typescript@5.9.3)(vue-tsc@3.2.6(typescript@5.9.3))
+ version: 0.21.4(oxc-resolver@11.19.1)(typescript@6.0.2)(vue-tsc@3.2.6(typescript@6.0.2))
typescript:
- specifier: 5.9.3
- version: 5.9.3
+ specifier: 6.0.2
+ version: 6.0.2
docs:
dependencies:
'@nuxt/ui':
specifier: 4.5.1
- version: 4.5.1(@nuxt/content@3.12.0(@valibot/to-json-schema@1.5.0(valibot@1.3.0(typescript@5.9.3)))(better-sqlite3@12.8.0)(magicast@0.5.2)(valibot@1.3.0(typescript@5.9.3)))(@tiptap/extensions@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0))(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29))(@upstash/redis@1.37.0)(db0@0.3.4(better-sqlite3@12.8.0))(embla-carousel@8.6.0)(focus-trap@8.0.0)(ioredis@5.9.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.2)(typescript@5.9.3)(valibot@1.3.0(typescript@5.9.3))(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-router@4.6.4(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3))(yjs@13.6.29)(zod@4.3.6)
+ version: 4.5.1(@nuxt/content@3.12.0(@valibot/to-json-schema@1.5.0(valibot@1.3.0(typescript@6.0.2)))(better-sqlite3@12.8.0)(magicast@0.5.2)(valibot@1.3.0(typescript@6.0.2)))(@tiptap/extensions@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0))(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29))(@upstash/redis@1.37.0)(db0@0.3.4(better-sqlite3@12.8.0))(embla-carousel@8.6.0)(focus-trap@8.0.0)(ioredis@5.9.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.2)(typescript@6.0.2)(valibot@1.3.0(typescript@6.0.2))(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-router@4.6.4(vue@3.5.30(typescript@6.0.2)))(vue@3.5.30(typescript@6.0.2))(yjs@13.6.29)(zod@4.3.6)
'@nuxtjs/mdc':
specifier: 0.20.2
version: 0.20.2(magicast@0.5.2)
@@ -388,10 +388,10 @@ importers:
version: 12.8.0
docus:
specifier: 5.8.1
- version: 5.8.1(7e18258d225211023ec526c8fdd53284)
+ version: 5.8.1(e94a6b3b2b2bbf1999d0eb9203a712e7)
nuxt:
specifier: 4.3.1
- version: 4.3.1(@parcel/watcher@2.5.4)(@types/node@25.0.10)(@upstash/redis@1.37.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(yaml@2.8.2)
+ version: 4.3.1(@parcel/watcher@2.5.4)(@types/node@25.0.10)(@upstash/redis@1.37.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.2)
tailwindcss:
specifier: 4.2.2
version: 4.2.2
@@ -2606,6 +2606,12 @@ packages:
cpu: [arm]
os: [android]
+ '@oxc-parser/binding-android-arm-eabi@0.120.0':
+ resolution: {integrity: sha512-WU3qtINx802wOl8RxAF1v0VvmC2O4D9M8Sv486nLeQ7iPHVmncYZrtBhB4SYyX+XZxj2PNnCcN+PW21jHgiOxg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [android]
+
'@oxc-parser/binding-android-arm64@0.112.0':
resolution: {integrity: sha512-pRkbBRbuIIsufUWpOJ+JHWfJFNupkidy4sbjfcm37e6xwYrn9LSKMLubPHvNaL1Zf92ZRhGiwaYkEcmaFg2VcA==}
engines: {node: ^20.19.0 || >=22.12.0}
@@ -2618,6 +2624,12 @@ packages:
cpu: [arm64]
os: [android]
+ '@oxc-parser/binding-android-arm64@0.120.0':
+ resolution: {integrity: sha512-SEf80EHdhlbjZEgzeWm0ZA/br4GKMenDW3QB/gtyeTV1gStvvZeFi40ioHDZvds2m4Z9J1bUAUL8yn1/+A6iGg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [android]
+
'@oxc-parser/binding-android-arm64@0.95.0':
resolution: {integrity: sha512-dZyxhhvJigwWL1wgnLlqyEiSeuqO0WdDH9H+if0dPcBM4fKa5fjVkaUcJT1jBMcBTnkjxMwTXYZy5TK60N0fjg==}
engines: {node: ^20.19.0 || >=22.12.0}
@@ -2636,6 +2648,12 @@ packages:
cpu: [arm64]
os: [darwin]
+ '@oxc-parser/binding-darwin-arm64@0.120.0':
+ resolution: {integrity: sha512-xVrrbCai8R8CUIBu3CjryutQnEYhZqs1maIqDvtUCFZb8vY33H7uh9mHpL3a0JBIKoBUKjPH8+rzyAeXnS2d6A==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [darwin]
+
'@oxc-parser/binding-darwin-arm64@0.95.0':
resolution: {integrity: sha512-zun9+V33kyCtNec9oUSWwb0qi3fB8pXwum1yGFECPEr55g/CrWju6/Jv4hwwNBeW2tK9Ch/PRstEtYmOLMhHpg==}
engines: {node: ^20.19.0 || >=22.12.0}
@@ -2654,6 +2672,12 @@ packages:
cpu: [x64]
os: [darwin]
+ '@oxc-parser/binding-darwin-x64@0.120.0':
+ resolution: {integrity: sha512-xyHBbnJ6mydnQUH7MAcafOkkrNzQC6T+LXgDH/3InEq2BWl/g424IMRiJVSpVqGjB+p2bd0h0WRR8iIwzjU7rw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [darwin]
+
'@oxc-parser/binding-darwin-x64@0.95.0':
resolution: {integrity: sha512-9djMQ/t6Ns/UXtziwUe562uVJMbhtuLtCj+Xav+HMVT/rhV9gWO8PQOG7AwDLUBjJanItsrfqrGtqhNxtZ701w==}
engines: {node: ^20.19.0 || >=22.12.0}
@@ -2672,6 +2696,12 @@ packages:
cpu: [x64]
os: [freebsd]
+ '@oxc-parser/binding-freebsd-x64@0.120.0':
+ resolution: {integrity: sha512-UMnVRllquXUYTeNfFKmxTTEdZ/ix1nLl0ducDzMSREoWYGVIHnOOxoKMWlCOvRr9Wk/HZqo2rh1jeumbPGPV9A==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [freebsd]
+
'@oxc-parser/binding-freebsd-x64@0.95.0':
resolution: {integrity: sha512-GK6k0PgCVkkeRZtHgcosCYbXIRySpJpuPw/OInfLGFh8f3x9gp2l8Fbcfx+YO+ZOHFBCd2NNedGqw8wMgouxfA==}
engines: {node: ^20.19.0 || >=22.12.0}
@@ -2690,6 +2720,12 @@ packages:
cpu: [arm]
os: [linux]
+ '@oxc-parser/binding-linux-arm-gnueabihf@0.120.0':
+ resolution: {integrity: sha512-tkvn2CQ7QdcsMnpfiX3fd3wA3EFsWKYlcQzq9cFw/xc89Al7W6Y4O0FgLVkVQpo0Tnq/qtE1XfkJOnRRA9S/NA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
+
'@oxc-parser/binding-linux-arm-gnueabihf@0.95.0':
resolution: {integrity: sha512-+g/lFITtyHHEk69cunOHuiT5cX+mpUTcbGYNe8suguZ7FqgNwai+PnGv0ctCvtgxBPVfckfUK8c3RvFKo+vi/w==}
engines: {node: ^20.19.0 || >=22.12.0}
@@ -2708,6 +2744,12 @@ packages:
cpu: [arm]
os: [linux]
+ '@oxc-parser/binding-linux-arm-musleabihf@0.120.0':
+ resolution: {integrity: sha512-WN5y135Ic42gQDk9grbwY9++fDhqf8knN6fnP+0WALlAUh4odY/BDK1nfTJRSfpJD9P3r1BwU0m3pW2DU89whQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
+
'@oxc-parser/binding-linux-arm-musleabihf@0.95.0':
resolution: {integrity: sha512-SXNasDtPw8ycNV7VEvFxb4LETmykvWKUhHR7K3us818coXYpDj54P8WEx8hJobP/9skuuiFuKHmtYLdjX8wntA==}
engines: {node: ^20.19.0 || >=22.12.0}
@@ -2728,6 +2770,13 @@ packages:
os: [linux]
libc: [glibc]
+ '@oxc-parser/binding-linux-arm64-gnu@0.120.0':
+ resolution: {integrity: sha512-1GgQBCcXvFMw99EPdMy+4NZ3aYyXsxjf9kbUUg8HuAy3ZBXzOry5KfFEzT9nqmgZI1cuetvApkiJBZLAPo8uaw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
'@oxc-parser/binding-linux-arm64-gnu@0.95.0':
resolution: {integrity: sha512-0LzebARTU0ROfD6pDK4h1pFn+09meErCZ0MA2TaW08G72+GNneEsksPufOuI+9AxVSRa+jKE3fu0wavvhZgSkg==}
engines: {node: ^20.19.0 || >=22.12.0}
@@ -2749,6 +2798,13 @@ packages:
os: [linux]
libc: [musl]
+ '@oxc-parser/binding-linux-arm64-musl@0.120.0':
+ resolution: {integrity: sha512-gmMQ70gsPdDBgpcErvJEoWNBr7bJooSLlvOBVBSGfOzlP5NvJ3bFvnUeZZ9d+dPrqSngtonf7nyzWUTUj/U+lw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
'@oxc-parser/binding-linux-arm64-musl@0.95.0':
resolution: {integrity: sha512-Pvi1lGe/G+mJZ3hUojMP/aAHAzHA25AEtVr8/iuz7UV72t/15NOgJYr9kELMUMNjPqpr3vKUgXTFmTtAxp11Qw==}
engines: {node: ^20.19.0 || >=22.12.0}
@@ -2770,6 +2826,13 @@ packages:
os: [linux]
libc: [glibc]
+ '@oxc-parser/binding-linux-ppc64-gnu@0.120.0':
+ resolution: {integrity: sha512-T/kZuU0ajop0xhzVMwH5r3srC9Nqup5HaIo+3uFjIN5uPxa0LvSxC1ZqP4aQGJVW5G0z8/nCkjIfSMS91P/wzw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [glibc]
+
'@oxc-parser/binding-linux-riscv64-gnu@0.112.0':
resolution: {integrity: sha512-2QlvQBUhHuAE3ezD4X3CAEKMXdfgInggQ5Bj/7gb5NcYP3GyfLTj7c+mMu+BRwfC9B3AXBNyqHWbqEuuUvZyRQ==}
engines: {node: ^20.19.0 || >=22.12.0}
@@ -2784,6 +2847,13 @@ packages:
os: [linux]
libc: [glibc]
+ '@oxc-parser/binding-linux-riscv64-gnu@0.120.0':
+ resolution: {integrity: sha512-vn21KXLAXzaI3N5CZWlBr1iWeXLl9QFIMor7S1hUjUGTeUuWCoE6JZB040/ZNDwf+JXPX8Ao9KbmJq9FMC2iGw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [glibc]
+
'@oxc-parser/binding-linux-riscv64-gnu@0.95.0':
resolution: {integrity: sha512-pUEVHIOVNDfhk4sTlLhn6mrNENhE4/dAwemxIfqpcSyBlYG0xYZND1F3jjR2yWY6DakXZ6VSuDbtiv1LPNlOLw==}
engines: {node: ^20.19.0 || >=22.12.0}
@@ -2805,6 +2875,13 @@ packages:
os: [linux]
libc: [musl]
+ '@oxc-parser/binding-linux-riscv64-musl@0.120.0':
+ resolution: {integrity: sha512-SUbUxlar007LTGmSLGIC5x/WJvwhdX+PwNzFJ9f/nOzZOrCFbOT4ikt7pJIRg1tXVsEfzk5mWpGO1NFiSs4PIw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [musl]
+
'@oxc-parser/binding-linux-s390x-gnu@0.112.0':
resolution: {integrity: sha512-+5HhNHtxsdcd7+ljXFnn9FOoCNXJX3UPgIfIE6vdwS1HqdGNH6eAcVobuqGOp54l8pvcxDQA6F4cPswCgLrQfQ==}
engines: {node: ^20.19.0 || >=22.12.0}
@@ -2819,6 +2896,13 @@ packages:
os: [linux]
libc: [glibc]
+ '@oxc-parser/binding-linux-s390x-gnu@0.120.0':
+ resolution: {integrity: sha512-hYiPJTxyfJY2+lMBFk3p2bo0R9GN+TtpPFlRqVchL1qvLG+pznstramHNvJlw9AjaoRUHwp9IKR7UZQnRPGjgQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [s390x]
+ os: [linux]
+ libc: [glibc]
+
'@oxc-parser/binding-linux-s390x-gnu@0.95.0':
resolution: {integrity: sha512-5+olaepHTE3J/+w7g0tr3nocvv5BKilAJnzj4L8tWBCLEZbL6olJcGVoldUO+3cgg1SO1xJywP5BuLhT0mDUDw==}
engines: {node: ^20.19.0 || >=22.12.0}
@@ -2840,6 +2924,13 @@ packages:
os: [linux]
libc: [glibc]
+ '@oxc-parser/binding-linux-x64-gnu@0.120.0':
+ resolution: {integrity: sha512-q+5jSVZkprJCIy3dzJpApat0InJaoxQLsJuD6DkX8hrUS61z2lHQ1Fe9L2+TYbKHXCLWbL0zXe7ovkIdopBGMQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
'@oxc-parser/binding-linux-x64-gnu@0.95.0':
resolution: {integrity: sha512-8huzHlK/N98wrnYKxIcYsK8ZGBWomQchu/Mzi6m+CtbhjWOv9DmK0jQ2fUWImtluQVpTwS0uZT06d3g7XIkJrA==}
engines: {node: ^20.19.0 || >=22.12.0}
@@ -2861,6 +2952,13 @@ packages:
os: [linux]
libc: [musl]
+ '@oxc-parser/binding-linux-x64-musl@0.120.0':
+ resolution: {integrity: sha512-D9QDDZNnH24e7X4ftSa6ar/2hCavETfW3uk0zgcMIrZNy459O5deTbWrjGzZiVrSWigGtlQwzs2McBP0QsfV1w==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
'@oxc-parser/binding-linux-x64-musl@0.95.0':
resolution: {integrity: sha512-bWnrLfGDcx/fab0+UQnFbVFbiykof/btImbYf+cI2pU/1Egb2x+OKSmM5Qt0nEUiIpM5fgJmYXxTopybSZOKYA==}
engines: {node: ^20.19.0 || >=22.12.0}
@@ -2880,6 +2978,12 @@ packages:
cpu: [arm64]
os: [openharmony]
+ '@oxc-parser/binding-openharmony-arm64@0.120.0':
+ resolution: {integrity: sha512-TBU8ZwOUWAOUWVfmI16CYWbvh4uQb9zHnGBHsw5Cp2JUVG044OIY1CSHODLifqzQIMTXvDvLzcL89GGdUIqNrA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [openharmony]
+
'@oxc-parser/binding-wasm32-wasi@0.112.0':
resolution: {integrity: sha512-Gr8X2PUU3hX1g3F5oLWIZB8DhzDmjr5TfOrmn5tlBOo9l8ojPGdKjnIBfObM7X15928vza8QRKW25RTR7jfivg==}
engines: {node: '>=14.0.0'}
@@ -2890,6 +2994,11 @@ packages:
engines: {node: '>=14.0.0'}
cpu: [wasm32]
+ '@oxc-parser/binding-wasm32-wasi@0.120.0':
+ resolution: {integrity: sha512-WG/FOZgDJCpJnuF3ToG/K28rcOmSY7FmFmfBKYb2fmLyhDzPpUldFGV7/Fz4ru0Iz/v4KPmf8xVgO8N3lO4KHA==}
+ engines: {node: '>=14.0.0'}
+ cpu: [wasm32]
+
'@oxc-parser/binding-wasm32-wasi@0.95.0':
resolution: {integrity: sha512-0JLyqkZu1HnQIZ4e5LBGOtzqua1QwFEUOoMSycdoerXqayd4LK2b7WMfAx8eCIf+jGm1Uj6f3R00nlsx8g1faQ==}
engines: {node: '>=14.0.0'}
@@ -2907,6 +3016,12 @@ packages:
cpu: [arm64]
os: [win32]
+ '@oxc-parser/binding-win32-arm64-msvc@0.120.0':
+ resolution: {integrity: sha512-1T0HKGcsz/BKo77t7+89L8Qvu4f9DoleKWHp3C5sJEcbCjDOLx3m9m722bWZTY+hANlUEs+yjlK+lBFsA+vrVQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [win32]
+
'@oxc-parser/binding-win32-arm64-msvc@0.95.0':
resolution: {integrity: sha512-RWvaA6s1SYlBj9CxwHfNn0CRlkPdv9fEUAXfZkGQPdP5e1ppIaO2KYE0sUov/zzp9hPTMMsTMHl4dcIbb+pHCQ==}
engines: {node: ^20.19.0 || >=22.12.0}
@@ -2925,6 +3040,12 @@ packages:
cpu: [ia32]
os: [win32]
+ '@oxc-parser/binding-win32-ia32-msvc@0.120.0':
+ resolution: {integrity: sha512-L7vfLzbOXsjBXV0rv/6Y3Jd9BRjPeCivINZAqrSyAOZN3moCopDN+Psq9ZrGNZtJzP8946MtlRFZ0Als0wBCOw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ia32]
+ os: [win32]
+
'@oxc-parser/binding-win32-x64-msvc@0.112.0':
resolution: {integrity: sha512-oGHluohzmVFAuQrkEnl1OXAxMz2aYmimxUqIgKXpBgbr7PvFv0doELB273sX+5V3fKeggohKg1A2Qq21W9Z9cQ==}
engines: {node: ^20.19.0 || >=22.12.0}
@@ -2937,6 +3058,12 @@ packages:
cpu: [x64]
os: [win32]
+ '@oxc-parser/binding-win32-x64-msvc@0.120.0':
+ resolution: {integrity: sha512-ys+upfqNtSu58huAhJMBKl3XCkGzyVFBlMlGPzHeFKgpFF/OdgNs1MMf8oaJIbgMH8ZxgGF7qfue39eJohmKIg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [win32]
+
'@oxc-parser/binding-win32-x64-msvc@0.95.0':
resolution: {integrity: sha512-BQpgl7rDjFvCIHudmUR0dCwc4ylBYZl4CPVinlD3NhkMif4WD5dADckoo5ES/KOpFyvwcbKZX+grP63cjHi26g==}
engines: {node: ^20.19.0 || >=22.12.0}
@@ -2953,6 +3080,9 @@ packages:
'@oxc-project/types@0.115.0':
resolution: {integrity: sha512-4n91DKnebUS4yjUHl2g3/b2T+IUdCfmoZGhmwsovZCDaJSs+QkVAM+0AqqTxHSsHfeiMuueT75cZaZcT/m0pSw==}
+ '@oxc-project/types@0.120.0':
+ resolution: {integrity: sha512-k1YNu55DuvAip/MGE1FTsIuU3FUCn6v/ujG9V7Nq5Df/kX2CWb13hhwD0lmJGMGqE+bE1MXvv9SZVnMzEXlWcg==}
+
'@oxc-project/types@0.95.0':
resolution: {integrity: sha512-vACy7vhpMPhjEJhULNxrdR0D943TkA/MigMpJCHmBHvMXxRStRi/dPtTlfQ3uDwWSzRpT8z+7ImjZVf8JWBocQ==}
@@ -5039,11 +5169,11 @@ packages:
vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0
vue: ^3.2.25
- '@vitest/coverage-v8@4.1.0':
- resolution: {integrity: sha512-nDWulKeik2bL2Va/Wl4x7DLuTKAXa906iRFooIRPR+huHkcvp9QDkPQ2RJdmjOFrqOqvNfoSQLF68deE3xC3CQ==}
+ '@vitest/coverage-v8@4.1.1':
+ resolution: {integrity: sha512-nZ4RWwGCoGOQRMmU/Q9wlUY540RVRxJZ9lxFsFfy0QV7Zmo5VVBhB6Sl9Xa0KIp2iIs3zWfPlo9LcY1iqbpzCw==}
peerDependencies:
- '@vitest/browser': 4.1.0
- vitest: 4.1.0
+ '@vitest/browser': 4.1.1
+ vitest: 4.1.1
peerDependenciesMeta:
'@vitest/browser':
optional: true
@@ -5054,8 +5184,8 @@ packages:
'@vitest/pretty-format@3.2.4':
resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==}
- '@vitest/pretty-format@4.1.0':
- resolution: {integrity: sha512-3RZLZlh88Ib0J7NQTRATfc/3ZPOnSUn2uDBUoGNn5T36+bALixmzphN26OUD3LRXWkJu4H0s5vvUeqBiw+kS0A==}
+ '@vitest/pretty-format@4.1.1':
+ resolution: {integrity: sha512-GM+TEQN5WhOygr1lp7skeVjdLPqqWMHsfzXrcHAqZJi/lIVh63H0kaRCY8MDhNWikx19zBUK8ceaLB7X5AH9NQ==}
'@vitest/spy@3.2.4':
resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==}
@@ -5063,8 +5193,8 @@ packages:
'@vitest/utils@3.2.4':
resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==}
- '@vitest/utils@4.1.0':
- resolution: {integrity: sha512-XfPXT6a8TZY3dcGY8EdwsBulFCIw+BeeX0RZn2x/BtiY/75YGh8FeWGG8QISN/WhaqSrE2OrlDgtF8q5uhOTmw==}
+ '@vitest/utils@4.1.1':
+ resolution: {integrity: sha512-cNxAlaB3sHoCdL6pj6yyUXv9Gry1NHNg0kFTXdvSIZXLHsqKH7chiWOkwJ5s5+d/oMwcoG9T0bKU38JZWKusrQ==}
'@voidzero-dev/vite-plus-core@0.1.12':
resolution: {integrity: sha512-j8YNe7A+8JcSoddztf5whvom/yJ7OKUO3Y5a3UoLIUmOL8YEKVv5nPANrxJ7eaFfHJoMnBEwzBpq1YVZ+H3uPA==}
@@ -5866,8 +5996,8 @@ packages:
resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==}
engines: {node: '>=18'}
- chromatic@15.3.0:
- resolution: {integrity: sha512-ficw/Pz9OpBnPoWDRmuwFDwzLPSN0o90x6X+0+rbnMFYtDTPWXddW6R14jQ56SgYSByJ67OyHZg2gW6U6HF2Qw==}
+ chromatic@16.0.0:
+ resolution: {integrity: sha512-O81RVGDXXoreNeG894hjaUx08xep+C/BA6aJNMZkwSjH7Lln8IweZekBpBEoQPNNpjmHyZvcTIwN/aGitdK53Q==}
hasBin: true
peerDependencies:
'@chromatic-com/cypress': ^0.*.* || ^1.0.0
@@ -7683,13 +7813,10 @@ packages:
resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==}
engines: {node: '>= 8'}
- knip@5.88.0:
- resolution: {integrity: sha512-FZjQYLYwUbVrtC3C1cKyEMMqR4K2ZlkQLZszJgF5cfDo4GUSBZAdAV0P3eyzZrkssRoghLJQA9HTQUW7G+Tc8Q==}
- engines: {node: '>=18.18.0'}
+ knip@6.0.5:
+ resolution: {integrity: sha512-+i9e/ZKuYlECB5iIK82NQwnYso4oNLBhzsTbXhSqCG1qfGi6D84GNtRENafmS3C0lABX8Wf3BKM434nPXi2AbQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
- peerDependencies:
- '@types/node': '>=18'
- typescript: '>=5.0.4 <7'
knitwork@1.3.0:
resolution: {integrity: sha512-4LqMNoONzR43B1W0ek0fhXMsDNW/zxa1NdFAVMY+k28pgZLovR4G3PB5MrpTxCy1QaZCqNoiaKPr5w5qZHfSNw==}
@@ -8478,6 +8605,10 @@ packages:
resolution: {integrity: sha512-2w7Xn3CbS/zwzSY82S5WLemrRu3CT57uF7Lx8llrE/2bul6iMTcJE4Rbls7GDNbLn3ttATI68PfOz2Pt3KZ2cQ==}
engines: {node: ^20.19.0 || >=22.12.0}
+ oxc-parser@0.120.0:
+ resolution: {integrity: sha512-WyPWZlcIm+Fkte63FGfgFB8mAAk33aH9h5N9lphXVOHSXEBFFsmYdOBedVKly363aWABjZdaj/m9lBfEY4wt+w==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+
oxc-parser@0.95.0:
resolution: {integrity: sha512-Te8fE/SmiiKWIrwBwxz5Dod87uYvsbcZ9JAL5ylPg1DevyKgTkxCXnPEaewk1Su2qpfNmry5RHoN+NywWFCG+A==}
engines: {node: ^20.19.0 || >=22.12.0}
@@ -9380,8 +9511,14 @@ packages:
scheduler@0.27.0:
resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==}
- schema-dts@1.1.5:
- resolution: {integrity: sha512-RJr9EaCmsLzBX2NDiO5Z3ux2BVosNZN5jo0gWgsyKvxKIUL5R3swNvoorulAeL9kLB0iTSX7V6aokhla2m7xbg==}
+ schema-dts-lib@1.0.0:
+ resolution: {integrity: sha512-9MEO5vpQH9JdBioUupqluzxSYxPLjhmqRUudk15adUl/ypnRsM2/M1kN3AmVJQeG7nZqcL68H8JlGqQQT6vy9A==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ typescript: '>=4.9.5'
+
+ schema-dts@2.0.0:
+ resolution: {integrity: sha512-t7NoCy3Rn5GHGx6p7s1qIYK/AeIb8ZxJNR9WUNFkwMv2CiiGZBmqqYWc2FlZVm5ZbiHMY4OvBWhj7QtyrFO2Jw==}
schema-utils@4.3.3:
resolution: {integrity: sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==}
@@ -10047,6 +10184,11 @@ packages:
engines: {node: '>=14.17'}
hasBin: true
+ typescript@6.0.2:
+ resolution: {integrity: sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
uc.micro@2.1.0:
resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==}
@@ -10579,8 +10721,8 @@ packages:
vue-component-type-helpers@3.2.6:
resolution: {integrity: sha512-O02tnvIfOQVmnvoWwuSydwRoHjZVt8UEBR+2p4rT35p8GAy5VTlWP8o5qXfJR/GWCN0nVZoYWsVUvx2jwgdBmQ==}
- vue-data-ui@3.16.0:
- resolution: {integrity: sha512-5f9mJi5vkC/48ntfBwxVG8AjuyZBf7nK9dzQDcL8L9xEFlRHuIrXB1YMt1qDQEWimcPSmWZ051KUQm/cSS3U5g==}
+ vue-data-ui@3.16.5:
+ resolution: {integrity: sha512-m6q7vy/DWKZpiR1TOYbqNEYYTH1FEFkT0VgzZK3EZvJX7k+q3UMKMEO57lR5S6l9ETy+PDuJoR/7hg9SOcDJAw==}
peerDependencies:
jspdf: '>=3.0.1'
vue: '>=3.3.0'
@@ -10958,12 +11100,12 @@ snapshots:
dependencies:
json-schema: 0.4.0
- '@ai-sdk/vue@3.0.116(vue@3.5.30(typescript@5.9.3))(zod@4.3.6)':
+ '@ai-sdk/vue@3.0.116(vue@3.5.30(typescript@6.0.2))(zod@4.3.6)':
dependencies:
'@ai-sdk/provider-utils': 4.0.19(zod@4.3.6)
ai: 6.0.116(zod@4.3.6)
- swrv: 1.1.0(vue@3.5.30(typescript@5.9.3))
- vue: 3.5.30(typescript@5.9.3)
+ swrv: 1.1.0(vue@3.5.30(typescript@6.0.2))
+ vue: 3.5.30(typescript@6.0.2)
transitivePeerDependencies:
- zod
@@ -12382,11 +12524,11 @@ snapshots:
'@floating-ui/utils@0.2.11': {}
- '@floating-ui/vue@1.1.11(vue@3.5.30(typescript@5.9.3))':
+ '@floating-ui/vue@1.1.11(vue@3.5.30(typescript@6.0.2))':
dependencies:
'@floating-ui/dom': 1.7.6
'@floating-ui/utils': 0.2.11
- vue-demi: 0.14.10(vue@3.5.30(typescript@5.9.3))
+ vue-demi: 0.14.10(vue@3.5.30(typescript@6.0.2))
transitivePeerDependencies:
- '@vue/composition-api'
- vue
@@ -12438,10 +12580,10 @@ snapshots:
'@iconify/types': 2.0.0
mlly: 1.8.0
- '@iconify/vue@5.0.0(vue@3.5.30(typescript@5.9.3))':
+ '@iconify/vue@5.0.0(vue@3.5.30(typescript@6.0.2))':
dependencies:
'@iconify/types': 2.0.0
- vue: 3.5.30(typescript@5.9.3)
+ vue: 3.5.30(typescript@6.0.2)
'@img/colour@1.0.0': {}
@@ -12547,7 +12689,7 @@ snapshots:
dependencies:
'@swc/helpers': 0.5.18
- '@intlify/bundle-utils@11.0.7(vue-i18n@11.2.8(vue@3.5.30(typescript@5.9.3)))':
+ '@intlify/bundle-utils@11.0.7(vue-i18n@11.2.8(vue@3.5.30(typescript@6.0.2)))':
dependencies:
'@intlify/message-compiler': 11.3.0
'@intlify/shared': 11.3.0
@@ -12559,7 +12701,7 @@ snapshots:
source-map-js: 1.2.1
yaml-eslint-parser: 1.3.2
optionalDependencies:
- vue-i18n: 11.2.8(vue@3.5.30(typescript@5.9.3))
+ vue-i18n: 11.2.8(vue@3.5.30(typescript@6.0.2))
'@intlify/core-base@11.2.8':
dependencies:
@@ -12601,12 +12743,12 @@ snapshots:
'@intlify/shared@11.3.0': {}
- '@intlify/unplugin-vue-i18n@11.0.7(@vue/compiler-dom@3.5.30)(eslint@9.39.2(jiti@2.6.1))(rollup@4.56.0)(typescript@5.9.3)(vue-i18n@11.2.8(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3))':
+ '@intlify/unplugin-vue-i18n@11.0.7(@vue/compiler-dom@3.5.30)(eslint@9.39.2(jiti@2.6.1))(rollup@4.56.0)(typescript@5.9.3)(vue-i18n@11.2.8(vue@3.5.30(typescript@6.0.2)))(vue@3.5.30(typescript@6.0.2))':
dependencies:
'@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1))
- '@intlify/bundle-utils': 11.0.7(vue-i18n@11.2.8(vue@3.5.30(typescript@5.9.3)))
+ '@intlify/bundle-utils': 11.0.7(vue-i18n@11.2.8(vue@3.5.30(typescript@6.0.2)))
'@intlify/shared': 11.3.0
- '@intlify/vue-i18n-extensions': 8.0.0(@intlify/shared@11.3.0)(@vue/compiler-dom@3.5.30)(vue-i18n@11.2.8(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3))
+ '@intlify/vue-i18n-extensions': 8.0.0(@intlify/shared@11.3.0)(@vue/compiler-dom@3.5.30)(vue-i18n@11.2.8(vue@3.5.30(typescript@6.0.2)))(vue@3.5.30(typescript@6.0.2))
'@rollup/pluginutils': 5.3.0(rollup@4.56.0)
'@typescript-eslint/scope-manager': 8.56.1
'@typescript-eslint/typescript-estree': 8.56.1(typescript@5.9.3)
@@ -12615,9 +12757,9 @@ snapshots:
pathe: 2.0.3
picocolors: 1.1.1
unplugin: 2.3.11
- vue: 3.5.30(typescript@5.9.3)
+ vue: 3.5.30(typescript@6.0.2)
optionalDependencies:
- vue-i18n: 11.2.8(vue@3.5.30(typescript@5.9.3))
+ vue-i18n: 11.2.8(vue@3.5.30(typescript@6.0.2))
transitivePeerDependencies:
- '@vue/compiler-dom'
- eslint
@@ -12627,14 +12769,14 @@ snapshots:
'@intlify/utils@0.13.0': {}
- '@intlify/vue-i18n-extensions@8.0.0(@intlify/shared@11.3.0)(@vue/compiler-dom@3.5.30)(vue-i18n@11.2.8(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3))':
+ '@intlify/vue-i18n-extensions@8.0.0(@intlify/shared@11.3.0)(@vue/compiler-dom@3.5.30)(vue-i18n@11.2.8(vue@3.5.30(typescript@6.0.2)))(vue@3.5.30(typescript@6.0.2))':
dependencies:
'@babel/parser': 7.29.0
optionalDependencies:
'@intlify/shared': 11.3.0
'@vue/compiler-dom': 3.5.30
- vue: 3.5.30(typescript@5.9.3)
- vue-i18n: 11.2.8(vue@3.5.30(typescript@5.9.3))
+ vue: 3.5.30(typescript@6.0.2)
+ vue-i18n: 11.2.8(vue@3.5.30(typescript@6.0.2))
'@ioredis/commands@1.5.0': {}
@@ -12954,7 +13096,7 @@ snapshots:
- magicast
- supports-color
- '@nuxt/content@3.12.0(@valibot/to-json-schema@1.5.0(valibot@1.3.0(typescript@5.9.3)))(better-sqlite3@12.8.0)(magicast@0.5.2)(valibot@1.3.0(typescript@5.9.3))':
+ '@nuxt/content@3.12.0(@valibot/to-json-schema@1.5.0(valibot@1.3.0(typescript@6.0.2)))(better-sqlite3@12.8.0)(magicast@0.5.2)(valibot@1.3.0(typescript@6.0.2))':
dependencies:
'@nuxt/kit': 4.3.1(magicast@0.5.2)
'@nuxtjs/mdc': 0.20.2(magicast@0.5.2)
@@ -13004,9 +13146,9 @@ snapshots:
zod: 3.25.76
zod-to-json-schema: 3.25.1(zod@3.25.76)
optionalDependencies:
- '@valibot/to-json-schema': 1.5.0(valibot@1.3.0(typescript@5.9.3))
+ '@valibot/to-json-schema': 1.5.0(valibot@1.3.0(typescript@6.0.2))
better-sqlite3: 12.8.0
- valibot: 1.3.0(typescript@5.9.3)
+ valibot: 1.3.0(typescript@6.0.2)
transitivePeerDependencies:
- bufferutil
- drizzle-orm
@@ -13068,12 +13210,12 @@ snapshots:
prompts: 2.4.2
semver: 7.7.4
- '@nuxt/devtools@3.1.1(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3))':
+ '@nuxt/devtools@3.1.1(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@6.0.2))':
dependencies:
'@nuxt/devtools-kit': 3.1.1(magicast@0.5.2)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
'@nuxt/devtools-wizard': 3.1.1
'@nuxt/kit': 4.3.1(magicast@0.5.2)
- '@vue/devtools-core': 8.0.5(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3))
+ '@vue/devtools-core': 8.0.5(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@6.0.2))
'@vue/devtools-kit': 8.0.5
birpc: 2.9.0
consola: 3.4.2
@@ -13100,7 +13242,7 @@ snapshots:
tinyglobby: 0.2.15
vite: 8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)
vite-plugin-inspect: 11.3.3(@nuxt/kit@4.3.1(magicast@0.5.2))(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
- vite-plugin-vue-tracer: 1.2.0(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3))
+ vite-plugin-vue-tracer: 1.2.0(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@6.0.2))
which: 5.0.0
ws: 8.19.0
transitivePeerDependencies:
@@ -13109,12 +13251,12 @@ snapshots:
- utf-8-validate
- vue
- '@nuxt/devtools@3.1.1(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3))':
+ '@nuxt/devtools@3.1.1(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@6.0.2))':
dependencies:
'@nuxt/devtools-kit': 3.1.1(magicast@0.5.2)(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
'@nuxt/devtools-wizard': 3.1.1
'@nuxt/kit': 4.3.1(magicast@0.5.2)
- '@vue/devtools-core': 8.0.5(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3))
+ '@vue/devtools-core': 8.0.5(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@6.0.2))
'@vue/devtools-kit': 8.0.5
birpc: 2.9.0
consola: 3.4.2
@@ -13141,7 +13283,7 @@ snapshots:
tinyglobby: 0.2.15
vite: 8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)
vite-plugin-inspect: 11.3.3(@nuxt/kit@4.3.1(magicast@0.5.2))(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
- vite-plugin-vue-tracer: 1.2.0(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3))
+ vite-plugin-vue-tracer: 1.2.0(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@6.0.2))
which: 5.0.0
ws: 8.19.0
transitivePeerDependencies:
@@ -13230,12 +13372,12 @@ snapshots:
- uploadthing
- vite
- '@nuxt/icon@2.2.1(magicast@0.5.2)(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3))':
+ '@nuxt/icon@2.2.1(magicast@0.5.2)(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@6.0.2))':
dependencies:
'@iconify/collections': 1.0.654
'@iconify/types': 2.0.0
'@iconify/utils': 3.1.0
- '@iconify/vue': 5.0.0(vue@3.5.30(typescript@5.9.3))
+ '@iconify/vue': 5.0.0(vue@3.5.30(typescript@6.0.2))
'@nuxt/devtools-kit': 3.2.2(magicast@0.5.2)(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
'@nuxt/kit': 4.3.1(magicast@0.5.2)
consola: 3.4.2
@@ -13338,11 +13480,11 @@ snapshots:
transitivePeerDependencies:
- magicast
- '@nuxt/nitro-server@4.3.1(@upstash/redis@1.37.0)(better-sqlite3@12.8.0)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(ioredis@5.9.2)(magicast@0.5.2)(nuxt@4.3.1(@parcel/watcher@2.5.4)(@types/node@24.12.0)(@upstash/redis@1.37.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(yaml@2.8.2))(rolldown@1.0.0-rc.9)(typescript@5.9.3)':
+ '@nuxt/nitro-server@4.3.1(@upstash/redis@1.37.0)(better-sqlite3@12.8.0)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(ioredis@5.9.2)(magicast@0.5.2)(nuxt@4.3.1(@parcel/watcher@2.5.4)(@types/node@24.12.0)(@upstash/redis@1.37.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.2))(rolldown@1.0.0-rc.9)(typescript@6.0.2)':
dependencies:
'@nuxt/devalue': 2.0.2
'@nuxt/kit': 4.3.1(magicast@0.5.2)
- '@unhead/vue': 2.1.10(vue@3.5.30(typescript@5.9.3))
+ '@unhead/vue': 2.1.10(vue@3.5.30(typescript@6.0.2))
'@vue/shared': 3.5.30
consola: 3.4.2
defu: 6.1.4
@@ -13356,7 +13498,7 @@ snapshots:
klona: 2.0.6
mocked-exports: 0.1.1
nitropack: 2.13.1(@upstash/redis@1.37.0)(better-sqlite3@12.8.0)(encoding@0.1.13)(rolldown@1.0.0-rc.9)
- nuxt: 4.3.1(@parcel/watcher@2.5.4)(@types/node@24.12.0)(@upstash/redis@1.37.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(yaml@2.8.2)
+ nuxt: 4.3.1(@parcel/watcher@2.5.4)(@types/node@24.12.0)(@upstash/redis@1.37.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.2)
ohash: 2.0.11
pathe: 2.0.3
pkg-types: 2.3.0
@@ -13365,7 +13507,7 @@ snapshots:
ufo: 1.6.3
unctx: 2.5.0
unstorage: 1.17.4(@upstash/redis@1.37.0)(db0@0.3.4(better-sqlite3@12.8.0))(ioredis@5.9.2)
- vue: 3.5.30(typescript@5.9.3)
+ vue: 3.5.30(typescript@6.0.2)
vue-bundle-renderer: 2.2.0
vue-devtools-stub: 0.1.0
transitivePeerDependencies:
@@ -13403,11 +13545,11 @@ snapshots:
- uploadthing
- xml2js
- '@nuxt/nitro-server@4.3.1(@upstash/redis@1.37.0)(better-sqlite3@12.8.0)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(ioredis@5.9.2)(magicast@0.5.2)(nuxt@4.3.1(@parcel/watcher@2.5.4)(@types/node@25.0.10)(@upstash/redis@1.37.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(yaml@2.8.2))(rolldown@1.0.0-rc.9)(typescript@5.9.3)':
+ '@nuxt/nitro-server@4.3.1(@upstash/redis@1.37.0)(better-sqlite3@12.8.0)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(ioredis@5.9.2)(magicast@0.5.2)(nuxt@4.3.1(@parcel/watcher@2.5.4)(@types/node@25.0.10)(@upstash/redis@1.37.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.2))(rolldown@1.0.0-rc.9)(typescript@6.0.2)':
dependencies:
'@nuxt/devalue': 2.0.2
'@nuxt/kit': 4.3.1(magicast@0.5.2)
- '@unhead/vue': 2.1.10(vue@3.5.30(typescript@5.9.3))
+ '@unhead/vue': 2.1.10(vue@3.5.30(typescript@6.0.2))
'@vue/shared': 3.5.30
consola: 3.4.2
defu: 6.1.4
@@ -13421,7 +13563,7 @@ snapshots:
klona: 2.0.6
mocked-exports: 0.1.1
nitropack: 2.13.1(@upstash/redis@1.37.0)(better-sqlite3@12.8.0)(encoding@0.1.13)(rolldown@1.0.0-rc.9)
- nuxt: 4.3.1(@parcel/watcher@2.5.4)(@types/node@25.0.10)(@upstash/redis@1.37.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(yaml@2.8.2)
+ nuxt: 4.3.1(@parcel/watcher@2.5.4)(@types/node@25.0.10)(@upstash/redis@1.37.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.2)
ohash: 2.0.11
pathe: 2.0.3
pkg-types: 2.3.0
@@ -13430,7 +13572,7 @@ snapshots:
ufo: 1.6.3
unctx: 2.5.0
unstorage: 1.17.4(@upstash/redis@1.37.0)(db0@0.3.4(better-sqlite3@12.8.0))(ioredis@5.9.2)
- vue: 3.5.30(typescript@5.9.3)
+ vue: 3.5.30(typescript@6.0.2)
vue-bundle-renderer: 2.2.0
vue-devtools-stub: 0.1.0
transitivePeerDependencies:
@@ -13484,11 +13626,11 @@ snapshots:
pkg-types: 2.3.0
std-env: 3.10.0
- '@nuxt/scripts@0.13.2(@unhead/vue@2.1.10(vue@3.5.30(typescript@5.9.3)))(@upstash/redis@1.37.0)(db0@0.3.4(better-sqlite3@12.8.0))(ioredis@5.9.2)(magicast@0.5.2)(typescript@5.9.3)(vue@3.5.30(typescript@5.9.3))':
+ '@nuxt/scripts@0.13.2(@unhead/vue@2.1.10(vue@3.5.30(typescript@6.0.2)))(@upstash/redis@1.37.0)(db0@0.3.4(better-sqlite3@12.8.0))(ioredis@5.9.2)(magicast@0.5.2)(typescript@6.0.2)(vue@3.5.30(typescript@6.0.2))':
dependencies:
'@nuxt/kit': 4.3.1(magicast@0.5.2)
- '@unhead/vue': 2.1.10(vue@3.5.30(typescript@5.9.3))
- '@vueuse/core': 14.2.1(vue@3.5.30(typescript@5.9.3))
+ '@unhead/vue': 2.1.10(vue@3.5.30(typescript@6.0.2))
+ '@vueuse/core': 14.2.1(vue@3.5.30(typescript@6.0.2))
consola: 3.4.2
defu: 6.1.4
estree-walker: 3.0.3
@@ -13503,7 +13645,7 @@ snapshots:
ufo: 1.6.3
unplugin: 2.3.11
unstorage: 1.17.4(@upstash/redis@1.37.0)(db0@0.3.4(better-sqlite3@12.8.0))(ioredis@5.9.2)
- valibot: 1.3.0(typescript@5.9.3)
+ valibot: 1.3.0(typescript@6.0.2)
transitivePeerDependencies:
- '@azure/app-configuration'
- '@azure/cosmos'
@@ -13537,7 +13679,7 @@ snapshots:
rc9: 3.0.0
std-env: 3.10.0
- '@nuxt/test-utils@4.0.0(@playwright/test@1.58.2)(@voidzero-dev/vite-plus-test@0.1.12(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(esbuild@0.27.3)(happy-dom@20.3.5)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@1.8.0))(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2))(@vue/test-utils@2.4.6)(happy-dom@20.3.5)(jsdom@27.4.0(@noble/hashes@1.8.0))(magicast@0.5.2)(playwright-core@1.58.2)(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))':
+ '@nuxt/test-utils@4.0.0(@playwright/test@1.58.2)(@voidzero-dev/vite-plus-test@0.1.12(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(esbuild@0.27.3)(happy-dom@20.3.5)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@1.8.0))(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2))(@vue/test-utils@2.4.6)(happy-dom@20.3.5)(jsdom@27.4.0(@noble/hashes@1.8.0))(magicast@0.5.2)(playwright-core@1.58.2)(typescript@6.0.2)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))':
dependencies:
'@clack/prompts': 1.0.0
'@nuxt/devtools-kit': 2.7.0(magicast@0.5.2)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
@@ -13566,43 +13708,43 @@ snapshots:
tinyexec: 1.0.4
ufo: 1.6.3
unplugin: 3.0.0
- vitest-environment-nuxt: 1.0.1(@playwright/test@1.58.2)(@voidzero-dev/vite-plus-test@0.1.12(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(esbuild@0.27.3)(happy-dom@20.3.5)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@1.8.0))(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2))(@vue/test-utils@2.4.6)(happy-dom@20.3.5)(jsdom@27.4.0(@noble/hashes@1.8.0))(magicast@0.5.2)(playwright-core@1.58.2)(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
- vue: 3.5.30(typescript@5.9.3)
+ vitest-environment-nuxt: 1.0.1(@playwright/test@1.58.2)(@voidzero-dev/vite-plus-test@0.1.12(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(esbuild@0.27.3)(happy-dom@20.3.5)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@1.8.0))(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2))(@vue/test-utils@2.4.6)(happy-dom@20.3.5)(jsdom@27.4.0(@noble/hashes@1.8.0))(magicast@0.5.2)(playwright-core@1.58.2)(typescript@6.0.2)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
+ vue: 3.5.30(typescript@6.0.2)
optionalDependencies:
'@playwright/test': 1.58.2
'@vue/test-utils': 2.4.6
happy-dom: 20.3.5
jsdom: 27.4.0(@noble/hashes@1.8.0)
playwright-core: 1.58.2
- vitest: '@voidzero-dev/vite-plus-test@0.1.12(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(esbuild@0.27.3)(happy-dom@20.3.5)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@1.8.0))(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2)'
+ vitest: '@voidzero-dev/vite-plus-test@0.1.12(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(esbuild@0.27.3)(happy-dom@20.3.5)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@1.8.0))(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2)'
transitivePeerDependencies:
- crossws
- magicast
- typescript
- vite
- '@nuxt/ui@4.5.1(@nuxt/content@3.12.0(@valibot/to-json-schema@1.5.0(valibot@1.3.0(typescript@5.9.3)))(better-sqlite3@12.8.0)(magicast@0.5.2)(valibot@1.3.0(typescript@5.9.3)))(@tiptap/extensions@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0))(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29))(@upstash/redis@1.37.0)(db0@0.3.4(better-sqlite3@12.8.0))(embla-carousel@8.6.0)(focus-trap@8.0.0)(ioredis@5.9.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.2)(typescript@5.9.3)(valibot@1.3.0(typescript@5.9.3))(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-router@4.6.4(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3))(yjs@13.6.29)(zod@4.3.6)':
+ '@nuxt/ui@4.5.1(@nuxt/content@3.12.0(@valibot/to-json-schema@1.5.0(valibot@1.3.0(typescript@6.0.2)))(better-sqlite3@12.8.0)(magicast@0.5.2)(valibot@1.3.0(typescript@6.0.2)))(@tiptap/extensions@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0))(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29))(@upstash/redis@1.37.0)(db0@0.3.4(better-sqlite3@12.8.0))(embla-carousel@8.6.0)(focus-trap@8.0.0)(ioredis@5.9.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.2)(typescript@6.0.2)(valibot@1.3.0(typescript@6.0.2))(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-router@4.6.4(vue@3.5.30(typescript@6.0.2)))(vue@3.5.30(typescript@6.0.2))(yjs@13.6.29)(zod@4.3.6)':
dependencies:
'@floating-ui/dom': 1.7.6
- '@iconify/vue': 5.0.0(vue@3.5.30(typescript@5.9.3))
+ '@iconify/vue': 5.0.0(vue@3.5.30(typescript@6.0.2))
'@internationalized/date': 3.11.0
'@internationalized/number': 3.6.5
'@nuxt/fonts': 0.14.0(@upstash/redis@1.37.0)(db0@0.3.4(better-sqlite3@12.8.0))(ioredis@5.9.2)(magicast@0.5.2)(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
- '@nuxt/icon': 2.2.1(magicast@0.5.2)(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3))
+ '@nuxt/icon': 2.2.1(magicast@0.5.2)(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@6.0.2))
'@nuxt/kit': 4.3.1(magicast@0.5.2)
'@nuxt/schema': 4.3.1
'@nuxtjs/color-mode': 3.5.2(magicast@0.5.2)
'@standard-schema/spec': 1.1.0
'@tailwindcss/postcss': 4.2.1
'@tailwindcss/vite': 4.2.1(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
- '@tanstack/vue-table': 8.21.3(vue@3.5.30(typescript@5.9.3))
- '@tanstack/vue-virtual': 3.13.19(vue@3.5.30(typescript@5.9.3))
+ '@tanstack/vue-table': 8.21.3(vue@3.5.30(typescript@6.0.2))
+ '@tanstack/vue-virtual': 3.13.19(vue@3.5.30(typescript@6.0.2))
'@tiptap/core': 3.20.0(@tiptap/pm@3.20.0)
'@tiptap/extension-bubble-menu': 3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)
'@tiptap/extension-code': 3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))
'@tiptap/extension-collaboration': 3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29))(yjs@13.6.29)
'@tiptap/extension-drag-handle': 3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/extension-collaboration@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29))(yjs@13.6.29))(@tiptap/extension-node-range@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29))
- '@tiptap/extension-drag-handle-vue-3': 3.20.0(@tiptap/extension-drag-handle@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/extension-collaboration@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29))(yjs@13.6.29))(@tiptap/extension-node-range@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29)))(@tiptap/pm@3.20.0)(@tiptap/vue-3@3.20.0(@floating-ui/dom@1.7.6)(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3))
+ '@tiptap/extension-drag-handle-vue-3': 3.20.0(@tiptap/extension-drag-handle@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/extension-collaboration@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29))(yjs@13.6.29))(@tiptap/extension-node-range@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29)))(@tiptap/pm@3.20.0)(@tiptap/vue-3@3.20.0(@floating-ui/dom@1.7.6)(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)(vue@3.5.30(typescript@6.0.2)))(vue@3.5.30(typescript@6.0.2))
'@tiptap/extension-floating-menu': 3.20.0(@floating-ui/dom@1.7.6)(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)
'@tiptap/extension-horizontal-rule': 3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)
'@tiptap/extension-image': 3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))
@@ -13613,11 +13755,11 @@ snapshots:
'@tiptap/pm': 3.20.0
'@tiptap/starter-kit': 3.20.0
'@tiptap/suggestion': 3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)
- '@tiptap/vue-3': 3.20.0(@floating-ui/dom@1.7.6)(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)(vue@3.5.30(typescript@5.9.3))
- '@unhead/vue': 2.1.10(vue@3.5.30(typescript@5.9.3))
- '@vueuse/core': 14.2.1(vue@3.5.30(typescript@5.9.3))
- '@vueuse/integrations': 14.2.1(focus-trap@8.0.0)(fuse.js@7.1.0)(vue@3.5.30(typescript@5.9.3))
- '@vueuse/shared': 14.2.1(vue@3.5.30(typescript@5.9.3))
+ '@tiptap/vue-3': 3.20.0(@floating-ui/dom@1.7.6)(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)(vue@3.5.30(typescript@6.0.2))
+ '@unhead/vue': 2.1.10(vue@3.5.30(typescript@6.0.2))
+ '@vueuse/core': 14.2.1(vue@3.5.30(typescript@6.0.2))
+ '@vueuse/integrations': 14.2.1(focus-trap@8.0.0)(fuse.js@7.1.0)(vue@3.5.30(typescript@6.0.2))
+ '@vueuse/shared': 14.2.1(vue@3.5.30(typescript@6.0.2))
colortranslator: 5.0.0
consola: 3.4.2
defu: 6.1.4
@@ -13626,33 +13768,33 @@ snapshots:
embla-carousel-autoplay: 8.6.0(embla-carousel@8.6.0)
embla-carousel-class-names: 8.6.0(embla-carousel@8.6.0)
embla-carousel-fade: 8.6.0(embla-carousel@8.6.0)
- embla-carousel-vue: 8.6.0(vue@3.5.30(typescript@5.9.3))
+ embla-carousel-vue: 8.6.0(vue@3.5.30(typescript@6.0.2))
embla-carousel-wheel-gestures: 8.1.0(embla-carousel@8.6.0)
fuse.js: 7.1.0
hookable: 5.5.3
knitwork: 1.3.0
magic-string: 0.30.21
mlly: 1.8.0
- motion-v: 1.10.3(@vueuse/core@14.2.1(vue@3.5.30(typescript@5.9.3)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vue@3.5.30(typescript@5.9.3))
+ motion-v: 1.10.3(@vueuse/core@14.2.1(vue@3.5.30(typescript@6.0.2)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vue@3.5.30(typescript@6.0.2))
ohash: 2.0.11
pathe: 2.0.3
- reka-ui: 2.8.2(vue@3.5.30(typescript@5.9.3))
+ reka-ui: 2.8.2(vue@3.5.30(typescript@6.0.2))
scule: 1.3.0
tailwind-merge: 3.5.0
tailwind-variants: 3.2.2(tailwind-merge@3.5.0)(tailwindcss@4.2.2)
tailwindcss: 4.2.2
tinyglobby: 0.2.15
- typescript: 5.9.3
+ typescript: 6.0.2
ufo: 1.6.3
unplugin: 3.0.0
- unplugin-auto-import: 21.0.0(@nuxt/kit@4.3.1(magicast@0.5.2))(@vueuse/core@14.2.1(vue@3.5.30(typescript@5.9.3)))
- unplugin-vue-components: 31.0.0(@nuxt/kit@4.3.1(magicast@0.5.2))(vue@3.5.30(typescript@5.9.3))
- vaul-vue: 0.4.1(reka-ui@2.8.2(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3))
+ unplugin-auto-import: 21.0.0(@nuxt/kit@4.3.1(magicast@0.5.2))(@vueuse/core@14.2.1(vue@3.5.30(typescript@6.0.2)))
+ unplugin-vue-components: 31.0.0(@nuxt/kit@4.3.1(magicast@0.5.2))(vue@3.5.30(typescript@6.0.2))
+ vaul-vue: 0.4.1(reka-ui@2.8.2(vue@3.5.30(typescript@6.0.2)))(vue@3.5.30(typescript@6.0.2))
vue-component-type-helpers: 3.2.6
optionalDependencies:
- '@nuxt/content': 3.12.0(@valibot/to-json-schema@1.5.0(valibot@1.3.0(typescript@5.9.3)))(better-sqlite3@12.8.0)(magicast@0.5.2)(valibot@1.3.0(typescript@5.9.3))
- valibot: 1.3.0(typescript@5.9.3)
- vue-router: 4.6.4(vue@3.5.30(typescript@5.9.3))
+ '@nuxt/content': 3.12.0(@valibot/to-json-schema@1.5.0(valibot@1.3.0(typescript@6.0.2)))(better-sqlite3@12.8.0)(magicast@0.5.2)(valibot@1.3.0(typescript@6.0.2))
+ valibot: 1.3.0(typescript@6.0.2)
+ vue-router: 4.6.4(vue@3.5.30(typescript@6.0.2))
zod: 4.3.6
transitivePeerDependencies:
- '@azure/app-configuration'
@@ -13696,12 +13838,12 @@ snapshots:
- vue
- yjs
- '@nuxt/vite-builder@3.21.1(@types/node@24.12.0)(eslint@9.39.2(jiti@2.6.1))(magicast@0.5.2)(nuxt@4.3.1(@parcel/watcher@2.5.4)(@types/node@24.12.0)(@upstash/redis@1.37.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(yaml@2.8.2))(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vue-tsc@3.2.6(typescript@5.9.3))(vue@3.5.30(typescript@5.9.3))(yaml@2.8.2)':
+ '@nuxt/vite-builder@3.21.1(@types/node@24.12.0)(eslint@9.39.2(jiti@2.6.1))(magicast@0.5.2)(nuxt@4.3.1(@parcel/watcher@2.5.4)(@types/node@24.12.0)(@upstash/redis@1.37.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.2))(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vue-tsc@3.2.6(typescript@6.0.2))(vue@3.5.30(typescript@6.0.2))(yaml@2.8.2)':
dependencies:
'@nuxt/kit': 3.21.1(magicast@0.5.2)
'@rollup/plugin-replace': 6.0.3(rollup@4.56.0)
- '@vitejs/plugin-vue': 6.0.4(@voidzero-dev/vite-plus-core@0.1.12(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3))
- '@vitejs/plugin-vue-jsx': 5.1.4(@voidzero-dev/vite-plus-core@0.1.12(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3))
+ '@vitejs/plugin-vue': 6.0.4(@voidzero-dev/vite-plus-core@0.1.12(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.2))(vue@3.5.30(typescript@6.0.2))
+ '@vitejs/plugin-vue-jsx': 5.1.4(@voidzero-dev/vite-plus-core@0.1.12(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.2))(vue@3.5.30(typescript@6.0.2))
autoprefixer: 10.4.27(postcss@8.5.8)
consola: 3.4.2
cssnano: 7.1.2(postcss@8.5.8)
@@ -13716,7 +13858,7 @@ snapshots:
magic-string: 0.30.21
mlly: 1.8.0
mocked-exports: 0.1.1
- nuxt: 4.3.1(@parcel/watcher@2.5.4)(@types/node@24.12.0)(@upstash/redis@1.37.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(yaml@2.8.2)
+ nuxt: 4.3.1(@parcel/watcher@2.5.4)(@types/node@24.12.0)(@upstash/redis@1.37.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.2)
ohash: 2.0.11
pathe: 2.0.3
perfect-debounce: 2.1.0
@@ -13727,10 +13869,10 @@ snapshots:
std-env: 3.10.0
ufo: 1.6.3
unenv: 2.0.0-rc.24
- vite: '@voidzero-dev/vite-plus-core@0.1.12(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)'
- vite-node: 5.3.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)
- vite-plugin-checker: 0.12.0(@voidzero-dev/vite-plus-core@0.1.12(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2))(eslint@9.39.2(jiti@2.6.1))(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(typescript@5.9.3)(vue-tsc@3.2.6(typescript@5.9.3))
- vue: 3.5.30(typescript@5.9.3)
+ vite: '@voidzero-dev/vite-plus-core@0.1.12(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.2)'
+ vite-node: 5.3.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.2)
+ vite-plugin-checker: 0.12.0(@voidzero-dev/vite-plus-core@0.1.12(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.2))(eslint@9.39.2(jiti@2.6.1))(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(typescript@6.0.2)(vue-tsc@3.2.6(typescript@6.0.2))
+ vue: 3.5.30(typescript@6.0.2)
vue-bundle-renderer: 2.2.0
optionalDependencies:
rolldown: 1.0.0-rc.9
@@ -13764,12 +13906,12 @@ snapshots:
- vue-tsc
- yaml
- '@nuxt/vite-builder@4.3.1(@types/node@24.12.0)(eslint@9.39.2(jiti@2.6.1))(magicast@0.5.2)(nuxt@4.3.1(@parcel/watcher@2.5.4)(@types/node@24.12.0)(@upstash/redis@1.37.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(yaml@2.8.2))(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vue-tsc@3.2.6(typescript@5.9.3))(vue@3.5.30(typescript@5.9.3))(yaml@2.8.2)':
+ '@nuxt/vite-builder@4.3.1(@types/node@24.12.0)(eslint@9.39.2(jiti@2.6.1))(magicast@0.5.2)(nuxt@4.3.1(@parcel/watcher@2.5.4)(@types/node@24.12.0)(@upstash/redis@1.37.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.2))(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vue-tsc@3.2.6(typescript@6.0.2))(vue@3.5.30(typescript@6.0.2))(yaml@2.8.2)':
dependencies:
'@nuxt/kit': 4.3.1(magicast@0.5.2)
'@rollup/plugin-replace': 6.0.3(rollup@4.56.0)
- '@vitejs/plugin-vue': 6.0.4(@voidzero-dev/vite-plus-core@0.1.12(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3))
- '@vitejs/plugin-vue-jsx': 5.1.4(@voidzero-dev/vite-plus-core@0.1.12(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3))
+ '@vitejs/plugin-vue': 6.0.4(@voidzero-dev/vite-plus-core@0.1.12(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.2))(vue@3.5.30(typescript@6.0.2))
+ '@vitejs/plugin-vue-jsx': 5.1.4(@voidzero-dev/vite-plus-core@0.1.12(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.2))(vue@3.5.30(typescript@6.0.2))
autoprefixer: 10.4.27(postcss@8.5.8)
consola: 3.4.2
cssnano: 7.1.2(postcss@8.5.8)
@@ -13783,7 +13925,7 @@ snapshots:
magic-string: 0.30.21
mlly: 1.8.0
mocked-exports: 0.1.1
- nuxt: 4.3.1(@parcel/watcher@2.5.4)(@types/node@24.12.0)(@upstash/redis@1.37.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(yaml@2.8.2)
+ nuxt: 4.3.1(@parcel/watcher@2.5.4)(@types/node@24.12.0)(@upstash/redis@1.37.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.2)
pathe: 2.0.3
pkg-types: 2.3.0
postcss: 8.5.8
@@ -13792,10 +13934,10 @@ snapshots:
std-env: 3.10.0
ufo: 1.6.3
unenv: 2.0.0-rc.24
- vite: '@voidzero-dev/vite-plus-core@0.1.12(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)'
- vite-node: 5.3.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)
- vite-plugin-checker: 0.12.0(@voidzero-dev/vite-plus-core@0.1.12(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2))(eslint@9.39.2(jiti@2.6.1))(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(typescript@5.9.3)(vue-tsc@3.2.6(typescript@5.9.3))
- vue: 3.5.30(typescript@5.9.3)
+ vite: '@voidzero-dev/vite-plus-core@0.1.12(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.2)'
+ vite-node: 5.3.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.2)
+ vite-plugin-checker: 0.12.0(@voidzero-dev/vite-plus-core@0.1.12(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.2))(eslint@9.39.2(jiti@2.6.1))(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(typescript@6.0.2)(vue-tsc@3.2.6(typescript@6.0.2))
+ vue: 3.5.30(typescript@6.0.2)
vue-bundle-renderer: 2.2.0
optionalDependencies:
rolldown: 1.0.0-rc.9
@@ -13829,12 +13971,12 @@ snapshots:
- vue-tsc
- yaml
- '@nuxt/vite-builder@4.3.1(@types/node@25.0.10)(eslint@9.39.2(jiti@2.6.1))(magicast@0.5.2)(nuxt@4.3.1(@parcel/watcher@2.5.4)(@types/node@25.0.10)(@upstash/redis@1.37.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(yaml@2.8.2))(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vue-tsc@3.2.6(typescript@5.9.3))(vue@3.5.30(typescript@5.9.3))(yaml@2.8.2)':
+ '@nuxt/vite-builder@4.3.1(@types/node@25.0.10)(eslint@9.39.2(jiti@2.6.1))(magicast@0.5.2)(nuxt@4.3.1(@parcel/watcher@2.5.4)(@types/node@25.0.10)(@upstash/redis@1.37.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.2))(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vue-tsc@3.2.6(typescript@6.0.2))(vue@3.5.30(typescript@6.0.2))(yaml@2.8.2)':
dependencies:
'@nuxt/kit': 4.3.1(magicast@0.5.2)
'@rollup/plugin-replace': 6.0.3(rollup@4.56.0)
- '@vitejs/plugin-vue': 6.0.4(@voidzero-dev/vite-plus-core@0.1.12(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3))
- '@vitejs/plugin-vue-jsx': 5.1.4(@voidzero-dev/vite-plus-core@0.1.12(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3))
+ '@vitejs/plugin-vue': 6.0.4(@voidzero-dev/vite-plus-core@0.1.12(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.2))(vue@3.5.30(typescript@6.0.2))
+ '@vitejs/plugin-vue-jsx': 5.1.4(@voidzero-dev/vite-plus-core@0.1.12(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.2))(vue@3.5.30(typescript@6.0.2))
autoprefixer: 10.4.27(postcss@8.5.8)
consola: 3.4.2
cssnano: 7.1.2(postcss@8.5.8)
@@ -13848,7 +13990,7 @@ snapshots:
magic-string: 0.30.21
mlly: 1.8.0
mocked-exports: 0.1.1
- nuxt: 4.3.1(@parcel/watcher@2.5.4)(@types/node@25.0.10)(@upstash/redis@1.37.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(yaml@2.8.2)
+ nuxt: 4.3.1(@parcel/watcher@2.5.4)(@types/node@25.0.10)(@upstash/redis@1.37.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.2)
pathe: 2.0.3
pkg-types: 2.3.0
postcss: 8.5.8
@@ -13857,10 +13999,10 @@ snapshots:
std-env: 3.10.0
ufo: 1.6.3
unenv: 2.0.0-rc.24
- vite: '@voidzero-dev/vite-plus-core@0.1.12(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)'
- vite-node: 5.3.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)
- vite-plugin-checker: 0.12.0(@voidzero-dev/vite-plus-core@0.1.12(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2))(eslint@9.39.2(jiti@2.6.1))(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(typescript@5.9.3)(vue-tsc@3.2.6(typescript@5.9.3))
- vue: 3.5.30(typescript@5.9.3)
+ vite: '@voidzero-dev/vite-plus-core@0.1.12(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.2)'
+ vite-node: 5.3.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.2)
+ vite-plugin-checker: 0.12.0(@voidzero-dev/vite-plus-core@0.1.12(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.2))(eslint@9.39.2(jiti@2.6.1))(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(typescript@6.0.2)(vue-tsc@3.2.6(typescript@6.0.2))
+ vue: 3.5.30(typescript@6.0.2)
vue-bundle-renderer: 2.2.0
optionalDependencies:
rolldown: 1.0.0-rc.9
@@ -13913,11 +14055,11 @@ snapshots:
transitivePeerDependencies:
- magicast
- '@nuxtjs/html-validator@2.1.0(@voidzero-dev/vite-plus-test@0.1.12(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(esbuild@0.27.3)(happy-dom@20.3.5)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@1.8.0))(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2))(magicast@0.5.2)':
+ '@nuxtjs/html-validator@2.1.0(@voidzero-dev/vite-plus-test@0.1.12(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(esbuild@0.27.3)(happy-dom@20.3.5)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@1.8.0))(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2))(magicast@0.5.2)':
dependencies:
'@nuxt/kit': 3.21.1(magicast@0.5.2)
consola: 3.4.2
- html-validate: 9.4.2(@voidzero-dev/vite-plus-test@0.1.12(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(esbuild@0.27.3)(happy-dom@20.3.5)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@1.8.0))(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2))
+ html-validate: 9.4.2(@voidzero-dev/vite-plus-test@0.1.12(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(esbuild@0.27.3)(happy-dom@20.3.5)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@1.8.0))(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2))
knitwork: 1.3.0
pathe: 2.0.3
prettier: 3.8.1
@@ -13929,12 +14071,12 @@ snapshots:
- magicast
- vitest
- '@nuxtjs/i18n@10.2.3(@upstash/redis@1.37.0)(@vue/compiler-dom@3.5.30)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(rollup@4.56.0)(vue@3.5.30(typescript@5.9.3))':
+ '@nuxtjs/i18n@10.2.3(@upstash/redis@1.37.0)(@vue/compiler-dom@3.5.30)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(rollup@4.56.0)(vue@3.5.30(typescript@6.0.2))':
dependencies:
'@intlify/core': 11.2.8
'@intlify/h3': 0.7.4
'@intlify/shared': 11.3.0
- '@intlify/unplugin-vue-i18n': 11.0.7(@vue/compiler-dom@3.5.30)(eslint@9.39.2(jiti@2.6.1))(rollup@4.56.0)(typescript@5.9.3)(vue-i18n@11.2.8(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3))
+ '@intlify/unplugin-vue-i18n': 11.0.7(@vue/compiler-dom@3.5.30)(eslint@9.39.2(jiti@2.6.1))(rollup@4.56.0)(typescript@5.9.3)(vue-i18n@11.2.8(vue@3.5.30(typescript@6.0.2)))(vue@3.5.30(typescript@6.0.2))
'@intlify/utils': 0.13.0
'@miyaneee/rollup-plugin-json5': 1.2.0(rollup@4.56.0)
'@nuxt/kit': 4.3.1(magicast@0.5.2)
@@ -13955,10 +14097,10 @@ snapshots:
typescript: 5.9.3
ufo: 1.6.3
unplugin: 2.3.11
- unplugin-vue-router: 0.16.2(@vue/compiler-sfc@3.5.30)(vue-router@4.6.4(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3))
+ unplugin-vue-router: 0.16.2(@vue/compiler-sfc@3.5.30)(vue-router@4.6.4(vue@3.5.30(typescript@6.0.2)))(vue@3.5.30(typescript@6.0.2))
unstorage: 1.17.4(@upstash/redis@1.37.0)(db0@0.3.4(better-sqlite3@12.8.0))(ioredis@5.9.2)
- vue-i18n: 11.2.8(vue@3.5.30(typescript@5.9.3))
- vue-router: 4.6.4(vue@3.5.30(typescript@5.9.3))
+ vue-i18n: 11.2.8(vue@3.5.30(typescript@6.0.2))
+ vue-router: 4.6.4(vue@3.5.30(typescript@6.0.2))
transitivePeerDependencies:
- '@azure/app-configuration'
- '@azure/cosmos'
@@ -14052,7 +14194,7 @@ snapshots:
- magicast
- supports-color
- '@nuxtjs/robots@5.7.1(magicast@0.5.2)(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3))(zod@4.3.6)':
+ '@nuxtjs/robots@5.7.1(magicast@0.5.2)(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@6.0.2))(zod@4.3.6)':
dependencies:
'@fingerprintjs/botd': 2.0.0
'@nuxt/devtools-kit': 3.2.2(magicast@0.5.2)(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
@@ -14060,7 +14202,7 @@ snapshots:
consola: 3.4.2
defu: 6.1.4
h3: 1.15.8
- nuxt-site-config: 3.2.21(magicast@0.5.2)(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3))
+ nuxt-site-config: 3.2.21(magicast@0.5.2)(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@6.0.2))
pathe: 2.0.3
pkg-types: 2.3.0
sirv: 3.0.2
@@ -14145,12 +14287,18 @@ snapshots:
'@oxc-parser/binding-android-arm-eabi@0.115.0':
optional: true
+ '@oxc-parser/binding-android-arm-eabi@0.120.0':
+ optional: true
+
'@oxc-parser/binding-android-arm64@0.112.0':
optional: true
'@oxc-parser/binding-android-arm64@0.115.0':
optional: true
+ '@oxc-parser/binding-android-arm64@0.120.0':
+ optional: true
+
'@oxc-parser/binding-android-arm64@0.95.0':
optional: true
@@ -14160,6 +14308,9 @@ snapshots:
'@oxc-parser/binding-darwin-arm64@0.115.0':
optional: true
+ '@oxc-parser/binding-darwin-arm64@0.120.0':
+ optional: true
+
'@oxc-parser/binding-darwin-arm64@0.95.0':
optional: true
@@ -14169,6 +14320,9 @@ snapshots:
'@oxc-parser/binding-darwin-x64@0.115.0':
optional: true
+ '@oxc-parser/binding-darwin-x64@0.120.0':
+ optional: true
+
'@oxc-parser/binding-darwin-x64@0.95.0':
optional: true
@@ -14178,6 +14332,9 @@ snapshots:
'@oxc-parser/binding-freebsd-x64@0.115.0':
optional: true
+ '@oxc-parser/binding-freebsd-x64@0.120.0':
+ optional: true
+
'@oxc-parser/binding-freebsd-x64@0.95.0':
optional: true
@@ -14187,6 +14344,9 @@ snapshots:
'@oxc-parser/binding-linux-arm-gnueabihf@0.115.0':
optional: true
+ '@oxc-parser/binding-linux-arm-gnueabihf@0.120.0':
+ optional: true
+
'@oxc-parser/binding-linux-arm-gnueabihf@0.95.0':
optional: true
@@ -14196,6 +14356,9 @@ snapshots:
'@oxc-parser/binding-linux-arm-musleabihf@0.115.0':
optional: true
+ '@oxc-parser/binding-linux-arm-musleabihf@0.120.0':
+ optional: true
+
'@oxc-parser/binding-linux-arm-musleabihf@0.95.0':
optional: true
@@ -14205,6 +14368,9 @@ snapshots:
'@oxc-parser/binding-linux-arm64-gnu@0.115.0':
optional: true
+ '@oxc-parser/binding-linux-arm64-gnu@0.120.0':
+ optional: true
+
'@oxc-parser/binding-linux-arm64-gnu@0.95.0':
optional: true
@@ -14214,6 +14380,9 @@ snapshots:
'@oxc-parser/binding-linux-arm64-musl@0.115.0':
optional: true
+ '@oxc-parser/binding-linux-arm64-musl@0.120.0':
+ optional: true
+
'@oxc-parser/binding-linux-arm64-musl@0.95.0':
optional: true
@@ -14223,12 +14392,18 @@ snapshots:
'@oxc-parser/binding-linux-ppc64-gnu@0.115.0':
optional: true
+ '@oxc-parser/binding-linux-ppc64-gnu@0.120.0':
+ optional: true
+
'@oxc-parser/binding-linux-riscv64-gnu@0.112.0':
optional: true
'@oxc-parser/binding-linux-riscv64-gnu@0.115.0':
optional: true
+ '@oxc-parser/binding-linux-riscv64-gnu@0.120.0':
+ optional: true
+
'@oxc-parser/binding-linux-riscv64-gnu@0.95.0':
optional: true
@@ -14238,12 +14413,18 @@ snapshots:
'@oxc-parser/binding-linux-riscv64-musl@0.115.0':
optional: true
+ '@oxc-parser/binding-linux-riscv64-musl@0.120.0':
+ optional: true
+
'@oxc-parser/binding-linux-s390x-gnu@0.112.0':
optional: true
'@oxc-parser/binding-linux-s390x-gnu@0.115.0':
optional: true
+ '@oxc-parser/binding-linux-s390x-gnu@0.120.0':
+ optional: true
+
'@oxc-parser/binding-linux-s390x-gnu@0.95.0':
optional: true
@@ -14253,6 +14434,9 @@ snapshots:
'@oxc-parser/binding-linux-x64-gnu@0.115.0':
optional: true
+ '@oxc-parser/binding-linux-x64-gnu@0.120.0':
+ optional: true
+
'@oxc-parser/binding-linux-x64-gnu@0.95.0':
optional: true
@@ -14262,6 +14446,9 @@ snapshots:
'@oxc-parser/binding-linux-x64-musl@0.115.0':
optional: true
+ '@oxc-parser/binding-linux-x64-musl@0.120.0':
+ optional: true
+
'@oxc-parser/binding-linux-x64-musl@0.95.0':
optional: true
@@ -14271,6 +14458,9 @@ snapshots:
'@oxc-parser/binding-openharmony-arm64@0.115.0':
optional: true
+ '@oxc-parser/binding-openharmony-arm64@0.120.0':
+ optional: true
+
'@oxc-parser/binding-wasm32-wasi@0.112.0':
dependencies:
'@napi-rs/wasm-runtime': 1.1.1
@@ -14281,6 +14471,11 @@ snapshots:
'@napi-rs/wasm-runtime': 1.1.1
optional: true
+ '@oxc-parser/binding-wasm32-wasi@0.120.0':
+ dependencies:
+ '@napi-rs/wasm-runtime': 1.1.1
+ optional: true
+
'@oxc-parser/binding-wasm32-wasi@0.95.0':
dependencies:
'@napi-rs/wasm-runtime': 1.1.1
@@ -14292,6 +14487,9 @@ snapshots:
'@oxc-parser/binding-win32-arm64-msvc@0.115.0':
optional: true
+ '@oxc-parser/binding-win32-arm64-msvc@0.120.0':
+ optional: true
+
'@oxc-parser/binding-win32-arm64-msvc@0.95.0':
optional: true
@@ -14301,12 +14499,18 @@ snapshots:
'@oxc-parser/binding-win32-ia32-msvc@0.115.0':
optional: true
+ '@oxc-parser/binding-win32-ia32-msvc@0.120.0':
+ optional: true
+
'@oxc-parser/binding-win32-x64-msvc@0.112.0':
optional: true
'@oxc-parser/binding-win32-x64-msvc@0.115.0':
optional: true
+ '@oxc-parser/binding-win32-x64-msvc@0.120.0':
+ optional: true
+
'@oxc-parser/binding-win32-x64-msvc@0.95.0':
optional: true
@@ -14316,6 +14520,8 @@ snapshots:
'@oxc-project/types@0.115.0': {}
+ '@oxc-project/types@0.120.0': {}
+
'@oxc-project/types@0.95.0': {}
'@oxc-resolver/binding-android-arm-eabi@11.19.1':
@@ -15175,25 +15381,25 @@ snapshots:
'@standard-schema/spec@1.1.0': {}
- '@storybook-vue/nuxt@9.0.1(a948b6c1ae52494bf7069975102ca784)':
+ '@storybook-vue/nuxt@9.0.1(112edfd7bc85515f9be9dfb242ca54c2)':
dependencies:
'@nuxt/kit': 3.21.1(magicast@0.5.2)
'@nuxt/schema': 3.21.1
- '@nuxt/vite-builder': 3.21.1(@types/node@24.12.0)(eslint@9.39.2(jiti@2.6.1))(magicast@0.5.2)(nuxt@4.3.1(@parcel/watcher@2.5.4)(@types/node@24.12.0)(@upstash/redis@1.37.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(yaml@2.8.2))(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vue-tsc@3.2.6(typescript@5.9.3))(vue@3.5.30(typescript@5.9.3))(yaml@2.8.2)
+ '@nuxt/vite-builder': 3.21.1(@types/node@24.12.0)(eslint@9.39.2(jiti@2.6.1))(magicast@0.5.2)(nuxt@4.3.1(@parcel/watcher@2.5.4)(@types/node@24.12.0)(@upstash/redis@1.37.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.2))(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vue-tsc@3.2.6(typescript@6.0.2))(vue@3.5.30(typescript@6.0.2))(yaml@2.8.2)
'@rollup/plugin-replace': 6.0.3(rollup@4.56.0)
'@storybook/builder-vite': 9.1.2(storybook@10.3.1(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
- '@storybook/vue3': 9.1.2(storybook@10.3.1(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vue@3.5.30(typescript@5.9.3))
- '@storybook/vue3-vite': 9.1.2(storybook@10.3.1(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3))
+ '@storybook/vue3': 9.1.2(storybook@10.3.1(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vue@3.5.30(typescript@6.0.2))
+ '@storybook/vue3-vite': 9.1.2(storybook@10.3.1(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@6.0.2))
json-stable-stringify: 1.3.0
mlly: 1.8.0
- nuxt: 4.3.1(@parcel/watcher@2.5.4)(@types/node@24.12.0)(@upstash/redis@1.37.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(yaml@2.8.2)
+ nuxt: 4.3.1(@parcel/watcher@2.5.4)(@types/node@24.12.0)(@upstash/redis@1.37.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.2)
ofetch: 1.5.1
pathe: 2.0.3
storybook: 10.3.1(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
unctx: 2.5.0
vite: 8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)
- vue: 3.5.30(typescript@5.9.3)
- vue-router: 4.6.4(vue@3.5.30(typescript@5.9.3))
+ vue: 3.5.30(typescript@6.0.2)
+ vue-router: 4.6.4(vue@3.5.30(typescript@6.0.2))
transitivePeerDependencies:
- '@arethetypeswrong/core'
- '@biomejs/biome'
@@ -15288,26 +15494,26 @@ snapshots:
react-dom: 19.2.4(react@19.2.4)
storybook: 10.3.1(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@storybook/vue3-vite@9.1.2(storybook@10.3.1(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3))':
+ '@storybook/vue3-vite@9.1.2(storybook@10.3.1(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@6.0.2))':
dependencies:
'@storybook/builder-vite': 9.1.2(storybook@10.3.1(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
- '@storybook/vue3': 9.1.2(storybook@10.3.1(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vue@3.5.30(typescript@5.9.3))
+ '@storybook/vue3': 9.1.2(storybook@10.3.1(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vue@3.5.30(typescript@6.0.2))
find-package-json: 1.2.0
magic-string: 0.30.21
storybook: 10.3.1(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
typescript: 5.9.3
vite: 8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)
vue-component-meta: 2.2.12(typescript@5.9.3)
- vue-docgen-api: 4.79.2(vue@3.5.30(typescript@5.9.3))
+ vue-docgen-api: 4.79.2(vue@3.5.30(typescript@6.0.2))
transitivePeerDependencies:
- vue
- '@storybook/vue3@9.1.2(storybook@10.3.1(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vue@3.5.30(typescript@5.9.3))':
+ '@storybook/vue3@9.1.2(storybook@10.3.1(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vue@3.5.30(typescript@6.0.2))':
dependencies:
'@storybook/global': 5.0.0
storybook: 10.3.1(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
type-fest: 2.19.0
- vue: 3.5.30(typescript@5.9.3)
+ vue: 3.5.30(typescript@6.0.2)
vue-component-type-helpers: 3.2.6
'@surma/rollup-plugin-off-main-thread@2.2.3':
@@ -15401,15 +15607,15 @@ snapshots:
'@tanstack/virtual-core@3.13.19': {}
- '@tanstack/vue-table@8.21.3(vue@3.5.30(typescript@5.9.3))':
+ '@tanstack/vue-table@8.21.3(vue@3.5.30(typescript@6.0.2))':
dependencies:
'@tanstack/table-core': 8.21.3
- vue: 3.5.30(typescript@5.9.3)
+ vue: 3.5.30(typescript@6.0.2)
- '@tanstack/vue-virtual@3.13.19(vue@3.5.30(typescript@5.9.3))':
+ '@tanstack/vue-virtual@3.13.19(vue@3.5.30(typescript@6.0.2))':
dependencies:
'@tanstack/virtual-core': 3.13.19
- vue: 3.5.30(typescript@5.9.3)
+ vue: 3.5.30(typescript@6.0.2)
'@testing-library/dom@10.4.1':
dependencies:
@@ -15477,12 +15683,12 @@ snapshots:
dependencies:
'@tiptap/core': 3.20.0(@tiptap/pm@3.20.0)
- '@tiptap/extension-drag-handle-vue-3@3.20.0(@tiptap/extension-drag-handle@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/extension-collaboration@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29))(yjs@13.6.29))(@tiptap/extension-node-range@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29)))(@tiptap/pm@3.20.0)(@tiptap/vue-3@3.20.0(@floating-ui/dom@1.7.6)(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3))':
+ '@tiptap/extension-drag-handle-vue-3@3.20.0(@tiptap/extension-drag-handle@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/extension-collaboration@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29))(yjs@13.6.29))(@tiptap/extension-node-range@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29)))(@tiptap/pm@3.20.0)(@tiptap/vue-3@3.20.0(@floating-ui/dom@1.7.6)(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)(vue@3.5.30(typescript@6.0.2)))(vue@3.5.30(typescript@6.0.2))':
dependencies:
'@tiptap/extension-drag-handle': 3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/extension-collaboration@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29))(yjs@13.6.29))(@tiptap/extension-node-range@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29))
'@tiptap/pm': 3.20.0
- '@tiptap/vue-3': 3.20.0(@floating-ui/dom@1.7.6)(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)(vue@3.5.30(typescript@5.9.3))
- vue: 3.5.30(typescript@5.9.3)
+ '@tiptap/vue-3': 3.20.0(@floating-ui/dom@1.7.6)(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)(vue@3.5.30(typescript@6.0.2))
+ vue: 3.5.30(typescript@6.0.2)
'@tiptap/extension-drag-handle@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/extension-collaboration@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29))(yjs@13.6.29))(@tiptap/extension-node-range@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29))':
dependencies:
@@ -15646,12 +15852,12 @@ snapshots:
'@tiptap/core': 3.20.0(@tiptap/pm@3.20.0)
'@tiptap/pm': 3.20.0
- '@tiptap/vue-3@3.20.0(@floating-ui/dom@1.7.6)(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)(vue@3.5.30(typescript@5.9.3))':
+ '@tiptap/vue-3@3.20.0(@floating-ui/dom@1.7.6)(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)(vue@3.5.30(typescript@6.0.2))':
dependencies:
'@floating-ui/dom': 1.7.6
'@tiptap/core': 3.20.0(@tiptap/pm@3.20.0)
'@tiptap/pm': 3.20.0
- vue: 3.5.30(typescript@5.9.3)
+ vue: 3.5.30(typescript@6.0.2)
optionalDependencies:
'@tiptap/extension-bubble-menu': 3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)
'@tiptap/extension-floating-menu': 3.20.0(@floating-ui/dom@1.7.6)(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)
@@ -15821,11 +16027,11 @@ snapshots:
'@ungap/structured-clone@1.3.0': {}
- '@unhead/vue@2.1.10(vue@3.5.30(typescript@5.9.3))':
+ '@unhead/vue@2.1.10(vue@3.5.30(typescript@6.0.2))':
dependencies:
hookable: 6.1.0
unhead: 2.1.10
- vue: 3.5.30(typescript@5.9.3)
+ vue: 3.5.30(typescript@6.0.2)
'@unocss/cli@66.6.7':
dependencies:
@@ -15999,9 +16205,9 @@ snapshots:
dependencies:
uncrypto: 0.1.3
- '@valibot/to-json-schema@1.5.0(valibot@1.3.0(typescript@5.9.3))':
+ '@valibot/to-json-schema@1.5.0(valibot@1.3.0(typescript@6.0.2))':
dependencies:
- valibot: 1.3.0(typescript@5.9.3)
+ valibot: 1.3.0(typescript@6.0.2)
optional: true
'@vercel/nft@1.3.0(encoding@0.1.13)(rollup@4.56.0)':
@@ -16049,46 +16255,46 @@ snapshots:
- workbox-build
- workbox-window
- '@vitejs/plugin-vue-jsx@5.1.4(@voidzero-dev/vite-plus-core@0.1.12(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3))':
+ '@vitejs/plugin-vue-jsx@5.1.4(@voidzero-dev/vite-plus-core@0.1.12(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.2))(vue@3.5.30(typescript@6.0.2))':
dependencies:
'@babel/core': 7.29.0
'@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0)
'@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.0)
'@rolldown/pluginutils': 1.0.0-rc.9
'@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.29.0)
- vite: '@voidzero-dev/vite-plus-core@0.1.12(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)'
- vue: 3.5.30(typescript@5.9.3)
+ vite: '@voidzero-dev/vite-plus-core@0.1.12(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.2)'
+ vue: 3.5.30(typescript@6.0.2)
transitivePeerDependencies:
- supports-color
- '@vitejs/plugin-vue-jsx@5.1.4(@voidzero-dev/vite-plus-core@0.1.12(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3))':
+ '@vitejs/plugin-vue-jsx@5.1.4(@voidzero-dev/vite-plus-core@0.1.12(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.2))(vue@3.5.30(typescript@6.0.2))':
dependencies:
'@babel/core': 7.29.0
'@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0)
'@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.0)
'@rolldown/pluginutils': 1.0.0-rc.9
'@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.29.0)
- vite: '@voidzero-dev/vite-plus-core@0.1.12(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)'
- vue: 3.5.30(typescript@5.9.3)
+ vite: '@voidzero-dev/vite-plus-core@0.1.12(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.2)'
+ vue: 3.5.30(typescript@6.0.2)
transitivePeerDependencies:
- supports-color
- '@vitejs/plugin-vue@6.0.4(@voidzero-dev/vite-plus-core@0.1.12(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3))':
+ '@vitejs/plugin-vue@6.0.4(@voidzero-dev/vite-plus-core@0.1.12(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.2))(vue@3.5.30(typescript@6.0.2))':
dependencies:
'@rolldown/pluginutils': 1.0.0-rc.2
- vite: '@voidzero-dev/vite-plus-core@0.1.12(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)'
- vue: 3.5.30(typescript@5.9.3)
+ vite: '@voidzero-dev/vite-plus-core@0.1.12(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.2)'
+ vue: 3.5.30(typescript@6.0.2)
- '@vitejs/plugin-vue@6.0.4(@voidzero-dev/vite-plus-core@0.1.12(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3))':
+ '@vitejs/plugin-vue@6.0.4(@voidzero-dev/vite-plus-core@0.1.12(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.2))(vue@3.5.30(typescript@6.0.2))':
dependencies:
'@rolldown/pluginutils': 1.0.0-rc.2
- vite: '@voidzero-dev/vite-plus-core@0.1.12(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)'
- vue: 3.5.30(typescript@5.9.3)
+ vite: '@voidzero-dev/vite-plus-core@0.1.12(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.2)'
+ vue: 3.5.30(typescript@6.0.2)
- '@vitest/coverage-v8@4.1.0(@voidzero-dev/vite-plus-test@0.1.12(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(esbuild@0.27.3)(happy-dom@20.3.5)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@1.8.0))(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2))':
+ '@vitest/coverage-v8@4.1.1(@voidzero-dev/vite-plus-test@0.1.12(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(esbuild@0.27.3)(happy-dom@20.3.5)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@1.8.0))(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2))':
dependencies:
'@bcoe/v8-coverage': 1.0.2
- '@vitest/utils': 4.1.0
+ '@vitest/utils': 4.1.1
ast-v8-to-istanbul: 1.0.0
istanbul-lib-coverage: 3.2.2
istanbul-lib-report: 3.0.1
@@ -16097,7 +16303,7 @@ snapshots:
obug: 2.1.1
std-env: 4.0.0
tinyrainbow: 3.1.0
- vitest: '@voidzero-dev/vite-plus-test@0.1.12(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(esbuild@0.27.3)(happy-dom@20.3.5)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@1.8.0))(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2)'
+ vitest: '@voidzero-dev/vite-plus-test@0.1.12(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(esbuild@0.27.3)(happy-dom@20.3.5)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@1.8.0))(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2)'
'@vitest/expect@3.2.4':
dependencies:
@@ -16111,7 +16317,7 @@ snapshots:
dependencies:
tinyrainbow: 2.0.0
- '@vitest/pretty-format@4.1.0':
+ '@vitest/pretty-format@4.1.1':
dependencies:
tinyrainbow: 3.1.0
@@ -16125,13 +16331,13 @@ snapshots:
loupe: 3.2.1
tinyrainbow: 2.0.0
- '@vitest/utils@4.1.0':
+ '@vitest/utils@4.1.1':
dependencies:
- '@vitest/pretty-format': 4.1.0
+ '@vitest/pretty-format': 4.1.1
convert-source-map: 2.0.0
tinyrainbow: 3.1.0
- '@voidzero-dev/vite-plus-core@0.1.12(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)':
+ '@voidzero-dev/vite-plus-core@0.1.12(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.2)':
dependencies:
'@oxc-project/runtime': 0.115.0
'@oxc-project/types': 0.115.0
@@ -16144,10 +16350,10 @@ snapshots:
jiti: 2.6.1
terser: 5.46.1
tsx: 4.21.0
- typescript: 5.9.3
+ typescript: 6.0.2
yaml: 2.8.2
- '@voidzero-dev/vite-plus-core@0.1.12(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)':
+ '@voidzero-dev/vite-plus-core@0.1.12(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.2)':
dependencies:
'@oxc-project/runtime': 0.115.0
'@oxc-project/types': 0.115.0
@@ -16160,7 +16366,7 @@ snapshots:
jiti: 2.6.1
terser: 5.46.1
tsx: 4.21.0
- typescript: 5.9.3
+ typescript: 6.0.2
yaml: 2.8.2
'@voidzero-dev/vite-plus-darwin-arm64@0.1.12':
@@ -16175,11 +16381,11 @@ snapshots:
'@voidzero-dev/vite-plus-linux-x64-gnu@0.1.12':
optional: true
- '@voidzero-dev/vite-plus-test@0.1.12(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(esbuild@0.27.3)(happy-dom@20.3.5)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@1.8.0))(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2)':
+ '@voidzero-dev/vite-plus-test@0.1.12(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(esbuild@0.27.3)(happy-dom@20.3.5)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@1.8.0))(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2)':
dependencies:
'@standard-schema/spec': 1.1.0
'@types/chai': 5.2.3
- '@voidzero-dev/vite-plus-core': 0.1.12(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)
+ '@voidzero-dev/vite-plus-core': 0.1.12(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.2)
es-module-lexer: 1.7.0
obug: 2.1.1
pixelmatch: 7.1.0
@@ -16247,7 +16453,7 @@ snapshots:
path-browserify: 1.0.1
vscode-uri: 3.1.0
- '@vue-macros/common@3.1.2(vue@3.5.30(typescript@5.9.3))':
+ '@vue-macros/common@3.1.2(vue@3.5.30(typescript@6.0.2))':
dependencies:
'@vue/compiler-sfc': 3.5.30
ast-kit: 2.2.0
@@ -16255,7 +16461,7 @@ snapshots:
magic-string-ast: 1.0.3
unplugin-utils: 0.3.1
optionalDependencies:
- vue: 3.5.30(typescript@5.9.3)
+ vue: 3.5.30(typescript@6.0.2)
'@vue/babel-helper-vue-transform-on@2.0.1': {}
@@ -16323,7 +16529,7 @@ snapshots:
'@vue/devtools-api@6.6.4': {}
- '@vue/devtools-core@8.0.5(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3))':
+ '@vue/devtools-core@8.0.5(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@6.0.2))':
dependencies:
'@vue/devtools-kit': 8.0.5
'@vue/devtools-shared': 8.0.5
@@ -16331,11 +16537,11 @@ snapshots:
nanoid: 5.1.6
pathe: 2.0.3
vite-hot-client: 2.1.0(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
- vue: 3.5.30(typescript@5.9.3)
+ vue: 3.5.30(typescript@6.0.2)
transitivePeerDependencies:
- vite
- '@vue/devtools-core@8.0.5(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3))':
+ '@vue/devtools-core@8.0.5(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@6.0.2))':
dependencies:
'@vue/devtools-kit': 8.0.5
'@vue/devtools-shared': 8.0.5
@@ -16343,7 +16549,7 @@ snapshots:
nanoid: 5.1.6
pathe: 2.0.3
vite-hot-client: 2.1.0(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
- vue: 3.5.30(typescript@5.9.3)
+ vue: 3.5.30(typescript@6.0.2)
transitivePeerDependencies:
- vite
@@ -16410,11 +16616,11 @@ snapshots:
'@vue/shared': 3.5.30
csstype: 3.2.3
- '@vue/server-renderer@3.5.30(vue@3.5.30(typescript@5.9.3))':
+ '@vue/server-renderer@3.5.30(vue@3.5.30(typescript@6.0.2))':
dependencies:
'@vue/compiler-ssr': 3.5.30
'@vue/shared': 3.5.30
- vue: 3.5.30(typescript@5.9.3)
+ vue: 3.5.30(typescript@6.0.2)
'@vue/shared@3.5.30': {}
@@ -16423,28 +16629,28 @@ snapshots:
js-beautify: 1.15.4
vue-component-type-helpers: 2.2.12
- '@vueuse/core@10.11.1(vue@3.5.30(typescript@5.9.3))':
+ '@vueuse/core@10.11.1(vue@3.5.30(typescript@6.0.2))':
dependencies:
'@types/web-bluetooth': 0.0.20
'@vueuse/metadata': 10.11.1
- '@vueuse/shared': 10.11.1(vue@3.5.30(typescript@5.9.3))
- vue-demi: 0.14.10(vue@3.5.30(typescript@5.9.3))
+ '@vueuse/shared': 10.11.1(vue@3.5.30(typescript@6.0.2))
+ vue-demi: 0.14.10(vue@3.5.30(typescript@6.0.2))
transitivePeerDependencies:
- '@vue/composition-api'
- vue
- '@vueuse/core@14.2.1(vue@3.5.30(typescript@5.9.3))':
+ '@vueuse/core@14.2.1(vue@3.5.30(typescript@6.0.2))':
dependencies:
'@types/web-bluetooth': 0.0.21
'@vueuse/metadata': 14.2.1
- '@vueuse/shared': 14.2.1(vue@3.5.30(typescript@5.9.3))
- vue: 3.5.30(typescript@5.9.3)
+ '@vueuse/shared': 14.2.1(vue@3.5.30(typescript@6.0.2))
+ vue: 3.5.30(typescript@6.0.2)
- '@vueuse/integrations@14.2.1(focus-trap@8.0.0)(fuse.js@7.1.0)(vue@3.5.30(typescript@5.9.3))':
+ '@vueuse/integrations@14.2.1(focus-trap@8.0.0)(fuse.js@7.1.0)(vue@3.5.30(typescript@6.0.2))':
dependencies:
- '@vueuse/core': 14.2.1(vue@3.5.30(typescript@5.9.3))
- '@vueuse/shared': 14.2.1(vue@3.5.30(typescript@5.9.3))
- vue: 3.5.30(typescript@5.9.3)
+ '@vueuse/core': 14.2.1(vue@3.5.30(typescript@6.0.2))
+ '@vueuse/shared': 14.2.1(vue@3.5.30(typescript@6.0.2))
+ vue: 3.5.30(typescript@6.0.2)
optionalDependencies:
focus-trap: 8.0.0
fuse.js: 7.1.0
@@ -16453,33 +16659,33 @@ snapshots:
'@vueuse/metadata@14.2.1': {}
- '@vueuse/nuxt@14.2.1(magicast@0.5.2)(nuxt@4.3.1(@parcel/watcher@2.5.4)(@types/node@24.12.0)(@upstash/redis@1.37.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3))':
+ '@vueuse/nuxt@14.2.1(magicast@0.5.2)(nuxt@4.3.1(@parcel/watcher@2.5.4)(@types/node@24.12.0)(@upstash/redis@1.37.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.2))(vue@3.5.30(typescript@6.0.2))':
dependencies:
'@nuxt/kit': 4.3.1(magicast@0.5.2)
- '@vueuse/core': 14.2.1(vue@3.5.30(typescript@5.9.3))
+ '@vueuse/core': 14.2.1(vue@3.5.30(typescript@6.0.2))
'@vueuse/metadata': 14.2.1
local-pkg: 1.1.2
- nuxt: 4.3.1(@parcel/watcher@2.5.4)(@types/node@24.12.0)(@upstash/redis@1.37.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(yaml@2.8.2)
- vue: 3.5.30(typescript@5.9.3)
+ nuxt: 4.3.1(@parcel/watcher@2.5.4)(@types/node@24.12.0)(@upstash/redis@1.37.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.2)
+ vue: 3.5.30(typescript@6.0.2)
transitivePeerDependencies:
- magicast
- '@vueuse/router@14.2.1(vue-router@4.6.4(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3))':
+ '@vueuse/router@14.2.1(vue-router@4.6.4(vue@3.5.30(typescript@6.0.2)))(vue@3.5.30(typescript@6.0.2))':
dependencies:
- '@vueuse/shared': 14.2.1(vue@3.5.30(typescript@5.9.3))
- vue: 3.5.30(typescript@5.9.3)
- vue-router: 4.6.4(vue@3.5.30(typescript@5.9.3))
+ '@vueuse/shared': 14.2.1(vue@3.5.30(typescript@6.0.2))
+ vue: 3.5.30(typescript@6.0.2)
+ vue-router: 4.6.4(vue@3.5.30(typescript@6.0.2))
- '@vueuse/shared@10.11.1(vue@3.5.30(typescript@5.9.3))':
+ '@vueuse/shared@10.11.1(vue@3.5.30(typescript@6.0.2))':
dependencies:
- vue-demi: 0.14.10(vue@3.5.30(typescript@5.9.3))
+ vue-demi: 0.14.10(vue@3.5.30(typescript@6.0.2))
transitivePeerDependencies:
- '@vue/composition-api'
- vue
- '@vueuse/shared@14.2.1(vue@3.5.30(typescript@5.9.3))':
+ '@vueuse/shared@14.2.1(vue@3.5.30(typescript@6.0.2))':
dependencies:
- vue: 3.5.30(typescript@5.9.3)
+ vue: 3.5.30(typescript@6.0.2)
'@webassemblyjs/ast@1.14.1':
dependencies:
@@ -17031,7 +17237,7 @@ snapshots:
chownr@3.0.0: {}
- chromatic@15.3.0: {}
+ chromatic@16.0.0: {}
chrome-launcher@1.2.1:
dependencies:
@@ -17400,39 +17606,39 @@ snapshots:
doctypes@1.1.0: {}
- docus@5.8.1(7e18258d225211023ec526c8fdd53284):
+ docus@5.8.1(e94a6b3b2b2bbf1999d0eb9203a712e7):
dependencies:
'@ai-sdk/gateway': 3.0.66(zod@4.3.6)
'@ai-sdk/mcp': 1.0.25(zod@4.3.6)
- '@ai-sdk/vue': 3.0.116(vue@3.5.30(typescript@5.9.3))(zod@4.3.6)
+ '@ai-sdk/vue': 3.0.116(vue@3.5.30(typescript@6.0.2))(zod@4.3.6)
'@iconify-json/lucide': 1.2.98
'@iconify-json/simple-icons': 1.2.74
'@iconify-json/vscode-icons': 1.2.45
- '@nuxt/content': 3.12.0(@valibot/to-json-schema@1.5.0(valibot@1.3.0(typescript@5.9.3)))(better-sqlite3@12.8.0)(magicast@0.5.2)(valibot@1.3.0(typescript@5.9.3))
+ '@nuxt/content': 3.12.0(@valibot/to-json-schema@1.5.0(valibot@1.3.0(typescript@6.0.2)))(better-sqlite3@12.8.0)(magicast@0.5.2)(valibot@1.3.0(typescript@6.0.2))
'@nuxt/image': 2.0.0(@upstash/redis@1.37.0)(db0@0.3.4(better-sqlite3@12.8.0))(ioredis@5.9.2)(magicast@0.5.2)
'@nuxt/kit': 4.3.1(magicast@0.5.2)
- '@nuxt/ui': 4.5.1(@nuxt/content@3.12.0(@valibot/to-json-schema@1.5.0(valibot@1.3.0(typescript@5.9.3)))(better-sqlite3@12.8.0)(magicast@0.5.2)(valibot@1.3.0(typescript@5.9.3)))(@tiptap/extensions@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0))(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29))(@upstash/redis@1.37.0)(db0@0.3.4(better-sqlite3@12.8.0))(embla-carousel@8.6.0)(focus-trap@8.0.0)(ioredis@5.9.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.2)(typescript@5.9.3)(valibot@1.3.0(typescript@5.9.3))(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-router@4.6.4(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3))(yjs@13.6.29)(zod@4.3.6)
- '@nuxtjs/i18n': 10.2.3(@upstash/redis@1.37.0)(@vue/compiler-dom@3.5.30)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(rollup@4.56.0)(vue@3.5.30(typescript@5.9.3))
+ '@nuxt/ui': 4.5.1(@nuxt/content@3.12.0(@valibot/to-json-schema@1.5.0(valibot@1.3.0(typescript@6.0.2)))(better-sqlite3@12.8.0)(magicast@0.5.2)(valibot@1.3.0(typescript@6.0.2)))(@tiptap/extensions@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0))(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29))(@upstash/redis@1.37.0)(db0@0.3.4(better-sqlite3@12.8.0))(embla-carousel@8.6.0)(focus-trap@8.0.0)(ioredis@5.9.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.2)(typescript@6.0.2)(valibot@1.3.0(typescript@6.0.2))(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-router@4.6.4(vue@3.5.30(typescript@6.0.2)))(vue@3.5.30(typescript@6.0.2))(yjs@13.6.29)(zod@4.3.6)
+ '@nuxtjs/i18n': 10.2.3(@upstash/redis@1.37.0)(@vue/compiler-dom@3.5.30)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(rollup@4.56.0)(vue@3.5.30(typescript@6.0.2))
'@nuxtjs/mcp-toolkit': 0.7.0(magicast@0.5.2)(zod@4.3.6)
'@nuxtjs/mdc': 0.20.2(magicast@0.5.2)
- '@nuxtjs/robots': 5.7.1(magicast@0.5.2)(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3))(zod@4.3.6)
+ '@nuxtjs/robots': 5.7.1(magicast@0.5.2)(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@6.0.2))(zod@4.3.6)
'@shikijs/core': 3.23.0
'@shikijs/engine-javascript': 3.23.0
'@shikijs/langs': 3.23.0
'@shikijs/themes': 3.23.0
- '@vueuse/core': 14.2.1(vue@3.5.30(typescript@5.9.3))
+ '@vueuse/core': 14.2.1(vue@3.5.30(typescript@6.0.2))
ai: 6.0.116(zod@4.3.6)
better-sqlite3: 12.8.0
defu: 6.1.4
exsolve: 1.0.8
git-url-parse: 16.1.0
- motion-v: 1.10.3(@vueuse/core@14.2.1(vue@3.5.30(typescript@5.9.3)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vue@3.5.30(typescript@5.9.3))
- nuxt: 4.3.1(@parcel/watcher@2.5.4)(@types/node@25.0.10)(@upstash/redis@1.37.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(yaml@2.8.2)
+ motion-v: 1.10.3(@vueuse/core@14.2.1(vue@3.5.30(typescript@6.0.2)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vue@3.5.30(typescript@6.0.2))
+ nuxt: 4.3.1(@parcel/watcher@2.5.4)(@types/node@25.0.10)(@upstash/redis@1.37.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.2)
nuxt-llms: 0.2.0(magicast@0.5.2)
- nuxt-og-image: 5.1.13(@unhead/vue@2.1.10(vue@3.5.30(typescript@5.9.3)))(magicast@0.5.2)(unstorage@1.17.4(@upstash/redis@1.37.0)(db0@0.3.4(better-sqlite3@12.8.0))(ioredis@5.9.2))(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3))
+ nuxt-og-image: 5.1.13(@unhead/vue@2.1.10(vue@3.5.30(typescript@6.0.2)))(magicast@0.5.2)(unstorage@1.17.4(@upstash/redis@1.37.0)(db0@0.3.4(better-sqlite3@12.8.0))(ioredis@5.9.2))(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@6.0.2))
pkg-types: 2.3.0
scule: 1.3.0
- shiki-stream: 0.1.4(react@19.2.4)(vue@3.5.30(typescript@5.9.3))
+ shiki-stream: 0.1.4(react@19.2.4)(vue@3.5.30(typescript@6.0.2))
tailwindcss: 4.2.2
ufo: 1.6.3
zod: 4.3.6
@@ -17590,11 +17796,11 @@ snapshots:
dependencies:
embla-carousel: 8.6.0
- embla-carousel-vue@8.6.0(vue@3.5.30(typescript@5.9.3)):
+ embla-carousel-vue@8.6.0(vue@3.5.30(typescript@6.0.2)):
dependencies:
embla-carousel: 8.6.0
embla-carousel-reactive-utils: 8.6.0(embla-carousel@8.6.0)
- vue: 3.5.30(typescript@5.9.3)
+ vue: 3.5.30(typescript@6.0.2)
embla-carousel-wheel-gestures@8.1.0(embla-carousel@8.6.0):
dependencies:
@@ -18650,7 +18856,7 @@ snapshots:
html-escaper@2.0.2: {}
- html-validate@9.4.2(@voidzero-dev/vite-plus-test@0.1.12(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(esbuild@0.27.3)(happy-dom@20.3.5)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@1.8.0))(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2)):
+ html-validate@9.4.2(@voidzero-dev/vite-plus-test@0.1.12(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(esbuild@0.27.3)(happy-dom@20.3.5)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@1.8.0))(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2)):
dependencies:
'@html-validate/stylish': 4.3.0
'@sidvind/better-ajv-errors': 3.0.1(ajv@8.18.0)
@@ -18661,7 +18867,7 @@ snapshots:
prompts: 2.4.2
semver: 7.7.4
optionalDependencies:
- vitest: '@voidzero-dev/vite-plus-test@0.1.12(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(esbuild@0.27.3)(happy-dom@20.3.5)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@1.8.0))(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2)'
+ vitest: '@voidzero-dev/vite-plus-test@0.1.12(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(esbuild@0.27.3)(happy-dom@20.3.5)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@1.8.0))(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2)'
html-void-elements@3.0.0: {}
@@ -19230,20 +19436,20 @@ snapshots:
klona@2.0.6: {}
- knip@5.88.0(@types/node@24.12.0)(typescript@5.9.3):
+ knip@6.0.5:
dependencies:
'@nodelib/fs.walk': 1.2.8
- '@types/node': 24.12.0
fast-glob: 3.3.3
formatly: 0.3.0
+ get-tsconfig: 4.13.7
jiti: 2.6.1
minimist: 1.2.8
+ oxc-parser: 0.120.0
oxc-resolver: 11.19.1
picocolors: 1.1.1
picomatch: 4.0.3
smol-toml: 1.6.0
strip-json-comments: 5.0.3
- typescript: 5.9.3
unbash: 2.2.0
yaml: 2.8.2
zod: 4.3.6
@@ -19916,13 +20122,13 @@ snapshots:
motion-utils@12.29.2: {}
- motion-v@1.10.3(@vueuse/core@14.2.1(vue@3.5.30(typescript@5.9.3)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vue@3.5.30(typescript@5.9.3)):
+ motion-v@1.10.3(@vueuse/core@14.2.1(vue@3.5.30(typescript@6.0.2)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vue@3.5.30(typescript@6.0.2)):
dependencies:
- '@vueuse/core': 14.2.1(vue@3.5.30(typescript@5.9.3))
+ '@vueuse/core': 14.2.1(vue@3.5.30(typescript@6.0.2))
framer-motion: 12.34.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
hey-listen: 1.0.8
motion-dom: 12.34.3
- vue: 3.5.30(typescript@5.9.3)
+ vue: 3.5.30(typescript@6.0.2)
transitivePeerDependencies:
- '@emotion/is-prop-valid'
- react
@@ -20129,13 +20335,13 @@ snapshots:
transitivePeerDependencies:
- magicast
- nuxt-og-image@5.1.13(@unhead/vue@2.1.10(vue@3.5.30(typescript@5.9.3)))(magicast@0.5.2)(unstorage@1.17.4(@upstash/redis@1.37.0)(db0@0.3.4(better-sqlite3@12.8.0))(ioredis@5.9.2))(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3)):
+ nuxt-og-image@5.1.13(@unhead/vue@2.1.10(vue@3.5.30(typescript@6.0.2)))(magicast@0.5.2)(unstorage@1.17.4(@upstash/redis@1.37.0)(db0@0.3.4(better-sqlite3@12.8.0))(ioredis@5.9.2))(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@6.0.2)):
dependencies:
'@nuxt/devtools-kit': 3.2.2(magicast@0.5.2)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
'@nuxt/kit': 4.3.1(magicast@0.5.2)
'@resvg/resvg-js': 2.6.2
'@resvg/resvg-wasm': 2.6.2
- '@unhead/vue': 2.1.10(vue@3.5.30(typescript@5.9.3))
+ '@unhead/vue': 2.1.10(vue@3.5.30(typescript@6.0.2))
'@unocss/core': 66.6.7
'@unocss/preset-wind3': 66.6.7
chrome-launcher: 1.2.1
@@ -20145,7 +20351,7 @@ snapshots:
image-size: 2.0.2
magic-string: 0.30.21
mocked-exports: 0.1.1
- nuxt-site-config: 3.2.21(magicast@0.5.2)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3))
+ nuxt-site-config: 3.2.21(magicast@0.5.2)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@6.0.2))
nypm: 0.6.5
ofetch: 1.5.1
ohash: 2.0.11
@@ -20169,13 +20375,13 @@ snapshots:
- vite
- vue
- nuxt-og-image@5.1.13(@unhead/vue@2.1.10(vue@3.5.30(typescript@5.9.3)))(magicast@0.5.2)(unstorage@1.17.4(@upstash/redis@1.37.0)(db0@0.3.4(better-sqlite3@12.8.0))(ioredis@5.9.2))(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3)):
+ nuxt-og-image@5.1.13(@unhead/vue@2.1.10(vue@3.5.30(typescript@6.0.2)))(magicast@0.5.2)(unstorage@1.17.4(@upstash/redis@1.37.0)(db0@0.3.4(better-sqlite3@12.8.0))(ioredis@5.9.2))(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@6.0.2)):
dependencies:
'@nuxt/devtools-kit': 3.2.2(magicast@0.5.2)(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
'@nuxt/kit': 4.3.1(magicast@0.5.2)
'@resvg/resvg-js': 2.6.2
'@resvg/resvg-wasm': 2.6.2
- '@unhead/vue': 2.1.10(vue@3.5.30(typescript@5.9.3))
+ '@unhead/vue': 2.1.10(vue@3.5.30(typescript@6.0.2))
'@unocss/core': 66.6.7
'@unocss/preset-wind3': 66.6.7
chrome-launcher: 1.2.1
@@ -20185,7 +20391,7 @@ snapshots:
image-size: 2.0.2
magic-string: 0.30.21
mocked-exports: 0.1.1
- nuxt-site-config: 3.2.21(magicast@0.5.2)(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3))
+ nuxt-site-config: 3.2.21(magicast@0.5.2)(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@6.0.2))
nypm: 0.6.5
ofetch: 1.5.1
ohash: 2.0.11
@@ -20209,60 +20415,60 @@ snapshots:
- vite
- vue
- nuxt-site-config-kit@3.2.21(magicast@0.5.2)(vue@3.5.30(typescript@5.9.3)):
+ nuxt-site-config-kit@3.2.21(magicast@0.5.2)(vue@3.5.30(typescript@6.0.2)):
dependencies:
'@nuxt/kit': 4.3.1(magicast@0.5.2)
pkg-types: 2.3.0
- site-config-stack: 3.2.21(vue@3.5.30(typescript@5.9.3))
+ site-config-stack: 3.2.21(vue@3.5.30(typescript@6.0.2))
std-env: 3.10.0
ufo: 1.6.3
transitivePeerDependencies:
- magicast
- vue
- nuxt-site-config@3.2.21(magicast@0.5.2)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3)):
+ nuxt-site-config@3.2.21(magicast@0.5.2)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@6.0.2)):
dependencies:
'@nuxt/devtools-kit': 3.2.2(magicast@0.5.2)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
'@nuxt/kit': 4.3.1(magicast@0.5.2)
h3: 1.15.8
- nuxt-site-config-kit: 3.2.21(magicast@0.5.2)(vue@3.5.30(typescript@5.9.3))
+ nuxt-site-config-kit: 3.2.21(magicast@0.5.2)(vue@3.5.30(typescript@6.0.2))
pathe: 2.0.3
pkg-types: 2.3.0
sirv: 3.0.2
- site-config-stack: 3.2.21(vue@3.5.30(typescript@5.9.3))
+ site-config-stack: 3.2.21(vue@3.5.30(typescript@6.0.2))
ufo: 1.6.3
transitivePeerDependencies:
- magicast
- vite
- vue
- nuxt-site-config@3.2.21(magicast@0.5.2)(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3)):
+ nuxt-site-config@3.2.21(magicast@0.5.2)(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@6.0.2)):
dependencies:
'@nuxt/devtools-kit': 3.2.2(magicast@0.5.2)(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
'@nuxt/kit': 4.3.1(magicast@0.5.2)
h3: 1.15.8
- nuxt-site-config-kit: 3.2.21(magicast@0.5.2)(vue@3.5.30(typescript@5.9.3))
+ nuxt-site-config-kit: 3.2.21(magicast@0.5.2)(vue@3.5.30(typescript@6.0.2))
pathe: 2.0.3
pkg-types: 2.3.0
sirv: 3.0.2
- site-config-stack: 3.2.21(vue@3.5.30(typescript@5.9.3))
+ site-config-stack: 3.2.21(vue@3.5.30(typescript@6.0.2))
ufo: 1.6.3
transitivePeerDependencies:
- magicast
- vite
- vue
- nuxt@4.3.1(@parcel/watcher@2.5.4)(@types/node@24.12.0)(@upstash/redis@1.37.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(yaml@2.8.2):
+ nuxt@4.3.1(@parcel/watcher@2.5.4)(@types/node@24.12.0)(@upstash/redis@1.37.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.2):
dependencies:
'@dxup/nuxt': 0.3.2(magicast@0.5.2)
'@nuxt/cli': 3.33.1(@nuxt/schema@4.3.1)(cac@6.7.14)(magicast@0.5.2)
- '@nuxt/devtools': 3.1.1(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3))
+ '@nuxt/devtools': 3.1.1(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@6.0.2))
'@nuxt/kit': 4.3.1(magicast@0.5.2)
- '@nuxt/nitro-server': 4.3.1(@upstash/redis@1.37.0)(better-sqlite3@12.8.0)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(ioredis@5.9.2)(magicast@0.5.2)(nuxt@4.3.1(@parcel/watcher@2.5.4)(@types/node@24.12.0)(@upstash/redis@1.37.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(yaml@2.8.2))(rolldown@1.0.0-rc.9)(typescript@5.9.3)
+ '@nuxt/nitro-server': 4.3.1(@upstash/redis@1.37.0)(better-sqlite3@12.8.0)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(ioredis@5.9.2)(magicast@0.5.2)(nuxt@4.3.1(@parcel/watcher@2.5.4)(@types/node@24.12.0)(@upstash/redis@1.37.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.2))(rolldown@1.0.0-rc.9)(typescript@6.0.2)
'@nuxt/schema': 4.3.1
'@nuxt/telemetry': 2.7.0(@nuxt/kit@4.3.1(magicast@0.5.2))
- '@nuxt/vite-builder': 4.3.1(@types/node@24.12.0)(eslint@9.39.2(jiti@2.6.1))(magicast@0.5.2)(nuxt@4.3.1(@parcel/watcher@2.5.4)(@types/node@24.12.0)(@upstash/redis@1.37.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(yaml@2.8.2))(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vue-tsc@3.2.6(typescript@5.9.3))(vue@3.5.30(typescript@5.9.3))(yaml@2.8.2)
- '@unhead/vue': 2.1.10(vue@3.5.30(typescript@5.9.3))
+ '@nuxt/vite-builder': 4.3.1(@types/node@24.12.0)(eslint@9.39.2(jiti@2.6.1))(magicast@0.5.2)(nuxt@4.3.1(@parcel/watcher@2.5.4)(@types/node@24.12.0)(@upstash/redis@1.37.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.2))(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vue-tsc@3.2.6(typescript@6.0.2))(vue@3.5.30(typescript@6.0.2))(yaml@2.8.2)
+ '@unhead/vue': 2.1.10(vue@3.5.30(typescript@6.0.2))
'@vue/shared': 3.5.30
c12: 3.3.3(magicast@0.5.2)
chokidar: 5.0.0
@@ -20307,10 +20513,10 @@ snapshots:
unctx: 2.5.0
unimport: 5.6.0
unplugin: 3.0.0
- unplugin-vue-router: 0.19.2(@vue/compiler-sfc@3.5.30)(vue-router@4.6.4(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3))
+ unplugin-vue-router: 0.19.2(@vue/compiler-sfc@3.5.30)(vue-router@4.6.4(vue@3.5.30(typescript@6.0.2)))(vue@3.5.30(typescript@6.0.2))
untyped: 2.0.0
- vue: 3.5.30(typescript@5.9.3)
- vue-router: 4.6.4(vue@3.5.30(typescript@5.9.3))
+ vue: 3.5.30(typescript@6.0.2)
+ vue-router: 4.6.4(vue@3.5.30(typescript@6.0.2))
optionalDependencies:
'@parcel/watcher': 2.5.4
'@types/node': 24.12.0
@@ -20379,17 +20585,17 @@ snapshots:
- xml2js
- yaml
- nuxt@4.3.1(@parcel/watcher@2.5.4)(@types/node@25.0.10)(@upstash/redis@1.37.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(yaml@2.8.2):
+ nuxt@4.3.1(@parcel/watcher@2.5.4)(@types/node@25.0.10)(@upstash/redis@1.37.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.2):
dependencies:
'@dxup/nuxt': 0.3.2(magicast@0.5.2)
'@nuxt/cli': 3.33.1(@nuxt/schema@4.3.1)(cac@6.7.14)(magicast@0.5.2)
- '@nuxt/devtools': 3.1.1(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3))
+ '@nuxt/devtools': 3.1.1(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@6.0.2))
'@nuxt/kit': 4.3.1(magicast@0.5.2)
- '@nuxt/nitro-server': 4.3.1(@upstash/redis@1.37.0)(better-sqlite3@12.8.0)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(ioredis@5.9.2)(magicast@0.5.2)(nuxt@4.3.1(@parcel/watcher@2.5.4)(@types/node@25.0.10)(@upstash/redis@1.37.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(yaml@2.8.2))(rolldown@1.0.0-rc.9)(typescript@5.9.3)
+ '@nuxt/nitro-server': 4.3.1(@upstash/redis@1.37.0)(better-sqlite3@12.8.0)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(ioredis@5.9.2)(magicast@0.5.2)(nuxt@4.3.1(@parcel/watcher@2.5.4)(@types/node@25.0.10)(@upstash/redis@1.37.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.2))(rolldown@1.0.0-rc.9)(typescript@6.0.2)
'@nuxt/schema': 4.3.1
'@nuxt/telemetry': 2.7.0(@nuxt/kit@4.3.1(magicast@0.5.2))
- '@nuxt/vite-builder': 4.3.1(@types/node@25.0.10)(eslint@9.39.2(jiti@2.6.1))(magicast@0.5.2)(nuxt@4.3.1(@parcel/watcher@2.5.4)(@types/node@25.0.10)(@upstash/redis@1.37.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(yaml@2.8.2))(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vue-tsc@3.2.6(typescript@5.9.3))(vue@3.5.30(typescript@5.9.3))(yaml@2.8.2)
- '@unhead/vue': 2.1.10(vue@3.5.30(typescript@5.9.3))
+ '@nuxt/vite-builder': 4.3.1(@types/node@25.0.10)(eslint@9.39.2(jiti@2.6.1))(magicast@0.5.2)(nuxt@4.3.1(@parcel/watcher@2.5.4)(@types/node@25.0.10)(@upstash/redis@1.37.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.2))(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(rolldown@1.0.0-rc.9)(rollup@4.56.0)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vue-tsc@3.2.6(typescript@6.0.2))(vue@3.5.30(typescript@6.0.2))(yaml@2.8.2)
+ '@unhead/vue': 2.1.10(vue@3.5.30(typescript@6.0.2))
'@vue/shared': 3.5.30
c12: 3.3.3(magicast@0.5.2)
chokidar: 5.0.0
@@ -20434,10 +20640,10 @@ snapshots:
unctx: 2.5.0
unimport: 5.6.0
unplugin: 3.0.0
- unplugin-vue-router: 0.19.2(@vue/compiler-sfc@3.5.30)(vue-router@4.6.4(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3))
+ unplugin-vue-router: 0.19.2(@vue/compiler-sfc@3.5.30)(vue-router@4.6.4(vue@3.5.30(typescript@6.0.2)))(vue@3.5.30(typescript@6.0.2))
untyped: 2.0.0
- vue: 3.5.30(typescript@5.9.3)
- vue-router: 4.6.4(vue@3.5.30(typescript@5.9.3))
+ vue: 3.5.30(typescript@6.0.2)
+ vue-router: 4.6.4(vue@3.5.30(typescript@6.0.2))
optionalDependencies:
'@parcel/watcher': 2.5.4
'@types/node': 25.0.10
@@ -20666,6 +20872,31 @@ snapshots:
'@oxc-parser/binding-win32-ia32-msvc': 0.115.0
'@oxc-parser/binding-win32-x64-msvc': 0.115.0
+ oxc-parser@0.120.0:
+ dependencies:
+ '@oxc-project/types': 0.120.0
+ optionalDependencies:
+ '@oxc-parser/binding-android-arm-eabi': 0.120.0
+ '@oxc-parser/binding-android-arm64': 0.120.0
+ '@oxc-parser/binding-darwin-arm64': 0.120.0
+ '@oxc-parser/binding-darwin-x64': 0.120.0
+ '@oxc-parser/binding-freebsd-x64': 0.120.0
+ '@oxc-parser/binding-linux-arm-gnueabihf': 0.120.0
+ '@oxc-parser/binding-linux-arm-musleabihf': 0.120.0
+ '@oxc-parser/binding-linux-arm64-gnu': 0.120.0
+ '@oxc-parser/binding-linux-arm64-musl': 0.120.0
+ '@oxc-parser/binding-linux-ppc64-gnu': 0.120.0
+ '@oxc-parser/binding-linux-riscv64-gnu': 0.120.0
+ '@oxc-parser/binding-linux-riscv64-musl': 0.120.0
+ '@oxc-parser/binding-linux-s390x-gnu': 0.120.0
+ '@oxc-parser/binding-linux-x64-gnu': 0.120.0
+ '@oxc-parser/binding-linux-x64-musl': 0.120.0
+ '@oxc-parser/binding-openharmony-arm64': 0.120.0
+ '@oxc-parser/binding-wasm32-wasi': 0.120.0
+ '@oxc-parser/binding-win32-arm64-msvc': 0.120.0
+ '@oxc-parser/binding-win32-ia32-msvc': 0.120.0
+ '@oxc-parser/binding-win32-x64-msvc': 0.120.0
+
oxc-parser@0.95.0:
dependencies:
'@oxc-project/types': 0.95.0
@@ -21621,19 +21852,19 @@ snapshots:
'@types/hast': 3.0.4
unist-util-visit: 5.1.0
- reka-ui@2.8.2(vue@3.5.30(typescript@5.9.3)):
+ reka-ui@2.8.2(vue@3.5.30(typescript@6.0.2)):
dependencies:
'@floating-ui/dom': 1.7.6
- '@floating-ui/vue': 1.1.11(vue@3.5.30(typescript@5.9.3))
+ '@floating-ui/vue': 1.1.11(vue@3.5.30(typescript@6.0.2))
'@internationalized/date': 3.11.0
'@internationalized/number': 3.6.5
- '@tanstack/vue-virtual': 3.13.19(vue@3.5.30(typescript@5.9.3))
- '@vueuse/core': 14.2.1(vue@3.5.30(typescript@5.9.3))
- '@vueuse/shared': 14.2.1(vue@3.5.30(typescript@5.9.3))
+ '@tanstack/vue-virtual': 3.13.19(vue@3.5.30(typescript@6.0.2))
+ '@vueuse/core': 14.2.1(vue@3.5.30(typescript@6.0.2))
+ '@vueuse/shared': 14.2.1(vue@3.5.30(typescript@6.0.2))
aria-hidden: 1.2.6
defu: 6.1.4
ohash: 2.0.11
- vue: 3.5.30(typescript@5.9.3)
+ vue: 3.5.30(typescript@6.0.2)
transitivePeerDependencies:
- '@vue/composition-api'
@@ -21722,7 +21953,7 @@ snapshots:
rfdc@1.4.1: {}
- rolldown-plugin-dts@0.22.5(oxc-resolver@11.19.1)(rolldown@1.0.0-rc.9)(typescript@5.9.3)(vue-tsc@3.2.6(typescript@5.9.3)):
+ rolldown-plugin-dts@0.22.5(oxc-resolver@11.19.1)(rolldown@1.0.0-rc.9)(typescript@6.0.2)(vue-tsc@3.2.6(typescript@6.0.2)):
dependencies:
'@babel/generator': 8.0.0-rc.2
'@babel/helper-validator-identifier': 8.0.0-rc.2
@@ -21735,8 +21966,8 @@ snapshots:
obug: 2.1.1
rolldown: 1.0.0-rc.9
optionalDependencies:
- typescript: 5.9.3
- vue-tsc: 3.2.6(typescript@5.9.3)
+ typescript: 6.0.2
+ vue-tsc: 3.2.6(typescript@6.0.2)
transitivePeerDependencies:
- oxc-resolver
@@ -21905,7 +22136,15 @@ snapshots:
scheduler@0.27.0: {}
- schema-dts@1.1.5: {}
+ schema-dts-lib@1.0.0(typescript@6.0.2):
+ dependencies:
+ typescript: 6.0.2
+
+ schema-dts@2.0.0(typescript@6.0.2):
+ dependencies:
+ schema-dts-lib: 1.0.0(typescript@6.0.2)
+ transitivePeerDependencies:
+ - typescript
schema-utils@4.3.3:
dependencies:
@@ -22041,12 +22280,12 @@ snapshots:
shell-quote@1.8.3: {}
- shiki-stream@0.1.4(react@19.2.4)(vue@3.5.30(typescript@5.9.3)):
+ shiki-stream@0.1.4(react@19.2.4)(vue@3.5.30(typescript@6.0.2)):
dependencies:
'@shikijs/core': 3.23.0
optionalDependencies:
react: 19.2.4
- vue: 3.5.30(typescript@5.9.3)
+ vue: 3.5.30(typescript@6.0.2)
shiki@3.23.0:
dependencies:
@@ -22124,10 +22363,10 @@ snapshots:
sisteransi@1.0.5: {}
- site-config-stack@3.2.21(vue@3.5.30(typescript@5.9.3)):
+ site-config-stack@3.2.21(vue@3.5.30(typescript@6.0.2)):
dependencies:
ufo: 1.6.3
- vue: 3.5.30(typescript@5.9.3)
+ vue: 3.5.30(typescript@6.0.2)
skin-tone@2.0.0:
dependencies:
@@ -22383,9 +22622,9 @@ snapshots:
picocolors: 1.1.1
sax: 1.4.4
- swrv@1.1.0(vue@3.5.30(typescript@5.9.3)):
+ swrv@1.1.0(vue@3.5.30(typescript@6.0.2)):
dependencies:
- vue: 3.5.30(typescript@5.9.3)
+ vue: 3.5.30(typescript@6.0.2)
symbol-tree@3.2.4:
optional: true
@@ -22566,7 +22805,7 @@ snapshots:
'@ts-morph/common': 0.28.1
code-block-writer: 13.0.3
- tsdown@0.21.4(oxc-resolver@11.19.1)(typescript@5.9.3)(vue-tsc@3.2.6(typescript@5.9.3)):
+ tsdown@0.21.4(oxc-resolver@11.19.1)(typescript@6.0.2)(vue-tsc@3.2.6(typescript@6.0.2)):
dependencies:
ansis: 4.2.0
cac: 7.0.0
@@ -22577,7 +22816,7 @@ snapshots:
obug: 2.1.1
picomatch: 4.0.3
rolldown: 1.0.0-rc.9
- rolldown-plugin-dts: 0.22.5(oxc-resolver@11.19.1)(rolldown@1.0.0-rc.9)(typescript@5.9.3)(vue-tsc@3.2.6(typescript@5.9.3))
+ rolldown-plugin-dts: 0.22.5(oxc-resolver@11.19.1)(rolldown@1.0.0-rc.9)(typescript@6.0.2)(vue-tsc@3.2.6(typescript@6.0.2))
semver: 7.7.4
tinyexec: 1.0.4
tinyglobby: 0.2.15
@@ -22585,7 +22824,7 @@ snapshots:
unconfig-core: 7.5.0
unrun: 0.2.32
optionalDependencies:
- typescript: 5.9.3
+ typescript: 6.0.2
transitivePeerDependencies:
- '@ts-macro/tsc'
- '@typescript/native-preview'
@@ -22662,6 +22901,8 @@ snapshots:
typescript@5.9.3: {}
+ typescript@6.0.2: {}
+
uc.micro@2.1.0: {}
ufo@1.6.3: {}
@@ -22838,7 +23079,7 @@ snapshots:
unpipe@1.0.0: {}
- unplugin-auto-import@21.0.0(@nuxt/kit@4.3.1(magicast@0.5.2))(@vueuse/core@14.2.1(vue@3.5.30(typescript@5.9.3))):
+ unplugin-auto-import@21.0.0(@nuxt/kit@4.3.1(magicast@0.5.2))(@vueuse/core@14.2.1(vue@3.5.30(typescript@6.0.2))):
dependencies:
local-pkg: 1.1.2
magic-string: 0.30.21
@@ -22848,7 +23089,7 @@ snapshots:
unplugin-utils: 0.3.1
optionalDependencies:
'@nuxt/kit': 4.3.1(magicast@0.5.2)
- '@vueuse/core': 14.2.1(vue@3.5.30(typescript@5.9.3))
+ '@vueuse/core': 14.2.1(vue@3.5.30(typescript@6.0.2))
unplugin-utils@0.2.5:
dependencies:
@@ -22860,7 +23101,7 @@ snapshots:
pathe: 2.0.3
picomatch: 4.0.3
- unplugin-vue-components@31.0.0(@nuxt/kit@4.3.1(magicast@0.5.2))(vue@3.5.30(typescript@5.9.3)):
+ unplugin-vue-components@31.0.0(@nuxt/kit@4.3.1(magicast@0.5.2))(vue@3.5.30(typescript@6.0.2)):
dependencies:
chokidar: 5.0.0
local-pkg: 1.1.2
@@ -22871,7 +23112,7 @@ snapshots:
tinyglobby: 0.2.15
unplugin: 2.3.11
unplugin-utils: 0.3.1
- vue: 3.5.30(typescript@5.9.3)
+ vue: 3.5.30(typescript@6.0.2)
optionalDependencies:
'@nuxt/kit': 4.3.1(magicast@0.5.2)
@@ -22885,10 +23126,10 @@ snapshots:
unplugin-utils: 0.3.1
vite: 8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)
- unplugin-vue-router@0.16.2(@vue/compiler-sfc@3.5.30)(vue-router@4.6.4(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3)):
+ unplugin-vue-router@0.16.2(@vue/compiler-sfc@3.5.30)(vue-router@4.6.4(vue@3.5.30(typescript@6.0.2)))(vue@3.5.30(typescript@6.0.2)):
dependencies:
'@babel/generator': 7.29.1
- '@vue-macros/common': 3.1.2(vue@3.5.30(typescript@5.9.3))
+ '@vue-macros/common': 3.1.2(vue@3.5.30(typescript@6.0.2))
'@vue/compiler-sfc': 3.5.30
'@vue/language-core': 3.2.6
ast-walker-scope: 0.8.3
@@ -22906,14 +23147,14 @@ snapshots:
unplugin-utils: 0.3.1
yaml: 2.8.2
optionalDependencies:
- vue-router: 4.6.4(vue@3.5.30(typescript@5.9.3))
+ vue-router: 4.6.4(vue@3.5.30(typescript@6.0.2))
transitivePeerDependencies:
- vue
- unplugin-vue-router@0.19.2(@vue/compiler-sfc@3.5.30)(vue-router@4.6.4(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3)):
+ unplugin-vue-router@0.19.2(@vue/compiler-sfc@3.5.30)(vue-router@4.6.4(vue@3.5.30(typescript@6.0.2)))(vue@3.5.30(typescript@6.0.2)):
dependencies:
'@babel/generator': 7.29.1
- '@vue-macros/common': 3.1.2(vue@3.5.30(typescript@5.9.3))
+ '@vue-macros/common': 3.1.2(vue@3.5.30(typescript@6.0.2))
'@vue/compiler-sfc': 3.5.30
'@vue/language-core': 3.2.6
ast-walker-scope: 0.8.3
@@ -22931,7 +23172,7 @@ snapshots:
unplugin-utils: 0.3.1
yaml: 2.8.2
optionalDependencies:
- vue-router: 4.6.4(vue@3.5.30(typescript@5.9.3))
+ vue-router: 4.6.4(vue@3.5.30(typescript@6.0.2))
transitivePeerDependencies:
- vue
@@ -23015,9 +23256,9 @@ snapshots:
util-deprecate@1.0.2: {}
- valibot@1.3.0(typescript@5.9.3):
+ valibot@1.3.0(typescript@6.0.2):
optionalDependencies:
- typescript: 5.9.3
+ typescript: 6.0.2
validate-npm-package-name@7.0.2: {}
@@ -23025,11 +23266,11 @@ snapshots:
vary@1.1.2: {}
- vaul-vue@0.4.1(reka-ui@2.8.2(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3)):
+ vaul-vue@0.4.1(reka-ui@2.8.2(vue@3.5.30(typescript@6.0.2)))(vue@3.5.30(typescript@6.0.2)):
dependencies:
- '@vueuse/core': 10.11.1(vue@3.5.30(typescript@5.9.3))
- reka-ui: 2.8.2(vue@3.5.30(typescript@5.9.3))
- vue: 3.5.30(typescript@5.9.3)
+ '@vueuse/core': 10.11.1(vue@3.5.30(typescript@6.0.2))
+ reka-ui: 2.8.2(vue@3.5.30(typescript@6.0.2))
+ vue: 3.5.30(typescript@6.0.2)
transitivePeerDependencies:
- '@vue/composition-api'
@@ -23048,11 +23289,11 @@ snapshots:
'@types/unist': 3.0.3
vfile-message: 4.0.3
- virtua@0.48.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vue@3.5.30(typescript@5.9.3)):
+ virtua@0.48.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vue@3.5.30(typescript@6.0.2)):
optionalDependencies:
react: 19.2.4
react-dom: 19.2.4(react@19.2.4)
- vue: 3.5.30(typescript@5.9.3)
+ vue: 3.5.30(typescript@6.0.2)
vite-dev-rpc@1.1.0(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)):
dependencies:
@@ -23074,13 +23315,13 @@ snapshots:
dependencies:
vite: 8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)
- vite-node@5.3.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2):
+ vite-node@5.3.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.2):
dependencies:
cac: 6.7.14
es-module-lexer: 2.0.0
obug: 2.1.1
pathe: 2.0.3
- vite: '@voidzero-dev/vite-plus-core@0.1.12(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)'
+ vite: '@voidzero-dev/vite-plus-core@0.1.12(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.2)'
transitivePeerDependencies:
- '@arethetypeswrong/core'
- '@tsdown/css'
@@ -23101,13 +23342,13 @@ snapshots:
- unplugin-unused
- yaml
- vite-node@5.3.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2):
+ vite-node@5.3.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.2):
dependencies:
cac: 6.7.14
es-module-lexer: 2.0.0
obug: 2.1.1
pathe: 2.0.3
- vite: '@voidzero-dev/vite-plus-core@0.1.12(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)'
+ vite: '@voidzero-dev/vite-plus-core@0.1.12(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.2)'
transitivePeerDependencies:
- '@arethetypeswrong/core'
- '@tsdown/css'
@@ -23128,7 +23369,7 @@ snapshots:
- unplugin-unused
- yaml
- vite-plugin-checker@0.12.0(@voidzero-dev/vite-plus-core@0.1.12(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2))(eslint@9.39.2(jiti@2.6.1))(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(typescript@5.9.3)(vue-tsc@3.2.6(typescript@5.9.3)):
+ vite-plugin-checker@0.12.0(@voidzero-dev/vite-plus-core@0.1.12(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.2))(eslint@9.39.2(jiti@2.6.1))(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(typescript@6.0.2)(vue-tsc@3.2.6(typescript@6.0.2)):
dependencies:
'@babel/code-frame': 7.29.0
chokidar: 4.0.3
@@ -23137,16 +23378,16 @@ snapshots:
picomatch: 4.0.3
tiny-invariant: 1.3.3
tinyglobby: 0.2.15
- vite: '@voidzero-dev/vite-plus-core@0.1.12(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)'
+ vite: '@voidzero-dev/vite-plus-core@0.1.12(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.2)'
vscode-uri: 3.1.0
optionalDependencies:
eslint: 9.39.2(jiti@2.6.1)
optionator: 0.9.4
oxlint: 1.56.0(oxlint-tsgolint@0.17.0)
- typescript: 5.9.3
- vue-tsc: 3.2.6(typescript@5.9.3)
+ typescript: 6.0.2
+ vue-tsc: 3.2.6(typescript@6.0.2)
- vite-plugin-checker@0.12.0(@voidzero-dev/vite-plus-core@0.1.12(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2))(eslint@9.39.2(jiti@2.6.1))(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(typescript@5.9.3)(vue-tsc@3.2.6(typescript@5.9.3)):
+ vite-plugin-checker@0.12.0(@voidzero-dev/vite-plus-core@0.1.12(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.2))(eslint@9.39.2(jiti@2.6.1))(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.17.0))(typescript@6.0.2)(vue-tsc@3.2.6(typescript@6.0.2)):
dependencies:
'@babel/code-frame': 7.29.0
chokidar: 4.0.3
@@ -23155,14 +23396,14 @@ snapshots:
picomatch: 4.0.3
tiny-invariant: 1.3.3
tinyglobby: 0.2.15
- vite: '@voidzero-dev/vite-plus-core@0.1.12(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)'
+ vite: '@voidzero-dev/vite-plus-core@0.1.12(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.2)'
vscode-uri: 3.1.0
optionalDependencies:
eslint: 9.39.2(jiti@2.6.1)
optionator: 0.9.4
oxlint: 1.56.0(oxlint-tsgolint@0.17.0)
- typescript: 5.9.3
- vue-tsc: 3.2.6(typescript@5.9.3)
+ typescript: 6.0.2
+ vue-tsc: 3.2.6(typescript@6.0.2)
vite-plugin-inspect@11.3.3(@nuxt/kit@4.3.1(magicast@0.5.2))(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)):
dependencies:
@@ -23211,7 +23452,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
- vite-plugin-vue-tracer@1.2.0(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3)):
+ vite-plugin-vue-tracer@1.2.0(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@6.0.2)):
dependencies:
estree-walker: 3.0.3
exsolve: 1.0.8
@@ -23219,9 +23460,9 @@ snapshots:
pathe: 2.0.3
source-map-js: 1.2.1
vite: 8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)
- vue: 3.5.30(typescript@5.9.3)
+ vue: 3.5.30(typescript@6.0.2)
- vite-plugin-vue-tracer@1.2.0(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3)):
+ vite-plugin-vue-tracer@1.2.0(vite@8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@6.0.2)):
dependencies:
estree-walker: 3.0.3
exsolve: 1.0.8
@@ -23229,13 +23470,13 @@ snapshots:
pathe: 2.0.3
source-map-js: 1.2.1
vite: 8.0.0(@types/node@25.0.10)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)
- vue: 3.5.30(typescript@5.9.3)
+ vue: 3.5.30(typescript@6.0.2)
- vite-plus@0.1.12(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(esbuild@0.27.3)(happy-dom@20.3.5)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@1.8.0))(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2):
+ vite-plus@0.1.12(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(esbuild@0.27.3)(happy-dom@20.3.5)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@1.8.0))(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2):
dependencies:
'@oxc-project/types': 0.115.0
- '@voidzero-dev/vite-plus-core': 0.1.12(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)
- '@voidzero-dev/vite-plus-test': 0.1.12(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(esbuild@0.27.3)(happy-dom@20.3.5)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@1.8.0))(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2)
+ '@voidzero-dev/vite-plus-core': 0.1.12(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(yaml@2.8.2)
+ '@voidzero-dev/vite-plus-test': 0.1.12(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(esbuild@0.27.3)(happy-dom@20.3.5)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@1.8.0))(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2)
cac: 6.7.14
cross-spawn: 7.0.6
oxfmt: 0.40.0
@@ -23311,9 +23552,9 @@ snapshots:
tsx: 4.21.0
yaml: 2.8.2
- vitest-environment-nuxt@1.0.1(@playwright/test@1.58.2)(@voidzero-dev/vite-plus-test@0.1.12(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(esbuild@0.27.3)(happy-dom@20.3.5)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@1.8.0))(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2))(@vue/test-utils@2.4.6)(happy-dom@20.3.5)(jsdom@27.4.0(@noble/hashes@1.8.0))(magicast@0.5.2)(playwright-core@1.58.2)(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)):
+ vitest-environment-nuxt@1.0.1(@playwright/test@1.58.2)(@voidzero-dev/vite-plus-test@0.1.12(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(esbuild@0.27.3)(happy-dom@20.3.5)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@1.8.0))(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2))(@vue/test-utils@2.4.6)(happy-dom@20.3.5)(jsdom@27.4.0(@noble/hashes@1.8.0))(magicast@0.5.2)(playwright-core@1.58.2)(typescript@6.0.2)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)):
dependencies:
- '@nuxt/test-utils': 4.0.0(@playwright/test@1.58.2)(@voidzero-dev/vite-plus-test@0.1.12(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(esbuild@0.27.3)(happy-dom@20.3.5)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@1.8.0))(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2))(@vue/test-utils@2.4.6)(happy-dom@20.3.5)(jsdom@27.4.0(@noble/hashes@1.8.0))(magicast@0.5.2)(playwright-core@1.58.2)(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
+ '@nuxt/test-utils': 4.0.0(@playwright/test@1.58.2)(@voidzero-dev/vite-plus-test@0.1.12(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(esbuild@0.27.3)(happy-dom@20.3.5)(jiti@2.6.1)(jsdom@27.4.0(@noble/hashes@1.8.0))(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2))(@vue/test-utils@2.4.6)(happy-dom@20.3.5)(jsdom@27.4.0(@noble/hashes@1.8.0))(magicast@0.5.2)(playwright-core@1.58.2)(typescript@6.0.2)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
transitivePeerDependencies:
- '@cucumber/cucumber'
- '@jest/globals'
@@ -23359,17 +23600,17 @@ snapshots:
vue-component-type-helpers@3.2.6: {}
- vue-data-ui@3.16.0(vue@3.5.30(typescript@5.9.3)):
+ vue-data-ui@3.16.5(vue@3.5.30(typescript@6.0.2)):
dependencies:
- vue: 3.5.30(typescript@5.9.3)
+ vue: 3.5.30(typescript@6.0.2)
- vue-demi@0.14.10(vue@3.5.30(typescript@5.9.3)):
+ vue-demi@0.14.10(vue@3.5.30(typescript@6.0.2)):
dependencies:
- vue: 3.5.30(typescript@5.9.3)
+ vue: 3.5.30(typescript@6.0.2)
vue-devtools-stub@0.1.0: {}
- vue-docgen-api@4.79.2(vue@3.5.30(typescript@5.9.3)):
+ vue-docgen-api@4.79.2(vue@3.5.30(typescript@6.0.2)):
dependencies:
'@babel/parser': 7.29.0
'@babel/types': 7.29.0
@@ -23382,8 +23623,8 @@ snapshots:
pug: 3.0.3
recast: 0.23.11
ts-map: 1.0.3
- vue: 3.5.30(typescript@5.9.3)
- vue-inbrowser-compiler-independent-utils: 4.71.1(vue@3.5.30(typescript@5.9.3))
+ vue: 3.5.30(typescript@6.0.2)
+ vue-inbrowser-compiler-independent-utils: 4.71.1(vue@3.5.30(typescript@6.0.2))
vue-i18n-extract@2.0.7:
dependencies:
@@ -23393,37 +23634,37 @@ snapshots:
is-valid-glob: 1.0.0
js-yaml: 4.1.1
- vue-i18n@11.2.8(vue@3.5.30(typescript@5.9.3)):
+ vue-i18n@11.2.8(vue@3.5.30(typescript@6.0.2)):
dependencies:
'@intlify/core-base': 11.2.8
'@intlify/shared': 11.2.8
'@vue/devtools-api': 6.6.4
- vue: 3.5.30(typescript@5.9.3)
+ vue: 3.5.30(typescript@6.0.2)
- vue-inbrowser-compiler-independent-utils@4.71.1(vue@3.5.30(typescript@5.9.3)):
+ vue-inbrowser-compiler-independent-utils@4.71.1(vue@3.5.30(typescript@6.0.2)):
dependencies:
- vue: 3.5.30(typescript@5.9.3)
+ vue: 3.5.30(typescript@6.0.2)
- vue-router@4.6.4(vue@3.5.30(typescript@5.9.3)):
+ vue-router@4.6.4(vue@3.5.30(typescript@6.0.2)):
dependencies:
'@vue/devtools-api': 6.6.4
- vue: 3.5.30(typescript@5.9.3)
+ vue: 3.5.30(typescript@6.0.2)
- vue-tsc@3.2.6(typescript@5.9.3):
+ vue-tsc@3.2.6(typescript@6.0.2):
dependencies:
'@volar/typescript': 2.4.28
'@vue/language-core': 3.2.6
- typescript: 5.9.3
+ typescript: 6.0.2
- vue@3.5.30(typescript@5.9.3):
+ vue@3.5.30(typescript@6.0.2):
dependencies:
'@vue/compiler-dom': 3.5.30
'@vue/compiler-sfc': 3.5.30
'@vue/runtime-dom': 3.5.30
- '@vue/server-renderer': 3.5.30(vue@3.5.30(typescript@5.9.3))
+ '@vue/server-renderer': 3.5.30(vue@3.5.30(typescript@6.0.2))
'@vue/shared': 3.5.30
optionalDependencies:
- typescript: 5.9.3
+ typescript: 6.0.2
w3c-keyname@2.2.8: {}
diff --git a/public/logo-light.svg b/public/logo-light.svg
new file mode 100644
index 0000000000..231a50c8c6
--- /dev/null
+++ b/public/logo-light.svg
@@ -0,0 +1,2 @@
+
+
diff --git a/public/logo-mark-light.svg b/public/logo-mark-light.svg
new file mode 100644
index 0000000000..88c5c05a23
--- /dev/null
+++ b/public/logo-mark-light.svg
@@ -0,0 +1,2 @@
+
+
diff --git a/scripts/compare-translations.ts b/scripts/compare-translations.ts
index d6ccc653be..c670995625 100644
--- a/scripts/compare-translations.ts
+++ b/scripts/compare-translations.ts
@@ -407,9 +407,6 @@ const run = async (): Promise => {
lang: 'en',
})
- // TODO: removing vacations entry key for temporal recharging page
- delete referenceContent.vacations
-
// $schema is a JSON Schema reference, not a translation key
delete referenceContent.$schema
diff --git a/scripts/generate-fixtures.ts b/scripts/generate-fixtures.ts
index c176a884d2..fdad17fc4a 100644
--- a/scripts/generate-fixtures.ts
+++ b/scripts/generate-fixtures.ts
@@ -183,7 +183,7 @@ function slimPackument(pkg: Record): Record {
const timeA = time[a]
const timeB = time[b]
if (!timeA || !timeB) return 0
- return new Date(timeB).getTime() - new Date(timeA).getTime()
+ return Date.parse(timeB) - Date.parse(timeA)
})
.slice(0, RECENT_VERSIONS_COUNT)
diff --git a/server/api/atproto/bluesky-comments.get.ts b/server/api/atproto/bluesky-comments.get.ts
index 27b330d0d1..bb5208ff5f 100644
--- a/server/api/atproto/bluesky-comments.get.ts
+++ b/server/api/atproto/bluesky-comments.get.ts
@@ -132,7 +132,7 @@ function parseThread(
if (parsed) replies.push(parsed)
}
}
- replies.sort((a, b) => new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime())
+ replies.sort((a, b) => Date.parse(a.createdAt) - Date.parse(b.createdAt))
}
return {
diff --git a/server/api/registry/analysis/[...pkg].get.ts b/server/api/registry/analysis/[...pkg].get.ts
index 940bc25925..3c23102dfd 100644
--- a/server/api/registry/analysis/[...pkg].get.ts
+++ b/server/api/registry/analysis/[...pkg].get.ts
@@ -3,15 +3,9 @@ import { PackageRouteParamsSchema } from '#shared/schemas/package'
import type {
PackageAnalysis,
ExtendedPackageJson,
- TypesPackageInfo,
CreatePackageInfo,
} from '#shared/utils/package-analysis'
-import {
- analyzePackage,
- getTypesPackageName,
- getCreatePackageName,
- hasBuiltInTypes,
-} from '#shared/utils/package-analysis'
+import { analyzePackage, getCreatePackageName } from '#shared/utils/package-analysis'
import {
getDevDependencySuggestion,
type DevDependencySuggestion,
@@ -23,13 +17,8 @@ import {
} from '#shared/utils/constants'
import { parseRepoUrl } from '#shared/utils/git-providers'
import { encodePackageName } from '#shared/utils/npm'
-import { flattenFileTree } from '#server/utils/import-resolver'
-import { getPackageFileTree } from '#server/utils/file-tree'
-import { getLatestVersion, getLatestVersionBatch } from 'fast-npm-meta'
-
-interface AnalysisPackageJson extends ExtendedPackageJson {
- readme?: string
-}
+import { fetchPackageWithTypesAndFiles } from '#server/utils/file-tree'
+import { getLatestVersionBatch } from 'fast-npm-meta'
export default defineCachedEventHandler(
async event => {
@@ -44,38 +33,7 @@ export default defineCachedEventHandler(
packageName: decodeURIComponent(rawPackageName),
version: rawVersion,
})
-
- // Fetch package data
- const encodedName = encodePackageName(packageName)
- const versionSuffix = version ? `/${version}` : '/latest'
- const pkg = await $fetch(
- `${NPM_REGISTRY}/${encodedName}${versionSuffix}`,
- )
-
- let typesPackage: TypesPackageInfo | undefined
- let files: Set | undefined
-
- // Only check for @types and files when the package doesn't ship its own types
- if (!hasBuiltInTypes(pkg)) {
- const typesPkgName = getTypesPackageName(packageName)
- const resolvedVersion = pkg.version ?? version ?? 'latest'
-
- // Fetch @types info and file tree in parallel — they are independent
- const [typesResult, fileTreeResult] = await Promise.allSettled([
- fetchTypesPackageInfo(typesPkgName),
- getPackageFileTree(packageName, resolvedVersion),
- ])
-
- if (typesResult.status === 'fulfilled') {
- typesPackage = typesResult.value
- }
- if (fileTreeResult.status === 'fulfilled') {
- files = flattenFileTree(fileTreeResult.value.tree)
- }
- }
-
- // Check for associated create-* package (e.g., vite -> create-vite, next -> create-next-app)
- // Only show if the packages are actually associated (same maintainers or same org)
+ const { pkg, typesPackage, files } = await fetchPackageWithTypesAndFiles(packageName, version)
const createPackage = await findAssociatedCreatePackage(packageName, pkg)
const analysis = analyzePackage(pkg, {
typesPackage,
@@ -107,21 +65,6 @@ export default defineCachedEventHandler(
},
)
-/**
- * Fetch @types package info including deprecation status using fast-npm-meta.
- * Returns undefined if the package doesn't exist.
- */
-async function fetchTypesPackageInfo(packageName: string): Promise {
- const result = await getLatestVersion(packageName, { metadata: true, throw: false })
- if ('error' in result) {
- return undefined
- }
- return {
- packageName,
- deprecated: result.deprecated,
- }
-}
-
/** Package metadata needed for association validation */
interface PackageWithMeta {
maintainers?: Array<{ name: string }>
diff --git a/server/api/registry/badge/[type]/[...pkg].get.ts b/server/api/registry/badge/[type]/[...pkg].get.ts
index 2ce404e381..aa6b0c4b10 100644
--- a/server/api/registry/badge/[type]/[...pkg].get.ts
+++ b/server/api/registry/badge/[type]/[...pkg].get.ts
@@ -6,12 +6,12 @@ import { PackageRouteParamsSchema } from '#shared/schemas/package'
import { CACHE_MAX_AGE_ONE_HOUR, ERROR_NPM_FETCH_FAILED } from '#shared/utils/constants'
import { fetchNpmPackage } from '#server/utils/npm'
import { assertValidPackageName } from '#shared/utils/npm'
+import { fetchPackageWithTypesAndFiles } from '#server/utils/file-tree'
import { handleApiError } from '#server/utils/error-handler'
const NPM_DOWNLOADS_API = 'https://api.npmjs.org/downloads/point'
const OSV_QUERY_API = 'https://api.osv.dev/v1/query'
const BUNDLEPHOBIA_API = 'https://bundlephobia.com/api/size'
-const NPMS_API = 'https://api.npms.io/v2/package'
const SafeStringSchema = v.pipe(v.string(), v.regex(/^[^<>"&]*$/, 'Invalid characters'))
const SafeColorSchema = v.pipe(
@@ -41,11 +41,9 @@ const COLORS = {
white: '#ffffff',
}
-const CHAR_WIDTH = 7
-const SHIELDS_CHAR_WIDTH = 6
-
const BADGE_PADDING_X = 8
const MIN_BADGE_TEXT_WIDTH = 40
+const FALLBACK_VALUE_EXTRA_PADDING_X = 8
const SHIELDS_LABEL_PADDING_X = 5
const BADGE_FONT_SHORTHAND = 'normal normal 400 11px Geist, system-ui, -apple-system, sans-serif'
@@ -53,6 +51,77 @@ const SHIELDS_FONT_SHORTHAND = 'normal normal 400 11px Verdana, Geneva, DejaVu S
let cachedCanvasContext: SKRSContext2D | null | undefined
+const NARROW_CHARS = new Set([' ', '!', '"', "'", '(', ')', '*', ',', '-', '.', ':', ';', '|'])
+const MEDIUM_CHARS = new Set([
+ '#',
+ '$',
+ '+',
+ '/',
+ '<',
+ '=',
+ '>',
+ '?',
+ '@',
+ '[',
+ '\\',
+ ']',
+ '^',
+ '_',
+ '`',
+ '{',
+ '}',
+ '~',
+])
+
+const FALLBACK_WIDTHS = {
+ default: {
+ narrow: 3,
+ medium: 5,
+ digit: 6,
+ uppercase: 7,
+ other: 6,
+ },
+ shieldsio: {
+ narrow: 3,
+ medium: 5,
+ digit: 6,
+ uppercase: 7,
+ other: 5.5,
+ },
+} as const
+
+function estimateTextWidth(text: string, fallbackFont: 'default' | 'shieldsio'): number {
+ // Heuristic coefficients tuned to keep fallback rendering close to canvas metrics.
+ const widths = FALLBACK_WIDTHS[fallbackFont]
+ let totalWidth = 0
+
+ for (const character of text) {
+ if (NARROW_CHARS.has(character)) {
+ totalWidth += widths.narrow
+ continue
+ }
+
+ if (MEDIUM_CHARS.has(character)) {
+ totalWidth += widths.medium
+ continue
+ }
+
+ if (/\d/.test(character)) {
+ totalWidth += widths.digit
+ continue
+ }
+
+ if (/[A-Z]/.test(character)) {
+ totalWidth += widths.uppercase
+ continue
+ }
+
+ totalWidth += widths.other
+ }
+
+ return Math.max(1, Math.round(totalWidth))
+}
+
function getCanvasContext(): SKRSContext2D | null {
if (cachedCanvasContext !== undefined) {
return cachedCanvasContext
@@ -83,14 +152,17 @@ function measureTextWidth(text: string, font: string): number | null {
return null
}
-function measureDefaultTextWidth(text: string): number {
+function measureDefaultTextWidth(text: string, fallbackExtraPadding = 0): number {
const measuredWidth = measureTextWidth(text, BADGE_FONT_SHORTHAND)
if (measuredWidth !== null) {
return Math.max(MIN_BADGE_TEXT_WIDTH, measuredWidth + BADGE_PADDING_X * 2)
}
- return Math.max(MIN_BADGE_TEXT_WIDTH, Math.round(text.length * CHAR_WIDTH) + BADGE_PADDING_X * 2)
+ return Math.max(
+ MIN_BADGE_TEXT_WIDTH,
+ estimateTextWidth(text, 'default') + BADGE_PADDING_X * 2 + fallbackExtraPadding,
+ )
}
function escapeXML(str: string): string {
@@ -125,7 +197,7 @@ function measureShieldsTextLength(text: string): number {
return Math.max(1, measuredWidth)
}
- return Math.max(1, Math.round(text.length * SHIELDS_CHAR_WIDTH))
+ return estimateTextWidth(text, 'shieldsio')
}
function renderDefaultBadgeSvg(params: {
@@ -139,7 +211,7 @@ function renderDefaultBadgeSvg(params: {
const { finalColor, finalLabel, finalLabelColor, finalValue, labelTextColor, valueTextColor } =
params
const leftWidth = finalLabel.trim().length === 0 ? 0 : measureDefaultTextWidth(finalLabel)
- const rightWidth = measureDefaultTextWidth(finalValue)
+ const rightWidth = measureDefaultTextWidth(finalValue, FALLBACK_VALUE_EXTRA_PADDING_X)
const totalWidth = leftWidth + rightWidth
const height = 20
const escapedLabel = escapeXML(finalLabel)
@@ -253,16 +325,6 @@ async function fetchDownloads(
}
}
-async function fetchNpmsScore(packageName: string) {
- try {
- const response = await fetch(`${NPMS_API}/${encodeURIComponent(packageName)}`)
- const data = await response.json()
- return data.score
- } catch {
- return null
- }
-}
-
async function fetchVulnerabilities(packageName: string, version: string): Promise {
try {
const response = await fetch(OSV_QUERY_API, {
@@ -377,12 +439,46 @@ const badgeStrategies = {
return { label: 'node', value: nodeVersion, color: COLORS.yellow }
},
- 'types': async (pkgData: globalThis.Packument) => {
- const latest = getLatestVersion(pkgData)
- const versionData = latest ? pkgData.versions?.[latest] : undefined
- const hasTypes = !!(versionData?.types || versionData?.typings)
- const value = hasTypes ? 'included' : 'missing'
- const color = hasTypes ? COLORS.blue : COLORS.slate
+ 'types': async (pkgData: globalThis.Packument, requestedVersion?: string) => {
+ const targetVersion = requestedVersion ?? getLatestVersion(pkgData)
+ const versionData = targetVersion ? pkgData.versions?.[targetVersion] : undefined
+
+ if (versionData && hasBuiltInTypes(versionData)) {
+ return { label: 'types', value: 'included', color: COLORS.blue }
+ }
+
+ const { pkg, typesPackage, files } = await fetchPackageWithTypesAndFiles(
+ pkgData.name,
+ targetVersion,
+ )
+
+ const typesStatus = detectTypesStatus(pkg, typesPackage, files)
+
+ let value: string
+ let color: string
+
+ switch (typesStatus.kind) {
+ case 'included':
+ value = 'included'
+ color = COLORS.blue
+ break
+
+ case '@types':
+ value = '@types'
+ color = COLORS.purple
+ if (typesStatus.deprecated) {
+ value += ' (deprecated)'
+ color = COLORS.red
+ }
+ break
+
+ case 'none':
+ default:
+ value = 'missing'
+ color = COLORS.slate
+ break
+ }
+
return { label: 'types', value, color }
},
@@ -400,30 +496,6 @@ const badgeStrategies = {
color: isDeprecated ? COLORS.red : COLORS.green,
}
},
-
- 'quality': async (pkgData: globalThis.Packument) => {
- const score = await fetchNpmsScore(pkgData.name)
- const value = score ? `${Math.round(score.detail.quality * 100)}%` : 'unknown'
- return { label: 'quality', value, color: COLORS.purple }
- },
-
- 'popularity': async (pkgData: globalThis.Packument) => {
- const score = await fetchNpmsScore(pkgData.name)
- const value = score ? `${Math.round(score.detail.popularity * 100)}%` : 'unknown'
- return { label: 'popularity', value, color: COLORS.cyan }
- },
-
- 'maintenance': async (pkgData: globalThis.Packument) => {
- const score = await fetchNpmsScore(pkgData.name)
- const value = score ? `${Math.round(score.detail.maintenance * 100)}%` : 'unknown'
- return { label: 'maintenance', value, color: COLORS.yellow }
- },
-
- 'score': async (pkgData: globalThis.Packument) => {
- const score = await fetchNpmsScore(pkgData.name)
- const value = score ? `${Math.round(score.final * 100)}%` : 'unknown'
- return { label: 'score', value, color: COLORS.blue }
- },
}
const BadgeTypeSchema = v.picklist(Object.keys(badgeStrategies) as [string, ...string[]])
diff --git a/server/middleware/canonical-redirects.global.ts b/server/middleware/canonical-redirects.global.ts
index f4087858f0..e9139a8493 100644
--- a/server/middleware/canonical-redirects.global.ts
+++ b/server/middleware/canonical-redirects.global.ts
@@ -19,6 +19,7 @@ const pages = [
'/about',
'/accessibility',
'/blog',
+ '/brand',
'/compare',
'/org',
'/package',
diff --git a/server/utils/file-tree.ts b/server/utils/file-tree.ts
index 76bbf259ea..50e21d439c 100644
--- a/server/utils/file-tree.ts
+++ b/server/utils/file-tree.ts
@@ -1,3 +1,7 @@
+import { getLatestVersion } from 'fast-npm-meta'
+import { flattenFileTree } from '#server/utils/import-resolver'
+import type { ExtendedPackageJson, TypesPackageInfo } from '#shared/utils/package-analysis'
+
/**
* Fetch the file tree from jsDelivr API.
* Returns a nested tree structure of all files in the package.
@@ -83,3 +87,62 @@ export async function getPackageFileTree(
tree,
}
}
+
+/**
+ * Fetch @types package info including deprecation status using fast-npm-meta.
+ * Returns undefined if the package doesn't exist.
+ */
+async function fetchTypesPackageInfo(packageName: string): Promise {
+ const result = await getLatestVersion(packageName, { metadata: true, throw: false })
+ if ('error' in result) {
+ return undefined
+ }
+ return {
+ packageName,
+ deprecated: result.deprecated,
+ }
+}
+
+interface AnalysisPackageJson extends ExtendedPackageJson {
+ readme?: string
+}
+
+export async function fetchPackageWithTypesAndFiles(
+ packageName: string,
+ version?: string,
+): Promise<{
+ pkg: AnalysisPackageJson
+ typesPackage?: TypesPackageInfo
+ files?: Set
+}> {
+ // Fetch main package data
+ const encodedName = encodePackageName(packageName)
+ const versionSuffix = version ? `/${version}` : '/latest'
+
+ const pkg = await $fetch(`${NPM_REGISTRY}/${encodedName}${versionSuffix}`)
+
+ let typesPackage: TypesPackageInfo | undefined
+ let files: Set | undefined
+
+ // Only attempt to fetch @types + file tree when the package doesn't ship its own types
+ if (!hasBuiltInTypes(pkg)) {
+ const typesPkgName = getTypesPackageName(packageName)
+ const resolvedVersion = pkg.version ?? version ?? 'latest'
+
+ // Fetch both in parallel — they're independent
+ const [typesResult, fileTreeResult] = await Promise.allSettled([
+ fetchTypesPackageInfo(typesPkgName),
+ getPackageFileTree(packageName, resolvedVersion),
+ ])
+
+ if (typesResult.status === 'fulfilled') {
+ typesPackage = typesResult.value
+ }
+
+ if (fileTreeResult.status === 'fulfilled') {
+ files = flattenFileTree(fileTreeResult.value.tree)
+ }
+ }
+
+ return { pkg, typesPackage, files }
+}
diff --git a/server/utils/readme.ts b/server/utils/readme.ts
index 67345a65cd..b5befe67b7 100644
--- a/server/utils/readme.ts
+++ b/server/utils/readme.ts
@@ -458,6 +458,17 @@ function renderFrontmatterTable(data: Record): string {
return `\n`
}
+// Extract and preserve allowed attributes from HTML heading tags
+function extractHeadingAttrs(attrsString: string): string {
+ if (!attrsString) return ''
+ const preserved: string[] = []
+ const alignMatch = /\balign=(["']?)([^"'\s>]+)\1/i.exec(attrsString)
+ if (alignMatch?.[2]) {
+ preserved.push(`align="${alignMatch[2]}"`)
+ }
+ return preserved.length > 0 ? ` ${preserved.join(' ')}` : ''
+}
+
export async function renderReadmeHtml(
content: string,
packageName: string,
@@ -530,17 +541,6 @@ export async function renderReadmeHtml(
return processHeading(depth, displayHtml, plainText, slugSource)
}
- // Extract and preserve allowed attributes from HTML heading tags
- function extractHeadingAttrs(attrsString: string): string {
- if (!attrsString) return ''
- const preserved: string[] = []
- const alignMatch = /\balign=(["']?)([^"'\s>]+)\1/i.exec(attrsString)
- if (alignMatch?.[2]) {
- preserved.push(`align="${alignMatch[2]}"`)
- }
- return preserved.length > 0 ? ` ${preserved.join(' ')}` : ''
- }
-
// Intercept HTML headings so they get id, TOC entry, and correct semantic level.
// Also intercept raw HTML tags so playground links are collected in the same pass.
const htmlHeadingRe = /]*)?>([\s\S]*?)<\/h\1>/gi
diff --git a/shared/types/npm-registry.ts b/shared/types/npm-registry.ts
index 424a84ae7d..3114ad015f 100644
--- a/shared/types/npm-registry.ts
+++ b/shared/types/npm-registry.ts
@@ -128,7 +128,6 @@ export interface NpmSearchResponse {
export interface NpmSearchResult {
package: NpmSearchPackage
- score?: NpmSearchScore
searchScore?: number
/** Download counts (weekly/monthly) */
downloads?: {
@@ -189,15 +188,6 @@ export interface NpmSearchPackage {
license?: string
}
-export interface NpmSearchScore {
- final: number
- detail: {
- quality: number
- popularity: number
- maintenance: number
- }
-}
-
/**
* Attestations/provenance info on package version dist
* Present when package was published with provenance
diff --git a/shared/types/preferences.ts b/shared/types/preferences.ts
index f23f61c8cb..886365aa41 100644
--- a/shared/types/preferences.ts
+++ b/shared/types/preferences.ts
@@ -15,10 +15,6 @@ export type ColumnId =
| 'updated'
| 'maintainers'
| 'keywords'
- | 'qualityScore'
- | 'popularityScore'
- | 'maintenanceScore'
- | 'combinedScore'
| 'security'
| 'selection'
@@ -45,34 +41,6 @@ export const DEFAULT_COLUMNS: ColumnConfig[] = [
{ id: 'updated', visible: true, sortable: true, width: '120px' },
{ id: 'maintainers', visible: false, sortable: false, width: '150px' },
{ id: 'keywords', visible: false, sortable: false, width: '200px' },
- {
- id: 'qualityScore',
- visible: false,
- sortable: true,
- width: '100px',
- disabled: true,
- },
- {
- id: 'popularityScore',
- visible: false,
- sortable: true,
- width: '100px',
- disabled: true,
- },
- {
- id: 'maintenanceScore',
- visible: false,
- sortable: true,
- width: '100px',
- disabled: true,
- },
- {
- id: 'combinedScore',
- visible: false,
- sortable: true,
- width: '100px',
- disabled: true,
- },
{
id: 'security',
visible: false,
@@ -90,10 +58,6 @@ export type SortKey =
| 'downloads-year'
| 'updated'
| 'name'
- | 'quality'
- | 'popularity'
- | 'maintenance'
- | 'score'
| 'relevance'
export type SortDirection = 'asc' | 'desc'
@@ -112,14 +76,6 @@ export type SortOption =
| 'updated-asc'
| 'name-asc'
| 'name-desc'
- | 'quality-desc'
- | 'quality-asc'
- | 'popularity-desc'
- | 'popularity-asc'
- | 'maintenance-desc'
- | 'maintenance-asc'
- | 'score-desc'
- | 'score-asc'
| 'relevance-desc'
| 'relevance-asc'
@@ -141,13 +97,6 @@ export const SORT_KEYS: SortKeyConfig[] = [
{ key: 'downloads-year', defaultDirection: 'desc', disabled: true },
{ key: 'updated', defaultDirection: 'desc' },
{ key: 'name', defaultDirection: 'asc' },
- // quality/popularity/maintenance: npm returns 1 for all, Algolia returns synthetic values.
- // Neither provider produces meaningful values for these.
- { key: 'quality', defaultDirection: 'desc', disabled: true },
- { key: 'popularity', defaultDirection: 'desc', disabled: true },
- { key: 'maintenance', defaultDirection: 'desc', disabled: true },
- // score.final === searchScore (identical to relevance), redundant sort key
- { key: 'score', defaultDirection: 'desc', disabled: true },
]
/**
@@ -178,10 +127,6 @@ const VALID_SORT_KEYS = new Set([
'downloads-year',
'updated',
'name',
- 'quality',
- 'popularity',
- 'maintenance',
- 'score',
])
/** Parse a SortOption into key and direction */
diff --git a/shared/utils/atproto.ts b/shared/utils/atproto.ts
index 84625b6555..45f7779973 100644
--- a/shared/utils/atproto.ts
+++ b/shared/utils/atproto.ts
@@ -15,7 +15,7 @@ const simpleHash = (str: string): number => {
// Parse date from frontmatter, add slug-path entropy for same-date collision resolution
export const generateBlogTID = (dateString: string, slug: string): string => {
- let timestamp = new Date(dateString).getTime()
+ let timestamp = Date.parse(dateString)
if (timestamp % ONE_DAY_MILLISECONDS === 0) {
const offset = simpleHash(slug) % 1000000
@@ -28,4 +28,4 @@ export const generateBlogTID = (dateString: string, slug: string): string => {
// Using our release date as the tid for the publication
export const npmxPublicationRkey = () =>
- TID.create(new Date('2026-03-03').getTime() * MS_TO_MICROSECONDS, TID_CLOCK_ID)
+ TID.create(Date.parse('2026-03-03') * MS_TO_MICROSECONDS, TID_CLOCK_ID)
diff --git a/shared/utils/git-providers.ts b/shared/utils/git-providers.ts
index cf1277fa53..803fc6e134 100644
--- a/shared/utils/git-providers.ts
+++ b/shared/utils/git-providers.ts
@@ -296,7 +296,7 @@ export function normalizeGitUrl(input: string): string | null {
const url = input
.trim()
.replace(/^git\+/, '')
- .replace(/\.git$/, '')
+ .replace(/\.git(?=[/#?]|$)/i, '')
.replace(/(^|\/)[^/]+?@/, '$1') // remove "user@" from "ssh://user@host.com:..."
.replace(/(\.[^./]+?):/, '$1/') // change ".com:" to ".com/" from "ssh://user@host.com:..."
.replace(/^git:\/\//, 'https://')
diff --git a/shared/utils/package-analysis.ts b/shared/utils/package-analysis.ts
index 18908c3832..d9c0a39f15 100644
--- a/shared/utils/package-analysis.ts
+++ b/shared/utils/package-analysis.ts
@@ -324,19 +324,10 @@ export function detectTypesStatus(
typesPackageInfo?: TypesPackageInfo,
files?: Set,
): TypesStatus {
- // Check for built-in types
- if (pkg.types || pkg.typings) {
+ if (hasBuiltInTypes(pkg)) {
return { kind: 'included' }
}
- // Check exports field for types
- if (pkg.exports) {
- const exportInfo = analyzeExports(pkg.exports)
- if (exportInfo.hasTypes) {
- return { kind: 'included' }
- }
- }
-
// Check for implicit types by deriving expected declaration file paths from
// entry points (e.g. .d.mts for .mjs) and checking if they exist in the package
if (files && hasImplicitTypesForEntryPoints(pkg, files)) {
diff --git a/test/e2e/badge.spec.ts b/test/e2e/badge.spec.ts
index 4cf8a33d37..c1272f58cb 100644
--- a/test/e2e/badge.spec.ts
+++ b/test/e2e/badge.spec.ts
@@ -29,14 +29,8 @@ test.describe('badge API', () => {
'created': 'created',
'maintainers': 'maintainers',
'deprecated': 'status',
- 'quality': 'quality',
- 'popularity': 'popularity',
- 'maintenance': 'maintenance',
- 'score': 'score',
}
- const percentageTypes = new Set(['quality', 'popularity', 'maintenance', 'score'])
-
for (const [type, expectedLabel] of Object.entries(badgeMap)) {
test.describe(`${type} badge`, () => {
test('renders correct label', async ({ page, baseURL }) => {
@@ -56,12 +50,12 @@ test.describe('badge API', () => {
})
test('explicit version badge renders successfully', async ({ page, baseURL }) => {
- const url = toLocalUrl(baseURL, `/api/registry/badge/${type}/nuxt/v/3.12.0`)
+ const url = toLocalUrl(baseURL, `/api/registry/badge/${type}/nuxt/v/3.21.0`)
const { response, body } = await fetchBadge(page, url)
expect(response.status()).toBe(200)
if (type === 'version') {
- expect(body).toContain('v3.12.0')
+ expect(body).toContain('v3.21.0')
}
})
@@ -73,15 +67,6 @@ test.describe('badge API', () => {
expect(body).toContain(packageName)
expect(body).not.toContain(expectedLabel)
})
-
- if (percentageTypes.has(type)) {
- test('contains percentage value', async ({ page, baseURL }) => {
- const url = toLocalUrl(baseURL, `/api/registry/badge/${type}/vue`)
- const { body } = await fetchBadge(page, url)
-
- expect(body).toMatch(/\d+%|unknown/)
- })
- }
})
}
@@ -100,6 +85,25 @@ test.describe('badge API', () => {
expect(body).toContain('active')
})
+
+ test('types badge shows @types badge', async ({ page, baseURL }) => {
+ const url = toLocalUrl(baseURL, '/api/registry/badge/types/is-odd')
+ const { body } = await fetchBadge(page, url)
+
+ expect(body).toContain('@types')
+ expect(body).not.toContain('missing')
+ })
+
+ test('types badge shows included badge when types not declared explicitly', async ({
+ page,
+ baseURL,
+ }) => {
+ const url = toLocalUrl(baseURL, '/api/registry/badge/types/nano-stringify-object')
+ const { body } = await fetchBadge(page, url)
+
+ expect(body).toContain('included')
+ expect(body).not.toContain('missing')
+ })
})
test('custom labelColor parameter is applied to SVG', async ({ page, baseURL }) => {
diff --git a/test/fixtures/jsdelivr/nano-stringify-object.json b/test/fixtures/jsdelivr/nano-stringify-object.json
new file mode 100644
index 0000000000..88617d6be4
--- /dev/null
+++ b/test/fixtures/jsdelivr/nano-stringify-object.json
@@ -0,0 +1,48 @@
+{
+ "type": "npm",
+ "name": "nano-stringify-object",
+ "version": "0.0.0",
+ "default": null,
+ "files": [
+ {
+ "type": "directory",
+ "name": "dist",
+ "files": [
+ {
+ "type": "file",
+ "name": "index.d.mts",
+ "hash": "miLdJwbJG1quJbUdHplSpmv+/7F8rHZM+kVXXRdz9W0=",
+ "size": 1192
+ },
+ {
+ "type": "file",
+ "name": "index.mjs",
+ "hash": "jznEg84ts4a5VCzdpfQViYnTBWoREZeolfbHUVtAymA=",
+ "size": 5731
+ }
+ ]
+ },
+ {
+ "type": "file",
+ "name": "LICENSE",
+ "hash": "GxzKussvQB30SBOW+2S33DnejHW8yBDc3jxk/WDXyzM=",
+ "size": 1221
+ },
+ {
+ "type": "file",
+ "name": "package.json",
+ "hash": "1Z382Cx0/ZycKM2TUBZlLWHt/RB/z00gOfwkt8WyPG4=",
+ "size": 639
+ },
+ {
+ "type": "file",
+ "name": "README.md",
+ "hash": "47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=",
+ "size": 0
+ }
+ ],
+ "links": {
+ "stats": "https://data.jsdelivr.com/v1/stats/packages/npm/nano-stringify-object@0.0.0",
+ "entrypoints": "https://data.jsdelivr.com/v1/packages/npm/nano-stringify-object@0.0.0/entrypoints"
+ }
+}
diff --git a/test/fixtures/mock-routes.cjs b/test/fixtures/mock-routes.cjs
index bd5527246b..3b2999313e 100644
--- a/test/fixtures/mock-routes.cjs
+++ b/test/fixtures/mock-routes.cjs
@@ -373,36 +373,6 @@ function matchBundlephobiaApi(urlString) {
return null
}
-/**
- * @param {string} urlString
- * @returns {MockResponse | null}
- */
-function matchNpmsApi(urlString) {
- const url = new URL(urlString)
- const pathname = decodeURIComponent(url.pathname)
-
- const packageMatch = pathname.match(/^\/v2\/package\/(.+)$/)
- if (packageMatch && packageMatch[1]) {
- const packageName = packageMatch[1]
- return json({
- analyzedAt: new Date().toISOString(),
- collected: {
- metadata: { name: packageName },
- },
- score: {
- final: 0.75,
- detail: {
- quality: 0.8,
- popularity: 0.7,
- maintenance: 0.75,
- },
- },
- })
- }
-
- return null
-}
-
/**
* @param {string} _urlString
* @returns {MockResponse | null}
@@ -422,6 +392,12 @@ function matchJsdelivrDataApi(urlString) {
const packageMatch = pathname.match(/^\/v1\/packages\/npm\/(.+)$/)
if (packageMatch && packageMatch[1]) {
const parsed = parseScopedPackage(packageMatch[1])
+
+ const fixture = readFixture(`jsdelivr/${parsed.name}.json`)
+ if (fixture) {
+ return json(fixture)
+ }
+
return json({
type: 'npm',
name: parsed.name,
@@ -534,7 +510,6 @@ const routes = [
{ name: 'fast-npm-meta', pattern: 'https://npm.antfu.dev/**', match: matchFastNpmMeta },
{ name: 'JSR registry', pattern: 'https://jsr.io/**', match: matchJsrRegistry },
{ name: 'Bundlephobia API', pattern: 'https://bundlephobia.com/**', match: matchBundlephobiaApi },
- { name: 'npms.io API', pattern: 'https://api.npms.io/**', match: matchNpmsApi },
{ name: 'jsdelivr CDN', pattern: 'https://cdn.jsdelivr.net/**', match: matchJsdelivrCdn },
{
name: 'jsdelivr Data API',
diff --git a/test/fixtures/npm-registry/packuments/@types/is-odd.json b/test/fixtures/npm-registry/packuments/@types/is-odd.json
new file mode 100644
index 0000000000..327bb2817f
--- /dev/null
+++ b/test/fixtures/npm-registry/packuments/@types/is-odd.json
@@ -0,0 +1,341 @@
+{
+ "_id": "@types/is-odd",
+ "_rev": "357-6aea66bbc40695119f00465c0fa53de3",
+ "name": "@types/is-odd",
+ "dist-tags": {
+ "ts2.0": "3.0.0",
+ "ts2.1": "3.0.0",
+ "ts2.2": "3.0.0",
+ "ts2.3": "3.0.0",
+ "ts2.4": "3.0.0",
+ "ts2.5": "3.0.0",
+ "ts2.6": "3.0.0",
+ "ts2.7": "3.0.0",
+ "ts2.8": "3.0.0",
+ "ts2.9": "3.0.0",
+ "ts3.0": "3.0.0",
+ "ts3.1": "3.0.0",
+ "ts3.2": "3.0.0",
+ "ts3.3": "3.0.0",
+ "ts3.4": "3.0.0",
+ "ts3.5": "3.0.0",
+ "ts3.6": "3.0.0",
+ "ts3.7": "3.0.0",
+ "ts3.8": "3.0.1",
+ "ts3.9": "3.0.1",
+ "ts4.0": "3.0.1",
+ "ts4.1": "3.0.1",
+ "ts4.2": "3.0.1",
+ "ts4.3": "3.0.1",
+ "ts4.4": "3.0.1",
+ "ts5.8": "3.0.4",
+ "ts5.7": "3.0.4",
+ "latest": "3.0.4",
+ "ts4.5": "3.0.4",
+ "ts4.6": "3.0.4",
+ "ts4.7": "3.0.4",
+ "ts4.8": "3.0.4",
+ "ts4.9": "3.0.4",
+ "ts5.0": "3.0.4",
+ "ts5.1": "3.0.4",
+ "ts5.2": "3.0.4",
+ "ts5.3": "3.0.4",
+ "ts5.4": "3.0.4",
+ "ts5.5": "3.0.4",
+ "ts5.9": "3.0.4",
+ "ts5.6": "3.0.4",
+ "ts6.0": "3.0.4"
+ },
+ "versions": {
+ "3.0.0": {
+ "name": "@types/is-odd",
+ "version": "3.0.0",
+ "license": "MIT",
+ "_id": "@types/is-odd@3.0.0",
+ "maintainers": [
+ {
+ "name": "types",
+ "email": "ts-npm-types@microsoft.com"
+ }
+ ],
+ "contributors": [
+ {
+ "url": "https://github.com/adamzerella",
+ "name": " Adam Zerella",
+ "githubUsername": "adamzerella"
+ }
+ ],
+ "dist": {
+ "shasum": "861b26fa31e656354bb05d63254091f734c461b5",
+ "tarball": "https://registry.npmjs.org/@types/is-odd/-/is-odd-3.0.0.tgz",
+ "fileCount": 4,
+ "integrity": "sha512-XfoBBgqc9DYRWo0V6clOC9cDy9KYELqgWwyulwCkv8/6Hlnd25XbDXGGnWYqOr3GUYIwqp4/gqm7/RtCZvqOJA==",
+ "signatures": [
+ {
+ "sig": "MEUCIQDCb3RyeOCBQWvvgk/slsNiLZrw352GCFOXn7BvVT+33gIgfYjvWpa8EI/H67e8ndZkZLz93oN/dRVTLqnnm1d/1bM=",
+ "keyid": "SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"
+ }
+ ],
+ "unpackedSize": 2712,
+ "npm-signature": "-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJccLErCRA9TVsSAnZWagAAQhcP/2Ab+nx4IOo4BGdIySnD\nBONPypFkgSzUa29B81x0SYuFLk9M6lgVhcHLM6s62/HlTDMgT6MHFJdaIHcg\n9xvm/ROaBeKxKcm/iP2yS8OzMZ4GTzNc8t/r1w1GPrUGw5d/3GuEPktSlA3o\nUoVg9tc+QIMog46UGmcXARX6Hv81UGFqHUiV0JgRWQNLvTlUyXFpcpE1esyB\njumZDFuH+E9Bcj/k+DYy+G12lKhMHmTwLOMBN5YI9Cl3dNgnujcFbpKXCf3s\nYBKxjrWblz1l3eT1hk24KRhpOnUm262Y/v1axSeA2l3xxO/feg7MWf9V0fHZ\ndVDa4QBK+w2yt+0rNLJ0I0EqOxk7lMnxLRbbbBRSf4iwiwrzOVAxqwCCG2MW\nRj6ZAXf0/girV4/tXxFZX6maZVWXRiEEKRVWOFuHPAozp6Sdl8dpB8IXjKn6\n4vbGfDqqN2VMLPAfTtevEaZJDM+1/cnpcJSYRFbuzxxG1a9XU75hWNMzOvDZ\n/YhAmtTxNrNNux9DDVtifg0VoIBbIMUZ90/alhaczf0P2yvA5pJ2ktPHumSh\ne0RaiSu70C+ye2MHraEV9/uBoq+U1/ct6XPt1iYE1vQqtc+jf3nBazSDumpA\n2UXV4kmbHCUgg1a/a7xQH7lRgip+Sx776sv3ljRWmb2QUdlzI1gbipsUIZAA\n08K4\r\n=/LEL\r\n-----END PGP SIGNATURE-----\r\n"
+ },
+ "main": "",
+ "types": "index",
+ "scripts": {},
+ "_npmUser": {
+ "name": "types",
+ "email": "ts-npm-types@microsoft.com"
+ },
+ "repository": {
+ "url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git",
+ "type": "git",
+ "directory": "types/is-odd"
+ },
+ "description": "TypeScript definitions for is-odd",
+ "directories": {},
+ "dependencies": {},
+ "_hasShrinkwrap": false,
+ "typeScriptVersion": "2.0",
+ "_npmOperationalInternal": {
+ "tmp": "tmp/is-odd_3.0.0_1550889259065_0.09125334321631584",
+ "host": "s3://npm-registry-packages"
+ },
+ "typesPublisherContentHash": "1dc04627cea88eece89c95a0aed7905067a849634ee4f4bc84b23fa135d0dd02"
+ },
+ "3.0.1": {
+ "name": "@types/is-odd",
+ "version": "3.0.1",
+ "license": "MIT",
+ "_id": "@types/is-odd@3.0.1",
+ "maintainers": [
+ {
+ "name": "types",
+ "email": "ts-npm-types@microsoft.com"
+ }
+ ],
+ "contributors": [
+ {
+ "url": "https://github.com/DefinitelyTyped",
+ "name": "DefinitelyTyped",
+ "githubUsername": "DefinitelyTyped"
+ }
+ ],
+ "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/is-odd",
+ "dist": {
+ "shasum": "b43a16362855c86db3c4df59e36b6eb3e44f555b",
+ "tarball": "https://registry.npmjs.org/@types/is-odd/-/is-odd-3.0.1.tgz",
+ "fileCount": 4,
+ "integrity": "sha512-mY+bL1FNKoF6xEN87ayz2Xk1O5L5L4v0KKheja7bWcqTD3je1w0nYzDVJ3W/bTtzkHJuqEb0UAFANtF5cI2wBg==",
+ "signatures": [
+ {
+ "sig": "MEUCIQCIF54WCx1KAczN/AuO1k/pC1b6pj4o1a6FVbyunJ51BgIgcqi0fG9vJU1hms3h9IUwrrMJVbBMNlH+G4vPbyDsUf4=",
+ "keyid": "SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"
+ }
+ ],
+ "unpackedSize": 3272,
+ "npm-signature": "-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhxQ2wCRA9TVsSAnZWagAAPhsP/3HOZ/uL7BMK+rZAXIdE\n0wy77RIsTo/+ZCWlJ3MNPWocIBi+eVfFmRkEIxnD3u9+EMOjZl10Q3rKlX/D\n6Zu4PDIBIUGU0p6WqdOqAMxHIGbehid+DG8RbgdcZw72QDCztPzPEwYDd3lE\nuaANy3qdPDdN5knlN0QvrJuiU9I++bCgEBWIXuiGTddeQOQXbitEBP7D7Q0E\n+PRYWlGXUjb3YiJgrZJfemEUfvntoqgOa1mPsM9crfo4+tzb5q8H4AEUhpd3\nZyYNxRZKsEN1MpA/i8KjwdO4P2zFofFgvmw/umU2+7/ACD86lYwpII/N26VB\nBlWaZXOPKxsX1uHZSmSI2Z1d6uE6PVSNP9R2fq7KuMWOkhnTb/U39uYBlJHE\nW0SCmMKIz/+TQP83sIH7LKBZmp4hft6UxIoL2LkOTStp7ibAw+rCbPA18NPl\nfMdcCQuHoY2bNHYa87/0ecOFke8JKLkI3DY1AwK+6h9WIX9cOV4MJXl/hXhG\nQiL7NIZ25XfWbqBTfrCtHInxd0e8X1hvR7OytDsyQ6ruAmZqWqNWIjhcLSYL\nGS9wahiPysJcRBxvKiYAfhd8wwUmi/ObbczqygNJqNMcoUZLzNd+AHZSnmlv\nYgU6p6lDs4aOeAcG7moR/+0Pe+OpZwnE0ngkQGLisG/YVayO+cBHLorBkQvc\nBTFo\r\n=oVZZ\r\n-----END PGP SIGNATURE-----\r\n"
+ },
+ "main": "",
+ "types": "index.d.ts",
+ "scripts": {},
+ "_npmUser": {
+ "name": "types",
+ "email": "ts-npm-types@microsoft.com"
+ },
+ "repository": {
+ "url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git",
+ "type": "git",
+ "directory": "types/is-odd"
+ },
+ "description": "TypeScript definitions for is-odd",
+ "directories": {},
+ "dependencies": {},
+ "_hasShrinkwrap": false,
+ "typeScriptVersion": "3.8",
+ "_npmOperationalInternal": {
+ "tmp": "tmp/is-odd_3.0.1_1640304047958_0.02408279906546351",
+ "host": "s3://npm-registry-packages"
+ },
+ "typesPublisherContentHash": "cfeed0da2d9c42717cef03273f341ce6f4edd16f2adf2bacbf13bc82214bfca7"
+ },
+ "3.0.2": {
+ "name": "@types/is-odd",
+ "version": "3.0.2",
+ "license": "MIT",
+ "_id": "@types/is-odd@3.0.2",
+ "maintainers": [
+ {
+ "name": "types",
+ "email": "ts-npm-types@microsoft.com"
+ }
+ ],
+ "contributors": [
+ {
+ "url": "https://github.com/DefinitelyTyped",
+ "name": "DefinitelyTyped",
+ "githubUsername": "DefinitelyTyped"
+ }
+ ],
+ "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/is-odd",
+ "dist": {
+ "shasum": "064ccdfef0cba1f8597e2ec0eba0802fc6aba743",
+ "tarball": "https://registry.npmjs.org/@types/is-odd/-/is-odd-3.0.2.tgz",
+ "fileCount": 5,
+ "integrity": "sha512-a/mE50FokBkPY86oocj/oorgDaYjT+l2EGSVLwbAUFwjOpFFDlbqHW5I9FS0cISLxmuDRr1J26znAy88UkHUbg==",
+ "signatures": [
+ {
+ "sig": "MEUCIC7Z/Qq4ZJJjg5ibpVZWQu1VD8LS/arVBl5awUSBOtRqAiEA20t3jhV+JVYMlUF3fwMl8KneYzDO9+HRYTJ9mQ7WXPY=",
+ "keyid": "SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"
+ }
+ ],
+ "unpackedSize": 3276
+ },
+ "main": "",
+ "types": "index.d.ts",
+ "scripts": {},
+ "_npmUser": {
+ "name": "types",
+ "email": "ts-npm-types@microsoft.com"
+ },
+ "repository": {
+ "url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git",
+ "type": "git",
+ "directory": "types/is-odd"
+ },
+ "description": "TypeScript definitions for is-odd",
+ "directories": {},
+ "dependencies": {},
+ "_hasShrinkwrap": false,
+ "typeScriptVersion": "4.5",
+ "_npmOperationalInternal": {
+ "tmp": "tmp/is-odd_3.0.2_1695740874873_0.09491697275033473",
+ "host": "s3://npm-registry-packages"
+ },
+ "typesPublisherContentHash": "f9b12a308df62402e8e0f8a8b33f699ed9f75f869afce468cfeafb9f8714df4e"
+ },
+ "3.0.3": {
+ "name": "@types/is-odd",
+ "version": "3.0.3",
+ "license": "MIT",
+ "_id": "@types/is-odd@3.0.3",
+ "maintainers": [
+ {
+ "name": "types",
+ "email": "ts-npm-types@microsoft.com"
+ }
+ ],
+ "contributors": [],
+ "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/is-odd",
+ "dist": {
+ "shasum": "a60696d7d28b6795522cc757f4bbf0d0250bfa59",
+ "tarball": "https://registry.npmjs.org/@types/is-odd/-/is-odd-3.0.3.tgz",
+ "fileCount": 5,
+ "integrity": "sha512-YdKKQ4CTGEfvdO+MWIPj/DLA3RZMJ9yOJOyLmq0nmN2FrKg6WQ5zynhlmjP7vnfYBTHNp/E9BJmBDsvw0/on/A==",
+ "signatures": [
+ {
+ "sig": "MEQCIGg7zdX3mlxczMdanHMrScYDLSnyDf6TL9b0DLRRkoWVAiBZYASSD5iCM3xRTS767+Gw41jQnDkIeK0rCHuy1SjgIw==",
+ "keyid": "SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"
+ }
+ ],
+ "unpackedSize": 2576
+ },
+ "main": "",
+ "types": "index.d.ts",
+ "scripts": {},
+ "_npmUser": {
+ "name": "types",
+ "email": "ts-npm-types@microsoft.com"
+ },
+ "repository": {
+ "url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git",
+ "type": "git",
+ "directory": "types/is-odd"
+ },
+ "description": "TypeScript definitions for is-odd",
+ "directories": {},
+ "dependencies": {},
+ "_hasShrinkwrap": false,
+ "typeScriptVersion": "4.5",
+ "_npmOperationalInternal": {
+ "tmp": "tmp/is-odd_3.0.3_1697606685662_0.7307845211597903",
+ "host": "s3://npm-registry-packages"
+ },
+ "typesPublisherContentHash": "f0888f66f4772459e29e716f6016cdaacfc7731573b71c46d23ded2554bd7a73"
+ },
+ "3.0.4": {
+ "name": "@types/is-odd",
+ "version": "3.0.4",
+ "license": "MIT",
+ "_id": "@types/is-odd@3.0.4",
+ "maintainers": [
+ {
+ "name": "types",
+ "email": "ts-npm-types@microsoft.com"
+ }
+ ],
+ "contributors": [],
+ "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/is-odd",
+ "dist": {
+ "shasum": "281d2e0ff78f04b319e40f83b2c4cfae5377622a",
+ "tarball": "https://registry.npmjs.org/@types/is-odd/-/is-odd-3.0.4.tgz",
+ "fileCount": 5,
+ "integrity": "sha512-BdjXVZXuHVqdXNi9gEbwf/W/k2lIhXzqnmygz4BFRTdpgFpJsn1v7AfB3DaLHj04O9hKiqQvnxu5AeogyptDjQ==",
+ "signatures": [
+ {
+ "sig": "MEUCIHLi2pVt8NsZM0434wTXqtu7F2kqqL9X7uySIbQ/XW7qAiEAzjn/2YlFKI02nQ2vaBNq0OtctmuDAdly4lY0V4eguIc=",
+ "keyid": "SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"
+ }
+ ],
+ "unpackedSize": 2576
+ },
+ "main": "",
+ "types": "index.d.ts",
+ "scripts": {},
+ "_npmUser": {
+ "name": "types",
+ "email": "ts-npm-types@microsoft.com"
+ },
+ "repository": {
+ "url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git",
+ "type": "git",
+ "directory": "types/is-odd"
+ },
+ "description": "TypeScript definitions for is-odd",
+ "directories": {},
+ "dependencies": {},
+ "_hasShrinkwrap": false,
+ "typeScriptVersion": "4.5",
+ "_npmOperationalInternal": {
+ "tmp": "tmp/is-odd_3.0.4_1699344348594_0.45442272513797977",
+ "host": "s3://npm-registry-packages"
+ },
+ "typesPublisherContentHash": "4f85cab04d848065af4c299b2e5770379553a5d4500593c40f39e06931124f91"
+ }
+ },
+ "time": {
+ "created": "2019-02-23T02:34:18.884Z",
+ "modified": "2025-08-03T07:01:33.304Z",
+ "3.0.0": "2019-02-23T02:34:19.212Z",
+ "3.0.1": "2021-12-24T00:00:48.118Z",
+ "3.0.2": "2023-09-26T15:07:55.020Z",
+ "3.0.3": "2023-10-18T05:24:45.883Z",
+ "3.0.4": "2023-11-07T08:05:48.848Z"
+ },
+ "license": "MIT",
+ "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/is-odd",
+ "repository": {
+ "url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git",
+ "type": "git",
+ "directory": "types/is-odd"
+ },
+ "description": "TypeScript definitions for is-odd",
+ "contributors": [],
+ "maintainers": [
+ {
+ "name": "types",
+ "email": "ts-npm-types@microsoft.com"
+ }
+ ],
+ "readme": "[object Object]",
+ "readmeFilename": ""
+}
diff --git a/test/fixtures/npm-registry/packuments/nano-stringify-object.json b/test/fixtures/npm-registry/packuments/nano-stringify-object.json
new file mode 100644
index 0000000000..cca55cc149
--- /dev/null
+++ b/test/fixtures/npm-registry/packuments/nano-stringify-object.json
@@ -0,0 +1,141 @@
+{
+ "name": "nano-stringify-object",
+ "version": "0.0.0",
+ "license": "MIT",
+ "author": "gameroman",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/gameroman-npm/nano-stringify-object.git"
+ },
+ "type": "module",
+ "exports": {
+ ".": "./dist/index.mjs",
+ "./package.json": "./package.json"
+ },
+ "scripts": {
+ "format": "oxfmt",
+ "lint": "oxlint",
+ "test": "bun test",
+ "build": "tsdown",
+ "prepublishOnly": "bun run build"
+ },
+ "devDependencies": {
+ "oxfmt": "^0.38.0",
+ "oxlint": "^1.50.0",
+ "tsdown": "^0.21.2",
+ "typescript": "^5.9.3"
+ },
+ "_id": "nano-stringify-object",
+ "_integrity": "sha512-s4XcjhMpc1u7HfHHimUAT0dtNNYFiOunlNPGUv5N9BoX4X1Lwklq4ckdFDPo+50/exciNsf0ggH4s8Sj6CufOA==",
+ "_nodeVersion": "24.3.0",
+ "_npmVersion": "10.8.3",
+ "shasum": "dbb692872dc94d6fd0adc93b66c8e09c67f78260",
+ "dist": {
+ "integrity": "sha512-s4XcjhMpc1u7HfHHimUAT0dtNNYFiOunlNPGUv5N9BoX4X1Lwklq4ckdFDPo+50/exciNsf0ggH4s8Sj6CufOA==",
+ "shasum": "dbb692872dc94d6fd0adc93b66c8e09c67f78260",
+ "tarball": "https://registry.npmjs.org/nano-stringify-object/-/nano-stringify-object-0.0.0.tgz",
+ "fileCount": 5,
+ "unpackedSize": 8783,
+ "signatures": [
+ {
+ "keyid": "SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U",
+ "sig": "MEQCIF396neosjaDQP6JgESc3D/CpgE5VZik5CqXY/F68gUnAiAmtw8VnyNnYMNisW4K0S75AJicujUpd0u8g4kQ35t0YA=="
+ }
+ ]
+ },
+ "_npmUser": {
+ "name": "gameroman",
+ "email": "dev@rman.dev"
+ },
+ "directories": {},
+ "maintainers": [
+ {
+ "name": "gameroman",
+ "email": "dev@rman.dev"
+ },
+ {
+ "name": "gameroman",
+ "email": "dev@rman.dev"
+ }
+ ],
+ "_npmOperationalInternal": {
+ "host": "s3://npm-registry-packages-npm-production",
+ "tmp": "tmp/nano-stringify-object_0.0.0_1773271904176_0.4735360871124257"
+ },
+ "_hasShrinkwrap": false,
+ "dist-tags": {
+ "latest": "0.0.0"
+ },
+ "versions": {
+ "0.0.0": {
+ "name": "nano-stringify-object",
+ "version": "0.0.0",
+ "license": "MIT",
+ "author": "gameroman",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/gameroman-npm/nano-stringify-object.git"
+ },
+ "type": "module",
+ "exports": {
+ ".": "./dist/index.mjs",
+ "./package.json": "./package.json"
+ },
+ "scripts": {
+ "format": "oxfmt",
+ "lint": "oxlint",
+ "test": "bun test",
+ "build": "tsdown",
+ "prepublishOnly": "bun run build"
+ },
+ "devDependencies": {
+ "oxfmt": "^0.38.0",
+ "oxlint": "^1.50.0",
+ "tsdown": "^0.21.2",
+ "typescript": "^5.9.3"
+ },
+ "_id": "nano-stringify-object@0.0.0",
+ "_integrity": "sha512-s4XcjhMpc1u7HfHHimUAT0dtNNYFiOunlNPGUv5N9BoX4X1Lwklq4ckdFDPo+50/exciNsf0ggH4s8Sj6CufOA==",
+ "_nodeVersion": "24.3.0",
+ "_npmVersion": "10.8.3",
+ "shasum": "dbb692872dc94d6fd0adc93b66c8e09c67f78260",
+ "dist": {
+ "integrity": "sha512-s4XcjhMpc1u7HfHHimUAT0dtNNYFiOunlNPGUv5N9BoX4X1Lwklq4ckdFDPo+50/exciNsf0ggH4s8Sj6CufOA==",
+ "shasum": "dbb692872dc94d6fd0adc93b66c8e09c67f78260",
+ "tarball": "https://registry.npmjs.org/nano-stringify-object/-/nano-stringify-object-0.0.0.tgz",
+ "fileCount": 5,
+ "unpackedSize": 8783,
+ "signatures": [
+ {
+ "keyid": "SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U",
+ "sig": "MEQCIF396neosjaDQP6JgESc3D/CpgE5VZik5CqXY/F68gUnAiAmtw8VnyNnYMNisW4K0S75AJicujUpd0u8g4kQ35t0YA=="
+ }
+ ]
+ },
+ "_npmUser": {
+ "name": "gameroman",
+ "email": "dev@rman.dev"
+ },
+ "directories": {},
+ "maintainers": [
+ {
+ "name": "gameroman",
+ "email": "dev@rman.dev"
+ }
+ ],
+ "_npmOperationalInternal": {
+ "host": "s3://npm-registry-packages-npm-production",
+ "tmp": "tmp/nano-stringify-object_0.0.0_1773271904176_0.4735360871124257"
+ },
+ "_hasShrinkwrap": false
+ }
+ },
+ "time": {
+ "created": "2026-03-11T23:31:44.175Z",
+ "0.0.0": "2026-03-11T23:31:44.334Z",
+ "modified": "2026-03-11T23:31:44.554Z"
+ },
+ "readme": "",
+ "readmeFilename": "",
+ "_rev": "1-d7e9fda2cb18e6ea7d359fdc679eea56"
+}
diff --git a/test/fixtures/npm-registry/search/keywords-framework.json b/test/fixtures/npm-registry/search/keywords-framework.json
index 640d47abfc..24cf4d0b6b 100644
--- a/test/fixtures/npm-registry/search/keywords-framework.json
+++ b/test/fixtures/npm-registry/search/keywords-framework.json
@@ -54,14 +54,6 @@
"npm": "https://www.npmjs.com/package/vite"
}
},
- "score": {
- "final": 46.90461,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -126,14 +118,6 @@
"npm": "https://www.npmjs.com/package/express"
}
},
- "score": {
- "final": 46.49283,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -191,14 +175,6 @@
"npm": "https://www.npmjs.com/package/next"
}
},
- "score": {
- "final": 45.319336,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -257,14 +233,6 @@
"npm": "https://www.npmjs.com/package/hono"
}
},
- "score": {
- "final": 43.785503,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -310,14 +278,6 @@
"npm": "https://www.npmjs.com/package/socket.io-client"
}
},
- "score": {
- "final": 43.05912,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -363,14 +323,6 @@
"npm": "https://www.npmjs.com/package/socket.io"
}
},
- "score": {
- "final": 42.95133,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -443,14 +395,6 @@
"npm": "https://www.npmjs.com/package/preact"
}
},
- "score": {
- "final": 41.794792,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -488,14 +432,6 @@
"npm": "https://www.npmjs.com/package/connect"
}
},
- "score": {
- "final": 41.599102,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -546,14 +482,6 @@
"npm": "https://www.npmjs.com/package/bootstrap"
}
},
- "score": {
- "final": 41.536163,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -604,14 +532,6 @@
"npm": "https://www.npmjs.com/package/@envelop/core"
}
},
- "score": {
- "final": 41.44943,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -693,14 +613,6 @@
"npm": "https://www.npmjs.com/package/koa"
}
},
- "score": {
- "final": 41.321415,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -777,14 +689,6 @@
"npm": "https://www.npmjs.com/package/antd"
}
},
- "score": {
- "final": 40.321957,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -834,14 +738,6 @@
"npm": "https://www.npmjs.com/package/quill"
}
},
- "score": {
- "final": 39.642365,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -888,14 +784,6 @@
"npm": "https://www.npmjs.com/package/vitefu"
}
},
- "score": {
- "final": 39.552883,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -949,14 +837,6 @@
"npm": "https://www.npmjs.com/package/fastify"
}
},
- "score": {
- "final": 39.484047,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -1017,14 +897,6 @@
"npm": "https://www.npmjs.com/package/@ckeditor/ckeditor5-core"
}
},
- "score": {
- "final": 38.754627,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -1085,14 +957,6 @@
"npm": "https://www.npmjs.com/package/swiper"
}
},
- "score": {
- "final": 38.736828,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -1147,14 +1011,6 @@
"npm": "https://www.npmjs.com/package/svelte"
}
},
- "score": {
- "final": 38.628876,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -1216,14 +1072,6 @@
"npm": "https://www.npmjs.com/package/@hapi/hapi"
}
},
- "score": {
- "final": 38.406395,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -1282,14 +1130,6 @@
"npm": "https://www.npmjs.com/package/@sveltejs/kit"
}
},
- "score": {
- "final": 37.343987,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -1340,14 +1180,6 @@
"npm": "https://www.npmjs.com/package/@modern-js/utils"
}
},
- "score": {
- "final": 37.03993,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -1396,14 +1228,6 @@
"npm": "https://www.npmjs.com/package/rtlcss"
}
},
- "score": {
- "final": 36.917053,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -1454,14 +1278,6 @@
"npm": "https://www.npmjs.com/package/@modern-js/node-bundle-require"
}
},
- "score": {
- "final": 36.915737,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -1522,14 +1338,6 @@
"npm": "https://www.npmjs.com/package/@ckeditor/ckeditor5-engine"
}
},
- "score": {
- "final": 36.902973,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -1588,14 +1396,6 @@
"npm": "https://www.npmjs.com/package/ckeditor5"
}
},
- "score": {
- "final": 36.308823,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
diff --git a/test/fixtures/npm-registry/search/nuxt.json b/test/fixtures/npm-registry/search/nuxt.json
index bbd7e00f1a..ead7fbc140 100644
--- a/test/fixtures/npm-registry/search/nuxt.json
+++ b/test/fixtures/npm-registry/search/nuxt.json
@@ -42,14 +42,6 @@
"npm": "https://www.npmjs.com/package/nuxt"
}
},
- "score": {
- "final": 1846.2391,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -96,14 +88,6 @@
"npm": "https://www.npmjs.com/package/@nuxt/vite-builder"
}
},
- "score": {
- "final": 436.68585,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -166,14 +150,6 @@
"npm": "https://www.npmjs.com/package/@nuxt/devtools"
}
},
- "score": {
- "final": 435.51923,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -220,14 +196,6 @@
"npm": "https://www.npmjs.com/package/@vueuse/nuxt"
}
},
- "score": {
- "final": 435.2237,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -274,14 +242,6 @@
"npm": "https://www.npmjs.com/package/@nuxt/schema"
}
},
- "score": {
- "final": 433.77365,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -323,14 +283,6 @@
"npm": "https://www.npmjs.com/package/@pinia/nuxt"
}
},
- "score": {
- "final": 430.91614,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -377,14 +329,6 @@
"npm": "https://www.npmjs.com/package/@nuxt/kit"
}
},
- "score": {
- "final": 429.22345,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -426,14 +370,6 @@
"npm": "https://www.npmjs.com/package/@nuxt/image"
}
},
- "score": {
- "final": 420.65933,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -475,14 +411,6 @@
"npm": "https://www.npmjs.com/package/@dxup/nuxt"
}
},
- "score": {
- "final": 419.1896,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -536,14 +464,6 @@
"npm": "https://www.npmjs.com/package/@nuxt/types"
}
},
- "score": {
- "final": 408.49863,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -590,14 +510,6 @@
"npm": "https://www.npmjs.com/package/@nuxt/test-utils"
}
},
- "score": {
- "final": 403.97028,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -639,14 +551,6 @@
"npm": "https://www.npmjs.com/package/@nuxt/nitro-server"
}
},
- "score": {
- "final": 396.81116,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -709,14 +613,6 @@
"npm": "https://www.npmjs.com/package/@nuxt/eslint-plugin"
}
},
- "score": {
- "final": 395.78107,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -758,14 +654,6 @@
"npm": "https://www.npmjs.com/package/@nuxt/cli"
}
},
- "score": {
- "final": 389.1604,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -828,14 +716,6 @@
"npm": "https://www.npmjs.com/package/@nuxt/icon"
}
},
- "score": {
- "final": 385.6585,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -898,14 +778,6 @@
"npm": "https://www.npmjs.com/package/@nuxt/eslint-config"
}
},
- "score": {
- "final": 384.345,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -947,14 +819,6 @@
"npm": "https://www.npmjs.com/package/@nuxt/fonts"
}
},
- "score": {
- "final": 380.06802,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -1017,14 +881,6 @@
"npm": "https://www.npmjs.com/package/@nuxt/eslint"
}
},
- "score": {
- "final": 369.41135,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -1062,14 +918,6 @@
"npm": "https://www.npmjs.com/package/nuxt-lodash"
}
},
- "score": {
- "final": 369.3478,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -1123,14 +971,6 @@
"npm": "https://www.npmjs.com/package/@nuxt/telemetry"
}
},
- "score": {
- "final": 368.14578,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -1173,14 +1013,6 @@
"npm": "https://www.npmjs.com/package/@sentry/nuxt"
}
},
- "score": {
- "final": 362.62573,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -1234,14 +1066,6 @@
"npm": "https://www.npmjs.com/package/@nuxt/postcss8"
}
},
- "score": {
- "final": 358.2893,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -1327,14 +1151,6 @@
"npm": "https://www.npmjs.com/package/@workflow/nuxt"
}
},
- "score": {
- "final": 355.45712,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -1385,14 +1201,6 @@
"npm": "https://www.npmjs.com/package/@unocss/nuxt"
}
},
- "score": {
- "final": 354.82272,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -1430,14 +1238,6 @@
"npm": "https://www.npmjs.com/package/nuxt-csurf"
}
},
- "score": {
- "final": 352.99255,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
diff --git a/test/fixtures/npm-registry/search/vue.json b/test/fixtures/npm-registry/search/vue.json
index 6425098391..61ed10b9d2 100644
--- a/test/fixtures/npm-registry/search/vue.json
+++ b/test/fixtures/npm-registry/search/vue.json
@@ -46,14 +46,6 @@
"npm": "https://www.npmjs.com/package/vue"
}
},
- "score": {
- "final": 1816.6842,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -100,14 +92,6 @@
"npm": "https://www.npmjs.com/package/@vue/reactivity"
}
},
- "score": {
- "final": 332.15305,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -154,14 +138,6 @@
"npm": "https://www.npmjs.com/package/@vue/compiler-sfc"
}
},
- "score": {
- "final": 328.89764,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -208,14 +184,6 @@
"npm": "https://www.npmjs.com/package/@vue/compiler-core"
}
},
- "score": {
- "final": 327.33432,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -262,14 +230,6 @@
"npm": "https://www.npmjs.com/package/@vue/compiler-ssr"
}
},
- "score": {
- "final": 325.90848,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -316,14 +276,6 @@
"npm": "https://www.npmjs.com/package/@vue/compiler-dom"
}
},
- "score": {
- "final": 324.55,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -370,14 +322,6 @@
"npm": "https://www.npmjs.com/package/@vue/runtime-core"
}
},
- "score": {
- "final": 312.23926,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -424,14 +368,6 @@
"npm": "https://www.npmjs.com/package/@vue/runtime-dom"
}
},
- "score": {
- "final": 311.60114,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -478,14 +414,6 @@
"npm": "https://www.npmjs.com/package/@vue/shared"
}
},
- "score": {
- "final": 311.49493,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -532,14 +460,6 @@
"npm": "https://www.npmjs.com/package/@vue/server-renderer"
}
},
- "score": {
- "final": 310.99023,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -585,14 +505,6 @@
"npm": "https://www.npmjs.com/package/vue-router"
}
},
- "score": {
- "final": 293.8123,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -634,14 +546,6 @@
"npm": "https://www.npmjs.com/package/vue-template-compiler"
}
},
- "score": {
- "final": 273.08698,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -679,14 +583,6 @@
"npm": "https://www.npmjs.com/package/@vue/reactivity-transform"
}
},
- "score": {
- "final": 272.5972,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -737,14 +633,6 @@
"npm": "https://www.npmjs.com/package/@floating-ui/vue"
}
},
- "score": {
- "final": 271.86765,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -822,14 +710,6 @@
"npm": "https://www.npmjs.com/package/@vue/compiler-vue2"
}
},
- "score": {
- "final": 269.01633,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -876,14 +756,6 @@
"npm": "https://www.npmjs.com/package/@vue/compat"
}
},
- "score": {
- "final": 266.73676,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -930,14 +802,6 @@
"npm": "https://www.npmjs.com/package/vue-eslint-parser"
}
},
- "score": {
- "final": 265.0513,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -988,14 +852,6 @@
"npm": "https://www.npmjs.com/package/vue-tsc"
}
},
- "score": {
- "final": 262.94705,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -1058,14 +914,6 @@
"npm": "https://www.npmjs.com/package/@vitejs/plugin-vue"
}
},
- "score": {
- "final": 262.3455,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -1114,14 +962,6 @@
"npm": "https://www.npmjs.com/package/@intlify/vue-i18n-extensions"
}
},
- "score": {
- "final": 260.7798,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -1163,14 +1003,6 @@
"npm": "https://www.npmjs.com/package/vue-loader"
}
},
- "score": {
- "final": 259.08713,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -1232,14 +1064,6 @@
"npm": "https://www.npmjs.com/package/vue-jest"
}
},
- "score": {
- "final": 257.40042,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -1306,14 +1130,6 @@
"npm": "https://www.npmjs.com/package/@tiptap/vue-3"
}
},
- "score": {
- "final": 257.2942,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -1367,14 +1183,6 @@
"npm": "https://www.npmjs.com/package/@vue/test-utils"
}
},
- "score": {
- "final": 256.06604,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -1417,14 +1225,6 @@
"npm": "https://www.npmjs.com/package/@cspell/dict-vue"
}
},
- "score": {
- "final": 255.1951,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
diff --git a/test/fixtures/users/qwerzl.json b/test/fixtures/users/qwerzl.json
index 412be24c49..7da6ad852a 100644
--- a/test/fixtures/users/qwerzl.json
+++ b/test/fixtures/users/qwerzl.json
@@ -46,14 +46,6 @@
"npm": "https://www.npmjs.com/package/unifont"
}
},
- "score": {
- "final": 87.64574,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
@@ -103,14 +95,6 @@
"npm": "https://www.npmjs.com/package/fontless"
}
},
- "score": {
- "final": 75.63318,
- "detail": {
- "popularity": 1,
- "quality": 1,
- "maintenance": 1
- }
- },
"flags": {
"insecure": 0
}
diff --git a/test/nuxt/a11y.spec.ts b/test/nuxt/a11y.spec.ts
index d5827c61ee..36ee338d8b 100644
--- a/test/nuxt/a11y.spec.ts
+++ b/test/nuxt/a11y.spec.ts
@@ -233,6 +233,11 @@ import {
PackageSelectionView,
PackageSelectionCheckbox,
PackageExternalLinks,
+ ChartSplitSparkline,
+ TabRoot,
+ TabList,
+ TabItem,
+ TabPanel,
} from '#components'
// Server variant components must be imported directly to test the server-side render
@@ -246,6 +251,7 @@ import FacetBarChart from '~/components/Compare/FacetBarChart.vue'
import PackageLikeCard from '~/components/Package/LikeCard.vue'
import SizeIncrease from '~/components/Package/SizeIncrease.vue'
import Likes from '~/components/Package/Likes.vue'
+import type { VueUiXyDatasetItem } from 'vue-data-ui'
describe('component accessibility audits', () => {
describe('DateTime', () => {
@@ -775,10 +781,6 @@ describe('component accessibility audits', () => {
username: 'yyx990803',
},
},
- score: {
- final: 0.9,
- detail: { quality: 0.9, popularity: 0.9, maintenance: 0.9 },
- },
searchScore: 100000,
}
@@ -945,6 +947,93 @@ describe('component accessibility audits', () => {
})
})
+ describe('ChartSplitSparkline', () => {
+ const dataset = [
+ {
+ color: 'oklch(0.7025 0.132 160.37)',
+ name: 'vue',
+ series: [100_000, 200_000, 150_000],
+ type: 'line',
+ dashIndices: [],
+ },
+ {
+ color: 'oklch(0.6917 0.1865 35.04)',
+ name: 'svelte',
+ series: [100_000, 200_000, 150_000],
+ type: 'line',
+ dashIndices: [],
+ },
+ ] as Array<
+ VueUiXyDatasetItem & {
+ color?: string
+ series: number[]
+ dashIndices?: number[]
+ }
+ >
+ const dates = [1743465600000, 1744070400000, 1744675200000]
+ const datetimeFormatterOptions = {
+ year: 'yyyy-MM-dd',
+ month: 'yyyy-MM-dd',
+ day: 'yyyy-MM-dd',
+ }
+
+ it('should have no accessibility violations', async () => {
+ const component = await mountSuspended(ChartSplitSparkline, {
+ props: {
+ dataset,
+ dates,
+ datetimeFormatterOptions,
+ showLastDatapointEstimation: false,
+ },
+ })
+ const results = await runAxe(component)
+ expect(results.violations).toEqual([])
+ })
+
+ it('should have no accessibility violations when empty', async () => {
+ const component = await mountSuspended(ChartSplitSparkline, {
+ props: {
+ dataset: [],
+ dates: [],
+ datetimeFormatterOptions,
+ showLastDatapointEstimation: false,
+ },
+ })
+ const results = await runAxe(component)
+ expect(results.violations).toEqual([])
+ })
+ })
+
+ describe('TabRoot + TabList + TabItem + TabPanel', () => {
+ function createTabsFixture(modelValue: string, idPrefix: string) {
+ return defineComponent({
+ setup() {
+ return () =>
+ h(TabRoot, { modelValue, idPrefix }, () => [
+ h(TabList, { ariaLabel: 'Test tabs' }, () => [
+ h(TabItem, { value: 'first' }, () => 'First'),
+ h(TabItem, { value: 'second' }, () => 'Second'),
+ ]),
+ h(TabPanel, { value: 'first' }, () => 'First content'),
+ h(TabPanel, { value: 'second' }, () => 'Second content'),
+ ])
+ },
+ })
+ }
+
+ it('should have no accessibility violations', async () => {
+ const component = await mountSuspended(createTabsFixture('first', 'a11y-test'))
+ const results = await runAxe(component)
+ expect(results.violations).toEqual([])
+ })
+
+ it('should have no accessibility violations with second tab selected', async () => {
+ const component = await mountSuspended(createTabsFixture('second', 'a11y-test2'))
+ const results = await runAxe(component)
+ expect(results.violations).toEqual([])
+ })
+ })
+
describe('PackagePlaygrounds', () => {
it('should have no accessibility violations with single link', async () => {
const links = [
@@ -1385,10 +1474,6 @@ describe('component accessibility audits', () => {
links: {},
publisher: { username: 'yyx990803' },
},
- score: {
- final: 0.9,
- detail: { quality: 0.9, popularity: 0.9, maintenance: 0.9 },
- },
searchScore: 100000,
},
{
@@ -1401,10 +1486,6 @@ describe('component accessibility audits', () => {
links: {},
publisher: { username: 'fb' },
},
- score: {
- final: 0.9,
- detail: { quality: 0.9, popularity: 0.9, maintenance: 0.9 },
- },
searchScore: 90000,
},
]
@@ -1680,10 +1761,6 @@ describe('component accessibility audits', () => {
links: {},
publisher: { username: 'yyx990803' },
},
- score: {
- final: 0.9,
- detail: { quality: 0.9, popularity: 0.9, maintenance: 0.9 },
- },
searchScore: 100000,
},
]
@@ -1744,10 +1821,6 @@ describe('component accessibility audits', () => {
},
downloads: { weekly: 50000000 },
updated: '2024-01-01T00:00:00.000Z',
- score: {
- final: 0.95,
- detail: { quality: 0.95, popularity: 0.99, maintenance: 0.9 },
- },
searchScore: 99999,
}
@@ -3835,10 +3908,6 @@ describe('background theme accessibility', () => {
links: {},
publisher: { username: 'evan' },
},
- score: {
- final: 0.9,
- detail: { quality: 0.9, popularity: 0.9, maintenance: 0.9 },
- },
searchScore: 100000,
}
diff --git a/test/nuxt/components/Tab.spec.ts b/test/nuxt/components/Tab.spec.ts
new file mode 100644
index 0000000000..3af2882735
--- /dev/null
+++ b/test/nuxt/components/Tab.spec.ts
@@ -0,0 +1,171 @@
+import { describe, it, expect } from 'vitest'
+import { mountSuspended } from '@nuxt/test-utils/runtime'
+import { defineComponent, h } from 'vue'
+import { TabRoot, TabList, TabItem, TabPanel } from '#components'
+
+function createTabsWrapper(props: { modelValue: string; idPrefix?: string }) {
+ return defineComponent({
+ components: { TabRoot, TabList, TabItem, TabPanel },
+ setup() {
+ return () =>
+ h(
+ TabRoot,
+ {
+ 'modelValue': props.modelValue,
+ 'idPrefix': props.idPrefix ?? 'test',
+ 'onUpdate:modelValue': () => {},
+ },
+ () => [
+ h(TabList, { ariaLabel: 'Test tabs' }, () => [
+ h(TabItem, { value: 'one' }, () => 'One'),
+ h(TabItem, { value: 'two' }, () => 'Two'),
+ h(TabItem, { value: 'three' }, () => 'Three'),
+ ]),
+ h(TabPanel, { value: 'one' }, () => 'Content one'),
+ h(TabPanel, { value: 'two' }, () => 'Content two'),
+ h(TabPanel, { value: 'three' }, () => 'Content three'),
+ ],
+ )
+ },
+ })
+}
+
+async function mountTabs({ modelValue = 'one', idPrefix = 'test' } = {}) {
+ const Wrapper = createTabsWrapper({ modelValue, idPrefix })
+ return mountSuspended(Wrapper, { attachTo: document.body })
+}
+
+describe('Tab components', () => {
+ describe('TabRoot', () => {
+ it('renders tablist', async () => {
+ const wrapper = await mountTabs()
+ expect(wrapper.find('[role="tablist"]').exists()).toBe(true)
+ wrapper.unmount()
+ })
+
+ it('provides selected value to children', async () => {
+ const wrapper = await mountTabs({ modelValue: 'two' })
+ const tabs = wrapper.findAll('[role="tab"]')
+ const selected = tabs.find(t => t.attributes('aria-selected') === 'true')
+ expect(selected?.text()).toBe('Two')
+ wrapper.unmount()
+ })
+ })
+
+ describe('TabList', () => {
+ it('has tablist role and aria-label', async () => {
+ const wrapper = await mountTabs()
+ const tablist = wrapper.find('[role="tablist"]')
+ expect(tablist.exists()).toBe(true)
+ expect(tablist.attributes('aria-label')).toBe('Test tabs')
+ wrapper.unmount()
+ })
+
+ it('supports arrow key navigation', async () => {
+ const wrapper = await mountTabs()
+ const tablist = wrapper.find('[role="tablist"]')
+ const tabs = wrapper.findAll('[role="tab"]')
+
+ ;(tabs[0]!.element as HTMLElement).focus()
+ expect(document.activeElement).toBe(tabs[0]!.element)
+
+ await tablist.trigger('keydown', { key: 'ArrowRight' })
+ expect(document.activeElement).toBe(tabs[1]!.element)
+
+ // Wraps around
+ await tablist.trigger('keydown', { key: 'ArrowRight' })
+ await tablist.trigger('keydown', { key: 'ArrowRight' })
+ expect(document.activeElement).toBe(tabs[0]!.element)
+
+ // ArrowLeft wraps backwards
+ await tablist.trigger('keydown', { key: 'ArrowLeft' })
+ expect(document.activeElement).toBe(tabs[2]!.element)
+
+ wrapper.unmount()
+ })
+
+ it('supports Home and End keys', async () => {
+ const wrapper = await mountTabs()
+ const tablist = wrapper.find('[role="tablist"]')
+ const tabs = wrapper.findAll('[role="tab"]')
+
+ ;(tabs[1]!.element as HTMLElement).focus()
+
+ await tablist.trigger('keydown', { key: 'Home' })
+ expect(document.activeElement).toBe(tabs[0]!.element)
+
+ await tablist.trigger('keydown', { key: 'End' })
+ expect(document.activeElement).toBe(tabs[2]!.element)
+
+ wrapper.unmount()
+ })
+ })
+
+ describe('TabItem', () => {
+ it('has correct ARIA attributes when selected', async () => {
+ const wrapper = await mountTabs({ modelValue: 'one' })
+ const tabs = wrapper.findAll('[role="tab"]')
+ const first = tabs[0]!
+ const second = tabs[1]!
+
+ expect(first.attributes('aria-selected')).toBe('true')
+ expect(first.attributes('tabindex')).toBe('-1')
+ expect(first.attributes('data-selected')).toBeDefined()
+
+ expect(second.attributes('aria-selected')).toBe('false')
+ expect(second.attributes('tabindex')).toBe('0')
+ expect(second.attributes('data-selected')).toBeUndefined()
+
+ wrapper.unmount()
+ })
+
+ it('emits update:modelValue on click', async () => {
+ const wrapper = await mountTabs({ modelValue: 'one' })
+ const tabs = wrapper.findAll('[role="tab"]')
+
+ await tabs[1]!.trigger('click')
+ const root = wrapper.findComponent(TabRoot)
+ expect(root.emitted('update:modelValue')?.[0]).toEqual(['two'])
+
+ wrapper.unmount()
+ })
+
+ it('generates aria-controls pointing to panel id', async () => {
+ const wrapper = await mountTabs({ idPrefix: 'my-tabs' })
+ const tab = wrapper.findAll('[role="tab"]')[0]!
+ expect(tab.attributes('aria-controls')).toBe('my-tabs-panel-one')
+ wrapper.unmount()
+ })
+ })
+
+ describe('TabPanel', () => {
+ it('shows panel matching selected value', async () => {
+ const wrapper = await mountTabs({ modelValue: 'one' })
+ const panels = wrapper.findAll('[role="tabpanel"]')
+
+ const visible = panels.filter(p => (p.element as HTMLElement).style.display !== 'none')
+ expect(visible).toHaveLength(1)
+ expect(visible[0]!.text()).toBe('Content one')
+
+ wrapper.unmount()
+ })
+
+ it('hides panels not matching selected value', async () => {
+ const wrapper = await mountTabs({ modelValue: 'two' })
+ const panels = wrapper.findAll('[role="tabpanel"]')
+
+ const visible = panels.filter(p => (p.element as HTMLElement).style.display !== 'none')
+ expect(visible).toHaveLength(1)
+ expect(visible[0]!.text()).toBe('Content two')
+
+ wrapper.unmount()
+ })
+
+ it('has aria-labelledby pointing to tab id', async () => {
+ const wrapper = await mountTabs({ idPrefix: 'demo' })
+ const panel = wrapper.findAll('[role="tabpanel"]')[0]!
+ expect(panel.attributes('aria-labelledby')).toBe('demo-one')
+ wrapper.unmount()
+ })
+ })
+})
diff --git a/test/nuxt/components/compare/FacetSelector.spec.ts b/test/nuxt/components/compare/FacetSelector.spec.ts
index 3db76373a9..623857f07c 100644
--- a/test/nuxt/components/compare/FacetSelector.spec.ts
+++ b/test/nuxt/components/compare/FacetSelector.spec.ts
@@ -85,7 +85,9 @@ vi.mock('~/composables/useFacetSelection', () => ({
facetsByCategory: computed(() => {
const result: Record[]> = {}
for (const category of CATEGORY_ORDER) {
- result[category] = FACETS_BY_CATEGORY[category].map(facet => buildFacetInfo(facet))
+ result[category] = FACETS_BY_CATEGORY[category].map((facet: ComparisonFacet) =>
+ buildFacetInfo(facet),
+ )
}
return result
}),
@@ -164,14 +166,14 @@ describe('FacetSelector', () => {
expect(component.find('.i-lucide\\:plus').exists()).toBe(true)
})
- it('applies aria-pressed for selected state', async () => {
+ it('applies aria-checked for selected checkbox state', async () => {
mockSelectedFacets.value = ['downloads']
mockIsFacetSelected.mockImplementation((f: string) => f === 'downloads')
const component = await mountSuspended(FacetSelector)
- const buttons = component.findAll('button[aria-pressed]')
- const selectedButton = buttons.find(b => b.attributes('aria-pressed') === 'true')
+ const buttons = component.findAll('button[role="checkbox"][aria-checked="true"]')
+ const selectedButton = buttons[0]
expect(selectedButton).toBeDefined()
})
@@ -179,7 +181,9 @@ describe('FacetSelector', () => {
const component = await mountSuspended(FacetSelector)
// Find a facet button (not all/none)
- const facetButton = component.findAll('button').find(b => b.text().includes('Downloads'))
+ const facetButton = component
+ .findAll('button[role="checkbox"]')
+ .find(b => b.text().includes('Downloads'))
await facetButton?.trigger('click')
expect(mockToggleFacet).toHaveBeenCalled()
@@ -191,10 +195,10 @@ describe('FacetSelector', () => {
const component = await mountSuspended(FacetSelector)
// totalDependencies is marked as comingSoon
- const buttons = component.findAll('button')
+ const buttons = component.findAll('button[role="checkbox"]')
const comingSoonButton = buttons.find(b => b.text().includes(comingSoonFacetLabel))
- expect(comingSoonButton?.attributes('disabled')).toBeDefined()
+ expect(comingSoonButton?.attributes('aria-disabled')).toBe('true')
})
it('shows coming soon text for comingSoon facets', async () => {
@@ -228,12 +232,21 @@ describe('FacetSelector', () => {
})
describe('category all/none buttons', () => {
+ function findCategoryActionButton(
+ component: Awaited>,
+ category: string,
+ action: 'all' | 'none',
+ ) {
+ return component.find(
+ `button[data-facet-category="${category}"][data-facet-category-action="${action}"]`,
+ )
+ }
+
it('calls selectCategory when all button is clicked', async () => {
const component = await mountSuspended(FacetSelector)
- // Find the first 'all' button (for performance category)
- const allButton = component.findAll('button').find(b => b.text() === 'all')
- await allButton!.trigger('click')
+ const allButton = findCategoryActionButton(component, 'performance', 'all')
+ await allButton.trigger('click')
expect(mockSelectCategory).toHaveBeenCalledWith('performance')
})
@@ -245,56 +258,64 @@ describe('FacetSelector', () => {
const component = await mountSuspended(FacetSelector)
- // Find the first 'none' button (for performance category)
- const noneButton = component.findAll('button').find(b => b.text() === 'none')
- await noneButton!.trigger('click')
+ const noneButton = findCategoryActionButton(component, 'performance', 'none')
+ await noneButton.trigger('click')
expect(mockDeselectCategory).toHaveBeenCalledWith('performance')
})
- it('disables all button when all facets in category are selected', async () => {
+ it('marks all button as aria-disabled when all facets in category are selected', async () => {
// Select all performance facets
const performanceFacets: (string | ComparisonFacet)[] = FACETS_BY_CATEGORY.performance.filter(
- f => !FACET_INFO[f].comingSoon,
+ (f: ComparisonFacet) => !FACET_INFO[f].comingSoon,
)
mockSelectedFacets.value = performanceFacets
mockIsFacetSelected.mockImplementation((f: string) => performanceFacets.includes(f))
const component = await mountSuspended(FacetSelector)
- const allButton = component.findAll('button').find(b => b.text() === 'all')
- // First all button (performance) should be disabled
- expect(allButton!.attributes('disabled')).toBeDefined()
+ const allButton = findCategoryActionButton(component, 'performance', 'all')
+
+ expect(allButton.attributes('aria-disabled')).toBe('true')
})
- it('disables none button when no facets in category are selected', async () => {
+ it('marks none button as aria-disabled when no facets in category are selected', async () => {
// Deselect all performance facets
mockSelectedFacets.value = ['downloads'] // only health facet selected
mockIsFacetSelected.mockImplementation((f: string) => f === 'downloads')
const component = await mountSuspended(FacetSelector)
- const noneButton = component.findAll('button').find(b => b.text() === 'none')
- // First none button (performance) should be disabled
- expect(noneButton!.attributes('disabled')).toBeDefined()
+ const noneButton = findCategoryActionButton(component, 'performance', 'none')
+
+ expect(noneButton.attributes('aria-disabled')).toBe('true')
})
- })
- describe('styling', () => {
- it('applies selected styling to selected facets', async () => {
- mockSelectedFacets.value = ['downloads']
- mockIsFacetSelected.mockImplementation((f: string) => f === 'downloads')
+ it('does not call selectCategory when all button action is already fulfilled', async () => {
+ const performanceFacets: (string | ComparisonFacet)[] = FACETS_BY_CATEGORY.performance.filter(
+ (f: ComparisonFacet) => !FACET_INFO[f].comingSoon,
+ )
+ mockSelectedFacets.value = performanceFacets
+ mockIsFacetSelected.mockImplementation((f: string) => performanceFacets.includes(f))
const component = await mountSuspended(FacetSelector)
- // Selected facets have bg-bg-muted class
- expect(component.find('.bg-bg-muted').exists()).toBe(true)
+ const allButton = findCategoryActionButton(component, 'performance', 'all')
+ await allButton.trigger('click')
+
+ expect(mockSelectCategory).not.toHaveBeenCalled()
})
- it.runIf(hasComingSoonFacets)('applies cursor-not-allowed to comingSoon facets', async () => {
+ it('does not call deselectCategory when none button action is already fulfilled', async () => {
+ mockSelectedFacets.value = ['downloads']
+ mockIsFacetSelected.mockImplementation((f: string) => f === 'downloads')
+
const component = await mountSuspended(FacetSelector)
- expect(component.find('.cursor-not-allowed').exists()).toBe(true)
+ const noneButton = findCategoryActionButton(component, 'performance', 'none')
+ await noneButton.trigger('click')
+
+ expect(mockDeselectCategory).not.toHaveBeenCalled()
})
})
})
diff --git a/test/nuxt/components/compare/PackageSelector.spec.ts b/test/nuxt/components/compare/PackageSelector.spec.ts
index 54eece3168..397107e57f 100644
--- a/test/nuxt/components/compare/PackageSelector.spec.ts
+++ b/test/nuxt/components/compare/PackageSelector.spec.ts
@@ -185,8 +185,8 @@ describe('PackageSelector', () => {
it('respects max packages limit', async () => {
const component = await mountSuspended(PackageSelector, {
props: {
- modelValue: ['a', 'b', 'c', 'd'],
- max: 4,
+ modelValue: ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'],
+ max: 10,
},
})
@@ -200,19 +200,19 @@ describe('PackageSelector', () => {
const component = await mountSuspended(PackageSelector, {
props: {
modelValue: ['lodash', 'underscore'],
- max: 4,
+ max: 10,
},
})
expect(component.text()).toContain('2')
- expect(component.text()).toContain('4')
+ expect(component.text()).toContain('10')
})
it('shows add hint when less than 2 packages', async () => {
const component = await mountSuspended(PackageSelector, {
props: {
modelValue: ['lodash'],
- max: 4,
+ max: 10,
},
})
@@ -222,15 +222,15 @@ describe('PackageSelector', () => {
})
describe('max prop', () => {
- it('defaults to 4 when not provided', async () => {
+ it('defaults to 10 when not provided', async () => {
const component = await mountSuspended(PackageSelector, {
props: {
modelValue: [],
},
})
- // Should show max of 4 in hint
- expect(component.text()).toContain('4')
+ // Should show max of 10 in hint
+ expect(component.text()).toContain('10')
})
it('uses provided max value', async () => {
diff --git a/test/nuxt/composables/structured-filters.spec.ts b/test/nuxt/composables/structured-filters.spec.ts
index fbea72fc46..524359ebe1 100644
--- a/test/nuxt/composables/structured-filters.spec.ts
+++ b/test/nuxt/composables/structured-filters.spec.ts
@@ -24,7 +24,6 @@ function createPackage(overrides: {
downloads: { weekly: overrides.downloads ?? 0 },
updated: overrides.updated ?? '2024-01-01T00:00:00.000Z',
flags: { insecure: overrides.insecure ?? 0 },
- score: { final: 0.5, detail: { quality: 0.5, popularity: 0.5, maintenance: 0.5 } },
searchScore: 1000,
}
}
diff --git a/test/nuxt/composables/use-markdown.spec.ts b/test/nuxt/composables/use-markdown.spec.ts
index bf7abd02b0..7aa258e0df 100644
--- a/test/nuxt/composables/use-markdown.spec.ts
+++ b/test/nuxt/composables/use-markdown.spec.ts
@@ -196,95 +196,6 @@ describe('useMarkdown', () => {
})
})
- describe('packageName prop', () => {
- it('strips package name from the beginning of plain text', () => {
- const processed = useMarkdown({
- text: 'my-package - A great library',
- packageName: 'my-package',
- })
- expect(processed.value).toBe('A great library')
- })
-
- it('strips package name with colon separator', () => {
- const processed = useMarkdown({
- text: 'my-package: A great library',
- packageName: 'my-package',
- })
- expect(processed.value).toBe('A great library')
- })
-
- it('strips package name with em dash separator', () => {
- const processed = useMarkdown({
- text: 'my-package — A great library',
- packageName: 'my-package',
- })
- expect(processed.value).toBe('A great library')
- })
-
- it('strips package name without separator', () => {
- const processed = useMarkdown({
- text: 'my-package A great library',
- packageName: 'my-package',
- })
- expect(processed.value).toBe('A great library')
- })
-
- it('is case-insensitive', () => {
- const processed = useMarkdown({
- text: 'MY-PACKAGE - A great library',
- packageName: 'my-package',
- })
- expect(processed.value).toBe('A great library')
- })
-
- it('does not strip package name from middle of text', () => {
- const processed = useMarkdown({
- text: 'A great my-package library',
- packageName: 'my-package',
- })
- expect(processed.value).toBe('A great my-package library')
- })
-
- it('handles scoped package names', () => {
- const processed = useMarkdown({
- text: '@org/my-package - A great library',
- packageName: '@org/my-package',
- })
- expect(processed.value).toBe('A great library')
- })
-
- it('handles package names with special regex characters', () => {
- const processed = useMarkdown({
- text: 'pkg.name+test - A great library',
- packageName: 'pkg.name+test',
- })
- expect(processed.value).toBe('A great library')
- })
-
- it('strips package name from HTML-containing descriptions', () => {
- const processed = useMarkdown({
- text: 'my-package - A great library',
- packageName: 'my-package',
- })
- expect(processed.value).toBe('A great library')
- })
-
- it('strips package name from descriptions with markdown images', () => {
- const processed = useMarkdown({
- text: ' my-package - A great library',
- packageName: 'my-package',
- })
- expect(processed.value).toBe('A great library')
- })
-
- it('does nothing when packageName is not provided', () => {
- const processed = useMarkdown({
- text: 'my-package - A great library',
- })
- expect(processed.value).toBe('my-package - A great library')
- })
- })
-
describe('HTML tag stripping', () => {
it('strips simple HTML tags but keeps content', () => {
const processed = useMarkdown({ text: 'bold text here' })
diff --git a/test/nuxt/composables/use-package-comparison.spec.ts b/test/nuxt/composables/use-package-comparison.spec.ts
index 071e1d354c..bf3710c9b1 100644
--- a/test/nuxt/composables/use-package-comparison.spec.ts
+++ b/test/nuxt/composables/use-package-comparison.spec.ts
@@ -89,7 +89,7 @@ describe('usePackageComparison', () => {
// Should use version-specific timestamp, NOT time.modified
expect(values[0]!.display).toBe('2024-06-15T00:00:00.000Z')
- expect(values[0]!.raw).toBe(new Date('2024-06-15T00:00:00.000Z').getTime())
+ expect(values[0]!.raw).toBe(Date.parse('2024-06-15T00:00:00.000Z'))
})
it('stores version-specific time in metadata', async () => {
diff --git a/test/nuxt/composables/use-repository-url.spec.ts b/test/nuxt/composables/use-repository-url.spec.ts
new file mode 100644
index 0000000000..b66ff46ef6
--- /dev/null
+++ b/test/nuxt/composables/use-repository-url.spec.ts
@@ -0,0 +1,69 @@
+import { describe, expect, it } from 'vitest'
+
+type RequestedVersion = Exclude
+
+function mockPackage(repository: RequestedVersion['repository']): RequestedVersion {
+ return {
+ _id: 'foo',
+ name: 'foo',
+ dist: { shasum: 'foo', signatures: [], tarball: '' },
+ _npmVersion: '',
+ version: '0.1.0',
+ repository,
+ }
+}
+
+describe('useRepositoryUrl', () => {
+ it('should strip .git from repository URL', () => {
+ const { repositoryUrl } = useRepositoryUrl(
+ mockPackage({
+ type: 'git',
+ url: 'git+https://github.com/agentmarkup/agentmarkup.git',
+ }),
+ )
+
+ expect(repositoryUrl.value).toBe('https://github.com/agentmarkup/agentmarkup')
+ })
+
+ it('should append /tree/HEAD/{directory} for monorepo packages without .git', () => {
+ const { repositoryUrl } = useRepositoryUrl(
+ mockPackage({
+ type: 'git',
+ url: 'git+https://github.com/agentmarkup/agentmarkup.git',
+ directory: 'packages/vite',
+ }),
+ )
+
+ expect(repositoryUrl.value).toBe(
+ 'https://github.com/agentmarkup/agentmarkup/tree/HEAD/packages/vite',
+ )
+ })
+
+ it('should return null when repository has no url', () => {
+ // @ts-expect-error tests
+ const { repositoryUrl } = useRepositoryUrl(mockPackage({}))
+ expect(repositoryUrl.value).toBeNull()
+ })
+
+ it('should return null when no repository field', () => {
+ // @ts-expect-error tests
+ const { repositoryUrl } = useRepositoryUrl(mockPackage())
+ expect(repositoryUrl.value).toBeNull()
+ })
+
+ it('should handle plain HTTPS URLs without .git suffix', () => {
+ const { repositoryUrl } = useRepositoryUrl(mockPackage({ url: 'https://github.com/nuxt/ui' }))
+ expect(repositoryUrl.value).toBe('https://github.com/nuxt/ui')
+ })
+
+ it('should handle directory with trailing slash', () => {
+ const { repositoryUrl } = useRepositoryUrl(
+ mockPackage({
+ url: 'git+https://github.com/org/repo.git',
+ directory: 'packages/core/',
+ }),
+ )
+
+ expect(repositoryUrl.value).toBe('https://github.com/org/repo/tree/HEAD/packages/core/')
+ })
+})
diff --git a/test/unit/a11y-component-coverage.spec.ts b/test/unit/a11y-component-coverage.spec.ts
index ec2f95a8a7..a73b58dd6d 100644
--- a/test/unit/a11y-component-coverage.spec.ts
+++ b/test/unit/a11y-component-coverage.spec.ts
@@ -29,6 +29,10 @@ const SKIPPED_COMPONENTS: Record = {
// Client-only components with complex dependencies
'Header/AuthModal.client.vue': 'Complex auth modal with navigation - requires full app context',
+ 'Brand/Customize.vue':
+ 'Client-only component using useAccentColor, useLocalStorage, and canvas API',
+ 'LogoContextMenu.vue':
+ 'Client-only context menu using Teleport, clipboard API, and pointer events',
// Complex components requiring full app context or specific runtime conditions
'Header/OrgsDropdown.vue': 'Requires connector context and API calls',
diff --git a/test/unit/app/utils/download-anomalies.spec.ts b/test/unit/app/utils/download-anomalies.spec.ts
index f7a00b4c39..745778e35a 100644
--- a/test/unit/app/utils/download-anomalies.spec.ts
+++ b/test/unit/app/utils/download-anomalies.spec.ts
@@ -22,7 +22,7 @@ function month(monthStr: string, value: number): MonthlyDataPoint {
return {
value,
month: monthStr,
- timestamp: new Date(`${monthStr}-01T00:00:00Z`).getTime(),
+ timestamp: Date.parse(`${monthStr}-01T00:00:00Z`),
}
}
@@ -30,7 +30,7 @@ function year(yearStr: string, value: number): YearlyDataPoint {
return {
value,
year: yearStr,
- timestamp: new Date(`${yearStr}-01-01T00:00:00Z`).getTime(),
+ timestamp: Date.parse(`${yearStr}-01-01T00:00:00Z`),
}
}
diff --git a/test/unit/app/utils/versions.spec.ts b/test/unit/app/utils/versions.spec.ts
index 2108d4f265..47abe40825 100644
--- a/test/unit/app/utils/versions.spec.ts
+++ b/test/unit/app/utils/versions.spec.ts
@@ -425,11 +425,11 @@ describe('isSameVersionGroup', () => {
})
})
-describe('compareTagRows', () => {
- function row(version: string, tags: string[]) {
- return { id: `version:${version}`, primaryTag: tags[0]!, tags, version }
- }
+function row(version: string, tags: string[]) {
+ return { id: `version:${version}`, primaryTag: tags[0]!, tags, version }
+}
+describe('compareTagRows', () => {
it('sorts by tag priority ascending (rc before beta)', () => {
const rc = row('2.0.0-rc.1', ['rc'])
const beta = row('2.0.0-beta.1', ['beta'])
diff --git a/test/unit/shared/types/index.spec.ts b/test/unit/shared/types/index.spec.ts
index 031162ad7b..d364fe7ebe 100644
--- a/test/unit/shared/types/index.spec.ts
+++ b/test/unit/shared/types/index.spec.ts
@@ -46,14 +46,6 @@ describe('npm registry types', () => {
npm: 'https://www.npmjs.com/package/test-package',
},
},
- score: {
- final: 0.9,
- detail: {
- quality: 0.9,
- popularity: 0.8,
- maintenance: 0.95,
- },
- },
searchScore: 100000,
},
],
@@ -64,6 +56,5 @@ describe('npm registry types', () => {
expect(response.total).toBe(1)
expect(response.objects[0]?.package.name).toBe('test-package')
- expect(response.objects[0]?.score?.final).toBe(0.9)
})
})
diff --git a/test/unit/shared/types/preferences.spec.ts b/test/unit/shared/types/preferences.spec.ts
index 07b6e0da61..9d928c57ec 100644
--- a/test/unit/shared/types/preferences.spec.ts
+++ b/test/unit/shared/types/preferences.spec.ts
@@ -16,8 +16,6 @@ describe('parseSortOption', () => {
['updated-asc', 'updated', 'asc'],
['name-asc', 'name', 'asc'],
['name-desc', 'name', 'desc'],
- ['quality-desc', 'quality', 'desc'],
- ['score-asc', 'score', 'asc'],
['relevance-desc', 'relevance', 'desc'],
['relevance-asc', 'relevance', 'asc'],
])('parses "%s" to key="%s" direction="%s"', (option, expectedKey, expectedDirection) => {
@@ -45,7 +43,6 @@ describe('buildSortOption', () => {
['downloads-week', 'asc', 'downloads-week-asc'],
['updated', 'desc', 'updated-desc'],
['name', 'asc', 'name-asc'],
- ['quality', 'desc', 'quality-desc'],
['relevance', 'desc', 'relevance-desc'],
])('builds "%s" + "%s" to "%s"', (key, direction, expected) => {
expect(buildSortOption(key, direction)).toBe(expected)
@@ -70,10 +67,6 @@ describe('parseSortOption and buildSortOption roundtrip', () => {
'downloads-month-asc',
'updated-desc',
'name-asc',
- 'quality-desc',
- 'popularity-asc',
- 'maintenance-desc',
- 'score-asc',
'relevance-desc',
'relevance-asc',
])('roundtrips "%s" correctly', option => {
diff --git a/test/unit/shared/utils/git-providers.spec.ts b/test/unit/shared/utils/git-providers.spec.ts
index 4b6b5dbad3..e4c6e3c5d4 100644
--- a/test/unit/shared/utils/git-providers.spec.ts
+++ b/test/unit/shared/utils/git-providers.spec.ts
@@ -38,6 +38,12 @@ describe('normalizeGitUrl', () => {
expect
.soft(normalizeGitUrl('https://bitbucket.org/user/repo.git'))
.toBe('https://bitbucket.org/user/repo')
+ expect
+ .soft(normalizeGitUrl('git+https://github.com/user/repo.git#readme'))
+ .toBe('https://github.com/user/repo#readme')
+ expect
+ .soft(normalizeGitUrl('git+https://github.com/user/repo.git?path=packages/core'))
+ .toBe('https://github.com/user/repo?path=packages/core')
})
it('should convert git:// protocol to https://', () => {