UNPKG

@kiwicom/orbit-components

Version:

Orbit-components is a React component library which provides developers with the easiest possible way of building Kiwi.com’s products.

201 lines (174 loc) 7.33 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var React = _interopRequireWildcard(require("react")); var _styledComponents = _interopRequireDefault(require("styled-components")); var _defaultTheme = _interopRequireDefault(require("../defaultTheme")); var _Button = _interopRequireDefault(require("../Button")); var _ButtonLink = _interopRequireWildcard(require("../ButtonLink")); var _FormLabel = _interopRequireDefault(require("../FormLabel")); var _FormFeedback = _interopRequireDefault(require("../FormFeedback")); var _Attachment = _interopRequireDefault(require("../icons/Attachment")); var _CloseCircle = _interopRequireDefault(require("../icons/CloseCircle")); var _rtl = require("../utils/rtl"); var _getSpacingToken = _interopRequireDefault(require("../common/getSpacingToken")); var _getFieldDataState = _interopRequireDefault(require("../common/getFieldDataState")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } var Field = _styledComponents.default.label.withConfig({ displayName: "InputFile__Field", componentId: "sc-12oq9bq-0" })(["font-family:", ";display:block;position:relative;width:100%;margin-bottom:", ";"], function (_ref) { var theme = _ref.theme; return theme.orbit.fontfamily; }, _getSpacingToken.default); Field.defaultProps = { theme: _defaultTheme.default }; var FakeInput = (0, _styledComponents.default)(function (_ref2) { var children = _ref2.children, className = _ref2.className; return React.createElement("div", { className: className }, children); }).withConfig({ displayName: "InputFile__FakeInput", componentId: "sc-12oq9bq-1" })(["box-sizing:border-box;display:flex;align-items:center;padding:", ";height:", ";border-radius:", ";box-shadow:inset 0 0 0 ", ";background-color:", ";transition:box-shadow ", " ease-in-out;&:hover{box-shadow:inset 0 0 0 ", ";}", ":active{box-shadow:none;}"], function (_ref3) { var theme = _ref3.theme; return (0, _rtl.rtlSpacing)(theme.orbit.paddingInputFile); }, function (_ref4) { var theme = _ref4.theme; return theme.orbit.heightInputNormal; }, function (_ref5) { var theme = _ref5.theme; return theme.orbit.borderRadiusNormal; }, function (_ref6) { var theme = _ref6.theme, error = _ref6.error; return "".concat(theme.orbit.borderWidthInput, " ").concat(error ? theme.orbit.borderColorInputError : theme.orbit.borderColorInput); }, function (_ref7) { var theme = _ref7.theme; return theme.backgroundInput; }, function (_ref8) { var theme = _ref8.theme; return theme.orbit.durationFast; }, function (_ref9) { var theme = _ref9.theme, error = _ref9.error; return "".concat(theme.orbit.borderWidthInput, " ").concat(error ? theme.orbit.paletteRedNormalHover : theme.orbit.borderColorInputHover); }, _ButtonLink.StyledButtonLink); FakeInput.defaultProps = { theme: _defaultTheme.default }; var Input = _styledComponents.default.input.withConfig({ displayName: "InputFile__Input", componentId: "sc-12oq9bq-2" })(["opacity:0;position:absolute;height:0;&:focus ~ ", "{box-shadow:", ";}"], FakeInput, function (_ref10) { var theme = _ref10.theme; return "inset 0 0 0 ".concat(theme.orbit.borderWidthInputFocus, " ").concat(theme.orbit.borderColorInputFocus); }); Input.defaultProps = { theme: _defaultTheme.default }; var getFileInputColor = function getFileInputColor(_ref11, theme) { var error = _ref11.error, fileName = _ref11.fileName; if (error) { return theme.orbit.paletteRedNormal; } if (fileName) { return theme.orbit.colorTextInput; } return theme.orbit.paletteInkLight; }; var StyledFileInput = _styledComponents.default.div.withConfig({ displayName: "InputFile__StyledFileInput", componentId: "sc-12oq9bq-3" })(["font-family:", ";color:", ";width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding:", ";"], function (_ref12) { var theme = _ref12.theme; return theme.orbit.fontFamily; }, function (_ref13) { var error = _ref13.error, fileName = _ref13.fileName, theme = _ref13.theme; return getFileInputColor({ error: error, fileName: fileName }, theme); }, function (_ref14) { var theme = _ref14.theme; return (0, _rtl.rtlSpacing)("0 0 0 ".concat(theme.orbit.spaceSmall)); }); StyledFileInput.defaultProps = { theme: _defaultTheme.default }; var InputButton = (0, _styledComponents.default)(_Button.default).withConfig({ displayName: "InputFile__InputButton", componentId: "sc-12oq9bq-4" })(["flex-shrink:0;"]); var CloseButton = (0, _styledComponents.default)(_ButtonLink.default).withConfig({ displayName: "InputFile__CloseButton", componentId: "sc-12oq9bq-5" })(["flex-shrink:0;& svg{color:", ";}"], function (_ref15) { var theme = _ref15.theme; return theme.orbit.paletteInkLight; }); CloseButton.defaultProps = { theme: _defaultTheme.default }; // $FlowExpected var InputFile = React.forwardRef(function (props, ref) { var _props$placeholder = props.placeholder, placeholder = _props$placeholder === void 0 ? "No file selected" : _props$placeholder, _props$title = props.title, title = _props$title === void 0 ? "Select file" : _props$title, onRemoveFile = props.onRemoveFile, dataTest = props.dataTest, spaceAfter = props.spaceAfter; return React.createElement(Field, { spaceAfter: spaceAfter }, React.createElement(Input, { "data-test": dataTest, "data-state": (0, _getFieldDataState.default)(!!props.error), type: "file", name: props.name, error: props.error, onChange: props.onChange, onFocus: props.onChange, onBlur: props.onBlur, accept: props.allowedFileTypes, ref: ref, tabIndex: props.tabIndex }), props.label && React.createElement(_FormLabel.default, { filled: !!props.fileName }, props.label), React.createElement(FakeInput, { error: props.error }, React.createElement(InputButton, { type: "secondary", size: "small", icon: React.createElement(_Attachment.default, null), component: "div" }, title), React.createElement(StyledFileInput, { fileName: props.fileName, error: props.error }, props.fileName || placeholder), props.fileName && React.createElement(CloseButton, { type: "secondary", transparent: true, icon: React.createElement(_CloseCircle.default, null), onClick: function onClick(ev) { ev.preventDefault(); if (onRemoveFile) { onRemoveFile(); } } })), props.help && !props.error && React.createElement(_FormFeedback.default, { type: "help" }, props.help), props.error && React.createElement(_FormFeedback.default, { type: "error" }, props.error)); }); InputFile.displayName = "InputFile"; var _default = InputFile; exports.default = _default;