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