diff --git a/CHANGELOG.md b/CHANGELOG.md index fa42ff2b..afa57905 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,15 @@ --- +#### `5.2.17` + +- refactor(img): input signals, host bindings +- refactor(list-group): input signals, host bindings +- chore(dependencies): update to Angular `18.2.2` + - see also: vulnerability [Webpack AutoPublicPathRuntimeModule has a DOM Clobbering Gadget that leads to XSS](https://github.com/advisories/GHSA-4vvj-4cpr-p986) + +--- + #### `5.2.16` - refactor(footer): input signals, host bindings @@ -10,7 +19,7 @@ - chore(dependencies): update `typescript-eslint` to `~8.3.0` - chore(dependencies): update `tslib` to `^2.7.0` - chore(dependencies): update `micromatch` to `4.0.8` - - see vulnerability [Regular Expression Denial of Service (ReDoS) in micromatch](https://github.com/advisories/GHSA-952p-6rrq-rcjv) + - see also: vulnerability [Regular Expression Denial of Service (ReDoS) in micromatch](https://github.com/advisories/GHSA-952p-6rrq-rcjv) --- diff --git a/package-lock.json b/package-lock.json index 23b72863..daba6153 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,24 +1,24 @@ { "name": "coreui-angular-dev", - "version": "5.2.16", + "version": "5.2.17", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "coreui-angular-dev", - "version": "5.2.16", - "license": "MIT", - "dependencies": { - "@angular/animations": "^18.2.1", - "@angular/cdk": "^18.2.1", - "@angular/common": "^18.2.1", - "@angular/compiler": "^18.2.1", - "@angular/core": "^18.2.1", - "@angular/forms": "^18.2.1", - "@angular/localize": "^18.2.1", - "@angular/platform-browser": "^18.2.1", - "@angular/platform-browser-dynamic": "^18.2.1", - "@angular/router": "^18.2.1", + "version": "5.2.17", + "license": "MIT", + "dependencies": { + "@angular/animations": "^18.2.2", + "@angular/cdk": "^18.2.2", + "@angular/common": "^18.2.2", + "@angular/compiler": "^18.2.2", + "@angular/core": "^18.2.2", + "@angular/forms": "^18.2.2", + "@angular/localize": "^18.2.2", + "@angular/platform-browser": "^18.2.2", + "@angular/platform-browser-dynamic": "^18.2.2", + "@angular/router": "^18.2.2", "@coreui/chartjs": "^4.0.0", "@coreui/icons": "^3.0.1", "@popperjs/core": "~2.11.8", @@ -29,11 +29,11 @@ "zone.js": "~0.14.10" }, "devDependencies": { - "@angular-devkit/build-angular": "^18.2.1", - "@angular-devkit/schematics": "^18.2.1", - "@angular/cli": "^18.2.1", - "@angular/compiler-cli": "^18.2.1", - "@angular/language-service": "^18.2.1", + "@angular-devkit/build-angular": "^18.2.2", + "@angular-devkit/schematics": "^18.2.2", + "@angular/cli": "^18.2.2", + "@angular/compiler-cli": "^18.2.2", + "@angular/language-service": "^18.2.2", "@types/jasmine": "^5.1.4", "@types/lodash-es": "^4.17.12", "@types/node": "^20.16.1", @@ -70,13 +70,13 @@ } }, "node_modules/@angular-devkit/architect": { - "version": "0.1802.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1802.1.tgz", - "integrity": "sha512-XTnJfCBMDQl3xF4w/eNrq821gbj2Ig1cqbzpRflhz4pqrANTAfHfPoIC7piWEZ60FNlHapzb6fvh6tJUGXG9og==", + "version": "0.1802.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1802.2.tgz", + "integrity": "sha512-LPRl9jhcf0NgshaL6RoUy1uL/cAyNt7oxctoZ9EHUu8eh5E9W/jZGhVowjOLpirwqYhmEzKJJIeS49Ssqs3RQg==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "18.2.1", + "@angular-devkit/core": "18.2.2", "rxjs": "7.8.1" }, "engines": { @@ -86,17 +86,17 @@ } }, "node_modules/@angular-devkit/build-angular": { - "version": "18.2.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-18.2.1.tgz", - "integrity": "sha512-ANsTWKjIlEvJ6s276TbwnDhkoHhQDfsNiRFUDRGBZu94UNR78ImQZSyKYGHJOeQQH6jpBtraA1rvW5WKozAtlw==", + "version": "18.2.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-18.2.2.tgz", + "integrity": "sha512-7HEnTN2T1jnjuItXKcApOsoYGgfou4+POju3ZbwIQukDZ3B2COskvQkVTxqPNrQ0ZjT2mxZYoVlmGW9M+7N25g==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.1802.1", - "@angular-devkit/build-webpack": "0.1802.1", - "@angular-devkit/core": "18.2.1", - "@angular/build": "18.2.1", + "@angular-devkit/architect": "0.1802.2", + "@angular-devkit/build-webpack": "0.1802.2", + "@angular-devkit/core": "18.2.2", + "@angular/build": "18.2.2", "@babel/core": "7.25.2", "@babel/generator": "7.25.0", "@babel/helper-annotate-as-pure": "7.24.7", @@ -107,7 +107,7 @@ "@babel/preset-env": "7.25.3", "@babel/runtime": "7.25.0", "@discoveryjs/json-ext": "0.6.1", - "@ngtools/webpack": "18.2.1", + "@ngtools/webpack": "18.2.2", "@vitejs/plugin-basic-ssl": "1.1.0", "ansi-colors": "4.1.3", "autoprefixer": "10.4.20", @@ -149,7 +149,7 @@ "tslib": "2.6.3", "vite": "5.4.0", "watchpack": "2.4.1", - "webpack": "5.93.0", + "webpack": "5.94.0", "webpack-dev-middleware": "7.3.0", "webpack-dev-server": "5.0.4", "webpack-merge": "6.0.1", @@ -222,13 +222,13 @@ "license": "0BSD" }, "node_modules/@angular-devkit/build-webpack": { - "version": "0.1802.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1802.1.tgz", - "integrity": "sha512-xOP9Hxkj/mWYdMTa/8uNxFTv7z+3UiGdt4VAO7vetV5qkU/S9rRq8FEKviCc2llXfwkhInSgeeHpWKdATa+YIQ==", + "version": "0.1802.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1802.2.tgz", + "integrity": "sha512-Pj+YmKh0nJOKl6QAsqYh3SqfuVJrFqjyp5WrG9BgfsMD9GCMD+5teMHNYJlp+vG/C8e7VdZp4rqOon8K9Xn4Mw==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/architect": "0.1802.1", + "@angular-devkit/architect": "0.1802.2", "rxjs": "7.8.1" }, "engines": { @@ -242,9 +242,9 @@ } }, "node_modules/@angular-devkit/core": { - "version": "18.2.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.2.1.tgz", - "integrity": "sha512-fSuGj6CxiTFR+yjuVcaWqaVb5Wts39CSBYRO1BlsOlbuWFZ2NKC/BAb5bdxpB31heCBJi7e3XbPvcMMJIcnKlA==", + "version": "18.2.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.2.2.tgz", + "integrity": "sha512-Zz0tGptI/QQnUBDdp+1G5wGwQWMjpfe2oO+UohkrDVgFS71yVj4VDnOy51kMTxBvzw+36evTgthPpmzqPIfxBw==", "dev": true, "license": "MIT", "dependencies": { @@ -270,13 +270,13 @@ } }, "node_modules/@angular-devkit/schematics": { - "version": "18.2.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-18.2.1.tgz", - "integrity": "sha512-2t/q0Jcv7yqhAzEdNgsxoGSCmPgD4qfnVOJ7EJw3LNIA+kX1CmtN4FESUS0i49kN4AyNJFAI5O2pV8iJiliKaw==", + "version": "18.2.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-18.2.2.tgz", + "integrity": "sha512-PU6+3nX+gQ3gofR7BGwXuvNUNeeV2raURaZjlPfGpBqjyTBxukMV71QsTTWptAZT4WibCWkTFp6X1gvsOGbjMg==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "18.2.1", + "@angular-devkit/core": "18.2.2", "jsonc-parser": "3.3.1", "magic-string": "0.30.11", "ora": "5.4.1", @@ -389,9 +389,9 @@ } }, "node_modules/@angular/animations": { - "version": "18.2.1", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-18.2.1.tgz", - "integrity": "sha512-jit452yuE6DMVV09E6RAjgapgw64mMVH31ccpPvMDekzPsTuP3KNKtgRFU/k2DFhYJvyczM1AqqlgccE/JGaRw==", + "version": "18.2.2", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-18.2.2.tgz", + "integrity": "sha512-jh/dGrY77HGm54HdTiQsxmvoRfFeJgHeWAK2+nWCPoc4b7OHcWxy/04cYffs0/27ThmABmppP7ERAyZ0f60uow==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -400,18 +400,18 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/core": "18.2.1" + "@angular/core": "18.2.2" } }, "node_modules/@angular/build": { - "version": "18.2.1", - "resolved": "https://registry.npmjs.org/@angular/build/-/build-18.2.1.tgz", - "integrity": "sha512-HwzjB+I31cAtjTTbbS2NbayzfcWthaKaofJlSmZIst3PN+GwLZ8DU0DRpd/xu5AXkk+DoAIWd+lzUIaqngz6ow==", + "version": "18.2.2", + "resolved": "https://registry.npmjs.org/@angular/build/-/build-18.2.2.tgz", + "integrity": "sha512-okaDdTMXnDhvnnnih6rPQnexL6htfEAPr19bB1Ci9d31gEjVuKZCjlcw2sPZ6BUyilwC9nZlCI5vbH1Ljf6mzA==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.1802.1", + "@angular-devkit/architect": "0.1802.2", "@babel/core": "7.25.2", "@babel/helper-annotate-as-pure": "7.24.7", "@babel/helper-split-export-declaration": "7.24.7", @@ -473,9 +473,9 @@ } }, "node_modules/@angular/cdk": { - "version": "18.2.1", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-18.2.1.tgz", - "integrity": "sha512-6y4MmpEPXze6igUHkLsBUPkxw32F8+rmW0xVXZchkSyGlFgqfh53ueXoryWb0qL4s5enkNY6AzXnKAqHfPNkVQ==", + "version": "18.2.2", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-18.2.2.tgz", + "integrity": "sha512-+u7ZcMA24WO03vDzlBJJWq+okZLFDeW9JrtHzrdiT09FDt4sdUp+7PddXaZcRHIXjJL+CaCLQ6slaqPNEufqgg==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -490,18 +490,18 @@ } }, "node_modules/@angular/cli": { - "version": "18.2.1", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-18.2.1.tgz", - "integrity": "sha512-SomUFDHanY4o7k3XBGf1eFt4z1h05IGJHfcbl2vxoc0lY59VN13m/pZsD2AtpqtJTzLQT02XQOUP4rmBbGoQ+Q==", + "version": "18.2.2", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-18.2.2.tgz", + "integrity": "sha512-HVVaMxnbID0q+V3KE+JqzGbPHcBUFo1RKhBZ/jxY7USZNzgtyYbRc0IYqPWNdr99UT5QefTJrjVazJo1nqQZvQ==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/architect": "0.1802.1", - "@angular-devkit/core": "18.2.1", - "@angular-devkit/schematics": "18.2.1", + "@angular-devkit/architect": "0.1802.2", + "@angular-devkit/core": "18.2.2", + "@angular-devkit/schematics": "18.2.2", "@inquirer/prompts": "5.3.8", "@listr2/prompt-adapter-inquirer": "2.0.15", - "@schematics/angular": "18.2.1", + "@schematics/angular": "18.2.2", "@yarnpkg/lockfile": "1.1.0", "ini": "4.1.3", "jsonc-parser": "3.3.1", @@ -524,9 +524,9 @@ } }, "node_modules/@angular/common": { - "version": "18.2.1", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-18.2.1.tgz", - "integrity": "sha512-N0ZJO1/iU9UhprplZRPvBcdRgA/i6l6Ng5gXs5ymHBJ0lxsB+mDVCmC4jISjR9gAWc426xXwLaOpuP5Gv3f/yg==", + "version": "18.2.2", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-18.2.2.tgz", + "integrity": "sha512-AQe4xnnNNch/sXRnV82C8FmhijxPATKfPGojC2qbAG2o6VkWKgt5Lbj0O8WxvSIOS5Syedv+O2kLY/JMGWHNtw==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -535,14 +535,14 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/core": "18.2.1", + "@angular/core": "18.2.2", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/compiler": { - "version": "18.2.1", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-18.2.1.tgz", - "integrity": "sha512-5e9ygKEcsBoV6xpaGKVrtsLxLETlrM0oB7twl4qG/xuKYqCLj8cRQMcAKSqDfTPzWMOAQc7pHdk+uFVo/8dWHA==", + "version": "18.2.2", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-18.2.2.tgz", + "integrity": "sha512-gmVNCXZiv/CIk2eKRLnH19N9VsPuE2s3Oxm0MNi003zk1cLy7D4YEm4fSrjKXtPY8MMpRXiu5f63W94hLwWEVw==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -551,7 +551,7 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/core": "18.2.1" + "@angular/core": "18.2.2" }, "peerDependenciesMeta": { "@angular/core": { @@ -560,9 +560,9 @@ } }, "node_modules/@angular/compiler-cli": { - "version": "18.2.1", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-18.2.1.tgz", - "integrity": "sha512-D+Qba0r6RfHfffzrebGYp54h05AxpkagLjit/GczKNgWSP1gIgZxSfi88D+GvFmeWvZxWN1ecAQ+yqft9hJqWg==", + "version": "18.2.2", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-18.2.2.tgz", + "integrity": "sha512-fF7lDrTA12YGqVjF4LyMi4hm58cv9G6CWmzSlvun0nMYCwrbRNnakZsj19dOfiIqqu4MwHaF4w3PTmUSxkMuiw==", "license": "MIT", "dependencies": { "@babel/core": "7.25.2", @@ -583,14 +583,14 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/compiler": "18.2.1", + "@angular/compiler": "18.2.2", "typescript": ">=5.4 <5.6" } }, "node_modules/@angular/core": { - "version": "18.2.1", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-18.2.1.tgz", - "integrity": "sha512-9KrSpJ65UlJZNXrE18NszcfOwb5LZgG+LYi5Doe7amt218R1bzb3trvuAm0ZzMaoKh4ugtUCkzEOd4FALPEX6w==", + "version": "18.2.2", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-18.2.2.tgz", + "integrity": "sha512-Rx6XajL0Ydj9hXUSPDvL2Q/kMzWtbiE3VxZFJnkE+fLQiWvr0GncB+NTb/nQ6QlPQ0ly60DvuI3KLcGDuFtGVA==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -604,9 +604,9 @@ } }, "node_modules/@angular/forms": { - "version": "18.2.1", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-18.2.1.tgz", - "integrity": "sha512-T7z8KUuj2PoPxrMrAruQVJha+x4a9Y6IrKYtArgOQQlTwCEJuqpVYuOk5l3fwWpHE9bVEjvgkAMI1D5YXA/U6w==", + "version": "18.2.2", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-18.2.2.tgz", + "integrity": "sha512-K8cv0w6o7+ocQfUrdSA3XaKrYfa1+2TlmtyxPHjEd2mCu2R+Yqo5RqJ3P8keFewJ1+bSLhz6xnn6mumwl0RnUQ==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -615,16 +615,16 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/common": "18.2.1", - "@angular/core": "18.2.1", - "@angular/platform-browser": "18.2.1", + "@angular/common": "18.2.2", + "@angular/core": "18.2.2", + "@angular/platform-browser": "18.2.2", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/language-service": { - "version": "18.2.1", - "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-18.2.1.tgz", - "integrity": "sha512-JI4oox9ELNdDVg0uJqCwgyFoK4XrowV14wSoNpGhpTLModRg3eDS6q+8cKn27cjTQRZvpReyYSTfiZMB8j4eqQ==", + "version": "18.2.2", + "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-18.2.2.tgz", + "integrity": "sha512-aROQNQeLf+o+F5OVvE/9BUe/Tpv8pjzmrZlogBbic5cb4IqSNhR4RjxbgIyXBO/6bhLCZwqfmMqRbW2J2xqMkg==", "dev": true, "license": "MIT", "engines": { @@ -632,9 +632,9 @@ } }, "node_modules/@angular/localize": { - "version": "18.2.1", - "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-18.2.1.tgz", - "integrity": "sha512-nNdB6ehXCSBpQ75sTh6Gcwy2rgExfZEkGcPARJLpjqQlHO+Mk3b1y3ka6XT9M2qQYUeyukncTFUMEZWwHICsOA==", + "version": "18.2.2", + "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-18.2.2.tgz", + "integrity": "sha512-grWQ3CVbizOWCthGpyIlNNnZCpF/xpWYa6tIsPzKOXLCyqFQ7vOEtSludNN1nsUmMlZQt76+wA17Fx0qcNx0EA==", "license": "MIT", "dependencies": { "@babel/core": "7.25.2", @@ -651,14 +651,14 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/compiler": "18.2.1", - "@angular/compiler-cli": "18.2.1" + "@angular/compiler": "18.2.2", + "@angular/compiler-cli": "18.2.2" } }, "node_modules/@angular/platform-browser": { - "version": "18.2.1", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-18.2.1.tgz", - "integrity": "sha512-hQABX7QotGmCIR3EhCBCDh5ZTvQao+JkuK5CCw2G1PkRfJMBwEpjNqnyhz41hZhWiGlucp9jgbeypppW+mIQEw==", + "version": "18.2.2", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-18.2.2.tgz", + "integrity": "sha512-Bfvl8elCFxyJ9vlwamr4X5sVMcp/tSwBal2coyl0WR+/PH2PAAtf+/WMYxIN90yZmPiJx6RZWUSJRlHOFiFp3A==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -667,9 +667,9 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/animations": "18.2.1", - "@angular/common": "18.2.1", - "@angular/core": "18.2.1" + "@angular/animations": "18.2.2", + "@angular/common": "18.2.2", + "@angular/core": "18.2.2" }, "peerDependenciesMeta": { "@angular/animations": { @@ -678,9 +678,9 @@ } }, "node_modules/@angular/platform-browser-dynamic": { - "version": "18.2.1", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-18.2.1.tgz", - "integrity": "sha512-tYJHtshbaKrtnRA15k3vrveSVBqkVUGhINvGugFA2vMtdTOfhfPw+hhzYrcwJibgU49rHogCfI9mkIbpNRYntA==", + "version": "18.2.2", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-18.2.2.tgz", + "integrity": "sha512-UM/+1nY4iIj1v4lxAmV3XRHPAh/4qfNKScCLq8tJGot64rPCbtCl0Rl8rFFGqxAFvTErVDaJycUgWNZSfVl/hw==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -689,16 +689,16 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/common": "18.2.1", - "@angular/compiler": "18.2.1", - "@angular/core": "18.2.1", - "@angular/platform-browser": "18.2.1" + "@angular/common": "18.2.2", + "@angular/compiler": "18.2.2", + "@angular/core": "18.2.2", + "@angular/platform-browser": "18.2.2" } }, "node_modules/@angular/router": { - "version": "18.2.1", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-18.2.1.tgz", - "integrity": "sha512-gVyqW6fYnG7oq1DlZSXJMQ2Py2dJQB7g6XVtRcYB1gR4aeowx5N9ws7PjqAi0ih91ASq2MmP4OlSSWLq+eaMGg==", + "version": "18.2.2", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-18.2.2.tgz", + "integrity": "sha512-tBHwuNtZNjzYAoVdveTI1ke/ZnQjKhc7gqDk9HCH2JUpdQhGbTvCKwDM51ktJpPMPcZlA263lQyy7VIyvdtK0A==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -707,9 +707,9 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/common": "18.2.1", - "@angular/core": "18.2.1", - "@angular/platform-browser": "18.2.1", + "@angular/common": "18.2.2", + "@angular/core": "18.2.2", + "@angular/platform-browser": "18.2.2", "rxjs": "^6.5.3 || ^7.4.0" } }, @@ -3888,9 +3888,9 @@ ] }, "node_modules/@ngtools/webpack": { - "version": "18.2.1", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-18.2.1.tgz", - "integrity": "sha512-v86U3jOoy5R9ZWe9Q0LbHRx/IBw1lbn0ldBU+gIIepREyVvb9CcH/vAyIb2Fw1zaYvvfG1OyzdrHyW8iGXjdnQ==", + "version": "18.2.2", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-18.2.2.tgz", + "integrity": "sha512-YhADmc+lVjLt3kze07A+yLry2yzcghdclu+7D3EDfa6fG2Pk33HK3MY2I0Z0BO+Ivoq7cV7yxm+naR+Od0Y5ng==", "dev": true, "license": "MIT", "engines": { @@ -4539,14 +4539,14 @@ } }, "node_modules/@schematics/angular": { - "version": "18.2.1", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-18.2.1.tgz", - "integrity": "sha512-bBV7I+MCbdQmBPUFF4ECg37VReM0+AdQsxgwkjBBSYExmkErkDoDgKquwL/tH7stDCc5IfTd0g9BMeosRgDMug==", + "version": "18.2.2", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-18.2.2.tgz", + "integrity": "sha512-0uPA1kQ38RnbNrzMlveX/QAqQIDu2INl5IYd3EUbJZRfYSp1VVyOSyuIBJ+1iUl5Y5VUa2uylaVZXhFdKWprXw==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "18.2.1", - "@angular-devkit/schematics": "18.2.1", + "@angular-devkit/core": "18.2.2", + "@angular-devkit/schematics": "18.2.2", "jsonc-parser": "3.3.1" }, "engines": { @@ -4779,28 +4779,6 @@ "@types/node": "*" } }, - "node_modules/@types/eslint": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.0.tgz", - "integrity": "sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, "node_modules/@types/estree": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", @@ -15578,13 +15556,12 @@ "license": "MIT" }, "node_modules/webpack": { - "version": "5.93.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.93.0.tgz", - "integrity": "sha512-Y0m5oEY1LRuwly578VqluorkXbvXKh7U3rLoQCEO04M97ScRr44afGVkI0FQFsXzysk5OgFAxjZAb9rsGQVihA==", + "version": "5.94.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz", + "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==", "dev": true, "license": "MIT", "dependencies": { - "@types/eslint-scope": "^3.7.3", "@types/estree": "^1.0.5", "@webassemblyjs/ast": "^1.12.1", "@webassemblyjs/wasm-edit": "^1.12.1", @@ -15593,7 +15570,7 @@ "acorn-import-attributes": "^1.9.5", "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.0", + "enhanced-resolve": "^5.17.1", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", diff --git a/package.json b/package.json index c2734ed5..d92336fa 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "coreui-angular-dev", - "version": "5.2.16", + "version": "5.2.17", "description": "CoreUI Components Library for Angular", "copyright": "Copyright 2024 creativeLabs Łukasz Holeczek", "license": "MIT", @@ -39,16 +39,16 @@ }, "private": true, "dependencies": { - "@angular/animations": "^18.2.1", - "@angular/cdk": "^18.2.1", - "@angular/common": "^18.2.1", - "@angular/compiler": "^18.2.1", - "@angular/core": "^18.2.1", - "@angular/forms": "^18.2.1", - "@angular/localize": "^18.2.1", - "@angular/platform-browser": "^18.2.1", - "@angular/platform-browser-dynamic": "^18.2.1", - "@angular/router": "^18.2.1", + "@angular/animations": "^18.2.2", + "@angular/cdk": "^18.2.2", + "@angular/common": "^18.2.2", + "@angular/compiler": "^18.2.2", + "@angular/core": "^18.2.2", + "@angular/forms": "^18.2.2", + "@angular/localize": "^18.2.2", + "@angular/platform-browser": "^18.2.2", + "@angular/platform-browser-dynamic": "^18.2.2", + "@angular/router": "^18.2.2", "@coreui/chartjs": "^4.0.0", "@coreui/icons": "^3.0.1", "@popperjs/core": "~2.11.8", @@ -59,11 +59,11 @@ "zone.js": "~0.14.10" }, "devDependencies": { - "@angular-devkit/build-angular": "^18.2.1", - "@angular-devkit/schematics": "^18.2.1", - "@angular/cli": "^18.2.1", - "@angular/compiler-cli": "^18.2.1", - "@angular/language-service": "^18.2.1", + "@angular-devkit/build-angular": "^18.2.2", + "@angular-devkit/schematics": "^18.2.2", + "@angular/cli": "^18.2.2", + "@angular/compiler-cli": "^18.2.2", + "@angular/language-service": "^18.2.2", "@types/jasmine": "^5.1.4", "@types/lodash-es": "^4.17.12", "@types/node": "^20.16.1", diff --git a/projects/coreui-angular-chartjs/package.json b/projects/coreui-angular-chartjs/package.json index e81c99b9..2cbb9d67 100644 --- a/projects/coreui-angular-chartjs/package.json +++ b/projects/coreui-angular-chartjs/package.json @@ -1,6 +1,6 @@ { "name": "@coreui/angular-chartjs", - "version": "5.2.16", + "version": "5.2.17", "description": "Angular wrapper component for Chart.js", "copyright": "Copyright 2024 creativeLabs Łukasz Holeczek", "license": "MIT", diff --git a/projects/coreui-angular/package.json b/projects/coreui-angular/package.json index 2eaa3f55..99d237c6 100644 --- a/projects/coreui-angular/package.json +++ b/projects/coreui-angular/package.json @@ -1,6 +1,6 @@ { "name": "@coreui/angular", - "version": "5.2.16", + "version": "5.2.17", "description": "CoreUI Components Library for Angular", "copyright": "Copyright 2024 creativeLabs Łukasz Holeczek", "license": "MIT", @@ -29,7 +29,7 @@ "@angular/core": "^18.2.0", "@angular/router": "^18.2.0", "@coreui/coreui": "^5.1.2", - "@coreui/icons-angular": "~5.2.16", + "@coreui/icons-angular": "~5.2.17", "rxjs": "^7.8.1" }, "repository": { diff --git a/projects/coreui-angular/src/lib/button-group/button-group/button-group.component.ts b/projects/coreui-angular/src/lib/button-group/button-group/button-group.component.ts index ada0f52e..951b7684 100644 --- a/projects/coreui-angular/src/lib/button-group/button-group/button-group.component.ts +++ b/projects/coreui-angular/src/lib/button-group/button-group/button-group.component.ts @@ -11,22 +11,22 @@ export class ButtonGroupComponent { * Size the component small or large. * @type { 'sm' | 'lg' } */ - size: InputSignal<'sm' | 'lg' | undefined> = input(); + readonly size: InputSignal<'sm' | 'lg' | undefined> = input(); /** * Create a set of buttons that appear vertically stacked rather than horizontally. Split button dropdowns are not supported here. * @type boolean */ - vertical: InputSignalWithTransform = input(false, { transform: booleanAttribute }); + readonly vertical: InputSignalWithTransform = input(false, { transform: booleanAttribute }); /** * Default role attr for ButtonGroup. [docs] * @type InputSignal * @default 'group' */ - role: InputSignal = input('group'); + readonly role: InputSignal = input('group'); - hostClasses = computed(() => { + readonly hostClasses = computed(() => { return { 'btn-group': !this.vertical(), 'btn-group-vertical': this.vertical(), diff --git a/projects/coreui-angular/src/lib/image/img.directive.spec.ts b/projects/coreui-angular/src/lib/image/img.directive.spec.ts index 3449eff7..73ff2214 100644 --- a/projects/coreui-angular/src/lib/image/img.directive.spec.ts +++ b/projects/coreui-angular/src/lib/image/img.directive.spec.ts @@ -1,8 +1,11 @@ +import { TestBed } from '@angular/core/testing'; import { ImgDirective } from './img.directive'; describe('ImgDirective', () => { it('should create an instance', () => { - const directive = new ImgDirective(); - expect(directive).toBeTruthy(); + TestBed.runInInjectionContext(() => { + const directive = new ImgDirective(); + expect(directive).toBeTruthy(); + }); }); }); diff --git a/projects/coreui-angular/src/lib/image/img.directive.ts b/projects/coreui-angular/src/lib/image/img.directive.ts index 3dd08115..2c135529 100644 --- a/projects/coreui-angular/src/lib/image/img.directive.ts +++ b/projects/coreui-angular/src/lib/image/img.directive.ts @@ -1,55 +1,56 @@ -import { booleanAttribute, Directive, HostBinding, Input } from '@angular/core'; +import { booleanAttribute, computed, Directive, input, InputSignal, InputSignalWithTransform } from '@angular/core'; @Directive({ selector: '[cImg]', - standalone: true + standalone: true, + host: { + '[class]': 'hostClasses()', + '[style]': 'hostStyles()' + } }) export class ImgDirective { - /** * Set the horizontal aligment. * @type {'' | 'start' | 'end' | 'center'} */ - @Input() align: '' | 'start' | 'end' | 'center' = ''; + readonly align: InputSignal<'' | 'start' | 'end' | 'center'> = input<'' | 'start' | 'end' | 'center'>(''); /** * Make image responsive. * @type boolean */ - @Input({ transform: booleanAttribute }) fluid: string | boolean = false; + readonly fluid: InputSignalWithTransform = input(false, { transform: booleanAttribute }); /** * Make image rounded. * @type boolean */ - @Input({ transform: booleanAttribute }) rounded: string | boolean = false; + readonly rounded: InputSignalWithTransform = input(false, { transform: booleanAttribute }); /** * Give an image a rounded 1px border appearance. * @type boolean */ - @Input({ transform: booleanAttribute }) thumbnail: string | boolean = false; + readonly thumbnail: InputSignalWithTransform = input(false, { transform: booleanAttribute }); /** * Color for image placeholder. */ - @Input() placeholderColor = 'transparent'; + readonly placeholderColor = input('transparent'); - @HostBinding('style') - get getStyles(): any { - return { backgroundColor: this.placeholderColor }; - } + readonly hostStyles = computed(() => { + return { backgroundColor: this.placeholderColor() }; + }); - @HostBinding('class') - get hostClasses(): any { - const align = this.align; + readonly hostClasses = computed(() => { + const align = this.align(); return { [`float-${align}`]: align === 'start' || align === 'end', 'd-block': align === 'center', 'mx-auto': align === 'center', - 'img-fluid': this.fluid, - 'rounded': this.rounded, - 'img-thumbnail': this.thumbnail - }; - } + 'img-fluid': this.fluid(), + rounded: this.rounded(), + 'img-thumbnail': this.thumbnail() + } as Record; + }); } diff --git a/projects/coreui-angular/src/lib/list-group/list-group-item.directive.spec.ts b/projects/coreui-angular/src/lib/list-group/list-group-item.directive.spec.ts index eeea917a..29fc2b66 100644 --- a/projects/coreui-angular/src/lib/list-group/list-group-item.directive.spec.ts +++ b/projects/coreui-angular/src/lib/list-group/list-group-item.directive.spec.ts @@ -1,7 +1,6 @@ -import { Component, DebugElement, ElementRef } from '@angular/core'; +import { Component, ElementRef } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { ListGroupItemDirective } from './list-group-item.directive'; -import { By } from '@angular/platform-browser'; class MockElementRef extends ElementRef {} @@ -11,10 +10,8 @@ class MockElementRef extends ElementRef {} class TestComponent {} describe('ListGroupItemDirective', () => { - let component: TestComponent; let fixture: ComponentFixture; - let liEl: DebugElement; beforeEach(() => { TestBed.configureTestingModule({ @@ -24,13 +21,14 @@ describe('ListGroupItemDirective', () => { }); fixture = TestBed.createComponent(TestComponent); component = fixture.componentInstance; - liEl = fixture.debugElement.query(By.css('li')); fixture.detectChanges(); // initial binding }); it('should create an instance', () => { - const directive = new ListGroupItemDirective(liEl); - expect(directive).toBeTruthy(); + TestBed.runInInjectionContext(() => { + const directive = new ListGroupItemDirective(); + expect(directive).toBeTruthy(); + }); }); }); diff --git a/projects/coreui-angular/src/lib/list-group/list-group-item.directive.ts b/projects/coreui-angular/src/lib/list-group/list-group-item.directive.ts index 395dd24c..a730af51 100644 --- a/projects/coreui-angular/src/lib/list-group/list-group-item.directive.ts +++ b/projects/coreui-angular/src/lib/list-group/list-group-item.directive.ts @@ -1,64 +1,74 @@ -import { booleanAttribute, Directive, ElementRef, HostBinding, Input } from '@angular/core'; +import { + booleanAttribute, + computed, + Directive, + ElementRef, + inject, + input, + InputSignal, + InputSignalWithTransform +} from '@angular/core'; import { Colors } from '../coreui.types'; @Directive({ selector: '[cListGroupItem], c-list-group-item', exportAs: 'cListGroupItem', - standalone: true + standalone: true, + host: { + '[class]': 'hostClasses()', + '[attr.aria-disabled]': 'ariaDisabled()', + '[attr.aria-current]': 'ariaCurrent()', + '[attr.disabled]': 'attrDisabled()', + '[attr.tabindex]': 'tabIndex()' + } }) export class ListGroupItemDirective { - - constructor( - private hostElement: ElementRef - ) { } + readonly hostElement = inject(ElementRef); /** * Toggle the active state for the component. - * @type boolean + * @type InputSignal */ - @Input() active?: boolean; + readonly active: InputSignal = input(); /** * Sets the color context of the component to one of CoreUI’s themed colors. - * @type Colors + * @type InputSignal */ - @Input() color?: Colors; + readonly color: InputSignal = input(); /** * Set disabled attr for the host element. [docs] * @type boolean */ - @Input({ transform: booleanAttribute }) disabled: string | boolean = false; - - @HostBinding('attr.aria-disabled') - get isDisabled(): boolean | null { - return this.disabled || null; - } - - @HostBinding('attr.disabled') - get attrDisabled() { - return this.disabled ? '' : null; - }; - - @HostBinding('attr.tabindex') - get getTabindex(): string | null { - return this.disabled ? '-1' : null; - } + readonly disabled: InputSignalWithTransform = input(false, { transform: booleanAttribute }); - @HostBinding('attr.aria-current') get ariaCurrent(): boolean { - return !!this.active; - } - - @HostBinding('class') - get hostClasses(): any { + readonly hostClasses = computed(() => { const host: HTMLElement = this.hostElement.nativeElement; return { 'list-group-item': true, 'list-group-item-action': host.nodeName === 'A' || host.nodeName === 'BUTTON', - active: !!this.active, - disabled: this.isDisabled, - [`list-group-item-${this.color}`]: !!this.color + active: !!this.active(), + disabled: this._disabled(), + [`list-group-item-${this.color()}`]: !!this.color() }; - } + }); + + readonly _disabled = computed(() => this.disabled()); + + readonly ariaDisabled = computed(() => { + return this._disabled() ? true : null; + }); + + readonly attrDisabled = computed(() => { + return this._disabled() ? '' : null; + }); + + readonly tabIndex = computed(() => { + return this._disabled() ? '-1' : null; + }); + readonly ariaCurrent = computed(() => { + return this.active() || null; + }); } diff --git a/projects/coreui-angular/src/lib/list-group/list-group.directive.spec.ts b/projects/coreui-angular/src/lib/list-group/list-group.directive.spec.ts index 82663dca..f8e6246e 100644 --- a/projects/coreui-angular/src/lib/list-group/list-group.directive.spec.ts +++ b/projects/coreui-angular/src/lib/list-group/list-group.directive.spec.ts @@ -1,8 +1,11 @@ +import { TestBed } from '@angular/core/testing'; import { ListGroupDirective } from './list-group.directive'; describe('ListGroupDirective', () => { it('should create an instance', () => { - const directive = new ListGroupDirective(); - expect(directive).toBeTruthy(); + TestBed.runInInjectionContext(() => { + const directive = new ListGroupDirective(); + expect(directive).toBeTruthy(); + }); }); }); diff --git a/projects/coreui-angular/src/lib/list-group/list-group.directive.ts b/projects/coreui-angular/src/lib/list-group/list-group.directive.ts index 9f039c6f..afc567ff 100644 --- a/projects/coreui-angular/src/lib/list-group/list-group.directive.ts +++ b/projects/coreui-angular/src/lib/list-group/list-group.directive.ts @@ -1,30 +1,33 @@ -import { booleanAttribute, Directive, HostBinding, Input } from '@angular/core'; +import { booleanAttribute, computed, Directive, input, InputSignalWithTransform } from '@angular/core'; import { Sizes } from '../coreui.types'; @Directive({ selector: '[cListGroup]', standalone: true, - host: { class: 'list-group' } + host: { + class: 'list-group', + '[class]': 'hostClasses()' + } }) export class ListGroupDirective { /** * Remove some borders and rounded corners to render list group items edge-to-edge in a parent component (e.g., ``). * @type boolean */ - @Input({ transform: booleanAttribute }) flush: string | boolean = false; + readonly flush: InputSignalWithTransform = input(false, { transform: booleanAttribute }); /** * Specify horizontal layout type. */ - @Input() horizontal?: boolean | Sizes; + readonly horizontal = input(); - @HostBinding('class') - get hostClasses(): any { + readonly hostClasses = computed(() => { + const horizontal = this.horizontal(); return { 'list-group': true, - 'list-group-horizontal': this.horizontal === true || this.horizontal === '', - [`list-group-horizontal-${this.horizontal}`]: !!this.horizontal && typeof this.horizontal !== 'boolean', - 'list-group-flush': this.flush - }; - } + 'list-group-horizontal': horizontal === true || horizontal === '', + [`list-group-horizontal-${horizontal}`]: !!horizontal && typeof horizontal !== 'boolean', + 'list-group-flush': this.flush() + } as Record; + }); } diff --git a/projects/coreui-icons-angular/package.json b/projects/coreui-icons-angular/package.json index 95d9f643..8ce1426c 100644 --- a/projects/coreui-icons-angular/package.json +++ b/projects/coreui-icons-angular/package.json @@ -1,6 +1,6 @@ { "name": "@coreui/icons-angular", - "version": "5.2.16", + "version": "5.2.17", "description": "CoreUI Icons Angular component and service", "copyright": "Copyright 2024 creativeLabs Łukasz Holeczek", "license": "MIT",