1 line
46 KiB
Plaintext
1 line
46 KiB
Plaintext
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * utils.ts 12.6.0\n * Copyright (c) 2021-2025 Alain Dumesny - see GridStack root license\n */\n\nimport { GridStackElement, GridStackNode, numberOrString, GridStackPosition, GridStackWidget } from './types';\n\nexport interface HeightData {\n h: number;\n unit: string;\n}\n\nexport interface DragTransform {\n xScale: number;\n yScale: number;\n xOffset: number;\n yOffset: number;\n}\n\n// /**\n// * Checks for obsolete method names and provides deprecation warnings.\n// * Creates a wrapper function that logs a deprecation warning when called.\n// *\n// * @param self the object context to apply the function to\n// * @param f the new function to call\n// * @param oldName the deprecated method name\n// * @param newName the new method name to use instead\n// * @param rev the version when the deprecation was introduced\n// * @returns a wrapper function that warns about deprecation\n// */\n// eslint-disable-next-line\n// export function obsolete(self, f, oldName: string, newName: string, rev: string): (...args: any[]) => any {\n// const wrapper = (...args) => {\n// console.warn('gridstack.js: Function `' + oldName + '` is deprecated in ' + rev + ' and has been replaced ' +\n// 'with `' + newName + '`. It will be **removed** in a future release');\n// return f.apply(self, args);\n// }\n// wrapper.prototype = f.prototype;\n// return wrapper;\n// }\n\n// /**\n// * Checks for obsolete grid options and migrates them to new names.\n// * Automatically copies old option values to new option names and shows deprecation warnings.\n// *\n// * @param opts the options object to check and migrate\n// * @param oldName the deprecated option name\n// * @param newName the new option name to use instead\n// * @param rev the version when the deprecation was introduced\n// */\n// export function obsoleteOpts(opts: GridStackOptions, oldName: string, newName: string, rev: string): void {\n// if (opts[oldName] !== undefined) {\n// opts[newName] = opts[oldName];\n// console.warn('gridstack.js: Option `' + oldName + '` is deprecated in ' + rev + ' and has been replaced with `' +\n// newName + '`. It will be **removed** in a future release');\n// }\n// }\n\n// /**\n// * Checks for obsolete grid options that have been completely removed.\n// * Shows deprecation warnings for options that are no longer supported.\n// *\n// * @param opts the options object to check\n// * @param oldName the removed option name\n// * @param rev the version when the option was removed\n// * @param info additional information about the removal\n// */\n// export function obsoleteOptsDel(opts: GridStackOptions, oldName: string, rev: string, info: string): void {\n// if (opts[oldName] !== undefined) {\n// console.warn('gridstack.js: Option `' + oldName + '` is deprecated in ' + rev + info);\n// }\n// }\n\n// /**\n// * Checks for obsolete HTML element attributes and migrates them.\n// * Automatically copies old attribute values to new attribute names and shows deprecation warnings.\n// *\n// * @param el the HTML element to check and migrate\n// * @param oldName the deprecated attribute name\n// * @param newName the new attribute name to use instead\n// * @param rev the version when the deprecation was introduced\n// */\n// export function obsoleteAttr(el: HTMLElement, oldName: string, newName: string, rev: string): void {\n// const oldAttr = el.getAttribute(oldName);\n// if (oldAttr !== null) {\n// el.setAttribute(newName, oldAttr);\n// console.warn('gridstack.js: attribute `' + oldName + '`=' + oldAttr + ' is deprecated on this object in ' + rev + ' and has been replaced with `' +\n// newName + '`. It will be **removed** in a future release');\n// }\n// }\n\n/**\n * Collection of utility methods used throughout GridStack.\n * These are general-purpose helper functions for DOM manipulation,\n * positioning calculations, object operations, and more.\n */\nexport class Utils {\n\n /**\n * Convert a potential selector into an actual list of HTML elements.\n * Supports CSS selectors, element references, and special ID handling.\n *\n * @param els selector string, HTMLElement, or array of elements\n * @param root optional root element to search within (defaults to document, useful for shadow DOM)\n * @returns array of HTML elements matching the selector\n *\n * @example\n * const elements = Utils.getElements('.grid-item');\n * const byId = Utils.getElements('#myWidget');\n * const fromShadow = Utils.getElements('.item', shadowRoot);\n */\n static getElements(els: GridStackElement, root: HTMLElement | Document = document): HTMLElement[] {\n if (typeof els === 'string') {\n const doc = ('getElementById' in root) ? root as Document : undefined;\n\n // Note: very common for people use to id='1,2,3' which is only legal as HTML5 id, but not CSS selectors\n // so if we start with a number, assume it's an id and just return that one item...\n // see https://github.com/gridstack/gridstack.js/issues/2234#issuecomment-1523796562\n if (doc && !isNaN(+els[0])) { // start with digit\n const el = doc.getElementById(els);\n return el ? [el] : [];\n }\n\n let list = root.querySelectorAll(els);\n if (!list.length && els[0] !== '.' && els[0] !== '#') {\n // see if mean to be a class\n list = root.querySelectorAll('.' + els);\n\n // else if mean to be an id\n if (!list.length) list = root.querySelectorAll('#' + els);\n\n // else see if gs-id attribute\n if (!list.length) {\n const el = root.querySelector<HTMLElement>(`[gs-id=\"${els}\"]`);\n return el ? [el] : [];\n }\n }\n return Array.from(list) as HTMLElement[];\n }\n return [els];\n }\n\n /**\n * Convert a potential selector into a single HTML element.\n * Similar to getElements() but returns only the first match.\n *\n * @param els selector string or HTMLElement\n * @param root optional root element to search within (defaults to document)\n * @returns the first HTML element matching the selector, or null if not found\n *\n * @example\n * const element = Utils.getElement('#myWidget');\n * const first = Utils.getElement('.grid-item');\n */\n static getElement(els: GridStackElement, root: HTMLElement | Document = document): HTMLElement {\n if (typeof els === 'string') {\n const doc = ('getElementById' in root) ? root as Document : undefined;\n if (!els.length) return null;\n if (doc && els[0] === '#') {\n return doc.getElementById(els.substring(1));\n }\n if (els[0] === '#' || els[0] === '.' || els[0] === '[') {\n return root.querySelector(els);\n }\n\n // if we start with a digit, assume it's an id (error calling querySelector('#1')) as class are not valid CSS\n if (doc && !isNaN(+els[0])) { // start with digit\n return doc.getElementById(els);\n }\n\n // finally try string, then id, then class\n let el = root.querySelector(els);\n if (doc && !el) { el = doc.getElementById(els) }\n if (!el) { el = root.querySelector('.' + els) }\n return el as HTMLElement;\n }\n return els;\n }\n\n /**\n * Check if a widget should be lazy loaded based on node or grid settings.\n *\n * @param n the grid node to check\n * @returns true if the item should be lazy loaded\n *\n * @example\n * if (Utils.lazyLoad(node)) {\n * // Set up intersection observer for lazy loading\n * }\n */\n static lazyLoad(n: GridStackNode): boolean {\n return n.lazyLoad || n.grid?.opts?.lazyLoad && n.lazyLoad !== false;\n }\n\n /**\n * Create a div element with the specified CSS classes.\n *\n * @param classes array of CSS class names to add\n * @param parent optional parent element to append the div to\n * @returns the created div element\n *\n * @example\n * const div = Utils.createDiv(['grid-item', 'draggable']);\n * const nested = Utils.createDiv(['content'], parentDiv);\n */\n static createDiv(classes: string[], parent?: HTMLElement): HTMLElement {\n const el = document.createElement('div');\n classes.forEach(c => {if (c) el.classList.add(c)});\n parent?.appendChild(el);\n return el;\n }\n\n /**\n * Check if a widget should resize to fit its content.\n *\n * @param n the grid node to check (can be undefined)\n * @param strict if true, only returns true for explicit sizeToContent:true (not numbers)\n * @returns true if the widget should resize to content\n *\n * @example\n * if (Utils.shouldSizeToContent(node)) {\n * // Trigger content-based resizing\n * }\n */\n static shouldSizeToContent(n: GridStackNode | undefined, strict = false): boolean {\n return n?.grid && (strict ?\n (n.sizeToContent === true || (n.grid.opts.sizeToContent === true && n.sizeToContent === undefined)) :\n (!!n.sizeToContent || (n.grid.opts.sizeToContent && n.sizeToContent !== false)));\n }\n\n /**\n * Check if two grid positions overlap/intersect.\n *\n * @param a first position with x, y, w, h properties\n * @param b second position with x, y, w, h properties\n * @returns true if the positions overlap\n *\n * @example\n * const overlaps = Utils.isIntercepted(\n * {x: 0, y: 0, w: 2, h: 1},\n * {x: 1, y: 0, w: 2, h: 1}\n * ); // true - they overlap\n */\n static isIntercepted(a: GridStackPosition, b: GridStackPosition): boolean {\n return !(a.y >= b.y + b.h || a.y + a.h <= b.y || a.x + a.w <= b.x || a.x >= b.x + b.w);\n }\n\n /**\n * Check if two grid positions are touching (edges or corners).\n *\n * @param a first position\n * @param b second position\n * @returns true if the positions are touching\n *\n * @example\n * const touching = Utils.isTouching(\n * {x: 0, y: 0, w: 2, h: 1},\n * {x: 2, y: 0, w: 1, h: 1}\n * ); // true - they share an edge\n */\n static isTouching(a: GridStackPosition, b: GridStackPosition): boolean {\n return Utils.isIntercepted(a, {x: b.x-0.5, y: b.y-0.5, w: b.w+1, h: b.h+1})\n }\n\n /**\n * Calculate the overlapping area between two grid positions.\n *\n * @param a first position\n * @param b second position\n * @returns the area of overlap (0 if no overlap)\n *\n * @example\n * const overlap = Utils.areaIntercept(\n * {x: 0, y: 0, w: 3, h: 2},\n * {x: 1, y: 0, w: 3, h: 2}\n * ); // returns 4 (2x2 overlap)\n */\n static areaIntercept(a: GridStackPosition, b: GridStackPosition): number {\n const x0 = (a.x > b.x) ? a.x : b.x;\n const x1 = (a.x+a.w < b.x+b.w) ? a.x+a.w : b.x+b.w;\n if (x1 <= x0) return 0; // no overlap\n const y0 = (a.y > b.y) ? a.y : b.y;\n const y1 = (a.y+a.h < b.y+b.h) ? a.y+a.h : b.y+b.h;\n if (y1 <= y0) return 0; // no overlap\n return (x1-x0) * (y1-y0);\n }\n\n /**\n * Calculate the total area of a grid position.\n *\n * @param a position with width and height\n * @returns the total area (width * height)\n *\n * @example\n * const area = Utils.area({x: 0, y: 0, w: 3, h: 2}); // returns 6\n */\n static area(a: GridStackPosition): number {\n return a.w * a.h;\n }\n\n /**\n * Sort an array of grid nodes by position (y first, then x).\n *\n * @param nodes array of nodes to sort\n * @param dir sort direction: 1 for ascending (top-left first), -1 for descending\n * @returns the sorted array (modifies original)\n *\n * @example\n * const sorted = Utils.sort(nodes); // Sort top-left to bottom-right\n * const reverse = Utils.sort(nodes, -1); // Sort bottom-right to top-left\n */\n static sort(nodes: GridStackNode[], dir: 1 | -1 = 1): GridStackNode[] {\n const und = 10000;\n return nodes.sort((a, b) => {\n const diffY = dir * ((a.y ?? und) - (b.y ?? und));\n if (diffY === 0) return dir * ((a.x ?? und) - (b.x ?? und));\n return diffY;\n });\n }\n\n /**\n * Find a grid node by its ID.\n *\n * @param nodes array of nodes to search\n * @param id the ID to search for\n * @returns the node with matching ID, or undefined if not found\n *\n * @example\n * const node = Utils.find(nodes, 'widget-1');\n * if (node) console.log('Found node at:', node.x, node.y);\n */\n static find(nodes: GridStackNode[], id: string): GridStackNode | undefined {\n return id ? nodes.find(n => n.id === id) : undefined;\n }\n\n /**\n * Convert various value types to boolean.\n * Handles strings like 'false', 'no', '0' as false.\n *\n * @param v value to convert\n * @returns boolean representation\n *\n * @example\n * Utils.toBool('true'); // true\n * Utils.toBool('false'); // false\n * Utils.toBool('no'); // false\n * Utils.toBool('1'); // true\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static toBool(v: unknown): boolean {\n if (typeof v === 'boolean') {\n return v;\n }\n if (typeof v === 'string') {\n v = v.toLowerCase();\n return !(v === '' || v === 'no' || v === 'false' || v === '0');\n }\n return Boolean(v);\n }\n\n /**\n * Convert a string value to a number, handling null and empty strings.\n *\n * @param value string or null value to convert\n * @returns number value, or undefined for null/empty strings\n *\n * @example\n * Utils.toNumber('42'); // 42\n * Utils.toNumber(''); // undefined\n * Utils.toNumber(null); // undefined\n */\n static toNumber(value: null | string): number {\n return (value === null || value.length === 0) ? undefined : Number(value);\n }\n\n /**\n * Parse a height value with units into numeric value and unit string.\n * Supports px, em, rem, vh, vw, %, cm, mm units.\n *\n * @param val height value as number or string with units\n * @returns object with h (height) and unit properties\n *\n * @example\n * Utils.parseHeight('100px'); // {h: 100, unit: 'px'}\n * Utils.parseHeight('2rem'); // {h: 2, unit: 'rem'}\n * Utils.parseHeight(50); // {h: 50, unit: 'px'}\n */\n static parseHeight(val: numberOrString): HeightData {\n let h: number;\n let unit = 'px';\n if (typeof val === 'string') {\n if (val === 'auto' || val === '') h = 0;\n else {\n const match = val.match(/^(-[0-9]+\\.[0-9]+|[0-9]*\\.[0-9]+|-[0-9]+|[0-9]+)(px|em|rem|vh|vw|%|cm|mm)?$/);\n if (!match) {\n throw new Error(`Invalid height val = ${val}`);\n }\n unit = match[2] || 'px';\n h = parseFloat(match[1]);\n }\n } else {\n h = val;\n }\n return { h, unit };\n }\n\n /**\n * Copy unset fields from source objects to target object (shallow merge with defaults).\n * Similar to Object.assign but only sets undefined/null fields.\n *\n * @param target the object to copy defaults into\n * @param sources one or more source objects to copy defaults from\n * @returns the modified target object\n *\n * @example\n * const config = { width: 100 };\n * Utils.defaults(config, { width: 200, height: 50 });\n * // config is now { width: 100, height: 50 }\n */\n // eslint-disable-next-line\n static defaults(target, ...sources): {} {\n\n sources.forEach(source => {\n for (const key in source) {\n if (!source.hasOwnProperty(key)) return;\n if (target[key] === null || target[key] === undefined) {\n target[key] = source[key];\n } else if (typeof source[key] === 'object' && typeof target[key] === 'object') {\n // property is an object, recursively add it's field over... #1373\n Utils.defaults(target[key], source[key]);\n }\n }\n });\n\n return target;\n }\n\n /**\n * Compare two objects for equality (shallow comparison).\n * Checks if objects have the same fields and values at one level deep.\n *\n * @param a first object to compare\n * @param b second object to compare\n * @returns true if objects have the same values\n *\n * @example\n * Utils.same({x: 1, y: 2}, {x: 1, y: 2}); // true\n * Utils.same({x: 1}, {x: 1, y: 2}); // false\n */\n static same(a: unknown, b: unknown): boolean {\n if (typeof a !== 'object') return a == b;\n if (typeof a !== typeof b) return false;\n // else we have object, check just 1 level deep for being same things...\n if (Object.keys(a).length !== Object.keys(b).length) return false;\n for (const key in a) {\n if (a[key] !== b[key]) return false;\n }\n return true;\n }\n\n /**\n * Copy position and size properties from one widget to another.\n * Copies x, y, w, h and optionally min/max constraints.\n *\n * @param a target widget to copy to\n * @param b source widget to copy from\n * @param doMinMax if true, also copy min/max width/height constraints\n * @returns the target widget (a)\n *\n * @example\n * Utils.copyPos(widget1, widget2); // Copy position/size\n * Utils.copyPos(widget1, widget2, true); // Also copy constraints\n */\n static copyPos(a: GridStackWidget, b: GridStackWidget, doMinMax = false): GridStackWidget {\n if (b.x !== undefined) a.x = b.x;\n if (b.y !== undefined) a.y = b.y;\n if (b.w !== undefined) a.w = b.w;\n if (b.h !== undefined) a.h = b.h;\n if (doMinMax) {\n if (b.minW) a.minW = b.minW;\n if (b.minH) a.minH = b.minH;\n if (b.maxW) a.maxW = b.maxW;\n if (b.maxH) a.maxH = b.maxH;\n }\n return a;\n }\n\n /** true if a and b has same size & position */\n static samePos(a: GridStackPosition, b: GridStackPosition): boolean {\n return a && b && a.x === b.x && a.y === b.y && (a.w || 1) === (b.w || 1) && (a.h || 1) === (b.h || 1);\n }\n\n /** given a node, makes sure it's min/max are valid */\n static sanitizeMinMax(node: GridStackNode) {\n // remove 0, undefine, null\n if (!node.minW) { delete node.minW; }\n if (!node.minH) { delete node.minH; }\n if (!node.maxW) { delete node.maxW; }\n if (!node.maxH) { delete node.maxH; }\n }\n\n /** removes field from the first object if same as the second objects (like diffing) and internal '_' for saving */\n static removeInternalAndSame(a: unknown, b: unknown):void {\n if (typeof a !== 'object' || typeof b !== 'object') return;\n // skip arrays as we don't know how to hydrate them (unlike object spread operator)\n if (Array.isArray(a) || Array.isArray(b)) return;\n for (let key in a) {\n const aVal = a[key];\n const bVal = b[key];\n if (key[0] === '_' || aVal === bVal) {\n delete a[key]\n } else if (aVal && typeof aVal === 'object' && bVal !== undefined) {\n Utils.removeInternalAndSame(aVal, bVal);\n if (!Object.keys(aVal).length) { delete a[key] }\n }\n }\n }\n\n /** removes internal fields '_' and default values for saving */\n static removeInternalForSave(n: GridStackNode, removeEl = true): void {\n for (let key in n) { if (key[0] === '_' || n[key] === null || n[key] === undefined ) delete n[key]; }\n delete n.grid;\n if (removeEl) delete n.el;\n // delete default values (will be re-created on read)\n if (!n.autoPosition) delete n.autoPosition;\n if (!n.noResize) delete n.noResize;\n if (!n.noMove) delete n.noMove;\n if (!n.locked) delete n.locked;\n if (n.w === 1 || n.w === n.minW) delete n.w;\n if (n.h === 1 || n.h === n.minH) delete n.h;\n }\n\n /** return the closest parent (or itself) matching the given class */\n // static closestUpByClass(el: HTMLElement, name: string): HTMLElement {\n // while (el) {\n // if (el.classList.contains(name)) return el;\n // el = el.parentElement\n // }\n // return null;\n // }\n\n /** delay calling the given function for given delay, preventing new calls from happening while waiting */\n static throttle(func: () => void, delay: number): () => void {\n let isWaiting = false;\n return (...args) => {\n if (!isWaiting) {\n isWaiting = true;\n setTimeout(() => { func(...args); isWaiting = false; }, delay);\n }\n }\n }\n\n static removePositioningStyles(el: HTMLElement): void {\n const style = el.style;\n if (style.position) {\n style.removeProperty('position');\n }\n if (style.left) {\n style.removeProperty('left');\n }\n if (style.top) {\n style.removeProperty('top');\n }\n if (style.width) {\n style.removeProperty('width');\n }\n if (style.height) {\n style.removeProperty('height');\n }\n }\n\n /** @internal returns the passed element if vertically scrollable, else the closest parent that will, up to the entire document scrolling element */\n static getScrollElement(el?: HTMLElement): HTMLElement {\n if (!el) return document.scrollingElement as HTMLElement || document.documentElement; // IE support\n const overflowY = getComputedStyle(el).overflowY;\n if ((overflowY === 'auto' || overflowY === 'scroll') && el.scrollHeight > el.clientHeight) {\n return el;\n } else {\n return Utils.getScrollElement(el.parentElement);\n }\n }\n\n /**\n * @internal Function used to scroll the page.\n *\n * @param event `MouseEvent` that triggers the resize\n * @param el `HTMLElement` that's being resized\n * @param distance Distance from the V edges to start scrolling\n */\n static updateScrollResize(event: MouseEvent, el: HTMLElement, distance: number): void {\n const scrollEl = Utils.getScrollElement(el);\n const height = scrollEl.clientHeight;\n // #1727 event.clientY is relative to viewport, so must compare this against position of scrollEl getBoundingClientRect().top\n // #1745 Special situation if scrollEl is document 'html': here browser spec states that\n // clientHeight is height of viewport, but getBoundingClientRect() is rectangle of html element;\n // this discrepancy arises because in reality scrollbar is attached to viewport, not html element itself.\n const offsetTop = (scrollEl === Utils.getScrollElement()) ? 0 : scrollEl.getBoundingClientRect().top;\n const pointerPosY = event.clientY - offsetTop;\n const top = pointerPosY < distance;\n const bottom = pointerPosY > height - distance;\n\n if (top) {\n // This also can be done with a timeout to keep scrolling while the mouse is\n // in the scrolling zone. (will have smoother behavior)\n scrollEl.scrollBy({ behavior: 'smooth', top: pointerPosY - distance});\n } else if (bottom) {\n scrollEl.scrollBy({ behavior: 'smooth', top: distance - (height - pointerPosY)});\n }\n }\n\n /** single level clone, returning a new object with same top fields. This will share sub objects and arrays */\n static clone<T>(obj: T): T {\n if (obj === null || obj === undefined || typeof(obj) !== 'object') {\n return obj;\n }\n // return Object.assign({}, obj);\n if (obj instanceof Array) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return [...obj] as any;\n }\n return {...obj};\n }\n\n /**\n * Recursive clone version that returns a full copy, checking for nested objects and arrays ONLY.\n * Note: this will use as-is any key starting with double __ (and not copy inside) some lib have circular dependencies.\n */\n static cloneDeep<T>(obj: T): T {\n // list of fields we will skip during cloneDeep (nested objects, other internal)\n const skipFields = ['parentGrid', 'el', 'grid', 'subGrid', 'engine'];\n // return JSON.parse(JSON.stringify(obj)); // doesn't work with date format ?\n const ret = Utils.clone(obj);\n for (const key in ret) {\n // NOTE: we don't support function/circular dependencies so skip those properties for now...\n if (ret.hasOwnProperty(key) && typeof(ret[key]) === 'object' && key.substring(0, 2) !== '__' && !skipFields.find(k => k === key)) {\n ret[key] = Utils.cloneDeep(obj[key]);\n }\n }\n return ret;\n }\n\n /** deep clone the given HTML node, removing teh unique id field */\n public static cloneNode(el: HTMLElement): HTMLElement {\n const node = el.cloneNode(true) as HTMLElement;\n node.removeAttribute('id');\n return node;\n }\n\n public static appendTo(el: HTMLElement, parent: string | HTMLElement): void {\n let parentNode: HTMLElement;\n if (typeof parent === 'string') {\n parentNode = Utils.getElement(parent);\n } else {\n parentNode = parent;\n }\n if (parentNode) {\n parentNode.appendChild(el);\n }\n }\n\n // public static setPositionRelative(el: HTMLElement): void {\n // if (!(/^(?:r|a|f)/).test(getComputedStyle(el).position)) {\n // el.style.position = \"relative\";\n // }\n // }\n\n public static addElStyles(el: HTMLElement, styles: { [prop: string]: string | string[] }): void {\n if (styles instanceof Object) {\n for (const s in styles) {\n if (styles.hasOwnProperty(s)) {\n if (Array.isArray(styles[s])) {\n // support fallback value\n (styles[s] as string[]).forEach(val => {\n el.style[s] = val;\n });\n } else {\n el.style[s] = styles[s];\n }\n }\n }\n }\n }\n\n public static initEvent<T>(e: DragEvent | MouseEvent, info: { type: string; target?: EventTarget }): T {\n const evt = { type: info.type };\n const obj = {\n button: 0,\n which: 0,\n buttons: 1,\n bubbles: true,\n cancelable: true,\n target: info.target ? info.target : e.target\n };\n ['altKey','ctrlKey','metaKey','shiftKey'].forEach(p => evt[p] = e[p]); // keys\n ['pageX','pageY','clientX','clientY','screenX','screenY'].forEach(p => evt[p] = e[p]); // point info\n return {...evt, ...obj} as unknown as T;\n }\n\n /** copies the MouseEvent (or convert Touch) properties and sends it as another event to the given target */\n public static simulateMouseEvent(e: MouseEvent | Touch, simulatedType: string, target?: EventTarget): void {\n const me = e as MouseEvent;\n const simulatedEvent = new MouseEvent(simulatedType, {\n bubbles: true,\n composed: true,\n cancelable: true,\n view: window,\n detail: 1,\n screenX: e.screenX,\n screenY: e.screenY,\n clientX: e.clientX,\n clientY: e.clientY,\n ctrlKey: me.ctrlKey??false,\n altKey: me.altKey??false,\n shiftKey: me.shiftKey??false,\n metaKey: me.metaKey??false,\n button: 0,\n relatedTarget: e.target\n });\n\n (target || e.target).dispatchEvent(simulatedEvent);\n }\n\n /**\n * defines an element that is used to get the offset and scale from grid transforms\n * returns the scale and offsets from said element\n */\n public static getValuesFromTransformedElement(parent: HTMLElement): DragTransform {\n const transformReference = document.createElement('div');\n Utils.addElStyles(transformReference, {\n opacity: '0',\n position: 'fixed',\n top: 0 + 'px',\n left: 0 + 'px',\n width: '1px',\n height: '1px',\n zIndex: '-999999',\n });\n parent.appendChild(transformReference);\n const transformValues = transformReference.getBoundingClientRect();\n parent.removeChild(transformReference);\n transformReference.remove();\n return {\n xScale: 1 / transformValues.width,\n yScale: 1 / transformValues.height,\n xOffset: transformValues.left,\n yOffset: transformValues.top,\n }\n }\n\n /** swap the given object 2 field values */\n public static swap(o: unknown, a: string, b: string): void {\n if (!o) return;\n const tmp = o[a]; o[a] = o[b]; o[b] = tmp;\n }\n\n /** returns true if event is inside the given element rectangle */\n // Note: Safari Mac has null event.relatedTarget which causes #1684 so check if DragEvent is inside the coordinates instead\n // Utils.el.contains(event.relatedTarget as HTMLElement)\n // public static inside(e: MouseEvent, el: HTMLElement): boolean {\n // // srcElement, toElement, target: all set to placeholder when leaving simple grid, so we can't use that (Chrome)\n // const target: HTMLElement = e.relatedTarget || (e as any).fromElement;\n // if (!target) {\n // const { bottom, left, right, top } = el.getBoundingClientRect();\n // return (e.x < right && e.x > left && e.y < bottom && e.y > top);\n // }\n // return el.contains(target);\n // }\n\n /** true if the item can be rotated (checking for prop, not space available) */\n public static canBeRotated(n: GridStackNode): boolean {\n return !(!n || n.w === n.h || n.locked || n.noResize || n.grid?.opts.disableResize || (n.minW && n.minW === n.maxW) || (n.minH && n.minH === n.maxH));\n }\n}"]} |