{
  'root': true,
  'env': {'browser': true, 'node': true, 'es2020': true},
  'parser': '@babel/eslint-parser',
  'plugins':
    ['flowtype', '@babel', 'react', 'import', 'unused-imports', 'react-hooks','simple-import-sort'],
  'settings': {'react': {'version': 'detect'}},
  'globals': {'Iterator': 'readonly'},
  'rules':
    {
      'arrow-body-style': ['warn', 'as-needed'],
      'curly': ['warn', 'all'],
      comma-spacing: ["warn", { "before": false, "after": true }],
      'eol-last': 'warn',
      'eqeqeq': ['error', 'always', {'null': 'ignore'}],
      indent: ["error", 2],
      'max-params': ['warn', {'max': 4}],
      'no-alert': 'warn',
      'no-console': ['error', {allow: ['warn', 'error']}],

      'no-const-assign': 'error',
      'no-dupe-args': 'error',
      'no-dupe-keys': 'error',
      'no-duplicate-case': 'error',
      'no-dupe-class-members': 'error',
      'no-empty-function': 'warn',
      'no-empty-pattern': 'error',
      'no-eval': 'error',
      'no-extend-native': 'error',
      'no-extra-boolean-cast': 'error',
      'no-fallthrough': 'error',
      'no-floating-decimal': 'error',
      'no-inner-declarations': 'error',
      'no-loop-func': 'error',
      'no-mixed-requires': 'off',
      'no-nested-ternary': 'off',
      'no-new-symbol': 'error',
      'no-redeclare': 'error',
      'no-restricted-globals': ['error', 'event', 'location'],
      'no-sparse-arrays': 'error',
      'no-tabs': 'warn',
      'no-this-before-super': 'error',
      'no-trailing-spaces': 'warn',
      'no-underscore-dangle': 'off',
      'no-unmodified-loop-condition': 'warn',
      'no-undef': ['error', {'typeof': true}],
      'no-unreachable': 'warn',
      'unused-imports/no-unused-imports': 'error',
      'unused-imports/no-unused-vars':
        [
          'warn',
          {
            'vars': 'all',
            'varsIgnorePattern': '^_',
            'args': 'after-used',
            'argsIgnorePattern': '^_',
          },
        ],
      'no-useless-constructor': 'error',
      'no-var': 'error',
      'no-with': 'error',
      'object-shorthand': 'error',
      'prefer-arrow-callback': 'error',
      'prefer-const': 'warn',
      'prefer-spread': 'warn',
      'quotes': ['warn', 'single', {'allowTemplateLiterals': true}],
      'require-yield': 'error',
      'rest-spread-spacing': 'error',
      'strict': ['warn', 'never'],

      'import/newline-after-import': ['warn', {'count': 2}],
      'import/no-duplicates': 'error',

      'react/jsx-no-undef': 'error',
      'react/jsx-pascal-case': 'warn',
      'react/jsx-uses-react': 'error',
      'react/jsx-uses-vars': 'error',
      'react/no-array-index-key': 'warn',
      'react/no-deprecated': 'error',
      'react/no-direct-mutation-state': 'error',
      'react/no-string-refs': 'warn',
      'react/prop-types': 'off',
      'react/react-in-jsx-scope': 'error',

      'flowtype/define-flow-type': 'error',
      'flowtype/delimiter-dangle': ['warn', 'always-multiline'],
      'flowtype/no-existential-type': 'warn',
      'flowtype/no-weak-types': 'warn',
      'flowtype/semi': ['warn', 'always'],

      'react-hooks/rules-of-hooks': 'error',
      "simple-import-sort/imports": "error",
      "simple-import-sort/exports": "error"
    },
  'overrides':
    [
      {
        'files': ['**/__tests__/*.js', '**/__tests__/*.jsx'],
        'env': {'jest': true},
        'plugins': ['jest'],
      },
      {'files': ['**/*.stories.jsx'], 'rules': {'semi': ['warn', 'always']}},
      {
        "files": ["*.js", "*.jsx", "*.ts", "*.tsx"],
        "rules": {
          "simple-import-sort/imports": [
            "error",
            {
              "groups": [
                ["^react", "^@?\\w"],
                ["^(@|components)(/.*|$)"],
                ["^\\u0000"],
                ["^\\.\\.(?!/?$)", "^\\.\\./?$"],
                ["^\\./(?=.*/)(?!/?$)", "^\\.(?!/?$)", "^\\./?$"],
                ["^.+\\.?(css)$"]
              ]
            }
          ]
        }
      }
    ],
}
