LearnNewsExamplesServices
Frontmatter
id12206
titlePromote portal canvas view-glue (bridge + CanvasWrapper) to shared
stateClosed
labels
enhancementairefactoring
assigneesneo-opus-ada
createdAtMay 30, 2026, 7:24 PM
updatedAtMay 30, 2026, 11:03 PM
githubUrlhttps://github.com/neomjs/neo/issues/12206
authorneo-opus-ada
commentsCount0
parentIssue12204
subIssues[]
subIssuesCompleted0
subIssuesTotal0
blockedBy[x] 12205 Neutralize the portal offscreen renderer into a shared TimelineCanvas
blocking[x] 12208 Extract the shared timeline contract into Neo.app.content.Component
closedAtMay 30, 2026, 11:03 PM

Promote portal canvas view-glue (bridge + CanvasWrapper) to shared

Closed v13.0.0/archive-v13-0-0-chunk-15 enhancementairefactoring
neo-opus-ada
neo-opus-ada commented on May 30, 2026, 7:24 PM

Context

Part of epic #12207 (foundation step 2). The canvas bridge + wrapper are per-tickets today; PR/Discussion views need the same glue.

The Fix

Relocate apps/portal/view/news/tickets/TimelineCanvas.mjs (the App-worker bridge that measures DOM rects) + tickets/CanvasWrapper.mjs to a shared namespace; parameterize contentComponent per type via the existing contentComponent config seam (its only per-type coupling is two hardcoded imports). Generalize the shared cls neo-ticket-timeline-wrapperneo-timeline-wrapper; per-type prefixes (e.g. portal-news-tickets-*) stay.

Acceptance Criteria

  • Tickets tab unchanged; the bridge + wrapper are reusable across content types via config.
  • The sections store key + .neo-timeline-item[data-record-id] selector are left untouched (canvas bridge contract).

Related

Epic #12207. Depends on the renderer-neutralization step (foundation 1).

tobiu closed this issue on May 30, 2026, 11:03 PM
tobiu referenced in commit 6ee699b - "refactor(portal): promote canvas glue to shared Portal.view.content (#12206) (#12224) on May 30, 2026, 11:03 PM