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,81 @@
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const HTMLElement_js_1 = __importDefault(require("../html-element/HTMLElement.cjs"));
/**
* HTMLOListElement
*
* @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLOListElement
*/
class HTMLOListElement extends HTMLElement_js_1.default {
/**
* Returns reversed.
*
* @returns Reversed.
*/
get reversed() {
return this.getAttribute('reversed') !== null;
}
/**
* Sets reversed.
*
* @param reversed Reversed.
*/
set reversed(reversed) {
if (!reversed) {
this.removeAttribute('reversed');
}
else {
this.setAttribute('reversed', '');
}
}
/**
* Returns start.
*
* @returns Start.
*/
get start() {
if (!this.hasAttribute('start')) {
return 1;
}
const parsedValue = Number(this.getAttribute('start') || '');
if (isNaN(parsedValue)) {
return 1;
}
return parsedValue;
}
/**
* Sets start.
*
* @param start Start.
*/
set start(start) {
if (typeof start !== 'number') {
start = Number(start);
}
if (isNaN(start)) {
start = 0;
}
this.setAttribute('start', String(start));
}
/**
* Returns type.
*
* @returns Type.
*/
get type() {
return this.getAttribute('type') || '';
}
/**
* Sets type.
*
* @param type Type.
*/
set type(type) {
this.setAttribute('type', type);
}
}
exports.default = HTMLOListElement;
//# sourceMappingURL=HTMLOListElement.cjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"HTMLOListElement.cjs","sourceRoot":"","sources":["../../../src/nodes/html-o-list-element/HTMLOListElement.ts"],"names":[],"mappings":";;;;;AAAA,oFAAyD;AACzD;;;;GAIG;AACH,MAAqB,gBAAiB,SAAQ,wBAAW;IACxD;;;;OAIG;IACH,IAAW,QAAQ;QAClB,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;IAC/C,CAAC;IAED;;;;OAIG;IACH,IAAW,QAAQ,CAAC,QAAiB;QACpC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACf,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QAClC,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QACnC,CAAC;IACF,CAAC;IAED;;;;OAIG;IACH,IAAW,KAAK;QACf,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;YACjC,OAAO,CAAC,CAAC;QACV,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAE7D,IAAI,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,CAAC;QACV,CAAC;QAED,OAAO,WAAW,CAAC;IACpB,CAAC;IAED;;;;OAIG;IACH,IAAW,KAAK,CAAC,KAAa;QAC7B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC/B,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;QAED,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YAClB,KAAK,GAAG,CAAC,CAAC;QACX,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3C,CAAC;IAED;;;;OAIG;IACH,IAAW,IAAI;QACd,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACxC,CAAC;IAED;;;;OAIG;IACH,IAAW,IAAI,CAAC,IAAY;QAC3B,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACjC,CAAC;CACD;AA5ED,mCA4EC"}

View File

@@ -0,0 +1,45 @@
import HTMLElement from '../html-element/HTMLElement.cjs';
/**
* HTMLOListElement
*
* @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLOListElement
*/
export default class HTMLOListElement extends HTMLElement {
/**
* Returns reversed.
*
* @returns Reversed.
*/
get reversed(): boolean;
/**
* Sets reversed.
*
* @param reversed Reversed.
*/
set reversed(reversed: boolean);
/**
* Returns start.
*
* @returns Start.
*/
get start(): number;
/**
* Sets start.
*
* @param start Start.
*/
set start(start: number);
/**
* Returns type.
*
* @returns Type.
*/
get type(): string;
/**
* Sets type.
*
* @param type Type.
*/
set type(type: string);
}
//# sourceMappingURL=HTMLOListElement.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"HTMLOListElement.d.ts","sourceRoot":"","sources":["../../../src/nodes/html-o-list-element/HTMLOListElement.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,gCAAgC,CAAC;AACzD;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,WAAW;IACxD;;;;OAIG;IACH,IAAW,QAAQ,IAAI,OAAO,CAE7B;IAED;;;;OAIG;IACH,IAAW,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAMpC;IAED;;;;OAIG;IACH,IAAW,KAAK,IAAI,MAAM,CAYzB;IAED;;;;OAIG;IACH,IAAW,KAAK,CAAC,KAAK,EAAE,MAAM,EAU7B;IAED;;;;OAIG;IACH,IAAW,IAAI,IAAI,MAAM,CAExB;IAED;;;;OAIG;IACH,IAAW,IAAI,CAAC,IAAI,EAAE,MAAM,EAE3B;CACD"}