-
Notifications
You must be signed in to change notification settings - Fork 249
Custom cross-control selection engine so the whole chat transcript is drag-selectable #995
Copy link
Copy link
Open
Labels
P3Low-risk cleanup, docs, polish, ergonomics, or speculative feature.Low-risk cleanup, docs, polish, ergonomics, or speculative feature.clawsweeper:fix-shape-clearClawSweeper found a clear likely implementation shape for this issue.ClawSweeper found a clear likely implementation shape for this issue.clawsweeper:needs-maintainer-reviewClawSweeper marked this issue as needing maintainer review before automation.ClawSweeper marked this issue as needing maintainer review before automation.clawsweeper:needs-product-decisionClawSweeper marked this issue as needing a product or behavior decision.ClawSweeper marked this issue as needing a product or behavior decision.clawsweeper:no-new-fix-prClawSweeper does not recommend queueing a new automated fix PR for this issue.ClawSweeper does not recommend queueing a new automated fix PR for this issue.impact:ux-frictionUser-facing flow adds avoidable confusion or support burden without fully blocking progress.User-facing flow adds avoidable confusion or support burden without fully blocking progress.issue-rating: 🌊 off-meta tidepoolIssue quality rating does not apply to this item.Issue quality rating does not apply to this item.
Description
Metadata
Metadata
Assignees
Labels
P3Low-risk cleanup, docs, polish, ergonomics, or speculative feature.Low-risk cleanup, docs, polish, ergonomics, or speculative feature.clawsweeper:fix-shape-clearClawSweeper found a clear likely implementation shape for this issue.ClawSweeper found a clear likely implementation shape for this issue.clawsweeper:needs-maintainer-reviewClawSweeper marked this issue as needing maintainer review before automation.ClawSweeper marked this issue as needing maintainer review before automation.clawsweeper:needs-product-decisionClawSweeper marked this issue as needing a product or behavior decision.ClawSweeper marked this issue as needing a product or behavior decision.clawsweeper:no-new-fix-prClawSweeper does not recommend queueing a new automated fix PR for this issue.ClawSweeper does not recommend queueing a new automated fix PR for this issue.impact:ux-frictionUser-facing flow adds avoidable confusion or support burden without fully blocking progress.User-facing flow adds avoidable confusion or support burden without fully blocking progress.issue-rating: 🌊 off-meta tidepoolIssue quality rating does not apply to this item.Issue quality rating does not apply to this item.
Type
Fields
Priority
None yet
Projects
StatusShow more project fields
Backlog
Problem
Chat messages render markdown into a FunctionalUI Element tree. Prose (paragraphs + headings) and now simple lists coalesce into a single per-message
RichTextBlockso they are one continuous drag-selection scope (branchkarkarl-chat-bubble-richtextblock, commit 47b335d, follow-up to 2fa7279). However, selection is still fragmented at every styled island:This is a hard WinUI limitation, confirmed during the RichTextBlock work:
InlineUIContainerbreaks text selection at its boundary and is excluded fromSelectedText, so styled cards cannot be embedded in-flow without losing selection.TextHighlighterkeeps text in-flow and selectable but only hugs glyphs per line (no padding/border/rounded corners/scroll), so it cannot preserve code-card chrome.The per-message Copy button is the current whole-message grab affordance, and simple lists + prose now select as one block — this issue tracks going the rest of the way.
Goal
Whole-transcript (or at least whole-message, spanning styled islands) continuous selection, while keeping code blocks / tables / block quotes as separately styled, chrome-bearing surfaces.
Approach (to design)
Build a custom selection manager plus a custom UI Automation
ITextProvider/ITextRangeProviderover the chat surface so a single drag maps to a logical text range that crosses control boundaries:TextPatternprovider for accessibility +Ctrl+Csemantics that mirror the visible selection.Constraints
Hyperlink/BitmapImage;AppendInlinesstays inert).References
karkarl-chat-bubble-richtextblock, commits 2fa7279 (prose coalescing) and 47b335d (simple-list coalescing) — PR pending from this branch; cross-link once opened.src/OpenClaw.Tray.WinUI/Chat/Markdown/ChatMarkdownRenderer.cs(coalescing + island rendering).Out of scope
The RichTextBlock coalescing already landed. This issue is the larger custom-selection-engine follow-up.