UNPKG

@wordpress/dom

Version:
103 lines (102 loc) 4.7 kB
"use strict"; var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( // If the importer is in node compatibility mode or this is not an ESM // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var is_edge_exports = {}; __export(is_edge_exports, { default: () => isEdge }); module.exports = __toCommonJS(is_edge_exports); var import_is_rtl = __toESM(require("./is-rtl")); var import_get_range_height = __toESM(require("./get-range-height")); var import_get_rectangle_from_range = __toESM(require("./get-rectangle-from-range")); var import_is_selection_forward = __toESM(require("./is-selection-forward")); var import_hidden_caret_range_from_point = __toESM(require("./hidden-caret-range-from-point")); var import_assert_is_defined = require("../utils/assert-is-defined"); var import_is_input_or_text_area = __toESM(require("./is-input-or-text-area")); var import_scroll_if_no_range = require("./scroll-if-no-range"); function isEdge(container, isReverse, onlyVertical = false) { if ((0, import_is_input_or_text_area.default)(container) && typeof container.selectionStart === "number") { if (container.selectionStart !== container.selectionEnd) { return false; } if (isReverse) { return container.selectionStart === 0; } return container.value.length === container.selectionStart; } if (!container.isContentEditable) { return true; } const { ownerDocument } = container; const { defaultView } = ownerDocument; (0, import_assert_is_defined.assertIsDefined)(defaultView, "defaultView"); const selection = defaultView.getSelection(); if (!selection || !selection.rangeCount) { return false; } const range = selection.getRangeAt(0); const collapsedRange = range.cloneRange(); const isForward = (0, import_is_selection_forward.default)(selection); const isCollapsed = selection.isCollapsed; if (!isCollapsed) { collapsedRange.collapse(!isForward); } const collapsedRangeRect = (0, import_get_rectangle_from_range.default)(collapsedRange); const rangeRect = (0, import_get_rectangle_from_range.default)(range); if (!collapsedRangeRect || !rangeRect) { return false; } const rangeHeight = (0, import_get_range_height.default)(range); if (!isCollapsed && rangeHeight && rangeHeight > collapsedRangeRect.height && isForward === isReverse) { return false; } const isReverseDir = (0, import_is_rtl.default)(container) ? !isReverse : isReverse; const containerRect = container.getBoundingClientRect(); const x = isReverseDir ? containerRect.left + 1 : containerRect.right - 1; const y = isReverse ? containerRect.top + 1 : containerRect.bottom - 1; const testRange = (0, import_scroll_if_no_range.scrollIfNoRange)( container, isReverse, () => (0, import_hidden_caret_range_from_point.default)(ownerDocument, x, y, container) ); if (!testRange) { return false; } const testRect = (0, import_get_rectangle_from_range.default)(testRange); if (!testRect) { return false; } const verticalSide = isReverse ? "top" : "bottom"; const horizontalSide = isReverseDir ? "left" : "right"; const verticalDiff = testRect[verticalSide] - rangeRect[verticalSide]; const horizontalDiff = testRect[horizontalSide] - collapsedRangeRect[horizontalSide]; const hasVerticalDiff = Math.abs(verticalDiff) <= 1; const hasHorizontalDiff = Math.abs(horizontalDiff) <= 1; return onlyVertical ? hasVerticalDiff : hasVerticalDiff && hasHorizontalDiff; } //# sourceMappingURL=is-edge.js.map