PluginProbe
Gutenberg / 24.1.0
Gutenberg v24.1.0
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 +516 -284 23.3.2 → 24.1.0 View file →
@@ -1,4 +1,5 @@
1 +(function() {
1 2 "use strict";
2 3 var wp;
3 4 (wp ||= {}).richText = (() => {
4 5 var __create = Object.create;
@@ -238,10 +239,14 @@
238 239 }
239 240 if (format1.type !== format2.type) {
240 241 return false;
241 242 }
242 - const attributes1 = format1.attributes;
243 - const attributes2 = format2.attributes;
243 + let attributes1 = format1.attributes;
244 + let attributes2 = format2.attributes;
245 + if (format1.unregisteredAttributes || format2.unregisteredAttributes) {
246 + attributes1 = { ...attributes1, ...format1.unregisteredAttributes };
247 + attributes2 = { ...attributes2, ...format2.unregisteredAttributes };
248 + }
244 249 if (attributes1 === attributes2) {
245 250 return true;
246 251 }
247 252 if (!attributes1 || !attributes2) {
@@ -252,10 +257,10 @@
252 257 if (keys1.length !== keys2.length) {
253 258 return false;
254 259 }
255 260 const length = keys1.length;
256 - for (let i2 = 0; i2 < length; i2++) {
257 - const name = keys1[i2];
261 + for (let i = 0; i < length; i++) {
262 + const name = keys1[i];
258 263 if (attributes1[name] !== attributes2[name]) {
259 264 return false;
260 265 }
261 266 }
@@ -392,11 +397,11 @@
392 397 return EMPTY_ACTIVE_FORMATS3;
393 398 }
394 399 const selectedFormats = formats.slice(start, end);
395 400 const _activeFormats = [...selectedFormats[0]];
396 - let i2 = selectedFormats.length;
397 - while (i2--) {
398 - const formatsAtIndex = selectedFormats[i2];
401 + let i = selectedFormats.length;
402 + while (i--) {
403 + const formatsAtIndex = selectedFormats[i];
399 404 if (!formatsAtIndex) {
400 405 return EMPTY_ACTIVE_FORMATS3;
401 406 }
402 407 let ii = _activeFormats.length;
@@ -484,11 +489,11 @@
484 489 object: formatType.object,
485 490 attributes: restoreOnAttributes(elementAttributes, isEditableTree)
486 491 };
487 492 }
488 - function isEqualUntil(a2, b2, index) {
493 + function isEqualUntil(a, b, index) {
489 494 do {
490 - if (a2[index] !== b2[index]) {
495 + if (a[index] !== b[index]) {
491 496 return false;
492 497 }
493 498 } while (index--);
494 499 return true;
@@ -516,15 +521,15 @@
516 521 const deepestActiveFormat = activeFormats[activeFormats.length - 1];
517 522 let lastCharacterFormats;
518 523 let lastCharacter;
519 524 append3(tree, "");
520 - for (let i2 = 0; i2 < formatsLength; i2++) {
521 - const character = text.charAt(i2);
525 + for (let i = 0; i < formatsLength; i++) {
526 + const character = text.charAt(i);
522 527 const shouldInsertPadding = isEditableTree && // Pad the line if the line is empty.
523 528 (!lastCharacter || // Pad the line if the previous character is a line break, otherwise
524 529 // the line break won't be visible.
525 530 lastCharacter === "\n");
526 - const characterFormats = formats[i2];
531 + const characterFormats = formats[i];
527 532 let pointer = getLastChild3(tree);
528 533 if (characterFormats) {
529 534 characterFormats.forEach((format, formatIndex) => {
530 535 if (pointer && lastCharacterFormats && // Reuse the last element if all formats remain the same.
@@ -555,9 +560,9 @@
555 560 }
556 561 pointer = append3(newNode, "");
557 562 });
558 563 }
559 - if (i2 === 0) {
564 + if (i === 0) {
560 565 if (onStartIndex && start === 0) {
561 566 onStartIndex(tree, pointer);
562 567 }
563 568 if (onEndIndex && end === 0) {
@@ -564,9 +569,9 @@
564 569 onEndIndex(tree, pointer);
565 570 }
566 571 }
567 572 if (character === OBJECT_REPLACEMENT_CHARACTER) {
568 - const replacement = replacements[i2];
573 + const replacement = replacements[i];
569 574 if (!replacement) {
570 575 continue;
571 576 }
572 577 const { type, attributes, innerHTML } = replacement;
@@ -603,9 +608,9 @@
603 608 const attrs = {
604 609 contenteditable: "false",
605 610 "data-rich-text-bogus": true
606 611 };
607 - if (start === i2 && end === i2 + 1) {
612 + if (start === i && end === i + 1) {
608 613 attrs["data-rich-text-format-boundary"] = true;
609 614 }
610 615 pointer = append3(pointer, {
611 616 type: "span",
@@ -610,9 +615,9 @@
610 615 pointer = append3(pointer, {
611 616 type: "span",
612 617 attributes: attrs
613 618 });
614 - if (isEditableTree && i2 + 1 === text.length) {
619 + if (isEditableTree && i + 1 === text.length) {
615 620 append3(getParent3(pointer), ZWNBSP);
616 621 }
617 622 }
618 623 pointer = append3(
@@ -652,16 +657,16 @@
652 657 pointer = append3(getParent3(pointer), character);
653 658 } else {
654 659 appendText3(pointer, character);
655 660 }
656 - if (onStartIndex && start === i2 + 1) {
661 + if (onStartIndex && start === i + 1) {
657 662 onStartIndex(tree, pointer);
658 663 }
659 - if (onEndIndex && end === i2 + 1) {
664 + if (onEndIndex && end === i + 1) {
660 665 onEndIndex(tree, pointer);
661 666 }
662 - if (shouldInsertPadding && i2 === text.length) {
663 - append3(getParent3(pointer), ZWNBSP);
667 + if (shouldInsertPadding && i === text.length) {
668 + appendText3(pointer, ZWNBSP);
664 669 if (placeholder && text.length === 0) {
665 670 append3(getParent3(pointer), {
666 671 type: "span",
667 672 attributes: {
@@ -812,15 +817,20 @@
812 817 }
813 818 if (formatType.contentEditable === false) {
814 819 delete unregisteredAttributes.contenteditable;
815 820 }
816 - return {
821 + const format = {
817 822 formatType,
818 823 type: formatType.name,
819 - tagName,
820 - attributes: registeredAttributes,
821 - unregisteredAttributes
824 + tagName
822 825 };
826 + if (Object.keys(registeredAttributes).length) {
827 + format.attributes = registeredAttributes;
828 + }
829 + if (Object.keys(unregisteredAttributes).length) {
830 + format.unregisteredAttributes = unregisteredAttributes;
831 + }
832 + return format;
823 833 }
824 834 var RichTextData = class _RichTextData {
825 835 #value;
826 836 static empty() {
@@ -976,9 +986,9 @@
976 986 }
977 987 function collapseWhiteSpace(element, isRoot = true, hasPrecedingSpace = false, hasTrailingSpace = false) {
978 988 const clone = element.cloneNode(true);
979 989 clone.normalize();
980 - Array.from(clone.childNodes).forEach((node, i2, nodes) => {
990 + Array.from(clone.childNodes).forEach((node, i, nodes) => {
981 991 if (node.nodeType === node.TEXT_NODE) {
982 992 let newNodeValue = node.nodeValue;
983 993 if (/[\n\t\r\f]/.test(newNodeValue)) {
984 994 newNodeValue = newNodeValue.replace(/[\n\t\r\f]+/g, " ");
@@ -985,12 +995,12 @@
985 995 }
986 996 if (newNodeValue.indexOf(" ") !== -1) {
987 997 newNodeValue = newNodeValue.replace(/ {2,}/g, " ");
988 998 }
989 - if (i2 === 0 && newNodeValue.startsWith(" ") && (isRoot || hasPrecedingSpace)) {
999 + if (i === 0 && newNodeValue.startsWith(" ") && (isRoot || hasPrecedingSpace)) {
990 1000 newNodeValue = newNodeValue.slice(1);
991 1001 }
992 - if (i2 === nodes.length - 1 && newNodeValue.endsWith(" ") && (isRoot || hasTrailingSpace)) {
1002 + if (i === nodes.length - 1 && newNodeValue.endsWith(" ") && (isRoot || hasTrailingSpace)) {
993 1003 newNodeValue = newNodeValue.slice(0, -1);
994 1004 }
995 1005 node.nodeValue = newNodeValue;
996 1006 } else if (node.nodeType === node.ELEMENT_NODE) {
@@ -1153,10 +1163,10 @@
1153 1163 return;
1154 1164 }
1155 1165 const length = element.attributes.length;
1156 1166 let accumulator;
1157 - for (let i2 = 0; i2 < length; i2++) {
1158 - const { name, value } = element.attributes[i2];
1167 + for (let i = 0; i < length; i++) {
1168 + const { name, value } = element.attributes[i];
1159 1169 if (name.indexOf("data-rich-text-") === 0) {
1160 1170 continue;
1161 1171 }
1162 1172 const safeName = /^on/i.test(name) ? "data-disable-rich-text-" + name : name;
@@ -1166,13 +1176,13 @@
1166 1176 return accumulator;
1167 1177 }
1168 1178
1169 1179 // packages/rich-text/build-module/concat.mjs
1170 - function mergePair(a2, b2) {
1171 - a2.formats = a2.formats.concat(b2.formats);
1172 - a2.replacements = a2.replacements.concat(b2.replacements);
1173 - a2.text += b2.text;
1174 - 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;
1175 1185 }
1176 1186 function concat(...values) {
1177 1187 return normaliseFormats(values.reduce(mergePair, create()));
1178 1188 }
@@ -1328,11 +1338,11 @@
1328 1338 endIndex++;
1329 1339 }
1330 1340 }
1331 1341 } else {
1332 - for (let i2 = startIndex; i2 < endIndex; i2++) {
1333 - if (newFormats[i2]) {
1334 - filterFormats(newFormats, i2, formatType);
1342 + for (let i = startIndex; i < endIndex; i++) {
1343 + if (newFormats[i]) {
1344 + filterFormats(newFormats, i, formatType);
1335 1345 }
1336 1346 }
1337 1347 }
1338 1348 return normaliseFormats({
@@ -1484,10 +1494,10 @@
1484 1494 return [before, after];
1485 1495 }
1486 1496
1487 1497 // packages/rich-text/build-module/is-range-equal.mjs
1488 - function isRangeEqual(a2, b2) {
1489 - 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;
1490 1500 }
1491 1501
1492 1502 // packages/rich-text/build-module/to-dom.mjs
1493 1503 var MATHML_NAMESPACE = "http://www.w3.org/1998/Math/MathML";
@@ -1492,13 +1502,13 @@
1492 1502 // packages/rich-text/build-module/to-dom.mjs
1493 1503 var MATHML_NAMESPACE = "http://www.w3.org/1998/Math/MathML";
1494 1504 function createPathToNode(node, rootNode, path) {
1495 1505 const parentNode = node.parentNode;
1496 - let i2 = 0;
1506 + let i = 0;
1497 1507 while (node = node.previousSibling) {
1498 - i2++;
1508 + i++;
1499 1509 }
1500 - path = [i2, ...path];
1510 + path = [i, ...path];
1501 1511 if (parentNode !== rootNode) {
1502 1512 path = createPathToNode(parentNode, rootNode, path);
1503 1513 }
1504 1514 return path;
@@ -1632,12 +1642,12 @@
1632 1642 applySelection(selection, current);
1633 1643 }
1634 1644 }
1635 1645 function applyValue(future, current) {
1636 - let i2 = 0;
1646 + let i = 0;
1637 1647 let futureChild;
1638 1648 while (futureChild = future.firstChild) {
1639 - const currentChild = current.childNodes[i2];
1649 + const currentChild = current.childNodes[i];
1640 1650 if (!currentChild) {
1641 1651 current.appendChild(futureChild);
1642 1652 } else if (!currentChild.isEqualNode(futureChild)) {
1643 1653 if (currentChild.nodeName !== futureChild.nodeName || currentChild.nodeType === currentChild.TEXT_NODE && currentChild.data !== futureChild.data) {
@@ -1667,12 +1677,12 @@
1667 1677 }
1668 1678 } else {
1669 1679 future.removeChild(futureChild);
1670 1680 }
1671 - i2++;
1681 + i++;
1672 1682 }
1673 - while (current.childNodes[i2]) {
1674 - current.removeChild(current.childNodes[i2]);
1683 + while (current.childNodes[i]) {
1684 + current.removeChild(current.childNodes[i]);
1675 1685 }
1676 1686 }
1677 1687 function applySelection({ startPath, endPath }, current) {
1678 1688 const { node: startContainer, offset: startOffset } = getNodeByPath(
@@ -1740,9 +1750,9 @@
1740 1750 );
1741 1751
1742 1752 // packages/rich-text/build-module/hook/index.mjs
1743 1753 var import_element5 = __toESM(require_element(), 1);
1744 - var import_compose9 = __toESM(require_compose(), 1);
1754 + var import_compose8 = __toESM(require_compose(), 1);
1745 1755 var import_data9 = __toESM(require_data(), 1);
1746 1756 var import_deprecated = __toESM(require_deprecated(), 1);
1747 1757
1748 1758 // packages/rich-text/build-module/hook/use-default-style.mjs
@@ -1757,163 +1767,176 @@
1757 1767 }, []);
1758 1768 }
1759 1769
1760 1770 // node_modules/colord/index.mjs
1761 - var r = { grad: 0.9, turn: 360, rad: 360 / (2 * Math.PI) };
1762 - var t = function(r2) {
1771 + for (r = { grad: 0.9, turn: 360, rad: 360 / (2 * Math.PI) }, t = function(r2) {
1763 1772 return "string" == typeof r2 ? r2.length > 0 : "number" == typeof r2;
1764 - };
1765 - var n = function(r2, t2, n2) {
1773 + }, n = function(r2, t2, n2) {
1766 1774 return void 0 === t2 && (t2 = 0), void 0 === n2 && (n2 = Math.pow(10, t2)), Math.round(n2 * r2) / n2 + 0;
1767 - };
1768 - var e = function(r2, t2, n2) {
1775 + }, u = function(r2, t2, n2) {
1769 1776 return void 0 === t2 && (t2 = 0), void 0 === n2 && (n2 = 1), r2 > n2 ? n2 : r2 > t2 ? r2 : t2;
1770 - };
1771 - var u = function(r2) {
1772 - return (r2 = isFinite(r2) ? r2 % 360 : 0) > 0 ? r2 : r2 + 360;
1773 - };
1774 - var a = function(r2) {
1775 - return { r: e(r2.r, 0, 255), g: e(r2.g, 0, 255), b: e(r2.b, 0, 255), a: e(r2.a) };
1776 - };
1777 - 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) {
1778 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)];
1779 1806 };
1780 - var i = /^#([0-9a-f]{3,8})$/i;
1781 - var s = function(r2) {
1782 - var t2 = r2.toString(16);
1783 - 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 };
1784 1810 };
1785 - var h = function(r2) {
1786 - 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;
1787 - 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 };
1788 1816 };
1789 - var b = function(r2) {
1790 - var t2 = r2.h, n2 = r2.s, e2 = r2.v, u2 = r2.a;
1791 - t2 = t2 / 360 * 6, n2 /= 100, e2 /= 100;
1792 - 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;
1793 - 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) };
1794 1819 };
1795 - var g = function(r2) {
1796 - 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) };
1797 1822 };
1798 - var d = function(r2) {
1799 - 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;
1800 1826 };
1801 - var f = function(r2) {
1802 - 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 }));
1803 - 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;
1804 1830 };
1805 - var c = function(r2) {
1806 - 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 };
1807 - var t2, n2, e2, u2;
1808 - };
1809 - var l = /^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*,\s*([+-]?\d*\.?\d+)%\s*,\s*([+-]?\d*\.?\d+)%\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i;
1810 - var p = /^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s+([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)%\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i;
1811 - var v = /^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i;
1812 - var m = /^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i;
1813 - var y = { string: [[function(r2) {
1814 - var t2 = i.exec(r2);
1815 - 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;
1816 - }, "hex"], [function(r2) {
1817 - var t2 = v.exec(r2) || m.exec(r2);
1818 - 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;
1819 - }, "rgb"], [function(t2) {
1820 - var n2 = l.exec(t2) || p.exec(t2);
1821 - if (!n2) return null;
1822 - 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) });
1823 - return f(a2);
1824 - }, "hsl"]], object: [[function(r2) {
1825 - var n2 = r2.r, e2 = r2.g, u2 = r2.b, o2 = r2.a, i2 = void 0 === o2 ? 1 : o2;
1826 - return t(n2) && t(e2) && t(u2) ? a({ r: Number(n2), g: Number(e2), b: Number(u2), a: Number(i2) }) : null;
1827 - }, "rgb"], [function(r2) {
1828 - var n2 = r2.h, e2 = r2.s, u2 = r2.l, a2 = r2.a, o2 = void 0 === a2 ? 1 : a2;
1829 - if (!t(n2) || !t(e2) || !t(u2)) return null;
1830 - var i2 = g({ h: Number(n2), s: Number(e2), l: Number(u2), a: Number(o2) });
1831 - return f(i2);
1832 - }, "hsl"], [function(r2) {
1833 - var n2 = r2.h, a2 = r2.s, o2 = r2.v, i2 = r2.a, s2 = void 0 === i2 ? 1 : i2;
1834 - if (!t(n2) || !t(a2) || !t(o2)) return null;
1835 - var h2 = (function(r3) {
1836 - return { h: u(r3.h), s: e(r3.s, 0, 100), v: e(r3.v, 0, 100), a: e(r3.a) };
1837 - })({ h: Number(n2), s: Number(a2), v: Number(o2), a: Number(s2) });
1838 - 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);
1839 1862 }, "hsv"]] };
1840 - var N = function(r2, t2) {
1841 - for (var n2 = 0; n2 < t2.length; n2++) {
1842 - var e2 = t2[n2][0](r2);
1843 - 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]];
1844 1867 }
1845 1868 return [null, void 0];
1846 1869 };
1847 - var x = function(r2) {
1848 - 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];
1849 1872 };
1850 - var M = function(r2, t2) {
1851 - var n2 = c(r2);
1852 - 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 };
1853 1876 };
1854 - var H = function(r2) {
1855 - 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;
1856 1879 };
1857 - var $ = function(r2, t2) {
1858 - var n2 = c(r2);
1859 - 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 };
1860 1883 };
1861 - var j = (function() {
1862 - function r2(r3) {
1863 - 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 };
1864 1887 }
1865 - return r2.prototype.isValid = function() {
1888 + return r.prototype.isValid = function() {
1866 1889 return null !== this.parsed;
1867 - }, r2.prototype.brightness = function() {
1868 - return n(H(this.rgba), 2);
1869 - }, r2.prototype.isDark = function() {
1870 - return H(this.rgba) < 0.5;
1871 - }, r2.prototype.isLight = function() {
1872 - return H(this.rgba) >= 0.5;
1873 - }, r2.prototype.toHex = function() {
1874 - 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;
1875 - var r3, t2, e2, u2, a2, i2;
1876 - }, r2.prototype.toRgb = function() {
1877 - return o(this.rgba);
1878 - }, r2.prototype.toRgbString = function() {
1879 - 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 + ")";
1880 - var r3, t2, n2, e2, u2;
1881 - }, r2.prototype.toHsl = function() {
1882 - return d(c(this.rgba));
1883 - }, r2.prototype.toHslString = function() {
1884 - 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 + "%)";
1885 - var r3, t2, n2, e2, u2;
1886 - }, r2.prototype.toHsv = function() {
1887 - return r3 = h(this.rgba), { h: n(r3.h), s: n(r3.s), v: n(r3.v), a: n(r3.a, 3) };
1888 - var r3;
1889 - }, r2.prototype.invert = function() {
1890 - return w({ r: 255 - (r3 = this.rgba).r, g: 255 - r3.g, b: 255 - r3.b, a: r3.a });
1891 - var r3;
1892 - }, r2.prototype.saturate = function(r3) {
1893 - return void 0 === r3 && (r3 = 0.1), w(M(this.rgba, r3));
1894 - }, r2.prototype.desaturate = function(r3) {
1895 - return void 0 === r3 && (r3 = 0.1), w(M(this.rgba, -r3));
1896 - }, r2.prototype.grayscale = function() {
1897 - return w(M(this.rgba, -1));
1898 - }, r2.prototype.lighten = function(r3) {
1899 - return void 0 === r3 && (r3 = 0.1), w($(this.rgba, r3));
1900 - }, r2.prototype.darken = function(r3) {
1901 - return void 0 === r3 && (r3 = 0.1), w($(this.rgba, -r3));
1902 - }, r2.prototype.rotate = function(r3) {
1903 - return void 0 === r3 && (r3 = 15), this.hue(this.hue() + r3);
1904 - }, r2.prototype.alpha = function(r3) {
1905 - return "number" == typeof r3 ? w({ r: (t2 = this.rgba).r, g: t2.g, b: t2.b, a: r3 }) : n(this.rgba.a, 3);
1906 - var t2;
1907 - }, r2.prototype.hue = function(r3) {
1908 - var t2 = c(this.rgba);
1909 - return "number" == typeof r3 ? w({ h: r3, s: t2.s, l: t2.l, a: t2.a }) : n(t2.h);
1910 - }, r2.prototype.isEqual = function(r3) {
1911 - return this.toHex() === w(r3).toHex();
1912 - }, 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;
1913 1936 })();
1914 - var w = function(r2) {
1915 - return r2 instanceof j ? r2 : new j(r2);
1937 + var A = function(r) {
1938 + return r instanceof q ? r : new q(r);
1916 1939 };
1917 1940
1918 1941 // packages/rich-text/build-module/hook/use-boundary-style.mjs
1919 1942 var import_element2 = __toESM(require_element(), 1);
@@ -1932,10 +1955,10 @@
1932 1955 }
1933 1956 const { ownerDocument } = element;
1934 1957 const { defaultView } = ownerDocument;
1935 1958 const computedStyle = defaultView.getComputedStyle(element);
1936 - const newColor = w(computedStyle.color).alpha(0.2).toRgbString();
1937 - const selector = `.rich-text:focus ${boundarySelector}`;
1959 + const newColor = A(computedStyle.color).alpha(0.2).toRgbString();
1960 + const selector = `[contenteditable="true"]:focus ${boundarySelector}`;
1938 1961 const rule = `background-color: ${newColor}`;
1939 1962 const style = `${selector} {${rule}}`;
1940 1963 const globalStyleId = "rich-text-boundary-style";
1941 1964 let globalStyle = ownerDocument.getElementById(globalStyleId);
@@ -1952,18 +1975,40 @@
1952 1975 }
1953 1976
1954 1977 // packages/rich-text/build-module/hook/event-listeners/index.mjs
1955 1978 var import_element3 = __toESM(require_element(), 1);
1956 - var import_compose8 = __toESM(require_compose(), 1);
1979 + var import_compose7 = __toESM(require_compose(), 1);
1957 1980
1958 1981 // packages/rich-text/build-module/hook/event-listeners/copy-handler.mjs
1959 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
1960 2000 var { subscribeDelegatedListener } = unlock(import_compose.privateApis);
1961 2001 var copy_handler_default = (props) => (element) => {
1962 2002 function onCopy(event) {
1963 - const { record } = props.current;
2003 + const { record, handleChange } = props.current;
1964 2004 const { ownerDocument } = element;
1965 - if (isCollapsed(record.current) || !element.contains(ownerDocument.activeElement)) {
2005 + if (
2006 + // Another handler may have already claimed the clipboard, e.g.
2007 + // the block editor copying the whole block when its entire
2008 + // text is selected.
2009 + event.defaultPrevented || isCollapsed(record.current) || !element.contains(ownerDocument.activeElement) && !ownsSelection(element)
2010 + ) {
1966 2011 return;
1967 2012 }
1968 2013 const selectedRecord = slice(record.current);
1969 2014 const plainText = getTextContent(selectedRecord);
@@ -1972,9 +2017,9 @@
1972 2017 event.clipboardData.setData("text/html", html);
1973 2018 event.clipboardData.setData("rich-text", "true");
1974 2019 event.preventDefault();
1975 2020 if (event.type === "cut") {
1976 - ownerDocument.execCommand("delete");
2021 + handleChange(remove2(record.current));
1977 2022 }
1978 2023 }
1979 2024 const { defaultView } = element.ownerDocument;
1980 2025 const unsubscribeCopy = subscribeDelegatedListener(
@@ -2015,9 +2060,9 @@
2015 2060 selection.addRange(range);
2016 2061 event.preventDefault();
2017 2062 }
2018 2063 function onFocusIn(event) {
2019 - if (event.relatedTarget && !element.contains(event.relatedTarget) && event.relatedTarget.tagName === "A") {
2064 + if (event.relatedTarget && !element.contains(event.relatedTarget)) {
2020 2065 onClick(event);
2021 2066 }
2022 2067 }
2023 2068 const unsubscribeClick = subscribeDelegatedListener2(
@@ -2037,10 +2082,55 @@
2037 2082 };
2038 2083
2039 2084 // packages/rich-text/build-module/hook/event-listeners/format-boundaries.mjs
2040 2085 var import_keycodes = __toESM(require_keycodes(), 1);
2086 +
2087 + // packages/rich-text/build-module/subscribe-owned-listener.mjs
2041 2088 var import_compose3 = __toESM(require_compose(), 1);
2042 2089 var { subscribeDelegatedListener: subscribeDelegatedListener3 } = unlock(import_compose3.privateApis);
2090 + var registries = /* @__PURE__ */ new WeakMap();
2091 + function subscribeOwnedListener(element, eventType, callback, capture = false) {
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 + };
2130 + }
2131 +
2132 + // packages/rich-text/build-module/hook/event-listeners/format-boundaries.mjs
2043 2133 var EMPTY_ACTIVE_FORMATS = [];
2044 2134 var format_boundaries_default = (props) => (element) => {
2045 2135 function onKeyDown(event) {
2046 2136 const { keyCode, shiftKey, altKey, metaKey, ctrlKey } = event;
@@ -2101,15 +2191,13 @@
2101 2191 record.current = newValue;
2102 2192 applyRecord(newValue);
2103 2193 forceRender();
2104 2194 }
2105 - return subscribeDelegatedListener3(element, "keydown", onKeyDown, true);
2195 + return subscribeOwnedListener(element, "keydown", onKeyDown, true);
2106 2196 };
2107 2197
2108 2198 // packages/rich-text/build-module/hook/event-listeners/delete.mjs
2109 2199 var import_keycodes2 = __toESM(require_keycodes(), 1);
2110 - var import_compose4 = __toESM(require_compose(), 1);
2111 - var { subscribeDelegatedListener: subscribeDelegatedListener4 } = unlock(import_compose4.privateApis);
2112 2200 var delete_default = (props) => (element) => {
2113 2201 function onKeyDown(event) {
2114 2202 const { keyCode } = event;
2115 2203 if (event.defaultPrevented) {
@@ -2125,13 +2213,13 @@
2125 2213 handleChange(remove2(currentValue));
2126 2214 event.preventDefault();
2127 2215 }
2128 2216 }
2129 - return subscribeDelegatedListener4(element, "keydown", onKeyDown);
2217 + return subscribeOwnedListener(element, "keydown", onKeyDown);
2130 2218 };
2131 2219
2132 2220 // packages/rich-text/build-module/hook/event-listeners/input-and-selection.mjs
2133 - var import_compose5 = __toESM(require_compose(), 1);
2221 + var import_compose4 = __toESM(require_compose(), 1);
2134 2222
2135 2223 // packages/rich-text/build-module/update-formats.mjs
2136 2224 function updateFormats({ value, start, end, formats }) {
2137 2225 const min = Math.min(start, end);
@@ -2160,9 +2248,9 @@
2160 2248 return value;
2161 2249 }
2162 2250
2163 2251 // packages/rich-text/build-module/hook/event-listeners/input-and-selection.mjs
2164 - var { subscribeDelegatedListener: subscribeDelegatedListener5 } = unlock(import_compose5.privateApis);
2252 + var { subscribeDelegatedListener: subscribeDelegatedListener4 } = unlock(import_compose4.privateApis);
2165 2253 var INSERTION_INPUT_TYPES_TO_IGNORE = /* @__PURE__ */ new Set([
2166 2254 "insertParagraph",
2167 2255 "insertOrderedList",
2168 2256 "insertUnorderedList",
@@ -2170,24 +2258,19 @@
2170 2258 "insertLink"
2171 2259 ]);
2172 2260 var EMPTY_ACTIVE_FORMATS2 = [];
2173 2261 var PLACEHOLDER_ATTR_NAME = "data-rich-text-placeholder";
2174 - function fixPlaceholderSelection(defaultView) {
2175 - const selection = defaultView.getSelection();
2176 - const { anchorNode, anchorOffset } = selection;
2177 - if (anchorNode.nodeType !== anchorNode.ELEMENT_NODE) {
2178 - return;
2179 - }
2180 - const targetNode = anchorNode.childNodes[anchorOffset];
2181 - if (!targetNode || targetNode.nodeType !== targetNode.ELEMENT_NODE || !targetNode.hasAttribute(PLACEHOLDER_ATTR_NAME)) {
2182 - return;
2183 - }
2184 - selection.collapseToStart();
2185 - }
2186 2262 var input_and_selection_default = (props) => (element) => {
2187 2263 const { ownerDocument } = element;
2188 2264 const { defaultView } = ownerDocument;
2189 2265 let isComposing = false;
2266 + let isPointerDown = false;
2267 + function onPointerDown() {
2268 + isPointerDown = true;
2269 + }
2270 + function onPointerUp() {
2271 + isPointerDown = false;
2272 + }
2190 2273 function onInput(event) {
2191 2274 if (isComposing) {
2192 2275 return;
2193 2276 }
@@ -2210,33 +2293,42 @@
2210 2293 formats: clearFormats ? [] : oldActiveFormats
2211 2294 });
2212 2295 handleChange(change);
2213 2296 }
2297 + let selectionSnapshot;
2214 2298 function handleSelectionChange() {
2215 2299 const { record, applyRecord, createRecord, onSelectionChange } = props.current;
2216 2300 if (element.contentEditable !== "true") {
2217 2301 return;
2218 2302 }
2219 - if (ownerDocument.activeElement !== element) {
2220 - ownerDocument.removeEventListener(
2221 - "selectionchange",
2222 - handleSelectionChange
2223 - );
2303 + if (ownerDocument.activeElement !== element && !ownsSelection(element)) {
2224 2304 return;
2225 2305 }
2226 2306 if (isComposing) {
2227 2307 return;
2228 2308 }
2309 + const selection = defaultView.getSelection();
2310 + if (selectionSnapshot && selectionSnapshot.anchorNode === selection.anchorNode && selectionSnapshot.anchorOffset === selection.anchorOffset && selectionSnapshot.focusNode === selection.focusNode && selectionSnapshot.focusOffset === selection.focusOffset && selectionSnapshot.processedStart === record.current.start && selectionSnapshot.processedEnd === record.current.end) {
2311 + return;
2312 + }
2229 2313 const { start, end, text } = createRecord();
2230 2314 const oldRecord = record.current;
2315 + if (text.length === 0) {
2316 + applyRecord({ ...oldRecord, start, end });
2317 + }
2318 + selectionSnapshot = {
2319 + anchorNode: selection.anchorNode,
2320 + anchorOffset: selection.anchorOffset,
2321 + focusNode: selection.focusNode,
2322 + focusOffset: selection.focusOffset,
2323 + processedStart: start,
2324 + processedEnd: end
2325 + };
2231 2326 if (text !== oldRecord.text) {
2232 2327 onInput();
2233 2328 return;
2234 2329 }
2235 2330 if (start === oldRecord.start && end === oldRecord.end) {
2236 - if (oldRecord.text.length === 0 && start === 0) {
2237 - fixPlaceholderSelection(defaultView);
2238 - }
2239 2331 return;
2240 2332 }
2241 2333 const newValue = {
2242 2334 ...oldRecord,
@@ -2258,21 +2350,13 @@
2258 2350 onSelectionChange(start, end);
2259 2351 }
2260 2352 function onCompositionStart() {
2261 2353 isComposing = true;
2262 - ownerDocument.removeEventListener(
2263 - "selectionchange",
2264 - handleSelectionChange
2265 - );
2266 2354 element.querySelector(`[${PLACEHOLDER_ATTR_NAME}]`)?.remove();
2267 2355 }
2268 2356 function onCompositionEnd() {
2269 2357 isComposing = false;
2270 2358 onInput({ inputType: "insertText" });
2271 - ownerDocument.addEventListener(
2272 - "selectionchange",
2273 - handleSelectionChange
2274 - );
2275 2359 }
2276 2360 function onFocus(event) {
2277 2361 if (event.target !== element) {
2278 2362 return;
@@ -2281,8 +2365,16 @@
2281 2365 return;
2282 2366 }
2283 2367 const { record, isSelected, onSelectionChange, applyRecord } = props.current;
2284 2368 if (element.parentElement.closest('[contenteditable="true"]')) {
2369 + const selection = defaultView.getSelection();
2370 + if (!selection.anchorNode || !element.contains(selection.anchorNode)) {
2371 + if (isSelected && record.current.start !== void 0) {
2372 + applyRecord(record.current);
2373 + } else {
2374 + selection.collapse(element, 0);
2375 + }
2376 + }
2285 2377 return;
2286 2378 }
2287 2379 if (!isSelected) {
2288 2380 const index = void 0;
@@ -2291,51 +2383,89 @@
2291 2383 start: index,
2292 2384 end: index,
2293 2385 activeFormats: EMPTY_ACTIVE_FORMATS2
2294 2386 };
2295 - } else {
2296 - applyRecord(record.current, { domOnly: true });
2387 + selectionSnapshot = void 0;
2388 + } else if (!isPointerDown) {
2389 + applyRecord(record.current);
2297 2390 }
2298 2391 onSelectionChange(record.current.start, record.current.end);
2299 2392 window.queueMicrotask(handleSelectionChange);
2300 - ownerDocument.addEventListener(
2301 - "selectionchange",
2302 - handleSelectionChange
2303 - );
2304 2393 }
2305 - const unsubscribeInput = subscribeDelegatedListener5(
2394 + const unsubscribeInput = subscribeOwnedListener(
2306 2395 element,
2307 2396 "input",
2308 2397 onInput,
2309 2398 true
2310 2399 );
2311 - const unsubscribeCompositionStart = subscribeDelegatedListener5(
2400 + const unsubscribeCompositionStart = subscribeOwnedListener(
2312 2401 element,
2313 2402 "compositionstart",
2314 2403 onCompositionStart
2315 2404 );
2316 - const unsubscribeCompositionEnd = subscribeDelegatedListener5(
2405 + const unsubscribeCompositionEnd = subscribeOwnedListener(
2317 2406 element,
2318 2407 "compositionend",
2319 2408 onCompositionEnd,
2320 2409 true
2321 2410 );
2322 - const unsubscribeFocus = subscribeDelegatedListener5(
2411 + const unsubscribeFocus = subscribeDelegatedListener4(
2323 2412 element,
2324 2413 "focusin",
2325 2414 onFocus
2326 2415 );
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,
2433 + "selectionchange",
2434 + handleSelectionChange
2435 + );
2436 + const unsubscribeEnsureSelectionSync = [
2437 + "keydown",
2438 + "beforeinput",
2439 + "copy",
2440 + "cut",
2441 + "paste"
2442 + ].map(
2443 + (eventType) => subscribeOwnedListener(
2444 + element,
2445 + eventType,
2446 + handleSelectionChange,
2447 + true
2448 + )
2449 + );
2327 2450 return () => {
2328 2451 unsubscribeInput();
2329 2452 unsubscribeCompositionStart();
2330 2453 unsubscribeCompositionEnd();
2331 2454 unsubscribeFocus();
2455 + unsubscribePointerDown();
2456 + unsubscribePointerUp();
2457 + unsubscribePointerCancel();
2458 + unsubscribeSelectionChange();
2459 + unsubscribeEnsureSelectionSync.forEach(
2460 + (unsubscribe) => unsubscribe()
2461 + );
2332 2462 };
2333 2463 };
2334 2464
2335 2465 // packages/rich-text/build-module/hook/event-listeners/selection-change-compat.mjs
2336 - var import_compose6 = __toESM(require_compose(), 1);
2337 - var { subscribeDelegatedListener: subscribeDelegatedListener6 } = unlock(import_compose6.privateApis);
2466 + var import_compose5 = __toESM(require_compose(), 1);
2467 + var { subscribeDelegatedListener: subscribeDelegatedListener5 } = unlock(import_compose5.privateApis);
2338 2468 var selection_change_compat_default = () => (element) => {
2339 2469 const { ownerDocument } = element;
2340 2470 const { defaultView } = ownerDocument;
2341 2471 const selection = defaultView?.getSelection();
@@ -2361,14 +2491,14 @@
2361 2491 ownerDocument.addEventListener("selectionchange", onCancel);
2362 2492 ownerDocument.addEventListener("input", onCancel);
2363 2493 range = getRange();
2364 2494 }
2365 - const unsubscribePointerDown = subscribeDelegatedListener6(
2495 + const unsubscribePointerDown = subscribeDelegatedListener5(
2366 2496 element,
2367 2497 "pointerdown",
2368 2498 onDown
2369 2499 );
2370 - const unsubscribeKeyDown = subscribeDelegatedListener6(
2500 + const unsubscribeKeyDown = subscribeDelegatedListener5(
2371 2501 element,
2372 2502 "keydown",
2373 2503 onDown
2374 2504 );
@@ -2378,10 +2508,10 @@
2378 2508 };
2379 2509 };
2380 2510
2381 2511 // packages/rich-text/build-module/hook/event-listeners/prevent-focus-capture.mjs
2382 - var import_compose7 = __toESM(require_compose(), 1);
2383 - var { subscribeDelegatedListener: subscribeDelegatedListener7 } = unlock(import_compose7.privateApis);
2512 + var import_compose6 = __toESM(require_compose(), 1);
2513 + var { subscribeDelegatedListener: subscribeDelegatedListener6 } = unlock(import_compose6.privateApis);
2384 2514 function preventFocusCapture() {
2385 2515 return (element) => {
2386 2516 const { ownerDocument } = element;
2387 2517 const { defaultView } = ownerDocument;
@@ -2395,31 +2525,44 @@
2395 2525 }
2396 2526 if (!event.target.contains(element)) {
2397 2527 return;
2398 2528 }
2529 + if (!event.target.closest("[data-block]")) {
2530 + return;
2531 + }
2399 2532 value = element.getAttribute("contenteditable");
2533 + defaultView.getSelection().removeAllRanges();
2400 2534 element.setAttribute("contenteditable", "false");
2401 - defaultView.getSelection().removeAllRanges();
2402 2535 }
2403 2536 function onPointerUp() {
2404 2537 if (value !== null) {
2405 2538 element.setAttribute("contenteditable", value);
2406 2539 value = null;
2540 + const selection = defaultView.getSelection();
2541 + if (selection.isCollapsed && element.contains(selection.anchorNode)) {
2542 + selection.removeAllRanges();
2543 + }
2407 2544 }
2408 2545 }
2409 - const unsubscribePointerDown = subscribeDelegatedListener7(
2546 + const unsubscribePointerDown = subscribeDelegatedListener6(
2410 2547 defaultView,
2411 2548 "pointerdown",
2412 2549 onPointerDown
2413 2550 );
2414 - const unsubscribePointerUp = subscribeDelegatedListener7(
2551 + const unsubscribePointerUp = subscribeDelegatedListener6(
2415 2552 defaultView,
2416 2553 "pointerup",
2417 2554 onPointerUp
2418 2555 );
2556 + const unsubscribePointerCancel = subscribeDelegatedListener6(
2557 + defaultView,
2558 + "pointercancel",
2559 + onPointerUp
2560 + );
2419 2561 return () => {
2420 2562 unsubscribePointerDown();
2421 2563 unsubscribePointerUp();
2564 + unsubscribePointerCancel();
2422 2565 };
2423 2566 };
2424 2567 }
2425 2568
@@ -2424,13 +2567,13 @@
2424 2567 }
2425 2568
2426 2569 // packages/rich-text/build-module/hook/event-listeners/index.mjs
2427 2570 var allEventListeners = [
2571 + input_and_selection_default,
2428 2572 copy_handler_default,
2429 2573 select_object_default,
2430 2574 format_boundaries_default,
2431 2575 delete_default,
2432 - input_and_selection_default,
2433 2576 selection_change_compat_default,
2434 2577 preventFocusCapture
2435 2578 ];
2436 2579 function useEventListeners(props) {
@@ -2441,9 +2584,9 @@
2441 2584 const refEffects = (0, import_element3.useMemo)(
2442 2585 () => allEventListeners.map((refEffect) => refEffect(propsRef)),
2443 2586 [propsRef]
2444 2587 );
2445 - return (0, import_compose8.useRefEffect)(
2588 + return (0, import_compose7.useRefEffect)(
2446 2589 (element) => {
2447 2590 const cleanups = refEffects.map((effect) => effect(element));
2448 2591 return () => {
2449 2592 cleanups.forEach((cleanup) => cleanup());
@@ -2576,8 +2719,12 @@
2576 2719 };
2577 2720 }
2578 2721
2579 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 + }
2580 2727 function useRichTextBase({
2581 2728 value = "",
2582 2729 selectionStart,
2583 2730 selectionEnd,
@@ -2642,14 +2789,11 @@
2642 2789 }
2643 2790 recordRef.current.start = selectionStart;
2644 2791 recordRef.current.end = selectionEnd;
2645 2792 }
2646 - const hadSelectionUpdateRef = (0, import_element5.useRef)(false);
2647 2793 if (!recordRef.current) {
2648 - hadSelectionUpdateRef.current = isSelected;
2649 2794 setRecordFromProps();
2650 2795 } else if (selectionStart !== recordRef.current.start || selectionEnd !== recordRef.current.end) {
2651 - hadSelectionUpdateRef.current = isSelected;
2652 2796 recordRef.current = {
2653 2797 ...recordRef.current,
2654 2798 start: selectionStart,
2655 2799 end: selectionEnd,
@@ -2655,8 +2799,13 @@
2655 2799 end: selectionEnd,
2656 2800 activeFormats: void 0
2657 2801 };
2658 2802 }
2803 + const sentSelectionRef = (0, import_element5.useRef)([]);
2804 + function sendSelection(start, end) {
2805 + sentSelectionRef.current = [start, end];
2806 + onSelectionChange(start, end);
2807 + }
2659 2808 function handleChange(newRecord) {
2660 2809 recordRef.current = newRecord;
2661 2810 applyRecord(newRecord);
2662 2811 if (disableFormats) {
@@ -2674,9 +2823,9 @@
2674 2823 }
2675 2824 }
2676 2825 const { start, end, formats, text } = recordRef.current;
2677 2826 registry.batch(() => {
2678 - onSelectionChange(start, end);
2827 + sendSelection(start, end);
2679 2828 onChange(_valueRef.current, {
2680 2829 __unstableFormats: formats,
2681 2830 __unstableText: text
2682 2831 });
@@ -2682,36 +2831,26 @@
2682 2831 });
2683 2832 });
2684 2833 forceRender();
2685 2834 }
2686 - function applyFromProps() {
2687 - const previousValue = _valueRef.current;
2688 - setRecordFromProps();
2689 - const contentLengthChanged = previousValue && typeof previousValue === "string" && typeof value === "string" && previousValue.length !== value.length;
2690 - const hasFocus = ref.current?.contains(
2691 - ref.current.ownerDocument.activeElement
2692 - );
2693 - const skipSelection = contentLengthChanged && !hasFocus;
2694 - applyRecord(recordRef.current, { domOnly: skipSelection });
2695 - }
2696 - const didMountRef = (0, import_element5.useRef)(false);
2697 2835 (0, import_element5.useLayoutEffect)(() => {
2698 - if (didMountRef.current && value !== _valueRef.current) {
2699 - applyFromProps();
2700 - forceRender();
2836 + if (value === _valueRef.current) {
2837 + return;
2701 2838 }
2839 + setRecordFromProps();
2840 + applyRecord(recordRef.current, {
2841 + domOnly: !hasFocus(ref.current)
2842 + });
2843 + forceRender();
2702 2844 }, [value]);
2703 2845 (0, import_element5.useLayoutEffect)(() => {
2704 - if (!hadSelectionUpdateRef.current) {
2705 - return;
2846 + const [sentStart, sentEnd] = sentSelectionRef.current;
2847 + sentSelectionRef.current = [];
2848 + if (isSelected && (selectionStart !== sentStart || selectionEnd !== sentEnd) && hasFocus(ref.current)) {
2849 + applyRecord(recordRef.current);
2706 2850 }
2707 - if (ref.current.ownerDocument.activeElement !== ref.current) {
2708 - ref.current.focus();
2709 - }
2710 - applyRecord(recordRef.current);
2711 - hadSelectionUpdateRef.current = false;
2712 - }, [hadSelectionUpdateRef.current]);
2713 - const mergedRefs = (0, import_compose9.useMergeRefs)([
2851 + }, [selectionStart, selectionEnd, isSelected]);
2852 + const mergedRefs = (0, import_compose8.useMergeRefs)([
2714 2853 ref,
2715 2854 useDefaultStyle(),
2716 2855 useBoundaryStyle({ record: recordRef }),
2717 2856 useEventListeners({
@@ -2719,15 +2858,20 @@
2719 2858 handleChange,
2720 2859 applyRecord,
2721 2860 createRecord,
2722 2861 isSelected,
2723 - onSelectionChange,
2862 + onSelectionChange: sendSelection,
2724 2863 forceRender
2725 2864 }),
2726 - (0, import_compose9.useRefEffect)(() => {
2727 - applyFromProps();
2728 - didMountRef.current = true;
2729 - }, [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 + )
2730 2874 ]);
2731 2875 return {
2732 2876 value: recordRef.current,
2733 2877 // A function to get the most recent value so event handlers in
@@ -2805,16 +2949,102 @@
2805 2949 });
2806 2950 return useRichTextBase(props);
2807 2951 }
2808 2952
2953 + // packages/rich-text/build-module/contexts.mjs
2954 + var import_element6 = __toESM(require_element(), 1);
2955 + var KeyboardShortcutContext = (0, import_element6.createContext)();
2956 + KeyboardShortcutContext.displayName = "KeyboardShortcutContext";
2957 + var InputEventContext = (0, import_element6.createContext)();
2958 + InputEventContext.displayName = "InputEventContext";
2959 +
2960 + // packages/rich-text/build-module/keyboard-shortcut.mjs
2961 + var import_keycodes3 = __toESM(require_keycodes(), 1);
2962 + var import_element7 = __toESM(require_element(), 1);
2963 + var import_compose9 = __toESM(require_compose(), 1);
2964 + function RichTextShortcut({ character, type, onUse }) {
2965 + const keyboardShortcuts = (0, import_element7.useContext)(KeyboardShortcutContext);
2966 + const stableOnUse = (0, import_compose9.useEvent)(onUse);
2967 + (0, import_element7.useEffect)(() => {
2968 + const shortcuts = keyboardShortcuts.current;
2969 + function callback(event) {
2970 + if (import_keycodes3.isKeyboardEvent[type](event, character)) {
2971 + stableOnUse();
2972 + event.preventDefault();
2973 + }
2974 + }
2975 + shortcuts.add(callback);
2976 + return () => {
2977 + shortcuts.delete(callback);
2978 + };
2979 + }, [character, type, keyboardShortcuts, stableOnUse]);
2980 + return null;
2981 + }
2982 +
2983 + // packages/rich-text/build-module/input-event.mjs
2984 + var import_element8 = __toESM(require_element(), 1);
2985 + var import_compose10 = __toESM(require_compose(), 1);
2986 + function RichTextInputEvent({ inputType, onInput }) {
2987 + const callbacks = (0, import_element8.useContext)(InputEventContext);
2988 + const stableOnInput = (0, import_compose10.useEvent)(onInput);
2989 + (0, import_element8.useEffect)(() => {
2990 + const inputCallbacks = callbacks.current;
2991 + function callback(event) {
2992 + if (event.inputType === inputType) {
2993 + stableOnInput();
2994 + event.preventDefault();
2995 + }
2996 + }
2997 + inputCallbacks.add(callback);
2998 + return () => {
2999 + inputCallbacks.delete(callback);
3000 + };
3001 + }, [inputType, callbacks, stableOnInput]);
3002 + return null;
3003 + }
3004 +
3005 + // packages/rich-text/build-module/event-listeners.mjs
3006 + var shortcutsListener = (props) => (element) => {
3007 + const { keyboardShortcuts } = props.current;
3008 + function onKeyDown(event) {
3009 + for (const keyboardShortcut of keyboardShortcuts.current) {
3010 + keyboardShortcut(event);
3011 + }
3012 + }
3013 + element.addEventListener("keydown", onKeyDown);
3014 + return () => {
3015 + element.removeEventListener("keydown", onKeyDown);
3016 + };
3017 + };
3018 + var inputEventsListener = (props) => (element) => {
3019 + const { inputEvents } = props.current;
3020 + function onInput(event) {
3021 + for (const inputEventHandler of inputEvents.current) {
3022 + inputEventHandler(event);
3023 + }
3024 + }
3025 + element.addEventListener("input", onInput);
3026 + return () => {
3027 + element.removeEventListener("input", onInput);
3028 + };
3029 + };
3030 +
2809 3031 // packages/rich-text/build-module/private-apis.mjs
2810 3032 var privateApis = {};
2811 3033 lock(privateApis, {
2812 - useRichText
3034 + useRichText,
3035 + KeyboardShortcutContext,
3036 + InputEventContext,
3037 + RichTextShortcut,
3038 + RichTextInputEvent,
3039 + shortcutsListener,
3040 + inputEventsListener,
3041 + ownsSelection,
3042 + subscribeOwnedListener
2813 3043 });
2814 3044
2815 3045 // packages/rich-text/build-module/hook/use-anchor-ref.mjs
2816 - var import_element6 = __toESM(require_element(), 1);
3046 + var import_element9 = __toESM(require_element(), 1);
2817 3047 var import_deprecated2 = __toESM(require_deprecated(), 1);
2818 3048 function useAnchorRef({ ref, value, settings = {} }) {
2819 3049 (0, import_deprecated2.default)("`useAnchorRef` hook", {
2820 3050 since: "6.1",
@@ -2821,9 +3051,9 @@
2821 3051 alternative: "`useAnchor` hook"
2822 3052 });
2823 3053 const { tagName, className, name } = settings;
2824 3054 const activeFormat = name ? getActiveFormat(value, name) : void 0;
2825 - return (0, import_element6.useMemo)(() => {
3055 + return (0, import_element9.useMemo)(() => {
2826 3056 if (!ref.current) {
2827 3057 return;
2828 3058 }
2829 3059 const {
@@ -2848,10 +3078,10 @@
2848 3078 }, [activeFormat, value.start, value.end, tagName, className]);
2849 3079 }
2850 3080
2851 3081 // packages/rich-text/build-module/hook/use-anchor.mjs
2852 - var import_compose10 = __toESM(require_compose(), 1);
2853 - var import_element7 = __toESM(require_element(), 1);
3082 + var import_compose11 = __toESM(require_compose(), 1);
3083 + var import_element10 = __toESM(require_element(), 1);
2854 3084 var import_dom = __toESM(require_dom(), 1);
2855 3085 function getFormatElement(range, editableContentElement, tagName, className) {
2856 3086 let element = range.startContainer;
2857 3087 if (element.nodeType === element.TEXT_NODE && element instanceof window.Text && range.startOffset === element.length && element.nextSibling) {
@@ -2930,13 +3160,13 @@
2930 3160 settings
2931 3161 }) {
2932 3162 const { tagName, className } = settings ?? DEFAULT_SETTINGS;
2933 3163 const isActive = !!(settings && "isActive" in settings && settings.isActive);
2934 - const [anchor, setAnchor] = (0, import_element7.useState)(
3164 + const [anchor, setAnchor] = (0, import_element10.useState)(
2935 3165 () => getAnchor(editableContentElement, tagName, className ?? "")
2936 3166 );
2937 - const wasActive = (0, import_compose10.usePrevious)(isActive);
2938 - (0, import_element7.useLayoutEffect)(() => {
3167 + const wasActive = (0, import_compose11.usePrevious)(isActive);
3168 + (0, import_element10.useLayoutEffect)(() => {
2939 3169 if (!editableContentElement) {
2940 3170 return;
2941 3171 }
2942 3172 function callback() {
@@ -2950,9 +3180,9 @@
2950 3180 function detach() {
2951 3181 ownerDocument.removeEventListener("selectionchange", callback);
2952 3182 }
2953 3183 const { ownerDocument } = editableContentElement;
2954 - if (editableContentElement === ownerDocument.activeElement || // When a link is created, we need to attach the popover to the newly created anchor.
3184 + if (ownsSelection(editableContentElement) || // When a link is created, we need to attach the popover to the newly created anchor.
2955 3185 !wasActive && isActive || // Sometimes we're _removing_ an active anchor, such as the inline color popover.
2956 3186 // When we add the color, it switches from a virtual anchor to a `<mark>` element.
2957 3187 // When we _remove_ the color, it switches from a `<mark>` element to a virtual anchor.
2958 3188 wasActive && !isActive) {
@@ -2975,6 +3205,8 @@
2975 3205 // packages/rich-text/build-module/index.mjs
2976 3206 function __experimentalRichText() {
2977 3207 }
2978 3208 return __toCommonJS(index_exports);
3209 +})();
3210 +(window.wp ||= {}).richText = wp.richText;
2979 3211 })();
2980 3212 //# sourceMappingURL=index.js.map