@jobber/components 6.15.0 → 6.17.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.
@@ -1,6 +1,6 @@
1
1
  import { _ as __rest } from './tslib.es6-es.js';
2
2
  import React, { useState, useCallback, useEffect, useRef } from 'react';
3
- import { a as debounce } from './debounce-es.js';
3
+ import { d as debounce } from './debounce-es.js';
4
4
  import { f as FormField } from './FormField-es.js';
5
5
  import 'react-hook-form';
6
6
  import 'framer-motion';
@@ -3,7 +3,7 @@ import { a as useInternalChipDismissibleInput, d as useScrollToActive, b as useI
3
3
  import './isObjectLike-es.js';
4
4
  import '@jobber/design';
5
5
  import 'react-popper';
6
- import { a as debounce } from './debounce-es.js';
6
+ import { d as debounce } from './debounce-es.js';
7
7
  import classnames from 'classnames';
8
8
  import { T as Text } from './Text-es.js';
9
9
  import { B as Button } from './Button-es.js';
@@ -4,15 +4,16 @@ var LightBox = require('../LightBox-cjs.js');
4
4
  require('react');
5
5
  require('framer-motion');
6
6
  require('react-dom');
7
- require('../debounce-cjs.js');
8
- require('../_commonjsHelpers-cjs.js');
9
- require('../isObjectLike-cjs.js');
10
- require('../isSymbol-cjs.js');
11
7
  require('../useRefocusOnActivator-cjs.js');
12
8
  require('../useOnKeyDown-cjs.js');
13
9
  require('../useFocusTrap-cjs.js');
14
10
  require('../useIsMounted-cjs.js');
15
11
  require('../useSafeLayoutEffect-cjs.js');
12
+ require('../useDebounce-cjs.js');
13
+ require('../debounce-cjs.js');
14
+ require('../_commonjsHelpers-cjs.js');
15
+ require('../isObjectLike-cjs.js');
16
+ require('../isSymbol-cjs.js');
16
17
  require('../ButtonDismiss-cjs.js');
17
18
  require('../Button-cjs.js');
18
19
  require('classnames');
@@ -20,6 +21,16 @@ require('react-router-dom');
20
21
  require('../Icon-cjs.js');
21
22
  require('@jobber/design');
22
23
  require('../Typography-cjs.js');
24
+ require('../Text-cjs.js');
25
+ require('../Heading-cjs.js');
26
+ require('../AtlantisThemeContext-cjs.js');
27
+ require('../identity-cjs.js');
28
+ require('../isTypedArray-cjs.js');
29
+ require('../_baseAssignValue-cjs.js');
30
+ require('../_baseFor-cjs.js');
31
+ require('../keysIn-cjs.js');
32
+ require('../_isIterateeCall-cjs.js');
33
+ require('../_setToString-cjs.js');
23
34
 
24
35
 
25
36
 
@@ -2,15 +2,16 @@ export { L as LightBox } from '../LightBox-es.js';
2
2
  import 'react';
3
3
  import 'framer-motion';
4
4
  import 'react-dom';
5
- import '../debounce-es.js';
6
- import '../_commonjsHelpers-es.js';
7
- import '../isObjectLike-es.js';
8
- import '../isSymbol-es.js';
9
5
  import '../useRefocusOnActivator-es.js';
10
6
  import '../useOnKeyDown-es.js';
11
7
  import '../useFocusTrap-es.js';
12
8
  import '../useIsMounted-es.js';
13
9
  import '../useSafeLayoutEffect-es.js';
10
+ import '../useDebounce-es.js';
11
+ import '../debounce-es.js';
12
+ import '../_commonjsHelpers-es.js';
13
+ import '../isObjectLike-es.js';
14
+ import '../isSymbol-es.js';
14
15
  import '../ButtonDismiss-es.js';
15
16
  import '../Button-es.js';
16
17
  import 'classnames';
@@ -18,3 +19,13 @@ import 'react-router-dom';
18
19
  import '../Icon-es.js';
19
20
  import '@jobber/design';
20
21
  import '../Typography-es.js';
22
+ import '../Text-es.js';
23
+ import '../Heading-es.js';
24
+ import '../AtlantisThemeContext-es.js';
25
+ import '../identity-es.js';
26
+ import '../isTypedArray-es.js';
27
+ import '../_baseAssignValue-es.js';
28
+ import '../_baseFor-es.js';
29
+ import '../keysIn-es.js';
30
+ import '../_isIterateeCall-es.js';
31
+ import '../_setToString-es.js';
@@ -3,15 +3,76 @@
3
3
  var React = require('react');
4
4
  var framerMotion = require('framer-motion');
5
5
  var ReactDOM = require('react-dom');
6
- var debounce = require('./debounce-cjs.js');
7
6
  var useRefocusOnActivator = require('./useRefocusOnActivator-cjs.js');
8
7
  var useOnKeyDown = require('./useOnKeyDown-cjs.js');
9
8
  var useFocusTrap = require('./useFocusTrap-cjs.js');
10
9
  var useIsMounted = require('./useIsMounted-cjs.js');
10
+ var useDebounce = require('./useDebounce-cjs.js');
11
11
  var ButtonDismiss = require('./ButtonDismiss-cjs.js');
12
+ var Text = require('./Text-cjs.js');
12
13
  var Button = require('./Button-cjs.js');
14
+ var Heading = require('./Heading-cjs.js');
15
+ var AtlantisThemeContext = require('./AtlantisThemeContext-cjs.js');
13
16
 
14
- var styles = {"next":"Q8amcRaTGf0-","prev":"W9FVb24yJrk-","lightboxWrapper":"_5p2iAj4JfoE-","toolbar":"rMK4cKdOxFw-","title":"tZU2g-NYdIs-","imagesWrapper":"ACX-rWRvYCs-","overlay":"_3tKP7luZoEQ-","image":"yYFVVScosfQ-","spinning":"_8tDoqjgfLcw-"};
17
+ var useBreakpoints = {};
18
+
19
+ var useMediaQuery = {};
20
+
21
+ (function (exports) {
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.mediaQueryStore = void 0;
24
+ exports.useMediaQuery = useMediaQuery;
25
+ const react_1 = React;
26
+ exports.mediaQueryStore = {
27
+ subscribe(onChange, query) {
28
+ const matchMedia = window.matchMedia(query);
29
+ matchMedia.addEventListener("change", onChange);
30
+ return () => {
31
+ matchMedia.removeEventListener("change", onChange);
32
+ };
33
+ },
34
+ getSnapshot(query) {
35
+ return () => window.matchMedia(query).matches;
36
+ },
37
+ };
38
+ function useMediaQuery(query) {
39
+ const subscribeMediaQuery = (0, react_1.useCallback)((onChange) => exports.mediaQueryStore.subscribe(onChange, query), [query]);
40
+ const matches = (0, react_1.useSyncExternalStore)(subscribeMediaQuery, exports.mediaQueryStore.getSnapshot(query), () => true);
41
+ return matches;
42
+ }
43
+ } (useMediaQuery));
44
+
45
+ (function (exports) {
46
+ Object.defineProperty(exports, "__esModule", { value: true });
47
+ exports.BREAKPOINT_SIZES = void 0;
48
+ exports.useBreakpoints = useBreakpoints;
49
+ const useMediaQuery_1 = useMediaQuery;
50
+ exports.BREAKPOINT_SIZES = { sm: 490, md: 768, lg: 1080, xl: 1440 };
51
+ /**
52
+ * Hook equivalent of CSS media queries with our
53
+ * [supported breakpoints](https://atlantis.getjobber.com/?path=/docs/design-breakpoints--docs).
54
+ */
55
+ function useBreakpoints() {
56
+ const { sm, md, lg, xl } = exports.BREAKPOINT_SIZES;
57
+ const extraSmallOnly = (0, useMediaQuery_1.useMediaQuery)(`(max-width: ${sm - 1}px)`);
58
+ const smallAndUp = (0, useMediaQuery_1.useMediaQuery)(`(min-width: ${sm}px)`);
59
+ const mediumAndUp = (0, useMediaQuery_1.useMediaQuery)(`(min-width: ${md}px)`);
60
+ const largeAndUp = (0, useMediaQuery_1.useMediaQuery)(`(min-width: ${lg}px)`);
61
+ const extraLargeAndUp = (0, useMediaQuery_1.useMediaQuery)(`(min-width: ${xl}px)`);
62
+ return {
63
+ smallAndUp,
64
+ mediumAndUp,
65
+ largeAndUp,
66
+ extraLargeAndUp,
67
+ extraSmallOnly,
68
+ smallOnly: smallAndUp && !mediumAndUp,
69
+ mediumOnly: mediumAndUp && !largeAndUp,
70
+ largeOnly: largeAndUp && !extraLargeAndUp,
71
+ };
72
+ }
73
+ } (useBreakpoints));
74
+
75
+ var styles = {"backgroundImage":"i9Tw1T65W-k-","next":"Q8amcRaTGf0-","prev":"W9FVb24yJrk-","buttonHidden":"nsN0TPWsBXI-","buttonVisible":"dkLYp7AD2jE-","lightboxWrapper":"_5p2iAj4JfoE-","toolbar":"rMK4cKdOxFw-","closeButton":"_0m6vb11DgiA-","slideNumber":"kCc68gGuTgg-","image":"yYFVVScosfQ-","imageArea":"UskuwLHR6fg-","captionWrapper":"OGjhge-r-U4-","blurOverlay":"GKIdLTmvcvQ-","spinning":"_8tDoqjgfLcw-"};
15
76
 
16
77
  /* eslint-disable max-statements */
17
78
  const swipeConfidenceThreshold = 10000;
@@ -45,16 +106,21 @@ const imageTransition = {
45
106
  // A little bit more than the transition's duration
46
107
  // We're doing this to prevent a bug from framer-motion
47
108
  // https://github.com/framer/motion/issues/1769
48
- const debounceDuration = 250;
109
+ const BUTTON_DEBOUNCE_DELAY = 250;
110
+ const MOVEMENT_DEBOUNCE_DELAY = 1000;
49
111
  function LightBox({ open, images, imageIndex = 0, onRequestClose, }) {
50
112
  const [currentImageIndex, setCurrentImageIndex] = React.useState(imageIndex);
51
113
  const [direction, setDirection] = React.useState(0);
114
+ const [mouseIsStationary, setMouseIsStationary] = React.useState(true);
52
115
  const lightboxRef = useFocusTrap.useFocusTrap_2(open);
53
- const debouncedHandleNext = debounce.debounce(handleMoveNext, debounceDuration);
54
- const debouncedHandlePrevious = debounce.debounce(handleMovePrevious, debounceDuration);
116
+ const debouncedHandleNext = useDebounce.useDebounce(handleMoveNext, BUTTON_DEBOUNCE_DELAY);
117
+ const debouncedHandlePrevious = useDebounce.useDebounce(handleMovePrevious, BUTTON_DEBOUNCE_DELAY);
55
118
  const mounted = useIsMounted.useIsMounted_2();
56
119
  const prevOpen = React.useRef(open);
57
120
  useRefocusOnActivator.useRefocusOnActivator_2(open);
121
+ const handleMouseMovement = useDebounce.useDebounce(() => {
122
+ setMouseIsStationary(true);
123
+ }, MOVEMENT_DEBOUNCE_DELAY);
58
124
  useOnKeyDown.useOnKeyDown_2(handleRequestClose, "Escape");
59
125
  useOnKeyDown.useOnKeyDown_2(debouncedHandlePrevious, {
60
126
  key: "ArrowLeft",
@@ -69,18 +135,33 @@ function LightBox({ open, images, imageIndex = 0, onRequestClose, }) {
69
135
  prevOpen.current = open;
70
136
  togglePrintStyles(open);
71
137
  }
72
- const template = (React.createElement(React.Fragment, null, open && (React.createElement("div", { className: styles.lightboxWrapper, tabIndex: 0, "aria-label": "Lightbox", key: "Lightbox", ref: lightboxRef },
73
- React.createElement("div", { className: styles.toolbar },
74
- React.createElement("span", { className: styles.title }, images[currentImageIndex].title),
75
- React.createElement(ButtonDismiss.ButtonDismiss, { ariaLabel: "Close", onClick: handleRequestClose })),
76
- React.createElement("div", { className: styles.imagesWrapper },
138
+ const template = (React.createElement(React.Fragment, null, open && (React.createElement("div", { className: styles.lightboxWrapper, tabIndex: 0, "aria-label": "Lightbox", key: "Lightbox", ref: lightboxRef, onMouseMove: () => {
139
+ if (mouseIsStationary) {
140
+ setMouseIsStationary(false);
141
+ }
142
+ handleMouseMovement();
143
+ } },
144
+ React.createElement("div", { className: styles.backgroundImage, style: {
145
+ backgroundImage: `url("${images[currentImageIndex].url}")`,
146
+ } }),
147
+ React.createElement("div", { className: styles.blurOverlay, onClick: handleRequestClose }),
148
+ React.createElement(AtlantisThemeContext.AtlantisThemeContextProvider, { dangerouslyOverrideTheme: "dark" },
149
+ React.createElement("div", { className: styles.toolbar },
150
+ React.createElement("div", { className: styles.slideNumber },
151
+ React.createElement(Text.Text, null, `${currentImageIndex + 1}/${images.length}`)),
152
+ React.createElement("div", { className: styles.closeButton },
153
+ React.createElement(ButtonDismiss.ButtonDismiss, { ariaLabel: "Close", onClick: handleRequestClose })))),
154
+ React.createElement("div", { className: styles.imageArea },
77
155
  React.createElement(framerMotion.AnimatePresence, { initial: false },
78
- React.createElement(framerMotion.motion.img, { key: currentImageIndex, variants: variants, src: images[currentImageIndex].url, custom: direction, className: styles.image, style: { y: "-50%" }, initial: "enter", animate: "center", exit: "exit", transition: imageTransition, drag: "x", dragConstraints: { left: 0, right: 0 }, dragElastic: 1, onDragEnd: handleOnDragEnd }))),
156
+ React.createElement(framerMotion.motion.img, { key: currentImageIndex, variants: variants, src: images[currentImageIndex].url, custom: direction, className: styles.image, initial: "enter", animate: "center", exit: "exit", transition: imageTransition, drag: "x", dragConstraints: { left: 0, right: 0 }, dragElastic: 1, onDragEnd: handleOnDragEnd }))),
79
157
  images.length > 1 && (React.createElement(React.Fragment, null,
80
- React.createElement(PreviousButton, { onClick: debouncedHandlePrevious }),
81
- React.createElement(NextButton, { onClick: debouncedHandleNext }))),
82
- React.createElement("div", { className: styles.toolbar }, images[currentImageIndex].caption),
83
- React.createElement("div", { className: styles.overlay, onClick: handleRequestClose })))));
158
+ React.createElement(PreviousButton, { onClick: debouncedHandlePrevious, hideButton: mouseIsStationary }),
159
+ React.createElement(NextButton, { onClick: debouncedHandleNext, hideButton: mouseIsStationary }))),
160
+ (images[currentImageIndex].title ||
161
+ images[currentImageIndex].caption) && (React.createElement("div", { className: styles.captionWrapper },
162
+ React.createElement(AtlantisThemeContext.AtlantisThemeContextProvider, { dangerouslyOverrideTheme: "dark" },
163
+ images[currentImageIndex].title && (React.createElement(Heading.Heading, { level: 4 }, images[currentImageIndex].title)),
164
+ images[currentImageIndex].caption && (React.createElement(Text.Text, { size: "large" }, images[currentImageIndex].caption)))))))));
84
165
  return mounted.current
85
166
  ? ReactDOM.createPortal(template, document.body)
86
167
  : template;
@@ -105,13 +186,15 @@ function LightBox({ open, images, imageIndex = 0, onRequestClose, }) {
105
186
  }
106
187
  }
107
188
  }
108
- function PreviousButton({ onClick }) {
109
- return (React.createElement("div", { className: styles.prev },
110
- React.createElement(Button.Button, { size: "large", variation: "subtle", type: "secondary", icon: "arrowLeft", ariaLabel: "Previous image", onClick: onClick })));
189
+ function PreviousButton({ onClick, hideButton }) {
190
+ const { mediumAndUp } = useBreakpoints.useBreakpoints();
191
+ return (React.createElement("div", { className: `${styles.prev} ${hideButton ? styles.buttonHidden : styles.buttonVisible}` },
192
+ React.createElement(Button.Button, { size: mediumAndUp ? "large" : "small", variation: "subtle", type: "secondary", icon: "arrowLeft", ariaLabel: "Previous image", onClick: onClick })));
111
193
  }
112
- function NextButton({ onClick }) {
113
- return (React.createElement("div", { className: styles.next },
114
- React.createElement(Button.Button, { size: "large", variation: "subtle", type: "secondary", icon: "arrowRight", ariaLabel: "Next image", onClick: onClick })));
194
+ function NextButton({ onClick, hideButton }) {
195
+ const { mediumAndUp } = useBreakpoints.useBreakpoints();
196
+ return (React.createElement("div", { className: `${styles.next} ${hideButton ? styles.buttonHidden : styles.buttonVisible}` },
197
+ React.createElement(Button.Button, { size: mediumAndUp ? "large" : "small", variation: "subtle", type: "secondary", icon: "arrowRight", ariaLabel: "Next image", onClick: onClick })));
115
198
  }
116
199
  function togglePrintStyles(open) {
117
200
  try {
@@ -1,15 +1,76 @@
1
1
  import React, { useState, useRef, useEffect } from 'react';
2
2
  import { AnimatePresence, motion } from 'framer-motion';
3
3
  import ReactDOM from 'react-dom';
4
- import { a as debounce } from './debounce-es.js';
5
4
  import { u as useRefocusOnActivator_2 } from './useRefocusOnActivator-es.js';
6
5
  import { u as useOnKeyDown_2 } from './useOnKeyDown-es.js';
7
6
  import { u as useFocusTrap_2 } from './useFocusTrap-es.js';
8
7
  import { u as useIsMounted_2 } from './useIsMounted-es.js';
8
+ import { u as useDebounce } from './useDebounce-es.js';
9
9
  import { B as ButtonDismiss } from './ButtonDismiss-es.js';
10
+ import { T as Text } from './Text-es.js';
10
11
  import { B as Button } from './Button-es.js';
12
+ import { H as Heading } from './Heading-es.js';
13
+ import { A as AtlantisThemeContextProvider } from './AtlantisThemeContext-es.js';
11
14
 
12
- var styles = {"next":"Q8amcRaTGf0-","prev":"W9FVb24yJrk-","lightboxWrapper":"_5p2iAj4JfoE-","toolbar":"rMK4cKdOxFw-","title":"tZU2g-NYdIs-","imagesWrapper":"ACX-rWRvYCs-","overlay":"_3tKP7luZoEQ-","image":"yYFVVScosfQ-","spinning":"_8tDoqjgfLcw-"};
15
+ var useBreakpoints = {};
16
+
17
+ var useMediaQuery = {};
18
+
19
+ (function (exports) {
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.mediaQueryStore = void 0;
22
+ exports.useMediaQuery = useMediaQuery;
23
+ const react_1 = React;
24
+ exports.mediaQueryStore = {
25
+ subscribe(onChange, query) {
26
+ const matchMedia = window.matchMedia(query);
27
+ matchMedia.addEventListener("change", onChange);
28
+ return () => {
29
+ matchMedia.removeEventListener("change", onChange);
30
+ };
31
+ },
32
+ getSnapshot(query) {
33
+ return () => window.matchMedia(query).matches;
34
+ },
35
+ };
36
+ function useMediaQuery(query) {
37
+ const subscribeMediaQuery = (0, react_1.useCallback)((onChange) => exports.mediaQueryStore.subscribe(onChange, query), [query]);
38
+ const matches = (0, react_1.useSyncExternalStore)(subscribeMediaQuery, exports.mediaQueryStore.getSnapshot(query), () => true);
39
+ return matches;
40
+ }
41
+ } (useMediaQuery));
42
+
43
+ (function (exports) {
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.BREAKPOINT_SIZES = void 0;
46
+ exports.useBreakpoints = useBreakpoints;
47
+ const useMediaQuery_1 = useMediaQuery;
48
+ exports.BREAKPOINT_SIZES = { sm: 490, md: 768, lg: 1080, xl: 1440 };
49
+ /**
50
+ * Hook equivalent of CSS media queries with our
51
+ * [supported breakpoints](https://atlantis.getjobber.com/?path=/docs/design-breakpoints--docs).
52
+ */
53
+ function useBreakpoints() {
54
+ const { sm, md, lg, xl } = exports.BREAKPOINT_SIZES;
55
+ const extraSmallOnly = (0, useMediaQuery_1.useMediaQuery)(`(max-width: ${sm - 1}px)`);
56
+ const smallAndUp = (0, useMediaQuery_1.useMediaQuery)(`(min-width: ${sm}px)`);
57
+ const mediumAndUp = (0, useMediaQuery_1.useMediaQuery)(`(min-width: ${md}px)`);
58
+ const largeAndUp = (0, useMediaQuery_1.useMediaQuery)(`(min-width: ${lg}px)`);
59
+ const extraLargeAndUp = (0, useMediaQuery_1.useMediaQuery)(`(min-width: ${xl}px)`);
60
+ return {
61
+ smallAndUp,
62
+ mediumAndUp,
63
+ largeAndUp,
64
+ extraLargeAndUp,
65
+ extraSmallOnly,
66
+ smallOnly: smallAndUp && !mediumAndUp,
67
+ mediumOnly: mediumAndUp && !largeAndUp,
68
+ largeOnly: largeAndUp && !extraLargeAndUp,
69
+ };
70
+ }
71
+ } (useBreakpoints));
72
+
73
+ var styles = {"backgroundImage":"i9Tw1T65W-k-","next":"Q8amcRaTGf0-","prev":"W9FVb24yJrk-","buttonHidden":"nsN0TPWsBXI-","buttonVisible":"dkLYp7AD2jE-","lightboxWrapper":"_5p2iAj4JfoE-","toolbar":"rMK4cKdOxFw-","closeButton":"_0m6vb11DgiA-","slideNumber":"kCc68gGuTgg-","image":"yYFVVScosfQ-","imageArea":"UskuwLHR6fg-","captionWrapper":"OGjhge-r-U4-","blurOverlay":"GKIdLTmvcvQ-","spinning":"_8tDoqjgfLcw-"};
13
74
 
14
75
  /* eslint-disable max-statements */
15
76
  const swipeConfidenceThreshold = 10000;
@@ -43,16 +104,21 @@ const imageTransition = {
43
104
  // A little bit more than the transition's duration
44
105
  // We're doing this to prevent a bug from framer-motion
45
106
  // https://github.com/framer/motion/issues/1769
46
- const debounceDuration = 250;
107
+ const BUTTON_DEBOUNCE_DELAY = 250;
108
+ const MOVEMENT_DEBOUNCE_DELAY = 1000;
47
109
  function LightBox({ open, images, imageIndex = 0, onRequestClose, }) {
48
110
  const [currentImageIndex, setCurrentImageIndex] = useState(imageIndex);
49
111
  const [direction, setDirection] = useState(0);
112
+ const [mouseIsStationary, setMouseIsStationary] = useState(true);
50
113
  const lightboxRef = useFocusTrap_2(open);
51
- const debouncedHandleNext = debounce(handleMoveNext, debounceDuration);
52
- const debouncedHandlePrevious = debounce(handleMovePrevious, debounceDuration);
114
+ const debouncedHandleNext = useDebounce(handleMoveNext, BUTTON_DEBOUNCE_DELAY);
115
+ const debouncedHandlePrevious = useDebounce(handleMovePrevious, BUTTON_DEBOUNCE_DELAY);
53
116
  const mounted = useIsMounted_2();
54
117
  const prevOpen = useRef(open);
55
118
  useRefocusOnActivator_2(open);
119
+ const handleMouseMovement = useDebounce(() => {
120
+ setMouseIsStationary(true);
121
+ }, MOVEMENT_DEBOUNCE_DELAY);
56
122
  useOnKeyDown_2(handleRequestClose, "Escape");
57
123
  useOnKeyDown_2(debouncedHandlePrevious, {
58
124
  key: "ArrowLeft",
@@ -67,18 +133,33 @@ function LightBox({ open, images, imageIndex = 0, onRequestClose, }) {
67
133
  prevOpen.current = open;
68
134
  togglePrintStyles(open);
69
135
  }
70
- const template = (React.createElement(React.Fragment, null, open && (React.createElement("div", { className: styles.lightboxWrapper, tabIndex: 0, "aria-label": "Lightbox", key: "Lightbox", ref: lightboxRef },
71
- React.createElement("div", { className: styles.toolbar },
72
- React.createElement("span", { className: styles.title }, images[currentImageIndex].title),
73
- React.createElement(ButtonDismiss, { ariaLabel: "Close", onClick: handleRequestClose })),
74
- React.createElement("div", { className: styles.imagesWrapper },
136
+ const template = (React.createElement(React.Fragment, null, open && (React.createElement("div", { className: styles.lightboxWrapper, tabIndex: 0, "aria-label": "Lightbox", key: "Lightbox", ref: lightboxRef, onMouseMove: () => {
137
+ if (mouseIsStationary) {
138
+ setMouseIsStationary(false);
139
+ }
140
+ handleMouseMovement();
141
+ } },
142
+ React.createElement("div", { className: styles.backgroundImage, style: {
143
+ backgroundImage: `url("${images[currentImageIndex].url}")`,
144
+ } }),
145
+ React.createElement("div", { className: styles.blurOverlay, onClick: handleRequestClose }),
146
+ React.createElement(AtlantisThemeContextProvider, { dangerouslyOverrideTheme: "dark" },
147
+ React.createElement("div", { className: styles.toolbar },
148
+ React.createElement("div", { className: styles.slideNumber },
149
+ React.createElement(Text, null, `${currentImageIndex + 1}/${images.length}`)),
150
+ React.createElement("div", { className: styles.closeButton },
151
+ React.createElement(ButtonDismiss, { ariaLabel: "Close", onClick: handleRequestClose })))),
152
+ React.createElement("div", { className: styles.imageArea },
75
153
  React.createElement(AnimatePresence, { initial: false },
76
- React.createElement(motion.img, { key: currentImageIndex, variants: variants, src: images[currentImageIndex].url, custom: direction, className: styles.image, style: { y: "-50%" }, initial: "enter", animate: "center", exit: "exit", transition: imageTransition, drag: "x", dragConstraints: { left: 0, right: 0 }, dragElastic: 1, onDragEnd: handleOnDragEnd }))),
154
+ React.createElement(motion.img, { key: currentImageIndex, variants: variants, src: images[currentImageIndex].url, custom: direction, className: styles.image, initial: "enter", animate: "center", exit: "exit", transition: imageTransition, drag: "x", dragConstraints: { left: 0, right: 0 }, dragElastic: 1, onDragEnd: handleOnDragEnd }))),
77
155
  images.length > 1 && (React.createElement(React.Fragment, null,
78
- React.createElement(PreviousButton, { onClick: debouncedHandlePrevious }),
79
- React.createElement(NextButton, { onClick: debouncedHandleNext }))),
80
- React.createElement("div", { className: styles.toolbar }, images[currentImageIndex].caption),
81
- React.createElement("div", { className: styles.overlay, onClick: handleRequestClose })))));
156
+ React.createElement(PreviousButton, { onClick: debouncedHandlePrevious, hideButton: mouseIsStationary }),
157
+ React.createElement(NextButton, { onClick: debouncedHandleNext, hideButton: mouseIsStationary }))),
158
+ (images[currentImageIndex].title ||
159
+ images[currentImageIndex].caption) && (React.createElement("div", { className: styles.captionWrapper },
160
+ React.createElement(AtlantisThemeContextProvider, { dangerouslyOverrideTheme: "dark" },
161
+ images[currentImageIndex].title && (React.createElement(Heading, { level: 4 }, images[currentImageIndex].title)),
162
+ images[currentImageIndex].caption && (React.createElement(Text, { size: "large" }, images[currentImageIndex].caption)))))))));
82
163
  return mounted.current
83
164
  ? ReactDOM.createPortal(template, document.body)
84
165
  : template;
@@ -103,13 +184,15 @@ function LightBox({ open, images, imageIndex = 0, onRequestClose, }) {
103
184
  }
104
185
  }
105
186
  }
106
- function PreviousButton({ onClick }) {
107
- return (React.createElement("div", { className: styles.prev },
108
- React.createElement(Button, { size: "large", variation: "subtle", type: "secondary", icon: "arrowLeft", ariaLabel: "Previous image", onClick: onClick })));
187
+ function PreviousButton({ onClick, hideButton }) {
188
+ const { mediumAndUp } = useBreakpoints.useBreakpoints();
189
+ return (React.createElement("div", { className: `${styles.prev} ${hideButton ? styles.buttonHidden : styles.buttonVisible}` },
190
+ React.createElement(Button, { size: mediumAndUp ? "large" : "small", variation: "subtle", type: "secondary", icon: "arrowLeft", ariaLabel: "Previous image", onClick: onClick })));
109
191
  }
110
- function NextButton({ onClick }) {
111
- return (React.createElement("div", { className: styles.next },
112
- React.createElement(Button, { size: "large", variation: "subtle", type: "secondary", icon: "arrowRight", ariaLabel: "Next image", onClick: onClick })));
192
+ function NextButton({ onClick, hideButton }) {
193
+ const { mediumAndUp } = useBreakpoints.useBreakpoints();
194
+ return (React.createElement("div", { className: `${styles.next} ${hideButton ? styles.buttonHidden : styles.buttonVisible}` },
195
+ React.createElement(Button, { size: mediumAndUp ? "large" : "small", variation: "subtle", type: "secondary", icon: "arrowRight", ariaLabel: "Next image", onClick: onClick })));
113
196
  }
114
197
  function togglePrintStyles(open) {
115
198
  try {
@@ -326,4 +326,4 @@ var debounce_1 = debounce;
326
326
 
327
327
  var debounce$1 = /*@__PURE__*/getDefaultExportFromCjs(debounce_1);
328
328
 
329
- export { debounce$1 as a, debounce_1 as d };
329
+ export { debounce_1 as a, debounce$1 as d };
package/dist/index.cjs CHANGED
@@ -3,6 +3,7 @@
3
3
  var AnimatedPresence = require('./AnimatedPresence-cjs.js');
4
4
  var AnimatedSwitcher = require('./AnimatedSwitcher-cjs.js');
5
5
  var AtlantisContext = require('./AtlantisContext-cjs.js');
6
+ var AtlantisThemeContext = require('./AtlantisThemeContext-cjs.js');
6
7
  var updateTheme = require('./updateTheme-cjs.js');
7
8
  var Autocomplete = require('./Autocomplete-cjs.js');
8
9
  require('react');
@@ -103,6 +104,7 @@ require('./_isIterateeCall-cjs.js');
103
104
  require('./_setToString-cjs.js');
104
105
  require('./tslib.es6-cjs.js');
105
106
  require('./useOnKeyDown-cjs.js');
107
+ require('./useDebounce-cjs.js');
106
108
  require('./debounce-cjs.js');
107
109
  require('./isSymbol-cjs.js');
108
110
  require('color');
@@ -182,11 +184,11 @@ exports.AnimatedSwitcher = AnimatedSwitcher.AnimatedSwitcher;
182
184
  exports.AtlantisContext = AtlantisContext.AtlantisContext;
183
185
  exports.atlantisContextDefaultValues = AtlantisContext.atlantisContextDefaultValues;
184
186
  exports.useAtlantisContext = AtlantisContext.useAtlantisContext;
185
- exports.AtlantisThemeContextProvider = updateTheme.AtlantisThemeContextProvider;
186
- exports.THEME_CHANGE_EVENT = updateTheme.THEME_CHANGE_EVENT;
187
- exports.atlantisThemeContextDefaultValues = updateTheme.atlantisThemeContextDefaultValues;
187
+ exports.AtlantisThemeContextProvider = AtlantisThemeContext.AtlantisThemeContextProvider;
188
+ exports.THEME_CHANGE_EVENT = AtlantisThemeContext.THEME_CHANGE_EVENT;
189
+ exports.atlantisThemeContextDefaultValues = AtlantisThemeContext.atlantisThemeContextDefaultValues;
190
+ exports.useAtlantisTheme = AtlantisThemeContext.useAtlantisTheme;
188
191
  exports.updateTheme = updateTheme.updateTheme;
189
- exports.useAtlantisTheme = updateTheme.useAtlantisTheme;
190
192
  exports.Autocomplete = Autocomplete.Autocomplete;
191
193
  exports.Heading = Heading.Heading;
192
194
  exports.Text = Text.Text;
package/dist/index.mjs CHANGED
@@ -1,7 +1,8 @@
1
1
  export { A as AnimatedPresence } from './AnimatedPresence-es.js';
2
2
  export { A as AnimatedSwitcher } from './AnimatedSwitcher-es.js';
3
3
  export { A as AtlantisContext, a as atlantisContextDefaultValues, u as useAtlantisContext } from './AtlantisContext-es.js';
4
- export { A as AtlantisThemeContextProvider, T as THEME_CHANGE_EVENT, a as atlantisThemeContextDefaultValues, b as updateTheme, u as useAtlantisTheme } from './updateTheme-es.js';
4
+ export { A as AtlantisThemeContextProvider, T as THEME_CHANGE_EVENT, a as atlantisThemeContextDefaultValues, u as useAtlantisTheme } from './AtlantisThemeContext-es.js';
5
+ export { u as updateTheme } from './updateTheme-es.js';
5
6
  export { A as Autocomplete } from './Autocomplete-es.js';
6
7
  import 'react';
7
8
  import 'classnames';
@@ -101,6 +102,7 @@ import './_isIterateeCall-es.js';
101
102
  import './_setToString-es.js';
102
103
  import './tslib.es6-es.js';
103
104
  import './useOnKeyDown-es.js';
105
+ import './useDebounce-es.js';
104
106
  import './debounce-es.js';
105
107
  import './isSymbol-es.js';
106
108
  import 'color';