UNPKG

emoji-mart

Version:

Customizable Slack-like emoji picker for React

251 lines (205 loc) 7.31 kB
"use strict"; 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 _react = _interopRequireDefault(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _utils = require("../../utils"); var _data = require("../../utils/data"); var _sharedProps = require("../../utils/shared-props"); var _sharedDefaultProps = require("../../utils/shared-default-props"); 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 _getData = function _getData(props) { var emoji = props.emoji, skin = props.skin, set = props.set, data = props.data; return (0, _utils.getData)(emoji, skin, set, data); }; var _getPosition = function _getPosition(props) { var _getData2 = _getData(props), sheet_x = _getData2.sheet_x, sheet_y = _getData2.sheet_y, multiplyX = 100 / (props.sheetColumns - 1), multiplyY = 100 / (props.sheetRows - 1); return "".concat(multiplyX * sheet_x, "% ").concat(multiplyY * sheet_y, "%"); }; var _getSanitizedData = function _getSanitizedData(props) { var emoji = props.emoji, skin = props.skin, set = props.set, data = props.data; return (0, _utils.getSanitizedData)(emoji, skin, set, data); }; var _handleClick = function _handleClick(e, props) { if (!props.onClick) { return; } var onClick = props.onClick, emoji = _getSanitizedData(props); onClick(emoji, e); }; var _handleOver = function _handleOver(e, props) { if (!props.onOver) { return; } var onOver = props.onOver, emoji = _getSanitizedData(props); onOver(emoji, e); }; var _handleLeave = function _handleLeave(e, props) { if (!props.onLeave) { return; } var onLeave = props.onLeave, emoji = _getSanitizedData(props); onLeave(emoji, e); }; var _isNumeric = function _isNumeric(value) { return !isNaN(value - parseFloat(value)); }; var _convertStyleToCSS = function _convertStyleToCSS(style) { var div = document.createElement('div'); for (var key in style) { var value = style[key]; if (_isNumeric(value)) { value += 'px'; } div.style[key] = value; } return div.getAttribute('style'); }; var NimbleEmoji = function NimbleEmoji(props) { if (props.data.compressed) { (0, _data.uncompress)(props.data); } for (var k in NimbleEmoji.defaultProps) { if (props[k] == undefined && NimbleEmoji.defaultProps[k] != undefined) { props[k] = NimbleEmoji.defaultProps[k]; } } var data = _getData(props); if (!data) { if (props.fallback) { return props.fallback(null, props); } else { return null; } } var unified = data.unified, custom = data.custom, short_names = data.short_names, imageUrl = data.imageUrl, style = {}, children = props.children, className = 'emoji-mart-emoji', nativeEmoji = unified && (0, _utils.unifiedToNative)(unified), label = [nativeEmoji].concat(short_names).filter(Boolean).join(', '), title = null; if (!unified && !custom) { if (props.fallback) { return props.fallback(data, props); } else { return null; } } if (props.tooltip) { title = short_names[0]; } if (props["native"] && unified) { className += ' emoji-mart-emoji-native'; style = { fontSize: props.size }; children = nativeEmoji; if (props.forceSize) { style.display = 'inline-block'; style.width = props.size; style.height = props.size; style.wordBreak = 'keep-all'; } } else if (custom) { className += ' emoji-mart-emoji-custom'; style = { width: props.size, height: props.size, display: 'inline-block' }; if (data.spriteUrl) { style = _objectSpread({}, style, { backgroundImage: "url(".concat(data.spriteUrl, ")"), backgroundSize: "".concat(100 * props.sheetColumns, "% ").concat(100 * props.sheetRows, "%"), backgroundPosition: _getPosition(props) }); } else { style = _objectSpread({}, style, { backgroundImage: "url(".concat(imageUrl, ")"), backgroundSize: 'contain', backgroundRepeat: 'no-repeat', backgroundPosition: 'center' }); } } else { var setHasEmoji = data["has_img_".concat(props.set)] == undefined || data["has_img_".concat(props.set)]; if (!setHasEmoji) { if (props.fallback) { return props.fallback(data, props); } else { return null; } } else { style = { width: props.size, height: props.size, display: 'inline-block', backgroundImage: "url(".concat(props.backgroundImageFn(props.set, props.sheetSize), ")"), backgroundSize: "".concat(100 * props.sheetColumns, "% ").concat(100 * props.sheetRows, "%"), backgroundPosition: _getPosition(props) }; } } var Tag = { name: 'span', props: {} }; if (props.onClick && props.useButton) { Tag.name = 'button'; Tag.props = { type: 'button' }; } if (props.html) { style = _convertStyleToCSS(style); return "<".concat(Tag.name, " style='").concat(style, "' aria-label='").concat(label, "' ").concat(title ? "title='".concat(title, "'") : '', " class='").concat(className, "'>").concat(children || '', "</").concat(Tag.name, ">"); } else { return _react["default"].createElement(Tag.name, (0, _extends2["default"])({ onClick: function onClick(e) { return _handleClick(e, props); }, onMouseEnter: function onMouseEnter(e) { return _handleOver(e, props); }, onMouseLeave: function onMouseLeave(e) { return _handleLeave(e, props); }, "aria-label": label, title: title, className: className }, Tag.props), _react["default"].createElement("span", { style: style }, children)); } }; NimbleEmoji.propTypes /* remove-proptypes */ = _objectSpread({}, _sharedProps.EmojiPropTypes, { data: _propTypes["default"].object.isRequired }); NimbleEmoji.defaultProps = _sharedDefaultProps.EmojiDefaultProps; var _default = NimbleEmoji; exports["default"] = _default;