Plumb isSelectable into ApplyItemContentInfo#623
Merged
Conversation
Add an `isSelectable` property to `ApplyItemContentInfo`, populated from the item's `selectionStyle.isSelectable`. This lets content views know when an item is interactive (`.tappable`, `.selectable`, `.toggles`) so they can represent themselves accordingly, e.g. by applying the `.button` accessibility trait for VoiceOver. TBHFUZZ-165 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
4b2dc6e to
c2f8aef
Compare
Drops the `= false` default on the new public `isSelectable` property so it matches the sibling `isReorderable` (no default) and makes any future internal construction site that omits it a compile-time error rather than a silent wrong default. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
robmaceachern
approved these changes
Jun 9, 2026
This was referenced Jun 16, 2026
RoyalPineapple
added a commit
that referenced
this pull request
Jun 22, 2026
Regenerates the Listable and BlueprintUILists docs to document the `isSelectable` property added to `ApplyItemContentInfo` in #623, which was missed when that change merged. The only meaningful change is the new `isSelectable` entry on `ApplyItemContentInfo.html` (plus the search index / docset mirrors). Docs were generated with Jazzy 0.15.3 under Ruby 3.3.9 — matching the 17.2.0 docs build — because `Scripts/generate_docs.sh` hangs in sourcekitten under the repo-pinned Ruby 3.2.2 on this macOS runtime. ### Checklist Please do the following before merging: - [x] Ensure any public-facing changes are reflected in the [changelog](https://github.com/square/Listable/blob/main/CHANGELOG.md). Include them in the `Main` section. _(The `isSelectable` changelog entry landed with #623; this PR is docs-only.)_ Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
RoyalPineapple
added a commit
that referenced
this pull request
Jun 22, 2026
Cuts the 17.3.0 release for the `isSelectable` change in #623. Bumps `LISTABLE_VERSION` to `17.3.0` and moves the `isSelectable` entry from the `Main` section of the changelog into a dated `17.3.0` section. ### Release notes #### Added - Added `isSelectable` to `ApplyItemContentInfo`, reflecting whether the item's `selectionStyle` is interactive (`.tappable`, `.selectable`, or `.toggles`). `ItemContent` implementations can read this to represent themselves as interactive, for example by applying the `.button` accessibility trait so VoiceOver users know the item responds to taps. ### Notes - Docs were **not** regenerated in this PR: `Scripts/generate_docs.sh` hangs during sourcekitten parsing under the local Ruby 3.2.2 toolchain (the same environment issue noted in the 17.2.0 bump, #622). Docs can be regenerated in a follow-up under Ruby 3.3.x. ### Checklist Please do the following before merging: - [x] Ensure any public-facing changes are reflected in the [changelog](https://github.com/square/Listable/blob/main/CHANGELOG.md). Include them in the `Main` section.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
A
ListableUIitem's selection behavior lives in its wrapper —Item.selectionStyledrives the tap handling, highlight, and selection state at the list level. The containedItemContentview that actually renders on screen has no way to know that its surrounding cell is interactive.That's a problem for accessibility: when a row is tappable, the content view often needs to represent that itself (for example by applying the
.buttonaccessibility trait so VoiceOver announces the row as actionable). Without this signal, the content view is blind to the interaction happening in its wrapper and can't reflect it.What
Adds an
isSelectableflag toApplyItemContentInfo, so a content view is told — atapply(to:for:with:)time — whether the item it lives in is interactive.It's populated in
PresentationState.ItemState.applyTofromselectionStyle.isSelectable:truefor.tappable,.selectable, and.togglesfalsefor.notSelectableLive selection/highlight state is already available via
info.state; this fills the remaining gap of "is this row interactive at all." No trait is forced at the ListableUI/Blueprint level — what to do with the signal stays each content view's call.TBHFUZZ-165
Checklist
Please do the following before merging:
Mainsection.This issue was discovered via agentic fuzz testing using The Button Heist.
🤖 Generated with Claude Code