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,35 @@
import NodeList from '../node/NodeList.js';
import * as PropertySymbol from '../../PropertySymbol.js';
/**
* Utility for finding labels associated with a form element.
*/
export default class HTMLLabelElementUtility {
/**
* Returns label elements for a form element.
*
* @param element Element to get labels for.
* @returns Label elements.
*/
static getAssociatedLabelElements(element) {
const id = element.id;
let labels;
if (id && element[PropertySymbol.isConnected]) {
const rootNode = element[PropertySymbol.rootNode] ||
element[PropertySymbol.ownerDocument];
labels = (rootNode.querySelectorAll(`label[for="${id}"]`)[PropertySymbol.items]);
}
else {
labels = [];
}
let parent = element[PropertySymbol.parentNode];
while (parent) {
if (parent['tagName'] === 'LABEL') {
labels.push(parent);
break;
}
parent = parent[PropertySymbol.parentNode];
}
return new NodeList(PropertySymbol.illegalConstructor, labels);
}
}
//# sourceMappingURL=HTMLLabelElementUtility.js.map