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.
- package/README.md +277 -14
- package/android/src/main/java/com/externalkeyboard/delegates/FocusOrderDelegate.java +213 -0
- package/android/src/main/java/com/externalkeyboard/helper/FocusHelper.java +44 -0
- package/android/src/main/java/com/externalkeyboard/helper/Linking/A11yOrderLinking.java +81 -0
- package/android/src/main/java/com/externalkeyboard/helper/Linking/LinkingQueue.java +94 -0
- package/android/src/main/java/com/externalkeyboard/helper/ReactNativeVersionChecker.java +24 -0
- package/android/src/main/java/com/externalkeyboard/services/FocusLinkObserver/FocusLinkObserver.java +131 -0
- package/android/src/main/java/com/externalkeyboard/services/FocusLinkObserver/FocusLinkObserverSingleton.java +20 -0
- package/android/src/main/java/com/externalkeyboard/views/ExternalKeyboardView/ExternalKeyboardView.java +144 -0
- package/android/src/main/java/com/externalkeyboard/views/ExternalKeyboardView/ExternalKeyboardViewManager.java +128 -8
- package/android/src/main/java/com/externalkeyboard/views/KeyboardFocusGroup/KeyboardFocusGroupManager.java +7 -3
- package/android/src/main/java/com/externalkeyboard/views/TextInputFocusWrapper/TextInputFocusWrapper.java +2 -13
- package/android/src/oldarch/ExternalKeyboardViewManagerSpec.java +25 -0
- package/android/src/oldarch/KeyboardFocusGroupManagerSpec.java +8 -1
- package/ios/Delegates/RNCEKVFocusOrderDelegate/RNCEKVFocusOrderDelegate.h +33 -0
- package/ios/Delegates/RNCEKVFocusOrderDelegate/RNCEKVFocusOrderDelegate.mm +577 -0
- package/ios/Delegates/RNCEKVFocusOrderDelegate/RNCEKVFocusOrderProtocol.h +34 -0
- package/ios/Delegates/RNCEKVGroupIdentifierDelegate/RNCEKVGroupIdentifierDelegate.h +1 -0
- package/ios/Delegates/RNCEKVGroupIdentifierDelegate/RNCEKVGroupIdentifierDelegate.mm +9 -0
- package/ios/Helpers/RNCEKVPropHelper/RNCEKVPropHelper.h +22 -0
- package/ios/Helpers/RNCEKVPropHelper/RNCEKVPropHelper.mm +48 -0
- package/ios/Services/RNCEKVFocusLinkObserver.h +27 -0
- package/ios/Services/RNCEKVFocusLinkObserver.mm +101 -0
- package/ios/Services/RNCEKVFocusLinkObserverManager.h +23 -0
- package/ios/Services/RNCEKVFocusLinkObserverManager.mm +30 -0
- package/ios/Services/RNCEKVOrderLinking.h +33 -0
- package/ios/Services/RNCEKVOrderLinking.mm +143 -0
- package/ios/Services/RNCEKVOrderSubscriber.h +24 -0
- package/ios/Services/RNCEKVOrderSubscriber.mm +23 -0
- package/ios/Services/RNCEKVRelashioship.h +28 -0
- package/ios/Services/RNCEKVRelashioship.mm +61 -0
- package/ios/Services/RNCEKVSortedMap.h +22 -0
- package/ios/Services/RNCEKVSortedMap.mm +112 -0
- package/ios/Views/RNCEKVExternalKeyboardView/RNCEKVExternalKeyboardView.h +34 -3
- package/ios/Views/RNCEKVExternalKeyboardView/RNCEKVExternalKeyboardView.mm +214 -54
- package/ios/Views/RNCEKVExternalKeyboardView/RNCEKVExternalKeyboardViewManager.h +9 -0
- package/ios/Views/RNCEKVExternalKeyboardView/RNCEKVExternalKeyboardViewManager.mm +80 -55
- package/ios/Views/RNCEKVKeyboardFocusGroupView/RNCEKVKeyboardFocusGroup.h +2 -0
- package/ios/Views/RNCEKVKeyboardFocusGroupView/RNCEKVKeyboardFocusGroup.mm +161 -3
- package/ios/Views/RNCEKVKeyboardFocusGroupView/RNCEKVKeyboardFocusGroupManager.mm +6 -0
- package/lib/commonjs/components/BaseKeyboardView/BaseKeyboardView.js +56 -3
- package/lib/commonjs/components/BaseKeyboardView/BaseKeyboardView.js.map +1 -1
- package/lib/commonjs/components/KeyboardFocusGroup/KeyboardFocusGroup.android.js +30 -0
- package/lib/commonjs/components/KeyboardFocusGroup/KeyboardFocusGroup.android.js.map +1 -0
- package/lib/commonjs/components/KeyboardFocusGroup/KeyboardFocusGroup.ios.js.map +1 -1
- package/lib/commonjs/components/KeyboardFocusGroup/KeyboardFocusGroup.js.map +1 -1
- package/lib/commonjs/context/OrderFocusContext.js +23 -0
- package/lib/commonjs/context/OrderFocusContext.js.map +1 -0
- package/lib/commonjs/index.js +19 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/nativeSpec/ExternalKeyboardViewNativeComponent.js.map +1 -1
- package/lib/commonjs/nativeSpec/KeyboardFocusGroupNativeComponent.js.map +1 -1
- package/lib/commonjs/types/BaseKeyboardView.js +12 -0
- package/lib/commonjs/types/BaseKeyboardView.js.map +1 -1
- package/lib/commonjs/utils/withKeyboardFocus.js +25 -1
- package/lib/commonjs/utils/withKeyboardFocus.js.map +1 -1
- package/lib/module/components/BaseKeyboardView/BaseKeyboardView.js +55 -2
- package/lib/module/components/BaseKeyboardView/BaseKeyboardView.js.map +1 -1
- package/lib/module/components/KeyboardFocusGroup/KeyboardFocusGroup.android.js +23 -0
- package/lib/module/components/KeyboardFocusGroup/KeyboardFocusGroup.android.js.map +1 -0
- package/lib/module/components/KeyboardFocusGroup/KeyboardFocusGroup.ios.js.map +1 -1
- package/lib/module/components/KeyboardFocusGroup/KeyboardFocusGroup.js.map +1 -1
- package/lib/module/context/OrderFocusContext.js +14 -0
- package/lib/module/context/OrderFocusContext.js.map +1 -0
- package/lib/module/index.js +1 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/nativeSpec/ExternalKeyboardViewNativeComponent.js.map +1 -1
- package/lib/module/nativeSpec/KeyboardFocusGroupNativeComponent.js.map +1 -1
- package/lib/module/types/BaseKeyboardView.js +11 -1
- package/lib/module/types/BaseKeyboardView.js.map +1 -1
- package/lib/module/utils/withKeyboardFocus.js +25 -1
- package/lib/module/utils/withKeyboardFocus.js.map +1 -1
- package/lib/typescript/src/components/BaseKeyboardView/BaseKeyboardView.d.ts +1 -1
- package/lib/typescript/src/components/BaseKeyboardView/BaseKeyboardView.d.ts.map +1 -1
- package/lib/typescript/src/components/KeyboardFocusGroup/KeyboardFocusGroup.android.d.ts +24 -0
- package/lib/typescript/src/components/KeyboardFocusGroup/KeyboardFocusGroup.android.d.ts.map +1 -0
- package/lib/typescript/src/components/KeyboardFocusGroup/KeyboardFocusGroup.d.ts +1 -0
- package/lib/typescript/src/components/KeyboardFocusGroup/KeyboardFocusGroup.d.ts.map +1 -1
- package/lib/typescript/src/components/KeyboardFocusGroup/KeyboardFocusGroup.ios.d.ts +2 -0
- package/lib/typescript/src/components/KeyboardFocusGroup/KeyboardFocusGroup.ios.d.ts.map +1 -1
- package/lib/typescript/src/context/OrderFocusContext.d.ts +10 -0
- package/lib/typescript/src/context/OrderFocusContext.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +1 -0
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/nativeSpec/ExternalKeyboardViewNativeComponent.d.ts +12 -0
- package/lib/typescript/src/nativeSpec/ExternalKeyboardViewNativeComponent.d.ts.map +1 -1
- package/lib/typescript/src/nativeSpec/KeyboardFocusGroupNativeComponent.d.ts +1 -0
- package/lib/typescript/src/nativeSpec/KeyboardFocusGroupNativeComponent.d.ts.map +1 -1
- package/lib/typescript/src/types/BaseKeyboardView.d.ts +24 -0
- package/lib/typescript/src/types/BaseKeyboardView.d.ts.map +1 -1
- package/lib/typescript/src/utils/withKeyboardFocus.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/BaseKeyboardView/BaseKeyboardView.tsx +77 -4
- package/src/components/KeyboardFocusGroup/KeyboardFocusGroup.android.tsx +39 -0
- package/src/components/KeyboardFocusGroup/KeyboardFocusGroup.ios.tsx +1 -0
- package/src/components/KeyboardFocusGroup/KeyboardFocusGroup.tsx +1 -0
- package/src/context/OrderFocusContext.tsx +25 -0
- package/src/index.tsx +5 -0
- package/src/nativeSpec/ExternalKeyboardViewNativeComponent.ts +12 -0
- package/src/nativeSpec/KeyboardFocusGroupNativeComponent.ts +1 -0
- package/src/types/BaseKeyboardView.ts +26 -0
- 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;
|
|
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;
|
|
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;
|
|
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,
|
|
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,16 +1,25 @@
|
|
|
1
|
-
import 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
|
|
6
|
-
|
|
7
|
-
|
|
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
|
+
});
|
|
@@ -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}
|