@razorpay/blade 11.34.1 → 11.35.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/build/lib/native/utils/useCallbackRef.js +6 -0
- package/build/lib/native/utils/useCallbackRef.js.map +1 -0
- package/build/lib/native/utils/useControllable.js +2 -1
- package/build/lib/native/utils/useControllable.js.map +1 -1
- package/build/lib/web/development/components/Carousel/Carousel.web.js +65 -57
- package/build/lib/web/development/components/Carousel/Carousel.web.js.map +1 -1
- package/build/lib/web/development/utils/useCallbackRef.js +31 -0
- package/build/lib/web/development/utils/useCallbackRef.js.map +1 -0
- package/build/lib/web/development/utils/useControllable.js +13 -5
- package/build/lib/web/development/utils/useControllable.js.map +1 -1
- package/build/lib/web/production/components/Carousel/Carousel.web.js +65 -57
- package/build/lib/web/production/components/Carousel/Carousel.web.js.map +1 -1
- package/build/lib/web/production/utils/useCallbackRef.js +31 -0
- package/build/lib/web/production/utils/useCallbackRef.js.map +1 -0
- package/build/lib/web/production/utils/useControllable.js +13 -5
- package/build/lib/web/production/utils/useControllable.js.map +1 -1
- package/build/types/components/index.d.ts +13 -2
- package/build/types/components/index.native.d.ts +12 -1
- package/package.json +1 -1
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { useRef, useInsertionEffect, useCallback } from 'react';
|
|
2
|
+
|
|
3
|
+
function useCallbackRef(callback){var deps=arguments.length>1&&arguments[1]!==undefined?arguments[1]:[];var callbackRef=useRef(function(){throw new Error('Cannot call an event handler while rendering.');});useInsertionEffect(function(){callbackRef.current=callback;});return useCallback(function(){for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key];}return callbackRef.current==null?void 0:callbackRef.current.apply(callbackRef,args);},deps);}
|
|
4
|
+
|
|
5
|
+
export { useCallbackRef };
|
|
6
|
+
//# sourceMappingURL=useCallbackRef.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCallbackRef.js","sources":["../../../../src/utils/useCallbackRef.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/explicit-function-return-type */\nimport { useCallback, useInsertionEffect, useRef } from 'react';\n\n/**\n * This hook is user-land implementation of the experimental `useEffectEvent` hook.\n * React docs: https://react.dev/learn/separating-events-from-effects#declaring-an-effect-event\n *\n * This hook is useful when you want to use a callback function inside a useEffect while keeping it \"fresh\" but you don't want to add it to the dependency array.\n */\nfunction useCallbackRef<Args extends unknown[], Return>(\n callback: ((...args: Args) => Return) | undefined,\n deps: React.DependencyList = [],\n) {\n const callbackRef = useRef<typeof callback>(() => {\n throw new Error('Cannot call an event handler while rendering.');\n });\n\n useInsertionEffect(() => {\n callbackRef.current = callback;\n });\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return useCallback((...args: Args) => callbackRef.current?.(...args), deps);\n}\n\nexport { useCallbackRef };\n"],"names":["useCallbackRef","callback","deps","arguments","length","undefined","callbackRef","useRef","Error","useInsertionEffect","current","useCallback","_len","args","Array","_key","apply"],"mappings":";;AASA,SAASA,cAAcA,CACrBC,QAAiD,CAEjD,CADA,IAAAC,IAA0B,CAAAC,SAAA,CAAAC,MAAA,CAAA,CAAA,EAAAD,SAAA,CAAA,CAAA,CAAA,GAAAE,SAAA,CAAAF,SAAA,CAAA,CAAA,CAAA,CAAG,EAAE,CAE/B,IAAMG,WAAW,CAAGC,MAAM,CAAkB,UAAM,CAChD,MAAU,IAAAC,KAAK,CAAC,+CAA+C,CAAC,CAClE,CAAC,CAAC,CAEFC,kBAAkB,CAAC,UAAM,CACvBH,WAAW,CAACI,OAAO,CAAGT,QAAQ,CAChC,CAAC,CAAC,CAGF,OAAOU,WAAW,CAAC,UAAA,CAAA,IAAA,IAAAC,IAAA,CAAAT,SAAA,CAAAC,MAAA,CAAIS,IAAI,CAAAC,IAAAA,KAAA,CAAAF,IAAA,CAAAG,CAAAA,IAAA,CAAAA,CAAAA,CAAAA,IAAA,CAAAH,IAAA,CAAAG,IAAA,EAAJF,CAAAA,CAAAA,IAAI,CAAAE,IAAA,CAAA,CAAAZ,SAAA,CAAAY,IAAA,CAAA,CAAA,CAAA,OAAWT,WAAW,CAACI,OAAO,EAAnBJ,IAAAA,CAAAA,KAAAA,CAAAA,CAAAA,WAAW,CAACI,OAAO,CAAAM,KAAA,CAAnBV,WAAW,CAAcO,IAAI,CAAC,CAAEX,CAAAA,CAAAA,IAAI,CAAC,CAC7E;;;;"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
|
|
2
2
|
import * as React from 'react';
|
|
3
|
+
import { useCallbackRef } from './useCallbackRef.js';
|
|
3
4
|
|
|
4
|
-
function useControllableState(props){var valueProp=props.value,defaultValue=props.defaultValue,onChange=props.onChange;var _React$useState=React.useState(defaultValue),_React$useState2=_slicedToArray(_React$useState,2),valueState=_React$useState2[0],setValue=_React$useState2[1];var _React$useRef=React.useRef(valueProp!==undefined),isControlled=_React$useRef.current;var value=isControlled&&typeof valueProp!=='undefined'?valueProp:valueState;var updateValue=
|
|
5
|
+
function useControllableState(props){var valueProp=props.value,defaultValue=props.defaultValue,onChange=props.onChange,_props$shouldUpdate=props.shouldUpdate,shouldUpdate=_props$shouldUpdate===void 0?function(prev,next){return prev!==next;}:_props$shouldUpdate;var onChangeProp=useCallbackRef(onChange);var shouldUpdateProp=useCallbackRef(shouldUpdate);var _React$useState=React.useState(defaultValue),_React$useState2=_slicedToArray(_React$useState,2),valueState=_React$useState2[0],setValue=_React$useState2[1];var _React$useRef=React.useRef(valueProp!==undefined),isControlled=_React$useRef.current;var value=isControlled&&typeof valueProp!=='undefined'?valueProp:valueState;var updateValue=useCallbackRef(function(next){var skipUpdate=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;var nextValue=next(value);if(!isControlled)setValue(nextValue);if(!shouldUpdateProp(value,nextValue))return;if(skipUpdate)return;onChangeProp==null?void 0:onChangeProp(nextValue);},[isControlled,onChangeProp,value,shouldUpdateProp]);return [value,updateValue];}
|
|
5
6
|
|
|
6
7
|
export { useControllableState };
|
|
7
8
|
//# sourceMappingURL=useControllable.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useControllable.js","sources":["../../../../src/utils/useControllable.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n/* eslint-disable @typescript-eslint/explicit-function-return-type */\n/* eslint-disable react-hooks/exhaustive-deps */\nimport * as React from 'react';\n\ntype ControllableStateSetter<T> = (\n /**\n * Sets the state to the given value\n */\n next: (prevState: T) => T,\n /**\n * If `true`, `onChange` won't be called\n */\n skipUpdate?: boolean,\n) => void;\n\ntype UseControllableStateProps<T> = {\n /**\n * The value to used in controlled mode\n */\n value?: T;\n /**\n * The initial value to be used, in uncontrolled mode\n */\n defaultValue?: T | (() => T);\n /**\n * The callback fired when the value changes\n */\n onChange?: (value: T) => void;\n};\n\n/**\n * React hook for using controlling component state.\n *\n * It automatically handles controlled and uncontrolled state,\n * while internally giving us the state value so that we can react to the changes.\n *\n * @example\n * In checkbox we want to internally track the checked state to be able to render the correct Icon\n * but also want to provide controlled and uncontrolled behavior to user\n */\
|
|
1
|
+
{"version":3,"file":"useControllable.js","sources":["../../../../src/utils/useControllable.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n/* eslint-disable @typescript-eslint/explicit-function-return-type */\n/* eslint-disable react-hooks/exhaustive-deps */\nimport * as React from 'react';\nimport { useCallbackRef } from './useCallbackRef';\n\ntype ControllableStateSetter<T> = (\n /**\n * Sets the state to the given value\n */\n next: (prevState: T) => T,\n /**\n * If `true`, `onChange` won't be called\n */\n skipUpdate?: boolean,\n) => void;\n\ntype UseControllableStateProps<T> = {\n /**\n * The value to used in controlled mode\n */\n value?: T;\n /**\n * The initial value to be used, in uncontrolled mode\n */\n defaultValue?: T | (() => T);\n /**\n * The callback fired when the value changes\n */\n onChange?: (value: T) => void;\n shouldUpdate?: (prev: T, next: T) => boolean;\n};\n\n/**\n * React hook for using controlling component state.\n *\n * It automatically handles controlled and uncontrolled state,\n * while internally giving us the state value so that we can react to the changes.\n *\n * @example\n * In checkbox we want to internally track the checked state to be able to render the correct Icon\n * but also want to provide controlled and uncontrolled behavior to user\n */\nfunction useControllableState<T>(props: UseControllableStateProps<T>) {\n const {\n value: valueProp,\n defaultValue,\n onChange,\n shouldUpdate = (prev, next) => prev !== next,\n } = props;\n\n const onChangeProp = useCallbackRef(onChange);\n const shouldUpdateProp = useCallbackRef(shouldUpdate);\n\n const [valueState, setValue] = React.useState(defaultValue as T);\n const { current: isControlled } = React.useRef(valueProp !== undefined);\n const value = isControlled && typeof valueProp !== 'undefined' ? valueProp : valueState;\n\n const updateValue: ControllableStateSetter<T> = useCallbackRef(\n (next, skipUpdate = false) => {\n const nextValue = next(value);\n if (!isControlled) setValue(nextValue);\n // We don't want to call onChange if skipUpdate is true or if the value is not changed\n if (!shouldUpdateProp(value, nextValue)) return;\n if (skipUpdate) return;\n onChangeProp?.(nextValue);\n },\n [isControlled, onChangeProp, value, shouldUpdateProp],\n );\n\n return [value, updateValue] as [T, ControllableStateSetter<T>];\n}\n\nexport { useControllableState };\nexport type { ControllableStateSetter };\n"],"names":["useControllableState","props","valueProp","value","defaultValue","onChange","_props$shouldUpdate","shouldUpdate","prev","next","onChangeProp","useCallbackRef","shouldUpdateProp","_React$useState","React","useState","_React$useState2","_slicedToArray","valueState","setValue","_React$useRef","useRef","undefined","isControlled","current","updateValue","skipUpdate","arguments","length","nextValue"],"mappings":";;;;AA2CA,SAASA,oBAAoBA,CAAIC,KAAmC,CAAE,CACpE,IACSC,SAAS,CAIdD,KAAK,CAJPE,KAAK,CACLC,YAAY,CAGVH,KAAK,CAHPG,YAAY,CACZC,QAAQ,CAENJ,KAAK,CAFPI,QAAQ,CAAAC,mBAAA,CAENL,KAAK,CADPM,YAAY,CAAZA,YAAY,CAAAD,mBAAA,GAAG,KAAA,CAAA,CAAA,SAACE,IAAI,CAAEC,IAAI,CAAK,CAAA,OAAAD,IAAI,GAAKC,IAAI,CAAAH,CAAAA,CAAAA,mBAAA,CAG9C,IAAMI,YAAY,CAAGC,cAAc,CAACN,QAAQ,CAAC,CAC7C,IAAMO,gBAAgB,CAAGD,cAAc,CAACJ,YAAY,CAAC,CAErD,IAAAM,eAAA,CAA+BC,KAAK,CAACC,QAAQ,CAACX,YAAiB,CAAC,CAAAY,gBAAA,CAAAC,cAAA,CAAAJ,eAAA,CAAA,CAAA,CAAA,CAAzDK,UAAU,CAAAF,gBAAA,CAAA,CAAA,CAAA,CAAEG,QAAQ,CAAAH,gBAAA,CAC3B,CAAA,CAAA,CAAA,IAAAI,aAAA,CAAkCN,KAAK,CAACO,MAAM,CAACnB,SAAS,GAAKoB,SAAS,CAAC,CAAtDC,YAAY,CAAAH,aAAA,CAArBI,OAAO,CACf,IAAMrB,KAAK,CAAGoB,YAAY,EAAI,OAAOrB,SAAS,GAAK,WAAW,CAAGA,SAAS,CAAGgB,UAAU,CAEvF,IAAMO,WAAuC,CAAGd,cAAc,CAC5D,SAACF,IAAI,CAAyB,CAAvB,IAAAiB,UAAU,CAAAC,SAAA,CAAAC,MAAA,CAAAD,CAAAA,EAAAA,SAAA,MAAAL,SAAA,CAAAK,SAAA,CAAA,CAAA,CAAA,CAAG,KAAK,CACvB,IAAME,SAAS,CAAGpB,IAAI,CAACN,KAAK,CAAC,CAC7B,GAAI,CAACoB,YAAY,CAAEJ,QAAQ,CAACU,SAAS,CAAC,CAEtC,GAAI,CAACjB,gBAAgB,CAACT,KAAK,CAAE0B,SAAS,CAAC,CAAE,OACzC,GAAIH,UAAU,CAAE,OAChBhB,YAAY,EAAZA,IAAAA,CAAAA,KAAAA,CAAAA,CAAAA,YAAY,CAAGmB,SAAS,CAAC,CAC3B,CAAC,CACD,CAACN,YAAY,CAAEb,YAAY,CAAEP,KAAK,CAAES,gBAAgB,CACtD,CAAC,CAED,OAAO,CAACT,KAAK,CAAEsB,WAAW,CAAC,CAC7B;;;;"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
|
|
2
2
|
import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
|
|
3
|
-
import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
|
|
4
3
|
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
5
4
|
import styled from 'styled-components';
|
|
6
5
|
import React__default from 'react';
|
|
@@ -20,8 +19,10 @@ import '../../utils/makeAccessible/index.js';
|
|
|
20
19
|
import '../../utils/metaAttribute/index.js';
|
|
21
20
|
import { useVerifyAllowedChildren } from '../../utils/useVerifyAllowedChildren/useVerifyAllowedChildren.js';
|
|
22
21
|
import '../BladeProvider/index.js';
|
|
23
|
-
import { useFirstRender } from '../../utils/useFirstRender.js';
|
|
24
22
|
import '../Box/styledProps/index.js';
|
|
23
|
+
import { useControllableState } from '../../utils/useControllable.js';
|
|
24
|
+
import { useIsomorphicLayoutEffect } from '../../utils/useIsomorphicLayoutEffect.js';
|
|
25
|
+
import { useDidUpdate } from '../../utils/useDidUpdate.js';
|
|
25
26
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
26
27
|
import { Box } from '../Box/Box.js';
|
|
27
28
|
import { NavigationButton } from './NavigationButton/NavigationButton.js';
|
|
@@ -29,14 +30,13 @@ import { BaseBox } from '../Box/BaseBox/BaseBox.web.js';
|
|
|
29
30
|
import { castWebType } from '../../utils/platform/castUtils.js';
|
|
30
31
|
import { makeMotionTime } from '../../utils/makeMotionTime/makeMotionTime.web.js';
|
|
31
32
|
import { makeAccessible } from '../../utils/makeAccessible/makeAccessible.web.js';
|
|
32
|
-
import { usePrevious } from '../../utils/usePrevious/usePrevious.js';
|
|
33
33
|
import useTheme from '../BladeProvider/useTheme.js';
|
|
34
34
|
import { useInterval } from '../../utils/useInterval.js';
|
|
35
35
|
import { metaAttribute } from '../../utils/metaAttribute/metaAttribute.web.js';
|
|
36
36
|
import { MetaConstants } from '../../utils/metaAttribute/metaConstants.js';
|
|
37
37
|
import { getStyledProps } from '../Box/styledProps/getStyledProps.js';
|
|
38
38
|
|
|
39
|
-
var _excluded = ["autoPlay", "visibleItems", "showIndicators", "navigationButtonPosition", "children", "shouldAddStartEndSpacing", "carouselItemWidth", "scrollOverlayColor", "accessibilityLabel", "onChange", "indicatorVariant", "navigationButtonVariant", "carouselItemAlignment", "height"];
|
|
39
|
+
var _excluded = ["autoPlay", "visibleItems", "showIndicators", "navigationButtonPosition", "children", "shouldAddStartEndSpacing", "carouselItemWidth", "scrollOverlayColor", "accessibilityLabel", "onChange", "indicatorVariant", "navigationButtonVariant", "carouselItemAlignment", "height", "defaultActiveSlide", "activeSlide"];
|
|
40
40
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
41
41
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
42
42
|
var Controls = function Controls(_ref) {
|
|
@@ -191,24 +191,6 @@ var CarouselBody = /*#__PURE__*/React__default.forwardRef(function (_ref3, ref)
|
|
|
191
191
|
})
|
|
192
192
|
}));
|
|
193
193
|
});
|
|
194
|
-
|
|
195
|
-
/**
|
|
196
|
-
* A custom hook which syncs an effect with a state
|
|
197
|
-
* While ignoring the first render & only running the effect when the state changes
|
|
198
|
-
*/
|
|
199
|
-
function useSyncUpdateEffect(effect, stateToSyncWith, deps) {
|
|
200
|
-
var isFirst = useFirstRender();
|
|
201
|
-
var prevState = usePrevious(stateToSyncWith);
|
|
202
|
-
React__default.useEffect(function () {
|
|
203
|
-
if (!isFirst) {
|
|
204
|
-
// if the state is the same as the previous state
|
|
205
|
-
// we don't want to run the effect
|
|
206
|
-
if (prevState === stateToSyncWith) return;
|
|
207
|
-
return effect();
|
|
208
|
-
}
|
|
209
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
210
|
-
}, [stateToSyncWith].concat(_toConsumableArray(deps)));
|
|
211
|
-
}
|
|
212
194
|
var Carousel = function Carousel(_ref4) {
|
|
213
195
|
var autoPlay = _ref4.autoPlay,
|
|
214
196
|
_ref4$visibleItems = _ref4.visibleItems,
|
|
@@ -223,7 +205,7 @@ var Carousel = function Carousel(_ref4) {
|
|
|
223
205
|
carouselItemWidth = _ref4.carouselItemWidth,
|
|
224
206
|
scrollOverlayColor = _ref4.scrollOverlayColor,
|
|
225
207
|
accessibilityLabel = _ref4.accessibilityLabel,
|
|
226
|
-
|
|
208
|
+
_onChange = _ref4.onChange,
|
|
227
209
|
_ref4$indicatorVarian = _ref4.indicatorVariant,
|
|
228
210
|
indicatorVariant = _ref4$indicatorVarian === void 0 ? 'gray' : _ref4$indicatorVarian,
|
|
229
211
|
_ref4$navigationButto2 = _ref4.navigationButtonVariant,
|
|
@@ -231,43 +213,52 @@ var Carousel = function Carousel(_ref4) {
|
|
|
231
213
|
_ref4$carouselItemAli = _ref4.carouselItemAlignment,
|
|
232
214
|
carouselItemAlignment = _ref4$carouselItemAli === void 0 ? 'start' : _ref4$carouselItemAli,
|
|
233
215
|
height = _ref4.height,
|
|
216
|
+
defaultActiveSlide = _ref4.defaultActiveSlide,
|
|
217
|
+
activeSlideProp = _ref4.activeSlide,
|
|
234
218
|
props = _objectWithoutProperties(_ref4, _excluded);
|
|
235
219
|
var _useTheme = useTheme(),
|
|
236
220
|
platform = _useTheme.platform;
|
|
237
221
|
var _React$useState = React__default.useState(0),
|
|
238
222
|
_React$useState2 = _slicedToArray(_React$useState, 2),
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
var
|
|
223
|
+
activeIndicator = _React$useState2[0],
|
|
224
|
+
setActiveIndicator = _React$useState2[1];
|
|
225
|
+
var _useControllableState = useControllableState({
|
|
226
|
+
defaultValue: defaultActiveSlide !== null && defaultActiveSlide !== void 0 ? defaultActiveSlide : 0,
|
|
227
|
+
value: activeSlideProp,
|
|
228
|
+
onChange: function onChange(value) {
|
|
229
|
+
_onChange === null || _onChange === void 0 ? void 0 : _onChange(value);
|
|
230
|
+
}
|
|
231
|
+
}),
|
|
232
|
+
_useControllableState2 = _slicedToArray(_useControllableState, 2),
|
|
233
|
+
activeSlide = _useControllableState2[0],
|
|
234
|
+
setActiveSlide = _useControllableState2[1];
|
|
235
|
+
var _React$useState3 = React__default.useState(false),
|
|
242
236
|
_React$useState4 = _slicedToArray(_React$useState3, 2),
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
var _React$useState5 = React__default.useState(
|
|
237
|
+
shouldPauseAutoplay = _React$useState4[0],
|
|
238
|
+
setShouldPauseAutoplay = _React$useState4[1];
|
|
239
|
+
var _React$useState5 = React__default.useState(0),
|
|
246
240
|
_React$useState6 = _slicedToArray(_React$useState5, 2),
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
var _React$useState7 = React__default.useState(0),
|
|
250
|
-
_React$useState8 = _slicedToArray(_React$useState7, 2),
|
|
251
|
-
startEndMargin = _React$useState8[0],
|
|
252
|
-
setStartEndMargin = _React$useState8[1];
|
|
241
|
+
startEndMargin = _React$useState6[0],
|
|
242
|
+
setStartEndMargin = _React$useState6[1];
|
|
253
243
|
var containerRef = React__default.useRef(null);
|
|
254
244
|
var isMobile = platform === 'onMobile';
|
|
255
|
-
var id = useId(
|
|
245
|
+
var id = useId();
|
|
246
|
+
var carouselId = "carousel-".concat(id);
|
|
256
247
|
useVerifyAllowedChildren({
|
|
257
248
|
componentName: 'Carousel',
|
|
258
249
|
allowedComponents: [componentIds.CarouselItem],
|
|
259
250
|
children: children
|
|
260
251
|
});
|
|
261
|
-
var _React$
|
|
252
|
+
var _React$useState7 = React__default.useState(
|
|
262
253
|
// on mobile we do not want to render the overlay
|
|
263
254
|
isMobile ? true : !shouldAddStartEndSpacing),
|
|
255
|
+
_React$useState8 = _slicedToArray(_React$useState7, 2),
|
|
256
|
+
isScrollAtStart = _React$useState8[0],
|
|
257
|
+
setScrollStart = _React$useState8[1];
|
|
258
|
+
var _React$useState9 = React__default.useState(isMobile),
|
|
264
259
|
_React$useState10 = _slicedToArray(_React$useState9, 2),
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
var _React$useState11 = React__default.useState(isMobile),
|
|
268
|
-
_React$useState12 = _slicedToArray(_React$useState11, 2),
|
|
269
|
-
isScrollAtEnd = _React$useState12[0],
|
|
270
|
-
setScrollEnd = _React$useState12[1];
|
|
260
|
+
isScrollAtEnd = _React$useState10[0],
|
|
261
|
+
setScrollEnd = _React$useState10[1];
|
|
271
262
|
var isResponsive = visibleItems === 'autofit';
|
|
272
263
|
var _visibleItems = visibleItems;
|
|
273
264
|
if (isMobile) {
|
|
@@ -296,31 +287,36 @@ var Carousel = function Carousel(_ref4) {
|
|
|
296
287
|
|
|
297
288
|
// calculate the start/end margin so that we can
|
|
298
289
|
// deduct that margin when scrolling to a carousel item with goToSlideIndex
|
|
299
|
-
|
|
290
|
+
useIsomorphicLayoutEffect(function () {
|
|
300
291
|
var _carouselItem$getBoun, _containerRef$current;
|
|
301
292
|
// Do not calculate if not needed
|
|
302
293
|
if (!isResponsive && !shouldAddStartEndSpacing) return;
|
|
303
294
|
if (!containerRef.current) return;
|
|
304
|
-
var carouselItemId = getCarouselItemId(
|
|
295
|
+
var carouselItemId = getCarouselItemId(carouselId, 0);
|
|
305
296
|
var carouselItem = containerRef.current.querySelector(carouselItemId);
|
|
306
297
|
if (!carouselItem) return;
|
|
307
298
|
var carouselItemLeft = (_carouselItem$getBoun = carouselItem.getBoundingClientRect().left) !== null && _carouselItem$getBoun !== void 0 ? _carouselItem$getBoun : 0;
|
|
308
299
|
var carouselContainerLeft = (_containerRef$current = containerRef.current.getBoundingClientRect().left) !== null && _containerRef$current !== void 0 ? _containerRef$current : 0;
|
|
309
300
|
setStartEndMargin(carouselItemLeft - carouselContainerLeft);
|
|
310
|
-
}, [
|
|
311
|
-
var
|
|
301
|
+
}, [carouselId, isResponsive, shouldAddStartEndSpacing]);
|
|
302
|
+
var scrollToSlide = function scrollToSlide(slideIndex) {
|
|
312
303
|
var _ref5;
|
|
304
|
+
var shouldAnimate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
313
305
|
if (!containerRef.current) return;
|
|
314
|
-
var carouselItemId = getCarouselItemId(
|
|
306
|
+
var carouselItemId = getCarouselItemId(carouselId, slideIndex * _visibleItems);
|
|
315
307
|
var carouselItem = containerRef.current.querySelector(carouselItemId);
|
|
316
308
|
if (!carouselItem) return;
|
|
317
309
|
var carouselItemLeft = (_ref5 = carouselItem.getBoundingClientRect().left - containerRef.current.getBoundingClientRect().left) !== null && _ref5 !== void 0 ? _ref5 : 0;
|
|
318
310
|
var left = containerRef.current.scrollLeft + carouselItemLeft;
|
|
319
311
|
containerRef.current.scroll({
|
|
320
312
|
left: left - startEndMargin,
|
|
321
|
-
behavior: 'smooth'
|
|
313
|
+
behavior: shouldAnimate ? 'smooth' : 'auto'
|
|
314
|
+
});
|
|
315
|
+
};
|
|
316
|
+
var goToSlideIndex = function goToSlideIndex(slideIndex) {
|
|
317
|
+
setActiveSlide(function () {
|
|
318
|
+
return slideIndex;
|
|
322
319
|
});
|
|
323
|
-
setActiveSlide(slideIndex);
|
|
324
320
|
setActiveIndicator(slideIndex);
|
|
325
321
|
};
|
|
326
322
|
var goToNextSlide = function goToNextSlide() {
|
|
@@ -394,13 +390,16 @@ var Carousel = function Carousel(_ref4) {
|
|
|
394
390
|
}
|
|
395
391
|
var slideIndex = Number(carouselItem === null || carouselItem === void 0 ? void 0 : carouselItem.getAttribute('data-slide-index'));
|
|
396
392
|
var goTo = Math.ceil(slideIndex / _visibleItems);
|
|
393
|
+
setActiveSlide(function () {
|
|
394
|
+
return goTo;
|
|
395
|
+
});
|
|
397
396
|
setActiveIndicator(goTo);
|
|
398
|
-
setActiveSlide(goTo);
|
|
399
397
|
}, 50);
|
|
400
398
|
carouselContainer.addEventListener('scroll', handleScroll);
|
|
401
399
|
return function () {
|
|
402
400
|
carouselContainer === null || carouselContainer === void 0 ? void 0 : carouselContainer.removeEventListener('scroll', handleScroll);
|
|
403
401
|
};
|
|
402
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
404
403
|
}, [_visibleItems, isMobile, isResponsive, shouldAddStartEndSpacing]);
|
|
405
404
|
|
|
406
405
|
// auto play
|
|
@@ -411,6 +410,18 @@ var Carousel = function Carousel(_ref4) {
|
|
|
411
410
|
// only enable if autoplay is true & user's intent isn't to interact with carousel
|
|
412
411
|
enable: autoPlay && !shouldPauseAutoplay
|
|
413
412
|
});
|
|
413
|
+
|
|
414
|
+
// set initial active slide on mount
|
|
415
|
+
useIsomorphicLayoutEffect(function () {
|
|
416
|
+
if (!id) return;
|
|
417
|
+
goToSlideIndex(activeSlide);
|
|
418
|
+
scrollToSlide(activeSlide, false);
|
|
419
|
+
}, [id]);
|
|
420
|
+
|
|
421
|
+
// Scroll the carousel to the active slide
|
|
422
|
+
useDidUpdate(function () {
|
|
423
|
+
scrollToSlide(activeSlide);
|
|
424
|
+
}, [activeSlide]);
|
|
414
425
|
var carouselContext = React__default.useMemo(function () {
|
|
415
426
|
return {
|
|
416
427
|
isResponsive: isResponsive,
|
|
@@ -418,16 +429,13 @@ var Carousel = function Carousel(_ref4) {
|
|
|
418
429
|
carouselItemWidth: carouselItemWidth,
|
|
419
430
|
carouselContainerRef: containerRef,
|
|
420
431
|
setActiveIndicator: setActiveIndicator,
|
|
421
|
-
carouselId:
|
|
432
|
+
carouselId: carouselId,
|
|
422
433
|
totalNumberOfSlides: totalNumberOfSlides,
|
|
423
434
|
activeSlide: activeSlide,
|
|
424
435
|
startEndMargin: startEndMargin,
|
|
425
436
|
shouldAddStartEndSpacing: shouldAddStartEndSpacing
|
|
426
437
|
};
|
|
427
|
-
}, [
|
|
428
|
-
useSyncUpdateEffect(function () {
|
|
429
|
-
onChange === null || onChange === void 0 ? void 0 : onChange(activeSlide);
|
|
430
|
-
}, activeSlide, [onChange]);
|
|
438
|
+
}, [carouselId, startEndMargin, isResponsive, _visibleItems, carouselItemWidth, totalNumberOfSlides, activeSlide, shouldAddStartEndSpacing]);
|
|
431
439
|
return /*#__PURE__*/jsx(CarouselContext.Provider, {
|
|
432
440
|
value: carouselContext,
|
|
433
441
|
children: /*#__PURE__*/jsxs(BaseBox, _objectSpread(_objectSpread(_objectSpread({}, metaAttribute({
|
|
@@ -485,7 +493,7 @@ var Carousel = function Carousel(_ref4) {
|
|
|
485
493
|
variant: navigationButtonVariant,
|
|
486
494
|
onClick: goToPreviousSlide
|
|
487
495
|
}) : null, /*#__PURE__*/jsx(CarouselBody, {
|
|
488
|
-
idPrefix:
|
|
496
|
+
idPrefix: carouselId,
|
|
489
497
|
startEndMargin: startEndMargin,
|
|
490
498
|
totalSlides: totalNumberOfSlides,
|
|
491
499
|
shouldAddStartEndSpacing: shouldAddStartEndSpacing,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Carousel.web.js","sources":["../../../../../../src/components/Carousel/Carousel.web.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unnecessary-type-assertion */\n/* eslint-disable @typescript-eslint/prefer-nullish-coalescing */\n/* eslint-disable consistent-return */\n/* eslint-disable @typescript-eslint/restrict-plus-operands */\n/* eslint-disable @typescript-eslint/explicit-function-return-type */\n/* eslint-disable react/jsx-no-useless-fragment */\nimport type { CSSObject } from 'styled-components';\nimport styled from 'styled-components';\nimport React from 'react';\nimport { Indicators } from './Indicators/Indicators';\nimport { NavigationButton } from './NavigationButton';\nimport type { CarouselProps } from './types';\nimport type { CarouselContextProps } from './CarouselContext';\nimport { CarouselContext } from './CarouselContext';\nimport { getCarouselItemId } from './utils';\nimport { CAROUSEL_AUTOPLAY_INTERVAL, componentIds } from './constants';\nimport getIn from '~utils/lodashButBetter/get';\nimport throttle from '~utils/lodashButBetter/throttle';\nimport debounce from '~utils/lodashButBetter/debounce';\nimport { Box } from '~components/Box';\nimport BaseBox from '~components/Box/BaseBox';\nimport { castWebType, makeMotionTime, useInterval, usePrevious } from '~utils';\nimport { useId } from '~utils/useId';\nimport { makeAccessible } from '~utils/makeAccessible';\nimport { metaAttribute, MetaConstants } from '~utils/metaAttribute';\nimport { useVerifyAllowedChildren } from '~utils/useVerifyAllowedChildren/useVerifyAllowedChildren';\nimport { useTheme } from '~components/BladeProvider';\nimport { useFirstRender } from '~utils/useFirstRender';\nimport { getStyledProps } from '~components/Box/styledProps';\n\ntype ControlsProp = Required<\n Pick<\n CarouselProps,\n 'indicatorVariant' | 'showIndicators' | 'navigationButtonVariant' | 'navigationButtonPosition'\n >\n> & {\n activeIndicator: number;\n totalSlides: number;\n onIndicatorButtonClick: (index: number) => void;\n onNextButtonClick: () => void;\n onPreviousButtonClick: () => void;\n};\n\nconst Controls = ({\n showIndicators,\n navigationButtonPosition,\n activeIndicator,\n totalSlides,\n onIndicatorButtonClick,\n onNextButtonClick,\n onPreviousButtonClick,\n indicatorVariant,\n navigationButtonVariant,\n}: ControlsProp): React.ReactElement => {\n if (navigationButtonPosition === 'bottom') {\n return (\n <Box marginTop=\"spacing.7\" display=\"flex\" alignItems=\"center\" gap=\"spacing.4\">\n <NavigationButton\n type=\"previous\"\n variant={navigationButtonVariant}\n onClick={onPreviousButtonClick}\n />\n {showIndicators ? (\n <Indicators\n onClick={onIndicatorButtonClick}\n activeIndex={activeIndicator}\n totalItems={totalSlides}\n variant={indicatorVariant}\n />\n ) : null}\n <NavigationButton\n onClick={onNextButtonClick}\n type=\"next\"\n variant={navigationButtonVariant}\n />\n </Box>\n );\n }\n\n if (showIndicators && navigationButtonPosition === 'side') {\n return (\n <Box marginTop=\"spacing.7\">\n <Indicators\n onClick={onIndicatorButtonClick}\n activeIndex={activeIndicator}\n totalItems={totalSlides}\n variant={indicatorVariant}\n />\n </Box>\n );\n }\n\n return <></>;\n};\n\nconst CarouselContainer = styled(BaseBox)<{\n showOverlay?: boolean;\n scrollOverlayColor: CarouselProps['scrollOverlayColor'];\n isScrollAtStart: boolean;\n isScrollAtEnd: boolean;\n}>(({ theme, showOverlay, scrollOverlayColor, isScrollAtStart, isScrollAtEnd }) => {\n const gradientStop1: string = getIn(theme.colors, scrollOverlayColor!);\n const gradientStop2 = 'hsla(0, 0%, 100%, 0)';\n\n const overlayCommonStyle: CSSObject = {\n content: \"''\",\n position: 'absolute',\n top: 0,\n width: '100px',\n height: '100%',\n transitionDuration: castWebType(makeMotionTime(theme.motion.duration.gentle)),\n transitionTimingFunction: castWebType(theme.motion.easing.standard.effective),\n transitionProperty: 'opacity',\n };\n\n return {\n width: '100%',\n height: '100%',\n overflowX: 'scroll',\n display: 'flex',\n flexWrap: 'nowrap',\n scrollSnapType: 'x mandatory',\n scrollSnapPointsY: `repeat(100%)`,\n msOverflowStyle: 'none' /* IE and Edge */,\n scrollbarWidth: 'none' /* Firefox */,\n /* Needed to work on iOS Safari */\n webkitOverflowScrolling: 'touch',\n msScrollSnapType: 'mandatory',\n scrollSnapPointsX: 'repeat(100%)',\n msScrollSnapPointsX: 'repeat(100%)',\n '&::-webkit-scrollbar': {\n display: 'none',\n },\n ...(showOverlay && {\n '&::before': {\n ...overlayCommonStyle,\n background: `linear-gradient(to right, ${gradientStop1}, ${gradientStop2})`,\n left: -1,\n opacity: isScrollAtStart ? 0 : 1,\n pointerEvents: 'none',\n },\n '&::after': {\n ...overlayCommonStyle,\n background: `linear-gradient(to left, ${gradientStop1}, ${gradientStop2})`,\n right: -1,\n opacity: isScrollAtEnd ? 0 : 1,\n pointerEvents: 'none',\n },\n }),\n };\n});\n\ntype CarouselBodyProps = {\n children: React.ReactNode;\n totalSlides: number;\n shouldAddStartEndSpacing?: boolean;\n idPrefix: string;\n scrollOverlayColor: CarouselProps['scrollOverlayColor'];\n isScrollAtStart: boolean;\n isScrollAtEnd: boolean;\n carouselItemAlignment: CarouselProps['carouselItemAlignment'];\n accessibilityLabel?: string;\n startEndMargin: number;\n};\n\nconst CarouselBody = React.forwardRef<HTMLDivElement, CarouselBodyProps>(\n (\n {\n children,\n totalSlides,\n shouldAddStartEndSpacing,\n idPrefix,\n scrollOverlayColor,\n isScrollAtStart,\n isScrollAtEnd,\n carouselItemAlignment,\n accessibilityLabel,\n startEndMargin,\n },\n ref,\n ) => {\n return (\n <CarouselContainer\n tabIndex={0}\n ref={ref}\n showOverlay={Boolean(scrollOverlayColor)}\n scrollOverlayColor={scrollOverlayColor}\n gap={{ base: 'spacing.4', m: 'spacing.5' }}\n isScrollAtStart={isScrollAtStart}\n isScrollAtEnd={isScrollAtEnd}\n alignItems={carouselItemAlignment}\n {...makeAccessible({\n role: 'group',\n roleDescription: 'carousel',\n label: accessibilityLabel,\n })}\n >\n {React.Children.map(children, (child, index) => {\n const shouldHaveStartSpacing = shouldAddStartEndSpacing && index === 0;\n const shouldHaveEndSpacing = shouldAddStartEndSpacing && index === totalSlides - 1;\n const carouselItemNode: React.ReactElement = React.cloneElement(\n child as React.ReactElement,\n {\n index,\n id: `${idPrefix}-carousel-item-${index}`,\n shouldHaveStartSpacing,\n shouldHaveEndSpacing,\n },\n );\n\n // Safari doesn't include the margin in the bounding box calculation\n // Thus have to add an additional box to the end of the carousel to ensure we can scroll past the last item\n // https://stackoverflow.com/questions/75509058/safari-does-not-include-margins-to-the-scroll-width\n if (shouldHaveEndSpacing) {\n return (\n <>\n {carouselItemNode}\n {<BaseBox minWidth={`${startEndMargin}px`} />}\n </>\n );\n }\n return carouselItemNode;\n })}\n </CarouselContainer>\n );\n },\n);\n\n/**\n * A custom hook which syncs an effect with a state\n * While ignoring the first render & only running the effect when the state changes\n */\nfunction useSyncUpdateEffect<T>(\n effect: React.EffectCallback,\n stateToSyncWith: T,\n deps: React.DependencyList,\n) {\n const isFirst = useFirstRender();\n const prevState = usePrevious<T>(stateToSyncWith);\n\n React.useEffect(() => {\n if (!isFirst) {\n // if the state is the same as the previous state\n // we don't want to run the effect\n if (prevState === stateToSyncWith) return;\n return effect();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [stateToSyncWith, ...deps]);\n}\n\nconst Carousel = ({\n autoPlay,\n visibleItems = 1,\n showIndicators = true,\n navigationButtonPosition = 'bottom',\n children,\n shouldAddStartEndSpacing = false,\n carouselItemWidth,\n scrollOverlayColor,\n accessibilityLabel,\n onChange,\n indicatorVariant = 'gray',\n navigationButtonVariant = 'filled',\n carouselItemAlignment = 'start',\n height,\n ...props\n}: CarouselProps): React.ReactElement => {\n const { platform } = useTheme();\n const [activeSlide, setActiveSlide] = React.useState(0);\n const [activeIndicator, setActiveIndicator] = React.useState(0);\n const [shouldPauseAutoplay, setShouldPauseAutoplay] = React.useState(false);\n const [startEndMargin, setStartEndMargin] = React.useState(0);\n const containerRef = React.useRef<HTMLDivElement>(null);\n const isMobile = platform === 'onMobile';\n const id = useId('carousel');\n\n useVerifyAllowedChildren({\n componentName: 'Carousel',\n allowedComponents: [componentIds.CarouselItem],\n children,\n });\n\n const [isScrollAtStart, setScrollStart] = React.useState(\n // on mobile we do not want to render the overlay\n isMobile ? true : !shouldAddStartEndSpacing,\n );\n const [isScrollAtEnd, setScrollEnd] = React.useState(isMobile);\n\n const isResponsive = visibleItems === 'autofit';\n let _visibleItems = visibleItems as 1 | 2 | 3;\n if (isMobile) {\n _visibleItems = 1;\n navigationButtonPosition = 'bottom';\n }\n if (isResponsive) {\n _visibleItems = 1;\n }\n\n // A special case where we hide the indicators when the carousel is responsive\n // Because indicators become useless since it's not aparent which carousel item is active\n // and how many carousel items are visible at a time\n if (isResponsive && !shouldAddStartEndSpacing && !isMobile) {\n showIndicators = false;\n }\n\n const isNavButtonsOnSide = !isResponsive && navigationButtonPosition === 'side';\n const shouldNavButtonsFloat = isResponsive && navigationButtonPosition === 'side';\n const totalNumberOfSlides = React.Children.count(children);\n const numberOfIndicators = Math.ceil(totalNumberOfSlides / _visibleItems);\n\n // hide next/prev button on reaching start/end when carousel is responsive\n // in non-responsive carousel we always show the next/prev buttons to allow looping\n const shouldShowPrevButton = isResponsive ? activeSlide !== 0 : true;\n const shouldShowNextButton = isResponsive ? activeSlide !== totalNumberOfSlides - 1 : true;\n\n // calculate the start/end margin so that we can\n // deduct that margin when scrolling to a carousel item with goToSlideIndex\n React.useLayoutEffect(() => {\n // Do not calculate if not needed\n if (!isResponsive && !shouldAddStartEndSpacing) return;\n if (!containerRef.current) return;\n\n const carouselItemId = getCarouselItemId(id, 0);\n const carouselItem = containerRef.current.querySelector(carouselItemId);\n if (!carouselItem) return;\n\n const carouselItemLeft = carouselItem.getBoundingClientRect().left ?? 0;\n const carouselContainerLeft = containerRef.current.getBoundingClientRect().left ?? 0;\n\n setStartEndMargin(carouselItemLeft - carouselContainerLeft);\n }, [id, isResponsive, shouldAddStartEndSpacing]);\n\n const goToSlideIndex = (slideIndex: number) => {\n if (!containerRef.current) return;\n\n const carouselItemId = getCarouselItemId(id, slideIndex * _visibleItems);\n const carouselItem = containerRef.current.querySelector(carouselItemId);\n if (!carouselItem) return;\n\n const carouselItemLeft =\n carouselItem.getBoundingClientRect().left -\n containerRef.current.getBoundingClientRect().left ?? 0;\n const left = containerRef.current.scrollLeft + carouselItemLeft;\n\n containerRef.current.scroll({\n left: left - startEndMargin,\n behavior: 'smooth',\n });\n setActiveSlide(slideIndex);\n setActiveIndicator(slideIndex);\n };\n\n const goToNextSlide = () => {\n let slideIndex = activeSlide + 1;\n if (slideIndex >= numberOfIndicators) {\n slideIndex = 0;\n }\n\n // an edge case where if carousel is responsive\n // and shouldHaveStartEndSpacing is set to false\n // there can be a case where numberOfIndicators is set to 10 but\n // visually there is 3 or 4 items, in those cases we want to check if we reached the\n // end of the scroll container if so we wrap around\n if (containerRef.current) {\n const container = containerRef.current;\n const scrollLeft = container.scrollLeft;\n const scrollWidth = container.scrollWidth - container.offsetWidth;\n if (scrollLeft === scrollWidth) {\n slideIndex = 0;\n }\n }\n\n goToSlideIndex(slideIndex);\n };\n\n const goToPreviousSlide = () => {\n let slideIndex = activeSlide - 1;\n if (activeSlide <= 0) {\n slideIndex = numberOfIndicators - 1;\n }\n goToSlideIndex(slideIndex);\n };\n\n // Scroll overlay gradient show/hide based on if scrolled to start or end\n React.useEffect(() => {\n // if shouldAddStartEndSpacing is true, we don't need to hide/show the overlay based on the scroll position\n // because the gap is there so it won't overlap with the card anyway\n if (shouldAddStartEndSpacing) return;\n if (isMobile) return;\n\n const carouselContainer = containerRef.current;\n if (!carouselContainer) return;\n\n const handleScroll = throttle(() => {\n const scrollWidth = carouselContainer?.scrollWidth - carouselContainer.offsetWidth;\n setScrollStart(carouselContainer?.scrollLeft === 0);\n setScrollEnd(carouselContainer?.scrollLeft === scrollWidth);\n }, 500);\n\n carouselContainer.addEventListener('scroll', handleScroll);\n\n return () => {\n carouselContainer?.removeEventListener('scroll', handleScroll);\n };\n }, [isMobile, shouldAddStartEndSpacing]);\n\n // Sync the indicators with scroll\n React.useEffect(() => {\n const carouselContainer = containerRef.current;\n if (!carouselContainer) return;\n\n const handleScroll = debounce(() => {\n // carousel bounding box\n const carouselBB = carouselContainer.getBoundingClientRect();\n // By default we check the far left side of the screen\n let xOffset = 0.1;\n // when the carousel is responsive & has spacing\n // we want to check the center of the screen\n if (isResponsive && shouldAddStartEndSpacing) {\n xOffset = 0.5;\n }\n\n const pointX = carouselBB.left + carouselBB.width * xOffset;\n const pointY = carouselBB.top + carouselBB.height * 0.5;\n const element = document.elementFromPoint(pointX, pointY);\n const carouselItem = element?.closest('[data-slide-index]');\n if (!carouselItem) {\n return;\n }\n\n const slideIndex = Number(carouselItem?.getAttribute('data-slide-index'));\n const goTo = Math.ceil(slideIndex / _visibleItems);\n setActiveIndicator(goTo);\n setActiveSlide(goTo);\n }, 50);\n\n carouselContainer.addEventListener('scroll', handleScroll);\n\n return () => {\n carouselContainer?.removeEventListener('scroll', handleScroll);\n };\n }, [_visibleItems, isMobile, isResponsive, shouldAddStartEndSpacing]);\n\n // auto play\n useInterval(\n () => {\n goToNextSlide();\n },\n {\n delay: CAROUSEL_AUTOPLAY_INTERVAL,\n // only enable if autoplay is true & user's intent isn't to interact with carousel\n enable: autoPlay && !shouldPauseAutoplay,\n },\n );\n\n const carouselContext = React.useMemo<CarouselContextProps>(() => {\n return {\n isResponsive,\n visibleItems: _visibleItems,\n carouselItemWidth,\n carouselContainerRef: containerRef,\n setActiveIndicator,\n carouselId: id,\n totalNumberOfSlides,\n activeSlide,\n startEndMargin,\n shouldAddStartEndSpacing,\n };\n }, [\n id,\n startEndMargin,\n isResponsive,\n _visibleItems,\n carouselItemWidth,\n totalNumberOfSlides,\n activeSlide,\n shouldAddStartEndSpacing,\n ]);\n\n useSyncUpdateEffect(\n () => {\n onChange?.(activeSlide);\n },\n activeSlide,\n [onChange],\n );\n\n return (\n <CarouselContext.Provider value={carouselContext}>\n <BaseBox\n {...metaAttribute({ name: MetaConstants.Carousel })}\n // stop autoplaying when any elements in carousel is in focus\n onFocus={(e: React.FocusEvent) => {\n if (!e.currentTarget.contains(e.relatedTarget)) {\n setShouldPauseAutoplay(true);\n }\n }}\n onBlur={(e: React.FocusEvent) => {\n if (!e.currentTarget.contains(e.relatedTarget)) {\n setShouldPauseAutoplay(false);\n }\n }}\n // stop autplay when user hover overs the carousel\n onMouseEnter={() => {\n setShouldPauseAutoplay(true);\n }}\n onMouseLeave={() => {\n setShouldPauseAutoplay(false);\n }}\n onTouchStart={() => {\n setShouldPauseAutoplay(true);\n }}\n onTouchEnd={() => {\n setShouldPauseAutoplay(false);\n }}\n display=\"flex\"\n alignItems=\"center\"\n flexDirection=\"column\"\n height={height}\n {...getStyledProps(props)}\n >\n <BaseBox\n width=\"100%\"\n position=\"relative\"\n display=\"flex\"\n alignItems=\"center\"\n gap=\"spacing.4\"\n flexDirection=\"row\"\n height=\"100%\"\n >\n {shouldShowPrevButton && shouldNavButtonsFloat ? (\n <BaseBox zIndex={2} position=\"absolute\" left=\"spacing.11\">\n <NavigationButton\n type=\"previous\"\n variant={navigationButtonVariant}\n onClick={goToPreviousSlide}\n />\n </BaseBox>\n ) : null}\n {isNavButtonsOnSide ? (\n <NavigationButton\n type=\"previous\"\n variant={navigationButtonVariant}\n onClick={goToPreviousSlide}\n />\n ) : null}\n <CarouselBody\n idPrefix={id}\n startEndMargin={startEndMargin}\n totalSlides={totalNumberOfSlides}\n shouldAddStartEndSpacing={shouldAddStartEndSpacing}\n scrollOverlayColor={scrollOverlayColor}\n isScrollAtStart={isScrollAtStart}\n isScrollAtEnd={isScrollAtEnd}\n ref={containerRef}\n carouselItemAlignment={carouselItemAlignment}\n accessibilityLabel={accessibilityLabel}\n >\n {children}\n </CarouselBody>\n {shouldShowNextButton && shouldNavButtonsFloat ? (\n <BaseBox zIndex={2} position=\"absolute\" right=\"spacing.11\">\n <NavigationButton\n onClick={goToNextSlide}\n type=\"next\"\n variant={navigationButtonVariant}\n />\n </BaseBox>\n ) : null}\n {isNavButtonsOnSide ? (\n <NavigationButton\n onClick={goToNextSlide}\n type=\"next\"\n variant={navigationButtonVariant}\n />\n ) : null}\n </BaseBox>\n <Controls\n totalSlides={numberOfIndicators}\n activeIndicator={activeIndicator}\n showIndicators={showIndicators}\n navigationButtonPosition={navigationButtonPosition}\n onIndicatorButtonClick={goToSlideIndex}\n onNextButtonClick={goToNextSlide}\n onPreviousButtonClick={goToPreviousSlide}\n indicatorVariant={indicatorVariant}\n navigationButtonVariant={navigationButtonVariant}\n />\n </BaseBox>\n </CarouselContext.Provider>\n );\n};\n\nexport { Carousel };\n"],"names":["Controls","_ref","showIndicators","navigationButtonPosition","activeIndicator","totalSlides","onIndicatorButtonClick","onNextButtonClick","onPreviousButtonClick","indicatorVariant","navigationButtonVariant","_jsxs","Box","marginTop","display","alignItems","gap","children","_jsx","NavigationButton","type","variant","onClick","Indicators","activeIndex","totalItems","_Fragment","CarouselContainer","styled","BaseBox","withConfig","displayName","componentId","_ref2","theme","showOverlay","scrollOverlayColor","isScrollAtStart","isScrollAtEnd","gradientStop1","getIn","colors","gradientStop2","overlayCommonStyle","content","position","top","width","height","transitionDuration","castWebType","makeMotionTime","motion","duration","gentle","transitionTimingFunction","easing","standard","effective","transitionProperty","_objectSpread","overflowX","flexWrap","scrollSnapType","scrollSnapPointsY","msOverflowStyle","scrollbarWidth","webkitOverflowScrolling","msScrollSnapType","scrollSnapPointsX","msScrollSnapPointsX","background","concat","left","opacity","pointerEvents","right","CarouselBody","React","forwardRef","_ref3","ref","shouldAddStartEndSpacing","idPrefix","carouselItemAlignment","accessibilityLabel","startEndMargin","tabIndex","Boolean","base","m","makeAccessible","role","roleDescription","label","Children","map","child","index","shouldHaveStartSpacing","shouldHaveEndSpacing","carouselItemNode","cloneElement","id","minWidth","useSyncUpdateEffect","effect","stateToSyncWith","deps","isFirst","useFirstRender","prevState","usePrevious","useEffect","_toConsumableArray","Carousel","_ref4","autoPlay","_ref4$visibleItems","visibleItems","_ref4$showIndicators","_ref4$navigationButto","_ref4$shouldAddStartE","carouselItemWidth","onChange","_ref4$indicatorVarian","_ref4$navigationButto2","_ref4$carouselItemAli","props","_objectWithoutProperties","_excluded","_useTheme","useTheme","platform","_React$useState","useState","_React$useState2","_slicedToArray","activeSlide","setActiveSlide","_React$useState3","_React$useState4","setActiveIndicator","_React$useState5","_React$useState6","shouldPauseAutoplay","setShouldPauseAutoplay","_React$useState7","_React$useState8","setStartEndMargin","containerRef","useRef","isMobile","useId","useVerifyAllowedChildren","componentName","allowedComponents","componentIds","CarouselItem","_React$useState9","_React$useState10","setScrollStart","_React$useState11","_React$useState12","setScrollEnd","isResponsive","_visibleItems","isNavButtonsOnSide","shouldNavButtonsFloat","totalNumberOfSlides","count","numberOfIndicators","Math","ceil","shouldShowPrevButton","shouldShowNextButton","useLayoutEffect","_carouselItem$getBoun","_containerRef$current","current","carouselItemId","getCarouselItemId","carouselItem","querySelector","carouselItemLeft","getBoundingClientRect","carouselContainerLeft","goToSlideIndex","slideIndex","_ref5","scrollLeft","scroll","behavior","goToNextSlide","container","scrollWidth","offsetWidth","goToPreviousSlide","carouselContainer","handleScroll","throttle","addEventListener","removeEventListener","debounce","carouselBB","xOffset","pointX","pointY","element","document","elementFromPoint","closest","Number","getAttribute","goTo","useInterval","delay","CAROUSEL_AUTOPLAY_INTERVAL","enable","carouselContext","useMemo","carouselContainerRef","carouselId","CarouselContext","Provider","value","metaAttribute","name","MetaConstants","onFocus","e","currentTarget","contains","relatedTarget","onBlur","onMouseEnter","onMouseLeave","onTouchStart","onTouchEnd","flexDirection","getStyledProps","zIndex"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Carousel.web.js","sources":["../../../../../../src/components/Carousel/Carousel.web.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unnecessary-type-assertion */\n/* eslint-disable @typescript-eslint/prefer-nullish-coalescing */\n/* eslint-disable consistent-return */\n/* eslint-disable @typescript-eslint/restrict-plus-operands */\n/* eslint-disable @typescript-eslint/explicit-function-return-type */\n/* eslint-disable react/jsx-no-useless-fragment */\nimport type { CSSObject } from 'styled-components';\nimport styled from 'styled-components';\nimport React from 'react';\nimport { Indicators } from './Indicators/Indicators';\nimport { NavigationButton } from './NavigationButton';\nimport type { CarouselProps } from './types';\nimport type { CarouselContextProps } from './CarouselContext';\nimport { CarouselContext } from './CarouselContext';\nimport { getCarouselItemId } from './utils';\nimport { CAROUSEL_AUTOPLAY_INTERVAL, componentIds } from './constants';\nimport getIn from '~utils/lodashButBetter/get';\nimport throttle from '~utils/lodashButBetter/throttle';\nimport debounce from '~utils/lodashButBetter/debounce';\nimport { Box } from '~components/Box';\nimport BaseBox from '~components/Box/BaseBox';\nimport { castWebType, makeMotionTime, useInterval } from '~utils';\nimport { useId } from '~utils/useId';\nimport { makeAccessible } from '~utils/makeAccessible';\nimport { metaAttribute, MetaConstants } from '~utils/metaAttribute';\nimport { useVerifyAllowedChildren } from '~utils/useVerifyAllowedChildren/useVerifyAllowedChildren';\nimport { useTheme } from '~components/BladeProvider';\nimport { getStyledProps } from '~components/Box/styledProps';\nimport { useControllableState } from '~utils/useControllable';\nimport { useIsomorphicLayoutEffect } from '~utils/useIsomorphicLayoutEffect';\nimport { useDidUpdate } from '~utils/useDidUpdate';\n\ntype ControlsProp = Required<\n Pick<\n CarouselProps,\n 'indicatorVariant' | 'showIndicators' | 'navigationButtonVariant' | 'navigationButtonPosition'\n >\n> & {\n activeIndicator: number;\n totalSlides: number;\n onIndicatorButtonClick: (index: number) => void;\n onNextButtonClick: () => void;\n onPreviousButtonClick: () => void;\n};\n\nconst Controls = ({\n showIndicators,\n navigationButtonPosition,\n activeIndicator,\n totalSlides,\n onIndicatorButtonClick,\n onNextButtonClick,\n onPreviousButtonClick,\n indicatorVariant,\n navigationButtonVariant,\n}: ControlsProp): React.ReactElement => {\n if (navigationButtonPosition === 'bottom') {\n return (\n <Box marginTop=\"spacing.7\" display=\"flex\" alignItems=\"center\" gap=\"spacing.4\">\n <NavigationButton\n type=\"previous\"\n variant={navigationButtonVariant}\n onClick={onPreviousButtonClick}\n />\n {showIndicators ? (\n <Indicators\n onClick={onIndicatorButtonClick}\n activeIndex={activeIndicator}\n totalItems={totalSlides}\n variant={indicatorVariant}\n />\n ) : null}\n <NavigationButton\n onClick={onNextButtonClick}\n type=\"next\"\n variant={navigationButtonVariant}\n />\n </Box>\n );\n }\n\n if (showIndicators && navigationButtonPosition === 'side') {\n return (\n <Box marginTop=\"spacing.7\">\n <Indicators\n onClick={onIndicatorButtonClick}\n activeIndex={activeIndicator}\n totalItems={totalSlides}\n variant={indicatorVariant}\n />\n </Box>\n );\n }\n\n return <></>;\n};\n\nconst CarouselContainer = styled(BaseBox)<{\n showOverlay?: boolean;\n scrollOverlayColor: CarouselProps['scrollOverlayColor'];\n isScrollAtStart: boolean;\n isScrollAtEnd: boolean;\n}>(({ theme, showOverlay, scrollOverlayColor, isScrollAtStart, isScrollAtEnd }) => {\n const gradientStop1: string = getIn(theme.colors, scrollOverlayColor!);\n const gradientStop2 = 'hsla(0, 0%, 100%, 0)';\n\n const overlayCommonStyle: CSSObject = {\n content: \"''\",\n position: 'absolute',\n top: 0,\n width: '100px',\n height: '100%',\n transitionDuration: castWebType(makeMotionTime(theme.motion.duration.gentle)),\n transitionTimingFunction: castWebType(theme.motion.easing.standard.effective),\n transitionProperty: 'opacity',\n };\n\n return {\n width: '100%',\n height: '100%',\n overflowX: 'scroll',\n display: 'flex',\n flexWrap: 'nowrap',\n scrollSnapType: 'x mandatory',\n scrollSnapPointsY: `repeat(100%)`,\n msOverflowStyle: 'none' /* IE and Edge */,\n scrollbarWidth: 'none' /* Firefox */,\n /* Needed to work on iOS Safari */\n webkitOverflowScrolling: 'touch',\n msScrollSnapType: 'mandatory',\n scrollSnapPointsX: 'repeat(100%)',\n msScrollSnapPointsX: 'repeat(100%)',\n '&::-webkit-scrollbar': {\n display: 'none',\n },\n ...(showOverlay && {\n '&::before': {\n ...overlayCommonStyle,\n background: `linear-gradient(to right, ${gradientStop1}, ${gradientStop2})`,\n left: -1,\n opacity: isScrollAtStart ? 0 : 1,\n pointerEvents: 'none',\n },\n '&::after': {\n ...overlayCommonStyle,\n background: `linear-gradient(to left, ${gradientStop1}, ${gradientStop2})`,\n right: -1,\n opacity: isScrollAtEnd ? 0 : 1,\n pointerEvents: 'none',\n },\n }),\n };\n});\n\ntype CarouselBodyProps = {\n children: React.ReactNode;\n totalSlides: number;\n shouldAddStartEndSpacing?: boolean;\n idPrefix: string;\n scrollOverlayColor: CarouselProps['scrollOverlayColor'];\n isScrollAtStart: boolean;\n isScrollAtEnd: boolean;\n carouselItemAlignment: CarouselProps['carouselItemAlignment'];\n accessibilityLabel?: string;\n startEndMargin: number;\n};\n\nconst CarouselBody = React.forwardRef<HTMLDivElement, CarouselBodyProps>(\n (\n {\n children,\n totalSlides,\n shouldAddStartEndSpacing,\n idPrefix,\n scrollOverlayColor,\n isScrollAtStart,\n isScrollAtEnd,\n carouselItemAlignment,\n accessibilityLabel,\n startEndMargin,\n },\n ref,\n ) => {\n return (\n <CarouselContainer\n tabIndex={0}\n ref={ref}\n showOverlay={Boolean(scrollOverlayColor)}\n scrollOverlayColor={scrollOverlayColor}\n gap={{ base: 'spacing.4', m: 'spacing.5' }}\n isScrollAtStart={isScrollAtStart}\n isScrollAtEnd={isScrollAtEnd}\n alignItems={carouselItemAlignment}\n {...makeAccessible({\n role: 'group',\n roleDescription: 'carousel',\n label: accessibilityLabel,\n })}\n >\n {React.Children.map(children, (child, index) => {\n const shouldHaveStartSpacing = shouldAddStartEndSpacing && index === 0;\n const shouldHaveEndSpacing = shouldAddStartEndSpacing && index === totalSlides - 1;\n const carouselItemNode: React.ReactElement = React.cloneElement(\n child as React.ReactElement,\n {\n index,\n id: `${idPrefix}-carousel-item-${index}`,\n shouldHaveStartSpacing,\n shouldHaveEndSpacing,\n },\n );\n\n // Safari doesn't include the margin in the bounding box calculation\n // Thus have to add an additional box to the end of the carousel to ensure we can scroll past the last item\n // https://stackoverflow.com/questions/75509058/safari-does-not-include-margins-to-the-scroll-width\n if (shouldHaveEndSpacing) {\n return (\n <>\n {carouselItemNode}\n {<BaseBox minWidth={`${startEndMargin}px`} />}\n </>\n );\n }\n return carouselItemNode;\n })}\n </CarouselContainer>\n );\n },\n);\n\nconst Carousel = ({\n autoPlay,\n visibleItems = 1,\n showIndicators = true,\n navigationButtonPosition = 'bottom',\n children,\n shouldAddStartEndSpacing = false,\n carouselItemWidth,\n scrollOverlayColor,\n accessibilityLabel,\n onChange,\n indicatorVariant = 'gray',\n navigationButtonVariant = 'filled',\n carouselItemAlignment = 'start',\n height,\n defaultActiveSlide,\n activeSlide: activeSlideProp,\n ...props\n}: CarouselProps): React.ReactElement => {\n const { platform } = useTheme();\n const [activeIndicator, setActiveIndicator] = React.useState(0);\n const [activeSlide, setActiveSlide] = useControllableState({\n defaultValue: defaultActiveSlide ?? 0,\n value: activeSlideProp,\n onChange: (value) => {\n onChange?.(value);\n },\n });\n const [shouldPauseAutoplay, setShouldPauseAutoplay] = React.useState(false);\n const [startEndMargin, setStartEndMargin] = React.useState(0);\n const containerRef = React.useRef<HTMLDivElement>(null);\n const isMobile = platform === 'onMobile';\n const id = useId();\n const carouselId = `carousel-${id}`;\n\n useVerifyAllowedChildren({\n componentName: 'Carousel',\n allowedComponents: [componentIds.CarouselItem],\n children,\n });\n\n const [isScrollAtStart, setScrollStart] = React.useState(\n // on mobile we do not want to render the overlay\n isMobile ? true : !shouldAddStartEndSpacing,\n );\n const [isScrollAtEnd, setScrollEnd] = React.useState(isMobile);\n\n const isResponsive = visibleItems === 'autofit';\n let _visibleItems = visibleItems as 1 | 2 | 3;\n if (isMobile) {\n _visibleItems = 1;\n navigationButtonPosition = 'bottom';\n }\n if (isResponsive) {\n _visibleItems = 1;\n }\n\n // A special case where we hide the indicators when the carousel is responsive\n // Because indicators become useless since it's not aparent which carousel item is active\n // and how many carousel items are visible at a time\n if (isResponsive && !shouldAddStartEndSpacing && !isMobile) {\n showIndicators = false;\n }\n\n const isNavButtonsOnSide = !isResponsive && navigationButtonPosition === 'side';\n const shouldNavButtonsFloat = isResponsive && navigationButtonPosition === 'side';\n const totalNumberOfSlides = React.Children.count(children);\n const numberOfIndicators = Math.ceil(totalNumberOfSlides / _visibleItems);\n\n // hide next/prev button on reaching start/end when carousel is responsive\n // in non-responsive carousel we always show the next/prev buttons to allow looping\n const shouldShowPrevButton = isResponsive ? activeSlide !== 0 : true;\n const shouldShowNextButton = isResponsive ? activeSlide !== totalNumberOfSlides - 1 : true;\n\n // calculate the start/end margin so that we can\n // deduct that margin when scrolling to a carousel item with goToSlideIndex\n useIsomorphicLayoutEffect(() => {\n // Do not calculate if not needed\n if (!isResponsive && !shouldAddStartEndSpacing) return;\n if (!containerRef.current) return;\n\n const carouselItemId = getCarouselItemId(carouselId, 0);\n const carouselItem = containerRef.current.querySelector(carouselItemId);\n if (!carouselItem) return;\n\n const carouselItemLeft = carouselItem.getBoundingClientRect().left ?? 0;\n const carouselContainerLeft = containerRef.current.getBoundingClientRect().left ?? 0;\n\n setStartEndMargin(carouselItemLeft - carouselContainerLeft);\n }, [carouselId, isResponsive, shouldAddStartEndSpacing]);\n\n const scrollToSlide = (slideIndex: number, shouldAnimate = true) => {\n if (!containerRef.current) return;\n\n const carouselItemId = getCarouselItemId(carouselId, slideIndex * _visibleItems);\n const carouselItem = containerRef.current.querySelector(carouselItemId);\n if (!carouselItem) return;\n\n const carouselItemLeft =\n carouselItem.getBoundingClientRect().left -\n containerRef.current.getBoundingClientRect().left ?? 0;\n const left = containerRef.current.scrollLeft + carouselItemLeft;\n\n containerRef.current.scroll({\n left: left - startEndMargin,\n behavior: shouldAnimate ? 'smooth' : 'auto',\n });\n };\n\n const goToSlideIndex = (slideIndex: number) => {\n setActiveSlide(() => slideIndex);\n setActiveIndicator(slideIndex);\n };\n\n const goToNextSlide = () => {\n let slideIndex = activeSlide + 1;\n if (slideIndex >= numberOfIndicators) {\n slideIndex = 0;\n }\n\n // an edge case where if carousel is responsive\n // and shouldHaveStartEndSpacing is set to false\n // there can be a case where numberOfIndicators is set to 10 but\n // visually there is 3 or 4 items, in those cases we want to check if we reached the\n // end of the scroll container if so we wrap around\n if (containerRef.current) {\n const container = containerRef.current;\n const scrollLeft = container.scrollLeft;\n const scrollWidth = container.scrollWidth - container.offsetWidth;\n if (scrollLeft === scrollWidth) {\n slideIndex = 0;\n }\n }\n\n goToSlideIndex(slideIndex);\n };\n\n const goToPreviousSlide = () => {\n let slideIndex = activeSlide - 1;\n if (activeSlide <= 0) {\n slideIndex = numberOfIndicators - 1;\n }\n goToSlideIndex(slideIndex);\n };\n\n // Scroll overlay gradient show/hide based on if scrolled to start or end\n React.useEffect(() => {\n // if shouldAddStartEndSpacing is true, we don't need to hide/show the overlay based on the scroll position\n // because the gap is there so it won't overlap with the card anyway\n if (shouldAddStartEndSpacing) return;\n if (isMobile) return;\n\n const carouselContainer = containerRef.current;\n if (!carouselContainer) return;\n\n const handleScroll = throttle(() => {\n const scrollWidth = carouselContainer?.scrollWidth - carouselContainer.offsetWidth;\n setScrollStart(carouselContainer?.scrollLeft === 0);\n setScrollEnd(carouselContainer?.scrollLeft === scrollWidth);\n }, 500);\n\n carouselContainer.addEventListener('scroll', handleScroll);\n\n return () => {\n carouselContainer?.removeEventListener('scroll', handleScroll);\n };\n }, [isMobile, shouldAddStartEndSpacing]);\n\n // Sync the indicators with scroll\n React.useEffect(() => {\n const carouselContainer = containerRef.current;\n if (!carouselContainer) return;\n\n const handleScroll = debounce(() => {\n // carousel bounding box\n const carouselBB = carouselContainer.getBoundingClientRect();\n // By default we check the far left side of the screen\n let xOffset = 0.1;\n // when the carousel is responsive & has spacing\n // we want to check the center of the screen\n if (isResponsive && shouldAddStartEndSpacing) {\n xOffset = 0.5;\n }\n\n const pointX = carouselBB.left + carouselBB.width * xOffset;\n const pointY = carouselBB.top + carouselBB.height * 0.5;\n const element = document.elementFromPoint(pointX, pointY);\n const carouselItem = element?.closest('[data-slide-index]');\n if (!carouselItem) {\n return;\n }\n\n const slideIndex = Number(carouselItem?.getAttribute('data-slide-index'));\n const goTo = Math.ceil(slideIndex / _visibleItems);\n setActiveSlide(() => goTo);\n setActiveIndicator(goTo);\n }, 50);\n\n carouselContainer.addEventListener('scroll', handleScroll);\n\n return () => {\n carouselContainer?.removeEventListener('scroll', handleScroll);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [_visibleItems, isMobile, isResponsive, shouldAddStartEndSpacing]);\n\n // auto play\n useInterval(\n () => {\n goToNextSlide();\n },\n {\n delay: CAROUSEL_AUTOPLAY_INTERVAL,\n // only enable if autoplay is true & user's intent isn't to interact with carousel\n enable: autoPlay && !shouldPauseAutoplay,\n },\n );\n\n // set initial active slide on mount\n useIsomorphicLayoutEffect(() => {\n if (!id) return;\n goToSlideIndex(activeSlide);\n scrollToSlide(activeSlide, false);\n }, [id]);\n\n // Scroll the carousel to the active slide\n useDidUpdate(() => {\n scrollToSlide(activeSlide);\n }, [activeSlide]);\n\n const carouselContext = React.useMemo<CarouselContextProps>(() => {\n return {\n isResponsive,\n visibleItems: _visibleItems,\n carouselItemWidth,\n carouselContainerRef: containerRef,\n setActiveIndicator,\n carouselId,\n totalNumberOfSlides,\n activeSlide,\n startEndMargin,\n shouldAddStartEndSpacing,\n };\n }, [\n carouselId,\n startEndMargin,\n isResponsive,\n _visibleItems,\n carouselItemWidth,\n totalNumberOfSlides,\n activeSlide,\n shouldAddStartEndSpacing,\n ]);\n\n return (\n <CarouselContext.Provider value={carouselContext}>\n <BaseBox\n {...metaAttribute({ name: MetaConstants.Carousel })}\n // stop autoplaying when any elements in carousel is in focus\n onFocus={(e: React.FocusEvent) => {\n if (!e.currentTarget.contains(e.relatedTarget)) {\n setShouldPauseAutoplay(true);\n }\n }}\n onBlur={(e: React.FocusEvent) => {\n if (!e.currentTarget.contains(e.relatedTarget)) {\n setShouldPauseAutoplay(false);\n }\n }}\n // stop autplay when user hover overs the carousel\n onMouseEnter={() => {\n setShouldPauseAutoplay(true);\n }}\n onMouseLeave={() => {\n setShouldPauseAutoplay(false);\n }}\n onTouchStart={() => {\n setShouldPauseAutoplay(true);\n }}\n onTouchEnd={() => {\n setShouldPauseAutoplay(false);\n }}\n display=\"flex\"\n alignItems=\"center\"\n flexDirection=\"column\"\n height={height}\n {...getStyledProps(props)}\n >\n <BaseBox\n width=\"100%\"\n position=\"relative\"\n display=\"flex\"\n alignItems=\"center\"\n gap=\"spacing.4\"\n flexDirection=\"row\"\n height=\"100%\"\n >\n {shouldShowPrevButton && shouldNavButtonsFloat ? (\n <BaseBox zIndex={2} position=\"absolute\" left=\"spacing.11\">\n <NavigationButton\n type=\"previous\"\n variant={navigationButtonVariant}\n onClick={goToPreviousSlide}\n />\n </BaseBox>\n ) : null}\n {isNavButtonsOnSide ? (\n <NavigationButton\n type=\"previous\"\n variant={navigationButtonVariant}\n onClick={goToPreviousSlide}\n />\n ) : null}\n <CarouselBody\n idPrefix={carouselId}\n startEndMargin={startEndMargin}\n totalSlides={totalNumberOfSlides}\n shouldAddStartEndSpacing={shouldAddStartEndSpacing}\n scrollOverlayColor={scrollOverlayColor}\n isScrollAtStart={isScrollAtStart}\n isScrollAtEnd={isScrollAtEnd}\n ref={containerRef}\n carouselItemAlignment={carouselItemAlignment}\n accessibilityLabel={accessibilityLabel}\n >\n {children}\n </CarouselBody>\n {shouldShowNextButton && shouldNavButtonsFloat ? (\n <BaseBox zIndex={2} position=\"absolute\" right=\"spacing.11\">\n <NavigationButton\n onClick={goToNextSlide}\n type=\"next\"\n variant={navigationButtonVariant}\n />\n </BaseBox>\n ) : null}\n {isNavButtonsOnSide ? (\n <NavigationButton\n onClick={goToNextSlide}\n type=\"next\"\n variant={navigationButtonVariant}\n />\n ) : null}\n </BaseBox>\n <Controls\n totalSlides={numberOfIndicators}\n activeIndicator={activeIndicator}\n showIndicators={showIndicators}\n navigationButtonPosition={navigationButtonPosition}\n onIndicatorButtonClick={goToSlideIndex}\n onNextButtonClick={goToNextSlide}\n onPreviousButtonClick={goToPreviousSlide}\n indicatorVariant={indicatorVariant}\n navigationButtonVariant={navigationButtonVariant}\n />\n </BaseBox>\n </CarouselContext.Provider>\n );\n};\n\nexport { Carousel };\n"],"names":["Controls","_ref","showIndicators","navigationButtonPosition","activeIndicator","totalSlides","onIndicatorButtonClick","onNextButtonClick","onPreviousButtonClick","indicatorVariant","navigationButtonVariant","_jsxs","Box","marginTop","display","alignItems","gap","children","_jsx","NavigationButton","type","variant","onClick","Indicators","activeIndex","totalItems","_Fragment","CarouselContainer","styled","BaseBox","withConfig","displayName","componentId","_ref2","theme","showOverlay","scrollOverlayColor","isScrollAtStart","isScrollAtEnd","gradientStop1","getIn","colors","gradientStop2","overlayCommonStyle","content","position","top","width","height","transitionDuration","castWebType","makeMotionTime","motion","duration","gentle","transitionTimingFunction","easing","standard","effective","transitionProperty","_objectSpread","overflowX","flexWrap","scrollSnapType","scrollSnapPointsY","msOverflowStyle","scrollbarWidth","webkitOverflowScrolling","msScrollSnapType","scrollSnapPointsX","msScrollSnapPointsX","background","concat","left","opacity","pointerEvents","right","CarouselBody","React","forwardRef","_ref3","ref","shouldAddStartEndSpacing","idPrefix","carouselItemAlignment","accessibilityLabel","startEndMargin","tabIndex","Boolean","base","m","makeAccessible","role","roleDescription","label","Children","map","child","index","shouldHaveStartSpacing","shouldHaveEndSpacing","carouselItemNode","cloneElement","id","minWidth","Carousel","_ref4","autoPlay","_ref4$visibleItems","visibleItems","_ref4$showIndicators","_ref4$navigationButto","_ref4$shouldAddStartE","carouselItemWidth","onChange","_ref4$indicatorVarian","_ref4$navigationButto2","_ref4$carouselItemAli","defaultActiveSlide","activeSlideProp","activeSlide","props","_objectWithoutProperties","_excluded","_useTheme","useTheme","platform","_React$useState","useState","_React$useState2","_slicedToArray","setActiveIndicator","_useControllableState","useControllableState","defaultValue","value","_useControllableState2","setActiveSlide","_React$useState3","_React$useState4","shouldPauseAutoplay","setShouldPauseAutoplay","_React$useState5","_React$useState6","setStartEndMargin","containerRef","useRef","isMobile","useId","carouselId","useVerifyAllowedChildren","componentName","allowedComponents","componentIds","CarouselItem","_React$useState7","_React$useState8","setScrollStart","_React$useState9","_React$useState10","setScrollEnd","isResponsive","_visibleItems","isNavButtonsOnSide","shouldNavButtonsFloat","totalNumberOfSlides","count","numberOfIndicators","Math","ceil","shouldShowPrevButton","shouldShowNextButton","useIsomorphicLayoutEffect","_carouselItem$getBoun","_containerRef$current","current","carouselItemId","getCarouselItemId","carouselItem","querySelector","carouselItemLeft","getBoundingClientRect","carouselContainerLeft","scrollToSlide","slideIndex","_ref5","shouldAnimate","arguments","length","undefined","scrollLeft","scroll","behavior","goToSlideIndex","goToNextSlide","container","scrollWidth","offsetWidth","goToPreviousSlide","useEffect","carouselContainer","handleScroll","throttle","addEventListener","removeEventListener","debounce","carouselBB","xOffset","pointX","pointY","element","document","elementFromPoint","closest","Number","getAttribute","goTo","useInterval","delay","CAROUSEL_AUTOPLAY_INTERVAL","enable","useDidUpdate","carouselContext","useMemo","carouselContainerRef","CarouselContext","Provider","metaAttribute","name","MetaConstants","onFocus","e","currentTarget","contains","relatedTarget","onBlur","onMouseEnter","onMouseLeave","onTouchStart","onTouchEnd","flexDirection","getStyledProps","zIndex"],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { useRef, useInsertionEffect, useCallback } from 'react';
|
|
2
|
+
|
|
3
|
+
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* This hook is user-land implementation of the experimental `useEffectEvent` hook.
|
|
7
|
+
* React docs: https://react.dev/learn/separating-events-from-effects#declaring-an-effect-event
|
|
8
|
+
*
|
|
9
|
+
* This hook is useful when you want to use a callback function inside a useEffect while keeping it "fresh" but you don't want to add it to the dependency array.
|
|
10
|
+
*/
|
|
11
|
+
function useCallbackRef(callback) {
|
|
12
|
+
var deps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
13
|
+
var callbackRef = useRef(function () {
|
|
14
|
+
throw new Error('Cannot call an event handler while rendering.');
|
|
15
|
+
});
|
|
16
|
+
useInsertionEffect(function () {
|
|
17
|
+
callbackRef.current = callback;
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
21
|
+
return useCallback(function () {
|
|
22
|
+
var _callbackRef$current;
|
|
23
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
24
|
+
args[_key] = arguments[_key];
|
|
25
|
+
}
|
|
26
|
+
return (_callbackRef$current = callbackRef.current) === null || _callbackRef$current === void 0 ? void 0 : _callbackRef$current.call.apply(_callbackRef$current, [callbackRef].concat(args));
|
|
27
|
+
}, deps);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export { useCallbackRef };
|
|
31
|
+
//# sourceMappingURL=useCallbackRef.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCallbackRef.js","sources":["../../../../../src/utils/useCallbackRef.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/explicit-function-return-type */\nimport { useCallback, useInsertionEffect, useRef } from 'react';\n\n/**\n * This hook is user-land implementation of the experimental `useEffectEvent` hook.\n * React docs: https://react.dev/learn/separating-events-from-effects#declaring-an-effect-event\n *\n * This hook is useful when you want to use a callback function inside a useEffect while keeping it \"fresh\" but you don't want to add it to the dependency array.\n */\nfunction useCallbackRef<Args extends unknown[], Return>(\n callback: ((...args: Args) => Return) | undefined,\n deps: React.DependencyList = [],\n) {\n const callbackRef = useRef<typeof callback>(() => {\n throw new Error('Cannot call an event handler while rendering.');\n });\n\n useInsertionEffect(() => {\n callbackRef.current = callback;\n });\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return useCallback((...args: Args) => callbackRef.current?.(...args), deps);\n}\n\nexport { useCallbackRef };\n"],"names":["useCallbackRef","callback","deps","arguments","length","undefined","callbackRef","useRef","Error","useInsertionEffect","current","useCallback","_callbackRef$current","_len","args","Array","_key","call","apply","concat"],"mappings":";;AAAA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,cAAcA,CACrBC,QAAiD,EAEjD;AAAA,EAAA,IADAC,IAA0B,GAAAC,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE,CAAA;AAE/B,EAAA,IAAMG,WAAW,GAAGC,MAAM,CAAkB,YAAM;AAChD,IAAA,MAAM,IAAIC,KAAK,CAAC,+CAA+C,CAAC,CAAA;AAClE,GAAC,CAAC,CAAA;AAEFC,EAAAA,kBAAkB,CAAC,YAAM;IACvBH,WAAW,CAACI,OAAO,GAAGT,QAAQ,CAAA;AAChC,GAAC,CAAC,CAAA;;AAEF;AACA,EAAA,OAAOU,WAAW,CAAC,YAAA;AAAA,IAAA,IAAAC,oBAAA,CAAA;AAAA,IAAA,KAAA,IAAAC,IAAA,GAAAV,SAAA,CAAAC,MAAA,EAAIU,IAAI,GAAAC,IAAAA,KAAA,CAAAF,IAAA,GAAAG,IAAA,GAAA,CAAA,EAAAA,IAAA,GAAAH,IAAA,EAAAG,IAAA,EAAA,EAAA;AAAJF,MAAAA,IAAI,CAAAE,IAAA,CAAAb,GAAAA,SAAA,CAAAa,IAAA,CAAA,CAAA;AAAA,KAAA;IAAA,OAAAJ,CAAAA,oBAAA,GAAWN,WAAW,CAACI,OAAO,MAAAE,IAAAA,IAAAA,oBAAA,uBAAnBA,oBAAA,CAAAK,IAAA,CAAAC,KAAA,CAAAN,oBAAA,EAAA,CAAAN,WAAW,CAAAa,CAAAA,MAAA,CAAcL,IAAI,CAAC,CAAA,CAAA;AAAA,GAAA,EAAEZ,IAAI,CAAC,CAAA;AAC7E;;;;"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
|
|
2
2
|
import * as React from 'react';
|
|
3
|
+
import { useCallbackRef } from './useCallbackRef.js';
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* React hook for using controlling component state.
|
|
@@ -14,7 +15,13 @@ import * as React from 'react';
|
|
|
14
15
|
function useControllableState(props) {
|
|
15
16
|
var valueProp = props.value,
|
|
16
17
|
defaultValue = props.defaultValue,
|
|
17
|
-
onChange = props.onChange
|
|
18
|
+
onChange = props.onChange,
|
|
19
|
+
_props$shouldUpdate = props.shouldUpdate,
|
|
20
|
+
shouldUpdate = _props$shouldUpdate === void 0 ? function (prev, next) {
|
|
21
|
+
return prev !== next;
|
|
22
|
+
} : _props$shouldUpdate;
|
|
23
|
+
var onChangeProp = useCallbackRef(onChange);
|
|
24
|
+
var shouldUpdateProp = useCallbackRef(shouldUpdate);
|
|
18
25
|
var _React$useState = React.useState(defaultValue),
|
|
19
26
|
_React$useState2 = _slicedToArray(_React$useState, 2),
|
|
20
27
|
valueState = _React$useState2[0],
|
|
@@ -22,14 +29,15 @@ function useControllableState(props) {
|
|
|
22
29
|
var _React$useRef = React.useRef(valueProp !== undefined),
|
|
23
30
|
isControlled = _React$useRef.current;
|
|
24
31
|
var value = isControlled && typeof valueProp !== 'undefined' ? valueProp : valueState;
|
|
25
|
-
var updateValue =
|
|
32
|
+
var updateValue = useCallbackRef(function (next) {
|
|
26
33
|
var skipUpdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
27
34
|
var nextValue = next(value);
|
|
28
35
|
if (!isControlled) setValue(nextValue);
|
|
29
|
-
// We don't want to call onChange if skipUpdate is true
|
|
36
|
+
// We don't want to call onChange if skipUpdate is true or if the value is not changed
|
|
37
|
+
if (!shouldUpdateProp(value, nextValue)) return;
|
|
30
38
|
if (skipUpdate) return;
|
|
31
|
-
|
|
32
|
-
}, [
|
|
39
|
+
onChangeProp === null || onChangeProp === void 0 ? void 0 : onChangeProp(nextValue);
|
|
40
|
+
}, [isControlled, onChangeProp, value, shouldUpdateProp]);
|
|
33
41
|
return [value, updateValue];
|
|
34
42
|
}
|
|
35
43
|
|