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.
@@ -1,6 +1,5 @@
1
1
  import _toConsumableArray from '@babel/runtime/helpers/esm/toConsumableArray';
2
2
  import _extends from '@babel/runtime/helpers/esm/extends';
3
- import _objectSpread from '@babel/runtime/helpers/esm/objectSpread';
4
3
  import _classCallCheck from '@babel/runtime/helpers/esm/classCallCheck';
5
4
  import _createClass from '@babel/runtime/helpers/esm/createClass';
6
5
  import _possibleConstructorReturn from '@babel/runtime/helpers/esm/possibleConstructorReturn';
@@ -8,17 +7,17 @@ import _getPrototypeOf from '@babel/runtime/helpers/esm/getPrototypeOf';
8
7
  import _assertThisInitialized from '@babel/runtime/helpers/esm/assertThisInitialized';
9
8
  import _inherits from '@babel/runtime/helpers/esm/inherits';
10
9
  import _defineProperty from '@babel/runtime/helpers/esm/defineProperty';
10
+ import React, { Children, Component } from 'react';
11
+ import invariant from 'invariant';
12
+ import _slicedToArray from '@babel/runtime/helpers/esm/slicedToArray';
13
+ import PropTypes from 'prop-types';
14
+ import substyle, { defaultStyle } from 'substyle';
11
15
  import isEqual from 'lodash/isEqual';
12
16
  import isNumber from 'lodash/isNumber';
13
- import keys from 'lodash/keys';
17
+ import ReactDOM from 'react-dom';
14
18
  import omit from 'lodash/omit';
19
+ import keys from 'lodash/keys';
15
20
  import values from 'lodash/values';
16
- import PropTypes from 'prop-types';
17
- import React, { Children, Component } from 'react';
18
- import ReactDOM from 'react-dom';
19
- import substyle, { defaultStyle } from 'substyle';
20
- import invariant from 'invariant';
21
- import _slicedToArray from '@babel/runtime/helpers/esm/slicedToArray';
22
21
 
23
22
  // escape RegExp special characters https://stackoverflow.com/a/9310752/5142490
24
23
  var escapeRegex = function escapeRegex(str) {
@@ -328,6 +327,304 @@ var makeMentionsMarkup = function makeMentionsMarkup(markup, id, display) {
328
327
  return markup.replace(PLACEHOLDERS.id, id).replace(PLACEHOLDERS.display, display);
329
328
  };
330
329
 
330
+ // This contains all the latin letters and the regex that match these letters with diacritics
331
+ // https://stackoverflow.com/questions/990904/remove-accents-diacritics-in-a-string-in-javascript
332
+ var lettersDiacritics = [{
333
+ base: 'A',
334
+ 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
335
+ }, {
336
+ base: 'AA',
337
+ letters: /(Ꜳ|[\uA732])/g
338
+ }, {
339
+ base: 'AE',
340
+ letters: /(Æ|Ǽ|Ǣ|[\u00C6\u01FC\u01E2])/g
341
+ }, {
342
+ base: 'AO',
343
+ letters: /(Ꜵ|[\uA734])/g
344
+ }, {
345
+ base: 'AU',
346
+ letters: /(Ꜷ|[\uA736])/g
347
+ }, {
348
+ base: 'AV',
349
+ letters: /(Ꜹ|Ꜻ|[\uA738\uA73A])/g
350
+ }, {
351
+ base: 'AY',
352
+ letters: /(Ꜽ|[\uA73C])/g
353
+ }, {
354
+ base: 'B',
355
+ letters: /(B|Ⓑ|B|Ḃ|Ḅ|Ḇ|Ƀ|Ƃ|Ɓ|[\u0042\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0182\u0181])/g
356
+ }, {
357
+ base: 'C',
358
+ letters: /(C|Ⓒ|C|Ć|Ĉ|Ċ|Č|Ç|Ḉ|Ƈ|Ȼ|Ꜿ|[\u0043\u24B8\uFF23\u0106\u0108\u010A\u010C\u00C7\u1E08\u0187\u023B\uA73E])/g
359
+ }, {
360
+ base: 'D',
361
+ letters: /(D|Ⓓ|D|Ḋ|Ď|Ḍ|Ḑ|Ḓ|Ḏ|Đ|Ƌ|Ɗ|Ɖ|Ꝺ|Ð|[\u0044\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018B\u018A\u0189\uA779\u00D0])/g
362
+ }, {
363
+ base: 'DZ',
364
+ letters: /(DZ|DŽ|[\u01F1\u01C4])/g
365
+ }, {
366
+ base: 'Dz',
367
+ letters: /(Dz|Dž|[\u01F2\u01C5])/g
368
+ }, {
369
+ base: 'E',
370
+ 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
371
+ }, {
372
+ base: 'F',
373
+ letters: /(F|Ⓕ|F|Ḟ|Ƒ|Ꝼ|[\u0046\u24BB\uFF26\u1E1E\u0191\uA77B])/g
374
+ }, {
375
+ base: 'G',
376
+ letters: /(G|Ⓖ|G|Ǵ|Ĝ|Ḡ|Ğ|Ġ|Ǧ|Ģ|Ǥ|Ɠ|Ꞡ|Ᵹ|Ꝿ|[\u0047\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E])/g
377
+ }, {
378
+ base: 'H',
379
+ letters: /(H|Ⓗ|H|Ĥ|Ḣ|Ḧ|Ȟ|Ḥ|Ḩ|Ḫ|Ħ|Ⱨ|Ⱶ|Ɥ|[\u0048\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D])/g
380
+ }, {
381
+ base: 'I',
382
+ letters: /(I|Ⓘ|I|Ì|Í|Î|Ĩ|Ī|Ĭ|İ|Ï|Ḯ|Ỉ|Ǐ|Ȉ|Ȋ|Ị|Į|Ḭ|Ɨ|[\u0049\u24BE\uFF29\u00CC\u00CD\u00CE\u0128\u012A\u012C\u0130\u00CF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197])/g
383
+ }, {
384
+ base: 'J',
385
+ letters: /(J|Ⓙ|J|Ĵ|Ɉ|[\u004A\u24BF\uFF2A\u0134\u0248])/g
386
+ }, {
387
+ base: 'K',
388
+ letters: /(K|Ⓚ|K|Ḱ|Ǩ|Ḳ|Ķ|Ḵ|Ƙ|Ⱪ|Ꝁ|Ꝃ|Ꝅ|Ꞣ|[\u004B\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2])/g
389
+ }, {
390
+ base: 'L',
391
+ letters: /(L|Ⓛ|L|Ŀ|Ĺ|Ľ|Ḷ|Ḹ|Ļ|Ḽ|Ḻ|Ł|Ƚ|Ɫ|Ⱡ|Ꝉ|Ꝇ|Ꞁ|[\u004C\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780])/g
392
+ }, {
393
+ base: 'LJ',
394
+ letters: /(LJ|[\u01C7])/g
395
+ }, {
396
+ base: 'Lj',
397
+ letters: /(Lj|[\u01C8])/g
398
+ }, {
399
+ base: 'M',
400
+ letters: /(M|Ⓜ|M|Ḿ|Ṁ|Ṃ|Ɱ|Ɯ|[\u004D\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C])/g
401
+ }, {
402
+ base: 'N',
403
+ letters: /(N|Ⓝ|N|Ǹ|Ń|Ñ|Ṅ|Ň|Ṇ|Ņ|Ṋ|Ṉ|Ƞ|Ɲ|Ꞑ|Ꞥ|Ŋ|[\u004E\u24C3\uFF2E\u01F8\u0143\u00D1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u0220\u019D\uA790\uA7A4\u014A])/g
404
+ }, {
405
+ base: 'NJ',
406
+ letters: /(NJ|[\u01CA])/g
407
+ }, {
408
+ base: 'Nj',
409
+ letters: /(Nj|[\u01CB])/g
410
+ }, {
411
+ base: 'O',
412
+ 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
413
+ }, {
414
+ base: 'OE',
415
+ letters: /(Œ|[\u0152])/g
416
+ }, {
417
+ base: 'OI',
418
+ letters: /(Ƣ|[\u01A2])/g
419
+ }, {
420
+ base: 'OO',
421
+ letters: /(Ꝏ|[\uA74E])/g
422
+ }, {
423
+ base: 'OU',
424
+ letters: /(Ȣ|[\u0222])/g
425
+ }, {
426
+ base: 'P',
427
+ letters: /(P|Ⓟ|P|Ṕ|Ṗ|Ƥ|Ᵽ|Ꝑ|Ꝓ|Ꝕ|[\u0050\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754])/g
428
+ }, {
429
+ base: 'Q',
430
+ letters: /(Q|Ⓠ|Q|Ꝗ|Ꝙ|Ɋ|[\u0051\u24C6\uFF31\uA756\uA758\u024A])/g
431
+ }, {
432
+ base: 'R',
433
+ letters: /(R|Ⓡ|R|Ŕ|Ṙ|Ř|Ȑ|Ȓ|Ṛ|Ṝ|Ŗ|Ṟ|Ɍ|Ɽ|Ꝛ|Ꞧ|Ꞃ|[\u0052\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782])/g
434
+ }, {
435
+ base: 'S',
436
+ letters: /(S|Ⓢ|S|ẞ|Ś|Ṥ|Ŝ|Ṡ|Š|Ṧ|Ṣ|Ṩ|Ș|Ş|Ȿ|Ꞩ|Ꞅ|[\u0053\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784])/g
437
+ }, {
438
+ base: 'T',
439
+ letters: /(T|Ⓣ|T|Ṫ|Ť|Ṭ|Ț|Ţ|Ṱ|Ṯ|Ŧ|Ƭ|Ʈ|Ⱦ|Ꞇ|[\u0054\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786])/g
440
+ }, {
441
+ base: 'TH',
442
+ letters: /(Þ|[\u00DE])/g
443
+ }, {
444
+ base: 'TZ',
445
+ letters: /(Ꜩ|[\uA728])/g
446
+ }, {
447
+ base: 'U',
448
+ 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
449
+ }, {
450
+ base: 'V',
451
+ letters: /(V|Ⓥ|V|Ṽ|Ṿ|Ʋ|Ꝟ|Ʌ|[\u0056\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245])/g
452
+ }, {
453
+ base: 'VY',
454
+ letters: /(Ꝡ|[\uA760])/g
455
+ }, {
456
+ base: 'W',
457
+ letters: /(W|Ⓦ|W|Ẁ|Ẃ|Ŵ|Ẇ|Ẅ|Ẉ|Ⱳ|[\u0057\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72])/g
458
+ }, {
459
+ base: 'X',
460
+ letters: /(X|Ⓧ|X|Ẋ|Ẍ|[\u0058\u24CD\uFF38\u1E8A\u1E8C])/g
461
+ }, {
462
+ base: 'Y',
463
+ letters: /(Y|Ⓨ|Y|Ỳ|Ý|Ŷ|Ỹ|Ȳ|Ẏ|Ÿ|Ỷ|Ỵ|Ƴ|Ɏ|Ỿ|[\u0059\u24CE\uFF39\u1EF2\u00DD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE])/g
464
+ }, {
465
+ base: 'Z',
466
+ letters: /(Z|Ⓩ|Z|Ź|Ẑ|Ż|Ž|Ẓ|Ẕ|Ƶ|Ȥ|Ɀ|Ⱬ|Ꝣ|[\u005A\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762])/g
467
+ }, {
468
+ base: 'a',
469
+ 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
470
+ }, {
471
+ base: 'aa',
472
+ letters: /(ꜳ|[\uA733])/g
473
+ }, {
474
+ base: 'ae',
475
+ letters: /(æ|ǽ|ǣ|[\u00E6\u01FD\u01E3])/g
476
+ }, {
477
+ base: 'ao',
478
+ letters: /(ꜵ|[\uA735])/g
479
+ }, {
480
+ base: 'au',
481
+ letters: /(ꜷ|[\uA737])/g
482
+ }, {
483
+ base: 'av',
484
+ letters: /(ꜹ|ꜻ|[\uA739\uA73B])/g
485
+ }, {
486
+ base: 'ay',
487
+ letters: /(ꜽ|[\uA73D])/g
488
+ }, {
489
+ base: 'b',
490
+ letters: /(b|ⓑ|b|ḃ|ḅ|ḇ|ƀ|ƃ|ɓ|[\u0062\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253])/g
491
+ }, {
492
+ base: 'c',
493
+ letters: /(c|ⓒ|c|ć|ĉ|ċ|č|ç|ḉ|ƈ|ȼ|ꜿ|ↄ|[\u0063\u24D2\uFF43\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184])/g
494
+ }, {
495
+ base: 'd',
496
+ letters: /(d|ⓓ|d|ḋ|ď|ḍ|ḑ|ḓ|ḏ|đ|ƌ|ɖ|ɗ|ꝺ|ð|[\u0064\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\uA77A\u00F0])/g
497
+ }, {
498
+ base: 'dz',
499
+ letters: /(dz|dž|[\u01F3\u01C6])/g
500
+ }, {
501
+ base: 'e',
502
+ 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
503
+ }, {
504
+ base: 'f',
505
+ letters: /(f|ⓕ|f|ḟ|ƒ|ꝼ|[\u0066\u24D5\uFF46\u1E1F\u0192\uA77C])/g
506
+ }, {
507
+ base: 'g',
508
+ letters: /(g|ⓖ|g|ǵ|ĝ|ḡ|ğ|ġ|ǧ|ģ|ǥ|ɠ|ꞡ|ᵹ|ꝿ|[\u0067\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\u1D79\uA77F])/g
509
+ }, {
510
+ base: 'h',
511
+ letters: /(h|ⓗ|h|ĥ|ḣ|ḧ|ȟ|ḥ|ḩ|ḫ|ẖ|ħ|ⱨ|ⱶ|ɥ|[\u0068\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265])/g
512
+ }, {
513
+ base: 'hv',
514
+ letters: /(ƕ|[\u0195])/g
515
+ }, {
516
+ base: 'i',
517
+ letters: /(i|ⓘ|i|ì|í|î|ĩ|ī|ĭ|ï|ḯ|ỉ|ǐ|ȉ|ȋ|ị|į|ḭ|ɨ|ı|[\u0069\u24D8\uFF49\u00EC\u00ED\u00EE\u0129\u012B\u012D\u00EF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131])/g
518
+ }, {
519
+ base: 'ij',
520
+ letters: /(ij|[\u0133])/g
521
+ }, {
522
+ base: 'j',
523
+ letters: /(j|ⓙ|j|ĵ|ǰ|ɉ|[\u006A\u24D9\uFF4A\u0135\u01F0\u0249])/g
524
+ }, {
525
+ base: 'k',
526
+ letters: /(k|ⓚ|k|ḱ|ǩ|ḳ|ķ|ḵ|ƙ|ⱪ|ꝁ|ꝃ|ꝅ|ꞣ|[\u006B\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3])/g
527
+ }, {
528
+ base: 'l',
529
+ letters: /(l|ⓛ|l|ŀ|ĺ|ľ|ḷ|ḹ|ļ|ḽ|ḻ|ł|ƚ|ɫ|ⱡ|ꝉ|ꞁ|ꝇ|[\u006C\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u0142\u019A\u026B\u2C61\uA749\uA781\uA747])/g
530
+ }, {
531
+ base: 'lj',
532
+ letters: /(lj|[\u01C9])/g
533
+ }, {
534
+ base: 'm',
535
+ letters: /(m|ⓜ|m|ḿ|ṁ|ṃ|ɱ|ɯ|[\u006D\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F])/g
536
+ }, {
537
+ base: 'n',
538
+ letters: /(n|ⓝ|n|ǹ|ń|ñ|ṅ|ň|ṇ|ņ|ṋ|ṉ|ƞ|ɲ|ʼn|ꞑ|ꞥ|ŋ|[\u006E\u24DD\uFF4E\u01F9\u0144\u00F1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5\u014B])/g
539
+ }, {
540
+ base: 'nj',
541
+ letters: /(nj|[\u01CC])/g
542
+ }, {
543
+ base: 'o',
544
+ 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
545
+ }, {
546
+ base: 'oe',
547
+ letters: /(œ|[\u0153])/g
548
+ }, {
549
+ base: 'oi',
550
+ letters: /(ƣ|[\u01A3])/g
551
+ }, {
552
+ base: 'ou',
553
+ letters: /(ȣ|[\u0223])/g
554
+ }, {
555
+ base: 'oo',
556
+ letters: /(ꝏ|[\uA74F])/g
557
+ }, {
558
+ base: 'p',
559
+ letters: /(p|ⓟ|p|ṕ|ṗ|ƥ|ᵽ|ꝑ|ꝓ|ꝕ|[\u0070\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755])/g
560
+ }, {
561
+ base: 'q',
562
+ letters: /(q|ⓠ|q|ɋ|ꝗ|ꝙ|[\u0071\u24E0\uFF51\u024B\uA757\uA759])/g
563
+ }, {
564
+ base: 'r',
565
+ letters: /(r|ⓡ|r|ŕ|ṙ|ř|ȑ|ȓ|ṛ|ṝ|ŗ|ṟ|ɍ|ɽ|ꝛ|ꞧ|ꞃ|[\u0072\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783])/g
566
+ }, {
567
+ base: 's',
568
+ letters: /(s|ⓢ|s|ś|ṥ|ŝ|ṡ|š|ṧ|ṣ|ṩ|ș|ş|ȿ|ꞩ|ꞅ|ẛ|ſ|[\u0073\u24E2\uFF53\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B\u017F])/g
569
+ }, {
570
+ base: 'ss',
571
+ letters: /(ß|[\u00DF])/g
572
+ }, {
573
+ base: 't',
574
+ letters: /(t|ⓣ|t|ṫ|ẗ|ť|ṭ|ț|ţ|ṱ|ṯ|ŧ|ƭ|ʈ|ⱦ|ꞇ|[\u0074\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787])/g
575
+ }, {
576
+ base: 'th',
577
+ letters: /(þ|[\u00FE])/g
578
+ }, {
579
+ base: 'tz',
580
+ letters: /(ꜩ|[\uA729])/g
581
+ }, {
582
+ base: 'u',
583
+ 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
584
+ }, {
585
+ base: 'v',
586
+ letters: /(v|ⓥ|v|ṽ|ṿ|ʋ|ꝟ|ʌ|[\u0076\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C])/g
587
+ }, {
588
+ base: 'vy',
589
+ letters: /(ꝡ|[\uA761])/g
590
+ }, {
591
+ base: 'w',
592
+ letters: /(w|ⓦ|w|ẁ|ẃ|ŵ|ẇ|ẅ|ẘ|ẉ|ⱳ|[\u0077\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73])/g
593
+ }, {
594
+ base: 'x',
595
+ letters: /(x|ⓧ|x|ẋ|ẍ|[\u0078\u24E7\uFF58\u1E8B\u1E8D])/g
596
+ }, {
597
+ base: 'y',
598
+ letters: /(y|ⓨ|y|ỳ|ý|ŷ|ỹ|ȳ|ẏ|ÿ|ỷ|ẙ|ỵ|ƴ|ɏ|ỿ|[\u0079\u24E8\uFF59\u1EF3\u00FD\u0177\u1EF9\u0233\u1E8F\u00FF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF])/g
599
+ }, {
600
+ base: 'z',
601
+ letters: /(z|ⓩ|z|ź|ẑ|ż|ž|ẓ|ẕ|ƶ|ȥ|ɀ|ⱬ|ꝣ|[\u007A\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763])/g
602
+ }];
603
+
604
+ var removeAccents = function removeAccents(str) {
605
+ var formattedStr = str;
606
+ lettersDiacritics.forEach(function (letterDiacritics) {
607
+ formattedStr = formattedStr.replace(letterDiacritics.letters, letterDiacritics.base);
608
+ });
609
+ return formattedStr;
610
+ };
611
+
612
+ var normalizeString = function normalizeString(str) {
613
+ return removeAccents(str).toLowerCase();
614
+ };
615
+
616
+ var getSubstringIndex = function getSubstringIndex(str, substr, ignoreAccents) {
617
+ if (!ignoreAccents) {
618
+ return str.toLowerCase().indexOf(substr.toLowerCase());
619
+ }
620
+
621
+ return normalizeString(str).indexOf(normalizeString(substr));
622
+ };
623
+
624
+ 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; }
625
+
626
+ 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; }
627
+
331
628
  var _generateComponentKey = function _generateComponentKey(usedKeys, id) {
332
629
  if (!usedKeys.hasOwnProperty(id)) {
333
630
  usedKeys[id] = 0;
@@ -445,7 +742,7 @@ function (_Component) {
445
742
  }
446
743
 
447
744
  return React.createElement("div", _extends({}, style, {
448
- style: _objectSpread({}, inputStyle, style.style)
745
+ style: _objectSpread({}, inputStyle, {}, style.style)
449
746
  }), resultComponents);
450
747
  }
451
748
  }, {
@@ -580,9 +877,10 @@ function (_Component) {
580
877
  key: "renderHighlightedDisplay",
581
878
  value: function renderHighlightedDisplay(display) {
582
879
  var _this$props2 = this.props,
880
+ ignoreAccents = _this$props2.ignoreAccents,
583
881
  query = _this$props2.query,
584
882
  style = _this$props2.style;
585
- var i = display.toLowerCase().indexOf(query.toLowerCase());
883
+ var i = getSubstringIndex(display, query, ignoreAccents);
586
884
 
587
885
  if (i === -1) {
588
886
  return React.createElement("span", style('display'), display);
@@ -599,6 +897,7 @@ _defineProperty(Suggestion, "propTypes", {
599
897
  id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,
600
898
  query: PropTypes.string.isRequired,
601
899
  index: PropTypes.number.isRequired,
900
+ ignoreAccents: PropTypes.bool,
602
901
  suggestion: PropTypes.oneOfType([PropTypes.string, PropTypes.shape({
603
902
  id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,
604
903
  display: PropTypes.string
@@ -624,6 +923,10 @@ function LoadingIndicator(_ref) {
624
923
 
625
924
  var LoadingIndicator$1 = substyle(LoadingIndicator);
626
925
 
926
+ 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; }
927
+
928
+ 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; }
929
+
627
930
  var SuggestionsOverlay =
628
931
  /*#__PURE__*/
629
932
  function (_Component) {
@@ -706,12 +1009,14 @@ function (_Component) {
706
1009
  var childIndex = queryInfo.childIndex,
707
1010
  query = queryInfo.query;
708
1011
  var renderSuggestion = Children.toArray(this.props.children)[childIndex].props.renderSuggestion;
1012
+ var ignoreAccents = this.props.ignoreAccents;
709
1013
  return React.createElement(Suggestion$1, {
710
1014
  style: this.props.style('item'),
711
1015
  key: "".concat(childIndex, "-").concat(id),
712
1016
  id: id,
713
1017
  query: query,
714
1018
  index: index,
1019
+ ignoreAccents: ignoreAccents,
715
1020
  renderSuggestion: renderSuggestion,
716
1021
  suggestion: result,
717
1022
  focused: isFocused,
@@ -766,6 +1071,7 @@ _defineProperty(SuggestionsOverlay, "propTypes", {
766
1071
  scrollFocusedIntoView: PropTypes.bool,
767
1072
  isLoading: PropTypes.bool,
768
1073
  onSelect: PropTypes.func,
1074
+ ignoreAccents: PropTypes.bool,
769
1075
  children: PropTypes.oneOfType([PropTypes.element, PropTypes.arrayOf(PropTypes.element)]).isRequired
770
1076
  });
771
1077
 
@@ -778,7 +1084,7 @@ _defineProperty(SuggestionsOverlay, "defaultProps", {
778
1084
 
779
1085
  var styled$2 = defaultStyle(function (_ref2) {
780
1086
  var position = _ref2.position;
781
- return _objectSpread({
1087
+ return _objectSpread$1({
782
1088
  position: 'absolute',
783
1089
  zIndex: 1,
784
1090
  backgroundColor: 'white',
@@ -794,6 +1100,9 @@ var styled$2 = defaultStyle(function (_ref2) {
794
1100
  });
795
1101
  var SuggestionsOverlay$1 = styled$2(SuggestionsOverlay);
796
1102
 
1103
+ 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; }
1104
+
1105
+ 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; }
797
1106
  var makeTriggerRegex = function makeTriggerRegex(trigger) {
798
1107
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
799
1108
 
@@ -808,7 +1117,7 @@ var makeTriggerRegex = function makeTriggerRegex(trigger) {
808
1117
  }
809
1118
  };
810
1119
 
811
- var getDataProvider = function getDataProvider(data) {
1120
+ var getDataProvider = function getDataProvider(data, ignoreAccents) {
812
1121
  if (data instanceof Array) {
813
1122
  // if data is an array, create a function to query that
814
1123
  return function (query, callback) {
@@ -817,7 +1126,7 @@ var getDataProvider = function getDataProvider(data) {
817
1126
  for (var i = 0, l = data.length; i < l; ++i) {
818
1127
  var display = data[i].display || data[i].id;
819
1128
 
820
- if (display.toLowerCase().indexOf(query.toLowerCase()) >= 0) {
1129
+ if (getSubstringIndex(display, query, ignoreAccents) >= 0) {
821
1130
  results.push(data[i]);
822
1131
  }
823
1132
  }
@@ -846,6 +1155,8 @@ var propTypes = {
846
1155
  singleLine: PropTypes.bool,
847
1156
  allowSpaceInQuery: PropTypes.bool,
848
1157
  EXPERIMENTAL_cutCopyPaste: PropTypes.bool,
1158
+ allowSuggestionsAboveCursor: PropTypes.bool,
1159
+ ignoreAccents: PropTypes.bool,
849
1160
  value: PropTypes.string,
850
1161
  onKeyDown: PropTypes.func,
851
1162
  onSelect: PropTypes.func,
@@ -877,7 +1188,7 @@ function (_React$Component) {
877
1188
  style = _this$props.style; // pass all props that we don't use through to the input control
878
1189
 
879
1190
  var props = omit(_this.props, 'style', keys(propTypes));
880
- return _objectSpread({}, props, style('input'), {
1191
+ return _objectSpread$2({}, props, {}, style('input'), {
881
1192
  value: _this.getPlainText()
882
1193
  }, !readOnly && !disabled && {
883
1194
  onChange: _this.handleChange,
@@ -947,7 +1258,8 @@ function (_React$Component) {
947
1258
  scrollFocusedIntoView: false
948
1259
  });
949
1260
  },
950
- isLoading: _this.isLoading()
1261
+ isLoading: _this.isLoading(),
1262
+ ignoreAccents: _this.props.ignoreAccents
951
1263
  }, _this.props.children);
952
1264
 
953
1265
  if (_this.props.suggestionsPortalHost) {
@@ -1055,9 +1367,8 @@ function (_React$Component) {
1055
1367
  var eventMock = {
1056
1368
  target: {
1057
1369
  value: newValue
1058
- } // this.props.onChange.call(this, eventMock, newValue, newPlainTextValue, mentions);
1059
-
1060
- };
1370
+ }
1371
+ }; // this.props.onChange.call(this, eventMock, newValue, newPlainTextValue, mentions);
1061
1372
 
1062
1373
  _this.executeOnChange(eventMock, newValue, newPlainTextValue, mentions);
1063
1374
  });
@@ -1202,13 +1513,24 @@ function (_React$Component) {
1202
1513
 
1203
1514
  _defineProperty(_assertThisInitialized(_this), "updateSuggestionsPosition", function () {
1204
1515
  var caretPosition = _this.state.caretPosition;
1516
+ var _this$props5 = _this.props,
1517
+ suggestionsPortalHost = _this$props5.suggestionsPortalHost,
1518
+ allowSuggestionsAboveCursor = _this$props5.allowSuggestionsAboveCursor;
1205
1519
 
1206
1520
  if (!caretPosition || !_this.suggestionsRef) {
1207
1521
  return;
1208
1522
  }
1209
1523
 
1210
1524
  var suggestions = ReactDOM.findDOMNode(_this.suggestionsRef);
1211
- var highlighter = ReactDOM.findDOMNode(_this.highlighterRef);
1525
+ var highlighter = ReactDOM.findDOMNode(_this.highlighterRef); // first get viewport-relative position (highlighter is offsetParent of caret):
1526
+
1527
+ var caretOffsetParentRect = highlighter.getBoundingClientRect();
1528
+ var caretHeight = getComputedStyleLengthProp(highlighter, 'font-size');
1529
+ var viewportRelative = {
1530
+ left: caretOffsetParentRect.left + caretPosition.left,
1531
+ top: caretOffsetParentRect.top + caretPosition.top + caretHeight
1532
+ };
1533
+ var viewportHeight = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);
1212
1534
 
1213
1535
  if (!suggestions) {
1214
1536
  return;
@@ -1216,23 +1538,16 @@ function (_React$Component) {
1216
1538
 
1217
1539
  var position = {}; // if suggestions menu is in a portal, update position to be releative to its portal node
1218
1540
 
1219
- if (_this.props.suggestionsPortalHost) {
1220
- // first get viewport-relative position (highlighter is offsetParent of caret):
1221
- var caretOffsetParentRect = highlighter.getBoundingClientRect();
1222
- var caretHeight = getComputedStyleLengthProp(highlighter, 'font-size');
1223
- var viewportRelative = {
1224
- left: caretOffsetParentRect.left + caretPosition.left,
1225
- top: caretOffsetParentRect.top + caretPosition.top + caretHeight
1226
- };
1541
+ if (suggestionsPortalHost) {
1227
1542
  position.position = 'fixed';
1228
1543
  var left = viewportRelative.left;
1229
- position.top = viewportRelative.top; // absolute/fixed positioned elements are positioned according to their entire box including margins; so we remove margins here:
1544
+ var top = viewportRelative.top; // absolute/fixed positioned elements are positioned according to their entire box including margins; so we remove margins here:
1230
1545
 
1231
1546
  left -= getComputedStyleLengthProp(suggestions, 'margin-left');
1232
- position.top -= getComputedStyleLengthProp(suggestions, 'margin-top'); // take into account highlighter/textinput scrolling:
1547
+ top -= getComputedStyleLengthProp(suggestions, 'margin-top'); // take into account highlighter/textinput scrolling:
1233
1548
 
1234
1549
  left -= highlighter.scrollLeft;
1235
- position.top -= highlighter.scrollTop; // guard for mentions suggestions list clipped by right edge of window
1550
+ top -= highlighter.scrollTop; // guard for mentions suggestions list clipped by right edge of window
1236
1551
 
1237
1552
  var viewportWidth = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);
1238
1553
 
@@ -1240,18 +1555,36 @@ function (_React$Component) {
1240
1555
  position.left = Math.max(0, viewportWidth - suggestions.offsetWidth);
1241
1556
  } else {
1242
1557
  position.left = left;
1558
+ } // guard for mentions suggestions list clipped by bottom edge of window if allowSuggestionsAboveCursor set to true.
1559
+ // Move the list up above the caret if it's getting cut off by the bottom of the window, provided that the list height
1560
+ // is small enough to NOT cover up the caret
1561
+
1562
+
1563
+ if (allowSuggestionsAboveCursor && top + suggestions.offsetHeight > viewportHeight && suggestions.offsetHeight < top - caretHeight) {
1564
+ position.top = Math.max(0, top - suggestions.offsetHeight - caretHeight);
1565
+ } else {
1566
+ position.top = top;
1243
1567
  }
1244
1568
  } else {
1245
- var _left = caretPosition.left - highlighter.scrollLeft; // guard for mentions suggestions list clipped by right edge of window
1569
+ var _left = caretPosition.left - highlighter.scrollLeft;
1570
+
1571
+ var _top = caretPosition.top - highlighter.scrollTop; // guard for mentions suggestions list clipped by right edge of window
1246
1572
 
1247
1573
 
1248
1574
  if (_left + suggestions.offsetWidth > _this.containerRef.offsetWidth) {
1249
1575
  position.right = 0;
1250
1576
  } else {
1251
1577
  position.left = _left;
1252
- }
1578
+ } // guard for mentions suggestions list clipped by bottom edge of window if allowSuggestionsAboveCursor set to true.
1579
+ // move the list up above the caret if it's getting cut off by the bottom of the window, provided that the list height
1580
+ // is small enough to NOT cover up the caret
1581
+
1253
1582
 
1254
- position.top = caretPosition.top - highlighter.scrollTop;
1583
+ if (allowSuggestionsAboveCursor && viewportRelative.top - highlighter.scrollTop + suggestions.offsetHeight > viewportHeight && suggestions.offsetHeight < caretOffsetParentRect.top - caretHeight - highlighter.scrollTop) {
1584
+ position.top = _top - suggestions.offsetHeight - caretHeight;
1585
+ } else {
1586
+ position.top = _top;
1587
+ }
1255
1588
  }
1256
1589
 
1257
1590
  if (isEqual(position, _this.state.suggestionsPosition)) {
@@ -1351,8 +1684,11 @@ function (_React$Component) {
1351
1684
  });
1352
1685
 
1353
1686
  _defineProperty(_assertThisInitialized(_this), "queryData", function (query, childIndex, querySequenceStart, querySequenceEnd, plainTextValue) {
1354
- var mentionChild = Children.toArray(_this.props.children)[childIndex];
1355
- var provideData = getDataProvider(mentionChild.props.data);
1687
+ var _this$props6 = _this.props,
1688
+ children = _this$props6.children,
1689
+ ignoreAccents = _this$props6.ignoreAccents;
1690
+ var mentionChild = Children.toArray(children)[childIndex];
1691
+ var provideData = getDataProvider(mentionChild.props.data, ignoreAccents);
1356
1692
  var syncResult = provideData(query, _this.updateSuggestions.bind(null, _this._queryId, childIndex, query, querySequenceStart, querySequenceEnd, plainTextValue));
1357
1693
 
1358
1694
  if (syncResult instanceof Array) {
@@ -1365,7 +1701,7 @@ function (_React$Component) {
1365
1701
  if (queryId !== _this._queryId) return; // save in property so that multiple sync state updates from different mentions sources
1366
1702
  // won't overwrite each other
1367
1703
 
1368
- _this.suggestions = _objectSpread({}, _this.suggestions, _defineProperty({}, childIndex, {
1704
+ _this.suggestions = _objectSpread$2({}, _this.suggestions, _defineProperty({}, childIndex, {
1369
1705
  queryInfo: {
1370
1706
  childIndex: childIndex,
1371
1707
  query: query,
@@ -1530,22 +1866,26 @@ function (_React$Component) {
1530
1866
  return;
1531
1867
  }
1532
1868
 
1869
+ if (!this.supportsClipboardActions(event)) {
1870
+ return;
1871
+ }
1872
+
1533
1873
  event.preventDefault();
1534
1874
  var _this$state3 = this.state,
1535
1875
  selectionStart = _this$state3.selectionStart,
1536
1876
  selectionEnd = _this$state3.selectionEnd;
1537
- var _this$props5 = this.props,
1538
- value = _this$props5.value,
1539
- children = _this$props5.children;
1877
+ var _this$props7 = this.props,
1878
+ value = _this$props7.value,
1879
+ children = _this$props7.children;
1540
1880
  var config = readConfigFromChildren(children);
1541
1881
  var markupStartIndex = mapPlainTextIndex(value, config, selectionStart, 'START');
1542
1882
  var markupEndIndex = mapPlainTextIndex(value, config, selectionEnd, 'END');
1543
1883
  var pastedMentions = event.clipboardData.getData('text/react-mentions');
1544
1884
  var pastedData = event.clipboardData.getData('text/plain');
1545
- var newValue = spliceString(value, markupStartIndex, markupEndIndex, pastedMentions || pastedData);
1885
+ var newValue = spliceString(value, markupStartIndex, markupEndIndex, pastedMentions || pastedData).replace(/\r/g, '');
1546
1886
  var newPlainTextValue = getPlainText(newValue, config);
1547
1887
  var eventMock = {
1548
- target: _objectSpread({}, event.target, {
1888
+ target: _objectSpread$2({}, event.target, {
1549
1889
  value: newValue
1550
1890
  })
1551
1891
  };
@@ -1557,15 +1897,20 @@ function (_React$Component) {
1557
1897
  var _this$state4 = this.state,
1558
1898
  selectionStart = _this$state4.selectionStart,
1559
1899
  selectionEnd = _this$state4.selectionEnd;
1560
- var _this$props6 = this.props,
1561
- children = _this$props6.children,
1562
- value = _this$props6.value;
1900
+ var _this$props8 = this.props,
1901
+ children = _this$props8.children,
1902
+ value = _this$props8.value;
1563
1903
  var config = readConfigFromChildren(children);
1564
1904
  var markupStartIndex = mapPlainTextIndex(value, config, selectionStart, 'START');
1565
1905
  var markupEndIndex = mapPlainTextIndex(value, config, selectionEnd, 'END');
1566
1906
  event.clipboardData.setData('text/plain', event.target.value.slice(selectionStart, selectionEnd));
1567
1907
  event.clipboardData.setData('text/react-mentions', value.slice(markupStartIndex, markupEndIndex));
1568
1908
  }
1909
+ }, {
1910
+ key: "supportsClipboardActions",
1911
+ value: function supportsClipboardActions(event) {
1912
+ return !!event.clipboardData;
1913
+ }
1569
1914
  }, {
1570
1915
  key: "handleCopy",
1571
1916
  value: function handleCopy(event) {
@@ -1573,6 +1918,10 @@ function (_React$Component) {
1573
1918
  return;
1574
1919
  }
1575
1920
 
1921
+ if (!this.supportsClipboardActions(event)) {
1922
+ return;
1923
+ }
1924
+
1576
1925
  event.preventDefault();
1577
1926
  this.saveSelectionToClipboard(event);
1578
1927
  }
@@ -1583,21 +1932,25 @@ function (_React$Component) {
1583
1932
  return;
1584
1933
  }
1585
1934
 
1935
+ if (!this.supportsClipboardActions(event)) {
1936
+ return;
1937
+ }
1938
+
1586
1939
  event.preventDefault();
1587
1940
  this.saveSelectionToClipboard(event);
1588
1941
  var _this$state5 = this.state,
1589
1942
  selectionStart = _this$state5.selectionStart,
1590
1943
  selectionEnd = _this$state5.selectionEnd;
1591
- var _this$props7 = this.props,
1592
- children = _this$props7.children,
1593
- value = _this$props7.value;
1944
+ var _this$props9 = this.props,
1945
+ children = _this$props9.children,
1946
+ value = _this$props9.value;
1594
1947
  var config = readConfigFromChildren(children);
1595
1948
  var markupStartIndex = mapPlainTextIndex(value, config, selectionStart, 'START');
1596
1949
  var markupEndIndex = mapPlainTextIndex(value, config, selectionEnd, 'END');
1597
1950
  var newValue = [value.slice(0, markupStartIndex), value.slice(markupEndIndex)].join('');
1598
1951
  var newPlainTextValue = getPlainText(newValue, config);
1599
1952
  var eventMock = {
1600
- target: _objectSpread({}, event.target, {
1953
+ target: _objectSpread$2({}, event.target, {
1601
1954
  value: newPlainTextValue
1602
1955
  })
1603
1956
  };
@@ -1617,7 +1970,9 @@ function (_React$Component) {
1617
1970
  _defineProperty(MentionsInput, "propTypes", propTypes);
1618
1971
 
1619
1972
  _defineProperty(MentionsInput, "defaultProps", {
1973
+ ignoreAccents: false,
1620
1974
  singleLine: false,
1975
+ allowSuggestionsAboveCursor: false,
1621
1976
  onKeyDown: function onKeyDown() {
1622
1977
  return null;
1623
1978
  },
@@ -1642,14 +1997,16 @@ var styled$3 = defaultStyle({
1642
1997
  display: 'block',
1643
1998
  position: 'absolute',
1644
1999
  top: 0,
2000
+ left: 0,
1645
2001
  boxSizing: 'border-box',
1646
2002
  backgroundColor: 'transparent',
1647
2003
  width: 'inherit',
1648
2004
  fontFamily: 'inherit',
1649
- fontSize: 'inherit'
2005
+ fontSize: 'inherit',
2006
+ letterSpacing: 'inherit'
1650
2007
  },
1651
2008
  '&multiLine': {
1652
- input: _objectSpread({
2009
+ input: _objectSpread$2({
1653
2010
  width: '100%',
1654
2011
  height: '100%',
1655
2012
  bottom: 0,