diff --git a/.github/ionic-issue-bot.yml b/.github/ionic-issue-bot.yml index 8db735ce2d8..26617b93e51 100644 --- a/.github/ionic-issue-bot.yml +++ b/.github/ionic-issue-bot.yml @@ -1,10 +1,15 @@ triage: - label: triage + label: "holiday triage" removeLabelWhenProjectAssigned: true dryRun: false comment: labels: + - label: "holiday triage" + message: > + Thanks for the issue! This issue has been labeled as `holiday triage`. With the winter holidays quickly approaching, much of the Ionic Team will soon be taking time off. During this time, issue triaging and PR review will be delayed until the team begins to return. After this period, we will work to ensure that all new issues are properly triaged and that new PRs are reviewed. + In the meantime, please read our [Winter Holiday Triage Guide](https://github.com/ionic-team/ionic-framework/issues/22699) for information on how to ensure that your issue is triaged correctly. + Thank you! - label: "help wanted" message: > This issue has been labeled as `help wanted`. This label is added to issues @@ -40,7 +45,7 @@ comment: If the requested feature is something you would find useful for your applications, please react to the original post with 👍 (`+1`). If you would like to provide an additional use case for the feature, please post a comment. - + The team will review this feedback and make a final decision. Any decision will be posted on this thread, but please note that we may ultimately decide not to pursue this feature. diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index e9f0db784f0..faa59edbcca 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -1,11 +1,5 @@ name: 'Ionic Nightly Build' -on: - schedule: - # Run every Monday-Friday - # at 6:00 UTC (6:00 am UTC) - - cron: '00 06 * * 1-5' - jobs: create-nightly-hash: runs-on: ubuntu-latest diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 2210bbbf76a..8020b6d3e12 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -69,16 +69,25 @@ jobs: env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} shell: bash - # Lerna does not automatically bump versions - # of Ionic dependencies that have changed, - # so we do that here. - - name: Bump Package Lock - run: | - lerna exec "npm install --package-lock-only" - git add . - git commit -m "chore(): update package lock files" - git push - shell: bash + + update-package-lock: + # This needs to run after finalize-release + # because we also push to the repo in that + # job. If these jobs ran in parallel then it is + # possible for them to push at the same time. + needs: [finalize-release] + runs-on: ubuntu-latest + steps: + # Lerna does not automatically bump versions + # of Ionic dependencies that have changed, + # so we do that here. + - name: Bump Package Lock + run: | + lerna exec "npm install --package-lock-only" + git add . + git commit -m "chore(): update package lock files" + git push + shell: bash purge-cdn-cache: needs: [release-ionic] diff --git a/CHANGELOG.md b/CHANGELOG.md index 63d10347167..b913d8e8947 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,20 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [7.6.3](https://github.com/ionic-team/ionic-framework/compare/v7.6.2...v7.6.3) (2024-01-03) + + +### Bug Fixes + +* **datetime:** selected today button renders correctly on ios ([#28740](https://github.com/ionic-team/ionic-framework/issues/28740)) ([2f99aea](https://github.com/ionic-team/ionic-framework/commit/2f99aeae6f71d5ffd1880f2c549227ecf71becf3)) +* **nav, router-outlet:** ios page transition does not cover menu on larger screens ([#28745](https://github.com/ionic-team/ionic-framework/issues/28745)) ([878eec6](https://github.com/ionic-team/ionic-framework/commit/878eec6ea21d76586466d01e13e5e842e69eaceb)), closes [#28737](https://github.com/ionic-team/ionic-framework/issues/28737) +* **radio-group:** radio disabled prop can be undefined ([#28712](https://github.com/ionic-team/ionic-framework/issues/28712)) ([75ffeee](https://github.com/ionic-team/ionic-framework/commit/75ffeee933ae353d2601670178896116c81923e0)), closes [#28677](https://github.com/ionic-team/ionic-framework/issues/28677) +* **refresher:** native ios refresher works on iPadOS ([#28620](https://github.com/ionic-team/ionic-framework/issues/28620)) ([e522601](https://github.com/ionic-team/ionic-framework/commit/e5226016a0f0b066a7bd7fc9997f905d3b87fbc4)), closes [#28617](https://github.com/ionic-team/ionic-framework/issues/28617) + + + + + ## [7.6.2](https://github.com/ionic-team/ionic-framework/compare/v7.6.1...v7.6.2) (2023-12-19) diff --git a/core/CHANGELOG.md b/core/CHANGELOG.md index 6a4702fcabf..92f96d751b7 100644 --- a/core/CHANGELOG.md +++ b/core/CHANGELOG.md @@ -3,6 +3,20 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [7.6.3](https://github.com/ionic-team/ionic-framework/compare/v7.6.2...v7.6.3) (2024-01-03) + + +### Bug Fixes + +* **datetime:** selected today button renders correctly on ios ([#28740](https://github.com/ionic-team/ionic-framework/issues/28740)) ([2f99aea](https://github.com/ionic-team/ionic-framework/commit/2f99aeae6f71d5ffd1880f2c549227ecf71becf3)) +* **nav, router-outlet:** ios page transition does not cover menu on larger screens ([#28745](https://github.com/ionic-team/ionic-framework/issues/28745)) ([878eec6](https://github.com/ionic-team/ionic-framework/commit/878eec6ea21d76586466d01e13e5e842e69eaceb)), closes [#28737](https://github.com/ionic-team/ionic-framework/issues/28737) +* **radio-group:** radio disabled prop can be undefined ([#28712](https://github.com/ionic-team/ionic-framework/issues/28712)) ([75ffeee](https://github.com/ionic-team/ionic-framework/commit/75ffeee933ae353d2601670178896116c81923e0)), closes [#28677](https://github.com/ionic-team/ionic-framework/issues/28677) +* **refresher:** native ios refresher works on iPadOS ([#28620](https://github.com/ionic-team/ionic-framework/issues/28620)) ([e522601](https://github.com/ionic-team/ionic-framework/commit/e5226016a0f0b066a7bd7fc9997f905d3b87fbc4)), closes [#28617](https://github.com/ionic-team/ionic-framework/issues/28617) + + + + + ## [7.6.2](https://github.com/ionic-team/ionic-framework/compare/v7.6.1...v7.6.2) (2023-12-19) diff --git a/core/package-lock.json b/core/package-lock.json index e926732c5bb..334d953af8d 100644 --- a/core/package-lock.json +++ b/core/package-lock.json @@ -1,21 +1,21 @@ { "name": "@ionic/core", - "version": "7.6.2", + "version": "7.6.3", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ionic/core", - "version": "7.6.2", + "version": "7.6.3", "license": "MIT", "dependencies": { "@stencil/core": "^4.8.2", - "ionicons": "^7.2.1", + "ionicons": "^7.2.2", "tslib": "^2.1.0" }, "devDependencies": { "@axe-core/playwright": "^4.8.2", - "@capacitor/core": "^5.5.1", + "@capacitor/core": "^5.6.0", "@capacitor/haptics": "^5.0.6", "@capacitor/keyboard": "^5.0.7", "@capacitor/status-bar": "^5.0.6", @@ -26,7 +26,7 @@ "@rollup/plugin-virtual": "^2.0.3", "@stencil/angular-output-target": "^0.8.3", "@stencil/react-output-target": "^0.5.3", - "@stencil/sass": "^3.0.7", + "@stencil/sass": "^3.0.8", "@stencil/vue-output-target": "^0.8.7", "@types/jest": "^29.5.6", "@types/node": "^14.6.0", @@ -634,9 +634,9 @@ "dev": true }, "node_modules/@capacitor/core": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-5.5.1.tgz", - "integrity": "sha512-VG6Iv8Q7ZAbvjodxpvjcSe0jfxUwZXnvjbi93ehuJ6eYP8U926qLSXyrT/DToZq+F6v/HyGyVgn3mrE/9jW2Tg==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-5.6.0.tgz", + "integrity": "sha512-xJhCOUGPHw0QYDA3YH+CmL6qiV9DH4Ij3yPxSenymjrtLuXI197u9ddCZwGEwgVIkh9kGZBBKzsNkn89SZ2gdQ==", "dev": true, "dependencies": { "tslib": "^2.1.0" @@ -1846,9 +1846,9 @@ } }, "node_modules/@stencil/sass": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@stencil/sass/-/sass-3.0.7.tgz", - "integrity": "sha512-HcBjrh2CJ6aJnkOrBNSVyf1+x3FnUneYFk44rcx/jDK6Lx7R4w0dXMEsIR5MXqtROYWonZt7WtR8wsM1vcD+6w==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@stencil/sass/-/sass-3.0.8.tgz", + "integrity": "sha512-QJUG4Dr/b3wSizViwQXorrk1PJzxOsKkq5hSqtUHc3NNG3iomC4DQFYGeu15yNfoCDBtt4qkyHSCynsekQ8F6A==", "dev": true, "engines": { "node": ">=12.0.0", @@ -5785,9 +5785,9 @@ } }, "node_modules/ionicons": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-7.2.1.tgz", - "integrity": "sha512-2pvCM7DGVEtbbj48PJzQrCADCQrqjU1nUYX9l9PyEWz3ZfdnLdAouqwPxLdl8tbaF9cE7OZRSlyQD7oLOLnGoQ==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-7.2.2.tgz", + "integrity": "sha512-I3iYIfc9Q9FRifWyFSwTAvbEABWlWY32i0sAVDDPGYnaIZVugkLCZFbEcrphW6ixVPg8tt1oLwalo/JJwbEqnA==", "dependencies": { "@stencil/core": "^4.0.3" } @@ -11324,9 +11324,9 @@ "dev": true }, "@capacitor/core": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-5.5.1.tgz", - "integrity": "sha512-VG6Iv8Q7ZAbvjodxpvjcSe0jfxUwZXnvjbi93ehuJ6eYP8U926qLSXyrT/DToZq+F6v/HyGyVgn3mrE/9jW2Tg==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-5.6.0.tgz", + "integrity": "sha512-xJhCOUGPHw0QYDA3YH+CmL6qiV9DH4Ij3yPxSenymjrtLuXI197u9ddCZwGEwgVIkh9kGZBBKzsNkn89SZ2gdQ==", "dev": true, "requires": { "tslib": "^2.1.0" @@ -12196,9 +12196,9 @@ "requires": {} }, "@stencil/sass": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@stencil/sass/-/sass-3.0.7.tgz", - "integrity": "sha512-HcBjrh2CJ6aJnkOrBNSVyf1+x3FnUneYFk44rcx/jDK6Lx7R4w0dXMEsIR5MXqtROYWonZt7WtR8wsM1vcD+6w==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@stencil/sass/-/sass-3.0.8.tgz", + "integrity": "sha512-QJUG4Dr/b3wSizViwQXorrk1PJzxOsKkq5hSqtUHc3NNG3iomC4DQFYGeu15yNfoCDBtt4qkyHSCynsekQ8F6A==", "dev": true, "requires": {} }, @@ -15056,9 +15056,9 @@ } }, "ionicons": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-7.2.1.tgz", - "integrity": "sha512-2pvCM7DGVEtbbj48PJzQrCADCQrqjU1nUYX9l9PyEWz3ZfdnLdAouqwPxLdl8tbaF9cE7OZRSlyQD7oLOLnGoQ==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-7.2.2.tgz", + "integrity": "sha512-I3iYIfc9Q9FRifWyFSwTAvbEABWlWY32i0sAVDDPGYnaIZVugkLCZFbEcrphW6ixVPg8tt1oLwalo/JJwbEqnA==", "requires": { "@stencil/core": "^4.0.3" } diff --git a/core/package.json b/core/package.json index 47c012ae53b..2986be50798 100644 --- a/core/package.json +++ b/core/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/core", - "version": "7.6.2", + "version": "7.6.3", "description": "Base components for Ionic", "keywords": [ "ionic", @@ -32,12 +32,12 @@ ], "dependencies": { "@stencil/core": "^4.8.2", - "ionicons": "^7.2.1", + "ionicons": "^7.2.2", "tslib": "^2.1.0" }, "devDependencies": { "@axe-core/playwright": "^4.8.2", - "@capacitor/core": "^5.5.1", + "@capacitor/core": "^5.6.0", "@capacitor/haptics": "^5.0.6", "@capacitor/keyboard": "^5.0.7", "@capacitor/status-bar": "^5.0.6", @@ -48,7 +48,7 @@ "@rollup/plugin-virtual": "^2.0.3", "@stencil/angular-output-target": "^0.8.3", "@stencil/react-output-target": "^0.5.3", - "@stencil/sass": "^3.0.7", + "@stencil/sass": "^3.0.8", "@stencil/vue-output-target": "^0.8.7", "@types/jest": "^29.5.6", "@types/node": "^14.6.0", diff --git a/core/src/components.d.ts b/core/src/components.d.ts index 3ab34450f9f..bcea90eeb27 100644 --- a/core/src/components.d.ts +++ b/core/src/components.d.ts @@ -943,7 +943,7 @@ export namespace Components { */ "size": 'cover' | 'fixed'; /** - * A callback used to format the header text that shows how many dates are selected. Only used if there are 0 or more than 1 selected (i.e. unused for exactly 1). By default, the header text is set to "numberOfDates days". + * A callback used to format the header text that shows how many dates are selected. Only used if there are 0 or more than 1 selected (i.e. unused for exactly 1). By default, the header text is set to "numberOfDates days". See https://ionicframework.com/docs/troubleshooting/runtime#accessing-this if you need to access `this` from within the callback. */ "titleSelectedDatesFormatter"?: TitleSelectedDatesFormatter; /** @@ -1182,7 +1182,7 @@ export namespace Components { */ "counter": boolean; /** - * A callback used to format the counter text. By default the counter text is set to "itemLength / maxLength". + * A callback used to format the counter text. By default the counter text is set to "itemLength / maxLength". See https://ionicframework.com/docs/troubleshooting/runtime#accessing-this if you need to access `this` from within the callback. */ "counterFormatter"?: (inputLength: number, maxLength: number) => string; /** @@ -1701,7 +1701,7 @@ export namespace Components { */ "breakpoints"?: number[]; /** - * Determines whether or not a modal can dismiss when calling the `dismiss` method. If the value is `true` or the value's function returns `true`, the modal will close when trying to dismiss. If the value is `false` or the value's function returns `false`, the modal will not close when trying to dismiss. + * Determines whether or not a modal can dismiss when calling the `dismiss` method. If the value is `true` or the value's function returns `true`, the modal will close when trying to dismiss. If the value is `false` or the value's function returns `false`, the modal will not close when trying to dismiss. See https://ionicframework.com/docs/troubleshooting/runtime#accessing-this if you need to access `this` from within the callback. */ "canDismiss": boolean | ((data?: any, role?: string) => Promise); /** @@ -2336,7 +2336,7 @@ export namespace Components { */ "pin": boolean; /** - * A callback used to format the pin text. By default the pin text is set to `Math.round(value)`. + * A callback used to format the pin text. By default the pin text is set to `Math.round(value)`. See https://ionicframework.com/docs/troubleshooting/runtime#accessing-this if you need to access `this` from within the callback. */ "pinFormatter": PinFormatter; /** @@ -2978,7 +2978,7 @@ export namespace Components { */ "counter": boolean; /** - * A callback used to format the counter text. By default the counter text is set to "itemLength / maxLength". + * A callback used to format the counter text. By default the counter text is set to "itemLength / maxLength". See https://ionicframework.com/docs/troubleshooting/runtime#accessing-this if you need to access `this` from within the callback. */ "counterFormatter"?: (inputLength: number, maxLength: number) => string; /** @@ -5650,7 +5650,7 @@ declare namespace LocalJSX { */ "size"?: 'cover' | 'fixed'; /** - * A callback used to format the header text that shows how many dates are selected. Only used if there are 0 or more than 1 selected (i.e. unused for exactly 1). By default, the header text is set to "numberOfDates days". + * A callback used to format the header text that shows how many dates are selected. Only used if there are 0 or more than 1 selected (i.e. unused for exactly 1). By default, the header text is set to "numberOfDates days". See https://ionicframework.com/docs/troubleshooting/runtime#accessing-this if you need to access `this` from within the callback. */ "titleSelectedDatesFormatter"?: TitleSelectedDatesFormatter; /** @@ -5901,7 +5901,7 @@ declare namespace LocalJSX { */ "counter"?: boolean; /** - * A callback used to format the counter text. By default the counter text is set to "itemLength / maxLength". + * A callback used to format the counter text. By default the counter text is set to "itemLength / maxLength". See https://ionicframework.com/docs/troubleshooting/runtime#accessing-this if you need to access `this` from within the callback. */ "counterFormatter"?: (inputLength: number, maxLength: number) => string; /** @@ -6432,7 +6432,7 @@ declare namespace LocalJSX { */ "breakpoints"?: number[]; /** - * Determines whether or not a modal can dismiss when calling the `dismiss` method. If the value is `true` or the value's function returns `true`, the modal will close when trying to dismiss. If the value is `false` or the value's function returns `false`, the modal will not close when trying to dismiss. + * Determines whether or not a modal can dismiss when calling the `dismiss` method. If the value is `true` or the value's function returns `true`, the modal will close when trying to dismiss. If the value is `false` or the value's function returns `false`, the modal will not close when trying to dismiss. See https://ionicframework.com/docs/troubleshooting/runtime#accessing-this if you need to access `this` from within the callback. */ "canDismiss"?: boolean | ((data?: any, role?: string) => Promise); /** @@ -7064,7 +7064,7 @@ declare namespace LocalJSX { */ "pin"?: boolean; /** - * A callback used to format the pin text. By default the pin text is set to `Math.round(value)`. + * A callback used to format the pin text. By default the pin text is set to `Math.round(value)`. See https://ionicframework.com/docs/troubleshooting/runtime#accessing-this if you need to access `this` from within the callback. */ "pinFormatter"?: PinFormatter; /** @@ -7758,7 +7758,7 @@ declare namespace LocalJSX { */ "counter"?: boolean; /** - * A callback used to format the counter text. By default the counter text is set to "itemLength / maxLength". + * A callback used to format the counter text. By default the counter text is set to "itemLength / maxLength". See https://ionicframework.com/docs/troubleshooting/runtime#accessing-this if you need to access `this` from within the callback. */ "counterFormatter"?: (inputLength: number, maxLength: number) => string; /** diff --git a/core/src/components/datetime/datetime.ios.scss b/core/src/components/datetime/datetime.ios.scss index 145053d2f70..5f9aa2d040f 100644 --- a/core/src/components/datetime/datetime.ios.scss +++ b/core/src/components/datetime/datetime.ios.scss @@ -249,9 +249,11 @@ /** * Day that is selected and is today - * should have white color. + * should have base background color + * with contrast text. */ :host .calendar-day.calendar-day-today.calendar-day-active { + background: current-color(base); color: current-color(contrast); } diff --git a/core/src/components/datetime/datetime.tsx b/core/src/components/datetime/datetime.tsx index bffcc8942cb..77a8727f64f 100644 --- a/core/src/components/datetime/datetime.tsx +++ b/core/src/components/datetime/datetime.tsx @@ -341,6 +341,9 @@ export class Datetime implements ComponentInterface { * dates are selected. Only used if there are 0 or more than 1 * selected (i.e. unused for exactly 1). By default, the header * text is set to "numberOfDates days". + * + * See https://ionicframework.com/docs/troubleshooting/runtime#accessing-this + * if you need to access `this` from within the callback. */ @Prop() titleSelectedDatesFormatter?: TitleSelectedDatesFormatter; diff --git a/core/src/components/datetime/test/basic/datetime.e2e.ts b/core/src/components/datetime/test/basic/datetime.e2e.ts index c0ef49adf64..b72a7f2c3a6 100644 --- a/core/src/components/datetime/test/basic/datetime.e2e.ts +++ b/core/src/components/datetime/test/basic/datetime.e2e.ts @@ -458,6 +458,44 @@ configs({ modes: ['md'], directions: ['ltr'] }).forEach(({ title, config }) => { }); }); +configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => { + test.describe(title('datetime: today button rendering'), () => { + test('should render today button correctly when selected', async ({ page }) => { + test.info().annotations.push({ + type: 'issue', + description: 'FW-5808', + }); + await page.setContent( + ` + + + + `, + config + ); + + const datetime = page.locator('ion-datetime'); + + await page.waitForSelector('.datetime-ready'); + + await expect(datetime.locator('.calendar-day-today')).toHaveScreenshot( + screenshot(`datetime-today-calendar-button`) + ); + }); + }); +}); + /** * The calendar day highlight does not render * on iOS and has the same behavior across directions. diff --git a/core/src/components/datetime/test/basic/datetime.e2e.ts-snapshots/datetime-today-calendar-button-ios-ltr-Mobile-Chrome-linux.png b/core/src/components/datetime/test/basic/datetime.e2e.ts-snapshots/datetime-today-calendar-button-ios-ltr-Mobile-Chrome-linux.png new file mode 100644 index 00000000000..bcca67fe4f5 Binary files /dev/null and b/core/src/components/datetime/test/basic/datetime.e2e.ts-snapshots/datetime-today-calendar-button-ios-ltr-Mobile-Chrome-linux.png differ diff --git a/core/src/components/datetime/test/basic/datetime.e2e.ts-snapshots/datetime-today-calendar-button-ios-ltr-Mobile-Firefox-linux.png b/core/src/components/datetime/test/basic/datetime.e2e.ts-snapshots/datetime-today-calendar-button-ios-ltr-Mobile-Firefox-linux.png new file mode 100644 index 00000000000..840fd08af40 Binary files /dev/null and b/core/src/components/datetime/test/basic/datetime.e2e.ts-snapshots/datetime-today-calendar-button-ios-ltr-Mobile-Firefox-linux.png differ diff --git a/core/src/components/datetime/test/basic/datetime.e2e.ts-snapshots/datetime-today-calendar-button-ios-ltr-Mobile-Safari-linux.png b/core/src/components/datetime/test/basic/datetime.e2e.ts-snapshots/datetime-today-calendar-button-ios-ltr-Mobile-Safari-linux.png new file mode 100644 index 00000000000..ac81896e592 Binary files /dev/null and b/core/src/components/datetime/test/basic/datetime.e2e.ts-snapshots/datetime-today-calendar-button-ios-ltr-Mobile-Safari-linux.png differ diff --git a/core/src/components/datetime/test/basic/datetime.e2e.ts-snapshots/datetime-today-calendar-button-md-ltr-Mobile-Chrome-linux.png b/core/src/components/datetime/test/basic/datetime.e2e.ts-snapshots/datetime-today-calendar-button-md-ltr-Mobile-Chrome-linux.png new file mode 100644 index 00000000000..e561bd4d5a8 Binary files /dev/null and b/core/src/components/datetime/test/basic/datetime.e2e.ts-snapshots/datetime-today-calendar-button-md-ltr-Mobile-Chrome-linux.png differ diff --git a/core/src/components/datetime/test/basic/datetime.e2e.ts-snapshots/datetime-today-calendar-button-md-ltr-Mobile-Firefox-linux.png b/core/src/components/datetime/test/basic/datetime.e2e.ts-snapshots/datetime-today-calendar-button-md-ltr-Mobile-Firefox-linux.png new file mode 100644 index 00000000000..a4af82c2832 Binary files /dev/null and b/core/src/components/datetime/test/basic/datetime.e2e.ts-snapshots/datetime-today-calendar-button-md-ltr-Mobile-Firefox-linux.png differ diff --git a/core/src/components/datetime/test/basic/datetime.e2e.ts-snapshots/datetime-today-calendar-button-md-ltr-Mobile-Safari-linux.png b/core/src/components/datetime/test/basic/datetime.e2e.ts-snapshots/datetime-today-calendar-button-md-ltr-Mobile-Safari-linux.png new file mode 100644 index 00000000000..8e536c6cf0c Binary files /dev/null and b/core/src/components/datetime/test/basic/datetime.e2e.ts-snapshots/datetime-today-calendar-button-md-ltr-Mobile-Safari-linux.png differ diff --git a/core/src/components/input/input.tsx b/core/src/components/input/input.tsx index d28cfd385c8..3607b103221 100644 --- a/core/src/components/input/input.tsx +++ b/core/src/components/input/input.tsx @@ -121,6 +121,9 @@ export class Input implements ComponentInterface { /** * A callback used to format the counter text. * By default the counter text is set to "itemLength / maxLength". + * + * See https://ionicframework.com/docs/troubleshooting/runtime#accessing-this + * if you need to access `this` from within the callback. */ @Prop() counterFormatter?: (inputLength: number, maxLength: number) => string; diff --git a/core/src/components/menu/test/custom/menu.e2e.ts-snapshots/menu-custom-split-pane-md-ltr-Mobile-Chrome-linux.png b/core/src/components/menu/test/custom/menu.e2e.ts-snapshots/menu-custom-split-pane-md-ltr-Mobile-Chrome-linux.png index fa0060c175d..dec3119afed 100644 Binary files a/core/src/components/menu/test/custom/menu.e2e.ts-snapshots/menu-custom-split-pane-md-ltr-Mobile-Chrome-linux.png and b/core/src/components/menu/test/custom/menu.e2e.ts-snapshots/menu-custom-split-pane-md-ltr-Mobile-Chrome-linux.png differ diff --git a/core/src/components/menu/test/custom/menu.e2e.ts-snapshots/menu-custom-split-pane-md-ltr-Mobile-Firefox-linux.png b/core/src/components/menu/test/custom/menu.e2e.ts-snapshots/menu-custom-split-pane-md-ltr-Mobile-Firefox-linux.png index a7d8086d36f..98ec5e8c89f 100644 Binary files a/core/src/components/menu/test/custom/menu.e2e.ts-snapshots/menu-custom-split-pane-md-ltr-Mobile-Firefox-linux.png and b/core/src/components/menu/test/custom/menu.e2e.ts-snapshots/menu-custom-split-pane-md-ltr-Mobile-Firefox-linux.png differ diff --git a/core/src/components/menu/test/custom/menu.e2e.ts-snapshots/menu-custom-split-pane-md-ltr-Mobile-Safari-linux.png b/core/src/components/menu/test/custom/menu.e2e.ts-snapshots/menu-custom-split-pane-md-ltr-Mobile-Safari-linux.png index 1c84de64f69..25d2fd8e0b0 100644 Binary files a/core/src/components/menu/test/custom/menu.e2e.ts-snapshots/menu-custom-split-pane-md-ltr-Mobile-Safari-linux.png and b/core/src/components/menu/test/custom/menu.e2e.ts-snapshots/menu-custom-split-pane-md-ltr-Mobile-Safari-linux.png differ diff --git a/core/src/components/modal/modal.tsx b/core/src/components/modal/modal.tsx index ef6114b18ba..bae8648d765 100644 --- a/core/src/components/modal/modal.tsx +++ b/core/src/components/modal/modal.tsx @@ -264,6 +264,9 @@ export class Modal implements ComponentInterface, OverlayInterface { * * If the value is `true` or the value's function returns `true`, the modal will close when trying to dismiss. * If the value is `false` or the value's function returns `false`, the modal will not close when trying to dismiss. + * + * See https://ionicframework.com/docs/troubleshooting/runtime#accessing-this + * if you need to access `this` from within the callback. */ @Prop() canDismiss: boolean | ((data?: any, role?: string) => Promise) = true; diff --git a/core/src/components/radio-group/radio-group.tsx b/core/src/components/radio-group/radio-group.tsx index 3e8a11c39b8..dce1c626169 100644 --- a/core/src/components/radio-group/radio-group.tsx +++ b/core/src/components/radio-group/radio-group.tsx @@ -130,7 +130,15 @@ export class RadioGroup implements ComponentInterface { * using the `name` attribute. */ const selectedRadio = ev.target && (ev.target as HTMLElement).closest('ion-radio'); - if (selectedRadio && selectedRadio.disabled === false) { + /** + * Our current disabled prop definition causes Stencil to mark it + * as optional. While this is not desired, fixing this behavior + * in Stencil is a significant breaking change, so this effort is + * being de-risked in STENCIL-917. Until then, we compromise + * here by checking for falsy `disabled` values instead of strictly + * checking `disabled === false`. + */ + if (selectedRadio && !selectedRadio.disabled) { const currentValue = this.value; const newValue = selectedRadio.value; if (newValue !== currentValue) { diff --git a/core/src/components/radio/test/a11y/radio.e2e.ts b/core/src/components/radio/test/a11y/radio.e2e.ts index eaa52c548c3..e5a375bc966 100644 --- a/core/src/components/radio/test/a11y/radio.e2e.ts +++ b/core/src/components/radio/test/a11y/radio.e2e.ts @@ -15,9 +15,8 @@ configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => }); }); - // TODO(FW-5715): re-enable test - test.skip(title('radio: keyboard navigation'), () => { - test.beforeEach(async ({ page }) => { + test.describe(title('radio: keyboard navigation'), () => { + test.beforeEach(async ({ page, browserName }) => { await page.setContent( ` @@ -59,6 +58,21 @@ configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => `, config ); + + if (browserName === 'webkit') { + const radio = page.locator('#first-group ion-radio').first(); + /** + * Sometimes Safari does not focus the first radio. + * This is a workaround to ensure the first radio is focused. + * + * Wait for the first radio to be rendered before tabbing. + * This is necessary because the first radio may not be rendered + * when the page first loads. + * + * This would cause the first radio to be skipped when tabbing. + */ + await radio.waitFor(); + } }); test('tabbing should switch between radio groups', async ({ page, pageUtils }) => { diff --git a/core/src/components/radio/test/legacy/a11y/radio.e2e.ts b/core/src/components/radio/test/legacy/a11y/radio.e2e.ts index af6ccbfeb2b..98ccc80a46c 100644 --- a/core/src/components/radio/test/legacy/a11y/radio.e2e.ts +++ b/core/src/components/radio/test/legacy/a11y/radio.e2e.ts @@ -6,9 +6,23 @@ import { configs, test } from '@utils/test/playwright'; */ configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => { test.describe(title('radio: a11y'), () => { - test.beforeEach(async ({ page, skip }) => { - skip.browser('webkit', 'Tabbing is flaky in Safari'); + test.beforeEach(async ({ page, browserName }) => { await page.goto(`/src/components/radio/test/legacy/a11y`, config); + + if (browserName === 'webkit') { + const radio = page.locator('#first-group ion-radio').first(); + /** + * Sometimes Safari does not focus the first radio. + * This is a workaround to ensure the first radio is focused. + * + * Wait for the first radio to be rendered before tabbing. + * This is necessary because the first radio may not be rendered + * when the page first loads. + * + * This would cause the first radio to be skipped when tabbing. + */ + await radio.waitFor(); + } }); test('tabbing should switch between radio groups', async ({ page, pageUtils }) => { const firstGroupRadios = page.locator('#first-group ion-radio'); diff --git a/core/src/components/range/range.tsx b/core/src/components/range/range.tsx index 5b017cf464a..1df4ed9c3f5 100644 --- a/core/src/components/range/range.tsx +++ b/core/src/components/range/range.tsx @@ -141,6 +141,9 @@ export class Range implements ComponentInterface { /** * A callback used to format the pin text. * By default the pin text is set to `Math.round(value)`. + * + * See https://ionicframework.com/docs/troubleshooting/runtime#accessing-this + * if you need to access `this` from within the callback. */ @Prop() pinFormatter: PinFormatter = (value: number): number => Math.round(value); diff --git a/core/src/components/refresher-content/refresher-content.tsx b/core/src/components/refresher-content/refresher-content.tsx index 35b6554a77d..df94479c9d1 100644 --- a/core/src/components/refresher-content/refresher-content.tsx +++ b/core/src/components/refresher-content/refresher-content.tsx @@ -1,13 +1,13 @@ import type { ComponentInterface } from '@stencil/core'; import { Component, Element, Host, Prop, h } from '@stencil/core'; import { ENABLE_HTML_CONTENT_DEFAULT } from '@utils/config'; -import { isPlatform } from '@utils/platform'; import { sanitizeDOMString } from '@utils/sanitization'; import { arrowDown, caretBackSharp } from 'ionicons/icons'; import { config } from '../../global/config'; import { getIonMode } from '../../global/ionic-global'; import type { IonicSafeString } from '../../utils/sanitization'; +import { supportsRubberBandScrolling } from '../refresher/refresher.utils'; import type { SpinnerTypes } from '../spinner/spinner-configs'; import { SPINNERS } from '../spinner/spinner-configs'; @@ -63,11 +63,17 @@ export class RefresherContent implements ComponentInterface { componentWillLoad() { if (this.pullingIcon === undefined) { + /** + * The native iOS refresher uses a spinner instead of + * an icon, so we need to see if this device supports + * the native iOS refresher. + */ + const hasRubberBandScrolling = supportsRubberBandScrolling(); const mode = getIonMode(this); - const overflowRefresher = (this.el.style as any).webkitOverflowScrolling !== undefined ? 'lines' : arrowDown; + const overflowRefresher = hasRubberBandScrolling ? 'lines' : arrowDown; this.pullingIcon = config.get( 'refreshingIcon', - mode === 'ios' && isPlatform('mobile') ? config.get('spinner', overflowRefresher) : 'circular' + mode === 'ios' && hasRubberBandScrolling ? config.get('spinner', overflowRefresher) : 'circular' ); } if (this.refreshingSpinner === undefined) { diff --git a/core/src/components/refresher/refresher.utils.ts b/core/src/components/refresher/refresher.utils.ts index 8ae86de2581..4becab356d0 100644 --- a/core/src/components/refresher/refresher.utils.ts +++ b/core/src/components/refresher/refresher.utils.ts @@ -1,7 +1,6 @@ import { writeTask } from '@stencil/core'; import { createAnimation } from '@utils/animation/animation'; import { clamp, componentOnReady, transitionEndAsync } from '@utils/helpers'; -import { isPlatform } from '@utils/platform'; // MD Native Refresher // ----------------------------- @@ -195,6 +194,25 @@ export const translateElement = (el?: HTMLElement, value?: string, duration = 20 // Utils // ----------------------------- +/** + * In order to use the native iOS refresher the device must support rubber band scrolling. + * As part of this, we need to exclude Desktop Safari because it has a slightly different rubber band effect that is not compatible with the native refresher in Ionic. + * + * We also need to be careful not to include devices that spoof their user agent. + * For example, when using iOS emulation in Chrome the user agent will be spoofed such that + * navigator.maxTouchPointer > 0. To work around this, + * we check to see if the apple-pay-logo is supported as a named image which is only + * true on Apple devices. + * + * We previously checked referencEl.style.webkitOverflowScrolling to explicitly check + * for rubber band support. However, this property was removed on iPadOS and it's possible + * that this will be removed on iOS in the future too. + * + */ +export const supportsRubberBandScrolling = () => { + return navigator.maxTouchPoints > 0 && CSS.supports('background: -webkit-named-image(apple-pay-logo-black)'); +}; + export const shouldUseNativeRefresher = async (referenceEl: HTMLIonRefresherElement, mode: string) => { const refresherContent = referenceEl.querySelector('ion-refresher-content'); if (!refresherContent) { @@ -209,15 +227,6 @@ export const shouldUseNativeRefresher = async (referenceEl: HTMLIonRefresherElem return ( pullingSpinner !== null && refreshingSpinner !== null && - /** - * We use webkitOverflowScrolling for feature detection with rubber band scrolling - * on iOS. When doing referenceEl.style, webkitOverflowScrolling is undefined on non-iOS platforms. - * However, it will be the empty string on iOS. - * Note that we do not use getPropertyValue (and thus need to cast as any) because calling - * getPropertyValue('-webkit-overflow-scrolling') will return the empty string if it is not - * set on the element, even if the platform does not support that. - */ - ((mode === 'ios' && isPlatform('mobile') && (referenceEl.style as any).webkitOverflowScrolling !== undefined) || - mode === 'md') + ((mode === 'ios' && supportsRubberBandScrolling()) || mode === 'md') ); }; diff --git a/core/src/components/split-pane/split-pane.scss b/core/src/components/split-pane/split-pane.scss index 15eaee83734..d4866c712d3 100644 --- a/core/src/components/split-pane/split-pane.scss +++ b/core/src/components/split-pane/split-pane.scss @@ -49,6 +49,16 @@ :host(.split-pane-visible) ::slotted(.split-pane-main) { flex: 1; + + /** + * Content can overflow outside of a router outlet + * or a nav container to allow for the translucent + * tab bar effect to work. However, this can cause + * iOS page transitions to flow outside of the container + * and overlap the menu on larger viewports. As a result, + * we disable the overflow when that is the case. + */ + overflow: hidden; } :host(.split-pane-visible) ::slotted(.split-pane-side:not(ion-menu)), diff --git a/core/src/components/textarea/textarea.tsx b/core/src/components/textarea/textarea.tsx index 83557d3254f..6684d09906b 100644 --- a/core/src/components/textarea/textarea.tsx +++ b/core/src/components/textarea/textarea.tsx @@ -222,6 +222,9 @@ export class Textarea implements ComponentInterface { /** * A callback used to format the counter text. * By default the counter text is set to "itemLength / maxLength". + * + * See https://ionicframework.com/docs/troubleshooting/runtime#accessing-this + * if you need to access `this` from within the callback. */ @Prop() counterFormatter?: (inputLength: number, maxLength: number) => string; diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index ccb947de87b..de0647efa28 100644 --- a/docs/CHANGELOG.md +++ b/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. +## [7.6.3](https://github.com/ionic-team/ionic-framework/compare/v7.6.2...v7.6.3) (2024-01-03) + +**Note:** Version bump only for package @ionic/docs + + + + + ## [7.6.2](https://github.com/ionic-team/ionic-framework/compare/v7.6.1...v7.6.2) (2023-12-19) **Note:** Version bump only for package @ionic/docs diff --git a/docs/package-lock.json b/docs/package-lock.json index e4fc1d307a8..274d87ad255 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -1,12 +1,12 @@ { "name": "@ionic/docs", - "version": "7.6.2", + "version": "7.6.3", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ionic/docs", - "version": "7.6.2", + "version": "7.6.3", "license": "MIT" } } diff --git a/docs/package.json b/docs/package.json index 952da0adf14..e7bb001c794 100644 --- a/docs/package.json +++ b/docs/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/docs", - "version": "7.6.2", + "version": "7.6.3", "description": "Pre-packaged API documentation for the Ionic docs.", "main": "core.json", "types": "core.d.ts", diff --git a/lerna.json b/lerna.json index 4bba0ca5eaf..71df065d4d7 100644 --- a/lerna.json +++ b/lerna.json @@ -4,5 +4,5 @@ "docs", "packages/*" ], - "version": "7.6.2" + "version": "7.6.3" } diff --git a/packages/angular-server/CHANGELOG.md b/packages/angular-server/CHANGELOG.md index 1c04a037464..968f2d3c496 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. +## [7.6.3](https://github.com/ionic-team/ionic-framework/compare/v7.6.2...v7.6.3) (2024-01-03) + +**Note:** Version bump only for package @ionic/angular-server + + + + + ## [7.6.2](https://github.com/ionic-team/ionic-framework/compare/v7.6.1...v7.6.2) (2023-12-19) **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 37a13deeddb..daf43ee313b 100644 --- a/packages/angular-server/package-lock.json +++ b/packages/angular-server/package-lock.json @@ -1,15 +1,15 @@ { "name": "@ionic/angular-server", - "version": "7.6.2", + "version": "7.6.3", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ionic/angular-server", - "version": "7.6.2", + "version": "7.6.3", "license": "MIT", "dependencies": { - "@ionic/core": "^7.6.2" + "@ionic/core": "^7.6.3" }, "devDependencies": { "@angular-eslint/eslint-plugin": "^14.0.0", @@ -1060,9 +1060,9 @@ "dev": true }, "node_modules/@ionic/core": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-7.6.1.tgz", - "integrity": "sha512-o4PSRxokfRB5H3E5DAM7xivG8XFXaXD3+U/tha0QKemiMSntqgPqy0FYX0pNEwIrV3llRzFbAGNqyvB1+BG97Q==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-7.6.2.tgz", + "integrity": "sha512-PEeCAjKrtKkc7PqCF7WlXn36PmowBbswnMADmoJ75ozyheRMe+v+GY2a75dGsBxB8nMZP9X9wYBXvZ3BgYUdLw==", "dependencies": { "@stencil/core": "^4.8.2", "ionicons": "^7.2.1", @@ -7330,9 +7330,9 @@ "dev": true }, "@ionic/core": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-7.6.1.tgz", - "integrity": "sha512-o4PSRxokfRB5H3E5DAM7xivG8XFXaXD3+U/tha0QKemiMSntqgPqy0FYX0pNEwIrV3llRzFbAGNqyvB1+BG97Q==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-7.6.2.tgz", + "integrity": "sha512-PEeCAjKrtKkc7PqCF7WlXn36PmowBbswnMADmoJ75ozyheRMe+v+GY2a75dGsBxB8nMZP9X9wYBXvZ3BgYUdLw==", "requires": { "@stencil/core": "^4.8.2", "ionicons": "^7.2.1", diff --git a/packages/angular-server/package.json b/packages/angular-server/package.json index c177b6ec774..21b3ebe2517 100644 --- a/packages/angular-server/package.json +++ b/packages/angular-server/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/angular-server", - "version": "7.6.2", + "version": "7.6.3", "description": "Angular SSR Module for Ionic", "keywords": [ "ionic", @@ -62,6 +62,6 @@ }, "prettier": "@ionic/prettier-config", "dependencies": { - "@ionic/core": "^7.6.2" + "@ionic/core": "^7.6.3" } } diff --git a/packages/angular/CHANGELOG.md b/packages/angular/CHANGELOG.md index 5ce32041082..72c7d57a15e 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. +## [7.6.3](https://github.com/ionic-team/ionic-framework/compare/v7.6.2...v7.6.3) (2024-01-03) + +**Note:** Version bump only for package @ionic/angular + + + + + ## [7.6.2](https://github.com/ionic-team/ionic-framework/compare/v7.6.1...v7.6.2) (2023-12-19) diff --git a/packages/angular/package-lock.json b/packages/angular/package-lock.json index ab3fd0558ec..213991b6b14 100644 --- a/packages/angular/package-lock.json +++ b/packages/angular/package-lock.json @@ -1,15 +1,15 @@ { "name": "@ionic/angular", - "version": "7.6.2", + "version": "7.6.3", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ionic/angular", - "version": "7.6.2", + "version": "7.6.3", "license": "MIT", "dependencies": { - "@ionic/core": "^7.6.2", + "@ionic/core": "^7.6.3", "ionicons": "^7.0.0", "jsonc-parser": "^3.0.0", "tslib": "^2.3.0" @@ -1407,9 +1407,9 @@ "dev": true }, "node_modules/@ionic/core": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-7.6.1.tgz", - "integrity": "sha512-o4PSRxokfRB5H3E5DAM7xivG8XFXaXD3+U/tha0QKemiMSntqgPqy0FYX0pNEwIrV3llRzFbAGNqyvB1+BG97Q==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-7.6.2.tgz", + "integrity": "sha512-PEeCAjKrtKkc7PqCF7WlXn36PmowBbswnMADmoJ75ozyheRMe+v+GY2a75dGsBxB8nMZP9X9wYBXvZ3BgYUdLw==", "dependencies": { "@stencil/core": "^4.8.2", "ionicons": "^7.2.1", @@ -9697,9 +9697,9 @@ "dev": true }, "@ionic/core": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-7.6.1.tgz", - "integrity": "sha512-o4PSRxokfRB5H3E5DAM7xivG8XFXaXD3+U/tha0QKemiMSntqgPqy0FYX0pNEwIrV3llRzFbAGNqyvB1+BG97Q==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-7.6.2.tgz", + "integrity": "sha512-PEeCAjKrtKkc7PqCF7WlXn36PmowBbswnMADmoJ75ozyheRMe+v+GY2a75dGsBxB8nMZP9X9wYBXvZ3BgYUdLw==", "requires": { "@stencil/core": "^4.8.2", "ionicons": "^7.2.1", diff --git a/packages/angular/package.json b/packages/angular/package.json index 54ac2160daf..1548fc1e6a6 100644 --- a/packages/angular/package.json +++ b/packages/angular/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/angular", - "version": "7.6.2", + "version": "7.6.3", "description": "Angular specific wrappers for @ionic/core", "keywords": [ "ionic", @@ -48,7 +48,7 @@ } }, "dependencies": { - "@ionic/core": "^7.6.2", + "@ionic/core": "^7.6.3", "ionicons": "^7.0.0", "jsonc-parser": "^3.0.0", "tslib": "^2.3.0" diff --git a/packages/react-router/CHANGELOG.md b/packages/react-router/CHANGELOG.md index 90ccb029b53..cd6a85537c8 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. +## [7.6.3](https://github.com/ionic-team/ionic-framework/compare/v7.6.2...v7.6.3) (2024-01-03) + +**Note:** Version bump only for package @ionic/react-router + + + + + ## [7.6.2](https://github.com/ionic-team/ionic-framework/compare/v7.6.1...v7.6.2) (2023-12-19) **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 d7974021590..9dec353c854 100644 --- a/packages/react-router/package-lock.json +++ b/packages/react-router/package-lock.json @@ -1,15 +1,15 @@ { "name": "@ionic/react-router", - "version": "7.6.2", + "version": "7.6.3", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ionic/react-router", - "version": "7.6.2", + "version": "7.6.3", "license": "MIT", "dependencies": { - "@ionic/react": "^7.6.2", + "@ionic/react": "^7.6.3", "tslib": "*" }, "devDependencies": { @@ -238,9 +238,9 @@ "dev": true }, "node_modules/@ionic/core": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-7.6.1.tgz", - "integrity": "sha512-o4PSRxokfRB5H3E5DAM7xivG8XFXaXD3+U/tha0QKemiMSntqgPqy0FYX0pNEwIrV3llRzFbAGNqyvB1+BG97Q==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-7.6.2.tgz", + "integrity": "sha512-PEeCAjKrtKkc7PqCF7WlXn36PmowBbswnMADmoJ75ozyheRMe+v+GY2a75dGsBxB8nMZP9X9wYBXvZ3BgYUdLw==", "dependencies": { "@stencil/core": "^4.8.2", "ionicons": "^7.2.1", @@ -414,11 +414,11 @@ } }, "node_modules/@ionic/react": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@ionic/react/-/react-7.6.1.tgz", - "integrity": "sha512-Gg6IezbyvMucgNgmCMFr5vrsh2kgB/5S9j/24L07wt4mCNBy5ZGrzHkq9NSmcgU7bj/qD1GzamjoqICLH2vEzw==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@ionic/react/-/react-7.6.2.tgz", + "integrity": "sha512-c2dD/ATMDf70GAp6z6QLzmRNZVBZl9B6zcCGJlYhxSHReNOAln3PWYwxy8v/7MuTyclG4rnNQxiSBd3XQbqKTw==", "dependencies": { - "@ionic/core": "7.6.1", + "@ionic/core": "7.6.2", "ionicons": "^7.0.0", "tslib": "*" }, @@ -667,9 +667,9 @@ ] }, "node_modules/@stencil/core": { - "version": "4.8.2", - "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.8.2.tgz", - "integrity": "sha512-KdZEAtz9VnqMtXOkf51+8mphyRt0fN/LYgtj5M8gnveGspG8KzoyTDzlWt0wsstWIsJJ21RA1yd3AgMMZiu3MA==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.9.0.tgz", + "integrity": "sha512-aWSkhBmk3yPwRAkUwBbzRwmdhb8hKiQ/JMr9m5jthpBZLjtppYbzz6PN2MhSMDfRp6K93eQw5WogSEH4HHuB6w==", "bin": { "stencil": "bin/stencil" }, @@ -2418,9 +2418,9 @@ } }, "node_modules/ionicons": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-7.2.1.tgz", - "integrity": "sha512-2pvCM7DGVEtbbj48PJzQrCADCQrqjU1nUYX9l9PyEWz3ZfdnLdAouqwPxLdl8tbaF9cE7OZRSlyQD7oLOLnGoQ==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-7.2.2.tgz", + "integrity": "sha512-I3iYIfc9Q9FRifWyFSwTAvbEABWlWY32i0sAVDDPGYnaIZVugkLCZFbEcrphW6ixVPg8tt1oLwalo/JJwbEqnA==", "dependencies": { "@stencil/core": "^4.0.3" } @@ -4050,9 +4050,9 @@ "dev": true }, "@ionic/core": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-7.6.1.tgz", - "integrity": "sha512-o4PSRxokfRB5H3E5DAM7xivG8XFXaXD3+U/tha0QKemiMSntqgPqy0FYX0pNEwIrV3llRzFbAGNqyvB1+BG97Q==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-7.6.2.tgz", + "integrity": "sha512-PEeCAjKrtKkc7PqCF7WlXn36PmowBbswnMADmoJ75ozyheRMe+v+GY2a75dGsBxB8nMZP9X9wYBXvZ3BgYUdLw==", "requires": { "@stencil/core": "^4.8.2", "ionicons": "^7.2.1", @@ -4156,11 +4156,11 @@ "requires": {} }, "@ionic/react": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@ionic/react/-/react-7.6.1.tgz", - "integrity": "sha512-Gg6IezbyvMucgNgmCMFr5vrsh2kgB/5S9j/24L07wt4mCNBy5ZGrzHkq9NSmcgU7bj/qD1GzamjoqICLH2vEzw==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@ionic/react/-/react-7.6.2.tgz", + "integrity": "sha512-c2dD/ATMDf70GAp6z6QLzmRNZVBZl9B6zcCGJlYhxSHReNOAln3PWYwxy8v/7MuTyclG4rnNQxiSBd3XQbqKTw==", "requires": { - "@ionic/core": "7.6.1", + "@ionic/core": "7.6.2", "ionicons": "^7.0.0", "tslib": "*" } @@ -4297,9 +4297,9 @@ "optional": true }, "@stencil/core": { - "version": "4.8.2", - "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.8.2.tgz", - "integrity": "sha512-KdZEAtz9VnqMtXOkf51+8mphyRt0fN/LYgtj5M8gnveGspG8KzoyTDzlWt0wsstWIsJJ21RA1yd3AgMMZiu3MA==" + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.9.0.tgz", + "integrity": "sha512-aWSkhBmk3yPwRAkUwBbzRwmdhb8hKiQ/JMr9m5jthpBZLjtppYbzz6PN2MhSMDfRp6K93eQw5WogSEH4HHuB6w==" }, "@types/estree": { "version": "1.0.4", @@ -5570,9 +5570,9 @@ } }, "ionicons": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-7.2.1.tgz", - "integrity": "sha512-2pvCM7DGVEtbbj48PJzQrCADCQrqjU1nUYX9l9PyEWz3ZfdnLdAouqwPxLdl8tbaF9cE7OZRSlyQD7oLOLnGoQ==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-7.2.2.tgz", + "integrity": "sha512-I3iYIfc9Q9FRifWyFSwTAvbEABWlWY32i0sAVDDPGYnaIZVugkLCZFbEcrphW6ixVPg8tt1oLwalo/JJwbEqnA==", "requires": { "@stencil/core": "^4.0.3" } diff --git a/packages/react-router/package.json b/packages/react-router/package.json index d1c4509b714..b81fd968dbf 100644 --- a/packages/react-router/package.json +++ b/packages/react-router/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/react-router", - "version": "7.6.2", + "version": "7.6.3", "description": "React Router wrapper for @ionic/react", "keywords": [ "ionic", @@ -36,7 +36,7 @@ "dist/" ], "dependencies": { - "@ionic/react": "^7.6.2", + "@ionic/react": "^7.6.3", "tslib": "*" }, "peerDependencies": { diff --git a/packages/react/CHANGELOG.md b/packages/react/CHANGELOG.md index 6a3c7c4fd24..b2a640865f3 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. +## [7.6.3](https://github.com/ionic-team/ionic-framework/compare/v7.6.2...v7.6.3) (2024-01-03) + +**Note:** Version bump only for package @ionic/react + + + + + ## [7.6.2](https://github.com/ionic-team/ionic-framework/compare/v7.6.1...v7.6.2) (2023-12-19) **Note:** Version bump only for package @ionic/react diff --git a/packages/react/package-lock.json b/packages/react/package-lock.json index 48ffe6c8a33..7e95eb706fd 100644 --- a/packages/react/package-lock.json +++ b/packages/react/package-lock.json @@ -1,15 +1,15 @@ { "name": "@ionic/react", - "version": "7.6.2", + "version": "7.6.3", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ionic/react", - "version": "7.6.2", + "version": "7.6.3", "license": "MIT", "dependencies": { - "@ionic/core": "^7.6.2", + "@ionic/core": "^7.6.3", "ionicons": "^7.0.0", "tslib": "*" }, @@ -811,9 +811,9 @@ "dev": true }, "node_modules/@ionic/core": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-7.6.1.tgz", - "integrity": "sha512-o4PSRxokfRB5H3E5DAM7xivG8XFXaXD3+U/tha0QKemiMSntqgPqy0FYX0pNEwIrV3llRzFbAGNqyvB1+BG97Q==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-7.6.2.tgz", + "integrity": "sha512-PEeCAjKrtKkc7PqCF7WlXn36PmowBbswnMADmoJ75ozyheRMe+v+GY2a75dGsBxB8nMZP9X9wYBXvZ3BgYUdLw==", "dependencies": { "@stencil/core": "^4.8.2", "ionicons": "^7.2.1", @@ -12857,9 +12857,9 @@ "dev": true }, "@ionic/core": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-7.6.1.tgz", - "integrity": "sha512-o4PSRxokfRB5H3E5DAM7xivG8XFXaXD3+U/tha0QKemiMSntqgPqy0FYX0pNEwIrV3llRzFbAGNqyvB1+BG97Q==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-7.6.2.tgz", + "integrity": "sha512-PEeCAjKrtKkc7PqCF7WlXn36PmowBbswnMADmoJ75ozyheRMe+v+GY2a75dGsBxB8nMZP9X9wYBXvZ3BgYUdLw==", "requires": { "@stencil/core": "^4.8.2", "ionicons": "^7.2.1", diff --git a/packages/react/package.json b/packages/react/package.json index d31713f9809..0e9a07c730e 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/react", - "version": "7.6.2", + "version": "7.6.3", "description": "React specific wrapper for @ionic/core", "keywords": [ "ionic", @@ -39,7 +39,7 @@ "css/" ], "dependencies": { - "@ionic/core": "^7.6.2", + "@ionic/core": "^7.6.3", "ionicons": "^7.0.0", "tslib": "*" }, diff --git a/packages/vue-router/CHANGELOG.md b/packages/vue-router/CHANGELOG.md index 7a2beedf2ab..37e478d2b48 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. +## [7.6.3](https://github.com/ionic-team/ionic-framework/compare/v7.6.2...v7.6.3) (2024-01-03) + +**Note:** Version bump only for package @ionic/vue-router + + + + + ## [7.6.2](https://github.com/ionic-team/ionic-framework/compare/v7.6.1...v7.6.2) (2023-12-19) **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 d7cc5c55f7b..7c3b2a2317e 100644 --- a/packages/vue-router/package-lock.json +++ b/packages/vue-router/package-lock.json @@ -1,15 +1,15 @@ { "name": "@ionic/vue-router", - "version": "7.6.2", + "version": "7.6.3", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ionic/vue-router", - "version": "7.6.2", + "version": "7.6.3", "license": "MIT", "dependencies": { - "@ionic/vue": "^7.6.2" + "@ionic/vue": "^7.6.3" }, "devDependencies": { "@ionic/eslint-config": "^0.3.0", @@ -661,9 +661,9 @@ "dev": true }, "node_modules/@ionic/core": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-7.6.1.tgz", - "integrity": "sha512-o4PSRxokfRB5H3E5DAM7xivG8XFXaXD3+U/tha0QKemiMSntqgPqy0FYX0pNEwIrV3llRzFbAGNqyvB1+BG97Q==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-7.6.2.tgz", + "integrity": "sha512-PEeCAjKrtKkc7PqCF7WlXn36PmowBbswnMADmoJ75ozyheRMe+v+GY2a75dGsBxB8nMZP9X9wYBXvZ3BgYUdLw==", "dependencies": { "@stencil/core": "^4.8.2", "ionicons": "^7.2.1", @@ -852,11 +852,11 @@ } }, "node_modules/@ionic/vue": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@ionic/vue/-/vue-7.6.1.tgz", - "integrity": "sha512-ejK5J8U6Gxo+KZqgD+SieEgxKCH+wqHbWe6LiTaE2VO43VgUAW5XNVT5Oz6RV/rBYXCM5mb/QB2T+YOv79QjoQ==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@ionic/vue/-/vue-7.6.2.tgz", + "integrity": "sha512-+qamnvbplyPN0RASemYvxMCPcwJ+lrJVJeDQ8Cw14OIuItVkMsidM2pF4hzZaxXyS+aHqCaVTewvLJ2/cUpzTw==", "dependencies": { - "@ionic/core": "7.6.1", + "@ionic/core": "7.6.2", "ionicons": "^7.0.0" } }, @@ -1508,9 +1508,9 @@ } }, "node_modules/@stencil/core": { - "version": "4.8.2", - "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.8.2.tgz", - "integrity": "sha512-KdZEAtz9VnqMtXOkf51+8mphyRt0fN/LYgtj5M8gnveGspG8KzoyTDzlWt0wsstWIsJJ21RA1yd3AgMMZiu3MA==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.9.0.tgz", + "integrity": "sha512-aWSkhBmk3yPwRAkUwBbzRwmdhb8hKiQ/JMr9m5jthpBZLjtppYbzz6PN2MhSMDfRp6K93eQw5WogSEH4HHuB6w==", "bin": { "stencil": "bin/stencil" }, @@ -4279,9 +4279,9 @@ } }, "node_modules/ionicons": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-7.2.1.tgz", - "integrity": "sha512-2pvCM7DGVEtbbj48PJzQrCADCQrqjU1nUYX9l9PyEWz3ZfdnLdAouqwPxLdl8tbaF9cE7OZRSlyQD7oLOLnGoQ==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-7.2.2.tgz", + "integrity": "sha512-I3iYIfc9Q9FRifWyFSwTAvbEABWlWY32i0sAVDDPGYnaIZVugkLCZFbEcrphW6ixVPg8tt1oLwalo/JJwbEqnA==", "dependencies": { "@stencil/core": "^4.0.3" } @@ -7878,9 +7878,9 @@ "dev": true }, "@ionic/core": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-7.6.1.tgz", - "integrity": "sha512-o4PSRxokfRB5H3E5DAM7xivG8XFXaXD3+U/tha0QKemiMSntqgPqy0FYX0pNEwIrV3llRzFbAGNqyvB1+BG97Q==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-7.6.2.tgz", + "integrity": "sha512-PEeCAjKrtKkc7PqCF7WlXn36PmowBbswnMADmoJ75ozyheRMe+v+GY2a75dGsBxB8nMZP9X9wYBXvZ3BgYUdLw==", "requires": { "@stencil/core": "^4.8.2", "ionicons": "^7.2.1", @@ -7993,11 +7993,11 @@ "requires": {} }, "@ionic/vue": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@ionic/vue/-/vue-7.6.1.tgz", - "integrity": "sha512-ejK5J8U6Gxo+KZqgD+SieEgxKCH+wqHbWe6LiTaE2VO43VgUAW5XNVT5Oz6RV/rBYXCM5mb/QB2T+YOv79QjoQ==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@ionic/vue/-/vue-7.6.2.tgz", + "integrity": "sha512-+qamnvbplyPN0RASemYvxMCPcwJ+lrJVJeDQ8Cw14OIuItVkMsidM2pF4hzZaxXyS+aHqCaVTewvLJ2/cUpzTw==", "requires": { - "@ionic/core": "7.6.1", + "@ionic/core": "7.6.2", "ionicons": "^7.0.0" } }, @@ -8461,9 +8461,9 @@ } }, "@stencil/core": { - "version": "4.8.2", - "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.8.2.tgz", - "integrity": "sha512-KdZEAtz9VnqMtXOkf51+8mphyRt0fN/LYgtj5M8gnveGspG8KzoyTDzlWt0wsstWIsJJ21RA1yd3AgMMZiu3MA==" + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.9.0.tgz", + "integrity": "sha512-aWSkhBmk3yPwRAkUwBbzRwmdhb8hKiQ/JMr9m5jthpBZLjtppYbzz6PN2MhSMDfRp6K93eQw5WogSEH4HHuB6w==" }, "@tootallnate/once": { "version": "2.0.0", @@ -10515,9 +10515,9 @@ } }, "ionicons": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-7.2.1.tgz", - "integrity": "sha512-2pvCM7DGVEtbbj48PJzQrCADCQrqjU1nUYX9l9PyEWz3ZfdnLdAouqwPxLdl8tbaF9cE7OZRSlyQD7oLOLnGoQ==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-7.2.2.tgz", + "integrity": "sha512-I3iYIfc9Q9FRifWyFSwTAvbEABWlWY32i0sAVDDPGYnaIZVugkLCZFbEcrphW6ixVPg8tt1oLwalo/JJwbEqnA==", "requires": { "@stencil/core": "^4.0.3" } diff --git a/packages/vue-router/package.json b/packages/vue-router/package.json index 2930b6f8da9..f0cd742e0d8 100644 --- a/packages/vue-router/package.json +++ b/packages/vue-router/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/vue-router", - "version": "7.6.2", + "version": "7.6.3", "description": "Vue Router integration for @ionic/vue", "scripts": { "test.spec": "jest", @@ -44,7 +44,7 @@ }, "homepage": "https://github.com/ionic-team/ionic#readme", "dependencies": { - "@ionic/vue": "^7.6.2" + "@ionic/vue": "^7.6.3" }, "devDependencies": { "@ionic/eslint-config": "^0.3.0", diff --git a/packages/vue/CHANGELOG.md b/packages/vue/CHANGELOG.md index 7971728a6d2..bd569769406 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. +## [7.6.3](https://github.com/ionic-team/ionic-framework/compare/v7.6.2...v7.6.3) (2024-01-03) + +**Note:** Version bump only for package @ionic/vue + + + + + ## [7.6.2](https://github.com/ionic-team/ionic-framework/compare/v7.6.1...v7.6.2) (2023-12-19) **Note:** Version bump only for package @ionic/vue diff --git a/packages/vue/package-lock.json b/packages/vue/package-lock.json index e25bd05eede..76cb48e6721 100644 --- a/packages/vue/package-lock.json +++ b/packages/vue/package-lock.json @@ -1,15 +1,15 @@ { "name": "@ionic/vue", - "version": "7.6.2", + "version": "7.6.3", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ionic/vue", - "version": "7.6.2", + "version": "7.6.3", "license": "MIT", "dependencies": { - "@ionic/core": "^7.6.2", + "@ionic/core": "^7.6.3", "ionicons": "^7.0.0" }, "devDependencies": { @@ -208,9 +208,9 @@ "dev": true }, "node_modules/@ionic/core": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-7.6.1.tgz", - "integrity": "sha512-o4PSRxokfRB5H3E5DAM7xivG8XFXaXD3+U/tha0QKemiMSntqgPqy0FYX0pNEwIrV3llRzFbAGNqyvB1+BG97Q==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-7.6.2.tgz", + "integrity": "sha512-PEeCAjKrtKkc7PqCF7WlXn36PmowBbswnMADmoJ75ozyheRMe+v+GY2a75dGsBxB8nMZP9X9wYBXvZ3BgYUdLw==", "dependencies": { "@stencil/core": "^4.8.2", "ionicons": "^7.2.1", @@ -3959,9 +3959,9 @@ "dev": true }, "@ionic/core": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-7.6.1.tgz", - "integrity": "sha512-o4PSRxokfRB5H3E5DAM7xivG8XFXaXD3+U/tha0QKemiMSntqgPqy0FYX0pNEwIrV3llRzFbAGNqyvB1+BG97Q==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-7.6.2.tgz", + "integrity": "sha512-PEeCAjKrtKkc7PqCF7WlXn36PmowBbswnMADmoJ75ozyheRMe+v+GY2a75dGsBxB8nMZP9X9wYBXvZ3BgYUdLw==", "requires": { "@stencil/core": "^4.8.2", "ionicons": "^7.2.1", diff --git a/packages/vue/package.json b/packages/vue/package.json index 471edb48870..538e061a732 100644 --- a/packages/vue/package.json +++ b/packages/vue/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/vue", - "version": "7.6.2", + "version": "7.6.3", "description": "Vue specific wrapper for @ionic/core", "scripts": { "eslint": "eslint src", @@ -66,7 +66,7 @@ "vue-router": "^4.0.16" }, "dependencies": { - "@ionic/core": "^7.6.2", + "@ionic/core": "^7.6.3", "ionicons": "^7.0.0" }, "vetur": {