diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
index a50842a62c3..eb5cc2855c1 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -13,10 +13,10 @@ name: "CodeQL"
on:
push:
- branches: [ master, 19.1.x, 18.2.x, 17.2.x, 16.1.x, 15.1.x ]
+ branches: [ master, 19.2.x, 18.2.x, 17.2.x, 16.1.x, 15.1.x ]
pull_request:
# The branches below must be a subset of the branches above
- branches: [ master, 19.1.x, 18.2.x, 17.2.x, 16.1.x, 15.1.x ]
+ branches: [ master, 19.2.x, 18.2.x, 17.2.x, 16.1.x, 15.1.x ]
schedule:
- cron: '33 4 * * 4'
diff --git a/README.md b/README.md
index 6007d3649a5..f3814bcd357 100644
--- a/README.md
+++ b/README.md
@@ -108,6 +108,7 @@ Some of the Angular chart types included are: [Polar chart](https://www.infragis
|stepper|:white_check_mark:|[Readme](https://github.com/IgniteUI/igniteui-angular/blob/master/projects/igniteui-angular/src/lib/stepper/README.md)|[Docs](https://www.infragistics.com/products/ignite-ui-angular/angular/components/stepper)|13.0.0|
|switch|:white_check_mark:|[Readme](https://github.com/IgniteUI/igniteui-angular/blob/master/projects/igniteui-angular/src/lib/switch/README.md)|[Docs](https://www.infragistics.com/products/ignite-ui-angular/angular/components/switch)|2.0.0|||||
|tabs|:white_check_mark:|[Readme](https://github.com/IgniteUI/igniteui-angular/blob/master/projects/igniteui-angular/src/lib/tabs/tabs/README.md)|[Docs](https://www.infragistics.com/products/ignite-ui-angular/angular/components/tabs)|5.1.0||||
+|tile manager|:white_check_mark:||[Docs](https://www.infragistics.com/products/ignite-ui-angular/angular/components/tile-manager)|19.2.0||||
|time picker|:white_check_mark:|[Readme](https://github.com/IgniteUI/igniteui-angular/blob/master/projects/igniteui-angular/src/lib/time-picker/README.md)|[Docs](https://www.infragistics.com/products/ignite-ui-angular/angular/components/time-picker)|5.3.0||||
|toast|:white_check_mark:|[Readme](https://github.com/IgniteUI/igniteui-angular/blob/master/projects/igniteui-angular/src/lib/toast/README.md)|[Docs](https://www.infragistics.com/products/ignite-ui-angular/angular/components/toast)|5.1.0||||
|tree|:white_check_mark:|[Readme](https://github.com/IgniteUI/igniteui-angular/blob/master/projects/igniteui-angular/src/lib/tree/README.md)|[Docs](https://www.infragistics.com/products/ignite-ui-angular/angular/components/tree)|12.0.0||||
@@ -162,6 +163,8 @@ Some of the Angular chart types included are: [Polar chart](https://www.infragis
|18.1.0|22-Jul-24|[Milestone #33](https://github.com/IgniteUI/igniteui-angular/blob/master/ROADMAP.md#milestone-33-due-by-jul-2024)|
|18.2.0|25-Oct-24|[Milestone #34](https://github.com/IgniteUI/igniteui-angular/blob/master/ROADMAP.md#milestone-34-version-182-released-oct-25th-2024)|
|19.0.0|25-Nov-24|[Milestone #35](https://github.com/IgniteUI/igniteui-angular/blob/master/ROADMAP.md#milestone-35-version-190-released-nov-25th-2024)|
+|19.1.0|27-Feb-25|[Milestone #36](https://github.com/IgniteUI/igniteui-angular/blob/master/ROADMAP.md#milestone-36--version-191-released-feb-27th-2025)|
+|19.2.0|16-Apr-25|[Milestone #37]()|
### Components available in [igniteui-angular-charts](https://www.npmjs.com/package/igniteui-angular-charts)
diff --git a/angular.json b/angular.json
index 2ea33070c81..6c621e0426a 100644
--- a/angular.json
+++ b/angular.json
@@ -191,6 +191,17 @@
"zone.js/testing",
"hammerjs"
],
+ "styles": [
+ "src/styles/styles.scss"
+ ],
+ "assets": [
+ "projects/igniteui-angular/src/assets"
+ ],
+ "stylePreprocessorOptions": {
+ "includePaths": [
+ "node_modules"
+ ]
+ },
"tsConfig": "projects/igniteui-angular/tsconfig.spec.json",
"karmaConfig": "projects/igniteui-angular/karma.conf.js"
}
diff --git a/package-lock.json b/package-lock.json
index f6d891967a7..e3e87ad7908 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,17 +9,17 @@
"version": "0.0.0",
"hasInstallScript": true,
"dependencies": {
- "@angular/animations": "^19.2.3",
- "@angular/common": "^19.2.3",
- "@angular/compiler": "^19.2.3",
- "@angular/core": "^19.2.3",
- "@angular/elements": "^19.2.3",
- "@angular/forms": "^19.2.3",
- "@angular/platform-browser": "^19.2.3",
- "@angular/platform-browser-dynamic": "^19.2.3",
- "@angular/platform-server": "^19.2.3",
- "@angular/router": "^19.2.3",
- "@angular/ssr": "^19.2.4",
+ "@angular/animations": "^19.2.5",
+ "@angular/common": "^19.2.5",
+ "@angular/compiler": "^19.2.5",
+ "@angular/core": "^19.2.5",
+ "@angular/elements": "^19.2.5",
+ "@angular/forms": "^19.2.5",
+ "@angular/platform-browser": "^19.2.5",
+ "@angular/platform-browser-dynamic": "^19.2.5",
+ "@angular/platform-server": "^19.2.5",
+ "@angular/router": "^19.2.5",
+ "@angular/ssr": "^19.2.6",
"@igniteui/material-icons-extended": "^3.1.0",
"@lit-labs/ssr-dom-shim": "^1.3.0",
"@types/source-map": "0.5.2",
@@ -33,16 +33,16 @@
"zone.js": "~0.15.0"
},
"devDependencies": {
- "@angular-devkit/build-angular": "^19.2.4",
- "@angular-devkit/schematics": "^19.2.4",
+ "@angular-devkit/build-angular": "^19.2.6",
+ "@angular-devkit/schematics": "^19.2.6",
"@angular-eslint/builder": "^19.3.0",
"@angular-eslint/eslint-plugin": "^19.3.0",
"@angular-eslint/eslint-plugin-template": "^19.3.0",
"@angular-eslint/schematics": "^19.3.0",
"@angular-eslint/template-parser": "^19.3.0",
- "@angular/cli": "^19.2.4",
- "@angular/compiler-cli": "^19.2.3",
- "@angular/language-service": "^19.2.3",
+ "@angular/cli": "^19.2.6",
+ "@angular/compiler-cli": "^19.2.5",
+ "@angular/language-service": "^19.2.5",
"@angularclass/hmr": "^3.0.0",
"@microsoft/signalr": "^7.0.12",
"@types/estree": "^1.0.0",
@@ -82,11 +82,11 @@
"karma-parallel": "^0.3.1",
"karma-spec-reporter": "^0.0.36",
"lit-html": "^3.2.1",
- "ng-packagr": "^19.2.0",
+ "ng-packagr": "^19.2.1",
"postcss": "^8.5.1",
"postcss-scss": "^4.0.6",
"prettier": "^3.3.3",
- "puppeteer": "^24.4.0",
+ "puppeteer": "^24.5.0",
"sass-embedded": "^1.83.4",
"sass-true": "^8.1.0",
"sassdoc": "^2.7.4",
@@ -122,13 +122,13 @@
}
},
"node_modules/@angular-devkit/architect": {
- "version": "0.1902.4",
- "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1902.4.tgz",
- "integrity": "sha512-YTLiJ7uVItZTAxRuSgASP0M5qILESWH8xGmfR+YWR1JiJem09DWEOpWeLdha1BFzUui5L+6j1btzh4FUHJOtAg==",
+ "version": "0.1902.6",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1902.6.tgz",
+ "integrity": "sha512-Dx6yPxpaE5AhP6UtrVRDCc9Ihq9B65LAbmIh3dNOyeehratuaQS0TYNKjbpaevevJojW840DTg80N+CrlfYp9g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@angular-devkit/core": "19.2.4",
+ "@angular-devkit/core": "19.2.6",
"rxjs": "7.8.1"
},
"engines": {
@@ -148,17 +148,17 @@
}
},
"node_modules/@angular-devkit/build-angular": {
- "version": "19.2.4",
- "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-19.2.4.tgz",
- "integrity": "sha512-OO8jlLY1SKUbcx3xx4LhbHcecAE9CnMrvIGMOgeKflDI7W57kYUI1lg86k/+Xm76/H2XlbsHdwLKOfFAupfl7g==",
+ "version": "19.2.6",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-19.2.6.tgz",
+ "integrity": "sha512-alYn3PSsiQML9PzU1VKbmYnIP2ULK/AqfjdeJFh8r6m8ZjUvX1zDy9TdAfC6fykQ2mGHyChteRckbx9uVOyhwQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@ampproject/remapping": "2.3.0",
- "@angular-devkit/architect": "0.1902.4",
- "@angular-devkit/build-webpack": "0.1902.4",
- "@angular-devkit/core": "19.2.4",
- "@angular/build": "19.2.4",
+ "@angular-devkit/architect": "0.1902.6",
+ "@angular-devkit/build-webpack": "0.1902.6",
+ "@angular-devkit/core": "19.2.6",
+ "@angular/build": "19.2.6",
"@babel/core": "7.26.10",
"@babel/generator": "7.26.10",
"@babel/helper-annotate-as-pure": "7.25.9",
@@ -169,7 +169,7 @@
"@babel/preset-env": "7.26.9",
"@babel/runtime": "7.26.10",
"@discoveryjs/json-ext": "0.6.3",
- "@ngtools/webpack": "19.2.4",
+ "@ngtools/webpack": "19.2.6",
"@vitejs/plugin-basic-ssl": "1.2.0",
"ansi-colors": "4.1.3",
"autoprefixer": "10.4.20",
@@ -223,7 +223,7 @@
"@angular/localize": "^19.0.0 || ^19.2.0-next.0",
"@angular/platform-server": "^19.0.0 || ^19.2.0-next.0",
"@angular/service-worker": "^19.0.0 || ^19.2.0-next.0",
- "@angular/ssr": "^19.2.4",
+ "@angular/ssr": "^19.2.6",
"@web/test-runner": "^0.20.0",
"browser-sync": "^3.0.2",
"jest": "^29.5.0",
@@ -361,13 +361,13 @@
}
},
"node_modules/@angular-devkit/build-webpack": {
- "version": "0.1902.4",
- "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1902.4.tgz",
- "integrity": "sha512-TWZsnPMR2JvrQapO7kg4YbUgrKxu74TCYOZZrGfIA7CCIthykflWevMPGZmrTAh3mXX414P31XmoBQViXUe7iQ==",
+ "version": "0.1902.6",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1902.6.tgz",
+ "integrity": "sha512-SZe2Nk39lJIJmtXWU+zhKaFy0xoU8N7387bvjhO0AoNQeRBaaJ5SrRLXX2jUzGUuVgGVF+plaVooKrmEOeM6ug==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@angular-devkit/architect": "0.1902.4",
+ "@angular-devkit/architect": "0.1902.6",
"rxjs": "7.8.1"
},
"engines": {
@@ -391,9 +391,9 @@
}
},
"node_modules/@angular-devkit/core": {
- "version": "19.2.4",
- "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-19.2.4.tgz",
- "integrity": "sha512-dL6AmCQsKh+CFVvO/jxX8qZpamVwt9r4iIo7fYcAI2+mTSDGxxBGWbS+onIfdPFuRp2HgKa+AT6WiHmRqu63AA==",
+ "version": "19.2.6",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-19.2.6.tgz",
+ "integrity": "sha512-WFgiYhrDMq83UNaGRAneIM7CYYdBozD+yYA9BjoU8AgBLKtrvn6S8ZcjKAk5heoHtY/u8pEb0mwDTz9gxFmJZQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -429,13 +429,13 @@
}
},
"node_modules/@angular-devkit/schematics": {
- "version": "19.2.4",
- "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-19.2.4.tgz",
- "integrity": "sha512-WaFe95ncm1A+QTlUHxQcFyGKIn67xgqGX7WCj8R0QlKOS0hLKx97SG4p19uwHlww0lmAcwk/QJP6G6sPL/CJ9w==",
+ "version": "19.2.6",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-19.2.6.tgz",
+ "integrity": "sha512-YTAxNnT++5eflx19OUHmOWu597/TbTel+QARiZCv1xQw99+X8DCKKOUXtqBRd53CAHlREDI33Rn/JLY3NYgMLQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@angular-devkit/core": "19.2.4",
+ "@angular-devkit/core": "19.2.6",
"jsonc-parser": "3.3.1",
"magic-string": "0.30.17",
"ora": "5.4.1",
@@ -571,9 +571,9 @@
}
},
"node_modules/@angular/animations": {
- "version": "19.2.3",
- "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-19.2.3.tgz",
- "integrity": "sha512-HQexOmwEJFX3sHLspOCi7dVOdPW5Ad4jH6tJsf+zABkF0GjgIVf4jewe1uE5ZLKgoflr9f9vpcpy39IWl00kWw==",
+ "version": "19.2.5",
+ "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-19.2.5.tgz",
+ "integrity": "sha512-m4RtY3z1JuHFCh6OrOHxo25oKEigBDdR/XmdCfXIwfTiObZzNA7VQhysgdrb9IISO99kXbjZUYKDtLzgWT8Klg==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
@@ -582,18 +582,19 @@
"node": "^18.19.1 || ^20.11.1 || >=22.0.0"
},
"peerDependencies": {
- "@angular/core": "19.2.3"
+ "@angular/common": "19.2.5",
+ "@angular/core": "19.2.5"
}
},
"node_modules/@angular/build": {
- "version": "19.2.4",
- "resolved": "https://registry.npmjs.org/@angular/build/-/build-19.2.4.tgz",
- "integrity": "sha512-poCXvmwKri3snWa9zVJ2sW7wyJatZjkwnH6GUBdJrM2dXRQ+LYLk/oXqEjlSRBYNna7P1ZcKNqBbzu0/SnnngA==",
+ "version": "19.2.6",
+ "resolved": "https://registry.npmjs.org/@angular/build/-/build-19.2.6.tgz",
+ "integrity": "sha512-+VBLb4ZPLswwJmgfsTFzGex+Sq/WveNc+uaIWyHYjwnuI17NXe1qAAg1rlp72CqGn0cirisfOyAUwPc/xZAgTg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@ampproject/remapping": "2.3.0",
- "@angular-devkit/architect": "0.1902.4",
+ "@angular-devkit/architect": "0.1902.6",
"@babel/core": "7.26.10",
"@babel/helper-annotate-as-pure": "7.25.9",
"@babel/helper-split-export-declaration": "7.24.7",
@@ -616,7 +617,7 @@
"sass": "1.85.0",
"semver": "7.7.1",
"source-map-support": "0.5.21",
- "vite": "6.2.0",
+ "vite": "6.2.4",
"watchpack": "2.4.2"
},
"engines": {
@@ -633,7 +634,7 @@
"@angular/localize": "^19.0.0 || ^19.2.0-next.0",
"@angular/platform-server": "^19.0.0 || ^19.2.0-next.0",
"@angular/service-worker": "^19.0.0 || ^19.2.0-next.0",
- "@angular/ssr": "^19.2.4",
+ "@angular/ssr": "^19.2.6",
"karma": "^6.4.0",
"less": "^4.2.0",
"ng-packagr": "^19.0.0 || ^19.2.0-next.0",
@@ -720,9 +721,9 @@
"license": "MIT"
},
"node_modules/@angular/build/node_modules/vite": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.0.tgz",
- "integrity": "sha512-7dPxoo+WsT/64rDcwoOjk76XHj+TqNTIvHKcuMQ1k4/SeHDaQt5GFAeLYzrimZrMpn/O6DtdI03WUjdxuPM0oQ==",
+ "version": "6.2.4",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.4.tgz",
+ "integrity": "sha512-veHMSew8CcRzhL5o8ONjy8gkfmFJAd5Ac16oxBUjlwgX3Gq2Wqr+qNC3TjPIpy7TPV/KporLga5GT9HqdrCizw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -792,18 +793,18 @@
}
},
"node_modules/@angular/cli": {
- "version": "19.2.4",
- "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-19.2.4.tgz",
- "integrity": "sha512-YmZYrxdGBwSZsrnpS6vr9gQ8+PrZHzwyYW/3jU2NRAMtl0ZlipDyfpLIDgrfqYPeumzr7+SKtJYVvlsMnjkN4g==",
+ "version": "19.2.6",
+ "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-19.2.6.tgz",
+ "integrity": "sha512-eZhFOSsDUHKaciwcWdU5C54ViAvPPdZJf42So93G2vZWDtEq6Uk47huocn1FY9cMhDvURfYLNrrLMpUDtUSsSA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@angular-devkit/architect": "0.1902.4",
- "@angular-devkit/core": "19.2.4",
- "@angular-devkit/schematics": "19.2.4",
+ "@angular-devkit/architect": "0.1902.6",
+ "@angular-devkit/core": "19.2.6",
+ "@angular-devkit/schematics": "19.2.6",
"@inquirer/prompts": "7.3.2",
"@listr2/prompt-adapter-inquirer": "2.0.18",
- "@schematics/angular": "19.2.4",
+ "@schematics/angular": "19.2.6",
"@yarnpkg/lockfile": "1.1.0",
"ini": "5.0.0",
"jsonc-parser": "3.3.1",
@@ -826,9 +827,9 @@
}
},
"node_modules/@angular/common": {
- "version": "19.2.3",
- "resolved": "https://registry.npmjs.org/@angular/common/-/common-19.2.3.tgz",
- "integrity": "sha512-cYOMRXFb6Sjtg9BI3bE/Ave+xU234jQmHYj7hBxr3MiqRSVJL4niy10KiA/Jiz6y76V5QfZfS+0aE65VuoqAvg==",
+ "version": "19.2.5",
+ "resolved": "https://registry.npmjs.org/@angular/common/-/common-19.2.5.tgz",
+ "integrity": "sha512-vFCBdas4C5PxP6ts/4TlRddWD3DUmI3aaO0QZdZvqyLHy428t84ruYdsJXKaeD8ie2U4/9F3a1tsklclRG/BBA==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
@@ -837,14 +838,14 @@
"node": "^18.19.1 || ^20.11.1 || >=22.0.0"
},
"peerDependencies": {
- "@angular/core": "19.2.3",
+ "@angular/core": "19.2.5",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
"node_modules/@angular/compiler": {
- "version": "19.2.3",
- "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-19.2.3.tgz",
- "integrity": "sha512-TL/JIU7vzSWD+IrMq2PAiHZi7IUFSRhdHo8q6/WuZ8SQmbuXCK2pJvHZpTtUdLswdPeD/UVhkhTAhQzEyEdZVg==",
+ "version": "19.2.5",
+ "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-19.2.5.tgz",
+ "integrity": "sha512-34J+HubQjwkbZ0AUtU5sa4Zouws9XtP/fKaysMQecoYJTZ3jewzLSRu3aAEZX1Y4gIrcVVKKIxM6oWoXKwYMOA==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
@@ -854,9 +855,9 @@
}
},
"node_modules/@angular/compiler-cli": {
- "version": "19.2.3",
- "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-19.2.3.tgz",
- "integrity": "sha512-ePh/7A6eEDAyfVn8QgLcAvrxhXBAf6mTqB/3+HwQeXLaka1gtN6xvZ6cjLEegP4s6kcYGhdfdLwzCcy0kjsY5g==",
+ "version": "19.2.5",
+ "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-19.2.5.tgz",
+ "integrity": "sha512-b2cG41r6lilApXLlvja1Ra2D00dM3BxmQhoElKC1tOnpD6S3/krlH1DOnBB2I55RBn9iv4zdmPz1l8zPUSh7DQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -878,14 +879,14 @@
"node": "^18.19.1 || ^20.11.1 || >=22.0.0"
},
"peerDependencies": {
- "@angular/compiler": "19.2.3",
+ "@angular/compiler": "19.2.5",
"typescript": ">=5.5 <5.9"
}
},
"node_modules/@angular/core": {
- "version": "19.2.3",
- "resolved": "https://registry.npmjs.org/@angular/core/-/core-19.2.3.tgz",
- "integrity": "sha512-uNDbQBDWdAfL8JhgG2l9eTEbikovZ+SthLUKERyR4fL7AVGSx85LjNySRuq4WAL4eiD1cRN1UUgu8o+WKqF/ow==",
+ "version": "19.2.5",
+ "resolved": "https://registry.npmjs.org/@angular/core/-/core-19.2.5.tgz",
+ "integrity": "sha512-NNEz1sEZz1mBpgf6Tz3aJ9b8KjqpTiMYhHfCYA9h9Ipe4D8gUmOsvPHPK2M755OX7p7PmUmzp1XCUHYrZMVHRw==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
@@ -899,9 +900,9 @@
}
},
"node_modules/@angular/elements": {
- "version": "19.2.3",
- "resolved": "https://registry.npmjs.org/@angular/elements/-/elements-19.2.3.tgz",
- "integrity": "sha512-ua0d79r3z5xc4a8k0eHN9Y1acsIOIYXzCaRnqfainBmXZ5CecBUhG1uoJ3xcpxNV5PxQugZLkqZrEvXqAqLhbA==",
+ "version": "19.2.5",
+ "resolved": "https://registry.npmjs.org/@angular/elements/-/elements-19.2.5.tgz",
+ "integrity": "sha512-LIGi0VdmVEh1LCuWLJAtx2EzHROcYQ2vv1RQf8LDK8NDLZNi7fglisupg+V4MSaxbETbO9YzIoISq7C3G0mHJA==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
@@ -910,14 +911,14 @@
"node": "^18.19.1 || ^20.11.1 || >=22.0.0"
},
"peerDependencies": {
- "@angular/core": "19.2.3",
+ "@angular/core": "19.2.5",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
"node_modules/@angular/forms": {
- "version": "19.2.3",
- "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-19.2.3.tgz",
- "integrity": "sha512-JEgNKiZd3taYBg9lsMvoana5cv1QGke8xkuryc9zesHPJjhw9QHllmDPOW2HyUuwPqXZ/YkHiuCMOk+4qPjsAw==",
+ "version": "19.2.5",
+ "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-19.2.5.tgz",
+ "integrity": "sha512-2Zvy3qK1kOxiAX9fdSaeG48q7oyO/4RlMYlg1w+ra9qX1SrgwF3OQ2P2Vs+ojg1AxN3z9xFp4aYaaID/G2LZAw==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
@@ -926,16 +927,16 @@
"node": "^18.19.1 || ^20.11.1 || >=22.0.0"
},
"peerDependencies": {
- "@angular/common": "19.2.3",
- "@angular/core": "19.2.3",
- "@angular/platform-browser": "19.2.3",
+ "@angular/common": "19.2.5",
+ "@angular/core": "19.2.5",
+ "@angular/platform-browser": "19.2.5",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
"node_modules/@angular/language-service": {
- "version": "19.2.3",
- "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-19.2.3.tgz",
- "integrity": "sha512-qq54VhRTk8jxnqXN6Q4wK1W7ewSkD0kdhii0Sif25gbkNvfDfqd1PjtnojelG81sN8XhBeMBcDhtbmEQX4nqHg==",
+ "version": "19.2.5",
+ "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-19.2.5.tgz",
+ "integrity": "sha512-Q1L0NxDwsbP4T27uc+aHThBCaqHwuI20iuuvTVy7+QK8kRrpBDgnmNuJ4a0KSfe9xw1CMW48V9HdxhWA9DqCyg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -943,9 +944,9 @@
}
},
"node_modules/@angular/platform-browser": {
- "version": "19.2.3",
- "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-19.2.3.tgz",
- "integrity": "sha512-bz5mvUkCS8SxaMInjPgi/2dD7vpWkZePQesvr/bBRNQbYSE4cGTbovXcVl3X5hIxs5JoC6Het0lS2IxDq7j6qg==",
+ "version": "19.2.5",
+ "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-19.2.5.tgz",
+ "integrity": "sha512-Lshy++X16cvl6OPvfzMySpsqEaCPKEJmDjz7q7oSt96oxlh6LvOeOUVLjsNyrNaIt9NadpWoqjlu/I9RTPJkpw==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
@@ -954,9 +955,9 @@
"node": "^18.19.1 || ^20.11.1 || >=22.0.0"
},
"peerDependencies": {
- "@angular/animations": "19.2.3",
- "@angular/common": "19.2.3",
- "@angular/core": "19.2.3"
+ "@angular/animations": "19.2.5",
+ "@angular/common": "19.2.5",
+ "@angular/core": "19.2.5"
},
"peerDependenciesMeta": {
"@angular/animations": {
@@ -965,9 +966,9 @@
}
},
"node_modules/@angular/platform-browser-dynamic": {
- "version": "19.2.3",
- "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-19.2.3.tgz",
- "integrity": "sha512-PHmmtdGxSfe9HL8xR4g3PspnEaPqTEOGyzNviAHugfkZCgXCdSbYs36d3i0nPwhExMAeuIVXbbJyouDn2kyeOw==",
+ "version": "19.2.5",
+ "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-19.2.5.tgz",
+ "integrity": "sha512-15in8u4552EcdWNTXY2h0MKuJbk3AuXwWr0zVTum4CfB/Ss2tNTrDEdWhgAbhnUI0e9jZQee/fhBbA1rleMYrA==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
@@ -976,16 +977,16 @@
"node": "^18.19.1 || ^20.11.1 || >=22.0.0"
},
"peerDependencies": {
- "@angular/common": "19.2.3",
- "@angular/compiler": "19.2.3",
- "@angular/core": "19.2.3",
- "@angular/platform-browser": "19.2.3"
+ "@angular/common": "19.2.5",
+ "@angular/compiler": "19.2.5",
+ "@angular/core": "19.2.5",
+ "@angular/platform-browser": "19.2.5"
}
},
"node_modules/@angular/platform-server": {
- "version": "19.2.3",
- "resolved": "https://registry.npmjs.org/@angular/platform-server/-/platform-server-19.2.3.tgz",
- "integrity": "sha512-04Wv3N1+We3E0+TcZP4x1KtHSiSx2cNrQVuC0FGftfvAZiSr8DtYye6ji7zxTGGRg5uKBwVAUvTEAbT56FNm8Q==",
+ "version": "19.2.5",
+ "resolved": "https://registry.npmjs.org/@angular/platform-server/-/platform-server-19.2.5.tgz",
+ "integrity": "sha512-F23ph7vPobssJ5oil2qkPwRTKw7KaNqAORu3Y7pUAAn+K+KMO8v/wzGMcOdln/BjTSCR/FjOnZv8k8lpju/9iw==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0",
@@ -995,17 +996,17 @@
"node": "^18.19.1 || ^20.11.1 || >=22.0.0"
},
"peerDependencies": {
- "@angular/common": "19.2.3",
- "@angular/compiler": "19.2.3",
- "@angular/core": "19.2.3",
- "@angular/platform-browser": "19.2.3",
+ "@angular/common": "19.2.5",
+ "@angular/compiler": "19.2.5",
+ "@angular/core": "19.2.5",
+ "@angular/platform-browser": "19.2.5",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
"node_modules/@angular/router": {
- "version": "19.2.3",
- "resolved": "https://registry.npmjs.org/@angular/router/-/router-19.2.3.tgz",
- "integrity": "sha512-yYVMT7CceKqE+fBXxkhkAqEQUEdY/BHtLQr1vP9rEnAf30vwKghDEresugfegY6Ch4IGKTBtDG/QGmxWszgUAQ==",
+ "version": "19.2.5",
+ "resolved": "https://registry.npmjs.org/@angular/router/-/router-19.2.5.tgz",
+ "integrity": "sha512-9pSfmdNXLjaOKj0kd4UxBC7sFdCFOnRGbftp397G3KWqsLsGSKmNFzqhXNeA5QHkaVxnpmpm8HzXU+zYV5JwSg==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
@@ -1014,16 +1015,16 @@
"node": "^18.19.1 || ^20.11.1 || >=22.0.0"
},
"peerDependencies": {
- "@angular/common": "19.2.3",
- "@angular/core": "19.2.3",
- "@angular/platform-browser": "19.2.3",
+ "@angular/common": "19.2.5",
+ "@angular/core": "19.2.5",
+ "@angular/platform-browser": "19.2.5",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
"node_modules/@angular/ssr": {
- "version": "19.2.4",
- "resolved": "https://registry.npmjs.org/@angular/ssr/-/ssr-19.2.4.tgz",
- "integrity": "sha512-3yG8YkCyMRt+z3ZICLJvq1GMmBGtNEWGnR/FyOrJ+VAT5WSgUbDA4MsTjUPdHlVbtg52J+NcXq+sw8GOXJwY+g==",
+ "version": "19.2.6",
+ "resolved": "https://registry.npmjs.org/@angular/ssr/-/ssr-19.2.6.tgz",
+ "integrity": "sha512-iaALhm8YMpWzZa7ukHEZrVSc9HjldQGnXOcB3DJkZiB5wyjet+mgbIR2CNJgw32CKoCBgFJPfkbX88HMtPPBWQ==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
@@ -4681,9 +4682,9 @@
}
},
"node_modules/@ngtools/webpack": {
- "version": "19.2.4",
- "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-19.2.4.tgz",
- "integrity": "sha512-I2vG9Yb0W/PR5+quBmSUk6uGa4xN/YvfJk+30bFDB/CpJlTQEo+3AOFCDYcDOxrbtjON80VdFYPypQ5ztbpdYw==",
+ "version": "19.2.6",
+ "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-19.2.6.tgz",
+ "integrity": "sha512-/jWpZUoMru3YbRJAPZ2KroUSzE6Ak5Hav219raYQaBXVtyLAvFE5VC1/CiH0wTYnb/dyjxzWq38ftOr/vv0+tg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -5292,9 +5293,9 @@
}
},
"node_modules/@puppeteer/browsers": {
- "version": "2.8.0",
- "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.8.0.tgz",
- "integrity": "sha512-yTwt2KWRmCQAfhvbCRjebaSX8pV1//I0Y3g+A7f/eS7gf0l4eRJoUCvcYdVtboeU4CTOZQuqYbZNS8aBYb8ROQ==",
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.9.0.tgz",
+ "integrity": "sha512-8+xM+cFydYET4X/5/3yZMHs7sjS6c9I6H5I3xJdb6cinzxWUT/I2QVw4avxCQ8QDndwdHkG/FiSZIrCjAbaKvQ==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -5659,14 +5660,14 @@
}
},
"node_modules/@schematics/angular": {
- "version": "19.2.4",
- "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-19.2.4.tgz",
- "integrity": "sha512-P7fphIPbqHHYRVRPiFl7RAHYPYhINGSUYOXrcThVBBsgKQBX18oNdUWvhZA6ylwK/9T21XB20VyLjNy0d78H1Q==",
+ "version": "19.2.6",
+ "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-19.2.6.tgz",
+ "integrity": "sha512-fmbF9ONmEZqxHocCwOSWG2mHp4a22d1uW+DZUBUgZSBUFIrnFw42deOxDq8mkZOZ1Tc73UpLN2GKI7iJeUqS2A==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@angular-devkit/core": "19.2.4",
- "@angular-devkit/schematics": "19.2.4",
+ "@angular-devkit/core": "19.2.6",
+ "@angular-devkit/schematics": "19.2.6",
"jsonc-parser": "3.3.1"
},
"engines": {
@@ -6370,9 +6371,9 @@
"dev": true
},
"node_modules/@types/ws": {
- "version": "8.18.0",
- "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.0.tgz",
- "integrity": "sha512-8svvI3hMyvN0kKCJMvTJP/x6Y/EoQbepff882wL+Sn5QsXb3etnamgrJq4isrBxSJj5L2AuXcI0+bgkoAXGUJw==",
+ "version": "8.18.1",
+ "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz",
+ "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -7458,33 +7459,41 @@
"dev": true
},
"node_modules/bare-events": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.4.2.tgz",
- "integrity": "sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q==",
+ "version": "2.5.4",
+ "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.4.tgz",
+ "integrity": "sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==",
"dev": true,
"license": "Apache-2.0",
"optional": true
},
"node_modules/bare-fs": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.0.1.tgz",
- "integrity": "sha512-ilQs4fm/l9eMfWY2dY0WCIUplSUp7U0CT1vrqMg1MUdeZl4fypu5UP0XcDBK5WBQPJAKP1b7XEodISmekH/CEg==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.0.2.tgz",
+ "integrity": "sha512-S5mmkMesiduMqnz51Bfh0Et9EX0aTCJxhsI4bvzFFLs8Z1AV8RDHadfY5CyLwdoLHgXbNBEN1gQcbEtGwuvixw==",
"dev": true,
"license": "Apache-2.0",
"optional": true,
"dependencies": {
- "bare-events": "^2.0.0",
+ "bare-events": "^2.5.4",
"bare-path": "^3.0.0",
- "bare-stream": "^2.0.0"
+ "bare-stream": "^2.6.4"
},
"engines": {
- "bare": ">=1.7.0"
+ "bare": ">=1.16.0"
+ },
+ "peerDependencies": {
+ "bare-buffer": "*"
+ },
+ "peerDependenciesMeta": {
+ "bare-buffer": {
+ "optional": true
+ }
}
},
"node_modules/bare-os": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.6.0.tgz",
- "integrity": "sha512-BUrFS5TqSBdA0LwHop4OjPJwisqxGy6JsWVqV6qaFoe965qqtaKfDzHY5T2YA1gUL0ZeeQeA+4BBc1FJTcHiPw==",
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.6.1.tgz",
+ "integrity": "sha512-uaIjxokhFidJP+bmmvKSgiMzj2sV5GPHaZVAIktcxcpCyBFFWO+YlikVAdhmUo2vYFvFhOXIAlldqV29L8126g==",
"dev": true,
"license": "Apache-2.0",
"optional": true,
@@ -8267,9 +8276,9 @@
}
},
"node_modules/chromium-bidi": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-2.1.2.tgz",
- "integrity": "sha512-vtRWBK2uImo5/W2oG6/cDkkHSm+2t6VHgnj+Rcwhb0pP74OoUb4GipyRX/T/y39gYQPhioP0DPShn+A7P6CHNw==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-3.0.0.tgz",
+ "integrity": "sha512-ZOGRDAhBMX1uxL2Cm2TDuhImbrsEz5A/tTcVU6RpXEWaTNUNwsHW6njUXizh51Ir6iqHbKAfhA2XK33uBcLo5A==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -16170,9 +16179,9 @@
}
},
"node_modules/ng-packagr": {
- "version": "19.2.0",
- "resolved": "https://registry.npmjs.org/ng-packagr/-/ng-packagr-19.2.0.tgz",
- "integrity": "sha512-bDyB9tmXMCL/4IhKcX84zGQlQrZhPhdCaomdJocz6EN57cZWdTP7SGhrswzpdGJY+y89855detet27oJLgR3IQ==",
+ "version": "19.2.1",
+ "resolved": "https://registry.npmjs.org/ng-packagr/-/ng-packagr-19.2.1.tgz",
+ "integrity": "sha512-IVyI0a1BV8Ct4Q3bCtlMRyYxNt22RBVJ0P4dnmhLXV6mxwoNwQaYGR48DxkTc/ZMcMGri8O6ZwytbTQni1vcPA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -18119,18 +18128,18 @@
}
},
"node_modules/puppeteer": {
- "version": "24.4.0",
- "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-24.4.0.tgz",
- "integrity": "sha512-E4JhJzjS8AAI+6N/b+Utwarhz6zWl3+MR725fal+s3UlOlX2eWdsvYYU+Q5bXMjs9eZEGkNQroLkn7j11s2k1Q==",
+ "version": "24.5.0",
+ "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-24.5.0.tgz",
+ "integrity": "sha512-3m0B48gj1A8cK01ma49WwjE8mg4i9UmnR2lP64rwBiLacJ2V20FpT67MgSUyzfz9BcHMQQweuF6Q854mnIYTqg==",
"dev": true,
"hasInstallScript": true,
"license": "Apache-2.0",
"dependencies": {
- "@puppeteer/browsers": "2.8.0",
- "chromium-bidi": "2.1.2",
+ "@puppeteer/browsers": "2.9.0",
+ "chromium-bidi": "3.0.0",
"cosmiconfig": "^9.0.0",
"devtools-protocol": "0.0.1413902",
- "puppeteer-core": "24.4.0",
+ "puppeteer-core": "24.5.0",
"typed-query-selector": "^2.12.0"
},
"bin": {
@@ -18141,14 +18150,14 @@
}
},
"node_modules/puppeteer-core": {
- "version": "24.4.0",
- "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.4.0.tgz",
- "integrity": "sha512-eFw66gCnWo0X8Hyf9KxxJtms7a61NJVMiSaWfItsFPzFBsjsWdmcNlBdsA1WVwln6neoHhsG+uTVesKmTREn/g==",
+ "version": "24.5.0",
+ "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.5.0.tgz",
+ "integrity": "sha512-vqibSk7xGOoqOlPUk3H+Iz02b4jCEd5QxaiuXclqyyBrJ6ZK22mXkg9HBSpyZePq6vKWh5ZAqUilSnbF2bv4Jg==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "@puppeteer/browsers": "2.8.0",
- "chromium-bidi": "2.1.2",
+ "@puppeteer/browsers": "2.9.0",
+ "chromium-bidi": "3.0.0",
"debug": "^4.4.0",
"devtools-protocol": "0.0.1413902",
"typed-query-selector": "^2.12.0",
@@ -22770,9 +22779,9 @@
}
},
"node_modules/vite": {
- "version": "6.2.3",
- "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.3.tgz",
- "integrity": "sha512-IzwM54g4y9JA/xAeBPNaDXiBF8Jsgl3VBQ2YQ/wOY6fyW3xMdSoltIV3Bo59DErdqdE6RxUfv8W69DvUorE4Eg==",
+ "version": "6.2.5",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.5.tgz",
+ "integrity": "sha512-j023J/hCAa4pRIUH6J9HemwYfjB5llR2Ps0CWeikOtdR8+pAURAk0DoJC5/mm9kd+UgdnIy7d6HE4EAvlYhPhA==",
"dev": true,
"license": "MIT",
"peer": true,
diff --git a/package.json b/package.json
index f73e2620f3a..0387095f0e5 100644
--- a/package.json
+++ b/package.json
@@ -58,17 +58,17 @@
},
"private": true,
"dependencies": {
- "@angular/animations": "^19.2.3",
- "@angular/common": "^19.2.3",
- "@angular/compiler": "^19.2.3",
- "@angular/core": "^19.2.3",
- "@angular/elements": "^19.2.3",
- "@angular/forms": "^19.2.3",
- "@angular/platform-browser": "^19.2.3",
- "@angular/platform-browser-dynamic": "^19.2.3",
- "@angular/platform-server": "^19.2.3",
- "@angular/router": "^19.2.3",
- "@angular/ssr": "^19.2.4",
+ "@angular/animations": "^19.2.5",
+ "@angular/common": "^19.2.5",
+ "@angular/compiler": "^19.2.5",
+ "@angular/core": "^19.2.5",
+ "@angular/elements": "^19.2.5",
+ "@angular/forms": "^19.2.5",
+ "@angular/platform-browser": "^19.2.5",
+ "@angular/platform-browser-dynamic": "^19.2.5",
+ "@angular/platform-server": "^19.2.5",
+ "@angular/router": "^19.2.5",
+ "@angular/ssr": "^19.2.6",
"@igniteui/material-icons-extended": "^3.1.0",
"@lit-labs/ssr-dom-shim": "^1.3.0",
"@types/source-map": "0.5.2",
@@ -82,16 +82,16 @@
"zone.js": "~0.15.0"
},
"devDependencies": {
- "@angular-devkit/build-angular": "^19.2.4",
- "@angular-devkit/schematics": "^19.2.4",
+ "@angular-devkit/build-angular": "^19.2.6",
+ "@angular-devkit/schematics": "^19.2.6",
"@angular-eslint/builder": "^19.3.0",
"@angular-eslint/eslint-plugin": "^19.3.0",
"@angular-eslint/eslint-plugin-template": "^19.3.0",
"@angular-eslint/schematics": "^19.3.0",
"@angular-eslint/template-parser": "^19.3.0",
- "@angular/cli": "^19.2.4",
- "@angular/compiler-cli": "^19.2.3",
- "@angular/language-service": "^19.2.3",
+ "@angular/cli": "^19.2.6",
+ "@angular/compiler-cli": "^19.2.5",
+ "@angular/language-service": "^19.2.5",
"@angularclass/hmr": "^3.0.0",
"@microsoft/signalr": "^7.0.12",
"@types/estree": "^1.0.0",
@@ -131,11 +131,11 @@
"karma-parallel": "^0.3.1",
"karma-spec-reporter": "^0.0.36",
"lit-html": "^3.2.1",
- "ng-packagr": "^19.2.0",
+ "ng-packagr": "^19.2.1",
"postcss": "^8.5.1",
"postcss-scss": "^4.0.6",
"prettier": "^3.3.3",
- "puppeteer": "^24.4.0",
+ "puppeteer": "^24.5.0",
"sass-embedded": "^1.83.4",
"sass-true": "^8.1.0",
"sassdoc": "^2.7.4",
diff --git a/projects/igniteui-angular-elements/src/app/custom-strategy.spec.ts b/projects/igniteui-angular-elements/src/app/custom-strategy.spec.ts
index e577e37b21c..2a6bd5dc461 100644
--- a/projects/igniteui-angular-elements/src/app/custom-strategy.spec.ts
+++ b/projects/igniteui-angular-elements/src/app/custom-strategy.spec.ts
@@ -1,4 +1,5 @@
import { IgxColumnComponent, IgxGridComponent, IgxHierarchicalGridComponent } from 'igniteui-angular';
+import { html } from 'lit-html';
import { firstValueFrom, fromEvent, skip, timer } from 'rxjs';
import { ComponentRefKey, IgcNgElement } from './custom-strategy';
import hgridData from '../assets/data/projects-hgrid.js';
@@ -51,6 +52,47 @@ describe('Elements: ', () => {
const gridComponent = (await gridEl.ngElementStrategy[ComponentRefKey]).instance as IgxGridComponent;
const columnComponent = (await columnEl.ngElementStrategy[ComponentRefKey]).instance as IgxColumnComponent;
expect(gridComponent.columnList.toArray()).toContain(columnComponent);
+
+ columnEl.remove();
+ await firstValueFrom(timer(10 /* SCHEDULE_DELAY: DESTROY + QUERY */ * 3));
+ expect(gridComponent.columnList.toArray()).toEqual([]);
+ });
+
+ it(`should keep IgcNgElement instance in template of another IgcNgElement #15678`, async () => {
+ const gridEl = document.createElement("igc-grid");
+ testContainer.appendChild(gridEl);
+ const columnEl = document.createElement("igc-column") as IgcNgElement;
+ gridEl.appendChild(columnEl);
+ gridEl.primaryKey = 'id';
+ gridEl.data = [{ id: '1' }];
+ (gridEl as any).detailTemplate = (ctx) => {
+ return html`
+
+
`;
+ }
+
+ // TODO: Better way to wait - potentially expose the queue or observable for update on the strategy
+ await firstValueFrom(timer(10 /* SCHEDULE_DELAY */ * 2));
+
+ // sigh (ãīšã*)
+ (gridEl as any).toggleRow('1');
+ await firstValueFrom(timer(10 /* SCHEDULE_DELAY */ * 2));
+
+ let detailGrid = document.querySelector('#child1');
+ expect(detailGrid).toBeDefined();
+ let detailGridComponent = (await detailGrid?.ngElementStrategy[ComponentRefKey])?.instance as IgxGridComponent;
+ expect(detailGridComponent).toBeDefined();
+
+ // close and re-expand row detail:
+ (gridEl as any).toggleRow('1');
+ await firstValueFrom(timer(10 /* SCHEDULE_DELAY */ * 2));
+ (gridEl as any).toggleRow('1');
+ await firstValueFrom(timer(10 /* SCHEDULE_DELAY */ * 2));
+
+ detailGrid = document.querySelector('#child1');
+ expect(detailGrid).toBeDefined();
+ detailGridComponent = (await detailGrid?.ngElementStrategy[ComponentRefKey])?.instance as IgxGridComponent;
+ expect(detailGridComponent).toBeDefined("Detail child grid was destroyed on re-expand");
});
});
@@ -103,6 +145,29 @@ describe('Elements: ', () => {
expect(paginator.totalRecords).toEqual(gridEl.data.length);
});
+ it(`should correctly apply column template when set through event`, async () => {
+ const gridEl = document.createElement("igc-grid");
+
+ const columnID = document.createElement("igc-column");
+ columnID.setAttribute("field", "ProductID");
+ gridEl.appendChild(columnID);
+ const columnName = document.createElement("igc-column");
+ columnName.setAttribute("field", "ProductName");
+ gridEl.appendChild(columnName);
+
+ gridEl.data = SampleTestData.foodProductData();
+ gridEl.addEventListener("columnInit", (args: CustomEvent) => {
+ args.detail.headerTemplate = (ctx) => html`Templated ${args.detail.field}`;
+ });
+ testContainer.appendChild(gridEl);
+
+ // TODO: Better way to wait - potentially expose the queue or observable for update on the strategy
+ await firstValueFrom(timer(10 /* SCHEDULE_DELAY */ * 2));
+
+ const header = document.getElementsByTagName("igx-grid-header").item(0) as HTMLElement;
+ expect(header.innerText).toEqual('Templated ProductID');
+ });
+
it(`should initialize pivot grid with state persistence component`, async () => {
const gridEl = document.createElement("igc-pivot-grid");
diff --git a/projects/igniteui-angular-elements/src/app/custom-strategy.ts b/projects/igniteui-angular-elements/src/app/custom-strategy.ts
index a114035ff5b..1907cba1fe7 100644
--- a/projects/igniteui-angular-elements/src/app/custom-strategy.ts
+++ b/projects/igniteui-angular-elements/src/app/custom-strategy.ts
@@ -1,7 +1,8 @@
-import { ApplicationRef, ChangeDetectorRef, ComponentFactory, ComponentRef, Injector, OnChanges, QueryList, Type, ViewContainerRef, reflectComponentType } from '@angular/core';
-import { NgElement } from '@angular/elements';
-import { fromEvent } from 'rxjs';
-import { takeUntil } from 'rxjs/operators';
+import { ApplicationRef, ChangeDetectorRef, ComponentFactory, ComponentRef, DestroyRef, EventEmitter, Injector, OnChanges, QueryList, Type, ViewContainerRef, reflectComponentType } from '@angular/core';
+import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
+import { NgElement, NgElementStrategyEvent } from '@angular/elements';
+import { fromEvent, Observable } from 'rxjs';
+import { map, takeUntil } from 'rxjs/operators';
import { ComponentConfig, ContentQueryMeta } from './component-config';
import { ComponentNgElementStrategy, ComponentNgElementStrategyFactory, extractProjectableNodes, isFunction } from './ng-element-strategy';
@@ -23,11 +24,15 @@ class IgxCustomNgElementStrategy extends ComponentNgElementStrategy {
// public override componentRef: ComponentRef|null = null;
protected element: IgcNgElement;
+ /** The parent _component_'s element (a.k.a the semantic parent, rather than the DOM one after projection) */
+ protected parentElement?: WeakRef;
/** Native Angular parent (if any) the Element is created under, usually as template of dynamic component (e.g. HGrid row island paginator) */
protected angularParent: ComponentRef;
/** Cached child instances per query prop. Used for dynamic components's child templates that normally persist in Angular runtime */
protected cachedChildComponents: Map[]> = new Map();
private setComponentRef: (value: ComponentRef) => void;
+ /** The maximum depth at which event arguments are processed and angular components wrapped with Proxies, that handle template set */
+ private maxEventProxyDepth = 3;
/**
* Resolvable component reference.
@@ -38,21 +43,29 @@ class IgxCustomNgElementStrategy extends ComponentNgElementStrategy {
*/
public [ComponentRefKey] = new Promise>((resolve, _) => this.setComponentRef = resolve);
- private _templateWrapper: TemplateWrapperComponent;
+ private _templateWrapperRef: ComponentRef;
protected get templateWrapper(): TemplateWrapperComponent {
- if (!this._templateWrapper) {
+ if (!this._templateWrapperRef) {
const componentRef = (this as any).componentRef as ComponentRef;
const viewRef = componentRef.injector.get(ViewContainerRef);
- this._templateWrapper = viewRef.createComponent(TemplateWrapperComponent).instance;
+ this._templateWrapperRef = viewRef.createComponent(TemplateWrapperComponent);
}
- return this._templateWrapper;
+ return this._templateWrapperRef.instance;
+ }
+
+ private _configSelectors: string;
+ public get configSelectors(): string {
+ if (!this._configSelectors) {
+ this._configSelectors = this.config.map(x => x.selector).join(',');
+ }
+ return this._configSelectors;
}
constructor(private _componentFactory: ComponentFactory, private _injector: Injector, private config: ComponentConfig[]) {
super(_componentFactory, _injector);
}
- override async initializeComponent(element: HTMLElement) {
+ protected override async initializeComponent(element: HTMLElement) {
if (!element.isConnected) {
// D.P. 2022-09-20 do not initialize on connectedCallback that is not actually connected
// connectedCallback may be called once your element is no longer connected
@@ -65,14 +78,13 @@ class IgxCustomNgElementStrategy extends ComponentNgElementStrategy {
// TODO: Fail handling or cancellation needed?
(this as any).componentRef = {};
- const toBeOrphanedChildren = Array.from(element.children).filter(x => !this._componentFactory.ngContentSelectors.some(sel => x.matches(sel)));
- for (const iterator of toBeOrphanedChildren) {
- // TODO: special registration OR config for custom
- }
+ // const toBeOrphanedChildren = Array.from(element.children).filter(x => !this._componentFactory.ngContentSelectors.some(sel => x.matches(sel)));
+ // for (const iterator of toBeOrphanedChildren) {
+ // // TODO: special registration OR config for custom
+ // }
let parentInjector: Injector;
let parentAnchor: ViewContainerRef;
- const parents: IgcNgElement[] = [];
- let parentConfig: ComponentConfig;
+ const parents: WeakRef[] = [];
const componentConfig = this.config?.find(x => x.component === this._componentFactory.componentType);
const configParents = componentConfig?.parents
@@ -87,11 +99,11 @@ class IgxCustomNgElementStrategy extends ComponentNgElementStrategy {
reflectComponentType(x.component).selector
]).join(','));
if (node) {
- parents.push(node);
+ parents.push(new WeakRef(node));
}
}
// select closest of all possible config parents
- let parent = parents[0];
+ let parent = parents[0]?.deref();
// Collected parents may include direct Angular HGrids, so only wait for configured parent elements:
const configParent = configParents.find(x => x.selector === parent?.tagName.toLocaleLowerCase());
@@ -102,7 +114,8 @@ class IgxCustomNgElementStrategy extends ComponentNgElementStrategy {
// ngElementStrategy getter is protected and also has initialization logic, though that should be safe at this point
if (parent?.ngElementStrategy) {
this.angularParent = parent.ngElementStrategy.angularParent;
- const parentComponentRef = await parent?.ngElementStrategy[ComponentRefKey];
+ this.parentElement = new WeakRef(parent);
+ let parentComponentRef = await parent?.ngElementStrategy[ComponentRefKey];
parentInjector = parentComponentRef?.injector;
// TODO: Consider general solution (as in Parent w/ @igxAnchor tag)
@@ -110,7 +123,7 @@ class IgxCustomNgElementStrategy extends ComponentNgElementStrategy {
|| element.tagName.toLocaleLowerCase() === 'igc-paginator') {
// NOPE: viewcontainerRef will re-render this node again, no option for rootNode :S
// this.componentRef = parentAnchor.createComponent(this.componentFactory.componentType, { projectableNodes, injector: childInjector });
- const parentComponentRef = await parent?.ngElementStrategy[ComponentRefKey];
+ parentComponentRef = await parent?.ngElementStrategy[ComponentRefKey];
parentAnchor = parentComponentRef?.instance.anchor;
}
} else if ((parent as any)?.__componentRef) {
@@ -171,44 +184,44 @@ class IgxCustomNgElementStrategy extends ComponentNgElementStrategy {
// componentRef should also likely be protected:
const componentRef = (this as any).componentRef as ComponentRef;
- for (let i = 0; i < parents.length; i++) {
- const parent = parents[i];
-
- // find the respective config entry
- parentConfig = configParents.find(x => x.selector === parent?.tagName.toLocaleLowerCase());
-
- if (!parentConfig) {
- continue;
- }
-
- const componentType = this._componentFactory.componentType;
- // TODO - look into more cases where query expects a certain base class but gets a subclass.
- // Related to https://github.com/IgniteUI/igniteui-angular/pull/12134#discussion_r983147259
- const contentQueries = parentConfig.contentQueries.filter(x => x.childType === componentType || x.childType === componentConfig.provideAs);
+ const parentQueries = this.getParentContentQueries(componentConfig, parents, configParents);
- for (const query of contentQueries) {
- if (i > 0 && !query.descendants) {
- continue;
+ for (const { parent, query } of parentQueries) {
+ if (query.isQueryList) {
+ parent.ngElementStrategy.scheduleQueryUpdate(query.property);
+ if (this.angularParent) {
+ // Cache the component in the parent (currently only paginator for HGrid),
+ // so it is kept in the query even when detached from DOM
+ this.addToParentCache(parent, query.property);
}
-
+ } else {
const parentRef = await parent.ngElementStrategy[ComponentRefKey];
- if (query.isQueryList) {
- parent.ngElementStrategy.scheduleQueryUpdate(query.property);
- if (this.angularParent) {
- // Cache the component in the parent (currently only paginator for HGrid),
- // so it is kept in the query even when detached from DOM
- this.addToParentCache(parent, query.property);
- }
- } else {
- parentRef.instance[query.property] = componentRef.instance;
- parentRef.changeDetectorRef.detectChanges();
- }
+ parentRef.instance[query.property] = componentRef.instance;
+ parentRef.changeDetectorRef.detectChanges();
}
}
if (['igc-grid', 'igc-tree-grid', 'igc-hierarchical-grid'].includes(element.tagName.toLocaleLowerCase())) {
this.patchGridPopups();
}
+
+ // instead of duplicating super.disconnect() w/ the scheduled destroy:
+ componentRef.onDestroy(() => {
+ if (this._templateWrapperRef) {
+ this._templateWrapperRef.destroy();
+ this._templateWrapperRef = null;
+ }
+
+ // also schedule query updates on all parents:
+ this.getParentContentQueries(componentConfig, parents, configParents)
+ .filter(x => x.parent?.isConnected && x.query.isQueryList)
+ .forEach(({ parent, query }) => {
+ parent.ngElementStrategy.scheduleQueryUpdate(query.property);
+ if (this.angularParent) {
+ this.removeFromParentCache(parent, query.property);
+ }
+ });
+ });
}
public override setInputValue(property: string, value: any, transform?: (value: any) => any): void {
@@ -233,6 +246,14 @@ class IgxCustomNgElementStrategy extends ComponentNgElementStrategy {
}
value = this.templateWrapper.addTemplate(value);
// TODO: discard oldValue
+
+ // check template for any angular-element components
+ this.templateWrapper.templateRendered.pipe(takeUntilDestroyed(componentRef.injector.get(DestroyRef))).subscribe((element) => {
+ element.querySelectorAll(this.configSelectors)?.forEach((c) => {
+ // tie to angularParent lifecycle for cached scenarios like detailTemplate:
+ c.ngElementStrategy.angularParent = componentRef;
+ });
+ });
}
if (componentRef && componentConfig?.boolProps?.includes(property)) {
// bool coerce:
@@ -329,23 +350,47 @@ class IgxCustomNgElementStrategy extends ComponentNgElementStrategy {
}
private addToParentCache(parentElement: IgcNgElement, queryName: string) {
- var cachedComponents = parentElement.ngElementStrategy.cachedChildComponents.get(queryName) || [];
+ const cachedComponents = parentElement.ngElementStrategy.cachedChildComponents.get(queryName) || [];
cachedComponents.push((this as any).componentRef.instance);
parentElement.ngElementStrategy.cachedChildComponents.set(queryName, cachedComponents);
}
- //#endregion schedule query update
- /**
- * assignTemplateCallback
- */
- public assignTemplateCallback(templateProp: string, callback: any) {
- const componentRef = (this as any).componentRef as ComponentRef;
- if (componentRef) {
- const templateRef = this.templateWrapper.addTemplate(callback);
- componentRef.instance[templateProp] = templateRef;
- componentRef.changeDetectorRef.detectChanges();
+ private removeFromParentCache(parentElement: IgcNgElement, queryName: string) {
+ let cachedComponents = parentElement.ngElementStrategy.cachedChildComponents.get(queryName) || [];
+ cachedComponents = cachedComponents.filter(x => x !== (this as any).componentRef.instance);
+ parentElement.ngElementStrategy.cachedChildComponents.set(queryName, cachedComponents);
+ }
+
+ /** Get all matching content questions from all parents */
+ private getParentContentQueries(componentConfig: ComponentConfig, parents: WeakRef[], configParents: ComponentConfig[]): { parent: IgcNgElement, query: ContentQueryMeta }[] {
+ const queries: { parent: IgcNgElement, query: ContentQueryMeta }[] = [];
+
+ for (let i = 0; i < parents.length; i++) {
+ const parent = parents[i]?.deref();
+
+ // find the respective config entry
+ const parentConfig = configParents.find(x => x.selector === parent?.tagName.toLocaleLowerCase());
+ if (!parentConfig) {
+ continue;
+ }
+
+ const componentType = this._componentFactory.componentType;
+ // TODO - look into more cases where query expects a certain base class but gets a subclass.
+ // Related to https://github.com/IgniteUI/igniteui-angular/pull/12134#discussion_r983147259
+ const contentQueries = parentConfig.contentQueries.filter(x => x.childType === componentType || x.childType === componentConfig.provideAs);
+
+ for (const query of contentQueries) {
+ if (i > 0 && !query.descendants) {
+ continue;
+ }
+ queries.push({ parent, query });
+ }
}
+
+ return queries;
}
+ //#endregion schedule query update
+
//#region Grid popups hide on scroll
/**
@@ -381,13 +426,101 @@ class IgxCustomNgElementStrategy extends ComponentNgElementStrategy {
}
//#endregion
- override disconnect(): void {
+ public override disconnect(): void {
if (this.angularParent) {
this.angularParent.onDestroy(() => super.disconnect());
} else {
super.disconnect();
}
}
+
+ //#region Handle event args that return reference to components, since they return angular ref and not custom elements.
+ /** Sets up listeners for the component's outputs so that the events stream emits the events. */
+ protected override initializeOutputs(componentRef: ComponentRef): void {
+ const eventEmitters: Observable[] = this._componentFactory.outputs.map(
+ ({ propName, templateName }) => {
+ const emitter: EventEmitter = componentRef.instance[propName];
+ return emitter.pipe(map((value: any) => ({ name: templateName, value: this.patchOutputComponents(propName, value) })));
+ },
+ );
+
+ (this as any).eventEmitters.next(eventEmitters);
+ }
+
+ protected patchOutputComponents(eventName: string, eventArgs: any) {
+ // Single out only `columnInit` event for now. If more events pop up will require a config generation.
+ if (eventName !== "columnInit") {
+ return eventArgs;
+ }
+ return this.createProxyForComponentValue(eventArgs, 1).value;
+ }
+
+ /**
+ * Nested search of event args that contain angular components and replace them with proxies.
+ * If event args are array of angular component instances should return array of proxies of each of those instances.
+ * If event args are object that has a single property being angular component should return same object except the angular component being a proxy of itself.
+ */
+ protected createProxyForComponentValue(value: any, depth: number): { value: any, hasProxies: boolean } {
+ if (depth > this.maxEventProxyDepth) {
+ return { value, hasProxies: false };
+ }
+
+ let hasProxies = false;
+ // TO DO!: Not very reliable as it is a very internal API and could be subject to change. If something comes up, should be changed.
+ if (value?.__ngContext__) {
+ const componentConfig = this.config.find((info: ComponentConfig) => value.constructor === info.component);
+ if (componentConfig?.templateProps) {
+ return { value: this.createElementsComponentProxy(value, componentConfig), hasProxies: true };
+ }
+ } else if (Array.isArray(value)) {
+ if (!value[0]) {
+ return { value, hasProxies: false };
+ } else {
+ // For array limit their parsing to first level and check if first item has created proxy inside.
+ const firstItem = this.createProxyForComponentValue(value[0], this.maxEventProxyDepth);
+ if (firstItem.hasProxies) {
+ const mappedArray = value.slice(1, value.length).map(item => this.createProxyForComponentValue(item, depth + 1));
+ mappedArray.unshift(firstItem);
+ return { value: mappedArray, hasProxies: true };
+ }
+ }
+ } else if (typeof value === "object" && Object.entries(value).length && !(value instanceof Event)) {
+ for (const [key, item] of Object.entries(value)) {
+ if (!item) {
+ value[key] = item;
+ } else {
+ const parsedItem = this.createProxyForComponentValue(item, depth + 1);
+ value[key] = parsedItem.value;
+ hasProxies = parsedItem.hasProxies || hasProxies;
+ }
+ }
+ }
+
+ return { value, hasProxies };
+ }
+
+ /** Create proxy for a component that handles setting template props, making sure it provides correct TemplateRef and not Lit template */
+ protected createElementsComponentProxy(component: any, config: ComponentConfig) {
+ const parentThis = this;
+ return new Proxy(component, {
+ set(target: any, prop: string, newValue: any) {
+ // For now handle only template props
+ if (config.templateProps.includes(prop)) {
+ const oldRef = target[prop];
+ const oldValue = oldRef && parentThis.templateWrapper.getTemplateFunction(oldRef);
+ if (oldValue === newValue) {
+ newValue = oldRef;
+ } else {
+ newValue = parentThis.templateWrapper.addTemplate(newValue);
+ }
+ }
+ target[prop] = newValue;
+
+ return true;
+ }
+ });
+ }
+ //#endregion
}
/**
diff --git a/projects/igniteui-angular-elements/src/app/wrapper/wrapper.component.ts b/projects/igniteui-angular-elements/src/app/wrapper/wrapper.component.ts
index 35ba746cd94..5e782714f5f 100644
--- a/projects/igniteui-angular-elements/src/app/wrapper/wrapper.component.ts
+++ b/projects/igniteui-angular-elements/src/app/wrapper/wrapper.component.ts
@@ -1,4 +1,5 @@
import { ChangeDetectorRef, Component, QueryList, TemplateRef, ViewChildren } from '@angular/core';
+import { Subject } from 'rxjs';
import { TemplateRefWrapper } from './template-ref-wrapper';
import { render, TemplateResult } from 'lit-html';
@@ -14,6 +15,7 @@ type TemplateFunction = (arg: any) => TemplateResult;
export class TemplateWrapperComponent {
public templateFunctions: TemplateFunction[] = [];
+ public templateRendered = new Subject();
/**
* All template refs
@@ -27,6 +29,7 @@ export class TemplateWrapperComponent {
public litRender(container: HTMLElement, templateFunc: (arg: any) => TemplateResult, arg: any) {
render(templateFunc(arg), container);
+ this.templateRendered.next(container);
}
public addTemplate(templateFunc: TemplateFunction): TemplateRef {
diff --git a/projects/igniteui-angular-elements/src/index.html b/projects/igniteui-angular-elements/src/index.html
index c1db7ce6a44..765bb001461 100644
--- a/projects/igniteui-angular-elements/src/index.html
+++ b/projects/igniteui-angular-elements/src/index.html
@@ -195,7 +195,11 @@ Flat Grid (MRL column layout)
ctx.cell.editValue = e.detail.newValue} single-select>
`;
- grid1.detailTemplate = (ctx) => html`Stock: ${ctx.implicit.InStock}
`;
+ grid1.detailTemplate = (ctx) => {
+ return html`
+
+
`;
+ }
grid2.querySelector('igc-column[field="ProductName"]').inlineEditorTemplate = (ctx) =>
html`
@@ -320,7 +324,9 @@ Flat Grid (MRL column layout)
-
diff --git a/projects/igniteui-angular/karma.conf.js b/projects/igniteui-angular/karma.conf.js
index fabb87455a3..5147239377b 100644
--- a/projects/igniteui-angular/karma.conf.js
+++ b/projects/igniteui-angular/karma.conf.js
@@ -10,8 +10,7 @@ module.exports = function (config) {
files: [
{ pattern: '../../node_modules/hammerjs/hammer.min.js', watched: false },
{ pattern: '../../node_modules/hammer-simulator/index.js', watched: false },
- { pattern: './test.css', watched: false },
- { pattern: '../../dist/igniteui-angular/styles/igniteui-angular.css', watched: false }
+ { pattern: './test.css', watched: false }
],
plugins: [
'karma-parallel',
diff --git a/projects/igniteui-angular/karma.watch.conf.js b/projects/igniteui-angular/karma.watch.conf.js
index bc83a9064bc..b2b6da11a2b 100644
--- a/projects/igniteui-angular/karma.watch.conf.js
+++ b/projects/igniteui-angular/karma.watch.conf.js
@@ -8,8 +8,7 @@ module.exports = function (config) {
files: [
{ pattern: '../../node_modules/hammerjs/hammer.min.js', watched: false },
{ pattern: '../../node_modules/hammer-simulator/index.js', watched: false },
- { pattern: './test.css', watched: false },
- { pattern: '../../dist/igniteui-angular/styles/igniteui-angular.css', watched: false }
+ { pattern: './test.css', watched: false }
],
plugins: [
'karma-jasmine',
diff --git a/projects/igniteui-angular/package.json b/projects/igniteui-angular/package.json
index 19932f8f91e..a883e6c1147 100644
--- a/projects/igniteui-angular/package.json
+++ b/projects/igniteui-angular/package.json
@@ -93,7 +93,7 @@
}
},
"igxDevDependencies": {
- "@igniteui/angular-schematics": "~19.1.14315"
+ "@igniteui/angular-schematics": "~19.2.1440"
},
"ng-update": {
"migrations": "./migrations/migration-collection.json",
diff --git a/projects/igniteui-angular/src/assets/images/avatar/1.jpg b/projects/igniteui-angular/src/assets/images/avatar/1.jpg
new file mode 100644
index 00000000000..28d3021c939
Binary files /dev/null and b/projects/igniteui-angular/src/assets/images/avatar/1.jpg differ
diff --git a/projects/igniteui-angular/src/assets/images/avatar/10.jpg b/projects/igniteui-angular/src/assets/images/avatar/10.jpg
new file mode 100644
index 00000000000..99ca93d34a6
Binary files /dev/null and b/projects/igniteui-angular/src/assets/images/avatar/10.jpg differ
diff --git a/projects/igniteui-angular/src/assets/images/avatar/11.jpg b/projects/igniteui-angular/src/assets/images/avatar/11.jpg
new file mode 100644
index 00000000000..a93271e1469
Binary files /dev/null and b/projects/igniteui-angular/src/assets/images/avatar/11.jpg differ
diff --git a/projects/igniteui-angular/src/assets/images/avatar/12.jpg b/projects/igniteui-angular/src/assets/images/avatar/12.jpg
new file mode 100644
index 00000000000..1c89b4e9b48
Binary files /dev/null and b/projects/igniteui-angular/src/assets/images/avatar/12.jpg differ
diff --git a/projects/igniteui-angular/src/assets/images/avatar/13.jpg b/projects/igniteui-angular/src/assets/images/avatar/13.jpg
new file mode 100644
index 00000000000..5ec2f4fbdb7
Binary files /dev/null and b/projects/igniteui-angular/src/assets/images/avatar/13.jpg differ
diff --git a/projects/igniteui-angular/src/assets/images/avatar/14.jpg b/projects/igniteui-angular/src/assets/images/avatar/14.jpg
new file mode 100644
index 00000000000..773eade87c4
Binary files /dev/null and b/projects/igniteui-angular/src/assets/images/avatar/14.jpg differ
diff --git a/projects/igniteui-angular/src/assets/images/avatar/15.jpg b/projects/igniteui-angular/src/assets/images/avatar/15.jpg
new file mode 100644
index 00000000000..cacf3848060
Binary files /dev/null and b/projects/igniteui-angular/src/assets/images/avatar/15.jpg differ
diff --git a/projects/igniteui-angular/src/assets/images/avatar/16.jpg b/projects/igniteui-angular/src/assets/images/avatar/16.jpg
new file mode 100644
index 00000000000..75f77fc1c2f
Binary files /dev/null and b/projects/igniteui-angular/src/assets/images/avatar/16.jpg differ
diff --git a/projects/igniteui-angular/src/assets/images/avatar/17.jpg b/projects/igniteui-angular/src/assets/images/avatar/17.jpg
new file mode 100644
index 00000000000..4fda8c3964d
Binary files /dev/null and b/projects/igniteui-angular/src/assets/images/avatar/17.jpg differ
diff --git a/projects/igniteui-angular/src/assets/images/avatar/18.jpg b/projects/igniteui-angular/src/assets/images/avatar/18.jpg
new file mode 100644
index 00000000000..a3e3e193322
Binary files /dev/null and b/projects/igniteui-angular/src/assets/images/avatar/18.jpg differ
diff --git a/projects/igniteui-angular/src/assets/images/avatar/19.jpg b/projects/igniteui-angular/src/assets/images/avatar/19.jpg
new file mode 100644
index 00000000000..d73abae2c20
Binary files /dev/null and b/projects/igniteui-angular/src/assets/images/avatar/19.jpg differ
diff --git a/projects/igniteui-angular/src/assets/images/avatar/2.jpg b/projects/igniteui-angular/src/assets/images/avatar/2.jpg
new file mode 100644
index 00000000000..dd992e87625
Binary files /dev/null and b/projects/igniteui-angular/src/assets/images/avatar/2.jpg differ
diff --git a/projects/igniteui-angular/src/assets/images/avatar/20.jpg b/projects/igniteui-angular/src/assets/images/avatar/20.jpg
new file mode 100644
index 00000000000..b6d8717e3f9
Binary files /dev/null and b/projects/igniteui-angular/src/assets/images/avatar/20.jpg differ
diff --git a/projects/igniteui-angular/src/assets/images/avatar/21.jpg b/projects/igniteui-angular/src/assets/images/avatar/21.jpg
new file mode 100644
index 00000000000..a9138245dd6
Binary files /dev/null and b/projects/igniteui-angular/src/assets/images/avatar/21.jpg differ
diff --git a/projects/igniteui-angular/src/assets/images/avatar/22.jpg b/projects/igniteui-angular/src/assets/images/avatar/22.jpg
new file mode 100644
index 00000000000..34a1392aca1
Binary files /dev/null and b/projects/igniteui-angular/src/assets/images/avatar/22.jpg differ
diff --git a/projects/igniteui-angular/src/assets/images/avatar/23.jpg b/projects/igniteui-angular/src/assets/images/avatar/23.jpg
new file mode 100644
index 00000000000..2ac66665e8c
Binary files /dev/null and b/projects/igniteui-angular/src/assets/images/avatar/23.jpg differ
diff --git a/projects/igniteui-angular/src/assets/images/avatar/24.jpg b/projects/igniteui-angular/src/assets/images/avatar/24.jpg
new file mode 100644
index 00000000000..e9cf1e56006
Binary files /dev/null and b/projects/igniteui-angular/src/assets/images/avatar/24.jpg differ
diff --git a/projects/igniteui-angular/src/assets/images/avatar/3.jpg b/projects/igniteui-angular/src/assets/images/avatar/3.jpg
new file mode 100644
index 00000000000..46fba71dd18
Binary files /dev/null and b/projects/igniteui-angular/src/assets/images/avatar/3.jpg differ
diff --git a/projects/igniteui-angular/src/assets/images/avatar/4.jpg b/projects/igniteui-angular/src/assets/images/avatar/4.jpg
new file mode 100644
index 00000000000..096ca437e74
Binary files /dev/null and b/projects/igniteui-angular/src/assets/images/avatar/4.jpg differ
diff --git a/projects/igniteui-angular/src/assets/images/avatar/5.jpg b/projects/igniteui-angular/src/assets/images/avatar/5.jpg
new file mode 100644
index 00000000000..27087306321
Binary files /dev/null and b/projects/igniteui-angular/src/assets/images/avatar/5.jpg differ
diff --git a/projects/igniteui-angular/src/assets/images/avatar/6.jpg b/projects/igniteui-angular/src/assets/images/avatar/6.jpg
new file mode 100644
index 00000000000..8fbf99325ea
Binary files /dev/null and b/projects/igniteui-angular/src/assets/images/avatar/6.jpg differ
diff --git a/projects/igniteui-angular/src/assets/images/avatar/7.jpg b/projects/igniteui-angular/src/assets/images/avatar/7.jpg
new file mode 100644
index 00000000000..87c0818dc03
Binary files /dev/null and b/projects/igniteui-angular/src/assets/images/avatar/7.jpg differ
diff --git a/projects/igniteui-angular/src/assets/images/avatar/8.jpg b/projects/igniteui-angular/src/assets/images/avatar/8.jpg
new file mode 100644
index 00000000000..52f96f184b6
Binary files /dev/null and b/projects/igniteui-angular/src/assets/images/avatar/8.jpg differ
diff --git a/projects/igniteui-angular/src/assets/images/avatar/9.jpg b/projects/igniteui-angular/src/assets/images/avatar/9.jpg
new file mode 100644
index 00000000000..7175dc3c5d8
Binary files /dev/null and b/projects/igniteui-angular/src/assets/images/avatar/9.jpg differ
diff --git a/projects/igniteui-angular/src/lib/accordion/accordion.component.spec.ts b/projects/igniteui-angular/src/lib/accordion/accordion.component.spec.ts
index 0e3a5a85b6b..0a92c5ce0ce 100644
--- a/projects/igniteui-angular/src/lib/accordion/accordion.component.spec.ts
+++ b/projects/igniteui-angular/src/lib/accordion/accordion.component.spec.ts
@@ -4,7 +4,6 @@ import { waitForAsync, TestBed, fakeAsync, ComponentFixture, tick } from '@angul
import { By } from '@angular/platform-browser';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { IgxExpansionPanelBodyComponent, IgxExpansionPanelComponent, IgxExpansionPanelHeaderComponent, IgxExpansionPanelTitleDirective } from '../expansion-panel/public_api';
-import { configureTestSuite } from '../test-utils/configure-suite';
import { UIInteractions } from '../test-utils/ui-interactions.spec';
import { IAccordionCancelableEventArgs, IAccordionEventArgs, IgxAccordionComponent } from './accordion.component';
import { slideInLeft, slideOutRight } from 'igniteui-angular/animations';
@@ -14,10 +13,9 @@ const PANEL_TAG = 'IGX-EXPANSION-PANEL';
const ACCORDION_TAG = 'IGX-ACCORDION';
describe('Rendering Tests', () => {
- configureTestSuite();
let fix: ComponentFixture;
let accordion: IgxAccordionComponent;
- beforeAll(
+ beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [
diff --git a/projects/igniteui-angular/src/lib/action-strip/action-strip.component.spec.ts b/projects/igniteui-angular/src/lib/action-strip/action-strip.component.spec.ts
index 52e5cca1dbb..b3772ad8e94 100644
--- a/projects/igniteui-angular/src/lib/action-strip/action-strip.component.spec.ts
+++ b/projects/igniteui-angular/src/lib/action-strip/action-strip.component.spec.ts
@@ -1,7 +1,6 @@
import { IgxActionStripComponent, IgxActionStripMenuItemDirective } from './action-strip.component';
import { Component, ViewChild, ElementRef, ViewContainerRef } from '@angular/core';
-import { configureTestSuite } from '../test-utils/configure-suite';
-import { TestBed } from '@angular/core/testing';
+import { TestBed, waitForAsync } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { wait } from '../test-utils/ui-interactions.spec';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
@@ -17,8 +16,8 @@ describe('igxActionStrip', () => {
let parentContainer: ElementRef;
let innerContainer: ViewContainerRef;
- configureTestSuite(() => {
- return TestBed.configureTestingModule({
+ beforeEach(waitForAsync(() => {
+ TestBed.configureTestingModule({
imports: [
NoopAnimationsModule,
IgxActionStripComponent,
@@ -26,8 +25,8 @@ describe('igxActionStrip', () => {
IgxActionStripMenuTestingComponent,
IgxActionStripCombinedMenuTestingComponent
]
- });
- });
+ }).compileComponents();
+ }));
describe('Unit tests: ', () => {
diff --git a/projects/igniteui-angular/src/lib/action-strip/grid-actions/grid-editing-actions.component.spec.ts b/projects/igniteui-angular/src/lib/action-strip/grid-actions/grid-editing-actions.component.spec.ts
index 44dd12f7b0d..4a86a58fdf4 100644
--- a/projects/igniteui-angular/src/lib/action-strip/grid-actions/grid-editing-actions.component.spec.ts
+++ b/projects/igniteui-angular/src/lib/action-strip/grid-actions/grid-editing-actions.component.spec.ts
@@ -3,7 +3,6 @@ import { TestBed, waitForAsync } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
-import { configureTestSuite } from '../../test-utils/configure-suite';
import { IgxGridComponent } from '../../grids/grid/public_api';
import { UIInteractions } from '../../test-utils/ui-interactions.spec';
import { IgxHierarchicalGridActionStripComponent } from '../../test-utils/hierarchical-grid-components.spec';
@@ -21,8 +20,7 @@ describe('igxGridEditingActions #grid ', () => {
let fixture;
let actionStrip: IgxActionStripComponent;
let grid: IgxGridComponent;
- configureTestSuite();
- beforeAll(waitForAsync(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [
NoopAnimationsModule,
diff --git a/projects/igniteui-angular/src/lib/action-strip/grid-actions/grid-pinning-actions.component.spec.ts b/projects/igniteui-angular/src/lib/action-strip/grid-actions/grid-pinning-actions.component.spec.ts
index 8f1fdfb8024..3bf7db5b94d 100644
--- a/projects/igniteui-angular/src/lib/action-strip/grid-actions/grid-pinning-actions.component.spec.ts
+++ b/projects/igniteui-angular/src/lib/action-strip/grid-actions/grid-pinning-actions.component.spec.ts
@@ -1,6 +1,5 @@
import { Component, ViewChild, OnInit } from '@angular/core';
import { IgxActionStripComponent } from '../action-strip.component';
-import { configureTestSuite } from '../../test-utils/configure-suite';
import { TestBed, waitForAsync } from '@angular/core/testing';
import { IgxGridComponent } from '../../grids/grid/public_api';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
@@ -15,8 +14,7 @@ describe('igxGridPinningActions #grid ', () => {
let fixture;
let actionStrip: IgxActionStripComponent;
let grid: IgxGridComponent;
- configureTestSuite();
- beforeAll(waitForAsync(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [
NoopAnimationsModule,
diff --git a/projects/igniteui-angular/src/lib/avatar/avatar.component.spec.ts b/projects/igniteui-angular/src/lib/avatar/avatar.component.spec.ts
index ca076b9da35..5f13ec83de7 100644
--- a/projects/igniteui-angular/src/lib/avatar/avatar.component.spec.ts
+++ b/projects/igniteui-angular/src/lib/avatar/avatar.component.spec.ts
@@ -3,10 +3,7 @@ import { TestBed, waitForAsync } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { IgxAvatarComponent, IgxAvatarType, IgxAvatarSize } from './avatar.component';
-import { configureTestSuite } from '../test-utils/configure-suite';
-
describe('Avatar', () => {
- configureTestSuite();
const baseClass = 'igx-avatar';
const classes = {
@@ -20,7 +17,7 @@ describe('Avatar', () => {
icon: `${baseClass}--icon`
};
- beforeAll(waitForAsync(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [
InitAvatarComponent,
diff --git a/projects/igniteui-angular/src/lib/badge/badge.component.spec.ts b/projects/igniteui-angular/src/lib/badge/badge.component.spec.ts
index f2158afc6e1..d6654f0974e 100644
--- a/projects/igniteui-angular/src/lib/badge/badge.component.spec.ts
+++ b/projects/igniteui-angular/src/lib/badge/badge.component.spec.ts
@@ -3,11 +3,8 @@ import { TestBed, waitForAsync } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { IgxBadgeComponent, IgxBadgeType } from './badge.component';
-import { configureTestSuite } from '../test-utils/configure-suite';
-
describe('Badge', () => {
- configureTestSuite();
- beforeAll(waitForAsync(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [
InitBadgeComponent,
diff --git a/projects/igniteui-angular/src/lib/banner/banner.component.spec.ts b/projects/igniteui-angular/src/lib/banner/banner.component.spec.ts
index f1099d42607..90390efdf62 100644
--- a/projects/igniteui-angular/src/lib/banner/banner.component.spec.ts
+++ b/projects/igniteui-angular/src/lib/banner/banner.component.spec.ts
@@ -3,7 +3,6 @@ import { TestBed, ComponentFixture, tick, fakeAsync, waitForAsync } from '@angul
import { By } from '@angular/platform-browser';
import { IgxBannerComponent } from './banner.component';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
-import { configureTestSuite } from '../test-utils/configure-suite';
import { IgxIconComponent } from '../icon/icon.component';
import { IgxBannerActionsDirective } from './banner.directives';
import { IgxCardComponent, IgxCardContentDirective, IgxCardHeaderComponent } from '../card/card.component';
@@ -24,8 +23,7 @@ describe('igxBanner', () => {
let bannerTextElement: DebugElement = null;
let bannerActionsElement: DebugElement = null;
- configureTestSuite();
- beforeAll(waitForAsync(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [
NoopAnimationsModule,
diff --git a/projects/igniteui-angular/src/lib/buttonGroup/buttongroup.component.spec.ts b/projects/igniteui-angular/src/lib/buttonGroup/buttongroup.component.spec.ts
index c76b35c653f..6f9977c0778 100644
--- a/projects/igniteui-angular/src/lib/buttonGroup/buttongroup.component.spec.ts
+++ b/projects/igniteui-angular/src/lib/buttonGroup/buttongroup.component.spec.ts
@@ -1,7 +1,6 @@
import { Component, OnInit, ViewChild } from '@angular/core';
import { TestBed, fakeAsync, flushMicrotasks, waitForAsync } from '@angular/core/testing';
import { ButtonGroupAlignment, IgxButtonGroupComponent } from './buttonGroup.component';
-import { configureTestSuite } from '../test-utils/configure-suite';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { UIInteractions, wait } from '../test-utils/ui-interactions.spec';
import { IgxButtonDirective } from '../directives/button/button.directive';
@@ -46,8 +45,7 @@ class Button {
describe('IgxButtonGroup', () => {
- configureTestSuite();
- beforeAll(waitForAsync(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [
NoopAnimationsModule,
diff --git a/projects/igniteui-angular/src/lib/calendar/calendar-multi-view.component.spec.ts b/projects/igniteui-angular/src/lib/calendar/calendar-multi-view.component.spec.ts
index 99c1576adbf..f1198142af2 100644
--- a/projects/igniteui-angular/src/lib/calendar/calendar-multi-view.component.spec.ts
+++ b/projects/igniteui-angular/src/lib/calendar/calendar-multi-view.component.spec.ts
@@ -2,7 +2,6 @@ import { Component, ViewChild } from '@angular/core';
import { ComponentFixture, TestBed, fakeAsync, tick, waitForAsync } from '@angular/core/testing';
import { FormsModule } from '@angular/forms';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
-import { configureTestSuite } from '../test-utils/configure-suite';
import { UIInteractions, wait } from '../test-utils/ui-interactions.spec';
import { ymd } from '../test-utils/helper-utils.spec';
import { IgxCalendarComponent } from './public_api';
@@ -13,9 +12,8 @@ import { HelperTestFunctions } from '../test-utils/calendar-helper-utils';
describe('Multi-View Calendar - ', () => {
let fixture: ComponentFixture
let calendar: any;
- configureTestSuite();
- beforeAll(waitForAsync(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [
NoopAnimationsModule,
diff --git a/projects/igniteui-angular/src/lib/calendar/calendar.component.spec.ts b/projects/igniteui-angular/src/lib/calendar/calendar.component.spec.ts
index 273c263963c..1a4454e13af 100644
--- a/projects/igniteui-angular/src/lib/calendar/calendar.component.spec.ts
+++ b/projects/igniteui-angular/src/lib/calendar/calendar.component.spec.ts
@@ -30,7 +30,6 @@ import {
DateRangeType,
} from "../core/dates/dateRange";
-import { configureTestSuite } from "../test-utils/configure-suite";
import { IgxDayItemComponent } from "./days-view/day-item.component";
import { HelperTestFunctions } from "../test-utils/calendar-helper-utils";
@@ -128,9 +127,8 @@ describe("IgxCalendar - ", () => {
});
describe("Basic -", () => {
- configureTestSuite({ checkLeaks: true });
- beforeAll(waitForAsync(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [
NoopAnimationsModule,
diff --git a/projects/igniteui-angular/src/lib/calendar/days-view/days-view.component.spec.ts b/projects/igniteui-angular/src/lib/calendar/days-view/days-view.component.spec.ts
index e0f5eea075a..3759cc71e98 100644
--- a/projects/igniteui-angular/src/lib/calendar/days-view/days-view.component.spec.ts
+++ b/projects/igniteui-angular/src/lib/calendar/days-view/days-view.component.spec.ts
@@ -1,6 +1,5 @@
import { Component, DebugElement, ViewChild } from "@angular/core";
import { IgxDaysViewComponent } from "./days-view.component";
-import { configureTestSuite } from "../../test-utils/configure-suite";
import { ComponentFixture, TestBed, waitForAsync } from "@angular/core/testing";
import { By } from "@angular/platform-browser";
import { UIInteractions } from "../../test-utils/ui-interactions.spec";
@@ -11,10 +10,9 @@ import { ScrollDirection } from "../calendar";
const TODAY = new Date(2024, 6, 12);
describe("Days View Component", () => {
- configureTestSuite();
const baseClass = "igx-days-view";
- beforeAll(waitForAsync(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [InitDaysViewComponent],
}).compileComponents();
diff --git a/projects/igniteui-angular/src/lib/calendar/month-picker/month-picker.component.spec.ts b/projects/igniteui-angular/src/lib/calendar/month-picker/month-picker.component.spec.ts
index 2bb0d16d68f..2827fb99c23 100644
--- a/projects/igniteui-angular/src/lib/calendar/month-picker/month-picker.component.spec.ts
+++ b/projects/igniteui-angular/src/lib/calendar/month-picker/month-picker.component.spec.ts
@@ -4,12 +4,10 @@ import { FormsModule } from '@angular/forms';
import { By } from '@angular/platform-browser';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { UIInteractions } from '../../test-utils/ui-interactions.spec';
-import { configureTestSuite } from '../../test-utils/configure-suite';
import { IgxMonthPickerComponent } from './month-picker.component';
import { IFormattingOptions, IgxCalendarView } from '../calendar';
describe('IgxMonthPicker', () => {
- configureTestSuite();
beforeEach(() => {
TestBed.configureTestingModule({
diff --git a/projects/igniteui-angular/src/lib/card/card.spec.ts b/projects/igniteui-angular/src/lib/card/card.spec.ts
index 35ae76aab43..a43fbd40916 100644
--- a/projects/igniteui-angular/src/lib/card/card.spec.ts
+++ b/projects/igniteui-angular/src/lib/card/card.spec.ts
@@ -12,13 +12,11 @@ import {
IgxCardContentDirective,
} from './card.component';
-import { configureTestSuite } from '../test-utils/configure-suite';
import { IgxButtonDirective } from '../directives/button/button.directive';
import { IgxIconComponent } from '../icon/icon.component';
import { IgxIconButtonDirective } from '../directives/button/icon-button.directive';
describe('Card', () => {
- configureTestSuite();
// TODO: Refactor card tests to reuse components
const baseClass = 'igx-card';
@@ -62,7 +60,7 @@ describe('Card', () => {
media: `${baseClass}__media`
};
- beforeAll(waitForAsync(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [
InitCardComponent,
diff --git a/projects/igniteui-angular/src/lib/carousel/carousel.component.spec.ts b/projects/igniteui-angular/src/lib/carousel/carousel.component.spec.ts
index 3e7a5fed677..b99e6ec5007 100644
--- a/projects/igniteui-angular/src/lib/carousel/carousel.component.spec.ts
+++ b/projects/igniteui-angular/src/lib/carousel/carousel.component.spec.ts
@@ -6,18 +6,16 @@ import {
ISlideEventArgs
} from './carousel.component';
import { UIInteractions, wait } from '../test-utils/ui-interactions.spec';
-import { configureTestSuite } from '../test-utils/configure-suite';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { IgxSlideComponent } from './slide.component';
import { IgxCarouselIndicatorDirective, IgxCarouselNextButtonDirective, IgxCarouselPrevButtonDirective } from './carousel.directives';
import { CarouselIndicatorsOrientation, CarouselAnimationType } from './enums';
describe('Carousel', () => {
- configureTestSuite();
let fixture;
let carousel: IgxCarouselComponent;
- beforeAll(waitForAsync(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [
NoopAnimationsModule,
diff --git a/projects/igniteui-angular/src/lib/checkbox/checkbox.component.spec.ts b/projects/igniteui-angular/src/lib/checkbox/checkbox.component.spec.ts
index cb70e0e51a8..436883f1145 100644
--- a/projects/igniteui-angular/src/lib/checkbox/checkbox.component.spec.ts
+++ b/projects/igniteui-angular/src/lib/checkbox/checkbox.component.spec.ts
@@ -4,12 +4,10 @@ import { UntypedFormBuilder, FormsModule, ReactiveFormsModule, Validators, NgFor
import { By } from '@angular/platform-browser';
import { IgxCheckboxComponent } from './checkbox.component';
-import { configureTestSuite } from '../test-utils/configure-suite';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
describe('IgxCheckbox', () => {
- configureTestSuite();
- beforeAll(waitForAsync(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [
NoopAnimationsModule,
@@ -198,6 +196,8 @@ describe('IgxCheckbox', () => {
const fixture = TestBed.createComponent(IgxCheckboxComponent);
const checkboxInstance = fixture.componentInstance;
+ // For test fixture destroy
+ checkboxInstance.id = "root1";
checkboxInstance.disabled = true;
const nativeCheckbox = checkboxInstance.nativeInput.nativeElement as HTMLInputElement;
const nativeLabel = checkboxInstance.nativeLabel.nativeElement as HTMLLabelElement;
diff --git a/projects/igniteui-angular/src/lib/chips/chip.spec.ts b/projects/igniteui-angular/src/lib/chips/chip.spec.ts
index d60e87f74da..3aa27a14a12 100644
--- a/projects/igniteui-angular/src/lib/chips/chip.spec.ts
+++ b/projects/igniteui-angular/src/lib/chips/chip.spec.ts
@@ -7,7 +7,6 @@ import { IgxPrefixDirective } from './../directives/prefix/prefix.directive';
import { IgxLabelDirective } from './../directives/label/label.directive';
import { IgxSuffixDirective } from './../directives/suffix/suffix.directive';
import { UIInteractions, wait } from '../test-utils/ui-interactions.spec';
-import { configureTestSuite } from '../test-utils/configure-suite';
import { ControlsFunction } from '../test-utils/controls-functions.spec';
import { IgxIconComponent } from '../icon/icon.component';
import { getComponentSize } from '../core/utils';
@@ -103,8 +102,7 @@ describe('IgxChip', () => {
let fix: ComponentFixture;
let chipArea;
- configureTestSuite();
- beforeAll(waitForAsync(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [TestChipComponent, TestChipsLabelAndSuffixComponent]
}).compileComponents();
@@ -142,6 +140,8 @@ describe('IgxChip', () => {
it('should change chip variant', () => {
const fixture = TestBed.createComponent(IgxChipComponent);
const igxChip = fixture.componentInstance;
+ // For test fixture destroy
+ igxChip.id = "root1";
igxChip.variant = 'danger';
@@ -370,6 +370,7 @@ describe('IgxChip', () => {
expect(secondChipComp.selectedChanging.emit).not.toHaveBeenCalled();
expect(secondChipComp.selectedChanged.emit).not.toHaveBeenCalled();
+ // console.log('id', secondChipComp.id);
});
});
diff --git a/projects/igniteui-angular/src/lib/chips/chips-area.spec.ts b/projects/igniteui-angular/src/lib/chips/chips-area.spec.ts
index 66ce7cb05a1..8184038e650 100644
--- a/projects/igniteui-angular/src/lib/chips/chips-area.spec.ts
+++ b/projects/igniteui-angular/src/lib/chips/chips-area.spec.ts
@@ -3,7 +3,6 @@ import { TestBed, waitForAsync } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { IgxChipComponent } from './chip.component';
import { IgxChipsAreaComponent } from './chips-area.component';
-import { configureTestSuite } from '../test-utils/configure-suite';
import { wait, UIInteractions } from '../test-utils/ui-interactions.spec';
import { IgxIconComponent } from '../icon/icon.component';
import { IgxPrefixDirective } from './public_api';
@@ -102,16 +101,14 @@ class TestChipReorderComponent {
describe('IgxChipsArea ', () => {
- configureTestSuite();
const CHIP_REMOVE_BUTTON = 'igx-chip__remove';
- const CHIP_SELECT_ICON = 'igx-chip__select';
const CHIP_AREA_CLASS = 'igx-chip-area';
let fix;
let chipArea: IgxChipsAreaComponent;
let chipAreaElement;
- beforeAll(waitForAsync(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [
TestChipComponent,
diff --git a/projects/igniteui-angular/src/lib/combo/combo.component.spec.ts b/projects/igniteui-angular/src/lib/combo/combo.component.spec.ts
index 5f4c0bdc924..a3cfa04b310 100644
--- a/projects/igniteui-angular/src/lib/combo/combo.component.spec.ts
+++ b/projects/igniteui-angular/src/lib/combo/combo.component.spec.ts
@@ -1,6 +1,6 @@
import { AsyncPipe } from '@angular/common';
import { AfterViewInit, ChangeDetectorRef, Component, DebugElement, ElementRef, Injectable, OnDestroy, OnInit, ViewChild } from '@angular/core';
-import { ComponentFixture, fakeAsync, TestBed, tick } from '@angular/core/testing';
+import { ComponentFixture, fakeAsync, TestBed, tick, waitForAsync } from '@angular/core/testing';
import {
FormsModule, NgControl, NgForm, NgModel, ReactiveFormsModule, UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, Validators
} from '@angular/forms';
@@ -15,7 +15,6 @@ import { IForOfState } from '../directives/for-of/for_of.directive';
import { IgxInputState } from '../directives/input/input.directive';
import { IgxLabelDirective } from '../input-group/public_api';
import { AbsoluteScrollStrategy, ConnectedPositioningStrategy } from '../services/public_api';
-import { configureTestSuite } from '../test-utils/configure-suite';
import { UIInteractions, wait } from '../test-utils/ui-interactions.spec';
import { IgxComboAddItemComponent } from './combo-add-item.component';
import { IgxComboDropDownComponent } from './combo-dropdown.component';
@@ -87,6 +86,11 @@ describe('igxCombo', () => {
});
mockSelection.get.and.returnValue(new Set([]));
const mockDocument = jasmine.createSpyObj('DOCUMENT', [], { 'defaultView': { getComputedStyle: () => null }});
+ jasmine.getEnv().allowRespy(true);
+
+ afterAll(() => {
+ jasmine.getEnv().allowRespy(false);
+ });
it('should correctly implement interface methods - ControlValueAccessor ', () => {
combo = new IgxComboComponent(
@@ -986,8 +990,8 @@ describe('igxCombo', () => {
});
describe('Combo feature tests: ', () => {
- configureTestSuite(() => {
- return TestBed.configureTestingModule({
+ beforeEach(waitForAsync(() => {
+ TestBed.configureTestingModule({
imports: [
NoopAnimationsModule,
IgxComboSampleComponent,
@@ -998,8 +1002,8 @@ describe('igxCombo', () => {
IgxComboFormComponent,
IgxComboInTemplatedFormComponent
]
- });
- });
+ }).compileComponents();
+ }));
describe('Initialization and rendering tests: ', () => {
beforeEach(() => {
diff --git a/projects/igniteui-angular/src/lib/core/styles/components/icon-button/_icon-button-theme.scss b/projects/igniteui-angular/src/lib/core/styles/components/icon-button/_icon-button-theme.scss
index 0b3f0ed4712..ad2ea91c001 100644
--- a/projects/igniteui-angular/src/lib/core/styles/components/icon-button/_icon-button-theme.scss
+++ b/projects/igniteui-angular/src/lib/core/styles/components/icon-button/_icon-button-theme.scss
@@ -243,7 +243,7 @@
}
}
- [igxIconButton='flat'].igx-button--focused {
+ %igx-icon-button--flat.igx-button--focused {
background: var-get($flat-theme, 'focus-background');
color: var-get($flat-theme, 'focus-foreground');
@@ -388,7 +388,7 @@
}
}
- [igxIconButton='outlined'].igx-button--focused {
+ %igx-icon-button--outlined.igx-button--focused {
background: var-get($outlined-theme, 'focus-background');
color: var-get($outlined-theme, 'focus-foreground');
diff --git a/projects/igniteui-angular/src/lib/core/styles/components/input/_input-group-theme.scss b/projects/igniteui-angular/src/lib/core/styles/components/input/_input-group-theme.scss
index a48422df79f..04f05cfc23b 100644
--- a/projects/igniteui-angular/src/lib/core/styles/components/input/_input-group-theme.scss
+++ b/projects/igniteui-angular/src/lib/core/styles/components/input/_input-group-theme.scss
@@ -686,6 +686,10 @@
position: relative;
grid-area: 1 / 2;
+
+ %form-group-label {
+ color: var-get($theme, 'idle-secondary-color');
+ }
}
%igx-input-group__notch--border {
@@ -913,6 +917,14 @@
background: var-get($theme, 'search-disabled-background');
box-shadow: var-get($theme, 'search-disabled-shadow');
border-color: var-get($theme, 'disabled-border-color');
+
+ igx-prefix,
+ [igxPrefix],
+ igx-suffix,
+ [igxSuffix] {
+ background: inherit;
+ color: var-get($theme, 'disabled-text-color');
+ }
}
%form-group-bundle-main--border {
@@ -1667,6 +1679,11 @@
[igxPrefix] {
display: none;
}
+
+ igx-suffix,
+ [igxSuffix] {
+ color: var(--igx-input-group-input-suffix-color--focused, var(--ig-gray-900));
+ }
}
// Bundle
@@ -1831,9 +1848,14 @@
transform-origin: top left;
margin-top: 0 !important;
height: auto;
- margin-block-end: rem(4px);
color: var-get($theme, 'idle-secondary-color');
+ @if $variant == 'fluent' {
+ margin-block-end: rem(5px);
+ } @else {
+ margin-block-end: rem(4px);
+ }
+
[dir='rtl'] & {
transform-origin: top right;
}
diff --git a/projects/igniteui-angular/src/lib/data-operations/filtering-strategy.ts b/projects/igniteui-angular/src/lib/data-operations/filtering-strategy.ts
index bc8812b713b..154cbce8cab 100644
--- a/projects/igniteui-angular/src/lib/data-operations/filtering-strategy.ts
+++ b/projects/igniteui-angular/src/lib/data-operations/filtering-strategy.ts
@@ -194,7 +194,7 @@ export abstract class BaseFilteringStrategy implements IFilteringStrategy {
item.value = key ? new Date(key) : key;
} else if (column.dataType === GridColumnDataType.Time) {
const date = key ? new Date(key) : key;
- key = date ? new Date().setHours(date.getHours(), date.getMinutes(), date.getSeconds()) : key;
+ key = date ? new Date().setHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()) : key;
item.value = key ? new Date(key) : key;
} else if (column.dataType === GridColumnDataType.Date) {
const date = key ? new Date(key) : key;
diff --git a/projects/igniteui-angular/src/lib/date-common/calendar-container/calendar-container.component.spec.ts b/projects/igniteui-angular/src/lib/date-common/calendar-container/calendar-container.component.spec.ts
index ed43b525456..9dc575b3222 100644
--- a/projects/igniteui-angular/src/lib/date-common/calendar-container/calendar-container.component.spec.ts
+++ b/projects/igniteui-angular/src/lib/date-common/calendar-container/calendar-container.component.spec.ts
@@ -4,7 +4,6 @@ import { By } from '@angular/platform-browser';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { IgxCalendarComponent } from '../../calendar/public_api';
import { IgxButtonDirective } from '../../directives/button/button.directive';
-import { configureTestSuite } from '../../test-utils/configure-suite';
import { IgxPickerActionsDirective } from '../picker-icons.common';
import { IgxCalendarContainerComponent } from './calendar-container.component';
@@ -12,8 +11,7 @@ import { IgxCalendarContainerComponent } from './calendar-container.component';
describe('Calendar Container', () => {
let fixture: ComponentFixture;
let container: IgxCalendarContainerComponent;
- configureTestSuite();
- beforeAll(waitForAsync(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [NoopAnimationsModule, IgxDatePickerTestComponent]
}).compileComponents();
diff --git a/projects/igniteui-angular/src/lib/date-common/util/date-time.util.spec.ts b/projects/igniteui-angular/src/lib/date-common/util/date-time.util.spec.ts
index ce2e34b41a1..4777e412448 100644
--- a/projects/igniteui-angular/src/lib/date-common/util/date-time.util.spec.ts
+++ b/projects/igniteui-angular/src/lib/date-common/util/date-time.util.spec.ts
@@ -1,9 +1,8 @@
import { DateTimeUtil } from './date-time.util';
import { DatePart, DatePartInfo } from '../../directives/date-time-editor/date-time-editor.common';
import { DataType } from '../../data-operations/data-util';
-import localeBg from "@angular/common/locales/bg";
import { registerLocaleData } from '@angular/common';
-
+import localeBg from "@angular/common/locales/bg";
const reduceToDictionary = (parts: DatePartInfo[]) => parts.reduce((obj, x) => {
obj[x.type] = x;
@@ -11,9 +10,7 @@ const reduceToDictionary = (parts: DatePartInfo[]) => parts.reduce((obj, x) => {
}, {});
describe(`DateTimeUtil Unit tests`, () => {
-
registerLocaleData(localeBg);
-
describe('Date Time Parsing', () => {
it('should correctly parse all date time parts (base)', () => {
let result = DateTimeUtil.parseDateTimeFormat('dd/MM/yyyy HH:mm:ss:SS a');
diff --git a/projects/igniteui-angular/src/lib/date-picker/date-picker.component.spec.ts b/projects/igniteui-angular/src/lib/date-picker/date-picker.component.spec.ts
index a85061000d8..d208aed8cd2 100644
--- a/projects/igniteui-angular/src/lib/date-picker/date-picker.component.spec.ts
+++ b/projects/igniteui-angular/src/lib/date-picker/date-picker.component.spec.ts
@@ -5,7 +5,6 @@ import { UIInteractions } from '../test-utils/ui-interactions.spec';
import {
IgxHintDirective, IgxInputGroupComponent, IgxInputState, IgxLabelDirective, IgxPrefixDirective, IgxSuffixDirective
} from '../input-group/public_api';
-import { configureTestSuite } from '../test-utils/configure-suite';
import { IFormattingViews, IgxCalendarComponent, IgxCalendarHeaderTemplateDirective, IgxCalendarHeaderTitleTemplateDirective, WEEKDAYS } from '../calendar/public_api';
import { IgxCalendarContainerComponent } from '../date-common/calendar-container/calendar-container.component';
import { IgxDatePickerComponent } from './date-picker.component';
@@ -26,7 +25,6 @@ import localeES from "@angular/common/locales/es";
import localeBg from "@angular/common/locales/bg";
import { IgxDateTimeEditorDirective } from '../directives/date-time-editor/public_api';
-const CSS_CLASS_CALENDAR = 'igx-calendar';
const CSS_CLASS_DATE_PICKER = 'igx-date-picker';
const DATE_PICKER_TOGGLE_ICON = 'calendar_today';
@@ -37,8 +35,7 @@ const CSS_CLASS_INPUT_GROUP_INVALID = 'igx-input-group--invalid';
describe('IgxDatePicker', () => {
describe('Integration tests', () => {
- configureTestSuite();
- beforeAll(waitForAsync(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [
NoopAnimationsModule,
diff --git a/projects/igniteui-angular/src/lib/date-range-picker/date-range-picker.component.spec.ts b/projects/igniteui-angular/src/lib/date-range-picker/date-range-picker.component.spec.ts
index 1479ce05425..01d03dc791d 100644
--- a/projects/igniteui-angular/src/lib/date-range-picker/date-range-picker.component.spec.ts
+++ b/projects/igniteui-angular/src/lib/date-range-picker/date-range-picker.component.spec.ts
@@ -7,7 +7,6 @@ import { FormsModule, ReactiveFormsModule, UntypedFormBuilder, UntypedFormContro
import { By } from '@angular/platform-browser';
import { ControlsFunction } from '../test-utils/controls-functions.spec';
import { UIInteractions } from '../test-utils/ui-interactions.spec';
-import { configureTestSuite } from '../test-utils/configure-suite';
import { HelperTestFunctions } from '../test-utils/calendar-helper-utils';
import { CancelableEventArgs } from '../core/utils';
import { DateRange, IgxDateRangeSeparatorDirective, IgxDateRangeStartComponent } from './date-range-picker-inputs.common';
@@ -308,8 +307,7 @@ describe('IgxDateRangePicker', () => {
describe('Single Input', () => {
let singleInputElement: DebugElement;
- configureTestSuite();
- beforeAll(waitForAsync(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [
NoopAnimationsModule,
@@ -815,8 +813,7 @@ describe('IgxDateRangePicker', () => {
describe('Two Inputs', () => {
let startInput: DebugElement;
let endInput: DebugElement;
- configureTestSuite();
- beforeAll(waitForAsync(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [
NoopAnimationsModule,
@@ -1388,8 +1385,7 @@ describe('IgxDateRangePicker', () => {
});
describe('Rendering', () => {
- configureTestSuite();
- beforeAll(waitForAsync(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [
NoopAnimationsModule,
diff --git a/projects/igniteui-angular/src/lib/dialog/dialog.component.spec.ts b/projects/igniteui-angular/src/lib/dialog/dialog.component.spec.ts
index 798560e991d..8b32c55e33c 100644
--- a/projects/igniteui-angular/src/lib/dialog/dialog.component.spec.ts
+++ b/projects/igniteui-angular/src/lib/dialog/dialog.component.spec.ts
@@ -4,7 +4,6 @@ import { By } from '@angular/platform-browser';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { UIInteractions } from '../test-utils/ui-interactions.spec';
import { IDialogCancellableEventArgs, IDialogEventArgs, IgxDialogComponent } from './dialog.component';
-import { configureTestSuite } from '../test-utils/configure-suite';
import { useAnimation } from '@angular/animations';
import { PositionSettings, HorizontalAlignment, VerticalAlignment } from '../services/overlay/utilities';
import { IgxToggleDirective } from '../directives/toggle/toggle.directive';
@@ -17,8 +16,7 @@ const OVERLAY_MODAL_WRAPPER_CLASS = `${OVERLAY_MAIN_CLASS}__wrapper--modal`;
const CLASS_OVERLAY_CONTENT_MODAL = `${OVERLAY_MAIN_CLASS}__content--modal`;
describe('Dialog', () => {
- configureTestSuite();
- beforeAll(waitForAsync(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [
NoopAnimationsModule,
diff --git a/projects/igniteui-angular/src/lib/directives/autocomplete/autocomplete.directive.spec.ts b/projects/igniteui-angular/src/lib/directives/autocomplete/autocomplete.directive.spec.ts
index 5d4fac049d4..882f7c6ac61 100644
--- a/projects/igniteui-angular/src/lib/directives/autocomplete/autocomplete.directive.spec.ts
+++ b/projects/igniteui-angular/src/lib/directives/autocomplete/autocomplete.directive.spec.ts
@@ -3,7 +3,6 @@ import { TestBed, tick, fakeAsync, waitForAsync } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { IgxAutocompleteDirective, AutocompleteOverlaySettings } from './autocomplete.directive';
-import { configureTestSuite } from '../../test-utils/configure-suite';
import { UIInteractions } from '../../test-utils/ui-interactions.spec';
import { IgxInputDirective } from '../input/input.directive';
import { IgxInputGroupComponent, IgxLabelDirective, IgxPrefixDirective, IgxSuffixDirective } from '../../input-group/public_api';
@@ -25,9 +24,8 @@ describe('IgxAutocomplete', () => {
let group: IgxInputGroupComponent;
let input: IgxInputDirective;
let dropDown: IgxDropDownComponent;
- configureTestSuite();
- beforeAll(waitForAsync(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [
NoopAnimationsModule,
diff --git a/projects/igniteui-angular/src/lib/directives/button/button.directive.spec.ts b/projects/igniteui-angular/src/lib/directives/button/button.directive.spec.ts
index f4fbdd53c10..bfceddb34f1 100644
--- a/projects/igniteui-angular/src/lib/directives/button/button.directive.spec.ts
+++ b/projects/igniteui-angular/src/lib/directives/button/button.directive.spec.ts
@@ -3,14 +3,12 @@ import { TestBed, waitForAsync } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { IgxButtonDirective } from './button.directive';
-import { configureTestSuite } from '../../test-utils/configure-suite';
import { IgxRippleDirective } from '../ripple/ripple.directive';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
const BUTTON_COMFORTABLE = 'igx-button';
describe('IgxButton', () => {
- configureTestSuite({ checkLeaks: true });
const baseClass = BUTTON_COMFORTABLE;
const classes = {
@@ -20,7 +18,7 @@ describe('IgxButton', () => {
fab: `${baseClass}--fab`,
};
- beforeAll(waitForAsync(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [
NoopAnimationsModule,
diff --git a/projects/igniteui-angular/src/lib/directives/button/icon-button.directive.spec.ts b/projects/igniteui-angular/src/lib/directives/button/icon-button.directive.spec.ts
index bb6fae9134e..cde17b254e5 100644
--- a/projects/igniteui-angular/src/lib/directives/button/icon-button.directive.spec.ts
+++ b/projects/igniteui-angular/src/lib/directives/button/icon-button.directive.spec.ts
@@ -1,5 +1,4 @@
import { TestBed, waitForAsync } from '@angular/core/testing';
-import { configureTestSuite } from '../../test-utils/configure-suite';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { Component, ViewChild } from '@angular/core';
import { IgxIconButtonDirective } from './icon-button.directive';
@@ -8,7 +7,6 @@ import { By } from '@angular/platform-browser';
import { IgxIconComponent } from '../../icon/icon.component';
describe('IgxIconButton', () => {
- configureTestSuite();
const baseClass = 'igx-icon-button';
const classes = {
@@ -17,7 +15,7 @@ describe('IgxIconButton', () => {
outlined: `${baseClass}--outlined`,
};
- beforeAll(waitForAsync(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [
NoopAnimationsModule,
diff --git a/projects/igniteui-angular/src/lib/directives/date-time-editor/date-time-editor.directive.spec.ts b/projects/igniteui-angular/src/lib/directives/date-time-editor/date-time-editor.directive.spec.ts
index 2dd6467d45e..3ea35f42e65 100644
--- a/projects/igniteui-angular/src/lib/directives/date-time-editor/date-time-editor.directive.spec.ts
+++ b/projects/igniteui-angular/src/lib/directives/date-time-editor/date-time-editor.directive.spec.ts
@@ -7,7 +7,6 @@ import { FormsModule, UntypedFormGroup, UntypedFormBuilder, ReactiveFormsModule,
import { By } from '@angular/platform-browser';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { IgxInputGroupComponent, IgxInputDirective } from '../../input-group/public_api';
-import { configureTestSuite } from '../../test-utils/configure-suite';
import { ControlsFunction } from '../../test-utils/controls-functions.spec';
import { UIInteractions } from '../../test-utils/ui-interactions.spec';
import { ViewEncapsulation } from '@angular/core';
@@ -499,8 +498,7 @@ describe('IgxDateTimeEditor', () => {
let inputElement: DebugElement;
let dateTimeEditorDirective: IgxDateTimeEditorDirective;
describe('Key interaction tests', () => {
- configureTestSuite();
- beforeAll(waitForAsync(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [
NoopAnimationsModule,
@@ -1286,8 +1284,7 @@ describe('IgxDateTimeEditor', () => {
describe('Form control tests: ', () => {
let form: UntypedFormGroup;
- configureTestSuite();
- beforeAll(waitForAsync(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [
NoopAnimationsModule,
diff --git a/projects/igniteui-angular/src/lib/directives/divider/divider.spec.ts b/projects/igniteui-angular/src/lib/directives/divider/divider.spec.ts
index 026868321b6..3c6eaa204ce 100644
--- a/projects/igniteui-angular/src/lib/directives/divider/divider.spec.ts
+++ b/projects/igniteui-angular/src/lib/directives/divider/divider.spec.ts
@@ -2,11 +2,9 @@ import { Component } from '@angular/core';
import { TestBed, ComponentFixture, waitForAsync } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
-import { configureTestSuite } from '../../test-utils/configure-suite';
import { IgxDividerDirective, IgxDividerType } from './divider.directive';
describe('Divider', () => {
- configureTestSuite();
const baseClass = 'igx-divider';
const classes = {
@@ -17,7 +15,7 @@ describe('Divider', () => {
let fixture: ComponentFixture;
- beforeAll(waitForAsync(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [TestDividerComponent]
}).compileComponents();
diff --git a/projects/igniteui-angular/src/lib/directives/drag-drop/drag-drop.spec.ts b/projects/igniteui-angular/src/lib/directives/drag-drop/drag-drop.spec.ts
index 6a3acf17d69..2fc26885b7c 100644
--- a/projects/igniteui-angular/src/lib/directives/drag-drop/drag-drop.spec.ts
+++ b/projects/igniteui-angular/src/lib/directives/drag-drop/drag-drop.spec.ts
@@ -2,7 +2,6 @@ import { Component, ViewChildren, QueryList, ViewChild, ElementRef, TemplateRef,
import { TestBed, ComponentFixture, waitForAsync } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { UIInteractions, wait} from '../../test-utils/ui-interactions.spec';
-import { configureTestSuite } from '../../test-utils/configure-suite';
import { first } from 'rxjs/operators';
import { IgxInsertDropStrategy, IgxAppendDropStrategy, IgxPrependDropStrategy } from './drag-drop.strategy';
import {
@@ -22,8 +21,7 @@ describe('General igxDrag/igxDrop', () => {
let dropAreaRects = { top: 0, left: 0, right: 0, bottom: 0};
let dragDirsRects = [{ top: 0, left: 0, right: 0, bottom: 0}];
- configureTestSuite({ checkLeaks: true });
- beforeAll(waitForAsync(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [TestDragDropComponent]
})
@@ -1393,8 +1391,7 @@ describe('General igxDrag/igxDrop', () => {
});
describe('Linked igxDrag/igxDrop ', () => {
- configureTestSuite();
- beforeAll(waitForAsync(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [
TestDragDropLinkedSingleComponent,
@@ -1876,8 +1873,7 @@ describe('Linked igxDrag/igxDrop ', () => {
});
describe('Nested igxDrag elements', () => {
- configureTestSuite();
- beforeAll(waitForAsync(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [TestDragDropNestedComponent]
})
diff --git a/projects/igniteui-angular/src/lib/directives/filter/filter.directive.spec.ts b/projects/igniteui-angular/src/lib/directives/filter/filter.directive.spec.ts
index dd91e2c86da..ce4387a8ae6 100644
--- a/projects/igniteui-angular/src/lib/directives/filter/filter.directive.spec.ts
+++ b/projects/igniteui-angular/src/lib/directives/filter/filter.directive.spec.ts
@@ -4,11 +4,8 @@ import { IgxListItemComponent } from '../../list/list-item.component';
import { IgxListComponent } from '../../list/list.component';
import { IgxFilterDirective, IgxFilterOptions, IgxFilterPipe } from './filter.directive';
-import { configureTestSuite } from '../../test-utils/configure-suite';
-
describe('Filter', () => {
- configureTestSuite();
- beforeAll(waitForAsync(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [DeclarativeListTestComponent, DynamicListTestComponent],
providers: [
diff --git a/projects/igniteui-angular/src/lib/directives/focus-trap/focus-trap.directive.spec.ts b/projects/igniteui-angular/src/lib/directives/focus-trap/focus-trap.directive.spec.ts
index e960b7b34e6..8f0e8c5385b 100644
--- a/projects/igniteui-angular/src/lib/directives/focus-trap/focus-trap.directive.spec.ts
+++ b/projects/igniteui-angular/src/lib/directives/focus-trap/focus-trap.directive.spec.ts
@@ -3,13 +3,11 @@ import { fakeAsync, TestBed, tick, waitForAsync } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { IgxFocusTrapDirective } from './focus-trap.directive';
-import { configureTestSuite } from '../../test-utils/configure-suite';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { UIInteractions } from '../../test-utils/ui-interactions.spec';
describe('igxFocusTrap', () => {
- configureTestSuite();
- beforeAll(waitForAsync(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [NoopAnimationsModule, TrapFocusTestComponent]
}).compileComponents();
diff --git a/projects/igniteui-angular/src/lib/directives/focus/focus.directive.spec.ts b/projects/igniteui-angular/src/lib/directives/focus/focus.directive.spec.ts
index 6c7a947f00c..30875d5ef94 100644
--- a/projects/igniteui-angular/src/lib/directives/focus/focus.directive.spec.ts
+++ b/projects/igniteui-angular/src/lib/directives/focus/focus.directive.spec.ts
@@ -3,7 +3,6 @@ import { TestBed, fakeAsync, tick, waitForAsync } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { IgxFocusDirective } from './focus.directive';
-import { configureTestSuite } from '../../test-utils/configure-suite';
import { EditorProvider } from '../../core/edit-provider';
import { IgxCheckboxComponent } from '../../checkbox/checkbox.component';
import { IgxDatePickerComponent } from '../../date-picker/public_api';
@@ -12,8 +11,7 @@ import { IgxRadioComponent } from '../../radio/radio.component';
import { IgxSwitchComponent } from '../../switch/switch.component';
describe('igxFocus', () => {
- configureTestSuite();
- beforeAll(waitForAsync(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [
NoopAnimationsModule,
diff --git a/projects/igniteui-angular/src/lib/directives/for-of/for_of.directive.spec.ts b/projects/igniteui-angular/src/lib/directives/for-of/for_of.directive.spec.ts
index 7c5872e7e4f..d4e2e4f1d3a 100644
--- a/projects/igniteui-angular/src/lib/directives/for-of/for_of.directive.spec.ts
+++ b/projects/igniteui-angular/src/lib/directives/for-of/for_of.directive.spec.ts
@@ -17,13 +17,12 @@ import {
Pipe,
PipeTransform
} from '@angular/core';
-import { TestBed, ComponentFixture } from '@angular/core/testing';
+import { TestBed, ComponentFixture, waitForAsync } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { BehaviorSubject, Observable } from 'rxjs';
import { IForOfState, IgxForOfDirective } from './for_of.directive';
import { UIInteractions, wait } from '../../test-utils/ui-interactions.spec';
-import { configureTestSuite } from '../../test-utils/configure-suite';
import { IgxForOfScrollSyncService } from './for_of.sync.service';
import { PlatformUtil } from '../../core/utils';
@@ -42,10 +41,10 @@ describe('IgxForOf directive -', () => {
});
describe('empty virtual component', () => {
- configureTestSuite((() => {
+ beforeEach(waitForAsync(() => {
return TestBed.configureTestingModule({
imports: [EmptyVirtualComponent]
- });
+ }).compileComponents();
}));
it('should initialize empty directive', () => {
@@ -59,10 +58,10 @@ describe('IgxForOf directive -', () => {
describe('horizontal virtual component', () => {
let fix: ComponentFixture;
- configureTestSuite((() => {
+ beforeEach(waitForAsync(() => {
return TestBed.configureTestingModule({
imports: [HorizontalVirtualComponent]
- });
+ }).compileComponents();
}));
beforeEach(() => {
@@ -222,10 +221,12 @@ describe('IgxForOf directive -', () => {
describe('vertical virtual component', () => {
let fix: ComponentFixture;
- configureTestSuite((() => {
- return TestBed.configureTestingModule({
- imports: [VerticalVirtualNoDataComponent, VerticalVirtualComponent]
- });
+ beforeEach(waitForAsync(() => {
+ TestBed.configureTestingModule({
+ imports: [
+ VerticalVirtualNoDataComponent, VerticalVirtualComponent
+ ]
+ }).compileComponents();
}));
beforeEach(() => {
@@ -386,10 +387,12 @@ describe('IgxForOf directive -', () => {
describe('vertical virtual component no data', () => {
let fix: ComponentFixture;
- configureTestSuite((() => {
- return TestBed.configureTestingModule({
- imports: [VerticalVirtualNoDataComponent, VerticalVirtualComponent]
- });
+ beforeEach(waitForAsync(() => {
+ TestBed.configureTestingModule({
+ imports: [
+ VerticalVirtualNoDataComponent, VerticalVirtualComponent
+ ]
+ }).compileComponents();
}));
beforeEach(() => {
@@ -422,10 +425,12 @@ describe('IgxForOf directive -', () => {
describe('vertical and horizontal virtual component', () => {
let fix: ComponentFixture;
- configureTestSuite((() => {
- return TestBed.configureTestingModule({
- imports: [VirtualComponent]
- });
+ beforeEach(waitForAsync(() => {
+ TestBed.configureTestingModule({
+ imports: [
+ VirtualComponent
+ ]
+ }).compileComponents();
}));
beforeEach(() => {
@@ -1002,10 +1007,12 @@ describe('IgxForOf directive -', () => {
});
describe('variable size component', () => {
- configureTestSuite((() => {
- return TestBed.configureTestingModule({
- imports: [VirtualVariableSizeComponent]
- });
+ beforeEach(waitForAsync(() => {
+ TestBed.configureTestingModule({
+ imports: [
+ VirtualVariableSizeComponent
+ ]
+ }).compileComponents();
}));
it('should update display container classes when content state changes from virtualized to non-virtualized.', () => {
@@ -1043,10 +1050,12 @@ describe('IgxForOf directive -', () => {
});
describe('remote virtual component', () => {
- configureTestSuite((() => {
- return TestBed.configureTestingModule({
- imports: [RemoteVirtualizationComponent]
- });
+ beforeEach(waitForAsync(() => {
+ TestBed.configureTestingModule({
+ imports: [
+ RemoteVirtualizationComponent
+ ]
+ }).compileComponents();
}));
it('should allow remote virtualization', async () => {
@@ -1080,10 +1089,12 @@ describe('IgxForOf directive -', () => {
});
describe('remote virtual component with specified igxForTotalItemCount', () => {
- configureTestSuite((() => {
- return TestBed.configureTestingModule({
- imports: [RemoteVirtCountComponent]
- });
+ beforeEach(waitForAsync(() => {
+ TestBed.configureTestingModule({
+ imports: [
+ RemoteVirtCountComponent
+ ]
+ }).compileComponents();
}));
it('should apply remote virtualization correctly', async () => {
@@ -1117,10 +1128,12 @@ describe('IgxForOf directive -', () => {
});
describe('no width and height component', () => {
- configureTestSuite((() => {
- return TestBed.configureTestingModule({
- imports: [NoWidthAndHeightComponent]
- });
+ beforeEach(waitForAsync(() => {
+ TestBed.configureTestingModule({
+ imports: [
+ NoWidthAndHeightComponent
+ ]
+ }).compileComponents();
}));
it('should use itemSize when no width or height are provided', () => {
@@ -1136,10 +1149,12 @@ describe('IgxForOf directive -', () => {
});
describe('even odd first last functions', () => {
- configureTestSuite((() => {
- return TestBed.configureTestingModule({
- imports: [LocalVariablesComponent]
- });
+ beforeEach(waitForAsync(() => {
+ TestBed.configureTestingModule({
+ imports: [
+ LocalVariablesComponent
+ ]
+ }).compileComponents();
}));
it('should differentiate even odd items', () => {
@@ -1164,10 +1179,12 @@ describe('IgxForOf directive -', () => {
});
describe('`as` syntax', () => {
- configureTestSuite((() => {
- return TestBed.configureTestingModule({
- imports: [LocalVariablesAsComponent]
- });
+ beforeEach(waitForAsync(() => {
+ TestBed.configureTestingModule({
+ imports: [
+ LocalVariablesAsComponent
+ ]
+ }).compileComponents();
}));
it('should get correct data using `as` syntax', () => {
@@ -1185,10 +1202,12 @@ describe('IgxForOf directive -', () => {
describe('on destroy', () => {
let fix: ComponentFixture;
- configureTestSuite((() => {
- return TestBed.configureTestingModule({
- imports: [VerticalVirtualDestroyComponent]
- });
+ beforeEach(waitForAsync(() => {
+ TestBed.configureTestingModule({
+ imports: [
+ VerticalVirtualDestroyComponent
+ ]
+ }).compileComponents();
}));
beforeEach(() => {
@@ -1230,10 +1249,12 @@ describe('IgxForOf directive -', () => {
describe('on create new instance', () => {
let fix: ComponentFixture;
- configureTestSuite((() => {
- return TestBed.configureTestingModule({
- imports: [VerticalVirtualCreateComponent]
- });
+ beforeEach(waitForAsync(() => {
+ TestBed.configureTestingModule({
+ imports: [
+ VerticalVirtualCreateComponent
+ ]
+ }).compileComponents();
}));
beforeEach(() => {
@@ -1241,7 +1262,6 @@ describe('IgxForOf directive -', () => {
fix.componentInstance.data = dg.generateVerticalData(fix.componentInstance.cols);
fix.componentRef.hostView.detectChanges();
fix.detectChanges();
-
});
it('should reset scroll position if new component is created.', async () => {
diff --git a/projects/igniteui-angular/src/lib/directives/form-control/form-control.directive.spec.ts b/projects/igniteui-angular/src/lib/directives/form-control/form-control.directive.spec.ts
index b9df489d53b..d7fbf5bec89 100644
--- a/projects/igniteui-angular/src/lib/directives/form-control/form-control.directive.spec.ts
+++ b/projects/igniteui-angular/src/lib/directives/form-control/form-control.directive.spec.ts
@@ -4,7 +4,6 @@ import { FormsModule } from '@angular/forms';
import { By } from '@angular/platform-browser';
import { defineComponents, IgcRatingComponent } from 'igniteui-webcomponents';
-import { configureTestSuite } from '../../test-utils/configure-suite';
import { IgcFormControlDirective } from './form-control.directive';
describe('IgcFormControlDirective - ', () => {
@@ -16,8 +15,7 @@ describe('IgcFormControlDirective - ', () => {
describe('Unit tests: ', () => {
- configureTestSuite();
- beforeAll(waitForAsync(() => {
+ beforeEach(waitForAsync(() => {
defineComponents(IgcRatingComponent);
}));
@@ -62,8 +60,7 @@ describe('IgcFormControlDirective - ', () => {
});
describe('ngModel two-way binding tests: ', () => {
- configureTestSuite();
- beforeAll(waitForAsync(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [
IgxFormsControlComponent
diff --git a/projects/igniteui-angular/src/lib/directives/hint/hint.directive.spec.ts b/projects/igniteui-angular/src/lib/directives/hint/hint.directive.spec.ts
index a01c7b0c00d..b7561ac161c 100644
--- a/projects/igniteui-angular/src/lib/directives/hint/hint.directive.spec.ts
+++ b/projects/igniteui-angular/src/lib/directives/hint/hint.directive.spec.ts
@@ -2,15 +2,13 @@ import { Component } from '@angular/core';
import { TestBed, waitForAsync } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
-import { configureTestSuite } from '../../test-utils/configure-suite';
import { IgxHintDirective } from './hint.directive';
describe('IgxHint', () => {
- configureTestSuite();
const HINT_START_CSS_CLASS = 'igx-input-group__hint-item--start';
const HINT_END_CSS_CLASS = 'igx-input-group__hint-item--end';
- beforeAll(waitForAsync(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [
HintComponent,
diff --git a/projects/igniteui-angular/src/lib/directives/input/input.directive.spec.ts b/projects/igniteui-angular/src/lib/directives/input/input.directive.spec.ts
index f5711dae3fe..5142e7030fd 100644
--- a/projects/igniteui-angular/src/lib/directives/input/input.directive.spec.ts
+++ b/projects/igniteui-angular/src/lib/directives/input/input.directive.spec.ts
@@ -4,7 +4,6 @@ import { FormsModule, UntypedFormBuilder, ReactiveFormsModule, Validators, Untyp
import { By } from '@angular/platform-browser';
import { IgxInputGroupComponent } from '../../input-group/input-group.component';
import { IgxInputDirective, IgxInputState } from './input.directive';
-import { configureTestSuite } from '../../test-utils/configure-suite';
import { UIInteractions } from '../../test-utils/ui-interactions.spec';
import { IgxLabelDirective } from '../label/label.directive';
import { IgxSuffixDirective } from '../suffix/suffix.directive';
@@ -25,8 +24,7 @@ const INPUT_GROUP_VALID_CSS_CLASS = 'igx-input-group--valid';
const INPUT_GROUP_INVALID_CSS_CLASS = 'igx-input-group--invalid';
describe('IgxInput', () => {
- configureTestSuite();
- beforeAll(waitForAsync(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [
InputComponent,
diff --git a/projects/igniteui-angular/src/lib/directives/layout/layout.directive.spec.ts b/projects/igniteui-angular/src/lib/directives/layout/layout.directive.spec.ts
index a849f18f2b1..0a416c690ae 100644
--- a/projects/igniteui-angular/src/lib/directives/layout/layout.directive.spec.ts
+++ b/projects/igniteui-angular/src/lib/directives/layout/layout.directive.spec.ts
@@ -3,11 +3,8 @@ import { TestBed, waitForAsync } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { IgxFlexDirective, IgxLayoutDirective } from './layout.directive';
-import { configureTestSuite } from '../../test-utils/configure-suite';
-
describe('IgxLayoutDirective', () => {
- configureTestSuite();
- beforeAll(waitForAsync(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [TestFlexLayoutComponent]
}).compileComponents();
diff --git a/projects/igniteui-angular/src/lib/directives/mask/mask.directive.spec.ts b/projects/igniteui-angular/src/lib/directives/mask/mask.directive.spec.ts
index 875da952d73..3bd850f15f6 100644
--- a/projects/igniteui-angular/src/lib/directives/mask/mask.directive.spec.ts
+++ b/projects/igniteui-angular/src/lib/directives/mask/mask.directive.spec.ts
@@ -3,7 +3,6 @@ import { fakeAsync, TestBed, tick, waitForAsync } from '@angular/core/testing';
import { FormsModule } from '@angular/forms';
import { IgxMaskDirective } from './mask.directive';
-import { configureTestSuite } from '../../test-utils/configure-suite';
import { UIInteractions } from '../../test-utils/ui-interactions.spec';
import { Replaced } from './mask-parsing.service';
import { By } from '@angular/platform-browser';
@@ -11,9 +10,8 @@ import { IgxInputGroupComponent } from '../../input-group/input-group.component'
import { IgxInputDirective } from '../input/input.directive';
describe('igxMask', () => {
- configureTestSuite();
// TODO: Refactor tests to reuse components
- beforeAll(waitForAsync(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [
AlphanumSpaceMaskComponent,
diff --git a/projects/igniteui-angular/src/lib/directives/radio/radio-group.directive.spec.ts b/projects/igniteui-angular/src/lib/directives/radio/radio-group.directive.spec.ts
index b8c3c2391f6..eaf9a19cba3 100644
--- a/projects/igniteui-angular/src/lib/directives/radio/radio-group.directive.spec.ts
+++ b/projects/igniteui-angular/src/lib/directives/radio/radio-group.directive.spec.ts
@@ -3,14 +3,12 @@ import { TestBed, fakeAsync, tick, waitForAsync } from '@angular/core/testing';
import { IgxRadioGroupDirective } from './radio-group.directive';
import { FormsModule, ReactiveFormsModule, UntypedFormGroup, UntypedFormBuilder, FormGroup, FormControl } from '@angular/forms';
-import { configureTestSuite } from '../../test-utils/configure-suite';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { By } from '@angular/platform-browser';
import { IgxRadioComponent } from '../../radio/radio.component';
describe('IgxRadioGroupDirective', () => {
- configureTestSuite();
- beforeAll(waitForAsync(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [
FormsModule,
diff --git a/projects/igniteui-angular/src/lib/directives/scroll-inertia/scroll_inertia.directive.spec.ts b/projects/igniteui-angular/src/lib/directives/scroll-inertia/scroll_inertia.directive.spec.ts
index 4cdf44f240a..71f5face630 100644
--- a/projects/igniteui-angular/src/lib/directives/scroll-inertia/scroll_inertia.directive.spec.ts
+++ b/projects/igniteui-angular/src/lib/directives/scroll-inertia/scroll_inertia.directive.spec.ts
@@ -9,14 +9,12 @@ import {
import { TestBed, ComponentFixture, fakeAsync, tick, waitForAsync } from '@angular/core/testing';
import { IgxScrollInertiaDirective } from './scroll_inertia.directive';
-import { configureTestSuite } from '../../test-utils/configure-suite';
import { wait } from '../../test-utils/ui-interactions.spec';
describe('Scroll Inertia Directive - Rendering', () => {
let fix: ComponentFixture;
- configureTestSuite({ checkLeaks: true });
- beforeAll(waitForAsync(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [
IgxTestScrollInertiaDirective,
diff --git a/projects/igniteui-angular/src/lib/directives/text-highlight/text-highlight.directive.spec.ts b/projects/igniteui-angular/src/lib/directives/text-highlight/text-highlight.directive.spec.ts
index 7e8ea0514a5..faa0a923117 100644
--- a/projects/igniteui-angular/src/lib/directives/text-highlight/text-highlight.directive.spec.ts
+++ b/projects/igniteui-angular/src/lib/directives/text-highlight/text-highlight.directive.spec.ts
@@ -3,12 +3,10 @@ import { TestBed, waitForAsync } from '@angular/core/testing';
import { IgxTextHighlightDirective, IActiveHighlightInfo} from './text-highlight.directive';
-import { configureTestSuite } from '../../test-utils/configure-suite';
import { IgxTextHighlightService } from './text-highlight.service';
describe('IgxHighlight', () => {
- configureTestSuite();
- beforeAll(waitForAsync(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [
HighlightLoremIpsumComponent
@@ -299,6 +297,17 @@ describe('IgxHighlight', () => {
expect(() => component.highlight.activateIfNecessary()).not.toThrowError();
});
+ it('Should not throw when attempting to activate a non-existing group.', () => {
+ const fix = TestBed.createComponent(HighlightLoremIpsumComponent);
+ fix.detectChanges();
+
+ const component: HighlightLoremIpsumComponent = fix.debugElement.componentInstance;
+ component.highlightText('a');
+ component.groupName = 'test1';
+ fix.detectChanges();
+
+ expect(() => component.highlight.activateIfNecessary()).not.toThrowError();
+ });
});
@Component({
diff --git a/projects/igniteui-angular/src/lib/directives/text-highlight/text-highlight.directive.ts b/projects/igniteui-angular/src/lib/directives/text-highlight/text-highlight.directive.ts
index 80869480496..5a7a1794f7e 100644
--- a/projects/igniteui-angular/src/lib/directives/text-highlight/text-highlight.directive.ts
+++ b/projects/igniteui-angular/src/lib/directives/text-highlight/text-highlight.directive.ts
@@ -318,7 +318,7 @@ export class IgxTextHighlightDirective implements AfterViewInit, AfterViewChecke
public activateIfNecessary(): void {
const group = this.service.highlightGroupsMap.get(this.groupName);
- if (group.index >= 0 && group.column === this.column && group.row === this.row && compareMaps(this.metadata, group.metadata)) {
+ if (group && group.index >= 0 && group.column === this.column && group.row === this.row && compareMaps(this.metadata, group.metadata)) {
this.activate(group.index);
}
}
diff --git a/projects/igniteui-angular/src/lib/directives/text-selection/text-selection.directive.spec.ts b/projects/igniteui-angular/src/lib/directives/text-selection/text-selection.directive.spec.ts
index b87e51cecc9..777675ef759 100644
--- a/projects/igniteui-angular/src/lib/directives/text-selection/text-selection.directive.spec.ts
+++ b/projects/igniteui-angular/src/lib/directives/text-selection/text-selection.directive.spec.ts
@@ -2,12 +2,10 @@ import { Component, DebugElement, Directive, ElementRef, HostListener, ViewChild
import { fakeAsync, TestBed, tick, waitForAsync } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
-import { configureTestSuite } from '../../test-utils/configure-suite';
import { IgxTextSelectionDirective } from './text-selection.directive';
describe('IgxSelection', () => {
- configureTestSuite();
- beforeAll(waitForAsync(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [
TriggerTextSelectionComponent,
diff --git a/projects/igniteui-angular/src/lib/directives/toggle/toggle.directive.spec.ts b/projects/igniteui-angular/src/lib/directives/toggle/toggle.directive.spec.ts
index 8f2b114d605..8180148ca75 100644
--- a/projects/igniteui-angular/src/lib/directives/toggle/toggle.directive.spec.ts
+++ b/projects/igniteui-angular/src/lib/directives/toggle/toggle.directive.spec.ts
@@ -9,15 +9,13 @@ import {
} from '../../services/public_api';
import { CancelableEventArgs } from '../../core/utils';
-import { configureTestSuite } from '../../test-utils/configure-suite';
import { first } from 'rxjs/operators';
import { OffsetMode } from '../../services/overlay/utilities';
describe('IgxToggle', () => {
- configureTestSuite();
const HIDDEN_TOGGLER_CLASS = 'igx-toggle--hidden';
const TOGGLER_CLASS = 'igx-toggle';
- beforeAll(waitForAsync(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [
NoopAnimationsModule,
@@ -507,7 +505,6 @@ describe('IgxToggle', () => {
}));
describe('overlay settings', () => {
- // configureTestSuite();
it('should pass correct defaults from IgxToggleActionDirective and respect outsideClickClose', fakeAsync(() => {
const fixture = TestBed.createComponent(IgxToggleActionTestComponent);
fixture.detectChanges();
diff --git a/projects/igniteui-angular/src/lib/directives/tooltip/tooltip.directive.spec.ts b/projects/igniteui-angular/src/lib/directives/tooltip/tooltip.directive.spec.ts
index b4305593956..8ad613b4861 100644
--- a/projects/igniteui-angular/src/lib/directives/tooltip/tooltip.directive.spec.ts
+++ b/projects/igniteui-angular/src/lib/directives/tooltip/tooltip.directive.spec.ts
@@ -3,7 +3,6 @@ import { By } from '@angular/platform-browser';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { IgxTooltipSingleTargetComponent, IgxTooltipMultipleTargetsComponent, IgxTooltipPlainStringComponent, IgxTooltipWithToggleActionComponent } from '../../test-utils/tooltip-components.spec';
import { UIInteractions } from '../../test-utils/ui-interactions.spec';
-import { configureTestSuite } from '../../test-utils/configure-suite';
import { HorizontalAlignment, VerticalAlignment, AutoPositionStrategy } from '../../services/public_api';
import { IgxTooltipDirective } from './tooltip.directive';
import { IgxTooltipTargetDirective } from './tooltip-target.directive';
@@ -12,13 +11,12 @@ const HIDDEN_TOOLTIP_CLASS = 'igx-tooltip--hidden';
const TOOLTIP_CLASS = 'igx-tooltip';
describe('IgxTooltip', () => {
- configureTestSuite();
let fix;
let tooltipNativeElement;
let tooltipTarget: IgxTooltipTargetDirective;
let button;
- beforeAll(waitForAsync(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [
NoopAnimationsModule,
@@ -36,7 +34,6 @@ describe('IgxTooltip', () => {
});
describe('Single target with single tooltip', () => {
- // configureTestSuite();
beforeEach(waitForAsync(() => {
fix = TestBed.createComponent(IgxTooltipSingleTargetComponent);
fix.detectChanges();
@@ -272,7 +269,6 @@ describe('IgxTooltip', () => {
}));
describe('Tooltip events', () => {
- // configureTestSuite();
it('should emit the proper events when hovering/unhovering target', fakeAsync(() => {
spyOn(tooltipTarget.tooltipShow, 'emit');
spyOn(tooltipTarget.tooltipHide, 'emit');
@@ -379,7 +375,6 @@ describe('IgxTooltip', () => {
});
describe('Tooltip touch', () => {
- // configureTestSuite();
it('IgxTooltip is shown/hidden when touching/untouching its target', fakeAsync(() => {
touchElement(button);
flush();
@@ -447,7 +442,6 @@ describe('IgxTooltip', () => {
});
describe('Plain string tooltip input', () => {
- // configureTestSuite();
beforeEach(waitForAsync(() => {
fix = TestBed.createComponent(IgxTooltipPlainStringComponent);
fix.detectChanges();
@@ -476,7 +470,6 @@ describe('IgxTooltip', () => {
});
describe('Multiple targets with single tooltip', () => {
- // configureTestSuite();
let targetOne: IgxTooltipTargetDirective;
let targetTwo: IgxTooltipTargetDirective;
let buttonOne;
diff --git a/projects/igniteui-angular/src/lib/drop-down/drop-down.component.spec.ts b/projects/igniteui-angular/src/lib/drop-down/drop-down.component.spec.ts
index d1285e3e6af..4aa4089fef9 100644
--- a/projects/igniteui-angular/src/lib/drop-down/drop-down.component.spec.ts
+++ b/projects/igniteui-angular/src/lib/drop-down/drop-down.component.spec.ts
@@ -9,7 +9,6 @@ import { ISelectionEventArgs } from './drop-down.common';
import { IgxTabContentComponent, IgxTabHeaderComponent, IgxTabItemComponent, IgxTabsComponent } from '../tabs/tabs/public_api';
import { UIInteractions, wait } from '../test-utils/ui-interactions.spec';
import { CancelableEventArgs, IBaseCancelableBrowserEventArgs } from '../core/utils';
-import { configureTestSuite } from '../test-utils/configure-suite';
import { take } from 'rxjs/operators';
import { IgxDropDownGroupComponent } from './drop-down-group.component';
import { IgxForOfDirective } from '../directives/for-of/for_of.directive';
@@ -182,8 +181,7 @@ describe('IgxDropDown ', () => {
});
describe('User interaction tests', () => {
describe('Selection & key navigation', () => {
- configureTestSuite();
- beforeAll(waitForAsync(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [
NoopAnimationsModule,
@@ -836,8 +834,7 @@ describe('IgxDropDown ', () => {
}));
});
describe('Other', () => {
- configureTestSuite();
- beforeAll(waitForAsync(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [
NoopAnimationsModule,
@@ -929,8 +926,7 @@ describe('IgxDropDown ', () => {
describe('Virtualization tests', () => {
let scroll: IgxForOfDirective;
let items;
- configureTestSuite();
- beforeAll(waitForAsync(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [
NoopAnimationsModule,
@@ -1039,8 +1035,7 @@ describe('IgxDropDown ', () => {
});
describe('Rendering', () => {
describe('Grouped items', () => {
- configureTestSuite();
- beforeAll(waitForAsync(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [
NoopAnimationsModule,
@@ -1102,8 +1097,7 @@ describe('IgxDropDown ', () => {
});
});
describe('Style and display density', () => {
- configureTestSuite();
- beforeAll(waitForAsync(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [
NoopAnimationsModule,
@@ -1136,8 +1130,7 @@ describe('IgxDropDown ', () => {
});
describe('Input properties', () => {
const customDDId = 'test-id-list';
- configureTestSuite();
- beforeAll(waitForAsync(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [
NoopAnimationsModule,
@@ -1206,8 +1199,7 @@ describe('IgxDropDown ', () => {
});
});
describe('Anchor element', () => {
- configureTestSuite();
- beforeAll(waitForAsync(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [
NoopAnimationsModule,
diff --git a/projects/igniteui-angular/src/lib/expansion-panel/expansion-panel.spec.ts b/projects/igniteui-angular/src/lib/expansion-panel/expansion-panel.spec.ts
index b91939122ea..1095ef78351 100644
--- a/projects/igniteui-angular/src/lib/expansion-panel/expansion-panel.spec.ts
+++ b/projects/igniteui-angular/src/lib/expansion-panel/expansion-panel.spec.ts
@@ -6,7 +6,6 @@ import { IgxExpansionPanelComponent } from './expansion-panel.component';
import { ExpansionPanelHeaderIconPosition, IgxExpansionPanelHeaderComponent } from './expansion-panel-header.component';
import { IgxGridComponent } from '../grids/grid/public_api';
import { IgxExpansionPanelDescriptionDirective, IgxExpansionPanelIconDirective, IgxExpansionPanelTitleDirective } from './expansion-panel.directives';
-import { configureTestSuite } from '../test-utils/configure-suite';
import { By } from '@angular/platform-browser';
import { IgxExpansionPanelBodyComponent } from './expansion-panel-body.component';
import { IgxListComponent } from '../list/list.component';
@@ -33,8 +32,7 @@ const enum IconPositionClass {
}
describe('igxExpansionPanel', () => {
- configureTestSuite();
- beforeAll(waitForAsync(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [
NoopAnimationsModule,
@@ -49,7 +47,6 @@ describe('igxExpansionPanel', () => {
describe('General tests: ', () => {
- // configureTestSuite();
it('Should initialize the expansion panel component properly', () => {
const fixture: ComponentFixture = TestBed.createComponent(IgxExpansionPanelListComponent);
fixture.detectChanges();
@@ -294,7 +291,6 @@ describe('igxExpansionPanel', () => {
});
describe('Expansion tests: ', () => {
- // configureTestSuite();
const verifyPanelExpansionState = (
collapsed: boolean,
panel: IgxExpansionPanelComponent,
@@ -966,7 +962,6 @@ describe('igxExpansionPanel', () => {
});
describe('Aria tests', () => {
- // configureTestSuite();
it('Should properly apply default aria properties', fakeAsync(() => {
const fixture = TestBed.createComponent(IgxExpansionPanelListComponent);
fixture.detectChanges();
@@ -1089,7 +1084,6 @@ describe('igxExpansionPanel', () => {
});
describe('Rendering tests: ', () => {
- // configureTestSuite();
it('Should apply all appropriate classes on combo initialization', fakeAsync(() => {
const fixture: ComponentFixture = TestBed.createComponent(IgxExpansionPanelSampleComponent);
fixture.detectChanges();
diff --git a/projects/igniteui-angular/src/lib/expansion-panel/toggle-animation-component.spec.ts b/projects/igniteui-angular/src/lib/expansion-panel/toggle-animation-component.spec.ts
index c01a57ec3ec..343d6d9a7b5 100644
--- a/projects/igniteui-angular/src/lib/expansion-panel/toggle-animation-component.spec.ts
+++ b/projects/igniteui-angular/src/lib/expansion-panel/toggle-animation-component.spec.ts
@@ -4,7 +4,6 @@ import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { noop } from 'rxjs';
import { IgxAngularAnimationService } from '../services/animation/angular-animation-service';
import { AnimationService } from '../services/animation/animation';
-import { configureTestSuite } from '../test-utils/configure-suite';
import { ANIMATION_TYPE, ToggleAnimationPlayer } from './toggle-animation-component';
import { growVerIn, growVerOut } from 'igniteui-angular/animations';
@@ -15,9 +14,8 @@ class MockTogglePlayer extends ToggleAnimationPlayer {
}
describe('Toggle animation component', () => {
- configureTestSuite();
const mockBuilder = jasmine.createSpyObj('mockBuilder', ['build'], {});
- beforeAll(() => {
+ beforeEach(() => {
TestBed.configureTestingModule({
imports: [
NoopAnimationsModule
diff --git a/projects/igniteui-angular/src/lib/grids/columns/column.component.ts b/projects/igniteui-angular/src/lib/grids/columns/column.component.ts
index dce87662e5b..2e12acbf698 100644
--- a/projects/igniteui-angular/src/lib/grids/columns/column.component.ts
+++ b/projects/igniteui-angular/src/lib/grids/columns/column.component.ts
@@ -405,23 +405,38 @@ export class IgxColumnComponent implements AfterContentInit, OnDestroy, ColumnTy
}
/**
- * @hidden
+ * Emitted when the column is hidden or shown.
+ *
+ * ```html
+ *
+ *
+ * ```
+ *
*/
@Output()
public hiddenChange = new EventEmitter();
- /** @hidden */
+ /**
+ * Emitted when the column expanded or collapsed.
+ *
+ * ```html
+ *
+ *
+ * ```
+ *
+ */
@Output()
public expandedChange = new EventEmitter();
/** @hidden */
@Output()
public collapsibleChange = new EventEmitter();
+
/** @hidden */
@Output()
public visibleWhenCollapsedChange = new EventEmitter();
- /** @hidden */
+ /** @hidden @internal */
@Output()
public columnChange = new EventEmitter();
@@ -861,13 +876,25 @@ export class IgxColumnComponent implements AfterContentInit, OnDestroy, ColumnTy
public additionalTemplateContext: any;
/**
- * @hidden
+ * Emitted when the column width changes.
+ *
+ * ```html
+ *
+ *
+ * ```
+ *
*/
@Output()
public widthChange = new EventEmitter();
/**
- * @hidden
+ * Emitted when the column is pinned/unpinned.
+ *
+ * ```html
+ *
+ *
+ * ```
+ *
*/
@Output()
public pinnedChange = new EventEmitter();
diff --git a/projects/igniteui-angular/src/lib/grids/grid-base.directive.ts b/projects/igniteui-angular/src/lib/grids/grid-base.directive.ts
index fb89132ee38..d63252357ed 100644
--- a/projects/igniteui-angular/src/lib/grids/grid-base.directive.ts
+++ b/projects/igniteui-angular/src/lib/grids/grid-base.directive.ts
@@ -26,8 +26,8 @@ import {
OnInit,
Optional,
Output,
- QueryList,
TemplateRef,
+ QueryList,
ViewChild,
ViewChildren,
ViewContainerRef
@@ -994,13 +994,25 @@ export abstract class IgxGridBaseDirective implements GridType,
public gridCopy = new EventEmitter();
/**
- * @hidden @internal
+ * Emitted when the rows are expanded or collapsed.
+ *
+ * @example
+ * ```html
+ *
+ * ```
*/
@Output()
public expansionStatesChange = new EventEmitter