diff --git a/package-lock.json b/package-lock.json index a3266f7a..4efd5ecf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "coreui-angular-dev", - "version": "4.2.27", + "version": "4.2.29", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "coreui-angular-dev", - "version": "4.2.27", + "version": "4.2.29", "license": "MIT", "dependencies": { "@angular/animations": "^14.2.12", @@ -40,10 +40,10 @@ "@coreui/icons": "^2.1.0", "@types/jasmine": "~4.3.1", "@types/lodash-es": "^4.17.6", - "@types/node": "^16.18.11", - "@typescript-eslint/eslint-plugin": "^5.48.1", - "@typescript-eslint/parser": "^5.48.1", - "eslint": "~8.30.0", + "@types/node": "^16.18.12", + "@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", @@ -3451,9 +3451,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "16.18.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.11.tgz", - "integrity": "sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA==", + "version": "16.18.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.12.tgz", + "integrity": "sha512-vzLe5NaNMjIE3mcddFVGlAXN1LEWueUsMsOJWaT6wWMJGyljHAWHznqfnKUQWGzu7TLPrGvWdNAsvQYW+C0xtw==", "dev": true }, "node_modules/@types/parse-json": { @@ -3533,15 +3533,16 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.48.1.tgz", - "integrity": "sha512-9nY5K1Rp2ppmpb9s9S2aBiF3xo5uExCehMDmYmmFqqyxgenbHJ3qbarcLt4ITgaD6r/2ypdlcFRdcuVPnks+fQ==", + "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.48.1", - "@typescript-eslint/type-utils": "5.48.1", - "@typescript-eslint/utils": "5.48.1", + "@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", @@ -3566,13 +3567,13 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/type-utils": { - "version": "5.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.48.1.tgz", - "integrity": "sha512-Hyr8HU8Alcuva1ppmqSYtM/Gp0q4JOp1F+/JH5D1IZm/bUBrV0edoewQZiEc1r6I8L4JL21broddxK8HAcZiqQ==", + "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.48.1", - "@typescript-eslint/utils": "5.48.1", + "@typescript-eslint/typescript-estree": "5.50.0", + "@typescript-eslint/utils": "5.50.0", "debug": "^4.3.4", "tsutils": "^3.21.0" }, @@ -3593,16 +3594,16 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { - "version": "5.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.48.1.tgz", - "integrity": "sha512-SmQuSrCGUOdmGMwivW14Z0Lj8dxG1mOFZ7soeJ0TQZEJcs3n5Ndgkg0A4bcMFzBELqLJ6GTHnEU+iIoaD6hFGA==", + "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.48.1", - "@typescript-eslint/types": "5.48.1", - "@typescript-eslint/typescript-estree": "5.48.1", + "@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" @@ -3641,14 +3642,14 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "5.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.48.1.tgz", - "integrity": "sha512-4yg+FJR/V1M9Xoq56SF9Iygqm+r5LMXvheo6DQ7/yUWynQ4YfCRnsKuRgqH4EQ5Ya76rVwlEpw4Xu+TgWQUcdA==", + "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.48.1", - "@typescript-eslint/types": "5.48.1", - "@typescript-eslint/typescript-estree": "5.48.1", + "@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": { @@ -3668,13 +3669,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.48.1.tgz", - "integrity": "sha512-S035ueRrbxRMKvSTv9vJKIWgr86BD8s3RqoRZmsSh/s8HhIs90g6UlK8ZabUSjUZQkhVxt7nmZ63VJ9dcZhtDQ==", + "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.48.1", - "@typescript-eslint/visitor-keys": "5.48.1" + "@typescript-eslint/types": "5.50.0", + "@typescript-eslint/visitor-keys": "5.50.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -3769,9 +3770,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.48.1.tgz", - "integrity": "sha512-xHyDLU6MSuEEdIlzrrAerCGS3T7AA/L8Hggd0RCYBi0w3JMvGYxlLlXHeg50JI9Tfg5MrtsfuNxbS/3zF1/ATg==", + "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" @@ -3782,13 +3783,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.48.1.tgz", - "integrity": "sha512-Hut+Osk5FYr+sgFh8J/FHjqX6HFcDzTlWLrFqGoK5kVUN3VBHF/QzZmAsIXCQ8T/W9nQNBTqalxi1P3LSqWnRA==", + "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.48.1", - "@typescript-eslint/visitor-keys": "5.48.1", + "@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", @@ -3931,12 +3932,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.1.tgz", - "integrity": "sha512-Ns0XBwmfuX7ZknznfXozgnydyR8F6ev/KEGePP4i74uL3ArsKbEhJ7raeKr1JSa997DBDwol/4a0Y+At82c9dA==", + "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.48.1", + "@typescript-eslint/types": "5.50.0", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -6460,12 +6461,12 @@ } }, "node_modules/eslint": { - "version": "8.30.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.30.0.tgz", - "integrity": "sha512-MGADB39QqYuzEGov+F/qb18r4i7DohCDOfatHaxI2iGlPuC65bwG2gxgO+7DkyL38dRFaRH7RaRAgU6JKL9rMQ==", + "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.0", + "@eslint/eslintrc": "^1.4.1", "@humanwhocodes/config-array": "^0.11.8", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -7718,9 +7719,9 @@ "dev": true }, "node_modules/http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", "dev": true }, "node_modules/http-deceiver": { @@ -13336,9 +13337,9 @@ } }, "node_modules/ua-parser-js": { - "version": "0.7.32", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.32.tgz", - "integrity": "sha512-f9BESNVhzlhEFf2CHMSj40NWOjYPl1YKYbrvIr/hFTDEmLq7SRbWvm7FcdcpCYT95zrOhC7gZSxjdnnTpBcwVw==", + "version": "0.7.33", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.33.tgz", + "integrity": "sha512-s8ax/CeZdK9R/56Sui0WM6y9OFREJarMRHqLB2EwkovemBxNQ+Bqu8GAsUnVcXKgphb++ghr/B2BZx4mahujPw==", "dev": true, "funding": [ { @@ -16510,9 +16511,9 @@ "dev": true }, "@types/node": { - "version": "16.18.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.11.tgz", - "integrity": "sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA==", + "version": "16.18.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.12.tgz", + "integrity": "sha512-vzLe5NaNMjIE3mcddFVGlAXN1LEWueUsMsOJWaT6wWMJGyljHAWHznqfnKUQWGzu7TLPrGvWdNAsvQYW+C0xtw==", "dev": true }, "@types/parse-json": { @@ -16592,15 +16593,16 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "5.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.48.1.tgz", - "integrity": "sha512-9nY5K1Rp2ppmpb9s9S2aBiF3xo5uExCehMDmYmmFqqyxgenbHJ3qbarcLt4ITgaD6r/2ypdlcFRdcuVPnks+fQ==", + "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.48.1", - "@typescript-eslint/type-utils": "5.48.1", - "@typescript-eslint/utils": "5.48.1", + "@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", @@ -16609,28 +16611,28 @@ }, "dependencies": { "@typescript-eslint/type-utils": { - "version": "5.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.48.1.tgz", - "integrity": "sha512-Hyr8HU8Alcuva1ppmqSYtM/Gp0q4JOp1F+/JH5D1IZm/bUBrV0edoewQZiEc1r6I8L4JL21broddxK8HAcZiqQ==", + "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.48.1", - "@typescript-eslint/utils": "5.48.1", + "@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.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.48.1.tgz", - "integrity": "sha512-SmQuSrCGUOdmGMwivW14Z0Lj8dxG1mOFZ7soeJ0TQZEJcs3n5Ndgkg0A4bcMFzBELqLJ6GTHnEU+iIoaD6hFGA==", + "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.48.1", - "@typescript-eslint/types": "5.48.1", - "@typescript-eslint/typescript-estree": "5.48.1", + "@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" @@ -16655,25 +16657,25 @@ } }, "@typescript-eslint/parser": { - "version": "5.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.48.1.tgz", - "integrity": "sha512-4yg+FJR/V1M9Xoq56SF9Iygqm+r5LMXvheo6DQ7/yUWynQ4YfCRnsKuRgqH4EQ5Ya76rVwlEpw4Xu+TgWQUcdA==", + "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.48.1", - "@typescript-eslint/types": "5.48.1", - "@typescript-eslint/typescript-estree": "5.48.1", + "@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.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.48.1.tgz", - "integrity": "sha512-S035ueRrbxRMKvSTv9vJKIWgr86BD8s3RqoRZmsSh/s8HhIs90g6UlK8ZabUSjUZQkhVxt7nmZ63VJ9dcZhtDQ==", + "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.48.1", - "@typescript-eslint/visitor-keys": "5.48.1" + "@typescript-eslint/types": "5.50.0", + "@typescript-eslint/visitor-keys": "5.50.0" } }, "@typescript-eslint/type-utils": { @@ -16722,19 +16724,19 @@ } }, "@typescript-eslint/types": { - "version": "5.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.48.1.tgz", - "integrity": "sha512-xHyDLU6MSuEEdIlzrrAerCGS3T7AA/L8Hggd0RCYBi0w3JMvGYxlLlXHeg50JI9Tfg5MrtsfuNxbS/3zF1/ATg==", + "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.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.48.1.tgz", - "integrity": "sha512-Hut+Osk5FYr+sgFh8J/FHjqX6HFcDzTlWLrFqGoK5kVUN3VBHF/QzZmAsIXCQ8T/W9nQNBTqalxi1P3LSqWnRA==", + "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.48.1", - "@typescript-eslint/visitor-keys": "5.48.1", + "@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", @@ -16818,12 +16820,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "5.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.1.tgz", - "integrity": "sha512-Ns0XBwmfuX7ZknznfXozgnydyR8F6ev/KEGePP4i74uL3ArsKbEhJ7raeKr1JSa997DBDwol/4a0Y+At82c9dA==", + "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.48.1", + "@typescript-eslint/types": "5.50.0", "eslint-visitor-keys": "^3.3.0" } }, @@ -18640,12 +18642,12 @@ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" }, "eslint": { - "version": "8.30.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.30.0.tgz", - "integrity": "sha512-MGADB39QqYuzEGov+F/qb18r4i7DohCDOfatHaxI2iGlPuC65bwG2gxgO+7DkyL38dRFaRH7RaRAgU6JKL9rMQ==", + "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.0", + "@eslint/eslintrc": "^1.4.1", "@humanwhocodes/config-array": "^0.11.8", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -19603,9 +19605,9 @@ "dev": true }, "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", "dev": true }, "http-deceiver": { @@ -23682,9 +23684,9 @@ "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==" }, "ua-parser-js": { - "version": "0.7.32", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.32.tgz", - "integrity": "sha512-f9BESNVhzlhEFf2CHMSj40NWOjYPl1YKYbrvIr/hFTDEmLq7SRbWvm7FcdcpCYT95zrOhC7gZSxjdnnTpBcwVw==", + "version": "0.7.33", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.33.tgz", + "integrity": "sha512-s8ax/CeZdK9R/56Sui0WM6y9OFREJarMRHqLB2EwkovemBxNQ+Bqu8GAsUnVcXKgphb++ghr/B2BZx4mahujPw==", "dev": true }, "unicode-canonical-property-names-ecmascript": { diff --git a/package.json b/package.json index d39d6681..43af34c9 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,8 @@ { "name": "coreui-angular-dev", - "version": "4.2.27", + "version": "4.2.29", "description": "CoreUI Components Library for Angular", + "copyright": "Copyright 2022 creativeLabs Łukasz Holeczek", "license": "MIT", "author": "The CoreUI Team (https://github.com/orgs/coreui/people)", "scripts": { @@ -20,7 +21,7 @@ "test:chartjs:dev": "ng test coreui-angular-chartjs", "test:chartjs:prod": "ng test coreui-angular-chartjs --karma-config=projects/coreui-angular-chartjs/karma.conf.github.js", "prepublish:chartjs": "ng lint coreui-angular-chartjs && ng test coreui-angular-chartjs --watch=false && ng build coreui-angular-chartjs", - "publish:chartjs": "cd dist/coreui-angular-chartjs/ && npm publish --tag next --dry-run", + "publish:chartjs": "cd dist/coreui-angular-chartjs/ && npm publish --tag ng-v14 --dry-run", "lint:chartjs": "ng lint coreui-angular-chartjs", "link:chartjs": "cd dist/coreui-angular-chartjs/ && npm link", "icons": "ng", @@ -29,7 +30,7 @@ "test:icons:dev": "ng test coreui-icons-angular", "test:icons:prod": "ng test coreui-icons-angular --karma-config=projects/coreui-icons-angular/karma.conf.github.js", "prepublish:icons": "ng lint coreui-icons-angular && ng test coreui-icons-angular --watch=false && ng build coreui-icons-angular", - "publish:icons": "cd dist/coreui-icons-angular/ && npm publish --tag next --dry-run", + "publish:icons": "cd dist/coreui-icons-angular/ && npm publish --tag ng-v14 --dry-run", "lint:icons": "ng lint coreui-icons-angular", "link:icons": "cd dist/coreui-icons-angular/ && npm link" }, @@ -66,10 +67,10 @@ "@coreui/icons": "^2.1.0", "@types/jasmine": "~4.3.1", "@types/lodash-es": "^4.17.6", - "@types/node": "^16.18.11", - "@typescript-eslint/eslint-plugin": "^5.48.1", - "@typescript-eslint/parser": "^5.48.1", - "eslint": "~8.30.0", + "@types/node": "^16.18.12", + "@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", diff --git a/projects/coreui-angular/package.json b/projects/coreui-angular/package.json index f3651c8b..c6444707 100644 --- a/projects/coreui-angular/package.json +++ b/projects/coreui-angular/package.json @@ -1,6 +1,6 @@ { "name": "@coreui/angular", - "version": "4.2.27", + "version": "4.2.29", "description": "CoreUI for Angular UI components library", "license": "MIT", "homepage": "https://coreui.io/angular", 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(); + @Output() readonly visibleChange = new EventEmitter(); - 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 f7335e43..cb43f9f3 100644 --- a/projects/coreui-angular/src/lib/sidebar/sidebar/sidebar.component.ts +++ b/projects/coreui-angular/src/lib/sidebar/sidebar/sidebar.component.ts @@ -9,20 +9,20 @@ import { OnInit, Output, Renderer2, - SimpleChanges -} from "@angular/core"; -import { DOCUMENT } from "@angular/common"; -import { BooleanInput, coerceBooleanProperty } from "@angular/cdk/coercion"; -import { BreakpointObserver, BreakpointState } from "@angular/cdk/layout"; -import { Subscription } from "rxjs"; + SimpleChanges, +} from '@angular/core'; +import { DOCUMENT } from '@angular/common'; +import { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion'; +import { BreakpointObserver, BreakpointState } from '@angular/cdk/layout'; +import { Subscription } from 'rxjs'; -import { ISidebarAction, SidebarService } from "../sidebar.service"; -import { SidebarBackdropService } from "../sidebar-backdrop/sidebar-backdrop.service"; +import { ISidebarAction, SidebarService } from '../sidebar.service'; +import { SidebarBackdropService } from '../sidebar-backdrop/sidebar-backdrop.service'; @Component({ selector: 'c-sidebar', exportAs: 'cSidebar', - template: '' + template: '', }) export class SidebarComponent implements OnChanges, OnDestroy, OnInit { static ngAcceptInputType_narrow: BooleanInput; @@ -39,13 +39,13 @@ export class SidebarComponent implements OnChanges, OnDestroy, OnInit { #stateToggleSubscription!: Subscription; state: ISidebarAction = { - sidebar: this + sidebar: this, }; #stateInitial = { narrow: false, visible: false, - unfoldable: false + unfoldable: false, }; /** @@ -258,7 +258,7 @@ export class SidebarComponent implements OnChanges, OnDestroy, OnInit { } }); } else { - this.#stateToggleSubscription.unsubscribe(); + this.#stateToggleSubscription?.unsubscribe(); } } diff --git a/projects/coreui-icons-angular/LICENSE b/projects/coreui-icons-angular/LICENSE new file mode 100644 index 00000000..1f38323c --- /dev/null +++ b/projects/coreui-icons-angular/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 creativeLabs Łukasz Holeczek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.