@expo/ui 56.0.16 → 56.0.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/android/build.gradle +2 -2
  3. package/android/src/main/java/expo/modules/ui/ExpoUIModule.kt +40 -6
  4. package/android/src/main/java/expo/modules/ui/HostView.kt +0 -2
  5. package/android/src/main/java/expo/modules/ui/ModalBottomSheetView.kt +14 -0
  6. package/android/src/main/java/expo/modules/ui/ModifierRegistry.kt +20 -0
  7. package/android/src/main/java/expo/modules/ui/RNHostView.kt +182 -6
  8. package/android/src/main/java/expo/modules/ui/textfield/BasicTextField.kt +203 -0
  9. package/android/src/main/java/expo/modules/ui/{TextFieldView.kt → textfield/TextField.kt} +34 -248
  10. package/android/src/main/java/expo/modules/ui/textfield/TextFieldShared.kt +299 -0
  11. package/build/State/useNativeState.d.ts +8 -3
  12. package/build/State/useNativeState.d.ts.map +1 -1
  13. package/build/community/bottom-sheet/BottomSheet.android.d.ts.map +1 -1
  14. package/build/community/pager-view/PagerView.android.d.ts.map +1 -1
  15. package/build/jetpack-compose/ModalBottomSheet/index.d.ts +6 -0
  16. package/build/jetpack-compose/ModalBottomSheet/index.d.ts.map +1 -1
  17. package/build/jetpack-compose/RNHostView/index.d.ts +8 -0
  18. package/build/jetpack-compose/RNHostView/index.d.ts.map +1 -1
  19. package/build/jetpack-compose/TextField/BasicTextField.d.ts +36 -0
  20. package/build/jetpack-compose/TextField/BasicTextField.d.ts.map +1 -0
  21. package/build/jetpack-compose/TextField/TextField.d.ts +131 -0
  22. package/build/jetpack-compose/TextField/TextField.d.ts.map +1 -0
  23. package/build/jetpack-compose/TextField/index.d.ts +3 -244
  24. package/build/jetpack-compose/TextField/index.d.ts.map +1 -1
  25. package/build/jetpack-compose/TextField/shared.d.ts +171 -0
  26. package/build/jetpack-compose/TextField/shared.d.ts.map +1 -0
  27. package/build/jetpack-compose/index.d.ts +1 -1
  28. package/build/jetpack-compose/index.d.ts.map +1 -1
  29. package/build/jetpack-compose/modifiers/index.d.ts +11 -0
  30. package/build/jetpack-compose/modifiers/index.d.ts.map +1 -1
  31. package/build/swift-ui/Image/index.d.ts +3 -1
  32. package/build/swift-ui/Image/index.d.ts.map +1 -1
  33. package/build/swift-ui/modifiers/index.d.ts +34 -5
  34. package/build/swift-ui/modifiers/index.d.ts.map +1 -1
  35. package/build/swift-ui/modifiers/widgets.d.ts +7 -0
  36. package/build/swift-ui/modifiers/widgets.d.ts.map +1 -1
  37. package/build/universal/Button/index.ios.d.ts.map +1 -1
  38. package/build/universal/FieldGroup/FieldSectionSlots.d.ts.map +1 -1
  39. package/build/universal/FieldGroup/groupChildren.d.ts.map +1 -1
  40. package/build/universal/Text/index.ios.d.ts.map +1 -1
  41. package/build/universal/TextInput/index.android.d.ts.map +1 -1
  42. package/build/universal/TextInput/types.d.ts +5 -1
  43. package/build/universal/TextInput/types.d.ts.map +1 -1
  44. package/build/universal/modifierUtils.d.ts +16 -0
  45. package/build/universal/modifierUtils.d.ts.map +1 -0
  46. package/build/universal/transformStyle.android.d.ts +3 -0
  47. package/build/universal/transformStyle.android.d.ts.map +1 -1
  48. package/build/universal/transformStyle.ios.d.ts +3 -0
  49. package/build/universal/transformStyle.ios.d.ts.map +1 -1
  50. package/build/universal/types.d.ts +2 -0
  51. package/build/universal/types.d.ts.map +1 -1
  52. package/expo-module.config.json +1 -1
  53. package/ios/ImageView.swift +1 -5
  54. package/ios/Modifiers/ImageScaleModifier.swift +29 -0
  55. package/ios/Modifiers/OnGeometryChangeModifier.swift +8 -16
  56. package/ios/Modifiers/ViewModifierRegistry.swift +36 -0
  57. package/ios/Modifiers/WidgetModifiers.swift +12 -0
  58. package/local-maven-repo/expo/modules/ui/expo.modules.ui/{56.0.16/expo.modules.ui-56.0.16-sources.jar → 56.0.18/expo.modules.ui-56.0.18-sources.jar} +0 -0
  59. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.18/expo.modules.ui-56.0.18-sources.jar.md5 +1 -0
  60. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.18/expo.modules.ui-56.0.18-sources.jar.sha1 +1 -0
  61. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.18/expo.modules.ui-56.0.18-sources.jar.sha256 +1 -0
  62. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.18/expo.modules.ui-56.0.18-sources.jar.sha512 +1 -0
  63. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.18/expo.modules.ui-56.0.18.aar +0 -0
  64. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.18/expo.modules.ui-56.0.18.aar.md5 +1 -0
  65. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.18/expo.modules.ui-56.0.18.aar.sha1 +1 -0
  66. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.18/expo.modules.ui-56.0.18.aar.sha256 +1 -0
  67. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.18/expo.modules.ui-56.0.18.aar.sha512 +1 -0
  68. package/local-maven-repo/expo/modules/ui/expo.modules.ui/{56.0.16/expo.modules.ui-56.0.16.module → 56.0.18/expo.modules.ui-56.0.18.module} +22 -22
  69. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.18/expo.modules.ui-56.0.18.module.md5 +1 -0
  70. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.18/expo.modules.ui-56.0.18.module.sha1 +1 -0
  71. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.18/expo.modules.ui-56.0.18.module.sha256 +1 -0
  72. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.18/expo.modules.ui-56.0.18.module.sha512 +1 -0
  73. package/local-maven-repo/expo/modules/ui/expo.modules.ui/{56.0.16/expo.modules.ui-56.0.16.pom → 56.0.18/expo.modules.ui-56.0.18.pom} +1 -1
  74. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.18/expo.modules.ui-56.0.18.pom.md5 +1 -0
  75. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.18/expo.modules.ui-56.0.18.pom.sha1 +1 -0
  76. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.18/expo.modules.ui-56.0.18.pom.sha256 +1 -0
  77. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.18/expo.modules.ui-56.0.18.pom.sha512 +1 -0
  78. package/local-maven-repo/expo/modules/ui/expo.modules.ui/maven-metadata.xml +4 -4
  79. package/local-maven-repo/expo/modules/ui/expo.modules.ui/maven-metadata.xml.md5 +1 -1
  80. package/local-maven-repo/expo/modules/ui/expo.modules.ui/maven-metadata.xml.sha1 +1 -1
  81. package/local-maven-repo/expo/modules/ui/expo.modules.ui/maven-metadata.xml.sha256 +1 -1
  82. package/local-maven-repo/expo/modules/ui/expo.modules.ui/maven-metadata.xml.sha512 +1 -1
  83. package/package.json +3 -3
  84. package/src/State/index.fx.ts +4 -1
  85. package/src/State/useNativeState.ts +24 -5
  86. package/src/community/bottom-sheet/BottomSheet.android.tsx +2 -13
  87. package/src/community/bottom-sheet/BottomSheet.ios.tsx +1 -1
  88. package/src/community/datetime-picker/DateTimePicker.tsx +1 -1
  89. package/src/community/menu/MenuView.ios.tsx +1 -1
  90. package/src/community/pager-view/PagerView.android.tsx +21 -3
  91. package/src/community/pager-view/PagerView.ios.tsx +1 -1
  92. package/src/community/picker/Picker.ios.tsx +1 -1
  93. package/src/community/slider/Slider.ios.tsx +1 -1
  94. package/src/jetpack-compose/ModalBottomSheet/index.tsx +7 -0
  95. package/src/jetpack-compose/RNHostView/index.tsx +8 -0
  96. package/src/jetpack-compose/TextField/BasicTextField.tsx +118 -0
  97. package/src/jetpack-compose/TextField/TextField.tsx +198 -0
  98. package/src/jetpack-compose/TextField/index.ts +19 -0
  99. package/src/jetpack-compose/TextField/{index.tsx → shared.ts} +71 -203
  100. package/src/jetpack-compose/index.ts +6 -0
  101. package/src/jetpack-compose/modifiers/index.ts +13 -0
  102. package/src/swift-ui/BottomSheet/index.tsx +1 -1
  103. package/src/swift-ui/Image/index.tsx +12 -3
  104. package/src/swift-ui/modifiers/index.ts +44 -6
  105. package/src/swift-ui/modifiers/widgets.ts +9 -0
  106. package/src/universal/Button/index.ios.tsx +6 -1
  107. package/src/universal/FieldGroup/FieldSectionSlots.tsx +3 -0
  108. package/src/universal/FieldGroup/groupChildren.tsx +3 -0
  109. package/src/universal/Text/index.ios.tsx +3 -1
  110. package/src/universal/TextInput/index.android.tsx +26 -60
  111. package/src/universal/TextInput/types.ts +5 -1
  112. package/src/universal/modifierUtils.ts +23 -0
  113. package/src/universal/transformStyle.android.ts +9 -1
  114. package/src/universal/transformStyle.ios.ts +9 -1
  115. package/src/universal/types.ts +2 -0
  116. package/android/src/main/java/expo/modules/ui/ShadowNodeSyncFlush.kt +0 -28
  117. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.16/expo.modules.ui-56.0.16-sources.jar.md5 +0 -1
  118. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.16/expo.modules.ui-56.0.16-sources.jar.sha1 +0 -1
  119. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.16/expo.modules.ui-56.0.16-sources.jar.sha256 +0 -1
  120. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.16/expo.modules.ui-56.0.16-sources.jar.sha512 +0 -1
  121. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.16/expo.modules.ui-56.0.16.aar +0 -0
  122. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.16/expo.modules.ui-56.0.16.aar.md5 +0 -1
  123. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.16/expo.modules.ui-56.0.16.aar.sha1 +0 -1
  124. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.16/expo.modules.ui-56.0.16.aar.sha256 +0 -1
  125. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.16/expo.modules.ui-56.0.16.aar.sha512 +0 -1
  126. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.16/expo.modules.ui-56.0.16.module.md5 +0 -1
  127. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.16/expo.modules.ui-56.0.16.module.sha1 +0 -1
  128. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.16/expo.modules.ui-56.0.16.module.sha256 +0 -1
  129. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.16/expo.modules.ui-56.0.16.module.sha512 +0 -1
  130. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.16/expo.modules.ui-56.0.16.pom.md5 +0 -1
  131. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.16/expo.modules.ui-56.0.16.pom.sha1 +0 -1
  132. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.16/expo.modules.ui-56.0.16.pom.sha256 +0 -1
  133. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.16/expo.modules.ui-56.0.16.pom.sha512 +0 -1
@@ -1,5 +1,6 @@
1
1
  import {
2
- TextField as ComposeTextField,
2
+ BasicTextField,
3
+ Box,
3
4
  Text,
4
5
  type TextFieldImeAction,
5
6
  type TextFieldKeyboardType,
@@ -97,8 +98,6 @@ export function TextInput({
97
98
  const numberOfLines = numberOfLinesProp ?? rows;
98
99
  const keyboardType = keyboardTypeProp ?? inputModeToKeyboardType(inputMode);
99
100
  const returnKeyType = returnKeyTypeProp ?? enterKeyHintToReturnKeyType(enterKeyHint);
100
- const { backgroundColor: styleBackgroundColor, ...boxStyle } = style ?? {};
101
- const hideIndicator = boxStyle.borderWidth === 0 && underlineColorAndroid == null;
102
101
 
103
102
  const initialFallbackRef = useRef(defaultValue ?? '');
104
103
  const fallback = useNativeState<string>(initialFallbackRef.current);
@@ -156,11 +155,11 @@ export function TextInput({
156
155
  : undefined;
157
156
 
158
157
  return (
159
- <ComposeTextField
158
+ <BasicTextField
160
159
  ref={innerRef}
161
160
  modifiers={[
162
161
  ...(userModifiers ?? []),
163
- ...transformToModifiers(boxStyle, {}),
162
+ ...transformToModifiers(style, {}),
164
163
  ...(testID ? [testIDModifier(testID)] : []),
165
164
  ...(autoComplete ? [semantics({ contentType: autoComplete })] : []),
166
165
  ...(onContentSizeChange ? [onSizeChanged(onContentSizeChange)] : []),
@@ -171,50 +170,7 @@ export function TextInput({
171
170
  singleLine={!multiline}
172
171
  maxLines={multiline && numberOfLines && numberOfLines > 0 ? numberOfLines : undefined}
173
172
  minLines={multiline && numberOfLines && numberOfLines > 0 ? numberOfLines : undefined}
174
- colors={
175
- caretHidden ||
176
- cursorColor ||
177
- underlineColorAndroid ||
178
- placeholderTextColor ||
179
- styleBackgroundColor ||
180
- hideIndicator
181
- ? {
182
- ...(caretHidden
183
- ? { cursorColor: 'transparent' }
184
- : cursorColor
185
- ? { cursorColor }
186
- : null),
187
- ...(styleBackgroundColor
188
- ? {
189
- focusedContainerColor: styleBackgroundColor,
190
- unfocusedContainerColor: styleBackgroundColor,
191
- disabledContainerColor: styleBackgroundColor,
192
- errorContainerColor: styleBackgroundColor,
193
- }
194
- : null),
195
- ...(underlineColorAndroid
196
- ? {
197
- unfocusedIndicatorColor: underlineColorAndroid,
198
- focusedIndicatorColor: underlineColorAndroid,
199
- }
200
- : hideIndicator
201
- ? {
202
- focusedIndicatorColor: 'transparent',
203
- unfocusedIndicatorColor: 'transparent',
204
- disabledIndicatorColor: 'transparent',
205
- errorIndicatorColor: 'transparent',
206
- }
207
- : null),
208
- ...(placeholderTextColor
209
- ? {
210
- unfocusedPlaceholderColor: placeholderTextColor,
211
- focusedPlaceholderColor: placeholderTextColor,
212
- disabledPlaceholderColor: placeholderTextColor,
213
- }
214
- : null),
215
- }
216
- : undefined
217
- }
173
+ cursorColor={caretHidden ? 'transparent' : (cursorColor ?? selectionColor)}
218
174
  textStyle={
219
175
  textStyle || (textAlign && textAlign !== 'auto')
220
176
  ? {
@@ -237,18 +193,28 @@ export function TextInput({
237
193
  onValueChange={onChangeText}
238
194
  maxLength={maxLength}
239
195
  onFocusChanged={handleFocusChanged}
240
- selection={selection as Parameters<typeof ComposeTextField>[0]['selection']}
196
+ selection={selection as Parameters<typeof BasicTextField>[0]['selection']}
241
197
  onSelectionChange={onSelectionChange}>
242
- {placeholder ? (
243
- <ComposeTextField.Placeholder>
244
- <Text
245
- modifiers={[fillMaxWidth()]}
246
- style={textAlign && textAlign !== 'auto' ? { textAlign } : undefined}>
247
- {placeholder}
248
- </Text>
249
- </ComposeTextField.Placeholder>
250
- ) : null}
251
- </ComposeTextField>
198
+ <BasicTextField.DecorationBox>
199
+ <Box
200
+ modifiers={[fillMaxWidth()]}
201
+ contentAlignment={
202
+ textAlign === 'center' ? 'topCenter' : textAlign === 'right' ? 'topEnd' : undefined
203
+ }>
204
+ {placeholder != null ? (
205
+ <BasicTextField.Placeholder>
206
+ <Text
207
+ color={placeholderTextColor as string | undefined}
208
+ modifiers={[fillMaxWidth()]}
209
+ style={textAlign && textAlign !== 'auto' ? { textAlign } : undefined}>
210
+ {placeholder}
211
+ </Text>
212
+ </BasicTextField.Placeholder>
213
+ ) : null}
214
+ <BasicTextField.InnerTextField />
215
+ </Box>
216
+ </BasicTextField.DecorationBox>
217
+ </BasicTextField>
252
218
  );
253
219
  }
254
220
 
@@ -194,7 +194,11 @@ export interface TextInputProps {
194
194
  rows?: number;
195
195
 
196
196
  /**
197
- * Color of the underline indicator on Android. iOS / web ignore this.
197
+ * Color of the underline indicator on Android.
198
+ *
199
+ * @deprecated The Android `TextInput` renders an unstyled `BasicTextField` that
200
+ * has no underline indicator, so this has no effect. To draw your own border,
201
+ * pass it through `style` or `modifiers`.
198
202
  * @platform android
199
203
  */
200
204
  underlineColorAndroid?: ColorValue;
@@ -0,0 +1,23 @@
1
+ import type { ModifierConfig } from '../types';
2
+
3
+ /**
4
+ * Drops derived modifiers that the user overrides through the `modifiers`
5
+ * escape hatch. A user-supplied modifier takes ownership of its `$type`, so
6
+ * the component skips the modifier of that type it would otherwise derive
7
+ * from `style`, `variant`, and similar props.
8
+ *
9
+ * Only pass style-derived modifiers as `derived`. Modifiers backing
10
+ * functional props (for example `onPress`, `onAppear`, `disabled`) must not
11
+ * go through this filter, or a user modifier of the same type would silently
12
+ * disable the prop.
13
+ */
14
+ export function omitUserOverridden<T extends { $type: string }>(
15
+ derived: T[],
16
+ userModifiers?: readonly ModifierConfig[]
17
+ ): T[] {
18
+ if (!userModifiers?.length) {
19
+ return derived;
20
+ }
21
+ const userTypes = new Set(userModifiers.map((modifier) => modifier.$type));
22
+ return derived.filter((modifier) => !userTypes.has(modifier.$type));
23
+ }
@@ -14,6 +14,7 @@ import {
14
14
  type ModifierConfig,
15
15
  } from '@expo/ui/jetpack-compose/modifiers';
16
16
 
17
+ import { omitUserOverridden } from './modifierUtils';
17
18
  import type { UniversalBaseProps, UniversalStyle } from './types';
18
19
 
19
20
  /**
@@ -24,13 +25,16 @@ import type { UniversalBaseProps, UniversalStyle } from './types';
24
25
  * box model where background includes the padding area and border is outermost:
25
26
  * sizing → border → clip → background → padding → opacity
26
27
  * → events → behavior → user escape-hatch
28
+ *
29
+ * Style-derived modifiers yield to user-supplied modifiers of the same
30
+ * `$type`, so the escape hatch can override anything derived from props.
27
31
  */
28
32
  export function transformToModifiers(
29
33
  style: UniversalStyle | undefined,
30
34
  props: Pick<UniversalBaseProps, 'onPress' | 'disabled' | 'hidden' | 'testID'>,
31
35
  extraModifiers?: ModifierConfig[]
32
36
  ): ModifierConfig[] {
33
- const mods: ModifierConfig[] = [];
37
+ let mods: ModifierConfig[] = [];
34
38
 
35
39
  if (style) {
36
40
  // Sizing (outermost)
@@ -95,6 +99,10 @@ export function transformToModifiers(
95
99
  }
96
100
  }
97
101
 
102
+ // A user-supplied modifier replaces any style-derived modifier of the same
103
+ // type. The event and behavior modifiers below are never dropped.
104
+ mods = omitUserOverridden(mods, extraModifiers);
105
+
98
106
  // Events — Compose uses clickable modifier
99
107
  if (props.onPress) mods.push(clickable(props.onPress));
100
108
 
@@ -19,6 +19,7 @@ import {
19
19
  } from '@expo/ui/swift-ui/modifiers';
20
20
 
21
21
  import type { UniversalTextStyle } from './Text/types';
22
+ import { omitUserOverridden } from './modifierUtils';
22
23
  import type { UniversalBaseProps, UniversalStyle } from './types';
23
24
 
24
25
  const FONT_WEIGHT_MAP: Record<string, Parameters<typeof font>[0]['weight']> = {
@@ -43,6 +44,9 @@ const FONT_WEIGHT_MAP: Record<string, Parameters<typeof font>[0]['weight']> = {
43
44
  * To match React Native's box model (background fills the full box):
44
45
  * padding → sizing → background → clip → border → opacity
45
46
  * → events → lifecycle → behavior → user escape-hatch
47
+ *
48
+ * Style-derived modifiers yield to user-supplied modifiers of the same
49
+ * `$type`, so the escape hatch can override anything derived from props.
46
50
  */
47
51
  export function transformToModifiers(
48
52
  style: UniversalStyle | undefined,
@@ -58,7 +62,7 @@ export function transformToModifiers(
58
62
  textStyle?: UniversalTextStyle;
59
63
  }
60
64
  ): ModifierConfig[] {
61
- const mods: ModifierConfig[] = [];
65
+ let mods: ModifierConfig[] = [];
62
66
 
63
67
  // Text styling (innermost — applies to text content before container modifiers)
64
68
  const textStyle = options?.textStyle;
@@ -146,6 +150,10 @@ export function transformToModifiers(
146
150
  }
147
151
  }
148
152
 
153
+ // A user-supplied modifier replaces any style-derived modifier of the same
154
+ // type. The event, lifecycle, and behavior modifiers below are never dropped.
155
+ mods = omitUserOverridden(mods, extraModifiers);
156
+
149
157
  // Events
150
158
  if (props.onPress) mods.push(onTapGesture(props.onPress));
151
159
 
@@ -44,6 +44,8 @@ export interface UniversalBaseProps {
44
44
  /**
45
45
  * Platform-specific modifier escape hatch. Pass an array of modifier configs
46
46
  * from `@expo/ui/swift-ui/modifiers` or `@expo/ui/jetpack-compose/modifiers`.
47
+ * A modifier supplied here replaces any modifier of the same type that the
48
+ * component derives from `style` or other props.
47
49
  * @platform android
48
50
  * @platform ios
49
51
  */
@@ -1,28 +0,0 @@
1
- package expo.modules.ui
2
-
3
- import android.view.View
4
- import com.facebook.react.bridge.Arguments
5
- import com.facebook.react.bridge.ReactContext
6
- import com.facebook.react.bridge.WritableMap
7
- import com.facebook.react.uimanager.UIManagerHelper
8
- import com.facebook.react.uimanager.events.Event
9
-
10
- // Workaround helper that triggers a synchronous event to flush a pending
11
- // shadow-node state update in the current event beat. Mirrors iOS's
12
- // `EventQueue::UpdateMode::unstable_Immediate`, which Android does not expose
13
- // to Java/Kotlin as of now.
14
- // TODO: Remove when a synchronous state update API is exposed on Android.
15
- // https://github.com/facebook/react-native/pull/56311
16
- internal fun View.flushPendingStateUpdates() {
17
- val reactContext = context as? ReactContext ?: return
18
- val surfaceId = UIManagerHelper.getSurfaceId(this)
19
- UIManagerHelper.getEventDispatcherForReactTag(reactContext, id)
20
- ?.dispatchEvent(SyncFlushEvent(surfaceId, id))
21
- }
22
-
23
- private class SyncFlushEvent(surfaceId: Int, viewTag: Int) : Event<SyncFlushEvent>(surfaceId, viewTag) {
24
- override fun getEventName(): String = "topExpoUISyncFlush"
25
- override fun getEventData(): WritableMap = Arguments.createMap()
26
- override fun canCoalesce(): Boolean = true
27
- override fun experimental_isSynchronous(): Boolean = true
28
- }
@@ -1 +0,0 @@
1
- 4ed8efb025b6e6c393bc9c3f5f13f3c28bedda50
@@ -1 +0,0 @@
1
- 869fc2b13a7487be231ecffde437bf73d138786f9d20b04d843c59c2d95f376c
@@ -1 +0,0 @@
1
- 84b9331a94360a66891a0d1d33f82f6b9e90df27e7b209774b02a9a3732dafa4d58bb800952273b60d2c3a4b5c102dbc03ac418bc6123c33b39da4c515f5c2ea
@@ -1 +0,0 @@
1
- 12ad717dbdbff8ac4cf80073d6ce7996265718cc
@@ -1 +0,0 @@
1
- d3b7205e40a307e5b1e4c3e9cb1a067fdef2c1b49984e9df3222448c856b55a2
@@ -1 +0,0 @@
1
- 0a92657dee5473065082fc5fa71f484a728b7f3a1ef0a8a80144ae17a1c71fffc60a6dd98a8c9e932eca828a2258a29df0529f471a1c6ee4503bc0ff7f46705d
@@ -1 +0,0 @@
1
- a5ec14f774ba7cbc4f094af1684ea54873600661
@@ -1 +0,0 @@
1
- 47111fef1e88685da6b2a1018c17235ccf956aa41eb1f8d1fdde4cbe7df86f80
@@ -1 +0,0 @@
1
- 9266793e40dca55e2a32d8aea44e3428f82f69f0c0d3f696de7fa38ab9ea5fdaabd237173b0a810e5920eebf3f1d132d38bb058d8ef27061220dccc8aff00727
@@ -1 +0,0 @@
1
- 49737ff4ff40390e2e7c5828b663ee45ab9556bc
@@ -1 +0,0 @@
1
- 4932698b7ce04c8c5f3fabfbc39b79826395202f6c0cc3ab57f90ff1081a0208
@@ -1 +0,0 @@
1
- ccd7c8e428bea422d337383c18e11ceefad80526b9b8fcf1daa4c5f55bb8008b3426dfaf3fe9ee49bbac0ba2eb347f520a0eee6cc3c8ee71af0ab3203a47ff0d