Skip to content

fix(ionic): update to ionic 9 and fix routing - #179

Merged
brandyscarney merged 3 commits into
mainfrom
chore/v9-updates
Aug 19, 2026
Merged

fix(ionic): update to ionic 9 and fix routing#179
brandyscarney merged 3 commits into
mainfrom
chore/v9-updates

Conversation

@brandyscarney

@brandyscarney brandyscarney commented Aug 19, 2026

Copy link
Copy Markdown
Member

Updates to latest ionic (v9) and stencil and related dependencies/code.

@vercel

vercel Bot commented Aug 19, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
docs-demo Ready Ready Preview Aug 19, 2026 7:18pm

Request Review

@brandyscarney
brandyscarney marked this pull request as ready for review August 19, 2026 19:23
@brandyscarney
brandyscarney requested a review from a team as a code owner August 19, 2026 19:23
@brandyscarney
brandyscarney requested review from BenOsodrac and removed request for a team August 19, 2026 19:23
@brandyscarney
brandyscarney enabled auto-merge (squash) August 19, 2026 19:23
@brandyscarney
brandyscarney merged commit c4217ff into main Aug 19, 2026
4 checks passed
@brandyscarney
brandyscarney deleted the chore/v9-updates branch August 19, 2026 19:23
pull Bot pushed a commit to Zezo-Ai/ionic-framework that referenced this pull request Aug 19, 2026
…#31375)

Issue number: internal

---------

## What is the current behavior?

Currently, core builds with `target: es2022` and no
`useDefineForClassFields` setting, so TypeScript defaults it to `true`
and emits every `@Prop` default as a class field instead of a
constructor assignment. Stencil proxies props onto the component
prototype as getter/setter pairs, and its setter returns early when the
host ref isn't registered yet. An app that downlevels those class fields
hoists the initializers above `registerInstance()`, so the setter drops
every default.

That happens in any Stencil app importing `@ionic/core` with a target
below es2022, since the app re-transpiles core.

## What is the new behavior?

Setting `useDefineForClassFields: false` restores the emit v8 shipped:
`registerInstance()` runs first, then the defaults assign through
Stencil's setter. There's nothing left for a downstream bundler to
hoist, so the defaults survive whatever target the app uses. Every
output target picks it up.

## Does this introduce a breaking change?

- [ ] Yes
- [X] No

## Other information

Regression from ionic-team#31280, which moved core to `target: es2022` and flipped
the TypeScript default.

Brandy hit it on [the docs-demo v9
update](ionic-team/docs-demo#179), where the
Input OTP page renders an empty group. I packed this build into that
branch with no docs-demo changes and the boxes come back.

I put the flag in `core/tsconfig.json` rather than the shared
`tsconfig.base.json`, so the six packages extending the base emit the
same bytes as before.

I didn't add a test. It only breaks in a downstream build, so covering
it means asserting on the shape of core's emitted output, which we don't
do anywhere. Happy to add something if you'd rather have one.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants