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 +598 -301 23.2.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_compose2 = __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,16 +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);
1979 + var import_compose7 = __toESM(require_compose(), 1);
1980 +
1981 + // packages/rich-text/build-module/hook/event-listeners/copy-handler.mjs
1956 1982 var import_compose = __toESM(require_compose(), 1);
1957 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 +
1958 1999 // packages/rich-text/build-module/hook/event-listeners/copy-handler.mjs
2000 + var { subscribeDelegatedListener } = unlock(import_compose.privateApis);
1959 2001 var copy_handler_default = (props) => (element) => {
1960 2002 function onCopy(event) {
1961 - const { record } = props.current;
2003 + const { record, handleChange } = props.current;
1962 2004 const { ownerDocument } = element;
1963 - 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 + ) {
1964 2011 return;
1965 2012 }
1966 2013 const selectedRecord = slice(record.current);
1967 2014 const plainText = getTextContent(selectedRecord);
@@ -1970,21 +2017,31 @@
1970 2017 event.clipboardData.setData("text/html", html);
1971 2018 event.clipboardData.setData("rich-text", "true");
1972 2019 event.preventDefault();
1973 2020 if (event.type === "cut") {
1974 - ownerDocument.execCommand("delete");
2021 + handleChange(remove2(record.current));
1975 2022 }
1976 2023 }
1977 2024 const { defaultView } = element.ownerDocument;
1978 - defaultView.addEventListener("copy", onCopy);
1979 - defaultView.addEventListener("cut", onCopy);
2025 + const unsubscribeCopy = subscribeDelegatedListener(
2026 + defaultView,
2027 + "copy",
2028 + onCopy
2029 + );
2030 + const unsubscribeCut = subscribeDelegatedListener(
2031 + defaultView,
2032 + "cut",
2033 + onCopy
2034 + );
1980 2035 return () => {
1981 - defaultView.removeEventListener("copy", onCopy);
1982 - defaultView.removeEventListener("cut", onCopy);
2036 + unsubscribeCopy();
2037 + unsubscribeCut();
1983 2038 };
1984 2039 };
1985 2040
1986 2041 // packages/rich-text/build-module/hook/event-listeners/select-object.mjs
2042 + var import_compose2 = __toESM(require_compose(), 1);
2043 + var { subscribeDelegatedListener: subscribeDelegatedListener2 } = unlock(import_compose2.privateApis);
1987 2044 var select_object_default = () => (element) => {
1988 2045 function onClick(event) {
1989 2046 const { target } = event;
1990 2047 if (target === element || target.textContent && target.isContentEditable) {
@@ -2003,22 +2060,77 @@
2003 2060 selection.addRange(range);
2004 2061 event.preventDefault();
2005 2062 }
2006 2063 function onFocusIn(event) {
2007 - if (event.relatedTarget && !element.contains(event.relatedTarget) && event.relatedTarget.tagName === "A") {
2064 + if (event.relatedTarget && !element.contains(event.relatedTarget)) {
2008 2065 onClick(event);
2009 2066 }
2010 2067 }
2011 - element.addEventListener("click", onClick);
2012 - element.addEventListener("focusin", onFocusIn);
2068 + const unsubscribeClick = subscribeDelegatedListener2(
2069 + element,
2070 + "click",
2071 + onClick
2072 + );
2073 + const unsubscribeFocusIn = subscribeDelegatedListener2(
2074 + element,
2075 + "focusin",
2076 + onFocusIn
2077 + );
2013 2078 return () => {
2014 - element.removeEventListener("click", onClick);
2015 - element.removeEventListener("focusin", onFocusIn);
2079 + unsubscribeClick();
2080 + unsubscribeFocusIn();
2016 2081 };
2017 2082 };
2018 2083
2019 2084 // packages/rich-text/build-module/hook/event-listeners/format-boundaries.mjs
2020 2085 var import_keycodes = __toESM(require_keycodes(), 1);
2086 +
2087 + // packages/rich-text/build-module/subscribe-owned-listener.mjs
2088 + var import_compose3 = __toESM(require_compose(), 1);
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
2021 2133 var EMPTY_ACTIVE_FORMATS = [];
2022 2134 var format_boundaries_default = (props) => (element) => {
2023 2135 function onKeyDown(event) {
2024 2136 const { keyCode, shiftKey, altKey, metaKey, ctrlKey } = event;
@@ -2036,10 +2148,9 @@
2036 2148 end,
2037 2149 activeFormats: currentActiveFormats = []
2038 2150 } = record.current;
2039 2151 const collapsed = isCollapsed(record.current);
2040 - const { ownerDocument } = element;
2041 - const { defaultView } = ownerDocument;
2152 + const { defaultView } = element.ownerDocument;
2042 2153 const { direction } = defaultView.getComputedStyle(element);
2043 2154 const reverseKey = direction === "rtl" ? import_keycodes.RIGHT : import_keycodes.LEFT;
2044 2155 const isReverse = event.keyCode === reverseKey;
2045 2156 if (collapsed && currentActiveFormats.length === 0) {
@@ -2080,12 +2191,9 @@
2080 2191 record.current = newValue;
2081 2192 applyRecord(newValue);
2082 2193 forceRender();
2083 2194 }
2084 - element.addEventListener("keydown", onKeyDown);
2085 - return () => {
2086 - element.removeEventListener("keydown", onKeyDown);
2087 - };
2195 + return subscribeOwnedListener(element, "keydown", onKeyDown, true);
2088 2196 };
2089 2197
2090 2198 // packages/rich-text/build-module/hook/event-listeners/delete.mjs
2091 2199 var import_keycodes2 = __toESM(require_keycodes(), 1);
@@ -2091,9 +2199,8 @@
2091 2199 var import_keycodes2 = __toESM(require_keycodes(), 1);
2092 2200 var delete_default = (props) => (element) => {
2093 2201 function onKeyDown(event) {
2094 2202 const { keyCode } = event;
2095 - const { createRecord, handleChange } = props.current;
2096 2203 if (event.defaultPrevented) {
2097 2204 return;
2098 2205 }
2099 2206 if (keyCode !== import_keycodes2.DELETE && keyCode !== import_keycodes2.BACKSPACE) {
@@ -2098,8 +2205,9 @@
2098 2205 }
2099 2206 if (keyCode !== import_keycodes2.DELETE && keyCode !== import_keycodes2.BACKSPACE) {
2100 2207 return;
2101 2208 }
2209 + const { createRecord, handleChange } = props.current;
2102 2210 const currentValue = createRecord();
2103 2211 const { start, end, text } = currentValue;
2104 2212 if (start === 0 && end !== 0 && end === text.length) {
2105 2213 handleChange(remove2(currentValue));
@@ -2105,14 +2213,14 @@
2105 2213 handleChange(remove2(currentValue));
2106 2214 event.preventDefault();
2107 2215 }
2108 2216 }
2109 - element.addEventListener("keydown", onKeyDown);
2110 - return () => {
2111 - element.removeEventListener("keydown", onKeyDown);
2112 - };
2217 + return subscribeOwnedListener(element, "keydown", onKeyDown);
2113 2218 };
2114 2219
2220 + // packages/rich-text/build-module/hook/event-listeners/input-and-selection.mjs
2221 + var import_compose4 = __toESM(require_compose(), 1);
2222 +
2115 2223 // packages/rich-text/build-module/update-formats.mjs
2116 2224 function updateFormats({ value, start, end, formats }) {
2117 2225 const min = Math.min(start, end);
2118 2226 const max = Math.max(start, end);
@@ -2140,8 +2248,9 @@
2140 2248 return value;
2141 2249 }
2142 2250
2143 2251 // packages/rich-text/build-module/hook/event-listeners/input-and-selection.mjs
2252 + var { subscribeDelegatedListener: subscribeDelegatedListener4 } = unlock(import_compose4.privateApis);
2144 2253 var INSERTION_INPUT_TYPES_TO_IGNORE = /* @__PURE__ */ new Set([
2145 2254 "insertParagraph",
2146 2255 "insertOrderedList",
2147 2256 "insertUnorderedList",
@@ -2149,24 +2258,19 @@
2149 2258 "insertLink"
2150 2259 ]);
2151 2260 var EMPTY_ACTIVE_FORMATS2 = [];
2152 2261 var PLACEHOLDER_ATTR_NAME = "data-rich-text-placeholder";
2153 - function fixPlaceholderSelection(defaultView) {
2154 - const selection = defaultView.getSelection();
2155 - const { anchorNode, anchorOffset } = selection;
2156 - if (anchorNode.nodeType !== anchorNode.ELEMENT_NODE) {
2157 - return;
2158 - }
2159 - const targetNode = anchorNode.childNodes[anchorOffset];
2160 - if (!targetNode || targetNode.nodeType !== targetNode.ELEMENT_NODE || !targetNode.hasAttribute(PLACEHOLDER_ATTR_NAME)) {
2161 - return;
2162 - }
2163 - selection.collapseToStart();
2164 - }
2165 2262 var input_and_selection_default = (props) => (element) => {
2166 2263 const { ownerDocument } = element;
2167 2264 const { defaultView } = ownerDocument;
2168 2265 let isComposing = false;
2266 + let isPointerDown = false;
2267 + function onPointerDown() {
2268 + isPointerDown = true;
2269 + }
2270 + function onPointerUp() {
2271 + isPointerDown = false;
2272 + }
2169 2273 function onInput(event) {
2170 2274 if (isComposing) {
2171 2275 return;
2172 2276 }
@@ -2189,33 +2293,42 @@
2189 2293 formats: clearFormats ? [] : oldActiveFormats
2190 2294 });
2191 2295 handleChange(change);
2192 2296 }
2297 + let selectionSnapshot;
2193 2298 function handleSelectionChange() {
2194 2299 const { record, applyRecord, createRecord, onSelectionChange } = props.current;
2195 2300 if (element.contentEditable !== "true") {
2196 2301 return;
2197 2302 }
2198 - if (ownerDocument.activeElement !== element) {
2199 - ownerDocument.removeEventListener(
2200 - "selectionchange",
2201 - handleSelectionChange
2202 - );
2303 + if (ownerDocument.activeElement !== element && !ownsSelection(element)) {
2203 2304 return;
2204 2305 }
2205 2306 if (isComposing) {
2206 2307 return;
2207 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 + }
2208 2313 const { start, end, text } = createRecord();
2209 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 + };
2210 2326 if (text !== oldRecord.text) {
2211 2327 onInput();
2212 2328 return;
2213 2329 }
2214 2330 if (start === oldRecord.start && end === oldRecord.end) {
2215 - if (oldRecord.text.length === 0 && start === 0) {
2216 - fixPlaceholderSelection(defaultView);
2217 - }
2218 2331 return;
2219 2332 }
2220 2333 const newValue = {
2221 2334 ...oldRecord,
@@ -2237,25 +2350,31 @@
2237 2350 onSelectionChange(start, end);
2238 2351 }
2239 2352 function onCompositionStart() {
2240 2353 isComposing = true;
2241 - ownerDocument.removeEventListener(
2242 - "selectionchange",
2243 - handleSelectionChange
2244 - );
2245 2354 element.querySelector(`[${PLACEHOLDER_ATTR_NAME}]`)?.remove();
2246 2355 }
2247 2356 function onCompositionEnd() {
2248 2357 isComposing = false;
2249 2358 onInput({ inputType: "insertText" });
2250 - ownerDocument.addEventListener(
2251 - "selectionchange",
2252 - handleSelectionChange
2253 - );
2254 2359 }
2255 - function onFocus() {
2360 + function onFocus(event) {
2361 + if (event.target !== element) {
2362 + return;
2363 + }
2364 + if (element.contentEditable !== "true") {
2365 + return;
2366 + }
2256 2367 const { record, isSelected, onSelectionChange, applyRecord } = props.current;
2257 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 + }
2258 2377 return;
2259 2378 }
2260 2379 if (!isSelected) {
2261 2380 const index = void 0;
@@ -2264,31 +2383,89 @@
2264 2383 start: index,
2265 2384 end: index,
2266 2385 activeFormats: EMPTY_ACTIVE_FORMATS2
2267 2386 };
2268 - } else {
2269 - applyRecord(record.current, { domOnly: true });
2387 + selectionSnapshot = void 0;
2388 + } else if (!isPointerDown) {
2389 + applyRecord(record.current);
2270 2390 }
2271 2391 onSelectionChange(record.current.start, record.current.end);
2272 2392 window.queueMicrotask(handleSelectionChange);
2273 - ownerDocument.addEventListener(
2274 - "selectionchange",
2275 - handleSelectionChange
2276 - );
2277 2393 }
2278 - element.addEventListener("input", onInput);
2279 - element.addEventListener("compositionstart", onCompositionStart);
2280 - element.addEventListener("compositionend", onCompositionEnd);
2281 - element.addEventListener("focus", onFocus);
2394 + const unsubscribeInput = subscribeOwnedListener(
2395 + element,
2396 + "input",
2397 + onInput,
2398 + true
2399 + );
2400 + const unsubscribeCompositionStart = subscribeOwnedListener(
2401 + element,
2402 + "compositionstart",
2403 + onCompositionStart
2404 + );
2405 + const unsubscribeCompositionEnd = subscribeOwnedListener(
2406 + element,
2407 + "compositionend",
2408 + onCompositionEnd,
2409 + true
2410 + );
2411 + const unsubscribeFocus = subscribeDelegatedListener4(
2412 + element,
2413 + "focusin",
2414 + onFocus
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 + );
2282 2450 return () => {
2283 - element.removeEventListener("input", onInput);
2284 - element.removeEventListener("compositionstart", onCompositionStart);
2285 - element.removeEventListener("compositionend", onCompositionEnd);
2286 - element.removeEventListener("focus", onFocus);
2451 + unsubscribeInput();
2452 + unsubscribeCompositionStart();
2453 + unsubscribeCompositionEnd();
2454 + unsubscribeFocus();
2455 + unsubscribePointerDown();
2456 + unsubscribePointerUp();
2457 + unsubscribePointerCancel();
2458 + unsubscribeSelectionChange();
2459 + unsubscribeEnsureSelectionSync.forEach(
2460 + (unsubscribe) => unsubscribe()
2461 + );
2287 2462 };
2288 2463 };
2289 2464
2290 2465 // packages/rich-text/build-module/hook/event-listeners/selection-change-compat.mjs
2466 + var import_compose5 = __toESM(require_compose(), 1);
2467 + var { subscribeDelegatedListener: subscribeDelegatedListener5 } = unlock(import_compose5.privateApis);
2291 2468 var selection_change_compat_default = () => (element) => {
2292 2469 const { ownerDocument } = element;
2293 2470 const { defaultView } = ownerDocument;
2294 2471 const selection = defaultView?.getSelection();
@@ -2314,17 +2491,27 @@
2314 2491 ownerDocument.addEventListener("selectionchange", onCancel);
2315 2492 ownerDocument.addEventListener("input", onCancel);
2316 2493 range = getRange();
2317 2494 }
2318 - element.addEventListener("pointerdown", onDown);
2319 - element.addEventListener("keydown", onDown);
2495 + const unsubscribePointerDown = subscribeDelegatedListener5(
2496 + element,
2497 + "pointerdown",
2498 + onDown
2499 + );
2500 + const unsubscribeKeyDown = subscribeDelegatedListener5(
2501 + element,
2502 + "keydown",
2503 + onDown
2504 + );
2320 2505 return () => {
2321 - element.removeEventListener("pointerdown", onDown);
2322 - element.removeEventListener("keydown", onDown);
2506 + unsubscribePointerDown();
2507 + unsubscribeKeyDown();
2323 2508 };
2324 2509 };
2325 2510
2326 2511 // packages/rich-text/build-module/hook/event-listeners/prevent-focus-capture.mjs
2512 + var import_compose6 = __toESM(require_compose(), 1);
2513 + var { subscribeDelegatedListener: subscribeDelegatedListener6 } = unlock(import_compose6.privateApis);
2327 2514 function preventFocusCapture() {
2328 2515 return (element) => {
2329 2516 const { ownerDocument } = element;
2330 2517 const { defaultView } = ownerDocument;
@@ -2338,23 +2525,44 @@
2338 2525 }
2339 2526 if (!event.target.contains(element)) {
2340 2527 return;
2341 2528 }
2529 + if (!event.target.closest("[data-block]")) {
2530 + return;
2531 + }
2342 2532 value = element.getAttribute("contenteditable");
2533 + defaultView.getSelection().removeAllRanges();
2343 2534 element.setAttribute("contenteditable", "false");
2344 - defaultView.getSelection().removeAllRanges();
2345 2535 }
2346 2536 function onPointerUp() {
2347 2537 if (value !== null) {
2348 2538 element.setAttribute("contenteditable", value);
2349 2539 value = null;
2540 + const selection = defaultView.getSelection();
2541 + if (selection.isCollapsed && element.contains(selection.anchorNode)) {
2542 + selection.removeAllRanges();
2543 + }
2350 2544 }
2351 2545 }
2352 - defaultView.addEventListener("pointerdown", onPointerDown);
2353 - defaultView.addEventListener("pointerup", onPointerUp);
2546 + const unsubscribePointerDown = subscribeDelegatedListener6(
2547 + defaultView,
2548 + "pointerdown",
2549 + onPointerDown
2550 + );
2551 + const unsubscribePointerUp = subscribeDelegatedListener6(
2552 + defaultView,
2553 + "pointerup",
2554 + onPointerUp
2555 + );
2556 + const unsubscribePointerCancel = subscribeDelegatedListener6(
2557 + defaultView,
2558 + "pointercancel",
2559 + onPointerUp
2560 + );
2354 2561 return () => {
2355 - defaultView.removeEventListener("pointerdown", onPointerDown);
2356 - defaultView.removeEventListener("pointerup", onPointerUp);
2562 + unsubscribePointerDown();
2563 + unsubscribePointerUp();
2564 + unsubscribePointerCancel();
2357 2565 };
2358 2566 };
2359 2567 }
2360 2568
@@ -2359,13 +2567,13 @@
2359 2567 }
2360 2568
2361 2569 // packages/rich-text/build-module/hook/event-listeners/index.mjs
2362 2570 var allEventListeners = [
2571 + input_and_selection_default,
2363 2572 copy_handler_default,
2364 2573 select_object_default,
2365 2574 format_boundaries_default,
2366 2575 delete_default,
2367 - input_and_selection_default,
2368 2576 selection_change_compat_default,
2369 2577 preventFocusCapture
2370 2578 ];
2371 2579 function useEventListeners(props) {
@@ -2376,9 +2584,9 @@
2376 2584 const refEffects = (0, import_element3.useMemo)(
2377 2585 () => allEventListeners.map((refEffect) => refEffect(propsRef)),
2378 2586 [propsRef]
2379 2587 );
2380 - return (0, import_compose.useRefEffect)(
2588 + return (0, import_compose7.useRefEffect)(
2381 2589 (element) => {
2382 2590 const cleanups = refEffects.map((effect) => effect(element));
2383 2591 return () => {
2384 2592 cleanups.forEach((cleanup) => cleanup());
@@ -2511,8 +2719,12 @@
2511 2719 };
2512 2720 }
2513 2721
2514 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 + }
2515 2727 function useRichTextBase({
2516 2728 value = "",
2517 2729 selectionStart,
2518 2730 selectionEnd,
@@ -2577,14 +2789,11 @@
2577 2789 }
2578 2790 recordRef.current.start = selectionStart;
2579 2791 recordRef.current.end = selectionEnd;
2580 2792 }
2581 - const hadSelectionUpdateRef = (0, import_element5.useRef)(false);
2582 2793 if (!recordRef.current) {
2583 - hadSelectionUpdateRef.current = isSelected;
2584 2794 setRecordFromProps();
2585 2795 } else if (selectionStart !== recordRef.current.start || selectionEnd !== recordRef.current.end) {
2586 - hadSelectionUpdateRef.current = isSelected;
2587 2796 recordRef.current = {
2588 2797 ...recordRef.current,
2589 2798 start: selectionStart,
2590 2799 end: selectionEnd,
@@ -2590,8 +2799,13 @@
2590 2799 end: selectionEnd,
2591 2800 activeFormats: void 0
2592 2801 };
2593 2802 }
2803 + const sentSelectionRef = (0, import_element5.useRef)([]);
2804 + function sendSelection(start, end) {
2805 + sentSelectionRef.current = [start, end];
2806 + onSelectionChange(start, end);
2807 + }
2594 2808 function handleChange(newRecord) {
2595 2809 recordRef.current = newRecord;
2596 2810 applyRecord(newRecord);
2597 2811 if (disableFormats) {
@@ -2609,9 +2823,9 @@
2609 2823 }
2610 2824 }
2611 2825 const { start, end, formats, text } = recordRef.current;
2612 2826 registry.batch(() => {
2613 - onSelectionChange(start, end);
2827 + sendSelection(start, end);
2614 2828 onChange(_valueRef.current, {
2615 2829 __unstableFormats: formats,
2616 2830 __unstableText: text
2617 2831 });
@@ -2617,36 +2831,26 @@
2617 2831 });
2618 2832 });
2619 2833 forceRender();
2620 2834 }
2621 - function applyFromProps() {
2622 - const previousValue = _valueRef.current;
2623 - setRecordFromProps();
2624 - const contentLengthChanged = previousValue && typeof previousValue === "string" && typeof value === "string" && previousValue.length !== value.length;
2625 - const hasFocus = ref.current?.contains(
2626 - ref.current.ownerDocument.activeElement
2627 - );
2628 - const skipSelection = contentLengthChanged && !hasFocus;
2629 - applyRecord(recordRef.current, { domOnly: skipSelection });
2630 - }
2631 - const didMountRef = (0, import_element5.useRef)(false);
2632 2835 (0, import_element5.useLayoutEffect)(() => {
2633 - if (didMountRef.current && value !== _valueRef.current) {
2634 - applyFromProps();
2635 - forceRender();
2836 + if (value === _valueRef.current) {
2837 + return;
2636 2838 }
2839 + setRecordFromProps();
2840 + applyRecord(recordRef.current, {
2841 + domOnly: !hasFocus(ref.current)
2842 + });
2843 + forceRender();
2637 2844 }, [value]);
2638 2845 (0, import_element5.useLayoutEffect)(() => {
2639 - if (!hadSelectionUpdateRef.current) {
2640 - return;
2846 + const [sentStart, sentEnd] = sentSelectionRef.current;
2847 + sentSelectionRef.current = [];
2848 + if (isSelected && (selectionStart !== sentStart || selectionEnd !== sentEnd) && hasFocus(ref.current)) {
2849 + applyRecord(recordRef.current);
2641 2850 }
2642 - if (ref.current.ownerDocument.activeElement !== ref.current) {
2643 - ref.current.focus();
2644 - }
2645 - applyRecord(recordRef.current);
2646 - hadSelectionUpdateRef.current = false;
2647 - }, [hadSelectionUpdateRef.current]);
2648 - const mergedRefs = (0, import_compose2.useMergeRefs)([
2851 + }, [selectionStart, selectionEnd, isSelected]);
2852 + const mergedRefs = (0, import_compose8.useMergeRefs)([
2649 2853 ref,
2650 2854 useDefaultStyle(),
2651 2855 useBoundaryStyle({ record: recordRef }),
2652 2856 useEventListeners({
@@ -2654,15 +2858,20 @@
2654 2858 handleChange,
2655 2859 applyRecord,
2656 2860 createRecord,
2657 2861 isSelected,
2658 - onSelectionChange,
2862 + onSelectionChange: sendSelection,
2659 2863 forceRender
2660 2864 }),
2661 - (0, import_compose2.useRefEffect)(() => {
2662 - applyFromProps();
2663 - didMountRef.current = true;
2664 - }, [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 + )
2665 2874 ]);
2666 2875 return {
2667 2876 value: recordRef.current,
2668 2877 // A function to get the most recent value so event handlers in
@@ -2740,16 +2949,102 @@
2740 2949 });
2741 2950 return useRichTextBase(props);
2742 2951 }
2743 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 +
2744 3031 // packages/rich-text/build-module/private-apis.mjs
2745 3032 var privateApis = {};
2746 3033 lock(privateApis, {
2747 - useRichText
3034 + useRichText,
3035 + KeyboardShortcutContext,
3036 + InputEventContext,
3037 + RichTextShortcut,
3038 + RichTextInputEvent,
3039 + shortcutsListener,
3040 + inputEventsListener,
3041 + ownsSelection,
3042 + subscribeOwnedListener
2748 3043 });
2749 3044
2750 3045 // packages/rich-text/build-module/hook/use-anchor-ref.mjs
2751 - var import_element6 = __toESM(require_element(), 1);
3046 + var import_element9 = __toESM(require_element(), 1);
2752 3047 var import_deprecated2 = __toESM(require_deprecated(), 1);
2753 3048 function useAnchorRef({ ref, value, settings = {} }) {
2754 3049 (0, import_deprecated2.default)("`useAnchorRef` hook", {
2755 3050 since: "6.1",
@@ -2756,9 +3051,9 @@
2756 3051 alternative: "`useAnchor` hook"
2757 3052 });
2758 3053 const { tagName, className, name } = settings;
2759 3054 const activeFormat = name ? getActiveFormat(value, name) : void 0;
2760 - return (0, import_element6.useMemo)(() => {
3055 + return (0, import_element9.useMemo)(() => {
2761 3056 if (!ref.current) {
2762 3057 return;
2763 3058 }
2764 3059 const {
@@ -2783,10 +3078,10 @@
2783 3078 }, [activeFormat, value.start, value.end, tagName, className]);
2784 3079 }
2785 3080
2786 3081 // packages/rich-text/build-module/hook/use-anchor.mjs
2787 - var import_compose3 = __toESM(require_compose(), 1);
2788 - var import_element7 = __toESM(require_element(), 1);
3082 + var import_compose11 = __toESM(require_compose(), 1);
3083 + var import_element10 = __toESM(require_element(), 1);
2789 3084 var import_dom = __toESM(require_dom(), 1);
2790 3085 function getFormatElement(range, editableContentElement, tagName, className) {
2791 3086 let element = range.startContainer;
2792 3087 if (element.nodeType === element.TEXT_NODE && element instanceof window.Text && range.startOffset === element.length && element.nextSibling) {
@@ -2865,13 +3160,13 @@
2865 3160 settings
2866 3161 }) {
2867 3162 const { tagName, className } = settings ?? DEFAULT_SETTINGS;
2868 3163 const isActive = !!(settings && "isActive" in settings && settings.isActive);
2869 - const [anchor, setAnchor] = (0, import_element7.useState)(
3164 + const [anchor, setAnchor] = (0, import_element10.useState)(
2870 3165 () => getAnchor(editableContentElement, tagName, className ?? "")
2871 3166 );
2872 - const wasActive = (0, import_compose3.usePrevious)(isActive);
2873 - (0, import_element7.useLayoutEffect)(() => {
3167 + const wasActive = (0, import_compose11.usePrevious)(isActive);
3168 + (0, import_element10.useLayoutEffect)(() => {
2874 3169 if (!editableContentElement) {
2875 3170 return;
2876 3171 }
2877 3172 function callback() {
@@ -2885,9 +3180,9 @@
2885 3180 function detach() {
2886 3181 ownerDocument.removeEventListener("selectionchange", callback);
2887 3182 }
2888 3183 const { ownerDocument } = editableContentElement;
2889 - 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.
2890 3185 !wasActive && isActive || // Sometimes we're _removing_ an active anchor, such as the inline color popover.
2891 3186 // When we add the color, it switches from a virtual anchor to a `<mark>` element.
2892 3187 // When we _remove_ the color, it switches from a `<mark>` element to a virtual anchor.
2893 3188 wasActive && !isActive) {
@@ -2910,6 +3205,8 @@
2910 3205 // packages/rich-text/build-module/index.mjs
2911 3206 function __experimentalRichText() {
2912 3207 }
2913 3208 return __toCommonJS(index_exports);
3209 +})();
3210 +(window.wp ||= {}).richText = wp.richText;
2914 3211 })();
2915 3212 //# sourceMappingURL=index.js.map