Compare commits

...
Author SHA1 Message Date
Jayash Tripathy c66dc8bf1e Merge branch 'chore/i18n-dev-tooling' into chore/i18n-dev-tooling-types 2025-09-15 00:45:43 +05:30
Jayash Tripathy b3c36ca8e0 refactor(i18n): add method to update all generated translations and refactor flattening logic in JsonService 2025-09-15 00:37:27 +05:30
Jayash Tripathy 16db012ad9 fix(i18n): update type generation script to format translation keys correctly and improve AvailableLanguages type definition 2025-09-15 00:05:44 +05:30
Jayash Tripathy a82ff3d70c refactor: cleanup 2025-09-14 23:58:01 +05:30
Jayash Tripathy 41e8604cc1 feat(i18n): refactor type generation script to ensure generated files and handle errors 2025-09-14 22:40:13 +05:30
Jayash Tripathy 314e93fa24 feat(i18n): export generated translations type from index file 2025-09-14 22:26:41 +05:30
Jayash Tripathy 3bf95ebbfe feat(i18n): add type generation script and update translation key types 2025-09-14 22:21:06 +05:30
Jayash Tripathy 39ad110ca0 refactor(i18n): lint 2025-09-14 12:08:38 +05:30
Jayash Tripathy 447bafecdc fix(i18n): update comments for clarity in constants and manager files 2025-09-14 11:28:35 +05:30
Jayash Tripathy 36fbdd836c fix(i18n): lint 2025-09-14 02:06:12 +05:30
Jayash Tripathy a87bc7d6e4 fix(i18n): lint 2025-09-14 01:58:39 +05:30
Jayash Tripathy d2fda49914 feat(i18n): Introduced scripts for managing translations, including checking for missing translations. 2025-09-14 01:56:21 +05:30
Jayash Tripathy 3322ee2e6a Merge branch 'preview' of https://github.com/makeplane/plane into preview 2025-09-12 23:22:33 +05:30
Jayash Tripathy 3d1288579a Merge branch 'preview' of https://github.com/makeplane/plane into preview 2025-09-11 17:37:18 +05:30
Jayash Tripathy 3a91dcc3cd ♻️ refactor: add fill in barchart bar stroke 2025-09-11 17:12:55 +05:30
15 changed files with 2234 additions and 122 deletions
+1
View File
@@ -0,0 +1 @@
/scripts/locale-manager/.temp/
+5 -2
View File
@@ -13,6 +13,8 @@
"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",
"generate-types": "tsx scripts/generate-types.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 +24,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:"
}
}
@@ -0,0 +1,59 @@
#!/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();
await manager.updateAllGeneratedTranslations();
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();
+64
View File
@@ -0,0 +1,64 @@
import fs from "fs";
import path from "path";
import { LocaleManager } from "./locale/manager";
import { TranslationRow } from "./locale/types";
async function ensureGeneratedFiles() {
const tempDir = path.join(__dirname, "locale/.temp");
if (!fs.existsSync(tempDir)) {
fs.mkdirSync(tempDir, { recursive: true });
}
const manager = new LocaleManager();
await manager.updateGeneratedTranslations("core");
await manager.updateGeneratedTranslations("translations");
await manager.updateGeneratedTranslations("accessibility");
await manager.updateGeneratedTranslations("editor");
}
async function generateTypes() {
const tempDir = path.join(__dirname, "locale/.temp");
const outputFile = path.join(__dirname, "../src/types/generated-translations.d.ts");
// Ensure generated files exist
await ensureGeneratedFiles();
// Read all generated JSON files
const files = fs.readdirSync(tempDir).filter((file) => file.startsWith("generated-") && file.endsWith(".json"));
let allTranslations: TranslationRow[] = [];
// Combine all translations
files.forEach((file) => {
const content = JSON.parse(fs.readFileSync(path.join(tempDir, file), "utf-8"));
allTranslations = allTranslations.concat(content);
});
// Get all flat keys
const flatKeys = allTranslations.map((entry) => `"${entry.key}"\n`).join(" | ");
// Generate the type definition file content
const typeContent = `// This file is auto-generated. DO NOT EDIT.
// All translation keys as a union type
export type TranslationKeys =\n | ${flatKeys};
// Available languages
export type AvailableLanguages = "${Object.keys(allTranslations[0].translations).join('" | "')}";
`;
// Write the type definition file
fs.writeFileSync(outputFile, typeContent);
console.log(`Generated types at: ${outputFile}`);
}
// Make the main function async
(async () => {
try {
await generateTypes();
} catch (error) {
console.error("Error generating types:", error);
process.exit(1);
}
})();
+11
View File
@@ -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");
/** list of translation file categories */
export const TRANSLATION_FILES: TranslationFile[] = ["translations", "accessibility", "editor", "core"];
/** base locale */
export const BASE_LOCALE: TranslationLocale = "en";
@@ -0,0 +1,42 @@
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<string | null> {
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<void> {
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<boolean> {
try {
await fs.access(filePath);
return true;
} catch {
return false;
}
}
}
@@ -0,0 +1,52 @@
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<string, string> {
const result: Record<string, string> = {};
for (const [key, value] of Object.entries(obj)) {
const newKey = prefix ? `${prefix}.${key}` : key;
if (typeof value === "object" && value !== null) {
Object.assign(result, this.flatten(value as NestedTranslations, newKey));
} else {
result[newKey] = value === "" ? "" : (value as string);
}
}
return result;
}
/**
* 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;
}
}
+194
View File
@@ -0,0 +1,194 @@
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;
}
/**
* 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<TranslationLocale[]> {
const files = await fs.readdir(this.rootPath);
return files.filter((f) => isValidLocaleDirectory(f)) as TranslationLocale[];
}
/**
* Update all the generated translation files in the memory
*/
async updateAllGeneratedTranslations(): Promise<void> {
for (const file of this.translationFiles) {
await this.updateGeneratedTranslations(file);
}
}
/**
* 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<Record<string, string>> {
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<void> {
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<void> {
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<TranslationRow[]> {
const locales = await this.getLocales();
const translations: Record<TranslationLocale, Record<string, string>> = {
en: {},
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<TranslationLocale, TranslationStatus>,
}));
}
/**
* 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<TranslationLocale, string>,
file: TranslationFile
): Promise<void> {
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<void> {
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));
}
}
+34
View File
@@ -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<TranslationLocale, TranslationStatus>;
}
+2 -1
View File
@@ -3,9 +3,10 @@ import { useContext } from "react";
import { TranslationContext } from "../context";
// types
import { ILanguageOption, TLanguage } from "../types";
import { TranslationKeys } from "../types/generated-translations";
export type TTranslationStore = {
t: (key: string, params?: Record<string, unknown>) => string;
t: (key: TranslationKeys, params?: Record<string, unknown>) => string;
currentLocale: TLanguage;
changeLanguage: (lng: TLanguage) => void;
languages: ILanguageOption[];
+4 -3
View File
@@ -8,6 +8,7 @@ import { FALLBACK_LANGUAGE, SUPPORTED_LANGUAGES, LANGUAGE_STORAGE_KEY, ETranslat
import { enCore, locales } from "../locales";
// types
import { TLanguage, ILanguageOption, ITranslations } from "../types";
import { TranslationKeys } from "../types/generated-translations";
/**
* Mobx store class for handling translations and language changes in the application
@@ -183,7 +184,7 @@ export class TranslationStore {
* @param locale - the locale to get the cache key for
* @returns the cache key for the given key and locale
*/
private getCacheKey(key: string, locale: TLanguage): string {
private getCacheKey(key: TranslationKeys, locale: TLanguage): string {
return `${locale}:${key}`;
}
@@ -191,7 +192,7 @@ export class TranslationStore {
* Gets the IntlMessageFormat instance for the given key and locale
* Returns cached instance if available
*/
private getMessageInstance(key: string, locale: TLanguage): IntlMessageFormat | null {
private getMessageInstance(key: TranslationKeys, locale: TLanguage): IntlMessageFormat | null {
const cacheKey = this.getCacheKey(key, locale);
// Check if the cache already has the key
@@ -221,7 +222,7 @@ export class TranslationStore {
* @param params - The params to format the translation with
* @returns The translated string
*/
t(key: string, params?: Record<string, unknown>): string {
t(key: TranslationKeys, params?: Record<string, unknown>): string {
try {
// Try current locale
let formatter = this.getMessageInstance(key, this.currentLocale);
File diff suppressed because it is too large Load Diff
+1
View File
@@ -1,2 +1,3 @@
export * from "./language";
export * from "./translation";
export * from "./generated-translations.d";
+1 -1
View File
@@ -5,6 +5,6 @@
"lib": ["esnext", "dom"],
"resolveJsonModule": true
},
"include": ["./src"],
"include": ["./src", "./scripts"],
"exclude": ["dist", "build", "node_modules"]
}
+132 -115
View File
@@ -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: {}