motion 10.3.0 → 10.5.0-alpha.1
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/README.md +0 -19
- package/dist/main.cjs.js +11 -13
- package/dist/main.es.js +7 -6
- package/dist/motion.min.js +1 -1
- package/dist/motion.umd.js +8 -1264
- package/dist/size-index.js +1 -0
- package/lib/index.js +5 -0
- package/lib/index.js.map +1 -0
- package/package.json +5 -137
- package/types/index.d.ts +3 -7
- package/types/index.d.ts.map +1 -0
- package/CHANGELOG.md +0 -85
- package/LICENSE +0 -21
- package/dist/react.cjs.js +0 -9
- package/dist/react.es.js +0 -1
- package/dist/size-animate-dom.js +0 -1
- package/dist/size-animate-style.js +0 -1
- package/dist/size-react.js +0 -1
- package/dist/size-spring.js +0 -1
- package/dist/size-timeline-dom.js +0 -1
- package/dist/size-webpack-animate.js +0 -1
- package/dist/targets/dom/animate-style.cjs.js +0 -182
- package/dist/targets/dom/animate-style.es.js +0 -178
- package/dist/targets/dom/animate.cjs.js +0 -42
- package/dist/targets/dom/animate.es.js +0 -38
- package/dist/targets/dom/data.cjs.js +0 -18
- package/dist/targets/dom/data.es.js +0 -14
- package/dist/targets/dom/style.cjs.js +0 -22
- package/dist/targets/dom/style.es.js +0 -18
- package/dist/targets/dom/timeline/index.cjs.js +0 -174
- package/dist/targets/dom/timeline/index.es.js +0 -169
- package/dist/targets/dom/timeline/utils/calc-time.cjs.js +0 -23
- package/dist/targets/dom/timeline/utils/calc-time.es.js +0 -19
- package/dist/targets/dom/timeline/utils/edit.cjs.js +0 -36
- package/dist/targets/dom/timeline/utils/edit.es.js +0 -31
- package/dist/targets/dom/timeline/utils/sort.cjs.js +0 -14
- package/dist/targets/dom/timeline/utils/sort.es.js +0 -10
- package/dist/targets/dom/utils/apply.cjs.js +0 -9
- package/dist/targets/dom/utils/apply.es.js +0 -4
- package/dist/targets/dom/utils/controls.cjs.js +0 -59
- package/dist/targets/dom/utils/controls.es.js +0 -54
- package/dist/targets/dom/utils/css-var.cjs.js +0 -29
- package/dist/targets/dom/utils/css-var.es.js +0 -23
- package/dist/targets/dom/utils/defaults.cjs.js +0 -13
- package/dist/targets/dom/utils/defaults.es.js +0 -9
- package/dist/targets/dom/utils/easing.cjs.js +0 -18
- package/dist/targets/dom/utils/easing.es.js +0 -10
- package/dist/targets/dom/utils/feature-detection.cjs.js +0 -31
- package/dist/targets/dom/utils/feature-detection.es.js +0 -27
- package/dist/targets/dom/utils/get-style-name.cjs.js +0 -13
- package/dist/targets/dom/utils/get-style-name.es.js +0 -9
- package/dist/targets/dom/utils/keyframes.cjs.js +0 -16
- package/dist/targets/dom/utils/keyframes.es.js +0 -11
- package/dist/targets/dom/utils/options.cjs.js +0 -7
- package/dist/targets/dom/utils/options.es.js +0 -3
- package/dist/targets/dom/utils/resolve-elements.cjs.js +0 -22
- package/dist/targets/dom/utils/resolve-elements.es.js +0 -18
- package/dist/targets/dom/utils/stop-animation.cjs.js +0 -19
- package/dist/targets/dom/utils/stop-animation.es.js +0 -15
- package/dist/targets/dom/utils/time.cjs.js +0 -7
- package/dist/targets/dom/utils/time.es.js +0 -3
- package/dist/targets/dom/utils/transforms.cjs.js +0 -85
- package/dist/targets/dom/utils/transforms.es.js +0 -74
- package/dist/targets/js/NumberAnimation.cjs.js +0 -144
- package/dist/targets/js/NumberAnimation.es.js +0 -140
- package/dist/targets/js/easing/cubic-bezier.cjs.js +0 -57
- package/dist/targets/js/easing/cubic-bezier.es.js +0 -53
- package/dist/targets/js/easing/glide/generator.cjs.js +0 -99
- package/dist/targets/js/easing/glide/generator.es.js +0 -95
- package/dist/targets/js/easing/glide/index.cjs.js +0 -10
- package/dist/targets/js/easing/glide/index.es.js +0 -6
- package/dist/targets/js/easing/spring/generator.cjs.js +0 -64
- package/dist/targets/js/easing/spring/generator.es.js +0 -57
- package/dist/targets/js/easing/spring/index.cjs.js +0 -10
- package/dist/targets/js/easing/spring/index.es.js +0 -6
- package/dist/targets/js/easing/steps.cjs.js +0 -15
- package/dist/targets/js/easing/steps.es.js +0 -11
- package/dist/targets/js/easing/utils/create-generator-easing.cjs.js +0 -71
- package/dist/targets/js/easing/utils/create-generator-easing.es.js +0 -67
- package/dist/targets/js/easing/utils/get-function.cjs.js +0 -37
- package/dist/targets/js/easing/utils/get-function.es.js +0 -33
- package/dist/targets/js/easing/utils/has-reached-target.cjs.js +0 -10
- package/dist/targets/js/easing/utils/has-reached-target.es.js +0 -6
- package/dist/targets/js/easing/utils/pregenerate-keyframes.cjs.js +0 -34
- package/dist/targets/js/easing/utils/pregenerate-keyframes.es.js +0 -30
- package/dist/targets/js/utils/get-easing.cjs.js +0 -14
- package/dist/targets/js/utils/get-easing.es.js +0 -10
- package/dist/targets/js/utils/interpolate.cjs.js +0 -35
- package/dist/targets/js/utils/interpolate.es.js +0 -31
- package/dist/targets/js/utils/offset.cjs.js +0 -22
- package/dist/targets/js/utils/offset.es.js +0 -17
- package/dist/targets/react/animated.cjs.js +0 -126
- package/dist/targets/react/animated.es.js +0 -101
- package/dist/targets/react/context.cjs.js +0 -9
- package/dist/targets/react/context.es.js +0 -5
- package/dist/targets/react/hooks/use-animation.cjs.js +0 -47
- package/dist/targets/react/hooks/use-animation.es.js +0 -43
- package/dist/targets/react/hooks/use-exit.cjs.js +0 -27
- package/dist/targets/react/hooks/use-exit.es.js +0 -23
- package/dist/targets/react/hooks/use-gesture-state.cjs.js +0 -17
- package/dist/targets/react/hooks/use-gesture-state.es.js +0 -13
- package/dist/targets/react/hooks/use-hover.cjs.js +0 -24
- package/dist/targets/react/hooks/use-hover.es.js +0 -20
- package/dist/targets/react/hooks/use-press.cjs.js +0 -25
- package/dist/targets/react/hooks/use-press.es.js +0 -21
- package/dist/targets/react/hooks/use-viewport.cjs.js +0 -37
- package/dist/targets/react/hooks/use-viewport.es.js +0 -33
- package/dist/targets/react/index.cjs.js +0 -17
- package/dist/targets/react/index.es.js +0 -13
- package/dist/targets/react/utils/has-changed.cjs.js +0 -24
- package/dist/targets/react/utils/has-changed.es.js +0 -19
- package/dist/targets/react/utils/keyframes.cjs.js +0 -38
- package/dist/targets/react/utils/keyframes.es.js +0 -34
- package/dist/targets/react/utils/poses.cjs.js +0 -14
- package/dist/targets/react/utils/poses.es.js +0 -10
- package/dist/targets/react/utils/update-target.cjs.js +0 -20
- package/dist/targets/react/utils/update-target.es.js +0 -16
- package/dist/utils/array.cjs.js +0 -14
- package/dist/utils/array.es.js +0 -9
- package/dist/utils/clamp.cjs.js +0 -7
- package/dist/utils/clamp.es.js +0 -3
- package/dist/utils/is-number.cjs.js +0 -7
- package/dist/utils/is-number.es.js +0 -3
- package/dist/utils/mix.cjs.js +0 -28
- package/dist/utils/mix.es.js +0 -24
- package/dist/utils/noop.cjs.js +0 -9
- package/dist/utils/noop.es.js +0 -4
- package/dist/utils/progress.cjs.js +0 -20
- package/dist/utils/progress.es.js +0 -16
- package/dist/utils/stagger.cjs.js +0 -38
- package/dist/utils/stagger.es.js +0 -32
- package/dist/utils/velocity-per-second.cjs.js +0 -15
- package/dist/utils/velocity-per-second.es.js +0 -11
- package/dist/utils/wrap.cjs.js +0 -10
- package/dist/utils/wrap.es.js +0 -6
- package/react/package.json +0 -6
- package/types/react-entry.d.ts +0 -2
- package/types/targets/dom/animate-style.d.ts +0 -2
- package/types/targets/dom/animate.d.ts +0 -2
- package/types/targets/dom/data.d.ts +0 -2
- package/types/targets/dom/style.d.ts +0 -3
- package/types/targets/dom/timeline/index.d.ts +0 -15
- package/types/targets/dom/timeline/types.d.ts +0 -13
- package/types/targets/dom/timeline/utils/calc-time.d.ts +0 -2
- package/types/targets/dom/timeline/utils/edit.d.ts +0 -4
- package/types/targets/dom/timeline/utils/sort.d.ts +0 -2
- package/types/targets/dom/types.d.ts +0 -114
- package/types/targets/dom/utils/apply.d.ts +0 -3
- package/types/targets/dom/utils/controls.d.ts +0 -12
- package/types/targets/dom/utils/css-var.d.ts +0 -3
- package/types/targets/dom/utils/defaults.d.ts +0 -8
- package/types/targets/dom/utils/easing.d.ts +0 -6
- package/types/targets/dom/utils/feature-detection.d.ts +0 -8
- package/types/targets/dom/utils/get-style-name.d.ts +0 -1
- package/types/targets/dom/utils/keyframes.d.ts +0 -3
- package/types/targets/dom/utils/options.d.ts +0 -2
- package/types/targets/dom/utils/resolve-elements.d.ts +0 -4
- package/types/targets/dom/utils/stop-animation.d.ts +0 -6
- package/types/targets/dom/utils/time.d.ts +0 -1
- package/types/targets/dom/utils/transforms.d.ts +0 -20
- package/types/targets/js/NumberAnimation.d.ts +0 -24
- package/types/targets/js/easing/cubic-bezier.d.ts +0 -1
- package/types/targets/js/easing/glide/generator.d.ts +0 -5
- package/types/targets/js/easing/glide/index.d.ts +0 -2
- package/types/targets/js/easing/glide/types.d.ts +0 -14
- package/types/targets/js/easing/spring/generator.d.ts +0 -6
- package/types/targets/js/easing/spring/index.d.ts +0 -2
- package/types/targets/js/easing/spring/types.d.ts +0 -10
- package/types/targets/js/easing/steps.d.ts +0 -3
- package/types/targets/js/easing/utils/create-generator-easing.d.ts +0 -3
- package/types/targets/js/easing/utils/get-function.d.ts +0 -3
- package/types/targets/js/easing/utils/has-reached-target.d.ts +0 -1
- package/types/targets/js/easing/utils/pregenerate-keyframes.d.ts +0 -7
- package/types/targets/js/types.d.ts +0 -12
- package/types/targets/js/utils/get-easing.d.ts +0 -1
- package/types/targets/js/utils/interpolate.d.ts +0 -2
- package/types/targets/js/utils/offset.d.ts +0 -2
- package/types/targets/react/animated.d.ts +0 -3
- package/types/targets/react/context.d.ts +0 -3
- package/types/targets/react/hooks/use-animation.d.ts +0 -4
- package/types/targets/react/hooks/use-exit.d.ts +0 -3
- package/types/targets/react/hooks/use-gesture-state.d.ts +0 -4
- package/types/targets/react/hooks/use-hover.d.ts +0 -4
- package/types/targets/react/hooks/use-press.d.ts +0 -4
- package/types/targets/react/hooks/use-viewport.d.ts +0 -4
- package/types/targets/react/index.d.ts +0 -2
- package/types/targets/react/types.d.ts +0 -108
- package/types/targets/react/utils/has-changed.d.ts +0 -2
- package/types/targets/react/utils/keyframes.d.ts +0 -3
- package/types/targets/react/utils/poses.d.ts +0 -2
- package/types/targets/react/utils/supported-elements.d.ts +0 -8
- package/types/targets/react/utils/update-target.d.ts +0 -3
- package/types/utils/array.d.ts +0 -2
- package/types/utils/clamp.d.ts +0 -1
- package/types/utils/interpolate.d.ts +0 -0
- package/types/utils/is-number.d.ts +0 -1
- package/types/utils/mix.d.ts +0 -1
- package/types/utils/noop.d.ts +0 -2
- package/types/utils/progress.d.ts +0 -1
- package/types/utils/stagger.d.ts +0 -12
- package/types/utils/value-types.d.ts +0 -0
- package/types/utils/velocity-per-second.d.ts +0 -1
- package/types/utils/wrap.d.ts +0 -1
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { mix } from '../../../utils/mix.es.js';
|
|
2
|
-
import { noopReturn } from '../../../utils/noop.es.js';
|
|
3
|
-
import { progress } from '../../../utils/progress.es.js';
|
|
4
|
-
import { getEasingForSegment } from './get-easing.es.js';
|
|
5
|
-
import { defaultOffset, fillOffset } from './offset.es.js';
|
|
6
|
-
|
|
7
|
-
const clampProgress = (p) => Math.min(1, Math.max(p, 0));
|
|
8
|
-
function slowInterpolateNumbers(output, input = defaultOffset(output.length), easing = noopReturn) {
|
|
9
|
-
const length = output.length;
|
|
10
|
-
/**
|
|
11
|
-
* If the input length is lower than the output we
|
|
12
|
-
* fill the input to match. This currently assumes the input
|
|
13
|
-
* is an animation progress value so is a good candidate for
|
|
14
|
-
* moving outside the function.
|
|
15
|
-
*/
|
|
16
|
-
const remainder = length - input.length;
|
|
17
|
-
remainder > 0 && fillOffset(input, remainder);
|
|
18
|
-
return (t) => {
|
|
19
|
-
let i = 0;
|
|
20
|
-
for (; i < length - 2; i++) {
|
|
21
|
-
if (t < input[i + 1])
|
|
22
|
-
break;
|
|
23
|
-
}
|
|
24
|
-
let progressInRange = clampProgress(progress(input[i], input[i + 1], t));
|
|
25
|
-
const segmentEasing = getEasingForSegment(easing, i);
|
|
26
|
-
progressInRange = segmentEasing(progressInRange);
|
|
27
|
-
return mix(output[i], output[i + 1], progressInRange);
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export { slowInterpolateNumbers };
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
-
|
|
5
|
-
var mix = require('../../../utils/mix.cjs.js');
|
|
6
|
-
var progress = require('../../../utils/progress.cjs.js');
|
|
7
|
-
|
|
8
|
-
function fillOffset(offset, remaining) {
|
|
9
|
-
const min = offset[offset.length - 1];
|
|
10
|
-
for (let i = 1; i <= remaining; i++) {
|
|
11
|
-
const offsetProgress = progress.progress(0, remaining, i);
|
|
12
|
-
offset.push(mix.mix(min, 1, offsetProgress));
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
function defaultOffset(length) {
|
|
16
|
-
const offset = [0];
|
|
17
|
-
fillOffset(offset, length - 1);
|
|
18
|
-
return offset;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
exports.defaultOffset = defaultOffset;
|
|
22
|
-
exports.fillOffset = fillOffset;
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { mix } from '../../../utils/mix.es.js';
|
|
2
|
-
import { progress } from '../../../utils/progress.es.js';
|
|
3
|
-
|
|
4
|
-
function fillOffset(offset, remaining) {
|
|
5
|
-
const min = offset[offset.length - 1];
|
|
6
|
-
for (let i = 1; i <= remaining; i++) {
|
|
7
|
-
const offsetProgress = progress(0, remaining, i);
|
|
8
|
-
offset.push(mix(min, 1, offsetProgress));
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
function defaultOffset(length) {
|
|
12
|
-
const offset = [0];
|
|
13
|
-
fillOffset(offset, length - 1);
|
|
14
|
-
return offset;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export { defaultOffset, fillOffset };
|
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
-
|
|
5
|
-
var tslib = require('tslib');
|
|
6
|
-
var React = require('react');
|
|
7
|
-
var useAnimation = require('./hooks/use-animation.cjs.js');
|
|
8
|
-
var useHover = require('./hooks/use-hover.cjs.js');
|
|
9
|
-
var usePress = require('./hooks/use-press.cjs.js');
|
|
10
|
-
var useExit = require('./hooks/use-exit.cjs.js');
|
|
11
|
-
var useViewport = require('./hooks/use-viewport.cjs.js');
|
|
12
|
-
var keyframes = require('./utils/keyframes.cjs.js');
|
|
13
|
-
var poses = require('./utils/poses.cjs.js');
|
|
14
|
-
var context = require('./context.cjs.js');
|
|
15
|
-
|
|
16
|
-
function _interopNamespace(e) {
|
|
17
|
-
if (e && e.__esModule) return e;
|
|
18
|
-
var n = Object.create(null);
|
|
19
|
-
if (e) {
|
|
20
|
-
Object.keys(e).forEach(function (k) {
|
|
21
|
-
if (k !== 'default') {
|
|
22
|
-
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
23
|
-
Object.defineProperty(n, k, d.get ? d : {
|
|
24
|
-
enumerable: true,
|
|
25
|
-
get: function () {
|
|
26
|
-
return e[k];
|
|
27
|
-
}
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
n['default'] = e;
|
|
33
|
-
return Object.freeze(n);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
37
|
-
|
|
38
|
-
function createAnimatedComponent(Component) {
|
|
39
|
-
function Animated(props, _externalRef) {
|
|
40
|
-
// TODO: Support externalRef if provided
|
|
41
|
-
const ref = React.useRef(null);
|
|
42
|
-
const { options: defaultOptions, style, initial, hover, press, exit, inViewport, viewport, poses: poses$1, onStart, onComplete, onViewportEnter, onViewportLeave, inherit = true } = props, forwardProps = tslib.__rest(props
|
|
43
|
-
/**
|
|
44
|
-
* Track throughout the render which poses are considered active and should
|
|
45
|
-
* be passed to children.
|
|
46
|
-
*/
|
|
47
|
-
, ["options", "style", "initial", "hover", "press", "exit", "inViewport", "viewport", "poses", "onStart", "onComplete", "onViewportEnter", "onViewportLeave", "inherit"]);
|
|
48
|
-
/**
|
|
49
|
-
* Track throughout the render which poses are considered active and should
|
|
50
|
-
* be passed to children.
|
|
51
|
-
*/
|
|
52
|
-
const isPoseActive = { initial: true, style: true };
|
|
53
|
-
/**
|
|
54
|
-
* Inherit poses from the parent context,
|
|
55
|
-
*/
|
|
56
|
-
let inherited = React.useContext(context.AnimationContext);
|
|
57
|
-
if (!inherit)
|
|
58
|
-
inherited = {};
|
|
59
|
-
const resolvedStyle = poses.resolvePose(style, inherited.style, poses$1);
|
|
60
|
-
const resolvedInitial = poses.resolvePose(initial, inherited.initial, poses$1);
|
|
61
|
-
const initialTarget = Object.assign(Object.assign({}, resolvedStyle), resolvedInitial);
|
|
62
|
-
const target = Object.assign(Object.assign({}, resolvedInitial), resolvedStyle);
|
|
63
|
-
const options = Object.assign(Object.assign({}, defaultOptions), resolvedStyle === null || resolvedStyle === void 0 ? void 0 : resolvedStyle.options);
|
|
64
|
-
/**
|
|
65
|
-
* If we haven't created a style prop for SSR yet (this is the initial render)
|
|
66
|
-
* make one. We provide this to React every render as beyond that with manage style
|
|
67
|
-
* via animations.
|
|
68
|
-
*/
|
|
69
|
-
const styleProp = React.useRef(null);
|
|
70
|
-
styleProp.current || (styleProp.current = keyframes.convertKeyframesToStyles(initialTarget));
|
|
71
|
-
/**
|
|
72
|
-
* Attach animation event handlers (gestures/exit/viewport appearance).
|
|
73
|
-
* This are called in reverse order of which styles should take priority when
|
|
74
|
-
* active, for example if there's a hover and press gesture active the press
|
|
75
|
-
* gesture will take precedence.
|
|
76
|
-
*/
|
|
77
|
-
const hoverProps = useHover.useHover(target, options, props, inherited, isPoseActive);
|
|
78
|
-
const pressProps = usePress.usePress(target, options, props, inherited, isPoseActive);
|
|
79
|
-
useViewport.useViewport(ref, target, options, props, inherited, isPoseActive);
|
|
80
|
-
const onExitComplete = useExit.useExit(target, options, props, inherited);
|
|
81
|
-
/**
|
|
82
|
-
* Compare our final calculated style target with the one from the previous render
|
|
83
|
-
* and trigger any necessary animations.
|
|
84
|
-
*/
|
|
85
|
-
useAnimation.useAnimation(ref, initialTarget, target, options, onStart, (animation) => {
|
|
86
|
-
onComplete && onComplete(animation);
|
|
87
|
-
onExitComplete && onExitComplete();
|
|
88
|
-
});
|
|
89
|
-
const element = React.createElement(Component, Object.assign({}, forwardProps, hoverProps, pressProps, {
|
|
90
|
-
style: styleProp.current,
|
|
91
|
-
ref,
|
|
92
|
-
}));
|
|
93
|
-
/**
|
|
94
|
-
* Create a variant context to pass forward to child components.
|
|
95
|
-
*/
|
|
96
|
-
const context$1 = variantProps.reduce((acc, key) => {
|
|
97
|
-
acc[key] = undefined;
|
|
98
|
-
if (props[key]) {
|
|
99
|
-
if (typeof props[key] === "string" && isPoseActive[key]) {
|
|
100
|
-
acc[key] = props[key];
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
else if (inherited[key]) {
|
|
104
|
-
acc[key] = inherited[key];
|
|
105
|
-
}
|
|
106
|
-
return acc;
|
|
107
|
-
}, {});
|
|
108
|
-
/**
|
|
109
|
-
* Memoize the context so we only trigger a re-render in children if the values
|
|
110
|
-
* within it change.
|
|
111
|
-
*/
|
|
112
|
-
const memoizedContext = React.useMemo(() => context$1, Object.values(context$1));
|
|
113
|
-
return (React__namespace.createElement(context.AnimationContext.Provider, { value: memoizedContext }, element));
|
|
114
|
-
}
|
|
115
|
-
return React.forwardRef(Animated);
|
|
116
|
-
}
|
|
117
|
-
const variantProps = [
|
|
118
|
-
"initial",
|
|
119
|
-
"style",
|
|
120
|
-
"hover",
|
|
121
|
-
"press",
|
|
122
|
-
"inViewport",
|
|
123
|
-
"exit",
|
|
124
|
-
];
|
|
125
|
-
|
|
126
|
-
exports.createAnimatedComponent = createAnimatedComponent;
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
import { __rest } from 'tslib';
|
|
2
|
-
import * as React from 'react';
|
|
3
|
-
import { forwardRef, useRef, useContext, createElement, useMemo } from 'react';
|
|
4
|
-
import { useAnimation } from './hooks/use-animation.es.js';
|
|
5
|
-
import { useHover } from './hooks/use-hover.es.js';
|
|
6
|
-
import { usePress } from './hooks/use-press.es.js';
|
|
7
|
-
import { useExit } from './hooks/use-exit.es.js';
|
|
8
|
-
import { useViewport } from './hooks/use-viewport.es.js';
|
|
9
|
-
import { convertKeyframesToStyles } from './utils/keyframes.es.js';
|
|
10
|
-
import { resolvePose } from './utils/poses.es.js';
|
|
11
|
-
import { AnimationContext } from './context.es.js';
|
|
12
|
-
|
|
13
|
-
function createAnimatedComponent(Component) {
|
|
14
|
-
function Animated(props, _externalRef) {
|
|
15
|
-
// TODO: Support externalRef if provided
|
|
16
|
-
const ref = useRef(null);
|
|
17
|
-
const { options: defaultOptions, style, initial, hover, press, exit, inViewport, viewport, poses, onStart, onComplete, onViewportEnter, onViewportLeave, inherit = true } = props, forwardProps = __rest(props
|
|
18
|
-
/**
|
|
19
|
-
* Track throughout the render which poses are considered active and should
|
|
20
|
-
* be passed to children.
|
|
21
|
-
*/
|
|
22
|
-
, ["options", "style", "initial", "hover", "press", "exit", "inViewport", "viewport", "poses", "onStart", "onComplete", "onViewportEnter", "onViewportLeave", "inherit"]);
|
|
23
|
-
/**
|
|
24
|
-
* Track throughout the render which poses are considered active and should
|
|
25
|
-
* be passed to children.
|
|
26
|
-
*/
|
|
27
|
-
const isPoseActive = { initial: true, style: true };
|
|
28
|
-
/**
|
|
29
|
-
* Inherit poses from the parent context,
|
|
30
|
-
*/
|
|
31
|
-
let inherited = useContext(AnimationContext);
|
|
32
|
-
if (!inherit)
|
|
33
|
-
inherited = {};
|
|
34
|
-
const resolvedStyle = resolvePose(style, inherited.style, poses);
|
|
35
|
-
const resolvedInitial = resolvePose(initial, inherited.initial, poses);
|
|
36
|
-
const initialTarget = Object.assign(Object.assign({}, resolvedStyle), resolvedInitial);
|
|
37
|
-
const target = Object.assign(Object.assign({}, resolvedInitial), resolvedStyle);
|
|
38
|
-
const options = Object.assign(Object.assign({}, defaultOptions), resolvedStyle === null || resolvedStyle === void 0 ? void 0 : resolvedStyle.options);
|
|
39
|
-
/**
|
|
40
|
-
* If we haven't created a style prop for SSR yet (this is the initial render)
|
|
41
|
-
* make one. We provide this to React every render as beyond that with manage style
|
|
42
|
-
* via animations.
|
|
43
|
-
*/
|
|
44
|
-
const styleProp = useRef(null);
|
|
45
|
-
styleProp.current || (styleProp.current = convertKeyframesToStyles(initialTarget));
|
|
46
|
-
/**
|
|
47
|
-
* Attach animation event handlers (gestures/exit/viewport appearance).
|
|
48
|
-
* This are called in reverse order of which styles should take priority when
|
|
49
|
-
* active, for example if there's a hover and press gesture active the press
|
|
50
|
-
* gesture will take precedence.
|
|
51
|
-
*/
|
|
52
|
-
const hoverProps = useHover(target, options, props, inherited, isPoseActive);
|
|
53
|
-
const pressProps = usePress(target, options, props, inherited, isPoseActive);
|
|
54
|
-
useViewport(ref, target, options, props, inherited, isPoseActive);
|
|
55
|
-
const onExitComplete = useExit(target, options, props, inherited);
|
|
56
|
-
/**
|
|
57
|
-
* Compare our final calculated style target with the one from the previous render
|
|
58
|
-
* and trigger any necessary animations.
|
|
59
|
-
*/
|
|
60
|
-
useAnimation(ref, initialTarget, target, options, onStart, (animation) => {
|
|
61
|
-
onComplete && onComplete(animation);
|
|
62
|
-
onExitComplete && onExitComplete();
|
|
63
|
-
});
|
|
64
|
-
const element = createElement(Component, Object.assign({}, forwardProps, hoverProps, pressProps, {
|
|
65
|
-
style: styleProp.current,
|
|
66
|
-
ref,
|
|
67
|
-
}));
|
|
68
|
-
/**
|
|
69
|
-
* Create a variant context to pass forward to child components.
|
|
70
|
-
*/
|
|
71
|
-
const context = variantProps.reduce((acc, key) => {
|
|
72
|
-
acc[key] = undefined;
|
|
73
|
-
if (props[key]) {
|
|
74
|
-
if (typeof props[key] === "string" && isPoseActive[key]) {
|
|
75
|
-
acc[key] = props[key];
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
else if (inherited[key]) {
|
|
79
|
-
acc[key] = inherited[key];
|
|
80
|
-
}
|
|
81
|
-
return acc;
|
|
82
|
-
}, {});
|
|
83
|
-
/**
|
|
84
|
-
* Memoize the context so we only trigger a re-render in children if the values
|
|
85
|
-
* within it change.
|
|
86
|
-
*/
|
|
87
|
-
const memoizedContext = useMemo(() => context, Object.values(context));
|
|
88
|
-
return (React.createElement(AnimationContext.Provider, { value: memoizedContext }, element));
|
|
89
|
-
}
|
|
90
|
-
return forwardRef(Animated);
|
|
91
|
-
}
|
|
92
|
-
const variantProps = [
|
|
93
|
-
"initial",
|
|
94
|
-
"style",
|
|
95
|
-
"hover",
|
|
96
|
-
"press",
|
|
97
|
-
"inViewport",
|
|
98
|
-
"exit",
|
|
99
|
-
];
|
|
100
|
-
|
|
101
|
-
export { createAnimatedComponent };
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
-
|
|
5
|
-
var React = require('react');
|
|
6
|
-
var animateStyle = require('../../dom/animate-style.cjs.js');
|
|
7
|
-
var noop = require('../../../utils/noop.cjs.js');
|
|
8
|
-
var hasChanged = require('../utils/has-changed.cjs.js');
|
|
9
|
-
var options = require('../../dom/utils/options.cjs.js');
|
|
10
|
-
|
|
11
|
-
function useAnimation(ref, initial, target, options$1, onStart, onComplete) {
|
|
12
|
-
const prevTarget = React.useRef(initial);
|
|
13
|
-
React.useEffect(() => {
|
|
14
|
-
const targetKeyframe = {};
|
|
15
|
-
const allKeys = new Set([
|
|
16
|
-
...Object.keys(target),
|
|
17
|
-
...Object.keys(prevTarget.current),
|
|
18
|
-
]);
|
|
19
|
-
allKeys.forEach((key) => {
|
|
20
|
-
let next = target[key];
|
|
21
|
-
if (!hasChanged.hasChanged(next, prevTarget.current[key]))
|
|
22
|
-
return;
|
|
23
|
-
/**
|
|
24
|
-
* TODO: If next is undefined, throw error or record a "base value"
|
|
25
|
-
* to animate back down to
|
|
26
|
-
*/
|
|
27
|
-
targetKeyframe[key] = next;
|
|
28
|
-
});
|
|
29
|
-
if (Object.keys(targetKeyframe).length && ref.current) {
|
|
30
|
-
onStart === null || onStart === void 0 ? void 0 : onStart(targetKeyframe);
|
|
31
|
-
const animationFactories = [];
|
|
32
|
-
for (const key in targetKeyframe) {
|
|
33
|
-
const animation = animateStyle.animateStyle(ref.current, key, targetKeyframe[key], options.getOptions(options$1, key));
|
|
34
|
-
animationFactories.push(animation);
|
|
35
|
-
}
|
|
36
|
-
const animations = animationFactories
|
|
37
|
-
.map((factory) => factory())
|
|
38
|
-
.filter(Boolean);
|
|
39
|
-
Promise.all(animations.map((animation) => animation.finished))
|
|
40
|
-
.then(() => onComplete === null || onComplete === void 0 ? void 0 : onComplete(targetKeyframe))
|
|
41
|
-
.catch(noop.noop);
|
|
42
|
-
}
|
|
43
|
-
prevTarget.current = target;
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
exports.useAnimation = useAnimation;
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { useRef, useEffect } from 'react';
|
|
2
|
-
import { animateStyle } from '../../dom/animate-style.es.js';
|
|
3
|
-
import { noop } from '../../../utils/noop.es.js';
|
|
4
|
-
import { hasChanged } from '../utils/has-changed.es.js';
|
|
5
|
-
import { getOptions } from '../../dom/utils/options.es.js';
|
|
6
|
-
|
|
7
|
-
function useAnimation(ref, initial, target, options, onStart, onComplete) {
|
|
8
|
-
const prevTarget = useRef(initial);
|
|
9
|
-
useEffect(() => {
|
|
10
|
-
const targetKeyframe = {};
|
|
11
|
-
const allKeys = new Set([
|
|
12
|
-
...Object.keys(target),
|
|
13
|
-
...Object.keys(prevTarget.current),
|
|
14
|
-
]);
|
|
15
|
-
allKeys.forEach((key) => {
|
|
16
|
-
let next = target[key];
|
|
17
|
-
if (!hasChanged(next, prevTarget.current[key]))
|
|
18
|
-
return;
|
|
19
|
-
/**
|
|
20
|
-
* TODO: If next is undefined, throw error or record a "base value"
|
|
21
|
-
* to animate back down to
|
|
22
|
-
*/
|
|
23
|
-
targetKeyframe[key] = next;
|
|
24
|
-
});
|
|
25
|
-
if (Object.keys(targetKeyframe).length && ref.current) {
|
|
26
|
-
onStart === null || onStart === void 0 ? void 0 : onStart(targetKeyframe);
|
|
27
|
-
const animationFactories = [];
|
|
28
|
-
for (const key in targetKeyframe) {
|
|
29
|
-
const animation = animateStyle(ref.current, key, targetKeyframe[key], getOptions(options, key));
|
|
30
|
-
animationFactories.push(animation);
|
|
31
|
-
}
|
|
32
|
-
const animations = animationFactories
|
|
33
|
-
.map((factory) => factory())
|
|
34
|
-
.filter(Boolean);
|
|
35
|
-
Promise.all(animations.map((animation) => animation.finished))
|
|
36
|
-
.then(() => onComplete === null || onComplete === void 0 ? void 0 : onComplete(targetKeyframe))
|
|
37
|
-
.catch(noop);
|
|
38
|
-
}
|
|
39
|
-
prevTarget.current = target;
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
export { useAnimation };
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
-
|
|
5
|
-
var framerMotion = require('framer-motion');
|
|
6
|
-
var React = require('react');
|
|
7
|
-
var poses = require('../utils/poses.cjs.js');
|
|
8
|
-
var updateTarget = require('../utils/update-target.cjs.js');
|
|
9
|
-
|
|
10
|
-
function useExit(target, options, { exit, poses: poses$1 }, { exit: inheritedExit }) {
|
|
11
|
-
const [isPresent, onExitComplete] = framerMotion.usePresence();
|
|
12
|
-
/**
|
|
13
|
-
* In case we don't have an exit animation defined we still need to
|
|
14
|
-
* call onExitComplete if it exits so AnimatePresence knows it
|
|
15
|
-
* can remove this component.
|
|
16
|
-
*/
|
|
17
|
-
React.useEffect(() => {
|
|
18
|
-
if (!exit)
|
|
19
|
-
onExitComplete === null || onExitComplete === void 0 ? void 0 : onExitComplete();
|
|
20
|
-
}, [isPresent]);
|
|
21
|
-
if (exit && !isPresent) {
|
|
22
|
-
updateTarget.updateTargetAndOptions(target, options, poses.resolvePose(exit, inheritedExit, poses$1));
|
|
23
|
-
return onExitComplete;
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
exports.useExit = useExit;
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { usePresence } from 'framer-motion';
|
|
2
|
-
import { useEffect } from 'react';
|
|
3
|
-
import { resolvePose } from '../utils/poses.es.js';
|
|
4
|
-
import { updateTargetAndOptions } from '../utils/update-target.es.js';
|
|
5
|
-
|
|
6
|
-
function useExit(target, options, { exit, poses }, { exit: inheritedExit }) {
|
|
7
|
-
const [isPresent, onExitComplete] = usePresence();
|
|
8
|
-
/**
|
|
9
|
-
* In case we don't have an exit animation defined we still need to
|
|
10
|
-
* call onExitComplete if it exits so AnimatePresence knows it
|
|
11
|
-
* can remove this component.
|
|
12
|
-
*/
|
|
13
|
-
useEffect(() => {
|
|
14
|
-
if (!exit)
|
|
15
|
-
onExitComplete === null || onExitComplete === void 0 ? void 0 : onExitComplete();
|
|
16
|
-
}, [isPresent]);
|
|
17
|
-
if (exit && !isPresent) {
|
|
18
|
-
updateTargetAndOptions(target, options, resolvePose(exit, inheritedExit, poses));
|
|
19
|
-
return onExitComplete;
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export { useExit };
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
-
|
|
5
|
-
var React = require('react');
|
|
6
|
-
var poses = require('../utils/poses.cjs.js');
|
|
7
|
-
var updateTarget = require('../utils/update-target.cjs.js');
|
|
8
|
-
|
|
9
|
-
function useGestureState(target, options, stylesToApply, inheritedPose, poses$1) {
|
|
10
|
-
const [isGestureActive, setGestureState] = React.useState(false);
|
|
11
|
-
if (isGestureActive || inheritedPose) {
|
|
12
|
-
updateTarget.updateTargetAndOptions(target, options, poses.resolvePose(stylesToApply, inheritedPose, poses$1));
|
|
13
|
-
}
|
|
14
|
-
return [isGestureActive || Boolean(inheritedPose), setGestureState];
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
exports.useGestureState = useGestureState;
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { useState } from 'react';
|
|
2
|
-
import { resolvePose } from '../utils/poses.es.js';
|
|
3
|
-
import { updateTargetAndOptions } from '../utils/update-target.es.js';
|
|
4
|
-
|
|
5
|
-
function useGestureState(target, options, stylesToApply, inheritedPose, poses) {
|
|
6
|
-
const [isGestureActive, setGestureState] = useState(false);
|
|
7
|
-
if (isGestureActive || inheritedPose) {
|
|
8
|
-
updateTargetAndOptions(target, options, resolvePose(stylesToApply, inheritedPose, poses));
|
|
9
|
-
}
|
|
10
|
-
return [isGestureActive || Boolean(inheritedPose), setGestureState];
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export { useGestureState };
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
-
|
|
5
|
-
var useGestureState = require('./use-gesture-state.cjs.js');
|
|
6
|
-
|
|
7
|
-
function useHover(target, options, { hover, onPointerEnter, onPointerLeave, poses, } = {}, { hover: inheritedHover }, isPoseActive) {
|
|
8
|
-
const [isHoverActive, setHoverState] = useGestureState.useGestureState(target, options, hover, inheritedHover, poses);
|
|
9
|
-
isPoseActive.hover = isHoverActive;
|
|
10
|
-
return hover
|
|
11
|
-
? {
|
|
12
|
-
onPointerEnter: (e) => {
|
|
13
|
-
onPointerEnter === null || onPointerEnter === void 0 ? void 0 : onPointerEnter(e);
|
|
14
|
-
setHoverState(true);
|
|
15
|
-
},
|
|
16
|
-
onPointerLeave: (e) => {
|
|
17
|
-
onPointerLeave === null || onPointerLeave === void 0 ? void 0 : onPointerLeave(e);
|
|
18
|
-
setHoverState(false);
|
|
19
|
-
},
|
|
20
|
-
}
|
|
21
|
-
: {};
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
exports.useHover = useHover;
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { useGestureState } from './use-gesture-state.es.js';
|
|
2
|
-
|
|
3
|
-
function useHover(target, options, { hover, onPointerEnter, onPointerLeave, poses, } = {}, { hover: inheritedHover }, isPoseActive) {
|
|
4
|
-
const [isHoverActive, setHoverState] = useGestureState(target, options, hover, inheritedHover, poses);
|
|
5
|
-
isPoseActive.hover = isHoverActive;
|
|
6
|
-
return hover
|
|
7
|
-
? {
|
|
8
|
-
onPointerEnter: (e) => {
|
|
9
|
-
onPointerEnter === null || onPointerEnter === void 0 ? void 0 : onPointerEnter(e);
|
|
10
|
-
setHoverState(true);
|
|
11
|
-
},
|
|
12
|
-
onPointerLeave: (e) => {
|
|
13
|
-
onPointerLeave === null || onPointerLeave === void 0 ? void 0 : onPointerLeave(e);
|
|
14
|
-
setHoverState(false);
|
|
15
|
-
},
|
|
16
|
-
}
|
|
17
|
-
: {};
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export { useHover };
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
-
|
|
5
|
-
var useGestureState = require('./use-gesture-state.cjs.js');
|
|
6
|
-
|
|
7
|
-
function usePress(target, options, { press, onPointerDown, poses } = {}, { press: inheritedPress }, isPoseActive) {
|
|
8
|
-
const [isPressActive, setPressState] = useGestureState.useGestureState(target, options, press, inheritedPress, poses);
|
|
9
|
-
isPoseActive.press = isPressActive;
|
|
10
|
-
if (!press)
|
|
11
|
-
return {};
|
|
12
|
-
const onPointerUp = () => {
|
|
13
|
-
setPressState(false);
|
|
14
|
-
window.removeEventListener("pointerup", onPointerUp);
|
|
15
|
-
};
|
|
16
|
-
return {
|
|
17
|
-
onPointerDown: (e) => {
|
|
18
|
-
onPointerDown === null || onPointerDown === void 0 ? void 0 : onPointerDown(e);
|
|
19
|
-
setPressState(true);
|
|
20
|
-
window.addEventListener("pointerup", onPointerUp);
|
|
21
|
-
},
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
exports.usePress = usePress;
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { useGestureState } from './use-gesture-state.es.js';
|
|
2
|
-
|
|
3
|
-
function usePress(target, options, { press, onPointerDown, poses } = {}, { press: inheritedPress }, isPoseActive) {
|
|
4
|
-
const [isPressActive, setPressState] = useGestureState(target, options, press, inheritedPress, poses);
|
|
5
|
-
isPoseActive.press = isPressActive;
|
|
6
|
-
if (!press)
|
|
7
|
-
return {};
|
|
8
|
-
const onPointerUp = () => {
|
|
9
|
-
setPressState(false);
|
|
10
|
-
window.removeEventListener("pointerup", onPointerUp);
|
|
11
|
-
};
|
|
12
|
-
return {
|
|
13
|
-
onPointerDown: (e) => {
|
|
14
|
-
onPointerDown === null || onPointerDown === void 0 ? void 0 : onPointerDown(e);
|
|
15
|
-
setPressState(true);
|
|
16
|
-
window.addEventListener("pointerup", onPointerUp);
|
|
17
|
-
},
|
|
18
|
-
};
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export { usePress };
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
-
|
|
5
|
-
var React = require('react');
|
|
6
|
-
var useGestureState = require('./use-gesture-state.cjs.js');
|
|
7
|
-
|
|
8
|
-
function useViewport(ref, target, options, { inViewport, poses, viewport = {}, onViewportEnter, onViewportLeave, }, { inViewport: inheritedInViewport }, isPoseActive) {
|
|
9
|
-
const { root, margin: rootMargin, once, threshold } = viewport;
|
|
10
|
-
const [isInViewport, setViewportState] = useGestureState.useGestureState(target, options, inViewport, inheritedInViewport, poses);
|
|
11
|
-
isPoseActive.inViewport = isInViewport;
|
|
12
|
-
let shouldObserve = !!inViewport || !!onViewportEnter || !!onViewportLeave;
|
|
13
|
-
if (once && isInViewport)
|
|
14
|
-
shouldObserve = false;
|
|
15
|
-
React.useEffect(() => {
|
|
16
|
-
if (!shouldObserve || typeof IntersectionObserver === "undefined")
|
|
17
|
-
return;
|
|
18
|
-
const observer = new IntersectionObserver(([entry]) => {
|
|
19
|
-
setViewportState(entry.isIntersecting);
|
|
20
|
-
const callback = entry.isIntersecting
|
|
21
|
-
? onViewportEnter
|
|
22
|
-
: onViewportLeave;
|
|
23
|
-
callback && callback(entry);
|
|
24
|
-
}, { root: root === null || root === void 0 ? void 0 : root.current, rootMargin, threshold });
|
|
25
|
-
observer.observe(ref.current);
|
|
26
|
-
return () => observer.disconnect();
|
|
27
|
-
}, [
|
|
28
|
-
inViewport,
|
|
29
|
-
onViewportEnter,
|
|
30
|
-
onViewportLeave,
|
|
31
|
-
root,
|
|
32
|
-
rootMargin,
|
|
33
|
-
threshold,
|
|
34
|
-
]);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
exports.useViewport = useViewport;
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { useEffect } from 'react';
|
|
2
|
-
import { useGestureState } from './use-gesture-state.es.js';
|
|
3
|
-
|
|
4
|
-
function useViewport(ref, target, options, { inViewport, poses, viewport = {}, onViewportEnter, onViewportLeave, }, { inViewport: inheritedInViewport }, isPoseActive) {
|
|
5
|
-
const { root, margin: rootMargin, once, threshold } = viewport;
|
|
6
|
-
const [isInViewport, setViewportState] = useGestureState(target, options, inViewport, inheritedInViewport, poses);
|
|
7
|
-
isPoseActive.inViewport = isInViewport;
|
|
8
|
-
let shouldObserve = !!inViewport || !!onViewportEnter || !!onViewportLeave;
|
|
9
|
-
if (once && isInViewport)
|
|
10
|
-
shouldObserve = false;
|
|
11
|
-
useEffect(() => {
|
|
12
|
-
if (!shouldObserve || typeof IntersectionObserver === "undefined")
|
|
13
|
-
return;
|
|
14
|
-
const observer = new IntersectionObserver(([entry]) => {
|
|
15
|
-
setViewportState(entry.isIntersecting);
|
|
16
|
-
const callback = entry.isIntersecting
|
|
17
|
-
? onViewportEnter
|
|
18
|
-
: onViewportLeave;
|
|
19
|
-
callback && callback(entry);
|
|
20
|
-
}, { root: root === null || root === void 0 ? void 0 : root.current, rootMargin, threshold });
|
|
21
|
-
observer.observe(ref.current);
|
|
22
|
-
return () => observer.disconnect();
|
|
23
|
-
}, [
|
|
24
|
-
inViewport,
|
|
25
|
-
onViewportEnter,
|
|
26
|
-
onViewportLeave,
|
|
27
|
-
root,
|
|
28
|
-
rootMargin,
|
|
29
|
-
threshold,
|
|
30
|
-
]);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
export { useViewport };
|