react-mentions 4.3.0 → 4.4.0

Sign up to get free protection for your applications and to get access to all the features.
package/README.md CHANGED
@@ -7,7 +7,7 @@
7
7
 
8
8
  A React component that let's you mention people in a textarea like you are used to on Facebook or Twitter.
9
9
 
10
- Used in production at [Signavio](https://signavio.com), [State](https://state.com), [Snips](https://snips.ai), [Swat.io](https://swat.io), [GotDone](https://www.gotdone.me), [Volinspire](https://volinspire.com), [Marvin](https://amazingmarvin.com), [Timely](https://timelyapp.com), [GuideFitter](https://www.guidefitter.com/), [Evite](https://www.evite.com/), [Publer](https://publer.me/), [Kontentino](https://www.kontentino.com/), and [you?](https://github.com/signavio/react-mentions/edit/master/README.md)
10
+ Used in production at [Signavio](https://signavio.com), [State](https://state.com), [Snips](https://snips.ai), [Swat.io](https://swat.io), [GotDone](https://www.gotdone.me), [Volinspire](https://volinspire.com), [Marvin](https://amazingmarvin.com), [Timely](https://timelyapp.com), [GuideFitter](https://www.guidefitter.com/), [Evite](https://www.evite.com/), [Publer](https://publer.me/), [Kontentino](https://www.kontentino.com/), [Wix.com](https://wix.com), [Highlight](https://highlight.run/) and [you?](https://github.com/signavio/react-mentions/edit/master/README.md)
11
11
 
12
12
  ## Getting started
13
13
 
@@ -65,6 +65,7 @@ The `MentionsInput` supports the following props for configuring the widget:
65
65
  | inputRef | React ref | undefined | Accepts a React ref to forward to the underlying input element |
66
66
  | allowSuggestionsAboveCursor | boolean | false | Renders the SuggestionList above the cursor if there is not enough space below |
67
67
  | a11ySuggestionsListLabel | string | `''` | This label would be exposed to screen readers when suggestion popup appears |
68
+ | customSuggestionsContainer | function(children) | empty function | Allows customizing the container of the suggestions |
68
69
 
69
70
  Each data source is configured using a `Mention` component, which has the following props:
70
71
 
@@ -8,10 +8,10 @@ var _toConsumableArray = _interopDefault(require('@babel/runtime/helpers/toConsu
8
8
  var _extends = _interopDefault(require('@babel/runtime/helpers/extends'));
9
9
  var _classCallCheck = _interopDefault(require('@babel/runtime/helpers/classCallCheck'));
10
10
  var _createClass = _interopDefault(require('@babel/runtime/helpers/createClass'));
11
- var _possibleConstructorReturn = _interopDefault(require('@babel/runtime/helpers/possibleConstructorReturn'));
12
- var _getPrototypeOf = _interopDefault(require('@babel/runtime/helpers/getPrototypeOf'));
13
11
  var _assertThisInitialized = _interopDefault(require('@babel/runtime/helpers/assertThisInitialized'));
14
12
  var _inherits = _interopDefault(require('@babel/runtime/helpers/inherits'));
13
+ var _possibleConstructorReturn = _interopDefault(require('@babel/runtime/helpers/possibleConstructorReturn'));
14
+ var _getPrototypeOf = _interopDefault(require('@babel/runtime/helpers/getPrototypeOf'));
15
15
  var _defineProperty = _interopDefault(require('@babel/runtime/helpers/defineProperty'));
16
16
  var React = require('react');
17
17
  var React__default = _interopDefault(React);
@@ -629,6 +629,10 @@ var getSubstringIndex = function getSubstringIndex(str, substr, ignoreAccents) {
629
629
  return normalizeString(str).indexOf(normalizeString(substr));
630
630
  };
631
631
 
632
+ var isIE = function isIE() {
633
+ return !!document.documentMode;
634
+ };
635
+
632
636
  var isNumber = function isNumber(val) {
633
637
  return typeof val === 'number';
634
638
  };
@@ -655,13 +659,15 @@ var omit = function omit(obj) {
655
659
  }, {});
656
660
  };
657
661
 
662
+ var _excluded = ["style", "className", "classNames"];
663
+
658
664
  function createDefaultStyle(defaultStyle, getModifiers) {
659
665
  var enhance = function enhance(ComponentToWrap) {
660
666
  var DefaultStyleEnhancer = function DefaultStyleEnhancer(_ref) {
661
667
  var style = _ref.style,
662
668
  className = _ref.className,
663
669
  classNames = _ref.classNames,
664
- rest = _objectWithoutProperties(_ref, ["style", "className", "classNames"]);
670
+ rest = _objectWithoutProperties(_ref, _excluded);
665
671
 
666
672
  var modifiers = getModifiers ? getModifiers(rest) : undefined;
667
673
  var styles = useStyles__default(defaultStyle, {
@@ -669,7 +675,7 @@ function createDefaultStyle(defaultStyle, getModifiers) {
669
675
  className: className,
670
676
  classNames: classNames
671
677
  }, modifiers);
672
- return React__default.createElement(ComponentToWrap, _extends({}, rest, {
678
+ return /*#__PURE__*/React__default.createElement(ComponentToWrap, _extends({}, rest, {
673
679
  style: styles
674
680
  }));
675
681
  };
@@ -682,6 +688,10 @@ function createDefaultStyle(defaultStyle, getModifiers) {
682
688
  return enhance;
683
689
  }
684
690
 
691
+ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
692
+
693
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
694
+
685
695
  var _generateComponentKey = function _generateComponentKey(usedKeys, id) {
686
696
  if (!usedKeys.hasOwnProperty(id)) {
687
697
  usedKeys[id] = 0;
@@ -692,17 +702,17 @@ var _generateComponentKey = function _generateComponentKey(usedKeys, id) {
692
702
  return id + '_' + usedKeys[id];
693
703
  };
694
704
 
695
- var Highlighter =
696
- /*#__PURE__*/
697
- function (_Component) {
705
+ var Highlighter = /*#__PURE__*/function (_Component) {
698
706
  _inherits(Highlighter, _Component);
699
707
 
708
+ var _super = _createSuper(Highlighter);
709
+
700
710
  function Highlighter() {
701
711
  var _this;
702
712
 
703
713
  _classCallCheck(this, Highlighter);
704
714
 
705
- _this = _possibleConstructorReturn(this, _getPrototypeOf(Highlighter).apply(this, arguments));
715
+ _this = _super.apply(this, arguments);
706
716
 
707
717
  _defineProperty(_assertThisInitialized(_this), "setCaretElement", function (el) {
708
718
  _this.caretElement = el;
@@ -805,7 +815,7 @@ function (_Component) {
805
815
  resultComponents.push(this.renderHighlighterCaret(components));
806
816
  }
807
817
 
808
- return React__default.createElement("div", _extends({}, style, {
818
+ return /*#__PURE__*/React__default.createElement("div", _extends({}, style, {
809
819
  ref: containerRef
810
820
  }), resultComponents);
811
821
  }
@@ -813,7 +823,7 @@ function (_Component) {
813
823
  key: "renderSubstring",
814
824
  value: function renderSubstring(string, key) {
815
825
  // set substring span to hidden, so that Emojis are not shown double in Mobile Safari
816
- return React__default.createElement("span", _extends({}, this.props.style('substring'), {
826
+ return /*#__PURE__*/React__default.createElement("span", _extends({}, this.props.style('substring'), {
817
827
  key: key
818
828
  }), string);
819
829
  } // Returns a clone of the Mention child applicable for the specified type to be rendered inside the highlighter
@@ -827,13 +837,13 @@ function (_Component) {
827
837
  key: key
828
838
  };
829
839
  var child = React.Children.toArray(this.props.children)[mentionChildIndex];
830
- return React__default.cloneElement(child, props);
840
+ return /*#__PURE__*/React__default.cloneElement(child, props);
831
841
  } // Renders an component to be inserted in the highlighter at the current caret position
832
842
 
833
843
  }, {
834
844
  key: "renderHighlighterCaret",
835
845
  value: function renderHighlighterCaret(children) {
836
- return React__default.createElement("span", _extends({}, this.props.style('caret'), {
846
+ return /*#__PURE__*/React__default.createElement("span", _extends({}, this.props.style('caret'), {
837
847
  ref: this.setCaretElement,
838
848
  key: "caret"
839
849
  }), children);
@@ -882,15 +892,19 @@ var styled = createDefaultStyle({
882
892
  });
883
893
  var Highlighter$1 = styled(Highlighter);
884
894
 
885
- var Suggestion =
886
- /*#__PURE__*/
887
- function (_Component) {
895
+ function _createSuper$1(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$1(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
896
+
897
+ function _isNativeReflectConstruct$1() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
898
+
899
+ var Suggestion = /*#__PURE__*/function (_Component) {
888
900
  _inherits(Suggestion, _Component);
889
901
 
902
+ var _super = _createSuper$1(Suggestion);
903
+
890
904
  function Suggestion() {
891
905
  _classCallCheck(this, Suggestion);
892
906
 
893
- return _possibleConstructorReturn(this, _getPrototypeOf(Suggestion).apply(this, arguments));
907
+ return _super.apply(this, arguments);
894
908
  }
895
909
 
896
910
  _createClass(Suggestion, [{
@@ -898,7 +912,7 @@ function (_Component) {
898
912
  value: function render() {
899
913
  var rest = omit(this.props, ['style', 'classNames', 'className'], // substyle props
900
914
  keys(Suggestion.propTypes));
901
- return React__default.createElement("li", _extends({
915
+ return /*#__PURE__*/React__default.createElement("li", _extends({
902
916
  id: this.props.id,
903
917
  role: "option",
904
918
  "aria-selected": this.props.focused
@@ -950,10 +964,10 @@ function (_Component) {
950
964
  var i = getSubstringIndex(display, query, ignoreAccents);
951
965
 
952
966
  if (i === -1) {
953
- return React__default.createElement("span", style('display'), display);
967
+ return /*#__PURE__*/React__default.createElement("span", style('display'), display);
954
968
  }
955
969
 
956
- return React__default.createElement("span", style('display'), display.substring(0, i), React__default.createElement("b", style('highlight'), display.substring(i, i + query.length)), display.substring(i + query.length));
970
+ return /*#__PURE__*/React__default.createElement("span", style('display'), display.substring(0, i), /*#__PURE__*/React__default.createElement("b", style('highlight'), display.substring(i, i + query.length)), display.substring(i + query.length));
957
971
  }
958
972
  }]);
959
973
 
@@ -985,17 +999,19 @@ var Suggestion$1 = styled$1(Suggestion);
985
999
  function LoadingIndicator() {
986
1000
  var styles = useStyles__default();
987
1001
  var spinnerStyles = styles('spinner');
988
- return React__default.createElement("div", styles, React__default.createElement("div", spinnerStyles, React__default.createElement("div", spinnerStyles(['element', 'element1'])), React__default.createElement("div", spinnerStyles(['element', 'element2'])), React__default.createElement("div", spinnerStyles(['element', 'element3'])), React__default.createElement("div", spinnerStyles(['element', 'element4'])), React__default.createElement("div", spinnerStyles(['element', 'element5']))));
1002
+ return /*#__PURE__*/React__default.createElement("div", styles, /*#__PURE__*/React__default.createElement("div", spinnerStyles, /*#__PURE__*/React__default.createElement("div", spinnerStyles(['element', 'element1'])), /*#__PURE__*/React__default.createElement("div", spinnerStyles(['element', 'element2'])), /*#__PURE__*/React__default.createElement("div", spinnerStyles(['element', 'element3'])), /*#__PURE__*/React__default.createElement("div", spinnerStyles(['element', 'element4'])), /*#__PURE__*/React__default.createElement("div", spinnerStyles(['element', 'element5']))));
989
1003
  }
990
1004
 
991
- var SuggestionsOverlay =
992
- /*#__PURE__*/
993
- function (_Component) {
1005
+ function _createSuper$2(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$2(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
1006
+
1007
+ function _isNativeReflectConstruct$2() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
1008
+
1009
+ var SuggestionsOverlay = /*#__PURE__*/function (_Component) {
994
1010
  _inherits(SuggestionsOverlay, _Component);
995
1011
 
996
- function SuggestionsOverlay() {
997
- var _getPrototypeOf2;
1012
+ var _super = _createSuper$2(SuggestionsOverlay);
998
1013
 
1014
+ function SuggestionsOverlay() {
999
1015
  var _this;
1000
1016
 
1001
1017
  _classCallCheck(this, SuggestionsOverlay);
@@ -1004,7 +1020,7 @@ function (_Component) {
1004
1020
  args[_key] = arguments[_key];
1005
1021
  }
1006
1022
 
1007
- _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(SuggestionsOverlay)).call.apply(_getPrototypeOf2, [this].concat(args)));
1023
+ _this = _super.call.apply(_super, [this].concat(args));
1008
1024
 
1009
1025
  _defineProperty(_assertThisInitialized(_this), "handleMouseEnter", function (index, ev) {
1010
1026
  if (_this.props.onMouseEnter) {
@@ -1060,20 +1076,22 @@ function (_Component) {
1060
1076
  containerRef = _this$props.containerRef,
1061
1077
  position = _this$props.position,
1062
1078
  left = _this$props.left,
1079
+ right = _this$props.right,
1063
1080
  top = _this$props.top; // do not show suggestions until there is some data
1064
1081
 
1065
1082
  if (!isOpened) {
1066
1083
  return null;
1067
1084
  }
1068
1085
 
1069
- return React__default.createElement("div", _extends({}, useStyles.inline({
1086
+ return /*#__PURE__*/React__default.createElement("div", _extends({}, useStyles.inline({
1070
1087
  position: position || 'absolute',
1071
1088
  left: left,
1089
+ right: right,
1072
1090
  top: top
1073
1091
  }, style), {
1074
1092
  onMouseDown: onMouseDown,
1075
1093
  ref: containerRef
1076
- }), React__default.createElement("ul", _extends({
1094
+ }), /*#__PURE__*/React__default.createElement("ul", _extends({
1077
1095
  ref: this.setUlElement,
1078
1096
  id: id,
1079
1097
  role: "listbox",
@@ -1085,13 +1103,15 @@ function (_Component) {
1085
1103
  value: function renderSuggestions() {
1086
1104
  var _this2 = this;
1087
1105
 
1088
- return Object.values(this.props.suggestions).reduce(function (accResults, _ref) {
1106
+ var customSuggestionsContainer = this.props.customSuggestionsContainer;
1107
+ var suggestions = Object.values(this.props.suggestions).reduce(function (accResults, _ref) {
1089
1108
  var results = _ref.results,
1090
1109
  queryInfo = _ref.queryInfo;
1091
1110
  return [].concat(_toConsumableArray(accResults), _toConsumableArray(results.map(function (result, index) {
1092
1111
  return _this2.renderSuggestion(result, queryInfo, accResults.length + index);
1093
1112
  })));
1094
1113
  }, []);
1114
+ if (customSuggestionsContainer) return customSuggestionsContainer(suggestions);else return suggestions;
1095
1115
  }
1096
1116
  }, {
1097
1117
  key: "renderSuggestion",
@@ -1103,7 +1123,7 @@ function (_Component) {
1103
1123
  query = queryInfo.query;
1104
1124
  var renderSuggestion = React.Children.toArray(this.props.children)[childIndex].props.renderSuggestion;
1105
1125
  var ignoreAccents = this.props.ignoreAccents;
1106
- return React__default.createElement(Suggestion$1, {
1126
+ return /*#__PURE__*/React__default.createElement(Suggestion$1, {
1107
1127
  style: this.props.style('item'),
1108
1128
  key: "".concat(childIndex, "-").concat(getID(result)),
1109
1129
  id: getSuggestionHtmlId(this.props.id, index),
@@ -1128,7 +1148,7 @@ function (_Component) {
1128
1148
  return;
1129
1149
  }
1130
1150
 
1131
- return React__default.createElement(LoadingIndicator, {
1151
+ return /*#__PURE__*/React__default.createElement(LoadingIndicator, {
1132
1152
  style: this.props.style('loadingIndicator')
1133
1153
  });
1134
1154
  }
@@ -1144,6 +1164,7 @@ _defineProperty(SuggestionsOverlay, "propTypes", {
1144
1164
  focusIndex: PropTypes.number,
1145
1165
  position: PropTypes.string,
1146
1166
  left: PropTypes.number,
1167
+ right: PropTypes.number,
1147
1168
  top: PropTypes.number,
1148
1169
  scrollFocusedIntoView: PropTypes.bool,
1149
1170
  isLoading: PropTypes.bool,
@@ -1184,9 +1205,13 @@ var styled$2 = createDefaultStyle({
1184
1205
  });
1185
1206
  var SuggestionsOverlay$1 = styled$2(SuggestionsOverlay);
1186
1207
 
1187
- 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; }
1208
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
1209
+
1210
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1188
1211
 
1189
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
1212
+ function _createSuper$3(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$3(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
1213
+
1214
+ function _isNativeReflectConstruct$3() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
1190
1215
  var makeTriggerRegex = function makeTriggerRegex(trigger) {
1191
1216
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1192
1217
 
@@ -1244,6 +1269,7 @@ var propTypes = {
1244
1269
  a11ySuggestionsListLabel: PropTypes.string,
1245
1270
  value: PropTypes.string,
1246
1271
  onKeyDown: PropTypes.func,
1272
+ customSuggestionsContainer: PropTypes.func,
1247
1273
  onSelect: PropTypes.func,
1248
1274
  onBlur: PropTypes.func,
1249
1275
  onChange: PropTypes.func,
@@ -1254,17 +1280,17 @@ var propTypes = {
1254
1280
  children: PropTypes.oneOfType([PropTypes.element, PropTypes.arrayOf(PropTypes.element)]).isRequired
1255
1281
  };
1256
1282
 
1257
- var MentionsInput =
1258
- /*#__PURE__*/
1259
- function (_React$Component) {
1283
+ var MentionsInput = /*#__PURE__*/function (_React$Component) {
1260
1284
  _inherits(MentionsInput, _React$Component);
1261
1285
 
1286
+ var _super = _createSuper$3(MentionsInput);
1287
+
1262
1288
  function MentionsInput(_props) {
1263
1289
  var _this;
1264
1290
 
1265
1291
  _classCallCheck(this, MentionsInput);
1266
1292
 
1267
- _this = _possibleConstructorReturn(this, _getPrototypeOf(MentionsInput).call(this, _props));
1293
+ _this = _super.call(this, _props);
1268
1294
 
1269
1295
  _defineProperty(_assertThisInitialized(_this), "setContainerElement", function (el) {
1270
1296
  _this.containerElement = el;
@@ -1278,7 +1304,7 @@ function (_React$Component) {
1278
1304
 
1279
1305
  var props = omit(_this.props, ['style', 'classNames', 'className'], // substyle props
1280
1306
  keys(propTypes));
1281
- return _objectSpread({}, props, {}, style('input'), {
1307
+ return _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, props), style('input')), {}, {
1282
1308
  value: _this.getPlainText()
1283
1309
  }, !readOnly && !disabled && {
1284
1310
  onChange: _this.handleChange,
@@ -1288,7 +1314,7 @@ function (_React$Component) {
1288
1314
  onCompositionStart: _this.handleCompositionStart,
1289
1315
  onCompositionEnd: _this.handleCompositionEnd,
1290
1316
  onScroll: _this.updateHighlighterScroll
1291
- }, {}, _this.isOpened() && {
1317
+ }), _this.isOpened() && {
1292
1318
  role: 'combobox',
1293
1319
  'aria-controls': _this.uuidSuggestionsOverlay,
1294
1320
  'aria-expanded': true,
@@ -1305,18 +1331,18 @@ function (_React$Component) {
1305
1331
 
1306
1332
  var inputProps = _this.getInputProps();
1307
1333
 
1308
- return React__default.createElement("div", style('control'), _this.renderHighlighter(), singleLine ? _this.renderInput(inputProps) : _this.renderTextarea(inputProps));
1334
+ return /*#__PURE__*/React__default.createElement("div", style('control'), _this.renderHighlighter(), singleLine ? _this.renderInput(inputProps) : _this.renderTextarea(inputProps));
1309
1335
  });
1310
1336
 
1311
1337
  _defineProperty(_assertThisInitialized(_this), "renderInput", function (props) {
1312
- return React__default.createElement("input", _extends({
1338
+ return /*#__PURE__*/React__default.createElement("input", _extends({
1313
1339
  type: "text",
1314
1340
  ref: _this.setInputRef
1315
1341
  }, props));
1316
1342
  });
1317
1343
 
1318
1344
  _defineProperty(_assertThisInitialized(_this), "renderTextarea", function (props) {
1319
- return React__default.createElement("textarea", _extends({
1345
+ return /*#__PURE__*/React__default.createElement("textarea", _extends({
1320
1346
  ref: _this.setInputRef
1321
1347
  }, props));
1322
1348
  });
@@ -1345,17 +1371,20 @@ function (_React$Component) {
1345
1371
  var _this$state$suggestio = _this.state.suggestionsPosition,
1346
1372
  position = _this$state$suggestio.position,
1347
1373
  left = _this$state$suggestio.left,
1348
- top = _this$state$suggestio.top;
1349
- var suggestionsNode = React__default.createElement(SuggestionsOverlay$1, {
1374
+ top = _this$state$suggestio.top,
1375
+ right = _this$state$suggestio.right;
1376
+ var suggestionsNode = /*#__PURE__*/React__default.createElement(SuggestionsOverlay$1, {
1350
1377
  id: _this.uuidSuggestionsOverlay,
1351
1378
  style: _this.props.style('suggestions'),
1352
1379
  position: position,
1353
1380
  left: left,
1354
1381
  top: top,
1382
+ right: right,
1355
1383
  focusIndex: _this.state.focusIndex,
1356
1384
  scrollFocusedIntoView: _this.state.scrollFocusedIntoView,
1357
1385
  containerRef: _this.setSuggestionsElement,
1358
1386
  suggestions: _this.state.suggestions,
1387
+ customSuggestionsContainer: _this.props.customSuggestionsContainer,
1359
1388
  onSelect: _this.addMention,
1360
1389
  onMouseDown: _this.handleSuggestionsMouseDown,
1361
1390
  onMouseEnter: _this.handleSuggestionsMouseEnter,
@@ -1366,7 +1395,7 @@ function (_React$Component) {
1366
1395
  }, _this.props.children);
1367
1396
 
1368
1397
  if (_this.props.suggestionsPortalHost) {
1369
- return ReactDOM.createPortal(suggestionsNode, _this.props.suggestionsPortalHost);
1398
+ return /*#__PURE__*/ReactDOM.createPortal(suggestionsNode, _this.props.suggestionsPortalHost);
1370
1399
  } else {
1371
1400
  return suggestionsNode;
1372
1401
  }
@@ -1381,7 +1410,7 @@ function (_React$Component) {
1381
1410
  children = _this$props3.children,
1382
1411
  value = _this$props3.value,
1383
1412
  style = _this$props3.style;
1384
- return React__default.createElement(Highlighter$1, {
1413
+ return /*#__PURE__*/React__default.createElement(Highlighter$1, {
1385
1414
  containerRef: _this.setHighlighterElement,
1386
1415
  style: style('highlighter'),
1387
1416
  value: value,
@@ -1425,13 +1454,16 @@ function (_React$Component) {
1425
1454
  });
1426
1455
 
1427
1456
  _defineProperty(_assertThisInitialized(_this), "handleChange", function (ev) {
1428
- isComposing = false; // if we are inside iframe, we need to find activeElement within its contentDocument
1457
+ isComposing = false;
1429
1458
 
1430
- var currentDocument = document.activeElement && document.activeElement.contentDocument || document;
1459
+ if (isIE()) {
1460
+ // if we are inside iframe, we need to find activeElement within its contentDocument
1461
+ var currentDocument = document.activeElement && document.activeElement.contentDocument || document;
1431
1462
 
1432
- if (currentDocument.activeElement !== ev.target) {
1433
- // fix an IE bug (blur from empty input element with placeholder attribute trigger "input" event)
1434
- return;
1463
+ if (currentDocument.activeElement !== ev.target) {
1464
+ // fix an IE bug (blur from empty input element with placeholder attribute trigger "input" event)
1465
+ return;
1466
+ }
1435
1467
  }
1436
1468
 
1437
1469
  var value = _this.props.value || '';
@@ -1455,7 +1487,7 @@ function (_React$Component) {
1455
1487
 
1456
1488
  if (startOfMention !== undefined && _this.state.selectionEnd > startOfMention) {
1457
1489
  // only if a deletion has taken place
1458
- selectionStart = startOfMention;
1490
+ selectionStart = startOfMention + (ev.nativeEvent.data ? ev.nativeEvent.data.length : 0);
1459
1491
  selectionEnd = selectionStart;
1460
1492
  setSelectionAfterMentionChange = true;
1461
1493
  }
@@ -1815,7 +1847,7 @@ function (_React$Component) {
1815
1847
  if (queryId !== _this._queryId) return; // save in property so that multiple sync state updates from different mentions sources
1816
1848
  // won't overwrite each other
1817
1849
 
1818
- _this.suggestions = _objectSpread({}, _this.suggestions, _defineProperty({}, childIndex, {
1850
+ _this.suggestions = _objectSpread(_objectSpread({}, _this.suggestions), {}, _defineProperty({}, childIndex, {
1819
1851
  queryInfo: {
1820
1852
  childIndex: childIndex,
1821
1853
  query: query,
@@ -1961,7 +1993,7 @@ function (_React$Component) {
1961
1993
  }, {
1962
1994
  key: "render",
1963
1995
  value: function render() {
1964
- return React__default.createElement("div", _extends({
1996
+ return /*#__PURE__*/React__default.createElement("div", _extends({
1965
1997
  ref: this.setContainerElement
1966
1998
  }, this.props.style), this.renderControl(), this.renderSuggestionsOverlay());
1967
1999
  }
@@ -1991,18 +2023,23 @@ function (_React$Component) {
1991
2023
  var newValue = spliceString(value, markupStartIndex, markupEndIndex, pastedMentions || pastedData).replace(/\r/g, '');
1992
2024
  var newPlainTextValue = getPlainText(newValue, config);
1993
2025
  var eventMock = {
1994
- target: _objectSpread({}, event.target, {
2026
+ target: _objectSpread(_objectSpread({}, event.target), {}, {
1995
2027
  value: newValue
1996
2028
  })
1997
2029
  };
1998
- this.executeOnChange(eventMock, newValue, newPlainTextValue, getMentions(newValue, config));
2030
+ this.executeOnChange(eventMock, newValue, newPlainTextValue, getMentions(newValue, config)); // Move the cursor position to the end of the pasted data
2031
+
2032
+ var startOfMention = findStartOfMentionInPlainText(value, config, selectionStart);
2033
+ var nextPos = (startOfMention || selectionStart) + getPlainText(pastedMentions || pastedData, config).length;
2034
+ this.setSelection(nextPos, nextPos);
1999
2035
  }
2000
2036
  }, {
2001
2037
  key: "saveSelectionToClipboard",
2002
2038
  value: function saveSelectionToClipboard(event) {
2003
- var _this$state4 = this.state,
2004
- selectionStart = _this$state4.selectionStart,
2005
- selectionEnd = _this$state4.selectionEnd;
2039
+ // use the actual selectionStart & selectionEnd instead of the one stored
2040
+ // in state to ensure copy & paste also works on disabled inputs & textareas
2041
+ var selectionStart = this.inputElement.selectionStart;
2042
+ var selectionEnd = this.inputElement.selectionEnd;
2006
2043
  var _this$props8 = this.props,
2007
2044
  children = _this$props8.children,
2008
2045
  value = _this$props8.value;
@@ -2044,9 +2081,9 @@ function (_React$Component) {
2044
2081
 
2045
2082
  event.preventDefault();
2046
2083
  this.saveSelectionToClipboard(event);
2047
- var _this$state5 = this.state,
2048
- selectionStart = _this$state5.selectionStart,
2049
- selectionEnd = _this$state5.selectionEnd;
2084
+ var _this$state4 = this.state,
2085
+ selectionStart = _this$state4.selectionStart,
2086
+ selectionEnd = _this$state4.selectionEnd;
2050
2087
  var _this$props9 = this.props,
2051
2088
  children = _this$props9.children,
2052
2089
  value = _this$props9.value;
@@ -2056,7 +2093,7 @@ function (_React$Component) {
2056
2093
  var newValue = [value.slice(0, markupStartIndex), value.slice(markupEndIndex)].join('');
2057
2094
  var newPlainTextValue = getPlainText(newValue, config);
2058
2095
  var eventMock = {
2059
- target: _objectSpread({}, event.target, {
2096
+ target: _objectSpread(_objectSpread({}, event.target), {}, {
2060
2097
  value: newPlainTextValue
2061
2098
  })
2062
2099
  };
@@ -2146,7 +2183,7 @@ var Mention = function Mention(_ref) {
2146
2183
  className: className,
2147
2184
  classNames: classNames
2148
2185
  });
2149
- return React__default.createElement("strong", styles, display);
2186
+ return /*#__PURE__*/React__default.createElement("strong", styles, display);
2150
2187
  };
2151
2188
 
2152
2189
  Mention.propTypes = {