- Frontend-Aufbau für Meldestelle KMP

- Network Layer
- Shared Foundation
- Service Layer and API Integration
- Test-Fix und Development Screen
- WASM-Js Test-Implementation
- Build-Konfiguration reparieren
This commit is contained in:
2025-10-06 22:54:32 +02:00
parent 389e612e88
commit d462f98e05
42 changed files with 3064 additions and 741 deletions
@@ -0,0 +1,2 @@
actual fun isDevelopmentMode(): Boolean =
kotlinx.browser.window.location.hostname == "localhost"
+12 -4
View File
@@ -1,13 +1,21 @@
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.window.ComposeViewport
import at.mocode.clients.app.App
import kotlinx.browser.document
import kotlinx.browser.window
import org.w3c.dom.HTMLElement
@OptIn(ExperimentalComposeUiApi::class)
fun main() {
val root = document.getElementById("ComposeTarget") as HTMLElement
ComposeViewport(root) {
App()
window.onload = {
try {
val root = document.getElementById("ComposeTarget") as HTMLElement
ComposeViewport(root) {
MainApp()
}
} catch (e: Exception) {
console.error("Failed to start Compose Web app", e)
document.getElementById("root")?.innerHTML =
"<div style='padding: 50px; text-align: center;'>❌ Failed to load app: ${e.message}</div>"
}
}
}
+31 -22
View File
@@ -1,30 +1,39 @@
<!DOCTYPE html>
<html lang="en">
<html lang="de">
<head>
<meta charset="UTF-8">
<title>Meldestelle - Web Development</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Meldestelle</title>
<meta name="theme-color" content="#0f172a">
<link type="text/css" rel="stylesheet" href="styles.css">
<link rel="manifest" href="manifest.webmanifest">
<link rel="icon" href="icons/icon-192.png" type="image/png">
<style>
body {
margin: 0;
padding: 0;
font-family: system-ui, -apple-system, sans-serif;
background: #fafafa;
}
#ComposeTarget {
width: 100vw;
height: 100vh;
}
#root {
width: 100vw;
height: 100vh;
}
.loading {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
font-size: 18px;
color: #666;
}
</style>
</head>
<body>
<div id="ComposeTarget"></div>
<script src="web-app.js"></script>
<script>
if ('serviceWorker' in navigator) {
const isLocalhost = ['localhost', '127.0.0.1', '::1'].includes(location.hostname);
if (isLocalhost) {
navigator.serviceWorker.getRegistrations().then(regs => {
for (const reg of regs) reg.unregister();
}).catch(console.error);
} else {
window.addEventListener('load', () => {
navigator.serviceWorker.register('sw.js').catch(console.error);
});
}
}
</script>
<div id="root">
<canvas id="ComposeTarget"></canvas>
<div class="loading">🚀 Loading Meldestelle...</div>
</div>
<script src="web-app.js"></script>
</body>
</html>