     enum Action {
         case setup
         case finalSetup
-        case image
+        case image(src: String, href: String, width: Int?, height: Int?)
         case link(title: String)
-        case reference
-        case pronunciation
+        case reference(selectedIndex: Int, group: [Reference])
+        case pronunciation(url: URL)
         case properties
         case edit(sectionID: Int, descriptionSource: String?)
         case addTitleDescription

        
        func getLinkAction(with data: [String: Any]?) -> Action? {
            guard let title = data?[LinkKey.title.rawValue] as? String else {
                assertionFailure("Missing title data in link")
                return nil
            }
            return .link(title: title)
        }
        func getEditAction(with data: [String: Any]?) -> Action? {
            guard let sectionID = data?["sectionId"] as? Int else {
                assertionFailure("Missing title data in link")
                return nil
            }
            return .edit(sectionID: sectionID, descriptionSource: data?["descriptionSource"] as? String)
        }
    }
    

            case .finalSetup:
                return .finalSetup
            case .image:
                return getImageAction(with: data)
            case .reference:
                return getReferenceAction(with: data)
            case .pronunciation:
                return getPronunciationAction(with: data)
            case .edit:
                return getEditAction(with: data)
            case .addTitleDescription:
