{
  "compilerOptions": {
    // Language Options
    "target": "ES2021",
    "lib": ["ES2021", "DOM", "DOM.Iterable", "WebWorker"],
    "experimentalDecorators": true,
    "useDefineForClassFields": false,
    // Modules
    "module": "ESNext",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    // Babel handles transpiling and no need for declaration files
    "noEmit": true,
    // Caching
    "incremental": true,
    "tsBuildInfoFile": "node_modules/.cache/typescript/.tsbuildinfo",
    // Type checking options
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "noImplicitReturns": true,
    "noFallthroughCasesInSwitch": true,
    "strict": true,
    "noImplicitAny": false,
    // Do not check type declaration files
    "skipLibCheck": true,
    // Interop with CommonJS and other tools
    "esModuleInterop": true,
    "isolatedModules": true,
    "plugins": [
      {
        "name": "ts-lit-plugin",
        "strict": true,
        "rules": {
          // Custom elements
          "no-unknown-tag-name": "error",
          "no-missing-import": "error",
          "no-missing-element-type-definition": "error",
          // Binding names
          "no-unknown-attribute": "off",
          "no-legacy-attribute": "error",
          // Binding types
          "no-incompatible-type-binding": "warning",
          // LitElement
          "no-property-visibility-mismatch": "error",
          // CSS
          "no-invalid-css": "off" // warning does not work
        },
        "globalTags": ["google-cast-launcher"]
      }
    ],
    "paths": {
      "lit/static-html": ["./node_modules/lit/static-html.js"],
      "lit/decorators": ["./node_modules/lit/decorators.js"],
      "lit/directive": ["./node_modules/lit/directive.js"],
      "lit/directives/until": ["./node_modules/lit/directives/until.js"],
      "lit/directives/class-map": [
        "./node_modules/lit/directives/class-map.js"
      ],
      "lit/directives/style-map": [
        "./node_modules/lit/directives/style-map.js"
      ],
      "lit/directives/if-defined": [
        "./node_modules/lit/directives/if-defined.js"
      ],
      "lit/directives/guard": ["./node_modules/lit/directives/guard.js"],
      "lit/directives/cache": ["./node_modules/lit/directives/cache.js"],
      "lit/directives/repeat": ["./node_modules/lit/directives/repeat.js"],
      "lit/directives/live": ["./node_modules/lit/directives/live.js"],
      "lit/directives/keyed": ["./node_modules/lit/directives/keyed.js"],
      "lit/polyfill-support": ["./node_modules/lit/polyfill-support.js"],
      "@lit-labs/virtualizer/layouts/grid": [
        "./node_modules/@lit-labs/virtualizer/layouts/grid.js"
      ],
      "@lit-labs/virtualizer/polyfills/resize-observer-polyfill/ResizeObserver": [
        "./node_modules/@lit-labs/virtualizer/polyfills/resize-observer-polyfill/ResizeObserver.js"
      ],
      "@lit-labs/observers/resize-controller": [
        "./node_modules/@lit-labs/observers/resize-controller.js"
      ]
    }
  }
}
