yet-another-react-lightbox 3.29.1 → 3.30.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/dist/index.d.ts +13 -3
- package/dist/index.js +27 -12
- package/dist/plugins/counter/counter.css +1 -1
- package/dist/types.d.ts +2 -0
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -173,6 +173,16 @@ declare const useLightboxDispatch: () => LightboxDispatchContextType;
|
|
|
173
173
|
type LightboxStateProviderProps = React.PropsWithChildren<Pick<LightboxProps, "slides" | "index">>;
|
|
174
174
|
declare function LightboxStateProvider({ slides, index, children }: LightboxStateProviderProps): React.JSX.Element;
|
|
175
175
|
|
|
176
|
+
type RTLContextType = {
|
|
177
|
+
isRTL: boolean;
|
|
178
|
+
};
|
|
179
|
+
declare const RTLContext: React.Context<RTLContextType | null>;
|
|
180
|
+
declare const useRTLContext: () => RTLContextType;
|
|
181
|
+
type RTLContextProviderProps = React.PropsWithChildren & {
|
|
182
|
+
isRTL: boolean;
|
|
183
|
+
};
|
|
184
|
+
declare function RTLContextProvider({ isRTL, children }: RTLContextProviderProps): React.JSX.Element;
|
|
185
|
+
|
|
176
186
|
type TimeoutsContextType = {
|
|
177
187
|
setTimeout: (fn: () => void, delay?: number) => number;
|
|
178
188
|
clearTimeout: (id?: number) => void;
|
|
@@ -291,7 +301,7 @@ declare function useNavigationState(): {
|
|
|
291
301
|
declare function NoScroll({ noScroll: { disabled }, children }: ComponentProps): React.JSX.Element;
|
|
292
302
|
declare const NoScrollModule: Module;
|
|
293
303
|
|
|
294
|
-
declare function Portal({
|
|
304
|
+
declare function Portal({ portal: { root, container: { className: containerClassName, style: containerStyle, ...containerRest } }, animation, styles, className, on, close, labels, children, }: ComponentProps): React.ReactPortal | null;
|
|
295
305
|
declare const PortalModule: Module;
|
|
296
306
|
|
|
297
307
|
declare function Root({ children }: ComponentProps): React.JSX.Element;
|
|
@@ -300,5 +310,5 @@ declare const RootModule: Module;
|
|
|
300
310
|
declare function Toolbar({ toolbar: { buttons }, render: { buttonClose, iconClose }, styles }: ComponentProps): React.JSX.Element;
|
|
301
311
|
declare const ToolbarModule: Module;
|
|
302
312
|
|
|
303
|
-
export { A11yContext, A11yContextProvider, 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, translateLabel, translateSlideCounter, useA11yContext, useAnimation, useContainerRect, useController, useDelay, useDocumentContext, useEventCallback, useEvents, useForkRef, useKeyboardNavigation, useLayoutEffect, useLightboxDispatch, useLightboxProps, useLightboxState, useLoseFocus, useMotionPreference, useNavigationState, usePointerSwipe, usePreventWheelDefaults, useRTL, useSensors, useThrottle, useTimeouts, useWheelSwipe, withPlugins };
|
|
304
|
-
export type { A11yContextType, 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 };
|
|
313
|
+
export { A11yContext, A11yContextProvider, 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, RTLContext, RTLContextProvider, 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, translateLabel, translateSlideCounter, useA11yContext, useAnimation, useContainerRect, useController, useDelay, useDocumentContext, useEventCallback, useEvents, useForkRef, useKeyboardNavigation, useLayoutEffect, useLightboxDispatch, useLightboxProps, useLightboxState, useLoseFocus, useMotionPreference, useNavigationState, usePointerSwipe, usePreventWheelDefaults, useRTL, useRTLContext, useSensors, useThrottle, useTimeouts, useWheelSwipe, withPlugins };
|
|
314
|
+
export type { A11yContextType, ComputeAnimation, ControllerContextType, DocumentContextProviderProps, DocumentContextType, Event, EventCallback, EventsContextType, IconButtonProps, ImageSlideProps, KeyboardEventType, LightboxDispatchContextType, LightboxPropsContextType, LightboxStateAction, LightboxStateContextType, LightboxStateProviderProps, NavigationButtonProps, PointerEventType, Publish, RTLContextProviderProps, RTLContextType, ReactEventType, RegisterSensors, SensorCallback, Subscribe, SubscribeSensors, SupportedEventType, TimeoutsContextType, Topic, Unsubscribe, UseSensors, WheelEventType };
|
package/dist/index.js
CHANGED
|
@@ -382,14 +382,25 @@ function LightboxStateProvider({ slides, index, children }) {
|
|
|
382
382
|
globalIndex: index,
|
|
383
383
|
currentSlide: getSlideIfPresent(slides, index),
|
|
384
384
|
});
|
|
385
|
-
React.
|
|
385
|
+
const [prevSlides, setPrevSlides] = React.useState(slides);
|
|
386
|
+
const [prevIndex, setPrevIndex] = React.useState(index);
|
|
387
|
+
if (slides !== prevSlides || index !== prevIndex) {
|
|
388
|
+
setPrevSlides(slides);
|
|
389
|
+
setPrevIndex(index);
|
|
386
390
|
dispatch({ type: "update", slides, index });
|
|
387
|
-
}
|
|
391
|
+
}
|
|
388
392
|
const context = React.useMemo(() => ({ ...state, state, dispatch }), [state, dispatch]);
|
|
389
393
|
return (React.createElement(LightboxDispatchContext.Provider, { value: dispatch },
|
|
390
394
|
React.createElement(LightboxStateContext.Provider, { value: context }, children)));
|
|
391
395
|
}
|
|
392
396
|
|
|
397
|
+
const RTLContext = React.createContext(null);
|
|
398
|
+
const useRTLContext = makeUseContext("useRTLContext", "RTLContext", RTLContext);
|
|
399
|
+
function RTLContextProvider({ isRTL, children }) {
|
|
400
|
+
const context = React.useMemo(() => ({ isRTL }), [isRTL]);
|
|
401
|
+
return React.createElement(RTLContext.Provider, { value: context }, children);
|
|
402
|
+
}
|
|
403
|
+
|
|
393
404
|
const TimeoutsContext = React.createContext(null);
|
|
394
405
|
const useTimeouts = makeUseContext("useTimeouts", "TimeoutsContext", TimeoutsContext);
|
|
395
406
|
function TimeoutsProvider({ children }) {
|
|
@@ -608,11 +619,7 @@ function useLoseFocus(focus, disabled = false) {
|
|
|
608
619
|
}
|
|
609
620
|
|
|
610
621
|
function useRTL() {
|
|
611
|
-
|
|
612
|
-
useLayoutEffect(() => {
|
|
613
|
-
setIsRTL(window.getComputedStyle(window.document.documentElement).direction === "rtl");
|
|
614
|
-
}, []);
|
|
615
|
-
return isRTL;
|
|
622
|
+
return useRTLContext().isRTL;
|
|
616
623
|
}
|
|
617
624
|
|
|
618
625
|
function useSensors() {
|
|
@@ -730,9 +737,16 @@ function ImageSlide({ slide: image, offset, render, rect, imageFit, imageProps,
|
|
|
730
737
|
|
|
731
738
|
const LightboxRoot = React.forwardRef(function LightboxRoot({ className, children, onFocus, onBlur, ...rest }, ref) {
|
|
732
739
|
const nodeRef = React.useRef(null);
|
|
740
|
+
const [isRTL, setIsRTL] = React.useState(false);
|
|
733
741
|
const { trackFocusWithin } = useA11yContext();
|
|
742
|
+
const detectRTL = React.useCallback((node) => {
|
|
743
|
+
if (node) {
|
|
744
|
+
setIsRTL(window.getComputedStyle(node).direction === "rtl");
|
|
745
|
+
}
|
|
746
|
+
}, []);
|
|
734
747
|
return (React.createElement(DocumentContextProvider, { nodeRef: nodeRef },
|
|
735
|
-
React.createElement(
|
|
748
|
+
React.createElement(RTLContextProvider, { isRTL: isRTL },
|
|
749
|
+
React.createElement("div", { ref: useForkRef(useForkRef(ref, nodeRef), detectRTL), className: clsx(cssClass("root"), className), ...trackFocusWithin(onFocus, onBlur), ...rest }, children))));
|
|
736
750
|
});
|
|
737
751
|
|
|
738
752
|
var SwipeState;
|
|
@@ -1447,7 +1461,7 @@ function setAttribute(element, attribute, value) {
|
|
|
1447
1461
|
}
|
|
1448
1462
|
};
|
|
1449
1463
|
}
|
|
1450
|
-
function Portal({
|
|
1464
|
+
function Portal({ portal: { root, container: { className: containerClassName, style: containerStyle, ...containerRest } = {} }, animation, styles, className, on, close, labels, children, }) {
|
|
1451
1465
|
const [mounted, setMounted] = React.useState(false);
|
|
1452
1466
|
const [visible, setVisible] = React.useState(false);
|
|
1453
1467
|
const cleanup = React.useRef([]);
|
|
@@ -1510,7 +1524,7 @@ function Portal({ children, animation, styles, className, on, portal, close, lab
|
|
|
1510
1524
|
}
|
|
1511
1525
|
}, [handleEnter, handleCleanup]);
|
|
1512
1526
|
return mounted
|
|
1513
|
-
? 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-label": translateLabel(labels, "Lightbox"), style: {
|
|
1527
|
+
? createPortal(React.createElement(LightboxRoot, { ref: handleRef, className: clsx(className, containerClassName, cssClass(cssPrefix$1()), cssClass(CLASS_NO_SCROLL_PADDING), visible && cssClass(cssPrefix$1("open"))), "aria-modal": true, role: "dialog", "aria-label": translateLabel(labels, "Lightbox"), style: {
|
|
1514
1528
|
...(animation.fade !== LightboxDefaultProps.animation.fade
|
|
1515
1529
|
? { [cssVar("fade_animation_duration")]: `${animationDuration}ms` }
|
|
1516
1530
|
: null),
|
|
@@ -1518,11 +1532,12 @@ function Portal({ children, animation, styles, className, on, portal, close, lab
|
|
|
1518
1532
|
? { [cssVar("fade_animation_timing_function")]: animation.easing.fade }
|
|
1519
1533
|
: null),
|
|
1520
1534
|
...styles.root,
|
|
1535
|
+
...containerStyle,
|
|
1521
1536
|
}, onFocus: (event) => {
|
|
1522
1537
|
if (!restoreFocus.current) {
|
|
1523
1538
|
restoreFocus.current = event.relatedTarget;
|
|
1524
1539
|
}
|
|
1525
|
-
} }, children),
|
|
1540
|
+
}, ...containerRest }, children), root || document.body)
|
|
1526
1541
|
: null;
|
|
1527
1542
|
}
|
|
1528
1543
|
const PortalModule = createModule(MODULE_PORTAL, Portal);
|
|
@@ -1596,4 +1611,4 @@ function Lightbox({ carousel, animation, render, toolbar, controller, noScroll,
|
|
|
1596
1611
|
React.createElement(A11yContextProvider, null, renderNode(createNode(RootModule, config), props)))))));
|
|
1597
1612
|
}
|
|
1598
1613
|
|
|
1599
|
-
export { A11yContext, A11yContextProvider, ACTION_CLOSE, ACTION_NEXT, ACTION_PREV, ACTION_SWIPE, CLASS_FLEX_CENTER, CLASS_NO_SCROLL, CLASS_NO_SCROLL_PADDING, CLASS_SLIDE, 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, translateLabel, translateSlideCounter, useA11yContext, 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 };
|
|
1614
|
+
export { A11yContext, A11yContextProvider, ACTION_CLOSE, ACTION_NEXT, ACTION_PREV, ACTION_SWIPE, CLASS_FLEX_CENTER, CLASS_NO_SCROLL, CLASS_NO_SCROLL_PADDING, CLASS_SLIDE, 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, RTLContext, RTLContextProvider, 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, translateLabel, translateSlideCounter, useA11yContext, useAnimation, useContainerRect, useController, useDelay, useDocumentContext, useEventCallback, useEvents, useForkRef, useKeyboardNavigation, useLayoutEffect, useLightboxDispatch, useLightboxProps, useLightboxState, useLoseFocus, useMotionPreference, useNavigationState, usePointerEvents, usePointerSwipe, usePreventWheelDefaults, useRTL, useRTLContext, useSensors, useThrottle, useTimeouts, useWheelSwipe, withPlugins };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.yarl__counter{bottom:var(--yarl__counter_bottom,unset);color:var(--yarl__counter_color,var(--yarl__color_button,hsla(0,0%,100%,.8)));filter:var(--yarl__counter_filter,drop-shadow(2px 2px 2px rgba(0,0,0,.8)));left:var(--yarl__counter_left,0);line-height:var(--yarl__counter_line_height,var(--yarl__icon_size,32px));margin:var(--yarl__counter_margin,var(--yarl__toolbar_padding,8px));padding:var(--yarl__counter_padding,var(--yarl__button_padding,8px));position:var(--yarl__counter_position,absolute);right:var(--yarl__counter_right,unset);top:var(--yarl__counter_top,0);-webkit-user-select:var(--yarl__counter_user_select,none);-moz-user-select:var(--yarl__counter_user_select,none);user-select:var(--yarl__counter_user_select,none)}
|
|
1
|
+
.yarl__counter{bottom:var(--yarl__counter_bottom,unset);color:var(--yarl__counter_color,var(--yarl__color_button,hsla(0,0%,100%,.8)));filter:var(--yarl__counter_filter,drop-shadow(2px 2px 2px rgba(0,0,0,.8)));left:var(--yarl__counter_left,0);line-height:var(--yarl__counter_line_height,var(--yarl__icon_size,32px));margin:var(--yarl__counter_margin,var(--yarl__toolbar_padding,8px));padding:var(--yarl__counter_padding,var(--yarl__button_padding,8px));position:var(--yarl__counter_position,absolute);right:var(--yarl__counter_right,unset);top:var(--yarl__counter_top,0);-webkit-user-select:var(--yarl__counter_user_select,none);-moz-user-select:var(--yarl__counter_user_select,none);user-select:var(--yarl__counter_user_select,none)}[dir=rtl] .yarl__counter{left:var(--yarl__counter_rtl_left,unset);right:var(--yarl__counter_rtl_right,0)}
|
package/dist/types.d.ts
CHANGED
|
@@ -264,6 +264,8 @@ interface ControllerRef {
|
|
|
264
264
|
interface PortalSettings {
|
|
265
265
|
/** portal mount point */
|
|
266
266
|
root?: DocumentFragment | Element | null;
|
|
267
|
+
/** HTML attributes for the portal container */
|
|
268
|
+
container?: React.HTMLAttributes<HTMLDivElement>;
|
|
267
269
|
}
|
|
268
270
|
/** NoScroll module settings */
|
|
269
271
|
interface NoScrollSettings {
|