react-spring-bottom-sheet-updated
Version:
✨ Accessible, 🪄 Delightful, and 🤯 Performant. Built on react-spring for the web, and react-use-gesture.
3 lines (2 loc) • 19.5 kB
JavaScript
import*as e from"@radix-ui/react-portal";import n,{useRef as t,useDebugValue as r,useEffect as a,useLayoutEffect as o,useState as i,useCallback as c,useMemo as s,useImperativeHandle as l,forwardRef as u}from"react";import{useMachine as d}from"@xstate/react";import{useSpring as p,to as y,animated as g,config as m}from"react-spring";import{useDrag as v,rubberbandIfOutOfBounds as S}from"react-use-gesture";import{createFocusTrap as f}from"focus-trap";import{disableBodyScroll as h,enableBodyScroll as E}from"body-scroll-lock";import{ResizeObserver as b}from"@juggle/resize-observer";import{Machine as R,assign as w}from"xstate";function x(){return x=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])}return e},x.apply(this,arguments)}function O(e,n){if(null==e)return{};var t,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n.indexOf(t=o[r])>=0||(a[t]=e[t]);return a}const C="undefined"!=typeof window?o:a;function N(e,n,t){return n=(n=+n)==n?n:0,t=(t=+t)==t?t:0,(e=+e)==e&&(e=(e=e<=t?e:t)>=n?e:n),e}function H(e){const n=Math.round(e);if(Number.isNaN(e))throw new TypeError("Found a NaN! Check your snapPoints / defaultSnap / snapTo ");return n}const D={box:"border-box"};function k(e,{label:n,enabled:t,resizeSourceRef:a}){let[o,s]=i(0);r(`${n}: ${o}`);const l=c(e=>{s(e[0].borderBoxSize[0].blockSize),a.current="element"},[a]);return C(()=>{if(!e.current||!t)return;const n=new b(l);return n.observe(e.current,D),()=>{n.disconnect()}},[e,l,t]),t?o:0}function P(e=1e3){return new Promise(n=>setTimeout(n,e))}const z={DRAG:{target:"#overlay.dragging",actions:"onOpenEnd"}},L={RESIZE:{target:"#overlay.resizing",actions:"onOpenEnd"}},A=R({id:"overlay",initial:"closed",context:{initialState:"CLOSED"},states:{closed:{on:{OPEN:"opening",CLOSE:void 0}},opening:{initial:"start",states:{start:{invoke:{src:"onOpenStart",onDone:"transition"}},transition:{always:[{target:"immediately",cond:"initiallyOpen"},{target:"smoothly",cond:"initiallyClosed"}]},immediately:{initial:"open",states:{open:{invoke:{src:"openImmediately",onDone:"activating"}},activating:{invoke:{src:"activate",onDone:"#overlay.opening.end"},on:x({},z,L)}}},smoothly:{initial:"visuallyHidden",states:{visuallyHidden:{invoke:{src:"renderVisuallyHidden",onDone:"activating"}},activating:{invoke:{src:"activate",onDone:"open"}},open:{invoke:{src:"openSmoothly",onDone:"#overlay.opening.end"},on:x({},z,L)}}},end:{invoke:{src:"onOpenEnd",onDone:"done"},on:{CLOSE:"#overlay.closing",DRAG:"#overlay.dragging"}},done:{type:"final"}},on:x({},{CLOSE:{target:"#overlay.closing",actions:"onOpenCancel"}}),onDone:"open"},open:{on:{DRAG:"#overlay.dragging",SNAP:"snapping",RESIZE:"resizing"}},dragging:{on:{SNAP:"snapping"}},snapping:{initial:"start",states:{start:{invoke:{src:"onSnapStart",onDone:"snappingSmoothly"},entry:[w({y:(e,{payload:{y:n}})=>n,velocity:(e,{payload:{velocity:n}})=>n,snapSource:(e,{payload:{source:n="custom"}})=>n})]},snappingSmoothly:{invoke:{src:"snapSmoothly",onDone:"end"}},end:{invoke:{src:"onSnapEnd",onDone:"done"},on:{RESIZE:"#overlay.resizing",SNAP:"#overlay.snapping",CLOSE:"#overlay.closing",DRAG:"#overlay.dragging"}},done:{type:"final"}},on:{SNAP:{target:"snapping",actions:"onSnapEnd"},RESIZE:{target:"#overlay.resizing",actions:"onSnapCancel"},DRAG:{target:"#overlay.dragging",actions:"onSnapCancel"},CLOSE:{target:"#overlay.closing",actions:"onSnapCancel"}},onDone:"open"},resizing:{initial:"start",states:{start:{invoke:{src:"onResizeStart",onDone:"resizingSmoothly"}},resizingSmoothly:{invoke:{src:"resizeSmoothly",onDone:"end"}},end:{invoke:{src:"onResizeEnd",onDone:"done"},on:{SNAP:"#overlay.snapping",CLOSE:"#overlay.closing",DRAG:"#overlay.dragging"}},done:{type:"final"}},on:{RESIZE:{target:"resizing",actions:"onResizeEnd"},SNAP:{target:"snapping",actions:"onResizeCancel"},DRAG:{target:"#overlay.dragging",actions:"onResizeCancel"},CLOSE:{target:"#overlay.closing",actions:"onResizeCancel"}},onDone:"open"},closing:{initial:"start",states:{start:{invoke:{src:"onCloseStart",onDone:"deactivating"},on:{OPEN:{target:"#overlay.open",actions:"onCloseCancel"}}},deactivating:{invoke:{src:"deactivate",onDone:"closingSmoothly"}},closingSmoothly:{invoke:{src:"closeSmoothly",onDone:"end"}},end:{invoke:{src:"onCloseEnd",onDone:"done"},on:{OPEN:{target:"#overlay.opening",actions:"onCloseCancel"}}},done:{type:"final"}},on:{CLOSE:void 0,OPEN:{target:"#overlay.opening",actions:"onCloseCancel"}},onDone:"closed"}},on:{CLOSE:"closing"}},{actions:{onOpenCancel:(e,n)=>{},onSnapCancel:(e,n)=>{},onResizeCancel:(e,n)=>{},onCloseCancel:(e,n)=>{},onOpenEnd:(e,n)=>{},onSnapEnd:(e,n)=>{},onResizeEnd:(e,n)=>{}},services:{onSnapStart:async()=>{await P()},onOpenStart:async()=>{await P()},onCloseStart:async()=>{await P()},onResizeStart:async()=>{await P()},onSnapEnd:async()=>{await P()},onOpenEnd:async()=>{await P()},onCloseEnd:async()=>{await P()},onResizeEnd:async()=>{await P()},renderVisuallyHidden:async(e,n)=>{await P()},activate:async(e,n)=>{await P()},deactivate:async(e,n)=>{await P()},openSmoothly:async(e,n)=>{await P()},openImmediately:async(e,n)=>{await P()},snapSmoothly:async(e,n)=>{await P()},resizeSmoothly:async(e,n)=>{await P()},closeSmoothly:async(e,n)=>{await P()}},guards:{initiallyClosed:({initialState:e})=>"CLOSED"===e,initiallyOpen:({initialState:e})=>"OPEN"===e}}),T=["children","sibling","className","footer","header","open","initialState","lastSnapRef","initialFocusRef","onDismiss","maxHeight","defaultSnap","snapPoints","blocking","scrollLocking","style","onSpringStart","onSpringCancel","onSpringEnd","reserveScrollBarGap","expandOnContentDrag","disableExpandList","preventPullUp"],M=["velocity"],I=["onRest","config"],{tension:G,friction:F}=m.default,Z=n.forwardRef(function(e,o){let{children:u,sibling:m,className:b,footer:R,header:w,open:D,initialState:P,lastSnapRef:z,initialFocusRef:L,onDismiss:Z,maxHeight:q,defaultSnap:V=$,snapPoints:U=j,blocking:K=!0,scrollLocking:J=!0,style:Q,onSpringStart:W,onSpringCancel:X,onSpringEnd:Y,reserveScrollBarGap:_=K,expandOnContentDrag:ee=!1,disableExpandList:ne=[],preventPullUp:te=!1}=e,re=O(e,T);const{ready:ae,registerReady:oe}=function(){const[e,n]=i(!1),[t,r]=i({}),o=c(e=>(r(n=>x({},n,{[e]:!1})),()=>{r(n=>x({},n,{[e]:!0}))}),[]);return a(()=>{const e=Object.values(t);0!==e.length&&e.every(Boolean)&&n(!0)},[t]),{ready:e,registerReady:o}}(),ie=t(!1),ce=t(W),se=t(X),le=t(Y);a(()=>{ce.current=W,se.current=X,le.current=Y},[X,W,Y]);const[ue,de]=p(()=>({y:0,ready:0,maxHeight:0,minSnap:0,maxSnap:0})),pe=t(null),ye=t(null),ge=t(null),me=t(null),ve=t(null),Se=t(null),fe=t(0),he=t(),Ee=t(!1),be=function(){const e=s(()=>"undefined"!=typeof window?window.matchMedia("(prefers-reduced-motion: reduce)"):null,[]),n=t(null==e?void 0:e.matches);return r(n.current?"reduce":"no-preference"),a(()=>{const t=e=>{n.current=e.matches};return null==e||e.addListener(t),()=>null==e?void 0:e.removeListener(t)},[e]),n}(),Re=function({targetRef:e,enabled:n,reserveScrollBarGap:o}){const i=t({activate:()=>{throw new TypeError("Tried to activate scroll lock too early")},deactivate:()=>{}});return r(n?"Enabled":"Disabled"),a(()=>{if(!n)return i.current.deactivate(),void(i.current={activate:()=>{},deactivate:()=>{}});const t=e.current;let r=!1;i.current={activate:()=>{r||(r=!0,h(t,{allowTouchMove:e=>e.closest("[data-body-scroll-lock-ignore]"),reserveScrollBarGap:o}))},deactivate:()=>{r&&(r=!1,E(t))}}},[n,e,o]),i}({targetRef:ye,enabled:ae&&J,reserveScrollBarGap:_}),we=function({targetRef:e,enabled:n}){const o=t({activate:()=>{throw new TypeError("Tried to activate aria hider too early")},deactivate:()=>{}});return r(n?"Enabled":"Disabled"),a(()=>{if(!n)return o.current.deactivate(),void(o.current={activate:()=>{},deactivate:()=>{}});const t=e.current;let r=!1,a=[],i=[];o.current={activate:()=>{if(r)return;r=!0;const e=t.parentNode;document.querySelectorAll("body > *").forEach(n=>{if(n===e)return;let t=n.getAttribute("aria-hidden");null!==t&&"false"!==t||(a.push(t),i.push(n),n.setAttribute("aria-hidden","true"))})},deactivate:()=>{r&&(r=!1,i.forEach((e,n)=>{let t=a[n];null===t?e.removeAttribute("aria-hidden"):e.setAttribute("aria-hidden",t)}),a=[],i=[])}}},[e,n]),o}({targetRef:pe,enabled:ae&&K}),xe=function({targetRef:e,fallbackRef:n,initialFocusRef:o,enabled:i}){const c=t({activate:()=>{throw new TypeError("Tried to activate focus trap too early")},deactivate:()=>{}});return r(i?"Enabled":"Disabled"),a(()=>{if(!i)return c.current.deactivate(),void(c.current={activate:()=>{},deactivate:()=>{}});const t=n.current,r=f(e.current,{onActivate:void 0,initialFocus:o?()=>(null==o?void 0:o.current)||t:void 0,fallbackFocus:t,escapeDeactivates:!1,clickOutsideDeactivates:!1});let a=!1;c.current={activate:async()=>{a||(a=!0,await r.activate(),await new Promise(e=>setTimeout(()=>e(void 0),0)))},deactivate:()=>{a&&(a=!1,r.deactivate())}}},[i,n,o,e]),c}({targetRef:pe,fallbackRef:Se,initialFocusRef:L||void 0,enabled:ae&&K&&!1!==L}),{minSnap:Oe,maxSnap:Ce,maxHeight:Ne,findSnap:He}=function({contentRef:e,controlledMaxHeight:n,footerEnabled:o,footerRef:c,getSnapPoints:l,headerEnabled:u,headerRef:d,heightRef:p,lastSnapRef:y,ready:g,registerReady:m,resizeSourceRef:v}){const{maxHeight:S,minHeight:f,headerHeight:h,footerHeight:E}=function({contentRef:e,controlledMaxHeight:n,footerEnabled:o,footerRef:c,headerEnabled:l,headerRef:u,registerReady:d,resizeSourceRef:p}){const y=s(()=>d("contentHeight"),[d]),g=function(e,n,o){const c=s(()=>n("maxHeight"),[n]),[l,u]=i(()=>H(e)||"undefined"!=typeof window?window.innerHeight:0),d=l>0,p=t(0);return r(e?"controlled":"auto"),a(()=>{d&&c()},[d,c]),C(()=>{if(e)return u(H(e)),void(o.current="maxheightprop");const n=()=>{p.current||(p.current=requestAnimationFrame(()=>{u(window.innerHeight),o.current="window",p.current=0}))};return window.addEventListener("resize",n),u(window.innerHeight),o.current="window",c(),()=>{window.removeEventListener("resize",n),cancelAnimationFrame(p.current)}},[e,c,o]),l}(n,d,p),m=k(u,{label:"headerHeight",enabled:l,resizeSourceRef:p}),v=k(e,{label:"contentHeight",enabled:!0,resizeSourceRef:p}),S=k(c,{label:"footerHeight",enabled:o,resizeSourceRef:p}),f=Math.min(g-m-S,v)+m+S;r(`minHeight: ${f}`);const h=v>0;return a(()=>{h&&y()},[h,y]),{maxHeight:g,minHeight:f,headerHeight:m,footerHeight:S}}({contentRef:e,controlledMaxHeight:n,footerEnabled:o,footerRef:c,headerEnabled:u,headerRef:d,registerReady:m,resizeSourceRef:v}),{snapPoints:b,minSnap:R,maxSnap:w}=function(e,n){const t=[].concat(e).map(H).reduce((e,t)=>(e.add(N(t,0,n)),e),new Set),r=Array.from(t),a=Math.min(...r);if(Number.isNaN(a))throw new TypeError("minSnap is NaN");const o=Math.max(...r);if(Number.isNaN(o))throw new TypeError("maxSnap is NaN");return{snapPoints:r,minSnap:a,maxSnap:o}}(g?l({height:p.current,footerHeight:E,headerHeight:h,minHeight:f,maxHeight:S}):[0],S);return r(`minSnap: ${R}, maxSnap:${w}`),{minSnap:R,maxSnap:w,findSnap:function(e){let n;n="function"==typeof e?e({footerHeight:E,headerHeight:h,height:p.current,minHeight:f,maxHeight:S,snapPoints:b,lastSnap:y.current}):e;const t=H(n);return b.reduce((e,n)=>Math.abs(n-t)<Math.abs(e-t)?n:e,R)},maxHeight:S}}({contentRef:ge,controlledMaxHeight:q,footerEnabled:!!R,footerRef:ve,getSnapPoints:U,headerEnabled:!1!==w,headerRef:me,heightRef:fe,lastSnapRef:z,ready:ae,registerReady:oe,resizeSourceRef:he}),De=t(Ne),ke=t(Oe),Pe=t(Ce),ze=t(He),Le=t(0);C(()=>{De.current=Ne,Pe.current=Ce,ke.current=Oe,ze.current=He,Le.current=He(V)},[He,V,Ne,Ce,Oe]);const Ae=c(e=>{let{onRest:n,config:{velocity:t=1}={}}=e,r=O(e.config,M),a=O(e,I);return new Promise(e=>de(x({},a,{config:x({velocity:t},r,{mass:1,tension:G,friction:Math.max(F,F+(F-F*t))}),onRest:(...t)=>{e(...t),null==n||n(...t)}})))},[de]),[Te,Me]=d(A,{devTools:!1,actions:{onOpenCancel:c(()=>null==se.current?void 0:se.current({type:"OPEN"}),[]),onSnapCancel:c(e=>null==se.current?void 0:se.current({type:"SNAP",source:e.snapSource}),[]),onCloseCancel:c(()=>null==se.current?void 0:se.current({type:"CLOSE"}),[]),onResizeCancel:c(()=>null==se.current?void 0:se.current({type:"RESIZE",source:he.current}),[]),onOpenEnd:c(()=>null==le.current?void 0:le.current({type:"OPEN"}),[]),onSnapEnd:c((e,n)=>null==le.current?void 0:le.current({type:"SNAP",source:e.snapSource}),[]),onResizeEnd:c(()=>null==le.current?void 0:le.current({type:"RESIZE",source:he.current}),[])},context:{initialState:P},services:{onSnapStart:c(async(e,n)=>null==ce.current?void 0:ce.current({type:"SNAP",source:n.payload.source||"custom"}),[]),onOpenStart:c(async()=>null==ce.current?void 0:ce.current({type:"OPEN"}),[]),onCloseStart:c(async()=>null==ce.current?void 0:ce.current({type:"CLOSE"}),[]),onResizeStart:c(async()=>null==ce.current?void 0:ce.current({type:"RESIZE",source:he.current}),[]),onSnapEnd:c(async(e,n)=>null==le.current?void 0:le.current({type:"SNAP",source:e.snapSource}),[]),onOpenEnd:c(async()=>null==le.current?void 0:le.current({type:"OPEN"}),[]),onCloseEnd:c(async()=>null==le.current?void 0:le.current({type:"CLOSE"}),[]),onResizeEnd:c(async()=>null==le.current?void 0:le.current({type:"RESIZE",source:he.current}),[]),renderVisuallyHidden:c(async(e,n)=>{await Ae({y:Le.current,ready:0,maxHeight:De.current,maxSnap:Pe.current,minSnap:Le.current,immediate:!0})},[Ae]),activate:c(async(e,n)=>{ie.current=!0,await Promise.all([Re.current.activate(),xe.current.activate(),we.current.activate()])},[we,xe,Re]),deactivate:c(async()=>{Re.current.deactivate(),xe.current.deactivate(),we.current.deactivate(),ie.current=!1},[we,xe,Re]),openImmediately:c(async()=>{fe.current=Le.current,await Ae({y:Le.current,ready:1,maxHeight:De.current,maxSnap:Pe.current,minSnap:Le.current,immediate:!0})},[Ae]),openSmoothly:c(async()=>{await Ae({y:0,ready:1,maxHeight:De.current,maxSnap:Pe.current,minSnap:Le.current,immediate:!0}),fe.current=Le.current,await Ae({y:Le.current,ready:1,maxHeight:De.current,maxSnap:Pe.current,minSnap:Le.current,immediate:be.current})},[Ae,be]),snapSmoothly:c(async(e,n)=>{const t=ze.current(e.y);fe.current=t,z.current=t,await Ae({y:t,ready:1,maxHeight:De.current,maxSnap:Pe.current,minSnap:ke.current,immediate:be.current,config:{velocity:e.velocity}})},[Ae,z,be]),resizeSmoothly:c(async()=>{const e=ze.current(fe.current);fe.current=e,z.current=e,await Ae({y:e,ready:1,maxHeight:De.current,maxSnap:Pe.current,minSnap:ke.current,immediate:"element"!==he.current||be.current})},[Ae,z,be]),closeSmoothly:c(async(e,n)=>{Ae({minSnap:fe.current,immediate:!0}),fe.current=0,await Ae({y:0,maxHeight:De.current,maxSnap:Pe.current,immediate:be.current}),await Ae({ready:0,immediate:!0})},[Ae,be])}});a(()=>{ae&&Me(D?"OPEN":"CLOSE")},[D,Me,ae]),C(()=>{(Ne||Ce||Oe)&&Me("RESIZE")},[Ne,Ce,Oe,Me]),a(()=>()=>{Re.current.deactivate(),xe.current.deactivate(),we.current.deactivate()},[we,xe,Re]),l(o,()=>({snapTo:(e,{velocity:n=1,source:t="custom"}={})=>{Me("SNAP",{payload:{y:ze.current(e),velocity:n,source:t}})},get height(){return fe.current}}),[Me]),a(()=>{const e=ye.current,n=n=>{const t=ne.map(e=>pe.current.querySelector(e)).filter(Boolean);if(t.length&&t.some(e=>e.contains(n.target)))return!0;Ee.current&&e.scrollTop<=0&&n.preventDefault()};let t=0;const r=n=>{e.scrollTop<0&&(t=e.scrollTop)},a=n=>{e.scrollTop<0&&e.scrollTop<t&&n.preventDefault()};return ee&&(e.addEventListener("scroll",n),e.addEventListener("touchmove",n),e.addEventListener("touchmove",a),e.addEventListener("touchstart",r,{passive:!0})),()=>{e.removeEventListener("scroll",n),e.removeEventListener("touchmove",n),e.removeEventListener("touchmove",a),e.removeEventListener("touchstart",r)}},[ee,ye,ne]);const Ie=v(({args:[{closeOnTap:e=!1,isContentDragging:n=!1}={}]=[],cancel:t,direction:[,r],down:a,first:o,last:i,memo:c=ue.y.get(),movement:[,s],tap:l,velocity:u,event:d})=>{const p=-1*s,y=ye.current.scrollHeight>ye.current.clientHeight;if(pe.current&&ne.length){const e=ne.map(e=>pe.current.querySelector(e)).filter(Boolean);if(e.length&&e.some(e=>e.contains(d.target)))return t(),c}if(!ie.current)return t(),c;if(Z&&e&&l)return t(),setTimeout(()=>Z(),10),c;if(l)return c;const g=c+p,m=p*u,v=Math.max(ke.current,Math.min(Pe.current,g+2*m));if(!a&&Z&&r>0&&g+m<ke.current/2&&(!y||ye.current.scrollTop<=0))return t(),Z(),c;let f=a?Z||ke.current!==Pe.current?S(g,Z?0:ke.current,Pe.current,.55):g<ke.current?S(g,ke.current,2*Pe.current,.55):S(g,ke.current/2,Pe.current,.55):v;if(te){if(0===r)return c;if(r<0&&f>Ce&&s<=0||r>0&&f>Ce&&s<=0)return c}return ee&&n?(f>=Pe.current&&(f=Pe.current),c===Pe.current&&ye.current.scrollTop>0&&(f=Pe.current),Ee.current=f<Pe.current):Ee.current=!1,o&&Me("DRAG"),i?(Me("SNAP",{payload:{y:f,velocity:u>.05?u:1,source:"dragging"}}),c):(de({y:f,ready:1,maxHeight:De.current,maxSnap:Pe.current,minSnap:ke.current,immediate:!0,config:{velocity:u}}),c)},{filterTaps:!0});if(Number.isNaN(Pe.current))throw new TypeError("maxSnapRef is NaN!!");if(Number.isNaN(ke.current))throw new TypeError("minSnapRef is NaN!!");const Ge=function({spring:e}){const n=y([e.y,e.maxHeight],(e,n)=>`${Math.round(N(n-e,0,16))}px`),t=y([e.y,e.minSnap,e.maxSnap],(e,n,t)=>`${N(e,n,t)}px`),r=y([e.y,e.minSnap,e.maxSnap],(e,n,t)=>e<n?n-e+"px":e>t?t-e+"px":"0px"),a=y([e.y,e.maxSnap],(e,n)=>e>=n?Math.ceil(e-n):0);return{"--rsbs-content-opacity":y([e.y,e.minSnap],(e,n)=>{if(!n)return 0;const t=Math.max(n/2-45,0);return N((e-t)*(1/(Math.min(n/2+45,n)-t)+0),0,1)}),"--rsbs-backdrop-opacity":y([e.y,e.minSnap],(e,n)=>n?N(e/n,0,1):0),"--rsbs-antigap-scale-y":a,"--rsbs-overlay-translate-y":r,"--rsbs-overlay-rounded":n,"--rsbs-overlay-h":t}}({spring:ue});/*#__PURE__*/return n.createElement(g.div,x({},re,{"data-rsbs-root":!0,"data-rsbs-state":B.find(Te.matches),"data-rsbs-is-blocking":K,"data-rsbs-is-dismissable":!!Z,"data-rsbs-has-header":!!w,"data-rsbs-has-footer":!!R,className:b,ref:pe,style:x({},Ge,Q,{opacity:ue.ready})}),m,K&&/*#__PURE__*/n.createElement("div",x({key:"backdrop","data-rsbs-backdrop":!0},Ie({closeOnTap:!0}))),/*#__PURE__*/n.createElement("div",{key:"overlay","aria-modal":"true",role:"dialog","data-rsbs-overlay":!0,tabIndex:-1,ref:Se,onKeyDown:e=>{"Escape"===e.key&&(e.stopPropagation(),Z&&Z())}},!1!==w&&/*#__PURE__*/n.createElement("div",x({key:"header","data-rsbs-header":!0,ref:me},Ie()),w),/*#__PURE__*/n.createElement("div",x({key:"scroll","data-rsbs-scroll":!0,ref:ye},ee?Ie({isContentDragging:!0}):{}),/*#__PURE__*/n.createElement("div",{"data-rsbs-content":!0,ref:ge},u)),R&&/*#__PURE__*/n.createElement("div",x({key:"footer",ref:ve,"data-rsbs-footer":!0},Ie()),R)))}),B=["closed","opening","open","closing","dragging","snapping","resizing"];function $({snapPoints:e,lastSnap:n}){return null!=n?n:Math.min(...e)}function j({minHeight:e}){return e}const q=["onSpringStart","onSpringEnd","skipInitialTransition"],V=u(function(r,a){let{onSpringStart:o,onSpringEnd:s,skipInitialTransition:l}=r,u=O(r,q);const[d,p]=i(!1),y=t(),g=t(null),m=t(l&&u.open?"OPEN":"CLOSED");C(()=>{if(u.open)return cancelAnimationFrame(y.current),p(!0),()=>{m.current="CLOSED"}},[u.open]);const v=c(async function(e){await(null==o?void 0:o(e)),"OPEN"===e.type&&cancelAnimationFrame(y.current)},[o]),S=c(async function(e){await(null==s?void 0:s(e)),"CLOSE"===e.type&&(y.current=requestAnimationFrame(()=>p(!1)))},[s]);return d?/*#__PURE__*/n.createElement(e.Root,{"data-rsbs-portal":!0},/*#__PURE__*/n.createElement(Z,x({},u,{lastSnapRef:g,ref:a,initialState:m.current,onSpringStart:v,onSpringEnd:S}))):null});export{V as BottomSheet};
//# sourceMappingURL=index.modern.mjs.map