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

3
frontend/node_modules/totalist/sync/index.d.ts generated vendored Normal file
View File

@@ -0,0 +1,3 @@
import { Stats } from 'fs';
export type Caller = (relPath: string, absPath: string, stats: Stats) => any;
export function totalist(dir: string, callback: Caller, prefix?: string): void;

17
frontend/node_modules/totalist/sync/index.js generated vendored Normal file
View File

@@ -0,0 +1,17 @@
const { join, resolve } = require('path');
const { readdirSync, statSync } = require('fs');
function totalist(dir, callback, pre='') {
dir = resolve('.', dir);
let arr = readdirSync(dir);
let i=0, abs, stats;
for (; i < arr.length; i++) {
abs = join(dir, arr[i]);
stats = statSync(abs);
stats.isDirectory()
? totalist(abs, callback, join(pre, arr[i]))
: callback(join(pre, arr[i]), abs, stats);
}
}
exports.totalist = totalist;

15
frontend/node_modules/totalist/sync/index.mjs generated vendored Normal file
View File

@@ -0,0 +1,15 @@
import { join, resolve } from 'path';
import { readdirSync, statSync } from 'fs';
export function totalist(dir, callback, pre='') {
dir = resolve('.', dir);
let arr = readdirSync(dir);
let i=0, abs, stats;
for (; i < arr.length; i++) {
abs = join(dir, arr[i]);
stats = statSync(abs);
stats.isDirectory()
? totalist(abs, callback, join(pre, arr[i]))
: callback(join(pre, arr[i]), abs, stats);
}
}