fix(*)1. 完成项目设计 2. 完成项目与模块搭建 (#14)

Co-authored-by: jie@apache.org <2732554140@qq.com>
diff --git a/.dockerignore b/.dockerignore
deleted file mode 100644
index c0f64a8..0000000
--- a/.dockerignore
+++ /dev/null
@@ -1,2 +0,0 @@
-dist/
-build/
diff --git a/.gitignore b/.gitignore
index 63d2f1a..b1f31d2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,10 +1,102 @@
-.gradle
-build/
-!gradle/wrapper/gradle-wrapper.jar
-!**/src/main/**/build/
-!**/src/test/**/build/
+.settings/
+.project
+.classpath
+.target
+./**/.settings/
+./**/.project
+./**/.classpath
+./**/target/
 
-### STS ###
+
+#gitignore文件的内容
+.factorypath
+.DS_Store
+.project
+*.prefs
+.classpath
+.setting/h
+.settings/
+.idea/
+*.iml
+*.ipr
+*.iws
+logs/
+
+#忽略eclipse相关
+org.eclipse.core.resources.prefs
+org.eclipse.jdt.core.prefs
+org.eclipse.m2e.core.prefs
+org.eclipse.wst.common.component
+org.eclipse.wst.common.project.facet.core.xml
+
+#忽略java相关的文件
+*.class
+*.trc
+# Mobile Tools for Java (J2ME)
+.mtj.tmp/
+
+# Package Files #
+*.jar
+*.war
+*.ear
+
+# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
+hs_err_pid*
+
+#忽略maven相关的文件
+target/
+pom.xml.tag
+pom.xml.releaseBackup
+pom.xml.versionsBackup
+pom.xml.next
+release.properties
+dependency-reduced-pom.xml
+buildNumber.properties
+.mvn/timing.properties
+
+# Built application files
+*.apk
+*.ap_
+
+
+#忽略andriod相关的文件
+# Files for the Dalvik VM
+*.dex
+# Generated files
+bin/
+gen/
+# Gradle files
+.gradle/
+build/
+*/build/
+
+# Local configuration file (sdk path, etc)
+local.properties
+
+# Proguard folder generated by Eclipse
+proguard/
+# Log Files
+*.log
+# Android Studio Navigation editor temp files
+.navigation/
+# Android Studio captures folder
+captures/
+
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### IntelliJ IDEA ###
+.idea/modules.xml
+.idea/jarRepositories.xml
+.idea/compiler.xml
+.idea/libraries/
+*.iws
+*.iml
+*.ipr
+
+### Eclipse ###
 .apt_generated
 .classpath
 .factorypath
@@ -12,18 +104,6 @@
 .settings
 .springBeans
 .sts4-cache
-bin/
-!**/src/main/**/bin/
-!**/src/test/**/bin/
-
-### IntelliJ IDEA ###
-.idea
-*.iws
-*.iml
-*.ipr
-out/
-!**/src/main/**/out/
-!**/src/test/**/out/
 
 ### NetBeans ###
 /nbproject/private/
@@ -31,6 +111,12 @@
 /dist/
 /nbdist/
 /.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
 
 ### VS Code ###
 .vscode/
+
+### Mac OS ###
+.DS_Store
\ No newline at end of file
diff --git a/README.md b/README.md
index c937ce4..1d3574c 100644
--- a/README.md
+++ b/README.md
@@ -1,24 +1,24 @@
-# Getting Started
 
-## Build on source code
 
-```
-cd eventmesh-dashboard
-./gradlew clean bootJar
-```
+## 介绍
 
-```
-java -jar build/libs/eventmesh-dashboard-0.0.1-SNAPSHOT.jar
-```
 
-## Build and Run with Docker
+## 业务架构
 
-```
-cd eventmesh-dashboard
-./gradlew clean bootJar
-docker build -t yourname/eventmesh-dashboard -f docker/Dockerfile .
-```
 
-```
-docker run -d --name eventmesh-dashboard -p 8080:8080 yourname/eventmesh-dashboard
-```
\ No newline at end of file
+## 技术架构
+
+
+### 模块依赖图
+
+### 模块介绍
+
+1. eventmesh-dashboard-console  业务模块的代码
+2. eventmesh-dashboard-observe  监控模块的代码
+3. eventmesh-dashboard-core     对eventmesh以及相关组件的代码
+4. eventmesh-dashboard-service  公用接口
+5. eventmesh-dashboard-common   公共模块的代码
+6. eventmesh-dashboard-view     前端代码
+
+
+### eventmesh-dashboard-core 介绍
diff --git a/build.gradle b/build.gradle
deleted file mode 100644
index 5b676ab..0000000
--- a/build.gradle
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-plugins {
-    id 'java'
-    id 'idea'
-    id 'org.springframework.boot' version '2.7.15'
-    id 'io.spring.dependency-management' version '1.0.15.RELEASE'
-}
-
-group = 'org.apache.eventmesh'
-version = '0.0.1-SNAPSHOT'
-
-java {
-    sourceCompatibility = '1.8'
-}
-
-configurations {
-    compileOnly {
-        extendsFrom annotationProcessor
-    }
-}
-
-repositories {
-    mavenCentral()
-    maven { url 'https://maven.aliyun.com/repository/public/' }
-}
-
-ext {
-    // utility
-    commonsLang3Version = '3.13.0'
-    guavaVersion = '32.1.2-jre' // not used for now
-    fastjsonVersion = '2.0.40'
-    // swagger
-    springdocVersion = '1.7.0'
-    // unit test
-    mockitoVersion = '5.5.0'
-    // meta
-    nacosVersion = '2.2.4'
-}
-
-dependencies {
-    // versions managed by spring.dependency-management
-    implementation 'org.springframework.boot:spring-boot-starter-web'
-    compileOnly 'org.projectlombok:lombok'
-    developmentOnly 'org.springframework.boot:spring-boot-devtools'
-    annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
-    annotationProcessor 'org.projectlombok:lombok'
-    testImplementation 'org.springframework.boot:spring-boot-starter-test'
-
-    // utility
-    implementation "org.apache.commons:commons-lang3:${commonsLang3Version}"
-    implementation("com.alibaba.fastjson2:fastjson2:${fastjsonVersion}")
-    // swagger
-    implementation "org.springdoc:springdoc-openapi-ui:${springdocVersion}"
-    implementation "org.springdoc:springdoc-openapi-javadoc:${springdocVersion}"
-    annotationProcessor 'com.github.therapi:therapi-runtime-javadoc-scribe:0.15.0'
-    // unit test
-    testImplementation("org.mockito:mockito-core:${mockitoVersion}")
-    // meta
-    implementation("com.alibaba.nacos:nacos-client:${nacosVersion}")
-}
diff --git a/docker/Dockerfile b/docker/Dockerfile
deleted file mode 100644
index 625bdac..0000000
--- a/docker/Dockerfile
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-FROM openjdk:8-jre-alpine
-VOLUME /tmp
-COPY build/libs/eventmesh-dashboard-*.jar eventmesh-dashboard.jar
-ENV JAVA_OPTS=""
-ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar /eventmesh-dashboard.jar"]
diff --git a/docs/UserGuide_CN.md b/docs/UserGuide_CN.md
deleted file mode 100644
index 0ffdd02..0000000
--- a/docs/UserGuide_CN.md
+++ /dev/null
@@ -1 +0,0 @@
-// TODO
\ No newline at end of file
diff --git a/docs/UserGuide_EN.md b/docs/UserGuide_EN.md
deleted file mode 100644
index 0ffdd02..0000000
--- a/docs/UserGuide_EN.md
+++ /dev/null
@@ -1 +0,0 @@
-// TODO
\ No newline at end of file
diff --git a/eventmesh-dashboard-common/pom.xml b/eventmesh-dashboard-common/pom.xml
new file mode 100644
index 0000000..35e0ee6
--- /dev/null
+++ b/eventmesh-dashboard-common/pom.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.apache.eventmesh.dashboard</groupId>
+        <artifactId>eventmesh-dashboard</artifactId>
+        <version>0.0.1</version>
+    </parent>
+
+    <groupId>org.apache.eventmesh.dashboard.common</groupId>
+    <artifactId>eventmesh-dashboard-common</artifactId>
+
+    <properties>
+        <maven.compiler.source>17</maven.compiler.source>
+        <maven.compiler.target>17</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+</project>
\ No newline at end of file
diff --git a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/Main.java b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/Main.java
new file mode 100644
index 0000000..a8b0ff7
--- /dev/null
+++ b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/Main.java
@@ -0,0 +1,7 @@
+package org.apache.eventmesh.dashboard.common;
+
+public class Main {
+    public static void main(String[] args) {
+        System.out.println("Hello world!");
+    }
+}
\ No newline at end of file
diff --git a/eventmesh-dashboard-console/pom.xml b/eventmesh-dashboard-console/pom.xml
new file mode 100644
index 0000000..465db41
--- /dev/null
+++ b/eventmesh-dashboard-console/pom.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.apache.eventmesh.dashboard</groupId>
+        <artifactId>eventmesh-dashboard</artifactId>
+        <version>0.0.1</version>
+    </parent>
+
+    <groupId>org.apache.eventmesh.dashboard.console</groupId>
+    <artifactId>eventmesh-dashboard-console</artifactId>
+
+    <properties>
+        <maven.compiler.source>17</maven.compiler.source>
+        <maven.compiler.target>17</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+</project>
\ No newline at end of file
diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/Main.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/Main.java
new file mode 100644
index 0000000..7e966a2
--- /dev/null
+++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/Main.java
@@ -0,0 +1,7 @@
+package org.apache.eventmesh.dashboard.console;
+
+public class Main {
+    public static void main(String[] args) {
+        System.out.println("Hello world!");
+    }
+}
\ No newline at end of file
diff --git a/eventmesh-dashboard-core/pom.xml b/eventmesh-dashboard-core/pom.xml
new file mode 100644
index 0000000..7192775
--- /dev/null
+++ b/eventmesh-dashboard-core/pom.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.apache.eventmesh.dashboard</groupId>
+        <artifactId>eventmesh-dashboard</artifactId>
+        <version>0.0.1</version>
+    </parent>
+
+    <groupId>org.apache.eventmesh.dashboard.core</groupId>
+    <artifactId>eventmesh-dashboard-core</artifactId>
+
+    <properties>
+        <maven.compiler.source>17</maven.compiler.source>
+        <maven.compiler.target>17</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+</project>
\ No newline at end of file
diff --git a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/Main.java b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/Main.java
new file mode 100644
index 0000000..e32e92a
--- /dev/null
+++ b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/Main.java
@@ -0,0 +1,7 @@
+package org.apache.eventmesh.dashboard.core;
+
+public class Main {
+    public static void main(String[] args) {
+        System.out.println("Hello world!");
+    }
+}
\ No newline at end of file
diff --git a/eventmesh-dashboard-observe/pom.xml b/eventmesh-dashboard-observe/pom.xml
new file mode 100644
index 0000000..e8c3442
--- /dev/null
+++ b/eventmesh-dashboard-observe/pom.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.apache.eventmesh.dashboard</groupId>
+        <artifactId>eventmesh-dashboard</artifactId>
+        <version>0.0.1</version>
+    </parent>
+
+    <groupId>org.apache.eventmesh.dashboard.observe</groupId>
+    <artifactId>eventmesh-dashboard-observe</artifactId>
+
+    <properties>
+        <maven.compiler.source>17</maven.compiler.source>
+        <maven.compiler.target>17</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+</project>
\ No newline at end of file
diff --git a/eventmesh-dashboard-observe/src/main/java/org/apache/eventmesh/dashboard/observe/Main.java b/eventmesh-dashboard-observe/src/main/java/org/apache/eventmesh/dashboard/observe/Main.java
new file mode 100644
index 0000000..1a8fac3
--- /dev/null
+++ b/eventmesh-dashboard-observe/src/main/java/org/apache/eventmesh/dashboard/observe/Main.java
@@ -0,0 +1,7 @@
+package org.apache.eventmesh.dashboard.observe;
+
+public class Main {
+    public static void main(String[] args) {
+        System.out.println("Hello world!");
+    }
+}
\ No newline at end of file
diff --git a/eventmesh-dashboard-service/pom.xml b/eventmesh-dashboard-service/pom.xml
new file mode 100644
index 0000000..6a599d7
--- /dev/null
+++ b/eventmesh-dashboard-service/pom.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.apache.eventmesh.dashboard</groupId>
+        <artifactId>eventmesh-dashboard</artifactId>
+        <version>0.0.1</version>
+    </parent>
+
+    <groupId>org.apache.eventmesh.dashboard.service</groupId>
+    <artifactId>eventmesh-dashboard-service</artifactId>
+
+    <properties>
+        <maven.compiler.source>17</maven.compiler.source>
+        <maven.compiler.target>17</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+</project>
\ No newline at end of file
diff --git a/eventmesh-dashboard-service/src/main/java/org/apache/eventmesh/dashboard/service/Main.java b/eventmesh-dashboard-service/src/main/java/org/apache/eventmesh/dashboard/service/Main.java
new file mode 100644
index 0000000..0927abf
--- /dev/null
+++ b/eventmesh-dashboard-service/src/main/java/org/apache/eventmesh/dashboard/service/Main.java
@@ -0,0 +1,7 @@
+package org.apache.eventmesh.dashboard.service;
+
+public class Main {
+    public static void main(String[] args) {
+        System.out.println("Hello world!");
+    }
+}
\ No newline at end of file
diff --git a/eventmesh-dashboard-view/.gitignore b/eventmesh-dashboard-view/.gitignore
new file mode 100644
index 0000000..63d2f1a
--- /dev/null
+++ b/eventmesh-dashboard-view/.gitignore
@@ -0,0 +1,36 @@
+.gradle
+build/
+!gradle/wrapper/gradle-wrapper.jar
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+bin/
+!**/src/main/**/bin/
+!**/src/test/**/bin/
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+out/
+!**/src/main/**/out/
+!**/src/test/**/out/
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+
+### VS Code ###
+.vscode/
diff --git a/frontend/.dockerignore b/frontend/.dockerignore
deleted file mode 100644
index 252089d..0000000
--- a/frontend/.dockerignore
+++ /dev/null
@@ -1,2 +0,0 @@
-node_modules/
-out/
\ No newline at end of file
diff --git a/frontend/.gitignore b/frontend/.gitignore
deleted file mode 100644
index 7415ebb..0000000
--- a/frontend/.gitignore
+++ /dev/null
@@ -1,131 +0,0 @@
-# https://github.com/github/gitignore/blob/main/Node.gitignore
-# Logs
-logs
-*.log
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-lerna-debug.log*
-.pnpm-debug.log*
-
-# Diagnostic reports (https://nodejs.org/api/report.html)
-report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
-
-# Runtime data
-pids
-*.pid
-*.seed
-*.pid.lock
-
-# Directory for instrumented libs generated by jscoverage/JSCover
-lib-cov
-
-# Coverage directory used by tools like istanbul
-coverage
-*.lcov
-
-# nyc test coverage
-.nyc_output
-
-# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
-.grunt
-
-# Bower dependency directory (https://bower.io/)
-bower_components
-
-# node-waf configuration
-.lock-wscript
-
-# Compiled binary addons (https://nodejs.org/api/addons.html)
-build/Release
-
-# Dependency directories
-node_modules/
-jspm_packages/
-
-# Snowpack dependency directory (https://snowpack.dev/)
-web_modules/
-
-# TypeScript cache
-*.tsbuildinfo
-
-# Optional npm cache directory
-.npm
-
-# Optional eslint cache
-.eslintcache
-
-# Optional stylelint cache
-.stylelintcache
-
-# Microbundle cache
-.rpt2_cache/
-.rts2_cache_cjs/
-.rts2_cache_es/
-.rts2_cache_umd/
-
-# Optional REPL history
-.node_repl_history
-
-# Output of 'npm pack'
-*.tgz
-
-# Yarn Integrity file
-.yarn-integrity
-
-# dotenv environment variable files
-.env
-.env.development.local
-.env.test.local
-.env.production.local
-.env.local
-
-# parcel-bundler cache (https://parceljs.org/)
-.cache
-.parcel-cache
-
-# Next.js build output
-.next
-out
-
-# Nuxt.js build / generate output
-.nuxt
-dist
-
-# Gatsby files
-.cache/
-# Comment in the public line in if your project uses Gatsby and not Next.js
-# https://nextjs.org/blog/next-9-1#public-directory-support
-# public
-
-# vuepress build output
-.vuepress/dist
-
-# vuepress v2.x temp and cache directory
-.temp
-.cache
-
-# Docusaurus cache and generated files
-.docusaurus
-
-# Serverless directories
-.serverless/
-
-# FuseBox cache
-.fusebox/
-
-# DynamoDB Local files
-.dynamodb/
-
-# TernJS port file
-.tern-port
-
-# Stores VSCode versions used for testing VSCode extensions
-.vscode-test
-
-# yarn v2
-.yarn/cache
-.yarn/unplugged
-.yarn/build-state.yml
-.yarn/install-state.gz
-.pnp.*
\ No newline at end of file
diff --git a/frontend/README.md b/frontend/README.md
deleted file mode 100644
index c6d90a5..0000000
--- a/frontend/README.md
+++ /dev/null
@@ -1,54 +0,0 @@
-This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).
-
-## Getting Started
-
-First, run the development server:
-
-```bash
-npm run dev
-# or
-yarn dev
-```
-
-Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
-
-You can start editing the page by modifying `pages/index.tsx`. The page auto-updates as you edit the file.
-
-[API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.ts`.
-
-The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages.
-
-## Getting Started with Docker
-
-Pull the image and run the container by following commands:
-
-```
-docker pull apache/eventmesh-dashboard:latest
-```
-
-```
-docker run -d --name eventmesh-dashboard -p 8080:80 -t apache/eventmesh-dashboard:latest
-```
-
-Open [http://localhost:8080](http://localhost:8080) in your browser to see the result.
-
-You can also build a mirror of your own by executing the following command in the root of your git repository:
-
-```
-docker build -t <your-name>/eventmesh-dashboard:latest -f docker/Dockerfile .
-```
-
-## Learn More
-
-To learn more about Next.js, take a look at the following resources:
-
-- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
-- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
-
-You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!
-
-## Deploy on Vercel
-
-The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
-
-Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.
diff --git a/frontend/components/client/GrpcClientTable.tsx b/frontend/components/client/GrpcClientTable.tsx
deleted file mode 100644
index 1ffdfea..0000000
--- a/frontend/components/client/GrpcClientTable.tsx
+++ /dev/null
@@ -1,217 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import {
-  HStack,
-  Select,
-  Input,
-  Table,
-  Thead,
-  Tbody,
-  Tr,
-  Th,
-  Td,
-  TableContainer,
-  useToast,
-  Box,
-  Button,
-} from '@chakra-ui/react';
-import axios from 'axios';
-import { useContext, useEffect, useState } from 'react';
-import { AppContext } from '../../context/context';
-
-interface GrpcClient {
-  env: string,
-  subsystem: string,
-  url: string,
-  pid: number,
-  host: string,
-  port: number,
-  version: string,
-  idc: string,
-  group: string,
-  purpose: string,
-  protocol: string,
-}
-
-interface GrpcClientProps {
-  url: string,
-  group: string,
-}
-
-interface RemoveGrpcClientRequest {
-  url: string,
-}
-
-const GrpcClientRow = ({
-  url, group,
-}: GrpcClientProps) => {
-  const { state } = useContext(AppContext);
-
-  const toast = useToast();
-  const [loading, setLoading] = useState(false);
-  const onRemoveClick = async () => {
-    try {
-      setLoading(true);
-      await axios.delete<RemoveGrpcClientRequest>(`${state.endpoint}/client/grpc`, {
-        data: {
-          url,
-        },
-      });
-      setLoading(false);
-    } catch (error) {
-      if (axios.isAxiosError(error)) {
-        toast({
-          title: 'Failed to remove the gRPC Client',
-          description: error.message,
-          status: 'error',
-          duration: 3000,
-          isClosable: true,
-        });
-      }
-    }
-  };
-
-  return (
-    <Tr>
-      <Td>{url}</Td>
-      <Td>{group}</Td>
-      <Td>
-        <HStack>
-          <Button
-            colorScheme="red"
-            isLoading={loading}
-            onClick={onRemoveClick}
-          >
-            Remove
-          </Button>
-        </HStack>
-      </Td>
-    </Tr>
-  );
-};
-
-const GrpcClientTable = () => {
-  const { state } = useContext(AppContext);
-
-  const [searchInput, setSearchInput] = useState<string>('');
-  const handleSearchInputChange = (event: React.FormEvent<HTMLInputElement>) => {
-    setSearchInput(event.currentTarget.value);
-  };
-
-  const [groupSet, setGroupSet] = useState<Set<string>>(new Set());
-  const [groupFilter, setGroupFilter] = useState<string>('');
-  const handleGroupSelectChange = (event: React.FormEvent<HTMLSelectElement>) => {
-    setGroupFilter(event.currentTarget.value);
-  };
-
-  const [GrpcClientList, setGrpcClientList] = useState<GrpcClient[]>([]);
-  const toast = useToast();
-  useEffect(() => {
-    const fetch = async () => {
-      try {
-        const { data } = await axios.get<GrpcClient[]>(`${state.endpoint}/client/grpc`);
-        setGrpcClientList(data);
-
-        const nextGroupSet = new Set<string>();
-        data.forEach(({ group }) => {
-          nextGroupSet.add(group);
-        });
-        setGroupSet(nextGroupSet);
-      } catch (error) {
-        if (axios.isAxiosError(error)) {
-          toast({
-            title: 'Failed to fetch the list of gRPC Clients',
-            description: 'Unable to connect to the EventMesh daemon',
-            status: 'error',
-            duration: 3000,
-            isClosable: true,
-          });
-          setGrpcClientList([]);
-        }
-      }
-    };
-
-    fetch();
-  }, []);
-
-  return (
-    <Box
-      maxW="full"
-      bg="white"
-      borderWidth="1px"
-      borderRadius="md"
-      overflow="hidden"
-      p="4"
-    >
-      <HStack
-        spacing="2"
-      >
-        <Input
-          w="200%"
-          placeholder="Search"
-          value={searchInput}
-          onChange={handleSearchInputChange}
-        />
-        <Select
-          placeholder="Select Group"
-          onChange={handleGroupSelectChange}
-        >
-          {Array.from(groupSet).map((group) => (
-            <option value={group} key={group}>{group}</option>
-          ))}
-        </Select>
-      </HStack>
-
-      <TableContainer>
-        <Table variant="simple">
-          <Thead>
-            <Tr>
-              <Th>URL</Th>
-              <Th>Group</Th>
-              <Th>Action</Th>
-            </Tr>
-          </Thead>
-          <Tbody>
-            {GrpcClientList && GrpcClientList.filter(({
-              url, group,
-            }) => {
-              if (searchInput && !url.includes(searchInput)) {
-                return false;
-              }
-              if (groupFilter && groupFilter !== group) {
-                return false;
-              }
-              return true;
-            }).map(({
-              url, group,
-            }) => (
-              <GrpcClientRow
-                url={url}
-                group={group}
-              />
-            ))}
-          </Tbody>
-        </Table>
-      </TableContainer>
-    </Box>
-  );
-};
-
-export default GrpcClientTable;
diff --git a/frontend/components/client/HTTPClientTable.tsx b/frontend/components/client/HTTPClientTable.tsx
deleted file mode 100644
index 832ea91..0000000
--- a/frontend/components/client/HTTPClientTable.tsx
+++ /dev/null
@@ -1,217 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import {
-  HStack,
-  Select,
-  Input,
-  Table,
-  Thead,
-  Tbody,
-  Tr,
-  Th,
-  Td,
-  TableContainer,
-  useToast,
-  Box,
-  Button,
-} from '@chakra-ui/react';
-import axios from 'axios';
-import { useContext, useEffect, useState } from 'react';
-import { AppContext } from '../../context/context';
-
-interface HTTPClient {
-  env: string,
-  subsystem: string,
-  url: string,
-  pid: number,
-  host: string,
-  port: number,
-  version: string,
-  idc: string,
-  group: string,
-  purpose: string,
-  protocol: string,
-}
-
-interface HTTPClientProps {
-  url: string,
-  group: string,
-}
-
-interface RemoveHTTPClientRequest {
-  url: string,
-}
-
-const HTTPClientRow = ({
-  url, group,
-}: HTTPClientProps) => {
-  const { state } = useContext(AppContext);
-
-  const toast = useToast();
-  const [loading, setLoading] = useState(false);
-  const onRemoveClick = async () => {
-    try {
-      setLoading(true);
-      await axios.delete<RemoveHTTPClientRequest>(`${state.endpoint}/client/http`, {
-        data: {
-          url,
-        },
-      });
-      setLoading(false);
-    } catch (error) {
-      if (axios.isAxiosError(error)) {
-        toast({
-          title: 'Failed to remove the HTTP Client',
-          description: error.message,
-          status: 'error',
-          duration: 3000,
-          isClosable: true,
-        });
-      }
-    }
-  };
-
-  return (
-    <Tr>
-      <Td>{url}</Td>
-      <Td>{group}</Td>
-      <Td>
-        <HStack>
-          <Button
-            colorScheme="red"
-            isLoading={loading}
-            onClick={onRemoveClick}
-          >
-            Remove
-          </Button>
-        </HStack>
-      </Td>
-    </Tr>
-  );
-};
-
-const HTTPClientTable = () => {
-  const { state } = useContext(AppContext);
-
-  const [searchInput, setSearchInput] = useState<string>('');
-  const handleSearchInputChange = (event: React.FormEvent<HTMLInputElement>) => {
-    setSearchInput(event.currentTarget.value);
-  };
-
-  const [groupSet, setGroupSet] = useState<Set<string>>(new Set());
-  const [groupFilter, setGroupFilter] = useState<string>('');
-  const handleGroupSelectChange = (event: React.FormEvent<HTMLSelectElement>) => {
-    setGroupFilter(event.currentTarget.value);
-  };
-
-  const [HTTPClientList, setHTTPClientList] = useState<HTTPClient[]>([]);
-  const toast = useToast();
-  useEffect(() => {
-    const fetch = async () => {
-      try {
-        const { data } = await axios.get<HTTPClient[]>(`${state.endpoint}/client/http`);
-        setHTTPClientList(data);
-
-        const nextGroupSet = new Set<string>();
-        data.forEach(({ group }) => {
-          nextGroupSet.add(group);
-        });
-        setGroupSet(nextGroupSet);
-      } catch (error) {
-        if (axios.isAxiosError(error)) {
-          toast({
-            title: 'Failed to fetch the list of HTTP Clients',
-            description: 'Unable to connect to the EventMesh daemon',
-            status: 'error',
-            duration: 3000,
-            isClosable: true,
-          });
-          setHTTPClientList([]);
-        }
-      }
-    };
-
-    fetch();
-  }, []);
-
-  return (
-    <Box
-      maxW="full"
-      bg="white"
-      borderWidth="1px"
-      borderRadius="md"
-      overflow="hidden"
-      p="4"
-    >
-      <HStack
-        spacing="2"
-      >
-        <Input
-          w="200%"
-          placeholder="Search"
-          value={searchInput}
-          onChange={handleSearchInputChange}
-        />
-        <Select
-          placeholder="Select Group"
-          onChange={handleGroupSelectChange}
-        >
-          {Array.from(groupSet).map((group) => (
-            <option value={group} key={group}>{group}</option>
-          ))}
-        </Select>
-      </HStack>
-
-      <TableContainer>
-        <Table variant="simple">
-          <Thead>
-            <Tr>
-              <Th>URL</Th>
-              <Th>Group</Th>
-              <Th>Action</Th>
-            </Tr>
-          </Thead>
-          <Tbody>
-            {HTTPClientList && HTTPClientList.filter(({
-              url, group,
-            }) => {
-              if (searchInput && !url.includes(searchInput)) {
-                return false;
-              }
-              if (groupFilter && groupFilter !== group) {
-                return false;
-              }
-              return true;
-            }).map(({
-              url, group,
-            }) => (
-              <HTTPClientRow
-                url={url}
-                group={group}
-              />
-            ))}
-          </Tbody>
-        </Table>
-      </TableContainer>
-    </Box>
-  );
-};
-
-export default HTTPClientTable;
diff --git a/frontend/components/client/TCPClientTable.tsx b/frontend/components/client/TCPClientTable.tsx
deleted file mode 100644
index dc24589..0000000
--- a/frontend/components/client/TCPClientTable.tsx
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import {
-  HStack,
-  Select,
-  Input,
-  Table,
-  Thead,
-  Tbody,
-  Tr,
-  Th,
-  Td,
-  TableContainer,
-  useToast,
-  Box,
-  Button,
-} from '@chakra-ui/react';
-import axios from 'axios';
-import { useContext, useEffect, useState } from 'react';
-import { AppContext } from '../../context/context';
-
-interface TCPClient {
-  env: string,
-  subsystem: string,
-  url: string,
-  pid: number,
-  host: string,
-  port: number,
-  version: string,
-  idc: string,
-  group: string,
-  purpose: string,
-  protocol: string,
-}
-
-interface TCPClientProps {
-  host: string,
-  port: number,
-  group: string,
-}
-
-interface RemoveTCPClientRequest {
-  host: string,
-  port: number,
-}
-
-const TCPClientRow = ({
-  host, port, group,
-}: TCPClientProps) => {
-  const { state } = useContext(AppContext);
-
-  const toast = useToast();
-  const [loading, setLoading] = useState(false);
-  const onRemoveClick = async () => {
-    try {
-      setLoading(true);
-      await axios.delete<RemoveTCPClientRequest>(`${state.endpoint}/client/tcp`, {
-        data: {
-          host,
-          port,
-        },
-      });
-      setLoading(false);
-    } catch (error) {
-      if (axios.isAxiosError(error)) {
-        toast({
-          title: 'Failed to remove the TCP Client',
-          description: error.message,
-          status: 'error',
-          duration: 3000,
-          isClosable: true,
-        });
-      }
-    }
-  };
-
-  return (
-    <Tr>
-      <Td>{`${host}:${port}`}</Td>
-      <Td>{group}</Td>
-      <Td>
-        <HStack>
-          <Button
-            colorScheme="red"
-            isLoading={loading}
-            onClick={onRemoveClick}
-          >
-            Remove
-          </Button>
-        </HStack>
-      </Td>
-    </Tr>
-  );
-};
-
-const TCPClientTable = () => {
-  const { state } = useContext(AppContext);
-
-  const [searchInput, setSearchInput] = useState<string>('');
-  const handleSearchInputChange = (event: React.FormEvent<HTMLInputElement>) => {
-    setSearchInput(event.currentTarget.value);
-  };
-
-  const [groupSet, setGroupSet] = useState<Set<string>>(new Set());
-  const [groupFilter, setGroupFilter] = useState<string>('');
-  const handleGroupSelectChange = (event: React.FormEvent<HTMLSelectElement>) => {
-    setGroupFilter(event.currentTarget.value);
-  };
-
-  const [TCPClientList, setTCPClientList] = useState<TCPClient[]>([]);
-  const toast = useToast();
-  useEffect(() => {
-    const fetch = async () => {
-      try {
-        const { data } = await axios.get<TCPClient[]>(`${state.endpoint}/client/tcp`);
-        setTCPClientList(data);
-
-        const nextGroupSet = new Set<string>();
-        data.forEach(({ group }) => {
-          nextGroupSet.add(group);
-        });
-        setGroupSet(nextGroupSet);
-      } catch (error) {
-        if (axios.isAxiosError(error)) {
-          toast({
-            title: 'Failed to fetch the list of TCP Clients',
-            description: 'Unable to connect to the EventMesh daemon',
-            status: 'error',
-            duration: 3000,
-            isClosable: true,
-          });
-          setTCPClientList([]);
-        }
-      }
-    };
-
-    fetch();
-  }, []);
-
-  return (
-    <Box
-      maxW="full"
-      bg="white"
-      borderWidth="1px"
-      borderRadius="md"
-      overflow="hidden"
-      p="4"
-    >
-      <HStack
-        spacing="2"
-      >
-        <Input
-          w="200%"
-          placeholder="Search"
-          value={searchInput}
-          onChange={handleSearchInputChange}
-        />
-        <Select
-          placeholder="Select Group"
-          onChange={handleGroupSelectChange}
-        >
-          {Array.from(groupSet).map((group) => (
-            <option value={group} key={group}>{group}</option>
-          ))}
-        </Select>
-      </HStack>
-
-      <TableContainer>
-        <Table variant="simple">
-          <Thead>
-            <Tr>
-              <Th>Host</Th>
-              <Th>Host</Th>
-              <Th>Group</Th>
-              <Th>Action</Th>
-            </Tr>
-          </Thead>
-          <Tbody>
-            {TCPClientList && TCPClientList.filter(({
-              host, port, group,
-            }) => {
-              const address = `${host}:${port}`;
-              if (searchInput && !address.includes(searchInput)) {
-                return false;
-              }
-              if (groupFilter && groupFilter !== group) {
-                return false;
-              }
-              return true;
-            }).map(({
-              host, port, group,
-            }) => (
-              <TCPClientRow
-                host={host}
-                port={port}
-                group={group}
-              />
-            ))}
-          </Tbody>
-        </Table>
-      </TableContainer>
-    </Box>
-  );
-};
-
-export default TCPClientTable;
diff --git a/frontend/components/event/EventTable.tsx b/frontend/components/event/EventTable.tsx
deleted file mode 100644
index b0d0a13..0000000
--- a/frontend/components/event/EventTable.tsx
+++ /dev/null
@@ -1,371 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import {
-  HStack,
-  Input,
-  Table,
-  Thead,
-  Tbody,
-  Tr,
-  Th,
-  Td,
-  TableContainer,
-  useToast,
-  Box,
-  Button,
-  Modal,
-  ModalBody,
-  ModalCloseButton,
-  ModalContent,
-  ModalFooter,
-  ModalHeader,
-  ModalOverlay,
-  useDisclosure,
-  Select,
-  VStack,
-  Textarea,
-} from '@chakra-ui/react';
-import axios from 'axios';
-import { useContext, useEffect, useState } from 'react';
-import { CloudEvent } from 'cloudevents';
-import { AppContext } from '../../context/context';
-
-interface Topic {
-  name: string,
-  messageCount: number,
-}
-
-interface EventProps {
-  event: CloudEvent<string>,
-}
-
-interface CreateEventRequest {
-  event: CloudEvent<string>,
-}
-
-const CreateEventModal = () => {
-  const { state } = useContext(AppContext);
-
-  const { isOpen, onOpen, onClose } = useDisclosure();
-
-  const [id, setId] = useState('');
-  const handleIdChange = (event: React.FormEvent<HTMLInputElement>) => {
-    setId(event.currentTarget.value);
-  };
-
-  const [source, setSource] = useState('');
-  const handleSourceChange = (event: React.FormEvent<HTMLInputElement>) => {
-    setSource(event.currentTarget.value);
-  };
-
-  const [subject, setSubject] = useState('');
-  const handleSubjectChange = (event: React.FormEvent<HTMLInputElement>) => {
-    setSubject(event.currentTarget.value);
-  };
-
-  const [type, setType] = useState('');
-  const handleTypeChange = (event: React.FormEvent<HTMLInputElement>) => {
-    setType(event.currentTarget.value);
-  };
-
-  const [data, setData] = useState('');
-  const handleDataChange = (event: React.FormEvent<HTMLInputElement>) => {
-    setData(event.currentTarget.value);
-  };
-
-  const toast = useToast();
-  const [loading, setLoading] = useState(false);
-  const onCreateClick = async () => {
-    try {
-      setLoading(true);
-      await axios.post<CreateEventRequest>(`${state.endpoint}/event`, new CloudEvent({
-        source,
-        subject,
-        type,
-        data,
-        specversion: '1.0',
-      }));
-      onClose();
-    } catch (error) {
-      if (axios.isAxiosError(error)) {
-        toast({
-          title: 'Failed to publish the event',
-          description: error.message,
-          status: 'error',
-          duration: 3000,
-          isClosable: true,
-        });
-      }
-    } finally {
-      setLoading(false);
-    }
-  };
-
-  return (
-    <>
-      <Button
-        w="25%"
-        colorScheme="blue"
-        onClick={onOpen}
-      >
-        Create Event
-      </Button>
-      <Modal isOpen={isOpen} onClose={onClose}>
-        <ModalOverlay />
-        <ModalContent>
-          <ModalHeader>Create Event</ModalHeader>
-          <ModalCloseButton />
-          <ModalBody>
-            <VStack>
-              <Input
-                placeholder="Event ID"
-                value={id}
-                onChange={handleIdChange}
-              />
-              <Input
-                placeholder="Event Source"
-                value={source}
-                onChange={handleSourceChange}
-              />
-              <Input
-                placeholder="Event Subject"
-                value={subject}
-                onChange={handleSubjectChange}
-              />
-              <Input
-                placeholder="Event Type"
-                value={type}
-                onChange={handleTypeChange}
-              />
-              <Input
-                placeholder="Event Data"
-                value={data}
-                onChange={handleDataChange}
-              />
-            </VStack>
-          </ModalBody>
-
-          <ModalFooter>
-            <Button
-              mr={2}
-              onClick={onClose}
-            >
-              Close
-            </Button>
-            <Button
-              colorScheme="blue"
-              onClick={onCreateClick}
-              isLoading={loading}
-              isDisabled={
-                id.length === 0 || subject.length === 0 || source.length === 0 || type.length === 0
-              }
-            >
-              Create
-            </Button>
-          </ModalFooter>
-        </ModalContent>
-      </Modal>
-    </>
-  );
-};
-
-const EventRow = ({
-  event,
-}: EventProps) => {
-  const { isOpen, onOpen, onClose } = useDisclosure();
-  const eventDataBase64 = event.data_base64 || '';
-  const eventData = Buffer.from(eventDataBase64, 'base64').toString('utf-8');
-
-  return (
-    <>
-      <Modal isOpen={isOpen} onClose={onClose}>
-        <ModalOverlay />
-        <ModalContent>
-          <ModalHeader>Event Data</ModalHeader>
-          <ModalCloseButton />
-          <ModalBody>
-            <Box>
-              <Textarea isDisabled value={eventData} />
-            </Box>
-          </ModalBody>
-
-          <ModalFooter>
-            <Button
-              mr={2}
-              onClick={onClose}
-            >
-              Close
-            </Button>
-          </ModalFooter>
-        </ModalContent>
-      </Modal>
-
-      <Tr>
-        <Td>{event.id}</Td>
-        <Td>{event.subject}</Td>
-        <Td>{new Date(Number(event.reqc2eventmeshtimestamp)).toLocaleString()}</Td>
-        <Td>
-          <HStack>
-            <Button
-              colorScheme="blue"
-              onClick={onOpen}
-            >
-              View Data
-            </Button>
-          </HStack>
-
-        </Td>
-      </Tr>
-    </>
-  );
-};
-
-const EventTable = () => {
-  const { state } = useContext(AppContext);
-
-  const [searchInput, setSearchInput] = useState<string>('');
-  const handleSearchInputChange = (event: React.FormEvent<HTMLInputElement>) => {
-    setSearchInput(event.currentTarget.value);
-  };
-
-  const [eventList, setEventList] = useState<CloudEvent<string>[]>([]);
-  const [topicList, setTopicList] = useState<Topic[]>([]);
-  const [topic, setTopic] = useState<Topic>({
-    name: '',
-    messageCount: 0,
-  });
-  const handleTopicChange = (event: React.FormEvent<HTMLSelectElement>) => {
-    setTopic({
-      name: event.currentTarget.value,
-      messageCount: 0,
-    });
-  };
-
-  const toast = useToast();
-
-  useEffect(() => {
-    const fetch = async () => {
-      try {
-        const { data } = await axios.get<Topic[]>(`${state.endpoint}/topic`);
-        setTopicList(data);
-        if (data.length !== 0) {
-          setTopic(data[0]);
-        }
-      } catch (error) {
-        if (axios.isAxiosError(error)) {
-          toast({
-            title: 'Failed to fetch the list of events',
-            description: 'unable to connect to the EventMesh daemon',
-            status: 'error',
-            duration: 3000,
-            isClosable: true,
-          });
-          setEventList([]);
-        }
-      }
-    };
-
-    fetch();
-  }, []);
-
-  useEffect(() => {
-    const fetch = async () => {
-      try {
-        if (topic.name !== '') {
-          const eventResponse = await axios.get<string[]>(`${state.endpoint}/event`, {
-            params: {
-              topicName: topic.name,
-              offset: 0,
-              length: 15,
-            },
-          });
-          setEventList(eventResponse.data.map((rawEvent) => JSON.parse(rawEvent)));
-        }
-      } catch (error) {
-        if (axios.isAxiosError(error)) {
-          toast({
-            title: 'Failed to fetch the list of events',
-            description: 'Unable to connect to the EventMesh daemon',
-            status: 'error',
-            duration: 3000,
-            isClosable: true,
-          });
-          setEventList([]);
-        }
-      }
-    };
-
-    fetch();
-  }, [topic]);
-
-  return (
-    <Box
-      maxW="full"
-      bg="white"
-      borderWidth="1px"
-      borderRadius="md"
-      overflow="hidden"
-      p="4"
-    >
-      <HStack
-        spacing="2"
-      >
-        <Input
-          w="100%"
-          placeholder="Search"
-          value={searchInput}
-          onChange={handleSearchInputChange}
-        />
-        <Select
-          w="100%"
-          onChange={handleTopicChange}
-        >
-          {topicList.map(({ name }) => (
-            <option value={name} key={name} selected={topic.name === name}>{name}</option>
-          ))}
-        </Select>
-        <CreateEventModal />
-      </HStack>
-
-      <TableContainer>
-        <Table variant="simple">
-          <Thead>
-            <Tr>
-              <Th>Event Id</Th>
-              <Th>Event Subject</Th>
-              <Th>Event Time</Th>
-              <Th>Action</Th>
-            </Tr>
-          </Thead>
-          <Tbody>
-            {eventList.filter(() => true).map((event) => (
-              <EventRow
-                key={event.id}
-                event={event}
-              />
-            ))}
-          </Tbody>
-        </Table>
-      </TableContainer>
-    </Box>
-  );
-};
-
-export default EventTable;
diff --git a/frontend/components/eventCatalogs/Create.tsx b/frontend/components/eventCatalogs/Create.tsx
deleted file mode 100644
index 7d75f4b..0000000
--- a/frontend/components/eventCatalogs/Create.tsx
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import React, { FC, useRef, useState } from 'react';
-
-import {
-  Drawer,
-  DrawerContent,
-  DrawerCloseButton,
-  DrawerOverlay,
-  DrawerHeader,
-  DrawerBody,
-  DrawerFooter,
-  Button,
-  Box,
-  useToast,
-  Spinner,
-} from '@chakra-ui/react';
-import Editor, { Monaco } from '@monaco-editor/react';
-import axios from 'axios';
-
-const ApiRoot = process.env.NEXT_PUBLIC_EVENTCATALOG_API_ROOT;
-
-const Create: FC<{ visible: boolean; onClose: () => void; onSucceed:()=>void
-}> = ({ visible = false, onClose, onSucceed }) => {
-  const toast = useToast();
-  const [isSubmitting, setIsSubmitting] = useState(false);
-  const editorRef = useRef<Monaco | null>(null);
-  const defaultEditorValue = '# Your code goes here';
-
-  const handleEditorDidMount = (editor: any) => {
-    // here is the editor instance
-    // you can store it in `useRef` for further usage
-    editorRef.current = editor;
-  };
-
-  const onSubmit = () => {
-    setIsSubmitting(true);
-
-    try {
-      const value = editorRef.current.getValue();
-      if (value === defaultEditorValue) {
-        toast({
-          title: 'Invalid definition',
-          description: 'Please input your workflow definition properly',
-          status: 'warning',
-          position: 'top-right',
-        });
-        setIsSubmitting(false);
-        return;
-      }
-      axios
-        .post(
-          `${ApiRoot}/catalog`,
-          { event: { definition: value } },
-          {
-            headers: {
-              'Content-Type': 'application/json',
-            },
-          },
-        )
-        .then(() => {
-          toast({
-            title: 'Succeeded',
-            status: 'success',
-            position: 'top-right',
-          });
-          onSucceed();
-          setIsSubmitting(false);
-        })
-        .catch((error) => {
-          toast({
-            title: 'Failed',
-            description: error.response.data,
-            status: 'error',
-            position: 'top-right',
-          });
-          setIsSubmitting(false);
-        });
-    } catch (error) {
-      setIsSubmitting(false);
-    }
-  };
-
-  return (
-    <Drawer
-      isOpen={visible}
-      size="xl"
-      placement="right"
-      onClose={() => onClose()}
-    >
-      <DrawerOverlay />
-      <DrawerContent>
-        <DrawerCloseButton />
-        <DrawerHeader>Create Catalog</DrawerHeader>
-        <DrawerBody>
-          <Box height="full">
-            <Editor
-              height="100%"
-              defaultLanguage="yaml"
-              defaultValue="# Your code goes here"
-              onMount={handleEditorDidMount}
-              theme="vs-dark"
-            />
-          </Box>
-        </DrawerBody>
-        <DrawerFooter justifyContent="flex-start">
-          <Button colorScheme="blue" mr={3} onClick={onSubmit}>
-            {isSubmitting ? <Spinner colorScheme="white" size="sm" /> : 'Submit'}
-          </Button>
-          <Button variant="ghost" colorScheme="blue" onClick={onClose}>
-            Cancel
-          </Button>
-        </DrawerFooter>
-      </DrawerContent>
-
-    </Drawer>
-  );
-};
-
-export default Create;
diff --git a/frontend/components/eventCatalogs/Details.tsx b/frontend/components/eventCatalogs/Details.tsx
deleted file mode 100644
index b4d33ee..0000000
--- a/frontend/components/eventCatalogs/Details.tsx
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import React, { FC, useRef } from 'react';
-
-import {
-  Drawer,
-  DrawerContent,
-  DrawerCloseButton,
-  DrawerOverlay,
-  DrawerHeader,
-  DrawerBody,
-  FormLabel,
-  Box,
-  Flex,
-  Text,
-  Stack,
-  Badge,
-} from '@chakra-ui/react';
-import moment from 'moment';
-import Editor, { Monaco } from '@monaco-editor/react';
-import { EventCatalogType } from './types';
-// import { WorkflowStatusMap } from './constant';
-
-const Details: FC<{
-  visible: boolean;
-  data?: EventCatalogType | undefined;
-  onClose: () => void;
-}> = ({ visible = false, data, onClose = () => {} }) => {
-  const editorRef = useRef(null);
-  const handleEditorDidMount = (editor: Monaco) => {
-    editorRef.current = editor;
-    editor.setValue(data?.definition ?? '');
-  };
-
-  return (
-    <Drawer
-      isOpen={visible}
-      size="xl"
-      placement="right"
-      onClose={() => onClose()}
-    >
-      <DrawerOverlay />
-      <DrawerContent>
-        <DrawerCloseButton />
-        <DrawerHeader>
-          {data?.title}
-          <Badge ml={2}>
-            Version
-            {' '}
-            {data?.version}
-          </Badge>
-        </DrawerHeader>
-        <DrawerBody>
-          <Flex flexDirection="column" h="full">
-            <Stack direction="row">
-              <Flex width="240px" flexDirection="column">
-                <Box mb="1">
-                  <FormLabel opacity={0.5}>Catalog ID</FormLabel>
-                  <Text>{data?.id}</Text>
-                </Box>
-                <Box mt="1" mb="3">
-                  <FormLabel opacity={0.5}>Title</FormLabel>
-                  <Text>{data?.title}</Text>
-                </Box>
-                <Box mt="1" mb="3">
-                  <FormLabel opacity={0.5}>File Name</FormLabel>
-                  <Text>{data?.file_name}</Text>
-                </Box>
-              </Flex>
-              <Flex flexDirection="column">
-                <Box mb="1">
-                  <FormLabel opacity={0.5}>Created At</FormLabel>
-                  <Text>
-                    {moment(data?.create_time).format('YYYY-MM-DD HH:mm:ss')}
-                  </Text>
-                </Box>
-                <Box mt="1" mb="3">
-                  <FormLabel opacity={0.5}>Updated At</FormLabel>
-                  <Text>
-                    {moment(data?.update_time).format('YYYY-MM-DD HH:mm:ss')}
-                  </Text>
-                </Box>
-              </Flex>
-            </Stack>
-            <Box flex={1}>
-              <Editor
-                height="100%"
-                defaultLanguage="yaml"
-                defaultValue="# Your code goes here"
-                onMount={handleEditorDidMount}
-                theme="vs-dark"
-                options={{ readOnly: true }}
-              />
-            </Box>
-          </Flex>
-        </DrawerBody>
-      </DrawerContent>
-    </Drawer>
-  );
-};
-Details.defaultProps = {
-  data: undefined,
-};
-export default Details;
diff --git a/frontend/components/eventCatalogs/constant.ts b/frontend/components/eventCatalogs/constant.ts
deleted file mode 100644
index df9cfab..0000000
--- a/frontend/components/eventCatalogs/constant.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import { CatalogStatusEnum } from './types';
-
-export const WorkflowStatusMap = new Map([
-  [CatalogStatusEnum.Normal, 'Normal'],
-  [CatalogStatusEnum.Deleted, 'Deleted'],
-]);
-
-export default WorkflowStatusMap;
diff --git a/frontend/components/eventCatalogs/types.ts b/frontend/components/eventCatalogs/types.ts
deleted file mode 100644
index 8ab7004..0000000
--- a/frontend/components/eventCatalogs/types.ts
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-export type SchemaTypes = {
-  schemaId: string;
-  lastVersion: string;
-  description: string;
-};
-
-export type EventCatalogType = {
-  create_time: string,
-  definition: string,
-  file_name: string,
-  id: 0,
-  status: 0,
-  title: string,
-  update_time: string,
-  version: string
-};
-
-export enum CatalogStatusEnum {
-  'Normal' = 1,
-  'Deleted' = -1,
-}
diff --git a/frontend/components/index/Configuration.tsx b/frontend/components/index/Configuration.tsx
deleted file mode 100644
index 8258db2..0000000
--- a/frontend/components/index/Configuration.tsx
+++ /dev/null
@@ -1,249 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import {
-  Text,
-  Table,
-  TableContainer,
-  Tbody,
-  Th,
-  Thead,
-  Tr,
-  Td,
-  Box,
-} from '@chakra-ui/react';
-import axios from 'axios';
-import React, { useContext, useEffect, useState } from 'react';
-import { AppContext } from '../../context/context';
-
-interface EventMeshConfiguration {
-  sysID: string;
-  namesrvAddr: string;
-  eventMeshEnv: string;
-  eventMeshIDC: string;
-  eventMeshCluster: string;
-  eventMeshServerIp: string;
-  eventMeshName: string;
-  eventMeshWebhookOrigin: string;
-  eventMeshServerSecurityEnable: boolean;
-  eventMeshServerRegistryEnable: boolean;
-
-  eventMeshTcpServerPort: number;
-  eventMeshTcpServerEnabled: boolean;
-
-  eventMeshHttpServerPort: number;
-  eventMeshHttpServerUseTls: boolean;
-
-  eventMeshGrpcServerPort: number;
-  eventMeshGrpcServerUseTls: boolean;
-}
-
-const Configuration = () => {
-  const { state } = useContext(AppContext);
-  const [configuration, setConfiguration] = useState<
-  Partial<EventMeshConfiguration>
-  >({});
-
-  useEffect(() => {
-    const controller = new AbortController();
-    const fetch = async () => {
-      try {
-        const { data } = await axios.get<EventMeshConfiguration>(
-          `${state.endpoint}/configuration`,
-          {
-            signal: controller.signal,
-          },
-        );
-        setConfiguration(data);
-      } catch (error) {
-        setConfiguration({});
-      }
-    };
-
-    fetch();
-
-    return () => {
-      controller.abort();
-    };
-  }, [state.endpoint]);
-
-  type ConfigurationRecord = Record<
-  string,
-  string | number | boolean | undefined
-  >;
-  const commonConfiguration: ConfigurationRecord = {
-    'System ID': configuration.sysID,
-    'NameServer Address': configuration.namesrvAddr,
-    'EventMesh Environment': configuration.eventMeshEnv,
-    'EventMesh IDC': configuration.eventMeshIDC,
-    'EventMesh Cluster': configuration.eventMeshCluster,
-    'EventMesh Server IP': configuration.eventMeshServerIp,
-    'EventMEsh Name': configuration.eventMeshName,
-    'EventMesh Webhook Origin': configuration.eventMeshWebhookOrigin,
-    'EventMesh Server Security Enable':
-      configuration.eventMeshServerSecurityEnable,
-    'EventMesh Server Registry Enable':
-      configuration.eventMeshServerRegistryEnable,
-  };
-
-  const tcpConfiguration: ConfigurationRecord = {
-    'TCP Server Port': configuration.eventMeshTcpServerPort,
-    'TCP Server Enabled': configuration.eventMeshTcpServerEnabled,
-  };
-
-  const httpConfiguration: ConfigurationRecord = {
-    'HTTP Server Port': configuration.eventMeshHttpServerPort,
-    'HTTP Server TLS Enabled': configuration.eventMeshHttpServerUseTls,
-  };
-
-  const grpcConfiguration: ConfigurationRecord = {
-    'gRPC Server Port': configuration.eventMeshGrpcServerPort,
-    'gRPC Server TLS Enabled': configuration.eventMeshGrpcServerUseTls,
-  };
-
-  const convertConfigurationToTable = (
-    configurationRecord: Record<string, string | number | boolean | undefined>,
-  ) => Object.entries(configurationRecord).map(([key, value]) => {
-    if (value === undefined) {
-      return (
-        <Tr>
-          <Td>{key}</Td>
-          <Td>Undefined</Td>
-        </Tr>
-      );
-    }
-
-    return (
-      <Tr>
-        <Td>{key}</Td>
-        <Td>{value.toString()}</Td>
-      </Tr>
-    );
-  });
-
-  if (Object.keys(configuration).length === 0) {
-    return (
-      <Box
-        maxW="full"
-        bg="white"
-        borderWidth="2px"
-        borderRadius="md"
-        borderColor="rgb(211,85,25)"
-        overflow="hidden"
-        p="4"
-        mt="4"
-        opacity="0.8"
-      >
-        <Text
-          fontSize="l"
-          fontWeight="semibold"
-          color="rgb(211,85,25)"
-          textAlign={['left', 'center']}
-        >
-          EventMesh Daemon Not Connected
-        </Text>
-      </Box>
-    );
-  }
-
-  return (
-    <>
-      <Box
-        maxW="full"
-        bg="white"
-        borderWidth="1px"
-        borderRadius="md"
-        overflow="hidden"
-        p="4"
-        mt="4"
-      >
-        <Text w="full">EventMesh Configuration</Text>
-
-        <TableContainer mt="4">
-          <Table variant="simple">
-            <Thead>
-              <Tr>
-                <Th>Configuration Field</Th>
-                <Th>Value</Th>
-              </Tr>
-            </Thead>
-            <Tbody>{convertConfigurationToTable(commonConfiguration)}</Tbody>
-          </Table>
-        </TableContainer>
-      </Box>
-      <Box
-        maxW="full"
-        bg="white"
-        borderWidth="1px"
-        borderRadius="md"
-        overflow="hidden"
-        p="4"
-        mt="4"
-      >
-        <Text w="full">TCP Configuration</Text>
-
-        <TableContainer mt="4">
-          <Table variant="simple">
-            <Thead>
-              <Tr>
-                <Th>Configuration Field</Th>
-                <Th>Value</Th>
-              </Tr>
-            </Thead>
-            <Tbody>{convertConfigurationToTable(tcpConfiguration)}</Tbody>
-          </Table>
-        </TableContainer>
-
-        <Text w="full" mt="4">
-          HTTP Configuration
-        </Text>
-
-        <TableContainer mt="4">
-          <Table variant="simple">
-            <Thead>
-              <Tr>
-                <Th>Configuration Field</Th>
-                <Th>Value</Th>
-              </Tr>
-            </Thead>
-            <Tbody>{convertConfigurationToTable(httpConfiguration)}</Tbody>
-          </Table>
-        </TableContainer>
-
-        <Text w="full" mt="4">
-          gRPC Configuration
-        </Text>
-
-        <TableContainer mt="4">
-          <Table variant="simple">
-            <Thead>
-              <Tr>
-                <Th>Configuration Field</Th>
-                <Th>Value</Th>
-              </Tr>
-            </Thead>
-            <Tbody>{convertConfigurationToTable(grpcConfiguration)}</Tbody>
-          </Table>
-        </TableContainer>
-      </Box>
-    </>
-  );
-};
-
-export default Configuration;
diff --git a/frontend/components/index/Endpoint.tsx b/frontend/components/index/Endpoint.tsx
deleted file mode 100644
index 9e550fa..0000000
--- a/frontend/components/index/Endpoint.tsx
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import {
-  HStack,
-  Input,
-  VStack,
-  Button,
-  Text,
-  useToast,
-} from '@chakra-ui/react';
-import axios from 'axios';
-import React, { useContext, useEffect, useState } from 'react';
-import { AppContext } from '../../context/context';
-
-const Endpoint = () => {
-  const { state, dispatch } = useContext(AppContext);
-  const toast = useToast();
-  const [endpointInput, setEndpointInput] = useState('http://localhost:10106');
-  const [loading, setLoading] = useState(false);
-
-  useEffect(() => {
-    setEndpointInput(state.endpoint);
-  }, [state.endpoint]);
-
-  const handleEndpointInputChange = (event: React.FormEvent<HTMLInputElement>) => {
-    setEndpointInput(event.currentTarget.value);
-  };
-
-  const handleSaveButtonClick = async () => {
-    try {
-      setLoading(true);
-      await axios.get(`${endpointInput}/client`);
-      dispatch({
-        type: 'SetEndPointAction',
-        payload: {
-          endpoint: endpointInput,
-        },
-      });
-    } catch (error) {
-      if (axios.isAxiosError(error)) {
-        toast({
-          title: `Failed to connect to ${endpointInput}`,
-          description: error.message,
-          status: 'error',
-          duration: 3000,
-          isClosable: true,
-        });
-      }
-    } finally {
-      setLoading(false);
-    }
-  };
-
-  return (
-    <VStack
-      maxW="full"
-      bg="white"
-      borderWidth="1px"
-      borderRadius="md"
-      overflow="hidden"
-      p="4"
-    >
-      <Text
-        w="full"
-      >
-        EventMesh Admin Endpoint
-      </Text>
-      <HStack
-        w="full"
-      >
-        <Input
-          placeholder="Apache EventMesh Backend Endpoint"
-          value={endpointInput}
-          onChange={handleEndpointInputChange}
-        />
-        <Button
-          colorScheme="blue"
-          isLoading={loading}
-          onClick={handleSaveButtonClick}
-        >
-          Save
-        </Button>
-      </HStack>
-    </VStack>
-  );
-};
-
-export default Endpoint;
diff --git a/frontend/components/metrics/MetricsTable.tsx b/frontend/components/metrics/MetricsTable.tsx
deleted file mode 100644
index 9b80d49..0000000
--- a/frontend/components/metrics/MetricsTable.tsx
+++ /dev/null
@@ -1,313 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import {
-  Text,
-  Table,
-  TableContainer,
-  Tbody,
-  Th,
-  Thead,
-  Tr,
-  Td,
-  Box,
-} from '@chakra-ui/react';
-import axios from 'axios';
-import React, { useContext, useEffect, useState } from 'react';
-import { AppContext } from '../../context/context';
-
-interface EventMeshMetrics {
-  maxHTTPTPS: number,
-  avgHTTPTPS: number,
-  maxHTTPCost: number,
-  avgHTTPCost: number,
-  avgHTTPBodyDecodeCost: number,
-  httpDiscard: number,
-  maxBatchSendMsgTPS: number,
-  avgBatchSendMsgTPS: number,
-  sendBatchMsgNumSum: number,
-  sendBatchMsgFailNumSum: number,
-  sendBatchMsgFailRate: number,
-  sendBatchMsgDiscardNumSum: number,
-  maxSendMsgTPS: number,
-  avgSendMsgTPS: number,
-  sendMsgNumSum: number,
-  sendMsgFailNumSum: number,
-  sendMsgFailRate: number,
-  replyMsgNumSum: number,
-  replyMsgFailNumSum: number,
-  maxPushMsgTPS: number,
-  avgPushMsgTPS: number,
-  pushHTTPMsgNumSum: number,
-  pushHTTPMsgFailNumSum: number,
-  pushHTTPMsgFailRate: number,
-  maxHTTPPushLatency : number,
-  avgHTTPPushLatency : number,
-  batchMsgQueueSize : number,
-  sendMsgQueueSize : number,
-  pushMsgQueueSize : number,
-  retryHTTPQueueSize : number,
-  avgBatchSendMsgCost : number,
-  avgSendMsgCost : number,
-  avgReplyMsgCost : number,
-
-  // TCP Metrics
-  retryTCPQueueSize: number,
-  client2eventMeshTCPTPS : number,
-  eventMesh2mqTCPTPS : number,
-  mq2eventMeshTCPTPS : number,
-  eventMesh2clientTCPTPS : number,
-  allTCPTPS : number,
-  allTCPConnections : number,
-  subTopicTCPNum : number
-}
-
-const MetricsTable = () => {
-  const { state } = useContext(AppContext);
-  const [metrics, setMetrics] = useState<Partial<EventMeshMetrics>>({});
-
-  useEffect(() => {
-    const fetch = async () => {
-      try {
-        const { data } = await axios.get<EventMeshMetrics>(`${state.endpoint}/metrics`);
-        setMetrics(data);
-      } catch (error) {
-        setMetrics({});
-      }
-    };
-
-    fetch();
-  }, []);
-
-  type MetricRecord = Record<string, number | undefined>;
-  const httpMetrics: MetricRecord = {
-    'Max HTTP TPS': metrics.maxHTTPTPS,
-    'Avg HTTP TPS': metrics.avgHTTPTPS,
-    'Max HTTP Cost': metrics.maxHTTPCost,
-    'Avg HTTP Cost': metrics.avgHTTPCost,
-    'Avg HTTP Body Decode Cost': metrics.avgHTTPBodyDecodeCost,
-    'HTTP Discard': metrics.httpDiscard,
-  };
-  const batchMetrics: MetricRecord = {
-    'Max Batch Send Msg TPS': metrics.maxBatchSendMsgTPS,
-    'Avg Batch Send Msg TPS': metrics.avgBatchSendMsgTPS,
-    'Send Batch Msg Num Sum': metrics.sendBatchMsgNumSum,
-    'Send Batch Msg Fail Num Sum': metrics.sendBatchMsgFailNumSum,
-    'Send Batch Msg Fail Rate': metrics.sendBatchMsgFailRate,
-    'Send Batch Msg Discard Num Sum': metrics.sendBatchMsgDiscardNumSum,
-  };
-  const sendMetrics: MetricRecord = {
-    'Max Send Msg TPS': metrics.maxSendMsgTPS,
-    'Avg Send Msg TPS': metrics.avgSendMsgTPS,
-    'Send Msg Num Sum': metrics.sendMsgNumSum,
-    'Send Msg Fail Num Sum': metrics.sendMsgFailNumSum,
-    'Send Msg Fail Rate': metrics.sendMsgFailRate,
-    'Reply Msg Num Sum': metrics.replyMsgNumSum,
-    'Reply Msg Fail Num Sum': metrics.replyMsgFailNumSum,
-  };
-  const pushMetrics: MetricRecord = {
-    'Max Push Msg TPS': metrics.maxPushMsgTPS,
-    'Avg Push Msg TPS': metrics.avgPushMsgTPS,
-    'Push HTTP Msg Num Sum': metrics.pushHTTPMsgNumSum,
-    'Push HTTP Msg Fail Num Sum': metrics.pushHTTPMsgFailNumSum,
-    'Push HTTP Msg Fail Rate': metrics.pushHTTPMsgFailRate,
-    'Max HTTP Push Latency': metrics.maxHTTPPushLatency,
-    'Avg HTTP Push Latency': metrics.avgHTTPPushLatency,
-  };
-  const tcpMetrics: MetricRecord = {
-    'Retry TCP Queue Size': metrics.retryTCPQueueSize,
-    'Client2eventMesh TCP TPS': metrics.client2eventMeshTCPTPS,
-    'EventMesh2mq TCP TPS': metrics.eventMesh2mqTCPTPS,
-    'MQ2eventMesh TCP TPS': metrics.mq2eventMeshTCPTPS,
-    'EventMesh2client TCP TPS': metrics.eventMesh2clientTCPTPS,
-    'All TCP TPS': metrics.allTCPTPS,
-    'All TCP Connections': metrics.allTCPConnections,
-    'Sub Topic TCP Num': metrics.subTopicTCPNum,
-  };
-
-  const convertConfigurationToTable = (
-    metricRecord: Record<string, string | number | boolean | undefined>,
-  ) => Object.entries(metricRecord).map(([key, value]) => {
-    if (value === undefined) {
-      return (
-        <Tr>
-          <Td>{key}</Td>
-          <Td>Undefined</Td>
-        </Tr>
-      );
-    }
-
-    return (
-      <Tr>
-        <Td>{key}</Td>
-        <Td>{value.toString()}</Td>
-      </Tr>
-    );
-  });
-
-  if (Object.keys(metrics).length === 0) {
-    return (
-      <Box
-        maxW="full"
-        bg="white"
-        borderWidth="2px"
-        borderRadius="md"
-        borderColor="rgb(211,85,25)"
-        overflow="hidden"
-        p="4"
-        mt="4"
-        opacity="0.8"
-      >
-        <Text fontSize="l" fontWeight="semibold" color="rgb(211,85,25)" textAlign={['left', 'center']}>
-          EventMesh Daemon Not Connected
-        </Text>
-      </Box>
-    );
-  }
-  return (
-    <>
-      <Box
-        maxW="full"
-        bg="white"
-        borderWidth="1px"
-        borderRadius="md"
-        overflow="hidden"
-        p="4"
-        mt="4"
-      >
-        <Text
-          w="full"
-        >
-          EventMesh HTTP Metrics
-        </Text>
-
-        <TableContainer mt="4">
-          <Table variant="simple">
-            <Thead>
-              <Tr>
-                <Th>Metric</Th>
-                <Th>Value</Th>
-              </Tr>
-            </Thead>
-            <Tbody>
-              {convertConfigurationToTable(httpMetrics)}
-            </Tbody>
-          </Table>
-        </TableContainer>
-
-        <Text
-          w="full"
-          mt="4"
-        >
-          HTTP Batch Metrics
-        </Text>
-
-        <TableContainer mt="4">
-          <Table variant="simple">
-            <Thead>
-              <Tr>
-                <Th>Metric</Th>
-                <Th>Value</Th>
-              </Tr>
-            </Thead>
-            <Tbody>
-              {convertConfigurationToTable(batchMetrics)}
-            </Tbody>
-          </Table>
-        </TableContainer>
-
-        <Text
-          w="full"
-          mt="4"
-        >
-          HTTP Send Metrics
-        </Text>
-
-        <TableContainer mt="4">
-          <Table variant="simple">
-            <Thead>
-              <Tr>
-                <Th>Metric</Th>
-                <Th>Value</Th>
-              </Tr>
-            </Thead>
-            <Tbody>
-              {convertConfigurationToTable(sendMetrics)}
-            </Tbody>
-          </Table>
-        </TableContainer>
-
-        <Text
-          w="full"
-          mt="4"
-        >
-          HTTP Push Metrics
-        </Text>
-
-        <TableContainer mt="4">
-          <Table variant="simple">
-            <Thead>
-              <Tr>
-                <Th>Metric</Th>
-                <Th>Value</Th>
-              </Tr>
-            </Thead>
-            <Tbody>
-              {convertConfigurationToTable(pushMetrics)}
-            </Tbody>
-          </Table>
-        </TableContainer>
-      </Box>
-      <Box
-        maxW="full"
-        bg="white"
-        borderWidth="1px"
-        borderRadius="md"
-        overflow="hidden"
-        p="4"
-        mt="4"
-      >
-
-        <Text
-          w="full"
-          mt="4"
-        >
-          TCP Metrics
-        </Text>
-
-        <TableContainer mt="4">
-          <Table variant="simple">
-            <Thead>
-              <Tr>
-                <Th>Metric</Th>
-                <Th>Value</Th>
-              </Tr>
-            </Thead>
-            <Tbody>
-              {convertConfigurationToTable(tcpMetrics)}
-            </Tbody>
-          </Table>
-        </TableContainer>
-
-      </Box>
-    </>
-  );
-};
-
-export default MetricsTable;
diff --git a/frontend/components/navigation/MenuItem.tsx b/frontend/components/navigation/MenuItem.tsx
deleted file mode 100644
index 31f119b..0000000
--- a/frontend/components/navigation/MenuItem.tsx
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-import React, { FC, ReactNode } from 'react';
-import {
-  Flex, FlexProps, Link, Text,
-} from '@chakra-ui/react';
-
-interface MenuItemProps extends FlexProps {
-  selected: boolean;
-  active: boolean;
-  href: string;
-  children: string | number;
-  setActiveName: (name: string) => void;
-}
-
-export const MenuItem = ({
-  selected,
-  active,
-  href,
-  children,
-  setActiveName,
-}: MenuItemProps) => (
-  <Link
-    position="relative"
-    href={href}
-    h="8"
-    mt={1.5}
-    mb={1.5}
-    ml={3}
-    mr={3}
-    boxSizing="border-box"
-    style={{ textDecoration: 'none' }}
-    _focus={{ boxShadow: 'none' }}
-    onMouseOver={() => setActiveName(children.toString())}
-    onMouseOut={() => setActiveName('')}
-  >
-    <Flex
-      position="absolute"
-      zIndex={2}
-      w="full"
-      h="full"
-      p="6"
-      borderRadius="lg"
-      align="center"
-      role="group"
-      cursor="pointer"
-      fontSize="md"
-      transition="color 0.15s, background-color 0.15s"
-      color={selected || active ? '#2a62ad' : 'current'}
-      fontWeight={selected ? 'bolder' : 'none'}
-      bgColor={selected || active ? '#dce5fe' : 'none'}
-      wordBreak="break-word"
-      overflowWrap="normal"
-    >
-      {children}
-    </Flex>
-    {/* <Box
-      position="absolute"
-      zIndex={1}
-      p={selected || active ? '4' : 0}
-      borderRadius="lg"
-      role="group"
-      cursor="pointer"
-      transition="width 0.3s, opacity 0.4s"
-      bgGradient="linear(28deg,#2a4cad, #2a6bad, #28c9ff)"
-      h="100%"
-      w={selected || active ? '100%' : '0'}
-      opacity={selected || active ? 1 : 0}
-    /> */}
-  </Link>
-);
-
-export const MenuGroupItem: FC<{ name: string; children: ReactNode }> = (
-  props,
-) => {
-  const { name, children } = props;
-  return (
-    <Flex
-      flexDirection="column"
-      w="full"
-      justifyContent="center"
-      alignContent="center"
-    >
-      {name && (
-        <Text
-          mt={5}
-          mb="2"
-          pl="6"
-          fontSize="xs"
-          color="#a2b5d8"
-          fontWeight="bold"
-        >
-          {name.toUpperCase()}
-        </Text>
-      )}
-      {children}
-    </Flex>
-  );
-};
diff --git a/frontend/components/navigation/Menus.tsx b/frontend/components/navigation/Menus.tsx
deleted file mode 100644
index 72be935..0000000
--- a/frontend/components/navigation/Menus.tsx
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import React, { FC, ReactNode, useState } from 'react';
-import {
-  Box,
-  BoxProps,
-  Button,
-  Flex,
-  useColorModeValue,
-  Image,
-} from '@chakra-ui/react';
-import { IconType } from 'react-icons';
-import { ArrowBackIcon } from '@chakra-ui/icons';
-
-import { useRouter } from 'next/router';
-
-import {
-  FiList, FiGrid, FiServer, FiDatabase, FiMenu,
-} from 'react-icons/fi';
-import LogoImg from '../../static/images/logo.png';
-import { MenuItem, MenuGroupItem } from './MenuItem';
-
-const Menus: Array<{
-  group?: string;
-  name: string;
-  icon: IconType;
-  href: string;
-  subPath?:string[]
-}> = [
-  { name: 'Overview', icon: FiList, href: '/' },
-  { name: 'Metrics', icon: FiMenu, href: '/metrics' },
-  { name: 'Registry', icon: FiDatabase, href: '/registry' },
-  { name: 'Topic', icon: FiGrid, href: '/topic' },
-  { name: 'Event', icon: FiDatabase, href: '/event' },
-  {
-    group: 'Workflow',
-    name: 'Workflows',
-    icon: FiServer,
-    href: '/workflows',
-    subPath: ['/workflows/create'],
-  },
-  {
-    group: 'Workflow',
-    name: 'Event Catalogs',
-    icon: FiServer,
-    href: '/eventCatalogs',
-  },
-  {
-    group: 'Clients',
-    name: 'TCP',
-    icon: FiServer,
-    href: '/tcp',
-  },
-  {
-    group: 'Clients',
-    name: 'HTTP',
-    icon: FiServer,
-    href: '/http',
-  },
-  {
-    group: 'Clients',
-    name: 'gRPC',
-    icon: FiServer,
-    href: '/grpc',
-  },
-];
-
-interface MenuProps extends BoxProps {
-  onClose: () => void;
-}
-interface IGroupItem {
-  name?: string;
-  children: ReactNode[];
-}
-
-const NavMenu: FC<MenuProps> = ({ display = {}, onClose }) => {
-  const router = useRouter();
-  const [curMenu, setCurMenu] = useState('');
-  const curRoute = router.pathname;
-
-  const MenuByGroup = Menus.reduce<{
-    [groupName: string]: IGroupItem;
-  }>(
-    (groupItems, item) => {
-      const {
-        group, name, href, subPath,
-      } = item;
-      const menuItem = (
-        <MenuItem
-          key={`menu_item_${name}`}
-          selected={curRoute === href || (subPath?.includes(curRoute) ?? false)}
-          active={curMenu === group}
-          href={href}
-          setActiveName={(selectedName:string) => setCurMenu(selectedName)}
-        >
-          {name}
-        </MenuItem>
-      );
-
-      if (!group) {
-        groupItems.topMenu.children.push(menuItem);
-        return groupItems;
-      }
-
-      if (!groupItems[group]) {
-        groupItems[group] = { name: group, children: [] };
-      }
-      groupItems[group].children.push(menuItem);
-
-      return groupItems;
-    },
-    { topMenu: { children: [] } },
-  );
-
-  return (
-    <Box
-      display={display}
-      pos="fixed"
-      w={{ base: 'full', md: 60 }}
-      borderRight="1px"
-      borderRightColor={useColorModeValue('gray.200', 'gray.700')}
-      h="full"
-      bg={useColorModeValue('white', 'gray.900')}
-      boxShadow="base"
-    >
-      <Flex
-        mt={{ base: 5, md: 10 }}
-        mb={{ base: 5, md: 10 }}
-        alignItems={{ base: 'space-between', md: 'center' }}
-        justifyContent={{ base: 'space-between', md: 'center' }}
-        w={{ base: 'full' }}
-      >
-        <Image
-          display={{ base: 'none', md: 'block' }}
-          w={100}
-          src={LogoImg.src}
-          alt="Dan Abramov"
-        />
-        <Button
-          display={{ base: 'block', md: 'none' }}
-          w={{ base: 'full' }}
-          size="lg"
-          textAlign="left"
-          onClick={onClose}
-        >
-          <ArrowBackIcon mr={2} />
-          Back
-        </Button>
-      </Flex>
-
-      <Flex flexDirection="column" alignItems="center">
-        {Object.entries(MenuByGroup).map((groupItem) => (
-          <MenuGroupItem key={`group_item_${groupItem[1].name}`} name={groupItem[1].name ?? ''}>
-            {groupItem[1].children}
-          </MenuGroupItem>
-        ))}
-      </Flex>
-    </Box>
-  );
-};
-
-export default NavMenu;
diff --git a/frontend/components/navigation/MenusMobile.tsx b/frontend/components/navigation/MenusMobile.tsx
deleted file mode 100644
index 8885f14..0000000
--- a/frontend/components/navigation/MenusMobile.tsx
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import {
-  IconButton,
-  Flex,
-  useColorModeValue,
-  Text,
-  FlexProps,
-} from '@chakra-ui/react';
-import { FiMenu } from 'react-icons/fi';
-
-interface MobileProps extends FlexProps {
-  onOpen: () => void;
-}
-
-const MobileNav = ({ onOpen }: MobileProps) => (
-  <Flex
-    ml={{ base: 0, md: 60 }}
-    px={{ base: 4, md: 24 }}
-    height="20"
-    alignItems="center"
-    bg={useColorModeValue('white', 'gray.900')}
-    borderBottomWidth="1px"
-    borderBottomColor={useColorModeValue('gray.200', 'gray.700')}
-    justifyContent="flex-start"
-    display={{ base: 'flex', md: 'none' }}
-  >
-    <IconButton
-      variant="outline"
-      onClick={onOpen}
-      aria-label="open menu"
-      icon={<FiMenu />}
-    />
-
-    <Text fontSize="2xl" ml="8" fontWeight="bold">
-      EventMesh
-    </Text>
-  </Flex>
-);
-
-export default MobileNav;
diff --git a/frontend/components/navigation/Sidebar.tsx b/frontend/components/navigation/Sidebar.tsx
deleted file mode 100644
index e8e349b..0000000
--- a/frontend/components/navigation/Sidebar.tsx
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-/* eslint-disable react/jsx-props-no-spreading */
-import React, { FC, ReactNode } from 'react';
-import {
-  Box,
-  useColorModeValue,
-  Drawer,
-  DrawerContent,
-  useDisclosure,
-} from '@chakra-ui/react';
-import Menus from './Menus';
-import MenusMobile from './MenusMobile';
-
-const Sidebar: FC<{ children: ReactNode }> = ({ children }) => {
-  const { isOpen, onOpen, onClose } = useDisclosure();
-  return (
-    <>
-      <Box minH="100vh" bg={useColorModeValue('gray.100', 'gray.900')}>
-        <Menus
-          display={{ base: 'none', md: 'block' }}
-          onClose={() => onClose}
-        />
-        <MenusMobile onOpen={onOpen} />
-        <Box ml={{ base: 0, md: 60 }} p="4">
-          {children}
-        </Box>
-      </Box>
-      <Drawer
-        autoFocus={false}
-        isOpen={isOpen}
-        placement="left"
-        onClose={onClose}
-        returnFocusOnClose={false}
-        onOverlayClick={onClose}
-        size="full"
-      >
-        <DrawerContent>
-          <Menus onClose={onClose} />
-        </DrawerContent>
-      </Drawer>
-    </>
-  );
-};
-
-export default Sidebar;
diff --git a/frontend/components/registry/RegistryTable.tsx b/frontend/components/registry/RegistryTable.tsx
deleted file mode 100644
index 719fde6..0000000
--- a/frontend/components/registry/RegistryTable.tsx
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import {
-  HStack,
-  Select,
-  Input,
-  Table,
-  Thead,
-  Tbody,
-  Tr,
-  Th,
-  Td,
-  TableContainer,
-  useToast,
-  Box,
-} from '@chakra-ui/react';
-import axios from 'axios';
-import { useContext, useEffect, useState } from 'react';
-import { AppContext } from '../../context/context';
-
-interface EventMeshInstance {
-  eventMeshClusterName: string,
-  eventMeshName: string,
-  endpoint: string,
-  lastUpdateTimestamp: number,
-  metadata: string
-}
-
-const EventMeshInstanceRow = ({
-  eventMeshClusterName, eventMeshName, endpoint, lastUpdateTimestamp, metadata,
-}: EventMeshInstance) => (
-  <Tr>
-    <Td>{eventMeshClusterName}</Td>
-    <Td>{eventMeshName}</Td>
-    <Td>{endpoint}</Td>
-    <Td>{lastUpdateTimestamp}</Td>
-    <Td>{metadata}</Td>
-  </Tr>
-);
-
-const RegistryTable = () => {
-  const { state } = useContext(AppContext);
-
-  const [searchInput, setSearchInput] = useState<string>('');
-  const handleSearchInputChange = (event: React.FormEvent<HTMLInputElement>) => {
-    setSearchInput(event.currentTarget.value);
-  };
-
-  const [groupSet, setGroupSet] = useState<Set<string>>(new Set());
-  const [groupFilter, setGroupFilter] = useState<string>('');
-  const handleGroupSelectChange = (event: React.FormEvent<HTMLSelectElement>) => {
-    setGroupFilter(event.currentTarget.value);
-  };
-
-  const [EventMeshInstanceList, setEventMeshInstanceList] = useState<EventMeshInstance[]>([]);
-  const toast = useToast();
-  useEffect(() => {
-    const fetch = async () => {
-      try {
-        const { data } = await axios.get<EventMeshInstance[]>(`${state.endpoint}/registry`);
-        setEventMeshInstanceList(data);
-
-        const nextGroupSet = new Set<string>();
-        data.forEach(({ eventMeshClusterName }) => {
-          nextGroupSet.add(eventMeshClusterName);
-        });
-        setGroupSet(nextGroupSet);
-      } catch (error) {
-        if (axios.isAxiosError(error)) {
-          toast({
-            title: 'Failed to fetch registry list',
-            description: 'unable to connect to the EventMesh daemon',
-            status: 'error',
-            duration: 3000,
-            isClosable: true,
-          });
-          setEventMeshInstanceList([]);
-        }
-      }
-    };
-
-    fetch();
-  }, []);
-
-  return (
-    <Box
-      maxW="full"
-      bg="white"
-      borderWidth="1px"
-      borderRadius="md"
-      overflow="hidden"
-      p="4"
-    >
-      <HStack
-        spacing="2"
-      >
-        <Input
-          w="200%"
-          placeholder="Search"
-          value={searchInput}
-          onChange={handleSearchInputChange}
-        />
-        <Select
-          placeholder="Select Group"
-          onChange={handleGroupSelectChange}
-        >
-          {Array.from(groupSet).map((group) => (
-            <option value={group} key={group}>{group}</option>
-          ))}
-        </Select>
-      </HStack>
-
-      <TableContainer>
-        <Table variant="simple">
-          <Thead>
-            <Tr>
-              <Th>Event Mesh Cluster Name</Th>
-              <Th>Event Mesh Name</Th>
-              <Th>Endpoint</Th>
-              <Th>Last Update Timestamp</Th>
-              <Th>Metadata</Th>
-            </Tr>
-          </Thead>
-          <Tbody>
-            {EventMeshInstanceList && EventMeshInstanceList.filter(({
-              eventMeshClusterName, eventMeshName,
-            }) => {
-              if (searchInput && !eventMeshName.includes(searchInput)) {
-                return false;
-              }
-              if (groupFilter && groupFilter !== eventMeshClusterName) {
-                return false;
-              }
-              return true;
-            }).map(({
-              eventMeshClusterName, eventMeshName, endpoint, lastUpdateTimestamp, metadata,
-            }) => (
-              <EventMeshInstanceRow
-                eventMeshClusterName={eventMeshClusterName}
-                eventMeshName={eventMeshName}
-                endpoint={endpoint}
-                lastUpdateTimestamp={lastUpdateTimestamp}
-                metadata={metadata}
-              />
-            ))}
-          </Tbody>
-        </Table>
-      </TableContainer>
-    </Box>
-  );
-};
-
-export default RegistryTable;
diff --git a/frontend/components/topic/TopicTable.tsx b/frontend/components/topic/TopicTable.tsx
deleted file mode 100644
index f3a1369..0000000
--- a/frontend/components/topic/TopicTable.tsx
+++ /dev/null
@@ -1,275 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import {
-  HStack,
-  Input,
-  Table,
-  Thead,
-  Tbody,
-  Tr,
-  Th,
-  Td,
-  TableContainer,
-  useToast,
-  Box,
-  Button,
-  Modal,
-  ModalBody,
-  ModalCloseButton,
-  ModalContent,
-  ModalFooter,
-  ModalHeader,
-  ModalOverlay,
-  useDisclosure,
-} from '@chakra-ui/react';
-import axios from 'axios';
-import { useContext, useEffect, useState } from 'react';
-import { AppContext } from '../../context/context';
-
-interface Topic {
-  name: string,
-  messageCount: number,
-}
-
-interface TopicProps {
-  name: string,
-  messageCount: number,
-}
-
-interface CreateTopicRequest {
-  name: string,
-}
-
-interface RemoveTopicRequest {
-  name: string,
-}
-
-const CreateTopicModal = () => {
-  const { state } = useContext(AppContext);
-
-  const { isOpen, onOpen, onClose } = useDisclosure();
-  const [topicName, setTopicName] = useState('');
-  const handleTopicNameChange = (event: React.FormEvent<HTMLInputElement>) => {
-    setTopicName(event.currentTarget.value);
-  };
-
-  const toast = useToast();
-  const [loading, setLoading] = useState(false);
-  const onCreateClick = async () => {
-    try {
-      setLoading(true);
-      await axios.post<CreateTopicRequest>(`${state.endpoint}/topic`, {
-        name: topicName,
-      });
-      onClose();
-    } catch (error) {
-      if (axios.isAxiosError(error)) {
-        toast({
-          title: 'Failed to create the topic',
-          description: error.message,
-          status: 'error',
-          duration: 3000,
-          isClosable: true,
-        });
-      }
-    } finally {
-      setLoading(false);
-    }
-  };
-
-  return (
-    <>
-      <Button
-        colorScheme="blue"
-        onClick={onOpen}
-      >
-        Create Topic
-      </Button>
-      <Modal isOpen={isOpen} onClose={onClose}>
-        <ModalOverlay />
-        <ModalContent>
-          <ModalHeader>Create Topic</ModalHeader>
-          <ModalCloseButton />
-          <ModalBody>
-            <Input
-              placeholder="Topic Name"
-              value={topicName}
-              onChange={handleTopicNameChange}
-            />
-          </ModalBody>
-
-          <ModalFooter>
-            <Button
-              mr={2}
-              onClick={onClose}
-            >
-              Close
-            </Button>
-            <Button
-              colorScheme="blue"
-              onClick={onCreateClick}
-              isLoading={loading}
-              isDisabled={topicName.length === 0}
-            >
-              Create
-            </Button>
-          </ModalFooter>
-        </ModalContent>
-      </Modal>
-    </>
-  );
-};
-
-const TopicRow = ({
-  name,
-  messageCount,
-}: TopicProps) => {
-  const { state } = useContext(AppContext);
-
-  const toast = useToast();
-  const [loading, setLoading] = useState(false);
-  const onRemoveClick = async () => {
-    try {
-      setLoading(true);
-      await axios.delete<RemoveTopicRequest>(`${state.endpoint}/topic`, {
-        data: {
-          name,
-        },
-      });
-      setLoading(false);
-    } catch (error) {
-      if (axios.isAxiosError(error)) {
-        toast({
-          title: 'Failed to remove the topic',
-          description: error.message,
-          status: 'error',
-          duration: 3000,
-          isClosable: true,
-        });
-      }
-    }
-  };
-
-  return (
-    <Tr>
-      <Td>{name}</Td>
-      <Td>{messageCount}</Td>
-      <Td>
-        <HStack>
-          <Button
-            colorScheme="red"
-            isLoading={loading}
-            onClick={onRemoveClick}
-          >
-            Remove
-          </Button>
-        </HStack>
-      </Td>
-    </Tr>
-  );
-};
-
-const TopicTable = () => {
-  const { state } = useContext(AppContext);
-
-  const [searchInput, setSearchInput] = useState<string>('');
-  const handleSearchInputChange = (event: React.FormEvent<HTMLInputElement>) => {
-    setSearchInput(event.currentTarget.value);
-  };
-
-  const [topicList, setTopicList] = useState<Topic[]>([]);
-  const toast = useToast();
-  useEffect(() => {
-    const fetch = async () => {
-      try {
-        const { data } = await axios.get<Topic[]>(`${state.endpoint}/topic`);
-        setTopicList(data);
-      } catch (error) {
-        if (axios.isAxiosError(error)) {
-          toast({
-            title: 'Failed to fetch the list of topics',
-            description: 'Unable to connect to the EventMesh daemon',
-            status: 'error',
-            duration: 3000,
-            isClosable: true,
-          });
-          setTopicList([]);
-        }
-      }
-    };
-
-    fetch();
-  }, []);
-
-  return (
-    <Box
-      maxW="full"
-      bg="white"
-      borderWidth="1px"
-      borderRadius="md"
-      overflow="hidden"
-      p="4"
-    >
-      <HStack
-        spacing="2"
-      >
-        <Input
-          w="100%"
-          placeholder="Search"
-          value={searchInput}
-          onChange={handleSearchInputChange}
-        />
-        <CreateTopicModal />
-      </HStack>
-
-      <TableContainer>
-        <Table variant="simple">
-          <Thead>
-            <Tr>
-              <Th>Topic Name</Th>
-              <Th>Message Count</Th>
-              <Th>Action</Th>
-            </Tr>
-          </Thead>
-          <Tbody>
-            {topicList.filter(({
-              name,
-            }) => {
-              if (searchInput && !name.includes(searchInput)) {
-                return false;
-              }
-              return true;
-            }).map(({
-              name,
-              messageCount,
-            }) => (
-              <TopicRow
-                name={name}
-                messageCount={messageCount}
-              />
-            ))}
-          </Tbody>
-        </Table>
-      </TableContainer>
-    </Box>
-  );
-};
-
-export default TopicTable;
diff --git a/frontend/components/workflow/Create.tsx b/frontend/components/workflow/Create.tsx
deleted file mode 100644
index d15d5a4..0000000
--- a/frontend/components/workflow/Create.tsx
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import React, { FC, useRef, useState } from 'react';
-
-import {
-  Drawer,
-  DrawerContent,
-  DrawerOverlay,
-  DrawerHeader,
-  DrawerBody,
-  DrawerFooter,
-  DrawerCloseButton,
-  Button,
-  useToast,
-  Spinner,
-} from '@chakra-ui/react';
-import axios from 'axios';
-
-import Editor, { Monaco } from '@monaco-editor/react';
-
-const ApiRoot = process.env.NEXT_PUBLIC_WORKFLOW_API_ROOT;
-
-const Create: FC<{
-  visible: boolean;
-  onClose: () => void;
-  onSucceed: () => void;
-}> = ({ visible = false, onClose = () => {}, onSucceed = () => {} }) => {
-  const toast = useToast();
-  const [isSubmitting, setIsSubmitting] = useState(false);
-  const editorRef = useRef<Monaco | null>(null);
-  const defaultEditorValue = '# Your code goes here';
-
-  const onSubmit = () => {
-    setIsSubmitting(true);
-
-    try {
-      const value = editorRef.current.getValue();
-      if (value === defaultEditorValue) {
-        toast({
-          title: 'Invalid definition',
-          description: 'Please input your workflow definition properly',
-          status: 'warning',
-          position: 'top-right',
-        });
-        setIsSubmitting(false);
-        return;
-      }
-      axios
-        .post(
-          `${ApiRoot}/workflow`,
-          { workflow: { definition: value } },
-          {
-            headers: {
-              'Content-Type': 'application/json',
-            },
-          },
-        )
-        .then(() => {
-          toast({
-            title: 'Succeeded',
-            status: 'success',
-            position: 'top-right',
-          });
-          onSucceed();
-          setIsSubmitting(false);
-        })
-        .catch((error) => {
-          toast({
-            title: 'Failed',
-            description: error.response.data,
-            status: 'error',
-            position: 'top-right',
-          });
-          setIsSubmitting(false);
-        });
-    } catch (error) {
-      setIsSubmitting(false);
-    }
-  };
-
-  const handleEditorDidMount = (editor: Monaco) => {
-    editorRef.current = editor;
-  };
-
-  return (
-    <Drawer
-      isOpen={visible}
-      size="xl"
-      placement="right"
-      closeOnEsc={false}
-      onClose={() => onClose()}
-    >
-      <DrawerOverlay />
-      <DrawerContent>
-        <DrawerCloseButton />
-        <DrawerHeader>Create New Workflow</DrawerHeader>
-        <DrawerBody>
-          <Editor
-            height="1000px"
-            defaultLanguage="yaml"
-            defaultValue={defaultEditorValue}
-            onMount={handleEditorDidMount}
-            theme="vs-dark"
-          />
-        </DrawerBody>
-        <DrawerFooter justifyContent="flex-start">
-          <Button colorScheme="blue" mr={3} onClick={onSubmit}>
-            {isSubmitting ? <Spinner colorScheme="white" size="sm" /> : 'Submit'}
-          </Button>
-          <Button variant="ghost" colorScheme="blue" onClick={onClose}>
-            Cancel
-          </Button>
-        </DrawerFooter>
-      </DrawerContent>
-    </Drawer>
-  );
-};
-
-export default React.memo(Create);
diff --git a/frontend/components/workflow/Details/Details.tsx b/frontend/components/workflow/Details/Details.tsx
deleted file mode 100644
index 601cee9..0000000
--- a/frontend/components/workflow/Details/Details.tsx
+++ /dev/null
@@ -1,285 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import React, {
-  FC, useEffect, useRef, useState,
-} from 'react';
-
-import {
-  Drawer,
-  DrawerContent,
-  DrawerOverlay,
-  DrawerHeader,
-  DrawerBody,
-  DrawerFooter,
-  DrawerCloseButton,
-  Box,
-  FormLabel,
-  Flex,
-  Text,
-  Button,
-  Stack,
-  Tabs,
-  TabList,
-  TabPanels,
-  Tab,
-  TabPanel,
-  useToast,
-  AlertDialog,
-  AlertDialogOverlay,
-  AlertDialogContent,
-  AlertDialogHeader,
-  AlertDialogBody,
-  AlertDialogFooter,
-  Alert,
-  Badge,
-} from '@chakra-ui/react';
-
-import { WarningIcon, InfoIcon } from '@chakra-ui/icons';
-import moment from 'moment';
-
-import Editor, { Monaco } from '@monaco-editor/react';
-import axios from 'axios';
-import { WorkflowType, WorkflowStatusEnum } from '../types';
-// import { WorkflowStatusMap } from '../constant';
-import Intances from './Instances';
-
-const ApiRoot = process.env.NEXT_PUBLIC_WORKFLOW_API_ROOT;
-
-const Details: FC<{
-  visible: boolean;
-  data?: WorkflowType | null;
-  onClose: () => void;
-  onSaved: () => void;
-}> = ({
-  visible = false, data, onClose = () => {}, onSaved = () => {},
-}) => {
-  const toast = useToast();
-  const editorRef = useRef<Monaco | null>(null);
-  const [isShowConfirm, setIsShowComfirm] = useState(false);
-  const cancelRef = useRef(null);
-  const handleEditorDidMount = (editor: Monaco) => {
-    editorRef.current = editor;
-    editor.setValue(data?.definition ?? '');
-  };
-
-  const onSubmit = () => {
-    const value = editorRef.current.getValue();
-
-    axios
-      .post(
-        `${ApiRoot}/workflow`,
-        {
-          workflow: {
-            workflow_id: data?.workflow_id,
-            definition: value,
-          },
-        },
-        {
-          headers: {
-            'Content-Type': 'application/json',
-          },
-        },
-      )
-      .then(() => {
-        toast({
-          title: 'Workflow saved',
-          status: 'success',
-          position: 'top-right',
-        });
-        setIsShowComfirm(false);
-        onSaved();
-        onClose();
-      })
-      .catch((error) => {
-        setIsShowComfirm(false);
-        toast({
-          title: 'Failed to save',
-          description: error.response.data,
-          status: 'error',
-          position: 'top-right',
-        });
-      });
-  };
-
-  const onConfirm = () => {
-    const value = editorRef.current.getValue();
-    if (data?.definition === value) {
-      onClose();
-      return;
-    }
-    setIsShowComfirm(true);
-  };
-
-  useEffect(() => {
-    if (editorRef.current) {
-      editorRef.current.setValue(data?.definition ?? '');
-    }
-  }, [data, editorRef]);
-
-  return (
-    <>
-      <AlertDialog
-        leastDestructiveRef={cancelRef}
-        isOpen={isShowConfirm}
-        onClose={onClose}
-      >
-        <AlertDialogOverlay>
-          <AlertDialogContent>
-            <AlertDialogHeader
-              fontSize="lg"
-              fontWeight="bold"
-              alignItems="center"
-            >
-              <WarningIcon boxSize="6" mr={2} color="orange" />
-              <Text fontSize="xl" as="b">
-                Confirm
-              </Text>
-            </AlertDialogHeader>
-            <AlertDialogBody>
-              Are you sure to save the changes to
-              {' '}
-              <Text as="b">{data?.workflow_id}</Text>
-              ?
-            </AlertDialogBody>
-            <AlertDialogFooter>
-              <Button ref={cancelRef} onClick={() => setIsShowComfirm(false)}>
-                No
-              </Button>
-              <Button colorScheme="blue" onClick={onSubmit} ml={3}>
-                Save
-              </Button>
-            </AlertDialogFooter>
-          </AlertDialogContent>
-        </AlertDialogOverlay>
-      </AlertDialog>
-
-      <Drawer
-        isOpen={visible}
-        size="xl"
-        placement="right"
-        onClose={() => onClose()}
-      >
-        <DrawerOverlay />
-        <DrawerContent>
-          <DrawerCloseButton />
-          <DrawerHeader>
-            {data?.workflow_id}
-            {/* <Badge
-              ml={2}
-              colorScheme={
-                data?.status === WorkflowStatusEnum.Normal ? 'blue' : 'red'
-              }
-            >
-              {WorkflowStatusMap.get(data?.status ?? 0) ?? '-'}
-            </Badge> */}
-            <Badge ml={2}>
-              Version
-              {' '}
-              {data?.version}
-            </Badge>
-          </DrawerHeader>
-          <DrawerBody>
-            <Stack mb="15px" direction="row" spacing={10}>
-              <Flex flexDirection="column" h="full">
-                <Box mb={2}>
-                  <FormLabel opacity={0.5}>Workflow Name</FormLabel>
-                  <Text>{data?.workflow_name}</Text>
-                </Box>
-                <Box mb={2}>
-                  <FormLabel opacity={0.5}>Created At</FormLabel>
-                  <Text>
-                    {moment(data?.update_time).format('YYYY-MM-DD HH:mm:ss')}
-                  </Text>
-                </Box>
-                <Box>
-                  <FormLabel opacity={0.5}>Updated At</FormLabel>
-                  <Text>
-                    {moment(data?.update_time).format('YYYY-MM-DD HH:mm:ss')}
-                  </Text>
-                </Box>
-              </Flex>
-
-              <Flex flexDirection="column" h="full">
-                <Box mb={2}>
-                  <FormLabel opacity={0.5}>Total Instance</FormLabel>
-                  <Text>{data?.total_instances}</Text>
-                </Box>
-                <Box mb={2}>
-                  <FormLabel opacity={0.5}>Running</FormLabel>
-                  <Text>{data?.total_running_instances}</Text>
-                </Box>
-                <Box>
-                  <FormLabel opacity={0.5}>Failed</FormLabel>
-                  <Text>{data?.total_failed_instances}</Text>
-                </Box>
-              </Flex>
-            </Stack>
-
-            <Tabs>
-              <TabList>
-                <Tab>Definition</Tab>
-                <Tab>Instances</Tab>
-              </TabList>
-              <TabPanels>
-                <TabPanel>
-                  <Alert status="info" mb={2}>
-                    <InfoIcon color="#3182ce" mr={2} />
-                    <Text fontSize="sm" color="#3182ce">
-                      You can edit the workflow directly and click &quot;OK&quot; to save
-                      it
-                    </Text>
-                  </Alert>
-                  <Editor
-                    height="1000px"
-                    defaultLanguage="yaml"
-                    defaultValue="# Your code goes here"
-                    onMount={handleEditorDidMount}
-                    theme="vs-dark"
-                  />
-                </TabPanel>
-                <TabPanel>
-                  <Intances workflowId={data?.workflow_id ?? ''} />
-                </TabPanel>
-              </TabPanels>
-            </Tabs>
-          </DrawerBody>
-          <DrawerFooter justifyContent="flex-start">
-            <Button colorScheme="blue" mr={3} onClick={onConfirm}>
-              OK
-            </Button>
-            <Button
-              colorScheme="blue"
-              mr={3}
-              variant="ghost"
-              onClick={onClose}
-            >
-              Cancel
-            </Button>
-          </DrawerFooter>
-        </DrawerContent>
-      </Drawer>
-    </>
-  );
-};
-
-Details.defaultProps = {
-  data: null,
-};
-export default Details;
diff --git a/frontend/components/workflow/Details/Instances.tsx b/frontend/components/workflow/Details/Instances.tsx
deleted file mode 100644
index 3c46ebd..0000000
--- a/frontend/components/workflow/Details/Instances.tsx
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import React, {
-  FC, useCallback, useEffect, useState,
-} from 'react';
-import axios from 'axios';
-import {
-  Flex,
-  Text,
-  Table,
-  Thead,
-  Tbody,
-  Tr,
-  Th,
-  Td,
-  TableContainer,
-  TableCaption,
-  Tag,
-  Spinner,
-} from '@chakra-ui/react';
-import moment from 'moment';
-import { WorkflowInstanceType } from '../types';
-import {
-  WorkflowIntanceStatusMap,
-  WorkflowIntanceStatusColorMap,
-} from '../constant';
-
-const ApiRoot = process.env.NEXT_PUBLIC_WORKFLOW_API_ROOT;
-
-const Instances: FC<{ workflowId: string }> = ({ workflowId }) => {
-  const [isLoading, setIsLoading] = useState(true);
-  const [instances, setInstances] = useState<WorkflowInstanceType[]>([]);
-  const [total, setTotal] = useState(0);
-  const [pageIndex, setPageIndex] = useState(1);
-  const pageSize = 10;
-
-  const getWorkflows = useCallback(async () => {
-    setIsLoading(true);
-    try {
-      const reqParams: {
-        page: number;
-        size: number;
-        workflow_id?: string;
-      } = {
-        page: pageIndex,
-        size: pageSize,
-        workflow_id: workflowId,
-      };
-
-      const { data } = await axios.get<{
-        total: number;
-        workflow_instances: WorkflowInstanceType[];
-      }>(`${ApiRoot}/workflow/instances`, {
-        params: reqParams,
-      });
-      setInstances([...instances, ...(data?.workflow_instances ?? [])]);
-      setTotal(data.total);
-      setIsLoading(false);
-    } catch (error) {
-      setIsLoading(false);
-    }
-  }, [workflowId, pageIndex, pageSize]);
-
-  useEffect(() => {
-    const controller = new AbortController();
-    getWorkflows();
-    return () => {
-      controller.abort();
-    };
-  }, [workflowId, pageIndex, pageSize]);
-
-  return (
-    <TableContainer>
-      <Table variant="simple">
-        <Thead>
-          <Tr>
-            <Th>Instance ID</Th>
-            <Th>Status</Th>
-            <Th>Updated at</Th>
-            <Th>Created At</Th>
-          </Tr>
-        </Thead>
-        <Tbody>
-          {instances.map((workflow) => (
-            <Tr key={workflow.workflow_instance_id}>
-              <Td>{workflow.workflow_instance_id}</Td>
-              <Td>
-                <Tag
-                  size="sm"
-                  colorScheme={WorkflowIntanceStatusColorMap.get(
-                    workflow.workflow_status,
-                  )}
-                  variant="outline"
-                >
-                  {WorkflowIntanceStatusMap.get(workflow.workflow_status)}
-                </Tag>
-              </Td>
-              <Td>
-                {moment(workflow.update_time).format('YYYY-MM-DD HH:mm:ss')}
-              </Td>
-              <Td>
-                {moment(workflow.create_time).format('YYYY-MM-DD HH:mm:ss')}
-              </Td>
-            </Tr>
-          ))}
-        </Tbody>
-
-        {instances.length === 0 && (
-          <TableCaption>
-            <Text variant="xs" color="#909090">
-              empty
-            </Text>
-          </TableCaption>
-        )}
-
-        {instances.length > 0 && (
-        <TableCaption>
-          <Flex alignItems="center">
-            <Text fontSize="sx">
-              {`${instances.length} of ${total}  intance${
-                total > 1 ? 's' : ''
-              } in list `}
-            </Text>
-            {isLoading ? (
-              <Spinner ml={2} size="sm" colorScheme="blue" />
-            ) : (
-              instances.length < total && (
-              <Text
-                color={instances.length < total ? '#3182ce' : ''}
-                ml="2"
-                cursor="pointer"
-                as="u"
-                onClick={() => setPageIndex(pageIndex + 1)}
-              >
-                Load More
-              </Text>
-              )
-            )}
-          </Flex>
-        </TableCaption>
-        )}
-      </Table>
-    </TableContainer>
-  );
-};
-
-export default Instances;
diff --git a/frontend/components/workflow/Details/index.ts b/frontend/components/workflow/Details/index.ts
deleted file mode 100644
index 11a5b7d..0000000
--- a/frontend/components/workflow/Details/index.ts
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import Details from './Details';
-
-export default Details;
diff --git a/frontend/components/workflow/constant.ts b/frontend/components/workflow/constant.ts
deleted file mode 100644
index f39a0c0..0000000
--- a/frontend/components/workflow/constant.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import { WorkflowStatusEnum, WorkflowInstanceStatusEnum } from './types';
-
-export const WorkflowStatusMap = new Map([
-  [WorkflowStatusEnum.Normal, 'Normal'],
-  [WorkflowStatusEnum.Deleted, 'Deleted'],
-]);
-
-export const WorkflowIntanceStatusMap = new Map([
-  [WorkflowInstanceStatusEnum.Sleep, 'Sleeping'],
-  [WorkflowInstanceStatusEnum.Wait, 'Waiting'],
-  [WorkflowInstanceStatusEnum.Process, 'Processing'],
-  [WorkflowInstanceStatusEnum.Succeed, 'Succeeded'],
-  [WorkflowInstanceStatusEnum.Fail, 'Failed'],
-]);
-
-export const WorkflowIntanceStatusColorMap = new Map([
-  [WorkflowInstanceStatusEnum.Sleep, 'gray'],
-  [WorkflowInstanceStatusEnum.Wait, 'orange'],
-  [WorkflowInstanceStatusEnum.Process, 'blue'],
-  [WorkflowInstanceStatusEnum.Succeed, 'green'],
-  [WorkflowInstanceStatusEnum.Fail, 'red'],
-]);
diff --git a/frontend/components/workflow/types.ts b/frontend/components/workflow/types.ts
deleted file mode 100644
index 45fe58a..0000000
--- a/frontend/components/workflow/types.ts
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-export type WorkflowType = {
-  create_time: string;
-  definition: string;
-  id: number;
-  status: number;
-  total_failed_instances: number;
-  total_instances: number;
-  total_running_instances: number;
-  update_time: string;
-  version: string;
-  workflow_id: string;
-  workflow_name: string;
-};
-
-export type WorkflowInstanceType = {
-  create_time: string,
-  id: number,
-  update_time: string,
-  workflow_id : string,
-  workflow_instance_id : string,
-  workflow_status : number
-};
-
-export enum WorkflowStatusEnum {
-  'Normal' = 1,
-  'Deleted' = -1,
-}
-
-export enum WorkflowInstanceStatusEnum {
-  Sleep = 1,
-  Wait = 2,
-  Process = 3,
-  Succeed = 4,
-  Fail = 5,
-}
diff --git a/frontend/context/context.tsx b/frontend/context/context.tsx
deleted file mode 100644
index 19b074f..0000000
--- a/frontend/context/context.tsx
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import {
-  useMemo,
-  useEffect,
-  useState,
-  createContext,
-  Dispatch,
-} from 'react';
-import { useImmerReducer } from 'use-immer';
-import { State, Action } from './type';
-import reducer from './reducer';
-
-const initialState: State = {
-  endpoint: 'http://localhost:10106',
-};
-
-const AppContext = createContext<{
-  state: State;
-  dispatch: Dispatch<Action>;
-}>({
-  state: initialState,
-  dispatch: () => null,
-});
-
-interface AppProviderProps {
-  children: React.ReactNode;
-}
-
-const AppProvider = ({ children }: AppProviderProps) => {
-  const [state, dispatch] = useImmerReducer(
-    reducer,
-    initialState,
-  );
-  const [isLoading, setIsLoading] = useState(true);
-
-  useEffect(() => {
-    const localState = localStorage.getItem('state');
-    if (localState === null) {
-      return;
-    }
-    const parsedState: State = JSON.parse(localState);
-    dispatch({
-      type: 'SetState',
-      payload: {
-        endpoint: parsedState.endpoint,
-      },
-    });
-  }, []);
-
-  useEffect(() => {
-    if (!isLoading) localStorage.setItem('state', JSON.stringify(state));
-    setIsLoading(false);
-  }, [state]);
-
-  const context = useMemo(() => ({
-    state,
-    dispatch,
-  }), [state]);
-
-  return (
-    <AppContext.Provider
-      value={context}
-    >
-      {children}
-    </AppContext.Provider>
-  );
-};
-
-export { AppContext, AppProvider };
diff --git a/frontend/context/reducer.ts b/frontend/context/reducer.ts
deleted file mode 100644
index 6e4eed7..0000000
--- a/frontend/context/reducer.ts
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import { Action, State } from './type';
-
-const reducer = (
-  state: State,
-  action: Action,
-) => {
-  switch (action.type) {
-    case 'SetState':
-      state.endpoint = action.payload.endpoint;
-      break;
-
-    case 'SetEndPointAction':
-      state.endpoint = action.payload.endpoint;
-      break;
-
-    default:
-      break;
-  }
-};
-
-export default reducer;
diff --git a/frontend/context/type.ts b/frontend/context/type.ts
deleted file mode 100644
index 5deb2ba..0000000
--- a/frontend/context/type.ts
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-export interface State {
-  endpoint: string;
-}
-
-interface SetState {
-  type: 'SetState';
-  payload: {
-    endpoint: string;
-  };
-}
-
-interface SetEndPointAction {
-  type: 'SetEndPointAction';
-  payload: {
-    endpoint: string;
-  };
-}
-
-export type Action =
-  | SetState
-  | SetEndPointAction;
diff --git a/frontend/docker/Dockerfile b/frontend/docker/Dockerfile
deleted file mode 100644
index 9d27db7..0000000
--- a/frontend/docker/Dockerfile
+++ /dev/null
@@ -1,10 +0,0 @@
-FROM node:18.15 as builder
-WORKDIR /build
-COPY . .
-RUN npm install
-RUN npm run build
-RUN npm run export
-
-FROM nginx:stable-alpine
-COPY docker/default.conf /etc/nginx/conf.d/default.conf
-COPY --from=builder /build/out /usr/share/nginx/html
diff --git a/frontend/docker/default.conf b/frontend/docker/default.conf
deleted file mode 100644
index 50b4e8e..0000000
--- a/frontend/docker/default.conf
+++ /dev/null
@@ -1,13 +0,0 @@
-server {
-    listen       80;
-    listen  [::]:80;
-    server_name  localhost;
-    root   /usr/share/nginx/html;
-    location / {
-        try_files $uri $uri.html $uri/ =404;
-    }
-    error_page   500 502 503 504  /50x.html;
-    location = /50x.html {
-        root   /usr/share/nginx/html;
-    }
-}
\ No newline at end of file
diff --git a/frontend/next-env.d.ts b/frontend/next-env.d.ts
deleted file mode 100644
index 4f11a03..0000000
--- a/frontend/next-env.d.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-/// <reference types="next" />
-/// <reference types="next/image-types/global" />
-
-// NOTE: This file should not be edited
-// see https://nextjs.org/docs/basic-features/typescript for more information.
diff --git a/frontend/next.config.js b/frontend/next.config.js
deleted file mode 100644
index f18ab53..0000000
--- a/frontend/next.config.js
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-/** @type {import('next').NextConfig} */
-const nextConfig = {
-  reactStrictMode: true,
-  typescript: {
-    // ignore editorRef.current.getValue() error
-    ignoreBuildErrors: true,
-  },
-}
-
-module.exports = nextConfig
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
deleted file mode 100644
index 9a7a081..0000000
--- a/frontend/package-lock.json
+++ /dev/null
@@ -1,5975 +0,0 @@
-{
-  "name": "eventmesh-dashboard",
-  "version": "0.1.0",
-  "lockfileVersion": 3,
-  "requires": true,
-  "packages": {
-    "": {
-      "name": "eventmesh-dashboard",
-      "version": "0.1.0",
-      "dependencies": {
-        "@chakra-ui/icons": "^2.0.15",
-        "@chakra-ui/react": "^2.1.2",
-        "@emotion/react": "^11.9.0",
-        "@emotion/styled": "^11.8.1",
-        "@fontsource/inter": "^4.5.10",
-        "@monaco-editor/react": "^4.4.6",
-        "axios": "^0.27.2",
-        "cloudevents": "^6.0.2",
-        "framer-motion": "^6.3.6",
-        "immer": "^9.0.15",
-        "moment": "^2.29.4",
-        "next": "12.1.6",
-        "react": "18.1.0",
-        "react-dom": "18.1.0",
-        "react-icons": "^4.4.0",
-        "swr": "^1.3.0",
-        "use-immer": "^0.7.0"
-      },
-      "devDependencies": {
-        "@types/node": "17.0.38",
-        "@types/react": "18.0.10",
-        "@types/react-dom": "18.0.5",
-        "@typescript-eslint/eslint-plugin": "^5.4.0",
-        "@typescript-eslint/parser": "^5.4.0",
-        "eslint": "8.16.0",
-        "eslint-config-airbnb": "^19.0.1",
-        "eslint-config-airbnb-typescript": "^17.0.0",
-        "eslint-plugin-import": "^2.25.3",
-        "eslint-plugin-jsx-a11y": "^6.5.1",
-        "eslint-plugin-react": "^7.27.1",
-        "eslint-plugin-react-hooks": "^4.3.0",
-        "typescript": "4.7.2"
-      }
-    },
-    "node_modules/@aashutoshrathi/word-wrap": {
-      "version": "1.2.6",
-      "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",
-      "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/@babel/code-frame": {
-      "version": "7.23.5",
-      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz",
-      "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==",
-      "dependencies": {
-        "@babel/highlight": "^7.23.4",
-        "chalk": "^2.4.2"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/code-frame/node_modules/ansi-styles": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
-      "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
-      "dependencies": {
-        "color-convert": "^1.9.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/@babel/code-frame/node_modules/chalk": {
-      "version": "2.4.2",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
-      "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
-      "dependencies": {
-        "ansi-styles": "^3.2.1",
-        "escape-string-regexp": "^1.0.5",
-        "supports-color": "^5.3.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/@babel/code-frame/node_modules/color-convert": {
-      "version": "1.9.3",
-      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
-      "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
-      "dependencies": {
-        "color-name": "1.1.3"
-      }
-    },
-    "node_modules/@babel/code-frame/node_modules/color-name": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
-      "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
-    },
-    "node_modules/@babel/code-frame/node_modules/escape-string-regexp": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-      "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/@babel/code-frame/node_modules/has-flag": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
-      "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/@babel/code-frame/node_modules/supports-color": {
-      "version": "5.5.0",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
-      "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
-      "dependencies": {
-        "has-flag": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/@babel/helper-module-imports": {
-      "version": "7.22.15",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz",
-      "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==",
-      "dependencies": {
-        "@babel/types": "^7.22.15"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-string-parser": {
-      "version": "7.23.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz",
-      "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==",
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-validator-identifier": {
-      "version": "7.22.20",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
-      "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/highlight": {
-      "version": "7.23.4",
-      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz",
-      "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==",
-      "dependencies": {
-        "@babel/helper-validator-identifier": "^7.22.20",
-        "chalk": "^2.4.2",
-        "js-tokens": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/highlight/node_modules/ansi-styles": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
-      "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
-      "dependencies": {
-        "color-convert": "^1.9.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/@babel/highlight/node_modules/chalk": {
-      "version": "2.4.2",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
-      "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
-      "dependencies": {
-        "ansi-styles": "^3.2.1",
-        "escape-string-regexp": "^1.0.5",
-        "supports-color": "^5.3.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/@babel/highlight/node_modules/color-convert": {
-      "version": "1.9.3",
-      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
-      "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
-      "dependencies": {
-        "color-name": "1.1.3"
-      }
-    },
-    "node_modules/@babel/highlight/node_modules/color-name": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
-      "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
-    },
-    "node_modules/@babel/highlight/node_modules/escape-string-regexp": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-      "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/@babel/highlight/node_modules/has-flag": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
-      "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/@babel/highlight/node_modules/supports-color": {
-      "version": "5.5.0",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
-      "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
-      "dependencies": {
-        "has-flag": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/@babel/runtime": {
-      "version": "7.23.5",
-      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.5.tgz",
-      "integrity": "sha512-NdUTHcPe4C99WxPub+K9l9tK5/lV4UXIoaHSYgzco9BCyjKAAwzdBI+wWtYqHt7LJdbo74ZjRPJgzVweq1sz0w==",
-      "dependencies": {
-        "regenerator-runtime": "^0.14.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/types": {
-      "version": "7.23.5",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.5.tgz",
-      "integrity": "sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w==",
-      "dependencies": {
-        "@babel/helper-string-parser": "^7.23.4",
-        "@babel/helper-validator-identifier": "^7.22.20",
-        "to-fast-properties": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@chakra-ui/accordion": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/accordion/-/accordion-2.3.1.tgz",
-      "integrity": "sha512-FSXRm8iClFyU+gVaXisOSEw0/4Q+qZbFRiuhIAkVU6Boj0FxAMrlo9a8AV5TuF77rgaHytCdHk0Ng+cyUijrag==",
-      "dependencies": {
-        "@chakra-ui/descendant": "3.1.0",
-        "@chakra-ui/icon": "3.2.0",
-        "@chakra-ui/react-context": "2.1.0",
-        "@chakra-ui/react-use-controllable-state": "2.1.0",
-        "@chakra-ui/react-use-merge-refs": "2.1.0",
-        "@chakra-ui/shared-utils": "2.0.5",
-        "@chakra-ui/transition": "2.1.0"
-      },
-      "peerDependencies": {
-        "@chakra-ui/system": ">=2.0.0",
-        "framer-motion": ">=4.0.0",
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/alert": {
-      "version": "2.2.2",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/alert/-/alert-2.2.2.tgz",
-      "integrity": "sha512-jHg4LYMRNOJH830ViLuicjb3F+v6iriE/2G5T+Sd0Hna04nukNJ1MxUmBPE+vI22me2dIflfelu2v9wdB6Pojw==",
-      "dependencies": {
-        "@chakra-ui/icon": "3.2.0",
-        "@chakra-ui/react-context": "2.1.0",
-        "@chakra-ui/shared-utils": "2.0.5",
-        "@chakra-ui/spinner": "2.1.0"
-      },
-      "peerDependencies": {
-        "@chakra-ui/system": ">=2.0.0",
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/anatomy": {
-      "version": "2.2.2",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/anatomy/-/anatomy-2.2.2.tgz",
-      "integrity": "sha512-MV6D4VLRIHr4PkW4zMyqfrNS1mPlCTiCXwvYGtDFQYr+xHFfonhAuf9WjsSc0nyp2m0OdkSLnzmVKkZFLo25Tg=="
-    },
-    "node_modules/@chakra-ui/avatar": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/avatar/-/avatar-2.3.0.tgz",
-      "integrity": "sha512-8gKSyLfygnaotbJbDMHDiJoF38OHXUYVme4gGxZ1fLnQEdPVEaIWfH+NndIjOM0z8S+YEFnT9KyGMUtvPrBk3g==",
-      "dependencies": {
-        "@chakra-ui/image": "2.1.0",
-        "@chakra-ui/react-children-utils": "2.0.6",
-        "@chakra-ui/react-context": "2.1.0",
-        "@chakra-ui/shared-utils": "2.0.5"
-      },
-      "peerDependencies": {
-        "@chakra-ui/system": ">=2.0.0",
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/breadcrumb": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/breadcrumb/-/breadcrumb-2.2.0.tgz",
-      "integrity": "sha512-4cWCG24flYBxjruRi4RJREWTGF74L/KzI2CognAW/d/zWR0CjiScuJhf37Am3LFbCySP6WSoyBOtTIoTA4yLEA==",
-      "dependencies": {
-        "@chakra-ui/react-children-utils": "2.0.6",
-        "@chakra-ui/react-context": "2.1.0",
-        "@chakra-ui/shared-utils": "2.0.5"
-      },
-      "peerDependencies": {
-        "@chakra-ui/system": ">=2.0.0",
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/breakpoint-utils": {
-      "version": "2.0.8",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/breakpoint-utils/-/breakpoint-utils-2.0.8.tgz",
-      "integrity": "sha512-Pq32MlEX9fwb5j5xx8s18zJMARNHlQZH2VH1RZgfgRDpp7DcEgtRW5AInfN5CfqdHLO1dGxA7I3MqEuL5JnIsA==",
-      "dependencies": {
-        "@chakra-ui/shared-utils": "2.0.5"
-      }
-    },
-    "node_modules/@chakra-ui/button": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/button/-/button-2.1.0.tgz",
-      "integrity": "sha512-95CplwlRKmmUXkdEp/21VkEWgnwcx2TOBG6NfYlsuLBDHSLlo5FKIiE2oSi4zXc4TLcopGcWPNcm/NDaSC5pvA==",
-      "dependencies": {
-        "@chakra-ui/react-context": "2.1.0",
-        "@chakra-ui/react-use-merge-refs": "2.1.0",
-        "@chakra-ui/shared-utils": "2.0.5",
-        "@chakra-ui/spinner": "2.1.0"
-      },
-      "peerDependencies": {
-        "@chakra-ui/system": ">=2.0.0",
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/card": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/card/-/card-2.2.0.tgz",
-      "integrity": "sha512-xUB/k5MURj4CtPAhdSoXZidUbm8j3hci9vnc+eZJVDqhDOShNlD6QeniQNRPRys4lWAQLCbFcrwL29C8naDi6g==",
-      "dependencies": {
-        "@chakra-ui/shared-utils": "2.0.5"
-      },
-      "peerDependencies": {
-        "@chakra-ui/system": ">=2.0.0",
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/checkbox": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/checkbox/-/checkbox-2.3.2.tgz",
-      "integrity": "sha512-85g38JIXMEv6M+AcyIGLh7igNtfpAN6KGQFYxY9tBj0eWvWk4NKQxvqqyVta0bSAyIl1rixNIIezNpNWk2iO4g==",
-      "dependencies": {
-        "@chakra-ui/form-control": "2.2.0",
-        "@chakra-ui/react-context": "2.1.0",
-        "@chakra-ui/react-types": "2.0.7",
-        "@chakra-ui/react-use-callback-ref": "2.1.0",
-        "@chakra-ui/react-use-controllable-state": "2.1.0",
-        "@chakra-ui/react-use-merge-refs": "2.1.0",
-        "@chakra-ui/react-use-safe-layout-effect": "2.1.0",
-        "@chakra-ui/react-use-update-effect": "2.1.0",
-        "@chakra-ui/shared-utils": "2.0.5",
-        "@chakra-ui/visually-hidden": "2.2.0",
-        "@zag-js/focus-visible": "0.16.0"
-      },
-      "peerDependencies": {
-        "@chakra-ui/system": ">=2.0.0",
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/clickable": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/clickable/-/clickable-2.1.0.tgz",
-      "integrity": "sha512-flRA/ClPUGPYabu+/GLREZVZr9j2uyyazCAUHAdrTUEdDYCr31SVGhgh7dgKdtq23bOvAQJpIJjw/0Bs0WvbXw==",
-      "dependencies": {
-        "@chakra-ui/react-use-merge-refs": "2.1.0",
-        "@chakra-ui/shared-utils": "2.0.5"
-      },
-      "peerDependencies": {
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/close-button": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/close-button/-/close-button-2.1.1.tgz",
-      "integrity": "sha512-gnpENKOanKexswSVpVz7ojZEALl2x5qjLYNqSQGbxz+aP9sOXPfUS56ebyBrre7T7exuWGiFeRwnM0oVeGPaiw==",
-      "dependencies": {
-        "@chakra-ui/icon": "3.2.0"
-      },
-      "peerDependencies": {
-        "@chakra-ui/system": ">=2.0.0",
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/color-mode": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/color-mode/-/color-mode-2.2.0.tgz",
-      "integrity": "sha512-niTEA8PALtMWRI9wJ4LL0CSBDo8NBfLNp4GD6/0hstcm3IlbBHTVKxN6HwSaoNYfphDQLxCjT4yG+0BJA5tFpg==",
-      "dependencies": {
-        "@chakra-ui/react-use-safe-layout-effect": "2.1.0"
-      },
-      "peerDependencies": {
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/control-box": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/control-box/-/control-box-2.1.0.tgz",
-      "integrity": "sha512-gVrRDyXFdMd8E7rulL0SKeoljkLQiPITFnsyMO8EFHNZ+AHt5wK4LIguYVEq88APqAGZGfHFWXr79RYrNiE3Mg==",
-      "peerDependencies": {
-        "@chakra-ui/system": ">=2.0.0",
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/counter": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/counter/-/counter-2.1.0.tgz",
-      "integrity": "sha512-s6hZAEcWT5zzjNz2JIWUBzRubo9la/oof1W7EKZVVfPYHERnl5e16FmBC79Yfq8p09LQ+aqFKm/etYoJMMgghw==",
-      "dependencies": {
-        "@chakra-ui/number-utils": "2.0.7",
-        "@chakra-ui/react-use-callback-ref": "2.1.0",
-        "@chakra-ui/shared-utils": "2.0.5"
-      },
-      "peerDependencies": {
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/css-reset": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/css-reset/-/css-reset-2.3.0.tgz",
-      "integrity": "sha512-cQwwBy5O0jzvl0K7PLTLgp8ijqLPKyuEMiDXwYzl95seD3AoeuoCLyzZcJtVqaUZ573PiBdAbY/IlZcwDOItWg==",
-      "peerDependencies": {
-        "@emotion/react": ">=10.0.35",
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/descendant": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/descendant/-/descendant-3.1.0.tgz",
-      "integrity": "sha512-VxCIAir08g5w27klLyi7PVo8BxhW4tgU/lxQyujkmi4zx7hT9ZdrcQLAted/dAa+aSIZ14S1oV0Q9lGjsAdxUQ==",
-      "dependencies": {
-        "@chakra-ui/react-context": "2.1.0",
-        "@chakra-ui/react-use-merge-refs": "2.1.0"
-      },
-      "peerDependencies": {
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/dom-utils": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/dom-utils/-/dom-utils-2.1.0.tgz",
-      "integrity": "sha512-ZmF2qRa1QZ0CMLU8M1zCfmw29DmPNtfjR9iTo74U5FPr3i1aoAh7fbJ4qAlZ197Xw9eAW28tvzQuoVWeL5C7fQ=="
-    },
-    "node_modules/@chakra-ui/editable": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/editable/-/editable-3.1.0.tgz",
-      "integrity": "sha512-j2JLrUL9wgg4YA6jLlbU88370eCRyor7DZQD9lzpY95tSOXpTljeg3uF9eOmDnCs6fxp3zDWIfkgMm/ExhcGTg==",
-      "dependencies": {
-        "@chakra-ui/react-context": "2.1.0",
-        "@chakra-ui/react-types": "2.0.7",
-        "@chakra-ui/react-use-callback-ref": "2.1.0",
-        "@chakra-ui/react-use-controllable-state": "2.1.0",
-        "@chakra-ui/react-use-focus-on-pointer-down": "2.1.0",
-        "@chakra-ui/react-use-merge-refs": "2.1.0",
-        "@chakra-ui/react-use-safe-layout-effect": "2.1.0",
-        "@chakra-ui/react-use-update-effect": "2.1.0",
-        "@chakra-ui/shared-utils": "2.0.5"
-      },
-      "peerDependencies": {
-        "@chakra-ui/system": ">=2.0.0",
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/event-utils": {
-      "version": "2.0.8",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/event-utils/-/event-utils-2.0.8.tgz",
-      "integrity": "sha512-IGM/yGUHS+8TOQrZGpAKOJl/xGBrmRYJrmbHfUE7zrG3PpQyXvbLDP1M+RggkCFVgHlJi2wpYIf0QtQlU0XZfw=="
-    },
-    "node_modules/@chakra-ui/focus-lock": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/focus-lock/-/focus-lock-2.1.0.tgz",
-      "integrity": "sha512-EmGx4PhWGjm4dpjRqM4Aa+rCWBxP+Rq8Uc/nAVnD4YVqkEhBkrPTpui2lnjsuxqNaZ24fIAZ10cF1hlpemte/w==",
-      "dependencies": {
-        "@chakra-ui/dom-utils": "2.1.0",
-        "react-focus-lock": "^2.9.4"
-      },
-      "peerDependencies": {
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/form-control": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/form-control/-/form-control-2.2.0.tgz",
-      "integrity": "sha512-wehLC1t4fafCVJ2RvJQT2jyqsAwX7KymmiGqBu7nQoQz8ApTkGABWpo/QwDh3F/dBLrouHDoOvGmYTqft3Mirw==",
-      "dependencies": {
-        "@chakra-ui/icon": "3.2.0",
-        "@chakra-ui/react-context": "2.1.0",
-        "@chakra-ui/react-types": "2.0.7",
-        "@chakra-ui/react-use-merge-refs": "2.1.0",
-        "@chakra-ui/shared-utils": "2.0.5"
-      },
-      "peerDependencies": {
-        "@chakra-ui/system": ">=2.0.0",
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/hooks": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/hooks/-/hooks-2.2.1.tgz",
-      "integrity": "sha512-RQbTnzl6b1tBjbDPf9zGRo9rf/pQMholsOudTxjy4i9GfTfz6kgp5ValGjQm2z7ng6Z31N1cnjZ1AlSzQ//ZfQ==",
-      "dependencies": {
-        "@chakra-ui/react-utils": "2.0.12",
-        "@chakra-ui/utils": "2.0.15",
-        "compute-scroll-into-view": "3.0.3",
-        "copy-to-clipboard": "3.3.3"
-      },
-      "peerDependencies": {
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/icon": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/icon/-/icon-3.2.0.tgz",
-      "integrity": "sha512-xxjGLvlX2Ys4H0iHrI16t74rG9EBcpFvJ3Y3B7KMQTrnW34Kf7Da/UC8J67Gtx85mTHW020ml85SVPKORWNNKQ==",
-      "dependencies": {
-        "@chakra-ui/shared-utils": "2.0.5"
-      },
-      "peerDependencies": {
-        "@chakra-ui/system": ">=2.0.0",
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/icons": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/icons/-/icons-2.1.1.tgz",
-      "integrity": "sha512-3p30hdo4LlRZTT5CwoAJq3G9fHI0wDc0pBaMHj4SUn0yomO+RcDRlzhdXqdr5cVnzax44sqXJVnf3oQG0eI+4g==",
-      "dependencies": {
-        "@chakra-ui/icon": "3.2.0"
-      },
-      "peerDependencies": {
-        "@chakra-ui/system": ">=2.0.0",
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/image": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/image/-/image-2.1.0.tgz",
-      "integrity": "sha512-bskumBYKLiLMySIWDGcz0+D9Th0jPvmX6xnRMs4o92tT3Od/bW26lahmV2a2Op2ItXeCmRMY+XxJH5Gy1i46VA==",
-      "dependencies": {
-        "@chakra-ui/react-use-safe-layout-effect": "2.1.0",
-        "@chakra-ui/shared-utils": "2.0.5"
-      },
-      "peerDependencies": {
-        "@chakra-ui/system": ">=2.0.0",
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/input": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/input/-/input-2.1.2.tgz",
-      "integrity": "sha512-GiBbb3EqAA8Ph43yGa6Mc+kUPjh4Spmxp1Pkelr8qtudpc3p2PJOOebLpd90mcqw8UePPa+l6YhhPtp6o0irhw==",
-      "dependencies": {
-        "@chakra-ui/form-control": "2.2.0",
-        "@chakra-ui/object-utils": "2.1.0",
-        "@chakra-ui/react-children-utils": "2.0.6",
-        "@chakra-ui/react-context": "2.1.0",
-        "@chakra-ui/shared-utils": "2.0.5"
-      },
-      "peerDependencies": {
-        "@chakra-ui/system": ">=2.0.0",
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/layout": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/layout/-/layout-2.3.1.tgz",
-      "integrity": "sha512-nXuZ6WRbq0WdgnRgLw+QuxWAHuhDtVX8ElWqcTK+cSMFg/52eVP47czYBE5F35YhnoW2XBwfNoNgZ7+e8Z01Rg==",
-      "dependencies": {
-        "@chakra-ui/breakpoint-utils": "2.0.8",
-        "@chakra-ui/icon": "3.2.0",
-        "@chakra-ui/object-utils": "2.1.0",
-        "@chakra-ui/react-children-utils": "2.0.6",
-        "@chakra-ui/react-context": "2.1.0",
-        "@chakra-ui/shared-utils": "2.0.5"
-      },
-      "peerDependencies": {
-        "@chakra-ui/system": ">=2.0.0",
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/lazy-utils": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/lazy-utils/-/lazy-utils-2.0.5.tgz",
-      "integrity": "sha512-UULqw7FBvcckQk2n3iPO56TMJvDsNv0FKZI6PlUNJVaGsPbsYxK/8IQ60vZgaTVPtVcjY6BE+y6zg8u9HOqpyg=="
-    },
-    "node_modules/@chakra-ui/live-region": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/live-region/-/live-region-2.1.0.tgz",
-      "integrity": "sha512-ZOxFXwtaLIsXjqnszYYrVuswBhnIHHP+XIgK1vC6DePKtyK590Wg+0J0slDwThUAd4MSSIUa/nNX84x1GMphWw==",
-      "peerDependencies": {
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/media-query": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/media-query/-/media-query-3.3.0.tgz",
-      "integrity": "sha512-IsTGgFLoICVoPRp9ykOgqmdMotJG0CnPsKvGQeSFOB/dZfIujdVb14TYxDU4+MURXry1MhJ7LzZhv+Ml7cr8/g==",
-      "dependencies": {
-        "@chakra-ui/breakpoint-utils": "2.0.8",
-        "@chakra-ui/react-env": "3.1.0",
-        "@chakra-ui/shared-utils": "2.0.5"
-      },
-      "peerDependencies": {
-        "@chakra-ui/system": ">=2.0.0",
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/menu": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/menu/-/menu-2.2.1.tgz",
-      "integrity": "sha512-lJS7XEObzJxsOwWQh7yfG4H8FzFPRP5hVPN/CL+JzytEINCSBvsCDHrYPQGp7jzpCi8vnTqQQGQe0f8dwnXd2g==",
-      "dependencies": {
-        "@chakra-ui/clickable": "2.1.0",
-        "@chakra-ui/descendant": "3.1.0",
-        "@chakra-ui/lazy-utils": "2.0.5",
-        "@chakra-ui/popper": "3.1.0",
-        "@chakra-ui/react-children-utils": "2.0.6",
-        "@chakra-ui/react-context": "2.1.0",
-        "@chakra-ui/react-use-animation-state": "2.1.0",
-        "@chakra-ui/react-use-controllable-state": "2.1.0",
-        "@chakra-ui/react-use-disclosure": "2.1.0",
-        "@chakra-ui/react-use-focus-effect": "2.1.0",
-        "@chakra-ui/react-use-merge-refs": "2.1.0",
-        "@chakra-ui/react-use-outside-click": "2.2.0",
-        "@chakra-ui/react-use-update-effect": "2.1.0",
-        "@chakra-ui/shared-utils": "2.0.5",
-        "@chakra-ui/transition": "2.1.0"
-      },
-      "peerDependencies": {
-        "@chakra-ui/system": ">=2.0.0",
-        "framer-motion": ">=4.0.0",
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/modal": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/modal/-/modal-2.3.1.tgz",
-      "integrity": "sha512-TQv1ZaiJMZN+rR9DK0snx/OPwmtaGH1HbZtlYt4W4s6CzyK541fxLRTjIXfEzIGpvNW+b6VFuFjbcR78p4DEoQ==",
-      "dependencies": {
-        "@chakra-ui/close-button": "2.1.1",
-        "@chakra-ui/focus-lock": "2.1.0",
-        "@chakra-ui/portal": "2.1.0",
-        "@chakra-ui/react-context": "2.1.0",
-        "@chakra-ui/react-types": "2.0.7",
-        "@chakra-ui/react-use-merge-refs": "2.1.0",
-        "@chakra-ui/shared-utils": "2.0.5",
-        "@chakra-ui/transition": "2.1.0",
-        "aria-hidden": "^1.2.3",
-        "react-remove-scroll": "^2.5.6"
-      },
-      "peerDependencies": {
-        "@chakra-ui/system": ">=2.0.0",
-        "framer-motion": ">=4.0.0",
-        "react": ">=18",
-        "react-dom": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/number-input": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/number-input/-/number-input-2.1.2.tgz",
-      "integrity": "sha512-pfOdX02sqUN0qC2ysuvgVDiws7xZ20XDIlcNhva55Jgm095xjm8eVdIBfNm3SFbSUNxyXvLTW/YQanX74tKmuA==",
-      "dependencies": {
-        "@chakra-ui/counter": "2.1.0",
-        "@chakra-ui/form-control": "2.2.0",
-        "@chakra-ui/icon": "3.2.0",
-        "@chakra-ui/react-context": "2.1.0",
-        "@chakra-ui/react-types": "2.0.7",
-        "@chakra-ui/react-use-callback-ref": "2.1.0",
-        "@chakra-ui/react-use-event-listener": "2.1.0",
-        "@chakra-ui/react-use-interval": "2.1.0",
-        "@chakra-ui/react-use-merge-refs": "2.1.0",
-        "@chakra-ui/react-use-safe-layout-effect": "2.1.0",
-        "@chakra-ui/react-use-update-effect": "2.1.0",
-        "@chakra-ui/shared-utils": "2.0.5"
-      },
-      "peerDependencies": {
-        "@chakra-ui/system": ">=2.0.0",
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/number-utils": {
-      "version": "2.0.7",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/number-utils/-/number-utils-2.0.7.tgz",
-      "integrity": "sha512-yOGxBjXNvLTBvQyhMDqGU0Oj26s91mbAlqKHiuw737AXHt0aPllOthVUqQMeaYLwLCjGMg0jtI7JReRzyi94Dg=="
-    },
-    "node_modules/@chakra-ui/object-utils": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/object-utils/-/object-utils-2.1.0.tgz",
-      "integrity": "sha512-tgIZOgLHaoti5PYGPTwK3t/cqtcycW0owaiOXoZOcpwwX/vlVb+H1jFsQyWiiwQVPt9RkoSLtxzXamx+aHH+bQ=="
-    },
-    "node_modules/@chakra-ui/pin-input": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/pin-input/-/pin-input-2.1.0.tgz",
-      "integrity": "sha512-x4vBqLStDxJFMt+jdAHHS8jbh294O53CPQJoL4g228P513rHylV/uPscYUHrVJXRxsHfRztQO9k45jjTYaPRMw==",
-      "dependencies": {
-        "@chakra-ui/descendant": "3.1.0",
-        "@chakra-ui/react-children-utils": "2.0.6",
-        "@chakra-ui/react-context": "2.1.0",
-        "@chakra-ui/react-use-controllable-state": "2.1.0",
-        "@chakra-ui/react-use-merge-refs": "2.1.0",
-        "@chakra-ui/shared-utils": "2.0.5"
-      },
-      "peerDependencies": {
-        "@chakra-ui/system": ">=2.0.0",
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/popover": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/popover/-/popover-2.2.1.tgz",
-      "integrity": "sha512-K+2ai2dD0ljvJnlrzesCDT9mNzLifE3noGKZ3QwLqd/K34Ym1W/0aL1ERSynrcG78NKoXS54SdEzkhCZ4Gn/Zg==",
-      "dependencies": {
-        "@chakra-ui/close-button": "2.1.1",
-        "@chakra-ui/lazy-utils": "2.0.5",
-        "@chakra-ui/popper": "3.1.0",
-        "@chakra-ui/react-context": "2.1.0",
-        "@chakra-ui/react-types": "2.0.7",
-        "@chakra-ui/react-use-animation-state": "2.1.0",
-        "@chakra-ui/react-use-disclosure": "2.1.0",
-        "@chakra-ui/react-use-focus-effect": "2.1.0",
-        "@chakra-ui/react-use-focus-on-pointer-down": "2.1.0",
-        "@chakra-ui/react-use-merge-refs": "2.1.0",
-        "@chakra-ui/shared-utils": "2.0.5"
-      },
-      "peerDependencies": {
-        "@chakra-ui/system": ">=2.0.0",
-        "framer-motion": ">=4.0.0",
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/popper": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/popper/-/popper-3.1.0.tgz",
-      "integrity": "sha512-ciDdpdYbeFG7og6/6J8lkTFxsSvwTdMLFkpVylAF6VNC22jssiWfquj2eyD4rJnzkRFPvIWJq8hvbfhsm+AjSg==",
-      "dependencies": {
-        "@chakra-ui/react-types": "2.0.7",
-        "@chakra-ui/react-use-merge-refs": "2.1.0",
-        "@popperjs/core": "^2.9.3"
-      },
-      "peerDependencies": {
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/portal": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/portal/-/portal-2.1.0.tgz",
-      "integrity": "sha512-9q9KWf6SArEcIq1gGofNcFPSWEyl+MfJjEUg/un1SMlQjaROOh3zYr+6JAwvcORiX7tyHosnmWC3d3wI2aPSQg==",
-      "dependencies": {
-        "@chakra-ui/react-context": "2.1.0",
-        "@chakra-ui/react-use-safe-layout-effect": "2.1.0"
-      },
-      "peerDependencies": {
-        "react": ">=18",
-        "react-dom": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/progress": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/progress/-/progress-2.2.0.tgz",
-      "integrity": "sha512-qUXuKbuhN60EzDD9mHR7B67D7p/ZqNS2Aze4Pbl1qGGZfulPW0PY8Rof32qDtttDQBkzQIzFGE8d9QpAemToIQ==",
-      "dependencies": {
-        "@chakra-ui/react-context": "2.1.0"
-      },
-      "peerDependencies": {
-        "@chakra-ui/system": ">=2.0.0",
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/provider": {
-      "version": "2.4.2",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/provider/-/provider-2.4.2.tgz",
-      "integrity": "sha512-w0Tef5ZCJK1mlJorcSjItCSbyvVuqpvyWdxZiVQmE6fvSJR83wZof42ux0+sfWD+I7rHSfj+f9nzhNaEWClysw==",
-      "dependencies": {
-        "@chakra-ui/css-reset": "2.3.0",
-        "@chakra-ui/portal": "2.1.0",
-        "@chakra-ui/react-env": "3.1.0",
-        "@chakra-ui/system": "2.6.2",
-        "@chakra-ui/utils": "2.0.15"
-      },
-      "peerDependencies": {
-        "@emotion/react": "^11.0.0",
-        "@emotion/styled": "^11.0.0",
-        "react": ">=18",
-        "react-dom": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/radio": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/radio/-/radio-2.1.2.tgz",
-      "integrity": "sha512-n10M46wJrMGbonaghvSRnZ9ToTv/q76Szz284gv4QUWvyljQACcGrXIONUnQ3BIwbOfkRqSk7Xl/JgZtVfll+w==",
-      "dependencies": {
-        "@chakra-ui/form-control": "2.2.0",
-        "@chakra-ui/react-context": "2.1.0",
-        "@chakra-ui/react-types": "2.0.7",
-        "@chakra-ui/react-use-merge-refs": "2.1.0",
-        "@chakra-ui/shared-utils": "2.0.5",
-        "@zag-js/focus-visible": "0.16.0"
-      },
-      "peerDependencies": {
-        "@chakra-ui/system": ">=2.0.0",
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/react": {
-      "version": "2.8.2",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/react/-/react-2.8.2.tgz",
-      "integrity": "sha512-Hn0moyxxyCDKuR9ywYpqgX8dvjqwu9ArwpIb9wHNYjnODETjLwazgNIliCVBRcJvysGRiV51U2/JtJVrpeCjUQ==",
-      "dependencies": {
-        "@chakra-ui/accordion": "2.3.1",
-        "@chakra-ui/alert": "2.2.2",
-        "@chakra-ui/avatar": "2.3.0",
-        "@chakra-ui/breadcrumb": "2.2.0",
-        "@chakra-ui/button": "2.1.0",
-        "@chakra-ui/card": "2.2.0",
-        "@chakra-ui/checkbox": "2.3.2",
-        "@chakra-ui/close-button": "2.1.1",
-        "@chakra-ui/control-box": "2.1.0",
-        "@chakra-ui/counter": "2.1.0",
-        "@chakra-ui/css-reset": "2.3.0",
-        "@chakra-ui/editable": "3.1.0",
-        "@chakra-ui/focus-lock": "2.1.0",
-        "@chakra-ui/form-control": "2.2.0",
-        "@chakra-ui/hooks": "2.2.1",
-        "@chakra-ui/icon": "3.2.0",
-        "@chakra-ui/image": "2.1.0",
-        "@chakra-ui/input": "2.1.2",
-        "@chakra-ui/layout": "2.3.1",
-        "@chakra-ui/live-region": "2.1.0",
-        "@chakra-ui/media-query": "3.3.0",
-        "@chakra-ui/menu": "2.2.1",
-        "@chakra-ui/modal": "2.3.1",
-        "@chakra-ui/number-input": "2.1.2",
-        "@chakra-ui/pin-input": "2.1.0",
-        "@chakra-ui/popover": "2.2.1",
-        "@chakra-ui/popper": "3.1.0",
-        "@chakra-ui/portal": "2.1.0",
-        "@chakra-ui/progress": "2.2.0",
-        "@chakra-ui/provider": "2.4.2",
-        "@chakra-ui/radio": "2.1.2",
-        "@chakra-ui/react-env": "3.1.0",
-        "@chakra-ui/select": "2.1.2",
-        "@chakra-ui/skeleton": "2.1.0",
-        "@chakra-ui/skip-nav": "2.1.0",
-        "@chakra-ui/slider": "2.1.0",
-        "@chakra-ui/spinner": "2.1.0",
-        "@chakra-ui/stat": "2.1.1",
-        "@chakra-ui/stepper": "2.3.1",
-        "@chakra-ui/styled-system": "2.9.2",
-        "@chakra-ui/switch": "2.1.2",
-        "@chakra-ui/system": "2.6.2",
-        "@chakra-ui/table": "2.1.0",
-        "@chakra-ui/tabs": "3.0.0",
-        "@chakra-ui/tag": "3.1.1",
-        "@chakra-ui/textarea": "2.1.2",
-        "@chakra-ui/theme": "3.3.1",
-        "@chakra-ui/theme-utils": "2.0.21",
-        "@chakra-ui/toast": "7.0.2",
-        "@chakra-ui/tooltip": "2.3.1",
-        "@chakra-ui/transition": "2.1.0",
-        "@chakra-ui/utils": "2.0.15",
-        "@chakra-ui/visually-hidden": "2.2.0"
-      },
-      "peerDependencies": {
-        "@emotion/react": "^11.0.0",
-        "@emotion/styled": "^11.0.0",
-        "framer-motion": ">=4.0.0",
-        "react": ">=18",
-        "react-dom": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/react-children-utils": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/react-children-utils/-/react-children-utils-2.0.6.tgz",
-      "integrity": "sha512-QVR2RC7QsOsbWwEnq9YduhpqSFnZGvjjGREV8ygKi8ADhXh93C8azLECCUVgRJF2Wc+So1fgxmjLcbZfY2VmBA==",
-      "peerDependencies": {
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/react-context": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/react-context/-/react-context-2.1.0.tgz",
-      "integrity": "sha512-iahyStvzQ4AOwKwdPReLGfDesGG+vWJfEsn0X/NoGph/SkN+HXtv2sCfYFFR9k7bb+Kvc6YfpLlSuLvKMHi2+w==",
-      "peerDependencies": {
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/react-env": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/react-env/-/react-env-3.1.0.tgz",
-      "integrity": "sha512-Vr96GV2LNBth3+IKzr/rq1IcnkXv+MLmwjQH6C8BRtn3sNskgDFD5vLkVXcEhagzZMCh8FR3V/bzZPojBOyNhw==",
-      "dependencies": {
-        "@chakra-ui/react-use-safe-layout-effect": "2.1.0"
-      },
-      "peerDependencies": {
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/react-types": {
-      "version": "2.0.7",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/react-types/-/react-types-2.0.7.tgz",
-      "integrity": "sha512-12zv2qIZ8EHwiytggtGvo4iLT0APris7T0qaAWqzpUGS0cdUtR8W+V1BJ5Ocq+7tA6dzQ/7+w5hmXih61TuhWQ==",
-      "peerDependencies": {
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/react-use-animation-state": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-animation-state/-/react-use-animation-state-2.1.0.tgz",
-      "integrity": "sha512-CFZkQU3gmDBwhqy0vC1ryf90BVHxVN8cTLpSyCpdmExUEtSEInSCGMydj2fvn7QXsz/za8JNdO2xxgJwxpLMtg==",
-      "dependencies": {
-        "@chakra-ui/dom-utils": "2.1.0",
-        "@chakra-ui/react-use-event-listener": "2.1.0"
-      },
-      "peerDependencies": {
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/react-use-callback-ref": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-callback-ref/-/react-use-callback-ref-2.1.0.tgz",
-      "integrity": "sha512-efnJrBtGDa4YaxDzDE90EnKD3Vkh5a1t3w7PhnRQmsphLy3g2UieasoKTlT2Hn118TwDjIv5ZjHJW6HbzXA9wQ==",
-      "peerDependencies": {
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/react-use-controllable-state": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-controllable-state/-/react-use-controllable-state-2.1.0.tgz",
-      "integrity": "sha512-QR/8fKNokxZUs4PfxjXuwl0fj/d71WPrmLJvEpCTkHjnzu7LnYvzoe2wB867IdooQJL0G1zBxl0Dq+6W1P3jpg==",
-      "dependencies": {
-        "@chakra-ui/react-use-callback-ref": "2.1.0"
-      },
-      "peerDependencies": {
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/react-use-disclosure": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-disclosure/-/react-use-disclosure-2.1.0.tgz",
-      "integrity": "sha512-Ax4pmxA9LBGMyEZJhhUZobg9C0t3qFE4jVF1tGBsrLDcdBeLR9fwOogIPY9Hf0/wqSlAryAimICbr5hkpa5GSw==",
-      "dependencies": {
-        "@chakra-ui/react-use-callback-ref": "2.1.0"
-      },
-      "peerDependencies": {
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/react-use-event-listener": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-event-listener/-/react-use-event-listener-2.1.0.tgz",
-      "integrity": "sha512-U5greryDLS8ISP69DKDsYcsXRtAdnTQT+jjIlRYZ49K/XhUR/AqVZCK5BkR1spTDmO9H8SPhgeNKI70ODuDU/Q==",
-      "dependencies": {
-        "@chakra-ui/react-use-callback-ref": "2.1.0"
-      },
-      "peerDependencies": {
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/react-use-focus-effect": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-focus-effect/-/react-use-focus-effect-2.1.0.tgz",
-      "integrity": "sha512-xzVboNy7J64xveLcxTIJ3jv+lUJKDwRM7Szwn9tNzUIPD94O3qwjV7DDCUzN2490nSYDF4OBMt/wuDBtaR3kUQ==",
-      "dependencies": {
-        "@chakra-ui/dom-utils": "2.1.0",
-        "@chakra-ui/react-use-event-listener": "2.1.0",
-        "@chakra-ui/react-use-safe-layout-effect": "2.1.0",
-        "@chakra-ui/react-use-update-effect": "2.1.0"
-      },
-      "peerDependencies": {
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/react-use-focus-on-pointer-down": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-focus-on-pointer-down/-/react-use-focus-on-pointer-down-2.1.0.tgz",
-      "integrity": "sha512-2jzrUZ+aiCG/cfanrolsnSMDykCAbv9EK/4iUyZno6BYb3vziucmvgKuoXbMPAzWNtwUwtuMhkby8rc61Ue+Lg==",
-      "dependencies": {
-        "@chakra-ui/react-use-event-listener": "2.1.0"
-      },
-      "peerDependencies": {
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/react-use-interval": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-interval/-/react-use-interval-2.1.0.tgz",
-      "integrity": "sha512-8iWj+I/+A0J08pgEXP1J1flcvhLBHkk0ln7ZvGIyXiEyM6XagOTJpwNhiu+Bmk59t3HoV/VyvyJTa+44sEApuw==",
-      "dependencies": {
-        "@chakra-ui/react-use-callback-ref": "2.1.0"
-      },
-      "peerDependencies": {
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/react-use-latest-ref": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-latest-ref/-/react-use-latest-ref-2.1.0.tgz",
-      "integrity": "sha512-m0kxuIYqoYB0va9Z2aW4xP/5b7BzlDeWwyXCH6QpT2PpW3/281L3hLCm1G0eOUcdVlayqrQqOeD6Mglq+5/xoQ==",
-      "peerDependencies": {
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/react-use-merge-refs": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-merge-refs/-/react-use-merge-refs-2.1.0.tgz",
-      "integrity": "sha512-lERa6AWF1cjEtWSGjxWTaSMvneccnAVH4V4ozh8SYiN9fSPZLlSG3kNxfNzdFvMEhM7dnP60vynF7WjGdTgQbQ==",
-      "peerDependencies": {
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/react-use-outside-click": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-outside-click/-/react-use-outside-click-2.2.0.tgz",
-      "integrity": "sha512-PNX+s/JEaMneijbgAM4iFL+f3m1ga9+6QK0E5Yh4s8KZJQ/bLwZzdhMz8J/+mL+XEXQ5J0N8ivZN28B82N1kNw==",
-      "dependencies": {
-        "@chakra-ui/react-use-callback-ref": "2.1.0"
-      },
-      "peerDependencies": {
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/react-use-pan-event": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-pan-event/-/react-use-pan-event-2.1.0.tgz",
-      "integrity": "sha512-xmL2qOHiXqfcj0q7ZK5s9UjTh4Gz0/gL9jcWPA6GVf+A0Od5imEDa/Vz+533yQKWiNSm1QGrIj0eJAokc7O4fg==",
-      "dependencies": {
-        "@chakra-ui/event-utils": "2.0.8",
-        "@chakra-ui/react-use-latest-ref": "2.1.0",
-        "framesync": "6.1.2"
-      },
-      "peerDependencies": {
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/react-use-previous": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-previous/-/react-use-previous-2.1.0.tgz",
-      "integrity": "sha512-pjxGwue1hX8AFcmjZ2XfrQtIJgqbTF3Qs1Dy3d1krC77dEsiCUbQ9GzOBfDc8pfd60DrB5N2tg5JyHbypqh0Sg==",
-      "peerDependencies": {
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/react-use-safe-layout-effect": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-safe-layout-effect/-/react-use-safe-layout-effect-2.1.0.tgz",
-      "integrity": "sha512-Knbrrx/bcPwVS1TorFdzrK/zWA8yuU/eaXDkNj24IrKoRlQrSBFarcgAEzlCHtzuhufP3OULPkELTzz91b0tCw==",
-      "peerDependencies": {
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/react-use-size": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-size/-/react-use-size-2.1.0.tgz",
-      "integrity": "sha512-tbLqrQhbnqOjzTaMlYytp7wY8BW1JpL78iG7Ru1DlV4EWGiAmXFGvtnEt9HftU0NJ0aJyjgymkxfVGI55/1Z4A==",
-      "dependencies": {
-        "@zag-js/element-size": "0.10.5"
-      },
-      "peerDependencies": {
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/react-use-timeout": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-timeout/-/react-use-timeout-2.1.0.tgz",
-      "integrity": "sha512-cFN0sobKMM9hXUhyCofx3/Mjlzah6ADaEl/AXl5Y+GawB5rgedgAcu2ErAgarEkwvsKdP6c68CKjQ9dmTQlJxQ==",
-      "dependencies": {
-        "@chakra-ui/react-use-callback-ref": "2.1.0"
-      },
-      "peerDependencies": {
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/react-use-update-effect": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-update-effect/-/react-use-update-effect-2.1.0.tgz",
-      "integrity": "sha512-ND4Q23tETaR2Qd3zwCKYOOS1dfssojPLJMLvUtUbW5M9uW1ejYWgGUobeAiOVfSplownG8QYMmHTP86p/v0lbA==",
-      "peerDependencies": {
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/react-utils": {
-      "version": "2.0.12",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/react-utils/-/react-utils-2.0.12.tgz",
-      "integrity": "sha512-GbSfVb283+YA3kA8w8xWmzbjNWk14uhNpntnipHCftBibl0lxtQ9YqMFQLwuFOO0U2gYVocszqqDWX+XNKq9hw==",
-      "dependencies": {
-        "@chakra-ui/utils": "2.0.15"
-      },
-      "peerDependencies": {
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/select": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/select/-/select-2.1.2.tgz",
-      "integrity": "sha512-ZwCb7LqKCVLJhru3DXvKXpZ7Pbu1TDZ7N0PdQ0Zj1oyVLJyrpef1u9HR5u0amOpqcH++Ugt0f5JSmirjNlctjA==",
-      "dependencies": {
-        "@chakra-ui/form-control": "2.2.0",
-        "@chakra-ui/shared-utils": "2.0.5"
-      },
-      "peerDependencies": {
-        "@chakra-ui/system": ">=2.0.0",
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/shared-utils": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/shared-utils/-/shared-utils-2.0.5.tgz",
-      "integrity": "sha512-4/Wur0FqDov7Y0nCXl7HbHzCg4aq86h+SXdoUeuCMD3dSj7dpsVnStLYhng1vxvlbUnLpdF4oz5Myt3i/a7N3Q=="
-    },
-    "node_modules/@chakra-ui/skeleton": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/skeleton/-/skeleton-2.1.0.tgz",
-      "integrity": "sha512-JNRuMPpdZGd6zFVKjVQ0iusu3tXAdI29n4ZENYwAJEMf/fN0l12sVeirOxkJ7oEL0yOx2AgEYFSKdbcAgfUsAQ==",
-      "dependencies": {
-        "@chakra-ui/media-query": "3.3.0",
-        "@chakra-ui/react-use-previous": "2.1.0",
-        "@chakra-ui/shared-utils": "2.0.5"
-      },
-      "peerDependencies": {
-        "@chakra-ui/system": ">=2.0.0",
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/skip-nav": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/skip-nav/-/skip-nav-2.1.0.tgz",
-      "integrity": "sha512-Hk+FG+vadBSH0/7hwp9LJnLjkO0RPGnx7gBJWI4/SpoJf3e4tZlWYtwGj0toYY4aGKl93jVghuwGbDBEMoHDug==",
-      "peerDependencies": {
-        "@chakra-ui/system": ">=2.0.0",
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/slider": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/slider/-/slider-2.1.0.tgz",
-      "integrity": "sha512-lUOBcLMCnFZiA/s2NONXhELJh6sY5WtbRykPtclGfynqqOo47lwWJx+VP7xaeuhDOPcWSSecWc9Y1BfPOCz9cQ==",
-      "dependencies": {
-        "@chakra-ui/number-utils": "2.0.7",
-        "@chakra-ui/react-context": "2.1.0",
-        "@chakra-ui/react-types": "2.0.7",
-        "@chakra-ui/react-use-callback-ref": "2.1.0",
-        "@chakra-ui/react-use-controllable-state": "2.1.0",
-        "@chakra-ui/react-use-latest-ref": "2.1.0",
-        "@chakra-ui/react-use-merge-refs": "2.1.0",
-        "@chakra-ui/react-use-pan-event": "2.1.0",
-        "@chakra-ui/react-use-size": "2.1.0",
-        "@chakra-ui/react-use-update-effect": "2.1.0"
-      },
-      "peerDependencies": {
-        "@chakra-ui/system": ">=2.0.0",
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/spinner": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/spinner/-/spinner-2.1.0.tgz",
-      "integrity": "sha512-hczbnoXt+MMv/d3gE+hjQhmkzLiKuoTo42YhUG7Bs9OSv2lg1fZHW1fGNRFP3wTi6OIbD044U1P9HK+AOgFH3g==",
-      "dependencies": {
-        "@chakra-ui/shared-utils": "2.0.5"
-      },
-      "peerDependencies": {
-        "@chakra-ui/system": ">=2.0.0",
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/stat": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/stat/-/stat-2.1.1.tgz",
-      "integrity": "sha512-LDn0d/LXQNbAn2KaR3F1zivsZCewY4Jsy1qShmfBMKwn6rI8yVlbvu6SiA3OpHS0FhxbsZxQI6HefEoIgtqY6Q==",
-      "dependencies": {
-        "@chakra-ui/icon": "3.2.0",
-        "@chakra-ui/react-context": "2.1.0",
-        "@chakra-ui/shared-utils": "2.0.5"
-      },
-      "peerDependencies": {
-        "@chakra-ui/system": ">=2.0.0",
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/stepper": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/stepper/-/stepper-2.3.1.tgz",
-      "integrity": "sha512-ky77lZbW60zYkSXhYz7kbItUpAQfEdycT0Q4bkHLxfqbuiGMf8OmgZOQkOB9uM4v0zPwy2HXhe0vq4Dd0xa55Q==",
-      "dependencies": {
-        "@chakra-ui/icon": "3.2.0",
-        "@chakra-ui/react-context": "2.1.0",
-        "@chakra-ui/shared-utils": "2.0.5"
-      },
-      "peerDependencies": {
-        "@chakra-ui/system": ">=2.0.0",
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/styled-system": {
-      "version": "2.9.2",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/styled-system/-/styled-system-2.9.2.tgz",
-      "integrity": "sha512-To/Z92oHpIE+4nk11uVMWqo2GGRS86coeMmjxtpnErmWRdLcp1WVCVRAvn+ZwpLiNR+reWFr2FFqJRsREuZdAg==",
-      "dependencies": {
-        "@chakra-ui/shared-utils": "2.0.5",
-        "csstype": "^3.1.2",
-        "lodash.mergewith": "4.6.2"
-      }
-    },
-    "node_modules/@chakra-ui/switch": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/switch/-/switch-2.1.2.tgz",
-      "integrity": "sha512-pgmi/CC+E1v31FcnQhsSGjJnOE2OcND4cKPyTE+0F+bmGm48Q/b5UmKD9Y+CmZsrt/7V3h8KNczowupfuBfIHA==",
-      "dependencies": {
-        "@chakra-ui/checkbox": "2.3.2",
-        "@chakra-ui/shared-utils": "2.0.5"
-      },
-      "peerDependencies": {
-        "@chakra-ui/system": ">=2.0.0",
-        "framer-motion": ">=4.0.0",
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/system": {
-      "version": "2.6.2",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/system/-/system-2.6.2.tgz",
-      "integrity": "sha512-EGtpoEjLrUu4W1fHD+a62XR+hzC5YfsWm+6lO0Kybcga3yYEij9beegO0jZgug27V+Rf7vns95VPVP6mFd/DEQ==",
-      "dependencies": {
-        "@chakra-ui/color-mode": "2.2.0",
-        "@chakra-ui/object-utils": "2.1.0",
-        "@chakra-ui/react-utils": "2.0.12",
-        "@chakra-ui/styled-system": "2.9.2",
-        "@chakra-ui/theme-utils": "2.0.21",
-        "@chakra-ui/utils": "2.0.15",
-        "react-fast-compare": "3.2.2"
-      },
-      "peerDependencies": {
-        "@emotion/react": "^11.0.0",
-        "@emotion/styled": "^11.0.0",
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/table": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/table/-/table-2.1.0.tgz",
-      "integrity": "sha512-o5OrjoHCh5uCLdiUb0Oc0vq9rIAeHSIRScc2ExTC9Qg/uVZl2ygLrjToCaKfaaKl1oQexIeAcZDKvPG8tVkHyQ==",
-      "dependencies": {
-        "@chakra-ui/react-context": "2.1.0",
-        "@chakra-ui/shared-utils": "2.0.5"
-      },
-      "peerDependencies": {
-        "@chakra-ui/system": ">=2.0.0",
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/tabs": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/tabs/-/tabs-3.0.0.tgz",
-      "integrity": "sha512-6Mlclp8L9lqXmsGWF5q5gmemZXOiOYuh0SGT/7PgJVNPz3LXREXlXg2an4MBUD8W5oTkduCX+3KTMCwRrVrDYw==",
-      "dependencies": {
-        "@chakra-ui/clickable": "2.1.0",
-        "@chakra-ui/descendant": "3.1.0",
-        "@chakra-ui/lazy-utils": "2.0.5",
-        "@chakra-ui/react-children-utils": "2.0.6",
-        "@chakra-ui/react-context": "2.1.0",
-        "@chakra-ui/react-use-controllable-state": "2.1.0",
-        "@chakra-ui/react-use-merge-refs": "2.1.0",
-        "@chakra-ui/react-use-safe-layout-effect": "2.1.0",
-        "@chakra-ui/shared-utils": "2.0.5"
-      },
-      "peerDependencies": {
-        "@chakra-ui/system": ">=2.0.0",
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/tag": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/tag/-/tag-3.1.1.tgz",
-      "integrity": "sha512-Bdel79Dv86Hnge2PKOU+t8H28nm/7Y3cKd4Kfk9k3lOpUh4+nkSGe58dhRzht59lEqa4N9waCgQiBdkydjvBXQ==",
-      "dependencies": {
-        "@chakra-ui/icon": "3.2.0",
-        "@chakra-ui/react-context": "2.1.0"
-      },
-      "peerDependencies": {
-        "@chakra-ui/system": ">=2.0.0",
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/textarea": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/textarea/-/textarea-2.1.2.tgz",
-      "integrity": "sha512-ip7tvklVCZUb2fOHDb23qPy/Fr2mzDOGdkrpbNi50hDCiV4hFX02jdQJdi3ydHZUyVgZVBKPOJ+lT9i7sKA2wA==",
-      "dependencies": {
-        "@chakra-ui/form-control": "2.2.0",
-        "@chakra-ui/shared-utils": "2.0.5"
-      },
-      "peerDependencies": {
-        "@chakra-ui/system": ">=2.0.0",
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/theme": {
-      "version": "3.3.1",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/theme/-/theme-3.3.1.tgz",
-      "integrity": "sha512-Hft/VaT8GYnItGCBbgWd75ICrIrIFrR7lVOhV/dQnqtfGqsVDlrztbSErvMkoPKt0UgAkd9/o44jmZ6X4U2nZQ==",
-      "dependencies": {
-        "@chakra-ui/anatomy": "2.2.2",
-        "@chakra-ui/shared-utils": "2.0.5",
-        "@chakra-ui/theme-tools": "2.1.2"
-      },
-      "peerDependencies": {
-        "@chakra-ui/styled-system": ">=2.8.0"
-      }
-    },
-    "node_modules/@chakra-ui/theme-tools": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/theme-tools/-/theme-tools-2.1.2.tgz",
-      "integrity": "sha512-Qdj8ajF9kxY4gLrq7gA+Azp8CtFHGO9tWMN2wfF9aQNgG9AuMhPrUzMq9AMQ0MXiYcgNq/FD3eegB43nHVmXVA==",
-      "dependencies": {
-        "@chakra-ui/anatomy": "2.2.2",
-        "@chakra-ui/shared-utils": "2.0.5",
-        "color2k": "^2.0.2"
-      },
-      "peerDependencies": {
-        "@chakra-ui/styled-system": ">=2.0.0"
-      }
-    },
-    "node_modules/@chakra-ui/theme-utils": {
-      "version": "2.0.21",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/theme-utils/-/theme-utils-2.0.21.tgz",
-      "integrity": "sha512-FjH5LJbT794r0+VSCXB3lT4aubI24bLLRWB+CuRKHijRvsOg717bRdUN/N1fEmEpFnRVrbewttWh/OQs0EWpWw==",
-      "dependencies": {
-        "@chakra-ui/shared-utils": "2.0.5",
-        "@chakra-ui/styled-system": "2.9.2",
-        "@chakra-ui/theme": "3.3.1",
-        "lodash.mergewith": "4.6.2"
-      }
-    },
-    "node_modules/@chakra-ui/toast": {
-      "version": "7.0.2",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/toast/-/toast-7.0.2.tgz",
-      "integrity": "sha512-yvRP8jFKRs/YnkuE41BVTq9nB2v/KDRmje9u6dgDmE5+1bFt3bwjdf9gVbif4u5Ve7F7BGk5E093ARRVtvLvXA==",
-      "dependencies": {
-        "@chakra-ui/alert": "2.2.2",
-        "@chakra-ui/close-button": "2.1.1",
-        "@chakra-ui/portal": "2.1.0",
-        "@chakra-ui/react-context": "2.1.0",
-        "@chakra-ui/react-use-timeout": "2.1.0",
-        "@chakra-ui/react-use-update-effect": "2.1.0",
-        "@chakra-ui/shared-utils": "2.0.5",
-        "@chakra-ui/styled-system": "2.9.2",
-        "@chakra-ui/theme": "3.3.1"
-      },
-      "peerDependencies": {
-        "@chakra-ui/system": "2.6.2",
-        "framer-motion": ">=4.0.0",
-        "react": ">=18",
-        "react-dom": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/tooltip": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/tooltip/-/tooltip-2.3.1.tgz",
-      "integrity": "sha512-Rh39GBn/bL4kZpuEMPPRwYNnccRCL+w9OqamWHIB3Qboxs6h8cOyXfIdGxjo72lvhu1QI/a4KFqkM3St+WfC0A==",
-      "dependencies": {
-        "@chakra-ui/dom-utils": "2.1.0",
-        "@chakra-ui/popper": "3.1.0",
-        "@chakra-ui/portal": "2.1.0",
-        "@chakra-ui/react-types": "2.0.7",
-        "@chakra-ui/react-use-disclosure": "2.1.0",
-        "@chakra-ui/react-use-event-listener": "2.1.0",
-        "@chakra-ui/react-use-merge-refs": "2.1.0",
-        "@chakra-ui/shared-utils": "2.0.5"
-      },
-      "peerDependencies": {
-        "@chakra-ui/system": ">=2.0.0",
-        "framer-motion": ">=4.0.0",
-        "react": ">=18",
-        "react-dom": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/transition": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/transition/-/transition-2.1.0.tgz",
-      "integrity": "sha512-orkT6T/Dt+/+kVwJNy7zwJ+U2xAZ3EU7M3XCs45RBvUnZDr/u9vdmaM/3D/rOpmQJWgQBwKPJleUXrYWUagEDQ==",
-      "dependencies": {
-        "@chakra-ui/shared-utils": "2.0.5"
-      },
-      "peerDependencies": {
-        "framer-motion": ">=4.0.0",
-        "react": ">=18"
-      }
-    },
-    "node_modules/@chakra-ui/utils": {
-      "version": "2.0.15",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/utils/-/utils-2.0.15.tgz",
-      "integrity": "sha512-El4+jL0WSaYYs+rJbuYFDbjmfCcfGDmRY95GO4xwzit6YAPZBLcR65rOEwLps+XWluZTy1xdMrusg/hW0c1aAA==",
-      "dependencies": {
-        "@types/lodash.mergewith": "4.6.7",
-        "css-box-model": "1.2.1",
-        "framesync": "6.1.2",
-        "lodash.mergewith": "4.6.2"
-      }
-    },
-    "node_modules/@chakra-ui/visually-hidden": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/@chakra-ui/visually-hidden/-/visually-hidden-2.2.0.tgz",
-      "integrity": "sha512-KmKDg01SrQ7VbTD3+cPWf/UfpF5MSwm3v7MWi0n5t8HnnadT13MF0MJCDSXbBWnzLv1ZKJ6zlyAOeARWX+DpjQ==",
-      "peerDependencies": {
-        "@chakra-ui/system": ">=2.0.0",
-        "react": ">=18"
-      }
-    },
-    "node_modules/@emotion/babel-plugin": {
-      "version": "11.11.0",
-      "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz",
-      "integrity": "sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==",
-      "dependencies": {
-        "@babel/helper-module-imports": "^7.16.7",
-        "@babel/runtime": "^7.18.3",
-        "@emotion/hash": "^0.9.1",
-        "@emotion/memoize": "^0.8.1",
-        "@emotion/serialize": "^1.1.2",
-        "babel-plugin-macros": "^3.1.0",
-        "convert-source-map": "^1.5.0",
-        "escape-string-regexp": "^4.0.0",
-        "find-root": "^1.1.0",
-        "source-map": "^0.5.7",
-        "stylis": "4.2.0"
-      }
-    },
-    "node_modules/@emotion/cache": {
-      "version": "11.11.0",
-      "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz",
-      "integrity": "sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==",
-      "dependencies": {
-        "@emotion/memoize": "^0.8.1",
-        "@emotion/sheet": "^1.2.2",
-        "@emotion/utils": "^1.2.1",
-        "@emotion/weak-memoize": "^0.3.1",
-        "stylis": "4.2.0"
-      }
-    },
-    "node_modules/@emotion/hash": {
-      "version": "0.9.1",
-      "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz",
-      "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ=="
-    },
-    "node_modules/@emotion/is-prop-valid": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz",
-      "integrity": "sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==",
-      "dependencies": {
-        "@emotion/memoize": "^0.8.1"
-      }
-    },
-    "node_modules/@emotion/memoize": {
-      "version": "0.8.1",
-      "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz",
-      "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA=="
-    },
-    "node_modules/@emotion/react": {
-      "version": "11.11.1",
-      "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.1.tgz",
-      "integrity": "sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==",
-      "dependencies": {
-        "@babel/runtime": "^7.18.3",
-        "@emotion/babel-plugin": "^11.11.0",
-        "@emotion/cache": "^11.11.0",
-        "@emotion/serialize": "^1.1.2",
-        "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1",
-        "@emotion/utils": "^1.2.1",
-        "@emotion/weak-memoize": "^0.3.1",
-        "hoist-non-react-statics": "^3.3.1"
-      },
-      "peerDependencies": {
-        "react": ">=16.8.0"
-      },
-      "peerDependenciesMeta": {
-        "@types/react": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@emotion/serialize": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.2.tgz",
-      "integrity": "sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA==",
-      "dependencies": {
-        "@emotion/hash": "^0.9.1",
-        "@emotion/memoize": "^0.8.1",
-        "@emotion/unitless": "^0.8.1",
-        "@emotion/utils": "^1.2.1",
-        "csstype": "^3.0.2"
-      }
-    },
-    "node_modules/@emotion/sheet": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz",
-      "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA=="
-    },
-    "node_modules/@emotion/styled": {
-      "version": "11.11.0",
-      "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.11.0.tgz",
-      "integrity": "sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==",
-      "dependencies": {
-        "@babel/runtime": "^7.18.3",
-        "@emotion/babel-plugin": "^11.11.0",
-        "@emotion/is-prop-valid": "^1.2.1",
-        "@emotion/serialize": "^1.1.2",
-        "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1",
-        "@emotion/utils": "^1.2.1"
-      },
-      "peerDependencies": {
-        "@emotion/react": "^11.0.0-rc.0",
-        "react": ">=16.8.0"
-      },
-      "peerDependenciesMeta": {
-        "@types/react": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@emotion/unitless": {
-      "version": "0.8.1",
-      "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz",
-      "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ=="
-    },
-    "node_modules/@emotion/use-insertion-effect-with-fallbacks": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz",
-      "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==",
-      "peerDependencies": {
-        "react": ">=16.8.0"
-      }
-    },
-    "node_modules/@emotion/utils": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.1.tgz",
-      "integrity": "sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg=="
-    },
-    "node_modules/@emotion/weak-memoize": {
-      "version": "0.3.1",
-      "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz",
-      "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww=="
-    },
-    "node_modules/@eslint-community/eslint-utils": {
-      "version": "4.4.0",
-      "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
-      "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
-      "dev": true,
-      "dependencies": {
-        "eslint-visitor-keys": "^3.3.0"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "peerDependencies": {
-        "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
-      }
-    },
-    "node_modules/@eslint-community/regexpp": {
-      "version": "4.10.0",
-      "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz",
-      "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==",
-      "dev": true,
-      "engines": {
-        "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
-      }
-    },
-    "node_modules/@eslint/eslintrc": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz",
-      "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==",
-      "dev": true,
-      "dependencies": {
-        "ajv": "^6.12.4",
-        "debug": "^4.3.2",
-        "espree": "^9.4.0",
-        "globals": "^13.19.0",
-        "ignore": "^5.2.0",
-        "import-fresh": "^3.2.1",
-        "js-yaml": "^4.1.0",
-        "minimatch": "^3.1.2",
-        "strip-json-comments": "^3.1.1"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
-    "node_modules/@eslint/eslintrc/node_modules/ajv": {
-      "version": "6.12.6",
-      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
-      "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
-      "dev": true,
-      "dependencies": {
-        "fast-deep-equal": "^3.1.1",
-        "fast-json-stable-stringify": "^2.0.0",
-        "json-schema-traverse": "^0.4.1",
-        "uri-js": "^4.2.2"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/epoberezkin"
-      }
-    },
-    "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
-      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
-      "dev": true
-    },
-    "node_modules/@fontsource/inter": {
-      "version": "4.5.15",
-      "resolved": "https://registry.npmjs.org/@fontsource/inter/-/inter-4.5.15.tgz",
-      "integrity": "sha512-FzleM9AxZQK2nqsTDtBiY0PMEVWvnKnuu2i09+p6DHvrHsuucoV2j0tmw+kAT3L4hvsLdAIDv6MdGehsPIdT+Q=="
-    },
-    "node_modules/@humanwhocodes/config-array": {
-      "version": "0.9.5",
-      "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz",
-      "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==",
-      "dev": true,
-      "dependencies": {
-        "@humanwhocodes/object-schema": "^1.2.1",
-        "debug": "^4.1.1",
-        "minimatch": "^3.0.4"
-      },
-      "engines": {
-        "node": ">=10.10.0"
-      }
-    },
-    "node_modules/@humanwhocodes/object-schema": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
-      "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
-      "dev": true
-    },
-    "node_modules/@monaco-editor/loader": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/@monaco-editor/loader/-/loader-1.4.0.tgz",
-      "integrity": "sha512-00ioBig0x642hytVspPl7DbQyaSWRaolYie/UFNjoTdvoKPzo6xrXLhTk9ixgIKcLH5b5vDOjVNiGyY+uDCUlg==",
-      "dependencies": {
-        "state-local": "^1.0.6"
-      },
-      "peerDependencies": {
-        "monaco-editor": ">= 0.21.0 < 1"
-      }
-    },
-    "node_modules/@monaco-editor/react": {
-      "version": "4.6.0",
-      "resolved": "https://registry.npmjs.org/@monaco-editor/react/-/react-4.6.0.tgz",
-      "integrity": "sha512-RFkU9/i7cN2bsq/iTkurMWOEErmYcY6JiQI3Jn+WeR/FGISH8JbHERjpS9oRuSOPvDMJI0Z8nJeKkbOs9sBYQw==",
-      "dependencies": {
-        "@monaco-editor/loader": "^1.4.0"
-      },
-      "peerDependencies": {
-        "monaco-editor": ">= 0.25.0 < 1",
-        "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
-        "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
-      }
-    },
-    "node_modules/@motionone/animation": {
-      "version": "10.16.3",
-      "resolved": "https://registry.npmjs.org/@motionone/animation/-/animation-10.16.3.tgz",
-      "integrity": "sha512-QUGWpLbMFLhyqKlngjZhjtxM8IqiJQjLK0DF+XOF6od9nhSvlaeEpOY/UMCRVcZn/9Tr2rZO22EkuCIjYdI74g==",
-      "dependencies": {
-        "@motionone/easing": "^10.16.3",
-        "@motionone/types": "^10.16.3",
-        "@motionone/utils": "^10.16.3",
-        "tslib": "^2.3.1"
-      }
-    },
-    "node_modules/@motionone/dom": {
-      "version": "10.12.0",
-      "resolved": "https://registry.npmjs.org/@motionone/dom/-/dom-10.12.0.tgz",
-      "integrity": "sha512-UdPTtLMAktHiqV0atOczNYyDd/d8Cf5fFsd1tua03PqTwwCe/6lwhLSQ8a7TbnQ5SN0gm44N1slBfj+ORIhrqw==",
-      "dependencies": {
-        "@motionone/animation": "^10.12.0",
-        "@motionone/generators": "^10.12.0",
-        "@motionone/types": "^10.12.0",
-        "@motionone/utils": "^10.12.0",
-        "hey-listen": "^1.0.8",
-        "tslib": "^2.3.1"
-      }
-    },
-    "node_modules/@motionone/easing": {
-      "version": "10.16.3",
-      "resolved": "https://registry.npmjs.org/@motionone/easing/-/easing-10.16.3.tgz",
-      "integrity": "sha512-HWTMZbTmZojzwEuKT/xCdvoMPXjYSyQvuVM6jmM0yoGU6BWzsmYMeB4bn38UFf618fJCNtP9XeC/zxtKWfbr0w==",
-      "dependencies": {
-        "@motionone/utils": "^10.16.3",
-        "tslib": "^2.3.1"
-      }
-    },
-    "node_modules/@motionone/generators": {
-      "version": "10.16.4",
-      "resolved": "https://registry.npmjs.org/@motionone/generators/-/generators-10.16.4.tgz",
-      "integrity": "sha512-geFZ3w0Rm0ZXXpctWsSf3REGywmLLujEjxPYpBR0j+ymYwof0xbV6S5kGqqsDKgyWKVWpUInqQYvQfL6fRbXeg==",
-      "dependencies": {
-        "@motionone/types": "^10.16.3",
-        "@motionone/utils": "^10.16.3",
-        "tslib": "^2.3.1"
-      }
-    },
-    "node_modules/@motionone/types": {
-      "version": "10.16.3",
-      "resolved": "https://registry.npmjs.org/@motionone/types/-/types-10.16.3.tgz",
-      "integrity": "sha512-W4jkEGFifDq73DlaZs3HUfamV2t1wM35zN/zX7Q79LfZ2sc6C0R1baUHZmqc/K5F3vSw3PavgQ6HyHLd/MXcWg=="
-    },
-    "node_modules/@motionone/utils": {
-      "version": "10.16.3",
-      "resolved": "https://registry.npmjs.org/@motionone/utils/-/utils-10.16.3.tgz",
-      "integrity": "sha512-WNWDksJIxQkaI9p9Z9z0+K27xdqISGNFy1SsWVGaiedTHq0iaT6iZujby8fT/ZnZxj1EOaxJtSfUPCFNU5CRoA==",
-      "dependencies": {
-        "@motionone/types": "^10.16.3",
-        "hey-listen": "^1.0.8",
-        "tslib": "^2.3.1"
-      }
-    },
-    "node_modules/@next/env": {
-      "version": "12.1.6",
-      "resolved": "https://registry.npmjs.org/@next/env/-/env-12.1.6.tgz",
-      "integrity": "sha512-Te/OBDXFSodPU6jlXYPAXpmZr/AkG6DCATAxttQxqOWaq6eDFX25Db3dK0120GZrSZmv4QCe9KsZmJKDbWs4OA=="
-    },
-    "node_modules/@next/swc-android-arm-eabi": {
-      "version": "12.1.6",
-      "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.1.6.tgz",
-      "integrity": "sha512-BxBr3QAAAXWgk/K7EedvzxJr2dE014mghBSA9iOEAv0bMgF+MRq4PoASjuHi15M2zfowpcRG8XQhMFtxftCleQ==",
-      "cpu": [
-        "arm"
-      ],
-      "optional": true,
-      "os": [
-        "android"
-      ],
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/@next/swc-android-arm64": {
-      "version": "12.1.6",
-      "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.1.6.tgz",
-      "integrity": "sha512-EboEk3ROYY7U6WA2RrMt/cXXMokUTXXfnxe2+CU+DOahvbrO8QSWhlBl9I9ZbFzJx28AGB9Yo3oQHCvph/4Lew==",
-      "cpu": [
-        "arm64"
-      ],
-      "optional": true,
-      "os": [
-        "android"
-      ],
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/@next/swc-darwin-arm64": {
-      "version": "12.1.6",
-      "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.1.6.tgz",
-      "integrity": "sha512-P0EXU12BMSdNj1F7vdkP/VrYDuCNwBExtRPDYawgSUakzi6qP0iKJpya2BuLvNzXx+XPU49GFuDC5X+SvY0mOw==",
-      "cpu": [
-        "arm64"
-      ],
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/@next/swc-darwin-x64": {
-      "version": "12.1.6",
-      "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.1.6.tgz",
-      "integrity": "sha512-9FptMnbgHJK3dRDzfTpexs9S2hGpzOQxSQbe8omz6Pcl7rnEp9x4uSEKY51ho85JCjL4d0tDLBcXEJZKKLzxNg==",
-      "cpu": [
-        "x64"
-      ],
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/@next/swc-linux-arm-gnueabihf": {
-      "version": "12.1.6",
-      "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.1.6.tgz",
-      "integrity": "sha512-PvfEa1RR55dsik/IDkCKSFkk6ODNGJqPY3ysVUZqmnWMDSuqFtf7BPWHFa/53znpvVB5XaJ5Z1/6aR5CTIqxPw==",
-      "cpu": [
-        "arm"
-      ],
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/@next/swc-linux-arm64-gnu": {
-      "version": "12.1.6",
-      "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.1.6.tgz",
-      "integrity": "sha512-53QOvX1jBbC2ctnmWHyRhMajGq7QZfl974WYlwclXarVV418X7ed7o/EzGY+YVAEKzIVaAB9JFFWGXn8WWo0gQ==",
-      "cpu": [
-        "arm64"
-      ],
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/@next/swc-linux-arm64-musl": {
-      "version": "12.1.6",
-      "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.1.6.tgz",
-      "integrity": "sha512-CMWAkYqfGdQCS+uuMA1A2UhOfcUYeoqnTW7msLr2RyYAys15pD960hlDfq7QAi8BCAKk0sQ2rjsl0iqMyziohQ==",
-      "cpu": [
-        "arm64"
-      ],
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/@next/swc-linux-x64-gnu": {
-      "version": "12.1.6",
-      "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.1.6.tgz",
-      "integrity": "sha512-AC7jE4Fxpn0s3ujngClIDTiEM/CQiB2N2vkcyWWn6734AmGT03Duq6RYtPMymFobDdAtZGFZd5nR95WjPzbZAQ==",
-      "cpu": [
-        "x64"
-      ],
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/@next/swc-linux-x64-musl": {
-      "version": "12.1.6",
-      "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.1.6.tgz",
-      "integrity": "sha512-c9Vjmi0EVk0Kou2qbrynskVarnFwfYIi+wKufR9Ad7/IKKuP6aEhOdZiIIdKsYWRtK2IWRF3h3YmdnEa2WLUag==",
-      "cpu": [
-        "x64"
-      ],
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/@next/swc-win32-arm64-msvc": {
-      "version": "12.1.6",
-      "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.1.6.tgz",
-      "integrity": "sha512-3UTOL/5XZSKFelM7qN0it35o3Cegm6LsyuERR3/OoqEExyj3aCk7F025b54/707HTMAnjlvQK3DzLhPu/xxO4g==",
-      "cpu": [
-        "arm64"
-      ],
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/@next/swc-win32-ia32-msvc": {
-      "version": "12.1.6",
-      "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.1.6.tgz",
-      "integrity": "sha512-8ZWoj6nCq6fI1yCzKq6oK0jE6Mxlz4MrEsRyu0TwDztWQWe7rh4XXGLAa2YVPatYcHhMcUL+fQQbqd1MsgaSDA==",
-      "cpu": [
-        "ia32"
-      ],
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/@next/swc-win32-x64-msvc": {
-      "version": "12.1.6",
-      "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.1.6.tgz",
-      "integrity": "sha512-4ZEwiRuZEicXhXqmhw3+de8Z4EpOLQj/gp+D9fFWo6ii6W1kBkNNvvEx4A90ugppu+74pT1lIJnOuz3A9oQeJA==",
-      "cpu": [
-        "x64"
-      ],
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/@nodelib/fs.scandir": {
-      "version": "2.1.5",
-      "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
-      "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
-      "dev": true,
-      "dependencies": {
-        "@nodelib/fs.stat": "2.0.5",
-        "run-parallel": "^1.1.9"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/@nodelib/fs.stat": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
-      "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
-      "dev": true,
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/@nodelib/fs.walk": {
-      "version": "1.2.8",
-      "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
-      "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
-      "dev": true,
-      "dependencies": {
-        "@nodelib/fs.scandir": "2.1.5",
-        "fastq": "^1.6.0"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/@popperjs/core": {
-      "version": "2.11.8",
-      "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz",
-      "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==",
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/popperjs"
-      }
-    },
-    "node_modules/@types/json-schema": {
-      "version": "7.0.15",
-      "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
-      "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
-      "dev": true
-    },
-    "node_modules/@types/json5": {
-      "version": "0.0.29",
-      "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
-      "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
-      "dev": true
-    },
-    "node_modules/@types/lodash": {
-      "version": "4.14.202",
-      "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.202.tgz",
-      "integrity": "sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ=="
-    },
-    "node_modules/@types/lodash.mergewith": {
-      "version": "4.6.7",
-      "resolved": "https://registry.npmjs.org/@types/lodash.mergewith/-/lodash.mergewith-4.6.7.tgz",
-      "integrity": "sha512-3m+lkO5CLRRYU0fhGRp7zbsGi6+BZj0uTVSwvcKU+nSlhjA9/QRNfuSGnD2mX6hQA7ZbmcCkzk5h4ZYGOtk14A==",
-      "dependencies": {
-        "@types/lodash": "*"
-      }
-    },
-    "node_modules/@types/node": {
-      "version": "17.0.38",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.38.tgz",
-      "integrity": "sha512-5jY9RhV7c0Z4Jy09G+NIDTsCZ5G0L5n+Z+p+Y7t5VJHM30bgwzSjVtlcBxqAj+6L/swIlvtOSzr8rBk/aNyV2g==",
-      "dev": true
-    },
-    "node_modules/@types/parse-json": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz",
-      "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw=="
-    },
-    "node_modules/@types/prop-types": {
-      "version": "15.7.11",
-      "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz",
-      "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==",
-      "devOptional": true
-    },
-    "node_modules/@types/react": {
-      "version": "18.0.10",
-      "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.10.tgz",
-      "integrity": "sha512-dIugadZuIPrRzvIEevIu7A1smqOAjkSMv8qOfwPt9Ve6i6JT/FQcCHyk2qIAxwsQNKZt5/oGR0T4z9h2dXRAkg==",
-      "devOptional": true,
-      "dependencies": {
-        "@types/prop-types": "*",
-        "@types/scheduler": "*",
-        "csstype": "^3.0.2"
-      }
-    },
-    "node_modules/@types/react-dom": {
-      "version": "18.0.5",
-      "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.5.tgz",
-      "integrity": "sha512-OWPWTUrY/NIrjsAPkAk1wW9LZeIjSvkXRhclsFO8CZcZGCOg2G0YZy4ft+rOyYxy8B7ui5iZzi9OkDebZ7/QSA==",
-      "dev": true,
-      "dependencies": {
-        "@types/react": "*"
-      }
-    },
-    "node_modules/@types/scheduler": {
-      "version": "0.16.8",
-      "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz",
-      "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==",
-      "devOptional": true
-    },
-    "node_modules/@types/semver": {
-      "version": "7.5.6",
-      "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz",
-      "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==",
-      "dev": true
-    },
-    "node_modules/@typescript-eslint/eslint-plugin": {
-      "version": "5.62.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz",
-      "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==",
-      "dev": true,
-      "dependencies": {
-        "@eslint-community/regexpp": "^4.4.0",
-        "@typescript-eslint/scope-manager": "5.62.0",
-        "@typescript-eslint/type-utils": "5.62.0",
-        "@typescript-eslint/utils": "5.62.0",
-        "debug": "^4.3.4",
-        "graphemer": "^1.4.0",
-        "ignore": "^5.2.0",
-        "natural-compare-lite": "^1.4.0",
-        "semver": "^7.3.7",
-        "tsutils": "^3.21.0"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependencies": {
-        "@typescript-eslint/parser": "^5.0.0",
-        "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
-      },
-      "peerDependenciesMeta": {
-        "typescript": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@typescript-eslint/parser": {
-      "version": "5.62.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz",
-      "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==",
-      "dev": true,
-      "dependencies": {
-        "@typescript-eslint/scope-manager": "5.62.0",
-        "@typescript-eslint/types": "5.62.0",
-        "@typescript-eslint/typescript-estree": "5.62.0",
-        "debug": "^4.3.4"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependencies": {
-        "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
-      },
-      "peerDependenciesMeta": {
-        "typescript": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@typescript-eslint/scope-manager": {
-      "version": "5.62.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz",
-      "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==",
-      "dev": true,
-      "dependencies": {
-        "@typescript-eslint/types": "5.62.0",
-        "@typescript-eslint/visitor-keys": "5.62.0"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/type-utils": {
-      "version": "5.62.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz",
-      "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==",
-      "dev": true,
-      "dependencies": {
-        "@typescript-eslint/typescript-estree": "5.62.0",
-        "@typescript-eslint/utils": "5.62.0",
-        "debug": "^4.3.4",
-        "tsutils": "^3.21.0"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependencies": {
-        "eslint": "*"
-      },
-      "peerDependenciesMeta": {
-        "typescript": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@typescript-eslint/types": {
-      "version": "5.62.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz",
-      "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==",
-      "dev": true,
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/typescript-estree": {
-      "version": "5.62.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz",
-      "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==",
-      "dev": true,
-      "dependencies": {
-        "@typescript-eslint/types": "5.62.0",
-        "@typescript-eslint/visitor-keys": "5.62.0",
-        "debug": "^4.3.4",
-        "globby": "^11.1.0",
-        "is-glob": "^4.0.3",
-        "semver": "^7.3.7",
-        "tsutils": "^3.21.0"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependenciesMeta": {
-        "typescript": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@typescript-eslint/utils": {
-      "version": "5.62.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz",
-      "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==",
-      "dev": true,
-      "dependencies": {
-        "@eslint-community/eslint-utils": "^4.2.0",
-        "@types/json-schema": "^7.0.9",
-        "@types/semver": "^7.3.12",
-        "@typescript-eslint/scope-manager": "5.62.0",
-        "@typescript-eslint/types": "5.62.0",
-        "@typescript-eslint/typescript-estree": "5.62.0",
-        "eslint-scope": "^5.1.1",
-        "semver": "^7.3.7"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependencies": {
-        "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
-      }
-    },
-    "node_modules/@typescript-eslint/visitor-keys": {
-      "version": "5.62.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz",
-      "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==",
-      "dev": true,
-      "dependencies": {
-        "@typescript-eslint/types": "5.62.0",
-        "eslint-visitor-keys": "^3.3.0"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@zag-js/dom-query": {
-      "version": "0.16.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-0.16.0.tgz",
-      "integrity": "sha512-Oqhd6+biWyKnhKwFFuZrrf6lxBz2tX2pRQe6grUnYwO6HJ8BcbqZomy2lpOdr+3itlaUqx+Ywj5E5ZZDr/LBfQ=="
-    },
-    "node_modules/@zag-js/element-size": {
-      "version": "0.10.5",
-      "resolved": "https://registry.npmjs.org/@zag-js/element-size/-/element-size-0.10.5.tgz",
-      "integrity": "sha512-uQre5IidULANvVkNOBQ1tfgwTQcGl4hliPSe69Fct1VfYb2Fd0jdAcGzqQgPhfrXFpR62MxLPB7erxJ/ngtL8w=="
-    },
-    "node_modules/@zag-js/focus-visible": {
-      "version": "0.16.0",
-      "resolved": "https://registry.npmjs.org/@zag-js/focus-visible/-/focus-visible-0.16.0.tgz",
-      "integrity": "sha512-a7U/HSopvQbrDU4GLerpqiMcHKEkQkNPeDZJWz38cw/6Upunh41GjHetq5TB84hxyCaDzJ6q2nEdNoBQfC0FKA==",
-      "dependencies": {
-        "@zag-js/dom-query": "0.16.0"
-      }
-    },
-    "node_modules/acorn": {
-      "version": "8.11.2",
-      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz",
-      "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==",
-      "dev": true,
-      "bin": {
-        "acorn": "bin/acorn"
-      },
-      "engines": {
-        "node": ">=0.4.0"
-      }
-    },
-    "node_modules/acorn-jsx": {
-      "version": "5.3.2",
-      "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
-      "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
-      "dev": true,
-      "peerDependencies": {
-        "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
-      }
-    },
-    "node_modules/ajv": {
-      "version": "8.12.0",
-      "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
-      "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
-      "dependencies": {
-        "fast-deep-equal": "^3.1.1",
-        "json-schema-traverse": "^1.0.0",
-        "require-from-string": "^2.0.2",
-        "uri-js": "^4.2.2"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/epoberezkin"
-      }
-    },
-    "node_modules/ajv-formats": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
-      "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
-      "dependencies": {
-        "ajv": "^8.0.0"
-      },
-      "peerDependencies": {
-        "ajv": "^8.0.0"
-      },
-      "peerDependenciesMeta": {
-        "ajv": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/ansi-regex": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
-      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/ansi-styles": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-      "dev": true,
-      "dependencies": {
-        "color-convert": "^2.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-      }
-    },
-    "node_modules/argparse": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
-      "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
-      "dev": true
-    },
-    "node_modules/aria-hidden": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.3.tgz",
-      "integrity": "sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ==",
-      "dependencies": {
-        "tslib": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/aria-query": {
-      "version": "5.3.0",
-      "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz",
-      "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==",
-      "dev": true,
-      "dependencies": {
-        "dequal": "^2.0.3"
-      }
-    },
-    "node_modules/array-buffer-byte-length": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz",
-      "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "is-array-buffer": "^3.0.1"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/array-includes": {
-      "version": "3.1.7",
-      "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz",
-      "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.2.0",
-        "es-abstract": "^1.22.1",
-        "get-intrinsic": "^1.2.1",
-        "is-string": "^1.0.7"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/array-union": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
-      "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/array.prototype.findlastindex": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz",
-      "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.2.0",
-        "es-abstract": "^1.22.1",
-        "es-shim-unscopables": "^1.0.0",
-        "get-intrinsic": "^1.2.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/array.prototype.flat": {
-      "version": "1.3.2",
-      "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz",
-      "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.2.0",
-        "es-abstract": "^1.22.1",
-        "es-shim-unscopables": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/array.prototype.flatmap": {
-      "version": "1.3.2",
-      "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz",
-      "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.2.0",
-        "es-abstract": "^1.22.1",
-        "es-shim-unscopables": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/array.prototype.tosorted": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz",
-      "integrity": "sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.2.0",
-        "es-abstract": "^1.22.1",
-        "es-shim-unscopables": "^1.0.0",
-        "get-intrinsic": "^1.2.1"
-      }
-    },
-    "node_modules/arraybuffer.prototype.slice": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz",
-      "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==",
-      "dev": true,
-      "dependencies": {
-        "array-buffer-byte-length": "^1.0.0",
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.2.0",
-        "es-abstract": "^1.22.1",
-        "get-intrinsic": "^1.2.1",
-        "is-array-buffer": "^3.0.2",
-        "is-shared-array-buffer": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/ast-types-flow": {
-      "version": "0.0.8",
-      "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz",
-      "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==",
-      "dev": true
-    },
-    "node_modules/asynciterator.prototype": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz",
-      "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==",
-      "dev": true,
-      "dependencies": {
-        "has-symbols": "^1.0.3"
-      }
-    },
-    "node_modules/asynckit": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
-      "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
-    },
-    "node_modules/available-typed-arrays": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz",
-      "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==",
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/axe-core": {
-      "version": "4.7.0",
-      "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz",
-      "integrity": "sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/axios": {
-      "version": "0.27.2",
-      "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz",
-      "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==",
-      "dependencies": {
-        "follow-redirects": "^1.14.9",
-        "form-data": "^4.0.0"
-      }
-    },
-    "node_modules/axobject-query": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz",
-      "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==",
-      "dev": true,
-      "dependencies": {
-        "dequal": "^2.0.3"
-      }
-    },
-    "node_modules/babel-plugin-macros": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz",
-      "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==",
-      "dependencies": {
-        "@babel/runtime": "^7.12.5",
-        "cosmiconfig": "^7.0.0",
-        "resolve": "^1.19.0"
-      },
-      "engines": {
-        "node": ">=10",
-        "npm": ">=6"
-      }
-    },
-    "node_modules/balanced-match": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
-      "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
-      "dev": true
-    },
-    "node_modules/brace-expansion": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-      "dev": true,
-      "dependencies": {
-        "balanced-match": "^1.0.0",
-        "concat-map": "0.0.1"
-      }
-    },
-    "node_modules/braces": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
-      "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
-      "dev": true,
-      "dependencies": {
-        "fill-range": "^7.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/call-bind": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz",
-      "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==",
-      "dependencies": {
-        "function-bind": "^1.1.2",
-        "get-intrinsic": "^1.2.1",
-        "set-function-length": "^1.1.1"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/callsites": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
-      "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/caniuse-lite": {
-      "version": "1.0.30001565",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001565.tgz",
-      "integrity": "sha512-xrE//a3O7TP0vaJ8ikzkD2c2NgcVUvsEe2IvFTntV4Yd1Z9FVzh+gW+enX96L0psrbaFMcVcH2l90xNuGDWc8w==",
-      "funding": [
-        {
-          "type": "opencollective",
-          "url": "https://opencollective.com/browserslist"
-        },
-        {
-          "type": "tidelift",
-          "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
-        },
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/ai"
-        }
-      ]
-    },
-    "node_modules/chalk": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^4.1.0",
-        "supports-color": "^7.1.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/chalk?sponsor=1"
-      }
-    },
-    "node_modules/cloudevents": {
-      "version": "6.0.3",
-      "resolved": "https://registry.npmjs.org/cloudevents/-/cloudevents-6.0.3.tgz",
-      "integrity": "sha512-ADEHAv2KShH/cDIy2GP+npFz3R6Fu/UCsUO/j4kYA9VqN4yhGdF+Zg6wmjeq6qlUvlaKdrVBwgZuH/w57IsyGQ==",
-      "dependencies": {
-        "ajv": "^8.11.0",
-        "ajv-formats": "^2.1.1",
-        "util": "^0.12.4",
-        "uuid": "^8.3.2"
-      }
-    },
-    "node_modules/color-convert": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-      "dev": true,
-      "dependencies": {
-        "color-name": "~1.1.4"
-      },
-      "engines": {
-        "node": ">=7.0.0"
-      }
-    },
-    "node_modules/color-name": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
-      "dev": true
-    },
-    "node_modules/color2k": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/color2k/-/color2k-2.0.2.tgz",
-      "integrity": "sha512-kJhwH5nAwb34tmyuqq/lgjEKzlFXn1U99NlnB6Ws4qVaERcRUYeYP1cBw6BJ4vxaWStAUEef4WMr7WjOCnBt8w=="
-    },
-    "node_modules/combined-stream": {
-      "version": "1.0.8",
-      "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
-      "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
-      "dependencies": {
-        "delayed-stream": "~1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/compute-scroll-into-view": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-3.0.3.tgz",
-      "integrity": "sha512-nadqwNxghAGTamwIqQSG433W6OADZx2vCo3UXHNrzTRHK/htu+7+L0zhjEoaeaQVNAi3YgqWDv8+tzf0hRfR+A=="
-    },
-    "node_modules/concat-map": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
-      "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
-      "dev": true
-    },
-    "node_modules/confusing-browser-globals": {
-      "version": "1.0.11",
-      "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz",
-      "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==",
-      "dev": true
-    },
-    "node_modules/convert-source-map": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
-      "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="
-    },
-    "node_modules/copy-to-clipboard": {
-      "version": "3.3.3",
-      "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz",
-      "integrity": "sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==",
-      "dependencies": {
-        "toggle-selection": "^1.0.6"
-      }
-    },
-    "node_modules/cosmiconfig": {
-      "version": "7.1.0",
-      "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
-      "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==",
-      "dependencies": {
-        "@types/parse-json": "^4.0.0",
-        "import-fresh": "^3.2.1",
-        "parse-json": "^5.0.0",
-        "path-type": "^4.0.0",
-        "yaml": "^1.10.0"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/cross-spawn": {
-      "version": "7.0.3",
-      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
-      "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
-      "dev": true,
-      "dependencies": {
-        "path-key": "^3.1.0",
-        "shebang-command": "^2.0.0",
-        "which": "^2.0.1"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/css-box-model": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/css-box-model/-/css-box-model-1.2.1.tgz",
-      "integrity": "sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw==",
-      "dependencies": {
-        "tiny-invariant": "^1.0.6"
-      }
-    },
-    "node_modules/csstype": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz",
-      "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ=="
-    },
-    "node_modules/damerau-levenshtein": {
-      "version": "1.0.8",
-      "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
-      "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==",
-      "dev": true
-    },
-    "node_modules/debug": {
-      "version": "4.3.4",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
-      "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
-      "dev": true,
-      "dependencies": {
-        "ms": "2.1.2"
-      },
-      "engines": {
-        "node": ">=6.0"
-      },
-      "peerDependenciesMeta": {
-        "supports-color": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/deep-is": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
-      "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
-      "dev": true
-    },
-    "node_modules/define-data-property": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz",
-      "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==",
-      "dependencies": {
-        "get-intrinsic": "^1.2.1",
-        "gopd": "^1.0.1",
-        "has-property-descriptors": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/define-properties": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
-      "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
-      "dev": true,
-      "dependencies": {
-        "define-data-property": "^1.0.1",
-        "has-property-descriptors": "^1.0.0",
-        "object-keys": "^1.1.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/delayed-stream": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
-      "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
-      "engines": {
-        "node": ">=0.4.0"
-      }
-    },
-    "node_modules/dequal": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
-      "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
-      "dev": true,
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/detect-node-es": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz",
-      "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ=="
-    },
-    "node_modules/dir-glob": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
-      "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
-      "dev": true,
-      "dependencies": {
-        "path-type": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/doctrine": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
-      "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
-      "dev": true,
-      "dependencies": {
-        "esutils": "^2.0.2"
-      },
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/emoji-regex": {
-      "version": "9.2.2",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
-      "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
-      "dev": true
-    },
-    "node_modules/error-ex": {
-      "version": "1.3.2",
-      "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
-      "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
-      "dependencies": {
-        "is-arrayish": "^0.2.1"
-      }
-    },
-    "node_modules/es-abstract": {
-      "version": "1.22.3",
-      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz",
-      "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==",
-      "dev": true,
-      "dependencies": {
-        "array-buffer-byte-length": "^1.0.0",
-        "arraybuffer.prototype.slice": "^1.0.2",
-        "available-typed-arrays": "^1.0.5",
-        "call-bind": "^1.0.5",
-        "es-set-tostringtag": "^2.0.1",
-        "es-to-primitive": "^1.2.1",
-        "function.prototype.name": "^1.1.6",
-        "get-intrinsic": "^1.2.2",
-        "get-symbol-description": "^1.0.0",
-        "globalthis": "^1.0.3",
-        "gopd": "^1.0.1",
-        "has-property-descriptors": "^1.0.0",
-        "has-proto": "^1.0.1",
-        "has-symbols": "^1.0.3",
-        "hasown": "^2.0.0",
-        "internal-slot": "^1.0.5",
-        "is-array-buffer": "^3.0.2",
-        "is-callable": "^1.2.7",
-        "is-negative-zero": "^2.0.2",
-        "is-regex": "^1.1.4",
-        "is-shared-array-buffer": "^1.0.2",
-        "is-string": "^1.0.7",
-        "is-typed-array": "^1.1.12",
-        "is-weakref": "^1.0.2",
-        "object-inspect": "^1.13.1",
-        "object-keys": "^1.1.1",
-        "object.assign": "^4.1.4",
-        "regexp.prototype.flags": "^1.5.1",
-        "safe-array-concat": "^1.0.1",
-        "safe-regex-test": "^1.0.0",
-        "string.prototype.trim": "^1.2.8",
-        "string.prototype.trimend": "^1.0.7",
-        "string.prototype.trimstart": "^1.0.7",
-        "typed-array-buffer": "^1.0.0",
-        "typed-array-byte-length": "^1.0.0",
-        "typed-array-byte-offset": "^1.0.0",
-        "typed-array-length": "^1.0.4",
-        "unbox-primitive": "^1.0.2",
-        "which-typed-array": "^1.1.13"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/es-iterator-helpers": {
-      "version": "1.0.15",
-      "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz",
-      "integrity": "sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==",
-      "dev": true,
-      "dependencies": {
-        "asynciterator.prototype": "^1.0.0",
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.2.1",
-        "es-abstract": "^1.22.1",
-        "es-set-tostringtag": "^2.0.1",
-        "function-bind": "^1.1.1",
-        "get-intrinsic": "^1.2.1",
-        "globalthis": "^1.0.3",
-        "has-property-descriptors": "^1.0.0",
-        "has-proto": "^1.0.1",
-        "has-symbols": "^1.0.3",
-        "internal-slot": "^1.0.5",
-        "iterator.prototype": "^1.1.2",
-        "safe-array-concat": "^1.0.1"
-      }
-    },
-    "node_modules/es-set-tostringtag": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz",
-      "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==",
-      "dev": true,
-      "dependencies": {
-        "get-intrinsic": "^1.2.2",
-        "has-tostringtag": "^1.0.0",
-        "hasown": "^2.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/es-shim-unscopables": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz",
-      "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==",
-      "dev": true,
-      "dependencies": {
-        "hasown": "^2.0.0"
-      }
-    },
-    "node_modules/es-to-primitive": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
-      "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
-      "dev": true,
-      "dependencies": {
-        "is-callable": "^1.1.4",
-        "is-date-object": "^1.0.1",
-        "is-symbol": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/escape-string-regexp": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
-      "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/eslint": {
-      "version": "8.16.0",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.16.0.tgz",
-      "integrity": "sha512-MBndsoXY/PeVTDJeWsYj7kLZ5hQpJOfMYLsF6LicLHQWbRDG19lK5jOix4DPl8yY4SUFcE3txy86OzFLWT+yoA==",
-      "dev": true,
-      "dependencies": {
-        "@eslint/eslintrc": "^1.3.0",
-        "@humanwhocodes/config-array": "^0.9.2",
-        "ajv": "^6.10.0",
-        "chalk": "^4.0.0",
-        "cross-spawn": "^7.0.2",
-        "debug": "^4.3.2",
-        "doctrine": "^3.0.0",
-        "escape-string-regexp": "^4.0.0",
-        "eslint-scope": "^7.1.1",
-        "eslint-utils": "^3.0.0",
-        "eslint-visitor-keys": "^3.3.0",
-        "espree": "^9.3.2",
-        "esquery": "^1.4.0",
-        "esutils": "^2.0.2",
-        "fast-deep-equal": "^3.1.3",
-        "file-entry-cache": "^6.0.1",
-        "functional-red-black-tree": "^1.0.1",
-        "glob-parent": "^6.0.1",
-        "globals": "^13.15.0",
-        "ignore": "^5.2.0",
-        "import-fresh": "^3.0.0",
-        "imurmurhash": "^0.1.4",
-        "is-glob": "^4.0.0",
-        "js-yaml": "^4.1.0",
-        "json-stable-stringify-without-jsonify": "^1.0.1",
-        "levn": "^0.4.1",
-        "lodash.merge": "^4.6.2",
-        "minimatch": "^3.1.2",
-        "natural-compare": "^1.4.0",
-        "optionator": "^0.9.1",
-        "regexpp": "^3.2.0",
-        "strip-ansi": "^6.0.1",
-        "strip-json-comments": "^3.1.0",
-        "text-table": "^0.2.0",
-        "v8-compile-cache": "^2.0.3"
-      },
-      "bin": {
-        "eslint": "bin/eslint.js"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
-    "node_modules/eslint-config-airbnb": {
-      "version": "19.0.4",
-      "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-19.0.4.tgz",
-      "integrity": "sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew==",
-      "dev": true,
-      "dependencies": {
-        "eslint-config-airbnb-base": "^15.0.0",
-        "object.assign": "^4.1.2",
-        "object.entries": "^1.1.5"
-      },
-      "engines": {
-        "node": "^10.12.0 || ^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "peerDependencies": {
-        "eslint": "^7.32.0 || ^8.2.0",
-        "eslint-plugin-import": "^2.25.3",
-        "eslint-plugin-jsx-a11y": "^6.5.1",
-        "eslint-plugin-react": "^7.28.0",
-        "eslint-plugin-react-hooks": "^4.3.0"
-      }
-    },
-    "node_modules/eslint-config-airbnb-base": {
-      "version": "15.0.0",
-      "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz",
-      "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==",
-      "dev": true,
-      "dependencies": {
-        "confusing-browser-globals": "^1.0.10",
-        "object.assign": "^4.1.2",
-        "object.entries": "^1.1.5",
-        "semver": "^6.3.0"
-      },
-      "engines": {
-        "node": "^10.12.0 || >=12.0.0"
-      },
-      "peerDependencies": {
-        "eslint": "^7.32.0 || ^8.2.0",
-        "eslint-plugin-import": "^2.25.2"
-      }
-    },
-    "node_modules/eslint-config-airbnb-base/node_modules/semver": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
-      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
-      "dev": true,
-      "bin": {
-        "semver": "bin/semver.js"
-      }
-    },
-    "node_modules/eslint-config-airbnb-typescript": {
-      "version": "17.1.0",
-      "resolved": "https://registry.npmjs.org/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-17.1.0.tgz",
-      "integrity": "sha512-GPxI5URre6dDpJ0CtcthSZVBAfI+Uw7un5OYNVxP2EYi3H81Jw701yFP7AU+/vCE7xBtFmjge7kfhhk4+RAiig==",
-      "dev": true,
-      "dependencies": {
-        "eslint-config-airbnb-base": "^15.0.0"
-      },
-      "peerDependencies": {
-        "@typescript-eslint/eslint-plugin": "^5.13.0 || ^6.0.0",
-        "@typescript-eslint/parser": "^5.0.0 || ^6.0.0",
-        "eslint": "^7.32.0 || ^8.2.0",
-        "eslint-plugin-import": "^2.25.3"
-      }
-    },
-    "node_modules/eslint-import-resolver-node": {
-      "version": "0.3.9",
-      "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz",
-      "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==",
-      "dev": true,
-      "dependencies": {
-        "debug": "^3.2.7",
-        "is-core-module": "^2.13.0",
-        "resolve": "^1.22.4"
-      }
-    },
-    "node_modules/eslint-import-resolver-node/node_modules/debug": {
-      "version": "3.2.7",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
-      "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
-      "dev": true,
-      "dependencies": {
-        "ms": "^2.1.1"
-      }
-    },
-    "node_modules/eslint-module-utils": {
-      "version": "2.8.0",
-      "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz",
-      "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==",
-      "dev": true,
-      "dependencies": {
-        "debug": "^3.2.7"
-      },
-      "engines": {
-        "node": ">=4"
-      },
-      "peerDependenciesMeta": {
-        "eslint": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/eslint-module-utils/node_modules/debug": {
-      "version": "3.2.7",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
-      "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
-      "dev": true,
-      "dependencies": {
-        "ms": "^2.1.1"
-      }
-    },
-    "node_modules/eslint-plugin-import": {
-      "version": "2.29.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz",
-      "integrity": "sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==",
-      "dev": true,
-      "dependencies": {
-        "array-includes": "^3.1.7",
-        "array.prototype.findlastindex": "^1.2.3",
-        "array.prototype.flat": "^1.3.2",
-        "array.prototype.flatmap": "^1.3.2",
-        "debug": "^3.2.7",
-        "doctrine": "^2.1.0",
-        "eslint-import-resolver-node": "^0.3.9",
-        "eslint-module-utils": "^2.8.0",
-        "hasown": "^2.0.0",
-        "is-core-module": "^2.13.1",
-        "is-glob": "^4.0.3",
-        "minimatch": "^3.1.2",
-        "object.fromentries": "^2.0.7",
-        "object.groupby": "^1.0.1",
-        "object.values": "^1.1.7",
-        "semver": "^6.3.1",
-        "tsconfig-paths": "^3.14.2"
-      },
-      "engines": {
-        "node": ">=4"
-      },
-      "peerDependencies": {
-        "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8"
-      }
-    },
-    "node_modules/eslint-plugin-import/node_modules/debug": {
-      "version": "3.2.7",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
-      "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
-      "dev": true,
-      "dependencies": {
-        "ms": "^2.1.1"
-      }
-    },
-    "node_modules/eslint-plugin-import/node_modules/doctrine": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
-      "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
-      "dev": true,
-      "dependencies": {
-        "esutils": "^2.0.2"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/eslint-plugin-import/node_modules/semver": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
-      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
-      "dev": true,
-      "bin": {
-        "semver": "bin/semver.js"
-      }
-    },
-    "node_modules/eslint-plugin-jsx-a11y": {
-      "version": "6.8.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz",
-      "integrity": "sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==",
-      "dev": true,
-      "dependencies": {
-        "@babel/runtime": "^7.23.2",
-        "aria-query": "^5.3.0",
-        "array-includes": "^3.1.7",
-        "array.prototype.flatmap": "^1.3.2",
-        "ast-types-flow": "^0.0.8",
-        "axe-core": "=4.7.0",
-        "axobject-query": "^3.2.1",
-        "damerau-levenshtein": "^1.0.8",
-        "emoji-regex": "^9.2.2",
-        "es-iterator-helpers": "^1.0.15",
-        "hasown": "^2.0.0",
-        "jsx-ast-utils": "^3.3.5",
-        "language-tags": "^1.0.9",
-        "minimatch": "^3.1.2",
-        "object.entries": "^1.1.7",
-        "object.fromentries": "^2.0.7"
-      },
-      "engines": {
-        "node": ">=4.0"
-      },
-      "peerDependencies": {
-        "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8"
-      }
-    },
-    "node_modules/eslint-plugin-react": {
-      "version": "7.33.2",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz",
-      "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==",
-      "dev": true,
-      "dependencies": {
-        "array-includes": "^3.1.6",
-        "array.prototype.flatmap": "^1.3.1",
-        "array.prototype.tosorted": "^1.1.1",
-        "doctrine": "^2.1.0",
-        "es-iterator-helpers": "^1.0.12",
-        "estraverse": "^5.3.0",
-        "jsx-ast-utils": "^2.4.1 || ^3.0.0",
-        "minimatch": "^3.1.2",
-        "object.entries": "^1.1.6",
-        "object.fromentries": "^2.0.6",
-        "object.hasown": "^1.1.2",
-        "object.values": "^1.1.6",
-        "prop-types": "^15.8.1",
-        "resolve": "^2.0.0-next.4",
-        "semver": "^6.3.1",
-        "string.prototype.matchall": "^4.0.8"
-      },
-      "engines": {
-        "node": ">=4"
-      },
-      "peerDependencies": {
-        "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8"
-      }
-    },
-    "node_modules/eslint-plugin-react-hooks": {
-      "version": "4.6.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz",
-      "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      },
-      "peerDependencies": {
-        "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0"
-      }
-    },
-    "node_modules/eslint-plugin-react/node_modules/doctrine": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
-      "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
-      "dev": true,
-      "dependencies": {
-        "esutils": "^2.0.2"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/eslint-plugin-react/node_modules/resolve": {
-      "version": "2.0.0-next.5",
-      "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz",
-      "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==",
-      "dev": true,
-      "dependencies": {
-        "is-core-module": "^2.13.0",
-        "path-parse": "^1.0.7",
-        "supports-preserve-symlinks-flag": "^1.0.0"
-      },
-      "bin": {
-        "resolve": "bin/resolve"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/eslint-plugin-react/node_modules/semver": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
-      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
-      "dev": true,
-      "bin": {
-        "semver": "bin/semver.js"
-      }
-    },
-    "node_modules/eslint-scope": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
-      "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
-      "dev": true,
-      "dependencies": {
-        "esrecurse": "^4.3.0",
-        "estraverse": "^4.1.1"
-      },
-      "engines": {
-        "node": ">=8.0.0"
-      }
-    },
-    "node_modules/eslint-scope/node_modules/estraverse": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
-      "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
-      "dev": true,
-      "engines": {
-        "node": ">=4.0"
-      }
-    },
-    "node_modules/eslint-utils": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
-      "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
-      "dev": true,
-      "dependencies": {
-        "eslint-visitor-keys": "^2.0.0"
-      },
-      "engines": {
-        "node": "^10.0.0 || ^12.0.0 || >= 14.0.0"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/mysticatea"
-      },
-      "peerDependencies": {
-        "eslint": ">=5"
-      }
-    },
-    "node_modules/eslint-utils/node_modules/eslint-visitor-keys": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
-      "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/eslint-visitor-keys": {
-      "version": "3.4.3",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
-      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
-      "dev": true,
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
-    "node_modules/eslint/node_modules/ajv": {
-      "version": "6.12.6",
-      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
-      "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
-      "dev": true,
-      "dependencies": {
-        "fast-deep-equal": "^3.1.1",
-        "fast-json-stable-stringify": "^2.0.0",
-        "json-schema-traverse": "^0.4.1",
-        "uri-js": "^4.2.2"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/epoberezkin"
-      }
-    },
-    "node_modules/eslint/node_modules/eslint-scope": {
-      "version": "7.2.2",
-      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
-      "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
-      "dev": true,
-      "dependencies": {
-        "esrecurse": "^4.3.0",
-        "estraverse": "^5.2.0"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
-    "node_modules/eslint/node_modules/json-schema-traverse": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
-      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
-      "dev": true
-    },
-    "node_modules/espree": {
-      "version": "9.6.1",
-      "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
-      "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
-      "dev": true,
-      "dependencies": {
-        "acorn": "^8.9.0",
-        "acorn-jsx": "^5.3.2",
-        "eslint-visitor-keys": "^3.4.1"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
-    "node_modules/esquery": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
-      "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
-      "dev": true,
-      "dependencies": {
-        "estraverse": "^5.1.0"
-      },
-      "engines": {
-        "node": ">=0.10"
-      }
-    },
-    "node_modules/esrecurse": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
-      "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
-      "dev": true,
-      "dependencies": {
-        "estraverse": "^5.2.0"
-      },
-      "engines": {
-        "node": ">=4.0"
-      }
-    },
-    "node_modules/estraverse": {
-      "version": "5.3.0",
-      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
-      "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
-      "dev": true,
-      "engines": {
-        "node": ">=4.0"
-      }
-    },
-    "node_modules/esutils": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
-      "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/fast-deep-equal": {
-      "version": "3.1.3",
-      "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
-      "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
-    },
-    "node_modules/fast-glob": {
-      "version": "3.3.2",
-      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
-      "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
-      "dev": true,
-      "dependencies": {
-        "@nodelib/fs.stat": "^2.0.2",
-        "@nodelib/fs.walk": "^1.2.3",
-        "glob-parent": "^5.1.2",
-        "merge2": "^1.3.0",
-        "micromatch": "^4.0.4"
-      },
-      "engines": {
-        "node": ">=8.6.0"
-      }
-    },
-    "node_modules/fast-glob/node_modules/glob-parent": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
-      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
-      "dev": true,
-      "dependencies": {
-        "is-glob": "^4.0.1"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/fast-json-stable-stringify": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
-      "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
-      "dev": true
-    },
-    "node_modules/fast-levenshtein": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
-      "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
-      "dev": true
-    },
-    "node_modules/fastq": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
-      "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
-      "dev": true,
-      "dependencies": {
-        "reusify": "^1.0.4"
-      }
-    },
-    "node_modules/file-entry-cache": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
-      "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
-      "dev": true,
-      "dependencies": {
-        "flat-cache": "^3.0.4"
-      },
-      "engines": {
-        "node": "^10.12.0 || >=12.0.0"
-      }
-    },
-    "node_modules/fill-range": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
-      "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
-      "dev": true,
-      "dependencies": {
-        "to-regex-range": "^5.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/find-root": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
-      "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng=="
-    },
-    "node_modules/flat-cache": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
-      "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
-      "dev": true,
-      "dependencies": {
-        "flatted": "^3.2.9",
-        "keyv": "^4.5.3",
-        "rimraf": "^3.0.2"
-      },
-      "engines": {
-        "node": "^10.12.0 || >=12.0.0"
-      }
-    },
-    "node_modules/flatted": {
-      "version": "3.2.9",
-      "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz",
-      "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==",
-      "dev": true
-    },
-    "node_modules/focus-lock": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/focus-lock/-/focus-lock-1.0.0.tgz",
-      "integrity": "sha512-a8Ge6cdKh9za/GZR/qtigTAk7SrGore56EFcoMshClsh7FLk1zwszc/ltuMfKhx56qeuyL/jWQ4J4axou0iJ9w==",
-      "dependencies": {
-        "tslib": "^2.0.3"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/follow-redirects": {
-      "version": "1.15.3",
-      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz",
-      "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==",
-      "funding": [
-        {
-          "type": "individual",
-          "url": "https://github.com/sponsors/RubenVerborgh"
-        }
-      ],
-      "engines": {
-        "node": ">=4.0"
-      },
-      "peerDependenciesMeta": {
-        "debug": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/for-each": {
-      "version": "0.3.3",
-      "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
-      "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
-      "dependencies": {
-        "is-callable": "^1.1.3"
-      }
-    },
-    "node_modules/form-data": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
-      "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
-      "dependencies": {
-        "asynckit": "^0.4.0",
-        "combined-stream": "^1.0.8",
-        "mime-types": "^2.1.12"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/framer-motion": {
-      "version": "6.5.1",
-      "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-6.5.1.tgz",
-      "integrity": "sha512-o1BGqqposwi7cgDrtg0dNONhkmPsUFDaLcKXigzuTFC5x58mE8iyTazxSudFzmT6MEyJKfjjU8ItoMe3W+3fiw==",
-      "dependencies": {
-        "@motionone/dom": "10.12.0",
-        "framesync": "6.0.1",
-        "hey-listen": "^1.0.8",
-        "popmotion": "11.0.3",
-        "style-value-types": "5.0.0",
-        "tslib": "^2.1.0"
-      },
-      "optionalDependencies": {
-        "@emotion/is-prop-valid": "^0.8.2"
-      },
-      "peerDependencies": {
-        "react": ">=16.8 || ^17.0.0 || ^18.0.0",
-        "react-dom": ">=16.8 || ^17.0.0 || ^18.0.0"
-      }
-    },
-    "node_modules/framer-motion/node_modules/@emotion/is-prop-valid": {
-      "version": "0.8.8",
-      "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz",
-      "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==",
-      "optional": true,
-      "dependencies": {
-        "@emotion/memoize": "0.7.4"
-      }
-    },
-    "node_modules/framer-motion/node_modules/@emotion/memoize": {
-      "version": "0.7.4",
-      "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz",
-      "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==",
-      "optional": true
-    },
-    "node_modules/framer-motion/node_modules/framesync": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/framesync/-/framesync-6.0.1.tgz",
-      "integrity": "sha512-fUY88kXvGiIItgNC7wcTOl0SNRCVXMKSWW2Yzfmn7EKNc+MpCzcz9DhdHcdjbrtN3c6R4H5dTY2jiCpPdysEjA==",
-      "dependencies": {
-        "tslib": "^2.1.0"
-      }
-    },
-    "node_modules/framesync": {
-      "version": "6.1.2",
-      "resolved": "https://registry.npmjs.org/framesync/-/framesync-6.1.2.tgz",
-      "integrity": "sha512-jBTqhX6KaQVDyus8muwZbBeGGP0XgujBRbQ7gM7BRdS3CadCZIHiawyzYLnafYcvZIh5j8WE7cxZKFn7dXhu9g==",
-      "dependencies": {
-        "tslib": "2.4.0"
-      }
-    },
-    "node_modules/framesync/node_modules/tslib": {
-      "version": "2.4.0",
-      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
-      "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ=="
-    },
-    "node_modules/fs.realpath": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
-      "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
-      "dev": true
-    },
-    "node_modules/function-bind": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
-      "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/function.prototype.name": {
-      "version": "1.1.6",
-      "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz",
-      "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.2.0",
-        "es-abstract": "^1.22.1",
-        "functions-have-names": "^1.2.3"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/functional-red-black-tree": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
-      "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==",
-      "dev": true
-    },
-    "node_modules/functions-have-names": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
-      "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
-      "dev": true,
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/get-intrinsic": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz",
-      "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==",
-      "dependencies": {
-        "function-bind": "^1.1.2",
-        "has-proto": "^1.0.1",
-        "has-symbols": "^1.0.3",
-        "hasown": "^2.0.0"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/get-nonce": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz",
-      "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==",
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/get-symbol-description": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
-      "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "get-intrinsic": "^1.1.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/glob": {
-      "version": "7.2.3",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
-      "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
-      "dev": true,
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^3.1.1",
-        "once": "^1.3.0",
-        "path-is-absolute": "^1.0.0"
-      },
-      "engines": {
-        "node": "*"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/glob-parent": {
-      "version": "6.0.2",
-      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
-      "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
-      "dev": true,
-      "dependencies": {
-        "is-glob": "^4.0.3"
-      },
-      "engines": {
-        "node": ">=10.13.0"
-      }
-    },
-    "node_modules/globals": {
-      "version": "13.23.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz",
-      "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==",
-      "dev": true,
-      "dependencies": {
-        "type-fest": "^0.20.2"
-      },
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/globalthis": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz",
-      "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==",
-      "dev": true,
-      "dependencies": {
-        "define-properties": "^1.1.3"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/globby": {
-      "version": "11.1.0",
-      "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
-      "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
-      "dev": true,
-      "dependencies": {
-        "array-union": "^2.1.0",
-        "dir-glob": "^3.0.1",
-        "fast-glob": "^3.2.9",
-        "ignore": "^5.2.0",
-        "merge2": "^1.4.1",
-        "slash": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/gopd": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
-      "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
-      "dependencies": {
-        "get-intrinsic": "^1.1.3"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/graphemer": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
-      "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
-      "dev": true
-    },
-    "node_modules/has-bigints": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
-      "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
-      "dev": true,
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/has-flag": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
-      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/has-property-descriptors": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz",
-      "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==",
-      "dependencies": {
-        "get-intrinsic": "^1.2.2"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/has-proto": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
-      "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/has-symbols": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
-      "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/has-tostringtag": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
-      "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
-      "dependencies": {
-        "has-symbols": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/hasown": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz",
-      "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==",
-      "dependencies": {
-        "function-bind": "^1.1.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/hey-listen": {
-      "version": "1.0.8",
-      "resolved": "https://registry.npmjs.org/hey-listen/-/hey-listen-1.0.8.tgz",
-      "integrity": "sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q=="
-    },
-    "node_modules/hoist-non-react-statics": {
-      "version": "3.3.2",
-      "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
-      "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
-      "dependencies": {
-        "react-is": "^16.7.0"
-      }
-    },
-    "node_modules/ignore": {
-      "version": "5.3.0",
-      "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz",
-      "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==",
-      "dev": true,
-      "engines": {
-        "node": ">= 4"
-      }
-    },
-    "node_modules/immer": {
-      "version": "9.0.21",
-      "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz",
-      "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==",
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/immer"
-      }
-    },
-    "node_modules/import-fresh": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
-      "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
-      "dependencies": {
-        "parent-module": "^1.0.0",
-        "resolve-from": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/imurmurhash": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
-      "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8.19"
-      }
-    },
-    "node_modules/inflight": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
-      "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
-      "dev": true,
-      "dependencies": {
-        "once": "^1.3.0",
-        "wrappy": "1"
-      }
-    },
-    "node_modules/inherits": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
-      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
-    },
-    "node_modules/internal-slot": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz",
-      "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==",
-      "dev": true,
-      "dependencies": {
-        "get-intrinsic": "^1.2.2",
-        "hasown": "^2.0.0",
-        "side-channel": "^1.0.4"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/invariant": {
-      "version": "2.2.4",
-      "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
-      "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
-      "dependencies": {
-        "loose-envify": "^1.0.0"
-      }
-    },
-    "node_modules/is-arguments": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz",
-      "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==",
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "has-tostringtag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-array-buffer": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz",
-      "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "get-intrinsic": "^1.2.0",
-        "is-typed-array": "^1.1.10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-arrayish": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
-      "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="
-    },
-    "node_modules/is-async-function": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz",
-      "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==",
-      "dev": true,
-      "dependencies": {
-        "has-tostringtag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-bigint": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
-      "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
-      "dev": true,
-      "dependencies": {
-        "has-bigints": "^1.0.1"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-boolean-object": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
-      "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "has-tostringtag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-callable": {
-      "version": "1.2.7",
-      "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
-      "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-core-module": {
-      "version": "2.13.1",
-      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
-      "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
-      "dependencies": {
-        "hasown": "^2.0.0"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-date-object": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
-      "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
-      "dev": true,
-      "dependencies": {
-        "has-tostringtag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-extglob": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
-      "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/is-finalizationregistry": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz",
-      "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-generator-function": {
-      "version": "1.0.10",
-      "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz",
-      "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==",
-      "dependencies": {
-        "has-tostringtag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-glob": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
-      "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
-      "dev": true,
-      "dependencies": {
-        "is-extglob": "^2.1.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/is-map": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz",
-      "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==",
-      "dev": true,
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-negative-zero": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
-      "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-number": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
-      "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.12.0"
-      }
-    },
-    "node_modules/is-number-object": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
-      "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
-      "dev": true,
-      "dependencies": {
-        "has-tostringtag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-regex": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
-      "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "has-tostringtag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-set": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz",
-      "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==",
-      "dev": true,
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-shared-array-buffer": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
-      "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-string": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
-      "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
-      "dev": true,
-      "dependencies": {
-        "has-tostringtag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-symbol": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
-      "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
-      "dev": true,
-      "dependencies": {
-        "has-symbols": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-typed-array": {
-      "version": "1.1.12",
-      "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz",
-      "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==",
-      "dependencies": {
-        "which-typed-array": "^1.1.11"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-weakmap": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz",
-      "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==",
-      "dev": true,
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-weakref": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
-      "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-weakset": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz",
-      "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "get-intrinsic": "^1.1.1"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/isarray": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
-      "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
-      "dev": true
-    },
-    "node_modules/isexe": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
-      "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
-      "dev": true
-    },
-    "node_modules/iterator.prototype": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz",
-      "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==",
-      "dev": true,
-      "dependencies": {
-        "define-properties": "^1.2.1",
-        "get-intrinsic": "^1.2.1",
-        "has-symbols": "^1.0.3",
-        "reflect.getprototypeof": "^1.0.4",
-        "set-function-name": "^2.0.1"
-      }
-    },
-    "node_modules/js-tokens": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
-      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
-    },
-    "node_modules/js-yaml": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
-      "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
-      "dev": true,
-      "dependencies": {
-        "argparse": "^2.0.1"
-      },
-      "bin": {
-        "js-yaml": "bin/js-yaml.js"
-      }
-    },
-    "node_modules/json-buffer": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
-      "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
-      "dev": true
-    },
-    "node_modules/json-parse-even-better-errors": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
-      "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="
-    },
-    "node_modules/json-schema-traverse": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
-      "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
-    },
-    "node_modules/json-stable-stringify-without-jsonify": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
-      "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
-      "dev": true
-    },
-    "node_modules/json5": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
-      "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
-      "dev": true,
-      "dependencies": {
-        "minimist": "^1.2.0"
-      },
-      "bin": {
-        "json5": "lib/cli.js"
-      }
-    },
-    "node_modules/jsx-ast-utils": {
-      "version": "3.3.5",
-      "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz",
-      "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==",
-      "dev": true,
-      "dependencies": {
-        "array-includes": "^3.1.6",
-        "array.prototype.flat": "^1.3.1",
-        "object.assign": "^4.1.4",
-        "object.values": "^1.1.6"
-      },
-      "engines": {
-        "node": ">=4.0"
-      }
-    },
-    "node_modules/keyv": {
-      "version": "4.5.4",
-      "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
-      "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
-      "dev": true,
-      "dependencies": {
-        "json-buffer": "3.0.1"
-      }
-    },
-    "node_modules/language-subtag-registry": {
-      "version": "0.3.22",
-      "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz",
-      "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==",
-      "dev": true
-    },
-    "node_modules/language-tags": {
-      "version": "1.0.9",
-      "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz",
-      "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==",
-      "dev": true,
-      "dependencies": {
-        "language-subtag-registry": "^0.3.20"
-      },
-      "engines": {
-        "node": ">=0.10"
-      }
-    },
-    "node_modules/levn": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
-      "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
-      "dev": true,
-      "dependencies": {
-        "prelude-ls": "^1.2.1",
-        "type-check": "~0.4.0"
-      },
-      "engines": {
-        "node": ">= 0.8.0"
-      }
-    },
-    "node_modules/lines-and-columns": {
-      "version": "1.2.4",
-      "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
-      "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
-    },
-    "node_modules/lodash.merge": {
-      "version": "4.6.2",
-      "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
-      "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
-      "dev": true
-    },
-    "node_modules/lodash.mergewith": {
-      "version": "4.6.2",
-      "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz",
-      "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ=="
-    },
-    "node_modules/loose-envify": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
-      "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
-      "dependencies": {
-        "js-tokens": "^3.0.0 || ^4.0.0"
-      },
-      "bin": {
-        "loose-envify": "cli.js"
-      }
-    },
-    "node_modules/lru-cache": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
-      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
-      "dev": true,
-      "dependencies": {
-        "yallist": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/merge2": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
-      "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
-      "dev": true,
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/micromatch": {
-      "version": "4.0.5",
-      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
-      "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
-      "dev": true,
-      "dependencies": {
-        "braces": "^3.0.2",
-        "picomatch": "^2.3.1"
-      },
-      "engines": {
-        "node": ">=8.6"
-      }
-    },
-    "node_modules/mime-db": {
-      "version": "1.52.0",
-      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
-      "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/mime-types": {
-      "version": "2.1.35",
-      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
-      "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
-      "dependencies": {
-        "mime-db": "1.52.0"
-      },
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/minimatch": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
-      "dev": true,
-      "dependencies": {
-        "brace-expansion": "^1.1.7"
-      },
-      "engines": {
-        "node": "*"
-      }
-    },
-    "node_modules/minimist": {
-      "version": "1.2.8",
-      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
-      "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
-      "dev": true,
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/moment": {
-      "version": "2.29.4",
-      "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz",
-      "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==",
-      "engines": {
-        "node": "*"
-      }
-    },
-    "node_modules/monaco-editor": {
-      "version": "0.44.0",
-      "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.44.0.tgz",
-      "integrity": "sha512-5SmjNStN6bSuSE5WPT2ZV+iYn1/yI9sd4Igtk23ChvqB7kDk9lZbB9F5frsuvpB+2njdIeGGFf2G4gbE6rCC9Q==",
-      "peer": true
-    },
-    "node_modules/ms": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-      "dev": true
-    },
-    "node_modules/nanoid": {
-      "version": "3.3.7",
-      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
-      "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/ai"
-        }
-      ],
-      "bin": {
-        "nanoid": "bin/nanoid.cjs"
-      },
-      "engines": {
-        "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
-      }
-    },
-    "node_modules/natural-compare": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
-      "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
-      "dev": true
-    },
-    "node_modules/natural-compare-lite": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz",
-      "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==",
-      "dev": true
-    },
-    "node_modules/next": {
-      "version": "12.1.6",
-      "resolved": "https://registry.npmjs.org/next/-/next-12.1.6.tgz",
-      "integrity": "sha512-cebwKxL3/DhNKfg9tPZDQmbRKjueqykHHbgaoG4VBRH3AHQJ2HO0dbKFiS1hPhe1/qgc2d/hFeadsbPicmLD+A==",
-      "dependencies": {
-        "@next/env": "12.1.6",
-        "caniuse-lite": "^1.0.30001332",
-        "postcss": "8.4.5",
-        "styled-jsx": "5.0.2"
-      },
-      "bin": {
-        "next": "dist/bin/next"
-      },
-      "engines": {
-        "node": ">=12.22.0"
-      },
-      "optionalDependencies": {
-        "@next/swc-android-arm-eabi": "12.1.6",
-        "@next/swc-android-arm64": "12.1.6",
-        "@next/swc-darwin-arm64": "12.1.6",
-        "@next/swc-darwin-x64": "12.1.6",
-        "@next/swc-linux-arm-gnueabihf": "12.1.6",
-        "@next/swc-linux-arm64-gnu": "12.1.6",
-        "@next/swc-linux-arm64-musl": "12.1.6",
-        "@next/swc-linux-x64-gnu": "12.1.6",
-        "@next/swc-linux-x64-musl": "12.1.6",
-        "@next/swc-win32-arm64-msvc": "12.1.6",
-        "@next/swc-win32-ia32-msvc": "12.1.6",
-        "@next/swc-win32-x64-msvc": "12.1.6"
-      },
-      "peerDependencies": {
-        "fibers": ">= 3.1.0",
-        "node-sass": "^6.0.0 || ^7.0.0",
-        "react": "^17.0.2 || ^18.0.0-0",
-        "react-dom": "^17.0.2 || ^18.0.0-0",
-        "sass": "^1.3.0"
-      },
-      "peerDependenciesMeta": {
-        "fibers": {
-          "optional": true
-        },
-        "node-sass": {
-          "optional": true
-        },
-        "sass": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/object-assign": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
-      "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/object-inspect": {
-      "version": "1.13.1",
-      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz",
-      "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==",
-      "dev": true,
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/object-keys": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-      "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/object.assign": {
-      "version": "4.1.5",
-      "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz",
-      "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.5",
-        "define-properties": "^1.2.1",
-        "has-symbols": "^1.0.3",
-        "object-keys": "^1.1.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/object.entries": {
-      "version": "1.1.7",
-      "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz",
-      "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.2.0",
-        "es-abstract": "^1.22.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/object.fromentries": {
-      "version": "2.0.7",
-      "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz",
-      "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.2.0",
-        "es-abstract": "^1.22.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/object.groupby": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz",
-      "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.2.0",
-        "es-abstract": "^1.22.1",
-        "get-intrinsic": "^1.2.1"
-      }
-    },
-    "node_modules/object.hasown": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz",
-      "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==",
-      "dev": true,
-      "dependencies": {
-        "define-properties": "^1.2.0",
-        "es-abstract": "^1.22.1"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/object.values": {
-      "version": "1.1.7",
-      "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz",
-      "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.2.0",
-        "es-abstract": "^1.22.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/once": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
-      "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
-      "dev": true,
-      "dependencies": {
-        "wrappy": "1"
-      }
-    },
-    "node_modules/optionator": {
-      "version": "0.9.3",
-      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
-      "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==",
-      "dev": true,
-      "dependencies": {
-        "@aashutoshrathi/word-wrap": "^1.2.3",
-        "deep-is": "^0.1.3",
-        "fast-levenshtein": "^2.0.6",
-        "levn": "^0.4.1",
-        "prelude-ls": "^1.2.1",
-        "type-check": "^0.4.0"
-      },
-      "engines": {
-        "node": ">= 0.8.0"
-      }
-    },
-    "node_modules/parent-module": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
-      "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
-      "dependencies": {
-        "callsites": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/parse-json": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
-      "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
-      "dependencies": {
-        "@babel/code-frame": "^7.0.0",
-        "error-ex": "^1.3.1",
-        "json-parse-even-better-errors": "^2.3.0",
-        "lines-and-columns": "^1.1.6"
-      },
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/path-is-absolute": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
-      "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/path-key": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
-      "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/path-parse": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
-      "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
-    },
-    "node_modules/path-type": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
-      "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/picocolors": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
-      "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
-    },
-    "node_modules/picomatch": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
-      "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
-      "dev": true,
-      "engines": {
-        "node": ">=8.6"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/jonschlinkert"
-      }
-    },
-    "node_modules/popmotion": {
-      "version": "11.0.3",
-      "resolved": "https://registry.npmjs.org/popmotion/-/popmotion-11.0.3.tgz",
-      "integrity": "sha512-Y55FLdj3UxkR7Vl3s7Qr4e9m0onSnP8W7d/xQLsoJM40vs6UKHFdygs6SWryasTZYqugMjm3BepCF4CWXDiHgA==",
-      "dependencies": {
-        "framesync": "6.0.1",
-        "hey-listen": "^1.0.8",
-        "style-value-types": "5.0.0",
-        "tslib": "^2.1.0"
-      }
-    },
-    "node_modules/popmotion/node_modules/framesync": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/framesync/-/framesync-6.0.1.tgz",
-      "integrity": "sha512-fUY88kXvGiIItgNC7wcTOl0SNRCVXMKSWW2Yzfmn7EKNc+MpCzcz9DhdHcdjbrtN3c6R4H5dTY2jiCpPdysEjA==",
-      "dependencies": {
-        "tslib": "^2.1.0"
-      }
-    },
-    "node_modules/postcss": {
-      "version": "8.4.5",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz",
-      "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==",
-      "dependencies": {
-        "nanoid": "^3.1.30",
-        "picocolors": "^1.0.0",
-        "source-map-js": "^1.0.1"
-      },
-      "engines": {
-        "node": "^10 || ^12 || >=14"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/postcss/"
-      }
-    },
-    "node_modules/prelude-ls": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
-      "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.8.0"
-      }
-    },
-    "node_modules/prop-types": {
-      "version": "15.8.1",
-      "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
-      "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
-      "dependencies": {
-        "loose-envify": "^1.4.0",
-        "object-assign": "^4.1.1",
-        "react-is": "^16.13.1"
-      }
-    },
-    "node_modules/punycode": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
-      "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/queue-microtask": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
-      "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/feross"
-        },
-        {
-          "type": "patreon",
-          "url": "https://www.patreon.com/feross"
-        },
-        {
-          "type": "consulting",
-          "url": "https://feross.org/support"
-        }
-      ]
-    },
-    "node_modules/react": {
-      "version": "18.1.0",
-      "resolved": "https://registry.npmjs.org/react/-/react-18.1.0.tgz",
-      "integrity": "sha512-4oL8ivCz5ZEPyclFQXaNksK3adutVS8l2xzZU0cqEFrE9Sb7fC0EFK5uEk74wIreL1DERyjvsU915j1pcT2uEQ==",
-      "dependencies": {
-        "loose-envify": "^1.1.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/react-clientside-effect": {
-      "version": "1.2.6",
-      "resolved": "https://registry.npmjs.org/react-clientside-effect/-/react-clientside-effect-1.2.6.tgz",
-      "integrity": "sha512-XGGGRQAKY+q25Lz9a/4EPqom7WRjz3z9R2k4jhVKA/puQFH/5Nt27vFZYql4m4NVNdUvX8PS3O7r/Zzm7cjUlg==",
-      "dependencies": {
-        "@babel/runtime": "^7.12.13"
-      },
-      "peerDependencies": {
-        "react": "^15.3.0 || ^16.0.0 || ^17.0.0 || ^18.0.0"
-      }
-    },
-    "node_modules/react-dom": {
-      "version": "18.1.0",
-      "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.1.0.tgz",
-      "integrity": "sha512-fU1Txz7Budmvamp7bshe4Zi32d0ll7ect+ccxNu9FlObT605GOEB8BfO4tmRJ39R5Zj831VCpvQ05QPBW5yb+w==",
-      "dependencies": {
-        "loose-envify": "^1.1.0",
-        "scheduler": "^0.22.0"
-      },
-      "peerDependencies": {
-        "react": "^18.1.0"
-      }
-    },
-    "node_modules/react-fast-compare": {
-      "version": "3.2.2",
-      "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz",
-      "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ=="
-    },
-    "node_modules/react-focus-lock": {
-      "version": "2.9.6",
-      "resolved": "https://registry.npmjs.org/react-focus-lock/-/react-focus-lock-2.9.6.tgz",
-      "integrity": "sha512-B7gYnCjHNrNYwY2juS71dHbf0+UpXXojt02svxybj8N5bxceAkzPChKEncHuratjUHkIFNCn06k2qj1DRlzTug==",
-      "dependencies": {
-        "@babel/runtime": "^7.0.0",
-        "focus-lock": "^1.0.0",
-        "prop-types": "^15.6.2",
-        "react-clientside-effect": "^1.2.6",
-        "use-callback-ref": "^1.3.0",
-        "use-sidecar": "^1.1.2"
-      },
-      "peerDependencies": {
-        "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
-        "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
-      },
-      "peerDependenciesMeta": {
-        "@types/react": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/react-icons": {
-      "version": "4.12.0",
-      "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.12.0.tgz",
-      "integrity": "sha512-IBaDuHiShdZqmfc/TwHu6+d6k2ltNCf3AszxNmjJc1KUfXdEeRJOKyNvLmAHaarhzGmTSVygNdyu8/opXv2gaw==",
-      "peerDependencies": {
-        "react": "*"
-      }
-    },
-    "node_modules/react-is": {
-      "version": "16.13.1",
-      "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
-      "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
-    },
-    "node_modules/react-remove-scroll": {
-      "version": "2.5.7",
-      "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.7.tgz",
-      "integrity": "sha512-FnrTWO4L7/Bhhf3CYBNArEG/yROV0tKmTv7/3h9QCFvH6sndeFf1wPqOcbFVu5VAulS5dV1wGT3GZZ/1GawqiA==",
-      "dependencies": {
-        "react-remove-scroll-bar": "^2.3.4",
-        "react-style-singleton": "^2.2.1",
-        "tslib": "^2.1.0",
-        "use-callback-ref": "^1.3.0",
-        "use-sidecar": "^1.1.2"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "peerDependencies": {
-        "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
-        "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
-      },
-      "peerDependenciesMeta": {
-        "@types/react": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/react-remove-scroll-bar": {
-      "version": "2.3.4",
-      "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.4.tgz",
-      "integrity": "sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==",
-      "dependencies": {
-        "react-style-singleton": "^2.2.1",
-        "tslib": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "peerDependencies": {
-        "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
-        "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
-      },
-      "peerDependenciesMeta": {
-        "@types/react": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/react-style-singleton": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz",
-      "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==",
-      "dependencies": {
-        "get-nonce": "^1.0.0",
-        "invariant": "^2.2.4",
-        "tslib": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "peerDependencies": {
-        "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
-        "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
-      },
-      "peerDependenciesMeta": {
-        "@types/react": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/reflect.getprototypeof": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz",
-      "integrity": "sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.2.0",
-        "es-abstract": "^1.22.1",
-        "get-intrinsic": "^1.2.1",
-        "globalthis": "^1.0.3",
-        "which-builtin-type": "^1.1.3"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/regenerator-runtime": {
-      "version": "0.14.0",
-      "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz",
-      "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA=="
-    },
-    "node_modules/regexp.prototype.flags": {
-      "version": "1.5.1",
-      "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz",
-      "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.2.0",
-        "set-function-name": "^2.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/regexpp": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
-      "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/mysticatea"
-      }
-    },
-    "node_modules/require-from-string": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
-      "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/resolve": {
-      "version": "1.22.8",
-      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
-      "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
-      "dependencies": {
-        "is-core-module": "^2.13.0",
-        "path-parse": "^1.0.7",
-        "supports-preserve-symlinks-flag": "^1.0.0"
-      },
-      "bin": {
-        "resolve": "bin/resolve"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/resolve-from": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
-      "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/reusify": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
-      "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
-      "dev": true,
-      "engines": {
-        "iojs": ">=1.0.0",
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/rimraf": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
-      "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
-      "dev": true,
-      "dependencies": {
-        "glob": "^7.1.3"
-      },
-      "bin": {
-        "rimraf": "bin.js"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/run-parallel": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
-      "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/feross"
-        },
-        {
-          "type": "patreon",
-          "url": "https://www.patreon.com/feross"
-        },
-        {
-          "type": "consulting",
-          "url": "https://feross.org/support"
-        }
-      ],
-      "dependencies": {
-        "queue-microtask": "^1.2.2"
-      }
-    },
-    "node_modules/safe-array-concat": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz",
-      "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "get-intrinsic": "^1.2.1",
-        "has-symbols": "^1.0.3",
-        "isarray": "^2.0.5"
-      },
-      "engines": {
-        "node": ">=0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/safe-regex-test": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz",
-      "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "get-intrinsic": "^1.1.3",
-        "is-regex": "^1.1.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/scheduler": {
-      "version": "0.22.0",
-      "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.22.0.tgz",
-      "integrity": "sha512-6QAm1BgQI88NPYymgGQLCZgvep4FyePDWFpXVK+zNSUgHwlqpJy8VEh8Et0KxTACS4VWwMousBElAZOH9nkkoQ==",
-      "dependencies": {
-        "loose-envify": "^1.1.0"
-      }
-    },
-    "node_modules/semver": {
-      "version": "7.5.4",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
-      "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
-      "dev": true,
-      "dependencies": {
-        "lru-cache": "^6.0.0"
-      },
-      "bin": {
-        "semver": "bin/semver.js"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/set-function-length": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz",
-      "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==",
-      "dependencies": {
-        "define-data-property": "^1.1.1",
-        "get-intrinsic": "^1.2.1",
-        "gopd": "^1.0.1",
-        "has-property-descriptors": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/set-function-name": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz",
-      "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==",
-      "dev": true,
-      "dependencies": {
-        "define-data-property": "^1.0.1",
-        "functions-have-names": "^1.2.3",
-        "has-property-descriptors": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/shebang-command": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
-      "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
-      "dev": true,
-      "dependencies": {
-        "shebang-regex": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/shebang-regex": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
-      "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/side-channel": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
-      "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.0",
-        "get-intrinsic": "^1.0.2",
-        "object-inspect": "^1.9.0"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/slash": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
-      "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/source-map": {
-      "version": "0.5.7",
-      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-      "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/source-map-js": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
-      "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/state-local": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/state-local/-/state-local-1.0.7.tgz",
-      "integrity": "sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w=="
-    },
-    "node_modules/string.prototype.matchall": {
-      "version": "4.0.10",
-      "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz",
-      "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.2.0",
-        "es-abstract": "^1.22.1",
-        "get-intrinsic": "^1.2.1",
-        "has-symbols": "^1.0.3",
-        "internal-slot": "^1.0.5",
-        "regexp.prototype.flags": "^1.5.0",
-        "set-function-name": "^2.0.0",
-        "side-channel": "^1.0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/string.prototype.trim": {
-      "version": "1.2.8",
-      "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz",
-      "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.2.0",
-        "es-abstract": "^1.22.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/string.prototype.trimend": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz",
-      "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.2.0",
-        "es-abstract": "^1.22.1"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/string.prototype.trimstart": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz",
-      "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.2.0",
-        "es-abstract": "^1.22.1"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/strip-ansi": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
-      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
-      "dev": true,
-      "dependencies": {
-        "ansi-regex": "^5.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/strip-bom": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
-      "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/strip-json-comments": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
-      "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/style-value-types": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/style-value-types/-/style-value-types-5.0.0.tgz",
-      "integrity": "sha512-08yq36Ikn4kx4YU6RD7jWEv27v4V+PUsOGa4n/as8Et3CuODMJQ00ENeAVXAeydX4Z2j1XHZF1K2sX4mGl18fA==",
-      "dependencies": {
-        "hey-listen": "^1.0.8",
-        "tslib": "^2.1.0"
-      }
-    },
-    "node_modules/styled-jsx": {
-      "version": "5.0.2",
-      "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.2.tgz",
-      "integrity": "sha512-LqPQrbBh3egD57NBcHET4qcgshPks+yblyhPlH2GY8oaDgKs8SK4C3dBh3oSJjgzJ3G5t1SYEZGHkP+QEpX9EQ==",
-      "engines": {
-        "node": ">= 12.0.0"
-      },
-      "peerDependencies": {
-        "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0"
-      },
-      "peerDependenciesMeta": {
-        "@babel/core": {
-          "optional": true
-        },
-        "babel-plugin-macros": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/stylis": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz",
-      "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw=="
-    },
-    "node_modules/supports-color": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
-      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/supports-preserve-symlinks-flag": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
-      "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/swr": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/swr/-/swr-1.3.0.tgz",
-      "integrity": "sha512-dkghQrOl2ORX9HYrMDtPa7LTVHJjCTeZoB1dqTbnnEDlSvN8JEKpYIYurDfvbQFUUS8Cg8PceFVZNkW0KNNYPw==",
-      "peerDependencies": {
-        "react": "^16.11.0 || ^17.0.0 || ^18.0.0"
-      }
-    },
-    "node_modules/text-table": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
-      "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
-      "dev": true
-    },
-    "node_modules/tiny-invariant": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz",
-      "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw=="
-    },
-    "node_modules/to-fast-properties": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
-      "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/to-regex-range": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
-      "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
-      "dev": true,
-      "dependencies": {
-        "is-number": "^7.0.0"
-      },
-      "engines": {
-        "node": ">=8.0"
-      }
-    },
-    "node_modules/toggle-selection": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz",
-      "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ=="
-    },
-    "node_modules/tsconfig-paths": {
-      "version": "3.14.2",
-      "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz",
-      "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==",
-      "dev": true,
-      "dependencies": {
-        "@types/json5": "^0.0.29",
-        "json5": "^1.0.2",
-        "minimist": "^1.2.6",
-        "strip-bom": "^3.0.0"
-      }
-    },
-    "node_modules/tslib": {
-      "version": "2.6.2",
-      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
-      "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
-    },
-    "node_modules/tsutils": {
-      "version": "3.21.0",
-      "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
-      "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
-      "dev": true,
-      "dependencies": {
-        "tslib": "^1.8.1"
-      },
-      "engines": {
-        "node": ">= 6"
-      },
-      "peerDependencies": {
-        "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta"
-      }
-    },
-    "node_modules/tsutils/node_modules/tslib": {
-      "version": "1.14.1",
-      "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
-      "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
-      "dev": true
-    },
-    "node_modules/type-check": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
-      "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
-      "dev": true,
-      "dependencies": {
-        "prelude-ls": "^1.2.1"
-      },
-      "engines": {
-        "node": ">= 0.8.0"
-      }
-    },
-    "node_modules/type-fest": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
-      "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/typed-array-buffer": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz",
-      "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "get-intrinsic": "^1.2.1",
-        "is-typed-array": "^1.1.10"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/typed-array-byte-length": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz",
-      "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "for-each": "^0.3.3",
-        "has-proto": "^1.0.1",
-        "is-typed-array": "^1.1.10"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/typed-array-byte-offset": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz",
-      "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==",
-      "dev": true,
-      "dependencies": {
-        "available-typed-arrays": "^1.0.5",
-        "call-bind": "^1.0.2",
-        "for-each": "^0.3.3",
-        "has-proto": "^1.0.1",
-        "is-typed-array": "^1.1.10"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/typed-array-length": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz",
-      "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "for-each": "^0.3.3",
-        "is-typed-array": "^1.1.9"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/typescript": {
-      "version": "4.7.2",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.2.tgz",
-      "integrity": "sha512-Mamb1iX2FDUpcTRzltPxgWMKy3fhg0TN378ylbktPGPK/99KbDtMQ4W1hwgsbPAsG3a0xKa1vmw4VKZQbkvz5A==",
-      "dev": true,
-      "bin": {
-        "tsc": "bin/tsc",
-        "tsserver": "bin/tsserver"
-      },
-      "engines": {
-        "node": ">=4.2.0"
-      }
-    },
-    "node_modules/unbox-primitive": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
-      "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "has-bigints": "^1.0.2",
-        "has-symbols": "^1.0.3",
-        "which-boxed-primitive": "^1.0.2"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/uri-js": {
-      "version": "4.4.1",
-      "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
-      "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
-      "dependencies": {
-        "punycode": "^2.1.0"
-      }
-    },
-    "node_modules/use-callback-ref": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.0.tgz",
-      "integrity": "sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==",
-      "dependencies": {
-        "tslib": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "peerDependencies": {
-        "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
-        "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
-      },
-      "peerDependenciesMeta": {
-        "@types/react": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/use-immer": {
-      "version": "0.7.0",
-      "resolved": "https://registry.npmjs.org/use-immer/-/use-immer-0.7.0.tgz",
-      "integrity": "sha512-Re4hjrP3a/2ABZjAc0b7AK9s626bnO+H33RO2VUhiDZ2StBz5B663K6WNNlr4QtHWaGUmvLpwt3whFvvWuolQw==",
-      "peerDependencies": {
-        "immer": ">=2.0.0",
-        "react": "^16.8.0 || ^17.0.1 || ^18.0.0"
-      }
-    },
-    "node_modules/use-sidecar": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz",
-      "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==",
-      "dependencies": {
-        "detect-node-es": "^1.1.0",
-        "tslib": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "peerDependencies": {
-        "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0",
-        "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
-      },
-      "peerDependenciesMeta": {
-        "@types/react": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/util": {
-      "version": "0.12.5",
-      "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz",
-      "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==",
-      "dependencies": {
-        "inherits": "^2.0.3",
-        "is-arguments": "^1.0.4",
-        "is-generator-function": "^1.0.7",
-        "is-typed-array": "^1.1.3",
-        "which-typed-array": "^1.1.2"
-      }
-    },
-    "node_modules/uuid": {
-      "version": "8.3.2",
-      "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
-      "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
-      "bin": {
-        "uuid": "dist/bin/uuid"
-      }
-    },
-    "node_modules/v8-compile-cache": {
-      "version": "2.4.0",
-      "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz",
-      "integrity": "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==",
-      "dev": true
-    },
-    "node_modules/which": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
-      "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
-      "dev": true,
-      "dependencies": {
-        "isexe": "^2.0.0"
-      },
-      "bin": {
-        "node-which": "bin/node-which"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/which-boxed-primitive": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
-      "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
-      "dev": true,
-      "dependencies": {
-        "is-bigint": "^1.0.1",
-        "is-boolean-object": "^1.1.0",
-        "is-number-object": "^1.0.4",
-        "is-string": "^1.0.5",
-        "is-symbol": "^1.0.3"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/which-builtin-type": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz",
-      "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==",
-      "dev": true,
-      "dependencies": {
-        "function.prototype.name": "^1.1.5",
-        "has-tostringtag": "^1.0.0",
-        "is-async-function": "^2.0.0",
-        "is-date-object": "^1.0.5",
-        "is-finalizationregistry": "^1.0.2",
-        "is-generator-function": "^1.0.10",
-        "is-regex": "^1.1.4",
-        "is-weakref": "^1.0.2",
-        "isarray": "^2.0.5",
-        "which-boxed-primitive": "^1.0.2",
-        "which-collection": "^1.0.1",
-        "which-typed-array": "^1.1.9"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/which-collection": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz",
-      "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==",
-      "dev": true,
-      "dependencies": {
-        "is-map": "^2.0.1",
-        "is-set": "^2.0.1",
-        "is-weakmap": "^2.0.1",
-        "is-weakset": "^2.0.1"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/which-typed-array": {
-      "version": "1.1.13",
-      "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz",
-      "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==",
-      "dependencies": {
-        "available-typed-arrays": "^1.0.5",
-        "call-bind": "^1.0.4",
-        "for-each": "^0.3.3",
-        "gopd": "^1.0.1",
-        "has-tostringtag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/wrappy": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
-      "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
-      "dev": true
-    },
-    "node_modules/yallist": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-      "dev": true
-    },
-    "node_modules/yaml": {
-      "version": "1.10.2",
-      "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
-      "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
-      "engines": {
-        "node": ">= 6"
-      }
-    }
-  }
-}
\ No newline at end of file
diff --git a/frontend/package.json b/frontend/package.json
deleted file mode 100644
index e177103..0000000
--- a/frontend/package.json
+++ /dev/null
@@ -1,46 +0,0 @@
-{
-  "name": "eventmesh-dashboard",
-  "version": "0.1.0",
-  "private": true,
-  "scripts": {
-    "dev": "next dev",
-    "build": "next build",
-    "export": "next export",
-    "start": "next start",
-    "lint": "eslint . --cache --fix --ext .ts,.tsx"
-  },
-  "dependencies": {
-    "@chakra-ui/icons": "^2.0.15",
-    "@chakra-ui/react": "^2.1.2",
-    "@emotion/react": "^11.9.0",
-    "@emotion/styled": "^11.8.1",
-    "@fontsource/inter": "^4.5.10",
-    "@monaco-editor/react": "^4.4.6",
-    "axios": "^0.27.2",
-    "cloudevents": "^6.0.2",
-    "framer-motion": "^6.3.6",
-    "immer": "^9.0.15",
-    "moment": "^2.29.4",
-    "next": "12.1.6",
-    "react": "18.1.0",
-    "react-dom": "18.1.0",
-    "react-icons": "^4.4.0",
-    "swr": "^1.3.0",
-    "use-immer": "^0.7.0"
-  },
-  "devDependencies": {
-    "@types/node": "17.0.38",
-    "@types/react": "18.0.10",
-    "@types/react-dom": "18.0.5",
-    "@typescript-eslint/eslint-plugin": "^5.4.0",
-    "@typescript-eslint/parser": "^5.4.0",
-    "eslint": "8.16.0",
-    "eslint-config-airbnb": "^19.0.1",
-    "eslint-config-airbnb-typescript": "^17.0.0",
-    "eslint-plugin-import": "^2.25.3",
-    "eslint-plugin-jsx-a11y": "^6.5.1",
-    "eslint-plugin-react": "^7.27.1",
-    "eslint-plugin-react-hooks": "^4.3.0",
-    "typescript": "4.7.2"
-  }
-}
diff --git a/frontend/pages/_app.tsx b/frontend/pages/_app.tsx
deleted file mode 100644
index 6095173..0000000
--- a/frontend/pages/_app.tsx
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-/* eslint-disable react/jsx-props-no-spreading */
-import '@fontsource/inter';
-import { ChakraProvider, extendTheme } from '@chakra-ui/react';
-import type { AppProps } from 'next/app';
-import Sidebar from '../components/navigation/Sidebar';
-import { AppProvider } from '../context/context';
-
-const theme = extendTheme({
-  initialColorMode: 'light',
-  useSystemColorMode: true,
-  fonts: {
-    heading: 'Inter, sans-serif',
-    body: 'Inter, sans-serif',
-  },
-});
-
-const Application = ({ Component, pageProps }: AppProps) => (
-  <ChakraProvider theme={theme}>
-    <AppProvider>
-      <Sidebar>
-        <Component {...pageProps} />
-      </Sidebar>
-    </AppProvider>
-  </ChakraProvider>
-);
-
-export default Application;
diff --git a/frontend/pages/_document.tsx b/frontend/pages/_document.tsx
deleted file mode 100644
index dd32fc0..0000000
--- a/frontend/pages/_document.tsx
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import { ColorModeScript } from '@chakra-ui/react';
-import NextDocument, {
-  Html, Head, Main, NextScript,
-} from 'next/document';
-
-export default class Document extends NextDocument {
-  render() {
-    return (
-      <Html lang="en">
-        <Head />
-        <body>
-          <ColorModeScript />
-          <Main />
-          <NextScript />
-        </body>
-      </Html>
-    );
-  }
-}
diff --git a/frontend/pages/event.tsx b/frontend/pages/event.tsx
deleted file mode 100644
index 8214d74..0000000
--- a/frontend/pages/event.tsx
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import Head from 'next/head';
-import type { NextPage } from 'next';
-import EventTable from '../components/event/EventTable';
-
-const Event: NextPage = () => (
-  <>
-    <Head>
-      <title>Event | Apache EventMesh Dashboard</title>
-    </Head>
-    <EventTable />
-  </>
-);
-
-export default Event;
diff --git a/frontend/pages/eventCatalogs.tsx b/frontend/pages/eventCatalogs.tsx
deleted file mode 100644
index f33d57e..0000000
--- a/frontend/pages/eventCatalogs.tsx
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import React, { useState, useEffect, useCallback } from 'react';
-import Head from 'next/head';
-import type { NextPage } from 'next';
-
-import {
-  Divider,
-  Button,
-  Flex,
-  Table,
-  Thead,
-  Tbody,
-  Tr,
-  Th,
-  Td,
-  TableContainer,
-  Box,
-  Spinner,
-  Text,
-} from '@chakra-ui/react';
-import { ChevronLeftIcon, ChevronRightIcon } from '@chakra-ui/icons';
-import axios from 'axios';
-import moment from 'moment';
-import Details from '../components/eventCatalogs/Details';
-import CreateCatalog from '../components/eventCatalogs/Create';
-import { EventCatalogType } from '../components/eventCatalogs/types';
-import { WorkflowStatusMap } from '../components/eventCatalogs/constant';
-
-const ApiRoot = process.env.NEXT_PUBLIC_EVENTCATALOG_API_ROOT;
-
-const EventCatalogs: NextPage = () => {
-  const [isShowCreate, setIsShowCreate] = useState(false);
-  const [curCatalog, setCurCatalog] = useState<EventCatalogType>();
-
-  const [catalogs, setCatalogs] = useState<EventCatalogType[]>([]);
-  const [total, setTotal] = useState(0);
-
-  const pageSize = 10;
-  const [isLoading, setIsLoading] = useState(true);
-  const [pageIndex, setPageIndex] = useState(1);
-
-  const [refreshFlag, setRefreshFlag] = useState<number>(+new Date());
-
-  const getEventCatalogs = useCallback(async () => {
-    setIsLoading(true);
-    try {
-      const { data } = await axios.get<{
-        total: number;
-        events: EventCatalogType[];
-      }>(`${ApiRoot}/catalog`, {
-        params: { page: pageIndex, size: pageSize },
-      });
-      setCatalogs(data.events);
-      setTotal(data.total);
-      setIsLoading(false);
-    } catch (error) {
-      setIsLoading(false);
-    }
-  }, []);
-
-  useEffect(() => {
-    const controller = new AbortController();
-    getEventCatalogs();
-    return () => {
-      controller.abort();
-    };
-  }, [pageIndex, pageSize, refreshFlag]);
-
-  return (
-    <>
-      <Head>
-        <title>Event Catalogs | Apache EventMesh Dashboard</title>
-      </Head>
-      <Box
-        w="full"
-        h="full"
-        bg="white"
-        flexDirection="column"
-        borderWidth="1px"
-        borderRadius="md"
-        overflow="hidden"
-        p="6"
-      >
-        <Flex w="full" justifyContent="space-between" mt="2" mb="2">
-          <Button
-            size="md"
-            backgroundColor="#2a62ad"
-            color="white"
-            _hover={{ bg: '#dce5fe', color: '#2a62ad' }}
-            onClick={() => setIsShowCreate(true)}
-          >
-            Create Catalog
-          </Button>
-          <Button
-            size="md"
-            colorScheme="blue"
-            variant="ghost"
-            onClick={() => setRefreshFlag(+new Date())}
-          >
-            Refresh
-          </Button>
-        </Flex>
-        <Divider mt="15" mb="15" orientation="horizontal" />
-        <TableContainer>
-          <Table variant="simple">
-            <Thead>
-              <Tr>
-                {/* <Th>Catalog ID</Th> */}
-                <Th>Title</Th>
-                <Th>File Name</Th>
-                <Th>Version</Th>
-                <Th>Status</Th>
-                <Th>Created At</Th>
-                <Th>Updated At</Th>
-              </Tr>
-            </Thead>
-            <Tbody>
-              {catalogs.map((catalog) => (
-                <Tr key={catalog.id}>
-                  {/* <Td>
-                    <Button
-                      colorScheme="blue"
-                      variant="ghost"
-                      onClick={() => setCurCatalog(catalog)}
-                    >
-                      {catalog.id}
-                    </Button>
-                  </Td> */}
-                  <Td>
-                    <Button
-                      colorScheme="blue"
-                      variant="ghost"
-                      onClick={() => setCurCatalog(catalog)}
-                    >
-                      {catalog.title}
-                    </Button>
-                  </Td>
-                  <Td>{catalog.file_name}</Td>
-                  <Td>{catalog.version}</Td>
-                  <Td>{WorkflowStatusMap.get(catalog.status)}</Td>
-                  <Td>
-                    {moment(catalog.create_time).format('YYYY-MM-DD HH:mm:ss')}
-                  </Td>
-                  <Td>
-                    {moment(catalog.update_time).format('YYYY-MM-DD HH:mm:ss')}
-                  </Td>
-                </Tr>
-              ))}
-            </Tbody>
-          </Table>
-        </TableContainer>
-        <Flex mt={4} alignItems="center">
-          {isLoading ? (
-            <Spinner colorScheme="blue" size="sm" />
-          ) : (
-            <Text fontSize="sm" color="#909090">
-              {total}
-              {` catalog${total > 1 ? 's' : ''} in total, `}
-              {`page ${pageIndex} of ${Math.ceil(total / pageSize)}`}
-            </Text>
-          )}
-          <Flex flex={1} justifyContent="flex-end" align="center">
-            <Button
-              mr={2}
-              size="sm"
-              leftIcon={<ChevronLeftIcon />}
-              colorScheme="blue"
-              variant="outline"
-              disabled={pageIndex < 2}
-              onClick={() => setPageIndex(pageIndex - 1)}
-            >
-              Prev
-            </Button>
-            <Button
-              size="sm"
-              rightIcon={<ChevronRightIcon />}
-              colorScheme="blue"
-              variant="outline"
-              disabled={pageIndex >= Math.ceil(total / pageSize)}
-              onClick={() => setPageIndex(pageIndex + 1)}
-            >
-              Next
-            </Button>
-          </Flex>
-        </Flex>
-      </Box>
-      <Details
-        visible={Boolean(curCatalog)}
-        data={curCatalog}
-        onClose={() => setCurCatalog(undefined)}
-      />
-      <CreateCatalog
-        visible={isShowCreate}
-        onSucceed={() => {
-          setIsShowCreate(false);
-          setPageIndex(1);
-          setRefreshFlag(+new Date());
-        }}
-        onClose={() => setIsShowCreate(false)}
-      />
-    </>
-  );
-};
-
-export default EventCatalogs;
diff --git a/frontend/pages/grpc.tsx b/frontend/pages/grpc.tsx
deleted file mode 100644
index 8d68014..0000000
--- a/frontend/pages/grpc.tsx
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import Head from 'next/head';
-import type { NextPage } from 'next';
-import GrpcClientTable from '../components/client/GrpcClientTable';
-
-const GrpcClient: NextPage = () => (
-  <>
-    <Head>
-      <title>Grpc Client | Apache EventMesh Dashboard</title>
-    </Head>
-    <GrpcClientTable />
-  </>
-);
-
-export default GrpcClient;
diff --git a/frontend/pages/http.tsx b/frontend/pages/http.tsx
deleted file mode 100644
index 2d692d9..0000000
--- a/frontend/pages/http.tsx
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import Head from 'next/head';
-import type { NextPage } from 'next';
-import HTTPClientTable from '../components/client/HTTPClientTable';
-
-const HTTPClient: NextPage = () => (
-  <>
-    <Head>
-      <title>HTTP Client | Apache EventMesh Dashboard</title>
-    </Head>
-    <HTTPClientTable />
-  </>
-);
-
-export default HTTPClient;
diff --git a/frontend/pages/index.tsx b/frontend/pages/index.tsx
deleted file mode 100644
index 7077600..0000000
--- a/frontend/pages/index.tsx
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import Head from 'next/head';
-import type { NextPage } from 'next';
-import Endpoint from '../components/index/Endpoint';
-import Configuration from '../components/index/Configuration';
-
-const Index: NextPage = () => (
-  <>
-    <Head>
-      <title>Apache EventMesh Dashboard</title>
-    </Head>
-    <Endpoint />
-    <Configuration />
-  </>
-);
-
-export default Index;
diff --git a/frontend/pages/metrics.tsx b/frontend/pages/metrics.tsx
deleted file mode 100644
index 3793b64..0000000
--- a/frontend/pages/metrics.tsx
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import Head from 'next/head';
-import type { NextPage } from 'next';
-import MetricsTable from '../components/metrics/MetricsTable';
-
-const Metrics: NextPage = () => (
-  <>
-    <Head>
-      <title>Metrics | Apache EventMesh Dashboard</title>
-    </Head>
-    <MetricsTable />
-  </>
-);
-
-export default Metrics;
diff --git a/frontend/pages/registry.tsx b/frontend/pages/registry.tsx
deleted file mode 100644
index b2dd367..0000000
--- a/frontend/pages/registry.tsx
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import Head from 'next/head';
-import type { NextPage } from 'next';
-import RegistryTable from '../components/registry/RegistryTable';
-
-const Registry: NextPage = () => (
-  <>
-    <Head>
-      <title>Registry | Apache EventMesh Dashboard</title>
-    </Head>
-    <RegistryTable />
-  </>
-);
-
-export default Registry;
diff --git a/frontend/pages/tcp.tsx b/frontend/pages/tcp.tsx
deleted file mode 100644
index 93a4028..0000000
--- a/frontend/pages/tcp.tsx
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import Head from 'next/head';
-import type { NextPage } from 'next';
-import TCPClientTable from '../components/client/TCPClientTable';
-
-const TCPClient: NextPage = () => (
-  <>
-    <Head>
-      <title>TCP Client | Apache EventMesh Dashboard</title>
-    </Head>
-    <TCPClientTable />
-  </>
-);
-
-export default TCPClient;
diff --git a/frontend/pages/topic.tsx b/frontend/pages/topic.tsx
deleted file mode 100644
index 9023151..0000000
--- a/frontend/pages/topic.tsx
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import Head from 'next/head';
-import type { NextPage } from 'next';
-import TopicTable from '../components/topic/TopicTable';
-
-const Topic: NextPage = () => (
-  <>
-    <Head>
-      <title>Topic | Apache EventMesh Dashboard</title>
-    </Head>
-    <TopicTable />
-  </>
-);
-
-export default Topic;
diff --git a/frontend/pages/workflows.tsx b/frontend/pages/workflows.tsx
deleted file mode 100644
index 29fd982..0000000
--- a/frontend/pages/workflows.tsx
+++ /dev/null
@@ -1,375 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import React, {
-  useCallback, useEffect, useState, useRef,
-} from 'react';
-import Head from 'next/head';
-import type { NextPage } from 'next';
-import moment from 'moment';
-import {
-  ChevronLeftIcon,
-  ChevronRightIcon,
-  WarningTwoIcon,
-} from '@chakra-ui/icons';
-
-import {
-  Divider,
-  Button,
-  Flex,
-  Input,
-  Stack,
-  // Select,
-  Table,
-  Thead,
-  Tbody,
-  Tr,
-  Th,
-  Td,
-  TableContainer,
-  Text,
-  AlertDialog,
-  AlertDialogOverlay,
-  AlertDialogContent,
-  AlertDialogHeader,
-  AlertDialogBody,
-  AlertDialogFooter,
-  useToast,
-  Box,
-  Spinner,
-} from '@chakra-ui/react';
-import axios from 'axios';
-import Details from '../components/workflow/Details';
-import Create from '../components/workflow/Create';
-import { WorkflowType } from '../components/workflow/types';
-// import { WorkflowStatusMap } from '../components/workflow/constant';
-
-const ApiRoot = process.env.NEXT_PUBLIC_WORKFLOW_API_ROOT;
-
-const Workflows: NextPage = () => {
-  const toast = useToast();
-
-  const [isLoading, setIsLoading] = useState(true);
-  const [workflows, setWorkflows] = useState<WorkflowType[]>([]);
-  const [total, setTotal] = useState(0);
-  const [keywordFilter, setKeywordFilter] = useState('');
-  const [statusFilter, setStatusFilter] = useState('any');
-  const [pageIndex, setPageIndex] = useState(1);
-  const pageSize = 10;
-  const [refreshFlag, setRefreshFlag] = useState<number>(+new Date());
-  const [isShowCreate, setIsShowCreate] = useState(false);
-  const [isShowDetails, setIsShowDetails] = useState(false);
-  const [isShowCancelConfirm, setIsShowCancelComfirm] = useState(false);
-  const cancelRef = useRef(null);
-
-  const [selectedWorkflow, setSelectedWorkflow] = useState<WorkflowType | null>(
-    null,
-  );
-
-  const onDelete = () => {
-    axios
-      .delete(`${ApiRoot}/workflow/${selectedWorkflow?.workflow_id}`)
-      .then(() => {
-        toast({
-          title: 'Workflow has been deleted',
-          description: (
-            <Box>
-              <Text>{`Workflow ID: ${selectedWorkflow?.workflow_id}`}</Text>
-              <Text>{`Workflow Name: ${selectedWorkflow?.workflow_name}`}</Text>
-            </Box>
-          ),
-          status: 'success',
-          position: 'top-right',
-        });
-        setIsShowCancelComfirm(false);
-        setSelectedWorkflow(null);
-        setRefreshFlag(+new Date());
-      })
-      .catch((error) => {
-        setIsShowCancelComfirm(false);
-        toast({
-          title: 'Failed to delete',
-          description: error.response.data,
-          status: 'error',
-          position: 'top-right',
-        });
-      });
-  };
-
-  const getWorkflows = useCallback(async () => {
-    setIsLoading(true);
-    try {
-      const reqParams: {
-        page: number;
-        size: number;
-        workflow_id?: string;
-        status?: string;
-      } = {
-        page: pageIndex,
-        size: pageSize,
-      };
-      // if (statusFilter) {
-      //   reqParams.status = statusFilter;
-      // }
-      if (keywordFilter) {
-        reqParams.workflow_id = keywordFilter;
-      }
-      const { data } = await axios.get<{
-        total: number;
-        workflows: WorkflowType[];
-      }>(`${ApiRoot}/workflow`, {
-        params: reqParams,
-      });
-      setWorkflows(data.workflows);
-      setTotal(data.total);
-      setIsLoading(false);
-    } catch (error) {
-      setIsLoading(false);
-    }
-  }, [pageIndex, pageSize, keywordFilter, statusFilter, refreshFlag]);
-
-  useEffect(() => {
-    const controller = new AbortController();
-    getWorkflows();
-    return () => {
-      controller.abort();
-    };
-  }, [pageIndex, pageSize, keywordFilter, statusFilter, refreshFlag]);
-
-  return (
-    <>
-      <Head>
-        <title>Workflows | Apache EventMesh Dashboard</title>
-      </Head>
-      <Flex
-        w="full"
-        h="full"
-        bg="white"
-        flexDirection="column"
-        borderWidth="1px"
-        borderRadius="md"
-        overflow="hidden"
-        p="6"
-      >
-        <Flex w="full" justifyContent="space-between" mt="2" mb="2">
-          <Button
-            size="md"
-            backgroundColor="#2a62ad"
-            color="white"
-            _hover={{ bg: '#dce5fe', color: '#2a62ad' }}
-            onClick={() => setIsShowCreate(true)}
-          >
-            Create Workflow
-          </Button>
-          <Stack direction="row" spacing="2">
-            <Input
-              size="md"
-              placeholder="Workflow ID"
-              value={keywordFilter}
-              onChange={(evt) => setKeywordFilter(evt.target.value)}
-            />
-            {/* <Select
-              size="md"
-              placeholder="Status"
-              value={statusFilter}
-              onChange={(event) => setStatusFilter(event.target.value)}
-            >
-              <option value="1">Running</option>
-              <option value="-1">Deleted</option>
-            </Select> */}
-            <Box>
-              <Button
-                colorScheme="blue"
-                variant="ghost"
-                onClick={() => setRefreshFlag(+new Date())}
-              >
-                Refresh
-              </Button>
-            </Box>
-          </Stack>
-        </Flex>
-        <Divider mt="15" mb="15" orientation="horizontal" />
-        <TableContainer>
-          <Table variant="simple">
-            <Thead>
-              <Tr>
-                <Th>Workflow ID</Th>
-                <Th>Workflow Name</Th>
-                {/* <Th>Status</Th> */}
-                <Th isNumeric>Total Instance</Th>
-                <Th isNumeric>Running</Th>
-                <Th isNumeric>Failed</Th>
-                <Th>Updated at</Th>
-                <Th>Created At</Th>
-                <Th>Actions</Th>
-              </Tr>
-            </Thead>
-            <Tbody>
-              {workflows.map((workflow) => (
-                <Tr key={workflow.workflow_id}>
-                  <Td>
-                    <Button
-                      size="sm"
-                      colorScheme="blue"
-                      variant="ghost"
-                      onClick={() => {
-                        setIsShowDetails(true);
-                        setSelectedWorkflow(workflow);
-                      }}
-                    >
-                      {workflow.workflow_id}
-                    </Button>
-                  </Td>
-                  <Td>{workflow.workflow_name}</Td>
-
-                  {/* <Td>{WorkflowStatusMap.get(workflow.status)}</Td> */}
-                  <Td isNumeric>{workflow.total_instances}</Td>
-                  <Td isNumeric>{workflow.total_running_instances}</Td>
-                  <Td isNumeric>{workflow.total_failed_instances}</Td>
-                  <Td>
-                    {moment(workflow.update_time).format('YYYY-MM-DD HH:mm:ss')}
-                  </Td>
-                  <Td>
-                    {moment(workflow.create_time).format('YYYY-MM-DD HH:mm:ss')}
-                  </Td>
-                  <Td>
-                    <Button
-                      size="sm"
-                      colorScheme="blue"
-                      variant="ghost"
-                      onClick={() => {
-                        setSelectedWorkflow(workflow);
-                        setIsShowCancelComfirm(true);
-                      }}
-                    >
-                      Delete
-                    </Button>
-                  </Td>
-                </Tr>
-              ))}
-            </Tbody>
-          </Table>
-        </TableContainer>
-        <Flex mt={4} alignItems="center">
-          {isLoading ? (
-            <Spinner colorScheme="blue" size="sm" />
-          ) : (
-            <Text fontSize="sm" color="#909090">
-              {total}
-              {` workflow${total > 1 ? 's' : ''} in total, `}
-              {`page ${pageIndex} of ${Math.ceil(total / pageSize)}`}
-            </Text>
-          )}
-          <Flex flex={1} justifyContent="flex-end" align="center">
-            <Button
-              mr={2}
-              size="sm"
-              leftIcon={<ChevronLeftIcon />}
-              colorScheme="blue"
-              variant="outline"
-              disabled={pageIndex < 2}
-              onClick={() => setPageIndex(pageIndex - 1)}
-            >
-              Prev
-            </Button>
-            <Button
-              size="sm"
-              rightIcon={<ChevronRightIcon />}
-              colorScheme="blue"
-              variant="outline"
-              disabled={pageIndex >= Math.ceil(total / pageSize)}
-              onClick={() => setPageIndex(pageIndex + 1)}
-            >
-              Next
-            </Button>
-          </Flex>
-        </Flex>
-      </Flex>
-
-      <AlertDialog
-        leastDestructiveRef={cancelRef}
-        isOpen={isShowCancelConfirm}
-        onClose={() => setIsShowCancelComfirm(false)}
-      >
-        <AlertDialogOverlay>
-          <AlertDialogContent>
-            <AlertDialogHeader fontSize="lg" fontWeight="bold">
-              <Flex alignItems="center">
-                <WarningTwoIcon mr={2} boxSize={6} color="orange" />
-                <Text fontSize="xl" as="b">
-                  Confirm
-                </Text>
-              </Flex>
-            </AlertDialogHeader>
-
-            <AlertDialogBody>
-              Are you sure to delete
-              {' '}
-              <Text fontSize="sm" as="b">
-                {selectedWorkflow?.workflow_name}
-              </Text>
-              ?
-              <Box />
-            </AlertDialogBody>
-
-            <AlertDialogFooter>
-              <Button
-                ref={cancelRef}
-                onClick={() => {
-                  setIsShowCancelComfirm(false);
-                  setSelectedWorkflow(null);
-                }}
-              >
-                No
-              </Button>
-              <Button colorScheme="blue" onClick={() => onDelete()} ml={3}>
-                Delete
-              </Button>
-            </AlertDialogFooter>
-          </AlertDialogContent>
-        </AlertDialogOverlay>
-      </AlertDialog>
-
-      <Details
-        visible={isShowDetails}
-        data={selectedWorkflow}
-        onSaved={() => {
-          setIsShowDetails(false);
-          setRefreshFlag(+new Date());
-        }}
-        onClose={() => {
-          setIsShowDetails(false);
-          setSelectedWorkflow(null);
-        }}
-      />
-
-      <Create
-        visible={isShowCreate}
-        onSucceed={() => {
-          setIsShowCreate(false);
-          setPageIndex(1);
-          setRefreshFlag(+new Date());
-        }}
-        onClose={() => setIsShowCreate(false)}
-      />
-    </>
-  );
-};
-
-export default Workflows;
diff --git a/frontend/public/favicon.ico b/frontend/public/favicon.ico
deleted file mode 100644
index 718d6fe..0000000
--- a/frontend/public/favicon.ico
+++ /dev/null
Binary files differ
diff --git a/frontend/static/images/logo.png b/frontend/static/images/logo.png
deleted file mode 100644
index e854551..0000000
--- a/frontend/static/images/logo.png
+++ /dev/null
Binary files differ
diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json
deleted file mode 100644
index 99710e8..0000000
--- a/frontend/tsconfig.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
-  "compilerOptions": {
-    "target": "es5",
-    "lib": ["dom", "dom.iterable", "esnext"],
-    "allowJs": true,
-    "skipLibCheck": true,
-    "strict": true,
-    "forceConsistentCasingInFileNames": true,
-    "noEmit": true,
-    "esModuleInterop": true,
-    "module": "esnext",
-    "moduleResolution": "node",
-    "resolveJsonModule": true,
-    "isolatedModules": true,
-    "jsx": "preserve",
-    "incremental": true
-  },
-  "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
-  "exclude": ["node_modules"]
-}
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
deleted file mode 100644
index 033e24c..0000000
--- a/gradle/wrapper/gradle-wrapper.jar
+++ /dev/null
Binary files differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
deleted file mode 100644
index 2b303b2..0000000
--- a/gradle/wrapper/gradle-wrapper.properties
+++ /dev/null
@@ -1,24 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-distributionBase=GRADLE_USER_HOME
-distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.2.1-bin.zip
-networkTimeout=10000
-validateDistributionUrl=true
-zipStoreBase=GRADLE_USER_HOME
-zipStorePath=wrapper/dists
diff --git a/gradlew b/gradlew
deleted file mode 100644
index fcb6fca..0000000
--- a/gradlew
+++ /dev/null
@@ -1,248 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright © 2015-2021 the original authors.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      https://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-##############################################################################
-#
-#   Gradle start up script for POSIX generated by Gradle.
-#
-#   Important for running:
-#
-#   (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
-#       noncompliant, but you have some other compliant shell such as ksh or
-#       bash, then to run this script, type that shell name before the whole
-#       command line, like:
-#
-#           ksh Gradle
-#
-#       Busybox and similar reduced shells will NOT work, because this script
-#       requires all of these POSIX shell features:
-#         * functions;
-#         * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
-#           «${var#prefix}», «${var%suffix}», and «$( cmd )»;
-#         * compound commands having a testable exit status, especially «case»;
-#         * various built-in commands including «command», «set», and «ulimit».
-#
-#   Important for patching:
-#
-#   (2) This script targets any POSIX shell, so it avoids extensions provided
-#       by Bash, Ksh, etc; in particular arrays are avoided.
-#
-#       The "traditional" practice of packing multiple parameters into a
-#       space-separated string is a well documented source of bugs and security
-#       problems, so this is (mostly) avoided, by progressively accumulating
-#       options in "$@", and eventually passing that to Java.
-#
-#       Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
-#       and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
-#       see the in-line comments for details.
-#
-#       There are tweaks for specific operating systems such as AIX, CygWin,
-#       Darwin, MinGW, and NonStop.
-#
-#   (3) This script is generated from the Groovy template
-#       https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
-#       within the Gradle project.
-#
-#       You can find Gradle at https://github.com/gradle/gradle/.
-#
-##############################################################################
-
-# Attempt to set APP_HOME
-
-# Resolve links: $0 may be a link
-app_path=$0
-
-# Need this for daisy-chained symlinks.
-while
-    APP_HOME=${app_path%"${app_path##*/}"}  # leaves a trailing /; empty if no leading path
-    [ -h "$app_path" ]
-do
-    ls=$( ls -ld "$app_path" )
-    link=${ls#*' -> '}
-    case $link in             #(
-      /*)   app_path=$link ;; #(
-      *)    app_path=$APP_HOME$link ;;
-    esac
-done
-
-# This is normally unused
-# shellcheck disable=SC2034
-APP_BASE_NAME=${0##*/}
-APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
-
-# Use the maximum available, or set MAX_FD != -1 to use that value.
-MAX_FD=maximum
-
-warn () {
-    echo "$*"
-} >&2
-
-die () {
-    echo
-    echo "$*"
-    echo
-    exit 1
-} >&2
-
-# OS specific support (must be 'true' or 'false').
-cygwin=false
-msys=false
-darwin=false
-nonstop=false
-case "$( uname )" in                #(
-  CYGWIN* )         cygwin=true  ;; #(
-  Darwin* )         darwin=true  ;; #(
-  MSYS* | MINGW* )  msys=true    ;; #(
-  NONSTOP* )        nonstop=true ;;
-esac
-
-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
-
-
-# Determine the Java command to use to start the JVM.
-if [ -n "$JAVA_HOME" ] ; then
-    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
-        # IBM's JDK on AIX uses strange locations for the executables
-        JAVACMD=$JAVA_HOME/jre/sh/java
-    else
-        JAVACMD=$JAVA_HOME/bin/java
-    fi
-    if [ ! -x "$JAVACMD" ] ; then
-        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
-    fi
-else
-    JAVACMD=java
-    if ! command -v java >/dev/null 2>&1
-    then
-        die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
-    fi
-fi
-
-# Increase the maximum file descriptors if we can.
-if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
-    case $MAX_FD in #(
-      max*)
-        # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
-        # shellcheck disable=SC3045
-        MAX_FD=$( ulimit -H -n ) ||
-            warn "Could not query maximum file descriptor limit"
-    esac
-    case $MAX_FD in  #(
-      '' | soft) :;; #(
-      *)
-        # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
-        # shellcheck disable=SC3045
-        ulimit -n "$MAX_FD" ||
-            warn "Could not set maximum file descriptor limit to $MAX_FD"
-    esac
-fi
-
-# Collect all arguments for the java command, stacking in reverse order:
-#   * args from the command line
-#   * the main class name
-#   * -classpath
-#   * -D...appname settings
-#   * --module-path (only if needed)
-#   * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
-
-# For Cygwin or MSYS, switch paths to Windows format before running java
-if "$cygwin" || "$msys" ; then
-    APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
-    CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
-
-    JAVACMD=$( cygpath --unix "$JAVACMD" )
-
-    # Now convert the arguments - kludge to limit ourselves to /bin/sh
-    for arg do
-        if
-            case $arg in                                #(
-              -*)   false ;;                            # don't mess with options #(
-              /?*)  t=${arg#/} t=/${t%%/*}              # looks like a POSIX filepath
-                    [ -e "$t" ] ;;                      #(
-              *)    false ;;
-            esac
-        then
-            arg=$( cygpath --path --ignore --mixed "$arg" )
-        fi
-        # Roll the args list around exactly as many times as the number of
-        # args, so each arg winds up back in the position where it started, but
-        # possibly modified.
-        #
-        # NB: a `for` loop captures its iteration list before it begins, so
-        # changing the positional parameters here affects neither the number of
-        # iterations, nor the values presented in `arg`.
-        shift                   # remove old arg
-        set -- "$@" "$arg"      # push replacement arg
-    done
-fi
-
-
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
-
-# Collect all arguments for the java command;
-#   * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
-#     shell script including quotes and variable substitutions, so put them in
-#     double quotes to make sure that they get re-expanded; and
-#   * put everything else in single quotes, so that it's not re-expanded.
-
-set -- \
-        "-Dorg.gradle.appname=$APP_BASE_NAME" \
-        -classpath "$CLASSPATH" \
-        org.gradle.wrapper.GradleWrapperMain \
-        "$@"
-
-# Stop when "xargs" is not available.
-if ! command -v xargs >/dev/null 2>&1
-then
-    die "xargs is not available"
-fi
-
-# Use "xargs" to parse quoted args.
-#
-# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
-#
-# In Bash we could simply go:
-#
-#   readarray ARGS < <( xargs -n1 <<<"$var" ) &&
-#   set -- "${ARGS[@]}" "$@"
-#
-# but POSIX shell has neither arrays nor command substitution, so instead we
-# post-process each arg (as a line of input to sed) to backslash-escape any
-# character that might be a shell metacharacter, then use eval to reverse
-# that process (while maintaining the separation between arguments), and wrap
-# the whole thing up as a single "set" statement.
-#
-# This will of course break if any of these variables contains a newline or
-# an unmatched quote.
-#
-
-eval "set -- $(
-        printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
-        xargs -n1 |
-        sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
-        tr '\n' ' '
-    )" '"$@"'
-
-exec "$JAVACMD" "$@"
diff --git a/gradlew.bat b/gradlew.bat
deleted file mode 100644
index 93e3f59..0000000
--- a/gradlew.bat
+++ /dev/null
@@ -1,92 +0,0 @@
-@rem
-@rem Copyright 2015 the original author or authors.
-@rem
-@rem Licensed under the Apache License, Version 2.0 (the "License");
-@rem you may not use this file except in compliance with the License.
-@rem You may obtain a copy of the License at
-@rem
-@rem      https://www.apache.org/licenses/LICENSE-2.0
-@rem
-@rem Unless required by applicable law or agreed to in writing, software
-@rem distributed under the License is distributed on an "AS IS" BASIS,
-@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-@rem See the License for the specific language governing permissions and
-@rem limitations under the License.
-@rem
-
-@if "%DEBUG%"=="" @echo off
-@rem ##########################################################################
-@rem
-@rem  Gradle startup script for Windows
-@rem
-@rem ##########################################################################
-
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
-
-set DIRNAME=%~dp0
-if "%DIRNAME%"=="" set DIRNAME=.
-@rem This is normally unused
-set APP_BASE_NAME=%~n0
-set APP_HOME=%DIRNAME%
-
-@rem Resolve any "." and ".." in APP_HOME to make it shorter.
-for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
-
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
-
-@rem Find java.exe
-if defined JAVA_HOME goto findJavaFromJavaHome
-
-set JAVA_EXE=java.exe
-%JAVA_EXE% -version >NUL 2>&1
-if %ERRORLEVEL% equ 0 goto execute
-
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:findJavaFromJavaHome
-set JAVA_HOME=%JAVA_HOME:"=%
-set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-
-if exist "%JAVA_EXE%" goto execute
-
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:execute
-@rem Setup the command line
-
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
-
-
-@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
-
-:end
-@rem End local scope for the variables with windows NT shell
-if %ERRORLEVEL% equ 0 goto mainEnd
-
-:fail
-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
-rem the _cmd.exe /c_ return code!
-set EXIT_CODE=%ERRORLEVEL%
-if %EXIT_CODE% equ 0 set EXIT_CODE=1
-if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
-exit /b %EXIT_CODE%
-
-:mainEnd
-if "%OS%"=="Windows_NT" endlocal
-
-:omega
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..0fae672
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+
+-->
+
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+
+  <modelVersion>4.0.0</modelVersion>
+  <packaging>pom</packaging>
+
+  <parent>
+    <groupId>org.apache</groupId>
+    <artifactId>apache</artifactId>
+    <version>23</version>
+  </parent>
+
+  <groupId>org.apache.eventmesh.dashboard</groupId>
+  <artifactId>eventmesh-dashboard</artifactId>
+
+  <version>0.0.1</version>
+
+  <name>eventmesh-dashboard</name>
+  <description>eventmesh-dashboard</description>
+  <url>https://github.com/apache/pulsar</url>
+
+  <organization>
+    <name>Apache Software Foundation</name>
+    <url>http://www.apache.org/</url>
+  </organization>
+  <inceptionYear>2017</inceptionYear>
+
+  <developers>
+    <developer>
+      <organization>Apache eventmesh developers</organization>
+      <organizationUrl>http://eventmesh.apache.org/</organizationUrl>
+    </developer>
+  </developers>
+
+  <licenses>
+    <license>
+      <name>Apache License, Version 2.0</name>
+      <url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
+      <distribution>repo</distribution>
+    </license>
+  </licenses>
+    <scm>
+    <url>https://github.com/apache/eventmesh-dashboard</url>
+    <connection>scm:git:https://github.com/apache/eventmesh-dashboard.git</connection>
+    <developerConnection>scm:git:ssh://git@github.com:apache/eventmesh-dashboard.git</developerConnection>
+  </scm>
+
+  <ciManagement>
+    <system>GitHub Actions</system>
+    <url>https://github.com/apache/puleventmesh-dashboardsar/actions</url>
+  </ciManagement>
+
+  <issueManagement>
+    <system>Github</system>
+    <url>https://github.com/apache/eventmesh-dashboard/issues</url>
+  </issueManagement>
+
+  <properties>
+    <maven.compiler.source>17</maven.compiler.source>
+    <maven.compiler.target>17</maven.compiler.target>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+
+  </properties>
+  <modules>
+    <module>eventmesh-dashboard-console</module>
+    <module>eventmesh-dashboard-observe</module>
+    <module>eventmesh-dashboard-core</module>
+    <module>eventmesh-dashboard-service</module>
+    <module>eventmesh-dashboard-common</module>
+  </modules>
+
+
+</project>
\ No newline at end of file
diff --git a/settings.gradle b/settings.gradle
deleted file mode 100644
index 9fc3649..0000000
--- a/settings.gradle
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-rootProject.name = 'eventmesh-dashboard'
diff --git a/src/main/java/org/apache/eventmesh/dashboard/EventMeshDashboardApplication.java b/src/main/java/org/apache/eventmesh/dashboard/EventMeshDashboardApplication.java
deleted file mode 100644
index 60d6125..0000000
--- a/src/main/java/org/apache/eventmesh/dashboard/EventMeshDashboardApplication.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.eventmesh.dashboard;
-
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-
-@SpringBootApplication
-public class EventMeshDashboardApplication {
-
-    public static void main(String[] args) {
-        SpringApplication.run(EventMeshDashboardApplication.class, args);
-    }
-
-}
diff --git a/src/main/java/org/apache/eventmesh/dashboard/config/AdminProperties.java b/src/main/java/org/apache/eventmesh/dashboard/config/AdminProperties.java
deleted file mode 100644
index efcb74c..0000000
--- a/src/main/java/org/apache/eventmesh/dashboard/config/AdminProperties.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.eventmesh.dashboard.config;
-
-import org.apache.eventmesh.dashboard.constant.ConfigConst;
-
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.stereotype.Component;
-
-import lombok.Data;
-
-@Data
-@Component
-@ConfigurationProperties(prefix = ConfigConst.ADMIN_PROPS_PREFIX)
-public class AdminProperties {
-
-    private MetaProperties meta = new MetaProperties();
-    private StoreProperties store = new StoreProperties();
-
-    @Data
-    public static class MetaProperties {
-
-        private String type = ConfigConst.META_TYPE_NACOS;
-        private NacosProperties nacos = new NacosProperties();
-        private EtcdProperties etcd = new EtcdProperties();
-        private int timeoutMs = 5000;
-
-        @Data
-        public static class NacosProperties {
-            private String addr = "127.0.0.1:8848";
-            private String namespace = "";
-            private boolean authEnabled = false;
-            private String protocol = "http";
-            private String username;
-            private String password;
-            private String accessKey;
-            private String secretKey;
-        }
-
-        @Data
-        public static class EtcdProperties {
-            private String addr;
-        }
-    }
-
-    @Data
-    public static class StoreProperties {
-
-        private String type = ConfigConst.STORE_TYPE_ROCKETMQ; // TODO should be standalone
-        private RocketMQProperties rocketmq = new RocketMQProperties();
-        private KafkaProperties kafka = new KafkaProperties();
-
-        @Data
-        public static class RocketMQProperties {
-            private String namesrvAddr;
-            private String clusterName = "";
-            private String accessKey = "";
-            private String secretKey = "";
-        }
-
-        @Data
-        public static class KafkaProperties {
-            private String namesrvAddr;
-            private int partitions = 1;
-            private int replicationFactors = 1;
-        }
-    }
-}
\ No newline at end of file
diff --git a/src/main/java/org/apache/eventmesh/dashboard/config/BeanTypeConfig.java b/src/main/java/org/apache/eventmesh/dashboard/config/BeanTypeConfig.java
deleted file mode 100644
index 3a169f7..0000000
--- a/src/main/java/org/apache/eventmesh/dashboard/config/BeanTypeConfig.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.eventmesh.dashboard.config;
-
-import org.apache.eventmesh.dashboard.constant.ConfigConst;
-import org.apache.eventmesh.dashboard.service.ConnectionService;
-import org.apache.eventmesh.dashboard.service.SubscriptionService;
-import org.apache.eventmesh.dashboard.service.TopicService;
-import org.apache.eventmesh.dashboard.service.meta.EtcdConnectionService;
-import org.apache.eventmesh.dashboard.service.meta.EtcdSubscriptionService;
-import org.apache.eventmesh.dashboard.service.meta.NacosConnectionService;
-import org.apache.eventmesh.dashboard.service.meta.NacosSubscriptionService;
-import org.apache.eventmesh.dashboard.service.store.RocketmqTopicService;
-
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-/**
- * Use different registry SDK depending on the configured meta type;
- * Use different storage SDK depending on the configured storage type.
- */
-@Configuration
-public class BeanTypeConfig {
-
-    private final AdminProperties adminProperties;
-
-    public BeanTypeConfig(AdminProperties adminProperties) {
-        this.adminProperties = adminProperties;
-    }
-
-    @Bean
-    public ConnectionService connectionService() {
-        switch (adminProperties.getMeta().getType()) {
-            case ConfigConst.META_TYPE_NACOS:
-                return new NacosConnectionService(adminProperties);
-            case ConfigConst.META_TYPE_ETCD:
-                return new EtcdConnectionService();
-            default:
-                throw new IllegalArgumentException("Unsupported EventMesh Meta type: " + adminProperties.getMeta().getType());
-        }
-    }
-
-    @Bean
-    public SubscriptionService subscriptionService() {
-        switch (adminProperties.getMeta().getType()) {
-            case ConfigConst.META_TYPE_NACOS:
-                return new NacosSubscriptionService(adminProperties);
-            case ConfigConst.META_TYPE_ETCD:
-                return new EtcdSubscriptionService();
-            default:
-                throw new IllegalArgumentException("Unsupported EventMesh Meta type: " + adminProperties.getMeta().getType());
-        }
-    }
-
-    @Bean
-    public TopicService topicService() {
-        switch (adminProperties.getStore().getType()) {
-            case ConfigConst.STORE_TYPE_STANDALONE:
-                return null; // TODO StandaloneTopicService
-            case ConfigConst.STORE_TYPE_ROCKETMQ:
-                return new RocketmqTopicService(adminProperties);
-            case ConfigConst.STORE_TYPE_KAFKA:
-                return null; // TODO KafkaTopicService
-            default:
-                throw new IllegalArgumentException("Unsupported EventMesh Store type: " + adminProperties.getStore().getType());
-        }
-    }
-}
\ No newline at end of file
diff --git a/src/main/java/org/apache/eventmesh/dashboard/constant/ConfigConst.java b/src/main/java/org/apache/eventmesh/dashboard/constant/ConfigConst.java
deleted file mode 100644
index 4932adf..0000000
--- a/src/main/java/org/apache/eventmesh/dashboard/constant/ConfigConst.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.eventmesh.dashboard.constant;
-
-public class ConfigConst {
-
-    // yml config
-    public static final String ADMIN_PROPS_PREFIX = "eventmesh";
-    public static final String META_TYPE_NACOS = "nacos";
-    public static final String META_TYPE_ETCD = "etcd";
-    public static final String STORE_TYPE_STANDALONE = "standalone";
-    public static final String STORE_TYPE_ROCKETMQ = "rocketmq";
-    public static final String STORE_TYPE_KAFKA = "kafka";
-
-    // Open-API
-    public static final String HTTP_PREFIX = "http://";
-    public static final String HTTPS_PREFIX = "https://";
-
-    // common
-    /**
-     * colon with space
-     */
-    public static final String COLON = ": ";
-
-}
diff --git a/src/main/java/org/apache/eventmesh/dashboard/constant/NacosConst.java b/src/main/java/org/apache/eventmesh/dashboard/constant/NacosConst.java
deleted file mode 100644
index d0b027e..0000000
--- a/src/main/java/org/apache/eventmesh/dashboard/constant/NacosConst.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.eventmesh.dashboard.constant;
-
-public class NacosConst {
-
-    public static final String LOGIN_API = "/nacos/v1/auth/login";
-
-    public static final String LOGIN_REQ_USERNAME = "username";
-    public static final String LOGIN_REQ_PASSWORD = "password";
-
-    public static final String LOGIN_RESP_TOKEN = "accessToken";
-
-    public static final String CONFIGS_API = "/nacos/v1/cs/configs";
-
-    public static final String CONFIGS_REQ_PAGE = "pageNo";
-    public static final String CONFIGS_REQ_PAGE_SIZE = "pageSize";
-    public static final String CONFIGS_REQ_DATAID = "dataId";
-    public static final String CONFIGS_REQ_GROUP = "group";
-    public static final String CONFIGS_REQ_SEARCH = "search";
-    public static final String CONFIGS_REQ_TOKEN = "accessToken";
-
-    public static final String CONFIGS_RESP_CONTENT_LIST = "pageItems"; // json page data list field
-    public static final String CONFIGS_RESP_CONTENT = "content"; // json page data field
-    public static final String CONFIGS_RESP_PAGES = "pagesAvailable"; // json total pages field
-    public static final String CONFIGS_RESP_DATAID = "dataId";
-    public static final String CONFIGS_RESP_GROUP = "group";
-}
diff --git a/src/main/java/org/apache/eventmesh/dashboard/controller/ConnectionController.java b/src/main/java/org/apache/eventmesh/dashboard/controller/ConnectionController.java
deleted file mode 100644
index b723e66..0000000
--- a/src/main/java/org/apache/eventmesh/dashboard/controller/ConnectionController.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.eventmesh.dashboard.controller;
-
-import org.apache.eventmesh.dashboard.service.ConnectionService;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-
-import lombok.extern.slf4j.Slf4j;
-
-@Slf4j
-@RestController
-public class ConnectionController {
-
-    @Autowired
-    ConnectionService connectionService;
-
-    /**
-     * Query Connection List
-     * <p>
-     * The subscription information of SourceConnector and SinkConnector reported by EventMesh Runtime to the meta,
-     * containing the configuration of each connection.
-     *
-     * @param page the page number
-     * @param size the page size
-     * @return A paged list of connection configuration and total number of pages
-     */
-    @GetMapping("/connection")
-    public String listConnections(@RequestParam("page") Integer page, @RequestParam("size") String size) {
-        return null;
-    }
-
-}
diff --git a/src/main/java/org/apache/eventmesh/dashboard/controller/SubscriptionController.java b/src/main/java/org/apache/eventmesh/dashboard/controller/SubscriptionController.java
deleted file mode 100644
index 0ae0091..0000000
--- a/src/main/java/org/apache/eventmesh/dashboard/controller/SubscriptionController.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.eventmesh.dashboard.controller;
-
-import org.apache.eventmesh.dashboard.dto.Result;
-import org.apache.eventmesh.dashboard.model.SubscriptionInfo;
-import org.apache.eventmesh.dashboard.service.SubscriptionService;
-
-import java.util.List;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-
-@RestController
-@RequestMapping("/api/v1")
-public class SubscriptionController {
-
-    @Autowired
-    SubscriptionService subscriptionService;
-
-    // the subscription dataId naming pattern of EventMesh clients: ip-protocol
-    private static final String CLIENT_DATA_ID_PATTERN = "*.*.*.*-*";
-
-    /**
-     * Retrieve the config content of a specified config.
-     *
-     * @param dataId nacos config data id (Exact Matching)
-     * @param group  config group (Exact Matching)
-     * @return config content
-     */
-    @GetMapping("/subscription")
-    public Result<String> retrieveSubscription(@RequestParam("dataId") String dataId, @RequestParam("group") String group) {
-        return Result.success(subscriptionService.retrieveConfig(dataId, group));
-    }
-
-    /**
-     * Retrieve a list of configs.
-     *
-     * @param page page number
-     * @param size page size
-     * @param dataId nacos config data id (Fuzzy Matching)
-     * @param group config group (Fuzzy Matching)
-     * @return config properties and base64 encoded config content
-     */
-    @GetMapping("/subscriptions")
-    public Result<List<SubscriptionInfo>> listSubscriptions(
-        @RequestParam(name = "page", defaultValue = "1") Integer page,
-        @RequestParam(name = "size", defaultValue = "10") Integer size,
-        @RequestParam(name = "dataId", defaultValue = CLIENT_DATA_ID_PATTERN) String dataId,
-        @RequestParam(name = "group", defaultValue = "") String group) {
-        return Result.success(subscriptionService.retrieveConfigs(page, size, dataId, group));
-    }
-
-}
diff --git a/src/main/java/org/apache/eventmesh/dashboard/controller/TopicController.java b/src/main/java/org/apache/eventmesh/dashboard/controller/TopicController.java
deleted file mode 100644
index 09d848c..0000000
--- a/src/main/java/org/apache/eventmesh/dashboard/controller/TopicController.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.eventmesh.dashboard.controller;
-
-import org.apache.eventmesh.dashboard.dto.CreateTopicRequest;
-import org.apache.eventmesh.dashboard.dto.DeleteTopicRequest;
-import org.apache.eventmesh.dashboard.dto.Result;
-import org.apache.eventmesh.dashboard.model.TopicProperties;
-import org.apache.eventmesh.dashboard.service.TopicService;
-
-import java.util.List;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.CrossOrigin;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RestController;
-
-@RestController
-@RequestMapping("/topic")
-public class TopicController {
-
-    @Autowired
-    TopicService topicService;
-
-    /**
-     * TODO Is OPTIONS method and @CrossOrigin necessary?
-     */
-    @CrossOrigin
-    @RequestMapping(method = RequestMethod.OPTIONS)
-    public ResponseEntity<Object> preflight() {
-        return ResponseEntity.ok()
-            .header("Access-Control-Allow-Origin", "*")
-            .header("Access-Control-Allow-Methods", "*")
-            .header("Access-Control-Allow-Headers", "*")
-            .header("Access-Control-Max-Age", "86400")
-            .build();
-    }
-
-    @CrossOrigin
-    @GetMapping
-    public Result<List<TopicProperties>> getList() {
-        List<TopicProperties> topicList = topicService.getTopic();
-        return Result.success(topicList);
-    }
-
-    @CrossOrigin
-    @PostMapping
-    public Result<Object> create(@RequestBody CreateTopicRequest createTopicRequest) {
-        String topicName = createTopicRequest.getName();
-        topicService.createTopic(topicName);
-        return Result.success();
-    }
-
-    @CrossOrigin
-    @DeleteMapping
-    public Result<Object> delete(@RequestBody DeleteTopicRequest deleteTopicRequest) {
-        String topicName = deleteTopicRequest.getName();
-        topicService.deleteTopic(topicName);
-        return Result.success();
-    }
-}
\ No newline at end of file
diff --git a/src/main/java/org/apache/eventmesh/dashboard/dto/CreateTopicRequest.java b/src/main/java/org/apache/eventmesh/dashboard/dto/CreateTopicRequest.java
deleted file mode 100644
index 2475a21..0000000
--- a/src/main/java/org/apache/eventmesh/dashboard/dto/CreateTopicRequest.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.eventmesh.dashboard.dto;
-
-import com.fasterxml.jackson.annotation.JsonCreator;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-import lombok.Data;
-
-@Data
-public class CreateTopicRequest {
-
-    private String name;
-
-    @JsonCreator
-    public CreateTopicRequest(@JsonProperty("name") String name) {
-        super();
-        this.name = name;
-    }
-}
diff --git a/src/main/java/org/apache/eventmesh/dashboard/dto/DeleteTopicRequest.java b/src/main/java/org/apache/eventmesh/dashboard/dto/DeleteTopicRequest.java
deleted file mode 100644
index 094a008..0000000
--- a/src/main/java/org/apache/eventmesh/dashboard/dto/DeleteTopicRequest.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.eventmesh.dashboard.dto;
-
-import com.fasterxml.jackson.annotation.JsonCreator;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-import lombok.Data;
-
-@Data
-public class DeleteTopicRequest {
-
-    private String name;
-
-    @JsonCreator
-    public DeleteTopicRequest(@JsonProperty("name") String name) {
-        super();
-        this.name = name;
-    }
-}
diff --git a/src/main/java/org/apache/eventmesh/dashboard/dto/Result.java b/src/main/java/org/apache/eventmesh/dashboard/dto/Result.java
deleted file mode 100644
index 50b90c1..0000000
--- a/src/main/java/org/apache/eventmesh/dashboard/dto/Result.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.eventmesh.dashboard.dto;
-
-import static org.apache.eventmesh.dashboard.enums.Status.SUCCESS;
-
-import org.apache.eventmesh.dashboard.enums.Status;
-import org.apache.eventmesh.dashboard.exception.BaseException;
-
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-/**
- * A RESTful response DTO.
- */
-
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-public class Result<T> {
-
-    private T data;
-
-    private Integer pages;
-
-    private StatusMessage message;
-
-    public Result(StatusMessage statusMessage) {
-        this.message = statusMessage;
-    }
-
-    public Result(T data, Integer pages) {
-        this.data = data;
-        this.pages = pages;
-    }
-
-    /**
-     * The request is valid and the result is wrapped in {@link Result}.
-     */
-    public static <T> Result<T> success() {
-        return new Result<>(new StatusMessage(SUCCESS));
-    }
-
-    public static <T> Result<T> success(Result<T> result) {
-        result.setMessage(new StatusMessage(SUCCESS));
-        return result;
-    }
-
-    public static <T> Result<T> success(T data) {
-        return new Result<>(data, null, new StatusMessage(SUCCESS));
-    }
-
-    /**
-     * The request is valid and the result is returned in {@link ResponseEntity}.
-     * Logic issues should use 422 Unprocessable Entity instead of 200 OK.
-     */
-    public static <T> ResponseEntity<Result<T>> ok() {
-        return ResponseEntity.ok(new Result<>(new StatusMessage(SUCCESS)));
-    }
-
-    public static <T> ResponseEntity<Result<T>> ok(Result<T> result) {
-        result.setMessage(new StatusMessage(SUCCESS));
-        return ResponseEntity.ok(result);
-    }
-
-    /**
-     * The request is invalid.
-     */
-    public static <T> ResponseEntity<Result<T>> badRequest(String message) {
-        return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new Result<>(new StatusMessage(message)));
-    }
-
-    /**
-     * The request is valid but cannot be processed due to business logic issues.
-     */
-    public static <T> ResponseEntity<Result<T>> unprocessable(String message) {
-        return ResponseEntity.status(HttpStatus.UNPROCESSABLE_ENTITY).body(new Result<>(new StatusMessage(message)));
-    }
-
-    /**
-     * Uncaught exception happened in EventMeshAdmin application.
-     */
-    public static <T> ResponseEntity<Result<T>> internalError(String message) {
-        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(new Result<>(new StatusMessage(message)));
-    }
-
-    /**
-     * Upstream service unavailable such as Meta.
-     */
-    public static <T> ResponseEntity<Result<T>> badGateway(String message) {
-        return ResponseEntity.status(HttpStatus.BAD_GATEWAY).body(new Result<>(new StatusMessage(message)));
-    }
-
-    @Data
-    public static class StatusMessage {
-
-        private String status;
-
-        private String category;
-
-        private String desc;
-
-        public StatusMessage(BaseException e) {
-            this.status = e.getStatus().name();
-            this.category = e.getStatus().getCategory().name();
-            this.desc = e.getMessage();
-        }
-
-        /**
-         * Only recommended for returning successful results,
-         * the stack trace cannot be displayed when returning unsuccessful results.
-         */
-        public StatusMessage(Status status) {
-            this.status = status.name();
-            this.category = status.getCategory().name();
-            this.desc = status.getDesc(); // no stack trace
-        }
-
-        public StatusMessage(String desc) {
-            this.desc = desc;
-        }
-    }
-}
diff --git a/src/main/java/org/apache/eventmesh/dashboard/enums/Status.java b/src/main/java/org/apache/eventmesh/dashboard/enums/Status.java
deleted file mode 100644
index 958b3bb..0000000
--- a/src/main/java/org/apache/eventmesh/dashboard/enums/Status.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.eventmesh.dashboard.enums;
-
-import static org.apache.eventmesh.dashboard.constant.ConfigConst.COLON;
-
-import org.springframework.http.HttpStatus;
-
-import lombok.Getter;
-
-/**
- * An error enumeration class that conforms to the RESTful specifications and custom error reporting requirements.
- * <ul>
- *   <li>The 'code' field is used to return the HTTP status code using {@link HttpStatus}.</li>
- *   <li>The 'category' field represents the major category of the error.</li>
- *   <li>the 'desc' field represents the detailed subcategory and information of the error.</li>
- * </ul>
- */
-
-@Getter
-public enum Status {
-
-    SUCCESS(HttpStatus.OK, Category.SUCCESS, "Operation success."),
-
-    NACOS_SDK_CONFIG_ERR(HttpStatus.INTERNAL_SERVER_ERROR, Category.SDK_CONFIG_ERR,
-        "Failed to create Nacos ConfigService. Please check EventMeshAdmin application configuration."),
-
-    NACOS_GET_CONFIGS_ERR(HttpStatus.BAD_GATEWAY, Category.META_COM_ERR, "Failed to retrieve Nacos config(s)."),
-
-    NACOS_EMPTY_RESP_ERR(HttpStatus.BAD_GATEWAY, Category.META_COM_ERR, "No result returned by Nacos. Please check Nacos."),
-
-    NACOS_LOGIN_ERR(HttpStatus.UNAUTHORIZED, Category.META_COM_ERR, "Nacos login failed."),
-
-    NACOS_LOGIN_EMPTY_RESP_ERR(HttpStatus.BAD_GATEWAY, Category.META_COM_ERR, "Nacos didn't return accessToken. Please check Nacos status."),
-    ;
-
-    // error code
-    private final HttpStatus code;
-
-    // error type
-    private final Category category;
-
-    // error message
-    private final String desc;
-
-    Status(HttpStatus code, Category category, String desc) {
-        this.code = code;
-        this.category = category;
-        this.desc = desc;
-    }
-
-    @Override
-    public String toString() {
-        return name() + " of " + category + COLON + desc;
-    }
-
-    @Getter
-    public enum Category {
-
-        SUCCESS("Successfully received and processed"),
-
-        SDK_CONFIG_ERR("The Meta SDK config in EventMeshAdmin application.yml error"),
-
-        META_COM_ERR("Network communication to Meta error"),
-        ;
-
-        /**
-         * Helpful for understanding and not used for now
-         */
-        private final String desc;
-
-        Category(String desc) {
-            this.desc = desc;
-        }
-    }
-}
diff --git a/src/main/java/org/apache/eventmesh/dashboard/exception/BaseException.java b/src/main/java/org/apache/eventmesh/dashboard/exception/BaseException.java
deleted file mode 100644
index 872ac4c..0000000
--- a/src/main/java/org/apache/eventmesh/dashboard/exception/BaseException.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.eventmesh.dashboard.exception;
-
-import static org.apache.eventmesh.dashboard.constant.ConfigConst.COLON;
-
-import org.apache.eventmesh.dashboard.enums.Status;
-import org.apache.eventmesh.dashboard.util.ExceptionUtil;
-
-import lombok.Getter;
-
-/**
- * Exceptions in EventMeshAdmin application
- */
-
-@Getter
-public class BaseException extends RuntimeException {
-
-    private static final long serialVersionUID = 3509261993355721168L;
-
-    private Status status;
-
-    public BaseException(String message) {
-        super(message);
-    }
-
-    /**
-     * Customized error reporting using enums and exceptions
-     */
-    public BaseException(Status status, Throwable cause) {
-        super(ExceptionUtil.trimDesc(status.getDesc()) + COLON + cause.getMessage(), cause);
-        this.status = status;
-    }
-
-    public BaseException(Status status) {
-        super(status.getDesc());
-        this.status = status;
-    }
-}
diff --git a/src/main/java/org/apache/eventmesh/dashboard/exception/EventMeshAdminException.java b/src/main/java/org/apache/eventmesh/dashboard/exception/EventMeshAdminException.java
deleted file mode 100644
index d298a7e..0000000
--- a/src/main/java/org/apache/eventmesh/dashboard/exception/EventMeshAdminException.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.eventmesh.dashboard.exception;
-
-import org.apache.eventmesh.dashboard.enums.Status;
-
-/**
- * EventMeshAdmin Application side exception
- */
-
-public class EventMeshAdminException extends BaseException {
-
-    private static final long serialVersionUID = 2002022502005456586L;
-
-    public EventMeshAdminException(String message) {
-        super(message);
-    }
-
-    /**
-     * Customized error reporting using enums and exceptions
-     */
-    public EventMeshAdminException(Status status, Throwable cause) {
-        super(status, cause);
-    }
-}
diff --git a/src/main/java/org/apache/eventmesh/dashboard/exception/EventMeshException.java b/src/main/java/org/apache/eventmesh/dashboard/exception/EventMeshException.java
deleted file mode 100644
index 9a835cd..0000000
--- a/src/main/java/org/apache/eventmesh/dashboard/exception/EventMeshException.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.eventmesh.dashboard.exception;
-
-/**
- * EventMesh Runtime side exception
- */
-
-public class EventMeshException extends BaseException {
-
-    private static final long serialVersionUID = 5648256502005456586L;
-
-    public EventMeshException(String message) {
-        super(message);
-    }
-}
diff --git a/src/main/java/org/apache/eventmesh/dashboard/exception/GlobalExceptionHandler.java b/src/main/java/org/apache/eventmesh/dashboard/exception/GlobalExceptionHandler.java
deleted file mode 100644
index 51a2def..0000000
--- a/src/main/java/org/apache/eventmesh/dashboard/exception/GlobalExceptionHandler.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.eventmesh.dashboard.exception;
-
-import org.apache.eventmesh.dashboard.dto.Result;
-import org.apache.eventmesh.dashboard.dto.Result.StatusMessage;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.ExceptionHandler;
-import org.springframework.web.bind.annotation.RestControllerAdvice;
-
-import lombok.extern.slf4j.Slf4j;
-
-/**
- * This class, in conjunction with {@linkplain org.apache.eventmesh.dashboard.enums.Status Status} and {@link BaseException},
- * collectively implements customized error reporting.
- */
-
-@Slf4j
-@RestControllerAdvice
-public class GlobalExceptionHandler {
-
-    @ExceptionHandler(BaseException.class)
-    public ResponseEntity<Result<Object>> baseHandler(BaseException e, HttpServletRequest request) {
-        String uri = request.getRequestURI();
-        log.error("RESTful API {} service error occurred, name: {}, category: {}",
-            uri, e.getStatus().name(), e.getStatus().getCategory().name(), e);
-        return ResponseEntity.status(e.getStatus().getCode()).body(new Result<>(new StatusMessage(e)));
-    }
-
-    @ExceptionHandler(RuntimeException.class)
-    public ResponseEntity<Result<Object>> runtimeHandler(RuntimeException e, HttpServletRequest request) {
-        String uri = request.getRequestURI();
-        log.error("RESTful API {} runtime error occurred.", uri, e);
-        return Result.internalError(e.getMessage());
-    }
-
-    @ExceptionHandler(Exception.class)
-    public ResponseEntity<Result<Object>> exceptionHandler(Exception e, HttpServletRequest request) {
-        String uri = request.getRequestURI();
-        log.error("RESTful API {} unknown error occurred.", uri, e);
-        return Result.internalError(e.getMessage());
-    }
-
-}
diff --git a/src/main/java/org/apache/eventmesh/dashboard/exception/MetaException.java b/src/main/java/org/apache/eventmesh/dashboard/exception/MetaException.java
deleted file mode 100644
index 54db37d..0000000
--- a/src/main/java/org/apache/eventmesh/dashboard/exception/MetaException.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.eventmesh.dashboard.exception;
-
-import org.apache.eventmesh.dashboard.enums.Status;
-
-/**
- * Meta side exception with EventMeshAdmin Application
- */
-
-public class MetaException extends BaseException {
-
-    private static final long serialVersionUID = 6246145526338359773L;
-
-    public MetaException(String message) {
-        super(message);
-    }
-
-    /**
-     * Customized error reporting using enums and exceptions
-     */
-    public MetaException(Status status, Throwable cause) {
-        super(status, cause);
-    }
-
-    public MetaException(Status status) {
-        super(status);
-    }
-}
diff --git a/src/main/java/org/apache/eventmesh/dashboard/model/ConnectionInfo.java b/src/main/java/org/apache/eventmesh/dashboard/model/ConnectionInfo.java
deleted file mode 100644
index 8b3c61d..0000000
--- a/src/main/java/org/apache/eventmesh/dashboard/model/ConnectionInfo.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.eventmesh.dashboard.model;
-
-public class ConnectionInfo {
-
-}
diff --git a/src/main/java/org/apache/eventmesh/dashboard/model/SubscriptionInfo.java b/src/main/java/org/apache/eventmesh/dashboard/model/SubscriptionInfo.java
deleted file mode 100644
index a7fbfb7..0000000
--- a/src/main/java/org/apache/eventmesh/dashboard/model/SubscriptionInfo.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.eventmesh.dashboard.model;
-
-import lombok.Builder;
-import lombok.Data;
-
-@Data
-@Builder
-public class SubscriptionInfo {
-
-    // client name
-    private String clientName;
-
-    // group name
-    private String group;
-
-    // config content
-    private String subscription;
-}
diff --git a/src/main/java/org/apache/eventmesh/dashboard/model/TopicProperties.java b/src/main/java/org/apache/eventmesh/dashboard/model/TopicProperties.java
deleted file mode 100644
index c001822..0000000
--- a/src/main/java/org/apache/eventmesh/dashboard/model/TopicProperties.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.eventmesh.dashboard.model;
-
-import com.fasterxml.jackson.annotation.JsonCreator;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-/**
- * One record displayed in 'Topic' page.
- */
-
-public class TopicProperties {
-
-    public String name;
-    public long messageCount;
-
-    @JsonCreator
-    public TopicProperties(
-        @JsonProperty("name") String name,
-        @JsonProperty("messageCount") long messageCount) {
-        super();
-        this.name = name;
-        this.messageCount = messageCount;
-    }
-}
diff --git a/src/main/java/org/apache/eventmesh/dashboard/service/ConnectionService.java b/src/main/java/org/apache/eventmesh/dashboard/service/ConnectionService.java
deleted file mode 100644
index db00467..0000000
--- a/src/main/java/org/apache/eventmesh/dashboard/service/ConnectionService.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.eventmesh.dashboard.service;
-
-/**
- * "Connection" refers to the subscription relationship between connectors.
- * It focuses on the configuration deployed on the source and sink connectors themselves,
- * reported by the connector.
- */
-
-public interface ConnectionService {
-
-}
diff --git a/src/main/java/org/apache/eventmesh/dashboard/service/SubscriptionService.java b/src/main/java/org/apache/eventmesh/dashboard/service/SubscriptionService.java
deleted file mode 100644
index 01ba3dd..0000000
--- a/src/main/java/org/apache/eventmesh/dashboard/service/SubscriptionService.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.eventmesh.dashboard.service;
-
-import org.apache.eventmesh.dashboard.dto.Result;
-import org.apache.eventmesh.dashboard.model.SubscriptionInfo;
-
-import java.util.List;
-
-/**
- * "Subscription" refers to the traditional MQ producer-consumer topic subscription relationship,
- * emphasizing the subscription relationship between EventMesh clients (including SDK and connectors) and topics,
- * reported by the EventMesh runtime.
- */
-
-public interface SubscriptionService {
-
-    String retrieveConfig(String dataId, String group);
-
-    Result<List<SubscriptionInfo>> retrieveConfigs(Integer page, Integer size, String dataId, String group);
-}
diff --git a/src/main/java/org/apache/eventmesh/dashboard/service/TopicService.java b/src/main/java/org/apache/eventmesh/dashboard/service/TopicService.java
deleted file mode 100644
index f617a77..0000000
--- a/src/main/java/org/apache/eventmesh/dashboard/service/TopicService.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.eventmesh.dashboard.service;
-
-import org.apache.eventmesh.dashboard.model.TopicProperties;
-
-import java.util.List;
-
-/**
- * Manage topics of eventmesh-storage-plugin (EventMesh Store).
- */
-
-public interface TopicService {
-
-    /**
-     * TODO rename to getTopics after being implemented
-     */
-    List<TopicProperties> getTopic();
-
-    void createTopic(String topicName);
-
-    void deleteTopic(String topicName);
-}
diff --git a/src/main/java/org/apache/eventmesh/dashboard/service/meta/EtcdConnectionService.java b/src/main/java/org/apache/eventmesh/dashboard/service/meta/EtcdConnectionService.java
deleted file mode 100644
index f55ad70..0000000
--- a/src/main/java/org/apache/eventmesh/dashboard/service/meta/EtcdConnectionService.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.eventmesh.dashboard.service.meta;
-
-import org.apache.eventmesh.dashboard.service.ConnectionService;
-
-import org.springframework.stereotype.Service;
-
-import lombok.extern.slf4j.Slf4j;
-
-@Slf4j
-@Service
-public class EtcdConnectionService implements ConnectionService {
-
-}
diff --git a/src/main/java/org/apache/eventmesh/dashboard/service/meta/EtcdSubscriptionService.java b/src/main/java/org/apache/eventmesh/dashboard/service/meta/EtcdSubscriptionService.java
deleted file mode 100644
index d5c024f..0000000
--- a/src/main/java/org/apache/eventmesh/dashboard/service/meta/EtcdSubscriptionService.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.eventmesh.dashboard.service.meta;
-
-import org.apache.eventmesh.dashboard.dto.Result;
-import org.apache.eventmesh.dashboard.model.SubscriptionInfo;
-import org.apache.eventmesh.dashboard.service.SubscriptionService;
-
-import java.util.List;
-
-import org.springframework.stereotype.Service;
-
-import lombok.extern.slf4j.Slf4j;
-
-@Slf4j
-@Service
-public class EtcdSubscriptionService implements SubscriptionService {
-
-    @Override
-    public String retrieveConfig(String dataId, String group) {
-        return null;
-    }
-
-    @Override
-    public Result<List<SubscriptionInfo>> retrieveConfigs(Integer page, Integer size, String dataId, String group) {
-        return null;
-    }
-}
diff --git a/src/main/java/org/apache/eventmesh/dashboard/service/meta/NacosConnectionService.java b/src/main/java/org/apache/eventmesh/dashboard/service/meta/NacosConnectionService.java
deleted file mode 100644
index 8e10082..0000000
--- a/src/main/java/org/apache/eventmesh/dashboard/service/meta/NacosConnectionService.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.eventmesh.dashboard.service.meta;
-
-import org.apache.eventmesh.dashboard.config.AdminProperties;
-import org.apache.eventmesh.dashboard.service.ConnectionService;
-
-import org.springframework.stereotype.Service;
-
-import lombok.extern.slf4j.Slf4j;
-
-@Slf4j
-@Service
-public class NacosConnectionService implements ConnectionService {
-
-    public NacosConnectionService(AdminProperties adminProperties) {
-    }
-
-}
diff --git a/src/main/java/org/apache/eventmesh/dashboard/service/meta/NacosSubscriptionService.java b/src/main/java/org/apache/eventmesh/dashboard/service/meta/NacosSubscriptionService.java
deleted file mode 100644
index 09b675c..0000000
--- a/src/main/java/org/apache/eventmesh/dashboard/service/meta/NacosSubscriptionService.java
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.eventmesh.dashboard.service.meta;
-
-import static org.apache.eventmesh.dashboard.enums.Status.NACOS_EMPTY_RESP_ERR;
-import static org.apache.eventmesh.dashboard.enums.Status.NACOS_GET_CONFIGS_ERR;
-import static org.apache.eventmesh.dashboard.enums.Status.NACOS_LOGIN_EMPTY_RESP_ERR;
-import static org.apache.eventmesh.dashboard.enums.Status.NACOS_LOGIN_ERR;
-import static org.apache.eventmesh.dashboard.enums.Status.NACOS_SDK_CONFIG_ERR;
-
-import org.apache.eventmesh.dashboard.config.AdminProperties;
-import org.apache.eventmesh.dashboard.constant.ConfigConst;
-import org.apache.eventmesh.dashboard.constant.NacosConst;
-import org.apache.eventmesh.dashboard.dto.Result;
-import org.apache.eventmesh.dashboard.exception.EventMeshAdminException;
-import org.apache.eventmesh.dashboard.exception.MetaException;
-import org.apache.eventmesh.dashboard.model.SubscriptionInfo;
-import org.apache.eventmesh.dashboard.service.SubscriptionService;
-
-import java.util.ArrayList;
-import java.util.Base64;
-import java.util.Collections;
-import java.util.List;
-import java.util.Properties;
-
-import org.springframework.http.HttpEntity;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.MediaType;
-import org.springframework.http.ResponseEntity;
-import org.springframework.stereotype.Service;
-import org.springframework.util.LinkedMultiValueMap;
-import org.springframework.util.MultiValueMap;
-import org.springframework.web.client.RestTemplate;
-import org.springframework.web.util.UriComponentsBuilder;
-
-import com.alibaba.fastjson2.JSON;
-import com.alibaba.fastjson2.JSONObject;
-import com.alibaba.nacos.api.NacosFactory;
-import com.alibaba.nacos.api.PropertyKeyConst;
-import com.alibaba.nacos.api.config.ConfigService;
-
-import lombok.extern.slf4j.Slf4j;
-
-@Slf4j
-@Service
-public class NacosSubscriptionService implements SubscriptionService {
-
-    AdminProperties adminProperties;
-
-    Properties nacosProps = new Properties();
-
-    RestTemplate restTemplate = new RestTemplate();
-
-    private static String HTTP_PREFIX = ConfigConst.HTTP_PREFIX;
-
-    public NacosSubscriptionService(AdminProperties adminProperties) {
-        this.adminProperties = adminProperties;
-
-        nacosProps.setProperty(PropertyKeyConst.SERVER_ADDR, adminProperties.getMeta().getNacos().getAddr());
-        nacosProps.setProperty(PropertyKeyConst.NAMESPACE, adminProperties.getMeta().getNacos().getNamespace());
-        if (adminProperties.getMeta().getNacos().isAuthEnabled()) {
-            if (!adminProperties.getMeta().getNacos().getUsername().isEmpty()) {
-                nacosProps.setProperty(PropertyKeyConst.USERNAME, adminProperties.getMeta().getNacos().getUsername());
-            }
-            if (!adminProperties.getMeta().getNacos().getPassword().isEmpty()) {
-                nacosProps.setProperty(PropertyKeyConst.PASSWORD, adminProperties.getMeta().getNacos().getPassword());
-            }
-            if (!adminProperties.getMeta().getNacos().getAccessKey().isEmpty()) {
-                nacosProps.setProperty(PropertyKeyConst.ACCESS_KEY, adminProperties.getMeta().getNacos().getAccessKey());
-            }
-            if (!adminProperties.getMeta().getNacos().getSecretKey().isEmpty()) {
-                nacosProps.setProperty(PropertyKeyConst.SECRET_KEY, adminProperties.getMeta().getNacos().getSecretKey());
-            }
-        }
-        if (adminProperties.getMeta().getNacos().getProtocol().equalsIgnoreCase("https")) {
-            HTTP_PREFIX = ConfigConst.HTTPS_PREFIX;
-        }
-    }
-
-    /**
-     * Retrieve a specified config with Nacos SDK.
-     */
-    @Override
-    public String retrieveConfig(String dataId, String group) {
-        ConfigService configService;
-        try {
-            configService = NacosFactory.createConfigService(nacosProps);
-        } catch (Exception e) {
-            log.error(NACOS_SDK_CONFIG_ERR.getDesc(), e);
-            throw new EventMeshAdminException(NACOS_SDK_CONFIG_ERR, e);
-        }
-        try {
-            return configService.getConfig(dataId, group, adminProperties.getMeta().getTimeoutMs());
-        } catch (Exception e) {
-            log.error(NACOS_GET_CONFIGS_ERR.getDesc(), e);
-            throw new MetaException(NACOS_GET_CONFIGS_ERR, e);
-        }
-    }
-
-    /**
-     * Retrieve a list of configs with Nacos OpenAPI, because Nacos SDK doesn't support listing and fuzzy matching.
-     *
-     * TODO Granularity should be based on subscriptions rather than Runtime;
-     * retrieve all subscriptions for each Runtime, rather than retrieving subscriptions for each individual Runtime.
-     */
-    @Override
-    public Result<List<SubscriptionInfo>> retrieveConfigs(Integer page, Integer size, String dataId, String group) {
-        UriComponentsBuilder urlBuilder = UriComponentsBuilder
-            .fromHttpUrl(HTTP_PREFIX + nacosProps.getProperty(PropertyKeyConst.SERVER_ADDR) + NacosConst.CONFIGS_API)
-            .queryParam(NacosConst.CONFIGS_REQ_PAGE, page)
-            .queryParam(NacosConst.CONFIGS_REQ_PAGE_SIZE, size)
-            .queryParam(NacosConst.CONFIGS_REQ_DATAID, dataId)
-            .queryParam(NacosConst.CONFIGS_REQ_GROUP, group)
-            .queryParam(NacosConst.CONFIGS_REQ_SEARCH, "blur");
-
-        if (adminProperties.getMeta().getNacos().isAuthEnabled()) {
-            urlBuilder.queryParam(NacosConst.CONFIGS_REQ_TOKEN, loginGetAccessToken());
-        }
-
-        ResponseEntity<String> response;
-        try {
-            response = restTemplate.getForEntity(urlBuilder.toUriString(), String.class);
-        } catch (Exception e) {
-            log.error(NACOS_GET_CONFIGS_ERR.getDesc(), e);
-            throw new MetaException(NACOS_GET_CONFIGS_ERR, e);
-        }
-        if (response.getBody() == null || response.getBody().isEmpty()) {
-            log.error(NACOS_EMPTY_RESP_ERR.getDesc());
-            throw new MetaException(NACOS_EMPTY_RESP_ERR);
-        }
-
-        JSONObject obj = JSON.parseObject(response.getBody());
-        return new Result<>(toSubscriptionInfos(obj), obj.getInteger(NacosConst.CONFIGS_RESP_PAGES));
-    }
-
-    private List<SubscriptionInfo> toSubscriptionInfos(JSONObject obj) {
-        List<SubscriptionInfo> subscriptionInfos = new ArrayList<>();
-        for (Object pageItem : obj.getJSONArray(NacosConst.CONFIGS_RESP_CONTENT_LIST)) {
-            JSONObject pageItemObj = (JSONObject) pageItem;
-            subscriptionInfos.add(toSubscriptionInfo(pageItemObj));
-        }
-        return subscriptionInfos;
-    }
-
-    private SubscriptionInfo toSubscriptionInfo(JSONObject obj) {
-        String content = obj.getString(NacosConst.CONFIGS_RESP_CONTENT);
-        return SubscriptionInfo.builder()
-            .clientName(obj.getString(NacosConst.CONFIGS_RESP_DATAID))
-            .group(obj.getString(NacosConst.CONFIGS_RESP_GROUP))
-            // The subscription content of Nacos config should be base64 encoded to protect special characters.
-            .subscription(Base64.getEncoder().encodeToString(content.getBytes()))
-            .build();
-    }
-
-    /**
-     * Login if auth enabled and return accessToken.
-     */
-    private String loginGetAccessToken() {
-        HttpHeaders headers = new HttpHeaders();
-        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
-
-        MultiValueMap<String, String> bodyParams = new LinkedMultiValueMap<>();
-        bodyParams.put(NacosConst.LOGIN_REQ_USERNAME, Collections.singletonList(nacosProps.getProperty(PropertyKeyConst.USERNAME)));
-        bodyParams.put(NacosConst.LOGIN_REQ_PASSWORD, Collections.singletonList(nacosProps.getProperty(PropertyKeyConst.PASSWORD)));
-
-        String loginUrl = HTTP_PREFIX + nacosProps.getProperty(PropertyKeyConst.SERVER_ADDR) + NacosConst.LOGIN_API;
-        HttpEntity<MultiValueMap<String, String>> loginRequest = new HttpEntity<>(bodyParams, headers);
-        ResponseEntity<String> loginResponse;
-        try {
-            loginResponse = restTemplate.postForEntity(loginUrl, loginRequest, String.class);
-        } catch (Exception e) {
-            log.error(NACOS_LOGIN_ERR.getDesc(), e);
-            throw new MetaException(NACOS_LOGIN_ERR, e);
-        }
-        if (loginResponse.getBody() == null || loginResponse.getBody().isEmpty()) {
-            log.error(NACOS_LOGIN_EMPTY_RESP_ERR + " Status code: {}", loginResponse.getStatusCode());
-            throw new MetaException(NACOS_LOGIN_EMPTY_RESP_ERR + " Status code: " + loginResponse.getStatusCode());
-        }
-        return JSON.parseObject(loginResponse.getBody()).getString(NacosConst.LOGIN_RESP_TOKEN);
-    }
-}
diff --git a/src/main/java/org/apache/eventmesh/dashboard/service/store/RocketmqTopicService.java b/src/main/java/org/apache/eventmesh/dashboard/service/store/RocketmqTopicService.java
deleted file mode 100644
index ca8340c..0000000
--- a/src/main/java/org/apache/eventmesh/dashboard/service/store/RocketmqTopicService.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.eventmesh.dashboard.service.store;
-
-import org.apache.eventmesh.dashboard.config.AdminProperties;
-import org.apache.eventmesh.dashboard.model.TopicProperties;
-import org.apache.eventmesh.dashboard.service.TopicService;
-
-import java.util.List;
-
-import org.springframework.stereotype.Service;
-
-import lombok.extern.slf4j.Slf4j;
-
-/**
- * TODO implement methods from storage-plugin.admin
- */
-
-@Slf4j
-@Service
-public class RocketmqTopicService implements TopicService {
-
-    AdminProperties adminProperties;
-
-    public RocketmqTopicService(AdminProperties adminProperties) {
-        this.adminProperties = adminProperties;
-    }
-
-    @Override
-    public List<TopicProperties> getTopic() {
-        return null;
-    }
-
-    @Override
-    public void createTopic(String topicName) {
-
-    }
-
-    @Override
-    public void deleteTopic(String topicName) {
-
-    }
-}
diff --git a/src/main/java/org/apache/eventmesh/dashboard/util/ExceptionUtil.java b/src/main/java/org/apache/eventmesh/dashboard/util/ExceptionUtil.java
deleted file mode 100644
index 1da2956..0000000
--- a/src/main/java/org/apache/eventmesh/dashboard/util/ExceptionUtil.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.eventmesh.dashboard.util;
-
-public class ExceptionUtil {
-
-    /**
-     * Remove the last period of exception description.
-     */
-    public static String trimDesc(String desc) {
-        if (desc == null) {
-            return "";
-        }
-        if (desc.charAt(desc.length() - 1) == '.') {
-            return desc.substring(0, desc.length() - 1);
-        }
-        return desc;
-    }
-
-}
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
deleted file mode 100644
index 518a124..0000000
--- a/src/main/resources/application.yml
+++ /dev/null
@@ -1,64 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-spring:
-  application:
-    name: eventmesh-dashboard
-
-server:
-  port: 8080
-  servlet:
-    encoding:
-      charset: UTF-8
-      enabled: true
-      force: true
-
-logging:
-  config: classpath:logback.xml
-
-eventmesh:
-  meta:
-    # registry type: nacos, etcd
-    type: nacos
-    nacos:
-      addr: 127.0.0.1:8848
-      namespace: # namespace id, empty by default
-      authEnabled: false
-      protocol: http # http or https
-      username:
-      password:
-      # Alibaba Cloud MSE Nacos auth, not nacos.token.secret.key
-      accessKey:
-      secretKey:
-    etcd:
-      addr: # TODO
-    # timeout for admin client
-    timeoutMs: 5000
-  store:
-    # Event Store type, should be consistent with the EventMesh Runtime configuration.
-    type: rocketmq
-    standalone:
-      # TODO
-    rocketmq:
-      namesrvAddr: 127.0.0.1:9876;127.0.0.1:9876
-      clusterName: DefaultCluster
-      accessKey: '********'
-      secretKey: '********'
-    kafka:
-      namesrvAddr: localhost:9092;localhost:9092
-      partitions: 1
-      replicationFactors: 1
\ No newline at end of file
diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml
deleted file mode 100644
index 447ace7..0000000
--- a/src/main/resources/logback.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one or more
-  ~ contributor license agreements.  See the NOTICE file distributed with
-  ~ this work for additional information regarding copyright ownership.
-  ~ The ASF licenses this file to You under the Apache License, Version 2.0
-  ~ (the "License"); you may not use this file except in compliance with
-  ~ the License.  You may obtain a copy of the License at
-  ~
-  ~     http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  -->
-
-<configuration>
-	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
-		<encoder charset="UTF-8">
-			<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] %p %t - %m%n</pattern>
-		</encoder>
-	</appender>
-
-	<appender name="FILE"
-		class="ch.qos.logback.core.rolling.RollingFileAppender">
-		<file>${user.home}/logs/eventmesh-dashboard.log</file>
-		<append>true</append>
-		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-			<fileNamePattern>${user.home}/logs/eventmesh-dashboard-%d{yyyy-MM-dd}.%i.log
-			</fileNamePattern>
-			<timeBasedFileNamingAndTriggeringPolicy
-				class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
-				<maxFileSize>104857600</maxFileSize>
-			</timeBasedFileNamingAndTriggeringPolicy>
-			<MaxHistory>10</MaxHistory>
-		</rollingPolicy>
-		<encoder>
-            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] %p %t - %m%n</pattern>
-			<charset class="java.nio.charset.Charset">UTF-8</charset>
-		</encoder>
-	</appender>
-
-	<root level="INFO">
-		<appender-ref ref="STDOUT" />
-		<appender-ref ref="FILE" />
-	</root>
-
-</configuration> 
\ No newline at end of file
diff --git a/src/test/java/org/apache/eventmesh/dashboard/EventMeshDashboardApplicationTests.java b/src/test/java/org/apache/eventmesh/dashboard/EventMeshDashboardApplicationTests.java
deleted file mode 100644
index 36c1649..0000000
--- a/src/test/java/org/apache/eventmesh/dashboard/EventMeshDashboardApplicationTests.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.eventmesh.dashboard;
-
-import org.junit.jupiter.api.Test;
-import org.springframework.boot.test.context.SpringBootTest;
-
-@SpringBootTest
-class EventMeshDashboardApplicationTests {
-
-    @Test
-    void contextLoads() {
-    }
-
-}