react-spring-carousel 3.0.0-beta005 → 3.0.0-beta007
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/index.js +34 -3747
- package/dist/cjs/index.js.map +1 -1
- package/dist/esm/index.js +2 -2
- package/dist/esm/index2.js +2 -2
- package/dist/esm/useSpringCarousel.js +2 -2
- package/dist/esm/useThumbsModule-3a805d70.js +168 -0
- package/dist/esm/useThumbsModule-3a805d70.js.map +1 -0
- package/dist/umd/index.js +35 -3748
- package/dist/umd/index.js.map +1 -1
- package/package.json +7 -5
- package/dist/esm/useThumbsModule-dc12dd34.js +0 -3863
- package/dist/esm/useThumbsModule-dc12dd34.js.map +0 -1
package/dist/esm/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
export { useSpringCarousel, useSpringCarouselContext } from './useSpringCarousel.js';
|
|
2
2
|
import 'react/jsx-runtime';
|
|
3
|
-
import '
|
|
3
|
+
import '@react-spring/web';
|
|
4
4
|
import 'react';
|
|
5
|
+
import './useThumbsModule-3a805d70.js';
|
|
5
6
|
import 'screenfull';
|
|
6
|
-
import 'react-dom';
|
|
7
7
|
import '@use-gesture/react';
|
|
8
8
|
//# sourceMappingURL=index.js.map
|
package/dist/esm/index2.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { u as useEventsModule, b as useFullscreenModule, a as useThumbsModule } from './useThumbsModule-3a805d70.js';
|
|
2
2
|
import 'react';
|
|
3
3
|
import 'screenfull';
|
|
4
4
|
import 'react/jsx-runtime';
|
|
5
|
-
import 'react-
|
|
5
|
+
import '@react-spring/web';
|
|
6
6
|
//# sourceMappingURL=index2.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
|
-
import {
|
|
2
|
+
import { useSpring, config } from '@react-spring/web';
|
|
3
3
|
import { createContext, useRef, useCallback, useEffect, useLayoutEffect, useContext } from 'react';
|
|
4
|
+
import { u as useEventsModule, a as useThumbsModule, b as useFullscreenModule } from './useThumbsModule-3a805d70.js';
|
|
4
5
|
import { useDrag } from '@use-gesture/react';
|
|
5
6
|
import 'screenfull';
|
|
6
|
-
import 'react-dom';
|
|
7
7
|
|
|
8
8
|
function useSpringCarousel({ items, init = true, withThumbs, thumbsSlideAxis = 'x', itemsPerSlide = 1, slideType = 'fixed', gutter = 0, withLoop = false, startEndGutter = 0, carouselSlideAxis = 'x', disableGestures = false, draggingSlideTreshold: _draggingSlideTreshold, slideWhenThresholdIsReached = false, freeScroll, enableFreeScrollDrag, initialStartingPosition, prepareThumbsData, initialActiveItem = 0, }) {
|
|
9
9
|
const prevWindowWidth = useRef(0);
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { useRef, useEffect } from 'react';
|
|
2
|
+
import screenfull from 'screenfull';
|
|
3
|
+
import { jsx } from 'react/jsx-runtime';
|
|
4
|
+
import { useSpring } from '@react-spring/web';
|
|
5
|
+
|
|
6
|
+
const eventLabel = 'RSC::Event';
|
|
7
|
+
function useEventsModule() {
|
|
8
|
+
const targetEvent = useRef(null);
|
|
9
|
+
useEffect(() => {
|
|
10
|
+
targetEvent.current = document.createElement('div');
|
|
11
|
+
}, []);
|
|
12
|
+
function useListenToCustomEvent(eventHandler) {
|
|
13
|
+
useEffect(() => {
|
|
14
|
+
function handleEvent(event) {
|
|
15
|
+
eventHandler(event.detail);
|
|
16
|
+
}
|
|
17
|
+
if (targetEvent.current) {
|
|
18
|
+
// @ts-ignore
|
|
19
|
+
targetEvent.current.addEventListener(eventLabel, handleEvent, false);
|
|
20
|
+
return () => {
|
|
21
|
+
var _a;
|
|
22
|
+
// @ts-ignore
|
|
23
|
+
(_a = targetEvent.current) === null || _a === void 0 ? void 0 : _a.removeEventListener(eventLabel, handleEvent, false);
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
}, []);
|
|
27
|
+
}
|
|
28
|
+
function emitEvent(event) {
|
|
29
|
+
if (targetEvent.current) {
|
|
30
|
+
const newEvent = new CustomEvent(eventLabel, {
|
|
31
|
+
detail: event,
|
|
32
|
+
});
|
|
33
|
+
targetEvent.current.dispatchEvent(newEvent);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
useListenToCustomEvent,
|
|
38
|
+
emitEvent,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function useFullscreenModule({ mainCarouselWrapperRef, emitEvent, handleResize, }) {
|
|
43
|
+
const isFullscreen = useRef(false);
|
|
44
|
+
useEffect(() => {
|
|
45
|
+
function handleFullscreenChange() {
|
|
46
|
+
if (document.fullscreenElement) {
|
|
47
|
+
setIsFullscreen(true);
|
|
48
|
+
emitEvent({
|
|
49
|
+
eventName: 'onFullscreenChange',
|
|
50
|
+
isFullscreen: true,
|
|
51
|
+
});
|
|
52
|
+
handleResize && handleResize();
|
|
53
|
+
}
|
|
54
|
+
if (!document.fullscreenElement) {
|
|
55
|
+
setIsFullscreen(false);
|
|
56
|
+
emitEvent({
|
|
57
|
+
eventName: 'onFullscreenChange',
|
|
58
|
+
isFullscreen: false,
|
|
59
|
+
});
|
|
60
|
+
handleResize && handleResize();
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
if (screenfull.isEnabled) {
|
|
64
|
+
screenfull.on('change', handleFullscreenChange);
|
|
65
|
+
return () => {
|
|
66
|
+
if (screenfull.isEnabled) {
|
|
67
|
+
screenfull.off('change', handleFullscreenChange);
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
}, []);
|
|
72
|
+
function setIsFullscreen(_isFullscreen) {
|
|
73
|
+
isFullscreen.current = _isFullscreen;
|
|
74
|
+
}
|
|
75
|
+
function getIsFullscreen() {
|
|
76
|
+
return isFullscreen.current;
|
|
77
|
+
}
|
|
78
|
+
function enterFullscreen(elementRef) {
|
|
79
|
+
if (screenfull.isEnabled) {
|
|
80
|
+
screenfull.request((elementRef || mainCarouselWrapperRef.current));
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
function exitFullscreen() {
|
|
84
|
+
screenfull.isEnabled && screenfull.exit();
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
enterFullscreen,
|
|
88
|
+
exitFullscreen,
|
|
89
|
+
getIsFullscreen,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
function isInViewport(el) {
|
|
94
|
+
const rect = el.getBoundingClientRect();
|
|
95
|
+
return (rect.top >= 0 &&
|
|
96
|
+
rect.left >= 0 &&
|
|
97
|
+
rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
|
|
98
|
+
rect.right <= (window.innerWidth || document.documentElement.clientWidth));
|
|
99
|
+
}
|
|
100
|
+
function useThumbsModule({ thumbsSlideAxis = 'x', withThumbs = false, prepareThumbsData, items, }) {
|
|
101
|
+
const wrapperRef = useRef(null);
|
|
102
|
+
const [spring, setSpring] = useSpring(() => ({
|
|
103
|
+
val: 0,
|
|
104
|
+
}));
|
|
105
|
+
function getTotalScrollValue() {
|
|
106
|
+
var _a;
|
|
107
|
+
return Math.round(Number((_a = wrapperRef.current) === null || _a === void 0 ? void 0 : _a[thumbsSlideAxis === 'x' ? 'scrollWidth' : 'scrollHeight']) -
|
|
108
|
+
wrapperRef.current.getBoundingClientRect()[thumbsSlideAxis === 'x' ? 'width' : 'height']);
|
|
109
|
+
}
|
|
110
|
+
function handleScroll(activeItem) {
|
|
111
|
+
var _a, _b;
|
|
112
|
+
function getThumbNode() {
|
|
113
|
+
if (wrapperRef.current) {
|
|
114
|
+
return wrapperRef.current.querySelector(`#thumb-item-${items[activeItem].id}`);
|
|
115
|
+
}
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
const thumbNode = getThumbNode();
|
|
119
|
+
if (thumbNode && wrapperRef.current) {
|
|
120
|
+
if (!isInViewport(thumbNode)) {
|
|
121
|
+
const offset = thumbNode.offsetLeft;
|
|
122
|
+
const val = offset > getTotalScrollValue() ? getTotalScrollValue() : offset;
|
|
123
|
+
setSpring.start({
|
|
124
|
+
from: {
|
|
125
|
+
val: (_b = (_a = wrapperRef.current) === null || _a === void 0 ? void 0 : _a[thumbsSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop']) !== null && _b !== void 0 ? _b : 0,
|
|
126
|
+
},
|
|
127
|
+
to: {
|
|
128
|
+
val,
|
|
129
|
+
},
|
|
130
|
+
onChange: ({ value }) => {
|
|
131
|
+
if (wrapperRef.current) {
|
|
132
|
+
wrapperRef.current[thumbsSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'] =
|
|
133
|
+
Math.abs(value.val);
|
|
134
|
+
}
|
|
135
|
+
},
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
function handlePrepareThumbsData() {
|
|
141
|
+
function getPreparedItems(_items) {
|
|
142
|
+
return _items.map(i => ({
|
|
143
|
+
id: i.id,
|
|
144
|
+
renderThumb: i.renderThumb,
|
|
145
|
+
}));
|
|
146
|
+
}
|
|
147
|
+
if (prepareThumbsData) {
|
|
148
|
+
return prepareThumbsData(getPreparedItems(items));
|
|
149
|
+
}
|
|
150
|
+
return getPreparedItems(items);
|
|
151
|
+
}
|
|
152
|
+
const thumbsFragment = withThumbs ? (jsx("div", Object.assign({ className: "use-spring-carousel-thumbs-wrapper", ref: wrapperRef, onWheel: () => spring.val.stop(), style: Object.assign({ display: 'flex', flex: '1', position: 'relative', width: '100%', height: '100%', flexDirection: thumbsSlideAxis === 'x' ? 'row' : 'column' }, (thumbsSlideAxis === 'x'
|
|
153
|
+
? { overflowX: 'auto' }
|
|
154
|
+
: {
|
|
155
|
+
overflowY: 'auto',
|
|
156
|
+
maxHeight: '100%',
|
|
157
|
+
})) }, { children: handlePrepareThumbsData().map(({ id, renderThumb }) => {
|
|
158
|
+
const thumbId = `thumb-item-${id}`;
|
|
159
|
+
return (jsx("div", Object.assign({ id: thumbId, className: "thumb-item" }, { children: renderThumb }), thumbId));
|
|
160
|
+
}) }))) : null;
|
|
161
|
+
return {
|
|
162
|
+
thumbsFragment,
|
|
163
|
+
handleScroll,
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
export { useThumbsModule as a, useFullscreenModule as b, useEventsModule as u };
|
|
168
|
+
//# sourceMappingURL=useThumbsModule-3a805d70.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useThumbsModule-3a805d70.js","sources":["../../src/modules/useEventsModule.ts","../../src/modules/useFullscreenModule.ts","../../src/modules/useThumbsModule.tsx"],"sourcesContent":["import { FullGestureState } from '@use-gesture/react'\nimport { useEffect, useRef } from 'react'\nimport { SlideActionType, SlideMode } from '../types/common'\n\nconst eventLabel = 'RSC::Event'\n\ntype OnSlideStartChange = {\n eventName: 'onSlideStartChange'\n slideActionType: SlideActionType\n slideMode: SlideMode\n nextItem: {\n index: number\n id: string\n startReached: boolean\n endReached: boolean\n }\n}\ntype OnSlideChange = {\n eventName: 'onSlideChange'\n slideActionType: SlideActionType\n slideMode: SlideMode\n currentItem: {\n index: number\n id: string\n startReached: boolean\n endReached: boolean\n }\n}\ntype OnFullscreenChange = {\n eventName: 'onFullscreenChange'\n isFullscreen: boolean\n}\ntype OnDrag = Omit<FullGestureState<'drag'>, 'event'> & {\n eventName: 'onDrag'\n slideActionType: SlideActionType\n}\n\ntype Events = OnSlideStartChange | OnSlideChange | OnDrag | OnFullscreenChange\n\ntype EventHandler = (props: Events) => void\n\nexport type EmitEvent = (event: Events) => void\nexport type UseListenToCustomEvent = {\n useListenToCustomEvent: (eventHandler: EventHandler) => void\n emitEvent: (event: Events) => void\n}\n\nexport function useEventsModule() {\n const targetEvent = useRef<HTMLDivElement | null>(null)\n\n useEffect(() => {\n targetEvent.current = document.createElement('div')\n }, [])\n\n function useListenToCustomEvent(eventHandler: EventHandler) {\n useEffect(() => {\n function handleEvent(event: CustomEvent<Events>) {\n eventHandler(event.detail)\n }\n\n if (targetEvent.current) {\n // @ts-ignore\n targetEvent.current.addEventListener(eventLabel, handleEvent, false)\n return () => {\n // @ts-ignore\n targetEvent.current?.removeEventListener(eventLabel, handleEvent, false)\n }\n }\n }, [])\n }\n function emitEvent(event: Events) {\n if (targetEvent.current) {\n const newEvent = new CustomEvent(eventLabel, {\n detail: event,\n })\n targetEvent.current.dispatchEvent(newEvent)\n }\n }\n\n return {\n useListenToCustomEvent,\n emitEvent,\n }\n}\n","import { useRef, MutableRefObject, useEffect } from 'react'\nimport screenfull from 'screenfull'\nimport { EmitEvent } from './useEventsModule'\n\ntype FullscreenModule = {\n mainCarouselWrapperRef: MutableRefObject<HTMLDivElement | null>\n emitEvent: EmitEvent\n handleResize?(): void\n}\n\nexport function useFullscreenModule({\n mainCarouselWrapperRef,\n emitEvent,\n handleResize,\n}: FullscreenModule) {\n const isFullscreen = useRef(false)\n\n useEffect(() => {\n function handleFullscreenChange() {\n if (document.fullscreenElement) {\n setIsFullscreen(true)\n emitEvent({\n eventName: 'onFullscreenChange',\n isFullscreen: true,\n })\n\n handleResize && handleResize()\n }\n\n if (!document.fullscreenElement) {\n setIsFullscreen(false)\n emitEvent({\n eventName: 'onFullscreenChange',\n isFullscreen: false,\n })\n handleResize && handleResize()\n }\n }\n\n if (screenfull.isEnabled) {\n screenfull.on('change', handleFullscreenChange)\n return () => {\n if (screenfull.isEnabled) {\n screenfull.off('change', handleFullscreenChange)\n }\n }\n }\n }, [])\n\n function setIsFullscreen(_isFullscreen: boolean) {\n isFullscreen.current = _isFullscreen\n }\n\n function getIsFullscreen() {\n return isFullscreen.current\n }\n\n function enterFullscreen(elementRef?: HTMLElement) {\n if (screenfull.isEnabled) {\n screenfull.request((elementRef || mainCarouselWrapperRef.current) as Element)\n }\n }\n\n function exitFullscreen() {\n screenfull.isEnabled && screenfull.exit()\n }\n\n return {\n enterFullscreen,\n exitFullscreen,\n getIsFullscreen,\n }\n}\n","import { useSpring } from '@react-spring/web'\nimport { useRef } from 'react'\nimport { SpringCarouselWithThumbs, PrepareThumbsData } from 'src/types/internals'\n\ntype Props = {\n withThumbs?: boolean\n thumbsSlideAxis: SpringCarouselWithThumbs['thumbsSlideAxis']\n prepareThumbsData?: PrepareThumbsData\n items: SpringCarouselWithThumbs['items']\n}\n\nfunction isInViewport(el: HTMLElement) {\n const rect = el.getBoundingClientRect()\n return (\n rect.top >= 0 &&\n rect.left >= 0 &&\n rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n rect.right <= (window.innerWidth || document.documentElement.clientWidth)\n )\n}\n\nexport function useThumbsModule({\n thumbsSlideAxis = 'x',\n withThumbs = false,\n prepareThumbsData,\n items,\n}: Props) {\n const wrapperRef = useRef<HTMLDivElement | null>(null)\n const [spring, setSpring] = useSpring(() => ({\n val: 0,\n }))\n\n function getTotalScrollValue() {\n return Math.round(\n Number(\n wrapperRef.current?.[thumbsSlideAxis === 'x' ? 'scrollWidth' : 'scrollHeight'],\n ) -\n wrapperRef.current!.getBoundingClientRect()[\n thumbsSlideAxis === 'x' ? 'width' : 'height'\n ],\n )\n }\n\n function handleScroll(activeItem: number) {\n function getThumbNode() {\n if (wrapperRef.current) {\n return wrapperRef.current.querySelector(\n `#thumb-item-${items[activeItem].id}`,\n ) as HTMLElement\n }\n return null\n }\n\n const thumbNode = getThumbNode()\n if (thumbNode && wrapperRef.current) {\n if (!isInViewport(thumbNode)) {\n const offset = thumbNode.offsetLeft\n const val = offset > getTotalScrollValue() ? getTotalScrollValue() : offset\n\n setSpring.start({\n from: {\n val:\n wrapperRef.current?.[\n thumbsSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'\n ] ?? 0,\n },\n to: {\n val,\n },\n onChange: ({ value }) => {\n if (wrapperRef.current) {\n wrapperRef.current[thumbsSlideAxis === 'x' ? 'scrollLeft' : 'scrollTop'] =\n Math.abs(value.val)\n }\n },\n })\n }\n }\n }\n\n function handlePrepareThumbsData() {\n function getPreparedItems(\n _items: ReturnType<PrepareThumbsData>,\n ): ReturnType<PrepareThumbsData> {\n return _items.map(i => ({\n id: i.id,\n renderThumb: i.renderThumb,\n }))\n }\n\n if (prepareThumbsData) {\n return prepareThumbsData(getPreparedItems(items))\n }\n return getPreparedItems(items)\n }\n\n const thumbsFragment = withThumbs ? (\n <div\n className=\"use-spring-carousel-thumbs-wrapper\"\n ref={wrapperRef}\n onWheel={() => spring.val.stop()}\n style={{\n display: 'flex',\n flex: '1',\n position: 'relative',\n width: '100%',\n height: '100%',\n flexDirection: thumbsSlideAxis === 'x' ? 'row' : 'column',\n ...(thumbsSlideAxis === 'x'\n ? { overflowX: 'auto' }\n : {\n overflowY: 'auto',\n maxHeight: '100%',\n }),\n }}\n >\n {handlePrepareThumbsData().map(({ id, renderThumb }) => {\n const thumbId = `thumb-item-${id}`\n return (\n <div key={thumbId} id={thumbId} className=\"thumb-item\">\n {renderThumb}\n </div>\n )\n })}\n </div>\n ) : null\n\n return {\n thumbsFragment,\n handleScroll,\n }\n}\n"],"names":["_jsx"],"mappings":"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"}
|