diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2c4fccf8..15a20f92 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,22 @@
 
 ---
 
+#### `4.3.11`
+
+- fix(offcanvas): avoid flicker on the first render
+
+---
+
+#### `4.3.10`
+
+- feat(offcanvas): add responsive variations
+- refactor(offcanvas): animation classes, scrollbar behavior, cleanup
+- refactor(modal, offcanvas): move get scrollbarWidth to BackdropService
+- feat(offcanvas): add backdrop static option support
+- chore: dependencies update
+
+---
+
 #### `4.3.9`
 
 - chore: dependencies update
diff --git a/package-lock.json b/package-lock.json
index d35fc91a..c1e3d77d 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,24 +1,24 @@
 {
   "name": "coreui-angular-dev",
-  "version": "4.3.9",
+  "version": "4.3.11",
   "lockfileVersion": 2,
   "requires": true,
   "packages": {
     "": {
       "name": "coreui-angular-dev",
-      "version": "4.3.9",
+      "version": "4.3.11",
       "license": "MIT",
       "dependencies": {
-        "@angular/animations": "^15.1.2",
-        "@angular/cdk": "^15.1.2",
-        "@angular/common": "^15.1.2",
-        "@angular/compiler": "^15.1.2",
-        "@angular/core": "^15.1.2",
-        "@angular/forms": "^15.1.2",
-        "@angular/localize": "^15.1.2",
-        "@angular/platform-browser": "^15.1.2",
-        "@angular/platform-browser-dynamic": "^15.1.2",
-        "@angular/router": "^15.1.2",
+        "@angular/animations": "^15.1.3",
+        "@angular/cdk": "^15.1.3",
+        "@angular/common": "^15.1.3",
+        "@angular/compiler": "^15.1.3",
+        "@angular/core": "^15.1.3",
+        "@angular/forms": "^15.1.3",
+        "@angular/localize": "^15.1.3",
+        "@angular/platform-browser": "^15.1.3",
+        "@angular/platform-browser-dynamic": "^15.1.3",
+        "@angular/router": "^15.1.3",
         "@coreui/chartjs": "^3.0.0",
         "@popperjs/core": "~2.11.6",
         "chart.js": "^3.9.1",
@@ -28,22 +28,22 @@
         "zone.js": "~0.12.0"
       },
       "devDependencies": {
-        "@angular-devkit/build-angular": "^15.1.3",
+        "@angular-devkit/build-angular": "^15.1.4",
         "@angular-eslint/builder": "^15.2.0",
         "@angular-eslint/eslint-plugin": "^15.2.0",
         "@angular-eslint/eslint-plugin-template": "^15.2.0",
         "@angular-eslint/schematics": "^15.2.0",
         "@angular-eslint/template-parser": "^15.2.0",
-        "@angular/cli": "^15.1.3",
-        "@angular/compiler-cli": "^15.1.2",
-        "@angular/language-service": "^15.1.2",
+        "@angular/cli": "^15.1.4",
+        "@angular/compiler-cli": "^15.1.3",
+        "@angular/language-service": "^15.1.3",
         "@coreui/icons": "^3.0.0",
         "@types/jasmine": "~4.3.1",
         "@types/lodash-es": "^4.17.6",
-        "@types/node": "^18.11.18",
-        "@typescript-eslint/eslint-plugin": "^5.49.0",
-        "@typescript-eslint/parser": "^5.49.0",
-        "eslint": "~8.32.0",
+        "@types/node": "^18.11.19",
+        "@typescript-eslint/eslint-plugin": "^5.50.0",
+        "@typescript-eslint/parser": "^5.50.0",
+        "eslint": "~8.33.0",
         "jasmine-core": "^4.5.0",
         "karma": "^6.4.1",
         "karma-chrome-launcher": "^3.1.1",
@@ -52,7 +52,7 @@
         "karma-jasmine-html-reporter": "^2.0.0",
         "ng-packagr": "^15.1.1",
         "prettier": "^2.8.3",
-        "typescript": "~4.9.4"
+        "typescript": "~4.9.5"
       },
       "engines": {
         "node": "^14.20.0 || ^16.13.0 || ^18.10.0",
@@ -72,12 +72,12 @@
       }
     },
     "node_modules/@angular-devkit/architect": {
-      "version": "0.1501.3",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1501.3.tgz",
-      "integrity": "sha512-+hvesYUgChdAkBcWSO2pseIGBzRDAATyIw36UBwOmYkL7wM65TEXpspbo5ZIfU1M/l7X/lHzDXLTzCMfb0Qxbg==",
+      "version": "0.1501.4",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1501.4.tgz",
+      "integrity": "sha512-PE0CqPaNzcz8yHEuJwqtKxYvXX9hgWWvC6hI2DWKtC+5WgJLAYJNEGofXQRc227Nj+YySEYUUo8Ja8SYl3lDxA==",
       "dev": true,
       "dependencies": {
-        "@angular-devkit/core": "15.1.3",
+        "@angular-devkit/core": "15.1.4",
         "rxjs": "6.6.7"
       },
       "engines": {
@@ -105,15 +105,15 @@
       "dev": true
     },
     "node_modules/@angular-devkit/build-angular": {
-      "version": "15.1.3",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-15.1.3.tgz",
-      "integrity": "sha512-QQfvpccShQldpMmuwgpZfbE6cNiNwff2aAY1YGswU9DBpeoz4YWeW4e8ss2j/Mxn5RXo7cbzWkhbm1xXTFY1FA==",
+      "version": "15.1.4",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-15.1.4.tgz",
+      "integrity": "sha512-+vubHYyQn8HJ+uJQndr8xFlX6C7y1kdnzTiKgx6QFvA5sd/IhXXzsnDd1wFer1lCrZ+1qgfhG9HI/RL3cBeKrA==",
       "dev": true,
       "dependencies": {
         "@ampproject/remapping": "2.2.0",
-        "@angular-devkit/architect": "0.1501.3",
-        "@angular-devkit/build-webpack": "0.1501.3",
-        "@angular-devkit/core": "15.1.3",
+        "@angular-devkit/architect": "0.1501.4",
+        "@angular-devkit/build-webpack": "0.1501.4",
+        "@angular-devkit/core": "15.1.4",
         "@babel/core": "7.20.12",
         "@babel/generator": "7.20.7",
         "@babel/helper-annotate-as-pure": "7.18.6",
@@ -124,7 +124,7 @@
         "@babel/runtime": "7.20.7",
         "@babel/template": "7.20.7",
         "@discoveryjs/json-ext": "0.5.7",
-        "@ngtools/webpack": "15.1.3",
+        "@ngtools/webpack": "15.1.4",
         "ansi-colors": "4.1.3",
         "autoprefixer": "10.4.13",
         "babel-loader": "9.1.2",
@@ -238,12 +238,12 @@
       "dev": true
     },
     "node_modules/@angular-devkit/build-webpack": {
-      "version": "0.1501.3",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1501.3.tgz",
-      "integrity": "sha512-ZsgbTFf1I9hAf4FvNxBJphF95Hw9QchCaWQdQXY+2mqQuPP70uK1Kd/TzNCfx5lyNFHMI9oWpCg2QLrAdwqJnA==",
+      "version": "0.1501.4",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1501.4.tgz",
+      "integrity": "sha512-rJ7KTBDW0UHgVJjQ23qJfGun+pDX3ZG2z0OtsskdsOI62SAvW1cVLuS50ICTcWW6gtcDO0R/6Q1RLbaV1JHZ5A==",
       "dev": true,
       "dependencies": {
-        "@angular-devkit/architect": "0.1501.3",
+        "@angular-devkit/architect": "0.1501.4",
         "rxjs": "6.6.7"
       },
       "engines": {
@@ -275,9 +275,9 @@
       "dev": true
     },
     "node_modules/@angular-devkit/core": {
-      "version": "15.1.3",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-15.1.3.tgz",
-      "integrity": "sha512-biuS+DceyZEqcE/cLvndtslqn3Q6uCmJ0RLpACikH6ESYorvk+A91H0ofuGue6HB/2CUN/F+mPSr7sWVI1W9sA==",
+      "version": "15.1.4",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-15.1.4.tgz",
+      "integrity": "sha512-PW5MRmd9DHJR4FaXchwQtj9pXnsghSTnwRvfZeCRNYgU2sv0DKyTV+YTSJB+kNXnoPNG1Je6amDEkiXecpspXg==",
       "dev": true,
       "dependencies": {
         "ajv": "8.12.0",
@@ -319,12 +319,12 @@
       "dev": true
     },
     "node_modules/@angular-devkit/schematics": {
-      "version": "15.1.3",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-15.1.3.tgz",
-      "integrity": "sha512-IXZ56/5uFnHqnLq+80JhmFx5mflyW8LgS/8Tr2l5DYVA71Fh3b1q+vGrEZB1X2zPoFeDOGAxv3Fi+kmjcz1GZg==",
+      "version": "15.1.4",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-15.1.4.tgz",
+      "integrity": "sha512-jpddxo9Qd2yRQ1t9FLhAx5S+luz6HkyhDytq0LFKbxf9ikf1J4oy9riPBFl4pRmrNARWcHZ6GbD20/Ky8PjmXQ==",
       "dev": true,
       "dependencies": {
-        "@angular-devkit/core": "15.1.3",
+        "@angular-devkit/core": "15.1.4",
         "jsonc-parser": "3.2.0",
         "magic-string": "0.27.0",
         "ora": "5.4.1",
@@ -447,9 +447,9 @@
       }
     },
     "node_modules/@angular/animations": {
-      "version": "15.1.2",
-      "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-15.1.2.tgz",
-      "integrity": "sha512-Bamm2gNdSMVeXEFwlXG75rx49NJfbupDQM6geix0uI30iVCYlufPz+kMe4SzpasO5hHzP7Pat3cmEu4356It+g==",
+      "version": "15.1.3",
+      "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-15.1.3.tgz",
+      "integrity": "sha512-qvOLYx8XWolwFWwYoPjt+jQLDFaCQEPjb26iczewiqd+xcAdYn4Tl10NCJtOsx+YfTdpWtKRzvxYr1JxnGQTdw==",
       "dependencies": {
         "tslib": "^2.3.0"
       },
@@ -457,13 +457,13 @@
         "node": "^14.20.0 || ^16.13.0 || >=18.10.0"
       },
       "peerDependencies": {
-        "@angular/core": "15.1.2"
+        "@angular/core": "15.1.3"
       }
     },
     "node_modules/@angular/cdk": {
-      "version": "15.1.2",
-      "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-15.1.2.tgz",
-      "integrity": "sha512-LO3b/akdcPaRwSa+rbrI02THwQm+O4Z3rDIvbDTHyCf3Vmk3p7gsp8WtKAMMJlkCF88VQ3Wh4ZZcfNAtbVO7EA==",
+      "version": "15.1.3",
+      "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-15.1.3.tgz",
+      "integrity": "sha512-FRb1ZirybQGVlRx34vsnkIyy4WHJlrRg2mwPeJ90b0DzIWuIZIiPYxxR2bAi/Si1IjnK8YBdacd5DXPdrW1jyw==",
       "dependencies": {
         "tslib": "^2.3.0"
       },
@@ -477,15 +477,15 @@
       }
     },
     "node_modules/@angular/cli": {
-      "version": "15.1.3",
-      "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-15.1.3.tgz",
-      "integrity": "sha512-gNVvyvkGZ1zKiDdWjPqCLst8iHcB1C4B2nXrr3B+/YAd1G/y87VI1aBKFlK9ulG4tkwktog5uQaut7xs48IsEQ==",
+      "version": "15.1.4",
+      "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-15.1.4.tgz",
+      "integrity": "sha512-ebZiI4arb9wtOUMmTyUvjgDovmwpY8hmGLbkKZiEmAX8+2gbl4e97M+zd0SICZDU8bu5VcpoP6Q3Qb6vVjab9A==",
       "dev": true,
       "dependencies": {
-        "@angular-devkit/architect": "0.1501.3",
-        "@angular-devkit/core": "15.1.3",
-        "@angular-devkit/schematics": "15.1.3",
-        "@schematics/angular": "15.1.3",
+        "@angular-devkit/architect": "0.1501.4",
+        "@angular-devkit/core": "15.1.4",
+        "@angular-devkit/schematics": "15.1.4",
+        "@schematics/angular": "15.1.4",
         "@yarnpkg/lockfile": "1.1.0",
         "ansi-colors": "4.1.3",
         "ini": "3.0.1",
@@ -511,9 +511,9 @@
       }
     },
     "node_modules/@angular/common": {
-      "version": "15.1.2",
-      "resolved": "https://registry.npmjs.org/@angular/common/-/common-15.1.2.tgz",
-      "integrity": "sha512-1Ra6EoaZjPcdDsGBge3qSajO1ECYceX+2EWHdjvJ9ZEIaXsLNFMQBUMgJnjsnrojs9Gd3bxJ0WHkahij5/8WNA==",
+      "version": "15.1.3",
+      "resolved": "https://registry.npmjs.org/@angular/common/-/common-15.1.3.tgz",
+      "integrity": "sha512-UjC0COaOcU1g/ODBBetv/BpdaFC/Y32DvXJ9qbD7kkwLwoqCjGOLDvtP36r9zEzPmH7oNkgNGDkgR3gyb82s5A==",
       "dependencies": {
         "tslib": "^2.3.0"
       },
@@ -521,14 +521,14 @@
         "node": "^14.20.0 || ^16.13.0 || >=18.10.0"
       },
       "peerDependencies": {
-        "@angular/core": "15.1.2",
+        "@angular/core": "15.1.3",
         "rxjs": "^6.5.3 || ^7.4.0"
       }
     },
     "node_modules/@angular/compiler": {
-      "version": "15.1.2",
-      "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-15.1.2.tgz",
-      "integrity": "sha512-hKlr1i61a2Gl0h53goSSUbZmzNgdC1zAHu+Ws0+1Qfv9cDgg1aVphFGFMdV0kbjLV+k7LyFjj5EgWU48o5UXww==",
+      "version": "15.1.3",
+      "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-15.1.3.tgz",
+      "integrity": "sha512-CxEpm5Z3EpjeGNoWKtcHOrf2IQTSckpAEFwsRrADP2nqcXXYp/IjIHi+PUTjLhjrOEbukH9zreHsL5BoIQhgUQ==",
       "dependencies": {
         "tslib": "^2.3.0"
       },
@@ -536,7 +536,7 @@
         "node": "^14.20.0 || ^16.13.0 || >=18.10.0"
       },
       "peerDependencies": {
-        "@angular/core": "15.1.2"
+        "@angular/core": "15.1.3"
       },
       "peerDependenciesMeta": {
         "@angular/core": {
@@ -545,9 +545,9 @@
       }
     },
     "node_modules/@angular/compiler-cli": {
-      "version": "15.1.2",
-      "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-15.1.2.tgz",
-      "integrity": "sha512-gAqbQSKI4oeboh0UKsFdaEoST9IBVzqeckJzSTwAGxJeS33IM7Jjo3LViqHuzQyWKXe6srkci0LD4C2Mrj4kfQ==",
+      "version": "15.1.3",
+      "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-15.1.3.tgz",
+      "integrity": "sha512-z5bGdQQcStXWPpb5vztqqUOET+vxw+GUFtfktYxV40kE2d1zHLZh93AGEnM1NnBaOz+9NZrX+dWoEyWmv/T2LQ==",
       "dependencies": {
         "@babel/core": "7.19.3",
         "@jridgewell/sourcemap-codec": "^1.4.14",
@@ -569,7 +569,7 @@
         "node": "^14.20.0 || ^16.13.0 || >=18.10.0"
       },
       "peerDependencies": {
-        "@angular/compiler": "15.1.2",
+        "@angular/compiler": "15.1.3",
         "typescript": ">=4.8.2 <5.0"
       }
     },
@@ -611,9 +611,9 @@
       }
     },
     "node_modules/@angular/core": {
-      "version": "15.1.2",
-      "resolved": "https://registry.npmjs.org/@angular/core/-/core-15.1.2.tgz",
-      "integrity": "sha512-K9pz6Bq6RuY/OWhKLZT1JQvk4orvU9wozgXY8cZaOGmNCQQ7sJv5zGkO5csO6o1ON1v/AHowrP/FAF1i8tml5g==",
+      "version": "15.1.3",
+      "resolved": "https://registry.npmjs.org/@angular/core/-/core-15.1.3.tgz",
+      "integrity": "sha512-rad9OYnaoRnXBztOBXsiD59VvOZTpsvO3sWx6KndytQFceFfkL722bF2l2LARN+R3IWDOwRap46HOtc0O0N+sw==",
       "dependencies": {
         "tslib": "^2.3.0"
       },
@@ -626,9 +626,9 @@
       }
     },
     "node_modules/@angular/forms": {
-      "version": "15.1.2",
-      "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-15.1.2.tgz",
-      "integrity": "sha512-ZL3EkCQ2SDrv9hdyPX54WPiTf9SQpkKz4bn/Gxe6lySLy0oHR5Te68DPMljWBeHYa+cNTCDdPN81AKLIDjRQtA==",
+      "version": "15.1.3",
+      "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-15.1.3.tgz",
+      "integrity": "sha512-vEgiZBk3rGGp4tBQHl9EaspEjYh70lkz6/zYreObTbMdCB54bkbl+jn+JbQyFj+TPfukiumtiG3/477vKzYnSg==",
       "dependencies": {
         "tslib": "^2.3.0"
       },
@@ -636,25 +636,25 @@
         "node": "^14.20.0 || ^16.13.0 || >=18.10.0"
       },
       "peerDependencies": {
-        "@angular/common": "15.1.2",
-        "@angular/core": "15.1.2",
-        "@angular/platform-browser": "15.1.2",
+        "@angular/common": "15.1.3",
+        "@angular/core": "15.1.3",
+        "@angular/platform-browser": "15.1.3",
         "rxjs": "^6.5.3 || ^7.4.0"
       }
     },
     "node_modules/@angular/language-service": {
-      "version": "15.1.2",
-      "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-15.1.2.tgz",
-      "integrity": "sha512-TMGoJRe6eQZxRe3uy/3yP5OTJHn+swtWd8qvvlmgMiqITW2m9MSnqIpOrEaJOtNrzhBoM5b/QxRXJrg9qD1ffQ==",
+      "version": "15.1.3",
+      "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-15.1.3.tgz",
+      "integrity": "sha512-Sxp5nXQ/VR7ESLL35iRkHun8R4w3Zp+d5KmkCmgw67zjDgAJhosrsoqIUbGWYFMFJ5YUA4IHhQUwY8snyUDwug==",
       "dev": true,
       "engines": {
         "node": "^14.20.0 || ^16.13.0 || >=18.10.0"
       }
     },
     "node_modules/@angular/localize": {
-      "version": "15.1.2",
-      "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-15.1.2.tgz",
-      "integrity": "sha512-wnNgq8tn5W1u2B/G2Q08XiHKucJidNE+U5OuYk+qjf2M5M5DVwBhF/mxJxWoDKSuLg/JIJ8FUiKjEhJ5iUJ4lg==",
+      "version": "15.1.3",
+      "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-15.1.3.tgz",
+      "integrity": "sha512-d1K3peTNV9RfNb5Zt58OTX31TGRtq8iIqX7TTN52l7214ky4MEX1F+eDvqdRKSAaev+aNEwz6RX9LW2k1XAhPQ==",
       "dependencies": {
         "@babel/core": "7.19.3",
         "glob": "8.1.0",
@@ -669,8 +669,8 @@
         "node": "^14.20.0 || ^16.13.0 || >=18.10.0"
       },
       "peerDependencies": {
-        "@angular/compiler": "15.1.2",
-        "@angular/compiler-cli": "15.1.2"
+        "@angular/compiler": "15.1.3",
+        "@angular/compiler-cli": "15.1.3"
       }
     },
     "node_modules/@angular/localize/node_modules/@babel/core": {
@@ -748,9 +748,9 @@
       }
     },
     "node_modules/@angular/platform-browser": {
-      "version": "15.1.2",
-      "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-15.1.2.tgz",
-      "integrity": "sha512-eWyfUOFZ05vB0UfPUTPK7pPJZjFtbGZlJOea3IUqEohuyRqq3CqYCrv7SVXGKQVOx1qRA0Ckr9FOB8/qYbTq1A==",
+      "version": "15.1.3",
+      "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-15.1.3.tgz",
+      "integrity": "sha512-WJBN3klssfcRGKY2L2DIpNGbaMQfi2X1le1ZXQAnsfECQ/pua+lFstJUT+RP+Bx4X8icuDggKkS/JPOiBhxARw==",
       "dependencies": {
         "tslib": "^2.3.0"
       },
@@ -758,9 +758,9 @@
         "node": "^14.20.0 || ^16.13.0 || >=18.10.0"
       },
       "peerDependencies": {
-        "@angular/animations": "15.1.2",
-        "@angular/common": "15.1.2",
-        "@angular/core": "15.1.2"
+        "@angular/animations": "15.1.3",
+        "@angular/common": "15.1.3",
+        "@angular/core": "15.1.3"
       },
       "peerDependenciesMeta": {
         "@angular/animations": {
@@ -769,9 +769,9 @@
       }
     },
     "node_modules/@angular/platform-browser-dynamic": {
-      "version": "15.1.2",
-      "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-15.1.2.tgz",
-      "integrity": "sha512-JBSRYeaW+Vb/lKXwxgrU8m42Avxjwmx8vGRp/krJfhh4KL9CJ84zf7Ldxb0sCv06kGdu6vbOUasNGDdgIQfdOQ==",
+      "version": "15.1.3",
+      "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-15.1.3.tgz",
+      "integrity": "sha512-lUfHmO+x3goSL1KnlAbekieKpak2KVGcOcAzOVOIMFt1SyWPBHq0NyyPOH2PUAnjPRbvCLEs2casjFggk0JzsQ==",
       "dependencies": {
         "tslib": "^2.3.0"
       },
@@ -779,16 +779,16 @@
         "node": "^14.20.0 || ^16.13.0 || >=18.10.0"
       },
       "peerDependencies": {
-        "@angular/common": "15.1.2",
-        "@angular/compiler": "15.1.2",
-        "@angular/core": "15.1.2",
-        "@angular/platform-browser": "15.1.2"
+        "@angular/common": "15.1.3",
+        "@angular/compiler": "15.1.3",
+        "@angular/core": "15.1.3",
+        "@angular/platform-browser": "15.1.3"
       }
     },
     "node_modules/@angular/router": {
-      "version": "15.1.2",
-      "resolved": "https://registry.npmjs.org/@angular/router/-/router-15.1.2.tgz",
-      "integrity": "sha512-p2tTHYvBsMaayJNWAZMBqrL7jwxs6NQaEDImBtMwnOnQr/M+LwQdAeNFfpky20ODZw0JwTW84q04l8klExq0kw==",
+      "version": "15.1.3",
+      "resolved": "https://registry.npmjs.org/@angular/router/-/router-15.1.3.tgz",
+      "integrity": "sha512-GxvGZO0N7LIoaTV2EZ082kqb9asJl2rWe0kNsUQwu9IQAODOCCTQu2USg63J6hEOcKPJSZzbxdXLaxlpqKeC4A==",
       "dependencies": {
         "tslib": "^2.3.0"
       },
@@ -796,9 +796,9 @@
         "node": "^14.20.0 || ^16.13.0 || >=18.10.0"
       },
       "peerDependencies": {
-        "@angular/common": "15.1.2",
-        "@angular/core": "15.1.2",
-        "@angular/platform-browser": "15.1.2",
+        "@angular/common": "15.1.3",
+        "@angular/core": "15.1.3",
+        "@angular/platform-browser": "15.1.3",
         "rxjs": "^6.5.3 || ^7.4.0"
       }
     },
@@ -1245,9 +1245,9 @@
       }
     },
     "node_modules/@babel/parser": {
-      "version": "7.20.13",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.13.tgz",
-      "integrity": "sha512-gFDLKMfpiXCsjt4za2JA9oTMn70CeseCehb11kRZgvd7+F67Hih3OHOK24cRrWECJ/ljfPGac6ygXAs/C8kIvw==",
+      "version": "7.20.15",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.15.tgz",
+      "integrity": "sha512-DI4a1oZuf8wC+oAJA9RW6ga3Zbe8RZFt7kD9i4qAspz3I/yHet1VvC3DiSy/fsUvv5pvJuNPh0LPOdCcqinDPg==",
       "bin": {
         "parser": "bin/babel-parser.js"
       },
@@ -1776,9 +1776,9 @@
       }
     },
     "node_modules/@babel/plugin-transform-block-scoping": {
-      "version": "7.20.14",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.14.tgz",
-      "integrity": "sha512-sMPepQtsOs5fM1bwNvuJJHvaCfOEQfmc01FGw0ELlTpTJj5Ql/zuNRRldYhAPys4ghXdBIQJbRVYi44/7QflQQ==",
+      "version": "7.20.15",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.15.tgz",
+      "integrity": "sha512-Vv4DMZ6MiNOhu/LdaZsT/bsLRxgL94d269Mv4R/9sp6+Mp++X/JqypZYypJXLlM4mlL352/Egzbzr98iABH1CA==",
       "dev": true,
       "dependencies": {
         "@babel/helper-plugin-utils": "^7.20.2"
@@ -2446,20 +2446,23 @@
       }
     },
     "node_modules/@coreui/chartjs": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/@coreui/chartjs/-/chartjs-3.0.0.tgz",
-      "integrity": "sha512-udbvSxanTNltv94lqTMW8bLRXTtzk9G2SrmFdM/7HH+JSaLX2wdQpZ4VIJhyOCRGLCSKHktl29BnW1/uXQecAg==",
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/@coreui/chartjs/-/chartjs-3.1.1.tgz",
+      "integrity": "sha512-lI/GCszpbPnEr6T/XDnIcOFTg2mMWqPToR5os6C6KM98BQihhZhuCeMzixyu0Wi72GoFFMkP5/SW028KpskMSw==",
       "dependencies": {
-        "@coreui/coreui": "4.0.0",
-        "chart.js": "^3.4.0"
+        "@coreui/coreui": "^4.2.6",
+        "chart.js": "^3.9.1"
       }
     },
     "node_modules/@coreui/coreui": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/@coreui/coreui/-/coreui-4.0.0.tgz",
-      "integrity": "sha512-8vH6fJrmvCR/Oy5v0E+/1AL3Ygb4jhQ7NXK2fMYWJyK13BePDm9muB3y6S0IdqkpBwjY3hHVwHyt2lJqJdesmQ==",
+      "version": "4.2.6",
+      "resolved": "https://registry.npmjs.org/@coreui/coreui/-/coreui-4.2.6.tgz",
+      "integrity": "sha512-h9j1BVnaDi9vSr1t0H8NL3hlDD4lU9kIdGLXn7g9k5iaFq5EDlRDcSBDer6lR2O4sIEl7W7YqTlevLxFC+1cIA==",
+      "dependencies": {
+        "postcss-combine-duplicated-selectors": "^10.0.3"
+      },
       "peerDependencies": {
-        "@popperjs/core": "^2.9.2"
+        "@popperjs/core": "^2.11.6"
       }
     },
     "node_modules/@coreui/icons": {
@@ -3056,9 +3059,9 @@
       "dev": true
     },
     "node_modules/@ngtools/webpack": {
-      "version": "15.1.3",
-      "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-15.1.3.tgz",
-      "integrity": "sha512-xbV74ulf5BwIA61jASjKxzS0gzD6CQQkqPXDRo8I1tpDMQpEKFKWivw+1Joy6Anm62DWR4xuMEhnj5kjKWemgw==",
+      "version": "15.1.4",
+      "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-15.1.4.tgz",
+      "integrity": "sha512-IvKXK8AvPlLkP99Uf0RL1EHlcsXNQd86II9HsLjupUtmFC/pPuDWrRFMP9bjWUMh2ZeYpgUeEAbcCH3doSrdIA==",
       "dev": true,
       "engines": {
         "node": "^14.20.0 || ^16.13.0 || >=18.10.0",
@@ -3360,13 +3363,13 @@
       }
     },
     "node_modules/@schematics/angular": {
-      "version": "15.1.3",
-      "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-15.1.3.tgz",
-      "integrity": "sha512-jCJ0Nq/FpoMnA63rPAhRWQJFVbS+K8NpdTHZ/7l4wx9iFtIH7khCdbp3QYMJSwZh5pEiw/NO7ouxsWo5YgapYQ==",
+      "version": "15.1.4",
+      "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-15.1.4.tgz",
+      "integrity": "sha512-4SV8dDGZeSvts01b8y2W6FmpDD0dQhBlGMhMJKC/tUnhfNKfYCs2VKtMBsIc3ZiGP2yoA3+nUiMmtS6hEkXYHw==",
       "dev": true,
       "dependencies": {
-        "@angular-devkit/core": "15.1.3",
-        "@angular-devkit/schematics": "15.1.3",
+        "@angular-devkit/core": "15.1.4",
+        "@angular-devkit/schematics": "15.1.4",
         "jsonc-parser": "3.2.0"
       },
       "engines": {
@@ -3444,9 +3447,9 @@
       }
     },
     "node_modules/@types/eslint": {
-      "version": "8.4.10",
-      "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz",
-      "integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==",
+      "version": "8.21.0",
+      "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.21.0.tgz",
+      "integrity": "sha512-35EhHNOXgxnUgh4XCJsGhE7zdlDhYDN/aMG6UbkByCFFNgQ7b3U+uVoqBpicFydR8JEfgdjCF7SJ7MiJfzuiTA==",
       "dev": true,
       "dependencies": {
         "@types/estree": "*",
@@ -3470,13 +3473,13 @@
       "dev": true
     },
     "node_modules/@types/express": {
-      "version": "4.17.16",
-      "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.16.tgz",
-      "integrity": "sha512-LkKpqRZ7zqXJuvoELakaFYuETHjZkSol8EV6cNnyishutDBCCdv6+dsKPbKkCcIk57qRphOLY5sEgClw1bO3gA==",
+      "version": "4.17.17",
+      "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz",
+      "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==",
       "dev": true,
       "dependencies": {
         "@types/body-parser": "*",
-        "@types/express-serve-static-core": "^4.17.31",
+        "@types/express-serve-static-core": "^4.17.33",
         "@types/qs": "*",
         "@types/serve-static": "*"
       }
@@ -3535,9 +3538,9 @@
       "dev": true
     },
     "node_modules/@types/node": {
-      "version": "18.11.18",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz",
-      "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==",
+      "version": "18.11.19",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.19.tgz",
+      "integrity": "sha512-YUgMWAQBWLObABqrvx8qKO1enAvBUdjZOAWQ5grBAkp5LQv45jBvYKZ3oFS9iKRCQyFjqw6iuEa1vmFqtxYLZw==",
       "dev": true
     },
     "node_modules/@types/parse-json": {
@@ -3614,15 +3617,16 @@
       }
     },
     "node_modules/@typescript-eslint/eslint-plugin": {
-      "version": "5.49.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.49.0.tgz",
-      "integrity": "sha512-IhxabIpcf++TBaBa1h7jtOWyon80SXPRLDq0dVz5SLFC/eW6tofkw/O7Ar3lkx5z5U6wzbKDrl2larprp5kk5Q==",
+      "version": "5.50.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.50.0.tgz",
+      "integrity": "sha512-vwksQWSFZiUhgq3Kv7o1Jcj0DUNylwnIlGvKvLLYsq8pAWha6/WCnXUeaSoNNha/K7QSf2+jvmkxggC1u3pIwQ==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/scope-manager": "5.49.0",
-        "@typescript-eslint/type-utils": "5.49.0",
-        "@typescript-eslint/utils": "5.49.0",
+        "@typescript-eslint/scope-manager": "5.50.0",
+        "@typescript-eslint/type-utils": "5.50.0",
+        "@typescript-eslint/utils": "5.50.0",
         "debug": "^4.3.4",
+        "grapheme-splitter": "^1.0.4",
         "ignore": "^5.2.0",
         "natural-compare-lite": "^1.4.0",
         "regexpp": "^3.2.0",
@@ -3647,13 +3651,13 @@
       }
     },
     "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/type-utils": {
-      "version": "5.49.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.49.0.tgz",
-      "integrity": "sha512-eUgLTYq0tR0FGU5g1YHm4rt5H/+V2IPVkP0cBmbhRyEmyGe4XvJ2YJ6sYTmONfjmdMqyMLad7SB8GvblbeESZA==",
+      "version": "5.50.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.50.0.tgz",
+      "integrity": "sha512-dcnXfZ6OGrNCO7E5UY/i0ktHb7Yx1fV6fnQGGrlnfDhilcs6n19eIRcvLBqx6OQkrPaFlDPk3OJ0WlzQfrV0bQ==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/typescript-estree": "5.49.0",
-        "@typescript-eslint/utils": "5.49.0",
+        "@typescript-eslint/typescript-estree": "5.50.0",
+        "@typescript-eslint/utils": "5.50.0",
         "debug": "^4.3.4",
         "tsutils": "^3.21.0"
       },
@@ -3674,16 +3678,16 @@
       }
     },
     "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": {
-      "version": "5.49.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.49.0.tgz",
-      "integrity": "sha512-cPJue/4Si25FViIb74sHCLtM4nTSBXtLx1d3/QT6mirQ/c65bV8arBEebBJJizfq8W2YyMoPI/WWPFWitmNqnQ==",
+      "version": "5.50.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.50.0.tgz",
+      "integrity": "sha512-v/AnUFImmh8G4PH0NDkf6wA8hujNNcrwtecqW4vtQ1UOSNBaZl49zP1SHoZ/06e+UiwzHpgb5zP5+hwlYYWYAw==",
       "dev": true,
       "dependencies": {
         "@types/json-schema": "^7.0.9",
         "@types/semver": "^7.3.12",
-        "@typescript-eslint/scope-manager": "5.49.0",
-        "@typescript-eslint/types": "5.49.0",
-        "@typescript-eslint/typescript-estree": "5.49.0",
+        "@typescript-eslint/scope-manager": "5.50.0",
+        "@typescript-eslint/types": "5.50.0",
+        "@typescript-eslint/typescript-estree": "5.50.0",
         "eslint-scope": "^5.1.1",
         "eslint-utils": "^3.0.0",
         "semver": "^7.3.7"
@@ -3722,14 +3726,14 @@
       }
     },
     "node_modules/@typescript-eslint/parser": {
-      "version": "5.49.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.49.0.tgz",
-      "integrity": "sha512-veDlZN9mUhGqU31Qiv2qEp+XrJj5fgZpJ8PW30sHU+j/8/e5ruAhLaVDAeznS7A7i4ucb/s8IozpDtt9NqCkZg==",
+      "version": "5.50.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.50.0.tgz",
+      "integrity": "sha512-KCcSyNaogUDftK2G9RXfQyOCt51uB5yqC6pkUYqhYh8Kgt+DwR5M0EwEAxGPy/+DH6hnmKeGsNhiZRQxjH71uQ==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/scope-manager": "5.49.0",
-        "@typescript-eslint/types": "5.49.0",
-        "@typescript-eslint/typescript-estree": "5.49.0",
+        "@typescript-eslint/scope-manager": "5.50.0",
+        "@typescript-eslint/types": "5.50.0",
+        "@typescript-eslint/typescript-estree": "5.50.0",
         "debug": "^4.3.4"
       },
       "engines": {
@@ -3749,13 +3753,13 @@
       }
     },
     "node_modules/@typescript-eslint/scope-manager": {
-      "version": "5.49.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.49.0.tgz",
-      "integrity": "sha512-clpROBOiMIzpbWNxCe1xDK14uPZh35u4QaZO1GddilEzoCLAEz4szb51rBpdgurs5k2YzPtJeTEN3qVbG+LRUQ==",
+      "version": "5.50.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.50.0.tgz",
+      "integrity": "sha512-rt03kaX+iZrhssaT974BCmoUikYtZI24Vp/kwTSy841XhiYShlqoshRFDvN1FKKvU2S3gK+kcBW1EA7kNUrogg==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/types": "5.49.0",
-        "@typescript-eslint/visitor-keys": "5.49.0"
+        "@typescript-eslint/types": "5.50.0",
+        "@typescript-eslint/visitor-keys": "5.50.0"
       },
       "engines": {
         "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -3850,9 +3854,9 @@
       }
     },
     "node_modules/@typescript-eslint/types": {
-      "version": "5.49.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.49.0.tgz",
-      "integrity": "sha512-7If46kusG+sSnEpu0yOz2xFv5nRz158nzEXnJFCGVEHWnuzolXKwrH5Bsf9zsNlOQkyZuk0BZKKoJQI+1JPBBg==",
+      "version": "5.50.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.50.0.tgz",
+      "integrity": "sha512-atruOuJpir4OtyNdKahiHZobPKFvZnBnfDiyEaBf6d9vy9visE7gDjlmhl+y29uxZ2ZDgvXijcungGFjGGex7w==",
       "dev": true,
       "engines": {
         "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -3863,13 +3867,13 @@
       }
     },
     "node_modules/@typescript-eslint/typescript-estree": {
-      "version": "5.49.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.49.0.tgz",
-      "integrity": "sha512-PBdx+V7deZT/3GjNYPVQv1Nc0U46dAHbIuOG8AZ3on3vuEKiPDwFE/lG1snN2eUB9IhF7EyF7K1hmTcLztNIsA==",
+      "version": "5.50.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.50.0.tgz",
+      "integrity": "sha512-Gq4zapso+OtIZlv8YNAStFtT6d05zyVCK7Fx3h5inlLBx2hWuc/0465C2mg/EQDDU2LKe52+/jN4f0g9bd+kow==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/types": "5.49.0",
-        "@typescript-eslint/visitor-keys": "5.49.0",
+        "@typescript-eslint/types": "5.50.0",
+        "@typescript-eslint/visitor-keys": "5.50.0",
         "debug": "^4.3.4",
         "globby": "^11.1.0",
         "is-glob": "^4.0.3",
@@ -4012,12 +4016,12 @@
       }
     },
     "node_modules/@typescript-eslint/visitor-keys": {
-      "version": "5.49.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.49.0.tgz",
-      "integrity": "sha512-v9jBMjpNWyn8B6k/Mjt6VbUS4J1GvUlR4x3Y+ibnP1z7y7V4n0WRz+50DY6+Myj0UaXVSuUlHohO+eZ8IJEnkg==",
+      "version": "5.50.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.50.0.tgz",
+      "integrity": "sha512-cdMeD9HGu6EXIeGOh2yVW6oGf9wq8asBgZx7nsR/D36gTfQ0odE5kcRYe5M81vjEFAcPeugXrHg78Imu55F6gg==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/types": "5.49.0",
+        "@typescript-eslint/types": "5.50.0",
         "eslint-visitor-keys": "^3.3.0"
       },
       "engines": {
@@ -4919,9 +4923,9 @@
       }
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001449",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001449.tgz",
-      "integrity": "sha512-CPB+UL9XMT/Av+pJxCKGhdx+yg1hzplvFJQlJ2n68PyQGMz9L/E2zCyLdOL8uasbouTUgnPl+y0tccI/se+BEw==",
+      "version": "1.0.30001450",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001450.tgz",
+      "integrity": "sha512-qMBmvmQmFXaSxexkjjfMvD5rnDL0+m+dUMZKoDYsGG8iZN29RuYh9eRoMvKsT6uMAWlyUUGDEQGJJYjzCIO9ew==",
       "funding": [
         {
           "type": "opencollective",
@@ -5246,9 +5250,9 @@
       }
     },
     "node_modules/content-type": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
-      "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
+      "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
       "dev": true,
       "engines": {
         "node": ">= 0.6"
@@ -5563,7 +5567,6 @@
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
       "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
-      "dev": true,
       "bin": {
         "cssesc": "bin/cssesc"
       },
@@ -5643,9 +5646,9 @@
       "dev": true
     },
     "node_modules/deepmerge": {
-      "version": "4.2.2",
-      "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
-      "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.0.tgz",
+      "integrity": "sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==",
       "dev": true,
       "engines": {
         "node": ">=0.10.0"
@@ -5861,9 +5864,9 @@
       "dev": true
     },
     "node_modules/electron-to-chromium": {
-      "version": "1.4.284",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz",
-      "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA=="
+      "version": "1.4.286",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.286.tgz",
+      "integrity": "sha512-Vp3CVhmYpgf4iXNKAucoQUDcCrBQX3XLBtwgFqP9BUXuucgvAV9zWp1kYU7LL9j4++s9O+12cb3wMtN4SJy6UQ=="
     },
     "node_modules/emoji-regex": {
       "version": "8.0.0",
@@ -6105,9 +6108,9 @@
       }
     },
     "node_modules/eslint": {
-      "version": "8.32.0",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.32.0.tgz",
-      "integrity": "sha512-nETVXpnthqKPFyuY2FNjz/bEd6nbosRgKbkgS/y1C7LJop96gYHWpiguLecMHQ2XCPxn77DS0P+68WzG6vkZSQ==",
+      "version": "8.33.0",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.33.0.tgz",
+      "integrity": "sha512-WjOpFQgKK8VrCnAtl8We0SUOy/oVZ5NHykyMiagV1M9r8IFpIJX7DduK6n1mpfhlG7T1NLWm2SuD8QB7KFySaA==",
       "dev": true,
       "dependencies": {
         "@eslint/eslintrc": "^1.4.1",
@@ -6955,9 +6958,9 @@
       }
     },
     "node_modules/fs-minipass": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.0.tgz",
-      "integrity": "sha512-EUojgQaSPy6sxcqcZgQv6TVF6jiKvurji3AxhAivs/Ep4O1UpS8TusaxpybfFHZ2skRhLqzk6WR8nqNYIMMDeA==",
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.1.tgz",
+      "integrity": "sha512-MhaJDcFRTuLidHrIttu0RDGyyXs/IYHVmlcxfLAEFIWjc1vdLAkdwT7Ace2u7DbitWC0toKMl5eJZRYNVreIMw==",
       "dev": true,
       "dependencies": {
         "minipass": "^4.0.0"
@@ -7588,9 +7591,9 @@
       }
     },
     "node_modules/immutable": {
-      "version": "4.2.2",
-      "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.2.2.tgz",
-      "integrity": "sha512-fTMKDwtbvO5tldky9QZ2fMX7slR0mYpY5nbnFWYp0fOzDhHqhgIw9KoYgxLWsoNTS9ZHGauHj18DTyEw6BK3Og==",
+      "version": "4.2.4",
+      "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.2.4.tgz",
+      "integrity": "sha512-WDxL3Hheb1JkRN3sQkyujNlL/xRjAo3rJtaU5xeufUauG66JdMr32bLj4gF+vWl84DIA3Zxw7tiAjneYzRRw+w==",
       "dev": true
     },
     "node_modules/import-fresh": {
@@ -7875,9 +7878,9 @@
       }
     },
     "node_modules/is-builtin-module": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.0.tgz",
-      "integrity": "sha512-phDA4oSGt7vl1n5tJvTWooWWAsXLY+2xCnxNqvKhGEzujg+A43wPlPOyDg3C8XQHN+6k/JTQWJ/j0dQh/qr+Hw==",
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz",
+      "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==",
       "dev": true,
       "dependencies": {
         "builtin-modules": "^3.3.0"
@@ -9312,13 +9315,10 @@
       }
     },
     "node_modules/minipass": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.0.0.tgz",
-      "integrity": "sha512-g2Uuh2jEKoht+zvO6vJqXmYpflPqzRBT+Th2h01DKh5z7wbY/AZ2gCQ78cP70YoHPyFdY30YBV5WxgLOEwOykw==",
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.0.2.tgz",
+      "integrity": "sha512-4Hbzei7ZyBp+1aw0874YWpKOubZd/jc53/XU+gkYry1QV+VvrbO8icLM5CUtm4F0hyXn85DXYKEMIS26gitD3A==",
       "dev": true,
-      "dependencies": {
-        "yallist": "^4.0.0"
-      },
       "engines": {
         "node": ">=8"
       }
@@ -9506,12 +9506,6 @@
       "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
       "dev": true
     },
-    "node_modules/minipass/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/minizlib": {
       "version": "2.1.2",
       "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
@@ -9583,7 +9577,6 @@
       "version": "3.3.4",
       "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
       "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
-      "dev": true,
       "bin": {
         "nanoid": "bin/nanoid.cjs"
       },
@@ -9805,9 +9798,9 @@
       }
     },
     "node_modules/node-releases": {
-      "version": "2.0.8",
-      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.8.tgz",
-      "integrity": "sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A=="
+      "version": "2.0.10",
+      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz",
+      "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w=="
     },
     "node_modules/nopt": {
       "version": "6.0.0",
@@ -9959,20 +9952,19 @@
       }
     },
     "node_modules/npm-registry-fetch/node_modules/make-fetch-happen": {
-      "version": "11.0.2",
-      "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.0.2.tgz",
-      "integrity": "sha512-5n/Pq41w/uZghpdlXAY5kIM85RgJThtTH/NYBRAZ9VUOBWV90USaQjwGrw76fZP3Lj5hl/VZjpVvOaRBMoL/2w==",
+      "version": "11.0.3",
+      "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.0.3.tgz",
+      "integrity": "sha512-oPLh5m10lRNNZDjJ2kP8UpboUx2uFXVaVweVe/lWut4iHWcQEmfqSVJt2ihZsFI8HbpwyyocaXbCAWf0g1ukIA==",
       "dev": true,
       "dependencies": {
         "agentkeepalive": "^4.2.1",
         "cacache": "^17.0.0",
-        "http-cache-semantics": "^4.1.0",
+        "http-cache-semantics": "^4.1.1",
         "http-proxy-agent": "^5.0.0",
         "https-proxy-agent": "^5.0.0",
         "is-lambda": "^1.0.1",
         "lru-cache": "^7.7.1",
         "minipass": "^4.0.0",
-        "minipass-collect": "^1.0.2",
         "minipass-fetch": "^3.0.0",
         "minipass-flush": "^1.0.5",
         "minipass-pipeline": "^1.2.4",
@@ -10620,7 +10612,6 @@
       "version": "8.4.21",
       "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz",
       "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==",
-      "dev": true,
       "funding": [
         {
           "type": "opencollective",
@@ -10640,6 +10631,20 @@
         "node": "^10 || ^12 || >=14"
       }
     },
+    "node_modules/postcss-combine-duplicated-selectors": {
+      "version": "10.0.3",
+      "resolved": "https://registry.npmjs.org/postcss-combine-duplicated-selectors/-/postcss-combine-duplicated-selectors-10.0.3.tgz",
+      "integrity": "sha512-IP0BmwFloCskv7DV7xqvzDXqMHpwdczJa6ZvIW8abgHdcIHs9mCJX2ltFhu3EwA51ozp13DByng30+Ke+eIExA==",
+      "dependencies": {
+        "postcss-selector-parser": "^6.0.4"
+      },
+      "engines": {
+        "node": "^10.0.0 || ^12.0.0 || >=14.0.0"
+      },
+      "peerDependencies": {
+        "postcss": "^8.1.0"
+      }
+    },
     "node_modules/postcss-loader": {
       "version": "7.0.2",
       "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.2.tgz",
@@ -10725,7 +10730,6 @@
       "version": "6.0.11",
       "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz",
       "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==",
-      "dev": true,
       "dependencies": {
         "cssesc": "^3.0.0",
         "util-deprecate": "^1.0.2"
@@ -11317,9 +11321,9 @@
       }
     },
     "node_modules/rollup": {
-      "version": "3.12.0",
-      "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.12.0.tgz",
-      "integrity": "sha512-4MZ8kA2HNYahIjz63rzrMMRvDqQDeS9LoriJvMuV0V6zIGysP36e9t4yObUfwdT9h/szXoHQideICftcdZklWg==",
+      "version": "3.14.0",
+      "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.14.0.tgz",
+      "integrity": "sha512-o23sdgCLcLSe3zIplT9nQ1+r97okuaiR+vmAPZPTDYB7/f3tgWIYNyiQveMsZwshBT0is4eGax/HH83Q7CG+/Q==",
       "dev": true,
       "bin": {
         "rollup": "dist/bin/rollup"
@@ -11858,7 +11862,6 @@
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
       "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
-      "dev": true,
       "engines": {
         "node": ">=0.10.0"
       }
@@ -12462,9 +12465,9 @@
       "dev": true
     },
     "node_modules/typescript": {
-      "version": "4.9.4",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz",
-      "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==",
+      "version": "4.9.5",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz",
+      "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==",
       "bin": {
         "tsc": "bin/tsc",
         "tsserver": "bin/tsserver"
@@ -12611,8 +12614,7 @@
     "node_modules/util-deprecate": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
-      "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
-      "dev": true
+      "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
     },
     "node_modules/utils-merge": {
       "version": "1.0.1",
@@ -13265,12 +13267,12 @@
       }
     },
     "@angular-devkit/architect": {
-      "version": "0.1501.3",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1501.3.tgz",
-      "integrity": "sha512-+hvesYUgChdAkBcWSO2pseIGBzRDAATyIw36UBwOmYkL7wM65TEXpspbo5ZIfU1M/l7X/lHzDXLTzCMfb0Qxbg==",
+      "version": "0.1501.4",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1501.4.tgz",
+      "integrity": "sha512-PE0CqPaNzcz8yHEuJwqtKxYvXX9hgWWvC6hI2DWKtC+5WgJLAYJNEGofXQRc227Nj+YySEYUUo8Ja8SYl3lDxA==",
       "dev": true,
       "requires": {
-        "@angular-devkit/core": "15.1.3",
+        "@angular-devkit/core": "15.1.4",
         "rxjs": "6.6.7"
       },
       "dependencies": {
@@ -13292,15 +13294,15 @@
       }
     },
     "@angular-devkit/build-angular": {
-      "version": "15.1.3",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-15.1.3.tgz",
-      "integrity": "sha512-QQfvpccShQldpMmuwgpZfbE6cNiNwff2aAY1YGswU9DBpeoz4YWeW4e8ss2j/Mxn5RXo7cbzWkhbm1xXTFY1FA==",
+      "version": "15.1.4",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-15.1.4.tgz",
+      "integrity": "sha512-+vubHYyQn8HJ+uJQndr8xFlX6C7y1kdnzTiKgx6QFvA5sd/IhXXzsnDd1wFer1lCrZ+1qgfhG9HI/RL3cBeKrA==",
       "dev": true,
       "requires": {
         "@ampproject/remapping": "2.2.0",
-        "@angular-devkit/architect": "0.1501.3",
-        "@angular-devkit/build-webpack": "0.1501.3",
-        "@angular-devkit/core": "15.1.3",
+        "@angular-devkit/architect": "0.1501.4",
+        "@angular-devkit/build-webpack": "0.1501.4",
+        "@angular-devkit/core": "15.1.4",
         "@babel/core": "7.20.12",
         "@babel/generator": "7.20.7",
         "@babel/helper-annotate-as-pure": "7.18.6",
@@ -13311,7 +13313,7 @@
         "@babel/runtime": "7.20.7",
         "@babel/template": "7.20.7",
         "@discoveryjs/json-ext": "0.5.7",
-        "@ngtools/webpack": "15.1.3",
+        "@ngtools/webpack": "15.1.4",
         "ansi-colors": "4.1.3",
         "autoprefixer": "10.4.13",
         "babel-loader": "9.1.2",
@@ -13385,12 +13387,12 @@
       }
     },
     "@angular-devkit/build-webpack": {
-      "version": "0.1501.3",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1501.3.tgz",
-      "integrity": "sha512-ZsgbTFf1I9hAf4FvNxBJphF95Hw9QchCaWQdQXY+2mqQuPP70uK1Kd/TzNCfx5lyNFHMI9oWpCg2QLrAdwqJnA==",
+      "version": "0.1501.4",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1501.4.tgz",
+      "integrity": "sha512-rJ7KTBDW0UHgVJjQ23qJfGun+pDX3ZG2z0OtsskdsOI62SAvW1cVLuS50ICTcWW6gtcDO0R/6Q1RLbaV1JHZ5A==",
       "dev": true,
       "requires": {
-        "@angular-devkit/architect": "0.1501.3",
+        "@angular-devkit/architect": "0.1501.4",
         "rxjs": "6.6.7"
       },
       "dependencies": {
@@ -13412,9 +13414,9 @@
       }
     },
     "@angular-devkit/core": {
-      "version": "15.1.3",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-15.1.3.tgz",
-      "integrity": "sha512-biuS+DceyZEqcE/cLvndtslqn3Q6uCmJ0RLpACikH6ESYorvk+A91H0ofuGue6HB/2CUN/F+mPSr7sWVI1W9sA==",
+      "version": "15.1.4",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-15.1.4.tgz",
+      "integrity": "sha512-PW5MRmd9DHJR4FaXchwQtj9pXnsghSTnwRvfZeCRNYgU2sv0DKyTV+YTSJB+kNXnoPNG1Je6amDEkiXecpspXg==",
       "dev": true,
       "requires": {
         "ajv": "8.12.0",
@@ -13442,12 +13444,12 @@
       }
     },
     "@angular-devkit/schematics": {
-      "version": "15.1.3",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-15.1.3.tgz",
-      "integrity": "sha512-IXZ56/5uFnHqnLq+80JhmFx5mflyW8LgS/8Tr2l5DYVA71Fh3b1q+vGrEZB1X2zPoFeDOGAxv3Fi+kmjcz1GZg==",
+      "version": "15.1.4",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-15.1.4.tgz",
+      "integrity": "sha512-jpddxo9Qd2yRQ1t9FLhAx5S+luz6HkyhDytq0LFKbxf9ikf1J4oy9riPBFl4pRmrNARWcHZ6GbD20/Ky8PjmXQ==",
       "dev": true,
       "requires": {
-        "@angular-devkit/core": "15.1.3",
+        "@angular-devkit/core": "15.1.4",
         "jsonc-parser": "3.2.0",
         "magic-string": "0.27.0",
         "ora": "5.4.1",
@@ -13542,32 +13544,32 @@
       }
     },
     "@angular/animations": {
-      "version": "15.1.2",
-      "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-15.1.2.tgz",
-      "integrity": "sha512-Bamm2gNdSMVeXEFwlXG75rx49NJfbupDQM6geix0uI30iVCYlufPz+kMe4SzpasO5hHzP7Pat3cmEu4356It+g==",
+      "version": "15.1.3",
+      "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-15.1.3.tgz",
+      "integrity": "sha512-qvOLYx8XWolwFWwYoPjt+jQLDFaCQEPjb26iczewiqd+xcAdYn4Tl10NCJtOsx+YfTdpWtKRzvxYr1JxnGQTdw==",
       "requires": {
         "tslib": "^2.3.0"
       }
     },
     "@angular/cdk": {
-      "version": "15.1.2",
-      "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-15.1.2.tgz",
-      "integrity": "sha512-LO3b/akdcPaRwSa+rbrI02THwQm+O4Z3rDIvbDTHyCf3Vmk3p7gsp8WtKAMMJlkCF88VQ3Wh4ZZcfNAtbVO7EA==",
+      "version": "15.1.3",
+      "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-15.1.3.tgz",
+      "integrity": "sha512-FRb1ZirybQGVlRx34vsnkIyy4WHJlrRg2mwPeJ90b0DzIWuIZIiPYxxR2bAi/Si1IjnK8YBdacd5DXPdrW1jyw==",
       "requires": {
         "parse5": "^7.1.2",
         "tslib": "^2.3.0"
       }
     },
     "@angular/cli": {
-      "version": "15.1.3",
-      "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-15.1.3.tgz",
-      "integrity": "sha512-gNVvyvkGZ1zKiDdWjPqCLst8iHcB1C4B2nXrr3B+/YAd1G/y87VI1aBKFlK9ulG4tkwktog5uQaut7xs48IsEQ==",
+      "version": "15.1.4",
+      "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-15.1.4.tgz",
+      "integrity": "sha512-ebZiI4arb9wtOUMmTyUvjgDovmwpY8hmGLbkKZiEmAX8+2gbl4e97M+zd0SICZDU8bu5VcpoP6Q3Qb6vVjab9A==",
       "dev": true,
       "requires": {
-        "@angular-devkit/architect": "0.1501.3",
-        "@angular-devkit/core": "15.1.3",
-        "@angular-devkit/schematics": "15.1.3",
-        "@schematics/angular": "15.1.3",
+        "@angular-devkit/architect": "0.1501.4",
+        "@angular-devkit/core": "15.1.4",
+        "@angular-devkit/schematics": "15.1.4",
+        "@schematics/angular": "15.1.4",
         "@yarnpkg/lockfile": "1.1.0",
         "ansi-colors": "4.1.3",
         "ini": "3.0.1",
@@ -13585,25 +13587,25 @@
       }
     },
     "@angular/common": {
-      "version": "15.1.2",
-      "resolved": "https://registry.npmjs.org/@angular/common/-/common-15.1.2.tgz",
-      "integrity": "sha512-1Ra6EoaZjPcdDsGBge3qSajO1ECYceX+2EWHdjvJ9ZEIaXsLNFMQBUMgJnjsnrojs9Gd3bxJ0WHkahij5/8WNA==",
+      "version": "15.1.3",
+      "resolved": "https://registry.npmjs.org/@angular/common/-/common-15.1.3.tgz",
+      "integrity": "sha512-UjC0COaOcU1g/ODBBetv/BpdaFC/Y32DvXJ9qbD7kkwLwoqCjGOLDvtP36r9zEzPmH7oNkgNGDkgR3gyb82s5A==",
       "requires": {
         "tslib": "^2.3.0"
       }
     },
     "@angular/compiler": {
-      "version": "15.1.2",
-      "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-15.1.2.tgz",
-      "integrity": "sha512-hKlr1i61a2Gl0h53goSSUbZmzNgdC1zAHu+Ws0+1Qfv9cDgg1aVphFGFMdV0kbjLV+k7LyFjj5EgWU48o5UXww==",
+      "version": "15.1.3",
+      "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-15.1.3.tgz",
+      "integrity": "sha512-CxEpm5Z3EpjeGNoWKtcHOrf2IQTSckpAEFwsRrADP2nqcXXYp/IjIHi+PUTjLhjrOEbukH9zreHsL5BoIQhgUQ==",
       "requires": {
         "tslib": "^2.3.0"
       }
     },
     "@angular/compiler-cli": {
-      "version": "15.1.2",
-      "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-15.1.2.tgz",
-      "integrity": "sha512-gAqbQSKI4oeboh0UKsFdaEoST9IBVzqeckJzSTwAGxJeS33IM7Jjo3LViqHuzQyWKXe6srkci0LD4C2Mrj4kfQ==",
+      "version": "15.1.3",
+      "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-15.1.3.tgz",
+      "integrity": "sha512-z5bGdQQcStXWPpb5vztqqUOET+vxw+GUFtfktYxV40kE2d1zHLZh93AGEnM1NnBaOz+9NZrX+dWoEyWmv/T2LQ==",
       "requires": {
         "@babel/core": "7.19.3",
         "@jridgewell/sourcemap-codec": "^1.4.14",
@@ -13649,31 +13651,31 @@
       }
     },
     "@angular/core": {
-      "version": "15.1.2",
-      "resolved": "https://registry.npmjs.org/@angular/core/-/core-15.1.2.tgz",
-      "integrity": "sha512-K9pz6Bq6RuY/OWhKLZT1JQvk4orvU9wozgXY8cZaOGmNCQQ7sJv5zGkO5csO6o1ON1v/AHowrP/FAF1i8tml5g==",
+      "version": "15.1.3",
+      "resolved": "https://registry.npmjs.org/@angular/core/-/core-15.1.3.tgz",
+      "integrity": "sha512-rad9OYnaoRnXBztOBXsiD59VvOZTpsvO3sWx6KndytQFceFfkL722bF2l2LARN+R3IWDOwRap46HOtc0O0N+sw==",
       "requires": {
         "tslib": "^2.3.0"
       }
     },
     "@angular/forms": {
-      "version": "15.1.2",
-      "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-15.1.2.tgz",
-      "integrity": "sha512-ZL3EkCQ2SDrv9hdyPX54WPiTf9SQpkKz4bn/Gxe6lySLy0oHR5Te68DPMljWBeHYa+cNTCDdPN81AKLIDjRQtA==",
+      "version": "15.1.3",
+      "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-15.1.3.tgz",
+      "integrity": "sha512-vEgiZBk3rGGp4tBQHl9EaspEjYh70lkz6/zYreObTbMdCB54bkbl+jn+JbQyFj+TPfukiumtiG3/477vKzYnSg==",
       "requires": {
         "tslib": "^2.3.0"
       }
     },
     "@angular/language-service": {
-      "version": "15.1.2",
-      "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-15.1.2.tgz",
-      "integrity": "sha512-TMGoJRe6eQZxRe3uy/3yP5OTJHn+swtWd8qvvlmgMiqITW2m9MSnqIpOrEaJOtNrzhBoM5b/QxRXJrg9qD1ffQ==",
+      "version": "15.1.3",
+      "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-15.1.3.tgz",
+      "integrity": "sha512-Sxp5nXQ/VR7ESLL35iRkHun8R4w3Zp+d5KmkCmgw67zjDgAJhosrsoqIUbGWYFMFJ5YUA4IHhQUwY8snyUDwug==",
       "dev": true
     },
     "@angular/localize": {
-      "version": "15.1.2",
-      "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-15.1.2.tgz",
-      "integrity": "sha512-wnNgq8tn5W1u2B/G2Q08XiHKucJidNE+U5OuYk+qjf2M5M5DVwBhF/mxJxWoDKSuLg/JIJ8FUiKjEhJ5iUJ4lg==",
+      "version": "15.1.3",
+      "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-15.1.3.tgz",
+      "integrity": "sha512-d1K3peTNV9RfNb5Zt58OTX31TGRtq8iIqX7TTN52l7214ky4MEX1F+eDvqdRKSAaev+aNEwz6RX9LW2k1XAhPQ==",
       "requires": {
         "@babel/core": "7.19.3",
         "glob": "8.1.0",
@@ -13738,25 +13740,25 @@
       }
     },
     "@angular/platform-browser": {
-      "version": "15.1.2",
-      "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-15.1.2.tgz",
-      "integrity": "sha512-eWyfUOFZ05vB0UfPUTPK7pPJZjFtbGZlJOea3IUqEohuyRqq3CqYCrv7SVXGKQVOx1qRA0Ckr9FOB8/qYbTq1A==",
+      "version": "15.1.3",
+      "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-15.1.3.tgz",
+      "integrity": "sha512-WJBN3klssfcRGKY2L2DIpNGbaMQfi2X1le1ZXQAnsfECQ/pua+lFstJUT+RP+Bx4X8icuDggKkS/JPOiBhxARw==",
       "requires": {
         "tslib": "^2.3.0"
       }
     },
     "@angular/platform-browser-dynamic": {
-      "version": "15.1.2",
-      "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-15.1.2.tgz",
-      "integrity": "sha512-JBSRYeaW+Vb/lKXwxgrU8m42Avxjwmx8vGRp/krJfhh4KL9CJ84zf7Ldxb0sCv06kGdu6vbOUasNGDdgIQfdOQ==",
+      "version": "15.1.3",
+      "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-15.1.3.tgz",
+      "integrity": "sha512-lUfHmO+x3goSL1KnlAbekieKpak2KVGcOcAzOVOIMFt1SyWPBHq0NyyPOH2PUAnjPRbvCLEs2casjFggk0JzsQ==",
       "requires": {
         "tslib": "^2.3.0"
       }
     },
     "@angular/router": {
-      "version": "15.1.2",
-      "resolved": "https://registry.npmjs.org/@angular/router/-/router-15.1.2.tgz",
-      "integrity": "sha512-p2tTHYvBsMaayJNWAZMBqrL7jwxs6NQaEDImBtMwnOnQr/M+LwQdAeNFfpky20ODZw0JwTW84q04l8klExq0kw==",
+      "version": "15.1.3",
+      "resolved": "https://registry.npmjs.org/@angular/router/-/router-15.1.3.tgz",
+      "integrity": "sha512-GxvGZO0N7LIoaTV2EZ082kqb9asJl2rWe0kNsUQwu9IQAODOCCTQu2USg63J6hEOcKPJSZzbxdXLaxlpqKeC4A==",
       "requires": {
         "tslib": "^2.3.0"
       }
@@ -14094,9 +14096,9 @@
       }
     },
     "@babel/parser": {
-      "version": "7.20.13",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.13.tgz",
-      "integrity": "sha512-gFDLKMfpiXCsjt4za2JA9oTMn70CeseCehb11kRZgvd7+F67Hih3OHOK24cRrWECJ/ljfPGac6ygXAs/C8kIvw=="
+      "version": "7.20.15",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.15.tgz",
+      "integrity": "sha512-DI4a1oZuf8wC+oAJA9RW6ga3Zbe8RZFt7kD9i4qAspz3I/yHet1VvC3DiSy/fsUvv5pvJuNPh0LPOdCcqinDPg=="
     },
     "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
       "version": "7.18.6",
@@ -14442,9 +14444,9 @@
       }
     },
     "@babel/plugin-transform-block-scoping": {
-      "version": "7.20.14",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.14.tgz",
-      "integrity": "sha512-sMPepQtsOs5fM1bwNvuJJHvaCfOEQfmc01FGw0ELlTpTJj5Ql/zuNRRldYhAPys4ghXdBIQJbRVYi44/7QflQQ==",
+      "version": "7.20.15",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.15.tgz",
+      "integrity": "sha512-Vv4DMZ6MiNOhu/LdaZsT/bsLRxgL94d269Mv4R/9sp6+Mp++X/JqypZYypJXLlM4mlL352/Egzbzr98iABH1CA==",
       "dev": true,
       "requires": {
         "@babel/helper-plugin-utils": "^7.20.2"
@@ -14906,19 +14908,21 @@
       "dev": true
     },
     "@coreui/chartjs": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/@coreui/chartjs/-/chartjs-3.0.0.tgz",
-      "integrity": "sha512-udbvSxanTNltv94lqTMW8bLRXTtzk9G2SrmFdM/7HH+JSaLX2wdQpZ4VIJhyOCRGLCSKHktl29BnW1/uXQecAg==",
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/@coreui/chartjs/-/chartjs-3.1.1.tgz",
+      "integrity": "sha512-lI/GCszpbPnEr6T/XDnIcOFTg2mMWqPToR5os6C6KM98BQihhZhuCeMzixyu0Wi72GoFFMkP5/SW028KpskMSw==",
       "requires": {
-        "@coreui/coreui": "4.0.0",
-        "chart.js": "^3.4.0"
+        "@coreui/coreui": "^4.2.6",
+        "chart.js": "^3.9.1"
       }
     },
     "@coreui/coreui": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/@coreui/coreui/-/coreui-4.0.0.tgz",
-      "integrity": "sha512-8vH6fJrmvCR/Oy5v0E+/1AL3Ygb4jhQ7NXK2fMYWJyK13BePDm9muB3y6S0IdqkpBwjY3hHVwHyt2lJqJdesmQ==",
-      "requires": {}
+      "version": "4.2.6",
+      "resolved": "https://registry.npmjs.org/@coreui/coreui/-/coreui-4.2.6.tgz",
+      "integrity": "sha512-h9j1BVnaDi9vSr1t0H8NL3hlDD4lU9kIdGLXn7g9k5iaFq5EDlRDcSBDer6lR2O4sIEl7W7YqTlevLxFC+1cIA==",
+      "requires": {
+        "postcss-combine-duplicated-selectors": "^10.0.3"
+      }
     },
     "@coreui/icons": {
       "version": "3.0.0",
@@ -15264,9 +15268,9 @@
       "dev": true
     },
     "@ngtools/webpack": {
-      "version": "15.1.3",
-      "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-15.1.3.tgz",
-      "integrity": "sha512-xbV74ulf5BwIA61jASjKxzS0gzD6CQQkqPXDRo8I1tpDMQpEKFKWivw+1Joy6Anm62DWR4xuMEhnj5kjKWemgw==",
+      "version": "15.1.4",
+      "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-15.1.4.tgz",
+      "integrity": "sha512-IvKXK8AvPlLkP99Uf0RL1EHlcsXNQd86II9HsLjupUtmFC/pPuDWrRFMP9bjWUMh2ZeYpgUeEAbcCH3doSrdIA==",
       "dev": true,
       "requires": {}
     },
@@ -15463,13 +15467,13 @@
       }
     },
     "@schematics/angular": {
-      "version": "15.1.3",
-      "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-15.1.3.tgz",
-      "integrity": "sha512-jCJ0Nq/FpoMnA63rPAhRWQJFVbS+K8NpdTHZ/7l4wx9iFtIH7khCdbp3QYMJSwZh5pEiw/NO7ouxsWo5YgapYQ==",
+      "version": "15.1.4",
+      "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-15.1.4.tgz",
+      "integrity": "sha512-4SV8dDGZeSvts01b8y2W6FmpDD0dQhBlGMhMJKC/tUnhfNKfYCs2VKtMBsIc3ZiGP2yoA3+nUiMmtS6hEkXYHw==",
       "dev": true,
       "requires": {
-        "@angular-devkit/core": "15.1.3",
-        "@angular-devkit/schematics": "15.1.3",
+        "@angular-devkit/core": "15.1.4",
+        "@angular-devkit/schematics": "15.1.4",
         "jsonc-parser": "3.2.0"
       }
     },
@@ -15539,9 +15543,9 @@
       }
     },
     "@types/eslint": {
-      "version": "8.4.10",
-      "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz",
-      "integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==",
+      "version": "8.21.0",
+      "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.21.0.tgz",
+      "integrity": "sha512-35EhHNOXgxnUgh4XCJsGhE7zdlDhYDN/aMG6UbkByCFFNgQ7b3U+uVoqBpicFydR8JEfgdjCF7SJ7MiJfzuiTA==",
       "dev": true,
       "requires": {
         "@types/estree": "*",
@@ -15565,13 +15569,13 @@
       "dev": true
     },
     "@types/express": {
-      "version": "4.17.16",
-      "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.16.tgz",
-      "integrity": "sha512-LkKpqRZ7zqXJuvoELakaFYuETHjZkSol8EV6cNnyishutDBCCdv6+dsKPbKkCcIk57qRphOLY5sEgClw1bO3gA==",
+      "version": "4.17.17",
+      "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz",
+      "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==",
       "dev": true,
       "requires": {
         "@types/body-parser": "*",
-        "@types/express-serve-static-core": "^4.17.31",
+        "@types/express-serve-static-core": "^4.17.33",
         "@types/qs": "*",
         "@types/serve-static": "*"
       }
@@ -15630,9 +15634,9 @@
       "dev": true
     },
     "@types/node": {
-      "version": "18.11.18",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz",
-      "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==",
+      "version": "18.11.19",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.19.tgz",
+      "integrity": "sha512-YUgMWAQBWLObABqrvx8qKO1enAvBUdjZOAWQ5grBAkp5LQv45jBvYKZ3oFS9iKRCQyFjqw6iuEa1vmFqtxYLZw==",
       "dev": true
     },
     "@types/parse-json": {
@@ -15709,15 +15713,16 @@
       }
     },
     "@typescript-eslint/eslint-plugin": {
-      "version": "5.49.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.49.0.tgz",
-      "integrity": "sha512-IhxabIpcf++TBaBa1h7jtOWyon80SXPRLDq0dVz5SLFC/eW6tofkw/O7Ar3lkx5z5U6wzbKDrl2larprp5kk5Q==",
+      "version": "5.50.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.50.0.tgz",
+      "integrity": "sha512-vwksQWSFZiUhgq3Kv7o1Jcj0DUNylwnIlGvKvLLYsq8pAWha6/WCnXUeaSoNNha/K7QSf2+jvmkxggC1u3pIwQ==",
       "dev": true,
       "requires": {
-        "@typescript-eslint/scope-manager": "5.49.0",
-        "@typescript-eslint/type-utils": "5.49.0",
-        "@typescript-eslint/utils": "5.49.0",
+        "@typescript-eslint/scope-manager": "5.50.0",
+        "@typescript-eslint/type-utils": "5.50.0",
+        "@typescript-eslint/utils": "5.50.0",
         "debug": "^4.3.4",
+        "grapheme-splitter": "^1.0.4",
         "ignore": "^5.2.0",
         "natural-compare-lite": "^1.4.0",
         "regexpp": "^3.2.0",
@@ -15726,28 +15731,28 @@
       },
       "dependencies": {
         "@typescript-eslint/type-utils": {
-          "version": "5.49.0",
-          "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.49.0.tgz",
-          "integrity": "sha512-eUgLTYq0tR0FGU5g1YHm4rt5H/+V2IPVkP0cBmbhRyEmyGe4XvJ2YJ6sYTmONfjmdMqyMLad7SB8GvblbeESZA==",
+          "version": "5.50.0",
+          "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.50.0.tgz",
+          "integrity": "sha512-dcnXfZ6OGrNCO7E5UY/i0ktHb7Yx1fV6fnQGGrlnfDhilcs6n19eIRcvLBqx6OQkrPaFlDPk3OJ0WlzQfrV0bQ==",
           "dev": true,
           "requires": {
-            "@typescript-eslint/typescript-estree": "5.49.0",
-            "@typescript-eslint/utils": "5.49.0",
+            "@typescript-eslint/typescript-estree": "5.50.0",
+            "@typescript-eslint/utils": "5.50.0",
             "debug": "^4.3.4",
             "tsutils": "^3.21.0"
           }
         },
         "@typescript-eslint/utils": {
-          "version": "5.49.0",
-          "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.49.0.tgz",
-          "integrity": "sha512-cPJue/4Si25FViIb74sHCLtM4nTSBXtLx1d3/QT6mirQ/c65bV8arBEebBJJizfq8W2YyMoPI/WWPFWitmNqnQ==",
+          "version": "5.50.0",
+          "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.50.0.tgz",
+          "integrity": "sha512-v/AnUFImmh8G4PH0NDkf6wA8hujNNcrwtecqW4vtQ1UOSNBaZl49zP1SHoZ/06e+UiwzHpgb5zP5+hwlYYWYAw==",
           "dev": true,
           "requires": {
             "@types/json-schema": "^7.0.9",
             "@types/semver": "^7.3.12",
-            "@typescript-eslint/scope-manager": "5.49.0",
-            "@typescript-eslint/types": "5.49.0",
-            "@typescript-eslint/typescript-estree": "5.49.0",
+            "@typescript-eslint/scope-manager": "5.50.0",
+            "@typescript-eslint/types": "5.50.0",
+            "@typescript-eslint/typescript-estree": "5.50.0",
             "eslint-scope": "^5.1.1",
             "eslint-utils": "^3.0.0",
             "semver": "^7.3.7"
@@ -15772,25 +15777,25 @@
       }
     },
     "@typescript-eslint/parser": {
-      "version": "5.49.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.49.0.tgz",
-      "integrity": "sha512-veDlZN9mUhGqU31Qiv2qEp+XrJj5fgZpJ8PW30sHU+j/8/e5ruAhLaVDAeznS7A7i4ucb/s8IozpDtt9NqCkZg==",
+      "version": "5.50.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.50.0.tgz",
+      "integrity": "sha512-KCcSyNaogUDftK2G9RXfQyOCt51uB5yqC6pkUYqhYh8Kgt+DwR5M0EwEAxGPy/+DH6hnmKeGsNhiZRQxjH71uQ==",
       "dev": true,
       "requires": {
-        "@typescript-eslint/scope-manager": "5.49.0",
-        "@typescript-eslint/types": "5.49.0",
-        "@typescript-eslint/typescript-estree": "5.49.0",
+        "@typescript-eslint/scope-manager": "5.50.0",
+        "@typescript-eslint/types": "5.50.0",
+        "@typescript-eslint/typescript-estree": "5.50.0",
         "debug": "^4.3.4"
       }
     },
     "@typescript-eslint/scope-manager": {
-      "version": "5.49.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.49.0.tgz",
-      "integrity": "sha512-clpROBOiMIzpbWNxCe1xDK14uPZh35u4QaZO1GddilEzoCLAEz4szb51rBpdgurs5k2YzPtJeTEN3qVbG+LRUQ==",
+      "version": "5.50.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.50.0.tgz",
+      "integrity": "sha512-rt03kaX+iZrhssaT974BCmoUikYtZI24Vp/kwTSy841XhiYShlqoshRFDvN1FKKvU2S3gK+kcBW1EA7kNUrogg==",
       "dev": true,
       "requires": {
-        "@typescript-eslint/types": "5.49.0",
-        "@typescript-eslint/visitor-keys": "5.49.0"
+        "@typescript-eslint/types": "5.50.0",
+        "@typescript-eslint/visitor-keys": "5.50.0"
       }
     },
     "@typescript-eslint/type-utils": {
@@ -15839,19 +15844,19 @@
       }
     },
     "@typescript-eslint/types": {
-      "version": "5.49.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.49.0.tgz",
-      "integrity": "sha512-7If46kusG+sSnEpu0yOz2xFv5nRz158nzEXnJFCGVEHWnuzolXKwrH5Bsf9zsNlOQkyZuk0BZKKoJQI+1JPBBg==",
+      "version": "5.50.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.50.0.tgz",
+      "integrity": "sha512-atruOuJpir4OtyNdKahiHZobPKFvZnBnfDiyEaBf6d9vy9visE7gDjlmhl+y29uxZ2ZDgvXijcungGFjGGex7w==",
       "dev": true
     },
     "@typescript-eslint/typescript-estree": {
-      "version": "5.49.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.49.0.tgz",
-      "integrity": "sha512-PBdx+V7deZT/3GjNYPVQv1Nc0U46dAHbIuOG8AZ3on3vuEKiPDwFE/lG1snN2eUB9IhF7EyF7K1hmTcLztNIsA==",
+      "version": "5.50.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.50.0.tgz",
+      "integrity": "sha512-Gq4zapso+OtIZlv8YNAStFtT6d05zyVCK7Fx3h5inlLBx2hWuc/0465C2mg/EQDDU2LKe52+/jN4f0g9bd+kow==",
       "dev": true,
       "requires": {
-        "@typescript-eslint/types": "5.49.0",
-        "@typescript-eslint/visitor-keys": "5.49.0",
+        "@typescript-eslint/types": "5.50.0",
+        "@typescript-eslint/visitor-keys": "5.50.0",
         "debug": "^4.3.4",
         "globby": "^11.1.0",
         "is-glob": "^4.0.3",
@@ -15935,12 +15940,12 @@
       }
     },
     "@typescript-eslint/visitor-keys": {
-      "version": "5.49.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.49.0.tgz",
-      "integrity": "sha512-v9jBMjpNWyn8B6k/Mjt6VbUS4J1GvUlR4x3Y+ibnP1z7y7V4n0WRz+50DY6+Myj0UaXVSuUlHohO+eZ8IJEnkg==",
+      "version": "5.50.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.50.0.tgz",
+      "integrity": "sha512-cdMeD9HGu6EXIeGOh2yVW6oGf9wq8asBgZx7nsR/D36gTfQ0odE5kcRYe5M81vjEFAcPeugXrHg78Imu55F6gg==",
       "dev": true,
       "requires": {
-        "@typescript-eslint/types": "5.49.0",
+        "@typescript-eslint/types": "5.50.0",
         "eslint-visitor-keys": "^3.3.0"
       }
     },
@@ -16638,9 +16643,9 @@
       "dev": true
     },
     "caniuse-lite": {
-      "version": "1.0.30001449",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001449.tgz",
-      "integrity": "sha512-CPB+UL9XMT/Av+pJxCKGhdx+yg1hzplvFJQlJ2n68PyQGMz9L/E2zCyLdOL8uasbouTUgnPl+y0tccI/se+BEw=="
+      "version": "1.0.30001450",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001450.tgz",
+      "integrity": "sha512-qMBmvmQmFXaSxexkjjfMvD5rnDL0+m+dUMZKoDYsGG8iZN29RuYh9eRoMvKsT6uMAWlyUUGDEQGJJYjzCIO9ew=="
     },
     "chalk": {
       "version": "2.4.2",
@@ -16891,9 +16896,9 @@
       }
     },
     "content-type": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
-      "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
+      "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
       "dev": true
     },
     "convert-source-map": {
@@ -17124,8 +17129,7 @@
     "cssesc": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
-      "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
-      "dev": true
+      "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="
     },
     "cuint": {
       "version": "0.2.2",
@@ -17185,9 +17189,9 @@
       "dev": true
     },
     "deepmerge": {
-      "version": "4.2.2",
-      "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
-      "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.0.tgz",
+      "integrity": "sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==",
       "dev": true
     },
     "default-gateway": {
@@ -17348,9 +17352,9 @@
       "dev": true
     },
     "electron-to-chromium": {
-      "version": "1.4.284",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz",
-      "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA=="
+      "version": "1.4.286",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.286.tgz",
+      "integrity": "sha512-Vp3CVhmYpgf4iXNKAucoQUDcCrBQX3XLBtwgFqP9BUXuucgvAV9zWp1kYU7LL9j4++s9O+12cb3wMtN4SJy6UQ=="
     },
     "emoji-regex": {
       "version": "8.0.0",
@@ -17545,9 +17549,9 @@
       "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="
     },
     "eslint": {
-      "version": "8.32.0",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.32.0.tgz",
-      "integrity": "sha512-nETVXpnthqKPFyuY2FNjz/bEd6nbosRgKbkgS/y1C7LJop96gYHWpiguLecMHQ2XCPxn77DS0P+68WzG6vkZSQ==",
+      "version": "8.33.0",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.33.0.tgz",
+      "integrity": "sha512-WjOpFQgKK8VrCnAtl8We0SUOy/oVZ5NHykyMiagV1M9r8IFpIJX7DduK6n1mpfhlG7T1NLWm2SuD8QB7KFySaA==",
       "dev": true,
       "requires": {
         "@eslint/eslintrc": "^1.4.1",
@@ -18184,9 +18188,9 @@
       }
     },
     "fs-minipass": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.0.tgz",
-      "integrity": "sha512-EUojgQaSPy6sxcqcZgQv6TVF6jiKvurji3AxhAivs/Ep4O1UpS8TusaxpybfFHZ2skRhLqzk6WR8nqNYIMMDeA==",
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.1.tgz",
+      "integrity": "sha512-MhaJDcFRTuLidHrIttu0RDGyyXs/IYHVmlcxfLAEFIWjc1vdLAkdwT7Ace2u7DbitWC0toKMl5eJZRYNVreIMw==",
       "dev": true,
       "requires": {
         "minipass": "^4.0.0"
@@ -18673,9 +18677,9 @@
       "optional": true
     },
     "immutable": {
-      "version": "4.2.2",
-      "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.2.2.tgz",
-      "integrity": "sha512-fTMKDwtbvO5tldky9QZ2fMX7slR0mYpY5nbnFWYp0fOzDhHqhgIw9KoYgxLWsoNTS9ZHGauHj18DTyEw6BK3Og==",
+      "version": "4.2.4",
+      "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.2.4.tgz",
+      "integrity": "sha512-WDxL3Hheb1JkRN3sQkyujNlL/xRjAo3rJtaU5xeufUauG66JdMr32bLj4gF+vWl84DIA3Zxw7tiAjneYzRRw+w==",
       "dev": true
     },
     "import-fresh": {
@@ -18895,9 +18899,9 @@
       }
     },
     "is-builtin-module": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.0.tgz",
-      "integrity": "sha512-phDA4oSGt7vl1n5tJvTWooWWAsXLY+2xCnxNqvKhGEzujg+A43wPlPOyDg3C8XQHN+6k/JTQWJ/j0dQh/qr+Hw==",
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz",
+      "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==",
       "dev": true,
       "requires": {
         "builtin-modules": "^3.3.0"
@@ -19947,21 +19951,10 @@
       "dev": true
     },
     "minipass": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.0.0.tgz",
-      "integrity": "sha512-g2Uuh2jEKoht+zvO6vJqXmYpflPqzRBT+Th2h01DKh5z7wbY/AZ2gCQ78cP70YoHPyFdY30YBV5WxgLOEwOykw==",
-      "dev": true,
-      "requires": {
-        "yallist": "^4.0.0"
-      },
-      "dependencies": {
-        "yallist": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-          "dev": true
-        }
-      }
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.0.2.tgz",
+      "integrity": "sha512-4Hbzei7ZyBp+1aw0874YWpKOubZd/jc53/XU+gkYry1QV+VvrbO8icLM5CUtm4F0hyXn85DXYKEMIS26gitD3A==",
+      "dev": true
     },
     "minipass-collect": {
       "version": "1.0.2",
@@ -20183,8 +20176,7 @@
     "nanoid": {
       "version": "3.3.4",
       "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
-      "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
-      "dev": true
+      "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw=="
     },
     "natural-compare": {
       "version": "1.4.0",
@@ -20351,9 +20343,9 @@
       "optional": true
     },
     "node-releases": {
-      "version": "2.0.8",
-      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.8.tgz",
-      "integrity": "sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A=="
+      "version": "2.0.10",
+      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz",
+      "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w=="
     },
     "nopt": {
       "version": "6.0.0",
@@ -20466,20 +20458,19 @@
           "dev": true
         },
         "make-fetch-happen": {
-          "version": "11.0.2",
-          "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.0.2.tgz",
-          "integrity": "sha512-5n/Pq41w/uZghpdlXAY5kIM85RgJThtTH/NYBRAZ9VUOBWV90USaQjwGrw76fZP3Lj5hl/VZjpVvOaRBMoL/2w==",
+          "version": "11.0.3",
+          "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.0.3.tgz",
+          "integrity": "sha512-oPLh5m10lRNNZDjJ2kP8UpboUx2uFXVaVweVe/lWut4iHWcQEmfqSVJt2ihZsFI8HbpwyyocaXbCAWf0g1ukIA==",
           "dev": true,
           "requires": {
             "agentkeepalive": "^4.2.1",
             "cacache": "^17.0.0",
-            "http-cache-semantics": "^4.1.0",
+            "http-cache-semantics": "^4.1.1",
             "http-proxy-agent": "^5.0.0",
             "https-proxy-agent": "^5.0.0",
             "is-lambda": "^1.0.1",
             "lru-cache": "^7.7.1",
             "minipass": "^4.0.0",
-            "minipass-collect": "^1.0.2",
             "minipass-fetch": "^3.0.0",
             "minipass-flush": "^1.0.5",
             "minipass-pipeline": "^1.2.4",
@@ -20972,13 +20963,20 @@
       "version": "8.4.21",
       "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz",
       "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==",
-      "dev": true,
       "requires": {
         "nanoid": "^3.3.4",
         "picocolors": "^1.0.0",
         "source-map-js": "^1.0.2"
       }
     },
+    "postcss-combine-duplicated-selectors": {
+      "version": "10.0.3",
+      "resolved": "https://registry.npmjs.org/postcss-combine-duplicated-selectors/-/postcss-combine-duplicated-selectors-10.0.3.tgz",
+      "integrity": "sha512-IP0BmwFloCskv7DV7xqvzDXqMHpwdczJa6ZvIW8abgHdcIHs9mCJX2ltFhu3EwA51ozp13DByng30+Ke+eIExA==",
+      "requires": {
+        "postcss-selector-parser": "^6.0.4"
+      }
+    },
     "postcss-loader": {
       "version": "7.0.2",
       "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.2.tgz",
@@ -21030,7 +21028,6 @@
       "version": "6.0.11",
       "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz",
       "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==",
-      "dev": true,
       "requires": {
         "cssesc": "^3.0.0",
         "util-deprecate": "^1.0.2"
@@ -21468,9 +21465,9 @@
       }
     },
     "rollup": {
-      "version": "3.12.0",
-      "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.12.0.tgz",
-      "integrity": "sha512-4MZ8kA2HNYahIjz63rzrMMRvDqQDeS9LoriJvMuV0V6zIGysP36e9t4yObUfwdT9h/szXoHQideICftcdZklWg==",
+      "version": "3.14.0",
+      "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.14.0.tgz",
+      "integrity": "sha512-o23sdgCLcLSe3zIplT9nQ1+r97okuaiR+vmAPZPTDYB7/f3tgWIYNyiQveMsZwshBT0is4eGax/HH83Q7CG+/Q==",
       "dev": true,
       "requires": {
         "fsevents": "~2.3.2"
@@ -21866,8 +21863,7 @@
     "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==",
-      "dev": true
+      "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw=="
     },
     "source-map-loader": {
       "version": "4.0.1",
@@ -22326,9 +22322,9 @@
       "dev": true
     },
     "typescript": {
-      "version": "4.9.4",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz",
-      "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg=="
+      "version": "4.9.5",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz",
+      "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g=="
     },
     "ua-parser-js": {
       "version": "0.7.33",
@@ -22415,8 +22411,7 @@
     "util-deprecate": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
-      "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
-      "dev": true
+      "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
     },
     "utils-merge": {
       "version": "1.0.1",
diff --git a/package.json b/package.json
index 99ec06c7..166b2a29 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
   "name": "coreui-angular-dev",
-  "version": "4.3.9",
+  "version": "4.3.11",
   "description": "CoreUI Components Library for Angular",
   "copyright": "Copyright 2022 creativeLabs Łukasz Holeczek",
   "license": "MIT",
@@ -36,16 +36,16 @@
   },
   "private": true,
   "dependencies": {
-    "@angular/animations": "^15.1.2",
-    "@angular/cdk": "^15.1.2",
-    "@angular/common": "^15.1.2",
-    "@angular/compiler": "^15.1.2",
-    "@angular/core": "^15.1.2",
-    "@angular/forms": "^15.1.2",
-    "@angular/localize": "^15.1.2",
-    "@angular/platform-browser": "^15.1.2",
-    "@angular/platform-browser-dynamic": "^15.1.2",
-    "@angular/router": "^15.1.2",
+    "@angular/animations": "^15.1.3",
+    "@angular/cdk": "^15.1.3",
+    "@angular/common": "^15.1.3",
+    "@angular/compiler": "^15.1.3",
+    "@angular/core": "^15.1.3",
+    "@angular/forms": "^15.1.3",
+    "@angular/localize": "^15.1.3",
+    "@angular/platform-browser": "^15.1.3",
+    "@angular/platform-browser-dynamic": "^15.1.3",
+    "@angular/router": "^15.1.3",
     "@coreui/chartjs": "^3.0.0",
     "@popperjs/core": "~2.11.6",
     "chart.js": "^3.9.1",
@@ -55,22 +55,22 @@
     "zone.js": "~0.12.0"
   },
   "devDependencies": {
-    "@angular-devkit/build-angular": "^15.1.3",
+    "@angular-devkit/build-angular": "^15.1.4",
     "@angular-eslint/builder": "^15.2.0",
     "@angular-eslint/eslint-plugin": "^15.2.0",
     "@angular-eslint/eslint-plugin-template": "^15.2.0",
     "@angular-eslint/schematics": "^15.2.0",
     "@angular-eslint/template-parser": "^15.2.0",
-    "@angular/cli": "^15.1.3",
-    "@angular/compiler-cli": "^15.1.2",
-    "@angular/language-service": "^15.1.2",
+    "@angular/cli": "^15.1.4",
+    "@angular/compiler-cli": "^15.1.3",
+    "@angular/language-service": "^15.1.3",
     "@coreui/icons": "^3.0.0",
     "@types/jasmine": "~4.3.1",
     "@types/lodash-es": "^4.17.6",
-    "@types/node": "^18.11.18",
-    "@typescript-eslint/eslint-plugin": "^5.49.0",
-    "@typescript-eslint/parser": "^5.49.0",
-    "eslint": "~8.32.0",
+    "@types/node": "^18.11.19",
+    "@typescript-eslint/eslint-plugin": "^5.50.0",
+    "@typescript-eslint/parser": "^5.50.0",
+    "eslint": "~8.33.0",
     "jasmine-core": "^4.5.0",
     "karma": "^6.4.1",
     "karma-chrome-launcher": "^3.1.1",
@@ -79,7 +79,7 @@
     "karma-jasmine-html-reporter": "^2.0.0",
     "ng-packagr": "^15.1.1",
     "prettier": "^2.8.3",
-    "typescript": "~4.9.4"
+    "typescript": "~4.9.5"
   },
   "keywords": [
     "angular",
diff --git a/projects/coreui-angular/package.json b/projects/coreui-angular/package.json
index 1c6f38c4..6189284f 100644
--- a/projects/coreui-angular/package.json
+++ b/projects/coreui-angular/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@coreui/angular",
-  "version": "4.3.9",
+  "version": "4.3.11",
   "description": "CoreUI for Angular UI components library",
   "copyright": "Copyright 2022 creativeLabs Łukasz Holeczek",
   "license": "MIT",
diff --git a/projects/coreui-angular/src/lib/backdrop/backdrop.service.ts b/projects/coreui-angular/src/lib/backdrop/backdrop.service.ts
index 2bf50bc3..778ab6db 100644
--- a/projects/coreui-angular/src/lib/backdrop/backdrop.service.ts
+++ b/projects/coreui-angular/src/lib/backdrop/backdrop.service.ts
@@ -14,12 +14,19 @@ export class BackdropService {
   private unListen!: () => void;
 
   constructor(
-    @Inject(DOCUMENT) private document: any,
+    @Inject(DOCUMENT) private document: Document,
     private rendererFactory: RendererFactory2
   ) {
     this.renderer = rendererFactory.createRenderer(null, null);
   }
 
+  get scrollbarWidth() {
+    // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes
+    const documentWidth = this.document.documentElement.clientWidth;
+    const scrollbarWidth = Math.abs((window?.innerWidth ?? documentWidth) - documentWidth);
+    return `${scrollbarWidth}px`;
+  }
+
   setBackdrop(type: string = 'modal'): any {
     const backdropElement = this.renderer.createElement('div');
     this.renderer.addClass(backdropElement, `${type}-backdrop`);
diff --git a/projects/coreui-angular/src/lib/modal/modal/modal.component.ts b/projects/coreui-angular/src/lib/modal/modal/modal.component.ts
index 48f1de66..3f08adbb 100644
--- a/projects/coreui-angular/src/lib/modal/modal/modal.component.ts
+++ b/projects/coreui-angular/src/lib/modal/modal/modal.component.ts
@@ -184,16 +184,9 @@ export class ModalComponent implements OnInit, OnDestroy {
 
   private _show = true;
 
-  private get scrollbarWidth() {
-    // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes
-    const documentWidth = this.document.documentElement.clientWidth;
-    const scrollbarWidth = Math.abs((window?.innerWidth ?? documentWidth) - documentWidth);
-    return `${scrollbarWidth}px`;
-  }
-
   @HostListener('@showHide.start', ['$event'])
   animateStart(event: AnimationEvent) {
-    const scrollbarWidth = this.scrollbarWidth;
+    const scrollbarWidth = this.backdropService.scrollbarWidth;
     if (event.toState === 'visible') {
       this.renderer.setStyle(this.document.body, 'overflow', 'hidden');
       this.renderer.setStyle(this.document.body, 'padding-right', scrollbarWidth);
diff --git a/projects/coreui-angular/src/lib/offcanvas/offcanvas/offcanvas.component.scss b/projects/coreui-angular/src/lib/offcanvas/offcanvas/offcanvas.component.scss
index e69de29b..cc36f78b 100644
--- a/projects/coreui-angular/src/lib/offcanvas/offcanvas/offcanvas.component.scss
+++ b/projects/coreui-angular/src/lib/offcanvas/offcanvas/offcanvas.component.scss
@@ -0,0 +1,3 @@
+:host {
+  display: none;
+}
diff --git a/projects/coreui-angular/src/lib/offcanvas/offcanvas/offcanvas.component.ts b/projects/coreui-angular/src/lib/offcanvas/offcanvas/offcanvas.component.ts
index c0bdee41..81ae536f 100644
--- a/projects/coreui-angular/src/lib/offcanvas/offcanvas/offcanvas.component.ts
+++ b/projects/coreui-angular/src/lib/offcanvas/offcanvas/offcanvas.component.ts
@@ -6,21 +6,21 @@ import {
   HostListener,
   Inject,
   Input,
-  OnChanges,
   OnDestroy,
   OnInit,
   Output,
   PLATFORM_ID,
-  Renderer2,
-  SimpleChanges,
+  Renderer2
 } from '@angular/core';
-import { animate, state, style, transition, trigger, } from '@angular/animations';
+import { DOCUMENT, isPlatformBrowser } from '@angular/common';
+import { animate, AnimationEvent, state, style, transition, trigger } from '@angular/animations';
 import { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';
+import { BreakpointObserver, BreakpointState } from '@angular/cdk/layout';
 import { Subscription } from 'rxjs';
+import { filter } from 'rxjs/operators';
 
-import { OffcanvasService } from '../offcanvas.service';
 import { BackdropService } from '../../backdrop/backdrop.service';
-import { DOCUMENT, isPlatformBrowser } from '@angular/common';
+import { OffcanvasService } from '../offcanvas.service';
 
 let nextId = 0;
 
@@ -29,43 +29,44 @@ let nextId = 0;
   animations: [
     trigger('showHide', [
       state(
-        'true',
+        'visible',
         style({
-          visibility: 'visible',
+          // visibility: 'visible'
         })
       ),
       state(
-        'false',
+        'hidden',
         style({
-          visibility: 'hidden',
+          // visibility: 'hidden'
         })
       ),
-      transition('true => false', [animate('300ms')]),
-    ]),
+      transition('visible <=> *', [animate('300ms')])
+    ])
   ],
   templateUrl: './offcanvas.component.html',
   styleUrls: ['./offcanvas.component.scss'],
-  exportAs: 'cOffcanvas',
+  exportAs: 'cOffcanvas'
 })
-export class OffcanvasComponent implements OnChanges, OnInit, OnDestroy {
+export class OffcanvasComponent implements OnInit, OnDestroy {
 
   static ngAcceptInputType_scroll: BooleanInput;
 
   constructor(
-    @Inject(DOCUMENT) private document: any,
+    @Inject(DOCUMENT) private document: Document,
     @Inject(PLATFORM_ID) private platformId: any,
     private renderer: Renderer2,
     private hostElement: ElementRef,
     private offcanvasService: OffcanvasService,
-    private backdropService: BackdropService
-  ) { }
+    private backdropService: BackdropService,
+    private breakpointObserver: BreakpointObserver
+  ) {}
 
   /**
    * Apply a backdrop on body while offcanvas is open.
-   * @type boolean
+   * @type boolean | 'static'
    * @default true
    */
-  @Input() backdrop = true;
+  @Input() backdrop: boolean | 'static' = true;
 
   /**
    * Closes the offcanvas when escape key is pressed [docs]
@@ -81,20 +82,32 @@ export class OffcanvasComponent implements OnChanges, OnInit, OnDestroy {
    */
   @Input() placement: string | 'start' | 'end' | 'top' | 'bottom' = 'start';
 
+  /**
+   * Responsive offcanvas property hides content outside the viewport from a specified breakpoint and down.
+   * @type boolean | 'sm' | 'md' | 'lg' | 'xl' | 'xxl';
+   * @default true
+   * @since 4.3.10
+   */
+  @Input() responsive?: boolean | 'sm' | 'md' | 'lg' | 'xl' | 'xxl' = true;
+
   /**
    * Allow body scrolling while offcanvas is visible.
    * @type boolean
+   * @default false
    */
   @Input()
   set scroll(value: boolean) {
-    this._scroll = coerceBooleanProperty(value);
-  };
+    this.#scroll = coerceBooleanProperty(value);
+  }
+
   get scroll() {
-    return this._scroll;
+    return this.#scroll;
   }
-  private _scroll = false;
+
+  #scroll = false;
 
   @Input() id = `offcanvas-${this.placement}-${nextId++}`;
+
   /**
    * Default role for offcanvas. [docs]
    * @type string
@@ -112,47 +125,53 @@ export class OffcanvasComponent implements OnChanges, OnInit, OnDestroy {
   /**
    * Toggle the visibility of offcanvas component.
    * @type boolean
+   * @default false
    */
   @Input()
   set visible(value: boolean) {
-    this._visible = coerceBooleanProperty(value);
-    if (value) {
+    this.#visible = coerceBooleanProperty(value);
+    if (this.#visible) {
       this.setBackdrop(this.backdrop);
       this.setFocus();
     } else {
       this.setBackdrop(false);
     }
-    this.setScroll();
+    this.layoutChangeSubscribe(this.#visible);
     this.visibleChange.emit(value);
   }
+
   get visible(): boolean {
-    return this._visible;
+    return this.#visible;
   }
-  private _visible!: boolean;
+
+  #visible: boolean = false;
 
   /**
    * Event triggered on visible change.
    */
-  @Output() visibleChange = new EventEmitter<boolean>();
+  @Output() readonly visibleChange = new EventEmitter<boolean>();
 
-  private activeBackdrop!: any;
+  #activeBackdrop!: HTMLDivElement;
+  #scrollbarWidth!: string;
 
-  private stateToggleSubscription!: Subscription;
-  private backdropClickSubscription!: Subscription;
+  #stateToggleSubscription!: Subscription;
+  #backdropClickSubscription!: Subscription;
+  #layoutChangeSubscription!: Subscription;
 
   @HostBinding('class')
   get hostClasses(): any {
     return {
-      offcanvas: true,
+      offcanvas: typeof this.responsive === 'boolean',
+      [`offcanvas-${this.responsive}`]: typeof this.responsive !== 'boolean',
       [`offcanvas-${this.placement}`]: !!this.placement,
-      show: this.visible,
+      show: this.show
     };
   }
 
   @HostBinding('attr.aria-hidden')
   get ariaHidden(): boolean | null {
     return this.visible ? null : true;
-  };
+  }
 
   @HostBinding('attr.tabindex')
   get tabIndex(): string | null {
@@ -160,20 +179,68 @@ export class OffcanvasComponent implements OnChanges, OnInit, OnDestroy {
   }
 
   @HostBinding('@showHide')
-  get animateType(): boolean {
-    return this.visible;
+  get animateTrigger(): string {
+    return this.visible ? 'visible' : 'hidden';
+  }
+
+  get show(): boolean {
+    return this.visible && this.#show;
+  }
+
+  set show(value: boolean) {
+    this.#show = value;
+  }
+
+  #show = false;
+
+  @HostListener('@showHide.start', ['$event'])
+  animateStart(event: AnimationEvent) {
+    const scrollbarWidth = this.#scrollbarWidth;
+    if (event.toState === 'visible') {
+      if (!this.scroll) {
+        this.renderer.setStyle(this.document.body, 'overflow', 'hidden');
+        this.renderer.setStyle(this.document.body, 'padding-right', scrollbarWidth);
+      }
+      this.renderer.addClass(this.hostElement.nativeElement, 'showing');
+    } else {
+      this.renderer.addClass(this.hostElement.nativeElement, 'hiding');
+    }
+  }
+
+  @HostListener('@showHide.done', ['$event'])
+  animateDone(event: AnimationEvent) {
+    setTimeout(() => {
+      if (event.toState === 'visible') {
+        this.renderer.removeClass(this.hostElement.nativeElement, 'showing');
+      }
+      if (event.toState === 'hidden') {
+        this.renderer.removeClass(this.hostElement.nativeElement, 'hiding');
+        this.renderer.removeStyle(this.document.body, 'overflow');
+        this.renderer.removeStyle(this.document.body, 'paddingRight');
+      }
+    });
+    this.show = this.visible;
   }
 
   @HostListener('document:keydown', ['$event'])
   onKeyDownHandler(event: KeyboardEvent): void {
-    if (event.key === 'Escape' && this.keyboard && this.visible) {
+    if (
+      event.key === 'Escape' &&
+      this.keyboard &&
+      this.visible &&
+      this.backdrop !== 'static'
+    ) {
       this.offcanvasService.toggle({ show: false, id: this.id });
     }
   }
 
   ngOnInit(): void {
-    this.setScroll();
+    this.#scrollbarWidth = this.backdropService.scrollbarWidth;
     this.stateToggleSubscribe();
+    setTimeout(() => {
+      // hotfix to avoid offcanvas flicker on the first render
+      this.renderer.setStyle(this.hostElement.nativeElement, 'display', 'flex');
+    })
   }
 
   ngOnDestroy(): void {
@@ -181,48 +248,39 @@ export class OffcanvasComponent implements OnChanges, OnInit, OnDestroy {
     this.stateToggleSubscribe(false);
   }
 
-  ngOnChanges(changes: SimpleChanges): void {
-    if (changes['scroll']) {
-      this.setScroll();
-    }
-  }
-
   private stateToggleSubscribe(subscribe: boolean = true): void {
     if (subscribe) {
-      this.stateToggleSubscription = this.offcanvasService.offcanvasState$.subscribe(
-        (action) => {
+      this.#stateToggleSubscription =
+        this.offcanvasService.offcanvasState$.subscribe((action) => {
           if (this === action.offcanvas || this.id === action.id) {
             if ('show' in action) {
-              this.visible = action?.show === 'toggle' ? !this.visible : action.show;
+              this.visible =
+                action?.show === 'toggle' ? !this.visible : action.show;
             }
           }
-        }
-      );
+        });
     } else {
-      this.stateToggleSubscription.unsubscribe();
+      this.#stateToggleSubscription.unsubscribe();
     }
   }
 
   private backdropClickSubscribe(subscribe: boolean = true): void {
     if (subscribe) {
-      this.backdropClickSubscription = this.backdropService.backdropClick$.subscribe(
-        (clicked) => {
+      this.#backdropClickSubscription =
+        this.backdropService.backdropClick$.subscribe((clicked) => {
           this.offcanvasService.toggle({ show: !clicked, id: this.id });
-        }
-      );
+        });
     } else {
-      this.backdropClickSubscription?.unsubscribe();
+      this.#backdropClickSubscription?.unsubscribe();
     }
   }
 
-  private setBackdrop(setBackdrop: boolean): void {
-    if (setBackdrop) {
-      this.activeBackdrop = this.backdropService.setBackdrop('offcanvas');
-      this.backdropClickSubscribe();
-    } else {
-      this.activeBackdrop = this.backdropService.clearBackdrop(this.activeBackdrop);
-      this.backdropClickSubscribe(false);
-    }
+  private setBackdrop(setBackdrop: boolean | 'static'): void {
+    this.#scrollbarWidth = this.backdropService.scrollbarWidth;
+    this.#activeBackdrop = !!setBackdrop ? this.backdropService.setBackdrop('offcanvas')
+                                         : this.backdropService.clearBackdrop(this.#activeBackdrop);
+    setBackdrop === true ? this.backdropClickSubscribe()
+                         : this.backdropClickSubscribe(false);
   }
 
   setFocus(): void {
@@ -231,17 +289,39 @@ export class OffcanvasComponent implements OnChanges, OnInit, OnDestroy {
     }
   }
 
-  setScroll() {
-    if (this.visible) {
-      if (!this.scroll) {
-        this.renderer.setStyle(this.document.body, 'overflow', 'hidden');
-        this.renderer.setStyle(this.document.body, 'paddingRight.px', '0');
-      }
-      return;
+  get responsiveBreakpoint(): string | false {
+    if (typeof this.responsive !== 'string') {
+      return false;
     }
-    if (!this.scroll) {
-      this.renderer.removeStyle(this.document.body, 'overflow');
-      this.renderer.removeStyle(this.document.body, 'paddingRight');
+    const element: Element = this.document.documentElement;
+    const responsiveBreakpoint = this.responsive;
+    const breakpointValue = getComputedStyle(element).getPropertyValue(`--cui-breakpoint-${responsiveBreakpoint.trim()}`) || false;
+    return breakpointValue ? `${parseFloat(breakpointValue.trim()) - 0.02}px` : false;
+  }
+
+  private layoutChangeSubscribe(subscribe: boolean = true): void {
+
+    if (subscribe) {
+
+      if (!this.responsiveBreakpoint) {
+        return;
+      }
+
+      const responsiveBreakpoint = `(max-width: ${this.responsiveBreakpoint})`;
+
+      const layoutChanges = this.breakpointObserver.observe([responsiveBreakpoint]);
+
+      this.#layoutChangeSubscription = layoutChanges
+        .pipe(
+          filter(breakpointState => !breakpointState.matches)
+        )
+        .subscribe(
+          (breakpointState: BreakpointState) => {
+            this.visible = breakpointState.matches;
+          }
+        );
+    } else {
+      this.#layoutChangeSubscription?.unsubscribe();
     }
   }
 }
diff --git a/projects/coreui-angular/src/lib/sidebar/sidebar/sidebar.component.ts b/projects/coreui-angular/src/lib/sidebar/sidebar/sidebar.component.ts
index 5cb773a7..cb43f9f3 100644
--- a/projects/coreui-angular/src/lib/sidebar/sidebar/sidebar.component.ts
+++ b/projects/coreui-angular/src/lib/sidebar/sidebar/sidebar.component.ts
@@ -258,7 +258,7 @@ export class SidebarComponent implements OnChanges, OnDestroy, OnInit {
           }
         });
     } else {
-      this.#stateToggleSubscription.unsubscribe();
+      this.#stateToggleSubscription?.unsubscribe();
     }
   }
 
