PluginProbe
Gutenberg / 24.1.0
Gutenberg v24.1.0
24.1.0 24.0.0 23.9.1 23.9.0 23.8.0 23.7.2 23.7.1 23.7.0 23.6.1 23.6.2 23.6.0 23.5.3 23.5.2 23.5.1 23.5.0 23.4.0 23.3.2 23.3.1 23.3.0 23.2.0 23.2.1 23.2.2 23.1.1 23.1.0 23.0.1 All 404 releases
← All changes | build/scripts/rich-text/index.js +333 -253 23.6.2 → 24.1.0 View file →
@@ -1,4 +1,5 @@
1 +(function() {
1 2 "use strict";
2 3 var wp;
3 4 (wp ||= {}).richText = (() => {
4 5 var __create = Object.create;
@@ -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