30 lines
1.0 KiB
Plaintext
30 lines
1.0 KiB
Plaintext
@startuml
|
|
skinparam backgroundColor #FFFFFF
|
|
skinparam defaultFontName Arial
|
|
skinparam defaultFontSize 14
|
|
skinparam shadowing false
|
|
title Native input — one VM and one event dispatcher
|
|
actor User
|
|
participant TesseraApp as GUI
|
|
participant "events::Client" as Client
|
|
participant "API / worker" as Worker
|
|
participant ReplSession as VM
|
|
participant event_dispatch as Dispatch
|
|
participant "refresh / publication" as Refresh
|
|
User -> GUI : pointer press / release
|
|
GUI -> GUI : published geometry; matching target
|
|
GUI -> Client : Input(window, session, layout_version, mount)
|
|
Client -> Worker : POST /events
|
|
Worker -> Worker : reject stale source/destination identities
|
|
Worker -> VM : dispatch_incremental
|
|
VM -> Dispatch : target Block + optional Mount
|
|
Dispatch -> Dispatch : capture -> target -> bubble
|
|
Dispatch -> VM : budgeted handler / onEvent / onClick
|
|
VM -> Refresh : update related presentations
|
|
Refresh --> GUI : Frame / DocumentUpdated
|
|
note over Dispatch
|
|
Without a Mount, dispatch visits only the target.
|
|
With a Mount, traversal follows that occurrence.
|
|
end note
|
|
@enduml
|