From 413f52dde97aa43a15768b6a298d78674a770b1b Mon Sep 17 00:00:00 2001 From: luhengchang Date: Mon, 20 Apr 2026 18:08:43 +0800 Subject: [PATCH] feat(i18n): add i18next-translation-dedupe package --- .changeset/feat-i18next-custom-sections.md | 24 + .github/i18n.instructions.md | 5 + CODEOWNERS | 1 + eslint.config.js | 1 + .../i18n/i18next-translation-dedupe/README.md | 73 ++ .../i18next-translation-dedupe/package.json | 52 + .../src/constants.ts | 4 + .../i18next-translation-dedupe/src/index.ts | 6 + .../i18next-translation-dedupe/src/plugin.ts | 143 +++ .../i18next-translation-dedupe/src/runtime.ts | 39 + .../i18next-rspeedy-project/src/App.tsx | 8 + .../i18next-rspeedy-project/src/i18n.ts | 15 + .../i18next-rspeedy-project/src/index.tsx | 8 + .../src/locales/en.json | 4 + .../src/locales/zh.json | 4 + .../src/rspeedy-env.d.ts | 4 + .../i18next-rspeedy-project/src/tsconfig.json | 14 + .../i18next-rspeedy-project/tsconfig.json | 14 + .../tsconfig.node.json | 13 + .../tests/i18next-translation-dedupe.test.ts | 120 ++ .../tsconfig.build.json | 15 + .../i18next-translation-dedupe/tsconfig.json | 9 + .../vitest.config.ts | 15 + packages/i18n/tsconfig.json | 11 + pnpm-lock.yaml | 1046 +++++++++++++---- pnpm-workspace.yaml | 1 + tsconfig.json | 3 + vitest.config.ts | 1 + 28 files changed, 1410 insertions(+), 243 deletions(-) create mode 100644 .changeset/feat-i18next-custom-sections.md create mode 100644 .github/i18n.instructions.md create mode 100644 packages/i18n/i18next-translation-dedupe/README.md create mode 100644 packages/i18n/i18next-translation-dedupe/package.json create mode 100644 packages/i18n/i18next-translation-dedupe/src/constants.ts create mode 100644 packages/i18n/i18next-translation-dedupe/src/index.ts create mode 100644 packages/i18n/i18next-translation-dedupe/src/plugin.ts create mode 100644 packages/i18n/i18next-translation-dedupe/src/runtime.ts create mode 100644 packages/i18n/i18next-translation-dedupe/tests/fixtures/i18next-rspeedy-project/src/App.tsx create mode 100644 packages/i18n/i18next-translation-dedupe/tests/fixtures/i18next-rspeedy-project/src/i18n.ts create mode 100644 packages/i18n/i18next-translation-dedupe/tests/fixtures/i18next-rspeedy-project/src/index.tsx create mode 100644 packages/i18n/i18next-translation-dedupe/tests/fixtures/i18next-rspeedy-project/src/locales/en.json create mode 100644 packages/i18n/i18next-translation-dedupe/tests/fixtures/i18next-rspeedy-project/src/locales/zh.json create mode 100644 packages/i18n/i18next-translation-dedupe/tests/fixtures/i18next-rspeedy-project/src/rspeedy-env.d.ts create mode 100644 packages/i18n/i18next-translation-dedupe/tests/fixtures/i18next-rspeedy-project/src/tsconfig.json create mode 100644 packages/i18n/i18next-translation-dedupe/tests/fixtures/i18next-rspeedy-project/tsconfig.json create mode 100644 packages/i18n/i18next-translation-dedupe/tests/fixtures/i18next-rspeedy-project/tsconfig.node.json create mode 100644 packages/i18n/i18next-translation-dedupe/tests/i18next-translation-dedupe.test.ts create mode 100644 packages/i18n/i18next-translation-dedupe/tsconfig.build.json create mode 100644 packages/i18n/i18next-translation-dedupe/tsconfig.json create mode 100644 packages/i18n/i18next-translation-dedupe/vitest.config.ts create mode 100644 packages/i18n/tsconfig.json diff --git a/.changeset/feat-i18next-custom-sections.md b/.changeset/feat-i18next-custom-sections.md new file mode 100644 index 0000000000..c124f329ab --- /dev/null +++ b/.changeset/feat-i18next-custom-sections.md @@ -0,0 +1,24 @@ +--- +"@lynx-js/i18next-translation-dedupe": patch +--- + +Introduce `@lynx-js/i18next-translation-dedupe` package to avoid bundling i18next translations twice in Lynx apps. + +The package reads translations extracted by `rsbuild-plugin-i18next-extractor`, skips the extractor's default rendered asset, and writes the translations into the Lynx bundle custom section: + +```json +{ + "customSections": { + "i18next-translations": { + "content": { + "en-US": { + "hello": "Hello" + }, + "zh-CN": { + "hello": "你好" + } + } + } + } +} +``` diff --git a/.github/i18n.instructions.md b/.github/i18n.instructions.md new file mode 100644 index 0000000000..fd557e5f40 --- /dev/null +++ b/.github/i18n.instructions.md @@ -0,0 +1,5 @@ +--- +applyTo: "packages/i18n/**" +--- + +Treat mini-apps under `tests/fixtures/**` as build fixtures rather than production source. When they are used only as integration-test inputs, prefer keeping them out of root ESLint coverage instead of forcing them to satisfy the full package source lint rules. diff --git a/CODEOWNERS b/CODEOWNERS index 4d7df82a28..f506de663c 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -2,6 +2,7 @@ packages/repl/** @huxpro packages/web-platform/** @pupiltong @Sherry-hue packages/webpack/** @colinaaa @upupming @luhc228 packages/rspeedy/** @colinaaa @upupming @luhc228 +packages/i18n/** @luhc228 packages/rspeedy/plugin-react/** @upupming packages/react/** @hzy @HuJean @Yradex packages/react/transform/** @gaoachao diff --git a/eslint.config.js b/eslint.config.js index 7101d786ee..ebe7459a26 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -59,6 +59,7 @@ export default tseslint.config( 'packages/**/vitest.config.ts', 'packages/react/runtime/compat/**', 'packages/rspeedy/create-rspeedy/template-*/**', + 'packages/i18n/**/tests/fixtures/**', 'packages/{rspeedy,webpack}/*/test/**/cases/**', 'packages/{rspeedy,webpack}/*/test/**/hotCases/**', 'packages/{rspeedy,webpack}/*/test/**/diagnostic/**', diff --git a/packages/i18n/i18next-translation-dedupe/README.md b/packages/i18n/i18next-translation-dedupe/README.md new file mode 100644 index 0000000000..fbfd1c8d1d --- /dev/null +++ b/packages/i18n/i18next-translation-dedupe/README.md @@ -0,0 +1,73 @@ +

@lynx-js/i18next-translation-dedupe

+ +Dedupe i18next translations between Rspeedy build output and Lynx runtime. + +## Install + +```bash +npm install i18next +npm install -D @lynx-js/i18next-translation-dedupe rsbuild-plugin-i18next-extractor i18next-cli +``` + +## Rspeedy Usage + +```ts +import { defineConfig } from '@lynx-js/rspeedy'; +import { pluginI18nextExtractor } from 'rsbuild-plugin-i18next-extractor'; +import { pluginLynxI18nextTranslationDedupe } from '@lynx-js/i18next-translation-dedupe'; + +export default defineConfig({ + plugins: [ + pluginI18nextExtractor({ + localesDir: './src/locales', + }), + pluginLynxI18nextTranslationDedupe(), + ], +}); +``` + +`pluginLynxI18nextTranslationDedupe()` reads extracted translations from `rsbuild-plugin-i18next-extractor`, skips the extractor's default rendered asset to avoid bundling translations twice, and writes the translations into the Lynx bundle `customSections` for runtime loading. + +## Runtime Usage + +```ts +import i18next from 'i18next'; +import { loadI18nextTranslations } from '@lynx-js/i18next-translation-dedupe'; + +await i18next.init({ + lng: 'en-US', + fallbackLng: 'en-US', + resources: loadI18nextTranslations(), +}); +``` + +## Custom Section Contract + +The package uses one custom section key: + +- `i18next-translations` + +Its content is expected to be a locale-to-translation-object map: + +```ts +{ + 'en-US': { + hello: 'Hello', + }, + 'zh-CN': { + hello: '你好', + }, +} +``` + +At runtime, `loadI18nextTranslations()` converts that shape into i18next's `Resource` format: + +```ts +{ + 'en-US': { + translation: { + hello: 'Hello', + }, + }, +} +``` diff --git a/packages/i18n/i18next-translation-dedupe/package.json b/packages/i18n/i18next-translation-dedupe/package.json new file mode 100644 index 0000000000..18d880cec1 --- /dev/null +++ b/packages/i18n/i18next-translation-dedupe/package.json @@ -0,0 +1,52 @@ +{ + "name": "@lynx-js/i18next-translation-dedupe", + "version": "0.0.0", + "description": "Dedupe i18next translations in Lynx bundles.", + "keywords": [ + "Lynx", + "i18next", + "rspeedy", + "rsbuild" + ], + "repository": { + "type": "git", + "url": "https://github.com/lynx-family/lynx-stack.git", + "directory": "packages/i18n/i18next-translation-dedupe" + }, + "license": "Apache-2.0", + "type": "module", + "exports": { + ".": { + "types": "./lib/index.d.ts", + "import": "./lib/index.js" + }, + "./package.json": "./package.json" + }, + "types": "./lib/index.d.ts", + "files": [ + "lib", + "!lib/**/*.js.map", + "CHANGELOG.md", + "README.md" + ], + "scripts": { + "build": "tsc --build ./tsconfig.build.json", + "test": "vitest run" + }, + "devDependencies": { + "@lynx-js/react": "workspace:*", + "@lynx-js/react-rsbuild-plugin": "workspace:*", + "@lynx-js/rspeedy": "workspace:*", + "@lynx-js/template-webpack-plugin": "workspace:*", + "@lynx-js/types": "3.7.0", + "i18next": "26.0.6", + "i18next-cli": "1.54.2", + "rsbuild-plugin-i18next-extractor": "0.2.0" + }, + "peerDependencies": { + "rsbuild-plugin-i18next-extractor": "*" + }, + "engines": { + "node": ">=18" + } +} diff --git a/packages/i18n/i18next-translation-dedupe/src/constants.ts b/packages/i18n/i18next-translation-dedupe/src/constants.ts new file mode 100644 index 0000000000..a2b032822d --- /dev/null +++ b/packages/i18n/i18next-translation-dedupe/src/constants.ts @@ -0,0 +1,4 @@ +// Copyright 2024 The Lynx Authors. All rights reserved. +// Licensed under the Apache License Version 2.0 that can be found in the +// LICENSE file in the root directory of this source tree. +export const I18N_TRANSLATIONS_SECTION_KEY = 'i18next-translations'; diff --git a/packages/i18n/i18next-translation-dedupe/src/index.ts b/packages/i18n/i18next-translation-dedupe/src/index.ts new file mode 100644 index 0000000000..268f41d43f --- /dev/null +++ b/packages/i18n/i18next-translation-dedupe/src/index.ts @@ -0,0 +1,6 @@ +// Copyright 2024 The Lynx Authors. All rights reserved. +// Licensed under the Apache License Version 2.0 that can be found in the +// LICENSE file in the root directory of this source tree. +export { I18N_TRANSLATIONS_SECTION_KEY } from './constants.js'; +export { loadI18nextTranslations, toI18nextTranslations } from './runtime.js'; +export { pluginLynxI18nextTranslationDedupe } from './plugin.js'; diff --git a/packages/i18n/i18next-translation-dedupe/src/plugin.ts b/packages/i18n/i18next-translation-dedupe/src/plugin.ts new file mode 100644 index 0000000000..0a2b0f2b09 --- /dev/null +++ b/packages/i18n/i18next-translation-dedupe/src/plugin.ts @@ -0,0 +1,143 @@ +// Copyright 2024 The Lynx Authors. All rights reserved. +// Licensed under the Apache License Version 2.0 that can be found in the +// LICENSE file in the root directory of this source tree. +import { getI18nextExtractorWebpackPluginHooks } from 'rsbuild-plugin-i18next-extractor'; +import type { AfterExtractPayload } from 'rsbuild-plugin-i18next-extractor'; + +import type { RsbuildPlugin, Rspack } from '@lynx-js/rspeedy'; +import type { + LynxTemplatePlugin as LynxTemplatePluginClass, + TemplateHooks, +} from '@lynx-js/template-webpack-plugin'; + +import { I18N_TRANSLATIONS_SECTION_KEY } from './constants.js'; + +type I18nExtractionStore = Map< + string, + AfterExtractPayload['extractedTranslationsByLocale'] +>; + +type BeforeEncodeArgs = Parameters< + Parameters[1] +>[0]; + +interface LynxTemplatePluginExposure { + LynxTemplatePlugin: { + getLynxTemplatePluginHooks: + typeof LynxTemplatePluginClass.getLynxTemplatePluginHooks; + }; +} + +class LynxI18nextExtractorHooksWebpackPlugin { + constructor(private readonly store: I18nExtractionStore) {} + + apply(compiler: Rspack.Compiler) { + compiler.hooks.compilation.tap( + 'LynxI18nextExtractorHooksWebpackPlugin', + (compilation) => { + this.store.clear(); + + const hooks = getI18nextExtractorWebpackPluginHooks(compilation); + + hooks.afterExtract.tap( + 'LynxI18nextExtractorHooksWebpackPlugin', + (payload) => { + this.store.set( + payload.entryName, + payload.extractedTranslationsByLocale, + ); + + return payload; + }, + ); + + hooks.renderExtractedTranslations.tapPromise( + 'LynxI18nextExtractorHooksWebpackPlugin', + async (payload) => ({ + ...payload, + code: '', + skip: true, + }), + ); + }, + ); + } +} + +class LynxI18nextTranslationDedupeWebpackPlugin { + constructor( + private readonly store: I18nExtractionStore, + private readonly lynxTemplatePlugin: + LynxTemplatePluginExposure['LynxTemplatePlugin'], + ) {} + + apply(compiler: Rspack.Compiler) { + compiler.hooks.compilation.tap( + 'LynxI18nextTranslationDedupeWebpackPlugin', + (compilation) => { + const hooks = this.lynxTemplatePlugin.getLynxTemplatePluginHooks( + compilation as unknown as Parameters< + LynxTemplatePluginExposure['LynxTemplatePlugin'][ + 'getLynxTemplatePluginHooks' + ] + >[0], + ); + + hooks.beforeEncode.tap( + 'LynxI18nextTranslationDedupeWebpackPlugin', + (args: BeforeEncodeArgs) => { + const entryName = args.entryNames[0]; + + if (!entryName) { + return args; + } + + const translationsByLocale = this.store.get(entryName); + + if (!translationsByLocale) { + return args; + } + + args.encodeData.customSections[I18N_TRANSLATIONS_SECTION_KEY] = { + content: translationsByLocale, + }; + + return args; + }, + ); + }, + ); + } +} + +export function pluginLynxI18nextTranslationDedupe(): RsbuildPlugin { + return { + name: 'lynx:i18next-translation-dedupe', + pre: ['lynx:react', 'rsbuild:i18next-extractor'], + setup(api) { + const store: I18nExtractionStore = new Map(); + const templatePluginExposure = api.useExposed( + Symbol.for('LynxTemplatePlugin'), + ); + + if (!templatePluginExposure) { + return; + } + + const { LynxTemplatePlugin } = templatePluginExposure; + + api.modifyBundlerChain((chain) => { + chain + .plugin('lynx:i18next-extractor-hooks') + .use(LynxI18nextExtractorHooksWebpackPlugin, [store]); + + chain + .plugin('lynx:i18next-translation-dedupe') + .use(LynxI18nextTranslationDedupeWebpackPlugin, [ + store, + LynxTemplatePlugin, + ]); + }); + }, + } as RsbuildPlugin; +} diff --git a/packages/i18n/i18next-translation-dedupe/src/runtime.ts b/packages/i18n/i18next-translation-dedupe/src/runtime.ts new file mode 100644 index 0000000000..d1a6150374 --- /dev/null +++ b/packages/i18n/i18next-translation-dedupe/src/runtime.ts @@ -0,0 +1,39 @@ +// Copyright 2024 The Lynx Authors. All rights reserved. +// Licensed under the Apache License Version 2.0 that can be found in the +// LICENSE file in the root directory of this source tree. + +/// + +import type { Resource } from 'i18next'; +import type { AfterExtractPayload } from 'rsbuild-plugin-i18next-extractor'; + +import { I18N_TRANSLATIONS_SECTION_KEY } from './constants.js'; + +type TranslationsByLocale = + AfterExtractPayload['extractedTranslationsByLocale']; + +type LynxWithCustomSections = typeof lynx & { + getCustomSectionSync(sectionKey: string): TranslationsByLocale | undefined; +}; + +export function toI18nextTranslations( + translationsByLocale: TranslationsByLocale, +): Resource { + return Object.fromEntries( + Object.entries(translationsByLocale).map(([locale, translations]) => [ + locale, + { + translation: translations, + }, + ]), + ); +} + +export function loadI18nextTranslations(): Resource { + const raw = (lynx as LynxWithCustomSections).getCustomSectionSync( + I18N_TRANSLATIONS_SECTION_KEY, + ); + const translationsByLocale = raw && typeof raw === 'object' ? raw : {}; + + return toI18nextTranslations(translationsByLocale); +} diff --git a/packages/i18n/i18next-translation-dedupe/tests/fixtures/i18next-rspeedy-project/src/App.tsx b/packages/i18n/i18next-translation-dedupe/tests/fixtures/i18next-rspeedy-project/src/App.tsx new file mode 100644 index 0000000000..8abfd615cc --- /dev/null +++ b/packages/i18n/i18next-translation-dedupe/tests/fixtures/i18next-rspeedy-project/src/App.tsx @@ -0,0 +1,8 @@ +// Copyright 2026 The Lynx Authors. All rights reserved. +// Licensed under the Apache License Version 2.0 that can be found in the +// LICENSE file in the root directory of this source tree. +import { i18n } from './i18n.js'; + +export function App() { + return {String(i18n.t('hello'))}; +} diff --git a/packages/i18n/i18next-translation-dedupe/tests/fixtures/i18next-rspeedy-project/src/i18n.ts b/packages/i18n/i18next-translation-dedupe/tests/fixtures/i18next-rspeedy-project/src/i18n.ts new file mode 100644 index 0000000000..90890db358 --- /dev/null +++ b/packages/i18n/i18next-translation-dedupe/tests/fixtures/i18next-rspeedy-project/src/i18n.ts @@ -0,0 +1,15 @@ +// Copyright 2026 The Lynx Authors. All rights reserved. +// Licensed under the Apache License Version 2.0 that can be found in the +// LICENSE file in the root directory of this source tree. +import { createInstance, type i18n as I18nInstance } from 'i18next'; + +import { loadI18nextTranslations } from '../../../../src/runtime.js'; + +export const i18n: I18nInstance = createInstance(); + +void i18n.init({ + lng: 'en', + fallbackLng: 'en', + compatibilityJSON: 'v4', + resources: loadI18nextTranslations(), +}); diff --git a/packages/i18n/i18next-translation-dedupe/tests/fixtures/i18next-rspeedy-project/src/index.tsx b/packages/i18n/i18next-translation-dedupe/tests/fixtures/i18next-rspeedy-project/src/index.tsx new file mode 100644 index 0000000000..ea04e7423e --- /dev/null +++ b/packages/i18n/i18next-translation-dedupe/tests/fixtures/i18next-rspeedy-project/src/index.tsx @@ -0,0 +1,8 @@ +// Copyright 2026 The Lynx Authors. All rights reserved. +// Licensed under the Apache License Version 2.0 that can be found in the +// LICENSE file in the root directory of this source tree. +import { root } from '@lynx-js/react'; + +import { App } from './App.js'; + +root.render(); diff --git a/packages/i18n/i18next-translation-dedupe/tests/fixtures/i18next-rspeedy-project/src/locales/en.json b/packages/i18n/i18next-translation-dedupe/tests/fixtures/i18next-rspeedy-project/src/locales/en.json new file mode 100644 index 0000000000..e96aeb8422 --- /dev/null +++ b/packages/i18n/i18next-translation-dedupe/tests/fixtures/i18next-rspeedy-project/src/locales/en.json @@ -0,0 +1,4 @@ +{ + "hello": "Hello world", + "world": "world" +} diff --git a/packages/i18n/i18next-translation-dedupe/tests/fixtures/i18next-rspeedy-project/src/locales/zh.json b/packages/i18n/i18next-translation-dedupe/tests/fixtures/i18next-rspeedy-project/src/locales/zh.json new file mode 100644 index 0000000000..ebd64ba450 --- /dev/null +++ b/packages/i18n/i18next-translation-dedupe/tests/fixtures/i18next-rspeedy-project/src/locales/zh.json @@ -0,0 +1,4 @@ +{ + "hello": "你好,世界", + "world": "世界" +} diff --git a/packages/i18n/i18next-translation-dedupe/tests/fixtures/i18next-rspeedy-project/src/rspeedy-env.d.ts b/packages/i18n/i18next-translation-dedupe/tests/fixtures/i18next-rspeedy-project/src/rspeedy-env.d.ts new file mode 100644 index 0000000000..9bd6a87232 --- /dev/null +++ b/packages/i18n/i18next-translation-dedupe/tests/fixtures/i18next-rspeedy-project/src/rspeedy-env.d.ts @@ -0,0 +1,4 @@ +// Copyright 2026 The Lynx Authors. All rights reserved. +// Licensed under the Apache License Version 2.0 that can be found in the +// LICENSE file in the root directory of this source tree. +/// diff --git a/packages/i18n/i18next-translation-dedupe/tests/fixtures/i18next-rspeedy-project/src/tsconfig.json b/packages/i18n/i18next-translation-dedupe/tests/fixtures/i18next-rspeedy-project/src/tsconfig.json new file mode 100644 index 0000000000..f552547754 --- /dev/null +++ b/packages/i18n/i18next-translation-dedupe/tests/fixtures/i18next-rspeedy-project/src/tsconfig.json @@ -0,0 +1,14 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "composite": true, + "jsx": "react-jsx", + "jsxImportSource": "@lynx-js/react", + "module": "ESNext", + "moduleResolution": "Bundler", + "lib": ["es2019"], + "target": "es2019", + "noEmit": true, + }, + "include": ["./**/*.ts", "./**/*.tsx"], +} diff --git a/packages/i18n/i18next-translation-dedupe/tests/fixtures/i18next-rspeedy-project/tsconfig.json b/packages/i18n/i18next-translation-dedupe/tests/fixtures/i18next-rspeedy-project/tsconfig.json new file mode 100644 index 0000000000..1351eb930f --- /dev/null +++ b/packages/i18n/i18next-translation-dedupe/tests/fixtures/i18next-rspeedy-project/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "strict": true, + "isolatedModules": true, + "verbatimModuleSyntax": true, + "esModuleInterop": true, + "skipLibCheck": true, + }, + "references": [ + { "path": "./tsconfig.node.json" }, + { "path": "./src" }, + ], + "files": [], +} diff --git a/packages/i18n/i18next-translation-dedupe/tests/fixtures/i18next-rspeedy-project/tsconfig.node.json b/packages/i18n/i18next-translation-dedupe/tests/fixtures/i18next-rspeedy-project/tsconfig.node.json new file mode 100644 index 0000000000..251fcdc5c8 --- /dev/null +++ b/packages/i18n/i18next-translation-dedupe/tests/fixtures/i18next-rspeedy-project/tsconfig.node.json @@ -0,0 +1,13 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "composite": true, + "module": "node16", + "moduleResolution": "node16", + "erasableSyntaxOnly": true, + "lib": ["es2023"], + "target": "es2022", + "noEmit": true, + }, + "include": ["./lynx.config.ts"], +} diff --git a/packages/i18n/i18next-translation-dedupe/tests/i18next-translation-dedupe.test.ts b/packages/i18n/i18next-translation-dedupe/tests/i18next-translation-dedupe.test.ts new file mode 100644 index 0000000000..f8ff5b042a --- /dev/null +++ b/packages/i18n/i18next-translation-dedupe/tests/i18next-translation-dedupe.test.ts @@ -0,0 +1,120 @@ +// Copyright 2024 The Lynx Authors. All rights reserved. +// Licensed under the Apache License Version 2.0 that can be found in the +// LICENSE file in the root directory of this source tree. +import { existsSync, readFileSync, readdirSync } from 'node:fs'; +import { mkdtemp } from 'node:fs/promises'; +import { tmpdir } from 'node:os'; +import path, { dirname } from 'node:path'; +import { fileURLToPath } from 'node:url'; + +import { pluginI18nextExtractor } from 'rsbuild-plugin-i18next-extractor'; +import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest'; + +import { pluginReactLynx } from '@lynx-js/react-rsbuild-plugin'; +import { createRspeedy } from '@lynx-js/rspeedy'; + +import { pluginLynxI18nextTranslationDedupe } from '../src/index.js'; + +interface TasmJson { + customSections?: Record; + type?: 'lazy'; + }>; +} + +const testDir = dirname(fileURLToPath(import.meta.url)); +const fixtureRoot = path.join(testDir, 'fixtures/i18next-rspeedy-project'); +const pluginReactRoot = path.resolve(testDir, '../../../rspeedy/plugin-react'); + +beforeEach(() => { + vi.stubEnv('DEBUG', 'rspeedy'); +}); + +afterEach(() => { + vi.unstubAllEnvs(); +}); + +describe('i18next translation dedupe integration', () => { + test('build injects i18n translations into customSections and removes JS inline translations', async () => { + const distRoot = await mkdtemp( + path.join(tmpdir(), 'i18next-translation-dedupe-'), + ); + + const rspeedy = await createRspeedy({ + cwd: pluginReactRoot, + rspeedyConfig: { + source: { + entry: { + main: path.join(fixtureRoot, 'src/index.tsx'), + }, + }, + output: { + distPath: { + root: distRoot, + }, + filenameHash: false, + }, + tools: { + rspack: { + context: fixtureRoot, + resolve: { + extensionAlias: { + '.js': ['.ts', '.js'], + '.jsx': ['.tsx', '.jsx'], + }, + }, + }, + }, + plugins: [ + pluginReactLynx(), + pluginI18nextExtractor({ + localesDir: './src/locales', + }), + pluginLynxI18nextTranslationDedupe(), + ], + }, + }); + + const result = await rspeedy.build(); + await result.close(); + + const rspeedyDir = path.join(distRoot, '.rspeedy/main'); + const tasmPath = path.join(rspeedyDir, 'tasm.json'); + const mainThreadPath = path.join(rspeedyDir, 'main-thread.js'); + const backgroundPath = readDirBackgroundBundle(rspeedyDir); + + expect(existsSync(tasmPath)).toBe(true); + expect(existsSync(mainThreadPath)).toBe(true); + expect(backgroundPath).toBeTruthy(); + + const tasmJson = JSON.parse(readFileSync(tasmPath, 'utf8')) as TasmJson; + const customSection = + tasmJson.customSections?.['i18next-translations']?.content ?? null; + + expect(customSection).toEqual({ + en: { + hello: 'Hello world', + }, + zh: { + hello: '你好,世界', + }, + }); + + const mainThreadContent = readFileSync(mainThreadPath, 'utf8'); + const backgroundContent = readFileSync( + path.join(rspeedyDir, backgroundPath!), + 'utf8', + ); + + expect(mainThreadContent.includes('Hello world')).toBe(false); + expect(mainThreadContent.includes('你好,世界')).toBe(false); + expect(backgroundContent.includes('Hello world')).toBe(false); + expect(backgroundContent.includes('你好,世界')).toBe(false); + }); +}); + +function readDirBackgroundBundle(rspeedyDir: string): string | undefined { + return readdirSync(rspeedyDir).find( + (file: string) => file.startsWith('background.') && file.endsWith('.js'), + ); +} diff --git a/packages/i18n/i18next-translation-dedupe/tsconfig.build.json b/packages/i18n/i18next-translation-dedupe/tsconfig.build.json new file mode 100644 index 0000000000..4588b6aba6 --- /dev/null +++ b/packages/i18n/i18next-translation-dedupe/tsconfig.build.json @@ -0,0 +1,15 @@ +{ + "extends": ["../../../tsconfig.json"], + "compilerOptions": { + "composite": true, + "outDir": "./lib", + "baseUrl": "./", + "rootDir": "./src", + }, + "include": ["src"], + "exclude": ["tests/**"], + "references": [ + { "path": "../../rspeedy/core/tsconfig.build.json" }, + { "path": "../../webpack/template-webpack-plugin/tsconfig.build.json" }, + ], +} diff --git a/packages/i18n/i18next-translation-dedupe/tsconfig.json b/packages/i18n/i18next-translation-dedupe/tsconfig.json new file mode 100644 index 0000000000..79b695876c --- /dev/null +++ b/packages/i18n/i18next-translation-dedupe/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": ["./tsconfig.build.json"], + "compilerOptions": { + "rootDir": ".", + "noEmit": true, + }, + "include": ["src", "tests/**/*.test.ts", "vitest.config.ts"], + "exclude": [], +} diff --git a/packages/i18n/i18next-translation-dedupe/vitest.config.ts b/packages/i18n/i18next-translation-dedupe/vitest.config.ts new file mode 100644 index 0000000000..0c9f6ffa6a --- /dev/null +++ b/packages/i18n/i18next-translation-dedupe/vitest.config.ts @@ -0,0 +1,15 @@ +// Copyright 2024 The Lynx Authors. All rights reserved. +// Licensed under the Apache License Version 2.0 that can be found in the +// LICENSE file in the root directory of this source tree. + +import { defineProject, type UserWorkspaceConfig } from 'vitest/config'; + +const config: UserWorkspaceConfig = defineProject({ + test: { + name: 'i18n/i18next-translation-dedupe', + exclude: ['lib/**'], + include: ['tests/**/*.test.ts'], + }, +}); + +export default config; diff --git a/packages/i18n/tsconfig.json b/packages/i18n/tsconfig.json new file mode 100644 index 0000000000..5aed7c18b1 --- /dev/null +++ b/packages/i18n/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "composite": true, + }, + "references": [ + /** packages-start */ + { "path": "./i18next-translation-dedupe/tsconfig.build.json" }, + /** packages-end */ + ], + "include": [], +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 306d91f113..9ce2fc5797 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -299,7 +299,7 @@ importers: version: link:../../packages/react react-compiler-runtime: specifier: 0.0.0-experimental-fe727a3-20250909 - version: 0.0.0-experimental-fe727a3-20250909(react@19.2.4) + version: 0.0.0-experimental-fe727a3-20250909(react@19.2.5) devDependencies: '@lynx-js/qrcode-rsbuild-plugin': specifier: workspace:* @@ -488,10 +488,10 @@ importers: devDependencies: '@lynx-js/lynx-ui': specifier: ^3.130.0 - version: 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) '@lynx-js/lynx-ui-input': specifier: ^3.130.0 - version: 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) '@lynx-js/react': specifier: workspace:* version: link:../../react @@ -502,6 +502,33 @@ importers: specifier: ^18.3.28 version: 18.3.28 + packages/i18n/i18next-translation-dedupe: + devDependencies: + '@lynx-js/react': + specifier: workspace:* + version: link:../../react + '@lynx-js/react-rsbuild-plugin': + specifier: workspace:* + version: link:../../rspeedy/plugin-react + '@lynx-js/rspeedy': + specifier: workspace:* + version: link:../../rspeedy/core + '@lynx-js/template-webpack-plugin': + specifier: workspace:* + version: link:../../webpack/template-webpack-plugin + '@lynx-js/types': + specifier: 3.7.0 + version: 3.7.0 + i18next: + specifier: 26.0.6 + version: 26.0.6(typescript@5.9.3) + i18next-cli: + specifier: 1.54.2 + version: 1.54.2(@swc/helpers@0.5.21)(@types/node@24.10.13)(i18next@26.0.6(typescript@5.9.3))(typescript@5.9.3) + rsbuild-plugin-i18next-extractor: + specifier: 0.2.0 + version: 0.2.0(@rsbuild/core@1.7.5)(i18next-cli@1.54.2(@swc/helpers@0.5.21)(@types/node@24.10.13)(i18next@26.0.6(typescript@5.9.3))(typescript@5.9.3))(rollup@4.34.9) + packages/lynx/benchx_cli: dependencies: zx: @@ -622,7 +649,7 @@ importers: dependencies: framer-motion: specifier: 12.34.1 - version: 12.34.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 12.34.1(react-dom@19.2.4(react@19.2.5))(react@19.2.5) motion-dom: specifier: 12.23.12 version: 12.23.12 @@ -1292,7 +1319,7 @@ importers: version: link:../../../react react-compiler-runtime: specifier: 0.0.0-experimental-fe727a3-20250909 - version: 0.0.0-experimental-fe727a3-20250909(react@19.2.4) + version: 0.0.0-experimental-fe727a3-20250909(react@19.2.5) devDependencies: '@babel/core': specifier: ^7.29.0 @@ -1808,10 +1835,10 @@ importers: version: 1.7.9(@swc/helpers@0.5.21) swc-loader: specifier: ^0.2.7 - version: 0.2.7(@swc/core@1.15.24(@swc/helpers@0.5.21))(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))) + version: 0.2.7(@swc/core@1.15.30(@swc/helpers@0.5.21))(webpack@5.105.2(@swc/core@1.15.30(@swc/helpers@0.5.21))) webpack: specifier: ^5.105.2 - version: 5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21)) + version: 5.105.2(@swc/core@1.15.30(@swc/helpers@0.5.21)) packages/webpack/react-webpack-plugin: dependencies: @@ -1845,13 +1872,13 @@ importers: version: 1.7.9(@swc/helpers@0.5.21) css-loader: specifier: ^7.1.4 - version: 7.1.4(@rspack/core@1.7.9(@swc/helpers@0.5.21))(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))) + version: 7.1.4(@rspack/core@1.7.9(@swc/helpers@0.5.21))(webpack@5.105.2(@swc/core@1.15.30(@swc/helpers@0.5.21))) swc-loader: specifier: ^0.2.7 - version: 0.2.7(@swc/core@1.15.24(@swc/helpers@0.5.21))(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))) + version: 0.2.7(@swc/core@1.15.30(@swc/helpers@0.5.21))(webpack@5.105.2(@swc/core@1.15.30(@swc/helpers@0.5.21))) webpack: specifier: ^5.105.2 - version: 5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21)) + version: 5.105.2(@swc/core@1.15.30(@swc/helpers@0.5.21)) packages/webpack/runtime-wrapper-webpack-plugin: dependencies: @@ -2419,8 +2446,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/runtime@7.25.4': - resolution: {integrity: sha512-DSgLeL/FNcpXuzav5wfYvHCGvynXkJbn3Zvc3823AEe9nPwW9IK4UoCSS5yGymmQzN0pCPvivtgS6/8U2kkm1w==} + '@babel/runtime@7.29.2': + resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==} engines: {node: '>=6.9.0'} '@babel/template@7.28.6': @@ -2581,6 +2608,12 @@ packages: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 vitest: ^3.2 || ^4 + '@croct/json5-parser@0.2.2': + resolution: {integrity: sha512-0NJMLrbeLbQ0eCVj3UoH/kG2QckUgOASfwmfDTjyW1xAYPyTNJXcWVT/dssJdTJd0pRchW+qF0VFWQHcxs1OVw==} + + '@croct/json@2.1.0': + resolution: {integrity: sha512-UrWfjNQVlBxN+OVcFwHmkjARMW55MBN04E9KfGac8ac8z1QnFVuiOOFtMWXCk3UwsyRqhsNaFoYLZC+xxqsVjQ==} + '@csstools/color-helpers@5.1.0': resolution: {integrity: sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==} engines: {node: '>=18'} @@ -3093,6 +3126,55 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} + '@inquirer/ansi@2.0.5': + resolution: {integrity: sha512-doc2sWgJpbFQ64UflSVd17ibMGDuxO1yKgOgLMwavzESnXjFWJqUeG8saYosqKpHp4kWiM5x1nXvEjbpx90gzw==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + + '@inquirer/checkbox@5.1.4': + resolution: {integrity: sha512-w6KF8ZYRvqHhROkOTHXYC3qIV/KYEu5o12oLqQySvch61vrYtRxNSHTONSdJqWiFJPlCUQAHT5OgOIyuTr+MHQ==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/confirm@6.0.12': + resolution: {integrity: sha512-h9FgGun3QwVYNj5TWIZZ+slii73bMoBFjPfVIGtnFuL4t8gBiNDV9PcSfIzkuxvgquJKt9nr1QzszpBzTbH8Og==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/core@11.1.9': + resolution: {integrity: sha512-BDE4fG22uYh1bGSifcj7JSx119TVYNViMhMu85usp4Fswrzh6M0DV3yld64jA98uOAa2GSQ4Bg4bZRm2d2cwSg==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/editor@5.1.1': + resolution: {integrity: sha512-6y11LgmNpmn5D2aB5FgnCfBUBK8ZstwLCalyJmORcJZ/WrhOjm16mu6eSqIx8DnErxDqSLr+Jkp+GP8/Nwd5tA==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/expand@5.0.13': + resolution: {integrity: sha512-dF2zvrFo9LshkcB23/O1il13kBkBltWIXzut1evfbuBLXMiGIuC45c+ZQ0uukjCDsvI8OWqun4FRYMnzFCQa3g==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + '@inquirer/external-editor@1.0.3': resolution: {integrity: sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==} engines: {node: '>=18'} @@ -3102,6 +3184,91 @@ packages: '@types/node': optional: true + '@inquirer/external-editor@3.0.0': + resolution: {integrity: sha512-lDSwMgg+M5rq6JKBYaJwSX6T9e/HK2qqZ1oxmOwn4AQoJE5D+7TumsxLGC02PWS//rkIVqbZv3XA3ejsc9FYvg==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/figures@2.0.5': + resolution: {integrity: sha512-NsSs4kzfm12lNetHwAn3GEuH317IzpwrMCbOuMIVytpjnJ90YYHNwdRgYGuKmVxwuIqSgqk3M5qqQt1cDk0tGQ==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + + '@inquirer/input@5.0.12': + resolution: {integrity: sha512-uiMFBl4LqFzJClh80Q3f9hbOFJ6kgkDWI4LjAeBuyO6EanVVMF69AgOvpi1qdqjDSjDN6578B6nky9ceEpI+1Q==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/number@4.0.12': + resolution: {integrity: sha512-/vrwhEf7Xsuh+YlHF4IjSy3g1cyrQuPaSiHIxCEbLu8qnfvrcvJyCkoktOOF+xV9gSb77/G0n3h04RbMDW2sIg==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/password@5.0.12': + resolution: {integrity: sha512-CBh7YHju623lxJRcAOo498ZUwIuMy63bqW/vVq0tQAZVv+lkWlHkP9ealYE1utWSisEShY5VMdzIXRmyEODzcQ==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/prompts@8.4.2': + resolution: {integrity: sha512-XJmn/wY4AX56l1BRU+ZjDrFtg9+2uBEi4JvJQj82kwJDQKiPgSn4CEsbfGGygS4Gw6rkL4W18oATjfVfaqub2Q==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/rawlist@5.2.8': + resolution: {integrity: sha512-Su7FQvp5buZmCymN3PPoYv31ZQQX4ve2j02k7piGgKAWgE+AQRB5YoYVveGXcl3TZ9ldgRMSxj56YfDFmmaqLg==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/search@4.1.8': + resolution: {integrity: sha512-fGiHKGD6DyPIYUWxoXnQTeXeyYqSOUrasDMABBmMHUalH/LxkuzY0xVRtimXAt1sUeeyYkVuKQx1bebMuN11Kw==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/select@5.1.4': + resolution: {integrity: sha512-2kWcGKPMLAXAWRp1AH1SLsQmX+j0QjeljyXMUji9WMZC8nRDO0b7qquIGr6143E7KMLt3VAIGNXzwa/6PXQs4Q==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/type@4.0.5': + resolution: {integrity: sha512-aetVUNeKNc/VriqXlw1NRSW0zhMBB0W4bNbWRJgzRl/3d0QNDQFfk0GO5SDdtjMZVg6o8ZKEiadd7SCCzoOn5Q==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -3965,8 +4132,8 @@ packages: tslib: optional: true - '@rollup/pluginutils@5.1.2': - resolution: {integrity: sha512-/FIdS3PyZ39bjZlwqFnWqCOVnW7o963LtKMwQOD0NhQqw22gSr2YY1afu3FxRip4ZCZNsD5jq6Aaz6QV3D/Njw==} + '@rollup/pluginutils@5.3.0': + resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 @@ -4556,86 +4723,86 @@ packages: resolution: {integrity: sha512-08eKiDAjj4zLug1taXSIJ0kGL5cawjVCyJkBb6EWSg5fEPX6L+Wtr0CH2If4j5KYylz85iaZiFlUItvgJvll5g==} engines: {node: ^14.13.1 || ^16.0.0 || >=18} - '@swc/core-darwin-arm64@1.15.24': - resolution: {integrity: sha512-uM5ZGfFXjtvtJ+fe448PVBEbn/CSxS3UAyLj3O9xOqKIWy3S6hPTXSPbszxkSsGDYKi+YFhzAsR4r/eXLxEQ0g==} + '@swc/core-darwin-arm64@1.15.30': + resolution: {integrity: sha512-VvpP+vq08HmGYewMWvrdsxh9s2lthz/808zXm8Yu5kaqeR8Yia2b0eYXleHQ3VAjoStUDk6LzTheBW9KXYQdMA==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] - '@swc/core-darwin-x64@1.15.24': - resolution: {integrity: sha512-fMIb/Zfn929pw25VMBhV7Ji2Dl+lCWtUPNdYJQYOke+00E5fcQ9ynxtP8+qhUo/HZc+mYQb1gJxwHM9vty+lXg==} + '@swc/core-darwin-x64@1.15.30': + resolution: {integrity: sha512-WiJA0hiZI3nwQAO6mu5RqigtWGDtth4Hiq6rbZxAaQyhIcqKIg5IoMRc1Y071lrNJn29eEDMC86Rq58xgUxlDg==} engines: {node: '>=10'} cpu: [x64] os: [darwin] - '@swc/core-linux-arm-gnueabihf@1.15.24': - resolution: {integrity: sha512-vOkjsyjjxnoYx3hMEWcGxQrMgnNrRm6WAegBXrN8foHtDAR+zpdhpGF5a4lj1bNPgXAvmysjui8cM1ov/Clkaw==} + '@swc/core-linux-arm-gnueabihf@1.15.30': + resolution: {integrity: sha512-YANuFUo48kIT6plJgCD0keae9HFXfjxsbvsgevqc0hr/07X/p7sAWTFOGYEc2SXcASaK7UvuQqzlbW8pr7R79g==} engines: {node: '>=10'} cpu: [arm] os: [linux] - '@swc/core-linux-arm64-gnu@1.15.24': - resolution: {integrity: sha512-h/oNu+upkXJ6Cicnq7YGVj9PkdfarLCdQa8l/FlHYvfv8CEiMaeeTnpLU7gSBH/rGxosM6Qkfa/J9mThGF9CLA==} + '@swc/core-linux-arm64-gnu@1.15.30': + resolution: {integrity: sha512-VndG8jaR4ugY6u+iVOT0Q+d2fZd7sLgjPgN8W/Le+3EbZKl+cRfFxV7Eoz4gfLqhmneZPdcIzf9T3LkgkmqNLg==} engines: {node: '>=10'} cpu: [arm64] os: [linux] libc: [glibc] - '@swc/core-linux-arm64-musl@1.15.24': - resolution: {integrity: sha512-ZpF/pRe1guk6sKzQI9D1jAORtjTdNlyeXn9GDz8ophof/w2WhojRblvSDJaGe7rJjcPN8AaOkhwdRUh7q8oYIg==} + '@swc/core-linux-arm64-musl@1.15.30': + resolution: {integrity: sha512-1SYGs2l0Yyyi0pR/P/NKz/x0kqxkoiw+BXeJjLUdecSk/KasncWlJrc6hOvFSgKHOBrzgM5jwuluKtlT8dnrcA==} engines: {node: '>=10'} cpu: [arm64] os: [linux] libc: [musl] - '@swc/core-linux-ppc64-gnu@1.15.24': - resolution: {integrity: sha512-QZEsZfisHTSJlmyChgDFNmKPb3W6Lhbfo/O76HhIngfEdnQNmukS38/VSe1feho+xkV5A5hETyCbx3sALBZKAQ==} + '@swc/core-linux-ppc64-gnu@1.15.30': + resolution: {integrity: sha512-TXREtiXeRhbfDFbmhnkIsXpKfzbfT73YkV2ZF6w0sfxgjC5zI2ZAbaCOq25qxvegofj2K93DtOpm9RLaBgqR2g==} engines: {node: '>=10'} cpu: [ppc64] os: [linux] libc: [glibc] - '@swc/core-linux-s390x-gnu@1.15.24': - resolution: {integrity: sha512-DLdJKVsJgglqQrJBuoUYNmzm3leI7kUZhLbZGHv42onfKsGf6JDS3+bzCUQfte/XOqDjh/tmmn1DR/CF/tCJFw==} + '@swc/core-linux-s390x-gnu@1.15.30': + resolution: {integrity: sha512-DCR2YYeyd6DQE4OuDhImouuNcjXEiEdnn1Y0DyGteugPEDvVuvYk8Xddi+4o2SgWH6jiW8/I+3emZvbep1NC+g==} engines: {node: '>=10'} cpu: [s390x] os: [linux] libc: [glibc] - '@swc/core-linux-x64-gnu@1.15.24': - resolution: {integrity: sha512-IpLYfposPA/XLxYOKpRfeccl1p5dDa3+okZDHHTchBkXEaVCnq5MADPmIWwIYj1tudt7hORsEHccG5no6IUQRw==} + '@swc/core-linux-x64-gnu@1.15.30': + resolution: {integrity: sha512-5Pizw3NgfOJ5BJOBK8TIRa59xFW2avESTOBDPTAYwZYa1JNDs+KMF9lUfjJiJLM5HiMs/wPheA9eiT0q9m2AoA==} engines: {node: '>=10'} cpu: [x64] os: [linux] libc: [glibc] - '@swc/core-linux-x64-musl@1.15.24': - resolution: {integrity: sha512-JHy3fMSc0t/EPWgo74+OK5TGr51aElnzqfUPaiRf2qJ/BfX5CUCfMiWVBuhI7qmVMBnk1jTRnL/xZnOSHDPLYg==} + '@swc/core-linux-x64-musl@1.15.30': + resolution: {integrity: sha512-qyqydP/wyH8alcIP4a2hnGSjHLJjm9H7yDFup+CPy9oTahFgLLwnNcv5UHXqO2Qs3AIND+cls5f/Bb6hqpxdgA==} engines: {node: '>=10'} cpu: [x64] os: [linux] libc: [musl] - '@swc/core-win32-arm64-msvc@1.15.24': - resolution: {integrity: sha512-Txj+qUH1z2bUd1P3JvwByfjKFti3cptlAxhWgmunBUUxy/IW3CXLZ6l6Gk4liANadKkU71nIU1X30Z5vpMT3BA==} + '@swc/core-win32-arm64-msvc@1.15.30': + resolution: {integrity: sha512-CaQENgDHVGOg1mSF5sQVgvfFHG9kjMor2rkLMLeLOkfZYNj13ppnJ9+lfaBZLZUMMbnlGQnavCJb8PVBUOso7Q==} engines: {node: '>=10'} cpu: [arm64] os: [win32] - '@swc/core-win32-ia32-msvc@1.15.24': - resolution: {integrity: sha512-15D/nl3XwrhFpMv+MADFOiVwv3FvH9j8c6Rf8EXBT3Q5LoMh8YnDnSgPYqw1JzPnksvsBX6QPXLiPqmcR/Z4qQ==} + '@swc/core-win32-ia32-msvc@1.15.30': + resolution: {integrity: sha512-30VdLeGk6fugiUs/kUdJ/pAg7z/zpvVbR11RH60jZ0Z42WIeIniYx0rLEWN7h/pKJ3CopqsQ3RsogCAkRKiA2g==} engines: {node: '>=10'} cpu: [ia32] os: [win32] - '@swc/core-win32-x64-msvc@1.15.24': - resolution: {integrity: sha512-PR0PlTlPra2JbaDphrOAzm6s0v9rA0F17YzB+XbWD95B4g2cWcZY9LAeTa4xll70VLw9Jr7xBrlohqlQmelMFQ==} + '@swc/core-win32-x64-msvc@1.15.30': + resolution: {integrity: sha512-4iObHPR+Q4oDY110EF5SF5eIaaVJNpMdG9C0q3Q92BsJ5y467uHz7sYQhP60WYlLFsLQ1el2YrIPUItUAQGOKg==} engines: {node: '>=10'} cpu: [x64] os: [win32] - '@swc/core@1.15.24': - resolution: {integrity: sha512-5Hj8aNasue7yusUt8LGCUe/AjM7RMAce8ZoyDyiFwx7Al+GbYKL+yE7g4sJk8vEr1dKIkTRARkNIJENc4CjkBQ==} + '@swc/core@1.15.30': + resolution: {integrity: sha512-R8VQbQY1BZcbIF2p3gjlTCwAQzx1A194ugWfwld5y+WgVVWqVKm7eURGGOVbQVubgKWzidP2agomBbg96rZilQ==} engines: {node: '>=10'} peerDependencies: '@swc/helpers': '>=0.5.17' @@ -5657,9 +5824,9 @@ packages: brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - brace-expansion@5.0.2: - resolution: {integrity: sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw==} - engines: {node: 20 || >=22} + brace-expansion@5.0.5: + resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==} + engines: {node: 18 || 20 || >=22} braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} @@ -5751,6 +5918,10 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} + chalk@5.6.2: + resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + change-case@5.4.4: resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==} @@ -5784,6 +5955,10 @@ packages: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} + chokidar@5.0.0: + resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} + engines: {node: '>= 20.19.0'} + chrome-trace-event@1.0.4: resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} engines: {node: '>=6.0'} @@ -5819,6 +5994,10 @@ packages: resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} engines: {node: '>=6'} + cli-spinners@3.4.0: + resolution: {integrity: sha512-bXfOC4QcT1tKXGorxL3wbJm6XJPDqEnij2gQ2m7ESQuE+/z9YFIWnl/5RpTiKWbMq3EVKR4fRLJGn6DVfu0mpw==} + engines: {node: '>=18.20'} + cli-truncate@5.1.0: resolution: {integrity: sha512-7JDGG+4Zp0CsknDCedl0DYdaeOhc46QNpXi3NLQblkZpXXgA6LncLDUUyvrjSvZeF3VRQa+KiMGomazQrC1V8g==} engines: {node: '>=20'} @@ -5827,6 +6006,10 @@ packages: resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} engines: {node: '>= 10'} + cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} + cliui@6.0.0: resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} @@ -6770,9 +6953,18 @@ packages: fast-shallow-equal@1.0.0: resolution: {integrity: sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw==} + fast-string-truncated-width@3.0.3: + resolution: {integrity: sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==} + + fast-string-width@3.0.2: + resolution: {integrity: sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==} + fast-uri@3.1.0: resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} + fast-wrap-ansi@0.2.0: + resolution: {integrity: sha512-rLV8JHxTyhVmFYhBJuMujcrHqOT2cnO5Zxj37qROj23CP39GXubJRBUFF0z8KFK77Uc0SukZUf7JZhsVEQ6n8w==} + fastest-stable-stringify@2.0.2: resolution: {integrity: sha512-bijHueCGd0LqqNK9b5oCMHc0MluJAx0cwqASgbWMvkO01lCYgIhacVRLcaDz3QnyYIRNJRDwMb41VuT6pHJ91Q==} @@ -7060,9 +7252,9 @@ packages: deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true - glob@13.0.5: - resolution: {integrity: sha512-BzXxZg24Ibra1pbQ/zE7Kys4Ua1ks7Bn6pKLkVPZ9FZe4JQS6/Q7ef3LG1H+k7lUf5l4T3PLSyYyYJVYUvfgTw==} - engines: {node: 20 || >=22} + glob@13.0.6: + resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==} + engines: {node: 18 || 20 || >=22} glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} @@ -7213,6 +7405,9 @@ packages: html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + html-parse-stringify@3.0.1: + resolution: {integrity: sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==} + html-void-elements@3.0.0: resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} @@ -7274,6 +7469,23 @@ packages: hyphenate-style-name@1.1.0: resolution: {integrity: sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw==} + i18next-cli@1.54.2: + resolution: {integrity: sha512-aQ9tyuDl6HHlhE/pMD3pwkJDTMONMObyHpDQCVYG+1H4wbQFOkuCAHR7TIdngLk3QIM+tggwR2naLH0Zdw9Dzg==} + engines: {node: '>=22'} + hasBin: true + + i18next-resources-for-ts@2.1.0: + resolution: {integrity: sha512-n5UexwEVt0OoIAhG2MWpSnAVJW1U8mQrQTmXyxc5DMAx+NLhcLZhSMJo/FnUsA5JQ3obTYqTgB7YIuZKWpDgow==} + hasBin: true + + i18next@26.0.6: + resolution: {integrity: sha512-A4U6eCXodIbrhf8EarRurB9/4ebyaurH4+fu4gig9bqxmpSt+fCAFm/GpRQDcN1Xzu/LdFCx4nYHsnM1edIIbg==} + peerDependencies: + typescript: ^5 || ^6 + peerDependenciesMeta: + typescript: + optional: true + iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} @@ -7349,6 +7561,15 @@ packages: inline-style-prefixer@7.0.1: resolution: {integrity: sha512-lhYo5qNTQp3EvSSp3sRvXMbVQTLrvGV6DycRMJ5dm2BLMiJ30wpXKdDdgX+GmJZ5uQMucwRKHamXSst3Sj/Giw==} + inquirer@13.4.2: + resolution: {integrity: sha512-ziXEKBO6nxsX9Z3XEh7LNiUvYN/o5PYuYK+27l69NpjSUOh6JXQsQAKEw2AnZq5xvHeb3ZwkpzOxvNOswIX1fg==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + inquirer@8.2.6: resolution: {integrity: sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==} engines: {node: '>=12.0.0'} @@ -7466,6 +7687,10 @@ packages: resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} engines: {node: '>=8'} + is-interactive@2.0.0: + resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} + engines: {node: '>=12'} + is-map@2.0.3: resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} engines: {node: '>= 0.4'} @@ -7770,6 +7995,9 @@ packages: engines: {node: '>=6'} hasBin: true + jsonc-parser@3.3.1: + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} + jsonfile@4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} @@ -7936,6 +8164,10 @@ packages: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} engines: {node: '>=10'} + log-symbols@7.0.1: + resolution: {integrity: sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==} + engines: {node: '>=18'} + log-update@6.1.0: resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} engines: {node: '>=18'} @@ -8260,6 +8492,10 @@ packages: resolution: {integrity: sha512-Rwi3pnapEqirPSbWbrZaa6N3nmqq4Xer/2XooiOKyV3q12ML06f7MOuc5DVH8ONZIFhwIYQ3yzPH4nt7iWHaTg==} engines: {node: 18 || 20 || >=22} + minimatch@10.2.5: + resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} + engines: {node: 18 || 20 || >=22} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -8270,8 +8506,8 @@ packages: minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + minipass@7.1.3: + resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} engines: {node: '>=16 || 14 >=14.17'} monaco-editor@0.52.2: @@ -8310,6 +8546,10 @@ packages: mute-stream@0.0.8: resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + mute-stream@3.0.0: + resolution: {integrity: sha512-dkEJPVvun4FryqBmZ5KhDo0K9iDXAwn08tMLDinNdRBNPcYEDiWYysLcc6k3mjTMlbP9KyylvRpd4wFtwrT9rw==} + engines: {node: ^20.17.0 || >=22.9.0} + mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} @@ -8479,6 +8719,10 @@ packages: resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} engines: {node: '>=10'} + ora@9.3.0: + resolution: {integrity: sha512-lBX72MWFduWEf7v7uWf5DHp9Jn5BI8bNPGuFgtXMmr2uDz2Gz2749y3am3agSDdkhHPHYmmxEGSKH85ZLGzgXw==} + engines: {node: '>=20'} + os-tmpdir@1.0.2: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} @@ -8598,9 +8842,9 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} - path-scurry@2.0.0: - resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} - engines: {node: 20 || >=22} + path-scurry@2.0.2: + resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==} + engines: {node: 18 || 20 || >=22} path-serializer@0.5.1: resolution: {integrity: sha512-bMTznw/TiZbmxlPQEV1pFatJFQcBKt3i9glDcPqygSx5xGrcM4MTCSjY+3SgW9Y628zfRmuJ1uAc/t/A3Tw0QA==} @@ -9016,6 +9260,22 @@ packages: peerDependencies: react: ^19.2.4 + react-i18next@17.0.4: + resolution: {integrity: sha512-hQipmK4EF0y6RO6tt6WuqnmWpWYEXmQUUzecmMBuNsIgYd3smXcG4GtYPWhvgxn0pqMOItKlEO8H24HCs5hc3g==} + peerDependencies: + i18next: '>= 26.0.1' + react: '>= 16.8.0' + react-dom: '*' + react-native: '*' + typescript: ^5 || ^6 + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true + typescript: + optional: true + react-is@17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} @@ -9104,6 +9364,10 @@ packages: resolution: {integrity: sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==} engines: {node: '>=0.10.0'} + react@19.2.5: + resolution: {integrity: sha512-llUJLzz1zTUBrskt2pwZgLq59AemifIftw4aB7JxOqf1HY2FDaGDxgwpAPVzHU1kdWabH7FauP4i1oEeer2WCA==} + engines: {node: '>=0.10.0'} + read-cache@1.0.0: resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} @@ -9126,6 +9390,10 @@ packages: resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==} engines: {node: '>= 14.16.0'} + readdirp@5.0.0: + resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} + engines: {node: '>= 20.19.0'} + recma-build-jsx@1.0.0: resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==} @@ -9153,9 +9421,6 @@ packages: resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} engines: {node: '>= 0.4'} - regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - regex-recursion@6.0.2: resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} @@ -9320,6 +9585,13 @@ packages: typescript: optional: true + rsbuild-plugin-i18next-extractor@0.2.0: + resolution: {integrity: sha512-GtHV/x2EKUCckWX11N5PBOjTyD3zCfPIxLxBWJ/5opcYprawFMw4k44ezyyArKFiYygsrxJymur7wYmtt7Y1OA==} + engines: {node: '>=22'} + peerDependencies: + '@rsbuild/core': ^1.0.0 + i18next-cli: ^1.33.5 + rsbuild-plugin-publint@0.3.4: resolution: {integrity: sha512-0oIeQlTNRQoiyi2K5RT6C0+3q8J1HZEX66pkTtDAvmNNHiLf+YyBn2bx8S2w5T7MEVt323ULKoGV4rRROIOatQ==} peerDependencies: @@ -9351,11 +9623,15 @@ packages: resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} engines: {node: '>=0.12.0'} + run-async@4.0.6: + resolution: {integrity: sha512-IoDlSLTs3Yq593mb3ZoKWKXMNu3UpObxhgA/Xuid5p4bbfi2jdY1Hj0m1K+0/tEuQTxIGMhQDqGjKb7RuxGpAQ==} + engines: {node: '>=0.12.0'} + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - rxjs@7.8.1: - resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + rxjs@7.8.2: + resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} sade@1.8.1: resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} @@ -9796,6 +10072,10 @@ packages: std-env@3.9.0: resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} + stdin-discarder@0.3.2: + resolution: {integrity: sha512-eCPu1qRxPVkl5605OTWF8Wz40b4Mf45NY5LQmVPQ599knfs5QhASUm9GbJ5BDMDOXgrnh0wyEdvzmL//YMlw0A==} + engines: {node: '>=18'} + stop-iteration-iterator@1.1.0: resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} engines: {node: '>= 0.4'} @@ -10352,6 +10632,11 @@ packages: '@types/react': optional: true + use-sync-external-store@1.6.0: + resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -10453,6 +10738,10 @@ packages: jsdom: optional: true + void-elements@3.1.0: + resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==} + engines: {node: '>=0.10.0'} + w3c-xmlserializer@5.0.0: resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} engines: {node: '>=18'} @@ -10696,8 +10985,8 @@ packages: yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - yaml@2.8.2: - resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==} + yaml@2.8.3: + resolution: {integrity: sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==} engines: {node: '>= 14.6'} hasBin: true @@ -11141,9 +11430,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/runtime@7.25.4': - dependencies: - regenerator-runtime: 0.14.1 + '@babel/runtime@7.29.2': {} '@babel/template@7.28.6': dependencies: @@ -11404,6 +11691,12 @@ snapshots: transitivePeerDependencies: - debug + '@croct/json5-parser@0.2.2': + dependencies: + '@croct/json': 2.1.0 + + '@croct/json@2.1.0': {} + '@csstools/color-helpers@5.1.0': {} '@csstools/css-calc@2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': @@ -11744,6 +12037,51 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} + '@inquirer/ansi@2.0.5': {} + + '@inquirer/checkbox@5.1.4(@types/node@24.10.13)': + dependencies: + '@inquirer/ansi': 2.0.5 + '@inquirer/core': 11.1.9(@types/node@24.10.13) + '@inquirer/figures': 2.0.5 + '@inquirer/type': 4.0.5(@types/node@24.10.13) + optionalDependencies: + '@types/node': 24.10.13 + + '@inquirer/confirm@6.0.12(@types/node@24.10.13)': + dependencies: + '@inquirer/core': 11.1.9(@types/node@24.10.13) + '@inquirer/type': 4.0.5(@types/node@24.10.13) + optionalDependencies: + '@types/node': 24.10.13 + + '@inquirer/core@11.1.9(@types/node@24.10.13)': + dependencies: + '@inquirer/ansi': 2.0.5 + '@inquirer/figures': 2.0.5 + '@inquirer/type': 4.0.5(@types/node@24.10.13) + cli-width: 4.1.0 + fast-wrap-ansi: 0.2.0 + mute-stream: 3.0.0 + signal-exit: 4.1.0 + optionalDependencies: + '@types/node': 24.10.13 + + '@inquirer/editor@5.1.1(@types/node@24.10.13)': + dependencies: + '@inquirer/core': 11.1.9(@types/node@24.10.13) + '@inquirer/external-editor': 3.0.0(@types/node@24.10.13) + '@inquirer/type': 4.0.5(@types/node@24.10.13) + optionalDependencies: + '@types/node': 24.10.13 + + '@inquirer/expand@5.0.13(@types/node@24.10.13)': + dependencies: + '@inquirer/core': 11.1.9(@types/node@24.10.13) + '@inquirer/type': 4.0.5(@types/node@24.10.13) + optionalDependencies: + '@types/node': 24.10.13 + '@inquirer/external-editor@1.0.3(@types/node@24.10.13)': dependencies: chardet: 2.1.1 @@ -11751,6 +12089,80 @@ snapshots: optionalDependencies: '@types/node': 24.10.13 + '@inquirer/external-editor@3.0.0(@types/node@24.10.13)': + dependencies: + chardet: 2.1.1 + iconv-lite: 0.7.2 + optionalDependencies: + '@types/node': 24.10.13 + + '@inquirer/figures@2.0.5': {} + + '@inquirer/input@5.0.12(@types/node@24.10.13)': + dependencies: + '@inquirer/core': 11.1.9(@types/node@24.10.13) + '@inquirer/type': 4.0.5(@types/node@24.10.13) + optionalDependencies: + '@types/node': 24.10.13 + + '@inquirer/number@4.0.12(@types/node@24.10.13)': + dependencies: + '@inquirer/core': 11.1.9(@types/node@24.10.13) + '@inquirer/type': 4.0.5(@types/node@24.10.13) + optionalDependencies: + '@types/node': 24.10.13 + + '@inquirer/password@5.0.12(@types/node@24.10.13)': + dependencies: + '@inquirer/ansi': 2.0.5 + '@inquirer/core': 11.1.9(@types/node@24.10.13) + '@inquirer/type': 4.0.5(@types/node@24.10.13) + optionalDependencies: + '@types/node': 24.10.13 + + '@inquirer/prompts@8.4.2(@types/node@24.10.13)': + dependencies: + '@inquirer/checkbox': 5.1.4(@types/node@24.10.13) + '@inquirer/confirm': 6.0.12(@types/node@24.10.13) + '@inquirer/editor': 5.1.1(@types/node@24.10.13) + '@inquirer/expand': 5.0.13(@types/node@24.10.13) + '@inquirer/input': 5.0.12(@types/node@24.10.13) + '@inquirer/number': 4.0.12(@types/node@24.10.13) + '@inquirer/password': 5.0.12(@types/node@24.10.13) + '@inquirer/rawlist': 5.2.8(@types/node@24.10.13) + '@inquirer/search': 4.1.8(@types/node@24.10.13) + '@inquirer/select': 5.1.4(@types/node@24.10.13) + optionalDependencies: + '@types/node': 24.10.13 + + '@inquirer/rawlist@5.2.8(@types/node@24.10.13)': + dependencies: + '@inquirer/core': 11.1.9(@types/node@24.10.13) + '@inquirer/type': 4.0.5(@types/node@24.10.13) + optionalDependencies: + '@types/node': 24.10.13 + + '@inquirer/search@4.1.8(@types/node@24.10.13)': + dependencies: + '@inquirer/core': 11.1.9(@types/node@24.10.13) + '@inquirer/figures': 2.0.5 + '@inquirer/type': 4.0.5(@types/node@24.10.13) + optionalDependencies: + '@types/node': 24.10.13 + + '@inquirer/select@5.1.4(@types/node@24.10.13)': + dependencies: + '@inquirer/ansi': 2.0.5 + '@inquirer/core': 11.1.9(@types/node@24.10.13) + '@inquirer/figures': 2.0.5 + '@inquirer/type': 4.0.5(@types/node@24.10.13) + optionalDependencies: + '@types/node': 24.10.13 + + '@inquirer/type@4.0.5(@types/node@24.10.13)': + optionalDependencies: + '@types/node': 24.10.13 + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -11973,9 +12385,9 @@ snapshots: '@lynx-js/lynx-core@0.1.3': {} - '@lynx-js/lynx-ui-button@3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@lynx-js/lynx-ui-button@3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5)': dependencies: - '@lynx-js/lynx-ui-common': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@lynx-js/lynx-ui-common': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) '@lynx-js/react': link:packages/react '@lynx-js/types': 3.7.0 '@types/react': 18.3.28 @@ -11984,10 +12396,10 @@ snapshots: - react - react-dom - '@lynx-js/lynx-ui-checkbox@3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@lynx-js/lynx-ui-checkbox@3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5)': dependencies: - '@lynx-js/lynx-ui-button': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@lynx-js/lynx-ui-common': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@lynx-js/lynx-ui-button': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) + '@lynx-js/lynx-ui-common': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) '@lynx-js/react': link:packages/react '@lynx-js/types': 3.7.0 '@types/react': 18.3.28 @@ -11996,23 +12408,23 @@ snapshots: - react - react-dom - '@lynx-js/lynx-ui-common@3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@lynx-js/lynx-ui-common@3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5)': dependencies: '@lynx-js/gesture-runtime': 2.1.1(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0) '@lynx-js/react': link:packages/react - '@lynx-js/react-use': 0.0.7(@lynx-js/react@packages+react)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@lynx-js/react-use': 0.0.7(@lynx-js/react@packages+react)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) '@lynx-js/types': 3.7.0 '@types/react': 18.3.28 transitivePeerDependencies: - react - react-dom - '@lynx-js/lynx-ui-dialog@3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@lynx-js/lynx-ui-dialog@3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5)': dependencies: - '@lynx-js/lynx-ui-button': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@lynx-js/lynx-ui-common': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@lynx-js/lynx-ui-overlay': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@lynx-js/lynx-ui-presence': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@lynx-js/lynx-ui-button': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) + '@lynx-js/lynx-ui-common': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) + '@lynx-js/lynx-ui-overlay': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) + '@lynx-js/lynx-ui-presence': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) '@lynx-js/react': link:packages/react '@lynx-js/types': 3.7.0 '@types/react': 18.3.28 @@ -12021,22 +12433,22 @@ snapshots: - react - react-dom - '@lynx-js/lynx-ui-draggable@3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@lynx-js/lynx-ui-draggable@3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5)': dependencies: - '@lynx-js/lynx-ui-common': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@lynx-js/lynx-ui-common': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) '@lynx-js/react': link:packages/react - '@lynx-js/react-use': 0.0.7(@lynx-js/react@packages+react)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@lynx-js/react-use': 0.0.7(@lynx-js/react@packages+react)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) '@lynx-js/types': 3.7.0 '@types/react': 18.3.28 transitivePeerDependencies: - react - react-dom - '@lynx-js/lynx-ui-feed-list@3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@lynx-js/lynx-ui-feed-list@3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5)': dependencies: '@lynx-js/gesture-runtime': 2.1.1(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0) - '@lynx-js/lynx-ui-common': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@lynx-js/lynx-ui-list': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@lynx-js/lynx-ui-common': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) + '@lynx-js/lynx-ui-list': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) '@lynx-js/react': link:packages/react '@lynx-js/types': 3.7.0 '@types/react': 18.3.28 @@ -12044,13 +12456,13 @@ snapshots: - react - react-dom - '@lynx-js/lynx-ui-form@3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@lynx-js/lynx-ui-form@3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5)': dependencies: - '@lynx-js/lynx-ui-button': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@lynx-js/lynx-ui-checkbox': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@lynx-js/lynx-ui-common': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@lynx-js/lynx-ui-input': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@lynx-js/lynx-ui-radio-group': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@lynx-js/lynx-ui-button': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) + '@lynx-js/lynx-ui-checkbox': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) + '@lynx-js/lynx-ui-common': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) + '@lynx-js/lynx-ui-input': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) + '@lynx-js/lynx-ui-radio-group': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) '@lynx-js/lynx-ui-switch': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28) '@lynx-js/react': link:packages/react '@lynx-js/types': 3.7.0 @@ -12059,10 +12471,10 @@ snapshots: - react - react-dom - '@lynx-js/lynx-ui-input@3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@lynx-js/lynx-ui-input@3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5)': dependencies: - '@lynx-js/lynx-ui-common': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@lynx-js/lynx-ui-scroll-view': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@lynx-js/lynx-ui-common': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) + '@lynx-js/lynx-ui-scroll-view': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) '@lynx-js/react': link:packages/react '@lynx-js/types': 3.7.0 '@types/react': 18.3.28 @@ -12070,9 +12482,9 @@ snapshots: - react - react-dom - '@lynx-js/lynx-ui-lazy-component@3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@lynx-js/lynx-ui-lazy-component@3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5)': dependencies: - '@lynx-js/lynx-ui-common': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@lynx-js/lynx-ui-common': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) '@lynx-js/react': link:packages/react '@lynx-js/types': 3.7.0 '@types/react': 18.3.28 @@ -12080,10 +12492,10 @@ snapshots: - react - react-dom - '@lynx-js/lynx-ui-list@3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@lynx-js/lynx-ui-list@3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5)': dependencies: '@lynx-js/gesture-runtime': 2.1.1(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0) - '@lynx-js/lynx-ui-common': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@lynx-js/lynx-ui-common': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) '@lynx-js/react': link:packages/react '@lynx-js/types': 3.7.0 '@types/react': 18.3.28 @@ -12091,9 +12503,9 @@ snapshots: - react - react-dom - '@lynx-js/lynx-ui-overlay@3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@lynx-js/lynx-ui-overlay@3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5)': dependencies: - '@lynx-js/lynx-ui-common': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@lynx-js/lynx-ui-common': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) '@lynx-js/react': link:packages/react '@lynx-js/types': 3.7.0 '@types/react': 18.3.28 @@ -12101,12 +12513,12 @@ snapshots: - react - react-dom - '@lynx-js/lynx-ui-popover@3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@lynx-js/lynx-ui-popover@3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5)': dependencies: - '@lynx-js/lynx-ui-button': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@lynx-js/lynx-ui-common': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@lynx-js/lynx-ui-overlay': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@lynx-js/lynx-ui-presence': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@lynx-js/lynx-ui-button': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) + '@lynx-js/lynx-ui-common': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) + '@lynx-js/lynx-ui-overlay': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) + '@lynx-js/lynx-ui-presence': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) '@lynx-js/react': link:packages/react '@lynx-js/types': 3.7.0 '@types/react': 18.3.28 @@ -12115,9 +12527,9 @@ snapshots: - react - react-dom - '@lynx-js/lynx-ui-presence@3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@lynx-js/lynx-ui-presence@3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5)': dependencies: - '@lynx-js/lynx-ui-common': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@lynx-js/lynx-ui-common': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) '@lynx-js/react': link:packages/react '@lynx-js/types': 3.7.0 '@types/react': 18.3.28 @@ -12126,10 +12538,10 @@ snapshots: - react - react-dom - '@lynx-js/lynx-ui-radio-group@3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@lynx-js/lynx-ui-radio-group@3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5)': dependencies: - '@lynx-js/lynx-ui-button': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@lynx-js/lynx-ui-common': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@lynx-js/lynx-ui-button': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) + '@lynx-js/lynx-ui-common': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) '@lynx-js/react': link:packages/react '@lynx-js/types': 3.7.0 '@types/react': 18.3.28 @@ -12138,11 +12550,11 @@ snapshots: - react - react-dom - '@lynx-js/lynx-ui-scroll-view@3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@lynx-js/lynx-ui-scroll-view@3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5)': dependencies: '@lynx-js/gesture-runtime': 2.1.1(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0) - '@lynx-js/lynx-ui-common': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@lynx-js/lynx-ui-lazy-component': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@lynx-js/lynx-ui-common': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) + '@lynx-js/lynx-ui-lazy-component': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) '@lynx-js/react': link:packages/react '@lynx-js/types': 3.7.0 '@types/react': 18.3.28 @@ -12150,13 +12562,13 @@ snapshots: - react - react-dom - '@lynx-js/lynx-ui-sheet@3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@lynx-js/lynx-ui-sheet@3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5)': dependencies: - '@lynx-js/lynx-ui-common': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@lynx-js/lynx-ui-dialog': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@lynx-js/lynx-ui-overlay': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@lynx-js/lynx-ui-presence': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@lynx-js/motion': 0.0.2(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@lynx-js/lynx-ui-common': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) + '@lynx-js/lynx-ui-dialog': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) + '@lynx-js/lynx-ui-overlay': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) + '@lynx-js/lynx-ui-presence': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) + '@lynx-js/motion': 0.0.2(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) '@lynx-js/react': link:packages/react '@lynx-js/types': 3.7.0 '@types/react': 18.3.28 @@ -12166,10 +12578,10 @@ snapshots: - react - react-dom - '@lynx-js/lynx-ui-sortable@3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@lynx-js/lynx-ui-sortable@3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5)': dependencies: - '@lynx-js/lynx-ui-common': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@lynx-js/lynx-ui-draggable': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@lynx-js/lynx-ui-common': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) + '@lynx-js/lynx-ui-draggable': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) '@lynx-js/react': link:packages/react '@lynx-js/types': 3.7.0 '@types/react': 18.3.28 @@ -12177,10 +12589,10 @@ snapshots: - react - react-dom - '@lynx-js/lynx-ui-swipe-action@3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@lynx-js/lynx-ui-swipe-action@3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5)': dependencies: '@lynx-js/gesture-runtime': 2.1.1(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0) - '@lynx-js/lynx-ui-common': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@lynx-js/lynx-ui-common': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) '@lynx-js/react': link:packages/react '@lynx-js/types': 3.7.0 '@types/react': 18.3.28 @@ -12188,11 +12600,11 @@ snapshots: - react - react-dom - '@lynx-js/lynx-ui-swiper@3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@lynx-js/lynx-ui-swiper@3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5)': dependencies: - '@lynx-js/lynx-ui-common': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@lynx-js/lynx-ui-common': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) '@lynx-js/react': link:packages/react - '@lynx-js/react-use': 0.0.7(@lynx-js/react@packages+react)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@lynx-js/react-use': 0.0.7(@lynx-js/react@packages+react)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) '@lynx-js/types': 3.7.0 '@types/react': 18.3.28 transitivePeerDependencies: @@ -12206,26 +12618,26 @@ snapshots: '@types/react': 18.3.28 clsx: 2.1.1 - '@lynx-js/lynx-ui@3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@lynx-js/lynx-ui-button': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@lynx-js/lynx-ui-checkbox': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@lynx-js/lynx-ui-common': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@lynx-js/lynx-ui-dialog': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@lynx-js/lynx-ui-draggable': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@lynx-js/lynx-ui-feed-list': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@lynx-js/lynx-ui-form': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@lynx-js/lynx-ui-input': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@lynx-js/lynx-ui-lazy-component': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@lynx-js/lynx-ui-list': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@lynx-js/lynx-ui-popover': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@lynx-js/lynx-ui-presence': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@lynx-js/lynx-ui-radio-group': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@lynx-js/lynx-ui-scroll-view': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@lynx-js/lynx-ui-sheet': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@lynx-js/lynx-ui-sortable': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@lynx-js/lynx-ui-swipe-action': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@lynx-js/lynx-ui-swiper': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@lynx-js/lynx-ui@3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5)': + dependencies: + '@lynx-js/lynx-ui-button': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) + '@lynx-js/lynx-ui-checkbox': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) + '@lynx-js/lynx-ui-common': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) + '@lynx-js/lynx-ui-dialog': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) + '@lynx-js/lynx-ui-draggable': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) + '@lynx-js/lynx-ui-feed-list': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) + '@lynx-js/lynx-ui-form': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) + '@lynx-js/lynx-ui-input': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) + '@lynx-js/lynx-ui-lazy-component': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) + '@lynx-js/lynx-ui-list': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) + '@lynx-js/lynx-ui-popover': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) + '@lynx-js/lynx-ui-presence': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) + '@lynx-js/lynx-ui-radio-group': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) + '@lynx-js/lynx-ui-scroll-view': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) + '@lynx-js/lynx-ui-sheet': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) + '@lynx-js/lynx-ui-sortable': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) + '@lynx-js/lynx-ui-swipe-action': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) + '@lynx-js/lynx-ui-swiper': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28)(react-dom@19.2.4(react@19.2.5))(react@19.2.5) '@lynx-js/lynx-ui-switch': 3.130.0(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(@types/react@18.3.28) '@lynx-js/react': link:packages/react '@lynx-js/types': 3.7.0 @@ -12235,10 +12647,10 @@ snapshots: - react - react-dom - '@lynx-js/motion@0.0.2(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@lynx-js/motion@0.0.2(@lynx-js/react@packages+react)(@lynx-js/types@3.7.0)(react-dom@19.2.4(react@19.2.5))(react@19.2.5)': dependencies: '@lynx-js/react': link:packages/react - framer-motion: 12.23.12(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + framer-motion: 12.23.12(react-dom@19.2.4(react@19.2.5))(react@19.2.5) motion-dom: 12.23.12 motion-utils: 12.23.6 optionalDependencies: @@ -12253,10 +12665,10 @@ snapshots: errorstacks: 2.4.1 htm: 3.1.1 - '@lynx-js/react-use@0.0.7(@lynx-js/react@packages+react)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@lynx-js/react-use@0.0.7(@lynx-js/react@packages+react)(react-dom@19.2.4(react@19.2.5))(react@19.2.5)': dependencies: '@lynx-js/react': link:packages/react - react-use: 17.6.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react-use: 17.6.0(react-dom@19.2.4(react@19.2.5))(react@19.2.5) transitivePeerDependencies: - react - react-dom @@ -12277,7 +12689,7 @@ snapshots: '@manypkg/find-root@1.1.0': dependencies: - '@babel/runtime': 7.25.4 + '@babel/runtime': 7.29.2 '@types/node': 12.20.55 find-up: 4.1.0 fs-extra: 8.1.0 @@ -12288,7 +12700,7 @@ snapshots: '@manypkg/get-packages@1.1.3': dependencies: - '@babel/runtime': 7.25.4 + '@babel/runtime': 7.29.2 '@changesets/types': 4.1.0 '@manypkg/find-root': 1.1.0 fs-extra: 8.1.0 @@ -12340,11 +12752,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4)': + '@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.5)': dependencies: '@types/mdx': 2.0.13 '@types/react': 19.2.14 - react: 19.2.4 + react: 19.2.5 '@microsoft/api-documenter@7.30.0(@types/node@24.10.13)': dependencies: @@ -12788,18 +13200,18 @@ snapshots: '@rollup/plugin-typescript@12.3.0(patch_hash=926ba262ec682d27369f1a8648a0dfb657fb5f1b28539ca3628d292276c91c3d)(rollup@4.34.9)(tslib@2.8.1)(typescript@5.9.3)': dependencies: - '@rollup/pluginutils': 5.1.2(rollup@4.34.9) + '@rollup/pluginutils': 5.3.0(rollup@4.34.9) resolve: 1.22.8 typescript: 5.9.3 optionalDependencies: rollup: 4.34.9 tslib: 2.8.1 - '@rollup/pluginutils@5.1.2(rollup@4.34.9)': + '@rollup/pluginutils@5.3.0(rollup@4.34.9)': dependencies: '@types/estree': 1.0.8 estree-walker: 2.0.2 - picomatch: 2.3.1 + picomatch: 4.0.3 optionalDependencies: rollup: 4.34.9 @@ -12967,7 +13379,7 @@ snapshots: dependencies: fast-glob: 3.3.3 json5: 2.2.3 - yaml: 2.8.2 + yaml: 2.8.3 optionalDependencies: '@rsbuild/core': 1.7.5 @@ -13421,13 +13833,13 @@ snapshots: '@rspress/core@2.0.3(@module-federation/runtime-tools@0.22.0)(@types/react@19.2.14)(core-js@3.48.0)': dependencies: '@mdx-js/mdx': 3.1.1 - '@mdx-js/react': 3.1.1(@types/react@19.2.14)(react@19.2.4) + '@mdx-js/react': 3.1.1(@types/react@19.2.14)(react@19.2.5) '@rsbuild/core': 2.0.0-beta.3(@module-federation/runtime-tools@0.22.0)(core-js@3.48.0) '@rsbuild/plugin-react': 1.4.5(@rsbuild/core@2.0.0-beta.3(@module-federation/runtime-tools@0.22.0)(core-js@3.48.0)) '@rspress/shared': 2.0.3(@module-federation/runtime-tools@0.22.0)(core-js@3.48.0) '@shikijs/rehype': 3.22.0 '@types/unist': 3.0.3 - '@unhead/react': 2.1.4(react@19.2.4) + '@unhead/react': 2.1.4(react@19.2.5) body-scroll-lock: 4.0.0-beta.0 cac: 6.7.14 chokidar: 3.6.0 @@ -13443,11 +13855,11 @@ snapshots: medium-zoom: 1.1.0 nprogress: 0.2.0 picocolors: 1.1.1 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + react: 19.2.5 + react-dom: 19.2.4(react@19.2.5) react-lazy-with-preload: 2.2.1 - react-reconciler: 0.33.0(react@19.2.4) - react-router-dom: 7.13.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react-reconciler: 0.33.0(react@19.2.5) + react-router-dom: 7.13.0(react-dom@19.2.4(react@19.2.4))(react@19.2.5) rehype-external-links: 3.0.0 rehype-raw: 7.0.0 remark-gfm: 4.0.1 @@ -13614,59 +14026,59 @@ snapshots: transitivePeerDependencies: - encoding - '@swc/core-darwin-arm64@1.15.24': + '@swc/core-darwin-arm64@1.15.30': optional: true - '@swc/core-darwin-x64@1.15.24': + '@swc/core-darwin-x64@1.15.30': optional: true - '@swc/core-linux-arm-gnueabihf@1.15.24': + '@swc/core-linux-arm-gnueabihf@1.15.30': optional: true - '@swc/core-linux-arm64-gnu@1.15.24': + '@swc/core-linux-arm64-gnu@1.15.30': optional: true - '@swc/core-linux-arm64-musl@1.15.24': + '@swc/core-linux-arm64-musl@1.15.30': optional: true - '@swc/core-linux-ppc64-gnu@1.15.24': + '@swc/core-linux-ppc64-gnu@1.15.30': optional: true - '@swc/core-linux-s390x-gnu@1.15.24': + '@swc/core-linux-s390x-gnu@1.15.30': optional: true - '@swc/core-linux-x64-gnu@1.15.24': + '@swc/core-linux-x64-gnu@1.15.30': optional: true - '@swc/core-linux-x64-musl@1.15.24': + '@swc/core-linux-x64-musl@1.15.30': optional: true - '@swc/core-win32-arm64-msvc@1.15.24': + '@swc/core-win32-arm64-msvc@1.15.30': optional: true - '@swc/core-win32-ia32-msvc@1.15.24': + '@swc/core-win32-ia32-msvc@1.15.30': optional: true - '@swc/core-win32-x64-msvc@1.15.24': + '@swc/core-win32-x64-msvc@1.15.30': optional: true - '@swc/core@1.15.24(@swc/helpers@0.5.21)': + '@swc/core@1.15.30(@swc/helpers@0.5.21)': dependencies: '@swc/counter': 0.1.3 '@swc/types': 0.1.26 optionalDependencies: - '@swc/core-darwin-arm64': 1.15.24 - '@swc/core-darwin-x64': 1.15.24 - '@swc/core-linux-arm-gnueabihf': 1.15.24 - '@swc/core-linux-arm64-gnu': 1.15.24 - '@swc/core-linux-arm64-musl': 1.15.24 - '@swc/core-linux-ppc64-gnu': 1.15.24 - '@swc/core-linux-s390x-gnu': 1.15.24 - '@swc/core-linux-x64-gnu': 1.15.24 - '@swc/core-linux-x64-musl': 1.15.24 - '@swc/core-win32-arm64-msvc': 1.15.24 - '@swc/core-win32-ia32-msvc': 1.15.24 - '@swc/core-win32-x64-msvc': 1.15.24 + '@swc/core-darwin-arm64': 1.15.30 + '@swc/core-darwin-x64': 1.15.30 + '@swc/core-linux-arm-gnueabihf': 1.15.30 + '@swc/core-linux-arm64-gnu': 1.15.30 + '@swc/core-linux-arm64-musl': 1.15.30 + '@swc/core-linux-ppc64-gnu': 1.15.30 + '@swc/core-linux-s390x-gnu': 1.15.30 + '@swc/core-linux-x64-gnu': 1.15.30 + '@swc/core-linux-x64-musl': 1.15.30 + '@swc/core-win32-arm64-msvc': 1.15.30 + '@swc/core-win32-ia32-msvc': 1.15.30 + '@swc/core-win32-x64-msvc': 1.15.30 '@swc/helpers': 0.5.21 '@swc/counter@0.1.3': {} @@ -13751,7 +14163,7 @@ snapshots: '@testing-library/dom@10.4.1': dependencies: '@babel/code-frame': 7.29.0 - '@babel/runtime': 7.25.4 + '@babel/runtime': 7.29.2 '@types/aria-query': 5.0.4 aria-query: 5.3.0 dom-accessibility-api: 0.5.16 @@ -14204,9 +14616,9 @@ snapshots: '@ungap/structured-clone@1.3.0': {} - '@unhead/react@2.1.4(react@19.2.4)': + '@unhead/react@2.1.4(react@19.2.5)': dependencies: - react: 19.2.4 + react: 19.2.5 unhead: 2.1.4 '@unrs/resolver-binding-android-arm-eabi@1.11.1': @@ -14791,7 +15203,7 @@ snapshots: dependencies: balanced-match: 1.0.2 - brace-expansion@5.0.2: + brace-expansion@5.0.5: dependencies: balanced-match: 4.0.2 @@ -14890,6 +15302,8 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 + chalk@5.6.2: {} + change-case@5.4.4: {} character-entities-html4@2.1.0: {} @@ -14922,6 +15336,10 @@ snapshots: dependencies: readdirp: 4.0.2 + chokidar@5.0.0: + dependencies: + readdirp: 5.0.0 + chrome-trace-event@1.0.4: {} ci-info@3.9.0: {} @@ -14948,6 +15366,8 @@ snapshots: cli-spinners@2.9.2: {} + cli-spinners@3.4.0: {} + cli-truncate@5.1.0: dependencies: slice-ansi: 7.1.0 @@ -14955,6 +15375,8 @@ snapshots: cli-width@3.0.0: {} + cli-width@4.1.0: {} + cliui@6.0.0: dependencies: string-width: 4.2.3 @@ -15103,7 +15525,7 @@ snapshots: dependencies: hyphenate-style-name: 1.1.0 - css-loader@7.1.4(@rspack/core@1.7.9(@swc/helpers@0.5.21))(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))): + css-loader@7.1.4(@rspack/core@1.7.9(@swc/helpers@0.5.21))(webpack@5.105.2(@swc/core@1.15.30(@swc/helpers@0.5.21))): dependencies: icss-utils: 5.1.0(postcss@8.5.6) postcss: 8.5.6 @@ -15115,7 +15537,7 @@ snapshots: semver: 7.7.4 optionalDependencies: '@rspack/core': 1.7.9(@swc/helpers@0.5.21) - webpack: 5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21)) + webpack: 5.105.2(@swc/core@1.15.30(@swc/helpers@0.5.21)) css-loader@7.1.4(@rspack/core@1.7.9(@swc/helpers@0.5.21))(webpack@5.105.2): dependencies: @@ -16091,8 +16513,18 @@ snapshots: fast-shallow-equal@1.0.0: {} + fast-string-truncated-width@3.0.3: {} + + fast-string-width@3.0.2: + dependencies: + fast-string-truncated-width: 3.0.3 + fast-uri@3.1.0: {} + fast-wrap-ansi@0.2.0: + dependencies: + fast-string-width: 3.0.2 + fastest-stable-stringify@2.0.2: {} fastq@1.17.1: @@ -16230,14 +16662,14 @@ snapshots: forwarded@0.2.0: {} - framer-motion@12.23.12(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + framer-motion@12.23.12(react-dom@19.2.4(react@19.2.5))(react@19.2.5): dependencies: motion-dom: 12.23.12 motion-utils: 12.23.6 tslib: 2.8.1 optionalDependencies: - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + react: 19.2.5 + react-dom: 19.2.4(react@19.2.5) framer-motion@12.34.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: @@ -16248,6 +16680,15 @@ snapshots: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) + framer-motion@12.34.1(react-dom@19.2.4(react@19.2.5))(react@19.2.5): + dependencies: + motion-dom: 12.34.1 + motion-utils: 12.29.2 + tslib: 2.8.1 + optionalDependencies: + react: 19.2.5 + react-dom: 19.2.4(react@19.2.5) + fresh@0.5.2: {} fresh@2.0.0: {} @@ -16361,7 +16802,7 @@ snapshots: foreground-child: 3.3.1 jackspeak: 3.4.3 minimatch: 9.0.5 - minipass: 7.1.2 + minipass: 7.1.3 package-json-from-dist: 1.0.1 path-scurry: 1.11.1 @@ -16369,16 +16810,16 @@ snapshots: dependencies: foreground-child: 3.3.1 jackspeak: 4.2.3 - minimatch: 10.2.3 - minipass: 7.1.2 + minimatch: 10.2.5 + minipass: 7.1.3 package-json-from-dist: 1.0.1 - path-scurry: 2.0.0 + path-scurry: 2.0.2 - glob@13.0.5: + glob@13.0.6: dependencies: - minimatch: 10.2.3 - minipass: 7.1.2 - path-scurry: 2.0.0 + minimatch: 10.2.5 + minipass: 7.1.3 + path-scurry: 2.0.2 glob@7.2.3: dependencies: @@ -16612,6 +17053,10 @@ snapshots: html-escaper@2.0.2: {} + html-parse-stringify@3.0.1: + dependencies: + void-elements: 3.1.0 + html-void-elements@3.0.0: {} htmlparser2@10.0.0: @@ -16684,6 +17129,47 @@ snapshots: hyphenate-style-name@1.1.0: {} + i18next-cli@1.54.2(@swc/helpers@0.5.21)(@types/node@24.10.13)(i18next@26.0.6(typescript@5.9.3))(typescript@5.9.3): + dependencies: + '@croct/json5-parser': 0.2.2 + '@swc/core': 1.15.30(@swc/helpers@0.5.21) + chokidar: 5.0.0 + commander: 14.0.3 + execa: 9.6.1 + glob: 13.0.6 + i18next-resources-for-ts: 2.1.0(@swc/helpers@0.5.21) + inquirer: 13.4.2(@types/node@24.10.13) + jiti: 2.6.1 + jsonc-parser: 3.3.1 + magic-string: 0.30.21 + minimatch: 10.2.5 + ora: 9.3.0 + react: 19.2.5 + react-i18next: 17.0.4(i18next@26.0.6(typescript@5.9.3))(react@19.2.5)(typescript@5.9.3) + yaml: 2.8.3 + transitivePeerDependencies: + - '@swc/helpers' + - '@types/node' + - i18next + - react-dom + - react-native + - typescript + + i18next-resources-for-ts@2.1.0(@swc/helpers@0.5.21): + dependencies: + '@babel/runtime': 7.29.2 + '@swc/core': 1.15.30(@swc/helpers@0.5.21) + chokidar: 5.0.0 + yaml: 2.8.3 + transitivePeerDependencies: + - '@swc/helpers' + + i18next@26.0.6(typescript@5.9.3): + dependencies: + '@babel/runtime': 7.29.2 + optionalDependencies: + typescript: 5.9.3 + iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 @@ -16740,6 +17226,18 @@ snapshots: dependencies: css-in-js-utils: 3.1.0 + inquirer@13.4.2(@types/node@24.10.13): + dependencies: + '@inquirer/ansi': 2.0.5 + '@inquirer/core': 11.1.9(@types/node@24.10.13) + '@inquirer/prompts': 8.4.2(@types/node@24.10.13) + '@inquirer/type': 4.0.5(@types/node@24.10.13) + mute-stream: 3.0.0 + run-async: 4.0.6 + rxjs: 7.8.2 + optionalDependencies: + '@types/node': 24.10.13 + inquirer@8.2.6: dependencies: ansi-escapes: 4.3.2 @@ -16752,7 +17250,7 @@ snapshots: mute-stream: 0.0.8 ora: 5.4.1 run-async: 2.4.1 - rxjs: 7.8.1 + rxjs: 7.8.2 string-width: 4.2.3 strip-ansi: 6.0.1 through: 2.3.8 @@ -16866,6 +17364,8 @@ snapshots: is-interactive@1.0.0: {} + is-interactive@2.0.0: {} + is-map@2.0.3: {} is-negative-zero@2.0.3: {} @@ -17233,6 +17733,8 @@ snapshots: json5@2.2.3: {} + jsonc-parser@3.3.1: {} + jsonfile@4.0.0: optionalDependencies: graceful-fs: 4.2.11 @@ -17326,7 +17828,7 @@ snapshots: nano-spawn: 2.0.0 pidtree: 0.6.0 string-argv: 0.3.2 - yaml: 2.8.2 + yaml: 2.8.3 listr2@9.0.5: dependencies: @@ -17378,6 +17880,11 @@ snapshots: chalk: 4.1.2 is-unicode-supported: 0.1.0 + log-symbols@7.0.1: + dependencies: + is-unicode-supported: 2.1.0 + yoctocolors: 2.1.2 + log-update@6.1.0: dependencies: ansi-escapes: 7.0.0 @@ -17975,7 +18482,11 @@ snapshots: minimatch@10.2.3: dependencies: - brace-expansion: 5.0.2 + brace-expansion: 5.0.5 + + minimatch@10.2.5: + dependencies: + brace-expansion: 5.0.5 minimatch@3.1.2: dependencies: @@ -17987,7 +18498,7 @@ snapshots: minimist@1.2.8: {} - minipass@7.1.2: {} + minipass@7.1.3: {} monaco-editor@0.52.2: {} @@ -18018,21 +18529,23 @@ snapshots: mute-stream@0.0.8: {} + mute-stream@3.0.0: {} + mz@2.7.0: dependencies: any-promise: 1.3.0 object-assign: 4.1.1 thenify-all: 1.6.0 - nano-css@5.6.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + nano-css@5.6.2(react-dom@19.2.4(react@19.2.5))(react@19.2.5): dependencies: '@jridgewell/sourcemap-codec': 1.5.5 css-tree: 1.1.3 csstype: 3.2.3 fastest-stable-stringify: 2.0.2 inline-style-prefixer: 7.0.1 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + react: 19.2.5 + react-dom: 19.2.4(react@19.2.5) rtl-css-js: 1.16.1 stacktrace-js: 2.0.2 stylis: 4.3.6 @@ -18216,6 +18729,17 @@ snapshots: strip-ansi: 6.0.1 wcwidth: 1.0.1 + ora@9.3.0: + dependencies: + chalk: 5.6.2 + cli-cursor: 5.0.0 + cli-spinners: 3.4.0 + is-interactive: 2.0.0 + is-unicode-supported: 2.1.0 + log-symbols: 7.0.1 + stdin-discarder: 0.3.2 + string-width: 8.1.0 + os-tmpdir@1.0.2: {} outdent@0.5.0: {} @@ -18326,12 +18850,12 @@ snapshots: path-scurry@1.11.1: dependencies: lru-cache: 10.4.3 - minipass: 7.1.2 + minipass: 7.1.3 - path-scurry@2.0.0: + path-scurry@2.0.2: dependencies: lru-cache: 11.2.4 - minipass: 7.1.2 + minipass: 7.1.3 path-serializer@0.5.1: {} @@ -18435,7 +18959,7 @@ snapshots: postcss-load-config@4.0.2(postcss@8.5.6): dependencies: lilconfig: 3.1.3 - yaml: 2.8.2 + yaml: 2.8.3 optionalDependencies: postcss: 8.5.6 @@ -18686,24 +19210,39 @@ snapshots: iconv-lite: 0.7.2 unpipe: 1.0.0 - react-compiler-runtime@0.0.0-experimental-fe727a3-20250909(react@19.2.4): + react-compiler-runtime@0.0.0-experimental-fe727a3-20250909(react@19.2.5): dependencies: - react: 19.2.4 + react: 19.2.5 react-dom@19.2.4(react@19.2.4): dependencies: react: 19.2.4 scheduler: 0.27.0 + react-dom@19.2.4(react@19.2.5): + dependencies: + react: 19.2.5 + scheduler: 0.27.0 + + react-i18next@17.0.4(i18next@26.0.6(typescript@5.9.3))(react@19.2.5)(typescript@5.9.3): + dependencies: + '@babel/runtime': 7.29.2 + html-parse-stringify: 3.0.1 + i18next: 26.0.6(typescript@5.9.3) + react: 19.2.5 + use-sync-external-store: 1.6.0(react@19.2.5) + optionalDependencies: + typescript: 5.9.3 + react-is@17.0.2: {} react-is@18.3.1: {} react-lazy-with-preload@2.2.1: {} - react-reconciler@0.33.0(react@19.2.4): + react-reconciler@0.33.0(react@19.2.5): dependencies: - react: 19.2.4 + react: 19.2.5 scheduler: 0.27.0 react-refresh@0.18.0: {} @@ -18732,16 +19271,16 @@ snapshots: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - react-router-dom@7.13.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + react-router-dom@7.13.0(react-dom@19.2.4(react@19.2.4))(react@19.2.5): dependencies: - react: 19.2.4 + react: 19.2.5 react-dom: 19.2.4(react@19.2.4) - react-router: 7.13.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react-router: 7.13.0(react-dom@19.2.4(react@19.2.4))(react@19.2.5) - react-router@7.13.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + react-router@7.13.0(react-dom@19.2.4(react@19.2.4))(react@19.2.5): dependencies: cookie: 1.1.1 - react: 19.2.4 + react: 19.2.5 set-cookie-parser: 2.7.2 optionalDependencies: react-dom: 19.2.4(react@19.2.4) @@ -18754,12 +19293,12 @@ snapshots: optionalDependencies: '@types/react': 19.2.14 - react-universal-interface@0.6.2(react@19.2.4)(tslib@2.8.1): + react-universal-interface@0.6.2(react@19.2.5)(tslib@2.8.1): dependencies: - react: 19.2.4 + react: 19.2.5 tslib: 2.8.1 - react-use@17.6.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + react-use@17.6.0(react-dom@19.2.4(react@19.2.5))(react@19.2.5): dependencies: '@types/js-cookie': 2.2.7 '@xobotyi/scrollbar-width': 1.9.5 @@ -18767,10 +19306,10 @@ snapshots: fast-deep-equal: 3.1.3 fast-shallow-equal: 1.0.0 js-cookie: 2.2.1 - nano-css: 5.6.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - react-universal-interface: 0.6.2(react@19.2.4)(tslib@2.8.1) + nano-css: 5.6.2(react-dom@19.2.4(react@19.2.5))(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.4(react@19.2.5) + react-universal-interface: 0.6.2(react@19.2.5)(tslib@2.8.1) resize-observer-polyfill: 1.5.1 screenfull: 5.2.0 set-harmonic-interval: 1.0.1 @@ -18780,6 +19319,8 @@ snapshots: react@19.2.4: {} + react@19.2.5: {} + read-cache@1.0.0: dependencies: pify: 2.3.0 @@ -18813,6 +19354,8 @@ snapshots: readdirp@4.0.2: {} + readdirp@5.0.0: {} + recma-build-jsx@1.0.0: dependencies: '@types/estree': 1.0.8 @@ -18865,8 +19408,6 @@ snapshots: get-proto: 1.0.1 which-builtin-type: 1.2.1 - regenerator-runtime@0.14.1: {} - regex-recursion@6.0.2: dependencies: regex-utilities: 2.3.0 @@ -19017,7 +19558,7 @@ snapshots: rimraf@6.1.3: dependencies: - glob: 13.0.5 + glob: 13.0.6 package-json-from-dist: 1.0.1 rollup@4.34.9: @@ -19072,6 +19613,15 @@ snapshots: '@typescript/native-preview': 7.0.0-dev.20260212.1 typescript: 5.9.3 + rsbuild-plugin-i18next-extractor@0.2.0(@rsbuild/core@1.7.5)(i18next-cli@1.54.2(@swc/helpers@0.5.21)(@types/node@24.10.13)(i18next@26.0.6(typescript@5.9.3))(typescript@5.9.3))(rollup@4.34.9): + dependencies: + '@rollup/pluginutils': 5.3.0(rollup@4.34.9) + '@rsbuild/core': 1.7.5 + '@rspack/lite-tapable': 1.1.0 + i18next-cli: 1.54.2(@swc/helpers@0.5.21)(@types/node@24.10.13)(i18next@26.0.6(typescript@5.9.3))(typescript@5.9.3) + transitivePeerDependencies: + - rollup + rsbuild-plugin-publint@0.3.4(@rsbuild/core@1.7.5): dependencies: picocolors: 1.1.1 @@ -19102,17 +19652,19 @@ snapshots: rtl-css-js@1.16.1: dependencies: - '@babel/runtime': 7.25.4 + '@babel/runtime': 7.29.2 run-applescript@7.0.0: {} run-async@2.4.1: {} + run-async@4.0.6: {} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 - rxjs@7.8.1: + rxjs@7.8.2: dependencies: tslib: 2.8.1 @@ -19208,7 +19760,7 @@ snapshots: '@bufbuild/protobuf': 2.6.0 colorjs.io: 0.5.2 immutable: 5.0.2 - rxjs: 7.8.1 + rxjs: 7.8.2 supports-color: 8.1.1 sync-child-process: 1.0.2 varint: 6.0.0 @@ -19614,6 +20166,8 @@ snapshots: std-env@3.9.0: {} + stdin-discarder@0.3.2: {} + stop-iteration-iterator@1.1.0: dependencies: es-errors: 1.3.0 @@ -19769,11 +20323,11 @@ snapshots: picocolors: 1.1.1 sax: 1.4.4 - swc-loader@0.2.7(@swc/core@1.15.24(@swc/helpers@0.5.21))(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))): + swc-loader@0.2.7(@swc/core@1.15.30(@swc/helpers@0.5.21))(webpack@5.105.2(@swc/core@1.15.30(@swc/helpers@0.5.21))): dependencies: - '@swc/core': 1.15.24(@swc/helpers@0.5.21) + '@swc/core': 1.15.30(@swc/helpers@0.5.21) '@swc/counter': 0.1.3 - webpack: 5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21)) + webpack: 5.105.2(@swc/core@1.15.30(@swc/helpers@0.5.21)) symbol-tree@3.2.4: {} @@ -19825,16 +20379,16 @@ snapshots: ansi-escapes: 7.0.0 supports-hyperlinks: 3.2.0 - terser-webpack-plugin@5.3.16(@swc/core@1.15.24(@swc/helpers@0.5.21))(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))): + terser-webpack-plugin@5.3.16(@swc/core@1.15.30(@swc/helpers@0.5.21))(webpack@5.105.2(@swc/core@1.15.30(@swc/helpers@0.5.21))): dependencies: '@jridgewell/trace-mapping': 0.3.29 jest-worker: 27.5.1 schema-utils: 4.3.3 serialize-javascript: 6.0.2 terser: 5.31.6 - webpack: 5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21)) + webpack: 5.105.2(@swc/core@1.15.30(@swc/helpers@0.5.21)) optionalDependencies: - '@swc/core': 1.15.24(@swc/helpers@0.5.21) + '@swc/core': 1.15.30(@swc/helpers@0.5.21) terser-webpack-plugin@5.3.16(webpack@5.105.2): dependencies: @@ -20258,6 +20812,10 @@ snapshots: optionalDependencies: '@types/react': 19.2.14 + use-sync-external-store@1.6.0(react@19.2.5): + dependencies: + react: 19.2.5 + util-deprecate@1.0.2: {} utils-merge@1.0.1: {} @@ -20366,6 +20924,8 @@ snapshots: - supports-color - terser + void-elements@3.1.0: {} + w3c-xmlserializer@5.0.0: dependencies: xml-name-validator: 5.0.0 @@ -20509,7 +21069,7 @@ snapshots: - esbuild - uglify-js - webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21)): + webpack@5.105.2(@swc/core@1.15.30(@swc/helpers@0.5.21)): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.8 @@ -20533,7 +21093,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 4.3.3 tapable: 2.3.0 - terser-webpack-plugin: 5.3.16(@swc/core@1.15.24(@swc/helpers@0.5.21))(webpack@5.105.2(@swc/core@1.15.24(@swc/helpers@0.5.21))) + terser-webpack-plugin: 5.3.16(@swc/core@1.15.30(@swc/helpers@0.5.21))(webpack@5.105.2(@swc/core@1.15.30(@swc/helpers@0.5.21))) watchpack: 2.5.1 webpack-sources: 3.3.3 transitivePeerDependencies: @@ -20717,7 +21277,7 @@ snapshots: yallist@4.0.0: {} - yaml@2.8.2: {} + yaml@2.8.3: {} yargs-parser@18.1.3: dependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 1479161606..3cbaa85bb5 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -3,6 +3,7 @@ packages: - examples/* - packages/background-only - packages/genui/* + - packages/i18n/* - packages/lynx/* - packages/mcp-servers/* - packages/repl diff --git a/tsconfig.json b/tsconfig.json index 8a12cf8132..ff22921b6c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -125,6 +125,9 @@ { "path": "./packages/lynx" }, + { + "path": "./packages/i18n" + }, { "path": "./packages/motion" }, diff --git a/vitest.config.ts b/vitest.config.ts index 325ae5eb71..0de2abfc41 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -74,6 +74,7 @@ export default defineConfig({ 'packages/testing-library/examples/*/vitest.config.ts', '!packages/testing-library/examples/react-compiler/vitest.config.ts', 'packages/testing-library/examples/react-compiler/vitest.config.*.ts', + 'packages/i18n/*/vitest.config.ts', 'packages/tailwind-preset/vitest.config.ts', 'packages/tools/*/vitest.config.ts', 'packages/use-sync-external-store/vitest.config.ts',