Skip to content

feat(themes): add support for modular themes and custom themes #16919

feat(themes): add support for modular themes and custom themes

feat(themes): add support for modular themes and custom themes #16919

Triggered via pull request August 22, 2025 21:55
Status Success
Total duration 13m 5s
Artifacts 27

build.yml

on: pull_request
build-react
49s
build-react
build-vue
35s
build-vue
Matrix: test-core-screenshot
build-angular
1m 0s
build-angular
build-angular-server
36s
build-angular-server
test-core-clean-build
14s
test-core-clean-build
test-core-lint
58s
test-core-lint
test-core-spec
45s
test-core-spec
build-react-router
31s
build-react-router
build-vue-router
43s
build-vue-router
verify-screenshots
4s
verify-screenshots
Matrix: test-angular-e2e
Matrix: test-react-e2e
Matrix: test-react-router-e2e
Matrix: test-vue-e2e
verify-test-angular-e2e
4s
verify-test-angular-e2e
verify-test-react-e2e
4s
verify-test-react-e2e
verify-test-react-router-e2e
4s
verify-test-react-router-e2e
verify-test-vue-e2e
4s
verify-test-vue-e2e
Fit to window
Zoom out
Zoom in

Annotations

8 errors and 20 notices
[Mobile Chrome] › src/components/radio/test/a11y/radio.e2e.ts:117:11 › radio: a11y - md/ltr/dark › radio: keyboard navigation - md/ltr/dark › tabbing should switch between radio groups: src/components/radio/test/a11y/radio.e2e.ts#L122
2) [Mobile Chrome] › src/components/radio/test/a11y/radio.e2e.ts:117:11 › radio: a11y - md/ltr/dark › radio: keyboard navigation - md/ltr/dark › tabbing should switch between radio groups Error: Timed out 5000ms waiting for expect(locator).toBeFocused() Locator: locator('#first-group ion-radio').first() Expected: focused Received: inactive Call log: - Expect "toBeFocused" with timeout 5000ms - waiting for locator('#first-group ion-radio').first() 9 × locator resolved to <ion-radio value="huey" role="radio" tabindex="0" aria-checked="true" class="md in-item radio-checked radio-label-placement-start hydrated">Huey</ion-radio> - unexpected value "inactive" 120 | 121 | await pageUtils.pressKeys('Tab'); > 122 | await expect(firstGroupRadios.nth(0)).toBeFocused(); | ^ 123 | 124 | await pageUtils.pressKeys('Tab'); 125 | await expect(secondGroupRadios.nth(0)).toBeFocused(); at /ionic/src/components/radio/test/a11y/radio.e2e.ts:122:47
[Mobile Chrome] › src/components/radio/test/a11y/radio.e2e.ts:117:11 › radio: a11y - md/ltr › radio: keyboard navigation - md/ltr › tabbing should switch between radio groups: src/components/radio/test/a11y/radio.e2e.ts#L122
1) [Mobile Chrome] › src/components/radio/test/a11y/radio.e2e.ts:117:11 › radio: a11y - md/ltr › radio: keyboard navigation - md/ltr › tabbing should switch between radio groups Error: Timed out 5000ms waiting for expect(locator).toBeFocused() Locator: locator('#first-group ion-radio').first() Expected: focused Received: inactive Call log: - Expect "toBeFocused" with timeout 5000ms - waiting for locator('#first-group ion-radio').first() 9 × locator resolved to <ion-radio value="huey" role="radio" tabindex="0" aria-checked="true" class="md in-item radio-checked radio-label-placement-start hydrated">Huey</ion-radio> - unexpected value "inactive" 120 | 121 | await pageUtils.pressKeys('Tab'); > 122 | await expect(firstGroupRadios.nth(0)).toBeFocused(); | ^ 123 | 124 | await pageUtils.pressKeys('Tab'); 125 | await expect(secondGroupRadios.nth(0)).toBeFocused(); at /ionic/src/components/radio/test/a11y/radio.e2e.ts:122:47
[Mobile Safari] › src/components/datetime/test/show-adjacent-days/datetime.e2e.ts:16:9 › datetime: show adjacent days - md/ltr › should not have visual regressions with a custom styled calendar: src/components/datetime/test/show-adjacent-days/datetime.e2e.ts#L20
4) [Mobile Safari] › src/components/datetime/test/show-adjacent-days/datetime.e2e.ts:16:9 › datetime: show adjacent days - md/ltr › should not have visual regressions with a custom styled calendar Retry #1 ─────────────────────────────────────────────────────────────────────────────────────── Error: expect(locator).toHaveScreenshot(expected) 5772 pixels (ratio 0.05 of all image pixels) are different. Snapshot: datetime-show-adjacent-days-custom-calendar-md-ltr.png Call log: - Expect "toHaveScreenshot(datetime-show-adjacent-days-custom-calendar-md-ltr.png)" with timeout 5000ms - verifying given screenshot expectation - waiting for locator('#custom-calendar-days') - locator resolved to <ion-datetime value="2023-06-15" presentation="date" show-adjacent-days="true" id="custom-calendar-days" class="ion-color ion-color-primary md datetime-presentation-date datetime-size-fixed datetime-grid hydrated">…</ion-datetime> - taking element screenshot - disabled all CSS animations - waiting for fonts to load... - fonts loaded - attempting scroll into view action - waiting for element to be stable - 5772 pixels (ratio 0.05 of all image pixels) are different. - waiting 100ms before taking screenshot - waiting for locator('#custom-calendar-days') - locator resolved to <ion-datetime value="2023-06-15" presentation="date" show-adjacent-days="true" id="custom-calendar-days" class="ion-color ion-color-primary md datetime-presentation-date datetime-size-fixed datetime-grid hydrated">…</ion-datetime> - taking element screenshot - disabled all CSS animations - waiting for fonts to load... - fonts loaded - attempting scroll into view action - waiting for element to be stable - captured a stable screenshot - 5772 pixels (ratio 0.05 of all image pixels) are different. 18 | await page.locator('.datetime-ready').first().waitFor(); 19 | const datetime = page.locator('#custom-calendar-days'); > 20 | await expect(datetime).toHaveScreenshot(screenshot(`datetime-show-adjacent-days-custom-calendar`)); | ^ 21 | }); 22 | 23 | test('should not have visual regressions with specific date disabled', async ({ page }) => { at /ionic/src/components/datetime/test/show-adjacent-days/datetime.e2e.ts:20:30
[Mobile Safari] › src/components/datetime/test/show-adjacent-days/datetime.e2e.ts:16:9 › datetime: show adjacent days - md/ltr › should not have visual regressions with a custom styled calendar: src/components/datetime/test/show-adjacent-days/datetime.e2e.ts#L20
4) [Mobile Safari] › src/components/datetime/test/show-adjacent-days/datetime.e2e.ts:16:9 › datetime: show adjacent days - md/ltr › should not have visual regressions with a custom styled calendar Error: expect(locator).toHaveScreenshot(expected) 5772 pixels (ratio 0.05 of all image pixels) are different. Snapshot: datetime-show-adjacent-days-custom-calendar-md-ltr.png Call log: - Expect "toHaveScreenshot(datetime-show-adjacent-days-custom-calendar-md-ltr.png)" with timeout 5000ms - verifying given screenshot expectation - waiting for locator('#custom-calendar-days') - locator resolved to <ion-datetime value="2023-06-15" presentation="date" show-adjacent-days="true" id="custom-calendar-days" class="ion-color ion-color-primary md datetime-presentation-date datetime-size-fixed datetime-grid hydrated">…</ion-datetime> - taking element screenshot - disabled all CSS animations - waiting for fonts to load... - fonts loaded - attempting scroll into view action - waiting for element to be stable - 5772 pixels (ratio 0.05 of all image pixels) are different. - waiting 100ms before taking screenshot - waiting for locator('#custom-calendar-days') - locator resolved to <ion-datetime value="2023-06-15" presentation="date" show-adjacent-days="true" id="custom-calendar-days" class="ion-color ion-color-primary md datetime-presentation-date datetime-size-fixed datetime-grid hydrated">…</ion-datetime> - taking element screenshot - disabled all CSS animations - waiting for fonts to load... - fonts loaded - attempting scroll into view action - waiting for element to be stable - captured a stable screenshot - 5772 pixels (ratio 0.05 of all image pixels) are different. 18 | await page.locator('.datetime-ready').first().waitFor(); 19 | const datetime = page.locator('#custom-calendar-days'); > 20 | await expect(datetime).toHaveScreenshot(screenshot(`datetime-show-adjacent-days-custom-calendar`)); | ^ 21 | }); 22 | 23 | test('should not have visual regressions with specific date disabled', async ({ page }) => { at /ionic/src/components/datetime/test/show-adjacent-days/datetime.e2e.ts:20:30
[Mobile Safari] › src/components/datetime/test/prefer-wheel/datetime.e2e.ts:30:9 › datetime: wheel rendering - md/rtl › should not have visual regressions for date-time wheel: src/components/datetime/test/prefer-wheel/datetime.e2e.ts#L37
3) [Mobile Safari] › src/components/datetime/test/prefer-wheel/datetime.e2e.ts:30:9 › datetime: wheel rendering - md/rtl › should not have visual regressions for date-time wheel Error: locator.waitFor: Test timeout of 30000ms exceeded. Call log: - waiting for locator('.datetime-ready') to be visible 35 | config 36 | ); > 37 | await page.locator('.datetime-ready').waitFor(); | ^ 38 | 39 | await expect(page).toHaveScreenshot(screenshot(`datetime-wheel-date-time-diff`)); 40 | }); at /ionic/src/components/datetime/test/prefer-wheel/datetime.e2e.ts:37:45
[Mobile Safari] › src/components/datetime/test/prefer-wheel/datetime.e2e.ts:30:9 › datetime: wheel rendering - md/rtl › should not have visual regressions for date-time wheel: src/components/datetime/test/prefer-wheel/datetime.e2e.ts#L0
3) [Mobile Safari] › src/components/datetime/test/prefer-wheel/datetime.e2e.ts:30:9 › datetime: wheel rendering - md/rtl › should not have visual regressions for date-time wheel Test timeout of 30000ms exceeded.
[Mobile Safari] › src/components/datetime/test/custom/datetime.e2e.ts:32:9 › datetime: custom - md/ltr › should allow styling calendar days in grid style datetimes: src/components/datetime/test/custom/datetime.e2e.ts#L42
2) [Mobile Safari] › src/components/datetime/test/custom/datetime.e2e.ts:32:9 › datetime: custom - md/ltr › should allow styling calendar days in grid style datetimes Error: expect(locator).toHaveScreenshot(expected) 5526 pixels (ratio 0.05 of all image pixels) are different. Snapshot: datetime-custom-calendar-days-md-ltr.png Call log: - Expect "toHaveScreenshot(datetime-custom-calendar-days-md-ltr.png)" with timeout 5000ms - verifying given screenshot expectation - waiting for locator('#custom-calendar-days') - locator resolved to <ion-datetime value="2023-06-15" presentation="date" id="custom-calendar-days" class="ion-color ion-color-primary md datetime-presentation-date datetime-size-fixed datetime-grid hydrated">…</ion-datetime> - taking element screenshot - disabled all CSS animations - waiting for fonts to load... - fonts loaded - attempting scroll into view action - waiting for element to be stable - 5526 pixels (ratio 0.05 of all image pixels) are different. - waiting 100ms before taking screenshot - waiting for locator('#custom-calendar-days') - locator resolved to <ion-datetime value="2023-06-15" presentation="date" id="custom-calendar-days" class="ion-color ion-color-primary md datetime-presentation-date datetime-size-fixed datetime-grid hydrated">…</ion-datetime> - taking element screenshot - disabled all CSS animations - waiting for fonts to load... - fonts loaded - attempting scroll into view action - waiting for element to be stable - captured a stable screenshot - 5526 pixels (ratio 0.05 of all image pixels) are different. 40 | }); 41 | > 42 | await expect(datetime).toHaveScreenshot(screenshot(`datetime-custom-calendar-days`)); | ^ 43 | }); 44 | }); 45 | }); at /ionic/src/components/datetime/test/custom/datetime.e2e.ts:42:30
[Mobile Safari] › src/components/datetime/test/custom/datetime.e2e.ts:32:9 › datetime: custom - ios/ltr › should allow styling calendar days in grid style datetimes: src/components/datetime/test/custom/datetime.e2e.ts#L42
1) [Mobile Safari] › src/components/datetime/test/custom/datetime.e2e.ts:32:9 › datetime: custom - ios/ltr › should allow styling calendar days in grid style datetimes Error: expect(locator).toHaveScreenshot(expected) 4509 pixels (ratio 0.04 of all image pixels) are different. Snapshot: datetime-custom-calendar-days-ios-ltr.png Call log: - Expect "toHaveScreenshot(datetime-custom-calendar-days-ios-ltr.png)" with timeout 5000ms - verifying given screenshot expectation - waiting for locator('#custom-calendar-days') - locator resolved to <ion-datetime value="2023-06-15" presentation="date" id="custom-calendar-days" class="ion-color ion-color-primary ios datetime-presentation-date datetime-size-fixed datetime-grid hydrated">…</ion-datetime> - taking element screenshot - disabled all CSS animations - waiting for fonts to load... - fonts loaded - attempting scroll into view action - waiting for element to be stable - 4509 pixels (ratio 0.04 of all image pixels) are different. - waiting 100ms before taking screenshot - waiting for locator('#custom-calendar-days') - locator resolved to <ion-datetime value="2023-06-15" presentation="date" id="custom-calendar-days" class="ion-color ion-color-primary ios datetime-presentation-date datetime-size-fixed datetime-grid hydrated">…</ion-datetime> - taking element screenshot - disabled all CSS animations - waiting for fonts to load... - fonts loaded - attempting scroll into view action - waiting for element to be stable - captured a stable screenshot - 4509 pixels (ratio 0.04 of all image pixels) are different. 40 | }); 41 | > 42 | await expect(datetime).toHaveScreenshot(screenshot(`datetime-custom-calendar-days`)); | ^ 43 | }); 44 | }); 45 | }); at /ionic/src/components/datetime/test/custom/datetime.e2e.ts:42:30
🎭 Playwright Run Summary
360 skipped 276 passed (2.3m)
🎭 Playwright Run Summary
368 skipped 303 passed (3.3m)
🎭 Playwright Run Summary
671 passed (3.6m)
🎭 Playwright Run Summary
1 skipped 671 passed (3.7m)
🎭 Playwright Run Summary
688 passed (3.8m)
🎭 Playwright Run Summary
5 skipped 661 passed (4.2m)
🎭 Playwright Run Summary
2 flaky [Mobile Chrome] › src/components/radio/test/a11y/radio.e2e.ts:117:11 › radio: a11y - md/ltr › radio: keyboard navigation - md/ltr › tabbing should switch between radio groups [Mobile Chrome] › src/components/radio/test/a11y/radio.e2e.ts:117:11 › radio: a11y - md/ltr/dark › radio: keyboard navigation - md/ltr/dark › tabbing should switch between radio groups 4 skipped 674 passed (4.9m)
🎭 Playwright Run Summary
36 skipped 818 passed (5.5m)
🎭 Playwright Run Summary
14 skipped 489 passed (5.8m)
🎭 Playwright Run Summary
10 skipped 647 passed (6.4m)
🎭 Playwright Run Summary
5 skipped 674 passed (6.6m)
🎭 Playwright Run Summary
12 skipped 680 passed (8.0m)
🎭 Playwright Run Summary
1 skipped 666 passed (8.3m)
🎭 Playwright Run Summary
1 skipped 651 passed (8.8m)
🎭 Playwright Run Summary
3 skipped 669 passed (8.8m)
🎭 Playwright Run Summary
4 flaky [Mobile Safari] › src/components/datetime/test/custom/datetime.e2e.ts:32:9 › datetime: custom - ios/ltr › should allow styling calendar days in grid style datetimes [Mobile Safari] › src/components/datetime/test/custom/datetime.e2e.ts:32:9 › datetime: custom - md/ltr › should allow styling calendar days in grid style datetimes [Mobile Safari] › src/components/datetime/test/prefer-wheel/datetime.e2e.ts:30:9 › datetime: wheel rendering - md/rtl › should not have visual regressions for date-time wheel [Mobile Safari] › src/components/datetime/test/show-adjacent-days/datetime.e2e.ts:16:9 › datetime: show adjacent days - md/ltr › should not have visual regressions with a custom styled calendar 2 skipped 660 passed (9.1m)
🎭 Playwright Run Summary
5 skipped 709 passed (9.2m)
🎭 Playwright Run Summary
4 skipped 729 passed (9.8m)
🎭 Playwright Run Summary
7 skipped 622 passed (10.2m)
🎭 Playwright Run Summary
14 skipped 681 passed (10.3m)

Artifacts

Produced during runtime
Name Size Digest
ionic-angular Expired
864 KB
sha256:4b4a1f0c54ebeabfcc017ecd15e8f54bf412a62995a4929921201439a61b4059
ionic-angular-server Expired
8.55 KB
sha256:6754b338a83d44dc0773afae4b204b0d98ef84317182634fce02ce96aa45be49
ionic-core Expired
5.14 MB
sha256:a042f84c0afc5ee743cf73d99c0e05feb11ef12a6de9152e9497984920d5ed22
ionic-react Expired
403 KB
sha256:fc498e881369c2506ae675bfec7c9af02662c255be8aff0e17fc363ed7a50ec1
ionic-react-router Expired
27.9 KB
sha256:5418186bec7ddfe154e2867027db2bfd14e6c2102a4d032c9622deb43523db6b
ionic-vue Expired
433 KB
sha256:04c7afaee026dce6efc0f9e75ee06d6374571f631cacc3faf8dfeb957bfb5262
ionic-vue-router Expired
17.1 KB
sha256:e223f8d00a505015bf5b202c3b0fdc76a8e068ea9f1b9dfb947663e6192eb574
test-results-1-20 Expired
505 KB
sha256:a1f0eb547af9c5da0bec19cbb6e2e26b28802fe86513cfd586579ff848b8c6c8
test-results-10-20 Expired
456 KB
sha256:39010020708ae2bcb25aef8206d0c8627abf97b36488941509a3f73d84623d78
test-results-11-20 Expired
1.69 MB
sha256:5c1caaafcf8692fd6207dd01fac0b0f8de2ef3f902e2906af8434fe956c730d2
test-results-12-20 Expired
490 KB
sha256:19460b09905847e8a602c1e62735ad8ae29a873e693c9c717a7aaa15de4b8066
test-results-13-20 Expired
510 KB
sha256:7ef84096c488f9ff4f12695b2836a2ff416d4fbedb4e162f503d19c4b3c2a768
test-results-14-20 Expired
435 KB
sha256:683259d5da56ceca38a629b2624e5dc397ce7b02238952fdcc9041f41b9fe6a1
test-results-15-20 Expired
3.24 MB
sha256:1d1075df54751578db57e3fd336c20a3abe49206ef658d6c618cfbc03c23223b
test-results-16-20 Expired
483 KB
sha256:22c6f3635c6e24a90c350590da0dc55933e364f4cf81e577dd6de6b6e0d753c7
test-results-17-20 Expired
576 KB
sha256:a868b482960432ee7b45098a4aef277711649dd8ab89d0e1050a597be35fa360
test-results-18-20 Expired
568 KB
sha256:597726ed4d9eca5dcf3d8adffdf97c61c26a947e2cb5f6e821d0ff17043f9020
test-results-19-20 Expired
457 KB
sha256:06a37fe77c108a91a81726bf4c1b70e6fbad968d30796f99b926bfb4e6031f28
test-results-2-20 Expired
517 KB
sha256:a11d6e9433e91617db6471f2684913a18932e78508c63eb54ee40b8d2363d21a
test-results-20-20 Expired
347 KB
sha256:de72f87064bea2be57537c64966e3adb2c578705ec76860e8ec3b87a45914b8a
test-results-3-20 Expired
450 KB
sha256:9dff93e33138005e53942cd2125b142d937710837e6c5aded36b7e3cfa441b98
test-results-4-20 Expired
598 KB
sha256:a00c1f176836e8442f83dcae845e5b20b320ccefd70f4b542c7ecce4fdc5f336
test-results-5-20 Expired
500 KB
sha256:8663a39c13f146b255603f5f3af97fa154537ab043271c962220c8fa5cb53b64
test-results-6-20 Expired
488 KB
sha256:3f5192eb11fca6709278b9744d049cbd7c133f18a3869f592ad81b2c182d2a25
test-results-7-20 Expired
368 KB
sha256:e73a7a0dc497841fac63c800002e438a0e9d8b1f105029e9bc3a4c798a5b682a
test-results-8-20 Expired
458 KB
sha256:e43d84d45f9b3ed11492de34e75f3a1d689039ea86590d148b9c7be6aeba66e0
test-results-9-20 Expired
493 KB
sha256:757903cc98e34a6352df037e1094fba8f96c9d348071bc90e20873089f42e9d8