wix-style-react
Version:
119 lines (96 loc) • 5.36 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
var _react = _interopRequireDefault(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _ImageSt = require("./Image.st.css");
var _excluded = ["dataHook", "src", "fit", "position", "style", "className", "borderRadius", "showBorder", "transparent"];
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
var placeholderSource = "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='164' height='120' viewBox='0 0 164 120'%3E%3Cg fill='none'%3E%3Crect width='164' height='120' fill='%23DAEFFE'/%3E%3Cpath fill='%23B9E3FF' d='M-8.52651283e-14,120 L49.0917544,74.9616932 C52.151039,72.1550101 56.848961,72.1550101 59.9082456,74.9616932 L71.293,85.4057534 L96.9019846,59.8591624 C100.0299,56.7386931 105.095216,56.744729 108.215685,59.8726439 C108.284098,59.9412201 108.35126,60.0110332 108.417137,60.0820486 L164,120 L-8.52651283e-14,120 Z'/%3E%3Ccircle cx='67.5' cy='43.5' r='10.5' fill='%23F5FBFF'/%3E%3C/g%3E%3C/svg%3E%0A";
var placeholderStyle = {
objectFit: 'cover'
};
var Image = function Image(_ref) {
var dataHook = _ref.dataHook,
src = _ref.src,
fit = _ref.fit,
position = _ref.position,
style = _ref.style,
className = _ref.className,
borderRadius = _ref.borderRadius,
showBorder = _ref.showBorder,
transparent = _ref.transparent,
otherProps = (0, _objectWithoutProperties2["default"])(_ref, _excluded);
var source = src || placeholderSource;
var isTiled = !!src && fit === 'tile';
var imgStyle = !src ? placeholderStyle : isTiled ? {
backgroundPosition: position,
backgroundImage: source ? "url(\"".concat(source, "\")") : undefined
} : {
objectFit: fit,
objectPosition: position
};
return /*#__PURE__*/_react["default"].createElement("img", (0, _extends2["default"])({}, otherProps, {
className: (0, _ImageSt.st)(_ImageSt.classes.root, {
tiled: isTiled,
showBorder: showBorder,
transparent: transparent
}, className),
"data-hook": dataHook,
"data-transparent": transparent,
src: source,
style: _objectSpread(_objectSpread(_objectSpread({}, style), imgStyle), {}, {
borderRadius: borderRadius
})
}));
};
Image.propTypes = {
/**
* Sets the border radius of the image box.
*/
borderRadius: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number]),
/** Applies a data-hook HTML attribute that can be used in the tests. */
dataHook: _propTypes["default"].string,
/** Specifies a CSS class name to be appended to the component’s root element. */
className: _propTypes["default"].string,
/**
* Specifies whether to display a border around an image.
*/
showBorder: _propTypes["default"].bool,
/** Specifies an URL link to image source. If not provided, a default placeholder image will be displayed. */
src: _propTypes["default"].string,
/** Sets the width of the image box. */
width: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number]),
/** Sets the height of the image box. */
height: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number]),
/**
* Specifies image fit mode inside a box.
* Check [object-fit](https://developer.mozilla.org/en-US/docs/Web/CSS/object-fit) CSS property values for more info.
*/
fit: _propTypes["default"].oneOf(['contain', 'cover', 'tile', 'none']),
/**
* Specifies source content position inside of an image box. Accepts any valid
* [CSS position](https://developer.mozilla.org/en-US/docs/Web/CSS/position_value) value.
*/
position: _propTypes["default"].string,
/** Specifies whether background of Image is transparent */
transparent: _propTypes["default"].bool
};
Image.defaultProps = {
width: '100%',
fit: 'cover',
position: 'center',
showBorder: false,
borderRadius: '8px',
transparent: false
};
Image.displayName = 'Image';
var _default = Image;
exports["default"] = _default;