Socket
Socket
Sign inDemoInstall

@zag-js/popper

Package Overview
Dependencies
Maintainers
1
Versions
883
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@zag-js/popper - npm Package Compare versions

Comparing version 0.53.0 to 0.54.0

355

dist/index.js

@@ -1,2 +0,355 @@

"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);var src_exports={};__export(src_exports,{getPlacement:()=>getPlacement,getPlacementSide:()=>getPlacementSide,getPlacementStyles:()=>getPlacementStyles,isValidPlacement:()=>isValidPlacement});module.exports=__toCommonJS(src_exports);var import_dom=require("@floating-ui/dom");var import_dom_query2=require("@zag-js/dom-query");var import_utils=require("@zag-js/utils");var import_dom_query=require("@zag-js/dom-query");function createDOMRect(x=0,y=0,width=0,height=0){if(typeof DOMRect==="function"){return new DOMRect(x,y,width,height)}const rect={x,y,width,height,top:y,right:x+width,bottom:y+height,left:x};return{...rect,toJSON:()=>rect}}function getDOMRect(anchorRect){if(!anchorRect)return createDOMRect();const{x,y,width,height}=anchorRect;return createDOMRect(x,y,width,height)}function getAnchorElement(anchorElement,getAnchorRect){return{contextElement:(0,import_dom_query.isHTMLElement)(anchorElement)?anchorElement:void 0,getBoundingClientRect:()=>{const anchor=anchorElement;const anchorRect=getAnchorRect?.(anchor);if(anchorRect||!anchor){return getDOMRect(anchorRect)}return anchor.getBoundingClientRect()}}}var toVar=value=>({variable:value,reference:`var(${value})`});var cssVars={arrowSize:toVar("--arrow-size"),arrowSizeHalf:toVar("--arrow-size-half"),arrowBg:toVar("--arrow-background"),transformOrigin:toVar("--transform-origin"),arrowOffset:toVar("--arrow-offset")};var getTransformOrigin=arrow2=>({top:"bottom center","top-start":arrow2?`${arrow2.x}px bottom`:"left bottom","top-end":arrow2?`${arrow2.x}px bottom`:"right bottom",bottom:"top center","bottom-start":arrow2?`${arrow2.x}px top`:"top left","bottom-end":arrow2?`${arrow2.x}px top`:"top right",left:"right center","left-start":arrow2?`right ${arrow2.y}px`:"right top","left-end":arrow2?`right ${arrow2.y}px`:"right bottom",right:"left center","right-start":arrow2?`left ${arrow2.y}px`:"left top","right-end":arrow2?`left ${arrow2.y}px`:"left bottom"});var transformOriginMiddleware={name:"transformOrigin",fn({placement,elements,middlewareData}){const{arrow:arrow2}=middlewareData;const transformOrigin=getTransformOrigin(arrow2)[placement];const{floating}=elements;floating.style.setProperty(cssVars.transformOrigin.variable,transformOrigin);return{data:{transformOrigin}}}};var rectMiddleware={name:"rects",fn({rects}){return{data:rects}}};var shiftArrowMiddleware=arrowEl=>{if(!arrowEl)return;return{name:"shiftArrow",fn({placement,middlewareData}){if(!middlewareData.arrow)return{};const{x,y}=middlewareData.arrow;const dir=placement.split("-")[0];Object.assign(arrowEl.style,{left:x!=null?`${x}px`:"",top:y!=null?`${y}px`:"",[dir]:`calc(100% + ${cssVars.arrowOffset.reference})`});return{}}}};function isValidPlacement(v){return/^(?:top|bottom|left|right)(?:-(?:start|end))?$/.test(v)}function getPlacementDetails(placement){const[side,align]=placement.split("-");return{side,align,hasAlign:align!=null}}function getPlacementSide(placement){return placement.split("-")[0]}var defaultOptions={strategy:"absolute",placement:"bottom",listeners:true,gutter:8,flip:true,slide:true,overlap:false,sameWidth:false,fitViewport:false,overflowPadding:8,arrowPadding:4};function roundByDpr(win,value){const dpr=win.devicePixelRatio||1;return Math.round(value*dpr)/dpr}function getBoundaryMiddleware(opts){return(0,import_utils.runIfFn)(opts.boundary)}function getArrowMiddleware(arrowElement,opts){if(!arrowElement)return;return(0,import_dom.arrow)({element:arrowElement,padding:opts.arrowPadding})}function getOffsetMiddleware(arrowElement,opts){if((0,import_utils.isNull)(opts.offset??opts.gutter))return;return(0,import_dom.offset)(({placement})=>{const arrowOffset=(arrowElement?.clientHeight||0)/2;const gutter=opts.offset?.mainAxis??opts.gutter;const mainAxis=typeof gutter==="number"?gutter+arrowOffset:gutter??arrowOffset;const{hasAlign}=getPlacementDetails(placement);const shift2=!hasAlign?opts.shift:void 0;const crossAxis=opts.offset?.crossAxis??shift2;return(0,import_utils.compact)({crossAxis,mainAxis,alignmentAxis:opts.shift})})}function getFlipMiddleware(opts){if(!opts.flip)return;return(0,import_dom.flip)({boundary:getBoundaryMiddleware(opts),padding:opts.overflowPadding,fallbackPlacements:opts.flip===true?void 0:opts.flip})}function getShiftMiddleware(opts){if(!opts.slide&&!opts.overlap)return;return(0,import_dom.shift)({boundary:getBoundaryMiddleware(opts),mainAxis:opts.slide,crossAxis:opts.overlap,padding:opts.overflowPadding,limiter:(0,import_dom.limitShift)()})}function getSizeMiddleware(opts){return(0,import_dom.size)({padding:opts.overflowPadding,apply({elements,rects,availableHeight,availableWidth}){const floating=elements.floating;const referenceWidth=Math.round(rects.reference.width);availableWidth=Math.floor(availableWidth);availableHeight=Math.floor(availableHeight);floating.style.setProperty("--reference-width",`${referenceWidth}px`);floating.style.setProperty("--available-width",`${availableWidth}px`);floating.style.setProperty("--available-height",`${availableHeight}px`)}})}function getAutoUpdateOptions(opts){if(!opts)return{};if(opts===true){return{ancestorResize:true,ancestorScroll:true,elementResize:true,layoutShift:true}}return opts}function getPlacementImpl(referenceOrVirtual,floating,opts={}){const reference=getAnchorElement(referenceOrVirtual,opts.getAnchorRect);if(!floating||!reference)return;const options=Object.assign({},defaultOptions,opts);const arrowEl=floating.querySelector("[data-part=arrow]");const middleware=[getOffsetMiddleware(arrowEl,options),getFlipMiddleware(options),getShiftMiddleware(options),getArrowMiddleware(arrowEl,options),shiftArrowMiddleware(arrowEl),transformOriginMiddleware,getSizeMiddleware(options),rectMiddleware];const{placement,strategy,onComplete,onPositioned}=options;const updatePosition=async()=>{if(!reference||!floating)return;const pos=await(0,import_dom.computePosition)(reference,floating,{placement,middleware,strategy});onComplete?.(pos);onPositioned?.({placed:true});const win=(0,import_dom_query2.getWindow)(floating);const x=roundByDpr(win,pos.x);const y=roundByDpr(win,pos.y);floating.style.setProperty("--x",`${x}px`);floating.style.setProperty("--y",`${y}px`);const contentEl=floating.firstElementChild;if(contentEl){const zIndex=win.getComputedStyle(contentEl).zIndex;floating.style.setProperty("--z-index",zIndex)}};const update=async()=>{if(opts.updatePosition){await opts.updatePosition({updatePosition});onPositioned?.({placed:true})}else{await updatePosition()}};const autoUpdateOptions=getAutoUpdateOptions(options.listeners);const cancelAutoUpdate=options.listeners?(0,import_dom.autoUpdate)(reference,floating,update,autoUpdateOptions):import_utils.noop;update();return()=>{cancelAutoUpdate?.();onPositioned?.({placed:false})}}function getPlacement(referenceOrFn,floatingOrFn,opts={}){const{defer,...options}=opts;const func=defer?import_dom_query2.raf:v=>v();const cleanups=[];cleanups.push(func(()=>{const reference=typeof referenceOrFn==="function"?referenceOrFn():referenceOrFn;const floating=typeof floatingOrFn==="function"?floatingOrFn():floatingOrFn;cleanups.push(getPlacementImpl(reference,floating,options))}));return()=>{cleanups.forEach(fn=>fn?.())}}var ARROW_FLOATING_STYLE={bottom:"rotate(45deg)",left:"rotate(135deg)",top:"rotate(225deg)",right:"rotate(315deg)"};function getPlacementStyles(options={}){const{placement,sameWidth,fitViewport,strategy="absolute"}=options;return{arrow:{position:"absolute",width:cssVars.arrowSize.reference,height:cssVars.arrowSize.reference,[cssVars.arrowSizeHalf.variable]:`calc(${cssVars.arrowSize.reference} / 2)`,[cssVars.arrowOffset.variable]:`calc(${cssVars.arrowSizeHalf.reference} * -1)`},arrowTip:{transform:placement?ARROW_FLOATING_STYLE[placement.split("-")[0]]:void 0,background:cssVars.arrowBg.reference,top:"0",left:"0",width:"100%",height:"100%",position:"absolute",zIndex:"inherit"},floating:{position:strategy,isolation:"isolate",minWidth:sameWidth?void 0:"max-content",width:sameWidth?"var(--reference-width)":void 0,maxWidth:fitViewport?"var(--available-width)":void 0,maxHeight:fitViewport?"var(--available-height)":void 0,top:"0px",left:"0px",transform:placement?"translate3d(var(--x), var(--y), 0)":"translate3d(0, -100vh, 0)",zIndex:"var(--z-index)"}}}0&&(module.exports={getPlacement,getPlacementSide,getPlacementStyles,isValidPlacement});
"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);
// src/index.ts
var src_exports = {};
__export(src_exports, {
getPlacement: () => getPlacement,
getPlacementSide: () => getPlacementSide,
getPlacementStyles: () => getPlacementStyles,
isValidPlacement: () => isValidPlacement
});
module.exports = __toCommonJS(src_exports);
// src/get-placement.ts
var import_dom = require("@floating-ui/dom");
var import_dom_query2 = require("@zag-js/dom-query");
var import_utils = require("@zag-js/utils");
// src/get-anchor.ts
var import_dom_query = require("@zag-js/dom-query");
function createDOMRect(x = 0, y = 0, width = 0, height = 0) {
if (typeof DOMRect === "function") {
return new DOMRect(x, y, width, height);
}
const rect = {
x,
y,
width,
height,
top: y,
right: x + width,
bottom: y + height,
left: x
};
return { ...rect, toJSON: () => rect };
}
function getDOMRect(anchorRect) {
if (!anchorRect)
return createDOMRect();
const { x, y, width, height } = anchorRect;
return createDOMRect(x, y, width, height);
}
function getAnchorElement(anchorElement, getAnchorRect) {
return {
contextElement: (0, import_dom_query.isHTMLElement)(anchorElement) ? anchorElement : void 0,
getBoundingClientRect: () => {
const anchor = anchorElement;
const anchorRect = getAnchorRect?.(anchor);
if (anchorRect || !anchor) {
return getDOMRect(anchorRect);
}
return anchor.getBoundingClientRect();
}
};
}
// src/middleware.ts
var toVar = (value) => ({ variable: value, reference: `var(${value})` });
var cssVars = {
arrowSize: toVar("--arrow-size"),
arrowSizeHalf: toVar("--arrow-size-half"),
arrowBg: toVar("--arrow-background"),
transformOrigin: toVar("--transform-origin"),
arrowOffset: toVar("--arrow-offset")
};
var getTransformOrigin = (arrow2) => ({
top: "bottom center",
"top-start": arrow2 ? `${arrow2.x}px bottom` : "left bottom",
"top-end": arrow2 ? `${arrow2.x}px bottom` : "right bottom",
bottom: "top center",
"bottom-start": arrow2 ? `${arrow2.x}px top` : "top left",
"bottom-end": arrow2 ? `${arrow2.x}px top` : "top right",
left: "right center",
"left-start": arrow2 ? `right ${arrow2.y}px` : "right top",
"left-end": arrow2 ? `right ${arrow2.y}px` : "right bottom",
right: "left center",
"right-start": arrow2 ? `left ${arrow2.y}px` : "left top",
"right-end": arrow2 ? `left ${arrow2.y}px` : "left bottom"
});
var transformOriginMiddleware = {
name: "transformOrigin",
fn({ placement, elements, middlewareData }) {
const { arrow: arrow2 } = middlewareData;
const transformOrigin = getTransformOrigin(arrow2)[placement];
const { floating } = elements;
floating.style.setProperty(cssVars.transformOrigin.variable, transformOrigin);
return {
data: { transformOrigin }
};
}
};
var rectMiddleware = {
name: "rects",
fn({ rects }) {
return {
data: rects
};
}
};
var shiftArrowMiddleware = (arrowEl) => {
if (!arrowEl)
return;
return {
name: "shiftArrow",
fn({ placement, middlewareData }) {
if (!middlewareData.arrow)
return {};
const { x, y } = middlewareData.arrow;
const dir = placement.split("-")[0];
Object.assign(arrowEl.style, {
left: x != null ? `${x}px` : "",
top: y != null ? `${y}px` : "",
[dir]: `calc(100% + ${cssVars.arrowOffset.reference})`
});
return {};
}
};
};
// src/placement.ts
function isValidPlacement(v) {
return /^(?:top|bottom|left|right)(?:-(?:start|end))?$/.test(v);
}
function getPlacementDetails(placement) {
const [side, align] = placement.split("-");
return { side, align, hasAlign: align != null };
}
function getPlacementSide(placement) {
return placement.split("-")[0];
}
// src/get-placement.ts
var defaultOptions = {
strategy: "absolute",
placement: "bottom",
listeners: true,
gutter: 8,
flip: true,
slide: true,
overlap: false,
sameWidth: false,
fitViewport: false,
overflowPadding: 8,
arrowPadding: 4
};
function roundByDpr(win, value) {
const dpr = win.devicePixelRatio || 1;
return Math.round(value * dpr) / dpr;
}
function getBoundaryMiddleware(opts) {
return (0, import_utils.runIfFn)(opts.boundary);
}
function getArrowMiddleware(arrowElement, opts) {
if (!arrowElement)
return;
return (0, import_dom.arrow)({
element: arrowElement,
padding: opts.arrowPadding
});
}
function getOffsetMiddleware(arrowElement, opts) {
if ((0, import_utils.isNull)(opts.offset ?? opts.gutter))
return;
return (0, import_dom.offset)(({ placement }) => {
const arrowOffset = (arrowElement?.clientHeight || 0) / 2;
const gutter = opts.offset?.mainAxis ?? opts.gutter;
const mainAxis = typeof gutter === "number" ? gutter + arrowOffset : gutter ?? arrowOffset;
const { hasAlign } = getPlacementDetails(placement);
const shift2 = !hasAlign ? opts.shift : void 0;
const crossAxis = opts.offset?.crossAxis ?? shift2;
return (0, import_utils.compact)({
crossAxis,
mainAxis,
alignmentAxis: opts.shift
});
});
}
function getFlipMiddleware(opts) {
if (!opts.flip)
return;
return (0, import_dom.flip)({
boundary: getBoundaryMiddleware(opts),
padding: opts.overflowPadding,
fallbackPlacements: opts.flip === true ? void 0 : opts.flip
});
}
function getShiftMiddleware(opts) {
if (!opts.slide && !opts.overlap)
return;
return (0, import_dom.shift)({
boundary: getBoundaryMiddleware(opts),
mainAxis: opts.slide,
crossAxis: opts.overlap,
padding: opts.overflowPadding,
limiter: (0, import_dom.limitShift)()
});
}
function getSizeMiddleware(opts) {
return (0, import_dom.size)({
padding: opts.overflowPadding,
apply({ elements, rects, availableHeight, availableWidth }) {
const floating = elements.floating;
const referenceWidth = Math.round(rects.reference.width);
availableWidth = Math.floor(availableWidth);
availableHeight = Math.floor(availableHeight);
floating.style.setProperty("--reference-width", `${referenceWidth}px`);
floating.style.setProperty("--available-width", `${availableWidth}px`);
floating.style.setProperty("--available-height", `${availableHeight}px`);
}
});
}
function getAutoUpdateOptions(opts) {
if (!opts)
return {};
if (opts === true) {
return { ancestorResize: true, ancestorScroll: true, elementResize: true, layoutShift: true };
}
return opts;
}
function getPlacementImpl(referenceOrVirtual, floating, opts = {}) {
const reference = getAnchorElement(referenceOrVirtual, opts.getAnchorRect);
if (!floating || !reference)
return;
const options = Object.assign({}, defaultOptions, opts);
const arrowEl = floating.querySelector("[data-part=arrow]");
const middleware = [
getOffsetMiddleware(arrowEl, options),
getFlipMiddleware(options),
getShiftMiddleware(options),
getArrowMiddleware(arrowEl, options),
shiftArrowMiddleware(arrowEl),
transformOriginMiddleware,
getSizeMiddleware(options),
rectMiddleware
];
const { placement, strategy, onComplete, onPositioned } = options;
const updatePosition = async () => {
if (!reference || !floating)
return;
const pos = await (0, import_dom.computePosition)(reference, floating, {
placement,
middleware,
strategy
});
onComplete?.(pos);
onPositioned?.({ placed: true });
const win = (0, import_dom_query2.getWindow)(floating);
const x = roundByDpr(win, pos.x);
const y = roundByDpr(win, pos.y);
floating.style.setProperty("--x", `${x}px`);
floating.style.setProperty("--y", `${y}px`);
const contentEl = floating.firstElementChild;
if (contentEl) {
const zIndex = win.getComputedStyle(contentEl).zIndex;
floating.style.setProperty("--z-index", zIndex);
}
};
const update = async () => {
if (opts.updatePosition) {
await opts.updatePosition({ updatePosition });
onPositioned?.({ placed: true });
} else {
await updatePosition();
}
};
const autoUpdateOptions = getAutoUpdateOptions(options.listeners);
const cancelAutoUpdate = options.listeners ? (0, import_dom.autoUpdate)(reference, floating, update, autoUpdateOptions) : import_utils.noop;
update();
return () => {
cancelAutoUpdate?.();
onPositioned?.({ placed: false });
};
}
function getPlacement(referenceOrFn, floatingOrFn, opts = {}) {
const { defer, ...options } = opts;
const func = defer ? import_dom_query2.raf : (v) => v();
const cleanups = [];
cleanups.push(
func(() => {
const reference = typeof referenceOrFn === "function" ? referenceOrFn() : referenceOrFn;
const floating = typeof floatingOrFn === "function" ? floatingOrFn() : floatingOrFn;
cleanups.push(getPlacementImpl(reference, floating, options));
})
);
return () => {
cleanups.forEach((fn) => fn?.());
};
}
// src/get-styles.ts
var ARROW_FLOATING_STYLE = {
bottom: "rotate(45deg)",
left: "rotate(135deg)",
top: "rotate(225deg)",
right: "rotate(315deg)"
};
function getPlacementStyles(options = {}) {
const { placement, sameWidth, fitViewport, strategy = "absolute" } = options;
return {
arrow: {
position: "absolute",
width: cssVars.arrowSize.reference,
height: cssVars.arrowSize.reference,
[cssVars.arrowSizeHalf.variable]: `calc(${cssVars.arrowSize.reference} / 2)`,
[cssVars.arrowOffset.variable]: `calc(${cssVars.arrowSizeHalf.reference} * -1)`
},
arrowTip: {
transform: placement ? ARROW_FLOATING_STYLE[placement.split("-")[0]] : void 0,
background: cssVars.arrowBg.reference,
top: "0",
left: "0",
width: "100%",
height: "100%",
position: "absolute",
zIndex: "inherit"
},
floating: {
position: strategy,
isolation: "isolate",
minWidth: sameWidth ? void 0 : "max-content",
width: sameWidth ? "var(--reference-width)" : void 0,
maxWidth: fitViewport ? "var(--available-width)" : void 0,
maxHeight: fitViewport ? "var(--available-height)" : void 0,
top: "0px",
left: "0px",
// move off-screen if placement is not defined
transform: placement ? "translate3d(var(--x), var(--y), 0)" : "translate3d(0, -100vh, 0)",
zIndex: "var(--z-index)"
}
};
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
getPlacement,
getPlacementSide,
getPlacementStyles,
isValidPlacement
});
//# sourceMappingURL=index.js.map

6

package.json
{
"name": "@zag-js/popper",
"version": "0.53.0",
"version": "0.54.0",
"description": "Dynamic positioning logic for ui machines",

@@ -27,4 +27,4 @@ "keywords": [

"@floating-ui/dom": "1.6.5",
"@zag-js/dom-query": "0.53.0",
"@zag-js/utils": "0.53.0"
"@zag-js/dom-query": "0.54.0",
"@zag-js/utils": "0.54.0"
},

@@ -31,0 +31,0 @@ "devDependencies": {

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc