@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.
@@ -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=React.useCallback(function(next){var skipUpdate=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;var nextValue=next(value);if(!isControlled)setValue(nextValue);if(skipUpdate)return;onChange==null?void 0:onChange(nextValue);},[onChange,value]);return [value,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 */\nexport function useControllableState<T>(props: UseControllableStateProps<T>) {\n const { value: valueProp, defaultValue, onChange } = props;\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> = React.useCallback(\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\n if (skipUpdate) return;\n onChange?.(nextValue);\n },\n [onChange, value],\n );\n\n return [value, updateValue] as [T, ControllableStateSetter<T>];\n}\n\nexport type { ControllableStateSetter };\n"],"names":["useControllableState","props","valueProp","value","defaultValue","onChange","_React$useState","React","useState","_React$useState2","_slicedToArray","valueState","setValue","_React$useRef","useRef","undefined","isControlled","current","updateValue","useCallback","next","skipUpdate","arguments","length","nextValue"],"mappings":";;;AAyCO,SAASA,oBAAoBA,CAAIC,KAAmC,CAAE,CAC3E,IAAeC,SAAS,CAA6BD,KAAK,CAAlDE,KAAK,CAAaC,YAAY,CAAeH,KAAK,CAAhCG,YAAY,CAAEC,QAAQ,CAAKJ,KAAK,CAAlBI,QAAQ,CAEhD,IAAAC,eAAA,CAA+BC,KAAK,CAACC,QAAQ,CAACJ,YAAiB,CAAC,CAAAK,gBAAA,CAAAC,cAAA,CAAAJ,eAAA,CAAzDK,CAAAA,CAAAA,CAAAA,UAAU,CAAAF,gBAAA,CAAA,CAAA,CAAA,CAAEG,QAAQ,CAAAH,gBAAA,IAC3B,IAAAI,aAAA,CAAkCN,KAAK,CAACO,MAAM,CAACZ,SAAS,GAAKa,SAAS,CAAC,CAAtDC,YAAY,CAAAH,aAAA,CAArBI,OAAO,CACf,IAAMd,KAAK,CAAGa,YAAY,EAAI,OAAOd,SAAS,GAAK,WAAW,CAAGA,SAAS,CAAGS,UAAU,CAEvF,IAAMO,WAAuC,CAAGX,KAAK,CAACY,WAAW,CAC/D,SAACC,IAAI,CAAyB,CAAA,IAAvBC,UAAU,CAAAC,SAAA,CAAAC,MAAA,CAAAD,CAAAA,EAAAA,SAAA,CAAAP,CAAAA,CAAAA,GAAAA,SAAA,CAAAO,SAAA,CAAA,CAAA,CAAA,CAAG,KAAK,CACvB,IAAME,SAAS,CAAGJ,IAAI,CAACjB,KAAK,CAAC,CAC7B,GAAI,CAACa,YAAY,CAAEJ,QAAQ,CAACY,SAAS,CAAC,CAEtC,GAAIH,UAAU,CAAE,OAChBhB,QAAQ,EAARA,IAAAA,CAAAA,KAAAA,CAAAA,CAAAA,QAAQ,CAAGmB,SAAS,CAAC,CACvB,CAAC,CACD,CAACnB,QAAQ,CAAEF,KAAK,CAClB,CAAC,CAED,OAAO,CAACA,KAAK,CAAEe,WAAW,CAAC,CAC7B;;;;"}
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
- onChange = _ref4.onChange,
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
- activeSlide = _React$useState2[0],
240
- setActiveSlide = _React$useState2[1];
241
- var _React$useState3 = React__default.useState(0),
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
- activeIndicator = _React$useState4[0],
244
- setActiveIndicator = _React$useState4[1];
245
- var _React$useState5 = React__default.useState(false),
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
- shouldPauseAutoplay = _React$useState6[0],
248
- setShouldPauseAutoplay = _React$useState6[1];
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('carousel');
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$useState9 = React__default.useState(
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
- isScrollAtStart = _React$useState10[0],
266
- setScrollStart = _React$useState10[1];
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
- React__default.useLayoutEffect(function () {
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(id, 0);
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
- }, [id, isResponsive, shouldAddStartEndSpacing]);
311
- var goToSlideIndex = function goToSlideIndex(slideIndex) {
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(id, slideIndex * _visibleItems);
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: id,
432
+ carouselId: carouselId,
422
433
  totalNumberOfSlides: totalNumberOfSlides,
423
434
  activeSlide: activeSlide,
424
435
  startEndMargin: startEndMargin,
425
436
  shouldAddStartEndSpacing: shouldAddStartEndSpacing
426
437
  };
427
- }, [id, startEndMargin, isResponsive, _visibleItems, carouselItemWidth, totalNumberOfSlides, activeSlide, shouldAddStartEndSpacing]);
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: id,
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 = React.useCallback(function (next) {
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
- onChange === null || onChange === void 0 ? void 0 : onChange(nextValue);
32
- }, [onChange, value]);
39
+ onChangeProp === null || onChangeProp === void 0 ? void 0 : onChangeProp(nextValue);
40
+ }, [isControlled, onChangeProp, value, shouldUpdateProp]);
33
41
  return [value, updateValue];
34
42
  }
35
43