react-mentions
Version:
React mentions input
881 lines (858 loc) • 71.9 kB
JavaScript
"use strict";
function _interopDefault(ex) {
return ex && "object" == typeof ex && "default" in ex ? ex.default : ex;
}
Object.defineProperty(exports, "__esModule", {
value: !0
});
var _toConsumableArray = _interopDefault(require("@babel/runtime/helpers/toConsumableArray")), _extends = _interopDefault(require("@babel/runtime/helpers/extends")), _classCallCheck = _interopDefault(require("@babel/runtime/helpers/classCallCheck")), _createClass = _interopDefault(require("@babel/runtime/helpers/createClass")), _assertThisInitialized = _interopDefault(require("@babel/runtime/helpers/assertThisInitialized")), _inherits = _interopDefault(require("@babel/runtime/helpers/inherits")), _possibleConstructorReturn = _interopDefault(require("@babel/runtime/helpers/possibleConstructorReturn")), _getPrototypeOf = _interopDefault(require("@babel/runtime/helpers/getPrototypeOf")), _defineProperty = _interopDefault(require("@babel/runtime/helpers/defineProperty")), React = require("react"), React__default = _interopDefault(React), invariant = _interopDefault(require("invariant")), _slicedToArray = _interopDefault(require("@babel/runtime/helpers/slicedToArray")), _objectWithoutProperties = _interopDefault(require("@babel/runtime/helpers/objectWithoutProperties")), useStyles = require("substyle"), useStyles__default = _interopDefault(useStyles), PropTypes = _interopDefault(require("prop-types")), ReactDOM = _interopDefault(require("react-dom")), escapeRegex = function(str) {
return str.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
}, PLACEHOLDERS = {
id: "__id__",
display: "__display__"
}, findPositionOfCapturingGroup = function(markup, parameterName) {
invariant("id" === parameterName || "display" === parameterName, 'Second arg must be either "id" or "display", got: "'.concat(parameterName, '"'));
var indexDisplay = markup.indexOf(PLACEHOLDERS.display), indexId = markup.indexOf(PLACEHOLDERS.id);
return indexDisplay < 0 && (indexDisplay = null), indexId < 0 && (indexId = null),
invariant(null !== indexDisplay || null !== indexId, "The markup '".concat(markup, "' does not contain either of the placeholders '__id__' or '__display__'")),
null !== indexDisplay && null !== indexId ? "id" === parameterName && indexId <= indexDisplay || "display" === parameterName && indexDisplay <= indexId ? 0 : 1 : 0;
}, combineRegExps = function(regExps) {
var serializedRegexParser = /^\/(.+)\/(\w+)?$/;
return new RegExp(regExps.map(function(regex) {
var _serializedRegexParse = serializedRegexParser.exec(regex.toString()), _serializedRegexParse2 = _slicedToArray(_serializedRegexParse, 3), regexString = _serializedRegexParse2[1], regexFlags = _serializedRegexParse2[2];
return invariant(!regexFlags, "RegExp flags are not supported. Change /".concat(regexString, "/").concat(regexFlags, " into /").concat(regexString, "/")),
"(".concat(regexString, ")");
}).join("|"), "g");
}, countPlaceholders = function(markup) {
var count = 0;
return markup.indexOf("__id__") >= 0 && count++, markup.indexOf("__display__") >= 0 && count++,
count;
}, emptyFn = function() {}, iterateMentionsMarkup = function(value, config, markupIteratee) {
for (var match, textIteratee = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : emptyFn, regex = combineRegExps(config.map(function(c) {
return c.regex;
})), accOffset = 2, captureGroupOffsets = config.map(function(_ref) {
var markup = _ref.markup, result = accOffset;
return accOffset += countPlaceholders(markup) + 1, result;
}), start = 0, currentPlainTextIndex = 0; null !== (match = regex.exec(value)); ) {
var offset = captureGroupOffsets.find(function(o) {
return !!match[o];
}), mentionChildIndex = captureGroupOffsets.indexOf(offset), _config$mentionChildI = config[mentionChildIndex], markup = _config$mentionChildI.markup, displayTransform = _config$mentionChildI.displayTransform, idPos = offset + findPositionOfCapturingGroup(markup, "id"), displayPos = offset + findPositionOfCapturingGroup(markup, "display"), id = match[idPos], display = displayTransform(id, match[displayPos]), substr = value.substring(start, match.index);
textIteratee(substr, start, currentPlainTextIndex), currentPlainTextIndex += substr.length,
markupIteratee(match[0], match.index, currentPlainTextIndex, id, display, mentionChildIndex, start),
currentPlainTextIndex += display.length, start = regex.lastIndex;
}
start < value.length && textIteratee(value.substring(start), start, currentPlainTextIndex);
}, getPlainText = function(value, config) {
var result = "";
return iterateMentionsMarkup(value, config, function(match, index, plainTextIndex, id, display) {
result += display;
}, function(plainText) {
result += plainText;
}), result;
}, mapPlainTextIndex = function(value, config, indexInPlainText) {
var result, inMarkupCorrection = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : "START";
if ("number" != typeof indexInPlainText) return indexInPlainText;
return iterateMentionsMarkup(value, config, function(markup, index, mentionPlainTextIndex, id, display, childIndex, lastMentionEndIndex) {
void 0 === result && mentionPlainTextIndex + display.length > indexInPlainText && (result = "NULL" === inMarkupCorrection ? null : index + ("END" === inMarkupCorrection ? markup.length : 0));
}, function(substr, index, substrPlainTextIndex) {
void 0 === result && substrPlainTextIndex + substr.length >= indexInPlainText && (result = index + indexInPlainText - substrPlainTextIndex);
}), void 0 === result ? value.length : result;
}, spliceString = function(str, start, end, insert) {
return str.substring(0, start) + insert + str.substring(end);
}, applyChangeToValue = function(value, plainTextValue, _ref, config) {
var selectionStartBefore = _ref.selectionStartBefore, selectionEndBefore = _ref.selectionEndBefore, selectionEndAfter = _ref.selectionEndAfter, oldPlainTextValue = getPlainText(value, config), lengthDelta = oldPlainTextValue.length - plainTextValue.length;
"undefined" === selectionStartBefore && (selectionStartBefore = selectionEndAfter + lengthDelta),
"undefined" === selectionEndBefore && (selectionEndBefore = selectionStartBefore),
selectionStartBefore === selectionEndBefore && selectionEndBefore === selectionEndAfter && oldPlainTextValue.length === plainTextValue.length && (selectionStartBefore -= 1);
var insert = plainTextValue.slice(selectionStartBefore, selectionEndAfter), spliceStart = Math.min(selectionStartBefore, selectionEndAfter), spliceEnd = selectionEndBefore;
selectionStartBefore === selectionEndAfter && (spliceEnd = Math.max(selectionEndBefore, selectionStartBefore + lengthDelta));
var mappedSpliceStart = mapPlainTextIndex(value, config, spliceStart, "START"), mappedSpliceEnd = mapPlainTextIndex(value, config, spliceEnd, "END"), controlSpliceStart = mapPlainTextIndex(value, config, spliceStart, "NULL"), controlSpliceEnd = mapPlainTextIndex(value, config, spliceEnd, "NULL"), willRemoveMention = null === controlSpliceStart || null === controlSpliceEnd, newValue = spliceString(value, mappedSpliceStart, mappedSpliceEnd, insert);
if (!willRemoveMention) {
var controlPlainTextValue = getPlainText(newValue, config);
if (controlPlainTextValue !== plainTextValue) {
for (spliceStart = 0; plainTextValue[spliceStart] === controlPlainTextValue[spliceStart]; ) spliceStart++;
insert = plainTextValue.slice(spliceStart, selectionEndAfter), spliceEnd = oldPlainTextValue.lastIndexOf(plainTextValue.substring(selectionEndAfter)),
mappedSpliceStart = mapPlainTextIndex(value, config, spliceStart, "START"), mappedSpliceEnd = mapPlainTextIndex(value, config, spliceEnd, "END"),
newValue = spliceString(value, mappedSpliceStart, mappedSpliceEnd, insert);
}
}
return newValue;
}, findStartOfMentionInPlainText = function(value, config, indexInPlainText) {
var result = indexInPlainText, foundMention = !1;
if (iterateMentionsMarkup(value, config, function(markup, index, mentionPlainTextIndex, id, display, childIndex, lastMentionEndIndex) {
mentionPlainTextIndex <= indexInPlainText && mentionPlainTextIndex + display.length > indexInPlainText && (result = mentionPlainTextIndex,
foundMention = !0);
}), foundMention) return result;
}, getMentions = function(value, config) {
var mentions = [];
return iterateMentionsMarkup(value, config, function(match, index, plainTextIndex, id, display, childIndex, start) {
mentions.push({
id: id,
display: display,
childIndex: childIndex,
index: index,
plainTextIndex: plainTextIndex
});
}), mentions;
}, getSuggestionHtmlId = function(prefix, id) {
return "".concat(prefix, "-").concat(id);
}, countSuggestions = function(suggestions) {
return Object.values(suggestions).reduce(function(acc, _ref) {
return acc + _ref.results.length;
}, 0);
}, getEndOfLastMention = function(value, config) {
var mentions = getMentions(value, config), lastMention = mentions[mentions.length - 1];
return lastMention ? lastMention.plainTextIndex + lastMention.display.length : 0;
}, markupToRegex = function(markup) {
var escapedMarkup = escapeRegex(markup), charAfterDisplay = markup[markup.indexOf(PLACEHOLDERS.display) + PLACEHOLDERS.display.length], charAfterId = markup[markup.indexOf(PLACEHOLDERS.id) + PLACEHOLDERS.id.length];
return new RegExp(escapedMarkup.replace(PLACEHOLDERS.display, "([^".concat(escapeRegex(charAfterDisplay || ""), "]+?)")).replace(PLACEHOLDERS.id, "([^".concat(escapeRegex(charAfterId || ""), "]+?)")));
}, readConfigFromChildren = function(children) {
return React.Children.toArray(children).map(function(_ref) {
var _ref$props = _ref.props, markup = _ref$props.markup, regex = _ref$props.regex, displayTransform = _ref$props.displayTransform;
return {
markup: markup,
regex: regex ? coerceCapturingGroups(regex, markup) : markupToRegex(markup),
displayTransform: displayTransform || function(id, display) {
return display || id;
}
};
});
}, coerceCapturingGroups = function(regex, markup) {
var numberOfGroups = new RegExp(regex.toString() + "|").exec("").length - 1, numberOfPlaceholders = countPlaceholders(markup);
return invariant(numberOfGroups === numberOfPlaceholders, "Number of capturing groups in RegExp ".concat(regex.toString(), " (").concat(numberOfGroups, ") does not match the number of placeholders in the markup '").concat(markup, "' (").concat(numberOfPlaceholders, ")")),
regex;
}, makeMentionsMarkup = function(markup, id, display) {
return markup.replace(PLACEHOLDERS.id, id).replace(PLACEHOLDERS.display, display);
}, lettersDiacritics = [ {
base: "A",
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
}, {
base: "AA",
letters: /(Ꜳ|[\uA732])/g
}, {
base: "AE",
letters: /(Æ|Ǽ|Ǣ|[\u00C6\u01FC\u01E2])/g
}, {
base: "AO",
letters: /(Ꜵ|[\uA734])/g
}, {
base: "AU",
letters: /(Ꜷ|[\uA736])/g
}, {
base: "AV",
letters: /(Ꜹ|Ꜻ|[\uA738\uA73A])/g
}, {
base: "AY",
letters: /(Ꜽ|[\uA73C])/g
}, {
base: "B",
letters: /(B|Ⓑ|B|Ḃ|Ḅ|Ḇ|Ƀ|Ƃ|Ɓ|[\u0042\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0182\u0181])/g
}, {
base: "C",
letters: /(C|Ⓒ|C|Ć|Ĉ|Ċ|Č|Ç|Ḉ|Ƈ|Ȼ|Ꜿ|[\u0043\u24B8\uFF23\u0106\u0108\u010A\u010C\u00C7\u1E08\u0187\u023B\uA73E])/g
}, {
base: "D",
letters: /(D|Ⓓ|D|Ḋ|Ď|Ḍ|Ḑ|Ḓ|Ḏ|Đ|Ƌ|Ɗ|Ɖ|Ꝺ|Ð|[\u0044\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018B\u018A\u0189\uA779\u00D0])/g
}, {
base: "DZ",
letters: /(DZ|DŽ|[\u01F1\u01C4])/g
}, {
base: "Dz",
letters: /(Dz|Dž|[\u01F2\u01C5])/g
}, {
base: "E",
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
}, {
base: "F",
letters: /(F|Ⓕ|F|Ḟ|Ƒ|Ꝼ|[\u0046\u24BB\uFF26\u1E1E\u0191\uA77B])/g
}, {
base: "G",
letters: /(G|Ⓖ|G|Ǵ|Ĝ|Ḡ|Ğ|Ġ|Ǧ|Ģ|Ǥ|Ɠ|Ꞡ|Ᵹ|Ꝿ|[\u0047\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E])/g
}, {
base: "H",
letters: /(H|Ⓗ|H|Ĥ|Ḣ|Ḧ|Ȟ|Ḥ|Ḩ|Ḫ|Ħ|Ⱨ|Ⱶ|Ɥ|[\u0048\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D])/g
}, {
base: "I",
letters: /(I|Ⓘ|I|Ì|Í|Î|Ĩ|Ī|Ĭ|İ|Ï|Ḯ|Ỉ|Ǐ|Ȉ|Ȋ|Ị|Į|Ḭ|Ɨ|[\u0049\u24BE\uFF29\u00CC\u00CD\u00CE\u0128\u012A\u012C\u0130\u00CF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197])/g
}, {
base: "J",
letters: /(J|Ⓙ|J|Ĵ|Ɉ|[\u004A\u24BF\uFF2A\u0134\u0248])/g
}, {
base: "K",
letters: /(K|Ⓚ|K|Ḱ|Ǩ|Ḳ|Ķ|Ḵ|Ƙ|Ⱪ|Ꝁ|Ꝃ|Ꝅ|Ꞣ|[\u004B\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2])/g
}, {
base: "L",
letters: /(L|Ⓛ|L|Ŀ|Ĺ|Ľ|Ḷ|Ḹ|Ļ|Ḽ|Ḻ|Ł|Ƚ|Ɫ|Ⱡ|Ꝉ|Ꝇ|Ꞁ|[\u004C\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780])/g
}, {
base: "LJ",
letters: /(LJ|[\u01C7])/g
}, {
base: "Lj",
letters: /(Lj|[\u01C8])/g
}, {
base: "M",
letters: /(M|Ⓜ|M|Ḿ|Ṁ|Ṃ|Ɱ|Ɯ|[\u004D\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C])/g
}, {
base: "N",
letters: /(N|Ⓝ|N|Ǹ|Ń|Ñ|Ṅ|Ň|Ṇ|Ņ|Ṋ|Ṉ|Ƞ|Ɲ|Ꞑ|Ꞥ|Ŋ|[\u004E\u24C3\uFF2E\u01F8\u0143\u00D1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u0220\u019D\uA790\uA7A4\u014A])/g
}, {
base: "NJ",
letters: /(NJ|[\u01CA])/g
}, {
base: "Nj",
letters: /(Nj|[\u01CB])/g
}, {
base: "O",
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
}, {
base: "OE",
letters: /(Œ|[\u0152])/g
}, {
base: "OI",
letters: /(Ƣ|[\u01A2])/g
}, {
base: "OO",
letters: /(Ꝏ|[\uA74E])/g
}, {
base: "OU",
letters: /(Ȣ|[\u0222])/g
}, {
base: "P",
letters: /(P|Ⓟ|P|Ṕ|Ṗ|Ƥ|Ᵽ|Ꝑ|Ꝓ|Ꝕ|[\u0050\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754])/g
}, {
base: "Q",
letters: /(Q|Ⓠ|Q|Ꝗ|Ꝙ|Ɋ|[\u0051\u24C6\uFF31\uA756\uA758\u024A])/g
}, {
base: "R",
letters: /(R|Ⓡ|R|Ŕ|Ṙ|Ř|Ȑ|Ȓ|Ṛ|Ṝ|Ŗ|Ṟ|Ɍ|Ɽ|Ꝛ|Ꞧ|Ꞃ|[\u0052\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782])/g
}, {
base: "S",
letters: /(S|Ⓢ|S|ẞ|Ś|Ṥ|Ŝ|Ṡ|Š|Ṧ|Ṣ|Ṩ|Ș|Ş|Ȿ|Ꞩ|Ꞅ|[\u0053\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784])/g
}, {
base: "T",
letters: /(T|Ⓣ|T|Ṫ|Ť|Ṭ|Ț|Ţ|Ṱ|Ṯ|Ŧ|Ƭ|Ʈ|Ⱦ|Ꞇ|[\u0054\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786])/g
}, {
base: "TH",
letters: /(Þ|[\u00DE])/g
}, {
base: "TZ",
letters: /(Ꜩ|[\uA728])/g
}, {
base: "U",
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
}, {
base: "V",
letters: /(V|Ⓥ|V|Ṽ|Ṿ|Ʋ|Ꝟ|Ʌ|[\u0056\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245])/g
}, {
base: "VY",
letters: /(Ꝡ|[\uA760])/g
}, {
base: "W",
letters: /(W|Ⓦ|W|Ẁ|Ẃ|Ŵ|Ẇ|Ẅ|Ẉ|Ⱳ|[\u0057\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72])/g
}, {
base: "X",
letters: /(X|Ⓧ|X|Ẋ|Ẍ|[\u0058\u24CD\uFF38\u1E8A\u1E8C])/g
}, {
base: "Y",
letters: /(Y|Ⓨ|Y|Ỳ|Ý|Ŷ|Ỹ|Ȳ|Ẏ|Ÿ|Ỷ|Ỵ|Ƴ|Ɏ|Ỿ|[\u0059\u24CE\uFF39\u1EF2\u00DD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE])/g
}, {
base: "Z",
letters: /(Z|Ⓩ|Z|Ź|Ẑ|Ż|Ž|Ẓ|Ẕ|Ƶ|Ȥ|Ɀ|Ⱬ|Ꝣ|[\u005A\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762])/g
}, {
base: "a",
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
}, {
base: "aa",
letters: /(ꜳ|[\uA733])/g
}, {
base: "ae",
letters: /(æ|ǽ|ǣ|[\u00E6\u01FD\u01E3])/g
}, {
base: "ao",
letters: /(ꜵ|[\uA735])/g
}, {
base: "au",
letters: /(ꜷ|[\uA737])/g
}, {
base: "av",
letters: /(ꜹ|ꜻ|[\uA739\uA73B])/g
}, {
base: "ay",
letters: /(ꜽ|[\uA73D])/g
}, {
base: "b",
letters: /(b|ⓑ|b|ḃ|ḅ|ḇ|ƀ|ƃ|ɓ|[\u0062\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253])/g
}, {
base: "c",
letters: /(c|ⓒ|c|ć|ĉ|ċ|č|ç|ḉ|ƈ|ȼ|ꜿ|ↄ|[\u0063\u24D2\uFF43\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184])/g
}, {
base: "d",
letters: /(d|ⓓ|d|ḋ|ď|ḍ|ḑ|ḓ|ḏ|đ|ƌ|ɖ|ɗ|ꝺ|ð|[\u0064\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\uA77A\u00F0])/g
}, {
base: "dz",
letters: /(dz|dž|[\u01F3\u01C6])/g
}, {
base: "e",
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
}, {
base: "f",
letters: /(f|ⓕ|f|ḟ|ƒ|ꝼ|[\u0066\u24D5\uFF46\u1E1F\u0192\uA77C])/g
}, {
base: "g",
letters: /(g|ⓖ|g|ǵ|ĝ|ḡ|ğ|ġ|ǧ|ģ|ǥ|ɠ|ꞡ|ᵹ|ꝿ|[\u0067\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\u1D79\uA77F])/g
}, {
base: "h",
letters: /(h|ⓗ|h|ĥ|ḣ|ḧ|ȟ|ḥ|ḩ|ḫ|ẖ|ħ|ⱨ|ⱶ|ɥ|[\u0068\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265])/g
}, {
base: "hv",
letters: /(ƕ|[\u0195])/g
}, {
base: "i",
letters: /(i|ⓘ|i|ì|í|î|ĩ|ī|ĭ|ï|ḯ|ỉ|ǐ|ȉ|ȋ|ị|į|ḭ|ɨ|ı|[\u0069\u24D8\uFF49\u00EC\u00ED\u00EE\u0129\u012B\u012D\u00EF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131])/g
}, {
base: "ij",
letters: /(ij|[\u0133])/g
}, {
base: "j",
letters: /(j|ⓙ|j|ĵ|ǰ|ɉ|[\u006A\u24D9\uFF4A\u0135\u01F0\u0249])/g
}, {
base: "k",
letters: /(k|ⓚ|k|ḱ|ǩ|ḳ|ķ|ḵ|ƙ|ⱪ|ꝁ|ꝃ|ꝅ|ꞣ|[\u006B\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3])/g
}, {
base: "l",
letters: /(l|ⓛ|l|ŀ|ĺ|ľ|ḷ|ḹ|ļ|ḽ|ḻ|ł|ƚ|ɫ|ⱡ|ꝉ|ꞁ|ꝇ|[\u006C\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u0142\u019A\u026B\u2C61\uA749\uA781\uA747])/g
}, {
base: "lj",
letters: /(lj|[\u01C9])/g
}, {
base: "m",
letters: /(m|ⓜ|m|ḿ|ṁ|ṃ|ɱ|ɯ|[\u006D\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F])/g
}, {
base: "n",
letters: /(n|ⓝ|n|ǹ|ń|ñ|ṅ|ň|ṇ|ņ|ṋ|ṉ|ƞ|ɲ|ʼn|ꞑ|ꞥ|ŋ|[\u006E\u24DD\uFF4E\u01F9\u0144\u00F1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5\u014B])/g
}, {
base: "nj",
letters: /(nj|[\u01CC])/g
}, {
base: "o",
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
}, {
base: "oe",
letters: /(œ|[\u0153])/g
}, {
base: "oi",
letters: /(ƣ|[\u01A3])/g
}, {
base: "ou",
letters: /(ȣ|[\u0223])/g
}, {
base: "oo",
letters: /(ꝏ|[\uA74F])/g
}, {
base: "p",
letters: /(p|ⓟ|p|ṕ|ṗ|ƥ|ᵽ|ꝑ|ꝓ|ꝕ|[\u0070\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755])/g
}, {
base: "q",
letters: /(q|ⓠ|q|ɋ|ꝗ|ꝙ|[\u0071\u24E0\uFF51\u024B\uA757\uA759])/g
}, {
base: "r",
letters: /(r|ⓡ|r|ŕ|ṙ|ř|ȑ|ȓ|ṛ|ṝ|ŗ|ṟ|ɍ|ɽ|ꝛ|ꞧ|ꞃ|[\u0072\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783])/g
}, {
base: "s",
letters: /(s|ⓢ|s|ś|ṥ|ŝ|ṡ|š|ṧ|ṣ|ṩ|ș|ş|ȿ|ꞩ|ꞅ|ẛ|ſ|[\u0073\u24E2\uFF53\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B\u017F])/g
}, {
base: "ss",
letters: /(ß|[\u00DF])/g
}, {
base: "t",
letters: /(t|ⓣ|t|ṫ|ẗ|ť|ṭ|ț|ţ|ṱ|ṯ|ŧ|ƭ|ʈ|ⱦ|ꞇ|[\u0074\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787])/g
}, {
base: "th",
letters: /(þ|[\u00FE])/g
}, {
base: "tz",
letters: /(ꜩ|[\uA729])/g
}, {
base: "u",
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
}, {
base: "v",
letters: /(v|ⓥ|v|ṽ|ṿ|ʋ|ꝟ|ʌ|[\u0076\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C])/g
}, {
base: "vy",
letters: /(ꝡ|[\uA761])/g
}, {
base: "w",
letters: /(w|ⓦ|w|ẁ|ẃ|ŵ|ẇ|ẅ|ẘ|ẉ|ⱳ|[\u0077\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73])/g
}, {
base: "x",
letters: /(x|ⓧ|x|ẋ|ẍ|[\u0078\u24E7\uFF58\u1E8B\u1E8D])/g
}, {
base: "y",
letters: /(y|ⓨ|y|ỳ|ý|ŷ|ỹ|ȳ|ẏ|ÿ|ỷ|ẙ|ỵ|ƴ|ɏ|ỿ|[\u0079\u24E8\uFF59\u1EF3\u00FD\u0177\u1EF9\u0233\u1E8F\u00FF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF])/g
}, {
base: "z",
letters: /(z|ⓩ|z|ź|ẑ|ż|ž|ẓ|ẕ|ƶ|ȥ|ɀ|ⱬ|ꝣ|[\u007A\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763])/g
} ], removeAccents = function(str) {
var formattedStr = str;
return lettersDiacritics.forEach(function(letterDiacritics) {
formattedStr = formattedStr.replace(letterDiacritics.letters, letterDiacritics.base);
}), formattedStr;
}, normalizeString = function(str) {
return removeAccents(str).toLowerCase();
}, getSubstringIndex = function(str, substr, ignoreAccents) {
return ignoreAccents ? normalizeString(str).indexOf(normalizeString(substr)) : str.toLowerCase().indexOf(substr.toLowerCase());
}, isIE = function() {
return !!document.documentMode;
}, isNumber = function(val) {
return "number" == typeof val;
}, keys = function(obj) {
return obj === Object(obj) ? Object.keys(obj) : [];
}, omit = function(obj) {
for (var _ref, _len = arguments.length, rest = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) rest[_key - 1] = arguments[_key];
var keys = (_ref = []).concat.apply(_ref, rest);
return Object.keys(obj).reduce(function(acc, k) {
return obj.hasOwnProperty(k) && !keys.includes(k) && void 0 !== obj[k] && (acc[k] = obj[k]),
acc;
}, {});
}, _excluded = [ "style", "className", "classNames" ];
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;
}
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;
}
function createDefaultStyle(defaultStyle, getModifiers) {
return function(ComponentToWrap) {
var DefaultStyleEnhancer = function(_ref) {
var style = _ref.style, className = _ref.className, classNames = _ref.classNames, rest = _objectWithoutProperties(_ref, _excluded), modifiers = getModifiers ? getModifiers(rest) : void 0, styles = useStyles__default(defaultStyle, {
style: style,
className: className,
classNames: classNames
}, modifiers);
return React__default.createElement(ComponentToWrap, _extends({}, rest, {
style: styles
}));
}, displayName = ComponentToWrap.displayName || ComponentToWrap.name || "Component";
return DefaultStyleEnhancer.displayName = "defaultStyle(".concat(displayName, ")"),
React__default.forwardRef(function(props, ref) {
return DefaultStyleEnhancer(_objectSpread(_objectSpread({}, props), {}, {
ref: ref
}));
});
};
}
var _generateComponentKey = function(usedKeys, id) {
return usedKeys.hasOwnProperty(id) ? usedKeys[id]++ : usedKeys[id] = 0, id + "_" + usedKeys[id];
};
function Highlighter(_ref) {
var selectionStart = _ref.selectionStart, selectionEnd = _ref.selectionEnd, _ref$value = _ref.value, value = void 0 === _ref$value ? "" : _ref$value, onCaretPositionChange = _ref.onCaretPositionChange, containerRef = _ref.containerRef, children = _ref.children, style = (_ref.singleLine,
_ref.style), _useState = React.useState({
left: void 0,
top: void 0
}), _useState2 = _slicedToArray(_useState, 2), position = _useState2[0], setPosition = _useState2[1], _useState3 = React.useState(), _useState4 = _slicedToArray(_useState3, 2), caretElement = _useState4[0], setCaretElement = _useState4[1];
React.useEffect(function() {
notifyCaretPosition();
});
var caretPositionInMarkup, notifyCaretPosition = function() {
if (caretElement) {
var offsetLeft = caretElement.offsetLeft, offsetTop = caretElement.offsetTop;
if (position.left !== offsetLeft || position.top !== offsetTop) {
var newPosition = {
left: offsetLeft,
top: offsetTop
};
setPosition(newPosition), onCaretPositionChange(newPosition);
}
}
}, config = readConfigFromChildren(children);
selectionEnd === selectionStart && (caretPositionInMarkup = mapPlainTextIndex(value, config, selectionStart, "START"));
var resultComponents = [], componentKeys = {}, components = resultComponents, substringComponentKey = 0, renderSubstring = function(string, key) {
return React__default.createElement("span", _extends({}, style("substring"), {
key: key
}), string);
}, getMentionComponentForMatch = function(id, display, mentionChildIndex, key) {
var props = {
id: id,
display: display,
key: key
}, child = React.Children.toArray(children)[mentionChildIndex];
return React__default.cloneElement(child, props);
};
return iterateMentionsMarkup(value, config, function(markup, index, indexInPlainText, id, display, mentionChildIndex, lastMentionEndIndex) {
var key = _generateComponentKey(componentKeys, id);
components.push(getMentionComponentForMatch(id, display, mentionChildIndex, key));
}, function(substr, index, indexInPlainText) {
if (isNumber(caretPositionInMarkup) && caretPositionInMarkup >= index && caretPositionInMarkup <= index + substr.length) {
var splitIndex = caretPositionInMarkup - index;
components.push(renderSubstring(substr.substring(0, splitIndex), substringComponentKey)),
components = [ renderSubstring(substr.substring(splitIndex), substringComponentKey) ];
} else components.push(renderSubstring(substr, substringComponentKey));
substringComponentKey++;
}), components.push(" "), components !== resultComponents && resultComponents.push(function(children) {
return React__default.createElement("span", _extends({}, style("caret"), {
ref: setCaretElement,
key: "caret"
}), children);
}(components)), React__default.createElement("div", _extends({}, style, {
ref: containerRef
}), resultComponents);
}
Highlighter.propTypes = {
selectionStart: PropTypes.number,
selectionEnd: PropTypes.number,
value: PropTypes.string.isRequired,
onCaretPositionChange: PropTypes.func.isRequired,
containerRef: PropTypes.oneOfType([ PropTypes.func, PropTypes.shape({
current: "undefined" == typeof Element ? PropTypes.any : PropTypes.instanceOf(Element)
}) ]),
children: PropTypes.oneOfType([ PropTypes.element, PropTypes.arrayOf(PropTypes.element) ]).isRequired
};
var styled = createDefaultStyle({
position: "relative",
boxSizing: "border-box",
width: "100%",
color: "transparent",
overflow: "hidden",
whiteSpace: "pre-wrap",
wordWrap: "break-word",
border: "1px solid transparent",
textAlign: "start",
"&singleLine": {
whiteSpace: "pre",
wordWrap: null
},
substring: {
visibility: "hidden"
}
}, function(props) {
return {
"&singleLine": props.singleLine
};
}), Highlighter$1 = styled(Highlighter);
function Suggestion(_ref) {
var display, highlightedDisplay, id = _ref.id, focused = _ref.focused, ignoreAccents = _ref.ignoreAccents, index = _ref.index, onClick = _ref.onClick, onMouseEnter = _ref.onMouseEnter, query = _ref.query, renderSuggestion = _ref.renderSuggestion, suggestion = _ref.suggestion, style = _ref.style, rest = (_ref.className,
_ref.classNames, {
onClick: onClick,
onMouseEnter: onMouseEnter
}), getDisplay = function() {
if ("string" == typeof suggestion) return suggestion;
var id = suggestion.id, display = suggestion.display;
return void 0 !== id && display ? display : id;
}, renderHighlightedDisplay = function(display) {
var i = getSubstringIndex(display, query, ignoreAccents);
return -1 === i ? React__default.createElement("span", style("display"), display) : 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));
};
return React__default.createElement("li", _extends({
id: id,
role: "option",
"aria-selected": focused
}, rest, style), (display = getDisplay(), highlightedDisplay = renderHighlightedDisplay(display),
renderSuggestion ? renderSuggestion(suggestion, query, highlightedDisplay, index, focused) : highlightedDisplay));
}
Suggestion.propTypes = {
id: PropTypes.string.isRequired,
query: PropTypes.string.isRequired,
index: PropTypes.number.isRequired,
ignoreAccents: PropTypes.bool,
suggestion: PropTypes.oneOfType([ PropTypes.string, PropTypes.shape({
id: PropTypes.oneOfType([ PropTypes.string, PropTypes.number ]).isRequired,
display: PropTypes.string
}) ]).isRequired,
renderSuggestion: PropTypes.func,
focused: PropTypes.bool
};
var styled$1 = createDefaultStyle({
cursor: "pointer"
}, function(props) {
return {
"&focused": props.focused
};
}), Suggestion$1 = styled$1(Suggestion);
function LoadingIndicator(_ref) {
var style = _ref.style, className = _ref.className, classNames = _ref.classNames, styles = useStyles__default(defaultstyle, {
style: style,
className: className,
classNames: classNames
}), spinnerStyles = styles("spinner");
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" ]))));
}
var defaultstyle = {};
function SuggestionsOverlay(_ref) {
var id = _ref.id, _ref$suggestions = _ref.suggestions, suggestions = void 0 === _ref$suggestions ? {} : _ref$suggestions, a11ySuggestionsListLabel = _ref.a11ySuggestionsListLabel, focusIndex = _ref.focusIndex, position = _ref.position, left = _ref.left, right = _ref.right, top = _ref.top, scrollFocusedIntoView = _ref.scrollFocusedIntoView, isLoading = _ref.isLoading, isOpened = _ref.isOpened, _ref$onSelect = _ref.onSelect, onSelect = void 0 === _ref$onSelect ? function() {
return null;
} : _ref$onSelect, ignoreAccents = _ref.ignoreAccents, containerRef = _ref.containerRef, children = _ref.children, style = _ref.style, customSuggestionsContainer = _ref.customSuggestionsContainer, onMouseDown = _ref.onMouseDown, onMouseEnter = _ref.onMouseEnter, _useState = React.useState(void 0), _useState2 = _slicedToArray(_useState, 2), ulElement = _useState2[0], setUlElement = _useState2[1];
React.useEffect(function() {
if (ulElement && !(ulElement.offsetHeight >= ulElement.scrollHeight) && scrollFocusedIntoView) {
var scrollTop = ulElement.scrollTop, _ulElement$children$f = ulElement.children[focusIndex].getBoundingClientRect(), top = _ulElement$children$f.top, bottom = _ulElement$children$f.bottom, topContainer = ulElement.getBoundingClientRect().top;
bottom = bottom - topContainer + scrollTop, (top = top - topContainer + scrollTop) < scrollTop ? ulElement.scrollTop = top : bottom > ulElement.offsetHeight && (ulElement.scrollTop = bottom - ulElement.offsetHeight);
}
}, [ focusIndex, scrollFocusedIntoView, ulElement ]);
var suggestionsToRender, renderSuggestion = function(result, queryInfo, index) {
var isFocused = index === focusIndex, childIndex = queryInfo.childIndex, query = queryInfo.query, renderSuggestion = React.Children.toArray(children)[childIndex].props.renderSuggestion;
return React__default.createElement(Suggestion$1, {
style: style("item"),
key: "".concat(childIndex, "-").concat(getID(result)),
id: getSuggestionHtmlId(id, index),
query: query,
index: index,
ignoreAccents: ignoreAccents,
renderSuggestion: renderSuggestion,
suggestion: result,
focused: isFocused,
onClick: function() {
return select(result, queryInfo);
},
onMouseEnter: function() {
return handleMouseEnter(index);
}
});
}, handleMouseEnter = function(index, ev) {
onMouseEnter && onMouseEnter(index);
}, select = function(suggestion, queryInfo) {
onSelect(suggestion, queryInfo);
}, getID = function(suggestion) {
return "string" == typeof suggestion ? suggestion : suggestion.id;
};
return isOpened ? React__default.createElement("div", _extends({}, useStyles.inline({
position: position || "absolute",
left: left,
right: right,
top: top
}, style), {
onMouseDown: onMouseDown,
ref: containerRef
}), (suggestionsToRender = React__default.createElement("ul", _extends({
ref: setUlElement,
id: id,
role: "listbox",
"aria-label": a11ySuggestionsListLabel
}, style("list")), Object.values(suggestions).reduce(function(accResults, _ref2) {
var results = _ref2.results, queryInfo = _ref2.queryInfo;
return [].concat(_toConsumableArray(accResults), _toConsumableArray(results.map(function(result, index) {
return renderSuggestion(result, queryInfo, accResults.length + index);
})));
}, [])), customSuggestionsContainer ? customSuggestionsContainer(suggestionsToRender) : suggestionsToRender), function() {
if (isLoading) return React__default.createElement(LoadingIndicator, {
style: style("loadingIndicator")
});
}()) : null;
}
SuggestionsOverlay.propTypes = {
id: PropTypes.string.isRequired,
suggestions: PropTypes.object.isRequired,
a11ySuggestionsListLabel: PropTypes.string,
focusIndex: PropTypes.number,
position: PropTypes.string,
left: PropTypes.number,
right: PropTypes.number,
top: PropTypes.number,
scrollFocusedIntoView: PropTypes.bool,
isLoading: PropTypes.bool,
isOpened: PropTypes.bool.isRequired,
onSelect: PropTypes.func,
ignoreAccents: PropTypes.bool,
customSuggestionsContainer: PropTypes.func,
containerRef: PropTypes.oneOfType([ PropTypes.func, PropTypes.shape({
current: "undefined" == typeof Element ? PropTypes.any : PropTypes.instanceOf(Element)
}) ])
};
var styled$2 = createDefaultStyle({
zIndex: 1,
backgroundColor: "white",
marginTop: 14,
minWidth: 100,
list: {
margin: 0,
padding: 0,
listStyleType: "none"
}
}), SuggestionsOverlay$1 = styled$2(SuggestionsOverlay);
function ownKeys$1(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;
}
function _objectSpread$1(target) {
for (var i = 1; i < arguments.length; i++) {
var source = null != arguments[i] ? arguments[i] : {};
i % 2 ? ownKeys$1(Object(source), !0).forEach(function(key) {
_defineProperty(target, key, source[key]);
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$1(Object(source)).forEach(function(key) {
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
});
}
return target;
}
function _createSuper(Derived) {
var hasNativeReflectConstruct = _isNativeReflectConstruct();
return function() {
var result, Super = _getPrototypeOf(Derived);
if (hasNativeReflectConstruct) {
var NewTarget = _getPrototypeOf(this).constructor;
result = Reflect.construct(Super, arguments, NewTarget);
} else result = Super.apply(this, arguments);
return _possibleConstructorReturn(this, result);
};
}
function _isNativeReflectConstruct() {
if ("undefined" == typeof Reflect || !Reflect.construct) return !1;
if (Reflect.construct.sham) return !1;
if ("function" == typeof Proxy) return !0;
try {
return Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {})),
!0;
} catch (e) {
return !1;
}
}
var makeTriggerRegex = function(trigger) {
var options = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
if (trigger instanceof RegExp) return trigger;
var allowSpaceInQuery = options.allowSpaceInQuery, escapedTriggerChar = escapeRegex(trigger);
return new RegExp("(?:^|\\s)(".concat(escapedTriggerChar, "([^").concat(allowSpaceInQuery ? "" : "\\s").concat(escapedTriggerChar, "]*))$"));
}, getDataProvider = function(data, ignoreAccents) {
return data instanceof Array ? function(query, callback) {
for (var results = [], i = 0, l = data.length; i < l; ++i) {
var display = data[i].display || data[i].id;
getSubstringIndex(display, query, ignoreAccents) >= 0 && results.push(data[i]);
}
return results;
} : data;
}, KEY = {
TAB: 9,
RETURN: 13,
ESC: 27,
UP: 38,
DOWN: 40
}, isComposing = !1, propTypes = {
singleLine: PropTypes.bool,
allowSpaceInQuery: PropTypes.bool,
allowSuggestionsAboveCursor: PropTypes.bool,
forceSuggestionsAboveCursor: PropTypes.bool,
ignoreAccents: PropTypes.bool,
a11ySuggestionsListLabel: PropTypes.string,
value: PropTypes.string,
onKeyDown: PropTypes.func,
customSuggestionsContainer: PropTypes.func,
onSelect: PropTypes.func,
onBlur: PropTypes.func,
onChange: PropTypes.func,
suggestionsPortalHost: "undefined" == typeof Element ? PropTypes.any : PropTypes.PropTypes.instanceOf(Element),
inputRef: PropTypes.oneOfType([ PropTypes.func, PropTypes.shape({
current: "undefined" == typeof Element ? PropTypes.any : PropTypes.instanceOf(Element)
}) ]),
children: PropTypes.oneOfType([ PropTypes.element, PropTypes.arrayOf(PropTypes.element) ]).isRequired
}, MentionsInput = function(_React$Component) {
_inherits(MentionsInput, _React$Component);
var _super = _createSuper(MentionsInput);
function MentionsInput(_props) {
var _this;
return _classCallCheck(this, MentionsInput), _this = _super.call(this, _props),
_defineProperty(_assertThisInitialized(_this), "setContainerElement", function(el) {
_this.containerElement = el;
}), _defineProperty(_assertThisInitialized(_this), "getInputProps", function() {
var _this$props = _this.props, readOnly = _this$props.readOnly, disabled = _this$props.disabled, style = _this$props.style;
return _objectSpread$1(_objectSpread$1(_objectSpread$1(_objectSpread$1({}, omit(_this.props, [ "style", "classNames", "className" ], keys(propTypes))), style("input")), {}, {
value: _this.getPlainText(),
onScroll: _this.updateHighlighterScroll
}, !readOnly && !disabled && {
onChange: _this.handleChange,
onSelect: _this.handleSelect,
onKeyDown: _this.handleKeyDown,
onBlur: _this.handleBlur,
onCompositionStart: _this.handleCompositionStart,
onCompositionEnd: _this.handleCompositionEnd
}), _this.isOpened() && {
role: "combobox",
"aria-controls": _this.uuidSuggestionsOverlay,
"aria-expanded": !0,
"aria-autocomplete": "list",
"aria-haspopup": "listbox",
"aria-activedescendant": getSuggestionHtmlId(_this.uuidSuggestionsOverlay, _this.state.focusIndex)
});
}), _defineProperty(_assertThisInitialized(_this), "renderControl", function() {
var _this$props2 = _this.props, singleLine = _this$props2.singleLine, style = _this$props2.style, inputProps = _this.getInputProps();
return React__default.createElement("div", style("control"), _this.renderHighlighter(), singleLine ? _this.renderInput(inputProps) : _this.renderTextarea(inputProps));
}), _defineProperty(_assertThisInitialized(_this), "renderInput", function(props) {
return React__default.createElement("input", _extends({
type: "text",
ref: _this.setInputRef
}, props));
}), _defineProperty(_assertThisInitialized(_this), "renderTextarea", function(props) {
return React__default.createElement("textarea", _extends({
ref: _this.setInputRef
}, props));
}), _defineProperty(_assertThisInitialized(_this), "setInputRef", function(el) {
_this.inputElement = el;
var inputRef = _this.props.inputRef;
"function" == typeof inputRef ? inputRef(el) : inputRef && (inputRef.current = el);
}), _defineProperty(_assertThisInitialized(_this), "setSuggestionsElement", function(el) {
_this.suggestionsElement = el;
}), _defineProperty(_assertThisInitialized(_this), "renderSuggestionsOverlay", function() {
if (!isNumber(_this.state.selectionStart)) return null;
var _this$state$suggestio = _this.state.suggestionsPosition, position = _this$state$suggestio.position, left = _this$state$suggestio.left, top = _this$state$suggestio.top, right = _this$state$suggestio.right, suggestionsNode = React__default.createElement(SuggestionsOverlay$1, {
id: _this.uuidSuggestionsOverlay,
style: _this.props.style("suggestions"),
position: position,
left: left,
top: top,
right: right,
focusIndex: _this.state.focusIndex,
scrollFocusedIntoView: _this.state.scrollFocusedIntoView,
containerRef: _this.setSuggestionsElement,
suggestions: _this.state.suggestions,
customSuggestionsContainer: _this.props.customSuggestionsContainer,
onSelect: _this.addMention,
onMouseDown: _this.handleSuggestionsMouseDown,
onMouseEnter: _this.handleSuggestionsMouseEnter,
isLoading: _this.isLoading(),
isOpened: _this.isOpened(),
ignoreAccents: _this.props.ignoreAccents,
a11ySuggestionsListLabel: _this.props.a11ySuggestionsListLabel
}, _this.props.children);
return _this.props.suggestionsPortalHost ? ReactDOM.createPortal(suggestionsNode, _this.props.suggestionsPortalHost) : suggestionsNode;
}), _defineProperty(_assertThisInitialized(_this), "renderHighlighter", function() {
var _this$state = _this.state, selectionStart = _this$state.selectionStart, selectionEnd = _this$state.selectionEnd, _this$props3 = _this.props, singleLine = _this$props3.singleLine, children = _this$props3.children, value = _this$props3.value, style = _this$props3.style;
return React__default.createElement(Highlighter$1, {
containerRef: _this.setHighlighterElement,
style: style("highlighter"),
value: value,
singleLine: singleLine,
selectionStart: selectionStart,
selectionEnd: selectionEnd,
onCaretPositionChange: _this.handleCaretPositionChange
}, children);
}), _defineProperty(_assertThisInitialized(_this), "setHighlighterElement", function(el) {
_this.highlighterElement = el;
}), _defineProperty(_assertThisInitialized(_this), "handleCaretPositionChange", function(position) {
_this.setState({
caretPosition: position
});
}), _defineProperty(_assertThisInitialized(_this), "getPlainText", function() {
return getPlainText(_this.props.value || "", readConfigFromChildren(_this.props.children));
}), _defineProperty(_assertThisInitialized(_this), "executeOnChange", function(event) {
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) args[_key - 1] = arguments[_key];
var _this$props4, _this$props$valueLink;
return _this.props.onChange ? (_this$props4 = _this.props).onChange.apply(_this$props4, [ event ].concat(args)) : _this.props.valueLink ? (_this$props$valueLink = _this.props.valueLink).requestChange.apply(_this$props$valueLink, [ event.target.value ].concat(args)) : void 0;
}), _definePr