diff --git a/Client/package-lock.json b/Client/package-lock.json index 3c504a97..978d9168 100644 --- a/Client/package-lock.json +++ b/Client/package-lock.json @@ -8,16 +8,16 @@ "name": "stock.charts", "version": "0.0.0", "dependencies": { - "@angular/animations": "^16.2.8", - "@angular/cdk": "^16.2.7", - "@angular/common": "^16.2.8", - "@angular/compiler": "^16.2.8", - "@angular/core": "^16.2.8", - "@angular/forms": "^16.2.8", - "@angular/material": "^16.2.7", - "@angular/platform-browser": "^16.2.8", - "@angular/platform-browser-dynamic": "^16.2.8", - "@angular/router": "^16.2.8", + "@angular/animations": "^16.2.9", + "@angular/cdk": "^16.2.8", + "@angular/common": "^16.2.9", + "@angular/compiler": "^16.2.9", + "@angular/core": "^16.2.9", + "@angular/forms": "^16.2.9", + "@angular/material": "^16.2.8", + "@angular/platform-browser": "^16.2.9", + "@angular/platform-browser-dynamic": "^16.2.9", + "@angular/router": "^16.2.9", "@ctrl/tinycolor": "^3.6.0", "@ng-matero/extensions": "^16.1.1", "chart.js": "^4.4.0", @@ -31,21 +31,21 @@ "zone.js": "~0.13.1" }, "devDependencies": { - "@angular-devkit/build-angular": "^16.2.5", + "@angular-devkit/build-angular": "^16.2.6", "@angular-eslint/builder": "~16.2.0", "@angular-eslint/eslint-plugin": "~16.2.0", "@angular-eslint/eslint-plugin-template": "~16.2.0", "@angular-eslint/schematics": "~16.2.0", "@angular-eslint/template-parser": "~16.2.0", - "@angular/cli": "^16.2.5", - "@angular/compiler-cli": "^16.2.8", - "@angular/language-service": "^16.2.8", + "@angular/cli": "^16.2.6", + "@angular/compiler-cli": "^16.2.9", + "@angular/language-service": "^16.2.9", "@types/node": "^20.3.1", "@typescript-eslint/eslint-plugin": "^5.60.0", "@typescript-eslint/parser": "^5.60.0", "eslint": "^8.51.0", "ts-node": "~10.9.1", - "typescript": "~5.1.3" + "typescript": "~5.1.6" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -71,12 +71,12 @@ } }, "node_modules/@angular-devkit/architect": { - "version": "0.1602.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1602.5.tgz", - "integrity": "sha512-lbFA2nrF0A1Rs6AU9yYeSHflsiorqL4tSwL7wMtQWMNawRjORiY7IwETyL0PmnlKsbbPlTGnWBhMfeGyBOowEw==", + "version": "0.1602.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1602.6.tgz", + "integrity": "sha512-b1NNV3yNg6Rt86ms20bJIroWUI8ihaEwv5k+EoijEXLoMs4eNs5PhqL+QE8rTj+q9pa1gSrWf2blXor2JGwf1g==", "dev": true, "dependencies": { - "@angular-devkit/core": "16.2.5", + "@angular-devkit/core": "16.2.6", "rxjs": "7.8.1" }, "engines": { @@ -86,15 +86,15 @@ } }, "node_modules/@angular-devkit/build-angular": { - "version": "16.2.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-16.2.5.tgz", - "integrity": "sha512-ZHyMhhSZkulJiDyTvONJV2OwbxTdjbrJGfkUhv4k4f4HfV8ADUXlhanGjuqykxWG2CmDIsV09j/5b1lg2fYqww==", + "version": "16.2.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-16.2.6.tgz", + "integrity": "sha512-QdU/q77K1P8CPEEZGxw1QqLcnA9ofboDWS7vcLRBmFmk2zydtLTApbK0P8GNDRbnmROOKkoaLo+xUTDJz9gvPA==", "dev": true, "dependencies": { "@ampproject/remapping": "2.2.1", - "@angular-devkit/architect": "0.1602.5", - "@angular-devkit/build-webpack": "0.1602.5", - "@angular-devkit/core": "16.2.5", + "@angular-devkit/architect": "0.1602.6", + "@angular-devkit/build-webpack": "0.1602.6", + "@angular-devkit/core": "16.2.6", "@babel/core": "7.22.9", "@babel/generator": "7.22.9", "@babel/helper-annotate-as-pure": "7.22.5", @@ -106,7 +106,7 @@ "@babel/runtime": "7.22.6", "@babel/template": "7.22.5", "@discoveryjs/json-ext": "0.5.7", - "@ngtools/webpack": "16.2.5", + "@ngtools/webpack": "16.2.6", "@vitejs/plugin-basic-ssl": "1.0.1", "ansi-colors": "4.1.3", "autoprefixer": "10.4.14", @@ -214,12 +214,12 @@ "dev": true }, "node_modules/@angular-devkit/build-webpack": { - "version": "0.1602.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1602.5.tgz", - "integrity": "sha512-cpdhZdi1I3/gu3wcwQyIstrbE0kpoa5vvHu9MFzQ9a/DZV0aAev2d1e9rgOwSRUTCB83LV8+eBY99jqmF54U/g==", + "version": "0.1602.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1602.6.tgz", + "integrity": "sha512-BJPR6xdq7gRJ6bVWnZ81xHyH75j7lyLbegCXbvUNaM8TWVBkwWsSdqr2NQ717dNLLn5umg58SFpU/pWMq6CxMQ==", "dev": true, "dependencies": { - "@angular-devkit/architect": "0.1602.5", + "@angular-devkit/architect": "0.1602.6", "rxjs": "7.8.1" }, "engines": { @@ -233,9 +233,9 @@ } }, "node_modules/@angular-devkit/core": { - "version": "16.2.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.2.5.tgz", - "integrity": "sha512-d7xzdvv3aZiNgMtFERR3TxUAdKjzWiWUN94jjBeovITP32yFDz02DzXwUGMFIA3/YhZ/sAEEOKVF3pBXLJ6P4g==", + "version": "16.2.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.2.6.tgz", + "integrity": "sha512-iez/8NYXQT6fqVQLlKmZUIRkFUEZ88ACKbTwD4lBmk0+hXW+bQBxI7JOnE3C4zkcM2YeuTXIYsC5SebTKYiR4Q==", "dev": true, "dependencies": { "ajv": "8.12.0", @@ -260,12 +260,12 @@ } }, "node_modules/@angular-devkit/schematics": { - "version": "16.2.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.2.5.tgz", - "integrity": "sha512-Du2qaN4SVrtPe2jQuo0VVZgFCUwouyv7tTwyJXv32Kvfw9s3IQD/yYSh0H+XTEbplUV9Fc8b9zWaVhVY1yvrSw==", + "version": "16.2.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.2.6.tgz", + "integrity": "sha512-PhpRYHCJ3WvZXmng6Qk8TXeQf83jeBMAf7AIzI8h0fgeBocOl97Xf7bZpLg6GymiU+rVn15igQ4Rz9rKAay8bQ==", "dev": true, "dependencies": { - "@angular-devkit/core": "16.2.5", + "@angular-devkit/core": "16.2.6", "jsonc-parser": "3.2.0", "magic-string": "0.30.1", "ora": "5.4.1", @@ -376,9 +376,9 @@ } }, "node_modules/@angular/animations": { - "version": "16.2.8", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-16.2.8.tgz", - "integrity": "sha512-tjJID1eZORcC9N1f0JIcOzirv6D1q2q7y2S6h51WncJC5G9vOUpIOoOE3gmg0TH0FS41wJe/WfiQku3BuoMA9w==", + "version": "16.2.9", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-16.2.9.tgz", + "integrity": "sha512-J+nsc2x/ZQuh+YwwTzxXUrV+7SBpJq6DDStfTFkZls9PWGRj9fjqQeRCWrfNLllpxopAEjhFkoyK06oSjcwqAw==", "dependencies": { "tslib": "^2.3.0" }, @@ -386,13 +386,13 @@ "node": "^16.14.0 || >=18.10.0" }, "peerDependencies": { - "@angular/core": "16.2.8" + "@angular/core": "16.2.9" } }, "node_modules/@angular/cdk": { - "version": "16.2.7", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-16.2.7.tgz", - "integrity": "sha512-LLbCu0pHHsZWGjSpQW0qRoKYRCm09TuFH2vzsViyaQF7umDKlk52QcDFB/nMioyiWPgqXkyHyGMFG1vFBNSIeg==", + "version": "16.2.8", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-16.2.8.tgz", + "integrity": "sha512-DvqxH909mgSSxWbc5xM5xKLjDMPXY3pzzSVAllngvc9KGPFw240WCs3tSpPaVJI50Esbzdu5O0CyTBfu9jUy4g==", "dependencies": { "tslib": "^2.3.0" }, @@ -406,15 +406,15 @@ } }, "node_modules/@angular/cli": { - "version": "16.2.5", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-16.2.5.tgz", - "integrity": "sha512-7+OG2KKUq+Wi9pl8JJKzH5BICOInMvyRma8/anDiXMTdhuO8cyhPu3xCl8znc6qV9RcUax0HvJmRq11kv/aJTA==", + "version": "16.2.6", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-16.2.6.tgz", + "integrity": "sha512-9poPvUEmlufOAW1Cjk+aA5e2x3mInLtbYYSL/EYviDN2ugmavsSIvxAE/WLnxq6cPWqhNDbHDaqvcmqkcFM3Cw==", "dev": true, "dependencies": { - "@angular-devkit/architect": "0.1602.5", - "@angular-devkit/core": "16.2.5", - "@angular-devkit/schematics": "16.2.5", - "@schematics/angular": "16.2.5", + "@angular-devkit/architect": "0.1602.6", + "@angular-devkit/core": "16.2.6", + "@angular-devkit/schematics": "16.2.6", + "@schematics/angular": "16.2.6", "@yarnpkg/lockfile": "1.1.0", "ansi-colors": "4.1.3", "ini": "4.1.1", @@ -440,9 +440,9 @@ } }, "node_modules/@angular/common": { - "version": "16.2.8", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-16.2.8.tgz", - "integrity": "sha512-0LZSBHnk9c6XPcrQx9D8i0DKi807IuiuOtK4kMa64aj1pySY3TK+uort5hqpmhgdqiCbBHZjgpRpU83LoTTl3w==", + "version": "16.2.9", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-16.2.9.tgz", + "integrity": "sha512-5Lh5KsxCkaoBDeSAghKNF5lCi0083ug4X2X7wnafsSd6Z3xt/rDjH9hDOP5SF5IDLtCVjJgHfs3cCLSTjRuNwg==", "dependencies": { "tslib": "^2.3.0" }, @@ -450,14 +450,14 @@ "node": "^16.14.0 || >=18.10.0" }, "peerDependencies": { - "@angular/core": "16.2.8", + "@angular/core": "16.2.9", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/compiler": { - "version": "16.2.8", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-16.2.8.tgz", - "integrity": "sha512-xWdMAeBkYh8ESk9iBSYnp2qfbGPNReggtNJuUL9I7AFGkzkvEWndyQ+oTXzCM5gjj4nWB5A/AAYYDU54sDac2Q==", + "version": "16.2.9", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-16.2.9.tgz", + "integrity": "sha512-lh799pnbdvzTVShJHOY1JC6c1pwBsZC4UIgB3Itklo9dskGybQma/gP+lE6RhqM4FblNfaaBXGlCMUuY8HkmEQ==", "dependencies": { "tslib": "^2.3.0" }, @@ -465,7 +465,7 @@ "node": "^16.14.0 || >=18.10.0" }, "peerDependencies": { - "@angular/core": "16.2.8" + "@angular/core": "16.2.9" }, "peerDependenciesMeta": { "@angular/core": { @@ -474,9 +474,9 @@ } }, "node_modules/@angular/compiler-cli": { - "version": "16.2.8", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-16.2.8.tgz", - "integrity": "sha512-kKcfr8vbdB+MYDgyeZdxeoVbOpoGFmxOj4IEVnOQ2SPYexcnLEK38qect6LpHGIEG5bOQrkQqWmNnmHAEH4L1g==", + "version": "16.2.9", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-16.2.9.tgz", + "integrity": "sha512-ecH2oOlijJdDqioD9IfgdqJGoRRHI6hAx5rwBxIaYk01ywj13KzvXWPrXbCIupeWtV/XUZUlbwf47nlmL5gxZg==", "dev": true, "dependencies": { "@babel/core": "7.22.5", @@ -497,7 +497,7 @@ "node": "^16.14.0 || >=18.10.0" }, "peerDependencies": { - "@angular/compiler": "16.2.8", + "@angular/compiler": "16.2.9", "typescript": ">=4.9.3 <5.2" } }, @@ -541,9 +541,9 @@ } }, "node_modules/@angular/core": { - "version": "16.2.8", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-16.2.8.tgz", - "integrity": "sha512-v3kwZsjf7mKBGMky+UfxV3iwA1BFy1c3gmjyHSPSll9TPr2jkfwstoB2Cc+wmS2S9ezHFAMX++XXRymKVRQzQg==", + "version": "16.2.9", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-16.2.9.tgz", + "integrity": "sha512-chvPX29ZBcMDuh7rLIgb0Cru6oJ/0FaqRzfOI3wT4W2F9W1HOlCtipovzmPYaUAmXBWfVP4EBO9TOWnpog0S0w==", "dependencies": { "tslib": "^2.3.0" }, @@ -556,9 +556,9 @@ } }, "node_modules/@angular/forms": { - "version": "16.2.8", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-16.2.8.tgz", - "integrity": "sha512-EKv9hdajLnFjz6lH5O8rWtFPqUWws7w+CCoFZw+z+9D6onM26w4Fw0Ng7PMP3g9zGGC4YyqEl729mBsgxAO+7A==", + "version": "16.2.9", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-16.2.9.tgz", + "integrity": "sha512-rxlg2iNJNBH/uc7b5YqybfYc8BkLzzPv1d/nMsQUlY0O2UV2zwNRpcIiWbWd7+ZaKjcyPynVe9FsXC8wgWIABw==", "dependencies": { "tslib": "^2.3.0" }, @@ -566,25 +566,25 @@ "node": "^16.14.0 || >=18.10.0" }, "peerDependencies": { - "@angular/common": "16.2.8", - "@angular/core": "16.2.8", - "@angular/platform-browser": "16.2.8", + "@angular/common": "16.2.9", + "@angular/core": "16.2.9", + "@angular/platform-browser": "16.2.9", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/language-service": { - "version": "16.2.8", - "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-16.2.8.tgz", - "integrity": "sha512-L3k/XGA0rdt2XUEeWRkoutIynNMkZ+0QjxWC1aEeEk4b7tL4SV0X76nANjflwunwVBTzTXBK7keyG/a/Hixksg==", + "version": "16.2.9", + "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-16.2.9.tgz", + "integrity": "sha512-yYfe6TRiPZ5cPs8a/PRBjzIULzPwnGWp9b+DuVZXja3wkE1PhckXEH9o8qsHRnzuJFq9cqZbo+CSIaJrLQctVA==", "dev": true, "engines": { "node": "^16.14.0 || >=18.10.0" } }, "node_modules/@angular/material": { - "version": "16.2.7", - "resolved": "https://registry.npmjs.org/@angular/material/-/material-16.2.7.tgz", - "integrity": "sha512-f5J/YdbrgaoeRhqDVNhauY/nHMSbF4zTph5gYtkGu49MQHpf6vAxfW9m8E2Rs/RPmhb44e3671Z8nONbvP6yGg==", + "version": "16.2.8", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-16.2.8.tgz", + "integrity": "sha512-0nheFMJ2K+X460T1JVa49orCu1P9hg9bP50izZxPwL3lrMUr3scgvKZ5MWcKQBQz/wePAhsgm1quNhTpUZiMHw==", "dependencies": { "@material/animation": "15.0.0-canary.bc9ae6c9c.0", "@material/auto-init": "15.0.0-canary.bc9ae6c9c.0", @@ -637,7 +637,7 @@ }, "peerDependencies": { "@angular/animations": "^16.0.0 || ^17.0.0", - "@angular/cdk": "16.2.7", + "@angular/cdk": "16.2.8", "@angular/common": "^16.0.0 || ^17.0.0", "@angular/core": "^16.0.0 || ^17.0.0", "@angular/forms": "^16.0.0 || ^17.0.0", @@ -646,9 +646,9 @@ } }, "node_modules/@angular/platform-browser": { - "version": "16.2.8", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-16.2.8.tgz", - "integrity": "sha512-y0rt8HmnTjvZrqt+bKU5CnmaI7xQiRWIaLWpYXGgqcqqMDgMYwSm2lV3H6K6S1v0ut+Q+zIWj2rGjr8Apox34Q==", + "version": "16.2.9", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-16.2.9.tgz", + "integrity": "sha512-9Je7+Jmx0AOyRzBBumraVJG3M0R6YbT4c9jTUbLGJCcPxwDI3/u2ZzvW3rBqpmrDaqLxN5f1LcZeTZx287QeqQ==", "dependencies": { "tslib": "^2.3.0" }, @@ -656,9 +656,9 @@ "node": "^16.14.0 || >=18.10.0" }, "peerDependencies": { - "@angular/animations": "16.2.8", - "@angular/common": "16.2.8", - "@angular/core": "16.2.8" + "@angular/animations": "16.2.9", + "@angular/common": "16.2.9", + "@angular/core": "16.2.9" }, "peerDependenciesMeta": { "@angular/animations": { @@ -667,9 +667,9 @@ } }, "node_modules/@angular/platform-browser-dynamic": { - "version": "16.2.8", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-16.2.8.tgz", - "integrity": "sha512-METr1TuMP2fHOXN0wVlW4CpQEIvy5fLSsPprDPuL+C0KeaCLuTST9Ek+yL7IVGu+VIpFZuqMC376z8n6ENo97g==", + "version": "16.2.9", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-16.2.9.tgz", + "integrity": "sha512-ztpo0939vTZ/5CWVSvo41Yl6YPoTZ0If+yTrs7dk1ce0vFgaZXMlc+y5ZwjJIiMM5CvHbhL48Uk+HJNIojP98A==", "dependencies": { "tslib": "^2.3.0" }, @@ -677,16 +677,16 @@ "node": "^16.14.0 || >=18.10.0" }, "peerDependencies": { - "@angular/common": "16.2.8", - "@angular/compiler": "16.2.8", - "@angular/core": "16.2.8", - "@angular/platform-browser": "16.2.8" + "@angular/common": "16.2.9", + "@angular/compiler": "16.2.9", + "@angular/core": "16.2.9", + "@angular/platform-browser": "16.2.9" } }, "node_modules/@angular/router": { - "version": "16.2.8", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-16.2.8.tgz", - "integrity": "sha512-mWpapabWtk8Qtyb2BalXtvud9m6BCiKg8moJNb8dEAGjDzMTWqWOr4zkFHoIFX+gj2JKKDa6btPWVD6J5K6Ojg==", + "version": "16.2.9", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-16.2.9.tgz", + "integrity": "sha512-5vrJNMblTDx3WC3dtaqLddWNtR0P9iwpqffeZL1uobBIwP4hbJx+8Dos3TwxGR4hnopFKahoDQ5nC0NOQslyog==", "dependencies": { "tslib": "^2.3.0" }, @@ -694,9 +694,9 @@ "node": "^16.14.0 || >=18.10.0" }, "peerDependencies": { - "@angular/common": "16.2.8", - "@angular/core": "16.2.8", - "@angular/platform-browser": "16.2.8", + "@angular/common": "16.2.9", + "@angular/core": "16.2.9", + "@angular/platform-browser": "16.2.9", "rxjs": "^6.5.3 || ^7.4.0" } }, @@ -4037,9 +4037,9 @@ } }, "node_modules/@ngtools/webpack": { - "version": "16.2.5", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-16.2.5.tgz", - "integrity": "sha512-wq1dbbOUwrY/zkpZltcgmyEFANbJon79E5s4ueT3IT4NyiYh1uJeWa2vmB0kof7VP5Xhm/jutkJk336z67oLPg==", + "version": "16.2.6", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-16.2.6.tgz", + "integrity": "sha512-d8ZlZL6dOtWmHdjG9PTGBkdiJMcsXD2tp6WeFRVvTEuvCI3XvKsUXBvJDE+mZOhzn5pUEYt+1TR5DHjDZbME3w==", "dev": true, "engines": { "node": "^16.14.0 || >=18.10.0", @@ -4485,13 +4485,13 @@ } }, "node_modules/@schematics/angular": { - "version": "16.2.5", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.2.5.tgz", - "integrity": "sha512-huYEiU5KK2/upy9LJUdecIB4Jwh4LQMQz5cz6EMr8uhrCTykEKXlBpGJVHZyDK1K5/riymSr9G86BdN2PcY1Cw==", + "version": "16.2.6", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.2.6.tgz", + "integrity": "sha512-fM09WPqST+nhVGV5Q3fhG7WKo96kgSVMsbz3wGS0DmTn4zge7ZWnrW3VvbxnMapmGoKa9DFPqdqNln4ADcdIMQ==", "dev": true, "dependencies": { - "@angular-devkit/core": "16.2.5", - "@angular-devkit/schematics": "16.2.5", + "@angular-devkit/core": "16.2.6", + "@angular-devkit/schematics": "16.2.6", "jsonc-parser": "3.2.0" }, "engines": { @@ -4692,9 +4692,9 @@ "dev": true }, "node_modules/@types/express": { - "version": "4.17.18", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.18.tgz", - "integrity": "sha512-Sxv8BSLLgsBYmcnGdGjjEjqET2U+AKAdCRODmMiq02FgjwuV75Ut85DRpvFjyw/Mk0vgUOliGRU0UUmuuZHByQ==", + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.19.tgz", + "integrity": "sha512-UtOfBtzN9OvpZPPbnnYunfjM7XCI4jyk1NvnFhTVz5krYAnW4o5DCoIekvms+8ApqhB4+9wSge1kBijdfTSmfg==", "dev": true, "dependencies": { "@types/body-parser": "*", @@ -4812,9 +4812,9 @@ } }, "node_modules/@types/ws": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.6.tgz", - "integrity": "sha512-8B5EO9jLVCy+B58PLHvLDuOD8DRVMgQzq8d55SjLCOn9kqGyqOvy27exVaTio1q1nX5zLu8/6N0n2ThSxOM6tg==", + "version": "8.5.7", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.7.tgz", + "integrity": "sha512-6UrLjiDUvn40CMrAubXuIVtj2PEfKDffJS7ychvnPU44j+KVeXmdHHTgqcM/dxLUTHxlXHiFM8Skmb8ozGdTnQ==", "dev": true, "dependencies": { "@types/node": "*" @@ -8320,10 +8320,13 @@ } }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/gauge": { "version": "4.0.4", diff --git a/Client/package.json b/Client/package.json index b5932e4c..73c54a44 100644 --- a/Client/package.json +++ b/Client/package.json @@ -11,16 +11,16 @@ }, "private": false, "dependencies": { - "@angular/animations": "^16.2.8", - "@angular/cdk": "^16.2.7", - "@angular/common": "^16.2.8", - "@angular/compiler": "^16.2.8", - "@angular/core": "^16.2.8", - "@angular/forms": "^16.2.8", - "@angular/material": "^16.2.7", - "@angular/platform-browser": "^16.2.8", - "@angular/platform-browser-dynamic": "^16.2.8", - "@angular/router": "^16.2.8", + "@angular/animations": "^16.2.9", + "@angular/cdk": "^16.2.8", + "@angular/common": "^16.2.9", + "@angular/compiler": "^16.2.9", + "@angular/core": "^16.2.9", + "@angular/forms": "^16.2.9", + "@angular/material": "^16.2.8", + "@angular/platform-browser": "^16.2.9", + "@angular/platform-browser-dynamic": "^16.2.9", + "@angular/router": "^16.2.9", "@ctrl/tinycolor": "^3.6.0", "@ng-matero/extensions": "^16.1.1", "chart.js": "^4.4.0", @@ -34,20 +34,20 @@ "zone.js": "~0.13.1" }, "devDependencies": { - "@angular-devkit/build-angular": "^16.2.5", + "@angular-devkit/build-angular": "^16.2.6", "@angular-eslint/builder": "~16.2.0", "@angular-eslint/eslint-plugin": "~16.2.0", "@angular-eslint/eslint-plugin-template": "~16.2.0", "@angular-eslint/schematics": "~16.2.0", "@angular-eslint/template-parser": "~16.2.0", - "@angular/cli": "^16.2.5", - "@angular/compiler-cli": "^16.2.8", - "@angular/language-service": "^16.2.8", + "@angular/cli": "^16.2.6", + "@angular/compiler-cli": "^16.2.9", + "@angular/language-service": "^16.2.9", "@types/node": "^20.3.1", "@typescript-eslint/eslint-plugin": "^5.60.0", "@typescript-eslint/parser": "^5.60.0", "eslint": "^8.51.0", "ts-node": "~10.9.1", - "typescript": "~5.1.3" + "typescript": "~5.1.6" } } diff --git a/Client/src/app/app.component.scss b/Client/src/app/app.component.scss index fadeca33..91e81f28 100644 --- a/Client/src/app/app.component.scss +++ b/Client/src/app/app.component.scss @@ -14,7 +14,7 @@ .button-container { position: absolute; - top: -50px; + top: -56px; right: 8px; height: 100%; min-height: 100vh; diff --git a/Client/src/app/app.component.ts b/Client/src/app/app.component.ts index d5e2f177..f6b91bd4 100644 --- a/Client/src/app/app.component.ts +++ b/Client/src/app/app.component.ts @@ -24,8 +24,6 @@ export class AppComponent implements OnInit { // SETTINGS DIALOG openSettingsDialog(): void { this.settingsDialog.open(SettingsComponent, { - minWidth: "300px", - maxHeight: "80vh", autoFocus: "dialog" }); } diff --git a/Client/src/app/chart/chart.component.scss b/Client/src/app/chart/chart.component.scss index 54ab3e0f..42ae2e86 100644 --- a/Client/src/app/chart/chart.component.scss +++ b/Client/src/app/chart/chart.component.scss @@ -9,15 +9,22 @@ max-width: 1024px; margin: auto; - height: 55vh; - // height: 300px; // for doc site only + aspect-ratio: 2.5; - @media (max-height: 700px){ - height: 40vh; + // tablet-lg + @media (max-width: 880px) { + aspect-ratio: 2; } - @media (max-height: 400px){ - height: calc(100vh - 64px); // full-screen (with toolbar) + // mobile + @media (max-width: 600px) { + aspect-ratio: 5/4; + } + + // landscape, full screen + @media (max-height: 400px) and (orientation: landscape) { + aspect-ratio: unset; + height: calc(100vh); } } @@ -26,15 +33,29 @@ padding: 0 8px; max-width: 1024px; margin: auto; - margin-top: 0.5rem; + margin-top: 0; + + aspect-ratio: 10; + + // tablet-lg + @media (max-width: 880px) { + aspect-ratio: 8; + } - height: 15vh; + // tablet-lg, landscape + @media (max-width: 880px) and (orientation: landscape){ + aspect-ratio: unset; + height: 25vh; } - @media (max-height: 800px){ - height: 20vh; + // mobile, landscape + @media (max-height: 600px) and (orientation: landscape) { + aspect-ratio: unset; + height: 33.33vh; } - @media (max-height: 400px){ - height: 30vh; + // mobile + @media (max-height: 400px) { + aspect-ratio: unset; + height: 50vh; } } diff --git a/Client/src/app/picker/pick-config.component.html b/Client/src/app/picker/pick-config.component.html index cd07b924..18afb896 100644 --- a/Client/src/app/picker/pick-config.component.html +++ b/Client/src/app/picker/pick-config.component.html @@ -1,4 +1,4 @@ -

{{listing.name}}

+

{{listing.name}}

diff --git a/Client/src/app/picker/pick-config.component.scss b/Client/src/app/picker/pick-config.component.scss index a46a4652..ca185559 100644 --- a/Client/src/app/picker/pick-config.component.scss +++ b/Client/src/app/picker/pick-config.component.scss @@ -1,9 +1,13 @@ -// @import "src/app/styles-theme"; - .mat-mdc-dialog-title { text-align: center; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; } +mat-dialog-content { + max-height: calc(100vh - 132.8px) !important; +} h2 { font-size: 1.3em; diff --git a/Client/src/app/picker/settings.component.ts b/Client/src/app/picker/settings.component.ts index 2e7fdbc3..d0d7be20 100644 --- a/Client/src/app/picker/settings.component.ts +++ b/Client/src/app/picker/settings.component.ts @@ -53,7 +53,6 @@ export class SettingsComponent { // open settings for indicator to add this.picker.open(PickConfigComponent, { - minWidth: '300px', autoFocus: "dialog", data: listing }); diff --git a/Client/src/app/services/chart.service.ts b/Client/src/app/services/chart.service.ts index cded94af..2e6378f9 100644 --- a/Client/src/app/services/chart.service.ts +++ b/Client/src/app/services/chart.service.ts @@ -514,7 +514,7 @@ export class ChartService { const labelColor = this.ts.isDarkTheme ? '#757575' : '#212121'; const annotation: AnnotationOptions = - this.commonAnnotation(selection.label, labelColor, xPos, yPos, -2, 1); + this.commonAnnotation(selection.label, labelColor, xPos, yPos, 0, 1); selection.chart.options.plugins.annotation.annotations = { annotation }; selection.chart.update(); @@ -526,14 +526,14 @@ export class ChartService { const xPos: ScaleValue = this.chartOverlay.scales["xAxis"].min; const yPos: ScaleValue = this.chartOverlay.scales["yAxis"].max; - let adjY: number = 0; + let adjY: number = 10; this.chartOverlay.options.plugins.annotation.annotations = this.selections .filter(x => x.chartType == 'overlay') .map((selection: IndicatorSelection, index: number) => { const annotation: AnnotationOptions = - this.commonAnnotation(selection.label, selection.results[0].color, xPos, yPos, -2, adjY); + this.commonAnnotation(selection.label, selection.results[0].color, xPos, yPos, 0, adjY); annotation.id = "legend" + (index + 1).toString(); adjY += 15; return annotation; diff --git a/Client/src/styles/_themed-parts.scss b/Client/src/styles/_themed-parts.scss index 407d97d8..7ca95454 100644 --- a/Client/src/styles/_themed-parts.scss +++ b/Client/src/styles/_themed-parts.scss @@ -16,7 +16,8 @@ // ANGULAR MATERIAL OVERRIDES // TOOLBAR - .main-toolbar { + .main-toolbar, + .mat-toolbar-single-row { background-color: transparent; @@ -28,10 +29,9 @@ max-width: $maxwidth; margin-left: auto; margin-right: auto; - padding: 0 9px; + padding: 0 8px; a { - font-family: "Google Sans", Roboto, Arial, Helvetica, sans-serif; text-decoration: none; color: inherit; @@ -44,8 +44,10 @@ // MAIN FOOTER .footer { - padding: 1rem 9px; + padding: 1rem 8px; margin-top: 3rem; + margin-bottom: 3rem; + text-align: center; color: mat.get-color-from-palette($accent, 600); diff --git a/README.md b/README.md index 6c2820a8..aa76d6fe 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ If you want to host on your local computer and review the source code, follow th ### Prerequisites -- [Git](https://git-scm.com/) and [Node.js](https://nodejs.org/) v14.x or later +- [Git](https://git-scm.com/) and [Node.js](https://nodejs.org/) v18.x or later - [Visual Studio](http://visualstudio.com) ### Steps