diff --git a/CHANGELOG.md b/CHANGELOG.md
index 875825ea57..a6e49112c0 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,23 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [8.3.4](https://github.com/ionic-team/ionic-framework/compare/v8.3.3...v8.3.4) (2024-10-30)
+
+
+### Bug Fixes
+
+* **angular:** add missing 'compareWith' input to standalone ion-radio-group ([#29870](https://github.com/ionic-team/ionic-framework/issues/29870)) ([47ba703](https://github.com/ionic-team/ionic-framework/commit/47ba703a57d1ca506f943f6b790d0bf7583d79cb)), closes [#29826](https://github.com/ionic-team/ionic-framework/issues/29826)
+* **backdrop:** remove tabindex for improved accessibility ([#29956](https://github.com/ionic-team/ionic-framework/issues/29956)) ([7294e96](https://github.com/ionic-team/ionic-framework/commit/7294e969bb913692eaf28e54860614f445132713)), closes [#29773](https://github.com/ionic-team/ionic-framework/issues/29773)
+* **input, textarea:** ensure screen readers announce helper and error text when focused ([#29958](https://github.com/ionic-team/ionic-framework/issues/29958)) ([5a73145](https://github.com/ionic-team/ionic-framework/commit/5a7314553a8def87bd19275640c92dd72a6ef1a4))
+* **overlay:** hide from screen readers while animating ([#29951](https://github.com/ionic-team/ionic-framework/issues/29951)) ([cb60073](https://github.com/ionic-team/ionic-framework/commit/cb6007363a8d42b5f126945427c2bfc3d7209c21)), closes [#29857](https://github.com/ionic-team/ionic-framework/issues/29857)
+* **overlays:** do not hide root when toast appears ([#29962](https://github.com/ionic-team/ionic-framework/issues/29962)) ([322d7c9](https://github.com/ionic-team/ionic-framework/commit/322d7c98cf6613df0b0db3f119e3f892e6a17e7b)), closes [#29773](https://github.com/ionic-team/ionic-framework/issues/29773)
+* **overlays:** hide the focus trap div from screen readers ([#29970](https://github.com/ionic-team/ionic-framework/issues/29970)) ([c3b58f1](https://github.com/ionic-team/ionic-framework/commit/c3b58f1620bcb74db43e3983ef570b7b982abd83)), closes [#29858](https://github.com/ionic-team/ionic-framework/issues/29858)
+* **vue:** incorrect view rendered when using router.go(-n) ([#29877](https://github.com/ionic-team/ionic-framework/issues/29877)) ([e32fbe0](https://github.com/ionic-team/ionic-framework/commit/e32fbe02102fe80db29f73c26496a40852032354)), closes [#28201](https://github.com/ionic-team/ionic-framework/issues/28201) [#28201](https://github.com/ionic-team/ionic-framework/issues/28201) [#29847](https://github.com/ionic-team/ionic-framework/issues/29847)
+
+
+
+
+
## [8.3.3](https://github.com/ionic-team/ionic-framework/compare/v8.3.2...v8.3.3) (2024-10-16)
diff --git a/core/CHANGELOG.md b/core/CHANGELOG.md
index 5cf7ee82a7..9f8cea162c 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.3.4](https://github.com/ionic-team/ionic-framework/compare/v8.3.3...v8.3.4) (2024-10-30)
+
+
+### Bug Fixes
+
+* **backdrop:** remove tabindex for improved accessibility ([#29956](https://github.com/ionic-team/ionic-framework/issues/29956)) ([7294e96](https://github.com/ionic-team/ionic-framework/commit/7294e969bb913692eaf28e54860614f445132713)), closes [#29773](https://github.com/ionic-team/ionic-framework/issues/29773)
+* **input, textarea:** ensure screen readers announce helper and error text when focused ([#29958](https://github.com/ionic-team/ionic-framework/issues/29958)) ([5a73145](https://github.com/ionic-team/ionic-framework/commit/5a7314553a8def87bd19275640c92dd72a6ef1a4))
+* **overlay:** hide from screen readers while animating ([#29951](https://github.com/ionic-team/ionic-framework/issues/29951)) ([cb60073](https://github.com/ionic-team/ionic-framework/commit/cb6007363a8d42b5f126945427c2bfc3d7209c21)), closes [#29857](https://github.com/ionic-team/ionic-framework/issues/29857)
+* **overlays:** do not hide root when toast appears ([#29962](https://github.com/ionic-team/ionic-framework/issues/29962)) ([322d7c9](https://github.com/ionic-team/ionic-framework/commit/322d7c98cf6613df0b0db3f119e3f892e6a17e7b)), closes [#29773](https://github.com/ionic-team/ionic-framework/issues/29773)
+* **overlays:** hide the focus trap div from screen readers ([#29970](https://github.com/ionic-team/ionic-framework/issues/29970)) ([c3b58f1](https://github.com/ionic-team/ionic-framework/commit/c3b58f1620bcb74db43e3983ef570b7b982abd83)), closes [#29858](https://github.com/ionic-team/ionic-framework/issues/29858)
+
+
+
+
+
## [8.3.3](https://github.com/ionic-team/ionic-framework/compare/v8.3.2...v8.3.3) (2024-10-16)
**Note:** Version bump only for package @ionic/core
diff --git a/core/package-lock.json b/core/package-lock.json
index 9a95644915..08cb818563 100644
--- a/core/package-lock.json
+++ b/core/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "@ionic/core",
- "version": "8.3.3",
+ "version": "8.3.4",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "@ionic/core",
- "version": "8.3.3",
+ "version": "8.3.4",
"license": "MIT",
"dependencies": {
"@phosphor-icons/core": "^2.1.1",
diff --git a/core/package.json b/core/package.json
index c77896117d..4b33e885dc 100644
--- a/core/package.json
+++ b/core/package.json
@@ -1,6 +1,6 @@
{
"name": "@ionic/core",
- "version": "8.3.3",
+ "version": "8.3.4",
"description": "Base components for Ionic",
"keywords": [
"ionic",
diff --git a/core/src/components/action-sheet/action-sheet.tsx b/core/src/components/action-sheet/action-sheet.tsx
index a37ffaba21..fefa8e1a7e 100644
--- a/core/src/components/action-sheet/action-sheet.tsx
+++ b/core/src/components/action-sheet/action-sheet.tsx
@@ -388,7 +388,7 @@ export class ActionSheet implements ComponentInterface, OverlayInterface {
>
-
+
(this.wrapperEl = el)}>
@@ -449,7 +449,7 @@ export class ActionSheet implements ComponentInterface, OverlayInterface {
-
+
);
}
diff --git a/core/src/components/alert/alert.tsx b/core/src/components/alert/alert.tsx
index 67b51ed182..294c7f941b 100644
--- a/core/src/components/alert/alert.tsx
+++ b/core/src/components/alert/alert.tsx
@@ -759,7 +759,7 @@ export class Alert implements ComponentInterface, OverlayInterface {
>
-
+
(this.wrapperEl = el)}>
@@ -781,7 +781,7 @@ export class Alert implements ComponentInterface, OverlayInterface {
{this.renderAlertButtons()}
-
+
);
}
diff --git a/core/src/components/backdrop/backdrop.tsx b/core/src/components/backdrop/backdrop.tsx
index 1ade7d52a7..2a1d883cbd 100644
--- a/core/src/components/backdrop/backdrop.tsx
+++ b/core/src/components/backdrop/backdrop.tsx
@@ -56,7 +56,6 @@ export class Backdrop implements ComponentInterface {
const theme = getIonTheme(this);
return (
{helperText} , {errorText}
];
+ return [
+
+ {helperText}
+
,
+
+ {errorText}
+
,
+ ];
+ }
+
+ private getHintTextID(): string | undefined {
+ const { el, helperText, errorText, helperTextId, errorTextId } = this;
+
+ if (el.classList.contains('ion-touched') && el.classList.contains('ion-invalid') && errorText) {
+ return errorTextId;
+ }
+
+ if (helperText) {
+ return helperTextId;
+ }
+
+ return undefined;
}
private renderCounter() {
@@ -905,6 +928,8 @@ export class Input implements ComponentInterface {
onKeyDown={this.onKeydown}
onCompositionstart={this.onCompositionStart}
onCompositionend={this.onCompositionEnd}
+ aria-describedby={this.getHintTextID()}
+ aria-invalid={this.getHintTextID() === this.errorTextId}
{...this.inheritedAttributes}
/>
{clearInput && !readonly && !disabled && (
diff --git a/core/src/components/input/test/bottom-content/input.e2e.ts b/core/src/components/input/test/bottom-content/input.e2e.ts
index 880e0fe85b..d650b3f08e 100644
--- a/core/src/components/input/test/bottom-content/input.e2e.ts
+++ b/core/src/components/input/test/bottom-content/input.e2e.ts
@@ -93,6 +93,19 @@ configs({ modes: ['md', 'ionic-md'], directions: ['ltr'] }).forEach(({ title, sc
await expect(helperText).toHaveText('my helper');
await expect(errorText).toBeHidden();
});
+ test('input should have an aria-describedby attribute when helper text is present', async ({ page }) => {
+ await page.setContent(
+ ``,
+ config
+ );
+
+ const input = page.locator('ion-input input');
+ const helperText = page.locator('ion-input .helper-text');
+ const helperTextId = await helperText.getAttribute('id');
+ const ariaDescribedBy = await input.getAttribute('aria-describedby');
+
+ expect(ariaDescribedBy).toBe(helperTextId);
+ });
test('error text should be visible when input is invalid', async ({ page }) => {
await page.setContent(
``,
@@ -122,6 +135,48 @@ configs({ modes: ['md', 'ionic-md'], directions: ['ltr'] }).forEach(({ title, sc
const bottomEl = page.locator('ion-input .input-bottom');
await expect(bottomEl).toHaveScreenshot(screenshot(`input-error-custom-color`));
});
+ test('input should have an aria-describedby attribute when error text is present', async ({ page }) => {
+ await page.setContent(
+ ``,
+ config
+ );
+
+ const input = page.locator('ion-input input');
+ const errorText = page.locator('ion-input .error-text');
+ const errorTextId = await errorText.getAttribute('id');
+ const ariaDescribedBy = await input.getAttribute('aria-describedby');
+
+ expect(ariaDescribedBy).toBe(errorTextId);
+ });
+ test('input should have aria-invalid attribute when input is invalid', async ({ page }) => {
+ await page.setContent(
+ ``,
+ config
+ );
+
+ const input = page.locator('ion-input input');
+
+ await expect(input).toHaveAttribute('aria-invalid');
+ });
+ test('input should not have aria-invalid attribute when input is valid', async ({ page }) => {
+ await page.setContent(
+ ``,
+ config
+ );
+
+ const input = page.locator('ion-input input');
+
+ await expect(input).not.toHaveAttribute('aria-invalid');
+ });
+ test('input should not have aria-describedby attribute when no hint or error text is present', async ({
+ page,
+ }) => {
+ await page.setContent(``, config);
+
+ const input = page.locator('ion-input input');
+
+ await expect(input).not.toHaveAttribute('aria-describedby');
+ });
});
test.describe('input: hint text rendering', () => {
test.describe('regular inputs', () => {
diff --git a/core/src/components/loading/loading.tsx b/core/src/components/loading/loading.tsx
index f7b94f61aa..aa01891fc5 100644
--- a/core/src/components/loading/loading.tsx
+++ b/core/src/components/loading/loading.tsx
@@ -358,7 +358,7 @@ export class Loading implements ComponentInterface, OverlayInterface {
>
-
+
{spinner && (
@@ -370,7 +370,7 @@ export class Loading implements ComponentInterface, OverlayInterface {
{message !== undefined && this.renderLoadingMessage(msgId)}
-
+
);
}
diff --git a/core/src/components/picker-legacy/picker.tsx b/core/src/components/picker-legacy/picker.tsx
index 6e3a3d8b12..9f5709b5b8 100644
--- a/core/src/components/picker-legacy/picker.tsx
+++ b/core/src/components/picker-legacy/picker.tsx
@@ -376,7 +376,7 @@ export class Picker implements ComponentInterface, OverlayInterface {
>
-
+
@@ -396,7 +396,7 @@ export class Picker implements ComponentInterface, OverlayInterface {
-
+
);
}
diff --git a/core/src/components/textarea/test/bottom-content/textarea.e2e.ts b/core/src/components/textarea/test/bottom-content/textarea.e2e.ts
index e6c60e1ce0..79fcfc4cfa 100644
--- a/core/src/components/textarea/test/bottom-content/textarea.e2e.ts
+++ b/core/src/components/textarea/test/bottom-content/textarea.e2e.ts
@@ -27,6 +27,19 @@ configs({ modes: ['md'], directions: ['ltr'] }).forEach(({ title, screenshot, co
await expect(helperText).toHaveText('my helper');
await expect(errorText).toBeHidden();
});
+ test('textarea should have an aria-describedby attribute when helper text is present', async ({ page }) => {
+ await page.setContent(
+ ``,
+ config
+ );
+
+ const textarea = page.locator('ion-textarea textarea');
+ const helperText = page.locator('ion-textarea .helper-text');
+ const helperTextId = await helperText.getAttribute('id');
+ const ariaDescribedBy = await textarea.getAttribute('aria-describedby');
+
+ expect(ariaDescribedBy).toBe(helperTextId);
+ });
test('error text should be visible when textarea is invalid', async ({ page }) => {
await page.setContent(
``,
@@ -55,6 +68,48 @@ configs({ modes: ['md'], directions: ['ltr'] }).forEach(({ title, screenshot, co
const errorText = page.locator('ion-textarea .error-text');
await expect(errorText).toHaveScreenshot(screenshot(`textarea-error-custom-color`));
});
+ test('textarea should have an aria-describedby attribute when error text is present', async ({ page }) => {
+ await page.setContent(
+ ``,
+ config
+ );
+
+ const textarea = page.locator('ion-textarea textarea');
+ const errorText = page.locator('ion-textarea .error-text');
+ const errorTextId = await errorText.getAttribute('id');
+ const ariaDescribedBy = await textarea.getAttribute('aria-describedby');
+
+ expect(ariaDescribedBy).toBe(errorTextId);
+ });
+ test('textarea should have aria-invalid attribute when input is invalid', async ({ page }) => {
+ await page.setContent(
+ ``,
+ config
+ );
+
+ const textarea = page.locator('ion-textarea textarea');
+
+ await expect(textarea).toHaveAttribute('aria-invalid');
+ });
+ test('textarea should not have aria-invalid attribute when input is valid', async ({ page }) => {
+ await page.setContent(
+ ``,
+ config
+ );
+
+ const textarea = page.locator('ion-textarea textarea');
+
+ await expect(textarea).not.toHaveAttribute('aria-invalid');
+ });
+ test('textarea should not have aria-describedby attribute when no hint or error text is present', async ({
+ page,
+ }) => {
+ await page.setContent(``, config);
+
+ const textarea = page.locator('ion-textarea textarea');
+
+ await expect(textarea).not.toHaveAttribute('aria-describedby');
+ });
});
test.describe('textarea: hint text rendering', () => {
test.describe('regular textareas', () => {
diff --git a/core/src/components/textarea/textarea.tsx b/core/src/components/textarea/textarea.tsx
index 8cdb26059c..12c107d711 100644
--- a/core/src/components/textarea/textarea.tsx
+++ b/core/src/components/textarea/textarea.tsx
@@ -47,6 +47,8 @@ import type { TextareaChangeEventDetail, TextareaInputEventDetail } from './text
export class Textarea implements ComponentInterface {
private nativeInput?: HTMLTextAreaElement;
private inputId = `ion-textarea-${textareaIds++}`;
+ private helperTextId = `${this.inputId}-helper-text`;
+ private errorTextId = `${this.inputId}-error-text`;
/**
* `true` if the textarea was cleared as a result of the user typing
* with `clearOnEdit` enabled.
@@ -601,9 +603,30 @@ export class Textarea implements ComponentInterface {
* Renders the helper text or error text values
*/
private renderHintText() {
- const { helperText, errorText } = this;
+ const { helperText, errorText, helperTextId, errorTextId } = this;
- return [{helperText}
, {errorText}
];
+ return [
+
+ {helperText}
+
,
+
+ {errorText}
+
,
+ ];
+ }
+
+ private getHintTextID(): string | undefined {
+ const { el, helperText, errorText, helperTextId, errorTextId } = this;
+
+ if (el.classList.contains('ion-touched') && el.classList.contains('ion-invalid') && errorText) {
+ return errorTextId;
+ }
+
+ if (helperText) {
+ return helperTextId;
+ }
+
+ return undefined;
}
private renderCounter() {
@@ -742,6 +765,8 @@ export class Textarea implements ComponentInterface {
onBlur={this.onBlur}
onFocus={this.onFocus}
onKeyDown={this.onKeyDown}
+ aria-describedby={this.getHintTextID()}
+ aria-invalid={this.getHintTextID() === this.errorTextId}
{...this.inheritedAttributes}
>
{value}
diff --git a/core/src/utils/overlays.ts b/core/src/utils/overlays.ts
index a23f305c7b..2c9adac197 100644
--- a/core/src/utils/overlays.ts
+++ b/core/src/utils/overlays.ts
@@ -510,11 +510,21 @@ export const present = async (
return;
}
- setRootAriaHidden(true);
+ /**
+ * Due to accessibility guidelines, toasts do not have
+ * focus traps.
+ *
+ * All other overlays should have focus traps to prevent
+ * the keyboard focus from leaving the overlay.
+ */
+ if (overlay.el.tagName !== 'ION-TOAST') {
+ setRootAriaHidden(true);
+ }
document.body.classList.add(BACKDROP_NO_SCROLL);
- hideOverlaysFromScreenReaders(overlay.el);
+ hideUnderlyingOverlaysFromScreenReaders(overlay.el);
+ hideAnimatingOverlayFromScreenReaders(overlay.el);
overlay.presented = true;
overlay.willPresent.emit();
@@ -560,6 +570,11 @@ export const present = async (
* it would still have aria-hidden on being presented again.
* Removing it here ensures the overlay is visible to screen
* readers.
+ *
+ * If this overlay was being presented, then it was hidden
+ * from screen readers during the animation. Now that the
+ * animation is complete, we can reveal the overlay to
+ * screen readers.
*/
overlay.el.removeAttribute('aria-hidden');
};
@@ -630,13 +645,26 @@ export const dismiss = async (
return false;
}
- const lastOverlay = doc !== undefined && getPresentedOverlays(doc).length === 1;
+ /**
+ * For accessibility, toasts lack focus traps and don’t receive
+ * `aria-hidden` on the root element when presented.
+ *
+ * All other overlays use focus traps to keep keyboard focus
+ * within the overlay, setting `aria-hidden` on the root element
+ * to enhance accessibility.
+ *
+ * Therefore, we must remove `aria-hidden` from the root element
+ * when the last non-toast overlay is dismissed.
+ */
+ const overlaysNotToast = doc !== undefined ? getPresentedOverlays(doc).filter((o) => o.tagName !== 'ION-TOAST') : [];
+
+ const lastOverlayNotToast = overlaysNotToast.length === 1 && overlaysNotToast[0].id === overlay.el.id;
/**
- * If this is the last visible overlay then
- * we want to re-add the root to the accessibility tree.
+ * If this is the last visible overlay that is not a toast
+ * then we want to re-add the root to the accessibility tree.
*/
- if (lastOverlay) {
+ if (lastOverlayNotToast) {
setRootAriaHidden(false);
document.body.classList.remove(BACKDROP_NO_SCROLL);
}
@@ -644,6 +672,13 @@ export const dismiss = async (
overlay.presented = false;
try {
+ /**
+ * There is no need to show the overlay to screen readers during
+ * the dismiss animation. This is because the overlay will be removed
+ * from the DOM after the animation is complete.
+ */
+ hideAnimatingOverlayFromScreenReaders(overlay.el);
+
// Overlay contents should not be clickable during dismiss
overlay.el.style.setProperty('pointer-events', 'none');
overlay.willDismiss.emit({ data, role });
@@ -930,6 +965,29 @@ export const createTriggerController = () => {
};
};
+/**
+ * The overlay that is being animated also needs to hide from screen
+ * readers during its animation. This ensures that assistive technologies
+ * 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.
+ *
+ * @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');
+};
+
/**
* Ensure that underlying overlays have aria-hidden if necessary so that screen readers
* cannot move focus to these elements. Note that we cannot rely on focus/focusin/focusout
@@ -940,7 +998,7 @@ export const createTriggerController = () => {
* @param newTopMostOverlay - The overlay that is being presented. Since the overlay has not been
* fully presented yet at the time this function is called it will not be included in the getPresentedOverlays result.
*/
-const hideOverlaysFromScreenReaders = (newTopMostOverlay: HTMLIonOverlayElement) => {
+const hideUnderlyingOverlaysFromScreenReaders = (newTopMostOverlay: HTMLIonOverlayElement) => {
if (doc === undefined) return;
const overlays = getPresentedOverlays(doc);
diff --git a/lerna.json b/lerna.json
index aaecbf98e0..6b73eec8d4 100644
--- a/lerna.json
+++ b/lerna.json
@@ -3,5 +3,5 @@
"core",
"packages/*"
],
- "version": "8.3.3"
+ "version": "8.3.4"
}
\ No newline at end of file
diff --git a/packages/angular-server/CHANGELOG.md b/packages/angular-server/CHANGELOG.md
index 87f068694a..8e18462ddf 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.3.4](https://github.com/ionic-team/ionic-framework/compare/v8.3.3...v8.3.4) (2024-10-30)
+
+**Note:** Version bump only for package @ionic/angular-server
+
+
+
+
+
## [8.3.3](https://github.com/ionic-team/ionic-framework/compare/v8.3.2...v8.3.3) (2024-10-16)
**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 cec18a9842..3a9a06112a 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.3.3",
+ "version": "8.3.4",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "@ionic/angular-server",
- "version": "8.3.3",
+ "version": "8.3.4",
"license": "MIT",
"dependencies": {
- "@ionic/core": "^8.3.3"
+ "@ionic/core": "^8.3.4"
},
"devDependencies": {
"@angular-eslint/eslint-plugin": "^16.0.0",
@@ -1031,9 +1031,9 @@
"dev": true
},
"node_modules/@ionic/core": {
- "version": "8.3.3",
- "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.3.3.tgz",
- "integrity": "sha512-f2PXV0jFIFPdjP+NbmQ1mXqRQ4KWi0U0jdQd3wDYsJFWQLmWXhW7Yp/4lCDdl0ouMeZRB2phddqFct1c7H6PyA==",
+ "version": "8.3.4",
+ "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.3.4.tgz",
+ "integrity": "sha512-MkgaQ9+oQwj3AK/i25MkLgKUUH3/nvNjd4YlmUyFjPG7l2IBHsrLlSmuFGCyniB+doI9Hynu3T9CZP7NS4RjRQ==",
"dependencies": {
"@stencil/core": "4.20.0",
"ionicons": "^7.2.2",
@@ -7188,9 +7188,9 @@
"dev": true
},
"@ionic/core": {
- "version": "8.3.3",
- "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.3.3.tgz",
- "integrity": "sha512-f2PXV0jFIFPdjP+NbmQ1mXqRQ4KWi0U0jdQd3wDYsJFWQLmWXhW7Yp/4lCDdl0ouMeZRB2phddqFct1c7H6PyA==",
+ "version": "8.3.4",
+ "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.3.4.tgz",
+ "integrity": "sha512-MkgaQ9+oQwj3AK/i25MkLgKUUH3/nvNjd4YlmUyFjPG7l2IBHsrLlSmuFGCyniB+doI9Hynu3T9CZP7NS4RjRQ==",
"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 4b84cac006..ceb075f4a7 100644
--- a/packages/angular-server/package.json
+++ b/packages/angular-server/package.json
@@ -1,6 +1,6 @@
{
"name": "@ionic/angular-server",
- "version": "8.3.3",
+ "version": "8.3.4",
"description": "Angular SSR Module for Ionic",
"keywords": [
"ionic",
@@ -62,6 +62,6 @@
},
"prettier": "@ionic/prettier-config",
"dependencies": {
- "@ionic/core": "^8.3.3"
+ "@ionic/core": "^8.3.4"
}
}
diff --git a/packages/angular/CHANGELOG.md b/packages/angular/CHANGELOG.md
index 517488505d..5899927ba3 100644
--- a/packages/angular/CHANGELOG.md
+++ b/packages/angular/CHANGELOG.md
@@ -3,6 +3,17 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [8.3.4](https://github.com/ionic-team/ionic-framework/compare/v8.3.3...v8.3.4) (2024-10-30)
+
+
+### Bug Fixes
+
+* **angular:** add missing 'compareWith' input to standalone ion-radio-group ([#29870](https://github.com/ionic-team/ionic-framework/issues/29870)) ([47ba703](https://github.com/ionic-team/ionic-framework/commit/47ba703a57d1ca506f943f6b790d0bf7583d79cb)), closes [#29826](https://github.com/ionic-team/ionic-framework/issues/29826)
+
+
+
+
+
## [8.3.3](https://github.com/ionic-team/ionic-framework/compare/v8.3.2...v8.3.3) (2024-10-16)
**Note:** Version bump only for package @ionic/angular
diff --git a/packages/angular/package-lock.json b/packages/angular/package-lock.json
index 7f71a33aa6..aaf40af261 100644
--- a/packages/angular/package-lock.json
+++ b/packages/angular/package-lock.json
@@ -1,15 +1,15 @@
{
"name": "@ionic/angular",
- "version": "8.3.3",
+ "version": "8.3.4",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "@ionic/angular",
- "version": "8.3.3",
+ "version": "8.3.4",
"license": "MIT",
"dependencies": {
- "@ionic/core": "^8.3.3",
+ "@ionic/core": "^8.3.4",
"ionicons": "^7.0.0",
"jsonc-parser": "^3.0.0",
"tslib": "^2.3.0"
@@ -1398,9 +1398,9 @@
"dev": true
},
"node_modules/@ionic/core": {
- "version": "8.3.3",
- "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.3.3.tgz",
- "integrity": "sha512-f2PXV0jFIFPdjP+NbmQ1mXqRQ4KWi0U0jdQd3wDYsJFWQLmWXhW7Yp/4lCDdl0ouMeZRB2phddqFct1c7H6PyA==",
+ "version": "8.3.4",
+ "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.3.4.tgz",
+ "integrity": "sha512-MkgaQ9+oQwj3AK/i25MkLgKUUH3/nvNjd4YlmUyFjPG7l2IBHsrLlSmuFGCyniB+doI9Hynu3T9CZP7NS4RjRQ==",
"dependencies": {
"@stencil/core": "4.20.0",
"ionicons": "^7.2.2",
@@ -9820,9 +9820,9 @@
"dev": true
},
"@ionic/core": {
- "version": "8.3.3",
- "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.3.3.tgz",
- "integrity": "sha512-f2PXV0jFIFPdjP+NbmQ1mXqRQ4KWi0U0jdQd3wDYsJFWQLmWXhW7Yp/4lCDdl0ouMeZRB2phddqFct1c7H6PyA==",
+ "version": "8.3.4",
+ "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.3.4.tgz",
+ "integrity": "sha512-MkgaQ9+oQwj3AK/i25MkLgKUUH3/nvNjd4YlmUyFjPG7l2IBHsrLlSmuFGCyniB+doI9Hynu3T9CZP7NS4RjRQ==",
"requires": {
"@stencil/core": "4.20.0",
"ionicons": "^7.2.2",
diff --git a/packages/angular/package.json b/packages/angular/package.json
index f2c927b098..cf3edb1374 100644
--- a/packages/angular/package.json
+++ b/packages/angular/package.json
@@ -1,6 +1,6 @@
{
"name": "@ionic/angular",
- "version": "8.3.3",
+ "version": "8.3.4",
"description": "Angular specific wrappers for @ionic/core",
"keywords": [
"ionic",
@@ -47,7 +47,7 @@
}
},
"dependencies": {
- "@ionic/core": "^8.3.3",
+ "@ionic/core": "^8.3.4",
"ionicons": "^7.0.0",
"jsonc-parser": "^3.0.0",
"tslib": "^2.3.0"
diff --git a/packages/angular/standalone/src/directives/radio-group.ts b/packages/angular/standalone/src/directives/radio-group.ts
index ecde568d44..925f48182b 100644
--- a/packages/angular/standalone/src/directives/radio-group.ts
+++ b/packages/angular/standalone/src/directives/radio-group.ts
@@ -16,7 +16,7 @@ import { defineCustomElement } from '@ionic/core/components/ion-radio-group.js';
import { ProxyCmp, proxyOutputs } from './angular-component-lib/utils';
-const RADIO_GROUP_INPUTS = ['allowEmptySelection', 'name', 'value'];
+const RADIO_GROUP_INPUTS = ['allowEmptySelection', 'compareWith', 'name', 'value'];
/**
* Pulling the provider into an object and using PURE works
diff --git a/packages/docs/CHANGELOG.md b/packages/docs/CHANGELOG.md
index bf807426dd..01d59dbdfa 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.3.4](https://github.com/ionic-team/ionic-framework/compare/v8.3.3...v8.3.4) (2024-10-30)
+
+**Note:** Version bump only for package @ionic/docs
+
+
+
+
+
## [8.3.3](https://github.com/ionic-team/ionic-framework/compare/v8.3.2...v8.3.3) (2024-10-16)
**Note:** Version bump only for package @ionic/docs
diff --git a/packages/docs/package-lock.json b/packages/docs/package-lock.json
index a1d2d61aae..b2ec110251 100644
--- a/packages/docs/package-lock.json
+++ b/packages/docs/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "@ionic/docs",
- "version": "8.3.3",
+ "version": "8.3.4",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "@ionic/docs",
- "version": "8.3.3",
+ "version": "8.3.4",
"license": "MIT"
}
}
diff --git a/packages/docs/package.json b/packages/docs/package.json
index 9faa6071e6..9402ac8627 100644
--- a/packages/docs/package.json
+++ b/packages/docs/package.json
@@ -1,6 +1,6 @@
{
"name": "@ionic/docs",
- "version": "8.3.3",
+ "version": "8.3.4",
"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 8969ab83e6..182220662a 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.3.4](https://github.com/ionic-team/ionic-framework/compare/v8.3.3...v8.3.4) (2024-10-30)
+
+**Note:** Version bump only for package @ionic/react-router
+
+
+
+
+
## [8.3.3](https://github.com/ionic-team/ionic-framework/compare/v8.3.2...v8.3.3) (2024-10-16)
**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 53ec60cc26..597890f036 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.3.3",
+ "version": "8.3.4",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "@ionic/react-router",
- "version": "8.3.3",
+ "version": "8.3.4",
"license": "MIT",
"dependencies": {
- "@ionic/react": "^8.3.3",
+ "@ionic/react": "^8.3.4",
"tslib": "*"
},
"devDependencies": {
@@ -238,9 +238,9 @@
"dev": true
},
"node_modules/@ionic/core": {
- "version": "8.3.3",
- "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.3.3.tgz",
- "integrity": "sha512-f2PXV0jFIFPdjP+NbmQ1mXqRQ4KWi0U0jdQd3wDYsJFWQLmWXhW7Yp/4lCDdl0ouMeZRB2phddqFct1c7H6PyA==",
+ "version": "8.3.4",
+ "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.3.4.tgz",
+ "integrity": "sha512-MkgaQ9+oQwj3AK/i25MkLgKUUH3/nvNjd4YlmUyFjPG7l2IBHsrLlSmuFGCyniB+doI9Hynu3T9CZP7NS4RjRQ==",
"dependencies": {
"@stencil/core": "4.20.0",
"ionicons": "^7.2.2",
@@ -414,11 +414,11 @@
}
},
"node_modules/@ionic/react": {
- "version": "8.3.3",
- "resolved": "https://registry.npmjs.org/@ionic/react/-/react-8.3.3.tgz",
- "integrity": "sha512-BQVke+4QF1viPmwYFV/Bfseh4AhLnA0svP8UvKTP45plJ2KDXF/IbFVNn+FWtjByrqYU4PldUgF01+O4yPGiRw==",
+ "version": "8.3.4",
+ "resolved": "https://registry.npmjs.org/@ionic/react/-/react-8.3.4.tgz",
+ "integrity": "sha512-CIoTHg/1nJJN11IjmsUqeQB1nIP4SxQyo2nBH+MhzeVCMv8Tj00Y4rU/9RYzKfRI7Zfsi9MOwVrwpGhPWi4KWA==",
"dependencies": {
- "@ionic/core": "8.3.3",
+ "@ionic/core": "8.3.4",
"ionicons": "^7.0.0",
"tslib": "*"
},
@@ -4057,9 +4057,9 @@
"dev": true
},
"@ionic/core": {
- "version": "8.3.3",
- "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.3.3.tgz",
- "integrity": "sha512-f2PXV0jFIFPdjP+NbmQ1mXqRQ4KWi0U0jdQd3wDYsJFWQLmWXhW7Yp/4lCDdl0ouMeZRB2phddqFct1c7H6PyA==",
+ "version": "8.3.4",
+ "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.3.4.tgz",
+ "integrity": "sha512-MkgaQ9+oQwj3AK/i25MkLgKUUH3/nvNjd4YlmUyFjPG7l2IBHsrLlSmuFGCyniB+doI9Hynu3T9CZP7NS4RjRQ==",
"requires": {
"@stencil/core": "4.20.0",
"ionicons": "^7.2.2",
@@ -4163,11 +4163,11 @@
"requires": {}
},
"@ionic/react": {
- "version": "8.3.3",
- "resolved": "https://registry.npmjs.org/@ionic/react/-/react-8.3.3.tgz",
- "integrity": "sha512-BQVke+4QF1viPmwYFV/Bfseh4AhLnA0svP8UvKTP45plJ2KDXF/IbFVNn+FWtjByrqYU4PldUgF01+O4yPGiRw==",
+ "version": "8.3.4",
+ "resolved": "https://registry.npmjs.org/@ionic/react/-/react-8.3.4.tgz",
+ "integrity": "sha512-CIoTHg/1nJJN11IjmsUqeQB1nIP4SxQyo2nBH+MhzeVCMv8Tj00Y4rU/9RYzKfRI7Zfsi9MOwVrwpGhPWi4KWA==",
"requires": {
- "@ionic/core": "8.3.3",
+ "@ionic/core": "8.3.4",
"ionicons": "^7.0.0",
"tslib": "*"
}
diff --git a/packages/react-router/package.json b/packages/react-router/package.json
index 4e14633138..79225e3bfb 100644
--- a/packages/react-router/package.json
+++ b/packages/react-router/package.json
@@ -1,6 +1,6 @@
{
"name": "@ionic/react-router",
- "version": "8.3.3",
+ "version": "8.3.4",
"description": "React Router wrapper for @ionic/react",
"keywords": [
"ionic",
@@ -36,7 +36,7 @@
"dist/"
],
"dependencies": {
- "@ionic/react": "^8.3.3",
+ "@ionic/react": "^8.3.4",
"tslib": "*"
},
"peerDependencies": {
diff --git a/packages/react/CHANGELOG.md b/packages/react/CHANGELOG.md
index dc28f6a1d9..f9f691caab 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.3.4](https://github.com/ionic-team/ionic-framework/compare/v8.3.3...v8.3.4) (2024-10-30)
+
+**Note:** Version bump only for package @ionic/react
+
+
+
+
+
## [8.3.3](https://github.com/ionic-team/ionic-framework/compare/v8.3.2...v8.3.3) (2024-10-16)
diff --git a/packages/react/package-lock.json b/packages/react/package-lock.json
index 6e176a5e27..232c3805ca 100644
--- a/packages/react/package-lock.json
+++ b/packages/react/package-lock.json
@@ -1,15 +1,15 @@
{
"name": "@ionic/react",
- "version": "8.3.3",
+ "version": "8.3.4",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "@ionic/react",
- "version": "8.3.3",
+ "version": "8.3.4",
"license": "MIT",
"dependencies": {
- "@ionic/core": "^8.3.3",
+ "@ionic/core": "^8.3.4",
"ionicons": "^7.0.0",
"tslib": "*"
},
@@ -736,9 +736,9 @@
"dev": true
},
"node_modules/@ionic/core": {
- "version": "8.3.3",
- "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.3.3.tgz",
- "integrity": "sha512-f2PXV0jFIFPdjP+NbmQ1mXqRQ4KWi0U0jdQd3wDYsJFWQLmWXhW7Yp/4lCDdl0ouMeZRB2phddqFct1c7H6PyA==",
+ "version": "8.3.4",
+ "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.3.4.tgz",
+ "integrity": "sha512-MkgaQ9+oQwj3AK/i25MkLgKUUH3/nvNjd4YlmUyFjPG7l2IBHsrLlSmuFGCyniB+doI9Hynu3T9CZP7NS4RjRQ==",
"dependencies": {
"@stencil/core": "4.20.0",
"ionicons": "^7.2.2",
@@ -12315,9 +12315,9 @@
"dev": true
},
"@ionic/core": {
- "version": "8.3.3",
- "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.3.3.tgz",
- "integrity": "sha512-f2PXV0jFIFPdjP+NbmQ1mXqRQ4KWi0U0jdQd3wDYsJFWQLmWXhW7Yp/4lCDdl0ouMeZRB2phddqFct1c7H6PyA==",
+ "version": "8.3.4",
+ "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.3.4.tgz",
+ "integrity": "sha512-MkgaQ9+oQwj3AK/i25MkLgKUUH3/nvNjd4YlmUyFjPG7l2IBHsrLlSmuFGCyniB+doI9Hynu3T9CZP7NS4RjRQ==",
"requires": {
"@stencil/core": "4.20.0",
"ionicons": "^7.2.2",
diff --git a/packages/react/package.json b/packages/react/package.json
index 72ce6e4adc..59b96e911f 100644
--- a/packages/react/package.json
+++ b/packages/react/package.json
@@ -1,6 +1,6 @@
{
"name": "@ionic/react",
- "version": "8.3.3",
+ "version": "8.3.4",
"description": "React specific wrapper for @ionic/core",
"keywords": [
"ionic",
@@ -39,7 +39,7 @@
"css/"
],
"dependencies": {
- "@ionic/core": "^8.3.3",
+ "@ionic/core": "^8.3.4",
"ionicons": "^7.0.0",
"tslib": "*"
},
diff --git a/packages/vue-router/CHANGELOG.md b/packages/vue-router/CHANGELOG.md
index fc02c3c19a..b8e456b3ce 100644
--- a/packages/vue-router/CHANGELOG.md
+++ b/packages/vue-router/CHANGELOG.md
@@ -3,6 +3,17 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [8.3.4](https://github.com/ionic-team/ionic-framework/compare/v8.3.3...v8.3.4) (2024-10-30)
+
+
+### Bug Fixes
+
+* **vue:** incorrect view rendered when using router.go(-n) ([#29877](https://github.com/ionic-team/ionic-framework/issues/29877)) ([e32fbe0](https://github.com/ionic-team/ionic-framework/commit/e32fbe02102fe80db29f73c26496a40852032354)), closes [#28201](https://github.com/ionic-team/ionic-framework/issues/28201) [#28201](https://github.com/ionic-team/ionic-framework/issues/28201) [#29847](https://github.com/ionic-team/ionic-framework/issues/29847)
+
+
+
+
+
## [8.3.3](https://github.com/ionic-team/ionic-framework/compare/v8.3.2...v8.3.3) (2024-10-16)
**Note:** Version bump only for package @ionic/vue-router
diff --git a/packages/vue-router/__tests__/locationHistory.spec.ts b/packages/vue-router/__tests__/locationHistory.spec.ts
index fe7f94e723..196dcc75d8 100644
--- a/packages/vue-router/__tests__/locationHistory.spec.ts
+++ b/packages/vue-router/__tests__/locationHistory.spec.ts
@@ -84,4 +84,25 @@ describe('Location History', () => {
expect(locationHistory.canGoBack(1, 0, 1)).toEqual(true);
expect(locationHistory.canGoBack(2, 0, 1)).toEqual(false);
});
+
+ it('should correctly find the last location', () => {
+ const [home, pageA, pageB, pageC] = [
+ { pathname: '/home' },
+ { pathname: '/page-a', pushedByRoute: '/home' },
+ { pathname: '/page-b', pushedByRoute: '/page-a' },
+ { pathname: '/page-c', pushedByRoute: '/page-b' },
+ ];
+
+ locationHistory.add(home);
+ locationHistory.add(pageA);
+ locationHistory.add(pageB);
+ locationHistory.add(pageC);
+
+ expect(locationHistory.findLastLocation(pageB)).toEqual(pageA);
+ expect(locationHistory.findLastLocation(pageB, -2)).toEqual(home);
+
+ expect(locationHistory.findLastLocation(pageC)).toEqual(pageB);
+ expect(locationHistory.findLastLocation(pageC, -2)).toEqual(pageA);
+ expect(locationHistory.findLastLocation(pageC, -3)).toEqual(home);
+ });
});
diff --git a/packages/vue-router/package-lock.json b/packages/vue-router/package-lock.json
index 2a45b55ebf..6e3138dc0d 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.3.3",
+ "version": "8.3.4",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "@ionic/vue-router",
- "version": "8.3.3",
+ "version": "8.3.4",
"license": "MIT",
"dependencies": {
- "@ionic/vue": "^8.3.3"
+ "@ionic/vue": "^8.3.4"
},
"devDependencies": {
"@ionic/eslint-config": "^0.3.0",
@@ -661,9 +661,9 @@
"dev": true
},
"node_modules/@ionic/core": {
- "version": "8.3.3",
- "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.3.3.tgz",
- "integrity": "sha512-f2PXV0jFIFPdjP+NbmQ1mXqRQ4KWi0U0jdQd3wDYsJFWQLmWXhW7Yp/4lCDdl0ouMeZRB2phddqFct1c7H6PyA==",
+ "version": "8.3.4",
+ "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.3.4.tgz",
+ "integrity": "sha512-MkgaQ9+oQwj3AK/i25MkLgKUUH3/nvNjd4YlmUyFjPG7l2IBHsrLlSmuFGCyniB+doI9Hynu3T9CZP7NS4RjRQ==",
"dependencies": {
"@stencil/core": "4.20.0",
"ionicons": "^7.2.2",
@@ -852,11 +852,11 @@
}
},
"node_modules/@ionic/vue": {
- "version": "8.3.3",
- "resolved": "https://registry.npmjs.org/@ionic/vue/-/vue-8.3.3.tgz",
- "integrity": "sha512-6EAPWdmQDvazP4ZsCRjWlG91Kx+1vYxX1gHx02Xvcc7Dn8hRrMW58IAAQ0BqSYsrHNFTKVtwD3cJbmnut8Ghyg==",
+ "version": "8.3.4",
+ "resolved": "https://registry.npmjs.org/@ionic/vue/-/vue-8.3.4.tgz",
+ "integrity": "sha512-s7P5mTd078CbPK2dpIxxWGNirQacG3sXhJulJ1L0J6+6VI+HHHLKy4ueTRgPl5GLDmjGgdMCBuYu1n4K2nNXFg==",
"dependencies": {
- "@ionic/core": "8.3.3",
+ "@ionic/core": "8.3.4",
"ionicons": "^7.0.0"
}
},
@@ -7878,9 +7878,9 @@
"dev": true
},
"@ionic/core": {
- "version": "8.3.3",
- "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.3.3.tgz",
- "integrity": "sha512-f2PXV0jFIFPdjP+NbmQ1mXqRQ4KWi0U0jdQd3wDYsJFWQLmWXhW7Yp/4lCDdl0ouMeZRB2phddqFct1c7H6PyA==",
+ "version": "8.3.4",
+ "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.3.4.tgz",
+ "integrity": "sha512-MkgaQ9+oQwj3AK/i25MkLgKUUH3/nvNjd4YlmUyFjPG7l2IBHsrLlSmuFGCyniB+doI9Hynu3T9CZP7NS4RjRQ==",
"requires": {
"@stencil/core": "4.20.0",
"ionicons": "^7.2.2",
@@ -7993,11 +7993,11 @@
"requires": {}
},
"@ionic/vue": {
- "version": "8.3.3",
- "resolved": "https://registry.npmjs.org/@ionic/vue/-/vue-8.3.3.tgz",
- "integrity": "sha512-6EAPWdmQDvazP4ZsCRjWlG91Kx+1vYxX1gHx02Xvcc7Dn8hRrMW58IAAQ0BqSYsrHNFTKVtwD3cJbmnut8Ghyg==",
+ "version": "8.3.4",
+ "resolved": "https://registry.npmjs.org/@ionic/vue/-/vue-8.3.4.tgz",
+ "integrity": "sha512-s7P5mTd078CbPK2dpIxxWGNirQacG3sXhJulJ1L0J6+6VI+HHHLKy4ueTRgPl5GLDmjGgdMCBuYu1n4K2nNXFg==",
"requires": {
- "@ionic/core": "8.3.3",
+ "@ionic/core": "8.3.4",
"ionicons": "^7.0.0"
}
},
diff --git a/packages/vue-router/package.json b/packages/vue-router/package.json
index a8fe48ac36..f6a6991066 100644
--- a/packages/vue-router/package.json
+++ b/packages/vue-router/package.json
@@ -1,6 +1,6 @@
{
"name": "@ionic/vue-router",
- "version": "8.3.3",
+ "version": "8.3.4",
"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.3.3"
+ "@ionic/vue": "^8.3.4"
},
"devDependencies": {
"@ionic/eslint-config": "^0.3.0",
diff --git a/packages/vue-router/src/locationHistory.ts b/packages/vue-router/src/locationHistory.ts
index f48499254e..9e12afd799 100644
--- a/packages/vue-router/src/locationHistory.ts
+++ b/packages/vue-router/src/locationHistory.ts
@@ -239,15 +239,11 @@ export const createLocationHistory = () => {
}
}
}
- if (delta < -1) {
- return locationHistory[locationHistory.length - 1 + delta];
- } else {
- for (let i = locationHistory.length - 2; i >= 0; i--) {
- const ri = locationHistory[i];
- if (ri) {
- if (ri.pathname === routeInfo.pushedByRoute) {
- return ri;
- }
+ for (let i = locationHistory.length - 2; i >= 0; i--) {
+ const ri = locationHistory[i];
+ if (ri) {
+ if (ri.pathname === routeInfo.pushedByRoute) {
+ return locationHistory[i + 1 + delta]
}
}
}
diff --git a/packages/vue/CHANGELOG.md b/packages/vue/CHANGELOG.md
index ae7db1feb0..59e84626d9 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.3.4](https://github.com/ionic-team/ionic-framework/compare/v8.3.3...v8.3.4) (2024-10-30)
+
+**Note:** Version bump only for package @ionic/vue
+
+
+
+
+
## [8.3.3](https://github.com/ionic-team/ionic-framework/compare/v8.3.2...v8.3.3) (2024-10-16)
diff --git a/packages/vue/package-lock.json b/packages/vue/package-lock.json
index 9a5b0bfcef..2adae2a2ac 100644
--- a/packages/vue/package-lock.json
+++ b/packages/vue/package-lock.json
@@ -1,15 +1,15 @@
{
"name": "@ionic/vue",
- "version": "8.3.3",
+ "version": "8.3.4",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "@ionic/vue",
- "version": "8.3.3",
+ "version": "8.3.4",
"license": "MIT",
"dependencies": {
- "@ionic/core": "^8.3.3",
+ "@ionic/core": "^8.3.4",
"ionicons": "^7.0.0"
},
"devDependencies": {
@@ -208,9 +208,9 @@
"dev": true
},
"node_modules/@ionic/core": {
- "version": "8.3.3",
- "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.3.3.tgz",
- "integrity": "sha512-f2PXV0jFIFPdjP+NbmQ1mXqRQ4KWi0U0jdQd3wDYsJFWQLmWXhW7Yp/4lCDdl0ouMeZRB2phddqFct1c7H6PyA==",
+ "version": "8.3.4",
+ "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.3.4.tgz",
+ "integrity": "sha512-MkgaQ9+oQwj3AK/i25MkLgKUUH3/nvNjd4YlmUyFjPG7l2IBHsrLlSmuFGCyniB+doI9Hynu3T9CZP7NS4RjRQ==",
"dependencies": {
"@stencil/core": "4.20.0",
"ionicons": "^7.2.2",
@@ -3970,9 +3970,9 @@
"dev": true
},
"@ionic/core": {
- "version": "8.3.3",
- "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.3.3.tgz",
- "integrity": "sha512-f2PXV0jFIFPdjP+NbmQ1mXqRQ4KWi0U0jdQd3wDYsJFWQLmWXhW7Yp/4lCDdl0ouMeZRB2phddqFct1c7H6PyA==",
+ "version": "8.3.4",
+ "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.3.4.tgz",
+ "integrity": "sha512-MkgaQ9+oQwj3AK/i25MkLgKUUH3/nvNjd4YlmUyFjPG7l2IBHsrLlSmuFGCyniB+doI9Hynu3T9CZP7NS4RjRQ==",
"requires": {
"@stencil/core": "4.20.0",
"ionicons": "^7.2.2",
diff --git a/packages/vue/package.json b/packages/vue/package.json
index d5a6d14983..86f48a1a0a 100644
--- a/packages/vue/package.json
+++ b/packages/vue/package.json
@@ -1,6 +1,6 @@
{
"name": "@ionic/vue",
- "version": "8.3.3",
+ "version": "8.3.4",
"description": "Vue specific wrapper for @ionic/core",
"scripts": {
"eslint": "eslint src",
@@ -66,7 +66,7 @@
"vue-router": "^4.0.16"
},
"dependencies": {
- "@ionic/core": "^8.3.3",
+ "@ionic/core": "^8.3.4",
"ionicons": "^7.0.0"
},
"vetur": {