Distinguish group selection in the slides overlay#303
Conversation
|
Warning Review limit reached
Your plan includes 1 review of capacity. Refill in 12 minutes and 27 seconds. Your organization has run out of usage credits. Purchase more in the billing tab. ⌛ How to resolve this issue?After more review capacity refills, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than trial, open-source, and free plans. In all cases, review capacity refills continuously over time. Please see our FAQ for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (12)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Verification: verify:selfResult: ✅ PASS in 223.6s
Verification: verify:integrationResult: ✅ PASS |
The slides selection overlay paints the same box and handles for a single object, a selected group, and a drilled-in child, so a grouped pair of shapes is indistinguishable from one shape. This spec describes an overlay-only change: faint dashed member outlines when a group is selected (PowerPoint-style) and a faint dashed context box around the enclosing group during drill-in (Google Slides-style), reusing the world-frame math the editor already computes. Interaction and selection state are unchanged. Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
Three-task TDD plan: a pure groupOverlayFrames helper, overlay rendering of member outlines plus the drill-in context box, and the repaintOverlay wiring. Overlay-only change, no interaction edits. Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
Pure helper computing world frames for a selected group's member outlines and the drilled-in group's context box, reusing the existing world/local frame math. No rendering yet. Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
Clarify that worldTightFrame returns parent-space coords, and cover member outlines lifted through two group levels (drill-in). Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
renderOverlay gains optional memberOutlines and contextBox frames, drawn as faint dashed handle-less rectangles beneath the selection handles via a shared appendOutline helper. Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
Match renderRotatedHandles' rotation guard for consistency, and cover a rotated context box plus the additive context-box+member-outline case (drilled-in sub-group). Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
repaintOverlay computes member outlines and the drill-in context box via groupOverlayFrames and forwards them to renderOverlay, so a selected group and a drilled-in child are now visually distinct from a single object. Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
Extract allSelectedIds so the intentionally-unfiltered argument to groupOverlayFrames is explicit, and add an afterEach to the new group-visuals describe block matching the file's pattern. Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
Fix the outline accent to rgba(51,170,119,0.5) so it actually equals #3a7 (#33aa77); clarify the raw-selection comment; add an editor-level drill-in test asserting the context box renders and member outlines do not. Update the spec's color reference to match. Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
Coordinate-space pitfalls, the #3a7 color arithmetic bug, the 80-char commit-body hook, and subagent-driven execution notes. Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
6d29584 to
3461578
Compare
PRs #257/#301/#303/#304/#305/#306/#307/#309/#315/#316/#317/#321/#322 shipped between v0.4.2 and the v0.4.3 cut, leaving their paired todo files in active with the process checkboxes still open. Flip the remaining boxes for the work that landed, then move the paired todo/lessons into docs/tasks/archive/2026/05/ via pnpm tasks:archive. Active count drops from 17 to 6; archive count grows by 21 files. Patch release covering 29 commits since v0.4.2. Headline theme is Slides editing & UX polish toward Google Slides / PowerPoint parity: smart guides (equal-spacing / distance / size), Shift drag modifiers, text inside shapes, a Format options right panel, tier-1 universal toolbar controls, text autofit (shrink + grow), group-selection visuals, and several smaller text-box / selection fixes. PPTX import gained paragraph-level bullet styles, body anchor (vertical alignment), and stretched blipFill cover-crop. Docs added a pending-inline-style at collapsed caret, a caret that tracks the resolved text color, bullet indent on Tab / Shift+Tab, font / size / line-spacing / clear formatting toolbar controls, an inline-style-attribute clear that actually lands in the CRDT, and a polished toolbar trigger / color swatch pass shared across docs / sheets / slides. Sheets gained .xlsx import. Infrastructure: Docker images now build on native arm64 runners, fixing the release hang seen on v0.4.2. No Prisma migration, no new backend env vars — the devops bump is a routine image-tag change. Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
Summary
The slides selection overlay painted the same box + handles for a single
object, a selected group, and a child selected after drilling into a
group, so a grouped pair of shapes was indistinguishable from one shape.
This makes the three states visually distinct (PowerPoint / Google Slides
hybrid), as an overlay-only change — no selection-state, hit-test, or
interaction edits (drill-in stays double-click;
Escpops out):on each direct member (PowerPoint-style member preview).
dashed context box around the enclosing group (Google Slides-style).
Implemented in three layers:
frame-space.ts— puregroupOverlayFrames(slide, selectedIds, scope)computing world frames for member outlines + the context box, reusing
the existing
toWorldFrame/applyGroupTransform/worldTightFramemath.
overlay.ts—OverlayOptions.memberOutlines/contextBox+ a sharedhandle-less dashed-rectangle renderer (
appendOutline), painted beneaththe handles.
editor.ts—repaintOverlaycomputes and forwards the frames.Design:
docs/design/slides/slides-group-selection-ui.md.Test plan
pnpm verify:fast(lint + typecheck + unit tests across packages)pnpm slides test test/view/editor/— incl. new tests:groupOverlayFramesunit tests (member outlines, context box,multi-select / non-group guards, nested-scope world coords)
z-order under handles, combined context+members, default-none)
handles; drill-in (double-click) renders the context box
pnpm dev: select a group → member outlines;double-click a member → context box;
Escpops out; lone shapeunchanged; Korean IME still composes in a grouped text box
pnpm verify:browser:dockerto refresh visual baselines🤖 Generated with Claude Code