@cometchat/skills 4.4.2 → 5.0.1

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 (518) hide show
  1. package/.claude-plugin/marketplace.json +55 -0
  2. package/.claude-plugin/plugin.json +14 -0
  3. package/CHANGELOG.md +44 -0
  4. package/LICENSE +21 -0
  5. package/MIGRATING.md +187 -0
  6. package/README.md +52 -156
  7. package/RULES.md +125 -0
  8. package/bin/cometchat-skills.mjs +1280 -0
  9. package/bin/legacy-skills.json +95 -0
  10. package/catalogs/android-v6.json +1646 -0
  11. package/catalogs/flutter-v6.json +651 -0
  12. package/catalogs/ios-v5.json +1383 -0
  13. package/catalogs/rn-calls-v5.json +134 -0
  14. package/catalogs/rn-calls-v5.symbols.txt +58 -0
  15. package/catalogs/rn-sdk-v4.json +672 -0
  16. package/catalogs/rn-v5.json +449 -0
  17. package/catalogs/rn-v5.symbols.txt +216 -0
  18. package/catalogs/sdk-android-v5.json +514 -0
  19. package/contracts.android-calls-v5.json +122 -0
  20. package/contracts.android-v6.json +135 -0
  21. package/contracts.angular-v5.json +694 -0
  22. package/contracts.flutter-calls-v5.json +77 -0
  23. package/contracts.flutter-v6.json +126 -0
  24. package/contracts.ios-calls-v5.json +67 -0
  25. package/contracts.ios-v5.json +436 -0
  26. package/contracts.json +82 -0
  27. package/contracts.rn-calls-v5.json +77 -0
  28. package/contracts.rn-v5.json +727 -0
  29. package/contracts.sdk-android-v5.json +15 -0
  30. package/contracts.web-calls-v5.json +45 -0
  31. package/features.android-calls-v5.json +246 -0
  32. package/features.android-v6.json +65 -0
  33. package/features.angular-v5.json +521 -0
  34. package/features.flutter-calls-v5.json +286 -0
  35. package/features.flutter-v6.json +484 -0
  36. package/features.ios-calls-v5.json +236 -0
  37. package/features.ios-v5.json +573 -0
  38. package/features.json +61 -0
  39. package/features.rn-calls-v5.json +187 -0
  40. package/features.rn-v5.json +614 -0
  41. package/features.sdk-android-v5.json +40 -0
  42. package/features.sdk-jsv4.json +24 -0
  43. package/features.web-calls-v5.json +108 -0
  44. package/package.json +156 -74
  45. package/peers.yaml +355 -0
  46. package/registry/README.md +31 -0
  47. package/registry/android-calls-v5.json +94 -0
  48. package/registry/android-v6.json +177 -0
  49. package/registry/angular-v5.json +154 -0
  50. package/registry/flutter-calls-v5.json +94 -0
  51. package/registry/flutter-v6.json +159 -0
  52. package/registry/ios-calls-v5.json +99 -0
  53. package/registry/ios-v5.json +152 -0
  54. package/registry/rn-calls-v5.json +99 -0
  55. package/registry/rn-v5.json +169 -0
  56. package/registry/sdk-android-v5.json +93 -0
  57. package/registry/sdk-jsv4.json +93 -0
  58. package/registry/web-calls-v5.json +94 -0
  59. package/registry/web-v7.json +154 -0
  60. package/skills/cometchat/SKILL.md +47 -2096
  61. package/skills/cometchat-a11y/SKILL.md +44 -472
  62. package/skills/cometchat-analytics/SKILL.md +61 -0
  63. package/skills/cometchat-android-v5-calls-sdk/SKILL.md +206 -0
  64. package/skills/cometchat-android-v5-calls-sdk/references/build-truth.md +63 -0
  65. package/skills/cometchat-android-v5-calls-sdk/references/docs-map.md +119 -0
  66. package/skills/cometchat-android-v5-calls-sdk/references/method-map.md +53 -0
  67. package/skills/cometchat-android-v5-calls-sdk/references/pitfalls.md +72 -0
  68. package/skills/cometchat-android-v5-calls-sdk/references/ringing.md +92 -0
  69. package/skills/cometchat-android-v5-calls-sdk/references/user-switch.md +90 -0
  70. package/skills/cometchat-android-v5-sdk/SKILL.md +127 -0
  71. package/skills/cometchat-android-v5-sdk/references/app-surface.md +88 -0
  72. package/skills/cometchat-android-v5-sdk/references/docs-map.md +91 -0
  73. package/skills/cometchat-android-v6-builder-settings/SKILL.md +51 -137
  74. package/skills/cometchat-android-v6-calls/SKILL.md +128 -413
  75. package/skills/cometchat-android-v6-compose-components/SKILL.md +84 -194
  76. package/skills/cometchat-android-v6-compose-customization/SKILL.md +66 -411
  77. package/skills/cometchat-android-v6-compose-placement/SKILL.md +154 -237
  78. package/skills/cometchat-android-v6-core/SKILL.md +236 -672
  79. package/skills/cometchat-android-v6-core/references/anti-patterns.md +31 -0
  80. package/skills/cometchat-android-v6-core/references/component-props.md +168 -0
  81. package/skills/cometchat-android-v6-core/references/docs-map.md +153 -0
  82. package/skills/cometchat-android-v6-core/references/layout.md +112 -0
  83. package/skills/cometchat-android-v6-core/references/lifecycle.md +75 -0
  84. package/skills/cometchat-android-v6-core/references/setup-credentials.md +105 -0
  85. package/skills/cometchat-android-v6-core/references/troubleshooting.md +36 -0
  86. package/skills/cometchat-android-v6-events/SKILL.md +46 -184
  87. package/skills/cometchat-android-v6-extensions/SKILL.md +39 -179
  88. package/skills/cometchat-android-v6-features/SKILL.md +74 -143
  89. package/skills/cometchat-android-v6-kotlin-components/SKILL.md +75 -193
  90. package/skills/cometchat-android-v6-kotlin-customization/SKILL.md +67 -419
  91. package/skills/cometchat-android-v6-kotlin-placement/SKILL.md +77 -223
  92. package/skills/cometchat-android-v6-migration/SKILL.md +67 -378
  93. package/skills/cometchat-android-v6-production/SKILL.md +41 -179
  94. package/skills/cometchat-android-v6-push/SKILL.md +39 -289
  95. package/skills/cometchat-android-v6-testing/SKILL.md +50 -265
  96. package/skills/cometchat-android-v6-troubleshooting/SKILL.md +70 -254
  97. package/skills/cometchat-angular-v5-calls/SKILL.md +193 -0
  98. package/skills/cometchat-angular-v5-components/SKILL.md +131 -0
  99. package/skills/cometchat-angular-v5-components/references/catalog.md +111 -0
  100. package/skills/cometchat-angular-v5-components/references/host-composed.md +46 -0
  101. package/skills/cometchat-angular-v5-core/SKILL.md +300 -0
  102. package/skills/cometchat-angular-v5-core/references/anti-patterns.md +49 -0
  103. package/skills/cometchat-angular-v5-core/references/component-props.md +55 -0
  104. package/skills/cometchat-angular-v5-core/references/dependencies.md +66 -0
  105. package/skills/cometchat-angular-v5-core/references/docs-map.md +132 -0
  106. package/skills/cometchat-angular-v5-core/references/layout.md +64 -0
  107. package/skills/cometchat-angular-v5-core/references/lifecycle.md +202 -0
  108. package/skills/cometchat-angular-v5-core/references/setup-credentials.md +137 -0
  109. package/skills/cometchat-angular-v5-core/references/theming.md +70 -0
  110. package/skills/cometchat-angular-v5-core/references/troubleshooting.md +27 -0
  111. package/skills/cometchat-angular-v5-customization/SKILL.md +94 -0
  112. package/skills/cometchat-angular-v5-features/SKILL.md +107 -0
  113. package/skills/cometchat-angular-v5-features/references/custom-messages.md +133 -0
  114. package/skills/cometchat-angular-v5-features/references/formatters.md +28 -0
  115. package/skills/cometchat-angular-v5-features/references/host-composed-extensions.md +85 -0
  116. package/skills/cometchat-angular-v5-migration/SKILL.md +40 -0
  117. package/skills/cometchat-angular-v5-migration/references/migration-guide.md +165 -0
  118. package/skills/cometchat-angular-v5-patterns/SKILL.md +107 -0
  119. package/skills/cometchat-angular-v5-placement/SKILL.md +133 -0
  120. package/skills/cometchat-angular-v5-placement/references/combined-app.md +174 -0
  121. package/skills/cometchat-angular-v5-placement/references/core-surface.md +199 -0
  122. package/skills/cometchat-angular-v5-production/SKILL.md +102 -0
  123. package/skills/cometchat-angular-v5-push/SKILL.md +61 -0
  124. package/skills/cometchat-angular-v5-testing/SKILL.md +112 -0
  125. package/skills/cometchat-angular-v5-troubleshooting/SKILL.md +96 -0
  126. package/skills/cometchat-audit/SKILL.md +61 -0
  127. package/skills/cometchat-compliance/SKILL.md +63 -0
  128. package/skills/cometchat-flutter-v5-sdk/SKILL.md +188 -0
  129. package/skills/cometchat-flutter-v5-sdk/references/doc-corrections.md +55 -0
  130. package/skills/cometchat-flutter-v5-sdk/references/docs-map.md +211 -0
  131. package/skills/cometchat-flutter-v5-sdk/references/platform-notes.md +48 -0
  132. package/skills/cometchat-flutter-v5-sdk/references/transcription.md +87 -0
  133. package/skills/cometchat-flutter-v6-calls/SKILL.md +75 -389
  134. package/skills/cometchat-flutter-v6-components/SKILL.md +88 -361
  135. package/skills/cometchat-flutter-v6-core/SKILL.md +154 -593
  136. package/skills/cometchat-flutter-v6-core/references/anti-patterns.md +55 -0
  137. package/skills/cometchat-flutter-v6-core/references/docs-map.md +143 -0
  138. package/skills/cometchat-flutter-v6-core/references/layout.md +45 -0
  139. package/skills/cometchat-flutter-v6-core/references/lifecycle.md +87 -0
  140. package/skills/cometchat-flutter-v6-core/references/setup-credentials.md +84 -0
  141. package/skills/cometchat-flutter-v6-core/references/troubleshooting.md +26 -0
  142. package/skills/cometchat-flutter-v6-customization/SKILL.md +70 -712
  143. package/skills/cometchat-flutter-v6-events/SKILL.md +79 -174
  144. package/skills/cometchat-flutter-v6-features/SKILL.md +55 -394
  145. package/skills/cometchat-flutter-v6-migration/SKILL.md +68 -367
  146. package/skills/cometchat-flutter-v6-migration/references/migration-guide.md +132 -0
  147. package/skills/cometchat-flutter-v6-patterns/SKILL.md +61 -0
  148. package/skills/cometchat-flutter-v6-placement/SKILL.md +94 -381
  149. package/skills/cometchat-flutter-v6-production/SKILL.md +59 -615
  150. package/skills/cometchat-flutter-v6-push/SKILL.md +46 -455
  151. package/skills/cometchat-flutter-v6-testing/SKILL.md +68 -299
  152. package/skills/cometchat-flutter-v6-troubleshooting/SKILL.md +54 -878
  153. package/skills/cometchat-i18n/SKILL.md +35 -404
  154. package/skills/cometchat-ios-calls/SKILL.md +112 -563
  155. package/skills/cometchat-ios-components/SKILL.md +44 -834
  156. package/skills/cometchat-ios-core/SKILL.md +182 -1068
  157. package/skills/cometchat-ios-core/references/anti-patterns.md +113 -0
  158. package/skills/cometchat-ios-core/references/docs-map.md +124 -0
  159. package/skills/cometchat-ios-core/references/install.md +23 -0
  160. package/skills/cometchat-ios-core/references/layout.md +219 -0
  161. package/skills/cometchat-ios-core/references/setup-credentials.md +197 -0
  162. package/skills/cometchat-ios-core/references/swiftui.md +91 -0
  163. package/skills/cometchat-ios-core/references/troubleshooting.md +100 -0
  164. package/skills/cometchat-ios-customization/SKILL.md +33 -968
  165. package/skills/cometchat-ios-features/SKILL.md +29 -738
  166. package/skills/cometchat-ios-migration/SKILL.md +39 -0
  167. package/skills/cometchat-ios-placement/SKILL.md +51 -729
  168. package/skills/cometchat-ios-production/SKILL.md +67 -723
  169. package/skills/cometchat-ios-push/SKILL.md +24 -602
  170. package/skills/cometchat-ios-testing/SKILL.md +36 -355
  171. package/skills/cometchat-ios-troubleshooting/SKILL.md +31 -989
  172. package/skills/cometchat-ios-v5-sdk/SKILL.md +161 -0
  173. package/skills/cometchat-ios-v5-sdk/references/docs-map.md +326 -0
  174. package/skills/cometchat-js-v5-sdk/SKILL.md +95 -0
  175. package/skills/cometchat-js-v5-sdk/references/docs-map.md +114 -0
  176. package/skills/cometchat-migrate-from-getstream/SKILL.md +65 -0
  177. package/skills/cometchat-migrate-from-getstream/references/concept-map.md +98 -0
  178. package/skills/cometchat-migrate-from-getstream/references/data-migration.md +74 -0
  179. package/skills/cometchat-migrate-from-getstream/references/feature-map.md +108 -0
  180. package/skills/cometchat-migrate-from-getstream/references/inventory.md +82 -0
  181. package/skills/cometchat-migrate-from-getstream/references/native-build.md +9 -0
  182. package/skills/cometchat-migrate-from-getstream/references/report-template.md +59 -0
  183. package/skills/cometchat-migrate-from-sendbird/SKILL.md +64 -0
  184. package/skills/cometchat-migrate-from-sendbird/references/concept-map.md +99 -0
  185. package/skills/cometchat-migrate-from-sendbird/references/data-migration.md +74 -0
  186. package/skills/cometchat-migrate-from-sendbird/references/feature-map.md +104 -0
  187. package/skills/cometchat-migrate-from-sendbird/references/inventory.md +86 -0
  188. package/skills/cometchat-migrate-from-sendbird/references/native-build.md +10 -0
  189. package/skills/cometchat-migrate-from-sendbird/references/report-template.md +59 -0
  190. package/skills/cometchat-migrate-from-twilio/SKILL.md +52 -0
  191. package/skills/cometchat-migrate-from-twilio/references/concept-map.md +49 -0
  192. package/skills/cometchat-migrate-from-twilio/references/data-migration.md +50 -0
  193. package/skills/cometchat-migrate-from-twilio/references/feature-map.md +27 -0
  194. package/skills/cometchat-migrate-from-twilio/references/inventory.md +53 -0
  195. package/skills/cometchat-migrate-from-twilio/references/report-template.md +52 -0
  196. package/skills/cometchat-moderation/SKILL.md +58 -0
  197. package/skills/cometchat-onboarding/SKILL.md +92 -0
  198. package/skills/cometchat-onboarding/references/archetypes.md +51 -0
  199. package/skills/cometchat-onboarding/references/calling-first.md +77 -0
  200. package/skills/cometchat-onboarding/references/not-in-this-pack.md +8 -0
  201. package/skills/cometchat-onboarding/references/plan-artifact.md +133 -0
  202. package/skills/cometchat-onboarding/references/platforms.md +105 -0
  203. package/skills/cometchat-react-native-bare-patterns/SKILL.md +120 -0
  204. package/skills/cometchat-react-native-calls/SKILL.md +200 -0
  205. package/skills/cometchat-react-native-components/SKILL.md +142 -0
  206. package/skills/cometchat-react-native-core/SKILL.md +335 -0
  207. package/skills/cometchat-react-native-core/references/anti-patterns.md +79 -0
  208. package/skills/cometchat-react-native-core/references/component-props.md +105 -0
  209. package/skills/cometchat-react-native-core/references/dependencies.md +62 -0
  210. package/skills/cometchat-react-native-core/references/docs-map.md +127 -0
  211. package/skills/cometchat-react-native-core/references/layout.md +61 -0
  212. package/skills/cometchat-react-native-core/references/lifecycle.md +64 -0
  213. package/skills/cometchat-react-native-core/references/setup-credentials.md +39 -0
  214. package/skills/cometchat-react-native-customization/SKILL.md +198 -0
  215. package/skills/cometchat-react-native-expo-patterns/SKILL.md +116 -0
  216. package/skills/cometchat-react-native-features/SKILL.md +122 -0
  217. package/skills/cometchat-react-native-migration/SKILL.md +103 -0
  218. package/skills/cometchat-react-native-placement/SKILL.md +158 -0
  219. package/skills/cometchat-react-native-production/SKILL.md +79 -0
  220. package/skills/cometchat-react-native-push/SKILL.md +88 -0
  221. package/skills/cometchat-react-native-sdk/SKILL.md +133 -0
  222. package/skills/cometchat-react-native-sdk/references/method-map.md +239 -0
  223. package/skills/cometchat-react-native-sdk/references/page-map.md +96 -0
  224. package/skills/cometchat-react-native-testing/SKILL.md +94 -0
  225. package/skills/cometchat-react-native-troubleshooting/SKILL.md +174 -0
  226. package/skills/cometchat-react-native-v5-sdk/SKILL.md +150 -0
  227. package/skills/cometchat-react-native-v5-sdk/references/docs-map.md +127 -0
  228. package/skills/cometchat-react-native-v5-sdk/references/ringing-voip.md +369 -0
  229. package/skills/cometchat-react-v7-calls/SKILL.md +75 -0
  230. package/skills/cometchat-react-v7-components/SKILL.md +72 -0
  231. package/skills/cometchat-react-v7-core/SKILL.md +101 -0
  232. package/skills/cometchat-react-v7-core/references/anti-patterns.md +19 -0
  233. package/skills/cometchat-react-v7-core/references/component-props.md +82 -0
  234. package/skills/cometchat-react-v7-core/references/dependencies.md +23 -0
  235. package/skills/cometchat-react-v7-core/references/docs-map.md +117 -0
  236. package/skills/cometchat-react-v7-core/references/layout.md +150 -0
  237. package/skills/cometchat-react-v7-core/references/lifecycle.md +74 -0
  238. package/skills/cometchat-react-v7-core/references/setup-credentials.md +58 -0
  239. package/skills/cometchat-react-v7-core/references/ssr.md +11 -0
  240. package/skills/cometchat-react-v7-core/references/theming.md +52 -0
  241. package/skills/cometchat-react-v7-customization/SKILL.md +84 -0
  242. package/skills/cometchat-react-v7-features/SKILL.md +92 -0
  243. package/skills/cometchat-react-v7-migration/SKILL.md +39 -0
  244. package/skills/cometchat-react-v7-migration/references/migration-guide.md +119 -0
  245. package/skills/cometchat-react-v7-patterns/SKILL.md +43 -0
  246. package/skills/cometchat-react-v7-placement/SKILL.md +106 -0
  247. package/skills/cometchat-react-v7-placement/references/recipes.md +354 -0
  248. package/skills/cometchat-react-v7-production/SKILL.md +84 -0
  249. package/skills/cometchat-react-v7-push/SKILL.md +53 -0
  250. package/skills/cometchat-react-v7-testing/SKILL.md +60 -0
  251. package/skills/cometchat-react-v7-troubleshooting/SKILL.md +47 -0
  252. package/skills/cometchat-security/SKILL.md +80 -0
  253. package/skills/cometchat-self-host/SKILL.md +56 -0
  254. package/test-suite/README.md +70 -0
  255. package/test-suite/catalogs/android-calls-v5.json +830 -0
  256. package/test-suite/catalogs/android-calls-v5.symbols.txt +499 -0
  257. package/test-suite/catalogs/android-v6.json +1646 -0
  258. package/test-suite/catalogs/android-v6.symbols.txt +298 -0
  259. package/test-suite/catalogs/angular-v5.json +7587 -0
  260. package/test-suite/catalogs/flutter-calls-v5.json +196 -0
  261. package/test-suite/catalogs/flutter-calls-v5.symbols.txt +59 -0
  262. package/test-suite/catalogs/flutter-v6.json +651 -0
  263. package/test-suite/catalogs/ios-calls-v5.json +158 -0
  264. package/test-suite/catalogs/ios-calls-v5.symbols.txt +70 -0
  265. package/test-suite/catalogs/ios-v5.json +1383 -0
  266. package/test-suite/catalogs/ios-v5.symbols.txt +699 -0
  267. package/test-suite/catalogs/rn-calls-v5.json +134 -0
  268. package/test-suite/catalogs/rn-sdk-v4.json +672 -0
  269. package/test-suite/catalogs/rn-v5.json +449 -0
  270. package/test-suite/catalogs/sdk-android-v5.json +514 -0
  271. package/test-suite/catalogs/sdk-android-v5.symbols.txt +254 -0
  272. package/test-suite/catalogs/sdk-jsv4.json +800 -0
  273. package/test-suite/catalogs/web-calls-v5.json +195 -0
  274. package/test-suite/catalogs/web-v7.json +1243 -0
  275. package/test-suite/scripts/build-registry.mjs +113 -0
  276. package/test-suite/scripts/catalog-refresh-dart.mjs +151 -0
  277. package/test-suite/scripts/catalog-refresh.mjs +100 -0
  278. package/test-suite/scripts/lint-skills.mjs +932 -0
  279. package/test-suite/scripts/measure-tokens.mjs +169 -0
  280. package/test-suite/scripts/typecheck-fences-dart.mjs +437 -0
  281. package/test-suite/scripts/typecheck-fences-kotlin.mjs +269 -0
  282. package/test-suite/scripts/typecheck-fences.mjs +206 -0
  283. package/test-suite/scripts/verify-catalog.mjs +242 -0
  284. package/test-suite/scripts/verify-contract-fences.mjs +94 -0
  285. package/test-suite/scripts/verify-detection.mjs +178 -0
  286. package/test-suite/scripts/verify-docs-base.mjs +91 -0
  287. package/test-suite/scripts/verify-family-agnostic.mjs +134 -0
  288. package/test-suite/scripts/verify-golden-path.mjs +138 -0
  289. package/test-suite/scripts/verify-oracle-components.mjs +133 -0
  290. package/test-suite/scripts/verify-template-bindings.mjs +148 -0
  291. package/test-suite/typecheck/angular-v5/package.json +21 -0
  292. package/test-suite/typecheck/angular-v5/tsconfig.json +21 -0
  293. package/test-suite/typecheck/flutter-v6/analysis_options.yaml +25 -0
  294. package/test-suite/typecheck/flutter-v6/pubspec.yaml +21 -0
  295. package/test-suite/typecheck/web-v7/package.json +18 -0
  296. package/test-suite/typecheck/web-v7/tsconfig.json +19 -0
  297. package/bin/install.js +0 -1003
  298. package/skills/.claude-plugin/marketplace.json +0 -86
  299. package/skills/cometchat/references/asking-questions.md +0 -48
  300. package/skills/cometchat-android-v5/SKILL.md +0 -121
  301. package/skills/cometchat-android-v5-calls/SKILL.md +0 -429
  302. package/skills/cometchat-android-v5-calls/references/README.md +0 -53
  303. package/skills/cometchat-android-v5-calls/references/add-calls-to-existing-chat.md +0 -197
  304. package/skills/cometchat-android-v5-calls/references/audio-controls.md +0 -91
  305. package/skills/cometchat-android-v5-calls/references/background-handling.md +0 -168
  306. package/skills/cometchat-android-v5-calls/references/call-layouts.md +0 -131
  307. package/skills/cometchat-android-v5-calls/references/call-logs.md +0 -113
  308. package/skills/cometchat-android-v5-calls/references/call-session.md +0 -274
  309. package/skills/cometchat-android-v5-calls/references/custom-ui.md +0 -150
  310. package/skills/cometchat-android-v5-calls/references/event-listeners.md +0 -123
  311. package/skills/cometchat-android-v5-calls/references/group-calls.md +0 -205
  312. package/skills/cometchat-android-v5-calls/references/idle-timeout.md +0 -117
  313. package/skills/cometchat-android-v5-calls/references/in-call-chat.md +0 -134
  314. package/skills/cometchat-android-v5-calls/references/join-session.md +0 -120
  315. package/skills/cometchat-android-v5-calls/references/migration-v4-to-v5.md +0 -222
  316. package/skills/cometchat-android-v5-calls/references/participant-management.md +0 -110
  317. package/skills/cometchat-android-v5-calls/references/picture-in-picture.md +0 -106
  318. package/skills/cometchat-android-v5-calls/references/raise-hand.md +0 -248
  319. package/skills/cometchat-android-v5-calls/references/recording.md +0 -101
  320. package/skills/cometchat-android-v5-calls/references/ringing-integration.md +0 -152
  321. package/skills/cometchat-android-v5-calls/references/screen-sharing.md +0 -78
  322. package/skills/cometchat-android-v5-calls/references/server-fcm-voip.md +0 -215
  323. package/skills/cometchat-android-v5-calls/references/session-settings.md +0 -121
  324. package/skills/cometchat-android-v5-calls/references/setup.md +0 -137
  325. package/skills/cometchat-android-v5-calls/references/share-invite.md +0 -156
  326. package/skills/cometchat-android-v5-calls/references/video-controls.md +0 -87
  327. package/skills/cometchat-android-v5-calls/references/voip-calling.md +0 -526
  328. package/skills/cometchat-android-v5-components/SKILL.md +0 -431
  329. package/skills/cometchat-android-v5-core/SKILL.md +0 -486
  330. package/skills/cometchat-android-v5-customization/SKILL.md +0 -469
  331. package/skills/cometchat-android-v5-extensions/SKILL.md +0 -127
  332. package/skills/cometchat-android-v5-features/SKILL.md +0 -131
  333. package/skills/cometchat-android-v5-placement/SKILL.md +0 -277
  334. package/skills/cometchat-android-v5-production/SKILL.md +0 -95
  335. package/skills/cometchat-android-v5-push/SKILL.md +0 -619
  336. package/skills/cometchat-android-v5-testing/SKILL.md +0 -188
  337. package/skills/cometchat-android-v5-theming/SKILL.md +0 -167
  338. package/skills/cometchat-android-v5-troubleshooting/SKILL.md +0 -74
  339. package/skills/cometchat-android-v6/SKILL.md +0 -108
  340. package/skills/cometchat-android-v6-calls/references/add-calls-to-existing-chat.md +0 -97
  341. package/skills/cometchat-android-v6-calls/references/advanced-features.md +0 -87
  342. package/skills/cometchat-android-v6-calls/references/call-layouts.md +0 -100
  343. package/skills/cometchat-android-v6-calls/references/call-session.md +0 -163
  344. package/skills/cometchat-android-v6-calls/references/device-management.md +0 -172
  345. package/skills/cometchat-android-v6-calls/references/group-calls.md +0 -191
  346. package/skills/cometchat-android-v6-calls/references/idle-timeout.md +0 -110
  347. package/skills/cometchat-android-v6-calls/references/in-call-chat.md +0 -141
  348. package/skills/cometchat-android-v6-calls/references/raise-hand.md +0 -188
  349. package/skills/cometchat-android-v6-calls/references/ringing-integration.md +0 -176
  350. package/skills/cometchat-android-v6-calls/references/server-fcm-voip.md +0 -127
  351. package/skills/cometchat-android-v6-calls/references/share-invite.md +0 -105
  352. package/skills/cometchat-android-v6-compose-theming/SKILL.md +0 -250
  353. package/skills/cometchat-android-v6-kotlin-theming/SKILL.md +0 -233
  354. package/skills/cometchat-angular-calls/SKILL.md +0 -380
  355. package/skills/cometchat-angular-calls/references/add-calls-to-existing-chat.md +0 -96
  356. package/skills/cometchat-angular-calls/references/call-layouts.md +0 -123
  357. package/skills/cometchat-angular-calls/references/call-session.md +0 -167
  358. package/skills/cometchat-angular-calls/references/custom-ui.md +0 -239
  359. package/skills/cometchat-angular-calls/references/device-management.md +0 -154
  360. package/skills/cometchat-angular-calls/references/group-calls.md +0 -433
  361. package/skills/cometchat-angular-calls/references/idle-timeout.md +0 -161
  362. package/skills/cometchat-angular-calls/references/in-call-chat.md +0 -148
  363. package/skills/cometchat-angular-calls/references/lazy-loading-pitfalls.md +0 -205
  364. package/skills/cometchat-angular-calls/references/migration-v4-to-v5.md +0 -53
  365. package/skills/cometchat-angular-calls/references/ngzone-and-async-callbacks.md +0 -184
  366. package/skills/cometchat-angular-calls/references/picture-in-picture.md +0 -285
  367. package/skills/cometchat-angular-calls/references/raise-hand.md +0 -172
  368. package/skills/cometchat-angular-calls/references/recording-screen-share.md +0 -260
  369. package/skills/cometchat-angular-calls/references/ringing-integration.md +0 -133
  370. package/skills/cometchat-angular-calls/references/server-web-push-vapid.md +0 -100
  371. package/skills/cometchat-angular-calls/references/share-invite.md +0 -122
  372. package/skills/cometchat-angular-calls/references/virtual-background.md +0 -29
  373. package/skills/cometchat-angular-components/SKILL.md +0 -235
  374. package/skills/cometchat-angular-core/SKILL.md +0 -386
  375. package/skills/cometchat-angular-customization/SKILL.md +0 -616
  376. package/skills/cometchat-angular-features/SKILL.md +0 -329
  377. package/skills/cometchat-angular-patterns/SKILL.md +0 -256
  378. package/skills/cometchat-angular-placement/SKILL.md +0 -314
  379. package/skills/cometchat-angular-production/SKILL.md +0 -564
  380. package/skills/cometchat-angular-push/SKILL.md +0 -389
  381. package/skills/cometchat-angular-testing/SKILL.md +0 -605
  382. package/skills/cometchat-angular-theming/SKILL.md +0 -290
  383. package/skills/cometchat-angular-troubleshooting/SKILL.md +0 -364
  384. package/skills/cometchat-astro-patterns/SKILL.md +0 -708
  385. package/skills/cometchat-calls/SKILL.md +0 -364
  386. package/skills/cometchat-calls/references/use-case-broadcast.md +0 -199
  387. package/skills/cometchat-calls/references/use-case-marketplace.md +0 -157
  388. package/skills/cometchat-calls/references/use-case-support.md +0 -189
  389. package/skills/cometchat-calls/references/use-case-team.md +0 -180
  390. package/skills/cometchat-calls/references/use-case-telehealth.md +0 -153
  391. package/skills/cometchat-components/SKILL.md +0 -1142
  392. package/skills/cometchat-core/SKILL.md +0 -1048
  393. package/skills/cometchat-customization/SKILL.md +0 -580
  394. package/skills/cometchat-customization/references/component-catalog.md +0 -236
  395. package/skills/cometchat-features/SKILL.md +0 -861
  396. package/skills/cometchat-flutter-v5/SKILL.md +0 -173
  397. package/skills/cometchat-flutter-v5-calls/SKILL.md +0 -455
  398. package/skills/cometchat-flutter-v5-calls/references/add-calls-to-existing-chat.md +0 -193
  399. package/skills/cometchat-flutter-v5-calls/references/call-layouts.md +0 -103
  400. package/skills/cometchat-flutter-v5-calls/references/call-session.md +0 -285
  401. package/skills/cometchat-flutter-v5-calls/references/device-management.md +0 -124
  402. package/skills/cometchat-flutter-v5-calls/references/group-calls.md +0 -181
  403. package/skills/cometchat-flutter-v5-calls/references/idle-timeout.md +0 -99
  404. package/skills/cometchat-flutter-v5-calls/references/in-call-chat.md +0 -135
  405. package/skills/cometchat-flutter-v5-calls/references/migration-v4-to-v5.md +0 -210
  406. package/skills/cometchat-flutter-v5-calls/references/raise-hand.md +0 -255
  407. package/skills/cometchat-flutter-v5-calls/references/ringing-integration.md +0 -196
  408. package/skills/cometchat-flutter-v5-calls/references/server-push-bridge.md +0 -101
  409. package/skills/cometchat-flutter-v5-calls/references/share-invite.md +0 -148
  410. package/skills/cometchat-flutter-v5-conversations/SKILL.md +0 -118
  411. package/skills/cometchat-flutter-v5-core/SKILL.md +0 -239
  412. package/skills/cometchat-flutter-v5-customization/SKILL.md +0 -358
  413. package/skills/cometchat-flutter-v5-events/SKILL.md +0 -156
  414. package/skills/cometchat-flutter-v5-messages/SKILL.md +0 -259
  415. package/skills/cometchat-flutter-v5-production/SKILL.md +0 -216
  416. package/skills/cometchat-flutter-v5-push/SKILL.md +0 -285
  417. package/skills/cometchat-flutter-v5-testing/SKILL.md +0 -401
  418. package/skills/cometchat-flutter-v5-theming/SKILL.md +0 -161
  419. package/skills/cometchat-flutter-v5-troubleshooting/SKILL.md +0 -130
  420. package/skills/cometchat-flutter-v5-users-groups/SKILL.md +0 -152
  421. package/skills/cometchat-flutter-v6/SKILL.md +0 -446
  422. package/skills/cometchat-flutter-v6-calls/references/add-calls-to-existing-chat.md +0 -136
  423. package/skills/cometchat-flutter-v6-calls/references/advanced-features.md +0 -89
  424. package/skills/cometchat-flutter-v6-calls/references/call-layouts.md +0 -105
  425. package/skills/cometchat-flutter-v6-calls/references/call-session.md +0 -229
  426. package/skills/cometchat-flutter-v6-calls/references/device-management.md +0 -105
  427. package/skills/cometchat-flutter-v6-calls/references/group-calls.md +0 -190
  428. package/skills/cometchat-flutter-v6-calls/references/idle-timeout.md +0 -88
  429. package/skills/cometchat-flutter-v6-calls/references/in-call-chat.md +0 -125
  430. package/skills/cometchat-flutter-v6-calls/references/raise-hand.md +0 -275
  431. package/skills/cometchat-flutter-v6-calls/references/ringing-integration.md +0 -171
  432. package/skills/cometchat-flutter-v6-calls/references/server-push-bridge.md +0 -93
  433. package/skills/cometchat-flutter-v6-calls/references/share-invite.md +0 -102
  434. package/skills/cometchat-flutter-v6-conversations/SKILL.md +0 -238
  435. package/skills/cometchat-flutter-v6-messages/SKILL.md +0 -384
  436. package/skills/cometchat-flutter-v6-theming/SKILL.md +0 -293
  437. package/skills/cometchat-flutter-v6-users-groups/SKILL.md +0 -224
  438. package/skills/cometchat-ios/SKILL.md +0 -325
  439. package/skills/cometchat-ios-calls/references/add-calls-to-existing-chat.md +0 -181
  440. package/skills/cometchat-ios-calls/references/audio-modes-and-controls.md +0 -45
  441. package/skills/cometchat-ios-calls/references/avaudiosession-routing.md +0 -188
  442. package/skills/cometchat-ios-calls/references/call-layouts.md +0 -76
  443. package/skills/cometchat-ios-calls/references/call-session.md +0 -218
  444. package/skills/cometchat-ios-calls/references/callkit-and-pushkit.md +0 -357
  445. package/skills/cometchat-ios-calls/references/custom-ui.md +0 -322
  446. package/skills/cometchat-ios-calls/references/device-management.md +0 -171
  447. package/skills/cometchat-ios-calls/references/group-calls.md +0 -359
  448. package/skills/cometchat-ios-calls/references/idle-timeout.md +0 -184
  449. package/skills/cometchat-ios-calls/references/in-call-chat.md +0 -179
  450. package/skills/cometchat-ios-calls/references/migration-v4-to-v5.md +0 -196
  451. package/skills/cometchat-ios-calls/references/picture-in-picture.md +0 -246
  452. package/skills/cometchat-ios-calls/references/raise-hand.md +0 -26
  453. package/skills/cometchat-ios-calls/references/recording-screen-share.md +0 -252
  454. package/skills/cometchat-ios-calls/references/ringing-integration.md +0 -143
  455. package/skills/cometchat-ios-calls/references/server-apns-pushkit.md +0 -267
  456. package/skills/cometchat-ios-calls/references/share-invite.md +0 -148
  457. package/skills/cometchat-ios-calls/references/swiftui-uikit-hosting.md +0 -246
  458. package/skills/cometchat-ios-calls/references/voip-cert-setup.md +0 -166
  459. package/skills/cometchat-ios-theming/SKILL.md +0 -667
  460. package/skills/cometchat-native-bare-patterns/SKILL.md +0 -550
  461. package/skills/cometchat-native-calls/SKILL.md +0 -671
  462. package/skills/cometchat-native-calls/references/add-calls-to-existing-chat.md +0 -203
  463. package/skills/cometchat-native-calls/references/call-layouts.md +0 -125
  464. package/skills/cometchat-native-calls/references/call-session.md +0 -182
  465. package/skills/cometchat-native-calls/references/custom-ui.md +0 -254
  466. package/skills/cometchat-native-calls/references/device-management.md +0 -158
  467. package/skills/cometchat-native-calls/references/expo-vs-bare.md +0 -179
  468. package/skills/cometchat-native-calls/references/group-calls.md +0 -296
  469. package/skills/cometchat-native-calls/references/idle-timeout.md +0 -128
  470. package/skills/cometchat-native-calls/references/in-call-chat.md +0 -145
  471. package/skills/cometchat-native-calls/references/migration-v4-to-v5.md +0 -72
  472. package/skills/cometchat-native-calls/references/picture-in-picture.md +0 -276
  473. package/skills/cometchat-native-calls/references/raise-hand.md +0 -205
  474. package/skills/cometchat-native-calls/references/recording-screen-share.md +0 -169
  475. package/skills/cometchat-native-calls/references/ringing-integration.md +0 -118
  476. package/skills/cometchat-native-calls/references/server-push-bridge.md +0 -135
  477. package/skills/cometchat-native-calls/references/server-push-payloads.md +0 -193
  478. package/skills/cometchat-native-calls/references/share-invite.md +0 -146
  479. package/skills/cometchat-native-calls/references/voip-push-end-to-end.md +0 -319
  480. package/skills/cometchat-native-components/SKILL.md +0 -628
  481. package/skills/cometchat-native-core/SKILL.md +0 -679
  482. package/skills/cometchat-native-customization/SKILL.md +0 -716
  483. package/skills/cometchat-native-expo-patterns/SKILL.md +0 -552
  484. package/skills/cometchat-native-features/SKILL.md +0 -638
  485. package/skills/cometchat-native-placement/SKILL.md +0 -509
  486. package/skills/cometchat-native-production/SKILL.md +0 -700
  487. package/skills/cometchat-native-push/SKILL.md +0 -594
  488. package/skills/cometchat-native-testing/SKILL.md +0 -582
  489. package/skills/cometchat-native-theming/SKILL.md +0 -681
  490. package/skills/cometchat-native-troubleshooting/SKILL.md +0 -501
  491. package/skills/cometchat-nextjs-patterns/SKILL.md +0 -899
  492. package/skills/cometchat-placement/SKILL.md +0 -1360
  493. package/skills/cometchat-production/SKILL.md +0 -1027
  494. package/skills/cometchat-react-calls/SKILL.md +0 -752
  495. package/skills/cometchat-react-calls/references/add-calls-to-existing-chat.md +0 -146
  496. package/skills/cometchat-react-calls/references/call-layouts.md +0 -160
  497. package/skills/cometchat-react-calls/references/call-session.md +0 -235
  498. package/skills/cometchat-react-calls/references/custom-ui.md +0 -247
  499. package/skills/cometchat-react-calls/references/device-management.md +0 -210
  500. package/skills/cometchat-react-calls/references/group-calls.md +0 -257
  501. package/skills/cometchat-react-calls/references/idle-timeout.md +0 -188
  502. package/skills/cometchat-react-calls/references/in-call-chat.md +0 -212
  503. package/skills/cometchat-react-calls/references/migration-v4-to-v5.md +0 -170
  504. package/skills/cometchat-react-calls/references/picture-in-picture.md +0 -245
  505. package/skills/cometchat-react-calls/references/raise-hand.md +0 -238
  506. package/skills/cometchat-react-calls/references/recording-screen-share.md +0 -144
  507. package/skills/cometchat-react-calls/references/ringing-integration.md +0 -255
  508. package/skills/cometchat-react-calls/references/server-web-push-vapid.md +0 -241
  509. package/skills/cometchat-react-calls/references/share-invite.md +0 -175
  510. package/skills/cometchat-react-calls/references/testing-calls-on-web.md +0 -216
  511. package/skills/cometchat-react-calls/references/virtual-background.md +0 -32
  512. package/skills/cometchat-react-calls/references/voip-and-web-push.md +0 -165
  513. package/skills/cometchat-react-patterns/SKILL.md +0 -628
  514. package/skills/cometchat-react-push/SKILL.md +0 -634
  515. package/skills/cometchat-react-router-patterns/SKILL.md +0 -758
  516. package/skills/cometchat-react-testing/SKILL.md +0 -413
  517. package/skills/cometchat-theming/SKILL.md +0 -498
  518. 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)