react-native-keyboard-controller 1.16.5 → 1.16.6
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/android/src/main/java/com/reactnativekeyboardcontroller/listeners/WindowDimensionListener.kt +1 -2
- package/lib/commonjs/architecture.js +8 -0
- package/lib/commonjs/architecture.js.map +1 -0
- package/lib/commonjs/components/KeyboardAvoidingView/hooks.js +18 -13
- package/lib/commonjs/components/KeyboardAvoidingView/hooks.js.map +1 -1
- package/lib/commonjs/components/KeyboardToolbar/index.js.map +1 -1
- package/lib/commonjs/constants.js +2 -0
- package/lib/commonjs/constants.js.map +1 -1
- package/lib/commonjs/views/OverKeyboardView/index.js +2 -2
- package/lib/commonjs/views/OverKeyboardView/index.js.map +1 -1
- package/lib/module/architecture.js +2 -0
- package/lib/module/architecture.js.map +1 -0
- package/lib/module/components/KeyboardAvoidingView/hooks.js +19 -14
- package/lib/module/components/KeyboardAvoidingView/hooks.js.map +1 -1
- package/lib/module/components/KeyboardToolbar/index.js.map +1 -1
- package/lib/module/constants.js +2 -0
- package/lib/module/constants.js.map +1 -1
- package/lib/module/views/OverKeyboardView/index.js +2 -2
- package/lib/module/views/OverKeyboardView/index.js.map +1 -1
- package/lib/typescript/architecture.d.ts +1 -0
- package/lib/typescript/components/KeyboardToolbar/index.d.ts +2 -2
- package/package.json +10 -9
- package/src/architecture.ts +1 -0
- package/src/components/KeyboardAvoidingView/hooks.ts +21 -14
- package/src/components/KeyboardToolbar/index.tsx +2 -2
- package/src/views/OverKeyboardView/index.tsx +2 -2
package/android/src/main/java/com/reactnativekeyboardcontroller/listeners/WindowDimensionListener.kt
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
package com.reactnativekeyboardcontroller.listeners
|
|
2
2
|
|
|
3
3
|
import android.view.ViewGroup
|
|
4
|
-
import androidx.core.view.marginTop
|
|
5
4
|
import com.facebook.react.bridge.Arguments
|
|
6
5
|
import com.facebook.react.uimanager.ThemedReactContext
|
|
7
6
|
import com.reactnativekeyboardcontroller.extensions.content
|
|
@@ -41,7 +40,7 @@ class WindowDimensionListener(
|
|
|
41
40
|
val newDimensions =
|
|
42
41
|
Dimensions(
|
|
43
42
|
content.width.toFloat().dp,
|
|
44
|
-
content.height.toFloat().dp
|
|
43
|
+
content.height.toFloat().dp,
|
|
45
44
|
)
|
|
46
45
|
|
|
47
46
|
if (newDimensions != lastDispatchedDimensions) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["IS_FABRIC","exports","global"],"sources":["architecture.ts"],"sourcesContent":["export const IS_FABRIC = \"nativeFabricUIManager\" in global;\n"],"mappings":";;;;;;AAAO,MAAMA,SAAS,GAAAC,OAAA,CAAAD,SAAA,GAAG,uBAAuB,IAAIE,MAAM","ignoreList":[]}
|
|
@@ -14,20 +14,25 @@ const useKeyboardAnimation = () => {
|
|
|
14
14
|
const {
|
|
15
15
|
reanimated
|
|
16
16
|
} = (0, _context.useKeyboardContext)();
|
|
17
|
+
const heightWhenOpened = (0, _reactNativeReanimated.useSharedValue)(0);
|
|
18
|
+
const height = (0, _reactNativeReanimated.useSharedValue)(0);
|
|
19
|
+
const progress = (0, _reactNativeReanimated.useSharedValue)(0);
|
|
20
|
+
const isClosed = (0, _reactNativeReanimated.useSharedValue)(true);
|
|
21
|
+
(0, _react.useLayoutEffect)(() => {
|
|
22
|
+
const initialHeight = -reanimated.height.value;
|
|
23
|
+
const initialProgress = reanimated.progress.value;
|
|
17
24
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
const isClosed = (0, _reactNativeReanimated.useSharedValue)(initialProgress === 0);
|
|
25
|
+
// eslint-disable-next-line react-compiler/react-compiler
|
|
26
|
+
heightWhenOpened.value = initialHeight;
|
|
27
|
+
height.value = initialHeight;
|
|
28
|
+
progress.value = initialProgress;
|
|
29
|
+
isClosed.value = initialProgress === 0;
|
|
30
|
+
}, []);
|
|
25
31
|
(0, _hooks.useKeyboardHandler)({
|
|
26
32
|
onStart: e => {
|
|
27
33
|
"worklet";
|
|
28
34
|
|
|
29
35
|
if (e.height > 0) {
|
|
30
|
-
// eslint-disable-next-line react-compiler/react-compiler
|
|
31
36
|
isClosed.value = false;
|
|
32
37
|
heightWhenOpened.value = e.height;
|
|
33
38
|
}
|
|
@@ -64,17 +69,17 @@ const useTranslateAnimation = () => {
|
|
|
64
69
|
const {
|
|
65
70
|
reanimated
|
|
66
71
|
} = (0, _context.useKeyboardContext)();
|
|
67
|
-
|
|
68
|
-
// calculate it only once on mount, to avoid `SharedValue` reads during a render
|
|
69
|
-
const [initialProgress] = (0, _react.useState)(() => reanimated.progress.value);
|
|
70
|
-
const padding = (0, _reactNativeReanimated.useSharedValue)(initialProgress);
|
|
72
|
+
const padding = (0, _reactNativeReanimated.useSharedValue)(0);
|
|
71
73
|
const translate = (0, _reactNativeReanimated.useSharedValue)(0);
|
|
74
|
+
(0, _react.useLayoutEffect)(() => {
|
|
75
|
+
// eslint-disable-next-line react-compiler/react-compiler
|
|
76
|
+
padding.value = reanimated.progress.value;
|
|
77
|
+
}, []);
|
|
72
78
|
(0, _hooks.useKeyboardHandler)({
|
|
73
79
|
onStart: e => {
|
|
74
80
|
"worklet";
|
|
75
81
|
|
|
76
82
|
if (e.height === 0) {
|
|
77
|
-
// eslint-disable-next-line react-compiler/react-compiler
|
|
78
83
|
padding.value = 0;
|
|
79
84
|
}
|
|
80
85
|
if (OS === "ios") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","_reactNative","_reactNativeReanimated","_context","_hooks","OS","Platform","useKeyboardAnimation","reanimated","useKeyboardContext","
|
|
1
|
+
{"version":3,"names":["_react","require","_reactNative","_reactNativeReanimated","_context","_hooks","OS","Platform","useKeyboardAnimation","reanimated","useKeyboardContext","heightWhenOpened","useSharedValue","height","progress","isClosed","useLayoutEffect","initialHeight","value","initialProgress","useKeyboardHandler","onStart","e","onMove","onInteractive","onEnd","exports","useTranslateAnimation","padding","translate"],"sources":["hooks.ts"],"sourcesContent":["import { useLayoutEffect } from \"react\";\nimport { Platform } from \"react-native\";\nimport { useSharedValue } from \"react-native-reanimated\";\n\nimport { useKeyboardContext } from \"../../context\";\nimport { useKeyboardHandler } from \"../../hooks\";\n\nconst OS = Platform.OS;\n\nexport const useKeyboardAnimation = () => {\n const { reanimated } = useKeyboardContext();\n\n const heightWhenOpened = useSharedValue(0);\n const height = useSharedValue(0);\n const progress = useSharedValue(0);\n const isClosed = useSharedValue(true);\n\n useLayoutEffect(() => {\n const initialHeight = -reanimated.height.value;\n const initialProgress = reanimated.progress.value;\n\n // eslint-disable-next-line react-compiler/react-compiler\n heightWhenOpened.value = initialHeight;\n height.value = initialHeight;\n progress.value = initialProgress;\n isClosed.value = initialProgress === 0;\n }, []);\n\n useKeyboardHandler(\n {\n onStart: (e) => {\n \"worklet\";\n\n if (e.height > 0) {\n isClosed.value = false;\n heightWhenOpened.value = e.height;\n }\n },\n onMove: (e) => {\n \"worklet\";\n\n progress.value = e.progress;\n height.value = e.height;\n },\n onInteractive: (e) => {\n \"worklet\";\n\n progress.value = e.progress;\n height.value = e.height;\n },\n onEnd: (e) => {\n \"worklet\";\n\n isClosed.value = e.height === 0;\n\n height.value = e.height;\n progress.value = e.progress;\n },\n },\n [],\n );\n\n return { height, progress, heightWhenOpened, isClosed };\n};\nexport const useTranslateAnimation = () => {\n const { reanimated } = useKeyboardContext();\n\n const padding = useSharedValue(0);\n const translate = useSharedValue(0);\n\n useLayoutEffect(() => {\n // eslint-disable-next-line react-compiler/react-compiler\n padding.value = reanimated.progress.value;\n }, []);\n\n useKeyboardHandler(\n {\n onStart: (e) => {\n \"worklet\";\n\n if (e.height === 0) {\n padding.value = 0;\n }\n if (OS === \"ios\") {\n translate.value = e.progress;\n }\n },\n onMove: (e) => {\n \"worklet\";\n\n if (OS === \"android\") {\n translate.value = e.progress;\n }\n },\n onInteractive: (e) => {\n \"worklet\";\n\n padding.value = 0;\n\n translate.value = e.progress;\n },\n onEnd: (e) => {\n \"worklet\";\n\n padding.value = e.progress;\n\n if (OS === \"android\") {\n translate.value = e.progress;\n }\n },\n },\n [],\n );\n\n return { translate, padding };\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_bindings","_module","_useColorScheme","_interopRequireDefault","_KeyboardStickyView","_Arrow","_Button","_colors","e","__esModule","default","_getRequireWildcardCache","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","_extends","assign","bind","arguments","length","apply","TEST_ID_KEYBOARD_TOOLBAR","TEST_ID_KEYBOARD_TOOLBAR_PREVIOUS","TEST_ID_KEYBOARD_TOOLBAR_NEXT","TEST_ID_KEYBOARD_TOOLBAR_CONTENT","TEST_ID_KEYBOARD_TOOLBAR_DONE","KEYBOARD_TOOLBAR_HEIGHT","DEFAULT_OPACITY","KeyboardToolbar","content","theme","colors","doneText","button","icon","showArrows","onNextCallback","onPrevCallback","onDoneCallback","blur","opacity","offset","closed","opened","enabled","rest","colorScheme","useColorScheme","inputs","setInputs","useState","current","count","isPrevDisabled","isNextDisabled","useEffect","subscription","FocusedInputEvents","addListener","remove","doneStyle","useMemo","styles","doneButton","color","primary","toolbarStyle","toolbar","backgroundColor","background","ButtonContainer","Button","IconContainer","Arrow","onPressNext","useCallback","event","isDefaultPrevented","KeyboardController","setFocusTo","onPressPrev","onPressDone","dismiss","createElement","View","style","testID","Fragment","accessibilityHint","accessibilityLabel","disabled","onPress","type","flex","rippleRadius","doneButtonContainer","Text","maxFontSizeMultiplier","StyleSheet","create","position","bottom","alignItems","width","flexDirection","height","paddingHorizontal","fontWeight","fontSize","marginRight","_default","exports"],"sources":["index.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { StyleSheet, Text, View } from \"react-native\";\n\nimport { FocusedInputEvents } from \"../../bindings\";\nimport { KeyboardController } from \"../../module\";\nimport useColorScheme from \"../hooks/useColorScheme\";\nimport KeyboardStickyView from \"../KeyboardStickyView\";\n\nimport Arrow from \"./Arrow\";\nimport Button from \"./Button\";\nimport { colors } from \"./colors\";\n\nimport type { HEX, KeyboardToolbarTheme } from \"./types\";\nimport type { KeyboardStickyViewProps } from \"../KeyboardStickyView\";\nimport type { ReactNode } from \"react\";\nimport type { GestureResponderEvent, ViewProps } from \"react-native\";\n\nexport type KeyboardToolbarProps = Omit<\n ViewProps,\n \"style\" | \"testID\" | \"children\"\n> & {\n /** An element that is shown in the middle of the toolbar. */\n content?: JSX.Element | null;\n /** A set of dark/light colors consumed by toolbar component. */\n theme?: KeyboardToolbarTheme;\n /** Custom text for done button. */\n doneText?: ReactNode;\n /** Custom touchable component for toolbar (used for prev/next/done buttons). */\n button?: typeof Button;\n /** Custom icon component used to display next/prev buttons. */\n icon?: typeof Arrow;\n /**\n * Whether to show next and previous buttons. Can be useful to set it to `false` if you have only one input\n * and want to show only `Done` button. Default to `true`.\n */\n showArrows?: boolean;\n /**\n * A callback that is called when the user presses the next button along with the default action.\n */\n onNextCallback?: (event: GestureResponderEvent) => void;\n /**\n * A callback that is called when the user presses the previous button along with the default action.\n */\n onPrevCallback?: (event: GestureResponderEvent) => void;\n /**\n * A callback that is called when the user presses the done button along with the default action.\n */\n onDoneCallback?: (event: GestureResponderEvent) => void;\n /**\n * A component that applies blur effect to the toolbar.\n */\n blur?: JSX.Element | null;\n /**\n * A value for container opacity in hexadecimal format (e.g. `ff`). Default value is `ff`.\n */\n opacity?: HEX;\n} & Pick<KeyboardStickyViewProps, \"offset\" | \"enabled\">;\n\nconst TEST_ID_KEYBOARD_TOOLBAR = \"keyboard.toolbar\";\nconst TEST_ID_KEYBOARD_TOOLBAR_PREVIOUS = `${TEST_ID_KEYBOARD_TOOLBAR}.previous`;\nconst TEST_ID_KEYBOARD_TOOLBAR_NEXT = `${TEST_ID_KEYBOARD_TOOLBAR}.next`;\nconst TEST_ID_KEYBOARD_TOOLBAR_CONTENT = `${TEST_ID_KEYBOARD_TOOLBAR}.content`;\nconst TEST_ID_KEYBOARD_TOOLBAR_DONE = `${TEST_ID_KEYBOARD_TOOLBAR}.done`;\n\nconst KEYBOARD_TOOLBAR_HEIGHT = 42;\nconst DEFAULT_OPACITY: HEX = \"FF\";\n\n/**\n * `KeyboardToolbar` is a component that is shown above the keyboard with `Prev`/`Next` and\n * `Done` buttons.\n */\nconst KeyboardToolbar: React.FC<KeyboardToolbarProps> = ({\n content,\n theme = colors,\n doneText,\n button,\n icon,\n showArrows = true,\n onNextCallback,\n onPrevCallback,\n onDoneCallback,\n blur = null,\n opacity = DEFAULT_OPACITY,\n offset: { closed = 0, opened = 0 } = {},\n enabled = true,\n ...rest\n}) => {\n const colorScheme = useColorScheme();\n const [inputs, setInputs] = useState({\n current: 0,\n count: 0,\n });\n const isPrevDisabled = inputs.current === 0;\n const isNextDisabled = inputs.current === inputs.count - 1;\n\n useEffect(() => {\n const subscription = FocusedInputEvents.addListener(\"focusDidSet\", (e) => {\n setInputs(e);\n });\n\n return subscription.remove;\n }, []);\n const doneStyle = useMemo(\n () => [styles.doneButton, { color: theme[colorScheme].primary }],\n [colorScheme, theme],\n );\n const toolbarStyle = useMemo(\n () => [\n styles.toolbar,\n {\n backgroundColor: `${theme[colorScheme].background}${opacity}`,\n },\n ],\n [colorScheme, opacity, theme],\n );\n const offset = useMemo(\n () => ({ closed: closed + KEYBOARD_TOOLBAR_HEIGHT, opened }),\n [closed, opened],\n );\n const ButtonContainer = button || Button;\n const IconContainer = icon || Arrow;\n\n const onPressNext = useCallback(\n (event: GestureResponderEvent) => {\n onNextCallback?.(event);\n\n if (!event.isDefaultPrevented()) {\n KeyboardController.setFocusTo(\"next\");\n }\n },\n [onNextCallback],\n );\n const onPressPrev = useCallback(\n (event: GestureResponderEvent) => {\n onPrevCallback?.(event);\n\n if (!event.isDefaultPrevented()) {\n KeyboardController.setFocusTo(\"prev\");\n }\n },\n [onPrevCallback],\n );\n const onPressDone = useCallback(\n (event: GestureResponderEvent) => {\n onDoneCallback?.(event);\n\n if (!event.isDefaultPrevented()) {\n KeyboardController.dismiss();\n }\n },\n [onDoneCallback],\n );\n\n return (\n <KeyboardStickyView enabled={enabled} offset={offset}>\n <View {...rest} style={toolbarStyle} testID={TEST_ID_KEYBOARD_TOOLBAR}>\n {blur}\n {showArrows && (\n <>\n <ButtonContainer\n accessibilityHint=\"Moves focus to the previous field\"\n accessibilityLabel=\"Previous\"\n disabled={isPrevDisabled}\n testID={TEST_ID_KEYBOARD_TOOLBAR_PREVIOUS}\n theme={theme}\n onPress={onPressPrev}\n >\n <IconContainer\n disabled={isPrevDisabled}\n theme={theme}\n type=\"prev\"\n />\n </ButtonContainer>\n <ButtonContainer\n accessibilityHint=\"Moves focus to the next field\"\n accessibilityLabel=\"Next\"\n disabled={isNextDisabled}\n testID={TEST_ID_KEYBOARD_TOOLBAR_NEXT}\n theme={theme}\n onPress={onPressNext}\n >\n <IconContainer\n disabled={isNextDisabled}\n theme={theme}\n type=\"next\"\n />\n </ButtonContainer>\n </>\n )}\n\n <View style={styles.flex} testID={TEST_ID_KEYBOARD_TOOLBAR_CONTENT}>\n {content}\n </View>\n <ButtonContainer\n accessibilityHint=\"Closes the keyboard\"\n accessibilityLabel=\"Done\"\n rippleRadius={28}\n style={styles.doneButtonContainer}\n testID={TEST_ID_KEYBOARD_TOOLBAR_DONE}\n theme={theme}\n onPress={onPressDone}\n >\n <Text maxFontSizeMultiplier={1.3} style={doneStyle}>\n {doneText || \"Done\"}\n </Text>\n </ButtonContainer>\n </View>\n </KeyboardStickyView>\n );\n};\n\nconst styles = StyleSheet.create({\n flex: {\n flex: 1,\n },\n toolbar: {\n position: \"absolute\",\n bottom: 0,\n alignItems: \"center\",\n width: \"100%\",\n flexDirection: \"row\",\n height: KEYBOARD_TOOLBAR_HEIGHT,\n paddingHorizontal: 8,\n },\n doneButton: {\n fontWeight: \"600\",\n fontSize: 15,\n },\n doneButtonContainer: {\n marginRight: 8,\n },\n});\n\nexport { colors as DefaultKeyboardToolbarTheme };\nexport default KeyboardToolbar;\n"],"mappings":";;;;;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAEA,IAAAE,SAAA,GAAAF,OAAA;AACA,IAAAG,OAAA,GAAAH,OAAA;AACA,IAAAI,eAAA,GAAAC,sBAAA,CAAAL,OAAA;AACA,IAAAM,mBAAA,GAAAD,sBAAA,CAAAL,OAAA;AAEA,IAAAO,MAAA,GAAAF,sBAAA,CAAAL,OAAA;AACA,IAAAQ,OAAA,GAAAH,sBAAA,CAAAL,OAAA;AACA,IAAAS,OAAA,GAAAT,OAAA;AAAkC,SAAAK,uBAAAK,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,SAAAG,yBAAAH,CAAA,6BAAAI,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAD,wBAAA,YAAAA,CAAAH,CAAA,WAAAA,CAAA,GAAAM,CAAA,GAAAD,CAAA,KAAAL,CAAA;AAAA,SAAAX,wBAAAW,CAAA,EAAAK,CAAA,SAAAA,CAAA,IAAAL,CAAA,IAAAA,CAAA,CAAAC,UAAA,SAAAD,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAE,OAAA,EAAAF,CAAA,QAAAM,CAAA,GAAAH,wBAAA,CAAAE,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAC,GAAA,CAAAP,CAAA,UAAAM,CAAA,CAAAE,GAAA,CAAAR,CAAA,OAAAS,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAf,CAAA,oBAAAe,CAAA,OAAAC,cAAA,CAAAC,IAAA,CAAAjB,CAAA,EAAAe,CAAA,SAAAG,CAAA,GAAAP,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAd,CAAA,EAAAe,CAAA,UAAAG,CAAA,KAAAA,CAAA,CAAAV,GAAA,IAAAU,CAAA,CAAAC,GAAA,IAAAP,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAG,CAAA,IAAAT,CAAA,CAAAM,CAAA,IAAAf,CAAA,CAAAe,CAAA,YAAAN,CAAA,CAAAP,OAAA,GAAAF,CAAA,EAAAM,CAAA,IAAAA,CAAA,CAAAa,GAAA,CAAAnB,CAAA,EAAAS,CAAA,GAAAA,CAAA;AAAA,SAAAW,SAAA,WAAAA,QAAA,GAAAR,MAAA,CAAAS,MAAA,GAAAT,MAAA,CAAAS,MAAA,CAAAC,IAAA,eAAAb,CAAA,aAAAT,CAAA,MAAAA,CAAA,GAAAuB,SAAA,CAAAC,MAAA,EAAAxB,CAAA,UAAAM,CAAA,GAAAiB,SAAA,CAAAvB,CAAA,YAAAK,CAAA,IAAAC,CAAA,OAAAU,cAAA,CAAAC,IAAA,CAAAX,CAAA,EAAAD,CAAA,MAAAI,CAAA,CAAAJ,CAAA,IAAAC,CAAA,CAAAD,CAAA,aAAAI,CAAA,KAAAW,QAAA,CAAAK,KAAA,OAAAF,SAAA;AAgDlC,MAAMG,wBAAwB,GAAG,kBAAkB;AACnD,MAAMC,iCAAiC,GAAG,GAAGD,wBAAwB,WAAW;AAChF,MAAME,6BAA6B,GAAG,GAAGF,wBAAwB,OAAO;AACxE,MAAMG,gCAAgC,GAAG,GAAGH,wBAAwB,UAAU;AAC9E,MAAMI,6BAA6B,GAAG,GAAGJ,wBAAwB,OAAO;AAExE,MAAMK,uBAAuB,GAAG,EAAE;AAClC,MAAMC,eAAoB,GAAG,IAAI;;AAEjC;AACA;AACA;AACA;AACA,MAAMC,eAA+C,GAAGA,CAAC;EACvDC,OAAO;EACPC,KAAK,GAAGC,cAAM;EACdC,QAAQ;EACRC,MAAM;EACNC,IAAI;EACJC,UAAU,GAAG,IAAI;EACjBC,cAAc;EACdC,cAAc;EACdC,cAAc;EACdC,IAAI,GAAG,IAAI;EACXC,OAAO,GAAGb,eAAe;EACzBc,MAAM,EAAE;IAAEC,MAAM,GAAG,CAAC;IAAEC,MAAM,GAAG;EAAE,CAAC,GAAG,CAAC,CAAC;EACvCC,OAAO,GAAG,IAAI;EACd,GAAGC;AACL,CAAC,KAAK;EACJ,MAAMC,WAAW,GAAG,IAAAC,uBAAc,EAAC,CAAC;EACpC,MAAM,CAACC,MAAM,EAAEC,SAAS,CAAC,GAAG,IAAAC,eAAQ,EAAC;IACnCC,OAAO,EAAE,CAAC;IACVC,KAAK,EAAE;EACT,CAAC,CAAC;EACF,MAAMC,cAAc,GAAGL,MAAM,CAACG,OAAO,KAAK,CAAC;EAC3C,MAAMG,cAAc,GAAGN,MAAM,CAACG,OAAO,KAAKH,MAAM,CAACI,KAAK,GAAG,CAAC;EAE1D,IAAAG,gBAAS,EAAC,MAAM;IACd,MAAMC,YAAY,GAAGC,4BAAkB,CAACC,WAAW,CAAC,aAAa,EAAG/D,CAAC,IAAK;MACxEsD,SAAS,CAACtD,CAAC,CAAC;IACd,CAAC,CAAC;IAEF,OAAO6D,YAAY,CAACG,MAAM;EAC5B,CAAC,EAAE,EAAE,CAAC;EACN,MAAMC,SAAS,GAAG,IAAAC,cAAO,EACvB,MAAM,CAACC,MAAM,CAACC,UAAU,EAAE;IAAEC,KAAK,EAAElC,KAAK,CAACgB,WAAW,CAAC,CAACmB;EAAQ,CAAC,CAAC,EAChE,CAACnB,WAAW,EAAEhB,KAAK,CACrB,CAAC;EACD,MAAMoC,YAAY,GAAG,IAAAL,cAAO,EAC1B,MAAM,CACJC,MAAM,CAACK,OAAO,EACd;IACEC,eAAe,EAAE,GAAGtC,KAAK,CAACgB,WAAW,CAAC,CAACuB,UAAU,GAAG7B,OAAO;EAC7D,CAAC,CACF,EACD,CAACM,WAAW,EAAEN,OAAO,EAAEV,KAAK,CAC9B,CAAC;EACD,MAAMW,MAAM,GAAG,IAAAoB,cAAO,EACpB,OAAO;IAAEnB,MAAM,EAAEA,MAAM,GAAGhB,uBAAuB;IAAEiB;EAAO,CAAC,CAAC,EAC5D,CAACD,MAAM,EAAEC,MAAM,CACjB,CAAC;EACD,MAAM2B,eAAe,GAAGrC,MAAM,IAAIsC,eAAM;EACxC,MAAMC,aAAa,GAAGtC,IAAI,IAAIuC,cAAK;EAEnC,MAAMC,WAAW,GAAG,IAAAC,kBAAW,EAC5BC,KAA4B,IAAK;IAChCxC,cAAc,aAAdA,cAAc,eAAdA,cAAc,CAAGwC,KAAK,CAAC;IAEvB,IAAI,CAACA,KAAK,CAACC,kBAAkB,CAAC,CAAC,EAAE;MAC/BC,0BAAkB,CAACC,UAAU,CAAC,MAAM,CAAC;IACvC;EACF,CAAC,EACD,CAAC3C,cAAc,CACjB,CAAC;EACD,MAAM4C,WAAW,GAAG,IAAAL,kBAAW,EAC5BC,KAA4B,IAAK;IAChCvC,cAAc,aAAdA,cAAc,eAAdA,cAAc,CAAGuC,KAAK,CAAC;IAEvB,IAAI,CAACA,KAAK,CAACC,kBAAkB,CAAC,CAAC,EAAE;MAC/BC,0BAAkB,CAACC,UAAU,CAAC,MAAM,CAAC;IACvC;EACF,CAAC,EACD,CAAC1C,cAAc,CACjB,CAAC;EACD,MAAM4C,WAAW,GAAG,IAAAN,kBAAW,EAC5BC,KAA4B,IAAK;IAChCtC,cAAc,aAAdA,cAAc,eAAdA,cAAc,CAAGsC,KAAK,CAAC;IAEvB,IAAI,CAACA,KAAK,CAACC,kBAAkB,CAAC,CAAC,EAAE;MAC/BC,0BAAkB,CAACI,OAAO,CAAC,CAAC;IAC9B;EACF,CAAC,EACD,CAAC5C,cAAc,CACjB,CAAC;EAED,oBACEvD,MAAA,CAAAc,OAAA,CAAAsF,aAAA,CAAC5F,mBAAA,CAAAM,OAAkB;IAAC+C,OAAO,EAAEA,OAAQ;IAACH,MAAM,EAAEA;EAAO,gBACnD1D,MAAA,CAAAc,OAAA,CAAAsF,aAAA,CAACjG,YAAA,CAAAkG,IAAI,EAAArE,QAAA,KAAK8B,IAAI;IAAEwC,KAAK,EAAEnB,YAAa;IAACoB,MAAM,EAAEjE;EAAyB,IACnEkB,IAAI,EACJJ,UAAU,iBACTpD,MAAA,CAAAc,OAAA,CAAAsF,aAAA,CAAApG,MAAA,CAAAc,OAAA,CAAA0F,QAAA,qBACExG,MAAA,CAAAc,OAAA,CAAAsF,aAAA,CAACb,eAAe;IACdkB,iBAAiB,EAAC,mCAAmC;IACrDC,kBAAkB,EAAC,UAAU;IAC7BC,QAAQ,EAAErC,cAAe;IACzBiC,MAAM,EAAEhE,iCAAkC;IAC1CQ,KAAK,EAAEA,KAAM;IACb6D,OAAO,EAAEX;EAAY,gBAErBjG,MAAA,CAAAc,OAAA,CAAAsF,aAAA,CAACX,aAAa;IACZkB,QAAQ,EAAErC,cAAe;IACzBvB,KAAK,EAAEA,KAAM;IACb8D,IAAI,EAAC;EAAM,CACZ,CACc,CAAC,eAClB7G,MAAA,CAAAc,OAAA,CAAAsF,aAAA,CAACb,eAAe;IACdkB,iBAAiB,EAAC,+BAA+B;IACjDC,kBAAkB,EAAC,MAAM;IACzBC,QAAQ,EAAEpC,cAAe;IACzBgC,MAAM,EAAE/D,6BAA8B;IACtCO,KAAK,EAAEA,KAAM;IACb6D,OAAO,EAAEjB;EAAY,gBAErB3F,MAAA,CAAAc,OAAA,CAAAsF,aAAA,CAACX,aAAa;IACZkB,QAAQ,EAAEpC,cAAe;IACzBxB,KAAK,EAAEA,KAAM;IACb8D,IAAI,EAAC;EAAM,CACZ,CACc,CACjB,CACH,eAED7G,MAAA,CAAAc,OAAA,CAAAsF,aAAA,CAACjG,YAAA,CAAAkG,IAAI;IAACC,KAAK,EAAEvB,MAAM,CAAC+B,IAAK;IAACP,MAAM,EAAE9D;EAAiC,GAChEK,OACG,CAAC,eACP9C,MAAA,CAAAc,OAAA,CAAAsF,aAAA,CAACb,eAAe;IACdkB,iBAAiB,EAAC,qBAAqB;IACvCC,kBAAkB,EAAC,MAAM;IACzBK,YAAY,EAAE,EAAG;IACjBT,KAAK,EAAEvB,MAAM,CAACiC,mBAAoB;IAClCT,MAAM,EAAE7D,6BAA8B;IACtCK,KAAK,EAAEA,KAAM;IACb6D,OAAO,EAAEV;EAAY,gBAErBlG,MAAA,CAAAc,OAAA,CAAAsF,aAAA,CAACjG,YAAA,CAAA8G,IAAI;IAACC,qBAAqB,EAAE,GAAI;IAACZ,KAAK,EAAEzB;EAAU,GAChD5B,QAAQ,IAAI,MACT,CACS,CACb,CACY,CAAC;AAEzB,CAAC;AAED,MAAM8B,MAAM,GAAGoC,uBAAU,CAACC,MAAM,CAAC;EAC/BN,IAAI,EAAE;IACJA,IAAI,EAAE;EACR,CAAC;EACD1B,OAAO,EAAE;IACPiC,QAAQ,EAAE,UAAU;IACpBC,MAAM,EAAE,CAAC;IACTC,UAAU,EAAE,QAAQ;IACpBC,KAAK,EAAE,MAAM;IACbC,aAAa,EAAE,KAAK;IACpBC,MAAM,EAAE/E,uBAAuB;IAC/BgF,iBAAiB,EAAE;EACrB,CAAC;EACD3C,UAAU,EAAE;IACV4C,UAAU,EAAE,KAAK;IACjBC,QAAQ,EAAE;EACZ,CAAC;EACDb,mBAAmB,EAAE;IACnBc,WAAW,EAAE;EACf;AACF,CAAC,CAAC;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAlH,OAAA,GAGY+B,eAAe","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_bindings","_module","_useColorScheme","_interopRequireDefault","_KeyboardStickyView","_Arrow","_Button","_colors","e","__esModule","default","_getRequireWildcardCache","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","_extends","assign","bind","arguments","length","apply","TEST_ID_KEYBOARD_TOOLBAR","TEST_ID_KEYBOARD_TOOLBAR_PREVIOUS","TEST_ID_KEYBOARD_TOOLBAR_NEXT","TEST_ID_KEYBOARD_TOOLBAR_CONTENT","TEST_ID_KEYBOARD_TOOLBAR_DONE","KEYBOARD_TOOLBAR_HEIGHT","DEFAULT_OPACITY","KeyboardToolbar","content","theme","colors","doneText","button","icon","showArrows","onNextCallback","onPrevCallback","onDoneCallback","blur","opacity","offset","closed","opened","enabled","rest","colorScheme","useColorScheme","inputs","setInputs","useState","current","count","isPrevDisabled","isNextDisabled","useEffect","subscription","FocusedInputEvents","addListener","remove","doneStyle","useMemo","styles","doneButton","color","primary","toolbarStyle","toolbar","backgroundColor","background","ButtonContainer","Button","IconContainer","Arrow","onPressNext","useCallback","event","isDefaultPrevented","KeyboardController","setFocusTo","onPressPrev","onPressDone","dismiss","createElement","View","style","testID","Fragment","accessibilityHint","accessibilityLabel","disabled","onPress","type","flex","rippleRadius","doneButtonContainer","Text","maxFontSizeMultiplier","StyleSheet","create","position","bottom","alignItems","width","flexDirection","height","paddingHorizontal","fontWeight","fontSize","marginRight","_default","exports"],"sources":["index.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { StyleSheet, Text, View } from \"react-native\";\n\nimport { FocusedInputEvents } from \"../../bindings\";\nimport { KeyboardController } from \"../../module\";\nimport useColorScheme from \"../hooks/useColorScheme\";\nimport KeyboardStickyView from \"../KeyboardStickyView\";\n\nimport Arrow from \"./Arrow\";\nimport Button from \"./Button\";\nimport { colors } from \"./colors\";\n\nimport type { HEX, KeyboardToolbarTheme } from \"./types\";\nimport type { KeyboardStickyViewProps } from \"../KeyboardStickyView\";\nimport type { ReactNode } from \"react\";\nimport type { GestureResponderEvent, ViewProps } from \"react-native\";\n\nexport type KeyboardToolbarProps = Omit<\n ViewProps,\n \"style\" | \"testID\" | \"children\"\n> & {\n /** An element that is shown in the middle of the toolbar. */\n content?: React.JSX.Element | null;\n /** A set of dark/light colors consumed by toolbar component. */\n theme?: KeyboardToolbarTheme;\n /** Custom text for done button. */\n doneText?: ReactNode;\n /** Custom touchable component for toolbar (used for prev/next/done buttons). */\n button?: typeof Button;\n /** Custom icon component used to display next/prev buttons. */\n icon?: typeof Arrow;\n /**\n * Whether to show next and previous buttons. Can be useful to set it to `false` if you have only one input\n * and want to show only `Done` button. Default to `true`.\n */\n showArrows?: boolean;\n /**\n * A callback that is called when the user presses the next button along with the default action.\n */\n onNextCallback?: (event: GestureResponderEvent) => void;\n /**\n * A callback that is called when the user presses the previous button along with the default action.\n */\n onPrevCallback?: (event: GestureResponderEvent) => void;\n /**\n * A callback that is called when the user presses the done button along with the default action.\n */\n onDoneCallback?: (event: GestureResponderEvent) => void;\n /**\n * A component that applies blur effect to the toolbar.\n */\n blur?: React.JSX.Element | null;\n /**\n * A value for container opacity in hexadecimal format (e.g. `ff`). Default value is `ff`.\n */\n opacity?: HEX;\n} & Pick<KeyboardStickyViewProps, \"offset\" | \"enabled\">;\n\nconst TEST_ID_KEYBOARD_TOOLBAR = \"keyboard.toolbar\";\nconst TEST_ID_KEYBOARD_TOOLBAR_PREVIOUS = `${TEST_ID_KEYBOARD_TOOLBAR}.previous`;\nconst TEST_ID_KEYBOARD_TOOLBAR_NEXT = `${TEST_ID_KEYBOARD_TOOLBAR}.next`;\nconst TEST_ID_KEYBOARD_TOOLBAR_CONTENT = `${TEST_ID_KEYBOARD_TOOLBAR}.content`;\nconst TEST_ID_KEYBOARD_TOOLBAR_DONE = `${TEST_ID_KEYBOARD_TOOLBAR}.done`;\n\nconst KEYBOARD_TOOLBAR_HEIGHT = 42;\nconst DEFAULT_OPACITY: HEX = \"FF\";\n\n/**\n * `KeyboardToolbar` is a component that is shown above the keyboard with `Prev`/`Next` and\n * `Done` buttons.\n */\nconst KeyboardToolbar: React.FC<KeyboardToolbarProps> = ({\n content,\n theme = colors,\n doneText,\n button,\n icon,\n showArrows = true,\n onNextCallback,\n onPrevCallback,\n onDoneCallback,\n blur = null,\n opacity = DEFAULT_OPACITY,\n offset: { closed = 0, opened = 0 } = {},\n enabled = true,\n ...rest\n}) => {\n const colorScheme = useColorScheme();\n const [inputs, setInputs] = useState({\n current: 0,\n count: 0,\n });\n const isPrevDisabled = inputs.current === 0;\n const isNextDisabled = inputs.current === inputs.count - 1;\n\n useEffect(() => {\n const subscription = FocusedInputEvents.addListener(\"focusDidSet\", (e) => {\n setInputs(e);\n });\n\n return subscription.remove;\n }, []);\n const doneStyle = useMemo(\n () => [styles.doneButton, { color: theme[colorScheme].primary }],\n [colorScheme, theme],\n );\n const toolbarStyle = useMemo(\n () => [\n styles.toolbar,\n {\n backgroundColor: `${theme[colorScheme].background}${opacity}`,\n },\n ],\n [colorScheme, opacity, theme],\n );\n const offset = useMemo(\n () => ({ closed: closed + KEYBOARD_TOOLBAR_HEIGHT, opened }),\n [closed, opened],\n );\n const ButtonContainer = button || Button;\n const IconContainer = icon || Arrow;\n\n const onPressNext = useCallback(\n (event: GestureResponderEvent) => {\n onNextCallback?.(event);\n\n if (!event.isDefaultPrevented()) {\n KeyboardController.setFocusTo(\"next\");\n }\n },\n [onNextCallback],\n );\n const onPressPrev = useCallback(\n (event: GestureResponderEvent) => {\n onPrevCallback?.(event);\n\n if (!event.isDefaultPrevented()) {\n KeyboardController.setFocusTo(\"prev\");\n }\n },\n [onPrevCallback],\n );\n const onPressDone = useCallback(\n (event: GestureResponderEvent) => {\n onDoneCallback?.(event);\n\n if (!event.isDefaultPrevented()) {\n KeyboardController.dismiss();\n }\n },\n [onDoneCallback],\n );\n\n return (\n <KeyboardStickyView enabled={enabled} offset={offset}>\n <View {...rest} style={toolbarStyle} testID={TEST_ID_KEYBOARD_TOOLBAR}>\n {blur}\n {showArrows && (\n <>\n <ButtonContainer\n accessibilityHint=\"Moves focus to the previous field\"\n accessibilityLabel=\"Previous\"\n disabled={isPrevDisabled}\n testID={TEST_ID_KEYBOARD_TOOLBAR_PREVIOUS}\n theme={theme}\n onPress={onPressPrev}\n >\n <IconContainer\n disabled={isPrevDisabled}\n theme={theme}\n type=\"prev\"\n />\n </ButtonContainer>\n <ButtonContainer\n accessibilityHint=\"Moves focus to the next field\"\n accessibilityLabel=\"Next\"\n disabled={isNextDisabled}\n testID={TEST_ID_KEYBOARD_TOOLBAR_NEXT}\n theme={theme}\n onPress={onPressNext}\n >\n <IconContainer\n disabled={isNextDisabled}\n theme={theme}\n type=\"next\"\n />\n </ButtonContainer>\n </>\n )}\n\n <View style={styles.flex} testID={TEST_ID_KEYBOARD_TOOLBAR_CONTENT}>\n {content}\n </View>\n <ButtonContainer\n accessibilityHint=\"Closes the keyboard\"\n accessibilityLabel=\"Done\"\n rippleRadius={28}\n style={styles.doneButtonContainer}\n testID={TEST_ID_KEYBOARD_TOOLBAR_DONE}\n theme={theme}\n onPress={onPressDone}\n >\n <Text maxFontSizeMultiplier={1.3} style={doneStyle}>\n {doneText || \"Done\"}\n </Text>\n </ButtonContainer>\n </View>\n </KeyboardStickyView>\n );\n};\n\nconst styles = StyleSheet.create({\n flex: {\n flex: 1,\n },\n toolbar: {\n position: \"absolute\",\n bottom: 0,\n alignItems: \"center\",\n width: \"100%\",\n flexDirection: \"row\",\n height: KEYBOARD_TOOLBAR_HEIGHT,\n paddingHorizontal: 8,\n },\n doneButton: {\n fontWeight: \"600\",\n fontSize: 15,\n },\n doneButtonContainer: {\n marginRight: 8,\n },\n});\n\nexport { colors as DefaultKeyboardToolbarTheme };\nexport default KeyboardToolbar;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -18,6 +18,8 @@ let AndroidSoftInputModes = exports.AndroidSoftInputModes = /*#__PURE__*/functio
|
|
|
18
18
|
AndroidSoftInputModes[AndroidSoftInputModes["SOFT_INPUT_STATE_ALWAYS_VISIBLE"] = 5] = "SOFT_INPUT_STATE_ALWAYS_VISIBLE";
|
|
19
19
|
AndroidSoftInputModes[AndroidSoftInputModes["SOFT_INPUT_STATE_HIDDEN"] = 2] = "SOFT_INPUT_STATE_HIDDEN";
|
|
20
20
|
AndroidSoftInputModes[AndroidSoftInputModes["SOFT_INPUT_STATE_UNCHANGED"] = 1] = "SOFT_INPUT_STATE_UNCHANGED";
|
|
21
|
+
// temporarily disable this rule to avoid breaking changes.
|
|
22
|
+
// eslint-disable-next-line @typescript-eslint/no-duplicate-enum-values
|
|
21
23
|
AndroidSoftInputModes[AndroidSoftInputModes["SOFT_INPUT_STATE_UNSPECIFIED"] = 0] = "SOFT_INPUT_STATE_UNSPECIFIED";
|
|
22
24
|
AndroidSoftInputModes[AndroidSoftInputModes["SOFT_INPUT_STATE_VISIBLE"] = 4] = "SOFT_INPUT_STATE_VISIBLE";
|
|
23
25
|
return AndroidSoftInputModes;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["AndroidSoftInputModes","exports"],"sources":["constants.ts"],"sourcesContent":["// copied from `android.view.WindowManager.LayoutParams`\nexport enum AndroidSoftInputModes {\n SOFT_INPUT_ADJUST_NOTHING = 48,\n SOFT_INPUT_ADJUST_PAN = 32,\n SOFT_INPUT_ADJUST_RESIZE = 16,\n SOFT_INPUT_ADJUST_UNSPECIFIED = 0,\n SOFT_INPUT_IS_FORWARD_NAVIGATION = 256,\n SOFT_INPUT_MASK_ADJUST = 240,\n SOFT_INPUT_MASK_STATE = 15,\n SOFT_INPUT_MODE_CHANGED = 512,\n SOFT_INPUT_STATE_ALWAYS_HIDDEN = 3,\n SOFT_INPUT_STATE_ALWAYS_VISIBLE = 5,\n SOFT_INPUT_STATE_HIDDEN = 2,\n SOFT_INPUT_STATE_UNCHANGED = 1,\n // temporarily disable this rule to avoid breaking changes.\n // eslint-disable-next-line @typescript-eslint/no-duplicate-enum-values\n SOFT_INPUT_STATE_UNSPECIFIED = 0,\n SOFT_INPUT_STATE_VISIBLE = 4,\n}\n"],"mappings":";;;;;;AAAA;AAAA,IACYA,qBAAqB,GAAAC,OAAA,CAAAD,qBAAA,0BAArBA,qBAAqB;EAArBA,qBAAqB,CAArBA,qBAAqB;EAArBA,qBAAqB,CAArBA,qBAAqB;EAArBA,qBAAqB,CAArBA,qBAAqB;EAArBA,qBAAqB,CAArBA,qBAAqB;EAArBA,qBAAqB,CAArBA,qBAAqB;EAArBA,qBAAqB,CAArBA,qBAAqB;EAArBA,qBAAqB,CAArBA,qBAAqB;EAArBA,qBAAqB,CAArBA,qBAAqB;EAArBA,qBAAqB,CAArBA,qBAAqB;EAArBA,qBAAqB,CAArBA,qBAAqB;EAArBA,qBAAqB,CAArBA,qBAAqB;EAArBA,qBAAqB,CAArBA,qBAAqB;
|
|
1
|
+
{"version":3,"names":["AndroidSoftInputModes","exports"],"sources":["constants.ts"],"sourcesContent":["// copied from `android.view.WindowManager.LayoutParams`\nexport enum AndroidSoftInputModes {\n SOFT_INPUT_ADJUST_NOTHING = 48,\n SOFT_INPUT_ADJUST_PAN = 32,\n SOFT_INPUT_ADJUST_RESIZE = 16,\n SOFT_INPUT_ADJUST_UNSPECIFIED = 0,\n SOFT_INPUT_IS_FORWARD_NAVIGATION = 256,\n SOFT_INPUT_MASK_ADJUST = 240,\n SOFT_INPUT_MASK_STATE = 15,\n SOFT_INPUT_MODE_CHANGED = 512,\n SOFT_INPUT_STATE_ALWAYS_HIDDEN = 3,\n SOFT_INPUT_STATE_ALWAYS_VISIBLE = 5,\n SOFT_INPUT_STATE_HIDDEN = 2,\n SOFT_INPUT_STATE_UNCHANGED = 1,\n // temporarily disable this rule to avoid breaking changes.\n // eslint-disable-next-line @typescript-eslint/no-duplicate-enum-values\n SOFT_INPUT_STATE_UNSPECIFIED = 0,\n SOFT_INPUT_STATE_VISIBLE = 4,\n}\n"],"mappings":";;;;;;AAAA;AAAA,IACYA,qBAAqB,GAAAC,OAAA,CAAAD,qBAAA,0BAArBA,qBAAqB;EAArBA,qBAAqB,CAArBA,qBAAqB;EAArBA,qBAAqB,CAArBA,qBAAqB;EAArBA,qBAAqB,CAArBA,qBAAqB;EAArBA,qBAAqB,CAArBA,qBAAqB;EAArBA,qBAAqB,CAArBA,qBAAqB;EAArBA,qBAAqB,CAArBA,qBAAqB;EAArBA,qBAAqB,CAArBA,qBAAqB;EAArBA,qBAAqB,CAArBA,qBAAqB;EAArBA,qBAAqB,CAArBA,qBAAqB;EAArBA,qBAAqB,CAArBA,qBAAqB;EAArBA,qBAAqB,CAArBA,qBAAqB;EAArBA,qBAAqB,CAArBA,qBAAqB;EAa/B;EACA;EAdUA,qBAAqB,CAArBA,qBAAqB;EAArBA,qBAAqB,CAArBA,qBAAqB;EAAA,OAArBA,qBAAqB;AAAA","ignoreList":[]}
|
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
var _react = _interopRequireWildcard(require("react"));
|
|
8
8
|
var _reactNative = require("react-native");
|
|
9
|
+
var _architecture = require("../../architecture");
|
|
9
10
|
var _bindings = require("../../bindings");
|
|
10
11
|
var _hooks = require("../../hooks");
|
|
11
12
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
@@ -25,8 +26,7 @@ const OverKeyboardView = ({
|
|
|
25
26
|
const style = (0, _react.useMemo)(() => [styles.absolute,
|
|
26
27
|
// On iOS - stretch view to full window dimensions to make yoga work
|
|
27
28
|
// On Android Fabric we temporarily use the same approach
|
|
28
|
-
|
|
29
|
-
_reactNative.Platform.OS === "ios" || global._IS_FABRIC ? inner : undefined], [inner]);
|
|
29
|
+
_reactNative.Platform.OS === "ios" || _architecture.IS_FABRIC ? inner : undefined], [inner]);
|
|
30
30
|
return /*#__PURE__*/_react.default.createElement(_bindings.RCTOverKeyboardView, {
|
|
31
31
|
visible: visible
|
|
32
32
|
}, /*#__PURE__*/_react.default.createElement(_reactNative.View, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_bindings","_hooks","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","OverKeyboardView","children","visible","height","width","useWindowDimensions","inner","useMemo","style","styles","absolute","Platform","OS","
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_architecture","_bindings","_hooks","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","OverKeyboardView","children","visible","height","width","useWindowDimensions","inner","useMemo","style","styles","absolute","Platform","OS","IS_FABRIC","undefined","createElement","RCTOverKeyboardView","View","collapsable","StyleSheet","create","position","_default","exports"],"sources":["index.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\nimport { Platform, StyleSheet, View } from \"react-native\";\n\nimport { IS_FABRIC } from \"../../architecture\";\nimport { RCTOverKeyboardView } from \"../../bindings\";\nimport { useWindowDimensions } from \"../../hooks\";\n\nimport type { OverKeyboardViewProps } from \"../../types\";\nimport type { PropsWithChildren } from \"react\";\n\nconst OverKeyboardView = ({\n children,\n visible,\n}: PropsWithChildren<OverKeyboardViewProps>) => {\n const { height, width } = useWindowDimensions();\n const inner = useMemo(() => ({ height, width }), [height, width]);\n const style = useMemo(\n () => [\n styles.absolute,\n // On iOS - stretch view to full window dimensions to make yoga work\n // On Android Fabric we temporarily use the same approach\n Platform.OS === \"ios\" || IS_FABRIC ? inner : undefined,\n ],\n [inner],\n );\n\n return (\n <RCTOverKeyboardView visible={visible}>\n {/* `OverKeyboardView` should always have a single child */}\n <View collapsable={false} style={style}>\n {children}\n </View>\n </RCTOverKeyboardView>\n );\n};\n\nconst styles = StyleSheet.create({\n absolute: {\n position: \"absolute\",\n },\n});\n\nexport default OverKeyboardView;\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAEA,IAAAE,aAAA,GAAAF,OAAA;AACA,IAAAG,SAAA,GAAAH,OAAA;AACA,IAAAI,MAAA,GAAAJ,OAAA;AAAkD,SAAAK,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAP,wBAAAO,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAK,OAAA,EAAAL,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAG,GAAA,CAAAN,CAAA,UAAAG,CAAA,CAAAI,GAAA,CAAAP,CAAA,OAAAQ,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,OAAAC,cAAA,CAAAC,IAAA,CAAAhB,CAAA,EAAAc,CAAA,SAAAG,CAAA,GAAAP,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAb,CAAA,EAAAc,CAAA,UAAAG,CAAA,KAAAA,CAAA,CAAAV,GAAA,IAAAU,CAAA,CAAAC,GAAA,IAAAP,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAG,CAAA,IAAAT,CAAA,CAAAM,CAAA,IAAAd,CAAA,CAAAc,CAAA,YAAAN,CAAA,CAAAH,OAAA,GAAAL,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAe,GAAA,CAAAlB,CAAA,EAAAQ,CAAA,GAAAA,CAAA;AAKlD,MAAMW,gBAAgB,GAAGA,CAAC;EACxBC,QAAQ;EACRC;AACwC,CAAC,KAAK;EAC9C,MAAM;IAAEC,MAAM;IAAEC;EAAM,CAAC,GAAG,IAAAC,0BAAmB,EAAC,CAAC;EAC/C,MAAMC,KAAK,GAAG,IAAAC,cAAO,EAAC,OAAO;IAAEJ,MAAM;IAAEC;EAAM,CAAC,CAAC,EAAE,CAACD,MAAM,EAAEC,KAAK,CAAC,CAAC;EACjE,MAAMI,KAAK,GAAG,IAAAD,cAAO,EACnB,MAAM,CACJE,MAAM,CAACC,QAAQ;EACf;EACA;EACAC,qBAAQ,CAACC,EAAE,KAAK,KAAK,IAAIC,uBAAS,GAAGP,KAAK,GAAGQ,SAAS,CACvD,EACD,CAACR,KAAK,CACR,CAAC;EAED,oBACEjC,MAAA,CAAAa,OAAA,CAAA6B,aAAA,CAACrC,SAAA,CAAAsC,mBAAmB;IAACd,OAAO,EAAEA;EAAQ,gBAEpC7B,MAAA,CAAAa,OAAA,CAAA6B,aAAA,CAACvC,YAAA,CAAAyC,IAAI;IAACC,WAAW,EAAE,KAAM;IAACV,KAAK,EAAEA;EAAM,GACpCP,QACG,CACa,CAAC;AAE1B,CAAC;AAED,MAAMQ,MAAM,GAAGU,uBAAU,CAACC,MAAM,CAAC;EAC/BV,QAAQ,EAAE;IACRW,QAAQ,EAAE;EACZ;AACF,CAAC,CAAC;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAArC,OAAA,GAEYc,gBAAgB","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["IS_FABRIC","global"],"sources":["architecture.ts"],"sourcesContent":["export const IS_FABRIC = \"nativeFabricUIManager\" in global;\n"],"mappings":"AAAA,OAAO,MAAMA,SAAS,GAAG,uBAAuB,IAAIC,MAAM","ignoreList":[]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useLayoutEffect } from "react";
|
|
2
2
|
import { Platform } from "react-native";
|
|
3
3
|
import { useSharedValue } from "react-native-reanimated";
|
|
4
4
|
import { useKeyboardContext } from "../../context";
|
|
@@ -8,20 +8,25 @@ export const useKeyboardAnimation = () => {
|
|
|
8
8
|
const {
|
|
9
9
|
reanimated
|
|
10
10
|
} = useKeyboardContext();
|
|
11
|
+
const heightWhenOpened = useSharedValue(0);
|
|
12
|
+
const height = useSharedValue(0);
|
|
13
|
+
const progress = useSharedValue(0);
|
|
14
|
+
const isClosed = useSharedValue(true);
|
|
15
|
+
useLayoutEffect(() => {
|
|
16
|
+
const initialHeight = -reanimated.height.value;
|
|
17
|
+
const initialProgress = reanimated.progress.value;
|
|
11
18
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
const isClosed = useSharedValue(initialProgress === 0);
|
|
19
|
+
// eslint-disable-next-line react-compiler/react-compiler
|
|
20
|
+
heightWhenOpened.value = initialHeight;
|
|
21
|
+
height.value = initialHeight;
|
|
22
|
+
progress.value = initialProgress;
|
|
23
|
+
isClosed.value = initialProgress === 0;
|
|
24
|
+
}, []);
|
|
19
25
|
useKeyboardHandler({
|
|
20
26
|
onStart: e => {
|
|
21
27
|
"worklet";
|
|
22
28
|
|
|
23
29
|
if (e.height > 0) {
|
|
24
|
-
// eslint-disable-next-line react-compiler/react-compiler
|
|
25
30
|
isClosed.value = false;
|
|
26
31
|
heightWhenOpened.value = e.height;
|
|
27
32
|
}
|
|
@@ -57,17 +62,17 @@ export const useTranslateAnimation = () => {
|
|
|
57
62
|
const {
|
|
58
63
|
reanimated
|
|
59
64
|
} = useKeyboardContext();
|
|
60
|
-
|
|
61
|
-
// calculate it only once on mount, to avoid `SharedValue` reads during a render
|
|
62
|
-
const [initialProgress] = useState(() => reanimated.progress.value);
|
|
63
|
-
const padding = useSharedValue(initialProgress);
|
|
65
|
+
const padding = useSharedValue(0);
|
|
64
66
|
const translate = useSharedValue(0);
|
|
67
|
+
useLayoutEffect(() => {
|
|
68
|
+
// eslint-disable-next-line react-compiler/react-compiler
|
|
69
|
+
padding.value = reanimated.progress.value;
|
|
70
|
+
}, []);
|
|
65
71
|
useKeyboardHandler({
|
|
66
72
|
onStart: e => {
|
|
67
73
|
"worklet";
|
|
68
74
|
|
|
69
75
|
if (e.height === 0) {
|
|
70
|
-
// eslint-disable-next-line react-compiler/react-compiler
|
|
71
76
|
padding.value = 0;
|
|
72
77
|
}
|
|
73
78
|
if (OS === "ios") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["useLayoutEffect","Platform","useSharedValue","useKeyboardContext","useKeyboardHandler","OS","useKeyboardAnimation","reanimated","heightWhenOpened","height","progress","isClosed","initialHeight","value","initialProgress","onStart","e","onMove","onInteractive","onEnd","useTranslateAnimation","padding","translate"],"sources":["hooks.ts"],"sourcesContent":["import { useLayoutEffect } from \"react\";\nimport { Platform } from \"react-native\";\nimport { useSharedValue } from \"react-native-reanimated\";\n\nimport { useKeyboardContext } from \"../../context\";\nimport { useKeyboardHandler } from \"../../hooks\";\n\nconst OS = Platform.OS;\n\nexport const useKeyboardAnimation = () => {\n const { reanimated } = useKeyboardContext();\n\n const heightWhenOpened = useSharedValue(0);\n const height = useSharedValue(0);\n const progress = useSharedValue(0);\n const isClosed = useSharedValue(true);\n\n useLayoutEffect(() => {\n const initialHeight = -reanimated.height.value;\n const initialProgress = reanimated.progress.value;\n\n // eslint-disable-next-line react-compiler/react-compiler\n heightWhenOpened.value = initialHeight;\n height.value = initialHeight;\n progress.value = initialProgress;\n isClosed.value = initialProgress === 0;\n }, []);\n\n useKeyboardHandler(\n {\n onStart: (e) => {\n \"worklet\";\n\n if (e.height > 0) {\n isClosed.value = false;\n heightWhenOpened.value = e.height;\n }\n },\n onMove: (e) => {\n \"worklet\";\n\n progress.value = e.progress;\n height.value = e.height;\n },\n onInteractive: (e) => {\n \"worklet\";\n\n progress.value = e.progress;\n height.value = e.height;\n },\n onEnd: (e) => {\n \"worklet\";\n\n isClosed.value = e.height === 0;\n\n height.value = e.height;\n progress.value = e.progress;\n },\n },\n [],\n );\n\n return { height, progress, heightWhenOpened, isClosed };\n};\nexport const useTranslateAnimation = () => {\n const { reanimated } = useKeyboardContext();\n\n const padding = useSharedValue(0);\n const translate = useSharedValue(0);\n\n useLayoutEffect(() => {\n // eslint-disable-next-line react-compiler/react-compiler\n padding.value = reanimated.progress.value;\n }, []);\n\n useKeyboardHandler(\n {\n onStart: (e) => {\n \"worklet\";\n\n if (e.height === 0) {\n padding.value = 0;\n }\n if (OS === \"ios\") {\n translate.value = e.progress;\n }\n },\n onMove: (e) => {\n \"worklet\";\n\n if (OS === \"android\") {\n translate.value = e.progress;\n }\n },\n onInteractive: (e) => {\n \"worklet\";\n\n padding.value = 0;\n\n translate.value = e.progress;\n },\n onEnd: (e) => {\n \"worklet\";\n\n padding.value = e.progress;\n\n if (OS === \"android\") {\n translate.value = e.progress;\n }\n },\n },\n [],\n );\n\n return { translate, padding };\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useCallback","useEffect","useMemo","useState","StyleSheet","Text","View","FocusedInputEvents","KeyboardController","useColorScheme","KeyboardStickyView","Arrow","Button","colors","TEST_ID_KEYBOARD_TOOLBAR","TEST_ID_KEYBOARD_TOOLBAR_PREVIOUS","TEST_ID_KEYBOARD_TOOLBAR_NEXT","TEST_ID_KEYBOARD_TOOLBAR_CONTENT","TEST_ID_KEYBOARD_TOOLBAR_DONE","KEYBOARD_TOOLBAR_HEIGHT","DEFAULT_OPACITY","KeyboardToolbar","content","theme","doneText","button","icon","showArrows","onNextCallback","onPrevCallback","onDoneCallback","blur","opacity","offset","closed","opened","enabled","rest","colorScheme","inputs","setInputs","current","count","isPrevDisabled","isNextDisabled","subscription","addListener","e","remove","doneStyle","styles","doneButton","color","primary","toolbarStyle","toolbar","backgroundColor","background","ButtonContainer","IconContainer","onPressNext","event","isDefaultPrevented","setFocusTo","onPressPrev","onPressDone","dismiss","createElement","_extends","style","testID","Fragment","accessibilityHint","accessibilityLabel","disabled","onPress","type","flex","rippleRadius","doneButtonContainer","maxFontSizeMultiplier","create","position","bottom","alignItems","width","flexDirection","height","paddingHorizontal","fontWeight","fontSize","marginRight","DefaultKeyboardToolbarTheme"],"sources":["index.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { StyleSheet, Text, View } from \"react-native\";\n\nimport { FocusedInputEvents } from \"../../bindings\";\nimport { KeyboardController } from \"../../module\";\nimport useColorScheme from \"../hooks/useColorScheme\";\nimport KeyboardStickyView from \"../KeyboardStickyView\";\n\nimport Arrow from \"./Arrow\";\nimport Button from \"./Button\";\nimport { colors } from \"./colors\";\n\nimport type { HEX, KeyboardToolbarTheme } from \"./types\";\nimport type { KeyboardStickyViewProps } from \"../KeyboardStickyView\";\nimport type { ReactNode } from \"react\";\nimport type { GestureResponderEvent, ViewProps } from \"react-native\";\n\nexport type KeyboardToolbarProps = Omit<\n ViewProps,\n \"style\" | \"testID\" | \"children\"\n> & {\n /** An element that is shown in the middle of the toolbar. */\n content?: JSX.Element | null;\n /** A set of dark/light colors consumed by toolbar component. */\n theme?: KeyboardToolbarTheme;\n /** Custom text for done button. */\n doneText?: ReactNode;\n /** Custom touchable component for toolbar (used for prev/next/done buttons). */\n button?: typeof Button;\n /** Custom icon component used to display next/prev buttons. */\n icon?: typeof Arrow;\n /**\n * Whether to show next and previous buttons. Can be useful to set it to `false` if you have only one input\n * and want to show only `Done` button. Default to `true`.\n */\n showArrows?: boolean;\n /**\n * A callback that is called when the user presses the next button along with the default action.\n */\n onNextCallback?: (event: GestureResponderEvent) => void;\n /**\n * A callback that is called when the user presses the previous button along with the default action.\n */\n onPrevCallback?: (event: GestureResponderEvent) => void;\n /**\n * A callback that is called when the user presses the done button along with the default action.\n */\n onDoneCallback?: (event: GestureResponderEvent) => void;\n /**\n * A component that applies blur effect to the toolbar.\n */\n blur?: JSX.Element | null;\n /**\n * A value for container opacity in hexadecimal format (e.g. `ff`). Default value is `ff`.\n */\n opacity?: HEX;\n} & Pick<KeyboardStickyViewProps, \"offset\" | \"enabled\">;\n\nconst TEST_ID_KEYBOARD_TOOLBAR = \"keyboard.toolbar\";\nconst TEST_ID_KEYBOARD_TOOLBAR_PREVIOUS = `${TEST_ID_KEYBOARD_TOOLBAR}.previous`;\nconst TEST_ID_KEYBOARD_TOOLBAR_NEXT = `${TEST_ID_KEYBOARD_TOOLBAR}.next`;\nconst TEST_ID_KEYBOARD_TOOLBAR_CONTENT = `${TEST_ID_KEYBOARD_TOOLBAR}.content`;\nconst TEST_ID_KEYBOARD_TOOLBAR_DONE = `${TEST_ID_KEYBOARD_TOOLBAR}.done`;\n\nconst KEYBOARD_TOOLBAR_HEIGHT = 42;\nconst DEFAULT_OPACITY: HEX = \"FF\";\n\n/**\n * `KeyboardToolbar` is a component that is shown above the keyboard with `Prev`/`Next` and\n * `Done` buttons.\n */\nconst KeyboardToolbar: React.FC<KeyboardToolbarProps> = ({\n content,\n theme = colors,\n doneText,\n button,\n icon,\n showArrows = true,\n onNextCallback,\n onPrevCallback,\n onDoneCallback,\n blur = null,\n opacity = DEFAULT_OPACITY,\n offset: { closed = 0, opened = 0 } = {},\n enabled = true,\n ...rest\n}) => {\n const colorScheme = useColorScheme();\n const [inputs, setInputs] = useState({\n current: 0,\n count: 0,\n });\n const isPrevDisabled = inputs.current === 0;\n const isNextDisabled = inputs.current === inputs.count - 1;\n\n useEffect(() => {\n const subscription = FocusedInputEvents.addListener(\"focusDidSet\", (e) => {\n setInputs(e);\n });\n\n return subscription.remove;\n }, []);\n const doneStyle = useMemo(\n () => [styles.doneButton, { color: theme[colorScheme].primary }],\n [colorScheme, theme],\n );\n const toolbarStyle = useMemo(\n () => [\n styles.toolbar,\n {\n backgroundColor: `${theme[colorScheme].background}${opacity}`,\n },\n ],\n [colorScheme, opacity, theme],\n );\n const offset = useMemo(\n () => ({ closed: closed + KEYBOARD_TOOLBAR_HEIGHT, opened }),\n [closed, opened],\n );\n const ButtonContainer = button || Button;\n const IconContainer = icon || Arrow;\n\n const onPressNext = useCallback(\n (event: GestureResponderEvent) => {\n onNextCallback?.(event);\n\n if (!event.isDefaultPrevented()) {\n KeyboardController.setFocusTo(\"next\");\n }\n },\n [onNextCallback],\n );\n const onPressPrev = useCallback(\n (event: GestureResponderEvent) => {\n onPrevCallback?.(event);\n\n if (!event.isDefaultPrevented()) {\n KeyboardController.setFocusTo(\"prev\");\n }\n },\n [onPrevCallback],\n );\n const onPressDone = useCallback(\n (event: GestureResponderEvent) => {\n onDoneCallback?.(event);\n\n if (!event.isDefaultPrevented()) {\n KeyboardController.dismiss();\n }\n },\n [onDoneCallback],\n );\n\n return (\n <KeyboardStickyView enabled={enabled} offset={offset}>\n <View {...rest} style={toolbarStyle} testID={TEST_ID_KEYBOARD_TOOLBAR}>\n {blur}\n {showArrows && (\n <>\n <ButtonContainer\n accessibilityHint=\"Moves focus to the previous field\"\n accessibilityLabel=\"Previous\"\n disabled={isPrevDisabled}\n testID={TEST_ID_KEYBOARD_TOOLBAR_PREVIOUS}\n theme={theme}\n onPress={onPressPrev}\n >\n <IconContainer\n disabled={isPrevDisabled}\n theme={theme}\n type=\"prev\"\n />\n </ButtonContainer>\n <ButtonContainer\n accessibilityHint=\"Moves focus to the next field\"\n accessibilityLabel=\"Next\"\n disabled={isNextDisabled}\n testID={TEST_ID_KEYBOARD_TOOLBAR_NEXT}\n theme={theme}\n onPress={onPressNext}\n >\n <IconContainer\n disabled={isNextDisabled}\n theme={theme}\n type=\"next\"\n />\n </ButtonContainer>\n </>\n )}\n\n <View style={styles.flex} testID={TEST_ID_KEYBOARD_TOOLBAR_CONTENT}>\n {content}\n </View>\n <ButtonContainer\n accessibilityHint=\"Closes the keyboard\"\n accessibilityLabel=\"Done\"\n rippleRadius={28}\n style={styles.doneButtonContainer}\n testID={TEST_ID_KEYBOARD_TOOLBAR_DONE}\n theme={theme}\n onPress={onPressDone}\n >\n <Text maxFontSizeMultiplier={1.3} style={doneStyle}>\n {doneText || \"Done\"}\n </Text>\n </ButtonContainer>\n </View>\n </KeyboardStickyView>\n );\n};\n\nconst styles = StyleSheet.create({\n flex: {\n flex: 1,\n },\n toolbar: {\n position: \"absolute\",\n bottom: 0,\n alignItems: \"center\",\n width: \"100%\",\n flexDirection: \"row\",\n height: KEYBOARD_TOOLBAR_HEIGHT,\n paddingHorizontal: 8,\n },\n doneButton: {\n fontWeight: \"600\",\n fontSize: 15,\n },\n doneButtonContainer: {\n marginRight: 8,\n },\n});\n\nexport { colors as DefaultKeyboardToolbarTheme };\nexport default KeyboardToolbar;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["React","useCallback","useEffect","useMemo","useState","StyleSheet","Text","View","FocusedInputEvents","KeyboardController","useColorScheme","KeyboardStickyView","Arrow","Button","colors","TEST_ID_KEYBOARD_TOOLBAR","TEST_ID_KEYBOARD_TOOLBAR_PREVIOUS","TEST_ID_KEYBOARD_TOOLBAR_NEXT","TEST_ID_KEYBOARD_TOOLBAR_CONTENT","TEST_ID_KEYBOARD_TOOLBAR_DONE","KEYBOARD_TOOLBAR_HEIGHT","DEFAULT_OPACITY","KeyboardToolbar","content","theme","doneText","button","icon","showArrows","onNextCallback","onPrevCallback","onDoneCallback","blur","opacity","offset","closed","opened","enabled","rest","colorScheme","inputs","setInputs","current","count","isPrevDisabled","isNextDisabled","subscription","addListener","e","remove","doneStyle","styles","doneButton","color","primary","toolbarStyle","toolbar","backgroundColor","background","ButtonContainer","IconContainer","onPressNext","event","isDefaultPrevented","setFocusTo","onPressPrev","onPressDone","dismiss","createElement","_extends","style","testID","Fragment","accessibilityHint","accessibilityLabel","disabled","onPress","type","flex","rippleRadius","doneButtonContainer","maxFontSizeMultiplier","create","position","bottom","alignItems","width","flexDirection","height","paddingHorizontal","fontWeight","fontSize","marginRight","DefaultKeyboardToolbarTheme"],"sources":["index.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { StyleSheet, Text, View } from \"react-native\";\n\nimport { FocusedInputEvents } from \"../../bindings\";\nimport { KeyboardController } from \"../../module\";\nimport useColorScheme from \"../hooks/useColorScheme\";\nimport KeyboardStickyView from \"../KeyboardStickyView\";\n\nimport Arrow from \"./Arrow\";\nimport Button from \"./Button\";\nimport { colors } from \"./colors\";\n\nimport type { HEX, KeyboardToolbarTheme } from \"./types\";\nimport type { KeyboardStickyViewProps } from \"../KeyboardStickyView\";\nimport type { ReactNode } from \"react\";\nimport type { GestureResponderEvent, ViewProps } from \"react-native\";\n\nexport type KeyboardToolbarProps = Omit<\n ViewProps,\n \"style\" | \"testID\" | \"children\"\n> & {\n /** An element that is shown in the middle of the toolbar. */\n content?: React.JSX.Element | null;\n /** A set of dark/light colors consumed by toolbar component. */\n theme?: KeyboardToolbarTheme;\n /** Custom text for done button. */\n doneText?: ReactNode;\n /** Custom touchable component for toolbar (used for prev/next/done buttons). */\n button?: typeof Button;\n /** Custom icon component used to display next/prev buttons. */\n icon?: typeof Arrow;\n /**\n * Whether to show next and previous buttons. Can be useful to set it to `false` if you have only one input\n * and want to show only `Done` button. Default to `true`.\n */\n showArrows?: boolean;\n /**\n * A callback that is called when the user presses the next button along with the default action.\n */\n onNextCallback?: (event: GestureResponderEvent) => void;\n /**\n * A callback that is called when the user presses the previous button along with the default action.\n */\n onPrevCallback?: (event: GestureResponderEvent) => void;\n /**\n * A callback that is called when the user presses the done button along with the default action.\n */\n onDoneCallback?: (event: GestureResponderEvent) => void;\n /**\n * A component that applies blur effect to the toolbar.\n */\n blur?: React.JSX.Element | null;\n /**\n * A value for container opacity in hexadecimal format (e.g. `ff`). Default value is `ff`.\n */\n opacity?: HEX;\n} & Pick<KeyboardStickyViewProps, \"offset\" | \"enabled\">;\n\nconst TEST_ID_KEYBOARD_TOOLBAR = \"keyboard.toolbar\";\nconst TEST_ID_KEYBOARD_TOOLBAR_PREVIOUS = `${TEST_ID_KEYBOARD_TOOLBAR}.previous`;\nconst TEST_ID_KEYBOARD_TOOLBAR_NEXT = `${TEST_ID_KEYBOARD_TOOLBAR}.next`;\nconst TEST_ID_KEYBOARD_TOOLBAR_CONTENT = `${TEST_ID_KEYBOARD_TOOLBAR}.content`;\nconst TEST_ID_KEYBOARD_TOOLBAR_DONE = `${TEST_ID_KEYBOARD_TOOLBAR}.done`;\n\nconst KEYBOARD_TOOLBAR_HEIGHT = 42;\nconst DEFAULT_OPACITY: HEX = \"FF\";\n\n/**\n * `KeyboardToolbar` is a component that is shown above the keyboard with `Prev`/`Next` and\n * `Done` buttons.\n */\nconst KeyboardToolbar: React.FC<KeyboardToolbarProps> = ({\n content,\n theme = colors,\n doneText,\n button,\n icon,\n showArrows = true,\n onNextCallback,\n onPrevCallback,\n onDoneCallback,\n blur = null,\n opacity = DEFAULT_OPACITY,\n offset: { closed = 0, opened = 0 } = {},\n enabled = true,\n ...rest\n}) => {\n const colorScheme = useColorScheme();\n const [inputs, setInputs] = useState({\n current: 0,\n count: 0,\n });\n const isPrevDisabled = inputs.current === 0;\n const isNextDisabled = inputs.current === inputs.count - 1;\n\n useEffect(() => {\n const subscription = FocusedInputEvents.addListener(\"focusDidSet\", (e) => {\n setInputs(e);\n });\n\n return subscription.remove;\n }, []);\n const doneStyle = useMemo(\n () => [styles.doneButton, { color: theme[colorScheme].primary }],\n [colorScheme, theme],\n );\n const toolbarStyle = useMemo(\n () => [\n styles.toolbar,\n {\n backgroundColor: `${theme[colorScheme].background}${opacity}`,\n },\n ],\n [colorScheme, opacity, theme],\n );\n const offset = useMemo(\n () => ({ closed: closed + KEYBOARD_TOOLBAR_HEIGHT, opened }),\n [closed, opened],\n );\n const ButtonContainer = button || Button;\n const IconContainer = icon || Arrow;\n\n const onPressNext = useCallback(\n (event: GestureResponderEvent) => {\n onNextCallback?.(event);\n\n if (!event.isDefaultPrevented()) {\n KeyboardController.setFocusTo(\"next\");\n }\n },\n [onNextCallback],\n );\n const onPressPrev = useCallback(\n (event: GestureResponderEvent) => {\n onPrevCallback?.(event);\n\n if (!event.isDefaultPrevented()) {\n KeyboardController.setFocusTo(\"prev\");\n }\n },\n [onPrevCallback],\n );\n const onPressDone = useCallback(\n (event: GestureResponderEvent) => {\n onDoneCallback?.(event);\n\n if (!event.isDefaultPrevented()) {\n KeyboardController.dismiss();\n }\n },\n [onDoneCallback],\n );\n\n return (\n <KeyboardStickyView enabled={enabled} offset={offset}>\n <View {...rest} style={toolbarStyle} testID={TEST_ID_KEYBOARD_TOOLBAR}>\n {blur}\n {showArrows && (\n <>\n <ButtonContainer\n accessibilityHint=\"Moves focus to the previous field\"\n accessibilityLabel=\"Previous\"\n disabled={isPrevDisabled}\n testID={TEST_ID_KEYBOARD_TOOLBAR_PREVIOUS}\n theme={theme}\n onPress={onPressPrev}\n >\n <IconContainer\n disabled={isPrevDisabled}\n theme={theme}\n type=\"prev\"\n />\n </ButtonContainer>\n <ButtonContainer\n accessibilityHint=\"Moves focus to the next field\"\n accessibilityLabel=\"Next\"\n disabled={isNextDisabled}\n testID={TEST_ID_KEYBOARD_TOOLBAR_NEXT}\n theme={theme}\n onPress={onPressNext}\n >\n <IconContainer\n disabled={isNextDisabled}\n theme={theme}\n type=\"next\"\n />\n </ButtonContainer>\n </>\n )}\n\n <View style={styles.flex} testID={TEST_ID_KEYBOARD_TOOLBAR_CONTENT}>\n {content}\n </View>\n <ButtonContainer\n accessibilityHint=\"Closes the keyboard\"\n accessibilityLabel=\"Done\"\n rippleRadius={28}\n style={styles.doneButtonContainer}\n testID={TEST_ID_KEYBOARD_TOOLBAR_DONE}\n theme={theme}\n onPress={onPressDone}\n >\n <Text maxFontSizeMultiplier={1.3} style={doneStyle}>\n {doneText || \"Done\"}\n </Text>\n </ButtonContainer>\n </View>\n </KeyboardStickyView>\n );\n};\n\nconst styles = StyleSheet.create({\n flex: {\n flex: 1,\n },\n toolbar: {\n position: \"absolute\",\n bottom: 0,\n alignItems: \"center\",\n width: \"100%\",\n flexDirection: \"row\",\n height: KEYBOARD_TOOLBAR_HEIGHT,\n paddingHorizontal: 8,\n },\n doneButton: {\n fontWeight: \"600\",\n fontSize: 15,\n },\n doneButtonContainer: {\n marginRight: 8,\n },\n});\n\nexport { colors as DefaultKeyboardToolbarTheme };\nexport default KeyboardToolbar;\n"],"mappings":"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","ignoreList":[]}
|
package/lib/module/constants.js
CHANGED
|
@@ -12,6 +12,8 @@ export let AndroidSoftInputModes = /*#__PURE__*/function (AndroidSoftInputModes)
|
|
|
12
12
|
AndroidSoftInputModes[AndroidSoftInputModes["SOFT_INPUT_STATE_ALWAYS_VISIBLE"] = 5] = "SOFT_INPUT_STATE_ALWAYS_VISIBLE";
|
|
13
13
|
AndroidSoftInputModes[AndroidSoftInputModes["SOFT_INPUT_STATE_HIDDEN"] = 2] = "SOFT_INPUT_STATE_HIDDEN";
|
|
14
14
|
AndroidSoftInputModes[AndroidSoftInputModes["SOFT_INPUT_STATE_UNCHANGED"] = 1] = "SOFT_INPUT_STATE_UNCHANGED";
|
|
15
|
+
// temporarily disable this rule to avoid breaking changes.
|
|
16
|
+
// eslint-disable-next-line @typescript-eslint/no-duplicate-enum-values
|
|
15
17
|
AndroidSoftInputModes[AndroidSoftInputModes["SOFT_INPUT_STATE_UNSPECIFIED"] = 0] = "SOFT_INPUT_STATE_UNSPECIFIED";
|
|
16
18
|
AndroidSoftInputModes[AndroidSoftInputModes["SOFT_INPUT_STATE_VISIBLE"] = 4] = "SOFT_INPUT_STATE_VISIBLE";
|
|
17
19
|
return AndroidSoftInputModes;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["AndroidSoftInputModes"],"sources":["constants.ts"],"sourcesContent":["// copied from `android.view.WindowManager.LayoutParams`\nexport enum AndroidSoftInputModes {\n SOFT_INPUT_ADJUST_NOTHING = 48,\n SOFT_INPUT_ADJUST_PAN = 32,\n SOFT_INPUT_ADJUST_RESIZE = 16,\n SOFT_INPUT_ADJUST_UNSPECIFIED = 0,\n SOFT_INPUT_IS_FORWARD_NAVIGATION = 256,\n SOFT_INPUT_MASK_ADJUST = 240,\n SOFT_INPUT_MASK_STATE = 15,\n SOFT_INPUT_MODE_CHANGED = 512,\n SOFT_INPUT_STATE_ALWAYS_HIDDEN = 3,\n SOFT_INPUT_STATE_ALWAYS_VISIBLE = 5,\n SOFT_INPUT_STATE_HIDDEN = 2,\n SOFT_INPUT_STATE_UNCHANGED = 1,\n // temporarily disable this rule to avoid breaking changes.\n // eslint-disable-next-line @typescript-eslint/no-duplicate-enum-values\n SOFT_INPUT_STATE_UNSPECIFIED = 0,\n SOFT_INPUT_STATE_VISIBLE = 4,\n}\n"],"mappings":"AAAA;AACA,WAAYA,qBAAqB,0BAArBA,qBAAqB;EAArBA,qBAAqB,CAArBA,qBAAqB;EAArBA,qBAAqB,CAArBA,qBAAqB;EAArBA,qBAAqB,CAArBA,qBAAqB;EAArBA,qBAAqB,CAArBA,qBAAqB;EAArBA,qBAAqB,CAArBA,qBAAqB;EAArBA,qBAAqB,CAArBA,qBAAqB;EAArBA,qBAAqB,CAArBA,qBAAqB;EAArBA,qBAAqB,CAArBA,qBAAqB;EAArBA,qBAAqB,CAArBA,qBAAqB;EAArBA,qBAAqB,CAArBA,qBAAqB;EAArBA,qBAAqB,CAArBA,qBAAqB;EAArBA,qBAAqB,CAArBA,qBAAqB;
|
|
1
|
+
{"version":3,"names":["AndroidSoftInputModes"],"sources":["constants.ts"],"sourcesContent":["// copied from `android.view.WindowManager.LayoutParams`\nexport enum AndroidSoftInputModes {\n SOFT_INPUT_ADJUST_NOTHING = 48,\n SOFT_INPUT_ADJUST_PAN = 32,\n SOFT_INPUT_ADJUST_RESIZE = 16,\n SOFT_INPUT_ADJUST_UNSPECIFIED = 0,\n SOFT_INPUT_IS_FORWARD_NAVIGATION = 256,\n SOFT_INPUT_MASK_ADJUST = 240,\n SOFT_INPUT_MASK_STATE = 15,\n SOFT_INPUT_MODE_CHANGED = 512,\n SOFT_INPUT_STATE_ALWAYS_HIDDEN = 3,\n SOFT_INPUT_STATE_ALWAYS_VISIBLE = 5,\n SOFT_INPUT_STATE_HIDDEN = 2,\n SOFT_INPUT_STATE_UNCHANGED = 1,\n // temporarily disable this rule to avoid breaking changes.\n // eslint-disable-next-line @typescript-eslint/no-duplicate-enum-values\n SOFT_INPUT_STATE_UNSPECIFIED = 0,\n SOFT_INPUT_STATE_VISIBLE = 4,\n}\n"],"mappings":"AAAA;AACA,WAAYA,qBAAqB,0BAArBA,qBAAqB;EAArBA,qBAAqB,CAArBA,qBAAqB;EAArBA,qBAAqB,CAArBA,qBAAqB;EAArBA,qBAAqB,CAArBA,qBAAqB;EAArBA,qBAAqB,CAArBA,qBAAqB;EAArBA,qBAAqB,CAArBA,qBAAqB;EAArBA,qBAAqB,CAArBA,qBAAqB;EAArBA,qBAAqB,CAArBA,qBAAqB;EAArBA,qBAAqB,CAArBA,qBAAqB;EAArBA,qBAAqB,CAArBA,qBAAqB;EAArBA,qBAAqB,CAArBA,qBAAqB;EAArBA,qBAAqB,CAArBA,qBAAqB;EAArBA,qBAAqB,CAArBA,qBAAqB;EAa/B;EACA;EAdUA,qBAAqB,CAArBA,qBAAqB;EAArBA,qBAAqB,CAArBA,qBAAqB;EAAA,OAArBA,qBAAqB;AAAA","ignoreList":[]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import React, { useMemo } from "react";
|
|
2
2
|
import { Platform, StyleSheet, View } from "react-native";
|
|
3
|
+
import { IS_FABRIC } from "../../architecture";
|
|
3
4
|
import { RCTOverKeyboardView } from "../../bindings";
|
|
4
5
|
import { useWindowDimensions } from "../../hooks";
|
|
5
6
|
const OverKeyboardView = ({
|
|
@@ -17,8 +18,7 @@ const OverKeyboardView = ({
|
|
|
17
18
|
const style = useMemo(() => [styles.absolute,
|
|
18
19
|
// On iOS - stretch view to full window dimensions to make yoga work
|
|
19
20
|
// On Android Fabric we temporarily use the same approach
|
|
20
|
-
|
|
21
|
-
Platform.OS === "ios" || global._IS_FABRIC ? inner : undefined], [inner]);
|
|
21
|
+
Platform.OS === "ios" || IS_FABRIC ? inner : undefined], [inner]);
|
|
22
22
|
return /*#__PURE__*/React.createElement(RCTOverKeyboardView, {
|
|
23
23
|
visible: visible
|
|
24
24
|
}, /*#__PURE__*/React.createElement(View, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useMemo","Platform","StyleSheet","View","RCTOverKeyboardView","useWindowDimensions","OverKeyboardView","children","visible","height","width","inner","style","styles","absolute","OS","
|
|
1
|
+
{"version":3,"names":["React","useMemo","Platform","StyleSheet","View","IS_FABRIC","RCTOverKeyboardView","useWindowDimensions","OverKeyboardView","children","visible","height","width","inner","style","styles","absolute","OS","undefined","createElement","collapsable","create","position"],"sources":["index.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\nimport { Platform, StyleSheet, View } from \"react-native\";\n\nimport { IS_FABRIC } from \"../../architecture\";\nimport { RCTOverKeyboardView } from \"../../bindings\";\nimport { useWindowDimensions } from \"../../hooks\";\n\nimport type { OverKeyboardViewProps } from \"../../types\";\nimport type { PropsWithChildren } from \"react\";\n\nconst OverKeyboardView = ({\n children,\n visible,\n}: PropsWithChildren<OverKeyboardViewProps>) => {\n const { height, width } = useWindowDimensions();\n const inner = useMemo(() => ({ height, width }), [height, width]);\n const style = useMemo(\n () => [\n styles.absolute,\n // On iOS - stretch view to full window dimensions to make yoga work\n // On Android Fabric we temporarily use the same approach\n Platform.OS === \"ios\" || IS_FABRIC ? inner : undefined,\n ],\n [inner],\n );\n\n return (\n <RCTOverKeyboardView visible={visible}>\n {/* `OverKeyboardView` should always have a single child */}\n <View collapsable={false} style={style}>\n {children}\n </View>\n </RCTOverKeyboardView>\n );\n};\n\nconst styles = StyleSheet.create({\n absolute: {\n position: \"absolute\",\n },\n});\n\nexport default OverKeyboardView;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,OAAO,QAAQ,OAAO;AACtC,SAASC,QAAQ,EAAEC,UAAU,EAAEC,IAAI,QAAQ,cAAc;AAEzD,SAASC,SAAS,QAAQ,oBAAoB;AAC9C,SAASC,mBAAmB,QAAQ,gBAAgB;AACpD,SAASC,mBAAmB,QAAQ,aAAa;AAKjD,MAAMC,gBAAgB,GAAGA,CAAC;EACxBC,QAAQ;EACRC;AACwC,CAAC,KAAK;EAC9C,MAAM;IAAEC,MAAM;IAAEC;EAAM,CAAC,GAAGL,mBAAmB,CAAC,CAAC;EAC/C,MAAMM,KAAK,GAAGZ,OAAO,CAAC,OAAO;IAAEU,MAAM;IAAEC;EAAM,CAAC,CAAC,EAAE,CAACD,MAAM,EAAEC,KAAK,CAAC,CAAC;EACjE,MAAME,KAAK,GAAGb,OAAO,CACnB,MAAM,CACJc,MAAM,CAACC,QAAQ;EACf;EACA;EACAd,QAAQ,CAACe,EAAE,KAAK,KAAK,IAAIZ,SAAS,GAAGQ,KAAK,GAAGK,SAAS,CACvD,EACD,CAACL,KAAK,CACR,CAAC;EAED,oBACEb,KAAA,CAAAmB,aAAA,CAACb,mBAAmB;IAACI,OAAO,EAAEA;EAAQ,gBAEpCV,KAAA,CAAAmB,aAAA,CAACf,IAAI;IAACgB,WAAW,EAAE,KAAM;IAACN,KAAK,EAAEA;EAAM,GACpCL,QACG,CACa,CAAC;AAE1B,CAAC;AAED,MAAMM,MAAM,GAAGZ,UAAU,CAACkB,MAAM,CAAC;EAC/BL,QAAQ,EAAE;IACRM,QAAQ,EAAE;EACZ;AACF,CAAC,CAAC;AAEF,eAAed,gBAAgB","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const IS_FABRIC: boolean;
|
|
@@ -8,7 +8,7 @@ import type { ReactNode } from "react";
|
|
|
8
8
|
import type { GestureResponderEvent, ViewProps } from "react-native";
|
|
9
9
|
export type KeyboardToolbarProps = Omit<ViewProps, "style" | "testID" | "children"> & {
|
|
10
10
|
/** An element that is shown in the middle of the toolbar. */
|
|
11
|
-
content?: JSX.Element | null;
|
|
11
|
+
content?: React.JSX.Element | null;
|
|
12
12
|
/** A set of dark/light colors consumed by toolbar component. */
|
|
13
13
|
theme?: KeyboardToolbarTheme;
|
|
14
14
|
/** Custom text for done button. */
|
|
@@ -37,7 +37,7 @@ export type KeyboardToolbarProps = Omit<ViewProps, "style" | "testID" | "childre
|
|
|
37
37
|
/**
|
|
38
38
|
* A component that applies blur effect to the toolbar.
|
|
39
39
|
*/
|
|
40
|
-
blur?: JSX.Element | null;
|
|
40
|
+
blur?: React.JSX.Element | null;
|
|
41
41
|
/**
|
|
42
42
|
* A value for container opacity in hexadecimal format (e.g. `ff`). Default value is `ff`.
|
|
43
43
|
*/
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-keyboard-controller",
|
|
3
|
-
"version": "1.16.
|
|
3
|
+
"version": "1.16.6",
|
|
4
4
|
"description": "Keyboard manager which works in identical way on both iOS and Android",
|
|
5
5
|
"main": "lib/commonjs/index",
|
|
6
6
|
"module": "lib/module/index",
|
|
@@ -80,12 +80,13 @@
|
|
|
80
80
|
},
|
|
81
81
|
"devDependencies": {
|
|
82
82
|
"@commitlint/config-conventional": "^11.0.0",
|
|
83
|
-
"@react-native/babel-preset": "0.
|
|
84
|
-
"@react-native/eslint-config": "0.
|
|
83
|
+
"@react-native/babel-preset": "0.78.0",
|
|
84
|
+
"@react-native/eslint-config": "0.78.0",
|
|
85
85
|
"@release-it/conventional-changelog": "^2.0.0",
|
|
86
86
|
"@testing-library/react-hooks": "^8.0.1",
|
|
87
87
|
"@types/jest": "^29.5.13",
|
|
88
|
-
"@types/react": "^
|
|
88
|
+
"@types/react": "^19.0.0",
|
|
89
|
+
"@types/react-test-renderer": "^19.0.0",
|
|
89
90
|
"@typescript-eslint/eslint-plugin": "^6.7.4",
|
|
90
91
|
"@typescript-eslint/parser": "^6.7.4",
|
|
91
92
|
"clang-format": "^1.8.0",
|
|
@@ -98,17 +99,17 @@
|
|
|
98
99
|
"eslint-plugin-import": "^2.28.1",
|
|
99
100
|
"eslint-plugin-jest": "^26.5.3",
|
|
100
101
|
"eslint-plugin-prettier": "^4.2.1",
|
|
101
|
-
"eslint-plugin-react-compiler": "
|
|
102
|
+
"eslint-plugin-react-compiler": "0.0.0-experimental-9ed098e-20240725",
|
|
102
103
|
"eslint-plugin-react-perf": "^3.3.2",
|
|
103
104
|
"husky": "^6.0.0",
|
|
104
105
|
"jest": "^29.6.3",
|
|
105
106
|
"pod-install": "^0.1.0",
|
|
106
107
|
"prettier": "^2.8.8",
|
|
107
|
-
"react": "
|
|
108
|
-
"react-native": "0.
|
|
108
|
+
"react": "19.0.0",
|
|
109
|
+
"react-native": "0.78.0",
|
|
109
110
|
"react-native-builder-bob": "^0.18.0",
|
|
110
|
-
"react-native-reanimated": "3.
|
|
111
|
-
"react-test-renderer": "
|
|
111
|
+
"react-native-reanimated": "3.17.0",
|
|
112
|
+
"react-test-renderer": "19.0.0",
|
|
112
113
|
"release-it": "^14.2.2",
|
|
113
114
|
"typescript": "5.6.3"
|
|
114
115
|
},
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const IS_FABRIC = "nativeFabricUIManager" in global;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useLayoutEffect } from "react";
|
|
2
2
|
import { Platform } from "react-native";
|
|
3
3
|
import { useSharedValue } from "react-native-reanimated";
|
|
4
4
|
|
|
@@ -10,14 +10,21 @@ const OS = Platform.OS;
|
|
|
10
10
|
export const useKeyboardAnimation = () => {
|
|
11
11
|
const { reanimated } = useKeyboardContext();
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
const
|
|
15
|
-
const
|
|
13
|
+
const heightWhenOpened = useSharedValue(0);
|
|
14
|
+
const height = useSharedValue(0);
|
|
15
|
+
const progress = useSharedValue(0);
|
|
16
|
+
const isClosed = useSharedValue(true);
|
|
16
17
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
useLayoutEffect(() => {
|
|
19
|
+
const initialHeight = -reanimated.height.value;
|
|
20
|
+
const initialProgress = reanimated.progress.value;
|
|
21
|
+
|
|
22
|
+
// eslint-disable-next-line react-compiler/react-compiler
|
|
23
|
+
heightWhenOpened.value = initialHeight;
|
|
24
|
+
height.value = initialHeight;
|
|
25
|
+
progress.value = initialProgress;
|
|
26
|
+
isClosed.value = initialProgress === 0;
|
|
27
|
+
}, []);
|
|
21
28
|
|
|
22
29
|
useKeyboardHandler(
|
|
23
30
|
{
|
|
@@ -25,7 +32,6 @@ export const useKeyboardAnimation = () => {
|
|
|
25
32
|
"worklet";
|
|
26
33
|
|
|
27
34
|
if (e.height > 0) {
|
|
28
|
-
// eslint-disable-next-line react-compiler/react-compiler
|
|
29
35
|
isClosed.value = false;
|
|
30
36
|
heightWhenOpened.value = e.height;
|
|
31
37
|
}
|
|
@@ -59,19 +65,20 @@ export const useKeyboardAnimation = () => {
|
|
|
59
65
|
export const useTranslateAnimation = () => {
|
|
60
66
|
const { reanimated } = useKeyboardContext();
|
|
61
67
|
|
|
62
|
-
|
|
63
|
-
const [initialProgress] = useState(() => reanimated.progress.value);
|
|
64
|
-
|
|
65
|
-
const padding = useSharedValue(initialProgress);
|
|
68
|
+
const padding = useSharedValue(0);
|
|
66
69
|
const translate = useSharedValue(0);
|
|
67
70
|
|
|
71
|
+
useLayoutEffect(() => {
|
|
72
|
+
// eslint-disable-next-line react-compiler/react-compiler
|
|
73
|
+
padding.value = reanimated.progress.value;
|
|
74
|
+
}, []);
|
|
75
|
+
|
|
68
76
|
useKeyboardHandler(
|
|
69
77
|
{
|
|
70
78
|
onStart: (e) => {
|
|
71
79
|
"worklet";
|
|
72
80
|
|
|
73
81
|
if (e.height === 0) {
|
|
74
|
-
// eslint-disable-next-line react-compiler/react-compiler
|
|
75
82
|
padding.value = 0;
|
|
76
83
|
}
|
|
77
84
|
if (OS === "ios") {
|
|
@@ -20,7 +20,7 @@ export type KeyboardToolbarProps = Omit<
|
|
|
20
20
|
"style" | "testID" | "children"
|
|
21
21
|
> & {
|
|
22
22
|
/** An element that is shown in the middle of the toolbar. */
|
|
23
|
-
content?: JSX.Element | null;
|
|
23
|
+
content?: React.JSX.Element | null;
|
|
24
24
|
/** A set of dark/light colors consumed by toolbar component. */
|
|
25
25
|
theme?: KeyboardToolbarTheme;
|
|
26
26
|
/** Custom text for done button. */
|
|
@@ -49,7 +49,7 @@ export type KeyboardToolbarProps = Omit<
|
|
|
49
49
|
/**
|
|
50
50
|
* A component that applies blur effect to the toolbar.
|
|
51
51
|
*/
|
|
52
|
-
blur?: JSX.Element | null;
|
|
52
|
+
blur?: React.JSX.Element | null;
|
|
53
53
|
/**
|
|
54
54
|
* A value for container opacity in hexadecimal format (e.g. `ff`). Default value is `ff`.
|
|
55
55
|
*/
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import React, { useMemo } from "react";
|
|
2
2
|
import { Platform, StyleSheet, View } from "react-native";
|
|
3
3
|
|
|
4
|
+
import { IS_FABRIC } from "../../architecture";
|
|
4
5
|
import { RCTOverKeyboardView } from "../../bindings";
|
|
5
6
|
import { useWindowDimensions } from "../../hooks";
|
|
6
7
|
|
|
@@ -18,8 +19,7 @@ const OverKeyboardView = ({
|
|
|
18
19
|
styles.absolute,
|
|
19
20
|
// On iOS - stretch view to full window dimensions to make yoga work
|
|
20
21
|
// On Android Fabric we temporarily use the same approach
|
|
21
|
-
|
|
22
|
-
Platform.OS === "ios" || global._IS_FABRIC ? inner : undefined,
|
|
22
|
+
Platform.OS === "ios" || IS_FABRIC ? inner : undefined,
|
|
23
23
|
],
|
|
24
24
|
[inner],
|
|
25
25
|
);
|