@radix-ui/react-scroll-area 0.1.5-rc.5 → 0.1.5-rc.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +824 -1
- package/dist/index.js.map +1 -1
- package/dist/index.module.js +805 -1
- package/dist/index.module.js.map +1 -1
- package/package.json +8 -8
package/dist/index.module.js
CHANGED
|
@@ -1,2 +1,806 @@
|
|
|
1
|
-
import{composeEventHandlers as e}from"@radix-ui/primitive";import{clamp as r}from"@radix-ui/number";import{useLayoutEffect as t}from"@radix-ui/react-use-layout-effect";import{useDirection as o}from"@radix-ui/react-direction";import{useCallbackRef as n}from"@radix-ui/react-use-callback-ref";import{useComposedRefs as l}from"@radix-ui/react-compose-refs";import{createContextScope as i}from"@radix-ui/react-context";import{Presence as a}from"@radix-ui/react-presence";import{Primitive as c}from"@radix-ui/react-primitive";import*as s from"react";import u from"@babel/runtime/helpers/esm/extends";const[d,p]=i("ScrollArea");export{p as createScrollAreaScope};const[f,h]=d("ScrollArea");export const ScrollArea=/*#__PURE__*/s.forwardRef(((e,r)=>{const{__scopeScrollArea:t,type:n="hover",dir:i,scrollHideDelay:a=600,...d}=e,[p,h]=s.useState(null),[m,w]=s.useState(null),[b,v]=s.useState(null),[S,g]=s.useState(null),[E,T]=s.useState(null),[C,y]=s.useState(0),[A,x]=s.useState(0),[R,P]=s.useState(!1),[L,_]=s.useState(!1),D=l(r,(e=>h(e))),z=o(i);/*#__PURE__*/return s.createElement(f,{scope:t,type:n,dir:z,scrollHideDelay:a,scrollArea:p,viewport:m,onViewportChange:w,content:b,onContentChange:v,scrollbarX:S,onScrollbarXChange:g,scrollbarXEnabled:R,onScrollbarXEnabledChange:P,scrollbarY:E,onScrollbarYChange:T,scrollbarYEnabled:L,onScrollbarYEnabledChange:_,onCornerWidthChange:y,onCornerHeightChange:x},/*#__PURE__*/s.createElement(c.div,u({dir:z},d,{ref:D,style:{position:"relative","--radix-scroll-area-corner-width":C+"px","--radix-scroll-area-corner-height":A+"px",...e.style}})))}));/*#__PURE__*/export const ScrollAreaViewport=/*#__PURE__*/s.forwardRef(((e,r)=>{const{__scopeScrollArea:t,children:o,...n}=e,i=h("ScrollAreaViewport",t),a=s.useRef(null),d=l(r,a,i.onViewportChange);/*#__PURE__*/return s.createElement(s.Fragment,null,/*#__PURE__*/s.createElement("style",{dangerouslySetInnerHTML:{__html:"[data-radix-scroll-area-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-scroll-area-viewport]::-webkit-scrollbar{display:none}"}}),/*#__PURE__*/s.createElement(c.div,u({"data-radix-scroll-area-viewport":""},n,{ref:d,style:{overflowX:i.scrollbarXEnabled?"scroll":"hidden",overflowY:i.scrollbarYEnabled?"scroll":"hidden",...e.style}}),/*#__PURE__*/s.createElement("div",{ref:i.onContentChange,style:{minWidth:"100%",display:"table"}},o)))}));/*#__PURE__*/export const ScrollAreaScrollbar=/*#__PURE__*/s.forwardRef(((e,r)=>{const{forceMount:t,...o}=e,n=h("ScrollAreaScrollbar",e.__scopeScrollArea),{onScrollbarXEnabledChange:l,onScrollbarYEnabledChange:i}=n,a="horizontal"===e.orientation;return s.useEffect((()=>(a?l(!0):i(!0),()=>{a?l(!1):i(!1)})),[a,l,i]),"hover"===n.type?/*#__PURE__*/s.createElement(m,u({},o,{ref:r,forceMount:t})):"scroll"===n.type?/*#__PURE__*/s.createElement(w,u({},o,{ref:r,forceMount:t})):"auto"===n.type?/*#__PURE__*/s.createElement(b,u({},o,{ref:r,forceMount:t})):"always"===n.type?/*#__PURE__*/s.createElement(v,u({},o,{ref:r})):null}));/*#__PURE__*/const m=/*#__PURE__*/s.forwardRef(((e,r)=>{const{forceMount:t,...o}=e,n=h("ScrollAreaScrollbar",e.__scopeScrollArea),[l,i]=s.useState(!1);return s.useEffect((()=>{const e=n.scrollArea;let r=0;if(e){const t=()=>{window.clearTimeout(r),i(!0)},o=()=>{r=window.setTimeout((()=>i(!1)),n.scrollHideDelay)};return e.addEventListener("pointerenter",t),e.addEventListener("pointerleave",o),()=>{window.clearTimeout(r),e.removeEventListener("pointerenter",t),e.removeEventListener("pointerleave",o)}}}),[n.scrollArea,n.scrollHideDelay]),/*#__PURE__*/s.createElement(a,{present:t||l},/*#__PURE__*/s.createElement(b,u({"data-state":l?"visible":"hidden"},o,{ref:r})))})),w=/*#__PURE__*/s.forwardRef(((r,t)=>{const{forceMount:o,...n}=r,l=h("ScrollAreaScrollbar",r.__scopeScrollArea),i="horizontal"===r.orientation,c=z((()=>p("SCROLL_END")),100),[d,p]=(f="hidden",m={hidden:{SCROLL:"scrolling"},scrolling:{SCROLL_END:"idle",POINTER_ENTER:"interacting"},interacting:{SCROLL:"interacting",POINTER_LEAVE:"idle"},idle:{HIDE:"hidden",SCROLL:"scrolling",POINTER_ENTER:"interacting"}},s.useReducer(((e,r)=>{const t=m[e][r];return null!=t?t:e}),f));var f,m;return s.useEffect((()=>{if("idle"===d){const e=window.setTimeout((()=>p("HIDE")),l.scrollHideDelay);return()=>window.clearTimeout(e)}}),[d,l.scrollHideDelay,p]),s.useEffect((()=>{const e=l.viewport,r=i?"scrollLeft":"scrollTop";if(e){let t=e[r];const o=()=>{const o=e[r];t!==o&&(p("SCROLL"),c()),t=o};return e.addEventListener("scroll",o),()=>e.removeEventListener("scroll",o)}}),[l.viewport,i,p,c]),/*#__PURE__*/s.createElement(a,{present:o||"hidden"!==d},/*#__PURE__*/s.createElement(v,u({"data-state":"hidden"===d?"hidden":"visible"},n,{ref:t,onPointerEnter:e(r.onPointerEnter,(()=>p("POINTER_ENTER"))),onPointerLeave:e(r.onPointerLeave,(()=>p("POINTER_LEAVE")))})))})),b=/*#__PURE__*/s.forwardRef(((e,r)=>{const t=h("ScrollAreaScrollbar",e.__scopeScrollArea),{forceMount:o,...n}=e,[l,i]=s.useState(!1),c="horizontal"===e.orientation,d=z((()=>{if(t.viewport){const e=t.viewport.offsetWidth<t.viewport.scrollWidth,r=t.viewport.offsetHeight<t.viewport.scrollHeight;i(c?e:r)}}),10);return H(t.viewport,d),H(t.content,d),/*#__PURE__*/s.createElement(a,{present:o||l},/*#__PURE__*/s.createElement(v,u({"data-state":l?"visible":"hidden"},n,{ref:r})))})),v=/*#__PURE__*/s.forwardRef(((e,r)=>{const{orientation:t="vertical",...o}=e,n=h("ScrollAreaScrollbar",e.__scopeScrollArea),l=s.useRef(null),i=s.useRef(0),[a,c]=s.useState({content:0,viewport:0,scrollbar:{size:0,paddingStart:0,paddingEnd:0}}),d=x(a.viewport,a.content),p={...o,sizes:a,onSizesChange:c,hasThumb:Boolean(d>0&&d<1),onThumbChange:e=>l.current=e,onThumbPointerUp:()=>i.current=0,onThumbPointerDown:e=>i.current=e};function f(e,r){return function(e,r,t,o="ltr"){const n=R(t),l=n/2,i=r||l,a=n-i,c=t.scrollbar.paddingStart+i,s=t.scrollbar.size-t.scrollbar.paddingEnd-a,u=t.content-t.viewport;return L([c,s],"ltr"===o?[0,u]:[-1*u,0])(e)}(e,i.current,a,r)}return"horizontal"===t?/*#__PURE__*/s.createElement(S,u({},p,{ref:r,onThumbPositionChange:()=>{if(n.viewport&&l.current){const e=P(n.viewport.scrollLeft,a,n.dir);l.current.style.transform=`translate3d(${e}px, 0, 0)`}},onWheelScroll:e=>{n.viewport&&(n.viewport.scrollLeft=e)},onDragScroll:e=>{n.viewport&&(n.viewport.scrollLeft=f(e,n.dir))}})):"vertical"===t?/*#__PURE__*/s.createElement(g,u({},p,{ref:r,onThumbPositionChange:()=>{if(n.viewport&&l.current){const e=P(n.viewport.scrollTop,a);l.current.style.transform=`translate3d(0, ${e}px, 0)`}},onWheelScroll:e=>{n.viewport&&(n.viewport.scrollTop=e)},onDragScroll:e=>{n.viewport&&(n.viewport.scrollTop=f(e))}})):null})),S=/*#__PURE__*/s.forwardRef(((e,r)=>{const{sizes:t,onSizesChange:o,...n}=e,i=h("ScrollAreaScrollbar",e.__scopeScrollArea),[a,c]=s.useState(),d=s.useRef(null),p=l(r,d,i.onScrollbarXChange);return s.useEffect((()=>{d.current&&c(getComputedStyle(d.current))}),[d]),/*#__PURE__*/s.createElement(C,u({"data-orientation":"horizontal"},n,{ref:p,sizes:t,style:{bottom:0,left:"rtl"===i.dir?"var(--radix-scroll-area-corner-width)":0,right:"ltr"===i.dir?"var(--radix-scroll-area-corner-width)":0,"--radix-scroll-area-thumb-width":R(t)+"px",...e.style},onThumbPointerDown:r=>e.onThumbPointerDown(r.x),onDragScroll:r=>e.onDragScroll(r.x),onWheelScroll:(r,t)=>{if(i.viewport){const o=i.viewport.scrollLeft+r.deltaX;e.onWheelScroll(o),_(o,t)&&r.preventDefault()}},onResize:()=>{d.current&&i.viewport&&a&&o({content:i.viewport.scrollWidth,viewport:i.viewport.offsetWidth,scrollbar:{size:d.current.clientWidth,paddingStart:A(a.paddingLeft),paddingEnd:A(a.paddingRight)}})}}))})),g=/*#__PURE__*/s.forwardRef(((e,r)=>{const{sizes:t,onSizesChange:o,...n}=e,i=h("ScrollAreaScrollbar",e.__scopeScrollArea),[a,c]=s.useState(),d=s.useRef(null),p=l(r,d,i.onScrollbarYChange);return s.useEffect((()=>{d.current&&c(getComputedStyle(d.current))}),[d]),/*#__PURE__*/s.createElement(C,u({"data-orientation":"vertical"},n,{ref:p,sizes:t,style:{top:0,right:"ltr"===i.dir?0:void 0,left:"rtl"===i.dir?0:void 0,bottom:"var(--radix-scroll-area-corner-height)","--radix-scroll-area-thumb-height":R(t)+"px",...e.style},onThumbPointerDown:r=>e.onThumbPointerDown(r.y),onDragScroll:r=>e.onDragScroll(r.y),onWheelScroll:(r,t)=>{if(i.viewport){const o=i.viewport.scrollTop+r.deltaY;e.onWheelScroll(o),_(o,t)&&r.preventDefault()}},onResize:()=>{d.current&&i.viewport&&a&&o({content:i.viewport.scrollHeight,viewport:i.viewport.offsetHeight,scrollbar:{size:d.current.clientHeight,paddingStart:A(a.paddingTop),paddingEnd:A(a.paddingBottom)}})}}))})),[E,T]=d("ScrollAreaScrollbar"),C=/*#__PURE__*/s.forwardRef(((r,t)=>{const{__scopeScrollArea:o,sizes:i,hasThumb:a,onThumbChange:d,onThumbPointerUp:p,onThumbPointerDown:f,onThumbPositionChange:m,onDragScroll:w,onWheelScroll:b,onResize:v,...S}=r,g=h("ScrollAreaScrollbar",o),[T,C]=s.useState(null),y=l(t,(e=>C(e))),A=s.useRef(null),x=s.useRef(""),R=g.viewport,P=i.content-i.viewport,L=n(b),_=n(m),D=z(v,10);function W(e){if(A.current){const r=e.clientX-A.current.left,t=e.clientY-A.current.top;w({x:r,y:t})}}return s.useEffect((()=>{const e=e=>{const r=e.target;(null==T?void 0:T.contains(r))&&L(e,P)};return document.addEventListener("wheel",e,{passive:!1}),()=>document.removeEventListener("wheel",e,{passive:!1})}),[R,T,P,L]),s.useEffect(_,[i,_]),H(T,D),H(g.content,D),/*#__PURE__*/s.createElement(E,{scope:o,scrollbar:T,hasThumb:a,onThumbChange:n(d),onThumbPointerUp:n(p),onThumbPositionChange:_,onThumbPointerDown:n(f)},/*#__PURE__*/s.createElement(c.div,u({},S,{ref:y,style:{position:"absolute",...S.style},onPointerDown:e(r.onPointerDown,(e=>{if(0===e.button){e.target.setPointerCapture(e.pointerId),A.current=T.getBoundingClientRect(),x.current=document.body.style.webkitUserSelect,document.body.style.webkitUserSelect="none",W(e)}})),onPointerMove:e(r.onPointerMove,W),onPointerUp:e(r.onPointerUp,(e=>{e.target.releasePointerCapture(e.pointerId),document.body.style.webkitUserSelect=x.current,A.current=null}))})))}));export const ScrollAreaThumb=/*#__PURE__*/s.forwardRef(((r,t)=>{const{__scopeScrollArea:o,style:n,...i}=r,a=h("ScrollbarThumb",o),d=T("ScrollbarThumb",o),{onThumbPositionChange:p}=d,f=l(t,(e=>d.onThumbChange(e))),m=s.useRef(),w=z((()=>{m.current&&(m.current(),m.current=void 0)}),100);return s.useEffect((()=>{const e=a.viewport;if(e){const r=()=>{if(w(),!m.current){const r=D(e,p);m.current=r,p()}};return p(),e.addEventListener("scroll",r),()=>e.removeEventListener("scroll",r)}}),[a.viewport,w,p]),d.hasThumb?/*#__PURE__*/s.createElement(c.div,u({},i,{ref:f,style:{width:"var(--radix-scroll-area-thumb-width)",height:"var(--radix-scroll-area-thumb-height)",...n},onPointerDownCapture:e(r.onPointerDownCapture,(e=>{const r=e.target.getBoundingClientRect(),t=e.clientX-r.left,o=e.clientY-r.top;d.onThumbPointerDown({x:t,y:o})})),onPointerUp:e(r.onPointerUp,d.onThumbPointerUp)})):null}));/*#__PURE__*/export const ScrollAreaCorner=/*#__PURE__*/s.forwardRef(((e,r)=>{const t=h("ScrollAreaCorner",e.__scopeScrollArea),o=Boolean(t.scrollbarX&&t.scrollbarY);return"scroll"!==t.type&&o?/*#__PURE__*/s.createElement(y,u({},e,{ref:r})):null}));/*#__PURE__*/const y=/*#__PURE__*/s.forwardRef(((e,r)=>{const{__scopeScrollArea:t,...o}=e,n=h("ScrollAreaCorner",t),[l,i]=s.useState(0),[a,d]=s.useState(0),p=Boolean(l&&a);return H(n.scrollbarX,(()=>{var e;const r=(null===(e=n.scrollbarX)||void 0===e?void 0:e.offsetHeight)||0;n.onCornerHeightChange(r),d(r)})),H(n.scrollbarY,(()=>{var e;const r=(null===(e=n.scrollbarY)||void 0===e?void 0:e.offsetWidth)||0;n.onCornerWidthChange(r),i(r)})),p?/*#__PURE__*/s.createElement(c.div,u({},o,{ref:r,style:{width:l,height:a,position:"absolute",right:"ltr"===n.dir?0:void 0,left:"rtl"===n.dir?0:void 0,bottom:0,...e.style}})):null}));function A(e){return e?parseInt(e,10):0}function x(e,r){const t=e/r;return isNaN(t)?0:t}function R(e){const r=x(e.viewport,e.content),t=e.scrollbar.paddingStart+e.scrollbar.paddingEnd,o=(e.scrollbar.size-t)*r;return Math.max(o,18)}function P(e,t,o="ltr"){const n=R(t),l=t.scrollbar.paddingStart+t.scrollbar.paddingEnd,i=t.scrollbar.size-l,a=t.content-t.viewport,c=i-n,s=r(e,"ltr"===o?[0,a]:[-1*a,0]);return L([0,a],[0,c])(s)}function L(e,r){return t=>{if(e[0]===e[1]||r[0]===r[1])return r[0];const o=(r[1]-r[0])/(e[1]-e[0]);return r[0]+o*(t-e[0])}}function _(e,r){return e>0&&e<r}const D=(e,r=(()=>{}))=>{let t={left:e.scrollLeft,top:e.scrollTop},o=0;return function n(){const l={left:e.scrollLeft,top:e.scrollTop},i=t.left!==l.left,a=t.top!==l.top;(i||a)&&r(),t=l,o=window.requestAnimationFrame(n)}(),()=>window.cancelAnimationFrame(o)};function z(e,r){const t=n(e),o=s.useRef(0);return s.useEffect((()=>()=>window.clearTimeout(o.current)),[]),s.useCallback((()=>{window.clearTimeout(o.current),o.current=window.setTimeout(t,r)}),[t,r])}function H(e,r){const o=n(r);t((()=>{let r=0;if(e){const t=new ResizeObserver((()=>{cancelAnimationFrame(r),r=window.requestAnimationFrame(o)}));return t.observe(e),()=>{window.cancelAnimationFrame(r),t.unobserve(e)}}}),[e,o])}export const Root=ScrollArea;export const Viewport=ScrollAreaViewport;export const Scrollbar=ScrollAreaScrollbar;export const Thumb=ScrollAreaThumb;export const Corner=ScrollAreaCorner;
|
|
1
|
+
import $fnFM9$babelruntimehelpersesmextends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
+
import {forwardRef as $fnFM9$forwardRef, useState as $fnFM9$useState, createElement as $fnFM9$createElement, useRef as $fnFM9$useRef, Fragment as $fnFM9$Fragment, useEffect as $fnFM9$useEffect, useCallback as $fnFM9$useCallback, useReducer as $fnFM9$useReducer} from "react";
|
|
3
|
+
import {Primitive as $fnFM9$Primitive} from "@radix-ui/react-primitive";
|
|
4
|
+
import {Presence as $fnFM9$Presence} from "@radix-ui/react-presence";
|
|
5
|
+
import {createContextScope as $fnFM9$createContextScope} from "@radix-ui/react-context";
|
|
6
|
+
import {useComposedRefs as $fnFM9$useComposedRefs} from "@radix-ui/react-compose-refs";
|
|
7
|
+
import {useCallbackRef as $fnFM9$useCallbackRef} from "@radix-ui/react-use-callback-ref";
|
|
8
|
+
import {useDirection as $fnFM9$useDirection} from "@radix-ui/react-direction";
|
|
9
|
+
import {useLayoutEffect as $fnFM9$useLayoutEffect} from "@radix-ui/react-use-layout-effect";
|
|
10
|
+
import {clamp as $fnFM9$clamp} from "@radix-ui/number";
|
|
11
|
+
import {composeEventHandlers as $fnFM9$composeEventHandlers} from "@radix-ui/primitive";
|
|
12
|
+
|
|
13
|
+
function $parcel$export(e, n, v, s) {
|
|
14
|
+
Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
|
|
15
|
+
}
|
|
16
|
+
var $57acba87d6e25586$exports = {};
|
|
17
|
+
|
|
18
|
+
$parcel$export($57acba87d6e25586$exports, "createScrollAreaScope", () => $57acba87d6e25586$export$488468afe3a6f2b1);
|
|
19
|
+
$parcel$export($57acba87d6e25586$exports, "ScrollArea", () => $57acba87d6e25586$export$ccf8d8d7bbf3c2cc);
|
|
20
|
+
$parcel$export($57acba87d6e25586$exports, "ScrollAreaViewport", () => $57acba87d6e25586$export$a21cbf9f11fca853);
|
|
21
|
+
$parcel$export($57acba87d6e25586$exports, "ScrollAreaScrollbar", () => $57acba87d6e25586$export$2fabd85d0eba3c57);
|
|
22
|
+
$parcel$export($57acba87d6e25586$exports, "ScrollAreaThumb", () => $57acba87d6e25586$export$9fba1154677d7cd2);
|
|
23
|
+
$parcel$export($57acba87d6e25586$exports, "ScrollAreaCorner", () => $57acba87d6e25586$export$56969d565df7cc4b);
|
|
24
|
+
$parcel$export($57acba87d6e25586$exports, "Root", () => $57acba87d6e25586$export$be92b6f5f03c0fe9);
|
|
25
|
+
$parcel$export($57acba87d6e25586$exports, "Viewport", () => $57acba87d6e25586$export$d5c6c08dc2d3ca7);
|
|
26
|
+
$parcel$export($57acba87d6e25586$exports, "Scrollbar", () => $57acba87d6e25586$export$9a4e88b92edfce6b);
|
|
27
|
+
$parcel$export($57acba87d6e25586$exports, "Thumb", () => $57acba87d6e25586$export$6521433ed15a34db);
|
|
28
|
+
$parcel$export($57acba87d6e25586$exports, "Corner", () => $57acba87d6e25586$export$ac61190d9fc311a9);
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
function $6c2e24571c90391f$export$3e6543de14f8614f(initialState, machine) {
|
|
42
|
+
return $fnFM9$useReducer((state, event)=>{
|
|
43
|
+
const nextState = machine[state][event];
|
|
44
|
+
return nextState !== null && nextState !== void 0 ? nextState : state;
|
|
45
|
+
}, initialState);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
/* -------------------------------------------------------------------------------------------------
|
|
50
|
+
* ScrollArea
|
|
51
|
+
* -----------------------------------------------------------------------------------------------*/ const $57acba87d6e25586$var$SCROLL_AREA_NAME = 'ScrollArea';
|
|
52
|
+
const [$57acba87d6e25586$var$createScrollAreaContext, $57acba87d6e25586$export$488468afe3a6f2b1] = $fnFM9$createContextScope($57acba87d6e25586$var$SCROLL_AREA_NAME);
|
|
53
|
+
const [$57acba87d6e25586$var$ScrollAreaProvider, $57acba87d6e25586$var$useScrollAreaContext] = $57acba87d6e25586$var$createScrollAreaContext($57acba87d6e25586$var$SCROLL_AREA_NAME);
|
|
54
|
+
const $57acba87d6e25586$export$ccf8d8d7bbf3c2cc = /*#__PURE__*/ $fnFM9$forwardRef((props, forwardedRef)=>{
|
|
55
|
+
const { __scopeScrollArea: __scopeScrollArea , type: type = 'hover' , dir: dir , scrollHideDelay: scrollHideDelay = 600 , ...scrollAreaProps } = props;
|
|
56
|
+
const [scrollArea, setScrollArea] = $fnFM9$useState(null);
|
|
57
|
+
const [viewport, setViewport] = $fnFM9$useState(null);
|
|
58
|
+
const [content, setContent] = $fnFM9$useState(null);
|
|
59
|
+
const [scrollbarX, setScrollbarX] = $fnFM9$useState(null);
|
|
60
|
+
const [scrollbarY, setScrollbarY] = $fnFM9$useState(null);
|
|
61
|
+
const [cornerWidth, setCornerWidth] = $fnFM9$useState(0);
|
|
62
|
+
const [cornerHeight, setCornerHeight] = $fnFM9$useState(0);
|
|
63
|
+
const [scrollbarXEnabled, setScrollbarXEnabled] = $fnFM9$useState(false);
|
|
64
|
+
const [scrollbarYEnabled, setScrollbarYEnabled] = $fnFM9$useState(false);
|
|
65
|
+
const composedRefs = $fnFM9$useComposedRefs(forwardedRef, (node)=>setScrollArea(node)
|
|
66
|
+
);
|
|
67
|
+
const direction = $fnFM9$useDirection(dir);
|
|
68
|
+
return /*#__PURE__*/ $fnFM9$createElement($57acba87d6e25586$var$ScrollAreaProvider, {
|
|
69
|
+
scope: __scopeScrollArea,
|
|
70
|
+
type: type,
|
|
71
|
+
dir: direction,
|
|
72
|
+
scrollHideDelay: scrollHideDelay,
|
|
73
|
+
scrollArea: scrollArea,
|
|
74
|
+
viewport: viewport,
|
|
75
|
+
onViewportChange: setViewport,
|
|
76
|
+
content: content,
|
|
77
|
+
onContentChange: setContent,
|
|
78
|
+
scrollbarX: scrollbarX,
|
|
79
|
+
onScrollbarXChange: setScrollbarX,
|
|
80
|
+
scrollbarXEnabled: scrollbarXEnabled,
|
|
81
|
+
onScrollbarXEnabledChange: setScrollbarXEnabled,
|
|
82
|
+
scrollbarY: scrollbarY,
|
|
83
|
+
onScrollbarYChange: setScrollbarY,
|
|
84
|
+
scrollbarYEnabled: scrollbarYEnabled,
|
|
85
|
+
onScrollbarYEnabledChange: setScrollbarYEnabled,
|
|
86
|
+
onCornerWidthChange: setCornerWidth,
|
|
87
|
+
onCornerHeightChange: setCornerHeight
|
|
88
|
+
}, /*#__PURE__*/ $fnFM9$createElement($fnFM9$Primitive.div, $fnFM9$babelruntimehelpersesmextends({
|
|
89
|
+
dir: direction
|
|
90
|
+
}, scrollAreaProps, {
|
|
91
|
+
ref: composedRefs,
|
|
92
|
+
style: {
|
|
93
|
+
position: 'relative',
|
|
94
|
+
// Pass corner sizes as CSS vars to reduce re-renders of context consumers
|
|
95
|
+
['--radix-scroll-area-corner-width']: cornerWidth + 'px',
|
|
96
|
+
['--radix-scroll-area-corner-height']: cornerHeight + 'px',
|
|
97
|
+
...props.style
|
|
98
|
+
}
|
|
99
|
+
})));
|
|
100
|
+
});
|
|
101
|
+
/*#__PURE__*/ Object.assign($57acba87d6e25586$export$ccf8d8d7bbf3c2cc, {
|
|
102
|
+
displayName: $57acba87d6e25586$var$SCROLL_AREA_NAME
|
|
103
|
+
});
|
|
104
|
+
/* -------------------------------------------------------------------------------------------------
|
|
105
|
+
* ScrollAreaViewport
|
|
106
|
+
* -----------------------------------------------------------------------------------------------*/ const $57acba87d6e25586$var$VIEWPORT_NAME = 'ScrollAreaViewport';
|
|
107
|
+
const $57acba87d6e25586$export$a21cbf9f11fca853 = /*#__PURE__*/ $fnFM9$forwardRef((props, forwardedRef)=>{
|
|
108
|
+
const { __scopeScrollArea: __scopeScrollArea , children: children , ...viewportProps } = props;
|
|
109
|
+
const context = $57acba87d6e25586$var$useScrollAreaContext($57acba87d6e25586$var$VIEWPORT_NAME, __scopeScrollArea);
|
|
110
|
+
const ref = $fnFM9$useRef(null);
|
|
111
|
+
const composedRefs = $fnFM9$useComposedRefs(forwardedRef, ref, context.onViewportChange);
|
|
112
|
+
return /*#__PURE__*/ $fnFM9$createElement($fnFM9$Fragment, null, /*#__PURE__*/ $fnFM9$createElement("style", {
|
|
113
|
+
dangerouslySetInnerHTML: {
|
|
114
|
+
__html: `[data-radix-scroll-area-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-scroll-area-viewport]::-webkit-scrollbar{display:none}`
|
|
115
|
+
}
|
|
116
|
+
}), /*#__PURE__*/ $fnFM9$createElement($fnFM9$Primitive.div, $fnFM9$babelruntimehelpersesmextends({
|
|
117
|
+
"data-radix-scroll-area-viewport": ""
|
|
118
|
+
}, viewportProps, {
|
|
119
|
+
ref: composedRefs,
|
|
120
|
+
style: {
|
|
121
|
+
/**
|
|
122
|
+
* We don't support `visible` because the intention is to have at least one scrollbar
|
|
123
|
+
* if this component is used and `visible` will behave like `auto` in that case
|
|
124
|
+
* https://developer.mozilla.org/en-US/docs/Web/CSS/overflowed#description
|
|
125
|
+
*
|
|
126
|
+
* We don't handle `auto` because the intention is for the native implementation
|
|
127
|
+
* to be hidden if using this component. We just want to ensure the node is scrollable
|
|
128
|
+
* so could have used either `scroll` or `auto` here. We picked `scroll` to prevent
|
|
129
|
+
* the browser from having to work out whether to render native scrollbars or not,
|
|
130
|
+
* we tell it to with the intention of hiding them in CSS.
|
|
131
|
+
*/ overflowX: context.scrollbarXEnabled ? 'scroll' : 'hidden',
|
|
132
|
+
overflowY: context.scrollbarYEnabled ? 'scroll' : 'hidden',
|
|
133
|
+
...props.style
|
|
134
|
+
}
|
|
135
|
+
}), /*#__PURE__*/ $fnFM9$createElement("div", {
|
|
136
|
+
ref: context.onContentChange,
|
|
137
|
+
style: {
|
|
138
|
+
minWidth: '100%',
|
|
139
|
+
display: 'table'
|
|
140
|
+
}
|
|
141
|
+
}, children)));
|
|
142
|
+
});
|
|
143
|
+
/*#__PURE__*/ Object.assign($57acba87d6e25586$export$a21cbf9f11fca853, {
|
|
144
|
+
displayName: $57acba87d6e25586$var$VIEWPORT_NAME
|
|
145
|
+
});
|
|
146
|
+
/* -------------------------------------------------------------------------------------------------
|
|
147
|
+
* ScrollAreaScrollbar
|
|
148
|
+
* -----------------------------------------------------------------------------------------------*/ const $57acba87d6e25586$var$SCROLLBAR_NAME = 'ScrollAreaScrollbar';
|
|
149
|
+
const $57acba87d6e25586$export$2fabd85d0eba3c57 = /*#__PURE__*/ $fnFM9$forwardRef((props, forwardedRef)=>{
|
|
150
|
+
const { forceMount: forceMount , ...scrollbarProps } = props;
|
|
151
|
+
const context = $57acba87d6e25586$var$useScrollAreaContext($57acba87d6e25586$var$SCROLLBAR_NAME, props.__scopeScrollArea);
|
|
152
|
+
const { onScrollbarXEnabledChange: onScrollbarXEnabledChange , onScrollbarYEnabledChange: onScrollbarYEnabledChange } = context;
|
|
153
|
+
const isHorizontal = props.orientation === 'horizontal';
|
|
154
|
+
$fnFM9$useEffect(()=>{
|
|
155
|
+
isHorizontal ? onScrollbarXEnabledChange(true) : onScrollbarYEnabledChange(true);
|
|
156
|
+
return ()=>{
|
|
157
|
+
isHorizontal ? onScrollbarXEnabledChange(false) : onScrollbarYEnabledChange(false);
|
|
158
|
+
};
|
|
159
|
+
}, [
|
|
160
|
+
isHorizontal,
|
|
161
|
+
onScrollbarXEnabledChange,
|
|
162
|
+
onScrollbarYEnabledChange
|
|
163
|
+
]);
|
|
164
|
+
return context.type === 'hover' ? /*#__PURE__*/ $fnFM9$createElement($57acba87d6e25586$var$ScrollAreaScrollbarHover, $fnFM9$babelruntimehelpersesmextends({}, scrollbarProps, {
|
|
165
|
+
ref: forwardedRef,
|
|
166
|
+
forceMount: forceMount
|
|
167
|
+
})) : context.type === 'scroll' ? /*#__PURE__*/ $fnFM9$createElement($57acba87d6e25586$var$ScrollAreaScrollbarScroll, $fnFM9$babelruntimehelpersesmextends({}, scrollbarProps, {
|
|
168
|
+
ref: forwardedRef,
|
|
169
|
+
forceMount: forceMount
|
|
170
|
+
})) : context.type === 'auto' ? /*#__PURE__*/ $fnFM9$createElement($57acba87d6e25586$var$ScrollAreaScrollbarAuto, $fnFM9$babelruntimehelpersesmextends({}, scrollbarProps, {
|
|
171
|
+
ref: forwardedRef,
|
|
172
|
+
forceMount: forceMount
|
|
173
|
+
})) : context.type === 'always' ? /*#__PURE__*/ $fnFM9$createElement($57acba87d6e25586$var$ScrollAreaScrollbarVisible, $fnFM9$babelruntimehelpersesmextends({}, scrollbarProps, {
|
|
174
|
+
ref: forwardedRef
|
|
175
|
+
})) : null;
|
|
176
|
+
});
|
|
177
|
+
/*#__PURE__*/ Object.assign($57acba87d6e25586$export$2fabd85d0eba3c57, {
|
|
178
|
+
displayName: $57acba87d6e25586$var$SCROLLBAR_NAME
|
|
179
|
+
});
|
|
180
|
+
/* -----------------------------------------------------------------------------------------------*/ const $57acba87d6e25586$var$ScrollAreaScrollbarHover = /*#__PURE__*/ $fnFM9$forwardRef((props, forwardedRef)=>{
|
|
181
|
+
const { forceMount: forceMount , ...scrollbarProps } = props;
|
|
182
|
+
const context = $57acba87d6e25586$var$useScrollAreaContext($57acba87d6e25586$var$SCROLLBAR_NAME, props.__scopeScrollArea);
|
|
183
|
+
const [visible, setVisible] = $fnFM9$useState(false);
|
|
184
|
+
$fnFM9$useEffect(()=>{
|
|
185
|
+
const scrollArea = context.scrollArea;
|
|
186
|
+
let hideTimer = 0;
|
|
187
|
+
if (scrollArea) {
|
|
188
|
+
const handlePointerEnter = ()=>{
|
|
189
|
+
window.clearTimeout(hideTimer);
|
|
190
|
+
setVisible(true);
|
|
191
|
+
};
|
|
192
|
+
const handlePointerLeave = ()=>{
|
|
193
|
+
hideTimer = window.setTimeout(()=>setVisible(false)
|
|
194
|
+
, context.scrollHideDelay);
|
|
195
|
+
};
|
|
196
|
+
scrollArea.addEventListener('pointerenter', handlePointerEnter);
|
|
197
|
+
scrollArea.addEventListener('pointerleave', handlePointerLeave);
|
|
198
|
+
return ()=>{
|
|
199
|
+
window.clearTimeout(hideTimer);
|
|
200
|
+
scrollArea.removeEventListener('pointerenter', handlePointerEnter);
|
|
201
|
+
scrollArea.removeEventListener('pointerleave', handlePointerLeave);
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
}, [
|
|
205
|
+
context.scrollArea,
|
|
206
|
+
context.scrollHideDelay
|
|
207
|
+
]);
|
|
208
|
+
return /*#__PURE__*/ $fnFM9$createElement($fnFM9$Presence, {
|
|
209
|
+
present: forceMount || visible
|
|
210
|
+
}, /*#__PURE__*/ $fnFM9$createElement($57acba87d6e25586$var$ScrollAreaScrollbarAuto, $fnFM9$babelruntimehelpersesmextends({
|
|
211
|
+
"data-state": visible ? 'visible' : 'hidden'
|
|
212
|
+
}, scrollbarProps, {
|
|
213
|
+
ref: forwardedRef
|
|
214
|
+
})));
|
|
215
|
+
});
|
|
216
|
+
const $57acba87d6e25586$var$ScrollAreaScrollbarScroll = /*#__PURE__*/ $fnFM9$forwardRef((props, forwardedRef)=>{
|
|
217
|
+
const { forceMount: forceMount , ...scrollbarProps } = props;
|
|
218
|
+
const context = $57acba87d6e25586$var$useScrollAreaContext($57acba87d6e25586$var$SCROLLBAR_NAME, props.__scopeScrollArea);
|
|
219
|
+
const isHorizontal = props.orientation === 'horizontal';
|
|
220
|
+
const debounceScrollEnd = $57acba87d6e25586$var$useDebounceCallback(()=>send('SCROLL_END')
|
|
221
|
+
, 100);
|
|
222
|
+
const [state, send] = $6c2e24571c90391f$export$3e6543de14f8614f('hidden', {
|
|
223
|
+
hidden: {
|
|
224
|
+
SCROLL: 'scrolling'
|
|
225
|
+
},
|
|
226
|
+
scrolling: {
|
|
227
|
+
SCROLL_END: 'idle',
|
|
228
|
+
POINTER_ENTER: 'interacting'
|
|
229
|
+
},
|
|
230
|
+
interacting: {
|
|
231
|
+
SCROLL: 'interacting',
|
|
232
|
+
POINTER_LEAVE: 'idle'
|
|
233
|
+
},
|
|
234
|
+
idle: {
|
|
235
|
+
HIDE: 'hidden',
|
|
236
|
+
SCROLL: 'scrolling',
|
|
237
|
+
POINTER_ENTER: 'interacting'
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
$fnFM9$useEffect(()=>{
|
|
241
|
+
if (state === 'idle') {
|
|
242
|
+
const hideTimer = window.setTimeout(()=>send('HIDE')
|
|
243
|
+
, context.scrollHideDelay);
|
|
244
|
+
return ()=>window.clearTimeout(hideTimer)
|
|
245
|
+
;
|
|
246
|
+
}
|
|
247
|
+
}, [
|
|
248
|
+
state,
|
|
249
|
+
context.scrollHideDelay,
|
|
250
|
+
send
|
|
251
|
+
]);
|
|
252
|
+
$fnFM9$useEffect(()=>{
|
|
253
|
+
const viewport = context.viewport;
|
|
254
|
+
const scrollDirection = isHorizontal ? 'scrollLeft' : 'scrollTop';
|
|
255
|
+
if (viewport) {
|
|
256
|
+
let prevScrollPos = viewport[scrollDirection];
|
|
257
|
+
const handleScroll = ()=>{
|
|
258
|
+
const scrollPos = viewport[scrollDirection];
|
|
259
|
+
const hasScrollInDirectionChanged = prevScrollPos !== scrollPos;
|
|
260
|
+
if (hasScrollInDirectionChanged) {
|
|
261
|
+
send('SCROLL');
|
|
262
|
+
debounceScrollEnd();
|
|
263
|
+
}
|
|
264
|
+
prevScrollPos = scrollPos;
|
|
265
|
+
};
|
|
266
|
+
viewport.addEventListener('scroll', handleScroll);
|
|
267
|
+
return ()=>viewport.removeEventListener('scroll', handleScroll)
|
|
268
|
+
;
|
|
269
|
+
}
|
|
270
|
+
}, [
|
|
271
|
+
context.viewport,
|
|
272
|
+
isHorizontal,
|
|
273
|
+
send,
|
|
274
|
+
debounceScrollEnd
|
|
275
|
+
]);
|
|
276
|
+
return /*#__PURE__*/ $fnFM9$createElement($fnFM9$Presence, {
|
|
277
|
+
present: forceMount || state !== 'hidden'
|
|
278
|
+
}, /*#__PURE__*/ $fnFM9$createElement($57acba87d6e25586$var$ScrollAreaScrollbarVisible, $fnFM9$babelruntimehelpersesmextends({
|
|
279
|
+
"data-state": state === 'hidden' ? 'hidden' : 'visible'
|
|
280
|
+
}, scrollbarProps, {
|
|
281
|
+
ref: forwardedRef,
|
|
282
|
+
onPointerEnter: $fnFM9$composeEventHandlers(props.onPointerEnter, ()=>send('POINTER_ENTER')
|
|
283
|
+
),
|
|
284
|
+
onPointerLeave: $fnFM9$composeEventHandlers(props.onPointerLeave, ()=>send('POINTER_LEAVE')
|
|
285
|
+
)
|
|
286
|
+
})));
|
|
287
|
+
});
|
|
288
|
+
const $57acba87d6e25586$var$ScrollAreaScrollbarAuto = /*#__PURE__*/ $fnFM9$forwardRef((props, forwardedRef)=>{
|
|
289
|
+
const context = $57acba87d6e25586$var$useScrollAreaContext($57acba87d6e25586$var$SCROLLBAR_NAME, props.__scopeScrollArea);
|
|
290
|
+
const { forceMount: forceMount , ...scrollbarProps } = props;
|
|
291
|
+
const [visible, setVisible] = $fnFM9$useState(false);
|
|
292
|
+
const isHorizontal = props.orientation === 'horizontal';
|
|
293
|
+
const handleResize = $57acba87d6e25586$var$useDebounceCallback(()=>{
|
|
294
|
+
if (context.viewport) {
|
|
295
|
+
const isOverflowX = context.viewport.offsetWidth < context.viewport.scrollWidth;
|
|
296
|
+
const isOverflowY = context.viewport.offsetHeight < context.viewport.scrollHeight;
|
|
297
|
+
setVisible(isHorizontal ? isOverflowX : isOverflowY);
|
|
298
|
+
}
|
|
299
|
+
}, 10);
|
|
300
|
+
$57acba87d6e25586$var$useResizeObserver(context.viewport, handleResize);
|
|
301
|
+
$57acba87d6e25586$var$useResizeObserver(context.content, handleResize);
|
|
302
|
+
return /*#__PURE__*/ $fnFM9$createElement($fnFM9$Presence, {
|
|
303
|
+
present: forceMount || visible
|
|
304
|
+
}, /*#__PURE__*/ $fnFM9$createElement($57acba87d6e25586$var$ScrollAreaScrollbarVisible, $fnFM9$babelruntimehelpersesmextends({
|
|
305
|
+
"data-state": visible ? 'visible' : 'hidden'
|
|
306
|
+
}, scrollbarProps, {
|
|
307
|
+
ref: forwardedRef
|
|
308
|
+
})));
|
|
309
|
+
});
|
|
310
|
+
/* -----------------------------------------------------------------------------------------------*/ const $57acba87d6e25586$var$ScrollAreaScrollbarVisible = /*#__PURE__*/ $fnFM9$forwardRef((props, forwardedRef)=>{
|
|
311
|
+
const { orientation: orientation = 'vertical' , ...scrollbarProps } = props;
|
|
312
|
+
const context = $57acba87d6e25586$var$useScrollAreaContext($57acba87d6e25586$var$SCROLLBAR_NAME, props.__scopeScrollArea);
|
|
313
|
+
const thumbRef = $fnFM9$useRef(null);
|
|
314
|
+
const pointerOffsetRef = $fnFM9$useRef(0);
|
|
315
|
+
const [sizes, setSizes] = $fnFM9$useState({
|
|
316
|
+
content: 0,
|
|
317
|
+
viewport: 0,
|
|
318
|
+
scrollbar: {
|
|
319
|
+
size: 0,
|
|
320
|
+
paddingStart: 0,
|
|
321
|
+
paddingEnd: 0
|
|
322
|
+
}
|
|
323
|
+
});
|
|
324
|
+
const thumbRatio = $57acba87d6e25586$var$getThumbRatio(sizes.viewport, sizes.content);
|
|
325
|
+
const commonProps = {
|
|
326
|
+
...scrollbarProps,
|
|
327
|
+
sizes: sizes,
|
|
328
|
+
onSizesChange: setSizes,
|
|
329
|
+
hasThumb: Boolean(thumbRatio > 0 && thumbRatio < 1),
|
|
330
|
+
onThumbChange: (thumb)=>thumbRef.current = thumb
|
|
331
|
+
,
|
|
332
|
+
onThumbPointerUp: ()=>pointerOffsetRef.current = 0
|
|
333
|
+
,
|
|
334
|
+
onThumbPointerDown: (pointerPos)=>pointerOffsetRef.current = pointerPos
|
|
335
|
+
};
|
|
336
|
+
function getScrollPosition(pointerPos, dir) {
|
|
337
|
+
return $57acba87d6e25586$var$getScrollPositionFromPointer(pointerPos, pointerOffsetRef.current, sizes, dir);
|
|
338
|
+
}
|
|
339
|
+
if (orientation === 'horizontal') return /*#__PURE__*/ $fnFM9$createElement($57acba87d6e25586$var$ScrollAreaScrollbarX, $fnFM9$babelruntimehelpersesmextends({}, commonProps, {
|
|
340
|
+
ref: forwardedRef,
|
|
341
|
+
onThumbPositionChange: ()=>{
|
|
342
|
+
if (context.viewport && thumbRef.current) {
|
|
343
|
+
const scrollPos = context.viewport.scrollLeft;
|
|
344
|
+
const offset = $57acba87d6e25586$var$getThumbOffsetFromScroll(scrollPos, sizes, context.dir);
|
|
345
|
+
thumbRef.current.style.transform = `translate3d(${offset}px, 0, 0)`;
|
|
346
|
+
}
|
|
347
|
+
},
|
|
348
|
+
onWheelScroll: (scrollPos)=>{
|
|
349
|
+
if (context.viewport) context.viewport.scrollLeft = scrollPos;
|
|
350
|
+
},
|
|
351
|
+
onDragScroll: (pointerPos)=>{
|
|
352
|
+
if (context.viewport) context.viewport.scrollLeft = getScrollPosition(pointerPos, context.dir);
|
|
353
|
+
}
|
|
354
|
+
}));
|
|
355
|
+
if (orientation === 'vertical') return /*#__PURE__*/ $fnFM9$createElement($57acba87d6e25586$var$ScrollAreaScrollbarY, $fnFM9$babelruntimehelpersesmextends({}, commonProps, {
|
|
356
|
+
ref: forwardedRef,
|
|
357
|
+
onThumbPositionChange: ()=>{
|
|
358
|
+
if (context.viewport && thumbRef.current) {
|
|
359
|
+
const scrollPos = context.viewport.scrollTop;
|
|
360
|
+
const offset = $57acba87d6e25586$var$getThumbOffsetFromScroll(scrollPos, sizes);
|
|
361
|
+
thumbRef.current.style.transform = `translate3d(0, ${offset}px, 0)`;
|
|
362
|
+
}
|
|
363
|
+
},
|
|
364
|
+
onWheelScroll: (scrollPos)=>{
|
|
365
|
+
if (context.viewport) context.viewport.scrollTop = scrollPos;
|
|
366
|
+
},
|
|
367
|
+
onDragScroll: (pointerPos)=>{
|
|
368
|
+
if (context.viewport) context.viewport.scrollTop = getScrollPosition(pointerPos);
|
|
369
|
+
}
|
|
370
|
+
}));
|
|
371
|
+
return null;
|
|
372
|
+
});
|
|
373
|
+
/* -----------------------------------------------------------------------------------------------*/ const $57acba87d6e25586$var$ScrollAreaScrollbarX = /*#__PURE__*/ $fnFM9$forwardRef((props, forwardedRef)=>{
|
|
374
|
+
const { sizes: sizes , onSizesChange: onSizesChange , ...scrollbarProps } = props;
|
|
375
|
+
const context = $57acba87d6e25586$var$useScrollAreaContext($57acba87d6e25586$var$SCROLLBAR_NAME, props.__scopeScrollArea);
|
|
376
|
+
const [computedStyle, setComputedStyle] = $fnFM9$useState();
|
|
377
|
+
const ref = $fnFM9$useRef(null);
|
|
378
|
+
const composeRefs = $fnFM9$useComposedRefs(forwardedRef, ref, context.onScrollbarXChange);
|
|
379
|
+
$fnFM9$useEffect(()=>{
|
|
380
|
+
if (ref.current) setComputedStyle(getComputedStyle(ref.current));
|
|
381
|
+
}, [
|
|
382
|
+
ref
|
|
383
|
+
]);
|
|
384
|
+
return /*#__PURE__*/ $fnFM9$createElement($57acba87d6e25586$var$ScrollAreaScrollbarImpl, $fnFM9$babelruntimehelpersesmextends({
|
|
385
|
+
"data-orientation": "horizontal"
|
|
386
|
+
}, scrollbarProps, {
|
|
387
|
+
ref: composeRefs,
|
|
388
|
+
sizes: sizes,
|
|
389
|
+
style: {
|
|
390
|
+
bottom: 0,
|
|
391
|
+
left: context.dir === 'rtl' ? 'var(--radix-scroll-area-corner-width)' : 0,
|
|
392
|
+
right: context.dir === 'ltr' ? 'var(--radix-scroll-area-corner-width)' : 0,
|
|
393
|
+
['--radix-scroll-area-thumb-width']: $57acba87d6e25586$var$getThumbSize(sizes) + 'px',
|
|
394
|
+
...props.style
|
|
395
|
+
},
|
|
396
|
+
onThumbPointerDown: (pointerPos)=>props.onThumbPointerDown(pointerPos.x)
|
|
397
|
+
,
|
|
398
|
+
onDragScroll: (pointerPos)=>props.onDragScroll(pointerPos.x)
|
|
399
|
+
,
|
|
400
|
+
onWheelScroll: (event, maxScrollPos)=>{
|
|
401
|
+
if (context.viewport) {
|
|
402
|
+
const scrollPos = context.viewport.scrollLeft + event.deltaX;
|
|
403
|
+
props.onWheelScroll(scrollPos); // prevent window scroll when wheeling on scrollbar
|
|
404
|
+
if ($57acba87d6e25586$var$isScrollingWithinScrollbarBounds(scrollPos, maxScrollPos)) event.preventDefault();
|
|
405
|
+
}
|
|
406
|
+
},
|
|
407
|
+
onResize: ()=>{
|
|
408
|
+
if (ref.current && context.viewport && computedStyle) onSizesChange({
|
|
409
|
+
content: context.viewport.scrollWidth,
|
|
410
|
+
viewport: context.viewport.offsetWidth,
|
|
411
|
+
scrollbar: {
|
|
412
|
+
size: ref.current.clientWidth,
|
|
413
|
+
paddingStart: $57acba87d6e25586$var$toInt(computedStyle.paddingLeft),
|
|
414
|
+
paddingEnd: $57acba87d6e25586$var$toInt(computedStyle.paddingRight)
|
|
415
|
+
}
|
|
416
|
+
});
|
|
417
|
+
}
|
|
418
|
+
}));
|
|
419
|
+
});
|
|
420
|
+
const $57acba87d6e25586$var$ScrollAreaScrollbarY = /*#__PURE__*/ $fnFM9$forwardRef((props, forwardedRef)=>{
|
|
421
|
+
const { sizes: sizes , onSizesChange: onSizesChange , ...scrollbarProps } = props;
|
|
422
|
+
const context = $57acba87d6e25586$var$useScrollAreaContext($57acba87d6e25586$var$SCROLLBAR_NAME, props.__scopeScrollArea);
|
|
423
|
+
const [computedStyle, setComputedStyle] = $fnFM9$useState();
|
|
424
|
+
const ref = $fnFM9$useRef(null);
|
|
425
|
+
const composeRefs = $fnFM9$useComposedRefs(forwardedRef, ref, context.onScrollbarYChange);
|
|
426
|
+
$fnFM9$useEffect(()=>{
|
|
427
|
+
if (ref.current) setComputedStyle(getComputedStyle(ref.current));
|
|
428
|
+
}, [
|
|
429
|
+
ref
|
|
430
|
+
]);
|
|
431
|
+
return /*#__PURE__*/ $fnFM9$createElement($57acba87d6e25586$var$ScrollAreaScrollbarImpl, $fnFM9$babelruntimehelpersesmextends({
|
|
432
|
+
"data-orientation": "vertical"
|
|
433
|
+
}, scrollbarProps, {
|
|
434
|
+
ref: composeRefs,
|
|
435
|
+
sizes: sizes,
|
|
436
|
+
style: {
|
|
437
|
+
top: 0,
|
|
438
|
+
right: context.dir === 'ltr' ? 0 : undefined,
|
|
439
|
+
left: context.dir === 'rtl' ? 0 : undefined,
|
|
440
|
+
bottom: 'var(--radix-scroll-area-corner-height)',
|
|
441
|
+
['--radix-scroll-area-thumb-height']: $57acba87d6e25586$var$getThumbSize(sizes) + 'px',
|
|
442
|
+
...props.style
|
|
443
|
+
},
|
|
444
|
+
onThumbPointerDown: (pointerPos)=>props.onThumbPointerDown(pointerPos.y)
|
|
445
|
+
,
|
|
446
|
+
onDragScroll: (pointerPos)=>props.onDragScroll(pointerPos.y)
|
|
447
|
+
,
|
|
448
|
+
onWheelScroll: (event, maxScrollPos)=>{
|
|
449
|
+
if (context.viewport) {
|
|
450
|
+
const scrollPos = context.viewport.scrollTop + event.deltaY;
|
|
451
|
+
props.onWheelScroll(scrollPos); // prevent window scroll when wheeling on scrollbar
|
|
452
|
+
if ($57acba87d6e25586$var$isScrollingWithinScrollbarBounds(scrollPos, maxScrollPos)) event.preventDefault();
|
|
453
|
+
}
|
|
454
|
+
},
|
|
455
|
+
onResize: ()=>{
|
|
456
|
+
if (ref.current && context.viewport && computedStyle) onSizesChange({
|
|
457
|
+
content: context.viewport.scrollHeight,
|
|
458
|
+
viewport: context.viewport.offsetHeight,
|
|
459
|
+
scrollbar: {
|
|
460
|
+
size: ref.current.clientHeight,
|
|
461
|
+
paddingStart: $57acba87d6e25586$var$toInt(computedStyle.paddingTop),
|
|
462
|
+
paddingEnd: $57acba87d6e25586$var$toInt(computedStyle.paddingBottom)
|
|
463
|
+
}
|
|
464
|
+
});
|
|
465
|
+
}
|
|
466
|
+
}));
|
|
467
|
+
});
|
|
468
|
+
/* -----------------------------------------------------------------------------------------------*/ const [$57acba87d6e25586$var$ScrollbarProvider, $57acba87d6e25586$var$useScrollbarContext] = $57acba87d6e25586$var$createScrollAreaContext($57acba87d6e25586$var$SCROLLBAR_NAME);
|
|
469
|
+
const $57acba87d6e25586$var$ScrollAreaScrollbarImpl = /*#__PURE__*/ $fnFM9$forwardRef((props, forwardedRef)=>{
|
|
470
|
+
const { __scopeScrollArea: __scopeScrollArea , sizes: sizes , hasThumb: hasThumb , onThumbChange: onThumbChange , onThumbPointerUp: onThumbPointerUp , onThumbPointerDown: onThumbPointerDown , onThumbPositionChange: onThumbPositionChange , onDragScroll: onDragScroll , onWheelScroll: onWheelScroll , onResize: onResize , ...scrollbarProps } = props;
|
|
471
|
+
const context = $57acba87d6e25586$var$useScrollAreaContext($57acba87d6e25586$var$SCROLLBAR_NAME, __scopeScrollArea);
|
|
472
|
+
const [scrollbar, setScrollbar] = $fnFM9$useState(null);
|
|
473
|
+
const composeRefs = $fnFM9$useComposedRefs(forwardedRef, (node)=>setScrollbar(node)
|
|
474
|
+
);
|
|
475
|
+
const rectRef = $fnFM9$useRef(null);
|
|
476
|
+
const prevWebkitUserSelectRef = $fnFM9$useRef('');
|
|
477
|
+
const viewport = context.viewport;
|
|
478
|
+
const maxScrollPos = sizes.content - sizes.viewport;
|
|
479
|
+
const handleWheelScroll = $fnFM9$useCallbackRef(onWheelScroll);
|
|
480
|
+
const handleThumbPositionChange = $fnFM9$useCallbackRef(onThumbPositionChange);
|
|
481
|
+
const handleResize = $57acba87d6e25586$var$useDebounceCallback(onResize, 10);
|
|
482
|
+
function handleDragScroll(event) {
|
|
483
|
+
if (rectRef.current) {
|
|
484
|
+
const x = event.clientX - rectRef.current.left;
|
|
485
|
+
const y = event.clientY - rectRef.current.top;
|
|
486
|
+
onDragScroll({
|
|
487
|
+
x: x,
|
|
488
|
+
y: y
|
|
489
|
+
});
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
/**
|
|
493
|
+
* We bind wheel event imperatively so we can switch off passive
|
|
494
|
+
* mode for document wheel event to allow it to be prevented
|
|
495
|
+
*/ $fnFM9$useEffect(()=>{
|
|
496
|
+
const handleWheel = (event)=>{
|
|
497
|
+
const element = event.target;
|
|
498
|
+
const isScrollbarWheel = scrollbar === null || scrollbar === void 0 ? void 0 : scrollbar.contains(element);
|
|
499
|
+
if (isScrollbarWheel) handleWheelScroll(event, maxScrollPos);
|
|
500
|
+
};
|
|
501
|
+
document.addEventListener('wheel', handleWheel, {
|
|
502
|
+
passive: false
|
|
503
|
+
});
|
|
504
|
+
return ()=>document.removeEventListener('wheel', handleWheel, {
|
|
505
|
+
passive: false
|
|
506
|
+
})
|
|
507
|
+
;
|
|
508
|
+
}, [
|
|
509
|
+
viewport,
|
|
510
|
+
scrollbar,
|
|
511
|
+
maxScrollPos,
|
|
512
|
+
handleWheelScroll
|
|
513
|
+
]);
|
|
514
|
+
/**
|
|
515
|
+
* Update thumb position on sizes change
|
|
516
|
+
*/ $fnFM9$useEffect(handleThumbPositionChange, [
|
|
517
|
+
sizes,
|
|
518
|
+
handleThumbPositionChange
|
|
519
|
+
]);
|
|
520
|
+
$57acba87d6e25586$var$useResizeObserver(scrollbar, handleResize);
|
|
521
|
+
$57acba87d6e25586$var$useResizeObserver(context.content, handleResize);
|
|
522
|
+
return /*#__PURE__*/ $fnFM9$createElement($57acba87d6e25586$var$ScrollbarProvider, {
|
|
523
|
+
scope: __scopeScrollArea,
|
|
524
|
+
scrollbar: scrollbar,
|
|
525
|
+
hasThumb: hasThumb,
|
|
526
|
+
onThumbChange: $fnFM9$useCallbackRef(onThumbChange),
|
|
527
|
+
onThumbPointerUp: $fnFM9$useCallbackRef(onThumbPointerUp),
|
|
528
|
+
onThumbPositionChange: handleThumbPositionChange,
|
|
529
|
+
onThumbPointerDown: $fnFM9$useCallbackRef(onThumbPointerDown)
|
|
530
|
+
}, /*#__PURE__*/ $fnFM9$createElement($fnFM9$Primitive.div, $fnFM9$babelruntimehelpersesmextends({}, scrollbarProps, {
|
|
531
|
+
ref: composeRefs,
|
|
532
|
+
style: {
|
|
533
|
+
position: 'absolute',
|
|
534
|
+
...scrollbarProps.style
|
|
535
|
+
},
|
|
536
|
+
onPointerDown: $fnFM9$composeEventHandlers(props.onPointerDown, (event)=>{
|
|
537
|
+
const mainPointer = 0;
|
|
538
|
+
if (event.button === mainPointer) {
|
|
539
|
+
const element = event.target;
|
|
540
|
+
element.setPointerCapture(event.pointerId);
|
|
541
|
+
rectRef.current = scrollbar.getBoundingClientRect(); // pointer capture doesn't prevent text selection in Safari
|
|
542
|
+
// so we remove text selection manually when scrolling
|
|
543
|
+
prevWebkitUserSelectRef.current = document.body.style.webkitUserSelect;
|
|
544
|
+
document.body.style.webkitUserSelect = 'none';
|
|
545
|
+
handleDragScroll(event);
|
|
546
|
+
}
|
|
547
|
+
}),
|
|
548
|
+
onPointerMove: $fnFM9$composeEventHandlers(props.onPointerMove, handleDragScroll),
|
|
549
|
+
onPointerUp: $fnFM9$composeEventHandlers(props.onPointerUp, (event)=>{
|
|
550
|
+
const element = event.target;
|
|
551
|
+
element.releasePointerCapture(event.pointerId);
|
|
552
|
+
document.body.style.webkitUserSelect = prevWebkitUserSelectRef.current;
|
|
553
|
+
rectRef.current = null;
|
|
554
|
+
})
|
|
555
|
+
})));
|
|
556
|
+
});
|
|
557
|
+
/* -------------------------------------------------------------------------------------------------
|
|
558
|
+
* ScrollAreaThumb
|
|
559
|
+
* -----------------------------------------------------------------------------------------------*/ const $57acba87d6e25586$var$THUMB_NAME = 'ScrollbarThumb';
|
|
560
|
+
const $57acba87d6e25586$export$9fba1154677d7cd2 = /*#__PURE__*/ $fnFM9$forwardRef((props, forwardedRef)=>{
|
|
561
|
+
const { __scopeScrollArea: __scopeScrollArea , style: style , ...thumbProps } = props;
|
|
562
|
+
const scrollAreaContext = $57acba87d6e25586$var$useScrollAreaContext($57acba87d6e25586$var$THUMB_NAME, __scopeScrollArea);
|
|
563
|
+
const scrollbarContext = $57acba87d6e25586$var$useScrollbarContext($57acba87d6e25586$var$THUMB_NAME, __scopeScrollArea);
|
|
564
|
+
const { onThumbPositionChange: onThumbPositionChange } = scrollbarContext;
|
|
565
|
+
const composedRef = $fnFM9$useComposedRefs(forwardedRef, (node)=>scrollbarContext.onThumbChange(node)
|
|
566
|
+
);
|
|
567
|
+
const removeUnlinkedScrollListenerRef = $fnFM9$useRef();
|
|
568
|
+
const debounceScrollEnd = $57acba87d6e25586$var$useDebounceCallback(()=>{
|
|
569
|
+
if (removeUnlinkedScrollListenerRef.current) {
|
|
570
|
+
removeUnlinkedScrollListenerRef.current();
|
|
571
|
+
removeUnlinkedScrollListenerRef.current = undefined;
|
|
572
|
+
}
|
|
573
|
+
}, 100);
|
|
574
|
+
$fnFM9$useEffect(()=>{
|
|
575
|
+
const viewport = scrollAreaContext.viewport;
|
|
576
|
+
if (viewport) {
|
|
577
|
+
/**
|
|
578
|
+
* We only bind to native scroll event so we know when scroll starts and ends.
|
|
579
|
+
* When scroll starts we start a requestAnimationFrame loop that checks for
|
|
580
|
+
* changes to scroll position. That rAF loop triggers our thumb position change
|
|
581
|
+
* when relevant to avoid scroll-linked effects. We cancel the loop when scroll ends.
|
|
582
|
+
* https://developer.mozilla.org/en-US/docs/Mozilla/Performance/Scroll-linked_effects
|
|
583
|
+
*/ const handleScroll = ()=>{
|
|
584
|
+
debounceScrollEnd();
|
|
585
|
+
if (!removeUnlinkedScrollListenerRef.current) {
|
|
586
|
+
const listener = $57acba87d6e25586$var$addUnlinkedScrollListener(viewport, onThumbPositionChange);
|
|
587
|
+
removeUnlinkedScrollListenerRef.current = listener;
|
|
588
|
+
onThumbPositionChange();
|
|
589
|
+
}
|
|
590
|
+
};
|
|
591
|
+
onThumbPositionChange();
|
|
592
|
+
viewport.addEventListener('scroll', handleScroll);
|
|
593
|
+
return ()=>viewport.removeEventListener('scroll', handleScroll)
|
|
594
|
+
;
|
|
595
|
+
}
|
|
596
|
+
}, [
|
|
597
|
+
scrollAreaContext.viewport,
|
|
598
|
+
debounceScrollEnd,
|
|
599
|
+
onThumbPositionChange
|
|
600
|
+
]);
|
|
601
|
+
return scrollbarContext.hasThumb ? /*#__PURE__*/ $fnFM9$createElement($fnFM9$Primitive.div, $fnFM9$babelruntimehelpersesmextends({}, thumbProps, {
|
|
602
|
+
ref: composedRef,
|
|
603
|
+
style: {
|
|
604
|
+
width: 'var(--radix-scroll-area-thumb-width)',
|
|
605
|
+
height: 'var(--radix-scroll-area-thumb-height)',
|
|
606
|
+
...style
|
|
607
|
+
},
|
|
608
|
+
onPointerDownCapture: $fnFM9$composeEventHandlers(props.onPointerDownCapture, (event)=>{
|
|
609
|
+
const thumb = event.target;
|
|
610
|
+
const thumbRect = thumb.getBoundingClientRect();
|
|
611
|
+
const x = event.clientX - thumbRect.left;
|
|
612
|
+
const y = event.clientY - thumbRect.top;
|
|
613
|
+
scrollbarContext.onThumbPointerDown({
|
|
614
|
+
x: x,
|
|
615
|
+
y: y
|
|
616
|
+
});
|
|
617
|
+
}),
|
|
618
|
+
onPointerUp: $fnFM9$composeEventHandlers(props.onPointerUp, scrollbarContext.onThumbPointerUp)
|
|
619
|
+
})) : null;
|
|
620
|
+
});
|
|
621
|
+
/*#__PURE__*/ Object.assign($57acba87d6e25586$export$9fba1154677d7cd2, {
|
|
622
|
+
displayName: $57acba87d6e25586$var$THUMB_NAME
|
|
623
|
+
});
|
|
624
|
+
/* -------------------------------------------------------------------------------------------------
|
|
625
|
+
* ScrollAreaCorner
|
|
626
|
+
* -----------------------------------------------------------------------------------------------*/ const $57acba87d6e25586$var$CORNER_NAME = 'ScrollAreaCorner';
|
|
627
|
+
const $57acba87d6e25586$export$56969d565df7cc4b = /*#__PURE__*/ $fnFM9$forwardRef((props, forwardedRef)=>{
|
|
628
|
+
const context = $57acba87d6e25586$var$useScrollAreaContext($57acba87d6e25586$var$CORNER_NAME, props.__scopeScrollArea);
|
|
629
|
+
const hasBothScrollbarsVisible = Boolean(context.scrollbarX && context.scrollbarY);
|
|
630
|
+
const hasCorner = context.type !== 'scroll' && hasBothScrollbarsVisible;
|
|
631
|
+
return hasCorner ? /*#__PURE__*/ $fnFM9$createElement($57acba87d6e25586$var$ScrollAreaCornerImpl, $fnFM9$babelruntimehelpersesmextends({}, props, {
|
|
632
|
+
ref: forwardedRef
|
|
633
|
+
})) : null;
|
|
634
|
+
});
|
|
635
|
+
/*#__PURE__*/ Object.assign($57acba87d6e25586$export$56969d565df7cc4b, {
|
|
636
|
+
displayName: $57acba87d6e25586$var$CORNER_NAME
|
|
637
|
+
});
|
|
638
|
+
/* -----------------------------------------------------------------------------------------------*/ const $57acba87d6e25586$var$ScrollAreaCornerImpl = /*#__PURE__*/ $fnFM9$forwardRef((props, forwardedRef)=>{
|
|
639
|
+
const { __scopeScrollArea: __scopeScrollArea , ...cornerProps } = props;
|
|
640
|
+
const context = $57acba87d6e25586$var$useScrollAreaContext($57acba87d6e25586$var$CORNER_NAME, __scopeScrollArea);
|
|
641
|
+
const [width1, setWidth] = $fnFM9$useState(0);
|
|
642
|
+
const [height1, setHeight] = $fnFM9$useState(0);
|
|
643
|
+
const hasSize = Boolean(width1 && height1);
|
|
644
|
+
$57acba87d6e25586$var$useResizeObserver(context.scrollbarX, ()=>{
|
|
645
|
+
var _context$scrollbarX;
|
|
646
|
+
const height = ((_context$scrollbarX = context.scrollbarX) === null || _context$scrollbarX === void 0 ? void 0 : _context$scrollbarX.offsetHeight) || 0;
|
|
647
|
+
context.onCornerHeightChange(height);
|
|
648
|
+
setHeight(height);
|
|
649
|
+
});
|
|
650
|
+
$57acba87d6e25586$var$useResizeObserver(context.scrollbarY, ()=>{
|
|
651
|
+
var _context$scrollbarY;
|
|
652
|
+
const width = ((_context$scrollbarY = context.scrollbarY) === null || _context$scrollbarY === void 0 ? void 0 : _context$scrollbarY.offsetWidth) || 0;
|
|
653
|
+
context.onCornerWidthChange(width);
|
|
654
|
+
setWidth(width);
|
|
655
|
+
});
|
|
656
|
+
return hasSize ? /*#__PURE__*/ $fnFM9$createElement($fnFM9$Primitive.div, $fnFM9$babelruntimehelpersesmextends({}, cornerProps, {
|
|
657
|
+
ref: forwardedRef,
|
|
658
|
+
style: {
|
|
659
|
+
width: width1,
|
|
660
|
+
height: height1,
|
|
661
|
+
position: 'absolute',
|
|
662
|
+
right: context.dir === 'ltr' ? 0 : undefined,
|
|
663
|
+
left: context.dir === 'rtl' ? 0 : undefined,
|
|
664
|
+
bottom: 0,
|
|
665
|
+
...props.style
|
|
666
|
+
}
|
|
667
|
+
})) : null;
|
|
668
|
+
});
|
|
669
|
+
/* -----------------------------------------------------------------------------------------------*/ function $57acba87d6e25586$var$toInt(value) {
|
|
670
|
+
return value ? parseInt(value, 10) : 0;
|
|
671
|
+
}
|
|
672
|
+
function $57acba87d6e25586$var$getThumbRatio(viewportSize, contentSize) {
|
|
673
|
+
const ratio = viewportSize / contentSize;
|
|
674
|
+
return isNaN(ratio) ? 0 : ratio;
|
|
675
|
+
}
|
|
676
|
+
function $57acba87d6e25586$var$getThumbSize(sizes) {
|
|
677
|
+
const ratio = $57acba87d6e25586$var$getThumbRatio(sizes.viewport, sizes.content);
|
|
678
|
+
const scrollbarPadding = sizes.scrollbar.paddingStart + sizes.scrollbar.paddingEnd;
|
|
679
|
+
const thumbSize = (sizes.scrollbar.size - scrollbarPadding) * ratio; // minimum of 18 matches macOS minimum
|
|
680
|
+
return Math.max(thumbSize, 18);
|
|
681
|
+
}
|
|
682
|
+
function $57acba87d6e25586$var$getScrollPositionFromPointer(pointerPos, pointerOffset, sizes, dir = 'ltr') {
|
|
683
|
+
const thumbSizePx = $57acba87d6e25586$var$getThumbSize(sizes);
|
|
684
|
+
const thumbCenter = thumbSizePx / 2;
|
|
685
|
+
const offset = pointerOffset || thumbCenter;
|
|
686
|
+
const thumbOffsetFromEnd = thumbSizePx - offset;
|
|
687
|
+
const minPointerPos = sizes.scrollbar.paddingStart + offset;
|
|
688
|
+
const maxPointerPos = sizes.scrollbar.size - sizes.scrollbar.paddingEnd - thumbOffsetFromEnd;
|
|
689
|
+
const maxScrollPos = sizes.content - sizes.viewport;
|
|
690
|
+
const scrollRange = dir === 'ltr' ? [
|
|
691
|
+
0,
|
|
692
|
+
maxScrollPos
|
|
693
|
+
] : [
|
|
694
|
+
maxScrollPos * -1,
|
|
695
|
+
0
|
|
696
|
+
];
|
|
697
|
+
const interpolate = $57acba87d6e25586$var$linearScale([
|
|
698
|
+
minPointerPos,
|
|
699
|
+
maxPointerPos
|
|
700
|
+
], scrollRange);
|
|
701
|
+
return interpolate(pointerPos);
|
|
702
|
+
}
|
|
703
|
+
function $57acba87d6e25586$var$getThumbOffsetFromScroll(scrollPos, sizes, dir = 'ltr') {
|
|
704
|
+
const thumbSizePx = $57acba87d6e25586$var$getThumbSize(sizes);
|
|
705
|
+
const scrollbarPadding = sizes.scrollbar.paddingStart + sizes.scrollbar.paddingEnd;
|
|
706
|
+
const scrollbar = sizes.scrollbar.size - scrollbarPadding;
|
|
707
|
+
const maxScrollPos = sizes.content - sizes.viewport;
|
|
708
|
+
const maxThumbPos = scrollbar - thumbSizePx;
|
|
709
|
+
const scrollClampRange = dir === 'ltr' ? [
|
|
710
|
+
0,
|
|
711
|
+
maxScrollPos
|
|
712
|
+
] : [
|
|
713
|
+
maxScrollPos * -1,
|
|
714
|
+
0
|
|
715
|
+
];
|
|
716
|
+
const scrollWithoutMomentum = $fnFM9$clamp(scrollPos, scrollClampRange);
|
|
717
|
+
const interpolate = $57acba87d6e25586$var$linearScale([
|
|
718
|
+
0,
|
|
719
|
+
maxScrollPos
|
|
720
|
+
], [
|
|
721
|
+
0,
|
|
722
|
+
maxThumbPos
|
|
723
|
+
]);
|
|
724
|
+
return interpolate(scrollWithoutMomentum);
|
|
725
|
+
} // https://github.com/tmcw-up-for-adoption/simple-linear-scale/blob/master/index.js
|
|
726
|
+
function $57acba87d6e25586$var$linearScale(input, output) {
|
|
727
|
+
return (value)=>{
|
|
728
|
+
if (input[0] === input[1] || output[0] === output[1]) return output[0];
|
|
729
|
+
const ratio = (output[1] - output[0]) / (input[1] - input[0]);
|
|
730
|
+
return output[0] + ratio * (value - input[0]);
|
|
731
|
+
};
|
|
732
|
+
}
|
|
733
|
+
function $57acba87d6e25586$var$isScrollingWithinScrollbarBounds(scrollPos, maxScrollPos) {
|
|
734
|
+
return scrollPos > 0 && scrollPos < maxScrollPos;
|
|
735
|
+
} // Custom scroll handler to avoid scroll-linked effects
|
|
736
|
+
// https://developer.mozilla.org/en-US/docs/Mozilla/Performance/Scroll-linked_effects
|
|
737
|
+
const $57acba87d6e25586$var$addUnlinkedScrollListener = (node, handler = ()=>{})=>{
|
|
738
|
+
let prevPosition = {
|
|
739
|
+
left: node.scrollLeft,
|
|
740
|
+
top: node.scrollTop
|
|
741
|
+
};
|
|
742
|
+
let rAF = 0;
|
|
743
|
+
(function loop() {
|
|
744
|
+
const position = {
|
|
745
|
+
left: node.scrollLeft,
|
|
746
|
+
top: node.scrollTop
|
|
747
|
+
};
|
|
748
|
+
const isHorizontalScroll = prevPosition.left !== position.left;
|
|
749
|
+
const isVerticalScroll = prevPosition.top !== position.top;
|
|
750
|
+
if (isHorizontalScroll || isVerticalScroll) handler();
|
|
751
|
+
prevPosition = position;
|
|
752
|
+
rAF = window.requestAnimationFrame(loop);
|
|
753
|
+
})();
|
|
754
|
+
return ()=>window.cancelAnimationFrame(rAF)
|
|
755
|
+
;
|
|
756
|
+
};
|
|
757
|
+
function $57acba87d6e25586$var$useDebounceCallback(callback, delay) {
|
|
758
|
+
const handleCallback = $fnFM9$useCallbackRef(callback);
|
|
759
|
+
const debounceTimerRef = $fnFM9$useRef(0);
|
|
760
|
+
$fnFM9$useEffect(()=>()=>window.clearTimeout(debounceTimerRef.current)
|
|
761
|
+
, []);
|
|
762
|
+
return $fnFM9$useCallback(()=>{
|
|
763
|
+
window.clearTimeout(debounceTimerRef.current);
|
|
764
|
+
debounceTimerRef.current = window.setTimeout(handleCallback, delay);
|
|
765
|
+
}, [
|
|
766
|
+
handleCallback,
|
|
767
|
+
delay
|
|
768
|
+
]);
|
|
769
|
+
}
|
|
770
|
+
function $57acba87d6e25586$var$useResizeObserver(element, onResize) {
|
|
771
|
+
const handleResize = $fnFM9$useCallbackRef(onResize);
|
|
772
|
+
$fnFM9$useLayoutEffect(()=>{
|
|
773
|
+
let rAF = 0;
|
|
774
|
+
if (element) {
|
|
775
|
+
/**
|
|
776
|
+
* Resize Observer will throw an often benign error that says `ResizeObserver loop
|
|
777
|
+
* completed with undelivered notifications`. This means that ResizeObserver was not
|
|
778
|
+
* able to deliver all observations within a single animation frame, so we use
|
|
779
|
+
* `requestAnimationFrame` to ensure we don't deliver unnecessary observations.
|
|
780
|
+
* Further reading: https://github.com/WICG/resize-observer/issues/38
|
|
781
|
+
*/ const resizeObserver = new ResizeObserver(()=>{
|
|
782
|
+
cancelAnimationFrame(rAF);
|
|
783
|
+
rAF = window.requestAnimationFrame(handleResize);
|
|
784
|
+
});
|
|
785
|
+
resizeObserver.observe(element);
|
|
786
|
+
return ()=>{
|
|
787
|
+
window.cancelAnimationFrame(rAF);
|
|
788
|
+
resizeObserver.unobserve(element);
|
|
789
|
+
};
|
|
790
|
+
}
|
|
791
|
+
}, [
|
|
792
|
+
element,
|
|
793
|
+
handleResize
|
|
794
|
+
]);
|
|
795
|
+
}
|
|
796
|
+
/* -----------------------------------------------------------------------------------------------*/ const $57acba87d6e25586$export$be92b6f5f03c0fe9 = $57acba87d6e25586$export$ccf8d8d7bbf3c2cc;
|
|
797
|
+
const $57acba87d6e25586$export$d5c6c08dc2d3ca7 = $57acba87d6e25586$export$a21cbf9f11fca853;
|
|
798
|
+
const $57acba87d6e25586$export$9a4e88b92edfce6b = $57acba87d6e25586$export$2fabd85d0eba3c57;
|
|
799
|
+
const $57acba87d6e25586$export$6521433ed15a34db = $57acba87d6e25586$export$9fba1154677d7cd2;
|
|
800
|
+
const $57acba87d6e25586$export$ac61190d9fc311a9 = $57acba87d6e25586$export$56969d565df7cc4b;
|
|
801
|
+
|
|
802
|
+
|
|
803
|
+
|
|
804
|
+
|
|
805
|
+
export {$57acba87d6e25586$export$488468afe3a6f2b1 as createScrollAreaScope, $57acba87d6e25586$export$ccf8d8d7bbf3c2cc as ScrollArea, $57acba87d6e25586$export$a21cbf9f11fca853 as ScrollAreaViewport, $57acba87d6e25586$export$2fabd85d0eba3c57 as ScrollAreaScrollbar, $57acba87d6e25586$export$9fba1154677d7cd2 as ScrollAreaThumb, $57acba87d6e25586$export$56969d565df7cc4b as ScrollAreaCorner, $57acba87d6e25586$export$be92b6f5f03c0fe9 as Root, $57acba87d6e25586$export$d5c6c08dc2d3ca7 as Viewport, $57acba87d6e25586$export$9a4e88b92edfce6b as Scrollbar, $57acba87d6e25586$export$6521433ed15a34db as Thumb, $57acba87d6e25586$export$ac61190d9fc311a9 as Corner};
|
|
2
806
|
//# sourceMappingURL=index.module.js.map
|