From c94127acf194153f9366a9a8f7f261cc136f7ad5 Mon Sep 17 00:00:00 2001 From: Valentin Heiserer <73257760+Vale54321@users.noreply.github.com> Date: Thu, 18 Apr 2024 00:26:11 +0200 Subject: [PATCH] split Project into multiple Modules to prepare for development of Servers --- .github/workflows/relaseNewVersion.yml | 3 - Backend/pom.xml | 46 ++------------ Backend/schafkopf-client/pom.xml | 60 ++++++++++++++++++ .../java/org/schafkopf/BackendServer.java | 22 +++---- .../java/org/schafkopf/FrontendEndpoint.java | 0 .../schafkopf/FrontendEndpointCreator.java | 0 .../main/java/org/schafkopf/GameState.java | 0 .../main/java/org/schafkopf/Schafkopf.java | 0 .../main/java/org/schafkopf/Spielablauf.java | 0 .../org/schafkopf/cardreader/CardReader.java | 0 .../schafkopf/cardreader/UsbCardReader.java | 0 .../java/org/schafkopf/player/BotPlayer.java | 0 .../org/schafkopf/player/LocalPlayer.java | 0 .../java/org/schafkopf/player/Player.java | 0 .../spielcontroller/FarbGeierController.java | 0 .../spielcontroller/FarbSoloController.java | 0 .../spielcontroller/FarbWenzController.java | 0 .../spielcontroller/GeierController.java | 0 .../spielcontroller/GeierWenzController.java | 0 .../spielcontroller/SauSpielController.java | 0 .../spielcontroller/SoloController.java | 0 .../spielcontroller/SpielController.java | 0 .../spielcontroller/StandardController.java | 0 .../spielcontroller/WenzController.java | 0 .../resources/web-content/assets/blatt_6.png | Bin .../resources/web-content/assets/blatt_7.png | Bin .../resources/web-content/assets/blatt_8.png | Bin .../resources/web-content/assets/blatt_9.png | Bin .../resources/web-content/assets/blatt_a.png | Bin .../resources/web-content/assets/blatt_k.png | Bin .../resources/web-content/assets/blatt_o.png | Bin .../resources/web-content/assets/blatt_u.png | Bin .../resources/web-content/assets/blatt_x.png | Bin .../web-content/assets/card_back.png | Bin .../resources/web-content/assets/eichel_6.png | Bin .../resources/web-content/assets/eichel_7.png | Bin .../resources/web-content/assets/eichel_8.png | Bin .../resources/web-content/assets/eichel_9.png | Bin .../resources/web-content/assets/eichel_a.png | Bin .../resources/web-content/assets/eichel_k.png | Bin .../resources/web-content/assets/eichel_o.png | Bin .../resources/web-content/assets/eichel_u.png | Bin .../resources/web-content/assets/eichel_x.png | Bin .../resources/web-content/assets/herz_6.png | Bin .../resources/web-content/assets/herz_7.png | Bin .../resources/web-content/assets/herz_8.png | Bin .../resources/web-content/assets/herz_9.png | Bin .../resources/web-content/assets/herz_a.png | Bin .../resources/web-content/assets/herz_k.png | Bin .../resources/web-content/assets/herz_o.png | Bin .../resources/web-content/assets/herz_u.png | Bin .../resources/web-content/assets/herz_x.png | Bin .../web-content/assets/index-8PJRhba5.css | 1 + .../resources/web-content/assets/schell_6.png | Bin .../resources/web-content/assets/schell_7.png | Bin .../resources/web-content/assets/schell_8.png | Bin .../resources/web-content/assets/schell_9.png | Bin .../resources/web-content/assets/schell_a.png | Bin .../resources/web-content/assets/schell_k.png | Bin .../resources/web-content/assets/schell_o.png | Bin .../resources/web-content/assets/schell_u.png | Bin .../resources/web-content/assets/schell_x.png | Bin .../src/main/resources/web-content/index.html | 13 ++++ Backend/schafkopf-server/pom.xml | 55 ++++++++++++++++ .../src/main/java/org/schafkopf/Main.java | 18 ++++++ Backend/schafkopf-shared/pom.xml | 20 ++++++ .../main/java/org/schafkopf/karte/Karte.java | 0 .../java/org/schafkopf/karte/KartenFarbe.java | 0 .../java/org/schafkopf/karte/KartenListe.java | 0 .../org/schafkopf/karte/KartenSymbol.java | 0 .../java/org/schafkopf/karte/KartenUtil.java | 0 .../main/java/org/schafkopf/JavaFxApp.java | 50 --------------- .../web-content/assets/index-08f560d4.css | 1 - .../web-content/assets/index-6278b98f.js | 17 ----- .../main/resources/web-content/assets/vue.svg | 1 - .../src/main/resources/web-content/index.html | 15 ----- Frontend/package.json | 2 +- Frontend/src/App.vue | 24 +++---- Frontend/vite.config.ts | 7 +- 79 files changed, 200 insertions(+), 155 deletions(-) create mode 100644 Backend/schafkopf-client/pom.xml rename Backend/{ => schafkopf-client}/src/main/java/org/schafkopf/BackendServer.java (93%) rename Backend/{ => schafkopf-client}/src/main/java/org/schafkopf/FrontendEndpoint.java (100%) rename Backend/{ => schafkopf-client}/src/main/java/org/schafkopf/FrontendEndpointCreator.java (100%) rename Backend/{ => schafkopf-client}/src/main/java/org/schafkopf/GameState.java (100%) rename Backend/{ => schafkopf-client}/src/main/java/org/schafkopf/Schafkopf.java (100%) rename Backend/{ => schafkopf-client}/src/main/java/org/schafkopf/Spielablauf.java (100%) rename Backend/{ => schafkopf-client}/src/main/java/org/schafkopf/cardreader/CardReader.java (100%) rename Backend/{ => schafkopf-client}/src/main/java/org/schafkopf/cardreader/UsbCardReader.java (100%) rename Backend/{ => schafkopf-client}/src/main/java/org/schafkopf/player/BotPlayer.java (100%) rename Backend/{ => schafkopf-client}/src/main/java/org/schafkopf/player/LocalPlayer.java (100%) rename Backend/{ => schafkopf-client}/src/main/java/org/schafkopf/player/Player.java (100%) rename Backend/{ => schafkopf-client}/src/main/java/org/schafkopf/spielcontroller/FarbGeierController.java (100%) rename Backend/{ => schafkopf-client}/src/main/java/org/schafkopf/spielcontroller/FarbSoloController.java (100%) rename Backend/{ => schafkopf-client}/src/main/java/org/schafkopf/spielcontroller/FarbWenzController.java (100%) rename Backend/{ => schafkopf-client}/src/main/java/org/schafkopf/spielcontroller/GeierController.java (100%) rename Backend/{ => schafkopf-client}/src/main/java/org/schafkopf/spielcontroller/GeierWenzController.java (100%) rename Backend/{ => schafkopf-client}/src/main/java/org/schafkopf/spielcontroller/SauSpielController.java (100%) rename Backend/{ => schafkopf-client}/src/main/java/org/schafkopf/spielcontroller/SoloController.java (100%) rename Backend/{ => schafkopf-client}/src/main/java/org/schafkopf/spielcontroller/SpielController.java (100%) rename Backend/{ => schafkopf-client}/src/main/java/org/schafkopf/spielcontroller/StandardController.java (100%) rename Backend/{ => schafkopf-client}/src/main/java/org/schafkopf/spielcontroller/WenzController.java (100%) rename Backend/{ => schafkopf-client}/src/main/resources/web-content/assets/blatt_6.png (100%) rename Backend/{ => schafkopf-client}/src/main/resources/web-content/assets/blatt_7.png (100%) rename Backend/{ => schafkopf-client}/src/main/resources/web-content/assets/blatt_8.png (100%) rename Backend/{ => schafkopf-client}/src/main/resources/web-content/assets/blatt_9.png (100%) rename Backend/{ => schafkopf-client}/src/main/resources/web-content/assets/blatt_a.png (100%) rename Backend/{ => schafkopf-client}/src/main/resources/web-content/assets/blatt_k.png (100%) rename Backend/{ => schafkopf-client}/src/main/resources/web-content/assets/blatt_o.png (100%) rename Backend/{ => schafkopf-client}/src/main/resources/web-content/assets/blatt_u.png (100%) rename Backend/{ => schafkopf-client}/src/main/resources/web-content/assets/blatt_x.png (100%) rename Backend/{ => schafkopf-client}/src/main/resources/web-content/assets/card_back.png (100%) rename Backend/{ => schafkopf-client}/src/main/resources/web-content/assets/eichel_6.png (100%) rename Backend/{ => schafkopf-client}/src/main/resources/web-content/assets/eichel_7.png (100%) rename Backend/{ => schafkopf-client}/src/main/resources/web-content/assets/eichel_8.png (100%) rename Backend/{ => schafkopf-client}/src/main/resources/web-content/assets/eichel_9.png (100%) rename Backend/{ => schafkopf-client}/src/main/resources/web-content/assets/eichel_a.png (100%) rename Backend/{ => schafkopf-client}/src/main/resources/web-content/assets/eichel_k.png (100%) rename Backend/{ => schafkopf-client}/src/main/resources/web-content/assets/eichel_o.png (100%) rename Backend/{ => schafkopf-client}/src/main/resources/web-content/assets/eichel_u.png (100%) rename Backend/{ => schafkopf-client}/src/main/resources/web-content/assets/eichel_x.png (100%) rename Backend/{ => schafkopf-client}/src/main/resources/web-content/assets/herz_6.png (100%) rename Backend/{ => schafkopf-client}/src/main/resources/web-content/assets/herz_7.png (100%) rename Backend/{ => schafkopf-client}/src/main/resources/web-content/assets/herz_8.png (100%) rename Backend/{ => schafkopf-client}/src/main/resources/web-content/assets/herz_9.png (100%) rename Backend/{ => schafkopf-client}/src/main/resources/web-content/assets/herz_a.png (100%) rename Backend/{ => schafkopf-client}/src/main/resources/web-content/assets/herz_k.png (100%) rename Backend/{ => schafkopf-client}/src/main/resources/web-content/assets/herz_o.png (100%) rename Backend/{ => schafkopf-client}/src/main/resources/web-content/assets/herz_u.png (100%) rename Backend/{ => schafkopf-client}/src/main/resources/web-content/assets/herz_x.png (100%) create mode 100644 Backend/schafkopf-client/src/main/resources/web-content/assets/index-8PJRhba5.css rename Backend/{ => schafkopf-client}/src/main/resources/web-content/assets/schell_6.png (100%) rename Backend/{ => schafkopf-client}/src/main/resources/web-content/assets/schell_7.png (100%) rename Backend/{ => schafkopf-client}/src/main/resources/web-content/assets/schell_8.png (100%) rename Backend/{ => schafkopf-client}/src/main/resources/web-content/assets/schell_9.png (100%) rename Backend/{ => schafkopf-client}/src/main/resources/web-content/assets/schell_a.png (100%) rename Backend/{ => schafkopf-client}/src/main/resources/web-content/assets/schell_k.png (100%) rename Backend/{ => schafkopf-client}/src/main/resources/web-content/assets/schell_o.png (100%) rename Backend/{ => schafkopf-client}/src/main/resources/web-content/assets/schell_u.png (100%) rename Backend/{ => schafkopf-client}/src/main/resources/web-content/assets/schell_x.png (100%) create mode 100644 Backend/schafkopf-client/src/main/resources/web-content/index.html create mode 100644 Backend/schafkopf-server/pom.xml create mode 100644 Backend/schafkopf-server/src/main/java/org/schafkopf/Main.java create mode 100644 Backend/schafkopf-shared/pom.xml rename Backend/{ => schafkopf-shared}/src/main/java/org/schafkopf/karte/Karte.java (100%) rename Backend/{ => schafkopf-shared}/src/main/java/org/schafkopf/karte/KartenFarbe.java (100%) rename Backend/{ => schafkopf-shared}/src/main/java/org/schafkopf/karte/KartenListe.java (100%) rename Backend/{ => schafkopf-shared}/src/main/java/org/schafkopf/karte/KartenSymbol.java (100%) rename Backend/{ => schafkopf-shared}/src/main/java/org/schafkopf/karte/KartenUtil.java (100%) delete mode 100644 Backend/src/main/java/org/schafkopf/JavaFxApp.java delete mode 100644 Backend/src/main/resources/web-content/assets/index-08f560d4.css delete mode 100644 Backend/src/main/resources/web-content/assets/index-6278b98f.js delete mode 100644 Backend/src/main/resources/web-content/assets/vue.svg delete mode 100644 Backend/src/main/resources/web-content/index.html diff --git a/.github/workflows/relaseNewVersion.yml b/.github/workflows/relaseNewVersion.yml index 97f01bc..9de602d 100644 --- a/.github/workflows/relaseNewVersion.yml +++ b/.github/workflows/relaseNewVersion.yml @@ -33,9 +33,6 @@ jobs: - name: Build Frontend run: npm run build working-directory: Frontend - - - name: Copy built Frontend - run: rm -r Backend/src/main/resources/web-content/ && mv Frontend/dist Backend/src/main/resources/web-content - name: Set up JDK 21 uses: actions/setup-java@v4 diff --git a/Backend/pom.xml b/Backend/pom.xml index d6ea14f..174beb4 100644 --- a/Backend/pom.xml +++ b/Backend/pom.xml @@ -4,7 +4,13 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> schafkopf-backend-java - org.example + pom + + schafkopf-client + schafkopf-server + schafkopf-shared + + org.schafkopf 4.0.0 1.0-SNAPSHOT @@ -20,11 +26,6 @@ schafkopf-backend-build - - - src/main/resources - - @@ -82,29 +83,6 @@ - - maven-assembly-plugin - 3.3.0 - - - jar-with-dependencies - - - - org.schafkopf.BackendServer - - - - - - make-assembly - package - - single - - - - @@ -157,15 +135,5 @@ io.github.cdimascio 3.0.0 - - org.openjfx - javafx-controls - 22 - - - org.openjfx - javafx-web - 22 - \ No newline at end of file diff --git a/Backend/schafkopf-client/pom.xml b/Backend/schafkopf-client/pom.xml new file mode 100644 index 0000000..a474cd5 --- /dev/null +++ b/Backend/schafkopf-client/pom.xml @@ -0,0 +1,60 @@ + + + 4.0.0 + + org.schafkopf + schafkopf-backend-java + 1.0-SNAPSHOT + + + schafkopf-client + + + 21 + 21 + UTF-8 + + + + org.schafkopf + schafkopf-shared + 1.0-SNAPSHOT + compile + + + + schafkopf-client-build + + + src/main/resources + + + + + maven-assembly-plugin + 3.3.0 + + + jar-with-dependencies + + + + org.schafkopf.BackendServer + + + + + + make-assembly + package + + single + + + + + + + \ No newline at end of file diff --git a/Backend/src/main/java/org/schafkopf/BackendServer.java b/Backend/schafkopf-client/src/main/java/org/schafkopf/BackendServer.java similarity index 93% rename from Backend/src/main/java/org/schafkopf/BackendServer.java rename to Backend/schafkopf-client/src/main/java/org/schafkopf/BackendServer.java index 97329af..0eb37e0 100644 --- a/Backend/src/main/java/org/schafkopf/BackendServer.java +++ b/Backend/schafkopf-client/src/main/java/org/schafkopf/BackendServer.java @@ -4,26 +4,26 @@ import com.google.gson.JsonObject; import com.sun.net.httpserver.HttpExchange; import com.sun.net.httpserver.HttpHandler; import com.sun.net.httpserver.HttpServer; -import io.github.cdimascio.dotenv.Dotenv; import jakarta.servlet.DispatcherType; +import java.awt.Desktop; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.InetSocketAddress; +import java.net.URI; +import java.net.URISyntaxException; import java.net.URL; import java.time.Duration; import java.util.ArrayList; import java.util.EnumSet; import java.util.List; import java.util.concurrent.CountDownLatch; -import javafx.application.Application; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.ServerConnector; import org.eclipse.jetty.servlet.FilterHolder; import org.eclipse.jetty.servlet.ServletContextHandler; import org.eclipse.jetty.servlets.CrossOriginFilter; import org.eclipse.jetty.websocket.server.config.JettyWebSocketServletContainerInitializer; -import org.schafkopf.cardreader.CardReader; import org.schafkopf.cardreader.UsbCardReader; /** Main Class that represents the Backend Server. */ @@ -37,14 +37,12 @@ public class BackendServer { /** Important variables. */ public final Schafkopf schafkopfGame; - private final CardReader nfcLeser; private final List frontendEndpoints = new ArrayList<>(); /** Creates an Instance of the Backend Server. */ - public BackendServer() { - Dotenv dotenv = Dotenv.configure().directory("./").load(); + public BackendServer() throws URISyntaxException, IOException { server = new Server(); - InetSocketAddress address = new InetSocketAddress(dotenv.get("VITE_APP_WEBSOCKET_IP"), 8080); + InetSocketAddress address = new InetSocketAddress("localhost", 8080); connector = new ServerConnector(server); connector.setHost(address.getHostName()); connector.setPort(address.getPort()); @@ -52,8 +50,7 @@ public class BackendServer { schafkopfGame = new Schafkopf(this); - - nfcLeser = new UsbCardReader(this); + new UsbCardReader(this); // Setup the basic application "context" for this application at "/" // This is also known as the handler tree (in jetty speak) @@ -87,11 +84,8 @@ public class BackendServer { // Integrate simple HTTP server startHttpServer(); - new Thread(this::launchJavaFx).start(); - } - - private void launchJavaFx() { - Application.launch(JavaFxApp.class); + URI uri = new URI("http://localhost:8081"); // Replace with your target URL + Desktop.getDesktop().browse(uri); } private void startHttpServer() { diff --git a/Backend/src/main/java/org/schafkopf/FrontendEndpoint.java b/Backend/schafkopf-client/src/main/java/org/schafkopf/FrontendEndpoint.java similarity index 100% rename from Backend/src/main/java/org/schafkopf/FrontendEndpoint.java rename to Backend/schafkopf-client/src/main/java/org/schafkopf/FrontendEndpoint.java diff --git a/Backend/src/main/java/org/schafkopf/FrontendEndpointCreator.java b/Backend/schafkopf-client/src/main/java/org/schafkopf/FrontendEndpointCreator.java similarity index 100% rename from Backend/src/main/java/org/schafkopf/FrontendEndpointCreator.java rename to Backend/schafkopf-client/src/main/java/org/schafkopf/FrontendEndpointCreator.java diff --git a/Backend/src/main/java/org/schafkopf/GameState.java b/Backend/schafkopf-client/src/main/java/org/schafkopf/GameState.java similarity index 100% rename from Backend/src/main/java/org/schafkopf/GameState.java rename to Backend/schafkopf-client/src/main/java/org/schafkopf/GameState.java diff --git a/Backend/src/main/java/org/schafkopf/Schafkopf.java b/Backend/schafkopf-client/src/main/java/org/schafkopf/Schafkopf.java similarity index 100% rename from Backend/src/main/java/org/schafkopf/Schafkopf.java rename to Backend/schafkopf-client/src/main/java/org/schafkopf/Schafkopf.java diff --git a/Backend/src/main/java/org/schafkopf/Spielablauf.java b/Backend/schafkopf-client/src/main/java/org/schafkopf/Spielablauf.java similarity index 100% rename from Backend/src/main/java/org/schafkopf/Spielablauf.java rename to Backend/schafkopf-client/src/main/java/org/schafkopf/Spielablauf.java diff --git a/Backend/src/main/java/org/schafkopf/cardreader/CardReader.java b/Backend/schafkopf-client/src/main/java/org/schafkopf/cardreader/CardReader.java similarity index 100% rename from Backend/src/main/java/org/schafkopf/cardreader/CardReader.java rename to Backend/schafkopf-client/src/main/java/org/schafkopf/cardreader/CardReader.java diff --git a/Backend/src/main/java/org/schafkopf/cardreader/UsbCardReader.java b/Backend/schafkopf-client/src/main/java/org/schafkopf/cardreader/UsbCardReader.java similarity index 100% rename from Backend/src/main/java/org/schafkopf/cardreader/UsbCardReader.java rename to Backend/schafkopf-client/src/main/java/org/schafkopf/cardreader/UsbCardReader.java diff --git a/Backend/src/main/java/org/schafkopf/player/BotPlayer.java b/Backend/schafkopf-client/src/main/java/org/schafkopf/player/BotPlayer.java similarity index 100% rename from Backend/src/main/java/org/schafkopf/player/BotPlayer.java rename to Backend/schafkopf-client/src/main/java/org/schafkopf/player/BotPlayer.java diff --git a/Backend/src/main/java/org/schafkopf/player/LocalPlayer.java b/Backend/schafkopf-client/src/main/java/org/schafkopf/player/LocalPlayer.java similarity index 100% rename from Backend/src/main/java/org/schafkopf/player/LocalPlayer.java rename to Backend/schafkopf-client/src/main/java/org/schafkopf/player/LocalPlayer.java diff --git a/Backend/src/main/java/org/schafkopf/player/Player.java b/Backend/schafkopf-client/src/main/java/org/schafkopf/player/Player.java similarity index 100% rename from Backend/src/main/java/org/schafkopf/player/Player.java rename to Backend/schafkopf-client/src/main/java/org/schafkopf/player/Player.java diff --git a/Backend/src/main/java/org/schafkopf/spielcontroller/FarbGeierController.java b/Backend/schafkopf-client/src/main/java/org/schafkopf/spielcontroller/FarbGeierController.java similarity index 100% rename from Backend/src/main/java/org/schafkopf/spielcontroller/FarbGeierController.java rename to Backend/schafkopf-client/src/main/java/org/schafkopf/spielcontroller/FarbGeierController.java diff --git a/Backend/src/main/java/org/schafkopf/spielcontroller/FarbSoloController.java b/Backend/schafkopf-client/src/main/java/org/schafkopf/spielcontroller/FarbSoloController.java similarity index 100% rename from Backend/src/main/java/org/schafkopf/spielcontroller/FarbSoloController.java rename to Backend/schafkopf-client/src/main/java/org/schafkopf/spielcontroller/FarbSoloController.java diff --git a/Backend/src/main/java/org/schafkopf/spielcontroller/FarbWenzController.java b/Backend/schafkopf-client/src/main/java/org/schafkopf/spielcontroller/FarbWenzController.java similarity index 100% rename from Backend/src/main/java/org/schafkopf/spielcontroller/FarbWenzController.java rename to Backend/schafkopf-client/src/main/java/org/schafkopf/spielcontroller/FarbWenzController.java diff --git a/Backend/src/main/java/org/schafkopf/spielcontroller/GeierController.java b/Backend/schafkopf-client/src/main/java/org/schafkopf/spielcontroller/GeierController.java similarity index 100% rename from Backend/src/main/java/org/schafkopf/spielcontroller/GeierController.java rename to Backend/schafkopf-client/src/main/java/org/schafkopf/spielcontroller/GeierController.java diff --git a/Backend/src/main/java/org/schafkopf/spielcontroller/GeierWenzController.java b/Backend/schafkopf-client/src/main/java/org/schafkopf/spielcontroller/GeierWenzController.java similarity index 100% rename from Backend/src/main/java/org/schafkopf/spielcontroller/GeierWenzController.java rename to Backend/schafkopf-client/src/main/java/org/schafkopf/spielcontroller/GeierWenzController.java diff --git a/Backend/src/main/java/org/schafkopf/spielcontroller/SauSpielController.java b/Backend/schafkopf-client/src/main/java/org/schafkopf/spielcontroller/SauSpielController.java similarity index 100% rename from Backend/src/main/java/org/schafkopf/spielcontroller/SauSpielController.java rename to Backend/schafkopf-client/src/main/java/org/schafkopf/spielcontroller/SauSpielController.java diff --git a/Backend/src/main/java/org/schafkopf/spielcontroller/SoloController.java b/Backend/schafkopf-client/src/main/java/org/schafkopf/spielcontroller/SoloController.java similarity index 100% rename from Backend/src/main/java/org/schafkopf/spielcontroller/SoloController.java rename to Backend/schafkopf-client/src/main/java/org/schafkopf/spielcontroller/SoloController.java diff --git a/Backend/src/main/java/org/schafkopf/spielcontroller/SpielController.java b/Backend/schafkopf-client/src/main/java/org/schafkopf/spielcontroller/SpielController.java similarity index 100% rename from Backend/src/main/java/org/schafkopf/spielcontroller/SpielController.java rename to Backend/schafkopf-client/src/main/java/org/schafkopf/spielcontroller/SpielController.java diff --git a/Backend/src/main/java/org/schafkopf/spielcontroller/StandardController.java b/Backend/schafkopf-client/src/main/java/org/schafkopf/spielcontroller/StandardController.java similarity index 100% rename from Backend/src/main/java/org/schafkopf/spielcontroller/StandardController.java rename to Backend/schafkopf-client/src/main/java/org/schafkopf/spielcontroller/StandardController.java diff --git a/Backend/src/main/java/org/schafkopf/spielcontroller/WenzController.java b/Backend/schafkopf-client/src/main/java/org/schafkopf/spielcontroller/WenzController.java similarity index 100% rename from Backend/src/main/java/org/schafkopf/spielcontroller/WenzController.java rename to Backend/schafkopf-client/src/main/java/org/schafkopf/spielcontroller/WenzController.java diff --git a/Backend/src/main/resources/web-content/assets/blatt_6.png b/Backend/schafkopf-client/src/main/resources/web-content/assets/blatt_6.png similarity index 100% rename from Backend/src/main/resources/web-content/assets/blatt_6.png rename to Backend/schafkopf-client/src/main/resources/web-content/assets/blatt_6.png diff --git a/Backend/src/main/resources/web-content/assets/blatt_7.png b/Backend/schafkopf-client/src/main/resources/web-content/assets/blatt_7.png similarity index 100% rename from Backend/src/main/resources/web-content/assets/blatt_7.png rename to Backend/schafkopf-client/src/main/resources/web-content/assets/blatt_7.png diff --git a/Backend/src/main/resources/web-content/assets/blatt_8.png b/Backend/schafkopf-client/src/main/resources/web-content/assets/blatt_8.png similarity index 100% rename from Backend/src/main/resources/web-content/assets/blatt_8.png rename to Backend/schafkopf-client/src/main/resources/web-content/assets/blatt_8.png diff --git a/Backend/src/main/resources/web-content/assets/blatt_9.png b/Backend/schafkopf-client/src/main/resources/web-content/assets/blatt_9.png similarity index 100% rename from Backend/src/main/resources/web-content/assets/blatt_9.png rename to Backend/schafkopf-client/src/main/resources/web-content/assets/blatt_9.png diff --git a/Backend/src/main/resources/web-content/assets/blatt_a.png b/Backend/schafkopf-client/src/main/resources/web-content/assets/blatt_a.png similarity index 100% rename from Backend/src/main/resources/web-content/assets/blatt_a.png rename to Backend/schafkopf-client/src/main/resources/web-content/assets/blatt_a.png diff --git a/Backend/src/main/resources/web-content/assets/blatt_k.png b/Backend/schafkopf-client/src/main/resources/web-content/assets/blatt_k.png similarity index 100% rename from Backend/src/main/resources/web-content/assets/blatt_k.png rename to Backend/schafkopf-client/src/main/resources/web-content/assets/blatt_k.png diff --git a/Backend/src/main/resources/web-content/assets/blatt_o.png b/Backend/schafkopf-client/src/main/resources/web-content/assets/blatt_o.png similarity index 100% rename from Backend/src/main/resources/web-content/assets/blatt_o.png rename to Backend/schafkopf-client/src/main/resources/web-content/assets/blatt_o.png diff --git a/Backend/src/main/resources/web-content/assets/blatt_u.png b/Backend/schafkopf-client/src/main/resources/web-content/assets/blatt_u.png similarity index 100% rename from Backend/src/main/resources/web-content/assets/blatt_u.png rename to Backend/schafkopf-client/src/main/resources/web-content/assets/blatt_u.png diff --git a/Backend/src/main/resources/web-content/assets/blatt_x.png b/Backend/schafkopf-client/src/main/resources/web-content/assets/blatt_x.png similarity index 100% rename from Backend/src/main/resources/web-content/assets/blatt_x.png rename to Backend/schafkopf-client/src/main/resources/web-content/assets/blatt_x.png diff --git a/Backend/src/main/resources/web-content/assets/card_back.png b/Backend/schafkopf-client/src/main/resources/web-content/assets/card_back.png similarity index 100% rename from Backend/src/main/resources/web-content/assets/card_back.png rename to Backend/schafkopf-client/src/main/resources/web-content/assets/card_back.png diff --git a/Backend/src/main/resources/web-content/assets/eichel_6.png b/Backend/schafkopf-client/src/main/resources/web-content/assets/eichel_6.png similarity index 100% rename from Backend/src/main/resources/web-content/assets/eichel_6.png rename to Backend/schafkopf-client/src/main/resources/web-content/assets/eichel_6.png diff --git a/Backend/src/main/resources/web-content/assets/eichel_7.png b/Backend/schafkopf-client/src/main/resources/web-content/assets/eichel_7.png similarity index 100% rename from Backend/src/main/resources/web-content/assets/eichel_7.png rename to Backend/schafkopf-client/src/main/resources/web-content/assets/eichel_7.png diff --git a/Backend/src/main/resources/web-content/assets/eichel_8.png b/Backend/schafkopf-client/src/main/resources/web-content/assets/eichel_8.png similarity index 100% rename from Backend/src/main/resources/web-content/assets/eichel_8.png rename to Backend/schafkopf-client/src/main/resources/web-content/assets/eichel_8.png diff --git a/Backend/src/main/resources/web-content/assets/eichel_9.png b/Backend/schafkopf-client/src/main/resources/web-content/assets/eichel_9.png similarity index 100% rename from Backend/src/main/resources/web-content/assets/eichel_9.png rename to Backend/schafkopf-client/src/main/resources/web-content/assets/eichel_9.png diff --git a/Backend/src/main/resources/web-content/assets/eichel_a.png b/Backend/schafkopf-client/src/main/resources/web-content/assets/eichel_a.png similarity index 100% rename from Backend/src/main/resources/web-content/assets/eichel_a.png rename to Backend/schafkopf-client/src/main/resources/web-content/assets/eichel_a.png diff --git a/Backend/src/main/resources/web-content/assets/eichel_k.png b/Backend/schafkopf-client/src/main/resources/web-content/assets/eichel_k.png similarity index 100% rename from Backend/src/main/resources/web-content/assets/eichel_k.png rename to Backend/schafkopf-client/src/main/resources/web-content/assets/eichel_k.png diff --git a/Backend/src/main/resources/web-content/assets/eichel_o.png b/Backend/schafkopf-client/src/main/resources/web-content/assets/eichel_o.png similarity index 100% rename from Backend/src/main/resources/web-content/assets/eichel_o.png rename to Backend/schafkopf-client/src/main/resources/web-content/assets/eichel_o.png diff --git a/Backend/src/main/resources/web-content/assets/eichel_u.png b/Backend/schafkopf-client/src/main/resources/web-content/assets/eichel_u.png similarity index 100% rename from Backend/src/main/resources/web-content/assets/eichel_u.png rename to Backend/schafkopf-client/src/main/resources/web-content/assets/eichel_u.png diff --git a/Backend/src/main/resources/web-content/assets/eichel_x.png b/Backend/schafkopf-client/src/main/resources/web-content/assets/eichel_x.png similarity index 100% rename from Backend/src/main/resources/web-content/assets/eichel_x.png rename to Backend/schafkopf-client/src/main/resources/web-content/assets/eichel_x.png diff --git a/Backend/src/main/resources/web-content/assets/herz_6.png b/Backend/schafkopf-client/src/main/resources/web-content/assets/herz_6.png similarity index 100% rename from Backend/src/main/resources/web-content/assets/herz_6.png rename to Backend/schafkopf-client/src/main/resources/web-content/assets/herz_6.png diff --git a/Backend/src/main/resources/web-content/assets/herz_7.png b/Backend/schafkopf-client/src/main/resources/web-content/assets/herz_7.png similarity index 100% rename from Backend/src/main/resources/web-content/assets/herz_7.png rename to Backend/schafkopf-client/src/main/resources/web-content/assets/herz_7.png diff --git a/Backend/src/main/resources/web-content/assets/herz_8.png b/Backend/schafkopf-client/src/main/resources/web-content/assets/herz_8.png similarity index 100% rename from Backend/src/main/resources/web-content/assets/herz_8.png rename to Backend/schafkopf-client/src/main/resources/web-content/assets/herz_8.png diff --git a/Backend/src/main/resources/web-content/assets/herz_9.png b/Backend/schafkopf-client/src/main/resources/web-content/assets/herz_9.png similarity index 100% rename from Backend/src/main/resources/web-content/assets/herz_9.png rename to Backend/schafkopf-client/src/main/resources/web-content/assets/herz_9.png diff --git a/Backend/src/main/resources/web-content/assets/herz_a.png b/Backend/schafkopf-client/src/main/resources/web-content/assets/herz_a.png similarity index 100% rename from Backend/src/main/resources/web-content/assets/herz_a.png rename to Backend/schafkopf-client/src/main/resources/web-content/assets/herz_a.png diff --git a/Backend/src/main/resources/web-content/assets/herz_k.png b/Backend/schafkopf-client/src/main/resources/web-content/assets/herz_k.png similarity index 100% rename from Backend/src/main/resources/web-content/assets/herz_k.png rename to Backend/schafkopf-client/src/main/resources/web-content/assets/herz_k.png diff --git a/Backend/src/main/resources/web-content/assets/herz_o.png b/Backend/schafkopf-client/src/main/resources/web-content/assets/herz_o.png similarity index 100% rename from Backend/src/main/resources/web-content/assets/herz_o.png rename to Backend/schafkopf-client/src/main/resources/web-content/assets/herz_o.png diff --git a/Backend/src/main/resources/web-content/assets/herz_u.png b/Backend/schafkopf-client/src/main/resources/web-content/assets/herz_u.png similarity index 100% rename from Backend/src/main/resources/web-content/assets/herz_u.png rename to Backend/schafkopf-client/src/main/resources/web-content/assets/herz_u.png diff --git a/Backend/src/main/resources/web-content/assets/herz_x.png b/Backend/schafkopf-client/src/main/resources/web-content/assets/herz_x.png similarity index 100% rename from Backend/src/main/resources/web-content/assets/herz_x.png rename to Backend/schafkopf-client/src/main/resources/web-content/assets/herz_x.png diff --git a/Backend/schafkopf-client/src/main/resources/web-content/assets/index-8PJRhba5.css b/Backend/schafkopf-client/src/main/resources/web-content/assets/index-8PJRhba5.css new file mode 100644 index 0000000..23f2aca --- /dev/null +++ b/Backend/schafkopf-client/src/main/resources/web-content/assets/index-8PJRhba5.css @@ -0,0 +1 @@ +*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }.absolute{position:absolute}.\!left-1\/2{left:50%!important}.\!top-1\/2{top:50%!important}.bottom-0{bottom:0}.left-0{left:0}.top-1\/2{top:50%}.top-52{top:13rem}.top-64{top:16rem}.\!z-10{z-index:10!important}.mx-auto{margin-left:auto;margin-right:auto}.flex{display:flex}.grid{display:grid}.h-\[48rem\]{height:48rem}.h-full{height:100%}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\!scale-105{--tw-scale-x: 1.05 !important;--tw-scale-y: 1.05 !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.flex-row{flex-direction:row}.place-content-center{place-content:center}.justify-center{justify-content:center}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.overflow-hidden{overflow:hidden}.rounded-2xl,.rounded-\[1rem\]{border-radius:1rem}.rounded-\[2rem\]{border-radius:2rem}.rounded-xl{border-radius:.75rem}.bg-zinc-800{--tw-bg-opacity: 1;background-color:rgb(39 39 42 / var(--tw-bg-opacity))}.text-center{text-align:center}.text-6xl{font-size:3.75rem;line-height:1}.font-bold{font-weight:700}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.v-button{border-radius:9999px;--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity));padding:.5rem 1rem;font-weight:700;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-duration:.3s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.v-button:hover{--tw-bg-opacity: 1;background-color:rgb(29 78 216 / var(--tw-bg-opacity))}.card.xl{height:48rem}.card.xl img{border-radius:2rem}.card.md{height:24rem}.card.md img{border-radius:1rem}.card.sm{height:16rem}.card.sm img{border-radius:.75rem}.card0,.card1{z-index:1;top:50%;left:50%;transform:translate(-50%,-50%)}.card2{z-index:2;top:calc(50% + 2.4rem);left:calc(50% - 7.2rem);transform:rotate(50deg) translate(-50%,-50%)}.card3{z-index:3;top:calc(50% - 3rem);left:calc(50% + 8.4rem);transform:rotate(-30deg) translate(-50%,-50%)}.card4{z-index:4;top:calc(50% - 9.6rem);left:calc(50% + 8.4rem);transform:rotate(-60deg) translate(-50%,-50%)} diff --git a/Backend/src/main/resources/web-content/assets/schell_6.png b/Backend/schafkopf-client/src/main/resources/web-content/assets/schell_6.png similarity index 100% rename from Backend/src/main/resources/web-content/assets/schell_6.png rename to Backend/schafkopf-client/src/main/resources/web-content/assets/schell_6.png diff --git a/Backend/src/main/resources/web-content/assets/schell_7.png b/Backend/schafkopf-client/src/main/resources/web-content/assets/schell_7.png similarity index 100% rename from Backend/src/main/resources/web-content/assets/schell_7.png rename to Backend/schafkopf-client/src/main/resources/web-content/assets/schell_7.png diff --git a/Backend/src/main/resources/web-content/assets/schell_8.png b/Backend/schafkopf-client/src/main/resources/web-content/assets/schell_8.png similarity index 100% rename from Backend/src/main/resources/web-content/assets/schell_8.png rename to Backend/schafkopf-client/src/main/resources/web-content/assets/schell_8.png diff --git a/Backend/src/main/resources/web-content/assets/schell_9.png b/Backend/schafkopf-client/src/main/resources/web-content/assets/schell_9.png similarity index 100% rename from Backend/src/main/resources/web-content/assets/schell_9.png rename to Backend/schafkopf-client/src/main/resources/web-content/assets/schell_9.png diff --git a/Backend/src/main/resources/web-content/assets/schell_a.png b/Backend/schafkopf-client/src/main/resources/web-content/assets/schell_a.png similarity index 100% rename from Backend/src/main/resources/web-content/assets/schell_a.png rename to Backend/schafkopf-client/src/main/resources/web-content/assets/schell_a.png diff --git a/Backend/src/main/resources/web-content/assets/schell_k.png b/Backend/schafkopf-client/src/main/resources/web-content/assets/schell_k.png similarity index 100% rename from Backend/src/main/resources/web-content/assets/schell_k.png rename to Backend/schafkopf-client/src/main/resources/web-content/assets/schell_k.png diff --git a/Backend/src/main/resources/web-content/assets/schell_o.png b/Backend/schafkopf-client/src/main/resources/web-content/assets/schell_o.png similarity index 100% rename from Backend/src/main/resources/web-content/assets/schell_o.png rename to Backend/schafkopf-client/src/main/resources/web-content/assets/schell_o.png diff --git a/Backend/src/main/resources/web-content/assets/schell_u.png b/Backend/schafkopf-client/src/main/resources/web-content/assets/schell_u.png similarity index 100% rename from Backend/src/main/resources/web-content/assets/schell_u.png rename to Backend/schafkopf-client/src/main/resources/web-content/assets/schell_u.png diff --git a/Backend/src/main/resources/web-content/assets/schell_x.png b/Backend/schafkopf-client/src/main/resources/web-content/assets/schell_x.png similarity index 100% rename from Backend/src/main/resources/web-content/assets/schell_x.png rename to Backend/schafkopf-client/src/main/resources/web-content/assets/schell_x.png diff --git a/Backend/schafkopf-client/src/main/resources/web-content/index.html b/Backend/schafkopf-client/src/main/resources/web-content/index.html new file mode 100644 index 0000000..3739786 --- /dev/null +++ b/Backend/schafkopf-client/src/main/resources/web-content/index.html @@ -0,0 +1,13 @@ + + + + + + Vite + Vue + TS + + + + +
+ + diff --git a/Backend/schafkopf-server/pom.xml b/Backend/schafkopf-server/pom.xml new file mode 100644 index 0000000..7741f9e --- /dev/null +++ b/Backend/schafkopf-server/pom.xml @@ -0,0 +1,55 @@ + + + 4.0.0 + + org.schafkopf + schafkopf-backend-java + 1.0-SNAPSHOT + + + schafkopf-server + + + 21 + 21 + UTF-8 + + + + org.schafkopf + schafkopf-shared + 1.0-SNAPSHOT + compile + + + + schafkopf-server-build + + + maven-assembly-plugin + 3.3.0 + + + jar-with-dependencies + + + + org.schafkopf.Main + + + + + + make-assembly + package + + single + + + + + + + \ No newline at end of file diff --git a/Backend/schafkopf-server/src/main/java/org/schafkopf/Main.java b/Backend/schafkopf-server/src/main/java/org/schafkopf/Main.java new file mode 100644 index 0000000..f117247 --- /dev/null +++ b/Backend/schafkopf-server/src/main/java/org/schafkopf/Main.java @@ -0,0 +1,18 @@ +package org.schafkopf; + +import org.schafkopf.karte.Karte; +import org.schafkopf.karte.KartenListe; +import org.schafkopf.karte.KartenUtil; + +/** Creates an Instance of the Backend Server. */ +public class Main { + /** Creates an Instance of the Backend Server. */ + public static void main(String[] args) { + + System.out.println("Hello and welcome!"); + KartenListe testHand = KartenUtil.zieheZufallsHand(8); + for (Karte karte : testHand.getKartenListe()) { + System.out.println(karte.getName()); + } + } +} \ No newline at end of file diff --git a/Backend/schafkopf-shared/pom.xml b/Backend/schafkopf-shared/pom.xml new file mode 100644 index 0000000..5ba1c2c --- /dev/null +++ b/Backend/schafkopf-shared/pom.xml @@ -0,0 +1,20 @@ + + + 4.0.0 + + org.schafkopf + schafkopf-backend-java + 1.0-SNAPSHOT + + + schafkopf-shared + + + 21 + 21 + UTF-8 + + + \ No newline at end of file diff --git a/Backend/src/main/java/org/schafkopf/karte/Karte.java b/Backend/schafkopf-shared/src/main/java/org/schafkopf/karte/Karte.java similarity index 100% rename from Backend/src/main/java/org/schafkopf/karte/Karte.java rename to Backend/schafkopf-shared/src/main/java/org/schafkopf/karte/Karte.java diff --git a/Backend/src/main/java/org/schafkopf/karte/KartenFarbe.java b/Backend/schafkopf-shared/src/main/java/org/schafkopf/karte/KartenFarbe.java similarity index 100% rename from Backend/src/main/java/org/schafkopf/karte/KartenFarbe.java rename to Backend/schafkopf-shared/src/main/java/org/schafkopf/karte/KartenFarbe.java diff --git a/Backend/src/main/java/org/schafkopf/karte/KartenListe.java b/Backend/schafkopf-shared/src/main/java/org/schafkopf/karte/KartenListe.java similarity index 100% rename from Backend/src/main/java/org/schafkopf/karte/KartenListe.java rename to Backend/schafkopf-shared/src/main/java/org/schafkopf/karte/KartenListe.java diff --git a/Backend/src/main/java/org/schafkopf/karte/KartenSymbol.java b/Backend/schafkopf-shared/src/main/java/org/schafkopf/karte/KartenSymbol.java similarity index 100% rename from Backend/src/main/java/org/schafkopf/karte/KartenSymbol.java rename to Backend/schafkopf-shared/src/main/java/org/schafkopf/karte/KartenSymbol.java diff --git a/Backend/src/main/java/org/schafkopf/karte/KartenUtil.java b/Backend/schafkopf-shared/src/main/java/org/schafkopf/karte/KartenUtil.java similarity index 100% rename from Backend/src/main/java/org/schafkopf/karte/KartenUtil.java rename to Backend/schafkopf-shared/src/main/java/org/schafkopf/karte/KartenUtil.java diff --git a/Backend/src/main/java/org/schafkopf/JavaFxApp.java b/Backend/src/main/java/org/schafkopf/JavaFxApp.java deleted file mode 100644 index ee7f787..0000000 --- a/Backend/src/main/java/org/schafkopf/JavaFxApp.java +++ /dev/null @@ -1,50 +0,0 @@ -package org.schafkopf; - -import javafx.application.Application; -import javafx.scene.Scene; -import javafx.scene.input.KeyCode; -import javafx.scene.web.WebView; -import javafx.stage.Stage; - -/** Frontend Window. */ -public class JavaFxApp extends Application { - - private static final String FRONTEND_URL = - "http://localhost:8081"; // Replace with your frontend URL - - public static void main(String[] args) { - launch(args); - } - - @Override - public void start(Stage primaryStage) { - // Create a WebView - WebView webView = new WebView(); - - // Load the frontend URL - webView.getEngine().load(FRONTEND_URL); - - // Create a Scene with the WebView - Scene scene = new Scene(webView, 800, 600); - - // Set up the Stage - primaryStage.setTitle("Schafkopfen"); - primaryStage.setScene(scene); - - primaryStage.setFullScreenExitHint(""); - - // Set the stage to fullscreen - primaryStage.setFullScreen(true); - - // Add event handler for the Escape key to toggle fullscreen - scene.setOnKeyPressed( - event -> { - if (event.getCode() == KeyCode.F11) { - primaryStage.setFullScreen(!primaryStage.isFullScreen()); - } - }); - - // Show the Stage - primaryStage.show(); - } -} diff --git a/Backend/src/main/resources/web-content/assets/index-08f560d4.css b/Backend/src/main/resources/web-content/assets/index-08f560d4.css deleted file mode 100644 index aba0a3f..0000000 --- a/Backend/src/main/resources/web-content/assets/index-08f560d4.css +++ /dev/null @@ -1 +0,0 @@ -*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.absolute{position:absolute}.\!left-1\/2{left:50%!important}.\!top-1\/2{top:50%!important}.bottom-0{bottom:0}.left-0{left:0}.top-1\/2{top:50%}.top-52{top:13rem}.top-64{top:16rem}.\!z-10{z-index:10!important}.mx-auto{margin-left:auto;margin-right:auto}.flex{display:flex}.grid{display:grid}.h-\[48rem\]{height:48rem}.h-full{height:100%}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\!scale-105{--tw-scale-x: 1.05 !important;--tw-scale-y: 1.05 !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.flex-row{flex-direction:row}.place-content-center{place-content:center}.justify-center{justify-content:center}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.overflow-hidden{overflow:hidden}.rounded-2xl,.rounded-\[1rem\]{border-radius:1rem}.rounded-\[2rem\]{border-radius:2rem}.rounded-xl{border-radius:.75rem}.bg-gray-800{--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity))}.text-center{text-align:center}.text-6xl{font-size:3.75rem;line-height:1}.font-bold{font-weight:700}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.v-button{border-radius:9999px;--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity));padding:.5rem 1rem;font-weight:700;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-duration:.3s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.v-button:hover{--tw-bg-opacity: 1;background-color:rgb(29 78 216 / var(--tw-bg-opacity))}.card.xl{height:48rem}.card.xl img{border-radius:2rem}.card.md{height:24rem}.card.md img{border-radius:1rem}.card.sm{height:16rem}.card.sm img{border-radius:.75rem}.card0,.card1{z-index:1;top:50%;left:50%;transform:translate(-50%,-50%)}.card2{z-index:2;top:calc(50% + 2.4rem);left:calc(50% - 7.2rem);transform:rotate(50deg) translate(-50%,-50%)}.card3{z-index:3;top:calc(50% - 3rem);left:calc(50% + 8.4rem);transform:rotate(-30deg) translate(-50%,-50%)}.card4{z-index:4;top:calc(50% - 9.6rem);left:calc(50% + 8.4rem);transform:rotate(-60deg) translate(-50%,-50%)} diff --git a/Backend/src/main/resources/web-content/assets/index-6278b98f.js b/Backend/src/main/resources/web-content/assets/index-6278b98f.js deleted file mode 100644 index e1861e0..0000000 --- a/Backend/src/main/resources/web-content/assets/index-6278b98f.js +++ /dev/null @@ -1,17 +0,0 @@ -(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))s(r);new MutationObserver(r=>{for(const o of r)if(o.type==="childList")for(const l of o.addedNodes)l.tagName==="LINK"&&l.rel==="modulepreload"&&s(l)}).observe(document,{childList:!0,subtree:!0});function n(r){const o={};return r.integrity&&(o.integrity=r.integrity),r.referrerPolicy&&(o.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?o.credentials="include":r.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function s(r){if(r.ep)return;r.ep=!0;const o=n(r);fetch(r.href,o)}})();/** -* @vue/shared v3.4.21 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/function Sn(e,t){const n=new Set(e.split(","));return t?s=>n.has(s.toLowerCase()):s=>n.has(s)}const W={},Xe=[],le=()=>{},Or=()=>!1,Ut=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),wn=e=>e.startsWith("onUpdate:"),Y=Object.assign,An=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Ir=Object.prototype.hasOwnProperty,M=(e,t)=>Ir.call(e,t),R=Array.isArray,Qe=e=>Dt(e)==="[object Map]",Ls=e=>Dt(e)==="[object Set]",O=e=>typeof e=="function",Z=e=>typeof e=="string",ot=e=>typeof e=="symbol",k=e=>e!==null&&typeof e=="object",Rs=e=>(k(e)||O(e))&&O(e.then)&&O(e.catch),Os=Object.prototype.toString,Dt=e=>Os.call(e),Pr=e=>Dt(e).slice(8,-1),Is=e=>Dt(e)==="[object Object]",Ln=e=>Z(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,at=Sn(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Vt=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Hr=/-(\w)/g,nt=Vt(e=>e.replace(Hr,(t,n)=>n?n.toUpperCase():"")),Mr=/\B([A-Z])/g,lt=Vt(e=>e.replace(Mr,"-$1").toLowerCase()),Ps=Vt(e=>e.charAt(0).toUpperCase()+e.slice(1)),sn=Vt(e=>e?`on${Ps(e)}`:""),He=(e,t)=>!Object.is(e,t),rn=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},Fr=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let Yn;const Hs=()=>Yn||(Yn=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Rn(e){if(R(e)){const t={};for(let n=0;n{if(n){const s=n.split(Nr);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function Wt(e){let t="";if(Z(e))t=e;else if(R(e))for(let n=0;nZ(e)?e:e==null?"":R(e)||k(e)&&(e.toString===Os||!O(e.toString))?JSON.stringify(e,Fs,2):String(e),Fs=(e,t)=>t&&t.__v_isRef?Fs(e,t.value):Qe(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r],o)=>(n[ln(s,o)+" =>"]=r,n),{})}:Ls(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>ln(n))}:ot(t)?ln(t):k(t)&&!R(t)&&!Is(t)?String(t):t,ln=(e,t="")=>{var n;return ot(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** -* @vue/reactivity v3.4.21 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/let fe;class Dr{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this.parent=fe,!t&&fe&&(this.index=(fe.scopes||(fe.scopes=[])).push(this)-1)}get active(){return this._active}run(t){if(this._active){const n=fe;try{return fe=this,t()}finally{fe=n}}}on(){fe=this}off(){fe=this.parent}stop(t){if(this._active){let n,s;for(n=0,s=this.effects.length;n=4))break}this._dirtyLevel===1&&(this._dirtyLevel=0),ke()}return this._dirtyLevel>=4}set dirty(t){this._dirtyLevel=t?4:0}run(){if(this._dirtyLevel=0,!this.active)return this.fn();let t=Ie,n=De;try{return Ie=!0,De=this,this._runnings++,Jn(this),this.fn()}finally{Xn(this),this._runnings--,De=n,Ie=t}}stop(){var t;this.active&&(Jn(this),Xn(this),(t=this.onStop)==null||t.call(this),this.active=!1)}}function zr(e){return e.value}function Jn(e){e._trackId++,e._depsLength=0}function Xn(e){if(e.deps.length>e._depsLength){for(let t=e._depsLength;t{const n=new Map;return n.cleanup=e,n.computed=t,n},_n=new WeakMap,Ve=Symbol(""),mn=Symbol("");function se(e,t,n){if(Ie&&De){let s=_n.get(e);s||_n.set(e,s=new Map);let r=s.get(n);r||s.set(n,r=js(()=>s.delete(n))),Bs(De,r)}}function Ce(e,t,n,s,r,o){const l=_n.get(e);if(!l)return;let c=[];if(t==="clear")c=[...l.values()];else if(n==="length"&&R(e)){const u=Number(s);l.forEach((d,h)=>{(h==="length"||!ot(h)&&h>=u)&&c.push(d)})}else switch(n!==void 0&&c.push(l.get(n)),t){case"add":R(e)?Ln(n)&&c.push(l.get("length")):(c.push(l.get(Ve)),Qe(e)&&c.push(l.get(mn)));break;case"delete":R(e)||(c.push(l.get(Ve)),Qe(e)&&c.push(l.get(mn)));break;case"set":Qe(e)&&c.push(l.get(Ve));break}In();for(const u of c)u&&Ks(u,4);Pn()}const kr=Sn("__proto__,__v_isRef,__isVue"),Us=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(ot)),Qn=Zr();function Zr(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const s=B(this);for(let o=0,l=this.length;o{e[t]=function(...n){ze(),In();const s=B(this)[t].apply(this,n);return Pn(),ke(),s}}),e}function Gr(e){const t=B(this);return se(t,"has",e),t.hasOwnProperty(e)}class Ds{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){const r=this._isReadonly,o=this._isShallow;if(n==="__v_isReactive")return!r;if(n==="__v_isReadonly")return r;if(n==="__v_isShallow")return o;if(n==="__v_raw")return s===(r?o?io:ks:o?zs:Ws).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const l=R(t);if(!r){if(l&&M(Qn,n))return Reflect.get(Qn,n,s);if(n==="hasOwnProperty")return Gr}const c=Reflect.get(t,n,s);return(ot(n)?Us.has(n):kr(n))||(r||se(t,"get",n),o)?c:re(c)?l&&Ln(n)?c:c.value:k(c)?r?Zs(c):Fn(c):c}}class Vs extends Ds{constructor(t=!1){super(!1,t)}set(t,n,s,r){let o=t[n];if(!this._isShallow){const u=st(o);if(!Nt(s)&&!st(s)&&(o=B(o),s=B(s)),!R(t)&&re(o)&&!re(s))return u?!1:(o.value=s,!0)}const l=R(t)&&Ln(n)?Number(n)e,zt=e=>Reflect.getPrototypeOf(e);function Tt(e,t,n=!1,s=!1){e=e.__v_raw;const r=B(e),o=B(t);n||(He(t,o)&&se(r,"get",t),se(r,"get",o));const{has:l}=zt(r),c=s?Hn:n?Nn:gt;if(l.call(r,t))return c(e.get(t));if(l.call(r,o))return c(e.get(o));e!==r&&e.get(t)}function St(e,t=!1){const n=this.__v_raw,s=B(n),r=B(e);return t||(He(e,r)&&se(s,"has",e),se(s,"has",r)),e===r?n.has(e):n.has(e)||n.has(r)}function wt(e,t=!1){return e=e.__v_raw,!t&&se(B(e),"iterate",Ve),Reflect.get(e,"size",e)}function es(e){e=B(e);const t=B(this);return zt(t).has.call(t,e)||(t.add(e),Ce(t,"add",e,e)),this}function ts(e,t){t=B(t);const n=B(this),{has:s,get:r}=zt(n);let o=s.call(n,e);o||(e=B(e),o=s.call(n,e));const l=r.call(n,e);return n.set(e,t),o?He(t,l)&&Ce(n,"set",e,t):Ce(n,"add",e,t),this}function ns(e){const t=B(this),{has:n,get:s}=zt(t);let r=n.call(t,e);r||(e=B(e),r=n.call(t,e)),s&&s.call(t,e);const o=t.delete(e);return r&&Ce(t,"delete",e,void 0),o}function ss(){const e=B(this),t=e.size!==0,n=e.clear();return t&&Ce(e,"clear",void 0,void 0),n}function At(e,t){return function(s,r){const o=this,l=o.__v_raw,c=B(l),u=t?Hn:e?Nn:gt;return!e&&se(c,"iterate",Ve),l.forEach((d,h)=>s.call(r,u(d),u(h),o))}}function Lt(e,t,n){return function(...s){const r=this.__v_raw,o=B(r),l=Qe(o),c=e==="entries"||e===Symbol.iterator&&l,u=e==="keys"&&l,d=r[e](...s),h=n?Hn:t?Nn:gt;return!t&&se(o,"iterate",u?mn:Ve),{next(){const{value:y,done:T}=d.next();return T?{value:y,done:T}:{value:c?[h(y[0]),h(y[1])]:h(y),done:T}},[Symbol.iterator](){return this}}}}function we(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function Qr(){const e={get(o){return Tt(this,o)},get size(){return wt(this)},has:St,add:es,set:ts,delete:ns,clear:ss,forEach:At(!1,!1)},t={get(o){return Tt(this,o,!1,!0)},get size(){return wt(this)},has:St,add:es,set:ts,delete:ns,clear:ss,forEach:At(!1,!0)},n={get(o){return Tt(this,o,!0)},get size(){return wt(this,!0)},has(o){return St.call(this,o,!0)},add:we("add"),set:we("set"),delete:we("delete"),clear:we("clear"),forEach:At(!0,!1)},s={get(o){return Tt(this,o,!0,!0)},get size(){return wt(this,!0)},has(o){return St.call(this,o,!0)},add:we("add"),set:we("set"),delete:we("delete"),clear:we("clear"),forEach:At(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(o=>{e[o]=Lt(o,!1,!1),n[o]=Lt(o,!0,!1),t[o]=Lt(o,!1,!0),s[o]=Lt(o,!0,!0)}),[e,n,t,s]}const[eo,to,no,so]=Qr();function Mn(e,t){const n=t?e?so:no:e?to:eo;return(s,r,o)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get(M(n,r)&&r in s?n:s,r,o)}const ro={get:Mn(!1,!1)},oo={get:Mn(!1,!0)},lo={get:Mn(!0,!1)},Ws=new WeakMap,zs=new WeakMap,ks=new WeakMap,io=new WeakMap;function co(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function fo(e){return e.__v_skip||!Object.isExtensible(e)?0:co(Pr(e))}function Fn(e){return st(e)?e:$n(e,!1,Yr,ro,Ws)}function uo(e){return $n(e,!1,Xr,oo,zs)}function Zs(e){return $n(e,!0,Jr,lo,ks)}function $n(e,t,n,s,r){if(!k(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const o=r.get(e);if(o)return o;const l=fo(e);if(l===0)return e;const c=new Proxy(e,l===2?s:n);return r.set(e,c),c}function et(e){return st(e)?et(e.__v_raw):!!(e&&e.__v_isReactive)}function st(e){return!!(e&&e.__v_isReadonly)}function Nt(e){return!!(e&&e.__v_isShallow)}function Gs(e){return et(e)||st(e)}function B(e){const t=e&&e.__v_raw;return t?B(t):e}function qs(e){return Object.isExtensible(e)&&$t(e,"__v_skip",!0),e}const gt=e=>k(e)?Fn(e):e,Nn=e=>k(e)?Zs(e):e;class Ys{constructor(t,n,s,r){this.getter=t,this._setter=n,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this.effect=new On(()=>t(this._value),()=>Ot(this,this.effect._dirtyLevel===2?2:3)),this.effect.computed=this,this.effect.active=this._cacheable=!r,this.__v_isReadonly=s}get value(){const t=B(this);return(!t._cacheable||t.effect.dirty)&&He(t._value,t._value=t.effect.run())&&Ot(t,4),Js(t),t.effect._dirtyLevel>=2&&Ot(t,2),t._value}set value(t){this._setter(t)}get _dirty(){return this.effect.dirty}set _dirty(t){this.effect.dirty=t}}function ao(e,t,n=!1){let s,r;const o=O(e);return o?(s=e,r=le):(s=e.get,r=e.set),new Ys(s,r,o||!r,n)}function Js(e){var t;Ie&&De&&(e=B(e),Bs(De,(t=e.dep)!=null?t:e.dep=js(()=>e.dep=void 0,e instanceof Ys?e:void 0)))}function Ot(e,t=4,n){e=B(e);const s=e.dep;s&&Ks(s,t)}function re(e){return!!(e&&e.__v_isRef===!0)}function me(e){return ho(e,!1)}function ho(e,t){return re(e)?e:new po(e,t)}class po{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:B(t),this._value=n?t:gt(t)}get value(){return Js(this),this._value}set value(t){const n=this.__v_isShallow||Nt(t)||st(t);t=n?t:B(t),He(t,this._rawValue)&&(this._rawValue=t,this._value=n?t:gt(t),Ot(this,4))}}function Xs(e){return re(e)?e.value:e}const go={get:(e,t,n)=>Xs(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return re(r)&&!re(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function Qs(e){return et(e)?e:new Proxy(e,go)}/** -* @vue/runtime-core v3.4.21 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/function Pe(e,t,n,s){try{return s?e(...s):e()}catch(r){kt(r,t,n)}}function de(e,t,n,s){if(O(e)){const o=Pe(e,t,n,s);return o&&Rs(o)&&o.catch(l=>{kt(l,t,n)}),o}const r=[];for(let o=0;o>>1,r=J[s],o=mt(r);ove&&J.splice(t,1)}function yo(e){R(e)?tt.push(...e):(!Le||!Le.includes(e,e.allowRecurse?Ue+1:Ue))&&tt.push(e),tr()}function rs(e,t,n=_t?ve+1:0){for(;nmt(n)-mt(s));if(tt.length=0,Le){Le.push(...t);return}for(Le=t,Ue=0;Uee.id==null?1/0:e.id,Eo=(e,t)=>{const n=mt(e)-mt(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function sr(e){bn=!1,_t=!0,J.sort(Eo);const t=le;try{for(ve=0;veZ(S)?S.trim():S)),y&&(r=n.map(Fr))}let c,u=s[c=sn(t)]||s[c=sn(nt(t))];!u&&o&&(u=s[c=sn(lt(t))]),u&&de(u,e,6,r);const d=s[c+"Once"];if(d){if(!e.emitted)e.emitted={};else if(e.emitted[c])return;e.emitted[c]=!0,de(d,e,6,r)}}function rr(e,t,n=!1){const s=t.emitsCache,r=s.get(e);if(r!==void 0)return r;const o=e.emits;let l={},c=!1;if(!O(e)){const u=d=>{const h=rr(d,t,!0);h&&(c=!0,Y(l,h))};!n&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}return!o&&!c?(k(e)&&s.set(e,null),null):(R(o)?o.forEach(u=>l[u]=null):Y(l,o),k(e)&&s.set(e,l),l)}function Zt(e,t){return!e||!Ut(t)?!1:(t=t.slice(2).replace(/Once$/,""),M(e,t[0].toLowerCase()+t.slice(1))||M(e,lt(t))||M(e,t))}let ye=null,or=null;function Bt(e){const t=ye;return ye=e,or=e&&e.type.__scopeId||null,t}function Co(e,t=ye,n){if(!t||e._n)return e;const s=(...r)=>{s._d&&gs(-1);const o=Bt(t);let l;try{l=e(...r)}finally{Bt(o),s._d&&gs(1)}return l};return s._n=!0,s._c=!0,s._d=!0,s}function cn(e){const{type:t,vnode:n,proxy:s,withProxy:r,props:o,propsOptions:[l],slots:c,attrs:u,emit:d,render:h,renderCache:y,data:T,setupState:S,ctx:j,inheritAttrs:$}=e;let I,C;const H=Bt(e);try{if(n.shapeFlag&4){const G=r||s,ie=G;I=be(h.call(ie,G,y,o,S,T,j)),C=u}else{const G=t;I=be(G.length>1?G(o,{attrs:u,slots:c,emit:d}):G(o,null)),C=t.props?u:To(u)}}catch(G){pt.length=0,kt(G,e,1),I=Te(We)}let U=I;if(C&&$!==!1){const G=Object.keys(C),{shapeFlag:ie}=U;G.length&&ie&7&&(l&&G.some(wn)&&(C=So(C,l)),U=rt(U,C))}return n.dirs&&(U=rt(U),U.dirs=U.dirs?U.dirs.concat(n.dirs):n.dirs),n.transition&&(U.transition=n.transition),I=U,Bt(H),I}const To=e=>{let t;for(const n in e)(n==="class"||n==="style"||Ut(n))&&((t||(t={}))[n]=e[n]);return t},So=(e,t)=>{const n={};for(const s in e)(!wn(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function wo(e,t,n){const{props:s,children:r,component:o}=e,{props:l,children:c,patchFlag:u}=t,d=o.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&u>=0){if(u&1024)return!0;if(u&16)return s?os(s,l,d):!!l;if(u&8){const h=t.dynamicProps;for(let y=0;ye.__isSuspense;function Oo(e,t){t&&t.pendingBranch?R(e)?t.effects.push(...e):t.effects.push(e):yo(e)}const Io=Symbol.for("v-scx"),Po=()=>Ht(Io),Rt={};function It(e,t,n){return lr(e,t,n)}function lr(e,t,{immediate:n,deep:s,flush:r,once:o,onTrack:l,onTrigger:c}=W){if(t&&o){const N=t;t=(...Ee)=>{N(...Ee),ie()}}const u=te,d=N=>s===!0?N:Je(N,s===!1?1:void 0);let h,y=!1,T=!1;if(re(e)?(h=()=>e.value,y=Nt(e)):et(e)?(h=()=>d(e),y=!0):R(e)?(T=!0,y=e.some(N=>et(N)||Nt(N)),h=()=>e.map(N=>{if(re(N))return N.value;if(et(N))return d(N);if(O(N))return Pe(N,u,2)})):O(e)?t?h=()=>Pe(e,u,2):h=()=>(S&&S(),de(e,u,3,[j])):h=le,t&&s){const N=h;h=()=>Je(N())}let S,j=N=>{S=U.onStop=()=>{Pe(N,u,4),S=U.onStop=void 0}},$;if(Jt)if(j=le,t?n&&de(t,u,3,[h(),T?[]:void 0,j]):h(),r==="sync"){const N=Po();$=N.__watcherHandles||(N.__watcherHandles=[])}else return le;let I=T?new Array(e.length).fill(Rt):Rt;const C=()=>{if(!(!U.active||!U.dirty))if(t){const N=U.run();(s||y||(T?N.some((Ee,he)=>He(Ee,I[he])):He(N,I)))&&(S&&S(),de(t,u,3,[N,I===Rt?void 0:T&&I[0]===Rt?[]:I,j]),I=N)}else U.run()};C.allowRecurse=!!t;let H;r==="sync"?H=C:r==="post"?H=()=>ne(C,u&&u.suspense):(C.pre=!0,u&&(C.id=u.uid),H=()=>Kn(C));const U=new On(h,le,H),G=Wr(),ie=()=>{U.stop(),G&&An(G.effects,U)};return t?n?C():I=U.run():r==="post"?ne(U.run.bind(U),u&&u.suspense):U.run(),$&&$.push(ie),ie}function Ho(e,t,n){const s=this.proxy,r=Z(e)?e.includes(".")?ir(s,e):()=>s[e]:e.bind(s,s);let o;O(t)?o=t:(o=t.handler,n=t);const l=vt(this),c=lr(r,o.bind(s),n);return l(),c}function ir(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;r0){if(n>=t)return e;n++}if(s=s||new Set,s.has(e))return e;if(s.add(e),re(e))Je(e.value,t,n,s);else if(R(e))for(let r=0;r{Je(r,t,n,s)});else if(Is(e))for(const r in e)Je(e[r],t,n,s);return e}function Ne(e,t,n,s){const r=e.dirs,o=t&&t.dirs;for(let l=0;lY({name:e.name},t,{setup:e}))():e}const Pt=e=>!!e.type.__asyncLoader,fr=e=>e.type.__isKeepAlive;function Mo(e,t){ur(e,"a",t)}function Fo(e,t){ur(e,"da",t)}function ur(e,t,n=te){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(Gt(t,s,n),n){let r=n.parent;for(;r&&r.parent;)fr(r.parent.vnode)&&$o(s,t,n,r),r=r.parent}}function $o(e,t,n,s){const r=Gt(t,e,s,!0);hr(()=>{An(s[t],r)},n)}function Gt(e,t,n=te,s=!1){if(n){const r=n[e]||(n[e]=[]),o=t.__weh||(t.__weh=(...l)=>{if(n.isUnmounted)return;ze();const c=vt(n),u=de(t,n,e,l);return c(),ke(),u});return s?r.unshift(o):r.push(o),o}}const Se=e=>(t,n=te)=>(!Jt||e==="sp")&&Gt(e,(...s)=>t(...s),n),ar=Se("bm"),dr=Se("m"),No=Se("bu"),Bo=Se("u"),Ko=Se("bum"),hr=Se("um"),jo=Se("sp"),Uo=Se("rtg"),Do=Se("rtc");function Vo(e,t=te){Gt("ec",e,t)}function ls(e,t,n,s){let r;const o=n&&n[s];if(R(e)||Z(e)){r=new Array(e.length);for(let l=0,c=e.length;lt(l,c,void 0,o&&o[c]));else{const l=Object.keys(e);r=new Array(l.length);for(let c=0,u=l.length;ce?Sr(e)?Vn(e)||e.proxy:vn(e.parent):null,dt=Y(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>vn(e.parent),$root:e=>vn(e.root),$emit:e=>e.emit,$options:e=>jn(e),$forceUpdate:e=>e.f||(e.f=()=>{e.effect.dirty=!0,Kn(e.update)}),$nextTick:e=>e.n||(e.n=mo.bind(e.proxy)),$watch:e=>Ho.bind(e)}),fn=(e,t)=>e!==W&&!e.__isScriptSetup&&M(e,t),Wo={get({_:e},t){const{ctx:n,setupState:s,data:r,props:o,accessCache:l,type:c,appContext:u}=e;let d;if(t[0]!=="$"){const S=l[t];if(S!==void 0)switch(S){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return o[t]}else{if(fn(s,t))return l[t]=1,s[t];if(r!==W&&M(r,t))return l[t]=2,r[t];if((d=e.propsOptions[0])&&M(d,t))return l[t]=3,o[t];if(n!==W&&M(n,t))return l[t]=4,n[t];yn&&(l[t]=0)}}const h=dt[t];let y,T;if(h)return t==="$attrs"&&se(e,"get",t),h(e);if((y=c.__cssModules)&&(y=y[t]))return y;if(n!==W&&M(n,t))return l[t]=4,n[t];if(T=u.config.globalProperties,M(T,t))return T[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:o}=e;return fn(r,t)?(r[t]=n,!0):s!==W&&M(s,t)?(s[t]=n,!0):M(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(o[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,propsOptions:o}},l){let c;return!!n[l]||e!==W&&M(e,l)||fn(t,l)||(c=o[0])&&M(c,l)||M(s,l)||M(dt,l)||M(r.config.globalProperties,l)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:M(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function is(e){return R(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let yn=!0;function zo(e){const t=jn(e),n=e.proxy,s=e.ctx;yn=!1,t.beforeCreate&&cs(t.beforeCreate,e,"bc");const{data:r,computed:o,methods:l,watch:c,provide:u,inject:d,created:h,beforeMount:y,mounted:T,beforeUpdate:S,updated:j,activated:$,deactivated:I,beforeDestroy:C,beforeUnmount:H,destroyed:U,unmounted:G,render:ie,renderTracked:N,renderTriggered:Ee,errorCaptured:he,serverPrefetch:Xt,expose:Me,inheritAttrs:it,components:yt,directives:Et,filters:Qt}=t;if(d&&ko(d,s,null),l)for(const z in l){const D=l[z];O(D)&&(s[z]=D.bind(n))}if(r){const z=r.call(n,n);k(z)&&(e.data=Fn(z))}if(yn=!0,o)for(const z in o){const D=o[z],Fe=O(D)?D.bind(n,n):O(D.get)?D.get.bind(n,n):le,xt=!O(D)&&O(D.set)?D.set.bind(n):le,$e=Cl({get:Fe,set:xt});Object.defineProperty(s,z,{enumerable:!0,configurable:!0,get:()=>$e.value,set:pe=>$e.value=pe})}if(c)for(const z in c)pr(c[z],s,n,z);if(u){const z=O(u)?u.call(n):u;Reflect.ownKeys(z).forEach(D=>{Xo(D,z[D])})}h&&cs(h,e,"c");function X(z,D){R(D)?D.forEach(Fe=>z(Fe.bind(n))):D&&z(D.bind(n))}if(X(ar,y),X(dr,T),X(No,S),X(Bo,j),X(Mo,$),X(Fo,I),X(Vo,he),X(Do,N),X(Uo,Ee),X(Ko,H),X(hr,G),X(jo,Xt),R(Me))if(Me.length){const z=e.exposed||(e.exposed={});Me.forEach(D=>{Object.defineProperty(z,D,{get:()=>n[D],set:Fe=>n[D]=Fe})})}else e.exposed||(e.exposed={});ie&&e.render===le&&(e.render=ie),it!=null&&(e.inheritAttrs=it),yt&&(e.components=yt),Et&&(e.directives=Et)}function ko(e,t,n=le){R(e)&&(e=En(e));for(const s in e){const r=e[s];let o;k(r)?"default"in r?o=Ht(r.from||s,r.default,!0):o=Ht(r.from||s):o=Ht(r),re(o)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>o.value,set:l=>o.value=l}):t[s]=o}}function cs(e,t,n){de(R(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function pr(e,t,n,s){const r=s.includes(".")?ir(n,s):()=>n[s];if(Z(e)){const o=t[e];O(o)&&It(r,o)}else if(O(e))It(r,e.bind(n));else if(k(e))if(R(e))e.forEach(o=>pr(o,t,n,s));else{const o=O(e.handler)?e.handler.bind(n):t[e.handler];O(o)&&It(r,o,e)}}function jn(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:o,config:{optionMergeStrategies:l}}=e.appContext,c=o.get(t);let u;return c?u=c:!r.length&&!n&&!s?u=t:(u={},r.length&&r.forEach(d=>Kt(u,d,l,!0)),Kt(u,t,l)),k(t)&&o.set(t,u),u}function Kt(e,t,n,s=!1){const{mixins:r,extends:o}=t;o&&Kt(e,o,n,!0),r&&r.forEach(l=>Kt(e,l,n,!0));for(const l in t)if(!(s&&l==="expose")){const c=Zo[l]||n&&n[l];e[l]=c?c(e[l],t[l]):t[l]}return e}const Zo={data:fs,props:us,emits:us,methods:ut,computed:ut,beforeCreate:Q,created:Q,beforeMount:Q,mounted:Q,beforeUpdate:Q,updated:Q,beforeDestroy:Q,beforeUnmount:Q,destroyed:Q,unmounted:Q,activated:Q,deactivated:Q,errorCaptured:Q,serverPrefetch:Q,components:ut,directives:ut,watch:qo,provide:fs,inject:Go};function fs(e,t){return t?e?function(){return Y(O(e)?e.call(this,this):e,O(t)?t.call(this,this):t)}:t:e}function Go(e,t){return ut(En(e),En(t))}function En(e){if(R(e)){const t={};for(let n=0;n1)return n&&O(t)?t.call(s&&s.proxy):t}}function Qo(e,t,n,s=!1){const r={},o={};$t(o,Yt,1),e.propsDefaults=Object.create(null),_r(e,t,r,o);for(const l in e.propsOptions[0])l in r||(r[l]=void 0);n?e.props=s?r:uo(r):e.type.props?e.props=r:e.props=o,e.attrs=o}function el(e,t,n,s){const{props:r,attrs:o,vnode:{patchFlag:l}}=e,c=B(r),[u]=e.propsOptions;let d=!1;if((s||l>0)&&!(l&16)){if(l&8){const h=e.vnode.dynamicProps;for(let y=0;y{u=!0;const[T,S]=mr(y,t,!0);Y(l,T),S&&c.push(...S)};!n&&t.mixins.length&&t.mixins.forEach(h),e.extends&&h(e.extends),e.mixins&&e.mixins.forEach(h)}if(!o&&!u)return k(e)&&s.set(e,Xe),Xe;if(R(o))for(let h=0;h-1,S[1]=$<0||j<$,(j>-1||M(S,"default"))&&c.push(y)}}}const d=[l,c];return k(e)&&s.set(e,d),d}function as(e){return e[0]!=="$"&&!at(e)}function ds(e){return e===null?"null":typeof e=="function"?e.name||"":typeof e=="object"&&e.constructor&&e.constructor.name||""}function hs(e,t){return ds(e)===ds(t)}function ps(e,t){return R(t)?t.findIndex(n=>hs(n,e)):O(t)&&hs(t,e)?0:-1}const br=e=>e[0]==="_"||e==="$stable",Un=e=>R(e)?e.map(be):[be(e)],tl=(e,t,n)=>{if(t._n)return t;const s=Co((...r)=>Un(t(...r)),n);return s._c=!1,s},vr=(e,t,n)=>{const s=e._ctx;for(const r in e){if(br(r))continue;const o=e[r];if(O(o))t[r]=tl(r,o,s);else if(o!=null){const l=Un(o);t[r]=()=>l}}},yr=(e,t)=>{const n=Un(t);e.slots.default=()=>n},nl=(e,t)=>{if(e.vnode.shapeFlag&32){const n=t._;n?(e.slots=B(t),$t(t,"_",n)):vr(t,e.slots={})}else e.slots={},t&&yr(e,t);$t(e.slots,Yt,1)},sl=(e,t,n)=>{const{vnode:s,slots:r}=e;let o=!0,l=W;if(s.shapeFlag&32){const c=t._;c?n&&c===1?o=!1:(Y(r,t),!n&&c===1&&delete r._):(o=!t.$stable,vr(t,r)),l=t}else t&&(yr(e,t),l={default:1});if(o)for(const c in r)!br(c)&&l[c]==null&&delete r[c]};function Cn(e,t,n,s,r=!1){if(R(e)){e.forEach((T,S)=>Cn(T,t&&(R(t)?t[S]:t),n,s,r));return}if(Pt(s)&&!r)return;const o=s.shapeFlag&4?Vn(s.component)||s.component.proxy:s.el,l=r?null:o,{i:c,r:u}=e,d=t&&t.r,h=c.refs===W?c.refs={}:c.refs,y=c.setupState;if(d!=null&&d!==u&&(Z(d)?(h[d]=null,M(y,d)&&(y[d]=null)):re(d)&&(d.value=null)),O(u))Pe(u,c,12,[l,h]);else{const T=Z(u),S=re(u);if(T||S){const j=()=>{if(e.f){const $=T?M(y,u)?y[u]:h[u]:u.value;r?R($)&&An($,o):R($)?$.includes(o)||$.push(o):T?(h[u]=[o],M(y,u)&&(y[u]=h[u])):(u.value=[o],e.k&&(h[e.k]=u.value))}else T?(h[u]=l,M(y,u)&&(y[u]=l)):S&&(u.value=l,e.k&&(h[e.k]=l))};l?(j.id=-1,ne(j,n)):j()}}}const ne=Oo;function rl(e){return ol(e)}function ol(e,t){const n=Hs();n.__VUE__=!0;const{insert:s,remove:r,patchProp:o,createElement:l,createText:c,createComment:u,setText:d,setElementText:h,parentNode:y,nextSibling:T,setScopeId:S=le,insertStaticContent:j}=e,$=(i,f,a,p=null,g=null,b=null,E=void 0,m=null,v=!!f.dynamicChildren)=>{if(i===f)return;i&&!ft(i,f)&&(p=Ct(i),pe(i,g,b,!0),i=null),f.patchFlag===-2&&(v=!1,f.dynamicChildren=null);const{type:_,ref:x,shapeFlag:A}=f;switch(_){case qt:I(i,f,a,p);break;case We:C(i,f,a,p);break;case an:i==null&&H(f,a,p,E);break;case ue:yt(i,f,a,p,g,b,E,m,v);break;default:A&1?ie(i,f,a,p,g,b,E,m,v):A&6?Et(i,f,a,p,g,b,E,m,v):(A&64||A&128)&&_.process(i,f,a,p,g,b,E,m,v,Ze)}x!=null&&g&&Cn(x,i&&i.ref,b,f||i,!f)},I=(i,f,a,p)=>{if(i==null)s(f.el=c(f.children),a,p);else{const g=f.el=i.el;f.children!==i.children&&d(g,f.children)}},C=(i,f,a,p)=>{i==null?s(f.el=u(f.children||""),a,p):f.el=i.el},H=(i,f,a,p)=>{[i.el,i.anchor]=j(i.children,f,a,p,i.el,i.anchor)},U=({el:i,anchor:f},a,p)=>{let g;for(;i&&i!==f;)g=T(i),s(i,a,p),i=g;s(f,a,p)},G=({el:i,anchor:f})=>{let a;for(;i&&i!==f;)a=T(i),r(i),i=a;r(f)},ie=(i,f,a,p,g,b,E,m,v)=>{f.type==="svg"?E="svg":f.type==="math"&&(E="mathml"),i==null?N(f,a,p,g,b,E,m,v):Xt(i,f,g,b,E,m,v)},N=(i,f,a,p,g,b,E,m)=>{let v,_;const{props:x,shapeFlag:A,transition:w,dirs:L}=i;if(v=i.el=l(i.type,b,x&&x.is,x),A&8?h(v,i.children):A&16&&he(i.children,v,null,p,g,un(i,b),E,m),L&&Ne(i,null,p,"created"),Ee(v,i,i.scopeId,E,p),x){for(const K in x)K!=="value"&&!at(K)&&o(v,K,null,x[K],b,i.children,p,g,xe);"value"in x&&o(v,"value",null,x.value,b),(_=x.onVnodeBeforeMount)&&_e(_,p,i)}L&&Ne(i,null,p,"beforeMount");const P=ll(g,w);P&&w.beforeEnter(v),s(v,f,a),((_=x&&x.onVnodeMounted)||P||L)&&ne(()=>{_&&_e(_,p,i),P&&w.enter(v),L&&Ne(i,null,p,"mounted")},g)},Ee=(i,f,a,p,g)=>{if(a&&S(i,a),p)for(let b=0;b{for(let _=v;_{const m=f.el=i.el;let{patchFlag:v,dynamicChildren:_,dirs:x}=f;v|=i.patchFlag&16;const A=i.props||W,w=f.props||W;let L;if(a&&Be(a,!1),(L=w.onVnodeBeforeUpdate)&&_e(L,a,f,i),x&&Ne(f,i,a,"beforeUpdate"),a&&Be(a,!0),_?Me(i.dynamicChildren,_,m,a,p,un(f,g),b):E||D(i,f,m,null,a,p,un(f,g),b,!1),v>0){if(v&16)it(m,f,A,w,a,p,g);else if(v&2&&A.class!==w.class&&o(m,"class",null,w.class,g),v&4&&o(m,"style",A.style,w.style,g),v&8){const P=f.dynamicProps;for(let K=0;K{L&&_e(L,a,f,i),x&&Ne(f,i,a,"updated")},p)},Me=(i,f,a,p,g,b,E)=>{for(let m=0;m{if(a!==p){if(a!==W)for(const m in a)!at(m)&&!(m in p)&&o(i,m,a[m],null,E,f.children,g,b,xe);for(const m in p){if(at(m))continue;const v=p[m],_=a[m];v!==_&&m!=="value"&&o(i,m,_,v,E,f.children,g,b,xe)}"value"in p&&o(i,"value",a.value,p.value,E)}},yt=(i,f,a,p,g,b,E,m,v)=>{const _=f.el=i?i.el:c(""),x=f.anchor=i?i.anchor:c("");let{patchFlag:A,dynamicChildren:w,slotScopeIds:L}=f;L&&(m=m?m.concat(L):L),i==null?(s(_,a,p),s(x,a,p),he(f.children||[],a,x,g,b,E,m,v)):A>0&&A&64&&w&&i.dynamicChildren?(Me(i.dynamicChildren,w,a,g,b,E,m),(f.key!=null||g&&f===g.subTree)&&Er(i,f,!0)):D(i,f,a,x,g,b,E,m,v)},Et=(i,f,a,p,g,b,E,m,v)=>{f.slotScopeIds=m,i==null?f.shapeFlag&512?g.ctx.activate(f,a,p,E,v):Qt(f,a,p,g,b,E,v):Wn(i,f,v)},Qt=(i,f,a,p,g,b,E)=>{const m=i.component=ml(i,p,g);if(fr(i)&&(m.ctx.renderer=Ze),bl(m),m.asyncDep){if(g&&g.registerDep(m,X),!i.el){const v=m.subTree=Te(We);C(null,v,f,a)}}else X(m,i,f,a,g,b,E)},Wn=(i,f,a)=>{const p=f.component=i.component;if(wo(i,f,a))if(p.asyncDep&&!p.asyncResolved){z(p,f,a);return}else p.next=f,vo(p.update),p.effect.dirty=!0,p.update();else f.el=i.el,p.vnode=f},X=(i,f,a,p,g,b,E)=>{const m=()=>{if(i.isMounted){let{next:x,bu:A,u:w,parent:L,vnode:P}=i;{const Ge=xr(i);if(Ge){x&&(x.el=P.el,z(i,x,E)),Ge.asyncDep.then(()=>{i.isUnmounted||m()});return}}let K=x,V;Be(i,!1),x?(x.el=P.el,z(i,x,E)):x=P,A&&rn(A),(V=x.props&&x.props.onVnodeBeforeUpdate)&&_e(V,L,x,P),Be(i,!0);const q=cn(i),ce=i.subTree;i.subTree=q,$(ce,q,y(ce.el),Ct(ce),i,g,b),x.el=q.el,K===null&&Ao(i,q.el),w&&ne(w,g),(V=x.props&&x.props.onVnodeUpdated)&&ne(()=>_e(V,L,x,P),g)}else{let x;const{el:A,props:w}=f,{bm:L,m:P,parent:K}=i,V=Pt(f);if(Be(i,!1),L&&rn(L),!V&&(x=w&&w.onVnodeBeforeMount)&&_e(x,K,f),Be(i,!0),A&&nn){const q=()=>{i.subTree=cn(i),nn(A,i.subTree,i,g,null)};V?f.type.__asyncLoader().then(()=>!i.isUnmounted&&q()):q()}else{const q=i.subTree=cn(i);$(null,q,a,p,i,g,b),f.el=q.el}if(P&&ne(P,g),!V&&(x=w&&w.onVnodeMounted)){const q=f;ne(()=>_e(x,K,q),g)}(f.shapeFlag&256||K&&Pt(K.vnode)&&K.vnode.shapeFlag&256)&&i.a&&ne(i.a,g),i.isMounted=!0,f=a=p=null}},v=i.effect=new On(m,le,()=>Kn(_),i.scope),_=i.update=()=>{v.dirty&&v.run()};_.id=i.uid,Be(i,!0),_()},z=(i,f,a)=>{f.component=i;const p=i.vnode.props;i.vnode=f,i.next=null,el(i,f.props,p,a),sl(i,f.children,a),ze(),rs(i),ke()},D=(i,f,a,p,g,b,E,m,v=!1)=>{const _=i&&i.children,x=i?i.shapeFlag:0,A=f.children,{patchFlag:w,shapeFlag:L}=f;if(w>0){if(w&128){xt(_,A,a,p,g,b,E,m,v);return}else if(w&256){Fe(_,A,a,p,g,b,E,m,v);return}}L&8?(x&16&&xe(_,g,b),A!==_&&h(a,A)):x&16?L&16?xt(_,A,a,p,g,b,E,m,v):xe(_,g,b,!0):(x&8&&h(a,""),L&16&&he(A,a,p,g,b,E,m,v))},Fe=(i,f,a,p,g,b,E,m,v)=>{i=i||Xe,f=f||Xe;const _=i.length,x=f.length,A=Math.min(_,x);let w;for(w=0;wx?xe(i,g,b,!0,!1,A):he(f,a,p,g,b,E,m,v,A)},xt=(i,f,a,p,g,b,E,m,v)=>{let _=0;const x=f.length;let A=i.length-1,w=x-1;for(;_<=A&&_<=w;){const L=i[_],P=f[_]=v?Re(f[_]):be(f[_]);if(ft(L,P))$(L,P,a,null,g,b,E,m,v);else break;_++}for(;_<=A&&_<=w;){const L=i[A],P=f[w]=v?Re(f[w]):be(f[w]);if(ft(L,P))$(L,P,a,null,g,b,E,m,v);else break;A--,w--}if(_>A){if(_<=w){const L=w+1,P=Lw)for(;_<=A;)pe(i[_],g,b,!0),_++;else{const L=_,P=_,K=new Map;for(_=P;_<=w;_++){const oe=f[_]=v?Re(f[_]):be(f[_]);oe.key!=null&&K.set(oe.key,_)}let V,q=0;const ce=w-P+1;let Ge=!1,Zn=0;const ct=new Array(ce);for(_=0;_=ce){pe(oe,g,b,!0);continue}let ge;if(oe.key!=null)ge=K.get(oe.key);else for(V=P;V<=w;V++)if(ct[V-P]===0&&ft(oe,f[V])){ge=V;break}ge===void 0?pe(oe,g,b,!0):(ct[ge-P]=_+1,ge>=Zn?Zn=ge:Ge=!0,$(oe,f[ge],a,null,g,b,E,m,v),q++)}const Gn=Ge?il(ct):Xe;for(V=Gn.length-1,_=ce-1;_>=0;_--){const oe=P+_,ge=f[oe],qn=oe+1{const{el:b,type:E,transition:m,children:v,shapeFlag:_}=i;if(_&6){$e(i.component.subTree,f,a,p);return}if(_&128){i.suspense.move(f,a,p);return}if(_&64){E.move(i,f,a,Ze);return}if(E===ue){s(b,f,a);for(let A=0;Am.enter(b),g);else{const{leave:A,delayLeave:w,afterLeave:L}=m,P=()=>s(b,f,a),K=()=>{A(b,()=>{P(),L&&L()})};w?w(b,P,K):K()}else s(b,f,a)},pe=(i,f,a,p=!1,g=!1)=>{const{type:b,props:E,ref:m,children:v,dynamicChildren:_,shapeFlag:x,patchFlag:A,dirs:w}=i;if(m!=null&&Cn(m,null,a,i,!0),x&256){f.ctx.deactivate(i);return}const L=x&1&&w,P=!Pt(i);let K;if(P&&(K=E&&E.onVnodeBeforeUnmount)&&_e(K,f,i),x&6)Rr(i.component,a,p);else{if(x&128){i.suspense.unmount(a,p);return}L&&Ne(i,null,f,"beforeUnmount"),x&64?i.type.remove(i,f,a,g,Ze,p):_&&(b!==ue||A>0&&A&64)?xe(_,f,a,!1,!0):(b===ue&&A&384||!g&&x&16)&&xe(v,f,a),p&&zn(i)}(P&&(K=E&&E.onVnodeUnmounted)||L)&&ne(()=>{K&&_e(K,f,i),L&&Ne(i,null,f,"unmounted")},a)},zn=i=>{const{type:f,el:a,anchor:p,transition:g}=i;if(f===ue){Lr(a,p);return}if(f===an){G(i);return}const b=()=>{r(a),g&&!g.persisted&&g.afterLeave&&g.afterLeave()};if(i.shapeFlag&1&&g&&!g.persisted){const{leave:E,delayLeave:m}=g,v=()=>E(a,b);m?m(i.el,b,v):v()}else b()},Lr=(i,f)=>{let a;for(;i!==f;)a=T(i),r(i),i=a;r(f)},Rr=(i,f,a)=>{const{bum:p,scope:g,update:b,subTree:E,um:m}=i;p&&rn(p),g.stop(),b&&(b.active=!1,pe(E,i,f,a)),m&&ne(m,f),ne(()=>{i.isUnmounted=!0},f),f&&f.pendingBranch&&!f.isUnmounted&&i.asyncDep&&!i.asyncResolved&&i.suspenseId===f.pendingId&&(f.deps--,f.deps===0&&f.resolve())},xe=(i,f,a,p=!1,g=!1,b=0)=>{for(let E=b;Ei.shapeFlag&6?Ct(i.component.subTree):i.shapeFlag&128?i.suspense.next():T(i.anchor||i.el);let en=!1;const kn=(i,f,a)=>{i==null?f._vnode&&pe(f._vnode,null,null,!0):$(f._vnode||null,i,f,null,null,null,a),en||(en=!0,rs(),nr(),en=!1),f._vnode=i},Ze={p:$,um:pe,m:$e,r:zn,mt:Qt,mc:he,pc:D,pbc:Me,n:Ct,o:e};let tn,nn;return t&&([tn,nn]=t(Ze)),{render:kn,hydrate:tn,createApp:Jo(kn,tn)}}function un({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function Be({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function ll(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Er(e,t,n=!1){const s=e.children,r=t.children;if(R(s)&&R(r))for(let o=0;o>1,e[n[c]]0&&(t[s]=n[o-1]),n[o]=s)}}for(o=n.length,l=n[o-1];o-- >0;)n[o]=l,l=t[l];return n}function xr(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:xr(t)}const cl=e=>e.__isTeleport,ue=Symbol.for("v-fgt"),qt=Symbol.for("v-txt"),We=Symbol.for("v-cmt"),an=Symbol.for("v-stc"),pt=[];let ae=null;function ee(e=!1){pt.push(ae=e?null:[])}function fl(){pt.pop(),ae=pt[pt.length-1]||null}let bt=1;function gs(e){bt+=e}function Cr(e){return e.dynamicChildren=bt>0?ae||Xe:null,fl(),bt>0&&ae&&ae.push(e),e}function Ae(e,t,n,s,r,o){return Cr(F(e,t,n,s,r,o,!0))}function Ke(e,t,n,s,r){return Cr(Te(e,t,n,s,r,!0))}function ul(e){return e?e.__v_isVNode===!0:!1}function ft(e,t){return e.type===t.type&&e.key===t.key}const Yt="__vInternal",Tr=({key:e})=>e??null,Mt=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?Z(e)||re(e)||O(e)?{i:ye,r:e,k:t,f:!!n}:e:null);function F(e,t=null,n=null,s=0,r=null,o=e===ue?0:1,l=!1,c=!1){const u={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Tr(t),ref:t&&Mt(t),scopeId:or,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:o,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:ye};return c?(Dn(u,n),o&128&&e.normalize(u)):n&&(u.shapeFlag|=Z(n)?8:16),bt>0&&!l&&ae&&(u.patchFlag>0||o&6)&&u.patchFlag!==32&&ae.push(u),u}const Te=al;function al(e,t=null,n=null,s=0,r=null,o=!1){if((!e||e===Lo)&&(e=We),ul(e)){const c=rt(e,t,!0);return n&&Dn(c,n),bt>0&&!o&&ae&&(c.shapeFlag&6?ae[ae.indexOf(e)]=c:ae.push(c)),c.patchFlag|=-2,c}if(xl(e)&&(e=e.__vccOpts),t){t=dl(t);let{class:c,style:u}=t;c&&!Z(c)&&(t.class=Wt(c)),k(u)&&(Gs(u)&&!R(u)&&(u=Y({},u)),t.style=Rn(u))}const l=Z(e)?1:Ro(e)?128:cl(e)?64:k(e)?4:O(e)?2:0;return F(e,t,n,s,r,l,o,!0)}function dl(e){return e?Gs(e)||Yt in e?Y({},e):e:null}function rt(e,t,n=!1){const{props:s,ref:r,patchFlag:o,children:l}=e,c=t?pl(s||{},t):s;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:c,key:c&&Tr(c),ref:t&&t.ref?n&&r?R(r)?r.concat(Mt(t)):[r,Mt(t)]:Mt(t):r,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==ue?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&rt(e.ssContent),ssFallback:e.ssFallback&&rt(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce}}function hl(e=" ",t=0){return Te(qt,null,e,t)}function qe(e="",t=!1){return t?(ee(),Ke(We,null,e)):Te(We,null,e)}function be(e){return e==null||typeof e=="boolean"?Te(We):R(e)?Te(ue,null,e.slice()):typeof e=="object"?Re(e):Te(qt,null,String(e))}function Re(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:rt(e)}function Dn(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(R(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),Dn(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!(Yt in t)?t._ctx=ye:r===3&&ye&&(ye.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else O(t)?(t={default:t,_ctx:ye},n=32):(t=String(t),s&64?(n=16,t=[hl(t)]):n=8);e.children=t,e.shapeFlag|=n}function pl(...e){const t={};for(let n=0;n{let r;return(r=e[n])||(r=e[n]=[]),r.push(s),o=>{r.length>1?r.forEach(l=>l(o)):r[0](o)}};jt=t("__VUE_INSTANCE_SETTERS__",n=>te=n),Tn=t("__VUE_SSR_SETTERS__",n=>Jt=n)}const vt=e=>{const t=te;return jt(e),e.scope.on(),()=>{e.scope.off(),jt(t)}},_s=()=>{te&&te.scope.off(),jt(null)};function Sr(e){return e.vnode.shapeFlag&4}let Jt=!1;function bl(e,t=!1){t&&Tn(t);const{props:n,children:s}=e.vnode,r=Sr(e);Qo(e,n,r,t),nl(e,s);const o=r?vl(e,t):void 0;return t&&Tn(!1),o}function vl(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=qs(new Proxy(e.ctx,Wo));const{setup:s}=n;if(s){const r=e.setupContext=s.length>1?El(e):null,o=vt(e);ze();const l=Pe(s,e,0,[e.props,r]);if(ke(),o(),Rs(l)){if(l.then(_s,_s),t)return l.then(c=>{ms(e,c,t)}).catch(c=>{kt(c,e,0)});e.asyncDep=l}else ms(e,l,t)}else wr(e,t)}function ms(e,t,n){O(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:k(t)&&(e.setupState=Qs(t)),wr(e,n)}let bs;function wr(e,t,n){const s=e.type;if(!e.render){if(!t&&bs&&!s.render){const r=s.template||jn(e).template;if(r){const{isCustomElement:o,compilerOptions:l}=e.appContext.config,{delimiters:c,compilerOptions:u}=s,d=Y(Y({isCustomElement:o,delimiters:c},l),u);s.render=bs(r,d)}}e.render=s.render||le}{const r=vt(e);ze();try{zo(e)}finally{ke(),r()}}}function yl(e){return e.attrsProxy||(e.attrsProxy=new Proxy(e.attrs,{get(t,n){return se(e,"get","$attrs"),t[n]}}))}function El(e){const t=n=>{e.exposed=n||{}};return{get attrs(){return yl(e)},slots:e.slots,emit:e.emit,expose:t}}function Vn(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(Qs(qs(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in dt)return dt[n](e)},has(t,n){return n in t||n in dt}}))}function xl(e){return O(e)&&"__vccOpts"in e}const Cl=(e,t)=>ao(e,t,Jt),Tl="3.4.21";/** -* @vue/runtime-dom v3.4.21 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/const Sl="http://www.w3.org/2000/svg",wl="http://www.w3.org/1998/Math/MathML",Oe=typeof document<"u"?document:null,vs=Oe&&Oe.createElement("template"),Al={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const r=t==="svg"?Oe.createElementNS(Sl,e):t==="mathml"?Oe.createElementNS(wl,e):Oe.createElement(e,n?{is:n}:void 0);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>Oe.createTextNode(e),createComment:e=>Oe.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Oe.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,o){const l=n?n.previousSibling:t.lastChild;if(r&&(r===o||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===o||!(r=r.nextSibling)););else{vs.innerHTML=s==="svg"?`${e}`:s==="mathml"?`${e}`:e;const c=vs.content;if(s==="svg"||s==="mathml"){const u=c.firstChild;for(;u.firstChild;)c.appendChild(u.firstChild);c.removeChild(u)}t.insertBefore(c,n)}return[l?l.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Ll=Symbol("_vtc");function Rl(e,t,n){const s=e[Ll];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const ys=Symbol("_vod"),Ol=Symbol("_vsh"),Il=Symbol(""),Pl=/(^|;)\s*display\s*:/;function Hl(e,t,n){const s=e.style,r=Z(n);let o=!1;if(n&&!r){if(t)if(Z(t))for(const l of t.split(";")){const c=l.slice(0,l.indexOf(":")).trim();n[c]==null&&Ft(s,c,"")}else for(const l in t)n[l]==null&&Ft(s,l,"");for(const l in n)l==="display"&&(o=!0),Ft(s,l,n[l])}else if(r){if(t!==n){const l=s[Il];l&&(n+=";"+l),s.cssText=n,o=Pl.test(n)}}else t&&e.removeAttribute("style");ys in e&&(e[ys]=o?s.display:"",e[Ol]&&(s.display="none"))}const Es=/\s*!important$/;function Ft(e,t,n){if(R(n))n.forEach(s=>Ft(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=Ml(e,t);Es.test(n)?e.setProperty(lt(s),n.replace(Es,""),"important"):e[s]=n}}const xs=["Webkit","Moz","ms"],dn={};function Ml(e,t){const n=dn[t];if(n)return n;let s=nt(t);if(s!=="filter"&&s in e)return dn[t]=s;s=Ps(s);for(let r=0;rhn||(Ul.then(()=>hn=0),hn=Date.now());function Vl(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;de(Wl(s,n.value),t,5,[s])};return n.value=e,n.attached=Dl(),n}function Wl(e,t){if(R(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>r=>!r._stopped&&s&&s(r))}else return t}const ws=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,zl=(e,t,n,s,r,o,l,c,u)=>{const d=r==="svg";t==="class"?Rl(e,s,d):t==="style"?Hl(e,n,s):Ut(t)?wn(t)||Kl(e,t,n,s,l):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):kl(e,t,s,d))?$l(e,t,s,o,l,c,u):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),Fl(e,t,s,d))};function kl(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&ws(t)&&O(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return ws(t)&&Z(n)?!1:t in e}const Zl=Y({patchProp:zl},Al);let As;function Gl(){return As||(As=rl(Zl))}const ql=(...e)=>{const t=Gl().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=Jl(s);if(!r)return;const o=t._component;!O(o)&&!o.render&&!o.template&&(o.template=r.innerHTML),r.innerHTML="";const l=n(r,!1,Yl(r));return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),l},t};function Yl(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Jl(e){return Z(e)?document.querySelector(e):e}const Xl=["src"],Ye=cr({__name:"CardComponent",props:{card:{}},setup(e){const t=e,n=me("/assets/card_back.png"),s=me(!1);return ar(()=>{n.value="/assets/"+t.card.toString().toLowerCase()+".png"}),It(()=>t.card,r=>{n.value=`/assets/${r.toString().toLowerCase()}.png`}),(r,o)=>(ee(),Ae("div",{onClick:o[0]||(o[0]=l=>s.value=!s.value),class:Wt([{"!scale-105 !z-10 !top-1/2 !left-1/2":s.value},"card transition overflow-hidden"])},[F("img",{class:"h-full rounded-[1rem] mx-auto",src:n.value},null,8,Xl)],2))}});var Ar=(e=>(e.EICHEL_7="EICHEL_7",e.EICHEL_8="EICHEL_8",e.EICHEL_9="EICHEL_9",e.EICHEL_X="EICHEL_X",e.EICHEL_K="EICHEL_K",e.EICHEL_A="EICHEL_A",e.BLATT_7="BLATT_7",e.BLATT_8="BLATT_8",e.BLATT_9="BLATT_9",e.BLATT_X="BLATT_X",e.BLATT_K="BLATT_K",e.BLATT_A="BLATT_A",e.SCHELL_7="SCHELL_7",e.SCHELL_8="SCHELL_8",e.SCHELL_9="SCHELL_9",e.SCHELL_X="SCHELL_X",e.SCHELL_K="SCHELL_K",e.SCHELL_A="SCHELL_A",e.HERZ_7="HERZ_7",e.HERZ_8="HERZ_8",e.HERZ_9="HERZ_9",e.HERZ_X="HERZ_X",e.HERZ_K="HERZ_K",e.HERZ_A="HERZ_A",e.SCHELL_U="SCHELL_U",e.HERZ_U="HERZ_U",e.BLATT_U="BLATT_U",e.EICHEL_U="EICHEL_U",e.SCHELL_O="SCHELL_O",e.HERZ_O="HERZ_O",e.BLATT_O="BLATT_O",e.EICHEL_O="EICHEL_O",e.BACK="CARD_BACK",e))(Ar||{}),je=(e=>(e.CHOOSE_GAME="CHOOSE_GAME",e.GAME_START="GAME_START",e.GAME_STOP="GAME_STOP",e.TRICK_START="TRICK_START",e.WAIT_FOR_CARD="WAIT_FOR_CARD",e.PLAYER_CARD="PLAYER_CARD",e.PLAYER_TRICK="PLAYER_TRICK",e))(je||{});const Ql={key:0},ei={class:"flex gap-2 place-content-center"},ti={key:1},ni={class:"top-52 text-white font-bold text-6xl absolute text-center w-full"},si={class:"top-64 text-white font-bold text-6xl absolute text-center w-full"},ri={key:0},oi={class:"absolute left-0 top-1/2 transform -translate-y-1/2"},li={class:"absolute bottom-0 w-full"},ii={class:"flex flex-row gap-3 w-fit mx-auto justify-center"},ci=cr({__name:"App",setup(e){const t=me([]),n=me("Schafkopf"),s=me(""),r=me(),o=me([]),l=me(0),c=me(),u=me(!0);function d(){j("startsimulation")}function h(){j("stopsimulation")}function y(){o.value=[],j("showtrumpf")}function T(){o.value=[],j("showfarben")}function S(I){j(I)}function j(I){r.value&&(r.value.send(I),console.log("Sent message to server:",I))}function $(I){var C;switch(I.gamePhase){case je.GAME_START:n.value="Spiel startet",u.value=!1,l.value=8;break;case je.TRICK_START:n.value="Runde startet",o.value=[],c.value=void 0,s.value="";break;case je.WAIT_FOR_CARD:n.value="Spieler "+I.currentPlayer+" muss eine Karte legen.";break;case je.PLAYER_CARD:n.value="Spieler "+I.currentPlayer+" hat eine Karte gespielt.",I.currentPlayer===0&&l.value--,I.trumpf?s.value="TRUMPF":s.value=((C=I.color)==null?void 0:C.toString())??"ERROR",o.value.push(I.card);break;case je.PLAYER_TRICK:n.value="Spieler "+I.currentPlayer+" sticht.",c.value=I.card;break;case je.GAME_STOP:u.value=!0;break;default:n.value="Fehler"}}return dr(()=>{const I="10.6.9.69";r.value=new WebSocket("ws://"+I+":8080/schafkopf-events/"),r.value.addEventListener("open",C=>{console.log("WebSocket connection opened:",C)}),r.value.addEventListener("message",C=>{const H=JSON.parse(C.data);console.log(H),"gamestate"in H?(console.log(H.gamestate),$(H.gamestate)):console.log("Invalid BackendMessage format: ",C)}),r.value.addEventListener("close",C=>{console.log("WebSocket connection closed:",C)}),r.value.addEventListener("error",C=>{console.error("WebSocket error:",C)})}),(I,C)=>(ee(),Ae("div",null,[(ee(!0),Ae(ue,null,ls(t.value,H=>(ee(),Ae("div",null,on(H),1))),256)),u.value?(ee(),Ae("div",Ql,[F("div",ei,[F("button",{onClick:C[0]||(C[0]=H=>S("setgame:sauspiel"))},"Sauspiel"),F("button",{onClick:C[1]||(C[1]=H=>S("setgame:herzsolo"))},"herzsolo"),F("button",{onClick:C[2]||(C[2]=H=>S("setgame:eichelsolo"))},"eichelsolo"),F("button",{onClick:C[3]||(C[3]=H=>S("setgame:blattsolo"))},"blattsolo"),F("button",{onClick:C[4]||(C[4]=H=>S("setgame:schellsolo"))},"schellsolo"),F("button",{onClick:C[5]||(C[5]=H=>S("setgame:eichelwenz"))},"eichelwenz"),F("button",{onClick:C[6]||(C[6]=H=>S("setgame:blattwenz"))},"blattwenz"),F("button",{onClick:C[7]||(C[7]=H=>S("setgame:herzwenz"))},"herzwenz"),F("button",{onClick:C[8]||(C[8]=H=>S("setgame:schellwenz"))},"schellwenz"),F("button",{onClick:C[9]||(C[9]=H=>S("setgame:eichelgeier"))},"eichelgeier"),F("button",{onClick:C[10]||(C[10]=H=>S("setgame:blattgeier"))},"blattgeier"),F("button",{onClick:C[11]||(C[11]=H=>S("setgame:herzgeier"))},"herzgeier"),F("button",{onClick:C[12]||(C[12]=H=>S("setgame:schellgeier"))},"schellgeier"),F("button",{onClick:C[13]||(C[13]=H=>S("setgame:geier"))},"Geier"),F("button",{onClick:C[14]||(C[14]=H=>S("setgame:wenz"))},"Wenz")]),F("div",{class:"flex gap-2 place-content-center"},[F("button",{onClick:T},"Zeige alle Farben"),F("button",{onClick:y},"Zeige alle Trumpfkarten")]),F("div",{class:"flex gap-2 place-content-center"},[F("button",{class:"v-button",onClick:d},"Starten"),F("button",{class:"v-button",onClick:h},"Stoppen")])])):(ee(),Ae("div",ti,[F("div",{class:"flex gap-2 place-content-center"},[F("button",{class:"v-button",onClick:h},"Stoppen")]),F("h1",ni,on(s.value),1),F("h1",si,on(n.value),1),o.value.length>0?(ee(),Ae("div",ri,[o.value.length>0?(ee(),Ke(Ye,{key:0,card:o.value[0],class:"absolute card1 md"},null,8,["card"])):qe("",!0),o.value.length>1?(ee(),Ke(Ye,{key:1,card:o.value[1],class:"absolute card2 md"},null,8,["card"])):qe("",!0),o.value.length>2?(ee(),Ke(Ye,{key:2,card:o.value[2],class:"absolute card3 md"},null,8,["card"])):qe("",!0),o.value.length>3?(ee(),Ke(Ye,{key:3,card:o.value[3],class:"absolute card4 md"},null,8,["card"])):qe("",!0)])):qe("",!0),F("div",oi,[c.value?(ee(),Ke(Ye,{key:0,card:c.value,class:"xl"},null,8,["card"])):qe("",!0)]),F("div",li,[F("div",ii,[(ee(!0),Ae(ue,null,ls(l.value,H=>(ee(),Ke(Ye,{card:Xs(Ar).BACK,class:"sm"},null,8,["card"]))),256))])])]))]))}});ql(ci).mount("#app"); diff --git a/Backend/src/main/resources/web-content/assets/vue.svg b/Backend/src/main/resources/web-content/assets/vue.svg deleted file mode 100644 index 770e9d3..0000000 --- a/Backend/src/main/resources/web-content/assets/vue.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Backend/src/main/resources/web-content/index.html b/Backend/src/main/resources/web-content/index.html deleted file mode 100644 index 07c4915..0000000 --- a/Backend/src/main/resources/web-content/index.html +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - Vite + Vue - - - - -
- - - diff --git a/Frontend/package.json b/Frontend/package.json index 04226c4..bdb8f57 100644 --- a/Frontend/package.json +++ b/Frontend/package.json @@ -5,7 +5,7 @@ "type": "module", "scripts": { "dev": "vite", - "build": "vue-tsc && vite build", + "build": "vue-tsc && vite build --emptyOutDir", "preview": "vite preview" }, "dependencies": { diff --git a/Frontend/src/App.vue b/Frontend/src/App.vue index b188aba..748687f 100644 --- a/Frontend/src/App.vue +++ b/Frontend/src/App.vue @@ -134,20 +134,20 @@ onMounted(() => {
- - - - + + + + - - - - + + + + - - - - + + + + diff --git a/Frontend/vite.config.ts b/Frontend/vite.config.ts index 05c1740..2c3b0a6 100644 --- a/Frontend/vite.config.ts +++ b/Frontend/vite.config.ts @@ -1,7 +1,10 @@ -import { defineConfig } from 'vite' +import {defineConfig} from 'vite' import vue from '@vitejs/plugin-vue' // https://vitejs.dev/config/ export default defineConfig({ - plugins: [vue()], + plugins: [vue()], + build: { + outDir: '../Backend/src/main/resources/web-content', + }, })