@cometchat/skills 4.4.1 → 5.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 (489) hide show
  1. package/.claude-plugin/marketplace.json +55 -0
  2. package/.claude-plugin/plugin.json +14 -0
  3. package/CHANGELOG.md +36 -0
  4. package/README.md +41 -163
  5. package/RULES.md +114 -0
  6. package/bin/cometchat-skills.mjs +1180 -0
  7. package/bin/legacy-skills.json +95 -0
  8. package/catalogs/android-v6.json +1646 -0
  9. package/catalogs/flutter-v6.json +651 -0
  10. package/catalogs/ios-v5.json +1383 -0
  11. package/catalogs/rn-calls-v5.json +134 -0
  12. package/catalogs/rn-calls-v5.symbols.txt +58 -0
  13. package/catalogs/rn-sdk-v4.json +672 -0
  14. package/catalogs/rn-v5.json +449 -0
  15. package/catalogs/rn-v5.symbols.txt +216 -0
  16. package/catalogs/sdk-android-v5.json +514 -0
  17. package/contracts.android-calls-v5.json +122 -0
  18. package/contracts.android-v6.json +135 -0
  19. package/contracts.angular-v5.json +694 -0
  20. package/contracts.flutter-calls-v5.json +77 -0
  21. package/contracts.flutter-v6.json +126 -0
  22. package/contracts.ios-calls-v5.json +67 -0
  23. package/contracts.ios-v5.json +436 -0
  24. package/contracts.json +82 -0
  25. package/contracts.rn-calls-v5.json +77 -0
  26. package/contracts.rn-v5.json +727 -0
  27. package/contracts.sdk-android-v5.json +15 -0
  28. package/contracts.web-calls-v5.json +45 -0
  29. package/features.android-calls-v5.json +246 -0
  30. package/features.android-v6.json +65 -0
  31. package/features.angular-v5.json +521 -0
  32. package/features.flutter-calls-v5.json +286 -0
  33. package/features.flutter-v6.json +484 -0
  34. package/features.ios-calls-v5.json +236 -0
  35. package/features.ios-v5.json +573 -0
  36. package/features.json +61 -0
  37. package/features.rn-calls-v5.json +187 -0
  38. package/features.rn-v5.json +614 -0
  39. package/features.sdk-android-v5.json +40 -0
  40. package/features.sdk-jsv4.json +24 -0
  41. package/features.web-calls-v5.json +108 -0
  42. package/package.json +151 -74
  43. package/peers.yaml +312 -0
  44. package/registry/README.md +31 -0
  45. package/registry/android-calls-v5.json +54 -0
  46. package/registry/android-v6.json +137 -0
  47. package/registry/angular-v5.json +114 -0
  48. package/registry/flutter-calls-v5.json +54 -0
  49. package/registry/flutter-v6.json +119 -0
  50. package/registry/ios-calls-v5.json +59 -0
  51. package/registry/ios-v5.json +97 -0
  52. package/registry/rn-calls-v5.json +59 -0
  53. package/registry/rn-v5.json +129 -0
  54. package/registry/sdk-android-v5.json +53 -0
  55. package/registry/sdk-jsv4.json +53 -0
  56. package/registry/web-calls-v5.json +54 -0
  57. package/registry/web-v7.json +99 -0
  58. package/skills/cometchat/SKILL.md +42 -2096
  59. package/skills/cometchat-android-v5-calls-sdk/SKILL.md +206 -0
  60. package/skills/cometchat-android-v5-calls-sdk/references/build-truth.md +63 -0
  61. package/skills/cometchat-android-v5-calls-sdk/references/docs-map.md +119 -0
  62. package/skills/cometchat-android-v5-calls-sdk/references/method-map.md +53 -0
  63. package/skills/cometchat-android-v5-calls-sdk/references/pitfalls.md +72 -0
  64. package/skills/cometchat-android-v5-calls-sdk/references/ringing.md +92 -0
  65. package/skills/cometchat-android-v5-calls-sdk/references/user-switch.md +90 -0
  66. package/skills/cometchat-android-v5-sdk/SKILL.md +127 -0
  67. package/skills/cometchat-android-v5-sdk/references/app-surface.md +88 -0
  68. package/skills/cometchat-android-v5-sdk/references/docs-map.md +91 -0
  69. package/skills/cometchat-android-v6-builder-settings/SKILL.md +51 -137
  70. package/skills/cometchat-android-v6-calls/SKILL.md +128 -411
  71. package/skills/cometchat-android-v6-compose-components/SKILL.md +84 -194
  72. package/skills/cometchat-android-v6-compose-customization/SKILL.md +66 -411
  73. package/skills/cometchat-android-v6-compose-placement/SKILL.md +154 -237
  74. package/skills/cometchat-android-v6-core/SKILL.md +236 -672
  75. package/skills/cometchat-android-v6-core/references/anti-patterns.md +31 -0
  76. package/skills/cometchat-android-v6-core/references/component-props.md +168 -0
  77. package/skills/cometchat-android-v6-core/references/docs-map.md +153 -0
  78. package/skills/cometchat-android-v6-core/references/layout.md +112 -0
  79. package/skills/cometchat-android-v6-core/references/lifecycle.md +75 -0
  80. package/skills/cometchat-android-v6-core/references/setup-credentials.md +105 -0
  81. package/skills/cometchat-android-v6-core/references/troubleshooting.md +36 -0
  82. package/skills/cometchat-android-v6-events/SKILL.md +46 -184
  83. package/skills/cometchat-android-v6-extensions/SKILL.md +39 -179
  84. package/skills/cometchat-android-v6-features/SKILL.md +74 -143
  85. package/skills/cometchat-android-v6-kotlin-components/SKILL.md +75 -193
  86. package/skills/cometchat-android-v6-kotlin-customization/SKILL.md +67 -419
  87. package/skills/cometchat-android-v6-kotlin-placement/SKILL.md +77 -223
  88. package/skills/cometchat-android-v6-migration/SKILL.md +67 -378
  89. package/skills/cometchat-android-v6-production/SKILL.md +40 -179
  90. package/skills/cometchat-android-v6-push/SKILL.md +39 -289
  91. package/skills/cometchat-android-v6-testing/SKILL.md +50 -265
  92. package/skills/cometchat-android-v6-troubleshooting/SKILL.md +70 -254
  93. package/skills/cometchat-angular-v5-calls/SKILL.md +193 -0
  94. package/skills/cometchat-angular-v5-components/SKILL.md +131 -0
  95. package/skills/cometchat-angular-v5-components/references/catalog.md +111 -0
  96. package/skills/cometchat-angular-v5-components/references/host-composed.md +46 -0
  97. package/skills/cometchat-angular-v5-core/SKILL.md +300 -0
  98. package/skills/cometchat-angular-v5-core/references/anti-patterns.md +49 -0
  99. package/skills/cometchat-angular-v5-core/references/component-props.md +55 -0
  100. package/skills/cometchat-angular-v5-core/references/dependencies.md +66 -0
  101. package/skills/cometchat-angular-v5-core/references/docs-map.md +132 -0
  102. package/skills/cometchat-angular-v5-core/references/layout.md +64 -0
  103. package/skills/cometchat-angular-v5-core/references/lifecycle.md +202 -0
  104. package/skills/cometchat-angular-v5-core/references/setup-credentials.md +137 -0
  105. package/skills/cometchat-angular-v5-core/references/theming.md +70 -0
  106. package/skills/cometchat-angular-v5-core/references/troubleshooting.md +27 -0
  107. package/skills/cometchat-angular-v5-customization/SKILL.md +94 -0
  108. package/skills/cometchat-angular-v5-features/SKILL.md +107 -0
  109. package/skills/cometchat-angular-v5-features/references/custom-messages.md +133 -0
  110. package/skills/cometchat-angular-v5-features/references/formatters.md +28 -0
  111. package/skills/cometchat-angular-v5-features/references/host-composed-extensions.md +85 -0
  112. package/skills/cometchat-angular-v5-migration/SKILL.md +40 -0
  113. package/skills/cometchat-angular-v5-migration/references/migration-guide.md +165 -0
  114. package/skills/cometchat-angular-v5-patterns/SKILL.md +107 -0
  115. package/skills/cometchat-angular-v5-placement/SKILL.md +133 -0
  116. package/skills/cometchat-angular-v5-placement/references/combined-app.md +174 -0
  117. package/skills/cometchat-angular-v5-placement/references/core-surface.md +199 -0
  118. package/skills/cometchat-angular-v5-production/SKILL.md +101 -0
  119. package/skills/cometchat-angular-v5-push/SKILL.md +61 -0
  120. package/skills/cometchat-angular-v5-testing/SKILL.md +112 -0
  121. package/skills/cometchat-angular-v5-troubleshooting/SKILL.md +96 -0
  122. package/skills/cometchat-flutter-v5-sdk/SKILL.md +188 -0
  123. package/skills/cometchat-flutter-v5-sdk/references/doc-corrections.md +55 -0
  124. package/skills/cometchat-flutter-v5-sdk/references/docs-map.md +211 -0
  125. package/skills/cometchat-flutter-v5-sdk/references/platform-notes.md +48 -0
  126. package/skills/cometchat-flutter-v5-sdk/references/transcription.md +87 -0
  127. package/skills/cometchat-flutter-v6-calls/SKILL.md +75 -387
  128. package/skills/cometchat-flutter-v6-components/SKILL.md +88 -361
  129. package/skills/cometchat-flutter-v6-core/SKILL.md +154 -593
  130. package/skills/cometchat-flutter-v6-core/references/anti-patterns.md +55 -0
  131. package/skills/cometchat-flutter-v6-core/references/docs-map.md +143 -0
  132. package/skills/cometchat-flutter-v6-core/references/layout.md +45 -0
  133. package/skills/cometchat-flutter-v6-core/references/lifecycle.md +87 -0
  134. package/skills/cometchat-flutter-v6-core/references/setup-credentials.md +84 -0
  135. package/skills/cometchat-flutter-v6-core/references/troubleshooting.md +26 -0
  136. package/skills/cometchat-flutter-v6-customization/SKILL.md +70 -712
  137. package/skills/cometchat-flutter-v6-events/SKILL.md +79 -174
  138. package/skills/cometchat-flutter-v6-features/SKILL.md +55 -394
  139. package/skills/cometchat-flutter-v6-migration/SKILL.md +68 -367
  140. package/skills/cometchat-flutter-v6-migration/references/migration-guide.md +131 -0
  141. package/skills/cometchat-flutter-v6-patterns/SKILL.md +61 -0
  142. package/skills/cometchat-flutter-v6-placement/SKILL.md +94 -381
  143. package/skills/cometchat-flutter-v6-production/SKILL.md +58 -615
  144. package/skills/cometchat-flutter-v6-push/SKILL.md +46 -455
  145. package/skills/cometchat-flutter-v6-testing/SKILL.md +68 -299
  146. package/skills/cometchat-flutter-v6-troubleshooting/SKILL.md +54 -878
  147. package/skills/cometchat-ios-calls/SKILL.md +105 -511
  148. package/skills/cometchat-ios-components/SKILL.md +44 -834
  149. package/skills/cometchat-ios-core/SKILL.md +181 -1068
  150. package/skills/cometchat-ios-core/references/anti-patterns.md +80 -0
  151. package/skills/cometchat-ios-core/references/docs-map.md +123 -0
  152. package/skills/cometchat-ios-core/references/install.md +23 -0
  153. package/skills/cometchat-ios-core/references/layout.md +186 -0
  154. package/skills/cometchat-ios-core/references/setup-credentials.md +197 -0
  155. package/skills/cometchat-ios-core/references/swiftui.md +91 -0
  156. package/skills/cometchat-ios-core/references/troubleshooting.md +100 -0
  157. package/skills/cometchat-ios-customization/SKILL.md +33 -968
  158. package/skills/cometchat-ios-features/SKILL.md +29 -738
  159. package/skills/cometchat-ios-migration/SKILL.md +39 -0
  160. package/skills/cometchat-ios-placement/SKILL.md +51 -729
  161. package/skills/cometchat-ios-push/SKILL.md +24 -602
  162. package/skills/cometchat-ios-v5-sdk/SKILL.md +161 -0
  163. package/skills/cometchat-ios-v5-sdk/references/docs-map.md +326 -0
  164. package/skills/cometchat-js-v5-sdk/SKILL.md +95 -0
  165. package/skills/cometchat-js-v5-sdk/references/docs-map.md +114 -0
  166. package/skills/cometchat-onboarding/SKILL.md +89 -0
  167. package/skills/cometchat-onboarding/references/archetypes.md +51 -0
  168. package/skills/cometchat-onboarding/references/calling-first.md +77 -0
  169. package/skills/cometchat-onboarding/references/not-in-this-pack.md +8 -0
  170. package/skills/cometchat-onboarding/references/plan-artifact.md +133 -0
  171. package/skills/cometchat-onboarding/references/platforms.md +90 -0
  172. package/skills/cometchat-react-native-bare-patterns/SKILL.md +120 -0
  173. package/skills/cometchat-react-native-calls/SKILL.md +200 -0
  174. package/skills/cometchat-react-native-components/SKILL.md +142 -0
  175. package/skills/cometchat-react-native-core/SKILL.md +313 -0
  176. package/skills/cometchat-react-native-core/references/anti-patterns.md +79 -0
  177. package/skills/cometchat-react-native-core/references/component-props.md +105 -0
  178. package/skills/cometchat-react-native-core/references/dependencies.md +62 -0
  179. package/skills/cometchat-react-native-core/references/docs-map.md +126 -0
  180. package/skills/cometchat-react-native-core/references/layout.md +61 -0
  181. package/skills/cometchat-react-native-core/references/lifecycle.md +64 -0
  182. package/skills/cometchat-react-native-core/references/setup-credentials.md +39 -0
  183. package/skills/cometchat-react-native-customization/SKILL.md +198 -0
  184. package/skills/cometchat-react-native-expo-patterns/SKILL.md +116 -0
  185. package/skills/cometchat-react-native-features/SKILL.md +122 -0
  186. package/skills/cometchat-react-native-migration/SKILL.md +103 -0
  187. package/skills/cometchat-react-native-placement/SKILL.md +158 -0
  188. package/skills/cometchat-react-native-production/SKILL.md +78 -0
  189. package/skills/cometchat-react-native-push/SKILL.md +88 -0
  190. package/skills/cometchat-react-native-sdk/SKILL.md +126 -0
  191. package/skills/cometchat-react-native-sdk/references/method-map.md +239 -0
  192. package/skills/cometchat-react-native-sdk/references/page-map.md +96 -0
  193. package/skills/cometchat-react-native-testing/SKILL.md +94 -0
  194. package/skills/cometchat-react-native-troubleshooting/SKILL.md +116 -0
  195. package/skills/cometchat-react-native-v5-sdk/SKILL.md +150 -0
  196. package/skills/cometchat-react-native-v5-sdk/references/docs-map.md +127 -0
  197. package/skills/cometchat-react-native-v5-sdk/references/ringing-voip.md +369 -0
  198. package/skills/cometchat-react-v7-calls/SKILL.md +75 -0
  199. package/skills/cometchat-react-v7-components/SKILL.md +72 -0
  200. package/skills/cometchat-react-v7-core/SKILL.md +101 -0
  201. package/skills/cometchat-react-v7-core/references/anti-patterns.md +19 -0
  202. package/skills/cometchat-react-v7-core/references/component-props.md +82 -0
  203. package/skills/cometchat-react-v7-core/references/dependencies.md +23 -0
  204. package/skills/cometchat-react-v7-core/references/docs-map.md +117 -0
  205. package/skills/cometchat-react-v7-core/references/i18n-rtl-a11y.md +22 -0
  206. package/skills/cometchat-react-v7-core/references/layout.md +158 -0
  207. package/skills/cometchat-react-v7-core/references/lifecycle.md +74 -0
  208. package/skills/cometchat-react-v7-core/references/setup-credentials.md +58 -0
  209. package/skills/cometchat-react-v7-core/references/ssr.md +11 -0
  210. package/skills/cometchat-react-v7-core/references/theming.md +52 -0
  211. package/skills/cometchat-react-v7-core/references/troubleshooting.md +28 -0
  212. package/skills/cometchat-react-v7-customization/SKILL.md +84 -0
  213. package/skills/cometchat-react-v7-features/SKILL.md +92 -0
  214. package/skills/cometchat-react-v7-migration/SKILL.md +39 -0
  215. package/skills/cometchat-react-v7-migration/references/migration-guide.md +119 -0
  216. package/skills/cometchat-react-v7-patterns/SKILL.md +43 -0
  217. package/skills/cometchat-react-v7-placement/SKILL.md +106 -0
  218. package/skills/cometchat-react-v7-placement/references/recipes.md +354 -0
  219. package/skills/cometchat-react-v7-push/SKILL.md +53 -0
  220. package/test-suite/README.md +70 -0
  221. package/test-suite/catalogs/android-calls-v5.json +830 -0
  222. package/test-suite/catalogs/android-calls-v5.symbols.txt +499 -0
  223. package/test-suite/catalogs/android-v6.json +1646 -0
  224. package/test-suite/catalogs/android-v6.symbols.txt +298 -0
  225. package/test-suite/catalogs/angular-v5.json +7587 -0
  226. package/test-suite/catalogs/flutter-calls-v5.json +196 -0
  227. package/test-suite/catalogs/flutter-calls-v5.symbols.txt +59 -0
  228. package/test-suite/catalogs/flutter-v6.json +651 -0
  229. package/test-suite/catalogs/ios-calls-v5.json +158 -0
  230. package/test-suite/catalogs/ios-calls-v5.symbols.txt +70 -0
  231. package/test-suite/catalogs/ios-v5.json +1383 -0
  232. package/test-suite/catalogs/ios-v5.symbols.txt +699 -0
  233. package/test-suite/catalogs/rn-calls-v5.json +134 -0
  234. package/test-suite/catalogs/rn-sdk-v4.json +672 -0
  235. package/test-suite/catalogs/rn-v5.json +449 -0
  236. package/test-suite/catalogs/sdk-android-v5.json +514 -0
  237. package/test-suite/catalogs/sdk-android-v5.symbols.txt +254 -0
  238. package/test-suite/catalogs/sdk-jsv4.json +800 -0
  239. package/test-suite/catalogs/web-calls-v5.json +195 -0
  240. package/test-suite/catalogs/web-v7.json +1243 -0
  241. package/test-suite/scripts/build-registry.mjs +113 -0
  242. package/test-suite/scripts/catalog-refresh-dart.mjs +151 -0
  243. package/test-suite/scripts/catalog-refresh.mjs +100 -0
  244. package/test-suite/scripts/lint-skills.mjs +909 -0
  245. package/test-suite/scripts/measure-tokens.mjs +169 -0
  246. package/test-suite/scripts/typecheck-fences-dart.mjs +437 -0
  247. package/test-suite/scripts/typecheck-fences-kotlin.mjs +269 -0
  248. package/test-suite/scripts/typecheck-fences.mjs +206 -0
  249. package/test-suite/scripts/verify-catalog.mjs +242 -0
  250. package/test-suite/scripts/verify-contract-fences.mjs +94 -0
  251. package/test-suite/scripts/verify-detection.mjs +178 -0
  252. package/test-suite/scripts/verify-docs-base.mjs +91 -0
  253. package/test-suite/scripts/verify-family-agnostic.mjs +130 -0
  254. package/test-suite/scripts/verify-golden-path.mjs +138 -0
  255. package/test-suite/scripts/verify-oracle-components.mjs +133 -0
  256. package/test-suite/scripts/verify-template-bindings.mjs +148 -0
  257. package/test-suite/typecheck/angular-v5/package.json +21 -0
  258. package/test-suite/typecheck/angular-v5/tsconfig.json +21 -0
  259. package/test-suite/typecheck/flutter-v6/analysis_options.yaml +25 -0
  260. package/test-suite/typecheck/flutter-v6/pubspec.yaml +21 -0
  261. package/test-suite/typecheck/web-v7/package.json +18 -0
  262. package/test-suite/typecheck/web-v7/tsconfig.json +19 -0
  263. package/bin/install.js +0 -1003
  264. package/skills/.claude-plugin/marketplace.json +0 -86
  265. package/skills/cometchat/references/asking-questions.md +0 -48
  266. package/skills/cometchat-a11y/SKILL.md +0 -477
  267. package/skills/cometchat-android-v5/SKILL.md +0 -121
  268. package/skills/cometchat-android-v5-calls/SKILL.md +0 -427
  269. package/skills/cometchat-android-v5-calls/references/README.md +0 -53
  270. package/skills/cometchat-android-v5-calls/references/add-calls-to-existing-chat.md +0 -197
  271. package/skills/cometchat-android-v5-calls/references/audio-controls.md +0 -91
  272. package/skills/cometchat-android-v5-calls/references/background-handling.md +0 -168
  273. package/skills/cometchat-android-v5-calls/references/call-layouts.md +0 -131
  274. package/skills/cometchat-android-v5-calls/references/call-logs.md +0 -113
  275. package/skills/cometchat-android-v5-calls/references/call-session.md +0 -274
  276. package/skills/cometchat-android-v5-calls/references/custom-ui.md +0 -150
  277. package/skills/cometchat-android-v5-calls/references/event-listeners.md +0 -123
  278. package/skills/cometchat-android-v5-calls/references/group-calls.md +0 -205
  279. package/skills/cometchat-android-v5-calls/references/idle-timeout.md +0 -117
  280. package/skills/cometchat-android-v5-calls/references/in-call-chat.md +0 -134
  281. package/skills/cometchat-android-v5-calls/references/join-session.md +0 -120
  282. package/skills/cometchat-android-v5-calls/references/migration-v4-to-v5.md +0 -222
  283. package/skills/cometchat-android-v5-calls/references/participant-management.md +0 -110
  284. package/skills/cometchat-android-v5-calls/references/picture-in-picture.md +0 -106
  285. package/skills/cometchat-android-v5-calls/references/raise-hand.md +0 -248
  286. package/skills/cometchat-android-v5-calls/references/recording.md +0 -101
  287. package/skills/cometchat-android-v5-calls/references/ringing-integration.md +0 -152
  288. package/skills/cometchat-android-v5-calls/references/screen-sharing.md +0 -78
  289. package/skills/cometchat-android-v5-calls/references/server-fcm-voip.md +0 -215
  290. package/skills/cometchat-android-v5-calls/references/session-settings.md +0 -121
  291. package/skills/cometchat-android-v5-calls/references/setup.md +0 -137
  292. package/skills/cometchat-android-v5-calls/references/share-invite.md +0 -156
  293. package/skills/cometchat-android-v5-calls/references/video-controls.md +0 -87
  294. package/skills/cometchat-android-v5-calls/references/voip-calling.md +0 -526
  295. package/skills/cometchat-android-v5-components/SKILL.md +0 -431
  296. package/skills/cometchat-android-v5-core/SKILL.md +0 -486
  297. package/skills/cometchat-android-v5-customization/SKILL.md +0 -469
  298. package/skills/cometchat-android-v5-extensions/SKILL.md +0 -127
  299. package/skills/cometchat-android-v5-features/SKILL.md +0 -131
  300. package/skills/cometchat-android-v5-placement/SKILL.md +0 -277
  301. package/skills/cometchat-android-v5-production/SKILL.md +0 -95
  302. package/skills/cometchat-android-v5-push/SKILL.md +0 -619
  303. package/skills/cometchat-android-v5-testing/SKILL.md +0 -188
  304. package/skills/cometchat-android-v5-theming/SKILL.md +0 -167
  305. package/skills/cometchat-android-v5-troubleshooting/SKILL.md +0 -74
  306. package/skills/cometchat-android-v6/SKILL.md +0 -108
  307. package/skills/cometchat-android-v6-calls/references/add-calls-to-existing-chat.md +0 -97
  308. package/skills/cometchat-android-v6-calls/references/advanced-features.md +0 -87
  309. package/skills/cometchat-android-v6-calls/references/call-layouts.md +0 -100
  310. package/skills/cometchat-android-v6-calls/references/call-session.md +0 -163
  311. package/skills/cometchat-android-v6-calls/references/device-management.md +0 -172
  312. package/skills/cometchat-android-v6-calls/references/group-calls.md +0 -191
  313. package/skills/cometchat-android-v6-calls/references/idle-timeout.md +0 -110
  314. package/skills/cometchat-android-v6-calls/references/in-call-chat.md +0 -141
  315. package/skills/cometchat-android-v6-calls/references/raise-hand.md +0 -188
  316. package/skills/cometchat-android-v6-calls/references/ringing-integration.md +0 -176
  317. package/skills/cometchat-android-v6-calls/references/server-fcm-voip.md +0 -127
  318. package/skills/cometchat-android-v6-calls/references/share-invite.md +0 -105
  319. package/skills/cometchat-android-v6-compose-theming/SKILL.md +0 -250
  320. package/skills/cometchat-android-v6-kotlin-theming/SKILL.md +0 -233
  321. package/skills/cometchat-angular-calls/SKILL.md +0 -378
  322. package/skills/cometchat-angular-calls/references/add-calls-to-existing-chat.md +0 -96
  323. package/skills/cometchat-angular-calls/references/call-layouts.md +0 -123
  324. package/skills/cometchat-angular-calls/references/call-session.md +0 -167
  325. package/skills/cometchat-angular-calls/references/custom-ui.md +0 -239
  326. package/skills/cometchat-angular-calls/references/device-management.md +0 -154
  327. package/skills/cometchat-angular-calls/references/group-calls.md +0 -433
  328. package/skills/cometchat-angular-calls/references/idle-timeout.md +0 -161
  329. package/skills/cometchat-angular-calls/references/in-call-chat.md +0 -148
  330. package/skills/cometchat-angular-calls/references/lazy-loading-pitfalls.md +0 -205
  331. package/skills/cometchat-angular-calls/references/migration-v4-to-v5.md +0 -53
  332. package/skills/cometchat-angular-calls/references/ngzone-and-async-callbacks.md +0 -184
  333. package/skills/cometchat-angular-calls/references/picture-in-picture.md +0 -285
  334. package/skills/cometchat-angular-calls/references/raise-hand.md +0 -172
  335. package/skills/cometchat-angular-calls/references/recording-screen-share.md +0 -260
  336. package/skills/cometchat-angular-calls/references/ringing-integration.md +0 -133
  337. package/skills/cometchat-angular-calls/references/server-web-push-vapid.md +0 -100
  338. package/skills/cometchat-angular-calls/references/share-invite.md +0 -122
  339. package/skills/cometchat-angular-calls/references/virtual-background.md +0 -29
  340. package/skills/cometchat-angular-components/SKILL.md +0 -235
  341. package/skills/cometchat-angular-core/SKILL.md +0 -386
  342. package/skills/cometchat-angular-customization/SKILL.md +0 -616
  343. package/skills/cometchat-angular-features/SKILL.md +0 -329
  344. package/skills/cometchat-angular-patterns/SKILL.md +0 -256
  345. package/skills/cometchat-angular-placement/SKILL.md +0 -314
  346. package/skills/cometchat-angular-production/SKILL.md +0 -564
  347. package/skills/cometchat-angular-push/SKILL.md +0 -389
  348. package/skills/cometchat-angular-testing/SKILL.md +0 -605
  349. package/skills/cometchat-angular-theming/SKILL.md +0 -290
  350. package/skills/cometchat-angular-troubleshooting/SKILL.md +0 -364
  351. package/skills/cometchat-astro-patterns/SKILL.md +0 -708
  352. package/skills/cometchat-calls/SKILL.md +0 -364
  353. package/skills/cometchat-calls/references/use-case-broadcast.md +0 -199
  354. package/skills/cometchat-calls/references/use-case-marketplace.md +0 -157
  355. package/skills/cometchat-calls/references/use-case-support.md +0 -189
  356. package/skills/cometchat-calls/references/use-case-team.md +0 -180
  357. package/skills/cometchat-calls/references/use-case-telehealth.md +0 -153
  358. package/skills/cometchat-components/SKILL.md +0 -1142
  359. package/skills/cometchat-core/SKILL.md +0 -1048
  360. package/skills/cometchat-customization/SKILL.md +0 -580
  361. package/skills/cometchat-customization/references/component-catalog.md +0 -236
  362. package/skills/cometchat-features/SKILL.md +0 -861
  363. package/skills/cometchat-flutter-v5/SKILL.md +0 -173
  364. package/skills/cometchat-flutter-v5-calls/SKILL.md +0 -453
  365. package/skills/cometchat-flutter-v5-calls/references/add-calls-to-existing-chat.md +0 -193
  366. package/skills/cometchat-flutter-v5-calls/references/call-layouts.md +0 -103
  367. package/skills/cometchat-flutter-v5-calls/references/call-session.md +0 -285
  368. package/skills/cometchat-flutter-v5-calls/references/device-management.md +0 -124
  369. package/skills/cometchat-flutter-v5-calls/references/group-calls.md +0 -181
  370. package/skills/cometchat-flutter-v5-calls/references/idle-timeout.md +0 -99
  371. package/skills/cometchat-flutter-v5-calls/references/in-call-chat.md +0 -135
  372. package/skills/cometchat-flutter-v5-calls/references/migration-v4-to-v5.md +0 -210
  373. package/skills/cometchat-flutter-v5-calls/references/raise-hand.md +0 -255
  374. package/skills/cometchat-flutter-v5-calls/references/ringing-integration.md +0 -196
  375. package/skills/cometchat-flutter-v5-calls/references/server-push-bridge.md +0 -101
  376. package/skills/cometchat-flutter-v5-calls/references/share-invite.md +0 -148
  377. package/skills/cometchat-flutter-v5-conversations/SKILL.md +0 -118
  378. package/skills/cometchat-flutter-v5-core/SKILL.md +0 -239
  379. package/skills/cometchat-flutter-v5-customization/SKILL.md +0 -358
  380. package/skills/cometchat-flutter-v5-events/SKILL.md +0 -156
  381. package/skills/cometchat-flutter-v5-messages/SKILL.md +0 -259
  382. package/skills/cometchat-flutter-v5-production/SKILL.md +0 -216
  383. package/skills/cometchat-flutter-v5-push/SKILL.md +0 -285
  384. package/skills/cometchat-flutter-v5-testing/SKILL.md +0 -401
  385. package/skills/cometchat-flutter-v5-theming/SKILL.md +0 -161
  386. package/skills/cometchat-flutter-v5-troubleshooting/SKILL.md +0 -130
  387. package/skills/cometchat-flutter-v5-users-groups/SKILL.md +0 -152
  388. package/skills/cometchat-flutter-v6/SKILL.md +0 -446
  389. package/skills/cometchat-flutter-v6-calls/references/add-calls-to-existing-chat.md +0 -136
  390. package/skills/cometchat-flutter-v6-calls/references/advanced-features.md +0 -89
  391. package/skills/cometchat-flutter-v6-calls/references/call-layouts.md +0 -105
  392. package/skills/cometchat-flutter-v6-calls/references/call-session.md +0 -229
  393. package/skills/cometchat-flutter-v6-calls/references/device-management.md +0 -105
  394. package/skills/cometchat-flutter-v6-calls/references/group-calls.md +0 -190
  395. package/skills/cometchat-flutter-v6-calls/references/idle-timeout.md +0 -88
  396. package/skills/cometchat-flutter-v6-calls/references/in-call-chat.md +0 -125
  397. package/skills/cometchat-flutter-v6-calls/references/raise-hand.md +0 -275
  398. package/skills/cometchat-flutter-v6-calls/references/ringing-integration.md +0 -171
  399. package/skills/cometchat-flutter-v6-calls/references/server-push-bridge.md +0 -93
  400. package/skills/cometchat-flutter-v6-calls/references/share-invite.md +0 -102
  401. package/skills/cometchat-flutter-v6-conversations/SKILL.md +0 -238
  402. package/skills/cometchat-flutter-v6-messages/SKILL.md +0 -384
  403. package/skills/cometchat-flutter-v6-theming/SKILL.md +0 -293
  404. package/skills/cometchat-flutter-v6-users-groups/SKILL.md +0 -224
  405. package/skills/cometchat-i18n/SKILL.md +0 -419
  406. package/skills/cometchat-ios/SKILL.md +0 -325
  407. package/skills/cometchat-ios-calls/references/add-calls-to-existing-chat.md +0 -174
  408. package/skills/cometchat-ios-calls/references/audio-modes-and-controls.md +0 -45
  409. package/skills/cometchat-ios-calls/references/avaudiosession-routing.md +0 -188
  410. package/skills/cometchat-ios-calls/references/call-layouts.md +0 -76
  411. package/skills/cometchat-ios-calls/references/call-session.md +0 -218
  412. package/skills/cometchat-ios-calls/references/callkit-and-pushkit.md +0 -357
  413. package/skills/cometchat-ios-calls/references/custom-ui.md +0 -322
  414. package/skills/cometchat-ios-calls/references/device-management.md +0 -171
  415. package/skills/cometchat-ios-calls/references/group-calls.md +0 -359
  416. package/skills/cometchat-ios-calls/references/idle-timeout.md +0 -184
  417. package/skills/cometchat-ios-calls/references/in-call-chat.md +0 -179
  418. package/skills/cometchat-ios-calls/references/migration-v4-to-v5.md +0 -196
  419. package/skills/cometchat-ios-calls/references/picture-in-picture.md +0 -246
  420. package/skills/cometchat-ios-calls/references/raise-hand.md +0 -26
  421. package/skills/cometchat-ios-calls/references/recording-screen-share.md +0 -252
  422. package/skills/cometchat-ios-calls/references/ringing-integration.md +0 -143
  423. package/skills/cometchat-ios-calls/references/server-apns-pushkit.md +0 -267
  424. package/skills/cometchat-ios-calls/references/share-invite.md +0 -148
  425. package/skills/cometchat-ios-calls/references/swiftui-uikit-hosting.md +0 -246
  426. package/skills/cometchat-ios-calls/references/voip-cert-setup.md +0 -166
  427. package/skills/cometchat-ios-production/SKILL.md +0 -738
  428. package/skills/cometchat-ios-testing/SKILL.md +0 -376
  429. package/skills/cometchat-ios-theming/SKILL.md +0 -667
  430. package/skills/cometchat-ios-troubleshooting/SKILL.md +0 -1003
  431. package/skills/cometchat-native-bare-patterns/SKILL.md +0 -550
  432. package/skills/cometchat-native-calls/SKILL.md +0 -669
  433. package/skills/cometchat-native-calls/references/add-calls-to-existing-chat.md +0 -203
  434. package/skills/cometchat-native-calls/references/call-layouts.md +0 -125
  435. package/skills/cometchat-native-calls/references/call-session.md +0 -182
  436. package/skills/cometchat-native-calls/references/custom-ui.md +0 -254
  437. package/skills/cometchat-native-calls/references/device-management.md +0 -158
  438. package/skills/cometchat-native-calls/references/expo-vs-bare.md +0 -179
  439. package/skills/cometchat-native-calls/references/group-calls.md +0 -296
  440. package/skills/cometchat-native-calls/references/idle-timeout.md +0 -128
  441. package/skills/cometchat-native-calls/references/in-call-chat.md +0 -145
  442. package/skills/cometchat-native-calls/references/migration-v4-to-v5.md +0 -72
  443. package/skills/cometchat-native-calls/references/picture-in-picture.md +0 -276
  444. package/skills/cometchat-native-calls/references/raise-hand.md +0 -205
  445. package/skills/cometchat-native-calls/references/recording-screen-share.md +0 -169
  446. package/skills/cometchat-native-calls/references/ringing-integration.md +0 -118
  447. package/skills/cometchat-native-calls/references/server-push-bridge.md +0 -135
  448. package/skills/cometchat-native-calls/references/server-push-payloads.md +0 -193
  449. package/skills/cometchat-native-calls/references/share-invite.md +0 -146
  450. package/skills/cometchat-native-calls/references/voip-push-end-to-end.md +0 -319
  451. package/skills/cometchat-native-components/SKILL.md +0 -628
  452. package/skills/cometchat-native-core/SKILL.md +0 -679
  453. package/skills/cometchat-native-customization/SKILL.md +0 -716
  454. package/skills/cometchat-native-expo-patterns/SKILL.md +0 -552
  455. package/skills/cometchat-native-features/SKILL.md +0 -638
  456. package/skills/cometchat-native-placement/SKILL.md +0 -509
  457. package/skills/cometchat-native-production/SKILL.md +0 -700
  458. package/skills/cometchat-native-push/SKILL.md +0 -594
  459. package/skills/cometchat-native-testing/SKILL.md +0 -582
  460. package/skills/cometchat-native-theming/SKILL.md +0 -681
  461. package/skills/cometchat-native-troubleshooting/SKILL.md +0 -501
  462. package/skills/cometchat-nextjs-patterns/SKILL.md +0 -899
  463. package/skills/cometchat-placement/SKILL.md +0 -1360
  464. package/skills/cometchat-production/SKILL.md +0 -1027
  465. package/skills/cometchat-react-calls/SKILL.md +0 -749
  466. package/skills/cometchat-react-calls/references/add-calls-to-existing-chat.md +0 -146
  467. package/skills/cometchat-react-calls/references/call-layouts.md +0 -160
  468. package/skills/cometchat-react-calls/references/call-session.md +0 -235
  469. package/skills/cometchat-react-calls/references/custom-ui.md +0 -247
  470. package/skills/cometchat-react-calls/references/device-management.md +0 -210
  471. package/skills/cometchat-react-calls/references/group-calls.md +0 -257
  472. package/skills/cometchat-react-calls/references/idle-timeout.md +0 -188
  473. package/skills/cometchat-react-calls/references/in-call-chat.md +0 -212
  474. package/skills/cometchat-react-calls/references/migration-v4-to-v5.md +0 -170
  475. package/skills/cometchat-react-calls/references/picture-in-picture.md +0 -245
  476. package/skills/cometchat-react-calls/references/raise-hand.md +0 -238
  477. package/skills/cometchat-react-calls/references/recording-screen-share.md +0 -144
  478. package/skills/cometchat-react-calls/references/ringing-integration.md +0 -255
  479. package/skills/cometchat-react-calls/references/server-web-push-vapid.md +0 -241
  480. package/skills/cometchat-react-calls/references/share-invite.md +0 -175
  481. package/skills/cometchat-react-calls/references/testing-calls-on-web.md +0 -216
  482. package/skills/cometchat-react-calls/references/virtual-background.md +0 -32
  483. package/skills/cometchat-react-calls/references/voip-and-web-push.md +0 -165
  484. package/skills/cometchat-react-patterns/SKILL.md +0 -628
  485. package/skills/cometchat-react-push/SKILL.md +0 -634
  486. package/skills/cometchat-react-router-patterns/SKILL.md +0 -758
  487. package/skills/cometchat-react-testing/SKILL.md +0 -413
  488. package/skills/cometchat-theming/SKILL.md +0 -498
  489. package/skills/cometchat-troubleshooting/SKILL.md +0 -294
@@ -1,276 +0,0 @@
1
- # Picture-in-Picture on React Native
2
-
3
- Both Android and iOS support PiP for video calls — but the integration paths are different. Android exposes `PictureInPictureParams` via `Activity` APIs; iOS exposes `AVPictureInPictureController` (and CallKit handles it for VoIP calls). RN bridges both via native modules.
4
-
5
- ---
6
-
7
- ## Android — Activity-level PiP
8
-
9
- Android PiP is an Activity attribute. The activity declares it supports PiP, and you transition into PiP by calling `enterPictureInPictureMode()` from native (RN exposes a bridge).
10
-
11
- ### Manifest
12
-
13
- ```xml
14
- <!-- android/app/src/main/AndroidManifest.xml -->
15
- <activity
16
- android:name=".MainActivity"
17
- android:supportsPictureInPicture="true"
18
- android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation|keyboardHidden">
19
- <!-- ... -->
20
- </activity>
21
- ```
22
-
23
- `configChanges` is critical — without it, Android destroys + recreates the activity on PiP transition, which kills the WebRTC connection.
24
-
25
- ### Bridge
26
-
27
- `react-native-webrtc` ships a helper module (in some versions) for entering PiP. If your version doesn't have it, write a tiny native module:
28
-
29
- ```kotlin
30
- // android/app/src/main/java/com/yourapp/PictureInPictureModule.kt
31
- package com.yourapp
32
-
33
- import android.app.PictureInPictureParams
34
- import android.os.Build
35
- import android.util.Rational
36
- import com.facebook.react.bridge.ReactApplicationContext
37
- import com.facebook.react.bridge.ReactContextBaseJavaModule
38
- import com.facebook.react.bridge.ReactMethod
39
- import com.facebook.react.bridge.Promise
40
-
41
- class PictureInPictureModule(reactContext: ReactApplicationContext) : ReactContextBaseJavaModule(reactContext) {
42
- override fun getName() = "PictureInPicture"
43
-
44
- @ReactMethod
45
- fun enterPip(promise: Promise) {
46
- val activity = currentActivity
47
- if (activity == null) {
48
- promise.reject("NO_ACTIVITY", "No current activity")
49
- return
50
- }
51
- if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
52
- promise.reject("UNSUPPORTED", "Android < 8.0 doesn't support PiP")
53
- return
54
- }
55
-
56
- val aspectRatio = Rational(16, 9)
57
- val params = PictureInPictureParams.Builder()
58
- .setAspectRatio(aspectRatio)
59
- .build()
60
-
61
- val ok = activity.enterPictureInPictureMode(params)
62
- if (ok) promise.resolve(null) else promise.reject("FAILED", "Couldn't enter PiP")
63
- }
64
- }
65
- ```
66
-
67
- Register in `MainApplication.kt`:
68
-
69
- ```kotlin
70
- override fun getPackages(): List<ReactPackage> {
71
- val packages = PackageList(this).packages
72
- packages.add(PictureInPicturePackage()) // your package wrapping the module
73
- return packages
74
- }
75
- ```
76
-
77
- ### React side
78
-
79
- ```ts
80
- import { NativeModules, Platform } from "react-native";
81
-
82
- const PictureInPicture = NativeModules.PictureInPicture;
83
-
84
- async function enterPiP() {
85
- if (Platform.OS !== "android") return;
86
- try {
87
- await PictureInPicture.enterPip();
88
- } catch (err) {
89
- console.warn("PiP failed:", err);
90
- }
91
- }
92
- ```
93
-
94
- ### Listening for PiP transitions
95
-
96
- On Android, the activity gets `onPictureInPictureModeChanged` callback. RN exposes this via `AppState`:
97
-
98
- ```ts
99
- import { AppState, type AppStateStatus } from "react-native";
100
-
101
- useEffect(() => {
102
- const handler = (state: AppStateStatus) => {
103
- // 'background' fires when entering PiP on some Android versions
104
- // 'active' fires on returning
105
- if (state === "active") {
106
- // restore full UI
107
- }
108
- };
109
- const sub = AppState.addEventListener("change", handler);
110
- return () => sub.remove();
111
- }, []);
112
- ```
113
-
114
- Better — emit a custom event from your native module on `onPictureInPictureModeChanged` and listen in JS:
115
-
116
- ```ts
117
- import { NativeEventEmitter, NativeModules } from "react-native";
118
-
119
- const emitter = new NativeEventEmitter(NativeModules.PictureInPicture);
120
- useEffect(() => {
121
- const sub = emitter.addListener("pipModeChanged", ({ inPip }: { inPip: boolean }) => {
122
- setInPip(inPip);
123
- });
124
- return () => sub.remove();
125
- }, []);
126
- ```
127
-
128
- ---
129
-
130
- ## iOS — CallKit handles it for VoIP calls
131
-
132
- The simplest iOS PiP path: **don't write any.** If you've integrated CallKit (rule 1.2 in the SKILL.md, mandatory for standalone-mode VoIP), iOS auto-handles PiP for active video calls when the user backgrounds the app. The system shows your CallKit-reported call in a small floating window.
133
-
134
- For non-CallKit calls (in-foreground only), you need `AVPictureInPictureController`. This is involved on iOS because `AVPictureInPictureController` requires an `AVSampleBufferDisplayLayer` — it doesn't work directly with `<RTCView />`.
135
-
136
- ### AVPictureInPictureController bridge
137
-
138
- `react-native-webrtc` ≥ 119 ships an `RTCVideoView` that supports PiP via a system-managed display layer. The bridge:
139
-
140
- ```ts
141
- import { RTCView } from "react-native-webrtc";
142
-
143
- // react-native-webrtc 119+
144
- <RTCView
145
- streamURL={remoteStream.toURL()}
146
- style={styles.remoteVideo}
147
- pictureInPicture={true}
148
- onPictureInPictureStart={() => setInPip(true)}
149
- onPictureInPictureStop={() => setInPip(false)}
150
- />
151
- ```
152
-
153
- Older versions: write a wrapper around `AVPictureInPictureController` and a `WebRTCVideoView` subclass that exposes its `AVSampleBufferDisplayLayer` to the controller. Substantial native work; deferring to CallKit is the right call for most apps.
154
-
155
- ### Info.plist
156
-
157
- Background modes must include `audio` (rule 1.3 in the SKILL.md). PiP itself doesn't need a separate capability; it inherits from "audio" + active call.
158
-
159
- ---
160
-
161
- ## App state preservation across PiP
162
-
163
- When the app enters PiP (Android) or background-with-active-call (iOS), the call state must persist. Practical rules:
164
-
165
- 1. **Don't tear down the WebRTC connection** on `componentWillUnmount` of the call screen. The screen survives PiP; tearing down kills the call.
166
- 2. **Hide the in-page video** when PiP is active — same rule as web. Two videos rendering = bad UX, double battery.
167
- 3. **Restore on PiP exit** — listen to `pipModeChanged` and re-render the full call surface.
168
-
169
- ```tsx
170
- function CallScreen() {
171
- const [inPip, setInPip] = useState(false);
172
-
173
- return (
174
- <View style={[styles.container, inPip && styles.minimalPip]}>
175
- <RTCView
176
- streamURL={remoteStream?.toURL()}
177
- style={inPip ? styles.pipFullSize : styles.normalSize}
178
- pictureInPicture={true}
179
- onPictureInPictureStart={() => setInPip(true)}
180
- onPictureInPictureStop={() => setInPip(false)}
181
- />
182
- {!inPip && <ControlPanel onEnd={endCall} />}
183
- </View>
184
- );
185
- }
186
- ```
187
-
188
- The control panel is only visible in non-PiP mode; PiP is video-only by design.
189
-
190
- ---
191
-
192
- ## Auto-PiP on app backgrounding
193
-
194
- Common UX: user presses Home button or switches apps → call auto-enters PiP so video keeps playing.
195
-
196
- ### Android
197
-
198
- In `MainActivity.kt`:
199
-
200
- ```kotlin
201
- override fun onUserLeaveHint() {
202
- super.onUserLeaveHint()
203
- // User pressed Home — auto-enter PiP if a call is active
204
- if (isCallActive() && Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
205
- enterPictureInPictureMode(PictureInPictureParams.Builder().build())
206
- }
207
- }
208
-
209
- private fun isCallActive(): Boolean {
210
- // bridge to JS state — store this in a SharedPreferences flag
211
- return getSharedPreferences("call", MODE_PRIVATE).getBoolean("active", false)
212
- }
213
- ```
214
-
215
- JS side: write the flag whenever the call starts/ends:
216
-
217
- ```ts
218
- import { NativeModules } from "react-native";
219
-
220
- useEffect(() => {
221
- NativeModules.PictureInPicture.setCallActive(true);
222
- return () => NativeModules.PictureInPicture.setCallActive(false);
223
- }, []);
224
- ```
225
-
226
- ### iOS
227
-
228
- CallKit handles this — if you've reported the call to CallKit (rule 1.2), iOS auto-PiPs on background. No bridge code needed for the auto-PiP path.
229
-
230
- For non-CallKit calls (rare in production calling apps), use `react-native-webrtc`'s `pictureInPicture` prop with auto-enter behavior at the native level.
231
-
232
- ---
233
-
234
- ## Anti-patterns
235
-
236
- 1. **Skipping `configChanges` on the manifest activity.** PiP transition destroys + recreates the activity → call dies.
237
- 2. **Tearing down WebRTC in PiP transition.** Same outcome — call dies.
238
- 3. **No iOS Background Modes `audio` capability.** PiP video plays without sound; user thinks it's broken.
239
- 4. **Auto-PiP on every app background, including non-call screens.** User opens settings, comes back to a PiP'd home screen. Gate on `isCallActive()`.
240
- 5. **Rendering control panel inside PiP window.** PiP windows are small; controls don't fit. Hide them.
241
- 6. **Using two separate `<RTCView />` instances** — one for normal, one for PiP. The `pictureInPicture` prop on a single view is the right pattern.
242
- 7. **iOS PiP without CallKit.** Doesn't work for backgrounded calls — only foregrounded. CallKit is required for "real" PiP.
243
-
244
- ---
245
-
246
- ## Verification checklist
247
-
248
- **Android:**
249
- - [ ] `android:supportsPictureInPicture="true"` on the activity
250
- - [ ] `android:configChanges` includes screenSize/smallestScreenSize/screenLayout/orientation
251
- - [ ] Native PiP module registered + bridged
252
- - [ ] `onUserLeaveHint` auto-PiP gated on `isCallActive()`
253
- - [ ] PiP entry uses 16:9 aspect ratio (or matches stream resolution)
254
- - [ ] PiP mode change emits to JS; controls hidden in PiP
255
-
256
- **iOS:**
257
- - [ ] CallKit integrated (rule 1.2 in SKILL.md)
258
- - [ ] Background Modes: audio + voip + remote-notification
259
- - [ ] `react-native-webrtc` ≥ 119 if using `pictureInPicture` prop
260
- - [ ] PiP transitions don't tear down call
261
-
262
- **Real-device smoke:**
263
- - [ ] Android: press Home during call → PiP appears, video keeps playing, audio continues
264
- - [ ] Android: tap PiP window → call screen restored, controls visible
265
- - [ ] iOS: press Home during call → CallKit-managed PiP appears
266
- - [ ] iOS: tap PiP → app foregrounds, full call screen visible
267
-
268
- ---
269
-
270
- ## Pointers
271
-
272
- - `references/custom-ui.md` — composing custom call surfaces (PiP integration via the `pictureInPicture` prop pattern)
273
- - `references/voip-push-end-to-end.md` — CallKit which handles iOS PiP for free
274
- - `cometchat-android-v5-calls/references/picture-in-picture.md` — Android-native PiP reference (deeper Android-specific patterns)
275
- - `cometchat-react-calls/references/picture-in-picture.md` — Web PiP (different APIs but same UX shape)
276
- - `cometchat-native-calls` SKILL.md — base hard rules
@@ -1,205 +0,0 @@
1
- # Raise hand on React Native
2
-
3
- Same SDK API as web (`@cometchat/calls-sdk-react-native` exposes the same calls). The difference is the UI surface — native components instead of HTML, RN re-renders with state, no `aria-pressed` (use `accessibilityState` instead).
4
-
5
- **Canonical docs:** https://www.cometchat.com/docs/calls/react-native/raise-hand
6
- **Read first:** `cometchat-react-calls/references/raise-hand.md` — the integration shape and anti-patterns are identical; this reference covers RN-specific wiring.
7
-
8
- ---
9
-
10
- ## SDK API
11
-
12
- ```ts
13
- import { CometChatCalls } from "@cometchat/calls-sdk-react-native";
14
-
15
- CometChatCalls.raiseHand();
16
- CometChatCalls.lowerHand();
17
-
18
- // addEventListener returns an unsubscribe function — capture it, call it in cleanup.
19
- const off = CometChatCalls.addEventListener("onParticipantHandRaised", (p) => { ... });
20
- // later: off();
21
-
22
- // Button visibility is a SessionSettings OBJECT field, not a builder method:
23
- const settings = {
24
- hideRaiseHandButton: true,
25
- };
26
- ```
27
-
28
- ---
29
-
30
- ## RN-specific UX patterns
31
-
32
- ### Toggle button (TouchableOpacity)
33
-
34
- ```tsx
35
- import { useState } from "react";
36
- import { TouchableOpacity, Text, AccessibilityInfo } from "react-native";
37
- import { CometChatCalls } from "@cometchat/calls-sdk-react-native";
38
-
39
- function RaiseHandButton() {
40
- const [raised, setRaised] = useState(false);
41
-
42
- function toggle() {
43
- if (raised) {
44
- CometChatCalls.lowerHand();
45
- setRaised(false);
46
- AccessibilityInfo.announceForAccessibility("Hand lowered");
47
- } else {
48
- CometChatCalls.raiseHand();
49
- setRaised(true);
50
- AccessibilityInfo.announceForAccessibility("Hand raised");
51
- }
52
- }
53
-
54
- return (
55
- <TouchableOpacity
56
- onPress={toggle}
57
- accessibilityRole="button"
58
- accessibilityState={{ selected: raised }}
59
- accessibilityLabel={raised ? "Lower hand" : "Raise hand"}
60
- style={{
61
- padding: 12,
62
- borderRadius: 32,
63
- backgroundColor: raised ? "#FFD60A" : "rgba(255,255,255,0.2)",
64
- }}
65
- >
66
- <Text style={{ color: raised ? "#000" : "#FFF" }}>
67
- ✋ {raised ? "Lower" : "Raise"}
68
- </Text>
69
- </TouchableOpacity>
70
- );
71
- }
72
- ```
73
-
74
- `AccessibilityInfo.announceForAccessibility` is the RN equivalent of web's `aria-live` regions — TalkBack / VoiceOver pick up the announcement. This is the canonical RN a11y pattern (cf. `cometchat-a11y`).
75
-
76
- ### Raised-hands roster (BottomSheet pattern)
77
-
78
- For a host's "raised hands" list, the natural RN UX is a bottom sheet rather than a permanent sidebar (vertical phone screens are tight on horizontal real estate):
79
-
80
- ```tsx
81
- import { useEffect, useRef, useState } from "react";
82
- import { View, Text, FlatList } from "react-native";
83
- import BottomSheet from "@gorhom/bottom-sheet";
84
- import { CometChatCalls } from "@cometchat/calls-sdk-react-native";
85
-
86
- interface RaisedParticipant { uid: string; name: string; raisedAt: number; }
87
-
88
- function RaisedHandsSheet() {
89
- const sheetRef = useRef<BottomSheet>(null);
90
- const [raised, setRaised] = useState<Map<string, RaisedParticipant>>(new Map());
91
-
92
- useEffect(() => {
93
- const onRaised = (p: { uid: string; name: string }) => {
94
- setRaised(prev => new Map(prev).set(p.uid, { ...p, raisedAt: Date.now() }));
95
- // Auto-expand the sheet on first hand raised
96
- if (raised.size === 0) sheetRef.current?.snapToIndex(1);
97
- };
98
- const onLowered = (p: { uid: string }) => {
99
- setRaised(prev => {
100
- const next = new Map(prev);
101
- next.delete(p.uid);
102
- return next;
103
- });
104
- };
105
-
106
- // addEventListener returns an unsubscribe fn; collect them and call on cleanup.
107
- const offRaised = CometChatCalls.addEventListener("onParticipantHandRaised", onRaised);
108
- const offLowered = CometChatCalls.addEventListener("onParticipantHandLowered", onLowered);
109
- return () => {
110
- offRaised();
111
- offLowered();
112
- };
113
- }, [raised.size]);
114
-
115
- const sorted = Array.from(raised.values()).sort((a, b) => a.raisedAt - b.raisedAt);
116
-
117
- return (
118
- <BottomSheet ref={sheetRef} snapPoints={["10%", "40%"]} index={raised.size > 0 ? 1 : 0}>
119
- <View style={{ padding: 16 }}>
120
- <Text style={{ fontWeight: "600", marginBottom: 8 }}>
121
- Raised hands ({raised.size})
122
- </Text>
123
- <FlatList
124
- data={sorted}
125
- keyExtractor={(p) => p.uid}
126
- renderItem={({ item }) => (
127
- <Text style={{ paddingVertical: 6 }}>
128
- ✋ {item.name}
129
- </Text>
130
- )}
131
- />
132
- </View>
133
- </BottomSheet>
134
- );
135
- }
136
- ```
137
-
138
- `@gorhom/bottom-sheet` is the canonical RN bottom-sheet library; if you've already integrated CometChat the kit's setup includes its peer deps (`react-native-gesture-handler`, `react-native-reanimated`).
139
-
140
- ### Toast for the host
141
-
142
- ```tsx
143
- import Toast from "react-native-toast-message";
144
-
145
- useEffect(() => {
146
- const onRaised = (p: { name: string }) => {
147
- Toast.show({
148
- type: "info",
149
- text1: `${p.name} raised their hand`,
150
- visibilityTime: 4000,
151
- position: "top",
152
- });
153
- };
154
- const off = CometChatCalls.addEventListener("onParticipantHandRaised", onRaised);
155
- return () => off();
156
- }, []);
157
- ```
158
-
159
- ---
160
-
161
- ## When to gate raise-hand UI
162
-
163
- Same rule as web: hide for 1:1 calls. Gate on participant count:
164
-
165
- ```tsx
166
- const showRaiseHand = participants.length > 2;
167
- return showRaiseHand ? <RaiseHandButton /> : null;
168
- ```
169
-
170
- ---
171
-
172
- ## Anti-patterns
173
-
174
- Same shape as web (cf. sister reference) plus RN-specific:
175
-
176
- 1. **Forgetting `accessibilityRole="button"`.** TouchableOpacity defaults to "image" or no role — TalkBack reads it wrong. Always set the role.
177
- 2. **`Toast.show` from inside the SDK callback without UI-thread guarantee.** Toast lib usually handles this, but if you use a custom toast, wrap in `requestAnimationFrame` or check that the call from the SDK callback is on the JS thread.
178
- 3. **BottomSheet with a single snap-point.** Use 2 snaps so users can collapse without dismissing entirely.
179
- 4. **Animating the raise-hand badge with Reanimated `withSpring`** in a video-call context. CPU-intensive; can stutter the WebRTC pipeline. Use `withTiming` with short durations or skip the animation.
180
-
181
- ---
182
-
183
- ## Verification checklist
184
-
185
- - [ ] `raiseHand()` / `lowerHand()` wired to your toggle button
186
- - [ ] Both event listeners registered + cleaned up
187
- - [ ] `accessibilityState`, `accessibilityRole`, `accessibilityLabel` on the toggle button
188
- - [ ] `AccessibilityInfo.announceForAccessibility` on state change
189
- - [ ] Roster sorted by `raisedAt` ascending
190
- - [ ] `hideRaiseHandButton: true` in CallSettings if custom UI
191
- - [ ] Real-device smoke: 3 devices in same call, hand-raise from 2 → host's BottomSheet shows both
192
- - [ ] iOS device: VoiceOver announces "Hand raised" / "Hand lowered"
193
- - [ ] Android device: TalkBack announces same
194
- - [ ] Visual at 360×640 (small Android phone) — button + sheet still legible
195
-
196
- ---
197
-
198
- ## Pointers
199
-
200
- - `cometchat-react-calls/references/raise-hand.md` — sister reference (same SDK, web-flavored UI)
201
- - `cometchat-native-calls` SKILL.md — the seven hard rules
202
- - `references/group-calls.md` — group call architecture
203
- - `references/custom-ui.md` — RN custom call UI
204
- - `cometchat-a11y` — RN announcement patterns
205
- - Canonical docs: https://www.cometchat.com/docs/calls/react-native/raise-hand
@@ -1,169 +0,0 @@
1
- # Recording + screen-share on React Native
2
-
3
- Both features live in the Calls SDK; both have RN-specific gotchas the kit's defaults don't handle. Sister of `cometchat-react-calls/references/recording-screen-share.md` — same SDK semantics, different platform plumbing for screen capture.
4
-
5
- ---
6
-
7
- ## Recording
8
-
9
- ### Server-side: dashboard gate
10
-
11
- Recording is a paid feature on most CometChat plans. Enable in **Dashboard → Chat & Messaging → Calls → Recording**. The client-side flag below is a no-op without it.
12
-
13
- ### Client-side: opt-in per session
14
-
15
- ```ts
16
- import { CometChatCalls } from "@cometchat/calls-sdk-react-native";
17
-
18
- // Audio vs video + recording are SessionSettings OBJECT fields (v5), not builder methods.
19
- // enableRecording()/setShowRecordingButton() do not exist on the v5 RN SDK.
20
- const sessionSettings = {
21
- sessionType: "VIDEO", // "VIDEO" | "AUDIO" — replaces the v4 setIsAudioOnlyCall builder
22
- autoStartRecording: true, // server starts recording when the session begins
23
- hideRecordingButton: false, // show the in-call recording toggle (kit's default UI)
24
- };
25
- ```
26
-
27
- ### Recording lifecycle events
28
-
29
- `CometChatCalls.OngoingCallListener` is still re-exported but is the v4-era path — **@deprecated, prefer `CometChatCalls.addEventListener(...)`** (which returns an unsubscribe fn). Only `onRecordingStarted` / `onRecordingStopped` exist; there is no `onRecordingFailed`.
30
-
31
- ```ts
32
- // Preferred (v5): addEventListener returns the unsubscribe fn.
33
- const offStarted = CometChatCalls.addEventListener("onRecordingStarted", () => {
34
- // Update UI — show a "REC" indicator (compliance requirement in some jurisdictions)
35
- setRecording(true);
36
- });
37
- const offStopped = CometChatCalls.addEventListener("onRecordingStopped", () => {
38
- setRecording(false);
39
- });
40
- // cleanup: offStarted(); offStopped();
41
- // NOTE: there is no onRecordingFailed event in the v5 RN SDK — do not listen for it.
42
- ```
43
-
44
- ### REC indicator (compliance)
45
-
46
- In some regions, you must visually notify all participants when recording is active. The kit's default `CometChatOngoingCall` shows a small "Recording" badge. Custom UI must render this:
47
-
48
- ```tsx
49
- {recording && (
50
- <View style={styles.recBadge}>
51
- <Text style={styles.recDot}>●</Text>
52
- <Text style={styles.recLabel}>REC</Text>
53
- </View>
54
- )}
55
- ```
56
-
57
- Don't omit this — the legal exposure is real (CCPA, GDPR, two-party-consent US states).
58
-
59
- ### Where the recordings go
60
-
61
- CometChat hosts the file. It appears in **Dashboard → Calls → Recordings** with a download link. There is no client-side download API — the file isn't exposed to the device for security/compliance reasons.
62
-
63
- For programmatic access:
64
-
65
- ```ts
66
- // Server-side — your backend with the dashboard bearer token
67
- const res = await fetch(
68
- `https://${region}.api-management.cometchat.io/v3/apps/${appId}/recordings`,
69
- { headers: { Authorization: `Bearer ${dashboardToken}` } },
70
- );
71
- const recordings = await res.json();
72
- ```
73
-
74
- The skill points users at this REST endpoint; it doesn't generate client code (recordings shouldn't be downloadable from the device).
75
-
76
- ---
77
-
78
- ## Screen sharing
79
-
80
- **Initiating a screen share from React Native is NOT supported.** Per the docs (`docs/calls/react-native/screen-sharing.mdx`): RN devices can only **view** screen shares started by participants on other platforms (web/desktop). There is no `startScreenSharing()` / `stopScreenSharing()` / `CometChatCalls.startScreenShare()` API on RN, no iOS Broadcast Extension flow, and no Android MediaProjection flow exposed by this SDK. Do not write screen-share-initiation code for RN.
81
-
82
- ### Viewer — receive / view a screen share
83
-
84
- When a participant shares their screen from another platform, the kit's default `CometChatOngoingCall` UI auto-renders the screen-share tile (it switches to Sidebar layout automatically). Listen for screen-share events only to drive custom UI.
85
-
86
- Two receive-path event channels exist (verified against the calls-sdk-react-native clone `skills/event-listeners/SKILL.md`):
87
-
88
- ```ts
89
- // Participant events — fire with the remote participant who shared:
90
- const offStart = CometChatCalls.addEventListener("onParticipantStartedScreenShare", (participant) => {
91
- setScreenSharePresenter(participant.name);
92
- });
93
- const offStop = CometChatCalls.addEventListener("onParticipantStoppedScreenShare", () => {
94
- setScreenSharePresenter(null);
95
- });
96
- // cleanup: offStart(); offStop();
97
-
98
- // Media-event channel (received from a web participant), no payload:
99
- CometChatCalls.addEventListener("onScreenShareStarted", () => { /* show screen-share tile */ });
100
- CometChatCalls.addEventListener("onScreenShareStopped", () => { /* restore prior layout */ });
101
- ```
102
-
103
- Custom-UI viewer composition:
104
-
105
- ```tsx
106
- function CustomCallView() {
107
- const [screenSharePresenter, setScreenSharePresenter] = useState<string | null>(null);
108
- const [participants, setParticipants] = useState<Participant[]>([]);
109
-
110
- return (
111
- <View style={styles.container}>
112
- {screenSharePresenter ? (
113
- <ScreenShareView presenterUid={screenSharePresenter} />
114
- ) : (
115
- <ParticipantTilesGrid participants={participants} />
116
- )}
117
- </View>
118
- );
119
- }
120
- ```
121
-
122
- When someone shares their screen, switch the layout to "screen share + participant strip"; switch back when they stop.
123
-
124
- ---
125
-
126
- ## Recording + screen-share together
127
-
128
- Server-side recording captures whatever video composition the SFU is forwarding. When a (web/desktop) participant is screen-sharing, the recording shows their screen. When they stop, it switches back to the camera composition.
129
-
130
- You don't compose this client-side — the server handles it. Custom UI just needs to render the screen-share track when present (receive path).
131
-
132
- ---
133
-
134
- ## Anti-patterns
135
-
136
- 1. **Trying to INITIATE a screen share from RN.** Not supported — there is no `startScreenSharing()`, iOS Broadcast Extension flow, or Android MediaProjection flow on this SDK. RN can only view shares from other platforms.
137
- 2. **No "REC" indicator in custom UI.** Compliance violation in two-party-consent jurisdictions.
138
- 3. **Trying to download recordings from the device.** They live on CometChat's servers. Use the dashboard or REST API.
139
- 4. **`autoStartRecording: true` without dashboard gate.** SessionSettings flag silently no-ops; user thinks recording is active when it isn't.
140
- 5. **Not handling the screen-share-stopped event in custom UI.** Layout doesn't switch back; viewer sees the last screen-share frame frozen.
141
-
142
- ---
143
-
144
- ## Verification checklist
145
-
146
- **Recording:**
147
- - [ ] Dashboard gate enabled (Recording feature on the plan)
148
- - [ ] `autoStartRecording: true` in the SessionSettings object (NOT a builder method)
149
- - [ ] `onRecordingStarted` / `onRecordingStopped` listeners wired via `addEventListener`
150
- - [ ] "REC" indicator visible to all participants when active
151
-
152
- **Screen share (RN = VIEW-only; initiation not supported):**
153
- - [ ] Custom UI: layout switches to screen-share view on `onParticipantStartedScreenShare` / `onScreenShareStarted`
154
- - [ ] Custom UI: layout switches back on `onParticipantStoppedScreenShare` / `onScreenShareStopped`
155
-
156
- **Real-device smoke:**
157
- - [ ] A web/desktop participant starts a screen share → it renders on the RN device
158
- - [ ] That participant stops sharing → RN view returns to camera composition smoothly
159
- - [ ] Recording starts, "REC" shows, recording appears in dashboard within ~30 seconds
160
-
161
- ---
162
-
163
- ## Pointers
164
-
165
- - `references/custom-ui.md` — building custom call surfaces with screen-share viewer
166
- - `references/group-calls.md` — group calls + screen share interplay (one share at a time)
167
- - `references/voip-push-end-to-end.md` — push payloads
168
- - `cometchat-native-calls` SKILL.md — base hard rules
169
- - `cometchat-react-calls/references/recording-screen-share.md` — sister web reference (same SDK semantics)