Frontend lints

This commit is contained in:
AndyMik90
2025-12-15 22:18:20 +01:00
parent 2ac00a9d8f
commit 488bbfa2c9
28 changed files with 334 additions and 62 deletions
+6
View File
@@ -0,0 +1,6 @@
#!/bin/sh
# Run lint-staged in auto-claude-ui if there are staged files there
if git diff --cached --name-only | grep -q "^auto-claude-ui/"; then
cd auto-claude-ui && pnpm exec lint-staged
fi
+1
View File
@@ -0,0 +1 @@
pnpm test
+8
View File
@@ -23,6 +23,7 @@
"test:coverage": "vitest run --coverage", "test:coverage": "vitest run --coverage",
"test:e2e": "npx playwright test --config=e2e/playwright.config.ts", "test:e2e": "npx playwright test --config=e2e/playwright.config.ts",
"lint": "eslint .", "lint": "eslint .",
"lint:fix": "eslint . --fix",
"typecheck": "tsc --noEmit" "typecheck": "tsc --noEmit"
}, },
"dependencies": { "dependencies": {
@@ -82,7 +83,9 @@
"eslint-plugin-react": "^7.37.5", "eslint-plugin-react": "^7.37.5",
"eslint-plugin-react-hooks": "^7.0.1", "eslint-plugin-react-hooks": "^7.0.1",
"globals": "^16.5.0", "globals": "^16.5.0",
"husky": "^9.1.7",
"jsdom": "^26.0.0", "jsdom": "^26.0.0",
"lint-staged": "^16.2.7",
"postcss": "^8.5.6", "postcss": "^8.5.6",
"tailwindcss": "^4.1.17", "tailwindcss": "^4.1.17",
"typescript": "^5.9.3", "typescript": "^5.9.3",
@@ -134,5 +137,10 @@
], ],
"category": "Development" "category": "Development"
} }
},
"lint-staged": {
"*.{ts,tsx}": [
"eslint --fix"
]
} }
} }
+271 -14
View File
@@ -150,7 +150,7 @@ importers:
version: 10.0.0 version: 10.0.0
'@vitejs/plugin-react': '@vitejs/plugin-react':
specifier: ^5.1.2 specifier: ^5.1.2
version: 5.1.2([email protected](@types/[email protected])([email protected])([email protected])) version: 5.1.2([email protected](@types/[email protected])([email protected])([email protected])([email protected]))
autoprefixer: autoprefixer:
specifier: ^10.4.22 specifier: ^10.4.22
version: 10.4.22([email protected]) version: 10.4.22([email protected])
@@ -162,7 +162,7 @@ importers:
version: 26.0.12([email protected]) version: 26.0.12([email protected])
electron-vite: electron-vite:
specifier: ^5.0.0 specifier: ^5.0.0
version: 5.0.0([email protected](@types/[email protected])([email protected])([email protected])) version: 5.0.0([email protected](@types/[email protected])([email protected])([email protected])([email protected]))
eslint: eslint:
specifier: ^9.39.1 specifier: ^9.39.1
version: 9.39.1([email protected]) version: 9.39.1([email protected])
@@ -175,9 +175,15 @@ importers:
globals: globals:
specifier: ^16.5.0 specifier: ^16.5.0
version: 16.5.0 version: 16.5.0
husky:
specifier: ^9.1.7
version: 9.1.7
jsdom: jsdom:
specifier: ^26.0.0 specifier: ^26.0.0
version: 26.1.0 version: 26.1.0
lint-staged:
specifier: ^16.2.7
version: 16.2.7
postcss: postcss:
specifier: ^8.5.6 specifier: ^8.5.6
version: 8.5.6 version: 8.5.6
@@ -192,10 +198,10 @@ importers:
version: 8.49.0([email protected]([email protected]))([email protected]) version: 8.49.0([email protected]([email protected]))([email protected])
vite: vite:
specifier: ^7.2.7 specifier: ^7.2.7
version: 7.2.7(@types/[email protected])([email protected])([email protected]) version: 7.2.7(@types/[email protected])([email protected])([email protected])([email protected])
vitest: vitest:
specifier: ^4.0.15 specifier: ^4.0.15
version: 4.0.15(@types/[email protected])([email protected])([email protected])([email protected]) version: 4.0.15(@types/[email protected])([email protected])([email protected])([email protected])([email protected])
packages: packages:
@@ -1657,6 +1663,10 @@ packages:
[email protected]: [email protected]:
resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
[email protected]:
resolution: {integrity: sha512-g6LhBsl+GBPRWGWsBtutpzBYuIIdBkLEvad5C/va/74Db018+5TZiyA26cZJAr3Rft5lprVqOIPxf5Vid6tqAw==}
engines: {node: '>=18'}
[email protected]: [email protected]:
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
engines: {node: '>=8'} engines: {node: '>=8'}
@@ -1789,6 +1799,10 @@ packages:
[email protected]: [email protected]:
resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
[email protected]:
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
engines: {node: '>=8'}
[email protected]: [email protected]:
resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==} resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==}
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
@@ -1879,6 +1893,10 @@ packages:
resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==}
engines: {node: '>=8'} engines: {node: '>=8'}
[email protected]:
resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==}
engines: {node: '>=18'}
[email protected]: [email protected]:
resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==}
engines: {node: '>=6'} engines: {node: '>=6'}
@@ -1887,6 +1905,10 @@ packages:
resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==}
engines: {node: '>=8'} engines: {node: '>=8'}
[email protected]:
resolution: {integrity: sha512-SroPvNHxUnk+vIW/dOSfNqdy1sPEFkrTk6TUtqLCnBlo3N7TNYYkzzN7uSD6+jVjrdO4+p8nH7JzH6cIvUem6A==}
engines: {node: '>=20'}
[email protected]: [email protected]:
resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
engines: {node: '>=12'} engines: {node: '>=12'}
@@ -1909,10 +1931,17 @@ packages:
[email protected]: [email protected]:
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
[email protected]:
resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
[email protected]: [email protected]:
resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
engines: {node: '>= 0.8'} engines: {node: '>= 0.8'}
[email protected]:
resolution: {integrity: sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==}
engines: {node: '>=20'}
[email protected]: [email protected]:
resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==}
engines: {node: '>= 6'} engines: {node: '>= 6'}
@@ -2095,6 +2124,9 @@ packages:
engines: {node: '>= 12.20.55'} engines: {node: '>= 12.20.55'}
hasBin: true hasBin: true
[email protected]:
resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==}
[email protected]: [email protected]:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
@@ -2119,6 +2151,10 @@ packages:
resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==}
engines: {node: '>=6'} engines: {node: '>=6'}
[email protected]:
resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==}
engines: {node: '>=18'}
[email protected]: [email protected]:
resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==}
@@ -2230,6 +2266,9 @@ packages:
resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
[email protected]:
resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
[email protected]: [email protected]:
resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==}
engines: {node: '>=12.0.0'} engines: {node: '>=12.0.0'}
@@ -2274,6 +2313,10 @@ packages:
[email protected]: [email protected]:
resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==}
[email protected]:
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
engines: {node: '>=8'}
[email protected]: [email protected]:
resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
engines: {node: '>=10'} engines: {node: '>=10'}
@@ -2373,6 +2416,10 @@ packages:
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
engines: {node: 6.* || 8.* || >= 10.*} engines: {node: 6.* || 8.* || >= 10.*}
[email protected]:
resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==}
engines: {node: '>=18'}
[email protected]: [email protected]:
resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
@@ -2504,6 +2551,11 @@ packages:
[email protected]: [email protected]:
resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
[email protected]:
resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==}
engines: {node: '>=18'}
hasBin: true
[email protected]: [email protected]:
resolution: {integrity: sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==} resolution: {integrity: sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==}
engines: {node: ^8.11.2 || >=10} engines: {node: ^8.11.2 || >=10}
@@ -2602,6 +2654,10 @@ packages:
resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
engines: {node: '>=8'} engines: {node: '>=8'}
[email protected]:
resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==}
engines: {node: '>=18'}
[email protected]: [email protected]:
resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==} resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
@@ -2629,6 +2685,10 @@ packages:
resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
[email protected]:
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
engines: {node: '>=0.12.0'}
[email protected]: [email protected]:
resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==}
@@ -2830,6 +2890,15 @@ packages:
resolution: {integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==} resolution: {integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==}
engines: {node: '>= 12.0.0'} engines: {node: '>= 12.0.0'}
[email protected]:
resolution: {integrity: sha512-lDIj4RnYmK7/kXMya+qJsmkRFkGolciXjrsZ6PC25GdTfWOAWetR0ZbsNXRAj1EHHImRSalc+whZFg56F5DVow==}
engines: {node: '>=20.17'}
hasBin: true
[email protected]:
resolution: {integrity: sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==}
engines: {node: '>=20.0.0'}
[email protected]: [email protected]:
resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
engines: {node: '>=10'} engines: {node: '>=10'}
@@ -2844,6 +2913,10 @@ packages:
resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
engines: {node: '>=10'} engines: {node: '>=10'}
[email protected]:
resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==}
engines: {node: '>=18'}
[email protected]: [email protected]:
resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
hasBin: true hasBin: true
@@ -2890,6 +2963,10 @@ packages:
resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
[email protected]:
resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
engines: {node: '>=8.6'}
[email protected]: [email protected]:
resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
engines: {node: '>= 0.6'} engines: {node: '>= 0.6'}
@@ -2907,6 +2984,10 @@ packages:
resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
engines: {node: '>=6'} engines: {node: '>=6'}
[email protected]:
resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==}
engines: {node: '>=18'}
[email protected]: [email protected]:
resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==}
engines: {node: '>=4'} engines: {node: '>=4'}
@@ -3004,6 +3085,10 @@ packages:
[email protected]: [email protected]:
resolution: {integrity: sha512-Vpf9qnVW1RaDkoNKFUvfxqAbtI8ncb8OJlqZ9wwpXzWPEsvsB1nvdUi6oYrHIkQ1Y/tMDnr1h4nczS0VB9Xykg==} resolution: {integrity: sha512-Vpf9qnVW1RaDkoNKFUvfxqAbtI8ncb8OJlqZ9wwpXzWPEsvsB1nvdUi6oYrHIkQ1Y/tMDnr1h4nczS0VB9Xykg==}
[email protected]:
resolution: {integrity: sha512-tacvGzUY5o2D8CBh2rrwxyNojUsZNU2zjNTzKQrkgGJQTbGAfArVWXSKMBokBeeg6C7OLRGUEyoFlYbfeWQIqw==}
engines: {node: '>=20.17'}
[email protected]: [email protected]:
resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
@@ -3086,6 +3171,10 @@ packages:
resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
engines: {node: '>=6'} engines: {node: '>=6'}
[email protected]:
resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==}
engines: {node: '>=18'}
[email protected]: [email protected]:
resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
engines: {node: '>= 0.8.0'} engines: {node: '>= 0.8.0'}
@@ -3156,10 +3245,19 @@ packages:
[email protected]: [email protected]:
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
[email protected]:
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
engines: {node: '>=8.6'}
[email protected]: [email protected]:
resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
engines: {node: '>=12'} engines: {node: '>=12'}
[email protected]:
resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==}
engines: {node: '>=0.10'}
hasBin: true
[email protected]: [email protected]:
resolution: {integrity: sha512-agTcKlMw/mjBWOnD6kFZttAAGHgi/Nw0CZ2o6JqWSbMlI219lAFLZZCyqByTsvVAJq5XA5H8cA6PrvBRpBWEuQ==} resolution: {integrity: sha512-agTcKlMw/mjBWOnD6kFZttAAGHgi/Nw0CZ2o6JqWSbMlI219lAFLZZCyqByTsvVAJq5XA5H8cA6PrvBRpBWEuQ==}
engines: {node: '>=18'} engines: {node: '>=18'}
@@ -3333,10 +3431,17 @@ packages:
resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==}
engines: {node: '>=8'} engines: {node: '>=8'}
[email protected]:
resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==}
engines: {node: '>=18'}
[email protected]: [email protected]:
resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==}
engines: {node: '>= 4'} engines: {node: '>= 4'}
[email protected]:
resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
[email protected]: [email protected]:
resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==}
deprecated: Rimraf versions prior to v4 are no longer supported deprecated: Rimraf versions prior to v4 are no longer supported
@@ -3464,6 +3569,10 @@ packages:
resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==}
engines: {node: '>=8'} engines: {node: '>=8'}
[email protected]:
resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==}
engines: {node: '>=18'}
[email protected]: [email protected]:
resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==}
engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} engines: {node: '>= 6.0.0', npm: '>= 3.0.0'}
@@ -3508,6 +3617,10 @@ packages:
resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
[email protected]:
resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==}
engines: {node: '>=0.6.19'}
[email protected]: [email protected]:
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
engines: {node: '>=8'} engines: {node: '>=8'}
@@ -3516,6 +3629,14 @@ packages:
resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
engines: {node: '>=12'} engines: {node: '>=12'}
[email protected]:
resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==}
engines: {node: '>=18'}
[email protected]:
resolution: {integrity: sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==}
engines: {node: '>=20'}
[email protected]: [email protected]:
resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
@@ -3618,6 +3739,10 @@ packages:
resolution: {integrity: sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==} resolution: {integrity: sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==}
engines: {node: '>=14.14'} engines: {node: '>=14.14'}
[email protected]:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
engines: {node: '>=8.0'}
[email protected]: [email protected]:
resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==} resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==}
engines: {node: '>=16'} engines: {node: '>=16'}
@@ -3878,6 +4003,10 @@ packages:
resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
engines: {node: '>=12'} engines: {node: '>=12'}
[email protected]:
resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==}
engines: {node: '>=18'}
[email protected]: [email protected]:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
@@ -3914,6 +4043,11 @@ packages:
[email protected]: [email protected]:
resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
[email protected]:
resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==}
engines: {node: '>= 14.6'}
hasBin: true
[email protected]: [email protected]:
resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
engines: {node: '>=12'} engines: {node: '>=12'}
@@ -5356,7 +5490,7 @@ snapshots:
'@typescript-eslint/types': 8.49.0 '@typescript-eslint/types': 8.49.0
eslint-visitor-keys: 4.2.1 eslint-visitor-keys: 4.2.1
'@vitejs/[email protected]([email protected](@types/[email protected])([email protected])([email protected]))': '@vitejs/[email protected]([email protected](@types/[email protected])([email protected])([email protected])([email protected]))':
dependencies: dependencies:
'@babel/core': 7.28.5 '@babel/core': 7.28.5
'@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/[email protected]) '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/[email protected])
@@ -5364,7 +5498,7 @@ snapshots:
'@rolldown/pluginutils': 1.0.0-beta.53 '@rolldown/pluginutils': 1.0.0-beta.53
'@types/babel__core': 7.20.5 '@types/babel__core': 7.20.5
react-refresh: 0.18.0 react-refresh: 0.18.0
vite: 7.2.7(@types/[email protected])([email protected])([email protected]) vite: 7.2.7(@types/[email protected])([email protected])([email protected])([email protected])
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@@ -5377,13 +5511,13 @@ snapshots:
chai: 6.2.1 chai: 6.2.1
tinyrainbow: 3.0.3 tinyrainbow: 3.0.3
'@vitest/[email protected]([email protected](@types/[email protected])([email protected])([email protected]))': '@vitest/[email protected]([email protected](@types/[email protected])([email protected])([email protected])([email protected]))':
dependencies: dependencies:
'@vitest/spy': 4.0.15 '@vitest/spy': 4.0.15
estree-walker: 3.0.3 estree-walker: 3.0.3
magic-string: 0.30.21 magic-string: 0.30.21
optionalDependencies: optionalDependencies:
vite: 7.2.7(@types/[email protected])([email protected])([email protected]) vite: 7.2.7(@types/[email protected])([email protected])([email protected])([email protected])
'@vitest/[email protected]': '@vitest/[email protected]':
dependencies: dependencies:
@@ -5455,6 +5589,10 @@ snapshots:
json-schema-traverse: 0.4.1 json-schema-traverse: 0.4.1
uri-js: 4.4.1 uri-js: 4.4.1
[email protected]:
dependencies:
environment: 1.1.0
[email protected]: {} [email protected]: {}
[email protected]: {} [email protected]: {}
@@ -5633,6 +5771,10 @@ snapshots:
dependencies: dependencies:
balanced-match: 1.0.2 balanced-match: 1.0.2
[email protected]:
dependencies:
fill-range: 7.1.1
[email protected]: [email protected]:
dependencies: dependencies:
baseline-browser-mapping: 2.9.6 baseline-browser-mapping: 2.9.6
@@ -5764,6 +5906,10 @@ snapshots:
dependencies: dependencies:
restore-cursor: 3.1.0 restore-cursor: 3.1.0
[email protected]:
dependencies:
restore-cursor: 5.1.0
[email protected]: {} [email protected]: {}
[email protected]: [email protected]:
@@ -5772,6 +5918,11 @@ snapshots:
string-width: 4.2.3 string-width: 4.2.3
optional: true optional: true
[email protected]:
dependencies:
slice-ansi: 7.1.2
string-width: 8.1.0
[email protected]: [email protected]:
dependencies: dependencies:
string-width: 4.2.3 string-width: 4.2.3
@@ -5792,10 +5943,14 @@ snapshots:
[email protected]: {} [email protected]: {}
[email protected]: {}
[email protected]: [email protected]:
dependencies: dependencies:
delayed-stream: 1.0.0 delayed-stream: 1.0.0
[email protected]: {}
[email protected]: {} [email protected]: {}
[email protected]: [email protected]:
@@ -5998,7 +6153,7 @@ snapshots:
[email protected]: {} [email protected]: {}
[email protected]([email protected](@types/[email protected])([email protected])([email protected])): [email protected]([email protected](@types/[email protected])([email protected])([email protected])([email protected])):
dependencies: dependencies:
'@babel/core': 7.28.5 '@babel/core': 7.28.5
'@babel/plugin-transform-arrow-functions': 7.27.1(@babel/[email protected]) '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/[email protected])
@@ -6006,7 +6161,7 @@ snapshots:
esbuild: 0.25.12 esbuild: 0.25.12
magic-string: 0.30.21 magic-string: 0.30.21
picocolors: 1.1.1 picocolors: 1.1.1
vite: 7.2.7(@types/[email protected])([email protected])([email protected]) vite: 7.2.7(@types/[email protected])([email protected])([email protected])([email protected])
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@@ -6030,6 +6185,8 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
[email protected]: {}
[email protected]: {} [email protected]: {}
[email protected]: {} [email protected]: {}
@@ -6052,6 +6209,8 @@ snapshots:
[email protected]: {} [email protected]: {}
[email protected]: {}
[email protected]: {} [email protected]: {}
[email protected]: [email protected]:
@@ -6298,6 +6457,8 @@ snapshots:
[email protected]: {} [email protected]: {}
[email protected]: {}
[email protected]: {} [email protected]: {}
[email protected]: {} [email protected]: {}
@@ -6337,6 +6498,10 @@ snapshots:
dependencies: dependencies:
minimatch: 5.1.6 minimatch: 5.1.6
[email protected]:
dependencies:
to-regex-range: 5.0.1
[email protected]: [email protected]:
dependencies: dependencies:
locate-path: 6.0.0 locate-path: 6.0.0
@@ -6439,6 +6604,8 @@ snapshots:
[email protected]: {} [email protected]: {}
[email protected]: {}
[email protected]: [email protected]:
dependencies: dependencies:
call-bind-apply-helpers: 1.0.2 call-bind-apply-helpers: 1.0.2
@@ -6612,6 +6779,8 @@ snapshots:
dependencies: dependencies:
ms: 2.1.3 ms: 2.1.3
[email protected]: {}
[email protected]: [email protected]:
dependencies: dependencies:
cli-truncate: 2.1.0 cli-truncate: 2.1.0
@@ -6706,6 +6875,10 @@ snapshots:
[email protected]: {} [email protected]: {}
[email protected]:
dependencies:
get-east-asian-width: 1.4.0
[email protected]: [email protected]:
dependencies: dependencies:
call-bound: 1.0.4 call-bound: 1.0.4
@@ -6731,6 +6904,8 @@ snapshots:
call-bound: 1.0.4 call-bound: 1.0.4
has-tostringtag: 1.0.2 has-tostringtag: 1.0.2
[email protected]: {}
[email protected]: {} [email protected]: {}
[email protected]: [email protected]:
@@ -6928,6 +7103,25 @@ snapshots:
lightningcss-win32-arm64-msvc: 1.30.2 lightningcss-win32-arm64-msvc: 1.30.2
lightningcss-win32-x64-msvc: 1.30.2 lightningcss-win32-x64-msvc: 1.30.2
[email protected]:
dependencies:
commander: 14.0.2
listr2: 9.0.5
micromatch: 4.0.8
nano-spawn: 2.0.0
pidtree: 0.6.0
string-argv: 0.3.2
yaml: 2.8.2
[email protected]:
dependencies:
cli-truncate: 5.1.1
colorette: 2.0.20
eventemitter3: 5.0.1
log-update: 6.1.0
rfdc: 1.4.1
wrap-ansi: 9.0.2
[email protected]: [email protected]:
dependencies: dependencies:
p-locate: 5.0.0 p-locate: 5.0.0
@@ -6941,6 +7135,14 @@ snapshots:
chalk: 4.1.2 chalk: 4.1.2
is-unicode-supported: 0.1.0 is-unicode-supported: 0.1.0
[email protected]:
dependencies:
ansi-escapes: 7.2.0
cli-cursor: 5.0.0
slice-ansi: 7.1.2
strip-ansi: 7.1.2
wrap-ansi: 9.0.2
[email protected]: [email protected]:
dependencies: dependencies:
js-tokens: 4.0.0 js-tokens: 4.0.0
@@ -6998,6 +7200,11 @@ snapshots:
[email protected]: {} [email protected]: {}
[email protected]:
dependencies:
braces: 3.0.3
picomatch: 2.3.1
[email protected]: {} [email protected]: {}
[email protected]: [email protected]:
@@ -7008,6 +7215,8 @@ snapshots:
[email protected]: {} [email protected]: {}
[email protected]: {}
[email protected]: {} [email protected]: {}
[email protected]: {} [email protected]: {}
@@ -7091,6 +7300,8 @@ snapshots:
[email protected]: {} [email protected]: {}
[email protected]: {}
[email protected]: {} [email protected]: {}
[email protected]: {} [email protected]: {}
@@ -7170,6 +7381,10 @@ snapshots:
dependencies: dependencies:
mimic-fn: 2.1.0 mimic-fn: 2.1.0
[email protected]:
dependencies:
mimic-function: 5.0.1
[email protected]: [email protected]:
dependencies: dependencies:
deep-is: 0.1.4 deep-is: 0.1.4
@@ -7242,8 +7457,12 @@ snapshots:
[email protected]: {} [email protected]: {}
[email protected]: {}
[email protected]: {} [email protected]: {}
[email protected]: {}
[email protected]: {} [email protected]: {}
[email protected]: [email protected]:
@@ -7411,8 +7630,15 @@ snapshots:
onetime: 5.1.2 onetime: 5.1.2
signal-exit: 3.0.7 signal-exit: 3.0.7
[email protected]:
dependencies:
onetime: 7.0.0
signal-exit: 4.1.0
[email protected]: {} [email protected]: {}
[email protected]: {}
[email protected]: [email protected]:
dependencies: dependencies:
glob: 7.2.3 glob: 7.2.3
@@ -7583,6 +7809,11 @@ snapshots:
is-fullwidth-code-point: 3.0.0 is-fullwidth-code-point: 3.0.0
optional: true optional: true
[email protected]:
dependencies:
ansi-styles: 6.2.3
is-fullwidth-code-point: 5.1.0
[email protected]: {} [email protected]: {}
[email protected]: [email protected]:
@@ -7625,6 +7856,8 @@ snapshots:
es-errors: 1.3.0 es-errors: 1.3.0
internal-slot: 1.1.0 internal-slot: 1.1.0
[email protected]: {}
[email protected]: [email protected]:
dependencies: dependencies:
emoji-regex: 8.0.0 emoji-regex: 8.0.0
@@ -7637,6 +7870,17 @@ snapshots:
emoji-regex: 9.2.2 emoji-regex: 9.2.2
strip-ansi: 7.1.2 strip-ansi: 7.1.2
[email protected]:
dependencies:
emoji-regex: 10.6.0
get-east-asian-width: 1.4.0
strip-ansi: 7.1.2
[email protected]:
dependencies:
get-east-asian-width: 1.4.0
strip-ansi: 7.1.2
[email protected]: [email protected]:
dependencies: dependencies:
call-bind: 1.0.8 call-bind: 1.0.8
@@ -7761,6 +8005,10 @@ snapshots:
[email protected]: {} [email protected]: {}
[email protected]:
dependencies:
is-number: 7.0.0
[email protected]: [email protected]:
dependencies: dependencies:
tldts: 6.1.86 tldts: 6.1.86
@@ -7893,7 +8141,7 @@ snapshots:
extsprintf: 1.4.1 extsprintf: 1.4.1
optional: true optional: true
[email protected](@types/[email protected])([email protected])([email protected]): [email protected](@types/[email protected])([email protected])([email protected])([email protected]):
dependencies: dependencies:
esbuild: 0.25.12 esbuild: 0.25.12
fdir: 6.5.0([email protected]) fdir: 6.5.0([email protected])
@@ -7906,11 +8154,12 @@ snapshots:
fsevents: 2.3.3 fsevents: 2.3.3
jiti: 2.6.1 jiti: 2.6.1
lightningcss: 1.30.2 lightningcss: 1.30.2
yaml: 2.8.2
[email protected](@types/[email protected])([email protected])([email protected])([email protected]): [email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected]):
dependencies: dependencies:
'@vitest/expect': 4.0.15 '@vitest/expect': 4.0.15
'@vitest/mocker': 4.0.15([email protected](@types/[email protected])([email protected])([email protected])) '@vitest/mocker': 4.0.15([email protected](@types/[email protected])([email protected])([email protected])([email protected]))
'@vitest/pretty-format': 4.0.15 '@vitest/pretty-format': 4.0.15
'@vitest/runner': 4.0.15 '@vitest/runner': 4.0.15
'@vitest/snapshot': 4.0.15 '@vitest/snapshot': 4.0.15
@@ -7927,7 +8176,7 @@ snapshots:
tinyexec: 1.0.2 tinyexec: 1.0.2
tinyglobby: 0.2.15 tinyglobby: 0.2.15
tinyrainbow: 3.0.3 tinyrainbow: 3.0.3
vite: 7.2.7(@types/[email protected])([email protected])([email protected]) vite: 7.2.7(@types/[email protected])([email protected])([email protected])([email protected])
why-is-node-running: 2.3.0 why-is-node-running: 2.3.0
optionalDependencies: optionalDependencies:
'@types/node': 25.0.0 '@types/node': 25.0.0
@@ -8030,6 +8279,12 @@ snapshots:
string-width: 5.1.2 string-width: 5.1.2
strip-ansi: 7.1.2 strip-ansi: 7.1.2
[email protected]:
dependencies:
ansi-styles: 6.2.3
string-width: 7.2.0
strip-ansi: 7.1.2
[email protected]: {} [email protected]: {}
[email protected]: {} [email protected]: {}
@@ -8046,6 +8301,8 @@ snapshots:
[email protected]: {} [email protected]: {}
[email protected]: {}
[email protected]: {} [email protected]: {}
[email protected]: [email protected]:
@@ -256,7 +256,7 @@ function SessionItem({
<div className="flex items-center gap-1.5 pr-7"> <div className="flex items-center gap-1.5 pr-7">
<MessageSquare <MessageSquare
className={cn( className={cn(
'h-4 w-4 flex-shrink-0', 'h-4 w-4 shrink-0',
isActive ? 'text-primary' : 'text-muted-foreground' isActive ? 'text-primary' : 'text-muted-foreground'
)} )}
/> />
@@ -158,7 +158,7 @@ export function EnvConfigModal({
{!isChecking && success && ( {!isChecking && success && (
<div className="py-4"> <div className="py-4">
<div className="rounded-lg bg-success/10 border border-success/30 p-4 flex items-center gap-3"> <div className="rounded-lg bg-success/10 border border-success/30 p-4 flex items-center gap-3">
<CheckCircle2 className="h-5 w-5 text-success flex-shrink-0" /> <CheckCircle2 className="h-5 w-5 text-success shrink-0" />
<div className="flex-1"> <div className="flex-1">
<p className="text-sm font-medium text-success"> <p className="text-sm font-medium text-success">
Token configured successfully Token configured successfully
@@ -177,7 +177,7 @@ export function EnvConfigModal({
{/* Error banner */} {/* Error banner */}
{error && ( {error && (
<div className="rounded-lg bg-destructive/10 border border-destructive/30 p-3 flex items-start gap-2"> <div className="rounded-lg bg-destructive/10 border border-destructive/30 p-3 flex items-start gap-2">
<AlertCircle className="h-4 w-4 text-destructive flex-shrink-0 mt-0.5" /> <AlertCircle className="h-4 w-4 text-destructive shrink-0 mt-0.5" />
<p className="text-sm text-destructive">{error}</p> <p className="text-sm text-destructive">{error}</p>
</div> </div>
)} )}
@@ -185,7 +185,7 @@ export function EnvConfigModal({
{/* Info about getting a token */} {/* Info about getting a token */}
<div className="rounded-lg bg-info/10 border border-info/30 p-4"> <div className="rounded-lg bg-info/10 border border-info/30 p-4">
<div className="flex items-start gap-3"> <div className="flex items-start gap-3">
<Info className="h-5 w-5 text-info flex-shrink-0 mt-0.5" /> <Info className="h-5 w-5 text-info shrink-0 mt-0.5" />
<div className="flex-1 space-y-2"> <div className="flex-1 space-y-2">
<p className="text-sm text-foreground font-medium"> <p className="text-sm text-foreground font-medium">
How to get a Claude Code OAuth token: How to get a Claude Code OAuth token:
@@ -183,7 +183,7 @@ export function GitHubIssues({ onOpenSettings }: GitHubIssuesProps) {
return ( return (
<div className="flex-1 flex flex-col h-full"> <div className="flex-1 flex flex-col h-full">
{/* Header */} {/* Header */}
<div className="flex-shrink-0 p-4 border-b border-border"> <div className="shrink-0 p-4 border-b border-border">
<div className="flex items-center justify-between mb-4"> <div className="flex items-center justify-between mb-4">
<div className="flex items-center gap-3"> <div className="flex items-center gap-3">
<div className="p-2 rounded-lg bg-muted"> <div className="p-2 rounded-lg bg-muted">
@@ -324,7 +324,7 @@ export function ImageUpload({
{/* Error message */} {/* Error message */}
{error && ( {error && (
<div className="flex items-start gap-2 rounded-lg bg-destructive/10 border border-destructive/30 p-3 text-sm text-destructive"> <div className="flex items-start gap-2 rounded-lg bg-destructive/10 border border-destructive/30 p-3 text-sm text-destructive">
<AlertCircle className="h-4 w-4 mt-0.5 flex-shrink-0" /> <AlertCircle className="h-4 w-4 mt-0.5 shrink-0" />
<span>{error}</span> <span>{error}</span>
</div> </div>
)} )}
@@ -287,7 +287,7 @@ export function LinearTaskImportModal({
return ( return (
<Dialog open={open} onOpenChange={handleOpenChange}> <Dialog open={open} onOpenChange={handleOpenChange}>
<DialogContent className="sm:max-w-[700px] max-h-[85vh] flex flex-col"> <DialogContent className="sm:max-w-[700px] max-h-[85vh] flex flex-col">
<DialogHeader className="flex-shrink-0"> <DialogHeader className="shrink-0">
<DialogTitle className="flex items-center gap-2 text-foreground"> <DialogTitle className="flex items-center gap-2 text-foreground">
<Download className="h-5 w-5" /> <Download className="h-5 w-5" />
Import Linear Tasks Import Linear Tasks
@@ -300,7 +300,7 @@ export function LinearTaskImportModal({
{/* Import Success Banner */} {/* Import Success Banner */}
{importResult?.success && ( {importResult?.success && (
<div className="rounded-lg bg-success/10 border border-success/30 p-4 flex items-center gap-3"> <div className="rounded-lg bg-success/10 border border-success/30 p-4 flex items-center gap-3">
<CheckCircle2 className="h-5 w-5 text-success flex-shrink-0" /> <CheckCircle2 className="h-5 w-5 text-success shrink-0" />
<div className="flex-1"> <div className="flex-1">
<p className="text-sm font-medium text-success"> <p className="text-sm font-medium text-success">
Successfully imported {importResult.imported} task{importResult.imported !== 1 ? 's' : ''} Successfully imported {importResult.imported} task{importResult.imported !== 1 ? 's' : ''}
@@ -322,7 +322,7 @@ export function LinearTaskImportModal({
{/* Error Banner */} {/* Error Banner */}
{error && ( {error && (
<div className="rounded-lg bg-destructive/10 border border-destructive/30 p-3 flex items-center gap-2"> <div className="rounded-lg bg-destructive/10 border border-destructive/30 p-3 flex items-center gap-2">
<AlertCircle className="h-4 w-4 text-destructive flex-shrink-0" /> <AlertCircle className="h-4 w-4 text-destructive shrink-0" />
<p className="text-sm text-destructive">{error}</p> <p className="text-sm text-destructive">{error}</p>
</div> </div>
)} )}
@@ -330,7 +330,7 @@ export function LinearTaskImportModal({
{!importResult?.success && ( {!importResult?.success && (
<> <>
{/* Team and Project Selection */} {/* Team and Project Selection */}
<div className="flex gap-4 flex-shrink-0"> <div className="flex gap-4 shrink-0">
<div className="flex-1 space-y-2"> <div className="flex-1 space-y-2">
<Label className="text-sm font-medium text-foreground">Team</Label> <Label className="text-sm font-medium text-foreground">Team</Label>
<Select <Select
@@ -374,7 +374,7 @@ export function LinearTaskImportModal({
</div> </div>
{/* Search and Filter Bar */} {/* Search and Filter Bar */}
<div className="flex gap-3 items-center flex-shrink-0"> <div className="flex gap-3 items-center shrink-0">
<div className="flex-1 relative"> <div className="flex-1 relative">
<Search className="absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground" /> <Search className="absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground" />
<Input <Input
@@ -403,7 +403,7 @@ export function LinearTaskImportModal({
{/* Selection Controls */} {/* Selection Controls */}
{issues.length > 0 && ( {issues.length > 0 && (
<div className="flex items-center justify-between py-2 border-b border-border flex-shrink-0"> <div className="flex items-center justify-between py-2 border-b border-border shrink-0">
<div className="flex items-center gap-3"> <div className="flex items-center gap-3">
<button <button
onClick={isAllSelected ? deselectAll : selectAll} onClick={isAllSelected ? deselectAll : selectAll}
@@ -582,7 +582,7 @@ export function LinearTaskImportModal({
</> </>
)} )}
<DialogFooter className="flex-shrink-0"> <DialogFooter className="shrink-0">
<Button variant="outline" onClick={() => handleOpenChange(false)}> <Button variant="outline" onClick={() => handleOpenChange(false)}>
{importResult?.success ? 'Done' : 'Cancel'} {importResult?.success ? 'Done' : 'Cancel'}
</Button> </Button>
@@ -427,7 +427,7 @@ export function ProjectSettings({ project, open, onOpenChange }: ProjectSettings
return ( return (
<Dialog open={open} onOpenChange={onOpenChange}> <Dialog open={open} onOpenChange={onOpenChange}>
<DialogContent className="sm:max-w-[600px] max-h-[85vh] flex flex-col overflow-hidden"> <DialogContent className="sm:max-w-[600px] max-h-[85vh] flex flex-col overflow-hidden">
<DialogHeader className="flex-shrink-0"> <DialogHeader className="shrink-0">
<DialogTitle className="flex items-center gap-2 text-foreground"> <DialogTitle className="flex items-center gap-2 text-foreground">
<Settings2 className="h-5 w-5" /> <Settings2 className="h-5 w-5" />
Project Settings Project Settings
@@ -1410,7 +1410,7 @@ export function ProjectSettings({ project, open, onOpenChange }: ProjectSettings
</div> </div>
</div> </div>
<DialogFooter className="flex-shrink-0"> <DialogFooter className="shrink-0">
<Button variant="outline" onClick={() => onOpenChange(false)}> <Button variant="outline" onClick={() => onOpenChange(false)}>
Cancel Cancel
</Button> </Button>
@@ -136,7 +136,7 @@ export function Roadmap({ projectId, onGoToTask }: RoadmapProps) {
return ( return (
<div className="h-full flex flex-col overflow-hidden"> <div className="h-full flex flex-col overflow-hidden">
{/* Header */} {/* Header */}
<div className="flex-shrink-0 border-b border-border p-4 bg-card/50"> <div className="shrink-0 border-b border-border p-4 bg-card/50">
<div className="flex items-start justify-between"> <div className="flex items-start justify-between">
<div> <div>
<div className="flex items-center gap-2 mb-1"> <div className="flex items-center gap-2 mb-1">
@@ -204,7 +204,7 @@ export function Roadmap({ projectId, onGoToTask }: RoadmapProps) {
{/* Content */} {/* Content */}
<div className="flex-1 overflow-hidden"> <div className="flex-1 overflow-hidden">
<Tabs value={activeTab} onValueChange={setActiveTab} className="h-full flex flex-col"> <Tabs value={activeTab} onValueChange={setActiveTab} className="h-full flex flex-col">
<TabsList className="flex-shrink-0 mx-4 mt-4"> <TabsList className="shrink-0 mx-4 mt-4">
<TabsTrigger value="phases">Phases</TabsTrigger> <TabsTrigger value="phases">Phases</TabsTrigger>
<TabsTrigger value="features">All Features</TabsTrigger> <TabsTrigger value="features">All Features</TabsTrigger>
<TabsTrigger value="priorities">By Priority</TabsTrigger> <TabsTrigger value="priorities">By Priority</TabsTrigger>
@@ -514,7 +514,7 @@ function FeatureDetailPanel({ feature, onClose, onConvertToSpec, onGoToTask }: F
return ( return (
<div className="fixed inset-y-0 right-0 w-96 bg-card border-l border-border shadow-lg flex flex-col z-50"> <div className="fixed inset-y-0 right-0 w-96 bg-card border-l border-border shadow-lg flex flex-col z-50">
{/* Header */} {/* Header */}
<div className="flex-shrink-0 p-4 border-b border-border"> <div className="shrink-0 p-4 border-b border-border">
<div className="flex items-start justify-between"> <div className="flex items-start justify-between">
<div className="flex-1"> <div className="flex-1">
<div className="flex items-center gap-2 mb-2"> <div className="flex items-center gap-2 mb-2">
@@ -600,7 +600,7 @@ function FeatureDetailPanel({ feature, onClose, onConvertToSpec, onGoToTask }: F
<ul className="space-y-1"> <ul className="space-y-1">
{feature.acceptanceCriteria.map((criterion, i) => ( {feature.acceptanceCriteria.map((criterion, i) => (
<li key={i} className="text-sm flex items-start gap-2"> <li key={i} className="text-sm flex items-start gap-2">
<Circle className="h-3 w-3 mt-1.5 flex-shrink-0" /> <Circle className="h-3 w-3 mt-1.5 shrink-0" />
<span>{criterion}</span> <span>{criterion}</span>
</li> </li>
))} ))}
@@ -628,14 +628,14 @@ function FeatureDetailPanel({ feature, onClose, onConvertToSpec, onGoToTask }: F
{/* Actions */} {/* Actions */}
{feature.linkedSpecId ? ( {feature.linkedSpecId ? (
<div className="flex-shrink-0 p-4 border-t border-border"> <div className="shrink-0 p-4 border-t border-border">
<Button className="w-full" onClick={() => onGoToTask(feature.linkedSpecId!)}> <Button className="w-full" onClick={() => onGoToTask(feature.linkedSpecId!)}>
<ExternalLink className="h-4 w-4 mr-2" /> <ExternalLink className="h-4 w-4 mr-2" />
Go to Task Go to Task
</Button> </Button>
</div> </div>
) : feature.status !== 'done' && ( ) : feature.status !== 'done' && (
<div className="flex-shrink-0 p-4 border-t border-border"> <div className="shrink-0 p-4 border-t border-border">
<Button className="w-full" onClick={() => onConvertToSpec(feature)}> <Button className="w-full" onClick={() => onConvertToSpec(feature)}>
<Zap className="h-4 w-4 mr-2" /> <Zap className="h-4 w-4 mr-2" />
Convert to Auto-Build Task Convert to Auto-Build Task
@@ -300,7 +300,7 @@ export function Sidebar({
<SelectValue placeholder="Select a project..." className="truncate min-w-0 flex-1" /> <SelectValue placeholder="Select a project..." className="truncate min-w-0 flex-1" />
</div> </div>
</SelectTrigger> </SelectTrigger>
<SelectContent className="min-w-[var(--radix-select-trigger-width)] max-w-[var(--radix-select-trigger-width)]"> <SelectContent className="min-w-(--radix-select-trigger-width) max-w-(--radix-select-trigger-width)">
{projects.length === 0 ? ( {projects.length === 0 ? (
<div className="px-2 py-4 text-center text-sm text-muted-foreground"> <div className="px-2 py-4 text-center text-sm text-muted-foreground">
<p>No projects yet</p> <p>No projects yet</p>
@@ -545,7 +545,7 @@ export function TaskCreationWizard({
{/* Error */} {/* Error */}
{error && ( {error && (
<div className="flex items-start gap-2 rounded-lg bg-destructive/10 border border-destructive/30 p-3 text-sm text-destructive"> <div className="flex items-start gap-2 rounded-lg bg-destructive/10 border border-destructive/30 p-3 text-sm text-destructive">
<X className="h-4 w-4 mt-0.5 flex-shrink-0" /> <X className="h-4 w-4 mt-0.5 shrink-0" />
<span>{error}</span> <span>{error}</span>
</div> </div>
)} )}
@@ -515,7 +515,7 @@ export function TaskEditDialog({ task, open, onOpenChange, onSaved }: TaskEditDi
{/* Error */} {/* Error */}
{error && ( {error && (
<div className="flex items-start gap-2 rounded-lg bg-destructive/10 border border-destructive/30 p-3 text-sm text-destructive"> <div className="flex items-start gap-2 rounded-lg bg-destructive/10 border border-destructive/30 p-3 text-sm text-destructive">
<X className="h-4 w-4 mt-0.5 flex-shrink-0" /> <X className="h-4 w-4 mt-0.5 shrink-0" />
<span>{error}</span> <span>{error}</span>
</div> </div>
)} )}
@@ -267,7 +267,7 @@ export function Step2ConfigureGenerate({
return ( return (
<div className="flex flex-1 overflow-hidden"> <div className="flex flex-1 overflow-hidden">
{/* Left Panel - Configuration */} {/* Left Panel - Configuration */}
<div className="w-80 flex-shrink-0 border-r border-border overflow-y-auto"> <div className="w-80 shrink-0 border-r border-border overflow-y-auto">
<div className="p-6 space-y-6"> <div className="p-6 space-y-6">
{/* Back button and task summary */} {/* Back button and task summary */}
<div className="space-y-4"> <div className="space-y-4">
@@ -82,7 +82,7 @@ export function ChangelogFilters({
const localBranches = branches.filter((b) => !b.isRemote); const localBranches = branches.filter((b) => !b.isRemote);
return ( return (
<div className="w-80 flex-shrink-0 border-r border-border overflow-y-auto"> <div className="w-80 shrink-0 border-r border-border overflow-y-auto">
<div className="p-6 space-y-6"> <div className="p-6 space-y-6">
{/* Source Mode Selection */} {/* Source Mode Selection */}
<div className="space-y-3"> <div className="space-y-3">
@@ -72,7 +72,7 @@ export function GenerationProgressScreen({
return ( return (
<div className="h-full flex flex-col overflow-hidden"> <div className="h-full flex flex-col overflow-hidden">
{/* Header */} {/* Header */}
<div className="flex-shrink-0 border-b border-border p-4 bg-card/50"> <div className="shrink-0 border-b border-border p-4 bg-card/50">
<div className="flex items-start justify-between"> <div className="flex items-start justify-between">
<div> <div>
<div className="flex items-center gap-2 mb-1"> <div className="flex items-center gap-2 mb-1">
@@ -140,7 +140,7 @@ export function GenerationProgressScreen({
{/* Logs Panel (collapsible) */} {/* Logs Panel (collapsible) */}
{showLogs && logs.length > 0 && ( {showLogs && logs.length > 0 && (
<div className="flex-shrink-0 border-b border-border p-4 bg-muted/20"> <div className="shrink-0 border-b border-border p-4 bg-muted/20">
<ScrollArea className="h-32 rounded-md border border-border bg-muted/30"> <ScrollArea className="h-32 rounded-md border border-border bg-muted/30">
<div className="p-3 space-y-1 font-mono text-xs"> <div className="p-3 space-y-1 font-mono text-xs">
{logs.map((log, index) => ( {logs.map((log, index) => (
@@ -38,7 +38,7 @@ export function IdeaDetailPanel({ idea, onClose, onConvert, onGoToTask, onDismis
return ( return (
<div className="fixed inset-y-0 right-0 w-96 bg-card border-l border-border shadow-lg flex flex-col z-50"> <div className="fixed inset-y-0 right-0 w-96 bg-card border-l border-border shadow-lg flex flex-col z-50">
{/* Header */} {/* Header */}
<div className="flex-shrink-0 p-4 border-b border-border"> <div className="shrink-0 p-4 border-b border-border">
<div className="flex items-start justify-between"> <div className="flex items-start justify-between">
<div className="flex-1"> <div className="flex-1">
<div className="flex items-center gap-2 mb-2"> <div className="flex items-center gap-2 mb-2">
@@ -88,7 +88,7 @@ export function IdeaDetailPanel({ idea, onClose, onConvert, onGoToTask, onDismis
{/* Actions */} {/* Actions */}
{!isDismissed && !isConverted && ( {!isDismissed && !isConverted && (
<div className="flex-shrink-0 p-4 border-t border-border space-y-2"> <div className="shrink-0 p-4 border-t border-border space-y-2">
<Button className="w-full" onClick={() => onConvert(idea)}> <Button className="w-full" onClick={() => onConvert(idea)}>
<Play className="h-4 w-4 mr-2" /> <Play className="h-4 w-4 mr-2" />
Convert to Auto-Build Task Convert to Auto-Build Task
@@ -104,7 +104,7 @@ export function IdeaDetailPanel({ idea, onClose, onConvert, onGoToTask, onDismis
</div> </div>
)} )}
{isConverted && idea.taskId && onGoToTask && ( {isConverted && idea.taskId && onGoToTask && (
<div className="flex-shrink-0 p-4 border-t border-border"> <div className="shrink-0 p-4 border-t border-border">
<Button className="w-full" onClick={() => onGoToTask(idea.taskId!)}> <Button className="w-full" onClick={() => onGoToTask(idea.taskId!)}>
<ExternalLink className="h-4 w-4 mr-2" /> <ExternalLink className="h-4 w-4 mr-2" />
Go to Task Go to Task
@@ -11,7 +11,7 @@ interface IdeationFiltersProps {
export function IdeationFilters({ activeTab, onTabChange, children }: IdeationFiltersProps) { export function IdeationFilters({ activeTab, onTabChange, children }: IdeationFiltersProps) {
return ( return (
<Tabs value={activeTab} onValueChange={onTabChange} className="h-full flex flex-col"> <Tabs value={activeTab} onValueChange={onTabChange} className="h-full flex flex-col">
<TabsList className="flex-shrink-0 mx-4 mt-4 flex-wrap h-auto gap-1"> <TabsList className="shrink-0 mx-4 mt-4 flex-wrap h-auto gap-1">
<TabsTrigger value="all">All</TabsTrigger> <TabsTrigger value="all">All</TabsTrigger>
<TabsTrigger value="code_improvements"> <TabsTrigger value="code_improvements">
<Zap className="h-3 w-3 mr-1" /> <Zap className="h-3 w-3 mr-1" />
@@ -32,7 +32,7 @@ export function IdeationHeader({
canAddMore canAddMore
}: IdeationHeaderProps) { }: IdeationHeaderProps) {
return ( return (
<div className="flex-shrink-0 border-b border-border p-4 bg-card/50"> <div className="shrink-0 border-b border-border p-4 bg-card/50">
<div className="flex items-start justify-between"> <div className="flex items-start justify-between">
<div> <div>
<div className="flex items-center gap-2 mb-1"> <div className="flex items-center gap-2 mb-1">
@@ -84,7 +84,7 @@ export function CodeImprovementDetails({ idea }: CodeImprovementDetailsProps) {
<ul className="space-y-1"> <ul className="space-y-1">
{idea.existingPatterns.map((pattern, i) => ( {idea.existingPatterns.map((pattern, i) => (
<li key={i} className="text-sm text-muted-foreground flex items-start gap-2"> <li key={i} className="text-sm text-muted-foreground flex items-start gap-2">
<Circle className="h-3 w-3 mt-1.5 flex-shrink-0" /> <Circle className="h-3 w-3 mt-1.5 shrink-0" />
{pattern} {pattern}
</li> </li>
))} ))}
@@ -111,7 +111,7 @@ export function CompletionStep({
<Card className="border border-success/30 bg-success/10 mb-8"> <Card className="border border-success/30 bg-success/10 mb-8">
<CardContent className="p-5"> <CardContent className="p-5">
<div className="flex items-start gap-4"> <div className="flex items-start gap-4">
<CheckCircle2 className="h-6 w-6 text-success flex-shrink-0 mt-0.5" /> <CheckCircle2 className="h-6 w-6 text-success shrink-0 mt-0.5" />
<div className="flex-1"> <div className="flex-1">
<h3 className="text-lg font-medium text-success"> <h3 className="text-lg font-medium text-success">
Setup Complete Setup Complete
@@ -106,7 +106,7 @@ export function FirstSpecStep({ onNext, onBack, onSkip, onOpenTaskCreator }: Fir
<Card className="border border-success/30 bg-success/10 mb-6"> <Card className="border border-success/30 bg-success/10 mb-6">
<CardContent className="p-5"> <CardContent className="p-5">
<div className="flex items-start gap-4"> <div className="flex items-start gap-4">
<CheckCircle2 className="h-6 w-6 text-success flex-shrink-0 mt-0.5" /> <CheckCircle2 className="h-6 w-6 text-success shrink-0 mt-0.5" />
<div className="flex-1"> <div className="flex-1">
<h3 className="text-lg font-medium text-success"> <h3 className="text-lg font-medium text-success">
Task Creator Opened Task Creator Opened
@@ -143,7 +143,7 @@ export function FirstSpecStep({ onNext, onBack, onSkip, onOpenTaskCreator }: Fir
<Card className="border border-info/30 bg-info/10 mb-8"> <Card className="border border-info/30 bg-info/10 mb-8">
<CardContent className="p-5"> <CardContent className="p-5">
<div className="flex items-start gap-4"> <div className="flex items-start gap-4">
<FileText className="h-5 w-5 text-info flex-shrink-0 mt-0.5" /> <FileText className="h-5 w-5 text-info shrink-0 mt-0.5" />
<div className="flex-1 space-y-2"> <div className="flex-1 space-y-2">
<p className="text-sm font-medium text-foreground"> <p className="text-sm font-medium text-foreground">
Example Task Description: Example Task Description:
@@ -240,7 +240,7 @@ export function GraphitiStep({ onNext, onBack, onSkip }: GraphitiStepProps) {
<Card className="border border-success/30 bg-success/10"> <Card className="border border-success/30 bg-success/10">
<CardContent className="p-6"> <CardContent className="p-6">
<div className="flex items-start gap-4"> <div className="flex items-start gap-4">
<CheckCircle2 className="h-6 w-6 text-success flex-shrink-0 mt-0.5" /> <CheckCircle2 className="h-6 w-6 text-success shrink-0 mt-0.5" />
<div className="flex-1"> <div className="flex-1">
<h3 className="text-lg font-medium text-success"> <h3 className="text-lg font-medium text-success">
Graphiti configured successfully Graphiti configured successfully
@@ -275,7 +275,7 @@ export function GraphitiStep({ onNext, onBack, onSkip }: GraphitiStepProps) {
<Card className="border border-destructive/30 bg-destructive/10"> <Card className="border border-destructive/30 bg-destructive/10">
<CardContent className="p-4"> <CardContent className="p-4">
<div className="flex items-start gap-3"> <div className="flex items-start gap-3">
<AlertCircle className="h-5 w-5 text-destructive flex-shrink-0 mt-0.5" /> <AlertCircle className="h-5 w-5 text-destructive shrink-0 mt-0.5" />
<p className="text-sm text-destructive">{error}</p> <p className="text-sm text-destructive">{error}</p>
</div> </div>
</CardContent> </CardContent>
@@ -287,7 +287,7 @@ export function GraphitiStep({ onNext, onBack, onSkip }: GraphitiStepProps) {
<Card className="border border-warning/30 bg-warning/10"> <Card className="border border-warning/30 bg-warning/10">
<CardContent className="p-4"> <CardContent className="p-4">
<div className="flex items-start gap-3"> <div className="flex items-start gap-3">
<AlertCircle className="h-5 w-5 text-warning flex-shrink-0 mt-0.5" /> <AlertCircle className="h-5 w-5 text-warning shrink-0 mt-0.5" />
<div className="flex-1"> <div className="flex-1">
<p className="text-sm font-medium text-warning"> <p className="text-sm font-medium text-warning">
Docker not detected Docker not detected
@@ -306,7 +306,7 @@ export function GraphitiStep({ onNext, onBack, onSkip }: GraphitiStepProps) {
<Card className="border border-info/30 bg-info/10"> <Card className="border border-info/30 bg-info/10">
<CardContent className="p-5"> <CardContent className="p-5">
<div className="flex items-start gap-4"> <div className="flex items-start gap-4">
<Info className="h-5 w-5 text-info flex-shrink-0 mt-0.5" /> <Info className="h-5 w-5 text-info shrink-0 mt-0.5" />
<div className="flex-1 space-y-3"> <div className="flex-1 space-y-3">
<p className="text-sm font-medium text-foreground"> <p className="text-sm font-medium text-foreground">
What is Graphiti? What is Graphiti?
@@ -146,7 +146,7 @@ export function OAuthStep({ onNext, onBack, onSkip }: OAuthStepProps) {
<Card className="border border-success/30 bg-success/10"> <Card className="border border-success/30 bg-success/10">
<CardContent className="p-6"> <CardContent className="p-6">
<div className="flex items-start gap-4"> <div className="flex items-start gap-4">
<CheckCircle2 className="h-6 w-6 text-success flex-shrink-0 mt-0.5" /> <CheckCircle2 className="h-6 w-6 text-success shrink-0 mt-0.5" />
<div className="flex-1"> <div className="flex-1">
<h3 className="text-lg font-medium text-success"> <h3 className="text-lg font-medium text-success">
{hasExistingToken && !token {hasExistingToken && !token
@@ -182,7 +182,7 @@ export function OAuthStep({ onNext, onBack, onSkip }: OAuthStepProps) {
<Card className="border border-destructive/30 bg-destructive/10"> <Card className="border border-destructive/30 bg-destructive/10">
<CardContent className="p-4"> <CardContent className="p-4">
<div className="flex items-start gap-3"> <div className="flex items-start gap-3">
<AlertCircle className="h-5 w-5 text-destructive flex-shrink-0 mt-0.5" /> <AlertCircle className="h-5 w-5 text-destructive shrink-0 mt-0.5" />
<p className="text-sm text-destructive">{error}</p> <p className="text-sm text-destructive">{error}</p>
</div> </div>
</CardContent> </CardContent>
@@ -193,7 +193,7 @@ export function OAuthStep({ onNext, onBack, onSkip }: OAuthStepProps) {
<Card className="border border-info/30 bg-info/10"> <Card className="border border-info/30 bg-info/10">
<CardContent className="p-5"> <CardContent className="p-5">
<div className="flex items-start gap-4"> <div className="flex items-start gap-4">
<Info className="h-5 w-5 text-info flex-shrink-0 mt-0.5" /> <Info className="h-5 w-5 text-info shrink-0 mt-0.5" />
<div className="flex-1 space-y-3"> <div className="flex-1 space-y-3">
<p className="text-sm font-medium text-foreground"> <p className="text-sm font-medium text-foreground">
How to get a Claude Code OAuth token: How to get a Claude Code OAuth token:
@@ -68,7 +68,7 @@ export function ProjectSettings({ project, open, onOpenChange }: ProjectSettings
return ( return (
<Dialog open={open} onOpenChange={onOpenChange}> <Dialog open={open} onOpenChange={onOpenChange}>
<DialogContent className="sm:max-w-[600px] max-h-[85vh] flex flex-col overflow-hidden"> <DialogContent className="sm:max-w-[600px] max-h-[85vh] flex flex-col overflow-hidden">
<DialogHeader className="flex-shrink-0"> <DialogHeader className="shrink-0">
<DialogTitle className="flex items-center gap-2 text-foreground"> <DialogTitle className="flex items-center gap-2 text-foreground">
<Settings2 className="h-5 w-5" /> <Settings2 className="h-5 w-5" />
Project Settings Project Settings
@@ -160,7 +160,7 @@ export function ProjectSettings({ project, open, onOpenChange }: ProjectSettings
</div> </div>
</div> </div>
<DialogFooter className="flex-shrink-0"> <DialogFooter className="shrink-0">
<Button variant="outline" onClick={() => onOpenChange(false)}> <Button variant="outline" onClick={() => onOpenChange(false)}>
Cancel Cancel
</Button> </Button>
@@ -60,7 +60,7 @@ export function ProjectSelector({
<SelectValue placeholder="Select a project..." className="truncate min-w-0 flex-1" /> <SelectValue placeholder="Select a project..." className="truncate min-w-0 flex-1" />
</div> </div>
</SelectTrigger> </SelectTrigger>
<SelectContent className="min-w-[var(--radix-select-trigger-width)] max-w-[var(--radix-select-trigger-width)]"> <SelectContent className="min-w-(--radix-select-trigger-width) max-w-(--radix-select-trigger-width)">
{projects.length === 0 ? ( {projects.length === 0 ? (
<div className="px-2 py-4 text-center text-sm text-muted-foreground"> <div className="px-2 py-4 text-center text-sm text-muted-foreground">
<p>No projects yet</p> <p>No projects yet</p>
@@ -90,7 +90,7 @@ const SelectContent = React.forwardRef<
className={cn( className={cn(
'p-1 max-h-[300px] overflow-y-auto', 'p-1 max-h-[300px] overflow-y-auto',
position === 'popper' && position === 'popper' &&
'w-full min-w-[var(--radix-select-trigger-width)]' 'w-full min-w-(--radix-select-trigger-width)'
)} )}
> >
{children} {children}