react-native-controlled-input 0.20.0 → 0.22.0

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.
@@ -2,7 +2,6 @@ package com.controlledinput
2
2
 
3
3
  import android.content.Context
4
4
  import android.util.AttributeSet
5
- import android.util.Log
6
5
  import android.util.TypedValue
7
6
  import android.view.View
8
7
  import android.view.inputmethod.InputMethodManager
@@ -32,14 +31,8 @@ import kotlinx.coroutines.flow.MutableStateFlow
32
31
  /**
33
32
  * - [shouldUseAndroidLayout]: requestLayout posts measureAndLayout
34
33
  * - onMeasure skips child [ComposeView] until attached (window + WindowRecomposer)
35
- *
36
- * @see expo.modules.kotlin.views.ExpoComposeView
37
- * @see expo.modules.kotlin.views.ExpoView
38
34
  */
39
35
  class ControlledInputView : LinearLayout, LifecycleOwner {
40
- companion object {
41
- private const val TAG = "ControlledInputView"
42
- }
43
36
  constructor(context: Context) : super(context) {
44
37
  configureComponent(context)
45
38
  }
@@ -67,8 +60,9 @@ class ControlledInputView : LinearLayout, LifecycleOwner {
67
60
  private var windowLifecycleBound = false
68
61
 
69
62
  /**
70
- * Hidden [EditText] used only as KBC's [FocusedInputObserver.lastFocusedInput]: [syncUpLayout]
71
- * reads [EditText]-scoped geometry. It is NOT focused and does not participate in the focus
63
+ * Hidden [EditText] used only as [FocusedInputObserver.lastFocusedInput] from
64
+ * https://github.com/kirillzyusko/react-native-keyboard-controller; [syncUpLayout] reads
65
+ * [EditText]-scoped geometry. It is NOT focused and does not participate in the focus
72
66
  * chain — we push state via reflection + synthetic selection events instead.
73
67
  */
74
68
  private val kbcLayoutHost: EditText by lazy {
@@ -85,8 +79,9 @@ class ControlledInputView : LinearLayout, LifecycleOwner {
85
79
  }
86
80
 
87
81
  /**
88
- * EdgeToEdgeViewRegistry → KeyboardAnimationCallback + FocusedInputObserver.
89
- * Null if react-native-keyboard-controller is missing or not initialized.
82
+ * EdgeToEdgeViewRegistry → KeyboardAnimationCallback + FocusedInputObserver
83
+ * (https://github.com/kirillzyusko/react-native-keyboard-controller).
84
+ * Null if that library is missing or not initialized.
90
85
  */
91
86
  private fun resolveKbcCallbackAndObserver(): Pair<Any, Any>? {
92
87
  try {
@@ -94,49 +89,25 @@ class ControlledInputView : LinearLayout, LifecycleOwner {
94
89
  Class.forName("com.reactnativekeyboardcontroller.views.EdgeToEdgeViewRegistry")
95
90
  val registryInstance = registryClass.getField("INSTANCE").get(null)
96
91
  val edgeToEdgeView =
97
- registryClass.getDeclaredMethod("get").invoke(registryInstance)
98
- ?: run {
99
- Log.w(TAG, "resolveKbcCallbackAndObserver: EdgeToEdgeViewRegistry.get() == null")
100
- return null
101
- }
92
+ registryClass.getDeclaredMethod("get").invoke(registryInstance) ?: return null
102
93
 
103
94
  val callbackField =
104
95
  edgeToEdgeView.javaClass.declaredFields.firstOrNull {
105
96
  it.type.simpleName == "KeyboardAnimationCallback"
106
- }
107
- ?: run {
108
- Log.w(TAG, "resolveKbcCallbackAndObserver: KeyboardAnimationCallback field not found")
109
- return null
110
- }
97
+ } ?: return null
111
98
  callbackField.isAccessible = true
112
- val callback =
113
- callbackField.get(edgeToEdgeView)
114
- ?: run {
115
- Log.w(TAG, "resolveKbcCallbackAndObserver: callback == null")
116
- return null
117
- }
99
+ val callback = callbackField.get(edgeToEdgeView) ?: return null
118
100
 
119
101
  val observerField =
120
102
  callback.javaClass.declaredFields.firstOrNull {
121
103
  it.type.simpleName == "FocusedInputObserver"
122
- }
123
- ?: run {
124
- Log.w(TAG, "resolveKbcCallbackAndObserver: FocusedInputObserver field not found")
125
- return null
126
- }
104
+ } ?: return null
127
105
  observerField.isAccessible = true
128
- val observer =
129
- observerField.get(callback)
130
- ?: run {
131
- Log.w(TAG, "resolveKbcCallbackAndObserver: layoutObserver == null")
132
- return null
133
- }
106
+ val observer = observerField.get(callback) ?: return null
134
107
  return Pair(callback, observer)
135
108
  } catch (_: ClassNotFoundException) {
136
- Log.d(TAG, "resolveKbcCallbackAndObserver: keyboard-controller not on classpath")
137
109
  return null
138
- } catch (e: Exception) {
139
- Log.w(TAG, "resolveKbcCallbackAndObserver: ${e.javaClass.simpleName}: ${e.message}")
110
+ } catch (_: Exception) {
140
111
  return null
141
112
  }
142
113
  }
@@ -146,9 +117,7 @@ class ControlledInputView : LinearLayout, LifecycleOwner {
146
117
  val f = callback.javaClass.getDeclaredField("viewTagFocused")
147
118
  f.isAccessible = true
148
119
  f.setInt(callback, id)
149
- Log.d(TAG, "setKbcViewTagFocused: viewTagFocused=$id")
150
- } catch (e: Exception) {
151
- Log.w(TAG, "setKbcViewTagFocused: ${e.javaClass.simpleName}: ${e.message}")
120
+ } catch (_: Exception) {
152
121
  }
153
122
  }
154
123
 
@@ -160,16 +129,22 @@ class ControlledInputView : LinearLayout, LifecycleOwner {
160
129
  holderClass
161
130
  .getMethod("set", EditText::class.java)
162
131
  .invoke(instance, kbcLayoutHost)
163
- } catch (e: Exception) {
164
- Log.w(TAG, "setKbcFocusedInputHolder: ${e.javaClass.simpleName}: ${e.message}")
132
+ } catch (_: Exception) {
165
133
  }
166
134
  }
167
135
 
168
- /** Approximate one line height in dp for JS customHeight. */
136
+ /**
137
+ * `selection.end.y` for https://github.com/kirillzyusko/react-native-keyboard-controller / JS
138
+ * customHeight: prefer explicit style height (dp, same as padding in [InputStyle]), else measured
139
+ * view height in dp.
140
+ */
169
141
  private fun approximateSelectionEndYDp(): Double {
170
- viewModel.inputStyle.value?.fontSize?.toDouble()?.takeIf { it > 0 }?.let { return it }
142
+ viewModel.inputStyle.value?.height?.takeIf { it > 0 }?.let { return it }
171
143
  val dm = resources.displayMetrics
172
- return (kbcLayoutHost.textSize / dm.density).toDouble().coerceAtLeast(12.0)
144
+ if (height > 0) {
145
+ return (height / dm.density).toDouble()
146
+ }
147
+ return 12.0
173
148
  }
174
149
 
175
150
  private fun dispatchSyntheticKbcSelectionEvent(observer: Any) {
@@ -186,11 +161,7 @@ class ControlledInputView : LinearLayout, LifecycleOwner {
186
161
  val dataClz =
187
162
  Class.forName("com.reactnativekeyboardcontroller.events.FocusedInputSelectionChangedEventData")
188
163
  val dataCtor =
189
- dataClz.declaredConstructors.singleOrNull { it.parameterTypes.size == 7 }
190
- ?: run {
191
- Log.w(TAG, "dispatchSyntheticKbcSelectionEvent: no 7-arg data ctor")
192
- return
193
- }
164
+ dataClz.declaredConstructors.singleOrNull { it.parameterTypes.size == 7 } ?: return
194
165
  dataCtor.isAccessible = true
195
166
  val data =
196
167
  dataCtor.newInstance(targetId, 0.0, 0.0, 0.0, endY, 0, 0)
@@ -207,21 +178,16 @@ class ControlledInputView : LinearLayout, LifecycleOwner {
207
178
 
208
179
  UIManagerHelper.getEventDispatcherForReactTag(reactContext, propagationId)
209
180
  ?.dispatchEvent(event)
210
- Log.d(
211
- TAG,
212
- "dispatchSyntheticKbcSelectionEvent: propagationId=$propagationId target=$targetId endY(dp)=$endY",
213
- )
214
- } catch (e: Exception) {
215
- Log.w(TAG, "dispatchSyntheticKbcSelectionEvent: ${e.javaClass.simpleName}: ${e.message}")
181
+ } catch (_: Exception) {
216
182
  }
217
183
  }
218
184
 
219
185
  /**
220
- * Pushes ControlledInput state into KBC without stealing Compose focus:
221
- * viewTagFocused, lastFocusedInput, FocusedInputHolder, syncUpLayout, synthetic selection.
186
+ * Pushes ControlledInput state into https://github.com/kirillzyusko/react-native-keyboard-controller
187
+ * without stealing Compose focus: viewTagFocused, lastFocusedInput, FocusedInputHolder,
188
+ * syncUpLayout, synthetic selection.
222
189
  */
223
190
  private fun syncKeyboardControllerFocusedInput() {
224
- Log.d(TAG, "syncKeyboardControllerFocusedInput: id=$id")
225
191
  kbcLayoutHost.id = id
226
192
  viewModel.inputStyle.value?.fontSize?.toFloat()?.let {
227
193
  kbcLayoutHost.setTextSize(TypedValue.COMPLEX_UNIT_SP, it)
@@ -240,11 +206,9 @@ class ControlledInputView : LinearLayout, LifecycleOwner {
240
206
  val syncMethod = observer.javaClass.getDeclaredMethod("syncUpLayout")
241
207
  syncMethod.isAccessible = true
242
208
  syncMethod.invoke(observer)
243
- Log.d(TAG, "syncKeyboardControllerFocusedInput: syncUpLayout() ok")
244
209
 
245
210
  dispatchSyntheticKbcSelectionEvent(observer)
246
- } catch (e: Exception) {
247
- Log.w(TAG, "syncKeyboardControllerFocusedInput: ${e.javaClass.simpleName}: ${e.message}")
211
+ } catch (_: Exception) {
248
212
  }
249
213
  }
250
214
 
@@ -253,11 +217,6 @@ class ControlledInputView : LinearLayout, LifecycleOwner {
253
217
  override fun onLayout(changed: Boolean, l: Int, t: Int, r: Int, b: Int) {
254
218
  super.onLayout(changed, l, t, r, b)
255
219
  kbcLayoutHost.layout(0, 0, width, height)
256
- if (changed) {
257
- val loc = IntArray(2)
258
- getLocationOnScreen(loc)
259
- Log.d(TAG, "onLayout: view=${width}x${height} screenX=${loc[0]} screenY=${loc[1]}")
260
- }
261
220
  }
262
221
 
263
222
  override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
@@ -289,12 +248,10 @@ class ControlledInputView : LinearLayout, LifecycleOwner {
289
248
 
290
249
  override fun onAttachedToWindow() {
291
250
  super.onAttachedToWindow()
292
- Log.d(TAG, "onAttachedToWindow: id=$id")
293
251
  bindComposeToWindowLifecycle()
294
252
  }
295
253
 
296
254
  override fun onDetachedFromWindow() {
297
- Log.d(TAG, "onDetachedFromWindow: id=$id")
298
255
  if (usesLocalFallbackLifecycle) {
299
256
  lifecycleRegistry.currentState = Lifecycle.State.CREATED
300
257
  }
@@ -339,7 +296,6 @@ class ControlledInputView : LinearLayout, LifecycleOwner {
339
296
  }
340
297
 
341
298
  fun blur() {
342
- Log.d(TAG, "blur() called from JS ref")
343
299
  blurSignal.value = blurSignal.value + 1
344
300
  val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
345
301
  imm.hideSoftInputFromWindow(windowToken, 0)
@@ -347,7 +303,6 @@ class ControlledInputView : LinearLayout, LifecycleOwner {
347
303
  }
348
304
 
349
305
  fun focus() {
350
- Log.d(TAG, "focus() called from JS ref")
351
306
  focusSignal.value = focusSignal.value + 1
352
307
  }
353
308
 
@@ -415,7 +370,6 @@ class ControlledInputView : LinearLayout, LifecycleOwner {
415
370
  )
416
371
  },
417
372
  onFocus = {
418
- Log.d(TAG, "Compose onFocus id=$id")
419
373
  val surfaceId = UIManagerHelper.getSurfaceId(context)
420
374
  val viewId = this@ControlledInputView.id
421
375
  UIManagerHelper
@@ -424,7 +378,6 @@ class ControlledInputView : LinearLayout, LifecycleOwner {
424
378
  post { syncKeyboardControllerFocusedInput() }
425
379
  },
426
380
  onBlur = {
427
- Log.d(TAG, "Compose onBlur id=$id")
428
381
  val surfaceId = UIManagerHelper.getSurfaceId(context)
429
382
  val viewId = this@ControlledInputView.id
430
383
  UIManagerHelper
@@ -81,6 +81,7 @@ class ControlledInputViewManager : SimpleViewManager<ControlledInputView>(),
81
81
  InputStyle(
82
82
  color = if (inputStyle.hasKey("color")) inputStyle.getString("color") else null,
83
83
  fontSize = if (inputStyle.hasKey("fontSize")) inputStyle.getDouble("fontSize") else null,
84
+ height = if (inputStyle.hasKey("height")) inputStyle.getDouble("height") else null,
84
85
  fontFamily = if (inputStyle.hasKey("fontFamily")) inputStyle.getString("fontFamily") else null,
85
86
  paddingTop = if (inputStyle.hasKey("paddingTop")) inputStyle.getDouble("paddingTop") else null,
86
87
  paddingBottom = if (inputStyle.hasKey("paddingBottom")) inputStyle.getDouble("paddingBottom") else null,
@@ -51,6 +51,7 @@ import kotlinx.coroutines.flow.StateFlow
51
51
  data class InputStyle(
52
52
  val color: String? = null,
53
53
  val fontSize: Double? = null,
54
+ val height: Double? = null,
54
55
  val fontFamily: String? = null,
55
56
  val paddingTop: Double? = null,
56
57
  val paddingBottom: Double? = null,
@@ -25,6 +25,7 @@ export interface BlurEvent {
25
25
  export interface InputStyle {
26
26
  color?: ColorValue;
27
27
  fontSize?: Double;
28
+ height?: Double;
28
29
  fontFamily?: string;
29
30
  paddingTop?: Double;
30
31
  paddingBottom?: Double;
@@ -52,6 +52,9 @@ export const ControlledInputView = /*#__PURE__*/memo(/*#__PURE__*/forwardRef(({
52
52
  inputStyle = {
53
53
  color: flattenedStyle.color,
54
54
  fontSize: flattenedStyle.fontSize,
55
+ ...(typeof flattenedStyle.height === 'number' ? {
56
+ height: flattenedStyle.height
57
+ } : {}),
55
58
  fontFamily: flattenedStyle.fontFamily,
56
59
  ...(hasPadding ? resolveAndroidComposeViewPadding(flattenedStyle) : {}),
57
60
  borderWidth: flattenedStyle.borderWidth,
@@ -1 +1 @@
1
- {"version":3,"names":["forwardRef","memo","useImperativeHandle","useLayoutEffect","useRef","Platform","processColor","StyleSheet","TextInputState","ControlledInputViewNativeComponent","jsx","_jsx","androidComposeHandledKeys","resolveAndroidComposeViewPadding","flat","padding","paddingTop","paddingVertical","paddingBottom","paddingLeft","paddingHorizontal","paddingRight","ControlledInputView","style","onTextChange","onFocus","onBlur","selectionColor","placeholderTextColor","rest","ref","nativeRef","isNativePlatform","OS","node","current","registerInput","unregisterInput","currentlyFocusedInput","blurTextInput","flattenedStyle","flatten","viewStyle","inputStyle","Object","fromEntries","entries","filter","k","includes","hasPadding","some","v","color","fontSize","fontFamily","borderWidth","borderRadius","borderColor","backgroundColor","iosViewStyle","hasTextStyle","undefined","handleTextChange","e","nativeEvent","value","handleFocus","focusInput","handleBlur","blurInput","blur","focus","focusTextInput","displayName"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["forwardRef","memo","useImperativeHandle","useLayoutEffect","useRef","Platform","processColor","StyleSheet","TextInputState","ControlledInputViewNativeComponent","jsx","_jsx","androidComposeHandledKeys","resolveAndroidComposeViewPadding","flat","padding","paddingTop","paddingVertical","paddingBottom","paddingLeft","paddingHorizontal","paddingRight","ControlledInputView","style","onTextChange","onFocus","onBlur","selectionColor","placeholderTextColor","rest","ref","nativeRef","isNativePlatform","OS","node","current","registerInput","unregisterInput","currentlyFocusedInput","blurTextInput","flattenedStyle","flatten","viewStyle","inputStyle","Object","fromEntries","entries","filter","k","includes","hasPadding","some","v","color","fontSize","height","fontFamily","borderWidth","borderRadius","borderColor","backgroundColor","iosViewStyle","hasTextStyle","undefined","handleTextChange","e","nativeEvent","value","handleFocus","focusInput","handleBlur","blurInput","blur","focus","focusTextInput","displayName"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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","ignoreList":[]}
@@ -10,6 +10,7 @@ export interface BlurEvent {
10
10
  export interface InputStyle {
11
11
  color?: ColorValue;
12
12
  fontSize?: Double;
13
+ height?: Double;
13
14
  fontFamily?: string;
14
15
  paddingTop?: Double;
15
16
  paddingBottom?: Double;
@@ -1 +1 @@
1
- {"version":3,"file":"ControlledInputViewNativeComponent.d.ts","sourceRoot":"","sources":["../../../src/ControlledInputViewNativeComponent.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EACV,oBAAoB,EACpB,MAAM,EACP,MAAM,2CAA2C,CAAC;AAEnD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,UAAU;CAE1B;AAED,MAAM,WAAW,SAAS;CAEzB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,WAAY,SAAQ,SAAS;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oBAAoB,CAAC,EAAE,UAAU,CAAC;IAClC,cAAc,CAAC,EAAE,UAAU,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,YAAY,CAAC,EAAE,oBAAoB,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC;IAC/D,OAAO,CAAC,EAAE,oBAAoB,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;IACrD,MAAM,CAAC,EAAE,oBAAoB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;CACpD;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,KAAK,IAAI,CAAC;IACvE,IAAI,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,KAAK,IAAI,CAAC;CACvE;AAED,eAAO,MAAM,QAAQ,EAAE,cAErB,CAAC;;AAEH,wBAA0E"}
1
+ {"version":3,"file":"ControlledInputViewNativeComponent.d.ts","sourceRoot":"","sources":["../../../src/ControlledInputViewNativeComponent.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EACV,oBAAoB,EACpB,MAAM,EACP,MAAM,2CAA2C,CAAC;AAEnD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,UAAU;CAE1B;AAED,MAAM,WAAW,SAAS;CAEzB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,WAAY,SAAQ,SAAS;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oBAAoB,CAAC,EAAE,UAAU,CAAC;IAClC,cAAc,CAAC,EAAE,UAAU,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,YAAY,CAAC,EAAE,oBAAoB,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC;IAC/D,OAAO,CAAC,EAAE,oBAAoB,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;IACrD,MAAM,CAAC,EAAE,oBAAoB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;CACpD;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,KAAK,IAAI,CAAC;IACvE,IAAI,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,KAAK,IAAI,CAAC;CACvE;AAED,eAAO,MAAM,QAAQ,EAAE,cAErB,CAAC;;AAEH,wBAA0E"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAQA,OAAO,EAIL,KAAK,cAAc,EAGpB,MAAM,cAAc,CAAC;AAEtB,OAA2C,EACzC,KAAK,WAAW,EAEjB,MAAM,sCAAsC,CAAC;AAE9C,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED,KAAK,uBAAuB,GAAG,IAAI,CACjC,cAAc,EACZ,cAAc,GACd,gBAAgB,GAChB,cAAc,GACd,eAAe,GACf,aAAa,GACb,sBAAsB,GACtB,gBAAgB,CACnB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,IAAI,CACzC,WAAW,EACX,YAAY,GAAG,cAAc,GAAG,MAAM,uBAAuB,CAC9D,GACC,uBAAuB,GAAG;IACxB,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC,CAAC;AA2CJ,eAAO,MAAM,mBAAmB;mBA5Cb,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;0DAiLzC,CAAC;AAIF,cAAc,sCAAsC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAQA,OAAO,EAIL,KAAK,cAAc,EAGpB,MAAM,cAAc,CAAC;AAEtB,OAA2C,EACzC,KAAK,WAAW,EAEjB,MAAM,sCAAsC,CAAC;AAE9C,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED,KAAK,uBAAuB,GAAG,IAAI,CACjC,cAAc,EACZ,cAAc,GACd,gBAAgB,GAChB,cAAc,GACd,eAAe,GACf,aAAa,GACb,sBAAsB,GACtB,gBAAgB,CACnB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,IAAI,CACzC,WAAW,EACX,YAAY,GAAG,cAAc,GAAG,MAAM,uBAAuB,CAC9D,GACC,uBAAuB,GAAG;IACxB,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC,CAAC;AA2CJ,eAAO,MAAM,mBAAmB;mBA5Cb,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;0DAoLzC,CAAC;AAIF,cAAc,sCAAsC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-controlled-input",
3
- "version": "0.20.0",
3
+ "version": "0.22.0",
4
4
  "description": "React Native controlled TextInput with strict value sync (Fabric)",
5
5
  "main": "./lib/module/index.js",
6
6
  "types": "./lib/typescript/src/index.d.ts",
@@ -25,6 +25,7 @@ export interface BlurEvent {
25
25
  export interface InputStyle {
26
26
  color?: ColorValue;
27
27
  fontSize?: Double;
28
+ height?: Double;
28
29
  fontFamily?: string;
29
30
  paddingTop?: Double;
30
31
  paddingBottom?: Double;
package/src/index.tsx CHANGED
@@ -146,6 +146,9 @@ export const ControlledInputView = memo(
146
146
  inputStyle = {
147
147
  color: flattenedStyle.color,
148
148
  fontSize: flattenedStyle.fontSize,
149
+ ...(typeof flattenedStyle.height === 'number'
150
+ ? { height: flattenedStyle.height }
151
+ : {}),
149
152
  fontFamily: flattenedStyle.fontFamily,
150
153
  ...(hasPadding
151
154
  ? resolveAndroidComposeViewPadding(flattenedStyle)