> ## Documentation Index
> Fetch the complete documentation index at: https://cometchat-013b37f0.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# UI Components

**UI Components** are building blocks of the UI Kit. **UI Components** are a set of custom classes specially designed to build a rich chat app. There are different UI Components available in the UI Kit Library.

## 1. CometChatUI

**CometChatUI** is an option to launch a fully functional chat application using the UI Kit. In **CometChatUI** all the **UI Components** are interlinked and work together to launch a fully functional chat on your mobile application.

<Frame>
  <img src="https://mintcdn.com/cometchat-013b37f0/Czw6a3oEz4RIW75k/images/e44cdb6f-1623200179-937cd0e375e1300a22cb40f677f69912.jpg?fit=max&auto=format&n=Czw6a3oEz4RIW75k&q=85&s=c224b11d7b1a9d0a7730e1d8edc0b2b7" width="7774" height="4184" data-path="images/e44cdb6f-1623200179-937cd0e375e1300a22cb40f677f69912.jpg" />
</Frame>

<Tabs>
  <Tab title="Swift">
    ```swift theme={null}
    DispatchQueue.main.async {
    let cometChatUI = CometChatUI()
    cometChatUI.setup(withStyle: .fullScreen)
    self.present(cometChatUI, animated: true, completion: nil)
    }
    ```
  </Tab>
</Tabs>

## 2. CometChatConversationList

The **CometChatConversationList** is a view controller with a list of recent conversations. The view controller has all the necessary delegates and methods.

You can present this screen using **two methods.**

### Launch Conversation List (Recommended)

<Tabs>
  <Tab title="Swift">
    ```swift theme={null}
    let conversationList = CometChatConversationList()
    let navigationController = UINavigationController(rootViewController:conversationList)
    conversationList.set(title:"Chats", mode: .automatic)
    self.present(navigationController, animated:true, completion:nil)
    ```
  </Tab>
</Tabs>

<Frame>
  <img src="https://mintcdn.com/cometchat-013b37f0/PhOli_uzWYY61x6S/images/91d893d8-484464a-conversationList-a021a1ca1a7b6b6c15c2eb4650e22839.jpg?fit=max&auto=format&n=PhOli_uzWYY61x6S&q=85&s=58563d2e920990fc6400131d1f1235b1" width="1709" height="3424" data-path="images/91d893d8-484464a-conversationList-a021a1ca1a7b6b6c15c2eb4650e22839.jpg" />
</Frame>

### Embed Conversation List in View Controller

You can use this by subclassing UIViewController as **CometChatConversationList** as shown below:

<Note>
  > To assign a CometChatConversationList to view controller make sure that the Navigation controller is attached properly.
</Note>

<Tabs>
  <Tab title="Swift">
    ```swift theme={null}
    import CometChatPro

    class viewController: CometChatConversationList {

    override func viewDidLoad() {
          super.viewDidLoad()
          self.delegate = self
    	}
    }
    ```
  </Tab>
</Tabs>

Also, you can perform an action on tap on the conversation by adding **ConversationListDelegate** in the app's view controller as shown below:

<Tabs>
  <Tab title="Swift">
    ```swift theme={null}
    extension viewController: ConversationListDelegate {
        
    func didSelectConversationAtIndexPath(conversation: Conversation, indexPath: IndexPath){
            //Do Stuff
        }  
    }
    ```
  </Tab>
</Tabs>

## 3. CometChatCallsList

The **CometChatCallsList** is a view controller with a list of recent calls. The view controller has all the necessary delegates and methods.

You can present this screen using **two methods.**

### Launch Calls List (Recommended)

<Tabs>
  <Tab title="Swift">
    ```swift theme={null}
    let callList = CometChatCallsList()
    let navigationController = UINavigationController(rootViewController:callList)
    callList.set(title:"Calls", mode: .automatic)
    self.present(navigationController, animated:true, completion:nil)
    ```
  </Tab>
</Tabs>

<Frame>
  <img src="https://mintcdn.com/cometchat-013b37f0/awGGFw_rxAqc8o4X/images/9f658703-d93c58c-CallsList-83bf53d90de9a928a129951a51b2bef4.jpg?fit=max&auto=format&n=awGGFw_rxAqc8o4X&q=85&s=889af1bcd40d3c5cd429d4214f041574" width="2014" height="4032" data-path="images/9f658703-d93c58c-CallsList-83bf53d90de9a928a129951a51b2bef4.jpg" />
</Frame>

### Embed Call List in View Controller

You can use this by subclassing UIViewController as **CometChatCallsList** as shown below:

<Note>
  > To assign a CometChatCallsList to view controller make sure that the Navigation controller is attached properly.
</Note>

<Tabs>
  <Tab title="Swift">
    ```swift theme={null}
    import CometChatPro

    class viewController: CometChatCallsList {

    override func viewDidLoad() {
          super.viewDidLoad()
          self.delegate = self
    	}
    }
    ```
  </Tab>
</Tabs>

Also, you can perform an action on tap on the call by adding **CallsListDelegate** in the app's view controller as shown below:

<Tabs>
  <Tab title="Swift">
    ```swift theme={null}
    extension viewController: CallsListDelegate {
        
    func didSelectCallsAtIndexPath(call: BaseMessage, indexPath: IndexPath){
            //Do Stuff
        }  
    }
    ```
  </Tab>
</Tabs>

## 4. CometChatUserList

The **CometChatUserList** is a view controller with a list of users. The view controller has all the necessary delegates and methods.

You can present this screen using **two methods.**

### Launch User List (Recommended)

<Tabs>
  <Tab title="Swift">
    ```swift theme={null}
    let userList = CometChatUserList()
    let navigationController = UINavigationController(rootViewController:userList)
    userList.set(title:"Contacts", mode: .automatic)
    self.present(navigationController, animated:true, completion:nil)
    ```
  </Tab>
</Tabs>

<Frame>
  <img src="https://mintcdn.com/cometchat-013b37f0/gwyRT6PY8hzLhEaL/images/6869fc65-bdb8d7d-userList-6e3c0da50fe84c4cb845d8e8cee7befb.jpg?fit=max&auto=format&n=gwyRT6PY8hzLhEaL&q=85&s=94b3710edcc72d83712647d0e43d284d" width="1709" height="3424" data-path="images/6869fc65-bdb8d7d-userList-6e3c0da50fe84c4cb845d8e8cee7befb.jpg" />
</Frame>

### Embed User List in View Controller

You can use this by subclassing UIViewController as **CometChatUserList** as shown below:

<Note>
  > To assign a CometChatUserList to view controller make sure that the Navigation controller is attached properly.
</Note>

<Tabs>
  <Tab title="Swift">
    ```swift theme={null}
    import CometChatPro

    class viewController: CometChatUserList {

    override func viewDidLoad() {
      super.viewDidLoad()
      self.delegate = self
      }
    }
    ```
  </Tab>
</Tabs>

Also, you can perform an action on tap on the user by adding **UserListDelegate** in the app's view controller as shown below:

<Tabs>
  <Tab title="Swift">
    ```swift theme={null}
    extension viewController: UserListDelegate {
        
    func didSelectUserAtIndexPath(user: User, indexPath: IndexPath) {
            //Do Stuff
        }  
    }
    ```
  </Tab>
</Tabs>

## 5. CometChatGroupList

The **CometChatGroupList** is a view controller with a list of groups. The view controller has all the necessary delegates and methods.

You can present this screen using **two methods.**

### Launch Group List (Recommended)

<Tabs>
  <Tab title="Swift">
    ```swift theme={null}
    let groupList = CometChatGroupList()
    let navigationController = UINavigationController(rootViewController:groupList)
    groupList.set(title:"Groups", mode: .automatic)
    self.present(navigationController, animated:true, completion:nil)
    ```
  </Tab>
</Tabs>

<Frame>
  <img src="https://mintcdn.com/cometchat-013b37f0/F2H1_649SG41vCiB/images/ba586e31-5b5e37a-groupList-e9f9e6ae9bc50ddf5861cf939d038a51.jpg?fit=max&auto=format&n=F2H1_649SG41vCiB&q=85&s=9c77f39a187966bf36ed4f116dd4ab1d" width="1709" height="3424" data-path="images/ba586e31-5b5e37a-groupList-e9f9e6ae9bc50ddf5861cf939d038a51.jpg" />
</Frame>

### Embed Group List in View Controller

You can use this by subclassing UIViewController as **CometChatGroupList** as shown below:

<Note>
  > To assign a CometChatGroupList to view controller make sure that the Navigation controller is attached properly.
</Note>

<Tabs>
  <Tab title="Swift">
    ```swift theme={null}
    import CometChatPro

    class viewController: CometChatGroupList {

    override func viewDidLoad() {
          super.viewDidLoad()
          self.delegate = self
    	}
    }
    ```
  </Tab>
</Tabs>

Also, you can perform an action on tap on the group by adding **GroupListDelegate** in the app's view controller as shown below:

<Tabs>
  <Tab title="Swift">
    ```swift theme={null}
    extension viewController: GroupListDelegate {
        
    func didSelectGroupAtIndexPath(group: Group, indexPath: IndexPath)
            //Do Stuff
        }  
    }
    ```
  </Tab>
</Tabs>

## 6. CometChatMessageList

The **CometChatMessageList** is a view controller with a list of messages for a particular user or group. The view controller has all the necessary delegates and methods.

**CometChatMessageList** requires `User` or `Group` object to work properly.

<Note>
  > To retrieve the User or Group object you can call CometChat.getUser() or CometChat.getGroup().
</Note>

You can present this screen using **two methods.**

### Launch Message List (Recommended)

<Tabs>
  <Tab title="Swift">
    ```swift theme={null}
    let messageList = CometChatMessageList()
    let navigationController = UINavigationController(rootViewController:messageList)
    messageList.set(conversationWith: user, type: .user)
    self.present(navigationController, animated:true, completion:nil)
    ```
  </Tab>
</Tabs>

<Frame>
  <img src="https://mintcdn.com/cometchat-013b37f0/Ofh32iX_Ud49gQlR/images/052d2ab7-c4cd46d-messageList-8d97521f157b35614374a9d03ff59452.jpg?fit=max&auto=format&n=Ofh32iX_Ud49gQlR&q=85&s=2e27f75be53c33ee80790d8337aa6787" width="3988" height="7985" data-path="images/052d2ab7-c4cd46d-messageList-8d97521f157b35614374a9d03ff59452.jpg" />
</Frame>

### Embed Message List in View Controller

You can use this by subclassing UIViewController as **CometChatMessageList** as shown below:

<Note>
  > To assign a CometChatMessageList to view controller make sure that the Navigation controller is attached properly.
</Note>

<Tabs>
  <Tab title="Swift">
    ```swift theme={null}
    import CometChatPro

    class viewController: CometChatMessageList {

    override func viewDidLoad() {
          super.viewDidLoad()
          set(conversationWith: user, type: .user)
    	}
    }
    ```
  </Tab>
</Tabs>

## 7. CometChatUserProfile

The **CometChatUserProfile** is a view controller with user information and a list of dummy cells for settings of the app which the developer can use in his app.

You can present this screen using **two methods.**

### Launch User Profile (Recommended)

<Tabs>
  <Tab title="Swift">
    ```swift theme={null}
    let userProfile = CometChatUserProfile()
    let navigationController = UINavigationController(rootViewController:userProfile)
    userProfile.set(title:"More", mode: .automatic)
    self.present(navigationController, animated:true, completion:nil)
    ```
  </Tab>
</Tabs>

<Frame>
  <img src="https://mintcdn.com/cometchat-013b37f0/PhOli_uzWYY61x6S/images/94eb6b13-feba996-moreInfo-3e8959fa08b73f40daac81689c83e7dd.jpg?fit=max&auto=format&n=PhOli_uzWYY61x6S&q=85&s=e6b10428fcbe12c5a4f5c9ba3bc6bbcc" width="1709" height="3424" data-path="images/94eb6b13-feba996-moreInfo-3e8959fa08b73f40daac81689c83e7dd.jpg" />
</Frame>

### Embed UserProfile inView Controller

You can use this by subclassing UIViewController as **CometChatUserProfile** as shown below:

<Note>
  > To assign a CometChatUserProfile to view controller make sure that the Navigation controller is attached properly.
</Note>

<Tabs>
  <Tab title="Swift">
    ```swift theme={null}
    import CometChatPro

    class viewController: CometChatUserProfile {

    override func viewDidLoad() {
          super.viewDidLoad()
    		 
    	}
    }
    ```
  </Tab>
</Tabs>
