yet-another-react-lightbox 3.22.0 → 3.23.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/dist/index.d.ts +2 -1
- package/dist/index.js +9 -6
- package/dist/plugins/thumbnails/index.js +1 -1
- package/dist/plugins/video/index.js +21 -2
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -47,6 +47,7 @@ declare function calculatePreload(carousel: CarouselSettings, slides: Slide[], m
|
|
|
47
47
|
declare function makeInertWhen(condition: boolean): {
|
|
48
48
|
inert: boolean;
|
|
49
49
|
};
|
|
50
|
+
declare function reflow(node: HTMLElement): void;
|
|
50
51
|
|
|
51
52
|
declare function createModule(name: string, component: Component): Module;
|
|
52
53
|
declare function createNode(module: Module, children?: Node$1[]): Node$1;
|
|
@@ -283,5 +284,5 @@ declare const RootModule: Module;
|
|
|
283
284
|
declare function Toolbar({ toolbar: { buttons }, render: { buttonClose, iconClose }, styles }: ComponentProps): React.JSX.Element;
|
|
284
285
|
declare const ToolbarModule: Module;
|
|
285
286
|
|
|
286
|
-
export { Augmentation, Callback, Carousel, CarouselModule, CarouselSettings, CloseIcon, Component, ComponentProps, ContainerRect, Controller, ControllerContext, ControllerModule, ControllerRef, ControllerSettings, DocumentContext, DocumentContextProvider, ErrorIcon, EventTypes, EventsContext, EventsProvider, IconButton, ImageSlide, Label, Labels, LengthOrPercentage, Lightbox, LightboxDefaultProps, LightboxDispatchContext, LightboxExternalProps, LightboxProps, LightboxPropsContext, LightboxPropsProvider, LightboxRoot, LightboxState, LightboxStateContext, LightboxStateProvider, LightboxStateSwipeAction, LightboxStateUpdateAction, LoadingIcon, Module, Navigation, NavigationButton, NavigationModule, NextIcon, NoScroll, NoScrollModule, Node$1 as Node, Plugin, Portal, PortalModule, PreviousIcon, Render, RenderFunction, Root, RootModule, Slide, SlideImage, SwipeState, TimeoutsContext, TimeoutsProvider, Toolbar, ToolbarModule, ToolbarSettings, addToolbarButton, calculatePreload, cleanup, clsx, composePrefix, computeSlideRect, createIcon, createIconDisabled, createModule, createNode, cssClass, cssVar, Lightbox as default, devicePixelRatio, getSlide, getSlideIfPresent, getSlideIndex, getSlideKey, hasSlides, hasWindow, isImageFitCover, isImageSlide, label, makeComposePrefix, makeInertWhen, makeUseContext, parseInt, parseLengthPercentage, round, setRef, stopNavigationEventsPropagation, useAnimation, useContainerRect, useController, useDelay, useDocumentContext, useEventCallback, useEvents, useForkRef, useKeyboardNavigation, useLayoutEffect, useLightboxDispatch, useLightboxProps, useLightboxState, useLoseFocus, useMotionPreference, useNavigationState, usePointerSwipe, usePreventWheelDefaults, useRTL, useSensors, useThrottle, useTimeouts, useWheelSwipe, withPlugins };
|
|
287
|
+
export { Augmentation, Callback, Carousel, CarouselModule, CarouselSettings, CloseIcon, Component, ComponentProps, ContainerRect, Controller, ControllerContext, ControllerModule, ControllerRef, ControllerSettings, DocumentContext, DocumentContextProvider, ErrorIcon, EventTypes, EventsContext, EventsProvider, IconButton, ImageSlide, Label, Labels, LengthOrPercentage, Lightbox, LightboxDefaultProps, LightboxDispatchContext, LightboxExternalProps, LightboxProps, LightboxPropsContext, LightboxPropsProvider, LightboxRoot, LightboxState, LightboxStateContext, LightboxStateProvider, LightboxStateSwipeAction, LightboxStateUpdateAction, LoadingIcon, Module, Navigation, NavigationButton, NavigationModule, NextIcon, NoScroll, NoScrollModule, Node$1 as Node, Plugin, Portal, PortalModule, PreviousIcon, Render, RenderFunction, Root, RootModule, Slide, SlideImage, SwipeState, TimeoutsContext, TimeoutsProvider, Toolbar, ToolbarModule, ToolbarSettings, addToolbarButton, calculatePreload, cleanup, clsx, composePrefix, computeSlideRect, createIcon, createIconDisabled, createModule, createNode, cssClass, cssVar, Lightbox as default, devicePixelRatio, getSlide, getSlideIfPresent, getSlideIndex, getSlideKey, hasSlides, hasWindow, isImageFitCover, isImageSlide, label, makeComposePrefix, makeInertWhen, makeUseContext, parseInt, parseLengthPercentage, reflow, round, setRef, stopNavigationEventsPropagation, useAnimation, useContainerRect, useController, useDelay, useDocumentContext, useEventCallback, useEvents, useForkRef, useKeyboardNavigation, useLayoutEffect, useLightboxDispatch, useLightboxProps, useLightboxState, useLoseFocus, useMotionPreference, useNavigationState, usePointerSwipe, usePreventWheelDefaults, useRTL, useSensors, useThrottle, useTimeouts, useWheelSwipe, withPlugins };
|
|
287
288
|
export type { ComputeAnimation, ControllerContextType, DocumentContextProviderProps, DocumentContextType, Event, EventCallback, EventsContextType, IconButtonProps, ImageSlideProps, KeyboardEventType, LightboxDispatchContextType, LightboxPropsContextType, LightboxStateAction, LightboxStateContextType, LightboxStateProviderProps, NavigationButtonProps, PointerEventType, Publish, ReactEventType, RegisterSensors, SensorCallback, Subscribe, SubscribeSensors, SupportedEventType, TimeoutsContextType, Topic, Unsubscribe, UseSensors, WheelEventType };
|
package/dist/index.js
CHANGED
|
@@ -119,6 +119,9 @@ function makeInertWhen(condition) {
|
|
|
119
119
|
const legacyValue = condition ? "" : undefined;
|
|
120
120
|
return { inert: isReact19 ? condition : legacyValue };
|
|
121
121
|
}
|
|
122
|
+
function reflow(node) {
|
|
123
|
+
node.scrollTop;
|
|
124
|
+
}
|
|
122
125
|
|
|
123
126
|
const LightboxDefaultProps = {
|
|
124
127
|
open: false,
|
|
@@ -317,7 +320,7 @@ function reducer(state, action) {
|
|
|
317
320
|
const globalIndex = state.globalIndex + increment;
|
|
318
321
|
const currentIndex = getSlideIndex(globalIndex, slides.length);
|
|
319
322
|
const currentSlide = getSlideIfPresent(slides, currentIndex);
|
|
320
|
-
const animation = increment || action.duration
|
|
323
|
+
const animation = increment || action.duration !== undefined
|
|
321
324
|
? {
|
|
322
325
|
increment,
|
|
323
326
|
duration: action.duration,
|
|
@@ -1208,7 +1211,7 @@ function Controller({ children, ...props }) {
|
|
|
1208
1211
|
: null),
|
|
1209
1212
|
...(controller.touchAction !== "none" ? { [cssVar("controller_touch_action")]: controller.touchAction } : null),
|
|
1210
1213
|
...styles.container,
|
|
1211
|
-
}, ...(controller.aria ? { role: "
|
|
1214
|
+
}, ...(controller.aria ? { role: "region", "aria-live": "polite", "aria-roledescription": "carousel" } : null), tabIndex: -1, ...registerSensors }, containerRect && (React.createElement(ControllerContext.Provider, { value: context },
|
|
1212
1215
|
children, (_a = render.controls) === null || _a === void 0 ? void 0 :
|
|
1213
1216
|
_a.call(render)))));
|
|
1214
1217
|
}
|
|
@@ -1256,7 +1259,7 @@ function CarouselSlide({ slide, offset }) {
|
|
|
1256
1259
|
close();
|
|
1257
1260
|
}
|
|
1258
1261
|
};
|
|
1259
|
-
return (React.createElement("div", { ref: containerRef, className: clsx(cssClass(cssSlidePrefix()), !offscreen && cssClass(cssSlidePrefix("current")), cssClass(CLASS_FLEX_CENTER)), ...makeInertWhen(offscreen), onClick: handleBackdropClick, style: style }, renderSlide()));
|
|
1262
|
+
return (React.createElement("div", { ref: containerRef, className: clsx(cssClass(cssSlidePrefix()), !offscreen && cssClass(cssSlidePrefix("current")), cssClass(CLASS_FLEX_CENTER)), ...makeInertWhen(offscreen), onClick: handleBackdropClick, style: style, role: "region", "aria-roledescription": "slide" }, renderSlide()));
|
|
1260
1263
|
}
|
|
1261
1264
|
function Placeholder() {
|
|
1262
1265
|
const style = useLightboxProps().styles.slide;
|
|
@@ -1443,7 +1446,7 @@ function Portal({ children, animation, styles, className, on, portal, close }) {
|
|
|
1443
1446
|
React.useEffect(() => subscribe(ACTION_CLOSE, handleClose), [subscribe, handleClose]);
|
|
1444
1447
|
const handleEnter = useEventCallback((node) => {
|
|
1445
1448
|
var _a, _b, _c;
|
|
1446
|
-
node
|
|
1449
|
+
reflow(node);
|
|
1447
1450
|
setVisible(true);
|
|
1448
1451
|
(_a = on.entering) === null || _a === void 0 ? void 0 : _a.call(on);
|
|
1449
1452
|
const elements = (_c = (_b = node.parentNode) === null || _b === void 0 ? void 0 : _b.children) !== null && _c !== void 0 ? _c : [];
|
|
@@ -1472,7 +1475,7 @@ function Portal({ children, animation, styles, className, on, portal, close }) {
|
|
|
1472
1475
|
}
|
|
1473
1476
|
}, [handleEnter, handleCleanup]);
|
|
1474
1477
|
return mounted
|
|
1475
|
-
? createPortal(React.createElement(LightboxRoot, { ref: handleRef, className: clsx(className, cssClass(cssPrefix$1()), cssClass(CLASS_NO_SCROLL_PADDING), visible && cssClass(cssPrefix$1("open"))), role: "
|
|
1478
|
+
? createPortal(React.createElement(LightboxRoot, { ref: handleRef, className: clsx(className, cssClass(cssPrefix$1()), cssClass(CLASS_NO_SCROLL_PADDING), visible && cssClass(cssPrefix$1("open"))), "aria-modal": true, role: "dialog", "aria-live": "polite", "aria-roledescription": "lightbox", style: {
|
|
1476
1479
|
...(animation.fade !== LightboxDefaultProps.animation.fade
|
|
1477
1480
|
? { [cssVar("fade_animation_duration")]: `${animationDuration}ms` }
|
|
1478
1481
|
: null),
|
|
@@ -1557,4 +1560,4 @@ function Lightbox({ carousel, animation, render, toolbar, controller, noScroll,
|
|
|
1557
1560
|
React.createElement(EventsProvider, null, renderNode(createNode(RootModule, config), props))))));
|
|
1558
1561
|
}
|
|
1559
1562
|
|
|
1560
|
-
export { ACTION_CLOSE, ACTION_NEXT, ACTION_PREV, ACTION_SWIPE, CLASS_FLEX_CENTER, CLASS_NO_SCROLL, CLASS_NO_SCROLL_PADDING, CLASS_SLIDE_WRAPPER, Carousel, CarouselModule, CloseIcon, Controller, ControllerContext, ControllerModule, DocumentContext, DocumentContextProvider, ELEMENT_BUTTON, ELEMENT_ICON, EVENT_ON_KEY_DOWN, EVENT_ON_KEY_UP, EVENT_ON_POINTER_CANCEL, EVENT_ON_POINTER_DOWN, EVENT_ON_POINTER_LEAVE, EVENT_ON_POINTER_MOVE, EVENT_ON_POINTER_UP, EVENT_ON_WHEEL, ErrorIcon, EventsContext, EventsProvider, IMAGE_FIT_CONTAIN, IMAGE_FIT_COVER, IconButton, ImageSlide, Lightbox, LightboxDefaultProps, LightboxDispatchContext, LightboxPropsContext, LightboxPropsProvider, LightboxRoot, LightboxStateContext, LightboxStateProvider, LoadingIcon, MODULE_CAROUSEL, MODULE_CONTROLLER, MODULE_NAVIGATION, MODULE_NO_SCROLL, MODULE_PORTAL, MODULE_ROOT, MODULE_TOOLBAR, Navigation, NavigationButton, NavigationModule, NextIcon, NoScroll, NoScrollModule, Portal, PortalModule, PreviousIcon, Root, RootModule, SLIDE_STATUS_COMPLETE, SLIDE_STATUS_ERROR, SLIDE_STATUS_LOADING, SLIDE_STATUS_PLACEHOLDER, SwipeState, TimeoutsContext, TimeoutsProvider, Toolbar, ToolbarModule, UNKNOWN_ACTION_TYPE, VK_ARROW_LEFT, VK_ARROW_RIGHT, VK_ESCAPE, activeSlideStatus, addToolbarButton, calculatePreload, cleanup, clsx, composePrefix, computeSlideRect, createIcon, createIconDisabled, createModule, createNode, cssClass, cssVar, Lightbox as default, devicePixelRatio, getSlide, getSlideIfPresent, getSlideIndex, getSlideKey, hasSlides, hasWindow, isImageFitCover, isImageSlide, label, makeComposePrefix, makeInertWhen, makeUseContext, parseInt, parseLengthPercentage, round, setRef, stopNavigationEventsPropagation, useAnimation, useContainerRect, useController, useDelay, useDocumentContext, useEventCallback, useEvents, useForkRef, useKeyboardNavigation, useLayoutEffect, useLightboxDispatch, useLightboxProps, useLightboxState, useLoseFocus, useMotionPreference, useNavigationState, usePointerEvents, usePointerSwipe, usePreventWheelDefaults, useRTL, useSensors, useThrottle, useTimeouts, useWheelSwipe, withPlugins };
|
|
1563
|
+
export { ACTION_CLOSE, ACTION_NEXT, ACTION_PREV, ACTION_SWIPE, CLASS_FLEX_CENTER, CLASS_NO_SCROLL, CLASS_NO_SCROLL_PADDING, CLASS_SLIDE_WRAPPER, Carousel, CarouselModule, CloseIcon, Controller, ControllerContext, ControllerModule, DocumentContext, DocumentContextProvider, ELEMENT_BUTTON, ELEMENT_ICON, EVENT_ON_KEY_DOWN, EVENT_ON_KEY_UP, EVENT_ON_POINTER_CANCEL, EVENT_ON_POINTER_DOWN, EVENT_ON_POINTER_LEAVE, EVENT_ON_POINTER_MOVE, EVENT_ON_POINTER_UP, EVENT_ON_WHEEL, ErrorIcon, EventsContext, EventsProvider, IMAGE_FIT_CONTAIN, IMAGE_FIT_COVER, IconButton, ImageSlide, Lightbox, LightboxDefaultProps, LightboxDispatchContext, LightboxPropsContext, LightboxPropsProvider, LightboxRoot, LightboxStateContext, LightboxStateProvider, LoadingIcon, MODULE_CAROUSEL, MODULE_CONTROLLER, MODULE_NAVIGATION, MODULE_NO_SCROLL, MODULE_PORTAL, MODULE_ROOT, MODULE_TOOLBAR, Navigation, NavigationButton, NavigationModule, NextIcon, NoScroll, NoScrollModule, Portal, PortalModule, PreviousIcon, Root, RootModule, SLIDE_STATUS_COMPLETE, SLIDE_STATUS_ERROR, SLIDE_STATUS_LOADING, SLIDE_STATUS_PLACEHOLDER, SwipeState, TimeoutsContext, TimeoutsProvider, Toolbar, ToolbarModule, UNKNOWN_ACTION_TYPE, VK_ARROW_LEFT, VK_ARROW_RIGHT, VK_ESCAPE, activeSlideStatus, addToolbarButton, calculatePreload, cleanup, clsx, composePrefix, computeSlideRect, createIcon, createIconDisabled, createModule, createNode, cssClass, cssVar, Lightbox as default, devicePixelRatio, getSlide, getSlideIfPresent, getSlideIndex, getSlideKey, hasSlides, hasWindow, isImageFitCover, isImageSlide, label, makeComposePrefix, makeInertWhen, makeUseContext, parseInt, parseLengthPercentage, reflow, round, setRef, stopNavigationEventsPropagation, useAnimation, useContainerRect, useController, useDelay, useDocumentContext, useEventCallback, useEvents, useForkRef, useKeyboardNavigation, useLayoutEffect, useLightboxDispatch, useLightboxProps, useLightboxState, useLoseFocus, useMotionPreference, useNavigationState, usePointerEvents, usePointerSwipe, usePreventWheelDefaults, useRTL, useSensors, useThrottle, useTimeouts, useWheelSwipe, withPlugins };
|
|
@@ -109,8 +109,8 @@ function ThumbnailsTrack({ visible, containerRef }) {
|
|
|
109
109
|
useKeyboardNavigation(subscribeSensors);
|
|
110
110
|
const thumbnails = useThumbnailsProps();
|
|
111
111
|
const { position, width, height, border, borderStyle, borderColor, borderRadius, padding, gap, vignette } = thumbnails;
|
|
112
|
+
const offset = ((animation === null || animation === void 0 ? void 0 : animation.duration) !== undefined && (animation === null || animation === void 0 ? void 0 : animation.increment)) || 0;
|
|
112
113
|
const animationDuration = (animation === null || animation === void 0 ? void 0 : animation.duration) || 0;
|
|
113
|
-
const offset = (animationDuration > 0 && (animation === null || animation === void 0 ? void 0 : animation.increment)) || 0;
|
|
114
114
|
const { prepareAnimation } = useAnimation(track, (snapshot) => ({
|
|
115
115
|
keyframes: isHorizontal(position)
|
|
116
116
|
? [
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { useLightboxProps, useEvents, useContainerRect, useEventCallback, clsx, cssClass } from '../../index.js';
|
|
2
|
+
import { useLightboxProps, useEvents, useContainerRect, useEventCallback, reflow, clsx, cssClass } from '../../index.js';
|
|
3
3
|
import { ACTIVE_SLIDE_LOADING, CLASS_FLEX_CENTER, CLASS_SLIDE_WRAPPER, ACTIVE_SLIDE_COMPLETE, ACTIVE_SLIDE_PLAYING } from '../../types.js';
|
|
4
4
|
|
|
5
5
|
const defaultVideoProps = {
|
|
@@ -18,7 +18,8 @@ function useVideoProps() {
|
|
|
18
18
|
function VideoSlide({ slide, offset }) {
|
|
19
19
|
const video = useVideoProps();
|
|
20
20
|
const { publish } = useEvents();
|
|
21
|
-
const { setContainerRef, containerRect } = useContainerRect();
|
|
21
|
+
const { setContainerRef, containerRect, containerRef } = useContainerRect();
|
|
22
|
+
const { animation } = useLightboxProps();
|
|
22
23
|
const videoRef = React.useRef(null);
|
|
23
24
|
React.useEffect(() => {
|
|
24
25
|
if (offset !== 0 && videoRef.current && !videoRef.current.paused) {
|
|
@@ -31,6 +32,24 @@ function VideoSlide({ slide, offset }) {
|
|
|
31
32
|
videoRef.current.play().catch(() => { });
|
|
32
33
|
}
|
|
33
34
|
}, [offset, video.autoPlay, slide.autoPlay, publish]);
|
|
35
|
+
const fixupPlayerControls = useEventCallback(() => {
|
|
36
|
+
const timeoutId = setTimeout(() => {
|
|
37
|
+
if (containerRef.current) {
|
|
38
|
+
const borderStyle = containerRef.current.style.border;
|
|
39
|
+
containerRef.current.style.border = "1px solid transparent";
|
|
40
|
+
reflow(containerRef.current);
|
|
41
|
+
containerRef.current.style.border = borderStyle;
|
|
42
|
+
}
|
|
43
|
+
}, Math.max(animation.swipe, animation.navigation || 0) + 50);
|
|
44
|
+
return () => clearTimeout(timeoutId);
|
|
45
|
+
});
|
|
46
|
+
React.useEffect(() => {
|
|
47
|
+
var _a;
|
|
48
|
+
const isChromium = ((_a = navigator.userAgentData) === null || _a === void 0 ? void 0 : _a.brands.some(({ brand }) => brand === "Chromium")) || !!window.chrome;
|
|
49
|
+
if (isChromium && offset === 0) {
|
|
50
|
+
return fixupPlayerControls();
|
|
51
|
+
}
|
|
52
|
+
}, [offset, fixupPlayerControls]);
|
|
34
53
|
const handleVideoRef = useEventCallback((node) => {
|
|
35
54
|
if (offset === 0 && (video.autoPlay || slide.autoPlay) && node.paused) {
|
|
36
55
|
node.play().catch(() => { });
|