feat: Reinitialize frontend with SvelteKit and TypeScript

- Delete old Vite+Svelte frontend
- Initialize new SvelteKit project with TypeScript
- Configure Tailwind CSS v4 + DaisyUI
- Implement JWT authentication with auto-refresh
- Create login page with form validation (Zod)
- Add protected route guards
- Update Docker configuration for single-stage build
- Add E2E tests with Playwright (6/11 passing)
- Fix Svelte 5 reactivity with $state() runes

Known issues:
- 5 E2E tests failing (timing/async issues)
- Token refresh implementation needs debugging
- Validation error display timing
This commit is contained in:
2026-02-17 16:19:59 -05:00
parent 54df6018f5
commit de2d83092e
28274 changed files with 3816354 additions and 90 deletions

View File

@@ -0,0 +1,7 @@
import type { Linter } from 'eslint';
export * as meta from '../meta.js';
/** preprocess */
export declare function preprocess(code: string, filename: string): string[];
/** postprocess */
export declare function postprocess([messages]: Linter.LintMessage[][], filename: string): Linter.LintMessage[];
export declare const supportsAutofix = true;

View File

@@ -0,0 +1,29 @@
import { beginShared, terminateShared } from '../shared/index.js';
export * as meta from '../meta.js';
/** preprocess */
export function preprocess(code, filename) {
if (filename) {
beginShared(filename);
}
return [code];
}
/** postprocess */
export function postprocess([messages], filename) {
const shared = terminateShared(filename);
if (shared) {
return filter(messages, shared);
}
return messages;
}
export const supportsAutofix = true;
/** Filter */
function filter(messages, shared) {
if (shared.commentDirectives.length === 0) {
return messages;
}
let filteredMessages = messages;
for (const cd of shared.commentDirectives) {
filteredMessages = cd.filterMessages(filteredMessages);
}
return filteredMessages;
}