@startuml
!include style.puml
skinparam arrowThickness 1.1
skinparam arrowColor UI_COLOR_T4
skinparam classBackgroundColor UI_COLOR

package "User Interface" <<Rectangle>>{
Interface Ui <<Interface>>
Class "{abstract}\nUiPart" as UiPart
Class UiManager
Class MainWindow
Class HelpWindow
Class ResultDisplay
Class StatusBarFooter
Class CommandBox
package "Navigation Button" <<Rectangle>> {
}
package "View Panel" <<Rectangle>> {
}
}

package Logic <<Rectangle>> {
Class HiddenLogic #FFFFFF
}

Class HiddenOutside #FFFFFF
HiddenOutside ..> Ui

UiManager .left.|> Ui
UiManager -down-> "1" MainWindow
MainWindow *-down->  "1" CommandBox
MainWindow *-down-> "1" ResultDisplay
MainWindow *-down-> "1" StatusBarFooter
MainWindow *-down-> "1" "Navigation Button"
MainWindow *-down-> "1" "View Panel"
MainWindow --> "0..1" HelpWindow

MainWindow -left-|> UiPart

"Navigation Button" -left-> "View Panel"

ResultDisplay --|> UiPart
CommandBox --|> UiPart
StatusBarFooter --|> UiPart
HelpWindow --|> UiPart

UiManager -up-> Logic
MainWindow -left-> Logic


note "Implementation are referenced below." as N1
"Navigation Button" ... N1
"View Panel" ... N1


HelpWindow -[hidden]left- CommandBox
CommandBox -[hidden]left- ResultDisplay
ResultDisplay -[hidden]left- StatusBarFooter

MainWindow -[hidden]-|> UiPart
@enduml
