import config, { css, vue3, vitest } from 'eslint-config-it4c' import jsdocPlugin from 'eslint-plugin-jsdoc' import playwrightPlugin from 'eslint-plugin-playwright' import storybookPlugin from 'eslint-plugin-storybook' import vuejsAccessibilityPlugin from 'eslint-plugin-vuejs-accessibility' import { tailwind4 } from 'tailwind-csstree' export default [ { ignores: [ 'dist/', 'coverage/', 'storybook-static/', '**/node_modules/', 'examples/', 'test-results/', 'playwright-report/', ], }, ...config, ...vue3, ...vitest, { // Playwright visual tests files: ['**/*.visual.spec.ts'], ...playwrightPlugin.configs['flat/recommended'], }, // Storybook files // eslint-disable-next-line import-x/no-named-as-default-member -- flat config access pattern ...storybookPlugin.configs['flat/recommended'], { // Vue components - accessibility and JSDoc files: ['src/components/**/*.vue'], plugins: { jsdoc: jsdocPlugin, 'vuejs-accessibility': vuejsAccessibilityPlugin, }, rules: { // Require JSDoc comments on Props interface properties 'jsdoc/require-jsdoc': [ 'error', { contexts: ['TSPropertySignature'], require: { ClassDeclaration: false, ClassExpression: false, ArrowFunctionExpression: false, FunctionDeclaration: false, FunctionExpression: false, MethodDefinition: false, }, }, ], // Accessibility rules ...vuejsAccessibilityPlugin.configs.recommended.rules, }, }, { // Allow .svg?icon imports (custom Vite plugin) files: ['src/**/icons/index.ts'], rules: { 'n/file-extension-in-import': 'off', }, }, ...css, { // Extend CSS config with Tailwind v4 syntax support files: ['**/*.css'], languageOptions: { customSyntax: tailwind4, }, }, ]