rspace-online/modules
Jeff Emmett e34eec649f feat(canvas): unified rApp canvas interaction — keyboard + space-to-grab
Phase A.5: bring rApp mini-canvases to parity with the main rSpace canvas
on keyboard shortcuts and Space-to-grab behavior, plus ship reusable
primitives for fit-view and zoom chrome.

shared/canvas-interaction.ts — extend CanvasInteractionController:
  • enableSpaceToGrab — Space sets grab cursor and flips isSpaceHeld()
  • enableKeyboardShortcuts — 0 fit, +/- zoom, arrows pan, Ctrl+Z/Y
    undo/redo, Delete/Backspace delete (with shadow-DOM-aware text
    input detection so inline editors still work)
  • zoomByFactor() helper for chrome +/- buttons

shared/canvas-viewport.ts (new):
  • fitViewToRects / fitViewToNodes — standard fit algorithm matching
    the main canvas (40px padding, 0.1–1.5 clamp default)
  • persistViewport / restoreViewport — localStorage under
    rspace_viewport:<key> with finite-value validation

shared/components/rspace-canvas-chrome.ts (new):
  • <rspace-canvas-chrome> web component — zoom out/in/fit buttons +
    percent indicator + optional grid toggle. Emits canvas-zoom-*
    events. Available as drop-in for new/future canvases.

Migrate 8 rApp canvases to opt into space-to-grab + keyboard fit:
rsocials planner (keeps existing isEnabled gate), rsocials workflow,
rminders automation, rflows, rgov circuit, rnetwork CRM graph,
applet-circuit-canvas. rTime skips enableSpaceToGrab because it has
its own Space tracking integrated with node-drag state.

Bump asset cache versions so browsers pick up the new JS.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-17 18:18:49 -04:00
..
crowdsurf fix: disable all feature tours — shell welcome tour, TourEngine, landing links 2026-04-15 11:12:00 -04:00
ragents feat(ragents): add agent-to-agent exchange module 2026-04-12 23:27:29 +00:00
rauctions feat(rauctions): add rAuctions module with hub page and external app embed 2026-04-13 15:51:10 +00:00
rbnb fix: disable all feature tours — shell welcome tour, TourEngine, landing links 2026-04-15 11:12:00 -04:00
rbooks feat(canvas): rApplet Phase 2 — port chips, data flow, toolbar palette, 15 module applets 2026-04-15 13:08:49 -04:00
rcal rename: finish rschedule → rminders migration 2026-04-16 17:18:17 -04:00
rcart infra(traefik): scope rate limit per CF-Connecting-IP, raise to 600/150 2026-04-16 17:04:15 -04:00
rchats feat(canvas): rApplet Phase 2 — port chips, data flow, toolbar palette, 15 module applets 2026-04-15 13:08:49 -04:00
rchoices feat(canvas): rApplet Phase 2 — port chips, data flow, toolbar palette, 15 module applets 2026-04-15 13:08:49 -04:00
rcred fix(auth,rcred): passkey autofill for mobile + rcred write access 2026-04-15 19:23:28 -04:00
rdata feat(rdata): traversible Data Cloud — click-to-focus graph navigation 2026-04-15 13:41:44 -04:00
rdesign feat(mcp): 101 MCP tools across all 35 rApps + security hardening + MI integration 2026-04-10 10:25:17 -04:00
rdocs rename: finish rschedule → rminders migration 2026-04-16 17:18:17 -04:00
rexchange feat(canvas): rApplet Phase 2 — port chips, data flow, toolbar palette, 15 module applets 2026-04-15 13:08:49 -04:00
rfeeds feat(rfeeds): add landing page and standalone domain (rfeeds.online) 2026-04-16 12:47:05 -04:00
rfiles fix: disable all feature tours — shell welcome tour, TourEngine, landing links 2026-04-15 11:12:00 -04:00
rflows feat(canvas): unified rApp canvas interaction — keyboard + space-to-grab 2026-04-17 18:18:49 -04:00
rforum fix: disable all feature tours — shell welcome tour, TourEngine, landing links 2026-04-15 11:12:00 -04:00
rgov feat(canvas): unified rApp canvas interaction — keyboard + space-to-grab 2026-04-17 18:18:49 -04:00
rinbox fix(email): align SMTP envelope with From header for DMARC pass 2026-04-17 09:36:36 -04:00
rmaps mobile: touch + pen compatibility pass across rApps 2026-04-16 17:13:35 -04:00
rmeets rename: finish rschedule → rminders migration 2026-04-16 17:18:17 -04:00
rminders feat(canvas): unified rApp canvas interaction — keyboard + space-to-grab 2026-04-17 18:18:49 -04:00
rnetwork feat(canvas): unified rApp canvas interaction — keyboard + space-to-grab 2026-04-17 18:18:49 -04:00
rnotes mobile: touch + pen compatibility pass across rApps 2026-04-16 17:13:35 -04:00
rpast fix(rpast): always https for non-loopback hosts 2026-04-16 17:06:25 -04:00
rphotos mobile: touch + pen compatibility pass across rApps 2026-04-16 17:13:35 -04:00
rpubs fix(rpubs): canonical subdomain URLs for published pages 2026-04-16 15:51:28 -04:00
rschedule chore(rschedule): bump JS cache version to v=2 after Phase B-H build 2026-04-16 18:31:33 -04:00
rsheets mobile: touch + pen compatibility pass across rApps 2026-04-16 17:13:35 -04:00
rsocials feat(canvas): unified rApp canvas interaction — keyboard + space-to-grab 2026-04-17 18:18:49 -04:00
rspace rename: finish rschedule → rminders migration 2026-04-16 17:18:17 -04:00
rsplat fix(rsplat): stop double fileInput.click on mobile generate upload 2026-04-17 13:11:34 -04:00
rswag fix: disable all feature tours — shell welcome tour, TourEngine, landing links 2026-04-15 11:12:00 -04:00
rtasks feat(rschedule,rtasks): wire Calendly-style rSchedule + rTasks canvas port 2026-04-16 17:29:42 -04:00
rtime feat(canvas): unified rApp canvas interaction — keyboard + space-to-grab 2026-04-17 18:18:49 -04:00
rtrips fix: disable all feature tours — shell welcome tour, TourEngine, landing links 2026-04-15 11:12:00 -04:00
rtube fix: disable all feature tours — shell welcome tour, TourEngine, landing links 2026-04-15 11:12:00 -04:00
rvnb fix: disable all feature tours — shell welcome tour, TourEngine, landing links 2026-04-15 11:12:00 -04:00
rvote fix: disable all feature tours — shell welcome tour, TourEngine, landing links 2026-04-15 11:12:00 -04:00
rwallet feat(canvas): add rApplet circuit components + template system 2026-04-15 12:01:30 -04:00