diff -r 7b1b88e27a20 -r 48c4eec2b7e6 wp/wp-includes/js/dist/dom.js --- a/wp/wp-includes/js/dist/dom.js Thu Sep 29 08:06:27 2022 +0200 +++ b/wp/wp-includes/js/dist/dom.js Fri Sep 05 18:40:08 2025 +0200 @@ -1,36 +1,48 @@ -/******/ (function() { // webpackBootstrap +/******/ (() => { // webpackBootstrap /******/ "use strict"; /******/ // The require scope /******/ var __webpack_require__ = {}; /******/ /************************************************************************/ +/******/ /* webpack/runtime/compat get default export */ +/******/ (() => { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = (module) => { +/******/ var getter = module && module.__esModule ? +/******/ () => (module['default']) : +/******/ () => (module); +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ })(); +/******/ /******/ /* webpack/runtime/define property getters */ -/******/ !function() { +/******/ (() => { /******/ // define getter functions for harmony exports -/******/ __webpack_require__.d = function(exports, definition) { +/******/ __webpack_require__.d = (exports, definition) => { /******/ for(var key in definition) { /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); /******/ } /******/ } /******/ }; -/******/ }(); +/******/ })(); /******/ /******/ /* webpack/runtime/hasOwnProperty shorthand */ -/******/ !function() { -/******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } -/******/ }(); +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); /******/ /******/ /* webpack/runtime/make namespace object */ -/******/ !function() { +/******/ (() => { /******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { +/******/ __webpack_require__.r = (exports) => { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; -/******/ }(); +/******/ })(); /******/ /************************************************************************/ var __webpack_exports__ = {}; @@ -39,54 +51,54 @@ // EXPORTS __webpack_require__.d(__webpack_exports__, { - "__unstableStripHTML": function() { return /* reexport */ stripHTML; }, - "computeCaretRect": function() { return /* reexport */ computeCaretRect; }, - "documentHasSelection": function() { return /* reexport */ documentHasSelection; }, - "documentHasTextSelection": function() { return /* reexport */ documentHasTextSelection; }, - "documentHasUncollapsedSelection": function() { return /* reexport */ documentHasUncollapsedSelection; }, - "focus": function() { return /* binding */ build_module_focus; }, - "getFilesFromDataTransfer": function() { return /* reexport */ getFilesFromDataTransfer; }, - "getOffsetParent": function() { return /* reexport */ getOffsetParent; }, - "getPhrasingContentSchema": function() { return /* reexport */ getPhrasingContentSchema; }, - "getRectangleFromRange": function() { return /* reexport */ getRectangleFromRange; }, - "getScrollContainer": function() { return /* reexport */ getScrollContainer; }, - "insertAfter": function() { return /* reexport */ insertAfter; }, - "isEmpty": function() { return /* reexport */ isEmpty; }, - "isEntirelySelected": function() { return /* reexport */ isEntirelySelected; }, - "isFormElement": function() { return /* reexport */ isFormElement; }, - "isHorizontalEdge": function() { return /* reexport */ isHorizontalEdge; }, - "isNumberInput": function() { return /* reexport */ isNumberInput; }, - "isPhrasingContent": function() { return /* reexport */ isPhrasingContent; }, - "isRTL": function() { return /* reexport */ isRTL; }, - "isTextContent": function() { return /* reexport */ isTextContent; }, - "isTextField": function() { return /* reexport */ isTextField; }, - "isVerticalEdge": function() { return /* reexport */ isVerticalEdge; }, - "placeCaretAtHorizontalEdge": function() { return /* reexport */ placeCaretAtHorizontalEdge; }, - "placeCaretAtVerticalEdge": function() { return /* reexport */ placeCaretAtVerticalEdge; }, - "remove": function() { return /* reexport */ remove; }, - "removeInvalidHTML": function() { return /* reexport */ removeInvalidHTML; }, - "replace": function() { return /* reexport */ replace; }, - "replaceTag": function() { return /* reexport */ replaceTag; }, - "safeHTML": function() { return /* reexport */ safeHTML; }, - "unwrap": function() { return /* reexport */ unwrap; }, - "wrap": function() { return /* reexport */ wrap; } + __unstableStripHTML: () => (/* reexport */ stripHTML), + computeCaretRect: () => (/* reexport */ computeCaretRect), + documentHasSelection: () => (/* reexport */ documentHasSelection), + documentHasTextSelection: () => (/* reexport */ documentHasTextSelection), + documentHasUncollapsedSelection: () => (/* reexport */ documentHasUncollapsedSelection), + focus: () => (/* binding */ build_module_focus), + getFilesFromDataTransfer: () => (/* reexport */ getFilesFromDataTransfer), + getOffsetParent: () => (/* reexport */ getOffsetParent), + getPhrasingContentSchema: () => (/* reexport */ getPhrasingContentSchema), + getRectangleFromRange: () => (/* reexport */ getRectangleFromRange), + getScrollContainer: () => (/* reexport */ getScrollContainer), + insertAfter: () => (/* reexport */ insertAfter), + isEmpty: () => (/* reexport */ isEmpty), + isEntirelySelected: () => (/* reexport */ isEntirelySelected), + isFormElement: () => (/* reexport */ isFormElement), + isHorizontalEdge: () => (/* reexport */ isHorizontalEdge), + isNumberInput: () => (/* reexport */ isNumberInput), + isPhrasingContent: () => (/* reexport */ isPhrasingContent), + isRTL: () => (/* reexport */ isRTL), + isTextContent: () => (/* reexport */ isTextContent), + isTextField: () => (/* reexport */ isTextField), + isVerticalEdge: () => (/* reexport */ isVerticalEdge), + placeCaretAtHorizontalEdge: () => (/* reexport */ placeCaretAtHorizontalEdge), + placeCaretAtVerticalEdge: () => (/* reexport */ placeCaretAtVerticalEdge), + remove: () => (/* reexport */ remove), + removeInvalidHTML: () => (/* reexport */ removeInvalidHTML), + replace: () => (/* reexport */ replace), + replaceTag: () => (/* reexport */ replaceTag), + safeHTML: () => (/* reexport */ safeHTML), + unwrap: () => (/* reexport */ unwrap), + wrap: () => (/* reexport */ wrap) }); // NAMESPACE OBJECT: ./node_modules/@wordpress/dom/build-module/focusable.js var focusable_namespaceObject = {}; __webpack_require__.r(focusable_namespaceObject); __webpack_require__.d(focusable_namespaceObject, { - "find": function() { return find; } + find: () => (find) }); // NAMESPACE OBJECT: ./node_modules/@wordpress/dom/build-module/tabbable.js var tabbable_namespaceObject = {}; __webpack_require__.r(tabbable_namespaceObject); __webpack_require__.d(tabbable_namespaceObject, { - "find": function() { return tabbable_find; }, - "findNext": function() { return findNext; }, - "findPrevious": function() { return findPrevious; }, - "isTabbableIndex": function() { return isTabbableIndex; } + find: () => (tabbable_find), + findNext: () => (findNext), + findPrevious: () => (findPrevious), + isTabbableIndex: () => (isTabbableIndex) }); ;// CONCATENATED MODULE: ./node_modules/@wordpress/dom/build-module/focusable.js @@ -123,6 +135,7 @@ function buildSelector(sequential) { return [sequential ? '[tabindex]:not([tabindex^="-"])' : '[tabindex]', 'a[href]', 'button:not([disabled])', 'input:not([type="hidden"]):not([disabled])', 'select:not([disabled])', 'textarea:not([disabled])', 'iframe:not([tabindex^="-"])', 'object', 'embed', 'area[href]', '[contenteditable]:not([contenteditable=false])'].join(','); } + /** * Returns true if the specified element is visible (i.e. neither display: none * nor visibility: hidden). @@ -131,11 +144,10 @@ * * @return {boolean} Whether element is visible. */ - - function isVisible(element) { return element.offsetWidth > 0 || element.offsetHeight > 0 || element.getClientRects().length > 0; } + /** * Returns true if the specified area element is a valid focusable element, or * false otherwise. Area is only focusable if within a map where a named map @@ -145,26 +157,23 @@ * * @return {boolean} Whether area element is valid for focus. */ - - function isValidFocusableArea(element) { /** @type {HTMLMapElement | null} */ const map = element.closest('map[name]'); - if (!map) { return false; } + /** @type {HTMLImageElement | null} */ - - const img = element.ownerDocument.querySelector('img[usemap="#' + map.name + '"]'); return !!img && isVisible(img); } + /** * Returns all focusable elements within a given context. * * @param {Element} context Element in which to search. - * @param {Object} [options] + * @param {Object} options * @param {boolean} [options.sequential] If set, only return elements that are * sequentially focusable. * Non-interactive elements with a @@ -172,48 +181,29 @@ * not sequentially focusable. * https://html.spec.whatwg.org/multipage/interaction.html#the-tabindex-attribute * - * @return {Element[]} Focusable elements. + * @return {HTMLElement[]} Focusable elements. */ - - -function find(context) { - let { - sequential = false - } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - /* eslint-disable jsdoc/no-undefined-types */ - +function find(context, { + sequential = false +} = {}) { /** @type {NodeListOf} */ - - /* eslint-enable jsdoc/no-undefined-types */ const elements = context.querySelectorAll(buildSelector(sequential)); return Array.from(elements).filter(element => { if (!isVisible(element)) { return false; } - const { nodeName } = element; - if ('AREA' === nodeName) { - return isValidFocusableArea( - /** @type {HTMLAreaElement} */ - element); + return isValidFocusableArea( /** @type {HTMLAreaElement} */element); } - return true; }); } -;// CONCATENATED MODULE: external "lodash" -var external_lodash_namespaceObject = window["lodash"]; ;// CONCATENATED MODULE: ./node_modules/@wordpress/dom/build-module/tabbable.js /** - * External dependencies - */ - -/** * Internal dependencies */ @@ -230,11 +220,11 @@ * * @return {number} Tab index of element (default 0). */ - function getTabIndex(element) { const tabIndex = element.getAttribute('tabindex'); return tabIndex === null ? 0 : parseInt(tabIndex, 10); } + /** * Returns true if the specified element is tabbable, or false otherwise. * @@ -242,12 +232,11 @@ * * @return {boolean} Whether element is tabbable. */ - - function isTabbableIndex(element) { return getTabIndex(element) !== -1; } -/** @typedef {Element & { type?: string, checked?: boolean, name?: string }} MaybeHTMLInputElement */ + +/** @typedef {HTMLElement & { type?: string, checked?: boolean, name?: string }} MaybeHTMLInputElement */ /** * Returns a stateful reducer function which constructs a filtered array of @@ -257,155 +246,135 @@ * * @return {(acc: MaybeHTMLInputElement[], el: MaybeHTMLInputElement) => MaybeHTMLInputElement[]} Radio group collapse reducer. */ - function createStatefulCollapseRadioGroup() { /** @type {Record} */ const CHOSEN_RADIO_BY_NAME = {}; - return function collapseRadioGroup( - /** @type {MaybeHTMLInputElement[]} */ - result, - /** @type {MaybeHTMLInputElement} */ - element) { + return function collapseRadioGroup( /** @type {MaybeHTMLInputElement[]} */result, /** @type {MaybeHTMLInputElement} */element) { const { nodeName, type, checked, name - } = element; // For all non-radio tabbables, construct to array by concatenating. + } = element; + // For all non-radio tabbables, construct to array by concatenating. if (nodeName !== 'INPUT' || type !== 'radio' || !name) { return result.concat(element); } - - const hasChosen = CHOSEN_RADIO_BY_NAME.hasOwnProperty(name); // Omit by skipping concatenation if the radio element is not chosen. + const hasChosen = CHOSEN_RADIO_BY_NAME.hasOwnProperty(name); + // Omit by skipping concatenation if the radio element is not chosen. const isChosen = checked || !hasChosen; - if (!isChosen) { return result; - } // At this point, if there had been a chosen element, the current + } + + // At this point, if there had been a chosen element, the current // element is checked and should take priority. Retroactively remove // the element which had previously been considered the chosen one. - - if (hasChosen) { const hadChosenElement = CHOSEN_RADIO_BY_NAME[name]; - result = (0,external_lodash_namespaceObject.without)(result, hadChosenElement); + result = result.filter(e => e !== hadChosenElement); } - CHOSEN_RADIO_BY_NAME[name] = element; return result.concat(element); }; } + /** * An array map callback, returning an object with the element value and its * array index location as properties. This is used to emulate a proper stable * sort where equal tabIndex should be left in order of their occurrence in the * document. * - * @param {Element} element Element. - * @param {number} index Array index of element. + * @param {HTMLElement} element Element. + * @param {number} index Array index of element. * - * @return {{ element: Element, index: number }} Mapped object with element, index. + * @return {{ element: HTMLElement, index: number }} Mapped object with element, index. */ - - function mapElementToObjectTabbable(element, index) { return { element, index }; } + /** * An array map callback, returning an element of the given mapped object's * element value. * - * @param {{ element: Element }} object Mapped object with element. + * @param {{ element: HTMLElement }} object Mapped object with element. * - * @return {Element} Mapped object element. + * @return {HTMLElement} Mapped object element. */ - - function mapObjectTabbableToElement(object) { return object.element; } + /** * A sort comparator function used in comparing two objects of mapped elements. * * @see mapElementToObjectTabbable * - * @param {{ element: Element, index: number }} a First object to compare. - * @param {{ element: Element, index: number }} b Second object to compare. + * @param {{ element: HTMLElement, index: number }} a First object to compare. + * @param {{ element: HTMLElement, index: number }} b Second object to compare. * * @return {number} Comparator result. */ - - function compareObjectTabbables(a, b) { const aTabIndex = getTabIndex(a.element); const bTabIndex = getTabIndex(b.element); - if (aTabIndex === bTabIndex) { return a.index - b.index; } - return aTabIndex - bTabIndex; } + /** * Givin focusable elements, filters out tabbable element. * - * @param {Element[]} focusables Focusable elements to filter. + * @param {HTMLElement[]} focusables Focusable elements to filter. * - * @return {Element[]} Tabbable elements. + * @return {HTMLElement[]} Tabbable elements. */ - - function filterTabbable(focusables) { return focusables.filter(isTabbableIndex).map(mapElementToObjectTabbable).sort(compareObjectTabbables).map(mapObjectTabbableToElement).reduce(createStatefulCollapseRadioGroup(), []); } + /** * @param {Element} context - * @return {Element[]} Tabbable elements within the context. + * @return {HTMLElement[]} Tabbable elements within the context. */ - - function tabbable_find(context) { return filterTabbable(find(context)); } + /** * Given a focusable element, find the preceding tabbable element. * * @param {Element} element The focusable element before which to look. Defaults * to the active element. * - * @return {Element|undefined} Preceding tabbable element. + * @return {HTMLElement|undefined} Preceding tabbable element. */ - function findPrevious(element) { - const focusables = find(element.ownerDocument.body); - const index = focusables.indexOf(element); + return filterTabbable(find(element.ownerDocument.body)).reverse().find(focusable => + // eslint-disable-next-line no-bitwise + element.compareDocumentPosition(focusable) & element.DOCUMENT_POSITION_PRECEDING); +} - if (index === -1) { - return undefined; - } // Remove all focusables after and including `element`. - - - focusables.length = index; - return (0,external_lodash_namespaceObject.last)(filterTabbable(focusables)); -} /** * Given a focusable element, find the next tabbable element. * * @param {Element} element The focusable element after which to look. Defaults * to the active element. + * + * @return {HTMLElement|undefined} Next tabbable element. */ - function findNext(element) { - const focusables = find(element.ownerDocument.body); - const index = focusables.indexOf(element); // Remove all focusables before and including `element`. - - const remaining = focusables.slice(index + 1); - return (0,external_lodash_namespaceObject.first)(filterTabbable(remaining)); + return filterTabbable(find(element.ownerDocument.body)).find(focusable => + // eslint-disable-next-line no-bitwise + element.compareDocumentPosition(focusable) & element.DOCUMENT_POSITION_FOLLOWING); } ;// CONCATENATED MODULE: ./node_modules/@wordpress/dom/build-module/utils/assert-is-defined.js @@ -418,101 +387,109 @@ * Internal dependencies */ + /** - * Get the rectangle of a given Range. + * Get the rectangle of a given Range. Returns `null` if no suitable rectangle + * can be found. * * @param {Range} range The range. * - * @return {DOMRect} The rectangle. + * @return {DOMRect?} The rectangle. */ - function getRectangleFromRange(range) { // For uncollapsed ranges, get the rectangle that bounds the contents of the // range; this a rectangle enclosing the union of the bounding rectangles // for all the elements in the range. if (!range.collapsed) { - const rects = Array.from(range.getClientRects()); // If there's just a single rect, return it. + const rects = Array.from(range.getClientRects()); + // If there's just a single rect, return it. if (rects.length === 1) { return rects[0]; - } // Ignore tiny selection at the edge of a range. - + } - const filteredRects = rects.filter(_ref => { - let { - width - } = _ref; - return width > 1; - }); // If it's full of tiny selections, return browser default. + // Ignore tiny selection at the edge of a range. + const filteredRects = rects.filter(({ + width + }) => width > 1); + // If it's full of tiny selections, return browser default. if (filteredRects.length === 0) { return range.getBoundingClientRect(); } - if (filteredRects.length === 1) { return filteredRects[0]; } - let { top: furthestTop, bottom: furthestBottom, left: furthestLeft, right: furthestRight } = filteredRects[0]; - for (const { top, bottom, left, right } of filteredRects) { - if (top < furthestTop) furthestTop = top; - if (bottom > furthestBottom) furthestBottom = bottom; - if (left < furthestLeft) furthestLeft = left; - if (right > furthestRight) furthestRight = right; + if (top < furthestTop) { + furthestTop = top; + } + if (bottom > furthestBottom) { + furthestBottom = bottom; + } + if (left < furthestLeft) { + furthestLeft = left; + } + if (right > furthestRight) { + furthestRight = right; + } } - return new window.DOMRect(furthestLeft, furthestTop, furthestRight - furthestLeft, furthestBottom - furthestTop); } - const { startContainer } = range; const { ownerDocument - } = startContainer; // Correct invalid "BR" ranges. The cannot contain any children. + } = startContainer; + // Correct invalid "BR" ranges. The cannot contain any children. if (startContainer.nodeName === 'BR') { const { parentNode } = startContainer; assertIsDefined(parentNode, 'parentNode'); - const index = - /** @type {Node[]} */ - Array.from(parentNode.childNodes).indexOf(startContainer); + const index = /** @type {Node[]} */Array.from(parentNode.childNodes).indexOf(startContainer); assertIsDefined(ownerDocument, 'ownerDocument'); range = ownerDocument.createRange(); range.setStart(parentNode, index); range.setEnd(parentNode, index); } + const rects = range.getClientRects(); - let rect = range.getClientRects()[0]; // If the collapsed range starts (and therefore ends) at an element node, + // If we have multiple rectangles for a collapsed range, there's no way to + // know which it is, so don't return anything. + if (rects.length > 1) { + return null; + } + let rect = rects[0]; + + // If the collapsed range starts (and therefore ends) at an element node, // `getClientRects` can be empty in some browsers. This can be resolved // by adding a temporary text node with zero-width space to the range. // // See: https://stackoverflow.com/a/6847328/995445 - - if (!rect) { + if (!rect || rect.height === 0) { assertIsDefined(ownerDocument, 'ownerDocument'); - const padNode = ownerDocument.createTextNode('\u200b'); // Do not modify the live range. - + const padNode = ownerDocument.createTextNode('\u200b'); + // Do not modify the live range. range = range.cloneRange(); range.insertNode(padNode); rect = range.getClientRects()[0]; assertIsDefined(padNode.parentNode, 'padNode.parentNode'); padNode.parentNode.removeChild(padNode); } - return rect; } @@ -522,6 +499,7 @@ */ + /** * Get the rectangle for the selection in a container. * @@ -529,16 +507,13 @@ * * @return {DOMRect | null} The rectangle. */ - function computeCaretRect(win) { const selection = win.getSelection(); assertIsDefined(selection, 'selection'); const range = selection.rangeCount ? selection.getRangeAt(0) : null; - if (!range) { return null; } - return getRectangleFromRange(range); } @@ -547,6 +522,7 @@ * Internal dependencies */ + /** * Check whether the current document has selected text. This applies to ranges * of text in the document, and not selection inside `` and `