Skip to content

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

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

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

Re-run triggered August 29, 2025 15:32
Status Success
Total duration 11m 38s
Artifacts 29

build.yml

on: pull_request
build-react
48s
build-react
build-vue
44s
build-vue
Matrix: test-core-screenshot
build-angular
1m 5s
build-angular
build-angular-server
32s
build-angular-server
test-core-clean-build
12s
test-core-clean-build
test-core-lint
54s
test-core-lint
test-core-spec
51s
test-core-spec
build-react-router
30s
build-react-router
build-vue-router
39s
build-vue-router
verify-screenshots
2s
verify-screenshots
Matrix: test-angular-e2e
Matrix: test-react-e2e
Matrix: test-react-router-e2e
Matrix: test-vue-e2e
verify-test-angular-e2e
2s
verify-test-angular-e2e
verify-test-react-e2e
2s
verify-test-react-e2e
verify-test-react-router-e2e
2s
verify-test-react-router-e2e
verify-test-vue-e2e
2s
verify-test-vue-e2e
Fit to window
Zoom out
Zoom in

Annotations

5 errors and 15 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
3) [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:130:11 › radio: a11y - md/ltr › radio: keyboard navigation - md/ltr › using arrow keys should move between enabled radios within group: src/components/radio/test/a11y/radio.e2e.ts#L134
2) [Mobile Chrome] › src/components/radio/test/a11y/radio.e2e.ts:130:11 › radio: a11y - md/ltr › radio: keyboard navigation - md/ltr › using arrow keys should move between enabled radios within group 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" 132 | 133 | await pageUtils.pressKeys('Tab'); > 134 | await expect(firstGroupRadios.nth(0)).toBeFocused(); | ^ 135 | 136 | await page.keyboard.press('ArrowDown'); 137 | await expect(firstGroupRadios.nth(1)).toBeFocused(); at /ionic/src/components/radio/test/a11y/radio.e2e.ts:134: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
1) [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/item/test/inputs/item.e2e.ts:32:9 › disabled state rendering - ios/ltr › disabled controls should not have visual regressions: src/components/item/test/inputs/item.e2e.ts#L44
1) [Mobile Safari] › src/components/item/test/inputs/item.e2e.ts:32:9 › disabled state rendering - ios/ltr › disabled controls should not have visual regressions Error: expect(page).toHaveScreenshot(expected) 1141 pixels (ratio 0.01 of all image pixels) are different. Snapshot: item-inputs-disabled-ios-ltr.png Call log: - Expect "toHaveScreenshot(item-inputs-disabled-ios-ltr.png)" with timeout 5000ms - verifying given screenshot expectation - taking page screenshot - disabled all CSS animations - waiting for fonts to load... - fonts loaded - 1141 pixels (ratio 0.01 of all image pixels) are different. - waiting 100ms before taking screenshot - taking page screenshot - disabled all CSS animations - waiting for fonts to load... - fonts loaded - captured a stable screenshot - 1141 pixels (ratio 0.01 of all image pixels) are different. 42 | 43 | await page.setIonViewport(); > 44 | await expect(page).toHaveScreenshot(screenshot(`item-inputs-disabled`)); | ^ 45 | }); 46 | }); 47 | }); at /ionic/src/components/item/test/inputs/item.e2e.ts:44:26
🎭 Playwright Run Summary
368 skipped 303 passed (3.5m)
🎭 Playwright Run Summary
3 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:130:11 › radio: a11y - md/ltr › radio: keyboard navigation - md/ltr › using arrow keys should move between enabled radios within group [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 673 passed (5.2m)
🎭 Playwright Run Summary
36 skipped 818 passed (5.9m)
🎭 Playwright Run Summary
10 skipped 647 passed (6.3m)
🎭 Playwright Run Summary
14 skipped 489 passed (5.9m)
🎭 Playwright Run Summary
5 skipped 674 passed (6.6m)
🎭 Playwright Run Summary
12 skipped 680 passed (7.8m)
🎭 Playwright Run Summary
1 skipped 666 passed (8.3m)
🎭 Playwright Run Summary
1 flaky [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 663 passed (8.5m)
🎭 Playwright Run Summary
1 skipped 651 passed (8.9m)
🎭 Playwright Run Summary
1 flaky [Mobile Safari] › src/components/item/test/inputs/item.e2e.ts:32:9 › disabled state rendering - ios/ltr › disabled controls should not have visual regressions 3 skipped 668 passed (8.9m)
🎭 Playwright Run Summary
5 skipped 709 passed (9.6m)
🎭 Playwright Run Summary
4 skipped 729 passed (9.7m)
🎭 Playwright Run Summary
7 skipped 622 passed (10.2m)
🎭 Playwright Run Summary
14 skipped 681 passed (10.6m)

Artifacts

Produced during runtime
Name Size Digest
test-results-1-20 Expired
505 KB
sha256:9cdd5b2b00602633669bc81f9f58ceec2ef484c72f315e4e454b111f700307db
test-results-11-20 Expired
2.06 MB
sha256:26108f61785199ba88a4c51c897163e7c540b3208e9383a7925bc5ff851bba4f
test-results-13-20 Expired
511 KB
sha256:7b33e1b5ddd9fdaefa0758904c9c1e0c8b6eb272698147b8f07ef3faa4f6a3ef
test-results-14-20 Expired
435 KB
sha256:902fdb6d4c982dbd9b911607d4c70c88819e0d9468ab5fdcdf3bf3aca79b28dc
test-results-15-20 Expired
1.35 MB
sha256:76d438b2fcb9e6bd32f2a2e4c6b3c930189825652576577d0d47ee3c1d92c720
test-results-16-20 Expired
483 KB
sha256:aed9382d3d776a8399f0fe071caef4c959cb7f0a9ed5ed4ce1d0ea5b4a6d65f4
test-results-17-20 Expired
1.56 MB
sha256:6483ab4aaf212a182ff39b00d5b258a90c99cc6e0e06dc3816d9d32fe2b3cffa
test-results-18-20 Expired
567 KB
sha256:84be59a6e72bb9912f91b6eeb87b5c45c837f50a6940013ce3f2d20ff2a8d462
test-results-19-20 Expired
456 KB
sha256:057260ee24f43896ceb7bb0bde134d1134bb6c38c8a8a2a40491dca1d4ad5075
test-results-2-20 Expired
517 KB
sha256:ec4622524b8fafbea07aa063e052a76762268b7b85340155250f72c13770a408
test-results-20-20 Expired
347 KB
sha256:0ae5c3d9a9197c921dda95c5519232576aa3a4cd5685e1cd2ed04de032fe7e2d
test-results-3-20 Expired
451 KB
sha256:0799236a5c63f4a345d26368a351a26e0a64bbe018e0d1464ed32752b5209dcd
test-results-4-20 Expired
599 KB
sha256:074e62a60c025cb239fdcc8f6a3f29cca3c007b3b8a42eab1bffeaaea61a0f71
test-results-5-20 Expired
501 KB
sha256:93d28d8a5bf0b084b09247b528800f5ab66eaaad17691aaaf2527407966a1315
test-results-6-20 Expired
488 KB
sha256:c2f4252243b57d47fb14efea3389f8cb39441a7da4d781d5b8f6c3d75618225a