diff --git a/.circleci/config.yml b/.circleci/config.yml index 90303124f..c3c7099bc 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -62,9 +62,6 @@ jobs: - run: name: TypeScript command: pnpm typescript - - run: - name: JSON - command: pnpm code-infra jsonlint --silent test_static: <<: *default-job steps: diff --git a/eslint.config.mjs b/eslint.config.mjs index 5b87289ca..b767a8c47 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -1,6 +1,4 @@ import { defineConfig } from 'eslint/config'; -import * as path from 'node:path'; -import { fileURLToPath } from 'node:url'; import { createBaseConfig, createTestConfig, @@ -9,15 +7,10 @@ import { } from '@mui/internal-code-infra/eslint'; import nPlugin from 'eslint-plugin-n'; -const filename = fileURLToPath(import.meta.url); -const dirname = path.dirname(filename); - export default defineConfig( + createBaseConfig({ baseDirectory: import.meta.dirname }), { - name: 'Base config', - extends: createBaseConfig({ - baseDirectory: dirname, - }), + files: [`**/*.${EXTENSION_TS}`], plugins: { n: nPlugin, }, @@ -42,7 +35,7 @@ export default defineConfig( { files: [ // matching the pattern of the test runner - `**/*${EXTENSION_TEST_FILE}`, + `**/*.${EXTENSION_TEST_FILE}`, ], extends: createTestConfig(), }, @@ -59,7 +52,7 @@ export default defineConfig( }, }, { - files: ['packages/bundle-size-checker/**/*'], + files: [`packages/bundle-size-checker/**/*.${EXTENSION_TS}`], rules: { // Allow .js file extensions in import statements for ESM compatibility 'import/extensions': [ diff --git a/packages/code-infra/package.json b/packages/code-infra/package.json index 0e240f54a..c62c10823 100644 --- a/packages/code-infra/package.json +++ b/packages/code-infra/package.json @@ -38,6 +38,7 @@ "@babel/preset-typescript": "^7.27.1", "@eslint/compat": "^1.3.2", "@eslint/js": "^9.35.0", + "@eslint/json": "^0.13.2", "@mui/internal-babel-plugin-display-name": "workspace:*", "@mui/internal-babel-plugin-minify-errors": "workspace:*", "@mui/internal-babel-plugin-resolve-imports": "workspace:*", diff --git a/packages/code-infra/src/cli/cmdJsonLint.mjs b/packages/code-infra/src/cli/cmdJsonLint.mjs deleted file mode 100644 index 49dcae8cd..000000000 --- a/packages/code-infra/src/cli/cmdJsonLint.mjs +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env node - -import chalk from 'chalk'; -import fs from 'node:fs/promises'; -import { globby } from 'globby'; -import path from 'node:path'; -import { mapConcurrently } from '../utils/build.mjs'; - -/** - * @typedef {Object} Args - * @property {boolean} [silent] Run in silent mode without logging - */ - -/** - * @param {string} message - * @returns {string} - */ -const passMessage = (message) => `✓ ${chalk.gray(message)}`; -/** - * @param {string} message - * @returns {string} - */ -const failMessage = (message) => `❌ ${chalk.whiteBright(message)}`; - -export default /** @type {import('yargs').CommandModule<{}, Args>} */ ({ - command: 'jsonlint', - describe: 'Lint JSON files', - builder: (yargs) => { - return yargs.option('silent', { - type: 'boolean', - default: false, - description: "Don't log file names.", - }); - }, - handler: async (args) => { - const cwd = process.cwd(); - - const filenames = await globby('**/*.json', { - cwd, - gitignore: true, - ignoreFiles: ['.lintignore'], - ignore: ['**/tsconfig*.json'], - followSymbolicLinks: false, - }); - - let passed = true; - - await mapConcurrently( - filenames, - async (filename) => { - const content = await fs.readFile(path.join(cwd, filename), { encoding: 'utf8' }); - try { - JSON.parse(content); - if (!args.silent) { - // eslint-disable-next-line no-console - console.log(passMessage(filename)); - } - } catch (error) { - passed = false; - console.error(failMessage(`Error parsing ${filename}:\n\n${String(error)}`)); - } - }, - 20, - ); - if (!passed) { - throw new Error('❌ At least one file did not pass. Check the console output'); - } - }, -}); diff --git a/packages/code-infra/src/cli/index.mjs b/packages/code-infra/src/cli/index.mjs index f41d62802..31ffee333 100644 --- a/packages/code-infra/src/cli/index.mjs +++ b/packages/code-infra/src/cli/index.mjs @@ -6,7 +6,6 @@ import cmdArgosPush from './cmdArgosPush.mjs'; import cmdBuild from './cmdBuild.mjs'; import cmdCopyFiles from './cmdCopyFiles.mjs'; import cmdExtractErrorCodes from './cmdExtractErrorCodes.mjs'; -import cmdJsonLint from './cmdJsonLint.mjs'; import cmdListWorkspaces from './cmdListWorkspaces.mjs'; import cmdPublish from './cmdPublish.mjs'; import cmdPublishCanary from './cmdPublishCanary.mjs'; @@ -21,7 +20,6 @@ yargs() .command(cmdBuild) .command(cmdCopyFiles) .command(cmdExtractErrorCodes) - .command(cmdJsonLint) .command(cmdListWorkspaces) .command(cmdPublish) .command(cmdPublishCanary) diff --git a/packages/code-infra/src/eslint/baseConfig.mjs b/packages/code-infra/src/eslint/baseConfig.mjs index c1be52319..0be394ea0 100644 --- a/packages/code-infra/src/eslint/baseConfig.mjs +++ b/packages/code-infra/src/eslint/baseConfig.mjs @@ -8,94 +8,88 @@ import reactPlugin from 'eslint-plugin-react'; import { configs as reactCompilerPluginConfigs } from 'eslint-plugin-react-compiler'; import { configs as reactHookConfigs } from 'eslint-plugin-react-hooks'; import globals from 'globals'; -import * as fs from 'node:fs'; import * as path from 'node:path'; import * as tseslint from 'typescript-eslint'; - import { createCoreConfig } from './material-ui/config.mjs'; import muiPlugin from './material-ui/index.mjs'; +import { EXTENSION_TS } from './extensions.mjs'; +import { createJsonConfig } from './jsonConfig.mjs'; /** * @param {Object} [params] * @param {boolean} [params.enableReactCompiler] - Whether the config is for spec files. - * @param {string} params.baseDirectory - The base directory for the configuration. + * @param {string} [params.baseDirectory] - The base directory for the configuration. * @returns {import('eslint').Linter.Config[]} */ -export function createBaseConfig( - { enableReactCompiler = false, baseDirectory } = { baseDirectory: process.cwd() }, -) { - const ignoreRules = /** @type {import('@eslint/compat').FlatConfig[]} */ ( - // All repos should use .lintignore going forward. - // .eslintignore is for backward compatibility. Should be removed in future. - ['.gitignore', '.lintignore', '.eslintignore'] - .map((file) => { - if (fs.existsSync(`${baseDirectory}/${file}`)) { - return includeIgnoreFile(path.join(baseDirectory, file), `Ignore rules from ${file}`); - } - return null; - }) - .filter(Boolean) - ); - - return defineConfig( - ...ignoreRules, - eslintJs.configs.recommended, - importPlugin.flatConfigs.recommended, - importPlugin.flatConfigs.react, - jsxA11yPlugin.flatConfigs.recommended, - reactPlugin.configs.flat.recommended, - reactHookConfigs.recommended, - tseslint.configs.recommended, - importPlugin.flatConfigs.typescript, - enableReactCompiler ? reactCompilerPluginConfigs.recommended : {}, +export function createBaseConfig({ + enableReactCompiler = false, + baseDirectory = process.cwd(), +} = {}) { + return defineConfig([ + includeIgnoreFile(path.join(baseDirectory, '.lintignore'), `Ignore rules from .lintignore`), + createJsonConfig(), prettier, { - name: 'typescript-eslint-parser', - languageOptions: { - ecmaVersion: 7, - globals: { - ...globals.es2020, - ...globals.browser, - ...globals.node, + files: [`**/*.${EXTENSION_TS}`], + extends: defineConfig([ + eslintJs.configs.recommended, + importPlugin.flatConfigs.recommended, + importPlugin.flatConfigs.react, + jsxA11yPlugin.flatConfigs.recommended, + reactPlugin.configs.flat.recommended, + reactHookConfigs.recommended, + tseslint.configs.recommended, + importPlugin.flatConfigs.typescript, + enableReactCompiler ? reactCompilerPluginConfigs.recommended : {}, + { + name: 'typescript-eslint-parser', + languageOptions: { + ecmaVersion: 7, + globals: { + ...globals.es2020, + ...globals.browser, + ...globals.node, + }, + }, + plugins: { + 'material-ui': muiPlugin, + }, + extends: createCoreConfig({ reactCompilerEnabled: enableReactCompiler }), }, - }, - plugins: { - 'material-ui': muiPlugin, - }, - extends: createCoreConfig({ reactCompilerEnabled: enableReactCompiler }), - }, - { - files: ['**/*.mjs'], - rules: { - 'import/extensions': [ - 'error', - 'ignorePackages', - { - js: 'always', - mjs: 'always', + { + files: ['**/*.mjs'], + rules: { + 'import/extensions': [ + 'error', + 'ignorePackages', + { + js: 'always', + mjs: 'always', + }, + ], }, - ], - }, - }, - // Lint rule to disallow usage of typescript namespaces.We've seen at least two problems with them: - // * Creates non-portable types in base ui. [1] - // * This pattern [2] leads to broken bundling in codesandbox [3]. - // Gauging the ecosystem it also looks like support for namespaces in tooling is poor and tends to - // be treated as a deprecated feature. - // [1] https://github.com/mui/base-ui/pull/2324 - // [2] https://github.com/mui/mui-x/blob/1cf853ed45cf301211ece1c0ca21981ea208edfb/packages/x-virtualizer/src/models/core.ts#L4-L10 - // [3] https://codesandbox.io/embed/kgylpd?module=/src/Demo.tsx&fontsize=12 - { - rules: { - '@typescript-eslint/no-namespace': 'error', - }, - }, - // Part of the migration away from airbnb config. Turned of initially. - { - rules: { - '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/no-unsafe-function-type': 'off', - '@typescript-eslint/no-empty-object-type': 'off', - }, + }, + // Lint rule to disallow usage of typescript namespaces.We've seen at least two problems with them: + // * Creates non-portable types in base ui. [1] + // * This pattern [2] leads to broken bundling in codesandbox [3]. + // Gauging the ecosystem it also looks like support for namespaces in tooling is poor and tends to + // be treated as a deprecated feature. + // [1] https://github.com/mui/base-ui/pull/2324 + // [2] https://github.com/mui/mui-x/blob/1cf853ed45cf301211ece1c0ca21981ea208edfb/packages/x-virtualizer/src/models/core.ts#L4-L10 + // [3] https://codesandbox.io/embed/kgylpd?module=/src/Demo.tsx&fontsize=12 + { + rules: { + '@typescript-eslint/no-namespace': 'error', + }, + }, + // Part of the migration away from airbnb config. Turned of initially. + { + rules: { + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-unsafe-function-type': 'off', + '@typescript-eslint/no-empty-object-type': 'off', + }, + }, + ]), }, - ); + ]); } diff --git a/packages/code-infra/src/eslint/extensions.mjs b/packages/code-infra/src/eslint/extensions.mjs index cdb2ffe03..67444fe6b 100644 --- a/packages/code-infra/src/eslint/extensions.mjs +++ b/packages/code-infra/src/eslint/extensions.mjs @@ -4,5 +4,5 @@ export const EXTENSION_TS = '?(c|m)[jt]s?(x)'; export const EXTENSION_TS_NO_MODULE = '[jt]s?(x)'; export const EXTENSION_TS_ONLY = '?(c|m)ts?(x)'; export const EXTENSION_TS_ONLY_NO_MODULE = 'ts?(x)'; -export const EXTENSION_DTS = `.d.${EXTENSION_TS_ONLY}`; -export const EXTENSION_TEST_FILE = `.test.${EXTENSION_TS}`; +export const EXTENSION_DTS = `d.${EXTENSION_TS_ONLY}`; +export const EXTENSION_TEST_FILE = `test.${EXTENSION_TS}`; diff --git a/packages/code-infra/src/eslint/jsonConfig.mjs b/packages/code-infra/src/eslint/jsonConfig.mjs new file mode 100644 index 000000000..e407f67ca --- /dev/null +++ b/packages/code-infra/src/eslint/jsonConfig.mjs @@ -0,0 +1,34 @@ +import { defineConfig } from 'eslint/config'; +import json from '@eslint/json'; + +/** + * @returns {import('eslint').Linter.Config[]} + */ +export function createJsonConfig() { + return defineConfig([ + // lint JSON files + { + files: ['**/*.json'], + ignores: ['package-lock.json'], + plugins: { json }, + language: 'json/json', + extends: [json.configs.recommended], + }, + + // lint JSONC files + { + files: ['**/*.jsonc', '**/tsconfig.json', '**/tsconfig.*.json', '.vscode/**/*.json'], + plugins: { json }, + language: 'json/jsonc', + extends: [json.configs.recommended], + }, + + // lint JSON5 files + { + files: ['**/*.json5'], + plugins: { json }, + language: 'json/json5', + extends: [json.configs.recommended], + }, + ]); +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a7d776a7d..ed1d5023f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -103,7 +103,7 @@ importers: version: 7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@mui/x-charts': specifier: ^8.11.3 - version: 8.11.3(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@mui/material@7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mui/system@7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + version: 8.12.0(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@mui/material@7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mui/system@7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@netlify/functions': specifier: ^4.2.5 version: 4.2.5(encoding@0.1.13)(rollup@4.50.1) @@ -182,7 +182,7 @@ importers: version: 7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1) '@mui/x-charts': specifier: ^8.11.3 - version: 8.11.3(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@mui/material@7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mui/system@7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + version: 8.12.0(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@mui/material@7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mui/system@7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@octokit/core': specifier: ^7.0.4 version: 7.0.4 @@ -383,6 +383,9 @@ importers: '@eslint/js': specifier: ^9.35.0 version: 9.35.0 + '@eslint/json': + specifier: ^0.13.2 + version: 0.13.2 '@mui/internal-babel-plugin-display-name': specifier: workspace:* version: link:../babel-plugin-display-name @@ -571,7 +574,7 @@ importers: version: 1.0.0-beta.3(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@mui/x-charts-pro': specifier: latest - version: 8.11.3(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@mui/material@7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mui/system@7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + version: 8.12.0(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@mui/material@7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mui/system@7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) radix-ui: specifier: ^1.4.2 version: 1.4.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) @@ -2054,6 +2057,10 @@ packages: resolution: {integrity: sha512-30iXE9whjlILfWobBkNerJo+TXYsgVM5ERQwMcMKCHckHflCmf7wXDAHlARoWnh0s1U72WqlbeyE7iAcCzuCPw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/json@0.13.2': + resolution: {integrity: sha512-yWLyRE18rHgHXhWigRpiyv1LDPkvWtC6oa7QHXW7YdP6gosJoq7BiLZW2yCs9U7zN7X4U3ZeOJjepA10XAOIMw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/object-schema@2.1.6': resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2155,6 +2162,10 @@ packages: resolution: {integrity: sha512-RE815I4arJFtt+FVeU1Tgp9/Xvecacji8w/V6XtXsWWH/wz/eNkNbhb+ny/+PlVZjV0rxQpRSQKNKE3lcktHEA==} engines: {node: '>=10.10.0'} + '@humanwhocodes/momoa@3.3.9': + resolution: {integrity: sha512-LHw6Op4bJb3/3KZgOgwflJx5zY9XOy0NU1NuyUFKGdTwHYmP+PbnQGCYQJ8NVNlulLfQish34b0VuUlLYP3AXA==} + engines: {node: '>=18'} + '@humanwhocodes/retry@0.3.1': resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} engines: {node: '>=18.18'} @@ -2616,8 +2627,8 @@ packages: '@types/react': optional: true - '@mui/x-charts-pro@8.11.3': - resolution: {integrity: sha512-7XTmXj0+NN8uRqBfQoy/tVf25L2mTmYoX/CXDpYAPdRjopM7Npw4XWmZD/ENEmhT2/KAX32yXehgCYlCL/Z6nw==} + '@mui/x-charts-pro@8.12.0': + resolution: {integrity: sha512-h1AzALzlhBFHmMKrLph/Ild8yt8HcdSs8BpXwJ1VNR1sQHAE3Q461v5cPPVwmR7gfM28mtfTZW/hae310GvinQ==} engines: {node: '>=14.0.0'} peerDependencies: '@emotion/react': ^11.9.0 @@ -2635,8 +2646,8 @@ packages: '@mui/x-charts-vendor@7.20.0': resolution: {integrity: sha512-pzlh7z/7KKs5o0Kk0oPcB+sY0+Dg7Q7RzqQowDQjpy5Slz6qqGsgOB5YUzn0L+2yRmvASc4Pe0914Ao3tMBogg==} - '@mui/x-charts-vendor@8.11.3': - resolution: {integrity: sha512-1L0haSmoiPR2Ez2cCImCUXOsvNVORTPGQy6XPZEyY2WHkat9DYVsTPIQsOZtquqJZkftET0mF/tbwDDf6hNhFg==} + '@mui/x-charts-vendor@8.12.0': + resolution: {integrity: sha512-QkJQNgbaZ/RX4qlXuDd3iQVqtDrBOB4CihJYB7SkFjh+rg4e3AwNDWsJpEX1IivE0OUmwU7aQBmvwHheKlzBLw==} '@mui/x-charts@7.27.1': resolution: {integrity: sha512-9z7fopitKjazY+p+sI2Z0zpip5zq3GYBC0hDuzxFUMvH582/FX1ZP6g1Wub0oetQReIMciL+rqU4agmRucvanw==} @@ -2654,8 +2665,8 @@ packages: '@emotion/styled': optional: true - '@mui/x-charts@8.11.3': - resolution: {integrity: sha512-hKVogGeRXIM7wt37TljyTLfTfeF3dHsdjN8B4R1IHMQFp+rH3bRlrz8xJOgS+67JxzELRbcIR5x7pm5woLEv9g==} + '@mui/x-charts@8.12.0': + resolution: {integrity: sha512-Ckzt/zTa0P9bnTJFBpsgFTrWQQb9qwUGebABjibTfoX9/PiErQmGd1e22P2QDTfDCumRDEM84Y4p2qepEzyuiQ==} engines: {node: '>=14.0.0'} peerDependencies: '@emotion/react': ^11.9.0 @@ -2792,8 +2803,8 @@ packages: moment-jalaali: optional: true - '@mui/x-internal-gestures@0.2.6': - resolution: {integrity: sha512-IQi/3la+LkiPQHSYiQRJHA/DT1z6IC4Wyogbqn2/8G8AaB6BbpAS6KY1uudGNkobWtiG7NKIhZ/oNJI+cK9pbA==} + '@mui/x-internal-gestures@0.3.0': + resolution: {integrity: sha512-oqUHKgNX8ctNG9qTAzHqw62v3q5JpM+DTFScUPv93cT9EjyjpnkxOipJXDA4QQ+wZpnuOBOh79Vf+TE7eLOuZA==} '@mui/x-internals@7.26.0': resolution: {integrity: sha512-VxTCYQcZ02d3190pdvys2TDg9pgbvewAVakEopiOgReKAUhLdRlgGJHcOA/eAuGLyK1YIo26A6Ow6ZKlSRLwMg==} @@ -2801,8 +2812,8 @@ packages: peerDependencies: react: ^17.0.0 || ^18.0.0 || ^19.0.0 - '@mui/x-internals@8.11.3': - resolution: {integrity: sha512-Fmp4Op+nNSqsWn2Jwv9yA8WXi3Wem9jmgdUplvMK6JZAt7iA0ZdzGltCcHrdxOcK1Nu/2F7H8KOZuBzpy1lspw==} + '@mui/x-internals@8.12.0': + resolution: {integrity: sha512-KCZgFHwuPg0v8I2gpjeC6k3eDRXPPX8RIGSNDXe8zSZ8dAw+p6Q2pzT9kKvctqCXSFK8ct/5YQwqx8Quhs8Ndg==} engines: {node: '>=14.0.0'} peerDependencies: react: ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -2813,14 +2824,14 @@ packages: peerDependencies: react: ^17.0.0 || ^18.0.0 || ^19.0.0 - '@mui/x-license@8.11.3': - resolution: {integrity: sha512-fERJaQQdfJVedYvb2TTUeahdt30bsGSxjddwfO4m6d+0dgeDn56iS5azj4Qfhb9/sfrmmZSukNcg3DS0OH4nVA==} + '@mui/x-license@8.12.0': + resolution: {integrity: sha512-mDj+jsP0nJqHTi2mpAuWxpA6vCHf6bylMuycR0UxwT1aKH8hDfUyx7l7xKVLQq047XM+ehLNUWagVZzsByoiUA==} engines: {node: '>=14.0.0'} peerDependencies: react: ^17.0.0 || ^18.0.0 || ^19.0.0 - '@mui/x-telemetry@8.11.3': - resolution: {integrity: sha512-m30r+qZe09bV0fJaq3CSwCAyHErGUZOPh1OiECHBvXmY6HEhF3PqumtZH8Jc1GFrUcczC54bTGod9jPe6PhWlA==} + '@mui/x-telemetry@8.12.0': + resolution: {integrity: sha512-K7gEzgUy7+1jttQY9HhHRTbteGC2QjAiSTkONs0t2hSmZ+LXuNdJDoBZcp9yplAjOEEr/qhRyrp01uECFmC03A==} engines: {node: '>=14.0.0'} '@mui/x-tree-view@7.26.0': @@ -14123,6 +14134,13 @@ snapshots: '@eslint/js@9.35.0': {} + '@eslint/json@0.13.2': + dependencies: + '@eslint/core': 0.15.2 + '@eslint/plugin-kit': 0.3.5 + '@humanwhocodes/momoa': 3.3.9 + natural-compare: 1.4.0 + '@eslint/object-schema@2.1.6': {} '@eslint/plugin-kit@0.3.5': @@ -14251,6 +14269,8 @@ snapshots: '@humanwhocodes/momoa@2.0.4': {} + '@humanwhocodes/momoa@3.3.9': {} + '@humanwhocodes/retry@0.3.1': {} '@humanwhocodes/retry@0.4.3': {} @@ -14817,17 +14837,17 @@ snapshots: optionalDependencies: '@types/react': 19.1.13 - '@mui/x-charts-pro@8.11.3(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@mui/material@7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mui/system@7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@mui/x-charts-pro@8.12.0(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@mui/material@7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mui/system@7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@babel/runtime': 7.28.4 '@mui/material': 7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@mui/system': 7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1) '@mui/utils': 7.3.2(@types/react@19.1.13)(react@19.1.1) - '@mui/x-charts': 8.11.3(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@mui/material@7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mui/system@7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@mui/x-charts-vendor': 8.11.3 - '@mui/x-internal-gestures': 0.2.6 - '@mui/x-internals': 8.11.3(@types/react@19.1.13)(react@19.1.1) - '@mui/x-license': 8.11.3(@types/react@19.1.13)(react@19.1.1) + '@mui/x-charts': 8.12.0(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@mui/material@7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mui/system@7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@mui/x-charts-vendor': 8.12.0 + '@mui/x-internal-gestures': 0.3.0 + '@mui/x-internals': 8.12.0(@types/react@19.1.13)(react@19.1.1) + '@mui/x-license': 8.12.0(@types/react@19.1.13)(react@19.1.1) clsx: 2.1.1 prop-types: 15.8.1 react: 19.1.1 @@ -14857,7 +14877,7 @@ snapshots: delaunator: 5.0.1 robust-predicates: 3.0.2 - '@mui/x-charts-vendor@8.11.3': + '@mui/x-charts-vendor@8.12.0': dependencies: '@babel/runtime': 7.28.4 '@types/d3-color': 3.1.3 @@ -14899,15 +14919,15 @@ snapshots: transitivePeerDependencies: - '@types/react' - '@mui/x-charts@8.11.3(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@mui/material@7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mui/system@7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@mui/x-charts@8.12.0(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@mui/material@7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mui/system@7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@babel/runtime': 7.28.4 '@mui/material': 7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@mui/system': 7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1) '@mui/utils': 7.3.2(@types/react@19.1.13)(react@19.1.1) - '@mui/x-charts-vendor': 8.11.3 - '@mui/x-internal-gestures': 0.2.6 - '@mui/x-internals': 8.11.3(@types/react@19.1.13)(react@19.1.1) + '@mui/x-charts-vendor': 8.12.0 + '@mui/x-internal-gestures': 0.3.0 + '@mui/x-internals': 8.12.0(@types/react@19.1.13)(react@19.1.1) bezier-easing: 2.1.0 clsx: 2.1.1 prop-types: 15.8.1 @@ -14921,15 +14941,15 @@ snapshots: transitivePeerDependencies: - '@types/react' - '@mui/x-charts@8.11.3(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@mui/material@7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mui/system@7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@mui/x-charts@8.12.0(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@mui/material@7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mui/system@7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@babel/runtime': 7.28.4 '@mui/material': 7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@mui/system': 7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1) '@mui/utils': 7.3.2(@types/react@19.1.13)(react@19.1.1) - '@mui/x-charts-vendor': 8.11.3 - '@mui/x-internal-gestures': 0.2.6 - '@mui/x-internals': 8.11.3(@types/react@19.1.13)(react@19.1.1) + '@mui/x-charts-vendor': 8.12.0 + '@mui/x-internal-gestures': 0.3.0 + '@mui/x-internals': 8.12.0(@types/react@19.1.13)(react@19.1.1) bezier-easing: 2.1.0 clsx: 2.1.1 prop-types: 15.8.1 @@ -15093,7 +15113,7 @@ snapshots: transitivePeerDependencies: - '@types/react' - '@mui/x-internal-gestures@0.2.6': + '@mui/x-internal-gestures@0.3.0': dependencies: '@babel/runtime': 7.28.4 @@ -15105,7 +15125,7 @@ snapshots: transitivePeerDependencies: - '@types/react' - '@mui/x-internals@8.11.3(@types/react@19.1.13)(react@19.1.1)': + '@mui/x-internals@8.12.0(@types/react@19.1.13)(react@19.1.1)': dependencies: '@babel/runtime': 7.28.4 '@mui/utils': 7.3.2(@types/react@19.1.13)(react@19.1.1) @@ -15124,17 +15144,17 @@ snapshots: transitivePeerDependencies: - '@types/react' - '@mui/x-license@8.11.3(@types/react@19.1.13)(react@19.1.1)': + '@mui/x-license@8.12.0(@types/react@19.1.13)(react@19.1.1)': dependencies: '@babel/runtime': 7.28.4 '@mui/utils': 7.3.2(@types/react@19.1.13)(react@19.1.1) - '@mui/x-internals': 8.11.3(@types/react@19.1.13)(react@19.1.1) - '@mui/x-telemetry': 8.11.3 + '@mui/x-internals': 8.12.0(@types/react@19.1.13)(react@19.1.1) + '@mui/x-telemetry': 8.12.0 react: 19.1.1 transitivePeerDependencies: - '@types/react' - '@mui/x-telemetry@8.11.3': + '@mui/x-telemetry@8.12.0': dependencies: '@babel/runtime': 7.28.4 '@fingerprintjs/fingerprintjs': 3.4.2