@react-three/drei 7.17.1 → 7.17.2
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/index.cjs.js +1 -1
- package/package.json +1 -1
- package/web/ScrollControls.cjs.js +1 -1
- package/web/ScrollControls.d.ts +2 -1
- package/web/ScrollControls.js +6 -1
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("three"),r=require("react"),s=require("react-dom"),o=require("@react-three/fiber"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("three"),r=require("react"),s=require("react-dom"),o=require("@react-three/fiber"),n=require("react-merge-refs");function l(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function i(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var s=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,s.get?s:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var f=l(e),a=i(t),c=i(r),u=i(s),d=l(n);const h=c.createContext(null);function p(){return c.useContext(h)}const m=c.forwardRef((({children:e},t)=>{const r=c.useRef(null),s=p(),{width:n,height:l}=o.useThree((e=>e.viewport));return o.useFrame((()=>{r.current.position.x=s.horizontal?-n*(s.pages-1)*s.offset:0,r.current.position.y=s.horizontal?0:l*(s.pages-1)*s.offset})),c.createElement("group",{ref:d.default([t,r])},e)})),v=c.forwardRef((({children:e,style:t,...r},s)=>{const n=p(),l=c.useRef(null),{width:i,height:a}=o.useThree((e=>e.size)),m=c.useContext(o.context);return o.useFrame((()=>{n.delta>n.eps&&(l.current.style.transform=`translate3d(${n.horizontal?-i*(n.pages-1)*n.offset:0}px,${n.horizontal?0:a*(n.pages-1)*-n.offset}px,0)`)})),u.render(c.createElement("div",f.default({ref:d.default([s,l]),style:{...t,position:"absolute",top:0,left:0,willChange:"transform"}},r),c.createElement(h.Provider,{value:n},c.createElement(o.context.Provider,{value:m},e))),n.fixed),null})),y=c.forwardRef((({html:e,...t},r)=>{const s=e?v:m;return c.createElement(s,f.default({ref:r},t))}));exports.Scroll=y,exports.ScrollControls=function({eps:e=1e-5,enabled:t=!0,infinite:r,horizontal:s,pages:n=1,distance:l=1,damping:i=4,children:f}){const{gl:u,size:d,invalidate:p,events:m,raycaster:v}=o.useThree(),[y]=c.useState((()=>document.createElement("div"))),[g]=c.useState((()=>document.createElement("div"))),[w]=c.useState((()=>document.createElement("div"))),x=u.domElement.parentNode,E=c.useRef(0),b=c.useMemo((()=>({el:y,eps:e,fill:g,fixed:w,horizontal:s,damping:i,offset:0,delta:0,scroll:E,pages:n,range(e,t,r=0){const s=e-r,o=s+t+2*r;return this.offset<s?0:this.offset>o?1:(this.offset-s)/(o-s)},curve(e,t,r=0){return Math.sin(this.range(e,t,r)*Math.PI)},visible(e,t,r=0){const s=e-r,o=s+t+2*r;return this.offset>=s&&this.offset<=o}})),[e,i,s,n]);c.useEffect((()=>{y.style.position="absolute",y.style.width="100%",y.style.height="100%",y.style[s?"overflowX":"overflowY"]="auto",y.style[s?"overflowY":"overflowX"]="hidden",y.style.top="0px",y.style.left="0px",w.style.position="sticky",w.style.top="0px",w.style.left="0px",w.style.width="100%",w.style.height="100%",w.style.overflow="hidden",y.appendChild(w),g.style.height=s?"100%":n*l*100+"%",g.style.width=s?n*l*100+"%":"100%",g.style.pointerEvents="none",y.appendChild(g),x.appendChild(y),y[s?"scrollLeft":"scrollTop"]=1;const e=m.connected;requestAnimationFrame((()=>null==m.connect?void 0:m.connect(y)));const t=v.computeOffsets;return v.computeOffsets=({clientX:e,clientY:t})=>({offsetX:e,offsetY:t}),()=>{x.removeChild(y),v.computeOffsets=t,null==m.connect||m.connect(e)}}),[n,l,s,y,g,w,x]),c.useEffect((()=>{const e=d[s?"width":"height"],o=y[s?"scrollWidth":"scrollHeight"],n=o-e;let l=0,i=!0,f=!0;const a=e=>{if(t&&!f&&(p(),l=y[s?"scrollLeft":"scrollTop"],E.current=l/n,r)){if(!i)if(l>=n){const e=1-b.offset;y[s?"scrollLeft":"scrollTop"]=1,E.current=b.offset=-e,i=!0}else if(l<=0){const e=1+b.offset;y[s?"scrollLeft":"scrollTop"]=o,E.current=b.offset=e,i=!0}i&&setTimeout((()=>i=!1),40)}};y.addEventListener("scroll",a,{passive:!0}),requestAnimationFrame((()=>f=!1));const c=e=>y.scrollLeft+=e.deltaY/2;return s&&y.addEventListener("wheel",c,{passive:!0}),()=>{y.removeEventListener("scroll",a),s&&y.removeEventListener("wheel",c)}}),[y,d,r,b,p,s]);let O=0;return o.useFrame(((t,r)=>{b.offset=a.MathUtils.damp(O=b.offset,E.current,i,r),b.delta=a.MathUtils.damp(b.delta,Math.abs(O-b.offset),i,r),b.delta>e&&p()})),c.createElement(h.Provider,{value:b},f)},exports.useScroll=p;
|
package/web/ScrollControls.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ export declare type ScrollControlsProps = {
|
|
|
6
6
|
pages?: number;
|
|
7
7
|
distance?: number;
|
|
8
8
|
damping?: number;
|
|
9
|
+
enabled?: boolean;
|
|
9
10
|
children: React.ReactNode;
|
|
10
11
|
};
|
|
11
12
|
export declare type ScrollControlsState = {
|
|
@@ -23,7 +24,7 @@ export declare type ScrollControlsState = {
|
|
|
23
24
|
visible(from: number, distance: number, margin?: number): boolean;
|
|
24
25
|
};
|
|
25
26
|
export declare function useScroll(): ScrollControlsState;
|
|
26
|
-
export declare function ScrollControls({ eps, infinite, horizontal, pages, distance, damping, children, }: ScrollControlsProps): JSX.Element;
|
|
27
|
+
export declare function ScrollControls({ eps, enabled, infinite, horizontal, pages, distance, damping, children, }: ScrollControlsProps): JSX.Element;
|
|
27
28
|
declare type ScrollProps = {
|
|
28
29
|
html?: boolean;
|
|
29
30
|
children?: React.ReactNode;
|
package/web/ScrollControls.js
CHANGED
|
@@ -11,6 +11,7 @@ function useScroll() {
|
|
|
11
11
|
}
|
|
12
12
|
function ScrollControls({
|
|
13
13
|
eps = 0.00001,
|
|
14
|
+
enabled = true,
|
|
14
15
|
infinite,
|
|
15
16
|
horizontal,
|
|
16
17
|
pages = 1,
|
|
@@ -110,9 +111,12 @@ function ScrollControls({
|
|
|
110
111
|
const scrollLength = el[horizontal ? 'scrollWidth' : 'scrollHeight'];
|
|
111
112
|
const scrollThreshold = scrollLength - containerLength;
|
|
112
113
|
let current = 0;
|
|
113
|
-
let disableScroll =
|
|
114
|
+
let disableScroll = true;
|
|
115
|
+
let firstRun = true;
|
|
114
116
|
|
|
115
117
|
const onScroll = e => {
|
|
118
|
+
// Prevent first scroll because it is indirectly caused by the one pixel offset
|
|
119
|
+
if (!enabled || firstRun) return;
|
|
116
120
|
invalidate();
|
|
117
121
|
current = el[horizontal ? 'scrollLeft' : 'scrollTop'];
|
|
118
122
|
scroll.current = current / scrollThreshold;
|
|
@@ -139,6 +143,7 @@ function ScrollControls({
|
|
|
139
143
|
el.addEventListener('scroll', onScroll, {
|
|
140
144
|
passive: true
|
|
141
145
|
});
|
|
146
|
+
requestAnimationFrame(() => firstRun = false);
|
|
142
147
|
|
|
143
148
|
const onWheel = e => el.scrollLeft += e.deltaY / 2;
|
|
144
149
|
|