react-native-external-keyboard 0.5.6 → 0.6.1-rc

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 (102) hide show
  1. package/README.md +277 -14
  2. package/android/src/main/java/com/externalkeyboard/delegates/FocusOrderDelegate.java +213 -0
  3. package/android/src/main/java/com/externalkeyboard/helper/FocusHelper.java +44 -0
  4. package/android/src/main/java/com/externalkeyboard/helper/Linking/A11yOrderLinking.java +81 -0
  5. package/android/src/main/java/com/externalkeyboard/helper/Linking/LinkingQueue.java +94 -0
  6. package/android/src/main/java/com/externalkeyboard/helper/ReactNativeVersionChecker.java +24 -0
  7. package/android/src/main/java/com/externalkeyboard/services/FocusLinkObserver/FocusLinkObserver.java +131 -0
  8. package/android/src/main/java/com/externalkeyboard/services/FocusLinkObserver/FocusLinkObserverSingleton.java +20 -0
  9. package/android/src/main/java/com/externalkeyboard/views/ExternalKeyboardView/ExternalKeyboardView.java +144 -0
  10. package/android/src/main/java/com/externalkeyboard/views/ExternalKeyboardView/ExternalKeyboardViewManager.java +128 -8
  11. package/android/src/main/java/com/externalkeyboard/views/KeyboardFocusGroup/KeyboardFocusGroupManager.java +7 -3
  12. package/android/src/main/java/com/externalkeyboard/views/TextInputFocusWrapper/TextInputFocusWrapper.java +2 -13
  13. package/android/src/oldarch/ExternalKeyboardViewManagerSpec.java +25 -0
  14. package/android/src/oldarch/KeyboardFocusGroupManagerSpec.java +8 -1
  15. package/ios/Delegates/RNCEKVFocusOrderDelegate/RNCEKVFocusOrderDelegate.h +33 -0
  16. package/ios/Delegates/RNCEKVFocusOrderDelegate/RNCEKVFocusOrderDelegate.mm +577 -0
  17. package/ios/Delegates/RNCEKVFocusOrderDelegate/RNCEKVFocusOrderProtocol.h +34 -0
  18. package/ios/Delegates/RNCEKVGroupIdentifierDelegate/RNCEKVGroupIdentifierDelegate.h +1 -0
  19. package/ios/Delegates/RNCEKVGroupIdentifierDelegate/RNCEKVGroupIdentifierDelegate.mm +9 -0
  20. package/ios/Helpers/RNCEKVPropHelper/RNCEKVPropHelper.h +22 -0
  21. package/ios/Helpers/RNCEKVPropHelper/RNCEKVPropHelper.mm +48 -0
  22. package/ios/Services/RNCEKVFocusLinkObserver.h +27 -0
  23. package/ios/Services/RNCEKVFocusLinkObserver.mm +101 -0
  24. package/ios/Services/RNCEKVFocusLinkObserverManager.h +23 -0
  25. package/ios/Services/RNCEKVFocusLinkObserverManager.mm +30 -0
  26. package/ios/Services/RNCEKVOrderLinking.h +33 -0
  27. package/ios/Services/RNCEKVOrderLinking.mm +143 -0
  28. package/ios/Services/RNCEKVOrderSubscriber.h +24 -0
  29. package/ios/Services/RNCEKVOrderSubscriber.mm +23 -0
  30. package/ios/Services/RNCEKVRelashioship.h +28 -0
  31. package/ios/Services/RNCEKVRelashioship.mm +61 -0
  32. package/ios/Services/RNCEKVSortedMap.h +22 -0
  33. package/ios/Services/RNCEKVSortedMap.mm +112 -0
  34. package/ios/Views/RNCEKVExternalKeyboardView/RNCEKVExternalKeyboardView.h +34 -3
  35. package/ios/Views/RNCEKVExternalKeyboardView/RNCEKVExternalKeyboardView.mm +214 -54
  36. package/ios/Views/RNCEKVExternalKeyboardView/RNCEKVExternalKeyboardViewManager.h +9 -0
  37. package/ios/Views/RNCEKVExternalKeyboardView/RNCEKVExternalKeyboardViewManager.mm +80 -55
  38. package/ios/Views/RNCEKVKeyboardFocusGroupView/RNCEKVKeyboardFocusGroup.h +2 -0
  39. package/ios/Views/RNCEKVKeyboardFocusGroupView/RNCEKVKeyboardFocusGroup.mm +161 -3
  40. package/ios/Views/RNCEKVKeyboardFocusGroupView/RNCEKVKeyboardFocusGroupManager.mm +6 -0
  41. package/lib/commonjs/components/BaseKeyboardView/BaseKeyboardView.js +56 -3
  42. package/lib/commonjs/components/BaseKeyboardView/BaseKeyboardView.js.map +1 -1
  43. package/lib/commonjs/components/KeyboardFocusGroup/KeyboardFocusGroup.android.js +30 -0
  44. package/lib/commonjs/components/KeyboardFocusGroup/KeyboardFocusGroup.android.js.map +1 -0
  45. package/lib/commonjs/components/KeyboardFocusGroup/KeyboardFocusGroup.ios.js.map +1 -1
  46. package/lib/commonjs/components/KeyboardFocusGroup/KeyboardFocusGroup.js.map +1 -1
  47. package/lib/commonjs/context/OrderFocusContext.js +23 -0
  48. package/lib/commonjs/context/OrderFocusContext.js.map +1 -0
  49. package/lib/commonjs/index.js +19 -0
  50. package/lib/commonjs/index.js.map +1 -1
  51. package/lib/commonjs/nativeSpec/ExternalKeyboardViewNativeComponent.js.map +1 -1
  52. package/lib/commonjs/nativeSpec/KeyboardFocusGroupNativeComponent.js.map +1 -1
  53. package/lib/commonjs/types/BaseKeyboardView.js +12 -0
  54. package/lib/commonjs/types/BaseKeyboardView.js.map +1 -1
  55. package/lib/commonjs/utils/withKeyboardFocus.js +25 -1
  56. package/lib/commonjs/utils/withKeyboardFocus.js.map +1 -1
  57. package/lib/module/components/BaseKeyboardView/BaseKeyboardView.js +55 -2
  58. package/lib/module/components/BaseKeyboardView/BaseKeyboardView.js.map +1 -1
  59. package/lib/module/components/KeyboardFocusGroup/KeyboardFocusGroup.android.js +23 -0
  60. package/lib/module/components/KeyboardFocusGroup/KeyboardFocusGroup.android.js.map +1 -0
  61. package/lib/module/components/KeyboardFocusGroup/KeyboardFocusGroup.ios.js.map +1 -1
  62. package/lib/module/components/KeyboardFocusGroup/KeyboardFocusGroup.js.map +1 -1
  63. package/lib/module/context/OrderFocusContext.js +14 -0
  64. package/lib/module/context/OrderFocusContext.js.map +1 -0
  65. package/lib/module/index.js +1 -0
  66. package/lib/module/index.js.map +1 -1
  67. package/lib/module/nativeSpec/ExternalKeyboardViewNativeComponent.js.map +1 -1
  68. package/lib/module/nativeSpec/KeyboardFocusGroupNativeComponent.js.map +1 -1
  69. package/lib/module/types/BaseKeyboardView.js +11 -1
  70. package/lib/module/types/BaseKeyboardView.js.map +1 -1
  71. package/lib/module/utils/withKeyboardFocus.js +25 -1
  72. package/lib/module/utils/withKeyboardFocus.js.map +1 -1
  73. package/lib/typescript/src/components/BaseKeyboardView/BaseKeyboardView.d.ts +1 -1
  74. package/lib/typescript/src/components/BaseKeyboardView/BaseKeyboardView.d.ts.map +1 -1
  75. package/lib/typescript/src/components/KeyboardFocusGroup/KeyboardFocusGroup.android.d.ts +24 -0
  76. package/lib/typescript/src/components/KeyboardFocusGroup/KeyboardFocusGroup.android.d.ts.map +1 -0
  77. package/lib/typescript/src/components/KeyboardFocusGroup/KeyboardFocusGroup.d.ts +1 -0
  78. package/lib/typescript/src/components/KeyboardFocusGroup/KeyboardFocusGroup.d.ts.map +1 -1
  79. package/lib/typescript/src/components/KeyboardFocusGroup/KeyboardFocusGroup.ios.d.ts +2 -0
  80. package/lib/typescript/src/components/KeyboardFocusGroup/KeyboardFocusGroup.ios.d.ts.map +1 -1
  81. package/lib/typescript/src/context/OrderFocusContext.d.ts +10 -0
  82. package/lib/typescript/src/context/OrderFocusContext.d.ts.map +1 -0
  83. package/lib/typescript/src/index.d.ts +1 -0
  84. package/lib/typescript/src/index.d.ts.map +1 -1
  85. package/lib/typescript/src/nativeSpec/ExternalKeyboardViewNativeComponent.d.ts +12 -0
  86. package/lib/typescript/src/nativeSpec/ExternalKeyboardViewNativeComponent.d.ts.map +1 -1
  87. package/lib/typescript/src/nativeSpec/KeyboardFocusGroupNativeComponent.d.ts +1 -0
  88. package/lib/typescript/src/nativeSpec/KeyboardFocusGroupNativeComponent.d.ts.map +1 -1
  89. package/lib/typescript/src/types/BaseKeyboardView.d.ts +24 -0
  90. package/lib/typescript/src/types/BaseKeyboardView.d.ts.map +1 -1
  91. package/lib/typescript/src/utils/withKeyboardFocus.d.ts.map +1 -1
  92. package/package.json +1 -1
  93. package/src/components/BaseKeyboardView/BaseKeyboardView.tsx +77 -4
  94. package/src/components/KeyboardFocusGroup/KeyboardFocusGroup.android.tsx +39 -0
  95. package/src/components/KeyboardFocusGroup/KeyboardFocusGroup.ios.tsx +1 -0
  96. package/src/components/KeyboardFocusGroup/KeyboardFocusGroup.tsx +1 -0
  97. package/src/context/OrderFocusContext.tsx +25 -0
  98. package/src/index.tsx +5 -0
  99. package/src/nativeSpec/ExternalKeyboardViewNativeComponent.ts +12 -0
  100. package/src/nativeSpec/KeyboardFocusGroupNativeComponent.ts +1 -0
  101. package/src/types/BaseKeyboardView.ts +26 -0
  102. package/src/utils/withKeyboardFocus.tsx +24 -0
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ export declare const OrderFocusGroupContext: React.Context<string | undefined>;
3
+ export declare const useOrderFocusGroup: () => string | undefined;
4
+ type KeyboardOrderFocusGroupProps = {
5
+ groupId?: string;
6
+ children?: React.ReactNode;
7
+ };
8
+ export declare const KeyboardOrderFocusGroup: ({ children, groupId, }: KeyboardOrderFocusGroupProps) => import("react/jsx-runtime").JSX.Element;
9
+ export {};
10
+ //# sourceMappingURL=OrderFocusContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrderFocusContext.d.ts","sourceRoot":"","sources":["../../../../src/context/OrderFocusContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAEjD,eAAO,MAAM,sBAAsB,mCAElC,CAAC;AAEF,eAAO,MAAM,kBAAkB,0BAA2C,CAAC;AAE3E,KAAK,4BAA4B,GAAG;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,wBAGrC,4BAA4B,4CAQ9B,CAAC"}
@@ -7,6 +7,7 @@ export { KeyboardExtendedInput, KeyboardExtendedInput as TextInput, } from './co
7
7
  export { KeyboardFocusGroup } from './components/KeyboardFocusGroup/KeyboardFocusGroup';
8
8
  export { withKeyboardFocus } from './utils/withKeyboardFocus';
9
9
  export { useIsViewFocused } from './context/IsViewFocusedContext';
10
+ export { KeyboardOrderFocusGroup, OrderFocusGroupContext, useOrderFocusGroup, } from './context/OrderFocusContext';
10
11
  import * as Keyboard from './modules/Keyboard';
11
12
  export { Keyboard };
12
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAC1B,2BAA2B,EAC3B,KAAK,QAAQ,GACd,MAAM,cAAc,CAAC;AAEtB,YAAY,EACV,UAAU,EACV,aAAa,EACb,oBAAoB,IAAI,wBAAwB,GACjD,MAAM,0BAA0B,CAAC;AAElC,YAAY,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAE1D,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,SAAS,EACT,SAAS,IAAI,yBAAyB,GACvC,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,qBAAqB,EACrB,qBAAqB,IAAI,SAAS,GACnC,MAAM,0DAA0D,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oDAAoD,CAAC;AACxF,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,KAAK,QAAQ,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAC1B,2BAA2B,EAC3B,KAAK,QAAQ,GACd,MAAM,cAAc,CAAC;AAEtB,YAAY,EACV,UAAU,EACV,aAAa,EACb,oBAAoB,IAAI,wBAAwB,GACjD,MAAM,0BAA0B,CAAC;AAElC,YAAY,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAE1D,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,SAAS,EACT,SAAS,IAAI,yBAAyB,GACvC,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,qBAAqB,EACrB,qBAAqB,IAAI,SAAS,GACnC,MAAM,0DAA0D,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oDAAoD,CAAC;AACxF,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,QAAQ,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,CAAC"}
@@ -41,6 +41,18 @@ export interface ExternalKeyboardNativeProps extends ViewProps {
41
41
  enableA11yFocus?: boolean;
42
42
  screenAutoA11yFocus?: boolean;
43
43
  screenAutoA11yFocusDelay?: Int32;
44
+ orderGroup?: string;
45
+ orderIndex?: Int32;
46
+ lockFocus?: Int32;
47
+ orderId?: string;
48
+ orderLeft?: string;
49
+ orderRight?: string;
50
+ orderUp?: string;
51
+ orderDown?: string;
52
+ orderForward?: string;
53
+ orderBackward?: string;
54
+ orderFirst?: string;
55
+ orderLast?: string;
44
56
  }
45
57
  export interface NativeCommands {
46
58
  focus: (viewRef: React.ElementRef<ComponentType>) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"ExternalKeyboardViewNativeComponent.d.ts","sourceRoot":"","sources":["../../../../src/nativeSpec/ExternalKeyboardViewNativeComponent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,KAAK,EACV,oBAAoB,EACpB,kBAAkB,EAClB,KAAK,EACL,KAAK,EACN,MAAM,2CAA2C,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAG3C,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAC;IACjC,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC;IAChC,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;CACvB,CAAC,CAAC;AAEH,MAAM,MAAM,QAAQ,GAAG,QAAQ,CAAC;IAC9B,OAAO,EAAE,KAAK,CAAC;IACf,OAAO,EAAE,KAAK,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;CACzB,CAAC,CAAC;AAEH,MAAM,WAAW,2BAA4B,SAAQ,SAAS;IAC5D,aAAa,CAAC,EAAE,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAChD,YAAY,CAAC,EAAE,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAC5C,cAAc,CAAC,EAAE,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAC9C,kBAAkB,CAAC,EAAE,kBAAkB,CAAC,EAAE,CAAC,CAAC;IAC5C,yBAAyB,CAAC,EAAE,oBAAoB,CAAC,EAAE,CAAC,CAAC;IACrD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,gBAAgB,CAAC,EAAE,KAAK,CAAC;IACzB,WAAW,CAAC,EAAE,KAAK,CAAC;IACpB,WAAW,CAAC,EAAE,KAAK,CAAC;IACpB,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,wBAAwB,CAAC,EAAE,KAAK,CAAC;CAClC;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC;CAC3D;AAED,eAAO,MAAM,QAAQ,EAAE,cAErB,CAAC;;AAEH,wBAEE"}
1
+ {"version":3,"file":"ExternalKeyboardViewNativeComponent.d.ts","sourceRoot":"","sources":["../../../../src/nativeSpec/ExternalKeyboardViewNativeComponent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,KAAK,EACV,oBAAoB,EACpB,kBAAkB,EAClB,KAAK,EACL,KAAK,EACN,MAAM,2CAA2C,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAG3C,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAC;IACjC,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC;IAChC,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;CACvB,CAAC,CAAC;AAEH,MAAM,MAAM,QAAQ,GAAG,QAAQ,CAAC;IAC9B,OAAO,EAAE,KAAK,CAAC;IACf,OAAO,EAAE,KAAK,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;CACzB,CAAC,CAAC;AAEH,MAAM,WAAW,2BAA4B,SAAQ,SAAS;IAC5D,aAAa,CAAC,EAAE,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAChD,YAAY,CAAC,EAAE,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAC5C,cAAc,CAAC,EAAE,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAC9C,kBAAkB,CAAC,EAAE,kBAAkB,CAAC,EAAE,CAAC,CAAC;IAC5C,yBAAyB,CAAC,EAAE,oBAAoB,CAAC,EAAE,CAAC,CAAC;IACrD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,gBAAgB,CAAC,EAAE,KAAK,CAAC;IACzB,WAAW,CAAC,EAAE,KAAK,CAAC;IACpB,WAAW,CAAC,EAAE,KAAK,CAAC;IACpB,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,wBAAwB,CAAC,EAAE,KAAK,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,KAAK,CAAC;IACnB,SAAS,CAAC,EAAE,KAAK,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC;CAC3D;AAED,eAAO,MAAM,QAAQ,EAAE,cAErB,CAAC;;AAEH,wBAEE"}
@@ -7,6 +7,7 @@ export interface KeyboardFocusGroupNativeComponentProps extends ViewProps {
7
7
  onGroupFocusChange?: DirectEventHandler<FocusChange>;
8
8
  tintColor?: ColorValue;
9
9
  groupIdentifier?: string;
10
+ orderGroup?: string;
10
11
  }
11
12
  declare const _default: import("react-native/Libraries/Utilities/codegenNativeComponent").NativeComponentType<KeyboardFocusGroupNativeComponentProps>;
12
13
  export default _default;
@@ -1 +1 @@
1
- {"version":3,"file":"KeyboardFocusGroupNativeComponent.d.ts","sourceRoot":"","sources":["../../../../src/nativeSpec/KeyboardFocusGroupNativeComponent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAEpF,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAC;IACjC,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC,CAAC;AAEH,MAAM,WAAW,sCAAuC,SAAQ,SAAS;IACvE,kBAAkB,CAAC,EAAE,kBAAkB,CAAC,WAAW,CAAC,CAAC;IACrD,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;;AAED,wBAEE"}
1
+ {"version":3,"file":"KeyboardFocusGroupNativeComponent.d.ts","sourceRoot":"","sources":["../../../../src/nativeSpec/KeyboardFocusGroupNativeComponent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAEpF,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAC;IACjC,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC,CAAC;AAEH,MAAM,WAAW,sCAAuC,SAAQ,SAAS;IACvE,kBAAkB,CAAC,EAAE,kBAAkB,CAAC,WAAW,CAAC,CAAC;IACrD,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;;AAED,wBAEE"}
@@ -1,6 +1,7 @@
1
1
  import type { View, ViewProps, NativeSyntheticEvent, ColorValue } from 'react-native';
2
2
  import type { KeyPress } from '../nativeSpec/ExternalKeyboardViewNativeComponent';
3
3
  import type { RefObject } from 'react';
4
+ import type { Int32 } from 'react-native/Libraries/Types/CodegenTypes';
4
5
  export type OnKeyPress = NativeSyntheticEvent<KeyPress> & {
5
6
  nativeEvent?: {
6
7
  target?: number;
@@ -14,6 +15,17 @@ export type KeyboardFocus = {
14
15
  focus: () => void;
15
16
  };
16
17
  export type BaseKeyboardViewType = Partial<View> & KeyboardFocus;
18
+ export declare enum LockFocusEnum {
19
+ Up = "up",
20
+ Down = "down",
21
+ Right = "right",
22
+ Left = "left",
23
+ Forward = "forward",
24
+ Backward = "backward",
25
+ First = "first",
26
+ Last = "last"
27
+ }
28
+ export type LockFocusType = `${LockFocusEnum}`;
17
29
  export type BaseFocusViewProps = {
18
30
  viewRef?: RefObject<View>;
19
31
  group?: boolean;
@@ -38,6 +50,18 @@ export type BaseFocusViewProps = {
38
50
  enableA11yFocus?: boolean;
39
51
  screenAutoA11yFocus?: boolean;
40
52
  screenAutoA11yFocusDelay?: number;
53
+ orderGroup?: string;
54
+ orderIndex?: Int32;
55
+ lockFocus?: LockFocusType[];
56
+ orderId?: string;
57
+ orderLeft?: string;
58
+ orderRight?: string;
59
+ orderUp?: string;
60
+ orderDown?: string;
61
+ orderForward?: string;
62
+ orderBackward?: string;
63
+ orderFirst?: string | null;
64
+ orderLast?: string | null;
41
65
  };
42
66
  export type BaseKeyboardViewProps = ViewProps & BaseFocusViewProps;
43
67
  //# sourceMappingURL=BaseKeyboardView.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"BaseKeyboardView.d.ts","sourceRoot":"","sources":["../../../../src/types/BaseKeyboardView.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,IAAI,EACJ,SAAS,EACT,oBAAoB,EACpB,UAAU,EACX,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mDAAmD,CAAC;AAClF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,MAAM,UAAU,GAAG,oBAAoB,CAAC,QAAQ,CAAC,GAAG;IACxD,WAAW,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAClC,aAAa,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;AACnD,MAAM,MAAM,aAAa,GAAG;IAAE,KAAK,EAAE,MAAM,IAAI,CAAA;CAAE,CAAC;AAClD,MAAM,MAAM,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC;AAEjE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,aAAa,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3D,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,cAAc,CAAC,EAAE,YAAY,CAAC;IAC9B,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;IAChC,yBAAyB,CAAC,EAAE,MAAM,IAAI,CAAC;IACvC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,SAAS,GAAG,kBAAkB,CAAC"}
1
+ {"version":3,"file":"BaseKeyboardView.d.ts","sourceRoot":"","sources":["../../../../src/types/BaseKeyboardView.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"withKeyboardFocus.d.ts","sourceRoot":"","sources":["../../../../src/utils/withKeyboardFocus.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAwB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACpE,OAAO,EACL,IAAI,EAEJ,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,cAAc,EACpB,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAE3E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EACL,KAAK,UAAU,EAEhB,MAAM,uDAAuD,CAAC;AAG/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAEvE,MAAM,MAAM,iBAAiB,CAAC,CAAC,EAAE,CAAC,IAAI;IACpC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC,CAAC;IACzC,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC,CAAC;IAC7C,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC,CAAC;IAC3C,UAAU,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI;IACjC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,cAAc,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACtC,mBAAmB,CAAC,EAAE,UAAU,CAAC;IACjC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,YAAY,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IAC5B,mBAAmB,CAAC,EAAE,UAAU,CAAC;IACjC,KAAK,CAAC,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,GAC3C,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,GACvB,cAAc,GACd,iBAAiB,CAAC,CAAC,CAAC,CAAC;AAEvB,eAAO,MAAM,iBAAiB,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,EACrD,WAAW,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,iKA2IlC,CAAC"}
1
+ {"version":3,"file":"withKeyboardFocus.d.ts","sourceRoot":"","sources":["../../../../src/utils/withKeyboardFocus.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAwB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACpE,OAAO,EACL,IAAI,EAEJ,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,cAAc,EACpB,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAE3E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EACL,KAAK,UAAU,EAEhB,MAAM,uDAAuD,CAAC;AAG/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAEvE,MAAM,MAAM,iBAAiB,CAAC,CAAC,EAAE,CAAC,IAAI;IACpC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC,CAAC;IACzC,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC,CAAC;IAC7C,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC,CAAC;IAC3C,UAAU,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI;IACjC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,cAAc,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACtC,mBAAmB,CAAC,EAAE,UAAU,CAAC;IACjC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,YAAY,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IAC5B,mBAAmB,CAAC,EAAE,UAAU,CAAC;IACjC,KAAK,CAAC,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,GAC3C,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,GACvB,cAAc,GACd,iBAAiB,CAAC,CAAC,CAAC,CAAC;AAEvB,eAAO,MAAM,iBAAiB,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,EACrD,WAAW,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,iKAmKlC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-external-keyboard",
3
- "version": "0.5.6",
3
+ "version": "0.6.1-rc",
4
4
  "description": "Toolkit for improving physical keyboard support in React Native",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
@@ -1,16 +1,25 @@
1
- import React, { type ComponentType, useImperativeHandle, useRef } from 'react';
1
+ import React, {
2
+ type ComponentType,
3
+ useEffect,
4
+ useImperativeHandle,
5
+ useMemo,
6
+ useRef,
7
+ } from 'react';
2
8
  import { Platform } from 'react-native';
3
9
  import { ExternalKeyboardViewNative } from '../../nativeSpec';
4
10
  import { Commands } from '../../nativeSpec/ExternalKeyboardViewNativeComponent';
5
- import type {
6
- BaseKeyboardViewProps,
7
- BaseKeyboardViewType,
11
+ import {
12
+ LockFocusEnum,
13
+ type BaseKeyboardViewProps,
14
+ type BaseKeyboardViewType,
15
+ type LockFocusType,
8
16
  } from '../../types/BaseKeyboardView';
9
17
  import type { View } from 'react-native';
10
18
  import { KeyPressContext } from '../../context/BubbledKeyPressContext';
11
19
  import { useBubbledInfo } from './BaseKeyboardView.hooks';
12
20
  import { useGroupIdentifierContext } from '../../context/GroupIdentifierContext';
13
21
  import { useOnFocusChange } from '../../utils/useOnFocusChange';
22
+ import { useOrderFocusGroup } from '../../context/OrderFocusContext';
14
23
 
15
24
  type NativeRef = React.ElementRef<ComponentType>;
16
25
  const isIOS = Platform.OS === 'ios';
@@ -23,6 +32,37 @@ const DEFAULT_EXPOSE_METHODS = [
23
32
  'setNativeProps',
24
33
  ];
25
34
 
35
+ enum BITS {
36
+ BIT_01 = 0b1,
37
+ BIT_02 = 0b10,
38
+ BIT_03 = 0b100,
39
+ BIT_04 = 0b1000,
40
+ BIT_05 = 0b10000,
41
+ BIT_06 = 0b100000,
42
+ BIT_07 = 0b1000000,
43
+ BIT_08 = 0b10000000,
44
+ BIT_09 = 0b100000000,
45
+ BIT_10 = 0b1000000000,
46
+ }
47
+
48
+ const focusBinaryValue: Record<LockFocusEnum, number> = {
49
+ [LockFocusEnum.Up]: BITS.BIT_01,
50
+ [LockFocusEnum.Down]: BITS.BIT_02,
51
+ [LockFocusEnum.Left]: BITS.BIT_03,
52
+ [LockFocusEnum.Right]: BITS.BIT_04,
53
+ [LockFocusEnum.Forward]: BITS.BIT_05,
54
+ [LockFocusEnum.Backward]: BITS.BIT_06,
55
+ [LockFocusEnum.First]: BITS.BIT_09,
56
+ [LockFocusEnum.Last]: BITS.BIT_10,
57
+ };
58
+
59
+ const mapFocusValues = (values: LockFocusType[] | undefined) => {
60
+ if (!values || !values.length) return 0;
61
+
62
+ // eslint-disable-next-line no-bitwise
63
+ return values.reduce((acc, item) => acc | focusBinaryValue[item], 0);
64
+ };
65
+
26
66
  export const BaseKeyboardView = React.memo(
27
67
  React.forwardRef<BaseKeyboardViewType, BaseKeyboardViewProps>(
28
68
  (
@@ -45,15 +85,36 @@ export const BaseKeyboardView = React.memo(
45
85
  exposeMethods = DEFAULT_EXPOSE_METHODS,
46
86
  enableA11yFocus = false,
47
87
  screenAutoA11yFocusDelay = 500,
88
+ lockFocus,
89
+ orderIndex,
90
+ orderForward,
91
+ orderBackward,
92
+ orderFirst,
93
+ orderLast,
94
+ orderGroup,
48
95
  ...props
49
96
  },
50
97
  ref
51
98
  ) => {
52
99
  const localRef = useRef<View>();
53
100
  const targetRef = viewRef ?? localRef;
101
+ const lockFocusValue = useMemo(
102
+ () => mapFocusValues(lockFocus),
103
+ [lockFocus]
104
+ );
54
105
 
55
106
  const contextIdentifier = useGroupIdentifierContext();
56
107
 
108
+ const contextGroupId = useOrderFocusGroup();
109
+ const groupId = orderGroup ?? contextGroupId;
110
+
111
+ useEffect(() => {
112
+ if (orderIndex !== undefined && !groupId)
113
+ console.warn(
114
+ '`orderIndex` must be declared alongside `orderGroup` for proper functionality. Ensure components are wrapped with `KeyboardOrderFocusGroup` or provide `orderGroup` directly.'
115
+ );
116
+ }, [groupId, orderIndex]);
117
+
57
118
  useImperativeHandle(ref, () => {
58
119
  const actions: Record<string, Function> = {};
59
120
 
@@ -87,6 +148,11 @@ export const BaseKeyboardView = React.memo(
87
148
  const hasOnFocusChanged = onFocusChange || onFocus || onBlur;
88
149
  const ignoreFocusHint = Platform.OS !== 'ios' || !ignoreGroupFocusHint;
89
150
 
151
+ const _orderFirst =
152
+ orderFirst === null ? undefined : (orderFirst ?? orderForward);
153
+ const _orderLast =
154
+ orderLast === null ? undefined : (orderLast ?? orderBackward);
155
+
90
156
  return (
91
157
  <KeyPressContext.Provider value={bubbled.context}>
92
158
  <ExternalKeyboardViewNative
@@ -107,8 +173,15 @@ export const BaseKeyboardView = React.memo(
107
173
  hasKeyUpPress={Boolean(onKeyUpPress)}
108
174
  hasOnFocusChanged={Boolean(hasOnFocusChanged)}
109
175
  group={group}
176
+ orderIndex={orderIndex ?? -1}
110
177
  enableA11yFocus={enableA11yFocus}
111
178
  screenAutoA11yFocusDelay={screenAutoA11yFocusDelay}
179
+ lockFocus={lockFocusValue}
180
+ orderForward={orderForward}
181
+ orderBackward={orderBackward}
182
+ orderFirst={_orderFirst}
183
+ orderLast={_orderLast}
184
+ orderGroup={groupId}
112
185
  />
113
186
  </KeyPressContext.Provider>
114
187
  );
@@ -0,0 +1,39 @@
1
+ import React, { type PropsWithChildren } from 'react';
2
+ import { type ColorValue, type ViewProps } from 'react-native';
3
+ import { KeyboardFocusGroupNative } from '../../nativeSpec';
4
+ import { useOnFocusChange } from '../../utils/useOnFocusChange';
5
+ import { useFocusStyle } from '../../utils/useFocusStyle';
6
+ import type { FocusStyle } from '../../types';
7
+
8
+ export type KeyboardFocusGroupProps = PropsWithChildren<{
9
+ groupIdentifier?: string;
10
+ tintColor?: ColorValue;
11
+ onFocus?: () => void;
12
+ onBlur?: () => void;
13
+ onFocusChange?: (isFocused: boolean) => void;
14
+ orderGroup?: string;
15
+ focusStyle?: FocusStyle;
16
+ }>;
17
+
18
+ export const KeyboardFocusGroup = React.memo<
19
+ ViewProps & KeyboardFocusGroupProps
20
+ >((props) => {
21
+ const { containerFocusedStyle: focusStyle, onFocusChangeHandler } =
22
+ useFocusStyle({
23
+ onFocusChange: props.onFocusChange,
24
+ containerFocusStyle: props.focusStyle,
25
+ });
26
+
27
+ const onGroupFocusChangeHandler = useOnFocusChange({
28
+ ...props,
29
+ onFocusChange: onFocusChangeHandler,
30
+ });
31
+
32
+ return (
33
+ <KeyboardFocusGroupNative
34
+ {...props}
35
+ style={[props.style, focusStyle]}
36
+ onGroupFocusChange={onGroupFocusChangeHandler}
37
+ />
38
+ );
39
+ });
@@ -13,6 +13,7 @@ export type KeyboardFocusGroupProps = PropsWithChildren<{
13
13
  onBlur?: () => void;
14
14
  onFocusChange?: (isFocused: boolean) => void;
15
15
  focusStyle?: FocusStyle;
16
+ orderGroup?: string;
16
17
  }>;
17
18
 
18
19
  export const KeyboardFocusGroup = React.memo<
@@ -10,6 +10,7 @@ export type KeyboardFocusGroupProps = PropsWithChildren<
10
10
  onBlur?: () => void;
11
11
  onFocusChange?: (isFocused: boolean) => void;
12
12
  focusStyle?: FocusStyle;
13
+ orderGroup?: string;
13
14
  }
14
15
  >;
15
16
 
@@ -0,0 +1,25 @@
1
+ import React, { useContext, useId } from 'react';
2
+
3
+ export const OrderFocusGroupContext = React.createContext<string | undefined>(
4
+ undefined
5
+ );
6
+
7
+ export const useOrderFocusGroup = () => useContext(OrderFocusGroupContext);
8
+
9
+ type KeyboardOrderFocusGroupProps = {
10
+ groupId?: string;
11
+ children?: React.ReactNode;
12
+ };
13
+
14
+ export const KeyboardOrderFocusGroup = ({
15
+ children,
16
+ groupId,
17
+ }: KeyboardOrderFocusGroupProps) => {
18
+ const id = useId();
19
+ return (
20
+ <OrderFocusGroupContext.Provider
21
+ value={groupId ?? id}
22
+ children={children}
23
+ />
24
+ );
25
+ };
package/src/index.tsx CHANGED
@@ -30,5 +30,10 @@ export {
30
30
  export { KeyboardFocusGroup } from './components/KeyboardFocusGroup/KeyboardFocusGroup';
31
31
  export { withKeyboardFocus } from './utils/withKeyboardFocus';
32
32
  export { useIsViewFocused } from './context/IsViewFocusedContext';
33
+ export {
34
+ KeyboardOrderFocusGroup,
35
+ OrderFocusGroupContext,
36
+ useOrderFocusGroup,
37
+ } from './context/OrderFocusContext';
33
38
  import * as Keyboard from './modules/Keyboard';
34
39
  export { Keyboard };
@@ -52,6 +52,18 @@ export interface ExternalKeyboardNativeProps extends ViewProps {
52
52
  enableA11yFocus?: boolean;
53
53
  screenAutoA11yFocus?: boolean;
54
54
  screenAutoA11yFocusDelay?: Int32;
55
+ orderGroup?: string;
56
+ orderIndex?: Int32;
57
+ lockFocus?: Int32;
58
+ orderId?: string;
59
+ orderLeft?: string;
60
+ orderRight?: string;
61
+ orderUp?: string;
62
+ orderDown?: string;
63
+ orderForward?: string;
64
+ orderBackward?: string;
65
+ orderFirst?: string;
66
+ orderLast?: string;
55
67
  }
56
68
 
57
69
  export interface NativeCommands {
@@ -10,6 +10,7 @@ export interface KeyboardFocusGroupNativeComponentProps extends ViewProps {
10
10
  onGroupFocusChange?: DirectEventHandler<FocusChange>;
11
11
  tintColor?: ColorValue;
12
12
  groupIdentifier?: string;
13
+ orderGroup?: string;
13
14
  }
14
15
 
15
16
  export default codegenNativeComponent<KeyboardFocusGroupNativeComponentProps>(
@@ -6,6 +6,7 @@ import type {
6
6
  } from 'react-native';
7
7
  import type { KeyPress } from '../nativeSpec/ExternalKeyboardViewNativeComponent';
8
8
  import type { RefObject } from 'react';
9
+ import type { Int32 } from 'react-native/Libraries/Types/CodegenTypes';
9
10
 
10
11
  export type OnKeyPress = NativeSyntheticEvent<KeyPress> & {
11
12
  nativeEvent?: { target?: number };
@@ -16,6 +17,19 @@ export type OnKeyPressFn = (e: OnKeyPress) => void;
16
17
  export type KeyboardFocus = { focus: () => void };
17
18
  export type BaseKeyboardViewType = Partial<View> & KeyboardFocus;
18
19
 
20
+ export enum LockFocusEnum {
21
+ Up = 'up',
22
+ Down = 'down',
23
+ Right = 'right',
24
+ Left = 'left',
25
+ Forward = 'forward',
26
+ Backward = 'backward',
27
+ First = 'first',
28
+ Last = 'last',
29
+ }
30
+
31
+ export type LockFocusType = `${LockFocusEnum}`;
32
+
19
33
  export type BaseFocusViewProps = {
20
34
  viewRef?: RefObject<View>;
21
35
  group?: boolean;
@@ -40,6 +54,18 @@ export type BaseFocusViewProps = {
40
54
  enableA11yFocus?: boolean;
41
55
  screenAutoA11yFocus?: boolean;
42
56
  screenAutoA11yFocusDelay?: number;
57
+ orderGroup?: string;
58
+ orderIndex?: Int32;
59
+ lockFocus?: LockFocusType[];
60
+ orderId?: string;
61
+ orderLeft?: string;
62
+ orderRight?: string;
63
+ orderUp?: string;
64
+ orderDown?: string;
65
+ orderForward?: string;
66
+ orderBackward?: string;
67
+ orderFirst?: string | null;
68
+ orderLast?: string | null;
43
69
  };
44
70
 
45
71
  export type BaseKeyboardViewProps = ViewProps & BaseFocusViewProps;
@@ -81,6 +81,18 @@ export const withKeyboardFocus = <K, T, C extends {}, R>(
81
81
  enableA11yFocus,
82
82
  screenAutoA11yFocus,
83
83
  screenAutoA11yFocusDelay = 300, // ToDo align with BaseKeyboardView
84
+ orderIndex,
85
+ orderGroup,
86
+ orderId,
87
+ orderLeft,
88
+ orderRight,
89
+ orderUp,
90
+ orderDown,
91
+ orderForward,
92
+ orderBackward,
93
+ orderFirst,
94
+ orderLast,
95
+ lockFocus,
84
96
  ...props
85
97
  },
86
98
  ref
@@ -156,6 +168,18 @@ export const withKeyboardFocus = <K, T, C extends {}, R>(
156
168
  enableA11yFocus={enableA11yFocus}
157
169
  screenAutoA11yFocus={screenAutoA11yFocus}
158
170
  screenAutoA11yFocusDelay={screenAutoA11yFocusDelay}
171
+ orderIndex={orderIndex}
172
+ orderGroup={orderGroup}
173
+ lockFocus={lockFocus}
174
+ orderId={orderId}
175
+ orderLeft={orderLeft}
176
+ orderRight={orderRight}
177
+ orderUp={orderUp}
178
+ orderDown={orderDown}
179
+ orderForward={orderForward}
180
+ orderBackward={orderBackward}
181
+ orderFirst={orderFirst}
182
+ orderLast={orderLast}
159
183
  >
160
184
  <Component
161
185
  ref={componentRef}