@sandlada/mdc
Version:
@sandlada/mdc is an open source component library that follows the Material Design 3 design specifications.
2 lines • 7.68 kB
JavaScript
import{createCoords as e,floor as t,max as n,min as r,rectToClientRect as i,round as a}from"../../utils/dist/floating-ui.utils.js";import{computePosition as o,flip as s,offset as c,shift as l}from"../../core/dist/floating-ui.core.js";import{getComputedStyle as u,getContainingBlock as d,getDocumentElement as f,getFrameElement as p,getNodeName as m,getNodeScroll as h,getOverflowAncestors as g,getParentNode as _,getWindow as v,isContainingBlock as y,isElement as b,isHTMLElement as x,isLastTraversableNode as S,isOverflowElement as C,isTableElement as w,isTopLayer as T,isWebKit as E}from"../../utils/dist/floating-ui.utils.dom.js";function D(e){let t=u(e),n=parseFloat(t.width)||0,r=parseFloat(t.height)||0,i=x(e),o=i?e.offsetWidth:n,s=i?e.offsetHeight:r,c=a(n)!==o||a(r)!==s;return c&&(n=o,r=s),{width:n,height:r,$:c}}function O(e){return b(e)?e:e.contextElement}function k(t){let n=O(t);if(!x(n))return e(1);let r=n.getBoundingClientRect(),{width:i,height:o,$:s}=D(n),c=(s?a(r.width):r.width)/i,l=(s?a(r.height):r.height)/o;return(!c||!Number.isFinite(c))&&(c=1),(!l||!Number.isFinite(l))&&(l=1),{x:c,y:l}}const A=e(0);function j(e){let t=v(e);return!E()||!t.visualViewport?A:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function M(e,t,n){return t===void 0&&(t=!1),!!n&&t&&n===v(e)}function N(t,n,r,a){n===void 0&&(n=!1),r===void 0&&(r=!1);let o=t.getBoundingClientRect(),s=O(t),c=e(1);n&&(a?b(a)&&(c=k(a)):c=k(t));let l=M(s,r,a)?j(s):e(0),d=(o.left+l.x)/c.x,f=(o.top+l.y)/c.y,m=o.width/c.x,h=o.height/c.y;if(s&&a){let e=v(s),t=b(a)?v(a):a,n=e,r=p(n);for(;r&&t!==n;){let e=k(r),t=r.getBoundingClientRect(),i=u(r),a=t.left+(r.clientLeft+parseFloat(i.paddingLeft))*e.x,o=t.top+(r.clientTop+parseFloat(i.paddingTop))*e.y;d*=e.x,f*=e.y,m*=e.x,h*=e.y,d+=a,f+=o,n=v(r),r=p(n)}}return i({width:m,height:h,x:d,y:f})}function P(e,t){let n=h(e).scrollLeft;return t?t.left+n:N(f(e)).left+n}function F(e,t){let n=e.getBoundingClientRect();return{x:n.left+t.scrollLeft-P(e,n),y:n.top+t.scrollTop}}function I(t){let{elements:n,rect:r,offsetParent:i,strategy:a}=t,o=a===`fixed`,s=f(i),c=n?T(n.floating):!1;if(i===s||c&&o)return r;let l={scrollLeft:0,scrollTop:0},u=e(1),d=e(0),p=x(i);if((p||!o)&&((m(i)!==`body`||C(s))&&(l=h(i)),p)){let e=N(i);u=k(i),d.x=e.x+i.clientLeft,d.y=e.y+i.clientTop}let g=s&&!p&&!o?F(s,l):e(0);return{width:r.width*u.x,height:r.height*u.y,x:r.x*u.x-l.scrollLeft*u.x+d.x+g.x,y:r.y*u.y-l.scrollTop*u.y+d.y+g.y}}function L(e){return e.getClientRects?Array.from(e.getClientRects()):[]}function R(e){let t=h(e),r=e.ownerDocument.body,i=n(e.scrollWidth,e.clientWidth,r.scrollWidth,r.clientWidth),a=n(e.scrollHeight,e.clientHeight,r.scrollHeight,r.clientHeight),o=-t.scrollLeft+P(e),s=-t.scrollTop;return u(r).direction===`rtl`&&(o+=n(e.clientWidth,r.clientWidth)-i),{width:i,height:a,x:o,y:s}}function z(e,t,n){n===void 0&&(n=`viewport`);let r=n===`layoutViewport`,i=v(e),a=f(e),o=i.visualViewport,s=a.clientWidth,c=a.clientHeight,l=0,u=0;if(o){let e=!E()||t===`fixed`;r?e||(l=-o.offsetLeft,u=-o.offsetTop):(s=o.width,c=o.height,e&&(l=o.offsetLeft,u=o.offsetTop))}if(P(a)<=0){let e=a.ownerDocument,t=e.body,n=getComputedStyle(t),r=e.compatMode===`CSS1Compat`&&parseFloat(n.marginLeft)+parseFloat(n.marginRight)||0,i=Math.abs(a.clientWidth-t.clientWidth-r),o=getComputedStyle(a).scrollbarGutter===`stable both-edges`?i/2:i;o<=25&&(s-=o)}return{width:s,height:c,x:l,y:u}}function B(e,t){let n=N(e,!0,t===`fixed`),r=n.top+e.clientTop,i=n.left+e.clientLeft,a=k(e);return{width:e.clientWidth*a.x,height:e.clientHeight*a.y,x:i*a.x,y:r*a.y}}function V(e,t,n){let r;if(t===`viewport`||t===`layoutViewport`)r=z(e,n,t);else if(t===`document`)r=R(f(e));else if(b(t))r=B(t,n);else{let n=j(e);r={x:t.x-n.x,y:t.y-n.y,width:t.width,height:t.height}}return i(r)}function H(e,t){let n=t.get(e);if(n)return n;let r=g(e,[],!1).filter(e=>b(e)&&m(e)!==`body`),i=null,a=u(e).position===`fixed`,o=a?_(e):e;for(;b(o)&&!S(o);){let e=u(o),t=y(o),n=i?i.position:a?`fixed`:``;!t&&(n===`fixed`||n===`absolute`&&e.position===`static`)?r=r.filter(e=>e!==o):i=e,o=_(o)}return t.set(e,r),r}function U(e){let{element:t,boundary:i,rootBoundary:a,strategy:o}=e,s=[...i===`clippingAncestors`?T(t)?[]:H(t,this._c):[].concat(i),a],c=V(t,s[0],o),l=c.top,u=c.right,d=c.bottom,f=c.left;for(let e=1;e<s.length;e++){let i=V(t,s[e],o);l=n(i.top,l),u=r(i.right,u),d=r(i.bottom,d),f=n(i.left,f)}return{width:u-f,height:d-l,x:f,y:l}}function W(e){let{width:t,height:n}=D(e);return{width:t,height:n}}function G(t,n,r){let i=x(n),a=f(n),o=r===`fixed`,s=N(t,!0,o,n),c={scrollLeft:0,scrollTop:0},l=e(0);if((i||!o)&&((m(n)!==`body`||C(a))&&(c=h(n)),i)){let e=N(n,!0,o,n);l.x=e.x+n.clientLeft,l.y=e.y+n.clientTop}!i&&a&&(l.x=P(a));let u=a&&!i&&!o?F(a,c):e(0);return{x:s.left+c.scrollLeft-l.x-u.x,y:s.top+c.scrollTop-l.y-u.y,width:s.width,height:s.height}}function K(e){return u(e).position===`static`}function q(e,t){if(!x(e)||u(e).position===`fixed`)return null;if(t)return t(e);let n=e.offsetParent;return f(e)===n&&(n=n.ownerDocument.body),n}function J(e,t){let n=v(e);if(T(e))return n;if(!x(e)){let t=_(e);for(;t&&!S(t);){if(b(t)&&!K(t))return t;t=_(t)}return n}let r=q(e,t);for(;r&&w(r)&&K(r);)r=q(r,t);return r&&S(r)&&K(r)&&!y(r)?n:r||d(e)||n}const Y=async function(e){let t=this.getOffsetParent||J,n=this.getDimensions,r=await n(e.floating);return{reference:G(e.reference,await t(e.floating),e.strategy),floating:{x:0,y:0,width:r.width,height:r.height}}};function X(e){return u(e).direction===`rtl`}const Z={convertOffsetParentRelativeRectToViewportRelativeRect:I,getDocumentElement:f,getClippingRect:U,getOffsetParent:J,getElementRects:Y,getClientRects:L,getDimensions:W,getScale:k,isElement:b,isRTL:X};function Q(e,t){return e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height}function $(e,i,a){let o=null,s,c=f(e);function l(){var e;clearTimeout(s),(e=o)==null||e.disconnect(),o=null}function u(a,d){a===void 0&&(a=!1),d===void 0&&(d=1),l();let f=e.getBoundingClientRect(),{left:p,top:m,width:h,height:g}=f;if(a||i(),!h||!g)return;let _=t(m),v=t(c.clientWidth-(p+h)),y=t(c.clientHeight-(m+g)),b=t(p),x={rootMargin:-_+`px `+-v+`px `+-y+`px `+-b+`px`,threshold:n(0,r(1,d))||1},S=!0;function C(t){let n=t[0].intersectionRatio;if(!Q(f,e.getBoundingClientRect()))return u();if(n!==d){if(!S)return u();n?u(!1,n):s=setTimeout(()=>{u(!1,1e-7)},1e3)}S=!1}try{o=new IntersectionObserver(C,{...x,root:c.ownerDocument})}catch{o=new IntersectionObserver(C,x)}o.observe(e)}let d=v(e),p=()=>u(a);return d.addEventListener(`resize`,p),u(!0),()=>{d.removeEventListener(`resize`,p),l()}}function ee(e,t,n,r){r===void 0&&(r={});let{ancestorScroll:i=!0,ancestorResize:a=!0,elementResize:o=typeof ResizeObserver==`function`,layoutShift:s=typeof IntersectionObserver==`function`,animationFrame:c=!1}=r,l=O(e),u=i||a?[...l?g(l):[],...t?g(t):[]]:[];u.forEach(e=>{i&&e.addEventListener(`scroll`,n),a&&e.addEventListener(`resize`,n)});let d=l&&s?$(l,n,a):null,f=-1,p=null;o&&(p=new ResizeObserver(e=>{let[r]=e;r&&r.target===l&&p&&t&&(p.unobserve(t),cancelAnimationFrame(f),f=requestAnimationFrame(()=>{var e;(e=p)==null||e.observe(t)})),n()}),l&&!c&&p.observe(l),t&&p.observe(t));let m,h=c?N(e):null;c&&_();function _(){let t=N(e);h&&!Q(h,t)&&n(),h=t,m=requestAnimationFrame(_)}return n(),()=>{var e;u.forEach(e=>{i&&e.removeEventListener(`scroll`,n),a&&e.removeEventListener(`resize`,n)}),d?.(),(e=p)==null||e.disconnect(),p=null,c&&cancelAnimationFrame(m)}}const te=c,ne=l,re=s,ie=(e,t,n)=>{let r=new Map,i=n??{},a={...Z,...i.platform,_c:r};return o(e,t,{...i,platform:a})};export{ee as autoUpdate,ie as computePosition,re as flip,te as offset,Z as platform,ne as shift};
//# sourceMappingURL=floating-ui.dom.js.map