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

Package Model <<Rectangle>>{
Interface ReadOnlyAddressBook <<Interface>>
Interface Model <<Interface>>
Interface ObservableList <<Interface>>
Class AddressBook
Class ReadOnlyAddressBook
Class Model
Class ModelManager
Class UserPrefs
Class ReadOnlyUserPrefs

Package Widget {
Interface WidgetModel <<Interface>>
Class WidgetModelManager
Class WidgetObject
}

Package Client {
Class Client
Class Address
Class Email
Class Name
Class Phone
Class UniqueClientList
}

Package Tag {
Class Tag
}

Package Country {
Class Country
Class CountryManager
}
}


Class HiddenOutside #FFFFFF
HiddenOutside ..> Model

AddressBook .up.|> ReadOnlyAddressBook

ModelManager .up.|> Model
Model .right.> ObservableList
ModelManager o--> "1" AddressBook
ModelManager o-left-> "1" UserPrefs
ModelManager *-right->"1" WidgetModel
UserPrefs .up.|> ReadOnlyUserPrefs

AddressBook *--> "1" UniqueClientList
UniqueClientList o--> "*" Client
Client *--> Name
Client *--> Phone
Client *--> Email
Client *--> Address
Client *--> "*" Tag


WidgetModelManager ..|> WidgetModel
WidgetModelManager *-right->"1" WidgetObject

Name -[hidden]right-> Phone
Phone -[hidden]right-> Address
Address -[hidden]right-> Email

ModelManager -->"1" Client : filtered list
@enduml
