chore(git): merge main (#30532)
@ -8,7 +8,7 @@ runs:
|
|||||||
steps:
|
steps:
|
||||||
- uses: actions/setup-node@v4
|
- uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: 18
|
node-version: 22.x
|
||||||
- uses: ./.github/workflows/actions/download-archive
|
- uses: ./.github/workflows/actions/download-archive
|
||||||
with:
|
with:
|
||||||
name: ionic-core
|
name: ionic-core
|
||||||
|
2
.github/workflows/build.yml
vendored
@ -140,7 +140,7 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
apps: [ng16, ng17, ng18, ng19]
|
apps: [ng16, ng17, ng18, ng19, ng20]
|
||||||
needs: [build-angular, build-angular-server]
|
needs: [build-angular, build-angular-server]
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
|
2
.github/workflows/stencil-nightly.yml
vendored
@ -150,7 +150,7 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
apps: [ng16, ng17, ng18, ng19]
|
apps: [ng16, ng17, ng18, ng19, ng20]
|
||||||
needs: [build-angular, build-angular-server]
|
needs: [build-angular, build-angular-server]
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
|
25
CHANGELOG.md
@ -3,6 +3,31 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||||
|
|
||||||
|
## [8.6.3](https://github.com/ionic-team/ionic-framework/compare/v8.6.2...v8.6.3) (2025-07-02)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **angular:** update schematics to support Angular's latest build system ([#30525](https://github.com/ionic-team/ionic-framework/issues/30525)) ([08e3e7a](https://github.com/ionic-team/ionic-framework/commit/08e3e7ab5165baea668571af9845933b5befeb46)), closes [ionic-team/ionic-docs#2091](https://github.com/ionic-team/ionic-docs/issues/2091)
|
||||||
|
* **modal:** add conditional tabIndex for handle cycling ([#30510](https://github.com/ionic-team/ionic-framework/issues/30510)) ([ee47660](https://github.com/ionic-team/ionic-framework/commit/ee47660745428e04c78cfef0555f3c5788959a8c))
|
||||||
|
* **select:** focus the correct selected item in an action sheet interface with a header ([#30481](https://github.com/ionic-team/ionic-framework/issues/30481)) ([80a111c](https://github.com/ionic-team/ionic-framework/commit/80a111cffac70e831eb57e827301370163ef4e2a)), closes [#30480](https://github.com/ionic-team/ionic-framework/issues/30480)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [8.6.2](https://github.com/ionic-team/ionic-framework/compare/v8.6.1...v8.6.2) (2025-06-18)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **picker-column:** fallback to elementFromPoint for iOS 16 Shadow DOM bug ([#30479](https://github.com/ionic-team/ionic-framework/issues/30479)) ([6ae2907](https://github.com/ionic-team/ionic-framework/commit/6ae29077424434f3523d75426f3328765a4797f4)), closes [#29672](https://github.com/ionic-team/ionic-framework/issues/29672)
|
||||||
|
* **range:** improve focus and blur handling for dual knobs ([#30482](https://github.com/ionic-team/ionic-framework/issues/30482)) ([6811fe5](https://github.com/ionic-team/ionic-framework/commit/6811fe5cc88f132f998476a3f4b956ce21122631))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [8.6.1](https://github.com/ionic-team/ionic-framework/compare/v8.6.0...v8.6.1) (2025-06-11)
|
## [8.6.1](https://github.com/ionic-team/ionic-framework/compare/v8.6.0...v8.6.1) (2025-06-11)
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,6 +3,30 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||||
|
|
||||||
|
## [8.6.3](https://github.com/ionic-team/ionic-framework/compare/v8.6.2...v8.6.3) (2025-07-02)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **modal:** add conditional tabIndex for handle cycling ([#30510](https://github.com/ionic-team/ionic-framework/issues/30510)) ([ee47660](https://github.com/ionic-team/ionic-framework/commit/ee47660745428e04c78cfef0555f3c5788959a8c))
|
||||||
|
* **select:** focus the correct selected item in an action sheet interface with a header ([#30481](https://github.com/ionic-team/ionic-framework/issues/30481)) ([80a111c](https://github.com/ionic-team/ionic-framework/commit/80a111cffac70e831eb57e827301370163ef4e2a)), closes [#30480](https://github.com/ionic-team/ionic-framework/issues/30480)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [8.6.2](https://github.com/ionic-team/ionic-framework/compare/v8.6.1...v8.6.2) (2025-06-18)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **picker-column:** fallback to elementFromPoint for iOS 16 Shadow DOM bug ([#30479](https://github.com/ionic-team/ionic-framework/issues/30479)) ([6ae2907](https://github.com/ionic-team/ionic-framework/commit/6ae29077424434f3523d75426f3328765a4797f4)), closes [#29672](https://github.com/ionic-team/ionic-framework/issues/29672)
|
||||||
|
* **range:** improve focus and blur handling for dual knobs ([#30482](https://github.com/ionic-team/ionic-framework/issues/30482)) ([6811fe5](https://github.com/ionic-team/ionic-framework/commit/6811fe5cc88f132f998476a3f4b956ce21122631))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [8.6.1](https://github.com/ionic-team/ionic-framework/compare/v8.6.0...v8.6.1) (2025-06-11)
|
## [8.6.1](https://github.com/ionic-team/ionic-framework/compare/v8.6.0...v8.6.1) (2025-06-11)
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
# Get Playwright
|
# Get Playwright
|
||||||
FROM mcr.microsoft.com/playwright:v1.52.0
|
FROM mcr.microsoft.com/playwright:v1.53.1
|
||||||
|
|
||||||
# Set the working directory
|
# Set the working directory
|
||||||
WORKDIR /ionic
|
WORKDIR /ionic
|
||||||
|
43
core/package-lock.json
generated
@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "@ionic/core",
|
"name": "@ionic/core",
|
||||||
"version": "8.6.1",
|
"version": "8.6.3",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "@ionic/core",
|
"name": "@ionic/core",
|
||||||
"version": "8.6.1",
|
"version": "8.6.3",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@phosphor-icons/core": "^2.1.1",
|
"@phosphor-icons/core": "^2.1.1",
|
||||||
@ -23,13 +23,13 @@
|
|||||||
"@clack/prompts": "^0.11.0",
|
"@clack/prompts": "^0.11.0",
|
||||||
"@ionic/eslint-config": "^0.3.0",
|
"@ionic/eslint-config": "^0.3.0",
|
||||||
"@ionic/prettier-config": "^2.0.0",
|
"@ionic/prettier-config": "^2.0.0",
|
||||||
"@playwright/test": "^1.52.0",
|
"@playwright/test": "^1.53.2",
|
||||||
"@rollup/plugin-node-resolve": "^8.4.0",
|
"@rollup/plugin-node-resolve": "^8.4.0",
|
||||||
"@rollup/plugin-virtual": "^2.0.3",
|
"@rollup/plugin-virtual": "^2.0.3",
|
||||||
"@stencil/angular-output-target": "^0.10.0",
|
"@stencil/angular-output-target": "^0.10.0",
|
||||||
"@stencil/react-output-target": "0.5.3",
|
"@stencil/react-output-target": "0.5.3",
|
||||||
"@stencil/sass": "^3.0.9",
|
"@stencil/sass": "^3.0.9",
|
||||||
"@stencil/vue-output-target": "0.10.7",
|
"@stencil/vue-output-target": "0.10.8",
|
||||||
"@types/jest": "^29.5.6",
|
"@types/jest": "^29.5.6",
|
||||||
"@types/node": "^18.19.47",
|
"@types/node": "^18.19.47",
|
||||||
"@typescript-eslint/eslint-plugin": "^6.7.2",
|
"@typescript-eslint/eslint-plugin": "^6.7.2",
|
||||||
@ -751,9 +751,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@capacitor/core": {
|
"node_modules/@capacitor/core": {
|
||||||
"version": "7.3.0",
|
"version": "7.4.0",
|
||||||
"resolved": "https://registry.npmjs.org/@capacitor/core/-/core-7.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/@capacitor/core/-/core-7.4.0.tgz",
|
||||||
"integrity": "sha512-t/DdTyBchQ2eAZuCmAARlqQsrEm0WyeNwh5zeRuv+cR6gnAsw+86/EWvJ/em5dTnZyaqEy8vlmOMdWarrUbnuQ==",
|
"integrity": "sha512-P6NnjoHyobZgTjynlZSn27d0SUj6j38inlNxFnKZr9qwU7/r6+0Sg2nWkGkIH/pMmXHsvGD8zVe6KUq1UncIjA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"tslib": "^2.1.0"
|
"tslib": "^2.1.0"
|
||||||
@ -1933,12 +1933,12 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@playwright/test": {
|
"node_modules/@playwright/test": {
|
||||||
"version": "1.52.0",
|
"version": "1.53.2",
|
||||||
"resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.52.0.tgz",
|
"resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.53.2.tgz",
|
||||||
"integrity": "sha512-uh6W7sb55hl7D6vsAeA+V2p5JnlAqzhqFyF0VcJkKZXkgnFcVG9PziERRHQfPLfNGx1C292a4JqbWzhR8L4R1g==",
|
"integrity": "sha512-tEB2U5z74ebBeyfGNZ3Jfg29AnW+5HlWhvHtb/Mqco9pFdZU1ZLNdVb2UtB5CvmiilNr2ZfVH/qMmAROG/XTzw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"playwright": "1.52.0"
|
"playwright": "1.53.2"
|
||||||
},
|
},
|
||||||
"bin": {
|
"bin": {
|
||||||
"playwright": "cli.js"
|
"playwright": "cli.js"
|
||||||
@ -2178,11 +2178,10 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@stencil/vue-output-target": {
|
"node_modules/@stencil/vue-output-target": {
|
||||||
"version": "0.10.7",
|
"version": "0.10.8",
|
||||||
"resolved": "https://registry.npmjs.org/@stencil/vue-output-target/-/vue-output-target-0.10.7.tgz",
|
"resolved": "https://registry.npmjs.org/@stencil/vue-output-target/-/vue-output-target-0.10.8.tgz",
|
||||||
"integrity": "sha512-IYxDe+SLCkwhwsWRdynE31rTK1zN3hVwwojQ/V9lrN8Gnx4PTvrUQHiRno9jFo1dk+EaBZWX9gZSmXta0ZaZew==",
|
"integrity": "sha512-/a20LG29xqy/lxBqo6zc1LbyS20GW9xghypZ7vYdo5fQB8jHClAQDkn+c8aykQlre5TtHiODgvr/rRDUrQKwyg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@stencil/core": ">=2.0.0 || >=3 || >= 4.0.0-beta.0 || >= 4.0.0",
|
"@stencil/core": ">=2.0.0 || >=3 || >= 4.0.0-beta.0 || >= 4.0.0",
|
||||||
"vue": "^3.4.38",
|
"vue": "^3.4.38",
|
||||||
@ -9681,12 +9680,12 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/playwright": {
|
"node_modules/playwright": {
|
||||||
"version": "1.52.0",
|
"version": "1.53.2",
|
||||||
"resolved": "https://registry.npmjs.org/playwright/-/playwright-1.52.0.tgz",
|
"resolved": "https://registry.npmjs.org/playwright/-/playwright-1.53.2.tgz",
|
||||||
"integrity": "sha512-JAwMNMBlxJ2oD1kce4KPtMkDeKGHQstdpFPcPH3maElAXon/QZeTvtsfXmTMRyO9TslfoYOXkSsvao2nE1ilTw==",
|
"integrity": "sha512-6K/qQxVFuVQhRQhFsVZ9fGeatxirtrpPgxzBYWyZLEXJzqYwuL4fuNmfOfD5et1tJE4GScKyPNeLhZeRwuTU3A==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"playwright-core": "1.52.0"
|
"playwright-core": "1.53.2"
|
||||||
},
|
},
|
||||||
"bin": {
|
"bin": {
|
||||||
"playwright": "cli.js"
|
"playwright": "cli.js"
|
||||||
@ -9699,9 +9698,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/playwright-core": {
|
"node_modules/playwright-core": {
|
||||||
"version": "1.52.0",
|
"version": "1.53.2",
|
||||||
"resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.52.0.tgz",
|
"resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.53.2.tgz",
|
||||||
"integrity": "sha512-l2osTgLXSMeuLZOML9qYODUQoPPnUsKsb5/P6LJ2e6uPKXUdPK5WYhN4z03G+YNbWmGDY4YENauNu4ZKczreHg==",
|
"integrity": "sha512-ox/OytMy+2w1jcYEYlOo1Hhp8hZkLCximMTUTMBXjGUA1KoFfiSZ+DU+3a739jsPY0yoKH2TFy9S2fsJas8yAw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"bin": {
|
"bin": {
|
||||||
"playwright-core": "cli.js"
|
"playwright-core": "cli.js"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@ionic/core",
|
"name": "@ionic/core",
|
||||||
"version": "8.6.1",
|
"version": "8.6.3",
|
||||||
"description": "Base components for Ionic",
|
"description": "Base components for Ionic",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"ionic",
|
"ionic",
|
||||||
@ -45,13 +45,13 @@
|
|||||||
"@clack/prompts": "^0.11.0",
|
"@clack/prompts": "^0.11.0",
|
||||||
"@ionic/eslint-config": "^0.3.0",
|
"@ionic/eslint-config": "^0.3.0",
|
||||||
"@ionic/prettier-config": "^2.0.0",
|
"@ionic/prettier-config": "^2.0.0",
|
||||||
"@playwright/test": "^1.52.0",
|
"@playwright/test": "^1.53.2",
|
||||||
"@rollup/plugin-node-resolve": "^8.4.0",
|
"@rollup/plugin-node-resolve": "^8.4.0",
|
||||||
"@rollup/plugin-virtual": "^2.0.3",
|
"@rollup/plugin-virtual": "^2.0.3",
|
||||||
"@stencil/angular-output-target": "^0.10.0",
|
"@stencil/angular-output-target": "^0.10.0",
|
||||||
"@stencil/react-output-target": "0.5.3",
|
"@stencil/react-output-target": "0.5.3",
|
||||||
"@stencil/sass": "^3.0.9",
|
"@stencil/sass": "^3.0.9",
|
||||||
"@stencil/vue-output-target": "0.10.7",
|
"@stencil/vue-output-target": "0.10.8",
|
||||||
"@types/jest": "^29.5.6",
|
"@types/jest": "^29.5.6",
|
||||||
"@types/node": "^18.19.47",
|
"@types/node": "^18.19.47",
|
||||||
"@typescript-eslint/eslint-plugin": "^6.7.2",
|
"@typescript-eslint/eslint-plugin": "^6.7.2",
|
||||||
|
51
core/src/components.d.ts
vendored
@ -185,9 +185,9 @@ export namespace Components {
|
|||||||
"cssClass"?: string | string[];
|
"cssClass"?: string | string[];
|
||||||
"delegate"?: FrameworkDelegate;
|
"delegate"?: FrameworkDelegate;
|
||||||
/**
|
/**
|
||||||
* Dismiss the action sheet overlay after it has been presented.
|
* Dismiss the action sheet overlay after it has been presented. This is a no-op if the overlay has not been presented yet. If you want to remove an overlay from the DOM that was never presented, use the [remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method.
|
||||||
* @param data Any data to emit in the dismiss events.
|
* @param data Any data to emit in the dismiss events.
|
||||||
* @param role The role of the element that is dismissing the action sheet. This can be useful in a button handler for determining which button was clicked to dismiss the action sheet. Some examples include: ``"cancel"`, `"destructive"`, "selected"`, and `"backdrop"`. This is a no-op if the overlay has not been presented yet. If you want to remove an overlay from the DOM that was never presented, use the [remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method.
|
* @param role The role of the element that is dismissing the action sheet. This can be useful in a button handler for determining which button was clicked to dismiss the action sheet. Some examples include: `"cancel"`, `"destructive"`, `"selected"`, and `"backdrop"`.
|
||||||
*/
|
*/
|
||||||
"dismiss": (data?: any, role?: string) => Promise<boolean>;
|
"dismiss": (data?: any, role?: string) => Promise<boolean>;
|
||||||
/**
|
/**
|
||||||
@ -277,9 +277,9 @@ export namespace Components {
|
|||||||
"cssClass"?: string | string[];
|
"cssClass"?: string | string[];
|
||||||
"delegate"?: FrameworkDelegate;
|
"delegate"?: FrameworkDelegate;
|
||||||
/**
|
/**
|
||||||
* Dismiss the alert overlay after it has been presented.
|
* Dismiss the alert overlay after it has been presented. This is a no-op if the overlay has not been presented yet. If you want to remove an overlay from the DOM that was never presented, use the [remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method.
|
||||||
* @param data Any data to emit in the dismiss events.
|
* @param data Any data to emit in the dismiss events.
|
||||||
* @param role The role of the element that is dismissing the alert. This can be useful in a button handler for determining which button was clicked to dismiss the alert. Some examples include: ``"cancel"`, `"destructive"`, "selected"`, and `"backdrop"`. This is a no-op if the overlay has not been presented yet. If you want to remove an overlay from the DOM that was never presented, use the [remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method.
|
* @param role The role of the element that is dismissing the alert. This can be useful in a button handler for determining which button was clicked to dismiss the alert. Some examples include: `"cancel"`, `"destructive"`, `"selected"`, and `"backdrop"`.
|
||||||
*/
|
*/
|
||||||
"dismiss": (data?: any, role?: string) => Promise<boolean>;
|
"dismiss": (data?: any, role?: string) => Promise<boolean>;
|
||||||
/**
|
/**
|
||||||
@ -363,7 +363,7 @@ export namespace Components {
|
|||||||
"mode"?: "ios" | "md";
|
"mode"?: "ios" | "md";
|
||||||
/**
|
/**
|
||||||
* Used to set focus on an element that uses `ion-focusable`. Do not use this if focusing the element as a result of a keyboard event as the focus utility should handle this for us. This method should be used when we want to programmatically focus an element as a result of another user action. (Ex: We focus the first element inside of a popover when the user presents it, but the popover is not always presented as a result of keyboard action.)
|
* Used to set focus on an element that uses `ion-focusable`. Do not use this if focusing the element as a result of a keyboard event as the focus utility should handle this for us. This method should be used when we want to programmatically focus an element as a result of another user action. (Ex: We focus the first element inside of a popover when the user presents it, but the popover is not always presented as a result of keyboard action.)
|
||||||
* @param elements - The elements to set focus on.
|
* @param elements An array of HTML elements to set focus on.
|
||||||
*/
|
*/
|
||||||
"setFocus": (elements: HTMLElement[]) => Promise<void>;
|
"setFocus": (elements: HTMLElement[]) => Promise<void>;
|
||||||
/**
|
/**
|
||||||
@ -1082,6 +1082,7 @@ export namespace Components {
|
|||||||
interface IonDatetime {
|
interface IonDatetime {
|
||||||
/**
|
/**
|
||||||
* Emits the ionCancel event and optionally closes the popover or modal that the datetime was presented in.
|
* Emits the ionCancel event and optionally closes the popover or modal that the datetime was presented in.
|
||||||
|
* @param closeOverlay If `true`, closes the parent overlay. Defaults to `false`.
|
||||||
*/
|
*/
|
||||||
"cancel": (closeOverlay?: boolean) => Promise<void>;
|
"cancel": (closeOverlay?: boolean) => Promise<void>;
|
||||||
/**
|
/**
|
||||||
@ -1101,6 +1102,7 @@ export namespace Components {
|
|||||||
"color"?: Color;
|
"color"?: Color;
|
||||||
/**
|
/**
|
||||||
* Confirms the selected datetime value, updates the `value` property, and optionally closes the popover or modal that the datetime was presented in.
|
* Confirms the selected datetime value, updates the `value` property, and optionally closes the popover or modal that the datetime was presented in.
|
||||||
|
* @param closeOverlay If `true`, closes the parent overlay. Defaults to `false`.
|
||||||
*/
|
*/
|
||||||
"confirm": (closeOverlay?: boolean) => Promise<void>;
|
"confirm": (closeOverlay?: boolean) => Promise<void>;
|
||||||
/**
|
/**
|
||||||
@ -1194,6 +1196,7 @@ export namespace Components {
|
|||||||
"readonly": boolean;
|
"readonly": boolean;
|
||||||
/**
|
/**
|
||||||
* Resets the internal state of the datetime but does not update the value. Passing a valid ISO-8601 string will reset the state of the component to the provided date. If no value is provided, the internal state will be reset to the clamped value of the min, max and today.
|
* Resets the internal state of the datetime but does not update the value. Passing a valid ISO-8601 string will reset the state of the component to the provided date. If no value is provided, the internal state will be reset to the clamped value of the min, max and today.
|
||||||
|
* @param startDate A valid [ISO-8601 string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#date_time_string_format) to reset the datetime state to.
|
||||||
*/
|
*/
|
||||||
"reset": (startDate?: string) => Promise<void>;
|
"reset": (startDate?: string) => Promise<void>;
|
||||||
/**
|
/**
|
||||||
@ -2073,9 +2076,9 @@ export namespace Components {
|
|||||||
"cssClass"?: string | string[];
|
"cssClass"?: string | string[];
|
||||||
"delegate"?: FrameworkDelegate;
|
"delegate"?: FrameworkDelegate;
|
||||||
/**
|
/**
|
||||||
* Dismiss the loading overlay after it has been presented.
|
* Dismiss the loading overlay after it has been presented. This is a no-op if the overlay has not been presented yet. If you want to remove an overlay from the DOM that was never presented, use the [remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method.
|
||||||
* @param data Any data to emit in the dismiss events.
|
* @param data Any data to emit in the dismiss events.
|
||||||
* @param role The role of the element that is dismissing the loading. This can be useful in a button handler for determining which button was clicked to dismiss the loading. Some examples include: ``"cancel"`, `"destructive"`, "selected"`, and `"backdrop"`. This is a no-op if the overlay has not been presented yet. If you want to remove an overlay from the DOM that was never presented, use the [remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method.
|
* @param role The role of the element that is dismissing the loading. This can be useful in a button handler for determining which button was clicked to dismiss the loading. Some examples include: `"cancel"`, `"destructive"`, `"selected"`, and `"backdrop"`.
|
||||||
*/
|
*/
|
||||||
"dismiss": (data?: any, role?: string) => Promise<boolean>;
|
"dismiss": (data?: any, role?: string) => Promise<boolean>;
|
||||||
/**
|
/**
|
||||||
@ -2156,6 +2159,8 @@ export namespace Components {
|
|||||||
interface IonMenu {
|
interface IonMenu {
|
||||||
/**
|
/**
|
||||||
* Closes the menu. If the menu is already closed or it can't be closed, it returns `false`.
|
* Closes the menu. If the menu is already closed or it can't be closed, it returns `false`.
|
||||||
|
* @param animated If `true`, the menu will animate when closing. If `false`, the menu will close instantly without animation. Defaults to `true`.
|
||||||
|
* @param role The role of the element that is closing the menu. This can be useful in a button handler for determining which button was clicked to close the menu. Some examples include: `"cancel"`, `"destructive"`, `"selected"`, and `"backdrop"`.
|
||||||
*/
|
*/
|
||||||
"close": (animated?: boolean, role?: string) => Promise<boolean>;
|
"close": (animated?: boolean, role?: string) => Promise<boolean>;
|
||||||
/**
|
/**
|
||||||
@ -2168,7 +2173,7 @@ export namespace Components {
|
|||||||
*/
|
*/
|
||||||
"disabled": boolean;
|
"disabled": boolean;
|
||||||
/**
|
/**
|
||||||
* Returns `true` is the menu is active. A menu is active when it can be opened or closed, meaning it's enabled and it's not part of a `ion-split-pane`.
|
* Returns `true` if the menu is active. A menu is active when it can be opened or closed, meaning it's enabled and it's not part of a `ion-split-pane`.
|
||||||
*/
|
*/
|
||||||
"isActive": () => Promise<boolean>;
|
"isActive": () => Promise<boolean>;
|
||||||
/**
|
/**
|
||||||
@ -2190,10 +2195,14 @@ export namespace Components {
|
|||||||
"mode"?: "ios" | "md";
|
"mode"?: "ios" | "md";
|
||||||
/**
|
/**
|
||||||
* Opens the menu. If the menu is already open or it can't be opened, it returns `false`.
|
* Opens the menu. If the menu is already open or it can't be opened, it returns `false`.
|
||||||
|
* @param animated If `true`, the menu will animate when opening. If `false`, the menu will open instantly without animation. Defaults to `true`.
|
||||||
*/
|
*/
|
||||||
"open": (animated?: boolean) => Promise<boolean>;
|
"open": (animated?: boolean) => Promise<boolean>;
|
||||||
/**
|
/**
|
||||||
* Opens or closes the button. If the operation can't be completed successfully, it returns `false`.
|
* Opens or closes the menu. If the operation can't be completed successfully, it returns `false`.
|
||||||
|
* @param shouldOpen If `true`, the menu will open. If `false`, the menu will close.
|
||||||
|
* @param animated If `true`, the menu will animate when opening/closing. If `false`, the menu will open/close instantly without animation.
|
||||||
|
* @param role The role of the element that is closing the menu.
|
||||||
*/
|
*/
|
||||||
"setOpen": (shouldOpen: boolean, animated?: boolean, role?: string) => Promise<boolean>;
|
"setOpen": (shouldOpen: boolean, animated?: boolean, role?: string) => Promise<boolean>;
|
||||||
/**
|
/**
|
||||||
@ -2212,6 +2221,7 @@ export namespace Components {
|
|||||||
"theme"?: "ios" | "md" | "ionic";
|
"theme"?: "ios" | "md" | "ionic";
|
||||||
/**
|
/**
|
||||||
* Toggles the menu. If the menu is already open, it will try to close, otherwise it will try to open it. If the operation can't be completed successfully, it returns `false`.
|
* Toggles the menu. If the menu is already open, it will try to close, otherwise it will try to open it. If the operation can't be completed successfully, it returns `false`.
|
||||||
|
* @param animated If `true`, the menu will animate when opening/closing. If `false`, the menu will open/close instantly without animation. Defaults to `true`.
|
||||||
*/
|
*/
|
||||||
"toggle": (animated?: boolean) => Promise<boolean>;
|
"toggle": (animated?: boolean) => Promise<boolean>;
|
||||||
/**
|
/**
|
||||||
@ -2310,9 +2320,9 @@ export namespace Components {
|
|||||||
"cssClass"?: string | string[];
|
"cssClass"?: string | string[];
|
||||||
"delegate"?: FrameworkDelegate;
|
"delegate"?: FrameworkDelegate;
|
||||||
/**
|
/**
|
||||||
* Dismiss the modal overlay after it has been presented.
|
* Dismiss the modal overlay after it has been presented. This is a no-op if the overlay has not been presented yet. If you want to remove an overlay from the DOM that was never presented, use the [remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method.
|
||||||
* @param data Any data to emit in the dismiss events.
|
* @param data Any data to emit in the dismiss events.
|
||||||
* @param role The role of the element that is dismissing the modal. For example, 'cancel' or 'backdrop'. This is a no-op if the overlay has not been presented yet. If you want to remove an overlay from the DOM that was never presented, use the [remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method.
|
* @param role The role of the element that is dismissing the modal. For example, `cancel` or `backdrop`.
|
||||||
*/
|
*/
|
||||||
"dismiss": (data?: any, role?: string) => Promise<boolean>;
|
"dismiss": (data?: any, role?: string) => Promise<boolean>;
|
||||||
/**
|
/**
|
||||||
@ -2395,7 +2405,8 @@ export namespace Components {
|
|||||||
*/
|
*/
|
||||||
"presentingElement"?: HTMLElement;
|
"presentingElement"?: HTMLElement;
|
||||||
/**
|
/**
|
||||||
* Move a sheet style modal to a specific breakpoint. The breakpoint value must be a value defined in your `breakpoints` array.
|
* Move a sheet style modal to a specific breakpoint.
|
||||||
|
* @param breakpoint The breakpoint value to move the sheet modal to. Must be a value defined in your `breakpoints` array.
|
||||||
*/
|
*/
|
||||||
"setCurrentBreakpoint": (breakpoint: number) => Promise<void>;
|
"setCurrentBreakpoint": (breakpoint: number) => Promise<void>;
|
||||||
/**
|
/**
|
||||||
@ -2804,10 +2815,10 @@ export namespace Components {
|
|||||||
"cssClass"?: string | string[];
|
"cssClass"?: string | string[];
|
||||||
"delegate"?: FrameworkDelegate;
|
"delegate"?: FrameworkDelegate;
|
||||||
/**
|
/**
|
||||||
* Dismiss the popover overlay after it has been presented.
|
* Dismiss the popover overlay after it has been presented. This is a no-op if the overlay has not been presented yet. If you want to remove an overlay from the DOM that was never presented, use the [remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method.
|
||||||
* @param data Any data to emit in the dismiss events.
|
* @param data Any data to emit in the dismiss events.
|
||||||
* @param role The role of the element that is dismissing the popover. For example, 'cancel' or 'backdrop'.
|
* @param role The role of the element that is dismissing the popover. For example, `cancel` or `backdrop`.
|
||||||
* @param dismissParentPopover If `true`, dismissing this popover will also dismiss a parent popover if this popover is nested. Defaults to `true`. This is a no-op if the overlay has not been presented yet. If you want to remove an overlay from the DOM that was never presented, use the [remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method.
|
* @param dismissParentPopover If `true`, dismissing this popover will also dismiss a parent popover if this popover is nested. Defaults to `true`.
|
||||||
*/
|
*/
|
||||||
"dismiss": (data?: any, role?: string, dismissParentPopover?: boolean) => Promise<boolean>;
|
"dismiss": (data?: any, role?: string, dismissParentPopover?: boolean) => Promise<boolean>;
|
||||||
/**
|
/**
|
||||||
@ -2875,6 +2886,7 @@ export namespace Components {
|
|||||||
"overlayIndex": number;
|
"overlayIndex": number;
|
||||||
/**
|
/**
|
||||||
* Present the popover overlay after it has been created. Developers can pass a mouse, touch, or pointer event to position the popover relative to where that event was dispatched.
|
* Present the popover overlay after it has been created. Developers can pass a mouse, touch, or pointer event to position the popover relative to where that event was dispatched.
|
||||||
|
* @param event The event to position the popover relative to.
|
||||||
*/
|
*/
|
||||||
"present": (event?: MouseEvent | TouchEvent | PointerEvent | CustomEvent) => Promise<void>;
|
"present": (event?: MouseEvent | TouchEvent | PointerEvent | CustomEvent) => Promise<void>;
|
||||||
/**
|
/**
|
||||||
@ -3214,7 +3226,7 @@ export namespace Components {
|
|||||||
}
|
}
|
||||||
interface IonReorderGroup {
|
interface IonReorderGroup {
|
||||||
/**
|
/**
|
||||||
* Completes the reorder operation. Must be called by the `ionItemReorder` event. If a list of items is passed, the list will be reordered and returned in the proper order. If no parameters are passed or if `true` is passed in, the reorder will complete and the item will remain in the position it was dragged to. If `false` is passed, the reorder will complete and the item will bounce back to its original position.
|
* Completes the reorder operation. Must be called by the `ionItemReorder` event. If a list of items is passed, the list will be reordered and returned in the proper order. If no parameters are passed or if `true` is passed in, the reorder will complete and the item will remain in the position it was dragged to. If `false` is passed, the reorder will complete and the item will bounce back to its original position.
|
||||||
* @param listOrReorder A list of items to be sorted and returned in the new order or a boolean of whether or not the reorder should reposition the item.
|
* @param listOrReorder A list of items to be sorted and returned in the new order or a boolean of whether or not the reorder should reposition the item.
|
||||||
*/
|
*/
|
||||||
"complete": (listOrReorder?: boolean | any[]) => Promise<any>;
|
"complete": (listOrReorder?: boolean | any[]) => Promise<any>;
|
||||||
@ -3310,6 +3322,7 @@ export namespace Components {
|
|||||||
* Navigate to the specified path.
|
* Navigate to the specified path.
|
||||||
* @param path The path to navigate to.
|
* @param path The path to navigate to.
|
||||||
* @param direction The direction of the animation. Defaults to `"forward"`.
|
* @param direction The direction of the animation. Defaults to `"forward"`.
|
||||||
|
* @param animation A custom animation to use for the transition.
|
||||||
*/
|
*/
|
||||||
"push": (path: string, direction?: RouterDirection, animation?: AnimationBuilder) => Promise<boolean>;
|
"push": (path: string, direction?: RouterDirection, animation?: AnimationBuilder) => Promise<boolean>;
|
||||||
/**
|
/**
|
||||||
@ -3483,7 +3496,7 @@ export namespace Components {
|
|||||||
*/
|
*/
|
||||||
"searchIcon"?: string | boolean;
|
"searchIcon"?: string | boolean;
|
||||||
/**
|
/**
|
||||||
* Sets focus on the native `input` in `ion-searchbar`. Use this method instead of the global `input.focus()`. Developers who wish to focus an input when a page enters should call `setFocus()` in the `ionViewDidEnter()` lifecycle method. Developers who wish to focus an input when an overlay is presented should call `setFocus` after `didPresent` has resolved. See [managing focus](/docs/developing/managing-focus) for more information.
|
* Sets focus on the native `input` in `ion-searchbar`. Use this method instead of the global `input.focus()`. Developers who wish to focus an input when a page enters should call `setFocus()` in the `ionViewDidEnter()` lifecycle method. Developers who wish to focus an input when an overlay is presented should call `setFocus` after `didPresent` has resolved. See [managing focus](/docs/developing/managing-focus) for more information.
|
||||||
*/
|
*/
|
||||||
"setFocus": () => Promise<void>;
|
"setFocus": () => Promise<void>;
|
||||||
/**
|
/**
|
||||||
@ -4202,9 +4215,9 @@ export namespace Components {
|
|||||||
"cssClass"?: string | string[];
|
"cssClass"?: string | string[];
|
||||||
"delegate"?: FrameworkDelegate;
|
"delegate"?: FrameworkDelegate;
|
||||||
/**
|
/**
|
||||||
* Dismiss the toast overlay after it has been presented.
|
* Dismiss the toast overlay after it has been presented. This is a no-op if the overlay has not been presented yet. If you want to remove an overlay from the DOM that was never presented, use the [remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method.
|
||||||
* @param data Any data to emit in the dismiss events.
|
* @param data Any data to emit in the dismiss events.
|
||||||
* @param role The role of the element that is dismissing the toast. This can be useful in a button handler for determining which button was clicked to dismiss the toast. Some examples include: ``"cancel"`, `"destructive"`, "selected"`, and `"backdrop"`. This is a no-op if the overlay has not been presented yet. If you want to remove an overlay from the DOM that was never presented, use the [remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method.
|
* @param role The role of the element that is dismissing the toast. This can be useful in a button handler for determining which button was clicked to dismiss the toast. Some examples include: `"cancel"`, `"destructive"`, `"selected"`, and `"backdrop"`.
|
||||||
*/
|
*/
|
||||||
"dismiss": (data?: any, role?: string) => Promise<boolean>;
|
"dismiss": (data?: any, role?: string) => Promise<boolean>;
|
||||||
/**
|
/**
|
||||||
|
@ -212,16 +212,15 @@ export class ActionSheet implements ComponentInterface, OverlayInterface {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Dismiss the action sheet overlay after it has been presented.
|
* Dismiss the action sheet overlay after it has been presented.
|
||||||
|
* This is a no-op if the overlay has not been presented yet. If you want
|
||||||
|
* to remove an overlay from the DOM that was never presented, use the
|
||||||
|
* [remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method.
|
||||||
*
|
*
|
||||||
* @param data Any data to emit in the dismiss events.
|
* @param data Any data to emit in the dismiss events.
|
||||||
* @param role The role of the element that is dismissing the action sheet.
|
* @param role The role of the element that is dismissing the action sheet.
|
||||||
* This can be useful in a button handler for determining which button was
|
* This can be useful in a button handler for determining which button was
|
||||||
* clicked to dismiss the action sheet.
|
* clicked to dismiss the action sheet. Some examples include:
|
||||||
* Some examples include: ``"cancel"`, `"destructive"`, "selected"`, and `"backdrop"`.
|
* `"cancel"`, `"destructive"`, `"selected"`, and `"backdrop"`.
|
||||||
*
|
|
||||||
* This is a no-op if the overlay has not been presented yet. If you want
|
|
||||||
* to remove an overlay from the DOM that was never presented, use the
|
|
||||||
* [remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method.
|
|
||||||
*/
|
*/
|
||||||
@Method()
|
@Method()
|
||||||
async dismiss(data?: any, role?: string): Promise<boolean> {
|
async dismiss(data?: any, role?: string): Promise<boolean> {
|
||||||
|
@ -434,16 +434,15 @@ export class Alert implements ComponentInterface, OverlayInterface {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Dismiss the alert overlay after it has been presented.
|
* Dismiss the alert overlay after it has been presented.
|
||||||
|
* This is a no-op if the overlay has not been presented yet. If you want
|
||||||
|
* to remove an overlay from the DOM that was never presented, use the
|
||||||
|
* [remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method.
|
||||||
*
|
*
|
||||||
* @param data Any data to emit in the dismiss events.
|
* @param data Any data to emit in the dismiss events.
|
||||||
* @param role The role of the element that is dismissing the alert.
|
* @param role The role of the element that is dismissing the alert.
|
||||||
* This can be useful in a button handler for determining which button was
|
* This can be useful in a button handler for determining which button was
|
||||||
* clicked to dismiss the alert.
|
* clicked to dismiss the alert. Some examples include:
|
||||||
* Some examples include: ``"cancel"`, `"destructive"`, "selected"`, and `"backdrop"`.
|
* `"cancel"`, `"destructive"`, `"selected"`, and `"backdrop"`.
|
||||||
*
|
|
||||||
* This is a no-op if the overlay has not been presented yet. If you want
|
|
||||||
* to remove an overlay from the DOM that was never presented, use the
|
|
||||||
* [remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method.
|
|
||||||
*/
|
*/
|
||||||
@Method()
|
@Method()
|
||||||
async dismiss(data?: any, role?: string): Promise<boolean> {
|
async dismiss(data?: any, role?: string): Promise<boolean> {
|
||||||
|
@ -25,7 +25,7 @@ export class App implements ComponentInterface {
|
|||||||
* inside of a popover when the user presents it, but the popover is not always
|
* inside of a popover when the user presents it, but the popover is not always
|
||||||
* presented as a result of keyboard action.)
|
* presented as a result of keyboard action.)
|
||||||
*
|
*
|
||||||
* @param elements - The elements to set focus on.
|
* @param elements An array of HTML elements to set focus on.
|
||||||
*/
|
*/
|
||||||
@Method()
|
@Method()
|
||||||
async setFocus(elements: HTMLElement[]) {
|
async setFocus(elements: HTMLElement[]) {
|
||||||
|
Before Width: | Height: | Size: 908 B After Width: | Height: | Size: 957 B |
Before Width: | Height: | Size: 708 B After Width: | Height: | Size: 720 B |
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 5.7 KiB |
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 4.0 KiB |
@ -4,11 +4,226 @@ import { configs, test } from '@utils/test/playwright';
|
|||||||
configs().forEach(({ config, screenshot, title }) => {
|
configs().forEach(({ config, screenshot, title }) => {
|
||||||
test.describe(title('breadcrumbs: basic'), () => {
|
test.describe(title('breadcrumbs: basic'), () => {
|
||||||
test('should not have visual regressions', async ({ page }) => {
|
test('should not have visual regressions', async ({ page }) => {
|
||||||
await page.goto(`/src/components/breadcrumbs/test/basic`, config);
|
await page.setContent(
|
||||||
|
`
|
||||||
|
<ion-breadcrumbs>
|
||||||
|
<ion-breadcrumb>First</ion-breadcrumb>
|
||||||
|
<ion-breadcrumb>Second</ion-breadcrumb>
|
||||||
|
<ion-breadcrumb>Third</ion-breadcrumb>
|
||||||
|
<ion-breadcrumb>Fourth</ion-breadcrumb>
|
||||||
|
</ion-breadcrumbs>
|
||||||
|
`,
|
||||||
|
config
|
||||||
|
);
|
||||||
|
|
||||||
await page.setIonViewport();
|
const breadcrumbs = page.locator('ion-breadcrumbs');
|
||||||
|
|
||||||
await expect(page).toHaveScreenshot(screenshot(`breadcrumb-diff`));
|
await expect(breadcrumbs).toHaveScreenshot(screenshot(`breadcrumbs-basic`));
|
||||||
|
});
|
||||||
|
|
||||||
|
test('should not have visual regressions with links', async ({ page }) => {
|
||||||
|
await page.setContent(
|
||||||
|
`
|
||||||
|
<ion-breadcrumbs>
|
||||||
|
<ion-breadcrumb href="#">First</ion-breadcrumb>
|
||||||
|
<ion-breadcrumb href="#">Second</ion-breadcrumb>
|
||||||
|
<ion-breadcrumb href="#">Third</ion-breadcrumb>
|
||||||
|
<ion-breadcrumb>Fourth</ion-breadcrumb>
|
||||||
|
</ion-breadcrumbs>
|
||||||
|
`,
|
||||||
|
config
|
||||||
|
);
|
||||||
|
|
||||||
|
const breadcrumbs = page.locator('ion-breadcrumbs');
|
||||||
|
|
||||||
|
await expect(breadcrumbs).toHaveScreenshot(screenshot(`breadcrumbs-links`));
|
||||||
|
});
|
||||||
|
|
||||||
|
test('should not have visual regressions with custom separators', async ({ page }) => {
|
||||||
|
await page.setContent(
|
||||||
|
`
|
||||||
|
<ion-breadcrumbs>
|
||||||
|
<ion-breadcrumb>
|
||||||
|
First
|
||||||
|
<ion-icon slot="separator" name="arrow-forward"></ion-icon>
|
||||||
|
</ion-breadcrumb>
|
||||||
|
<ion-breadcrumb>
|
||||||
|
Second
|
||||||
|
<ion-icon slot="separator" name="arrow-forward"></ion-icon>
|
||||||
|
</ion-breadcrumb>
|
||||||
|
<ion-breadcrumb>
|
||||||
|
Third
|
||||||
|
<ion-icon slot="separator" name="arrow-forward"></ion-icon>
|
||||||
|
</ion-breadcrumb>
|
||||||
|
<ion-breadcrumb>
|
||||||
|
Fourth
|
||||||
|
</ion-breadcrumb>
|
||||||
|
</ion-breadcrumbs>
|
||||||
|
`,
|
||||||
|
config
|
||||||
|
);
|
||||||
|
|
||||||
|
const breadcrumbs = page.locator('ion-breadcrumbs');
|
||||||
|
|
||||||
|
await expect(breadcrumbs).toHaveScreenshot(screenshot(`breadcrumbs-custom-separators`));
|
||||||
|
});
|
||||||
|
|
||||||
|
test('should not have visual regressions with slotted start icons', async ({ page }) => {
|
||||||
|
await page.setContent(
|
||||||
|
`
|
||||||
|
<ion-breadcrumbs>
|
||||||
|
<ion-breadcrumb>
|
||||||
|
<ion-icon slot="start" name="home"></ion-icon>
|
||||||
|
First
|
||||||
|
</ion-breadcrumb>
|
||||||
|
<ion-breadcrumb>
|
||||||
|
<ion-icon slot="start" name="folder"></ion-icon>
|
||||||
|
Second
|
||||||
|
</ion-breadcrumb>
|
||||||
|
<ion-breadcrumb>
|
||||||
|
<ion-icon slot="start" name="folder"></ion-icon>
|
||||||
|
Third
|
||||||
|
</ion-breadcrumb>
|
||||||
|
<ion-breadcrumb>
|
||||||
|
<ion-icon slot="start" name="document"></ion-icon>
|
||||||
|
Fourth
|
||||||
|
</ion-breadcrumb>
|
||||||
|
</ion-breadcrumbs>
|
||||||
|
`,
|
||||||
|
config
|
||||||
|
);
|
||||||
|
|
||||||
|
const breadcrumbs = page.locator('ion-breadcrumbs');
|
||||||
|
|
||||||
|
await expect(breadcrumbs).toHaveScreenshot(screenshot(`breadcrumbs-slotted-start-icons`));
|
||||||
|
});
|
||||||
|
|
||||||
|
test('should not have visual regressions with slotted end icons', async ({ page }) => {
|
||||||
|
await page.setContent(
|
||||||
|
`
|
||||||
|
<ion-breadcrumbs>
|
||||||
|
<ion-breadcrumb>
|
||||||
|
First
|
||||||
|
<ion-icon slot="end" name="home"></ion-icon>
|
||||||
|
</ion-breadcrumb>
|
||||||
|
<ion-breadcrumb>
|
||||||
|
Second
|
||||||
|
<ion-icon slot="end" name="folder"></ion-icon>
|
||||||
|
</ion-breadcrumb>
|
||||||
|
<ion-breadcrumb>
|
||||||
|
Third
|
||||||
|
<ion-icon slot="end" name="folder"></ion-icon>
|
||||||
|
</ion-breadcrumb>
|
||||||
|
<ion-breadcrumb>
|
||||||
|
Fourth
|
||||||
|
<ion-icon slot="end" name="document"></ion-icon>
|
||||||
|
</ion-breadcrumb>
|
||||||
|
</ion-breadcrumbs>
|
||||||
|
`,
|
||||||
|
config
|
||||||
|
);
|
||||||
|
|
||||||
|
const breadcrumbs = page.locator('ion-breadcrumbs');
|
||||||
|
|
||||||
|
await expect(breadcrumbs).toHaveScreenshot(screenshot(`breadcrumbs-slotted-end-icons`));
|
||||||
|
});
|
||||||
|
|
||||||
|
test('should not have visual regressions in a toolbar', async ({ page }) => {
|
||||||
|
await page.setContent(
|
||||||
|
`
|
||||||
|
<ion-toolbar>
|
||||||
|
<ion-breadcrumbs>
|
||||||
|
<ion-breadcrumb>First</ion-breadcrumb>
|
||||||
|
<ion-breadcrumb>Second</ion-breadcrumb>
|
||||||
|
<ion-breadcrumb>Third</ion-breadcrumb>
|
||||||
|
<ion-breadcrumb>Fourth</ion-breadcrumb>
|
||||||
|
</ion-breadcrumbs>
|
||||||
|
</ion-toolbar>
|
||||||
|
`,
|
||||||
|
config
|
||||||
|
);
|
||||||
|
|
||||||
|
const breadcrumbs = page.locator('ion-breadcrumbs');
|
||||||
|
|
||||||
|
await expect(breadcrumbs).toHaveScreenshot(screenshot(`breadcrumbs-in-toolbar`));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This behavior does not vary across directions
|
||||||
|
*/
|
||||||
|
configs({ directions: ['ltr'] }).forEach(({ config, screenshot, title }) => {
|
||||||
|
test.describe(title('breadcrumbs: states'), () => {
|
||||||
|
test('should not have visual regressions when focused', async ({ page }) => {
|
||||||
|
await page.setContent(
|
||||||
|
`
|
||||||
|
<ion-breadcrumbs>
|
||||||
|
<ion-breadcrumb href="#">First</ion-breadcrumb>
|
||||||
|
<ion-breadcrumb href="#">Second</ion-breadcrumb>
|
||||||
|
<ion-breadcrumb href="#" class="ion-focused">Third</ion-breadcrumb>
|
||||||
|
<ion-breadcrumb>Fourth</ion-breadcrumb>
|
||||||
|
</ion-breadcrumbs>
|
||||||
|
`,
|
||||||
|
config
|
||||||
|
);
|
||||||
|
|
||||||
|
const breadcrumbs = page.locator('ion-breadcrumbs');
|
||||||
|
await expect(breadcrumbs).toHaveScreenshot(screenshot(`breadcrumbs-focused`));
|
||||||
|
});
|
||||||
|
|
||||||
|
test('should not have visual regressions when all breadcrumbs are disabled', async ({ page }) => {
|
||||||
|
await page.setContent(
|
||||||
|
`
|
||||||
|
<ion-breadcrumbs>
|
||||||
|
<ion-breadcrumb disabled>First</ion-breadcrumb>
|
||||||
|
<ion-breadcrumb disabled>Second</ion-breadcrumb>
|
||||||
|
<ion-breadcrumb disabled>Third</ion-breadcrumb>
|
||||||
|
<ion-breadcrumb disabled>Fourth</ion-breadcrumb>
|
||||||
|
</ion-breadcrumbs>
|
||||||
|
`,
|
||||||
|
config
|
||||||
|
);
|
||||||
|
|
||||||
|
const breadcrumbs = page.locator('ion-breadcrumbs');
|
||||||
|
|
||||||
|
await expect(breadcrumbs).toHaveScreenshot(screenshot(`breadcrumbs-all-disabled`));
|
||||||
|
});
|
||||||
|
|
||||||
|
test('should not have visual regressions when one breadcrumb is disabled', async ({ page }) => {
|
||||||
|
await page.setContent(
|
||||||
|
`
|
||||||
|
<ion-breadcrumbs>
|
||||||
|
<ion-breadcrumb>First</ion-breadcrumb>
|
||||||
|
<ion-breadcrumb disabled>Second</ion-breadcrumb>
|
||||||
|
<ion-breadcrumb>Third</ion-breadcrumb>
|
||||||
|
<ion-breadcrumb>Fourth</ion-breadcrumb>
|
||||||
|
</ion-breadcrumbs>
|
||||||
|
`,
|
||||||
|
config
|
||||||
|
);
|
||||||
|
|
||||||
|
const breadcrumbs = page.locator('ion-breadcrumbs');
|
||||||
|
|
||||||
|
await expect(breadcrumbs).toHaveScreenshot(screenshot(`breadcrumbs-one-disabled`));
|
||||||
|
});
|
||||||
|
|
||||||
|
test('should not have visual regressions when setting a different breadcrumb to active', async ({ page }) => {
|
||||||
|
await page.setContent(
|
||||||
|
`
|
||||||
|
<ion-breadcrumbs>
|
||||||
|
<ion-breadcrumb>First</ion-breadcrumb>
|
||||||
|
<ion-breadcrumb>Second</ion-breadcrumb>
|
||||||
|
<ion-breadcrumb active>Third</ion-breadcrumb>
|
||||||
|
<ion-breadcrumb>Fourth</ion-breadcrumb>
|
||||||
|
</ion-breadcrumbs>
|
||||||
|
`,
|
||||||
|
config
|
||||||
|
);
|
||||||
|
|
||||||
|
const breadcrumbs = page.locator('ion-breadcrumbs');
|
||||||
|
|
||||||
|
await expect(breadcrumbs).toHaveScreenshot(screenshot(`breadcrumbs-custom-active`));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
Before Width: | Height: | Size: 138 KiB |
Before Width: | Height: | Size: 186 KiB |
Before Width: | Height: | Size: 176 KiB |
Before Width: | Height: | Size: 137 KiB |
Before Width: | Height: | Size: 186 KiB |
Before Width: | Height: | Size: 178 KiB |
Before Width: | Height: | Size: 136 KiB |
Before Width: | Height: | Size: 186 KiB |
Before Width: | Height: | Size: 175 KiB |
Before Width: | Height: | Size: 136 KiB |
Before Width: | Height: | Size: 188 KiB |
Before Width: | Height: | Size: 174 KiB |
After Width: | Height: | Size: 3.1 KiB |
After Width: | Height: | Size: 3.9 KiB |
After Width: | Height: | Size: 3.8 KiB |
After Width: | Height: | Size: 2.8 KiB |
After Width: | Height: | Size: 3.6 KiB |
After Width: | Height: | Size: 3.5 KiB |
After Width: | Height: | Size: 3.3 KiB |
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 4.1 KiB |
After Width: | Height: | Size: 3.3 KiB |
After Width: | Height: | Size: 4.1 KiB |
After Width: | Height: | Size: 3.9 KiB |
After Width: | Height: | Size: 3.0 KiB |
After Width: | Height: | Size: 3.9 KiB |
After Width: | Height: | Size: 3.9 KiB |
After Width: | Height: | Size: 3.0 KiB |
After Width: | Height: | Size: 3.6 KiB |
After Width: | Height: | Size: 3.5 KiB |
After Width: | Height: | Size: 3.2 KiB |
After Width: | Height: | Size: 4.1 KiB |
After Width: | Height: | Size: 4.0 KiB |
After Width: | Height: | Size: 3.1 KiB |
After Width: | Height: | Size: 3.9 KiB |
After Width: | Height: | Size: 4.0 KiB |
After Width: | Height: | Size: 3.4 KiB |
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 3.4 KiB |
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 4.0 KiB |
After Width: | Height: | Size: 3.1 KiB |
After Width: | Height: | Size: 3.7 KiB |
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 3.1 KiB |
After Width: | Height: | Size: 3.7 KiB |
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 3.8 KiB |
After Width: | Height: | Size: 4.7 KiB |
After Width: | Height: | Size: 4.3 KiB |
After Width: | Height: | Size: 3.7 KiB |
After Width: | Height: | Size: 4.6 KiB |
After Width: | Height: | Size: 4.3 KiB |
After Width: | Height: | Size: 3.3 KiB |
After Width: | Height: | Size: 4.1 KiB |
After Width: | Height: | Size: 4.1 KiB |
After Width: | Height: | Size: 3.3 KiB |
After Width: | Height: | Size: 4.1 KiB |
After Width: | Height: | Size: 3.9 KiB |
After Width: | Height: | Size: 3.0 KiB |
After Width: | Height: | Size: 3.9 KiB |
After Width: | Height: | Size: 3.8 KiB |
After Width: | Height: | Size: 3.0 KiB |
After Width: | Height: | Size: 3.6 KiB |
After Width: | Height: | Size: 3.5 KiB |
After Width: | Height: | Size: 3.3 KiB |
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 4.1 KiB |
After Width: | Height: | Size: 3.3 KiB |
After Width: | Height: | Size: 4.1 KiB |
After Width: | Height: | Size: 3.9 KiB |
After Width: | Height: | Size: 3.0 KiB |
After Width: | Height: | Size: 3.9 KiB |
After Width: | Height: | Size: 3.9 KiB |
After Width: | Height: | Size: 3.0 KiB |
After Width: | Height: | Size: 3.6 KiB |
After Width: | Height: | Size: 3.5 KiB |
After Width: | Height: | Size: 3.5 KiB |
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 4.1 KiB |