2025-12-03 21:56:50 +00:00
import js from '@eslint/js' ;
import typescript from '@typescript-eslint/eslint-plugin' ;
import typescriptParser from '@typescript-eslint/parser' ;
import react from 'eslint-plugin-react' ;
import reactHooks from 'eslint-plugin-react-hooks' ;
import reactRefresh from 'eslint-plugin-react-refresh' ;
import jsxA11y from 'eslint-plugin-jsx-a11y' ;
export default [
js . configs . recommended ,
{
files : [ '**/*.{ts,tsx,js,jsx}' ] ,
languageOptions : {
parser : typescriptParser ,
parserOptions : {
ecmaFeatures : {
jsx : true ,
} ,
ecmaVersion : 2022 ,
sourceType : 'module' ,
} ,
globals : {
// Browser globals
window : 'readonly' ,
document : 'readonly' ,
localStorage : 'readonly' ,
sessionStorage : 'readonly' ,
console : 'readonly' ,
setTimeout : 'readonly' ,
clearTimeout : 'readonly' ,
setInterval : 'readonly' ,
clearInterval : 'readonly' ,
fetch : 'readonly' ,
WebSocket : 'readonly' ,
File : 'readonly' ,
FormData : 'readonly' ,
CustomEvent : 'readonly' ,
Event : 'readonly' ,
CloseEvent : 'readonly' ,
MessageEvent : 'readonly' ,
KeyboardEvent : 'readonly' ,
HTMLElement : 'readonly' ,
HTMLDivElement : 'readonly' ,
HTMLInputElement : 'readonly' ,
HTMLButtonElement : 'readonly' ,
HTMLAnchorElement : 'readonly' ,
HTMLParagraphElement : 'readonly' ,
HTMLHeadingElement : 'readonly' ,
HTMLTextAreaElement : 'readonly' ,
HTMLSelectElement : 'readonly' ,
HTMLImageElement : 'readonly' ,
HTMLAudioElement : 'readonly' ,
Element : 'readonly' ,
Node : 'readonly' ,
MouseEvent : 'readonly' ,
Blob : 'readonly' ,
FileReader : 'readonly' ,
Image : 'readonly' ,
global : 'readonly' ,
NodeJS : 'readonly' ,
Buffer : 'readonly' ,
crypto : 'readonly' ,
performance : 'readonly' ,
require : 'readonly' ,
process : 'readonly' ,
// URL API globals
URL : 'readonly' ,
URLSearchParams : 'readonly' ,
// DOM API globals
DOMRect : 'readonly' ,
DOMRectReadOnly : 'readonly' ,
Headers : 'readonly' ,
navigator : 'readonly' ,
WindowEventMap : 'readonly' ,
requestAnimationFrame : 'readonly' ,
cancelAnimationFrame : 'readonly' ,
Notification : 'readonly' ,
NotificationOptions : 'readonly' ,
NotificationPermission : 'readonly' ,
IntersectionObserver : 'readonly' ,
IntersectionObserverInit : 'readonly' ,
MessageChannel : 'readonly' ,
confirm : 'readonly' ,
// Service Worker globals
self : 'readonly' ,
caches : 'readonly' ,
ServiceWorkerRegistration : 'readonly' ,
Cache : 'readonly' ,
CacheStorage : 'readonly' ,
Response : 'readonly' ,
Request : 'readonly' ,
clients : 'readonly' ,
// React globals
React : 'readonly' ,
// Test globals
beforeAll : 'readonly' ,
afterAll : 'readonly' ,
afterEach : 'readonly' ,
beforeEach : 'readonly' ,
describe : 'readonly' ,
it : 'readonly' ,
test : 'readonly' ,
expect : 'readonly' ,
vi : 'readonly' ,
vitest : 'readonly' ,
waitFor : 'readonly' ,
jest : 'readonly' ,
feat: Visual masterpiece - true light mode & premium UI
🎨 **True Light/Dark Mode**
- Implemented proper light mode with inverted color scheme
- Smooth theme transitions (0.3s ease)
- Light mode colors: white backgrounds, dark text, vibrant accents
- System theme detection with proper class application
🌈 **Enhanced Theme System**
- 4 color themes work in both light and dark modes
- Cyber (cyan/magenta), Ocean (blue/teal), Forest (green/lime), Sunset (orange/purple)
- Theme-specific glassmorphism effects
- Proper contrast in light mode
✨ **Premium Animations**
- Float, glow-pulse, slide-in, scale-in, rotate-in animations
- Smooth page transitions
- Hover effects with depth (lift, glow, scale)
- Micro-interactions on all interactive elements
🎯 **Visual Polish**
- Enhanced glassmorphism for light/dark modes
- Custom scrollbar with theme colors
- Beautiful text selection
- Focus indicators for accessibility
- Premium utility classes
🔧 **Technical Improvements**
- Updated UIStore to properly apply light/dark classes
- Added data-theme attribute for CSS targeting
- Smooth scroll behavior
- Optimized transitions
The app is now a visual masterpiece with perfect light/dark mode support!
2026-01-11 01:32:21 +00:00
AbortController : 'readonly' ,
AbortSignal : 'readonly' ,
BroadcastChannel : 'readonly' ,
DOMException : 'readonly' ,
atob : 'readonly' ,
PerformanceNavigationTiming : 'readonly' ,
PerformanceObserver : 'readonly' ,
HTMLFormElement : 'readonly' ,
HTMLTableElement : 'readonly' ,
HTMLTableSectionElement : 'readonly' ,
HTMLTableRowElement : 'readonly' ,
HTMLTableCellElement : 'readonly' ,
HTMLTableCaptionElement : 'readonly' ,
HTMLSpanElement : 'readonly' ,
HTMLCanvasElement : 'readonly' ,
HTMLLabelElement : 'readonly' ,
FileList : 'readonly' ,
MediaQueryListEvent : 'readonly' ,
IntersectionObserver : 'readonly' ,
IntersectionObserverEntry : 'readonly' ,
IntersectionObserverCallback : 'readonly' ,
ResizeObserver : 'readonly' ,
ResizeObserverEntry : 'readonly' ,
HeadersInit : 'readonly' ,
EventListener : 'readonly' ,
2025-12-03 21:56:50 +00:00
} ,
} ,
plugins : {
'@typescript-eslint' : typescript ,
'react' : react ,
'react-hooks' : reactHooks ,
'react-refresh' : reactRefresh ,
'jsx-a11y' : jsxA11y ,
} ,
rules : {
// TypeScript
2026-01-07 18:39:21 +00:00
'@typescript-eslint/no-unused-vars' : [ 'warn' , { argsIgnorePattern : '^_' } ] ,
2025-12-03 21:56:50 +00:00
'@typescript-eslint/explicit-function-return-type' : 'off' ,
'@typescript-eslint/explicit-module-boundary-types' : 'off' ,
2026-01-07 18:39:21 +00:00
'@typescript-eslint/no-explicit-any' : 'off' ,
2025-12-03 21:56:50 +00:00
'@typescript-eslint/no-non-null-assertion' : 'warn' ,
2026-01-07 18:39:21 +00:00
2025-12-03 21:56:50 +00:00
// React
'react/react-in-jsx-scope' : 'off' ,
'react/prop-types' : 'off' ,
'react-hooks/rules-of-hooks' : 'error' ,
'react-hooks/exhaustive-deps' : 'warn' ,
'react-refresh/only-export-components' : [
'warn' ,
{ allowConstantExport : true }
] ,
2026-01-07 18:39:21 +00:00
2025-12-03 21:56:50 +00:00
// General
2026-01-07 18:39:21 +00:00
'no-console' : 'off' ,
2025-12-03 21:56:50 +00:00
'no-debugger' : 'error' ,
'prefer-const' : 'error' ,
'no-var' : 'error' ,
'object-shorthand' : 'error' ,
'prefer-template' : 'error' ,
'no-unused-vars' : 'off' , // Handled by @typescript-eslint/no-unused-vars
'no-useless-escape' : 'error' ,
'no-prototype-builtins' : 'warn' ,
2026-01-15 20:23:31 +00:00
// Typography: Enforce type scale usage
// Warn on arbitrary text sizes in className strings (e.g., text-[10px], text-[9px])
// Note: SVG chart text (text-[2px], text-[1.5px]) may need exceptions - review case by case
'no-restricted-syntax' : [
'warn' ,
{
selector :
"Literal[value=/text-\\[\\d+(\\.\\d+)?(px|rem)\\]/], TemplateElement[value.raw=/text-\\[\\d+(\\.\\d+)?(px|rem)\\]/]" ,
message :
'Use type scale classes (text-xs, text-sm, text-base, text-lg, text-xl, text-2xl, text-3xl, text-4xl) instead of arbitrary sizes. SVG chart text (text-[2px], text-[1.5px]) may be an exception - add eslint-disable comment if needed.' ,
} ,
spacing: add ESLint rule to enforce spacing scale
- Added no-restricted-syntax rule for arbitrary spacing values
- Warns on gap-[...], p-[...], m-[...], px-[...], py-[...], mx-[...], my-[...], space-[xy]-[...] with arbitrary sizes
- Validates spacing scale: 0, 1, 2, 3, 4, 5, 6, 8, 10, 12, 16, 20, 24
- Follows same pattern as typography rule
- Task 7.2.1.4 complete
2026-01-15 23:20:23 +00:00
// Spacing: Enforce spacing scale usage
// Warn on arbitrary spacing values that don't follow 4px base scale
// Valid scale values: 0, 1, 2, 3, 4, 5, 6, 8, 10, 12, 16, 20, 24
// Arbitrary values like gap-[7px], p-[9px], etc. should use scale values instead
{
selector :
"Literal[value=/(gap-|p-|m-|px-|py-|mx-|my-|space-[xy]-)\\[\\d+(\\.\\d+)?(px|rem)\\]/], TemplateElement[value.raw=/(gap-|p-|m-|px-|py-|mx-|my-|space-[xy]-)\\[\\d+(\\.\\d+)?(px|rem)\\]/]" ,
message :
'Use spacing scale classes (gap-0 through gap-24, p-0 through p-24, etc.) instead of arbitrary sizes. Valid scale values follow 4px base: 0, 1, 2, 3, 4, 5, 6, 8, 10, 12, 16, 20, 24. For exceptions, add eslint-disable comment.' ,
} ,
2026-01-15 20:23:31 +00:00
] ,
2025-12-03 21:56:50 +00:00
} ,
settings : {
react : {
version : 'detect' ,
} ,
} ,
} ,
{
ignores : [
'node_modules/' ,
'dist/' ,
'build/' ,
'target/' ,
'_archive/' ,
'archive/' ,
'*.config.js' ,
'*.config.ts' ,
'*.config.cjs' ,
feat: Visual masterpiece - true light mode & premium UI
🎨 **True Light/Dark Mode**
- Implemented proper light mode with inverted color scheme
- Smooth theme transitions (0.3s ease)
- Light mode colors: white backgrounds, dark text, vibrant accents
- System theme detection with proper class application
🌈 **Enhanced Theme System**
- 4 color themes work in both light and dark modes
- Cyber (cyan/magenta), Ocean (blue/teal), Forest (green/lime), Sunset (orange/purple)
- Theme-specific glassmorphism effects
- Proper contrast in light mode
✨ **Premium Animations**
- Float, glow-pulse, slide-in, scale-in, rotate-in animations
- Smooth page transitions
- Hover effects with depth (lift, glow, scale)
- Micro-interactions on all interactive elements
🎯 **Visual Polish**
- Enhanced glassmorphism for light/dark modes
- Custom scrollbar with theme colors
- Beautiful text selection
- Focus indicators for accessibility
- Premium utility classes
🔧 **Technical Improvements**
- Updated UIStore to properly apply light/dark classes
- Added data-theme attribute for CSS targeting
- Smooth scroll behavior
- Optimized transitions
The app is now a visual masterpiece with perfect light/dark mode support!
2026-01-11 01:32:21 +00:00
'**/ui.backup/**' ,
2025-12-03 21:56:50 +00:00
] ,
} ,
] ;