@startuml
skinparam linetype ortho
!include style.puml
skinparam arrowThickness 1.1
skinparam arrowColor UI_COLOR_T1
skinparam classBackgroundColor UI_COLOR_T1

package Ui <<Rectangle>>{
Interface Ui <<Interface>>
Class "{abstract}\nUiPart" as UiPart
Class UiManager
Class MainWindow
Class TitleDisplay
Class ResultDisplay
Class CommandBox
Class SideBar
Class HelpWindow
Class DataPanel
Class SerenityDataPanel
Class GroupDataPanel
Class LessonDataPanel
Class LessonCard
Class StudentCard
Class StudentInfoCard
Class QuestionCard
}

package Logic {}

UiManager .right.|> Ui
UiManager -down-> MainWindow
MainWindow *-right-> DataPanel
MainWindow *-down-> TitleDisplay
MainWindow *-down-> ResultDisplay
MainWindow *-down-> CommandBox
MainWindow *-down-> SideBar
MainWindow *-down-> HelpWindow

MainWindow --down--|> UiPart
TitleDisplay --down--|> UiPart
ResultDisplay --down--|> UiPart
CommandBox --down-|> UiPart
SideBar --down--|> UiPart
HelpWindow --down--|> UiPart
DataPanel --down--|> UiPart

DataPanel <|-- SerenityDataPanel
DataPanel <|-- GroupDataPanel
DataPanel <|-- LessonDataPanel

SerenityDataPanel -down-> QuestionCard
GroupDataPanel -down-> LessonCard
GroupDataPanel -down-> StudentCard
LessonDataPanel -down-> StudentInfoCard
LessonDataPanel -down-> QuestionCard

StudentCard -down-|> UiPart
LessonCard -down-|> UiPart
StudentInfoCard -down-|> UiPart
QuestionCard -down-|> UiPart

UiManager -right-> Logic
MainWindow -right-> Logic

@enduml
