feat: implement new feature for enhanced user experience

This commit is contained in:
2026-05-11 16:56:57 +00:00
parent 0be4852f74
commit 106efb5d6e
94 changed files with 639 additions and 595 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+13 -13
View File
@@ -23,13 +23,13 @@ services:
- online.testversion.code.subdomain=${PROJECT_NAME} - online.testversion.code.subdomain=${PROJECT_NAME}
# Create two routers: one without auth for MCP/curl, one with auth for others # Create two routers: one without auth for MCP/curl, one with auth for others
# Router 1: MCP/curl access (based on host + user-agent header) # Router 1: MCP/curl access (based on host + user-agent header)
- traefik.http.routers.${PROJECT_NAME}-yarnstart-mcp.rule=Host(`${PROJECT_NAME}.code.testversion.online`) && HeadersRegexp(`User-Agent`, `.*(Playwright|puppeteer|Headless|curl).*`) # - traefik.http.routers.${PROJECT_NAME}-yarnstart-mcp.rule=Host(`${PROJECT_NAME}.code.testversion.online`) && HeadersRegexp(`User-Agent`, `.*(Playwright|puppeteer|Headless|curl).*`)
- traefik.http.routers.${PROJECT_NAME}-yarnstart-mcp.priority=100 # - traefik.http.routers.${PROJECT_NAME}-yarnstart-mcp.priority=100
- traefik.http.routers.${PROJECT_NAME}-yarnstart-mcp.service=${PROJECT_NAME}-yarnstart # - traefik.http.routers.${PROJECT_NAME}-yarnstart-mcp.service=${PROJECT_NAME}-yarnstart
# Router 2: Regular access with basic auth # Router 2: Regular access with basic auth
- traefik.http.routers.${PROJECT_NAME}-yarnstart.priority=50 # - traefik.http.routers.${PROJECT_NAME}-yarnstart.priority=50
- traefik.http.routers.${PROJECT_NAME}-yarnstart.middlewares=${PROJECT_NAME}-yarnstart-auth # - traefik.http.routers.${PROJECT_NAME}-yarnstart.middlewares=${PROJECT_NAME}-yarnstart-auth
- traefik.http.middlewares.${PROJECT_NAME}-yarnstart-auth.basicauth.usersfile=${PWD}/.basic-auth-web # - traefik.http.middlewares.${PROJECT_NAME}-yarnstart-auth.basicauth.usersfile=${PWD}/.basic-auth-web
# Service definition # Service definition
- traefik.http.services.${PROJECT_NAME}-yarnstart.loadbalancer.server.port=3000 - traefik.http.services.${PROJECT_NAME}-yarnstart.loadbalancer.server.port=3000
user: ${CODER_UID}:${CODER_GID} user: ${CODER_UID}:${CODER_GID}
@@ -89,7 +89,7 @@ services:
tibiadmin: tibiadmin:
profiles: profiles:
- tibi - tibi
image: gitbase.de/cms/tibi-admin image: gitbase.de/cms/tibi-admin-nova:dev
environment: environment:
INDEX: spa.html INDEX: spa.html
WEBROOT: /data WEBROOT: /data
@@ -102,8 +102,8 @@ services:
labels: labels:
- traefik.enable=true - traefik.enable=true
- online.testversion.code.subdomain=${PROJECT_NAME}-tibiadmin - online.testversion.code.subdomain=${PROJECT_NAME}-tibiadmin
- traefik.http.routers.${PROJECT_NAME}-tibiadmin.middlewares=${PROJECT_NAME}-tibiadmin # - traefik.http.routers.${PROJECT_NAME}-tibiadmin.middlewares=${PROJECT_NAME}-tibiadmin
- traefik.http.middlewares.${PROJECT_NAME}-tibiadmin.basicauth.usersfile=${PWD}/.basic-auth-code # - traefik.http.middlewares.${PROJECT_NAME}-tibiadmin.basicauth.usersfile=${PWD}/.basic-auth-code
tibiadmin-dev: tibiadmin-dev:
profiles: profiles:
@@ -118,8 +118,8 @@ services:
labels: labels:
- traefik.enable=true - traefik.enable=true
- online.testversion.code.subdomain=${PROJECT_NAME}-tibiadmin-dev - online.testversion.code.subdomain=${PROJECT_NAME}-tibiadmin-dev
- traefik.http.routers.${PROJECT_NAME}-tibiadmin-dev.middlewares=${PROJECT_NAME}-tibiadmin-dev # - traefik.http.routers.${PROJECT_NAME}-tibiadmin-dev.middlewares=${PROJECT_NAME}-tibiadmin-dev
- traefik.http.middlewares.${PROJECT_NAME}-tibiadmin-dev.basicauth.usersfile=${PWD}/.basic-auth-code # - traefik.http.middlewares.${PROJECT_NAME}-tibiadmin-dev.basicauth.usersfile=${PWD}/.basic-auth-code
user: ${CODER_UID}:${CODER_GID} user: ${CODER_UID}:${CODER_GID}
mongo: mongo:
@@ -143,8 +143,8 @@ services:
- traefik.enable=true - traefik.enable=true
- online.testversion.code.subdomain=${PROJECT_NAME}-maildev - online.testversion.code.subdomain=${PROJECT_NAME}-maildev
- traefik.http.services.${PROJECT_NAME}-maildev.loadbalancer.server.port=1080 - traefik.http.services.${PROJECT_NAME}-maildev.loadbalancer.server.port=1080
- traefik.http.routers.${PROJECT_NAME}-maildev.middlewares=${PROJECT_NAME}-maildev # - traefik.http.routers.${PROJECT_NAME}-maildev.middlewares=${PROJECT_NAME}-maildev
- traefik.http.middlewares.${PROJECT_NAME}-maildev.basicauth.usersfile=${PWD}/.basic-auth-code # - traefik.http.middlewares.${PROJECT_NAME}-maildev.basicauth.usersfile=${PWD}/.basic-auth-code
chisel: chisel:
profiles: profiles:
+1 -1
View File
@@ -2,7 +2,7 @@ export function debounce<T extends (...args: never[]) => void>(
func: T, func: T,
wait: number wait: number
): (...args: Parameters<T>) => void { ): (...args: Parameters<T>) => void {
let timeout: NodeJS.Timeout | null = null let timeout: ReturnType<typeof setTimeout> | null = null
return (...args: Parameters<T>) => { return (...args: Parameters<T>) => {
if (timeout) { if (timeout) {
+16 -16
View File
@@ -6,7 +6,7 @@
"author": "Sebastian Frank <sebastian@webmakers.de>", "author": "Sebastian Frank <sebastian@webmakers.de>",
"license": "MIT", "license": "MIT",
"scripts": { "scripts": {
"validate": "svelte-check && tsc --noEmit", "validate": "svelte-check --tsconfig ./tsconfig.validate.json && tsc --noEmit -p ./tsconfig.validate.json",
"dev": "node scripts/esbuild-wrapper.js watch", "dev": "node scripts/esbuild-wrapper.js watch",
"start": "node scripts/esbuild-wrapper.js start", "start": "node scripts/esbuild-wrapper.js start",
"start:mock": "MOCK=1 node scripts/esbuild-wrapper.js start", "start:mock": "MOCK=1 node scripts/esbuild-wrapper.js start",
@@ -26,34 +26,34 @@
"devDependencies": { "devDependencies": {
"@babel/cli": "^7.28.6", "@babel/cli": "^7.28.6",
"@babel/core": "^7.29.0", "@babel/core": "^7.29.0",
"@babel/preset-env": "^7.29.0", "@babel/preset-env": "^7.29.5",
"@playwright/test": "^1.58.2", "@playwright/test": "^1.59.1",
"@tailwindcss/postcss": "^4.2.1", "@tailwindcss/postcss": "^4.3.0",
"@tsconfig/svelte": "^5.0.8", "@tsconfig/svelte": "^5.0.8",
"browser-sync": "^3.0.4", "browser-sync": "^3.0.4",
"chokidar": "^5.0.0", "chokidar": "^5.0.0",
"connect-history-api-fallback": "^2.0.0", "connect-history-api-fallback": "^2.0.0",
"esbuild": "^0.27.3", "esbuild": "^0.28.0",
"esbuild-postcss": "^0.0.4", "esbuild-postcss": "^0.0.4",
"esbuild-svelte": "^0.9.4", "esbuild-svelte": "^0.9.5",
"http-proxy-middleware": "^3.0.5", "http-proxy-middleware": "^3.0.5",
"less": "^4.5.1", "less": "^4.6.4",
"morgan": "^1.10.1", "morgan": "^1.10.1",
"node-fetch": "^3.3.2", "node-fetch": "^3.3.2",
"postcss": "^8.5.6", "postcss": "^8.5.14",
"prettier": "^3.8.1", "prettier": "^3.8.3",
"prettier-plugin-svelte": "^3.5.0", "prettier-plugin-svelte": "^3.5.2",
"svelte": "^5.53.5", "svelte": "^5.55.5",
"svelte-check": "^4.4.3", "svelte-check": "^4.4.8",
"svelte-preprocess": "^6.0.3", "svelte-preprocess": "^6.0.3",
"svelte-preprocess-esbuild": "^3.0.1", "svelte-preprocess-esbuild": "^3.0.1",
"tailwindcss": "^4.2.1", "tailwindcss": "^4.3.0",
"tslib": "^2.8.1", "tslib": "^2.8.1",
"typescript": "^5.9.3" "typescript": "^6.0.3"
}, },
"dependencies": { "dependencies": {
"@sentry/cli": "^3.2.2", "@sentry/cli": "^3.4.2",
"@sentry/svelte": "^10.40.0", "@sentry/svelte": "^10.52.0",
"cryptcha": "ssh://git@gitbase.de:2222/cms/cryptcha.git", "cryptcha": "ssh://git@gitbase.de:2222/cms/cryptcha.git",
"svelte-i18n": "^4.0.1" "svelte-i18n": "^4.0.1"
}, },
+1 -1
View File
@@ -8,7 +8,7 @@
"typeRoots": ["./node_modules/@types", "./types"], "typeRoots": ["./node_modules/@types", "./types"],
"target": "esnext", "target": "esnext",
"moduleResolution": "node", "moduleResolution": "bundler",
"jsx": "preserve", "jsx": "preserve",
"noEmit": true, "noEmit": true,
"skipLibCheck": true, "skipLibCheck": true,
+11
View File
@@ -0,0 +1,11 @@
{
"extends": "./tsconfig.json",
"include": ["frontend/src/**/*", "types/**/*", "api/**/*", "./../../cms/tibi-types/index.d.ts"],
"exclude": [
"_temp/**",
"api/hooks/lib/app.server.js",
"api/hooks/lib/buildInfo.js",
"api/hooks/lib/ssr-server.js",
"**/*.map"
]
}
+2
View File
@@ -5,6 +5,8 @@ interface Ssr {
// validUntil: any // go Time // validUntil: any // go Time
} }
declare module "*.css"
/** MongoDB-style filter, e.g. { _id: "abc" } or { $or: [...] } */ /** MongoDB-style filter, e.g. { _id: "abc" } or { $or: [...] } */
type MongoFilter = Record<string, unknown> type MongoFilter = Record<string, unknown>
+462 -437
View File
File diff suppressed because it is too large Load Diff