diff --git a/package-lock.json b/package-lock.json index d1b5e36f542..586a5bc2b0d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,7 +25,7 @@ "@types/source-map": "0.5.2", "express": "^5.1.0", "fflate": "^0.8.1", - "igniteui-theming": "^20.0.0", + "igniteui-theming": "^21.0.2", "igniteui-trial-watermark": "^3.1.0", "lodash-es": "^4.17.21", "rxjs": "^7.8.2", @@ -70,7 +70,7 @@ "hammerjs": "^2.0.8", "ig-typedoc-theme": "^6.0.0", "igniteui-dockmanager": "^1.17.0", - "igniteui-sassdoc-theme": "^2.0.2", + "igniteui-sassdoc-theme": "^2.1.0", "igniteui-webcomponents": "6.2.1", "jasmine": "^5.6.0", "jasmine-core": "^5.6.0", @@ -1283,20 +1283,20 @@ "license": "MIT" }, "node_modules/@astrojs/internal-helpers": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.6.1.tgz", - "integrity": "sha512-l5Pqf6uZu31aG+3Lv8nl/3s4DbUzdlxTWDof4pEpto6GUJNhhCbelVi9dEyurOVyqaelwmS9oSyOWOENSfgo9A==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.7.2.tgz", + "integrity": "sha512-KCkCqR3Goym79soqEtbtLzJfqhTWMyVaizUi35FLzgGSzBotSw8DB1qwsu7U96ihOJgYhDk2nVPz+3LnXPeX6g==", "dev": true, "license": "MIT" }, "node_modules/@astrojs/markdown-remark": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-6.3.2.tgz", - "integrity": "sha512-bO35JbWpVvyKRl7cmSJD822e8YA8ThR/YbUsciWNA7yTcqpIAL2hJDToWP5KcZBWxGT6IOdOkHSXARSNZc4l/Q==", + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-6.3.6.tgz", + "integrity": "sha512-bwylYktCTsLMVoCOEHbn2GSUA3c5KT/qilekBKA3CBng0bo1TYjNZPr761vxumRk9kJGqTOtU+fgCAp5Vwokug==", "dev": true, "license": "MIT", "dependencies": { - "@astrojs/internal-helpers": "0.6.1", + "@astrojs/internal-helpers": "0.7.2", "@astrojs/prism": "3.3.0", "github-slugger": "^2.0.0", "hast-util-from-html": "^2.0.3", @@ -1311,7 +1311,7 @@ "remark-rehype": "^11.1.2", "remark-smartypants": "^3.0.2", "shiki": "^3.2.1", - "smol-toml": "^1.3.1", + "smol-toml": "^1.3.4", "unified": "^11.0.5", "unist-util-remove-position": "^5.0.0", "unist-util-visit": "^5.0.0", @@ -1909,9 +1909,9 @@ } }, "node_modules/@emnapi/runtime": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.5.tgz", - "integrity": "sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.5.0.tgz", + "integrity": "sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==", "dev": true, "license": "MIT", "optional": true, @@ -2876,10 +2876,21 @@ "integrity": "sha512-gtkIaeOHAWbppCAdVFNtEhnJ/tML6q4hIHF8zM5Fo0THJmu2+iJvBSCNyb8/c7P+mr1ImNqwhKuu+PqUlz493A==", "license": "MIT" }, + "node_modules/@img/colour": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.0.0.tgz", + "integrity": "sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + } + }, "node_modules/@img/sharp-darwin-arm64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", - "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==", + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.4.tgz", + "integrity": "sha512-sitdlPzDVyvmINUdJle3TNHl+AG9QcwiAMsXmccqsCOMZNIdW2/7S26w0LyU8euiLVzFBL3dXPwVCq/ODnf2vA==", "cpu": [ "arm64" ], @@ -2896,13 +2907,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-darwin-arm64": "1.0.4" + "@img/sharp-libvips-darwin-arm64": "1.2.3" } }, "node_modules/@img/sharp-darwin-x64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz", - "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==", + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.4.tgz", + "integrity": "sha512-rZheupWIoa3+SOdF/IcUe1ah4ZDpKBGWcsPX6MT0lYniH9micvIU7HQkYTfrx5Xi8u+YqwLtxC/3vl8TQN6rMg==", "cpu": [ "x64" ], @@ -2919,13 +2930,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-darwin-x64": "1.0.4" + "@img/sharp-libvips-darwin-x64": "1.2.3" } }, "node_modules/@img/sharp-libvips-darwin-arm64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz", - "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.3.tgz", + "integrity": "sha512-QzWAKo7kpHxbuHqUC28DZ9pIKpSi2ts2OJnoIGI26+HMgq92ZZ4vk8iJd4XsxN+tYfNJxzH6W62X5eTcsBymHw==", "cpu": [ "arm64" ], @@ -2940,9 +2951,9 @@ } }, "node_modules/@img/sharp-libvips-darwin-x64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz", - "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.3.tgz", + "integrity": "sha512-Ju+g2xn1E2AKO6YBhxjj+ACcsPQRHT0bhpglxcEf+3uyPY+/gL8veniKoo96335ZaPo03bdDXMv0t+BBFAbmRA==", "cpu": [ "x64" ], @@ -2957,9 +2968,9 @@ } }, "node_modules/@img/sharp-libvips-linux-arm": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz", - "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.3.tgz", + "integrity": "sha512-x1uE93lyP6wEwGvgAIV0gP6zmaL/a0tGzJs/BIDDG0zeBhMnuUPm7ptxGhUbcGs4okDJrk4nxgrmxpib9g6HpA==", "cpu": [ "arm" ], @@ -2974,9 +2985,9 @@ } }, "node_modules/@img/sharp-libvips-linux-arm64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz", - "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.3.tgz", + "integrity": "sha512-I4RxkXU90cpufazhGPyVujYwfIm9Nk1QDEmiIsaPwdnm013F7RIceaCc87kAH+oUB1ezqEvC6ga4m7MSlqsJvQ==", "cpu": [ "arm64" ], @@ -2990,10 +3001,27 @@ "url": "https://opencollective.com/libvips" } }, + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.3.tgz", + "integrity": "sha512-Y2T7IsQvJLMCBM+pmPbM3bKT/yYJvVtLJGfCs4Sp95SjvnFIjynbjzsa7dY1fRJX45FTSfDksbTp6AGWudiyCg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, "node_modules/@img/sharp-libvips-linux-s390x": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz", - "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.3.tgz", + "integrity": "sha512-RgWrs/gVU7f+K7P+KeHFaBAJlNkD1nIZuVXdQv6S+fNA6syCcoboNjsV2Pou7zNlVdNQoQUpQTk8SWDHUA3y/w==", "cpu": [ "s390x" ], @@ -3008,9 +3036,9 @@ } }, "node_modules/@img/sharp-libvips-linux-x64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz", - "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.3.tgz", + "integrity": "sha512-3JU7LmR85K6bBiRzSUc/Ff9JBVIFVvq6bomKE0e63UXGeRw2HPVEjoJke1Yx+iU4rL7/7kUjES4dZ/81Qjhyxg==", "cpu": [ "x64" ], @@ -3025,9 +3053,9 @@ } }, "node_modules/@img/sharp-libvips-linuxmusl-arm64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz", - "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.3.tgz", + "integrity": "sha512-F9q83RZ8yaCwENw1GieztSfj5msz7GGykG/BA+MOUefvER69K/ubgFHNeSyUu64amHIYKGDs4sRCMzXVj8sEyw==", "cpu": [ "arm64" ], @@ -3042,9 +3070,9 @@ } }, "node_modules/@img/sharp-libvips-linuxmusl-x64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz", - "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.3.tgz", + "integrity": "sha512-U5PUY5jbc45ANM6tSJpsgqmBF/VsL6LnxJmIf11kB7J5DctHgqm0SkuXzVWtIY90GnJxKnC/JT251TDnk1fu/g==", "cpu": [ "x64" ], @@ -3059,9 +3087,9 @@ } }, "node_modules/@img/sharp-linux-arm": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz", - "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==", + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.4.tgz", + "integrity": "sha512-Xyam4mlqM0KkTHYVSuc6wXRmM7LGN0P12li03jAnZ3EJWZqj83+hi8Y9UxZUbxsgsK1qOEwg7O0Bc0LjqQVtxA==", "cpu": [ "arm" ], @@ -3078,13 +3106,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-arm": "1.0.5" + "@img/sharp-libvips-linux-arm": "1.2.3" } }, "node_modules/@img/sharp-linux-arm64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz", - "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==", + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.4.tgz", + "integrity": "sha512-YXU1F/mN/Wu786tl72CyJjP/Ngl8mGHN1hST4BGl+hiW5jhCnV2uRVTNOcaYPs73NeT/H8Upm3y9582JVuZHrQ==", "cpu": [ "arm64" ], @@ -3101,13 +3129,36 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-arm64": "1.0.4" + "@img/sharp-libvips-linux-arm64": "1.2.3" + } + }, + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.4.tgz", + "integrity": "sha512-F4PDtF4Cy8L8hXA2p3TO6s4aDt93v+LKmpcYFLAVdkkD3hSxZzee0rh6/+94FpAynsuMpLX5h+LRsSG3rIciUQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.2.3" } }, "node_modules/@img/sharp-linux-s390x": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz", - "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==", + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.4.tgz", + "integrity": "sha512-qVrZKE9Bsnzy+myf7lFKvng6bQzhNUAYcVORq2P7bDlvmF6u2sCmK2KyEQEBdYk+u3T01pVsPrkj943T1aJAsw==", "cpu": [ "s390x" ], @@ -3124,13 +3175,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-s390x": "1.0.4" + "@img/sharp-libvips-linux-s390x": "1.2.3" } }, "node_modules/@img/sharp-linux-x64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz", - "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==", + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.4.tgz", + "integrity": "sha512-ZfGtcp2xS51iG79c6Vhw9CWqQC8l2Ot8dygxoDoIQPTat/Ov3qAa8qpxSrtAEAJW+UjTXc4yxCjNfxm4h6Xm2A==", "cpu": [ "x64" ], @@ -3147,13 +3198,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-x64": "1.0.4" + "@img/sharp-libvips-linux-x64": "1.2.3" } }, "node_modules/@img/sharp-linuxmusl-arm64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz", - "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==", + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.4.tgz", + "integrity": "sha512-8hDVvW9eu4yHWnjaOOR8kHVrew1iIX+MUgwxSuH2XyYeNRtLUe4VNioSqbNkB7ZYQJj9rUTT4PyRscyk2PXFKA==", "cpu": [ "arm64" ], @@ -3170,13 +3221,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-arm64": "1.0.4" + "@img/sharp-libvips-linuxmusl-arm64": "1.2.3" } }, "node_modules/@img/sharp-linuxmusl-x64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz", - "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==", + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.4.tgz", + "integrity": "sha512-lU0aA5L8QTlfKjpDCEFOZsTYGn3AEiO6db8W5aQDxj0nQkVrZWmN3ZP9sYKWJdtq3PWPhUNlqehWyXpYDcI9Sg==", "cpu": [ "x64" ], @@ -3193,13 +3244,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-x64": "1.0.4" + "@img/sharp-libvips-linuxmusl-x64": "1.2.3" } }, "node_modules/@img/sharp-wasm32": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz", - "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==", + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.4.tgz", + "integrity": "sha512-33QL6ZO/qpRyG7woB/HUALz28WnTMI2W1jgX3Nu2bypqLIKx/QKMILLJzJjI+SIbvXdG9fUnmrxR7vbi1sTBeA==", "cpu": [ "wasm32" ], @@ -3207,7 +3258,7 @@ "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", "optional": true, "dependencies": { - "@emnapi/runtime": "^1.2.0" + "@emnapi/runtime": "^1.5.0" }, "engines": { "node": "^18.17.0 || ^20.3.0 || >=21.0.0" @@ -3216,10 +3267,30 @@ "url": "https://opencollective.com/libvips" } }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.4.tgz", + "integrity": "sha512-2Q250do/5WXTwxW3zjsEuMSv5sUU4Tq9VThWKlU2EYLm4MB7ZeMwF+SFJutldYODXF6jzc6YEOC+VfX0SZQPqA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, "node_modules/@img/sharp-win32-ia32": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz", - "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==", + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.4.tgz", + "integrity": "sha512-3ZeLue5V82dT92CNL6rsal6I2weKw1cYu+rGKm8fOCCtJTR2gYeUfY3FqUnIJsMUPIH68oS5jmZ0NiJ508YpEw==", "cpu": [ "ia32" ], @@ -3237,9 +3308,9 @@ } }, "node_modules/@img/sharp-win32-x64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz", - "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==", + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.4.tgz", + "integrity": "sha512-xIyj4wpYs8J18sVN3mSQjwrw7fKUqRw+Z5rnHNCy5fYTxigBz81u5mOMPmFumwjcn8+ld1ppptMBCLic1nz6ig==", "cpu": [ "x64" ], @@ -3741,9 +3812,9 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "dev": true, "license": "MIT" }, @@ -5435,9 +5506,9 @@ } }, "node_modules/@rollup/pluginutils": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", - "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", + "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", "dev": true, "license": "MIT", "dependencies": { @@ -5775,22 +5846,22 @@ } }, "node_modules/@shikijs/core": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.6.0.tgz", - "integrity": "sha512-9By7Xb3olEX0o6UeJyPLI1PE1scC4d3wcVepvtv2xbuN9/IThYN4Wcwh24rcFeASzPam11MCq8yQpwwzCgSBRw==", + "version": "3.12.2", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.12.2.tgz", + "integrity": "sha512-L1Safnhra3tX/oJK5kYHaWmLEBJi1irASwewzY3taX5ibyXyMkkSDZlq01qigjryOBwrXSdFgTiZ3ryzSNeu7Q==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/types": "3.6.0", + "@shikijs/types": "3.12.2", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.5" } }, "node_modules/@shikijs/core/node_modules/@shikijs/types": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.6.0.tgz", - "integrity": "sha512-cLWFiToxYu0aAzJqhXTQsFiJRTFDAGl93IrMSBNaGSzs7ixkLfdG6pH11HipuWFGW5vyx4X47W8HDQ7eSrmBUg==", + "version": "3.12.2", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.12.2.tgz", + "integrity": "sha512-K5UIBzxCyv0YoxN3LMrKB9zuhp1bV+LgewxuVwHdl4Gz5oePoUFrr9EfgJlGlDeXCU1b/yhdnXeuRvAnz8HN8Q==", "dev": true, "license": "MIT", "dependencies": { @@ -5799,21 +5870,21 @@ } }, "node_modules/@shikijs/engine-javascript": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.6.0.tgz", - "integrity": "sha512-7YnLhZG/TU05IHMG14QaLvTW/9WiK8SEYafceccHUSXs2Qr5vJibUwsDfXDLmRi0zHdzsxrGKpSX6hnqe0k8nA==", + "version": "3.12.2", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.12.2.tgz", + "integrity": "sha512-Nm3/azSsaVS7hk6EwtHEnTythjQfwvrO5tKqMlaH9TwG1P+PNaR8M0EAKZ+GaH2DFwvcr4iSfTveyxMIvXEHMw==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/types": "3.6.0", + "@shikijs/types": "3.12.2", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.3" } }, "node_modules/@shikijs/engine-javascript/node_modules/@shikijs/types": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.6.0.tgz", - "integrity": "sha512-cLWFiToxYu0aAzJqhXTQsFiJRTFDAGl93IrMSBNaGSzs7ixkLfdG6pH11HipuWFGW5vyx4X47W8HDQ7eSrmBUg==", + "version": "3.12.2", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.12.2.tgz", + "integrity": "sha512-K5UIBzxCyv0YoxN3LMrKB9zuhp1bV+LgewxuVwHdl4Gz5oePoUFrr9EfgJlGlDeXCU1b/yhdnXeuRvAnz8HN8Q==", "dev": true, "license": "MIT", "dependencies": { @@ -5833,19 +5904,19 @@ } }, "node_modules/@shikijs/langs": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.6.0.tgz", - "integrity": "sha512-IdZkQJaLBu1LCYCwkr30hNuSDfllOT8RWYVZK1tD2J03DkiagYKRxj/pDSl8Didml3xxuyzUjgtioInwEQM/TA==", + "version": "3.12.2", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.12.2.tgz", + "integrity": "sha512-bVx5PfuZHDSHoBal+KzJZGheFuyH4qwwcwG/n+MsWno5cTlKmaNtTsGzJpHYQ8YPbB5BdEdKU1rga5/6JGY8ww==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/types": "3.6.0" + "@shikijs/types": "3.12.2" } }, "node_modules/@shikijs/langs/node_modules/@shikijs/types": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.6.0.tgz", - "integrity": "sha512-cLWFiToxYu0aAzJqhXTQsFiJRTFDAGl93IrMSBNaGSzs7ixkLfdG6pH11HipuWFGW5vyx4X47W8HDQ7eSrmBUg==", + "version": "3.12.2", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.12.2.tgz", + "integrity": "sha512-K5UIBzxCyv0YoxN3LMrKB9zuhp1bV+LgewxuVwHdl4Gz5oePoUFrr9EfgJlGlDeXCU1b/yhdnXeuRvAnz8HN8Q==", "dev": true, "license": "MIT", "dependencies": { @@ -5854,19 +5925,19 @@ } }, "node_modules/@shikijs/themes": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.6.0.tgz", - "integrity": "sha512-Fq2j4nWr1DF4drvmhqKq8x5vVQ27VncF8XZMBuHuQMZvUSS3NBgpqfwz/FoGe36+W6PvniZ1yDlg2d4kmYDU6w==", + "version": "3.12.2", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.12.2.tgz", + "integrity": "sha512-fTR3QAgnwYpfGczpIbzPjlRnxyONJOerguQv1iwpyQZ9QXX4qy/XFQqXlf17XTsorxnHoJGbH/LXBvwtqDsF5A==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/types": "3.6.0" + "@shikijs/types": "3.12.2" } }, "node_modules/@shikijs/themes/node_modules/@shikijs/types": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.6.0.tgz", - "integrity": "sha512-cLWFiToxYu0aAzJqhXTQsFiJRTFDAGl93IrMSBNaGSzs7ixkLfdG6pH11HipuWFGW5vyx4X47W8HDQ7eSrmBUg==", + "version": "3.12.2", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.12.2.tgz", + "integrity": "sha512-K5UIBzxCyv0YoxN3LMrKB9zuhp1bV+LgewxuVwHdl4Gz5oePoUFrr9EfgJlGlDeXCU1b/yhdnXeuRvAnz8HN8Q==", "dev": true, "license": "MIT", "dependencies": { @@ -7098,72 +7169,73 @@ } }, "node_modules/astro": { - "version": "5.9.4", - "resolved": "https://registry.npmjs.org/astro/-/astro-5.9.4.tgz", - "integrity": "sha512-AEulm16C9IijMYrFb3VIFx9z17p/wfDSHUHdbbvSEX+rBca64xV+f67tnsql3s4CE8u2cwYpdX+5yH7l53W4iA==", + "version": "5.13.8", + "resolved": "https://registry.npmjs.org/astro/-/astro-5.13.8.tgz", + "integrity": "sha512-SNURCAlfL4Z2ylF3NMmNk/s3RnSDSolXALXtH0gsN8hFZ7oppnF0sXVQLAGAxnzADemfRp3/9G58EALZ36qUdA==", "dev": true, "license": "MIT", "dependencies": { "@astrojs/compiler": "^2.12.2", - "@astrojs/internal-helpers": "0.6.1", - "@astrojs/markdown-remark": "6.3.2", + "@astrojs/internal-helpers": "0.7.2", + "@astrojs/markdown-remark": "6.3.6", "@astrojs/telemetry": "3.3.0", "@capsizecss/unpack": "^2.4.0", "@oslojs/encoding": "^1.1.0", - "@rollup/pluginutils": "^5.1.4", - "acorn": "^8.14.1", + "@rollup/pluginutils": "^5.2.0", + "acorn": "^8.15.0", "aria-query": "^5.3.2", "axobject-query": "^4.1.0", "boxen": "8.0.1", - "ci-info": "^4.2.0", + "ci-info": "^4.3.0", "clsx": "^2.1.1", "common-ancestor-path": "^1.0.1", "cookie": "^1.0.2", "cssesc": "^3.0.0", - "debug": "^4.4.0", + "debug": "^4.4.1", "deterministic-object-hash": "^2.0.2", - "devalue": "^5.1.1", + "devalue": "^5.3.2", "diff": "^5.2.0", "dlv": "^1.1.3", "dset": "^3.1.4", - "es-module-lexer": "^1.6.0", + "es-module-lexer": "^1.7.0", "esbuild": "^0.25.0", "estree-walker": "^3.0.3", "flattie": "^1.1.1", "fontace": "~0.3.0", "github-slugger": "^2.0.0", "html-escaper": "3.0.3", - "http-cache-semantics": "^4.1.1", - "import-meta-resolve": "^4.1.0", + "http-cache-semantics": "^4.2.0", + "import-meta-resolve": "^4.2.0", "js-yaml": "^4.1.0", "kleur": "^4.1.5", - "magic-string": "^0.30.17", + "magic-string": "^0.30.18", "magicast": "^0.3.5", "mrmime": "^2.0.1", "neotraverse": "^0.6.18", "p-limit": "^6.2.0", "p-queue": "^8.1.0", - "package-manager-detector": "^1.1.0", - "picomatch": "^4.0.2", + "package-manager-detector": "^1.3.0", + "picomatch": "^4.0.3", "prompts": "^2.4.2", "rehype": "^13.0.2", - "semver": "^7.7.1", - "shiki": "^3.2.1", + "semver": "^7.7.2", + "shiki": "^3.12.0", + "smol-toml": "^1.4.2", "tinyexec": "^0.3.2", - "tinyglobby": "^0.2.12", - "tsconfck": "^3.1.5", + "tinyglobby": "^0.2.14", + "tsconfck": "^3.1.6", "ultrahtml": "^1.6.0", - "unifont": "~0.5.0", + "unifont": "~0.5.2", "unist-util-visit": "^5.0.0", - "unstorage": "^1.15.0", + "unstorage": "^1.17.0", "vfile": "^6.0.3", - "vite": "^6.3.4", - "vitefu": "^1.0.6", + "vite": "^6.3.6", + "vitefu": "^1.1.1", "xxhash-wasm": "^1.1.0", "yargs-parser": "^21.1.1", - "yocto-spinner": "^0.2.1", - "zod": "^3.24.2", - "zod-to-json-schema": "^3.24.5", + "yocto-spinner": "^0.2.3", + "zod": "^3.25.76", + "zod-to-json-schema": "^3.24.6", "zod-to-ts": "^1.2.0" }, "bin": { @@ -7179,7 +7251,7 @@ "url": "https://opencollective.com/astrodotbuild" }, "optionalDependencies": { - "sharp": "^0.33.3" + "sharp": "^0.34.0" } }, "node_modules/astro-breadcrumbs": { @@ -7305,9 +7377,9 @@ } }, "node_modules/astro/node_modules/ci-info": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", - "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", + "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", "dev": true, "funding": [ { @@ -7377,6 +7449,16 @@ "dev": true, "license": "MIT" }, + "node_modules/astro/node_modules/magic-string": { + "version": "0.30.19", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.19.tgz", + "integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, "node_modules/astro/node_modules/p-limit": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-6.2.0.tgz", @@ -8766,21 +8848,6 @@ "node": ">=6" } }, - "node_modules/color": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" - }, - "engines": { - "node": ">=12.5.0" - } - }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -8801,18 +8868,6 @@ "dev": true, "license": "MIT" }, - "node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, "node_modules/color-support": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", @@ -9761,9 +9816,9 @@ } }, "node_modules/detect-libc": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", - "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.0.tgz", + "integrity": "sha512-vEtk+OcP7VBRtQZ1EJ3bdgzSfBjgnEalLTp5zjJrS+2Z1w2KZly4SBdac/WDU3hhsNAZ9E8SC96ME4Ey8MZ7cg==", "dev": true, "license": "Apache-2.0", "optional": true, @@ -9785,9 +9840,9 @@ } }, "node_modules/devalue": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.1.1.tgz", - "integrity": "sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.3.2.tgz", + "integrity": "sha512-UDsjUbpQn9kvm68slnrs+mfxwFkIflOhkanmyabZ8zOYk8SMEIbJ3TK+88g70hSIeytu4y18f0z/hYHMTrXIWw==", "dev": true, "license": "MIT" }, @@ -12877,18 +12932,18 @@ } }, "node_modules/h3": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.3.tgz", - "integrity": "sha512-z6GknHqyX0h9aQaTx22VZDf6QyZn+0Nh+Ym8O/u0SGSkyF5cuTJYKlc8MkzW3Nzf9LE1ivcpmYC3FUGpywhuUQ==", + "version": "1.15.4", + "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.4.tgz", + "integrity": "sha512-z5cFQWDffyOe4vQ9xIqNfCZdV4p//vy6fBnr8Q1AWnVZ0teurKMG66rLj++TKwKPUP3u7iMUvrvKaEUiQw2QWQ==", "dev": true, "license": "MIT", "dependencies": { "cookie-es": "^1.2.2", - "crossws": "^0.3.4", + "crossws": "^0.3.5", "defu": "^6.1.4", "destr": "^2.0.5", "iron-webcrypto": "^1.2.1", - "node-mock-http": "^1.0.0", + "node-mock-http": "^1.0.2", "radix3": "^1.1.2", "ufo": "^1.6.1", "uncrypto": "^0.1.3" @@ -13615,9 +13670,9 @@ "license": "Apache-2.0" }, "node_modules/igniteui-sassdoc-theme": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/igniteui-sassdoc-theme/-/igniteui-sassdoc-theme-2.0.2.tgz", - "integrity": "sha512-N+l1wPAYJZou60dE0f6UE5fFwfD4Yr0/LGYZVqfJ5eOvOP9+4Whv9LHT9AROfhJaA0a1+5STab50iL1+R7wgCg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/igniteui-sassdoc-theme/-/igniteui-sassdoc-theme-2.1.0.tgz", + "integrity": "sha512-+g4AIUvyQIxUWI232ntVMFY/FIEjFdERA2sNb2Ls+oesy1CAUMUtIqml8p5n64gSvKpYInI2L4CvyGJihE7Ccg==", "dev": true, "license": "MIT", "dependencies": { @@ -13633,9 +13688,9 @@ } }, "node_modules/igniteui-theming": { - "version": "20.0.0", - "resolved": "https://registry.npmjs.org/igniteui-theming/-/igniteui-theming-20.0.0.tgz", - "integrity": "sha512-g+pxAskmX1g0wlwaO0MPcT8sMTbr3rzSEOJRWg26FBKcVE09cxPEbX2Vl9k7LdbBc5VdDoiAgsI9yvZhAUM0Xg==", + "version": "21.0.2", + "resolved": "https://registry.npmjs.org/igniteui-theming/-/igniteui-theming-21.0.2.tgz", + "integrity": "sha512-RXs8b3PThVlS1FhLeUT9TlLMcPoNAiwJm/L+jHU7jrwsgZU7gGjipjEbQQRe97AURyTxgXKiC4M8CAuUilWQ2A==", "license": "MIT" }, "node_modules/igniteui-trial-watermark": { @@ -13735,9 +13790,9 @@ } }, "node_modules/import-meta-resolve": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", - "integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz", + "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==", "dev": true, "license": "MIT", "funding": { @@ -17818,9 +17873,9 @@ } }, "node_modules/node-fetch-native": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.6.tgz", - "integrity": "sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ==", + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", + "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==", "dev": true, "license": "MIT" }, @@ -17972,9 +18027,9 @@ } }, "node_modules/node-mock-http": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-mock-http/-/node-mock-http-1.0.0.tgz", - "integrity": "sha512-0uGYQ1WQL1M5kKvGRXWQ3uZCHtLTO8hln3oBjIusM75WoesZ909uQJs/Hb946i2SS+Gsrhkaa6iAO17jRIv6DQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/node-mock-http/-/node-mock-http-1.0.3.tgz", + "integrity": "sha512-jN8dK25fsfnMrVsEhluUTPkBFY+6ybu7jSB1n+ri/vOGjJxU8J9CZhpSGkHXSkFjtUhbmoncG/YG9ta5Ludqog==", "dev": true, "license": "MIT" }, @@ -22190,17 +22245,17 @@ "license": "ISC" }, "node_modules/sharp": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz", - "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==", + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.4.tgz", + "integrity": "sha512-FUH39xp3SBPnxWvd5iib1X8XY7J0K0X7d93sie9CJg2PO8/7gmg89Nve6OjItK53/MlAushNNxteBYfM6DEuoA==", "dev": true, "hasInstallScript": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "color": "^4.2.3", - "detect-libc": "^2.0.3", - "semver": "^7.6.3" + "@img/colour": "^1.0.0", + "detect-libc": "^2.1.0", + "semver": "^7.7.2" }, "engines": { "node": "^18.17.0 || ^20.3.0 || >=21.0.0" @@ -22209,25 +22264,28 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-darwin-arm64": "0.33.5", - "@img/sharp-darwin-x64": "0.33.5", - "@img/sharp-libvips-darwin-arm64": "1.0.4", - "@img/sharp-libvips-darwin-x64": "1.0.4", - "@img/sharp-libvips-linux-arm": "1.0.5", - "@img/sharp-libvips-linux-arm64": "1.0.4", - "@img/sharp-libvips-linux-s390x": "1.0.4", - "@img/sharp-libvips-linux-x64": "1.0.4", - "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", - "@img/sharp-libvips-linuxmusl-x64": "1.0.4", - "@img/sharp-linux-arm": "0.33.5", - "@img/sharp-linux-arm64": "0.33.5", - "@img/sharp-linux-s390x": "0.33.5", - "@img/sharp-linux-x64": "0.33.5", - "@img/sharp-linuxmusl-arm64": "0.33.5", - "@img/sharp-linuxmusl-x64": "0.33.5", - "@img/sharp-wasm32": "0.33.5", - "@img/sharp-win32-ia32": "0.33.5", - "@img/sharp-win32-x64": "0.33.5" + "@img/sharp-darwin-arm64": "0.34.4", + "@img/sharp-darwin-x64": "0.34.4", + "@img/sharp-libvips-darwin-arm64": "1.2.3", + "@img/sharp-libvips-darwin-x64": "1.2.3", + "@img/sharp-libvips-linux-arm": "1.2.3", + "@img/sharp-libvips-linux-arm64": "1.2.3", + "@img/sharp-libvips-linux-ppc64": "1.2.3", + "@img/sharp-libvips-linux-s390x": "1.2.3", + "@img/sharp-libvips-linux-x64": "1.2.3", + "@img/sharp-libvips-linuxmusl-arm64": "1.2.3", + "@img/sharp-libvips-linuxmusl-x64": "1.2.3", + "@img/sharp-linux-arm": "0.34.4", + "@img/sharp-linux-arm64": "0.34.4", + "@img/sharp-linux-ppc64": "0.34.4", + "@img/sharp-linux-s390x": "0.34.4", + "@img/sharp-linux-x64": "0.34.4", + "@img/sharp-linuxmusl-arm64": "0.34.4", + "@img/sharp-linuxmusl-x64": "0.34.4", + "@img/sharp-wasm32": "0.34.4", + "@img/sharp-win32-arm64": "0.34.4", + "@img/sharp-win32-ia32": "0.34.4", + "@img/sharp-win32-x64": "0.34.4" } }, "node_modules/shebang-command": { @@ -22254,37 +22312,37 @@ } }, "node_modules/shiki": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.6.0.tgz", - "integrity": "sha512-tKn/Y0MGBTffQoklaATXmTqDU02zx8NYBGQ+F6gy87/YjKbizcLd+Cybh/0ZtOBX9r1NEnAy/GTRDKtOsc1L9w==", + "version": "3.12.2", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.12.2.tgz", + "integrity": "sha512-uIrKI+f9IPz1zDT+GMz+0RjzKJiijVr6WDWm9Pe3NNY6QigKCfifCEv9v9R2mDASKKjzjQ2QpFLcxaR3iHSnMA==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/core": "3.6.0", - "@shikijs/engine-javascript": "3.6.0", - "@shikijs/engine-oniguruma": "3.6.0", - "@shikijs/langs": "3.6.0", - "@shikijs/themes": "3.6.0", - "@shikijs/types": "3.6.0", + "@shikijs/core": "3.12.2", + "@shikijs/engine-javascript": "3.12.2", + "@shikijs/engine-oniguruma": "3.12.2", + "@shikijs/langs": "3.12.2", + "@shikijs/themes": "3.12.2", + "@shikijs/types": "3.12.2", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "node_modules/shiki/node_modules/@shikijs/engine-oniguruma": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.6.0.tgz", - "integrity": "sha512-nmOhIZ9yT3Grd+2plmW/d8+vZ2pcQmo/UnVwXMUXAKTXdi+LK0S08Ancrz5tQQPkxvjBalpMW2aKvwXfelauvA==", + "version": "3.12.2", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.12.2.tgz", + "integrity": "sha512-hozwnFHsLvujK4/CPVHNo3Bcg2EsnG8krI/ZQ2FlBlCRpPZW4XAEQmEwqegJsypsTAN9ehu2tEYe30lYKSZW/w==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/types": "3.6.0", + "@shikijs/types": "3.12.2", "@shikijs/vscode-textmate": "^10.0.2" } }, "node_modules/shiki/node_modules/@shikijs/types": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.6.0.tgz", - "integrity": "sha512-cLWFiToxYu0aAzJqhXTQsFiJRTFDAGl93IrMSBNaGSzs7ixkLfdG6pH11HipuWFGW5vyx4X47W8HDQ7eSrmBUg==", + "version": "3.12.2", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.12.2.tgz", + "integrity": "sha512-K5UIBzxCyv0YoxN3LMrKB9zuhp1bV+LgewxuVwHdl4Gz5oePoUFrr9EfgJlGlDeXCU1b/yhdnXeuRvAnz8HN8Q==", "dev": true, "license": "MIT", "dependencies": { @@ -22395,25 +22453,6 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true, - "license": "MIT", - "optional": true - }, "node_modules/sirv": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.1.tgz", @@ -22488,9 +22527,9 @@ } }, "node_modules/smol-toml": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.3.4.tgz", - "integrity": "sha512-UOPtVuYkzYGee0Bd2Szz8d2G3RfMfJ2t3qVdZUAozZyAk+a0Sxa+QKix0YCwjL/A1RR0ar44nCxaoN9FxdJGwA==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.4.2.tgz", + "integrity": "sha512-rInDH6lCNiEyn3+hH8KVGFdbjc099j47+OSgbMrfDYX1CmXLfdKd7qi6IfcWj2wFxvSVkuI46M+wPGYfEOEj6g==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -23587,9 +23626,9 @@ } }, "node_modules/tar-fs": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.9.tgz", - "integrity": "sha512-XF4w9Xp+ZQgifKakjZYmFdkLoSWd34VGKcsTCwlNWM7QG3ZbaxnTsaBwnjFZqHRf/rROxaR8rXnbtwdvaDI+lA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.1.1.tgz", + "integrity": "sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==", "dev": true, "license": "MIT", "dependencies": { @@ -24353,13 +24392,14 @@ } }, "node_modules/unifont": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/unifont/-/unifont-0.5.0.tgz", - "integrity": "sha512-4DueXMP5Hy4n607sh+vJ+rajoLu778aU3GzqeTCqsD/EaUcvqZT9wPC8kgK6Vjh22ZskrxyRCR71FwNOaYn6jA==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/unifont/-/unifont-0.5.2.tgz", + "integrity": "sha512-LzR4WUqzH9ILFvjLAUU7dK3Lnou/qd5kD+IakBtBK4S15/+x2y9VX+DcWQv6s551R6W+vzwgVS6tFg3XggGBgg==", "dev": true, "license": "MIT", "dependencies": { "css-tree": "^3.0.0", + "ofetch": "^1.4.1", "ohash": "^2.0.0" } }, @@ -24565,18 +24605,18 @@ } }, "node_modules/unstorage": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.16.0.tgz", - "integrity": "sha512-WQ37/H5A7LcRPWfYOrDa1Ys02xAbpPJq6q5GkO88FBXVSQzHd7+BjEwfRqyaSWCv9MbsJy058GWjjPjcJ16GGA==", + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.17.1.tgz", + "integrity": "sha512-KKGwRTT0iVBCErKemkJCLs7JdxNVfqTPc/85ae1XES0+bsHbc/sFBfVi5kJp156cc51BHinIH2l3k0EZ24vOBQ==", "dev": true, "license": "MIT", "dependencies": { "anymatch": "^3.1.3", "chokidar": "^4.0.3", "destr": "^2.0.5", - "h3": "^1.15.2", + "h3": "^1.15.4", "lru-cache": "^10.4.3", - "node-fetch-native": "^1.6.6", + "node-fetch-native": "^1.6.7", "ofetch": "^1.4.1", "ufo": "^1.6.1" }, @@ -24589,10 +24629,11 @@ "@azure/storage-blob": "^12.26.0", "@capacitor/preferences": "^6.0.3 || ^7.0.0", "@deno/kv": ">=0.9.0", - "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0", + "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", "@planetscale/database": "^1.19.0", "@upstash/redis": "^1.34.3", "@vercel/blob": ">=0.27.1", + "@vercel/functions": "^2.2.12 || ^3.0.0", "@vercel/kv": "^1.0.1", "aws4fetch": "^1.0.20", "db0": ">=0.2.1", @@ -24637,6 +24678,9 @@ "@vercel/blob": { "optional": true }, + "@vercel/functions": { + "optional": true + }, "@vercel/kv": { "optional": true }, @@ -25204,9 +25248,9 @@ } }, "node_modules/vite": { - "version": "6.3.5", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", - "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.6.tgz", + "integrity": "sha512-0msEVHJEScQbhkbVTb/4iHZdJ6SXp/AvxL2sjwYQFfBqleHtnCqv1J3sa9zbWz/6kW1m9Tfzn92vW+kZ1WV6QA==", "dev": true, "license": "MIT", "dependencies": { @@ -25279,17 +25323,18 @@ } }, "node_modules/vitefu": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.0.6.tgz", - "integrity": "sha512-+Rex1GlappUyNN6UfwbVZne/9cYC4+R2XDk9xkNXBKMw6HQagdX9PgZ8V2v1WUSK1wfBLp7qbI1+XSNIlB1xmA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.1.tgz", + "integrity": "sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==", "dev": true, "license": "MIT", "workspaces": [ "tests/deps/*", - "tests/projects/*" + "tests/projects/*", + "tests/projects/workspace/packages/*" ], "peerDependencies": { - "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0" + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0" }, "peerDependenciesMeta": { "vite": { @@ -25794,9 +25839,9 @@ } }, "node_modules/zod-to-json-schema": { - "version": "3.24.5", - "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.5.tgz", - "integrity": "sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==", + "version": "3.24.6", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.6.tgz", + "integrity": "sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==", "dev": true, "license": "ISC", "peerDependencies": { diff --git a/package.json b/package.json index db833f8676f..62d2809bc8b 100644 --- a/package.json +++ b/package.json @@ -75,7 +75,7 @@ "@types/source-map": "0.5.2", "express": "^5.1.0", "fflate": "^0.8.1", - "igniteui-theming": "^20.0.0", + "igniteui-theming": "^21.0.2", "igniteui-trial-watermark": "^3.1.0", "lodash-es": "^4.17.21", "rxjs": "^7.8.2", @@ -120,7 +120,7 @@ "hammerjs": "^2.0.8", "ig-typedoc-theme": "^6.0.0", "igniteui-dockmanager": "^1.17.0", - "igniteui-sassdoc-theme": "^2.0.2", + "igniteui-sassdoc-theme": "^2.1.0", "igniteui-webcomponents": "6.2.1", "jasmine": "^5.6.0", "jasmine-core": "^5.6.0", diff --git a/projects/igniteui-angular-elements/src/app/custom-strategy.spec.ts b/projects/igniteui-angular-elements/src/app/custom-strategy.spec.ts index 1b5b3795f02..2e2f1a45c4c 100644 --- a/projects/igniteui-angular-elements/src/app/custom-strategy.spec.ts +++ b/projects/igniteui-angular-elements/src/app/custom-strategy.spec.ts @@ -49,14 +49,14 @@ describe('Elements: ', () => { gridEl.appendChild(columnEl); // TODO: Better way to wait - potentially expose the queue or observable for update on the strategy - await firstValueFrom(timer(10 /* SCHEDULE_DELAY */ * 2)); + await firstValueFrom(timer(10 /* SCHEDULE_DELAY */ * 4)); const gridComponent = (await gridEl.ngElementStrategy[ComponentRefKey]).instance as IgxGridComponent; const columnComponent = (await columnEl.ngElementStrategy[ComponentRefKey]).instance as IgxColumnComponent; expect(gridComponent.columnList.toArray()).toContain(columnComponent); columnEl.remove(); - await firstValueFrom(timer(10 /* SCHEDULE_DELAY: DESTROY + QUERY */ * 3)); + await firstValueFrom(timer(10 /* SCHEDULE_DELAY: DESTROY + QUERY */ * 4)); expect(gridComponent.columnList.toArray()).toEqual([]); }); diff --git a/projects/igniteui-angular-elements/src/public_api.ts b/projects/igniteui-angular-elements/src/public_api.ts index aa796e8c5b2..c026ae7d4fc 100644 --- a/projects/igniteui-angular-elements/src/public_api.ts +++ b/projects/igniteui-angular-elements/src/public_api.ts @@ -12,7 +12,7 @@ import { IgxPivotDateDimension } from 'projects/igniteui-angular/src/lib/grids/p import { PivotDimensionType } from 'projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-grid.interface'; import { IgxDateSummaryOperand, IgxNumberSummaryOperand, IgxSummaryOperand, IgxTimeSummaryOperand } from 'projects/igniteui-angular/src/lib/grids/summaries/grid-summary'; import { HorizontalAlignment, VerticalAlignment } from 'projects/igniteui-angular/src/lib/services/overlay/utilities'; -import { ByLevelTreeGridMergeStrategy } from 'projects/igniteui-angular/src/lib/data-operations/merge-strategy'; +import { ByLevelTreeGridMergeStrategy, DefaultTreeGridMergeStrategy } from 'projects/igniteui-angular/src/lib/data-operations/merge-strategy'; /** Export Public API, TODO: reorganize, Generate all w/ renames? */ export { @@ -35,6 +35,7 @@ export { NoopSortingStrategy as IgcNoopSortingStrategy, NoopFilteringStrategy as IgcNoopFilteringStrategy, + DefaultTreeGridMergeStrategy as IgcDefaultTreeGridMergeStrategy, ByLevelTreeGridMergeStrategy as IgcByLevelTreeGridMergeStrategy, // Pivot API diff --git a/projects/igniteui-angular-elements/src/themes/_util.scss b/projects/igniteui-angular-elements/src/themes/_util.scss index 78b723451de..8668c7dfd4f 100644 --- a/projects/igniteui-angular-elements/src/themes/_util.scss +++ b/projects/igniteui-angular-elements/src/themes/_util.scss @@ -72,9 +72,8 @@ $elements-selector-prefix: 'igc'; /// @return {String} - Updated selector(s) with `igc-` prefixed equivalents @function updateSelectors($selector) { $result: (); - $selectors: string.split($selector, ", "); - @each $sel in $selectors { + @each $sel in $selector { $result: list.append($result, $sel, comma); @if string.index($sel, 'igx-') == 1 { diff --git a/projects/igniteui-angular/package.json b/projects/igniteui-angular/package.json index 894e9f0a680..c051bc13e2e 100644 --- a/projects/igniteui-angular/package.json +++ b/projects/igniteui-angular/package.json @@ -73,7 +73,7 @@ "tslib": "^2.3.0", "igniteui-trial-watermark": "^3.1.0", "lodash-es": "^4.17.21", - "igniteui-theming": "^20.0.0", + "igniteui-theming": "^21.0.2", "@igniteui/material-icons-extended": "^3.1.0" }, "peerDependencies": { diff --git a/projects/igniteui-angular/src/lib/core/styles/components/avatar/_avatar-theme.scss b/projects/igniteui-angular/src/lib/core/styles/components/avatar/_avatar-theme.scss index eb7e5faecc7..c01b4128d44 100644 --- a/projects/igniteui-angular/src/lib/core/styles/components/avatar/_avatar-theme.scss +++ b/projects/igniteui-angular/src/lib/core/styles/components/avatar/_avatar-theme.scss @@ -6,7 +6,7 @@ /// @see {mixin} css-vars /// @param {Map} $theme - The theme used to style the component. @mixin avatar($theme) { - @include css-vars($theme, 'igx-avatar'); + @include css-vars($theme); $variant: map.get($theme, '_meta', 'theme'); diff --git a/projects/igniteui-angular/src/lib/core/styles/components/badge/_badge-theme.scss b/projects/igniteui-angular/src/lib/core/styles/components/badge/_badge-theme.scss index 02a91673ef0..2e82deb4545 100644 --- a/projects/igniteui-angular/src/lib/core/styles/components/badge/_badge-theme.scss +++ b/projects/igniteui-angular/src/lib/core/styles/components/badge/_badge-theme.scss @@ -5,7 +5,7 @@ /// @see {mixin} css-vars /// @param {Map} $theme - The theme used to style the component. @mixin badge($theme) { - @include css-vars($theme, 'igx-badge'); + @include css-vars($theme); $variant: map.get($theme, '_meta', 'theme'); diff --git a/projects/igniteui-angular/src/lib/core/styles/components/banner/_banner-theme.scss b/projects/igniteui-angular/src/lib/core/styles/components/banner/_banner-theme.scss index 85eab0cc400..dfb88eff7af 100644 --- a/projects/igniteui-angular/src/lib/core/styles/components/banner/_banner-theme.scss +++ b/projects/igniteui-angular/src/lib/core/styles/components/banner/_banner-theme.scss @@ -5,7 +5,7 @@ /// @see {mixin} css-vars /// @param {Map} $theme - The theme used to style the component. @mixin banner($theme) { - @include css-vars($theme, 'igx-banner, .igx-banner'); + @include css-vars($theme); $variant: map.get($theme, '_meta', 'theme'); %igx-banner-host { diff --git a/projects/igniteui-angular/src/lib/core/styles/components/bottom-nav/_bottom-nav-theme.scss b/projects/igniteui-angular/src/lib/core/styles/components/bottom-nav/_bottom-nav-theme.scss index ab862411b98..6f21583c88e 100644 --- a/projects/igniteui-angular/src/lib/core/styles/components/bottom-nav/_bottom-nav-theme.scss +++ b/projects/igniteui-angular/src/lib/core/styles/components/bottom-nav/_bottom-nav-theme.scss @@ -6,7 +6,7 @@ /// @see {mixin} css-vars /// @param {Map} $theme - The theme used to style the component. @mixin bottom-nav($theme) { - @include css-vars($theme, 'igx-bottom-nav'); + @include css-vars($theme); $variant: map.get($theme, '_meta', 'theme'); $menu-height: rem(56px); diff --git a/projects/igniteui-angular/src/lib/core/styles/components/button-group/_button-group-theme.scss b/projects/igniteui-angular/src/lib/core/styles/components/button-group/_button-group-theme.scss index 38959c2b0af..b942c0e20a8 100644 --- a/projects/igniteui-angular/src/lib/core/styles/components/button-group/_button-group-theme.scss +++ b/projects/igniteui-angular/src/lib/core/styles/components/button-group/_button-group-theme.scss @@ -6,7 +6,7 @@ /// @see {mixin} css-vars /// @param {Map} $theme - The theme used to style the component. @mixin button-group($theme) { - @include css-vars($theme, 'igx-buttongroup'); + @include css-vars($theme); $group-item-border-thickness: rem(1px); $group-items-margin: rem(10px, 16px); @@ -65,11 +65,6 @@ &[igxButton] { border-radius: 0; border-color: var-get($theme, 'item-border-color'); - - @if $bootstrap-theme { - margin: 0 !important; - border: none; - } } igx-icon { diff --git a/projects/igniteui-angular/src/lib/core/styles/components/calendar/_calendar-theme.scss b/projects/igniteui-angular/src/lib/core/styles/components/calendar/_calendar-theme.scss index e1dcfd33250..14004190d7e 100644 --- a/projects/igniteui-angular/src/lib/core/styles/components/calendar/_calendar-theme.scss +++ b/projects/igniteui-angular/src/lib/core/styles/components/calendar/_calendar-theme.scss @@ -6,7 +6,7 @@ /// @see {mixin} css-vars /// @param {Map} $theme - The theme used to style the component. @mixin calendar($theme) { - @include css-vars($theme, 'igx-calendar, .igx-days-view--standalone, .igx-calendar-view--standalone, .igx-date-picker, .igx-month-picker'); + @include css-vars($theme); $variant: map.get($theme, '_meta', 'theme'); $bootstrap-theme: $variant == 'bootstrap'; diff --git a/projects/igniteui-angular/src/lib/core/styles/components/card/_card-theme.scss b/projects/igniteui-angular/src/lib/core/styles/components/card/_card-theme.scss index dd3256888a9..bcaa61c6e4c 100644 --- a/projects/igniteui-angular/src/lib/core/styles/components/card/_card-theme.scss +++ b/projects/igniteui-angular/src/lib/core/styles/components/card/_card-theme.scss @@ -1,12 +1,11 @@ @use 'sass:map'; @use '../../base' as *; -/// Card Component /// @deprecated Use the `css-vars` mixin instead. /// @see {mixin} css-vars /// @param {Map} $theme - The theme used to style the component. @mixin card($theme) { - @include css-vars($theme, 'igx-card'); + @include css-vars($theme); $variant: map.get($theme, '_meta', 'theme'); $not-material-theme: $variant != 'material'; @@ -29,10 +28,6 @@ &:hover { box-shadow: none; } - - igx-avatar { - --ig-size: #{if($variant == 'indigo', 3, 1)}; - } } %igx-card--elevated { @@ -93,6 +88,10 @@ margin-block: auto; } + igx-avatar { + --ig-size: #{if($variant == 'indigo', 3, 1)}; + } + &:empty { display: none; } @@ -220,14 +219,9 @@ display: flex; align-items: center; order: 1; - color: var-get($theme, 'actions-text-color'); margin-inline-start: auto; gap: rem(8px); - [igxIconButton] { - color: var-get($theme, 'actions-text-color'); - } - &:empty { display: none; } @@ -239,15 +233,16 @@ order: 0; gap: rem(8px); - [igxIconButton] { - color: var-get($theme, 'actions-text-color'); - } - &:empty { display: none; } } + %igx-card-actions__start, + %igx-card-actions__end { + color: var-get($theme, 'actions-text-color'); + } + %igx-card-actions__start--justify, %igx-card-actions__end--justify { justify-content: space-around; diff --git a/projects/igniteui-angular/src/lib/core/styles/components/carousel/_carousel-theme.scss b/projects/igniteui-angular/src/lib/core/styles/components/carousel/_carousel-theme.scss index 47a43cf5d0a..e3b4e109b69 100644 --- a/projects/igniteui-angular/src/lib/core/styles/components/carousel/_carousel-theme.scss +++ b/projects/igniteui-angular/src/lib/core/styles/components/carousel/_carousel-theme.scss @@ -6,7 +6,7 @@ /// @see {mixin} css-vars /// @param {Map} $theme - The theme used to style the component. @mixin carousel($theme) { - @include css-vars($theme, 'igx-carousel'); + @include css-vars($theme); @include scale-in-center(); @include scale-out-center(); diff --git a/projects/igniteui-angular/src/lib/core/styles/components/checkbox/_checkbox-theme.scss b/projects/igniteui-angular/src/lib/core/styles/components/checkbox/_checkbox-theme.scss index 65dbc507c8f..7b4cdd24724 100644 --- a/projects/igniteui-angular/src/lib/core/styles/components/checkbox/_checkbox-theme.scss +++ b/projects/igniteui-angular/src/lib/core/styles/components/checkbox/_checkbox-theme.scss @@ -7,7 +7,7 @@ /// @see {mixin} css-vars /// @param {Map} $theme - The theme used to style the component. @mixin checkbox($theme) { - @include css-vars($theme, 'igx-checkbox'); + @include css-vars($theme); $theme-variant: map.get($theme, '_meta', 'variant'); $variant: map.get($theme, '_meta', 'theme'); $material-theme: $variant == 'material'; diff --git a/projects/igniteui-angular/src/lib/core/styles/components/chip/_chip-theme.scss b/projects/igniteui-angular/src/lib/core/styles/components/chip/_chip-theme.scss index 9eca06c9e60..e17b34ca090 100644 --- a/projects/igniteui-angular/src/lib/core/styles/components/chip/_chip-theme.scss +++ b/projects/igniteui-angular/src/lib/core/styles/components/chip/_chip-theme.scss @@ -6,7 +6,7 @@ /// @see {mixin} css-vars /// @param {Map} $theme - The theme used to style the component. @mixin chip($theme) { - @include css-vars($theme, 'igx-chip, .igx-chip__ghost'); + @include css-vars($theme); $chip-max-width: 32ch; $variant: map.get($theme, '_meta', 'theme'); diff --git a/projects/igniteui-angular/src/lib/core/styles/components/column-actions/_column-actions-theme.scss b/projects/igniteui-angular/src/lib/core/styles/components/column-actions/_column-actions-theme.scss index e232e7576fd..319f935d6b3 100644 --- a/projects/igniteui-angular/src/lib/core/styles/components/column-actions/_column-actions-theme.scss +++ b/projects/igniteui-angular/src/lib/core/styles/components/column-actions/_column-actions-theme.scss @@ -5,7 +5,7 @@ /// @see {mixin} css-vars /// @param {Map} $theme - The theme used to style the component. @mixin column-actions($theme) { - @include css-vars($theme, 'igx-column-actions'); + @include css-vars($theme); $variant: map.get($theme, '_meta', 'theme'); %column-actions-display { diff --git a/projects/igniteui-angular/src/lib/core/styles/components/combo/_combo-theme.scss b/projects/igniteui-angular/src/lib/core/styles/components/combo/_combo-theme.scss index c247a6c3fff..1eb5c643103 100644 --- a/projects/igniteui-angular/src/lib/core/styles/components/combo/_combo-theme.scss +++ b/projects/igniteui-angular/src/lib/core/styles/components/combo/_combo-theme.scss @@ -5,7 +5,7 @@ /// @see {mixin} css-vars /// @param {Map} $theme - The theme used to style the component. @mixin combo($theme) { - @include css-vars($theme, 'igx-combo, igx-simple-combo'); + @include css-vars($theme); $variant: map.get($theme, '_meta', 'theme'); diff --git a/projects/igniteui-angular/src/lib/core/styles/components/date-picker/_date-picker-theme.scss b/projects/igniteui-angular/src/lib/core/styles/components/date-picker/_date-picker-theme.scss index f7dc255abdb..988b39fdde9 100644 --- a/projects/igniteui-angular/src/lib/core/styles/components/date-picker/_date-picker-theme.scss +++ b/projects/igniteui-angular/src/lib/core/styles/components/date-picker/_date-picker-theme.scss @@ -2,13 +2,6 @@ @use '../../base' as *; @use '../../themes/schemas' as *; -//// -/// @group themes -/// @access public -/// @author Simeon Simeonoff -/// @author Marin Popov -//// - /// @deprecated Use the `css-vars` mixin instead. /// @see {mixin} css-vars /// @param {Map} $theme - The calendar theme used to style the component. diff --git a/projects/igniteui-angular/src/lib/core/styles/components/date-range-picker/_date-range-picker-theme.scss b/projects/igniteui-angular/src/lib/core/styles/components/date-range-picker/_date-range-picker-theme.scss index 84ce5c56f44..5cd16765d30 100644 --- a/projects/igniteui-angular/src/lib/core/styles/components/date-range-picker/_date-range-picker-theme.scss +++ b/projects/igniteui-angular/src/lib/core/styles/components/date-range-picker/_date-range-picker-theme.scss @@ -5,7 +5,7 @@ /// @see {mixin} css-vars /// @param {Map} $theme - The theme used to style the component. @mixin date-range-picker($theme) { - @include css-vars($theme, 'igx-date-range-picker'); + @include css-vars($theme); %igx-date-range-picker { display: flex; diff --git a/projects/igniteui-angular/src/lib/core/styles/components/divider/_divider-theme.scss b/projects/igniteui-angular/src/lib/core/styles/components/divider/_divider-theme.scss index c0b2a736f4e..e866e37f92b 100644 --- a/projects/igniteui-angular/src/lib/core/styles/components/divider/_divider-theme.scss +++ b/projects/igniteui-angular/src/lib/core/styles/components/divider/_divider-theme.scss @@ -5,7 +5,7 @@ /// @see {mixin} css-vars /// @param {Map} $theme - The theme used to style the component. @mixin divider($theme) { - @include css-vars($theme, 'igx-divider'); + @include css-vars($theme); $variant: map.get($theme, '_meta', 'theme'); diff --git a/projects/igniteui-angular/src/lib/core/styles/components/dock-manager/_dock-manager-theme.scss b/projects/igniteui-angular/src/lib/core/styles/components/dock-manager/_dock-manager-theme.scss index c8adb9e0b5a..de98af72230 100644 --- a/projects/igniteui-angular/src/lib/core/styles/components/dock-manager/_dock-manager-theme.scss +++ b/projects/igniteui-angular/src/lib/core/styles/components/dock-manager/_dock-manager-theme.scss @@ -5,7 +5,7 @@ /// @see {mixin} css-vars /// @param {Map} $theme - The theme used to style the component. @mixin dock-manager($theme) { - @include css-vars($theme, 'igc-dockmanager'); + @include css-vars($theme); } /// Adds typography styles for the dock manager component. diff --git a/projects/igniteui-angular/src/lib/core/styles/components/expansion-panel/_expansion-panel-theme.scss b/projects/igniteui-angular/src/lib/core/styles/components/expansion-panel/_expansion-panel-theme.scss index 20797fb7f57..fcc8daa06a4 100644 --- a/projects/igniteui-angular/src/lib/core/styles/components/expansion-panel/_expansion-panel-theme.scss +++ b/projects/igniteui-angular/src/lib/core/styles/components/expansion-panel/_expansion-panel-theme.scss @@ -6,7 +6,7 @@ /// @see {mixin} css-vars /// @param {Map} $theme - The theme used to style the component. @mixin expansion-panel($theme) { - @include css-vars($theme, 'igx-expansion-panel'); + @include css-vars($theme); $variant: map.get($theme, '_meta', 'theme'); $panel-padding: pad-block(rem(16px)) pad-inline(rem(24px)); diff --git a/projects/igniteui-angular/src/lib/core/styles/components/grid-toolbar/_grid-toolbar-theme.scss b/projects/igniteui-angular/src/lib/core/styles/components/grid-toolbar/_grid-toolbar-theme.scss index d22d4a0ef0a..dcc63f3d22c 100644 --- a/projects/igniteui-angular/src/lib/core/styles/components/grid-toolbar/_grid-toolbar-theme.scss +++ b/projects/igniteui-angular/src/lib/core/styles/components/grid-toolbar/_grid-toolbar-theme.scss @@ -5,7 +5,7 @@ /// @see {mixin} css-vars /// @param {Map} $theme - The theme used to style the component. @mixin grid-toolbar($theme) { - @include css-vars($theme, 'igx-grid-toolbar, .igx-grid-toolbar__dd-list'); + @include css-vars($theme); $variant: map.get($theme, '_meta', 'theme'); $bootstrap-theme: $variant == 'bootstrap'; diff --git a/projects/igniteui-angular/src/lib/core/styles/components/grid/_excel-filtering-theme.scss b/projects/igniteui-angular/src/lib/core/styles/components/grid/_excel-filtering-theme.scss index 8ef846b74bd..44063a0fbaf 100644 --- a/projects/igniteui-angular/src/lib/core/styles/components/grid/_excel-filtering-theme.scss +++ b/projects/igniteui-angular/src/lib/core/styles/components/grid/_excel-filtering-theme.scss @@ -4,13 +4,6 @@ @use '../button-group/button-group-theme' as *; @use '../tree/tree-theme' as *; -//// -/// @group themes -/// @access private -/// @author Simeon Simeonoff -/// @author Marin Popov -//// - /// @deprecated Use the `css-vars` mixin instead. /// @see {mixin} css-vars /// @param {Map} $theme - The grid theme used to style the component. diff --git a/projects/igniteui-angular/src/lib/core/styles/components/grid/_grid-theme.scss b/projects/igniteui-angular/src/lib/core/styles/components/grid/_grid-theme.scss index 9d2b40109e8..d1f9b070cb3 100644 --- a/projects/igniteui-angular/src/lib/core/styles/components/grid/_grid-theme.scss +++ b/projects/igniteui-angular/src/lib/core/styles/components/grid/_grid-theme.scss @@ -18,8 +18,7 @@ /// @param {Map} $theme - The theme used to style the component. /// @requires {mixin} excel-filtering @mixin grid($theme) { - @include css-vars($theme, 'igx-grid, igx-hierarchical-grid, igx-pivot-grid, igx-tree-grid, igx-advanced-filtering-dialog, igx-grid-excel-style-filtering, .igx-excel-filter__secondary'); - + @include css-vars($theme); @include scale-in-ver-center(); $variant: map.get($theme, '_meta', 'theme'); diff --git a/projects/igniteui-angular/src/lib/core/styles/components/grid/_pivot-data-selector-theme.scss b/projects/igniteui-angular/src/lib/core/styles/components/grid/_pivot-data-selector-theme.scss index 24389731a1d..25e17d6286b 100644 --- a/projects/igniteui-angular/src/lib/core/styles/components/grid/_pivot-data-selector-theme.scss +++ b/projects/igniteui-angular/src/lib/core/styles/components/grid/_pivot-data-selector-theme.scss @@ -3,12 +3,8 @@ @use '../../base' as *; @use '../../themes/schemas' as *; -//// -/// @group themes -/// @access public -/// @author Simeon Simeonoff -//// - +/// @deprecated Use the `css-vars` mixin instead. +/// @see {mixin} css-vars /// @param {Map} $schema [$light-material-schema] - The schema used as basis for styling the component. @function pivot-data-selector-theme( $schema: $light-material-schema, @@ -28,6 +24,7 @@ @return extend($theme, ( name: $name, + selector: $selector, )); } @@ -35,7 +32,8 @@ /// @see {mixin} css-vars /// @param {Map} $theme - The theme used to style the component. @mixin pivot-data-selector($theme) { - @include css-vars($theme, 'igx-pivot-data-selector'); + @include css-vars($theme); + $variant: map.get($theme, '_meta', 'theme'); $chip-height-material: ( diff --git a/projects/igniteui-angular/src/lib/core/styles/components/icon/_icon-theme.scss b/projects/igniteui-angular/src/lib/core/styles/components/icon/_icon-theme.scss index f694a84112f..c4181a79271 100644 --- a/projects/igniteui-angular/src/lib/core/styles/components/icon/_icon-theme.scss +++ b/projects/igniteui-angular/src/lib/core/styles/components/icon/_icon-theme.scss @@ -1,12 +1,12 @@ +// stylelint-disable font-family-no-missing-generic-family-keyword @use 'sass:map'; @use '../../base' as *; -// stylelint-disable font-family-no-missing-generic-family-keyword /// @deprecated Use the `css-vars` mixin instead. /// @see {mixin} css-vars /// @param {Map} $theme - The theme used to style the component. @mixin icon($theme) { - @include css-vars($theme, 'igx-icon'); + @include css-vars($theme); $size: var-get($theme, 'size'); diff --git a/projects/igniteui-angular/src/lib/core/styles/components/input/_input-group-theme.scss b/projects/igniteui-angular/src/lib/core/styles/components/input/_input-group-theme.scss index b4e35a6ec5e..2f84ee71e3d 100644 --- a/projects/igniteui-angular/src/lib/core/styles/components/input/_input-group-theme.scss +++ b/projects/igniteui-angular/src/lib/core/styles/components/input/_input-group-theme.scss @@ -6,10 +6,10 @@ /// @see {mixin} css-vars /// @param {Map} $theme - The theme used to style the component. @mixin input-group($theme) { + @include css-vars($theme); + // The --variant CSS produced by css-vars is needed also // when dynamically switching between the input `type` attribute. - @include css-vars($theme, 'igx-input-group, igx-date-range-start, igx-date-range-end'); - $variant: map.get($theme, '_meta', 'theme'); $transition-timing: .25s $out-cubic; $material-theme: $variant == 'material'; @@ -323,7 +323,7 @@ box-shadow: inset 0 0 0 var(--_fluent-input-border-size) var-get($theme, 'border-color'); } } - + &%form-group-display--box:not(%form-group-display--disabled) { %form-group-bundle { background: var-get($theme, 'box-background-focus'); @@ -1958,7 +1958,7 @@ } } - %form-group-display--invalid:not(%form-group-display--readonly), + %form-group-display--invalid:not(%form-group-display--readonly), %form-group-display--invalid%form-group-display--file { @if $variant != 'indigo' { %form-group-label--error, diff --git a/projects/igniteui-angular/src/lib/core/styles/components/list/_list-theme.scss b/projects/igniteui-angular/src/lib/core/styles/components/list/_list-theme.scss index 1f4eda528e9..c439845c70d 100644 --- a/projects/igniteui-angular/src/lib/core/styles/components/list/_list-theme.scss +++ b/projects/igniteui-angular/src/lib/core/styles/components/list/_list-theme.scss @@ -6,7 +6,7 @@ /// @see {mixin} css-vars /// @param {Map} $theme - The theme used to style the component. @mixin list($theme) { - @include css-vars($theme, 'igx-list'); + @include css-vars($theme); $variant: map.get($theme, '_meta', 'theme'); $bootstrap-theme: $variant == 'bootstrap'; diff --git a/projects/igniteui-angular/src/lib/core/styles/components/navbar/_navbar-theme.scss b/projects/igniteui-angular/src/lib/core/styles/components/navbar/_navbar-theme.scss index 7be6c74e7ca..90bb814dd6d 100644 --- a/projects/igniteui-angular/src/lib/core/styles/components/navbar/_navbar-theme.scss +++ b/projects/igniteui-angular/src/lib/core/styles/components/navbar/_navbar-theme.scss @@ -6,7 +6,7 @@ /// @see {mixin} css-vars /// @param {Map} $theme - The theme used to style the component. @mixin navbar($theme) { - @include css-vars($theme, 'igx-navbar'); + @include css-vars($theme); $variant: map.get($theme, '_meta', 'theme'); $navbar-padding: rem(16px); diff --git a/projects/igniteui-angular/src/lib/core/styles/components/navdrawer/_navdrawer-theme.scss b/projects/igniteui-angular/src/lib/core/styles/components/navdrawer/_navdrawer-theme.scss index f163450bd97..b3f91966295 100644 --- a/projects/igniteui-angular/src/lib/core/styles/components/navdrawer/_navdrawer-theme.scss +++ b/projects/igniteui-angular/src/lib/core/styles/components/navdrawer/_navdrawer-theme.scss @@ -6,7 +6,7 @@ /// @see {mixin} css-vars /// @param {Map} $theme - The theme used to style the component. @mixin navdrawer($theme) { - @include css-vars($theme, 'igx-nav-drawer'); + @include css-vars($theme); $variant: map.get($theme, '_meta', 'theme'); $drawer-icon-size: rem(24px); diff --git a/projects/igniteui-angular/src/lib/core/styles/components/paginator/_paginator-theme.scss b/projects/igniteui-angular/src/lib/core/styles/components/paginator/_paginator-theme.scss index e25f6e678bb..5aeb1c6ed8b 100644 --- a/projects/igniteui-angular/src/lib/core/styles/components/paginator/_paginator-theme.scss +++ b/projects/igniteui-angular/src/lib/core/styles/components/paginator/_paginator-theme.scss @@ -5,7 +5,7 @@ /// @see {mixin} css-vars /// @param {Map} $theme - The theme used to style the component. @mixin paginator($theme) { - @include css-vars($theme, 'igx-paginator'); + @include css-vars($theme); $variant: map.get($theme, '_meta', 'theme'); diff --git a/projects/igniteui-angular/src/lib/core/styles/components/progress/circular/_circular-theme.scss b/projects/igniteui-angular/src/lib/core/styles/components/progress/circular/_circular-theme.scss index fcad5269dc3..17c86b5e262 100644 --- a/projects/igniteui-angular/src/lib/core/styles/components/progress/circular/_circular-theme.scss +++ b/projects/igniteui-angular/src/lib/core/styles/components/progress/circular/_circular-theme.scss @@ -8,8 +8,7 @@ @mixin progress-circular($theme) { // Include rotate animation @include rotate-center(); - - @include css-vars($theme, 'igx-circular-bar'); + @include css-vars($theme); $animation-direction: normal; $animation-direction-rtl: reverse; diff --git a/projects/igniteui-angular/src/lib/core/styles/components/progress/linear/_linear-theme.scss b/projects/igniteui-angular/src/lib/core/styles/components/progress/linear/_linear-theme.scss index 8be3e00f3a0..b5e78dcea58 100644 --- a/projects/igniteui-angular/src/lib/core/styles/components/progress/linear/_linear-theme.scss +++ b/projects/igniteui-angular/src/lib/core/styles/components/progress/linear/_linear-theme.scss @@ -52,7 +52,7 @@ $easing-curves: ( /// @see {mixin} css-vars /// @param {Map} $theme - The theme used to style the component. @mixin progress-linear($theme) { - @include css-vars($theme, 'igx-linear-bar'); + @include css-vars($theme); $variant: map.get($theme, '_meta', 'theme'); diff --git a/projects/igniteui-angular/src/lib/core/styles/components/query-builder/_query-builder-theme.scss b/projects/igniteui-angular/src/lib/core/styles/components/query-builder/_query-builder-theme.scss index 836a2bd2255..4ca1970f5ee 100644 --- a/projects/igniteui-angular/src/lib/core/styles/components/query-builder/_query-builder-theme.scss +++ b/projects/igniteui-angular/src/lib/core/styles/components/query-builder/_query-builder-theme.scss @@ -1,18 +1,11 @@ @use 'sass:map'; @use '../../base' as *; -//// -/// @group themes -/// @access private -/// @author Simeon Simeonoff -/// @author Marin Popov -//// - /// @deprecated Use the `css-vars` mixin instead. /// @see {mixin} css-vars /// @param {Map} $theme - The grid theme used to style the component. @mixin query-builder($theme) { - @include css-vars($theme, 'igx-query-builder'); + @include css-vars($theme); $variant: map.get($theme, '_meta', 'theme'); $theme-variant: map.get($theme, '_meta', 'variant'); diff --git a/projects/igniteui-angular/src/lib/core/styles/components/radio/_radio-theme.scss b/projects/igniteui-angular/src/lib/core/styles/components/radio/_radio-theme.scss index 499757b6378..0edfd40c513 100644 --- a/projects/igniteui-angular/src/lib/core/styles/components/radio/_radio-theme.scss +++ b/projects/igniteui-angular/src/lib/core/styles/components/radio/_radio-theme.scss @@ -7,7 +7,7 @@ /// @see {mixin} css-vars /// @param {Map} $theme - The theme used to style the component. @mixin radio($theme) { - @include css-vars($theme, 'igx-radio'); + @include css-vars($theme); @include scale-in-out($start-scale: .9); $theme-variant: map.get($theme, '_meta', 'variant'); diff --git a/projects/igniteui-angular/src/lib/core/styles/components/select/_select-theme.scss b/projects/igniteui-angular/src/lib/core/styles/components/select/_select-theme.scss index be3cc7086e3..e6c2fa6b836 100644 --- a/projects/igniteui-angular/src/lib/core/styles/components/select/_select-theme.scss +++ b/projects/igniteui-angular/src/lib/core/styles/components/select/_select-theme.scss @@ -5,7 +5,7 @@ /// @see {mixin} css-vars /// @param {Map} $theme - The theme used to style the component. @mixin select($theme) { - @include css-vars($theme, 'igx-select'); + @include css-vars($theme); $variant: map.get($theme, '_meta', 'theme'); %igx-select { diff --git a/projects/igniteui-angular/src/lib/core/styles/components/slider/_slider-theme.scss b/projects/igniteui-angular/src/lib/core/styles/components/slider/_slider-theme.scss index 88e5d624974..64de031b2ec 100644 --- a/projects/igniteui-angular/src/lib/core/styles/components/slider/_slider-theme.scss +++ b/projects/igniteui-angular/src/lib/core/styles/components/slider/_slider-theme.scss @@ -7,7 +7,7 @@ /// @see {mixin} css-vars /// @param {Map} $theme - The theme used to style the component. @mixin slider($theme) { - @include css-vars($theme, 'igx-slider'); + @include css-vars($theme); $variant: map.get($theme, '_meta', 'theme'); diff --git a/projects/igniteui-angular/src/lib/core/styles/components/snackbar/_snackbar-theme.scss b/projects/igniteui-angular/src/lib/core/styles/components/snackbar/_snackbar-theme.scss index 2650063cb64..5a27bbedd05 100644 --- a/projects/igniteui-angular/src/lib/core/styles/components/snackbar/_snackbar-theme.scss +++ b/projects/igniteui-angular/src/lib/core/styles/components/snackbar/_snackbar-theme.scss @@ -6,7 +6,7 @@ /// @see {mixin} css-vars /// @param {Map} $theme - The theme used to style the component. @mixin snackbar($theme) { - @include css-vars($theme, 'igx-snackbar'); + @include css-vars($theme); @include fade-in(); $variant: map.get($theme, '_meta', 'theme'); diff --git a/projects/igniteui-angular/src/lib/core/styles/components/splitter/_splitter-theme.scss b/projects/igniteui-angular/src/lib/core/styles/components/splitter/_splitter-theme.scss index 1dc170aff65..b45a2f5b4a0 100644 --- a/projects/igniteui-angular/src/lib/core/styles/components/splitter/_splitter-theme.scss +++ b/projects/igniteui-angular/src/lib/core/styles/components/splitter/_splitter-theme.scss @@ -7,7 +7,7 @@ /// @see {mixin} css-vars /// @param {Map} $theme - The theme used to style the component. @mixin splitter($theme) { - @include css-vars($theme, 'igx-splitter'); + @include css-vars($theme); $splitter-color: var-get($theme, 'bar-color'); $hitbox-size: rem(4px); $debug-hitbox: false; diff --git a/projects/igniteui-angular/src/lib/core/styles/components/stepper/_stepper-theme.scss b/projects/igniteui-angular/src/lib/core/styles/components/stepper/_stepper-theme.scss index 73a0295ee53..329de693b52 100644 --- a/projects/igniteui-angular/src/lib/core/styles/components/stepper/_stepper-theme.scss +++ b/projects/igniteui-angular/src/lib/core/styles/components/stepper/_stepper-theme.scss @@ -5,7 +5,7 @@ /// @see {mixin} css-vars /// @param {Map} $theme - The theme used to style the component. @mixin stepper($theme) { - @include css-vars($theme, 'igx-stepper'); + @include css-vars($theme); $variant: map.get($theme, '_meta', 'theme'); diff --git a/projects/igniteui-angular/src/lib/core/styles/components/switch/_switch-theme.scss b/projects/igniteui-angular/src/lib/core/styles/components/switch/_switch-theme.scss index 0b319ee3976..5f2285a090c 100644 --- a/projects/igniteui-angular/src/lib/core/styles/components/switch/_switch-theme.scss +++ b/projects/igniteui-angular/src/lib/core/styles/components/switch/_switch-theme.scss @@ -7,7 +7,7 @@ /// @see {mixin} css-vars /// @param {Map} $theme - The theme used to style the component. @mixin switch($theme) { - @include css-vars($theme, 'igx-switch'); + @include css-vars($theme); @include scale-in-out($start-scale: .9); $variant: map.get($theme, '_meta', 'theme'); diff --git a/projects/igniteui-angular/src/lib/core/styles/components/tabs/_tabs-theme.scss b/projects/igniteui-angular/src/lib/core/styles/components/tabs/_tabs-theme.scss index 93506cf22be..cf817cbca0c 100644 --- a/projects/igniteui-angular/src/lib/core/styles/components/tabs/_tabs-theme.scss +++ b/projects/igniteui-angular/src/lib/core/styles/components/tabs/_tabs-theme.scss @@ -11,7 +11,7 @@ /// @requires ripple-theme /// @requires {mixin} ripple @mixin tabs($theme) { - @include css-vars($theme, 'igx-tabs'); + @include css-vars($theme); $variant: map.get($theme, '_meta', 'theme'); $not-bootstrap-theme: $variant != 'bootstrap'; diff --git a/projects/igniteui-angular/src/lib/core/styles/components/toast/_toast-theme.scss b/projects/igniteui-angular/src/lib/core/styles/components/toast/_toast-theme.scss index 158839435b2..355afdff3fc 100644 --- a/projects/igniteui-angular/src/lib/core/styles/components/toast/_toast-theme.scss +++ b/projects/igniteui-angular/src/lib/core/styles/components/toast/_toast-theme.scss @@ -1,12 +1,11 @@ @use 'sass:map'; @use '../../base' as *; -/// Toast Component /// @deprecated Use the `css-vars` mixin instead. /// @see {mixin} css-vars /// @param {Map} $theme - The theme used to style the component. @mixin toast($theme) { - @include css-vars($theme, 'igx-toast'); + @include css-vars($theme); $variant: map.get($theme, '_meta', 'theme'); $width: rem(52px); diff --git a/projects/igniteui-angular/src/lib/core/styles/components/tree/_tree-theme.scss b/projects/igniteui-angular/src/lib/core/styles/components/tree/_tree-theme.scss index f4025595796..6d4550ba331 100644 --- a/projects/igniteui-angular/src/lib/core/styles/components/tree/_tree-theme.scss +++ b/projects/igniteui-angular/src/lib/core/styles/components/tree/_tree-theme.scss @@ -5,7 +5,7 @@ /// @see {mixin} css-vars /// @param {Map} $theme - The theme used to style the component. @mixin tree($theme) { - @include css-vars($theme, 'igx-tree-node'); + @include css-vars($theme); $variant: map.get($theme, '_meta', 'theme'); $indigo-theme: $variant == 'indigo'; diff --git a/projects/igniteui-angular/src/lib/core/styles/themes/_core.scss b/projects/igniteui-angular/src/lib/core/styles/themes/_core.scss index 4954d18cfbc..894b2b030e0 100644 --- a/projects/igniteui-angular/src/lib/core/styles/themes/_core.scss +++ b/projects/igniteui-angular/src/lib/core/styles/themes/_core.scss @@ -7,8 +7,7 @@ // Used to configure color accessibility for charts @use 'igniteui-theming/sass/color/functions' as color; -@use 'igniteui-theming/sass/themes/mixins' as theming; -@use 'igniteui-theming/sass/themes/components' as themes; +@use 'igniteui-theming/sass/themes' as theming; // Common components @use '../components/_common/igx-control'; @@ -92,7 +91,6 @@ $enhanced-accessibility: false ) { @include color.configure-colors($enhanced-accessibility); - @include themes.configure-prefix('igx'); // Angular hack for binding to [hidden] property // not working diff --git a/projects/igniteui-angular/src/lib/data-operations/merge-strategy.ts b/projects/igniteui-angular/src/lib/data-operations/merge-strategy.ts index 9bf47444fec..a7a4f8c1059 100644 --- a/projects/igniteui-angular/src/lib/data-operations/merge-strategy.ts +++ b/projects/igniteui-angular/src/lib/data-operations/merge-strategy.ts @@ -7,13 +7,14 @@ import { GridType } from '../grids/common/grid.interface'; export interface IMergeByResult { rowSpan: number; root?: any; + childRecords?: any[]; } /** * Merge strategy interface. */ export interface IGridMergeStrategy { - /* blazorSuppress */ + /* blazorCSSuppress */ /** * Function that processes merging of the whole data per merged field. * Returns collection where object has reference to the original record and map of the cell merge metadata per field. @@ -49,7 +50,7 @@ export class DefaultMergeStrategy implements IGridMergeStrategy { return this._instance || (this._instance = new this()); } - /* blazorSuppress */ + /* blazorCSSuppress */ public merge( data: any[], field: string, @@ -75,10 +76,11 @@ export class DefaultMergeStrategy implements IGridMergeStrategy { continue; } const recToUpdateData = recData ?? { recordRef: grid.isGhostRecord(rec) ? rec.recordRef : rec, cellMergeMeta: new Map(), ghostRecord: rec.ghostRecord }; - recToUpdateData.cellMergeMeta.set(field, { rowSpan: 1 }); + recToUpdateData.cellMergeMeta.set(field, { rowSpan: 1, childRecords: [] }); if (prev && comparer.call(this, prev.recordRef, recToUpdateData.recordRef, field, isDate, isTime) && prev.ghostRecord === recToUpdateData.ghostRecord) { const root = prev.cellMergeMeta.get(field)?.root ?? prev; root.cellMergeMeta.get(field).rowSpan += 1; + root.cellMergeMeta.get(field).childRecords.push(recToUpdateData); recToUpdateData.cellMergeMeta.get(field).root = root; } prev = recToUpdateData; @@ -90,7 +92,7 @@ export class DefaultMergeStrategy implements IGridMergeStrategy { return result; } - /* blazorSuppress */ + /* blazorCSSuppress */ public comparer(prevRecord: any, record: any, field: string, isDate = false, isTime = false): boolean { const a = this.getFieldValue(prevRecord,field, isDate, isTime); const b = this.getFieldValue(record,field, isDate, isTime); @@ -145,7 +147,7 @@ export class DefaultMergeStrategy implements IGridMergeStrategy { export class DefaultTreeGridMergeStrategy extends DefaultMergeStrategy { - /* blazorSuppress */ + /* blazorCSSuppress */ public override comparer(prevRecord: any, record: any, field: string, isDate = false, isTime = false): boolean { const a = this.getFieldValue( prevRecord.data, field, isDate, isTime); const b = this.getFieldValue(record.data,field, isDate, isTime); @@ -164,7 +166,7 @@ export class DefaultTreeGridMergeStrategy extends DefaultMergeStrategy { } export class ByLevelTreeGridMergeStrategy extends DefaultMergeStrategy { - /* blazorSuppress */ + /* blazorCSSuppress */ public override comparer(prevRecord: any, record: any, field: string, isDate = false, isTime = false): boolean { const a = this.getFieldValue( prevRecord.data, field, isDate, isTime); const b = this.getFieldValue(record.data,field, isDate, isTime); diff --git a/projects/igniteui-angular/src/lib/directives/focus-trap/focus-trap.directive.spec.ts b/projects/igniteui-angular/src/lib/directives/focus-trap/focus-trap.directive.spec.ts index 8f0e8c5385b..d0f810ce20d 100644 --- a/projects/igniteui-angular/src/lib/directives/focus-trap/focus-trap.directive.spec.ts +++ b/projects/igniteui-angular/src/lib/directives/focus-trap/focus-trap.directive.spec.ts @@ -5,6 +5,7 @@ import { IgxFocusTrapDirective } from './focus-trap.directive'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { UIInteractions } from '../../test-utils/ui-interactions.spec'; +import { IgxTimePickerComponent } from '../../time-picker/time-picker.component'; describe('igxFocusTrap', () => { beforeEach(waitForAsync(() => { @@ -161,6 +162,39 @@ describe('igxFocusTrap', () => { fix.detectChanges(); expect(document.activeElement).toEqual(button.nativeElement); })); + + it('should focus only visible focusable elements on Tab key pressed', () => { + const fix = TestBed.createComponent(TrapFocusTestComponent); + fix.detectChanges(); + + fix.componentInstance.showTimePicker = true; + fix.detectChanges(); + + const focusTrap = fix.debugElement.query(By.directive(IgxFocusTrapDirective)); + const buttons = fix.debugElement.queryAll(By.css('button')); + const inputs = fix.debugElement.queryAll(By.css('input')); + const timePickerInput = fix.debugElement.query(By.css('.igx-input-group__input')); + + UIInteractions.triggerEventHandlerKeyDown('Tab', focusTrap); + fix.detectChanges(); + expect(document.activeElement).toEqual(inputs[0].nativeElement); + + UIInteractions.triggerEventHandlerKeyDown('Tab', focusTrap); + fix.detectChanges(); + expect(document.activeElement).toEqual(inputs[1].nativeElement); + + UIInteractions.triggerEventHandlerKeyDown('Tab', focusTrap); + fix.detectChanges(); + expect(document.activeElement).toEqual(timePickerInput.nativeElement); + + UIInteractions.triggerEventHandlerKeyDown('Tab', focusTrap); + fix.detectChanges(); + expect(document.activeElement).toEqual(buttons[buttons.length - 1].nativeElement); + + UIInteractions.triggerEventHandlerKeyDown('Tab', focusTrap); + fix.detectChanges(); + expect(document.activeElement).toEqual(inputs[0].nativeElement); + }); }); @@ -177,14 +211,19 @@ describe('igxFocusTrap', () => { }
+ @if (showTimePicker) { + + } +
@if (showButton) { } `, - imports: [IgxFocusTrapDirective] + imports: [IgxFocusTrapDirective, IgxTimePickerComponent] }) class TrapFocusTestComponent { public showInput = true; public showButton = true; public focusTrap = true; + public showTimePicker = false; } diff --git a/projects/igniteui-angular/src/lib/directives/focus-trap/focus-trap.directive.ts b/projects/igniteui-angular/src/lib/directives/focus-trap/focus-trap.directive.ts index 254a75f3dcf..e27c900c449 100644 --- a/projects/igniteui-angular/src/lib/directives/focus-trap/focus-trap.directive.ts +++ b/projects/igniteui-angular/src/lib/directives/focus-trap/focus-trap.directive.ts @@ -80,7 +80,7 @@ export class IgxFocusTrapDirective implements AfterViewInit, OnDestroy { private getFocusableElements(element: Element) { return Array.from(element.querySelectorAll( 'a[href], button, input, textarea, select, details,[tabindex]:not([tabindex="-1"])' - )).filter(el => !el.hasAttribute('disabled') && !el.getAttribute('aria-hidden')); + )).filter(el => !el.hasAttribute('disabled') && !el.closest('[aria-hidden="true"]')); } private getFocusedElement(): HTMLElement | null { diff --git a/projects/igniteui-angular/src/lib/directives/input/input.directive.spec.ts b/projects/igniteui-angular/src/lib/directives/input/input.directive.spec.ts index d1c8003d643..dd74f386629 100644 --- a/projects/igniteui-angular/src/lib/directives/input/input.directive.spec.ts +++ b/projects/igniteui-angular/src/lib/directives/input/input.directive.spec.ts @@ -908,6 +908,22 @@ describe('IgxInput', () => { expect(formControl.touched).toBe(true); })); + + it('should update validity when control is marked as touched', fakeAsync(() => { + const fixture = TestBed.createComponent(ReactiveFormComponent); + fixture.detectChanges(); + + const component = fixture.componentInstance; + const igxInput = component.strIgxInput; + + expect(igxInput.valid).toBe(IgxInputState.INITIAL); + + component.markAllAsTouched(); + tick(); + fixture.detectChanges(); + + expect(igxInput.valid).toBe(IgxInputState.INVALID); + })); }); @Component({ @@ -1201,6 +1217,12 @@ class ReactiveFormComponent { this.textareaControl.markAsTouched(); this.textareaControl.updateValueAndValidity(); } + + public markAllAsTouched() { + if (!this.form.valid) { + this.form.markAllAsTouched(); + } + } } @Component({ diff --git a/projects/igniteui-angular/src/lib/directives/input/input.directive.ts b/projects/igniteui-angular/src/lib/directives/input/input.directive.ts index 6701290bd34..84fc82c9547 100644 --- a/projects/igniteui-angular/src/lib/directives/input/input.directive.ts +++ b/projects/igniteui-angular/src/lib/directives/input/input.directive.ts @@ -16,9 +16,10 @@ import { import { AbstractControl, NgControl, - NgModel + NgModel, + TouchedChangeEvent } from '@angular/forms'; -import { Subscription } from 'rxjs'; +import { filter, Subscription } from 'rxjs'; import { IgxInputGroupBase } from '../../input-group/input-group.common'; const nativeValidationAttributes = [ @@ -100,6 +101,7 @@ export class IgxInputDirective implements AfterViewInit, OnDestroy { private _valid = IgxInputState.INITIAL; private _statusChanges$: Subscription; private _valueChanges$: Subscription; + private _touchedChanges$: Subscription; private _fileNames: string; private _disabled = false; @@ -313,6 +315,14 @@ export class IgxInputDirective implements AfterViewInit, OnDestroy { this._valueChanges$ = this.ngControl.valueChanges.subscribe( this.onValueChanged.bind(this) ); + + if (this.ngControl.control) { + this._touchedChanges$ = this.ngControl.control.events + .pipe(filter(e => e instanceof TouchedChangeEvent)) + .subscribe( + this.updateValidityState.bind(this) + ); + } } this.cdr.detectChanges(); @@ -326,6 +336,10 @@ export class IgxInputDirective implements AfterViewInit, OnDestroy { if (this._valueChanges$) { this._valueChanges$.unsubscribe(); } + + if (this._touchedChanges$) { + this._touchedChanges$.unsubscribe(); + } } /** * Sets a focus on the igxInput. diff --git a/projects/igniteui-angular/src/lib/expansion-panel/expansion-panel.spec.ts b/projects/igniteui-angular/src/lib/expansion-panel/expansion-panel.spec.ts index 1ced1afc365..09151197d58 100644 --- a/projects/igniteui-angular/src/lib/expansion-panel/expansion-panel.spec.ts +++ b/projects/igniteui-angular/src/lib/expansion-panel/expansion-panel.spec.ts @@ -1,5 +1,5 @@ -import { Component, ViewChild } from '@angular/core'; +import { Component, DebugElement, ViewChild } from '@angular/core'; import { TestBed, ComponentFixture, tick, fakeAsync, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { IgxExpansionPanelComponent } from './expansion-panel.component'; @@ -296,13 +296,17 @@ describe('igxExpansionPanel', () => { panel: IgxExpansionPanelComponent, panelContainer: any, panelHeader: HTMLElement, - button: HTMLElement, + button: DebugElement, timesCollapsed = 0, timesExpanded = 0) => { expect(panel.collapsed).toEqual(collapsed); const ariaExpanded = collapsed ? 'false' : 'true'; expect(panelHeader.querySelector('div [role = \'button\']').getAttribute('aria-expanded')).toMatch(ariaExpanded); expect(panelHeader.classList.contains(CSS_CLASS_HEADER_EXPANDED)).toEqual(!collapsed); + if (button.children.length > 1) { + const iconName = collapsed ? 'expand_more' : 'expand_less'; + expect(button.componentInstance.iconName).toMatch(iconName); + } if (collapsed) { expect(panelContainer.lastElementChild.nodeName).toEqual('IGX-EXPANSION-PANEL-HEADER'); } else { @@ -322,7 +326,7 @@ describe('igxExpansionPanel', () => { const header = fixture.componentInstance.header; const panelContainer = fixture.nativeElement.querySelector('.' + CSS_CLASS_EXPANSION_PANEL); const panelHeader = fixture.nativeElement.querySelector('.' + CSS_CLASS_PANEL_HEADER) as HTMLElement; - const button = fixture.nativeElement.querySelector('.' + CSS_CLASS_PANEL_ICON) as HTMLElement; + const button = fixture.debugElement.query(By.css('.' + CSS_CLASS_PANEL_ICON)) as DebugElement; let timesCollapsed = 0; let timesExpanded = 0; @@ -383,7 +387,7 @@ describe('igxExpansionPanel', () => { const header = fixture.componentInstance.header; const panelContainer = fixture.nativeElement.querySelector('.' + CSS_CLASS_EXPANSION_PANEL); const panelHeader = fixture.nativeElement.querySelector('.' + CSS_CLASS_PANEL_HEADER) as HTMLElement; - let button = fixture.nativeElement.querySelector('.' + CSS_CLASS_PANEL_ICON) as HTMLElement; + let button = fixture.debugElement.query(By.css('.' + CSS_CLASS_PANEL_ICON)) as DebugElement; let timesCollapsed = 0; let timesExpanded = 0; @@ -392,7 +396,7 @@ describe('igxExpansionPanel', () => { spyOn(header.interaction, 'emit'); verifyPanelExpansionState(true, panel, panelContainer, panelHeader, button, timesCollapsed, timesExpanded); - button.click(); + button.nativeElement.click() tick(); fixture.detectChanges(); tick(); @@ -400,7 +404,7 @@ describe('igxExpansionPanel', () => { verifyPanelExpansionState(false, panel, panelContainer, panelHeader, button, timesCollapsed, timesExpanded); expect(header.interaction.emit).toHaveBeenCalledTimes(1); - button.click(); + button.nativeElement.click() tick(); fixture.detectChanges(); tick(); @@ -408,7 +412,7 @@ describe('igxExpansionPanel', () => { verifyPanelExpansionState(true, panel, panelContainer, panelHeader, button, timesCollapsed, timesExpanded); expect(header.interaction.emit).toHaveBeenCalledTimes(2); - button.click(); + button.nativeElement.click() tick(); fixture.detectChanges(); tick(); @@ -422,8 +426,8 @@ describe('igxExpansionPanel', () => { fixture.detectChanges(); tick(); - button = fixture.nativeElement.querySelector('.' + CSS_CLASS_PANEL_ICON) as HTMLElement; - button.click(); + button = fixture.debugElement.query(By.css('.' + CSS_CLASS_PANEL_ICON)) as DebugElement; + button.nativeElement.click() tick(); fixture.detectChanges(); tick(); @@ -431,7 +435,7 @@ describe('igxExpansionPanel', () => { verifyPanelExpansionState(true, panel, panelContainer, panelHeader, button, timesCollapsed, timesExpanded); expect(header.interaction.emit).toHaveBeenCalledTimes(4); - button.click(); + button.nativeElement.click() tick(); fixture.detectChanges(); tick(); @@ -439,7 +443,7 @@ describe('igxExpansionPanel', () => { verifyPanelExpansionState(false, panel, panelContainer, panelHeader, button, timesCollapsed, timesExpanded); expect(header.interaction.emit).toHaveBeenCalledTimes(5); - button.click(); + button.nativeElement.click() tick(); fixture.detectChanges(); tick(); @@ -453,7 +457,7 @@ describe('igxExpansionPanel', () => { const panel = fixture.componentInstance.expansionPanel; const panelContainer = fixture.nativeElement.querySelector('.' + CSS_CLASS_EXPANSION_PANEL); const panelHeader = fixture.nativeElement.querySelector('.' + CSS_CLASS_PANEL_HEADER) as HTMLElement; - const button = fixture.nativeElement.querySelector('.' + CSS_CLASS_PANEL_ICON) as HTMLElement; + const button = fixture.debugElement.query(By.css('.' + CSS_CLASS_PANEL_ICON)) as DebugElement; spyOn(panel.contentCollapsed, 'emit').and.callThrough(); spyOn(panel.contentExpanded, 'emit').and.callThrough(); verifyPanelExpansionState(true, panel, panelContainer, panelHeader, button); @@ -482,7 +486,7 @@ describe('igxExpansionPanel', () => { const panel = fixture.componentInstance.expansionPanel; const panelContainer = fixture.nativeElement.querySelector('.' + CSS_CLASS_EXPANSION_PANEL); const panelHeader = fixture.nativeElement.querySelector('.' + CSS_CLASS_PANEL_HEADER) as HTMLElement; - const button = fixture.nativeElement.querySelector('.' + CSS_CLASS_PANEL_ICON) as HTMLElement; + const button = fixture.debugElement.query(By.css('.' + CSS_CLASS_PANEL_ICON)) as DebugElement; let timesCollapsed = 0; let timesExpanded = 0; @@ -524,7 +528,7 @@ describe('igxExpansionPanel', () => { const panel = fixture.componentInstance.expansionPanel; const panelContainer = fixture.nativeElement.querySelector('.' + CSS_CLASS_EXPANSION_PANEL); const panelHeader = fixture.nativeElement.querySelector('.' + CSS_CLASS_PANEL_HEADER) as HTMLElement; - const button = fixture.nativeElement.querySelector('.' + CSS_CLASS_PANEL_ICON) as HTMLElement; + const button = fixture.debugElement.query(By.css('.' + CSS_CLASS_PANEL_ICON)) as DebugElement; let timesCollapsed = 0; let timesExpanded = 0; @@ -571,7 +575,7 @@ describe('igxExpansionPanel', () => { const header = fixture.componentInstance.header; const panelContainer = fixture.nativeElement.querySelector('.' + CSS_CLASS_EXPANSION_PANEL); const panelHeader = fixture.nativeElement.querySelector('.' + CSS_CLASS_PANEL_HEADER) as HTMLElement; - const button = fixture.nativeElement.querySelector('.' + CSS_CLASS_PANEL_ICON) as HTMLElement; + const button = fixture.debugElement.query(By.css('.' + CSS_CLASS_PANEL_ICON)) as DebugElement; let timesCollapsed = 0; let timesExpanded = 0; @@ -684,7 +688,7 @@ describe('igxExpansionPanel', () => { const header = fixture.componentInstance.header; const panelContainer = fixture.nativeElement.querySelector('.' + CSS_CLASS_EXPANSION_PANEL); const panelHeader = fixture.nativeElement.querySelector('.' + CSS_CLASS_PANEL_HEADER) as HTMLElement; - const button = fixture.nativeElement.querySelector('.' + CSS_CLASS_PANEL_ICON) as HTMLElement; + const button = fixture.debugElement.query(By.css('.' + CSS_CLASS_PANEL_ICON)) as DebugElement; let timesCollapsed = 0; let timesExpanded = 0; @@ -708,7 +712,7 @@ describe('igxExpansionPanel', () => { verifyPanelExpansionState(true, panel, panelContainer, panelHeader, button, timesCollapsed, timesExpanded); expect(header.interaction.emit).toHaveBeenCalledTimes(1); - button.click(); + button.nativeElement.click() tick(); fixture.detectChanges(); tick(); @@ -759,7 +763,7 @@ describe('igxExpansionPanel', () => { const header = fixture.componentInstance.header; const panelContainer = fixture.nativeElement.querySelector('.' + CSS_CLASS_EXPANSION_PANEL); const panelHeader = fixture.nativeElement.querySelector('.' + CSS_CLASS_PANEL_HEADER) as HTMLElement; - const button = fixture.nativeElement.querySelector('.' + CSS_CLASS_PANEL_ICON) as HTMLElement; + const button = fixture.debugElement.query(By.css('.' + CSS_CLASS_PANEL_ICON)) as DebugElement; const headerButton = panelHeader.querySelector('div [role = \'button\']'); let timesCollapsed = 0; @@ -788,7 +792,7 @@ describe('igxExpansionPanel', () => { verifyPanelExpansionState(false, panel, panelContainer, panelHeader, button, timesCollapsed, timesExpanded); expect(header.interaction.emit).toHaveBeenCalledTimes(0); - button.click(); + button.nativeElement.click() tick(); fixture.detectChanges(); tick(); @@ -817,7 +821,7 @@ describe('igxExpansionPanel', () => { verifyPanelExpansionState(true, panel, panelContainer, panelHeader, button, timesCollapsed, timesExpanded); expect(header.interaction.emit).toHaveBeenCalledTimes(0); - button.click(); + button.nativeElement.click() tick(); fixture.detectChanges(); tick(); diff --git a/projects/igniteui-angular/src/lib/grids/filtering/excel-style/excel-style-conditional-filter.component.html b/projects/igniteui-angular/src/lib/grids/filtering/excel-style/excel-style-conditional-filter.component.html index 0e10c481086..89fbb46e625 100644 --- a/projects/igniteui-angular/src/lib/grids/filtering/excel-style/excel-style-conditional-filter.component.html +++ b/projects/igniteui-angular/src/lib/grids/filtering/excel-style/excel-style-conditional-filter.component.html @@ -7,8 +7,8 @@ [igxDropDownItemNavigation]="subMenu" role="menuitem" aria-haspopup="true" - [attr.aria-controls]="this.subMenu?.listId" - [attr.aria-activedescendant]="!this.subMenu?.collapsed ? this.subMenu?.focusedItem?.id : null"> + [attr.aria-controls]="subMenu?.listId" + [attr.aria-activedescendant]="!subMenu?.collapsed ? subMenu?.focusedItem?.id : null"> {{ subMenuText }} @if (filterNumber > 0) { ({{filterNumber}}) } diff --git a/projects/igniteui-angular/src/lib/grids/grid/cell.spec.ts b/projects/igniteui-angular/src/lib/grids/grid/cell.spec.ts index d90ed1542e0..f3ce8cc7890 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/cell.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/cell.spec.ts @@ -151,7 +151,7 @@ describe('IgxGrid - Cell component #grid', () => { }); }); - xdescribe('Cells in virtualized grid ', () => { + describe('Cells in virtualized grid ', () => { let fix; let grid: IgxGridComponent; @@ -260,8 +260,8 @@ describe('IgxGrid - Cell component #grid', () => { const gridContent = GridFunctions.getGridContent(fix); UIInteractions.triggerEventHandlerKeyDown('arrowup', gridContent); + await wait(16); fix.detectChanges(); - await wait(30); expect(grid.getCellByColumn(2, 'value').selected).toBeTruthy(); })); diff --git a/projects/igniteui-angular/src/lib/grids/grid/grid-filtering-ui.spec.ts b/projects/igniteui-angular/src/lib/grids/grid/grid-filtering-ui.spec.ts index 5006fbf41e8..265eb1786ca 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/grid-filtering-ui.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/grid-filtering-ui.spec.ts @@ -44,7 +44,8 @@ import { IgxGridExternalESFTemplateComponent, IgxGridDatesFilteringComponent, LoadOnDemandFilterStrategy, - IgxGridFilteringNumericComponent + IgxGridFilteringNumericComponent, + IgxGridConditionalFilteringComponent } from '../../test-utils/grid-samples.spec'; import { GridSelectionMode, FilterMode, Size } from '../common/enums'; import { ControlsFunction } from '../../test-utils/controls-functions.spec'; @@ -7083,6 +7084,27 @@ describe('IgxGrid - Filtering actions - Excel style filtering #grid', () => { })); }); + + describe('IgxGrid - Conditional Filter', () => { + let fix: ComponentFixture; + let grid: IgxGridComponent; + beforeEach(fakeAsync(() => { + fix = TestBed.createComponent(IgxGridConditionalFilteringComponent); + fix.detectChanges(); + grid = fix.componentInstance.grid; + grid.filterMode = FilterMode.excelStyleFilter; + fix.detectChanges(); + })); + + it('Should not throw console error on opening the drop-down.', async () => { + spyOn(console, 'error'); + GridFunctions.clickExcelFilterIconFromCodeAsync(fix, grid, 'Downloads'); + fix.detectChanges(); + await wait(100); + + expect(console.error).not.toHaveBeenCalled(); + }); + }); }); describe('IgxGrid - Custom Filtering Strategy #grid', () => { diff --git a/projects/igniteui-angular/src/lib/grids/grid/grid.component.html b/projects/igniteui-angular/src/lib/grids/grid/grid.component.html index 9631c1bd71a..f7b47ea5aec 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/grid.component.html +++ b/projects/igniteui-angular/src/lib/grids/grid/grid.component.html @@ -69,7 +69,8 @@ | gridRowPinning:id:true:pipeTrigger | gridFiltering:filteringExpressionsTree:filterStrategy:advancedFilteringExpressionsTree:id:pipeTrigger:filteringPipeTrigger:true | gridSort:sortingExpressions:groupingExpressions:sortStrategy:id:pipeTrigger:true - | gridCellMerge:columnsToMerge:cellMergeMode:mergeStrategy:activeRowIndexes:true:pipeTrigger; as pinnedData) { + | gridCellMerge:columnsToMerge:cellMergeMode:mergeStrategy:pipeTrigger + | gridUnmergeActive:columnsToMerge:activeRowIndexes:true:pipeTrigger; as pinnedData) { @if (pinnedData.length > 0) {
x - this.grid.pinnedRecordsCount); } - const result = DataUtil.merge(cloneArray(collection), colsToMerge, mergeStrategy, activeRowIndexes, this.grid); + activeRowIndexes = Array.from(new Set(activeRowIndexes)).filter(x => !isNaN(x)); + const rootsToUpdate = []; + activeRowIndexes.forEach(index => { + const target = collection[index]; + if (target) { + colsToMerge.forEach(col => { + const colMeta = target.cellMergeMeta.get(col.field); + const root = colMeta.root || (colMeta.rowSpan > 1 ? target : null); + if (root) { + rootsToUpdate.push(root); + } + }); + } + }); + const uniqueRoots = Array.from(new Set(rootsToUpdate)); + if (uniqueRoots.length === 0) { + // if nothing to update, return + return collection; + } + let result = cloneArray(collection) as any; + uniqueRoots.forEach(x => { + const index = result.indexOf(x); + const colKeys = [...x.cellMergeMeta.keys()]; + const cols = colsToMerge.filter(col => colKeys.indexOf(col.field) !== -1); + let res = []; + for (const col of cols) { + + let childData = x.cellMergeMeta.get(col.field).childRecords; + const childRecs = childData.map(rec => rec.recordRef); + const isDate = col?.dataType === 'date' || col?.dataType === 'dateTime'; + const isTime = col?.dataType === 'time' || col?.dataType === 'dateTime'; + res = this.grid.mergeStrategy.merge( + [x.recordRef, ...childRecs], + col.field, + col.mergingComparer, + res, + activeRowIndexes.map(ri => ri - index), + isDate, + isTime, + this.grid); + + } + result = result.slice(0, index).concat(res, result.slice(index + res.length)); + }); + + return result; } } diff --git a/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.component.html b/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.component.html index 276e89cb377..2b640e97ddd 100644 --- a/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.component.html +++ b/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.component.html @@ -51,7 +51,8 @@ | gridRowPinning:id:true:pipeTrigger | gridFiltering:filteringExpressionsTree:filterStrategy:advancedFilteringExpressionsTree:id:pipeTrigger:filteringPipeTrigger:true | gridSort:sortingExpressions:[]:sortStrategy:id:pipeTrigger:true - | gridCellMerge:columnsToMerge:cellMergeMode:mergeStrategy:activeRowIndexes:true:pipeTrigger; as pinnedData + | gridCellMerge:columnsToMerge:cellMergeMode:mergeStrategy:pipeTrigger + | gridUnmergeActive:columnsToMerge:activeRowIndexes:true:pipeTrigger; as pinnedData ) { @if (pinnedData.length > 0) {
diff --git a/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.component.ts b/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.component.ts index 80c7c7c1f96..789b46b4453 100644 --- a/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.component.ts +++ b/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.component.ts @@ -50,7 +50,7 @@ import { IgxGridValidationService } from '../grid/grid-validation.service'; import { IgxGridHierarchicalPipe, IgxGridHierarchicalPagingPipe } from './hierarchical-grid.pipes'; import { IgxSummaryDataPipe } from '../summaries/grid-root-summary.pipe'; import { IgxGridTransactionPipe, IgxHasVisibleColumnsPipe, IgxGridRowPinningPipe, IgxGridAddRowPipe, IgxGridRowClassesPipe, IgxGridRowStylesPipe, IgxStringReplacePipe } from '../common/pipes'; -import { IgxGridSortingPipe, IgxGridFilteringPipe, IgxGridCellMergePipe } from '../grid/grid.pipes'; +import { IgxGridSortingPipe, IgxGridFilteringPipe, IgxGridCellMergePipe, IgxGridUnmergeActivePipe } from '../grid/grid.pipes'; import { IgxGridColumnResizerComponent } from '../resizing/resizer.component'; import { IgxRowEditTabStopDirective } from '../grid.rowEdit.directive'; import { IgxIconComponent } from '../../icon/icon.component'; @@ -353,7 +353,8 @@ export class IgxChildGridRowComponent implements AfterViewInit, OnInit { IgxGridHierarchicalPagingPipe, IgxStringReplacePipe, IgxGridCellMergePipe, - IgxScrollInertiaDirective + IgxScrollInertiaDirective, + IgxGridUnmergeActivePipe ], schemas: [CUSTOM_ELEMENTS_SCHEMA] }) diff --git a/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid.component.html b/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid.component.html index 33c79416332..7195fcbf71b 100644 --- a/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid.component.html +++ b/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid.component.html @@ -53,7 +53,8 @@ | gridRowPinning:id:true:pipeTrigger | treeGridFiltering:filteringExpressionsTree:filterStrategy:advancedFilteringExpressionsTree:pipeTrigger:filteringPipeTrigger:true | treeGridSorting:sortingExpressions:treeGroupArea?.expressions:sortStrategy:pipeTrigger:true - | gridCellMerge:columnsToMerge:cellMergeMode:mergeStrategy:activeRowIndexes:true:pipeTrigger; as pinnedData + | gridCellMerge:columnsToMerge:cellMergeMode:mergeStrategy:pipeTrigger + | gridUnmergeActive:columnsToMerge:activeRowIndexes:true:pipeTrigger; as pinnedData ) { @if (pinnedData.length > 0) {
diff --git a/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid.component.ts b/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid.component.ts index 4820bca8339..40196a62d0b 100644 --- a/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid.component.ts +++ b/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid.component.ts @@ -82,7 +82,7 @@ import { IgxGridDragSelectDirective } from '../selection/drag-select.directive'; import { IgxGridBodyDirective } from '../grid.common'; import { IgxGridHeaderRowComponent } from '../headers/grid-header-row.component'; import { IgxTextHighlightService } from '../../directives/text-highlight/text-highlight.service'; -import { IgxGridCellMergePipe } from '../grid/grid.pipes'; +import { IgxGridCellMergePipe, IgxGridUnmergeActivePipe } from '../grid/grid.pipes'; import { DefaultTreeGridMergeStrategy, IGridMergeStrategy } from '../../data-operations/merge-strategy'; import { IgxScrollInertiaDirective } from '../../directives/scroll-inertia/scroll_inertia.directive'; @@ -173,7 +173,8 @@ let NEXT_ID = 0; IgxTreeGridAddRowPipe, IgxStringReplacePipe, IgxGridCellMergePipe, - IgxScrollInertiaDirective + IgxScrollInertiaDirective, + IgxGridUnmergeActivePipe ], schemas: [CUSTOM_ELEMENTS_SCHEMA] }) diff --git a/projects/igniteui-angular/src/lib/query-builder/query-builder.component.spec.ts b/projects/igniteui-angular/src/lib/query-builder/query-builder.component.spec.ts index 38f0578a17e..bca74571c50 100644 --- a/projects/igniteui-angular/src/lib/query-builder/query-builder.component.spec.ts +++ b/projects/igniteui-angular/src/lib/query-builder/query-builder.component.spec.ts @@ -1,5 +1,5 @@ import { waitForAsync, TestBed, ComponentFixture, fakeAsync, tick, flush } from '@angular/core/testing'; -import { FilteringExpressionsTree, FilteringLogic, IExpressionTree, IgxChipComponent, IgxComboComponent, IgxDateFilteringOperand, IgxNumberFilteringOperand, IgxQueryBuilderComponent, IgxQueryBuilderHeaderComponent, IgxQueryBuilderSearchValueTemplateDirective } from 'igniteui-angular'; +import { FilteringExpressionsTree, FilteringLogic, IExpressionTree, IgxChipComponent, IgxComboComponent, IgxDateFilteringOperand, IgxIconComponent, IgxInputGroupComponent, IgxNumberFilteringOperand, IgxQueryBuilderComponent, IgxQueryBuilderHeaderComponent, IgxQueryBuilderSearchValueTemplateDirective, IgxSelectComponent } from 'igniteui-angular'; import { Component, OnInit, ViewChild } from '@angular/core'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { By } from '@angular/platform-browser'; @@ -837,8 +837,10 @@ describe('IgxQueryBuilder', () => { QueryBuilderFunctions.selectOperatorInEditModeExpression(fix, 10); // Select 'In' operator. // Verify operator icon - // const operatorInputGroup = QueryBuilderFunctions.getQueryBuilderOperatorSelect(fix).querySelector('igx-input-group') as HTMLElement; - // expect(operatorInputGroup.querySelector('igx-icon').attributes.getNamedItem('ng-reflect-name').nodeValue).toEqual('in'); + const operatorSelectDebugElement = fix.debugElement.queryAll(By.directive(IgxSelectComponent))[2]; + const inputDebugElement = operatorSelectDebugElement.query(By.directive(IgxInputGroupComponent)); + const iconDebugElem = inputDebugElement.query(By.directive(IgxIconComponent)); + expect(iconDebugElem.componentInstance.name).toEqual('in'); const input = QueryBuilderFunctions.getQueryBuilderValueInput(fix).querySelector('input'); // Verify value input placeholder @@ -914,8 +916,10 @@ describe('IgxQueryBuilder', () => { QueryBuilderFunctions.selectOperatorInEditModeExpression(fix, 11); // Select 'Not-In' operator. // Verify operator icon - // const operatorInputGroup = QueryBuilderFunctions.getQueryBuilderOperatorSelect(fix).querySelector('igx-input-group') as HTMLElement; - // expect(operatorInputGroup.querySelector('igx-icon').attributes.getNamedItem('ng-reflect-name').nodeValue).toEqual('not-in'); + const operatorSelectDebugElement = fix.debugElement.queryAll(By.directive(IgxSelectComponent))[2]; + const inputDebugElement = operatorSelectDebugElement.query(By.directive(IgxInputGroupComponent)); + const iconDebugElem = inputDebugElement.query(By.directive(IgxIconComponent)); + expect(iconDebugElem.componentInstance.name).toEqual('not-in'); const input = QueryBuilderFunctions.getQueryBuilderValueInput(fix).querySelector('input'); // Verify value input placeholder diff --git a/projects/igniteui-angular/src/lib/test-utils/grid-samples.spec.ts b/projects/igniteui-angular/src/lib/test-utils/grid-samples.spec.ts index 37b8a3a7c66..0103dbe9702 100644 --- a/projects/igniteui-angular/src/lib/test-utils/grid-samples.spec.ts +++ b/projects/igniteui-angular/src/lib/test-utils/grid-samples.spec.ts @@ -13,7 +13,7 @@ import { IgxColumnComponent } from '../grids/columns/column.component'; import { IgxFilteringOperand, IgxNumberFilteringOperand } from '../data-operations/filtering-condition'; import { IFilteringExpressionsTree, FilteringExpressionsTree } from '../data-operations/filtering-expressions-tree'; import { FilteringStrategy, IgxFilterItem } from '../data-operations/filtering-strategy'; -import { ColumnPinningPosition, ISortingOptions, IgxExcelStyleHeaderIconDirective, IgxGridToolbarAdvancedFilteringComponent, IgxSortAscendingHeaderIconDirective, IgxSortDescendingHeaderIconDirective, IgxSortHeaderIconDirective } from '../grids/public_api'; +import { ColumnPinningPosition, ISortingOptions, IgxExcelStyleConditionalFilterComponent, IgxExcelStyleHeaderIconDirective, IgxGridToolbarAdvancedFilteringComponent, IgxSortAscendingHeaderIconDirective, IgxSortDescendingHeaderIconDirective, IgxSortHeaderIconDirective } from '../grids/public_api'; import { IgxRowAddTextDirective, IgxRowEditActionsDirective, IgxRowEditTabStopDirective, IgxRowEditTemplateDirective, IgxRowEditTextDirective } from '../grids/grid.rowEdit.directive'; import { IgxExcelStyleColumnOperationsTemplateDirective, IgxExcelStyleFilterOperationsTemplateDirective, IgxGridExcelStyleFilteringComponent } from '../grids/filtering/excel-style/excel-style-filtering.component'; import { FilteringLogic } from '../data-operations/filtering-expression.interface'; @@ -2782,3 +2782,33 @@ export class ObjectCloneStrategy implements IDataCloneStrategy { export class IgxGridRowEditingDefinedColumnsComponent extends BasicGridComponent { public override data = SampleTestData.foodProductData(); } + +@Component({ + template: ` + + + + + + + + + + + + + + + + + + `, + imports: [IgxGridComponent, IgxColumnComponent, IgxExcelStyleConditionalFilterComponent, IgxGridExcelStyleFilteringComponent, IgxExcelStyleFilterOperationsTemplateDirective] +}) +export class IgxGridConditionalFilteringComponent extends IgxGridFilteringComponent { +} diff --git a/src/app/grid-cellMerging/grid-cellMerging.component.html b/src/app/grid-cellMerging/grid-cellMerging.component.html index 73233eb9c1c..b578fb8c3ef 100644 --- a/src/app/grid-cellMerging/grid-cellMerging.component.html +++ b/src/app/grid-cellMerging/grid-cellMerging.component.html @@ -50,7 +50,7 @@

Grid with cell merge

Value: {{val}},Index: {{cell.row.index}} - + @@ -70,8 +70,7 @@

Grid with cell merge

- - + diff --git a/src/app/grid-cellMerging/grid-cellMerging.component.ts b/src/app/grid-cellMerging/grid-cellMerging.component.ts index 3374c5e606f..19c7ed681e1 100644 --- a/src/app/grid-cellMerging/grid-cellMerging.component.ts +++ b/src/app/grid-cellMerging/grid-cellMerging.component.ts @@ -38,7 +38,7 @@ import { INVOICE_DATA } from '../shared/invoiceData'; FormsModule, IgxColumnComponent, IgxGridComponent, - IgxPaginatorComponent, + // IgxPaginatorComponent, IgxActionStripComponent, IgxGridPinningActionsComponent, IgxGridToolbarComponent, @@ -66,6 +66,17 @@ export class GridCellMergingComponent { @ViewChild('grid1', { static: true }) public grid: IgxGridComponent; public data = INVOICE_DATA; + constructor(){ + const allData = INVOICE_DATA + const length = INVOICE_DATA.length; + for (let i = 1; i <= 600_000; i++) { + const rnd = Math.floor(Math.random() * length); + allData.push(Object.assign({}, INVOICE_DATA[rnd])); + } + + this.data = allData; + } + public toggleStrategy() { if (this.treeGridMergeStrategy instanceof ByLevelTreeGridMergeStrategy) { this.treeGridMergeStrategy = new DefaultTreeGridMergeStrategy();