@ohos-cpf/3rdloop 0.0.8 → 0.0.10

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 (220) hide show
  1. package/README.md +43 -0
  2. package/lib/cli.js +38 -5
  3. package/lib/doctor.js +111 -10
  4. package/lib/knowledge.js +440 -0
  5. package/lib/mcp.js +498 -0
  6. package/package.json +6 -2
  7. package/vendor/Archive/data/.index/meta.json +7 -0
  8. package/vendor/Archive/data/.index/search.db +0 -0
  9. package/vendor/Archive/data/docs/experiences/arkts-check-tool-pitfalls-baseline-comparison.md +13 -0
  10. package/vendor/Archive/data/docs/experiences/arkts-deep-path-import-recognition.md +31 -0
  11. package/vendor/Archive/data/docs/experiences/arkts-demo-coverage-entry-file-case-mismatch.md +25 -0
  12. package/vendor/Archive/data/docs/experiences/arkts-demo-coverage-import-trailing-slash.md +20 -0
  13. package/vendor/Archive/data/docs/experiences/arkts-library-source-files-may-be-ts.md +18 -0
  14. package/vendor/Archive/data/docs/experiences/arkts-typedarray-buffer-interface-cast-compile-fixes.md +36 -0
  15. package/vendor/Archive/data/docs/experiences/arkts-xts-compile-error-clustering-fix.md +24 -0
  16. package/vendor/Archive/data/docs/experiences/arkts-xts-doc-expected-value-runtime-probe.md +35 -0
  17. package/vendor/Archive/data/docs/experiences/arkts-xts-fixture-rawfile-testability-injection.md +33 -0
  18. package/vendor/Archive/data/docs/experiences/code-linter-chinese-comment-false-positive.md +16 -0
  19. package/vendor/Archive/data/docs/experiences/esobject-new-expression-variable-tracking.md +33 -0
  20. package/vendor/Archive/data/docs/experiences/filesystem-case-sensitivity-module-resolution.md +31 -0
  21. package/vendor/Archive/data/docs/experiences/gitcode-clone-redirect-warning-normal.md +13 -0
  22. package/vendor/Archive/data/docs/experiences/kn_msgvq1w585ec8319.md +77 -0
  23. package/vendor/Archive/data/docs/experiences/kn_msovnm6rd46de72c.md +98 -0
  24. package/vendor/Archive/data/docs/experiences/kn_mspt8vntfe708576.md +87 -0
  25. package/vendor/Archive/data/docs/experiences/kn_mspu1ei77adbbb48.md +133 -0
  26. package/vendor/Archive/data/docs/experiences/kn_mspubgak8d30bfce.md +128 -0
  27. package/vendor/Archive/data/docs/experiences/kn_mspug2de3cb1f7c3.md +115 -0
  28. package/vendor/Archive/data/docs/experiences/kn_skill_opt_001.md +38 -0
  29. package/vendor/Archive/data/docs/experiences/loop-artifacts-verification-evidence-triangle.md +19 -0
  30. package/vendor/Archive/data/docs/experiences/macos-bash-replace-build-ps1.md +19 -0
  31. package/vendor/Archive/data/docs/experiences/macos-bsd-diff-q-illegal-option.md +15 -0
  32. package/vendor/Archive/data/docs/experiences/migrate-cjs-compatible-api-version-map-limit.md +17 -0
  33. package/vendor/Archive/data/docs/experiences/mp3agic-arkts-library-behavior-quirks.md +21 -0
  34. package/vendor/Archive/data/docs/experiences/ohos-face-detection-scan-api-mapping.md +15 -0
  35. package/vendor/Archive/data/docs/experiences/pr-metadata-and-diff-integrity-verification.md +12 -0
  36. package/vendor/Archive/data/docs/experiences/rn-coverage-index-signature-pseudo-member-false-negative.md +32 -0
  37. package/vendor/Archive/data/docs/experiences/rn-memory-check-severity-calibration.md +21 -0
  38. package/vendor/Archive/data/docs/experiences/rn-platform-specific-api-exclusion-evidence.md +24 -0
  39. package/vendor/Archive/data/docs/experiences/rn-upstream-version-diff-pitfalls.md +17 -0
  40. package/vendor/Archive/data/docs/experiences/rn-version-gap-risk-rating-rules.md +13 -0
  41. package/vendor/Archive/data/docs/experiences/rn-view-lib-native-contract-diff-fabric-spec.md +16 -0
  42. package/vendor/Archive/data/docs/experiences/rnoh-adapter-package-version-field-semantics.md +18 -0
  43. package/vendor/Archive/data/docs/experiences/rnoh-arkts-sqlite-rows-array-format.md +18 -0
  44. package/vendor/Archive/data/docs/experiences/rnoh-dependency-residue-scan-strategy.md +18 -0
  45. package/vendor/Archive/data/docs/experiences/rnoh-example-local-lib-dep-use-tgz.md +53 -0
  46. package/vendor/Archive/data/docs/experiences/rnoh-example-prereserve-rntesterlist.md +17 -0
  47. package/vendor/Archive/data/docs/experiences/rnoh-example-template-compatiblesdkversion-upgrade.md +29 -0
  48. package/vendor/Archive/data/docs/experiences/rnoh-example-turbomodule-shell-adaptation-checklist.md +41 -0
  49. package/vendor/Archive/data/docs/experiences/rnoh-mcp-build-project-tool-risk.md +18 -0
  50. package/vendor/Archive/data/docs/experiences/rnoh-npm-devdependencies-version-precheck.md +29 -0
  51. package/vendor/Archive/data/docs/experiences/rnoh-repo-baseline-version-verification.md +13 -0
  52. package/vendor/Archive/data/docs/experiences/rnoh-repo-upstream-directory-mapping.md +18 -0
  53. package/vendor/Archive/data/docs/experiences/rnoh-stateless-library-zero-leak-verification.md +31 -0
  54. package/vendor/Archive/data/docs/experiences/rnoh-template-npmrc-credential-removal.md +15 -0
  55. package/vendor/Archive/data/docs/experiences/rnoh-turbomodule-codegen-wiring-verification.md +19 -0
  56. package/vendor/Archive/data/docs/experiences/rnoh-turbomodule-cpp-methodmap-compatibility-check.md +20 -0
  57. package/vendor/Archive/data/docs/experiences/scenario-doc-vs-source-signature-diff-four-patterns.md +24 -0
  58. package/vendor/Archive/data/docs/experiences/static-analysis-grep-cross-validation.md +29 -0
  59. package/vendor/Archive/demo.js +489 -0
  60. package/vendor/Archive/index.js +43 -0
  61. package/vendor/Archive/package.json +16 -0
  62. package/vendor/Archive/src/constants.js +83 -0
  63. package/vendor/Archive/src/data/stopwords.txt +110 -0
  64. package/vendor/Archive/src/data/synonyms.json +25 -0
  65. package/vendor/Archive/src/data/terms.txt +59 -0
  66. package/vendor/Archive/src/db/sqlite-backend.js +312 -0
  67. package/vendor/Archive/src/db/sqlite-schema.js +64 -0
  68. package/vendor/Archive/src/engine.js +501 -0
  69. package/vendor/Archive/src/index/index-manager.js +203 -0
  70. package/vendor/Archive/src/index/index-state.js +94 -0
  71. package/vendor/Archive/src/index/search-text-builder.js +106 -0
  72. package/vendor/Archive/src/index.js +22 -0
  73. package/vendor/Archive/src/parser/api-identifiers.js +121 -0
  74. package/vendor/Archive/src/parser/api-suffixes.js +48 -0
  75. package/vendor/Archive/src/parser/heading-normalize.js +40 -0
  76. package/vendor/Archive/src/parser/markdown-splitter.js +215 -0
  77. package/vendor/Archive/src/search/catalog-routing.js +87 -0
  78. package/vendor/Archive/src/search/fts-search.js +289 -0
  79. package/vendor/Archive/src/search/query-normalizer.js +159 -0
  80. package/vendor/Archive/src/search/query-rewriter.js +72 -0
  81. package/vendor/Archive/src/search/search-engine.js +72 -0
  82. package/vendor/Archive/src/search/snippet.js +64 -0
  83. package/vendor/Archive/src/store/dir-store.js +103 -0
  84. package/vendor/Archive/src/store/doc-store.js +36 -0
  85. package/vendor/Archive/src/tokenizer/lexicon.js +151 -0
  86. package/vendor/Archive/src/tokenizer/tokenizer.js +167 -0
  87. package/vendor/Archive/src/types.js +86 -0
  88. package/vendor/Archive/src/utils/hash.js +16 -0
  89. package/vendor/Archive/src/utils/lock.js +73 -0
  90. package/vendor/Archive/src/utils/path-safety.js +96 -0
  91. package/vendor/Archive/src/utils/paths.js +39 -0
  92. package/vendor/BadCase/rn/INDEX.md +127 -0
  93. package/vendor/BadCase/rn/cases/KI-001-webview/350/247/206/351/242/221/346/227/240/346/263/225/346/250/252/345/261/217.md +52 -0
  94. package/vendor/BadCase/rn/cases/KI-002-fastImage/347/203/255/346/233/264/346/226/260/345/233/276/347/211/207/345/244/261/350/264/245.md +37 -0
  95. package/vendor/BadCase/rn/cases/KI-003-wechat/347/274/251/347/225/245/345/233/276/346/234/254/345/234/260/345/233/276/347/211/207.md +62 -0
  96. package/vendor/BadCase/rn/cases/KI-004-wechat/345/233/236/350/260/203/346/227/266/345/272/217.md +47 -0
  97. package/vendor/BadCase/rn/cases/KI-005-geolocation/345/257/274/345/205/245/350/267/257/345/276/204/345/220/216/347/274/200.md +31 -0
  98. package/vendor/BadCase/rn/cases/KI-006-SmartRefreshLayout/346/231/272/350/203/275/346/214/207/351/222/210/345/264/251/346/272/203.md +55 -0
  99. package/vendor/BadCase/rn/cases/KI-007-orientation-locker/344/274/240/346/204/237/345/231/250/345/210/235/345/247/213/345/214/226.md +58 -0
  100. package/vendor/BadCase/rn/cases/KI-008-orientation-locker/344/274/240/346/204/237/345/231/250/345/274/225/347/224/250/350/256/241/346/225/260.md +47 -0
  101. package/vendor/BadCase/rn/cases/KI-009-pager-view/345/265/214/345/245/227/346/273/221/345/212/250.md +38 -0
  102. package/vendor/BadCase/rn/cases/KI-010-screens/346/211/213/345/212/277/345/206/262/347/252/201.md +48 -0
  103. package/vendor/BadCase/rn/cases/KI-011-spring-scrollview/346/211/213/345/212/277/351/207/215/345/244/215/347/273/221/345/256/232.md +49 -0
  104. package/vendor/BadCase/rn/cases/KI-012-qr-camera/346/250/252/345/261/217/351/200/202/351/205/215.md +59 -0
  105. package/vendor/BadCase/rn/cases/KI-013-webview/346/267/261/350/211/262/346/250/241/345/274/217/350/203/214/346/231/257/350/211/262.md +37 -0
  106. package/vendor/BadCase/rn/cases/KI-014-amap-geolocation/345/233/236/350/260/203/347/274/272/345/244/261.md +42 -0
  107. package/vendor/BadCase/rn/cases/KI-015-reanimated/350/277/220/350/241/214/346/227/266/346/236/220/346/236/204/345/264/251/346/272/203.md +54 -0
  108. package/vendor/BadCase/rn/cases/KI-016-fs/346/226/207/344/273/266/350/257/273/345/217/226/347/274/226/347/240/201.md +58 -0
  109. package/vendor/BadCase/rn/cases/KI-017-blob-util/345/217/202/346/225/260/347/274/226/347/240/201/351/224/231/350/257/257.md +39 -0
  110. package/vendor/BadCase/rn/cases/KI-018-modal/345/274/271/347/252/227/351/227/252/347/203/201.md +53 -0
  111. package/vendor/BadCase/rn/cases/KI-019-code-push/351/207/215/345/220/257/351/200/273/350/276/221/345/244/261/346/225/210.md +79 -0
  112. package/vendor/BadCase/rn/cases/KI-020-netinfo/346/225/217/346/204/237/344/277/241/346/201/257/346/263/204/351/234/262.md +60 -0
  113. package/vendor/BadCase/rn/cases/KI-021-video/346/234/254/345/234/260/350/247/206/351/242/221/346/222/255/346/224/276/345/274/202/345/270/270.md +79 -0
  114. package/vendor/BadCase/rn/cases/KI-022-audio-recorder-player/346/236/232/344/270/276/347/274/272/345/244/261.md +38 -0
  115. package/vendor/BadCase/rn/cases/KI-023-svg/346/270/220/345/217/230/347/273/247/346/211/277/345/244/261/346/225/210.md +62 -0
  116. package/vendor/BadCase/rn/generalization-log.md +55 -0
  117. package/vendor/BadCase/rn/pr-info/rntpc_react-native-SmartRefreshLayout-32.json +328 -0
  118. package/vendor/BadCase/rn/pr-info/rntpc_react-native-SmartRefreshLayout-32.md +382 -0
  119. package/vendor/BadCase/rn/pr-info/rntpc_react-native-amap-geolocation-27.json +1351 -0
  120. package/vendor/BadCase/rn/pr-info/rntpc_react-native-amap-geolocation-27.md +1176 -0
  121. package/vendor/BadCase/rn/pr-info/rntpc_react-native-audio-recorder-player-22.json +538 -0
  122. package/vendor/BadCase/rn/pr-info/rntpc_react-native-audio-recorder-player-22.md +1488 -0
  123. package/vendor/BadCase/rn/pr-info/rntpc_react-native-blob-util-23.json +211 -0
  124. package/vendor/BadCase/rn/pr-info/rntpc_react-native-blob-util-23.md +35 -0
  125. package/vendor/BadCase/rn/pr-info/rntpc_react-native-code-push-17.json +2048 -0
  126. package/vendor/BadCase/rn/pr-info/rntpc_react-native-code-push-17.md +3866 -0
  127. package/vendor/BadCase/rn/pr-info/rntpc_react-native-fast-image-102.json +198 -0
  128. package/vendor/BadCase/rn/pr-info/rntpc_react-native-fast-image-102.md +40 -0
  129. package/vendor/BadCase/rn/pr-info/rntpc_react-native-fs-38.json +751 -0
  130. package/vendor/BadCase/rn/pr-info/rntpc_react-native-fs-38.md +883 -0
  131. package/vendor/BadCase/rn/pr-info/rntpc_react-native-geolocation-24.json +1544 -0
  132. package/vendor/BadCase/rn/pr-info/rntpc_react-native-geolocation-24.md +2598 -0
  133. package/vendor/BadCase/rn/pr-info/rntpc_react-native-modal-20.json +246 -0
  134. package/vendor/BadCase/rn/pr-info/rntpc_react-native-modal-20.md +554 -0
  135. package/vendor/BadCase/rn/pr-info/rntpc_react-native-netinfo-31.json +211 -0
  136. package/vendor/BadCase/rn/pr-info/rntpc_react-native-netinfo-31.md +54 -0
  137. package/vendor/BadCase/rn/pr-info/rntpc_react-native-orientation-locker-45.json +1626 -0
  138. package/vendor/BadCase/rn/pr-info/rntpc_react-native-orientation-locker-45.md +2213 -0
  139. package/vendor/BadCase/rn/pr-info/rntpc_react-native-orientation-locker-51.json +208 -0
  140. package/vendor/BadCase/rn/pr-info/rntpc_react-native-orientation-locker-51.md +77 -0
  141. package/vendor/BadCase/rn/pr-info/rntpc_react-native-pager-view-32.json +377 -0
  142. package/vendor/BadCase/rn/pr-info/rntpc_react-native-pager-view-32.md +174 -0
  143. package/vendor/BadCase/rn/pr-info/rntpc_react-native-qr-decode-image-camera-37.json +232 -0
  144. package/vendor/BadCase/rn/pr-info/rntpc_react-native-qr-decode-image-camera-37.md +194 -0
  145. package/vendor/BadCase/rn/pr-info/rntpc_react-native-reanimated-82.json +198 -0
  146. package/vendor/BadCase/rn/pr-info/rntpc_react-native-reanimated-82.md +67 -0
  147. package/vendor/BadCase/rn/pr-info/rntpc_react-native-screens-87.json +198 -0
  148. package/vendor/BadCase/rn/pr-info/rntpc_react-native-screens-87.md +38 -0
  149. package/vendor/BadCase/rn/pr-info/rntpc_react-native-screens-93.json +208 -0
  150. package/vendor/BadCase/rn/pr-info/rntpc_react-native-screens-93.md +34 -0
  151. package/vendor/BadCase/rn/pr-info/rntpc_react-native-spring-scrollview-38.json +222 -0
  152. package/vendor/BadCase/rn/pr-info/rntpc_react-native-spring-scrollview-38.md +56 -0
  153. package/vendor/BadCase/rn/pr-info/rntpc_react-native-svg-117.json +463 -0
  154. package/vendor/BadCase/rn/pr-info/rntpc_react-native-svg-117.md +383 -0
  155. package/vendor/BadCase/rn/pr-info/rntpc_react-native-video-66.json +464 -0
  156. package/vendor/BadCase/rn/pr-info/rntpc_react-native-video-66.md +565 -0
  157. package/vendor/BadCase/rn/pr-info/rntpc_react-native-webview-112.json +198 -0
  158. package/vendor/BadCase/rn/pr-info/rntpc_react-native-webview-112.md +47 -0
  159. package/vendor/BadCase/rn/pr-info/rntpc_react-native-webview-121.json +232 -0
  160. package/vendor/BadCase/rn/pr-info/rntpc_react-native-webview-121.md +422 -0
  161. package/vendor/BadCase/rn/pr-info/rntpc_react-native-wechat-lib-15.json +295 -0
  162. package/vendor/BadCase/rn/pr-info/rntpc_react-native-wechat-lib-15.md +1038 -0
  163. package/vendor/BadCase/rn/rules/R-01-/345/205/250/345/261/217/347/252/227/345/217/243/347/212/266/346/200/201/347/256/241/347/220/206/345/256/214/346/225/264/346/200/247.md +20 -0
  164. package/vendor/BadCase/rn/rules/R-02-/350/265/204/346/272/220URI/345/275/242/346/200/201/345/210/206/346/224/257/350/246/206/347/233/226.md +21 -0
  165. package/vendor/BadCase/rn/rules/R-03-/351/231/204/345/261/236/346/223/215/344/275/234/345/244/261/350/264/245/351/230/273/346/226/255/344/270/273/346/265/201/347/250/213.md +20 -0
  166. package/vendor/BadCase/rn/rules/R-04-/345/274/202/346/255/245/345/233/236/350/260/203/346/263/250/345/206/214/346/227/266/345/272/217.md +20 -0
  167. package/vendor/BadCase/rn/rules/R-05-/346/250/241/345/235/227/345/257/274/345/205/245/350/267/257/345/276/204/350/247/204/350/214/203.md +19 -0
  168. package/vendor/BadCase/rn/rules/R-06-/344/274/240/346/204/237/345/231/250/347/241/254/344/273/266/346/235/203/351/231/220/346/214/211/351/234/200/350/216/267/345/217/226.md +21 -0
  169. package/vendor/BadCase/rn/rules/R-07-/346/231/272/350/203/275/346/214/207/351/222/210/347/224/237/345/221/275/345/221/250/346/234/237/347/256/241/347/220/206.md +20 -0
  170. package/vendor/BadCase/rn/rules/R-08-/346/211/213/345/212/277/344/272/213/344/273/266/346/263/250/345/206/214/344/270/216/345/206/262/347/252/201/345/244/204/347/220/206.md +22 -0
  171. package/vendor/BadCase/rn/rules/R-09-/346/250/252/347/253/226/345/261/217/345/244/232/345/275/242/346/200/201/345/270/203/345/261/200/351/200/202/351/205/215.md +20 -0
  172. package/vendor/BadCase/rn/rules/R-10-/346/267/261/350/211/262/346/250/241/345/274/217/344/270/273/351/242/230/351/242/234/350/211/262/351/200/202/351/205/215.md +19 -0
  173. package/vendor/BadCase/rn/rules/R-11-/346/216/245/345/217/243/345/233/236/350/260/203/345/256/236/347/216/260/345/256/214/346/225/264/346/200/247.md +20 -0
  174. package/vendor/BadCase/rn/rules/R-12-/345/216/237/347/224/237/350/277/220/350/241/214/346/227/266/350/265/204/346/272/220/346/236/220/346/236/204/346/227/266/345/272/217.md +20 -0
  175. package/vendor/BadCase/rn/rules/R-13-/346/226/207/344/273/266/346/225/260/346/215/256/347/274/226/347/240/201/344/270/216/346/240/274/345/274/217/345/205/274/345/256/271.md +21 -0
  176. package/vendor/BadCase/rn/rules/R-14-/345/212/250/347/224/273/345/210/235/345/247/213/345/214/226/346/227/266/345/272/217/344/270/216/347/212/266/346/200/201/345/220/214/346/255/245.md +20 -0
  177. package/vendor/BadCase/rn/rules/R-15-/347/212/266/346/200/201/346/214/201/344/271/205/345/214/226/344/270/216/351/207/215/345/220/257/351/200/273/350/276/221/344/270/200/350/207/264/346/200/247.md +20 -0
  178. package/vendor/BadCase/rn/rules/R-16-/346/225/217/346/204/237/344/277/241/346/201/257/346/227/245/345/277/227/346/263/204/351/234/262.md +19 -0
  179. package/vendor/BadCase/rn/rules/R-17-/345/252/222/344/275/223/350/265/204/346/272/220/347/224/237/345/221/275/345/221/250/346/234/237/344/270/216/351/224/231/350/257/257/345/244/204/347/220/206.md +21 -0
  180. package/vendor/BadCase/rn/rules/R-18-/350/203/275/345/212/233/346/236/232/344/270/276/351/205/215/347/275/256/345/256/214/346/225/264/346/200/247.md +19 -0
  181. package/vendor/BadCase/rn/rules/R-19-/345/233/276/345/275/242/346/270/262/346/237/223/345/261/236/346/200/247/347/273/247/346/211/277/344/270/216/351/207/215/347/275/256.md +19 -0
  182. package/vendor/MCP/README.md +490 -0
  183. package/vendor/MCP/config.json +29 -0
  184. package/vendor/MCP/package.json +23 -0
  185. package/vendor/MCP/scripts/analyze-demo-coverage.cjs +1203 -0
  186. package/vendor/MCP/scripts/analyze-xts-coverage.cjs +1245 -0
  187. package/vendor/MCP/scripts/deveco_docs.js +247 -0
  188. package/vendor/MCP/scripts/extract-interfaces.cjs +1487 -0
  189. package/vendor/MCP/scripts/flutter-analyze-demo-coverage.cjs +666 -0
  190. package/vendor/MCP/scripts/flutter-analyze-xts-coverage.cjs +684 -0
  191. package/vendor/MCP/scripts/flutter-extract-interfaces.cjs +1251 -0
  192. package/vendor/MCP/scripts/flutter-render-spec-doc.cjs +351 -0
  193. package/vendor/MCP/scripts/render-spec-doc.cjs +347 -0
  194. package/vendor/MCP/scripts/rn-analyze-demo-coverage.cjs +645 -0
  195. package/vendor/MCP/scripts/rn-analyze-test-coverage.cjs +614 -0
  196. package/vendor/MCP/scripts/rn-extract-interfaces.cjs +1462 -0
  197. package/vendor/MCP/scripts/rn-render-spec-doc.cjs +327 -0
  198. package/vendor/MCP/scripts/rn-scan-exports.cjs +1336 -0
  199. package/vendor/MCP/src/client/MCPClientPool.js +220 -0
  200. package/vendor/MCP/src/config/ConfigLoader.js +189 -0
  201. package/vendor/MCP/src/executor/ScriptExecutor.js +110 -0
  202. package/vendor/MCP/src/gateway/Gateway.js +451 -0
  203. package/vendor/MCP/src/index.js +87 -0
  204. package/vendor/MCP/src/library/KBToolProvider.js +229 -0
  205. package/vendor/MCP/src/library/logger.js +60 -0
  206. package/vendor/MCP/src/registry/ScriptRegistry.js +238 -0
  207. package/vendor/MCP/src/registry/ToolRegistry.js +111 -0
  208. package/vendor/MCP/src/types.js +115 -0
  209. package/vendor/Server/Skills/arkts-library-test-coverage-check/references/MCP_TOOL_USAGE.md +4 -2
  210. package/vendor/Server/Skills/arkts-library-xts-coverage/SKILL.md +3 -3
  211. package/vendor/Server/Skills/knowledge-import/SKILL.md +1 -1
  212. package/vendor/Server/Skills/knowledge-import/references/MCP_TOOL_USAGE.md +12 -4
  213. package/vendor/Server/Skills/ohos-lib-pr-push/SKILL.md +5 -4
  214. package/vendor/Server/Skills/rn-library-issue-generalizer/SKILL.md +2 -2
  215. package/vendor/Server/Skills/rn-library-known-issue-check/SKILL.md +2 -2
  216. package/vendor/Server/Skills/rnoh-lib-demo-coverage/SKILL.md +1 -2
  217. package/vendor/Server/Skills/rnoh-lib-test-align/references/port-test-demo-guide.md +1 -1
  218. package/vendor/Server/Skills/rnoh-lib-xts-coverage/SKILL.md +1 -2
  219. package/vendor/Server/package.json +5 -1
  220. package/vendor/VERSION +3 -3
@@ -0,0 +1,246 @@
1
+ {
2
+ "pr": {
3
+ "id": 8856149,
4
+ "html_url": "https://gitcode.com/CPF-RN/rntpc_react-native-modal/merge_requests/20",
5
+ "number": 20,
6
+ "state": "merged",
7
+ "title": "fix:解决升级到rnoh新框架导致的打开modal闪屏问题及更新readme文档",
8
+ "url": "https://api.gitcode.com/api/v5/repos/CPF-RN/rntpc_react-native-modal/pulls/20",
9
+ "issue_url": "https://api.gitcode.com/api/v5/repos/CPF-RN/rntpc_react-native-modal/pulls/20/issues",
10
+ "body": "fix:解决升级到rnoh新框架导致的打开modal闪屏问题 [#14](https://gitcode.com/CPF-RN/rntpc_react-native-modal/issues/14) ",
11
+ "assignees_number": 2,
12
+ "assignees": [
13
+ {
14
+ "id": "6731c8f2fbbddc0c200a6019",
15
+ "login": "zhu_chengcheng",
16
+ "name": "zhu_chengcheng",
17
+ "avatar_url": "https://cdn-img.gitcode.com/fe/bd/f406eb600317d9bbb6a5c23042b49e5193dfbb7a63ee407f5bbfcbabcd177af1.jpg",
18
+ "html_url": "https://gitcode.com/zhu_chengcheng",
19
+ "assignee": true,
20
+ "code_owner": false,
21
+ "accept": false
22
+ },
23
+ {
24
+ "id": "67fdb69df01e3c566929edd4",
25
+ "login": "gcw_N7oHqLFR",
26
+ "name": "huang_jy",
27
+ "avatar_url": "",
28
+ "html_url": "https://gitcode.com/gcw_N7oHqLFR",
29
+ "assignee": true,
30
+ "code_owner": false,
31
+ "accept": true
32
+ }
33
+ ],
34
+ "testers": [
35
+ {
36
+ "id": "6541ccea82d8f837210e92c3",
37
+ "login": "openharmony_ci",
38
+ "name": "openharmony_ci",
39
+ "avatar_url": "https://cdn-img.gitcode.com/cb/be/5cb10620b4e9195576142df69cd44bb84df15d769c2a04eff5bf7324b903022c.png?time=1723462328974",
40
+ "html_url": "https://gitcode.com/openharmony_ci",
41
+ "assignee": false,
42
+ "code_owner": false,
43
+ "accept": true
44
+ }
45
+ ],
46
+ "approval_reviewers": [],
47
+ "labels": [
48
+ {
49
+ "id": 13243899,
50
+ "color": "#428BCA",
51
+ "name": "dco检查成功",
52
+ "repository_id": 4368931,
53
+ "created_at": "2026-06-24T15:04:04+08:00",
54
+ "updated_at": "2026-07-09T16:50:53+08:00"
55
+ },
56
+ {
57
+ "id": 13243933,
58
+ "color": "#428BCA",
59
+ "name": "编译成功",
60
+ "repository_id": 4368931,
61
+ "created_at": "2026-06-24T22:07:11+08:00",
62
+ "updated_at": "2026-07-10T16:55:49+08:00"
63
+ },
64
+ {
65
+ "id": 13243934,
66
+ "color": "#428BCA",
67
+ "name": "静态检查成功",
68
+ "repository_id": 4368931,
69
+ "created_at": "2026-06-24T22:07:33+08:00",
70
+ "updated_at": "2026-07-10T16:56:50+08:00"
71
+ }
72
+ ],
73
+ "created_at": "2026-07-09T16:50:08+08:00",
74
+ "updated_at": "2026-07-10T17:46:03+08:00",
75
+ "closed_at": "2026-07-10T17:46:03+08:00",
76
+ "merged_at": "2026-07-10T17:46:03+08:00",
77
+ "merged_by": {
78
+ "id": "6541ccea82d8f837210e92c3",
79
+ "login": "openharmony_ci",
80
+ "name": "openharmony_ci",
81
+ "avatar_url": "https://cdn-img.gitcode.com/cb/be/5cb10620b4e9195576142df69cd44bb84df15d769c2a04eff5bf7324b903022c.png?time=1723462328974",
82
+ "html_url": "https://gitcode.com/openharmony_ci"
83
+ },
84
+ "draft": false,
85
+ "can_merge_check": true,
86
+ "prune_branch": false,
87
+ "mergeable": true,
88
+ "user": {
89
+ "id": "6731c0e6fbbddc0c200a58bb",
90
+ "login": "cuijiaojiao1",
91
+ "name": "cuijiaojiao1",
92
+ "avatar_url": "https://cdn-img.gitcode.com/db/be/40716dbb72575e3df57f0d6f71d7566c9acaea74584916e1e3d65fe759ec5bab.jpg",
93
+ "html_url": "https://gitcode.com/cuijiaojiao1"
94
+ },
95
+ "head": {
96
+ "ref": "77Visible",
97
+ "sha": "13503be9229d33459829dc5dc36ec0b52a0536b8",
98
+ "label": "77Visible",
99
+ "repo": {
100
+ "path": "rntpc_react-native-modal",
101
+ "name": "rntpc_react-native-modal",
102
+ "namespace": {
103
+ "path": "cuijiaojiao1"
104
+ },
105
+ "full_name": "cuijiaojiao1/rntpc_react-native-modal",
106
+ "html_url": "https://gitcode.com/cuijiaojiao1/rntpc_react-native-modal.git"
107
+ },
108
+ "user": {
109
+ "id": "6731c0e6fbbddc0c200a58bb",
110
+ "login": "cuijiaojiao1",
111
+ "name": "cuijiaojiao1",
112
+ "avatar_url": "https://cdn-img.gitcode.com/db/be/40716dbb72575e3df57f0d6f71d7566c9acaea74584916e1e3d65fe759ec5bab.jpg",
113
+ "html_url": "https://gitcode.com/cuijiaojiao1"
114
+ }
115
+ },
116
+ "base": {
117
+ "ref": "br_rnoh0.72",
118
+ "sha": "69cbcdb92d438c06ecdac78ca103ee3021de50dc",
119
+ "label": "br_rnoh0.72",
120
+ "repo": {
121
+ "path": "rntpc_react-native-modal",
122
+ "name": "rntpc_react-native-modal",
123
+ "namespace": {
124
+ "path": "CPF-RN"
125
+ },
126
+ "full_name": "CPF-RN/rntpc_react-native-modal",
127
+ "html_url": "https://gitcode.com/CPF-RN/rntpc_react-native-modal.git"
128
+ }
129
+ },
130
+ "mergeable_state": {
131
+ "merge_request_id": 8856149,
132
+ "state": true,
133
+ "status_without_user_auth": true,
134
+ "conflict_passed": true,
135
+ "branch_missing_passed": true,
136
+ "non_ff_passed": true,
137
+ "mr_state_passed": true,
138
+ "merged_by_user_passed": true,
139
+ "work_in_progress_passed": true,
140
+ "resolve_discussion_passed": true,
141
+ "ci_state_passed": true,
142
+ "merge_by_self_passed": true,
143
+ "can_force_merge": true,
144
+ "approval_reviewers_required_passed": true,
145
+ "approval_approvers_required_passed": true,
146
+ "approval_testers_required_passed": true,
147
+ "merge_request_switch": {
148
+ "review_mode": "approval",
149
+ "merge_method": "merge",
150
+ "only_allow_merge_if_all_discussions_are_resolved": true,
151
+ "disable_merge_by_self": true,
152
+ "only_allow_merge_if_pipeline_succeeds": false,
153
+ "disable_squash_merge": false,
154
+ "squash_merge_with_no_merge_commit": false,
155
+ "approval_required_reviewers_count": 0,
156
+ "approval_required_reviewers_branch": "*",
157
+ "add_notes_after_merged": true,
158
+ "mark_auto_merged_mr_as_closed": false,
159
+ "can_force_merge": true,
160
+ "can_reopen": true
161
+ },
162
+ "reason": {},
163
+ "check_tasks_num": 2,
164
+ "all_depend_merge_request_merged_passed": true,
165
+ "approval_approvers_result": 2,
166
+ "approval_testers_result": 2
167
+ },
168
+ "visibility_reason": "public",
169
+ "close_related_issue": true,
170
+ "squash_merge": false
171
+ },
172
+ "files": [
173
+ {
174
+ "sha": "13503be9229d33459829dc5dc36ec0b52a0536b8",
175
+ "filename": "README.md",
176
+ "additions": 16,
177
+ "deletions": 13,
178
+ "blob_id": "ad626a296d9d32609f3954fbbe4f5fdee3954fe2",
179
+ "blob_url": "https://gitcode.com/CPF-RN/rntpc_react-native-modal/blob/13503be9229d33459829dc5dc36ec0b52a0536b8/README.md",
180
+ "raw_url": "https://raw.gitcode.com/CPF-RN/rntpc_react-native-modal/raw/13503be9229d33459829dc5dc36ec0b52a0536b8/README.md",
181
+ "patch": "@@ -8,10 +8,11 @@\n \n 该第三方库的仓库已迁移至 Gitcode,且支持直接从 npm 下载,新的包名为:`@react-native-ohos/react-native-modal` 版本所属关系如下:\n \n-| 三方库名称 | 三方库版本 | 发布信息 | 支持 RN 版本 | Autolink | 编译 API 版本 | 社区基线版本 | npm 地址 |\n-| --------------------------------------- | ---------- | ------------------------------------------------------------------------------------------ | --------------- | -------- | ------------- | ------------ | ------------------------------------------------------------------------------------ |\n-| @react-native-ohos/react-native-modal | ~ 14.0.1 | [Gitcode Releases](https://gitcode.com/openharmony-sig/rntpc_react-native-modal/releases) | 0.77.\\*/0.82.\\* | 否 | API12+ | 14.0.0-rc.1 | [Npm Address](https://www.npmjs.com/package/@react-native-ohos/react-native-modal) |\n-| @react-native-oh-tpl/react-native-modal | ~ 13.0.1 | [Gitcode Releases](https://github.com/react-native-oh-library/react-native-modal/releases) | 0.72.\\* | 否 | API12+ | 13.0.1 | [Npm Address](https://www.npmjs.com/package/@react-native-oh-tpl/react-native-modal) |\n+| 三方库名称 | 三方库版本 | 发布信息 | 支持 RN 版本 | Autolink | 编译 API 版本 | 社区基线版本 | npm 地址 |\n+| --------------------------------------- | ------------------- | ----------------------------------------------------------------------------------------- | --------------- | -------- | ------------- | ------------ | ------------------------------------------------------------------------------------ |\n+| @react-native-ohos/react-native-modal | ~ 14.0.1 | [Gitcode Releases](https://gitcode.com/openharmony-sig/rntpc_react-native-modal/releases) | 0.77.\\*/0.82.\\* | 否 | API12+ | 14.0.0-rc.1 | [Npm Address](https://www.npmjs.com/package/@react-native-ohos/react-native-modal) |\n+| @react-native-ohos/react-native-modal | ~ 13.0.2 | [Gitcode Releases](https://gitcode.com/openharmony-sig/rntpc_react-native-modal/releases) | 0.72.\\* | 否 | API12+ | 13.0.1 | [Npm Address](https://www.npmjs.com/package/@react-native-ohos/react-native-modal) |\n+| @react-native-oh-tpl/react-native-modal | ~ 13.0.1@deprecated | [Github Releases](https://github.com/react-native-oh-library/react-native-modal/releases) | 0.72.\\* | 否 | API12+ | 13.0.1 | [Npm Address](https://www.npmjs.com/package/@react-native-oh-tpl/react-native-modal) |\n \n ## 1. 安装与使用\n \n@@ -132,21 +133,23 @@ export default DefaultModal;\n \n ## 2. Link\n \n-| | 是否支持 autolink | RN 框架版本 |\n-| ------- | ----------------- | ----------- |\n-| ~14.0.1 | No | 0.77/0.82 |\n-| ~13.0.1 | No | 0.72 |\n+| | 是否支持 autolink | RN 框架版本 |\n+| ------------------ | ----------------- | ----------- |\n+| ~14.0.1 | 否 | 0.77/0.82 |\n+| ~13.0.2 | 否 | 0.72 |\n+| ~13.0.1@deprecated | 否 | 0.72 |\n \n ## 3. 约束与限制\n \n-### 3.1. 兼容性\n+### 3.1 兼容性\n \n 请到三方库相应的 Releases 发布地址查看 Release 配套的版本信息:\n \n-| 三方库版本 | 发布信息 | 支持 RN 版本 |\n-| ---------- | -------------------------------------------------------------------------------------------------------------------------- | ------------ |\n-| 14.0.1 | [@react-native-ohos/react-native-modal Releases](https://gitcode.com/openharmony-sig/rntpc_react-native-modal/releases) | 0.77/0.82 |\n-| 13.0.1 | [@react-native-oh-tpl/react-native-modal Releases](https://github.com/react-native-oh-library/react-native-modal/releases) | 0.72 |\n+| 三方库版本 | 发布信息 | 支持 RN 版本 |\n+| ----------------- | -------------------------------------------------------------------------------------------------------------------------- | ------------ |\n+| 14.0.1 | [@react-native-ohos/react-native-modal Releases](https://gitcode.com/openharmony-sig/rntpc_react-native-modal/releases) | 0.77/0.82 |\n+| 13.0.2 | [@react-native-ohos/react-native-modal Releases](https://gitcode.com/openharmony-sig/rntpc_react-native-modal/releases) | 0.72 |\n+| 13.0.1@deprecated | [@react-native-oh-tpl/react-native-modal Releases](https://github.com/react-native-oh-library/react-native-modal/releases) | 0.72 |\n \n ## 4. 属性\n \n",
182
+ "target_branch": "br_rnoh0.72",
183
+ "source_branch": "77Visible",
184
+ "source_project": {
185
+ "id": 9515182,
186
+ "full_name": "cuijiaojiao1/rntpc_react-native-modal",
187
+ "human_name": "cuijiaojiao1 / rntpc_react-native-modal",
188
+ "path": "rntpc_react-native-modal"
189
+ },
190
+ "target_project": {
191
+ "id": 4368931,
192
+ "full_name": "CPF-RN/rntpc_react-native-modal",
193
+ "human_name": "CPF-RN / rntpc_react-native-modal",
194
+ "path": "rntpc_react-native-modal"
195
+ }
196
+ },
197
+ {
198
+ "sha": "13503be9229d33459829dc5dc36ec0b52a0536b8",
199
+ "filename": "README_en.md",
200
+ "additions": 15,
201
+ "deletions": 12,
202
+ "blob_id": "7c8610e01c5b148b34d2fad8314243cdb970414a",
203
+ "blob_url": "https://gitcode.com/CPF-RN/rntpc_react-native-modal/blob/13503be9229d33459829dc5dc36ec0b52a0536b8/README_en.md",
204
+ "raw_url": "https://raw.gitcode.com/CPF-RN/rntpc_react-native-modal/raw/13503be9229d33459829dc5dc36ec0b52a0536b8/README_en.md",
205
+ "patch": "@@ -8,10 +8,11 @@ This project is based on [react-native-modal](https://github.com/react-native-mo\n \n This third-party library has been migrated to Gitcode and is now available for direct download from npm, the new package name is: `@react-native-ohos/react-native-modal`, The version correspondence details are as follows:\n \n-| Name | Version | Release Information | Supported RN Version | Supported Autolink | Compile API Version | Community Baseline Version | npm Address |\n-| --------------------------------------- | -------- | ------------------------------------------------------------------------------------------ | -------------------- | ------------------ | ------------------- | -------------------------- | ------------------------------------------------------------------------------------ |\n-| @react-native-ohos/react-native-modal | ~ 14.0.1 | [Gitcode Releases](https://gitcode.com/openharmony-sig/rntpc_react-native-modal/releases) | 0.77.\\*/0.82.\\* | No | API12+ | 14.0.0-rc.1 | [Npm Address](https://www.npmjs.com/package/@react-native-ohos/react-native-modal) |\n-| @react-native-oh-tpl/react-native-modal | ~ 13.0.1 | [Gitcode Releases](https://github.com/react-native-oh-library/react-native-modal/releases) | 0.72.\\* | No | API12+ | 13.0.1 | [Npm Address](https://www.npmjs.com/package/@react-native-oh-tpl/react-native-modal) |\n+| Name | Version | Release Information | Supported RN Version | Supported Autolink | Compile API Version | Community Baseline Version | npm Address |\n+| --------------------------------------- | ------------------- | ----------------------------------------------------------------------------------------- | -------------------- | ------------------ | ------------------- | -------------------------- | ------------------------------------------------------------------------------------ |\n+| @react-native-ohos/react-native-modal | ~ 14.0.1 | [Gitcode Releases](https://gitcode.com/openharmony-sig/rntpc_react-native-modal/releases) | 0.77.\\*/0.82.\\* | No | API12+ | 14.0.0-rc.1 | [Npm Address](https://www.npmjs.com/package/@react-native-ohos/react-native-modal) |\n+| @react-native-ohos/react-native-modal | ~ 13.0.2 | [Gitcode Releases](https://gitcode.com/openharmony-sig/rntpc_react-native-modal/releases) | 0.72.\\* | No | API12+ | 13.0.1 | [Npm Address](https://www.npmjs.com/package/@react-native-ohos/react-native-modal) |\n+| @react-native-oh-tpl/react-native-modal | ~ 13.0.1@deprecated | [Github Releases](https://github.com/react-native-oh-library/react-native-modal/releases) | 0.72.\\* | No | API12+ | 13.0.1 | [Npm Address](https://www.npmjs.com/package/@react-native-oh-tpl/react-native-modal) |\n \n ## 1. Installation and Usage\n \n@@ -132,10 +133,11 @@ export default DefaultModal;\n \n ## 2. Link\n \n-| | Supported Autolink | Supported RN Version |\n-| ------- | ------------------ | -------------------- |\n-| ~14.0.1 | No | 0.77/0.82 |\n-| ~13.0.1 | No | 0.72 |\n+| | Supported Autolink | Supported RN Version |\n+| ------------------ | ------------------ | -------------------- |\n+| ~14.0.1 | No | 0.77/0.82 |\n+| ~13.0.2 | No | 0.72 |\n+| ~13.0.1@deprecated | No | 0.72 |\n \n ## 3. Constraints\n \n@@ -143,10 +145,11 @@ export default DefaultModal;\n \n Check the release version information in the release address of the third-party library:\n \n-| Version | Release Information | Supported RN Version |\n-| ------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------- |\n-| 14.0.1 | [@react-native-ohos/react-native-modal Releases](https://gitcode.com/openharmony-sig/rntpc_react-native-modal/releases) | 0.77/0.82 |\n-| 13.0.1 | [@react-native-oh-tpl/react-native-modal Releases](https://github.com/react-native-oh-library/react-native-modal/releases) | 0.72 |\n+| Version | Release Information | Supported RN Version |\n+| ----------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------- |\n+| 14.0.1 | [@react-native-ohos/react-native-modal Releases](https://gitcode.com/openharmony-sig/rntpc_react-native-modal/releases) | 0.77/0.82 |\n+| 13.0.2 | [@react-native-ohos/react-native-modal Releases](https://gitcode.com/openharmony-sig/rntpc_react-native-modal/releases) | 0.72 |\n+| 13.0.1@deprecated | [@react-native-oh-tpl/react-native-modal Releases](https://github.com/react-native-oh-library/react-native-modal/releases) | 0.72 |\n \n ## 4. Properties\n \n",
206
+ "target_branch": "br_rnoh0.72",
207
+ "source_branch": "77Visible",
208
+ "source_project": {
209
+ "id": 9515182,
210
+ "full_name": "cuijiaojiao1/rntpc_react-native-modal",
211
+ "human_name": "cuijiaojiao1 / rntpc_react-native-modal",
212
+ "path": "rntpc_react-native-modal"
213
+ },
214
+ "target_project": {
215
+ "id": 4368931,
216
+ "full_name": "CPF-RN/rntpc_react-native-modal",
217
+ "human_name": "CPF-RN / rntpc_react-native-modal",
218
+ "path": "rntpc_react-native-modal"
219
+ }
220
+ },
221
+ {
222
+ "sha": "13503be9229d33459829dc5dc36ec0b52a0536b8",
223
+ "filename": "src/modal.tsx",
224
+ "additions": 192,
225
+ "deletions": 85,
226
+ "blob_id": "49346b863a03d2f10a723f7f8b2d2efef4486192",
227
+ "blob_url": "https://gitcode.com/CPF-RN/rntpc_react-native-modal/blob/13503be9229d33459829dc5dc36ec0b52a0536b8/src/modal.tsx",
228
+ "raw_url": "https://raw.gitcode.com/CPF-RN/rntpc_react-native-modal/raw/13503be9229d33459829dc5dc36ec0b52a0536b8/src/modal.tsx",
229
+ "patch": "@@ -52,6 +52,7 @@ type State = {\n deviceHeight: number;\n isSwipeable: boolean;\n pan: OrNull<Animated.ValueXY>;\n+ animationReady: boolean;\n };\n \n const defaultProps = {\n@@ -192,6 +193,7 @@ export class ReactNativeModal extends React.Component<ModalProps, State> {\n deviceHeight: Dimensions.get('window').height,\n isSwipeable: !!this.props.swipeDirection,\n pan: null,\n+ animationReady: false,\n };\n \n isTransitioning = false;\n@@ -200,12 +202,15 @@ export class ReactNativeModal extends React.Component<ModalProps, State> {\n \n animationIn: string;\n animationOut: string;\n+ backdropAnimated: Animated.Value;\n backdropRef: any;\n contentRef: any;\n panResponder: OrNull<PanResponderInstance> = null;\n didUpdateDimensionsEmitter: OrNull<EmitterSubscription> = null;\n \n interactionHandle: OrNull<number> = null;\n+ _pendingRAF: number[] = [];\n+ _pendingTimeout: number[] = [];\n \n constructor(props: ModalProps) {\n super(props);\n@@ -215,7 +220,7 @@ export class ReactNativeModal extends React.Component<ModalProps, State> {\n \n this.animationIn = animationIn;\n this.animationOut = animationOut;\n-\n+ this.backdropAnimated = new Animated.Value(0);\n if (this.state.isSwipeable) {\n this.state = {\n ...this.state,\n@@ -227,14 +232,18 @@ export class ReactNativeModal extends React.Component<ModalProps, State> {\n this.state = {\n ...this.state,\n isVisible: true,\n- showContent: true,\n+ showContent: false,\n+ animationReady: false,\n };\n }\n }\n \n- static getDerivedStateFromProps(nextProps: Readonly<ModalProps>, state: State) {\n+ static getDerivedStateFromProps(\n+ nextProps: Readonly<ModalProps>,\n+ state: State,\n+ ) {\n if (!state.isVisible && nextProps.isVisible) {\n- return { isVisible: true, showContent: true };\n+ return { isVisible: true, showContent: false, animationReady: false};\n }\n return null;\n }\n@@ -267,8 +276,17 @@ export class ReactNativeModal extends React.Component<ModalProps, State> {\n InteractionManager.clearInteractionHandle(this.interactionHandle);\n this.interactionHandle = null;\n }\n+ // Cancel any pending requestAnimationFrame callbacks\n+ this._pendingRAF.forEach(id => cancelAnimationFrame(id));\n+ this._pendingRAF = [];\n+ // Cancel any pending setTimeout callbacks\n+ this._pendingTimeout.forEach(id => clearTimeout(id));\n+ this._pendingTimeout = [];\n+ // Stop any running backdrop animation\n+ if (this.backdropAnimated && this.backdropAnimated.stopAnimation) {\n+ this.backdropAnimated.stopAnimation();\n+ }\n }\n-\n componentDidUpdate(prevProps: ModalProps) {\n // If the animations have been changed then rebuild them to make sure we're\n // using the most up-to-date ones\n@@ -282,15 +300,13 @@ export class ReactNativeModal extends React.Component<ModalProps, State> {\n this.animationIn = animationIn;\n this.animationOut = animationOut;\n }\n- // If backdrop opacity has been changed then make sure to update it\n- if (\n- this.props.backdropOpacity !== prevProps.backdropOpacity &&\n- this.backdropRef\n- ) {\n- this.backdropRef.transitionTo(\n- { opacity: this.props.backdropOpacity },\n- this.props.backdropTransitionInTiming,\n- );\n+ // If backdrop opacity has been changed then animate the Animated.Value\n+ if (this.props.backdropOpacity !== prevProps.backdropOpacity) {\n+ Animated.timing(this.backdropAnimated, {\n+ toValue: this.props.backdropOpacity,\n+ duration: this.props.backdropTransitionInTiming,\n+ useNativeDriver: this.props.useNativeDriverForBackdrop === true,\n+ }).start();\n }\n // On modal open request, we slide the view up and fade in the backdrop\n if (this.props.isVisible && !prevProps.isVisible) {\n@@ -387,11 +403,13 @@ export class ReactNativeModal extends React.Component<ModalProps, State> {\n // Dim the background while swiping the modal\n const newOpacityFactor =\n 1 - this.calcDistancePercentage(gestureState);\n-\n- this.backdropRef &&\n- this.backdropRef.transitionTo({\n- opacity: this.props.backdropOpacity * newOpacityFactor,\n- });\n+ // Update backdrop opacity immediately during swipe.\n+ // setValue() is synchronous and works regardless of useNativeDriver\n+ // setting — it directly sets the Animated.Value without scheduling\n+ // an animation, so there is no conflict with native-driven animations.\n+ this.backdropAnimated.setValue(\n+ this.props.backdropOpacity * newOpacityFactor,\n+ );\n \n animEvt!(evt, gestureState);\n \n@@ -447,12 +465,12 @@ export class ReactNativeModal extends React.Component<ModalProps, State> {\n if (this.props.onSwipeCancel) {\n this.props.onSwipeCancel(gestureState);\n }\n-\n- if (this.backdropRef) {\n- this.backdropRef.transitionTo({\n- opacity: this.props.backdropOpacity,\n- });\n- }\n+ // Reset backdrop opacity with a smooth animation\n+ Animated.timing(this.backdropAnimated, {\n+ toValue: this.props.backdropOpacity,\n+ duration: this.props.backdropTransitionInTiming,\n+ useNativeDriver: this.props.useNativeDriverForBackdrop === true,\n+ }).start();\n \n Animated.spring(this.state.pan!, {\n toValue: { x: 0, y: 0 },\n@@ -593,13 +611,19 @@ export class ReactNativeModal extends React.Component<ModalProps, State> {\n return;\n }\n this.isTransitioning = true;\n- if (this.backdropRef) {\n- this.backdropRef.transitionTo(\n- { opacity: this.props.backdropOpacity },\n- this.props.backdropTransitionInTiming,\n- );\n+ // Mark content as not ready for display until the animation is\n+ // properly set up. This prevents the one-frame flash where\n+ // setAnimation creates an animationStyle interpolated from a stale\n+ // animationValue (e.g. 1.0 from a previous animation), causing the\n+ // content to appear at its final position for one frame before\n+ // startAnimation resets animationValue to 0.\n+ this.setState({animationReady: false});\n+ if (this.backdropAnimated && this.backdropAnimated.stopAnimation) {\n+ this.backdropAnimated.stopAnimation();\n+ }\n+ if (this.backdropAnimated && this.backdropAnimated.setValue) {\n+ this.backdropAnimated.setValue(0);\n }\n-\n // This is for resetting the pan position,otherwise the modal gets stuck\n // at the last released position when you try to open it.\n // TODO: Could certainly be improved - no idea for the moment.\n@@ -612,20 +636,64 @@ export class ReactNativeModal extends React.Component<ModalProps, State> {\n if (this.interactionHandle == null) {\n this.interactionHandle = InteractionManager.createInteractionHandle();\n }\n- this.contentRef\n- .animate(this.animationIn, this.props.animationInTiming)\n- .then(() => {\n- this.isTransitioning = false;\n- if (this.interactionHandle) {\n- InteractionManager.clearInteractionHandle(this.interactionHandle);\n- this.interactionHandle = null;\n- }\n- if (!this.props.isVisible) {\n- this.close();\n- } else {\n- this.props.onModalShow();\n- }\n+ // Stop any running animation first, then reset animationValue to 0\n+ // before setAnimation. This prevents a visual glitch where setAnimation\n+ // uses the current animationValue (e.g. 1.0 from a previous animation)\n+ // to compute animationStyle, causing a one-frame flash at the wrong position.\n+ // After stopAnimation, animationStyle is cleared so content is at its\n+ // default position. Setting animationValue to 0 won't cause a visual jump\n+ // since there's no active animationStyle to interpolate.\n+ this.contentRef.stopAnimation();\n+ if (this.contentRef.state && this.contentRef.state.animationValue) {\n+ this.contentRef.state.animationValue.setValue(0);\n+ }\n+ const rafId1 = requestAnimationFrame(() => {\n+ // Guard: if the component was unmounted or closed before the\n+ // deferred frame fired, skip animation startup entirely.\n+ if (!this.contentRef || !this.isTransitioning) {\n+ return;\n+ }\n+ this.contentRef.setAnimation(this.animationIn, () => {\n+ // setAnimation has now set animationStyle via setState.→native\n+ // first open when the Modal window is being created.\n+ this.contentRef.startAnimation(\n+ this.props.animationInTiming,\n+ 0,\n+ 0,\n+ () => {\n+ this.isTransitioning = false;\n+ if (this.interactionHandle) {\n+ InteractionManager.clearInteractionHandle(\n+ this.interactionHandle,\n+ );\n+ this.interactionHandle = null;\n+ }\n+ if (!this.props.isVisible) {\n+ this.close();\n+ } else {\n+ this.props.onModalShow();\n+ }\n+ },\n+ );\n+ // Start backdrop fade-in in the same JS tick as content animation.\n+ // Animated.timing().start() is synchronous in scheduling — it\n+ // enqueues the animation immediately, ensuring backdrop and content\n+ // begin on the same frame.\n+ Animated.timing(this.backdropAnimated, {\n+ toValue: this.props.backdropOpacity,\n+ duration: this.props.backdropTransitionInTiming,\n+ useNativeDriver: this.props.useNativeDriverForBackdrop === true,\n+ }).start();\n+ const rafId2 = requestAnimationFrame(() => {\n+ if (!this.isTransitioning && !this.state.isVisible) {\n+ return;\n+ }\n+ this.setState({showContent: true, animationReady: true});\n+ });\n+ this._pendingRAF.push(rafId2);\n });\n+ });\n+ this._pendingRAF.push(rafId1);\n }\n };\n \n@@ -634,12 +702,6 @@ export class ReactNativeModal extends React.Component<ModalProps, State> {\n return;\n }\n this.isTransitioning = true;\n- if (this.backdropRef) {\n- this.backdropRef.transitionTo(\n- { opacity: 0 },\n- this.props.backdropTransitionOutTiming,\n- );\n- }\n \n let animationOut = this.animationOut;\n \n@@ -661,34 +723,80 @@ export class ReactNativeModal extends React.Component<ModalProps, State> {\n if (this.interactionHandle == null) {\n this.interactionHandle = InteractionManager.createInteractionHandle();\n }\n- this.contentRef\n- .animate(animationOut, this.props.animationOutTiming)\n- .then(() => {\n- this.isTransitioning = false;\n- if (this.interactionHandle) {\n- InteractionManager.clearInteractionHandle(this.interactionHandle);\n- this.interactionHandle = null;\n+ // Stop any running animation first, then reset animationValue to 0\n+ // before setAnimation. This prevents a visual glitch where setAnimation\n+ // uses the current animationValue (e.g. 1.0 from the entrance animation)\n+ // to compute the exit animationStyle, causing a one-frame flash.\n+ // After stopAnimation, animationStyle is cleared so content is at its\n+ // default position. Setting animationValue to 0 won't cause a visual jump\n+ // since there's no active animationStyle to interpolate.\n+ this.contentRef.stopAnimation();\n+ if (this.contentRef.state && this.contentRef.state.animationValue) {\n+ this.contentRef.state.animationValue.setValue(0);\n+ }\n+ this.contentRef.setAnimation(animationOut, () => {\n+ // setAnimation has set the exit animationStyle with\n+ // animationValue=0, which corresponds to the \"from\" position\n+ // of the exit animation (e.g. translateY:0 for slideOutDown,\n+ // meaning the content is at its normal visible position).\n+ // This is correct — the content should start at its current\n+ // position and animate out. No need to hide content during\n+ // close since the animationStyle is already correct.\n+ if (this.backdropRef) {\n+ if (this.backdropAnimated && this.backdropAnimated.stopAnimation) {\n+ this.backdropAnimated.stopAnimation();\n }\n- if (this.props.isVisible) {\n- this.open();\n- } else {\n- this.setState(\n- {\n- showContent: false,\n- },\n- () => {\n+ // Start backdrop fade-out in the same JS tick as content animation.\n+ // Animated.timing().start() schedules immediately, keeping backdrop\n+ // and content exit animations in sync without relying on animatable's\n+ // internal state (transitionTo goes through setState which is async).\n+ Animated.timing(this.backdropAnimated, {\n+ toValue: 0,\n+ duration: this.props.backdropTransitionOutTiming,\n+ useNativeDriver: this.props.useNativeDriverForBackdrop === true,\n+ }).start();\n+ }\n+ this.contentRef.startAnimation(\n+ this.props.animationOutTiming,\n+ 0,\n+ 0,\n+ () => {\n+ const finalizeClose = () => {\n+ this.isTransitioning = false;\n+ if (this.interactionHandle) {\n+ InteractionManager.clearInteractionHandle(\n+ this.interactionHandle,\n+ );\n+ this.interactionHandle = null;\n+ }\n+ if (this.props.isVisible) {\n+ this.open();\n+ } else {\n this.setState(\n {\n+ showContent: false,\n isVisible: false,\n+ animationReady: false,\n },\n () => {\n this.props.onModalHide();\n },\n );\n- },\n- );\n- }\n- });\n+ }\n+ };\n+ // The startAnimation callback fires when the JS-side\n+ // Animated.timing completes. On Harmony/OpenHarmony,\n+ // the native rendering pipeline may still be processing\n+ // the final frame. Use a small delay to ensure the last\n+ // frame of the exit animation has been painted before\n+ // removing the modal from the view hierarchy, preventing\n+ // a flash where the modal content briefly reappears at\n+ // its default (un-animated) position.\n+ const timeoutId = setTimeout(finalizeClose, 32);\n+ this._pendingTimeout.push(timeoutId);\n+ },\n+ );\n+ });\n }\n };\n makeBackdrop = () => {\n@@ -717,23 +825,22 @@ export class ReactNativeModal extends React.Component<ModalProps, State> {\n width: this.getDeviceWidth(),\n height: this.getDeviceHeight(),\n backgroundColor:\n- this.state.showContent && !hasCustomBackdrop\n+ (this.props.isVisible || this.state.isVisible) && !hasCustomBackdrop\n ? backdropColor\n : 'transparent',\n },\n ];\n \n const backdropWrapper = (\n- <animatable.View\n- ref={ref => (this.backdropRef = ref)}\n- useNativeDriver={\n- useNativeDriverForBackdrop !== undefined\n- ? useNativeDriverForBackdrop\n- : useNativeDriver\n- }\n- style={[styles.backdrop, backdropComputedStyle]}>\n+ <Animated.View\n+ ref={(ref: any) => (this.backdropRef = ref)}\n+ style={[\n+ styles.backdrop,\n+ backdropComputedStyle,\n+ {opacity: this.backdropAnimated},\n+ ]}>\n {hasCustomBackdrop && customBackdrop}\n- </animatable.View>\n+ </Animated.View>\n );\n \n if (hasCustomBackdrop) {\n@@ -796,18 +903,18 @@ export class ReactNativeModal extends React.Component<ModalProps, State> {\n \n // The user might decide not to show the modal while it is animating\n // to enhance performance.\n- const _children =\n- this.props.hideModalContentWhileAnimating &&\n- this.props.useNativeDriver &&\n- !this.state.showContent ? (\n- <animatable.View />\n+ const shouldHideContent =\n+ !this.state.showContent ||\n+ (this.isTransitioning && !this.state.animationReady);\n+ const _children = shouldHideContent ? (\n+ <animatable.View style={{opacity: 0}} />\n ) : (\n children\n );\n const containerView = (\n <animatable.View\n {...panHandlers}\n- ref={ref => (this.contentRef = ref)}\n+ ref={(ref: any) => (this.contentRef = ref)}\n style={[panPosition, computedStyle]}\n pointerEvents=\"box-none\"\n useNativeDriver={useNativeDriver}\n",
230
+ "target_branch": "br_rnoh0.72",
231
+ "source_branch": "77Visible",
232
+ "source_project": {
233
+ "id": 9515182,
234
+ "full_name": "cuijiaojiao1/rntpc_react-native-modal",
235
+ "human_name": "cuijiaojiao1 / rntpc_react-native-modal",
236
+ "path": "rntpc_react-native-modal"
237
+ },
238
+ "target_project": {
239
+ "id": 4368931,
240
+ "full_name": "CPF-RN/rntpc_react-native-modal",
241
+ "human_name": "CPF-RN / rntpc_react-native-modal",
242
+ "path": "rntpc_react-native-modal"
243
+ }
244
+ }
245
+ ]
246
+ }