@startuml
'no-preview
/' !theme bluegray '/

/' skinparam linetype polyline '/
skinparam linetype ortho

package Prim {
    component Buffer {

    }

    component Event

    component Handle

    component Ctrl

    component Action

    component Hook

    Event -r-|> Handle
    Handle -r-|> Buffer
    Buffer -r-|> Ctrl
    Ctrl -r-|> Action
    Buffer -u-|> Hook
}

package Core {
    component "                                API                                " as api

    component "Command" as ccmd
    component "View" as cview

    package Primx {
        component "Event" as eventx /'<<api>>'/
        component "Hook" as hookx
        component "Action" as actionx
        eventx ----r-> hookx
        hookx ----r-> actionx
    }

    component "Plugin               " as plugin {

    }
    note right of plugin
    end note

    api -- eventx
    api -- hookx
    api -- actionx
    plugin -d- api

    ccmd -u- api
    cview -u- api

    ccmd -r-|> eventx
    actionx -r-|> cview

}

eventx ---d-|> Event
Action ---u-|> actionx
Hook --u-|> hookx

package UI {
    component Keybinding
    component "Command" as cmd
    component "View" as view

    Keybinding -d-|> cmd
    cmd -[hidden]r- view
}

cmd -d-|> api
cmd -d-|> plugin
api -u-|> view
plugin -u-|> view
@enduml
