diff --git a/CHANGELOG.md b/CHANGELOG.md
index f211e17232e..aa0352217ba 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,19 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [8.5.2](https://github.com/ionic-team/ionic-framework/compare/v8.5.1...v8.5.2) (2025-03-26)
+
+
+### Bug Fixes
+
+* **datetime:** support typing time values in a 24-hour format ([#30147](https://github.com/ionic-team/ionic-framework/issues/30147)) ([ac6e6a0](https://github.com/ionic-team/ionic-framework/commit/ac6e6a03174263d09ec55c9742a026862a3df444)), closes [#28877](https://github.com/ionic-team/ionic-framework/issues/28877)
+* **range:** emit ionInput when value changes ([#30293](https://github.com/ionic-team/ionic-framework/issues/30293)) ([7789bb5](https://github.com/ionic-team/ionic-framework/commit/7789bb59ee5c76074ff4872dc6a50ae2d83df8f5)), closes [#29619](https://github.com/ionic-team/ionic-framework/issues/29619)
+* **segment-button:** ensure consistent disabled state for segment-content error handling ([#30288](https://github.com/ionic-team/ionic-framework/issues/30288)) ([1cfa915](https://github.com/ionic-team/ionic-framework/commit/1cfa915e8fe362951c521bce970a9f5f10918ab2))
+
+
+
+
+
## [8.5.1](https://github.com/ionic-team/ionic-framework/compare/v8.5.0...v8.5.1) (2025-03-19)
diff --git a/core/CHANGELOG.md b/core/CHANGELOG.md
index dea94360e5c..4ae50b507f8 100644
--- a/core/CHANGELOG.md
+++ b/core/CHANGELOG.md
@@ -3,6 +3,19 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [8.5.2](https://github.com/ionic-team/ionic-framework/compare/v8.5.1...v8.5.2) (2025-03-26)
+
+
+### Bug Fixes
+
+* **datetime:** support typing time values in a 24-hour format ([#30147](https://github.com/ionic-team/ionic-framework/issues/30147)) ([ac6e6a0](https://github.com/ionic-team/ionic-framework/commit/ac6e6a03174263d09ec55c9742a026862a3df444)), closes [#28877](https://github.com/ionic-team/ionic-framework/issues/28877)
+* **range:** emit ionInput when value changes ([#30293](https://github.com/ionic-team/ionic-framework/issues/30293)) ([7789bb5](https://github.com/ionic-team/ionic-framework/commit/7789bb59ee5c76074ff4872dc6a50ae2d83df8f5)), closes [#29619](https://github.com/ionic-team/ionic-framework/issues/29619)
+* **segment-button:** ensure consistent disabled state for segment-content error handling ([#30288](https://github.com/ionic-team/ionic-framework/issues/30288)) ([1cfa915](https://github.com/ionic-team/ionic-framework/commit/1cfa915e8fe362951c521bce970a9f5f10918ab2))
+
+
+
+
+
## [8.5.1](https://github.com/ionic-team/ionic-framework/compare/v8.5.0...v8.5.1) (2025-03-19)
diff --git a/core/package-lock.json b/core/package-lock.json
index f47e5f708de..163e667d0be 100644
--- a/core/package-lock.json
+++ b/core/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "@ionic/core",
- "version": "8.5.1",
+ "version": "8.5.2",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "@ionic/core",
- "version": "8.5.1",
+ "version": "8.5.2",
"license": "MIT",
"dependencies": {
"@stencil/core": "4.20.0",
@@ -22,7 +22,7 @@
"@clack/prompts": "^0.10.0",
"@ionic/eslint-config": "^0.3.0",
"@ionic/prettier-config": "^2.0.0",
- "@playwright/test": "^1.51.0",
+ "@playwright/test": "^1.51.1",
"@rollup/plugin-node-resolve": "^8.4.0",
"@rollup/plugin-virtual": "^2.0.3",
"@stencil/angular-output-target": "^0.10.0",
@@ -1718,12 +1718,12 @@
}
},
"node_modules/@playwright/test": {
- "version": "1.51.0",
- "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.51.0.tgz",
- "integrity": "sha512-dJ0dMbZeHhI+wb77+ljx/FeC8VBP6j/rj9OAojO08JI80wTZy6vRk9KvHKiDCUh4iMpEiseMgqRBIeW+eKX6RA==",
+ "version": "1.51.1",
+ "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.51.1.tgz",
+ "integrity": "sha512-nM+kEaTSAoVlXmMPH10017vn3FSiFqr/bh4fKg9vmAdMfd9SDqRZNvPSiAHADc/itWak+qPvMPZQOPwCBW7k7Q==",
"dev": true,
"dependencies": {
- "playwright": "1.51.0"
+ "playwright": "1.51.1"
},
"bin": {
"playwright": "cli.js"
@@ -8495,12 +8495,12 @@
}
},
"node_modules/playwright": {
- "version": "1.51.0",
- "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.51.0.tgz",
- "integrity": "sha512-442pTfGM0xxfCYxuBa/Pu6B2OqxqqaYq39JS8QDMGThUvIOCd6s0ANDog3uwA0cHavVlnTQzGCN7Id2YekDSXA==",
+ "version": "1.51.1",
+ "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.51.1.tgz",
+ "integrity": "sha512-kkx+MB2KQRkyxjYPc3a0wLZZoDczmppyGJIvQ43l+aZihkaVvmu/21kiyaHeHjiFxjxNNFnUncKmcGIyOojsaw==",
"dev": true,
"dependencies": {
- "playwright-core": "1.51.0"
+ "playwright-core": "1.51.1"
},
"bin": {
"playwright": "cli.js"
@@ -8513,9 +8513,9 @@
}
},
"node_modules/playwright-core": {
- "version": "1.51.0",
- "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.51.0.tgz",
- "integrity": "sha512-x47yPE3Zwhlil7wlNU/iktF7t2r/URR3VLbH6EknJd/04Qc/PSJ0EY3CMXipmglLG+zyRxW6HNo2EGbKLHPWMg==",
+ "version": "1.51.1",
+ "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.51.1.tgz",
+ "integrity": "sha512-/crRMj8+j/Nq5s8QcvegseuyeZPxpQCZb6HNk3Sos3BlZyAknRjoyJPFWkpNn8v0+P3WiwqFF8P+zQo4eqiNuw==",
"dev": true,
"bin": {
"playwright-core": "cli.js"
@@ -11765,12 +11765,12 @@
}
},
"@playwright/test": {
- "version": "1.51.0",
- "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.51.0.tgz",
- "integrity": "sha512-dJ0dMbZeHhI+wb77+ljx/FeC8VBP6j/rj9OAojO08JI80wTZy6vRk9KvHKiDCUh4iMpEiseMgqRBIeW+eKX6RA==",
+ "version": "1.51.1",
+ "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.51.1.tgz",
+ "integrity": "sha512-nM+kEaTSAoVlXmMPH10017vn3FSiFqr/bh4fKg9vmAdMfd9SDqRZNvPSiAHADc/itWak+qPvMPZQOPwCBW7k7Q==",
"dev": true,
"requires": {
- "playwright": "1.51.0"
+ "playwright": "1.51.1"
}
},
"@rollup/plugin-node-resolve": {
@@ -16663,19 +16663,19 @@
}
},
"playwright": {
- "version": "1.51.0",
- "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.51.0.tgz",
- "integrity": "sha512-442pTfGM0xxfCYxuBa/Pu6B2OqxqqaYq39JS8QDMGThUvIOCd6s0ANDog3uwA0cHavVlnTQzGCN7Id2YekDSXA==",
+ "version": "1.51.1",
+ "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.51.1.tgz",
+ "integrity": "sha512-kkx+MB2KQRkyxjYPc3a0wLZZoDczmppyGJIvQ43l+aZihkaVvmu/21kiyaHeHjiFxjxNNFnUncKmcGIyOojsaw==",
"dev": true,
"requires": {
"fsevents": "2.3.2",
- "playwright-core": "1.51.0"
+ "playwright-core": "1.51.1"
}
},
"playwright-core": {
- "version": "1.51.0",
- "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.51.0.tgz",
- "integrity": "sha512-x47yPE3Zwhlil7wlNU/iktF7t2r/URR3VLbH6EknJd/04Qc/PSJ0EY3CMXipmglLG+zyRxW6HNo2EGbKLHPWMg==",
+ "version": "1.51.1",
+ "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.51.1.tgz",
+ "integrity": "sha512-/crRMj8+j/Nq5s8QcvegseuyeZPxpQCZb6HNk3Sos3BlZyAknRjoyJPFWkpNn8v0+P3WiwqFF8P+zQo4eqiNuw==",
"dev": true
},
"postcss": {
diff --git a/core/package.json b/core/package.json
index 2dcc81f72d9..e017e3b68ac 100644
--- a/core/package.json
+++ b/core/package.json
@@ -1,6 +1,6 @@
{
"name": "@ionic/core",
- "version": "8.5.1",
+ "version": "8.5.2",
"description": "Base components for Ionic",
"keywords": [
"ionic",
@@ -44,7 +44,7 @@
"@clack/prompts": "^0.10.0",
"@ionic/eslint-config": "^0.3.0",
"@ionic/prettier-config": "^2.0.0",
- "@playwright/test": "^1.51.0",
+ "@playwright/test": "^1.51.1",
"@rollup/plugin-node-resolve": "^8.4.0",
"@rollup/plugin-virtual": "^2.0.3",
"@stencil/angular-output-target": "^0.10.0",
diff --git a/core/src/components/datetime/datetime.tsx b/core/src/components/datetime/datetime.tsx
index 9154c24e60b..fcdb8bcabe0 100644
--- a/core/src/components/datetime/datetime.tsx
+++ b/core/src/components/datetime/datetime.tsx
@@ -1984,7 +1984,7 @@ export class Datetime implements ComponentInterface {
});
this.setActiveParts({
- ...activePart,
+ ...this.getActivePartsWithFallback(),
hour: ev.detail.value,
});
@@ -2024,7 +2024,7 @@ export class Datetime implements ComponentInterface {
});
this.setActiveParts({
- ...activePart,
+ ...this.getActivePartsWithFallback(),
minute: ev.detail.value,
});
@@ -2070,7 +2070,7 @@ export class Datetime implements ComponentInterface {
});
this.setActiveParts({
- ...activePart,
+ ...this.getActivePartsWithFallback(),
ampm: ev.detail.value,
hour,
});
diff --git a/core/src/components/picker/picker.tsx b/core/src/components/picker/picker.tsx
index 1d98e049d4b..71db6a3cac7 100644
--- a/core/src/components/picker/picker.tsx
+++ b/core/src/components/picker/picker.tsx
@@ -410,8 +410,13 @@ export class Picker implements ComponentInterface {
colEl: HTMLIonPickerColumnElement,
value: string,
zeroBehavior: 'start' | 'end' = 'start'
- ) => {
+ ): boolean => {
+ if (!value) {
+ return false;
+ }
+
const behavior = zeroBehavior === 'start' ? /^0+/ : /0$/;
+ value = value.replace(behavior, '');
const option = Array.from(colEl.querySelectorAll('ion-picker-column-option')).find((el) => {
return el.disabled !== true && el.textContent!.replace(behavior, '') === value;
});
@@ -419,6 +424,58 @@ export class Picker implements ComponentInterface {
if (option) {
colEl.setValue(option.value);
}
+
+ return !!option;
+ };
+
+ /**
+ * Attempts to intelligently search the first and second
+ * column as if they're number columns for the provided numbers
+ * where the first two numbers are the first column
+ * and the last 2 are the last column. Tries to allow for the first
+ * number to be ignored for situations where typos occurred.
+ */
+ private multiColumnSearch = (
+ firstColumn: HTMLIonPickerColumnElement,
+ secondColumn: HTMLIonPickerColumnElement,
+ input: string
+ ) => {
+ if (input.length === 0) {
+ return;
+ }
+
+ const inputArray = input.split('');
+ const hourValue = inputArray.slice(0, 2).join('');
+ // Try to find a match for the first two digits in the first column
+ const foundHour = this.searchColumn(firstColumn, hourValue);
+
+ // If we have more than 2 digits and found a match for hours,
+ // use the remaining digits for the second column (minutes)
+ if (inputArray.length > 2 && foundHour) {
+ const minuteValue = inputArray.slice(2, 4).join('');
+ this.searchColumn(secondColumn, minuteValue);
+ }
+ // If we couldn't find a match for the two-digit hour, try single digit approaches
+ else if (!foundHour && inputArray.length >= 1) {
+ // First try the first digit as a single-digit hour
+ let singleDigitHour = inputArray[0];
+ let singleDigitFound = this.searchColumn(firstColumn, singleDigitHour);
+
+ // If that didn't work, try the second digit as a single-digit hour
+ // (handles case where user made a typo in the first digit, or they typed over themselves)
+ if (!singleDigitFound) {
+ inputArray.shift();
+ singleDigitHour = inputArray[0];
+ singleDigitFound = this.searchColumn(firstColumn, singleDigitHour);
+ }
+
+ // If we found a single-digit hour and have remaining digits,
+ // use up to 2 of the remaining digits for the second column
+ if (singleDigitFound && inputArray.length > 1) {
+ const remainingDigits = inputArray.slice(1, 3).join('');
+ this.searchColumn(secondColumn, remainingDigits);
+ }
+ }
};
private selectMultiColumn = () => {
@@ -433,91 +490,15 @@ export class Picker implements ComponentInterface {
const lastColumn = numericPickers[1];
let value = inputEl.value;
- let minuteValue;
- switch (value.length) {
- case 1:
- this.searchColumn(firstColumn, value);
- break;
- case 2:
- /**
- * If the first character is `0` or `1` it is
- * possible that users are trying to type `09`
- * or `11` into the hour field, so we should look
- * at that first.
- */
- const firstCharacter = inputEl.value.substring(0, 1);
- value = firstCharacter === '0' || firstCharacter === '1' ? inputEl.value : firstCharacter;
-
- this.searchColumn(firstColumn, value);
-
- /**
- * If only checked the first value,
- * we can check the second value
- * for a match in the minutes column
- */
- if (value.length === 1) {
- minuteValue = inputEl.value.substring(inputEl.value.length - 1);
- this.searchColumn(lastColumn, minuteValue, 'end');
- }
- break;
- case 3:
- /**
- * If the first character is `0` or `1` it is
- * possible that users are trying to type `09`
- * or `11` into the hour field, so we should look
- * at that first.
- */
- const firstCharacterAgain = inputEl.value.substring(0, 1);
- value =
- firstCharacterAgain === '0' || firstCharacterAgain === '1'
- ? inputEl.value.substring(0, 2)
- : firstCharacterAgain;
-
- this.searchColumn(firstColumn, value);
-
- /**
- * If only checked the first value,
- * we can check the second value
- * for a match in the minutes column
- */
- minuteValue = value.length === 1 ? inputEl.value.substring(1) : inputEl.value.substring(2);
-
- this.searchColumn(lastColumn, minuteValue, 'end');
- break;
- case 4:
- /**
- * If the first character is `0` or `1` it is
- * possible that users are trying to type `09`
- * or `11` into the hour field, so we should look
- * at that first.
- */
- const firstCharacterAgainAgain = inputEl.value.substring(0, 1);
- value =
- firstCharacterAgainAgain === '0' || firstCharacterAgainAgain === '1'
- ? inputEl.value.substring(0, 2)
- : firstCharacterAgainAgain;
- this.searchColumn(firstColumn, value);
+ if (value.length > 4) {
+ const startIndex = inputEl.value.length - 4;
+ const newString = inputEl.value.substring(startIndex);
- /**
- * If only checked the first value,
- * we can check the second value
- * for a match in the minutes column
- */
- const minuteValueAgain =
- value.length === 1
- ? inputEl.value.substring(1, inputEl.value.length)
- : inputEl.value.substring(2, inputEl.value.length);
- this.searchColumn(lastColumn, minuteValueAgain, 'end');
-
- break;
- default:
- const startIndex = inputEl.value.length - 4;
- const newString = inputEl.value.substring(startIndex);
-
- inputEl.value = newString;
- this.selectMultiColumn();
- break;
+ inputEl.value = newString;
+ value = newString;
}
+
+ this.multiColumnSearch(firstColumn, lastColumn, value);
};
/**
diff --git a/core/src/components/picker/test/keyboard-entry/picker.e2e.ts b/core/src/components/picker/test/keyboard-entry/picker.e2e.ts
index 64d4a1cce13..b54cd03585a 100644
--- a/core/src/components/picker/test/keyboard-entry/picker.e2e.ts
+++ b/core/src/components/picker/test/keyboard-entry/picker.e2e.ts
@@ -163,6 +163,172 @@ configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) =>
await expect(ionChange).toHaveReceivedEventDetail({ value: 12 });
await expect(column).toHaveJSProperty('value', 12);
});
+
+ test('should allow typing 22 in a column where the max value is 23 and not just set it to 2', async ({
+ page,
+ }, testInfo) => {
+ testInfo.annotations.push({
+ type: 'issue',
+ description: 'https://github.com/ionic-team/ionic-framework/issues/28877',
+ });
+ await page.setContent(
+ `
+
+
+
+
+
+
+ `,
+ config
+ );
+
+ const hoursColumn = page.locator('ion-picker-column#hours');
+ const minutesColumn = page.locator('ion-picker-column#minutes');
+ const hoursIonChange = await (hoursColumn as E2ELocator).spyOnEvent('ionChange');
+ const minutesIonChange = await (minutesColumn as E2ELocator).spyOnEvent('ionChange');
+ const highlight = page.locator('ion-picker .picker-highlight');
+
+ const box = await highlight.boundingBox();
+ if (box !== null) {
+ await page.mouse.click(box.x + box.width / 2, box.y + box.height / 2);
+ }
+
+ // Simulate typing '2230' (22 hours, 30 minutes)
+ await page.keyboard.press('Digit2');
+ await page.keyboard.press('Digit2');
+ await page.keyboard.press('Digit3');
+ await page.keyboard.press('Digit0');
+
+ // Ensure the hours column is set to 22
+ await expect(hoursIonChange).toHaveReceivedEventDetail({ value: 22 });
+ await expect(hoursColumn).toHaveJSProperty('value', 22);
+
+ // Ensure the minutes column is set to 30
+ await expect(minutesIonChange).toHaveReceivedEventDetail({ value: 30 });
+ await expect(minutesColumn).toHaveJSProperty('value', 30);
+ });
+
+ test('should set value to 2 and not wait for another digit when max value is 12', async ({ page }, testInfo) => {
+ testInfo.annotations.push({
+ type: 'issue',
+ description: 'https://github.com/ionic-team/ionic-framework/issues/28877',
+ });
+ await page.setContent(
+ `
+
+
+
+
+
+
+ `,
+ config
+ );
+
+ const hoursColumn = page.locator('ion-picker-column#hours');
+ const minutesColumn = page.locator('ion-picker-column#minutes');
+ const hoursIonChange = await (hoursColumn as E2ELocator).spyOnEvent('ionChange');
+ const minutesIonChange = await (minutesColumn as E2ELocator).spyOnEvent('ionChange');
+ const highlight = page.locator('ion-picker .picker-highlight');
+
+ const box = await highlight.boundingBox();
+ if (box !== null) {
+ await page.mouse.click(box.x + box.width / 2, box.y + box.height / 2);
+ }
+
+ // Simulate typing '245' (2 hours, 45 minutes)
+ await page.keyboard.press('Digit2');
+ await page.keyboard.press('Digit4');
+ await page.keyboard.press('Digit5');
+
+ // Ensure the hours column is set to 2
+ await expect(hoursIonChange).toHaveReceivedEventDetail({ value: 2 });
+ await expect(hoursColumn).toHaveJSProperty('value', 2);
+
+ // Ensure the minutes column is set to 45
+ await expect(minutesIonChange).toHaveReceivedEventDetail({ value: 45 });
+ await expect(minutesColumn).toHaveJSProperty('value', 45);
+ });
+
test('pressing Enter should dismiss the keyboard', async ({ page }) => {
test.info().annotations.push({
type: 'issue',
diff --git a/core/src/components/range/range.tsx b/core/src/components/range/range.tsx
index b36617ad3e1..478b2a57e2e 100644
--- a/core/src/components/range/range.tsx
+++ b/core/src/components/range/range.tsx
@@ -213,12 +213,32 @@ export class Range implements ComponentInterface {
*/
@Prop({ mutable: true }) value: RangeValue = 0;
@Watch('value')
- protected valueChanged() {
+ protected valueChanged(newValue: RangeValue, oldValue: RangeValue) {
+ const valuesChanged = this.compareValues(newValue, oldValue);
+ if (valuesChanged) {
+ this.ionInput.emit({ value: this.value });
+ }
+
if (!this.noUpdate) {
this.updateRatio();
}
}
+ /**
+ * Compares two RangeValue inputs to determine if they are different.
+ *
+ * @param newVal - The new value.
+ * @param oldVal - The old value.
+ * @returns `true` if the values are different, `false` otherwise.
+ */
+ private compareValues = (newVal: RangeValue, oldVal: RangeValue) => {
+ if (typeof newVal === 'object' && typeof oldVal === 'object') {
+ return newVal.lower !== oldVal.lower || newVal.upper !== oldVal.upper;
+ }
+
+ return newVal !== oldVal;
+ };
+
private clampBounds = (value: any): number => {
return clamp(this.min, value, this.max);
};
@@ -591,8 +611,6 @@ export class Range implements ComponentInterface {
upper: Math.max(valA, valB),
};
- this.ionInput.emit({ value: this.value });
-
this.noUpdate = false;
}
diff --git a/core/src/components/range/test/range-events.e2e.ts b/core/src/components/range/test/range-events.e2e.ts
index bfbdfac48e4..f76d147627b 100644
--- a/core/src/components/range/test/range-events.e2e.ts
+++ b/core/src/components/range/test/range-events.e2e.ts
@@ -217,6 +217,42 @@ configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) =>
expect(ionInputSpy).toHaveReceivedEvent();
});
+ test('should not emit when the value does not change', async ({ page }, testInfo) => {
+ testInfo.annotations.push({
+ type: 'issue',
+ description: 'https://github.com/ionic-team/ionic-framework/issues/29619',
+ });
+
+ /**
+ * Requires padding to prevent the knob from being clipped.
+ * If it's clipped, then the value might be one off.
+ * For example, if the knob is clipped on the right, then the value
+ * will be 99 instead of 100.
+ */
+ await page.setContent(
+ `
+
+
+
+ `,
+ config
+ );
+
+ const rangeHandle = page.locator('ion-range .range-knob-handle');
+ const ionInputSpy = await page.spyOnEvent('ionInput');
+
+ const rangeHandleBoundingBox = await rangeHandle.boundingBox();
+ const x = rangeHandleBoundingBox!.width / 2;
+ const y = rangeHandleBoundingBox!.height / 2;
+
+ // Click in the middle of the knob to prevent the knob from moving.
+ await rangeHandle.click({
+ position: { x, y },
+ });
+
+ expect(ionInputSpy).not.toHaveReceivedEvent();
+ });
+
test('should emit when the knob is moved with the keyboard', async ({ page }) => {
await page.setContent(``, config);
diff --git a/core/src/components/segment-button/segment-button.tsx b/core/src/components/segment-button/segment-button.tsx
index 3a2135421c2..fb940c9d99b 100644
--- a/core/src/components/segment-button/segment-button.tsx
+++ b/core/src/components/segment-button/segment-button.tsx
@@ -2,7 +2,7 @@ import type { ComponentInterface } from '@stencil/core';
import { Component, Element, Host, Prop, Method, State, Watch, forceUpdate, h } from '@stencil/core';
import type { ButtonInterface } from '@utils/element-interface';
import type { Attributes } from '@utils/helpers';
-import { addEventListener, removeEventListener, inheritAttributes, getNextSiblingOfType } from '@utils/helpers';
+import { addEventListener, removeEventListener, inheritAttributes } from '@utils/helpers';
import { hostContext } from '@utils/theme';
import { getIonMode } from '../../global/ionic-global';
@@ -65,41 +65,7 @@ export class SegmentButton implements ComponentInterface, ButtonInterface {
this.updateState();
}
- private waitForSegmentContent(ionSegment: HTMLIonSegmentElement | null, contentId: string): Promise {
- return new Promise((resolve, reject) => {
- let timeoutId: NodeJS.Timeout | undefined = undefined;
- let animationFrameId: number;
-
- const check = () => {
- if (!ionSegment) {
- reject(new Error(`Segment not found when looking for Segment Content`));
- return;
- }
-
- const segmentView = getNextSiblingOfType(ionSegment); // Skip the text nodes
- const segmentContent = segmentView?.querySelector(
- `ion-segment-content[id="${contentId}"]`
- ) as HTMLIonSegmentContentElement | null;
- if (segmentContent && timeoutId) {
- clearTimeout(timeoutId); // Clear the timeout if the segmentContent is found
- cancelAnimationFrame(animationFrameId);
- resolve(segmentContent);
- } else {
- animationFrameId = requestAnimationFrame(check); // Keep checking on the next animation frame
- }
- };
-
- check();
-
- // Set a timeout to reject the promise
- timeoutId = setTimeout(() => {
- cancelAnimationFrame(animationFrameId);
- reject(new Error(`Unable to find Segment Content with id="${contentId} within 1000 ms`));
- }, 1000);
- });
- }
-
- async connectedCallback() {
+ connectedCallback() {
const segmentEl = (this.segmentEl = this.el.closest('ion-segment'));
if (segmentEl) {
this.updateState();
@@ -107,27 +73,8 @@ export class SegmentButton implements ComponentInterface, ButtonInterface {
addEventListener(segmentEl, 'ionStyle', this.updateStyle);
}
- // Return if there is no contentId defined
- if (!this.contentId) return;
-
- let segmentContent;
- try {
- // Attempt to find the Segment Content by its contentId
- segmentContent = await this.waitForSegmentContent(segmentEl, this.contentId);
- } catch (error) {
- // If no associated Segment Content exists, log an error and return
- console.error('Segment Button: ', (error as Error).message);
- return;
- }
-
- // Ensure the found element is a valid ION-SEGMENT-CONTENT
- if (segmentContent.tagName !== 'ION-SEGMENT-CONTENT') {
- console.error(`Segment Button: Element with id="${this.contentId}" is not an element.`);
- return;
- }
-
// Prevent buttons from being disabled when associated with segment content
- if (this.disabled) {
+ if (this.contentId && this.disabled) {
console.warn(`Segment Button: Segment buttons cannot be disabled when associated with an .`);
this.disabled = false;
}
@@ -146,6 +93,24 @@ export class SegmentButton implements ComponentInterface, ButtonInterface {
this.inheritedAttributes = {
...inheritAttributes(this.el, ['aria-label']),
};
+
+ // Return if there is no contentId defined
+ if (!this.contentId) return;
+
+ // Attempt to find the Segment Content by its contentId
+ const segmentContent = document.getElementById(this.contentId) as HTMLIonSegmentContentElement | null;
+
+ // If no associated Segment Content exists, log an error and return
+ if (!segmentContent) {
+ console.error(`Segment Button: Unable to find Segment Content with id="${this.contentId}".`);
+ return;
+ }
+
+ // Ensure the found element is a valid ION-SEGMENT-CONTENT
+ if (segmentContent.tagName !== 'ION-SEGMENT-CONTENT') {
+ console.error(`Segment Button: Element with id="${this.contentId}" is not an element.`);
+ return;
+ }
}
private get hasLabel() {
diff --git a/core/src/utils/helpers.ts b/core/src/utils/helpers.ts
index 1a3cd15b0d8..e2a65407c0d 100644
--- a/core/src/utils/helpers.ts
+++ b/core/src/utils/helpers.ts
@@ -388,17 +388,6 @@ export const shallowEqualStringMap = (
return true;
};
-export const getNextSiblingOfType = (element: Element): T | null => {
- let sibling = element.nextSibling;
- while (sibling) {
- if (sibling.nodeType === Node.ELEMENT_NODE && (sibling as T) !== null) {
- return sibling as T;
- }
- sibling = sibling.nextSibling;
- }
- return null;
-};
-
/**
* Checks input for usable number. Not NaN and not Infinite.
*/
diff --git a/lerna.json b/lerna.json
index 56745d0c303..444bc6effc1 100644
--- a/lerna.json
+++ b/lerna.json
@@ -3,5 +3,5 @@
"core",
"packages/*"
],
- "version": "8.5.1"
+ "version": "8.5.2"
}
\ No newline at end of file
diff --git a/packages/angular-server/CHANGELOG.md b/packages/angular-server/CHANGELOG.md
index c8472bf96b2..84386d758b5 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.5.2](https://github.com/ionic-team/ionic-framework/compare/v8.5.1...v8.5.2) (2025-03-26)
+
+**Note:** Version bump only for package @ionic/angular-server
+
+
+
+
+
## [8.5.1](https://github.com/ionic-team/ionic-framework/compare/v8.5.0...v8.5.1) (2025-03-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 031aa0a5540..62e3fbb91be 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.5.1",
+ "version": "8.5.2",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "@ionic/angular-server",
- "version": "8.5.1",
+ "version": "8.5.2",
"license": "MIT",
"dependencies": {
- "@ionic/core": "^8.5.1"
+ "@ionic/core": "^8.5.2"
},
"devDependencies": {
"@angular-eslint/eslint-plugin": "^16.0.0",
@@ -1031,9 +1031,9 @@
"dev": true
},
"node_modules/@ionic/core": {
- "version": "8.5.1",
- "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.5.1.tgz",
- "integrity": "sha512-XsI1ImfgO87EdNucfmKESPN4djLyclNTwzU2AY7xSzSonKjTAft6qrK1/qU2ys829bmbM7/4+tHFb0UOnt3uHQ==",
+ "version": "8.5.2",
+ "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.5.2.tgz",
+ "integrity": "sha512-XTiZqyLv2gzPzU4l4EvegHc2nDv5TniVU102MAxT739Lw0tFywZV9R1bv590z7Ue7w43ndwGdnfLuOuBksSeRA==",
"license": "MIT",
"dependencies": {
"@stencil/core": "4.20.0",
@@ -7190,9 +7190,9 @@
"dev": true
},
"@ionic/core": {
- "version": "8.5.1",
- "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.5.1.tgz",
- "integrity": "sha512-XsI1ImfgO87EdNucfmKESPN4djLyclNTwzU2AY7xSzSonKjTAft6qrK1/qU2ys829bmbM7/4+tHFb0UOnt3uHQ==",
+ "version": "8.5.2",
+ "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.5.2.tgz",
+ "integrity": "sha512-XTiZqyLv2gzPzU4l4EvegHc2nDv5TniVU102MAxT739Lw0tFywZV9R1bv590z7Ue7w43ndwGdnfLuOuBksSeRA==",
"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 e43acdbf3ac..5a475c32c3b 100644
--- a/packages/angular-server/package.json
+++ b/packages/angular-server/package.json
@@ -1,6 +1,6 @@
{
"name": "@ionic/angular-server",
- "version": "8.5.1",
+ "version": "8.5.2",
"description": "Angular SSR Module for Ionic",
"keywords": [
"ionic",
@@ -62,6 +62,6 @@
},
"prettier": "@ionic/prettier-config",
"dependencies": {
- "@ionic/core": "^8.5.1"
+ "@ionic/core": "^8.5.2"
}
}
diff --git a/packages/angular/CHANGELOG.md b/packages/angular/CHANGELOG.md
index 293ee1aee18..194bdb9a1ca 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.5.2](https://github.com/ionic-team/ionic-framework/compare/v8.5.1...v8.5.2) (2025-03-26)
+
+**Note:** Version bump only for package @ionic/angular
+
+
+
+
+
## [8.5.1](https://github.com/ionic-team/ionic-framework/compare/v8.5.0...v8.5.1) (2025-03-19)
**Note:** Version bump only for package @ionic/angular
diff --git a/packages/angular/package-lock.json b/packages/angular/package-lock.json
index 86c17ba9f3c..55e3c732995 100644
--- a/packages/angular/package-lock.json
+++ b/packages/angular/package-lock.json
@@ -1,15 +1,15 @@
{
"name": "@ionic/angular",
- "version": "8.5.1",
+ "version": "8.5.2",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "@ionic/angular",
- "version": "8.5.1",
+ "version": "8.5.2",
"license": "MIT",
"dependencies": {
- "@ionic/core": "^8.5.1",
+ "@ionic/core": "^8.5.2",
"ionicons": "^7.0.0",
"jsonc-parser": "^3.0.0",
"tslib": "^2.3.0"
@@ -1398,9 +1398,9 @@
"dev": true
},
"node_modules/@ionic/core": {
- "version": "8.5.1",
- "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.5.1.tgz",
- "integrity": "sha512-XsI1ImfgO87EdNucfmKESPN4djLyclNTwzU2AY7xSzSonKjTAft6qrK1/qU2ys829bmbM7/4+tHFb0UOnt3uHQ==",
+ "version": "8.5.2",
+ "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.5.2.tgz",
+ "integrity": "sha512-XTiZqyLv2gzPzU4l4EvegHc2nDv5TniVU102MAxT739Lw0tFywZV9R1bv590z7Ue7w43ndwGdnfLuOuBksSeRA==",
"license": "MIT",
"dependencies": {
"@stencil/core": "4.20.0",
@@ -9821,9 +9821,9 @@
"dev": true
},
"@ionic/core": {
- "version": "8.5.1",
- "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.5.1.tgz",
- "integrity": "sha512-XsI1ImfgO87EdNucfmKESPN4djLyclNTwzU2AY7xSzSonKjTAft6qrK1/qU2ys829bmbM7/4+tHFb0UOnt3uHQ==",
+ "version": "8.5.2",
+ "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.5.2.tgz",
+ "integrity": "sha512-XTiZqyLv2gzPzU4l4EvegHc2nDv5TniVU102MAxT739Lw0tFywZV9R1bv590z7Ue7w43ndwGdnfLuOuBksSeRA==",
"requires": {
"@stencil/core": "4.20.0",
"ionicons": "^7.2.2",
@@ -9920,7 +9920,8 @@
},
"@ionic/prettier-config": {
"version": "2.0.0",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"@isaacs/cliui": {
"version": "8.0.2",
@@ -10755,7 +10756,8 @@
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
"integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"agent-base": {
"version": "6.0.2",
@@ -14784,7 +14786,8 @@
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/typescript-eslint-language-service/-/typescript-eslint-language-service-5.0.0.tgz",
"integrity": "sha512-QB3YsL+lDOpKwblXuqD9GkzpHhJC2D02e/3OIj38kIe6LSL97cEsUtnsVPqIaofnOsV2glj2T5VLxp5gmLTERQ==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"unbox-primitive": {
"version": "1.0.1",
diff --git a/packages/angular/package.json b/packages/angular/package.json
index 9fea398c030..9906bf3456f 100644
--- a/packages/angular/package.json
+++ b/packages/angular/package.json
@@ -1,6 +1,6 @@
{
"name": "@ionic/angular",
- "version": "8.5.1",
+ "version": "8.5.2",
"description": "Angular specific wrappers for @ionic/core",
"keywords": [
"ionic",
@@ -47,7 +47,7 @@
}
},
"dependencies": {
- "@ionic/core": "^8.5.1",
+ "@ionic/core": "^8.5.2",
"ionicons": "^7.0.0",
"jsonc-parser": "^3.0.0",
"tslib": "^2.3.0"
diff --git a/packages/angular/test/apps/ng19/src/app/app.module.ts b/packages/angular/test/apps/ng19/src/app/app.module.ts
deleted file mode 100644
index cdc0a89be04..00000000000
--- a/packages/angular/test/apps/ng19/src/app/app.module.ts
+++ /dev/null
@@ -1,28 +0,0 @@
-import { APP_ID, NgModule } from '@angular/core';
-import { BrowserModule } from '@angular/platform-browser';
-import { RouteReuseStrategy } from '@angular/router';
-import { IonicModule, IonicRouteStrategy } from '@ionic/angular';
-import { AppComponent } from './app.component';
-import { AppRoutingModule } from './app-routing.module';
-
-const isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';
-
-export function ionicConfigFactory(): any {
- const isLazy = isBrowser && window.location.href.includes('lazy');
- return isLazy ? { keyboardHeight: 12345 } : {};
-}
-
-@NgModule({
- declarations: [AppComponent],
- imports: [
- BrowserModule,
- AppRoutingModule,
- IonicModule.forRoot(ionicConfigFactory()),
- ],
- providers: [
- { provide: RouteReuseStrategy, useClass: IonicRouteStrategy },
- { provide: APP_ID, useValue: 'serverApp' },
- ],
- bootstrap: [AppComponent],
-})
-export class AppModule {}
diff --git a/packages/angular/test/base/e2e/src/lazy/tabs.spec.ts b/packages/angular/test/base/e2e/src/lazy/tabs.spec.ts
index ac31d74060b..ef3b8a3f32b 100644
--- a/packages/angular/test/base/e2e/src/lazy/tabs.spec.ts
+++ b/packages/angular/test/base/e2e/src/lazy/tabs.spec.ts
@@ -3,122 +3,122 @@ describe('Tabs', () => {
beforeEach(() => {
cy.visit('/lazy/tabs');
})
-
+
describe('entry url - /tabs', () => {
it('should redirect and load tab-account', () => {
testTabTitle('Tab 1 - Page 1');
cy.testStack('ion-tabs ion-router-outlet', ['app-tabs-tab1']);
testState(1, 'account');
});
-
+
it('should navigate between tabs and ionChange events should be dispatched', () => {
let tab = testTabTitle('Tab 1 - Page 1');
tab.find('.segment-changed').should('have.text', 'false');
-
+
cy.get('#tab-button-contact').click();
tab = testTabTitle('Tab 2 - Page 1');
tab.find('.segment-changed').should('have.text', 'false');
});
-
+
describe('when navigating between tabs', () => {
-
+
it('should emit ionTabsWillChange before setting the selected tab', () => {
cy.get('#ionTabsWillChangeCounter').should('have.text', '1');
cy.get('#ionTabsWillChangeEvent').should('have.text', 'account');
cy.get('#ionTabsWillChangeSelectedTab').should('have.text', '');
-
+
cy.get('#ionTabsDidChangeCounter').should('have.text', '1');
cy.get('#ionTabsDidChangeEvent').should('have.text', 'account');
cy.get('#ionTabsDidChangeSelectedTab').should('have.text', 'account');
-
+
cy.get('#tab-button-contact').click();
-
+
cy.get('#ionTabsWillChangeCounter').should('have.text', '2');
cy.get('#ionTabsWillChangeEvent').should('have.text', 'contact');
cy.get('#ionTabsWillChangeSelectedTab').should('have.text', 'account');
-
+
cy.get('#ionTabsDidChangeCounter').should('have.text', '2');
cy.get('#ionTabsDidChangeEvent').should('have.text', 'contact');
cy.get('#ionTabsDidChangeSelectedTab').should('have.text', 'contact');
})
-
+
});
-
+
it('should simulate stack + double tab click', () => {
let tab = getSelectedTab();
tab.find('#goto-tab1-page2').click();
testTabTitle('Tab 1 - Page 2 (1)');
cy.testStack('ion-tabs ion-router-outlet', ['app-tabs-tab1', 'app-tabs-tab1-nested']);
testState(1, 'account');
-
+
// When you call find on tab above it changes the value of tab
// so we need to redefine it
tab = getSelectedTab();
tab.find('ion-back-button').should('be.visible');
-
+
cy.get('#tab-button-contact').click();
testTabTitle('Tab 2 - Page 1');
cy.testStack('ion-tabs ion-router-outlet', ['app-tabs-tab1', 'app-tabs-tab1-nested', 'app-tabs-tab2']);
testState(2, 'contact');
-
+
cy.get('#tab-button-account').click();
testTabTitle('Tab 1 - Page 2 (1)');
cy.testStack('ion-tabs ion-router-outlet', ['app-tabs-tab1', 'app-tabs-tab1-nested', 'app-tabs-tab2']);
testState(3, 'account');
-
+
tab = getSelectedTab();
tab.find('ion-back-button').should('be.visible');
-
+
cy.get('#tab-button-account').click();
testTabTitle('Tab 1 - Page 1');
cy.testStack('ion-tabs ion-router-outlet', ['app-tabs-tab1', 'app-tabs-tab2']);
testState(3, 'account');
});
-
+
it('should simulate stack + back button click', () => {
const tab = getSelectedTab();
tab.find('#goto-tab1-page2').click();
testTabTitle('Tab 1 - Page 2 (1)');
testState(1, 'account');
-
+
cy.get('#tab-button-contact').click();
testTabTitle('Tab 2 - Page 1');
testState(2, 'contact');
-
+
cy.get('#tab-button-account').click();
testTabTitle('Tab 1 - Page 2 (1)');
testState(3, 'account');
-
+
cy.get('ion-back-button').click();
testTabTitle('Tab 1 - Page 1');
cy.testStack('ion-tabs ion-router-outlet', ['app-tabs-tab1', 'app-tabs-tab2']);
testState(3, 'account');
});
-
+
it('should navigate deep then go home', () => {
const tab = getSelectedTab();
tab.find('#goto-tab1-page2').click();
cy.ionPageVisible('app-tabs-tab1-nested');
cy.ionPageHidden('app-tabs-tab1');
-
+
testTabTitle('Tab 1 - Page 2 (1)');
-
+
cy.get('#goto-next').click();
cy.ionPageVisible('app-tabs-tab1-nested:last-of-type');
cy.ionPageHidden('app-tabs-tab1-nested:first-of-type');
-
+
testTabTitle('Tab 1 - Page 2 (2)');
-
+
cy.get('#tab-button-contact').click();
cy.ionPageVisible('app-tabs-tab2');
cy.ionPageHidden('app-tabs-tab1-nested:last-of-type');
-
+
testTabTitle('Tab 2 - Page 1');
-
+
cy.get('#tab-button-account').click();
cy.ionPageVisible('app-tabs-tab1-nested:last-of-type');
cy.ionPageHidden('app-tabs-tab2');
-
+
testTabTitle('Tab 1 - Page 2 (2)');
cy.testStack('ion-tabs ion-router-outlet', [
'app-tabs-tab1',
@@ -126,9 +126,9 @@ describe('Tabs', () => {
'app-tabs-tab1-nested',
'app-tabs-tab2'
]);
-
+
cy.get('#tab-button-account').click();
-
+
/**
* Wait for the leaving view to
* be unmounted otherwise testTabTitle
@@ -137,65 +137,65 @@ describe('Tabs', () => {
*/
cy.ionPageVisible('app-tabs-tab1');
cy.ionPageDoesNotExist('app-tabs-tab1-nested');
-
+
testTabTitle('Tab 1 - Page 1');
cy.testStack('ion-tabs ion-router-outlet', [
'app-tabs-tab1',
'app-tabs-tab2'
]);
});
-
+
it('should switch tabs and go back', () => {
cy.get('#tab-button-contact').click();
const tab = testTabTitle('Tab 2 - Page 1');
-
+
tab.find('#goto-tab1-page1').click();
testTabTitle('Tab 1 - Page 1');
cy.testStack('ion-tabs ion-router-outlet', ['app-tabs-tab1', 'app-tabs-tab2']);
});
-
+
it('should switch tabs and go to nested', () => {
cy.get('#tab-button-contact').click();
const tab = testTabTitle('Tab 2 - Page 1');
-
+
tab.find('#goto-tab1-page2').click();
testTabTitle('Tab 1 - Page 2 (1)');
cy.testStack('ion-tabs ion-router-outlet', ['app-tabs-tab2', 'app-tabs-tab1-nested']);
});
-
+
it('should load lazy loaded tab', () => {
cy.get('#tab-button-lazy').click();
cy.ionPageVisible('app-tabs-tab3');
testTabTitle('Tab 3 - Page 1');
});
-
+
it('should use ion-back-button defaultHref', () => {
let tab = getSelectedTab();
tab.find('#goto-tab3-page2').click();
testTabTitle('Tab 3 - Page 2');
cy.testStack('ion-tabs ion-router-outlet', ['app-tabs-tab1', 'app-tabs-tab3-nested']);
-
+
tab = getSelectedTab();
tab.find('ion-back-button').click();
testTabTitle('Tab 3 - Page 1');
cy.testStack('ion-tabs ion-router-outlet', ['app-tabs-tab1', 'app-tabs-tab3']);
});
-
+
it('should preserve navigation extras when switching tabs', () => {
const expectUrlToContain = 'search=hello#fragment';
let tab = getSelectedTab();
tab.find('#goto-nested-page1-with-query-params').click();
testTabTitle('Tab 1 - Page 2 (1)');
testUrlContains(expectUrlToContain);
-
+
cy.get('#tab-button-contact').click();
testTabTitle('Tab 2 - Page 1');
-
+
cy.get('#tab-button-account').click();
tab = testTabTitle('Tab 1 - Page 2 (1)');
testUrlContains(expectUrlToContain);
});
-
+
it('should set root when clicking on an active tab to navigate to the root', () => {
const expectNestedTabUrlToContain = 'search=hello#fragment';
cy.url().then(url => {
@@ -203,74 +203,74 @@ describe('Tabs', () => {
tab.find('#goto-nested-page1-with-query-params').click();
testTabTitle('Tab 1 - Page 2 (1)');
testUrlContains(expectNestedTabUrlToContain);
-
+
cy.get('#tab-button-account').click();
testTabTitle('Tab 1 - Page 1');
-
+
testUrlEquals(url);
})
});
})
-
+
describe('entry tab contains navigation extras', () => {
const expectNestedTabUrlToContain = 'search=hello#fragment';
const rootUrlParams = 'test=123#rootFragment';
const rootUrl = `/lazy/tabs/account?${rootUrlParams}`;
-
+
beforeEach(() => {
cy.visit(rootUrl);
})
-
+
it('should preserve root url navigation extras when clicking on an active tab to navigate to the root', () => {
const tab = getSelectedTab();
tab.find('#goto-nested-page1-with-query-params').click();
-
+
testTabTitle('Tab 1 - Page 2 (1)');
testUrlContains(expectNestedTabUrlToContain);
-
+
cy.get('#tab-button-account').click();
testTabTitle('Tab 1 - Page 1');
-
+
testUrlContains(rootUrl);
});
-
+
it('should preserve root url navigation extras when changing tabs', () => {
getSelectedTab();
cy.get('#tab-button-contact').click();
testTabTitle('Tab 2 - Page 1');
-
+
cy.get('#tab-button-account').click();
testTabTitle('Tab 1 - Page 1');
-
+
testUrlContains(rootUrl);
});
-
+
it('should navigate deep then go home and preserve navigation extras', () => {
let tab = getSelectedTab();
tab.find('#goto-tab1-page2').click();
cy.ionPageVisible('app-tabs-tab1-nested');
cy.ionPageHidden('app-tabs-tab1');
-
+
tab = testTabTitle('Tab 1 - Page 2 (1)');
-
+
tab.find('#goto-next').click();
cy.ionPageVisible('app-tabs-tab1-nested:last-of-type');
cy.ionPageHidden('app-tabs-tab1-nested:first-of-type');
-
+
testTabTitle('Tab 1 - Page 2 (2)');
-
+
cy.ionTabClick('Tab Two');
cy.ionPageVisible('app-tabs-tab2');
cy.ionPageHidden('app-tabs-tab1-nested:last-of-type');
-
+
testTabTitle('Tab 2 - Page 1');
-
+
cy.ionTabClick('Tab One');
cy.ionPageVisible('app-tabs-tab1-nested:last-of-type');
cy.ionPageHidden('app-tabs-tab2');
-
+
testTabTitle('Tab 1 - Page 2 (2)');
-
+
cy.ionTabClick('Tab One');
/**
* Wait for the leaving view to
@@ -280,37 +280,37 @@ describe('Tabs', () => {
*/
cy.ionPageVisible('app-tabs-tab1');
cy.ionPageDoesNotExist('app-tabs-tab1-nested');
-
+
testTabTitle('Tab 1 - Page 1');
-
+
testUrlContains(rootUrl);
});
})
-
+
describe('entry url - /tabs/account', () => {
beforeEach(() => {
cy.visit('/lazy/tabs/account');
});
it('should pop to previous view when leaving tabs outlet', () => {
-
+
cy.get('ion-title').should('contain.text', 'Tab 1 - Page 1');
-
+
cy.get('#goto-tab1-page2').click();
-
+
cy.get('ion-title').should('contain.text', 'Tab 1 - Page 2 (1)');
-
+
cy.get('#goto-global').click();
-
+
cy.get('ion-title').should('contain.text', 'Global Page');
-
+
cy.get('#goto-prev-pop').click();
-
+
cy.get('ion-title').should('contain.text', 'Tab 1 - Page 2 (1)');
-
+
cy.get('#goto-prev').click();
-
+
cy.get('ion-title').should('contain.text', 'Tab 1 - Page 1');
-
+
/**
* Verifies that when entering the tabs outlet directly,
* the navController.pop() method does not pop the previous view,
@@ -320,117 +320,117 @@ describe('Tabs', () => {
cy.get('ion-title').should('contain.text', 'Tab 1 - Page 1');
});
});
-
+
describe('entry url - /', () => {
it('should pop to the root outlet from the tabs outlet', () => {
cy.visit('/lazy/');
-
+
cy.get('ion-title').should('contain.text', 'Test App');
-
- cy.get('ion-item').contains('Tabs test').click();
-
+
+ cy.get('ion-item').contains('Tabs Test').click();
+
cy.get('ion-title').should('contain.text', 'Tab 1 - Page 1');
-
+
cy.get('#goto-tab1-page2').click();
-
+
cy.get('ion-title').should('contain.text', 'Tab 1 - Page 2 (1)');
-
+
cy.get('#goto-global').click();
-
+
cy.get('ion-title').should('contain.text', 'Global Page');
-
+
cy.get('#goto-prev-pop').click();
-
+
cy.get('ion-title').should('contain.text', 'Tab 1 - Page 2 (1)');
-
+
cy.get('#goto-prev').click();
-
+
cy.get('ion-title').should('contain.text', 'Tab 1 - Page 1');
-
+
cy.get('#goto-previous-page').click();
-
+
cy.get('ion-title').should('contain.text', 'Test App');
-
+
});
});
-
-
+
+
describe('entry url - /tabs/account/nested/1', () => {
beforeEach(() => {
cy.visit('/lazy/tabs/account/nested/1');
})
-
+
it('should only display the back-button when there is a page in the stack', () => {
let tab = getSelectedTab();
tab.find('ion-back-button').should('not.be.visible');
testTabTitle('Tab 1 - Page 2 (1)');
cy.testStack('ion-tabs ion-router-outlet', ['app-tabs-tab1-nested']);
-
+
cy.get('#tab-button-account').click();
tab = testTabTitle('Tab 1 - Page 1');
-
+
tab.find('#goto-tab1-page2').click();
tab = testTabTitle('Tab 1 - Page 2 (1)');
tab.find('ion-back-button').should('be.visible');
});
-
+
it('should not reuse the same page', () => {
let tab = testTabTitle('Tab 1 - Page 2 (1)');
tab.find('#goto-next').click();
tab = testTabTitle('Tab 1 - Page 2 (2)');
-
+
tab.find('#goto-next').click();
tab = testTabTitle('Tab 1 - Page 2 (3)');
-
+
cy.testStack('ion-tabs ion-router-outlet', [
'app-tabs-tab1-nested',
'app-tabs-tab1-nested',
'app-tabs-tab1-nested'
]);
-
+
tab = getSelectedTab();
tab.find('ion-back-button').click();
tab = testTabTitle('Tab 1 - Page 2 (2)');
tab.find('ion-back-button').click();
tab = testTabTitle('Tab 1 - Page 2 (1)');
-
+
tab.find('ion-back-button').should('not.be.visible');
-
+
cy.testStack('ion-tabs ion-router-outlet', ['app-tabs-tab1-nested']);
});
})
-
+
describe('entry url - /tabs/lazy', () => {
beforeEach(() => {
cy.visit('/lazy/tabs/lazy');
});
-
+
it('should not display the back-button if coming from a different stack', () => {
let tab = testTabTitle('Tab 3 - Page 1');
cy.testStack('ion-tabs ion-router-outlet', ['app-tabs-tab3']);
-
+
tab = getSelectedTab();
tab.find('#goto-tab1-page2').click();
cy.testStack('ion-tabs ion-router-outlet', ['app-tabs-tab3', 'app-tabs-tab1-nested']);
-
+
tab = testTabTitle('Tab 1 - Page 2 (1)');
tab.find('ion-back-button').should('not.be.visible');
});
})
-
+
describe('enter url - /tabs/contact/one', () => {
beforeEach(() => {
cy.visit('/lazy/tabs/contact/one');
});
-
+
it('should return to correct tab after going to page in different outlet', () => {
const tab = getSelectedTab();
tab.find('#goto-nested-page1').click();
cy.testStack('app-nested-outlet ion-router-outlet', ['app-nested-outlet-page']);
-
+
const nestedOutlet = cy.get('app-nested-outlet');
nestedOutlet.find('ion-back-button').click();
-
+
testTabTitle('Tab 2 - Page 1');
});
})
diff --git a/packages/angular/test/base/src/app/app-landing/app-landing.component.html b/packages/angular/test/base/src/app/app-landing/app-landing.component.html
new file mode 100644
index 00000000000..8689c0e29bc
--- /dev/null
+++ b/packages/angular/test/base/src/app/app-landing/app-landing.component.html
@@ -0,0 +1,16 @@
+
+
+ Test App - Angular {{ angularVersion.major }}
+
+
+
+
+
+
+ Go to Lazy App
+
+
+ Go to Standalone App
+
+
+
diff --git a/packages/angular/test/base/src/app/app-landing/app-landing.component.ts b/packages/angular/test/base/src/app/app-landing/app-landing.component.ts
new file mode 100644
index 00000000000..62814291cdd
--- /dev/null
+++ b/packages/angular/test/base/src/app/app-landing/app-landing.component.ts
@@ -0,0 +1,13 @@
+import { Component, VERSION } from '@angular/core';
+
+@Component({
+ selector: 'app-landing',
+ templateUrl: './app-landing.component.html',
+ standalone: false
+})
+export class AppLandingComponent {
+ angularVersion = VERSION;
+
+ constructor() {}
+
+}
diff --git a/packages/angular/test/base/src/app/app.module.ts b/packages/angular/test/base/src/app/app.module.ts
index 9d0a2a78eab..c419cd6d0d8 100644
--- a/packages/angular/test/base/src/app/app.module.ts
+++ b/packages/angular/test/base/src/app/app.module.ts
@@ -1,30 +1,29 @@
+import { APP_ID, NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
-import { NgModule } from '@angular/core';
import { RouteReuseStrategy } from '@angular/router';
-
-import { AppRoutingModule } from './app-routing.module';
-import { AppComponent } from './app.component';
import { IonicModule, IonicRouteStrategy } from '@ionic/angular';
+import { AppComponent } from './app.component';
+import { AppRoutingModule } from './app-routing.module';
+import { AppLandingComponent } from './app-landing/app-landing.component';
-const isLazy = window.location.href.includes('lazy');
-
-const imports = [
- BrowserModule.withServerTransition({ appId: 'serverApp' }),
- AppRoutingModule,
-];
+const isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';
-if (isLazy) {
- imports.push(IonicModule.forRoot({ keyboardHeight: 12345 }));
+export function ionicConfigFactory(): any {
+ const isLazy = isBrowser && window.location.href.includes('lazy');
+ return isLazy ? { keyboardHeight: 12345 } : {};
}
@NgModule({
- declarations: [
- AppComponent,
+ declarations: [AppComponent, AppLandingComponent],
+ imports: [
+ BrowserModule,
+ AppRoutingModule,
+ IonicModule.forRoot(ionicConfigFactory()),
],
- imports,
providers: [
{ provide: RouteReuseStrategy, useClass: IonicRouteStrategy },
+ { provide: APP_ID, useValue: 'serverApp' },
],
- bootstrap: [AppComponent]
+ bootstrap: [AppComponent],
})
-export class AppModule { }
+export class AppModule {}
diff --git a/packages/angular/test/base/src/app/app.routes.ts b/packages/angular/test/base/src/app/app.routes.ts
index 679d1812259..291e96540de 100644
--- a/packages/angular/test/base/src/app/app.routes.ts
+++ b/packages/angular/test/base/src/app/app.routes.ts
@@ -1,16 +1,18 @@
import { Routes } from '@angular/router';
+import { AppLandingComponent } from './app-landing/app-landing.component';
export const routes: Routes = [
{
path: '',
pathMatch: 'full',
- /**
- * Omit the slash at the beginning
- * so query params are preserved.
- * https://github.com/angular/angular/issues/13315#issuecomment-427254639
- */
- redirectTo: 'lazy'
+ component: AppLandingComponent
},
- { path: 'lazy', loadChildren: () => import('./lazy/app-lazy/app.module').then(m => m.AppModule) },
- { path: 'standalone', loadChildren: () => import('./standalone/app-standalone/app.routes').then(m => m.routes) }
+ {
+ path: 'lazy',
+ loadChildren: () => import('./lazy/app-lazy/app.module').then(m => m.AppModule)
+ },
+ {
+ path: 'standalone',
+ loadChildren: () => import('./standalone/app-standalone/app.routes').then(m => m.routes)
+ }
];
diff --git a/packages/angular/test/base/src/app/lazy/home-page/home-page.component.html b/packages/angular/test/base/src/app/lazy/home-page/home-page.component.html
index 7fdca9c50d8..80418148c5e 100644
--- a/packages/angular/test/base/src/app/lazy/home-page/home-page.component.html
+++ b/packages/angular/test/base/src/app/lazy/home-page/home-page.component.html
@@ -1,7 +1,10 @@
+
+
+
- Test App - Angular {{ angularVersion.major }}
+ Test App - Angular {{ angularVersion.major }} - Lazy
@@ -9,37 +12,37 @@
- Alerts test
+ Alerts Test
- Inputs test
+ Inputs Test
- Form test
+ Form Test
- Modals test
+ Modals Test
- Router link test
+ Router link Test
- Tabs test
+ Tabs Test
- Basic Tabs test
+ Basic Tabs Test
diff --git a/packages/angular/test/base/src/app/standalone/app-standalone/app.component.ts b/packages/angular/test/base/src/app/standalone/app-standalone/app.component.ts
index d51d38c860b..7940f8d10e1 100644
--- a/packages/angular/test/base/src/app/standalone/app-standalone/app.component.ts
+++ b/packages/angular/test/base/src/app/standalone/app-standalone/app.component.ts
@@ -1,12 +1,11 @@
import { Component } from '@angular/core';
-import { RouterModule } from '@angular/router';
-import { IonRouterOutlet, IonApp } from '@ionic/angular/standalone';
+import { IonApp, IonRouterOutlet } from '@ionic/angular/standalone';
@Component({
selector: 'app-root-standalone',
templateUrl: './app.component.html',
standalone: true,
- imports: [RouterModule, IonRouterOutlet, IonApp]
+ imports: [IonRouterOutlet, IonApp]
})
export class AppComponent {
}
diff --git a/packages/angular/test/base/src/app/standalone/app-standalone/app.routes.ts b/packages/angular/test/base/src/app/standalone/app-standalone/app.routes.ts
index 40afc7a68de..c58432e0e9d 100644
--- a/packages/angular/test/base/src/app/standalone/app-standalone/app.routes.ts
+++ b/packages/angular/test/base/src/app/standalone/app-standalone/app.routes.ts
@@ -6,6 +6,7 @@ export const routes: Routes = [
path: '',
component: AppComponent,
children: [
+ { path: '', loadComponent: () => import('../home-page/home-page.component').then(c => c.HomePageComponent) },
{ path: 'menu-controller', loadComponent: () => import('../menu-controller/menu-controller.component').then(c => c.MenuControllerComponent) },
{ path: 'action-sheet-controller', loadComponent: () => import('../action-sheet-controller/action-sheet-controller.component').then(c => c.ActionSheetControllerComponent) },
{ path: 'popover', loadComponent: () => import('../popover/popover.component').then(c => c.PopoverComponent) },
@@ -18,6 +19,14 @@ export const routes: Routes = [
{ path: 'overlay-controllers', loadComponent: () => import('../overlay-controllers/overlay-controllers.component').then(c => c.OverlayControllersComponent) },
{ path: 'button', loadComponent: () => import('../button/button.component').then(c => c.ButtonComponent) },
{ path: 'icon', loadComponent: () => import('../icon/icon.component').then(c => c.IconComponent) },
+ { path: 'split-pane', redirectTo: '/standalone/split-pane/inbox', pathMatch: 'full' },
+ {
+ path: 'split-pane',
+ loadComponent: () => import('../split-pane/split-pane.component').then(c => c.SplitPaneComponent),
+ children: [
+ { path: ':id', loadComponent: () => import('../split-pane/split-pane-page.component').then(c => c.SplitPanePageComponent) },
+ ]
+ },
{ path: 'tabs', redirectTo: '/standalone/tabs/tab-one', pathMatch: 'full' },
{
path: 'tabs',
diff --git a/packages/angular/test/base/src/app/standalone/home-page/home-page.component.html b/packages/angular/test/base/src/app/standalone/home-page/home-page.component.html
new file mode 100644
index 00000000000..af57a62512c
--- /dev/null
+++ b/packages/angular/test/base/src/app/standalone/home-page/home-page.component.html
@@ -0,0 +1,166 @@
+
+
+
+
+
+
+ Test App - Angular {{ angularVersion.major }} - Standalone
+
+
+
+
+
+
+ Components
+
+
+
+ Back Button Test
+
+
+
+
+ Button Test
+
+
+
+
+ Icon Test
+
+
+
+
+
+
+ Navigation
+
+
+
+ Nav Test
+
+
+
+
+ Router Link Test
+
+
+
+
+ Router Outlet Test
+
+
+
+
+ Split Pane Test
+
+
+
+
+ Tabs Test
+
+
+
+
+ Tabs Basic Test
+
+
+
+
+
+
+ Overlays
+
+
+
+ Action Sheet Controller Test
+
+
+
+
+ Menu Controller Test
+
+
+
+
+ Modal Test
+
+
+
+
+ Overlay Controllers Test
+
+
+
+
+ Popover Test
+
+
+
+
+
+
+ Value Accessors
+
+
+
+ Checkbox Test
+
+
+
+
+ Datetime Test
+
+
+
+
+ Input Test
+
+
+
+
+ Radio Group Test
+
+
+
+
+ Range Test
+
+
+
+
+ Searchbar Test
+
+
+
+
+ Segment Test
+
+
+
+
+ Select Test
+
+
+
+
+ Textarea Test
+
+
+
+
+ Toggle Test
+
+
+
+
+
+
+ Miscellaneous
+
+
+
+ Providers Test
+
+
+
+
diff --git a/packages/angular/test/base/src/app/standalone/home-page/home-page.component.ts b/packages/angular/test/base/src/app/standalone/home-page/home-page.component.ts
new file mode 100644
index 00000000000..dc2d78e6ab9
--- /dev/null
+++ b/packages/angular/test/base/src/app/standalone/home-page/home-page.component.ts
@@ -0,0 +1,15 @@
+import { Component, VERSION } from '@angular/core';
+import { RouterModule } from '@angular/router';
+import { IonBackButton, IonButtons, IonContent, IonLabel, IonList, IonListHeader, IonHeader, IonItem, IonRouterLink, IonTitle, IonToolbar } from '@ionic/angular/standalone';
+
+@Component({
+ selector: 'app-home-page',
+ templateUrl: './home-page.component.html',
+ standalone: true,
+ imports: [ IonBackButton, IonButtons, IonContent, IonLabel, IonList, IonHeader, IonListHeader, IonItem, IonRouterLink, IonTitle, IonToolbar, RouterModule ]
+})
+export class HomePageComponent {
+ angularVersion = VERSION;
+
+ constructor() {}
+}
diff --git a/packages/angular/test/base/src/app/standalone/router-link/router-link.component.ts b/packages/angular/test/base/src/app/standalone/router-link/router-link.component.ts
index 4e0e1bcff3c..31653f3bb0d 100644
--- a/packages/angular/test/base/src/app/standalone/router-link/router-link.component.ts
+++ b/packages/angular/test/base/src/app/standalone/router-link/router-link.component.ts
@@ -1,11 +1,11 @@
import { Component } from '@angular/core';
-import { RouterModule } from '@angular/router';
+import { RouterLink } from '@angular/router';
import { IonRouterLink, IonRouterLinkWithHref } from '@ionic/angular/standalone';
@Component({
selector: 'app-router-link',
templateUrl: './router-link.component.html',
standalone: true,
- imports: [RouterModule, IonRouterLink, IonRouterLinkWithHref],
+ imports: [RouterLink, IonRouterLink, IonRouterLinkWithHref],
})
export class RouterLinkComponent {}
diff --git a/packages/angular/test/base/src/app/standalone/split-pane/split-pane-page.component.html b/packages/angular/test/base/src/app/standalone/split-pane/split-pane-page.component.html
new file mode 100644
index 00000000000..3d03206fee4
--- /dev/null
+++ b/packages/angular/test/base/src/app/standalone/split-pane/split-pane-page.component.html
@@ -0,0 +1,23 @@
+
+
+
+
+
+ {{ folder }}
+
+
+
+
+
+
+ {{ folder }}
+
+
+
+
+ Button One
+ Button Two
+ Button Three
+ Button Four
+
+
diff --git a/packages/angular/test/base/src/app/standalone/split-pane/split-pane-page.component.ts b/packages/angular/test/base/src/app/standalone/split-pane/split-pane-page.component.ts
new file mode 100644
index 00000000000..d913c6a3b64
--- /dev/null
+++ b/packages/angular/test/base/src/app/standalone/split-pane/split-pane-page.component.ts
@@ -0,0 +1,24 @@
+import { Component, inject, OnInit } from '@angular/core';
+import { ActivatedRoute } from '@angular/router';
+import { IonButton, IonButtons, IonContent, IonHeader, IonMenuButton, IonTitle, IonToolbar } from '@ionic/angular/standalone';
+
+@Component({
+ selector: 'app-split-pane-page',
+ templateUrl: './split-pane-page.component.html',
+ imports: [ IonButton, IonButtons, IonContent, IonHeader, IonMenuButton, IonTitle, IonToolbar ],
+ standalone: true,
+})
+export class SplitPanePageComponent implements OnInit {
+ public folder!: string;
+ private activatedRoute = inject(ActivatedRoute);
+
+ constructor() {}
+
+ ngOnInit() {
+ this.folder = this.activatedRoute.snapshot.paramMap.get('id') as string;
+ }
+
+ onClick(val: string) {
+ console.log(val);
+ }
+}
diff --git a/packages/angular/test/base/src/app/standalone/split-pane/split-pane.component.css b/packages/angular/test/base/src/app/standalone/split-pane/split-pane.component.css
new file mode 100644
index 00000000000..f91c443385e
--- /dev/null
+++ b/packages/angular/test/base/src/app/standalone/split-pane/split-pane.component.css
@@ -0,0 +1,3 @@
+ion-item.selected {
+ --background: rgb(var(--ion-color-primary-rgb, 0, 84, 233), 0.14);
+}
diff --git a/packages/angular/test/base/src/app/standalone/split-pane/split-pane.component.html b/packages/angular/test/base/src/app/standalone/split-pane/split-pane.component.html
new file mode 100644
index 00000000000..89a192dc6e3
--- /dev/null
+++ b/packages/angular/test/base/src/app/standalone/split-pane/split-pane.component.html
@@ -0,0 +1,22 @@
+
+
+
+
+ Inbox
+
+
+
+ {{ p.title }}
+
+
+
+
+
+
+
diff --git a/packages/angular/test/base/src/app/standalone/split-pane/split-pane.component.ts b/packages/angular/test/base/src/app/standalone/split-pane/split-pane.component.ts
new file mode 100644
index 00000000000..747e28d75f5
--- /dev/null
+++ b/packages/angular/test/base/src/app/standalone/split-pane/split-pane.component.ts
@@ -0,0 +1,49 @@
+import { CommonModule } from '@angular/common';
+import { Component } from '@angular/core';
+import { RouterLink, RouterLinkActive } from '@angular/router';
+import {
+ IonContent,
+ IonItem,
+ IonLabel,
+ IonList,
+ IonListHeader,
+ IonMenu,
+ IonMenuToggle,
+ IonRouterLink,
+ IonRouterOutlet,
+ IonSplitPane
+} from '@ionic/angular/standalone';
+
+@Component({
+ selector: 'app-split-pane',
+ templateUrl: 'split-pane.component.html',
+ styleUrls: ['split-pane.component.css'],
+ standalone: true,
+ imports: [
+ CommonModule,
+ IonContent,
+ IonItem,
+ IonLabel,
+ IonList,
+ IonListHeader,
+ IonMenu,
+ IonMenuToggle,
+ IonRouterLink,
+ IonRouterOutlet,
+ IonSplitPane,
+ RouterLink,
+ RouterLinkActive,
+ ],
+})
+export class SplitPaneComponent {
+ public appPages = [
+ { title: 'Inbox', url: '/standalone/split-pane/inbox' },
+ { title: 'Outbox', url: '/standalone/split-pane/outbox' },
+ { title: 'Favorites', url: '/standalone/split-pane/favorites' },
+ { title: 'Archived', url: '/standalone/split-pane/archived' },
+ { title: 'Trash', url: '/standalone/split-pane/trash' },
+ { title: 'Spam', url: '/standalone/split-pane/spam'}
+ ];
+
+ constructor() { }
+}
diff --git a/packages/angular/test/base/src/app/standalone/standalone.component.ts b/packages/angular/test/base/src/app/standalone/standalone.component.ts
index 56f6f8a92b0..9b707ade839 100644
--- a/packages/angular/test/base/src/app/standalone/standalone.component.ts
+++ b/packages/angular/test/base/src/app/standalone/standalone.component.ts
@@ -1,5 +1,4 @@
import { Component } from "@angular/core";
-import { RouterModule } from "@angular/router";
import { IonicModule } from '@ionic/angular';
@@ -7,6 +6,6 @@ import { IonicModule } from '@ionic/angular';
selector: 'app-standalone',
templateUrl: './standalone.component.html',
standalone: true,
- imports: [IonicModule, RouterModule]
+ imports: [IonicModule]
})
export class StandaloneComponent { }
diff --git a/packages/docs/CHANGELOG.md b/packages/docs/CHANGELOG.md
index abf78b68eb8..a13b889de90 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.5.2](https://github.com/ionic-team/ionic-framework/compare/v8.5.1...v8.5.2) (2025-03-26)
+
+**Note:** Version bump only for package @ionic/docs
+
+
+
+
+
## [8.5.1](https://github.com/ionic-team/ionic-framework/compare/v8.5.0...v8.5.1) (2025-03-19)
**Note:** Version bump only for package @ionic/docs
diff --git a/packages/docs/package-lock.json b/packages/docs/package-lock.json
index d753d3f0c24..00f58e23541 100644
--- a/packages/docs/package-lock.json
+++ b/packages/docs/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "@ionic/docs",
- "version": "8.5.1",
+ "version": "8.5.2",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "@ionic/docs",
- "version": "8.5.1",
+ "version": "8.5.2",
"license": "MIT"
}
}
diff --git a/packages/docs/package.json b/packages/docs/package.json
index 6b7e6db698a..ad6c1484bee 100644
--- a/packages/docs/package.json
+++ b/packages/docs/package.json
@@ -1,6 +1,6 @@
{
"name": "@ionic/docs",
- "version": "8.5.1",
+ "version": "8.5.2",
"description": "Pre-packaged API documentation for the Ionic docs.",
"main": "core.json",
"types": "core.d.ts",
diff --git a/packages/react-router/CHANGELOG.md b/packages/react-router/CHANGELOG.md
index 5d389fd1e5d..03237b6be35 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.5.2](https://github.com/ionic-team/ionic-framework/compare/v8.5.1...v8.5.2) (2025-03-26)
+
+**Note:** Version bump only for package @ionic/react-router
+
+
+
+
+
## [8.5.1](https://github.com/ionic-team/ionic-framework/compare/v8.5.0...v8.5.1) (2025-03-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 cfe240a607a..225b2af912c 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.5.1",
+ "version": "8.5.2",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "@ionic/react-router",
- "version": "8.5.1",
+ "version": "8.5.2",
"license": "MIT",
"dependencies": {
- "@ionic/react": "^8.5.1",
+ "@ionic/react": "^8.5.2",
"tslib": "*"
},
"devDependencies": {
@@ -238,9 +238,9 @@
"dev": true
},
"node_modules/@ionic/core": {
- "version": "8.5.1",
- "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.5.1.tgz",
- "integrity": "sha512-XsI1ImfgO87EdNucfmKESPN4djLyclNTwzU2AY7xSzSonKjTAft6qrK1/qU2ys829bmbM7/4+tHFb0UOnt3uHQ==",
+ "version": "8.5.2",
+ "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.5.2.tgz",
+ "integrity": "sha512-XTiZqyLv2gzPzU4l4EvegHc2nDv5TniVU102MAxT739Lw0tFywZV9R1bv590z7Ue7w43ndwGdnfLuOuBksSeRA==",
"license": "MIT",
"dependencies": {
"@stencil/core": "4.20.0",
@@ -415,12 +415,12 @@
}
},
"node_modules/@ionic/react": {
- "version": "8.5.1",
- "resolved": "https://registry.npmjs.org/@ionic/react/-/react-8.5.1.tgz",
- "integrity": "sha512-Z/kW91gUhs2f378jFoOic29RfDMIYi1PD1hfZtMGEAjSlFNQxBCeihz3kvdnn1WVfcuGb3CKanHF4DeKc11f8Q==",
+ "version": "8.5.2",
+ "resolved": "https://registry.npmjs.org/@ionic/react/-/react-8.5.2.tgz",
+ "integrity": "sha512-JU/v/wNixODaDFTSf4cM3R12nzstZGfRgat/DTesOLtjSb0Wgp36YM0xAk1Nsu9iHrL1OJA9mnJGOc4g2lwnLA==",
"license": "MIT",
"dependencies": {
- "@ionic/core": "8.5.1",
+ "@ionic/core": "8.5.2",
"ionicons": "^7.0.0",
"tslib": "*"
},
@@ -4067,9 +4067,9 @@
"dev": true
},
"@ionic/core": {
- "version": "8.5.1",
- "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.5.1.tgz",
- "integrity": "sha512-XsI1ImfgO87EdNucfmKESPN4djLyclNTwzU2AY7xSzSonKjTAft6qrK1/qU2ys829bmbM7/4+tHFb0UOnt3uHQ==",
+ "version": "8.5.2",
+ "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.5.2.tgz",
+ "integrity": "sha512-XTiZqyLv2gzPzU4l4EvegHc2nDv5TniVU102MAxT739Lw0tFywZV9R1bv590z7Ue7w43ndwGdnfLuOuBksSeRA==",
"requires": {
"@stencil/core": "4.20.0",
"ionicons": "^7.2.2",
@@ -4172,11 +4172,11 @@
"dev": true
},
"@ionic/react": {
- "version": "8.5.1",
- "resolved": "https://registry.npmjs.org/@ionic/react/-/react-8.5.1.tgz",
- "integrity": "sha512-Z/kW91gUhs2f378jFoOic29RfDMIYi1PD1hfZtMGEAjSlFNQxBCeihz3kvdnn1WVfcuGb3CKanHF4DeKc11f8Q==",
+ "version": "8.5.2",
+ "resolved": "https://registry.npmjs.org/@ionic/react/-/react-8.5.2.tgz",
+ "integrity": "sha512-JU/v/wNixODaDFTSf4cM3R12nzstZGfRgat/DTesOLtjSb0Wgp36YM0xAk1Nsu9iHrL1OJA9mnJGOc4g2lwnLA==",
"requires": {
- "@ionic/core": "8.5.1",
+ "@ionic/core": "8.5.2",
"ionicons": "^7.0.0",
"tslib": "*"
}
diff --git a/packages/react-router/package.json b/packages/react-router/package.json
index 60cb0bed464..96d8730634e 100644
--- a/packages/react-router/package.json
+++ b/packages/react-router/package.json
@@ -1,6 +1,6 @@
{
"name": "@ionic/react-router",
- "version": "8.5.1",
+ "version": "8.5.2",
"description": "React Router wrapper for @ionic/react",
"keywords": [
"ionic",
@@ -36,7 +36,7 @@
"dist/"
],
"dependencies": {
- "@ionic/react": "^8.5.1",
+ "@ionic/react": "^8.5.2",
"tslib": "*"
},
"peerDependencies": {
diff --git a/packages/react/CHANGELOG.md b/packages/react/CHANGELOG.md
index 62707e39fca..d114ed2efab 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.5.2](https://github.com/ionic-team/ionic-framework/compare/v8.5.1...v8.5.2) (2025-03-26)
+
+**Note:** Version bump only for package @ionic/react
+
+
+
+
+
## [8.5.1](https://github.com/ionic-team/ionic-framework/compare/v8.5.0...v8.5.1) (2025-03-19)
**Note:** Version bump only for package @ionic/react
diff --git a/packages/react/package-lock.json b/packages/react/package-lock.json
index 1003a231331..59119b75c75 100644
--- a/packages/react/package-lock.json
+++ b/packages/react/package-lock.json
@@ -1,15 +1,15 @@
{
"name": "@ionic/react",
- "version": "8.5.1",
+ "version": "8.5.2",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "@ionic/react",
- "version": "8.5.1",
+ "version": "8.5.2",
"license": "MIT",
"dependencies": {
- "@ionic/core": "^8.5.1",
+ "@ionic/core": "^8.5.2",
"ionicons": "^7.0.0",
"tslib": "*"
},
@@ -736,9 +736,9 @@
"dev": true
},
"node_modules/@ionic/core": {
- "version": "8.5.1",
- "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.5.1.tgz",
- "integrity": "sha512-XsI1ImfgO87EdNucfmKESPN4djLyclNTwzU2AY7xSzSonKjTAft6qrK1/qU2ys829bmbM7/4+tHFb0UOnt3uHQ==",
+ "version": "8.5.2",
+ "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.5.2.tgz",
+ "integrity": "sha512-XTiZqyLv2gzPzU4l4EvegHc2nDv5TniVU102MAxT739Lw0tFywZV9R1bv590z7Ue7w43ndwGdnfLuOuBksSeRA==",
"license": "MIT",
"dependencies": {
"@stencil/core": "4.20.0",
@@ -12316,9 +12316,9 @@
"dev": true
},
"@ionic/core": {
- "version": "8.5.1",
- "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.5.1.tgz",
- "integrity": "sha512-XsI1ImfgO87EdNucfmKESPN4djLyclNTwzU2AY7xSzSonKjTAft6qrK1/qU2ys829bmbM7/4+tHFb0UOnt3uHQ==",
+ "version": "8.5.2",
+ "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.5.2.tgz",
+ "integrity": "sha512-XTiZqyLv2gzPzU4l4EvegHc2nDv5TniVU102MAxT739Lw0tFywZV9R1bv590z7Ue7w43ndwGdnfLuOuBksSeRA==",
"requires": {
"@stencil/core": "4.20.0",
"ionicons": "^7.2.2",
diff --git a/packages/react/package.json b/packages/react/package.json
index c40d2f4399b..2d26b855f76 100644
--- a/packages/react/package.json
+++ b/packages/react/package.json
@@ -1,6 +1,6 @@
{
"name": "@ionic/react",
- "version": "8.5.1",
+ "version": "8.5.2",
"description": "React specific wrapper for @ionic/core",
"keywords": [
"ionic",
@@ -39,7 +39,7 @@
"css/"
],
"dependencies": {
- "@ionic/core": "^8.5.1",
+ "@ionic/core": "^8.5.2",
"ionicons": "^7.0.0",
"tslib": "*"
},
diff --git a/packages/vue-router/CHANGELOG.md b/packages/vue-router/CHANGELOG.md
index 671456d5b00..b3a448136c1 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.5.2](https://github.com/ionic-team/ionic-framework/compare/v8.5.1...v8.5.2) (2025-03-26)
+
+**Note:** Version bump only for package @ionic/vue-router
+
+
+
+
+
## [8.5.1](https://github.com/ionic-team/ionic-framework/compare/v8.5.0...v8.5.1) (2025-03-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 ef70086cefe..9faab53c286 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.5.1",
+ "version": "8.5.2",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "@ionic/vue-router",
- "version": "8.5.1",
+ "version": "8.5.2",
"license": "MIT",
"dependencies": {
- "@ionic/vue": "^8.5.1"
+ "@ionic/vue": "^8.5.2"
},
"devDependencies": {
"@ionic/eslint-config": "^0.3.0",
@@ -243,6 +243,7 @@
"version": "7.25.9",
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz",
"integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
@@ -252,6 +253,7 @@
"version": "7.25.9",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
"integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
@@ -369,6 +371,7 @@
"version": "7.26.10",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.10.tgz",
"integrity": "sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@babel/types": "^7.26.10"
@@ -581,6 +584,7 @@
"version": "7.26.10",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.10.tgz",
"integrity": "sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-string-parser": "^7.25.9",
@@ -673,9 +677,9 @@
"dev": true
},
"node_modules/@ionic/core": {
- "version": "8.5.1",
- "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.5.1.tgz",
- "integrity": "sha512-XsI1ImfgO87EdNucfmKESPN4djLyclNTwzU2AY7xSzSonKjTAft6qrK1/qU2ys829bmbM7/4+tHFb0UOnt3uHQ==",
+ "version": "8.5.2",
+ "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.5.2.tgz",
+ "integrity": "sha512-XTiZqyLv2gzPzU4l4EvegHc2nDv5TniVU102MAxT739Lw0tFywZV9R1bv590z7Ue7w43ndwGdnfLuOuBksSeRA==",
"license": "MIT",
"dependencies": {
"@stencil/core": "4.20.0",
@@ -865,12 +869,12 @@
}
},
"node_modules/@ionic/vue": {
- "version": "8.5.1",
- "resolved": "https://registry.npmjs.org/@ionic/vue/-/vue-8.5.1.tgz",
- "integrity": "sha512-pE4xBb85xkHKrM24Opi0FWnsjwvbpxf7062ZU8dQIArZVOwvwnX69OIbyR8tYZ49DWqhDzfRWdBXTmr30sMb5A==",
+ "version": "8.5.2",
+ "resolved": "https://registry.npmjs.org/@ionic/vue/-/vue-8.5.2.tgz",
+ "integrity": "sha512-LnhYkgkd6VKXh+nMQ1yFlG/lecU7014ZpniHauCl03w41BI5O87xdJ/7igcQJDTUH3n/s2inSGo9r7LR+eHLKQ==",
"license": "MIT",
"dependencies": {
- "@ionic/core": "8.5.1",
+ "@ionic/core": "8.5.2",
"@stencil/vue-output-target": "0.10.7",
"ionicons": "^7.0.0"
}
@@ -1247,6 +1251,7 @@
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
"integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
+ "dev": true,
"license": "MIT"
},
"node_modules/@jridgewell/trace-mapping": {
@@ -2089,6 +2094,7 @@
"version": "3.5.13",
"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.13.tgz",
"integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@babel/parser": "^7.25.3",
@@ -2102,6 +2108,7 @@
"version": "3.5.13",
"resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz",
"integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@vue/compiler-core": "3.5.13",
@@ -2112,6 +2119,7 @@
"version": "3.5.13",
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz",
"integrity": "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@babel/parser": "^7.25.3",
@@ -2129,6 +2137,7 @@
"version": "3.5.13",
"resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz",
"integrity": "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@vue/compiler-dom": "3.5.13",
@@ -2139,13 +2148,14 @@
"version": "6.6.4",
"resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz",
"integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==",
- "devOptional": true,
+ "dev": true,
"license": "MIT"
},
"node_modules/@vue/reactivity": {
"version": "3.5.13",
"resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.13.tgz",
"integrity": "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@vue/shared": "3.5.13"
@@ -2155,6 +2165,7 @@
"version": "3.5.13",
"resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.13.tgz",
"integrity": "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@vue/reactivity": "3.5.13",
@@ -2165,6 +2176,7 @@
"version": "3.5.13",
"resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz",
"integrity": "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@vue/reactivity": "3.5.13",
@@ -2177,6 +2189,7 @@
"version": "3.5.13",
"resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.13.tgz",
"integrity": "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@vue/compiler-ssr": "3.5.13",
@@ -2190,6 +2203,7 @@
"version": "3.5.13",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz",
"integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==",
+ "dev": true,
"license": "MIT"
},
"node_modules/abab": {
@@ -2812,6 +2826,7 @@
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
+ "dev": true,
"license": "MIT"
},
"node_modules/data-urls": {
@@ -3004,6 +3019,7 @@
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+ "dev": true,
"license": "BSD-2-Clause",
"engines": {
"node": ">=0.12"
@@ -3614,7 +3630,8 @@
"node_modules/estree-walker": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
- "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+ "dev": true
},
"node_modules/esutils": {
"version": "2.0.3",
@@ -5767,6 +5784,7 @@
"version": "0.30.17",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz",
"integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/sourcemap-codec": "^1.5.0"
@@ -5890,6 +5908,7 @@
"version": "3.3.9",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.9.tgz",
"integrity": "sha512-SppoicMGpZvbF1l3z4x7No3OlIjP7QJvC9XR7AhZr1kL133KHnKPztkKDc+Ir4aJ/1VhTySrtKhrsycmrMQfvg==",
+ "dev": true,
"funding": [
{
"type": "github",
@@ -6165,6 +6184,7 @@
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
"integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "dev": true,
"license": "ISC"
},
"node_modules/picomatch": {
@@ -6204,6 +6224,7 @@
"version": "8.5.3",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz",
"integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==",
+ "dev": true,
"funding": [
{
"type": "opencollective",
@@ -6642,6 +6663,7 @@
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
"integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+ "dev": true,
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
@@ -7099,7 +7121,7 @@
"version": "4.7.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.3.tgz",
"integrity": "sha512-WOkT3XYvrpXx4vMMqlD+8R8R37fZkjyLGlxavMc4iB8lrl8L0DeTcHbYgw/v0N/z9wAFsgBhcsF0ruoySS22mA==",
- "devOptional": true,
+ "dev": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -7165,6 +7187,7 @@
"version": "3.5.13",
"resolved": "https://registry.npmjs.org/vue/-/vue-3.5.13.tgz",
"integrity": "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@vue/compiler-dom": "3.5.13",
@@ -7186,7 +7209,7 @@
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.5.0.tgz",
"integrity": "sha512-HDuk+PuH5monfNuY+ct49mNmkCRK4xJAV9Ts4z9UFc4rzdDnxQLyCMGGc8pKhZhHTVzfanpNwB/lwqevcBwI4w==",
- "devOptional": true,
+ "dev": true,
"license": "MIT",
"dependencies": {
"@vue/devtools-api": "^6.6.4"
@@ -7607,12 +7630,14 @@
"@babel/helper-string-parser": {
"version": "7.25.9",
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz",
- "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA=="
+ "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==",
+ "dev": true
},
"@babel/helper-validator-identifier": {
"version": "7.25.9",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
- "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="
+ "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
+ "dev": true
},
"@babel/helper-validator-option": {
"version": "7.16.7",
@@ -7704,6 +7729,7 @@
"version": "7.26.10",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.10.tgz",
"integrity": "sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==",
+ "dev": true,
"requires": {
"@babel/types": "^7.26.10"
}
@@ -7858,6 +7884,7 @@
"version": "7.26.10",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.10.tgz",
"integrity": "sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==",
+ "dev": true,
"requires": {
"@babel/helper-string-parser": "^7.25.9",
"@babel/helper-validator-identifier": "^7.25.9"
@@ -7927,9 +7954,9 @@
"dev": true
},
"@ionic/core": {
- "version": "8.5.1",
- "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.5.1.tgz",
- "integrity": "sha512-XsI1ImfgO87EdNucfmKESPN4djLyclNTwzU2AY7xSzSonKjTAft6qrK1/qU2ys829bmbM7/4+tHFb0UOnt3uHQ==",
+ "version": "8.5.2",
+ "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.5.2.tgz",
+ "integrity": "sha512-XTiZqyLv2gzPzU4l4EvegHc2nDv5TniVU102MAxT739Lw0tFywZV9R1bv590z7Ue7w43ndwGdnfLuOuBksSeRA==",
"requires": {
"@stencil/core": "4.20.0",
"ionicons": "^7.2.2",
@@ -8038,15 +8065,14 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@ionic/prettier-config/-/prettier-config-2.0.0.tgz",
"integrity": "sha512-ageMx54B9qqS1scnFW3kQW2NW8HyXwUM/p9c1YSWFKr6Yct7YVNbJFY3EcFapaNTiDnwo+GLlPRt+wST6E8AfA==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"@ionic/vue": {
- "version": "8.5.1",
- "resolved": "https://registry.npmjs.org/@ionic/vue/-/vue-8.5.1.tgz",
- "integrity": "sha512-pE4xBb85xkHKrM24Opi0FWnsjwvbpxf7062ZU8dQIArZVOwvwnX69OIbyR8tYZ49DWqhDzfRWdBXTmr30sMb5A==",
+ "version": "8.5.2",
+ "resolved": "https://registry.npmjs.org/@ionic/vue/-/vue-8.5.2.tgz",
+ "integrity": "sha512-LnhYkgkd6VKXh+nMQ1yFlG/lecU7014ZpniHauCl03w41BI5O87xdJ/7igcQJDTUH3n/s2inSGo9r7LR+eHLKQ==",
"requires": {
- "@ionic/core": "8.5.1",
+ "@ionic/core": "8.5.2",
"@stencil/vue-output-target": "0.10.7",
"ionicons": "^7.0.0"
}
@@ -8342,7 +8368,8 @@
"@jridgewell/sourcemap-codec": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
- "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="
+ "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
+ "dev": true
},
"@jridgewell/trace-mapping": {
"version": "0.3.13",
@@ -8517,8 +8544,7 @@
"@stencil/vue-output-target": {
"version": "0.10.7",
"resolved": "https://registry.npmjs.org/@stencil/vue-output-target/-/vue-output-target-0.10.7.tgz",
- "integrity": "sha512-IYxDe+SLCkwhwsWRdynE31rTK1zN3hVwwojQ/V9lrN8Gnx4PTvrUQHiRno9jFo1dk+EaBZWX9gZSmXta0ZaZew==",
- "requires": {}
+ "integrity": "sha512-IYxDe+SLCkwhwsWRdynE31rTK1zN3hVwwojQ/V9lrN8Gnx4PTvrUQHiRno9jFo1dk+EaBZWX9gZSmXta0ZaZew=="
},
"@tootallnate/once": {
"version": "2.0.0",
@@ -8893,6 +8919,7 @@
"version": "3.5.13",
"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.13.tgz",
"integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==",
+ "dev": true,
"requires": {
"@babel/parser": "^7.25.3",
"@vue/shared": "3.5.13",
@@ -8905,6 +8932,7 @@
"version": "3.5.13",
"resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz",
"integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==",
+ "dev": true,
"requires": {
"@vue/compiler-core": "3.5.13",
"@vue/shared": "3.5.13"
@@ -8914,6 +8942,7 @@
"version": "3.5.13",
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz",
"integrity": "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==",
+ "dev": true,
"requires": {
"@babel/parser": "^7.25.3",
"@vue/compiler-core": "3.5.13",
@@ -8930,6 +8959,7 @@
"version": "3.5.13",
"resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz",
"integrity": "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==",
+ "dev": true,
"requires": {
"@vue/compiler-dom": "3.5.13",
"@vue/shared": "3.5.13"
@@ -8939,12 +8969,13 @@
"version": "6.6.4",
"resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz",
"integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==",
- "devOptional": true
+ "dev": true
},
"@vue/reactivity": {
"version": "3.5.13",
"resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.13.tgz",
"integrity": "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==",
+ "dev": true,
"requires": {
"@vue/shared": "3.5.13"
}
@@ -8953,6 +8984,7 @@
"version": "3.5.13",
"resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.13.tgz",
"integrity": "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==",
+ "dev": true,
"requires": {
"@vue/reactivity": "3.5.13",
"@vue/shared": "3.5.13"
@@ -8962,6 +8994,7 @@
"version": "3.5.13",
"resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz",
"integrity": "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==",
+ "dev": true,
"requires": {
"@vue/reactivity": "3.5.13",
"@vue/runtime-core": "3.5.13",
@@ -8973,6 +9006,7 @@
"version": "3.5.13",
"resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.13.tgz",
"integrity": "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==",
+ "dev": true,
"requires": {
"@vue/compiler-ssr": "3.5.13",
"@vue/shared": "3.5.13"
@@ -8981,7 +9015,8 @@
"@vue/shared": {
"version": "3.5.13",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz",
- "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ=="
+ "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==",
+ "dev": true
},
"abab": {
"version": "2.0.6",
@@ -9017,8 +9052,7 @@
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
"integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"acorn-walk": {
"version": "7.2.0",
@@ -9437,7 +9471,8 @@
"csstype": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
- "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
+ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
+ "dev": true
},
"data-urls": {
"version": "3.0.2",
@@ -9580,7 +9615,8 @@
"entities": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
- "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+ "dev": true
},
"error-ex": {
"version": "1.3.2",
@@ -10038,7 +10074,8 @@
"estree-walker": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
- "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+ "dev": true
},
"esutils": {
"version": "2.0.3",
@@ -11223,8 +11260,7 @@
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz",
"integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"jest-regex-util": {
"version": "28.0.2",
@@ -11641,6 +11677,7 @@
"version": "0.30.17",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz",
"integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==",
+ "dev": true,
"requires": {
"@jridgewell/sourcemap-codec": "^1.5.0"
}
@@ -11734,7 +11771,8 @@
"nanoid": {
"version": "3.3.9",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.9.tgz",
- "integrity": "sha512-SppoicMGpZvbF1l3z4x7No3OlIjP7QJvC9XR7AhZr1kL133KHnKPztkKDc+Ir4aJ/1VhTySrtKhrsycmrMQfvg=="
+ "integrity": "sha512-SppoicMGpZvbF1l3z4x7No3OlIjP7QJvC9XR7AhZr1kL133KHnKPztkKDc+Ir4aJ/1VhTySrtKhrsycmrMQfvg==",
+ "dev": true
},
"natural-compare": {
"version": "1.4.0",
@@ -11928,7 +11966,8 @@
"picocolors": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
- "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "dev": true
},
"picomatch": {
"version": "2.3.1",
@@ -11955,6 +11994,7 @@
"version": "8.5.3",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz",
"integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==",
+ "dev": true,
"requires": {
"nanoid": "^3.3.8",
"picocolors": "^1.1.1",
@@ -12236,7 +12276,8 @@
"source-map-js": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
- "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+ "dev": true
},
"source-map-support": {
"version": "0.5.13",
@@ -12572,7 +12613,7 @@
"version": "4.7.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.3.tgz",
"integrity": "sha512-WOkT3XYvrpXx4vMMqlD+8R8R37fZkjyLGlxavMc4iB8lrl8L0DeTcHbYgw/v0N/z9wAFsgBhcsF0ruoySS22mA==",
- "devOptional": true
+ "dev": true
},
"unbox-primitive": {
"version": "1.0.2",
@@ -12622,6 +12663,7 @@
"version": "3.5.13",
"resolved": "https://registry.npmjs.org/vue/-/vue-3.5.13.tgz",
"integrity": "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==",
+ "dev": true,
"requires": {
"@vue/compiler-dom": "3.5.13",
"@vue/compiler-sfc": "3.5.13",
@@ -12634,7 +12676,7 @@
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.5.0.tgz",
"integrity": "sha512-HDuk+PuH5monfNuY+ct49mNmkCRK4xJAV9Ts4z9UFc4rzdDnxQLyCMGGc8pKhZhHTVzfanpNwB/lwqevcBwI4w==",
- "devOptional": true,
+ "dev": true,
"requires": {
"@vue/devtools-api": "^6.6.4"
}
@@ -12768,8 +12810,7 @@
"version": "8.8.0",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.8.0.tgz",
"integrity": "sha512-JDAgSYQ1ksuwqfChJusw1LSJ8BizJ2e/vVu5Lxjq3YvNJNlROv1ui4i+c/kUUrPheBvQl4c5UbERhTwKa6QBJQ==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"xml-name-validator": {
"version": "4.0.0",
diff --git a/packages/vue-router/package.json b/packages/vue-router/package.json
index a9b9926c9b4..3f9f3dce071 100644
--- a/packages/vue-router/package.json
+++ b/packages/vue-router/package.json
@@ -1,6 +1,6 @@
{
"name": "@ionic/vue-router",
- "version": "8.5.1",
+ "version": "8.5.2",
"description": "Vue Router integration for @ionic/vue",
"scripts": {
"test.spec": "jest",
@@ -44,7 +44,7 @@
},
"homepage": "https://github.com/ionic-team/ionic-framework#readme",
"dependencies": {
- "@ionic/vue": "^8.5.1"
+ "@ionic/vue": "^8.5.2"
},
"devDependencies": {
"@ionic/eslint-config": "^0.3.0",
diff --git a/packages/vue/CHANGELOG.md b/packages/vue/CHANGELOG.md
index de4c273ca87..c12d4295ae7 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.5.2](https://github.com/ionic-team/ionic-framework/compare/v8.5.1...v8.5.2) (2025-03-26)
+
+**Note:** Version bump only for package @ionic/vue
+
+
+
+
+
## [8.5.1](https://github.com/ionic-team/ionic-framework/compare/v8.5.0...v8.5.1) (2025-03-19)
diff --git a/packages/vue/package-lock.json b/packages/vue/package-lock.json
index d6b0221b66c..82aedbd17a1 100644
--- a/packages/vue/package-lock.json
+++ b/packages/vue/package-lock.json
@@ -1,15 +1,15 @@
{
"name": "@ionic/vue",
- "version": "8.5.1",
+ "version": "8.5.2",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "@ionic/vue",
- "version": "8.5.1",
+ "version": "8.5.2",
"license": "MIT",
"dependencies": {
- "@ionic/core": "^8.5.1",
+ "@ionic/core": "^8.5.2",
"@stencil/vue-output-target": "0.10.7",
"ionicons": "^7.0.0"
},
@@ -226,9 +226,9 @@
"dev": true
},
"node_modules/@ionic/core": {
- "version": "8.5.1",
- "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.5.1.tgz",
- "integrity": "sha512-XsI1ImfgO87EdNucfmKESPN4djLyclNTwzU2AY7xSzSonKjTAft6qrK1/qU2ys829bmbM7/4+tHFb0UOnt3uHQ==",
+ "version": "8.5.2",
+ "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.5.2.tgz",
+ "integrity": "sha512-XTiZqyLv2gzPzU4l4EvegHc2nDv5TniVU102MAxT739Lw0tFywZV9R1bv590z7Ue7w43ndwGdnfLuOuBksSeRA==",
"license": "MIT",
"dependencies": {
"@stencil/core": "4.20.0",
@@ -4079,9 +4079,9 @@
"dev": true
},
"@ionic/core": {
- "version": "8.5.1",
- "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.5.1.tgz",
- "integrity": "sha512-XsI1ImfgO87EdNucfmKESPN4djLyclNTwzU2AY7xSzSonKjTAft6qrK1/qU2ys829bmbM7/4+tHFb0UOnt3uHQ==",
+ "version": "8.5.2",
+ "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.5.2.tgz",
+ "integrity": "sha512-XTiZqyLv2gzPzU4l4EvegHc2nDv5TniVU102MAxT739Lw0tFywZV9R1bv590z7Ue7w43ndwGdnfLuOuBksSeRA==",
"requires": {
"@stencil/core": "4.20.0",
"ionicons": "^7.2.2",
diff --git a/packages/vue/package.json b/packages/vue/package.json
index b31fa9c2815..4dd76298bec 100644
--- a/packages/vue/package.json
+++ b/packages/vue/package.json
@@ -1,6 +1,6 @@
{
"name": "@ionic/vue",
- "version": "8.5.1",
+ "version": "8.5.2",
"description": "Vue specific wrapper for @ionic/core",
"scripts": {
"eslint": "eslint src",
@@ -67,7 +67,7 @@
"vue-router": "^4.0.16"
},
"dependencies": {
- "@ionic/core": "^8.5.1",
+ "@ionic/core": "^8.5.2",
"@stencil/vue-output-target": "0.10.7",
"ionicons": "^7.0.0"
},