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 +516 -284 23.3.1 → trunk 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