diff --git a/CHANGELOG.md b/CHANGELOG.md index fe2edcce966..53f56f54e58 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,21 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.4.1](https://github.com/ionic-team/ionic-framework/compare/v8.4.0...v8.4.1) (2024-11-27) + + +### Bug Fixes + +* **header:** use aria attributes to hide small title when collapsed ([#30027](https://github.com/ionic-team/ionic-framework/issues/30027)) ([23763ab](https://github.com/ionic-team/ionic-framework/commit/23763abf797f9a4ba8262225760f718e9dcc4782)), closes [#29347](https://github.com/ionic-team/ionic-framework/issues/29347) +* **menu:** hide from screen readers while animating ([#30036](https://github.com/ionic-team/ionic-framework/issues/30036)) ([845071c](https://github.com/ionic-team/ionic-framework/commit/845071c97a856d45eb5e0bb81d9c270bc38bb604)) +* **overlays:** announce info after opening based on platform ([#30025](https://github.com/ionic-team/ionic-framework/issues/30025)) ([f6188c4](https://github.com/ionic-team/ionic-framework/commit/f6188c47e9278fe69fd9d250c65156edbe5ef32e)) +* **overlays:** focus management with checkbox/radio ([#30026](https://github.com/ionic-team/ionic-framework/issues/30026)) ([8ee42bb](https://github.com/ionic-team/ionic-framework/commit/8ee42bbc1e0bf4731d20040c7853756722f1a4b2)) +* **toast:** swipe gesture works with custom container layout ([#29999](https://github.com/ionic-team/ionic-framework/issues/29999)) ([470decc](https://github.com/ionic-team/ionic-framework/commit/470decca7b6b89ef74095ef0bb7909b93640cd78)), closes [#29998](https://github.com/ionic-team/ionic-framework/issues/29998) + + + + + # [8.4.0](https://github.com/ionic-team/ionic-framework/compare/v8.3.4...v8.4.0) (2024-11-04) diff --git a/core/CHANGELOG.md b/core/CHANGELOG.md index 07089bd9600..0c1255506f8 100644 --- a/core/CHANGELOG.md +++ b/core/CHANGELOG.md @@ -3,6 +3,21 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.4.1](https://github.com/ionic-team/ionic-framework/compare/v8.4.0...v8.4.1) (2024-11-27) + + +### Bug Fixes + +* **header:** use aria attributes to hide small title when collapsed ([#30027](https://github.com/ionic-team/ionic-framework/issues/30027)) ([23763ab](https://github.com/ionic-team/ionic-framework/commit/23763abf797f9a4ba8262225760f718e9dcc4782)), closes [#29347](https://github.com/ionic-team/ionic-framework/issues/29347) +* **menu:** hide from screen readers while animating ([#30036](https://github.com/ionic-team/ionic-framework/issues/30036)) ([845071c](https://github.com/ionic-team/ionic-framework/commit/845071c97a856d45eb5e0bb81d9c270bc38bb604)) +* **overlays:** announce info after opening based on platform ([#30025](https://github.com/ionic-team/ionic-framework/issues/30025)) ([f6188c4](https://github.com/ionic-team/ionic-framework/commit/f6188c47e9278fe69fd9d250c65156edbe5ef32e)) +* **overlays:** focus management with checkbox/radio ([#30026](https://github.com/ionic-team/ionic-framework/issues/30026)) ([8ee42bb](https://github.com/ionic-team/ionic-framework/commit/8ee42bbc1e0bf4731d20040c7853756722f1a4b2)) +* **toast:** swipe gesture works with custom container layout ([#29999](https://github.com/ionic-team/ionic-framework/issues/29999)) ([470decc](https://github.com/ionic-team/ionic-framework/commit/470decca7b6b89ef74095ef0bb7909b93640cd78)), closes [#29998](https://github.com/ionic-team/ionic-framework/issues/29998) + + + + + # [8.4.0](https://github.com/ionic-team/ionic-framework/compare/v8.3.4...v8.4.0) (2024-11-04) diff --git a/core/package-lock.json b/core/package-lock.json index 7105341c21f..85862e9e374 100644 --- a/core/package-lock.json +++ b/core/package-lock.json @@ -1,12 +1,12 @@ { "name": "@ionic/core", - "version": "8.4.0", + "version": "8.4.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ionic/core", - "version": "8.4.0", + "version": "8.4.1", "license": "MIT", "dependencies": { "@stencil/core": "4.20.0", diff --git a/core/package.json b/core/package.json index 2d92d1411e4..6da6b6a2b90 100644 --- a/core/package.json +++ b/core/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/core", - "version": "8.4.0", + "version": "8.4.1", "description": "Base components for Ionic", "keywords": [ "ionic", diff --git a/core/src/components.d.ts b/core/src/components.d.ts index 2e5163329dd..1bdfaa88545 100644 --- a/core/src/components.d.ts +++ b/core/src/components.d.ts @@ -2303,6 +2303,7 @@ export namespace Components { * The name of the control, which is submitted with the form data. */ "name": string; + "setFocus": () => Promise; /** * the value of the radio group. */ diff --git a/core/src/components/header/header.utils.ts b/core/src/components/header/header.utils.ts index f1b6273ef5e..af2e4b1acdb 100644 --- a/core/src/components/header/header.utils.ts +++ b/core/src/components/header/header.utils.ts @@ -167,13 +167,34 @@ export const handleToolbarIntersection = ( export const setHeaderActive = (headerIndex: HeaderIndex, active = true) => { const headerEl = headerIndex.el; + const toolbars = headerIndex.toolbars; + const ionTitles = toolbars.map((toolbar) => toolbar.ionTitleEl); if (active) { headerEl.classList.remove('header-collapse-condense-inactive'); - headerEl.removeAttribute('aria-hidden'); + + ionTitles.forEach((ionTitle) => { + if (ionTitle) { + ionTitle.removeAttribute('aria-hidden'); + } + }); } else { headerEl.classList.add('header-collapse-condense-inactive'); - headerEl.setAttribute('aria-hidden', 'true'); + + /** + * The small title should only be accessed by screen readers + * when the large title collapses into the small title due + * to scrolling. + * + * Originally, the header was given `aria-hidden="true"` + * but this caused issues with screen readers not being + * able to access any focusable elements within the header. + */ + ionTitles.forEach((ionTitle) => { + if (ionTitle) { + ionTitle.setAttribute('aria-hidden', 'true'); + } + }); } }; diff --git a/core/src/components/header/test/condense/header.e2e.ts b/core/src/components/header/test/condense/header.e2e.ts index 791c1b720af..b57d1ee58f7 100644 --- a/core/src/components/header/test/condense/header.e2e.ts +++ b/core/src/components/header/test/condense/header.e2e.ts @@ -3,13 +3,19 @@ import { configs, test } from '@utils/test/playwright'; configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, screenshot, config }) => { test.describe(title('header: condense'), () => { - test('should be hidden from screen readers when collapsed', async ({ page }) => { + test('should hide small title from screen readers when collapsed', async ({ page }) => { + test.info().annotations.push({ + type: 'issue', + description: 'https://github.com/ionic-team/ionic-framework/issues/29347', + }); + await page.goto('/src/components/header/test/condense', config); const largeTitleHeader = page.locator('#largeTitleHeader'); const smallTitleHeader = page.locator('#smallTitleHeader'); + const smallTitle = smallTitleHeader.locator('ion-title'); const content = page.locator('ion-content'); - await expect(smallTitleHeader).toHaveAttribute('aria-hidden', 'true'); + await expect(smallTitle).toHaveAttribute('aria-hidden', 'true'); await expect(largeTitleHeader).toHaveScreenshot(screenshot(`header-condense-large-title-initial-diff`)); @@ -24,7 +30,7 @@ configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, screenshot, c * Playwright can't do .not.toHaveAttribute() because a value is expected, * and toHaveAttribute can't accept a value of type null. */ - const ariaHidden = await smallTitleHeader.getAttribute('aria-hidden'); + const ariaHidden = await smallTitle.getAttribute('aria-hidden'); expect(ariaHidden).toBeNull(); await content.evaluate(async (el: HTMLIonContentElement) => { @@ -32,7 +38,7 @@ configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, screenshot, c }); await page.locator('#smallTitleHeader.header-collapse-condense-inactive').waitFor(); - await expect(smallTitleHeader).toHaveAttribute('aria-hidden', 'true'); + await expect(smallTitle).toHaveAttribute('aria-hidden', 'true'); }); }); }); diff --git a/core/src/components/menu/menu.tsx b/core/src/components/menu/menu.tsx index d83e53abb39..8a70dd8fb1d 100644 --- a/core/src/components/menu/menu.tsx +++ b/core/src/components/menu/menu.tsx @@ -8,6 +8,7 @@ import type { Attributes } from '@utils/helpers'; import { inheritAriaAttributes, assert, clamp, isEndSide as isEnd } from '@utils/helpers'; import { menuController } from '@utils/menu-controller'; import { BACKDROP, GESTURE, getPresentedOverlay } from '@utils/overlays'; +import { isPlatform } from '@utils/platform'; import { hostContext } from '@utils/theme'; import { config } from '../../global/config'; @@ -631,6 +632,23 @@ export class Menu implements ComponentInterface, MenuI { private beforeAnimation(shouldOpen: boolean, role?: string) { assert(!this.isAnimating, '_before() should not be called while animating'); + /** + * When the menu is presented on an Android device, TalkBack's focus rings + * may appear in the wrong position due to the transition (specifically + * `transform` styles). This occurs because the focus rings are initially + * displayed at the starting position of the elements before the transition + * begins. This workaround ensures the focus rings do not appear in the + * incorrect location. + * + * If this solution is applied to iOS devices, then it leads to a bug where + * the overlays cannot be accessed by screen readers. This is due to + * VoiceOver not being able to update the accessibility tree when the + * `aria-hidden` is removed. + */ + if (isPlatform('android')) { + this.el.setAttribute('aria-hidden', 'true'); + } + // this places the menu into the correct location before it animates in // this css class doesn't actually kick off any animations this.el.classList.add(SHOW_MENU); @@ -687,6 +705,17 @@ export class Menu implements ComponentInterface, MenuI { } if (isOpen) { + /** + * When the menu is presented on an Android device, TalkBack's focus rings + * may appear in the wrong position due to the transition (specifically + * `transform` styles). The menu is hidden from screen readers during the + * transition to prevent this. Once the transition is complete, the menu + * is shown again. + */ + if (isPlatform('android')) { + this.el.removeAttribute('aria-hidden'); + } + // emit open event this.ionDidOpen.emit(); @@ -703,6 +732,8 @@ export class Menu implements ComponentInterface, MenuI { // start focus trapping document.addEventListener('focus', this.handleFocus, true); } else { + this.el.removeAttribute('aria-hidden'); + // remove css classes and unhide content from screen readers this.el.classList.remove(SHOW_MENU); diff --git a/core/src/components/radio-group/radio-group.tsx b/core/src/components/radio-group/radio-group.tsx index 5d6036bc842..a8762b5f8a3 100644 --- a/core/src/components/radio-group/radio-group.tsx +++ b/core/src/components/radio-group/radio-group.tsx @@ -1,5 +1,5 @@ import type { ComponentInterface, EventEmitter } from '@stencil/core'; -import { Component, Element, Event, Host, Listen, Prop, Watch, h } from '@stencil/core'; +import { Component, Element, Event, Host, Listen, Method, Prop, Watch, h } from '@stencil/core'; import { renderHiddenInput } from '@utils/helpers'; import { getIonMode } from '../../global/ionic-global'; @@ -217,6 +217,13 @@ export class RadioGroup implements ComponentInterface { } } + /** @internal */ + @Method() + async setFocus() { + const radioToFocus = this.getRadios().find((r) => r.tabIndex !== -1); + radioToFocus?.setFocus(); + } + render() { const { label, labelId, el, name, value } = this; const mode = getIonMode(this); diff --git a/core/src/components/segment/test/segment-events.e2e.ts b/core/src/components/segment/test/segment-events.e2e.ts index 71aa7bdf80f..676e92b1c2e 100644 --- a/core/src/components/segment/test/segment-events.e2e.ts +++ b/core/src/components/segment/test/segment-events.e2e.ts @@ -1,5 +1,5 @@ import { expect } from '@playwright/test'; -import { configs, test } from '@utils/test/playwright'; +import { configs, test, dragElementBy } from '@utils/test/playwright'; /** * This behavior does not vary across modes/directions. @@ -105,8 +105,7 @@ configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => }); }); - // TODO FW-3021 - test.describe.skip('when the pointer is released', () => { + test.describe('when the pointer is released', () => { test('should emit if the value has changed', async ({ page }) => { test.info().annotations.push({ type: 'issue', @@ -136,14 +135,22 @@ configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => const ionChangeSpy = await page.spyOnEvent('ionChange'); + const segment = page.locator('ion-segment'); const firstButton = page.locator('ion-segment-button[value="1"]'); const lastButton = page.locator('ion-segment-button[value="3"]'); - await firstButton.hover(); - await page.mouse.down(); - - await lastButton.hover(); - await page.mouse.up(); + /* + * `dragByX` should represent the total width of all segment buttons, + * excluding the first half of the first button and the second half + * of the last button. This calculation accounts for dragging from + * the center of the first button to the center of the last button. + */ + const segmentWidth = await segment.boundingBox().then((box) => (box ? box.width : 0)); + const firstButtonWidth = await firstButton.boundingBox().then((box) => (box ? box.width : 0)); + const lastButtonWidth = await lastButton.boundingBox().then((box) => (box ? box.width : 0)); + const dragByX = segmentWidth - firstButtonWidth / 2 - lastButtonWidth / 2; + + await dragElementBy(firstButton, page, dragByX); expect(ionChangeSpy).toHaveReceivedEventDetail({ value: '3' }); expect(ionChangeSpy).toHaveReceivedEventTimes(1); diff --git a/core/src/components/toast/toast.scss b/core/src/components/toast/toast.scss index 2b94cf94d90..2c8398a3594 100644 --- a/core/src/components/toast/toast.scss +++ b/core/src/components/toast/toast.scss @@ -97,6 +97,8 @@ background: var(--background); box-shadow: var(--box-shadow); + + pointer-events: auto; } .toast-wrapper.toast-top { @@ -115,7 +117,6 @@ display: flex; align-items: center; - pointer-events: auto; height: inherit; min-height: inherit; diff --git a/core/src/utils/focus-trap.ts b/core/src/utils/focus-trap.ts index 1ac3d351ff7..918516c067b 100644 --- a/core/src/utils/focus-trap.ts +++ b/core/src/utils/focus-trap.ts @@ -13,7 +13,7 @@ import { focusVisibleElement } from '@utils/helpers'; * valid usage for the disabled property on ion-button. */ export const focusableQueryString = - '[tabindex]:not([tabindex^="-"]):not([hidden]):not([disabled]), input:not([type=hidden]):not([tabindex^="-"]):not([hidden]):not([disabled]), textarea:not([tabindex^="-"]):not([hidden]):not([disabled]), button:not([tabindex^="-"]):not([hidden]):not([disabled]), select:not([tabindex^="-"]):not([hidden]):not([disabled]), .ion-focusable:not([tabindex^="-"]):not([hidden]):not([disabled]), .ion-focusable[disabled="false"]:not([tabindex^="-"]):not([hidden])'; + '[tabindex]:not([tabindex^="-"]):not([hidden]):not([disabled]), input:not([type=hidden]):not([tabindex^="-"]):not([hidden]):not([disabled]), textarea:not([tabindex^="-"]):not([hidden]):not([disabled]), button:not([tabindex^="-"]):not([hidden]):not([disabled]), select:not([tabindex^="-"]):not([hidden]):not([disabled]), ion-checkbox:not([tabindex^="-"]):not([hidden]):not([disabled]), ion-radio:not([tabindex^="-"]):not([hidden]):not([disabled]), .ion-focusable:not([tabindex^="-"]):not([hidden]):not([disabled]), .ion-focusable[disabled="false"]:not([tabindex^="-"]):not([hidden])'; /** * Focuses the first descendant in a context @@ -78,7 +78,13 @@ const focusElementInContext = ( } if (elementToFocus) { - focusVisibleElement(elementToFocus); + const radioGroup = elementToFocus.closest('ion-radio-group'); + + if (radioGroup) { + radioGroup.setFocus(); + } else { + focusVisibleElement(elementToFocus); + } } else { // Focus fallback element instead of letting focus escape fallbackElement.focus(); diff --git a/core/src/utils/overlays.ts b/core/src/utils/overlays.ts index 8aaaad05038..90a4062840e 100644 --- a/core/src/utils/overlays.ts +++ b/core/src/utils/overlays.ts @@ -32,6 +32,7 @@ import { removeEventListener, } from './helpers'; import { printIonWarning } from './logging'; +import { isPlatform } from './platform'; let lastOverlayIndex = 0; let lastId = 0; @@ -970,21 +971,30 @@ export const createTriggerController = () => { * like TalkBack do not announce or interact with the content until the * animation is complete, avoiding confusion for users. * - * If the overlay is being presented, it prevents focus rings from appearing - * in incorrect positions due to the transition (specifically `transform` - * styles), ensuring that when aria-hidden is removed, the focus rings are - * correctly displayed in the final location of the elements. + * When the overlay is presented on an Android device, TalkBack's focus rings + * may appear in the wrong position due to the transition (specifically + * `transform` styles). This occurs because the focus rings are initially + * displayed at the starting position of the elements before the transition + * begins. This workaround ensures the focus rings do not appear in the + * incorrect location. + * + * If this solution is applied to iOS devices, then it leads to a bug where + * the overlays cannot be accessed by screen readers. This is due to + * VoiceOver not being able to update the accessibility tree when the + * `aria-hidden` is removed. * * @param overlay - The overlay that is being animated. */ const hideAnimatingOverlayFromScreenReaders = (overlay: HTMLIonOverlayElement) => { if (doc === undefined) return; - /** - * Once the animation is complete, this attribute will be removed. - * This is done at the end of the `present` method. - */ - overlay.setAttribute('aria-hidden', 'true'); + if (isPlatform('android')) { + /** + * Once the animation is complete, this attribute will be removed. + * This is done at the end of the `present` method. + */ + overlay.setAttribute('aria-hidden', 'true'); + } }; /** diff --git a/lerna.json b/lerna.json index 9573d91b5e6..25106cf05bc 100644 --- a/lerna.json +++ b/lerna.json @@ -3,5 +3,5 @@ "core", "packages/*" ], - "version": "8.4.0" + "version": "8.4.1" } \ No newline at end of file diff --git a/packages/angular-server/CHANGELOG.md b/packages/angular-server/CHANGELOG.md index f76d843625a..4bd9b065c22 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.4.1](https://github.com/ionic-team/ionic-framework/compare/v8.4.0...v8.4.1) (2024-11-27) + +**Note:** Version bump only for package @ionic/angular-server + + + + + # [8.4.0](https://github.com/ionic-team/ionic-framework/compare/v8.3.4...v8.4.0) (2024-11-04) **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 d076c1944ef..a7cba511c48 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.4.0", + "version": "8.4.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ionic/angular-server", - "version": "8.4.0", + "version": "8.4.1", "license": "MIT", "dependencies": { - "@ionic/core": "^8.4.0" + "@ionic/core": "^8.4.1" }, "devDependencies": { "@angular-eslint/eslint-plugin": "^16.0.0", @@ -1031,9 +1031,10 @@ "dev": true }, "node_modules/@ionic/core": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.4.0.tgz", - "integrity": "sha512-mZ2Ni9QByFGWBNr5W/F/nyPV+cXLhK+6W5BRziy7QPX6YIS57KH8FpY+CjE7BEcpE78anyY49bZt3eOWcES02g==", + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.4.1.tgz", + "integrity": "sha512-D5xpw5TF2wldpAWE0rHq3L+5T79EjR6d++QFpprjp+q+cFjjhOnfGD+2k7gLlWepAod9LUUigeL0JF02C2wgRQ==", + "license": "MIT", "dependencies": { "@stencil/core": "4.20.0", "ionicons": "^7.2.2", @@ -7188,9 +7189,9 @@ "dev": true }, "@ionic/core": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.4.0.tgz", - "integrity": "sha512-mZ2Ni9QByFGWBNr5W/F/nyPV+cXLhK+6W5BRziy7QPX6YIS57KH8FpY+CjE7BEcpE78anyY49bZt3eOWcES02g==", + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.4.1.tgz", + "integrity": "sha512-D5xpw5TF2wldpAWE0rHq3L+5T79EjR6d++QFpprjp+q+cFjjhOnfGD+2k7gLlWepAod9LUUigeL0JF02C2wgRQ==", "requires": { "@stencil/core": "4.20.0", "ionicons": "^7.2.2", diff --git a/packages/angular-server/package.json b/packages/angular-server/package.json index 2ab94afe04b..277ca8aa437 100644 --- a/packages/angular-server/package.json +++ b/packages/angular-server/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/angular-server", - "version": "8.4.0", + "version": "8.4.1", "description": "Angular SSR Module for Ionic", "keywords": [ "ionic", @@ -62,6 +62,6 @@ }, "prettier": "@ionic/prettier-config", "dependencies": { - "@ionic/core": "^8.4.0" + "@ionic/core": "^8.4.1" } } diff --git a/packages/angular/CHANGELOG.md b/packages/angular/CHANGELOG.md index 623f30b8ae2..4d6c522b0f7 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.4.1](https://github.com/ionic-team/ionic-framework/compare/v8.4.0...v8.4.1) (2024-11-27) + +**Note:** Version bump only for package @ionic/angular + + + + + # [8.4.0](https://github.com/ionic-team/ionic-framework/compare/v8.3.4...v8.4.0) (2024-11-04) diff --git a/packages/angular/package-lock.json b/packages/angular/package-lock.json index 99ae2425d51..0cd39ba8615 100644 --- a/packages/angular/package-lock.json +++ b/packages/angular/package-lock.json @@ -1,15 +1,15 @@ { "name": "@ionic/angular", - "version": "8.4.0", + "version": "8.4.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ionic/angular", - "version": "8.4.0", + "version": "8.4.1", "license": "MIT", "dependencies": { - "@ionic/core": "^8.4.0", + "@ionic/core": "^8.4.1", "ionicons": "^7.0.0", "jsonc-parser": "^3.0.0", "tslib": "^2.3.0" @@ -1398,9 +1398,10 @@ "dev": true }, "node_modules/@ionic/core": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.4.0.tgz", - "integrity": "sha512-mZ2Ni9QByFGWBNr5W/F/nyPV+cXLhK+6W5BRziy7QPX6YIS57KH8FpY+CjE7BEcpE78anyY49bZt3eOWcES02g==", + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.4.1.tgz", + "integrity": "sha512-D5xpw5TF2wldpAWE0rHq3L+5T79EjR6d++QFpprjp+q+cFjjhOnfGD+2k7gLlWepAod9LUUigeL0JF02C2wgRQ==", + "license": "MIT", "dependencies": { "@stencil/core": "4.20.0", "ionicons": "^7.2.2", @@ -9820,9 +9821,9 @@ "dev": true }, "@ionic/core": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.4.0.tgz", - "integrity": "sha512-mZ2Ni9QByFGWBNr5W/F/nyPV+cXLhK+6W5BRziy7QPX6YIS57KH8FpY+CjE7BEcpE78anyY49bZt3eOWcES02g==", + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.4.1.tgz", + "integrity": "sha512-D5xpw5TF2wldpAWE0rHq3L+5T79EjR6d++QFpprjp+q+cFjjhOnfGD+2k7gLlWepAod9LUUigeL0JF02C2wgRQ==", "requires": { "@stencil/core": "4.20.0", "ionicons": "^7.2.2", diff --git a/packages/angular/package.json b/packages/angular/package.json index e717fcb1fd7..6b11db9bf62 100644 --- a/packages/angular/package.json +++ b/packages/angular/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/angular", - "version": "8.4.0", + "version": "8.4.1", "description": "Angular specific wrappers for @ionic/core", "keywords": [ "ionic", @@ -47,7 +47,7 @@ } }, "dependencies": { - "@ionic/core": "^8.4.0", + "@ionic/core": "^8.4.1", "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 b4fa7afd0f6..c55c8ff4715 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.4.1](https://github.com/ionic-team/ionic-framework/compare/v8.4.0...v8.4.1) (2024-11-27) + +**Note:** Version bump only for package @ionic/docs + + + + + # [8.4.0](https://github.com/ionic-team/ionic-framework/compare/v8.3.4...v8.4.0) (2024-11-04) **Note:** Version bump only for package @ionic/docs diff --git a/packages/docs/package-lock.json b/packages/docs/package-lock.json index cecd55ac062..23673b495d7 100644 --- a/packages/docs/package-lock.json +++ b/packages/docs/package-lock.json @@ -1,12 +1,12 @@ { "name": "@ionic/docs", - "version": "8.4.0", + "version": "8.4.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ionic/docs", - "version": "8.4.0", + "version": "8.4.1", "license": "MIT" } } diff --git a/packages/docs/package.json b/packages/docs/package.json index ecfb015d6e8..62ce152ba62 100644 --- a/packages/docs/package.json +++ b/packages/docs/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/docs", - "version": "8.4.0", + "version": "8.4.1", "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 d4fbfb89f7e..686c6fc9249 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.4.1](https://github.com/ionic-team/ionic-framework/compare/v8.4.0...v8.4.1) (2024-11-27) + +**Note:** Version bump only for package @ionic/react-router + + + + + # [8.4.0](https://github.com/ionic-team/ionic-framework/compare/v8.3.4...v8.4.0) (2024-11-04) **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 eec354f3d51..7f96b76fd03 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.4.0", + "version": "8.4.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ionic/react-router", - "version": "8.4.0", + "version": "8.4.1", "license": "MIT", "dependencies": { - "@ionic/react": "^8.4.0", + "@ionic/react": "^8.4.1", "tslib": "*" }, "devDependencies": { @@ -238,9 +238,10 @@ "dev": true }, "node_modules/@ionic/core": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.4.0.tgz", - "integrity": "sha512-mZ2Ni9QByFGWBNr5W/F/nyPV+cXLhK+6W5BRziy7QPX6YIS57KH8FpY+CjE7BEcpE78anyY49bZt3eOWcES02g==", + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.4.1.tgz", + "integrity": "sha512-D5xpw5TF2wldpAWE0rHq3L+5T79EjR6d++QFpprjp+q+cFjjhOnfGD+2k7gLlWepAod9LUUigeL0JF02C2wgRQ==", + "license": "MIT", "dependencies": { "@stencil/core": "4.20.0", "ionicons": "^7.2.2", @@ -414,11 +415,12 @@ } }, "node_modules/@ionic/react": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/@ionic/react/-/react-8.4.0.tgz", - "integrity": "sha512-wCtixCwf673Qnes1uGxmRoyUP4FnGtEyUVwtkcfj9IBrPUbw641Ws8J4jRjQ2rOO1WkWkSCeHKnd+KYCqyulZg==", + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/@ionic/react/-/react-8.4.1.tgz", + "integrity": "sha512-QGxcNilIAMWylgKFQuojESDm7T5aRopKDqsH7c0mdRZPMA5o5i9ErnjBfhZgG7ABuyZ7m+T3TWHqzE/umX43ng==", + "license": "MIT", "dependencies": { - "@ionic/core": "8.4.0", + "@ionic/core": "8.4.1", "ionicons": "^7.0.0", "tslib": "*" }, @@ -670,6 +672,7 @@ "version": "4.20.0", "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.20.0.tgz", "integrity": "sha512-WPrTHFngvN081RY+dJPneKQLwnOFD60OMCOQGmmSHfCW0f4ujPMzzhwWU1gcSwXPWXz5O+8cBiiCaxAbJU7kAg==", + "license": "MIT", "bin": { "stencil": "bin/stencil" }, @@ -2428,6 +2431,7 @@ "version": "7.4.0", "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-7.4.0.tgz", "integrity": "sha512-ZK94MMqgzMCPPMhmk8Ouu6goyVHFIlw/ACP6oe3FrikcI0N7CX0xcwVaEbUc0G/v3W0shI93vo+9ve/KpvcNhQ==", + "license": "MIT", "dependencies": { "@stencil/core": "^4.0.3" } @@ -4057,9 +4061,9 @@ "dev": true }, "@ionic/core": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.4.0.tgz", - "integrity": "sha512-mZ2Ni9QByFGWBNr5W/F/nyPV+cXLhK+6W5BRziy7QPX6YIS57KH8FpY+CjE7BEcpE78anyY49bZt3eOWcES02g==", + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.4.1.tgz", + "integrity": "sha512-D5xpw5TF2wldpAWE0rHq3L+5T79EjR6d++QFpprjp+q+cFjjhOnfGD+2k7gLlWepAod9LUUigeL0JF02C2wgRQ==", "requires": { "@stencil/core": "4.20.0", "ionicons": "^7.2.2", @@ -4163,11 +4167,11 @@ "requires": {} }, "@ionic/react": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/@ionic/react/-/react-8.4.0.tgz", - "integrity": "sha512-wCtixCwf673Qnes1uGxmRoyUP4FnGtEyUVwtkcfj9IBrPUbw641Ws8J4jRjQ2rOO1WkWkSCeHKnd+KYCqyulZg==", + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/@ionic/react/-/react-8.4.1.tgz", + "integrity": "sha512-QGxcNilIAMWylgKFQuojESDm7T5aRopKDqsH7c0mdRZPMA5o5i9ErnjBfhZgG7ABuyZ7m+T3TWHqzE/umX43ng==", "requires": { - "@ionic/core": "8.4.0", + "@ionic/core": "8.4.1", "ionicons": "^7.0.0", "tslib": "*" } diff --git a/packages/react-router/package.json b/packages/react-router/package.json index cfcd1a4e453..5d3161028ad 100644 --- a/packages/react-router/package.json +++ b/packages/react-router/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/react-router", - "version": "8.4.0", + "version": "8.4.1", "description": "React Router wrapper for @ionic/react", "keywords": [ "ionic", @@ -36,7 +36,7 @@ "dist/" ], "dependencies": { - "@ionic/react": "^8.4.0", + "@ionic/react": "^8.4.1", "tslib": "*" }, "peerDependencies": { diff --git a/packages/react/CHANGELOG.md b/packages/react/CHANGELOG.md index bcb4d07e5c1..504b70db8cf 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.4.1](https://github.com/ionic-team/ionic-framework/compare/v8.4.0...v8.4.1) (2024-11-27) + +**Note:** Version bump only for package @ionic/react + + + + + # [8.4.0](https://github.com/ionic-team/ionic-framework/compare/v8.3.4...v8.4.0) (2024-11-04) diff --git a/packages/react/package-lock.json b/packages/react/package-lock.json index 05689bce961..f86e75d9805 100644 --- a/packages/react/package-lock.json +++ b/packages/react/package-lock.json @@ -1,15 +1,15 @@ { "name": "@ionic/react", - "version": "8.4.0", + "version": "8.4.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ionic/react", - "version": "8.4.0", + "version": "8.4.1", "license": "MIT", "dependencies": { - "@ionic/core": "^8.4.0", + "@ionic/core": "^8.4.1", "ionicons": "^7.0.0", "tslib": "*" }, @@ -736,9 +736,10 @@ "dev": true }, "node_modules/@ionic/core": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.4.0.tgz", - "integrity": "sha512-mZ2Ni9QByFGWBNr5W/F/nyPV+cXLhK+6W5BRziy7QPX6YIS57KH8FpY+CjE7BEcpE78anyY49bZt3eOWcES02g==", + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.4.1.tgz", + "integrity": "sha512-D5xpw5TF2wldpAWE0rHq3L+5T79EjR6d++QFpprjp+q+cFjjhOnfGD+2k7gLlWepAod9LUUigeL0JF02C2wgRQ==", + "license": "MIT", "dependencies": { "@stencil/core": "4.20.0", "ionicons": "^7.2.2", @@ -12315,9 +12316,9 @@ "dev": true }, "@ionic/core": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.4.0.tgz", - "integrity": "sha512-mZ2Ni9QByFGWBNr5W/F/nyPV+cXLhK+6W5BRziy7QPX6YIS57KH8FpY+CjE7BEcpE78anyY49bZt3eOWcES02g==", + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.4.1.tgz", + "integrity": "sha512-D5xpw5TF2wldpAWE0rHq3L+5T79EjR6d++QFpprjp+q+cFjjhOnfGD+2k7gLlWepAod9LUUigeL0JF02C2wgRQ==", "requires": { "@stencil/core": "4.20.0", "ionicons": "^7.2.2", diff --git a/packages/react/package.json b/packages/react/package.json index 42b40b1483f..152e60b797a 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/react", - "version": "8.4.0", + "version": "8.4.1", "description": "React specific wrapper for @ionic/core", "keywords": [ "ionic", @@ -39,7 +39,7 @@ "css/" ], "dependencies": { - "@ionic/core": "^8.4.0", + "@ionic/core": "^8.4.1", "ionicons": "^7.0.0", "tslib": "*" }, diff --git a/packages/vue-router/CHANGELOG.md b/packages/vue-router/CHANGELOG.md index a761ceda1e5..b698ac96fbb 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.4.1](https://github.com/ionic-team/ionic-framework/compare/v8.4.0...v8.4.1) (2024-11-27) + +**Note:** Version bump only for package @ionic/vue-router + + + + + # [8.4.0](https://github.com/ionic-team/ionic-framework/compare/v8.3.4...v8.4.0) (2024-11-04) **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 de31e284492..75f1604ac69 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.4.0", + "version": "8.4.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ionic/vue-router", - "version": "8.4.0", + "version": "8.4.1", "license": "MIT", "dependencies": { - "@ionic/vue": "^8.4.0" + "@ionic/vue": "^8.4.1" }, "devDependencies": { "@ionic/eslint-config": "^0.3.0", @@ -661,9 +661,10 @@ "dev": true }, "node_modules/@ionic/core": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.4.0.tgz", - "integrity": "sha512-mZ2Ni9QByFGWBNr5W/F/nyPV+cXLhK+6W5BRziy7QPX6YIS57KH8FpY+CjE7BEcpE78anyY49bZt3eOWcES02g==", + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.4.1.tgz", + "integrity": "sha512-D5xpw5TF2wldpAWE0rHq3L+5T79EjR6d++QFpprjp+q+cFjjhOnfGD+2k7gLlWepAod9LUUigeL0JF02C2wgRQ==", + "license": "MIT", "dependencies": { "@stencil/core": "4.20.0", "ionicons": "^7.2.2", @@ -852,11 +853,12 @@ } }, "node_modules/@ionic/vue": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/@ionic/vue/-/vue-8.4.0.tgz", - "integrity": "sha512-mtSerl9oC21d6xv1q+QuGm61IzJbqpkWbt0lQryXZ3kK1/aVVOnHAN5bX8tPPUN2ALA7CyTWXaCvhxceRV/paA==", + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/@ionic/vue/-/vue-8.4.1.tgz", + "integrity": "sha512-L2IyyK/74saLuRoyTHGsRDywe7ehQol2d8X5KJgEhajt2i0A1zZaqIxfJJra4k9a+ZwNVASotMbRGURK9RqCZA==", + "license": "MIT", "dependencies": { - "@ionic/core": "8.4.0", + "@ionic/core": "8.4.1", "ionicons": "^7.0.0" } }, @@ -1511,6 +1513,7 @@ "version": "4.20.0", "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.20.0.tgz", "integrity": "sha512-WPrTHFngvN081RY+dJPneKQLwnOFD60OMCOQGmmSHfCW0f4ujPMzzhwWU1gcSwXPWXz5O+8cBiiCaxAbJU7kAg==", + "license": "MIT", "bin": { "stencil": "bin/stencil" }, @@ -4282,6 +4285,7 @@ "version": "7.4.0", "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-7.4.0.tgz", "integrity": "sha512-ZK94MMqgzMCPPMhmk8Ouu6goyVHFIlw/ACP6oe3FrikcI0N7CX0xcwVaEbUc0G/v3W0shI93vo+9ve/KpvcNhQ==", + "license": "MIT", "dependencies": { "@stencil/core": "^4.0.3" } @@ -7878,9 +7882,9 @@ "dev": true }, "@ionic/core": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.4.0.tgz", - "integrity": "sha512-mZ2Ni9QByFGWBNr5W/F/nyPV+cXLhK+6W5BRziy7QPX6YIS57KH8FpY+CjE7BEcpE78anyY49bZt3eOWcES02g==", + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.4.1.tgz", + "integrity": "sha512-D5xpw5TF2wldpAWE0rHq3L+5T79EjR6d++QFpprjp+q+cFjjhOnfGD+2k7gLlWepAod9LUUigeL0JF02C2wgRQ==", "requires": { "@stencil/core": "4.20.0", "ionicons": "^7.2.2", @@ -7993,11 +7997,11 @@ "requires": {} }, "@ionic/vue": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/@ionic/vue/-/vue-8.4.0.tgz", - "integrity": "sha512-mtSerl9oC21d6xv1q+QuGm61IzJbqpkWbt0lQryXZ3kK1/aVVOnHAN5bX8tPPUN2ALA7CyTWXaCvhxceRV/paA==", + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/@ionic/vue/-/vue-8.4.1.tgz", + "integrity": "sha512-L2IyyK/74saLuRoyTHGsRDywe7ehQol2d8X5KJgEhajt2i0A1zZaqIxfJJra4k9a+ZwNVASotMbRGURK9RqCZA==", "requires": { - "@ionic/core": "8.4.0", + "@ionic/core": "8.4.1", "ionicons": "^7.0.0" } }, diff --git a/packages/vue-router/package.json b/packages/vue-router/package.json index 7cb544beab4..c284dd4e573 100644 --- a/packages/vue-router/package.json +++ b/packages/vue-router/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/vue-router", - "version": "8.4.0", + "version": "8.4.1", "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.4.0" + "@ionic/vue": "^8.4.1" }, "devDependencies": { "@ionic/eslint-config": "^0.3.0", diff --git a/packages/vue/CHANGELOG.md b/packages/vue/CHANGELOG.md index f7db26db10e..a14b2411a20 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.4.1](https://github.com/ionic-team/ionic-framework/compare/v8.4.0...v8.4.1) (2024-11-27) + +**Note:** Version bump only for package @ionic/vue + + + + + # [8.4.0](https://github.com/ionic-team/ionic-framework/compare/v8.3.4...v8.4.0) (2024-11-04) diff --git a/packages/vue/package-lock.json b/packages/vue/package-lock.json index 5733d9b5a62..6198cf6d87b 100644 --- a/packages/vue/package-lock.json +++ b/packages/vue/package-lock.json @@ -1,15 +1,15 @@ { "name": "@ionic/vue", - "version": "8.4.0", + "version": "8.4.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ionic/vue", - "version": "8.4.0", + "version": "8.4.1", "license": "MIT", "dependencies": { - "@ionic/core": "^8.4.0", + "@ionic/core": "^8.4.1", "ionicons": "^7.0.0" }, "devDependencies": { @@ -208,9 +208,10 @@ "dev": true }, "node_modules/@ionic/core": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.4.0.tgz", - "integrity": "sha512-mZ2Ni9QByFGWBNr5W/F/nyPV+cXLhK+6W5BRziy7QPX6YIS57KH8FpY+CjE7BEcpE78anyY49bZt3eOWcES02g==", + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.4.1.tgz", + "integrity": "sha512-D5xpw5TF2wldpAWE0rHq3L+5T79EjR6d++QFpprjp+q+cFjjhOnfGD+2k7gLlWepAod9LUUigeL0JF02C2wgRQ==", + "license": "MIT", "dependencies": { "@stencil/core": "4.20.0", "ionicons": "^7.2.2", @@ -3970,9 +3971,9 @@ "dev": true }, "@ionic/core": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.4.0.tgz", - "integrity": "sha512-mZ2Ni9QByFGWBNr5W/F/nyPV+cXLhK+6W5BRziy7QPX6YIS57KH8FpY+CjE7BEcpE78anyY49bZt3eOWcES02g==", + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.4.1.tgz", + "integrity": "sha512-D5xpw5TF2wldpAWE0rHq3L+5T79EjR6d++QFpprjp+q+cFjjhOnfGD+2k7gLlWepAod9LUUigeL0JF02C2wgRQ==", "requires": { "@stencil/core": "4.20.0", "ionicons": "^7.2.2", diff --git a/packages/vue/package.json b/packages/vue/package.json index e3920d69dfa..c35914e4684 100644 --- a/packages/vue/package.json +++ b/packages/vue/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/vue", - "version": "8.4.0", + "version": "8.4.1", "description": "Vue specific wrapper for @ionic/core", "scripts": { "eslint": "eslint src", @@ -66,7 +66,7 @@ "vue-router": "^4.0.16" }, "dependencies": { - "@ionic/core": "^8.4.0", + "@ionic/core": "^8.4.1", "ionicons": "^7.0.0" }, "vetur": {