@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.
- package/CHANGELOG.md +33 -0
- package/android/build.gradle +2 -2
- package/android/src/main/java/expo/modules/ui/ExpoUIModule.kt +40 -6
- package/android/src/main/java/expo/modules/ui/HostView.kt +0 -2
- package/android/src/main/java/expo/modules/ui/ModalBottomSheetView.kt +14 -0
- package/android/src/main/java/expo/modules/ui/ModifierRegistry.kt +20 -0
- package/android/src/main/java/expo/modules/ui/RNHostView.kt +182 -6
- package/android/src/main/java/expo/modules/ui/textfield/BasicTextField.kt +203 -0
- package/android/src/main/java/expo/modules/ui/{TextFieldView.kt → textfield/TextField.kt} +34 -248
- package/android/src/main/java/expo/modules/ui/textfield/TextFieldShared.kt +299 -0
- package/build/State/useNativeState.d.ts +8 -3
- package/build/State/useNativeState.d.ts.map +1 -1
- package/build/community/bottom-sheet/BottomSheet.android.d.ts.map +1 -1
- package/build/community/pager-view/PagerView.android.d.ts.map +1 -1
- package/build/jetpack-compose/ModalBottomSheet/index.d.ts +6 -0
- package/build/jetpack-compose/ModalBottomSheet/index.d.ts.map +1 -1
- package/build/jetpack-compose/RNHostView/index.d.ts +8 -0
- package/build/jetpack-compose/RNHostView/index.d.ts.map +1 -1
- package/build/jetpack-compose/TextField/BasicTextField.d.ts +36 -0
- package/build/jetpack-compose/TextField/BasicTextField.d.ts.map +1 -0
- package/build/jetpack-compose/TextField/TextField.d.ts +131 -0
- package/build/jetpack-compose/TextField/TextField.d.ts.map +1 -0
- package/build/jetpack-compose/TextField/index.d.ts +3 -244
- package/build/jetpack-compose/TextField/index.d.ts.map +1 -1
- package/build/jetpack-compose/TextField/shared.d.ts +171 -0
- package/build/jetpack-compose/TextField/shared.d.ts.map +1 -0
- package/build/jetpack-compose/index.d.ts +1 -1
- package/build/jetpack-compose/index.d.ts.map +1 -1
- package/build/jetpack-compose/modifiers/index.d.ts +11 -0
- package/build/jetpack-compose/modifiers/index.d.ts.map +1 -1
- package/build/swift-ui/Image/index.d.ts +3 -1
- package/build/swift-ui/Image/index.d.ts.map +1 -1
- package/build/swift-ui/modifiers/index.d.ts +34 -5
- package/build/swift-ui/modifiers/index.d.ts.map +1 -1
- package/build/swift-ui/modifiers/widgets.d.ts +7 -0
- package/build/swift-ui/modifiers/widgets.d.ts.map +1 -1
- package/build/universal/Button/index.ios.d.ts.map +1 -1
- package/build/universal/FieldGroup/FieldSectionSlots.d.ts.map +1 -1
- package/build/universal/FieldGroup/groupChildren.d.ts.map +1 -1
- package/build/universal/Text/index.ios.d.ts.map +1 -1
- package/build/universal/TextInput/index.android.d.ts.map +1 -1
- package/build/universal/TextInput/types.d.ts +5 -1
- package/build/universal/TextInput/types.d.ts.map +1 -1
- package/build/universal/modifierUtils.d.ts +16 -0
- package/build/universal/modifierUtils.d.ts.map +1 -0
- package/build/universal/transformStyle.android.d.ts +3 -0
- package/build/universal/transformStyle.android.d.ts.map +1 -1
- package/build/universal/transformStyle.ios.d.ts +3 -0
- package/build/universal/transformStyle.ios.d.ts.map +1 -1
- package/build/universal/types.d.ts +2 -0
- package/build/universal/types.d.ts.map +1 -1
- package/expo-module.config.json +1 -1
- package/ios/ImageView.swift +1 -5
- package/ios/Modifiers/ImageScaleModifier.swift +29 -0
- package/ios/Modifiers/OnGeometryChangeModifier.swift +8 -16
- package/ios/Modifiers/ViewModifierRegistry.swift +36 -0
- package/ios/Modifiers/WidgetModifiers.swift +12 -0
- 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
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.18/expo.modules.ui-56.0.18-sources.jar.md5 +1 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.18/expo.modules.ui-56.0.18-sources.jar.sha1 +1 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.18/expo.modules.ui-56.0.18-sources.jar.sha256 +1 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.18/expo.modules.ui-56.0.18-sources.jar.sha512 +1 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.18/expo.modules.ui-56.0.18.aar +0 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.18/expo.modules.ui-56.0.18.aar.md5 +1 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.18/expo.modules.ui-56.0.18.aar.sha1 +1 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.18/expo.modules.ui-56.0.18.aar.sha256 +1 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.18/expo.modules.ui-56.0.18.aar.sha512 +1 -0
- 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
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.18/expo.modules.ui-56.0.18.module.md5 +1 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.18/expo.modules.ui-56.0.18.module.sha1 +1 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.18/expo.modules.ui-56.0.18.module.sha256 +1 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.18/expo.modules.ui-56.0.18.module.sha512 +1 -0
- 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
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.18/expo.modules.ui-56.0.18.pom.md5 +1 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.18/expo.modules.ui-56.0.18.pom.sha1 +1 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.18/expo.modules.ui-56.0.18.pom.sha256 +1 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.18/expo.modules.ui-56.0.18.pom.sha512 +1 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/maven-metadata.xml +4 -4
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/maven-metadata.xml.md5 +1 -1
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/maven-metadata.xml.sha1 +1 -1
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/maven-metadata.xml.sha256 +1 -1
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/maven-metadata.xml.sha512 +1 -1
- package/package.json +3 -3
- package/src/State/index.fx.ts +4 -1
- package/src/State/useNativeState.ts +24 -5
- package/src/community/bottom-sheet/BottomSheet.android.tsx +2 -13
- package/src/community/bottom-sheet/BottomSheet.ios.tsx +1 -1
- package/src/community/datetime-picker/DateTimePicker.tsx +1 -1
- package/src/community/menu/MenuView.ios.tsx +1 -1
- package/src/community/pager-view/PagerView.android.tsx +21 -3
- package/src/community/pager-view/PagerView.ios.tsx +1 -1
- package/src/community/picker/Picker.ios.tsx +1 -1
- package/src/community/slider/Slider.ios.tsx +1 -1
- package/src/jetpack-compose/ModalBottomSheet/index.tsx +7 -0
- package/src/jetpack-compose/RNHostView/index.tsx +8 -0
- package/src/jetpack-compose/TextField/BasicTextField.tsx +118 -0
- package/src/jetpack-compose/TextField/TextField.tsx +198 -0
- package/src/jetpack-compose/TextField/index.ts +19 -0
- package/src/jetpack-compose/TextField/{index.tsx → shared.ts} +71 -203
- package/src/jetpack-compose/index.ts +6 -0
- package/src/jetpack-compose/modifiers/index.ts +13 -0
- package/src/swift-ui/BottomSheet/index.tsx +1 -1
- package/src/swift-ui/Image/index.tsx +12 -3
- package/src/swift-ui/modifiers/index.ts +44 -6
- package/src/swift-ui/modifiers/widgets.ts +9 -0
- package/src/universal/Button/index.ios.tsx +6 -1
- package/src/universal/FieldGroup/FieldSectionSlots.tsx +3 -0
- package/src/universal/FieldGroup/groupChildren.tsx +3 -0
- package/src/universal/Text/index.ios.tsx +3 -1
- package/src/universal/TextInput/index.android.tsx +26 -60
- package/src/universal/TextInput/types.ts +5 -1
- package/src/universal/modifierUtils.ts +23 -0
- package/src/universal/transformStyle.android.ts +9 -1
- package/src/universal/transformStyle.ios.ts +9 -1
- package/src/universal/types.ts +2 -0
- package/android/src/main/java/expo/modules/ui/ShadowNodeSyncFlush.kt +0 -28
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.16/expo.modules.ui-56.0.16-sources.jar.md5 +0 -1
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.16/expo.modules.ui-56.0.16-sources.jar.sha1 +0 -1
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.16/expo.modules.ui-56.0.16-sources.jar.sha256 +0 -1
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.16/expo.modules.ui-56.0.16-sources.jar.sha512 +0 -1
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.16/expo.modules.ui-56.0.16.aar +0 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.16/expo.modules.ui-56.0.16.aar.md5 +0 -1
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.16/expo.modules.ui-56.0.16.aar.sha1 +0 -1
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.16/expo.modules.ui-56.0.16.aar.sha256 +0 -1
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.16/expo.modules.ui-56.0.16.aar.sha512 +0 -1
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.16/expo.modules.ui-56.0.16.module.md5 +0 -1
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.16/expo.modules.ui-56.0.16.module.sha1 +0 -1
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.16/expo.modules.ui-56.0.16.module.sha256 +0 -1
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.16/expo.modules.ui-56.0.16.module.sha512 +0 -1
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.16/expo.modules.ui-56.0.16.pom.md5 +0 -1
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.16/expo.modules.ui-56.0.16.pom.sha1 +0 -1
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.16/expo.modules.ui-56.0.16.pom.sha256 +0 -1
- 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
|
-
|
|
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
|
-
<
|
|
158
|
+
<BasicTextField
|
|
160
159
|
ref={innerRef}
|
|
161
160
|
modifiers={[
|
|
162
161
|
...(userModifiers ?? []),
|
|
163
|
-
...transformToModifiers(
|
|
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
|
-
|
|
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
|
|
196
|
+
selection={selection as Parameters<typeof BasicTextField>[0]['selection']}
|
|
241
197
|
onSelectionChange={onSelectionChange}>
|
|
242
|
-
|
|
243
|
-
<
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
package/src/universal/types.ts
CHANGED
|
@@ -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
|
-
930e8ab7442da199117ed6e88be44b5b
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
4ed8efb025b6e6c393bc9c3f5f13f3c28bedda50
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
869fc2b13a7487be231ecffde437bf73d138786f9d20b04d843c59c2d95f376c
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
84b9331a94360a66891a0d1d33f82f6b9e90df27e7b209774b02a9a3732dafa4d58bb800952273b60d2c3a4b5c102dbc03ac418bc6123c33b39da4c515f5c2ea
|
package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.16/expo.modules.ui-56.0.16.aar
DELETED
|
Binary file
|
package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.16/expo.modules.ui-56.0.16.aar.md5
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
86b861e8240bfa02ed19115b82f2191b
|
package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.16/expo.modules.ui-56.0.16.aar.sha1
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
12ad717dbdbff8ac4cf80073d6ce7996265718cc
|
package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.16/expo.modules.ui-56.0.16.aar.sha256
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
d3b7205e40a307e5b1e4c3e9cb1a067fdef2c1b49984e9df3222448c856b55a2
|
package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.16/expo.modules.ui-56.0.16.aar.sha512
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
0a92657dee5473065082fc5fa71f484a728b7f3a1ef0a8a80144ae17a1c71fffc60a6dd98a8c9e932eca828a2258a29df0529f471a1c6ee4503bc0ff7f46705d
|
package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.16/expo.modules.ui-56.0.16.module.md5
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
76b22d8101716780ce269a9c780a39f3
|
package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.16/expo.modules.ui-56.0.16.module.sha1
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
a5ec14f774ba7cbc4f094af1684ea54873600661
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
47111fef1e88685da6b2a1018c17235ccf956aa41eb1f8d1fdde4cbe7df86f80
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
9266793e40dca55e2a32d8aea44e3428f82f69f0c0d3f696de7fa38ab9ea5fdaabd237173b0a810e5920eebf3f1d132d38bb058d8ef27061220dccc8aff00727
|
package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.16/expo.modules.ui-56.0.16.pom.md5
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
5cf4b923e1b075be2708700c5db82342
|
package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.16/expo.modules.ui-56.0.16.pom.sha1
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
49737ff4ff40390e2e7c5828b663ee45ab9556bc
|
package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.16/expo.modules.ui-56.0.16.pom.sha256
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
4932698b7ce04c8c5f3fabfbc39b79826395202f6c0cc3ab57f90ff1081a0208
|
package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.16/expo.modules.ui-56.0.16.pom.sha512
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
ccd7c8e428bea422d337383c18e11ceefad80526b9b8fcf1daa4c5f55bb8008b3426dfaf3fe9ee49bbac0ba2eb347f520a0eee6cc3c8ee71af0ab3203a47ff0d
|