Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
ShaneK
left a comment
There was a problem hiding this comment.
Looks good to me! Extremely minor grammatical nits, feel free to ignore if you don't wanna run CI just for them 🤷♂️
Co-authored-by: Brandy Smith <6577830+brandyscarney@users.noreply.github.com>
ShaneK
left a comment
There was a problem hiding this comment.
Looking good, just a couple of minor things
| @Watch('buttons') | ||
| buttonsChanged() { | ||
| // Initialize activeRadioId when buttons change | ||
| if (this.hasRadioButtons) { |
There was a problem hiding this comment.
My only concern here is this.hasRadioButtons is only set in connectedCallback, I believe this means if buttons are set dynamically this value may become stale and this process may not trigger when it's supposed to. That's sort of an edge case for many, but it may be worth re-computing this.hasRadioButtons here, if you feel like this could be a concern. Up to you!
Co-authored-by: Shane <shane@shanessite.net>
brandyscarney
left a comment
There was a problem hiding this comment.
Overall this looks good, just one concern on the role!
Co-authored-by: Brandy Smith <brandyscarney@users.noreply.github.com>
brandyscarney
left a comment
There was a problem hiding this comment.
Small request to use the isSelected variable but otherwise this looks good!
Co-authored-by: Brandy Smith <brandyscarney@users.noreply.github.com>
…uttons (ionic-team#31109) Issue number: resolves ionic-team#31090 --------- ## What is the current behavior? Buttons configured with `role: "selected"` no longer receive the `action-sheet-selected` CSS class. Userland styling that targets `.action-sheet-selected` (the documented hook for marking the active option — bold text, custom checkmarks, etc.) silently stopped working as of `8.7.12`. This regressed in ionic-team#30769 (`fix(select, action-sheet): use radio role for options`). The new render path computes the button's class as: ```tsx class={{ ...buttonClass(b), 'action-sheet-selected': isActiveRadio, }} ``` `buttonClass(b)` already emits `'action-sheet-selected': true` for `role: "selected"` (via `[action-sheet-${button.role}]]: button.role !== undefined`), but the second key with the same name overrides it. For any non-radio button `isActiveRadio` is `false`, so the class is dropped from the rendered `<button>`. ### Repro ```html <ion-action-sheet id="sheet" header="Choose"></ion-action-sheet> <script type="module"> await customElements.whenDefined("ion-action-sheet"); const sheet = document.getElementById("sheet"); sheet.buttons = [ { text: "Option A" }, { text: "Option B", role: "selected" }, { text: "Cancel", role: "cancel" }, ]; await sheet.present(); </script> ``` In `8.7.11` the Option B button gets `action-sheet-selected`. In `8.7.12+` it does not. ## What is the new behavior? - Only override `action-sheet-selected` based on `isActiveRadio` when the button actually participates in the radio group (`b.htmlAttributes?.role === 'radio'`). For non-radio buttons, the class map produced by `buttonClass(b)` is left untouched, so `role: "selected"` keeps emitting `action-sheet-selected` exactly as it has since the component was introduced. - Adds a spec-test regression covering the `role: "selected"` case. This preserves the new radio-group behavior introduced in ionic-team#30769 (when the button is a radio, `action-sheet-selected` follows `activeRadioId`) and restores the documented public API. ## Does this introduce a breaking change? - [ ] Yes - [x] No ## Other information - The minified output for the lazy + custom-elements bundles becomes `Object.assign(Object.assign({}, buttonClass(b)), isRadio && {"action-sheet-selected": isActiveRadio})`. When `isRadio` is `false`, `Object.assign(target, false)` is a no-op and the class set by `buttonClass(b)` is preserved. - Verified in a real consumer app on 8.8.4: with this patch built and installed locally, `role: "selected"` once again renders `class="... action-sheet-selected ..."` on the `<button>`. Made with [Cursor](https://cursor.com)
Issue number: internal
What is the current behavior?
The screen reader does not announce when an option is selected within the action sheet interface. This is because the action sheet uses standard buttons, which do not support a detectable selected state via native properties or ARIA attributes like
aria-checkedoraria-selected, creating an inconsistent user experience across different interface types.What is the new behavior?
role="radio"Does this introduce a breaking change?
Other information
Basic