UNPKG

@shopify/draggable

Version:

The JavaScript Drag & Drop library your grandparents warned you about.

48 lines (44 loc) 1.3 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); function closest(node, value) { if (node == null) { return null; } function conditionFn(currentNode) { if (currentNode == null || value == null) { return false; } else if (isSelector(value)) { return Element.prototype.matches.call(currentNode, value); } else if (isNodeList(value)) { return [...value].includes(currentNode); } else if (isElement(value)) { return value === currentNode; } else if (isFunction(value)) { return value(currentNode); } else { return false; } } let current = node; do { current = current.correspondingUseElement || current.correspondingElement || current; if (conditionFn(current)) { return current; } current = current?.parentNode || null; } while (current != null && current !== document.body && current !== document); return null; } function isSelector(value) { return Boolean(typeof value === 'string'); } function isNodeList(value) { return Boolean(value instanceof NodeList || value instanceof Array); } function isElement(value) { return Boolean(value instanceof Node); } function isFunction(value) { return Boolean(typeof value === 'function'); } exports.default = closest;