UNPKG

@oxyhq/services

Version:

OxyHQ Expo/React Native SDK — UI components, screens, and native features

141 lines (137 loc) 3.17 kB
"use strict"; import React from 'react'; import { Animated, Pressable, StyleSheet, Text } from 'react-native'; import { AdornmentSide } from "./enums.js"; import { getTextColor } from "./utils.js"; import { useInternalTheme } from "../../theming.js"; import { getConstants } from "../helpers.js"; import { jsx as _jsx } from "react/jsx-runtime"; const AffixContext = /*#__PURE__*/React.createContext({ textStyle: { fontFamily: '', color: '' }, topPosition: null, side: AdornmentSide.Left }); const AffixAdornment = ({ affix, side, textStyle, topPosition, onLayout, visible, paddingHorizontal, maxFontSizeMultiplier, testID, disabled }) => { return /*#__PURE__*/_jsx(AffixContext.Provider, { value: { side, textStyle, topPosition, onLayout, visible, paddingHorizontal, maxFontSizeMultiplier, testID, disabled }, children: affix }); }; /** * A component to render a leading / trailing text in the TextInput * * ## Usage * ```js * import * as React from 'react'; * import { TextInput } from 'react-native-paper'; * * const MyComponent = () => { * const [text, setText] = React.useState(''); * * return ( * <TextInput * mode="outlined" * label="Outlined input" * placeholder="Type something" * right={<TextInput.Affix text="/100" />} * /> * ); * }; * * export default MyComponent; * ``` */ const TextFieldAffix = ({ text, textStyle: labelStyle, theme: themeOverrides, onLayout: onTextLayout, onPress, accessibilityLabel = text }) => { const theme = useInternalTheme(themeOverrides); const { AFFIX_OFFSET } = getConstants(theme.isV3); const { textStyle, onLayout, topPosition, side, visible, paddingHorizontal, maxFontSizeMultiplier, testID, disabled } = React.useContext(AffixContext); const offset = typeof paddingHorizontal === 'number' ? paddingHorizontal : AFFIX_OFFSET; const style = { top: topPosition, [side]: offset }; const textColor = getTextColor({ theme, disabled }); const content = /*#__PURE__*/_jsx(Text, { maxFontSizeMultiplier: maxFontSizeMultiplier, style: [{ color: textColor }, textStyle, labelStyle], onLayout: onTextLayout, testID: `${testID}-text`, children: text }); return /*#__PURE__*/_jsx(Animated.View, { style: [styles.container, style, { opacity: visible?.interpolate({ inputRange: [0, 1], outputRange: [1, 0] }) || 1 }], onLayout: onLayout, testID: testID, children: onPress ? /*#__PURE__*/_jsx(Pressable, { onPress: onPress, accessibilityRole: "button", accessibilityLabel: accessibilityLabel, children: content }) : content }); }; TextFieldAffix.displayName = 'TextField.Affix'; const styles = StyleSheet.create({ container: { position: 'absolute', justifyContent: 'center', alignItems: 'center' } }); export default TextFieldAffix; // @component-docs ignore-next-line export { TextFieldAffix, AffixAdornment }; //# sourceMappingURL=TextFieldAffix.js.map