diff --git a/CHANGELOG.md b/CHANGELOG.md index 8ee6fbc890..8abb306a74 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.2.2](https://github.com/ionic-team/ionic-framework/compare/v8.2.1...v8.2.2) (2024-06-12) + + +### Bug Fixes + +* **refresher:** show when content is fullscreen ([#29608](https://github.com/ionic-team/ionic-framework/issues/29608)) ([5cdfac8](https://github.com/ionic-team/ionic-framework/commit/5cdfac89f5389cb3009427183f7034ba05788bc2)), closes [#18714](https://github.com/ionic-team/ionic-framework/issues/18714) + + + + + ## [8.2.1](https://github.com/ionic-team/ionic-framework/compare/v8.2.0...v8.2.1) (2024-06-05) * **react:** export InputInputEventDetail type ([#29512](https://github.com/ionic-team/ionic-framework/issues/29512)) ([624ceba](https://github.com/ionic-team/ionic-framework/commit/624ceba2e128bb13a3afe4c35883f603f5488d0e)), closes [#29518](https://github.com/ionic-team/ionic-framework/issues/29518) diff --git a/core/CHANGELOG.md b/core/CHANGELOG.md index 40a59a742c..b51e62cf8d 100644 --- a/core/CHANGELOG.md +++ b/core/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.2.2](https://github.com/ionic-team/ionic-framework/compare/v8.2.1...v8.2.2) (2024-06-12) + + +### Bug Fixes + +* **refresher:** show when content is fullscreen ([#29608](https://github.com/ionic-team/ionic-framework/issues/29608)) ([5cdfac8](https://github.com/ionic-team/ionic-framework/commit/5cdfac89f5389cb3009427183f7034ba05788bc2)), closes [#18714](https://github.com/ionic-team/ionic-framework/issues/18714) + + + + + ## [8.2.1](https://github.com/ionic-team/ionic-framework/compare/v8.2.0...v8.2.1) (2024-06-05) **Note:** Version bump only for package @ionic/core diff --git a/core/Dockerfile b/core/Dockerfile index ac5bbe3bf7..901fdf2e05 100644 --- a/core/Dockerfile +++ b/core/Dockerfile @@ -1,5 +1,5 @@ # Get Playwright -FROM mcr.microsoft.com/playwright:v1.44.0 +FROM mcr.microsoft.com/playwright:v1.44.1 # Set the working directory WORKDIR /ionic diff --git a/core/package-lock.json b/core/package-lock.json index 2988458890..c5fbc031e4 100644 --- a/core/package-lock.json +++ b/core/package-lock.json @@ -1,12 +1,12 @@ { "name": "@ionic/core", - "version": "8.2.1", + "version": "8.2.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ionic/core", - "version": "8.2.1", + "version": "8.2.2", "license": "MIT", "dependencies": { "@stencil/core": "^4.17.2", @@ -19,6 +19,7 @@ "@capacitor/haptics": "^6.0.0", "@capacitor/keyboard": "^6.0.0", "@capacitor/status-bar": "^6.0.0", + "@clack/prompts": "^0.7.0", "@ionic/eslint-config": "^0.3.0", "@ionic/prettier-config": "^2.0.0", "@playwright/test": "^1.39.0", @@ -57,12 +58,12 @@ "dev": true }, "node_modules/@axe-core/playwright": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@axe-core/playwright/-/playwright-4.9.0.tgz", - "integrity": "sha512-Q1Lz75dNsX38jof+aev7RficDMdH/HLOLySkDdXR0fUoeFcLdw4UNgDO2CNNP4CTpoesEdfYRdd6VmDXjhBgbA==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@axe-core/playwright/-/playwright-4.9.1.tgz", + "integrity": "sha512-8m4WZbZq7/aq7ZY5IG8GqV+ZdvtGn/iJdom+wBg+iv/3BAOBIfNQtIu697a41438DzEEyptXWmC3Xl5Kx/o9/g==", "dev": true, "dependencies": { - "axe-core": "~4.9.0" + "axe-core": "~4.9.1" }, "peerDependencies": { "playwright-core": ">= 1.0.0" @@ -674,6 +675,43 @@ "@capacitor/core": "^6.0.0" } }, + "node_modules/@clack/core": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@clack/core/-/core-0.3.4.tgz", + "integrity": "sha512-H4hxZDXgHtWTwV3RAVenqcC4VbJZNegbBjlPvzOzCouXtS2y3sDvlO3IsbrPNWuLWPPlYVYPghQdSF64683Ldw==", + "dev": true, + "dependencies": { + "picocolors": "^1.0.0", + "sisteransi": "^1.0.5" + } + }, + "node_modules/@clack/prompts": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-0.7.0.tgz", + "integrity": "sha512-0MhX9/B4iL6Re04jPrttDm+BsP8y6mS7byuv0BvXgdXhbV5PdlsHt55dvNsuBCPZ7xq1oTAOOuotR9NFbQyMSA==", + "bundleDependencies": [ + "is-unicode-supported" + ], + "dev": true, + "dependencies": { + "@clack/core": "^0.3.3", + "is-unicode-supported": "*", + "picocolors": "^1.0.0", + "sisteransi": "^1.0.5" + } + }, + "node_modules/@clack/prompts/node_modules/is-unicode-supported": { + "version": "1.3.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -1764,12 +1802,12 @@ } }, "node_modules/@playwright/test": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.44.0.tgz", - "integrity": "sha512-rNX5lbNidamSUorBhB4XZ9SQTjAqfe5M+p37Z8ic0jPFBMo5iCtQz1kRWkEMg+rYOKSlVycpQmpqjSFq7LXOfg==", + "version": "1.44.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.44.1.tgz", + "integrity": "sha512-1hZ4TNvD5z9VuhNJ/walIjvMVvYkZKf71axoF/uiAqpntQJXpG64dlXhoDXE3OczPuTuvjf/M5KWFg5VAVUS3Q==", "dev": true, "dependencies": { - "playwright": "1.44.0" + "playwright": "1.44.1" }, "bin": { "playwright": "cli.js" @@ -2776,9 +2814,9 @@ } }, "node_modules/axe-core": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.9.0.tgz", - "integrity": "sha512-H5orY+M2Fr56DWmMFpMrq5Ge93qjNdPVqzBv5gWK3aD1OvjBEJlEzxf09z93dGVQeI0LiW+aCMIx1QtShC/zUw==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.9.1.tgz", + "integrity": "sha512-QbUdXJVTpvUTHU7871ppZkdOLBeGUKBQWHkHrvN2V9IQWGMt61zf3B45BtzjxEJzYuj0JBjBZP/hmYS/R9pmAw==", "dev": true, "engines": { "node": ">=4" @@ -8498,12 +8536,12 @@ } }, "node_modules/playwright": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.44.0.tgz", - "integrity": "sha512-F9b3GUCLQ3Nffrfb6dunPOkE5Mh68tR7zN32L4jCk4FjQamgesGay7/dAAe1WaMEGV04DkdJfcJzjoCKygUaRQ==", + "version": "1.44.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.44.1.tgz", + "integrity": "sha512-qr/0UJ5CFAtloI3avF95Y0L1xQo6r3LQArLIg/z/PoGJ6xa+EwzrwO5lpNr/09STxdHuUoP2mvuELJS+hLdtgg==", "dev": true, "dependencies": { - "playwright-core": "1.44.0" + "playwright-core": "1.44.1" }, "bin": { "playwright": "cli.js" @@ -8516,9 +8554,9 @@ } }, "node_modules/playwright-core": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.44.0.tgz", - "integrity": "sha512-ZTbkNpFfYcGWohvTTl+xewITm7EOuqIqex0c7dNZ+aXsbrLj0qI8XlGKfPpipjm0Wny/4Lt4CJsWJk1stVS5qQ==", + "version": "1.44.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.44.1.tgz", + "integrity": "sha512-wh0JWtYTrhv1+OSsLPgFzGzt67Y7BE/ZS3jEqgGBlp2ppp1ZDj8c+9IARNW4dwf1poq5MgHreEM2KV/GuR4cFA==", "dev": true, "bin": { "playwright-core": "cli.js" @@ -10779,12 +10817,12 @@ }, "dependencies": { "@axe-core/playwright": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@axe-core/playwright/-/playwright-4.9.0.tgz", - "integrity": "sha512-Q1Lz75dNsX38jof+aev7RficDMdH/HLOLySkDdXR0fUoeFcLdw4UNgDO2CNNP4CTpoesEdfYRdd6VmDXjhBgbA==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@axe-core/playwright/-/playwright-4.9.1.tgz", + "integrity": "sha512-8m4WZbZq7/aq7ZY5IG8GqV+ZdvtGn/iJdom+wBg+iv/3BAOBIfNQtIu697a41438DzEEyptXWmC3Xl5Kx/o9/g==", "dev": true, "requires": { - "axe-core": "~4.9.0" + "axe-core": "~4.9.1" } }, "@babel/code-frame": { @@ -11237,6 +11275,35 @@ "dev": true, "requires": {} }, + "@clack/core": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@clack/core/-/core-0.3.4.tgz", + "integrity": "sha512-H4hxZDXgHtWTwV3RAVenqcC4VbJZNegbBjlPvzOzCouXtS2y3sDvlO3IsbrPNWuLWPPlYVYPghQdSF64683Ldw==", + "dev": true, + "requires": { + "picocolors": "^1.0.0", + "sisteransi": "^1.0.5" + } + }, + "@clack/prompts": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-0.7.0.tgz", + "integrity": "sha512-0MhX9/B4iL6Re04jPrttDm+BsP8y6mS7byuv0BvXgdXhbV5PdlsHt55dvNsuBCPZ7xq1oTAOOuotR9NFbQyMSA==", + "dev": true, + "requires": { + "@clack/core": "^0.3.3", + "is-unicode-supported": "*", + "picocolors": "^1.0.0", + "sisteransi": "^1.0.5" + }, + "dependencies": { + "is-unicode-supported": { + "version": "1.3.0", + "bundled": true, + "dev": true + } + } + }, "@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -12014,12 +12081,12 @@ "optional": true }, "@playwright/test": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.44.0.tgz", - "integrity": "sha512-rNX5lbNidamSUorBhB4XZ9SQTjAqfe5M+p37Z8ic0jPFBMo5iCtQz1kRWkEMg+rYOKSlVycpQmpqjSFq7LXOfg==", + "version": "1.44.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.44.1.tgz", + "integrity": "sha512-1hZ4TNvD5z9VuhNJ/walIjvMVvYkZKf71axoF/uiAqpntQJXpG64dlXhoDXE3OczPuTuvjf/M5KWFg5VAVUS3Q==", "dev": true, "requires": { - "playwright": "1.44.0" + "playwright": "1.44.1" } }, "@rollup/plugin-node-resolve": { @@ -12721,9 +12788,9 @@ } }, "axe-core": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.9.0.tgz", - "integrity": "sha512-H5orY+M2Fr56DWmMFpMrq5Ge93qjNdPVqzBv5gWK3aD1OvjBEJlEzxf09z93dGVQeI0LiW+aCMIx1QtShC/zUw==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.9.1.tgz", + "integrity": "sha512-QbUdXJVTpvUTHU7871ppZkdOLBeGUKBQWHkHrvN2V9IQWGMt61zf3B45BtzjxEJzYuj0JBjBZP/hmYS/R9pmAw==", "dev": true }, "babel-jest": { @@ -16917,19 +16984,19 @@ } }, "playwright": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.44.0.tgz", - "integrity": "sha512-F9b3GUCLQ3Nffrfb6dunPOkE5Mh68tR7zN32L4jCk4FjQamgesGay7/dAAe1WaMEGV04DkdJfcJzjoCKygUaRQ==", + "version": "1.44.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.44.1.tgz", + "integrity": "sha512-qr/0UJ5CFAtloI3avF95Y0L1xQo6r3LQArLIg/z/PoGJ6xa+EwzrwO5lpNr/09STxdHuUoP2mvuELJS+hLdtgg==", "dev": true, "requires": { "fsevents": "2.3.2", - "playwright-core": "1.44.0" + "playwright-core": "1.44.1" } }, "playwright-core": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.44.0.tgz", - "integrity": "sha512-ZTbkNpFfYcGWohvTTl+xewITm7EOuqIqex0c7dNZ+aXsbrLj0qI8XlGKfPpipjm0Wny/4Lt4CJsWJk1stVS5qQ==", + "version": "1.44.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.44.1.tgz", + "integrity": "sha512-wh0JWtYTrhv1+OSsLPgFzGzt67Y7BE/ZS3jEqgGBlp2ppp1ZDj8c+9IARNW4dwf1poq5MgHreEM2KV/GuR4cFA==", "dev": true }, "postcss": { diff --git a/core/package.json b/core/package.json index 9e00e3b542..5a6912c75e 100644 --- a/core/package.json +++ b/core/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/core", - "version": "8.2.1", + "version": "8.2.2", "description": "Base components for Ionic", "keywords": [ "ionic", @@ -41,6 +41,7 @@ "@capacitor/haptics": "^6.0.0", "@capacitor/keyboard": "^6.0.0", "@capacitor/status-bar": "^6.0.0", + "@clack/prompts": "^0.7.0", "@ionic/eslint-config": "^0.3.0", "@ionic/prettier-config": "^2.0.0", "@playwright/test": "^1.39.0", @@ -102,7 +103,8 @@ "docker.build": "docker build -t ionic-playwright .", "test.e2e.docker": "npm run docker.build && node ./scripts/docker.mjs", "test.e2e.docker.update-snapshots": "npm run test.e2e.docker -- --update-snapshots", - "test.e2e.docker.ci": "npm run docker.build && CI=true node ./scripts/docker.mjs" + "test.e2e.docker.ci": "npm run docker.build && CI=true node ./scripts/docker.mjs", + "test.e2e.script": "node scripts/testing/e2e-script.mjs" }, "author": "Ionic Team", "license": "MIT", diff --git a/core/scripts/testing/e2e-script.mjs b/core/scripts/testing/e2e-script.mjs new file mode 100644 index 0000000000..794447bf61 --- /dev/null +++ b/core/scripts/testing/e2e-script.mjs @@ -0,0 +1,260 @@ +// The purpose of this script is to provide a way run the E2E tests +// without having the developer to manually run multiple commands based +// on the desired end result. +// E.g. update the local ground truths for a specific component or +// open the Playwright report after running the E2E tests. + +import { + intro, + outro, + confirm, + spinner, + isCancel, + cancel, + text, + log, +} from '@clack/prompts'; +import { exec, spawn } from 'child_process'; +import fs from 'node:fs'; +import { setTimeout as sleep } from 'node:timers/promises'; +import util from 'node:util'; +import color from 'picocolors'; + +async function main() { + const execAsync = util.promisify(exec); + const cleanUpFiles = async () => { + // Clean up the local ground truths. + const cleanUp = spinner(); + + // Inform the user that the local ground truths are being cleaned up. + cleanUp.start('Restoring local ground truths'); + + // Reset the local ground truths. + await execAsync('git reset -- src/**/*-linux.png').catch((error) => { + cleanUp.stop('Failed to reset local ground truths'); + console.error(error); + return process.exit(0); + }); + + // Restore the local ground truths. + await execAsync('git restore -- src/**/*-linux.png').catch((error) => { + cleanUp.stop('Failed to restore local ground truths'); + console.error(error); + return process.exit(0); + }); + + // Inform the user that the local ground truths have been cleaned up. + cleanUp.stop('Local ground truths have been restored to their original state in order to avoid committing them.'); + }; + + intro(color.inverse(' Update Local Ground Truths')); + + // Ask user for the component name they want to test. + const componentValue = await text({ + message: 'Enter the component or path you want to test (e.g. chip, src/components/chip)', + placeholder: 'Empty for all components', + }); + + // User cancelled the operation with `Ctrl+C` or `CMD+C`. + if (isCancel(componentValue)) { + cancel('Operation cancelled'); + return process.exit(0); + } + + // Ask user if they want to update their local ground truths. + const shouldUpdateTruths = await confirm({ + message: 'Do you want to update your local ground truths?', + }); + + // User cancelled the operation with `Ctrl+C` or `CMD+C`. + if (isCancel(shouldUpdateTruths)) { + cancel('Operation cancelled'); + return process.exit(0); + } + + if (shouldUpdateTruths) { + const defaultBaseBranch = 'main'; + + // Ask user for the base branch. + let baseBranch = await text({ + message: 'Enter the base branch name:', + placeholder: `default: ${defaultBaseBranch}`, + }) + + // User cancelled the operation with `Ctrl+C` or `CMD+C`. + if (isCancel(baseBranch)) { + cancel('Operation cancelled'); + return process.exit(0); + } + + // User didn't provide a base branch. + if (!baseBranch) { + baseBranch = defaultBaseBranch; + } + + /** + * The provided base branch needs to be fetched. + * This ensures that the local base branch is up-to-date with the + * remote base branch. Otherwise, there might be errors stating that + * certain files don't exist in the local base branch. + */ + const fetchBaseBranch = spinner(); + + // Inform the user that the base branch is being fetched. + fetchBaseBranch.start(`Fetching "${baseBranch}" to have the latest changes`); + + // Fetch the base branch. + await execAsync(`git fetch origin ${baseBranch}`).catch((error) => { + fetchBaseBranch.stop(`Failed to fetch "${baseBranch}"`); + console.error(error); + return process.exit(0); + }); + + // Inform the user that the base branch has been fetched. + fetchBaseBranch.stop(`Fetched "${baseBranch}"`); + + + const updateGroundTruth = spinner(); + + // Inform the user that the local ground truths are being updated. + updateGroundTruth.start('Updating local ground truths'); + + // Check if user provided an existing file or directory. + const isValidLocation = fs.existsSync(componentValue); + + // User provided an existing file or directory. + if (isValidLocation) { + const stats = fs.statSync(componentValue); + + // User provided a file as the component. + // ex: `componentValue` = `src/components/chip/test/basic/chip.e2e.ts` + if (stats.isFile()) { + // Update the local ground truths for the provided path. + await execAsync(`git checkout origin/${baseBranch} -- ${componentValue}-snapshots/*-linux.png`).catch((error) => { + updateGroundTruth.stop('Failed to update local ground truths'); + console.error(error); + return process.exit(0); + }); + } + + // User provided a directory as the component. + // ex: `componentValue` = `src/components/chip` + if (stats.isDirectory()) { + // Update the local ground truths for the provided directory. + await execAsync(`git checkout origin/${baseBranch} -- ${componentValue}/test/*/*.e2e.ts-snapshots/*-linux.png`).catch((error) => { + updateGroundTruth.stop('Failed to update local ground truths'); + console.error(error); + return process.exit(0); + }); + } + } + // User provided a component name as the component. + // ex: `componentValue` = `chip` + else if (componentValue) { + // Update the local ground truths for the provided component. + await execAsync(`git checkout origin/${baseBranch} -- src/components/${componentValue}/test/*/${componentValue}.e2e.ts-snapshots/*-linux.png`).catch((error) => { + updateGroundTruth.stop('Failed to update local ground truths'); + console.error(error); + return process.exit(0); + }); + } + // User provided an empty string. + else { + // Update the local ground truths for all components. + await execAsync(`git checkout origin/${baseBranch} -- src/components/*/test/*/*.e2e.ts-snapshots/*-linux.png`).catch((error) => { + updateGroundTruth.stop('Failed to update local ground truths'); + console.error(error); + return process.exit(0); + }); + } + + // Inform the user that the local ground truths have been updated. + updateGroundTruth.stop('Updated local ground truths'); + } + + const buildCore = spinner(); + + // Inform the user that the core is being built. + buildCore.start('Building core'); + + /** + * Build core + * Otherwise, the uncommitted changes will not be reflected in the tests because: + * - popping the stash doesn't trigger a re-render even if `npm start` is running + * - app is not running the `npm start` command + */ + await execAsync('npm run build').catch((error) => { + // Clean up the local ground truths. + cleanUpFiles(); + + buildCore.stop('Failed to build core'); + console.error(error); + return process.exit(0); + }); + + buildCore.stop('Built core'); + + const runE2ETests = spinner(); + + // Inform the user that the E2E tests are being run. + runE2ETests.start('Running E2E tests'); + + // User provided a component value. + if (componentValue) { + await execAsync(`npm run test.e2e.docker.ci ${componentValue}`).catch((error) => { + // Clean up the local ground truths. + cleanUpFiles(); + + runE2ETests.stop('Failed to run E2E tests'); + console.error(error); + return process.exit(0); + }); + } else { + await execAsync('npm run test.e2e.docker.ci').catch((error) => { + // Clean up the local ground truths. + cleanUpFiles(); + + runE2ETests.stop('Failed to run E2E tests'); + console.error(error); + return process.exit(0); + }); + } + + runE2ETests.stop('Ran E2E tests'); + + // Clean up the local ground truths. + await cleanUpFiles(); + + // Ask user if they want to open the Playwright report. + const shouldOpenReport = await confirm({ + message: 'Do you want to open the Playwright report?', + }); + + // User cancelled the operation with `Ctrl+C` or `CMD+C`. + if (isCancel(shouldOpenReport)) { + cancel('Operation cancelled'); + return process.exit(0); + } + + // User chose to open the Playwright report. + if (shouldOpenReport) { + // Use spawn to display the server information and the key to quit the server. + spawn('npx', ['playwright', 'show-report'], { + stdio: 'inherit', + }); + } else { + // Inform the user that the Playwright report can be opened by running the following command. + log.info('If you change your mind, you can open the Playwright report by running the following command:'); + log.info(color.bold('npx playwright show-report')); + } + + if (shouldOpenReport) { + outro("You're all set! Don't forget to quit serving the Playwright report when you're done."); + } else { + outro("You're all set!"); + } + + await sleep(1000); +} + +main().catch(console.error); diff --git a/core/src/components/refresher/refresher.tsx b/core/src/components/refresher/refresher.tsx index 0d17f05821..63a637efe9 100644 --- a/core/src/components/refresher/refresher.tsx +++ b/core/src/components/refresher/refresher.tsx @@ -50,6 +50,7 @@ export class Refresher implements ComponentInterface { private pointerDown = false; private needsCompletion = false; private didRefresh = false; + private contentFullscreen = false; private lastVelocityY = 0; private elementToTransform?: HTMLElement; private animations: Animation[] = []; @@ -478,6 +479,12 @@ export class Refresher implements ComponentInterface { * Query the background content element from the host ion-content element directly. */ this.backgroundContentEl = await contentEl.getBackgroundElement(); + /** + * Check if the content element is fullscreen to apply the correct styles + * when the refresher is refreshing. Otherwise, the refresher will be + * hidden because it is positioned behind the background content element. + */ + this.contentFullscreen = contentEl.fullscreen; if (await shouldUseNativeRefresher(this.el, getIonMode(this))) { this.setupNativeRefresher(contentEl); @@ -580,6 +587,15 @@ export class Refresher implements ComponentInterface { this.progress = 0; this.state = RefresherState.Inactive; this.memoizeOverflowStyle(); + + /** + * If the content is fullscreen, then we need to + * set the offset-top style on the background content + * element to ensure that the refresher is shown. + */ + if (this.contentFullscreen && this.backgroundContentEl) { + this.backgroundContentEl.style.setProperty('--offset-top', '0px'); + } } private onMove(detail: GestureDetail) { @@ -737,6 +753,18 @@ export class Refresher implements ComponentInterface { * user can scroll again. */ this.setCss(0, '0ms', false, '', true); + + /** + * Reset the offset-top style on the background content + * when the refresher is no longer refreshing and the + * content is fullscreen. + * + * This ensures that the behavior of background content + * does not change when refreshing is complete. + */ + if (this.contentFullscreen && this.backgroundContentEl) { + this.backgroundContentEl?.style.removeProperty('--offset-top'); + } }, 600); // reset the styles on the scroll element diff --git a/core/src/components/refresher/test/fullscreen/index.html b/core/src/components/refresher/test/fullscreen/index.html new file mode 100644 index 0000000000..be1b30f7b0 --- /dev/null +++ b/core/src/components/refresher/test/fullscreen/index.html @@ -0,0 +1,103 @@ + + + + + Refresher - Basic + + + + + + + + + + + + + + + Pull To Refresh + + + + + + + + + +

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean sed tellus nec mauris auctor dignissim + fermentum in risus. Sed nec convallis sapien, id tincidunt enim. Mauris ornare eleifend nunc id mattis. Fusce + augue diam, sagittis nec posuere at, consectetur tempor lectus. Nulla at lectus eget mauris iaculis malesuada + mollis sed neque. Curabitur et risus tristique, malesuada mauris finibus, elementum massa. Proin lacinia + mauris quis ligula blandit ullamcorper. Donec ut posuere lorem. In volutpat magna vitae tellus posuere + pulvinar. Nam varius ligula justo, nec placerat lacus pharetra ac. Aenean massa orci, tristique in nisl ut, + aliquet consectetur libero. Etiam luctus placerat vulputate. Aliquam ipsum massa, porttitor at mollis ut, + pretium sit amet mi. In neque mauris, placerat et neque vel, tempor interdum dolor. Suspendisse gravida + malesuada tellus, vel dapibus nisl dignissim vel. Cras ut nulla sit amet erat malesuada euismod vel a nulla. +

+

+ Phasellus sit amet iaculis odio, eget feugiat erat. Etiam sit amet turpis sit amet massa viverra maximus. + Aenean venenatis porttitor pharetra. Fusce vulputate urna purus, vel efficitur mauris auctor non. Etiam libero + odio, sodales in velit a, faucibus venenatis erat. Ut convallis sit amet urna in ultrices. Cras neque est, + vehicula sed lorem ac, placerat commodo elit. Praesent turpis metus, elementum eget iaculis ac, elementum in + odio. Nunc et elit faucibus, condimentum mauris consequat, ornare dolor. Sed ac lectus a est blandit tempor. + Etiam lobortis tristique maximus. +

+

+ Quisque tempus porttitor massa, vel condimentum risus finibus a. Aliquam viverra maximus odio, id ornare justo + tristique ac. Mauris euismod arcu eget neque sagittis rutrum. Ut vehicula porta lacus nec lobortis. Vestibulum + et elit ultrices, lacinia metus in, lobortis est. Vivamus nisi justo, venenatis sit amet arcu ac, congue + faucibus justo. Duis volutpat posuere enim, vel sagittis elit dictum et. Sed et congue mauris. Nam venenatis + venenatis risus, ac condimentum neque sagittis sed. In eget nulla ultricies urna sollicitudin posuere. Aenean + sagittis congue mauris. Proin nec libero mi. In hac habitasse platea dictumst. Praesent nunc nulla, dictum id + molestie sed, pretium vitae turpis. +

+

+ Pellentesque vitae dapibus lacus. Nullam suscipit ornare risus quis ullamcorper. Nullam feugiat, sapien et + sodales fermentum, risus ligula semper risus, id efficitur ligula augue id diam. Suspendisse lobortis est sit + amet quam facilisis, ut vestibulum nunc dignissim. Donec at vestibulum magna. Maecenas maximus pretium metus. + Phasellus congue sapien vel odio imperdiet, nec mollis odio euismod. Sed vel eros ut sapien accumsan + condimentum vehicula vitae lectus. Donec sed efficitur lorem. Aenean tristique mi libero, eleifend tincidunt + libero finibus at. Mauris condimentum fermentum rutrum. +

+

+ Nulla tristique ultricies suscipit. Donec non ornare elit. Vivamus id pretium mauris, nec sagittis leo. Fusce + mattis eget est id sollicitudin. Suspendisse dictum sem magna, in imperdiet metus suscipit et. Suspendisse + enim enim, venenatis et orci eu, suscipit congue lacus. Praesent vel ligula non eros tempor interdum. Proin + justo orci, ultricies vitae diam sed, semper consectetur ligula. Aenean finibus ante velit, nec efficitur + libero cursus cursus. Duis mi nunc, imperdiet sed condimentum vel, porttitor ut lacus. Quisque dui ipsum, + vehicula sed vestibulum id, semper vel libero. Suspendisse tincidunt mollis condimentum. Nulla facilisi. Etiam + neque nisl, egestas nec iaculis sed, tristique faucibus sem. Sed mollis dui quis ligula cursus rutrum. +

+
+
+ + + + + diff --git a/core/src/components/refresher/test/fullscreen/refresher.e2e.ts b/core/src/components/refresher/test/fullscreen/refresher.e2e.ts new file mode 100644 index 0000000000..789f036a8c --- /dev/null +++ b/core/src/components/refresher/test/fullscreen/refresher.e2e.ts @@ -0,0 +1,84 @@ +import { expect } from '@playwright/test'; +import { configs, test } from '@utils/test/playwright'; + +import { pullToRefresh } from '../test.utils'; + +/** + * This behavior does not vary across directions. + */ +configs({ directions: ['ltr'] }).forEach(({ title, config, screenshot }) => { + test.describe(title('refresher: fullscreen content'), () => { + test.beforeEach(async ({ page }) => { + /** + * Do not call `complete()` from `ion-refresher` in this test. + * This will allow the refresher to "pause" while refreshing. + * By pausing, the test can verify that the refresher is + * completely visible when the content is fullscreen. + */ + await page.setContent( + ` + + + Pull To Refresh + + + + + + + + + +

Pull this content down to trigger the refresh.

+
+ + + `, + config + ); + }); + + // Bug only occurs with the legacy refresher. + test.describe('legacy refresher', () => { + test('should display when content is fullscreen', async ({ page, browserName }) => { + test.info().annotations.push({ + type: 'issue', + description: 'https://github.com/ionic-team/ionic-framework/issues/18714', + }); + + const refresher = page.locator('ion-refresher'); + + await pullToRefresh(page); + + if (browserName === 'firefox') { + /** + * The drag is highlighting the text in Firefox for + * some reason. + * + * Clicking the mouse will remove the highlight and + * be more consistent with other browsers. This + * does not happen in Firefox, just when running + * in Playwright. + */ + await page.mouse.click(0, 0); + } + + await expect(refresher).toHaveScreenshot(screenshot('refresher-legacy-content-fullscreen')); + }); + }); + }); +}); diff --git a/core/src/components/refresher/test/fullscreen/refresher.e2e.ts-snapshots/refresher-legacy-content-fullscreen-ios-ltr-Mobile-Chrome-linux.png b/core/src/components/refresher/test/fullscreen/refresher.e2e.ts-snapshots/refresher-legacy-content-fullscreen-ios-ltr-Mobile-Chrome-linux.png new file mode 100644 index 0000000000..6eff146a19 Binary files /dev/null and b/core/src/components/refresher/test/fullscreen/refresher.e2e.ts-snapshots/refresher-legacy-content-fullscreen-ios-ltr-Mobile-Chrome-linux.png differ diff --git a/core/src/components/refresher/test/fullscreen/refresher.e2e.ts-snapshots/refresher-legacy-content-fullscreen-ios-ltr-Mobile-Firefox-linux.png b/core/src/components/refresher/test/fullscreen/refresher.e2e.ts-snapshots/refresher-legacy-content-fullscreen-ios-ltr-Mobile-Firefox-linux.png new file mode 100644 index 0000000000..f98533116d Binary files /dev/null and b/core/src/components/refresher/test/fullscreen/refresher.e2e.ts-snapshots/refresher-legacy-content-fullscreen-ios-ltr-Mobile-Firefox-linux.png differ diff --git a/core/src/components/refresher/test/fullscreen/refresher.e2e.ts-snapshots/refresher-legacy-content-fullscreen-ios-ltr-Mobile-Safari-linux.png b/core/src/components/refresher/test/fullscreen/refresher.e2e.ts-snapshots/refresher-legacy-content-fullscreen-ios-ltr-Mobile-Safari-linux.png new file mode 100644 index 0000000000..ac4ba98e19 Binary files /dev/null and b/core/src/components/refresher/test/fullscreen/refresher.e2e.ts-snapshots/refresher-legacy-content-fullscreen-ios-ltr-Mobile-Safari-linux.png differ diff --git a/core/src/components/refresher/test/fullscreen/refresher.e2e.ts-snapshots/refresher-legacy-content-fullscreen-md-ltr-Mobile-Chrome-linux.png b/core/src/components/refresher/test/fullscreen/refresher.e2e.ts-snapshots/refresher-legacy-content-fullscreen-md-ltr-Mobile-Chrome-linux.png new file mode 100644 index 0000000000..251cbbc71c Binary files /dev/null and b/core/src/components/refresher/test/fullscreen/refresher.e2e.ts-snapshots/refresher-legacy-content-fullscreen-md-ltr-Mobile-Chrome-linux.png differ diff --git a/core/src/components/refresher/test/fullscreen/refresher.e2e.ts-snapshots/refresher-legacy-content-fullscreen-md-ltr-Mobile-Firefox-linux.png b/core/src/components/refresher/test/fullscreen/refresher.e2e.ts-snapshots/refresher-legacy-content-fullscreen-md-ltr-Mobile-Firefox-linux.png new file mode 100644 index 0000000000..0c8d2d9fb0 Binary files /dev/null and b/core/src/components/refresher/test/fullscreen/refresher.e2e.ts-snapshots/refresher-legacy-content-fullscreen-md-ltr-Mobile-Firefox-linux.png differ diff --git a/core/src/components/refresher/test/fullscreen/refresher.e2e.ts-snapshots/refresher-legacy-content-fullscreen-md-ltr-Mobile-Safari-linux.png b/core/src/components/refresher/test/fullscreen/refresher.e2e.ts-snapshots/refresher-legacy-content-fullscreen-md-ltr-Mobile-Safari-linux.png new file mode 100644 index 0000000000..45ce09639f Binary files /dev/null and b/core/src/components/refresher/test/fullscreen/refresher.e2e.ts-snapshots/refresher-legacy-content-fullscreen-md-ltr-Mobile-Safari-linux.png differ diff --git a/docs/core/testing/usage-instructions.md b/docs/core/testing/usage-instructions.md index ecc51e1b85..692257ba76 100644 --- a/docs/core/testing/usage-instructions.md +++ b/docs/core/testing/usage-instructions.md @@ -198,9 +198,19 @@ Instead, use the [Update Reference Screenshots GitHub Action](https://github.com 1. Click the **Run workflow** dropdown. 2. Select your branch. -3. Click **Run workflow**. +3. Leave the input field blank. +4. Click **Run workflow**. -This workflow will re-run the screenshot tests. Instead of failing any tests with mismatched screenshots, it will take new ground truth screenshots. These ground truth screenshots will be pushed as a single commit to your branch once the workflow is completed. +This workflow will re-run all of the the screenshot tests. Instead of failing any tests with mismatched screenshots, it will take new ground truth screenshots. These ground truth screenshots will be pushed as a single commit to your branch once the workflow is completed. + +If you want to update ground truths for a specific test, you can pass the test file path as an input to the workflow. This is useful when working on a specific component. + +1. Click the **Run workflow** dropdown. +2. Select your branch. +3. Enter the file path in the input field. Example: `src/components/alert/test/basic/` +4. Click **Run workflow**. + +The input field also accepts component names, such as `alert`. You can enter multiple components by separating them with spaces, for example, `alert button`. For a full list of options, refer to Playwright's [Command Line page](https://playwright.dev/docs/test-cli). ### Verifying Screenshot Differences diff --git a/lerna.json b/lerna.json index 8577fb2ee2..16db7744bf 100644 --- a/lerna.json +++ b/lerna.json @@ -3,5 +3,5 @@ "core", "packages/*" ], - "version": "8.2.1" + "version": "8.2.2" } \ No newline at end of file diff --git a/packages/angular-server/CHANGELOG.md b/packages/angular-server/CHANGELOG.md index e80756735b..55191dcfbe 100644 --- a/packages/angular-server/CHANGELOG.md +++ b/packages/angular-server/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.2.2](https://github.com/ionic-team/ionic-framework/compare/v8.2.1...v8.2.2) (2024-06-12) + +**Note:** Version bump only for package @ionic/angular-server + + + + + ## [8.2.1](https://github.com/ionic-team/ionic-framework/compare/v8.2.0...v8.2.1) (2024-06-05) **Note:** Version bump only for package @ionic/angular-server diff --git a/packages/angular-server/package-lock.json b/packages/angular-server/package-lock.json index 5055f098bb..0caaef2a74 100644 --- a/packages/angular-server/package-lock.json +++ b/packages/angular-server/package-lock.json @@ -1,15 +1,15 @@ { "name": "@ionic/angular-server", - "version": "8.2.1", + "version": "8.2.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ionic/angular-server", - "version": "8.2.1", + "version": "8.2.2", "license": "MIT", "dependencies": { - "@ionic/core": "^8.2.1" + "@ionic/core": "^8.2.2" }, "devDependencies": { "@angular-eslint/eslint-plugin": "^16.0.0", @@ -1119,9 +1119,9 @@ "dev": true }, "node_modules/@ionic/core": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.2.1.tgz", - "integrity": "sha512-nIoCdjzogRmyCoD7UcKUV3LmzkiqDN+TxHhkCTRVeNPFQwC5zuTbYKb714caJ6ixKSDBlDiEaLRIb2zgr57ekw==", + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.2.2.tgz", + "integrity": "sha512-gpWemL5IJjGDJPz6dltHnFyqioRl0sugs2PUXrwPaYwMnTDoRZ6iojYFovCIr5YJN99rHZprOthdcsYR/viGyQ==", "dependencies": { "@stencil/core": "^4.17.2", "ionicons": "^7.2.2", @@ -6953,9 +6953,9 @@ "dev": true }, "@ionic/core": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.2.1.tgz", - "integrity": "sha512-nIoCdjzogRmyCoD7UcKUV3LmzkiqDN+TxHhkCTRVeNPFQwC5zuTbYKb714caJ6ixKSDBlDiEaLRIb2zgr57ekw==", + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.2.2.tgz", + "integrity": "sha512-gpWemL5IJjGDJPz6dltHnFyqioRl0sugs2PUXrwPaYwMnTDoRZ6iojYFovCIr5YJN99rHZprOthdcsYR/viGyQ==", "requires": { "@stencil/core": "^4.17.2", "ionicons": "^7.2.2", diff --git a/packages/angular-server/package.json b/packages/angular-server/package.json index 218cbd3259..c835d81a5a 100644 --- a/packages/angular-server/package.json +++ b/packages/angular-server/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/angular-server", - "version": "8.2.1", + "version": "8.2.2", "description": "Angular SSR Module for Ionic", "keywords": [ "ionic", @@ -62,6 +62,6 @@ }, "prettier": "@ionic/prettier-config", "dependencies": { - "@ionic/core": "^8.2.1" + "@ionic/core": "^8.2.2" } } diff --git a/packages/angular/CHANGELOG.md b/packages/angular/CHANGELOG.md index 92a1c57b4b..ca498b0be9 100644 --- a/packages/angular/CHANGELOG.md +++ b/packages/angular/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.2.2](https://github.com/ionic-team/ionic-framework/compare/v8.2.1...v8.2.2) (2024-06-12) + +**Note:** Version bump only for package @ionic/angular + + + + + ## [8.2.1](https://github.com/ionic-team/ionic-framework/compare/v8.2.0...v8.2.1) (2024-06-05) **Note:** Version bump only for package @ionic/angular diff --git a/packages/angular/package-lock.json b/packages/angular/package-lock.json index b459bae91b..936ed58cdc 100644 --- a/packages/angular/package-lock.json +++ b/packages/angular/package-lock.json @@ -1,15 +1,15 @@ { "name": "@ionic/angular", - "version": "8.2.1", + "version": "8.2.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ionic/angular", - "version": "8.2.1", + "version": "8.2.2", "license": "MIT", "dependencies": { - "@ionic/core": "^8.2.1", + "@ionic/core": "^8.2.2", "ionicons": "^7.0.0", "jsonc-parser": "^3.0.0", "tslib": "^2.3.0" @@ -1398,9 +1398,9 @@ "dev": true }, "node_modules/@ionic/core": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.2.1.tgz", - "integrity": "sha512-nIoCdjzogRmyCoD7UcKUV3LmzkiqDN+TxHhkCTRVeNPFQwC5zuTbYKb714caJ6ixKSDBlDiEaLRIb2zgr57ekw==", + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.2.2.tgz", + "integrity": "sha512-gpWemL5IJjGDJPz6dltHnFyqioRl0sugs2PUXrwPaYwMnTDoRZ6iojYFovCIr5YJN99rHZprOthdcsYR/viGyQ==", "dependencies": { "@stencil/core": "^4.17.2", "ionicons": "^7.2.2", @@ -9820,9 +9820,9 @@ "dev": true }, "@ionic/core": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.2.1.tgz", - "integrity": "sha512-nIoCdjzogRmyCoD7UcKUV3LmzkiqDN+TxHhkCTRVeNPFQwC5zuTbYKb714caJ6ixKSDBlDiEaLRIb2zgr57ekw==", + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.2.2.tgz", + "integrity": "sha512-gpWemL5IJjGDJPz6dltHnFyqioRl0sugs2PUXrwPaYwMnTDoRZ6iojYFovCIr5YJN99rHZprOthdcsYR/viGyQ==", "requires": { "@stencil/core": "^4.17.2", "ionicons": "^7.2.2", diff --git a/packages/angular/package.json b/packages/angular/package.json index 3228ee9270..4d807f4f04 100644 --- a/packages/angular/package.json +++ b/packages/angular/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/angular", - "version": "8.2.1", + "version": "8.2.2", "description": "Angular specific wrappers for @ionic/core", "keywords": [ "ionic", @@ -47,7 +47,7 @@ } }, "dependencies": { - "@ionic/core": "^8.2.1", + "@ionic/core": "^8.2.2", "ionicons": "^7.0.0", "jsonc-parser": "^3.0.0", "tslib": "^2.3.0" diff --git a/packages/docs/CHANGELOG.md b/packages/docs/CHANGELOG.md index 001aba8bd9..fdb16d2d01 100644 --- a/packages/docs/CHANGELOG.md +++ b/packages/docs/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.2.2](https://github.com/ionic-team/ionic-framework/compare/v8.2.1...v8.2.2) (2024-06-12) + +**Note:** Version bump only for package @ionic/docs + + + + + ## [8.2.1](https://github.com/ionic-team/ionic-framework/compare/v8.2.0...v8.2.1) (2024-06-05) **Note:** Version bump only for package @ionic/docs diff --git a/packages/docs/package-lock.json b/packages/docs/package-lock.json index 71839772be..bcde3f440f 100644 --- a/packages/docs/package-lock.json +++ b/packages/docs/package-lock.json @@ -1,12 +1,12 @@ { "name": "@ionic/docs", - "version": "8.2.1", + "version": "8.2.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ionic/docs", - "version": "8.2.1", + "version": "8.2.2", "license": "MIT" } } diff --git a/packages/docs/package.json b/packages/docs/package.json index 47b61f31dd..818a392c84 100644 --- a/packages/docs/package.json +++ b/packages/docs/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/docs", - "version": "8.2.1", + "version": "8.2.2", "description": "Pre-packaged API documentation for the Ionic docs.", "main": "core.json", "types": "core.d.ts", diff --git a/packages/react-router/CHANGELOG.md b/packages/react-router/CHANGELOG.md index 8a3328aa09..5a23b753c1 100644 --- a/packages/react-router/CHANGELOG.md +++ b/packages/react-router/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.2.2](https://github.com/ionic-team/ionic-framework/compare/v8.2.1...v8.2.2) (2024-06-12) + +**Note:** Version bump only for package @ionic/react-router + + + + + ## [8.2.1](https://github.com/ionic-team/ionic-framework/compare/v8.2.0...v8.2.1) (2024-06-05) **Note:** Version bump only for package @ionic/react-router diff --git a/packages/react-router/package-lock.json b/packages/react-router/package-lock.json index b66bd62602..0849384a6b 100644 --- a/packages/react-router/package-lock.json +++ b/packages/react-router/package-lock.json @@ -1,15 +1,15 @@ { "name": "@ionic/react-router", - "version": "8.2.1", + "version": "8.2.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ionic/react-router", - "version": "8.2.1", + "version": "8.2.2", "license": "MIT", "dependencies": { - "@ionic/react": "^8.2.1", + "@ionic/react": "^8.2.2", "tslib": "*" }, "devDependencies": { @@ -238,9 +238,9 @@ "dev": true }, "node_modules/@ionic/core": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.2.1.tgz", - "integrity": "sha512-nIoCdjzogRmyCoD7UcKUV3LmzkiqDN+TxHhkCTRVeNPFQwC5zuTbYKb714caJ6ixKSDBlDiEaLRIb2zgr57ekw==", + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.2.2.tgz", + "integrity": "sha512-gpWemL5IJjGDJPz6dltHnFyqioRl0sugs2PUXrwPaYwMnTDoRZ6iojYFovCIr5YJN99rHZprOthdcsYR/viGyQ==", "dependencies": { "@stencil/core": "^4.17.2", "ionicons": "^7.2.2", @@ -414,11 +414,11 @@ } }, "node_modules/@ionic/react": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/@ionic/react/-/react-8.2.1.tgz", - "integrity": "sha512-2HE5ajIHdBJYR7GFphpNQjBpjGULztm/6sa1Xpk9K440I1v2ipUHdQoZlBMMcM2PQMuBeiMlRmwXgqTAi09/qQ==", + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@ionic/react/-/react-8.2.2.tgz", + "integrity": "sha512-uf369EYjgEU88u65QdOBaTlEv0fy/v5H6ICpaPHNRHgvppkQSE9uWZitZdeBuXQq8+k9OCo1Wn0vzL3znP3nHA==", "dependencies": { - "@ionic/core": "8.2.1", + "@ionic/core": "8.2.2", "ionicons": "^7.0.0", "tslib": "*" }, @@ -4057,9 +4057,9 @@ "dev": true }, "@ionic/core": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.2.1.tgz", - "integrity": "sha512-nIoCdjzogRmyCoD7UcKUV3LmzkiqDN+TxHhkCTRVeNPFQwC5zuTbYKb714caJ6ixKSDBlDiEaLRIb2zgr57ekw==", + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.2.2.tgz", + "integrity": "sha512-gpWemL5IJjGDJPz6dltHnFyqioRl0sugs2PUXrwPaYwMnTDoRZ6iojYFovCIr5YJN99rHZprOthdcsYR/viGyQ==", "requires": { "@stencil/core": "^4.17.2", "ionicons": "^7.2.2", @@ -4163,11 +4163,11 @@ "requires": {} }, "@ionic/react": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/@ionic/react/-/react-8.2.1.tgz", - "integrity": "sha512-2HE5ajIHdBJYR7GFphpNQjBpjGULztm/6sa1Xpk9K440I1v2ipUHdQoZlBMMcM2PQMuBeiMlRmwXgqTAi09/qQ==", + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@ionic/react/-/react-8.2.2.tgz", + "integrity": "sha512-uf369EYjgEU88u65QdOBaTlEv0fy/v5H6ICpaPHNRHgvppkQSE9uWZitZdeBuXQq8+k9OCo1Wn0vzL3znP3nHA==", "requires": { - "@ionic/core": "8.2.1", + "@ionic/core": "8.2.2", "ionicons": "^7.0.0", "tslib": "*" } diff --git a/packages/react-router/package.json b/packages/react-router/package.json index 5dde8be880..e0f67b2e8c 100644 --- a/packages/react-router/package.json +++ b/packages/react-router/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/react-router", - "version": "8.2.1", + "version": "8.2.2", "description": "React Router wrapper for @ionic/react", "keywords": [ "ionic", @@ -36,7 +36,7 @@ "dist/" ], "dependencies": { - "@ionic/react": "^8.2.1", + "@ionic/react": "^8.2.2", "tslib": "*" }, "peerDependencies": { diff --git a/packages/react/CHANGELOG.md b/packages/react/CHANGELOG.md index 89b19b3ff0..f7d1bb9b71 100644 --- a/packages/react/CHANGELOG.md +++ b/packages/react/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.2.2](https://github.com/ionic-team/ionic-framework/compare/v8.2.1...v8.2.2) (2024-06-12) + +**Note:** Version bump only for package @ionic/react + + + + + ## [8.2.1](https://github.com/ionic-team/ionic-framework/compare/v8.2.0...v8.2.1) (2024-06-05) * **react:** export InputInputEventDetail type ([#29512](https://github.com/ionic-team/ionic-framework/issues/29512)) ([624ceba](https://github.com/ionic-team/ionic-framework/commit/624ceba2e128bb13a3afe4c35883f603f5488d0e)), closes [#29518](https://github.com/ionic-team/ionic-framework/issues/29518) diff --git a/packages/react/package-lock.json b/packages/react/package-lock.json index b673c88d50..217cb90b8c 100644 --- a/packages/react/package-lock.json +++ b/packages/react/package-lock.json @@ -1,15 +1,15 @@ { "name": "@ionic/react", - "version": "8.2.1", + "version": "8.2.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ionic/react", - "version": "8.2.1", + "version": "8.2.2", "license": "MIT", "dependencies": { - "@ionic/core": "^8.2.1", + "@ionic/core": "^8.2.2", "ionicons": "^7.0.0", "tslib": "*" }, @@ -798,9 +798,9 @@ "dev": true }, "node_modules/@ionic/core": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.2.1.tgz", - "integrity": "sha512-nIoCdjzogRmyCoD7UcKUV3LmzkiqDN+TxHhkCTRVeNPFQwC5zuTbYKb714caJ6ixKSDBlDiEaLRIb2zgr57ekw==", + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.2.2.tgz", + "integrity": "sha512-gpWemL5IJjGDJPz6dltHnFyqioRl0sugs2PUXrwPaYwMnTDoRZ6iojYFovCIr5YJN99rHZprOthdcsYR/viGyQ==", "dependencies": { "@stencil/core": "^4.17.2", "ionicons": "^7.2.2", @@ -13035,9 +13035,9 @@ "dev": true }, "@ionic/core": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.2.1.tgz", - "integrity": "sha512-nIoCdjzogRmyCoD7UcKUV3LmzkiqDN+TxHhkCTRVeNPFQwC5zuTbYKb714caJ6ixKSDBlDiEaLRIb2zgr57ekw==", + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.2.2.tgz", + "integrity": "sha512-gpWemL5IJjGDJPz6dltHnFyqioRl0sugs2PUXrwPaYwMnTDoRZ6iojYFovCIr5YJN99rHZprOthdcsYR/viGyQ==", "requires": { "@stencil/core": "^4.17.2", "ionicons": "^7.2.2", diff --git a/packages/react/package.json b/packages/react/package.json index 8b973a58d2..d32b695bdb 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/react", - "version": "8.2.1", + "version": "8.2.2", "description": "React specific wrapper for @ionic/core", "keywords": [ "ionic", @@ -39,7 +39,7 @@ "css/" ], "dependencies": { - "@ionic/core": "^8.2.1", + "@ionic/core": "^8.2.2", "ionicons": "^7.0.0", "tslib": "*" }, diff --git a/packages/vue-router/CHANGELOG.md b/packages/vue-router/CHANGELOG.md index 32ca0d31da..44b71ac615 100644 --- a/packages/vue-router/CHANGELOG.md +++ b/packages/vue-router/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.2.2](https://github.com/ionic-team/ionic-framework/compare/v8.2.1...v8.2.2) (2024-06-12) + +**Note:** Version bump only for package @ionic/vue-router + + + + + ## [8.2.1](https://github.com/ionic-team/ionic-framework/compare/v8.2.0...v8.2.1) (2024-06-05) **Note:** Version bump only for package @ionic/vue-router diff --git a/packages/vue-router/package-lock.json b/packages/vue-router/package-lock.json index e52b2709ad..c812b0354a 100644 --- a/packages/vue-router/package-lock.json +++ b/packages/vue-router/package-lock.json @@ -1,15 +1,15 @@ { "name": "@ionic/vue-router", - "version": "8.2.1", + "version": "8.2.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ionic/vue-router", - "version": "8.2.1", + "version": "8.2.2", "license": "MIT", "dependencies": { - "@ionic/vue": "^8.2.1" + "@ionic/vue": "^8.2.2" }, "devDependencies": { "@ionic/eslint-config": "^0.3.0", @@ -661,9 +661,9 @@ "dev": true }, "node_modules/@ionic/core": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.2.1.tgz", - "integrity": "sha512-nIoCdjzogRmyCoD7UcKUV3LmzkiqDN+TxHhkCTRVeNPFQwC5zuTbYKb714caJ6ixKSDBlDiEaLRIb2zgr57ekw==", + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.2.2.tgz", + "integrity": "sha512-gpWemL5IJjGDJPz6dltHnFyqioRl0sugs2PUXrwPaYwMnTDoRZ6iojYFovCIr5YJN99rHZprOthdcsYR/viGyQ==", "dependencies": { "@stencil/core": "^4.17.2", "ionicons": "^7.2.2", @@ -852,11 +852,11 @@ } }, "node_modules/@ionic/vue": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/@ionic/vue/-/vue-8.2.1.tgz", - "integrity": "sha512-rMg8LhWUgRYCFU7+tJOzP9Cfxm5k9YqE1pWPyuf8RtvZ8WnaTNx1D5TQK2/RV63kwukyS5zM3eM6M9iWkoHJQw==", + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@ionic/vue/-/vue-8.2.2.tgz", + "integrity": "sha512-5xIkEX4UHs4Bm15wqG/xBSxUtWdnHv+eFD3dfYGEVhK+M5hp4Vv+YOhHx6xVLKtdQOC3p+ROCXK+7GmCrAv6KQ==", "dependencies": { - "@ionic/core": "8.2.1", + "@ionic/core": "8.2.2", "ionicons": "^7.0.0" } }, @@ -7878,9 +7878,9 @@ "dev": true }, "@ionic/core": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.2.1.tgz", - "integrity": "sha512-nIoCdjzogRmyCoD7UcKUV3LmzkiqDN+TxHhkCTRVeNPFQwC5zuTbYKb714caJ6ixKSDBlDiEaLRIb2zgr57ekw==", + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.2.2.tgz", + "integrity": "sha512-gpWemL5IJjGDJPz6dltHnFyqioRl0sugs2PUXrwPaYwMnTDoRZ6iojYFovCIr5YJN99rHZprOthdcsYR/viGyQ==", "requires": { "@stencil/core": "^4.17.2", "ionicons": "^7.2.2", @@ -7993,11 +7993,11 @@ "requires": {} }, "@ionic/vue": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/@ionic/vue/-/vue-8.2.1.tgz", - "integrity": "sha512-rMg8LhWUgRYCFU7+tJOzP9Cfxm5k9YqE1pWPyuf8RtvZ8WnaTNx1D5TQK2/RV63kwukyS5zM3eM6M9iWkoHJQw==", + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@ionic/vue/-/vue-8.2.2.tgz", + "integrity": "sha512-5xIkEX4UHs4Bm15wqG/xBSxUtWdnHv+eFD3dfYGEVhK+M5hp4Vv+YOhHx6xVLKtdQOC3p+ROCXK+7GmCrAv6KQ==", "requires": { - "@ionic/core": "8.2.1", + "@ionic/core": "8.2.2", "ionicons": "^7.0.0" } }, diff --git a/packages/vue-router/package.json b/packages/vue-router/package.json index 4428c6a018..37d119aef2 100644 --- a/packages/vue-router/package.json +++ b/packages/vue-router/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/vue-router", - "version": "8.2.1", + "version": "8.2.2", "description": "Vue Router integration for @ionic/vue", "scripts": { "test.spec": "jest", @@ -44,7 +44,7 @@ }, "homepage": "https://github.com/ionic-team/ionic-framework#readme", "dependencies": { - "@ionic/vue": "^8.2.1" + "@ionic/vue": "^8.2.2" }, "devDependencies": { "@ionic/eslint-config": "^0.3.0", diff --git a/packages/vue/CHANGELOG.md b/packages/vue/CHANGELOG.md index 898aa20eea..c8eb9d7d6d 100644 --- a/packages/vue/CHANGELOG.md +++ b/packages/vue/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.2.2](https://github.com/ionic-team/ionic-framework/compare/v8.2.1...v8.2.2) (2024-06-12) + +**Note:** Version bump only for package @ionic/vue + + + + + ## [8.2.1](https://github.com/ionic-team/ionic-framework/compare/v8.2.0...v8.2.1) (2024-06-05) **Note:** Version bump only for package @ionic/vue diff --git a/packages/vue/package-lock.json b/packages/vue/package-lock.json index b3fb111fb3..35301971bc 100644 --- a/packages/vue/package-lock.json +++ b/packages/vue/package-lock.json @@ -1,15 +1,15 @@ { "name": "@ionic/vue", - "version": "8.2.1", + "version": "8.2.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ionic/vue", - "version": "8.2.1", + "version": "8.2.2", "license": "MIT", "dependencies": { - "@ionic/core": "^8.2.1", + "@ionic/core": "^8.2.2", "ionicons": "^7.0.0" }, "devDependencies": { @@ -208,9 +208,9 @@ "dev": true }, "node_modules/@ionic/core": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.2.1.tgz", - "integrity": "sha512-nIoCdjzogRmyCoD7UcKUV3LmzkiqDN+TxHhkCTRVeNPFQwC5zuTbYKb714caJ6ixKSDBlDiEaLRIb2zgr57ekw==", + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.2.2.tgz", + "integrity": "sha512-gpWemL5IJjGDJPz6dltHnFyqioRl0sugs2PUXrwPaYwMnTDoRZ6iojYFovCIr5YJN99rHZprOthdcsYR/viGyQ==", "dependencies": { "@stencil/core": "^4.17.2", "ionicons": "^7.2.2", @@ -3959,9 +3959,9 @@ "dev": true }, "@ionic/core": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.2.1.tgz", - "integrity": "sha512-nIoCdjzogRmyCoD7UcKUV3LmzkiqDN+TxHhkCTRVeNPFQwC5zuTbYKb714caJ6ixKSDBlDiEaLRIb2zgr57ekw==", + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.2.2.tgz", + "integrity": "sha512-gpWemL5IJjGDJPz6dltHnFyqioRl0sugs2PUXrwPaYwMnTDoRZ6iojYFovCIr5YJN99rHZprOthdcsYR/viGyQ==", "requires": { "@stencil/core": "^4.17.2", "ionicons": "^7.2.2", diff --git a/packages/vue/package.json b/packages/vue/package.json index 62bffaa9aa..54addac16c 100644 --- a/packages/vue/package.json +++ b/packages/vue/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/vue", - "version": "8.2.1", + "version": "8.2.2", "description": "Vue specific wrapper for @ionic/core", "scripts": { "eslint": "eslint src", @@ -66,7 +66,7 @@ "vue-router": "^4.0.16" }, "dependencies": { - "@ionic/core": "^8.2.1", + "@ionic/core": "^8.2.2", "ionicons": "^7.0.0" }, "vetur": { diff --git a/renovate.json5 b/renovate.json5 index aebf2bac00..96c4c9b2c6 100644 --- a/renovate.json5 +++ b/renovate.json5 @@ -27,7 +27,8 @@ groupName: "playwright", matchFileNames: [ "core/package.json" - ] + ], + "rangeStrategy": "bump" }, { matchDatasources: ["docker"],