/** * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @flow * @format */ import {createViewConfig} from '../NativeComponent/ViewConfig'; import UIManager from '../ReactNative/UIManager'; import createReactNativeComponentClass from '../Renderer/shims/createReactNativeComponentClass'; import {type HostComponent} from '../Renderer/shims/ReactNativeTypes'; import {type ProcessedColorValue} from '../StyleSheet/processColor'; import {type PressEvent} from '../Types/CoreEventTypes'; import {type TextProps} from './TextProps'; type NativeTextProps = $ReadOnly<{ ...TextProps, isHighlighted?: ?boolean, selectionColor?: ?ProcessedColorValue, onClick?: ?(event: PressEvent) => mixed, // This is only needed for platforms that optimize text hit testing, e.g., // react-native-windows. It can be used to only hit test virtual text spans // that have pressable events attached to them. isPressable?: ?boolean, }>; const textViewConfig = { validAttributes: { isHighlighted: true, isPressable: true, numberOfLines: true, ellipsizeMode: true, allowFontScaling: true, dynamicTypeRamp: true, maxFontSizeMultiplier: true, disabled: true, selectable: true, selectionColor: true, adjustsFontSizeToFit: true, minimumFontScale: true, textBreakStrategy: true, onTextLayout: true, onInlineViewLayout: true, dataDetectorType: true, android_hyphenationFrequency: true, lineBreakStrategyIOS: true, }, directEventTypes: { topTextLayout: { registrationName: 'onTextLayout', }, topInlineViewLayout: { registrationName: 'onInlineViewLayout', }, }, uiViewClassName: 'RCTText', }; const virtualTextViewConfig = { validAttributes: { isHighlighted: true, isPressable: true, maxFontSizeMultiplier: true, }, uiViewClassName: 'RCTVirtualText', }; export const NativeText: HostComponent = (createReactNativeComponentClass('RCTText', () => createViewConfig(textViewConfig), ): any); export const NativeVirtualText: HostComponent = !global.RN$Bridgeless && !UIManager.hasViewManagerConfig('RCTVirtualText') ? NativeText : (createReactNativeComponentClass('RCTVirtualText', () => createViewConfig(virtualTextViewConfig), ): any);