@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 JsonAdaptedTask
Class JsonAdaptedTag
}

}

Class HiddenOutside #FFFFFF
HiddenOutside ..> Storage

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

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

JsonUserPrefsStorage .up.|> UserPrefsStorage
JsonAddressBookStorage .up.|> AddressBookStorage
JsonAddressBookStorage ..> JsonSerializableAddressBook
JsonSerializableAddressBook --> "*" JsonAdaptedPerson
JsonSerializableAddressBook --> "*" JsonAdaptedTask
JsonAdaptedPerson --> "*" JsonAdaptedTag
JsonAdaptedTask --> "*" JsonAdaptedTag

@enduml
