react-mentions 3.1.0 → 3.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -6,7 +6,6 @@ function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'defau
6
6
 
7
7
  var _toConsumableArray = _interopDefault(require('@babel/runtime/helpers/toConsumableArray'));
8
8
  var _extends = _interopDefault(require('@babel/runtime/helpers/extends'));
9
- var _objectSpread = _interopDefault(require('@babel/runtime/helpers/objectSpread'));
10
9
  var _classCallCheck = _interopDefault(require('@babel/runtime/helpers/classCallCheck'));
11
10
  var _createClass = _interopDefault(require('@babel/runtime/helpers/createClass'));
12
11
  var _possibleConstructorReturn = _interopDefault(require('@babel/runtime/helpers/possibleConstructorReturn'));
@@ -14,19 +13,19 @@ var _getPrototypeOf = _interopDefault(require('@babel/runtime/helpers/getPrototy
14
13
  var _assertThisInitialized = _interopDefault(require('@babel/runtime/helpers/assertThisInitialized'));
15
14
  var _inherits = _interopDefault(require('@babel/runtime/helpers/inherits'));
16
15
  var _defineProperty = _interopDefault(require('@babel/runtime/helpers/defineProperty'));
17
- var isEqual = _interopDefault(require('lodash/isEqual'));
18
- var isNumber = _interopDefault(require('lodash/isNumber'));
19
- var keys = _interopDefault(require('lodash/keys'));
20
- var omit = _interopDefault(require('lodash/omit'));
21
- var values = _interopDefault(require('lodash/values'));
22
- var PropTypes = _interopDefault(require('prop-types'));
23
16
  var React = require('react');
24
17
  var React__default = _interopDefault(React);
25
- var ReactDOM = _interopDefault(require('react-dom'));
26
- var substyle = require('substyle');
27
- var substyle__default = _interopDefault(substyle);
28
18
  var invariant = _interopDefault(require('invariant'));
29
19
  var _slicedToArray = _interopDefault(require('@babel/runtime/helpers/slicedToArray'));
20
+ var PropTypes = _interopDefault(require('prop-types'));
21
+ var substyle = require('substyle');
22
+ var substyle__default = _interopDefault(substyle);
23
+ var isEqual = _interopDefault(require('lodash/isEqual'));
24
+ var isNumber = _interopDefault(require('lodash/isNumber'));
25
+ var ReactDOM = _interopDefault(require('react-dom'));
26
+ var omit = _interopDefault(require('lodash/omit'));
27
+ var keys = _interopDefault(require('lodash/keys'));
28
+ var values = _interopDefault(require('lodash/values'));
30
29
 
31
30
  // escape RegExp special characters https://stackoverflow.com/a/9310752/5142490
32
31
  var escapeRegex = function escapeRegex(str) {
@@ -336,6 +335,304 @@ var makeMentionsMarkup = function makeMentionsMarkup(markup, id, display) {
336
335
  return markup.replace(PLACEHOLDERS.id, id).replace(PLACEHOLDERS.display, display);
337
336
  };
338
337
 
338
+ // This contains all the latin letters and the regex that match these letters with diacritics
339
+ // https://stackoverflow.com/questions/990904/remove-accents-diacritics-in-a-string-in-javascript
340
+ var lettersDiacritics = [{
341
+ base: 'A',
342
+ letters: /(A|Ⓐ|A|À|Á|Â|Ầ|Ấ|Ẫ|Ẩ|Ã|Ā|Ă|Ằ|Ắ|Ẵ|Ẳ|Ȧ|Ǡ|Ä|Ǟ|Ả|Å|Ǻ|Ǎ|Ȁ|Ȃ|Ạ|Ậ|Ặ|Ḁ|Ą|Ⱥ|Ɐ|[\u0041\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F])/g
343
+ }, {
344
+ base: 'AA',
345
+ letters: /(Ꜳ|[\uA732])/g
346
+ }, {
347
+ base: 'AE',
348
+ letters: /(Æ|Ǽ|Ǣ|[\u00C6\u01FC\u01E2])/g
349
+ }, {
350
+ base: 'AO',
351
+ letters: /(Ꜵ|[\uA734])/g
352
+ }, {
353
+ base: 'AU',
354
+ letters: /(Ꜷ|[\uA736])/g
355
+ }, {
356
+ base: 'AV',
357
+ letters: /(Ꜹ|Ꜻ|[\uA738\uA73A])/g
358
+ }, {
359
+ base: 'AY',
360
+ letters: /(Ꜽ|[\uA73C])/g
361
+ }, {
362
+ base: 'B',
363
+ letters: /(B|Ⓑ|B|Ḃ|Ḅ|Ḇ|Ƀ|Ƃ|Ɓ|[\u0042\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0182\u0181])/g
364
+ }, {
365
+ base: 'C',
366
+ letters: /(C|Ⓒ|C|Ć|Ĉ|Ċ|Č|Ç|Ḉ|Ƈ|Ȼ|Ꜿ|[\u0043\u24B8\uFF23\u0106\u0108\u010A\u010C\u00C7\u1E08\u0187\u023B\uA73E])/g
367
+ }, {
368
+ base: 'D',
369
+ letters: /(D|Ⓓ|D|Ḋ|Ď|Ḍ|Ḑ|Ḓ|Ḏ|Đ|Ƌ|Ɗ|Ɖ|Ꝺ|Ð|[\u0044\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018B\u018A\u0189\uA779\u00D0])/g
370
+ }, {
371
+ base: 'DZ',
372
+ letters: /(DZ|DŽ|[\u01F1\u01C4])/g
373
+ }, {
374
+ base: 'Dz',
375
+ letters: /(Dz|Dž|[\u01F2\u01C5])/g
376
+ }, {
377
+ base: 'E',
378
+ letters: /(E|Ⓔ|E|È|É|Ê|Ề|Ế|Ễ|Ể|Ẽ|Ē|Ḕ|Ḗ|Ĕ|Ė|Ë|Ẻ|Ě|Ȅ|Ȇ|Ẹ|Ệ|Ȩ|Ḝ|Ę|Ḙ|Ḛ|Ɛ|Ǝ|[\u0045\u24BA\uFF25\u00C8\u00C9\u00CA\u1EC0\u1EBE\u1EC4\u1EC2\u1EBC\u0112\u1E14\u1E16\u0114\u0116\u00CB\u1EBA\u011A\u0204\u0206\u1EB8\u1EC6\u0228\u1E1C\u0118\u1E18\u1E1A\u0190\u018E])/g
379
+ }, {
380
+ base: 'F',
381
+ letters: /(F|Ⓕ|F|Ḟ|Ƒ|Ꝼ|[\u0046\u24BB\uFF26\u1E1E\u0191\uA77B])/g
382
+ }, {
383
+ base: 'G',
384
+ letters: /(G|Ⓖ|G|Ǵ|Ĝ|Ḡ|Ğ|Ġ|Ǧ|Ģ|Ǥ|Ɠ|Ꞡ|Ᵹ|Ꝿ|[\u0047\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E])/g
385
+ }, {
386
+ base: 'H',
387
+ letters: /(H|Ⓗ|H|Ĥ|Ḣ|Ḧ|Ȟ|Ḥ|Ḩ|Ḫ|Ħ|Ⱨ|Ⱶ|Ɥ|[\u0048\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D])/g
388
+ }, {
389
+ base: 'I',
390
+ letters: /(I|Ⓘ|I|Ì|Í|Î|Ĩ|Ī|Ĭ|İ|Ï|Ḯ|Ỉ|Ǐ|Ȉ|Ȋ|Ị|Į|Ḭ|Ɨ|[\u0049\u24BE\uFF29\u00CC\u00CD\u00CE\u0128\u012A\u012C\u0130\u00CF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197])/g
391
+ }, {
392
+ base: 'J',
393
+ letters: /(J|Ⓙ|J|Ĵ|Ɉ|[\u004A\u24BF\uFF2A\u0134\u0248])/g
394
+ }, {
395
+ base: 'K',
396
+ letters: /(K|Ⓚ|K|Ḱ|Ǩ|Ḳ|Ķ|Ḵ|Ƙ|Ⱪ|Ꝁ|Ꝃ|Ꝅ|Ꞣ|[\u004B\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2])/g
397
+ }, {
398
+ base: 'L',
399
+ letters: /(L|Ⓛ|L|Ŀ|Ĺ|Ľ|Ḷ|Ḹ|Ļ|Ḽ|Ḻ|Ł|Ƚ|Ɫ|Ⱡ|Ꝉ|Ꝇ|Ꞁ|[\u004C\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780])/g
400
+ }, {
401
+ base: 'LJ',
402
+ letters: /(LJ|[\u01C7])/g
403
+ }, {
404
+ base: 'Lj',
405
+ letters: /(Lj|[\u01C8])/g
406
+ }, {
407
+ base: 'M',
408
+ letters: /(M|Ⓜ|M|Ḿ|Ṁ|Ṃ|Ɱ|Ɯ|[\u004D\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C])/g
409
+ }, {
410
+ base: 'N',
411
+ letters: /(N|Ⓝ|N|Ǹ|Ń|Ñ|Ṅ|Ň|Ṇ|Ņ|Ṋ|Ṉ|Ƞ|Ɲ|Ꞑ|Ꞥ|Ŋ|[\u004E\u24C3\uFF2E\u01F8\u0143\u00D1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u0220\u019D\uA790\uA7A4\u014A])/g
412
+ }, {
413
+ base: 'NJ',
414
+ letters: /(NJ|[\u01CA])/g
415
+ }, {
416
+ base: 'Nj',
417
+ letters: /(Nj|[\u01CB])/g
418
+ }, {
419
+ base: 'O',
420
+ letters: /(O|Ⓞ|O|Ò|Ó|Ô|Ồ|Ố|Ỗ|Ổ|Õ|Ṍ|Ȭ|Ṏ|Ō|Ṑ|Ṓ|Ŏ|Ȯ|Ȱ|Ö|Ȫ|Ỏ|Ő|Ǒ|Ȍ|Ȏ|Ơ|Ờ|Ớ|Ỡ|Ở|Ợ|Ọ|Ộ|Ǫ|Ǭ|Ø|Ǿ|Ɔ|Ɵ|Ꝋ|Ꝍ|[\u004F\u24C4\uFF2F\u00D2\u00D3\u00D4\u1ED2\u1ED0\u1ED6\u1ED4\u00D5\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u014E\u022E\u0230\u00D6\u022A\u1ECE\u0150\u01D1\u020C\u020E\u01A0\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\u00D8\u01FE\u0186\u019F\uA74A\uA74C])/g
421
+ }, {
422
+ base: 'OE',
423
+ letters: /(Œ|[\u0152])/g
424
+ }, {
425
+ base: 'OI',
426
+ letters: /(Ƣ|[\u01A2])/g
427
+ }, {
428
+ base: 'OO',
429
+ letters: /(Ꝏ|[\uA74E])/g
430
+ }, {
431
+ base: 'OU',
432
+ letters: /(Ȣ|[\u0222])/g
433
+ }, {
434
+ base: 'P',
435
+ letters: /(P|Ⓟ|P|Ṕ|Ṗ|Ƥ|Ᵽ|Ꝑ|Ꝓ|Ꝕ|[\u0050\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754])/g
436
+ }, {
437
+ base: 'Q',
438
+ letters: /(Q|Ⓠ|Q|Ꝗ|Ꝙ|Ɋ|[\u0051\u24C6\uFF31\uA756\uA758\u024A])/g
439
+ }, {
440
+ base: 'R',
441
+ letters: /(R|Ⓡ|R|Ŕ|Ṙ|Ř|Ȑ|Ȓ|Ṛ|Ṝ|Ŗ|Ṟ|Ɍ|Ɽ|Ꝛ|Ꞧ|Ꞃ|[\u0052\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782])/g
442
+ }, {
443
+ base: 'S',
444
+ letters: /(S|Ⓢ|S|ẞ|Ś|Ṥ|Ŝ|Ṡ|Š|Ṧ|Ṣ|Ṩ|Ș|Ş|Ȿ|Ꞩ|Ꞅ|[\u0053\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784])/g
445
+ }, {
446
+ base: 'T',
447
+ letters: /(T|Ⓣ|T|Ṫ|Ť|Ṭ|Ț|Ţ|Ṱ|Ṯ|Ŧ|Ƭ|Ʈ|Ⱦ|Ꞇ|[\u0054\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786])/g
448
+ }, {
449
+ base: 'TH',
450
+ letters: /(Þ|[\u00DE])/g
451
+ }, {
452
+ base: 'TZ',
453
+ letters: /(Ꜩ|[\uA728])/g
454
+ }, {
455
+ base: 'U',
456
+ letters: /(U|Ⓤ|U|Ù|Ú|Û|Ũ|Ṹ|Ū|Ṻ|Ŭ|Ü|Ǜ|Ǘ|Ǖ|Ǚ|Ủ|Ů|Ű|Ǔ|Ȕ|Ȗ|Ư|Ừ|Ứ|Ữ|Ử|Ự|Ụ|Ṳ|Ų|Ṷ|Ṵ|Ʉ|[\u0055\u24CA\uFF35\u00D9\u00DA\u00DB\u0168\u1E78\u016A\u1E7A\u016C\u00DC\u01DB\u01D7\u01D5\u01D9\u1EE6\u016E\u0170\u01D3\u0214\u0216\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244])/g
457
+ }, {
458
+ base: 'V',
459
+ letters: /(V|Ⓥ|V|Ṽ|Ṿ|Ʋ|Ꝟ|Ʌ|[\u0056\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245])/g
460
+ }, {
461
+ base: 'VY',
462
+ letters: /(Ꝡ|[\uA760])/g
463
+ }, {
464
+ base: 'W',
465
+ letters: /(W|Ⓦ|W|Ẁ|Ẃ|Ŵ|Ẇ|Ẅ|Ẉ|Ⱳ|[\u0057\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72])/g
466
+ }, {
467
+ base: 'X',
468
+ letters: /(X|Ⓧ|X|Ẋ|Ẍ|[\u0058\u24CD\uFF38\u1E8A\u1E8C])/g
469
+ }, {
470
+ base: 'Y',
471
+ letters: /(Y|Ⓨ|Y|Ỳ|Ý|Ŷ|Ỹ|Ȳ|Ẏ|Ÿ|Ỷ|Ỵ|Ƴ|Ɏ|Ỿ|[\u0059\u24CE\uFF39\u1EF2\u00DD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE])/g
472
+ }, {
473
+ base: 'Z',
474
+ letters: /(Z|Ⓩ|Z|Ź|Ẑ|Ż|Ž|Ẓ|Ẕ|Ƶ|Ȥ|Ɀ|Ⱬ|Ꝣ|[\u005A\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762])/g
475
+ }, {
476
+ base: 'a',
477
+ letters: /(a|ⓐ|a|ẚ|à|á|â|ầ|ấ|ẫ|ẩ|ã|ā|ă|ằ|ắ|ẵ|ẳ|ȧ|ǡ|ä|ǟ|ả|å|ǻ|ǎ|ȁ|ȃ|ạ|ậ|ặ|ḁ|ą|ⱥ|ɐ|[\u0061\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250])/g
478
+ }, {
479
+ base: 'aa',
480
+ letters: /(ꜳ|[\uA733])/g
481
+ }, {
482
+ base: 'ae',
483
+ letters: /(æ|ǽ|ǣ|[\u00E6\u01FD\u01E3])/g
484
+ }, {
485
+ base: 'ao',
486
+ letters: /(ꜵ|[\uA735])/g
487
+ }, {
488
+ base: 'au',
489
+ letters: /(ꜷ|[\uA737])/g
490
+ }, {
491
+ base: 'av',
492
+ letters: /(ꜹ|ꜻ|[\uA739\uA73B])/g
493
+ }, {
494
+ base: 'ay',
495
+ letters: /(ꜽ|[\uA73D])/g
496
+ }, {
497
+ base: 'b',
498
+ letters: /(b|ⓑ|b|ḃ|ḅ|ḇ|ƀ|ƃ|ɓ|[\u0062\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253])/g
499
+ }, {
500
+ base: 'c',
501
+ letters: /(c|ⓒ|c|ć|ĉ|ċ|č|ç|ḉ|ƈ|ȼ|ꜿ|ↄ|[\u0063\u24D2\uFF43\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184])/g
502
+ }, {
503
+ base: 'd',
504
+ letters: /(d|ⓓ|d|ḋ|ď|ḍ|ḑ|ḓ|ḏ|đ|ƌ|ɖ|ɗ|ꝺ|ð|[\u0064\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\uA77A\u00F0])/g
505
+ }, {
506
+ base: 'dz',
507
+ letters: /(dz|dž|[\u01F3\u01C6])/g
508
+ }, {
509
+ base: 'e',
510
+ letters: /(e|ⓔ|e|è|é|ê|ề|ế|ễ|ể|ẽ|ē|ḕ|ḗ|ĕ|ė|ë|ẻ|ě|ȅ|ȇ|ẹ|ệ|ȩ|ḝ|ę|ḙ|ḛ|ɇ|ɛ|ǝ|[\u0065\u24D4\uFF45\u00E8\u00E9\u00EA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u025B\u01DD])/g
511
+ }, {
512
+ base: 'f',
513
+ letters: /(f|ⓕ|f|ḟ|ƒ|ꝼ|[\u0066\u24D5\uFF46\u1E1F\u0192\uA77C])/g
514
+ }, {
515
+ base: 'g',
516
+ letters: /(g|ⓖ|g|ǵ|ĝ|ḡ|ğ|ġ|ǧ|ģ|ǥ|ɠ|ꞡ|ᵹ|ꝿ|[\u0067\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\u1D79\uA77F])/g
517
+ }, {
518
+ base: 'h',
519
+ letters: /(h|ⓗ|h|ĥ|ḣ|ḧ|ȟ|ḥ|ḩ|ḫ|ẖ|ħ|ⱨ|ⱶ|ɥ|[\u0068\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265])/g
520
+ }, {
521
+ base: 'hv',
522
+ letters: /(ƕ|[\u0195])/g
523
+ }, {
524
+ base: 'i',
525
+ letters: /(i|ⓘ|i|ì|í|î|ĩ|ī|ĭ|ï|ḯ|ỉ|ǐ|ȉ|ȋ|ị|į|ḭ|ɨ|ı|[\u0069\u24D8\uFF49\u00EC\u00ED\u00EE\u0129\u012B\u012D\u00EF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131])/g
526
+ }, {
527
+ base: 'ij',
528
+ letters: /(ij|[\u0133])/g
529
+ }, {
530
+ base: 'j',
531
+ letters: /(j|ⓙ|j|ĵ|ǰ|ɉ|[\u006A\u24D9\uFF4A\u0135\u01F0\u0249])/g
532
+ }, {
533
+ base: 'k',
534
+ letters: /(k|ⓚ|k|ḱ|ǩ|ḳ|ķ|ḵ|ƙ|ⱪ|ꝁ|ꝃ|ꝅ|ꞣ|[\u006B\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3])/g
535
+ }, {
536
+ base: 'l',
537
+ letters: /(l|ⓛ|l|ŀ|ĺ|ľ|ḷ|ḹ|ļ|ḽ|ḻ|ł|ƚ|ɫ|ⱡ|ꝉ|ꞁ|ꝇ|[\u006C\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u0142\u019A\u026B\u2C61\uA749\uA781\uA747])/g
538
+ }, {
539
+ base: 'lj',
540
+ letters: /(lj|[\u01C9])/g
541
+ }, {
542
+ base: 'm',
543
+ letters: /(m|ⓜ|m|ḿ|ṁ|ṃ|ɱ|ɯ|[\u006D\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F])/g
544
+ }, {
545
+ base: 'n',
546
+ letters: /(n|ⓝ|n|ǹ|ń|ñ|ṅ|ň|ṇ|ņ|ṋ|ṉ|ƞ|ɲ|ʼn|ꞑ|ꞥ|ŋ|[\u006E\u24DD\uFF4E\u01F9\u0144\u00F1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5\u014B])/g
547
+ }, {
548
+ base: 'nj',
549
+ letters: /(nj|[\u01CC])/g
550
+ }, {
551
+ base: 'o',
552
+ letters: /(o|ⓞ|o|ò|ó|ô|ồ|ố|ỗ|ổ|õ|ṍ|ȭ|ṏ|ō|ṑ|ṓ|ŏ|ȯ|ȱ|ö|ȫ|ỏ|ő|ǒ|ȍ|ȏ|ơ|ờ|ớ|ỡ|ở|ợ|ọ|ộ|ǫ|ǭ|ø|ǿ|ɔ|ꝋ|ꝍ|ɵ|[\u006F\u24DE\uFF4F\u00F2\u00F3\u00F4\u1ED3\u1ED1\u1ED7\u1ED5\u00F5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\u00F6\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\u00F8\u01FF\u0254\uA74B\uA74D\u0275])/g
553
+ }, {
554
+ base: 'oe',
555
+ letters: /(œ|[\u0153])/g
556
+ }, {
557
+ base: 'oi',
558
+ letters: /(ƣ|[\u01A3])/g
559
+ }, {
560
+ base: 'ou',
561
+ letters: /(ȣ|[\u0223])/g
562
+ }, {
563
+ base: 'oo',
564
+ letters: /(ꝏ|[\uA74F])/g
565
+ }, {
566
+ base: 'p',
567
+ letters: /(p|ⓟ|p|ṕ|ṗ|ƥ|ᵽ|ꝑ|ꝓ|ꝕ|[\u0070\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755])/g
568
+ }, {
569
+ base: 'q',
570
+ letters: /(q|ⓠ|q|ɋ|ꝗ|ꝙ|[\u0071\u24E0\uFF51\u024B\uA757\uA759])/g
571
+ }, {
572
+ base: 'r',
573
+ letters: /(r|ⓡ|r|ŕ|ṙ|ř|ȑ|ȓ|ṛ|ṝ|ŗ|ṟ|ɍ|ɽ|ꝛ|ꞧ|ꞃ|[\u0072\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783])/g
574
+ }, {
575
+ base: 's',
576
+ letters: /(s|ⓢ|s|ś|ṥ|ŝ|ṡ|š|ṧ|ṣ|ṩ|ș|ş|ȿ|ꞩ|ꞅ|ẛ|ſ|[\u0073\u24E2\uFF53\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B\u017F])/g
577
+ }, {
578
+ base: 'ss',
579
+ letters: /(ß|[\u00DF])/g
580
+ }, {
581
+ base: 't',
582
+ letters: /(t|ⓣ|t|ṫ|ẗ|ť|ṭ|ț|ţ|ṱ|ṯ|ŧ|ƭ|ʈ|ⱦ|ꞇ|[\u0074\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787])/g
583
+ }, {
584
+ base: 'th',
585
+ letters: /(þ|[\u00FE])/g
586
+ }, {
587
+ base: 'tz',
588
+ letters: /(ꜩ|[\uA729])/g
589
+ }, {
590
+ base: 'u',
591
+ letters: /(u|ⓤ|u|ù|ú|û|ũ|ṹ|ū|ṻ|ŭ|ü|ǜ|ǘ|ǖ|ǚ|ủ|ů|ű|ǔ|ȕ|ȗ|ư|ừ|ứ|ữ|ử|ự|ụ|ṳ|ų|ṷ|ṵ|ʉ|[\u0075\u24E4\uFF55\u00F9\u00FA\u00FB\u0169\u1E79\u016B\u1E7B\u016D\u00FC\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289])/g
592
+ }, {
593
+ base: 'v',
594
+ letters: /(v|ⓥ|v|ṽ|ṿ|ʋ|ꝟ|ʌ|[\u0076\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C])/g
595
+ }, {
596
+ base: 'vy',
597
+ letters: /(ꝡ|[\uA761])/g
598
+ }, {
599
+ base: 'w',
600
+ letters: /(w|ⓦ|w|ẁ|ẃ|ŵ|ẇ|ẅ|ẘ|ẉ|ⱳ|[\u0077\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73])/g
601
+ }, {
602
+ base: 'x',
603
+ letters: /(x|ⓧ|x|ẋ|ẍ|[\u0078\u24E7\uFF58\u1E8B\u1E8D])/g
604
+ }, {
605
+ base: 'y',
606
+ letters: /(y|ⓨ|y|ỳ|ý|ŷ|ỹ|ȳ|ẏ|ÿ|ỷ|ẙ|ỵ|ƴ|ɏ|ỿ|[\u0079\u24E8\uFF59\u1EF3\u00FD\u0177\u1EF9\u0233\u1E8F\u00FF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF])/g
607
+ }, {
608
+ base: 'z',
609
+ letters: /(z|ⓩ|z|ź|ẑ|ż|ž|ẓ|ẕ|ƶ|ȥ|ɀ|ⱬ|ꝣ|[\u007A\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763])/g
610
+ }];
611
+
612
+ var removeAccents = function removeAccents(str) {
613
+ var formattedStr = str;
614
+ lettersDiacritics.forEach(function (letterDiacritics) {
615
+ formattedStr = formattedStr.replace(letterDiacritics.letters, letterDiacritics.base);
616
+ });
617
+ return formattedStr;
618
+ };
619
+
620
+ var normalizeString = function normalizeString(str) {
621
+ return removeAccents(str).toLowerCase();
622
+ };
623
+
624
+ var getSubstringIndex = function getSubstringIndex(str, substr, ignoreAccents) {
625
+ if (!ignoreAccents) {
626
+ return str.toLowerCase().indexOf(substr.toLowerCase());
627
+ }
628
+
629
+ return normalizeString(str).indexOf(normalizeString(substr));
630
+ };
631
+
632
+ 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; }
633
+
634
+ 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; }
635
+
339
636
  var _generateComponentKey = function _generateComponentKey(usedKeys, id) {
340
637
  if (!usedKeys.hasOwnProperty(id)) {
341
638
  usedKeys[id] = 0;
@@ -453,7 +750,7 @@ function (_Component) {
453
750
  }
454
751
 
455
752
  return React__default.createElement("div", _extends({}, style, {
456
- style: _objectSpread({}, inputStyle, style.style)
753
+ style: _objectSpread({}, inputStyle, {}, style.style)
457
754
  }), resultComponents);
458
755
  }
459
756
  }, {
@@ -588,9 +885,10 @@ function (_Component) {
588
885
  key: "renderHighlightedDisplay",
589
886
  value: function renderHighlightedDisplay(display) {
590
887
  var _this$props2 = this.props,
888
+ ignoreAccents = _this$props2.ignoreAccents,
591
889
  query = _this$props2.query,
592
890
  style = _this$props2.style;
593
- var i = display.toLowerCase().indexOf(query.toLowerCase());
891
+ var i = getSubstringIndex(display, query, ignoreAccents);
594
892
 
595
893
  if (i === -1) {
596
894
  return React__default.createElement("span", style('display'), display);
@@ -607,6 +905,7 @@ _defineProperty(Suggestion, "propTypes", {
607
905
  id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,
608
906
  query: PropTypes.string.isRequired,
609
907
  index: PropTypes.number.isRequired,
908
+ ignoreAccents: PropTypes.bool,
610
909
  suggestion: PropTypes.oneOfType([PropTypes.string, PropTypes.shape({
611
910
  id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,
612
911
  display: PropTypes.string
@@ -632,6 +931,10 @@ function LoadingIndicator(_ref) {
632
931
 
633
932
  var LoadingIndicator$1 = substyle__default(LoadingIndicator);
634
933
 
934
+ function ownKeys$1(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; }
935
+
936
+ function _objectSpread$1(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$1(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$1(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
937
+
635
938
  var SuggestionsOverlay =
636
939
  /*#__PURE__*/
637
940
  function (_Component) {
@@ -714,12 +1017,14 @@ function (_Component) {
714
1017
  var childIndex = queryInfo.childIndex,
715
1018
  query = queryInfo.query;
716
1019
  var renderSuggestion = React.Children.toArray(this.props.children)[childIndex].props.renderSuggestion;
1020
+ var ignoreAccents = this.props.ignoreAccents;
717
1021
  return React__default.createElement(Suggestion$1, {
718
1022
  style: this.props.style('item'),
719
1023
  key: "".concat(childIndex, "-").concat(id),
720
1024
  id: id,
721
1025
  query: query,
722
1026
  index: index,
1027
+ ignoreAccents: ignoreAccents,
723
1028
  renderSuggestion: renderSuggestion,
724
1029
  suggestion: result,
725
1030
  focused: isFocused,
@@ -774,6 +1079,7 @@ _defineProperty(SuggestionsOverlay, "propTypes", {
774
1079
  scrollFocusedIntoView: PropTypes.bool,
775
1080
  isLoading: PropTypes.bool,
776
1081
  onSelect: PropTypes.func,
1082
+ ignoreAccents: PropTypes.bool,
777
1083
  children: PropTypes.oneOfType([PropTypes.element, PropTypes.arrayOf(PropTypes.element)]).isRequired
778
1084
  });
779
1085
 
@@ -786,7 +1092,7 @@ _defineProperty(SuggestionsOverlay, "defaultProps", {
786
1092
 
787
1093
  var styled$2 = substyle.defaultStyle(function (_ref2) {
788
1094
  var position = _ref2.position;
789
- return _objectSpread({
1095
+ return _objectSpread$1({
790
1096
  position: 'absolute',
791
1097
  zIndex: 1,
792
1098
  backgroundColor: 'white',
@@ -802,6 +1108,9 @@ var styled$2 = substyle.defaultStyle(function (_ref2) {
802
1108
  });
803
1109
  var SuggestionsOverlay$1 = styled$2(SuggestionsOverlay);
804
1110
 
1111
+ function ownKeys$2(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; }
1112
+
1113
+ function _objectSpread$2(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$2(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$2(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
805
1114
  var makeTriggerRegex = function makeTriggerRegex(trigger) {
806
1115
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
807
1116
 
@@ -816,7 +1125,7 @@ var makeTriggerRegex = function makeTriggerRegex(trigger) {
816
1125
  }
817
1126
  };
818
1127
 
819
- var getDataProvider = function getDataProvider(data) {
1128
+ var getDataProvider = function getDataProvider(data, ignoreAccents) {
820
1129
  if (data instanceof Array) {
821
1130
  // if data is an array, create a function to query that
822
1131
  return function (query, callback) {
@@ -825,7 +1134,7 @@ var getDataProvider = function getDataProvider(data) {
825
1134
  for (var i = 0, l = data.length; i < l; ++i) {
826
1135
  var display = data[i].display || data[i].id;
827
1136
 
828
- if (display.toLowerCase().indexOf(query.toLowerCase()) >= 0) {
1137
+ if (getSubstringIndex(display, query, ignoreAccents) >= 0) {
829
1138
  results.push(data[i]);
830
1139
  }
831
1140
  }
@@ -854,6 +1163,8 @@ var propTypes = {
854
1163
  singleLine: PropTypes.bool,
855
1164
  allowSpaceInQuery: PropTypes.bool,
856
1165
  EXPERIMENTAL_cutCopyPaste: PropTypes.bool,
1166
+ allowSuggestionsAboveCursor: PropTypes.bool,
1167
+ ignoreAccents: PropTypes.bool,
857
1168
  value: PropTypes.string,
858
1169
  onKeyDown: PropTypes.func,
859
1170
  onSelect: PropTypes.func,
@@ -885,7 +1196,7 @@ function (_React$Component) {
885
1196
  style = _this$props.style; // pass all props that we don't use through to the input control
886
1197
 
887
1198
  var props = omit(_this.props, 'style', keys(propTypes));
888
- return _objectSpread({}, props, style('input'), {
1199
+ return _objectSpread$2({}, props, {}, style('input'), {
889
1200
  value: _this.getPlainText()
890
1201
  }, !readOnly && !disabled && {
891
1202
  onChange: _this.handleChange,
@@ -955,7 +1266,8 @@ function (_React$Component) {
955
1266
  scrollFocusedIntoView: false
956
1267
  });
957
1268
  },
958
- isLoading: _this.isLoading()
1269
+ isLoading: _this.isLoading(),
1270
+ ignoreAccents: _this.props.ignoreAccents
959
1271
  }, _this.props.children);
960
1272
 
961
1273
  if (_this.props.suggestionsPortalHost) {
@@ -1063,9 +1375,8 @@ function (_React$Component) {
1063
1375
  var eventMock = {
1064
1376
  target: {
1065
1377
  value: newValue
1066
- } // this.props.onChange.call(this, eventMock, newValue, newPlainTextValue, mentions);
1067
-
1068
- };
1378
+ }
1379
+ }; // this.props.onChange.call(this, eventMock, newValue, newPlainTextValue, mentions);
1069
1380
 
1070
1381
  _this.executeOnChange(eventMock, newValue, newPlainTextValue, mentions);
1071
1382
  });
@@ -1210,13 +1521,24 @@ function (_React$Component) {
1210
1521
 
1211
1522
  _defineProperty(_assertThisInitialized(_this), "updateSuggestionsPosition", function () {
1212
1523
  var caretPosition = _this.state.caretPosition;
1524
+ var _this$props5 = _this.props,
1525
+ suggestionsPortalHost = _this$props5.suggestionsPortalHost,
1526
+ allowSuggestionsAboveCursor = _this$props5.allowSuggestionsAboveCursor;
1213
1527
 
1214
1528
  if (!caretPosition || !_this.suggestionsRef) {
1215
1529
  return;
1216
1530
  }
1217
1531
 
1218
1532
  var suggestions = ReactDOM.findDOMNode(_this.suggestionsRef);
1219
- var highlighter = ReactDOM.findDOMNode(_this.highlighterRef);
1533
+ var highlighter = ReactDOM.findDOMNode(_this.highlighterRef); // first get viewport-relative position (highlighter is offsetParent of caret):
1534
+
1535
+ var caretOffsetParentRect = highlighter.getBoundingClientRect();
1536
+ var caretHeight = getComputedStyleLengthProp(highlighter, 'font-size');
1537
+ var viewportRelative = {
1538
+ left: caretOffsetParentRect.left + caretPosition.left,
1539
+ top: caretOffsetParentRect.top + caretPosition.top + caretHeight
1540
+ };
1541
+ var viewportHeight = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);
1220
1542
 
1221
1543
  if (!suggestions) {
1222
1544
  return;
@@ -1224,23 +1546,16 @@ function (_React$Component) {
1224
1546
 
1225
1547
  var position = {}; // if suggestions menu is in a portal, update position to be releative to its portal node
1226
1548
 
1227
- if (_this.props.suggestionsPortalHost) {
1228
- // first get viewport-relative position (highlighter is offsetParent of caret):
1229
- var caretOffsetParentRect = highlighter.getBoundingClientRect();
1230
- var caretHeight = getComputedStyleLengthProp(highlighter, 'font-size');
1231
- var viewportRelative = {
1232
- left: caretOffsetParentRect.left + caretPosition.left,
1233
- top: caretOffsetParentRect.top + caretPosition.top + caretHeight
1234
- };
1549
+ if (suggestionsPortalHost) {
1235
1550
  position.position = 'fixed';
1236
1551
  var left = viewportRelative.left;
1237
- position.top = viewportRelative.top; // absolute/fixed positioned elements are positioned according to their entire box including margins; so we remove margins here:
1552
+ var top = viewportRelative.top; // absolute/fixed positioned elements are positioned according to their entire box including margins; so we remove margins here:
1238
1553
 
1239
1554
  left -= getComputedStyleLengthProp(suggestions, 'margin-left');
1240
- position.top -= getComputedStyleLengthProp(suggestions, 'margin-top'); // take into account highlighter/textinput scrolling:
1555
+ top -= getComputedStyleLengthProp(suggestions, 'margin-top'); // take into account highlighter/textinput scrolling:
1241
1556
 
1242
1557
  left -= highlighter.scrollLeft;
1243
- position.top -= highlighter.scrollTop; // guard for mentions suggestions list clipped by right edge of window
1558
+ top -= highlighter.scrollTop; // guard for mentions suggestions list clipped by right edge of window
1244
1559
 
1245
1560
  var viewportWidth = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);
1246
1561
 
@@ -1248,18 +1563,36 @@ function (_React$Component) {
1248
1563
  position.left = Math.max(0, viewportWidth - suggestions.offsetWidth);
1249
1564
  } else {
1250
1565
  position.left = left;
1566
+ } // guard for mentions suggestions list clipped by bottom edge of window if allowSuggestionsAboveCursor set to true.
1567
+ // Move the list up above the caret if it's getting cut off by the bottom of the window, provided that the list height
1568
+ // is small enough to NOT cover up the caret
1569
+
1570
+
1571
+ if (allowSuggestionsAboveCursor && top + suggestions.offsetHeight > viewportHeight && suggestions.offsetHeight < top - caretHeight) {
1572
+ position.top = Math.max(0, top - suggestions.offsetHeight - caretHeight);
1573
+ } else {
1574
+ position.top = top;
1251
1575
  }
1252
1576
  } else {
1253
- var _left = caretPosition.left - highlighter.scrollLeft; // guard for mentions suggestions list clipped by right edge of window
1577
+ var _left = caretPosition.left - highlighter.scrollLeft;
1578
+
1579
+ var _top = caretPosition.top - highlighter.scrollTop; // guard for mentions suggestions list clipped by right edge of window
1254
1580
 
1255
1581
 
1256
1582
  if (_left + suggestions.offsetWidth > _this.containerRef.offsetWidth) {
1257
1583
  position.right = 0;
1258
1584
  } else {
1259
1585
  position.left = _left;
1260
- }
1586
+ } // guard for mentions suggestions list clipped by bottom edge of window if allowSuggestionsAboveCursor set to true.
1587
+ // move the list up above the caret if it's getting cut off by the bottom of the window, provided that the list height
1588
+ // is small enough to NOT cover up the caret
1589
+
1261
1590
 
1262
- position.top = caretPosition.top - highlighter.scrollTop;
1591
+ if (allowSuggestionsAboveCursor && viewportRelative.top - highlighter.scrollTop + suggestions.offsetHeight > viewportHeight && suggestions.offsetHeight < caretOffsetParentRect.top - caretHeight - highlighter.scrollTop) {
1592
+ position.top = _top - suggestions.offsetHeight - caretHeight;
1593
+ } else {
1594
+ position.top = _top;
1595
+ }
1263
1596
  }
1264
1597
 
1265
1598
  if (isEqual(position, _this.state.suggestionsPosition)) {
@@ -1359,8 +1692,11 @@ function (_React$Component) {
1359
1692
  });
1360
1693
 
1361
1694
  _defineProperty(_assertThisInitialized(_this), "queryData", function (query, childIndex, querySequenceStart, querySequenceEnd, plainTextValue) {
1362
- var mentionChild = React.Children.toArray(_this.props.children)[childIndex];
1363
- var provideData = getDataProvider(mentionChild.props.data);
1695
+ var _this$props6 = _this.props,
1696
+ children = _this$props6.children,
1697
+ ignoreAccents = _this$props6.ignoreAccents;
1698
+ var mentionChild = React.Children.toArray(children)[childIndex];
1699
+ var provideData = getDataProvider(mentionChild.props.data, ignoreAccents);
1364
1700
  var syncResult = provideData(query, _this.updateSuggestions.bind(null, _this._queryId, childIndex, query, querySequenceStart, querySequenceEnd, plainTextValue));
1365
1701
 
1366
1702
  if (syncResult instanceof Array) {
@@ -1373,7 +1709,7 @@ function (_React$Component) {
1373
1709
  if (queryId !== _this._queryId) return; // save in property so that multiple sync state updates from different mentions sources
1374
1710
  // won't overwrite each other
1375
1711
 
1376
- _this.suggestions = _objectSpread({}, _this.suggestions, _defineProperty({}, childIndex, {
1712
+ _this.suggestions = _objectSpread$2({}, _this.suggestions, _defineProperty({}, childIndex, {
1377
1713
  queryInfo: {
1378
1714
  childIndex: childIndex,
1379
1715
  query: query,
@@ -1538,22 +1874,26 @@ function (_React$Component) {
1538
1874
  return;
1539
1875
  }
1540
1876
 
1877
+ if (!this.supportsClipboardActions(event)) {
1878
+ return;
1879
+ }
1880
+
1541
1881
  event.preventDefault();
1542
1882
  var _this$state3 = this.state,
1543
1883
  selectionStart = _this$state3.selectionStart,
1544
1884
  selectionEnd = _this$state3.selectionEnd;
1545
- var _this$props5 = this.props,
1546
- value = _this$props5.value,
1547
- children = _this$props5.children;
1885
+ var _this$props7 = this.props,
1886
+ value = _this$props7.value,
1887
+ children = _this$props7.children;
1548
1888
  var config = readConfigFromChildren(children);
1549
1889
  var markupStartIndex = mapPlainTextIndex(value, config, selectionStart, 'START');
1550
1890
  var markupEndIndex = mapPlainTextIndex(value, config, selectionEnd, 'END');
1551
1891
  var pastedMentions = event.clipboardData.getData('text/react-mentions');
1552
1892
  var pastedData = event.clipboardData.getData('text/plain');
1553
- var newValue = spliceString(value, markupStartIndex, markupEndIndex, pastedMentions || pastedData);
1893
+ var newValue = spliceString(value, markupStartIndex, markupEndIndex, pastedMentions || pastedData).replace(/\r/g, '');
1554
1894
  var newPlainTextValue = getPlainText(newValue, config);
1555
1895
  var eventMock = {
1556
- target: _objectSpread({}, event.target, {
1896
+ target: _objectSpread$2({}, event.target, {
1557
1897
  value: newValue
1558
1898
  })
1559
1899
  };
@@ -1565,15 +1905,20 @@ function (_React$Component) {
1565
1905
  var _this$state4 = this.state,
1566
1906
  selectionStart = _this$state4.selectionStart,
1567
1907
  selectionEnd = _this$state4.selectionEnd;
1568
- var _this$props6 = this.props,
1569
- children = _this$props6.children,
1570
- value = _this$props6.value;
1908
+ var _this$props8 = this.props,
1909
+ children = _this$props8.children,
1910
+ value = _this$props8.value;
1571
1911
  var config = readConfigFromChildren(children);
1572
1912
  var markupStartIndex = mapPlainTextIndex(value, config, selectionStart, 'START');
1573
1913
  var markupEndIndex = mapPlainTextIndex(value, config, selectionEnd, 'END');
1574
1914
  event.clipboardData.setData('text/plain', event.target.value.slice(selectionStart, selectionEnd));
1575
1915
  event.clipboardData.setData('text/react-mentions', value.slice(markupStartIndex, markupEndIndex));
1576
1916
  }
1917
+ }, {
1918
+ key: "supportsClipboardActions",
1919
+ value: function supportsClipboardActions(event) {
1920
+ return !!event.clipboardData;
1921
+ }
1577
1922
  }, {
1578
1923
  key: "handleCopy",
1579
1924
  value: function handleCopy(event) {
@@ -1581,6 +1926,10 @@ function (_React$Component) {
1581
1926
  return;
1582
1927
  }
1583
1928
 
1929
+ if (!this.supportsClipboardActions(event)) {
1930
+ return;
1931
+ }
1932
+
1584
1933
  event.preventDefault();
1585
1934
  this.saveSelectionToClipboard(event);
1586
1935
  }
@@ -1591,21 +1940,25 @@ function (_React$Component) {
1591
1940
  return;
1592
1941
  }
1593
1942
 
1943
+ if (!this.supportsClipboardActions(event)) {
1944
+ return;
1945
+ }
1946
+
1594
1947
  event.preventDefault();
1595
1948
  this.saveSelectionToClipboard(event);
1596
1949
  var _this$state5 = this.state,
1597
1950
  selectionStart = _this$state5.selectionStart,
1598
1951
  selectionEnd = _this$state5.selectionEnd;
1599
- var _this$props7 = this.props,
1600
- children = _this$props7.children,
1601
- value = _this$props7.value;
1952
+ var _this$props9 = this.props,
1953
+ children = _this$props9.children,
1954
+ value = _this$props9.value;
1602
1955
  var config = readConfigFromChildren(children);
1603
1956
  var markupStartIndex = mapPlainTextIndex(value, config, selectionStart, 'START');
1604
1957
  var markupEndIndex = mapPlainTextIndex(value, config, selectionEnd, 'END');
1605
1958
  var newValue = [value.slice(0, markupStartIndex), value.slice(markupEndIndex)].join('');
1606
1959
  var newPlainTextValue = getPlainText(newValue, config);
1607
1960
  var eventMock = {
1608
- target: _objectSpread({}, event.target, {
1961
+ target: _objectSpread$2({}, event.target, {
1609
1962
  value: newPlainTextValue
1610
1963
  })
1611
1964
  };
@@ -1625,7 +1978,9 @@ function (_React$Component) {
1625
1978
  _defineProperty(MentionsInput, "propTypes", propTypes);
1626
1979
 
1627
1980
  _defineProperty(MentionsInput, "defaultProps", {
1981
+ ignoreAccents: false,
1628
1982
  singleLine: false,
1983
+ allowSuggestionsAboveCursor: false,
1629
1984
  onKeyDown: function onKeyDown() {
1630
1985
  return null;
1631
1986
  },
@@ -1650,14 +2005,16 @@ var styled$3 = substyle.defaultStyle({
1650
2005
  display: 'block',
1651
2006
  position: 'absolute',
1652
2007
  top: 0,
2008
+ left: 0,
1653
2009
  boxSizing: 'border-box',
1654
2010
  backgroundColor: 'transparent',
1655
2011
  width: 'inherit',
1656
2012
  fontFamily: 'inherit',
1657
- fontSize: 'inherit'
2013
+ fontSize: 'inherit',
2014
+ letterSpacing: 'inherit'
1658
2015
  },
1659
2016
  '&multiLine': {
1660
- input: _objectSpread({
2017
+ input: _objectSpread$2({
1661
2018
  width: '100%',
1662
2019
  height: '100%',
1663
2020
  bottom: 0,