From a288b38ee1733f5e802aab372566c594760a7173 Mon Sep 17 00:00:00 2001 From: Marcel-Anker Date: Sat, 22 Nov 2025 11:20:24 +0100 Subject: [PATCH] pathetic attempt to implement a filter for statistics --- package-lock.json | 238 ++++++++---------- src/app/app-module.ts | 67 ++--- src/app/statistics/statistics.component.css | 6 + src/app/statistics/statistics.component.html | 17 +- src/app/statistics/statistics.component.ts | 25 +- .../zoom-warning/zoom-warning.component.ts | 2 +- 6 files changed, 181 insertions(+), 174 deletions(-) diff --git a/package-lock.json b/package-lock.json index 89d3331..a014888 100644 --- a/package-lock.json +++ b/package-lock.json @@ -277,13 +277,13 @@ } }, "node_modules/@angular-devkit/architect": { - "version": "0.2003.10", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2003.10.tgz", - "integrity": "sha512-2SWetxJzS8gRX6OKQstkWx37VRvZVgcEBDLsDSaeTjpnwh81A+niZQjAVRdwL0NEt1Wixk/RxfeUuCmdyyHvhQ==", + "version": "0.2003.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2003.11.tgz", + "integrity": "sha512-/56v/Le9UruIPqQXINoggns0//W2/BIaDd54kvjNK5PjQUyKKj6nmhMA1RgB0yDTBFh7lksLf8IyyGx9ZchGRA==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "20.3.10", + "@angular-devkit/core": "20.3.11", "rxjs": "7.8.2" }, "engines": { @@ -293,9 +293,9 @@ } }, "node_modules/@angular-devkit/core": { - "version": "20.3.10", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.3.10.tgz", - "integrity": "sha512-COOT2eVebDwHhwENk12VR6m0wjL8D7p0dncEHF15zaBt1IXEnVhGESjSrs5klnPnt5T55qCBKyCTaeK7i/cS8Q==", + "version": "20.3.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.3.11.tgz", + "integrity": "sha512-KZDhMemUci42D9CNziM+GxQK5wEMP+TDL9ssUHIkvrr1lsFViHIO+pfzs7QfyM8n6hr7at4gQN9IZRV4rRKyQQ==", "dev": true, "license": "MIT", "dependencies": { @@ -321,13 +321,13 @@ } }, "node_modules/@angular-devkit/schematics": { - "version": "20.3.10", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-20.3.10.tgz", - "integrity": "sha512-2N2WF9lj+kr3uCG4+vFadYCL5hAT4dxMgzwScSdOqSd0O+GZD0CzKbDzlfvWIWC/ZealC5Sh4dFEQaRfmy72xA==", + "version": "20.3.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-20.3.11.tgz", + "integrity": "sha512-ePbARvd3xaN2a+ozFWaoYQHz1pzyzzu247rxRoS4hSOr5jqCsogMqPoGxdBCx6nFlDlP/CYenFR7cFx5OBT4tg==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "20.3.10", + "@angular-devkit/core": "20.3.11", "jsonc-parser": "3.3.1", "magic-string": "0.30.17", "ora": "8.2.0", @@ -340,14 +340,14 @@ } }, "node_modules/@angular/build": { - "version": "20.3.10", - "resolved": "https://registry.npmjs.org/@angular/build/-/build-20.3.10.tgz", - "integrity": "sha512-nQrj1nMNZygYDilThc7hPrD6/NIWF/BOSgMfE4VkXQp8d0QronP3HFJ/h77MeoughMRFRhix0pqQSlXJQ2SGTQ==", + "version": "20.3.11", + "resolved": "https://registry.npmjs.org/@angular/build/-/build-20.3.11.tgz", + "integrity": "sha512-0YJGRSXZeH3ncpyCZANN0jDdWaRhIOzKQ54+YcuA1uwLzTAUrla3CsJHSVk6ljItIRWymPuUMDRHjxWE/W6WbA==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.2003.10", + "@angular-devkit/architect": "0.2003.11", "@babel/core": "7.28.3", "@babel/helper-annotate-as-pure": "7.27.3", "@babel/helper-split-export-declaration": "7.24.7", @@ -389,7 +389,7 @@ "@angular/platform-browser": "^20.0.0", "@angular/platform-server": "^20.0.0", "@angular/service-worker": "^20.0.0", - "@angular/ssr": "^20.3.10", + "@angular/ssr": "^20.3.11", "karma": "^6.4.0", "less": "^4.2.0", "ng-packagr": "^20.0.0", @@ -439,11 +439,10 @@ } }, "node_modules/@angular/cdk": { - "version": "20.2.13", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-20.2.13.tgz", - "integrity": "sha512-h1jTkCmJ/rEQQMkxgKFMCBOrMfjZEnppgdekNmSTerwdVp4vdosTDTzFH/kwiOGFeRClffmvqQ2XLG8mQOKOtA==", + "version": "20.2.14", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-20.2.14.tgz", + "integrity": "sha512-7bZxc01URbiPiIBWThQ69XwOxVduqEKN4PhpbF2AAyfMc/W8Hcr4VoIJOwL0O1Nkq5beS8pCAqoOeIgFyXd/kg==", "license": "MIT", - "peer": true, "dependencies": { "parse5": "^8.0.0", "tslib": "^2.3.0" @@ -455,19 +454,19 @@ } }, "node_modules/@angular/cli": { - "version": "20.3.10", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-20.3.10.tgz", - "integrity": "sha512-CQzXScurBXSuMMn0jf6UYDItdggaM3bHYERKL4cUG1z5JqSozVFin1+TB1EjWYkddwdgC10R5xQurdMb+ahRNw==", + "version": "20.3.11", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-20.3.11.tgz", + "integrity": "sha512-FmTvBWo32MAhY2rdXbPjCfC71o0tIzYBuzrjE42SU0+brwwWSvWUmRxS6xM+hH87QrF+gzmi26hOql891OfbIg==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/architect": "0.2003.10", - "@angular-devkit/core": "20.3.10", - "@angular-devkit/schematics": "20.3.10", + "@angular-devkit/architect": "0.2003.11", + "@angular-devkit/core": "20.3.11", + "@angular-devkit/schematics": "20.3.11", "@inquirer/prompts": "7.8.2", "@listr2/prompt-adapter-inquirer": "3.0.1", "@modelcontextprotocol/sdk": "1.17.3", - "@schematics/angular": "20.3.10", + "@schematics/angular": "20.3.11", "@yarnpkg/lockfile": "1.1.0", "algoliasearch": "5.35.0", "ini": "5.0.0", @@ -490,11 +489,10 @@ } }, "node_modules/@angular/common": { - "version": "20.3.12", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-20.3.12.tgz", - "integrity": "sha512-rFcDfe67ffrb435C6t2lc27WGbizeOcgce30tUhH0iezwEvU+kHHWezXXX6Ylx3TFgqGkhcxL0fliuFYrpM1Vw==", + "version": "20.3.13", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-20.3.13.tgz", + "integrity": "sha512-Jy+Qu6760TZyiDJX0+fNzkc70+lwF9ojdkIyCso/Lvbx1v3Fki0+9Wui7Vge56hknkr05xXg1aEUeqMN0966Lg==", "license": "MIT", - "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -502,16 +500,15 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/core": "20.3.12", + "@angular/core": "20.3.13", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/compiler": { - "version": "20.3.12", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-20.3.12.tgz", - "integrity": "sha512-bGESKz97nWiEQ/sydTq/Lzv3zlLvDb8t0msLG5Xti7Ch1EdLddXS8d2D/zFsjiGbAUKVsT6RgPCLHYoi4ocbhA==", + "version": "20.3.13", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-20.3.13.tgz", + "integrity": "sha512-YEjzHxz9laEcC2YPBA7L09Ys8UIuPrRiBZcGCrOXzXmPATHGYuxqYuhZ8iKmKV0PG/4pP2fxD3Mv5wN0cBaOWg==", "license": "MIT", - "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -520,12 +517,11 @@ } }, "node_modules/@angular/compiler-cli": { - "version": "20.3.12", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-20.3.12.tgz", - "integrity": "sha512-3SJkexqsydYjIs0iLiJr5AdwkvumpzvjJM6s76iaxXHkRll5k/vM0wqkXLlSIwieBrecO9D4J73lDLWDevXl5A==", + "version": "20.3.13", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-20.3.13.tgz", + "integrity": "sha512-Cou3G8C60eKpD93SKBJRG5pa/xpmMHe6sc2aanWjneGWjZq1kR4v5eQwwr8LUByIsafcqxHGT7+q1bYXT2p2DQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/core": "7.28.3", "@jridgewell/sourcemap-codec": "^1.4.14", @@ -544,7 +540,7 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/compiler": "20.3.12", + "@angular/compiler": "20.3.13", "typescript": ">=5.8 <6.0" }, "peerDependenciesMeta": { @@ -554,11 +550,10 @@ } }, "node_modules/@angular/core": { - "version": "20.3.12", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-20.3.12.tgz", - "integrity": "sha512-K7vibMr55a7+EsuDhkg4Pk+ELuMm12olllwqL/CiQUcHXZ9Zgc4KYGTUuxWB69qJCG90gdSZS7tm5Dx0wDcyjg==", + "version": "20.3.13", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-20.3.13.tgz", + "integrity": "sha512-12Kou+WAIjAUSG5TkDbypV2kreJ105VylAjlQ09bCvsGNTHjezGgahFa/tLz7iyrozhuivtGiQtiDaYsc79ysw==", "license": "MIT", - "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -566,7 +561,7 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/compiler": "20.3.12", + "@angular/compiler": "20.3.13", "rxjs": "^6.5.3 || ^7.4.0", "zone.js": "~0.15.0" }, @@ -580,11 +575,10 @@ } }, "node_modules/@angular/forms": { - "version": "20.3.12", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-20.3.12.tgz", - "integrity": "sha512-O0Jy8ScaN3qVipDfR4s0SIxGrz/+MbCdmR05ZYVWf1W5P3dvETKt9WNjX9fYYV47GdgSveyFjuCR2NvWlv94zA==", + "version": "20.3.13", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-20.3.13.tgz", + "integrity": "sha512-9vu9MCHJtgXvgPH+ZgXN46N3gpBBAckcmG62P7U+9BKivWvv3rEvkgX+4HvO+Pm2D6x/Jy1xbiQuVq9EDGPSNA==", "license": "MIT", - "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -592,22 +586,22 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/common": "20.3.12", - "@angular/core": "20.3.12", - "@angular/platform-browser": "20.3.12", + "@angular/common": "20.3.13", + "@angular/core": "20.3.13", + "@angular/platform-browser": "20.3.13", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/material": { - "version": "20.2.13", - "resolved": "https://registry.npmjs.org/@angular/material/-/material-20.2.13.tgz", - "integrity": "sha512-9pjp2mULOxojYzOO7qdqt/gSVLrpYBwsIM3K0fxp+mNEcJgNjIxvmRKx46LY9+v0yrPY9puoQvP/T2C+o1+xsw==", + "version": "20.2.14", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-20.2.14.tgz", + "integrity": "sha512-IbAgV6XLsvmHiJzxycVhcNC1PA4M30qi+ERCOir6cT333Bxm8vDV32gsOjfL52uzG5YRARroPC+8s1XqR2oxeA==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, "peerDependencies": { - "@angular/cdk": "20.2.13", + "@angular/cdk": "20.2.14", "@angular/common": "^20.0.0 || ^21.0.0", "@angular/core": "^20.0.0 || ^21.0.0", "@angular/forms": "^20.0.0 || ^21.0.0", @@ -616,11 +610,10 @@ } }, "node_modules/@angular/platform-browser": { - "version": "20.3.12", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-20.3.12.tgz", - "integrity": "sha512-14KQsXZyaQhbRwFz1W58CtbXQc9L+mfuHBgwQjQo99422Yk0ye5WVMb6DHH7dH671qFVqL0XL7zdOPBebaAnJQ==", + "version": "20.3.13", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-20.3.13.tgz", + "integrity": "sha512-KyJzzpD4jMPGotDgVHF0cz9psjlVg6wYQrhuWcLeE97VUvp+CdwdOJ9tlxDlGE5tYZ0JrQxAT0l5qdcr6K9iNQ==", "license": "MIT", - "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -628,9 +621,9 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/animations": "20.3.12", - "@angular/common": "20.3.12", - "@angular/core": "20.3.12" + "@angular/animations": "20.3.13", + "@angular/common": "20.3.13", + "@angular/core": "20.3.13" }, "peerDependenciesMeta": { "@angular/animations": { @@ -639,9 +632,9 @@ } }, "node_modules/@angular/router": { - "version": "20.3.12", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-20.3.12.tgz", - "integrity": "sha512-hUipb9JI/Euy3bdlhzkcWlw3cTyssPTVTDwSvyGxWO4i+UKATQYmxh8EDOrDYzFp6Aexiy0Hff/H8umdsn6ZdA==", + "version": "20.3.13", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-20.3.13.tgz", + "integrity": "sha512-TpNnqmcCFsAnf3tzdtWeGSSmHb9VTKCI6/1NRBgvpiiNSZ4ehQ/rPTy7D4q5uhu50vB0VECUSGkUAygQI8YHdw==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -650,9 +643,9 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/common": "20.3.12", - "@angular/core": "20.3.12", - "@angular/platform-browser": "20.3.12", + "@angular/common": "20.3.13", + "@angular/core": "20.3.13", + "@angular/platform-browser": "20.3.13", "rxjs": "^6.5.3 || ^7.4.0" } }, @@ -687,7 +680,6 @@ "integrity": "sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.27.1", @@ -1644,7 +1636,6 @@ "integrity": "sha512-nqhDw2ZcAUrKNPwhjinJny903bRhI0rQhiDz1LksjeRxqa36i3l75+4iXbOy0rlDpLJGxqtgoPavQjmmyS5UJw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@inquirer/checkbox": "^4.2.1", "@inquirer/confirm": "^5.1.14", @@ -3429,14 +3420,14 @@ ] }, "node_modules/@schematics/angular": { - "version": "20.3.10", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-20.3.10.tgz", - "integrity": "sha512-F9ntS2CElpoWlENf4b03nwdTcN9Ri0Nb4SAE/pfRw3In09h2UHxYyf1ex9jqQt70xltDg4wvyuc3mMs+JlSx9A==", + "version": "20.3.11", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-20.3.11.tgz", + "integrity": "sha512-9mU8nEsty96LT1t+lShDdcfEhJDVfc2sNHEIQsFY8gUVXspkT7lj570odHLqC5aumDYtWc3B/kRSzPxh8SPWFg==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "20.3.10", - "@angular-devkit/schematics": "20.3.10", + "@angular-devkit/core": "20.3.11", + "@angular-devkit/schematics": "20.3.11", "jsonc-parser": "3.3.1" }, "engines": { @@ -3877,7 +3868,6 @@ "integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "undici-types": "~7.16.0" } @@ -4097,9 +4087,9 @@ } }, "node_modules/baseline-browser-mapping": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.29.tgz", - "integrity": "sha512-sXdt2elaVnhpDNRDz+1BDx1JQoJRuNk7oVlAlbGiFkLikHCAQiccexF/9e91zVi6RCgqspl04aP+6Cnl9zRLrA==", + "version": "2.8.30", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.30.tgz", + "integrity": "sha512-aTUKW4ptQhS64+v2d6IkPzymEzzhw+G0bA1g3uBRV3+ntkH+svttKseW5IOR4Ed6NUVKqnY7qT3dKvzQ7io4AA==", "dev": true, "license": "Apache-2.0", "bin": { @@ -4224,7 +4214,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.8.25", "caniuse-lite": "^1.0.30001754", @@ -4412,9 +4401,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001755", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001755.tgz", - "integrity": "sha512-44V+Jm6ctPj7R52Na4TLi3Zri4dWUljJd+RDm+j8LtNCc/ihLCT+X1TzoOAkRETEWqjuLnh9581Tl80FvK7jVA==", + "version": "1.0.30001756", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001756.tgz", + "integrity": "sha512-4HnCNKbMLkLdhJz3TToeVWHSnfJvPaq6vu/eRP0Ahub/07n484XHhBF5AJoSGHdVrS8tKFauUQz8Bp9P7LVx7A==", "dev": true, "funding": [ { @@ -4695,16 +4684,17 @@ } }, "node_modules/content-disposition": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", - "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", + "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==", "dev": true, "license": "MIT", - "dependencies": { - "safe-buffer": "5.2.1" - }, "engines": { - "node": ">= 0.6" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/content-type": { @@ -4992,9 +4982,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.254", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.254.tgz", - "integrity": "sha512-DcUsWpVhv9svsKRxnSCZ86SjD+sp32SGidNB37KpqXJncp1mfUgKbHvBomE89WJDbfVKw1mdv5+ikrvd43r+Bg==", + "version": "1.5.258", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.258.tgz", + "integrity": "sha512-rHUggNV5jKQ0sSdWwlaRDkFc3/rRJIVnOSe9yR4zrR07m3ZxhP4N27Hlg8VeJGGYgFTxK5NqDmWI4DSH72vIJg==", "dev": true, "license": "ISC" }, @@ -5353,7 +5343,6 @@ "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "accepts": "^2.0.0", "body-parser": "^2.2.0", @@ -6317,8 +6306,7 @@ "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-5.9.0.tgz", "integrity": "sha512-OMUvF1iI6+gSRYOhMrH4QYothVLN9C3EJ6wm4g7zLJlnaTl8zbaPOr0bTw70l7QxkoM7sVFOWo83u9B2Fe2Zng==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/jiti": { "version": "2.6.1", @@ -6412,7 +6400,6 @@ "integrity": "sha512-LrtUxbdvt1gOpo3gxG+VAJlJAEMhbWlM4YrFQgql98FwF7+K8K12LYO4hnDdUkNjeztYrOXEMqgTajSWgmtI/w==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@colors/colors": "1.5.0", "body-parser": "^1.19.0", @@ -7129,7 +7116,6 @@ "integrity": "sha512-SL0JY3DaxylDuo/MecFeiC+7pedM0zia33zl0vcjgwcq1q1FWWF1To9EIauPbl8GbMCU0R2e0uJ8bZunhYKD2g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "cli-truncate": "^4.0.0", "colorette": "^2.0.20", @@ -7477,16 +7463,20 @@ } }, "node_modules/mime-types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", - "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", "dev": true, "license": "MIT", "dependencies": { "mime-db": "^1.54.0" }, "engines": { - "node": ">= 0.6" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/mimic-function": { @@ -8991,32 +8981,10 @@ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", "license": "Apache-2.0", - "peer": true, "dependencies": { "tslib": "^2.1.0" } }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "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" - } - ], - "license": "MIT" - }, "node_modules/safe-regex-test": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", @@ -9048,7 +9016,6 @@ "integrity": "sha512-9GUyuksjw70uNpb1MTYWsH9MQHOHY6kwfnkafC24+7aOMZn9+rVMBxRbLvw756mrBFbIsFg6Xw9IkR2Fnn3k+Q==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "chokidar": "^4.0.0", "immutable": "^5.0.2", @@ -9903,8 +9870,7 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD", - "peer": true + "license": "0BSD" }, "node_modules/tuf-js": { "version": "3.1.0", @@ -9942,7 +9908,6 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -10129,7 +10094,6 @@ "integrity": "sha512-uzcxnSDVjAopEUjljkWh8EIrg6tlzrjFUfMcR1EVsRDGwf/ccef0qQPRyOrROwhrTDaApueq+ja+KLPlzR/zdg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", @@ -10532,27 +10496,25 @@ "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", "dev": true, "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } }, "node_modules/zod-to-json-schema": { - "version": "3.24.6", - "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.6.tgz", - "integrity": "sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==", + "version": "3.25.0", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.0.tgz", + "integrity": "sha512-HvWtU2UG41LALjajJrML6uQejQhNJx+JBO9IflpSja4R03iNWfKXrj6W2h7ljuLyc1nKS+9yDyL/9tD1U/yBnQ==", "dev": true, "license": "ISC", "peerDependencies": { - "zod": "^3.24.1" + "zod": "^3.25 || ^4" } }, "node_modules/zone.js": { "version": "0.15.1", "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.15.1.tgz", "integrity": "sha512-XE96n56IQpJM7NAoXswY3XRLcWFW83xe0BiAOeMD7K5k5xecOeul3Qcpx6GqEeeHNkW5DWL5zOyTbEfB4eti8w==", - "license": "MIT", - "peer": true + "license": "MIT" } } } diff --git a/src/app/app-module.ts b/src/app/app-module.ts index 3b6e3f1..7343d2a 100644 --- a/src/app/app-module.ts +++ b/src/app/app-module.ts @@ -27,6 +27,7 @@ import { MatBadgeModule } from '@angular/material/badge'; import { MatTooltipModule } from '@angular/material/tooltip'; import { MatPaginatorModule } from '@angular/material/paginator'; import { MatTableModule } from '@angular/material/table'; +import {MatSelectModule} from '@angular/material/select'; import { HeaderComponent } from './header/header.component'; import { HomeComponent } from './home/home.component'; @@ -71,6 +72,7 @@ import { ZoomWarningComponent } from './zoom-warning/zoom-warning.component'; import { PricelistComponent } from './pricelist/pricelist.component'; + @NgModule({ declarations: [ App, @@ -116,38 +118,39 @@ import { PricelistComponent } from './pricelist/pricelist.component'; ZoomWarningComponent, PricelistComponent, ], - imports: [ - AppRoutingModule, - BrowserModule, - ReactiveFormsModule, - CommonModule, - FormsModule, - MatIconModule, - MatTabsModule, - MatToolbarModule, - MatProgressBarModule, - MatProgressSpinnerModule, - MatSnackBarModule, - MatAutocompleteModule, - MatInputModule, - MatFormFieldModule, - MatIconButton, - MatDividerModule, - MatButtonModule, - MatDialogClose, - MatDialogTitle, - MatDialogContent, - MatDialogActions, - MatCheckboxModule, - MatStepperModule, - NgxMaskDirective, - NgxMaskPipe, - QRCodeComponent, - MatBadgeModule, - MatTooltipModule, - MatPaginatorModule, - MatTableModule, - ], + imports: [ + AppRoutingModule, + BrowserModule, + ReactiveFormsModule, + CommonModule, + FormsModule, + MatIconModule, + MatTabsModule, + MatToolbarModule, + MatProgressBarModule, + MatProgressSpinnerModule, + MatSnackBarModule, + MatAutocompleteModule, + MatInputModule, + MatFormFieldModule, + MatIconButton, + MatDividerModule, + MatButtonModule, + MatDialogClose, + MatDialogTitle, + MatDialogContent, + MatDialogActions, + MatCheckboxModule, + MatStepperModule, + NgxMaskDirective, + NgxMaskPipe, + QRCodeComponent, + MatBadgeModule, + MatTooltipModule, + MatPaginatorModule, + MatTableModule, + MatSelectModule, + ], providers: [ provideBrowserGlobalErrorListeners(), provideHttpClient( diff --git a/src/app/statistics/statistics.component.css b/src/app/statistics/statistics.component.css index e69de29..60459a7 100644 --- a/src/app/statistics/statistics.component.css +++ b/src/app/statistics/statistics.component.css @@ -0,0 +1,6 @@ +.gradient-text { + background: linear-gradient(to right, #6366f1, #db2777); + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +} diff --git a/src/app/statistics/statistics.component.html b/src/app/statistics/statistics.component.html index 4ab7190..9b20459 100644 --- a/src/app/statistics/statistics.component.html +++ b/src/app/statistics/statistics.component.html @@ -1,7 +1,19 @@ -
+

Movie-Statistiken

+ + Filter + + + @for(filterValue of valuesToFilter; track $index){ + {{filterValue}} + } + + + + +
@@ -37,8 +49,9 @@ -
+

Show-Statistiken

+
diff --git a/src/app/statistics/statistics.component.ts b/src/app/statistics/statistics.component.ts index acc4b38..55d99d5 100644 --- a/src/app/statistics/statistics.component.ts +++ b/src/app/statistics/statistics.component.ts @@ -5,7 +5,7 @@ import { StatisticsVorstellung, } from '@infinimotion/model-frontend'; import {LoadingService} from '../loading.service'; -import {firstValueFrom, forkJoin} from 'rxjs'; +import {filter, firstValueFrom, forkJoin} from 'rxjs'; @Component({ selector: 'app-statistics', @@ -19,6 +19,7 @@ export class StatisticsComponent { protected shows: StatisticsVorstellung[] = []; protected moviesDisplayedColumns: string[] = ['id', 'title', 'earnings', 'tickets']; protected showsDisplayedColumns: string[] = ['id', 'hall', 'movie_title', 'date', 'earnings', 'tickets']; + protected valuesToFilter: string[] = ['title', 'date', 'earnings', 'tickets']; protected movieResultsLength: number = 0; protected showsResultLength: number = 0; @@ -53,4 +54,26 @@ export class StatisticsComponent { return new Date(date).toLocaleString("de"); } + filterByCategory(filter: string) { + switch (filter) { + case this.valuesToFilter[0]: //title + this.movies = this.movies.sort((a, b) => a.movieTitle.localeCompare(b.movieTitle)); + this.shows = this.shows.sort((a, b) => a.movieTitle.localeCompare(b.movieTitle)); + //console.log(this.movies, this.shows); + break; + case this.valuesToFilter[1]: //date + this.shows = this.shows.sort((a,b) => new Date(a.showStart).getTime() - new Date(b.showStart).getTime()); + break; + case this.valuesToFilter[2]: //earnings + this.movies = this.movies.sort((a, b) => a.earnings - b.earnings); + this.shows = this.shows.sort((a, b) => a.earnings - b.earnings); + break; + case this.valuesToFilter[3]: //tickets + this.movies = this.movies.sort((a, b) => a.tickets - b.tickets); + this.shows = this.shows.sort((a, b) => a.tickets - b.tickets); + break; + default: + } + + } } diff --git a/src/app/zoom-warning/zoom-warning.component.ts b/src/app/zoom-warning/zoom-warning.component.ts index 8802167..d13790a 100644 --- a/src/app/zoom-warning/zoom-warning.component.ts +++ b/src/app/zoom-warning/zoom-warning.component.ts @@ -1,4 +1,4 @@ -import { DeviceDetectionService } from './../device-detection.service'; +import { DeviceDetectionService } from '../device-detection.service'; import { Component, HostListener, inject, OnDestroy, OnInit } from '@angular/core'; import { filter, Subject, takeUntil } from 'rxjs'; import { ZoomDetectionService } from '../zoom-detection.service';