diff --git a/.editorconfig b/.editorconfig index f1cc3ad329c..0eef3827dd9 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,15 +1,18 @@ -# http://editorconfig.org +# This file is for unifying the coding style for different editors and IDEs +# editorconfig.org root = true [*] +end_of_line = lf charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +# Tabs in JS unless otherwise specified +[**.js] indent_style = space indent_size = 2 -end_of_line = lf -insert_final_newline = true -trim_trailing_whitespace = true [*.md] -insert_final_newline = false trim_trailing_whitespace = false diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 6313b56c578..00000000000 --- a/.gitattributes +++ /dev/null @@ -1 +0,0 @@ -* text=auto eol=lf diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS deleted file mode 100644 index b1f04ad75d3..00000000000 --- a/.github/CODEOWNERS +++ /dev/null @@ -1,14 +0,0 @@ -# Lines starting with '#' are comments. -# Each line is a file pattern followed by one or more owners. - -# More details are here: https://help.github.com/articles/about-codeowners/ - -# The '*' pattern is global owners. - -# Order is important. The last matching pattern has the most precedence. -# The folders are ordered as follows: - -# In each subsection folders are ordered first by depth, then alphabetically. -# This should make it easy to add new rules without breaking existing ones. - -* @ionic-team/framework diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md deleted file mode 100644 index 2fa1c3e3549..00000000000 --- a/.github/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - - - -**Ionic version:** - - -[x] **4.x** -[ ] **5.x** - -**I'm submitting a ...** - -[ ] bug report -[ ] feature request - - - -**Current behavior:** - - -**Expected behavior:** - - -**Steps to reproduce:** - - -**Related code:** - - - -``` -insert short code snippets here -``` - -**Other information:** - - -**Ionic info:** - - -``` -insert the output from ionic info here -``` diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml deleted file mode 100644 index e44acd31374..00000000000 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ /dev/null @@ -1,86 +0,0 @@ -name: πŸ› Bug Report -description: Create a report to help us improve Ionic Framework -title: 'bug: ' - -body: - - type: checkboxes - id: prerequisites - attributes: - 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). - required: true - - label: I agree to follow the [Code of Conduct](https://ionicframework.com/code-of-conduct). - required: true - - label: I have searched for [existing issues](https://github.com/ionic-team/ionic-framework/issues) that already report this problem, without success. - required: true - - - type: dropdown - id: affected-versions - attributes: - label: Ionic Framework Version - 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 - - Nightly - multiple: true - validations: - required: true - - - type: textarea - id: current-behavior - attributes: - label: Current Behavior - description: A clear description of what the bug is and how it manifests. - validations: - required: true - - - type: textarea - id: expected-behavior - attributes: - label: Expected Behavior - description: A clear description of what you expected to happen. - validations: - required: true - - - type: textarea - id: steps-to-reproduce - attributes: - label: Steps to Reproduce - description: Explain the steps required to reproduce this issue. - placeholder: | - 1. Go to '...' - 2. Click on '...' - 3. Observe: '...' - validations: - required: true - - - type: input - id: reproduction-url - attributes: - label: Code Reproduction URL - description: | - Reproduce this issue in a blank [Ionic Framework starter application](https://ionicframework.com/start#basics) or a Stackblitz example. - - You can use the Stackblitz button available on any of the [component playgrounds](https://ionicframework.com/docs/components) to open an editable example. Remember to save your changes to obtain a link to copy. - - Reproductions cases must be minimal and focused around the specific problem you are experiencing. This is the best way to ensure this issue is triaged quickly. Issues without a code reproduction may be closed if the Ionic Team cannot reproduce the issue you are reporting. - placeholder: https://github.com/... - validations: - required: true - - - type: textarea - id: ionic-info - attributes: - label: Ionic Info - description: Please run `ionic info` from within your Ionic Framework project directory and paste the output below. - validations: - required: true - - - type: textarea - id: additional-information - attributes: - label: Additional Information - description: List any other information that is relevant to your issue. Stack traces, related issues, suggestions on how to fix, Stack Overflow links, forum links, etc. diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml deleted file mode 100644 index 25a8dbb606f..00000000000 --- a/.github/ISSUE_TEMPLATE/config.yml +++ /dev/null @@ -1,10 +0,0 @@ -contact_links: - - name: πŸ“š Documentation - url: https://github.com/ionic-team/ionic-docs/issues/new/choose - about: This issue tracker is not for documentation issues. Please file documentation issues on the Ionic Docs repo. - - name: πŸ’» CLI - url: https://github.com/ionic-team/ionic-cli/issues/new/choose - about: This issue tracker is not for CLI issues. Please file CLI issues on the Ionic CLI repo. - - name: πŸ€” Support Question - url: https://forum.ionicframework.com/ - about: This issue tracker is not for support questions. Please post your question on the Ionic Forums. diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml deleted file mode 100644 index 788d41e3a2e..00000000000 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ /dev/null @@ -1,57 +0,0 @@ -name: πŸ’‘ Feature Request -description: Suggest an idea for Ionic Framework -title: 'feat: ' -body: - - - type: checkboxes - id: prerequisites - attributes: - 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). - required: true - - label: I agree to follow the [Code of Conduct](https://ionicframework.com/code-of-conduct). - required: true - - label: I have searched for [existing issues](https://github.com/ionic-team/ionic-framework/issues) that already include this feature request, without success. - required: true - - - type: textarea - id: description - attributes: - label: Describe the Feature Request - description: A clear and concise description of what the feature does. - validations: - required: true - - - type: textarea - id: use-case - attributes: - label: Describe the Use Case - description: A clear and concise use case for what problem this feature would solve. - validations: - required: true - - - type: textarea - id: proposed-solution - attributes: - label: Describe Preferred Solution - description: A clear and concise description of what you how you want this feature to be added to Ionic Framework. - - - type: textarea - id: alternatives-considered - attributes: - label: Describe Alternatives - description: A clear and concise description of any alternative solutions or features you have considered. - - - type: textarea - id: related-code - attributes: - label: Related Code - description: If you are able to illustrate the feature request with an example, please provide a sample Ionic Framework application. Try out our [Getting Started Wizard](https://ionicframework.com/start#basics) to quickly spin up an Ionic Framework starter app. - - - type: textarea - id: additional-information - attributes: - label: Additional Information - description: List any other information that is relevant to your issue. Stack traces, related issues, suggestions on how to implement, Stack Overflow links, forum links, etc. diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 29910b7b2b2..00000000000 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,34 +0,0 @@ -Issue number: resolves # - ---------- - - - - - -## What is the current behavior? - - -## What is the new behavior? - - -- -- -- - -## Does this introduce a breaking change? - -- [ ] Yes -- [ ] No - - - - -## Other information - - diff --git a/.github/actions/publish-npm/action.yml b/.github/actions/publish-npm/action.yml deleted file mode 100644 index 0b5e9924719..00000000000 --- a/.github/actions/publish-npm/action.yml +++ /dev/null @@ -1,60 +0,0 @@ -name: 'Release' -description: 'Releases a package' -inputs: - scope: - description: 'The package to release. Must match a package specified in lerna.json.' - version: - description: 'The type of version to release.' - tag: - description: 'The tag to publish to on NPM.' - preid: - description: "Prerelease identifier such as 'alpha', 'beta', 'rc', or 'next'. Leave blank to skip prerelease tagging." - working-directory: - description: 'The directory of the package.' - folder: - default: './' - description: 'A folder containing a package.json file.' - node-version: - description: 'Node.js version to use when publishing.' - required: false - default: '24.x' -runs: - using: 'composite' - steps: - - name: 🟒 Configure Node for Publish - uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0 - with: - node-version: ${{ inputs.node-version }} - registry-url: 'https://registry.npmjs.org' - scope: '@ionic' - # Provenance requires npm 9.5.0+ - - name: πŸ“¦ Install latest npm - run: npm install -g npm@latest - shell: bash - # This ensures the local version of Lerna is installed - # and that we do not use the global Lerna version - - name: πŸ•ΈοΈ Install root dependencies - run: npm ci - shell: bash - - name: πŸ“¦ Install Dependencies - run: npx lerna@5 bootstrap --include-dependencies --scope ${{ inputs.scope }} --ignore-scripts -- --legacy-peer-deps - shell: bash - working-directory: ${{ inputs.working-directory }} - - name: 🏷️ Set Version - run: | - if [ -z "${{ inputs.preid }}" ]; then - npx lerna@5 version ${{ inputs.version }} --yes --exact --no-changelog --no-push --no-git-tag-version - else - npx lerna@5 version ${{ inputs.version }} --yes --exact --no-changelog --no-push --no-git-tag-version --preid=${{ inputs.preid }} - fi - shell: bash - working-directory: ${{ inputs.working-directory }} - - name: πŸ—οΈ Run Build - run: npm run build - shell: bash - working-directory: ${{ inputs.working-directory }} - - name: πŸš€ Publish to NPM - run: npm publish ${{ inputs.folder }} --tag ${{ inputs.tag }} --provenance - shell: bash - working-directory: ${{ inputs.working-directory }} - diff --git a/.github/assets/logo.png b/.github/assets/logo.png deleted file mode 100644 index 42c5f25bfae..00000000000 Binary files a/.github/assets/logo.png and /dev/null differ diff --git a/.github/ionic-issue-bot.yml b/.github/ionic-issue-bot.yml deleted file mode 100644 index c1e02a5f068..00000000000 --- a/.github/ionic-issue-bot.yml +++ /dev/null @@ -1,144 +0,0 @@ -triage: - label: triage - removeLabelWhenProjectAssigned: true - dryRun: false - -comment: - labels: - - label: "help wanted" - message: > - This issue has been labeled as `help wanted`. This label is added to issues - that we believe would be good for contributors. - - - If you'd like to work on this issue, please comment here letting us know that - you would like to submit a pull request for it. This helps us to keep track of - the pull request and make sure there isn't duplicated effort. - - - For a guide on how to create a pull request and test this project locally to see - your changes, see our [contributing documentation](https://ionicframework.com/docs/building/contributing). - - - Thank you! - - label: "ionitron: needs reproduction" - message: > - Thanks for the issue! This issue has been labeled as `needs reproduction`. This label - is added to issues that need a code reproduction. - - - Please reproduce this issue in an Ionic starter application and provide a way for us to access it (GitHub repo, StackBlitz, etc). Without a reliable code reproduction, it is unlikely we will be able to resolve the issue, leading to it being closed. - - - If you have already provided a code snippet and are seeing this message, it is likely that the code snippet was not enough for our team to reproduce the issue. - - - For a guide on how to create a good reproduction, see our [Contributing Guide](https://ionicframework.com/docs/contributing/how-to-contribute#creating-a-good-code-reproduction). - - label: "community feedback wanted" - message: > - This issue has been labeled as `community feedback wanted`. This label is added to issues that we would like to hear from the community on before moving forward with any final decision on the feature request. - - - If the requested feature is something you would find useful for your applications, please react to the original post with πŸ‘ (`+1`). If you would like to provide an additional use case for the feature, please post a comment. - - - The team will review this feedback and make a final decision. Any decision will be posted on this thread, but please note that we may ultimately decide not to pursue this feature. - - - Thank you! - dryRun: false - -closeAndLock: - labels: - - label: "ionitron: support" - message: > - Thanks for the issue! This issue appears to be a support request. We use this issue tracker exclusively for - bug reports and feature requests. Please use our [forum](https://forum.ionicframework.com) for questions about the framework. - - - Thank you for using Ionic! - - label: "ionitron: missing template" - message: > - Thanks for the issue! It appears that you have not filled out the provided issue template. We use this issue - template in order to gather more information and further assist you. Please create a new issue and ensure the - template is fully filled out. - - - Thank you for using Ionic! - close: true - lock: true - dryRun: false - -lockClosed: - days: 30 - maxIssuesPerRun: 100 - message: > - Thanks for the issue! This issue is being locked to prevent comments that are not relevant to the original issue. - If this is still an issue with the latest version of Ionic, please create a new issue and ensure the template is fully filled out. - dryRun: false - -stale: - days: 365 - maxIssuesPerRun: 100 - exemptLabels: - - "good first issue" - - "triage" - - "type: bug" - - "type: feature request" - - "needs: investigation" - exemptAssigned: true - exemptProjects: true - exemptMilestones: true - label: "ionitron: stale issue" - message: > - Thanks for the issue! This issue is being closed due to inactivity. If this is still - an issue with the latest version of Ionic, please create a new issue and ensure the - template is fully filled out. - - - Thank you for using Ionic! - close: true - lock: true - dryRun: false - -noReply: - days: 14 - maxIssuesPerRun: 100 - label: "needs: reply" - responseLabel: triage - exemptProjects: true - exemptMilestones: true - message: > - Thanks for the issue! This issue is being closed due to the lack of a reply. If this is still - an issue with the latest version of Ionic, please create a new issue and ensure the - template is fully filled out. - - - Thank you for using Ionic! - close: true - lock: true - dryRun: false - -noReproduction: - days: 14 - maxIssuesPerRun: 100 - label: "ionitron: needs reproduction" - responseLabel: triage - exemptProjects: true - exemptMilestones: true - message: > - Thanks for the issue! This issue is being closed due to the lack of a code reproduction. If this is still - an issue with the latest version of Ionic, please create a new issue and ensure the - template is fully filled out. - - - Thank you for using Ionic! - close: true - lock: true - dryRun: false - -screenshot: - appId: 18001 - checkName: "build" - baseUrl: "https://screenshot.ionicframework.com" - dryRun: false diff --git a/.github/labeler.yml b/.github/labeler.yml deleted file mode 100644 index 7ea70aaf7f1..00000000000 --- a/.github/labeler.yml +++ /dev/null @@ -1,22 +0,0 @@ -# This is used with the label workflow which -# will triage pull requests and apply a label based on the -# paths that are modified in the pull request. -# -# For more information, see: -# https://github.com/actions/labeler - -'package: core': -- changed-files: - - any-glob-to-any-file: ['core/**/*'] - -'package: angular': -- changed-files: - - any-glob-to-any-file: ['packages/angular/**/*', 'packages/angular-*/**/*'] - -'package: react': -- changed-files: - - any-glob-to-any-file: ['packages/react/**/*', 'packages/react-*/**/*'] - -'package: vue': -- changed-files: - - any-glob-to-any-file: ['packages/vue/**/*', 'packages/vue-*/**/*'] diff --git a/.github/workflows/actions/build-angular-server/action.yml b/.github/workflows/actions/build-angular-server/action.yml deleted file mode 100644 index a90da3676c1..00000000000 --- a/.github/workflows/actions/build-angular-server/action.yml +++ /dev/null @@ -1,30 +0,0 @@ -name: 'Build Ionic Angular Server' -description: 'Build Ionic Angular Server' -runs: - using: 'composite' - steps: - - uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0 - with: - node-version: 24.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 - working-directory: ./packages/angular-server - - uses: ./.github/workflows/actions/upload-archive - with: - name: ionic-angular-server - output: packages/angular-server/AngularServerBuild.zip - paths: packages/angular-server/dist diff --git a/.github/workflows/actions/build-angular/action.yml b/.github/workflows/actions/build-angular/action.yml deleted file mode 100644 index fc7496de421..00000000000 --- a/.github/workflows/actions/build-angular/action.yml +++ /dev/null @@ -1,38 +0,0 @@ -name: 'Build Ionic Angular' -description: 'Build Ionic Angular' -runs: - using: 'composite' - steps: - - uses: actions/setup-node@v6 - with: - node-version: 24.x - - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-core - path: ./core - filename: CoreBuild.zip - - name: πŸ•ΈοΈ Install Angular Dependencies - run: npm ci - shell: bash - working-directory: ./packages/angular - - name: πŸ”„ Sync - run: npm run sync - shell: bash - working-directory: ./packages/angular - - name: πŸ–ŒοΈ Lint - run: npm run lint - shell: bash - working-directory: ./packages/angular - - name: πŸ—οΈ Build - run: npm run build - shell: bash - working-directory: ./packages/angular - - name: πŸ” Check Diff - run: git diff --exit-code - shell: bash - working-directory: ./packages/angular - - uses: ./.github/workflows/actions/upload-archive - with: - name: ionic-angular - output: ./packages/angular/AngularBuild.zip - paths: ./packages/angular/dist diff --git a/.github/workflows/actions/build-core-stencil-prerelease/action.yml b/.github/workflows/actions/build-core-stencil-prerelease/action.yml deleted file mode 100644 index 7bfb3fdfcb5..00000000000 --- a/.github/workflows/actions/build-core-stencil-prerelease/action.yml +++ /dev/null @@ -1,32 +0,0 @@ -name: 'Build Ionic Core with Stencil Prerelease' -description: 'Build Ionic Core with a Prerelease Build of Stencil' -inputs: - stencil-version: - description: 'The NPM tag of @stencil/core to install.' - type: string - required: true -runs: - using: 'composite' - steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0 - with: - node-version: 24.x - - - name: πŸ•ΈοΈ Install Dependencies - run: npm ci - working-directory: ./core - shell: bash - - name: πŸ“¦ Install Stencil ${{ inputs.stencil-version }} - working-directory: ./core - run: npm i @stencil/core@${{ inputs.stencil-version }} - shell: bash - - name: πŸ—οΈ Build Core - run: npm run build -- --ci --debug --verbose - working-directory: ./core - shell: bash - - uses: ./.github/workflows/actions/upload-archive - with: - name: ionic-core - output: core/CoreBuild.zip - paths: core/dist core/components core/css core/hydrate core/loader core/src/components.d.ts diff --git a/.github/workflows/actions/build-core/action.yml b/.github/workflows/actions/build-core/action.yml deleted file mode 100644 index 71fc61f6991..00000000000 --- a/.github/workflows/actions/build-core/action.yml +++ /dev/null @@ -1,36 +0,0 @@ -name: 'Build Ionic Core' -description: 'Build Ionic Core' -inputs: - ionicons-version: - description: 'The NPM tag of ionicons to install.' - type: string - required: false -runs: - using: 'composite' - steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0 - with: - node-version: 24.x - - name: πŸ•ΈοΈ Install Dependencies - run: npm install - working-directory: ./core - shell: bash - # If an Ionicons version was specified install that. - # Otherwise just use the version defined in the package.json. - - name: πŸ“¦ Install Ionicons Version - if: inputs.ionicons-version != '' - run: npm install ionicons@${{ inputs.ionicons-version }} - working-directory: ./core - shell: bash - - name: πŸ—οΈ Build Core - run: npm run build -- --ci - working-directory: ./core - shell: bash - - uses: ./.github/workflows/actions/upload-archive - with: - name: ionic-core - output: core/CoreBuild.zip - # Include generated proxy files from Stencil output targets so - # framework builds can detect when they need to be updated - paths: core/dist core/components core/css core/hydrate core/loader core/src/components.d.ts core/api.txt packages/angular/src/directives/proxies.ts packages/angular/src/directives/proxies-list.ts packages/angular/standalone/src/directives/proxies.ts packages/vue/src/proxies.ts packages/react/src/components/proxies.ts packages/react/src/components/inner-proxies.ts packages/react/src/components/routing-proxies.ts diff --git a/.github/workflows/actions/build-react-router/action.yml b/.github/workflows/actions/build-react-router/action.yml deleted file mode 100644 index a003fd83d6c..00000000000 --- a/.github/workflows/actions/build-react-router/action.yml +++ /dev/null @@ -1,39 +0,0 @@ -name: 'Build Ionic React Router' -description: 'Build Ionic React Router' -runs: - using: 'composite' - steps: - - uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0 - with: - node-version: 24.x - - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-core - path: ./core - filename: CoreBuild.zip - - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-react - path: ./packages/react - filename: ReactBuild.zip - - name: πŸ•ΈοΈ Install Dependencies - run: npm ci - shell: bash - working-directory: ./packages/react-router - - name: πŸ”„ Sync - run: npm run sync - shell: bash - working-directory: ./packages/react-router - - name: πŸ–ŒοΈ Lint - run: npm run lint - shell: bash - working-directory: ./packages/react-router - - name: πŸ—οΈ Build - run: npm run build - shell: bash - working-directory: ./packages/react-router - - uses: ./.github/workflows/actions/upload-archive - with: - name: ionic-react-router - output: packages/react-router/ReactRouterBuild.zip - paths: packages/react-router/dist diff --git a/.github/workflows/actions/build-react/action.yml b/.github/workflows/actions/build-react/action.yml deleted file mode 100644 index b65292f5dc7..00000000000 --- a/.github/workflows/actions/build-react/action.yml +++ /dev/null @@ -1,42 +0,0 @@ -name: 'Build Ionic React' -description: 'Build Ionic React' -runs: - using: 'composite' - steps: - - uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0 - with: - node-version: 24.x - - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-core - path: ./core - filename: CoreBuild.zip - - name: πŸ•ΈοΈ Install React Dependencies - run: npm ci - shell: bash - working-directory: ./packages/react - - name: πŸ”„ Sync - run: npm run sync - shell: bash - working-directory: ./packages/react - - name: πŸ–ŒοΈ Lint - run: npm run lint - shell: bash - working-directory: ./packages/react - - name: πŸ—οΈ Build - run: npm run build - shell: bash - working-directory: ./packages/react - - name: πŸ§ͺ Test Spec - run: npm run test.spec - shell: bash - working-directory: ./packages/react - - name: πŸ” Check Diff - run: git diff --exit-code - shell: bash - working-directory: ./packages/react - - uses: ./.github/workflows/actions/upload-archive - with: - name: ionic-react - output: packages/react/ReactBuild.zip - paths: packages/react/dist packages/react/css diff --git a/.github/workflows/actions/build-vue-router/action.yml b/.github/workflows/actions/build-vue-router/action.yml deleted file mode 100644 index b5bb65c6f89..00000000000 --- a/.github/workflows/actions/build-vue-router/action.yml +++ /dev/null @@ -1,43 +0,0 @@ -name: 'Build Ionic Vue Router' -description: 'Builds Ionic Vue Router' -runs: - using: 'composite' - steps: - - uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0 - with: - node-version: 24.x - - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-core - path: ./core - filename: CoreBuild.zip - - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-vue - path: ./packages/vue - filename: VueBuild.zip - - name: πŸ•ΈοΈ Install Vue Router Dependencies - run: npm ci - shell: bash - working-directory: ./packages/vue-router - - name: πŸ”„ Sync - run: npm run sync - shell: bash - working-directory: ./packages/vue-router - - name: πŸ–ŒοΈ Lint - run: npm run lint - shell: bash - working-directory: ./packages/vue-router - - name: πŸ—οΈ Build - run: npm run build - shell: bash - working-directory: ./packages/vue-router - - name: πŸ§ͺ Test Spec - run: npm run test.spec - shell: bash - working-directory: ./packages/vue-router - - uses: ./.github/workflows/actions/upload-archive - with: - name: ionic-vue-router - output: ./packages/vue-router/VueRouterBuild.zip - paths: packages/vue-router/dist diff --git a/.github/workflows/actions/build-vue/action.yml b/.github/workflows/actions/build-vue/action.yml deleted file mode 100644 index e660c31bbbd..00000000000 --- a/.github/workflows/actions/build-vue/action.yml +++ /dev/null @@ -1,38 +0,0 @@ -name: 'Build Ionic Vue' -description: 'Build Ionic Vue' -runs: - using: 'composite' - steps: - - uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0 - with: - node-version: 24.x - - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-core - path: ./core - filename: CoreBuild.zip - - name: πŸ•ΈοΈ Install Vue Dependencies - run: npm ci - shell: bash - working-directory: ./packages/vue - - name: πŸ”„ Sync - run: npm run sync - shell: bash - working-directory: ./packages/vue - - name: πŸ–ŒοΈ Lint - run: npm run lint - shell: bash - working-directory: ./packages/vue - - name: πŸ—οΈ Build - run: npm run build - shell: bash - working-directory: ./packages/vue - - name: πŸ” Check Diff - run: git diff --exit-code - shell: bash - working-directory: ./packages/vue - - uses: ./.github/workflows/actions/upload-archive - with: - name: ionic-vue - output: packages/vue/VueBuild.zip - paths: packages/vue/dist packages/vue/css diff --git a/.github/workflows/actions/download-archive/action.yml b/.github/workflows/actions/download-archive/action.yml deleted file mode 100644 index e61c44a0910..00000000000 --- a/.github/workflows/actions/download-archive/action.yml +++ /dev/null @@ -1,19 +0,0 @@ -name: 'Ionic Framework Archive Download' -description: 'Downloads and decompresses an archive from a previous job' -inputs: - path: - description: 'Input archive name' - filename: - description: 'Input file name' - name: - description: 'Archive name' -runs: - using: 'composite' - steps: - - uses: actions/download-artifact@v7 - with: - name: ${{ inputs.name }} - path: ${{ inputs.path }} - - name: πŸ”Ž Extract Archive - run: unzip -q -o ${{ inputs.path }}/${{ inputs.filename }} - shell: bash diff --git a/.github/workflows/actions/test-angular-e2e/action.yml b/.github/workflows/actions/test-angular-e2e/action.yml deleted file mode 100644 index 9c3ac716d53..00000000000 --- a/.github/workflows/actions/test-angular-e2e/action.yml +++ /dev/null @@ -1,46 +0,0 @@ -name: 'Test Angular E2E' -description: 'Test Angular E2E' -inputs: - app: - description: 'The specific test application' -runs: - using: 'composite' - steps: - - uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0 - with: - node-version: 24.x - - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-core - path: ./core - filename: CoreBuild.zip - - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-angular - path: ./angular - filename: AngularBuild.zip - - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-angular-server - path: ./packages/angular-server - filename: AngularServerBuild.zip - - name: πŸ§ͺ Create Test App - run: ./build.sh ${{ inputs.app }} - shell: bash - working-directory: ./packages/angular/test - - name: πŸ•ΈοΈ Install Dependencies - run: npm install - shell: bash - working-directory: ./packages/angular/test/build/${{ inputs.app }} - - name: πŸ“¦ Install Playwright Browsers - run: npx playwright install - shell: bash - working-directory: ./packages/angular/test/build/${{ inputs.app }} - - name: πŸ”„ Sync Built Changes - run: npm run sync - shell: bash - working-directory: ./packages/angular/test/build/${{ inputs.app }} - - name: πŸ§ͺ Run Tests - run: npm run test - shell: bash - working-directory: ./packages/angular/test/build/${{ inputs.app }} diff --git a/.github/workflows/actions/test-core-clean-build/action.yml b/.github/workflows/actions/test-core-clean-build/action.yml deleted file mode 100644 index b69a485b33f..00000000000 --- a/.github/workflows/actions/test-core-clean-build/action.yml +++ /dev/null @@ -1,27 +0,0 @@ -name: 'Test Core Clean Build' -description: 'Test Core Clean Build' -runs: - using: 'composite' - steps: - - uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0 - with: - node-version: 24.x - - - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-core - path: ./core - filename: CoreBuild.zip - - name: πŸ” Check Diff - run: | - git diff --exit-code || { - echo -e "\033[1;31m⚠️ Error: Differences Detected ⚠️\033[0m" - echo -e "\033[1;31mThere are uncommitted changes between the build outputs from CI and your branch.\033[0m" - echo -e "\033[1;31mPlease ensure you have followed these steps:\033[0m" - echo -e "\033[1;31m1. Run 'npm run build' locally to generate the latest build output.\033[0m" - echo -e "\033[1;31m2. Commit and push all necessary changes to your branch.\033[0m" - echo -e "\033[1;31m3. Compare and validate the differences before proceeding.\033[0m" - exit 1 - } - shell: bash - working-directory: ./core diff --git a/.github/workflows/actions/test-core-lint/action.yml b/.github/workflows/actions/test-core-lint/action.yml deleted file mode 100644 index 8e81bd6a635..00000000000 --- a/.github/workflows/actions/test-core-lint/action.yml +++ /dev/null @@ -1,23 +0,0 @@ -name: 'Test Core Lint' -description: 'Test Core Lint' -runs: - using: 'composite' - steps: - - uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0 - with: - node-version: 24.x - - name: πŸ•ΈοΈ Install Dependencies - run: npm ci - working-directory: ./core - shell: bash - - name: πŸ–ŒοΈ Lint - run: npm run lint - shell: bash - working-directory: ./core - # Lint changes should be pushed - # to the branch before the branch - # is merge eligible. - - name: πŸ”Ž Check Lint Results - run: git diff --exit-code - shell: bash - working-directory: ./core diff --git a/.github/workflows/actions/test-core-screenshot/action.yml b/.github/workflows/actions/test-core-screenshot/action.yml deleted file mode 100644 index e3c7d8771d5..00000000000 --- a/.github/workflows/actions/test-core-screenshot/action.yml +++ /dev/null @@ -1,81 +0,0 @@ -name: 'Test Core Screenshot' -description: 'Test Core Screenshot' -inputs: - shard: - description: 'Playwright Test Shard (ex: 2)' - totalShards: - description: 'Playwright total number of test shards (ex: 4)' - update: - description: 'Whether or not to update the reference snapshots' - component: - description: 'The component to update the reference snapshots' - -runs: - using: 'composite' - steps: - - uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0 - with: - node-version: 24.x - - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-core - path: ./core - filename: CoreBuild.zip - - name: πŸ•ΈοΈ Install Dependencies - run: npm install - shell: bash - working-directory: ./core - - name: πŸ§ͺ Test - if: inputs.update != 'true' - run: npm run test.e2e.docker.ci ${{ inputs.component }} -- --shard=${{ inputs.shard }}/${{ inputs.totalShards }} - shell: bash - working-directory: ./core - - name: Test and Update - id: test-and-update - if: inputs.update == 'true' - # Keep track of the files that were - # changed so they can be correctly restored - # in the combine step. - # To do this, we move only the changed files - # to a separate directory, while preserving the - # directory structure of the source. - # When, we create and archive of these results - # so that the combine step can simply - # unzip and move the changed files into place. - # We have extra logic added so that job runners - # that do not have any new screenshots do not create - # an unnecessary .zip. - # Note that we need to unzip directory to be "core" - # which is why we not using the upload-archive - # composite step here. - run: | - npm run test.e2e.docker.ci ${{ inputs.component }} -- --shard=${{ inputs.shard }}/${{ inputs.totalShards }} --update-snapshots='changed' - git add src/\*.png --force - mkdir updated-screenshots - cd ../ && rsync -R --progress $(git diff --name-only --cached) core/updated-screenshots - if [ -d core/updated-screenshots/core ]; then - echo "hasUpdatedScreenshots=$(echo 'true')" >> $GITHUB_OUTPUT - cd core/updated-screenshots - zip -q -r ../../UpdatedScreenshots-${{ inputs.shard }}-${{ inputs.totalShards }}.zip core - fi - shell: bash - working-directory: ./core - - name: πŸ“¦ Archive Updated Screenshots - if: inputs.update == 'true' && steps.test-and-update.outputs.hasUpdatedScreenshots == 'true' - uses: actions/upload-artifact@v6 - with: - name: updated-screenshots-${{ inputs.shard }}-${{ inputs.totalShards }} - path: UpdatedScreenshots-${{ inputs.shard }}-${{ inputs.totalShards }}.zip - - name: πŸ“¦ Archive Test Results - # The always() ensures that this step - # runs even if the previous step fails. - # We want the test results to be archived - # even if the test fails in the previous - # step, otherwise there would be no way - # to debug these tests. - if: always() - uses: ./.github/workflows/actions/upload-archive - with: - name: test-results-${{ inputs.shard }}-${{ inputs.totalShards }} - output: core/TestResults-${{ inputs.shard }}-${{ inputs.totalShards }}.zip - paths: core/playwright-report diff --git a/.github/workflows/actions/test-core-spec/action.yml b/.github/workflows/actions/test-core-spec/action.yml deleted file mode 100644 index ee54ae604cf..00000000000 --- a/.github/workflows/actions/test-core-spec/action.yml +++ /dev/null @@ -1,29 +0,0 @@ -name: 'Test Core Spec' -description: 'Test Core Spec' -inputs: - stencil-version: - description: 'The NPM tag of @stencil/core to install.' -runs: - using: 'composite' - steps: - - uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0 - with: - node-version: 24.x - - name: πŸ•ΈοΈ Install Dependencies - run: npm ci - working-directory: ./core - shell: bash - - name: πŸ“¦ Install Stencil ${{ inputs.stencil-version }} - run: npm install @stencil/core@${{ inputs.stencil-version }} - shell: bash - working-directory: ./core - if: ${{ inputs.stencil-version != '' }} - - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-core - path: ./core - filename: CoreBuild.zip - - name: πŸ§ͺ Test - run: npm run test.spec -- --ci - shell: bash - working-directory: ./core diff --git a/.github/workflows/actions/test-react-e2e/action.yml b/.github/workflows/actions/test-react-e2e/action.yml deleted file mode 100644 index d27dd9f836e..00000000000 --- a/.github/workflows/actions/test-react-e2e/action.yml +++ /dev/null @@ -1,47 +0,0 @@ -name: 'Test React E2E' -description: 'Test React E2E' -inputs: - app: - description: 'The specific test application' -runs: - using: 'composite' - steps: - - uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0 - with: - node-version: 24.x - - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-core - path: ./core - filename: CoreBuild.zip - - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-react - path: ./packages/react - filename: ReactBuild.zip - - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-react-router - path: ./packages/react-router - filename: ReactRouterBuild.zip - - name: πŸ§ͺ Create Test App - run: ./build.sh ${{ inputs.app }} - shell: bash - working-directory: ./packages/react/test - - name: πŸ•ΈοΈ Install Dependencies - run: npm install - shell: bash - working-directory: ./packages/react/test/build/${{ inputs.app }} - - name: πŸ”„ Sync Built Changes - run: npm run sync - shell: bash - working-directory: ./packages/react/test/build/${{ inputs.app }} - - name: πŸ—οΈ Build - run: npm run build - shell: bash - working-directory: ./packages/react/test/build/${{ inputs.app }} - - name: πŸ§ͺ Run Tests - run: npm run e2e - shell: bash - working-directory: ./packages/react/test/build/${{ inputs.app }} - diff --git a/.github/workflows/actions/test-react-router-e2e/action.yml b/.github/workflows/actions/test-react-router-e2e/action.yml deleted file mode 100644 index b4e627ee896..00000000000 --- a/.github/workflows/actions/test-react-router-e2e/action.yml +++ /dev/null @@ -1,46 +0,0 @@ -name: 'Test React Router E2E' -description: 'Test React Router' -inputs: - app: - description: 'The specific test application' -runs: - using: 'composite' - steps: - - uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0 - with: - node-version: 24.x - - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-core - path: ./core - filename: CoreBuild.zip - - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-react - path: ./packages/react - filename: ReactBuild.zip - - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-react-router - path: ./packages/react-router - filename: ReactRouterBuild.zip - - name: πŸ§ͺ Create Test App - run: ./build.sh ${{ inputs.app }} - shell: bash - working-directory: ./packages/react-router/test - - name: πŸ•ΈοΈ Install Dependencies - run: npm install - shell: bash - working-directory: ./packages/react-router/test/build/${{ inputs.app }} - - name: πŸ”„ Sync Built Changes - run: npm run sync - shell: bash - working-directory: ./packages/react-router/test/build/${{ inputs.app }} - - name: πŸ—οΈ Build - run: npm run build - shell: bash - working-directory: ./packages/react-router/test/build/${{ inputs.app }} - - name: πŸ§ͺ Run Tests - run: npm run e2e - shell: bash - working-directory: ./packages/react-router/test/build/${{ inputs.app }} diff --git a/.github/workflows/actions/test-vue-e2e/action.yml b/.github/workflows/actions/test-vue-e2e/action.yml deleted file mode 100644 index c0adfd409b9..00000000000 --- a/.github/workflows/actions/test-vue-e2e/action.yml +++ /dev/null @@ -1,46 +0,0 @@ -name: 'Test Vue E2E' -description: 'Test Vue E2E' -inputs: - app: - description: 'The specific test application' -runs: - using: 'composite' - steps: - - uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0 - with: - node-version: 24.x - - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-core - path: ./core - filename: CoreBuild.zip - - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-vue - path: ./packages/vue - filename: VueBuild.zip - - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-vue-router - path: ./packages/vue-router - filename: VueRouterBuild.zip - - name: πŸ§ͺ Create Test App - run: ./build.sh ${{ inputs.app }} - shell: bash - working-directory: ./packages/vue/test - - name: πŸ“¦ Install Dependencies - run: npm install - shell: bash - working-directory: ./packages/vue/test/build/${{ inputs.app }} - - name: πŸ”„ Sync - run: npm run sync - shell: bash - working-directory: ./packages/vue/test/build/${{ inputs.app }} - - name: πŸ§ͺ Run Spec Tests - run: npm run test:unit - shell: bash - working-directory: ./packages/vue/test/build/${{ inputs.app }} - - name: πŸ§ͺ Run E2E Tests - run: npm run test:e2e - shell: bash - working-directory: ./packages/vue/test/build/${{ inputs.app }} diff --git a/.github/workflows/actions/update-reference-screenshots/action.yml b/.github/workflows/actions/update-reference-screenshots/action.yml deleted file mode 100644 index ad41d5e724d..00000000000 --- a/.github/workflows/actions/update-reference-screenshots/action.yml +++ /dev/null @@ -1,54 +0,0 @@ -name: 'Update Reference Screenshots' -description: 'Update Reference Screenshots' - -on: - workflow_dispatch: - -runs: - using: 'composite' - steps: - - uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0 - with: - node-version: 24.x - - uses: actions/download-artifact@v7 - with: - path: ./artifacts - - name: πŸ”Ž Extract Archives - # This finds all .zip files in the ./artifacts - # directory, including nested directories. - # It then unzips every .zip to the root directory - run: | - find . -type f -name 'UpdatedScreenshots-*.zip' -exec unzip -q -o -d ../ {} \; - shell: bash - working-directory: ./artifacts - - name: πŸ“Έ Push Screenshots - # Configure user as Ionitron - # and push only the changed .png snapshots - # to the remote branch. - # Non-Linux screenshots are in .gitignore - # to prevent local screenshots from getting - # pushed to Git. - run: | - git config user.name ionitron - git config user.email hi@ionicframework.com - - # This adds an empty entry for new - # screenshot files so we can track them with - # git diff - git add src/\*.png -N - - if git diff --exit-code; then - echo -e "\033[1;31m⚠️ Error: No new screenshots generated ⚠️\033[0m" - echo -e "\033[1;31mThis means that there were zero visual diffs when running screenshot tests.\033[0m" - echo -e "\033[1;31mMake sure you have pushed any code changes that would result in visual diffs.\033[0m" - exit 1 - else - # This actually adds the contents - # of the screenshots (including new ones) - git add src/\*.png - git commit -m "chore(): add updated snapshots" - git push - fi - - shell: bash - working-directory: ./core diff --git a/.github/workflows/actions/upload-archive/action.yml b/.github/workflows/actions/upload-archive/action.yml deleted file mode 100644 index 67465651c88..00000000000 --- a/.github/workflows/actions/upload-archive/action.yml +++ /dev/null @@ -1,19 +0,0 @@ -name: 'Ionic Framework Archive Upload' -description: 'Compresses and uploads an archive to be reused across jobs' -inputs: - paths: - description: 'Paths to files or directories to archive' - output: - description: 'Output file name' - name: - description: 'Archive name' -runs: - using: 'composite' - steps: - - name: πŸ—„οΈ Create Archive - run: zip -q -r ${{ inputs.output }} ${{ inputs.paths }} - shell: bash - - uses: actions/upload-artifact@v6 - with: - name: ${{ inputs.name }} - path: ${{ inputs.output }} diff --git a/.github/workflows/assign-issues.yml b/.github/workflows/assign-issues.yml deleted file mode 100644 index d06c1f52e10..00000000000 --- a/.github/workflows/assign-issues.yml +++ /dev/null @@ -1,18 +0,0 @@ -name: Assign issues to triage - -on: - issues: - types: [opened] - -jobs: - auto-assign: - runs-on: ubuntu-latest - permissions: - issues: write - steps: - - name: 'Auto-assign issue' - uses: pozil/auto-assign-issue@39c06395cbac76e79afc4ad4e5c5c6db6ecfdd2e # v2.2.0 - with: - assignees: brandyscarney, thetaPC, ShaneK - numOfAssignee: 1 - allowSelfAssign: false diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml deleted file mode 100644 index d3d52e048be..00000000000 --- a/.github/workflows/build.yml +++ /dev/null @@ -1,217 +0,0 @@ -name: 'Ionic Framework Build' - -on: - pull_request: - branches: [ '**' ] - merge_group: - workflow_dispatch: - inputs: - ionicons_npm_release_tag: - required: false - type: string - description: What version of ionicons should be pulled from NPM? Use this if you want to test a custom version of Ionicons with Ionic. - -# When pushing a new commit we should -# cancel the previous test run to not -# consume more runners than we need to. -concurrency: - group: ${{ github.ref }} - cancel-in-progress: true - -jobs: - build-core: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - uses: ./.github/workflows/actions/build-core - with: - ionicons-version: ${{ inputs.ionicons_npm_release_tag }} - - test-core-clean-build: - needs: [build-core] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - uses: ./.github/workflows/actions/test-core-clean-build - - test-core-lint: - needs: [build-core] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - uses: ./.github/workflows/actions/test-core-lint - - test-core-spec: - needs: [build-core] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - uses: ./.github/workflows/actions/test-core-spec - - test-core-screenshot: - strategy: - matrix: - # Divide the tests into n buckets - # and run those buckets in parallel. - # To increase the number of shards, - # add new items to the shard array - # and change the value of totalShards - # to be the length of the shard array. - shard: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] - totalShards: [20] - needs: [build-core] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - uses: ./.github/workflows/actions/test-core-screenshot - with: - shard: ${{ matrix.shard }} - totalShards: ${{ matrix.totalShards }} - - # Screenshots are required to pass - # in order for the branch to be merge - # eligible. However, the screenshot tests - # are run on n runners where n can change - # over time. The verify-screenshots step allows - # us to have a required status check for screenshot - # results without having to manually add each - # matrix run in the branch protection rules - # Source: https://github.community/t/status-check-for-a-matrix-jobs/127354 - verify-screenshots: - if: ${{ always() }} - needs: test-core-screenshot - runs-on: ubuntu-latest - steps: - - name: Check build matrix status - if: ${{ needs.test-core-screenshot.result != 'success' }} - run: exit 1 - - build-vue: - needs: [build-core] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - uses: ./.github/workflows/actions/build-vue - - build-vue-router: - needs: [build-vue] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - uses: ./.github/workflows/actions/build-vue-router - - test-vue-e2e: - strategy: - fail-fast: false - matrix: - apps: [vue3] - needs: [build-vue, build-vue-router] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - uses: ./.github/workflows/actions/test-vue-e2e - with: - app: ${{ matrix.apps }} - - verify-test-vue-e2e: - if: ${{ always() }} - needs: test-vue-e2e - runs-on: ubuntu-latest - steps: - - name: Check build matrix status - if: ${{ needs.test-vue-e2e.result != 'success' }} - run: exit 1 - - build-angular: - needs: [build-core] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - uses: ./.github/workflows/actions/build-angular - - build-angular-server: - needs: [build-core] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - uses: ./.github/workflows/actions/build-angular-server - - test-angular-e2e: - strategy: - fail-fast: false - matrix: - apps: [ng16, ng17, ng18, ng19, ng20] - needs: [build-angular, build-angular-server] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - uses: ./.github/workflows/actions/test-angular-e2e - with: - app: ${{ matrix.apps }} - - verify-test-angular-e2e: - if: ${{ always() }} - needs: test-angular-e2e - runs-on: ubuntu-latest - steps: - - name: Check build matrix status - if: ${{ needs.test-angular-e2e.result != 'success' }} - run: exit 1 - - build-react: - needs: [build-core] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - uses: ./.github/workflows/actions/build-react - - build-react-router: - needs: [build-react] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - uses: ./.github/workflows/actions/build-react-router - - test-react-router-e2e: - strategy: - fail-fast: false - matrix: - apps: [reactrouter5] - needs: [build-react, build-react-router] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - uses: ./.github/workflows/actions/test-react-router-e2e - with: - app: ${{ matrix.apps }} - - verify-test-react-router-e2e: - if: ${{ always() }} - needs: test-react-router-e2e - runs-on: ubuntu-latest - steps: - - name: Check build matrix status - if: ${{ needs.test-react-router-e2e.result != 'success' }} - run: exit 1 - - test-react-e2e: - strategy: - fail-fast: false - matrix: - apps: [react17, react18, react19] - needs: [build-react, build-react-router] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - uses: ./.github/workflows/actions/test-react-e2e - with: - app: ${{ matrix.apps }} - - verify-test-react-e2e: - if: ${{ always() }} - needs: test-react-e2e - runs-on: ubuntu-latest - steps: - - name: Check build matrix status - if: ${{ needs.test-react-e2e.result != 'success' }} - run: exit 1 diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml deleted file mode 100644 index 2844a4f9b01..00000000000 --- a/.github/workflows/codeql-analysis.yml +++ /dev/null @@ -1,21 +0,0 @@ -name: CodeQL - -on: - push: - branches: - - main - pull_request: - branches: - - main - -jobs: - analyze: - runs-on: ubuntu-latest - permissions: - security-events: write - steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - uses: github/codeql-action/init@v4 - with: - languages: javascript - - uses: github/codeql-action/analyze@v4 diff --git a/.github/workflows/conventional-commit.yml b/.github/workflows/conventional-commit.yml deleted file mode 100644 index 8c0bbdebb37..00000000000 --- a/.github/workflows/conventional-commit.yml +++ /dev/null @@ -1,43 +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 - if: | - !contains(github.event.pull_request.title, 'release') && - !contains(github.event.pull_request.title, 'chore') - uses: amannn/action-semantic-pull-request@v6 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - # Configure that a scope must always be provided. - requireScope: true - # Configure allowed commit types - types: | - feat - fix - docs - style - refactor - perf - test - build - ci - revert - release - chore - # 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. diff --git a/.github/workflows/dev-build.yml b/.github/workflows/dev-build.yml deleted file mode 100644 index 2c459097e67..00000000000 --- a/.github/workflows/dev-build.yml +++ /dev/null @@ -1,45 +0,0 @@ -name: 'Ionic Dev Build' - -on: - workflow_call: - -permissions: - contents: read - id-token: write - -jobs: - create-dev-hash: - runs-on: ubuntu-latest - outputs: - dev-hash: ${{ steps.create-dev-hash.outputs.DEV_HASH }} - steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - # A 1 is required before the timestamp - # as lerna will fail when there is a leading 0 - # See https://github.com/lerna/lerna/issues/2840 - - name: Install Dependencies - run: npm ci - shell: bash - - id: create-dev-hash - name: Create Dev Hash - run: | - echo "DEV_HASH=$(node ./.scripts/bump-version.js)-dev.1$(date +%s).1$(git log -1 --format=%H | cut -c 1-7)" >> $GITHUB_OUTPUT - shell: bash - - release-ionic: - needs: [create-dev-hash] - permissions: - contents: read - id-token: write - uses: ./.github/workflows/release-ionic.yml - with: - tag: dev - version: ${{ needs.create-dev-hash.outputs.dev-hash }} - - get-build: - name: Get your dev build! - runs-on: ubuntu-latest - needs: [create-dev-hash, release-ionic] - steps: - - run: echo ${{ needs.create-dev-hash.outputs.dev-hash }} - diff --git a/.github/workflows/label.yml b/.github/workflows/label.yml deleted file mode 100644 index 7f5d8de9787..00000000000 --- a/.github/workflows/label.yml +++ /dev/null @@ -1,19 +0,0 @@ -# This workflow will triage pull requests and apply a label based on the -# paths that are modified in the pull request. -# -# To use this workflow, you will need to set up a .github/labeler.yml -# file with configuration. For more information, see: -# https://github.com/actions/labeler - -name: "Pull Request Labeler" -on: -- pull_request_target - -jobs: - triage: - runs-on: ubuntu-latest - steps: - - uses: actions/labeler@v6 - with: - repo-token: "${{ secrets.GITHUB_TOKEN }}" - sync-labels: true diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml deleted file mode 100644 index dc2fa5860a9..00000000000 --- a/.github/workflows/nightly.yml +++ /dev/null @@ -1,40 +0,0 @@ -name: 'Ionic Nightly Build' - -on: - workflow_call: - -permissions: - contents: read - id-token: write - -jobs: - create-nightly-hash: - runs-on: ubuntu-latest - outputs: - nightly-hash: ${{ steps.create-nightly-hash.outputs.NIGHTLY_HASH }} - steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - # A 1 is required before the timestamp - # as lerna will fail when there is a leading 0 - # See https://github.com/lerna/lerna/issues/2840 - - name: Install Dependencies - run: npm ci - shell: bash - - id: create-nightly-hash - name: Create Nightly Hash - # The date should output YYYYMMDD - # so that it is human readable - run: | - echo "NIGHTLY_HASH=$(node ./.scripts/bump-version.js)-nightly.$(date +%Y%m%d)" >> $GITHUB_OUTPUT - shell: bash - - release-ionic: - needs: [create-nightly-hash] - permissions: - contents: read - id-token: write - uses: ./.github/workflows/release-ionic.yml - secrets: inherit - with: - tag: nightly - version: ${{ needs.create-nightly-hash.outputs.nightly-hash }} diff --git a/.github/workflows/release-ionic.yml b/.github/workflows/release-ionic.yml deleted file mode 100644 index c3f9e5740b6..00000000000 --- a/.github/workflows/release-ionic.yml +++ /dev/null @@ -1,210 +0,0 @@ -name: 'Release Ionic' - -on: - workflow_call: - inputs: - version: - description: 'The type of version to release.' - type: string - required: true - tag: - description: 'The tag to publish to NPM.' - type: string - required: true - preid: - description: 'The prerelease identifier used when doing a prerelease.' - type: string - -permissions: - contents: read - id-token: write - -jobs: - release-core: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - uses: ./.github/actions/publish-npm - with: - scope: '@ionic/core' - tag: ${{ inputs.tag }} - version: ${{ inputs.version }} - preid: ${{ inputs.preid }} - working-directory: 'core' - - name: Cache Built @ionic/core - uses: ./.github/workflows/actions/upload-archive - with: - name: ionic-core - output: core/CoreBuild.zip - paths: core/dist core/components core/css core/hydrate core/loader core/src/components.d.ts - - name: Cache Built @ionic/docs - uses: ./.github/workflows/actions/upload-archive - with: - name: ionic-docs - output: packages/docs/DocsBuild.zip - paths: packages/docs/core.json packages/docs/core.d.ts - - release-docs: - needs: [release-core] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - name: Restore @ionic/docs built cache - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-docs - path: ./packages/docs - filename: DocsBuild.zip - - uses: ./.github/actions/publish-npm - with: - scope: '@ionic/docs' - tag: ${{ inputs.tag }} - version: ${{ inputs.version }} - preid: ${{ inputs.preid }} - working-directory: 'packages/docs' - - release-angular: - needs: [release-core] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - name: Restore @ionic/core built cache - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-core - path: ./core - filename: CoreBuild.zip - - uses: ./.github/actions/publish-npm - with: - scope: '@ionic/angular' - tag: ${{ inputs.tag }} - version: ${{ inputs.version }} - preid: ${{ inputs.preid }} - working-directory: 'packages/angular' - folder: './dist' - - name: Cache Built @ionic/angular - uses: ./.github/workflows/actions/upload-archive - with: - name: ionic-angular - output: packages/angular/AngularBuild.zip - paths: packages/angular/dist - - release-react: - needs: [release-core] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - name: Restore @ionic/core built cache - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-core - path: ./core - filename: CoreBuild.zip - - uses: ./.github/actions/publish-npm - with: - scope: '@ionic/react' - tag: ${{ inputs.tag }} - version: ${{ inputs.version }} - preid: ${{ inputs.preid }} - working-directory: 'packages/react' - - name: Cache Built @ionic/react - uses: ./.github/workflows/actions/upload-archive - with: - name: ionic-react - output: packages/react/ReactBuild.zip - paths: packages/react/dist packages/react/css - - release-vue: - needs: [release-core] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - name: Restore @ionic/core built cache - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-core - path: ./core - filename: CoreBuild.zip - - uses: ./.github/actions/publish-npm - with: - scope: '@ionic/vue' - tag: ${{ inputs.tag }} - version: ${{ inputs.version }} - preid: ${{ inputs.preid }} - working-directory: 'packages/vue' - - name: Cache Built @ionic/vue - uses: ./.github/workflows/actions/upload-archive - with: - name: ionic-vue - output: packages/vue/VueBuild.zip - paths: packages/vue/dist packages/vue/css - - release-angular-server: - needs: [release-core] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - name: Restore @ionic/core built cache - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-core - path: ./core - filename: CoreBuild.zip - - uses: ./.github/actions/publish-npm - with: - scope: '@ionic/angular-server' - tag: ${{ inputs.tag }} - version: ${{ inputs.version }} - preid: ${{ inputs.preid }} - working-directory: 'packages/angular-server' - folder: './dist' - - release-react-router: - needs: [release-react] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - name: Restore @ionic/core built cache - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-core - path: ./core - filename: CoreBuild.zip - - name: Restore @ionic/react built cache - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-react - path: ./packages/react - filename: ReactBuild.zip - - uses: ./.github/actions/publish-npm - with: - scope: '@ionic/react-router' - tag: ${{ inputs.tag }} - version: ${{ inputs.version }} - preid: ${{ inputs.preid }} - working-directory: 'packages/react-router' - - release-vue-router: - needs: [release-vue] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - name: Restore @ionic/core built cache - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-core - path: ./core - filename: CoreBuild.zip - - name: Restore @ionic/vue built cache - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-vue - path: ./packages/vue - filename: VueBuild.zip - - uses: ./.github/actions/publish-npm - with: - scope: '@ionic/vue-router' - tag: ${{ inputs.tag }} - version: ${{ inputs.version }} - preid: ${{ inputs.preid }} - working-directory: 'packages/vue-router' diff --git a/.github/workflows/release-orchestrator.yml b/.github/workflows/release-orchestrator.yml deleted file mode 100644 index a0c05cbcd58..00000000000 --- a/.github/workflows/release-orchestrator.yml +++ /dev/null @@ -1,81 +0,0 @@ -name: 'Release - Ionic Framework' - -on: - schedule: - # Run every Monday-Friday - # at 6:00 UTC (6:00 am UTC) - - cron: '00 06 * * 1-5' - workflow_dispatch: - inputs: - release-type: - description: 'Which Ionic release workflow should run?' - required: true - type: choice - default: dev - options: - - dev - - production - version: - description: 'Which version should be published? (Only for production releases)' - required: false - type: choice - options: - - patch - - minor - - major - - prepatch - - preminor - - premajor - - prerelease - tag: - description: 'Which npm tag should this be published to? (Only for production releases)' - required: false - type: choice - default: latest - options: - - latest - - next - preid: - description: 'Which prerelease identifier should be used? (Only for production releases)' - required: false - type: choice - default: '' - options: - - '' - - alpha - - beta - - rc - - next - -permissions: - contents: read - id-token: write - -jobs: - run-nightly: - if: ${{ github.event_name == 'schedule' }} - permissions: - contents: read - id-token: write - uses: ./.github/workflows/nightly.yml - secrets: inherit - - run-dev: - if: ${{ github.event_name == 'workflow_dispatch' && inputs.release-type == 'dev' }} - permissions: - contents: read - id-token: write - uses: ./.github/workflows/dev-build.yml - secrets: inherit - - run-production: - if: ${{ github.event_name == 'workflow_dispatch' && inputs.release-type == 'production' }} - permissions: - contents: write - id-token: write - uses: ./.github/workflows/release.yml - secrets: inherit - with: - version: ${{ inputs.version }} - tag: ${{ inputs.tag }} - preid: ${{ inputs.preid }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml deleted file mode 100644 index a3bb4491cf5..00000000000 --- a/.github/workflows/release.yml +++ /dev/null @@ -1,146 +0,0 @@ -name: 'Ionic Production Release' - -on: - workflow_call: - inputs: - version: - description: 'Which version should be published?' - required: true - type: string - tag: - description: 'Which npm tag should this be published to?' - required: true - type: string - preid: - description: 'Which prerelease identifier should be used? This is only needed when version is "prepatch", "preminor", "premajor", or "prerelease".' - required: false - type: string - -permissions: - contents: read - id-token: write - -jobs: - validate_version: - name: βœ… Validate Version Input - runs-on: ubuntu-latest - steps: - - name: πŸ”Ž Ensure version is allowed - env: - VERSION: ${{ inputs.version }} - run: | - case "$VERSION" in - patch|minor|major|prepatch|preminor|premajor|prerelease) - exit 0 - ;; - *) - echo "::error::Invalid version input: '$VERSION'. Allowed values: patch, minor, major, prepatch, preminor, premajor, prerelease." - exit 1 - ;; - esac - shell: bash - - release-ionic: - needs: [validate_version] - permissions: - contents: read - id-token: write - uses: ./.github/workflows/release-ionic.yml - with: - tag: ${{ inputs.tag }} - version: ${{ inputs.version }} - preid: ${{ inputs.preid }} - - finalize-release: - needs: [release-ionic] - runs-on: ubuntu-latest - permissions: - contents: write - id-token: write - steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - with: - token: ${{ secrets.IONITRON_TOKEN }} - fetch-depth: 0 - - name: Configure Identity - # Commits from github-actions do not - # trigger other GitHub Actions. As a result, - # we publish releases from Ionitron instead - # so actions run when merging the release branch - # back into main. - run: | - git config user.name ionitron - git config user.email hi@ionicframework.com - shell: bash - - name: Create GitHub Release - run: lerna version ${{ inputs.version }} --yes --force-publish='*' --conventional-commits --create-release github --preid=${{ inputs.preid }} - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - shell: bash - - update-package-lock: - # This needs to run after finalize-release - # because we also push to the repo in that - # job. If these jobs ran in parallel then it is - # possible for them to push at the same time. - needs: [finalize-release] - runs-on: ubuntu-latest - permissions: - contents: write - id-token: write - steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - # Pull the latest version of the reference - # branch instead of the revision that triggered - # the workflow otherwise we won't get the commit - # created in the previous job and this next job - # will fail. - with: - ref: ${{ github.ref }} - - name: Configure Identity - # Commits from github-actions do not - # trigger other GitHub Actions. As a result, - # we push from Ionitron instead so actions - # run when merging the release branch - # back into main. - run: | - git config user.name ionitron - git config user.email hi@ionicframework.com - shell: bash - # Lerna does not automatically bump versions - # of Ionic dependencies that have changed, - # so we do that here. - - name: Bump Package Lock - run: | - lerna exec "npm install --package-lock-only" - git add . - git commit -m "chore(): update package lock files" - git push - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - shell: bash - - purge-cdn-cache: - needs: [release-ionic] - runs-on: ubuntu-latest - steps: - - name: Purge JSDelivr Cache - run: | - curl -X POST \ - https://purge.jsdelivr.net/ \ - -H 'cache-control: no-cache' \ - -H 'content-type: application/json' \ - -d '{ - "path": [ - "/npm/@ionic/core@6/dist/ionic/ionic.esm.js", - "/npm/@ionic/core@7/dist/ionic/ionic.esm.js", - "/npm/@ionic/core@8/dist/ionic/ionic.esm.js", - "/npm/@ionic/core@latest/dist/ionic/ionic.esm.js", - "/npm/@ionic/core@next/dist/ionic/ionic.esm.js", - "/npm/@ionic/core@6/css/ionic.bundle.css", - "/npm/@ionic/core@7/css/ionic.bundle.css", - "/npm/@ionic/core@8/css/ionic.bundle.css", - "/npm/@ionic/core@latest/css/ionic.bundle.css" - "/npm/@ionic/core@next/css/ionic.bundle.css" - ]}' - shell: bash diff --git a/.github/workflows/stencil-nightly.yml b/.github/workflows/stencil-nightly.yml deleted file mode 100644 index b00ac8c42a0..00000000000 --- a/.github/workflows/stencil-nightly.yml +++ /dev/null @@ -1,259 +0,0 @@ -# This workflow is intended to run against the `HEAD` of Stencil's primary branch. -# See https://github.com/ionic-team/stencil for contents of the repository -name: 'Stencil Nightly Build' - -on: - schedule: - # Run every Monday-Friday - # at 6:00 UTC (6:00 am UTC) - - cron: '00 06 * * 1-5' - workflow_dispatch: - inputs: - npm_release_tag: - required: true - type: string - description: What version should be pulled from NPM? - default: nightly - -# When pushing a new commit we should -# cancel the previous test run to not -# consume more runners than we need to. -concurrency: - group: ${{ github.ref }} - cancel-in-progress: false - -jobs: - build-core-with-stencil-nightly: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - uses: ./.github/workflows/actions/build-core-stencil-prerelease - with: - stencil-version: ${{ inputs.npm_release_tag || 'nightly' }} - - test-core-clean-build: - needs: [build-core-with-stencil-nightly] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - uses: ./.github/workflows/actions/test-core-clean-build - - test-core-lint: - needs: [build-core-with-stencil-nightly] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - uses: ./.github/workflows/actions/test-core-lint - - test-core-spec: - needs: [build-core-with-stencil-nightly] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - uses: ./.github/workflows/actions/test-core-spec - with: - stencil-version: ${{ inputs.npm_release_tag || 'nightly' }} - - test-core-screenshot: - strategy: - # This ensures that all screenshot shard - # failures are reported so the dev can - # review everything at once. - fail-fast: false - matrix: - # Divide the tests into n buckets - # and run those buckets in parallel. - # To increase the number of shards, - # add new items to the shard array - # and change the value of totalShards - # to be the length of the shard array. - shard: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] - totalShards: [20] - needs: [build-core-with-stencil-nightly] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - uses: ./.github/workflows/actions/test-core-screenshot - with: - shard: ${{ matrix.shard }} - totalShards: ${{ matrix.totalShards }} - - # Screenshots are required to pass - # in order for the branch to be merge - # eligible. However, the screenshot tests - # are run on n runners where n can change - # over time. The verify-screenshots step allows - # us to have a required status check for screenshot - # results without having to manually add each - # matrix run in the branch protection rules - # Source: https://github.community/t/status-check-for-a-matrix-jobs/127354 - verify-screenshots: - if: ${{ always() }} - needs: test-core-screenshot - runs-on: ubuntu-latest - steps: - - name: Check build matrix status - if: ${{ needs.test-core-screenshot.result != 'success' }} - run: exit 1 - - build-vue: - needs: [build-core-with-stencil-nightly] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - uses: ./.github/workflows/actions/build-vue - - build-vue-router: - needs: [build-vue] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - uses: ./.github/workflows/actions/build-vue-router - - test-vue-e2e: - strategy: - fail-fast: false - matrix: - apps: [vue3] - needs: [build-vue, build-vue-router] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - uses: ./.github/workflows/actions/test-vue-e2e - with: - app: ${{ matrix.apps }} - - verify-test-vue-e2e: - if: ${{ always() }} - needs: test-vue-e2e - runs-on: ubuntu-latest - steps: - - name: Check build matrix status - if: ${{ needs.test-vue-e2e.result != 'success' }} - run: exit 1 - - build-angular: - needs: [build-core-with-stencil-nightly] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - uses: ./.github/workflows/actions/build-angular - - build-angular-server: - needs: [build-core-with-stencil-nightly] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - uses: ./.github/workflows/actions/build-angular-server - - test-angular-e2e: - strategy: - fail-fast: false - matrix: - apps: [ng16, ng17, ng18, ng19, ng20] - needs: [build-angular, build-angular-server] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - uses: ./.github/workflows/actions/test-angular-e2e - with: - app: ${{ matrix.apps }} - - verify-test-angular-e2e: - if: ${{ always() }} - needs: test-angular-e2e - runs-on: ubuntu-latest - steps: - - name: Check build matrix status - if: ${{ needs.test-angular-e2e.result != 'success' }} - run: exit 1 - - build-react: - needs: [build-core-with-stencil-nightly] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - uses: ./.github/workflows/actions/build-react - - build-react-router: - needs: [build-react] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - uses: ./.github/workflows/actions/build-react-router - - test-react-router-e2e: - strategy: - fail-fast: false - matrix: - apps: [reactrouter5] - needs: [build-react, build-react-router] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - uses: ./.github/workflows/actions/test-react-router-e2e - with: - app: ${{ matrix.apps }} - - verify-test-react-router-e2e: - if: ${{ always() }} - needs: test-react-router-e2e - runs-on: ubuntu-latest - steps: - - name: Check build matrix status - if: ${{ needs.test-react-router-e2e.result != 'success' }} - run: exit 1 - - test-react-e2e: - strategy: - fail-fast: false - matrix: - apps: [react17, react18, react19] - needs: [build-react, build-react-router] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - uses: ./.github/workflows/actions/test-react-e2e - with: - app: ${{ matrix.apps }} - - verify-test-react-e2e: - if: ${{ always() }} - needs: test-react-e2e - runs-on: ubuntu-latest - steps: - - name: Check build matrix status - if: ${{ needs.test-react-e2e.result != 'success' }} - run: exit 1 - - send-success-messages: - needs: [test-core-clean-build, test-core-lint, test-core-spec, verify-screenshots, verify-test-vue-e2e, verify-test-angular-e2e, verify-test-react-router-e2e, verify-test-react-e2e] - runs-on: ubuntu-latest - if: ${{ !cancelled() && !contains(needs.*.result, 'failure') }} - steps: - - name: Notify success on Discord - run: | - curl -H "Content-Type:application/json" \ - -d '{"embeds": [{"title": "βœ… Workflow ${{github.workflow}} #${{github.run_number}} finished successfully", "color": 65280, "url": "${{github.server_url}}/${{github.repository}}/actions/runs/${{github.run_id}}"}]}' \ - ${{secrets.DISCORD_NOTIFY_WEBHOOK}} - - name: Notify success on Slack - run: | - curl -H "Content-Type:application/json" \ - -d '{"title": "βœ… Workflow ${{github.workflow}} #${{github.run_number}} finished successfully", "url": "${{github.server_url}}/${{github.repository}}/actions/runs/${{github.run_id}}"}' \ - ${{secrets.SLACK_NOTIFY_SUCCESS_WEBHOOK}} - - send-failure-messages: - needs: [test-core-clean-build, test-core-lint, test-core-spec, verify-screenshots, verify-test-vue-e2e, verify-test-angular-e2e, verify-test-react-router-e2e, verify-test-react-e2e] - runs-on: ubuntu-latest - if: ${{ !cancelled() && contains(needs.*.result, 'failure') }} - steps: - - name: Notify failure on Discord - run: | - curl -H "Content-Type:application/json" \ - -d '{"content": "Alerting <@&1347593178580254761>!", "embeds": [{"title": "❌ Workflow ${{github.workflow}} #${{github.run_number}} failed", "color": 16711680, "url": "${{github.server_url}}/${{github.repository}}/actions/runs/${{github.run_id}}"}]}' \ - ${{secrets.DISCORD_NOTIFY_WEBHOOK}} - - name: Notify failure on Slack - run: | - curl -H "Content-Type:application/json" \ - -d '{"title": "❌ Workflow ${{github.workflow}} #${{github.run_number}} failed", "url": "${{github.server_url}}/${{github.repository}}/actions/runs/${{github.run_id}}"}' \ - ${{secrets.SLACK_NOTIFY_FAILURE_WEBHOOK}} diff --git a/.github/workflows/update-screenshots.yml b/.github/workflows/update-screenshots.yml deleted file mode 100644 index eefcddcb893..00000000000 --- a/.github/workflows/update-screenshots.yml +++ /dev/null @@ -1,72 +0,0 @@ -name: 'Update Reference Screenshots' - -on: - workflow_dispatch: - inputs: - # Screenshots can be updated for all components or specified component(s). - # If the `component` variable is set, then the test has the option to - # - run all the instances of the specified component(s) in the `src/components` folder - # -- For example: if the `component` value is "item", then the following command will be: `npm run test.e2e item` - # - run the specified file path - # -- For example: if the `component` value is "src/components/item/test/basic", then the following command will be: `npm run test.e2e src/components/item/test/basic` - # - run multiple specified components based on the space-separated value - # -- For example: if the `component` value is "item basic", then the following command will be: `npm run test.e2e item basic` - # -- For example: if the `component` value is "src/components/item/test/basic src/components/item/test/a11y", then the following command will be: `npm run test.e2e src/components/item/test/basic src/components/item/test/a11y` - # - # If the `component` variable is not set, then the test will run all the instances of the components in the `src/components` folder. - # - For example: `npm run test.e2e` - # - # More common options can be found at the Playwright Command line page: https://playwright.dev/docs/test-cli - component: - description: 'What component(s) should be updated? (leave blank to update all or use a space-separated list for multiple components)' - required: false - default: '' - -jobs: - build-core: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - uses: ./.github/workflows/actions/build-core - - test-core-screenshot: - strategy: - # This ensures that all screenshot shard - # failures are reported so the dev can - # review everything at once. - fail-fast: false - matrix: - # Divide the tests into n buckets - # and run those buckets in parallel. - # To increase the number of shards, - # add new items to the shard array - # and change the value of totalShards - # to be the length of the shard array. - shard: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] - totalShards: [20] - needs: [build-core] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - uses: ./.github/workflows/actions/test-core-screenshot - with: - shard: ${{ matrix.shard }} - totalShards: ${{ matrix.totalShards }} - update: true - component: ${{ inputs.component }} - - update-reference-screenshots: - runs-on: ubuntu-latest - needs: [test-core-screenshot] - steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - # Normally, we could just push with the - # default GITHUB_TOKEN, but that will - # not cause the build workflow - # to re-run. We use Ionitron's - # Personal Access Token instead - # to allow for this build workflow - # to run when the screenshots are pushed. - with: - token: ${{ secrets.IONITRON_TOKEN }} - - uses: ./.github/workflows/actions/update-reference-screenshots diff --git a/.gitignore b/.gitignore index e610d8a11dd..a40e064be88 100644 --- a/.gitignore +++ b/.gitignore @@ -1,96 +1,27 @@ -*~ +.DS_Store +node_modules *.sw[mnpcod] *.log -*.lock *.tmp *.tmp.* log.txt -*.sublime-project -*.sublime-workspace -*.tgz +example/cordova/iOS/www/js/framework -.idea/ -.vscode/ +example/cordova/iOS/www/js/framework .sass-cache/ -.versions/ -coverage/ -collection/ -dist/ -dist-transpiled/ -node_modules/ -tmp/ -temp/ -core/theme-builder/ -core/test-components/ -core/css/ -$RECYCLE.BIN/ +framework.sublime-project -.DS_Store -Thumbs.db +framework.sublime-workspace UserInterfaceState.xcuserstate -.env - -.package.tmp.json - -src/themes/version.scss -scripts/e2e/webpackEntryPoints.json -scripts/build/e2e-generated-tsconfig.json -*.css.ts - -stats.json - -# demo stuff -demos/node_modules -demos/polyfills -demos/css -demos/fonts -demos/src/**/*.js -demos/src/**/*.map -demos/src/**/*.ngfactory.ts -demos/src/**/*.d.ts -demos/src/**/*.metadata.json -demos/src/**/*.css.shim.ts -prerender.html -prerender-domino.html -prerender-hydrated.html -prerender-static.html -# stencil -packages/react/css/ -packages/vue/css/ -core/components/ -core/css/ -core/hydrate/ -core/loader/ -core/www/ -.stencil/ - -# playwright -core/test-results/ -core/playwright-report/ - -# ground truths generated outside of docker should not be committed to the repo -core/**/*-snapshots/* - -# new ground truths should only be generated inside of docker which will result in -linux.png screenshots -!core/**/*-snapshots/*-linux.png - -# these files are going to be different per-developer environment so do not add them to the repo -core/docker-display.txt -core/docker-display-volume.txt - -# angular -packages/angular/css/ -packages/angular/test/build/ -.angular/ - -# vue -packages/vue/test/build/ +*.sublime-project -# react -packages/react/test/build/ +*.sublime-workspace -# react router -packages/react-router/test/build/ +bower_components/ +components/ +tmp +temp +dist -.npmrc +.idea diff --git a/.jshintignore b/.jshintignore new file mode 100644 index 00000000000..6ce1b00721a --- /dev/null +++ b/.jshintignore @@ -0,0 +1,4 @@ +js/ext/angular/test/**/*.js +js/views/scrollView.js +js/views/sliderView.js +js/utils/utils.js diff --git a/.jshintrc b/.jshintrc new file mode 100644 index 00000000000..fe01d3d406d --- /dev/null +++ b/.jshintrc @@ -0,0 +1,3 @@ +{ + "expr": true +} diff --git a/.scripts/bump-version.js b/.scripts/bump-version.js deleted file mode 100644 index 4ef17c089f8..00000000000 --- a/.scripts/bump-version.js +++ /dev/null @@ -1,10 +0,0 @@ -const semver = require('semver'); - -const getDevVersion = () => { - const originalVersion = require('../lerna.json').version; - const baseVersion = semver.inc(originalVersion, 'patch'); - - return baseVersion; -} - -console.log(getDevVersion()); diff --git a/.stackblitz/codeflow.json b/.stackblitz/codeflow.json deleted file mode 100644 index 6354218ee30..00000000000 --- a/.stackblitz/codeflow.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "bot": { - "issues": { - "enabled": false - }, - "pullRequests": { - "enabled": false - } - } -} diff --git a/.vercelignore b/.vercelignore deleted file mode 100644 index c18553dfa1e..00000000000 --- a/.vercelignore +++ /dev/null @@ -1 +0,0 @@ -core/src/components/**/*/*.png diff --git a/BREAKING.md b/BREAKING.md deleted file mode 100644 index bf44f563dc8..00000000000 --- a/BREAKING.md +++ /dev/null @@ -1,293 +0,0 @@ -# Breaking Changes - -This is a comprehensive list of the breaking changes introduced in the major version releases of Ionic Framework. - -## Versions - -- [Version 8.x](#version-8x) -- [Version 7.x](./BREAKING_ARCHIVE/v7.md) -- [Version 6.x](./BREAKING_ARCHIVE/v6.md) -- [Version 5.x](./BREAKING_ARCHIVE/v5.md) -- [Version 4.x](./BREAKING_ARCHIVE/v4.md) -- [Legacy](https://github.com/ionic-team/ionic-v3/blob/master/CHANGELOG.md) - -## Version 8.x - -- [Browser and Platform Support](#version-8x-browser-platform-support) -- [Dark Mode](#version-8x-dark-mode) -- [Global Styles](#version-8x-global-styles) -- [Haptics](#version-8x-haptics) -- [Components](#version-8x-components) - - [Button](#version-8x-button) - - [Checkbox](#version-8x-checkbox) - - [Content](#version-8x-content) - - [Datetime](#version-8x-datetime) - - [Input](#version-8x-input) - - [Item](#version-8x-item) - - [Modal](#version-8x-modal) - - [Nav](#version-8x-nav) - - [Picker](#version-8x-picker) - - [Progress bar](#version-8x-progress-bar) - - [Radio](#version-8x-radio) - - [Range](#version-8x-range) - - [Searchbar](#version-8x-searchbar) - - [Select](#version-8x-select) - - [Textarea](#version-8x-textarea) - - [Toggle](#version-8x-toggle) -- [Framework Specific](#version-8x-framework-specific) - - [Angular](#version-8x-angular) - -

Browser and Platform Support

- -This section details the desktop browser, JavaScript framework, and mobile platform versions that are supported by Ionic 8. - -**Minimum Browser Versions** -| Desktop Browser | Supported Versions | -| --------------- | ----------------- | -| Chrome | 89+ | -| Safari | 15+ | -| Firefox | 75+ | -| Edge | 89+ | - -**Minimum JavaScript Framework Versions** -| Framework | Supported Version | -| --------- | --------------------- | -| Angular | 16+ | -| React | 17+ | -| Vue | 3.0.6+ | - -**Minimum Mobile Platform Versions** -| Platform | Supported Version | -| -------- | ---------------------- | -| iOS | 15+ | -| Android | 5.1+ with Chromium 89+ | - -Ionic Framework v8 removes backwards support for CSS Animations in favor of the [Web Animations API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Animations_API). All minimum browser versions listed above support the Web Animations API. - -

Dark Mode

- - -In previous versions, it was recommended to define the dark palette in the following way: - -```css -@media (prefers-color-scheme: dark) { - body { - /* global app variables */ - } - - .ios body { - /* global ios app variables */ - } - - .md body { - /* global md app variables */ - } -} -``` - -In Ionic Framework version 8, the dark palette is being distributed via css files that can be imported. Below is an example of importing a dark palette file in Angular: - -```css -/* @import '@ionic/angular/css/palettes/dark.always.css'; */ -/* @import "@ionic/angular/css/palettes/dark.class.css"; */ -@import "@ionic/angular/css/palettes/dark.system.css"; -``` - -By importing the `dark.system.css` file, the dark palette variables will be defined like the following: - -```css -@media (prefers-color-scheme: dark) { - :root { - /* global app variables */ - } - - :root.ios { - /* global ios app variables */ - } - - :root.md { - /* global md app variables */ - } -} -``` - -Notice that the dark palette is now applied to the `:root` selector instead of the `body` selector. The [`:root`](https://developer.mozilla.org/en-US/docs/Web/CSS/:root) selector represents the `` element and is identical to the selector `html`, except that its specificity is higher. - -While migrating to include the new dark palette files is unlikely to cause breaking changes, these new selectors can lead to unexpected overrides if custom CSS variables are being set on the `body` element. We recommend updating any instances where global application variables are set to target the `:root` selector instead. - -For more information on the new dark palette files, refer to the [Dark Mode documentation](https://ionicframework.com/docs/theming/dark-mode). - -

Global Styles

- -

Text Color

- -The `core.css` file has been updated to set the text color on the `body` element: - -```diff -body { -+ color: var(--ion-text-color); -} -``` - -This allows components to inherit the color properly when used outside of Ionic Framework and is required for custom themes to work properly. However, it may have unintentional side effects in apps if the color was not expected to inherit. - -

Dynamic Font

- -The `core.css` file has been updated to enable dynamic font scaling by default. - -The `--ion-default-dynamic-font` variable has been removed and replaced with `--ion-dynamic-font`. - -Developers who had previously chosen dynamic font scaling by activating it in their global stylesheets can revert to the default setting by removing their custom CSS. In doing so, their application will seamlessly continue utilizing dynamic font scaling as it did before. It's essential to note that altering the font-size of the html element should be avoided, as it may disrupt the proper functioning of dynamic font scaling. - -Developers who want to disable dynamic font scaling can set `--ion-dynamic-font: initial;` in their global stylesheets. However, this is not recommended because it may introduce accessibility challenges for users who depend on enlarged font sizes. - -For more information on the dynamic font, refer to the [Dynamic Font Scaling documentation](https://ionicframework.com/docs/layout/dynamic-font-scaling). - -

Haptics

- -- Support for the Cordova Haptics plugin has been removed. Components that integrate with haptics, such as `ion-picker` and `ion-toggle`, will continue to function but will no longer play haptics in Cordova environments. Developers should migrate to Capacitor to continue to have haptics in these components. - -

Components

- -

Button

- -- Button text now wraps by default. If this behavior is not desired, add the `ion-text-nowrap` class from the [CSS Utilities](https://ionicframework.com/docs/layout/css-utilities). - -

Checkbox

- - The `legacy` property and support for the legacy syntax, which involved placing an `ion-checkbox` inside of an `ion-item` with an `ion-label`, have been removed. For more information on migrating from the legacy checkbox syntax, refer to the [Checkbox documentation](https://ionicframework.com/docs/api/checkbox#migrating-from-legacy-checkbox-syntax). - -

Content

- -- Content no longer sets the `--background` custom property when the `.outer-content` class is set on the host. - -

Datetime

- -- The CSS shadow part for `month-year-button` has been changed to target a `button` element instead of `ion-item`. Developers should verify their UI renders as expected for the month/year toggle button inside of `ion-datetime`. - - Developers using the CSS variables available on `ion-item` will need to migrate their CSS to use CSS properties. For example: - ```diff - ion-datetime::part(month-year-button) { - - --background: red; - - + background: red; - } - ``` - -

Input

- -- `size` has been removed from the `ion-input` component. Developers should use CSS to specify the visible width of the input. -- `accept` has been removed from the `ion-input` component. This was previously used in conjunction with the `type="file"`. However, the `file` value for `type` is not a valid value in Ionic Framework. -- The `legacy` property and support for the legacy syntax, which involved placing an `ion-input` inside of an `ion-item` with an `ion-label`, have been removed. For more information on migrating from the legacy input syntax, refer to the [Input documentation](https://ionicframework.com/docs/api/input#migrating-from-legacy-input-syntax). - -

Item

- -- The `helper` slot has been removed. Developers should use the `helperText` property on `ion-input` and `ion-textarea`. -- The `error` slot has been removed. Developers should use the `errorText` property on `ion-input` and `ion-textarea`. -- Counter functionality has been removed including the `counter` and `counterFormatter` properties. Developers should use the properties of the same name on `ion-input` and `ion-textarea`. -- The `fill` property has been removed. Developers should use the property of the same name on `ion-input`, `ion-select`, and `ion-textarea`. -- The `shape` property has been removed. Developers should use the property of the same name on `ion-input`, `ion-select`, and `ion-textarea`. -- Item no longer automatically delegates focus to the first focusable element. While most developers should not need to make any changes to account for this update, usages of `ion-item` with interactive elements such as form controls (inputs, textareas, etc) should be evaluated to verify that interactions still work as expected. - -
CSS variables
- -The following deprecated CSS variables have been removed: `--highlight-height`, `--highlight-color-focused`, `--highlight-color-valid`, and `--highlight-color-invalid`. These variables were used on the bottom border highlight of an item when the form control inside of that item was focused. The form control syntax was [simplified in v7](https://ionic.io/blog/ionic-7-is-here#simplified-form-control-syntax) so that inputs, selects, and textareas would no longer be required to be used inside of an item. - -If you have not yet migrated to the modern form control syntax, migration guides for each of the form controls that added a highlight to item can be found below: -- [Input migration documentation](https://ionicframework.com/docs/api/input#migrating-from-legacy-input-syntax) -- [Select migration documentation](https://ionicframework.com/docs/api/select#migrating-from-legacy-select-syntax) -- [Textarea migration documentation](https://ionicframework.com/docs/api/textarea#migrating-from-legacy-textarea-syntax) - -Once all form controls are using the modern syntax, the same variables can be used to customize them from the form control itself: - -| Name | Description | -| ----------------------------| ----------------------------------------| -| `--highlight-color-focused` | The color of the highlight when focused | -| `--highlight-color-invalid` | The color of the highlight when invalid | -| `--highlight-color-valid` | The color of the highlight when valid | -| `--highlight-height` | The height of the highlight indicator | - -The following styles for item: - -```css -ion-item { - --highlight-color-focused: purple; - --highlight-color-valid: blue; - --highlight-color-invalid: orange; - --highlight-height: 6px; -} -``` - -will instead be applied on the form controls: - -```css -ion-input, -ion-textarea, -ion-select { - --highlight-color-focused: purple; - --highlight-color-valid: blue; - --highlight-color-invalid: orange; - --highlight-height: 6px; -} -``` - -> [!NOTE] -> The input and textarea components are scoped, which means they will automatically scope their CSS by appending each of the styles with an additional class at runtime. Overriding scoped selectors in CSS requires a [higher specificity](https://developer.mozilla.org/en-US/docs/Web/CSS/Specificity) selector. Targeting the `ion-input` or `ion-textarea` for customization will not work; therefore we recommend adding a class and customizing it that way. - -

Modal

- -- Detection for Capacitor <= 2 with applying status bar styles has been removed. Developers should ensure they are using Capacitor 3 or later when using the card modal presentation. - -

Nav

- -- `getLength` returns `Promise` instead of ``. This method was not previously available in Nav's TypeScript interface, but developers could still access it by casting Nav as `any`. Developers should ensure they `await` their `getLength` call before accessing the returned value. - -

Picker

- -- `ion-picker` and `ion-picker-column` have been renamed to `ion-picker-legacy` and `ion-picker-legacy-column`, respectively. This change was made to accommodate the new inline picker component while allowing developers to continue to use the legacy picker during this migration period. - - Only the component names have been changed. Usages such as `ion-picker` or `IonPicker` should be changed to `ion-picker-legacy` and `IonPickerLegacy`, respectively. - - Non-component usages such as `pickerController` or `useIonPicker` remain unchanged. The new picker displays inline with your page content and does not have equivalents for these non-component usages. - -

Progress bar

- -- The `--buffer-background` CSS variable has been removed. Use `--background` instead. - -

Toast

- -- `cssClass` has been removed from the `ToastButton` interface. This was previously used to apply a custom class to the toast buttons. Developers can use the "button" shadow part to style the buttons. - -For more information on styling toast buttons, refer to the [Toast Theming documentation](https://ionicframework.com/docs/api/toast#theming). - -

Radio

- -- The `legacy` property and support for the legacy syntax, which involved placing an `ion-radio` inside of an `ion-item` with an `ion-label`, have been removed. For more information on migrating from the legacy radio syntax, refer to the [Radio documentation](https://ionicframework.com/docs/api/radio#migrating-from-legacy-radio-syntax). - -

Range

- -- The `legacy` property and support for the legacy syntax, which involved placing an `ion-range` inside of an `ion-item` with an `ion-label`, have been removed. Ionic will also no longer attempt to automatically associate form controls with sibling `