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

package UI <<Rectangle>>{
Interface Ui <<Interface>>
Class "{abstract}\nUiPart" as UiPart
Class UiManager
Class MainWindow
Class HelpWindow
Class ResultDisplay
Class XYZListPanel
Class XYZCard
Class ResultBarFooter
Class CommandBox
Class FilterPanel
Class TimeTableWindow
}

package Model <<Rectangle>> {
Class HiddenModel #FFFFFF
}

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

Class HiddenOutside #FFFFFF
HiddenOutside ..> Ui

UiManager .left.|> Ui
UiManager -down-> MainWindow

MainWindow --> TimeTableWindow
MainWindow --> HelpWindow
MainWindow *-down-> ResultDisplay
MainWindow *-down-> CommandBox
MainWindow *-down-> ResultBarFooter
MainWindow *-down-> XYZListPanel
MainWindow *-down-> FilterPanel
XYZListPanel -down-> XYZCard

MainWindow -left-|> UiPart

ResultDisplay --|> UiPart
CommandBox --|> UiPart
XYZListPanel --|> UiPart
XYZCard --|> UiPart
ResultBarFooter --|> UiPart
HelpWindow -down-|> UiPart
TimeTableWindow --|> UiPart
FilterPanel --|> UiPart

FilterPanel ..> Model
TimeTableWindow .right.> Model
XYZCard ..> Model
UiManager -right-> Logic
MainWindow -left-> Logic

XYZListPanel -[hidden]left- FilterPanel
HelpWindow -[hidden]left- CommandBox
CommandBox -[hidden]left- ResultDisplay
ResultDisplay -[hidden]left- ResultBarFooter
TimeTableWindow -[hidden]left- HelpWindow
FilterPanel -[hidden]left- TimeTableWindow

MainWindow -[hidden]-|> UiPart

note right of XYZListPanel : XYZ refers to Tutor, Appointment, Schedule \nGrade, Budget or Reminder.

@enduml
