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

package Storage as StoragePackage {

package "UserPrefs Storage" #F4F6F6{
Class "<<interface>>\nUserPrefsStorage" as UserPrefsStorage
Class JsonUserPrefsStorage
}

Class "<<interface>>\nStorage" as Storage
Class StorageManager

package "AddressBook Storage" #F4F6F6{
Class "<<interface>>\nAddressBookStorage" as AddressBookStorage
Class JsonAddressBookStorage
Class JsonSerializableAddressBook
Class JsonAdaptedPerson
Class JsonAdaptedTag
Class JsonAdaptedScoreList
}

package "EventBook Storage" #F4F6F6{
Class "<<interface>>\nEventBookStorage" as EventBookStorage
Class JsonEventBookStorage
Class JsonSerializableEventBook
Class JsonAdaptedEvent
}

}

Class HiddenOutside #FFFFFF
HiddenOutside ..> Storage

StorageManager .up.|> Storage
StorageManager -up-> "1" UserPrefsStorage
StorageManager -up-> "1" AddressBookStorage
StorageManager -up-> "1" EventBookStorage

Storage -left-|> UserPrefsStorage
Storage -right-|> AddressBookStorage
Storage -right-|> EventBookStorage

JsonUserPrefsStorage .up.|> UserPrefsStorage
JsonAddressBookStorage .up.|> AddressBookStorage
JsonAddressBookStorage ..> JsonSerializableAddressBook
JsonSerializableAddressBook --> "*" JsonAdaptedPerson
JsonAdaptedPerson --> "*" JsonAdaptedTag
JsonAdaptedPerson --> "1" JsonAdaptedScoreList
JsonEventBookStorage .up.|> EventBookStorage
JsonEventBookStorage ..> JsonSerializableEventBook
JsonSerializableEventBook --> "*" JsonAdaptedEvent

@enduml
