Merge branch 'main' into feature-8.2

This commit is contained in:
Brandy Carney
2024-05-22 12:46:45 -04:00
186 changed files with 18209 additions and 716 deletions

View File

@ -9,7 +9,7 @@ body:
label: Prerequisites label: Prerequisites
description: Please ensure you have completed all of the following. description: Please ensure you have completed all of the following.
options: options:
- label: I have read the [Contributing Guidelines](https://github.com/ionic-team/ionic-framework/blob/main/.github/CONTRIBUTING.md#creating-an-issue). - label: I have read the [Contributing Guidelines](https://github.com/ionic-team/ionic-framework/blob/main/docs/CONTRIBUTING.md#creating-an-issue).
required: true required: true
- label: I agree to follow the [Code of Conduct](https://ionicframework.com/code-of-conduct). - label: I agree to follow the [Code of Conduct](https://ionicframework.com/code-of-conduct).
required: true required: true

View File

@ -9,7 +9,7 @@ body:
label: Prerequisites label: Prerequisites
description: Please ensure you have completed all of the following. description: Please ensure you have completed all of the following.
options: options:
- label: I have read the [Contributing Guidelines](https://github.com/ionic-team/ionic-framework/blob/main/.github/CONTRIBUTING.md#creating-an-issue). - label: I have read the [Contributing Guidelines](https://github.com/ionic-team/ionic-framework/blob/main/docs/CONTRIBUTING.md#creating-an-issue).
required: true required: true
- label: I agree to follow the [Code of Conduct](https://ionicframework.com/code-of-conduct). - label: I agree to follow the [Code of Conduct](https://ionicframework.com/code-of-conduct).
required: true required: true

View File

@ -29,7 +29,7 @@ runs:
shell: bash shell: bash
working-directory: ./packages/angular/test working-directory: ./packages/angular/test
- name: Install Dependencies - name: Install Dependencies
run: npm install run: npm install --legacy-peer-deps # TODO(FW-6227): Remove legacy-peer-deps flag
shell: bash shell: bash
working-directory: ./packages/angular/test/build/${{ inputs.app }} working-directory: ./packages/angular/test/build/${{ inputs.app }}
- name: Sync Built Changes - name: Sync Built Changes

View File

@ -11,8 +11,8 @@ jobs:
issues: write issues: write
steps: steps:
- name: 'Auto-assign issue' - name: 'Auto-assign issue'
uses: pozil/auto-assign-issue@65947009a243e6b3993edeef4e64df3ca85d760c # v1.14.0 uses: pozil/auto-assign-issue@c5bca5027e680b9e8411b826d16947afd8c76b32 # v2.0.0
with: with:
assignees: sean-perkins, brandyscarney, thetaPC assignees: brandyscarney, thetaPC
numOfAssignee: 1 numOfAssignee: 1
allowSelfAssign: false allowSelfAssign: false

View File

@ -140,7 +140,7 @@ jobs:
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
apps: [ng16, ng17] apps: [ng16, ng17, ng18]
needs: [build-angular, build-angular-server] needs: [build-angular, build-angular-server]
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:

View File

@ -24,3 +24,9 @@ jobs:
# within the message. # within the message.
subjectPatternError: | subjectPatternError: |
The subject "{subject}" found in the pull request title "{title}" didn't match the configured pattern. Please ensure that the subject doesn't start with an uppercase character. The subject "{subject}" found in the pull request title "{title}" didn't match the configured pattern. Please ensure that the subject doesn't start with an uppercase character.
# If the PR contains one of these newline-delimited labels, the
# validation is skipped. If you want to rerun the validation when
# labels change, you might want to use the `labeled` and `unlabeled`
# event triggers in your workflow.
ignoreLabels: |
release

View File

@ -150,7 +150,7 @@ jobs:
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
apps: [ng16, ng17] apps: [ng16, ng17, ng18]
needs: [build-angular, build-angular-server] needs: [build-angular, build-angular-server]
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:

View File

@ -3,6 +3,43 @@
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.1.3](https://github.com/ionic-team/ionic-framework/compare/v8.1.2...v8.1.3) (2024-05-22)
### Bug Fixes
* **core:** malformed URIs will not throw exception ([#29486](https://github.com/ionic-team/ionic-framework/issues/29486)) ([4a41983](https://github.com/ionic-team/ionic-framework/commit/4a41983098fe9bf83fdf05ce7ab28c79f414e11b)), closes [#29479](https://github.com/ionic-team/ionic-framework/issues/29479)
## [8.1.2](https://github.com/ionic-team/ionic-framework/compare/v8.1.1...v8.1.2) (2024-05-15)
### Bug Fixes
* **many:** do not grow slotted checkboxes, radios, selects and toggles ([#29501](https://github.com/ionic-team/ionic-framework/issues/29501)) ([c63d07b](https://github.com/ionic-team/ionic-framework/commit/c63d07bdd0c4d9939474c52b03a3f2535511933f)), closes [#29423](https://github.com/ionic-team/ionic-framework/issues/29423)
* **picker:** update keyboard navigation ([#29497](https://github.com/ionic-team/ionic-framework/issues/29497)) ([32bc681](https://github.com/ionic-team/ionic-framework/commit/32bc681192b1833f1c897e692d2d36ba90c6af53))
## [8.1.1](https://github.com/ionic-team/ionic-framework/compare/v8.1.0...v8.1.1) (2024-05-08)
### Bug Fixes
* **angular:** add formatOptions property to standalone datetime ([#29468](https://github.com/ionic-team/ionic-framework/issues/29468)) ([bb1db52](https://github.com/ionic-team/ionic-framework/commit/bb1db52567e0884a896f9ccd76c27540b52f5e48)), closes [#29464](https://github.com/ionic-team/ionic-framework/issues/29464)
* **angular:** persist select disabled state in item ([#29448](https://github.com/ionic-team/ionic-framework/issues/29448)) ([dfb72d7](https://github.com/ionic-team/ionic-framework/commit/dfb72d7ea06e28d76069b23eb90c3426181b7c4c)), closes [#29234](https://github.com/ionic-team/ionic-framework/issues/29234)
* **angular:** set active segment button when dynamically changing items ([#29418](https://github.com/ionic-team/ionic-framework/issues/29418)) ([ee83388](https://github.com/ionic-team/ionic-framework/commit/ee833881da3ecaa0a9153397f0c7e62c1923f19c)), closes [#29414](https://github.com/ionic-team/ionic-framework/issues/29414)
* **radio:** persist checked state when items are updated in radio-group ([#29457](https://github.com/ionic-team/ionic-framework/issues/29457)) ([7ea14ae](https://github.com/ionic-team/ionic-framework/commit/7ea14ae41eb27f2a58952bd27d91ef4c77bb6a0c)), closes [#29442](https://github.com/ionic-team/ionic-framework/issues/29442)
# [8.1.0](https://github.com/ionic-team/ionic-framework/compare/v8.0.2...v8.1.0) (2024-05-01) # [8.1.0](https://github.com/ionic-team/ionic-framework/compare/v8.0.2...v8.1.0) (2024-05-01)

View File

@ -20,7 +20,7 @@
<a href="https://github.com/ionic-team/ionic-framework/blob/main/LICENSE"> <a href="https://github.com/ionic-team/ionic-framework/blob/main/LICENSE">
<img src="https://img.shields.io/badge/license-MIT-blue.svg" alt="Ionic Framework is released under the MIT license." /> <img src="https://img.shields.io/badge/license-MIT-blue.svg" alt="Ionic Framework is released under the MIT license." />
</a> </a>
<a href="https://github.com/ionic-team/ionic/blob/main/docs/CONTRIBUTING.md"> <a href="https://github.com/ionic-team/ionic-framework/blob/main/docs/CONTRIBUTING.md">
<img src="https://img.shields.io/badge/PRs-welcome-brightgreen.svg" alt="PRs welcome!" /> <img src="https://img.shields.io/badge/PRs-welcome-brightgreen.svg" alt="PRs welcome!" />
</a> </a>
<a href="https://twitter.com/Ionicframework"> <a href="https://twitter.com/Ionicframework">
@ -38,7 +38,7 @@
Documentation Documentation
</a> </a>
<span> · </span> <span> · </span>
<a href="https://github.com/ionic-team/ionic/blob/main/docs/CONTRIBUTING.md">Contribute</a> <a href="https://github.com/ionic-team/ionic-framework/blob/main/docs/CONTRIBUTING.md">Contribute</a>
<span> · </span> <span> · </span>
<a href="https://blog.ionicframework.com/">Blog</a> <a href="https://blog.ionicframework.com/">Blog</a>
<br /> <br />
@ -63,14 +63,15 @@ Looking for the `ionic-angular` package? Ionic 3 has been moved to the [`ionic-v
### Getting Started ### Getting Started
Start a new project by following our quick [Getting Started guide](https://ionicframework.com/getting-started/). Start a new project by following our [documentation](https://ionicframework.com/docs/).
We would love to hear from you! If you have any feedback or run into issues using our framework, please file We would love to hear from you! If you have any feedback or run into issues using our framework, please file
an [issue](https://github.com/ionic-team/ionic/issues/new) on this repository. an [issue](https://github.com/ionic-team/ionic-framework/issues/new) on this repository.
### Migration Guides ### Migration Guides
Already have an Ionic app? These guides will help you migrate to the latest versions. Already have an Ionic app? These guides will help you migrate to the latest versions.
* [Migrate from v7 to v8](https://ionicframework.com/docs/updating/8-0)
* [Migrate from v6 to v7](https://ionicframework.com/docs/updating/7-0) * [Migrate from v6 to v7](https://ionicframework.com/docs/updating/7-0)
* [Migrate from v5 to v6](https://ionicframework.com/docs/updating/6-0) * [Migrate from v5 to v6](https://ionicframework.com/docs/updating/6-0)
* [Migrate from v4 to v5](https://ionicframework.com/docs/updating/5-0) * [Migrate from v4 to v5](https://ionicframework.com/docs/updating/5-0)
@ -82,21 +83,16 @@ The Ionic Conference App is a full featured Ionic app. It is the perfect startin
- [Angular Ionic Conference App](https://github.com/ionic-team/ionic-conference-app) - [Angular Ionic Conference App](https://github.com/ionic-team/ionic-conference-app)
- [React Ionic Conference App](https://github.com/ionic-team/ionic-react-conference-app) - [React Ionic Conference App](https://github.com/ionic-team/ionic-react-conference-app)
<!-- TODO(FW-3811): add this when the vue conference app is updated --> - [Vue Ionic Conference App](https://github.com/ionic-team/ionic-vue-conference-app)
<!-- - [Vue Ionic Conference App](https://github.com/ionic-team/ionic-vue-conference-app) -->
### Contributing ### Contributing
Thanks for your interest in contributing! Read up on our guidelines for Thanks for your interest in contributing! Read up on our guidelines for
[contributing](https://github.com/ionic-team/ionic/blob/main/docs/CONTRIBUTING.md) [contributing](https://github.com/ionic-team/ionic-framework/blob/main/docs/CONTRIBUTING.md)
and then look through our issues with a [help wanted](https://github.com/ionic-team/ionic/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22) and then look through our issues with a [help wanted](https://github.com/ionic-team/ionic-framework/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22)
label. label.
Please note that this project is released with a [Contributor Code of Conduct](https://github.com/ionic-team/ionic/blob/main/CODE_OF_CONDUCT.md). By participating in this project you agree to abide by its terms. Please note that this project is released with a [Contributor Code of Conduct](https://github.com/ionic-team/ionic-framework/blob/main/CODE_OF_CONDUCT.md). By participating in this project you agree to abide by its terms.
### Future Goals
As Ionic Framework components migrate to the web component standard, a goal of ours is to have Ionic Framework easily work within all of the popular frameworks.
### Earlier Versions ### Earlier Versions

View File

@ -3,6 +3,42 @@
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.1.3](https://github.com/ionic-team/ionic-framework/compare/v8.1.2...v8.1.3) (2024-05-22)
### Bug Fixes
* **core:** malformed URIs will not throw exception ([#29486](https://github.com/ionic-team/ionic-framework/issues/29486)) ([4a41983](https://github.com/ionic-team/ionic-framework/commit/4a41983098fe9bf83fdf05ce7ab28c79f414e11b)), closes [#29479](https://github.com/ionic-team/ionic-framework/issues/29479)
## [8.1.2](https://github.com/ionic-team/ionic-framework/compare/v8.1.1...v8.1.2) (2024-05-15)
### Bug Fixes
* **many:** do not grow slotted checkboxes, radios, selects and toggles ([#29501](https://github.com/ionic-team/ionic-framework/issues/29501)) ([c63d07b](https://github.com/ionic-team/ionic-framework/commit/c63d07bdd0c4d9939474c52b03a3f2535511933f)), closes [#29423](https://github.com/ionic-team/ionic-framework/issues/29423)
* **picker:** update keyboard navigation ([#29497](https://github.com/ionic-team/ionic-framework/issues/29497)) ([32bc681](https://github.com/ionic-team/ionic-framework/commit/32bc681192b1833f1c897e692d2d36ba90c6af53))
## [8.1.1](https://github.com/ionic-team/ionic-framework/compare/v8.1.0...v8.1.1) (2024-05-08)
### Bug Fixes
* **angular:** persist select disabled state in item ([#29448](https://github.com/ionic-team/ionic-framework/issues/29448)) ([dfb72d7](https://github.com/ionic-team/ionic-framework/commit/dfb72d7ea06e28d76069b23eb90c3426181b7c4c)), closes [#29234](https://github.com/ionic-team/ionic-framework/issues/29234)
* **angular:** set active segment button when dynamically changing items ([#29418](https://github.com/ionic-team/ionic-framework/issues/29418)) ([ee83388](https://github.com/ionic-team/ionic-framework/commit/ee833881da3ecaa0a9153397f0c7e62c1923f19c)), closes [#29414](https://github.com/ionic-team/ionic-framework/issues/29414)
* **radio:** persist checked state when items are updated in radio-group ([#29457](https://github.com/ionic-team/ionic-framework/issues/29457)) ([7ea14ae](https://github.com/ionic-team/ionic-framework/commit/7ea14ae41eb27f2a58952bd27d91ef4c77bb6a0c)), closes [#29442](https://github.com/ionic-team/ionic-framework/issues/29442)
# [8.1.0](https://github.com/ionic-team/ionic-framework/compare/v8.0.2...v8.1.0) (2024-05-01) # [8.1.0](https://github.com/ionic-team/ionic-framework/compare/v8.0.2...v8.1.0) (2024-05-01)

View File

@ -1,5 +1,5 @@
# Get Playwright # Get Playwright
FROM mcr.microsoft.com/playwright:v1.43.1 FROM mcr.microsoft.com/playwright:v1.44.0
# Set the working directory # Set the working directory
WORKDIR /ionic WORKDIR /ionic

View File

@ -96,7 +96,7 @@ const showModal = async () => {
## How to contribute ## How to contribute
[Check out the CONTRIBUTE guide](/.github/CONTRIBUTING.md) [Check out the CONTRIBUTE guide](/docs/CONTRIBUTING.md)
## Related ## Related

File diff suppressed because it is too large Load Diff

60
core/package-lock.json generated
View File

@ -1,12 +1,12 @@
{ {
"name": "@ionic/core", "name": "@ionic/core",
"version": "8.1.0", "version": "8.1.3",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "@ionic/core", "name": "@ionic/core",
"version": "8.1.0", "version": "8.1.3",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@stencil/core": "^4.17.2", "@stencil/core": "^4.17.2",
@ -1691,12 +1691,12 @@
} }
}, },
"node_modules/@playwright/test": { "node_modules/@playwright/test": {
"version": "1.43.1", "version": "1.44.0",
"resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.43.1.tgz", "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.44.0.tgz",
"integrity": "sha512-HgtQzFgNEEo4TE22K/X7sYTYNqEMMTZmFS8kTq6m8hXj+m1D8TgwgIbumHddJa9h4yl4GkKb8/bgAl2+g7eDgA==", "integrity": "sha512-rNX5lbNidamSUorBhB4XZ9SQTjAqfe5M+p37Z8ic0jPFBMo5iCtQz1kRWkEMg+rYOKSlVycpQmpqjSFq7LXOfg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"playwright": "1.43.1" "playwright": "1.44.0"
}, },
"bin": { "bin": {
"playwright": "cli.js" "playwright": "cli.js"
@ -1786,9 +1786,9 @@
} }
}, },
"node_modules/@stencil/core": { "node_modules/@stencil/core": {
"version": "4.17.2", "version": "4.18.1",
"resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.17.2.tgz", "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.18.1.tgz",
"integrity": "sha512-MX7yaLmpTU9iZvCire9nhecTcE0qBlV0vPWrLMeIXewYN7/hb8B3NjnhQyBKC93FDPI8NBRmt6KIugLw9zcRZg==", "integrity": "sha512-WoRctLuXqoiLquS4EEvMoyLsbQ5+xuk8wp0+n4mYjoAoXy8NppXmMqKrMlFyYXL/zUI5ODS7U7IcLCpZ3IcKZQ==",
"bin": { "bin": {
"stencil": "bin/stencil" "stencil": "bin/stencil"
}, },
@ -8222,12 +8222,12 @@
} }
}, },
"node_modules/playwright": { "node_modules/playwright": {
"version": "1.43.1", "version": "1.44.0",
"resolved": "https://registry.npmjs.org/playwright/-/playwright-1.43.1.tgz", "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.44.0.tgz",
"integrity": "sha512-V7SoH0ai2kNt1Md9E3Gwas5B9m8KR2GVvwZnAI6Pg0m3sh7UvgiYhRrhsziCmqMJNouPckiOhk8T+9bSAK0VIA==", "integrity": "sha512-F9b3GUCLQ3Nffrfb6dunPOkE5Mh68tR7zN32L4jCk4FjQamgesGay7/dAAe1WaMEGV04DkdJfcJzjoCKygUaRQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"playwright-core": "1.43.1" "playwright-core": "1.44.0"
}, },
"bin": { "bin": {
"playwright": "cli.js" "playwright": "cli.js"
@ -8240,9 +8240,9 @@
} }
}, },
"node_modules/playwright-core": { "node_modules/playwright-core": {
"version": "1.43.1", "version": "1.44.0",
"resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.43.1.tgz", "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.44.0.tgz",
"integrity": "sha512-EI36Mto2Vrx6VF7rm708qSnesVQKbxEWvPrfA1IPY6HgczBplDx7ENtx+K2n4kJ41sLLkuGfmb0ZLSSXlDhqPg==", "integrity": "sha512-ZTbkNpFfYcGWohvTTl+xewITm7EOuqIqex0c7dNZ+aXsbrLj0qI8XlGKfPpipjm0Wny/4Lt4CJsWJk1stVS5qQ==",
"dev": true, "dev": true,
"bin": { "bin": {
"playwright-core": "cli.js" "playwright-core": "cli.js"
@ -11443,12 +11443,12 @@
} }
}, },
"@playwright/test": { "@playwright/test": {
"version": "1.43.1", "version": "1.44.0",
"resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.43.1.tgz", "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.44.0.tgz",
"integrity": "sha512-HgtQzFgNEEo4TE22K/X7sYTYNqEMMTZmFS8kTq6m8hXj+m1D8TgwgIbumHddJa9h4yl4GkKb8/bgAl2+g7eDgA==", "integrity": "sha512-rNX5lbNidamSUorBhB4XZ9SQTjAqfe5M+p37Z8ic0jPFBMo5iCtQz1kRWkEMg+rYOKSlVycpQmpqjSFq7LXOfg==",
"dev": true, "dev": true,
"requires": { "requires": {
"playwright": "1.43.1" "playwright": "1.44.0"
} }
}, },
"@rollup/plugin-node-resolve": { "@rollup/plugin-node-resolve": {
@ -11516,9 +11516,9 @@
"requires": {} "requires": {}
}, },
"@stencil/core": { "@stencil/core": {
"version": "4.17.2", "version": "4.18.1",
"resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.17.2.tgz", "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.18.1.tgz",
"integrity": "sha512-MX7yaLmpTU9iZvCire9nhecTcE0qBlV0vPWrLMeIXewYN7/hb8B3NjnhQyBKC93FDPI8NBRmt6KIugLw9zcRZg==" "integrity": "sha512-WoRctLuXqoiLquS4EEvMoyLsbQ5+xuk8wp0+n4mYjoAoXy8NppXmMqKrMlFyYXL/zUI5ODS7U7IcLCpZ3IcKZQ=="
}, },
"@stencil/react-output-target": { "@stencil/react-output-target": {
"version": "0.5.3", "version": "0.5.3",
@ -16167,19 +16167,19 @@
} }
}, },
"playwright": { "playwright": {
"version": "1.43.1", "version": "1.44.0",
"resolved": "https://registry.npmjs.org/playwright/-/playwright-1.43.1.tgz", "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.44.0.tgz",
"integrity": "sha512-V7SoH0ai2kNt1Md9E3Gwas5B9m8KR2GVvwZnAI6Pg0m3sh7UvgiYhRrhsziCmqMJNouPckiOhk8T+9bSAK0VIA==", "integrity": "sha512-F9b3GUCLQ3Nffrfb6dunPOkE5Mh68tR7zN32L4jCk4FjQamgesGay7/dAAe1WaMEGV04DkdJfcJzjoCKygUaRQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"fsevents": "2.3.2", "fsevents": "2.3.2",
"playwright-core": "1.43.1" "playwright-core": "1.44.0"
} }
}, },
"playwright-core": { "playwright-core": {
"version": "1.43.1", "version": "1.44.0",
"resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.43.1.tgz", "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.44.0.tgz",
"integrity": "sha512-EI36Mto2Vrx6VF7rm708qSnesVQKbxEWvPrfA1IPY6HgczBplDx7ENtx+K2n4kJ41sLLkuGfmb0ZLSSXlDhqPg==", "integrity": "sha512-ZTbkNpFfYcGWohvTTl+xewITm7EOuqIqex0c7dNZ+aXsbrLj0qI8XlGKfPpipjm0Wny/4Lt4CJsWJk1stVS5qQ==",
"dev": true "dev": true
}, },
"postcss": { "postcss": {

View File

@ -1,6 +1,6 @@
{ {
"name": "@ionic/core", "name": "@ionic/core",
"version": "8.1.0", "version": "8.1.3",
"description": "Base components for Ionic", "description": "Base components for Ionic",
"keywords": [ "keywords": [
"ionic", "ionic",
@ -108,7 +108,7 @@
"url": "git+https://github.com/ionic-team/ionic-framework.git" "url": "git+https://github.com/ionic-team/ionic-framework.git"
}, },
"bugs": { "bugs": {
"url": "https://github.com/ionic-team/ionic/issues" "url": "https://github.com/ionic-team/ionic-framework/issues"
}, },
"homepage": "https://ionicframework.com/", "homepage": "https://ionicframework.com/",
"jest": { "jest": {

View File

@ -33,7 +33,7 @@ function generateComponent(component, content) {
content.push(`${component.tag},event,${prop.event},${prop.detail},${prop.bubbles}`); content.push(`${component.tag},event,${prop.event},${prop.detail},${prop.bubbles}`);
}); });
component.styles.forEach(prop => { component.styles.forEach(prop => {
content.push(`${component.tag},css-prop,${prop.name}`); content.push(`${component.tag},css-prop,${prop.name}${prop.mode ? ',' + prop.mode : ''}`);
}); });
component.parts.forEach(part => { component.parts.forEach(part => {
content.push(`${component.tag},part,${part.name}`); content.push(`${component.tag},part,${part.name}`);

View File

@ -53,4 +53,7 @@ if (requestHeaded && !hasHeadedConfigFiles) {
console.warn(chalk.yellow.bold('\n⚠ You are running tests in headed mode, but one or more of your headed config files was not found.\nPlease ensure that both docker-display.txt and docker-display-volume.txt have been created in the correct location.\n')); console.warn(chalk.yellow.bold('\n⚠ You are running tests in headed mode, but one or more of your headed config files was not found.\nPlease ensure that both docker-display.txt and docker-display-volume.txt have been created in the correct location.\n'));
} }
execa('docker', args, { shell: true, stdio: 'inherit' }); const res = await execa('docker', args, { shell: true, stdio: 'inherit' });
// If underlying scripts failed this whole process should fail too
process.exit(res.exitCode);

View File

@ -3,10 +3,11 @@ import { configs, test } from '@utils/test/playwright';
configs().forEach(({ config, title }) => { configs().forEach(({ config, title }) => {
test.describe(title('accordion: a11y'), () => { test.describe(title('accordion: a11y'), () => {
test('accordions should be keyboard navigable', async ({ page, skip, browserName }) => { // TODO(ROU-8157): remove skip once the keyboard navigation is working again
// TODO(FW-1764): remove skip once issue is resolved test.skip('accordions should be keyboard navigable', async ({ page, skip, browserName }) => {
// TODO(ROU-5358): remove skip once issue is resolved
skip.browser('firefox', 'https://github.com/ionic-team/ionic-framework/issues/25070'); skip.browser('firefox', 'https://github.com/ionic-team/ionic-framework/issues/25070');
// TODO (FW-2979) // TODO (ROU-5437)
skip.browser('webkit', 'Safari 16 only allows text fields and pop-up menus to be focused.'); skip.browser('webkit', 'Safari 16 only allows text fields and pop-up menus to be focused.');
await page.goto(`/src/components/accordion/test/a11y`, config); await page.goto(`/src/components/accordion/test/a11y`, config);

View File

@ -2,7 +2,7 @@
<html lang="en" dir="ltr"> <html lang="en" dir="ltr">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<title>Accordion - Basic</title> <title>Accordion - Standalone</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0" />
<link href="../../../../../css/ionic.bundle.css" rel="stylesheet" /> <link href="../../../../../css/ionic.bundle.css" rel="stylesheet" />
<link href="../../../../../scripts/testing/styles.css" rel="stylesheet" /> <link href="../../../../../scripts/testing/styles.css" rel="stylesheet" />
@ -119,6 +119,7 @@
outline: none; outline: none;
text-align: left; text-align: left;
padding: 20px 16px; padding: 20px 16px;
color: black;
} }
.custom-accordion-content { .custom-accordion-content {

View File

@ -180,7 +180,10 @@ configs({ directions: ['ltr'] }).forEach(({ config, title }) => {
*/ */
configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => { configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
test.describe(title('alert: font scaling'), () => { test.describe(title('alert: font scaling'), () => {
test('should scale text on larger font sizes', async ({ page }) => { test('should scale text on larger font sizes', async ({ page, skip }) => {
// TODO(ROU-8158): unskip this test when a solution is found
skip.browser('chromium', 'Rendering is flaky in Chrome.');
await page.setContent( await page.setContent(
` `
<style> <style>

View File

@ -11,7 +11,7 @@ configs({ modes: ['md'], directions: ['ltr'] }).forEach(({ config, screenshot, t
test('should update the active item', async ({ page }) => { test('should update the active item', async ({ page }) => {
const breadcrumbItems = page.locator('ion-breadcrumb'); const breadcrumbItems = page.locator('ion-breadcrumb');
const addItemButton = page.locator('ion-button#add-btn'); const addItemButton = page.locator('#add-btn');
await expect(breadcrumbItems).toHaveCount(4); await expect(breadcrumbItems).toHaveCount(4);

View File

@ -52,6 +52,11 @@
*/ */
:host([slot="start"]), :host([slot="start"]),
:host([slot="end"]) { :host([slot="end"]) {
// Reset the flex property when the checkbox
// is slotted to avoid growing the element larger
// than its content.
flex: initial;
width: auto; width: auto;
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

After

Width:  |  Height:  |  Size: 36 KiB

View File

@ -7,7 +7,7 @@ configs().forEach(({ title, screenshot, config }) => {
await page.goto('/src/components/datetime/test/position', config); await page.goto('/src/components/datetime/test/position', config);
const ionPopoverDidPresent = await page.spyOnEvent('ionPopoverDidPresent'); const ionPopoverDidPresent = await page.spyOnEvent('ionPopoverDidPresent');
const openDateTimeBtn = page.locator('ion-button#open-datetime'); const openDateTimeBtn = page.locator('#open-datetime');
await openDateTimeBtn.click(); await openDateTimeBtn.click();
await ionPopoverDidPresent.next(); await ionPopoverDidPresent.next();

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

View File

@ -200,3 +200,57 @@ configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) =>
}); });
}); });
}); });
/**
* This behavior does not vary across directions
*/
configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
test.describe(title('item: inputs'), () => {
test('should not shrink the width of a div next to a checkbox, radio, select or toggle', async ({
page,
}, testInfo) => {
testInfo.annotations.push({
type: 'issue',
description: 'https://github.com/ionic-team/ionic-framework/issues/29319',
});
await page.setContent(
`
<style>
.box {
background: lightgreen;
width: 60px;
height: 60px;
}
</style>
<ion-list lines="none">
<ion-item>
<div class="box"></div>
<ion-checkbox>Checkbox</ion-checkbox>
</ion-item>
<ion-item>
<div class="box"></div>
<ion-radio>Radio</ion-radio>
</ion-item>
<ion-item>
<div class="box"></div>
<ion-select label="Select">
<ion-select-option>Option</ion-select-option>
</ion-select>
</ion-item>
<ion-item>
<div class="box"></div>
<ion-toggle>Toggle</ion-toggle>
</ion-item>
</ion-list>
`,
config
);
const list = page.locator('ion-list');
await expect(list).toHaveScreenshot(screenshot(`item-inputs-div-with-inputs`));
});
});
});

View File

@ -12,3 +12,163 @@ configs().forEach(({ title, screenshot, config }) => {
}); });
}); });
}); });
/**
* This behavior does not vary across directions
*/
configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
test.describe(title('item: slotted inputs'), () => {
test.describe('checkbox', () => {
test('should not expand the slotted checkbox width larger than its content', async ({ page }, testInfo) => {
testInfo.annotations.push({
type: 'issue',
description: 'https://github.com/ionic-team/ionic-framework/issues/29423',
});
await page.setContent(
`
<ion-list>
<ion-item>
<ion-checkbox slot="start"></ion-checkbox>
<ion-label>Label</ion-label>
</ion-item>
<ion-item>
<ion-label>Label</ion-label>
<ion-checkbox slot="end"></ion-checkbox>
</ion-item>
<ion-item>
<ion-checkbox slot="start">Start</ion-checkbox>
<ion-label>Label</ion-label>
</ion-item>
<ion-item>
<ion-label>Label</ion-label>
<ion-checkbox slot="end">End</ion-checkbox>
</ion-item>
</ion-list>
`,
config
);
const list = page.locator('ion-list');
await expect(list).toHaveScreenshot(screenshot(`item-slotted-inputs-checkbox`));
});
});
test.describe('radio', () => {
test('should not expand the slotted radio width larger than its content', async ({ page }, testInfo) => {
testInfo.annotations.push({
type: 'issue',
description: 'https://github.com/ionic-team/ionic-framework/issues/29423',
});
await page.setContent(
`
<ion-list>
<ion-item>
<ion-radio slot="start"></ion-radio>
<ion-label>Label</ion-label>
</ion-item>
<ion-item>
<ion-label>Label</ion-label>
<ion-radio slot="end"></ion-radio>
</ion-item>
<ion-item>
<ion-radio slot="start">Start</ion-radio>
<ion-label>Label</ion-label>
</ion-item>
<ion-item>
<ion-label>Label</ion-label>
<ion-radio slot="end">End</ion-radio>
</ion-item>
</ion-list>
`,
config
);
const list = page.locator('ion-list');
await expect(list).toHaveScreenshot(screenshot(`item-slotted-inputs-radio`));
});
});
test.describe('select', () => {
test('should not expand the slotted select width larger than its content', async ({ page }, testInfo) => {
testInfo.annotations.push({
type: 'issue',
description: 'https://github.com/ionic-team/ionic-framework/issues/29423',
});
await page.setContent(
`
<ion-list>
<ion-item>
<ion-select slot="start">
<ion-select-option>Option</ion-select-option>
</ion-select>
<ion-label>Label</ion-label>
</ion-item>
<ion-item>
<ion-label>Label</ion-label>
<ion-select slot="end">
<ion-select-option>Option</ion-select-option>
</ion-select>
</ion-item>
<ion-item>
<ion-select slot="start" label="Start">
<ion-select-option>Option</ion-select-option>
</ion-select>
<ion-label>Label</ion-label>
</ion-item>
<ion-item>
<ion-label>Label</ion-label>
<ion-select slot="end" label="End">
<ion-select-option>Option</ion-select-option>
</ion-select>
</ion-item>
</ion-list>
`,
config
);
const list = page.locator('ion-list');
await expect(list).toHaveScreenshot(screenshot(`item-slotted-inputs-select`));
});
});
test.describe('toggle', () => {
test('should not expand the slotted toggle width larger than its content', async ({ page }, testInfo) => {
testInfo.annotations.push({
type: 'issue',
description: 'https://github.com/ionic-team/ionic-framework/issues/29423',
});
await page.setContent(
`
<ion-list>
<ion-item>
<ion-toggle slot="start"></ion-toggle>
<ion-label>Label</ion-label>
</ion-item>
<ion-item>
<ion-label>Label</ion-label>
<ion-toggle slot="end"></ion-toggle>
</ion-item>
<ion-item>
<ion-toggle slot="start">Start</ion-toggle>
<ion-label>Label</ion-label>
</ion-item>
<ion-item>
<ion-label>Label</ion-label>
<ion-toggle slot="end">End</ion-toggle>
</ion-item>
</ion-list>
`,
config
);
const list = page.locator('ion-list');
await expect(list).toHaveScreenshot(screenshot(`item-slotted-inputs-toggle`));
});
});
});
});

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Some files were not shown because too many files have changed in this diff Show More