UNPKG

@primer/react

Version:

An implementation of GitHub's Primer Design System using React

63 lines (59 loc) 2.63 kB
import styled, { css } from 'styled-components'; import React from 'react'; import { TextInputBaseWrapper } from '../internal/components/TextInputWrapper.js'; import sx from '../sx.js'; import { toggleStyledComponent } from '../internal/utils/toggleStyledComponent.js'; import { clsx } from 'clsx'; import '../FeatureFlags/FeatureFlags.js'; import { useFeatureFlag } from '../FeatureFlags/useFeatureFlag.js'; import '../FeatureFlags/DefaultFeatureFlags.js'; import classes from './TextArea.module.css.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 DEFAULT_TEXTAREA_ROWS = 7; const DEFAULT_TEXTAREA_COLS = 30; const DEFAULT_TEXTAREA_RESIZE = 'both'; const CSS_MODULES_FEATURE_FLAG = 'primer_react_css_modules_ga'; const StyledTextarea = toggleStyledComponent(CSS_MODULES_FEATURE_FLAG, 'textarea', styled.textarea.withConfig({ displayName: "Textarea__StyledTextarea", componentId: "sc-1lf8it-0" })(["border:0;font-size:inherit;font-family:inherit;background-color:transparent;-webkit-appearance:none;color:inherit;width:100%;resize:both;&:focus{outline:0;}", " ", " ", ";"], props => props.resize && css(["resize:", ";"], props.resize), props => props.disabled && css(["resize:none;"]), sx)); /** * An accessible, native textarea component that supports validation states. * This component accepts all native HTML <textarea> attributes as props. */ const Textarea = /*#__PURE__*/React.forwardRef(({ value, disabled, sx: sxProp, required, validationStatus, rows = DEFAULT_TEXTAREA_ROWS, cols = DEFAULT_TEXTAREA_COLS, resize = DEFAULT_TEXTAREA_RESIZE, block, contrast, className, ...rest }, ref) => { const enabled = useFeatureFlag(CSS_MODULES_FEATURE_FLAG); return /*#__PURE__*/React.createElement(TextInputBaseWrapper, { sx: sxProp, validationStatus: validationStatus, disabled: disabled, block: block, contrast: contrast, className: className }, /*#__PURE__*/React.createElement(StyledTextarea, _extends({ value: value, resize: resize, "aria-required": required, "aria-invalid": validationStatus === 'error' ? 'true' : 'false', ref: ref, disabled: disabled, rows: rows, cols: cols, className: clsx(enabled && classes.TextArea, className) }, rest))); }); Textarea.displayName = 'Textarea'; export { DEFAULT_TEXTAREA_COLS, DEFAULT_TEXTAREA_RESIZE, DEFAULT_TEXTAREA_ROWS, Textarea as default };