Swap the one outlier (client-interests-tab.tsx) from Vaul Drawer to Sheet side=right so every detail-preview surface uses the same primitive. Document the doctrine: Sheet for side panels on both desktop and mobile; Vaul Drawer reserved for mobile-only bottom-sheet UX (currently just MoreSheet). Closes ui/ux M11. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
46 lines
1.8 KiB
JavaScript
46 lines
1.8 KiB
JavaScript
import nextCoreWebVitals from 'eslint-config-next/core-web-vitals';
|
|
import prettier from 'eslint-config-prettier/flat';
|
|
|
|
const eslintConfig = [
|
|
...nextCoreWebVitals,
|
|
prettier,
|
|
{
|
|
rules: {
|
|
'@typescript-eslint/no-explicit-any': 'error',
|
|
'@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_' }],
|
|
// React Compiler safety rules shipped with eslint-config-next@16 /
|
|
// react-hooks@7. Triage status (2026-05-13 sweep):
|
|
// purity, set-state-in-render, immutability, refs,
|
|
// set-state-in-effect — promoted to error after the cleanup
|
|
// sweep (Wave 3 of the 2026-05-12 audit). All hits migrated to
|
|
// either useQuery, render-phase derivation, key-based remount,
|
|
// or a justified eslint-disable for canonical setState-on-
|
|
// subscription patterns. New regressions block CI.
|
|
// incompatible-library — informational only ("Compiler
|
|
// skipped this file because of a non-Compiler-safe import").
|
|
// No action needed; silenced to keep `pnpm lint` output
|
|
// actionable.
|
|
'react-hooks/purity': 'error',
|
|
'react-hooks/set-state-in-render': 'error',
|
|
'react-hooks/immutability': 'error',
|
|
'react-hooks/refs': 'error',
|
|
'react-hooks/set-state-in-effect': 'error',
|
|
'react-hooks/incompatible-library': 'off',
|
|
},
|
|
},
|
|
{
|
|
// Tests assert response shape via expect() — narrowing every
|
|
// `res.json()` to a structural type adds boilerplate without catching
|
|
// bugs. Allow `any` casts at JSON boundaries in test files.
|
|
files: ['tests/**/*.ts', 'tests/**/*.tsx'],
|
|
rules: {
|
|
'@typescript-eslint/no-explicit-any': 'off',
|
|
},
|
|
},
|
|
{
|
|
ignores: ['client-portal/**', 'next-env.d.ts'],
|
|
},
|
|
];
|
|
|
|
export default eslintConfig;
|