UNPKG

vcc-ui

Version:

A React library for building user interfaces at Volvo Cars

108 lines (107 loc) 4.7 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.TextArea = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _propTypes = require("prop-types"); var _react = _interopRequireWildcard(require("react")); var _useTheme = require("../../styling/use-theme"); var _autoId = require("../../utils/auto-id"); var _block = require("../block"); var _flex = require("../flex"); var _message = require("../message"); var _spacer = require("../spacer"); var _spinner = require("../spinner"); var _textArea = require("./text-area.style"); function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } /** * @deprecated Use `import { TextArea } from '@volvo-cars/react-forms'` instead. See [TextArea](https://developer.volvocars.com/design-system/web/?path=/docs/components-forms-textarea--docs) */ const TextArea = exports.TextArea = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => { let { value = '', onChange, isValid = true, label, description = '', errorMessage = '', loading = false, disabled = false, ...props } = _ref; const theme = (0, _useTheme.useTheme)(); const isEmpty = value.length === 0; const styleProps = { isEmpty, isValid, disabled, loading, theme }; const id = (0, _autoId.useId)('vcc-ui-text-area', props.id); const errorMessageId = (0, _autoId.makeId)(id, 'error'); const descriptionId = (0, _autoId.makeId)(id, 'description'); const describedBy = (0, _autoId.makeIdList)([errorMessage && errorMessageId, description && descriptionId]); const messages = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, errorMessage || description ? /*#__PURE__*/_react.default.createElement(_spacer.Spacer, { size: 0.5 }) : null, errorMessage ? /*#__PURE__*/_react.default.createElement(_message.Message, { type: "error", id: errorMessageId }, errorMessage) : null, description ? /*#__PURE__*/_react.default.createElement(_message.Message, { id: descriptionId }, description) : null); return /*#__PURE__*/_react.default.createElement(_flex.Flex, { extend: _textArea.wrapperStyle }, /*#__PURE__*/_react.default.createElement(_flex.Flex, { extend: { position: 'relative' } }, loading && /*#__PURE__*/_react.default.createElement(_flex.Flex, { extend: { position: 'absolute', width: '100%', height: '100%', alignItems: 'center', justifyContent: 'center' } }, /*#__PURE__*/_react.default.createElement(_spinner.Spinner, { color: theme.tokens.inputForeground, size: 24 })), !loading && /*#__PURE__*/_react.default.createElement(_block.Block, { as: "label", htmlFor: id, extend: (0, _textArea.labelStyle)(styleProps) }, label), /*#__PURE__*/_react.default.createElement(_block.Block, (0, _extends2.default)({}, props, { ref: ref, as: "textarea", value: loading ? '' : value, disabled: disabled || loading, id: id, onChange: onChange, extend: (0, _textArea.defaultStyles)(styleProps) }, describedBy && { 'aria-describedby': describedBy }))), messages); }); TextArea.displayName = 'TextArea'; TextArea.propTypes = { id: _propTypes.string, name: _propTypes.string, /** Renders a label inside the input. */ label: _propTypes.string.isRequired, /** Renders a neutral helper message underneath the input. */ description: _propTypes.string, /** Renders a red error message for validation underneath the input. */ errorMessage: _propTypes.string, onChange: _propTypes.func.isRequired, /** Value of the input. This should be stored in the * state of the parent component */ value: _propTypes.string.isRequired, /** Renders the input as valid or invalid */ isValid: _propTypes.bool, loading: _propTypes.bool, disabled: _propTypes.bool };