PluginProbe
Gutenberg / trunk
Gutenberg vtrunk
24.1.0 24.0.0 23.9.1 23.9.0 23.8.0 23.7.2 23.7.1 23.7.0 23.6.1 23.6.2 23.6.0 23.5.3 23.5.2 23.5.1 23.5.0 23.4.0 23.3.2 23.3.1 23.3.0 23.2.0 23.2.1 23.2.2 23.1.1 23.1.0 23.0.1 All 404 releases
← All changes | build/scripts/rich-text/index.js +324 -252 23.9.1 → trunk View file →
@@ -257,10 +257,10 @@
257 257 if (keys1.length !== keys2.length) {
258 258 return false;
259 259 }
260 260 const length = keys1.length;
261 - for (let i2 = 0; i2 < length; i2++) {
262 - const name = keys1[i2];
261 + for (let i = 0; i < length; i++) {
262 + const name = keys1[i];
263 263 if (attributes1[name] !== attributes2[name]) {
264 264 return false;
265 265 }
266 266 }
@@ -397,11 +397,11 @@
397 397 return EMPTY_ACTIVE_FORMATS3;
398 398 }
399 399 const selectedFormats = formats.slice(start, end);
400 400 const _activeFormats = [...selectedFormats[0]];
401 - let i2 = selectedFormats.length;
402 - while (i2--) {
403 - const formatsAtIndex = selectedFormats[i2];
401 + let i = selectedFormats.length;
402 + while (i--) {
403 + const formatsAtIndex = selectedFormats[i];
404 404 if (!formatsAtIndex) {
405 405 return EMPTY_ACTIVE_FORMATS3;
406 406 }
407 407 let ii = _activeFormats.length;
@@ -489,11 +489,11 @@
489 489 object: formatType.object,
490 490 attributes: restoreOnAttributes(elementAttributes, isEditableTree)
491 491 };
492 492 }
493 - function isEqualUntil(a2, b2, index) {
493 + function isEqualUntil(a, b, index) {
494 494 do {
495 - if (a2[index] !== b2[index]) {
495 + if (a[index] !== b[index]) {
496 496 return false;
497 497 }
498 498 } while (index--);
499 499 return true;
@@ -521,15 +521,15 @@
521 521 const deepestActiveFormat = activeFormats[activeFormats.length - 1];
522 522 let lastCharacterFormats;
523 523 let lastCharacter;
524 524 append3(tree, "");
525 - for (let i2 = 0; i2 < formatsLength; i2++) {
526 - const character = text.charAt(i2);
525 + for (let i = 0; i < formatsLength; i++) {
526 + const character = text.charAt(i);
527 527 const shouldInsertPadding = isEditableTree && // Pad the line if the line is empty.
528 528 (!lastCharacter || // Pad the line if the previous character is a line break, otherwise
529 529 // the line break won't be visible.
530 530 lastCharacter === "\n");
531 - const characterFormats = formats[i2];
531 + const characterFormats = formats[i];
532 532 let pointer = getLastChild3(tree);
533 533 if (characterFormats) {
534 534 characterFormats.forEach((format, formatIndex) => {
535 535 if (pointer && lastCharacterFormats && // Reuse the last element if all formats remain the same.
@@ -560,9 +560,9 @@
560 560 }
561 561 pointer = append3(newNode, "");
562 562 });
563 563 }
564 - if (i2 === 0) {
564 + if (i === 0) {
565 565 if (onStartIndex && start === 0) {
566 566 onStartIndex(tree, pointer);
567 567 }
568 568 if (onEndIndex && end === 0) {
@@ -569,9 +569,9 @@
569 569 onEndIndex(tree, pointer);
570 570 }
571 571 }
572 572 if (character === OBJECT_REPLACEMENT_CHARACTER) {
573 - const replacement = replacements[i2];
573 + const replacement = replacements[i];
574 574 if (!replacement) {
575 575 continue;
576 576 }
577 577 const { type, attributes, innerHTML } = replacement;
@@ -608,9 +608,9 @@
608 608 const attrs = {
609 609 contenteditable: "false",
610 610 "data-rich-text-bogus": true
611 611 };
612 - if (start === i2 && end === i2 + 1) {
612 + if (start === i && end === i + 1) {
613 613 attrs["data-rich-text-format-boundary"] = true;
614 614 }
615 615 pointer = append3(pointer, {
616 616 type: "span",
@@ -615,9 +615,9 @@
615 615 pointer = append3(pointer, {
616 616 type: "span",
617 617 attributes: attrs
618 618 });
619 - if (isEditableTree && i2 + 1 === text.length) {
619 + if (isEditableTree && i + 1 === text.length) {
620 620 append3(getParent3(pointer), ZWNBSP);
621 621 }
622 622 }
623 623 pointer = append3(
@@ -657,16 +657,16 @@
657 657 pointer = append3(getParent3(pointer), character);
658 658 } else {
659 659 appendText3(pointer, character);
660 660 }
661 - if (onStartIndex && start === i2 + 1) {
661 + if (onStartIndex && start === i + 1) {
662 662 onStartIndex(tree, pointer);
663 663 }
664 - if (onEndIndex && end === i2 + 1) {
664 + if (onEndIndex && end === i + 1) {
665 665 onEndIndex(tree, pointer);
666 666 }
667 - if (shouldInsertPadding && i2 === text.length) {
668 - append3(getParent3(pointer), ZWNBSP);
667 + if (shouldInsertPadding && i === text.length) {
668 + appendText3(pointer, ZWNBSP);
669 669 if (placeholder && text.length === 0) {
670 670 append3(getParent3(pointer), {
671 671 type: "span",
672 672 attributes: {
@@ -986,9 +986,9 @@
986 986 }
987 987 function collapseWhiteSpace(element, isRoot = true, hasPrecedingSpace = false, hasTrailingSpace = false) {
988 988 const clone = element.cloneNode(true);
989 989 clone.normalize();
990 - Array.from(clone.childNodes).forEach((node, i2, nodes) => {
990 + Array.from(clone.childNodes).forEach((node, i, nodes) => {
991 991 if (node.nodeType === node.TEXT_NODE) {
992 992 let newNodeValue = node.nodeValue;
993 993 if (/[\n\t\r\f]/.test(newNodeValue)) {
994 994 newNodeValue = newNodeValue.replace(/[\n\t\r\f]+/g, " ");
@@ -995,12 +995,12 @@
995 995 }
996 996 if (newNodeValue.indexOf(" ") !== -1) {
997 997 newNodeValue = newNodeValue.replace(/ {2,}/g, " ");
998 998 }
999 - if (i2 === 0 && newNodeValue.startsWith(" ") && (isRoot || hasPrecedingSpace)) {
999 + if (i === 0 && newNodeValue.startsWith(" ") && (isRoot || hasPrecedingSpace)) {
1000 1000 newNodeValue = newNodeValue.slice(1);
1001 1001 }
1002 - if (i2 === nodes.length - 1 && newNodeValue.endsWith(" ") && (isRoot || hasTrailingSpace)) {
1002 + if (i === nodes.length - 1 && newNodeValue.endsWith(" ") && (isRoot || hasTrailingSpace)) {
1003 1003 newNodeValue = newNodeValue.slice(0, -1);
1004 1004 }
1005 1005 node.nodeValue = newNodeValue;
1006 1006 } else if (node.nodeType === node.ELEMENT_NODE) {
@@ -1163,10 +1163,10 @@
1163 1163 return;
1164 1164 }
1165 1165 const length = element.attributes.length;
1166 1166 let accumulator;
1167 - for (let i2 = 0; i2 < length; i2++) {
1168 - const { name, value } = element.attributes[i2];
1167 + for (let i = 0; i < length; i++) {
1168 + const { name, value } = element.attributes[i];
1169 1169 if (name.indexOf("data-rich-text-") === 0) {
1170 1170 continue;
1171 1171 }
1172 1172 const safeName = /^on/i.test(name) ? "data-disable-rich-text-" + name : name;
@@ -1176,13 +1176,13 @@
1176 1176 return accumulator;
1177 1177 }
1178 1178
1179 1179 // packages/rich-text/build-module/concat.mjs
1180 - function mergePair(a2, b2) {
1181 - a2.formats = a2.formats.concat(b2.formats);
1182 - a2.replacements = a2.replacements.concat(b2.replacements);
1183 - a2.text += b2.text;
1184 - return a2;
1180 + function mergePair(a, b) {
1181 + a.formats = a.formats.concat(b.formats);
1182 + a.replacements = a.replacements.concat(b.replacements);
1183 + a.text += b.text;
1184 + return a;
1185 1185 }
1186 1186 function concat(...values) {
1187 1187 return normaliseFormats(values.reduce(mergePair, create()));
1188 1188 }
@@ -1338,11 +1338,11 @@
1338 1338 endIndex++;
1339 1339 }
1340 1340 }
1341 1341 } else {
1342 - for (let i2 = startIndex; i2 < endIndex; i2++) {
1343 - if (newFormats[i2]) {
1344 - filterFormats(newFormats, i2, formatType);
1342 + for (let i = startIndex; i < endIndex; i++) {
1343 + if (newFormats[i]) {
1344 + filterFormats(newFormats, i, formatType);
1345 1345 }
1346 1346 }
1347 1347 }
1348 1348 return normaliseFormats({
@@ -1494,10 +1494,10 @@
1494 1494 return [before, after];
1495 1495 }
1496 1496
1497 1497 // packages/rich-text/build-module/is-range-equal.mjs
1498 - function isRangeEqual(a2, b2) {
1499 - return a2 === b2 || a2 && b2 && a2.startContainer === b2.startContainer && a2.startOffset === b2.startOffset && a2.endContainer === b2.endContainer && a2.endOffset === b2.endOffset;
1498 + function isRangeEqual(a, b) {
1499 + return a === b || a && b && a.startContainer === b.startContainer && a.startOffset === b.startOffset && a.endContainer === b.endContainer && a.endOffset === b.endOffset;
1500 1500 }
1501 1501
1502 1502 // packages/rich-text/build-module/to-dom.mjs
1503 1503 var MATHML_NAMESPACE = "http://www.w3.org/1998/Math/MathML";
@@ -1502,13 +1502,13 @@
1502 1502 // packages/rich-text/build-module/to-dom.mjs
1503 1503 var MATHML_NAMESPACE = "http://www.w3.org/1998/Math/MathML";
1504 1504 function createPathToNode(node, rootNode, path) {
1505 1505 const parentNode = node.parentNode;
1506 - let i2 = 0;
1506 + let i = 0;
1507 1507 while (node = node.previousSibling) {
1508 - i2++;
1508 + i++;
1509 1509 }
1510 - path = [i2, ...path];
1510 + path = [i, ...path];
1511 1511 if (parentNode !== rootNode) {
1512 1512 path = createPathToNode(parentNode, rootNode, path);
1513 1513 }
1514 1514 return path;
@@ -1642,12 +1642,12 @@
1642 1642 applySelection(selection, current);
1643 1643 }
1644 1644 }
1645 1645 function applyValue(future, current) {
1646 - let i2 = 0;
1646 + let i = 0;
1647 1647 let futureChild;
1648 1648 while (futureChild = future.firstChild) {
1649 - const currentChild = current.childNodes[i2];
1649 + const currentChild = current.childNodes[i];
1650 1650 if (!currentChild) {
1651 1651 current.appendChild(futureChild);
1652 1652 } else if (!currentChild.isEqualNode(futureChild)) {
1653 1653 if (currentChild.nodeName !== futureChild.nodeName || currentChild.nodeType === currentChild.TEXT_NODE && currentChild.data !== futureChild.data) {
@@ -1677,12 +1677,12 @@
1677 1677 }
1678 1678 } else {
1679 1679 future.removeChild(futureChild);
1680 1680 }
1681 - i2++;
1681 + i++;
1682 1682 }
1683 - while (current.childNodes[i2]) {
1684 - current.removeChild(current.childNodes[i2]);
1683 + while (current.childNodes[i]) {
1684 + current.removeChild(current.childNodes[i]);
1685 1685 }
1686 1686 }
1687 1687 function applySelection({ startPath, endPath }, current) {
1688 1688 const { node: startContainer, offset: startOffset } = getNodeByPath(
@@ -1754,23 +1754,8 @@
1754 1754 var import_compose8 = __toESM(require_compose(), 1);
1755 1755 var import_data9 = __toESM(require_data(), 1);
1756 1756 var import_deprecated = __toESM(require_deprecated(), 1);
1757 1757
1758 - // packages/rich-text/build-module/owns-selection.mjs
1759 - function ownsSelection(element) {
1760 - const { ownerDocument } = element;
1761 - const { activeElement } = ownerDocument;
1762 - if (activeElement === element) {
1763 - return true;
1764 - }
1765 - if (!activeElement || activeElement.contentEditable !== "true" || element.contentEditable !== "true" || !activeElement.contains(element)) {
1766 - return false;
1767 - }
1768 - const selection = ownerDocument.defaultView.getSelection();
1769 - const { anchorNode, focusNode } = selection;
1770 - return !!anchorNode && !!focusNode && element.contains(anchorNode) && element.contains(focusNode);
1771 - }
1772 -
1773 1758 // packages/rich-text/build-module/hook/use-default-style.mjs
1774 1759 var import_element = __toESM(require_element(), 1);
1775 1760 var whiteSpace = "pre-wrap";
1776 1761 function useDefaultStyle() {
@@ -1782,163 +1767,176 @@
1782 1767 }, []);
1783 1768 }
1784 1769
1785 1770 // node_modules/colord/index.mjs
1786 - var r = { grad: 0.9, turn: 360, rad: 360 / (2 * Math.PI) };
1787 - var t = function(r2) {
1771 + for (r = { grad: 0.9, turn: 360, rad: 360 / (2 * Math.PI) }, t = function(r2) {
1788 1772 return "string" == typeof r2 ? r2.length > 0 : "number" == typeof r2;
1789 - };
1790 - var n = function(r2, t2, n2) {
1773 + }, n = function(r2, t2, n2) {
1791 1774 return void 0 === t2 && (t2 = 0), void 0 === n2 && (n2 = Math.pow(10, t2)), Math.round(n2 * r2) / n2 + 0;
1792 - };
1793 - var e = function(r2, t2, n2) {
1775 + }, u = function(r2, t2, n2) {
1794 1776 return void 0 === t2 && (t2 = 0), void 0 === n2 && (n2 = 1), r2 > n2 ? n2 : r2 > t2 ? r2 : t2;
1795 - };
1796 - var u = function(r2) {
1797 - return (r2 = isFinite(r2) ? r2 % 360 : 0) > 0 ? r2 : r2 + 360;
1798 - };
1799 - var a = function(r2) {
1800 - return { r: e(r2.r, 0, 255), g: e(r2.g, 0, 255), b: e(r2.b, 0, 255), a: e(r2.a) };
1801 - };
1802 - var o = function(r2) {
1777 + }, e = function(r2) {
1778 + return (r2 = isFinite(r2) ? r2 % 360 : 0) < 0 ? r2 + 360 : r2;
1779 + }, o = function(r2, t2) {
1780 + return void 0 === t2 && (t2 = 0), n(r2, t2) % 360;
1781 + }, a = function(r2) {
1782 + return { r: u(r2.r, 0, 255), g: u(r2.g, 0, 255), b: u(r2.b, 0, 255), a: u(r2.a) };
1783 + }, i = function(r2) {
1803 1784 return { r: n(r2.r), g: n(r2.g), b: n(r2.b), a: n(r2.a, 3) };
1785 + }, s = /^#([0-9a-f]{3,8})$/i, d = function(r2, t2) {
1786 + var n2 = r2.charCodeAt(t2);
1787 + return (15 & n2) + 9 * (n2 >> 6);
1788 + }, h = function(r2, t2) {
1789 + return d(r2, t2) << 4 | d(r2, t2 + 1);
1790 + }, b = [], f = 0; f < 256; f++) b.push((f < 16 ? "0" : "") + f.toString(16));
1791 + var r;
1792 + var t;
1793 + var n;
1794 + var u;
1795 + var e;
1796 + var o;
1797 + var a;
1798 + var i;
1799 + var s;
1800 + var d;
1801 + var h;
1802 + var b;
1803 + var f;
1804 + var g = function(r) {
1805 + return b[u(r, 0, 255)];
1804 1806 };
1805 - var i = /^#([0-9a-f]{3,8})$/i;
1806 - var s = function(r2) {
1807 - var t2 = r2.toString(16);
1808 - return t2.length < 2 ? "0" + t2 : t2;
1807 + var c = function(r) {
1808 + var t = r.r, n = r.g, u = r.b, e = r.a, o = Math.max(t, n, u), a = o - Math.min(t, n, u), i = a ? o === t ? (n - u) / a : o === n ? 2 + (u - t) / a : 4 + (t - n) / a : 0;
1809 + return { h: 60 * (i < 0 ? i + 6 : i), s: o ? a / o * 100 : 0, v: o / 255 * 100, a: e };
1809 1810 };
1810 - var h = function(r2) {
1811 - var t2 = r2.r, n2 = r2.g, e2 = r2.b, u2 = r2.a, a2 = Math.max(t2, n2, e2), o2 = a2 - Math.min(t2, n2, e2), i2 = o2 ? a2 === t2 ? (n2 - e2) / o2 : a2 === n2 ? 2 + (e2 - t2) / o2 : 4 + (t2 - n2) / o2 : 0;
1812 - return { h: 60 * (i2 < 0 ? i2 + 6 : i2), s: a2 ? o2 / a2 * 100 : 0, v: a2 / 255 * 100, a: u2 };
1811 + var v = function(r) {
1812 + var t = r.h, n = r.s, u = r.v, e = r.a;
1813 + t = t / 360 * 6, n /= 100, u /= 100;
1814 + var o = Math.floor(t), a = u * (1 - n), i = u * (1 - (t - o) * n), s = u * (1 - (1 - t + o) * n), d = o % 6;
1815 + return { r: 255 * [u, i, a, a, s, u][d], g: 255 * [s, u, u, i, a, a][d], b: 255 * [a, a, s, u, u, i][d], a: e };
1813 1816 };
1814 - var b = function(r2) {
1815 - var t2 = r2.h, n2 = r2.s, e2 = r2.v, u2 = r2.a;
1816 - t2 = t2 / 360 * 6, n2 /= 100, e2 /= 100;
1817 - var a2 = Math.floor(t2), o2 = e2 * (1 - n2), i2 = e2 * (1 - (t2 - a2) * n2), s2 = e2 * (1 - (1 - t2 + a2) * n2), h2 = a2 % 6;
1818 - return { r: 255 * [e2, i2, o2, o2, s2, e2][h2], g: 255 * [s2, e2, e2, i2, o2, o2][h2], b: 255 * [o2, o2, s2, e2, e2, i2][h2], a: u2 };
1817 + var l = function(r) {
1818 + return { h: e(r.h), s: u(r.s, 0, 100), l: u(r.l, 0, 100), a: u(r.a) };
1819 1819 };
1820 - var g = function(r2) {
1821 - return { h: u(r2.h), s: e(r2.s, 0, 100), l: e(r2.l, 0, 100), a: e(r2.a) };
1820 + var p = function(r) {
1821 + return { h: o(r.h), s: n(r.s), l: n(r.l), a: n(r.a, 3) };
1822 1822 };
1823 - var d = function(r2) {
1824 - return { h: n(r2.h), s: n(r2.s), l: n(r2.l), a: n(r2.a, 3) };
1823 + var m = function(r) {
1824 + return v((n = (t = r).s, { h: t.h, s: (n *= ((u = t.l) < 50 ? u : 100 - u) / 100) > 0 ? 2 * n / (u + n) * 100 : 0, v: u + n, a: t.a }));
1825 + var t, n, u;
1825 1826 };
1826 - var f = function(r2) {
1827 - return b((n2 = (t2 = r2).s, { h: t2.h, s: (n2 *= ((e2 = t2.l) < 50 ? e2 : 100 - e2) / 100) > 0 ? 2 * n2 / (e2 + n2) * 100 : 0, v: e2 + n2, a: t2.a }));
1828 - var t2, n2, e2;
1827 + var y = function(r) {
1828 + return { h: (t = c(r)).h, s: (e = (200 - (n = t.s)) * (u = t.v) / 100) > 0 && e < 200 ? n * u / 100 / (e <= 100 ? e : 200 - e) * 100 : 0, l: e / 2, a: t.a };
1829 + var t, n, u, e;
1829 1830 };
1830 - var c = function(r2) {
1831 - return { h: (t2 = h(r2)).h, s: (u2 = (200 - (n2 = t2.s)) * (e2 = t2.v) / 100) > 0 && u2 < 200 ? n2 * e2 / 100 / (u2 <= 100 ? u2 : 200 - u2) * 100 : 0, l: u2 / 2, a: t2.a };
1832 - var t2, n2, e2, u2;
1833 - };
1834 - var l = /^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*,\s*([+-]?\d*\.?\d+)%\s*,\s*([+-]?\d*\.?\d+)%\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i;
1835 - var p = /^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s+([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)%\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i;
1836 - var v = /^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i;
1837 - var m = /^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i;
1838 - var y = { string: [[function(r2) {
1839 - var t2 = i.exec(r2);
1840 - return t2 ? (r2 = t2[1]).length <= 4 ? { r: parseInt(r2[0] + r2[0], 16), g: parseInt(r2[1] + r2[1], 16), b: parseInt(r2[2] + r2[2], 16), a: 4 === r2.length ? n(parseInt(r2[3] + r2[3], 16) / 255, 2) : 1 } : 6 === r2.length || 8 === r2.length ? { r: parseInt(r2.substr(0, 2), 16), g: parseInt(r2.substr(2, 2), 16), b: parseInt(r2.substr(4, 2), 16), a: 8 === r2.length ? n(parseInt(r2.substr(6, 2), 16) / 255, 2) : 1 } : null : null;
1841 - }, "hex"], [function(r2) {
1842 - var t2 = v.exec(r2) || m.exec(r2);
1843 - return t2 ? t2[2] !== t2[4] || t2[4] !== t2[6] ? null : a({ r: Number(t2[1]) / (t2[2] ? 100 / 255 : 1), g: Number(t2[3]) / (t2[4] ? 100 / 255 : 1), b: Number(t2[5]) / (t2[6] ? 100 / 255 : 1), a: void 0 === t2[7] ? 1 : Number(t2[7]) / (t2[8] ? 100 : 1) }) : null;
1844 - }, "rgb"], [function(t2) {
1845 - var n2 = l.exec(t2) || p.exec(t2);
1846 - if (!n2) return null;
1847 - var e2, u2, a2 = g({ h: (e2 = n2[1], u2 = n2[2], void 0 === u2 && (u2 = "deg"), Number(e2) * (r[u2] || 1)), s: Number(n2[3]), l: Number(n2[4]), a: void 0 === n2[5] ? 1 : Number(n2[5]) / (n2[6] ? 100 : 1) });
1848 - return f(a2);
1849 - }, "hsl"]], object: [[function(r2) {
1850 - var n2 = r2.r, e2 = r2.g, u2 = r2.b, o2 = r2.a, i2 = void 0 === o2 ? 1 : o2;
1851 - return t(n2) && t(e2) && t(u2) ? a({ r: Number(n2), g: Number(e2), b: Number(u2), a: Number(i2) }) : null;
1852 - }, "rgb"], [function(r2) {
1853 - var n2 = r2.h, e2 = r2.s, u2 = r2.l, a2 = r2.a, o2 = void 0 === a2 ? 1 : a2;
1854 - if (!t(n2) || !t(e2) || !t(u2)) return null;
1855 - var i2 = g({ h: Number(n2), s: Number(e2), l: Number(u2), a: Number(o2) });
1856 - return f(i2);
1857 - }, "hsl"], [function(r2) {
1858 - var n2 = r2.h, a2 = r2.s, o2 = r2.v, i2 = r2.a, s2 = void 0 === i2 ? 1 : i2;
1859 - if (!t(n2) || !t(a2) || !t(o2)) return null;
1860 - var h2 = (function(r3) {
1861 - return { h: u(r3.h), s: e(r3.s, 0, 100), v: e(r3.v, 0, 100), a: e(r3.a) };
1862 - })({ h: Number(n2), s: Number(a2), v: Number(o2), a: Number(s2) });
1863 - return b(h2);
1831 + var N = /^hsla?\(\s*([+-]?(?:\d*\.\d+|\d+))(deg|rad|grad|turn)?\s*,\s*([+-]?(?:\d*\.\d+|\d+))%\s*,\s*([+-]?(?:\d*\.\d+|\d+))%\s*(?:,\s*([+-]?(?:\d*\.\d+|\d+))(%)?\s*)?\)$/i;
1832 + var x = /^hsla?\(\s*([+-]?(?:\d*\.\d+|\d+))(deg|rad|grad|turn)?\s+([+-]?(?:\d*\.\d+|\d+))%\s+([+-]?(?:\d*\.\d+|\d+))%\s*(?:\/\s*([+-]?(?:\d*\.\d+|\d+))(%)?\s*)?\)$/i;
1833 + var M = /^rgba?\(\s*([+-]?(?:\d*\.\d+|\d+))(%)?\s*,\s*([+-]?(?:\d*\.\d+|\d+))(%)?\s*,\s*([+-]?(?:\d*\.\d+|\d+))(%)?\s*(?:,\s*([+-]?(?:\d*\.\d+|\d+))(%)?\s*)?\)$/i;
1834 + var H = /^rgba?\(\s*([+-]?(?:\d*\.\d+|\d+))(%)?\s+([+-]?(?:\d*\.\d+|\d+))(%)?\s+([+-]?(?:\d*\.\d+|\d+))(%)?\s*(?:\/\s*([+-]?(?:\d*\.\d+|\d+))(%)?\s*)?\)$/i;
1835 + var $ = { string: [[function(r) {
1836 + if (!s.test(r)) return null;
1837 + var t = r.length;
1838 + return t <= 5 ? { r: 17 * d(r, 1), g: 17 * d(r, 2), b: 17 * d(r, 3), a: 5 === t ? n(17 * d(r, 4) / 255, 2) : 1 } : 7 === t || 9 === t ? { r: h(r, 1), g: h(r, 3), b: h(r, 5), a: 9 === t ? n(h(r, 7) / 255, 2) : 1 } : null;
1839 + }, "hex"], [function(r) {
1840 + var t = M.exec(r) || H.exec(r);
1841 + return t ? t[2] !== t[4] || t[4] !== t[6] ? null : a({ r: Number(t[1]) / (t[2] ? 100 / 255 : 1), g: Number(t[3]) / (t[4] ? 100 / 255 : 1), b: Number(t[5]) / (t[6] ? 100 / 255 : 1), a: void 0 === t[7] ? 1 : Number(t[7]) / (t[8] ? 100 : 1) }) : null;
1842 + }, "rgb"], [function(t) {
1843 + var n = N.exec(t) || x.exec(t);
1844 + if (!n) return null;
1845 + var u, e, o = l({ h: (u = n[1], e = n[2], void 0 === e && (e = "deg"), Number(u) * (r[e] || 1)), s: Number(n[3]), l: Number(n[4]), a: void 0 === n[5] ? 1 : Number(n[5]) / (n[6] ? 100 : 1) });
1846 + return m(o);
1847 + }, "hsl"]], object: [[function(r) {
1848 + var n = r.r, u = r.g, e = r.b, o = r.a, i = void 0 === o ? 1 : o;
1849 + return t(n) && t(u) && t(e) ? a({ r: Number(n), g: Number(u), b: Number(e), a: Number(i) }) : null;
1850 + }, "rgb"], [function(r) {
1851 + var n = r.h, u = r.s, e = r.l, o = r.a, a = void 0 === o ? 1 : o;
1852 + if (!t(n) || !t(u) || !t(e)) return null;
1853 + var i = l({ h: Number(n), s: Number(u), l: Number(e), a: Number(a) });
1854 + return m(i);
1855 + }, "hsl"], [function(r) {
1856 + var n = r.h, o = r.s, a = r.v, i = r.a, s = void 0 === i ? 1 : i;
1857 + if (!t(n) || !t(o) || !t(a)) return null;
1858 + var d = (function(r2) {
1859 + return { h: e(r2.h), s: u(r2.s, 0, 100), v: u(r2.v, 0, 100), a: u(r2.a) };
1860 + })({ h: Number(n), s: Number(o), v: Number(a), a: Number(s) });
1861 + return v(d);
1864 1862 }, "hsv"]] };
1865 - var N = function(r2, t2) {
1866 - for (var n2 = 0; n2 < t2.length; n2++) {
1867 - var e2 = t2[n2][0](r2);
1868 - if (e2) return [e2, t2[n2][1]];
1863 + var j = function(r, t) {
1864 + for (var n = 0; n < t.length; n++) {
1865 + var u = t[n][0](r);
1866 + if (u) return [u, t[n][1]];
1869 1867 }
1870 1868 return [null, void 0];
1871 1869 };
1872 - var x = function(r2) {
1873 - return "string" == typeof r2 ? N(r2.trim(), y.string) : "object" == typeof r2 && null !== r2 ? N(r2, y.object) : [null, void 0];
1870 + var w = function(r) {
1871 + return "string" == typeof r ? j(r.trim(), $.string) : "object" == typeof r && null !== r ? j(r, $.object) : [null, void 0];
1874 1872 };
1875 - var M = function(r2, t2) {
1876 - var n2 = c(r2);
1877 - return { h: n2.h, s: e(n2.s + 100 * t2, 0, 100), l: n2.l, a: n2.a };
1873 + var k = function(r, t) {
1874 + var n = y(r);
1875 + return { h: n.h, s: u(n.s + 100 * t, 0, 100), l: n.l, a: n.a };
1878 1876 };
1879 - var H = function(r2) {
1880 - return (299 * r2.r + 587 * r2.g + 114 * r2.b) / 1e3 / 255;
1877 + var E = function(r) {
1878 + return (299 * r.r + 587 * r.g + 114 * r.b) / 1e3 / 255;
1881 1879 };
1882 - var $ = function(r2, t2) {
1883 - var n2 = c(r2);
1884 - return { h: n2.h, s: n2.s, l: e(n2.l + 100 * t2, 0, 100), a: n2.a };
1880 + var R = function(r, t) {
1881 + var n = y(r);
1882 + return { h: n.h, s: n.s, l: u(n.l + 100 * t, 0, 100), a: n.a };
1885 1883 };
1886 - var j = (function() {
1887 - function r2(r3) {
1888 - this.parsed = x(r3)[0], this.rgba = this.parsed || { r: 0, g: 0, b: 0, a: 1 };
1884 + var q = (function() {
1885 + function r(r2) {
1886 + this.parsed = w(r2)[0], this.rgba = this.parsed || { r: 0, g: 0, b: 0, a: 1 };
1889 1887 }
1890 - return r2.prototype.isValid = function() {
1888 + return r.prototype.isValid = function() {
1891 1889 return null !== this.parsed;
1892 - }, r2.prototype.brightness = function() {
1893 - return n(H(this.rgba), 2);
1894 - }, r2.prototype.isDark = function() {
1895 - return H(this.rgba) < 0.5;
1896 - }, r2.prototype.isLight = function() {
1897 - return H(this.rgba) >= 0.5;
1898 - }, r2.prototype.toHex = function() {
1899 - return r3 = o(this.rgba), t2 = r3.r, e2 = r3.g, u2 = r3.b, i2 = (a2 = r3.a) < 1 ? s(n(255 * a2)) : "", "#" + s(t2) + s(e2) + s(u2) + i2;
1900 - var r3, t2, e2, u2, a2, i2;
1901 - }, r2.prototype.toRgb = function() {
1902 - return o(this.rgba);
1903 - }, r2.prototype.toRgbString = function() {
1904 - return r3 = o(this.rgba), t2 = r3.r, n2 = r3.g, e2 = r3.b, (u2 = r3.a) < 1 ? "rgba(" + t2 + ", " + n2 + ", " + e2 + ", " + u2 + ")" : "rgb(" + t2 + ", " + n2 + ", " + e2 + ")";
1905 - var r3, t2, n2, e2, u2;
1906 - }, r2.prototype.toHsl = function() {
1907 - return d(c(this.rgba));
1908 - }, r2.prototype.toHslString = function() {
1909 - return r3 = d(c(this.rgba)), t2 = r3.h, n2 = r3.s, e2 = r3.l, (u2 = r3.a) < 1 ? "hsla(" + t2 + ", " + n2 + "%, " + e2 + "%, " + u2 + ")" : "hsl(" + t2 + ", " + n2 + "%, " + e2 + "%)";
1910 - var r3, t2, n2, e2, u2;
1911 - }, r2.prototype.toHsv = function() {
1912 - return r3 = h(this.rgba), { h: n(r3.h), s: n(r3.s), v: n(r3.v), a: n(r3.a, 3) };
1913 - var r3;
1914 - }, r2.prototype.invert = function() {
1915 - return w({ r: 255 - (r3 = this.rgba).r, g: 255 - r3.g, b: 255 - r3.b, a: r3.a });
1916 - var r3;
1917 - }, r2.prototype.saturate = function(r3) {
1918 - return void 0 === r3 && (r3 = 0.1), w(M(this.rgba, r3));
1919 - }, r2.prototype.desaturate = function(r3) {
1920 - return void 0 === r3 && (r3 = 0.1), w(M(this.rgba, -r3));
1921 - }, r2.prototype.grayscale = function() {
1922 - return w(M(this.rgba, -1));
1923 - }, r2.prototype.lighten = function(r3) {
1924 - return void 0 === r3 && (r3 = 0.1), w($(this.rgba, r3));
1925 - }, r2.prototype.darken = function(r3) {
1926 - return void 0 === r3 && (r3 = 0.1), w($(this.rgba, -r3));
1927 - }, r2.prototype.rotate = function(r3) {
1928 - return void 0 === r3 && (r3 = 15), this.hue(this.hue() + r3);
1929 - }, r2.prototype.alpha = function(r3) {
1930 - return "number" == typeof r3 ? w({ r: (t2 = this.rgba).r, g: t2.g, b: t2.b, a: r3 }) : n(this.rgba.a, 3);
1931 - var t2;
1932 - }, r2.prototype.hue = function(r3) {
1933 - var t2 = c(this.rgba);
1934 - return "number" == typeof r3 ? w({ h: r3, s: t2.s, l: t2.l, a: t2.a }) : n(t2.h);
1935 - }, r2.prototype.isEqual = function(r3) {
1936 - return this.toHex() === w(r3).toHex();
1937 - }, r2;
1890 + }, r.prototype.brightness = function() {
1891 + return n(E(this.rgba), 2);
1892 + }, r.prototype.isDark = function() {
1893 + return E(this.rgba) < 0.5;
1894 + }, r.prototype.isLight = function() {
1895 + return E(this.rgba) >= 0.5;
1896 + }, r.prototype.toHex = function() {
1897 + return r2 = i(this.rgba), t = r2.r, u = r2.g, e = r2.b, a = (o = r2.a) < 1 ? g(n(255 * o)) : "", "#" + g(t) + g(u) + g(e) + a;
1898 + var r2, t, u, e, o, a;
1899 + }, r.prototype.toRgb = function() {
1900 + return i(this.rgba);
1901 + }, r.prototype.toRgbString = function() {
1902 + return r2 = i(this.rgba), t = r2.r, n = r2.g, u = r2.b, (e = r2.a) < 1 ? "rgba(" + t + ", " + n + ", " + u + ", " + e + ")" : "rgb(" + t + ", " + n + ", " + u + ")";
1903 + var r2, t, n, u, e;
1904 + }, r.prototype.toHsl = function() {
1905 + return p(y(this.rgba));
1906 + }, r.prototype.toHslString = function() {
1907 + return r2 = p(y(this.rgba)), t = r2.h, n = r2.s, u = r2.l, (e = r2.a) < 1 ? "hsla(" + t + ", " + n + "%, " + u + "%, " + e + ")" : "hsl(" + t + ", " + n + "%, " + u + "%)";
1908 + var r2, t, n, u, e;
1909 + }, r.prototype.toHsv = function() {
1910 + return r2 = c(this.rgba), { h: o(r2.h), s: n(r2.s), v: n(r2.v), a: n(r2.a, 3) };
1911 + var r2;
1912 + }, r.prototype.invert = function() {
1913 + return A({ r: 255 - (r2 = this.rgba).r, g: 255 - r2.g, b: 255 - r2.b, a: r2.a });
1914 + var r2;
1915 + }, r.prototype.saturate = function(r2) {
1916 + return void 0 === r2 && (r2 = 0.1), A(k(this.rgba, r2));
1917 + }, r.prototype.desaturate = function(r2) {
1918 + return void 0 === r2 && (r2 = 0.1), A(k(this.rgba, -r2));
1919 + }, r.prototype.grayscale = function() {
1920 + return A(k(this.rgba, -1));
1921 + }, r.prototype.lighten = function(r2) {
1922 + return void 0 === r2 && (r2 = 0.1), A(R(this.rgba, r2));
1923 + }, r.prototype.darken = function(r2) {
1924 + return void 0 === r2 && (r2 = 0.1), A(R(this.rgba, -r2));
1925 + }, r.prototype.rotate = function(r2) {
1926 + return void 0 === r2 && (r2 = 15), this.hue(y(this.rgba).h + r2);
1927 + }, r.prototype.alpha = function(r2) {
1928 + return "number" == typeof r2 ? A({ r: (t = this.rgba).r, g: t.g, b: t.b, a: r2 }) : n(this.rgba.a, 3);
1929 + var t;
1930 + }, r.prototype.hue = function(r2) {
1931 + var t = y(this.rgba);
1932 + return "number" == typeof r2 ? A({ h: r2, s: t.s, l: t.l, a: t.a }) : o(t.h);
1933 + }, r.prototype.isEqual = function(r2) {
1934 + return this.toHex() === A(r2).toHex();
1935 + }, r;
1938 1936 })();
1939 - var w = function(r2) {
1940 - return r2 instanceof j ? r2 : new j(r2);
1937 + var A = function(r) {
1938 + return r instanceof q ? r : new q(r);
1941 1939 };
1942 1940
1943 1941 // packages/rich-text/build-module/hook/use-boundary-style.mjs
1944 1942 var import_element2 = __toESM(require_element(), 1);
@@ -1957,10 +1955,10 @@
1957 1955 }
1958 1956 const { ownerDocument } = element;
1959 1957 const { defaultView } = ownerDocument;
1960 1958 const computedStyle = defaultView.getComputedStyle(element);
1961 - const newColor = w(computedStyle.color).alpha(0.2).toRgbString();
1962 - const selector = `.rich-text:focus ${boundarySelector}`;
1959 + const newColor = A(computedStyle.color).alpha(0.2).toRgbString();
1960 + const selector = `[contenteditable="true"]:focus ${boundarySelector}`;
1963 1961 const rule = `background-color: ${newColor}`;
1964 1962 const style = `${selector} {${rule}}`;
1965 1963 const globalStyleId = "rich-text-boundary-style";
1966 1964 let globalStyle = ownerDocument.getElementById(globalStyleId);
@@ -1981,8 +1979,25 @@
1981 1979 var import_compose7 = __toESM(require_compose(), 1);
1982 1980
1983 1981 // packages/rich-text/build-module/hook/event-listeners/copy-handler.mjs
1984 1982 var import_compose = __toESM(require_compose(), 1);
1983 +
1984 + // packages/rich-text/build-module/owns-selection.mjs
1985 + function ownsSelection(element) {
1986 + const { ownerDocument } = element;
1987 + const { activeElement } = ownerDocument;
1988 + if (activeElement === element) {
1989 + return true;
1990 + }
1991 + if (!activeElement || activeElement.contentEditable !== "true" || element.contentEditable !== "true" || !activeElement.contains(element)) {
1992 + return false;
1993 + }
1994 + const selection = ownerDocument.defaultView.getSelection();
1995 + const { anchorNode, focusNode } = selection;
1996 + return !!anchorNode && !!focusNode && element.contains(anchorNode) && element.contains(focusNode);
1997 + }
1998 +
1999 + // packages/rich-text/build-module/hook/event-listeners/copy-handler.mjs
1985 2000 var { subscribeDelegatedListener } = unlock(import_compose.privateApis);
1986 2001 var copy_handler_default = (props) => (element) => {
1987 2002 function onCopy(event) {
1988 2003 const { record, handleChange } = props.current;
@@ -2071,20 +2086,48 @@
2071 2086
2072 2087 // packages/rich-text/build-module/subscribe-owned-listener.mjs
2073 2088 var import_compose3 = __toESM(require_compose(), 1);
2074 2089 var { subscribeDelegatedListener: subscribeDelegatedListener3 } = unlock(import_compose3.privateApis);
2090 + var registries = /* @__PURE__ */ new WeakMap();
2075 2091 function subscribeOwnedListener(element, eventType, callback, capture = false) {
2076 - return subscribeDelegatedListener3(
2077 - element.ownerDocument,
2078 - eventType,
2079 - (event) => {
2080 - if (!element.contains(event.target) && !ownsSelection(element)) {
2081 - return;
2082 - }
2083 - callback(event);
2084 - },
2085 - capture
2086 - );
2092 + const { ownerDocument } = element;
2093 + let byEvent = registries.get(ownerDocument);
2094 + if (!byEvent) {
2095 + byEvent = /* @__PURE__ */ new Map();
2096 + registries.set(ownerDocument, byEvent);
2097 + }
2098 + const key = capture ? `${eventType}:capture` : eventType;
2099 + let elements = byEvent.get(key);
2100 + if (!elements) {
2101 + elements = /* @__PURE__ */ new WeakMap();
2102 + byEvent.set(key, elements);
2103 + subscribeDelegatedListener3(
2104 + ownerDocument,
2105 + eventType,
2106 + (event) => {
2107 + const { defaultView, activeElement } = ownerDocument;
2108 + const anchorNode = defaultView?.getSelection()?.anchorNode;
2109 + for (let node = anchorNode ?? activeElement; node; node = node.parentNode) {
2110 + const callbacks = elements.get(node);
2111 + if (callbacks && ownsSelection(node)) {
2112 + for (const cb of callbacks) {
2113 + cb(event);
2114 + }
2115 + }
2116 + }
2117 + },
2118 + capture
2119 + );
2120 + }
2121 + let set = elements.get(element);
2122 + if (!set) {
2123 + set = /* @__PURE__ */ new Set();
2124 + elements.set(element, set);
2125 + }
2126 + set.add(callback);
2127 + return () => {
2128 + set.delete(callback);
2129 + };
2087 2130 }
2088 2131
2089 2132 // packages/rich-text/build-module/hook/event-listeners/format-boundaries.mjs
2090 2133 var EMPTY_ACTIVE_FORMATS = [];
@@ -2215,24 +2258,19 @@
2215 2258 "insertLink"
2216 2259 ]);
2217 2260 var EMPTY_ACTIVE_FORMATS2 = [];
2218 2261 var PLACEHOLDER_ATTR_NAME = "data-rich-text-placeholder";
2219 - function fixPlaceholderSelection(defaultView) {
2220 - const selection = defaultView.getSelection();
2221 - const { anchorNode, anchorOffset } = selection;
2222 - if (anchorNode.nodeType !== anchorNode.ELEMENT_NODE) {
2223 - return;
2224 - }
2225 - const targetNode = anchorNode.childNodes[anchorOffset];
2226 - if (!targetNode || targetNode.nodeType !== targetNode.ELEMENT_NODE || !targetNode.hasAttribute(PLACEHOLDER_ATTR_NAME)) {
2227 - return;
2228 - }
2229 - selection.collapseToStart();
2230 - }
2231 2262 var input_and_selection_default = (props) => (element) => {
2232 2263 const { ownerDocument } = element;
2233 2264 const { defaultView } = ownerDocument;
2234 2265 let isComposing = false;
2266 + let isPointerDown = false;
2267 + function onPointerDown() {
2268 + isPointerDown = true;
2269 + }
2270 + function onPointerUp() {
2271 + isPointerDown = false;
2272 + }
2235 2273 function onInput(event) {
2236 2274 if (isComposing) {
2237 2275 return;
2238 2276 }
@@ -2273,8 +2311,11 @@
2273 2311 return;
2274 2312 }
2275 2313 const { start, end, text } = createRecord();
2276 2314 const oldRecord = record.current;
2315 + if (text.length === 0) {
2316 + applyRecord({ ...oldRecord, start, end });
2317 + }
2277 2318 selectionSnapshot = {
2278 2319 anchorNode: selection.anchorNode,
2279 2320 anchorOffset: selection.anchorOffset,
2280 2321 focusNode: selection.focusNode,
@@ -2286,11 +2327,8 @@
2286 2327 onInput();
2287 2328 return;
2288 2329 }
2289 2330 if (start === oldRecord.start && end === oldRecord.end) {
2290 - if (oldRecord.text.length === 0 && start === 0) {
2291 - fixPlaceholderSelection(defaultView);
2292 - }
2293 2331 return;
2294 2332 }
2295 2333 const newValue = {
2296 2334 ...oldRecord,
@@ -2346,9 +2384,9 @@
2346 2384 end: index,
2347 2385 activeFormats: EMPTY_ACTIVE_FORMATS2
2348 2386 };
2349 2387 selectionSnapshot = void 0;
2350 - } else {
2388 + } else if (!isPointerDown) {
2351 2389 applyRecord(record.current);
2352 2390 }
2353 2391 onSelectionChange(record.current.start, record.current.end);
2354 2392 window.queueMicrotask(handleSelectionChange);
@@ -2374,10 +2412,25 @@
2374 2412 element,
2375 2413 "focusin",
2376 2414 onFocus
2377 2415 );
2378 - const unsubscribeSelectionChange = subscribeDelegatedListener4(
2379 - ownerDocument,
2416 + const unsubscribePointerDown = subscribeDelegatedListener4(
2417 + element,
2418 + "pointerdown",
2419 + onPointerDown
2420 + );
2421 + const unsubscribePointerUp = subscribeDelegatedListener4(
2422 + defaultView,
2423 + "pointerup",
2424 + onPointerUp
2425 + );
2426 + const unsubscribePointerCancel = subscribeDelegatedListener4(
2427 + defaultView,
2428 + "pointercancel",
2429 + onPointerUp
2430 + );
2431 + const unsubscribeSelectionChange = subscribeOwnedListener(
2432 + element,
2380 2433 "selectionchange",
2381 2434 handleSelectionChange
2382 2435 );
2383 2436 const unsubscribeEnsureSelectionSync = [
@@ -2386,10 +2439,10 @@
2386 2439 "copy",
2387 2440 "cut",
2388 2441 "paste"
2389 2442 ].map(
2390 - (eventType) => subscribeDelegatedListener4(
2391 - ownerDocument,
2443 + (eventType) => subscribeOwnedListener(
2444 + element,
2392 2445 eventType,
2393 2446 handleSelectionChange,
2394 2447 true
2395 2448 )
@@ -2398,8 +2451,11 @@
2398 2451 unsubscribeInput();
2399 2452 unsubscribeCompositionStart();
2400 2453 unsubscribeCompositionEnd();
2401 2454 unsubscribeFocus();
2455 + unsubscribePointerDown();
2456 + unsubscribePointerUp();
2457 + unsubscribePointerCancel();
2402 2458 unsubscribeSelectionChange();
2403 2459 unsubscribeEnsureSelectionSync.forEach(
2404 2460 (unsubscribe) => unsubscribe()
2405 2461 );
@@ -2469,16 +2525,23 @@
2469 2525 }
2470 2526 if (!event.target.contains(element)) {
2471 2527 return;
2472 2528 }
2529 + if (!event.target.closest("[data-block]")) {
2530 + return;
2531 + }
2473 2532 value = element.getAttribute("contenteditable");
2533 + defaultView.getSelection().removeAllRanges();
2474 2534 element.setAttribute("contenteditable", "false");
2475 - defaultView.getSelection().removeAllRanges();
2476 2535 }
2477 2536 function onPointerUp() {
2478 2537 if (value !== null) {
2479 2538 element.setAttribute("contenteditable", value);
2480 2539 value = null;
2540 + const selection = defaultView.getSelection();
2541 + if (selection.isCollapsed && element.contains(selection.anchorNode)) {
2542 + selection.removeAllRanges();
2543 + }
2481 2544 }
2482 2545 }
2483 2546 const unsubscribePointerDown = subscribeDelegatedListener6(
2484 2547 defaultView,
@@ -2489,11 +2552,17 @@
2489 2552 defaultView,
2490 2553 "pointerup",
2491 2554 onPointerUp
2492 2555 );
2556 + const unsubscribePointerCancel = subscribeDelegatedListener6(
2557 + defaultView,
2558 + "pointercancel",
2559 + onPointerUp
2560 + );
2493 2561 return () => {
2494 2562 unsubscribePointerDown();
2495 2563 unsubscribePointerUp();
2564 + unsubscribePointerCancel();
2496 2565 };
2497 2566 };
2498 2567 }
2499 2568
@@ -2650,8 +2719,12 @@
2650 2719 };
2651 2720 }
2652 2721
2653 2722 // packages/rich-text/build-module/hook/index.mjs
2723 + function hasFocus(element) {
2724 + const { activeElement } = element.ownerDocument;
2725 + return activeElement === element || activeElement?.contentEditable === "true" && activeElement.contains(element);
2726 + }
2654 2727 function useRichTextBase({
2655 2728 value = "",
2656 2729 selectionStart,
2657 2730 selectionEnd,
@@ -2716,14 +2789,11 @@
2716 2789 }
2717 2790 recordRef.current.start = selectionStart;
2718 2791 recordRef.current.end = selectionEnd;
2719 2792 }
2720 - const hadSelectionUpdateRef = (0, import_element5.useRef)(false);
2721 2793 if (!recordRef.current) {
2722 - hadSelectionUpdateRef.current = isSelected;
2723 2794 setRecordFromProps();
2724 2795 } else if (selectionStart !== recordRef.current.start || selectionEnd !== recordRef.current.end) {
2725 - hadSelectionUpdateRef.current = isSelected;
2726 2796 recordRef.current = {
2727 2797 ...recordRef.current,
2728 2798 start: selectionStart,
2729 2799 end: selectionEnd,
@@ -2729,8 +2799,13 @@
2729 2799 end: selectionEnd,
2730 2800 activeFormats: void 0
2731 2801 };
2732 2802 }
2803 + const sentSelectionRef = (0, import_element5.useRef)([]);
2804 + function sendSelection(start, end) {
2805 + sentSelectionRef.current = [start, end];
2806 + onSelectionChange(start, end);
2807 + }
2733 2808 function handleChange(newRecord) {
2734 2809 recordRef.current = newRecord;
2735 2810 applyRecord(newRecord);
2736 2811 if (disableFormats) {
@@ -2748,9 +2823,9 @@
2748 2823 }
2749 2824 }
2750 2825 const { start, end, formats, text } = recordRef.current;
2751 2826 registry.batch(() => {
2752 - onSelectionChange(start, end);
2827 + sendSelection(start, end);
2753 2828 onChange(_valueRef.current, {
2754 2829 __unstableFormats: formats,
2755 2830 __unstableText: text
2756 2831 });
@@ -2756,33 +2831,25 @@
2756 2831 });
2757 2832 });
2758 2833 forceRender();
2759 2834 }
2760 - function applyFromProps() {
2761 - const previousValue = _valueRef.current;
2762 - setRecordFromProps();
2763 - const contentLengthChanged = previousValue && typeof previousValue === "string" && typeof value === "string" && previousValue.length !== value.length;
2764 - const hasFocus = ref.current?.contains(ref.current.ownerDocument.activeElement) || ownsSelection(ref.current);
2765 - const skipSelection = contentLengthChanged && !hasFocus;
2766 - applyRecord(recordRef.current, { domOnly: skipSelection });
2767 - }
2768 - const didMountRef = (0, import_element5.useRef)(false);
2769 2835 (0, import_element5.useLayoutEffect)(() => {
2770 - if (didMountRef.current && value !== _valueRef.current) {
2771 - applyFromProps();
2772 - forceRender();
2836 + if (value === _valueRef.current) {
2837 + return;
2773 2838 }
2839 + setRecordFromProps();
2840 + applyRecord(recordRef.current, {
2841 + domOnly: !hasFocus(ref.current)
2842 + });
2843 + forceRender();
2774 2844 }, [value]);
2775 2845 (0, import_element5.useLayoutEffect)(() => {
2776 - if (!hadSelectionUpdateRef.current) {
2777 - return;
2846 + const [sentStart, sentEnd] = sentSelectionRef.current;
2847 + sentSelectionRef.current = [];
2848 + if (isSelected && (selectionStart !== sentStart || selectionEnd !== sentEnd) && hasFocus(ref.current)) {
2849 + applyRecord(recordRef.current);
2778 2850 }
2779 - if (ref.current.ownerDocument.activeElement !== ref.current && !ownsSelection(ref.current)) {
2780 - ref.current.focus();
2781 - }
2782 - applyRecord(recordRef.current);
2783 - hadSelectionUpdateRef.current = false;
2784 - }, [hadSelectionUpdateRef.current]);
2851 + }, [selectionStart, selectionEnd, isSelected]);
2785 2852 const mergedRefs = (0, import_compose8.useMergeRefs)([
2786 2853 ref,
2787 2854 useDefaultStyle(),
2788 2855 useBoundaryStyle({ record: recordRef }),
@@ -2791,15 +2858,20 @@
2791 2858 handleChange,
2792 2859 applyRecord,
2793 2860 createRecord,
2794 2861 isSelected,
2795 - onSelectionChange,
2862 + onSelectionChange: sendSelection,
2796 2863 forceRender
2797 2864 }),
2798 - (0, import_compose8.useRefEffect)(() => {
2799 - applyFromProps();
2800 - didMountRef.current = true;
2801 - }, [placeholder, ...__unstableDependencies])
2865 + (0, import_compose8.useRefEffect)(
2866 + (element) => {
2867 + setRecordFromProps();
2868 + applyRecord(recordRef.current, {
2869 + domOnly: !hasFocus(element)
2870 + });
2871 + },
2872 + [placeholder, ...__unstableDependencies]
2873 + )
2802 2874 ]);
2803 2875 return {
2804 2876 value: recordRef.current,
2805 2877 // A function to get the most recent value so event handlers in