UNPKG

@primer/react

Version:

An implementation of GitHub's Primer Design System using React

71 lines (68 loc) 2.58 kB
import React from 'react'; import Box from '../../Box/Box.js'; import StyledSpinner from '../../Spinner/Spinner.js'; import { clsx } from 'clsx'; import styles from './TextInputInnerVisualSlot.module.css.js'; import '../../FeatureFlags/FeatureFlags.js'; import { useFeatureFlag } from '../../FeatureFlags/useFeatureFlag.js'; import '../../FeatureFlags/DefaultFeatureFlags.js'; import { TEXT_INPUT_CSS_MODULES_FEATURE_FLAG } from './UnstyledTextInput.js'; function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } const TextInputInnerVisualSlot = ({ children, hasLoadingIndicator, showLoadingIndicator, visualPosition, id }) => { const enabled = useFeatureFlag(TEXT_INPUT_CSS_MODULES_FEATURE_FLAG); const isLeading = visualPosition === 'leading'; if (!children && !hasLoadingIndicator || isLeading && !children && !showLoadingIndicator) { return null; } if (!hasLoadingIndicator) { return /*#__PURE__*/React.createElement("span", { className: "TextInput-icon", id: id, "aria-hidden": "true" }, children); } const boxStyleProps = enabled ? { className: clsx(showLoadingIndicator ? styles.SpinnerHidden : styles.SpinnerVisible) } : { sx: { visibility: showLoadingIndicator ? 'hidden' : 'visible' } }; const spinnerStyleProps = enabled ? { className: clsx(showLoadingIndicator ? styles.SpinnerVisible : styles.SpinnerHidden, children && styles.Spinner, children && isLeading && styles.SpinnerLeading) } : { sx: children ? { position: 'absolute', top: 0, height: '100%', maxWidth: '100%', visibility: showLoadingIndicator ? 'visible' : 'hidden', ...(isLeading ? { left: 0 } : { right: 0 }) } : { visibility: showLoadingIndicator ? 'visible' : 'hidden' } }; return /*#__PURE__*/React.createElement("span", { className: "TextInput-icon" }, /*#__PURE__*/React.createElement(Box, { display: "flex", position: "relative", id: id }, children && /*#__PURE__*/React.createElement(Box, boxStyleProps, children), /*#__PURE__*/React.createElement(StyledSpinner, _extends({ srText: null }, spinnerStyleProps, { size: children ? undefined : 'small' })))); }; TextInputInnerVisualSlot.displayName = "TextInputInnerVisualSlot"; export { TextInputInnerVisualSlot as default };