@radix-ui/react-scroll-area 0.1.5-rc.5 → 0.1.5-rc.8

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