@wordpress/components
Version:
UI components for WordPress.
101 lines (99 loc) • 3.86 kB
JavaScript
;
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// packages/components/src/autocomplete/get-autocomplete-match.ts
var get_autocomplete_match_exports = {};
__export(get_autocomplete_match_exports, {
getAutocompleteMatch: () => getAutocompleteMatch
});
module.exports = __toCommonJS(get_autocomplete_match_exports);
var import_remove_accents = __toESM(require("remove-accents"));
function getAutocompleteMatch(textContent, completers, options) {
const {
matchCount,
isBackspacing,
getTextAfterSelection,
lastCompletion
} = options;
if (!textContent) {
return null;
}
let completer = null;
let triggerIndex = -1;
let matchedEndIndex = -1;
let matchedPrefixLength = 0;
for (const currentCompleter of completers) {
const currentIndex = textContent.lastIndexOf(currentCompleter.triggerPrefix);
if (currentIndex < 0) {
continue;
}
const currentEndIndex = currentIndex + currentCompleter.triggerPrefix.length;
if (currentEndIndex > matchedEndIndex || currentEndIndex === matchedEndIndex && currentCompleter.triggerPrefix.length > matchedPrefixLength) {
completer = currentCompleter;
triggerIndex = currentIndex;
matchedEndIndex = currentEndIndex;
matchedPrefixLength = currentCompleter.triggerPrefix.length;
}
}
if (!completer) {
return null;
}
const {
allowContext,
triggerPrefix
} = completer;
const textWithoutTrigger = textContent.slice(triggerIndex + triggerPrefix.length);
if (textWithoutTrigger.length > 50) {
return null;
}
const mismatch = matchCount === 0;
const wordsFromTrigger = textWithoutTrigger.split(/\s/);
const hasOneTriggerWord = wordsFromTrigger.length === 1;
const matchingWhileBackspacing = isBackspacing && wordsFromTrigger.length <= 3;
if (mismatch && !(matchingWhileBackspacing || hasOneTriggerWord)) {
return null;
}
if (allowContext && !allowContext(textContent.slice(0, triggerIndex), getTextAfterSelection())) {
return null;
}
if (/^\s/.test(textWithoutTrigger) || /\s\s+$/.test(textWithoutTrigger)) {
return null;
}
if (lastCompletion && lastCompletion.name === completer.name && textWithoutTrigger.trimEnd() === lastCompletion.value) {
return null;
}
return {
completer,
filterValue: (0, import_remove_accents.default)(textWithoutTrigger)
};
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
getAutocompleteMatch
});
//# sourceMappingURL=get-autocomplete-match.cjs.map