diff --git a/packages/i18n/.gitignore b/packages/i18n/.gitignore new file mode 100644 index 0000000000..da9f85aa06 --- /dev/null +++ b/packages/i18n/.gitignore @@ -0,0 +1 @@ +/scripts/locale-manager/.temp/ \ No newline at end of file diff --git a/packages/i18n/package.json b/packages/i18n/package.json index ccb0d4880a..a6d613bddd 100644 --- a/packages/i18n/package.json +++ b/packages/i18n/package.json @@ -13,6 +13,7 @@ "check:lint": "eslint . --max-warnings 2", "check:types": "tsc --noEmit", "check:format": "prettier --check \"**/*.{ts,tsx,md,json,css,scss}\"", + "check:translations": "tsx scripts/check-missing-translations.ts", "fix:lint": "eslint . --fix", "fix:format": "prettier --write \"**/*.{ts,tsx,md,json,css,scss}\"", "clean": "rm -rf .turbo && rm -rf .next && rm -rf node_modules && rm -rf dist" @@ -22,16 +23,17 @@ "intl-messageformat": "^10.7.11", "mobx": "catalog:", "mobx-react": "catalog:", - "lodash": "catalog:", "react": "catalog:" }, "devDependencies": { "@plane/eslint-config": "workspace:*", "@plane/typescript-config": "workspace:*", - "@types/node": "^22.5.4", "@types/lodash": "catalog:", + "@types/node": "^22.17.2", "@types/react": "catalog:", + "ansis": "^4.1.0", "tsdown": "catalog:", + "tsx": "^4.7.1", "typescript": "catalog:" } -} +} \ No newline at end of file diff --git a/packages/i18n/scripts/check-missing-translations.ts b/packages/i18n/scripts/check-missing-translations.ts new file mode 100644 index 0000000000..ebdd9aad63 --- /dev/null +++ b/packages/i18n/scripts/check-missing-translations.ts @@ -0,0 +1,57 @@ +#!/usr/bin/env node + +import { blue, yellow, white, red, green } from "ansis"; +import { BASE_LOCALE } from "./locale/constants"; +import { LocaleManager } from "./locale/manager"; +import { TranslationRow, TranslationStatus } from "./locale/types"; + +async function checkMissingTranslations() { + try { + const manager = new LocaleManager(); + const files = manager.translationFiles; + let hasMissingTranslations = false; + + console.log(blue`\nChecking for missing translations...\n`); + + for (const file of files) { + console.log(yellow`\nChecking šŸ“„ ${file}:`); + const rows = await manager.generateTranslationRows(file); + + const missingTranslations = rows.filter((row: TranslationRow) => + Object.entries(row.translations).some( + ([locale, translation]: [string, TranslationStatus]) => + locale !== BASE_LOCALE && translation.status === "missing" + ) + ); + + if (missingTranslations.length > 0) { + hasMissingTranslations = true; + + missingTranslations.forEach((row: TranslationRow) => { + console.log(white`\nšŸ”‘ Key: ${row.key}`); + Object.entries(row.translations).forEach(([locale, translation]: [string, TranslationStatus]) => { + if (locale !== "en" && translation.status === "missing") { + console.log(red` - Missing in šŸ“‚ locales/${locale}/${file}.json`); + } + }); + }); + console.log(); // Add empty line for readability + } else { + console.log(green`āœ“ All translations present`); + } + } + + if (hasMissingTranslations) { + console.error(red`\nāš ļø Some translations are missing. Please add them to maintain full language support.\n`); + process.exit(1); + } else { + console.log(green`\nāœ“ All translations are complete!\n`); + process.exit(0); + } + } catch (error) { + console.error(red`\nError checking translations: ${error}`); + process.exit(1); + } +} + +checkMissingTranslations(); diff --git a/packages/i18n/scripts/locale/constants.ts b/packages/i18n/scripts/locale/constants.ts new file mode 100644 index 0000000000..a106a69d51 --- /dev/null +++ b/packages/i18n/scripts/locale/constants.ts @@ -0,0 +1,11 @@ +import path from "path"; +import { TranslationFile, TranslationLocale } from "./types"; + +/** Root path for all translation files */ +export const TRANSLATION_ROOT_PATH = path.join(__dirname, "../../src/locales"); + +/** Comma-separated list of translation file categories */ +export const TRANSLATION_FILES: TranslationFile[] = ["translations", "accessibility", "editor", "core"]; + +/** base locale */ +export const BASE_LOCALE: TranslationLocale = "en"; diff --git a/packages/i18n/scripts/locale/file-service.ts b/packages/i18n/scripts/locale/file-service.ts new file mode 100644 index 0000000000..8542be9d2b --- /dev/null +++ b/packages/i18n/scripts/locale/file-service.ts @@ -0,0 +1,43 @@ +// fileService.ts +import { promises as fs } from "fs"; + +export class FileService { + /** + * Reads the content of a file at the specified path + * @param filePath Path to the file to read + * @returns The file content as a string, or null if the file doesn't exist or can't be read + * @throws Never - returns null instead of throwing + */ + async read(filePath: string): Promise { + try { + return await fs.readFile(filePath, "utf-8"); + } catch { + return null; + } + } + + /** + * Writes content to a file at the specified path + * @param filePath Path to the file to write + * @param content Content to write to the file + * @throws If the file can't be written to (e.g., permissions, disk space) + */ + async write(filePath: string, content: string): Promise { + await fs.writeFile(filePath, content, "utf-8"); + } + + /** + * Checks if a file exists at the specified path + * @param filePath Path to check for file existence + * @returns True if the file exists and is accessible, false otherwise + * @throws Never - returns false instead of throwing + */ + async exists(filePath: string): Promise { + try { + await fs.access(filePath); + return true; + } catch { + return false; + } + } +} diff --git a/packages/i18n/scripts/locale/json-service.ts b/packages/i18n/scripts/locale/json-service.ts new file mode 100644 index 0000000000..784742abb8 --- /dev/null +++ b/packages/i18n/scripts/locale/json-service.ts @@ -0,0 +1,53 @@ +// jsonService.ts +import _ from "lodash"; + +export interface NestedTranslations { + [key: string]: string | NestedTranslations; +} + +export class JsonService { + /** + * Flattens a nested translations object into a flat key-value structure + * @param obj The nested translations object to flatten + * @param prefix Optional prefix for nested keys + * @returns A flattened object with dot-notation keys + */ + flatten(obj: NestedTranslations, prefix = ""): Record { + return Object.keys(obj).reduce( + (acc, key) => { + const newKey = prefix ? `${prefix}.${key}` : key; + if (_.isPlainObject(obj[key])) { + Object.assign(acc, this.flatten(obj[key] as NestedTranslations, newKey)); + } else { + // Handle empty strings explicitly + acc[newKey] = obj[key] === "" ? "" : (obj[key] as string); + } + return acc; + }, + {} as Record + ); + } + + /** + * Sets a value at a specific path in the translations object + * @param obj The translations object to modify + * @param key The dot-notation path where to set the value + * @param value The translation string to set + * @returns The modified translations object + */ + set(obj: NestedTranslations, key: string, value: string): NestedTranslations { + _.set(obj, key, value); + return obj; + } + + /** + * Removes a value at a specific path in the translations object + * @param obj The translations object to modify + * @param key The dot-notation path to remove + * @returns The modified translations object + */ + unset(obj: NestedTranslations, key: string): NestedTranslations { + _.unset(obj, key); + return obj; + } +} diff --git a/packages/i18n/scripts/locale/manager.ts b/packages/i18n/scripts/locale/manager.ts new file mode 100644 index 0000000000..30381ca97b --- /dev/null +++ b/packages/i18n/scripts/locale/manager.ts @@ -0,0 +1,187 @@ +// translationManager.ts +import { promises as fs } from "fs"; +import path from "path"; +import { TRANSLATION_ROOT_PATH, TRANSLATION_FILES, BASE_LOCALE } from "./constants"; +import { FileService } from "./file-service"; +import { JsonService, NestedTranslations } from "./json-service"; +import { TranslationFile, TranslationLocale, TranslationRow, TranslationStatus } from "./types"; + +/** + * Validates if a directory is a valid locale directory (e.g., 'en', 'fr', 'de') + * @param dir Directory name to validate + * @returns True if the directory is a valid locale directory + */ +const isValidLocaleDirectory = (dir: string): boolean => /^[a-z]{2}(-[A-Z]{2})?$/.test(dir); + +/** + * Manages translation files across multiple locales. + * Handles reading, writing, and generating translation files in a structured format. + */ +export class LocaleManager { + private fileService = new FileService(); + private jsonService = new JsonService(); + public readonly rootPath: string; + public readonly translationFiles: TranslationFile[]; + + /** + * Initializes the TranslationManager with default paths and files. + * Automatically updates generated translations for each file. + */ + constructor() { + this.rootPath = TRANSLATION_ROOT_PATH; + this.translationFiles = (TRANSLATION_FILES.split(",") as TranslationFile[]) || []; + this.translationFiles.forEach((f) => this.updateGeneratedTranslations(f)); + } + + /** + * Gets all available locale directories (e.g., 'en', 'fr', 'de') + * @returns Array of valid locale identifiers + * @throws If the root directory cannot be read + */ + private async getLocales(): Promise { + const files = await fs.readdir(this.rootPath); + return files.filter((f) => isValidLocaleDirectory(f)) as TranslationLocale[]; + } + + /** + * Constructs the full file path for a translation file + * @param locale The locale identifier (e.g., 'en', 'fr') + * @param file The translation file category (e.g., "translations", "accessibility", "editor", "core") + * @returns Absolute path to the translation file + */ + private getFilePath(locale: TranslationLocale, file: TranslationFile): string { + return path.join(this.rootPath, locale, `${file}.json`); + } + + /** + * Retrieves and flattens translations for a specific locale and file + * @param locale The locale to get translations for + * @param file The translation file category (e.g., "translations", "accessibility", "editor", "core") + * @returns Flattened key-value pairs of translations + */ + async getTranslations(locale: TranslationLocale, file: TranslationFile): Promise> { + const filePath = this.getFilePath(locale, file); + const raw = await this.fileService.read(filePath); + if (!raw) return {}; + return this.jsonService.flatten(JSON.parse(raw) as NestedTranslations); + } + + /** + * Updates a single translation key for a specific locale + * @param locale The locale to update + * @param key The translation key (dot-notation path) + * @param value The new translation value + * @param file The translation file category (e.g., "translations", "accessibility", "editor", "core") + * @throws If the file cannot be written + */ + async updateTranslation(locale: TranslationLocale, key: string, value: string, file: TranslationFile): Promise { + const filePath = this.getFilePath(locale, file); + const raw = (await this.fileService.read(filePath)) || "{}"; + const json = JSON.parse(raw) as NestedTranslations; + this.jsonService.set(json, key, value); + await this.fileService.write(filePath, JSON.stringify(json, null, 2)); + await this.updateGeneratedTranslations(file); + } + + /** + * Deletes a translation key from all locales + * @param key The translation key to delete + * @param file The translation file category (e.g., "translations", "accessibility", "editor", "core") + * @throws If any file cannot be written + */ + async deleteTranslation(key: string, file: TranslationFile): Promise { + const locales = await this.getLocales(); + for (const locale of locales) { + const filePath = this.getFilePath(locale, file); + const raw = (await this.fileService.read(filePath)) || "{}"; + const json = JSON.parse(raw) as NestedTranslations; + this.jsonService.unset(json, key); + await this.fileService.write(filePath, JSON.stringify(json, null, 2)); + } + await this.updateGeneratedTranslations(file); + } + + /** + * Generates translation rows for all locales in a specific file + * @param file The translation file category (e.g., "translations", "accessibility", "editor", "core") + * @returns Array of translation rows with status for each locale + * @throws If English translations are not found + */ + async generateTranslationRows(file: TranslationFile): Promise { + const locales = await this.getLocales(); + const translations: Record> = { + [BASE_LOCALE]: {}, + cs: {}, + de: {}, + es: {}, + fr: {}, + id: {}, + it: {}, + ja: {}, + ko: {}, + pl: {}, + "pt-BR": {}, + ro: {}, + ru: {}, + sk: {}, + ua: {}, + "vi-VN": {}, + "zh-CN": {}, + "zh-TW": {}, + "tr-TR": {}, + }; + + for (const locale of locales) { + translations[locale] = await this.getTranslations(locale, file); + } + + const en = translations[BASE_LOCALE]; + if (!en) throw new Error("English translations not found"); + + return Object.keys(en).map((key) => ({ + id: key, + key, + fullPath: path.join(this.rootPath, key), + translations: Object.fromEntries( + locales.map((locale) => [ + locale, + { + status: translations[locale]?.[key] ? "added" : "missing", + value: translations[locale]?.[key] || "", + } as TranslationStatus, + ]) + ) as Record, + })); + } + + /** + * Updates multiple translations for a single key across multiple locales + * @param key The translation key to update + * @param translations Map of locale to translation value + * @param file The translation file category + * @throws If any translation update fails + */ + async bulkUpdateTranslations( + key: string, + translations: Record, + file: TranslationFile + ): Promise { + await Promise.all( + Object.entries(translations).map(([locale, value]) => + this.updateTranslation(locale as TranslationLocale, key, value, file) + ) + ); + } + + /** + * Updates the generated translation file for a specific category + * @param file The translation file category + * @throws If the temporary directory cannot be created or the file cannot be written + */ + async updateGeneratedTranslations(file: TranslationFile): Promise { + const data = await this.generateTranslationRows(file); + const tempDir = path.join(__dirname, ".temp"); + await fs.mkdir(tempDir, { recursive: true }); + await this.fileService.write(path.join(tempDir, `generated-${file}.json`), JSON.stringify(data, null, 2)); + } +} diff --git a/packages/i18n/scripts/locale/types.ts b/packages/i18n/scripts/locale/types.ts new file mode 100644 index 0000000000..2fedf7622e --- /dev/null +++ b/packages/i18n/scripts/locale/types.ts @@ -0,0 +1,34 @@ +export type TranslationLocale = + | "en" + | "cs" + | "de" + | "es" + | "fr" + | "id" + | "it" + | "ja" + | "ko" + | "pl" + | "pt-BR" + | "ro" + | "ru" + | "sk" + | "ua" + | "vi-VN" + | "zh-CN" + | "zh-TW" + | "tr-TR"; + +export type TranslationFile = "core" | "translations" | "accessibility" | "editor"; + +export interface TranslationStatus { + status: "added" | "missing"; + value: string; +} + +export interface TranslationRow { + id: string; + key: string; + fullPath: string; + translations: Record; +} diff --git a/packages/i18n/tsconfig.json b/packages/i18n/tsconfig.json index 6599e6e82a..ec9cf3619d 100644 --- a/packages/i18n/tsconfig.json +++ b/packages/i18n/tsconfig.json @@ -5,6 +5,6 @@ "lib": ["esnext", "dom"], "resolveJsonModule": true }, - "include": ["./src"], + "include": ["./src", "./scripts"], "exclude": ["dist", "build", "node_modules"] } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a1d88bf7b3..5874d50133 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -917,9 +917,6 @@ importers: intl-messageformat: specifier: ^10.7.11 version: 10.7.16 - lodash: - specifier: 'catalog:' - version: 4.17.21 mobx: specifier: 'catalog:' version: 6.12.0 @@ -940,14 +937,20 @@ importers: specifier: 'catalog:' version: 4.17.20 '@types/node': - specifier: ^22.5.4 + specifier: ^22.17.2 version: 22.17.2 '@types/react': specifier: 'catalog:' version: 18.3.11 + ansis: + specifier: ^4.1.0 + version: 4.1.0 tsdown: specifier: 'catalog:' version: 0.14.2(typescript@5.8.3) + tsx: + specifier: ^4.7.1 + version: 4.20.5 typescript: specifier: 5.8.3 version: 5.8.3 @@ -1042,13 +1045,13 @@ importers: version: link:../typescript-config '@storybook/addon-designs': specifier: 10.0.2 - version: 10.0.2(@storybook/addon-docs@9.1.2(@types/react@18.3.11)(storybook@9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.0(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.0(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1))) + version: 10.0.2(@storybook/addon-docs@9.1.2(@types/react@18.3.11)(storybook@9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.7(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.7(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))) '@storybook/addon-docs': specifier: 9.1.2 - version: 9.1.2(@types/react@18.3.11)(storybook@9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.0(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1))) + version: 9.1.2(@types/react@18.3.11)(storybook@9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.7(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))) '@storybook/react-vite': specifier: 9.1.2 - version: 9.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.50.0)(storybook@9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.0(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1)))(typescript@5.8.3)(vite@7.0.0(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1)) + version: 9.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.50.0)(storybook@9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.7(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)))(typescript@5.8.3)(vite@7.0.7(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) '@types/react': specifier: 'catalog:' version: 18.3.11 @@ -1057,10 +1060,10 @@ importers: version: 18.3.1 eslint-plugin-storybook: specifier: 9.1.2 - version: 9.1.2(eslint@8.57.1)(storybook@9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.0(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1)))(typescript@5.8.3) + version: 9.1.2(eslint@8.57.1)(storybook@9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.7(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)))(typescript@5.8.3) storybook: specifier: 9.1.2 - version: 9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.0(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1)) + version: 9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.7(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) tsdown: specifier: 'catalog:' version: 0.14.2(typescript@5.8.3) @@ -1303,7 +1306,7 @@ importers: version: 10.4.21(postcss@8.5.6) postcss-cli: specifier: ^11.0.0 - version: 11.0.1(jiti@2.5.1)(postcss@8.5.6) + version: 11.0.1(jiti@2.5.1)(postcss@8.5.6)(tsx@4.20.5) postcss-nested: specifier: ^6.0.1 version: 6.2.0(postcss@8.5.6) @@ -2517,78 +2520,78 @@ packages: '@remirror/core-constants@3.0.0': resolution: {integrity: sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg==} - '@rolldown/binding-android-arm64@1.0.0-beta.34': - resolution: {integrity: sha512-jf5GNe5jP3Sr1Tih0WKvg2bzvh5T/1TA0fn1u32xSH7ca/p5t+/QRr4VRFCV/na5vjwKEhwWrChsL2AWlY+eoA==} + '@rolldown/binding-android-arm64@1.0.0-beta.35': + resolution: {integrity: sha512-zVTg0544Ib1ldJSWwjy8URWYHlLFJ98rLnj+2FIj5fRs4KqGKP4VgH/pVUbXNGxeLFjItie6NSK1Un7nJixneQ==} cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.0.0-beta.34': - resolution: {integrity: sha512-2F/TqH4QuJQ34tgWxqBjFL3XV1gMzeQgUO8YRtCPGBSP0GhxtoFzsp7KqmQEothsxztlv+KhhT9Dbg3HHwHViQ==} + '@rolldown/binding-darwin-arm64@1.0.0-beta.35': + resolution: {integrity: sha512-WPy0qx22CABTKDldEExfpYHWHulRoPo+m/YpyxP+6ODUPTQexWl8Wp12fn1CVP0xi0rOBj7ugs6+kKMAJW56wQ==} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.0-beta.34': - resolution: {integrity: sha512-E1QuFslgLWbHQ8Qli/AqUKdfg0pockQPwRxVbhNQ74SciZEZpzLaujkdmOLSccMlSXDfFCF8RPnMoRAzQ9JV8Q==} + '@rolldown/binding-darwin-x64@1.0.0-beta.35': + resolution: {integrity: sha512-3k1TabJafF/GgNubXMkfp93d5p30SfIMOmQ5gm1tFwO+baMxxVPwDs3FDvSl+feCWwXxBA+bzemgkaDlInmp1Q==} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.0.0-beta.34': - resolution: {integrity: sha512-VS8VInNCwnkpI9WeQaWu3kVBq9ty6g7KrHdLxYMzeqz24+w9hg712TcWdqzdY6sn+24lUoMD9jTZrZ/qfVpk0g==} + '@rolldown/binding-freebsd-x64@1.0.0-beta.35': + resolution: {integrity: sha512-GAiapN5YyIocnBVNEiOxMfWO9NqIeEKKWohj1sPLGc61P+9N1meXOOCiAPbLU+adXq0grtbYySid+Or7f2q+Mg==} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.34': - resolution: {integrity: sha512-4St4emjcnULnxJYb/5ZDrH/kK/j6PcUgc3eAqH5STmTrcF+I9m/X2xvSF2a2bWv1DOQhxBewThu0KkwGHdgu5w==} + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.35': + resolution: {integrity: sha512-okPKKIE73qkUMvq7dxDyzD0VIysdV4AirHqjf8tGTjuNoddUAl3WAtMYbuZCEKJwUyI67UINKO1peFVlYEb+8w==} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.34': - resolution: {integrity: sha512-a737FTqhFUoWfnebS2SnQ2BS50p0JdukdkUBwy2J06j4hZ6Eej0zEB8vTfAqoCjn8BQKkXBy+3Sx0IRkgwz1gA==} + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.35': + resolution: {integrity: sha512-Nky8Q2cxyKVkEETntrvcmlzNir5khQbDfX3PflHPbZY7XVZalllRqw7+MW5vn+jTsk5BfKVeLsvrF4344IU55g==} cpu: [arm64] os: [linux] - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.34': - resolution: {integrity: sha512-NH+FeQWKyuw0k+PbXqpFWNfvD8RPvfJk766B/njdaWz4TmiEcSB0Nb6guNw1rBpM1FmltQYb3fFnTumtC6pRfA==} + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.35': + resolution: {integrity: sha512-8aHpWVSfZl3Dy2VNFG9ywmlCPAJx45g0z+qdOeqmYceY7PBAT4QGzii9ig1hPb1pY8K45TXH44UzQwr2fx352Q==} cpu: [arm64] os: [linux] - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.34': - resolution: {integrity: sha512-Q3RSCivp8pNadYK8ke3hLnQk08BkpZX9BmMjgwae2FWzdxhxxUiUzd9By7kneUL0vRQ4uRnhD9VkFQ+Haeqdvw==} + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.35': + resolution: {integrity: sha512-1r1Ac/vTcm1q4kRiX/NB6qtorF95PhjdCxKH3Z5pb+bWMDZnmcz18fzFlT/3C6Qpj/ZqUF+EUrG4QEDXtVXGgg==} cpu: [x64] os: [linux] - '@rolldown/binding-linux-x64-musl@1.0.0-beta.34': - resolution: {integrity: sha512-wDd/HrNcVoBhWWBUW3evJHoo7GJE/RofssBy3Dsiip05YUBmokQVrYAyrboOY4dzs/lJ7HYeBtWQ9hj8wlyF0A==} + '@rolldown/binding-linux-x64-musl@1.0.0-beta.35': + resolution: {integrity: sha512-AFl1LnuhUBDfX2j+cE6DlVGROv4qG7GCPDhR1kJqi2+OuXGDkeEjqRvRQOFErhKz1ckkP/YakvN7JheLJ2PKHQ==} cpu: [x64] os: [linux] - '@rolldown/binding-openharmony-arm64@1.0.0-beta.34': - resolution: {integrity: sha512-dH3FTEV6KTNWpYSgjSXZzeX7vLty9oBYn6R3laEdhwZftQwq030LKL+5wyQdlbX5pnbh4h127hpv3Hl1+sj8dg==} + '@rolldown/binding-openharmony-arm64@1.0.0-beta.35': + resolution: {integrity: sha512-Tuwb8vPs+TVJlHhyLik+nwln/burvIgaPDgg6wjNZ23F1ttjZi0w0rQSZfAgsX4jaUbylwCETXQmTp3w6vcJMw==} cpu: [arm64] os: [openharmony] - '@rolldown/binding-wasm32-wasi@1.0.0-beta.34': - resolution: {integrity: sha512-y5BUf+QtO0JsIDKA51FcGwvhJmv89BYjUl8AmN7jqD6k/eU55mH6RJYnxwCsODq5m7KSSTigVb6O7/GqB8wbPw==} + '@rolldown/binding-wasm32-wasi@1.0.0-beta.35': + resolution: {integrity: sha512-rG0OozgqNUYcpu50MpICMlJflexRVtQfjlN9QYf6hoel46VvY0FbKGwBKoeUp2K5D4i8lV04DpEMfTZlzRjeiA==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.34': - resolution: {integrity: sha512-ga5hFhdTwpaNxEiuxZHWnD3ed0GBAzbgzS5tRHpe0ObptxM1a9Xrq6TVfNQirBLwb5Y7T/FJmJi3pmdLy95ljg==} + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.35': + resolution: {integrity: sha512-WeOfAZrycFo9+ZqTDp3YDCAOLolymtKGwImrr9n+OW0lpwI2UKyKXbAwGXRhydAYbfrNmuqWyfyoAnLh3X9Hjg==} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.34': - resolution: {integrity: sha512-4/MBp9T9eRnZskxWr8EXD/xHvLhdjWaeX/qY9LPRG1JdCGV3DphkLTy5AWwIQ5jhAy2ZNJR5z2fYRlpWU0sIyQ==} + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.35': + resolution: {integrity: sha512-XkLT7ikKGiUDvLh7qtJHRukbyyP1BIrD1xb7A+w4PjIiOKeOH8NqZ+PBaO4plT7JJnLxx+j9g/3B7iylR1nTFQ==} cpu: [ia32] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.34': - resolution: {integrity: sha512-7O5iUBX6HSBKlQU4WykpUoEmb0wQmonb6ziKFr3dJTHud2kzDnWMqk344T0qm3uGv9Ddq6Re/94pInxo1G2d4w==} + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.35': + resolution: {integrity: sha512-rftASFKVzjbcQHTCYHaBIDrnQFzbeV50tm4hVugG3tPjd435RHZC2pbeGV5IPdKEqyJSuurM/GfbV3kLQ3LY/A==} cpu: [x64] os: [win32] - '@rolldown/pluginutils@1.0.0-beta.34': - resolution: {integrity: sha512-LyAREkZHP5pMom7c24meKmJCdhf2hEyvam2q0unr3or9ydwDL+DJ8chTF6Av/RFPb3rH8UFBdMzO5MxTZW97oA==} + '@rolldown/pluginutils@1.0.0-beta.35': + resolution: {integrity: sha512-slYrCpoxJUqzFDDNlvrOYRazQUNRvWPjXA17dAOISY3rDMxX6k8K4cj2H+hEYMHF81HO3uNd5rHVigAWRM5dSg==} '@rollup/pluginutils@5.2.0': resolution: {integrity: sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==} @@ -7086,8 +7089,8 @@ packages: vue-tsc: optional: true - rolldown@1.0.0-beta.34: - resolution: {integrity: sha512-Wwh7EwalMzzX3Yy3VN58VEajeR2Si8+HDNMf706jPLIqU7CxneRW+dQVfznf5O0TWTnJyu4npelwg2bzTXB1Nw==} + rolldown@1.0.0-beta.35: + resolution: {integrity: sha512-gJATyqcsJe0Cs8RMFO8XgFjfTc0lK1jcSvirDQDSIfsJE+vt53QH/Ob+OBSJsXb98YtZXHfP/bHpELpPwCprow==} hasBin: true rollup@4.50.0: @@ -7658,6 +7661,11 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + tsx@4.20.5: + resolution: {integrity: sha512-+wKjMNU9w/EaQayHXb7WA7ZaHY6hN8WgfvHNQ3t1PnU91/7O8TcTnIhCDYTZwnt8JsO9IBqZ30Ln1r7pPF52Aw==} + engines: {node: '>=18.0.0'} + hasBin: true + turbo-darwin-64@2.5.6: resolution: {integrity: sha512-3C1xEdo4aFwMJAPvtlPqz1Sw/+cddWIOmsalHFMrsqqydcptwBfu26WW2cDm3u93bUzMbBJ8k3zNKFqxJ9ei2A==} cpu: [x64] @@ -7892,8 +7900,8 @@ packages: resolution: {integrity: sha512-t20zYkrSf868+j/p31cRIGN28Phrjm3nRSLR2fyc2tiWi4cZGVdv68yNlwnIINTkMTmPoMiSlc0OadaO7DXZaQ==} engines: {node: '>= 6'} - vite@7.0.0: - resolution: {integrity: sha512-ixXJB1YRgDIw2OszKQS9WxGHKwLdCsbQNkpJN171udl6szi/rIySHL6/Os3s2+oE4P/FLD4dxg4mD7Wust+u5g==} + vite@7.0.7: + resolution: {integrity: sha512-hc6LujN/EkJHmxeiDJMs0qBontZ1cdBvvoCbWhVjzUFTU329VRyOC46gHNSA8NcOC5yzCeXpwI40tieI3DEZqg==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -8859,12 +8867,12 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 - '@joshwooding/vite-plugin-react-docgen-typescript@0.6.1(typescript@5.8.3)(vite@7.0.0(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1))': + '@joshwooding/vite-plugin-react-docgen-typescript@0.6.1(typescript@5.8.3)(vite@7.0.7(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))': dependencies: glob: 10.4.5 magic-string: 0.30.17 react-docgen-typescript: 2.4.0(typescript@5.8.3) - vite: 7.0.0(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1) + vite: 7.0.7(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) optionalDependencies: typescript: 5.8.3 @@ -9376,51 +9384,51 @@ snapshots: '@remirror/core-constants@3.0.0': {} - '@rolldown/binding-android-arm64@1.0.0-beta.34': + '@rolldown/binding-android-arm64@1.0.0-beta.35': optional: true - '@rolldown/binding-darwin-arm64@1.0.0-beta.34': + '@rolldown/binding-darwin-arm64@1.0.0-beta.35': optional: true - '@rolldown/binding-darwin-x64@1.0.0-beta.34': + '@rolldown/binding-darwin-x64@1.0.0-beta.35': optional: true - '@rolldown/binding-freebsd-x64@1.0.0-beta.34': + '@rolldown/binding-freebsd-x64@1.0.0-beta.35': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.34': + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.35': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.34': + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.35': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.34': + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.35': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.34': + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.35': optional: true - '@rolldown/binding-linux-x64-musl@1.0.0-beta.34': + '@rolldown/binding-linux-x64-musl@1.0.0-beta.35': optional: true - '@rolldown/binding-openharmony-arm64@1.0.0-beta.34': + '@rolldown/binding-openharmony-arm64@1.0.0-beta.35': optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-beta.34': + '@rolldown/binding-wasm32-wasi@1.0.0-beta.35': dependencies: '@napi-rs/wasm-runtime': 1.0.3 optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.34': + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.35': optional: true - '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.34': + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.35': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.34': + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.35': optional: true - '@rolldown/pluginutils@1.0.0-beta.34': {} + '@rolldown/pluginutils@1.0.0-beta.35': {} '@rollup/pluginutils@5.2.0(rollup@4.50.0)': dependencies: @@ -9520,12 +9528,12 @@ snapshots: storybook: 8.6.14(prettier@3.6.2) ts-dedent: 2.2.0 - '@storybook/addon-designs@10.0.2(@storybook/addon-docs@9.1.2(@types/react@18.3.11)(storybook@9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.0(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.0(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1)))': + '@storybook/addon-designs@10.0.2(@storybook/addon-docs@9.1.2(@types/react@18.3.11)(storybook@9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.7(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.7(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)))': dependencies: '@figspec/react': 1.0.4(react@18.3.1) - storybook: 9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.0(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1)) + storybook: 9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.7(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) optionalDependencies: - '@storybook/addon-docs': 9.1.2(@types/react@18.3.11)(storybook@9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.0(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1))) + '@storybook/addon-docs': 9.1.2(@types/react@18.3.11)(storybook@9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.7(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -9542,15 +9550,15 @@ snapshots: transitivePeerDependencies: - '@types/react' - '@storybook/addon-docs@9.1.2(@types/react@18.3.11)(storybook@9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.0(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1)))': + '@storybook/addon-docs@9.1.2(@types/react@18.3.11)(storybook@9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.7(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)))': dependencies: '@mdx-js/react': 3.1.0(@types/react@18.3.11)(react@18.3.1) - '@storybook/csf-plugin': 9.1.2(storybook@9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.0(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1))) + '@storybook/csf-plugin': 9.1.2(storybook@9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.7(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))) '@storybook/icons': 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@storybook/react-dom-shim': 9.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.0(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1))) + '@storybook/react-dom-shim': 9.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.7(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - storybook: 9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.0(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1)) + storybook: 9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.7(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) ts-dedent: 2.2.0 transitivePeerDependencies: - '@types/react' @@ -9642,12 +9650,12 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@storybook/builder-vite@9.1.2(storybook@9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.0(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1)))(vite@7.0.0(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1))': + '@storybook/builder-vite@9.1.2(storybook@9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.7(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)))(vite@7.0.7(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))': dependencies: - '@storybook/csf-plugin': 9.1.2(storybook@9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.0(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1))) - storybook: 9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.0(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1)) + '@storybook/csf-plugin': 9.1.2(storybook@9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.7(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))) + storybook: 9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.7(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) ts-dedent: 2.2.0 - vite: 7.0.0(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1) + vite: 7.0.7(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) '@storybook/builder-webpack5@8.6.14(@swc/core@1.13.3(@swc/helpers@0.5.17))(esbuild@0.25.0)(storybook@8.6.14(prettier@3.6.2))(typescript@5.8.3)': dependencies: @@ -9720,9 +9728,9 @@ snapshots: storybook: 8.6.14(prettier@3.6.2) unplugin: 1.16.1 - '@storybook/csf-plugin@9.1.2(storybook@9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.0(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1)))': + '@storybook/csf-plugin@9.1.2(storybook@9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.7(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)))': dependencies: - storybook: 9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.0(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1)) + storybook: 9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.7(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) unplugin: 1.16.1 '@storybook/global@5.0.0': {} @@ -9796,27 +9804,27 @@ snapshots: react-dom: 18.3.1(react@18.3.1) storybook: 8.6.14(prettier@3.6.2) - '@storybook/react-dom-shim@9.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.0(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1)))': + '@storybook/react-dom-shim@9.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.7(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)))': dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - storybook: 9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.0(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1)) + storybook: 9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.7(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) - '@storybook/react-vite@9.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.50.0)(storybook@9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.0(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1)))(typescript@5.8.3)(vite@7.0.0(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1))': + '@storybook/react-vite@9.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.50.0)(storybook@9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.7(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)))(typescript@5.8.3)(vite@7.0.7(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))': dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.6.1(typescript@5.8.3)(vite@7.0.0(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1)) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.6.1(typescript@5.8.3)(vite@7.0.7(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) '@rollup/pluginutils': 5.2.0(rollup@4.50.0) - '@storybook/builder-vite': 9.1.2(storybook@9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.0(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1)))(vite@7.0.0(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1)) - '@storybook/react': 9.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.0(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1)))(typescript@5.8.3) + '@storybook/builder-vite': 9.1.2(storybook@9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.7(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)))(vite@7.0.7(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) + '@storybook/react': 9.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.7(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)))(typescript@5.8.3) find-up: 7.0.0 magic-string: 0.30.17 react: 18.3.1 react-docgen: 8.0.0 react-dom: 18.3.1(react@18.3.1) resolve: 1.22.10 - storybook: 9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.0(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1)) + storybook: 9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.7(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) tsconfig-paths: 4.2.0 - vite: 7.0.0(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1) + vite: 7.0.7(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) transitivePeerDependencies: - rollup - supports-color @@ -9856,13 +9864,13 @@ snapshots: '@storybook/test': 8.6.14(storybook@8.6.14(prettier@3.6.2)) typescript: 5.8.3 - '@storybook/react@9.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.0(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1)))(typescript@5.8.3)': + '@storybook/react@9.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.7(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)))(typescript@5.8.3)': dependencies: '@storybook/global': 5.0.0 - '@storybook/react-dom-shim': 9.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.0(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1))) + '@storybook/react-dom-shim': 9.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.7(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - storybook: 9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.0(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1)) + storybook: 9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.7(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) optionalDependencies: typescript: 5.8.3 @@ -10714,13 +10722,13 @@ snapshots: chai: 5.3.1 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(vite@7.0.0(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1))': + '@vitest/mocker@3.2.4(vite@7.0.7(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 7.0.0(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1) + vite: 7.0.7(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) '@vitest/pretty-format@2.0.5': dependencies: @@ -12068,11 +12076,11 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - eslint-plugin-storybook@9.1.2(eslint@8.57.1)(storybook@9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.0(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1)))(typescript@5.8.3): + eslint-plugin-storybook@9.1.2(eslint@8.57.1)(storybook@9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.7(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)))(typescript@5.8.3): dependencies: '@typescript-eslint/utils': 8.38.0(eslint@8.57.1)(typescript@5.8.3) eslint: 8.57.1 - storybook: 9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.0(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1)) + storybook: 9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.7(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) transitivePeerDependencies: - supports-color - typescript @@ -13772,14 +13780,14 @@ snapshots: possible-typed-array-names@1.1.0: {} - postcss-cli@11.0.1(jiti@2.5.1)(postcss@8.5.6): + postcss-cli@11.0.1(jiti@2.5.1)(postcss@8.5.6)(tsx@4.20.5): dependencies: chokidar: 3.6.0 dependency-graph: 1.0.0 fs-extra: 11.3.1 picocolors: 1.1.1 postcss: 8.5.6 - postcss-load-config: 5.1.0(jiti@2.5.1)(postcss@8.5.6) + postcss-load-config: 5.1.0(jiti@2.5.1)(postcss@8.5.6)(tsx@4.20.5) postcss-reporter: 7.1.0(postcss@8.5.6) pretty-hrtime: 1.0.3 read-cache: 1.0.0 @@ -13810,13 +13818,14 @@ snapshots: postcss: 8.5.6 ts-node: 10.9.2(@swc/core@1.13.3(@swc/helpers@0.5.17))(@types/node@22.17.2)(typescript@5.8.3) - postcss-load-config@5.1.0(jiti@2.5.1)(postcss@8.5.6): + postcss-load-config@5.1.0(jiti@2.5.1)(postcss@8.5.6)(tsx@4.20.5): dependencies: lilconfig: 3.1.3 yaml: 2.8.1 optionalDependencies: jiti: 2.5.1 postcss: 8.5.6 + tsx: 4.20.5 postcss-modules-extract-imports@3.1.0(postcss@8.5.6): dependencies: @@ -14422,7 +14431,7 @@ snapshots: dependencies: glob: 7.2.3 - rolldown-plugin-dts@0.15.10(rolldown@1.0.0-beta.34)(typescript@5.8.3): + rolldown-plugin-dts@0.15.10(rolldown@1.0.0-beta.35)(typescript@5.8.3): dependencies: '@babel/generator': 7.28.3 '@babel/parser': 7.28.3 @@ -14432,34 +14441,34 @@ snapshots: debug: 4.4.1(supports-color@5.5.0) dts-resolver: 2.1.2 get-tsconfig: 4.10.1 - rolldown: 1.0.0-beta.34 + rolldown: 1.0.0-beta.35 optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: - oxc-resolver - supports-color - rolldown@1.0.0-beta.34: + rolldown@1.0.0-beta.35: dependencies: '@oxc-project/runtime': 0.82.3 '@oxc-project/types': 0.82.3 - '@rolldown/pluginutils': 1.0.0-beta.34 + '@rolldown/pluginutils': 1.0.0-beta.35 ansis: 4.1.0 optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.0-beta.34 - '@rolldown/binding-darwin-arm64': 1.0.0-beta.34 - '@rolldown/binding-darwin-x64': 1.0.0-beta.34 - '@rolldown/binding-freebsd-x64': 1.0.0-beta.34 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.34 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.34 - '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.34 - '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.34 - '@rolldown/binding-linux-x64-musl': 1.0.0-beta.34 - '@rolldown/binding-openharmony-arm64': 1.0.0-beta.34 - '@rolldown/binding-wasm32-wasi': 1.0.0-beta.34 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.34 - '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.34 - '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.34 + '@rolldown/binding-android-arm64': 1.0.0-beta.35 + '@rolldown/binding-darwin-arm64': 1.0.0-beta.35 + '@rolldown/binding-darwin-x64': 1.0.0-beta.35 + '@rolldown/binding-freebsd-x64': 1.0.0-beta.35 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.35 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.35 + '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.35 + '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.35 + '@rolldown/binding-linux-x64-musl': 1.0.0-beta.35 + '@rolldown/binding-openharmony-arm64': 1.0.0-beta.35 + '@rolldown/binding-wasm32-wasi': 1.0.0-beta.35 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.35 + '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.35 + '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.35 rollup@4.50.0: dependencies: @@ -14762,13 +14771,13 @@ snapshots: - supports-color - utf-8-validate - storybook@9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.0(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1)): + storybook@9.1.2(@testing-library/dom@10.4.0)(prettier@3.6.2)(vite@7.0.7(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)): dependencies: '@storybook/global': 5.0.0 '@testing-library/jest-dom': 6.6.3 '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.0) '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.0.0(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1)) + '@vitest/mocker': 3.2.4(vite@7.0.7(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) '@vitest/spy': 3.2.4 better-opn: 3.0.2 esbuild: 0.25.0 @@ -15143,8 +15152,8 @@ snapshots: diff: 8.0.2 empathic: 2.0.0 hookable: 5.5.3 - rolldown: 1.0.0-beta.34 - rolldown-plugin-dts: 0.15.10(rolldown@1.0.0-beta.34)(typescript@5.8.3) + rolldown: 1.0.0-beta.35 + rolldown-plugin-dts: 0.15.10(rolldown@1.0.0-beta.35)(typescript@5.8.3) semver: 7.7.2 tinyexec: 1.0.1 tinyglobby: 0.2.14 @@ -15162,6 +15171,13 @@ snapshots: tslib@2.8.1: {} + tsx@4.20.5: + dependencies: + esbuild: 0.25.0 + get-tsconfig: 4.10.1 + optionalDependencies: + fsevents: 2.3.3 + turbo-darwin-64@2.5.6: optional: true @@ -15452,7 +15468,7 @@ snapshots: string_decoder: 1.3.0 util-deprecate: 1.0.2 - vite@7.0.0(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1): + vite@7.0.7(@types/node@22.17.2)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1): dependencies: esbuild: 0.25.0 fdir: 6.4.6(picomatch@4.0.3) @@ -15465,6 +15481,7 @@ snapshots: fsevents: 2.3.3 jiti: 2.5.1 terser: 5.43.1 + tsx: 4.20.5 yaml: 2.8.1 w3c-keyname@2.2.8: {}