/*** Copyright (c) Meta Platforms, Inc. and affiliates.** This source code is licensed under the MIT license found in the* LICENSE file in the root directory of this source tree.*//*** These variables store information about text content of a target node,* allowing comparison of content before and after a given event.** Identify the node where selection currently begins, then observe* both its text content and its current position in the DOM. Since the* browser may natively replace the target node during composition, we can* use its position to find its replacement.***/let root = null;
let startText = null;
let fallbackText = null;
export function initialize(nativeEventTarget) {
root = nativeEventTarget;
startText = getText();
return true;
}export function reset() {
root = null;
startText = null;
fallbackText = null;
}export function getData() {
if (fallbackText) {
return fallbackText;
}let start;
const startValue = startText;
const startLength = startValue.length;
let end;
const endValue = getText();
const endLength = endValue.length;
for (start = 0; start < startLength; start++) {
if (startValue[start] !== endValue[start]) {
break;
}}const minEnd = startLength - start;
for (end = 1; end <= minEnd; end++) {
if (startValue[startLength - end] !== endValue[endLength - end]) {
break;
}}const sliceTail = end > 1 ? 1 - end : undefined;
fallbackText = endValue.slice(start, sliceTail);
return fallbackText;
}export function getText() {
if ('value' in root) {
return root.value;
}return root.textContent;
}