Compare commits

..

6 Commits

Author SHA1 Message Date
Liam DeBeasi
32b679dbe3 Merge branch 'feature-8.0' into FW-119 2024-04-08 15:47:44 -04:00
Liam DeBeasi
dcea071daa lint 2023-12-15 13:30:04 -05:00
Liam DeBeasi
9cab6052fb remove .only and lint 2023-12-15 13:25:34 -05:00
Liam DeBeasi
379e804fbf lint 2023-12-15 13:14:39 -05:00
Liam DeBeasi
07f4121658 ensure title is in a level 1 heading, add more tests 2023-12-15 13:14:19 -05:00
Liam DeBeasi
bf3426dad7 fix(title): title is level one heading if one is not present 2023-12-15 12:35:36 -05:00
1210 changed files with 8572 additions and 30814 deletions

1
.gitattributes vendored
View File

@@ -1 +0,0 @@
* text=auto eol=lf

28
.github/CODEOWNERS vendored
View File

@@ -12,3 +12,31 @@
# This should make it easy to add new rules without breaking existing ones.
* @ionic-team/framework
# Frameworks
## Angular
/packages/angular/ @sean-perkins @thetaPC
/packages/angular-server @sean-perkins @thetaPC
/packages/angular/test @thetaPC
## Vue
/packages/vue/ @thetaPC
/packages/vue-router/ @liamdebeasi @thetaPC
/packages/vue/test/ @thetaPC
/packages/vue-router/__tests__ @thetaPC
# Components
/core/src/components/datetime/ @sean-perkins
/core/src/components/nav/ @sean-perkins
/core/src/components/nav-link/ @sean-perkins
# Utilities
/core/src/utils/content/ @sean-perkins
/core/src/utils/gesture/ @liamdebeasi
/core/src/utils/input-shims/ @liamdebeasi

View File

@@ -152,6 +152,9 @@ The focused state should be enabled for elements with actions when tabbed to via
> [!WARNING]
> Do not use `:focus` because that will cause the focus to apply even when an element is tapped (because the element is now focused). Instead, we only want the focus state to be shown when it makes sense which is what the `.ion-focusable` utility mentioned below does.
> [!NOTE]
> The [`:focus-visible`](https://developer.mozilla.org/en-US/docs/Web/CSS/:focus-visible) pseudo-class mostly does the same thing as our JavaScript-driven utility. However, it does not work well with Shadow DOM components as the element that receives focus is typically inside of the Shadow DOM, but we usually want to set the `:focus-visible` state on the host so we can style other parts of the component. Using other combinations such as `:has(:focus-visible)` does not work because `:has` does not pierce the Shadow DOM (as that would leak implementation details about the Shadow DOM contents). `:focus-within` does work with the Shadow DOM, but that has the same problem as `:focus` that was mentioned before. Unfortunately, a [`:focus-visible-within` pseudo-class does not exist yet](https://github.com/WICG/focus-visible/issues/151).
> [!IMPORTANT]
> Make sure the component has the correct [component structure](#component-structure) before continuing.
@@ -212,15 +215,6 @@ ion-button {
}
```
#### When to use `.ion-focusable` versus `:focus-visible`
The [`:focus-visible`](https://developer.mozilla.org/en-US/docs/Web/CSS/:focus-visible) pseudo-class mostly does the same thing as our JavaScript-driven utility. However, it does not work well with Shadow DOM components as the element that receives focus is typically inside of the Shadow DOM, but we usually want to set the `:focus-visible` state on the host so we can style other parts of the component.
Using other combinations such as `:has(:focus-visible)` does not work because `:has` does not pierce the Shadow DOM (as that would leak implementation details about the Shadow DOM contents). `:focus-within` does work with the Shadow DOM, but that has the same problem as `:focus` that was mentioned before. Unfortunately, a [`:focus-visible-within` pseudo-class does not exist yet](https://github.com/WICG/focus-visible/issues/151).
The `.ion-focusable` class should be used when you want to style Element A based on the state of Element B. For example, the Button component styles the host of the component (Element A) when the native `button` inside the Shadow DOM (Element B) has focus.
On the other hand, the `:focus-visible` pseudo-class can be used when you want to style the element based on its own state. For example, we could use `:focus-visible` to style the clear icon on Input when the icon itself is focused.
### Hover
@@ -384,9 +378,9 @@ ion-ripple-effect {
### Example Components
- [ion-button](https://github.com/ionic-team/ionic-framework/tree/main/core/src/components/button)
- [ion-back-button](https://github.com/ionic-team/ionic-framework/tree/main/core/src/components/back-button)
- [ion-menu-button](https://github.com/ionic-team/ionic-framework/tree/main/core/src/components/menu-button)
- [ion-button](https://github.com/ionic-team/ionic/tree/main/core/src/components/button)
- [ion-back-button](https://github.com/ionic-team/ionic/tree/main/core/src/components/back-button)
- [ion-menu-button](https://github.com/ionic-team/ionic/tree/main/core/src/components/menu-button)
### References
@@ -400,7 +394,7 @@ ion-ripple-effect {
#### Example Components
- [ion-checkbox](https://github.com/ionic-team/ionic-framework/tree/main/core/src/components/checkbox)
- [ion-checkbox](https://github.com/ionic-team/ionic/tree/main/core/src/components/checkbox)
#### VoiceOver
@@ -479,7 +473,7 @@ render() {
<Host>
<label>
{this.labelText}
<input type="checkbox" {...this.inheritedAttributes} />
<input type="checkbox" {...this.inheritedAttributes} />
</label>
</Host>
)
@@ -511,7 +505,7 @@ This is a compromise we have to make in order for it to work with the other scre
#### Example Components
- [ion-toggle](https://github.com/ionic-team/ionic-framework/tree/main/core/src/components/toggle)
- [ion-toggle](https://github.com/ionic-team/ionic/tree/main/core/src/components/toggle)
#### Voiceover
@@ -592,7 +586,7 @@ render() {
<Host>
<label>
{this.labelText}
<input type="checkbox" role="switch" {...this.inheritedAttributes} />
<input type="checkbox" role="switch" {...this.inheritedAttributes} />
</label>
</Host>
)
@@ -624,8 +618,8 @@ There is a WebKit bug open for this: https://bugs.webkit.org/show_bug.cgi?id=196
#### Example Components
- [ion-accordion](https://github.com/ionic-team/ionic-framework/tree/master/core/src/components/accordion)
- [ion-accordion-group](https://github.com/ionic-team/ionic-framework/tree/master/core/src/components/accordion-group)
- [ion-accordion](https://github.com/ionic-team/ionic/tree/master/core/src/components/accordion)
- [ion-accordion-group](https://github.com/ionic-team/ionic/tree/master/core/src/components/accordion-group)
#### NVDA
@@ -640,11 +634,11 @@ Certain components can render an `<a>` or a `<button>` depending on the presence
### Example Components
- [ion-button](https://github.com/ionic-team/ionic-framework/tree/main/core/src/components/button)
- [ion-card](https://github.com/ionic-team/ionic-framework/tree/main/core/src/components/card)
- [ion-fab-button](https://github.com/ionic-team/ionic-framework/tree/main/core/src/components/fab-button)
- [ion-item-option](https://github.com/ionic-team/ionic-framework/tree/main/core/src/components/item-option)
- [ion-item](https://github.com/ionic-team/ionic-framework/tree/main/core/src/components/item)
- [ion-button](https://github.com/ionic-team/ionic/tree/main/core/src/components/button)
- [ion-card](https://github.com/ionic-team/ionic/tree/main/core/src/components/card)
- [ion-fab-button](https://github.com/ionic-team/ionic/tree/main/core/src/components/fab-button)
- [ion-item-option](https://github.com/ionic-team/ionic/tree/main/core/src/components/item-option)
- [ion-item](https://github.com/ionic-team/ionic/tree/main/core/src/components/item)
### Component Structure
@@ -734,7 +728,7 @@ To work around this, you should set an RTL class on the host of your component a
<Host
class={{
'my-cmp-rtl': document.dir === 'rtl'
}}
})
>
...
</Host>

View File

@@ -1,11 +1,10 @@
# Contributing
Thanks for your interest in contributing to the Ionic Framework! 🎉
Thanks for your interest in contributing to the Ionic Framework! :tada:
- [Contributing Etiquette](#contributing-etiquette)
- [Creating an Issue](#creating-an-issue)
* [Creating a Good Code Reproduction](#creating-a-good-code-reproduction)
- [Using VS Code on Windows](#using-vs-code-on-windows)
- [Creating a Pull Request](#creating-a-pull-request)
* [Requirements](#requirements)
* [Setup](#setup)
@@ -82,19 +81,6 @@ Without a reliable code reproduction, it is unlikely we will be able to resolve
* **No secret code needed:** Creating a minimal reproduction of the issue prevents you from having to publish any proprietary code used in your project.
* **Get help fixing the issue:** If we can reliably reproduce an issue, there is a good chance we will be able to address it.
## Using VS Code on Windows
To contribute on Windows, do the following:
- Configure VS Code to read/save files using line breaks (LF) instead of carriage returns (CRLF). Set it globally by navigating to: Settings -> Text Editor -> Files -> Eol. Set to `\n`.
- You can optionally use the following settings in your `.vscode/settings.json`:
```json
{ "files.eol": "\n" }
```
- Check that the Git setting `core.autocrlf` is set to `false`: run `git config -l | grep autocrlf`. Switch it to false using: `git config --global core.autocrlf false`.
- If you've already cloned the `ionic-framework` repo, the files may already be cached as LF. To undo this, you need to clean the cache files of the repository. Run the following (make sure you stage or commit your changes first): `git rm --cached -r .` then `git reset --hard`.
## Creating a Pull Request
@@ -144,7 +130,6 @@ Before creating a pull request, please read our requirements that explains the m
3. From here, navigate to one of the component's tests to preview your changes.
4. If a test showing your change doesn't exist, [add a new test or update an existing one](#modifying-tests).
5. To test in RTL mode, once you are in the desired component's test, add `?rtl=true` at the end of the url; for example: `http://localhost:3333/src/components/alert/test/basic?rtl=true`.
6. To test in dark mode, once you are in the desired component's test, add `?palette=dark` at the end of the url; for example: `http://localhost:3333/src/components/alert/test/basic?palette=dark`.
##### Previewing in an external app
@@ -261,14 +246,6 @@ npm install file:/~/ionic-vue-router-7.0.1.tgz
#### Lint Changes
> [!IMPORTANT]
> If you are using a Windows machine, you will need to configure your local development environment to use the correct line endings.
> - Check that the Git setting `core.autocrlf` is set to `false`: run `git config -l | grep autocrlf`. Switch it to false using: `git config --global core.autocrlf false`.
> - If you've already cloned the `ionic-docs` repo, the files may already be cached as LF. To undo this, you need to clean the cache files of the repository. Run the following (make sure you stage or commit your changes first): `git rm --cached -r .` then `git reset --hard`.
1. Run `npm run lint` to lint the TypeScript and Sass.
2. If there are lint errors, run `npm run lint.fix` to automatically fix any errors. Repeat step 1 to ensure the errors have been fixed, and manually fix them if not.
3. To lint and fix only TypeScript errors, run `npm run lint.ts` and `npm run lint.ts.fix`, respectively.

View File

@@ -9,7 +9,7 @@ body:
label: Prerequisites
description: Please ensure you have completed all of the following.
options:
- label: I have read the [Contributing Guidelines](https://github.com/ionic-team/ionic-framework/blob/main/docs/CONTRIBUTING.md#creating-an-issue).
- label: I have read the [Contributing Guidelines](https://github.com/ionic-team/ionic-framework/blob/main/.github/CONTRIBUTING.md#creating-an-issue).
required: true
- label: I agree to follow the [Code of Conduct](https://ionicframework.com/code-of-conduct).
required: true
@@ -23,7 +23,7 @@ body:
description: Which version(s) of Ionic Framework does this issue impact? [Ionic Framework 1.x to 6.x are no longer supported](https://ionicframework.com/docs/reference/support#framework-maintenance-and-support-status). For extended support, considering visiting [Ionic's Enterprise offering](https://ionic.io/enterprise).
options:
- v7.x
- v8.x
- v8.x (Beta)
- Nightly
multiple: true
validations:

View File

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

View File

@@ -25,7 +25,7 @@ Issue number: resolves #
If this introduces a breaking change:
1. Describe the impact and migration path for existing applications below.
2. Update the BREAKING.md file with the breaking change.
3. Add "BREAKING CHANGE: [...]" to the commit description when merging. See https://github.com/ionic-team/ionic-framework/blob/main/docs/CONTRIBUTING.md#footer for more information.
3. Add "BREAKING CHANGE: [...]" to the commit description when merging. See https://github.com/ionic-team/ionic-framework/blob/main/.github/CONTRIBUTING.md#footer for more information.
-->

View File

@@ -6,19 +6,11 @@ runs:
- uses: actions/setup-node@v4
with:
node-version: 18.x
- uses: ./.github/workflows/actions/download-archive
with:
name: ionic-core
path: ./core
filename: CoreBuild.zip
- name: Install Angular Server Dependencies
run: npm ci
shell: bash
working-directory: ./packages/angular-server
- name: Sync
run: npm run sync
shell: bash
working-directory: ./packages/angular-server
- name: Build
run: npm run build.prod
shell: bash

View File

@@ -11,8 +11,8 @@ jobs:
issues: write
steps:
- name: 'Auto-assign issue'
uses: pozil/auto-assign-issue@c5bca5027e680b9e8411b826d16947afd8c76b32 # v2.0.0
uses: pozil/auto-assign-issue@edee9537367a8fbc625d27f9e10aa8bad47b8723 # v1.13.0
with:
assignees: brandyscarney, thetaPC, joselrio, rugoncalves, BenOsodrac, JoaoFerreira-FrontEnd, OS-giulianasilva
assignees: liamdebeasi, sean-perkins, brandyscarney, amandaejohnston, thetaPC
numOfAssignee: 1
allowSelfAssign: false

View File

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

View File

@@ -1,32 +0,0 @@
name: PR Conventional Commit Validation
on:
pull_request:
types: [opened, synchronize, reopened, edited]
jobs:
validate-pr-title:
runs-on: ubuntu-latest
steps:
- name: Validate PR title
uses: amannn/action-semantic-pull-request@v5
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
# Configure that a scope must always be provided.
requireScope: true
# Configure additional validation for the subject based on a regex.
# This example ensures the subject doesn't start with an uppercase character.
subjectPattern: ^(?![A-Z]).+$
# If `subjectPattern` is configured, you can use this property to
# override the default error message that is shown when the pattern
# doesn't match. The variables `subject` and `title` can be used
# within the message.
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.
# 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

@@ -22,6 +22,8 @@ on:
options:
- latest
- next
- v5-lts
- v4-lts
preid:
type: choice
description: Which prerelease identifier should be used? This is only needed when version is "prepatch", "preminor", "premajor", or "prerelease".

View File

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

View File

@@ -1 +0,0 @@
core/src/components/**/*/*.png

View File

@@ -3,198 +3,6 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [8.2.5](https://github.com/ionic-team/ionic-framework/compare/v8.2.4...v8.2.5) (2024-07-03)
### Bug Fixes
* **dependencies:** use latest @stencil/core to remove DOMException errors ([#29685](https://github.com/ionic-team/ionic-framework/issues/29685)) ([d70ea4](https://github.com/ionic-team/ionic/commit/d70ea400a4713bd091af1393e196e10844a190b6)), closes [#29681](https://github.com/ionic-team/ionic/issues/29681)
* **vue:** add optional IonicConfig type parameter to IonicVue plugin ([#29637](https://github.com/ionic-team/ionic-framework/issues/29637)) ([90893f4](https://github.com/ionic-team/ionic-framework/commit/90893f46c930dbccd4251fa2f56bdde30b669158)), closes [#29659](https://github.com/ionic-team/ionic-framework/issues/29659)
## [8.2.4](https://github.com/ionic-team/ionic-framework/compare/v8.2.2...v8.2.4) (2024-06-28)
### Bug Fixes
* **angular:** popover arrow navigation with disabled items ([#29662](https://github.com/ionic-team/ionic-framework/issues/29662)) ([ceb41f3](https://github.com/ionic-team/ionic-framework/commit/ceb41f31f382ff1bcf81de2b11680699d33d5077)), closes [#29640](https://github.com/ionic-team/ionic-framework/issues/29640)
## 8.2.3
This version should be skipped. Install 8.2.4 instead.
## [8.2.2](https://github.com/ionic-team/ionic-framework/compare/v8.2.1...v8.2.2) (2024-06-12)
### Bug Fixes
* **refresher:** show when content is fullscreen ([#29608](https://github.com/ionic-team/ionic-framework/issues/29608)) ([5cdfac8](https://github.com/ionic-team/ionic-framework/commit/5cdfac89f5389cb3009427183f7034ba05788bc2)), closes [#18714](https://github.com/ionic-team/ionic-framework/issues/18714)
## [8.2.1](https://github.com/ionic-team/ionic-framework/compare/v8.2.0...v8.2.1) (2024-06-05)
* **react:** export InputInputEventDetail type ([#29512](https://github.com/ionic-team/ionic-framework/issues/29512)) ([624ceba](https://github.com/ionic-team/ionic-framework/commit/624ceba2e128bb13a3afe4c35883f603f5488d0e)), closes [#29518](https://github.com/ionic-team/ionic-framework/issues/29518)
# [8.2.0](https://github.com/ionic-team/ionic-framework/compare/v8.1.3...v8.2.0) (2024-05-22)
### Features
* **angular:** setting props on a signal works ([#29453](https://github.com/ionic-team/ionic-framework/issues/29453)) ([4640e04](https://github.com/ionic-team/ionic-framework/commit/4640e046ebbd35bf92737368c6262f79a8803a59)), closes [#28876](https://github.com/ionic-team/ionic-framework/issues/28876)
## [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)
### Features
* add experimental transition focus manager ([#29400](https://github.com/ionic-team/ionic-framework/issues/29400)) ([5b686ef](https://github.com/ionic-team/ionic-framework/commit/5b686efc1025cd4088c89ef29154311a3d7504ba)), closes [#23650](https://github.com/ionic-team/ionic-framework/issues/23650)
* **content:** add fixedSlotPlacement prop ([#29233](https://github.com/ionic-team/ionic-framework/issues/29233)) ([90a7e70](https://github.com/ionic-team/ionic-framework/commit/90a7e70a1c827835c18fd5f39d53ab17d286b4a7))
* **datetime:** pass roles to overlay when dismissing ([#29221](https://github.com/ionic-team/ionic-framework/issues/29221)) ([6945adc](https://github.com/ionic-team/ionic-framework/commit/6945adc3cccabf59a2e640462ab4fd09ade59f6f)), closes [#28298](https://github.com/ionic-team/ionic-framework/issues/28298)
* **input:** add clearInputIcon property ([#29246](https://github.com/ionic-team/ionic-framework/issues/29246)) ([0f5d1c0](https://github.com/ionic-team/ionic-framework/commit/0f5d1c02d20483d47b6907fec696633cc7634554)), closes [#26974](https://github.com/ionic-team/ionic-framework/issues/26974)
* **modal, popover:** add ability to temporarily disable focus trapping ([#29379](https://github.com/ionic-team/ionic-framework/issues/29379)) ([7c00351](https://github.com/ionic-team/ionic-framework/commit/7c00351680a955130fa10d25d4439d3cc18db805)), closes [#24646](https://github.com/ionic-team/ionic-framework/issues/24646)
* **picker:** picker column is easier to select with assistive technology ([#29371](https://github.com/ionic-team/ionic-framework/issues/29371)) ([e38e2e4](https://github.com/ionic-team/ionic-framework/commit/e38e2e4d35076fa42241158568fb0ed50094fcbf)), closes [#25221](https://github.com/ionic-team/ionic-framework/issues/25221)
## [8.0.2](https://github.com/ionic-team/ionic-framework/compare/v8.0.1...v8.0.2) (2024-05-01)
### Bug Fixes
* **datetime:** navigating months in RTL works correctly ([#29421](https://github.com/ionic-team/ionic-framework/issues/29421)) ([4d09890](https://github.com/ionic-team/ionic-framework/commit/4d09890d69590f0c8c32b387769a6e1e14a03c33)), closes [#29198](https://github.com/ionic-team/ionic-framework/issues/29198)
* **ios:** large title transition accounts for back button with no text ([#29327](https://github.com/ionic-team/ionic-framework/issues/29327)) ([bd8d065](https://github.com/ionic-team/ionic-framework/commit/bd8d065e1af038fe24fbe9a6acd9e0f2004bc0b7)), closes [#28751](https://github.com/ionic-team/ionic-framework/issues/28751)
* **md:** item border has improved contrast in dark mode ([#29398](https://github.com/ionic-team/ionic-framework/issues/29398)) ([fa85f03](https://github.com/ionic-team/ionic-framework/commit/fa85f030cfdb3ef8482ef29faff0144b27c9aa45)), closes [#29386](https://github.com/ionic-team/ionic-framework/issues/29386)
* **select:** options are visible with fit-content width and fill outline ([#29408](https://github.com/ionic-team/ionic-framework/issues/29408)) ([f15b62a](https://github.com/ionic-team/ionic-framework/commit/f15b62a9ca9a817d2252753d31025d431ac9f8e2)), closes [#29321](https://github.com/ionic-team/ionic-framework/issues/29321)
## [8.0.1](https://github.com/ionic-team/ionic-framework/compare/v8.0.0...v8.0.1) (2024-04-24)
### Bug Fixes
* **input:** clear button can be navigated using screen reader ([#29366](https://github.com/ionic-team/ionic-framework/issues/29366)) ([ee49824](https://github.com/ionic-team/ionic-framework/commit/ee49824a84df7a7b002f41dab7b935fbcdb64946)), closes [#29358](https://github.com/ionic-team/ionic-framework/issues/29358)
* **input:** debounce is set with binding syntax in angular on load ([#29377](https://github.com/ionic-team/ionic-framework/issues/29377)) ([23321f7](https://github.com/ionic-team/ionic-framework/commit/23321f7ab2a242c3c4193fd6cece3f1c7c0034ef)), closes [#29374](https://github.com/ionic-team/ionic-framework/issues/29374)
# [8.0.0](https://github.com/ionic-team/ionic-framework/compare/v8.0.0-rc.2...v8.0.0) (2024-04-17)
**Note:** Version bump only for package ionic-framework
# [8.0.0-rc.2](https://github.com/ionic-team/ionic-framework/compare/v8.0.0-rc.1...v8.0.0-rc.2) (2024-04-17)
### Bug Fixes
* **dark-palette:** improve base colors ([#29239](https://github.com/ionic-team/ionic-framework/issues/29239)) ([4698d22](https://github.com/ionic-team/ionic-framework/commit/4698d22413966b59f9fa65b4e2533695cf00ed70)), closes [#29219](https://github.com/ionic-team/ionic-framework/issues/29219)
* **form-controls:** adjust flex properties inside of an item ([#29328](https://github.com/ionic-team/ionic-framework/issues/29328)) ([9b59138](https://github.com/ionic-team/ionic-framework/commit/9b59138011fd1e71def209ec3a43fb7f91b58949)), closes [#29319](https://github.com/ionic-team/ionic-framework/issues/29319)
## [7.8.5](https://github.com/ionic-team/ionic-framework/compare/v7.8.4...v7.8.5) (2024-04-17)
### Bug Fixes
* **modal:** improve sheet modal scrolling and gesture behavior ([#29312](https://github.com/ionic-team/ionic-framework/issues/29312)) ([9738228](https://github.com/ionic-team/ionic-framework/commit/9738228bc05abe3e2012e57b0e6b85f0ec06f66b)), closes [#24583](https://github.com/ionic-team/ionic-framework/issues/24583)
# [8.0.0-rc.1](https://github.com/ionic-team/ionic-framework/compare/v8.0.0-rc.0...v8.0.0-rc.1) (2024-04-10)
### Bug Fixes
* **button:** use clamp for font sizes on circle shape ([#29200](https://github.com/ionic-team/ionic-framework/issues/29200)) ([4d6edee](https://github.com/ionic-team/ionic-framework/commit/4d6edee89c7bb2cb669d67730d7ddf24c78b3cb1))
## [7.8.4](https://github.com/ionic-team/ionic-framework/compare/v7.8.3...v7.8.4) (2024-04-10)
### Performance Improvements
* **styles:** compress distributed global stylesheets ([#29275](https://github.com/ionic-team/ionic-framework/issues/29275)) ([b3cd49b](https://github.com/ionic-team/ionic-framework/commit/b3cd49bf2219aacffc1ac34acbae7c76ef243765))
## [7.8.3](https://github.com/ionic-team/ionic-framework/compare/v7.8.2...v7.8.3) (2024-04-03)

View File

@@ -20,7 +20,7 @@
<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." />
</a>
<a href="https://github.com/ionic-team/ionic-framework/blob/main/docs/CONTRIBUTING.md">
<a href="https://github.com/ionic-team/ionic/blob/main/.github/CONTRIBUTING.md">
<img src="https://img.shields.io/badge/PRs-welcome-brightgreen.svg" alt="PRs welcome!" />
</a>
<a href="https://twitter.com/Ionicframework">
@@ -38,7 +38,7 @@
Documentation
</a>
<span> · </span>
<a href="https://github.com/ionic-team/ionic-framework/blob/main/docs/CONTRIBUTING.md">Contribute</a>
<a href="https://github.com/ionic-team/ionic/blob/main/.github/CONTRIBUTING.md">Contribute</a>
<span> · </span>
<a href="https://blog.ionicframework.com/">Blog</a>
<br />
@@ -63,15 +63,14 @@ Looking for the `ionic-angular` package? Ionic 3 has been moved to the [`ionic-v
### Getting Started
Start a new project by following our [documentation](https://ionicframework.com/docs/).
Start a new project by following our quick [Getting Started guide](https://ionicframework.com/getting-started/).
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-framework/issues/new) on this repository.
an [issue](https://github.com/ionic-team/ionic/issues/new) on this repository.
### Migration Guides
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 v5 to v6](https://ionicframework.com/docs/updating/6-0)
* [Migrate from v4 to v5](https://ionicframework.com/docs/updating/5-0)
@@ -83,16 +82,21 @@ 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)
- [React Ionic Conference App](https://github.com/ionic-team/ionic-react-conference-app)
- [Vue Ionic Conference App](https://github.com/ionic-team/ionic-vue-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) -->
### Contributing
Thanks for your interest in contributing! Read up on our guidelines for
[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-framework/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22)
[contributing](https://github.com/ionic-team/ionic/blob/main/.github/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)
label.
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.
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.
### 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

View File

@@ -3,190 +3,6 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [8.2.5](https://github.com/ionic-team/ionic-framework/compare/v8.2.4...v8.2.5) (2024-07-03)
**Note:** Version bump only for package @ionic/core
## [8.2.4](https://github.com/ionic-team/ionic-framework/compare/v8.2.2...v8.2.4) (2024-06-28)
### Bug Fixes
* **angular:** popover arrow navigation with disabled items ([#29662](https://github.com/ionic-team/ionic-framework/issues/29662)) ([ceb41f3](https://github.com/ionic-team/ionic-framework/commit/ceb41f31f382ff1bcf81de2b11680699d33d5077)), closes [#29640](https://github.com/ionic-team/ionic-framework/issues/29640)
## 8.2.3
This version should be skipped. Install 8.2.4 instead.
## [8.2.2](https://github.com/ionic-team/ionic-framework/compare/v8.2.1...v8.2.2) (2024-06-12)
### Bug Fixes
* **refresher:** show when content is fullscreen ([#29608](https://github.com/ionic-team/ionic-framework/issues/29608)) ([5cdfac8](https://github.com/ionic-team/ionic-framework/commit/5cdfac89f5389cb3009427183f7034ba05788bc2)), closes [#18714](https://github.com/ionic-team/ionic-framework/issues/18714)
## [8.2.1](https://github.com/ionic-team/ionic-framework/compare/v8.2.0...v8.2.1) (2024-06-05)
**Note:** Version bump only for package @ionic/core
# [8.2.0](https://github.com/ionic-team/ionic-framework/compare/v8.1.3...v8.2.0) (2024-05-22)
**Note:** Version bump only for package @ionic/core
## [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)
### Features
* add experimental transition focus manager ([#29400](https://github.com/ionic-team/ionic-framework/issues/29400)) ([5b686ef](https://github.com/ionic-team/ionic-framework/commit/5b686efc1025cd4088c89ef29154311a3d7504ba)), closes [#23650](https://github.com/ionic-team/ionic-framework/issues/23650)
* **content:** add fixedSlotPlacement prop ([#29233](https://github.com/ionic-team/ionic-framework/issues/29233)) ([90a7e70](https://github.com/ionic-team/ionic-framework/commit/90a7e70a1c827835c18fd5f39d53ab17d286b4a7))
* **datetime:** pass roles to overlay when dismissing ([#29221](https://github.com/ionic-team/ionic-framework/issues/29221)) ([6945adc](https://github.com/ionic-team/ionic-framework/commit/6945adc3cccabf59a2e640462ab4fd09ade59f6f)), closes [#28298](https://github.com/ionic-team/ionic-framework/issues/28298)
* **input:** add clearInputIcon property ([#29246](https://github.com/ionic-team/ionic-framework/issues/29246)) ([0f5d1c0](https://github.com/ionic-team/ionic-framework/commit/0f5d1c02d20483d47b6907fec696633cc7634554)), closes [#26974](https://github.com/ionic-team/ionic-framework/issues/26974)
* **modal, popover:** add ability to temporarily disable focus trapping ([#29379](https://github.com/ionic-team/ionic-framework/issues/29379)) ([7c00351](https://github.com/ionic-team/ionic-framework/commit/7c00351680a955130fa10d25d4439d3cc18db805)), closes [#24646](https://github.com/ionic-team/ionic-framework/issues/24646)
* **picker:** picker column is easier to select with assistive technology ([#29371](https://github.com/ionic-team/ionic-framework/issues/29371)) ([e38e2e4](https://github.com/ionic-team/ionic-framework/commit/e38e2e4d35076fa42241158568fb0ed50094fcbf)), closes [#25221](https://github.com/ionic-team/ionic-framework/issues/25221)
## [8.0.2](https://github.com/ionic-team/ionic-framework/compare/v8.0.1...v8.0.2) (2024-05-01)
### Bug Fixes
* **datetime:** navigating months in RTL works correctly ([#29421](https://github.com/ionic-team/ionic-framework/issues/29421)) ([4d09890](https://github.com/ionic-team/ionic-framework/commit/4d09890d69590f0c8c32b387769a6e1e14a03c33)), closes [#29198](https://github.com/ionic-team/ionic-framework/issues/29198)
* **ios:** large title transition accounts for back button with no text ([#29327](https://github.com/ionic-team/ionic-framework/issues/29327)) ([bd8d065](https://github.com/ionic-team/ionic-framework/commit/bd8d065e1af038fe24fbe9a6acd9e0f2004bc0b7)), closes [#28751](https://github.com/ionic-team/ionic-framework/issues/28751)
* **md:** item border has improved contrast in dark mode ([#29398](https://github.com/ionic-team/ionic-framework/issues/29398)) ([fa85f03](https://github.com/ionic-team/ionic-framework/commit/fa85f030cfdb3ef8482ef29faff0144b27c9aa45)), closes [#29386](https://github.com/ionic-team/ionic-framework/issues/29386)
* **select:** options are visible with fit-content width and fill outline ([#29408](https://github.com/ionic-team/ionic-framework/issues/29408)) ([f15b62a](https://github.com/ionic-team/ionic-framework/commit/f15b62a9ca9a817d2252753d31025d431ac9f8e2)), closes [#29321](https://github.com/ionic-team/ionic-framework/issues/29321)
## [8.0.1](https://github.com/ionic-team/ionic-framework/compare/v8.0.0...v8.0.1) (2024-04-24)
### Bug Fixes
* **input:** clear button can be navigated using screen reader ([#29366](https://github.com/ionic-team/ionic-framework/issues/29366)) ([ee49824](https://github.com/ionic-team/ionic-framework/commit/ee49824a84df7a7b002f41dab7b935fbcdb64946)), closes [#29358](https://github.com/ionic-team/ionic-framework/issues/29358)
* **input:** debounce is set with binding syntax in angular on load ([#29377](https://github.com/ionic-team/ionic-framework/issues/29377)) ([23321f7](https://github.com/ionic-team/ionic-framework/commit/23321f7ab2a242c3c4193fd6cece3f1c7c0034ef)), closes [#29374](https://github.com/ionic-team/ionic-framework/issues/29374)
# [8.0.0](https://github.com/ionic-team/ionic-framework/compare/v8.0.0-rc.2...v8.0.0) (2024-04-17)
**Note:** Version bump only for package @ionic/core
# [8.0.0-rc.2](https://github.com/ionic-team/ionic-framework/compare/v8.0.0-rc.1...v8.0.0-rc.2) (2024-04-17)
### Bug Fixes
* **dark-palette:** improve base colors ([#29239](https://github.com/ionic-team/ionic-framework/issues/29239)) ([4698d22](https://github.com/ionic-team/ionic-framework/commit/4698d22413966b59f9fa65b4e2533695cf00ed70)), closes [#29219](https://github.com/ionic-team/ionic-framework/issues/29219)
* **form-controls:** adjust flex properties inside of an item ([#29328](https://github.com/ionic-team/ionic-framework/issues/29328)) ([9b59138](https://github.com/ionic-team/ionic-framework/commit/9b59138011fd1e71def209ec3a43fb7f91b58949)), closes [#29319](https://github.com/ionic-team/ionic-framework/issues/29319)
## [7.8.5](https://github.com/ionic-team/ionic-framework/compare/v7.8.4...v7.8.5) (2024-04-17)
### Bug Fixes
* **modal:** improve sheet modal scrolling and gesture behavior ([#29312](https://github.com/ionic-team/ionic-framework/issues/29312)) ([9738228](https://github.com/ionic-team/ionic-framework/commit/9738228bc05abe3e2012e57b0e6b85f0ec06f66b)), closes [#24583](https://github.com/ionic-team/ionic-framework/issues/24583)
# [8.0.0-rc.1](https://github.com/ionic-team/ionic-framework/compare/v8.0.0-rc.0...v8.0.0-rc.1) (2024-04-10)
### Bug Fixes
* **button:** use clamp for font sizes on circle shape ([#29200](https://github.com/ionic-team/ionic-framework/issues/29200)) ([4d6edee](https://github.com/ionic-team/ionic-framework/commit/4d6edee89c7bb2cb669d67730d7ddf24c78b3cb1))
## [7.8.4](https://github.com/ionic-team/ionic-framework/compare/v7.8.3...v7.8.4) (2024-04-10)
### Performance Improvements
* **styles:** compress distributed global stylesheets ([#29275](https://github.com/ionic-team/ionic-framework/issues/29275)) ([b3cd49b](https://github.com/ionic-team/ionic-framework/commit/b3cd49bf2219aacffc1ac34acbae7c76ef243765))
## [7.8.3](https://github.com/ionic-team/ionic-framework/compare/v7.8.2...v7.8.3) (2024-04-03)

View File

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

View File

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

View File

File diff suppressed because it is too large Load Diff

954
core/package-lock.json generated
View File

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{
"name": "@ionic/core",
"version": "8.2.5",
"version": "8.0.0-rc.0",
"description": "Base components for Ionic",
"keywords": [
"ionic",
@@ -23,302 +23,6 @@
"collection:main": "dist/collection/index.js",
"collection": "dist/collection/collection-manifest.json",
"types": "dist/types/interface.d.ts",
"exports": {
".": {
"import": "./dist/index.js",
"require": "./dist/index.cjs.js",
"types": "./dist/types/interface.d.ts"
},
"./components": {
"import": "./components/index.js",
"types": "./components/index.d.ts"
},
"./loader": {
"import": "./loader/index.js",
"require": "./loader/index.cjs.js",
"types": "./loader/index.d.ts"
},
"./components/*": {
"import": "./components/*",
"types": "./components/*"
},
"./docs.json": {
"import": "./dist/docs.json",
"require": "./dist/docs.json"
},
"./ion-accordion-group": {
"import": "./components/ion-accordion-group.js",
"types": "./components/ion-accordion-group.d.ts"
},
"./ion-accordion": {
"import": "./components/ion-accordion.js",
"types": "./components/ion-accordion.d.ts"
},
"./ion-avatar": {
"import": "./components/ion-avatar.js",
"types": "./components/ion-avatar.d.ts"
},
"./ion-backdrop": {
"import": "./components/ion-backdrop.js",
"types": "./components/ion-backdrop.d.ts"
},
"./ion-badge": {
"import": "./components/ion-badge.js",
"types": "./components/ion-badge.d.ts"
},
"./ion-breadcrumbs": {
"import": "./components/ion-breadcrumbs.js",
"types": "./components/ion-breadcrumbs.d.ts"
},
"./ion-buttons": {
"import": "./components/ion-buttons.js",
"types": "./components/ion-buttons.d.ts"
},
"./ion-card-content": {
"import": "./components/ion-card-content.js",
"types": "./components/ion-card-content.d.ts"
},
"./ion-card-header": {
"import": "./components/ion-card-header.js",
"types": "./components/ion-card-header.d.ts"
},
"./ion-card-subtitle": {
"import": "./components/ion-card-subtitle.js",
"types": "./components/ion-card-subtitle.d.ts"
},
"./ion-card-title": {
"import": "./components/ion-card-title.js",
"types": "./components/ion-card-title.d.ts"
},
"./ion-checkbox": {
"import": "./components/ion-checkbox.js",
"types": "./components/ion-checkbox.d.ts"
},
"./ion-chip": {
"import": "./components/ion-chip.js",
"types": "./components/ion-chip.d.ts"
},
"./ion-col": {
"import": "./components/ion-col.js",
"types": "./components/ion-col.d.ts"
},
"./ion-content": {
"import": "./components/ion-content.js",
"types": "./components/ion-content.d.ts"
},
"./ion-datetime-button": {
"import": "./components/ion-datetime-button.js",
"types": "./components/ion-datetime-button.d.ts"
},
"./ion-datetime": {
"import": "./components/ion-datetime.js",
"types": "./components/ion-datetime.d.ts"
},
"./ion-fab-list": {
"import": "./components/ion-fab-list.js",
"types": "./components/ion-fab-list.d.ts"
},
"./ion-fab": {
"import": "./components/ion-fab.js",
"types": "./components/ion-fab.d.ts"
},
"./ion-footer": {
"import": "./components/ion-footer.js",
"types": "./components/ion-footer.d.ts"
},
"./ion-grid": {
"import": "./components/ion-grid.js",
"types": "./components/ion-grid.d.ts"
},
"./ion-header": {
"import": "./components/ion-header.js",
"types": "./components/ion-header.d.ts"
},
"./ion-img": {
"import": "./components/ion-img.js",
"types": "./components/ion-img.d.ts"
},
"./ion-infinite-scroll-content": {
"import": "./components/ion-infinite-scroll-content.js",
"types": "./components/ion-infinite-scroll-content.d.ts"
},
"./ion-infinite-scroll": {
"import": "./components/ion-infinite-scroll.js",
"types": "./components/ion-infinite-scroll.d.ts"
},
"./ion-input-password-toggle": {
"import": "./components/ion-input-password-toggle.js",
"types": "./components/ion-input-password-toggle.d.ts"
},
"./ion-input": {
"import": "./components/ion-input.js",
"types": "./components/ion-input.d.ts"
},
"./ion-item-divider": {
"import": "./components/ion-item-divider.js",
"types": "./components/ion-item-divider.d.ts"
},
"./ion-item-group": {
"import": "./components/ion-item-group.js",
"types": "./components/ion-item-group.d.ts"
},
"./ion-item-options": {
"import": "./components/ion-item-options.js",
"types": "./components/ion-item-options.d.ts"
},
"./ion-item-sliding": {
"import": "./components/ion-item-sliding.js",
"types": "./components/ion-item-sliding.d.ts"
},
"./ion-label": {
"import": "./components/ion-label.js",
"types": "./components/ion-label.d.ts"
},
"./ion-list-header": {
"import": "./components/ion-list-header.js",
"types": "./components/ion-list-header.d.ts"
},
"./ion-list": {
"import": "./components/ion-list.js",
"types": "./components/ion-list.d.ts"
},
"./ion-menu-button": {
"import": "./components/ion-menu-button.js",
"types": "./components/ion-menu-button.d.ts"
},
"./ion-menu-toggle": {
"import": "./components/ion-menu-toggle.js",
"types": "./components/ion-menu-toggle.d.ts"
},
"./ion-menu": {
"import": "./components/ion-menu.js",
"types": "./components/ion-menu.d.ts"
},
"./ion-nav-link": {
"import": "./components/ion-nav-link.js",
"types": "./components/ion-nav-link.d.ts"
},
"./ion-nav": {
"import": "./components/ion-nav.js",
"types": "./components/ion-nav.d.ts"
},
"./ion-note": {
"import": "./components/ion-note.js",
"types": "./components/ion-note.d.ts"
},
"./ion-picker-column-option": {
"import": "./components/ion-picker-column-option.js",
"types": "./components/ion-picker-column-option.d.ts"
},
"./ion-picker-column": {
"import": "./components/ion-picker-column.js",
"types": "./components/ion-picker-column.d.ts"
},
"./ion-picker": {
"import": "./components/ion-picker.js",
"types": "./components/ion-picker.d.ts"
},
"./ion-progress-bar": {
"import": "./components/ion-progress-bar.js",
"types": "./components/ion-progress-bar.d.ts"
},
"./ion-radio-group": {
"import": "./components/ion-radio-group.js",
"types": "./components/ion-radio-group.d.ts"
},
"./ion-radio": {
"import": "./components/ion-radio.js",
"types": "./components/ion-radio.d.ts"
},
"./ion-range": {
"import": "./components/ion-range.js",
"types": "./components/ion-range.d.ts"
},
"./ion-refresher-content": {
"import": "./components/ion-refresher-content.js",
"types": "./components/ion-refresher-content.d.ts"
},
"./ion-refresher": {
"import": "./components/ion-refresher.js",
"types": "./components/ion-refresher.d.ts"
},
"./ion-reorder-group": {
"import": "./components/ion-reorder-group.js",
"types": "./components/ion-reorder-group.d.ts"
},
"./ion-reorder": {
"import": "./components/ion-reorder.js",
"types": "./components/ion-reorder.d.ts"
},
"./ion-ripple-effect": {
"import": "./components/ion-ripple-effect.js",
"types": "./components/ion-ripple-effect.d.ts"
},
"./ion-row": {
"import": "./components/ion-row.js",
"types": "./components/ion-row.d.ts"
},
"./ion-searchbar": {
"import": "./components/ion-searchbar.js",
"types": "./components/ion-searchbar.d.ts"
},
"./ion-segment-button": {
"import": "./components/ion-segment-button.js",
"types": "./components/ion-segment-button.d.ts"
},
"./ion-segment": {
"import": "./components/ion-segment.js",
"types": "./components/ion-segment.d.ts"
},
"./ion-select-option": {
"import": "./components/ion-select-option.js",
"types": "./components/ion-select-option.d.ts"
},
"./ion-select": {
"import": "./components/ion-select.js",
"types": "./components/ion-select.d.ts"
},
"./ion-skeleton-text": {
"import": "./components/ion-skeleton-text.js",
"types": "./components/ion-skeleton-text.d.ts"
},
"./ion-spinner": {
"import": "./components/ion-spinner.js",
"types": "./components/ion-spinner.d.ts"
},
"./ion-split-pane": {
"import": "./components/ion-split-pane.js",
"types": "./components/ion-split-pane.d.ts"
},
"./ion-tab": {
"import": "./components/ion-tab.js",
"types": "./components/ion-tab.d.ts"
},
"./ion-text": {
"import": "./components/ion-text.js",
"types": "./components/ion-text.d.ts"
},
"./ion-textarea": {
"import": "./components/ion-textarea.js",
"types": "./components/ion-textarea.d.ts"
},
"./ion-thumbnail": {
"import": "./components/ion-thumbnail.js",
"types": "./components/ion-thumbnail.d.ts"
},
"./ion-title": {
"import": "./components/ion-title.js",
"types": "./components/ion-title.d.ts"
},
"./ion-toggle": {
"import": "./components/ion-toggle.js",
"types": "./components/ion-toggle.d.ts"
},
"./ion-toolbar": {
"import": "./components/ion-toolbar.js",
"types": "./components/ion-toolbar.d.ts"
}
},
"files": [
"components/",
"css/",
@@ -327,20 +31,19 @@
"loader/"
],
"dependencies": {
"@stencil/core": "^4.19.2",
"@stencil/core": "^4.12.2",
"ionicons": "^7.2.2",
"tslib": "^2.1.0"
},
"devDependencies": {
"@axe-core/playwright": "^4.9.1",
"@capacitor/core": "^6.0.0",
"@capacitor/haptics": "^6.0.0",
"@capacitor/keyboard": "^6.0.0",
"@capacitor/status-bar": "^6.0.0",
"@clack/prompts": "^0.7.0",
"@axe-core/playwright": "^4.8.5",
"@capacitor/core": "^5.7.0",
"@capacitor/haptics": "^5.0.7",
"@capacitor/keyboard": "^5.0.8",
"@capacitor/status-bar": "^5.0.7",
"@ionic/eslint-config": "^0.3.0",
"@ionic/prettier-config": "^2.0.0",
"@playwright/test": "^1.45.0",
"@playwright/test": "^1.39.0",
"@rollup/plugin-node-resolve": "^8.4.0",
"@rollup/plugin-virtual": "^2.0.3",
"@stencil/angular-output-target": "^0.8.4",
@@ -351,13 +54,12 @@
"@types/node": "^14.6.0",
"@typescript-eslint/eslint-plugin": "^6.7.2",
"@typescript-eslint/parser": "^6.7.2",
"chalk": "^5.3.0",
"clean-css-cli": "^5.6.1",
"domino": "^2.1.6",
"eslint": "^7.32.0",
"eslint-config-prettier": "^8.5.0",
"eslint-plugin-custom-rules": "file:custom-rules",
"execa": "^8.0.1",
"execa": "^5.0.0",
"fs-extra": "^9.0.1",
"jest": "^29.7.0",
"jest-cli": "^29.7.0",
@@ -375,7 +77,7 @@
"build.docs.json": "stencil build --docs-json dist/docs.json",
"clean": "node scripts/clean.js",
"css.minify": "cleancss -O2 -o ./css/ionic.bundle.css ./css/ionic.bundle.css",
"css.sass": "sass --embed-sources --style compressed src/css:./css",
"css.sass": "sass --embed-sources src/css:./css",
"eslint": "eslint src",
"lint": "npm run lint.ts && npm run lint.sass && npm run prettier -- --write --cache",
"lint.fix": "npm run lint.ts.fix && npm run lint.sass.fix && npm run prettier -- --write --cache",
@@ -394,10 +96,10 @@
"test.treeshake": "node scripts/treeshaking.js dist/index.js",
"validate": "npm run lint && npm run test && npm run build && npm run test.treeshake",
"docker.build": "docker build -t ionic-playwright .",
"test.e2e.docker": "npm run docker.build && node ./scripts/docker.mjs",
"test.e2e.docker": "npm run docker.build && docker run -it --rm -e DISPLAY=$(cat docker-display.txt) -v $(cat docker-display-volume.txt) --ipc=host --mount=type=bind,source=./,target=/ionic ionic-playwright npm run test.e2e --",
"test.e2e.docker.update-snapshots": "npm run test.e2e.docker -- --update-snapshots",
"test.e2e.docker.ci": "npm run docker.build && CI=true node ./scripts/docker.mjs",
"test.e2e.script": "node scripts/testing/e2e-script.mjs"
"test.e2e.docker.ci": "npm run docker.build && docker run -e CI='true' --rm --ipc=host --mount=type=bind,source=./,target=/ionic ionic-playwright npm run test.e2e --",
"test.report": "npx playwright show-report"
},
"author": "Ionic Team",
"license": "MIT",
@@ -406,7 +108,7 @@
"url": "git+https://github.com/ionic-team/ionic-framework.git"
},
"bugs": {
"url": "https://github.com/ionic-team/ionic-framework/issues"
"url": "https://github.com/ionic-team/ionic/issues"
},
"homepage": "https://ionicframework.com/",
"jest": {

View File

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

View File

@@ -1,59 +0,0 @@
import { execa } from 'execa';
import * as fs from 'fs';
import { resolve } from 'path';
import chalk from 'chalk';
const removeNewline = (string) => {
return string.replace(/(\r\n|\n|\r)/gm, "");
}
const readConfigFile = (file) => {
if (fs.existsSync(file)) {
return fs.readFileSync(file, { encoding: 'utf-8' });
}
return '';
}
// These files are optional, so we don't want to error if they don't exist
const display = removeNewline(readConfigFile('docker-display.txt'));
const displayVolume = removeNewline(readConfigFile('docker-display-volume.txt'));
// Using --mount requires an absolute path which is what this gives us.
const pwd = resolve('./');
/**
* -it will let the user gracefully kill the process using Ctrl+C (or equivalent)
* -e DISPLAY and -v handle configuration for headed mode
* --ipc=host is recommended when using Chromium to avoid out of memory crashes: https://playwright.dev/docs/ci#docker
* --init is recommended to avoid zombie processes: https://playwright.dev/docs/ci#docker
* --mount allow us to mount the local Ionic project inside of the Docker container so devs do not need to re-build the project in Docker.
*/
const args = ['run', '--rm', '--init', `-e DISPLAY=${display}`, `-v ${displayVolume}`, '--ipc=host', `--mount=type=bind,source=${pwd},target=/ionic`, 'ionic-playwright', 'npm run test.e2e --', ...process.argv.slice(2)];
// Set the CI env variable so Playwright uses the CI config
if (process.env.CI) {
args.splice(1, 0, '-e CI=true');
/**
* Otherwise, we should let the session be interactive locally. This will
* not work on CI which is why we do not apply it there.
*/
} else {
args.splice(1, 0, '-it');
}
/**
* While these config files are optional to run the tests, they are required to run
* the tests in headed mode. Add a warning if dev tries to run headed tests without
* the correct config files.
*/
const requestHeaded = process.argv.find(arg => arg.includes('headed'));
const hasHeadedConfigFiles = display && displayVolume;
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'));
}
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

@@ -1,4 +1,44 @@
# Core Scripts
## Build
This file has been moved to [/docs/core/testing/preview-changes.md](/docs/core/testing/preview-changes.md).
### 1. Clone ionic
git@github.com:ionic-team/ionic.git
cd ionic
### 2. Run `npm install`
cd core
npm install
Notice that `@ionic/core` lives in `core`.
### 3. Run `npm start`
Make sure you are inside the `core` directory.
npm start
With the `dev` command, Ionic components will be built with [Stencil](https://stenciljs.com/), changes to source files are watched, a local http server will startup, and http://localhost:3333/ will open in a browser.
### 4. Preview
Navigate to http://localhost:3333/src/components/. Each component has small e2e apps found in the `test` directory, for example: http://localhost:3333/src/components/button/test/basic
As changes are made in an editor to source files, the e2e app will live-reload.
## How to contribute
1. `npm start` allows you to modify the components and have live reloading, just like another ionic app.
2. When everything looks good, run `npm run validate` to verify the tests linter and production build passes.
# Deploy
1. `npm run prepare.deploy`
2. Review/update changelog
3. Commit updates using the package name and version number as the commit message.
4. `npm run deploy`
5. :tada:

View File

@@ -1,260 +0,0 @@
// The purpose of this script is to provide a way run the E2E tests
// without having the developer to manually run multiple commands based
// on the desired end result.
// E.g. update the local ground truths for a specific component or
// open the Playwright report after running the E2E tests.
import {
intro,
outro,
confirm,
spinner,
isCancel,
cancel,
text,
log,
} from '@clack/prompts';
import { exec, spawn } from 'child_process';
import fs from 'node:fs';
import { setTimeout as sleep } from 'node:timers/promises';
import util from 'node:util';
import color from 'picocolors';
async function main() {
const execAsync = util.promisify(exec);
const cleanUpFiles = async () => {
// Clean up the local ground truths.
const cleanUp = spinner();
// Inform the user that the local ground truths are being cleaned up.
cleanUp.start('Restoring local ground truths');
// Reset the local ground truths.
await execAsync('git reset -- src/**/*-linux.png').catch((error) => {
cleanUp.stop('Failed to reset local ground truths');
console.error(error);
return process.exit(0);
});
// Restore the local ground truths.
await execAsync('git restore -- src/**/*-linux.png').catch((error) => {
cleanUp.stop('Failed to restore local ground truths');
console.error(error);
return process.exit(0);
});
// Inform the user that the local ground truths have been cleaned up.
cleanUp.stop('Local ground truths have been restored to their original state in order to avoid committing them.');
};
intro(color.inverse(' Update Local Ground Truths'));
// Ask user for the component name they want to test.
const componentValue = await text({
message: 'Enter the component or path you want to test (e.g. chip, src/components/chip)',
placeholder: 'Empty for all components',
});
// User cancelled the operation with `Ctrl+C` or `CMD+C`.
if (isCancel(componentValue)) {
cancel('Operation cancelled');
return process.exit(0);
}
// Ask user if they want to update their local ground truths.
const shouldUpdateTruths = await confirm({
message: 'Do you want to update your local ground truths?',
});
// User cancelled the operation with `Ctrl+C` or `CMD+C`.
if (isCancel(shouldUpdateTruths)) {
cancel('Operation cancelled');
return process.exit(0);
}
if (shouldUpdateTruths) {
const defaultBaseBranch = 'main';
// Ask user for the base branch.
let baseBranch = await text({
message: 'Enter the base branch name:',
placeholder: `default: ${defaultBaseBranch}`,
})
// User cancelled the operation with `Ctrl+C` or `CMD+C`.
if (isCancel(baseBranch)) {
cancel('Operation cancelled');
return process.exit(0);
}
// User didn't provide a base branch.
if (!baseBranch) {
baseBranch = defaultBaseBranch;
}
/**
* The provided base branch needs to be fetched.
* This ensures that the local base branch is up-to-date with the
* remote base branch. Otherwise, there might be errors stating that
* certain files don't exist in the local base branch.
*/
const fetchBaseBranch = spinner();
// Inform the user that the base branch is being fetched.
fetchBaseBranch.start(`Fetching "${baseBranch}" to have the latest changes`);
// Fetch the base branch.
await execAsync(`git fetch origin ${baseBranch}`).catch((error) => {
fetchBaseBranch.stop(`Failed to fetch "${baseBranch}"`);
console.error(error);
return process.exit(0);
});
// Inform the user that the base branch has been fetched.
fetchBaseBranch.stop(`Fetched "${baseBranch}"`);
const updateGroundTruth = spinner();
// Inform the user that the local ground truths are being updated.
updateGroundTruth.start('Updating local ground truths');
// Check if user provided an existing file or directory.
const isValidLocation = fs.existsSync(componentValue);
// User provided an existing file or directory.
if (isValidLocation) {
const stats = fs.statSync(componentValue);
// User provided a file as the component.
// ex: `componentValue` = `src/components/chip/test/basic/chip.e2e.ts`
if (stats.isFile()) {
// Update the local ground truths for the provided path.
await execAsync(`git checkout origin/${baseBranch} -- ${componentValue}-snapshots/*-linux.png`).catch((error) => {
updateGroundTruth.stop('Failed to update local ground truths');
console.error(error);
return process.exit(0);
});
}
// User provided a directory as the component.
// ex: `componentValue` = `src/components/chip`
if (stats.isDirectory()) {
// Update the local ground truths for the provided directory.
await execAsync(`git checkout origin/${baseBranch} -- ${componentValue}/test/*/*.e2e.ts-snapshots/*-linux.png`).catch((error) => {
updateGroundTruth.stop('Failed to update local ground truths');
console.error(error);
return process.exit(0);
});
}
}
// User provided a component name as the component.
// ex: `componentValue` = `chip`
else if (componentValue) {
// Update the local ground truths for the provided component.
await execAsync(`git checkout origin/${baseBranch} -- src/components/${componentValue}/test/*/${componentValue}.e2e.ts-snapshots/*-linux.png`).catch((error) => {
updateGroundTruth.stop('Failed to update local ground truths');
console.error(error);
return process.exit(0);
});
}
// User provided an empty string.
else {
// Update the local ground truths for all components.
await execAsync(`git checkout origin/${baseBranch} -- src/components/*/test/*/*.e2e.ts-snapshots/*-linux.png`).catch((error) => {
updateGroundTruth.stop('Failed to update local ground truths');
console.error(error);
return process.exit(0);
});
}
// Inform the user that the local ground truths have been updated.
updateGroundTruth.stop('Updated local ground truths');
}
const buildCore = spinner();
// Inform the user that the core is being built.
buildCore.start('Building core');
/**
* Build core
* Otherwise, the uncommitted changes will not be reflected in the tests because:
* - popping the stash doesn't trigger a re-render even if `npm start` is running
* - app is not running the `npm start` command
*/
await execAsync('npm run build').catch((error) => {
// Clean up the local ground truths.
cleanUpFiles();
buildCore.stop('Failed to build core');
console.error(error);
return process.exit(0);
});
buildCore.stop('Built core');
const runE2ETests = spinner();
// Inform the user that the E2E tests are being run.
runE2ETests.start('Running E2E tests');
// User provided a component value.
if (componentValue) {
await execAsync(`npm run test.e2e.docker.ci ${componentValue}`).catch((error) => {
// Clean up the local ground truths.
cleanUpFiles();
runE2ETests.stop('Failed to run E2E tests');
console.error(error);
return process.exit(0);
});
} else {
await execAsync('npm run test.e2e.docker.ci').catch((error) => {
// Clean up the local ground truths.
cleanUpFiles();
runE2ETests.stop('Failed to run E2E tests');
console.error(error);
return process.exit(0);
});
}
runE2ETests.stop('Ran E2E tests');
// Clean up the local ground truths.
await cleanUpFiles();
// Ask user if they want to open the Playwright report.
const shouldOpenReport = await confirm({
message: 'Do you want to open the Playwright report?',
});
// User cancelled the operation with `Ctrl+C` or `CMD+C`.
if (isCancel(shouldOpenReport)) {
cancel('Operation cancelled');
return process.exit(0);
}
// User chose to open the Playwright report.
if (shouldOpenReport) {
// Use spawn to display the server information and the key to quit the server.
spawn('npx', ['playwright', 'show-report'], {
stdio: 'inherit',
});
} else {
// Inform the user that the Playwright report can be opened by running the following command.
log.info('If you change your mind, you can open the Playwright report by running the following command:');
log.info(color.bold('npx playwright show-report'));
}
if (shouldOpenReport) {
outro("You're all set! Don't forget to quit serving the Playwright report when you're done.");
} else {
outro("You're all set!");
}
await sleep(1000);
}
main().catch(console.error);

View File

@@ -14,20 +14,6 @@
document.head.appendChild(style);
}
/**
* The term `palette` is used to as a param to match the
* Ionic docs, plus here is already a `ionic:theme` query being
* used for `md`, `ios`, and `ionic` themes.
*/
const palette = window.location.search.match(/palette=([a-z]+)/);
if (palette && palette[1] !== 'light') {
const linkTag = document.createElement('link');
linkTag.setAttribute('rel', 'stylesheet');
linkTag.setAttribute('type', 'text/css');
linkTag.setAttribute('href', `/css/palettes/${palette[1]}.always.css`);
document.head.appendChild(linkTag);
}
window.Ionic = window.Ionic || {};
window.Ionic.config = window.Ionic.config || {};

View File

@@ -48,23 +48,3 @@ html.ios.ios {
--ion-font-family: -apple-system, BlinkMacSystemFont, "iosTestingFont", sans-serif;
font-family: -apple-system, BlinkMacSystemFont, "iosTestingFont", sans-serif;
}
ion-content button,
main button {
display: inline-block;
width: auto;
clear: both;
padding: 12px 8px;
font-size: 1em;
background: #008080;
border: 1px solid #005555;
color: #fff;
border-radius: 4px;
margin: 8px 0;
}
ion-content button.expand,
main button.expand {
display: block;
width: 100%;
}

View File

@@ -762,10 +762,6 @@ export namespace Components {
* The color to use from your application's color palette. Default options are: `"primary"`, `"secondary"`, `"tertiary"`, `"success"`, `"warning"`, `"danger"`, `"light"`, `"medium"`, and `"dark"`. For more information on colors, see [theming](/docs/theming/basics).
*/
"color"?: Color;
/**
* Controls where the fixed content is placed relative to the main content in the DOM. This can be used to control the order in which fixed elements receive keyboard focus. For example, if a FAB in the fixed slot should receive keyboard focus before the main page content, set this property to `'before'`.
*/
"fixedSlotPlacement": 'after' | 'before';
/**
* If `true` and the content does not cause an overflow scroll, the scroll interaction will cause a bounce. If the content exceeds the bounds of ionContent, nothing will change. Note, this does not disable the system bounce on iOS. That is an OS level setting.
*/
@@ -1166,10 +1162,6 @@ export namespace Components {
* If `true`, a clear icon will appear in the input when there is a value. Clicking it clears the input.
*/
"clearInput": boolean;
/**
* The icon to use for the clear button. Only applies when `clearInput` is set to `true`.
*/
"clearInputIcon"?: string;
/**
* If `true`, the value will be cleared after focus upon edit. Defaults to `true` when `type` is `"password"`, `false` for all other types.
*/
@@ -1723,10 +1715,6 @@ export namespace Components {
* Animation to use when the modal is presented.
*/
"enterAnimation"?: AnimationBuilder;
/**
* If `true`, focus will not be allowed to move outside of this overlay. If `false`, focus will be allowed to move outside of the overlay. In most scenarios this property should remain set to `true`. Setting this property to `false` can cause severe accessibility issues as users relying on assistive technologies may be able to move focus into a confusing state. We recommend only setting this to `false` when absolutely necessary. Developers may want to consider disabling focus trapping if this overlay presents a non-Ionic overlay from a 3rd party library. Developers would disable focus trapping on the Ionic overlay when presenting the 3rd party overlay and then re-enable focus trapping when dismissing the 3rd party overlay and moving focus back to the Ionic overlay.
*/
"focusTrap": boolean;
/**
* Returns the current breakpoint of a sheet style modal
*/
@@ -2143,10 +2131,6 @@ export namespace Components {
* The event to pass to the popover animation.
*/
"event": any;
/**
* If `true`, focus will not be allowed to move outside of this overlay. If `false`, focus will be allowed to move outside of the overlay. In most scenarios this property should remain set to `true`. Setting this property to `false` can cause severe accessibility issues as users relying on assistive technologies may be able to move focus into a confusing state. We recommend only setting this to `false` when absolutely necessary. Developers may want to consider disabling focus trapping if this overlay presents a non-Ionic overlay from a 3rd party library. Developers would disable focus trapping on the Ionic overlay when presenting the 3rd party overlay and then re-enable focus trapping when dismissing the 3rd party overlay and moving focus back to the Ionic overlay.
*/
"focusTrap": boolean;
"getParentPopover": () => Promise<HTMLIonPopoverElement | null>;
"hasController": boolean;
/**
@@ -4786,7 +4770,7 @@ declare namespace LocalJSX {
*/
"multiple"?: boolean;
/**
* Emitted when the value property has changed as a result of a user action such as a click. This event will not emit when programmatically setting the `value` property.
* Emitted when the value property has changed as a result of a user action such as a click. This event will not emit when programmatically setting the value property.
*/
"onIonChange"?: (event: IonAccordionGroupCustomEvent<AccordionGroupChangeEventDetail>) => void;
/**
@@ -5361,7 +5345,7 @@ declare namespace LocalJSX {
*/
"onIonBlur"?: (event: IonCheckboxCustomEvent<void>) => void;
/**
* Emitted when the checked property has changed as a result of a user action such as a click. This event will not emit when programmatically setting the `checked` property.
* Emitted when the checked property has changed as a result of a user action such as a click. This event will not emit when programmatically setting the checked property.
*/
"onIonChange"?: (event: IonCheckboxCustomEvent<CheckboxChangeEventDetail>) => void;
/**
@@ -5494,10 +5478,6 @@ declare namespace LocalJSX {
* The color to use from your application's color palette. Default options are: `"primary"`, `"secondary"`, `"tertiary"`, `"success"`, `"warning"`, `"danger"`, `"light"`, `"medium"`, and `"dark"`. For more information on colors, see [theming](/docs/theming/basics).
*/
"color"?: Color;
/**
* Controls where the fixed content is placed relative to the main content in the DOM. This can be used to control the order in which fixed elements receive keyboard focus. For example, if a FAB in the fixed slot should receive keyboard focus before the main page content, set this property to `'before'`.
*/
"fixedSlotPlacement"?: 'after' | 'before';
/**
* If `true` and the content does not cause an overflow scroll, the scroll interaction will cause a bounce. If the content exceeds the bounds of ionContent, nothing will change. Note, this does not disable the system bounce on iOS. That is an OS level setting.
*/
@@ -5621,7 +5601,7 @@ declare namespace LocalJSX {
*/
"onIonCancel"?: (event: IonDatetimeCustomEvent<void>) => void;
/**
* Emitted when the value (selected date) has changed. This event will not emit when programmatically setting the `value` property.
* Emitted when the value (selected date) has changed.
*/
"onIonChange"?: (event: IonDatetimeCustomEvent<DatetimeChangeEventDetail>) => void;
/**
@@ -5906,10 +5886,6 @@ declare namespace LocalJSX {
* If `true`, a clear icon will appear in the input when there is a value. Clicking it clears the input.
*/
"clearInput"?: boolean;
/**
* The icon to use for the clear button. Only applies when `clearInput` is set to `true`.
*/
"clearInputIcon"?: string;
/**
* If `true`, the value will be cleared after focus upon edit. Defaults to `true` when `type` is `"password"`, `false` for all other types.
*/
@@ -5995,7 +5971,7 @@ declare namespace LocalJSX {
*/
"onIonBlur"?: (event: IonInputCustomEvent<FocusEvent>) => void;
/**
* The `ionChange` event is fired when the user modifies the input's value. Unlike the `ionInput` event, the `ionChange` event is only fired when changes are committed, not as the user types. Depending on the way the users interacts with the element, the `ionChange` event fires at a different moment: - When the user commits the change explicitly (e.g. by selecting a date from a date picker for `<ion-input type="date">`, pressing the "Enter" key, etc.). - When the element loses focus after its value has changed: for elements where the user's interaction is typing. This event will not emit when programmatically setting the `value` property.
* The `ionChange` event is fired when the user modifies the input's value. Unlike the `ionInput` event, the `ionChange` event is only fired when changes are committed, not as the user types. Depending on the way the users interacts with the element, the `ionChange` event fires at a different moment: - When the user commits the change explicitly (e.g. by selecting a date from a date picker for `<ion-input type="date">`, pressing the "Enter" key, etc.). - When the element loses focus after its value has changed: for elements where the user's interaction is typing.
*/
"onIonChange"?: (event: IonInputCustomEvent<InputChangeEventDetail>) => void;
/**
@@ -6465,10 +6441,6 @@ declare namespace LocalJSX {
* Animation to use when the modal is presented.
*/
"enterAnimation"?: AnimationBuilder;
/**
* If `true`, focus will not be allowed to move outside of this overlay. If `false`, focus will be allowed to move outside of the overlay. In most scenarios this property should remain set to `true`. Setting this property to `false` can cause severe accessibility issues as users relying on assistive technologies may be able to move focus into a confusing state. We recommend only setting this to `false` when absolutely necessary. Developers may want to consider disabling focus trapping if this overlay presents a non-Ionic overlay from a 3rd party library. Developers would disable focus trapping on the Ionic overlay when presenting the 3rd party overlay and then re-enable focus trapping when dismissing the 3rd party overlay and moving focus back to the Ionic overlay.
*/
"focusTrap"?: boolean;
/**
* The horizontal line that displays at the top of a sheet modal. It is `true` by default when setting the `breakpoints` and `initialBreakpoint` properties.
*/
@@ -6648,7 +6620,7 @@ declare namespace LocalJSX {
*/
"numericInput"?: boolean;
/**
* Emitted when the value has changed. This event will not emit when programmatically setting the `value` property.
* Emitted when the value has changed.
*/
"onIonChange"?: (event: IonPickerColumnCustomEvent<PickerColumnChangeEventDetail>) => void;
/**
@@ -6815,10 +6787,6 @@ declare namespace LocalJSX {
* The event to pass to the popover animation.
*/
"event"?: any;
/**
* If `true`, focus will not be allowed to move outside of this overlay. If `false`, focus will be allowed to move outside of the overlay. In most scenarios this property should remain set to `true`. Setting this property to `false` can cause severe accessibility issues as users relying on assistive technologies may be able to move focus into a confusing state. We recommend only setting this to `false` when absolutely necessary. Developers may want to consider disabling focus trapping if this overlay presents a non-Ionic overlay from a 3rd party library. Developers would disable focus trapping on the Ionic overlay when presenting the 3rd party overlay and then re-enable focus trapping when dismissing the 3rd party overlay and moving focus back to the Ionic overlay.
*/
"focusTrap"?: boolean;
"hasController"?: boolean;
/**
* Additional attributes to pass to the popover.
@@ -6993,7 +6961,7 @@ declare namespace LocalJSX {
*/
"name"?: string;
/**
* Emitted when the value has changed. This event will not emit when programmatically setting the `value` property.
* Emitted when the value has changed.
*/
"onIonChange"?: (event: IonRadioGroupCustomEvent<RadioGroupChangeEventDetail>) => void;
/**
@@ -7055,7 +7023,7 @@ declare namespace LocalJSX {
*/
"onIonBlur"?: (event: IonRangeCustomEvent<void>) => void;
/**
* The `ionChange` event is fired for `<ion-range>` elements when the user modifies the element's value: - When the user releases the knob after dragging; - When the user moves the knob with keyboard arrows This event will not emit when programmatically setting the `value` property.
* The `ionChange` event is fired for `<ion-range>` elements when the user modifies the element's value: - When the user releases the knob after dragging; - When the user moves the knob with keyboard arrows `ionChange` is not fired when the value is changed programmatically.
*/
"onIonChange"?: (event: IonRangeCustomEvent<RangeChangeEventDetail>) => void;
/**
@@ -7356,7 +7324,7 @@ declare namespace LocalJSX {
*/
"onIonCancel"?: (event: IonSearchbarCustomEvent<void>) => void;
/**
* The `ionChange` event is fired for `<ion-searchbar>` elements when the user modifies the element's value. Unlike the `ionInput` event, the `ionChange` event is not necessarily fired for each alteration to an element's value. The `ionChange` event is fired when the value has been committed by the user. This can happen when the element loses focus or when the "Enter" key is pressed. `ionChange` can also fire when clicking the clear or cancel buttons. This event will not emit when programmatically setting the `value` property.
* The `ionChange` event is fired for `<ion-searchbar>` elements when the user modifies the element's value. Unlike the `ionInput` event, the `ionChange` event is not necessarily fired for each alteration to an element's value. The `ionChange` event is fired when the value has been committed by the user. This can happen when the element loses focus or when the "Enter" key is pressed. `ionChange` can also fire when clicking the clear or cancel buttons.
*/
"onIonChange"?: (event: IonSearchbarCustomEvent<SearchbarChangeEventDetail>) => void;
/**
@@ -7418,7 +7386,7 @@ declare namespace LocalJSX {
*/
"mode"?: "ios" | "md";
/**
* Emitted when the value property has changed and any dragging pointer has been released from `ion-segment`. This event will not emit when programmatically setting the `value` property.
* Emitted when the value property has changed and any dragging pointer has been released from `ion-segment`.
*/
"onIonChange"?: (event: IonSegmentCustomEvent<SegmentChangeEventDetail>) => void;
/**
@@ -7538,7 +7506,7 @@ declare namespace LocalJSX {
*/
"onIonCancel"?: (event: IonSelectCustomEvent<void>) => void;
/**
* Emitted when the value has changed. This event will not emit when programmatically setting the `value` property.
* Emitted when the value has changed.
*/
"onIonChange"?: (event: IonSelectCustomEvent<SelectChangeEventDetail>) => void;
/**
@@ -7841,7 +7809,7 @@ declare namespace LocalJSX {
*/
"onIonBlur"?: (event: IonTextareaCustomEvent<FocusEvent>) => void;
/**
* The `ionChange` event is fired when the user modifies the textarea's value. Unlike the `ionInput` event, the `ionChange` event is fired when the element loses focus after its value has been modified. This event will not emit when programmatically setting the `value` property.
* The `ionChange` event is fired when the user modifies the textarea's value. Unlike the `ionInput` event, the `ionChange` event is fired when the element loses focus after its value has been modified.
*/
"onIonChange"?: (event: IonTextareaCustomEvent<TextareaChangeEventDetail>) => void;
/**
@@ -8060,7 +8028,7 @@ declare namespace LocalJSX {
*/
"onIonBlur"?: (event: IonToggleCustomEvent<void>) => void;
/**
* Emitted when the user switches the toggle on or off. This event will not emit when programmatically setting the `checked` property.
* Emitted when the user switches the toggle on or off. Does not emit when programmatically changing the value of the `checked` property.
*/
"onIonChange"?: (event: IonToggleCustomEvent<ToggleChangeEventDetail>) => void;
/**

View File

@@ -59,9 +59,10 @@ export class AccordionGroup implements ComponentInterface {
@Prop() expand: 'compact' | 'inset' = 'compact';
/**
* Emitted when the value property has changed as a result of a user action such as a click.
*
* This event will not emit when programmatically setting the `value` property.
* Emitted when the value property has changed
* as a result of a user action such as a click.
* This event will not emit when programmatically setting
* the value property.
*/
@Event() ionChange!: EventEmitter<AccordionGroupChangeEventDetail>;

View File

@@ -4,10 +4,10 @@
// --------------------------------------------------
/// @prop - Border radius applied to the accordion
$accordion-md-border-radius: 6px;
$accordion-md-border-radius: 6px !default;
/// @prop - Box shadow of the accordion
$accordion-md-box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);
$accordion-md-box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12) !default;
/// @prop - Margin of the expanded accordion
$accordion-md-expanded-margin: 16px;
$accordion-md-expanded-margin: 16px !default;

View File

@@ -4,16 +4,16 @@
// --------------------------------------------------
/// @prop - Background color of the accordion
$accordion-background-color: var(--ion-background-color, #ffffff);
$accordion-background-color: var(--ion-background-color, #ffffff) !default;
/// @prop - Duration of the accordion transition
$accordion-transition-duration: 300ms;
$accordion-transition-duration: 300ms !default;
/// @prop - Timing function of the accordion transition
$accordion-transition-easing: cubic-bezier(0.25, 0.8, 0.5, 1);
$accordion-transition-easing: cubic-bezier(0.25, 0.8, 0.5, 1) !default;
/// @prop - Opacity of the disabled accordion
$accordion-disabled-opacity: 0.4;
$accordion-disabled-opacity: 0.4 !default;
/// @prop - Margin of the inset accordion
$accordion-inset-margin: 16px;
$accordion-inset-margin: 16px !default;

View File

@@ -3,11 +3,10 @@ import { configs, test } from '@utils/test/playwright';
configs().forEach(({ config, title }) => {
test.describe(title('accordion: a11y'), () => {
// TODO(ROU-8157): remove skip once the keyboard navigation is working again
test.skip('accordions should be keyboard navigable', async ({ page, skip, browserName }) => {
// TODO(ROU-5358): remove skip once issue is resolved
test('accordions should be keyboard navigable', async ({ page, skip, browserName }) => {
// TODO(FW-1764): remove skip once issue is resolved
skip.browser('firefox', 'https://github.com/ionic-team/ionic-framework/issues/25070');
// TODO (ROU-5437)
// TODO (FW-2979)
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);

View File

@@ -2,7 +2,7 @@
<html lang="en" dir="ltr">
<head>
<meta charset="UTF-8" />
<title>Accordion - Standalone</title>
<title>Accordion - Basic</title>
<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="../../../../../scripts/testing/styles.css" rel="stylesheet" />
@@ -119,7 +119,6 @@
outline: none;
text-align: left;
padding: 20px 16px;
color: black;
}
.custom-accordion-content {

View File

@@ -4,145 +4,145 @@
// --------------------------------------------------
/// @prop - Text align of the action sheet
$action-sheet-ios-text-align: center;
$action-sheet-ios-text-align: center !default;
/// @prop - Padding top of the action sheet
$action-sheet-ios-padding-top: 0;
$action-sheet-ios-padding-top: 0 !default;
/// @prop - Padding end of the action sheet
$action-sheet-ios-padding-end: 8px;
$action-sheet-ios-padding-end: 8px !default;
/// @prop - Padding bottom of the action sheet
$action-sheet-ios-padding-bottom: $action-sheet-ios-padding-top;
$action-sheet-ios-padding-bottom: $action-sheet-ios-padding-top !default;
/// @prop - Padding start of the action sheet
$action-sheet-ios-padding-start: $action-sheet-ios-padding-end;
$action-sheet-ios-padding-start: $action-sheet-ios-padding-end !default;
/// @prop - Top margin of the action sheet button group
$action-sheet-ios-group-margin-top: 10px;
$action-sheet-ios-group-margin-top: 10px !default;
/// @prop - Bottom margin of the action sheet button group
$action-sheet-ios-group-margin-bottom: 10px;
$action-sheet-ios-group-margin-bottom: 10px !default;
/// @prop - Background color of the action sheet
$action-sheet-ios-background-color: $overlay-ios-background-color;
$action-sheet-ios-background-color: $overlay-ios-background-color !default;
/// @prop - Border radius of the action sheet
$action-sheet-ios-border-radius: 13px;
$action-sheet-ios-border-radius: 13px !default;
// Action Sheet Title
// --------------------------------------------------
/// @prop - Padding top of the action sheet title
$action-sheet-ios-title-padding-top: 14px;
$action-sheet-ios-title-padding-top: 14px !default;
/// @prop - Padding end of the action sheet title
$action-sheet-ios-title-padding-end: 10px;
$action-sheet-ios-title-padding-end: 10px !default;
/// @prop - Padding bottom of the action sheet title
$action-sheet-ios-title-padding-bottom: 13px;
$action-sheet-ios-title-padding-bottom: 13px !default;
/// @prop - Padding start of the action sheet title
$action-sheet-ios-title-padding-start: $action-sheet-ios-title-padding-end;
$action-sheet-ios-title-padding-start: $action-sheet-ios-title-padding-end !default;
/// @prop - Color of the action sheet title
$action-sheet-ios-title-color: $text-color-step-600;
$action-sheet-ios-title-color: $text-color-step-600 !default;
/// @prop - Font size of the action sheet title
$action-sheet-ios-title-font-size: dynamic-font-min(1, 13px);
$action-sheet-ios-title-font-size: dynamic-font-min(1, 13px) !default;
/// @prop - Font weight of the action sheet title
$action-sheet-ios-title-font-weight: 400;
$action-sheet-ios-title-font-weight: 400 !default;
/// @prop - Font weight of the action sheet title when it has a sub title
$action-sheet-ios-title-with-sub-title-font-weight: 600;
$action-sheet-ios-title-with-sub-title-font-weight: 600 !default;
// Action Sheet Subtitle
// --------------------------------------------------
/// @prop - Font size of the action sheet sub title
$action-sheet-ios-sub-title-font-size: dynamic-font-min(1, 13px);
$action-sheet-ios-sub-title-font-size: dynamic-font-min(1, 13px) !default;
/// @prop - Padding top of the action sheet sub title
$action-sheet-ios-sub-title-padding-top: 6px;
$action-sheet-ios-sub-title-padding-top: 6px !default;
/// @prop - Padding end of the action sheet sub title
$action-sheet-ios-sub-title-padding-end: 0;
$action-sheet-ios-sub-title-padding-end: 0 !default;
/// @prop - Padding bottom of the action sheet sub title
$action-sheet-ios-sub-title-padding-bottom: 0;
$action-sheet-ios-sub-title-padding-bottom: 0 !default;
/// @prop - Padding start of the action sheet sub title
$action-sheet-ios-sub-title-padding-start: $action-sheet-ios-sub-title-padding-end;
$action-sheet-ios-sub-title-padding-start: $action-sheet-ios-sub-title-padding-end !default;
// Action Sheet Button
// --------------------------------------------------
/// @prop - Minimum height of the action sheet button
$action-sheet-ios-button-height: 56px;
$action-sheet-ios-button-height: 56px !default;
/// @prop - Padding of the action sheet button
$action-sheet-ios-button-padding: 14px;
$action-sheet-ios-button-padding: 14px !default;
/// @prop - Text color of the action sheet button
$action-sheet-ios-button-text-color: ion-color(primary, base);
$action-sheet-ios-button-text-color: ion-color(primary, base) !default;
/// @prop - Font size of the action sheet button icon
$action-sheet-ios-button-icon-font-size: dynamic-font-min(1, 28px);
$action-sheet-ios-button-icon-font-size: dynamic-font-min(1, 28px) !default;
/// @prop - Padding right of the action sheet button icon
$action-sheet-ios-button-icon-padding-right: .3em;
$action-sheet-ios-button-icon-padding-right: .3em !default;
/// @prop - Font size of the action sheet button
$action-sheet-ios-button-font-size: dynamic-font-min(1, 20px);
$action-sheet-ios-button-font-size: dynamic-font-min(1, 20px) !default;
/// @prop - Border color alpha of the action sheet button
$action-sheet-ios-button-border-color-alpha: .08;
$action-sheet-ios-button-border-color-alpha: .08 !default;
/// @prop - Border color of the action sheet button
$action-sheet-ios-button-border-color: rgba($text-color-rgb, $action-sheet-ios-button-border-color-alpha);
$action-sheet-ios-button-border-color: rgba($text-color-rgb, $action-sheet-ios-button-border-color-alpha) !default;
/// @prop - Background color of the action sheet button
$action-sheet-ios-button-background: linear-gradient(0deg, $action-sheet-ios-button-border-color, $action-sheet-ios-button-border-color 50%, transparent 50%) bottom / 100% 1px no-repeat transparent;
$action-sheet-ios-button-background: linear-gradient(0deg, $action-sheet-ios-button-border-color, $action-sheet-ios-button-border-color 50%, transparent 50%) bottom / 100% 1px no-repeat transparent !default;
/// @prop - Background color of the activated action sheet button
$action-sheet-ios-button-background-activated: $text-color;
$action-sheet-ios-button-background-activated: $text-color !default;
/// @prop - Background color of the selected action sheet button
$action-sheet-ios-button-background-selected: var(--ion-color-step-150, var(--ion-background-color-step-150, $background-color));
$action-sheet-ios-button-background-selected: var(--ion-color-step-150, var(--ion-background-color-step-150, $background-color)) !default;
/// @prop - Destructive text color of the action sheet button
$action-sheet-ios-button-destructive-text-color: ion-color(danger, base);
$action-sheet-ios-button-destructive-text-color: ion-color(danger, base) !default;
/// @prop - Font weight of the action sheet cancel button
$action-sheet-ios-button-cancel-font-weight: 600;
$action-sheet-ios-button-cancel-font-weight: 600 !default;
// Action Sheet Translucent
// --------------------------------------------------
/// @prop - Background color alpha of the action sheet when translucent
$action-sheet-ios-translucent-background-color-alpha: .8;
$action-sheet-ios-translucent-background-color-alpha: .8 !default;
/// @prop - Background color of the action sheet when translucent
$action-sheet-ios-translucent-background-color: rgba($background-color-rgb, $action-sheet-ios-translucent-background-color-alpha);
$action-sheet-ios-translucent-background-color: rgba($background-color-rgb, $action-sheet-ios-translucent-background-color-alpha) !default;
/// @prop - Border color alpha of the action sheet when translucent
$action-sheet-ios-translucent-border-color-alpha: .4;
$action-sheet-ios-translucent-border-color-alpha: .4 !default;
/// @prop - Border color of the action sheet when translucent
$action-sheet-ios-translucent-border-color: rgba($background-color-rgb, $action-sheet-ios-translucent-border-color-alpha);
$action-sheet-ios-translucent-border-color: rgba($background-color-rgb, $action-sheet-ios-translucent-border-color-alpha) !default;
/// @prop - Background color alpha of the activated action sheet when translucent
$action-sheet-ios-translucent-background-color-activated-alpha: .7;
$action-sheet-ios-translucent-background-color-activated-alpha: .7 !default;
/// @prop - Background color of the activated action sheet when translucent
$action-sheet-ios-translucent-background-color-activated: rgba($background-color-rgb, $action-sheet-ios-translucent-background-color-activated-alpha);
$action-sheet-ios-translucent-background-color-activated: rgba($background-color-rgb, $action-sheet-ios-translucent-background-color-activated-alpha) !default;
/// @prop - Filter of the translucent action-sheet group
$action-sheet-ios-group-translucent-filter: saturate(280%) blur(20px);
$action-sheet-ios-group-translucent-filter: saturate(280%) blur(20px) !default;
/// @prop - Filter of the translucent action-sheet button
$action-sheet-ios-button-translucent-filter: saturate(120%);
$action-sheet-ios-button-translucent-filter: saturate(120%) !default;

View File

@@ -4,100 +4,100 @@
// --------------------------------------------------
/// @prop - Text align of the action sheet
$action-sheet-md-text-align: start;
$action-sheet-md-text-align: start !default;
/// @prop - Background color of the action sheet
$action-sheet-md-background-color: $overlay-md-background-color;
$action-sheet-md-background-color: $overlay-md-background-color !default;
/// @prop - Padding top of the action sheet
$action-sheet-md-padding-top: 0;
$action-sheet-md-padding-top: 0 !default;
/// @prop - Padding bottom of the action sheet
$action-sheet-md-padding-bottom: var(--ion-safe-area-bottom);
$action-sheet-md-padding-bottom: var(--ion-safe-area-bottom) !default;
// Action Sheet Title
// --------------------------------------------------
/// @prop - Height of the action sheet title
$action-sheet-md-title-height: 60px;
$action-sheet-md-title-height: 60px !default;
/// @prop - Color of the action sheet title
$action-sheet-md-title-color: rgba($text-color-rgb, 0.54);
$action-sheet-md-title-color: rgba($text-color-rgb, 0.54) !default;
/// @prop - Font size of the action sheet title
$action-sheet-md-title-font-size: dynamic-font(16px);
$action-sheet-md-title-font-size: dynamic-font(16px) !default;
/// @prop - Padding top of the action sheet title
$action-sheet-md-title-padding-top: 20px;
$action-sheet-md-title-padding-top: 20px !default;
/// @prop - Padding end of the action sheet title
$action-sheet-md-title-padding-end: 16px;
$action-sheet-md-title-padding-end: 16px !default;
/// @prop - Padding bottom of the action sheet title
$action-sheet-md-title-padding-bottom: 17px;
$action-sheet-md-title-padding-bottom: 17px !default;
/// @prop - Padding start of the action sheet title
$action-sheet-md-title-padding-start: $action-sheet-md-title-padding-end;
$action-sheet-md-title-padding-start: $action-sheet-md-title-padding-end !default;
// Action Sheet Subtitle
// --------------------------------------------------
/// @prop - Font size of the action sheet sub title
$action-sheet-md-sub-title-font-size: dynamic-font(14px);
$action-sheet-md-sub-title-font-size: dynamic-font(14px) !default;
/// @prop - Padding top of the action sheet sub title
$action-sheet-md-sub-title-padding-top: 16px;
$action-sheet-md-sub-title-padding-top: 16px !default;
/// @prop - Padding end of the action sheet sub title
$action-sheet-md-sub-title-padding-end: 0;
$action-sheet-md-sub-title-padding-end: 0 !default;
/// @prop - Padding bottom of the action sheet sub title
$action-sheet-md-sub-title-padding-bottom: 0;
$action-sheet-md-sub-title-padding-bottom: 0 !default;
/// @prop - Padding start of the action sheet sub title
$action-sheet-md-sub-title-padding-start: $action-sheet-md-sub-title-padding-end;
$action-sheet-md-sub-title-padding-start: $action-sheet-md-sub-title-padding-end !default;
// Action Sheet Button
// --------------------------------------------------
/// @prop - Minimum height of the action sheet button
$action-sheet-md-button-height: 52px;
$action-sheet-md-button-height: 52px !default;
/// @prop - Text color of the action sheet button
$action-sheet-md-button-text-color: $text-color-step-150;
$action-sheet-md-button-text-color: $text-color-step-150 !default;
/// @prop - Font size of the action sheet button
$action-sheet-md-button-font-size: dynamic-font(16px);
$action-sheet-md-button-font-size: dynamic-font(16px) !default;
/// @prop - Padding top of the action sheet button
$action-sheet-md-button-padding-top: 12px;
$action-sheet-md-button-padding-top: 12px !default;
/// @prop - Padding end of the action sheet button
$action-sheet-md-button-padding-end: 16px;
$action-sheet-md-button-padding-end: 16px !default;
/// @prop - Padding bottom of the action sheet button
$action-sheet-md-button-padding-bottom: $action-sheet-md-button-padding-top;
$action-sheet-md-button-padding-bottom: $action-sheet-md-button-padding-top !default;
/// @prop - Padding start of the action sheet button
$action-sheet-md-button-padding-start: $action-sheet-md-button-padding-end;
$action-sheet-md-button-padding-start: $action-sheet-md-button-padding-end !default;
// Action Sheet Icon
// --------------------------------------------------
/// @prop - Font size of the icon in the action sheet button
$action-sheet-md-icon-font-size: dynamic-font(24px);
$action-sheet-md-icon-font-size: dynamic-font(24px) !default;
/// @prop - Margin top of the icon in the action sheet button
$action-sheet-md-icon-margin-top: 0;
$action-sheet-md-icon-margin-top: 0 !default;
/// @prop - Margin end of the icon in the action sheet button
$action-sheet-md-icon-margin-end: 32px;
$action-sheet-md-icon-margin-end: 32px !default;
/// @prop - Margin bottom of the icon in the action sheet button
$action-sheet-md-icon-margin-bottom: 0;
$action-sheet-md-icon-margin-bottom: 0 !default;
/// @prop - Margin start of the icon in the action sheet button
$action-sheet-md-icon-margin-start: 0;
$action-sheet-md-icon-margin-start: 0 !default;

View File

@@ -4,7 +4,7 @@
// --------------------------------------------------
/// @prop - Width of the action sheet
$action-sheet-width: 100%;
$action-sheet-width: 100% !default;
/// @prop - Maximum width of the action sheet
$action-sheet-max-width: 500px;
$action-sheet-max-width: 500px !default;

View File

@@ -19,14 +19,14 @@
<main class="ion-padding">
<h1>Action Sheet - A11y</h1>
<button class="expand" id="bothHeaders" onclick="presentBothHeaders()">Both Headers</button>
<button class="expand" id="subHeaderOnly" onclick="presentSubHeaderOnly()">Subheader Only</button>
<button class="expand" id="noHeaders" onclick="presentNoHeaders()">No Headers</button>
<button class="expand" id="customAria" onclick="presentCustomAria()">Custom Aria</button>
<button class="expand" id="ariaLabelButton" onclick="presentAriaLabelButton()">Aria Label Button</button>
<button class="expand" id="ariaLabelCancelButton" onclick="presentAriaLabelCancelButton()">
Aria Label Cancel Button
</button>
<ion-button id="bothHeaders" onclick="presentBothHeaders()">Both Headers</ion-button>
<ion-button id="subHeaderOnly" onclick="presentSubHeaderOnly()">Subheader Only</ion-button>
<ion-button id="noHeaders" onclick="presentNoHeaders()">No Headers</ion-button>
<ion-button id="customAria" onclick="presentCustomAria()">Custom Aria</ion-button>
<ion-button id="ariaLabelButton" onclick="presentAriaLabelButton()">Aria Label Button</ion-button>
<ion-button id="ariaLabelCancelButton" onclick="presentAriaLabelCancelButton()"
>Aria Label Cancel Button</ion-button
>
</main>
<script>

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

After

Width:  |  Height:  |  Size: 34 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 42 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 28 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

After

Width:  |  Height:  |  Size: 34 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 42 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 28 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 35 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 46 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 28 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 35 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 46 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 28 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 34 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 42 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 31 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 34 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 42 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 31 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 29 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 42 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 27 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 29 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 42 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 27 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 37 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 43 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 31 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 37 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 43 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 31 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 34 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 46 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 29 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 34 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 46 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 29 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 30 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 30 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

View File

@@ -27,18 +27,24 @@
</ion-header>
<ion-content class="ion-padding">
<button class="expand" id="basic" onclick="presentBasic()">Basic</button>
<button class="expand" id="alertFromActionSheet" onclick="presentAlert()">Alert from Action Sheet</button>
<button class="expand" id="cancelOnly" onclick="presentCancelOnly()">Cancel Only</button>
<button class="expand" id="custom" onclick="presentWithCssClass()">Custom CSS Class</button>
<button class="expand" id="icons" onclick="presentIcons()">Icons</button>
<button class="expand" id="noBackdropDismiss" onclick="presentNoBackdropDismiss()">No Backdrop Dismiss</button>
<button class="expand" id="scrollableOptions" onclick="presentScroll()">Scrollable Options</button>
<button class="expand" id="scrollWithoutCancel" onclick="presentScrollNoCancel()">Scroll Without Cancel</button>
<button class="expand" id="customBackdrop" onclick="presentWithCssClass('custom-backdrop')">
Custom Backdrop Opacity
</button>
<button class="expand" id="buttonData" onclick="presentWithButtonData()">Button data</button>
<ion-button expand="block" id="basic" onclick="presentBasic()">Basic</ion-button>
<ion-button expand="block" id="alertFromActionSheet" onclick="presentAlert()"
>Alert from Action Sheet</ion-button
>
<ion-button expand="block" id="cancelOnly" onclick="presentCancelOnly()">Cancel Only</ion-button>
<ion-button expand="block" id="custom" onclick="presentWithCssClass()">Custom CSS Class</ion-button>
<ion-button expand="block" id="icons" onclick="presentIcons()">Icons</ion-button>
<ion-button expand="block" id="noBackdropDismiss" onclick="presentNoBackdropDismiss()"
>No Backdrop Dismiss</ion-button
>
<ion-button expand="block" id="scrollableOptions" onclick="presentScroll()">Scrollable Options</ion-button>
<ion-button expand="block" id="scrollWithoutCancel" onclick="presentScrollNoCancel()"
>Scroll Without Cancel</ion-button
>
<ion-button expand="block" id="customBackdrop" onclick="presentWithCssClass('custom-backdrop')"
>Custom Backdrop Opacity</ion-button
>
<ion-button expand="block" id="buttonData" onclick="presentWithButtonData()">Button data</ion-button>
</ion-content>
</ion-app>

View File

@@ -47,11 +47,11 @@
<div class="grid">
<div class="grid-item">
<h2>Default</h2>
<button id="default" onclick="openActionSheet()">Open ActionSheet</button>
<ion-button id="default" onclick="openActionSheet()">Open ActionSheet</ion-button>
</div>
<div class="grid-item">
<h2>Open, then close after 500ms</h2>
<button id="timeout" onclick="openActionSheet(500)">Open ActionSheet</button>
<ion-button id="timeout" onclick="openActionSheet(500)">Open ActionSheet</ion-button>
</div>
</div>

View File

@@ -18,16 +18,28 @@
window.actionSheetController = actionSheetController;
</script>
<body>
<main>
<button class="expand" id="basic" onclick="presentBasic()">Basic</button>
<button class="expand" id="noBackdropDismiss" onclick="presentNoBackdropDismiss()">No Backdrop Dismiss</button>
<button class="expand" id="alertFromActionSheet" onclick="presentAlert()">Alert from Action Sheet</button>
<button class="expand" id="scrollableOptions" onclick="presentScroll()">Scrollable Options</button>
<button class="expand" id="scrollWithoutCancel" onclick="presentScrollNoCancel()">Scroll Without Cancel</button>
<button class="expand" id="cancelOnly" onclick="presentCancelOnly()">Cancel Only</button>
<button class="expand" id="icons" onclick="presentIcons()">Icons</button>
<button class="expand" id="cssClass" onclick="presentWithCssClass()">Custom CSS Class</button>
</main>
<button id="basic" onclick="presentBasic()">Basic</button>
<button id="noBackdropDismiss" onclick="presentNoBackdropDismiss()">No Backdrop Dismiss</button>
<button id="alertFromActionSheet" onclick="presentAlert()">Alert from Action Sheet</button>
<button id="scrollableOptions" onclick="presentScroll()">Scrollable Options</button>
<button id="scrollWithoutCancel" onclick="presentScrollNoCancel()">Scroll Without Cancel</button>
<button id="cancelOnly" onclick="presentCancelOnly()">Cancel Only</button>
<button id="icons" onclick="presentIcons()">Icons</button>
<button id="cssClass" onclick="presentWithCssClass()">Custom CSS Class</button>
<style>
body > button {
display: block;
clear: both;
width: 100%;
padding: 12px 8px;
font-size: 1em;
background: #f8f8f8;
border: 1px solid #eee;
border-radius: 4px;
margin-bottom: 8px;
}
</style>
<script>
window.addEventListener('ionActionSheetDidDismiss', function (e) {

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 57 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 45 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 32 KiB

View File

@@ -12,50 +12,6 @@
<script src="../../../../../scripts/testing/scripts.js"></script>
<script nomodule src="../../../../../dist/ionic/ionic.js"></script>
<script type="module" src="../../../../../dist/ionic/ionic.esm.js"></script>
<style>
f {
display: block;
width: 100%;
height: 150px;
}
.red {
background-color: #ea445a;
}
.green {
background-color: #76d672;
}
.blue {
background-color: #3478f6;
}
.yellow {
background-color: #ffff80;
}
.pink {
background-color: #ff6b86;
}
.purple {
background-color: #7e34f6;
}
.black {
background-color: #000;
}
.fuchsia {
background-color: #cc00ff;
}
.orange {
background-color: #f69234;
}
</style>
</head>
<script type="module">
import { actionSheetController } from '../../../../dist/ionic/index.esm.js';
@@ -70,12 +26,18 @@
</ion-header>
<ion-content class="ion-padding">
<button class="expand" id="basic" onclick="presentBasic()">Basic</button>
<button class="expand" id="noBackdropDismiss" onclick="presentNoBackdropDismiss()">No Backdrop Dismiss</button>
<button class="expand" id="alertFromActionSheet" onclick="presentAlert()">Alert from Action Sheet</button>
<button class="expand" id="scrollableOptions" onclick="presentScroll()">Scrollable Options</button>
<button class="expand" id="scrollWithoutCancel" onclick="presentScrollNoCancel()">Scroll Without Cancel</button>
<button class="expand" id="cancelOnly" onclick="presentCancelOnly()">Cancel Only</button>
<ion-button expand="block" id="basic" onclick="presentBasic()">Basic</ion-button>
<ion-button expand="block" id="noBackdropDismiss" onclick="presentNoBackdropDismiss()"
>No Backdrop Dismiss</ion-button
>
<ion-button expand="block" id="alertFromActionSheet" onclick="presentAlert()"
>Alert from Action Sheet</ion-button
>
<ion-button expand="block" id="scrollableOptions" onclick="presentScroll()">Scrollable Options</ion-button>
<ion-button expand="block" id="scrollWithoutCancel" onclick="presentScrollNoCancel()"
>Scroll Without Cancel</ion-button
>
<ion-button expand="block" id="cancelOnly" onclick="presentCancelOnly()">Cancel Only</ion-button>
<ion-grid>
<ion-row>
@@ -383,5 +345,49 @@
});
}
</script>
<style>
f {
display: block;
width: 100%;
height: 150px;
}
.red {
background-color: #ea445a;
}
.green {
background-color: #76d672;
}
.blue {
background-color: #3478f6;
}
.yellow {
background-color: #ffff80;
}
.pink {
background-color: #ff6b86;
}
.purple {
background-color: #7e34f6;
}
.black {
background-color: #000;
}
.fuchsia {
background-color: #cc00ff;
}
.orange {
background-color: #f69234;
}
</style>
</body>
</html>

View File

@@ -47,11 +47,11 @@
<div class="grid">
<div class="grid-item">
<h2>Default</h2>
<button id="default">Open ActionSheet</button>
<ion-button id="default">Open ActionSheet</ion-button>
</div>
<div class="grid-item">
<h2>Open, then close after 500ms</h2>
<button id="timeout">Open ActionSheet</button>
<ion-button id="timeout">Open ActionSheet</ion-button>
</div>
</div>

View File

@@ -6,136 +6,136 @@
// --------------------------------------------------
/// @prop - Font size of the alert
$alert-ios-font-size: dynamic-font-min(1, 14px);
$alert-ios-font-size: dynamic-font-min(1, 14px) !default;
/// @prop - Max width of the alert
$alert-ios-max-width: dynamic-font-clamp(1, 270px, 1.2);
$alert-ios-max-width: dynamic-font-clamp(1, 270px, 1.2) !default;
/// @prop - Border radius of the alert
$alert-ios-border-radius: 13px;
$alert-ios-border-radius: 13px !default;
/// @prop - Background color of the alert
$alert-ios-background-color: $overlay-ios-background-color;
$alert-ios-background-color: $overlay-ios-background-color !default;
/// @prop - Background color alpha of the alert when translucent
$alert-ios-translucent-background-color-alpha: .9;
$alert-ios-translucent-background-color-alpha: .9 !default;
/// @prop - Background color of the alert when translucent
$alert-ios-translucent-background-color: rgba($background-color-rgb, $alert-ios-translucent-background-color-alpha);
$alert-ios-translucent-background-color: rgba($background-color-rgb, $alert-ios-translucent-background-color-alpha) !default;
/// @prop - Box shadow of the alert
$alert-ios-box-shadow: none;
$alert-ios-box-shadow: none !default;
/// @prop - Padding top of the alert head
$alert-ios-head-padding-top: 12px;
$alert-ios-head-padding-top: 12px !default;
/// @prop - Padding end of the alert head
$alert-ios-head-padding-end: 16px;
$alert-ios-head-padding-end: 16px !default;
/// @prop - Padding bottom of the alert head
$alert-ios-head-padding-bottom: 7px;
$alert-ios-head-padding-bottom: 7px !default;
/// @prop - Padding start of the alert head
$alert-ios-head-padding-start: $alert-ios-head-padding-end;
$alert-ios-head-padding-start: $alert-ios-head-padding-end !default;
/// @prop - Text align of the alert head
$alert-ios-head-text-align: center;
$alert-ios-head-text-align: center !default;
/// @prop - Color of the alert title
$alert-ios-title-color: $text-color;
$alert-ios-title-color: $text-color !default;
/// @prop - Margin top of the alert title
$alert-ios-title-margin-top: 8px;
$alert-ios-title-margin-top: 8px !default;
/// @prop - Font size of the alert title
$alert-ios-title-font-size: dynamic-font-min(1, 17px);
$alert-ios-title-font-size: dynamic-font-min(1, 17px) !default;
/// @prop - Font weight of the alert title
$alert-ios-title-font-weight: 600;
$alert-ios-title-font-weight: 600 !default;
/// @prop - Font size of the alert sub title
$alert-ios-sub-title-font-size: dynamic-font-min(1, 14px);
$alert-ios-sub-title-font-size: dynamic-font-min(1, 14px) !default;
/// @prop - Text color of the alert sub title
$alert-ios-sub-title-text-color: $text-color-step-400;
$alert-ios-sub-title-text-color: $text-color-step-400 !default;
/// @prop - Padding top of the alert message
$alert-ios-message-padding-top: 0;
$alert-ios-message-padding-top: 0 !default;
/// @prop - Padding end of the alert message
$alert-ios-message-padding-end: 16px;
$alert-ios-message-padding-end: 16px !default;
/// @prop - Padding bottom of the alert message
$alert-ios-message-padding-bottom: 21px;
$alert-ios-message-padding-bottom: 21px !default;
/// @prop - Padding start of the alert message
$alert-ios-message-padding-start: $alert-ios-message-padding-end;
$alert-ios-message-padding-start: $alert-ios-message-padding-end !default;
/// @prop - Font size of the alert message
$alert-ios-message-font-size: dynamic-font-min(1, 13px);
$alert-ios-message-font-size: dynamic-font-min(1, 13px) !default;
/// @prop - Text align of the alert message
$alert-ios-message-text-align: center;
$alert-ios-message-text-align: center !default;
/// @prop - Text color of the alert message
$alert-ios-message-text-color: $text-color;
$alert-ios-message-text-color: $text-color !default;
/// @prop - Padding top of the alert empty message
$alert-ios-message-empty-padding-top: 0;
$alert-ios-message-empty-padding-top: 0 !default;
/// @prop - Padding end of the alert empty message
$alert-ios-message-empty-padding-end: 0;
$alert-ios-message-empty-padding-end: 0 !default;
/// @prop - Padding bottom of the alert empty message
$alert-ios-message-empty-padding-bottom: 12px;
$alert-ios-message-empty-padding-bottom: 12px !default;
/// @prop - Padding start of the alert empty message
$alert-ios-message-empty-padding-start: 0;
$alert-ios-message-empty-padding-start: 0 !default;
/// @prop - Maximum height of the alert content
$alert-ios-content-max-height: 240px;
$alert-ios-content-max-height: 240px !default;
/// @prop - Margin top of the alert input
$alert-ios-input-margin-top: 10px;
$alert-ios-input-margin-top: 10px !default;
/// @prop - Padding top on the alert input
$alert-ios-input-padding-top: 7px;
$alert-ios-input-padding-top: 7px !default;
/// @prop - Padding end on the alert input
$alert-ios-input-padding-end: $alert-ios-input-padding-top;
$alert-ios-input-padding-end: $alert-ios-input-padding-top !default;
/// @prop - Padding bottom on the alert input
$alert-ios-input-padding-bottom: $alert-ios-input-padding-top;
$alert-ios-input-padding-bottom: $alert-ios-input-padding-top !default;
/// @prop - Padding start on the alert input
$alert-ios-input-padding-start: $alert-ios-input-padding-end;
$alert-ios-input-padding-start: $alert-ios-input-padding-end !default;
/// @prop - Placeholder Color for input
$alert-ios-input-placeholder-color: $placeholder-text-color;
$alert-ios-input-placeholder-color: $placeholder-text-color !default;
/// @prop - Border color of the alert input
$alert-ios-input-border-color: $background-color-step-250;
$alert-ios-input-border-color: $background-color-step-250 !default;
/// @prop - Border of the alert input
$alert-ios-input-border: $hairlines-width solid $alert-ios-input-border-color;
$alert-ios-input-border: $hairlines-width solid $alert-ios-input-border-color !default;
/// @prop - Border radius of the alert input
$alert-ios-input-border-radius: 7px;
$alert-ios-input-border-radius: 7px !default;
/// @prop - Background color of the alert input
$alert-ios-input-background-color: $background-color;
$alert-ios-input-background-color: $background-color !default;
/// @prop - Flex wrap of the alert button group
$alert-ios-button-group-flex-wrap: wrap;
$alert-ios-button-group-flex-wrap: wrap !default;
/// @prop - Flex of the alert button
$alert-ios-button-flex: 1 1 auto;
$alert-ios-button-flex: 1 1 auto !default;
/// @prop - Margin of the alert button
$alert-ios-button-margin: 0;
$alert-ios-button-margin: 0 !default;
/// @prop - Min width of the alert button
$alert-ios-button-min-width: 50%;
$alert-ios-button-min-width: 50% !default;
/// @prop - Height of the alert button
/**
@@ -147,172 +147,172 @@ $alert-ios-button-min-width: 50%;
* a hairline (<1px) width, this will cause subpixel rendering
* differences across browsers.
*/
$alert-ios-button-height: dynamic-font-min(1, 44px);
$alert-ios-button-height: dynamic-font-min(1, 44px) !default;
/// @prop - Padding of the alert button
$alert-ios-button-padding: 8px;
$alert-ios-button-padding: 8px !default;
/// @prop - Font size of the alert button
$alert-ios-button-font-size: dynamic-font-min(1, 17px);
$alert-ios-button-font-size: dynamic-font-min(1, 17px) !default;
/// @prop - Color of the text in the alert button
$alert-ios-button-text-color: ion-color(primary, base);
$alert-ios-button-text-color: ion-color(primary, base) !default;
/// @prop - Destructive text color of the alert button
$alert-ios-button-destructive-text-color: ion-color(danger, base);
$alert-ios-button-destructive-text-color: ion-color(danger, base) !default;
/// @prop - Background color of the alert button
$alert-ios-button-background-color: transparent;
$alert-ios-button-background-color: transparent !default;
/// @prop - Background color alpha of the alert activated button
$alert-ios-button-background-color-alpha-activated: .1;
$alert-ios-button-background-color-alpha-activated: .1 !default;
/// @prop - Background color of the alert activated button
$alert-ios-button-background-color-activated: rgba($text-color-rgb, $alert-ios-button-background-color-alpha-activated);
$alert-ios-button-background-color-activated: rgba($text-color-rgb, $alert-ios-button-background-color-alpha-activated) !default;
/// @prop - Border width of the alert button
$alert-ios-button-border-width: $hairlines-width;
$alert-ios-button-border-width: $hairlines-width !default;
/// @prop - Border style of the alert button
$alert-ios-button-border-style: solid;
$alert-ios-button-border-style: solid !default;
/// @prop - Border color alpha of the alert button
$alert-ios-button-border-color-alpha: .2;
$alert-ios-button-border-color-alpha: .2 !default;
/// @prop - Border color of the alert button
$alert-ios-button-border-color: rgba($text-color-rgb, $alert-ios-button-border-color-alpha);
$alert-ios-button-border-color: rgba($text-color-rgb, $alert-ios-button-border-color-alpha) !default;
/// @prop - Border radius of the alert button
$alert-ios-button-border-radius: 0;
$alert-ios-button-border-radius: 0 !default;
/// @prop - Font weight of the main text on the alert button
$alert-ios-button-main-font-weight: bold;
$alert-ios-button-main-font-weight: bold !default;
/// @prop - Border top of the alert list
$alert-ios-list-border-top: $alert-ios-button-border-width $alert-ios-button-border-style $alert-ios-button-border-color;
$alert-ios-list-border-top: $alert-ios-button-border-width $alert-ios-button-border-style $alert-ios-button-border-color !default;
/// @prop - Padding top on the label for the radio alert
$alert-ios-radio-label-padding-top: 13px;
$alert-ios-radio-label-padding-top: 13px !default;
/// @prop - Padding end on the label for the radio alert
$alert-ios-radio-label-padding-end: $alert-ios-radio-label-padding-top;
$alert-ios-radio-label-padding-end: $alert-ios-radio-label-padding-top !default;
/// @prop - Padding bottom on the label for the radio alert
$alert-ios-radio-label-padding-bottom: $alert-ios-radio-label-padding-top;
$alert-ios-radio-label-padding-bottom: $alert-ios-radio-label-padding-top !default;
/// @prop - Padding start on the label for the radio alert
$alert-ios-radio-label-padding-start: $alert-ios-radio-label-padding-end;
$alert-ios-radio-label-padding-start: $alert-ios-radio-label-padding-end !default;
/// @prop - Text color of the label for the radio alert
$alert-ios-radio-label-text-color: $text-color;
$alert-ios-radio-label-text-color: $text-color !default;
/// @prop - Text color of the label for the checked radio alert
$alert-ios-radio-label-text-color-checked: $alert-ios-button-text-color;
$alert-ios-radio-label-text-color-checked: $alert-ios-button-text-color !default;
/// @prop - Min width of the radio alert
$alert-ios-radio-min-width: 30px;
$alert-ios-radio-min-width: 30px !default;
/// @prop - Top of the icon in the radio alert
$alert-ios-radio-icon-top: -7px;
$alert-ios-radio-icon-top: -7px !default;
/// @prop - Start of the icon in the radio alert
$alert-ios-radio-icon-start: 7px;
$alert-ios-radio-icon-start: 7px !default;
/// @prop - Width of the icon in the radio alert
$alert-ios-radio-icon-width: 6px;
$alert-ios-radio-icon-width: 6px !default;
/// @prop - Height of the icon in the radio alert
$alert-ios-radio-icon-height: 12px;
$alert-ios-radio-icon-height: 12px !default;
/// @prop - Border width of the icon in the radio alert
$alert-ios-radio-icon-border-width: 2px;
$alert-ios-radio-icon-border-width: 2px !default;
/// @prop - Border style of the icon in the radio alert
$alert-ios-radio-icon-border-style: solid;
$alert-ios-radio-icon-border-style: solid !default;
/// @prop - Border color of the icon in the radio alert
$alert-ios-radio-icon-border-color: $alert-ios-button-text-color;
$alert-ios-radio-icon-border-color: $alert-ios-button-text-color !default;
/// @prop - Transform of the icon in the radio alert
$alert-ios-radio-icon-transform: rotate(45deg);
$alert-ios-radio-icon-transform: rotate(45deg) !default;
/// @prop - Padding top of the label for the checkbox in the alert
$alert-ios-checkbox-label-padding-top: 13px;
$alert-ios-checkbox-label-padding-top: 13px !default;
/// @prop - Padding end of the label for the checkbox in the alert
$alert-ios-checkbox-label-padding-end: $alert-ios-checkbox-label-padding-top;
$alert-ios-checkbox-label-padding-end: $alert-ios-checkbox-label-padding-top !default;
/// @prop - Padding bottom of the label for the checkbox in the alert
$alert-ios-checkbox-label-padding-bottom: $alert-ios-checkbox-label-padding-top;
$alert-ios-checkbox-label-padding-bottom: $alert-ios-checkbox-label-padding-top !default;
/// @prop - Padding start of the label for the checkbox in the alert
$alert-ios-checkbox-label-padding-start: $alert-ios-checkbox-label-padding-end;
$alert-ios-checkbox-label-padding-start: $alert-ios-checkbox-label-padding-end !default;
/// @prop - Text color of the label for the checkbox in the alert
$alert-ios-checkbox-label-text-color: $text-color;
$alert-ios-checkbox-label-text-color: $text-color !default;
/// @prop - Margin top of the checkbox in the alert
$alert-ios-checkbox-margin-top: 10px;
$alert-ios-checkbox-margin-top: 10px !default;
/// @prop - Margin end of the checkbox in the alert
$alert-ios-checkbox-margin-end: 6px;
$alert-ios-checkbox-margin-end: 6px !default;
/// @prop - Margin bottom of the checkbox in the alert
$alert-ios-checkbox-margin-bottom: 10px;
$alert-ios-checkbox-margin-bottom: 10px !default;
/// @prop - Margin start of the checkbox in the alert
$alert-ios-checkbox-margin-start: 16px;
$alert-ios-checkbox-margin-start: 16px !default;
/// @prop - Size of the checkbox in the alert
$alert-ios-checkbox-size: dynamic-font-max(22px, 2.538);
$alert-ios-checkbox-size: dynamic-font-max(22px, 2.538) !default;
/// @prop - Border width of the checkbox in the alert
$alert-ios-checkbox-border-width: dynamic-font(2px);
$alert-ios-checkbox-border-width: dynamic-font(2px) !default;
/// @prop - Border style of the checkbox in the alert
$alert-ios-checkbox-border-style: solid;
$alert-ios-checkbox-border-style: solid !default;
/// @prop - Border radius of the checkbox in the alert
$alert-ios-checkbox-border-radius: 50%;
$alert-ios-checkbox-border-radius: 50% !default;
/// @prop - Border color of the checkbox in the alert when off
$alert-ios-checkbox-border-color-off: $item-ios-border-color;
$alert-ios-checkbox-border-color-off: $item-ios-border-color !default;
/// @prop - Border color of the checkbox in the alert when on
$alert-ios-checkbox-border-color-on: ion-color(primary, base);
$alert-ios-checkbox-border-color-on: ion-color(primary, base) !default;
/// @prop - Background color of the checkbox in the alert when off
$alert-ios-checkbox-background-color-off: $item-ios-background;
$alert-ios-checkbox-background-color-off: $item-ios-background !default;
/// @prop - Background color of the checkbox in the alert when on
$alert-ios-checkbox-background-color-on: ion-color(primary, base);
$alert-ios-checkbox-background-color-on: ion-color(primary, base) !default;
/// @prop - Top of the icon in the checkbox alert
$alert-ios-checkbox-icon-top: calc($alert-ios-checkbox-size / 8);
$alert-ios-checkbox-icon-top: calc($alert-ios-checkbox-size / 8) !default;
/// @prop - Start of the icon in the checkbox alert
$alert-ios-checkbox-icon-start: calc($alert-ios-checkbox-size / 3);
$alert-ios-checkbox-icon-start: calc($alert-ios-checkbox-size / 3) !default;
/// @prop - Width of the icon in the checkbox alert
$alert-ios-checkbox-icon-width: calc($alert-ios-checkbox-size / 6 + 1px);
$alert-ios-checkbox-icon-width: calc($alert-ios-checkbox-size / 6 + 1px) !default;
/// @prop - Height of the icon in the checkbox alert
$alert-ios-checkbox-icon-height: calc($alert-ios-checkbox-size * 0.5);
$alert-ios-checkbox-icon-height: calc($alert-ios-checkbox-size * 0.5) !default;
/// @prop - Border width of the icon in the checkbox alert
$alert-ios-checkbox-icon-border-width: $alert-ios-checkbox-border-width;
$alert-ios-checkbox-icon-border-width: $alert-ios-checkbox-border-width !default;
/// @prop - Border style of the icon in the checkbox alert
$alert-ios-checkbox-icon-border-style: $alert-ios-checkbox-border-style;
$alert-ios-checkbox-icon-border-style: $alert-ios-checkbox-border-style !default;
/// @prop - Border color of the icon in the checkbox alert
$alert-ios-checkbox-icon-border-color: $background-color;
$alert-ios-checkbox-icon-border-color: $background-color !default;
/// @prop - Transform of the icon in the checkbox alert
$alert-ios-checkbox-icon-transform: rotate(45deg);
$alert-ios-checkbox-icon-transform: rotate(45deg) !default;
/// @prop - Filter of the translucent alert
$alert-ios-translucent-filter: saturate(180%) blur(20px);
$alert-ios-translucent-filter: saturate(180%) blur(20px) !default;
/// @prop - Height of the tappable inputs in the checkbox alert
$alert-ios-tappable-height: $item-ios-min-height;
$alert-ios-tappable-height: $item-ios-min-height !default;

View File

@@ -5,10 +5,10 @@
// --------------------------------------------------
/// @prop - Font size of the alert
$alert-md-font-size: dynamic-font(14px);
$alert-md-font-size: dynamic-font(14px) !default;
/// @prop - Max width of the alert
$alert-md-max-width: 280px;
$alert-md-max-width: 280px !default;
/// @prop - Max width of the alert on a tablet
/**
@@ -19,313 +19,313 @@ $alert-md-max-width: 280px;
* 3. The height can increase up to 560px.
* Source: https://m2.material.io/components/dialogs#behavior
*/
$alert-md-max-width-tablet: min(calc(100vw - 96px), 560px);
$alert-md-max-width-tablet: min(calc(100vw - 96px), 560px) !default;
/// @prop - Max width of the alert on a tablet
$alert-md-max-height-tablet: min(calc(100vh - 96px), 560px);
$alert-md-max-height-tablet: min(calc(100vh - 96px), 560px) !default;
/// @prop - Border radius of the alert
$alert-md-border-radius: 4px;
$alert-md-border-radius: 4px !default;
/// @prop - Background color of the alert
$alert-md-background-color: $overlay-md-background-color;
$alert-md-background-color: $overlay-md-background-color !default;
/// @prop - Box shadow color of the alert
$alert-md-box-shadow: 0 11px 15px -7px rgba(0, 0, 0, .2), 0 24px 38px 3px rgba(0, 0, 0, .14), 0 9px 46px 8px rgba(0, 0, 0, .12);
$alert-md-box-shadow: 0 11px 15px -7px rgba(0, 0, 0, .2), 0 24px 38px 3px rgba(0, 0, 0, .14), 0 9px 46px 8px rgba(0, 0, 0, .12) !default;
/// @prop - Padding top of the alert head
$alert-md-head-padding-top: 20px;
$alert-md-head-padding-top: 20px !default;
/// @prop - Padding end of the alert head
$alert-md-head-padding-end: 23px;
$alert-md-head-padding-end: 23px !default;
/// @prop - Padding bottom of the alert head
$alert-md-head-padding-bottom: 15px;
$alert-md-head-padding-bottom: 15px !default;
/// @prop - Padding start of the alert head
$alert-md-head-padding-start: $alert-md-head-padding-end;
$alert-md-head-padding-start: $alert-md-head-padding-end !default;
/// @prop - Text align of the alert head
$alert-md-head-text-align: start;
$alert-md-head-text-align: start !default;
/// @prop - Color of the alert title
$alert-md-title-color: $text-color;
$alert-md-title-color: $text-color !default;
/// @prop - Font size of the alert title
$alert-md-title-font-size: dynamic-font(20px);
$alert-md-title-font-size: dynamic-font(20px) !default;
/// @prop - Font weight of the alert title
$alert-md-title-font-weight: 500;
$alert-md-title-font-weight: 500 !default;
/// @prop - Font size of the alert sub title
$alert-md-sub-title-font-size: dynamic-font(16px);
$alert-md-sub-title-font-size: dynamic-font(16px) !default;
/// @prop - Text color of the alert sub title
$alert-md-sub-title-text-color: $text-color;
$alert-md-sub-title-text-color: $text-color !default;
/// @prop - Padding top of the alert message
$alert-md-message-padding-top: 20px;
$alert-md-message-padding-top: 20px !default;
/// @prop - Padding end of the alert message
$alert-md-message-padding-end: 24px;
$alert-md-message-padding-end: 24px !default;
/// @prop - Padding bottom of the alert message
$alert-md-message-padding-bottom: $alert-md-message-padding-top;
$alert-md-message-padding-bottom: $alert-md-message-padding-top !default;
/// @prop - Padding start of the alert message
$alert-md-message-padding-start: $alert-md-message-padding-end;
$alert-md-message-padding-start: $alert-md-message-padding-end !default;
/// @prop - Font size of the alert message
$alert-md-message-font-size: dynamic-font(16px);
$alert-md-message-font-size: dynamic-font(16px) !default;
/// @prop - Text color of the alert message
$alert-md-message-text-color: $text-color-step-450;
$alert-md-message-text-color: $text-color-step-450 !default;
/// @prop - Padding top of the alert empty message
$alert-md-message-empty-padding-top: 0;
$alert-md-message-empty-padding-top: 0 !default;
/// @prop - Padding end of the alert empty message
$alert-md-message-empty-padding-end: $alert-md-message-empty-padding-top;
$alert-md-message-empty-padding-end: $alert-md-message-empty-padding-top !default;
/// @prop - Padding bottom of the alert empty message
$alert-md-message-empty-padding-bottom: $alert-md-message-empty-padding-top;
$alert-md-message-empty-padding-bottom: $alert-md-message-empty-padding-top !default;
/// @prop - Padding start of the alert empty message
$alert-md-message-empty-padding-start: $alert-md-message-empty-padding-end;
$alert-md-message-empty-padding-start: $alert-md-message-empty-padding-end !default;
/// @prop - Maximum height of the alert content
$alert-md-content-max-height: 266px;
$alert-md-content-max-height: 266px !default;
/// @prop - Border width of the alert input
$alert-md-input-border-width: 1px;
$alert-md-input-border-width: 1px !default;
/// @prop - Border style of the alert input
$alert-md-input-border-style: solid;
$alert-md-input-border-style: solid !default;
/// @prop - Border color of the alert input
$alert-md-input-border-color: $background-color-step-150;
$alert-md-input-border-color: $background-color-step-150 !default;
/// @prop - Text color of the alert input
$alert-md-input-text-color: $text-color;
$alert-md-input-text-color: $text-color !default;
/// @prop - Border width of the alert input when focused
$alert-md-input-border-width-focused: 2px;
$alert-md-input-border-width-focused: 2px !default;
/// @prop - Border style of the alert input when focused
$alert-md-input-border-style-focused: $alert-md-input-border-style;
$alert-md-input-border-style-focused: $alert-md-input-border-style !default;
/// @prop - Border color of the alert input when focused
$alert-md-input-border-color-focused: ion-color(primary, base);
$alert-md-input-border-color-focused: ion-color(primary, base) !default;
/// @prop - Margin top of the alert input
$alert-md-input-margin-top: 5px;
$alert-md-input-margin-top: 5px !default;
/// @prop - Margin end of the alert input
$alert-md-input-margin-end: 0;
$alert-md-input-margin-end: 0 !default;
/// @prop - Margin bottom of the alert input
$alert-md-input-margin-bottom: 5px;
$alert-md-input-margin-bottom: 5px !default;
/// @prop - Margin start of the alert input
$alert-md-input-margin-start: 0;
$alert-md-input-margin-start: 0 !default;
/// @prop - Placeholder Color for input
$alert-md-input-placeholder-color: $placeholder-text-color;
$alert-md-input-placeholder-color: $placeholder-text-color !default;
/// @prop - Flex wrap of the alert button group
$alert-md-button-group-flex-wrap: wrap-reverse;
$alert-md-button-group-flex-wrap: wrap-reverse !default;
/// @prop - Justify content of the alert button group
$alert-md-button-group-justify-content: flex-end;
$alert-md-button-group-justify-content: flex-end !default;
/// @prop - Padding top of the alert button
$alert-md-button-padding-top: 10px;
$alert-md-button-padding-top: 10px !default;
/// @prop - Padding end of the alert button
$alert-md-button-padding-end: $alert-md-button-padding-top;
$alert-md-button-padding-end: $alert-md-button-padding-top !default;
/// @prop - Padding bottom of the alert button
$alert-md-button-padding-bottom: $alert-md-button-padding-top;
$alert-md-button-padding-bottom: $alert-md-button-padding-top !default;
/// @prop - Padding start of the alert button
$alert-md-button-padding-start: $alert-md-button-padding-end;
$alert-md-button-padding-start: $alert-md-button-padding-end !default;
/// @prop - Margin top of the alert button
$alert-md-button-margin-top: 0;
$alert-md-button-margin-top: 0 !default;
/// @prop - Margin end of the alert button
$alert-md-button-margin-end: 8px;
$alert-md-button-margin-end: 8px !default;
/// @prop - Margin bottom of the alert button
$alert-md-button-margin-bottom: 0;
$alert-md-button-margin-bottom: 0 !default;
/// @prop - Margin start of the alert button
$alert-md-button-margin-start: 0;
$alert-md-button-margin-start: 0 !default;
/// @prop - Font weight of the alert button
$alert-md-button-font-weight: 500;
$alert-md-button-font-weight: 500 !default;
/// @prop - Text color of the alert button
$alert-md-button-text-color: ion-color(primary, base);
$alert-md-button-text-color: ion-color(primary, base) !default;
/// @prop - Background color of the alert button
$alert-md-button-background-color: transparent;
$alert-md-button-background-color: transparent !default;
/// @prop - Border radius of the alert button
$alert-md-button-border-radius: 2px;
$alert-md-button-border-radius: 2px !default;
/// @prop - Text transform of the alert button
$alert-md-button-text-transform: uppercase;
$alert-md-button-text-transform: uppercase !default;
/// @prop - Text align of the alert button
$alert-md-button-text-align: end;
$alert-md-button-text-align: end !default;
/// @prop - Border top of the alert list
$alert-md-list-border-top: 1px solid $alert-md-input-border-color;
$alert-md-list-border-top: 1px solid $alert-md-input-border-color !default;
/// @prop - Border bottom of the alert list
$alert-md-list-border-bottom: $alert-md-list-border-top;
$alert-md-list-border-bottom: $alert-md-list-border-top !default;
/// @prop - Top of the alert radio
$alert-md-radio-top: 0;
$alert-md-radio-top: 0 !default;
/// @prop - Left of the alert radio
$alert-md-radio-left: 26px;
$alert-md-radio-left: 26px !default;
/// @prop - Width of the alert radio
$alert-md-radio-width: 20px;
$alert-md-radio-width: 20px !default;
/// @prop - Height of the alert radio
$alert-md-radio-height: $alert-md-radio-width;
$alert-md-radio-height: $alert-md-radio-width !default;
/// @prop - Border width of the alert radio
$alert-md-radio-border-width: 2px;
$alert-md-radio-border-width: 2px !default;
/// @prop - Border style of the alert radio
$alert-md-radio-border-style: solid;
$alert-md-radio-border-style: solid !default;
/// @prop - Border radius of the alert radio
$alert-md-radio-border-radius: 50%;
$alert-md-radio-border-radius: 50% !default;
/// @prop - Border color of the alert radio when off
$alert-md-radio-border-color-off: $background-color-step-550;
$alert-md-radio-border-color-off: $background-color-step-550 !default;
/// @prop - Border color of the alert radio when on
$alert-md-radio-border-color-on: $alert-md-button-text-color;
$alert-md-radio-border-color-on: $alert-md-button-text-color !default;
/// @prop - Width of the icon in the alert radio
$alert-md-radio-icon-width: $alert-md-radio-width * 0.5;
$alert-md-radio-icon-width: $alert-md-radio-width * 0.5 !default;
/// @prop - Height of the icon in the alert radio
$alert-md-radio-icon-height: $alert-md-radio-icon-width;
$alert-md-radio-icon-height: $alert-md-radio-icon-width !default;
/// @prop - Top of the icon in the alert radio
$alert-md-radio-icon-top: ($alert-md-radio-width - $alert-md-radio-icon-width - $alert-md-radio-border-width * 2) * 0.5;
$alert-md-radio-icon-top: ($alert-md-radio-width - $alert-md-radio-icon-width - $alert-md-radio-border-width * 2) * 0.5 !default;
/// @prop - Start of the icon in the radio alert
$alert-md-radio-icon-start: $alert-md-radio-icon-top;
$alert-md-radio-icon-start: $alert-md-radio-icon-top !default;
/// @prop - Border radius of the icon in the alert radio
$alert-md-radio-icon-border-radius: $alert-md-radio-border-radius;
$alert-md-radio-icon-border-radius: $alert-md-radio-border-radius !default;
/// @prop - Transform of the icon in the alert radio when off
$alert-md-radio-icon-transform-off: scale3d(0, 0, 0);
$alert-md-radio-icon-transform-off: scale3d(0, 0, 0) !default;
/// @prop - Transform of the icon in the alert radio when on
$alert-md-radio-icon-transform-on: scale3d(1, 1, 1);
$alert-md-radio-icon-transform-on: scale3d(1, 1, 1) !default;
/// @prop - Transition of the icon in the alert radio
$alert-md-radio-icon-transition: transform 280ms cubic-bezier(.4, 0, .2, 1);
$alert-md-radio-icon-transition: transform 280ms cubic-bezier(.4, 0, .2, 1) !default;
/// @prop - Padding top on the label for the radio alert
$alert-md-radio-label-padding-top: 13px;
$alert-md-radio-label-padding-top: 13px !default;
/// @prop - Padding end on the label for the radio alert
$alert-md-radio-label-padding-end: 26px;
$alert-md-radio-label-padding-end: 26px !default;
/// @prop - Padding bottom on the label for the radio alert
$alert-md-radio-label-padding-bottom: $alert-md-radio-label-padding-top;
$alert-md-radio-label-padding-bottom: $alert-md-radio-label-padding-top !default;
/// @prop - Padding start on the label for the radio alert
$alert-md-radio-label-padding-start: $alert-md-radio-label-padding-end + 26px;
$alert-md-radio-label-padding-start: $alert-md-radio-label-padding-end + 26px !default;
/// @prop - Font size of the label for the radio alert
$alert-md-radio-label-font-size: dynamic-font(16px);
$alert-md-radio-label-font-size: dynamic-font(16px) !default;
/// @prop - Text color of the label for the radio alert
$alert-md-radio-label-text-color: $text-color-step-150;
$alert-md-radio-label-text-color: $text-color-step-150 !default;
/// @prop - Text color of the label for the checked radio alert
$alert-md-radio-label-text-color-checked: $alert-md-radio-label-text-color;
$alert-md-radio-label-text-color-checked: $alert-md-radio-label-text-color !default;
/// @prop - Top of the checkbox in the alert
$alert-md-checkbox-top: 0;
$alert-md-checkbox-top: 0 !default;
/// @prop - Left of the checkbox in the alert
$alert-md-checkbox-left: 26px;
$alert-md-checkbox-left: 26px !default;
/// @prop - Width of the checkbox in the alert
$alert-md-checkbox-width: 16px;
$alert-md-checkbox-width: 16px !default;
/// @prop - Height of the checkbox in the alert
$alert-md-checkbox-height: 16px;
$alert-md-checkbox-height: 16px !default;
/// @prop - Border width of the checkbox in the alert
$alert-md-checkbox-border-width: 2px;
$alert-md-checkbox-border-width: 2px !default;
/// @prop - Border style of the checkbox in the alert
$alert-md-checkbox-border-style: solid;
$alert-md-checkbox-border-style: solid !default;
/// @prop - Border radius of the checkbox in the alert
$alert-md-checkbox-border-radius: 2px;
$alert-md-checkbox-border-radius: 2px !default;
/// @prop - Border color of the checkbox in the alert when off
$alert-md-checkbox-border-color-off: $background-color-step-550;
$alert-md-checkbox-border-color-off: $background-color-step-550 !default;
/// @prop - Border color of the checkbox in the alert when on
$alert-md-checkbox-border-color-on: $alert-md-button-text-color;
$alert-md-checkbox-border-color-on: $alert-md-button-text-color !default;
/// @prop - Top of the icon in the checkbox alert
$alert-md-checkbox-icon-top: 0;
$alert-md-checkbox-icon-top: 0 !default;
/// @prop - Start of the icon in the checkbox alert
$alert-md-checkbox-icon-start: 3px;
$alert-md-checkbox-icon-start: 3px !default;
/// @prop - Width of the icon in the checkbox alert
$alert-md-checkbox-icon-width: 6px;
$alert-md-checkbox-icon-width: 6px !default;
/// @prop - Height of the icon in the checkbox alert
$alert-md-checkbox-icon-height: 10px;
$alert-md-checkbox-icon-height: 10px !default;
/// @prop - Border width of the icon in the checkbox alert
$alert-md-checkbox-icon-border-width: 2px;
$alert-md-checkbox-icon-border-width: 2px !default;
/// @prop - Border style of the icon in the checkbox alert
$alert-md-checkbox-icon-border-style: solid;
$alert-md-checkbox-icon-border-style: solid !default;
/// @prop - Border color of the icon in the checkbox alert
$alert-md-checkbox-icon-border-color: ion-color(primary, contrast);
$alert-md-checkbox-icon-border-color: ion-color(primary, contrast) !default;
/// @prop - Transform of the icon in the checkbox alert
$alert-md-checkbox-icon-transform: rotate(45deg);
$alert-md-checkbox-icon-transform: rotate(45deg) !default;
/// @prop - Padding top of the label for the checkbox in the alert
$alert-md-checkbox-label-padding-top: 13px;
$alert-md-checkbox-label-padding-top: 13px !default;
/// @prop - Padding end of the label for the checkbox in the alert
$alert-md-checkbox-label-padding-end: $alert-md-checkbox-left;
$alert-md-checkbox-label-padding-end: $alert-md-checkbox-left !default;
/// @prop - Padding bottom of the label for the checkbox in the alert
$alert-md-checkbox-label-padding-bottom: $alert-md-checkbox-label-padding-top;
$alert-md-checkbox-label-padding-bottom: $alert-md-checkbox-label-padding-top !default;
/// @prop - Padding start of the label for the checkbox in the alert
$alert-md-checkbox-label-padding-start: $alert-md-checkbox-label-padding-end + 27px;
$alert-md-checkbox-label-padding-start: $alert-md-checkbox-label-padding-end + 27px !default;
/// @prop - Text color of the label for the checkbox in the alert
$alert-md-checkbox-label-text-color: $text-color-step-150;
$alert-md-checkbox-label-text-color: $text-color-step-150 !default;
/// @prop - Font size of the label for the checkbox in the alert
$alert-md-checkbox-label-font-size: dynamic-font(16px);
$alert-md-checkbox-label-font-size: dynamic-font(16px) !default;
/// @prop - Height of the tappable inputs in the checkbox alert
$alert-md-tappable-height: $item-md-min-height;
$alert-md-tappable-height: $item-md-min-height !default;

View File

@@ -341,9 +341,7 @@ export class Alert implements ComponentInterface, OverlayInterface {
}
componentWillLoad() {
if (!this.htmlAttributes?.id) {
setOverlayId(this.el);
}
setOverlayId(this.el);
this.inputsChanged();
this.buttonsChanged();
}

View File

@@ -4,16 +4,16 @@
// --------------------------------------------------
/// @prop - Minimum width of the alert
$alert-min-width: 250px;
$alert-min-width: 250px !default;
/// @prop - Maximum height of the alert
$alert-max-height: 90%;
$alert-max-height: 90% !default;
/// @prop - Line height of the alert button
$alert-button-line-height: dynamic-font(20px);
$alert-button-line-height: dynamic-font(20px) !default;
/// @prop - Font size of the alert button
$alert-button-font-size: dynamic-font(14px);
$alert-button-font-size: dynamic-font(14px) !default;
/// @prop - Minimum height of a textarea in the alert
$alert-input-min-height: 37px;
$alert-input-min-height: 37px !default;

View File

@@ -180,10 +180,7 @@ configs({ directions: ['ltr'] }).forEach(({ config, title }) => {
*/
configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
test.describe(title('alert: font scaling'), () => {
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.');
test('should scale text on larger font sizes', async ({ page }) => {
await page.setContent(
`
<style>

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View File

@@ -9,6 +9,19 @@
<script src="../../../../../scripts/testing/scripts.js"></script>
<script nomodule src="../../../../../dist/ionic/ionic.js"></script>
<script type="module" src="../../../../../dist/ionic/ionic.esm.js"></script>
<style>
main > button {
display: block;
clear: both;
width: 100%;
padding: 12px 8px;
font-size: 1em;
background: #f8f8f8;
border: 1px solid #eee;
border-radius: 4px;
margin-bottom: 8px;
}
</style>
</head>
<script type="module">
import { alertController } from '../../../../dist/ionic/index.esm.js';
@@ -19,13 +32,13 @@
<main class="ion-padding">
<h1>Alert - A11y</h1>
<button class="expand" id="bothHeaders" onclick="presentBothHeaders()">Both Headers</button>
<button class="expand" id="subHeaderOnly" onclick="presentSubHeaderOnly()">Subheader Only</button>
<button class="expand" id="noHeaders" onclick="presentNoHeaders()">No Headers</button>
<button class="expand" id="noMessage" onclick="presentNoMessage()">No Message</button>
<button class="expand" id="customAria" onclick="presentCustomAria()">Custom Aria</button>
<button class="expand" id="ariaLabelButton" onclick="presentAriaLabelButton()">Aria Label Button</button>
<button class="expand" id="checkbox" onclick="presentAlertCheckbox()">Checkbox</button>
<button id="bothHeaders" onclick="presentBothHeaders()">Both Headers</button>
<button id="subHeaderOnly" onclick="presentSubHeaderOnly()">Subheader Only</button>
<button id="noHeaders" onclick="presentNoHeaders()">No Headers</button>
<button id="noMessage" onclick="presentNoMessage()">No Message</button>
<button id="customAria" onclick="presentCustomAria()">Custom Aria</button>
<button id="ariaLabelButton" onclick="presentAriaLabelButton()">Aria Label Button</button>
<button id="checkbox" onclick="presentAlertCheckbox()">Checkbox</button>
</main>
<script>

View File

@@ -2,7 +2,6 @@ import { newSpecPage } from '@stencil/core/testing';
import { config } from '../../../global/config';
import { Alert } from '../alert';
import { h } from '@stencil/core';
describe('alert: custom html', () => {
it('should not allow for custom html by default', async () => {
@@ -39,15 +38,4 @@ describe('alert: custom html', () => {
expect(content.textContent).toContain('Custom Text');
expect(content.querySelector('button.custom-html')).toBe(null);
});
it('should not overwrite the id set in htmlAttributes', async () => {
const id = 'custom-id';
const page = await newSpecPage({
components: [Alert],
template: () => <ion-alert htmlAttributes={{ id }} overlayIndex={-1}></ion-alert>,
});
const alert = page.body.querySelector('ion-alert')!;
expect(alert.id).toBe(id);
});
});

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 42 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 57 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 37 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 41 KiB

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