import js from '@eslint/js'; import react from 'eslint-plugin-react'; import reactHooks from 'eslint-plugin-react-hooks'; import jsxA11y from 'eslint-plugin-jsx-a11y'; import prettier from 'eslint-config-prettier'; export default [ // Ignore patterns { ignores: [ '**/node_modules/**', '**/build/**', '**/dist/**', '**/coverage/**', '**/*.scss', '**/*.css', '**/*.json', ], }, // Base config for all JS/JSX files { files: ['**/*.{js,jsx,mjs}'], languageOptions: { ecmaVersion: 2024, sourceType: 'module', parserOptions: { ecmaFeatures: { jsx: true } }, globals: { // Browser globals window: 'readonly', document: 'readonly', navigator: 'readonly', console: 'readonly', localStorage: 'readonly', fetch: 'readonly', setTimeout: 'readonly', setInterval: 'readonly', clearInterval: 'readonly', clearTimeout: 'readonly', Image: 'readonly', FileReader: 'readonly', Blob: 'readonly', URL: 'readonly', TextEncoder: 'readonly', TextDecoder: 'readonly', DOMParser: 'readonly', CustomEvent: 'readonly', AbortController: 'readonly', btoa: 'readonly', atob: 'readonly', // Node globals for scripts process: 'readonly', __dirname: 'readonly', __filename: 'readonly', module: 'readonly', require: 'readonly', }, }, plugins: { react, 'react-hooks': reactHooks, 'jsx-a11y': jsxA11y }, settings: { react: { version: 'detect' } }, rules: { ...js.configs.recommended.rules, ...react.configs.recommended.rules, ...react.configs['jsx-runtime'].rules, ...reactHooks.configs.recommended.rules, // React specific rules 'react/prop-types': 'off', // Using PropTypes is optional 'react/react-in-jsx-scope': 'off', // Not needed with React 17+ 'react/jsx-uses-react': 'off', // Not needed with React 17+ // General rules 'no-unused-vars': ['warn', { argsIgnorePattern: '^_' }], 'no-console': ['warn', { allow: ['warn', 'error'] }], // Modern JS 'prefer-const': 'warn', 'no-var': 'error', }, }, // Prettier config (must be last to override other formatting rules) prettier, ];