@cometchat/skills 3.0.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +44 -17
  3. package/bin/install.js +389 -43
  4. package/package.json +19 -9
  5. package/skills/cometchat/SKILL.md +1066 -265
  6. package/skills/cometchat-android-v5/SKILL.md +120 -0
  7. package/skills/cometchat-android-v5-components/SKILL.md +430 -0
  8. package/skills/cometchat-android-v5-core/SKILL.md +468 -0
  9. package/skills/cometchat-android-v5-customization/SKILL.md +305 -0
  10. package/skills/cometchat-android-v5-extensions/SKILL.md +124 -0
  11. package/skills/cometchat-android-v5-features/SKILL.md +130 -0
  12. package/skills/cometchat-android-v5-placement/SKILL.md +276 -0
  13. package/skills/cometchat-android-v5-production/SKILL.md +94 -0
  14. package/skills/cometchat-android-v5-push/SKILL.md +620 -0
  15. package/skills/cometchat-android-v5-testing/SKILL.md +187 -0
  16. package/skills/cometchat-android-v5-theming/SKILL.md +166 -0
  17. package/skills/cometchat-android-v5-troubleshooting/SKILL.md +73 -0
  18. package/skills/cometchat-android-v6/SKILL.md +107 -0
  19. package/skills/cometchat-android-v6-builder-settings/SKILL.md +145 -0
  20. package/skills/cometchat-android-v6-compose-components/SKILL.md +202 -0
  21. package/skills/cometchat-android-v6-compose-customization/SKILL.md +280 -0
  22. package/skills/cometchat-android-v6-compose-placement/SKILL.md +213 -0
  23. package/skills/cometchat-android-v6-compose-theming/SKILL.md +224 -0
  24. package/skills/cometchat-android-v6-core/SKILL.md +354 -0
  25. package/skills/cometchat-android-v6-events/SKILL.md +212 -0
  26. package/skills/cometchat-android-v6-extensions/SKILL.md +191 -0
  27. package/skills/cometchat-android-v6-features/SKILL.md +130 -0
  28. package/skills/cometchat-android-v6-kotlin-components/SKILL.md +197 -0
  29. package/skills/cometchat-android-v6-kotlin-customization/SKILL.md +268 -0
  30. package/skills/cometchat-android-v6-kotlin-placement/SKILL.md +248 -0
  31. package/skills/cometchat-android-v6-kotlin-theming/SKILL.md +202 -0
  32. package/skills/cometchat-android-v6-production/SKILL.md +187 -0
  33. package/skills/cometchat-android-v6-push/SKILL.md +274 -0
  34. package/skills/cometchat-android-v6-testing/SKILL.md +279 -0
  35. package/skills/cometchat-android-v6-troubleshooting/SKILL.md +249 -0
  36. package/skills/cometchat-angular-components/SKILL.md +706 -0
  37. package/skills/cometchat-angular-core/SKILL.md +444 -0
  38. package/skills/cometchat-angular-customization/SKILL.md +424 -0
  39. package/skills/cometchat-angular-features/SKILL.md +447 -0
  40. package/skills/cometchat-angular-patterns/SKILL.md +447 -0
  41. package/skills/cometchat-angular-placement/SKILL.md +685 -0
  42. package/skills/cometchat-angular-production/SKILL.md +415 -0
  43. package/skills/cometchat-angular-theming/SKILL.md +365 -0
  44. package/skills/cometchat-angular-troubleshooting/SKILL.md +329 -0
  45. package/skills/cometchat-astro-patterns/SKILL.md +3 -3
  46. package/skills/cometchat-components/SKILL.md +11 -0
  47. package/skills/cometchat-core/SKILL.md +11 -6
  48. package/skills/cometchat-customization/references/component-catalog.md +1 -1
  49. package/skills/cometchat-features/SKILL.md +176 -108
  50. package/skills/cometchat-flutter-v5/SKILL.md +167 -0
  51. package/skills/cometchat-flutter-v5-calls/SKILL.md +192 -0
  52. package/skills/cometchat-flutter-v5-conversations/SKILL.md +117 -0
  53. package/skills/cometchat-flutter-v5-core/SKILL.md +221 -0
  54. package/skills/cometchat-flutter-v5-customization/SKILL.md +227 -0
  55. package/skills/cometchat-flutter-v5-events/SKILL.md +155 -0
  56. package/skills/cometchat-flutter-v5-messages/SKILL.md +258 -0
  57. package/skills/cometchat-flutter-v5-production/SKILL.md +207 -0
  58. package/skills/cometchat-flutter-v5-push/SKILL.md +284 -0
  59. package/skills/cometchat-flutter-v5-theming/SKILL.md +160 -0
  60. package/skills/cometchat-flutter-v5-troubleshooting/SKILL.md +129 -0
  61. package/skills/cometchat-flutter-v5-users-groups/SKILL.md +151 -0
  62. package/skills/cometchat-flutter-v6/SKILL.md +445 -0
  63. package/skills/cometchat-flutter-v6-calls/SKILL.md +333 -0
  64. package/skills/cometchat-flutter-v6-components/SKILL.md +365 -0
  65. package/skills/cometchat-flutter-v6-conversations/SKILL.md +210 -0
  66. package/skills/cometchat-flutter-v6-core/SKILL.md +305 -0
  67. package/skills/cometchat-flutter-v6-customization/SKILL.md +666 -0
  68. package/skills/cometchat-flutter-v6-events/SKILL.md +216 -0
  69. package/skills/cometchat-flutter-v6-features/SKILL.md +406 -0
  70. package/skills/cometchat-flutter-v6-messages/SKILL.md +333 -0
  71. package/skills/cometchat-flutter-v6-migration/SKILL.md +381 -0
  72. package/skills/cometchat-flutter-v6-placement/SKILL.md +398 -0
  73. package/skills/cometchat-flutter-v6-production/SKILL.md +632 -0
  74. package/skills/cometchat-flutter-v6-theming/SKILL.md +260 -0
  75. package/skills/cometchat-flutter-v6-troubleshooting/SKILL.md +726 -0
  76. package/skills/cometchat-flutter-v6-users-groups/SKILL.md +216 -0
  77. package/skills/cometchat-ios/SKILL.md +323 -0
  78. package/skills/cometchat-ios-components/SKILL.md +651 -0
  79. package/skills/cometchat-ios-core/SKILL.md +822 -0
  80. package/skills/cometchat-ios-customization/SKILL.md +825 -0
  81. package/skills/cometchat-ios-features/SKILL.md +725 -0
  82. package/skills/cometchat-ios-placement/SKILL.md +750 -0
  83. package/skills/cometchat-ios-production/SKILL.md +730 -0
  84. package/skills/cometchat-ios-push/SKILL.md +582 -0
  85. package/skills/cometchat-ios-theming/SKILL.md +631 -0
  86. package/skills/cometchat-ios-troubleshooting/SKILL.md +983 -0
  87. package/skills/cometchat-native-bare-patterns/SKILL.md +470 -0
  88. package/skills/cometchat-native-components/SKILL.md +594 -0
  89. package/skills/cometchat-native-core/SKILL.md +407 -0
  90. package/skills/cometchat-native-customization/SKILL.md +594 -0
  91. package/skills/cometchat-native-expo-patterns/SKILL.md +485 -0
  92. package/skills/cometchat-native-features/SKILL.md +608 -0
  93. package/skills/cometchat-native-placement/SKILL.md +500 -0
  94. package/skills/cometchat-native-production/SKILL.md +694 -0
  95. package/skills/cometchat-native-push/SKILL.md +593 -0
  96. package/skills/cometchat-native-testing/SKILL.md +583 -0
  97. package/skills/cometchat-native-theming/SKILL.md +656 -0
  98. package/skills/cometchat-native-troubleshooting/SKILL.md +433 -0
  99. package/skills/cometchat-nextjs-patterns/SKILL.md +5 -5
  100. package/skills/cometchat-production/SKILL.md +60 -0
  101. package/skills/cometchat-react-router-patterns/SKILL.md +23 -21
@@ -0,0 +1,706 @@
1
+ ---
2
+ name: cometchat-angular-components
3
+ description: "Component catalog for the CometChat Angular UI Kit v4 — HTML selector names, Angular Input bindings, Output events, slot templates, request builders, style objects, and composite components. Always loaded before writing <cometchat-*> HTML."
4
+ license: "MIT"
5
+ compatibility: "Angular >=12 <=15; @cometchat/chat-uikit-angular ^4; @cometchat/chat-sdk-javascript ^4"
6
+ allowed-tools: "executeBash, readFile, fileSearch, listDirectory, AskUserQuestion"
7
+ metadata:
8
+ author: "CometChat"
9
+ version: "3.0.0"
10
+ tags: "cometchat angular components catalog props bindings events templates"
11
+ ---
12
+
13
+ ## Purpose
14
+
15
+ Teaches Claude every component the Angular UI Kit v4 exports, with the HTML selectors, Angular `[Input]` bindings, `(Output)` events, `ng-template` slot views, request builders, and style objects that actually exist. This is the authoritative reference — never invent component names or bindings; look them up here.
16
+
17
+ **Read `cometchat-angular-core` before this skill** — module imports, `CUSTOM_ELEMENTS_SCHEMA`, and init/login are prerequisites.
18
+
19
+ Ground truth: `docs/ui-kit/angular/components-overview`, per-component doc pages at `docs/ui-kit/angular/`, and `@cometchat/chat-uikit-angular@4.x` exports.
20
+
21
+ ---
22
+
23
+ ## How to use this catalog
24
+
25
+ Angular UI Kit components are Angular standalone components that render as custom HTML elements. Three patterns cover almost every use case:
26
+
27
+ | Pattern | Components | Use when |
28
+ |---|---|---|
29
+ | **Composite (quickest)** | `<cometchat-conversations-with-messages>` — renders a 3-panel layout (Conversations + Messages + Details) in one tag | Full-page route placements with **≥ 1024px** of horizontal space. The composite reserves room for a Details panel — in narrower containers (modals, sidebars, drawers) the Details slot stays empty and the layout looks broken. |
30
+ | **Two-pane (custom layout)** | `<cometchat-conversations>` + `<cometchat-messages>` side by side | Modal / dialog / sidebar / drawer placements (anywhere narrower than ~1024px). You wire the click handler from Conversations to set the active user/group on Messages. |
31
+ | **Granular (full control)** | `<cometchat-message-header>` + `<cometchat-message-list>` + `<cometchat-message-composer>` | Embedded chat surfaces with no inbox — e.g. a "Contact seller" modal that opens a 1:1 thread directly, or a per-page chat panel pinned to a specific user/group. |
32
+
33
+ **Data flow:** a list component calls the `[onItemClick]` Input callback with a `CometChat.Conversation` / `User` / `Group`. Extract the entity and pass it as `[user]` or `[group]` to the message components.
34
+
35
+ ---
36
+
37
+ ## Binding conventions (applies to every `<cometchat-*>` component)
38
+
39
+ | Binding type | Angular syntax | Example |
40
+ |---|---|---|
41
+ | **Input (data in)** | `[propName]="value"` | `[user]="selectedUser"` |
42
+ | **Input callback (`on*`)** | `[onXxx]="handlerFn"` | `[onItemClick]="onConvClick"` |
43
+ | **String literal** | `propName="string"` | `title="Chats"` |
44
+ | **Template slot** | `[slotName]="templateRef"` + `<ng-template #ref>` | `[listItemView]="customItem"` |
45
+ | **Style object** | `[componentStyle]="styleInstance"` | `[conversationsStyle]="myStyle"` |
46
+
47
+ > **Critical — `on*` props are `@Input()` callbacks, NOT `@Output()` events.** Use `[onItemClick]="myFn"` (square brackets), never `(onItemClick)="myFn($event)"` (round brackets). This applies to every `on*` prop across all CometChat components: `[onItemClick]`, `[onError]`, `[onSelect]`, `[onSendButtonClick]`, `[onAccept]`, `[onDecline]`, `[onVoiceCallClick]`, `[onVideoCallClick]`, etc.
48
+
49
+ ---
50
+
51
+ ## 1. Composite Components
52
+
53
+ ### CometChatConversationsWithMessages
54
+
55
+ The fastest integration — renders a full inbox + message thread + details panel (3-panel layout) in one component. Handles routing between conversations and messages internally.
56
+
57
+ > **⚠️ Width requirement: ≥ 1024px.** This composite renders a 3-panel layout (Conversations + Messages + Details). Below ~1024px of available width, the Details panel stays empty and visible — the layout looks broken with whitespace where Details should be. **Do not use this composite inside a modal, dialog, drawer, or sidebar** unless the container is at least 1024px wide. Use the Two-pane pattern (`<cometchat-conversations>` + `<cometchat-messages>`) for narrower placements (see § *Two-pane modal layout* in `cometchat-angular-placement`).
58
+
59
+ ```html
60
+ <!-- app.component.html — full-page route placement only -->
61
+ <cometchat-conversations-with-messages></cometchat-conversations-with-messages>
62
+ ```
63
+
64
+ ```typescript
65
+ // app.module.ts
66
+ import { CometChatConversationsWithMessages } from "@cometchat/chat-uikit-angular";
67
+ @NgModule({ imports: [CometChatConversationsWithMessages], schemas: [CUSTOM_ELEMENTS_SCHEMA] })
68
+ ```
69
+
70
+ Key inputs: `[conversationsWithMessagesStyle]`, `[messagesConfiguration]`, `[conversationsConfiguration]`.
71
+
72
+ ### CometChatUsersWithMessages
73
+
74
+ Renders a users list + message thread.
75
+
76
+ ```html
77
+ <cometchat-users-with-messages></cometchat-users-with-messages>
78
+ ```
79
+
80
+ ### CometChatGroupsWithMessages
81
+
82
+ Renders a groups list + message thread.
83
+
84
+ ```html
85
+ <cometchat-groups-with-messages></cometchat-groups-with-messages>
86
+ ```
87
+
88
+ ---
89
+
90
+ ## 2. Lists
91
+
92
+ ### CometChatConversations
93
+
94
+ Scrollable list of recent conversations (user + group).
95
+
96
+ ```html
97
+ <cometchat-conversations
98
+ [conversationsRequestBuilder]="conversationsRequestBuilder"
99
+ [onItemClick]="handleConvClick"
100
+ [onError]="handleError"
101
+ title="Chats"
102
+ [hideReceipt]="false"
103
+ [hideSeparator]="false"
104
+ [disableUsersPresence]="false"
105
+ ></cometchat-conversations>
106
+ ```
107
+
108
+ ```typescript
109
+ import { Component } from "@angular/core";
110
+ import { CometChat } from "@cometchat/chat-sdk-javascript";
111
+
112
+ @Component({ /* ... */ })
113
+ export class AppComponent {
114
+ conversationsRequestBuilder = new CometChat.ConversationsRequestBuilder().setLimit(20);
115
+
116
+ handleConvClick = (conversation: CometChat.Conversation): void => {
117
+ const entity = conversation.getConversationWith();
118
+ const type = conversation.getConversationType();
119
+ // navigate or set selectedUser / selectedGroup
120
+ };
121
+
122
+ handleError = (error: CometChat.CometChatException): void => {
123
+ console.error(error);
124
+ };
125
+ }
126
+ ```
127
+
128
+ Key inputs: `[conversationsRequestBuilder]`, `[onItemClick]`, `[onSelect]`, `[onError]`, `title`, `[hideReceipt]`, `[hideSeparator]`, `[disableUsersPresence]`, `[disableTyping]`, `[disableMentions]`, `[activeConversation]`, `[listItemView]`, `[menu]`, `[options]`, `[textFormatters]`, `[conversationsStyle]`, `[avatarStyle]`, `[statusIndicatorStyle]`, `[badgeStyle]`, `[dateStyle]`, `[listItemStyle]`.
129
+
130
+ ### CometChatUsers
131
+
132
+ ```html
133
+ <cometchat-users
134
+ [usersRequestBuilder]="usersRequestBuilder"
135
+ [onItemClick]="handleUserClick"
136
+ [hideStatus]="false"
137
+ [hideSearch]="false"
138
+ ></cometchat-users>
139
+ ```
140
+
141
+ Key inputs: `[usersRequestBuilder]`, `[onItemClick]`, `[onSelect]`, `[onError]`, `title`, `[hideStatus]`, `[hideSearch]`, `[listItemView]`, `[menu]`, `[options]`, `[usersStyle]`, `[avatarStyle]`, `[statusIndicatorStyle]`, `[listItemStyle]`.
142
+
143
+ ### CometChatGroups
144
+
145
+ ```html
146
+ <cometchat-groups
147
+ [groupsRequestBuilder]="groupsRequestBuilder"
148
+ [onItemClick]="handleGroupClick"
149
+ ></cometchat-groups>
150
+ ```
151
+
152
+ Key inputs: `[groupsRequestBuilder]`, `[onItemClick]`, `[onSelect]`, `[onError]`, `title`, `[hideSearch]`, `[listItemView]`, `[menu]`, `[options]`, `[groupsStyle]`, `[avatarStyle]`, `[listItemStyle]`.
153
+
154
+ ### CometChatGroupMembers
155
+
156
+ ```html
157
+ <cometchat-group-members
158
+ [group]="selectedGroup"
159
+ [groupMemberRequestBuilder]="memberRequestBuilder"
160
+ [onItemClick]="handleMemberClick"
161
+ [options]="getMemberOptions"
162
+ ></cometchat-group-members>
163
+ ```
164
+
165
+ Key inputs: `[group]` (**required** — pass a `CometChat.Group` instance), `[groupMemberRequestBuilder]`, `[onItemClick]`, `[onBack]`, `[onClose]`, `[options]`, `[groupMembersStyle]`, `[hideSearch]`, `[selectionMode]`, `[disableUsersPresence]`.
166
+
167
+ ---
168
+
169
+ ## 3. Messages
170
+
171
+ ### CometChatMessages
172
+
173
+ Composite message view — header + list + composer in one component.
174
+
175
+ ```html
176
+ <cometchat-messages
177
+ [user]="selectedUser"
178
+ [messageHeaderConfiguration]="headerConfig"
179
+ [messageListConfiguration]="listConfig"
180
+ [messageComposerConfiguration]="composerConfig"
181
+ ></cometchat-messages>
182
+ ```
183
+
184
+ Key inputs: `[user]` OR `[group]` (one required), `[messageHeaderConfiguration]`, `[messageListConfiguration]`, `[messageComposerConfiguration]`, `[messagesStyle]`.
185
+
186
+ ### CometChatMessageHeader
187
+
188
+ ```html
189
+ <cometchat-message-header
190
+ [user]="selectedUser"
191
+ [onBack]="handleBack"
192
+ [hideBackButton]="false"
193
+ [menu]="menuTemplate"
194
+ ></cometchat-message-header>
195
+ ```
196
+
197
+ Key inputs: `[user]` OR `[group]`, `[onBack]`, `[hideBackButton]`, `[menu]`, `[subtitleView]`, `[listItemView]`, `[messageHeaderStyle]`, `[avatarStyle]`, `[statusIndicatorStyle]`, `[disableUsersPresence]`, `[disableTyping]`.
198
+
199
+ > **Note:** `[hideVideoCallButton]` and `[hideVoiceCallButton]` do **not** exist on `<cometchat-message-header>`. Those inputs live on `<cometchat-call-buttons>`. To hide call buttons from the header, simply omit `<cometchat-call-buttons>` from the `[menu]` slot.
200
+
201
+ ### CometChatMessageList
202
+
203
+ Scrollable message feed. Handles reactions, receipts, mentions, threads, and media.
204
+
205
+ ```html
206
+ <cometchat-message-list
207
+ [user]="selectedUser"
208
+ [messagesRequestBuilder]="messagesRequestBuilder"
209
+ [hideReceipt]="false"
210
+ [disableReactions]="false"
211
+ [textFormatters]="textFormatters"
212
+ [templates]="messageTemplates"
213
+ [onThreadRepliesClick]="openThread"
214
+ [onError]="handleError"
215
+ ></cometchat-message-list>
216
+ ```
217
+
218
+ Key inputs: `[user]` OR `[group]`, `[parentMessageId]` (for thread replies), `[messagesRequestBuilder]`, `[textFormatters]`, `[templates]`, `[hideReceipt]`, `[disableReactions]`, `[disableSoundForMessages]`, `[disableMentions]`, `[hideError]`, `[hideDateSeparator]`, `[onThreadRepliesClick]` (Input callback — use `[onThreadRepliesClick]="handler"` not `(onThreadRepliesClick)`), `[onError]` (Input callback), `[emptyStateView]`, `[errorStateView]`, `[loadingStateView]`, `[messageListStyle]`, `[reactionsConfiguration]`, `[messageInformationConfiguration]`.
219
+
220
+ > **Important — all `on*` props are `@Input()` callbacks, not `@Output()` events.** Use `[onThreadRepliesClick]="myFn"` (square brackets), never `(onThreadRepliesClick)="myFn($event)"` (round brackets). The same applies to `[onError]`.
221
+
222
+ > **Note:** `[hideReplyInThreadOption]`, `[hideReceipts]`, `[hideReactions]`, `[hideReplyOption]`, `[hideEditMessageOption]`, `[hideDeleteMessageOption]`, `[hideTranslateMessageOption]` do **not** exist in the Angular v4 UIKit. Use `[disableReactions]` to disable reactions. Message action options (edit, delete, translate, thread) are controlled via the `[options]` callback or `[templates]` — not individual hide inputs.
223
+
224
+ ### CometChatMessageComposer
225
+
226
+ Rich text input. Attachments, mentions, voice notes, sticker picker.
227
+
228
+ ```html
229
+ <cometchat-message-composer
230
+ [user]="selectedUser"
231
+ placeholderText="Type a message..."
232
+ [textFormatters]="textFormatters"
233
+ [attachmentOptions]="attachmentOptions"
234
+ [onSendButtonClick]="handleSend"
235
+ [onError]="handleError"
236
+ [auxilaryButtonView]="auxButtonTemplate"
237
+ ></cometchat-message-composer>
238
+ ```
239
+
240
+ Key inputs: `[user]` OR `[group]`, `[parentMessageId]` (for thread composer), `placeholderText`, `[textFormatters]`, `[attachmentOptions]`, `[auxilaryButtonView]` (**note spelling: one `i` — `auxilary` not `auxiliary`**), `[headerView]`, `[sendButtonView]`, `[onSendButtonClick]` (Input callback), `[onError]` (Input callback), `[onTextChange]` (Input callback), `[disableMentions]`, `[disableSoundForMessages]`, `[messageComposerStyle]`.
241
+
242
+ > **Important — all `on*` props are `@Input()` callbacks, not `@Output()` events.** Use `[onSendButtonClick]="myFn"` (square brackets), never `(onSendButtonClick)="myFn($event)"` (round brackets). The same applies to `[onError]` and `[onTextChange]`.
243
+
244
+ ---
245
+
246
+ ## 4. Calling (separate SDK)
247
+
248
+ Call components require `@cometchat/calls-sdk-javascript` to be installed. Do not import these if the calls SDK isn't in the project.
249
+
250
+ ### CometChatCallButtons
251
+
252
+ Voice + video call initiators. Drop into the message header's `[menu]` slot.
253
+
254
+ ```html
255
+ <cometchat-call-buttons
256
+ [user]="selectedUser"
257
+ [onVoiceCallClick]="handleVoiceCall"
258
+ [onVideoCallClick]="handleVideoCall"
259
+ ></cometchat-call-buttons>
260
+ ```
261
+
262
+ > **All `on*` props are `@Input()` callbacks.** Use `[onVoiceCallClick]="myFn"` (square brackets), never `(onVoiceCallClick)="myFn($event)"` (round brackets).
263
+
264
+ Key inputs: `[user]` OR `[group]`, `[onVoiceCallClick]` (Input callback), `[onVideoCallClick]` (Input callback), `[onError]` (Input callback), `[callButtonsStyle]`.
265
+
266
+ ### CometChatIncomingCall
267
+
268
+ Incoming call notification. Render at the app root so it's visible on any route.
269
+
270
+ ```html
271
+ <cometchat-incoming-call
272
+ [call]="incomingCall"
273
+ [onAccept]="handleAccept"
274
+ [onDecline]="handleDecline"
275
+ ></cometchat-incoming-call>
276
+ ```
277
+
278
+ > **All `on*` props are `@Input()` callbacks.** Use `[onAccept]="myFn"` (square brackets), never `(onAccept)="myFn($event)"` (round brackets).
279
+
280
+ Key inputs: `[call]`, `[onAccept]` (Input callback), `[onDecline]` (Input callback), `[onError]` (Input callback), `[incomingCallStyle]`, `[avatarStyle]`.
281
+
282
+ ### CometChatOutgoingCall
283
+
284
+ Ringing screen after initiating a call.
285
+
286
+ ```html
287
+ <cometchat-outgoing-call
288
+ [call]="outgoingCall"
289
+ [onCloseClicked]="handleClose"
290
+ ></cometchat-outgoing-call>
291
+ ```
292
+
293
+ > Input name is `[onCloseClicked]` (with `d` at the end), not `onCloseClick`. It is an `@Input()` callback — use square brackets.
294
+
295
+ Key inputs: `[call]`, `[onCloseClicked]` (Input callback), `[onError]` (Input callback), `[outgoingCallStyle]`, `[avatarStyle]`.
296
+
297
+ ### CometChatOngoingCall
298
+
299
+ In-call UI — tiles, controls, mute, end-call.
300
+
301
+ ```html
302
+ <cometchat-ongoing-call
303
+ [sessionID]="session.sessionId"
304
+ [onError]="handleError"
305
+ ></cometchat-ongoing-call>
306
+ ```
307
+
308
+ Key inputs: `[sessionID]`, `[onError]` (Input callback), `[ongoingCallStyle]`, `[callSettingsBuilder]`.
309
+
310
+ > **`(onCallEnded)` does not exist** on this component — there is no `@Output()` for call end. To detect when a call ends, subscribe to `CometChatCallEvents.ccCallEnded` from the event bus instead:
311
+ > ```typescript
312
+ > import { CometChatCallEvents } from "@cometchat/chat-uikit-angular";
313
+ > CometChatCallEvents.ccCallEnded.subscribe(() => {
314
+ > // call ended — navigate away or update state
315
+ > });
316
+ > ```
317
+
318
+ ### CometChatCallLogs
319
+
320
+ Scrollable call history.
321
+
322
+ ```html
323
+ <cometchat-call-logs
324
+ [onItemClick]="openCallDetails"
325
+ ></cometchat-call-logs>
326
+ ```
327
+
328
+ > **`[onItemClick]` is an `@Input()` callback** — use square brackets, not round brackets.
329
+
330
+ ---
331
+
332
+ ## 5. Search
333
+
334
+ The Angular v4 UIKit does **not** export a standalone `<cometchat-search>` Angular module. Search is built into the list components via the `[hideSearch]` input:
335
+
336
+ ```html
337
+ <!-- Built-in search bar on conversations list -->
338
+ <cometchat-conversations [hideSearch]="false"></cometchat-conversations>
339
+
340
+ <!-- Built-in search bar on users list -->
341
+ <cometchat-users [hideSearch]="false"></cometchat-users>
342
+
343
+ <!-- Built-in search bar on groups list -->
344
+ <cometchat-groups [hideSearch]="false"></cometchat-groups>
345
+ ```
346
+
347
+ > **Hard rule — never roll your own search.** Use `[hideSearch]="false"` on the list components. Do NOT build custom `<input>` search bars — they bypass the SDK's pagination and highlighting.
348
+
349
+ ---
350
+
351
+ ## 5b. Details, contacts, and group management
352
+
353
+ ### CometChatDetails
354
+
355
+ Unified details panel — handles both users and groups automatically. Shows profile, status, block/unblock, group members, leave group, and more in one component. **Prefer this over building custom detail panels.**
356
+
357
+ ```html
358
+ <cometchat-details
359
+ [user]="selectedUser"
360
+ [group]="selectedGroup"
361
+ style="height:100%;display:block;"
362
+ ></cometchat-details>
363
+ ```
364
+
365
+ Key inputs: `[user]` OR `[group]`, `[onClose]`.
366
+
367
+ ### CometChatContacts
368
+
369
+ User + group picker for starting new conversations. Renders a searchable list of users and groups. Use as a "New Chat" overlay.
370
+
371
+ ```html
372
+ <cometchat-contacts
373
+ [onItemClick]="handleContactClick"
374
+ [onClose]="closeContacts"
375
+ style="height:100%;display:block;"
376
+ ></cometchat-contacts>
377
+ ```
378
+
379
+ Key inputs: `[onItemClick]`, `[onClose]`.
380
+
381
+ ### CometChatAddMembers
382
+
383
+ Add members to an existing group.
384
+
385
+ ```html
386
+ <cometchat-add-members [group]="selectedGroup"></cometchat-add-members>
387
+ ```
388
+
389
+ ### CometChatBannedMembers
390
+
391
+ List and unban banned members of a group.
392
+
393
+ ```html
394
+ <cometchat-banned-members [group]="selectedGroup"></cometchat-banned-members>
395
+ ```
396
+
397
+ ### CometChatTransferOwnership
398
+
399
+ Transfer group ownership to another member.
400
+
401
+ ```html
402
+ <cometchat-transfer-ownership [group]="selectedGroup"></cometchat-transfer-ownership>
403
+ ```
404
+
405
+ ### CometChatCreateGroup
406
+
407
+ Dialog for creating a new group.
408
+
409
+ ```html
410
+ <cometchat-create-group></cometchat-create-group>
411
+ ```
412
+
413
+ > **Not in Angular v4:** `CometChatNewChat`, `CometChatBlockedUsers`, `CometChatSearchBar`, `CometChatThreadHeader` (standalone), `CometChatCompactMessageComposer` — these are React v6 UIKit only. Use `<cometchat-contacts>` for new chat, `<cometchat-details>` for block/unblock, and `<cometchat-threaded-messages>` for threads.
414
+
415
+ ---
416
+
417
+ ## 5c. Thread header
418
+
419
+ ### CometChatThreadHeader (via `<cometchat-threaded-messages>`)
420
+
421
+ The Angular UI Kit exposes threaded messages via the `<cometchat-threaded-messages>` composite component, which includes the thread header, scoped message list, and scoped composer in one tag.
422
+
423
+ ```html
424
+ <cometchat-threaded-messages
425
+ [parentMessage]="threadParentMessage"
426
+ [user]="selectedUser"
427
+ [group]="selectedGroup"
428
+ [onClose]="closeThread"
429
+ ></cometchat-threaded-messages>
430
+ ```
431
+
432
+ > **`[onClose]` is an `@Input()` callback** — use square brackets, not round brackets.
433
+
434
+ For fully manual stitching (separate list + composer with `[parentMessageId]`), see `cometchat-angular-placement` § threading pattern.
435
+
436
+ ---
437
+
438
+ ## 6. Atoms (primitives for custom composition)
439
+
440
+ Building blocks used inside `ng-template` slot overrides or custom components.
441
+
442
+ | Selector | Purpose |
443
+ |---|---|
444
+ | `<cometchat-avatar>` | Circular avatar. `[image]`, `[name]` (initials fallback), `[avatarStyle]` |
445
+ | `<cometchat-badge>` | Unread count badge. `[count]`, `[badgeStyle]` |
446
+ | `<cometchat-status-indicator>` | Online/offline dot. `[status]`, `[statusIndicatorStyle]` |
447
+ | `<cometchat-list-item>` | Standard row — leading + title/subtitle + trailing. `[listItemStyle]` |
448
+ | `<cometchat-date>` | Relative-time date pill. `[timestamp]`, `[pattern]`, `[dateStyle]` |
449
+ | `<cometchat-button>` | Icon button. `[iconURL]`, `[buttonStyle]`, `(click)` |
450
+ | `<cometchat-loader>` | Loading spinner. `[iconURL]`, `[loaderStyle]` |
451
+ | `<cometchat-confirm-dialog>` | Confirm/cancel dialog. `[title]`, `[messageText]`, `[onConfirm]`, `[onCancel]` |
452
+ | `<cometchat-emoji-keyboard>` | Full emoji picker. `[onEmojiClick]` |
453
+
454
+ > **Note:** Atom components (`cometchat-avatar`, `cometchat-status-indicator`, `cometchat-badge`) are LitElement web components — they are NOT Angular standalone modules. Do NOT import them in `@NgModule` imports. They are registered automatically via `CUSTOM_ELEMENTS_SCHEMA` and used directly in templates.
455
+
456
+ > **Not in public exports:** `<cometchat-reactions>` and `<cometchat-reaction-list>` are used internally by the message list. Do not instantiate them directly.
457
+
458
+ ---
459
+
460
+ ## 6b. Text formatters
461
+
462
+ These are not components — they are formatter classes that customize how text renders in message bubbles. Import from `@cometchat/uikit-shared` and pass via `[textFormatters]` on both `<cometchat-message-list>` and `<cometchat-message-composer>`.
463
+
464
+ | Class | Purpose |
465
+ |---|---|
466
+ | `CometChatTextFormatter` | Abstract base class — extend to build custom formatters |
467
+ | `CometChatMentionsFormatter` | Renders @mentions with styling + suggestion popover |
468
+ | `CometChatUrlsFormatter` | Auto-links URLs. Requires regex patterns in constructor |
469
+
470
+ ```typescript
471
+ import {
472
+ CometChatMentionsFormatter,
473
+ CometChatUrlsFormatter,
474
+ } from "@cometchat/uikit-shared";
475
+
476
+ textFormatters = [
477
+ new CometChatMentionsFormatter(),
478
+ new CometChatUrlsFormatter([
479
+ /https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&/=]*)/gi,
480
+ ]),
481
+ ];
482
+ ```
483
+
484
+ **Always pass the same array to both list and composer** — if they differ, sent and received messages render differently.
485
+
486
+ > **Note:** `CometChatMarkdownFormatter`, `CometChatRichTextFormatter`, and `CometChatTextHighlightFormatter` are React v6 UIKit only — they do not exist in the Angular v4 UIKit. To add custom text rendering patterns in Angular, extend `CometChatTextFormatter` directly (see `cometchat-angular-customization` § Tier 3a).
487
+
488
+ ---
489
+
490
+ ## 7. Infrastructure (static classes + event bus)
491
+
492
+ ### CometChatUIKit
493
+
494
+ Static class — init + login + logout.
495
+
496
+ | Method | Purpose |
497
+ |---|---|
498
+ | `CometChatUIKit.init(settings)` | Initialize. Must resolve before any component renders. |
499
+ | `CometChatUIKit.login({ uid })` | Log in (dev mode). Takes an object. |
500
+ | `CometChatUIKit.login({ authToken })` | Log in with a server-minted token (production). |
501
+ | `CometChatUIKit.getLoggedinUser()` | Returns current `CometChat.User` or `null` (Promise). |
502
+ | `CometChatUIKit.logout()` | Log out + clear session. |
503
+
504
+ ### CometChatConversationEvents / CometChatMessageEvents / CometChatGroupEvents / CometChatUserEvents
505
+
506
+ Angular event bus — RxJS `Subject`-based. Subscribe in `ngOnInit`, unsubscribe in `ngOnDestroy`.
507
+
508
+ ```typescript
509
+ import { Subscription } from "rxjs";
510
+ import { CometChatConversationEvents } from "@cometchat/chat-uikit-angular";
511
+
512
+ export class MyComponent implements OnInit, OnDestroy {
513
+ private ccConversationDeleted!: Subscription;
514
+
515
+ ngOnInit(): void {
516
+ this.ccConversationDeleted =
517
+ CometChatConversationEvents.ccConversationDeleted.subscribe(
518
+ (conversation: CometChat.Conversation) => {
519
+ // handle deletion
520
+ }
521
+ );
522
+ }
523
+
524
+ ngOnDestroy(): void {
525
+ this.ccConversationDeleted?.unsubscribe();
526
+ }
527
+ }
528
+ ```
529
+
530
+ Available event streams:
531
+ - `CometChatConversationEvents`: `ccConversationDeleted`, `ccUpdateConversation`
532
+ - `CometChatMessageEvents`: `ccMessageSent`, `ccMessageEdited`, `ccMessageDeleted`, `ccMessageRead`, `ccLiveReaction`
533
+ - `CometChatGroupEvents`: `ccGroupCreated`, `ccGroupDeleted`, `ccGroupLeft`, `ccGroupMemberScopeChanged`, `ccGroupMemberKicked`, `ccGroupMemberBanned`, `ccGroupMemberJoined`, `ccGroupMemberAdded`, `ccOwnershipChanged`
534
+ - `CometChatUserEvents`: `ccUserBlocked`, `ccUserUnblocked`
535
+
536
+ **Always unsubscribe in `ngOnDestroy`.** Angular components can be destroyed and re-created on navigation; leaked subscriptions cause duplicate event handling.
537
+
538
+ ### CometChatThemeService
539
+
540
+ Injected service for palette control. See `cometchat-angular-core` § 6 and `cometchat-angular-theming`.
541
+
542
+ ---
543
+
544
+ ## 8. Style objects
545
+
546
+ Each component accepts a typed style object. Import from `@cometchat/uikit-shared` or `@cometchat/chat-uikit-angular`.
547
+
548
+ ```typescript
549
+ import {
550
+ ConversationsStyle,
551
+ MessagesStyle,
552
+ MessageListStyle,
553
+ MessageComposerStyle,
554
+ MessageHeaderStyle,
555
+ UsersStyle,
556
+ GroupsStyle,
557
+ GroupMembersStyle,
558
+ AvatarStyle,
559
+ BadgeStyle,
560
+ StatusIndicatorStyle,
561
+ ListItemStyle,
562
+ DateStyle,
563
+ BackdropStyle,
564
+ ConfirmDialogStyle,
565
+ LoaderStyle,
566
+ CallLogsStyle,
567
+ } from "@cometchat/uikit-shared";
568
+ // or from "@cometchat/chat-uikit-angular" — both re-export the same types
569
+ ```
570
+
571
+ Common style properties (all optional):
572
+
573
+ ```typescript
574
+ const conversationsStyle = new ConversationsStyle({
575
+ width: "100%",
576
+ height: "100%",
577
+ border: "1px solid #e8e8e8",
578
+ borderRadius: "8px",
579
+ background: "#ffffff",
580
+ titleTextFont: "600 18px Inter",
581
+ titleTextColor: "#141414",
582
+ lastMessageTextColor: "#727272",
583
+ onlineStatusColor: "#09C26F",
584
+ });
585
+ ```
586
+
587
+ ---
588
+
589
+ ## 9. ng-template slot views
590
+
591
+ Custom views are passed as Angular `TemplateRef` via `ng-template`. The template receives the entity as an implicit context variable.
592
+
593
+ ```html
594
+ <!-- In the component template -->
595
+ <cometchat-conversations
596
+ [listItemView]="customListItem"
597
+ ></cometchat-conversations>
598
+
599
+ <ng-template #customListItem let-conversation>
600
+ <div class="custom-item">
601
+ <span>{{ conversation.getConversationWith().getName() }}</span>
602
+ </div>
603
+ </ng-template>
604
+ ```
605
+
606
+ ```typescript
607
+ // In the component class
608
+ import { ViewChild, TemplateRef } from "@angular/core";
609
+
610
+ @Component({ /* ... */ })
611
+ export class AppComponent {
612
+ @ViewChild("customListItem") customListItem!: TemplateRef<any>;
613
+ }
614
+ ```
615
+
616
+ Common slot inputs per component:
617
+
618
+ | Component | Slot inputs |
619
+ |---|---|
620
+ | `<cometchat-conversations>` | `[listItemView]`, `[menu]`, `[loadingStateView]`, `[errorStateView]`, `[emptyStateView]` |
621
+ | `<cometchat-message-header>` | `[menu]`, `[subtitleView]` |
622
+ | `<cometchat-message-list>` | `[emptyStateView]`, `[errorStateView]`, `[loadingStateView]` |
623
+ | `<cometchat-message-composer>` | `[auxilaryButtonView]`, `[headerView]`, `[sendButtonView]` |
624
+ | `<cometchat-users>` | `[listItemView]`, `[menu]`, `[loadingStateView]`, `[errorStateView]`, `[emptyStateView]` |
625
+ | `<cometchat-groups>` | `[listItemView]`, `[menu]`, `[loadingStateView]`, `[errorStateView]`, `[emptyStateView]` |
626
+
627
+ ---
628
+
629
+ ## 10. Request builders
630
+
631
+ Pass request builders to filter what data loads. Import builder classes from `@cometchat/chat-sdk-javascript`.
632
+
633
+ ```typescript
634
+ import { CometChat } from "@cometchat/chat-sdk-javascript";
635
+
636
+ // Filter conversations
637
+ conversationsRequestBuilder = new CometChat.ConversationsRequestBuilder()
638
+ .setLimit(20)
639
+ .setConversationType(CometChat.RECEIVER_TYPE.USER);
640
+
641
+ // Filter users
642
+ usersRequestBuilder = new CometChat.UsersRequestBuilder()
643
+ .setLimit(30)
644
+ .setStatus("online");
645
+
646
+ // Filter messages
647
+ messagesRequestBuilder = new CometChat.MessagesRequestBuilder()
648
+ .setUID(this.selectedUser.getUid())
649
+ .setLimit(30)
650
+ .setCategories(["message"]);
651
+ ```
652
+
653
+ ---
654
+
655
+ ## 11. Threading — wiring `[onThreadRepliesClick]`
656
+
657
+ The Angular v4 UIKit does **not** have a `[hideReplyInThreadOption]` input. The "Reply in Thread" option in the message action menu is always present when threads are supported by the kit.
658
+
659
+ To wire a thread panel, pass `[onThreadRepliesClick]` as an **Input callback** (square brackets) on `<cometchat-message-list>`:
660
+
661
+ ```html
662
+ <cometchat-message-list
663
+ [user]="selectedUser"
664
+ [onThreadRepliesClick]="openThread"
665
+ ></cometchat-message-list>
666
+ ```
667
+
668
+ ```typescript
669
+ // The callback receives { message, view } — extract the message:
670
+ openThread = (payload: any): void => {
671
+ const msg = payload?.message ?? payload;
672
+ this.threadMessage = msg;
673
+ this.showThreadPanel = true;
674
+ };
675
+ ```
676
+
677
+ Then render the thread panel using `<cometchat-threaded-messages>` or a manual scoped list + composer with `[parentMessageId]`.
678
+
679
+ ---
680
+
681
+ ## 12. Common prop-finding recipe
682
+
683
+ When a user's request isn't obviously covered, check in this order:
684
+
685
+ 1. **Named component in this catalog fits?** ("show call history" → `<cometchat-call-logs>`)
686
+ 2. **A `[hide*]` / visibility input?** ("disable reactions" → `[disableReactions]="true"`, "hide receipt" → `[hideReceipt]="true"`)
687
+ 3. **A `[*View]` / `[*Template]` slot?** ("customize the header title" → `[subtitleView]="myTemplate"`)
688
+ 4. **A `[*RequestBuilder]`?** ("filter conversations" → `[conversationsRequestBuilder]`)
689
+ 5. **`[textFormatters]` + `[templates]`** for message-rendering customization
690
+ 6. **`CometChatConversationEvents` / `CometChatMessageEvents`** for cross-component communication
691
+ 7. **Only then** escalate to `cometchat-angular-customization` § Tier 4 (DataSource decorators)
692
+
693
+ ---
694
+
695
+ ## Skill routing reference
696
+
697
+ | Skill | When to route |
698
+ |---|---|
699
+ | `cometchat-angular-core` | Always read first — init, login, module setup |
700
+ | `cometchat-angular-components` | This skill — any time you write `<cometchat-*>` HTML |
701
+ | `cometchat-angular-placement` | Deciding WHERE components go (route / sidebar / modal / tab) |
702
+ | `cometchat-angular-customization` | `[textFormatters]`, `[templates]`, custom slot views, event bus |
703
+ | `cometchat-angular-features` | Adding calls, extensions, AI |
704
+ | `cometchat-angular-theming` | `[*Style]` not enough — need app-wide color / typography changes |
705
+ | `cometchat-angular-production` | `login({ authToken })` setup |
706
+ | `cometchat-angular-troubleshooting` | `<cometchat-*>` renders nothing or throws at runtime |