@react-three/drei 7.16.5 → 7.17.0
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/core/Image.cjs.js +1 -1
- package/core/Image.js +2 -1
- package/core/useIntersect.cjs.js +1 -0
- package/core/useIntersect.d.ts +2 -0
- package/core/useIntersect.js +37 -0
- package/index.cjs.js +1 -1
- package/package.json +1 -1
- package/web/ScrollControls.cjs.js +1 -1
- package/web/ScrollControls.d.ts +9 -5
- package/web/ScrollControls.js +15 -8
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"),
|
|
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"),l=require("react-merge-refs");function n(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=n(e),c=i(t),a=i(r),u=i(s),d=n(l);const h=a.createContext(null);function p(){return a.useContext(h)}const m=a.forwardRef((({children:e},t)=>{const r=a.useRef(null),s=p(),{width:l,height:n}=o.useThree((e=>e.viewport));return o.useFrame((()=>{r.current.position.x=s.horizontal?-l*(s.pages-1)*s.offset:0,r.current.position.y=s.horizontal?0:n*(s.pages-1)*s.offset})),a.createElement("group",{ref:d.default([t,r])},e)})),v=a.forwardRef((({children:e,style:t,...r},s)=>{const l=p(),n=a.useRef(null),{width:i,height:c}=o.useThree((e=>e.size)),m=a.useContext(o.context);return o.useFrame((()=>{l.delta>l.eps&&(n.current.style.transform=`translate3d(${l.horizontal?-i*(l.pages-1)*l.offset:0}px,${l.horizontal?0:c*(l.pages-1)*-l.offset}px,0)`)})),u.render(a.createElement("div",f.default({ref:d.default([s,n]),style:{...t,position:"absolute",top:0,left:0,willChange:"transform"}},r),a.createElement(h.Provider,{value:l},a.createElement(o.context.Provider,{value:m},e))),l.fixed),null})),y=a.forwardRef((({html:e,...t},r)=>{const s=e?v:m;return a.createElement(s,f.default({ref:r},t))}));exports.Scroll=y,exports.ScrollControls=function({eps:e=1e-5,infinite:t,horizontal:r,pages:s=1,distance:l=1,damping:n=4,children:i}){const{gl:f,size:u,invalidate:d,events:p,raycaster:m}=o.useThree(),[v]=a.useState((()=>document.createElement("div"))),[y]=a.useState((()=>document.createElement("div"))),[g]=a.useState((()=>document.createElement("div"))),w=f.domElement.parentNode,x=a.useRef(0),E=a.useMemo((()=>({el:v,eps:e,fill:y,fixed:g,horizontal:r,damping:n,offset:0,delta:0,scroll:x,pages:s,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,n,r,s]);a.useEffect((()=>{v.style.position="absolute",v.style.width="100%",v.style.height="100%",v.style[r?"overflowX":"overflowY"]="auto",v.style[r?"overflowY":"overflowX"]="hidden",v.style.top="0px",v.style.left="0px",g.style.position="sticky",g.style.top="0px",g.style.left="0px",g.style.width="100%",g.style.height="100%",g.style.overflow="hidden",v.appendChild(g),y.style.height=r?"100%":s*l*100+"%",y.style.width=r?s*l*100+"%":"100%",y.style.pointerEvents="none",v.appendChild(y),w.appendChild(v),v[r?"scrollLeft":"scrollTop"]=1;const e=p.connected;requestAnimationFrame((()=>null==p.connect?void 0:p.connect(v)));const t=m.computeOffsets;return m.computeOffsets=({clientX:e,clientY:t})=>({offsetX:e,offsetY:t}),()=>{w.removeChild(v),m.computeOffsets=t,null==p.connect||p.connect(e)}}),[s,l,r,v,y,g,w]),a.useEffect((()=>{const e=u[r?"width":"height"],s=v[r?"scrollWidth":"scrollHeight"],o=s-e;let l=0,n=!1;const i=e=>{if(d(),l=v[r?"scrollLeft":"scrollTop"],x.current=l/o,t){if(!n)if(l>=o){const e=1-E.offset;v[r?"scrollLeft":"scrollTop"]=1,x.current=E.offset=-e,n=!0}else if(l<=0){const e=1+E.offset;v[r?"scrollLeft":"scrollTop"]=s,x.current=E.offset=e,n=!0}n&&setTimeout((()=>n=!1),40)}};v.addEventListener("scroll",i,{passive:!0});const f=e=>v.scrollLeft+=e.deltaY/2;return r&&v.addEventListener("wheel",f,{passive:!0}),()=>{v.removeEventListener("scroll",i),r&&v.removeEventListener("wheel",f)}}),[v,u,t,E,d,r]);let b=0;return o.useFrame(((t,r)=>{E.offset=c.MathUtils.damp(b=E.offset,x.current,n,r),E.delta=c.MathUtils.damp(E.delta,Math.abs(b-E.offset),n,r),E.delta>e&&d()})),a.createElement(h.Provider,{value:E},i)},exports.useScroll=p;
|
package/web/ScrollControls.d.ts
CHANGED
|
@@ -18,11 +18,15 @@ export declare type ScrollControlsState = {
|
|
|
18
18
|
offset: number;
|
|
19
19
|
delta: number;
|
|
20
20
|
pages: number;
|
|
21
|
-
range(
|
|
22
|
-
|
|
21
|
+
range(from: number, distance: number, margin?: number): number;
|
|
22
|
+
curve(from: number, distance: number, margin?: number): number;
|
|
23
|
+
visible(from: number, distance: number, margin?: number): boolean;
|
|
23
24
|
};
|
|
24
25
|
export declare function useScroll(): ScrollControlsState;
|
|
25
26
|
export declare function ScrollControls({ eps, infinite, horizontal, pages, distance, damping, children, }: ScrollControlsProps): JSX.Element;
|
|
26
|
-
|
|
27
|
-
html?: boolean
|
|
28
|
-
|
|
27
|
+
declare type ScrollProps = {
|
|
28
|
+
html?: boolean;
|
|
29
|
+
children?: React.ReactNode;
|
|
30
|
+
};
|
|
31
|
+
export declare const Scroll: React.ForwardRefExoticComponent<ScrollProps & React.RefAttributes<unknown>>;
|
|
32
|
+
export {};
|
package/web/ScrollControls.js
CHANGED
|
@@ -43,21 +43,28 @@ function ScrollControls({
|
|
|
43
43
|
scroll,
|
|
44
44
|
pages,
|
|
45
45
|
|
|
46
|
-
// 0
|
|
47
|
-
range(
|
|
48
|
-
const
|
|
46
|
+
// 0-1 for a range between from -> from + distance
|
|
47
|
+
range(from, distance, margin = 0) {
|
|
48
|
+
const start = from - margin;
|
|
49
|
+
const end = start + distance + margin * 2;
|
|
49
50
|
return this.offset < start ? 0 : this.offset > end ? 1 : (this.offset - start) / (end - start);
|
|
50
51
|
},
|
|
51
52
|
|
|
52
|
-
//
|
|
53
|
-
|
|
54
|
-
|
|
53
|
+
// 0-1-0 for a range between from -> from + distance
|
|
54
|
+
curve(from, distance, margin = 0) {
|
|
55
|
+
return Math.sin(this.range(from, distance, margin) * Math.PI);
|
|
56
|
+
},
|
|
57
|
+
|
|
58
|
+
// true/false for a range between from -> from + distance
|
|
59
|
+
visible(from, distance, margin = 0) {
|
|
60
|
+
const start = from - margin;
|
|
61
|
+
const end = start + distance + margin * 2;
|
|
55
62
|
return this.offset >= start && this.offset <= end;
|
|
56
63
|
}
|
|
57
64
|
|
|
58
65
|
};
|
|
59
66
|
return state;
|
|
60
|
-
}, [eps, damping, horizontal, pages
|
|
67
|
+
}, [eps, damping, horizontal, pages]);
|
|
61
68
|
React.useEffect(() => {
|
|
62
69
|
el.style.position = 'absolute';
|
|
63
70
|
el.style.width = '100%';
|
|
@@ -97,7 +104,7 @@ function ScrollControls({
|
|
|
97
104
|
raycaster.computeOffsets = oldCompute;
|
|
98
105
|
events.connect == null ? void 0 : events.connect(oldTarget);
|
|
99
106
|
};
|
|
100
|
-
}, [pages, distance, horizontal, el, fill, fixed, target
|
|
107
|
+
}, [pages, distance, horizontal, el, fill, fixed, target]);
|
|
101
108
|
React.useEffect(() => {
|
|
102
109
|
const containerLength = size[horizontal ? 'width' : 'height'];
|
|
103
110
|
const scrollLength = el[horizontal ? 'scrollWidth' : 'scrollHeight'];
|