@floating-ui/core
Advanced tools
Comparing version 1.1.1 to 1.2.0
@@ -286,4 +286,5 @@ function getAlignment(placement) { | ||
/** | ||
* Positions an inner element of the floating element such that it is centered | ||
* to the reference element. | ||
* A data provider that provides data to position an inner element of the | ||
* floating element (usually a triangle or caret) so that it is centered to the | ||
* reference element. | ||
* @see https://floating-ui.com/docs/arrow | ||
@@ -414,3 +415,3 @@ */ | ||
async fn(middlewareArguments) { | ||
var _middlewareData$autoP, _middlewareData$autoP2, _placementsSortedByLe; | ||
var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE; | ||
const { | ||
@@ -424,2 +425,3 @@ rects, | ||
const { | ||
crossAxis = false, | ||
alignment, | ||
@@ -469,10 +471,15 @@ allowedPlacements = allPlacements, | ||
} | ||
const placementsSortedByLeastOverflow = allOverflows.slice().sort((a, b) => a.overflows[0] - b.overflows[0]); | ||
const placementThatFitsOnAllSides = (_placementsSortedByLe = placementsSortedByLeastOverflow.find(_ref => { | ||
let { | ||
overflows | ||
} = _ref; | ||
return overflows.every(overflow => overflow <= 0); | ||
})) == null ? void 0 : _placementsSortedByLe.placement; | ||
const resetPlacement = placementThatFitsOnAllSides || placementsSortedByLeastOverflow[0].placement; | ||
const placementsSortedByMostSpace = allOverflows.map(d => { | ||
const alignment = getAlignment(d.placement); | ||
return [d.placement, alignment && crossAxis ? | ||
// Check along the mainAxis and main crossAxis side. | ||
d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) : | ||
// Check only the mainAxis. | ||
d.overflows[0], d.overflows]; | ||
}).sort((a, b) => a[1] - b[1]); | ||
const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0, | ||
// Aligned placements should not check their opposite crossAxis | ||
// side. | ||
getAlignment(d[0]) ? 2 : 3).every(v => v <= 0)); | ||
const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0]; | ||
if (resetPlacement !== placement) { | ||
@@ -529,4 +536,8 @@ return { | ||
/** | ||
* Changes the placement of the floating element to one that will fit if the | ||
* initially specified `placement` does not. | ||
* A visibility optimizer that changes the placement of the floating element in | ||
* order to keep it in view. By default, only the opposite placement is tried. | ||
* | ||
* It has the ability to flip to any placement, not just the opposite one. You | ||
* can use a series of “fallback” placements, where each placement is | ||
* progressively tried until the one that fits can be used. | ||
* @see https://floating-ui.com/docs/flip | ||
@@ -588,3 +599,3 @@ */ | ||
if (!overflows.every(side => side <= 0)) { | ||
var _middlewareData$flip2, _overflowsData$find; | ||
var _middlewareData$flip2, _overflowsData$filter; | ||
const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1; | ||
@@ -605,4 +616,5 @@ const nextPlacement = placements[nextIndex]; | ||
// First, try to use the one that fits on mainAxis side of overflow. | ||
let resetPlacement = (_overflowsData$find = overflowsData.find(d => d.overflows[0] <= 0)) == null ? void 0 : _overflowsData$find.placement; | ||
// First, find the candidates that fit on the mainAxis side of overflow, | ||
// then find the placement that fits the best on the main crossAxis side. | ||
let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement; | ||
@@ -651,4 +663,5 @@ // Otherwise fallback. | ||
/** | ||
* Provides data to hide the floating element in applicable situations, such as | ||
* when it is not in the same clipping context as the reference element. | ||
* A data provider that allows you to hide the floating element in applicable | ||
* situations, usually when it’s not within the same clipping context as the | ||
* reference element. | ||
* @see https://floating-ui.com/docs/hide | ||
@@ -858,3 +871,6 @@ */ | ||
/** | ||
* Displaces the floating element from its reference element. | ||
* A placement modifier that translates the floating element along the specified | ||
* axes. | ||
* A number (shorthand for `mainAxis` or distance), or an axes configuration | ||
* object may be passed. | ||
* @see https://floating-ui.com/docs/offset | ||
@@ -889,4 +905,4 @@ */ | ||
/** | ||
* Shifts the floating element in order to keep it in view when it will overflow | ||
* a clipping boundary. | ||
* A visibility optimizer that shifts the floating element along the specified | ||
* axes in order to keep it in view. | ||
* @see https://floating-ui.com/docs/shift | ||
@@ -1058,2 +1074,8 @@ */ | ||
const alignment = getAlignment(placement); | ||
const axis = getMainAxisFromPlacement(placement); | ||
const isXAxis = axis === 'x'; | ||
const { | ||
width, | ||
height | ||
} = rects.floating; | ||
let heightSide; | ||
@@ -1068,16 +1090,33 @@ let widthSide; | ||
} | ||
const xMin = max(overflow.left, 0); | ||
const xMax = max(overflow.right, 0); | ||
const yMin = max(overflow.top, 0); | ||
const yMax = max(overflow.bottom, 0); | ||
const dimensions = { | ||
availableHeight: rects.floating.height - (['left', 'right'].includes(placement) ? 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom)) : overflow[heightSide]), | ||
availableWidth: rects.floating.width - (['top', 'bottom'].includes(placement) ? 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right)) : overflow[widthSide]) | ||
}; | ||
const overflowAvailableHeight = height - overflow[heightSide]; | ||
const overflowAvailableWidth = width - overflow[widthSide]; | ||
let availableHeight = overflowAvailableHeight; | ||
let availableWidth = overflowAvailableWidth; | ||
if (isXAxis) { | ||
availableWidth = min( | ||
// Maximum clipping viewport width | ||
width - overflow.right - overflow.left, overflowAvailableWidth); | ||
} else { | ||
availableHeight = min( | ||
// Maximum clipping viewport height | ||
height - overflow.bottom - overflow.top, overflowAvailableHeight); | ||
} | ||
if (!middlewareArguments.middlewareData.shift && !alignment) { | ||
const xMin = max(overflow.left, 0); | ||
const xMax = max(overflow.right, 0); | ||
const yMin = max(overflow.top, 0); | ||
const yMax = max(overflow.bottom, 0); | ||
if (isXAxis) { | ||
availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right)); | ||
} else { | ||
availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom)); | ||
} | ||
} | ||
await apply({ | ||
...middlewareArguments, | ||
...dimensions | ||
availableWidth, | ||
availableHeight | ||
}); | ||
const nextDimensions = await platform.getDimensions(elements.floating); | ||
if (rects.floating.width !== nextDimensions.width || rects.floating.height !== nextDimensions.height) { | ||
if (width !== nextDimensions.width || height !== nextDimensions.height) { | ||
return { | ||
@@ -1084,0 +1123,0 @@ reset: { |
@@ -291,4 +291,5 @@ (function (global, factory) { | ||
/** | ||
* Positions an inner element of the floating element such that it is centered | ||
* to the reference element. | ||
* A data provider that provides data to position an inner element of the | ||
* floating element (usually a triangle or caret) so that it is centered to the | ||
* reference element. | ||
* @see https://floating-ui.com/docs/arrow | ||
@@ -419,3 +420,3 @@ */ | ||
async fn(middlewareArguments) { | ||
var _middlewareData$autoP, _middlewareData$autoP2, _placementsSortedByLe; | ||
var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE; | ||
const { | ||
@@ -429,2 +430,3 @@ rects, | ||
const { | ||
crossAxis = false, | ||
alignment, | ||
@@ -474,10 +476,15 @@ allowedPlacements = allPlacements, | ||
} | ||
const placementsSortedByLeastOverflow = allOverflows.slice().sort((a, b) => a.overflows[0] - b.overflows[0]); | ||
const placementThatFitsOnAllSides = (_placementsSortedByLe = placementsSortedByLeastOverflow.find(_ref => { | ||
let { | ||
overflows | ||
} = _ref; | ||
return overflows.every(overflow => overflow <= 0); | ||
})) == null ? void 0 : _placementsSortedByLe.placement; | ||
const resetPlacement = placementThatFitsOnAllSides || placementsSortedByLeastOverflow[0].placement; | ||
const placementsSortedByMostSpace = allOverflows.map(d => { | ||
const alignment = getAlignment(d.placement); | ||
return [d.placement, alignment && crossAxis ? | ||
// Check along the mainAxis and main crossAxis side. | ||
d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) : | ||
// Check only the mainAxis. | ||
d.overflows[0], d.overflows]; | ||
}).sort((a, b) => a[1] - b[1]); | ||
const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0, | ||
// Aligned placements should not check their opposite crossAxis | ||
// side. | ||
getAlignment(d[0]) ? 2 : 3).every(v => v <= 0)); | ||
const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0]; | ||
if (resetPlacement !== placement) { | ||
@@ -534,4 +541,8 @@ return { | ||
/** | ||
* Changes the placement of the floating element to one that will fit if the | ||
* initially specified `placement` does not. | ||
* A visibility optimizer that changes the placement of the floating element in | ||
* order to keep it in view. By default, only the opposite placement is tried. | ||
* | ||
* It has the ability to flip to any placement, not just the opposite one. You | ||
* can use a series of “fallback” placements, where each placement is | ||
* progressively tried until the one that fits can be used. | ||
* @see https://floating-ui.com/docs/flip | ||
@@ -593,3 +604,3 @@ */ | ||
if (!overflows.every(side => side <= 0)) { | ||
var _middlewareData$flip2, _overflowsData$find; | ||
var _middlewareData$flip2, _overflowsData$filter; | ||
const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1; | ||
@@ -610,4 +621,5 @@ const nextPlacement = placements[nextIndex]; | ||
// First, try to use the one that fits on mainAxis side of overflow. | ||
let resetPlacement = (_overflowsData$find = overflowsData.find(d => d.overflows[0] <= 0)) == null ? void 0 : _overflowsData$find.placement; | ||
// First, find the candidates that fit on the mainAxis side of overflow, | ||
// then find the placement that fits the best on the main crossAxis side. | ||
let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement; | ||
@@ -656,4 +668,5 @@ // Otherwise fallback. | ||
/** | ||
* Provides data to hide the floating element in applicable situations, such as | ||
* when it is not in the same clipping context as the reference element. | ||
* A data provider that allows you to hide the floating element in applicable | ||
* situations, usually when it’s not within the same clipping context as the | ||
* reference element. | ||
* @see https://floating-ui.com/docs/hide | ||
@@ -863,3 +876,6 @@ */ | ||
/** | ||
* Displaces the floating element from its reference element. | ||
* A placement modifier that translates the floating element along the specified | ||
* axes. | ||
* A number (shorthand for `mainAxis` or distance), or an axes configuration | ||
* object may be passed. | ||
* @see https://floating-ui.com/docs/offset | ||
@@ -894,4 +910,4 @@ */ | ||
/** | ||
* Shifts the floating element in order to keep it in view when it will overflow | ||
* a clipping boundary. | ||
* A visibility optimizer that shifts the floating element along the specified | ||
* axes in order to keep it in view. | ||
* @see https://floating-ui.com/docs/shift | ||
@@ -1063,2 +1079,8 @@ */ | ||
const alignment = getAlignment(placement); | ||
const axis = getMainAxisFromPlacement(placement); | ||
const isXAxis = axis === 'x'; | ||
const { | ||
width, | ||
height | ||
} = rects.floating; | ||
let heightSide; | ||
@@ -1073,16 +1095,33 @@ let widthSide; | ||
} | ||
const xMin = max(overflow.left, 0); | ||
const xMax = max(overflow.right, 0); | ||
const yMin = max(overflow.top, 0); | ||
const yMax = max(overflow.bottom, 0); | ||
const dimensions = { | ||
availableHeight: rects.floating.height - (['left', 'right'].includes(placement) ? 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom)) : overflow[heightSide]), | ||
availableWidth: rects.floating.width - (['top', 'bottom'].includes(placement) ? 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right)) : overflow[widthSide]) | ||
}; | ||
const overflowAvailableHeight = height - overflow[heightSide]; | ||
const overflowAvailableWidth = width - overflow[widthSide]; | ||
let availableHeight = overflowAvailableHeight; | ||
let availableWidth = overflowAvailableWidth; | ||
if (isXAxis) { | ||
availableWidth = min( | ||
// Maximum clipping viewport width | ||
width - overflow.right - overflow.left, overflowAvailableWidth); | ||
} else { | ||
availableHeight = min( | ||
// Maximum clipping viewport height | ||
height - overflow.bottom - overflow.top, overflowAvailableHeight); | ||
} | ||
if (!middlewareArguments.middlewareData.shift && !alignment) { | ||
const xMin = max(overflow.left, 0); | ||
const xMax = max(overflow.right, 0); | ||
const yMin = max(overflow.top, 0); | ||
const yMax = max(overflow.bottom, 0); | ||
if (isXAxis) { | ||
availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right)); | ||
} else { | ||
availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom)); | ||
} | ||
} | ||
await apply({ | ||
...middlewareArguments, | ||
...dimensions | ||
availableWidth, | ||
availableHeight | ||
}); | ||
const nextDimensions = await platform.getDimensions(elements.floating); | ||
if (rects.floating.width !== nextDimensions.width || rects.floating.height !== nextDimensions.height) { | ||
if (width !== nextDimensions.width || height !== nextDimensions.height) { | ||
return { | ||
@@ -1089,0 +1128,0 @@ reset: { |
@@ -1,1 +0,1 @@ | ||
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).FloatingUICore={})}(this,(function(t){"use strict";function e(t){return t.split("-")[1]}function n(t){return"y"===t?"height":"width"}function i(t){return t.split("-")[0]}function o(t){return["top","bottom"].includes(i(t))?"x":"y"}function r(t,r,a){let{reference:l,floating:s}=t;const f=l.x+l.width/2-s.width/2,c=l.y+l.height/2-s.height/2,u=o(r),m=n(u),d=l[m]/2-s[m]/2,g="x"===u;let p;switch(i(r)){case"top":p={x:f,y:l.y-s.height};break;case"bottom":p={x:f,y:l.y+l.height};break;case"right":p={x:l.x+l.width,y:c};break;case"left":p={x:l.x-s.width,y:c};break;default:p={x:l.x,y:l.y}}switch(e(r)){case"start":p[u]-=d*(a&&g?-1:1);break;case"end":p[u]+=d*(a&&g?-1:1)}return p}function a(t){return"number"!=typeof t?function(t){return{top:0,right:0,bottom:0,left:0,...t}}(t):{top:t,right:t,bottom:t,left:t}}function l(t){return{...t,top:t.y,left:t.x,right:t.x+t.width,bottom:t.y+t.height}}async function s(t,e){var n;void 0===e&&(e={});const{x:i,y:o,platform:r,rects:s,elements:f,strategy:c}=t,{boundary:u="clippingAncestors",rootBoundary:m="viewport",elementContext:d="floating",altBoundary:g=!1,padding:p=0}=e,h=a(p),y=f[g?"floating"===d?"reference":"floating":d],x=l(await r.getClippingRect({element:null==(n=await(null==r.isElement?void 0:r.isElement(y)))||n?y:y.contextElement||await(null==r.getDocumentElement?void 0:r.getDocumentElement(f.floating)),boundary:u,rootBoundary:m,strategy:c})),w="floating"===d?{...s.floating,x:i,y:o}:s.reference,v=await(null==r.getOffsetParent?void 0:r.getOffsetParent(f.floating)),b=await(null==r.isElement?void 0:r.isElement(v))&&await(null==r.getScale?void 0:r.getScale(v))||{x:1,y:1},R=l(r.convertOffsetParentRelativeRectToViewportRelativeRect?await r.convertOffsetParentRelativeRectToViewportRelativeRect({rect:w,offsetParent:v,strategy:c}):w);return{top:(x.top-R.top+h.top)/b.y,bottom:(R.bottom-x.bottom+h.bottom)/b.y,left:(x.left-R.left+h.left)/b.x,right:(R.right-x.right+h.right)/b.x}}const f=Math.min,c=Math.max;function u(t,e,n){return c(t,f(e,n))}const m=["top","right","bottom","left"],d=m.reduce(((t,e)=>t.concat(e,e+"-start",e+"-end")),[]),g={left:"right",right:"left",bottom:"top",top:"bottom"};function p(t){return t.replace(/left|right|bottom|top/g,(t=>g[t]))}function h(t,i,r){void 0===r&&(r=!1);const a=e(t),l=o(t),s=n(l);let f="x"===l?a===(r?"end":"start")?"right":"left":"start"===a?"bottom":"top";return i.reference[s]>i.floating[s]&&(f=p(f)),{main:f,cross:p(f)}}const y={start:"end",end:"start"};function x(t){return t.replace(/start|end/g,(t=>y[t]))}function w(t,e){return{top:t.top-e.height,right:t.right-e.width,bottom:t.bottom-e.height,left:t.left-e.width}}function v(t){return m.some((e=>t[e]>=0))}function b(t){return"x"===t?"y":"x"}t.arrow=t=>({name:"arrow",options:t,async fn(i){const{element:r,padding:l=0}=t||{},{x:s,y:f,placement:c,rects:m,platform:d}=i;if(null==r)return{};const g=a(l),p={x:s,y:f},h=o(c),y=n(h),x=await d.getDimensions(r),w="y"===h?"top":"left",v="y"===h?"bottom":"right",b=m.reference[y]+m.reference[h]-p[h]-m.floating[y],R=p[h]-m.reference[h],A=await(null==d.getOffsetParent?void 0:d.getOffsetParent(r));let P=A?"y"===h?A.clientHeight||0:A.clientWidth||0:0;0===P&&(P=m.floating[y]);const T=b/2-R/2,O=g[w],D=P-x[y]-g[v],E=P/2-x[y]/2+T,L=u(O,E,D),k=null!=e(c)&&E!=L&&m.reference[y]/2-(E<O?g[w]:g[v])-x[y]/2<0;return{[h]:p[h]-(k?E<O?O-E:D-E:0),data:{[h]:L,centerOffset:E-L}}}}),t.autoPlacement=function(t){return void 0===t&&(t={}),{name:"autoPlacement",options:t,async fn(n){var o,r,a;const{rects:l,middlewareData:f,placement:c,platform:u,elements:m}=n,{alignment:g,allowedPlacements:p=d,autoAlignment:y=!0,...w}=t,v=void 0!==g||p===d?function(t,n,o){return(t?[...o.filter((n=>e(n)===t)),...o.filter((n=>e(n)!==t))]:o.filter((t=>i(t)===t))).filter((i=>!t||e(i)===t||!!n&&x(i)!==i))}(g||null,y,p):p,b=await s(n,w),R=(null==(o=f.autoPlacement)?void 0:o.index)||0,A=v[R];if(null==A)return{};const{main:P,cross:T}=h(A,l,await(null==u.isRTL?void 0:u.isRTL(m.floating)));if(c!==A)return{reset:{placement:v[0]}};const O=[b[i(A)],b[P],b[T]],D=[...(null==(r=f.autoPlacement)?void 0:r.overflows)||[],{placement:A,overflows:O}],E=v[R+1];if(E)return{data:{index:R+1,overflows:D},reset:{placement:E}};const L=D.slice().sort(((t,e)=>t.overflows[0]-e.overflows[0])),k=null==(a=L.find((t=>{let{overflows:e}=t;return e.every((t=>t<=0))})))?void 0:a.placement,C=k||L[0].placement;return C!==c?{data:{index:R+1,overflows:D},reset:{placement:C}}:{}}}},t.computePosition=async(t,e,n)=>{const{placement:i="bottom",strategy:o="absolute",middleware:a=[],platform:l}=n,s=a.filter(Boolean),f=await(null==l.isRTL?void 0:l.isRTL(e));let c=await l.getElementRects({reference:t,floating:e,strategy:o}),{x:u,y:m}=r(c,i,f),d=i,g={},p=0;for(let n=0;n<s.length;n++){const{name:a,fn:h}=s[n],{x:y,y:x,data:w,reset:v}=await h({x:u,y:m,initialPlacement:i,placement:d,strategy:o,middlewareData:g,rects:c,platform:l,elements:{reference:t,floating:e}});u=null!=y?y:u,m=null!=x?x:m,g={...g,[a]:{...g[a],...w}},v&&p<=50&&(p++,"object"==typeof v&&(v.placement&&(d=v.placement),v.rects&&(c=!0===v.rects?await l.getElementRects({reference:t,floating:e,strategy:o}):v.rects),({x:u,y:m}=r(c,d,f))),n=-1)}return{x:u,y:m,placement:d,strategy:o,middlewareData:g}},t.detectOverflow=s,t.flip=function(t){return void 0===t&&(t={}),{name:"flip",options:t,async fn(n){var o;const{placement:r,middlewareData:a,rects:l,initialPlacement:f,platform:c,elements:u}=n,{mainAxis:m=!0,crossAxis:d=!0,fallbackPlacements:g,fallbackStrategy:y="bestFit",fallbackAxisSideDirection:w="none",flipAlignment:v=!0,...b}=t,R=i(r),A=i(f)===f,P=await(null==c.isRTL?void 0:c.isRTL(u.floating)),T=g||(A||!v?[p(f)]:function(t){const e=p(t);return[x(t),e,x(e)]}(f));g||"none"===w||T.push(...function(t,n,o,r){const a=e(t);let l=function(t,e,n){const i=["left","right"],o=["right","left"],r=["top","bottom"],a=["bottom","top"];switch(t){case"top":case"bottom":return n?e?o:i:e?i:o;case"left":case"right":return e?r:a;default:return[]}}(i(t),"start"===o,r);return a&&(l=l.map((t=>t+"-"+a)),n&&(l=l.concat(l.map(x)))),l}(f,v,w,P));const O=[f,...T],D=await s(n,b),E=[];let L=(null==(o=a.flip)?void 0:o.overflows)||[];if(m&&E.push(D[R]),d){const{main:t,cross:e}=h(r,l,P);E.push(D[t],D[e])}if(L=[...L,{placement:r,overflows:E}],!E.every((t=>t<=0))){var k,C;const t=((null==(k=a.flip)?void 0:k.index)||0)+1,e=O[t];if(e)return{data:{index:t,overflows:L},reset:{placement:e}};let n=null==(C=L.find((t=>t.overflows[0]<=0)))?void 0:C.placement;if(!n)switch(y){case"bestFit":{var B;const t=null==(B=L.map((t=>[t.placement,t.overflows.filter((t=>t>0)).reduce(((t,e)=>t+e),0)])).sort(((t,e)=>t[1]-e[1]))[0])?void 0:B[0];t&&(n=t);break}case"initialPlacement":n=f}if(r!==n)return{reset:{placement:n}}}return{}}}},t.hide=function(t){return void 0===t&&(t={}),{name:"hide",options:t,async fn(e){const{strategy:n="referenceHidden",...i}=t,{rects:o}=e;switch(n){case"referenceHidden":{const t=w(await s(e,{...i,elementContext:"reference"}),o.reference);return{data:{referenceHiddenOffsets:t,referenceHidden:v(t)}}}case"escaped":{const t=w(await s(e,{...i,altBoundary:!0}),o.floating);return{data:{escapedOffsets:t,escaped:v(t)}}}default:return{}}}}},t.inline=function(t){return void 0===t&&(t={}),{name:"inline",options:t,async fn(e){const{placement:n,elements:r,rects:s,platform:u,strategy:m}=e,{padding:d=2,x:g,y:p}=t,h=l(u.convertOffsetParentRelativeRectToViewportRelativeRect?await u.convertOffsetParentRelativeRectToViewportRelativeRect({rect:s.reference,offsetParent:await(null==u.getOffsetParent?void 0:u.getOffsetParent(r.floating)),strategy:m}):s.reference),y=await(null==u.getClientRects?void 0:u.getClientRects(r.reference))||[],x=a(d);const w=await u.getElementRects({reference:{getBoundingClientRect:function(){if(2===y.length&&y[0].left>y[1].right&&null!=g&&null!=p)return y.find((t=>g>t.left-x.left&&g<t.right+x.right&&p>t.top-x.top&&p<t.bottom+x.bottom))||h;if(y.length>=2){if("x"===o(n)){const t=y[0],e=y[y.length-1],o="top"===i(n),r=t.top,a=e.bottom,l=o?t.left:e.left,s=o?t.right:e.right;return{top:r,bottom:a,left:l,right:s,width:s-l,height:a-r,x:l,y:r}}const t="left"===i(n),e=c(...y.map((t=>t.right))),r=f(...y.map((t=>t.left))),a=y.filter((n=>t?n.left===r:n.right===e)),l=a[0].top,s=a[a.length-1].bottom;return{top:l,bottom:s,left:r,right:e,width:e-r,height:s-l,x:r,y:l}}return h}},floating:r.floating,strategy:m});return s.reference.x!==w.reference.x||s.reference.y!==w.reference.y||s.reference.width!==w.reference.width||s.reference.height!==w.reference.height?{reset:{rects:w}}:{}}}},t.limitShift=function(t){return void 0===t&&(t={}),{options:t,fn(e){const{x:n,y:r,placement:a,rects:l,middlewareData:s}=e,{offset:f=0,mainAxis:c=!0,crossAxis:u=!0}=t,m={x:n,y:r},d=o(a),g=b(d);let p=m[d],h=m[g];const y="function"==typeof f?f(e):f,x="number"==typeof y?{mainAxis:y,crossAxis:0}:{mainAxis:0,crossAxis:0,...y};if(c){const t="y"===d?"height":"width",e=l.reference[d]-l.floating[t]+x.mainAxis,n=l.reference[d]+l.reference[t]-x.mainAxis;p<e?p=e:p>n&&(p=n)}if(u){var w,v;const t="y"===d?"width":"height",e=["top","left"].includes(i(a)),n=l.reference[g]-l.floating[t]+(e&&(null==(w=s.offset)?void 0:w[g])||0)+(e?0:x.crossAxis),o=l.reference[g]+l.reference[t]+(e?0:(null==(v=s.offset)?void 0:v[g])||0)-(e?x.crossAxis:0);h<n?h=n:h>o&&(h=o)}return{[d]:p,[g]:h}}}},t.offset=function(t){return void 0===t&&(t=0),{name:"offset",options:t,async fn(n){const{x:r,y:a}=n,l=await async function(t,n){const{placement:r,platform:a,elements:l}=t,s=await(null==a.isRTL?void 0:a.isRTL(l.floating)),f=i(r),c=e(r),u="x"===o(r),m=["left","top"].includes(f)?-1:1,d=s&&u?-1:1,g="function"==typeof n?n(t):n;let{mainAxis:p,crossAxis:h,alignmentAxis:y}="number"==typeof g?{mainAxis:g,crossAxis:0,alignmentAxis:null}:{mainAxis:0,crossAxis:0,alignmentAxis:null,...g};return c&&"number"==typeof y&&(h="end"===c?-1*y:y),u?{x:h*d,y:p*m}:{x:p*m,y:h*d}}(n,t);return{x:r+l.x,y:a+l.y,data:l}}}},t.rectToClientRect=l,t.shift=function(t){return void 0===t&&(t={}),{name:"shift",options:t,async fn(e){const{x:n,y:r,placement:a}=e,{mainAxis:l=!0,crossAxis:f=!1,limiter:c={fn:t=>{let{x:e,y:n}=t;return{x:e,y:n}}},...m}=t,d={x:n,y:r},g=await s(e,m),p=o(i(a)),h=b(p);let y=d[p],x=d[h];if(l){const t="y"===p?"bottom":"right";y=u(y+g["y"===p?"top":"left"],y,y-g[t])}if(f){const t="y"===h?"bottom":"right";x=u(x+g["y"===h?"top":"left"],x,x-g[t])}const w=c.fn({...e,[p]:y,[h]:x});return{...w,data:{x:w.x-n,y:w.y-r}}}}},t.size=function(t){return void 0===t&&(t={}),{name:"size",options:t,async fn(n){const{placement:o,rects:r,platform:a,elements:l}=n,{apply:f=(()=>{}),...u}=t,m=await s(n,u),d=i(o),g=e(o);let p,h;"top"===d||"bottom"===d?(p=d,h=g===(await(null==a.isRTL?void 0:a.isRTL(l.floating))?"start":"end")?"left":"right"):(h=d,p="end"===g?"top":"bottom");const y=c(m.left,0),x=c(m.right,0),w=c(m.top,0),v=c(m.bottom,0),b={availableHeight:r.floating.height-(["left","right"].includes(o)?2*(0!==w||0!==v?w+v:c(m.top,m.bottom)):m[p]),availableWidth:r.floating.width-(["top","bottom"].includes(o)?2*(0!==y||0!==x?y+x:c(m.left,m.right)):m[h])};await f({...n,...b});const R=await a.getDimensions(l.floating);return r.floating.width!==R.width||r.floating.height!==R.height?{reset:{rects:!0}}:{}}}},Object.defineProperty(t,"__esModule",{value:!0})})); | ||
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).FloatingUICore={})}(this,(function(t){"use strict";function e(t){return t.split("-")[1]}function n(t){return"y"===t?"height":"width"}function o(t){return t.split("-")[0]}function i(t){return["top","bottom"].includes(o(t))?"x":"y"}function r(t,r,a){let{reference:l,floating:s}=t;const f=l.x+l.width/2-s.width/2,c=l.y+l.height/2-s.height/2,u=i(r),m=n(u),d=l[m]/2-s[m]/2,g="x"===u;let p;switch(o(r)){case"top":p={x:f,y:l.y-s.height};break;case"bottom":p={x:f,y:l.y+l.height};break;case"right":p={x:l.x+l.width,y:c};break;case"left":p={x:l.x-s.width,y:c};break;default:p={x:l.x,y:l.y}}switch(e(r)){case"start":p[u]-=d*(a&&g?-1:1);break;case"end":p[u]+=d*(a&&g?-1:1)}return p}function a(t){return"number"!=typeof t?function(t){return{top:0,right:0,bottom:0,left:0,...t}}(t):{top:t,right:t,bottom:t,left:t}}function l(t){return{...t,top:t.y,left:t.x,right:t.x+t.width,bottom:t.y+t.height}}async function s(t,e){var n;void 0===e&&(e={});const{x:o,y:i,platform:r,rects:s,elements:f,strategy:c}=t,{boundary:u="clippingAncestors",rootBoundary:m="viewport",elementContext:d="floating",altBoundary:g=!1,padding:p=0}=e,h=a(p),y=f[g?"floating"===d?"reference":"floating":d],x=l(await r.getClippingRect({element:null==(n=await(null==r.isElement?void 0:r.isElement(y)))||n?y:y.contextElement||await(null==r.getDocumentElement?void 0:r.getDocumentElement(f.floating)),boundary:u,rootBoundary:m,strategy:c})),w="floating"===d?{...s.floating,x:o,y:i}:s.reference,v=await(null==r.getOffsetParent?void 0:r.getOffsetParent(f.floating)),b=await(null==r.isElement?void 0:r.isElement(v))&&await(null==r.getScale?void 0:r.getScale(v))||{x:1,y:1},R=l(r.convertOffsetParentRelativeRectToViewportRelativeRect?await r.convertOffsetParentRelativeRectToViewportRelativeRect({rect:w,offsetParent:v,strategy:c}):w);return{top:(x.top-R.top+h.top)/b.y,bottom:(R.bottom-x.bottom+h.bottom)/b.y,left:(x.left-R.left+h.left)/b.x,right:(R.right-x.right+h.right)/b.x}}const f=Math.min,c=Math.max;function u(t,e,n){return c(t,f(e,n))}const m=["top","right","bottom","left"],d=m.reduce(((t,e)=>t.concat(e,e+"-start",e+"-end")),[]),g={left:"right",right:"left",bottom:"top",top:"bottom"};function p(t){return t.replace(/left|right|bottom|top/g,(t=>g[t]))}function h(t,o,r){void 0===r&&(r=!1);const a=e(t),l=i(t),s=n(l);let f="x"===l?a===(r?"end":"start")?"right":"left":"start"===a?"bottom":"top";return o.reference[s]>o.floating[s]&&(f=p(f)),{main:f,cross:p(f)}}const y={start:"end",end:"start"};function x(t){return t.replace(/start|end/g,(t=>y[t]))}function w(t,e){return{top:t.top-e.height,right:t.right-e.width,bottom:t.bottom-e.height,left:t.left-e.width}}function v(t){return m.some((e=>t[e]>=0))}function b(t){return"x"===t?"y":"x"}t.arrow=t=>({name:"arrow",options:t,async fn(o){const{element:r,padding:l=0}=t||{},{x:s,y:f,placement:c,rects:m,platform:d}=o;if(null==r)return{};const g=a(l),p={x:s,y:f},h=i(c),y=n(h),x=await d.getDimensions(r),w="y"===h?"top":"left",v="y"===h?"bottom":"right",b=m.reference[y]+m.reference[h]-p[h]-m.floating[y],R=p[h]-m.reference[h],A=await(null==d.getOffsetParent?void 0:d.getOffsetParent(r));let P=A?"y"===h?A.clientHeight||0:A.clientWidth||0:0;0===P&&(P=m.floating[y]);const T=b/2-R/2,O=g[w],D=P-x[y]-g[v],E=P/2-x[y]/2+T,L=u(O,E,D),k=null!=e(c)&&E!=L&&m.reference[y]/2-(E<O?g[w]:g[v])-x[y]/2<0;return{[h]:p[h]-(k?E<O?O-E:D-E:0),data:{[h]:L,centerOffset:E-L}}}}),t.autoPlacement=function(t){return void 0===t&&(t={}),{name:"autoPlacement",options:t,async fn(n){var i,r,a;const{rects:l,middlewareData:f,placement:c,platform:u,elements:m}=n,{crossAxis:g=!1,alignment:p,allowedPlacements:y=d,autoAlignment:w=!0,...v}=t,b=void 0!==p||y===d?function(t,n,i){return(t?[...i.filter((n=>e(n)===t)),...i.filter((n=>e(n)!==t))]:i.filter((t=>o(t)===t))).filter((o=>!t||e(o)===t||!!n&&x(o)!==o))}(p||null,w,y):y,R=await s(n,v),A=(null==(i=f.autoPlacement)?void 0:i.index)||0,P=b[A];if(null==P)return{};const{main:T,cross:O}=h(P,l,await(null==u.isRTL?void 0:u.isRTL(m.floating)));if(c!==P)return{reset:{placement:b[0]}};const D=[R[o(P)],R[T],R[O]],E=[...(null==(r=f.autoPlacement)?void 0:r.overflows)||[],{placement:P,overflows:D}],L=b[A+1];if(L)return{data:{index:A+1,overflows:E},reset:{placement:L}};const k=E.map((t=>{const n=e(t.placement);return[t.placement,n&&g?t.overflows.slice(0,2).reduce(((t,e)=>t+e),0):t.overflows[0],t.overflows]})).sort(((t,e)=>t[1]-e[1])),C=(null==(a=k.filter((t=>t[2].slice(0,e(t[0])?2:3).every((t=>t<=0))))[0])?void 0:a[0])||k[0][0];return C!==c?{data:{index:A+1,overflows:E},reset:{placement:C}}:{}}}},t.computePosition=async(t,e,n)=>{const{placement:o="bottom",strategy:i="absolute",middleware:a=[],platform:l}=n,s=a.filter(Boolean),f=await(null==l.isRTL?void 0:l.isRTL(e));let c=await l.getElementRects({reference:t,floating:e,strategy:i}),{x:u,y:m}=r(c,o,f),d=o,g={},p=0;for(let n=0;n<s.length;n++){const{name:a,fn:h}=s[n],{x:y,y:x,data:w,reset:v}=await h({x:u,y:m,initialPlacement:o,placement:d,strategy:i,middlewareData:g,rects:c,platform:l,elements:{reference:t,floating:e}});u=null!=y?y:u,m=null!=x?x:m,g={...g,[a]:{...g[a],...w}},v&&p<=50&&(p++,"object"==typeof v&&(v.placement&&(d=v.placement),v.rects&&(c=!0===v.rects?await l.getElementRects({reference:t,floating:e,strategy:i}):v.rects),({x:u,y:m}=r(c,d,f))),n=-1)}return{x:u,y:m,placement:d,strategy:i,middlewareData:g}},t.detectOverflow=s,t.flip=function(t){return void 0===t&&(t={}),{name:"flip",options:t,async fn(n){var i;const{placement:r,middlewareData:a,rects:l,initialPlacement:f,platform:c,elements:u}=n,{mainAxis:m=!0,crossAxis:d=!0,fallbackPlacements:g,fallbackStrategy:y="bestFit",fallbackAxisSideDirection:w="none",flipAlignment:v=!0,...b}=t,R=o(r),A=o(f)===f,P=await(null==c.isRTL?void 0:c.isRTL(u.floating)),T=g||(A||!v?[p(f)]:function(t){const e=p(t);return[x(t),e,x(e)]}(f));g||"none"===w||T.push(...function(t,n,i,r){const a=e(t);let l=function(t,e,n){const o=["left","right"],i=["right","left"],r=["top","bottom"],a=["bottom","top"];switch(t){case"top":case"bottom":return n?e?i:o:e?o:i;case"left":case"right":return e?r:a;default:return[]}}(o(t),"start"===i,r);return a&&(l=l.map((t=>t+"-"+a)),n&&(l=l.concat(l.map(x)))),l}(f,v,w,P));const O=[f,...T],D=await s(n,b),E=[];let L=(null==(i=a.flip)?void 0:i.overflows)||[];if(m&&E.push(D[R]),d){const{main:t,cross:e}=h(r,l,P);E.push(D[t],D[e])}if(L=[...L,{placement:r,overflows:E}],!E.every((t=>t<=0))){var k,C;const t=((null==(k=a.flip)?void 0:k.index)||0)+1,e=O[t];if(e)return{data:{index:t,overflows:L},reset:{placement:e}};let n=null==(C=L.filter((t=>t.overflows[0]<=0)).sort(((t,e)=>t.overflows[1]-e.overflows[1]))[0])?void 0:C.placement;if(!n)switch(y){case"bestFit":{var B;const t=null==(B=L.map((t=>[t.placement,t.overflows.filter((t=>t>0)).reduce(((t,e)=>t+e),0)])).sort(((t,e)=>t[1]-e[1]))[0])?void 0:B[0];t&&(n=t);break}case"initialPlacement":n=f}if(r!==n)return{reset:{placement:n}}}return{}}}},t.hide=function(t){return void 0===t&&(t={}),{name:"hide",options:t,async fn(e){const{strategy:n="referenceHidden",...o}=t,{rects:i}=e;switch(n){case"referenceHidden":{const t=w(await s(e,{...o,elementContext:"reference"}),i.reference);return{data:{referenceHiddenOffsets:t,referenceHidden:v(t)}}}case"escaped":{const t=w(await s(e,{...o,altBoundary:!0}),i.floating);return{data:{escapedOffsets:t,escaped:v(t)}}}default:return{}}}}},t.inline=function(t){return void 0===t&&(t={}),{name:"inline",options:t,async fn(e){const{placement:n,elements:r,rects:s,platform:u,strategy:m}=e,{padding:d=2,x:g,y:p}=t,h=l(u.convertOffsetParentRelativeRectToViewportRelativeRect?await u.convertOffsetParentRelativeRectToViewportRelativeRect({rect:s.reference,offsetParent:await(null==u.getOffsetParent?void 0:u.getOffsetParent(r.floating)),strategy:m}):s.reference),y=await(null==u.getClientRects?void 0:u.getClientRects(r.reference))||[],x=a(d);const w=await u.getElementRects({reference:{getBoundingClientRect:function(){if(2===y.length&&y[0].left>y[1].right&&null!=g&&null!=p)return y.find((t=>g>t.left-x.left&&g<t.right+x.right&&p>t.top-x.top&&p<t.bottom+x.bottom))||h;if(y.length>=2){if("x"===i(n)){const t=y[0],e=y[y.length-1],i="top"===o(n),r=t.top,a=e.bottom,l=i?t.left:e.left,s=i?t.right:e.right;return{top:r,bottom:a,left:l,right:s,width:s-l,height:a-r,x:l,y:r}}const t="left"===o(n),e=c(...y.map((t=>t.right))),r=f(...y.map((t=>t.left))),a=y.filter((n=>t?n.left===r:n.right===e)),l=a[0].top,s=a[a.length-1].bottom;return{top:l,bottom:s,left:r,right:e,width:e-r,height:s-l,x:r,y:l}}return h}},floating:r.floating,strategy:m});return s.reference.x!==w.reference.x||s.reference.y!==w.reference.y||s.reference.width!==w.reference.width||s.reference.height!==w.reference.height?{reset:{rects:w}}:{}}}},t.limitShift=function(t){return void 0===t&&(t={}),{options:t,fn(e){const{x:n,y:r,placement:a,rects:l,middlewareData:s}=e,{offset:f=0,mainAxis:c=!0,crossAxis:u=!0}=t,m={x:n,y:r},d=i(a),g=b(d);let p=m[d],h=m[g];const y="function"==typeof f?f(e):f,x="number"==typeof y?{mainAxis:y,crossAxis:0}:{mainAxis:0,crossAxis:0,...y};if(c){const t="y"===d?"height":"width",e=l.reference[d]-l.floating[t]+x.mainAxis,n=l.reference[d]+l.reference[t]-x.mainAxis;p<e?p=e:p>n&&(p=n)}if(u){var w,v;const t="y"===d?"width":"height",e=["top","left"].includes(o(a)),n=l.reference[g]-l.floating[t]+(e&&(null==(w=s.offset)?void 0:w[g])||0)+(e?0:x.crossAxis),i=l.reference[g]+l.reference[t]+(e?0:(null==(v=s.offset)?void 0:v[g])||0)-(e?x.crossAxis:0);h<n?h=n:h>i&&(h=i)}return{[d]:p,[g]:h}}}},t.offset=function(t){return void 0===t&&(t=0),{name:"offset",options:t,async fn(n){const{x:r,y:a}=n,l=await async function(t,n){const{placement:r,platform:a,elements:l}=t,s=await(null==a.isRTL?void 0:a.isRTL(l.floating)),f=o(r),c=e(r),u="x"===i(r),m=["left","top"].includes(f)?-1:1,d=s&&u?-1:1,g="function"==typeof n?n(t):n;let{mainAxis:p,crossAxis:h,alignmentAxis:y}="number"==typeof g?{mainAxis:g,crossAxis:0,alignmentAxis:null}:{mainAxis:0,crossAxis:0,alignmentAxis:null,...g};return c&&"number"==typeof y&&(h="end"===c?-1*y:y),u?{x:h*d,y:p*m}:{x:p*m,y:h*d}}(n,t);return{x:r+l.x,y:a+l.y,data:l}}}},t.rectToClientRect=l,t.shift=function(t){return void 0===t&&(t={}),{name:"shift",options:t,async fn(e){const{x:n,y:r,placement:a}=e,{mainAxis:l=!0,crossAxis:f=!1,limiter:c={fn:t=>{let{x:e,y:n}=t;return{x:e,y:n}}},...m}=t,d={x:n,y:r},g=await s(e,m),p=i(o(a)),h=b(p);let y=d[p],x=d[h];if(l){const t="y"===p?"bottom":"right";y=u(y+g["y"===p?"top":"left"],y,y-g[t])}if(f){const t="y"===h?"bottom":"right";x=u(x+g["y"===h?"top":"left"],x,x-g[t])}const w=c.fn({...e,[p]:y,[h]:x});return{...w,data:{x:w.x-n,y:w.y-r}}}}},t.size=function(t){return void 0===t&&(t={}),{name:"size",options:t,async fn(n){const{placement:r,rects:a,platform:l,elements:u}=n,{apply:m=(()=>{}),...d}=t,g=await s(n,d),p=o(r),h=e(r),y="x"===i(r),{width:x,height:w}=a.floating;let v,b;"top"===p||"bottom"===p?(v=p,b=h===(await(null==l.isRTL?void 0:l.isRTL(u.floating))?"start":"end")?"left":"right"):(b=p,v="end"===h?"top":"bottom");const R=w-g[v],A=x-g[b];let P=R,T=A;if(y?T=f(x-g.right-g.left,A):P=f(w-g.bottom-g.top,R),!n.middlewareData.shift&&!h){const t=c(g.left,0),e=c(g.right,0),n=c(g.top,0),o=c(g.bottom,0);y?T=x-2*(0!==t||0!==e?t+e:c(g.left,g.right)):P=w-2*(0!==n||0!==o?n+o:c(g.top,g.bottom))}await m({...n,availableWidth:T,availableHeight:P});const O=await l.getDimensions(u.floating);return x!==O.width||w!==O.height?{reset:{rects:!0}}:{}}}},Object.defineProperty(t,"__esModule",{value:!0})})); |
{ | ||
"name": "@floating-ui/core", | ||
"version": "1.1.1", | ||
"version": "1.2.0", | ||
"@rollingversions": { | ||
@@ -5,0 +5,0 @@ "baseVersion": [ |
import type { Boundary, ElementContext, MiddlewareArguments, Padding, RootBoundary, SideObject } from './types'; | ||
export interface Options { | ||
/** | ||
* The clipping element(s) in which overflow will be checked. | ||
* The clipping element(s) or area in which overflow will be checked. | ||
* @default 'clippingAncestors' | ||
@@ -9,3 +9,3 @@ */ | ||
/** | ||
* The root clipping element in which overflow will be checked. | ||
* The root clipping area in which overflow will be checked. | ||
* @default 'viewport' | ||
@@ -26,3 +26,3 @@ */ | ||
/** | ||
* Virtual padding for the resolved overflow offsets. | ||
* Virtual padding for the resolved overflow detection offsets. | ||
* @default 0 | ||
@@ -29,0 +29,0 @@ */ |
@@ -16,6 +16,7 @@ import type { Middleware, Padding } from '../types'; | ||
/** | ||
* Positions an inner element of the floating element such that it is centered | ||
* to the reference element. | ||
* A data provider that provides data to position an inner element of the | ||
* floating element (usually a triangle or caret) so that it is centered to the | ||
* reference element. | ||
* @see https://floating-ui.com/docs/arrow | ||
*/ | ||
export declare const arrow: (options: Options) => Middleware; |
@@ -6,2 +6,8 @@ import { Options as DetectOverflowOptions } from '../detectOverflow'; | ||
/** | ||
* The axis that runs along the alignment of the floating element. Determines | ||
* whether to check for most space along this axis. | ||
* @default false | ||
*/ | ||
crossAxis: boolean; | ||
/** | ||
* Choose placements with a particular alignment. | ||
@@ -12,13 +18,13 @@ * @default undefined | ||
/** | ||
* Whether to choose placements with the opposite alignment if the preferred | ||
* alignment does not fit. | ||
* @default true | ||
*/ | ||
autoAlignment: boolean; | ||
/** | ||
* Which placements are allowed to be chosen. Placements must be within the | ||
* `alignment` option set. | ||
* `alignment` option if explicitly set. | ||
* @default allPlacements (variable) | ||
*/ | ||
allowedPlacements: Array<Placement>; | ||
/** | ||
* Whether to choose placements with the opposite alignment if they will fit | ||
* better. | ||
* @default true | ||
*/ | ||
autoAlignment: boolean; | ||
} | ||
@@ -25,0 +31,0 @@ /** |
@@ -5,3 +5,4 @@ import { Options as DetectOverflowOptions } from '../detectOverflow'; | ||
/** | ||
* The axis that runs along the side of the floating element. | ||
* The axis that runs along the side of the floating element. Determines | ||
* whether overflow along this axis is checked to perform a flip. | ||
* @default true | ||
@@ -11,3 +12,4 @@ */ | ||
/** | ||
* The axis that runs along the alignment of the floating element. | ||
* The axis that runs along the alignment of the floating element. Determines | ||
* whether overflow along this axis is checked to perform a flip. | ||
* @default true | ||
@@ -17,3 +19,3 @@ */ | ||
/** | ||
* Placements to try if the preferred `placement` does not fit. | ||
* Placements to try sequentially if the preferred `placement` does not fit. | ||
* @default [oppositePlacement] (computed) | ||
@@ -28,4 +30,4 @@ */ | ||
/** | ||
* Whether to allow fallback to the opposite axis, and if so, which | ||
* side direction of the axis to prefer. | ||
* Whether to allow fallback to the perpendicular axis of the preferred | ||
* placement, and if so, which side direction along the axis to prefer. | ||
* @default 'none' (disallow fallback) | ||
@@ -42,6 +44,10 @@ */ | ||
/** | ||
* Changes the placement of the floating element to one that will fit if the | ||
* initially specified `placement` does not. | ||
* A visibility optimizer that changes the placement of the floating element in | ||
* order to keep it in view. By default, only the opposite placement is tried. | ||
* | ||
* It has the ability to flip to any placement, not just the opposite one. You | ||
* can use a series of “fallback” placements, where each placement is | ||
* progressively tried until the one that fits can be used. | ||
* @see https://floating-ui.com/docs/flip | ||
*/ | ||
export declare const flip: (options?: Partial<Options & DetectOverflowOptions>) => Middleware; |
import { Options as DetectOverflowOptions } from '../detectOverflow'; | ||
import type { Middleware } from '../types'; | ||
export interface Options { | ||
/** | ||
* The strategy used to determine when to hide the floating element. | ||
*/ | ||
strategy: 'referenceHidden' | 'escaped'; | ||
} | ||
/** | ||
* Provides data to hide the floating element in applicable situations, such as | ||
* when it is not in the same clipping context as the reference element. | ||
* A data provider that allows you to hide the floating element in applicable | ||
* situations, usually when it’s not within the same clipping context as the | ||
* reference element. | ||
* @see https://floating-ui.com/docs/hide | ||
*/ | ||
export declare const hide: (options?: Partial<Options & DetectOverflowOptions>) => Middleware; |
import type { Coords, Middleware, MiddlewareArguments } from '../types'; | ||
type OffsetValue = number | { | ||
/** | ||
* The axis that runs along the side of the floating element. | ||
* The axis that runs along the side of the floating element. Represents | ||
* the distance (gutter or margin) between the reference and floating | ||
* element. | ||
* @default 0 | ||
@@ -10,2 +12,3 @@ */ | ||
* The axis that runs along the alignment of the floating element. | ||
* Represents the skidding between the reference and floating element. | ||
* @default 0 | ||
@@ -15,6 +18,9 @@ */ | ||
/** | ||
* When set to a number, overrides the `crossAxis` value for aligned | ||
* (non-centered/base) placements and works logically. A positive number | ||
* will move the floating element in the direction of the opposite edge | ||
* to the one that is aligned, while a negative number the reverse. | ||
* The same axis as `crossAxis` but applies only to aligned placements | ||
* and inverts the `end` alignment. When set to a number, it overrides the | ||
* `crossAxis` value. | ||
* | ||
* A positive number will move the floating element in the direction of | ||
* the opposite edge to the one that is aligned, while a negative number | ||
* the reverse. | ||
* @default null | ||
@@ -28,3 +34,6 @@ */ | ||
/** | ||
* Displaces the floating element from its reference element. | ||
* A placement modifier that translates the floating element along the specified | ||
* axes. | ||
* A number (shorthand for `mainAxis` or distance), or an axes configuration | ||
* object may be passed. | ||
* @see https://floating-ui.com/docs/offset | ||
@@ -31,0 +40,0 @@ */ |
@@ -5,3 +5,4 @@ import { Options as DetectOverflowOptions } from '../detectOverflow'; | ||
/** | ||
* The axis that runs along the alignment of the floating element. | ||
* The axis that runs along the alignment of the floating element. Determines | ||
* whether overflow along this axis is checked to perform shifting. | ||
* @default true | ||
@@ -11,3 +12,4 @@ */ | ||
/** | ||
* The axis that runs along the side of the floating element. | ||
* The axis that runs along the side of the floating element. Determines | ||
* whether overflow along this axis is checked to perform shifting. | ||
* @default false | ||
@@ -26,4 +28,4 @@ */ | ||
/** | ||
* Shifts the floating element in order to keep it in view when it will overflow | ||
* a clipping boundary. | ||
* A visibility optimizer that shifts the floating element along the specified | ||
* axes in order to keep it in view. | ||
* @see https://floating-ui.com/docs/shift | ||
@@ -30,0 +32,0 @@ */ |
@@ -135,3 +135,3 @@ export type Alignment = 'start' | 'end'; | ||
export type Boundary = any; | ||
export type RootBoundary = 'viewport' | 'document'; | ||
export type RootBoundary = 'viewport' | 'document' | Rect; | ||
export type ElementContext = 'reference' | 'floating'; | ||
@@ -138,0 +138,0 @@ export { computePosition } from './computePosition'; |
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
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
196588
4972