UNPKG

@wordpress/block-editor

Version:
182 lines (180 loc) 5.87 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; 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 __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // packages/block-editor/src/components/grid/utils.js var utils_exports = {}; __export(utils_exports, { GridRect: () => GridRect, getClosestTrack: () => getClosestTrack, getComputedCSS: () => getComputedCSS, getGridInfo: () => getGridInfo, getGridItemRect: () => getGridItemRect, getGridRect: () => getGridRect, getGridTracks: () => getGridTracks, range: () => range }); module.exports = __toCommonJS(utils_exports); function range(start, length) { return Array.from({ length }, (_, i) => start + i); } var GridRect = class { constructor({ columnStart, rowStart, columnEnd, rowEnd, columnSpan, rowSpan } = {}) { this.columnStart = columnStart ?? 1; this.rowStart = rowStart ?? 1; if (columnSpan !== void 0) { this.columnEnd = this.columnStart + columnSpan - 1; } else { this.columnEnd = columnEnd ?? this.columnStart; } if (rowSpan !== void 0) { this.rowEnd = this.rowStart + rowSpan - 1; } else { this.rowEnd = rowEnd ?? this.rowStart; } } get columnSpan() { return this.columnEnd - this.columnStart + 1; } get rowSpan() { return this.rowEnd - this.rowStart + 1; } contains(column, row) { return column >= this.columnStart && column <= this.columnEnd && row >= this.rowStart && row <= this.rowEnd; } containsRect(rect) { return this.contains(rect.columnStart, rect.rowStart) && this.contains(rect.columnEnd, rect.rowEnd); } intersectsRect(rect) { return this.columnStart <= rect.columnEnd && this.columnEnd >= rect.columnStart && this.rowStart <= rect.rowEnd && this.rowEnd >= rect.rowStart; } }; function getComputedCSS(element, property) { return element.ownerDocument.defaultView.getComputedStyle(element).getPropertyValue(property); } function getGridTracks(template, gap) { const tracks = []; for (const size of template.split(" ")) { const previousTrack = tracks[tracks.length - 1]; const start = previousTrack ? previousTrack.end + gap : 0; const end = start + parseFloat(size); tracks.push({ start, end }); } return tracks; } function getClosestTrack(tracks, position, edge = "start") { return tracks.reduce( (closest, track, index) => Math.abs(track[edge] - position) < Math.abs(tracks[closest][edge] - position) ? index : closest, 0 ); } function getGridRect(gridElement, rect) { const columnGap = parseFloat(getComputedCSS(gridElement, "column-gap")); const rowGap = parseFloat(getComputedCSS(gridElement, "row-gap")); const gridColumnTracks = getGridTracks( getComputedCSS(gridElement, "grid-template-columns"), columnGap ); const gridRowTracks = getGridTracks( getComputedCSS(gridElement, "grid-template-rows"), rowGap ); const columnStart = getClosestTrack(gridColumnTracks, rect.left) + 1; const rowStart = getClosestTrack(gridRowTracks, rect.top) + 1; const columnEnd = getClosestTrack(gridColumnTracks, rect.right, "end") + 1; const rowEnd = getClosestTrack(gridRowTracks, rect.bottom, "end") + 1; return new GridRect({ columnStart, columnEnd, rowStart, rowEnd }); } function getGridItemRect(gridItemElement) { return getGridRect( gridItemElement.parentElement, new window.DOMRect( gridItemElement.offsetLeft, gridItemElement.offsetTop, gridItemElement.offsetWidth, gridItemElement.offsetHeight ) ); } function getGridInfo(gridElement) { const gridTemplateColumns = getComputedCSS( gridElement, "grid-template-columns" ); const gridTemplateRows = getComputedCSS( gridElement, "grid-template-rows" ); const borderTopWidth = getComputedCSS(gridElement, "border-top-width"); const borderRightWidth = getComputedCSS( gridElement, "border-right-width" ); const borderBottomWidth = getComputedCSS( gridElement, "border-bottom-width" ); const borderLeftWidth = getComputedCSS(gridElement, "border-left-width"); const paddingTop = getComputedCSS(gridElement, "padding-top"); const paddingRight = getComputedCSS(gridElement, "padding-right"); const paddingBottom = getComputedCSS(gridElement, "padding-bottom"); const paddingLeft = getComputedCSS(gridElement, "padding-left"); const numColumns = gridTemplateColumns.split(" ").length; const numRows = gridTemplateRows.split(" ").length; const numItems = numColumns * numRows; return { numColumns, numRows, numItems, currentColor: getComputedCSS(gridElement, "color"), style: { gridTemplateColumns, gridTemplateRows, gap: getComputedCSS(gridElement, "gap"), inset: ` calc(${paddingTop} + ${borderTopWidth}) calc(${paddingRight} + ${borderRightWidth}) calc(${paddingBottom} + ${borderBottomWidth}) calc(${paddingLeft} + ${borderLeftWidth}) ` } }; } // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { GridRect, getClosestTrack, getComputedCSS, getGridInfo, getGridItemRect, getGridRect, getGridTracks, range }); //# sourceMappingURL=utils.js.map