react-native-a11y-order 0.9.1 → 0.11.0-rc1

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 (305) hide show
  1. package/README.md +55 -334
  2. package/android/src/main/java/com/a11yorder/A11yOrderPackage.java +2 -6
  3. package/android/src/main/java/com/a11yorder/core/A11yManagedFocusView.java +29 -0
  4. package/android/src/main/java/com/a11yorder/{views/A11yView/A11yView.java → core/A11yScreenReaderView.java} +3 -45
  5. package/android/src/main/java/com/a11yorder/core/A11yViewOrder.java +37 -0
  6. package/android/src/main/java/com/a11yorder/modules/A11yAnnounceModule.java +20 -7
  7. package/android/src/main/java/com/a11yorder/views/A11yCardView/A11yCardViewManager.java +18 -0
  8. package/android/src/main/java/com/a11yorder/views/A11yIndexView/A11yIndexView.java +2 -65
  9. package/android/src/main/java/com/a11yorder/views/A11yIndexView/A11yIndexViewManager.java +21 -0
  10. package/android/src/newarch/A11yCardViewManagerSpec.java +9 -0
  11. package/android/src/oldarch/A11yAnnounceModuleSpec.java +8 -1
  12. package/android/src/oldarch/A11yCardViewManagerSpec.java +8 -0
  13. package/android/src/oldarch/A11yIndexViewManagerSpec.java +8 -0
  14. package/ios/helpers/RNAOFabricEventHelper/RNAOFabricEventHelper.mm +5 -5
  15. package/ios/helpers/RNAOSpeechAttributes.h +35 -0
  16. package/ios/helpers/RNAOSpeechAttributes.mm +64 -0
  17. package/ios/modules/RNAOA11yAnnounceModule.h +13 -9
  18. package/ios/modules/RNAOA11yAnnounceModule.mm +220 -14
  19. package/ios/services/RNAOA11yAnnounceService/RNAOA11yAnnounceService.h +11 -1
  20. package/ios/services/RNAOA11yAnnounceService/RNAOA11yAnnounceService.mm +55 -51
  21. package/ios/views/RNAOA11yCardView/RNAOA11yCardView.h +29 -0
  22. package/ios/views/RNAOA11yCardView/RNAOA11yCardView.mm +83 -0
  23. package/ios/views/RNAOA11yCardView/RNAOA11yCardViewManager.h +14 -0
  24. package/ios/views/RNAOA11yCardView/RNAOA11yCardViewManager.mm +17 -0
  25. package/ios/views/RNAOA11yIndexView/RNAOA11yIndexView.h +2 -41
  26. package/ios/views/RNAOA11yIndexView/RNAOA11yIndexView.mm +24 -128
  27. package/ios/views/RNAOA11yIndexView/RNAOA11yIndexViewManager.mm +15 -0
  28. package/ios/views/RNAOA11yPaneTitleView/RNAOA11yPaneTitleView.mm +12 -2
  29. package/ios/views/base/RNAOA11yGroupChildrenView.h +21 -0
  30. package/ios/views/base/RNAOA11yGroupChildrenView.mm +19 -0
  31. package/ios/views/base/RNAOA11yManagedFocusView.h +28 -0
  32. package/ios/views/{RNAOA11yView/RNAOA11yView.mm → base/RNAOA11yManagedFocusView.mm} +64 -183
  33. package/ios/views/base/RNAOA11yScreenReaderView.h +24 -0
  34. package/ios/views/base/RNAOA11yScreenReaderView.mm +32 -0
  35. package/ios/views/base/RNAOA11yViewGroup.h +35 -0
  36. package/ios/views/base/RNAOA11yViewGroup.mm +46 -0
  37. package/ios/views/base/RNAOA11yViewOrder.h +40 -0
  38. package/ios/views/base/RNAOA11yViewOrder.mm +92 -0
  39. package/lib/commonjs/components/A11yCard/A11yCard.ios.js +49 -0
  40. package/lib/commonjs/components/A11yCard/A11yCard.ios.js.map +1 -0
  41. package/lib/commonjs/components/A11yCard/A11yCard.js +41 -0
  42. package/lib/commonjs/components/A11yCard/A11yCard.js.map +1 -0
  43. package/lib/commonjs/{types/A11yGroup.types.js → components/A11yCard/A11yCard.types.js} +1 -1
  44. package/lib/commonjs/components/A11yCard/A11yCard.types.js.map +1 -0
  45. package/lib/commonjs/components/A11yIndex/A11yIndex.js +88 -28
  46. package/lib/commonjs/components/A11yIndex/A11yIndex.js.map +1 -1
  47. package/lib/commonjs/components/A11yIndex/A11yIndex.types.js +39 -0
  48. package/lib/commonjs/components/A11yIndex/A11yIndex.types.js.map +1 -0
  49. package/lib/commonjs/components/A11yIndex/A11yIndex.web.js.map +1 -1
  50. package/lib/commonjs/components/A11yLock/A11yFocusFrame/A11yFocusFrame.js.map +1 -1
  51. package/lib/commonjs/components/A11yLock/A11yFocusTrap/A11yFocusTrap.js.map +1 -1
  52. package/lib/commonjs/components/A11yLock/A11yLock.types.js.map +1 -0
  53. package/lib/commonjs/components/{A11ySequence/A11ySequence.js → A11yOrder/A11yOrder.js} +3 -3
  54. package/lib/commonjs/components/A11yOrder/A11yOrder.js.map +1 -0
  55. package/lib/commonjs/{types/A11yModule.types.js → components/A11yOrder/A11yOrder.types.js} +1 -1
  56. package/lib/commonjs/components/A11yOrder/A11yOrder.types.js.map +1 -0
  57. package/lib/commonjs/components/A11yPaneTitle/A11yPaneTitle.js +6 -7
  58. package/lib/commonjs/components/A11yPaneTitle/A11yPaneTitle.js.map +1 -1
  59. package/lib/commonjs/components/A11yPaneTitle/A11yPaneTitle.types.js +6 -0
  60. package/lib/commonjs/components/A11yPaneTitle/A11yPaneTitle.types.js.map +1 -0
  61. package/lib/commonjs/components/A11yView/A11yView.js +7 -33
  62. package/lib/commonjs/components/A11yView/A11yView.js.map +1 -1
  63. package/lib/commonjs/components/A11yView/A11yView.types.js.map +1 -0
  64. package/lib/commonjs/index.js +37 -10
  65. package/lib/commonjs/index.js.map +1 -1
  66. package/lib/commonjs/index.web.js +12 -6
  67. package/lib/commonjs/index.web.js.map +1 -1
  68. package/lib/commonjs/modules/A11yAnnounceModule.android.js +37 -3
  69. package/lib/commonjs/modules/A11yAnnounceModule.android.js.map +1 -1
  70. package/lib/commonjs/modules/A11yAnnounceModule.js +66 -8
  71. package/lib/commonjs/modules/A11yAnnounceModule.js.map +1 -1
  72. package/lib/commonjs/nativeSpecs/{A11yGroupNativeComponent.ts → A11yCardNativeComponent.ts} +3 -3
  73. package/lib/commonjs/nativeSpecs/A11yIndexNativeComponent.ts +11 -3
  74. package/lib/commonjs/nativeSpecs/NativeA11yAnnounceModule.js +2 -0
  75. package/lib/commonjs/nativeSpecs/NativeA11yAnnounceModule.js.map +1 -1
  76. package/lib/module/components/A11yCard/A11yCard.ios.js +43 -0
  77. package/lib/module/components/A11yCard/A11yCard.ios.js.map +1 -0
  78. package/lib/module/components/A11yCard/A11yCard.js +35 -0
  79. package/lib/module/components/A11yCard/A11yCard.js.map +1 -0
  80. package/lib/module/components/A11yCard/A11yCard.types.js +4 -0
  81. package/lib/module/components/A11yCard/A11yCard.types.js.map +1 -0
  82. package/lib/module/components/A11yIndex/A11yIndex.js +88 -28
  83. package/lib/module/components/A11yIndex/A11yIndex.js.map +1 -1
  84. package/lib/module/components/A11yIndex/A11yIndex.types.js +35 -0
  85. package/lib/module/components/A11yIndex/A11yIndex.types.js.map +1 -0
  86. package/lib/module/components/A11yIndex/A11yIndex.web.js.map +1 -1
  87. package/lib/module/components/A11yLock/A11yFocusFrame/A11yFocusFrame.js.map +1 -1
  88. package/lib/module/components/A11yLock/A11yFocusTrap/A11yFocusTrap.js.map +1 -1
  89. package/lib/module/components/A11yLock/A11yLock.types.js.map +1 -0
  90. package/lib/module/components/{A11ySequence/A11ySequence.js → A11yOrder/A11yOrder.js} +2 -2
  91. package/lib/module/components/A11yOrder/A11yOrder.js.map +1 -0
  92. package/lib/module/components/A11yOrder/A11yOrder.types.js +4 -0
  93. package/lib/module/components/A11yOrder/A11yOrder.types.js.map +1 -0
  94. package/lib/module/components/A11yPaneTitle/A11yPaneTitle.js +6 -7
  95. package/lib/module/components/A11yPaneTitle/A11yPaneTitle.js.map +1 -1
  96. package/lib/module/components/A11yPaneTitle/A11yPaneTitle.types.js +4 -0
  97. package/lib/module/components/A11yPaneTitle/A11yPaneTitle.types.js.map +1 -0
  98. package/lib/module/components/A11yView/A11yView.js +7 -31
  99. package/lib/module/components/A11yView/A11yView.js.map +1 -1
  100. package/lib/module/components/A11yView/A11yView.types.js.map +1 -0
  101. package/lib/module/index.js +13 -9
  102. package/lib/module/index.js.map +1 -1
  103. package/lib/module/index.web.js +5 -5
  104. package/lib/module/index.web.js.map +1 -1
  105. package/lib/module/modules/A11yAnnounceModule.android.js +32 -2
  106. package/lib/module/modules/A11yAnnounceModule.android.js.map +1 -1
  107. package/lib/module/modules/A11yAnnounceModule.js +62 -7
  108. package/lib/module/modules/A11yAnnounceModule.js.map +1 -1
  109. package/{src/nativeSpecs/A11yGroupNativeComponent.ts → lib/module/nativeSpecs/A11yCardNativeComponent.ts} +3 -3
  110. package/lib/module/nativeSpecs/A11yIndexNativeComponent.ts +11 -3
  111. package/lib/module/nativeSpecs/NativeA11yAnnounceModule.js +4 -0
  112. package/lib/module/nativeSpecs/NativeA11yAnnounceModule.js.map +1 -1
  113. package/lib/typescript/src/components/A11yCard/A11yCard.d.ts +5 -0
  114. package/lib/typescript/src/components/A11yCard/A11yCard.d.ts.map +1 -0
  115. package/lib/typescript/src/components/A11yCard/A11yCard.ios.d.ts +5 -0
  116. package/lib/typescript/src/components/A11yCard/A11yCard.ios.d.ts.map +1 -0
  117. package/lib/typescript/src/components/A11yCard/A11yCard.types.d.ts +38 -0
  118. package/lib/typescript/src/components/A11yCard/A11yCard.types.d.ts.map +1 -0
  119. package/lib/typescript/src/components/A11yIndex/A11yIndex.d.ts +10 -128
  120. package/lib/typescript/src/components/A11yIndex/A11yIndex.d.ts.map +1 -1
  121. package/lib/typescript/src/components/A11yIndex/A11yIndex.types.d.ts +101 -0
  122. package/lib/typescript/src/components/A11yIndex/A11yIndex.types.d.ts.map +1 -0
  123. package/lib/typescript/src/components/A11yIndex/A11yIndex.web.d.ts +8 -128
  124. package/lib/typescript/src/components/A11yIndex/A11yIndex.web.d.ts.map +1 -1
  125. package/lib/typescript/src/components/A11yLock/A11yBaseLock/A11yBaseLock.d.ts +1 -1
  126. package/lib/typescript/src/components/A11yLock/A11yBaseLock/A11yBaseLock.d.ts.map +1 -1
  127. package/lib/typescript/src/components/A11yLock/A11yFocusFrame/A11yFocusFrame.android.d.ts +1 -1
  128. package/lib/typescript/src/components/A11yLock/A11yFocusFrame/A11yFocusFrame.android.d.ts.map +1 -1
  129. package/lib/typescript/src/components/A11yLock/A11yFocusFrame/A11yFocusFrame.d.ts +2 -2
  130. package/lib/typescript/src/components/A11yLock/A11yFocusFrame/A11yFocusFrame.d.ts.map +1 -1
  131. package/lib/typescript/src/components/A11yLock/A11yFocusTrap/A11yFocusTrap.android.d.ts +1 -1
  132. package/lib/typescript/src/components/A11yLock/A11yFocusTrap/A11yFocusTrap.android.d.ts.map +1 -1
  133. package/lib/typescript/src/components/A11yLock/A11yFocusTrap/A11yFocusTrap.d.ts +2 -2
  134. package/lib/typescript/src/components/A11yLock/A11yFocusTrap/A11yFocusTrap.d.ts.map +1 -1
  135. package/lib/typescript/src/components/A11yLock/A11yLock.types.d.ts +35 -0
  136. package/lib/typescript/src/components/A11yLock/A11yLock.types.d.ts.map +1 -0
  137. package/lib/typescript/src/components/A11yOrder/A11yOrder.d.ts +5 -0
  138. package/lib/typescript/src/components/A11yOrder/A11yOrder.d.ts.map +1 -0
  139. package/lib/typescript/src/components/A11yOrder/A11yOrder.types.d.ts +11 -0
  140. package/lib/typescript/src/components/A11yOrder/A11yOrder.types.d.ts.map +1 -0
  141. package/lib/typescript/src/components/A11yPaneTitle/A11yPaneTitle.d.ts +3 -17
  142. package/lib/typescript/src/components/A11yPaneTitle/A11yPaneTitle.d.ts.map +1 -1
  143. package/lib/typescript/src/components/A11yPaneTitle/A11yPaneTitle.types.d.ts +52 -0
  144. package/lib/typescript/src/components/A11yPaneTitle/A11yPaneTitle.types.d.ts.map +1 -0
  145. package/lib/typescript/src/components/A11yView/A11yView.d.ts +13 -130
  146. package/lib/typescript/src/components/A11yView/A11yView.d.ts.map +1 -1
  147. package/lib/typescript/src/components/A11yView/A11yView.types.d.ts +10 -0
  148. package/lib/typescript/src/components/A11yView/A11yView.types.d.ts.map +1 -0
  149. package/lib/typescript/src/index.d.ts +29 -403
  150. package/lib/typescript/src/index.d.ts.map +1 -1
  151. package/lib/typescript/src/index.web.d.ts +20 -171
  152. package/lib/typescript/src/index.web.d.ts.map +1 -1
  153. package/lib/typescript/src/modules/A11yAnnounceModule.android.d.ts +25 -2
  154. package/lib/typescript/src/modules/A11yAnnounceModule.android.d.ts.map +1 -1
  155. package/lib/typescript/src/modules/A11yAnnounceModule.d.ts +112 -4
  156. package/lib/typescript/src/modules/A11yAnnounceModule.d.ts.map +1 -1
  157. package/lib/typescript/src/nativeSpecs/A11yCardNativeComponent.d.ts +6 -0
  158. package/lib/typescript/src/nativeSpecs/A11yCardNativeComponent.d.ts.map +1 -0
  159. package/lib/typescript/src/nativeSpecs/A11yIndexNativeComponent.d.ts +10 -6
  160. package/lib/typescript/src/nativeSpecs/A11yIndexNativeComponent.d.ts.map +1 -1
  161. package/lib/typescript/src/nativeSpecs/A11yLockNativeComponent.d.ts +1 -3
  162. package/lib/typescript/src/nativeSpecs/A11yLockNativeComponent.d.ts.map +1 -1
  163. package/lib/typescript/src/nativeSpecs/A11yOrderNativeComponent.d.ts +1 -3
  164. package/lib/typescript/src/nativeSpecs/A11yOrderNativeComponent.d.ts.map +1 -1
  165. package/lib/typescript/src/nativeSpecs/A11yPaneTitleNativeComponent.d.ts +1 -3
  166. package/lib/typescript/src/nativeSpecs/A11yPaneTitleNativeComponent.d.ts.map +1 -1
  167. package/lib/typescript/src/nativeSpecs/NativeA11yAnnounceModule.d.ts +22 -2
  168. package/lib/typescript/src/nativeSpecs/NativeA11yAnnounceModule.d.ts.map +1 -1
  169. package/package.json +12 -11
  170. package/src/components/A11yCard/A11yCard.ios.tsx +44 -0
  171. package/src/components/A11yCard/A11yCard.tsx +35 -0
  172. package/src/components/A11yCard/A11yCard.types.ts +50 -0
  173. package/src/components/A11yIndex/A11yIndex.tsx +144 -52
  174. package/src/components/A11yIndex/A11yIndex.types.ts +119 -0
  175. package/src/components/A11yIndex/A11yIndex.web.tsx +12 -17
  176. package/src/components/A11yLock/A11yBaseLock/A11yBaseLock.tsx +1 -1
  177. package/src/components/A11yLock/A11yFocusFrame/A11yFocusFrame.android.tsx +1 -1
  178. package/src/components/A11yLock/A11yFocusFrame/A11yFocusFrame.tsx +3 -2
  179. package/src/components/A11yLock/A11yFocusTrap/A11yFocusTrap.android.tsx +1 -1
  180. package/src/components/A11yLock/A11yFocusTrap/A11yFocusTrap.tsx +2 -2
  181. package/src/components/A11yLock/A11yLock.types.ts +38 -0
  182. package/src/components/{A11ySequence/A11ySequence.tsx → A11yOrder/A11yOrder.tsx} +4 -2
  183. package/src/components/A11yOrder/A11yOrder.types.ts +11 -0
  184. package/src/components/A11yPaneTitle/A11yPaneTitle.tsx +13 -19
  185. package/src/components/A11yPaneTitle/A11yPaneTitle.types.ts +58 -0
  186. package/src/components/A11yView/A11yView.tsx +8 -63
  187. package/src/components/A11yView/A11yView.types.ts +11 -0
  188. package/src/index.ts +38 -20
  189. package/src/index.web.ts +7 -14
  190. package/src/modules/A11yAnnounceModule.android.ts +18 -2
  191. package/src/modules/A11yAnnounceModule.ts +153 -9
  192. package/{lib/module/nativeSpecs/A11yGroupNativeComponent.ts → src/nativeSpecs/A11yCardNativeComponent.ts} +3 -3
  193. package/src/nativeSpecs/A11yIndexNativeComponent.ts +11 -3
  194. package/src/nativeSpecs/NativeA11yAnnounceModule.ts +31 -1
  195. package/android/src/main/java/com/a11yorder/views/A11yGroupView/A11yGroupViewManager.java +0 -25
  196. package/android/src/main/java/com/a11yorder/views/A11yUIContainerView/A11yUIContainerViewManager.java +0 -30
  197. package/android/src/main/java/com/a11yorder/views/A11yView/A11yViewManager.java +0 -67
  198. package/android/src/newarch/A11yGroupViewManagerSpec.java +0 -9
  199. package/android/src/newarch/A11yUIContainerViewManagerSpec.java +0 -8
  200. package/android/src/newarch/A11yViewSpec.java +0 -13
  201. package/android/src/oldarch/A11yGroupViewManagerSpec.java +0 -8
  202. package/android/src/oldarch/A11yUIContainerViewManagerSpec.java +0 -9
  203. package/android/src/oldarch/A11yViewSpec.java +0 -18
  204. package/ios/views/RNAOA11yGroupView/RNAOA11yGroupView.h +0 -37
  205. package/ios/views/RNAOA11yGroupView/RNAOA11yGroupView.mm +0 -67
  206. package/ios/views/RNAOA11yGroupView/RNAOA11yGroupViewManager.h +0 -18
  207. package/ios/views/RNAOA11yGroupView/RNAOA11yGroupViewManager.mm +0 -25
  208. package/ios/views/RNAOA11yUIContainerView/RNAOA11yUIContainerView.h +0 -35
  209. package/ios/views/RNAOA11yUIContainerView/RNAOA11yUIContainerView.mm +0 -79
  210. package/ios/views/RNAOA11yUIContainerView/RNAOA11yUIContainerViewManager.h +0 -18
  211. package/ios/views/RNAOA11yUIContainerView/RNAOA11yUIContainerViewManager.mm +0 -27
  212. package/ios/views/RNAOA11yView/RNAOA11yView.h +0 -45
  213. package/ios/views/RNAOA11yView/RNAOA11yViewManager.h +0 -14
  214. package/ios/views/RNAOA11yView/RNAOA11yViewManager.mm +0 -53
  215. package/lib/commonjs/components/A11yGroup/A11yGroup.android.js +0 -18
  216. package/lib/commonjs/components/A11yGroup/A11yGroup.android.js.map +0 -1
  217. package/lib/commonjs/components/A11yGroup/A11yGroup.ios.js +0 -24
  218. package/lib/commonjs/components/A11yGroup/A11yGroup.ios.js.map +0 -1
  219. package/lib/commonjs/components/A11yGroup/A11yGroup.js +0 -9
  220. package/lib/commonjs/components/A11yGroup/A11yGroup.js.map +0 -1
  221. package/lib/commonjs/components/A11ySequence/A11ySequence.js.map +0 -1
  222. package/lib/commonjs/components/A11yUIContainer/A11yUIContainer.ios.js +0 -22
  223. package/lib/commonjs/components/A11yUIContainer/A11yUIContainer.ios.js.map +0 -1
  224. package/lib/commonjs/components/A11yUIContainer/A11yUIContainer.js +0 -9
  225. package/lib/commonjs/components/A11yUIContainer/A11yUIContainer.js.map +0 -1
  226. package/lib/commonjs/nativeSpecs/A11yUIContainerNativeComponent.ts +0 -12
  227. package/lib/commonjs/nativeSpecs/A11yViewNativeComponent.ts +0 -36
  228. package/lib/commonjs/types/A11yGroup.types.js.map +0 -1
  229. package/lib/commonjs/types/A11yIndex.types.js +0 -13
  230. package/lib/commonjs/types/A11yIndex.types.js.map +0 -1
  231. package/lib/commonjs/types/A11yLock.types.js.map +0 -1
  232. package/lib/commonjs/types/A11yModule.types.js.map +0 -1
  233. package/lib/commonjs/types/A11yUIContainerView.types.js +0 -15
  234. package/lib/commonjs/types/A11yUIContainerView.types.js.map +0 -1
  235. package/lib/commonjs/types/A11yView.types.js.map +0 -1
  236. package/lib/module/components/A11yGroup/A11yGroup.android.js +0 -12
  237. package/lib/module/components/A11yGroup/A11yGroup.android.js.map +0 -1
  238. package/lib/module/components/A11yGroup/A11yGroup.ios.js +0 -18
  239. package/lib/module/components/A11yGroup/A11yGroup.ios.js.map +0 -1
  240. package/lib/module/components/A11yGroup/A11yGroup.js +0 -5
  241. package/lib/module/components/A11yGroup/A11yGroup.js.map +0 -1
  242. package/lib/module/components/A11ySequence/A11ySequence.js.map +0 -1
  243. package/lib/module/components/A11yUIContainer/A11yUIContainer.ios.js +0 -17
  244. package/lib/module/components/A11yUIContainer/A11yUIContainer.ios.js.map +0 -1
  245. package/lib/module/components/A11yUIContainer/A11yUIContainer.js +0 -5
  246. package/lib/module/components/A11yUIContainer/A11yUIContainer.js.map +0 -1
  247. package/lib/module/nativeSpecs/A11yUIContainerNativeComponent.ts +0 -12
  248. package/lib/module/nativeSpecs/A11yViewNativeComponent.ts +0 -36
  249. package/lib/module/types/A11yGroup.types.js +0 -4
  250. package/lib/module/types/A11yGroup.types.js.map +0 -1
  251. package/lib/module/types/A11yIndex.types.js +0 -9
  252. package/lib/module/types/A11yIndex.types.js.map +0 -1
  253. package/lib/module/types/A11yLock.types.js.map +0 -1
  254. package/lib/module/types/A11yModule.types.js +0 -4
  255. package/lib/module/types/A11yModule.types.js.map +0 -1
  256. package/lib/module/types/A11yUIContainerView.types.js +0 -11
  257. package/lib/module/types/A11yUIContainerView.types.js.map +0 -1
  258. package/lib/module/types/A11yView.types.js.map +0 -1
  259. package/lib/typescript/src/components/A11yGroup/A11yGroup.android.d.ts +0 -4
  260. package/lib/typescript/src/components/A11yGroup/A11yGroup.android.d.ts.map +0 -1
  261. package/lib/typescript/src/components/A11yGroup/A11yGroup.d.ts +0 -3
  262. package/lib/typescript/src/components/A11yGroup/A11yGroup.d.ts.map +0 -1
  263. package/lib/typescript/src/components/A11yGroup/A11yGroup.ios.d.ts +0 -4
  264. package/lib/typescript/src/components/A11yGroup/A11yGroup.ios.d.ts.map +0 -1
  265. package/lib/typescript/src/components/A11ySequence/A11ySequence.d.ts +0 -126
  266. package/lib/typescript/src/components/A11ySequence/A11ySequence.d.ts.map +0 -1
  267. package/lib/typescript/src/components/A11yUIContainer/A11yUIContainer.d.ts +0 -3
  268. package/lib/typescript/src/components/A11yUIContainer/A11yUIContainer.d.ts.map +0 -1
  269. package/lib/typescript/src/components/A11yUIContainer/A11yUIContainer.ios.d.ts +0 -4
  270. package/lib/typescript/src/components/A11yUIContainer/A11yUIContainer.ios.d.ts.map +0 -1
  271. package/lib/typescript/src/nativeSpecs/A11yGroupNativeComponent.d.ts +0 -8
  272. package/lib/typescript/src/nativeSpecs/A11yGroupNativeComponent.d.ts.map +0 -1
  273. package/lib/typescript/src/nativeSpecs/A11yUIContainerNativeComponent.d.ts +0 -10
  274. package/lib/typescript/src/nativeSpecs/A11yUIContainerNativeComponent.d.ts.map +0 -1
  275. package/lib/typescript/src/nativeSpecs/A11yViewNativeComponent.d.ts +0 -26
  276. package/lib/typescript/src/nativeSpecs/A11yViewNativeComponent.d.ts.map +0 -1
  277. package/lib/typescript/src/types/A11yGroup.types.d.ts +0 -7
  278. package/lib/typescript/src/types/A11yGroup.types.d.ts.map +0 -1
  279. package/lib/typescript/src/types/A11yIndex.types.d.ts +0 -19
  280. package/lib/typescript/src/types/A11yIndex.types.d.ts.map +0 -1
  281. package/lib/typescript/src/types/A11yLock.types.d.ts +0 -8
  282. package/lib/typescript/src/types/A11yLock.types.d.ts.map +0 -1
  283. package/lib/typescript/src/types/A11yModule.types.d.ts +0 -7
  284. package/lib/typescript/src/types/A11yModule.types.d.ts.map +0 -1
  285. package/lib/typescript/src/types/A11yUIContainerView.types.d.ts +0 -13
  286. package/lib/typescript/src/types/A11yUIContainerView.types.d.ts.map +0 -1
  287. package/lib/typescript/src/types/A11yView.types.d.ts +0 -12
  288. package/lib/typescript/src/types/A11yView.types.d.ts.map +0 -1
  289. package/src/components/A11yGroup/A11yGroup.android.tsx +0 -8
  290. package/src/components/A11yGroup/A11yGroup.ios.tsx +0 -11
  291. package/src/components/A11yGroup/A11yGroup.tsx +0 -5
  292. package/src/components/A11yUIContainer/A11yUIContainer.ios.tsx +0 -20
  293. package/src/components/A11yUIContainer/A11yUIContainer.tsx +0 -5
  294. package/src/nativeSpecs/A11yUIContainerNativeComponent.ts +0 -12
  295. package/src/nativeSpecs/A11yViewNativeComponent.ts +0 -36
  296. package/src/types/A11yGroup.types.ts +0 -9
  297. package/src/types/A11yIndex.types.ts +0 -21
  298. package/src/types/A11yLock.types.ts +0 -8
  299. package/src/types/A11yModule.types.ts +0 -7
  300. package/src/types/A11yUIContainerView.types.ts +0 -15
  301. package/src/types/A11yView.types.ts +0 -19
  302. /package/lib/commonjs/{types → components/A11yLock}/A11yLock.types.js +0 -0
  303. /package/lib/commonjs/{types → components/A11yView}/A11yView.types.js +0 -0
  304. /package/lib/module/{types → components/A11yLock}/A11yLock.types.js +0 -0
  305. /package/lib/module/{types → components/A11yView}/A11yView.types.js +0 -0
@@ -13,99 +13,103 @@
13
13
  #import "RNAOA11yAnnounceHelper.h"
14
14
 
15
15
  @interface RNAOA11yAnnounceService ()
16
-
17
- //@property (nonatomic, copy) void (^debounceBlock)(void);
18
-
19
16
  @property (nonatomic, assign) BOOL isVoiceOverNulled;
20
17
  @property (nonatomic, assign) BOOL isAnnounceLocked;
21
-
22
18
  @property (nonatomic, strong) RNAODebouncer *announceDebouncer;
23
19
  @property (nonatomic, strong) RNAODebouncer *lockReleaseDebouncer;
24
-
25
20
  @property (nonatomic, strong) RNAOA11yAnnounceQueue *announceQueue;
26
- @property (strong, nonatomic) RNAOFocusChangeListener *voiceOverFocusListener;
27
-
21
+ @property (nonatomic, strong) RNAOFocusChangeListener *voiceOverFocusListener;
22
+ // One callback per announce:onFired: call (FIFO). Fired when the batch posts.
23
+ // Dropped without calling on cancelAll — module resolves those promises as 'cancelled'.
24
+ @property (nonatomic, strong) NSMutableArray<dispatch_block_t> *onFiredCallbacks;
28
25
  @property (nonatomic, assign, readonly) BOOL canAnnounce;
29
-
30
26
  @end
31
27
 
32
28
  @implementation RNAOA11yAnnounceService
33
29
 
34
30
  #pragma mark - Singleton
31
+
35
32
  + (instancetype)shared {
36
- static RNAOA11yAnnounceService *sharedInstance = nil;
33
+ static RNAOA11yAnnounceService *instance = nil;
37
34
  static dispatch_once_t onceToken;
38
- dispatch_once(&onceToken, ^{
39
- sharedInstance = [[RNAOA11yAnnounceService alloc] init];
40
- });
41
- return sharedInstance;
35
+ dispatch_once(&onceToken, ^{ instance = [self new]; });
36
+ return instance;
42
37
  }
43
38
 
44
39
  - (instancetype)init {
45
- if (self) {
46
- _isVoiceOverNulled = YES;
47
-
48
- self.isAnnounceLocked = NO;
49
- self.announceDebouncer = [[RNAODebouncer alloc] initWithInterval: 0.3];
50
- self.lockReleaseDebouncer = [[RNAODebouncer alloc] initWithInterval: 1];
51
- self.announceQueue = [[RNAOA11yAnnounceQueue alloc] init];
52
-
53
- self.voiceOverFocusListener = [[RNAOFocusChangeListener alloc] initWithDelegate: self];
54
- [self.voiceOverFocusListener startListening];
40
+ if (self = [super init]) {
41
+ _isVoiceOverNulled = YES;
42
+ _announceDebouncer = [[RNAODebouncer alloc] initWithInterval:0.3];
43
+ _lockReleaseDebouncer = [[RNAODebouncer alloc] initWithInterval:1.0];
44
+ _announceQueue = [RNAOA11yAnnounceQueue new];
45
+ _onFiredCallbacks = [NSMutableArray new];
46
+ _voiceOverFocusListener = [[RNAOFocusChangeListener alloc] initWithDelegate:self];
47
+ [_voiceOverFocusListener startListening];
55
48
  }
56
49
  return self;
57
50
  }
58
51
 
59
- - (void)dealloc {
60
- [self.voiceOverFocusListener stopListening];
61
- }
52
+ - (void)dealloc { [_voiceOverFocusListener stopListening]; }
62
53
 
63
54
  - (BOOL)canAnnounce {
64
55
  return !self.announceQueue.isEmpty && !self.isAnnounceLocked && !self.isVoiceOverNulled;
65
56
  }
66
57
 
58
+ #pragma mark - Focus delegate
59
+
67
60
  - (void)voiceOverFocusChanged:(id)focusedElement {
68
61
  self.isVoiceOverNulled = (focusedElement == nil);
69
-
70
- [self delayedAnnounce];
62
+ [self _scheduleAnnounce];
71
63
  }
72
64
 
65
+ #pragma mark - Lock
66
+
73
67
  - (void)temporarilyLockAnnounce {
74
- self.isAnnounceLocked = YES;
75
- [self.lockReleaseDebouncer debounceAction:^{
76
- self.isAnnounceLocked = NO;
77
- [self delayedAnnounce];
78
- }];
68
+ [self temporarilyLockAnnounce:1.0];
79
69
  }
80
70
 
81
71
  - (void)temporarilyLockAnnounce:(NSTimeInterval)interval {
82
- self.lockReleaseDebouncer.debounceInterval = interval;
83
- [self temporarilyLockAnnounce];
72
+ self.isAnnounceLocked = YES;
73
+ // Interval must be set before debounceAction: — it is read at call time.
74
+ self.lockReleaseDebouncer.debounceInterval = interval;
75
+ __weak RNAOA11yAnnounceService *weakSelf = self;
76
+ [self.lockReleaseDebouncer debounceAction:^{
77
+ weakSelf.isAnnounceLocked = NO;
78
+ [weakSelf _scheduleAnnounce];
79
+ }];
84
80
  }
85
81
 
86
-
87
82
  #pragma mark - Announce
83
+
88
84
  - (void)announce:(NSString *)announcement {
89
- [self.announceQueue add: announcement];
90
-
91
- [self delayedAnnounce];
85
+ [self announce:announcement onFired:nil];
92
86
  }
93
87
 
94
- - (void)delayedAnnounce {
95
- if(!self.canAnnounce) return;
88
+ - (void)announce:(NSString *)announcement onFired:(nullable dispatch_block_t)onFired {
89
+ [self.announceQueue add:announcement];
90
+ if (onFired) [self.onFiredCallbacks addObject:onFired];
91
+ [self _scheduleAnnounce];
92
+ }
96
93
 
97
- [self.announceDebouncer debounceAction:^{
98
- [self announceAction];
99
- }];
94
+ - (void)cancelAll {
95
+ [self.announceQueue clear];
96
+ [self.onFiredCallbacks removeAllObjects];
100
97
  }
101
98
 
102
- - (void)announceAction {
103
- if(self.canAnnounce) {
104
- [RNAOA11yAnnounceHelper announceWithList: self.announceQueue.list];
105
- [self.announceQueue clear];
106
- } else {
107
- [self delayedAnnounce];
108
- }
99
+ #pragma mark - Private
100
+
101
+ - (void)_scheduleAnnounce {
102
+ if (!self.canAnnounce) return;
103
+ __weak RNAOA11yAnnounceService *weakSelf = self;
104
+ [self.announceDebouncer debounceAction:^{ [weakSelf _announceNow]; }];
105
+ }
106
+
107
+ - (void)_announceNow {
108
+ if (!self.canAnnounce) return;
109
+ [RNAOA11yAnnounceHelper announceWithList:self.announceQueue.list];
110
+ [self.announceQueue clear];
111
+ for (dispatch_block_t cb in self.onFiredCallbacks.copy) { cb(); }
112
+ [self.onFiredCallbacks removeAllObjects];
109
113
  }
110
114
 
111
115
  @end
@@ -0,0 +1,29 @@
1
+ //
2
+ // RNAOA11yCardView.h
3
+ // react-native-a11y-order
4
+ //
5
+
6
+ #ifndef RNAOA11yCardView_h
7
+ #define RNAOA11yCardView_h
8
+
9
+ #ifdef RCT_NEW_ARCH_ENABLED
10
+
11
+ #import <React/RCTViewComponentView.h>
12
+
13
+ NS_ASSUME_NONNULL_BEGIN
14
+
15
+ @interface RNAOA11yCardView : RCTViewComponentView
16
+ @end
17
+
18
+ NS_ASSUME_NONNULL_END
19
+
20
+ #else
21
+
22
+ #import <React/RCTView.h>
23
+
24
+ @interface RNAOA11yCardView : RCTView
25
+ @end
26
+
27
+ #endif
28
+
29
+ #endif /* RNAOA11yCardView_h */
@@ -0,0 +1,83 @@
1
+ //
2
+ // RNAOA11yCardView.mm
3
+ // react-native-a11y-order
4
+ //
5
+
6
+ #import "RNAOA11yCardView.h"
7
+
8
+ #ifdef RCT_NEW_ARCH_ENABLED
9
+
10
+ #import <react/renderer/components/RNA11yOrderSpec/ComponentDescriptors.h>
11
+ #import <react/renderer/components/RNA11yOrderSpec/RCTComponentViewHelpers.h>
12
+ #import "RCTFabricComponentsPlugins.h"
13
+
14
+ using namespace facebook::react;
15
+
16
+ #endif
17
+
18
+ @implementation RNAOA11yCardView {
19
+ UIFocusGuide *_contentFocusGuide;
20
+ NSString *_overlayFocusGroupIdentifier;
21
+ NSString *_contentFocusGroupIdentifier;
22
+ }
23
+
24
+ - (nullable NSArray *)accessibilityElements {
25
+ return self.subviews;
26
+ }
27
+
28
+ - (void)willRemoveSubview:(UIView *)subview {
29
+ [super willRemoveSubview:subview];
30
+ if (@available(iOS 15.0, *)) {
31
+ NSString *identifier = subview.focusGroupIdentifier;
32
+ if ([identifier isEqualToString:_overlayFocusGroupIdentifier] ||
33
+ [identifier isEqualToString:_contentFocusGroupIdentifier]) {
34
+ subview.focusGroupIdentifier = nil;
35
+ }
36
+ }
37
+ }
38
+
39
+ - (void)assignFocusGroupIdentifierToChild:(UIView *)child atIndex:(NSInteger)index {
40
+ if (@available(iOS 15.0, *)) {
41
+ if (!_overlayFocusGroupIdentifier) {
42
+ _overlayFocusGroupIdentifier =
43
+ [NSString stringWithFormat:@"RNAOA11yCard-%p-overlay", self];
44
+ _contentFocusGroupIdentifier =
45
+ [NSString stringWithFormat:@"RNAOA11yCard-%p-content", self];
46
+ }
47
+ if (index == 0) {
48
+ child.focusGroupIdentifier = _overlayFocusGroupIdentifier;
49
+ } else if (index == 1) {
50
+ child.focusGroupIdentifier = _contentFocusGroupIdentifier;
51
+ }
52
+ }
53
+ }
54
+
55
+ #ifdef RCT_NEW_ARCH_ENABLED
56
+
57
+ - (void)mountChildComponentView:(UIView<RCTComponentViewProtocol> *)childComponentView
58
+ index:(NSInteger)index {
59
+ [super mountChildComponentView:childComponentView index:index];
60
+ [self assignFocusGroupIdentifierToChild:childComponentView atIndex:index];
61
+ }
62
+
63
+ + (ComponentDescriptorProvider)componentDescriptorProvider {
64
+ return concreteComponentDescriptorProvider<A11yCardViewComponentDescriptor>();
65
+ }
66
+
67
+ Class<RCTComponentViewProtocol> A11yCardViewCls(void) {
68
+ return RNAOA11yCardView.class;
69
+ }
70
+
71
+ #else
72
+
73
+ - (void)didAddSubview:(UIView *)subview {
74
+ [super didAddSubview:subview];
75
+ NSUInteger index = [self.subviews indexOfObject:subview];
76
+ if (index != NSNotFound) {
77
+ [self assignFocusGroupIdentifierToChild:subview atIndex:(NSInteger)index];
78
+ }
79
+ }
80
+
81
+ #endif
82
+
83
+ @end
@@ -0,0 +1,14 @@
1
+ //
2
+ // RNAOA11yCardViewManager.h
3
+ // react-native-a11y-order
4
+ //
5
+
6
+ #ifndef RNAOA11yCardViewManager_h
7
+ #define RNAOA11yCardViewManager_h
8
+
9
+ #import <React/RCTViewManager.h>
10
+
11
+ @interface RNAOA11yCardViewManager : RCTViewManager
12
+ @end
13
+
14
+ #endif /* RNAOA11yCardViewManager_h */
@@ -0,0 +1,17 @@
1
+ //
2
+ // RNAOA11yCardViewManager.mm
3
+ // react-native-a11y-order
4
+ //
5
+
6
+ #import "RNAOA11yCardView.h"
7
+ #import "RNAOA11yCardViewManager.h"
8
+
9
+ @implementation RNAOA11yCardViewManager
10
+
11
+ RCT_EXPORT_MODULE(A11yCardView)
12
+
13
+ - (UIView *)view {
14
+ return [[RNAOA11yCardView alloc] init];
15
+ }
16
+
17
+ @end
@@ -1,48 +1,9 @@
1
- //
2
- // RNAOA11yIndexView.h
3
- // A11yOrder
4
- //
5
- // Created by Artur Kalach on 13/07/2024.
6
- // Copyright © 2024 Facebook. All rights reserved.
7
- //
8
-
9
1
  #ifndef RNAOA11yIndexView_h
10
2
  #define RNAOA11yIndexView_h
11
3
 
12
- #import <UIKit/UIKit.h>
13
- #import <React/RCTUITextField.h>
14
- #import "RNAOScreenReaderFocusDelegate.h"
15
- #import "RNAOViewItemProtocol.h"
16
-
17
- #ifdef RCT_NEW_ARCH_ENABLED
18
- #import <React/RCTViewComponentView.h>
19
-
20
-
21
- NS_ASSUME_NONNULL_BEGIN
22
-
23
- @interface RNAOA11yIndexView : RCTViewComponentView<RNAOScreenReaderFocusDelegate, RNAOViewItemProtocol>
24
-
25
- - (void)setPosition: (NSNumber*)position;
26
- - (void)setOrderKey:(NSString *)orderKey;
27
- - (void)setOrderFocusType:(NSNumber *)orderFocusType;
28
-
29
- @end
30
-
31
- NS_ASSUME_NONNULL_END
32
-
33
-
34
- #else /* RCT_NEW_ARCH_ENABLED */
4
+ #import "RNAOA11yViewOrder.h"
35
5
 
36
-
37
- #import <React/RCTView.h>
38
- @interface RNAOA11yIndexView : RCTView<RNAOScreenReaderFocusDelegate, RNAOViewItemProtocol>
39
-
40
- - (void)setPosition: (NSNumber*)position;
41
- - (void)setOrderKey:(NSString *)orderKey;
42
- - (void)setOrderFocusType:(NSNumber *)orderFocusType;
43
- @property (nonatomic, copy) RCTDirectEventBlock onScreenReaderFocusChange;
6
+ @interface RNAOA11yIndexView : RNAOA11yViewOrder
44
7
  @end
45
8
 
46
-
47
- #endif /* RCT_NEW_ARCH_ENABLED */
48
9
  #endif /* RNAOA11yIndexView_h */
@@ -1,20 +1,4 @@
1
- //
2
- // RNAOA11yIndexView.m
3
- // A11yOrder
4
- //
5
- // Created by Artur Kalach on 13/07/2024.
6
- // Copyright © 2024 Facebook. All rights reserved.
7
- //
8
-
9
- #import <Foundation/Foundation.h>
10
-
11
1
  #import "RNAOA11yIndexView.h"
12
- #import <UIKit/UIKit.h>
13
- #import <React/RCTViewManager.h>
14
- #import "RNAOA11yOrderLinking.h"
15
- #import "RNAOA11yItemDelegate.h"
16
- #import "UIView+RNAOA11yOrder.h"
17
- #import "RNAOFabricEventHelper.h"
18
2
 
19
3
  #ifdef RCT_NEW_ARCH_ENABLED
20
4
 
@@ -23,154 +7,66 @@
23
7
  #import <react/renderer/components/RNA11yOrderSpec/EventEmitters.h>
24
8
  #import <react/renderer/components/RNA11yOrderSpec/Props.h>
25
9
  #import <react/renderer/components/RNA11yOrderSpec/RCTComponentViewHelpers.h>
26
-
27
10
  #import "RCTFabricComponentsPlugins.h"
28
11
 
29
12
  using namespace facebook::react;
30
13
 
31
14
  @interface RNAOA11yIndexView () <RCTA11yIndexViewViewProtocol>
32
-
33
15
  @end
34
16
 
35
17
  #endif
36
18
 
37
- @implementation RNAOA11yIndexView {
38
- RNAOA11yItemDelegate* _a11yItemDelegate;
39
- }
40
-
41
- - (void)didAddSubview:(UIView *)subview {
42
- [super didAddSubview:subview];
43
- [_a11yItemDelegate didAddSubview:subview];
44
- }
45
-
46
- #ifndef RCT_NEW_ARCH_ENABLED
47
- - (void)layoutSubviews {
48
- [super layoutSubviews];
49
- [_a11yItemDelegate finalizeUpdates];
50
- }
51
- #endif
52
-
53
- - (void)willRemoveSubview:(UIView *)subview {
54
- [super willRemoveSubview:subview];
55
- [_a11yItemDelegate willRemoveSubview: subview];
56
- }
57
-
58
- - (void)setPosition: (NSNumber*)position {
59
- [_a11yItemDelegate setPosition: position];
60
- }
61
-
62
- - (void)setOrderKey:(NSString *)orderKey {
63
- [_a11yItemDelegate setOrderKey:orderKey];
64
-
65
- }
66
- - (void)setOrderFocusType:(NSNumber *)orderFocusType {
67
- [_a11yItemDelegate setOrderFocusType: orderFocusType];
68
- }
19
+ @implementation RNAOA11yIndexView
69
20
 
70
21
  #ifdef RCT_NEW_ARCH_ENABLED
71
- - (instancetype)initWithFrame:(CGRect)frame
72
- {
22
+
23
+ - (instancetype)initWithFrame:(CGRect)frame {
73
24
  if (self = [super initWithFrame:frame]) {
74
25
  static const auto defaultProps = std::make_shared<const A11yIndexViewProps>();
75
26
  _props = defaultProps;
76
- _a11yItemDelegate = [[RNAOA11yItemDelegate alloc] initWithView: self];
77
- }
78
-
79
- return self;
80
- }
81
- #else
82
- - (instancetype)initWithFrame:(CGRect)frame
83
- {
84
- if (self = [super initWithFrame:frame]) {
85
- _a11yItemDelegate = [[RNAOA11yItemDelegate alloc] initWithView: self];
86
27
  }
87
-
88
28
  return self;
89
29
  }
90
- #endif
91
30
 
92
- #ifdef RCT_NEW_ARCH_ENABLED
93
- + (ComponentDescriptorProvider)componentDescriptorProvider
94
- {
31
+ + (ComponentDescriptorProvider)componentDescriptorProvider {
95
32
  return concreteComponentDescriptorProvider<A11yIndexViewComponentDescriptor>();
96
33
  }
97
34
 
98
-
99
- - (void)updateProps:(Props::Shared const &)props oldProps:(Props::Shared const &)oldProps
100
- {
35
+ - (void)updateProps:(Props::Shared const &)props oldProps:(Props::Shared const &)oldProps {
101
36
  const auto &oldViewProps = *std::static_pointer_cast<A11yIndexViewProps const>(_props);
102
37
  const auto &newViewProps = *std::static_pointer_cast<A11yIndexViewProps const>(props);
103
- [super updateProps
104
- :props oldProps:oldProps];
105
-
106
- BOOL isIndexChanged = oldViewProps.orderIndex != newViewProps.orderIndex || _a11yItemDelegate.position == nil;
107
- if(isIndexChanged) {
38
+ [super updateProps:props oldProps:oldProps];
39
+
40
+ if (oldViewProps.orderIndex != newViewProps.orderIndex || [self delegatePosition] == nil) {
108
41
  [self setPosition: @(newViewProps.orderIndex)];
109
42
  }
110
-
111
- BOOL isOrderChanged = oldViewProps.orderKey != newViewProps.orderKey || _a11yItemDelegate.orderKey == nil;
112
- if(isOrderChanged) {
43
+
44
+ if (oldViewProps.orderKey != newViewProps.orderKey || [self delegateOrderKey] == nil) {
113
45
  [self setOrderKey: [NSString stringWithUTF8String:newViewProps.orderKey.c_str()]];
114
46
  }
115
-
116
- BOOL isOrderFocusTypeChanged = oldViewProps.orderFocusType != newViewProps.orderFocusType || _a11yItemDelegate.orderFocusType == nil;
117
- if(isOrderFocusTypeChanged) {
47
+
48
+ if (oldViewProps.orderFocusType != newViewProps.orderFocusType || [self delegateOrderFocusType] == nil) {
118
49
  [self setOrderFocusType: @(newViewProps.orderFocusType)];
119
50
  }
120
- }
121
-
122
- - (void)finalizeUpdates:(RNComponentViewUpdateMask)updateMask {
123
- [super finalizeUpdates:updateMask];
124
- [_a11yItemDelegate finalizeUpdates];
125
- }
126
51
 
127
- - (void)focusView {
128
- UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, self);
129
- }
130
-
131
- - (void)handleCommand:(const NSString *)commandName args:(const NSArray *)args {
132
- NSString *FOCUS = @"focus";
133
- if([commandName isEqual:FOCUS]) {
134
- [self focusView];
52
+ if (self.groupChildrenMode != newViewProps.shouldGroupAccessibilityChildren) {
53
+ self.groupChildrenMode = newViewProps.shouldGroupAccessibilityChildren;
54
+ }
55
+
56
+ if (self.descendantFocusChangedEnabled != newViewProps.descendantFocusChangedEnabled) {
57
+ [self setDescendantFocusChangedEnabled: newViewProps.descendantFocusChangedEnabled];
58
+ }
59
+
60
+ if (oldViewProps.containerType != newViewProps.containerType) {
61
+ NSInteger containerType = newViewProps.containerType;
62
+ self.accessibilityContainerType = (UIAccessibilityContainerType)containerType;
135
63
  }
136
64
  }
137
65
 
138
- - (void)prepareForRecycle
139
- {
140
- [_a11yItemDelegate clear];
141
- [super prepareForRecycle];
142
- }
143
-
144
- Class<RCTComponentViewProtocol> A11yIndexViewCls(void)
145
- {
66
+ Class<RCTComponentViewProtocol> A11yIndexViewCls(void) {
146
67
  return RNAOA11yIndexView.class;
147
68
  }
148
69
 
149
70
  #endif
150
71
 
151
-
152
- #ifdef RCT_NEW_ARCH_ENABLED
153
- - (void)onScreenReaderFocusChangeHandler:(BOOL)isFocused {
154
- [RNAOFabricEventHelper onIndexViewFocusChange:isFocused withEmitter:_eventEmitter];
155
- }
156
- #else
157
- - (void)onScreenReaderFocusChangeHandler:(BOOL)isFocused {
158
- if (self.onScreenReaderFocusChange) {
159
- self.onScreenReaderFocusChange(@{@"isFocused" : @(isFocused)});
160
- }
161
- }
162
- #endif
163
-
164
- - (void)onFocusItemLinked: (UIView*)view {
165
- [view setScreenReaderFocusDelegate: self];
166
- }
167
-
168
- - (void)onFocusItemRemoved: (UIView*)view {
169
- [view clearScreenReaderFocusDelegate];
170
- }
171
-
172
- - (void)onScreenReaderFocusChanged:(BOOL)focused {
173
- [self onScreenReaderFocusChangeHandler: focused];
174
- }
175
-
176
72
  @end
@@ -49,6 +49,21 @@ RCT_EXPORT_METHOD(focus:(nonnull NSNumber *)reactTag)
49
49
  }];
50
50
  }
51
51
 
52
+ RCT_CUSTOM_VIEW_PROPERTY(descendantFocusChangedEnabled, BOOL, RNAOA11yIndexView)
53
+ {
54
+ BOOL value = json ? [RCTConvert BOOL:json] : NO;
55
+ [view setDescendantFocusChangedEnabled: value];
56
+ }
57
+
58
+ RCT_CUSTOM_VIEW_PROPERTY(containerType, NSInteger, UIView)
59
+ {
60
+ NSInteger viewContainerType = json ? [RCTConvert NSInteger:json] : 0;
61
+ view.accessibilityContainerType = (UIAccessibilityContainerType)viewContainerType;
62
+ }
63
+
64
+ RCT_EXPORT_VIEW_PROPERTY(onScreenReaderFocused, RCTDirectEventBlock)
52
65
  RCT_EXPORT_VIEW_PROPERTY(onScreenReaderFocusChange, RCTDirectEventBlock)
66
+ RCT_EXPORT_VIEW_PROPERTY(onScreenReaderDescendantFocusChanged, RCTDirectEventBlock)
67
+
53
68
 
54
69
  @end
@@ -12,6 +12,7 @@
12
12
  #import "RNAOA11yPaneTitleView.h"
13
13
  #import "UIViewController+RNAOA11yOrder.h"
14
14
  #import "RNAOA11yAnnounceService.h"
15
+ #import "RNAOSpeechAttributes.h"
15
16
 
16
17
  #ifdef RCT_NEW_ARCH_ENABLED
17
18
 
@@ -99,10 +100,10 @@ Class<RCTComponentViewProtocol> A11yPaneTitleCls(void)
99
100
 
100
101
  if(self.window && !_announced) {
101
102
  _announced = YES;
102
- [[RNAOA11yAnnounceService shared] announce: _title];
103
+ [self _announce:_title];
103
104
  }
104
105
  if(!self.window && _announced && _detachMessage) {
105
- [[RNAOA11yAnnounceService shared] announce: _detachMessage];
106
+ [self _announce:_detachMessage];
106
107
  }
107
108
 
108
109
  if (self.window) {
@@ -113,5 +114,14 @@ Class<RCTComponentViewProtocol> A11yPaneTitleCls(void)
113
114
  }
114
115
  }
115
116
 
117
+ - (void)_announce:(NSString *)message {
118
+ if (@available(iOS 17.0, *)) {
119
+ NSAttributedString *attrStr = [RNAOSpeechAttributes attributedStringFor:message
120
+ options:@{ @"priority": @"high", @"queue": @NO }];
121
+ UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, attrStr);
122
+ } else {
123
+ [[RNAOA11yAnnounceService shared] announce:message];
124
+ }
125
+ }
116
126
 
117
127
  @end
@@ -0,0 +1,21 @@
1
+ #ifndef RNAOA11yGroupChildrenView_h
2
+ #define RNAOA11yGroupChildrenView_h
3
+
4
+ #import "RNAOA11yScreenReaderView.h"
5
+
6
+ #ifdef RCT_NEW_ARCH_ENABLED
7
+ NS_ASSUME_NONNULL_BEGIN
8
+ #endif
9
+
10
+ // groupChildrenMode: -1 = defer to super (default), 0 = NO, 1 = YES
11
+ @interface RNAOA11yGroupChildrenView : RNAOA11yScreenReaderView
12
+
13
+ @property (nonatomic) int groupChildrenMode;
14
+
15
+ @end
16
+
17
+ #ifdef RCT_NEW_ARCH_ENABLED
18
+ NS_ASSUME_NONNULL_END
19
+ #endif
20
+
21
+ #endif /* RNAOA11yGroupChildrenView_h */
@@ -0,0 +1,19 @@
1
+ #import "RNAOA11yGroupChildrenView.h"
2
+
3
+ @implementation RNAOA11yGroupChildrenView
4
+
5
+ - (instancetype)initWithFrame:(CGRect)frame {
6
+ if (self = [super initWithFrame:frame]) {
7
+ _groupChildrenMode = -1;
8
+ }
9
+ return self;
10
+ }
11
+
12
+ - (BOOL)shouldGroupAccessibilityChildren {
13
+ if (_groupChildrenMode == -1) {
14
+ return [super shouldGroupAccessibilityChildren];
15
+ }
16
+ return (BOOL)_groupChildrenMode;
17
+ }
18
+
19
+ @end
@@ -0,0 +1,28 @@
1
+ #ifndef RNAOA11yManagedFocusView_h
2
+ #define RNAOA11yManagedFocusView_h
3
+
4
+ #import "RNAOA11yGroupChildrenView.h"
5
+ #import "RNAOA11yFocusService.h"
6
+
7
+ #ifdef RCT_NEW_ARCH_ENABLED
8
+
9
+ NS_ASSUME_NONNULL_BEGIN
10
+
11
+ @interface RNAOA11yManagedFocusView : RNAOA11yGroupChildrenView<RNAOA11yFocusServiceSubscriber>
12
+ @property BOOL descendantFocusChangedEnabled;
13
+ @end
14
+
15
+ NS_ASSUME_NONNULL_END
16
+
17
+ #else
18
+
19
+ @interface RNAOA11yManagedFocusView : RNAOA11yGroupChildrenView<RNAOA11yFocusServiceSubscriber>
20
+ @property BOOL descendantFocusChangedEnabled;
21
+ @property (nonatomic, copy) RCTDirectEventBlock onScreenReaderDescendantFocusChanged;
22
+ @property (nonatomic, copy) RCTDirectEventBlock onScreenReaderFocusChange;
23
+ @property (nonatomic, copy) RCTDirectEventBlock onScreenReaderFocused;
24
+ @end
25
+
26
+ #endif
27
+
28
+ #endif /* RNAOA11yManagedFocusView_h */