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

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