UNPKG

react-native-web

Version:
199 lines (194 loc) 8.24 kB
"use strict"; /** * Copyright (c) Nicolas Gallagher. * 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. * * */ 'use client'; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default; exports.__esModule = true; exports.default = void 0; var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2")); var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose")); var React = _interopRequireWildcard(require("react")); var _createElement = _interopRequireDefault(require("../createElement")); var forwardedProps = _interopRequireWildcard(require("../../modules/forwardedProps")); var _pick = _interopRequireDefault(require("../../modules/pick")); var _useElementLayout = _interopRequireDefault(require("../../modules/useElementLayout")); var _useMergeRefs = _interopRequireDefault(require("../../modules/useMergeRefs")); var _usePlatformMethods = _interopRequireDefault(require("../../modules/usePlatformMethods")); var _useResponderEvents = _interopRequireDefault(require("../../modules/useResponderEvents")); var _StyleSheet = _interopRequireDefault(require("../StyleSheet")); var _TextAncestorContext = _interopRequireDefault(require("./TextAncestorContext")); var _useLocale = require("../../modules/useLocale"); var _excluded = ["hrefAttrs", "numberOfLines", "onClick", "onLayout", "onPress", "onMoveShouldSetResponder", "onMoveShouldSetResponderCapture", "onResponderEnd", "onResponderGrant", "onResponderMove", "onResponderReject", "onResponderRelease", "onResponderStart", "onResponderTerminate", "onResponderTerminationRequest", "onScrollShouldSetResponder", "onScrollShouldSetResponderCapture", "onSelectionChangeShouldSetResponder", "onSelectionChangeShouldSetResponderCapture", "onStartShouldSetResponder", "onStartShouldSetResponderCapture", "selectable"]; //import { warnOnce } from '../../modules/warnOnce'; var forwardPropsList = Object.assign({}, forwardedProps.defaultProps, forwardedProps.accessibilityProps, forwardedProps.clickProps, forwardedProps.focusProps, forwardedProps.keyboardProps, forwardedProps.mouseProps, forwardedProps.touchProps, forwardedProps.styleProps, { href: true, lang: true, pointerEvents: true }); var pickProps = props => (0, _pick.default)(props, forwardPropsList); var Text = /*#__PURE__*/React.forwardRef((props, forwardedRef) => { var hrefAttrs = props.hrefAttrs, numberOfLines = props.numberOfLines, onClick = props.onClick, onLayout = props.onLayout, onPress = props.onPress, onMoveShouldSetResponder = props.onMoveShouldSetResponder, onMoveShouldSetResponderCapture = props.onMoveShouldSetResponderCapture, onResponderEnd = props.onResponderEnd, onResponderGrant = props.onResponderGrant, onResponderMove = props.onResponderMove, onResponderReject = props.onResponderReject, onResponderRelease = props.onResponderRelease, onResponderStart = props.onResponderStart, onResponderTerminate = props.onResponderTerminate, onResponderTerminationRequest = props.onResponderTerminationRequest, onScrollShouldSetResponder = props.onScrollShouldSetResponder, onScrollShouldSetResponderCapture = props.onScrollShouldSetResponderCapture, onSelectionChangeShouldSetResponder = props.onSelectionChangeShouldSetResponder, onSelectionChangeShouldSetResponderCapture = props.onSelectionChangeShouldSetResponderCapture, onStartShouldSetResponder = props.onStartShouldSetResponder, onStartShouldSetResponderCapture = props.onStartShouldSetResponderCapture, selectable = props.selectable, rest = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded); /* if (selectable != null) { warnOnce( 'selectable', 'selectable prop is deprecated. Use styles.userSelect.' ); } */ var hasTextAncestor = React.useContext(_TextAncestorContext.default); var hostRef = React.useRef(null); var _useLocaleContext = (0, _useLocale.useLocaleContext)(), contextDirection = _useLocaleContext.direction; (0, _useElementLayout.default)(hostRef, onLayout); (0, _useResponderEvents.default)(hostRef, { onMoveShouldSetResponder, onMoveShouldSetResponderCapture, onResponderEnd, onResponderGrant, onResponderMove, onResponderReject, onResponderRelease, onResponderStart, onResponderTerminate, onResponderTerminationRequest, onScrollShouldSetResponder, onScrollShouldSetResponderCapture, onSelectionChangeShouldSetResponder, onSelectionChangeShouldSetResponderCapture, onStartShouldSetResponder, onStartShouldSetResponderCapture }); var handleClick = React.useCallback(e => { if (onClick != null) { onClick(e); } else if (onPress != null) { e.stopPropagation(); onPress(e); } }, [onClick, onPress]); var component = hasTextAncestor ? 'span' : 'div'; var langDirection = props.lang != null ? (0, _useLocale.getLocaleDirection)(props.lang) : null; var componentDirection = props.dir || langDirection; var writingDirection = componentDirection || contextDirection; var supportedProps = pickProps(rest); supportedProps.dir = componentDirection; // 'auto' by default allows browsers to infer writing direction (root elements only) if (!hasTextAncestor) { supportedProps.dir = componentDirection != null ? componentDirection : 'auto'; } if (onClick || onPress) { supportedProps.onClick = handleClick; } supportedProps.style = [numberOfLines != null && numberOfLines > 1 && { WebkitLineClamp: numberOfLines }, hasTextAncestor === true ? styles.textHasAncestor$raw : styles.text$raw, numberOfLines === 1 && styles.textOneLine, numberOfLines != null && numberOfLines > 1 && styles.textMultiLine, props.style, selectable === true && styles.selectable, selectable === false && styles.notSelectable, onPress && styles.pressable]; if (props.href != null) { component = 'a'; if (hrefAttrs != null) { var download = hrefAttrs.download, rel = hrefAttrs.rel, target = hrefAttrs.target; if (download != null) { supportedProps.download = download; } if (rel != null) { supportedProps.rel = rel; } if (typeof target === 'string') { supportedProps.target = target.charAt(0) !== '_' ? '_' + target : target; } } } var platformMethodsRef = (0, _usePlatformMethods.default)(supportedProps); var setRef = (0, _useMergeRefs.default)(hostRef, platformMethodsRef, forwardedRef); supportedProps.ref = setRef; var element = (0, _createElement.default)(component, supportedProps, { writingDirection }); return hasTextAncestor ? element : /*#__PURE__*/React.createElement(_TextAncestorContext.default.Provider, { value: true }, element); }); Text.displayName = 'Text'; var textStyle = { backgroundColor: 'transparent', border: '0 solid black', boxSizing: 'border-box', color: 'black', display: 'inline', font: '14px System', listStyle: 'none', margin: 0, padding: 0, position: 'relative', textAlign: 'start', textDecoration: 'none', whiteSpace: 'pre-wrap', wordWrap: 'break-word' }; var styles = _StyleSheet.default.create({ text$raw: textStyle, textHasAncestor$raw: (0, _objectSpread2.default)((0, _objectSpread2.default)({}, textStyle), {}, { color: 'inherit', font: 'inherit', textAlign: 'inherit', whiteSpace: 'inherit' }), textOneLine: { maxWidth: '100%', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', wordWrap: 'normal' }, // See #13 textMultiLine: { display: '-webkit-box', maxWidth: '100%', overflow: 'clip', textOverflow: 'ellipsis', WebkitBoxOrient: 'vertical' }, notSelectable: { userSelect: 'none' }, selectable: { userSelect: 'text' }, pressable: { cursor: 'pointer' } }); var _default = exports.default = Text; module.exports = exports.default;