@folklore/hooks 0.0.76 → 0.0.80
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/cjs.js +103 -35
- package/dist/es.js +103 -36
- package/package.json +3 -3
package/dist/cjs.js
CHANGED
|
@@ -1077,6 +1077,108 @@ function useNativeVideoPlayer(url, {
|
|
|
1077
1077
|
};
|
|
1078
1078
|
}
|
|
1079
1079
|
|
|
1080
|
+
const getWindowSize = () => ({
|
|
1081
|
+
width: typeof window !== 'undefined' ? window.innerWidth || 0 : 0,
|
|
1082
|
+
height: typeof window !== 'undefined' ? window.innerHeight || 0 : 0
|
|
1083
|
+
});
|
|
1084
|
+
let currentSize = getWindowSize();
|
|
1085
|
+
function useWindowSize({
|
|
1086
|
+
onChange = null
|
|
1087
|
+
} = {}) {
|
|
1088
|
+
const [size, setSize] = react.useState(currentSize);
|
|
1089
|
+
const sizeRef = react.useRef(size);
|
|
1090
|
+
const updateSize = react.useCallback(() => {
|
|
1091
|
+
const newSize = getWindowSize();
|
|
1092
|
+
if (currentSize.width !== newSize.width || currentSize.height !== newSize.height) {
|
|
1093
|
+
currentSize = newSize;
|
|
1094
|
+
}
|
|
1095
|
+
if (sizeRef.current.width !== newSize.width || sizeRef.current.height !== newSize.height) {
|
|
1096
|
+
sizeRef.current = newSize;
|
|
1097
|
+
setSize(newSize);
|
|
1098
|
+
return newSize;
|
|
1099
|
+
}
|
|
1100
|
+
return null;
|
|
1101
|
+
}, [setSize]);
|
|
1102
|
+
const onResize = react.useCallback(() => {
|
|
1103
|
+
const newSize = updateSize();
|
|
1104
|
+
if (newSize !== null && onChange !== null) {
|
|
1105
|
+
onChange(newSize);
|
|
1106
|
+
}
|
|
1107
|
+
}, [onChange, updateSize]);
|
|
1108
|
+
useWindowEvent('resize', onResize);
|
|
1109
|
+
react.useEffect(() => {
|
|
1110
|
+
onResize();
|
|
1111
|
+
}, []);
|
|
1112
|
+
return size;
|
|
1113
|
+
}
|
|
1114
|
+
|
|
1115
|
+
function useScrollTrigger({
|
|
1116
|
+
disabled = false,
|
|
1117
|
+
triggers = [0.1, 0.25, 0.5, 0.75, 0.9, 1.0],
|
|
1118
|
+
useElementScroll = false,
|
|
1119
|
+
onTrigger = null
|
|
1120
|
+
} = {}) {
|
|
1121
|
+
const triggersCompletedRef = react.useRef([]);
|
|
1122
|
+
const {
|
|
1123
|
+
height
|
|
1124
|
+
} = useWindowSize();
|
|
1125
|
+
const {
|
|
1126
|
+
ref,
|
|
1127
|
+
entry: {
|
|
1128
|
+
contentRect = null
|
|
1129
|
+
}
|
|
1130
|
+
} = useResizeObserver({
|
|
1131
|
+
disabled: !useElementScroll
|
|
1132
|
+
});
|
|
1133
|
+
const {
|
|
1134
|
+
top: elementTop = 0,
|
|
1135
|
+
height: elementHeight = null
|
|
1136
|
+
} = contentRect || {};
|
|
1137
|
+
const elementScrollHeight = elementHeight !== null ? elementHeight + elementTop : 0;
|
|
1138
|
+
react.useEffect(() => {
|
|
1139
|
+
if (eventsManager === null || disabled) {
|
|
1140
|
+
return () => {};
|
|
1141
|
+
}
|
|
1142
|
+
function onScroll() {
|
|
1143
|
+
const scrollY = useElementScroll ? ref.current.scrollTop : window.scrollY;
|
|
1144
|
+
let scrollHeight = 0;
|
|
1145
|
+
if (useElementScroll) {
|
|
1146
|
+
scrollHeight = ref.current.scrollHeight - ref.current.clientHeight;
|
|
1147
|
+
} else if (ref.current !== null && elementScrollHeight > 0) {
|
|
1148
|
+
scrollHeight = elementScrollHeight - height;
|
|
1149
|
+
} else {
|
|
1150
|
+
scrollHeight = document.documentElement.scrollHeight - height;
|
|
1151
|
+
}
|
|
1152
|
+
const progress = Math.min(Math.max(scrollY / scrollHeight, 0), 1);
|
|
1153
|
+
const newTriggersCompleted = triggers.filter(step => progress >= step && triggersCompletedRef.current.indexOf(step) === -1);
|
|
1154
|
+
newTriggersCompleted.forEach(step => {
|
|
1155
|
+
if (onTrigger != null) {
|
|
1156
|
+
onTrigger(step);
|
|
1157
|
+
}
|
|
1158
|
+
});
|
|
1159
|
+
if (newTriggersCompleted.length > 0) {
|
|
1160
|
+
triggersCompletedRef.current = [...triggersCompletedRef.current, ...newTriggersCompleted];
|
|
1161
|
+
}
|
|
1162
|
+
}
|
|
1163
|
+
if (useElementScroll) {
|
|
1164
|
+
ref.current.addEventListener('scroll', onScroll);
|
|
1165
|
+
} else {
|
|
1166
|
+
eventsManager.subscribe('scroll', onScroll);
|
|
1167
|
+
}
|
|
1168
|
+
onScroll();
|
|
1169
|
+
return () => {
|
|
1170
|
+
if (useElementScroll) {
|
|
1171
|
+
ref.current.removeEventListener('scroll', onScroll);
|
|
1172
|
+
} else {
|
|
1173
|
+
eventsManager.unsubscribe('scroll', onScroll);
|
|
1174
|
+
}
|
|
1175
|
+
};
|
|
1176
|
+
}, [triggers, disabled, onTrigger, height, elementScrollHeight, useElementScroll]);
|
|
1177
|
+
return {
|
|
1178
|
+
ref
|
|
1179
|
+
};
|
|
1180
|
+
}
|
|
1181
|
+
|
|
1080
1182
|
const NO_PLAYER_ERROR$1 = new Error('No player');
|
|
1081
1183
|
function useVimeoPlayer(id, {
|
|
1082
1184
|
width = 0,
|
|
@@ -1695,41 +1797,6 @@ function useVideoPlayer(params) {
|
|
|
1695
1797
|
return player;
|
|
1696
1798
|
}
|
|
1697
1799
|
|
|
1698
|
-
const getWindowSize = () => ({
|
|
1699
|
-
width: typeof window !== 'undefined' ? window.innerWidth || 0 : 0,
|
|
1700
|
-
height: typeof window !== 'undefined' ? window.innerHeight || 0 : 0
|
|
1701
|
-
});
|
|
1702
|
-
let currentSize = getWindowSize();
|
|
1703
|
-
function useWindowSize({
|
|
1704
|
-
onChange = null
|
|
1705
|
-
} = {}) {
|
|
1706
|
-
const [size, setSize] = react.useState(currentSize);
|
|
1707
|
-
const sizeRef = react.useRef(size);
|
|
1708
|
-
const updateSize = react.useCallback(() => {
|
|
1709
|
-
const newSize = getWindowSize();
|
|
1710
|
-
if (currentSize.width !== newSize.width || currentSize.height !== newSize.height) {
|
|
1711
|
-
currentSize = newSize;
|
|
1712
|
-
}
|
|
1713
|
-
if (sizeRef.current.width !== newSize.width || sizeRef.current.height !== newSize.height) {
|
|
1714
|
-
sizeRef.current = newSize;
|
|
1715
|
-
setSize(newSize);
|
|
1716
|
-
return newSize;
|
|
1717
|
-
}
|
|
1718
|
-
return null;
|
|
1719
|
-
}, [setSize]);
|
|
1720
|
-
const onResize = react.useCallback(() => {
|
|
1721
|
-
const newSize = updateSize();
|
|
1722
|
-
if (newSize !== null && onChange !== null) {
|
|
1723
|
-
onChange(newSize);
|
|
1724
|
-
}
|
|
1725
|
-
}, [onChange, updateSize]);
|
|
1726
|
-
useWindowEvent('resize', onResize);
|
|
1727
|
-
react.useEffect(() => {
|
|
1728
|
-
onResize();
|
|
1729
|
-
}, []);
|
|
1730
|
-
return size;
|
|
1731
|
-
}
|
|
1732
|
-
|
|
1733
1800
|
function useVisualViewport() {
|
|
1734
1801
|
const {
|
|
1735
1802
|
width: windowWidth,
|
|
@@ -1833,6 +1900,7 @@ exports.useNativeVideoPlayer = useNativeVideoPlayer;
|
|
|
1833
1900
|
exports.useObserver = useObserver;
|
|
1834
1901
|
exports.usePlayerCurrentTime = usePlayerCurrentTime;
|
|
1835
1902
|
exports.useResizeObserver = useResizeObserver;
|
|
1903
|
+
exports.useScrollTrigger = useScrollTrigger;
|
|
1836
1904
|
exports.useVideoPlayer = useVideoPlayer;
|
|
1837
1905
|
exports.useVimeoPlayer = useVimeoPlayer;
|
|
1838
1906
|
exports.useVisualViewport = useVisualViewport;
|
package/dist/es.js
CHANGED
|
@@ -1075,6 +1075,108 @@ function useNativeVideoPlayer(url, {
|
|
|
1075
1075
|
};
|
|
1076
1076
|
}
|
|
1077
1077
|
|
|
1078
|
+
const getWindowSize = () => ({
|
|
1079
|
+
width: typeof window !== 'undefined' ? window.innerWidth || 0 : 0,
|
|
1080
|
+
height: typeof window !== 'undefined' ? window.innerHeight || 0 : 0
|
|
1081
|
+
});
|
|
1082
|
+
let currentSize = getWindowSize();
|
|
1083
|
+
function useWindowSize({
|
|
1084
|
+
onChange = null
|
|
1085
|
+
} = {}) {
|
|
1086
|
+
const [size, setSize] = useState(currentSize);
|
|
1087
|
+
const sizeRef = useRef(size);
|
|
1088
|
+
const updateSize = useCallback(() => {
|
|
1089
|
+
const newSize = getWindowSize();
|
|
1090
|
+
if (currentSize.width !== newSize.width || currentSize.height !== newSize.height) {
|
|
1091
|
+
currentSize = newSize;
|
|
1092
|
+
}
|
|
1093
|
+
if (sizeRef.current.width !== newSize.width || sizeRef.current.height !== newSize.height) {
|
|
1094
|
+
sizeRef.current = newSize;
|
|
1095
|
+
setSize(newSize);
|
|
1096
|
+
return newSize;
|
|
1097
|
+
}
|
|
1098
|
+
return null;
|
|
1099
|
+
}, [setSize]);
|
|
1100
|
+
const onResize = useCallback(() => {
|
|
1101
|
+
const newSize = updateSize();
|
|
1102
|
+
if (newSize !== null && onChange !== null) {
|
|
1103
|
+
onChange(newSize);
|
|
1104
|
+
}
|
|
1105
|
+
}, [onChange, updateSize]);
|
|
1106
|
+
useWindowEvent('resize', onResize);
|
|
1107
|
+
useEffect(() => {
|
|
1108
|
+
onResize();
|
|
1109
|
+
}, []);
|
|
1110
|
+
return size;
|
|
1111
|
+
}
|
|
1112
|
+
|
|
1113
|
+
function useScrollTrigger({
|
|
1114
|
+
disabled = false,
|
|
1115
|
+
triggers = [0.1, 0.25, 0.5, 0.75, 0.9, 1.0],
|
|
1116
|
+
useElementScroll = false,
|
|
1117
|
+
onTrigger = null
|
|
1118
|
+
} = {}) {
|
|
1119
|
+
const triggersCompletedRef = useRef([]);
|
|
1120
|
+
const {
|
|
1121
|
+
height
|
|
1122
|
+
} = useWindowSize();
|
|
1123
|
+
const {
|
|
1124
|
+
ref,
|
|
1125
|
+
entry: {
|
|
1126
|
+
contentRect = null
|
|
1127
|
+
}
|
|
1128
|
+
} = useResizeObserver({
|
|
1129
|
+
disabled: !useElementScroll
|
|
1130
|
+
});
|
|
1131
|
+
const {
|
|
1132
|
+
top: elementTop = 0,
|
|
1133
|
+
height: elementHeight = null
|
|
1134
|
+
} = contentRect || {};
|
|
1135
|
+
const elementScrollHeight = elementHeight !== null ? elementHeight + elementTop : 0;
|
|
1136
|
+
useEffect(() => {
|
|
1137
|
+
if (eventsManager === null || disabled) {
|
|
1138
|
+
return () => {};
|
|
1139
|
+
}
|
|
1140
|
+
function onScroll() {
|
|
1141
|
+
const scrollY = useElementScroll ? ref.current.scrollTop : window.scrollY;
|
|
1142
|
+
let scrollHeight = 0;
|
|
1143
|
+
if (useElementScroll) {
|
|
1144
|
+
scrollHeight = ref.current.scrollHeight - ref.current.clientHeight;
|
|
1145
|
+
} else if (ref.current !== null && elementScrollHeight > 0) {
|
|
1146
|
+
scrollHeight = elementScrollHeight - height;
|
|
1147
|
+
} else {
|
|
1148
|
+
scrollHeight = document.documentElement.scrollHeight - height;
|
|
1149
|
+
}
|
|
1150
|
+
const progress = Math.min(Math.max(scrollY / scrollHeight, 0), 1);
|
|
1151
|
+
const newTriggersCompleted = triggers.filter(step => progress >= step && triggersCompletedRef.current.indexOf(step) === -1);
|
|
1152
|
+
newTriggersCompleted.forEach(step => {
|
|
1153
|
+
if (onTrigger != null) {
|
|
1154
|
+
onTrigger(step);
|
|
1155
|
+
}
|
|
1156
|
+
});
|
|
1157
|
+
if (newTriggersCompleted.length > 0) {
|
|
1158
|
+
triggersCompletedRef.current = [...triggersCompletedRef.current, ...newTriggersCompleted];
|
|
1159
|
+
}
|
|
1160
|
+
}
|
|
1161
|
+
if (useElementScroll) {
|
|
1162
|
+
ref.current.addEventListener('scroll', onScroll);
|
|
1163
|
+
} else {
|
|
1164
|
+
eventsManager.subscribe('scroll', onScroll);
|
|
1165
|
+
}
|
|
1166
|
+
onScroll();
|
|
1167
|
+
return () => {
|
|
1168
|
+
if (useElementScroll) {
|
|
1169
|
+
ref.current.removeEventListener('scroll', onScroll);
|
|
1170
|
+
} else {
|
|
1171
|
+
eventsManager.unsubscribe('scroll', onScroll);
|
|
1172
|
+
}
|
|
1173
|
+
};
|
|
1174
|
+
}, [triggers, disabled, onTrigger, height, elementScrollHeight, useElementScroll]);
|
|
1175
|
+
return {
|
|
1176
|
+
ref
|
|
1177
|
+
};
|
|
1178
|
+
}
|
|
1179
|
+
|
|
1078
1180
|
const NO_PLAYER_ERROR$1 = new Error('No player');
|
|
1079
1181
|
function useVimeoPlayer(id, {
|
|
1080
1182
|
width = 0,
|
|
@@ -1693,41 +1795,6 @@ function useVideoPlayer(params) {
|
|
|
1693
1795
|
return player;
|
|
1694
1796
|
}
|
|
1695
1797
|
|
|
1696
|
-
const getWindowSize = () => ({
|
|
1697
|
-
width: typeof window !== 'undefined' ? window.innerWidth || 0 : 0,
|
|
1698
|
-
height: typeof window !== 'undefined' ? window.innerHeight || 0 : 0
|
|
1699
|
-
});
|
|
1700
|
-
let currentSize = getWindowSize();
|
|
1701
|
-
function useWindowSize({
|
|
1702
|
-
onChange = null
|
|
1703
|
-
} = {}) {
|
|
1704
|
-
const [size, setSize] = useState(currentSize);
|
|
1705
|
-
const sizeRef = useRef(size);
|
|
1706
|
-
const updateSize = useCallback(() => {
|
|
1707
|
-
const newSize = getWindowSize();
|
|
1708
|
-
if (currentSize.width !== newSize.width || currentSize.height !== newSize.height) {
|
|
1709
|
-
currentSize = newSize;
|
|
1710
|
-
}
|
|
1711
|
-
if (sizeRef.current.width !== newSize.width || sizeRef.current.height !== newSize.height) {
|
|
1712
|
-
sizeRef.current = newSize;
|
|
1713
|
-
setSize(newSize);
|
|
1714
|
-
return newSize;
|
|
1715
|
-
}
|
|
1716
|
-
return null;
|
|
1717
|
-
}, [setSize]);
|
|
1718
|
-
const onResize = useCallback(() => {
|
|
1719
|
-
const newSize = updateSize();
|
|
1720
|
-
if (newSize !== null && onChange !== null) {
|
|
1721
|
-
onChange(newSize);
|
|
1722
|
-
}
|
|
1723
|
-
}, [onChange, updateSize]);
|
|
1724
|
-
useWindowEvent('resize', onResize);
|
|
1725
|
-
useEffect(() => {
|
|
1726
|
-
onResize();
|
|
1727
|
-
}, []);
|
|
1728
|
-
return size;
|
|
1729
|
-
}
|
|
1730
|
-
|
|
1731
1798
|
function useVisualViewport() {
|
|
1732
1799
|
const {
|
|
1733
1800
|
width: windowWidth,
|
|
@@ -1818,4 +1885,4 @@ function useWindowScroll(opts = {}) {
|
|
|
1818
1885
|
return scroll;
|
|
1819
1886
|
}
|
|
1820
1887
|
|
|
1821
|
-
export { eventsManager$1 as documentEventsManager, getObserver, useCounter, useDailymotionPlayer, useDocumentEvent, useIntersectionObserver, useIsVisible, useItemsPaginated, useKeyboard, useNativeVideoPlayer, useObserver, usePlayerCurrentTime, useResizeObserver, useVideoPlayer, useVimeoPlayer, useVisualViewport, useVisualViewport as useVisualViewportSize, useWindowEvent, useWindowScroll, useWindowSize, useYouTubePlayer, eventsManager as windowEventsManager };
|
|
1888
|
+
export { eventsManager$1 as documentEventsManager, getObserver, useCounter, useDailymotionPlayer, useDocumentEvent, useIntersectionObserver, useIsVisible, useItemsPaginated, useKeyboard, useNativeVideoPlayer, useObserver, usePlayerCurrentTime, useResizeObserver, useScrollTrigger, useVideoPlayer, useVimeoPlayer, useVisualViewport, useVisualViewport as useVisualViewportSize, useWindowEvent, useWindowScroll, useWindowSize, useYouTubePlayer, eventsManager as windowEventsManager };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@folklore/hooks",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.80",
|
|
4
4
|
"description": "React hooks",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"javascript",
|
|
@@ -49,9 +49,9 @@
|
|
|
49
49
|
"publishConfig": {
|
|
50
50
|
"access": "public"
|
|
51
51
|
},
|
|
52
|
-
"gitHead": "
|
|
52
|
+
"gitHead": "6d9d9e7770eaabf06aff6864a4d33d0b6ad99eb2",
|
|
53
53
|
"dependencies": {
|
|
54
|
-
"@folklore/events": "^0.0.
|
|
54
|
+
"@folklore/events": "^0.0.10",
|
|
55
55
|
"@folklore/services": "^0.1.44",
|
|
56
56
|
"@folklore/utils": "^0.1.4",
|
|
57
57
|
"cancelable-promise": "^4.3.1",
|