diff --git a/angular.json b/angular.json index 1e1260de0ee..e71f9111dd3 100644 --- a/angular.json +++ b/angular.json @@ -196,7 +196,7 @@ "projects/igniteui-angular/test.css" ], "assets": [ - "projects/igniteui-angular/src/assets" + "projects/igniteui-angular/test-utils/assets" ], "stylePreprocessorOptions": { "includePaths": [ diff --git a/package-lock.json b/package-lock.json index dd1503c72b2..91a2133ab19 100644 --- a/package-lock.json +++ b/package-lock.json @@ -423,9 +423,9 @@ } }, "node_modules/@angular-eslint/builder": { - "version": "20.6.0", - "resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-20.6.0.tgz", - "integrity": "sha512-bEvQxjnxXiajcPoSnFPRmc9MYLtultZX7Z/psqj6jiGVujgs5UObs91JcmT4QY56ZkdZjETw9RhztLmRTuLB3Q==", + "version": "20.7.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-20.7.0.tgz", + "integrity": "sha512-qgf4Cfs1z0VsVpzF/OnxDRvBp60OIzeCsp4mzlckWYVniKo19EPIN6kFDol5eTAIOMPgiBQlMIwgQMHgocXEig==", "dev": true, "license": "MIT", "dependencies": { @@ -466,21 +466,21 @@ } }, "node_modules/@angular-eslint/bundled-angular-compiler": { - "version": "20.6.0", - "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-20.6.0.tgz", - "integrity": "sha512-axeU33lBOcfQ/kcpBc/70vR69PFX9kqgUtroENK0lq6dBeRgi6LJVbBOAHRtR2Xfxd9Lv4YbqWuJ0oQ5BwSTGQ==", + "version": "20.7.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-20.7.0.tgz", + "integrity": "sha512-9KPz24YoiL0SvTtTX6sd1zmysU5cKOCcmpEiXkCoO3L2oYZGlVxmMT4hfSaHMt8qmfvV2KzQMoR6DZM84BwRzQ==", "dev": true, "license": "MIT" }, "node_modules/@angular-eslint/eslint-plugin": { - "version": "20.6.0", - "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-20.6.0.tgz", - "integrity": "sha512-hvFtluNRjMqlkwxYGMO1RFgJ5N5/InFZZSHIOput+XXVXYwPrNjbyMY29/ndynpvNktcVq1UPpjv5JAucp0GlA==", + "version": "20.7.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-20.7.0.tgz", + "integrity": "sha512-aHH2YTiaonojsKN+y2z4IMugCwdsH/dYIjYBig6kfoSPyf9rGK4zx+gnNGq/pGRjF3bOYrmFgIviYpQVb80inQ==", "dev": true, "license": "MIT", "dependencies": { - "@angular-eslint/bundled-angular-compiler": "20.6.0", - "@angular-eslint/utils": "20.6.0", + "@angular-eslint/bundled-angular-compiler": "20.7.0", + "@angular-eslint/utils": "20.7.0", "ts-api-utils": "^2.1.0" }, "peerDependencies": { @@ -490,19 +490,19 @@ } }, "node_modules/@angular-eslint/eslint-plugin-template": { - "version": "20.6.0", - "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-20.6.0.tgz", - "integrity": "sha512-HoV0QeZFP63vUyD+uBYdqGi95xNJ64Wsb9vG0/auY5sqHsed8tbmFZgNmr8/ho1AHMyQ2HhH7eLIsV2glftyEg==", + "version": "20.7.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-20.7.0.tgz", + "integrity": "sha512-WFmvW2vBR6ExsSKEaActQTteyw6ikWyuJau9XmWEPFd+2eusEt/+wO21ybjDn3uc5FTp1IcdhfYy+U5OdDjH5w==", "dev": true, "license": "MIT", "dependencies": { - "@angular-eslint/bundled-angular-compiler": "20.6.0", - "@angular-eslint/utils": "20.6.0", + "@angular-eslint/bundled-angular-compiler": "20.7.0", + "@angular-eslint/utils": "20.7.0", "aria-query": "5.3.2", "axobject-query": "4.1.0" }, "peerDependencies": { - "@angular-eslint/template-parser": "20.6.0", + "@angular-eslint/template-parser": "20.7.0", "@typescript-eslint/types": "^7.11.0 || ^8.0.0", "@typescript-eslint/utils": "^7.11.0 || ^8.0.0", "eslint": "^8.57.0 || ^9.0.0", @@ -510,16 +510,16 @@ } }, "node_modules/@angular-eslint/schematics": { - "version": "20.6.0", - "resolved": "https://registry.npmjs.org/@angular-eslint/schematics/-/schematics-20.6.0.tgz", - "integrity": "sha512-bZ3FFyfEUqnLkNj4OzU+0LQH4NiHtWbleuoaaTeIXAG9AHZP9H5PPD9loR3CUaLoHvwY22zWBkBOEuBBDkBAtw==", + "version": "20.7.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/schematics/-/schematics-20.7.0.tgz", + "integrity": "sha512-S0onfRipDUIL6gFGTFjiWwUDhi42XYrBoi3kJ3wBbKBeIgYv9SP1ppTKDD4ZoDaDU9cQE8nToX7iPn9ifMw6eQ==", "dev": true, "license": "MIT", "dependencies": { "@angular-devkit/core": ">= 20.0.0 < 21.0.0", "@angular-devkit/schematics": ">= 20.0.0 < 21.0.0", - "@angular-eslint/eslint-plugin": "20.6.0", - "@angular-eslint/eslint-plugin-template": "20.6.0", + "@angular-eslint/eslint-plugin": "20.7.0", + "@angular-eslint/eslint-plugin-template": "20.7.0", "ignore": "7.0.5", "semver": "7.7.3", "strip-json-comments": "3.1.1" @@ -688,14 +688,15 @@ } }, "node_modules/@angular-eslint/template-parser": { - "version": "20.6.0", - "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-20.6.0.tgz", - "integrity": "sha512-dDsABCf8qoFEUmSQa2F0NBZtkxT+I4GQxKcYSpsFZdgv6zrE46lpJSuRgK8OKOq1jqMmbIEXp2h0FeHyJS/qmg==", + "version": "20.7.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-20.7.0.tgz", + "integrity": "sha512-CVskZnF38IIxVVlKWi1VCz7YH/gHMJu2IY9bD1AVoBBGIe0xA4FRXJkW2Y+EDs9vQqZTkZZljhK5gL65Ro1PeQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "@angular-eslint/bundled-angular-compiler": "20.6.0", - "eslint-scope": "^8.0.2" + "@angular-eslint/bundled-angular-compiler": "20.7.0", + "eslint-scope": "^9.0.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", @@ -703,13 +704,13 @@ } }, "node_modules/@angular-eslint/utils": { - "version": "20.6.0", - "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-20.6.0.tgz", - "integrity": "sha512-usjCCjbdtqy4p8I3BMPn6LrXECFLCohBa75h59PK0kV/TEb8OlnIWIWTVtZAMw/MgohtExl69GkSNmL3ElWbUQ==", + "version": "20.7.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-20.7.0.tgz", + "integrity": "sha512-B6EJHbsk2W/lnS3kS/gm56VGvX735419z/DzgbRDcOvqMGMLwD1ILzv5OTEcL1rzpnB0AHW+IxOu6y/aCzSNUA==", "dev": true, "license": "MIT", "dependencies": { - "@angular-eslint/bundled-angular-compiler": "20.6.0" + "@angular-eslint/bundled-angular-compiler": "20.7.0" }, "peerDependencies": { "@typescript-eslint/utils": "^7.11.0 || ^8.0.0", @@ -722,6 +723,7 @@ "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-21.0.0.tgz", "integrity": "sha512-9AX4HFJmSP8SFNiweKNxasBzn3zbL3xRtwaUxw1I+x/WAzubm4ZziLnXqb+tai7C4UmwV+9XDlRVPfw5WxJ9zg==", "license": "MIT", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -905,6 +907,7 @@ "resolved": "https://registry.npmjs.org/@angular/common/-/common-21.0.0.tgz", "integrity": "sha512-uFvQDYU5X5nEnI9C4Bkdxcu4aIzNesGLJzmFlnwChVxB4BxIRF0uHL0oRhdkInGTIzPDJPH4nF6B/22c5gDVqA==", "license": "MIT", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -921,6 +924,7 @@ "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-21.0.0.tgz", "integrity": "sha512-6jCH3UYga5iokj5F40SR4dlwo9ZRMkT8YzHCTijwZuDX9zvugp9jPof092RvIeNsTvCMVfGWuM9yZ1DRUsU/yg==", "license": "MIT", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -934,6 +938,7 @@ "integrity": "sha512-KTXp+e2UPGyfFew6Wq95ULpHWQ20dhqkAMZ6x6MCYfOe2ccdnGYsAbLLmnWGmSg5BaOI4B0x/1XCFZf/n6WDgA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/core": "7.28.4", "@jridgewell/sourcemap-codec": "^1.4.14", @@ -966,6 +971,7 @@ "resolved": "https://registry.npmjs.org/@angular/core/-/core-21.0.0.tgz", "integrity": "sha512-bqi8fT4csyITeX8vdN5FJDBWx5wuWzdCg4mKSjHd+onVzZLyZ8bcnuAKz4mklgvjvwuXoRYukmclUurLwfq3Rg==", "license": "MIT", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -1036,6 +1042,7 @@ "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-21.0.0.tgz", "integrity": "sha512-KQrANla4RBLhcGkwlndqsKzBwVFOWQr1640CfBVjj2oz4M3dW5hyMtXivBACvuwyUhYU/qJbqlDMBXl/OUSudQ==", "license": "MIT", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -1076,6 +1083,7 @@ "resolved": "https://registry.npmjs.org/@angular/platform-server/-/platform-server-21.0.0.tgz", "integrity": "sha512-5IcmoftT2hLAbLfSoqGoCg0B1FLSk08xDoUdIyEUo1SmxNJMEEgU6WxhkPf6R7aoOlLAwYBoqGGP1Us1Z7rO7g==", "license": "MIT", + "peer": true, "dependencies": { "tslib": "^2.3.0", "xhr2": "^0.2.0" @@ -1096,6 +1104,7 @@ "resolved": "https://registry.npmjs.org/@angular/router/-/router-21.0.0.tgz", "integrity": "sha512-ARx1R2CmTgAezlMkUpV40V4T/IbXhL7dm4SuMVKbuEOsCKZC0TLOSSTsGYY7HKem45JHlJaByv819cJnabFgBg==", "license": "MIT", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -1114,6 +1123,7 @@ "resolved": "https://registry.npmjs.org/@angular/ssr/-/ssr-21.0.0.tgz", "integrity": "sha512-lzMzMdsAGy5OB7JsOfKK+SZQdxeOAWDg8sC/XcTUzY/BJu31Lz9kO2nuKmqcgr/aPOrD7Sc0F31u/NxGjeCdTw==", "license": "MIT", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -1569,6 +1579,7 @@ "integrity": "sha512-eohl3hKTiVyD1ilYdw9T0OiB4hnjef89e3dMYKz+mVKDzj+5IteTseASUsOB+EU9Tf6VNTCjDePcP6wkDGmLKQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@keyv/serialize": "^1.1.1" } @@ -1729,6 +1740,7 @@ } ], "license": "MIT", + "peer": true, "engines": { "node": ">=18" }, @@ -1752,6 +1764,7 @@ } ], "license": "MIT", + "peer": true, "engines": { "node": ">=18" } @@ -3508,6 +3521,7 @@ "integrity": "sha512-X7/+dG9SLpSzRkwgG5/xiIzW0oMrV3C0HOa7YHG1WnrLK+vCQHfte4k/T80059YBdei29RBC3s+pSMvPJDU9/A==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@inquirer/checkbox": "^4.3.0", "@inquirer/confirm": "^5.1.19", @@ -4524,16 +4538,16 @@ } }, "node_modules/@npmcli/fs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-4.0.0.tgz", - "integrity": "sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-5.0.0.tgz", + "integrity": "sha512-7OsC1gNORBEawOa5+j2pXN9vsicaIOH5cPXxoR6fJOmH6/EXpJB2CajXOu1fPRFun2m1lktEFX11+P89hqO/og==", "dev": true, "license": "ISC", "dependencies": { "semver": "^7.3.5" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/@npmcli/git": { @@ -4653,14 +4667,14 @@ } }, "node_modules/@npmcli/package-json": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-7.0.3.tgz", - "integrity": "sha512-XT8016UrDfnR7yh2XvnIqaPnA5v2QomaWryDYYgKNT0LaX0vcKf4gu2f3CWD/ltV4tOto4MwZynWlynMJL8bBQ==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-7.0.4.tgz", + "integrity": "sha512-0wInJG3j/K40OJt/33ax47WfWMzZTm6OQxB9cDhTt5huCP2a9g2GnlsxmfN+PulItNPIpPrZ+kfwwUil7eHcZQ==", "dev": true, "license": "ISC", "dependencies": { "@npmcli/git": "^7.0.0", - "glob": "^12.0.0", + "glob": "^13.0.0", "hosted-git-info": "^9.0.0", "json-parse-even-better-errors": "^5.0.0", "proc-log": "^6.0.0", @@ -4672,38 +4686,16 @@ } }, "node_modules/@npmcli/package-json/node_modules/glob": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-12.0.0.tgz", - "integrity": "sha512-5Qcll1z7IKgHr5g485ePDdHcNQY0k2dtv/bjYy0iuyGxQw2qSOiiXUXJ+AYQpg3HNoUMHqAruX478Jeev7UULw==", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.0.tgz", + "integrity": "sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { - "foreground-child": "^3.3.1", - "jackspeak": "^4.1.1", "minimatch": "^10.1.1", "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", "path-scurry": "^2.0.0" }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@npmcli/package-json/node_modules/jackspeak": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", - "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, "engines": { "node": "20 || >=22" }, @@ -6525,6 +6517,7 @@ "integrity": "sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "undici-types": "~6.21.0" } @@ -6625,17 +6618,17 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.47.0.tgz", - "integrity": "sha512-fe0rz9WJQ5t2iaLfdbDc9T80GJy0AeO453q8C3YCilnGozvOyCG5t+EZtg7j7D88+c3FipfP/x+wzGnh1xp8ZA==", + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.48.0.tgz", + "integrity": "sha512-XxXP5tL1txl13YFtrECECQYeZjBZad4fyd3cFV4a19LkAY/bIp9fev3US4S5fDVV2JaYFiKAZ/GRTOLer+mbyQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.47.0", - "@typescript-eslint/type-utils": "8.47.0", - "@typescript-eslint/utils": "8.47.0", - "@typescript-eslint/visitor-keys": "8.47.0", + "@typescript-eslint/scope-manager": "8.48.0", + "@typescript-eslint/type-utils": "8.48.0", + "@typescript-eslint/utils": "8.48.0", + "@typescript-eslint/visitor-keys": "8.48.0", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", @@ -6649,22 +6642,23 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.47.0", + "@typescript-eslint/parser": "^8.48.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/parser": { - "version": "8.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.47.0.tgz", - "integrity": "sha512-lJi3PfxVmo0AkEY93ecfN+r8SofEqZNGByvHAI3GBLrvt1Cw6H5k1IM02nSzu0RfUafr2EvFSw0wAsZgubNplQ==", + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.48.0.tgz", + "integrity": "sha512-jCzKdm/QK0Kg4V4IK/oMlRZlY+QOcdjv89U2NgKHZk1CYTj82/RVSx1mV/0gqCVMJ/DA+Zf/S4NBWNF8GQ+eqQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "@typescript-eslint/scope-manager": "8.47.0", - "@typescript-eslint/types": "8.47.0", - "@typescript-eslint/typescript-estree": "8.47.0", - "@typescript-eslint/visitor-keys": "8.47.0", + "@typescript-eslint/scope-manager": "8.48.0", + "@typescript-eslint/types": "8.48.0", + "@typescript-eslint/typescript-estree": "8.48.0", + "@typescript-eslint/visitor-keys": "8.48.0", "debug": "^4.3.4" }, "engines": { @@ -6680,14 +6674,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.47.0.tgz", - "integrity": "sha512-2X4BX8hUeB5JcA1TQJ7GjcgulXQ+5UkNb0DL8gHsHUHdFoiCTJoYLTpib3LtSDPZsRET5ygN4qqIWrHyYIKERA==", + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.48.0.tgz", + "integrity": "sha512-Ne4CTZyRh1BecBf84siv42wv5vQvVmgtk8AuiEffKTUo3DrBaGYZueJSxxBZ8fjk/N3DrgChH4TOdIOwOwiqqw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.47.0", - "@typescript-eslint/types": "^8.47.0", + "@typescript-eslint/tsconfig-utils": "^8.48.0", + "@typescript-eslint/types": "^8.48.0", "debug": "^4.3.4" }, "engines": { @@ -6702,14 +6696,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.47.0.tgz", - "integrity": "sha512-a0TTJk4HXMkfpFkL9/WaGTNuv7JWfFTQFJd6zS9dVAjKsojmv9HT55xzbEpnZoY+VUb+YXLMp+ihMLz/UlZfDg==", + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.48.0.tgz", + "integrity": "sha512-uGSSsbrtJrLduti0Q1Q9+BF1/iFKaxGoQwjWOIVNJv0o6omrdyR8ct37m4xIl5Zzpkp69Kkmvom7QFTtue89YQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.47.0", - "@typescript-eslint/visitor-keys": "8.47.0" + "@typescript-eslint/types": "8.48.0", + "@typescript-eslint/visitor-keys": "8.48.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -6720,9 +6714,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.47.0.tgz", - "integrity": "sha512-ybUAvjy4ZCL11uryalkKxuT3w3sXJAuWhOoGS3T/Wu+iUu1tGJmk5ytSY8gbdACNARmcYEB0COksD2j6hfGK2g==", + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.48.0.tgz", + "integrity": "sha512-WNebjBdFdyu10sR1M4OXTt2OkMd5KWIL+LLfeH9KhgP+jzfDV/LI3eXzwJ1s9+Yc0Kzo2fQCdY/OpdusCMmh6w==", "dev": true, "license": "MIT", "engines": { @@ -6737,15 +6731,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.47.0.tgz", - "integrity": "sha512-QC9RiCmZ2HmIdCEvhd1aJELBlD93ErziOXXlHEZyuBo3tBiAZieya0HLIxp+DoDWlsQqDawyKuNEhORyku+P8A==", + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.48.0.tgz", + "integrity": "sha512-zbeVaVqeXhhab6QNEKfK96Xyc7UQuoFWERhEnj3mLVnUWrQnv15cJNseUni7f3g557gm0e46LZ6IJ4NJVOgOpw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.47.0", - "@typescript-eslint/typescript-estree": "8.47.0", - "@typescript-eslint/utils": "8.47.0", + "@typescript-eslint/types": "8.48.0", + "@typescript-eslint/typescript-estree": "8.48.0", + "@typescript-eslint/utils": "8.48.0", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, @@ -6762,11 +6756,12 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.47.0.tgz", - "integrity": "sha512-nHAE6bMKsizhA2uuYZbEbmp5z2UpffNrPEqiKIeN7VsV6UY/roxanWfoRrf6x/k9+Obf+GQdkm0nPU+vnMXo9A==", + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.48.0.tgz", + "integrity": "sha512-cQMcGQQH7kwKoVswD1xdOytxQR60MWKM1di26xSUtxehaDs/32Zpqsu5WJlXTtTTqyAVK8R7hvsUnIXRS+bjvA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -6776,21 +6771,20 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.47.0.tgz", - "integrity": "sha512-k6ti9UepJf5NpzCjH31hQNLHQWupTRPhZ+KFF8WtTuTpy7uHPfeg2NM7cP27aCGajoEplxJDFVCEm9TGPYyiVg==", + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.48.0.tgz", + "integrity": "sha512-ljHab1CSO4rGrQIAyizUS6UGHHCiAYhbfcIZ1zVJr5nMryxlXMVWS3duFPSKvSUbFPwkXMFk1k0EMIjub4sRRQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.47.0", - "@typescript-eslint/tsconfig-utils": "8.47.0", - "@typescript-eslint/types": "8.47.0", - "@typescript-eslint/visitor-keys": "8.47.0", + "@typescript-eslint/project-service": "8.48.0", + "@typescript-eslint/tsconfig-utils": "8.48.0", + "@typescript-eslint/types": "8.48.0", + "@typescript-eslint/visitor-keys": "8.48.0", "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", + "tinyglobby": "^0.2.15", "ts-api-utils": "^2.1.0" }, "engines": { @@ -6805,16 +6799,17 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.47.0.tgz", - "integrity": "sha512-g7XrNf25iL4TJOiPqatNuaChyqt49a/onq5YsJ9+hXeugK+41LVg7AxikMfM02PC6jbNtZLCJj6AUcQXJS/jGQ==", + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.48.0.tgz", + "integrity": "sha512-yTJO1XuGxCsSfIVt1+1UrLHtue8xz16V8apzPYI06W0HbEbEWHxHXgZaAgavIkoh+GeV6hKKd5jm0sS6OYxWXQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.47.0", - "@typescript-eslint/types": "8.47.0", - "@typescript-eslint/typescript-estree": "8.47.0" + "@typescript-eslint/scope-manager": "8.48.0", + "@typescript-eslint/types": "8.48.0", + "@typescript-eslint/typescript-estree": "8.48.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -6829,13 +6824,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.47.0.tgz", - "integrity": "sha512-SIV3/6eftCy1bNzCQoPmbWsRLujS8t5iDIZ4spZOBHqrM+yfX2ogg8Tt3PDTAVKw3sSCiUgg30uOAvK2r9zGjQ==", + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.48.0.tgz", + "integrity": "sha512-T0XJMaRPOH3+LBbAfzR2jalckP1MSG/L9eUtY0DEzUyVaXJ/t6zN0nR7co5kz0Jko/nkSYCBRkz1djvjajVTTg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.47.0", + "@typescript-eslint/types": "8.48.0", "eslint-visitor-keys": "^4.2.1" }, "engines": { @@ -6932,6 +6927,7 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -7362,11 +7358,12 @@ } }, "node_modules/astro": { - "version": "5.15.9", - "resolved": "https://registry.npmjs.org/astro/-/astro-5.15.9.tgz", - "integrity": "sha512-XLDXxu0282cC/oYHswWZm3johGlRvk9rLRS7pWVWSne+HsZe9JgrpHI+vewAJSSNHBGd1aCyaQOElT5RNGe7IQ==", + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/astro/-/astro-5.16.0.tgz", + "integrity": "sha512-GaDRs2Mngpw3dr2vc085GnORh98NiXxwIjg/EoQQQl/icZt3Z7s0BRsYHDZ8swkZbOA6wZsqWJdrNirl+iKcDg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@astrojs/compiler": "^2.13.0", "@astrojs/internal-helpers": "0.7.5", @@ -7407,13 +7404,14 @@ "p-limit": "^6.2.0", "p-queue": "^8.1.1", "package-manager-detector": "^1.5.0", - "picocolors": "^1.1.1", + "piccolore": "^0.1.3", "picomatch": "^4.0.3", "prompts": "^2.4.2", "rehype": "^13.0.2", "semver": "^7.7.3", "shiki": "^3.15.0", "smol-toml": "^1.5.0", + "svgo": "^4.0.0", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", "tsconfck": "^3.1.6", @@ -8367,9 +8365,9 @@ } }, "node_modules/baseline-browser-mapping": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.29.tgz", - "integrity": "sha512-sXdt2elaVnhpDNRDz+1BDx1JQoJRuNk7oVlAlbGiFkLikHCAQiccexF/9e91zVi6RCgqspl04aP+6Cnl9zRLrA==", + "version": "2.8.31", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.31.tgz", + "integrity": "sha512-a28v2eWrrRWPpJSzxc+mKwm0ZtVx/G8SepdQZDArnXYU/XS+IF6mp8aB/4E+hH1tyGCoDo3KlUCdlSxGDsRkAw==", "dev": true, "license": "Apache-2.0", "bin": { @@ -8443,35 +8441,27 @@ } }, "node_modules/body-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", - "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.1.tgz", + "integrity": "sha512-nfDwkulwiZYQIGwxdy0RUmowMhKcFVcYXUU7m4QlKYim1rUtg83xm2yjZ40QjDuc291AJjjeSc9b++AWHSgSHw==", "license": "MIT", "dependencies": { "bytes": "^3.1.2", "content-type": "^1.0.5", - "debug": "^4.4.0", + "debug": "^4.4.3", "http-errors": "^2.0.0", - "iconv-lite": "^0.6.3", + "iconv-lite": "^0.7.0", "on-finished": "^2.4.1", "qs": "^6.14.0", - "raw-body": "^3.0.0", - "type-is": "^2.0.0" + "raw-body": "^3.0.1", + "type-is": "^2.0.1" }, "engines": { "node": ">=18" - } - }, - "node_modules/body-parser/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/boolbase": { @@ -8626,6 +8616,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "baseline-browser-mapping": "^2.8.25", "caniuse-lite": "^1.0.30001754", @@ -8712,15 +8703,15 @@ } }, "node_modules/cacache": { - "version": "20.0.2", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-20.0.2.tgz", - "integrity": "sha512-rVWvqtWcgSzB22wImrVto+7PmE+lUqv5dYzRHD0QJsfpSwTkW+GIqA4ykSt/CCjQlQle8USn8CO8vcWNrIqktg==", + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-20.0.3.tgz", + "integrity": "sha512-3pUp4e8hv07k1QlijZu6Kn7c9+ZpWWk4j3F8N3xPuCExULobqJydKYOTj1FTq58srkJsXvO7LbGAH4C0ZU3WGw==", "dev": true, "license": "ISC", "dependencies": { - "@npmcli/fs": "^4.0.0", + "@npmcli/fs": "^5.0.0", "fs-minipass": "^3.0.0", - "glob": "^11.0.3", + "glob": "^13.0.0", "lru-cache": "^11.1.0", "minipass": "^7.0.3", "minipass-collect": "^2.0.1", @@ -8728,45 +8719,23 @@ "minipass-pipeline": "^1.2.4", "p-map": "^7.0.2", "ssri": "^13.0.0", - "unique-filename": "^4.0.0" + "unique-filename": "^5.0.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, "node_modules/cacache/node_modules/glob": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-11.1.0.tgz", - "integrity": "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.0.tgz", + "integrity": "sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { - "foreground-child": "^3.3.1", - "jackspeak": "^4.1.1", "minimatch": "^10.1.1", "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", "path-scurry": "^2.0.0" }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/cacache/node_modules/jackspeak": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", - "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, "engines": { "node": "20 || >=22" }, @@ -8996,9 +8965,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001756", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001756.tgz", - "integrity": "sha512-4HnCNKbMLkLdhJz3TToeVWHSnfJvPaq6vu/eRP0Ahub/07n484XHhBF5AJoSGHdVrS8tKFauUQz8Bp9P7LVx7A==", + "version": "1.0.30001757", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001757.tgz", + "integrity": "sha512-r0nnL/I28Zi/yjk1el6ilj27tKcdjLsNqAOZr0yVjWPrSQyHgKI2INaEWw21bAQSv2LXRt1XuCS/GomNpWOxsQ==", "dev": true, "funding": [ { @@ -9128,6 +9097,7 @@ "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "readdirp": "^4.0.1" }, @@ -10021,6 +9991,42 @@ "node": ">=4" } }, + "node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "dev": true, + "license": "CC0-1.0" + }, "node_modules/cssstyle": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.6.0.tgz", @@ -10430,7 +10436,8 @@ "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1521046.tgz", "integrity": "sha512-vhE6eymDQSKWUXwwA37NtTTVEzjtGVfDr3pRbsWEQ5onH/Snp2c+2xZHWJJawG/0hCCJLRGt4xVtEVUVILol4w==", "dev": true, - "license": "BSD-3-Clause" + "license": "BSD-3-Clause", + "peer": true }, "node_modules/dfa": { "version": "1.2.0", @@ -10742,9 +10749,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.258", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.258.tgz", - "integrity": "sha512-rHUggNV5jKQ0sSdWwlaRDkFc3/rRJIVnOSe9yR4zrR07m3ZxhP4N27Hlg8VeJGGYgFTxK5NqDmWI4DSH72vIJg==", + "version": "1.5.260", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.260.tgz", + "integrity": "sha512-ov8rBoOBhVawpzdre+Cmz4FB+y66Eqrk6Gwqd8NGxuhv99GQ8XqMAr351KEkOt7gukXWDg6gJWEMKgL2RLMPtA==", "dev": true, "license": "ISC" }, @@ -11253,6 +11260,7 @@ "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -11308,9 +11316,9 @@ } }, "node_modules/eslint-scope": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", - "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.0.0.tgz", + "integrity": "sha512-+Yh0LeQKq+mW/tQArNj67tljR3L1HajDTQPuZOEwC00oBdoIDQrr89yBgjAlzAwRrY/5zDkM3v99iGHwz9y0dw==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -11318,7 +11326,7 @@ "estraverse": "^5.2.0" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^20.19.0 || ^22.13.0 || >=24" }, "funding": { "url": "https://opencollective.com/eslint" @@ -11365,6 +11373,23 @@ "concat-map": "0.0.1" } }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/eslint/node_modules/eslint-visitor-keys": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", @@ -11590,6 +11615,7 @@ "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", "license": "MIT", + "peer": true, "dependencies": { "accepts": "^2.0.0", "body-parser": "^2.2.0", @@ -14082,28 +14108,23 @@ "license": "BSD-2-Clause" }, "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", "license": "MIT", "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" }, "engines": { "node": ">= 0.8" - } - }, - "node_modules/http-errors/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/http-proxy": { @@ -15419,6 +15440,7 @@ "integrity": "sha512-LrtUxbdvt1gOpo3gxG+VAJlJAEMhbWlM4YrFQgql98FwF7+K8K12LYO4hnDdUkNjeztYrOXEMqgTajSWgmtI/w==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@colors/colors": "1.5.0", "body-parser": "^1.19.0", @@ -15742,6 +15764,23 @@ "node": ">= 6" } }, + "node_modules/karma/node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/karma/node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -15876,6 +15915,16 @@ "node": ">=0.10.0" } }, + "node_modules/karma/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/karma/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -16072,6 +16121,7 @@ "integrity": "sha512-j1n1IuTX1VQjIy3tT7cyGbX7nvQOsFLoIqobZv4ttI5axP923gA44zUj6miiA6R5Aoms4sEGVIIcucXUbRI14g==", "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "copy-anything": "^2.0.1", "parse-node-version": "^1.0.1", @@ -17131,9 +17181,9 @@ } }, "node_modules/mdast-util-to-hast": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", - "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", + "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", "dev": true, "license": "MIT", "dependencies": { @@ -17894,15 +17944,19 @@ } }, "node_modules/mime-types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", - "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", "license": "MIT", "dependencies": { "mime-db": "^1.54.0" }, "engines": { - "node": ">= 0.6" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/mimic-function": { @@ -18318,6 +18372,7 @@ "integrity": "sha512-2lMGkmS91FyP+p/Tzmu49hY+p1PDgHBNM+Fce8yrzZo8/EbybNPBYfJnwFfl0lwGmqpYLevH2oh12+ikKCLv9g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@ampproject/remapping": "^2.3.0", "@rollup/plugin-json": "^6.1.0", @@ -19422,9 +19477,9 @@ "license": "MIT" }, "node_modules/oniguruma-to-es": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.3.tgz", - "integrity": "sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.4.tgz", + "integrity": "sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA==", "dev": true, "license": "MIT", "dependencies": { @@ -20147,6 +20202,13 @@ "dev": true, "license": "MIT" }, + "node_modules/piccolore": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/piccolore/-/piccolore-0.1.3.tgz", + "integrity": "sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw==", + "dev": true, + "license": "ISC" + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -20192,9 +20254,9 @@ } }, "node_modules/pkce-challenge": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.0.tgz", - "integrity": "sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.1.tgz", + "integrity": "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==", "dev": true, "license": "MIT", "engines": { @@ -20267,6 +20329,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -20417,6 +20480,7 @@ "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", "dev": true, "license": "MIT", + "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -20690,9 +20754,9 @@ } }, "node_modules/puppeteer": { - "version": "24.30.0", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-24.30.0.tgz", - "integrity": "sha512-A5OtCi9WpiXBQgJ2vQiZHSyrAzQmO/WDsvghqlN4kgw21PhxA5knHUaUQq/N3EMt8CcvSS0RM+kmYLJmedR3TQ==", + "version": "24.31.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-24.31.0.tgz", + "integrity": "sha512-q8y5yLxLD8xdZdzNWqdOL43NbfvUOp60SYhaLZQwHC9CdKldxQKXOyJAciOr7oUJfyAH/KgB2wKvqT2sFKoVXA==", "dev": true, "hasInstallScript": true, "license": "Apache-2.0", @@ -20701,7 +20765,7 @@ "chromium-bidi": "11.0.0", "cosmiconfig": "^9.0.0", "devtools-protocol": "0.0.1521046", - "puppeteer-core": "24.30.0", + "puppeteer-core": "24.31.0", "typed-query-selector": "^2.12.0" }, "bin": { @@ -20712,9 +20776,9 @@ } }, "node_modules/puppeteer-core": { - "version": "24.30.0", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.30.0.tgz", - "integrity": "sha512-2S3Smy0t0W4wJnNvDe7W0bE7wDmZjfZ3ljfMgJd6hn2Hq/f0jgN+x9PULZo2U3fu5UUIJ+JP8cNUGllu8P91Pg==", + "version": "24.31.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.31.0.tgz", + "integrity": "sha512-pnAohhSZipWQoFpXuGV7xCZfaGhqcBR9C4pVrU0QSrcMi7tQMH9J9lDBqBvyMAHQqe8HCARuREqFuVKRQOgTvg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -20723,7 +20787,7 @@ "debug": "^4.4.3", "devtools-protocol": "0.0.1521046", "typed-query-selector": "^2.12.0", - "webdriver-bidi-protocol": "0.3.8", + "webdriver-bidi-protocol": "0.3.9", "ws": "^8.18.3" }, "engines": { @@ -20847,15 +20911,15 @@ } }, "node_modules/raw-body": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.1.tgz", - "integrity": "sha512-9G8cA+tuMS75+6G/TzW8OtLzmBDMo8p1JRxN5AZ+LAp8uxGA8V8GZm4GQ4/N5QNQEnLmg6SS7wyuSmbKepiKqA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.7.0", - "unpipe": "1.0.0" + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" }, "engines": { "node": ">= 0.10" @@ -21551,6 +21615,7 @@ "integrity": "sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -21662,6 +21727,7 @@ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", "license": "Apache-2.0", + "peer": true, "dependencies": { "tslib": "^2.1.0" } @@ -21916,6 +21982,7 @@ "integrity": "sha512-+VUy01yfDqNmIVMd/LLKl2TTtY0ovZN0rTonh+FhKr65mFwIYgU9WzgIZKS7U9/SPCQvWTsTGx9jyt+qRm/XFw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@bufbuild/protobuf": "^2.5.0", "buffer-builder": "^0.2.0", @@ -22517,7 +22584,6 @@ "dev": true, "license": "ISC", "optional": true, - "peer": true, "dependencies": { "is-glob": "^4.0.1" }, @@ -22568,7 +22634,6 @@ "dev": true, "license": "MIT", "optional": true, - "peer": true, "engines": { "node": ">=8.6" }, @@ -22583,7 +22648,6 @@ "dev": true, "license": "MIT", "optional": true, - "peer": true, "dependencies": { "picomatch": "^2.2.1" }, @@ -23164,8 +23228,7 @@ "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.3.tgz", "integrity": "sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==", "dev": true, - "license": "BlueOak-1.0.0", - "optional": true + "license": "BlueOak-1.0.0" }, "node_modules/saxes": { "version": "6.0.0", @@ -24204,9 +24267,9 @@ } }, "node_modules/stylelint": { - "version": "16.25.0", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.25.0.tgz", - "integrity": "sha512-Li0avYWV4nfv1zPbdnxLYBGq4z8DVZxbRgx4Kn6V+Uftz1rMoF1qiEI3oL4kgWqyYgCgs7gT5maHNZ82Gk03vQ==", + "version": "16.26.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.26.0.tgz", + "integrity": "sha512-Y/3AVBefrkqqapVYH3LBF5TSDZ1kw+0XpdKN2KchfuhMK6lQ85S4XOG4lIZLcrcS4PWBmvcY6eS2kCQFz0jukQ==", "dev": true, "funding": [ { @@ -24219,6 +24282,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", @@ -24233,7 +24297,7 @@ "debug": "^4.4.3", "fast-glob": "^3.3.3", "fastest-levenshtein": "^1.0.16", - "file-entry-cache": "^10.1.4", + "file-entry-cache": "^11.1.0", "global-modules": "^2.0.0", "globby": "^11.1.0", "globjoin": "^0.1.4", @@ -24461,13 +24525,13 @@ "license": "MIT" }, "node_modules/stylelint/node_modules/file-entry-cache": { - "version": "10.1.4", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-10.1.4.tgz", - "integrity": "sha512-5XRUFc0WTtUbjfGzEwXc42tiGxQHBmtbUG1h9L2apu4SulCGN3Hqm//9D6FAolf8MYNL7f/YlJl9vy08pj5JuA==", + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-11.1.1.tgz", + "integrity": "sha512-TPVFSDE7q91Dlk1xpFLvFllf8r0HyOMOlnWy7Z2HBku5H3KhIeOGInexrIeg2D64DosVB/JXkrrk6N/7Wriq4A==", "dev": true, "license": "MIT", "dependencies": { - "flat-cache": "^6.1.13" + "flat-cache": "^6.1.19" } }, "node_modules/stylelint/node_modules/flat-cache": { @@ -24564,6 +24628,7 @@ "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -24665,6 +24730,72 @@ "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", "dev": true }, + "node_modules/svgo": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.0.tgz", + "integrity": "sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "commander": "^11.1.0", + "css-select": "^5.1.0", + "css-tree": "^3.0.1", + "css-what": "^6.1.0", + "csso": "^5.0.5", + "picocolors": "^1.1.1", + "sax": "^1.4.1" + }, + "bin": { + "svgo": "bin/svgo.js" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, + "node_modules/svgo/node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/svgo/node_modules/css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/svgo/node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, "node_modules/symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", @@ -25221,7 +25352,8 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" + "license": "0BSD", + "peer": true }, "node_modules/tuf-js": { "version": "4.0.0", @@ -25308,6 +25440,7 @@ "integrity": "sha512-ftJYPvpVfQvFzpkoSfHLkJybdA/geDJ8BGQt/ZnkkhnBYoYW6lBgPQXu6vqLxO4X75dA55hX8Af847H5KXlEFA==", "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "@gerrit0/mini-shiki": "^3.12.0", "lunr": "^2.3.9", @@ -25342,6 +25475,7 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -25536,29 +25670,29 @@ } }, "node_modules/unique-filename": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-4.0.0.tgz", - "integrity": "sha512-XSnEewXmQ+veP7xX2dS5Q4yZAvO40cBN2MWkJ7D/6sW4Dg6wYBNwM1Vrnz1FhH5AdeLIlUXRI9e28z1YZi71NQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-5.0.0.tgz", + "integrity": "sha512-2RaJTAvAb4owyjllTfXzFClJ7WsGxlykkPvCr9pA//LD9goVq+m4PPAeBgNodGZ7nSrntT/auWpJ6Y5IFXcfjg==", "dev": true, "license": "ISC", "dependencies": { - "unique-slug": "^5.0.0" + "unique-slug": "^6.0.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/unique-slug": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-5.0.0.tgz", - "integrity": "sha512-9OdaqO5kwqR+1kVgHAhsp5vPNU0hnxRa26rBFNfNgM7M6pNtgzeBn3s/xbyCQL3dcjzOatcef6UUHpB/6MaETg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-6.0.0.tgz", + "integrity": "sha512-4Lup7Ezn8W3d52/xBhZBVdx323ckxa7DEvd9kPQHppTkLoJXw6ltrBCyj5pnrxj0qKDxYMJ56CoxNuFCscdTiw==", "dev": true, "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/unique-stream": { @@ -25737,9 +25871,9 @@ } }, "node_modules/unstorage": { - "version": "1.17.2", - "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.17.2.tgz", - "integrity": "sha512-cKEsD6iBWJgOMJ6vW1ID/SYuqNf8oN4yqRk8OYqaVQ3nnkJXOT1PSpaMh2QfzLs78UN5kSNRD2c/mgjT8tX7+w==", + "version": "1.17.3", + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.17.3.tgz", + "integrity": "sha512-i+JYyy0DoKmQ3FximTHbGadmIYb8JEpq7lxUjnjeB702bCPum0vzo6oy5Mfu0lpqISw7hCyMW2yj4nWC8bqJ3Q==", "dev": true, "license": "MIT", "dependencies": { @@ -25749,7 +25883,7 @@ "h3": "^1.15.4", "lru-cache": "^10.4.3", "node-fetch-native": "^1.6.7", - "ofetch": "^1.5.0", + "ofetch": "^1.5.1", "ufo": "^1.6.1" }, "peerDependencies": { @@ -26451,6 +26585,7 @@ "integrity": "sha512-BxAKBWmIbrDgrokdGZH1IgkIk/5mMHDreLDmCJ0qpyJaAteP8NvMhkwr/ZCQNqNH97bw/dANTE9PDzqwJghfMQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", @@ -27081,9 +27216,9 @@ } }, "node_modules/webdriver-bidi-protocol": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/webdriver-bidi-protocol/-/webdriver-bidi-protocol-0.3.8.tgz", - "integrity": "sha512-21Yi2GhGntMc671vNBCjiAeEVknXjVRoyu+k+9xOMShu+ZQfpGQwnBqbNz/Sv4GXZ6JmutlPAi2nIJcrymAWuQ==", + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/webdriver-bidi-protocol/-/webdriver-bidi-protocol-0.3.9.tgz", + "integrity": "sha512-uIYvlRQ0PwtZR1EzHlTMol1G0lAlmOe6wPykF9a77AK3bkpvZHzIVxRE2ThOx5vjy2zISe0zhwf5rzuUfbo1PQ==", "dev": true, "license": "Apache-2.0" }, @@ -27439,6 +27574,7 @@ "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", "dev": true, "license": "ISC", + "peer": true, "bin": { "yaml": "bin.mjs" }, @@ -27591,6 +27727,7 @@ "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", "dev": true, "license": "MIT", + "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } @@ -27619,7 +27756,8 @@ "version": "0.15.1", "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.15.1.tgz", "integrity": "sha512-XE96n56IQpJM7NAoXswY3XRLcWFW83xe0BiAOeMD7K5k5xecOeul3Qcpx6GqEeeHNkW5DWL5zOyTbEfB4eti8w==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/zwitch": { "version": "2.0.4", diff --git a/projects/igniteui-angular/accordion/src/accordion/public_api.ts b/projects/igniteui-angular/accordion/src/accordion/public_api.ts index ac11e0d4286..4f380b900ab 100644 --- a/projects/igniteui-angular/accordion/src/accordion/public_api.ts +++ b/projects/igniteui-angular/accordion/src/accordion/public_api.ts @@ -5,7 +5,7 @@ export * from './accordion.component'; /* Imports that cannot be resolved from IGX_EXPANSION_PANEL_DIRECTIVES spread NOTE: Do not remove! Issue: https://github.com/IgniteUI/igniteui-angular/issues/13310 */ - import { +import { IgxExpansionPanelComponent, IgxExpansionPanelHeaderComponent, IgxExpansionPanelBodyComponent, diff --git a/projects/igniteui-angular/carousel/src/carousel/carousel.component.ts b/projects/igniteui-angular/carousel/src/carousel/carousel.component.ts index b5d8c2e6e7d..75eef06bb79 100644 --- a/projects/igniteui-angular/carousel/src/carousel/carousel.component.ts +++ b/projects/igniteui-angular/carousel/src/carousel/carousel.component.ts @@ -27,7 +27,7 @@ import { import { HammerGestureConfig, HAMMER_GESTURE_CONFIG } from '@angular/platform-browser'; import { merge, Subject } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; -import { CarouselResourceStringsEN, ICarouselResourceStrings } from 'igniteui-angular/core'; +import { CarouselResourceStringsEN, ICarouselResourceStrings, ɵIgxDirectionality } from 'igniteui-angular/core'; import { first, IBaseEventArgs, last, PlatformUtil } from 'igniteui-angular/core'; import { IgxAngularAnimationService } from 'igniteui-angular/core'; import { AnimationService } from 'igniteui-angular/core'; @@ -39,7 +39,6 @@ import { IgxButtonDirective } from 'igniteui-angular/directives'; import { getCurrentResourceStrings } from 'igniteui-angular/core'; import { HammerGesturesManager } from 'igniteui-angular/core'; import { CarouselAnimationType, CarouselIndicatorsOrientation } from './enums'; -import { ɵIgxDirectionality } from 'igniteui-angular/core'; let NEXT_ID = 0; diff --git a/projects/igniteui-angular/core/src/services/overlay/overlay.spec.ts b/projects/igniteui-angular/core/src/services/overlay/overlay.spec.ts index 5307058c656..1b53bb25dd8 100644 --- a/projects/igniteui-angular/core/src/services/overlay/overlay.spec.ts +++ b/projects/igniteui-angular/core/src/services/overlay/overlay.spec.ts @@ -12,13 +12,9 @@ import { import { fakeAsync, TestBed, tick, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { first } from 'rxjs/operators'; -import { IgxAvatarComponent } from '../../../../avatar/src/avatar/avatar.component'; -import { IgxCalendarComponent } from '../../../../calendar/src/public_api'; -import { IgxCalendarContainerComponent } from '../../../../date-picker/src/date-picker/calendar-container/calendar-container.component'; import { UIInteractions } from '../../../../test-utils/ui-interactions.spec'; import { IgxAngularAnimationService } from '../animation/angular-animation-service'; import { AnimationService } from '../animation/animation'; -import { IgxOverlayOutletDirective, IgxToggleDirective } from '../../../../directives/src/directives/toggle/toggle.directive'; import { IgxOverlayService } from './overlay'; import { ContainerPositionStrategy } from './position'; import { AutoPositionStrategy } from './position/auto-position-strategy'; @@ -33,6 +29,7 @@ import { CloseScrollStrategy } from './scroll/close-scroll-strategy'; import { NoOpScrollStrategy } from './scroll/NoOpScrollStrategy'; import { HorizontalAlignment, + IgxOverlayOutletDirective, OffsetMode, OverlayCancelableEventArgs, OverlayEventArgs, @@ -42,6 +39,10 @@ import { VerticalAlignment } from './utilities'; import { scaleInVerTop, scaleOutVerTop } from 'igniteui-angular/animations'; +import { IgxCalendarContainerComponent } from 'igniteui-angular/date-picker'; +import { IgxAvatarComponent } from 'igniteui-angular/avatar'; +import { IgxCalendarComponent } from 'igniteui-angular/calendar'; +import { IgxToggleDirective } from 'igniteui-angular/directives'; const CLASS_OVERLAY_CONTENT = 'igx-overlay__content'; const CLASS_OVERLAY_CONTENT_MODAL = 'igx-overlay__content--modal'; diff --git a/projects/igniteui-angular/core/src/services/overlay/utilities.ts b/projects/igniteui-angular/core/src/services/overlay/utilities.ts index 9441c0a955a..4459d1bdfb3 100644 --- a/projects/igniteui-angular/core/src/services/overlay/utilities.ts +++ b/projects/igniteui-angular/core/src/services/overlay/utilities.ts @@ -1,17 +1,29 @@ import { AnimationReferenceMetadata } from '@angular/animations'; -import { ComponentRef, ElementRef, Injector, NgZone } from '@angular/core'; +import { ComponentRef, Directive, ElementRef, Injector, NgZone } from '@angular/core'; import { CancelableBrowserEventArgs, CancelableEventArgs, cloneValue, IBaseEventArgs } from '../../core/utils'; import { AnimationPlayer } from '../animation/animation'; import { IPositionStrategy } from './position/IPositionStrategy'; import { IScrollStrategy } from './scroll'; /** - * Interface representing an overlay outlet directive. - * The actual implementation is in igniteui-angular/directives. + * Mark an element as an igxOverlay outlet container. + * Directive instance is exported as `overlay-outlet` to be assigned to templates variables: + * ```html + *
+ * ``` */ -export interface IgxOverlayOutletDirective { - element: ElementRef; - readonly nativeElement: HTMLElement; +@Directive({ + exportAs: 'overlay-outlet', + selector: '[igxOverlayOutlet]', + standalone: true +}) +export class IgxOverlayOutletDirective { + constructor(public element: ElementRef) { } + + /** @hidden */ + public get nativeElement() { + return this.element.nativeElement; + } } /* blazorAlternateName: GridHorizontalAlignment */ diff --git a/projects/igniteui-angular/core/src/services/public_api.ts b/projects/igniteui-angular/core/src/services/public_api.ts index 88d1c71891b..5a0ac3f116d 100644 --- a/projects/igniteui-angular/core/src/services/public_api.ts +++ b/projects/igniteui-angular/core/src/services/public_api.ts @@ -15,7 +15,8 @@ export * from './overlay/position'; export * from './overlay/scroll'; export { AbsolutePosition, ConnectedFit, HorizontalAlignment, OffsetMode, OverlayAnimationEventArgs, OverlayCancelableEventArgs, OverlayClosingEventArgs, - OverlayCreateSettings, OverlayEventArgs, OverlaySettings, Point, PositionSettings, RelativePosition, RelativePositionStrategy, Size, VerticalAlignment, Util + OverlayCreateSettings, OverlayEventArgs, OverlaySettings, Point, PositionSettings, RelativePosition, RelativePositionStrategy, Size, VerticalAlignment, Util, + IgxOverlayOutletDirective } from './overlay/utilities'; export * from './transaction/base-transaction'; export * from './transaction/hierarchical-transaction'; diff --git a/projects/igniteui-angular/date-picker/src/date-picker/date-picker.component.spec.ts b/projects/igniteui-angular/date-picker/src/date-picker/date-picker.component.spec.ts index 07d2c13758e..16ad78106d9 100644 --- a/projects/igniteui-angular/date-picker/src/date-picker/date-picker.component.spec.ts +++ b/projects/igniteui-angular/date-picker/src/date-picker/date-picker.component.spec.ts @@ -9,6 +9,7 @@ import { IFormattingViews, IgxCalendarComponent, IgxCalendarHeaderTemplateDirect import { IgxCalendarContainerComponent } from './calendar-container/calendar-container.component'; import { IgxDatePickerComponent } from './date-picker.component'; import { + IgxOverlayOutletDirective, IgxOverlayService, OverlayCancelableEventArgs, OverlayClosingEventArgs, OverlayEventArgs, OverlaySettings, WEEKDAYS @@ -18,7 +19,6 @@ import { By } from '@angular/platform-browser'; import { PickerCalendarOrientation, PickerHeaderOrientation, PickerInteractionMode } from '../../../core/src/date-common/types'; import { DatePart } from '../../../core/src/date-common/public_api'; import { DateRangeDescriptor, DateRangeType } from 'igniteui-angular/core'; -import { IgxOverlayOutletDirective } from '../../../directives/src/directives/toggle/toggle.directive'; import { IgxPickerClearComponent, IgxPickerToggleComponent } from '../../../core/src/date-common/public_api'; import { DateTimeUtil } from '../../../core/src/date-common/util/date-time.util'; import { registerLocaleData } from "@angular/common"; diff --git a/projects/igniteui-angular/date-picker/src/date-picker/date-picker.component.ts b/projects/igniteui-angular/date-picker/src/date-picker/date-picker.component.ts index 44e2b987ba0..c649d6bdd99 100644 --- a/projects/igniteui-angular/date-picker/src/date-picker/date-picker.component.ts +++ b/projects/igniteui-angular/date-picker/src/date-picker/date-picker.component.ts @@ -43,7 +43,7 @@ import { import { fromEvent, Subscription, noop, MonoTypeOperatorFunction } from 'rxjs'; import { filter, takeUntil } from 'rxjs/operators'; -import { IgxDateTimeEditorDirective, IgxOverlayOutletDirective, IgxTextSelectionDirective } from 'igniteui-angular/directives'; +import { IgxDateTimeEditorDirective, IgxTextSelectionDirective } from 'igniteui-angular/directives'; import { AbsoluteScrollStrategy, AutoPositionStrategy, @@ -64,7 +64,8 @@ import { DateTimeUtil, DatePartDeltas, DatePart, - isDateInRanges + isDateInRanges, + IgxOverlayOutletDirective } from 'igniteui-angular/core'; import { IDatePickerValidationFailedEventArgs } from './date-picker.common'; import { IgxIconComponent } from 'igniteui-angular/icon'; diff --git a/projects/igniteui-angular/date-picker/src/date-picker/picker-base.directive.ts b/projects/igniteui-angular/date-picker/src/date-picker/picker-base.directive.ts index c3e516f54bd..b32be7bebd4 100644 --- a/projects/igniteui-angular/date-picker/src/date-picker/picker-base.directive.ts +++ b/projects/igniteui-angular/date-picker/src/date-picker/picker-base.directive.ts @@ -8,8 +8,7 @@ import { getLocaleFirstDayOfWeek } from "@angular/common"; import { merge, Subject } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; import { IGX_INPUT_GROUP_TYPE, IgxInputGroupComponent, IgxInputGroupType, IgxPrefixDirective, IgxSuffixDirective } from 'igniteui-angular/input-group'; -import { DateRange, EditorProvider, IBaseCancelableBrowserEventArgs, IBaseEventArgs, IgxPickerClearComponent, IgxPickerToggleComponent, IToggleView, OverlaySettings, PickerHeaderOrientation, PickerInteractionMode, WEEKDAYS } from 'igniteui-angular/core'; -import { IgxOverlayOutletDirective } from 'igniteui-angular/directives'; +import { DateRange, EditorProvider, IBaseCancelableBrowserEventArgs, IBaseEventArgs, IgxOverlayOutletDirective, IgxPickerClearComponent, IgxPickerToggleComponent, IToggleView, OverlaySettings, PickerHeaderOrientation, PickerInteractionMode, WEEKDAYS } from 'igniteui-angular/core'; @Directive() export abstract class PickerBaseDirective implements IToggleView, EditorProvider, AfterViewInit, AfterContentChecked, OnDestroy { diff --git a/projects/igniteui-angular/date-picker/src/date-range-picker/date-range-picker.component.ts b/projects/igniteui-angular/date-picker/src/date-range-picker/date-range-picker.component.ts index 4b2789c892f..ca15a8b834b 100644 --- a/projects/igniteui-angular/date-picker/src/date-range-picker/date-range-picker.component.ts +++ b/projects/igniteui-angular/date-picker/src/date-range-picker/date-range-picker.component.ts @@ -37,11 +37,11 @@ import { DateTimeUtil, IgxPickerActionsDirective, isDateInRanges, - PickerCalendarOrientation + PickerCalendarOrientation, + IgxOverlayOutletDirective } from 'igniteui-angular/core'; import { IgxCalendarContainerComponent } from '../date-picker/calendar-container/calendar-container.component'; import { PickerBaseDirective } from '../date-picker/picker-base.directive'; -import { IgxOverlayOutletDirective } from 'igniteui-angular/directives'; import { IgxInputDirective, IgxInputGroupComponent, diff --git a/projects/igniteui-angular/directives/src/directives/notification/notifications.directive.ts b/projects/igniteui-angular/directives/src/directives/notification/notifications.directive.ts index bf318a6f312..0df270be7f5 100644 --- a/projects/igniteui-angular/directives/src/directives/notification/notifications.directive.ts +++ b/projects/igniteui-angular/directives/src/directives/notification/notifications.directive.ts @@ -1,7 +1,7 @@ import { Directive, ElementRef, HostBinding, Input, OnDestroy, booleanAttribute } from '@angular/core'; -import { IToggleView } from 'igniteui-angular/core'; +import { IgxOverlayOutletDirective, IToggleView } from 'igniteui-angular/core'; import { IPositionStrategy, OverlaySettings } from 'igniteui-angular/core'; -import { IgxOverlayOutletDirective, IgxToggleDirective } from '../toggle/toggle.directive'; +import { IgxToggleDirective } from '../toggle/toggle.directive'; @Directive() export abstract class IgxNotificationsDirective extends IgxToggleDirective diff --git a/projects/igniteui-angular/directives/src/directives/toggle/toggle.directive.spec.ts b/projects/igniteui-angular/directives/src/directives/toggle/toggle.directive.spec.ts index 45b8ed094c9..cf4f3cd509f 100644 --- a/projects/igniteui-angular/directives/src/directives/toggle/toggle.directive.spec.ts +++ b/projects/igniteui-angular/directives/src/directives/toggle/toggle.directive.spec.ts @@ -2,15 +2,10 @@ import { ChangeDetectionStrategy, Component, DebugElement, ViewChild, ElementRef import { fakeAsync, TestBed, tick, waitForAsync } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; -import { IgxToggleActionDirective, IgxToggleDirective, IgxOverlayOutletDirective } from './toggle.directive'; -import { - IgxOverlayService, OverlaySettings, ConnectedPositioningStrategy, - AbsoluteScrollStrategy, AutoPositionStrategy, HorizontalAlignment -} from '../../../../core/src/services/public_api'; -import { CancelableEventArgs } from '../../../../core/src/core/utils'; +import { IgxToggleActionDirective, IgxToggleDirective } from './toggle.directive'; import { first } from 'rxjs/operators'; -import { OffsetMode } from '../../../../core/src/services/overlay/utilities'; +import { AbsoluteScrollStrategy, AutoPositionStrategy, CancelableEventArgs, ConnectedPositioningStrategy, HorizontalAlignment, IgxOverlayOutletDirective, IgxOverlayService, OffsetMode, OverlaySettings } from 'igniteui-angular/core'; describe('IgxToggle', () => { const HIDDEN_TOGGLER_CLASS = 'igx-toggle--hidden'; diff --git a/projects/igniteui-angular/directives/src/directives/toggle/toggle.directive.ts b/projects/igniteui-angular/directives/src/directives/toggle/toggle.directive.ts index 3289bc062b3..286472fab6b 100644 --- a/projects/igniteui-angular/directives/src/directives/toggle/toggle.directive.ts +++ b/projects/igniteui-angular/directives/src/directives/toggle/toggle.directive.ts @@ -11,7 +11,7 @@ import { Optional, Output, } from '@angular/core'; -import { AbsoluteScrollStrategy } from 'igniteui-angular/core'; +import { AbsoluteScrollStrategy, IgxOverlayOutletDirective } from 'igniteui-angular/core'; import { CancelableBrowserEventArgs, IBaseEventArgs, PlatformUtil } from 'igniteui-angular/core'; import { ConnectedPositioningStrategy } from 'igniteui-angular/core'; import { filter, first, takeUntil } from 'rxjs/operators'; @@ -526,24 +526,3 @@ export class IgxToggleActionDirective implements OnInit { return settings; } } - -/** - * Mark an element as an igxOverlay outlet container. - * Directive instance is exported as `overlay-outlet` to be assigned to templates variables: - * ```html - *
- * ``` - */ -@Directive({ - exportAs: 'overlay-outlet', - selector: '[igxOverlayOutlet]', - standalone: true -}) -export class IgxOverlayOutletDirective { - constructor(public element: ElementRef) { } - - /** @hidden */ - public get nativeElement() { - return this.element.nativeElement; - } -} diff --git a/projects/igniteui-angular/directives/src/directives/toggle/toggle.module.ts b/projects/igniteui-angular/directives/src/directives/toggle/toggle.module.ts index 89bf597b6b8..dbc4a79d4d5 100644 --- a/projects/igniteui-angular/directives/src/directives/toggle/toggle.module.ts +++ b/projects/igniteui-angular/directives/src/directives/toggle/toggle.module.ts @@ -1,12 +1,12 @@ import { NgModule } from '@angular/core'; -import { IgxOverlayOutletDirective, IgxToggleActionDirective, IgxToggleDirective } from './toggle.directive'; +import { IgxToggleActionDirective, IgxToggleDirective } from './toggle.directive'; /** * @hidden * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components */ @NgModule({ - imports: [IgxToggleDirective, IgxToggleActionDirective, IgxOverlayOutletDirective], - exports: [IgxToggleDirective, IgxToggleActionDirective, IgxOverlayOutletDirective] + imports: [IgxToggleDirective, IgxToggleActionDirective], + exports: [IgxToggleDirective, IgxToggleActionDirective] }) export class IgxToggleModule { } diff --git a/projects/igniteui-angular/drop-down/src/drop-down/autocomplete/autocomplete.directive.ts b/projects/igniteui-angular/drop-down/src/drop-down/autocomplete/autocomplete.directive.ts index 83934e7a1b6..019c2df9c8f 100644 --- a/projects/igniteui-angular/drop-down/src/drop-down/autocomplete/autocomplete.directive.ts +++ b/projects/igniteui-angular/drop-down/src/drop-down/autocomplete/autocomplete.directive.ts @@ -18,7 +18,7 @@ import { import { NgModel, FormControlName } from '@angular/forms'; import { Subject } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; -import { CancelableEventArgs, IBaseEventArgs } from 'igniteui-angular/core'; +import { CancelableEventArgs, IBaseEventArgs, IgxOverlayOutletDirective } from 'igniteui-angular/core'; import { AbsoluteScrollStrategy, AutoPositionStrategy, @@ -28,7 +28,6 @@ import { } from 'igniteui-angular/core'; import { IgxDropDownComponent } from '../drop-down.component'; import { IgxDropDownItemNavigationDirective } from '../drop-down-navigation.directive'; -import { IgxOverlayOutletDirective } from 'igniteui-angular/directives'; import { ISelectionEventArgs } from '../drop-down.common'; import { IgxInputGroupComponent } from 'igniteui-angular/input-group'; diff --git a/projects/igniteui-angular/drop-down/src/drop-down/public_api.ts b/projects/igniteui-angular/drop-down/src/drop-down/public_api.ts index 25f4a0188b9..e627fa1a5c9 100644 --- a/projects/igniteui-angular/drop-down/src/drop-down/public_api.ts +++ b/projects/igniteui-angular/drop-down/src/drop-down/public_api.ts @@ -12,6 +12,7 @@ export { ISelectionEventArgs, IDropDownNavigationDirective } from './drop-down.c export * from './drop-down-navigation.directive'; export * from './drop-down-group.component'; export * from './autocomplete/autocomplete.directive'; +export * from './autocomplete/autocomplete.module'; /* NOTE: Drop down directives collection for ease-of-use import in standalone components scenario */ export const IGX_DROP_DOWN_DIRECTIVES = [ diff --git a/projects/igniteui-angular/grids/core/src/columns/public_api.ts b/projects/igniteui-angular/grids/core/src/columns/public_api.ts index 89487810b6f..bbecc39ab22 100644 --- a/projects/igniteui-angular/grids/core/src/columns/public_api.ts +++ b/projects/igniteui-angular/grids/core/src/columns/public_api.ts @@ -18,7 +18,7 @@ import { IgxColumnMinLengthValidatorDirective, IgxColumnMinValidatorDirective, IgxColumnRequiredValidatorDirective, - IgxColumPatternValidatorDirective + IgxColumnPatternValidatorDirective } from './validators.directive'; export * from './column.component'; @@ -35,7 +35,7 @@ export const IGX_GRID_VALIDATION_DIRECTIVES = [ IgxColumnEmailValidatorDirective, IgxColumnMinLengthValidatorDirective, IgxColumnMaxLengthValidatorDirective, - IgxColumPatternValidatorDirective + IgxColumnPatternValidatorDirective ] as const; /* NOTE: Grid column validation directives collection for ease-of-use import in standalone components scenario */ diff --git a/projects/igniteui-angular/grids/core/src/columns/validators.directive.ts b/projects/igniteui-angular/grids/core/src/columns/validators.directive.ts index dc8a9b845fd..729b9eb8829 100644 --- a/projects/igniteui-angular/grids/core/src/columns/validators.directive.ts +++ b/projects/igniteui-angular/grids/core/src/columns/validators.directive.ts @@ -2,7 +2,7 @@ import { Directive } from '@angular/core'; import { RequiredValidator, NG_VALIDATORS, MinValidator, MaxValidator, EmailValidator, MinLengthValidator, MaxLengthValidator, PatternValidator } from '@angular/forms'; @Directive({ - + selector: 'igx-column[required]', providers: [{ provide: NG_VALIDATORS, @@ -15,7 +15,7 @@ export class IgxColumnRequiredValidatorDirective extends RequiredValidator { } @Directive({ - + selector: 'igx-column[min]', providers: [{ provide: NG_VALIDATORS, @@ -28,7 +28,7 @@ export class IgxColumnMinValidatorDirective extends MinValidator { } @Directive({ - + selector: 'igx-column[max]', providers: [{ provide: NG_VALIDATORS, @@ -41,7 +41,7 @@ export class IgxColumnMaxValidatorDirective extends MaxValidator { } @Directive({ - + selector: 'igx-column[email]', providers: [{ provide: NG_VALIDATORS, @@ -54,7 +54,7 @@ export class IgxColumnEmailValidatorDirective extends EmailValidator { } @Directive({ - + selector: 'igx-column[minlength]', providers: [{ provide: NG_VALIDATORS, @@ -66,7 +66,7 @@ export class IgxColumnEmailValidatorDirective extends EmailValidator { } export class IgxColumnMinLengthValidatorDirective extends MinLengthValidator { } @Directive({ - + selector: 'igx-column[maxlength]', providers: [{ provide: NG_VALIDATORS, @@ -79,14 +79,14 @@ export class IgxColumnMaxLengthValidatorDirective extends MaxLengthValidator { } @Directive({ - + selector: 'igx-column[pattern]', providers: [{ provide: NG_VALIDATORS, - useExisting: IgxColumPatternValidatorDirective, + useExisting: IgxColumnPatternValidatorDirective, multi: true }], standalone: true }) -export class IgxColumPatternValidatorDirective extends PatternValidator { +export class IgxColumnPatternValidatorDirective extends PatternValidator { } diff --git a/projects/igniteui-angular/grids/core/src/common/grid.interface.ts b/projects/igniteui-angular/grids/core/src/common/grid.interface.ts index e70a4a40dae..b1bbd4a9580 100644 --- a/projects/igniteui-angular/grids/core/src/common/grid.interface.ts +++ b/projects/igniteui-angular/grids/core/src/common/grid.interface.ts @@ -15,9 +15,9 @@ import { IgxCell, IgxEditRow } from './crud.service'; import { GridSelectionRange } from './types'; import { DropPosition, IgxColumnMovingService } from '../moving/moving.service'; import { Observable, Subject } from 'rxjs'; -import { ColumnPinningPosition, ColumnType, FilteringExpressionsTree, FilteringLogic, GridColumnDataType, GridSummaryCalculationMode, GridTypeBase, IDataCloneStrategy, IFilteringExpressionsTree, IFilteringStrategy, IGridGroupingStrategy, IGridMergeStrategy, IGridResourceStrings, IGridSortingStrategy, IGroupByExpandState, IGroupByRecord, IGroupingExpression, IgxSummaryResult, IPathSegment, ISortingExpression, ISortingOptions, ITreeGridRecord, OverlaySettings, ɵSize, SortingDirection, State, Transaction, TransactionService } from 'igniteui-angular/core'; +import { ColumnPinningPosition, ColumnType, FilteringExpressionsTree, FilteringLogic, GridColumnDataType, GridSummaryCalculationMode, GridTypeBase, IDataCloneStrategy, IFilteringExpressionsTree, IFilteringStrategy, IGridGroupingStrategy, IGridMergeStrategy, IGridResourceStrings, IGridSortingStrategy, IGroupByExpandState, IGroupByRecord, IGroupingExpression, IgxSummaryResult, IPathSegment, ISortingExpression, ISortingOptions, ITreeGridRecord, OverlaySettings, ɵSize, SortingDirection, State, Transaction, TransactionService, type IgxOverlayOutletDirective } from 'igniteui-angular/core'; import { FormControl, FormGroup, ValidationErrors } from '@angular/forms'; -import type { IForOfState, IgxGridForOfDirective, IgxOverlayOutletDirective, IgxToggleDirective } from 'igniteui-angular/directives'; +import type { IForOfState, IgxGridForOfDirective, IgxToggleDirective } from 'igniteui-angular/directives'; import type { IgxPaginatorComponent } from 'igniteui-angular/paginator'; import { IgxGridValidationService } from '../grid-validation.service'; import { IDimensionsChange, IPivotConfiguration, IPivotDimension, IPivotKeys, IPivotUISettings, IPivotValue, IValuesChange, PivotDimensionType } from '../pivot-grid.interface'; diff --git a/projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-date-expression.component.ts b/projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-date-expression.component.ts index 6ba453b362f..417379410f9 100644 --- a/projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-date-expression.component.ts +++ b/projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-date-expression.component.ts @@ -6,9 +6,9 @@ import { IgxSelectComponent, IgxSelectItemComponent } from 'igniteui-angular/sel import { IgxInputDirective, IgxInputGroupComponent, IgxPrefixDirective } from 'igniteui-angular/input-group'; import { IgxIconComponent } from 'igniteui-angular/icon'; import { IgxDatePickerComponent } from 'igniteui-angular/date-picker'; -import { IgxPickerClearComponent, IgxPickerToggleComponent } from 'igniteui-angular/core'; +import { IgxOverlayOutletDirective, IgxPickerClearComponent, IgxPickerToggleComponent } from 'igniteui-angular/core'; import { IgxTimePickerComponent } from 'igniteui-angular/time-picker'; -import { IgxButtonDirective, IgxDateTimeEditorDirective, IgxIconButtonDirective, IgxOverlayOutletDirective } from 'igniteui-angular/directives'; +import { IgxButtonDirective, IgxDateTimeEditorDirective, IgxIconButtonDirective } from 'igniteui-angular/directives'; import { IgxButtonGroupComponent } from 'igniteui-angular/button-group'; /** diff --git a/projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-default-expression.component.ts b/projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-default-expression.component.ts index 7ef21aab955..71fb49cc960 100644 --- a/projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-default-expression.component.ts +++ b/projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-default-expression.component.ts @@ -9,11 +9,11 @@ import { } from '@angular/core'; import { FormsModule } from '@angular/forms'; import { ExpressionUI } from './common'; -import { AbsoluteScrollStrategy, ColumnType, ConnectedPositioningStrategy, DataUtil, FilteringLogic, GridColumnDataType, IBaseEventArgs, IFilteringOperation, OverlaySettings, PlatformUtil } from 'igniteui-angular/core'; +import { AbsoluteScrollStrategy, ColumnType, ConnectedPositioningStrategy, DataUtil, FilteringLogic, GridColumnDataType, IBaseEventArgs, IFilteringOperation, IgxOverlayOutletDirective, OverlaySettings, PlatformUtil } from 'igniteui-angular/core'; import { IgxSelectComponent, IgxSelectItemComponent } from 'igniteui-angular/select'; import { IgxInputDirective, IgxInputGroupComponent, IgxPrefixDirective } from 'igniteui-angular/input-group'; import { IgxIconComponent } from 'igniteui-angular/icon'; -import { IgxButtonDirective, IgxIconButtonDirective, IgxOverlayOutletDirective } from 'igniteui-angular/directives'; +import { IgxButtonDirective, IgxIconButtonDirective } from 'igniteui-angular/directives'; import { IgxButtonGroupComponent } from 'igniteui-angular/button-group'; /** diff --git a/projects/igniteui-angular/grids/core/src/pivot-grid.interface.ts b/projects/igniteui-angular/grids/core/src/pivot-grid.interface.ts index 76d3784cfbc..edbb95dc676 100644 --- a/projects/igniteui-angular/grids/core/src/pivot-grid.interface.ts +++ b/projects/igniteui-angular/grids/core/src/pivot-grid.interface.ts @@ -230,7 +230,7 @@ export interface IPivotUISettings { horizontalSummariesPosition?: PivotSummaryPosition; } -export type PivotAggregationType = 'SUM' | 'AVG' | 'MIN' | 'MAX' | 'COUNT' | 'LATEST' | 'EARLIEST' ; +export type PivotAggregationType = 'SUM' | 'AVG' | 'MIN' | 'MAX' | 'COUNT' | 'LATEST' | 'EARLIEST'; /** Interface describing the pivot dimension data. * Contains additional information needed to render dimension headers. diff --git a/projects/igniteui-angular/grids/core/src/public_api.ts b/projects/igniteui-angular/grids/core/src/public_api.ts index 9e8b122047d..29c86eba1fd 100644 --- a/projects/igniteui-angular/grids/core/src/public_api.ts +++ b/projects/igniteui-angular/grids/core/src/public_api.ts @@ -73,8 +73,7 @@ export { IgxRowEditTabStopDirective, IgxRowEditTemplateDirective } from './grid.rowEdit.directive'; -export { IGridState, IColumnState, IGridStateCollection, IGridStateOptions, GridFeatures } from './state-base.directive'; -export { IgxGridStateBaseDirective } from './state-base.directive'; +export * from './state-base.directive'; export * from './state.directive'; export * from './columns/public_api'; export * from './headers/public_api'; diff --git a/projects/igniteui-angular/grids/grid/src/column.spec.ts b/projects/igniteui-angular/grids/grid/src/column.spec.ts index 5da248006f5..06c055a128d 100644 --- a/projects/igniteui-angular/grids/grid/src/column.spec.ts +++ b/projects/igniteui-angular/grids/grid/src/column.spec.ts @@ -1353,37 +1353,37 @@ describe('IgxGrid - Column properties #grid', () => { let fix: ComponentFixture; let grid: IgxGridComponent; const dataWithImages = [{ - avatar: 'assets/images/avatar/1.jpg', + avatar: './test-utils/assets/images/avatar/1.jpg', phone: '770-504-2217', text: 'Terrance Orta', available: false }, { - avatar: 'assets/images/avatar/2.jpg', + avatar: './test-utils/assets/images/avatar/2.jpg', phone: '423-676-2869', text: 'Richard Mahoney', available: true }, { - avatar: 'assets/images/avatar/3.jpg', + avatar: './test-utils/assets/images/avatar/3.jpg', phone: '859-496-2817', text: 'Donna Price', available: true }, { - avatar: 'assets/images/avatar/4.jpg', + avatar: './test-utils/assets/images/avatar/4.jpg', phone: '901-747-3428', text: 'Lisa Landers', available: true }, { - avatar: 'assets/images/avatar/12.jpg', + avatar: './test-utils/assets/images/avatar/12.jpg', phone: '573-394-9254', text: 'Dorothy H. Spencer', available: true }, { - avatar: 'assets/images/avatar/13.jpg', + avatar: './test-utils/assets/images/avatar/13.jpg', phone: '323-668-1482', text: 'Stephanie May', available: false }, { - avatar: 'assets/images/avatar/14.jpg', + avatar: './test-utils/assets/images/avatar/14.jpg', phone: '401-661-3742', text: 'Marianne Taylor', available: true @@ -1410,7 +1410,7 @@ describe('IgxGrid - Column properties #grid', () => { const cell = column._cells[0]; expect(cell.nativeElement.firstElementChild.tagName).toBe('IMG'); - expect(cell.nativeElement.firstElementChild.getAttribute('src')).toBe('assets/images/avatar/1.jpg'); + expect(cell.nativeElement.firstElementChild.getAttribute('src')).toBe('./test-utils/assets/images/avatar/1.jpg'); expect(cell.nativeElement.firstElementChild.getAttribute('alt')).toBe('1'); }); diff --git a/projects/igniteui-angular/grids/grid/src/grid-base.directive.ts b/projects/igniteui-angular/grids/grid/src/grid-base.directive.ts index c8373625afc..ac4d2fe594d 100644 --- a/projects/igniteui-angular/grids/grid/src/grid-base.directive.ts +++ b/projects/igniteui-angular/grids/grid/src/grid-base.directive.ts @@ -91,13 +91,13 @@ import { GridSummaryCalculationMode, IgxActionStripToken, GridResourceStringsEN, - IGridResourceStrings + IGridResourceStrings, + IgxOverlayOutletDirective } from 'igniteui-angular/core'; import { IgcTrialWatermark } from 'igniteui-trial-watermark'; import { Subject, pipe, fromEvent, animationFrameScheduler, merge } from 'rxjs'; import { takeUntil, first, filter, throttleTime, map, shareReplay, takeWhile } from 'rxjs/operators'; import { - IgxOverlayOutletDirective, IgxToggleDirective, IForOfDataChangeEventArgs, IgxGridForOfDirective, diff --git a/projects/igniteui-angular/grids/grid/src/grid.component.ts b/projects/igniteui-angular/grids/grid/src/grid.component.ts index 54a81c382a1..69474e86d7c 100644 --- a/projects/igniteui-angular/grids/grid/src/grid.component.ts +++ b/projects/igniteui-angular/grids/grid/src/grid.component.ts @@ -50,13 +50,13 @@ import { import { IgxGridAPIService } from './grid-api.service'; import { IgxGridGroupByRowComponent } from './groupby-row.component'; import { take, takeUntil } from 'rxjs/operators'; -import { cloneArray, IBaseEventArgs, IGridGroupingStrategy, IGroupByExpandState, IGroupByRecord, IGroupingExpression, ISortingExpression } from 'igniteui-angular/core'; +import { cloneArray, IBaseEventArgs, IGridGroupingStrategy, IGroupByExpandState, IGroupByRecord, IGroupingExpression, IgxOverlayOutletDirective, ISortingExpression } from 'igniteui-angular/core'; import { IgxGridDetailsPipe } from './grid.details.pipe'; import { IgxGridSummaryPipe } from './grid.summary.pipe'; import { IgxGridGroupingPipe, IgxGridPagingPipe, IgxGridSortingPipe, IgxGridFilteringPipe, IgxGridCellMergePipe, IgxGridUnmergeActivePipe } from './grid.pipes'; import { IgxGridRowComponent } from './grid-row.component'; import { Observable, Subject } from 'rxjs'; -import { IForOfState, IgxButtonDirective, IgxForOfScrollSyncService, IgxForOfSyncService, IgxGridForOfDirective, IgxOverlayOutletDirective, IgxRippleDirective, IgxScrollInertiaDirective, IgxTemplateOutletDirective, IgxToggleDirective } from 'igniteui-angular/directives'; +import { IForOfState, IgxButtonDirective, IgxForOfScrollSyncService, IgxForOfSyncService, IgxGridForOfDirective, IgxRippleDirective, IgxScrollInertiaDirective, IgxTemplateOutletDirective, IgxToggleDirective } from 'igniteui-angular/directives'; import { IgxCircularProgressBarComponent } from 'igniteui-angular/progressbar'; import { IgxSnackbarComponent } from 'igniteui-angular/snackbar'; import { IgxIconComponent } from 'igniteui-angular/icon'; diff --git a/projects/igniteui-angular/grids/grid/src/public_api.ts b/projects/igniteui-angular/grids/grid/src/public_api.ts index 380502c260f..e439197ac4f 100644 --- a/projects/igniteui-angular/grids/grid/src/public_api.ts +++ b/projects/igniteui-angular/grids/grid/src/public_api.ts @@ -41,7 +41,7 @@ import { IgxColumnEmailValidatorDirective, IgxColumnMinLengthValidatorDirective, IgxColumnMaxLengthValidatorDirective, - IgxColumPatternValidatorDirective, + IgxColumnPatternValidatorDirective, IgxColumnActionsComponent, IgxColumnHidingDirective, IgxColumnPinningDirective, @@ -174,7 +174,7 @@ export const IGX_GRID_DIRECTIVES = [ IgxColumnEmailValidatorDirective, IgxColumnMinLengthValidatorDirective, IgxColumnMaxLengthValidatorDirective, - IgxColumPatternValidatorDirective, + IgxColumnPatternValidatorDirective, // IGX_PAGINATOR_DIRECTIVES: IgxPaginatorComponent, IgxPageNavigationComponent, diff --git a/projects/igniteui-angular/grids/hierarchical-grid/src/hierarchical-grid.component.ts b/projects/igniteui-angular/grids/hierarchical-grid/src/hierarchical-grid.component.ts index fb151362a28..6c23986d6f6 100644 --- a/projects/igniteui-angular/grids/hierarchical-grid/src/hierarchical-grid.component.ts +++ b/projects/igniteui-angular/grids/hierarchical-grid/src/hierarchical-grid.component.ts @@ -52,11 +52,11 @@ import { IgxGridDragSelectDirective } from 'igniteui-angular/grids/core'; import { IgxGridBodyDirective } from 'igniteui-angular/grids/core'; import { IgxGridHeaderRowComponent } from 'igniteui-angular/grids/core'; import { IgxGridSelectionService } from 'igniteui-angular/grids/core'; -import { IgxButtonDirective, IgxForOfScrollSyncService, IgxForOfSyncService, IgxGridForOfDirective, IgxOverlayOutletDirective, IgxRippleDirective, IgxScrollInertiaDirective, IgxTemplateOutletDirective, IgxToggleDirective } from 'igniteui-angular/directives'; +import { IgxButtonDirective, IgxForOfScrollSyncService, IgxForOfSyncService, IgxGridForOfDirective, IgxRippleDirective, IgxScrollInertiaDirective, IgxTemplateOutletDirective, IgxToggleDirective } from 'igniteui-angular/directives'; import { IgxCircularProgressBarComponent } from 'igniteui-angular/progressbar'; import { IgxSnackbarComponent } from 'igniteui-angular/snackbar'; import { IgxIconComponent } from 'igniteui-angular/icon'; -import { EntityType, FieldType, IFilteringExpressionsTree, IgxActionStripToken, flatten } from 'igniteui-angular/core'; +import { EntityType, FieldType, IFilteringExpressionsTree, IgxActionStripToken, IgxOverlayOutletDirective, flatten } from 'igniteui-angular/core'; import { IgxPaginatorToken } from 'igniteui-angular/paginator'; import { IgxGridCellMergePipe, IgxGridComponent, IgxGridFilteringPipe, IgxGridSortingPipe, IgxGridUnmergeActivePipe } from 'igniteui-angular/grids/grid'; diff --git a/projects/igniteui-angular/grids/hierarchical-grid/src/public_api.ts b/projects/igniteui-angular/grids/hierarchical-grid/src/public_api.ts index 218b772d3c6..2ab86a012d1 100644 --- a/projects/igniteui-angular/grids/hierarchical-grid/src/public_api.ts +++ b/projects/igniteui-angular/grids/hierarchical-grid/src/public_api.ts @@ -49,7 +49,7 @@ import { IgxColumnEmailValidatorDirective, IgxColumnMinLengthValidatorDirective, IgxColumnMaxLengthValidatorDirective, - IgxColumPatternValidatorDirective, + IgxColumnPatternValidatorDirective, IgxColumnActionsComponent, IgxColumnHidingDirective, IgxColumnPinningDirective, @@ -167,7 +167,7 @@ export const IGX_HIERARCHICAL_GRID_DIRECTIVES = [ IgxColumnEmailValidatorDirective, IgxColumnMinLengthValidatorDirective, IgxColumnMaxLengthValidatorDirective, - IgxColumPatternValidatorDirective, + IgxColumnPatternValidatorDirective, // IGX_PAGINATOR_DIRECTIVES: IgxPaginatorComponent, IgxPageNavigationComponent, diff --git a/projects/igniteui-angular/grids/pivot-grid/src/pivot-grid.component.ts b/projects/igniteui-angular/grids/pivot-grid/src/pivot-grid.component.ts index 00c23733755..c91fa2f1184 100644 --- a/projects/igniteui-angular/grids/pivot-grid/src/pivot-grid.component.ts +++ b/projects/igniteui-angular/grids/pivot-grid/src/pivot-grid.component.ts @@ -43,7 +43,7 @@ import { IgxColumnGroupComponent } from 'igniteui-angular/grids/core'; import { IgxColumnComponent } from 'igniteui-angular/grids/core'; import { FilterMode, GridPagingMode, GridSummaryPosition } from 'igniteui-angular/grids/core'; import { WatchChanges } from 'igniteui-angular/grids/core'; -import { cloneArray, ColumnType, DataUtil, DefaultDataCloneStrategy, GridColumnDataType, GridSummaryCalculationMode, IDataCloneStrategy, IFilteringExpressionsTree, IFilteringOperation, IFilteringStrategy, ISortingExpression, OverlaySettings, PlatformUtil, resizeObservable, ɵSize, SortingDirection } from 'igniteui-angular/core'; +import { cloneArray, ColumnType, DataUtil, DefaultDataCloneStrategy, GridColumnDataType, GridSummaryCalculationMode, IDataCloneStrategy, IFilteringExpressionsTree, IFilteringOperation, IFilteringStrategy, ISortingExpression, OverlaySettings, PlatformUtil, resizeObservable, ɵSize, SortingDirection, IgxOverlayOutletDirective } from 'igniteui-angular/core'; import { IGridEditEventArgs, ICellPosition, @@ -82,7 +82,7 @@ import { IgxGridBodyDirective } from 'igniteui-angular/grids/core'; import { IgxColumnResizingService } from 'igniteui-angular/grids/core'; import { IgxPivotRowHeaderGroupComponent } from './pivot-row-header-group.component'; import { IgxPivotRowDimensionMrlRowComponent } from './pivot-row-dimension-mrl-row.component'; -import { IForOfDataChangingEventArgs, IgxForOfScrollSyncService, IgxForOfSyncService, IgxGridForOfDirective, IgxOverlayOutletDirective, IgxTemplateOutletDirective, IgxTextHighlightService, IgxToggleDirective } from 'igniteui-angular/directives'; +import { IForOfDataChangingEventArgs, IgxForOfScrollSyncService, IgxForOfSyncService, IgxGridForOfDirective, IgxTemplateOutletDirective, IgxTextHighlightService, IgxToggleDirective } from 'igniteui-angular/directives'; import { IgxCircularProgressBarComponent } from 'igniteui-angular/progressbar'; import { IgxSnackbarComponent } from 'igniteui-angular/snackbar'; import { IgxIconComponent } from 'igniteui-angular/icon'; diff --git a/projects/igniteui-angular/grids/tree-grid/src/public_api.ts b/projects/igniteui-angular/grids/tree-grid/src/public_api.ts index 989f17e19f4..e0051743288 100644 --- a/projects/igniteui-angular/grids/tree-grid/src/public_api.ts +++ b/projects/igniteui-angular/grids/tree-grid/src/public_api.ts @@ -50,7 +50,7 @@ import { IgxColumnEmailValidatorDirective, IgxColumnMinLengthValidatorDirective, IgxColumnMaxLengthValidatorDirective, - IgxColumPatternValidatorDirective, + IgxColumnPatternValidatorDirective, IgxColumnActionsComponent, IgxColumnHidingDirective, IgxColumnPinningDirective, @@ -169,7 +169,7 @@ export const IGX_TREE_GRID_DIRECTIVES = [ IgxColumnEmailValidatorDirective, IgxColumnMinLengthValidatorDirective, IgxColumnMaxLengthValidatorDirective, - IgxColumPatternValidatorDirective, + IgxColumnPatternValidatorDirective, // IGX_PAGINATOR_DIRECTIVES: IgxPaginatorComponent, IgxPageNavigationComponent, diff --git a/projects/igniteui-angular/grids/tree-grid/src/tree-grid.component.ts b/projects/igniteui-angular/grids/tree-grid/src/tree-grid.component.ts index 725537cd983..2d1890a5e31 100644 --- a/projects/igniteui-angular/grids/tree-grid/src/tree-grid.component.ts +++ b/projects/igniteui-angular/grids/tree-grid/src/tree-grid.component.ts @@ -67,12 +67,12 @@ import { import { first, takeUntil } from 'rxjs/operators'; import { IgxRowLoadingIndicatorTemplateDirective } from './tree-grid.directives'; import { IgxTreeGridSelectionService } from './tree-grid-selection.service'; -import { DefaultTreeGridMergeStrategy, HierarchicalState, HierarchicalTransaction, HierarchicalTransactionService, IGridMergeStrategy, IgxHierarchicalTransactionFactory, IgxOverlayService, ITreeGridRecord, mergeObjects, PlatformUtil, StateUpdateEvent, TransactionEventOrigin, TransactionType, TreeGridFilteringStrategy } from 'igniteui-angular/core'; +import { DefaultTreeGridMergeStrategy, HierarchicalState, HierarchicalTransaction, HierarchicalTransactionService, IGridMergeStrategy, IgxHierarchicalTransactionFactory, IgxOverlayOutletDirective, IgxOverlayService, ITreeGridRecord, mergeObjects, PlatformUtil, StateUpdateEvent, TransactionEventOrigin, TransactionType, TreeGridFilteringStrategy } from 'igniteui-angular/core'; import { IgxTreeGridSummaryPipe } from './tree-grid.summary.pipe'; import { IgxTreeGridFilteringPipe } from './tree-grid.filtering.pipe'; import { IgxTreeGridHierarchizingPipe, IgxTreeGridFlatteningPipe, IgxTreeGridSortingPipe, IgxTreeGridPagingPipe, IgxTreeGridTransactionPipe, IgxTreeGridNormalizeRecordsPipe, IgxTreeGridAddRowPipe } from './tree-grid.pipes'; import { IgxTreeGridRowComponent } from './tree-grid-row.component'; -import { IgxButtonDirective, IgxForOfScrollSyncService, IgxForOfSyncService, IgxGridForOfDirective, IgxOverlayOutletDirective, IgxRippleDirective, IgxScrollInertiaDirective, IgxTemplateOutletDirective, IgxTextHighlightService, IgxToggleDirective } from 'igniteui-angular/directives'; +import { IgxButtonDirective, IgxForOfScrollSyncService, IgxForOfSyncService, IgxGridForOfDirective, IgxRippleDirective, IgxScrollInertiaDirective, IgxTemplateOutletDirective, IgxTextHighlightService, IgxToggleDirective } from 'igniteui-angular/directives'; import { IgxCircularProgressBarComponent } from 'igniteui-angular/progressbar'; import { IgxSnackbarComponent } from 'igniteui-angular/snackbar'; import { IgxIconComponent } from 'igniteui-angular/icon'; diff --git a/projects/igniteui-angular/migrations/migration-collection.json b/projects/igniteui-angular/migrations/migration-collection.json index 3042c67033e..8a6855db3bb 100644 --- a/projects/igniteui-angular/migrations/migration-collection.json +++ b/projects/igniteui-angular/migrations/migration-collection.json @@ -249,9 +249,15 @@ }, "migration-50": { "version": "21.0.0", - "description": "Updates Ignite UI for Angular from v20.1.0 to v21.0.0 - migrates to multiple entry points", - "factory": "./update-21_0_0", - "schema": "./update-21_0_0/schema.json" + "description": "Updates Ignite UI for Angular from v20.1.0 to v21.0.0", + "factory": "./update-21_0_0" + }, + "migration-51": { + "version": "21.0.0", + "description": "Migrates imports to use granular entry points for better tree-shaking", + "factory": "./update-21_0_0_import-migration", + "recommended": true, + "optional": true } } } diff --git a/projects/igniteui-angular/migrations/update-21_0_0/changes/classes.json b/projects/igniteui-angular/migrations/update-21_0_0/changes/classes.json index c999683c85f..551e1723dcc 100644 --- a/projects/igniteui-angular/migrations/update-21_0_0/changes/classes.json +++ b/projects/igniteui-angular/migrations/update-21_0_0/changes/classes.json @@ -4,6 +4,10 @@ { "name": "Direction", "replaceWith": "CarouselAnimationDirection" + }, + { + "name": "IgxColumPatternValidatorDirective", + "replaceWith": "IgxColumnPatternValidatorDirective" } ] } diff --git a/projects/igniteui-angular/migrations/update-21_0_0/index.ts b/projects/igniteui-angular/migrations/update-21_0_0/index.ts index 7ecb4cf209b..19db0ecf7d2 100644 --- a/projects/igniteui-angular/migrations/update-21_0_0/index.ts +++ b/projects/igniteui-angular/migrations/update-21_0_0/index.ts @@ -1,655 +1,23 @@ import type { - FileVisitor, Rule, SchematicContext, Tree } from '@angular-devkit/schematics'; import { UpdateChanges } from '../common/UpdateChanges'; -import * as ts from 'typescript'; const version = '21.0.0'; -// Comprehensive entry point mapping for ALL exports from all 42 entry points -const ENTRY_POINT_MAP = new Map([ - // Core - Services, Utilities, Types, Enums - ['IgxOverlayService', 'core'], - ['IgxNavigationService', 'core'], - ['IgxFocusTrapDirective', 'core'], - ['IgxToggleDirective', 'core'], - ['IgxRippleDirective', 'core'], - ['IgxDragDirective', 'core'], - ['IgxDropDirective', 'core'], - ['DisplayDensity', 'core'], - ['DisplayDensityToken', 'core'], - ['DisplayDensityBase', 'core'], - ['IDisplayDensityOptions', 'core'], - ['OverlaySettings', 'core'], - ['PositionSettings', 'core'], - ['ScrollStrategy', 'core'], - ['GlobalPositionStrategy', 'core'], - ['AutoPositionStrategy', 'core'], - ['ConnectedPositioningStrategy', 'core'], - ['ElasticPositionStrategy', 'core'], - ['AbsoluteScrollStrategy', 'core'], - ['BlockScrollStrategy', 'core'], - ['CloseScrollStrategy', 'core'], - ['NoOpScrollStrategy', 'core'], - ['HorizontalAlignment', 'core'], - ['VerticalAlignment', 'core'], - ['PositionStrategy', 'core'], - ['OverlayEventArgs', 'core'], - ['OverlayCancelableEventArgs', 'core'], - ['OverlayClosingEventArgs', 'core'], - ['OverlayAnimationEventArgs', 'core'], - ['Size', 'core'], - ['OffsetMode', 'core'], - ['ConnectedFit', 'core'], - ['IFilteringExpressionsTree', 'core'], - ['IFilteringExpression', 'core'], - ['FilteringLogic', 'core'], - ['IFilteringOperation', 'core'], - ['ISortingExpression', 'core'], - ['SortingDirection', 'core'], - ['IGroupingExpression', 'core'], - ['IGroupByExpandState', 'core'], - ['IPagingState', 'core'], - ['PagingError', 'core'], - ['DataUtil', 'core'], - ['DatePart', 'core'], - ['DatePartInfo', 'core'], - ['DatePickerUtil', 'core'], - ['IBaseCancelableBrowserEventArgs', 'core'], - ['IBaseCancelableEventArgs', 'core'], - ['IBaseEventArgs', 'core'], - ['ICancelableBrowserEventArgs', 'core'], - ['ICancelableEventArgs', 'core'], - ['PlatformUtil', 'core'], - ['Transaction', 'core'], - ['TransactionType', 'core'], - ['IgxTransactionService', 'core'], - ['State', 'core'], +export default function migrate(): Rule { + return async (host: Tree, context: SchematicContext) => { + context.logger.info(`Applying migration for Ignite UI for Angular to version ${version}`); - // Accordion - ['IgxAccordionComponent', 'accordion'], - ['IgxAccordionModule', 'accordion'], - ['IgxExpansionPanelHeaderComponent', 'accordion'], - ['IgxExpansionPanelBodyComponent', 'accordion'], - ['IgxExpansionPanelTitleDirective', 'accordion'], - ['IgxExpansionPanelDescriptionDirective', 'accordion'], - ['IgxExpansionPanelIconDirective', 'accordion'], - ['IAccordionEventArgs', 'accordion'], - ['IAccordionCancelableEventArgs', 'accordion'], + const update = new UpdateChanges(__dirname, host, context); - // Action Strip - ['IgxActionStripComponent', 'action-strip'], - ['IgxActionStripModule', 'action-strip'], + context.logger.info('The library now supports granular entry points for better tree-shaking.'); + context.logger.info('You can continue using the main entry point (igniteui-angular), or'); + context.logger.info('migrate to granular entry points by running:'); + context.logger.info(' ng update igniteui-angular --migrate-only --from=20.1.0 --to=21.0.0 --name=migration-51'); - // Avatar - ['IgxAvatarComponent', 'avatar'], - ['IgxAvatarModule', 'avatar'], - ['AvatarType', 'avatar'], - ['IgxAvatarSize', 'avatar'], - ['IgxAvatarShape', 'avatar'], - - // Badge - ['IgxBadgeComponent', 'badge'], - ['IgxBadgeModule', 'badge'], - ['BadgeType', 'badge'], - ['IgxBadgeVariant', 'badge'], - - // Banner - ['IgxBannerComponent', 'banner'], - ['IgxBannerModule', 'banner'], - ['IgxBannerActionsDirective', 'banner'], - ['IBannerEventArgs', 'banner'], - ['IBannerCancelEventArgs', 'banner'], - - // Bottom Nav - ['IgxBottomNavComponent', 'bottom-nav'], - ['IgxBottomNavModule', 'bottom-nav'], - ['IgxBottomNavItemComponent', 'bottom-nav'], - ['IgxBottomNavHeaderComponent', 'bottom-nav'], - ['IgxBottomNavContentComponent', 'bottom-nav'], - ['IgxBottomNavHeaderLabelDirective', 'bottom-nav'], - ['IgxBottomNavHeaderIconDirective', 'bottom-nav'], - ['IGX_BOTTOM_NAV_DIRECTIVES', 'bottom-nav'], - - // Button Group - ['IgxButtonGroupComponent', 'button-group'], - ['IgxButtonGroupModule', 'button-group'], - ['IgxButtonDirective', 'button-group'], - ['IgxIconButtonDirective', 'button-group'], - ['IButtonGroupEventArgs', 'button-group'], - - // Calendar - ['IgxCalendarComponent', 'calendar'], - ['IgxCalendarModule', 'calendar'], - ['IgxDaysViewComponent', 'calendar'], - ['IgxMonthsViewComponent', 'calendar'], - ['IgxYearsViewComponent', 'calendar'], - ['IgxMonthPickerComponent', 'calendar'], - ['CalendarSelection', 'calendar'], - ['ICalendarDate', 'calendar'], - ['ICalendarViewChangingEventArgs', 'calendar'], - ['WeekDays', 'calendar'], - - // Card - ['IgxCardComponent', 'card'], - ['IgxCardModule', 'card'], - ['IgxCardHeaderComponent', 'card'], - ['IgxCardMediaDirective', 'card'], - ['IgxCardContentDirective', 'card'], - ['IgxCardActionsComponent', 'card'], - ['IgxCardHeaderTitleDirective', 'card'], - ['IgxCardHeaderSubtitleDirective', 'card'], - ['IgxCardThumbnailDirective', 'card'], - ['IgxCardType', 'card'], - - // Carousel - ['IgxCarouselComponent', 'carousel'], - ['IgxCarouselModule', 'carousel'], - ['IgxSlideComponent', 'carousel'], - ['CarouselAnimationDirection', 'carousel'], // Renamed from Direction - ['ISlideEventArgs', 'carousel'], - ['ISlideCarouselBaseEventArgs', 'carousel'], - ['CarouselAnimationType', 'carousel'], - ['CarouselIndicatorsOrientation', 'carousel'], - - // Checkbox - ['IgxCheckboxComponent', 'checkbox'], - ['IgxCheckboxModule', 'checkbox'], - ['IChangeCheckboxEventArgs', 'checkbox'], - ['LabelPosition', 'checkbox'], - - // Chips - ['IgxChipsComponent', 'chips'], - ['IgxChipsModule', 'chips'], - ['IgxChipComponent', 'chips'], - ['IgxChipsAreaComponent', 'chips'], - ['IBaseChipEventArgs', 'chips'], - ['IChipClickEventArgs', 'chips'], - ['IChipKeyDownEventArgs', 'chips'], - ['IChipEnterDragAreaEventArgs', 'chips'], - ['IChipSelectEventArgs', 'chips'], - - // Combo - ['IgxComboComponent', 'combo'], - ['IgxComboModule', 'combo'], - ['IComboSelectionChangingEventArgs', 'combo'], - ['IComboItemAdditionEvent', 'combo'], - ['IComboSearchInputEventArgs', 'combo'], - ['IgxComboState', 'combo'], - - // Date Picker - ['IgxDatePickerComponent', 'date-picker'], - ['IgxDatePickerModule', 'date-picker'], - ['InteractionMode', 'date-picker'], - ['IDatePickerCancelEventArgs', 'date-picker'], - ['IDatePickerDisabledDateEventArgs', 'date-picker'], - ['IDatePickerValidationFailedEventArgs', 'date-picker'], - - // Date Range Picker - ['IgxDateRangePickerComponent', 'date-range-picker'], - ['IgxDateRangePickerModule', 'date-range-picker'], - ['DateRangeType', 'date-range-picker'], - ['DateRangeDescriptor', 'date-range-picker'], - ['IDateRangePickerCancelEventArgs', 'date-range-picker'], - - // Dialog - ['IgxDialogComponent', 'dialog'], - ['IgxDialogModule', 'dialog'], - ['IgxDialogActionsDirective', 'dialog'], - ['IgxDialogTitleDirective', 'dialog'], - ['IDialogEventArgs', 'dialog'], - ['IDialogCancelEventArgs', 'dialog'], - - // Drop Down - ['IgxDropDownComponent', 'drop-down'], - ['IgxDropDownModule', 'drop-down'], - ['IgxDropDownItemComponent', 'drop-down'], - ['IgxDropDownGroupComponent', 'drop-down'], - ['IgxDropDownItemBaseDirective', 'drop-down'], - ['IgxAutocompleteDirective', 'drop-down'], // Breaking change - moved from directives - ['ISelectionEventArgs', 'drop-down'], - ['IDropDownNavigationDirective', 'drop-down'], - - // Expansion Panel - ['IgxExpansionPanelComponent', 'expansion-panel'], - ['IgxExpansionPanelModule', 'expansion-panel'], - ['IgxExpansionPanelBase', 'expansion-panel'], - ['IExpansionPanelEventArgs', 'expansion-panel'], - ['IExpansionPanelCancelableEventArgs', 'expansion-panel'], - ['ToggleAnimationSettings', 'expansion-panel'], - - // Grids - Components, Services, Types - // Note: All grid exports are available from 'igniteui-angular/grids' - // For better tree-shaking, you can use specific grid entry points: - // - 'igniteui-angular/grids/core' - Shared grid infrastructure (columns, toolbar, etc.) - // - 'igniteui-angular/grids/grid' - Standard grid (IgxGridComponent) - // - 'igniteui-angular/grids/tree-grid' - Tree grid (IgxTreeGridComponent) - // - 'igniteui-angular/grids/hierarchical-grid' - Hierarchical grid (IgxHierarchicalGridComponent, IgxRowIslandComponent) - // - 'igniteui-angular/grids/pivot-grid' - Pivot grid (IgxPivotGridComponent, IgxPivotDataSelectorComponent) - ['IgxGridComponent', 'grids/grid'], - ['IgxTreeGridComponent', 'grids/tree-grid'], - ['IgxHierarchicalGridComponent', 'grids/hierarchical-grid'], - ['IgxPivotGridComponent', 'grids/pivot-grid'], - ['IgxPivotDataSelectorComponent', 'grids/pivot-grid'], - ['IgxRowIslandComponent', 'grids/hierarchical-grid'], - ['IgxGridModule', 'grids/grid'], - ['IgxTreeGridModule', 'grids/tree-grid'], - ['IgxHierarchicalGridModule', 'grids/hierarchical-grid'], - ['IgxPivotGridModule', 'grids/pivot-grid'], - ['IgxColumnComponent', 'grids/core'], - ['IgxColumnGroupComponent', 'grids/core'], - ['IgxRowDirective', 'grids/core'], - ['IgxCellComponent', 'grids/core'], - ['IgxGridCellComponent', 'grids/core'], - ['IgxGridHeaderComponent', 'grids/core'], - ['IgxGridToolbarComponent', 'grids/core'], - ['IgxGridToolbarActionsComponent', 'grids/core'], - ['IgxGridToolbarAdvancedFilteringComponent', 'grids/core'], - ['IgxGridToolbarExporterComponent', 'grids/core'], - ['IgxGridToolbarHidingComponent', 'grids/core'], - ['IgxGridToolbarPinningComponent', 'grids/core'], - ['IgxGridToolbarTitleComponent', 'grids/core'], - ['GridBaseAPIService', 'grids/core'], - ['IgxGridAPIService', 'grids/grid'], - ['IgxTreeGridAPIService', 'grids/tree-grid'], - ['IgxHierarchicalGridAPIService', 'grids/hierarchical-grid'], - ['IgxGridSelectionService', 'grids/core'], - ['IgxGridNavigationService', 'grids/core'], - ['IgxGridCRUDService', 'grids/core'], - ['IgxGridSummaryService', 'grids/core'], - ['IgxFilteringService', 'grids/core'], - ['IGridCellEventArgs', 'grids/core'], - ['IGridEditEventArgs', 'grids/core'], - ['IRowDataEventArgs', 'grids/core'], - ['IRowSelectionEventArgs', 'grids/core'], - ['ICellPosition', 'grids/core'], - ['IColumnResizeEventArgs', 'grids/core'], - ['IColumnMovingEventArgs', 'grids/core'], - ['IColumnMovingEndEventArgs', 'grids/core'], - ['IColumnMovingStartEventArgs', 'grids/core'], - ['IGridKeydownEventArgs', 'grids/core'], - ['IRowDragEndEventArgs', 'grids/core'], - ['IRowDragStartEventArgs', 'grids/core'], - ['GridSelectionMode', 'grids/core'], - ['FilterMode', 'grids/core'], - ['GridSummaryCalculationMode', 'grids/core'], - ['GridSummaryPosition', 'grids/core'], - ['RowPinningPosition', 'grids/core'], - ['ColumnPinningPosition', 'grids/core'], - ['GridInstanceType', 'grids/core'], - ['Size', 'core'], // Moved to core - ['SortingIndexFilteringStrategy', 'grids/core'], - ['IgxGridEditingActions', 'grids/core'], // Grid actions moved to grids - ['IgxGridPinningActions', 'grids/core'], // Grid actions moved to grids - ['IgxGridActionButtonComponent', 'grids/core'], // Grid actions moved to grids - ['IgxGridActionsBaseDirective', 'grids/core'], // Grid actions moved to grids - ['IgxGridEditingActionsComponent', 'grids/core'], // Grid actions moved to grids - ['IgxGridPinningActionsComponent', 'grids/core'], // Grid actions moved to grids - - // Icon - ['IgxIconComponent', 'icon'], - ['IgxIconModule', 'icon'], - ['IgxIconService', 'icon'], - ['IconMeta', 'icon'], - - // Input Group - ['IgxInputGroupComponent', 'input-group'], - ['IgxInputGroupModule', 'input-group'], - ['IgxInputDirective', 'input-group'], // Breaking change - moved from directives - ['IgxLabelDirective', 'input-group'], // Breaking change - moved from directives - ['IgxHintDirective', 'input-group'], // Breaking change - moved from directives - ['IgxPrefixDirective', 'input-group'], // Breaking change - moved from directives - ['IgxSuffixDirective', 'input-group'], // Breaking change - moved from directives - ['IgxInputState', 'input-group'], - ['IgxInputGroupType', 'input-group'], - - // List - ['IgxListComponent', 'list'], - ['IgxListModule', 'list'], - ['IgxListItemComponent', 'list'], - ['IgxListHeaderComponent', 'list'], - ['IListItemClickEventArgs', 'list'], - ['IgxListPanState', 'list'], - - // Navbar - ['IgxNavbarComponent', 'navbar'], - ['IgxNavbarModule', 'navbar'], - ['IgxNavbarActionDirective', 'navbar'], - ['IgxNavbarTitleDirective', 'navbar'], - - // Navigation Drawer - ['IgxNavigationDrawerComponent', 'navigation-drawer'], - ['IgxNavigationDrawerModule', 'navigation-drawer'], - ['IgxNavigationDrawerItemComponent', 'navigation-drawer'], - ['INavigationDrawerEventArgs', 'navigation-drawer'], - ['IgxNavDrawerMode', 'navigation-drawer'], - - // Paginator - ['IgxPaginatorComponent', 'paginator'], - ['IgxPaginatorModule', 'paginator'], - ['IPageEventArgs', 'paginator'], - ['IPageCancelableEventArgs', 'paginator'], - - // Progressbar - ['IgxCircularProgressBarComponent', 'progressbar'], - ['IgxLinearProgressBarComponent', 'progressbar'], - ['IgxProgressBarModule', 'progressbar'], - ['IgxProgressType', 'progressbar'], - ['IgxTextAlign', 'progressbar'], - ['IgxProgressBarGradientMode', 'progressbar'], - - // Query Builder - ['IgxQueryBuilderComponent', 'query-builder'], - ['IgxQueryBuilderModule', 'query-builder'], - ['IExpressionGroup', 'query-builder'], - - // Radio - ['IgxRadioComponent', 'radio'], - ['IgxRadioModule', 'radio'], - ['IgxRadioGroupDirective', 'radio'], // Breaking change - moved from directives - - // Select - ['IgxSelectComponent', 'select'], - ['IgxSelectModule', 'select'], - ['IgxSelectItemComponent', 'select'], - ['IgxSelectHeaderDirective', 'select'], - ['IgxSelectFooterDirective', 'select'], - ['IgxSelectToggleIconDirective', 'select'], - ['ISelectionChangedEventArgs', 'select'], - - // Simple Combo - ['IgxSimpleComboComponent', 'simple-combo'], - ['IgxSimpleComboModule', 'simple-combo'], - - // Slider - ['IgxSliderComponent', 'slider'], - ['IgxSliderModule', 'slider'], - ['ISliderValueChangeEventArgs', 'slider'], - ['IRangeSliderValue', 'slider'], - ['SliderType', 'slider'], - ['IgxSliderType', 'slider'], - - // Snackbar - ['IgxSnackbarComponent', 'snackbar'], - ['IgxSnackbarModule', 'snackbar'], - - // Splitter - ['IgxSplitterComponent', 'splitter'], - ['IgxSplitterModule', 'splitter'], - ['IgxSplitterPaneComponent', 'splitter'], - ['ISplitterEventArgs', 'splitter'], - ['SplitterType', 'splitter'], - - // Stepper - ['IgxStepperComponent', 'stepper'], - ['IgxStepperModule', 'stepper'], - ['IgxStepComponent', 'stepper'], - ['IStepChangingEventArgs', 'stepper'], - ['IStepChangedEventArgs', 'stepper'], - ['IgxStepperOrientation', 'stepper'], - ['IgxStepType', 'stepper'], - - // Switch - ['IgxSwitchComponent', 'switch'], - ['IgxSwitchModule', 'switch'], - - // Tabs - ['IgxTabsComponent', 'tabs'], - ['IgxTabsModule', 'tabs'], - ['IgxTabItemComponent', 'tabs'], - ['IgxTabHeaderComponent', 'tabs'], - ['IgxTabContentComponent', 'tabs'], - ['IgxTabsGroupComponent', 'tabs'], - ['ITabsSelectedItemChangeEventArgs', 'tabs'], - ['IgxTabsType', 'tabs'], - - // Time Picker - ['IgxTimePickerComponent', 'time-picker'], - ['IgxTimePickerModule', 'time-picker'], - ['IgxTimePickerActionsDirective', 'time-picker'], - ['IgxHourItemDirective', 'time-picker'], - ['IgxMinuteItemDirective', 'time-picker'], - ['IgxAmPmItemDirective', 'time-picker'], - ['IgxItemListDirective', 'time-picker'], - - // Toast - ['IgxToastComponent', 'toast'], - ['IgxToastModule', 'toast'], - ['IgxToastPosition', 'toast'], - - // Tree - ['IgxTreeComponent', 'tree'], - ['IgxTreeModule', 'tree'], - ['IgxTreeNodeComponent', 'tree'], - ['ITreeNodeSelectionEvent', 'tree'], - ['ITreeNodeTogglingEventArgs', 'tree'], - ['IgxTreeSelectionType', 'tree'], - - // Directives (re-exports from other entry points) - ['IgxForOfDirective', 'directives'], - ['IgxTemplateOutletDirective', 'directives'], - ['IgxTextSelectionDirective', 'directives'], - ['IgxTextHighlightDirective', 'directives'], - ['IgxDateTimeEditorDirective', 'directives'], - ['IgxMaskDirective', 'directives'], - ['IgxDividerDirective', 'directives'], - ['IgxFilterDirective', 'directives'], - ['IgxButtonDirective', 'directives'], - ['IgxToggleActionDirective', 'directives'], - ['IgxLayoutDirective', 'directives'], - ['IgxFlexDirective', 'directives'], -]); - -// Type renames (old name -> new name and entry point) -const TYPE_RENAMES = new Map([ - ['Direction', { newName: 'CarouselAnimationDirection', entryPoint: 'carousel' }], -]); - -function migrateImportDeclaration(node: ts.ImportDeclaration, sourceFile: ts.SourceFile): { start: number, end: number, replacement: string } | null { - const moduleSpecifier = node.moduleSpecifier; - if (!ts.isStringLiteral(moduleSpecifier)) { - return null; - } - - const importPath = moduleSpecifier.text; - - // Only process igniteui-angular imports (not already using entry points) - if (importPath !== 'igniteui-angular') { - return null; - } - - const importClause = node.importClause; - if (!importClause || !importClause.namedBindings) { - return null; - } - - if (!ts.isNamedImports(importClause.namedBindings)) { - return null; - } - - // Group imports by entry point - const entryPointGroups = new Map(); - - for (const element of importClause.namedBindings.elements) { - const name = element.name.text; - const alias = element.propertyName?.text; - const importName = alias || name; - let actualImportName = importName; - - // Check if this is a renamed type - if (TYPE_RENAMES.has(importName)) { - const rename = TYPE_RENAMES.get(importName)!; - actualImportName = rename.newName; - } - - const fullImport = alias ? `${actualImportName} as ${name}` : actualImportName; - - // Determine target entry point - let targetEntryPoint = 'core'; // Default to core - - // Check if it's a renamed type first - if (TYPE_RENAMES.has(importName)) { - targetEntryPoint = TYPE_RENAMES.get(importName)!.entryPoint; - } else if (ENTRY_POINT_MAP.has(importName)) { - targetEntryPoint = ENTRY_POINT_MAP.get(importName)!; - } - - if (!entryPointGroups.has(targetEntryPoint)) { - entryPointGroups.set(targetEntryPoint, []); - } - entryPointGroups.get(targetEntryPoint)!.push(fullImport); - } - - // Generate new import statements - const newImports: string[] = []; - for (const [entryPoint, imports] of entryPointGroups) { - const sortedImports = imports.sort(); - newImports.push(`import { ${sortedImports.join(', ')} } from 'igniteui-angular/${entryPoint}';`); - } - - return { - start: node.getStart(sourceFile), - end: node.getEnd(), - replacement: newImports.join('\n') + update.applyChanges(); }; } - -function migrateFile(filePath: string, content: string): string { - const sourceFile = ts.createSourceFile( - filePath, - content, - ts.ScriptTarget.Latest, - true - ); - - const changes: { start: number, end: number, replacement: string }[] = []; - - // Track which old type names are imported in this file - const importedOldTypes = new Set(); - - function visit(node: ts.Node) { - if (ts.isImportDeclaration(node)) { - const change = migrateImportDeclaration(node, sourceFile); - if (change) { - changes.push(change); - - // Track old type names that were imported - const moduleSpecifier = node.moduleSpecifier; - if (ts.isStringLiteral(moduleSpecifier) && moduleSpecifier.text === 'igniteui-angular') { - const importClause = node.importClause; - if (importClause?.namedBindings && ts.isNamedImports(importClause.namedBindings)) { - for (const element of importClause.namedBindings.elements) { - const importName = element.propertyName?.text || element.name.text; - if (TYPE_RENAMES.has(importName)) { - importedOldTypes.add(importName); - } - } - } - } - } - } else if (ts.isIdentifier(node) && importedOldTypes.has(node.text)) { - // Rename type references in the code (but only if not aliased in import) - const oldName = node.text; - const rename = TYPE_RENAMES.get(oldName)!; - - // Check if this identifier is part of an import statement - // We don't want to rename it there as we already handled it - let isInImport = false; - let parent = node.parent; - while (parent) { - if (ts.isImportDeclaration(parent)) { - isInImport = true; - break; - } - parent = parent.parent; - } - - if (!isInImport) { - changes.push({ - start: node.getStart(sourceFile), - end: node.getEnd(), - replacement: rename.newName - }); - } - } - - ts.forEachChild(node, visit); - } - - visit(sourceFile); - - // Apply changes in reverse order to maintain positions - changes.sort((a, b) => b.start - a.start); - - let result = content; - for (const change of changes) { - result = result.substring(0, change.start) + change.replacement + result.substring(change.end); - } - - return result; -} - -interface MigrationOptions { - migrateImports?: boolean; -} - -export default (options: MigrationOptions = {}): Rule => async (host: Tree, context: SchematicContext) => { - context.logger.info(`Applying migration for Ignite UI for Angular to version ${version}`); - - const update = new UpdateChanges(__dirname, host, context); - const shouldMigrateImports = options.migrateImports !== false; // Default to true if not specified - - if (shouldMigrateImports) { - context.logger.info('Migrating imports to new entry points...'); - - const visit: FileVisitor = (filePath) => { - // Only process TypeScript files - if (!filePath.endsWith('.ts')) { - return; - } - - // Skip node_modules and dist - if (filePath.includes('node_modules') || filePath.includes('dist')) { - return; - } - - const content = host.read(filePath); - if (!content) { - return; - } - - const originalContent = content.toString(); - - // Check if file has igniteui-angular imports - if (!originalContent.includes("from 'igniteui-angular'") && !originalContent.includes('from "igniteui-angular"')) { - return; - } - - const migratedContent = migrateFile(filePath, originalContent); - - if (migratedContent !== originalContent) { - host.overwrite(filePath, migratedContent); - context.logger.info(` ✓ Migrated ${filePath}`); - } - }; - - host.visit(visit); - - context.logger.info('Migration complete!'); - context.logger.info('Breaking changes:'); - context.logger.info(' - Input directives moved to igniteui-angular/input-group'); - context.logger.info(' - IgxAutocompleteDirective moved to igniteui-angular/drop-down'); - context.logger.info(' - IgxRadioGroupDirective moved to igniteui-angular/radio'); - context.logger.info('Type renames:'); - context.logger.info(' - Direction → CarouselAnimationDirection'); - } else { - context.logger.info('Skipping import migration. You can continue using the main entry point.'); - context.logger.info('Note: The library now supports granular entry points for better tree-shaking.'); - context.logger.info('To migrate later, run: ng update igniteui-angular --migrate-only --from=20.1.0 --to=21.0.0'); - } - - update.applyChanges(); -}; diff --git a/projects/igniteui-angular/migrations/update-21_0_0/schema.json b/projects/igniteui-angular/migrations/update-21_0_0/schema.json deleted file mode 100644 index 5bc139f345b..00000000000 --- a/projects/igniteui-angular/migrations/update-21_0_0/schema.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "$schema": "http://json-schema.org/schema", - "$id": "igniteui-angular-migration-21", - "title": "Update to version 21.0.0", - "type": "object", - "properties": { - "migrateImports": { - "type": "boolean", - "description": "Migrate imports to use granular entry points (e.g., 'igniteui-angular/grids' instead of 'igniteui-angular'). The library remains backwards compatible - you can continue using the main entry point.", - "default": true, - "x-prompt": "Would you like to migrate your imports to use the new granular entry points for better tree-shaking? (The library remains backwards compatible if you choose 'No')" - } - } -} diff --git a/projects/igniteui-angular/migrations/update-21_0_0_import-migration/index.ts b/projects/igniteui-angular/migrations/update-21_0_0_import-migration/index.ts new file mode 100644 index 00000000000..fc7f6e604bc --- /dev/null +++ b/projects/igniteui-angular/migrations/update-21_0_0_import-migration/index.ts @@ -0,0 +1,843 @@ +import type { + FileVisitor, + Rule, + SchematicContext, + Tree +} from '@angular-devkit/schematics'; +import * as ts from 'typescript'; + +const version = '21.0.0'; + +// Comprehensive entry point mapping for ALL exports from all 42 entry points +const ENTRY_POINT_MAP = new Map([ + // Core - Services, Utilities, Types, Enums + // ['IgxOverlayService', 'core'], + // ['IgxNavigationService', 'core'], + // ['DisplayDensity', 'core'], + // ['DisplayDensityToken', 'core'], + // ['DisplayDensityBase', 'core'], + // ['IDisplayDensityOptions', 'core'], + // ['OverlaySettings', 'core'], + // ['PositionSettings', 'core'], + // ['ScrollStrategy', 'core'], + // ['GlobalPositionStrategy', 'core'], + // ['AutoPositionStrategy', 'core'], + // ['ConnectedPositioningStrategy', 'core'], + // ['ElasticPositionStrategy', 'core'], + // ['AbsoluteScrollStrategy', 'core'], + // ['BlockScrollStrategy', 'core'], + // ['CloseScrollStrategy', 'core'], + // ['NoOpScrollStrategy', 'core'], + // ['HorizontalAlignment', 'core'], + // ['VerticalAlignment', 'core'], + // ['PositionStrategy', 'core'], + // ['OverlayEventArgs', 'core'], + // ['OverlayCancelableEventArgs', 'core'], + // ['OverlayClosingEventArgs', 'core'], + // ['OverlayAnimationEventArgs', 'core'], + // ['Size', 'core'], + // ['OffsetMode', 'core'], + // ['ConnectedFit', 'core'], + // ['IFilteringExpressionsTree', 'core'], + // ['IFilteringExpression', 'core'], + // ['FilteringLogic', 'core'], + // ['IFilteringOperation', 'core'], + // ['ISortingExpression', 'core'], + // ['SortingDirection', 'core'], + // ['IGroupingExpression', 'core'], + // ['IGroupByExpandState', 'core'], + // ['IPagingState', 'core'], + // ['PagingError', 'core'], + // ['DataUtil', 'core'], + // ['DatePart', 'core'], + // ['DatePartInfo', 'core'], + // ['DatePickerUtil', 'core'], + // ['IBaseCancelableBrowserEventArgs', 'core'], + // ['IBaseCancelableEventArgs', 'core'], + // ['IBaseEventArgs', 'core'], + // ['ICancelableBrowserEventArgs', 'core'], + // ['ICancelableEventArgs', 'core'], + // ['PlatformUtil', 'core'], + // ['Transaction', 'core'], + // ['TransactionType', 'core'], + // ['IgxTransactionService', 'core'], + // ['State', 'core'], + + // Accordion + ['IgxAccordionComponent', 'accordion'], + ['IgxAccordionModule', 'accordion'], + ['IGX_ACCORDION_DIRECTIVES', 'accordion'], + ['IAccordionEventArgs', 'accordion'], + ['IAccordionCancelableEventArgs', 'accordion'], + + // Action Strip + ['IgxActionStripComponent', 'action-strip'], + ['IgxActionStripModule', 'action-strip'], + ['IGX_ACTION_STRIP_DIRECTIVES', 'action-strip'], + ['IgxActionStripMenuItemDirective', 'action-strip'], + + // Avatar + ['IgxAvatarComponent', 'avatar'], + ['IgxAvatarModule', 'avatar'], + ['AvatarType', 'avatar'], + ['IgxAvatarSize', 'avatar'], + ['IgxAvatarShape', 'avatar'], + + // Badge + ['IgxBadgeComponent', 'badge'], + ['IgxBadgeModule', 'badge'], + ['BadgeType', 'badge'], + ['IgxBadgeVariant', 'badge'], + + // Banner + ['IgxBannerComponent', 'banner'], + ['IgxBannerModule', 'banner'], + ['IGX_BANNER_DIRECTIVES', 'banner'], + ['IgxBannerActionsDirective', 'banner'], + ['IBannerEventArgs', 'banner'], + ['IBannerCancelEventArgs', 'banner'], + + // Bottom Nav + ['IgxBottomNavComponent', 'bottom-nav'], + ['IgxBottomNavModule', 'bottom-nav'], + ['IgxBottomNavItemComponent', 'bottom-nav'], + ['IgxBottomNavHeaderComponent', 'bottom-nav'], + ['IgxBottomNavContentComponent', 'bottom-nav'], + ['IgxBottomNavHeaderLabelDirective', 'bottom-nav'], + ['IgxBottomNavHeaderIconDirective', 'bottom-nav'], + ['IGX_BOTTOM_NAV_DIRECTIVES', 'bottom-nav'], + + // Button Group + ['IgxButtonGroupComponent', 'button-group'], + ['IgxButtonGroupModule', 'button-group'], + ['IGX_BUTTON_GROUP_DIRECTIVES', 'button-group'], + ['IgxButtonDirective', 'button-group'], + ['IgxIconButtonDirective', 'button-group'], + ['IButtonGroupEventArgs', 'button-group'], + ['ButtonGroupAlignment', 'button-group'], + + // Calendar + ['IgxCalendarComponent', 'calendar'], + ['IgxCalendarModule', 'calendar'], + ['IGX_CALENDAR_DIRECTIVES', 'calendar'], + ['IgxDaysViewComponent', 'calendar'], + ['IgxMonthsViewComponent', 'calendar'], + ['IgxYearsViewComponent', 'calendar'], + ['IgxMonthPickerComponent', 'calendar'], + ['CalendarSelection', 'calendar'], + ['ICalendarDate', 'calendar'], + ['ICalendarViewChangingEventArgs', 'calendar'], + ['WeekDays', 'calendar'], + ['IFormattingOptions', 'calendar'], + ['IgxCalendarView', 'calendar'], + ['IgxCalendarHeaderTemplateDirective', 'calendar'], + ['IgxCalendarSubheaderTemplateDirective', 'calendar'], + ['IViewDateChangeEventArgs', 'calendar'], + + // Card + ['IgxCardComponent', 'card'], + ['IgxCardModule', 'card'], + ['IGX_CARD_DIRECTIVES', 'card'], + ['IgxCardHeaderComponent', 'card'], + ['IgxCardMediaDirective', 'card'], + ['IgxCardContentDirective', 'card'], + ['IgxCardActionsComponent', 'card'], + ['IgxCardHeaderTitleDirective', 'card'], + ['IgxCardHeaderSubtitleDirective', 'card'], + ['IgxCardThumbnailDirective', 'card'], + ['IgxCardType', 'card'], + + // Carousel + ['IgxCarouselComponent', 'carousel'], + ['IgxCarouselModule', 'carousel'], + ['IGX_CAROUSEL_DIRECTIVES', 'carousel'], + ['IgxSlideComponent', 'carousel'], + ['CarouselAnimationDirection', 'carousel'], // Renamed from Direction + ['ISlideEventArgs', 'carousel'], + ['ISlideCarouselBaseEventArgs', 'carousel'], + ['CarouselAnimationType', 'carousel'], + ['CarouselIndicatorsOrientation', 'carousel'], + + // Checkbox + ['IgxCheckboxComponent', 'checkbox'], + ['IgxCheckboxModule', 'checkbox'], + ['IChangeCheckboxEventArgs', 'checkbox'], + ['LabelPosition', 'checkbox'], + + // Chips + ['IgxChipsComponent', 'chips'], + ['IgxChipsModule', 'chips'], + ['IGX_CHIPS_DIRECTIVES', 'chips'], + ['IgxChipComponent', 'chips'], + ['IgxChipsAreaComponent', 'chips'], + ['IBaseChipEventArgs', 'chips'], + ['IChipClickEventArgs', 'chips'], + ['IChipKeyDownEventArgs', 'chips'], + ['IChipEnterDragAreaEventArgs', 'chips'], + ['IChipSelectEventArgs', 'chips'], + ['IChipsAreaReorderEventArgs', 'chips'], + + // Combo + ['IgxComboComponent', 'combo'], + ['IgxComboModule', 'combo'], + ['IGX_COMBO_DIRECTIVES', 'combo'], + ['IComboSelectionChangingEventArgs', 'combo'], + ['IComboItemAdditionEvent', 'combo'], + ['IComboSearchInputEventArgs', 'combo'], + ['IgxComboState', 'combo'], + ['IgxComboClearIconDirective', 'combo'], + ['IgxComboItemDirective', 'combo'], + ['IgxComboAddItemDirective', 'combo'], + ['IgxComboEmptyDirective', 'combo'], + ['IgxComboFooterDirective', 'combo'], + ['IgxComboHeaderDirective', 'combo'], + ['IgxComboHeaderItemDirective', 'combo'], + ['IgxComboToggleIconDirective', 'combo'], + + // Date and Date Range Picker + ['IgxDatePickerComponent', 'date-picker'], + ['IgxDatePickerModule', 'date-picker'], + ['IGX_DATE_PICKER_DIRECTIVES', 'date-picker'], + ['IGX_DATE_RANGE_PICKER_DIRECTIVES', 'date-picker'], + ['InteractionMode', 'date-picker'], + ['IDatePickerCancelEventArgs', 'date-picker'], + ['IDatePickerDisabledDateEventArgs', 'date-picker'], + ['IDatePickerValidationFailedEventArgs', 'date-picker'], + ['IgxDateRangePickerComponent', 'date-picker'], + ['IgxDateRangePickerModule', 'date-picker'], + ['DateRangeDescriptor', 'date-picker'], + ['IDateRangePickerCancelEventArgs', 'date-picker'], + ['IgxDateRangeEndComponent', 'date-picker'], + ['IgxDateRangeStartComponent', 'date-picker'], + + // Dialog + ['IgxDialogComponent', 'dialog'], + ['IgxDialogModule', 'dialog'], + ['IGX_DIALOG_DIRECTIVES', 'dialog'], + ['IgxDialogActionsDirective', 'dialog'], + ['IgxDialogTitleDirective', 'dialog'], + ['IDialogEventArgs', 'dialog'], + ['IDialogCancelEventArgs', 'dialog'], + + // Drop Down + ['IgxDropDownComponent', 'drop-down'], + ['IgxDropDownModule', 'drop-down'], + ['IGX_DROP_DOWN_DIRECTIVES', 'drop-down'], + ['IgxDropDownItemComponent', 'drop-down'], + ['IgxDropDownGroupComponent', 'drop-down'], + ['IgxDropDownItemBaseDirective', 'drop-down'], + ['IgxAutocompleteDirective', 'drop-down'], // Breaking change - moved from directives + ['ISelectionEventArgs', 'drop-down'], + ['IDropDownNavigationDirective', 'drop-down'], + ['IgxDropDownItemNavigationDirective', 'drop-down'], + ['IgxAutocompleteModule', 'drop-down'], + + // Expansion Panel + ['IgxExpansionPanelComponent', 'expansion-panel'], + ['IgxExpansionPanelModule', 'expansion-panel'], + ['IGX_EXPANSION_PANEL_DIRECTIVES', 'expansion-panel'], + ['IgxExpansionPanelBase', 'expansion-panel'], + ['IExpansionPanelEventArgs', 'expansion-panel'], + ['IExpansionPanelCancelableEventArgs', 'expansion-panel'], + ['IgxExpansionPanelHeaderComponent', 'expansion-panel'], + ['IgxExpansionPanelBodyComponent', 'expansion-panel'], + ['IgxExpansionPanelTitleDirective', 'expansion-panel'], + ['IgxExpansionPanelDescriptionDirective', 'expansion-panel'], + ['IgxExpansionPanelIconDirective', 'expansion-panel'], + ['ToggleAnimationSettings', 'expansion-panel'], + + // Grids - Components, Services, Types + // Note: All grid exports are available from 'igniteui-angular/grids' + // For better tree-shaking, you can use specific grid entry points: + // - 'igniteui-angular/grids/core' - Shared grid infrastructure (columns, toolbar, etc.) + // - 'igniteui-angular/grids/grid' - Standard grid (IgxGridComponent) + // - 'igniteui-angular/grids/tree-grid' - Tree grid (IgxTreeGridComponent) + // - 'igniteui-angular/grids/hierarchical-grid' - Hierarchical grid (IgxHierarchicalGridComponent, IgxRowIslandComponent) + // - 'igniteui-angular/grids/pivot-grid' - Pivot grid (IgxPivotGridComponent, IgxPivotDataSelectorComponent) + ['IgxGridComponent', 'grids/grid'], + ['IGX_GRID_DIRECTIVES', 'grids/grid'], + ['IgxTreeGridComponent', 'grids/tree-grid'], + ['IGX_TREE_GRID_DIRECTIVES', 'grids/tree-grid'], + ['IgxHierarchicalGridComponent', 'grids/hierarchical-grid'], + ['IGX_HIERARCHICAL_GRID_DIRECTIVES', 'grids/hierarchical-grid'], + ['IgxPivotGridComponent', 'grids/pivot-grid'], + ['IGX_PIVOT_GRID_DIRECTIVES', 'grids/pivot-grid'], + ['IgxPivotDataSelectorComponent', 'grids/pivot-grid'], + ['IgxRowIslandComponent', 'grids/hierarchical-grid'], + ['IgxGridModule', 'grids/grid'], + ['IgxTreeGridModule', 'grids/tree-grid'], + ['IgxHierarchicalGridModule', 'grids/hierarchical-grid'], + ['IgxPivotGridModule', 'grids/pivot-grid'], + ['IgxColumnComponent', 'grids/core'], + ['IgxColumnGroupComponent', 'grids/core'], + ['IgxCollapsibleIndicatorTemplateDirective', 'grids/core'], + ['IgxRowDirective', 'grids/core'], + ['IgxCellComponent', 'grids/core'], + ['IgxGridCellComponent', 'grids/core'], + ['IgxGridHeaderComponent', 'grids/core'], + ['IgxGridToolbarComponent', 'grids/core'], + ['IgxGridToolbarActionsComponent', 'grids/core'], + ['IgxGridToolbarAdvancedFilteringComponent', 'grids/core'], + ['IgxGridToolbarExporterComponent', 'grids/core'], + ['IgxGridToolbarHidingComponent', 'grids/core'], + ['IgxGridToolbarPinningComponent', 'grids/core'], + ['IgxGridToolbarTitleComponent', 'grids/core'], + ['GridBaseAPIService', 'grids/core'], + ['IgxGridAPIService', 'grids/grid'], + ['IgxTreeGridAPIService', 'grids/tree-grid'], + ['IgxHierarchicalGridAPIService', 'grids/hierarchical-grid'], + ['IgxGridSelectionService', 'grids/core'], + ['IgxGridNavigationService', 'grids/core'], + ['IgxGridCRUDService', 'grids/core'], + ['IgxGridSummaryService', 'grids/core'], + ['IgxFilteringService', 'grids/core'], + ['IGridCellEventArgs', 'grids/core'], + ['IGridEditEventArgs', 'grids/core'], + ['IRowDataEventArgs', 'grids/core'], + ['IRowSelectionEventArgs', 'grids/core'], + ['ICellPosition', 'grids/core'], + ['IColumnResizeEventArgs', 'grids/core'], + ['IColumnMovingEventArgs', 'grids/core'], + ['IColumnMovingEndEventArgs', 'grids/core'], + ['IColumnMovingStartEventArgs', 'grids/core'], + ['IGridKeydownEventArgs', 'grids/core'], + ['IRowDragEndEventArgs', 'grids/core'], + ['IRowDragStartEventArgs', 'grids/core'], + ['GridSelectionMode', 'grids/core'], + ['FilterMode', 'grids/core'], + ['GridSummaryPosition', 'grids/core'], + ['RowPinningPosition', 'grids/core'], + ['GridInstanceType', 'grids/core'], + ['IgxSummaryOperand', 'grids/core'], + ['IgxNumberSummaryOperand', 'grids/core'], + ['IgxDateSummaryOperand', 'grids/core'], + ['IgxSummaryTemplateDirective', 'grids/core'], + ['IgxCellTemplateDirective', 'grids/core'], + ['IgxCellHeaderTemplateDirective', 'grids/core'], + ['IgxFilterCellTemplateDirective', 'grids/core'], + ['IGridFormGroupCreatedEventArgs', 'grids/core'], + ['IgxCellValidationErrorDirective', 'grids/core'], + ['IgxColumnMaxValidatorDirective', 'grids/core'], + ['IgxColumnMinValidatorDirective', 'grids/core'], + ['IgxColumnEmailValidatorDirective', 'grids/core'], + ['IgxColumnMinLengthValidatorDirective', 'grids/core'], + ['IgxColumnMaxLengthValidatorDirective', 'grids/core'], + ['IgxColumnPatternValidatorDirective', 'grids/core'], + ['IgxColumnRequiredValidatorDirective', 'grids/core'], + ['CellType', 'grids/core'], + ['IPinningConfig', 'grids/core'], + ['RowType', 'grids/core'], + ['IgxCellEditorTemplateDirective', 'grids/core'], + ['IGridToolbarExportEventArgs', 'grids/core'], + ['SortingIndexFilteringStrategy', 'grids/core'], + ['IgxHeadSelectorDirective', 'grids/core'], + ['IgxRowSelectorDirective', 'grids/core'], + ['GridFeatures', 'grids/core'], + ['IGridState', 'grids/core'], + ['IGridStateOptions', 'grids/core'], + ['IgxGridStateDirective', 'grids/core'], + ['IgxRowEditActionsDirective', 'grids/core'], + ['IgxRowEditTabStopDirective', 'grids/core'], + ['IgxRowEditTextDirective', 'grids/core'], + ['IgxRowAddTextDirective', 'grids/core'], + ['GridPagingMode', 'grids/core'], + ['IgxAdvancedFilteringDialogComponent', 'grids/core'], + ['IgxExcelStyleColumnOperationsTemplateDirective', 'grids/core'], + ['IgxExcelStyleFilterOperationsTemplateDirective', 'grids/core'], + ['IgxExcelStyleLoadingValuesTemplateDirective', 'grids/core'], + ['IgxExcelStyleHeaderComponent', 'grids/core'], + ['IgxExcelStyleHeaderIconDirective', 'grids/core'], + ['IgxExcelStyleSearchComponent', 'grids/core'], + ['IgxExcelStyleSortingComponent', 'grids/core'], + ['IgxExcelStylePinningComponent', 'grids/core'], + ['IgxGridExcelStyleFilteringComponent', 'grids/core'], + ['IgxExcelTextDirective', 'grids/core'], + ['IgxCSVTextDirective', 'grids/core'], + ['GridCellMergeMode', 'grids/core'], + ['IActiveNodeChangeEventArgs', 'grids/core'], + ['IPivotAggregator', 'grids/core'], + ['PivotAggregation', 'grids/core'], + ['PivotAggregationType', 'grids/core'], + ['PivotRowLayoutType', 'grids/core'], + ['IPivotConfiguration', 'grids/core'], + ['IPivotDimension', 'grids/core'], + ['IPivotDimensionData', 'grids/core'], + ['IPivotValue', 'grids/core'], + ['IgxPivotDateDimension', 'grids/core'], + ['IgxPivotAggregate', 'grids/core'], + ['IgxPivotNumericAggregate', 'grids/core'], + ['IgxPivotDateAggregate', 'grids/core'], + ['IgxPivotTimeAggregate', 'grids/core'], + ['IPivotUISettings', 'grids/core'], + ['PivotSummaryPosition', 'grids/core'], + ['NoopPivotDimensionsStrategy', 'grids/core'], + ['IgxGridToolbarDirective', 'grids/core'], + ['IgxGroupByRowTemplateDirective', 'grids/core'], + ['IgxGridDetailTemplateDirective', 'grids/core'], + ['GridType', 'grids/core'], + ['IGX_GRID_BASE', 'grids/core'], + ['IColumnSelectionEventArgs', 'grids/core'], + ['IgxDragIndicatorIconDirective', 'grids/core'], + ['IgxRowDragGhostDirective', 'grids/core'], + ['IgxGridFooterComponent', 'grids/core'], + ['IgxColumnLayoutComponent', 'grids/core'], + ['IgxExporterEvent', 'grids/core'], + ['IGridEditDoneEventArgs', 'grids/core'], + ['IgxGridRow', 'grids/core'], + ['IgxGridEditingActions', 'grids/core'], // Grid actions moved to grids + ['IgxGridPinningActions', 'grids/core'], // Grid actions moved to grids + ['IgxGridActionButtonComponent', 'grids/core'], // Grid actions moved to grids + ['IgxGridActionsBaseDirective', 'grids/core'], // Grid actions moved to grids + ['IgxGridEditingActionsComponent', 'grids/core'], // Grid actions moved to grids + ['IgxGridPinningActionsComponent', 'grids/core'], // Grid actions moved to grids + ['IgxColumnActionsComponent', 'grids/core'], + ['IgxColumnHidingDirective', 'grids/core'], + ['IgxColumnPinningDirective', 'grids/core'], + ['IgxTreeGridGroupByAreaComponent', 'grids/tree-grid'], + ['ITreeGridAggregation', 'grids/tree-grid'], + ['IgxGroupedTreeGridSorting', 'grids/tree-grid'], + ['IgxTreeGridGroupingPipe', 'grids/tree-grid'], + ['IGridCreatedEventArgs', 'grids/hierarchical-grid'], + + // Icon + ['IgxIconComponent', 'icon'], + ['IgxIconModule', 'icon'], + ['IgxIconService', 'icon'], + ['IconMeta', 'icon'], + + // Input Group + ['IgxInputGroupComponent', 'input-group'], + ['IgxInputGroupModule', 'input-group'], + ['IGX_INPUT_GROUP_DIRECTIVES', 'input-group'], + ['IgxInputDirective', 'input-group'], // Breaking change - moved from directives + ['IgxLabelDirective', 'input-group'], // Breaking change - moved from directives + ['IgxHintDirective', 'input-group'], // Breaking change - moved from directives + ['IgxPrefixDirective', 'input-group'], // Breaking change - moved from directives + ['IgxSuffixDirective', 'input-group'], // Breaking change - moved from directives + ['IgxInputState', 'input-group'], + ['IgxInputGroupType', 'input-group'], + ['IGX_INPUT_GROUP_TYPE', 'input-group'], + + // List + ['IgxListComponent', 'list'], + ['IgxListModule', 'list'], + ['IGX_LIST_DIRECTIVES', 'list'], + ['IgxListItemComponent', 'list'], + ['IgxListHeaderComponent', 'list'], + ['IListItemClickEventArgs', 'list'], + ['IgxListPanState', 'list'], + ['IgxEmptyListTemplateDirective', 'list'], + ['IgxListLineDirective', 'list'], + ['IgxListLineSubTitleDirective', 'list'], + ['IgxListLineTitleDirective', 'list'], + ['IgxDataLoadingTemplateDirective', 'list'], + ['IgxListActionDirective', 'list'], + ['IgxListThumbnailDirective', 'list'], + ['IgxListItemLeftPanningTemplateDirective', 'list'], + ['IgxListItemRightPanningTemplateDirective', 'list'], + + // Navbar + ['IgxNavbarComponent', 'navbar'], + ['IgxNavbarModule', 'navbar'], + ['IGX_NAVBAR_DIRECTIVES', 'navbar'], + ['IgxNavbarActionDirective', 'navbar'], + ['IgxNavbarTitleDirective', 'navbar'], + + // Navigation Drawer + ['IgxNavigationDrawerComponent', 'navigation-drawer'], + ['IgxNavigationDrawerModule', 'navigation-drawer'], + ['IGX_NAVIGATION_DRAWER_DIRECTIVES', 'navigation-drawer'], + ['IgxNavigationDrawerItemComponent', 'navigation-drawer'], + ['INavigationDrawerEventArgs', 'navigation-drawer'], + ['IgxNavDrawerMode', 'navigation-drawer'], + ['IgxNavDrawerItemDirective', 'navigation-drawer'], + ['IgxNavDrawerTemplateDirective', 'navigation-drawer'], + ['IgxNavDrawerMiniTemplateDirective', 'navigation-drawer'], + + // Paginator + ['IgxPaginatorComponent', 'paginator'], + ['IGX_PAGINATOR_DIRECTIVES', 'paginator'], + ['IgxPaginatorDirective', 'paginator'], + ['IgxPageNavigationComponent', 'paginator'], + ['IgxPageSizeSelectorComponent', 'paginator'], + ['IgxPaginatorContentDirective', 'paginator'], + ['IgxPaginatorModule', 'paginator'], + ['IPageEventArgs', 'paginator'], + ['IPageCancelableEventArgs', 'paginator'], + + // Progressbar + ['IgxCircularProgressBarComponent', 'progressbar'], + ['IgxLinearProgressBarComponent', 'progressbar'], + ['IgxProgressBarModule', 'progressbar'], + ['IGX_PROGRESS_BAR_DIRECTIVES', 'progressbar'], + ['IgxProgressType', 'progressbar'], + ['IgxTextAlign', 'progressbar'], + ['IgxProgressBarGradientMode', 'progressbar'], + ['IgxProgressBarGradientDirective', 'progressbar'], + + // Query Builder + ['IgxQueryBuilderComponent', 'query-builder'], + ['IgxQueryBuilderModule', 'query-builder'], + ['IGX_QUERY_BUILDER_DIRECTIVES', 'query-builder'], + ['IExpressionGroup', 'query-builder'], + ['IgxQueryBuilderHeaderComponent', 'query-builder'], + ['IgxQueryBuilderSearchValueTemplateDirective', 'query-builder'], + + // Radio + ['IgxRadioComponent', 'radio'], + ['IgxRadioModule', 'radio'], + ['IGX_RADIO_GROUP_DIRECTIVES', 'radio'], + ['RadioGroupAlignment', 'radio'], + ['IgxRadioGroupDirective', 'radio'], + + // Select + ['IgxSelectComponent', 'select'], + ['IgxSelectModule', 'select'], + ['IGX_SELECT_DIRECTIVES', 'select'], + ['IgxSelectItemComponent', 'select'], + ['IgxSelectHeaderDirective', 'select'], + ['IgxSelectFooterDirective', 'select'], + ['IgxSelectToggleIconDirective', 'select'], + ['ISelectionChangedEventArgs', 'select'], + ['IgxSelectGroupComponent', 'select'], + + // Simple Combo + ['IgxSimpleComboComponent', 'simple-combo'], + ['IGX_SIMPLE_COMBO_DIRECTIVES', 'simple-combo'], + ['ISimpleComboSelectionChangingEventArgs', 'simple-combo'], + ['IgxSimpleComboModule', 'simple-combo'], + + // Slider + ['IgxSliderComponent', 'slider'], + ['IgxSliderModule', 'slider'], + ['IGX_SLIDER_DIRECTIVES', 'slider'], + ['ISliderValueChangeEventArgs', 'slider'], + ['IRangeSliderValue', 'slider'], + ['SliderType', 'slider'], + ['IgxSliderType', 'slider'], + ['TickLabelsOrientation', 'slider'], + ['TicksOrientation', 'slider'], + ['IgxTickLabelTemplateDirective', 'slider'], + ['IgxThumbToTemplateDirective', 'slider'], + ['IgxThumbFromTemplateDirective', 'slider'], + + // Snackbar + ['IgxSnackbarComponent', 'snackbar'], + ['IgxSnackbarModule', 'snackbar'], + + // Splitter + ['IgxSplitterComponent', 'splitter'], + ['IgxSplitterModule', 'splitter'], + ['IGX_SPLITTER_DIRECTIVES', 'splitter'], + ['IgxSplitterPaneComponent', 'splitter'], + ['ISplitterEventArgs', 'splitter'], + ['SplitterType', 'splitter'], + + // Stepper + ['IgxStepperComponent', 'stepper'], + ['IgxStepperModule', 'stepper'], + ['IGX_STEPPER_DIRECTIVES', 'stepper'], + ['IgxStepComponent', 'stepper'], + ['IStepChangingEventArgs', 'stepper'], + ['IStepChangedEventArgs', 'stepper'], + ['IgxStepperOrientation', 'stepper'], + ['IgxStepType', 'stepper'], + ['IgxStepActiveIndicatorDirective', 'stepper'], + ['IgxStepCompletedIndicatorDirective', 'stepper'], + ['IgxStepContentDirective', 'stepper'], + ['IgxStepTitleDirective', 'stepper'], + ['IgxStepSubtitleDirective', 'stepper'], + ['IgxStepInvalidIndicatorDirective', 'stepper'], + ['IgxStepIndicatorDirective', 'stepper'], + ['IgxStepperTitlePosition', 'stepper'], + + // Switch + ['IgxSwitchComponent', 'switch'], + ['IgxSwitchModule', 'switch'], + + // Tabs + ['IgxTabsComponent', 'tabs'], + ['IgxTabsModule', 'tabs'], + ['IGX_TABS_DIRECTIVES', 'tabs'], + ['IgxTabItemComponent', 'tabs'], + ['IgxTabHeaderComponent', 'tabs'], + ['IgxTabContentComponent', 'tabs'], + ['IgxTabsGroupComponent', 'tabs'], + ['ITabsSelectedItemChangeEventArgs', 'tabs'], + ['IgxTabsType', 'tabs'], + ['IgxTabHeaderIconDirective', 'tabs'], + ['IgxTabHeaderLabelDirective', 'tabs'], + + // Time Picker + ['IgxTimePickerComponent', 'time-picker'], + ['IgxTimePickerModule', 'time-picker'], + ['IGX_TIME_PICKER_DIRECTIVES', 'time-picker'], + ['IgxTimePickerActionsDirective', 'time-picker'], + ['IgxHourItemDirective', 'time-picker'], + ['IgxMinuteItemDirective', 'time-picker'], + ['IgxAmPmItemDirective', 'time-picker'], + ['IgxItemListDirective', 'time-picker'], + + // Toast + ['IgxToastComponent', 'toast'], + ['IgxToastModule', 'toast'], + ['IgxToastPosition', 'toast'], + + // Tree + ['IgxTreeComponent', 'tree'], + ['IgxTreeModule', 'tree'], + ['IGX_TREE_DIRECTIVES', 'tree'], + ['IgxTreeNodeComponent', 'tree'], + ['ITreeNodeSelectionEvent', 'tree'], + ['ITreeNodeTogglingEventArgs', 'tree'], + ['IgxTreeSelectionType', 'tree'], + ['IgxTreeNodeLinkDirective', 'tree'], + + // Directives (re-exports from other entry points) + ['IgxForOfDirective', 'directives'], + ['IForOfState', 'directives'], + ['IgxForOfModule', 'directives'], + ['IgxTemplateOutletDirective', 'directives'], + ['IgxTextSelectionDirective', 'directives'], + ['IgxTextSelectionModule', 'directives'], + ['IgxTextHighlightDirective', 'directives'], + ['IgxTextHighlightModule', 'directives'], + ['IgxDateTimeEditorDirective', 'directives'], + ['IgxMaskDirective', 'directives'], + ['IgxMaskModule', 'directives'], + ['IgxDividerDirective', 'directives'], + ['IgxDividerModule', 'directives'], + ['IgxFilterDirective', 'directives'], + ['IgxButtonDirective', 'directives'], + ['IgxButtonModule', 'directives'], + ['IgxIconButtonDirective', 'directives'], + ['IgxToggleActionDirective', 'directives'], + ['IgxLayoutDirective', 'directives'], + ['IgxLayoutModule', 'directives'], + ['IgxFlexDirective', 'directives'], + ['IgxFocusDirective', 'directives'], + ['IgxFocusModule', 'directives'], + ['IgxTooltipDirective', 'directives'], + ['IgxTooltipTargetDirective', 'directives'], + ['TooltipPositionStrategy', 'directives'], + ['IgxTooltipModule', 'directives'], + ['IgxRippleDirective', 'directives'], + ['IgxRippleModule', 'directives'], + ['IDropDroppedEventArgs', 'directives'], + ['IDragGhostCreatedEventArgs', 'directives'], + ['IDragStartEventArgs', 'directives'], + ['IDragBaseEventArgs', 'directives'], + ['IDropBaseEventArgs', 'directives'], + ['IDragMoveEventArgs', 'directives'], + ['IgxDragDirective', 'directives'], + ['IgxDragHandleDirective', 'directives'], + ['IgxDragLocation', 'directives'], + ['IgxDropDirective', 'directives'], + ['IgxDragDropModule', 'directives'], + ['IgxFocusTrapDirective', 'directives'], + ['IgxToggleDirective', 'directives'], + ['IgxToggleModule', 'directives'], + ['IgxFilterOptions', 'directives'], + ['IgxFilterPipe', 'directives'], + ['IgxFilterModule', 'directives'], + ['IgcFormControlDirective', 'directives'], + ['IgxTextHighlightService', 'directives'] +]); + +// Type renames (old name -> new name and entry point) +const TYPE_RENAMES = new Map([ + ['Direction', { newName: 'CarouselAnimationDirection', entryPoint: 'carousel' }], + ['IgxColumPatternValidatorDirective', { newName: 'IgxColumnPatternValidatorDirective', entryPoint: 'grids/core' }], +]); + +function migrateImportDeclaration(node: ts.ImportDeclaration, sourceFile: ts.SourceFile): { start: number, end: number, replacement: string } | null { + const moduleSpecifier = node.moduleSpecifier; + if (!ts.isStringLiteral(moduleSpecifier)) { + return null; + } + + const importPath = moduleSpecifier.text; + + // Only process igniteui-angular imports (not already using entry points) + if (importPath !== 'igniteui-angular') { + return null; + } + + const importClause = node.importClause; + if (!importClause || !importClause.namedBindings) { + return null; + } + + if (!ts.isNamedImports(importClause.namedBindings)) { + return null; + } + + // Group imports by entry point + const entryPointGroups = new Map(); + + for (const element of importClause.namedBindings.elements) { + const name = element.name.text; + const alias = element.propertyName?.text; + const importName = alias || name; + let actualImportName = importName; + + // Check if this is a renamed type + if (TYPE_RENAMES.has(importName)) { + const rename = TYPE_RENAMES.get(importName)!; + actualImportName = rename.newName; + } + + const fullImport = alias ? `${actualImportName} as ${name}` : actualImportName; + + // Determine target entry point + let targetEntryPoint = 'core'; // Default to core + + // Check if it's a renamed type first + if (TYPE_RENAMES.has(importName)) { + targetEntryPoint = TYPE_RENAMES.get(importName)!.entryPoint; + } else if (ENTRY_POINT_MAP.has(importName)) { + targetEntryPoint = ENTRY_POINT_MAP.get(importName)!; + } + + if (!entryPointGroups.has(targetEntryPoint)) { + entryPointGroups.set(targetEntryPoint, []); + } + entryPointGroups.get(targetEntryPoint)!.push(fullImport); + } + + // Generate new import statements + const newImports: string[] = []; + for (const [entryPoint, imports] of entryPointGroups) { + const sortedImports = imports.sort(); + newImports.push(`import { ${sortedImports.join(', ')} } from 'igniteui-angular/${entryPoint}';`); + } + + return { + start: node.getStart(sourceFile), + end: node.getEnd(), + replacement: newImports.join('\n') + }; +} + +function migrateFile(filePath: string, content: string): string { + const sourceFile = ts.createSourceFile( + filePath, + content, + ts.ScriptTarget.Latest, + true + ); + + const changes: { start: number, end: number, replacement: string }[] = []; + + // Track which old type names are imported in this file + const importedOldTypes = new Set(); + + function visit(node: ts.Node) { + if (ts.isImportDeclaration(node)) { + const change = migrateImportDeclaration(node, sourceFile); + if (change) { + changes.push(change); + + // Track old type names that were imported + const moduleSpecifier = node.moduleSpecifier; + if (ts.isStringLiteral(moduleSpecifier) && moduleSpecifier.text === 'igniteui-angular') { + const importClause = node.importClause; + if (importClause?.namedBindings && ts.isNamedImports(importClause.namedBindings)) { + for (const element of importClause.namedBindings.elements) { + const importName = element.propertyName?.text || element.name.text; + if (TYPE_RENAMES.has(importName)) { + importedOldTypes.add(importName); + } + } + } + } + } + } else if (ts.isIdentifier(node) && importedOldTypes.has(node.text)) { + // Rename type references in the code (but only if not aliased in import) + const oldName = node.text; + const rename = TYPE_RENAMES.get(oldName)!; + + // Check if this identifier is part of an import statement + // We don't want to rename it there as we already handled it + let isInImport = false; + let parent = node.parent; + while (parent) { + if (ts.isImportDeclaration(parent)) { + isInImport = true; + break; + } + parent = parent.parent; + } + + if (!isInImport) { + changes.push({ + start: node.getStart(sourceFile), + end: node.getEnd(), + replacement: rename.newName + }); + } + } + + ts.forEachChild(node, visit); + } + + visit(sourceFile); + + // Apply changes in reverse order to maintain positions + changes.sort((a, b) => b.start - a.start); + + let result = content; + for (const change of changes) { + result = result.substring(0, change.start) + change.replacement + result.substring(change.end); + } + + return result; +} + +export default function migrate(): Rule { + return async (host: Tree, context: SchematicContext) => { + context.logger.info(`Applying optional import migration for Ignite UI for Angular to version ${version}`); + context.logger.info('Migrating imports to new entry points...'); + + const visit: FileVisitor = (filePath) => { + // Only process TypeScript files + if (!filePath.endsWith('.ts')) { + return; + } + + // Skip node_modules and dist + if (filePath.includes('node_modules') || filePath.includes('dist')) { + return; + } + + const content = host.read(filePath); + if (!content) { + return; + } + + const originalContent = content.toString(); + + // Check if file has igniteui-angular imports + if (!originalContent.includes("from 'igniteui-angular'") && !originalContent.includes('from "igniteui-angular"')) { + return; + } + + const migratedContent = migrateFile(filePath, originalContent); + + if (migratedContent !== originalContent) { + host.overwrite(filePath, migratedContent); + context.logger.info(` ✓ Migrated ${filePath}`); + } + }; + + host.visit(visit); + + context.logger.info('Migration complete!'); + context.logger.info('Breaking changes:'); + context.logger.info(' - Input directives moved to igniteui-angular/input-group'); + context.logger.info(' - IgxAutocompleteDirective moved to igniteui-angular/drop-down'); + context.logger.info(' - IgxRadioGroupDirective moved to igniteui-angular/radio'); + context.logger.info('Type renames:'); + context.logger.info(' - Direction → CarouselAnimationDirection'); + }; +} diff --git a/projects/igniteui-angular/query-builder/src/query-builder/query-builder-tree.component.ts b/projects/igniteui-angular/query-builder/src/query-builder/query-builder-tree.component.ts index feab3103635..f6d6d0cb1e9 100644 --- a/projects/igniteui-angular/query-builder/src/query-builder/query-builder-tree.component.ts +++ b/projects/igniteui-angular/query-builder/src/query-builder/query-builder-tree.component.ts @@ -43,14 +43,14 @@ import { IgxPickerToggleComponent, IgxPickerClearComponent, getCurrentResourceStrings, - isTree + isTree, + IgxOverlayOutletDirective } from 'igniteui-angular/core'; import { IgxDatePickerComponent } from 'igniteui-angular/date-picker'; import { IgxButtonDirective, IgxDateTimeEditorDirective, - IgxOverlayOutletDirective, IgxIconButtonDirective, IgxTooltipDirective, IgxTooltipTargetDirective, diff --git a/projects/igniteui-angular/query-builder/src/query-builder/query-builder.component.ts b/projects/igniteui-angular/query-builder/src/query-builder/query-builder.component.ts index addf61a5c34..3553d599000 100644 --- a/projects/igniteui-angular/query-builder/src/query-builder/query-builder.component.ts +++ b/projects/igniteui-angular/query-builder/src/query-builder/query-builder.component.ts @@ -10,9 +10,9 @@ import { IQueryBuilderResourceStrings, QueryBuilderResourceStringsEN, recreateTree, - getCurrentResourceStrings + getCurrentResourceStrings, + IgxOverlayOutletDirective } from 'igniteui-angular/core'; -import { IgxOverlayOutletDirective } from 'igniteui-angular/directives'; import { IgxQueryBuilderTreeComponent } from './query-builder-tree.component'; import { IgxIconService } from 'igniteui-angular/icon'; import { editor } from '@igniteui/material-icons-extended'; diff --git a/projects/igniteui-angular/radio/src/public_api.ts b/projects/igniteui-angular/radio/src/public_api.ts index f2e174b9c56..6aca07adab5 100644 --- a/projects/igniteui-angular/radio/src/public_api.ts +++ b/projects/igniteui-angular/radio/src/public_api.ts @@ -1,2 +1 @@ -export type { IChangeCheckboxEventArgs } from "igniteui-angular/directives"; export * from './radio/public_api'; diff --git a/projects/igniteui-angular/slider/src/slider/slider.component.ts b/projects/igniteui-angular/slider/src/slider/slider.component.ts index 18c294a5eb5..e3d8ff21280 100644 --- a/projects/igniteui-angular/slider/src/slider/slider.component.ts +++ b/projects/igniteui-angular/slider/src/slider/slider.component.ts @@ -5,9 +5,7 @@ import { import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'; import { animationFrameScheduler, fromEvent, interval, merge, noop, Observable, Subject, timer } from 'rxjs'; import { takeUntil, throttle, throttleTime } from 'rxjs/operators'; -import { EditorProvider } from 'igniteui-angular/core'; -import { resizeObservable } from 'igniteui-angular/core'; -import { ɵIgxDirectionality } from 'igniteui-angular/core'; +import { EditorProvider, ɵIgxDirectionality, resizeObservable } from 'igniteui-angular/core'; import { IgxThumbLabelComponent } from './label/thumb-label.component'; import { IgxSliderType, IgxThumbFromTemplateDirective, diff --git a/projects/igniteui-angular/src/assets/images/avatar/1.jpg b/projects/igniteui-angular/test-utils/assets/images/avatar/1.jpg similarity index 100% rename from projects/igniteui-angular/src/assets/images/avatar/1.jpg rename to projects/igniteui-angular/test-utils/assets/images/avatar/1.jpg diff --git a/projects/igniteui-angular/src/assets/images/avatar/10.jpg b/projects/igniteui-angular/test-utils/assets/images/avatar/10.jpg similarity index 100% rename from projects/igniteui-angular/src/assets/images/avatar/10.jpg rename to projects/igniteui-angular/test-utils/assets/images/avatar/10.jpg diff --git a/projects/igniteui-angular/src/assets/images/avatar/11.jpg b/projects/igniteui-angular/test-utils/assets/images/avatar/11.jpg similarity index 100% rename from projects/igniteui-angular/src/assets/images/avatar/11.jpg rename to projects/igniteui-angular/test-utils/assets/images/avatar/11.jpg diff --git a/projects/igniteui-angular/src/assets/images/avatar/12.jpg b/projects/igniteui-angular/test-utils/assets/images/avatar/12.jpg similarity index 100% rename from projects/igniteui-angular/src/assets/images/avatar/12.jpg rename to projects/igniteui-angular/test-utils/assets/images/avatar/12.jpg diff --git a/projects/igniteui-angular/src/assets/images/avatar/13.jpg b/projects/igniteui-angular/test-utils/assets/images/avatar/13.jpg similarity index 100% rename from projects/igniteui-angular/src/assets/images/avatar/13.jpg rename to projects/igniteui-angular/test-utils/assets/images/avatar/13.jpg diff --git a/projects/igniteui-angular/src/assets/images/avatar/14.jpg b/projects/igniteui-angular/test-utils/assets/images/avatar/14.jpg similarity index 100% rename from projects/igniteui-angular/src/assets/images/avatar/14.jpg rename to projects/igniteui-angular/test-utils/assets/images/avatar/14.jpg diff --git a/projects/igniteui-angular/src/assets/images/avatar/15.jpg b/projects/igniteui-angular/test-utils/assets/images/avatar/15.jpg similarity index 100% rename from projects/igniteui-angular/src/assets/images/avatar/15.jpg rename to projects/igniteui-angular/test-utils/assets/images/avatar/15.jpg diff --git a/projects/igniteui-angular/src/assets/images/avatar/16.jpg b/projects/igniteui-angular/test-utils/assets/images/avatar/16.jpg similarity index 100% rename from projects/igniteui-angular/src/assets/images/avatar/16.jpg rename to projects/igniteui-angular/test-utils/assets/images/avatar/16.jpg diff --git a/projects/igniteui-angular/src/assets/images/avatar/17.jpg b/projects/igniteui-angular/test-utils/assets/images/avatar/17.jpg similarity index 100% rename from projects/igniteui-angular/src/assets/images/avatar/17.jpg rename to projects/igniteui-angular/test-utils/assets/images/avatar/17.jpg diff --git a/projects/igniteui-angular/src/assets/images/avatar/18.jpg b/projects/igniteui-angular/test-utils/assets/images/avatar/18.jpg similarity index 100% rename from projects/igniteui-angular/src/assets/images/avatar/18.jpg rename to projects/igniteui-angular/test-utils/assets/images/avatar/18.jpg diff --git a/projects/igniteui-angular/src/assets/images/avatar/19.jpg b/projects/igniteui-angular/test-utils/assets/images/avatar/19.jpg similarity index 100% rename from projects/igniteui-angular/src/assets/images/avatar/19.jpg rename to projects/igniteui-angular/test-utils/assets/images/avatar/19.jpg diff --git a/projects/igniteui-angular/src/assets/images/avatar/2.jpg b/projects/igniteui-angular/test-utils/assets/images/avatar/2.jpg similarity index 100% rename from projects/igniteui-angular/src/assets/images/avatar/2.jpg rename to projects/igniteui-angular/test-utils/assets/images/avatar/2.jpg diff --git a/projects/igniteui-angular/src/assets/images/avatar/20.jpg b/projects/igniteui-angular/test-utils/assets/images/avatar/20.jpg similarity index 100% rename from projects/igniteui-angular/src/assets/images/avatar/20.jpg rename to projects/igniteui-angular/test-utils/assets/images/avatar/20.jpg diff --git a/projects/igniteui-angular/src/assets/images/avatar/21.jpg b/projects/igniteui-angular/test-utils/assets/images/avatar/21.jpg similarity index 100% rename from projects/igniteui-angular/src/assets/images/avatar/21.jpg rename to projects/igniteui-angular/test-utils/assets/images/avatar/21.jpg diff --git a/projects/igniteui-angular/src/assets/images/avatar/22.jpg b/projects/igniteui-angular/test-utils/assets/images/avatar/22.jpg similarity index 100% rename from projects/igniteui-angular/src/assets/images/avatar/22.jpg rename to projects/igniteui-angular/test-utils/assets/images/avatar/22.jpg diff --git a/projects/igniteui-angular/src/assets/images/avatar/23.jpg b/projects/igniteui-angular/test-utils/assets/images/avatar/23.jpg similarity index 100% rename from projects/igniteui-angular/src/assets/images/avatar/23.jpg rename to projects/igniteui-angular/test-utils/assets/images/avatar/23.jpg diff --git a/projects/igniteui-angular/src/assets/images/avatar/24.jpg b/projects/igniteui-angular/test-utils/assets/images/avatar/24.jpg similarity index 100% rename from projects/igniteui-angular/src/assets/images/avatar/24.jpg rename to projects/igniteui-angular/test-utils/assets/images/avatar/24.jpg diff --git a/projects/igniteui-angular/src/assets/images/avatar/3.jpg b/projects/igniteui-angular/test-utils/assets/images/avatar/3.jpg similarity index 100% rename from projects/igniteui-angular/src/assets/images/avatar/3.jpg rename to projects/igniteui-angular/test-utils/assets/images/avatar/3.jpg diff --git a/projects/igniteui-angular/src/assets/images/avatar/4.jpg b/projects/igniteui-angular/test-utils/assets/images/avatar/4.jpg similarity index 100% rename from projects/igniteui-angular/src/assets/images/avatar/4.jpg rename to projects/igniteui-angular/test-utils/assets/images/avatar/4.jpg diff --git a/projects/igniteui-angular/src/assets/images/avatar/5.jpg b/projects/igniteui-angular/test-utils/assets/images/avatar/5.jpg similarity index 100% rename from projects/igniteui-angular/src/assets/images/avatar/5.jpg rename to projects/igniteui-angular/test-utils/assets/images/avatar/5.jpg diff --git a/projects/igniteui-angular/src/assets/images/avatar/6.jpg b/projects/igniteui-angular/test-utils/assets/images/avatar/6.jpg similarity index 100% rename from projects/igniteui-angular/src/assets/images/avatar/6.jpg rename to projects/igniteui-angular/test-utils/assets/images/avatar/6.jpg diff --git a/projects/igniteui-angular/src/assets/images/avatar/7.jpg b/projects/igniteui-angular/test-utils/assets/images/avatar/7.jpg similarity index 100% rename from projects/igniteui-angular/src/assets/images/avatar/7.jpg rename to projects/igniteui-angular/test-utils/assets/images/avatar/7.jpg diff --git a/projects/igniteui-angular/src/assets/images/avatar/8.jpg b/projects/igniteui-angular/test-utils/assets/images/avatar/8.jpg similarity index 100% rename from projects/igniteui-angular/src/assets/images/avatar/8.jpg rename to projects/igniteui-angular/test-utils/assets/images/avatar/8.jpg diff --git a/projects/igniteui-angular/src/assets/images/avatar/9.jpg b/projects/igniteui-angular/test-utils/assets/images/avatar/9.jpg similarity index 100% rename from projects/igniteui-angular/src/assets/images/avatar/9.jpg rename to projects/igniteui-angular/test-utils/assets/images/avatar/9.jpg