summaryrefslogtreecommitdiff
path: root/node_modules/@floating-ui/utils
diff options
context:
space:
mode:
authorrxliuli <rxliuli@gmail.com>2025-11-04 05:03:50 +0800
committerrxliuli <rxliuli@gmail.com>2025-11-04 05:03:50 +0800
commitbce557cc2dc767628bed6aac87301a1be7c5431b (patch)
treeb51a051228d01fe3306cd7626d4a96768aadb944 /node_modules/@floating-ui/utils
init commit
Diffstat (limited to 'node_modules/@floating-ui/utils')
-rw-r--r--node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs154
-rw-r--r--node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs138
2 files changed, 292 insertions, 0 deletions
diff --git a/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs b/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs
new file mode 100644
index 0000000..b761182
--- /dev/null
+++ b/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs
@@ -0,0 +1,154 @@
+function hasWindow() {
+ return typeof window !== 'undefined';
+}
+function getNodeName(node) {
+ if (isNode(node)) {
+ return (node.nodeName || '').toLowerCase();
+ }
+ // Mocked nodes in testing environments may not be instances of Node. By
+ // returning `#document` an infinite loop won't occur.
+ // https://github.com/floating-ui/floating-ui/issues/2317
+ return '#document';
+}
+function getWindow(node) {
+ var _node$ownerDocument;
+ return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;
+}
+function getDocumentElement(node) {
+ var _ref;
+ return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;
+}
+function isNode(value) {
+ if (!hasWindow()) {
+ return false;
+ }
+ return value instanceof Node || value instanceof getWindow(value).Node;
+}
+function isElement(value) {
+ if (!hasWindow()) {
+ return false;
+ }
+ return value instanceof Element || value instanceof getWindow(value).Element;
+}
+function isHTMLElement(value) {
+ if (!hasWindow()) {
+ return false;
+ }
+ return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;
+}
+function isShadowRoot(value) {
+ if (!hasWindow() || typeof ShadowRoot === 'undefined') {
+ return false;
+ }
+ return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;
+}
+function isOverflowElement(element) {
+ const {
+ overflow,
+ overflowX,
+ overflowY,
+ display
+ } = getComputedStyle(element);
+ return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !['inline', 'contents'].includes(display);
+}
+function isTableElement(element) {
+ return ['table', 'td', 'th'].includes(getNodeName(element));
+}
+function isTopLayer(element) {
+ return [':popover-open', ':modal'].some(selector => {
+ try {
+ return element.matches(selector);
+ } catch (e) {
+ return false;
+ }
+ });
+}
+function isContainingBlock(elementOrCss) {
+ const webkit = isWebKit();
+ const css = isElement(elementOrCss) ? getComputedStyle(elementOrCss) : elementOrCss;
+
+ // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block
+ // https://drafts.csswg.org/css-transforms-2/#individual-transforms
+ return ['transform', 'translate', 'scale', 'rotate', 'perspective'].some(value => css[value] ? css[value] !== 'none' : false) || (css.containerType ? css.containerType !== 'normal' : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== 'none' : false) || !webkit && (css.filter ? css.filter !== 'none' : false) || ['transform', 'translate', 'scale', 'rotate', 'perspective', 'filter'].some(value => (css.willChange || '').includes(value)) || ['paint', 'layout', 'strict', 'content'].some(value => (css.contain || '').includes(value));
+}
+function getContainingBlock(element) {
+ let currentNode = getParentNode(element);
+ while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {
+ if (isContainingBlock(currentNode)) {
+ return currentNode;
+ } else if (isTopLayer(currentNode)) {
+ return null;
+ }
+ currentNode = getParentNode(currentNode);
+ }
+ return null;
+}
+function isWebKit() {
+ if (typeof CSS === 'undefined' || !CSS.supports) return false;
+ return CSS.supports('-webkit-backdrop-filter', 'none');
+}
+function isLastTraversableNode(node) {
+ return ['html', 'body', '#document'].includes(getNodeName(node));
+}
+function getComputedStyle(element) {
+ return getWindow(element).getComputedStyle(element);
+}
+function getNodeScroll(element) {
+ if (isElement(element)) {
+ return {
+ scrollLeft: element.scrollLeft,
+ scrollTop: element.scrollTop
+ };
+ }
+ return {
+ scrollLeft: element.scrollX,
+ scrollTop: element.scrollY
+ };
+}
+function getParentNode(node) {
+ if (getNodeName(node) === 'html') {
+ return node;
+ }
+ const result =
+ // Step into the shadow DOM of the parent of a slotted node.
+ node.assignedSlot ||
+ // DOM Element detected.
+ node.parentNode ||
+ // ShadowRoot detected.
+ isShadowRoot(node) && node.host ||
+ // Fallback.
+ getDocumentElement(node);
+ return isShadowRoot(result) ? result.host : result;
+}
+function getNearestOverflowAncestor(node) {
+ const parentNode = getParentNode(node);
+ if (isLastTraversableNode(parentNode)) {
+ return node.ownerDocument ? node.ownerDocument.body : node.body;
+ }
+ if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {
+ return parentNode;
+ }
+ return getNearestOverflowAncestor(parentNode);
+}
+function getOverflowAncestors(node, list, traverseIframes) {
+ var _node$ownerDocument2;
+ if (list === void 0) {
+ list = [];
+ }
+ if (traverseIframes === void 0) {
+ traverseIframes = true;
+ }
+ const scrollableAncestor = getNearestOverflowAncestor(node);
+ const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);
+ const win = getWindow(scrollableAncestor);
+ if (isBody) {
+ const frameElement = getFrameElement(win);
+ return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);
+ }
+ return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));
+}
+function getFrameElement(win) {
+ return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;
+}
+
+export { getComputedStyle, getContainingBlock, getDocumentElement, getFrameElement, getNearestOverflowAncestor, getNodeName, getNodeScroll, getOverflowAncestors, getParentNode, getWindow, isContainingBlock, isElement, isHTMLElement, isLastTraversableNode, isNode, isOverflowElement, isShadowRoot, isTableElement, isTopLayer, isWebKit };
diff --git a/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs b/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs
new file mode 100644
index 0000000..4812430
--- /dev/null
+++ b/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs
@@ -0,0 +1,138 @@
+/**
+ * Custom positioning reference element.
+ * @see https://floating-ui.com/docs/virtual-elements
+ */
+
+const sides = ['top', 'right', 'bottom', 'left'];
+const alignments = ['start', 'end'];
+const placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + "-" + alignments[0], side + "-" + alignments[1]), []);
+const min = Math.min;
+const max = Math.max;
+const round = Math.round;
+const floor = Math.floor;
+const createCoords = v => ({
+ x: v,
+ y: v
+});
+const oppositeSideMap = {
+ left: 'right',
+ right: 'left',
+ bottom: 'top',
+ top: 'bottom'
+};
+const oppositeAlignmentMap = {
+ start: 'end',
+ end: 'start'
+};
+function clamp(start, value, end) {
+ return max(start, min(value, end));
+}
+function evaluate(value, param) {
+ return typeof value === 'function' ? value(param) : value;
+}
+function getSide(placement) {
+ return placement.split('-')[0];
+}
+function getAlignment(placement) {
+ return placement.split('-')[1];
+}
+function getOppositeAxis(axis) {
+ return axis === 'x' ? 'y' : 'x';
+}
+function getAxisLength(axis) {
+ return axis === 'y' ? 'height' : 'width';
+}
+function getSideAxis(placement) {
+ return ['top', 'bottom'].includes(getSide(placement)) ? 'y' : 'x';
+}
+function getAlignmentAxis(placement) {
+ return getOppositeAxis(getSideAxis(placement));
+}
+function getAlignmentSides(placement, rects, rtl) {
+ if (rtl === void 0) {
+ rtl = false;
+ }
+ const alignment = getAlignment(placement);
+ const alignmentAxis = getAlignmentAxis(placement);
+ const length = getAxisLength(alignmentAxis);
+ let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';
+ if (rects.reference[length] > rects.floating[length]) {
+ mainAlignmentSide = getOppositePlacement(mainAlignmentSide);
+ }
+ return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];
+}
+function getExpandedPlacements(placement) {
+ const oppositePlacement = getOppositePlacement(placement);
+ return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];
+}
+function getOppositeAlignmentPlacement(placement) {
+ return placement.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);
+}
+function getSideList(side, isStart, rtl) {
+ const lr = ['left', 'right'];
+ const rl = ['right', 'left'];
+ const tb = ['top', 'bottom'];
+ const bt = ['bottom', 'top'];
+ switch (side) {
+ case 'top':
+ case 'bottom':
+ if (rtl) return isStart ? rl : lr;
+ return isStart ? lr : rl;
+ case 'left':
+ case 'right':
+ return isStart ? tb : bt;
+ default:
+ return [];
+ }
+}
+function getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {
+ const alignment = getAlignment(placement);
+ let list = getSideList(getSide(placement), direction === 'start', rtl);
+ if (alignment) {
+ list = list.map(side => side + "-" + alignment);
+ if (flipAlignment) {
+ list = list.concat(list.map(getOppositeAlignmentPlacement));
+ }
+ }
+ return list;
+}
+function getOppositePlacement(placement) {
+ return placement.replace(/left|right|bottom|top/g, side => oppositeSideMap[side]);
+}
+function expandPaddingObject(padding) {
+ return {
+ top: 0,
+ right: 0,
+ bottom: 0,
+ left: 0,
+ ...padding
+ };
+}
+function getPaddingObject(padding) {
+ return typeof padding !== 'number' ? expandPaddingObject(padding) : {
+ top: padding,
+ right: padding,
+ bottom: padding,
+ left: padding
+ };
+}
+function rectToClientRect(rect) {
+ const {
+ x,
+ y,
+ width,
+ height
+ } = rect;
+ return {
+ width,
+ height,
+ top: y,
+ left: x,
+ right: x + width,
+ bottom: y + height,
+ x,
+ y
+ };
+}
+
+export { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };