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,13 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var BrowserErrorCaptureEnum;
(function (BrowserErrorCaptureEnum) {
/** Happy DOM use try and catch when evaluating code, but will not be able to catch all errors and Promise rejections. This will decrease performance as using try and catch makes the execution significally slower. This is the default setting. */
BrowserErrorCaptureEnum["tryAndCatch"] = "tryAndCatch";
/** Happy DOM will add an event listener to the Node.js process to catch all errors and Promise rejections. This will not work in Jest and Vitest as it conflicts with their error listeners. */
BrowserErrorCaptureEnum["processLevel"] = "processLevel";
/** Error capturing is disabled. Errors and Promise rejections will be thrown. */
BrowserErrorCaptureEnum["disabled"] = "disabled";
})(BrowserErrorCaptureEnum || (BrowserErrorCaptureEnum = {}));
exports.default = BrowserErrorCaptureEnum;
//# sourceMappingURL=BrowserErrorCaptureEnum.cjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"BrowserErrorCaptureEnum.cjs","sourceRoot":"","sources":["../../../src/browser/enums/BrowserErrorCaptureEnum.ts"],"names":[],"mappings":";;AAAA,IAAK,uBAOJ;AAPD,WAAK,uBAAuB;IAC3B,qPAAqP;IACrP,sDAA2B,CAAA;IAC3B,gMAAgM;IAChM,wDAA6B,CAAA;IAC7B,iFAAiF;IACjF,gDAAqB,CAAA;AACtB,CAAC,EAPI,uBAAuB,KAAvB,uBAAuB,QAO3B;AAED,kBAAe,uBAAuB,CAAC"}

View File

@@ -0,0 +1,10 @@
declare enum BrowserErrorCaptureEnum {
/** Happy DOM use try and catch when evaluating code, but will not be able to catch all errors and Promise rejections. This will decrease performance as using try and catch makes the execution significally slower. This is the default setting. */
tryAndCatch = "tryAndCatch",
/** Happy DOM will add an event listener to the Node.js process to catch all errors and Promise rejections. This will not work in Jest and Vitest as it conflicts with their error listeners. */
processLevel = "processLevel",
/** Error capturing is disabled. Errors and Promise rejections will be thrown. */
disabled = "disabled"
}
export default BrowserErrorCaptureEnum;
//# sourceMappingURL=BrowserErrorCaptureEnum.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"BrowserErrorCaptureEnum.d.ts","sourceRoot":"","sources":["../../../src/browser/enums/BrowserErrorCaptureEnum.ts"],"names":[],"mappings":"AAAA,aAAK,uBAAuB;IAC3B,qPAAqP;IACrP,WAAW,gBAAgB;IAC3B,gMAAgM;IAChM,YAAY,iBAAiB;IAC7B,iFAAiF;IACjF,QAAQ,aAAa;CACrB;AAED,eAAe,uBAAuB,CAAC"}

View File

@@ -0,0 +1,13 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var BrowserNavigationCrossOriginPolicyEnum;
(function (BrowserNavigationCrossOriginPolicyEnum) {
/** The browser can navigate to any origin. */
BrowserNavigationCrossOriginPolicyEnum["anyOrigin"] = "anyOrigin";
/** The browser can only navigate to the same origin as the current page or its parent. */
BrowserNavigationCrossOriginPolicyEnum["sameOrigin"] = "sameOrigin";
/** The browser can never navigate from a secure protocol (https) to an unsecure protocol (http), but it can always navigate to a secure (https). */
BrowserNavigationCrossOriginPolicyEnum["strictOrigin"] = "strictOrigin";
})(BrowserNavigationCrossOriginPolicyEnum || (BrowserNavigationCrossOriginPolicyEnum = {}));
exports.default = BrowserNavigationCrossOriginPolicyEnum;
//# sourceMappingURL=BrowserNavigationCrossOriginPolicyEnum.cjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"BrowserNavigationCrossOriginPolicyEnum.cjs","sourceRoot":"","sources":["../../../src/browser/enums/BrowserNavigationCrossOriginPolicyEnum.ts"],"names":[],"mappings":";;AAAA,IAAK,sCAOJ;AAPD,WAAK,sCAAsC;IAC1C,8CAA8C;IAC9C,iEAAuB,CAAA;IACvB,0FAA0F;IAC1F,mEAAyB,CAAA;IACzB,oJAAoJ;IACpJ,uEAA6B,CAAA;AAC9B,CAAC,EAPI,sCAAsC,KAAtC,sCAAsC,QAO1C;AAED,kBAAe,sCAAsC,CAAC"}

View File

@@ -0,0 +1,10 @@
declare enum BrowserNavigationCrossOriginPolicyEnum {
/** The browser can navigate to any origin. */
anyOrigin = "anyOrigin",
/** The browser can only navigate to the same origin as the current page or its parent. */
sameOrigin = "sameOrigin",
/** The browser can never navigate from a secure protocol (https) to an unsecure protocol (http), but it can always navigate to a secure (https). */
strictOrigin = "strictOrigin"
}
export default BrowserNavigationCrossOriginPolicyEnum;
//# sourceMappingURL=BrowserNavigationCrossOriginPolicyEnum.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"BrowserNavigationCrossOriginPolicyEnum.d.ts","sourceRoot":"","sources":["../../../src/browser/enums/BrowserNavigationCrossOriginPolicyEnum.ts"],"names":[],"mappings":"AAAA,aAAK,sCAAsC;IAC1C,8CAA8C;IAC9C,SAAS,cAAc;IACvB,0FAA0F;IAC1F,UAAU,eAAe;IACzB,oJAAoJ;IACpJ,YAAY,iBAAiB;CAC7B;AAED,eAAe,sCAAsC,CAAC"}