@lumx/react 2.2.8 → 2.2.9

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.
@@ -2,7 +2,7 @@ import { b as _objectWithoutProperties, c as _extends, a as _defineProperty } fr
2
2
  import { Theme, Size } from './components.js';
3
3
  import React, { forwardRef, useCallback } from 'react';
4
4
  import { g as getRootClassName, c as classnames, h as handleBasicClasses, o as onEnterPressed } from './getRootClassName.js';
5
- import { I as Icon, p as mdiArrowUp, q as mdiArrowDown } from './Icon2.js';
5
+ import { I as Icon, r as mdiArrowUp, s as mdiArrowDown } from './Icon2.js';
6
6
  import isFunction from 'lodash/isFunction';
7
7
 
8
8
  /**
@@ -2,7 +2,7 @@ import { d as _slicedToArray, b as _objectWithoutProperties, _ as _objectSpread2
2
2
  import { AspectRatio, Size, Theme } from './components.js';
3
3
  import React, { useState, useEffect, useMemo, forwardRef } from 'react';
4
4
  import { g as getRootClassName, c as classnames, h as handleBasicClasses } from './getRootClassName.js';
5
- import { I as Icon, r as mdiImageBroken } from './Icon2.js';
5
+ import { I as Icon, t as mdiImageBroken } from './Icon2.js';
6
6
  import { m as mergeRefs } from './mergeRefs.js';
7
7
 
8
8
  function getState(img, event) {
@@ -301,6 +301,7 @@ var CSS_PREFIX = 'lumx';
301
301
 
302
302
  var DIALOG_TRANSITION_DURATION = 400;
303
303
  var NOTIFICATION_TRANSITION_DURATION = 200;
304
+ var SLIDESHOW_TRANSITION_DURATION = 5000;
304
305
  /**
305
306
  * Delay on hover after which we open or close the tooltip.
306
307
  * Only applies to devices supporting pointer hover.
@@ -342,5 +343,5 @@ function getRootClassName(componentName, subComponent) {
342
343
  return formattedClassName;
343
344
  }
344
345
 
345
- export { CSS_PREFIX as C, DIALOG_TRANSITION_DURATION as D, NOTIFICATION_TRANSITION_DURATION as N, TOOLTIP_LONG_PRESS_DELAY as T, getBasicClass as a, onButtonPressed as b, classnames as c, createCommonjsModule as d, detectHorizontalSwipe as e, onEscapePressed as f, getRootClassName as g, handleBasicClasses as h, TOOLTIP_HOVER_DELAY as i, onEnterPressed as o };
346
+ export { CSS_PREFIX as C, DIALOG_TRANSITION_DURATION as D, NOTIFICATION_TRANSITION_DURATION as N, SLIDESHOW_TRANSITION_DURATION as S, TOOLTIP_LONG_PRESS_DELAY as T, getBasicClass as a, onButtonPressed as b, classnames as c, createCommonjsModule as d, detectHorizontalSwipe as e, onEscapePressed as f, getRootClassName as g, handleBasicClasses as h, TOOLTIP_HOVER_DELAY as i, onEnterPressed as o };
346
347
  //# sourceMappingURL=getRootClassName.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getRootClassName.js","sources":["../../../../../node_modules/classnames/index.js","../../../../lumx-core/src/js/utils.ts","../../../../lumx-core/src/js/constants/index.ts","../../../src/utils/getRootClassName.ts"],"sourcesContent":["/*!\n Copyright (c) 2017 Jed Watson.\n Licensed under the MIT License (MIT), see\n http://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg) && arg.length) {\n\t\t\t\tvar inner = classNames.apply(null, arg);\n\t\t\t\tif (inner) {\n\t\t\t\t\tclasses.push(inner);\n\t\t\t\t}\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tfor (var key in arg) {\n\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","import classNames from 'classnames';\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport React from 'react';\n\nimport isBoolean from 'lodash/isBoolean';\nimport isEmpty from 'lodash/isEmpty';\nimport kebabCase from 'lodash/kebabCase';\nimport noop from 'lodash/noop';\n\n/**\n * Enhance isEmpty method to also works with numbers.\n *\n * @param value The value to check.\n * @return Whether the input value is empty or != 0.\n */\nconst _isEmpty = (value: any) => {\n if (typeof value === 'number') {\n return value === 0;\n }\n\n return isEmpty(value);\n};\n\n/**\n * Get the basic CSS class for the given type.\n *\n * @param prefix The class name prefix for the generated CSS class.\n * @param type The type of CSS class we want to generate (e.g.: 'color', 'variant', ...).\n * @param value The value of the type of the CSS class (e.g.: 'primary', 'button', ...).\n * @return The basic CSS class.\n */\nexport function getBasicClass({\n prefix,\n type,\n value,\n}: {\n prefix: string;\n type: string;\n value: string | number | boolean | undefined;\n}): string {\n if (isBoolean(value)) {\n if (!value) {\n // False value should not return a class.\n return '';\n }\n const booleanPrefixes = ['has', 'is'];\n\n if (booleanPrefixes.some((booleanPrefix) => type.toString().startsWith(booleanPrefix))) {\n return `${prefix}--${kebabCase(type)}`;\n }\n\n return `${prefix}--is-${kebabCase(type)}`;\n }\n\n return `${prefix}--${kebabCase(type)}-${value}`;\n}\n\n/**\n * Return all basic LumX CSS classes which are available for every components.\n *\n * @see {@link /src/components/index.d.ts} for the possible values of each parameter.\n *\n * @param prefix The class name prefix for the generated CSS class.\n * @param props All the other props you want to generate a class.\n * The rule of thumb: the key is the name of the prop in the class, the value a string that will\n * be used in the classname to represent the value of the given prop.\n * @return All LumX basic CSS classes.\n */\nexport function handleBasicClasses({ prefix, ...props }: { prefix: string; [prop: string]: any }): string {\n const otherClasses: any = {};\n if (!isEmpty(props)) {\n Object.keys(props).forEach((prop) => {\n otherClasses[getBasicClass({ prefix, type: prop, value: props[prop] })] = isBoolean(props[prop])\n ? props[prop]\n : !_isEmpty(props[prop]);\n });\n }\n\n return classNames(prefix, otherClasses);\n}\n\ndeclare type SwipeDirection = 'none' | 'up' | 'down' | 'left' | 'right';\n\n/**\n * Detects swipe direction.\n * Credits: http://javascriptkit.com/javatutors/touchevents2.shtml.\n *\n * @deprecated use `detectHorizontalSwipe` instead if possible (better performance and does not block scroll)\n * @param touchSurface Element that will hold touch events.\n * @param handleSwipe Callback function.\n * @return Function to remove listeners.\n */\nexport function detectSwipe(touchSurface: Element, handleSwipe: (direction: SwipeDirection) => void = noop) {\n let distX: number;\n let distY: number;\n let startX: number;\n let startY: number;\n let direction: SwipeDirection;\n // Required min distance traveled to be considered swipe.\n const threshold = 150;\n // Maximum distance allowed at the same time in perpendicular direction.\n const restraint = 100;\n // Maximum time allowed to travel that distance.\n const allowedTime = 300;\n let elapsedTime: number;\n let startTime: number;\n\n const onTouchStart = (evt: Event) => {\n const [touch] = Array.from((evt as TouchEvent).changedTouches);\n direction = 'none';\n // Const dist = 0;\n startX = touch.pageX;\n startY = touch.pageY;\n // Record time when finger first makes contact with surface.\n startTime = new Date().getTime();\n evt.preventDefault();\n };\n\n const onTouchMove = (evt: Event) => {\n // Prevent scrolling when inside DIV.\n evt.preventDefault();\n };\n\n const onTouchEnd = (evt: Event) => {\n const [touch] = Array.from((evt as TouchEvent).changedTouches);\n // Get horizontal dist traveled by finger while in contact with surface.\n distX = touch.pageX - startX;\n // Get vertical dist traveled by finger while in contact with surface.\n distY = touch.pageY - startY;\n // Get time elapsed.\n elapsedTime = new Date().getTime() - startTime;\n if (elapsedTime <= allowedTime) {\n // First condition for awipe met.\n if (Math.abs(distX) >= threshold && Math.abs(distY) <= restraint) {\n // 2nd condition for horizontal swipe met.\n // If dist traveled is negative, it indicates left swipe.\n direction = distX < 0 ? 'left' : 'right';\n } else if (Math.abs(distY) >= threshold && Math.abs(distX) <= restraint) {\n // 2nd condition for vertical swipe met.\n // If dist traveled is negative, it indicates up swipe.\n direction = distY < 0 ? 'up' : 'down';\n }\n }\n handleSwipe(direction);\n evt.preventDefault();\n };\n\n touchSurface.addEventListener('touchstart', onTouchStart, false);\n touchSurface.addEventListener('touchmove', onTouchMove, false);\n touchSurface.addEventListener('touchend', onTouchEnd, false);\n\n return () => {\n touchSurface.removeEventListener('touchstart', onTouchStart, false);\n touchSurface.removeEventListener('touchmove', onTouchMove, false);\n touchSurface.removeEventListener('touchend', onTouchEnd, false);\n };\n}\n\n/**\n * Checks whether or not the browser support passive events.\n * @see https://github.com/Modernizr/Modernizr/blob/6d56d814b9682843313b16060adb25a58d83a317/feature-detects/dom/passiveeventlisteners.js\n */\nfunction isPassiveEventAvailable() {\n let supportsPassiveOption = false;\n try {\n const opts = Object.defineProperty({}, 'passive', {\n get() {\n supportsPassiveOption = true;\n },\n });\n window.addEventListener('testPassiveEventSupport', noop, opts);\n window.removeEventListener('testPassiveEventSupport', noop, opts);\n } catch (e) {\n // ignored\n }\n return supportsPassiveOption;\n}\n\n/**\n * Detects horizontal swipe direction without blocking the browser scroll using passive event.\n * @see http://javascriptkit.com/javatutors/touchevents2.shtml\n * @see https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n */\nexport function detectHorizontalSwipe(touchSurface: Element, handleSwipe: (direction: 'right' | 'left') => void) {\n let startX: number;\n let startY: number;\n // Required min distance traveled to be considered swipe.\n const threshold = 150;\n // Maximum distance allowed at the same time in perpendicular direction.\n const restraint = 150;\n // Maximum time allowed to travel that distance.\n const allowedTime = 300;\n let elapsedTime: number;\n let startTime: number;\n let finished: boolean;\n\n const onTouchStart = (evt: Event) => {\n const [touch] = Array.from((evt as TouchEvent).changedTouches);\n startX = touch.pageX;\n startY = touch.pageY;\n // Record time when finger first makes contact with surface.\n startTime = new Date().getTime();\n finished = false;\n };\n\n const onTouchMove = (evt: Event) => {\n if (finished) {\n return;\n }\n\n elapsedTime = new Date().getTime() - startTime;\n if (elapsedTime > allowedTime) {\n // Touch swipe too long to be considered.\n return;\n }\n\n const [touch] = Array.from((evt as TouchEvent).changedTouches);\n // Get horizontal dist traveled by finger while in contact with surface.\n const distX = touch.pageX - startX;\n // Get vertical dist traveled by finger while in contact with surface.\n const distY = touch.pageY - startY;\n\n if (!(Math.abs(distX) >= threshold && Math.abs(distY) <= restraint)) {\n // Swipe is not horizontal.\n return;\n }\n // Swipe direction.\n const direction = distX < 0 ? 'left' : 'right';\n\n handleSwipe(direction);\n finished = true;\n };\n\n // Activate passive event if possible for better scrolling performance.\n const eventOptions: any = isPassiveEventAvailable() ? { passive: true } : false;\n touchSurface.addEventListener('touchstart', onTouchStart, eventOptions);\n touchSurface.addEventListener('touchmove', onTouchMove, eventOptions);\n\n return () => {\n touchSurface.removeEventListener('touchstart', onTouchStart, eventOptions);\n touchSurface.removeEventListener('touchmove', onTouchMove, eventOptions);\n };\n}\n\ntype KeyboardEventHandler<E extends KeyboardEvent | React.KeyboardEvent> = (event: E) => void;\n\n/**\n * Make sure the pressed key is the enter key before calling the callback.\n *\n * @param handler The handler to call on enter/return press.\n * @return The decorated function.\n */\nexport function onEnterPressed<E extends KeyboardEvent | React.KeyboardEvent>(\n handler: KeyboardEventHandler<E>,\n): KeyboardEventHandler<E> {\n return (evt) => {\n if (evt.key !== 'Enter') {\n return;\n }\n handler(evt);\n };\n}\n\n/**\n * Make sure the pressed key is the escape key before calling the callback.\n *\n * @param handler The handler to call on enter/return press.\n * @return The decorated function.\n */\nexport function onEscapePressed<E extends KeyboardEvent | React.KeyboardEvent>(\n handler: KeyboardEventHandler<E>,\n): KeyboardEventHandler<E> {\n return (evt) => {\n if (evt.key !== 'Escape') {\n return;\n }\n handler(evt);\n };\n}\n\n/**\n * Handle button key pressed (Enter + Space).\n *\n * @param handler The handler to call.\n * @return The decorated function.\n */\nexport function onButtonPressed<E extends KeyboardEvent | React.KeyboardEvent>(\n handler: KeyboardEventHandler<E>,\n): KeyboardEventHandler<E> {\n return (evt) => {\n if (evt.key !== 'Enter' && evt.key !== ' ') {\n return;\n }\n handler(evt);\n };\n}\n","/**\n * The prefix to use for the CSS classes.\n */\nexport const CSS_PREFIX = 'lumx';\n\n/**\n * Key codes.\n */\nexport * from './keycodes';\n\n/**\n * Animation duration constants. Take into consideration that if you change one of these variables,\n * you need to update their scss counterpart as well\n */\nexport const DIALOG_TRANSITION_DURATION = 400;\nexport const NOTIFICATION_TRANSITION_DURATION = 200;\n\n/**\n * Delay on hover after which we open or close the tooltip.\n * Only applies to devices supporting pointer hover.\n */\nexport const TOOLTIP_HOVER_DELAY = {\n open: 500,\n close: 0,\n};\n\n/**\n * Delay on long press after which we open or close the tooltip.\n * Only applies to devices not supporting pointer hover.\n */\nexport const TOOLTIP_LONG_PRESS_DELAY = {\n open: 250,\n close: 3000,\n};\n","import { CSS_PREFIX } from '@lumx/react/constants';\n\nimport kebabCase from 'lodash/kebabCase';\n\n// See https://regex101.com/r/YjS1uI/3\nconst LAST_PART_CLASSNAME = /^(.*)-(.+)$/gi;\n\n/**\n * Get the name of the root CSS class of a component based on its name.\n *\n * @param componentName The name of the component. This name should contains the component prefix and be\n * written in PascalCase.\n * @param subComponent Whether the current component is a sub component, if true, define the class according\n * to BEM standards.\n * @return The name of the root CSS class. This classname include the CSS classname prefix and is written in\n * lower-snake-case.\n */\nexport function getRootClassName(componentName: string, subComponent?: boolean): string {\n const formattedClassName = `${CSS_PREFIX}-${kebabCase(componentName)}`;\n\n if (subComponent) {\n return formattedClassName.replace(LAST_PART_CLASSNAME, '$1__$2');\n }\n return formattedClassName;\n}\n"],"names":["_isEmpty","value","isEmpty","getBasicClass","prefix","type","isBoolean","booleanPrefixes","some","booleanPrefix","toString","startsWith","kebabCase","handleBasicClasses","props","otherClasses","Object","keys","forEach","prop","classNames","isPassiveEventAvailable","supportsPassiveOption","opts","defineProperty","get","window","addEventListener","noop","removeEventListener","e","detectHorizontalSwipe","touchSurface","handleSwipe","startX","startY","threshold","restraint","allowedTime","elapsedTime","startTime","finished","onTouchStart","evt","Array","from","changedTouches","touch","pageX","pageY","Date","getTime","onTouchMove","distX","distY","Math","abs","direction","eventOptions","passive","onEnterPressed","handler","key","onEscapePressed","onButtonPressed","CSS_PREFIX","DIALOG_TRANSITION_DURATION","NOTIFICATION_TRANSITION_DURATION","TOOLTIP_HOVER_DELAY","open","close","TOOLTIP_LONG_PRESS_DELAY","LAST_PART_CLASSNAME","getRootClassName","componentName","subComponent","formattedClassName","replace"],"mappings":"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"}
1
+ {"version":3,"file":"getRootClassName.js","sources":["../../../../../node_modules/classnames/index.js","../../../../lumx-core/src/js/utils.ts","../../../../lumx-core/src/js/constants/index.ts","../../../src/utils/getRootClassName.ts"],"sourcesContent":["/*!\n Copyright (c) 2017 Jed Watson.\n Licensed under the MIT License (MIT), see\n http://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg) && arg.length) {\n\t\t\t\tvar inner = classNames.apply(null, arg);\n\t\t\t\tif (inner) {\n\t\t\t\t\tclasses.push(inner);\n\t\t\t\t}\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tfor (var key in arg) {\n\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","import classNames from 'classnames';\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport React from 'react';\n\nimport isBoolean from 'lodash/isBoolean';\nimport isEmpty from 'lodash/isEmpty';\nimport kebabCase from 'lodash/kebabCase';\nimport noop from 'lodash/noop';\n\n/**\n * Enhance isEmpty method to also works with numbers.\n *\n * @param value The value to check.\n * @return Whether the input value is empty or != 0.\n */\nconst _isEmpty = (value: any) => {\n if (typeof value === 'number') {\n return value === 0;\n }\n\n return isEmpty(value);\n};\n\n/**\n * Get the basic CSS class for the given type.\n *\n * @param prefix The class name prefix for the generated CSS class.\n * @param type The type of CSS class we want to generate (e.g.: 'color', 'variant', ...).\n * @param value The value of the type of the CSS class (e.g.: 'primary', 'button', ...).\n * @return The basic CSS class.\n */\nexport function getBasicClass({\n prefix,\n type,\n value,\n}: {\n prefix: string;\n type: string;\n value: string | number | boolean | undefined;\n}): string {\n if (isBoolean(value)) {\n if (!value) {\n // False value should not return a class.\n return '';\n }\n const booleanPrefixes = ['has', 'is'];\n\n if (booleanPrefixes.some((booleanPrefix) => type.toString().startsWith(booleanPrefix))) {\n return `${prefix}--${kebabCase(type)}`;\n }\n\n return `${prefix}--is-${kebabCase(type)}`;\n }\n\n return `${prefix}--${kebabCase(type)}-${value}`;\n}\n\n/**\n * Return all basic LumX CSS classes which are available for every components.\n *\n * @see {@link /src/components/index.d.ts} for the possible values of each parameter.\n *\n * @param prefix The class name prefix for the generated CSS class.\n * @param props All the other props you want to generate a class.\n * The rule of thumb: the key is the name of the prop in the class, the value a string that will\n * be used in the classname to represent the value of the given prop.\n * @return All LumX basic CSS classes.\n */\nexport function handleBasicClasses({ prefix, ...props }: { prefix: string; [prop: string]: any }): string {\n const otherClasses: any = {};\n if (!isEmpty(props)) {\n Object.keys(props).forEach((prop) => {\n otherClasses[getBasicClass({ prefix, type: prop, value: props[prop] })] = isBoolean(props[prop])\n ? props[prop]\n : !_isEmpty(props[prop]);\n });\n }\n\n return classNames(prefix, otherClasses);\n}\n\ndeclare type SwipeDirection = 'none' | 'up' | 'down' | 'left' | 'right';\n\n/**\n * Detects swipe direction.\n * Credits: http://javascriptkit.com/javatutors/touchevents2.shtml.\n *\n * @deprecated use `detectHorizontalSwipe` instead if possible (better performance and does not block scroll)\n * @param touchSurface Element that will hold touch events.\n * @param handleSwipe Callback function.\n * @return Function to remove listeners.\n */\nexport function detectSwipe(touchSurface: Element, handleSwipe: (direction: SwipeDirection) => void = noop) {\n let distX: number;\n let distY: number;\n let startX: number;\n let startY: number;\n let direction: SwipeDirection;\n // Required min distance traveled to be considered swipe.\n const threshold = 150;\n // Maximum distance allowed at the same time in perpendicular direction.\n const restraint = 100;\n // Maximum time allowed to travel that distance.\n const allowedTime = 300;\n let elapsedTime: number;\n let startTime: number;\n\n const onTouchStart = (evt: Event) => {\n const [touch] = Array.from((evt as TouchEvent).changedTouches);\n direction = 'none';\n // Const dist = 0;\n startX = touch.pageX;\n startY = touch.pageY;\n // Record time when finger first makes contact with surface.\n startTime = new Date().getTime();\n evt.preventDefault();\n };\n\n const onTouchMove = (evt: Event) => {\n // Prevent scrolling when inside DIV.\n evt.preventDefault();\n };\n\n const onTouchEnd = (evt: Event) => {\n const [touch] = Array.from((evt as TouchEvent).changedTouches);\n // Get horizontal dist traveled by finger while in contact with surface.\n distX = touch.pageX - startX;\n // Get vertical dist traveled by finger while in contact with surface.\n distY = touch.pageY - startY;\n // Get time elapsed.\n elapsedTime = new Date().getTime() - startTime;\n if (elapsedTime <= allowedTime) {\n // First condition for awipe met.\n if (Math.abs(distX) >= threshold && Math.abs(distY) <= restraint) {\n // 2nd condition for horizontal swipe met.\n // If dist traveled is negative, it indicates left swipe.\n direction = distX < 0 ? 'left' : 'right';\n } else if (Math.abs(distY) >= threshold && Math.abs(distX) <= restraint) {\n // 2nd condition for vertical swipe met.\n // If dist traveled is negative, it indicates up swipe.\n direction = distY < 0 ? 'up' : 'down';\n }\n }\n handleSwipe(direction);\n evt.preventDefault();\n };\n\n touchSurface.addEventListener('touchstart', onTouchStart, false);\n touchSurface.addEventListener('touchmove', onTouchMove, false);\n touchSurface.addEventListener('touchend', onTouchEnd, false);\n\n return () => {\n touchSurface.removeEventListener('touchstart', onTouchStart, false);\n touchSurface.removeEventListener('touchmove', onTouchMove, false);\n touchSurface.removeEventListener('touchend', onTouchEnd, false);\n };\n}\n\n/**\n * Checks whether or not the browser support passive events.\n * @see https://github.com/Modernizr/Modernizr/blob/6d56d814b9682843313b16060adb25a58d83a317/feature-detects/dom/passiveeventlisteners.js\n */\nfunction isPassiveEventAvailable() {\n let supportsPassiveOption = false;\n try {\n const opts = Object.defineProperty({}, 'passive', {\n get() {\n supportsPassiveOption = true;\n },\n });\n window.addEventListener('testPassiveEventSupport', noop, opts);\n window.removeEventListener('testPassiveEventSupport', noop, opts);\n } catch (e) {\n // ignored\n }\n return supportsPassiveOption;\n}\n\n/**\n * Detects horizontal swipe direction without blocking the browser scroll using passive event.\n * @see http://javascriptkit.com/javatutors/touchevents2.shtml\n * @see https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n */\nexport function detectHorizontalSwipe(touchSurface: Element, handleSwipe: (direction: 'right' | 'left') => void) {\n let startX: number;\n let startY: number;\n // Required min distance traveled to be considered swipe.\n const threshold = 150;\n // Maximum distance allowed at the same time in perpendicular direction.\n const restraint = 150;\n // Maximum time allowed to travel that distance.\n const allowedTime = 300;\n let elapsedTime: number;\n let startTime: number;\n let finished: boolean;\n\n const onTouchStart = (evt: Event) => {\n const [touch] = Array.from((evt as TouchEvent).changedTouches);\n startX = touch.pageX;\n startY = touch.pageY;\n // Record time when finger first makes contact with surface.\n startTime = new Date().getTime();\n finished = false;\n };\n\n const onTouchMove = (evt: Event) => {\n if (finished) {\n return;\n }\n\n elapsedTime = new Date().getTime() - startTime;\n if (elapsedTime > allowedTime) {\n // Touch swipe too long to be considered.\n return;\n }\n\n const [touch] = Array.from((evt as TouchEvent).changedTouches);\n // Get horizontal dist traveled by finger while in contact with surface.\n const distX = touch.pageX - startX;\n // Get vertical dist traveled by finger while in contact with surface.\n const distY = touch.pageY - startY;\n\n if (!(Math.abs(distX) >= threshold && Math.abs(distY) <= restraint)) {\n // Swipe is not horizontal.\n return;\n }\n // Swipe direction.\n const direction = distX < 0 ? 'left' : 'right';\n\n handleSwipe(direction);\n finished = true;\n };\n\n // Activate passive event if possible for better scrolling performance.\n const eventOptions: any = isPassiveEventAvailable() ? { passive: true } : false;\n touchSurface.addEventListener('touchstart', onTouchStart, eventOptions);\n touchSurface.addEventListener('touchmove', onTouchMove, eventOptions);\n\n return () => {\n touchSurface.removeEventListener('touchstart', onTouchStart, eventOptions);\n touchSurface.removeEventListener('touchmove', onTouchMove, eventOptions);\n };\n}\n\ntype KeyboardEventHandler<E extends KeyboardEvent | React.KeyboardEvent> = (event: E) => void;\n\n/**\n * Make sure the pressed key is the enter key before calling the callback.\n *\n * @param handler The handler to call on enter/return press.\n * @return The decorated function.\n */\nexport function onEnterPressed<E extends KeyboardEvent | React.KeyboardEvent>(\n handler: KeyboardEventHandler<E>,\n): KeyboardEventHandler<E> {\n return (evt) => {\n if (evt.key !== 'Enter') {\n return;\n }\n handler(evt);\n };\n}\n\n/**\n * Make sure the pressed key is the escape key before calling the callback.\n *\n * @param handler The handler to call on enter/return press.\n * @return The decorated function.\n */\nexport function onEscapePressed<E extends KeyboardEvent | React.KeyboardEvent>(\n handler: KeyboardEventHandler<E>,\n): KeyboardEventHandler<E> {\n return (evt) => {\n if (evt.key !== 'Escape') {\n return;\n }\n handler(evt);\n };\n}\n\n/**\n * Handle button key pressed (Enter + Space).\n *\n * @param handler The handler to call.\n * @return The decorated function.\n */\nexport function onButtonPressed<E extends KeyboardEvent | React.KeyboardEvent>(\n handler: KeyboardEventHandler<E>,\n): KeyboardEventHandler<E> {\n return (evt) => {\n if (evt.key !== 'Enter' && evt.key !== ' ') {\n return;\n }\n handler(evt);\n };\n}\n","/**\n * The prefix to use for the CSS classes.\n */\nexport const CSS_PREFIX = 'lumx';\n\n/**\n * Key codes.\n */\nexport * from './keycodes';\n\n/**\n * Animation duration constants. Take into consideration that if you change one of these variables,\n * you need to update their scss counterpart as well\n */\nexport const DIALOG_TRANSITION_DURATION = 400;\nexport const NOTIFICATION_TRANSITION_DURATION = 200;\nexport const SLIDESHOW_TRANSITION_DURATION = 5000;\n\n/**\n * Delay on hover after which we open or close the tooltip.\n * Only applies to devices supporting pointer hover.\n */\nexport const TOOLTIP_HOVER_DELAY = {\n open: 500,\n close: 0,\n};\n\n/**\n * Delay on long press after which we open or close the tooltip.\n * Only applies to devices not supporting pointer hover.\n */\nexport const TOOLTIP_LONG_PRESS_DELAY = {\n open: 250,\n close: 3000,\n};\n","import { CSS_PREFIX } from '@lumx/react/constants';\n\nimport kebabCase from 'lodash/kebabCase';\n\n// See https://regex101.com/r/YjS1uI/3\nconst LAST_PART_CLASSNAME = /^(.*)-(.+)$/gi;\n\n/**\n * Get the name of the root CSS class of a component based on its name.\n *\n * @param componentName The name of the component. This name should contains the component prefix and be\n * written in PascalCase.\n * @param subComponent Whether the current component is a sub component, if true, define the class according\n * to BEM standards.\n * @return The name of the root CSS class. This classname include the CSS classname prefix and is written in\n * lower-snake-case.\n */\nexport function getRootClassName(componentName: string, subComponent?: boolean): string {\n const formattedClassName = `${CSS_PREFIX}-${kebabCase(componentName)}`;\n\n if (subComponent) {\n return formattedClassName.replace(LAST_PART_CLASSNAME, '$1__$2');\n }\n return formattedClassName;\n}\n"],"names":["_isEmpty","value","isEmpty","getBasicClass","prefix","type","isBoolean","booleanPrefixes","some","booleanPrefix","toString","startsWith","kebabCase","handleBasicClasses","props","otherClasses","Object","keys","forEach","prop","classNames","isPassiveEventAvailable","supportsPassiveOption","opts","defineProperty","get","window","addEventListener","noop","removeEventListener","e","detectHorizontalSwipe","touchSurface","handleSwipe","startX","startY","threshold","restraint","allowedTime","elapsedTime","startTime","finished","onTouchStart","evt","Array","from","changedTouches","touch","pageX","pageY","Date","getTime","onTouchMove","distX","distY","Math","abs","direction","eventOptions","passive","onEnterPressed","handler","key","onEscapePressed","onButtonPressed","CSS_PREFIX","DIALOG_TRANSITION_DURATION","NOTIFICATION_TRANSITION_DURATION","SLIDESHOW_TRANSITION_DURATION","TOOLTIP_HOVER_DELAY","open","close","TOOLTIP_LONG_PRESS_DELAY","LAST_PART_CLASSNAME","getRootClassName","componentName","subComponent","formattedClassName","replace"],"mappings":"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"}
@@ -20,7 +20,8 @@ import 'lodash/range';
20
20
  import 'react-dom';
21
21
  import './ClickAwayProvider.js';
22
22
  import 'lodash/pull';
23
- export { S as Slideshow, b as SlideshowControls, a as SlideshowItem } from './SlideshowControls.js';
23
+ import './useDelayedVisibility.js';
24
+ export { c as Slides, S as Slideshow, b as SlideshowControls, a as SlideshowItem } from './Slides.js';
24
25
  import 'lodash/uniqueId';
25
26
  import './Tooltip2.js';
26
27
  //# sourceMappingURL=slideshow.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"slideshow.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"slideshow.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;"}
package/esm/index.js CHANGED
@@ -74,7 +74,7 @@ export { a as Select, c as SelectMultiple, b as SelectMultipleField, S as Select
74
74
  export { S as SideNavigation, a as SideNavigationItem } from './_internal/SideNavigationItem.js';
75
75
  export { S as SkeletonCircle, b as SkeletonRectangle, a as SkeletonRectangleVariant, c as SkeletonTypography } from './_internal/SkeletonTypography.js';
76
76
  export { S as Slider, c as clamp } from './_internal/Slider2.js';
77
- export { S as Slideshow, b as SlideshowControls, a as SlideshowItem } from './_internal/SlideshowControls.js';
77
+ export { c as Slides, S as Slideshow, b as SlideshowControls, a as SlideshowItem } from './_internal/Slides.js';
78
78
  import 'lodash/uniqueId';
79
79
  export { S as Switch } from './_internal/Switch2.js';
80
80
  export { T as Table, a as TableBody, d as TableCell, c as TableCellVariant, e as TableHeader, f as TableRow, b as ThOrder } from './_internal/TableRow.js';
package/package.json CHANGED
@@ -7,8 +7,8 @@
7
7
  },
8
8
  "dependencies": {
9
9
  "@juggle/resize-observer": "^3.2.0",
10
- "@lumx/core": "^2.2.8",
11
- "@lumx/icons": "^2.2.8",
10
+ "@lumx/core": "^2.2.9",
11
+ "@lumx/icons": "^2.2.9",
12
12
  "@popperjs/core": "^2.5.4",
13
13
  "body-scroll-lock": "^3.1.5",
14
14
  "classnames": "^2.2.6",
@@ -120,6 +120,6 @@
120
120
  "build:storybook": "cd storybook && ./build"
121
121
  },
122
122
  "sideEffects": false,
123
- "version": "2.2.8",
124
- "gitHead": "9c235120d0b26f0d06544dcbf161558a858a205c"
123
+ "version": "2.2.9",
124
+ "gitHead": "daa2a61c4e71e345e22394776859ec111bedc916"
125
125
  }
@@ -0,0 +1,115 @@
1
+ import React, { CSSProperties, forwardRef } from 'react';
2
+
3
+ import classNames from 'classnames';
4
+
5
+ import { FULL_WIDTH_PERCENT } from '@lumx/react/components/slideshow/constants';
6
+ import { Comp, GenericProps, getRootClassName, handleBasicClasses } from '@lumx/react/utils';
7
+ import { Theme } from '@lumx/react';
8
+
9
+ export interface SlidesProps extends GenericProps {
10
+ /** current slide active */
11
+ activeIndex?: number;
12
+ /** slides id to be added to the wrapper */
13
+ id?: string;
14
+ /** custom classname */
15
+ className?: string;
16
+ /** custom theme */
17
+ theme?: Theme;
18
+ /** Whether the automatic rotation of the slideshow is enabled or not. */
19
+ autoPlay?: boolean;
20
+ /** Whether the image has to fill its container height or not. */
21
+ fillHeight?: boolean;
22
+ /** Number of slides to group together. */
23
+ groupBy?: number;
24
+ /** whether the slides are currently playing or not */
25
+ isAutoPlaying?: boolean;
26
+ /** id to be passed in into the slides */
27
+ slidesId?: string;
28
+ /** callback to change whether the slideshow is playing or not */
29
+ setIsAutoPlaying: (isAutoPlaying: boolean) => void;
30
+ /** starting visible index */
31
+ startIndexVisible: number;
32
+ /** ending visible index */
33
+ endIndexVisible: number;
34
+ /** component to be rendered after the slides */
35
+ afterSlides?: React.ReactNode;
36
+ }
37
+
38
+ /**
39
+ * Component display name.
40
+ */
41
+ const COMPONENT_NAME = 'Slideshow';
42
+
43
+ /**
44
+ * Component default class name and class prefix.
45
+ */
46
+ const CLASSNAME = getRootClassName(COMPONENT_NAME);
47
+
48
+ /**
49
+ * Slides component.
50
+ *
51
+ * @param props Component props.
52
+ * @param ref Component ref.
53
+ * @return React element.
54
+ */
55
+ export const Slides: Comp<any, HTMLDivElement> = forwardRef((props, ref) => {
56
+ const {
57
+ activeIndex,
58
+ id,
59
+ className,
60
+ theme,
61
+ fillHeight,
62
+ groupBy,
63
+ isAutoPlaying,
64
+ autoPlay,
65
+ slidesId,
66
+ setIsAutoPlaying,
67
+ startIndexVisible,
68
+ endIndexVisible,
69
+ children,
70
+ afterSlides,
71
+ ...forwardedProps
72
+ } = props;
73
+ // Inline style of wrapper element.
74
+ const wrapperStyle: CSSProperties = { transform: `translateX(-${FULL_WIDTH_PERCENT * activeIndex}%)` };
75
+
76
+ return (
77
+ <section
78
+ id={id}
79
+ ref={ref}
80
+ {...forwardedProps}
81
+ className={classNames(className, handleBasicClasses({ prefix: CLASSNAME, theme }), {
82
+ [`${CLASSNAME}--fill-height`]: fillHeight,
83
+ [`${CLASSNAME}--group-by-${groupBy}`]: Boolean(groupBy),
84
+ })}
85
+ aria-roledescription="carousel"
86
+ >
87
+ <div
88
+ id={slidesId}
89
+ className={`${CLASSNAME}__slides`}
90
+ onMouseEnter={() => setIsAutoPlaying(false)}
91
+ onMouseLeave={() => setIsAutoPlaying(Boolean(autoPlay))}
92
+ aria-live={isAutoPlaying ? 'off' : 'polite'}
93
+ >
94
+ <div className={`${CLASSNAME}__wrapper`} style={wrapperStyle}>
95
+ {React.Children.map(children, (child: React.ReactNode, index: number) => {
96
+ if (React.isValidElement(child)) {
97
+ const isCurrentlyVisible = index >= startIndexVisible && index < endIndexVisible;
98
+
99
+ return React.cloneElement(child, {
100
+ isCurrentlyVisible,
101
+ });
102
+ }
103
+
104
+ return null;
105
+ })}
106
+ </div>
107
+ </div>
108
+
109
+ {afterSlides}
110
+ </section>
111
+ );
112
+ });
113
+
114
+ Slides.displayName = COMPONENT_NAME;
115
+ Slides.className = CLASSNAME;
@@ -40,6 +40,40 @@ export const Simple = ({ theme }: any) => {
40
40
  );
41
41
  };
42
42
 
43
+ export const SimpleWithAutoPlay = ({ theme }: any) => {
44
+ const images = thumbnailsKnob(6);
45
+ const activeIndex = number('Active index', 0);
46
+ const groupBy = number('Group by', 1);
47
+ const interval = number('Autoplay interval (in milliseconds)', 1000);
48
+
49
+ return (
50
+ <Slideshow
51
+ activeIndex={activeIndex}
52
+ autoPlay
53
+ interval={interval}
54
+ slideshowControlsProps={{
55
+ nextButtonProps: { label: 'Next' },
56
+ previousButtonProps: { label: 'Previous' },
57
+ playButtonProps: { label: 'Play/Pause' },
58
+ }}
59
+ theme={theme}
60
+ groupBy={groupBy}
61
+ style={{ width: '50%' }}
62
+ >
63
+ {images.map(({ image, alt }, index) => (
64
+ <SlideshowItem key={`${image}-${index}`}>
65
+ <ImageBlock
66
+ thumbnailProps={{ aspectRatio: AspectRatio.horizontal, loading: 'eager' }}
67
+ image={image}
68
+ alt={alt}
69
+ theme={theme}
70
+ />
71
+ </SlideshowItem>
72
+ ))}
73
+ </Slideshow>
74
+ );
75
+ };
76
+
43
77
  export const ResponsiveSlideShowSwipe = () => {
44
78
  const slides = range(3);
45
79
  return (
@@ -35,5 +35,5 @@ describe(`<${Slideshow.displayName}>`, () => {
35
35
  });
36
36
 
37
37
  // Common tests suite.
38
- commonTestsSuite(setup, { className: 'wrapper', prop: 'wrapper' }, { className: CLASSNAME });
38
+ commonTestsSuite(setup, { prop: 'wrapper' }, { className: CLASSNAME });
39
39
  });
@@ -1,25 +1,20 @@
1
- import React, { CSSProperties, forwardRef } from 'react';
1
+ import React, { forwardRef } from 'react';
2
2
 
3
- import classNames from 'classnames';
4
-
5
- import { SlideshowControls, SlideshowControlsProps, Theme } from '@lumx/react';
3
+ import { SlideshowControls, SlideshowControlsProps, Theme, Slides, SlidesProps } from '@lumx/react';
6
4
  import { DEFAULT_OPTIONS } from '@lumx/react/hooks/useSlideshowControls';
7
- import { FULL_WIDTH_PERCENT } from '@lumx/react/components/slideshow/constants';
8
- import { Comp, GenericProps, getRootClassName, handleBasicClasses } from '@lumx/react/utils';
5
+ import { Comp, GenericProps } from '@lumx/react/utils';
6
+ import { useFocusWithin } from '@lumx/react/hooks/useFocusWithin';
9
7
  import { mergeRefs } from '@lumx/react/utils/mergeRefs';
10
8
 
11
9
  /**
12
10
  * Defines the props of the component.
13
11
  */
14
- export interface SlideshowProps extends GenericProps {
15
- /** Index of the current slide. */
16
- activeIndex?: number;
17
- /** Whether the automatic rotation of the slideshow is enabled or not. */
18
- autoPlay?: boolean;
19
- /** Whether the image has to fill its container height or not. */
20
- fillHeight?: boolean;
21
- /** Number of slides to group together. */
22
- groupBy?: number;
12
+ export interface SlideshowProps
13
+ extends GenericProps,
14
+ Pick<
15
+ SlidesProps,
16
+ 'activeIndex' | 'autoPlay' | 'fillHeight' | 'slidesId' | 'id' | 'theme' | 'fillHeight' | 'groupBy'
17
+ > {
23
18
  /** Interval between each slide when automatic rotation is enabled. */
24
19
  interval?: number;
25
20
  /** Props to pass to the slideshow controls (minus those already set by the Slideshow props). */
@@ -34,26 +29,10 @@ export interface SlideshowProps extends GenericProps {
34
29
  | 'parentRef'
35
30
  | 'theme'
36
31
  >;
37
- /** Theme adapting the component to light or dark background. */
38
- theme?: Theme;
39
32
  /** Callback when slide changes */
40
33
  onChange?(index: number): void;
41
- /** slideshow HTML id attribute */
42
- id?: string;
43
- /** slides wrapper HTML id attribute */
44
- slidesId?: string;
45
34
  }
46
35
 
47
- /**
48
- * Component display name.
49
- */
50
- const COMPONENT_NAME = 'Slideshow';
51
-
52
- /**
53
- * Component default class name and class prefix.
54
- */
55
- const CLASSNAME = getRootClassName(COMPONENT_NAME);
56
-
57
36
  /**
58
37
  * Component default props.
59
38
  */
@@ -102,6 +81,10 @@ export const Slideshow: Comp<SlideshowProps, HTMLDivElement> = forwardRef((props
102
81
  onPaginationClick,
103
82
  onPreviousClick,
104
83
  slideshow,
84
+ stopAutoPlay,
85
+ startAutoPlay,
86
+ isForcePaused,
87
+ setIsForcePaused,
105
88
  } = SlideshowControls.useSlideshowControls({
106
89
  activeIndex,
107
90
  defaultActiveIndex: DEFAULT_PROPS.activeIndex as number,
@@ -114,72 +97,68 @@ export const Slideshow: Comp<SlideshowProps, HTMLDivElement> = forwardRef((props
114
97
  slidesId,
115
98
  });
116
99
 
117
- // Inline style of wrapper element.
118
- const wrapperStyle: CSSProperties = { transform: `translateX(-${FULL_WIDTH_PERCENT * currentIndex}%)` };
100
+ useFocusWithin({
101
+ element: slideshow,
102
+ onFocusIn: stopAutoPlay,
103
+ onFocusOut: startAutoPlay,
104
+ });
119
105
 
120
- /* eslint-disable jsx-a11y/no-noninteractive-tabindex */
121
106
  return (
122
- <section
107
+ <Slides
108
+ activeIndex={currentIndex}
123
109
  id={slideshowId}
110
+ className={className}
111
+ theme={theme}
112
+ fillHeight={fillHeight}
113
+ groupBy={groupBy}
114
+ isAutoPlaying={isAutoPlaying}
115
+ autoPlay={autoPlay}
116
+ slidesId={slideshowSlidesId}
117
+ setIsAutoPlaying={setIsAutoPlaying}
118
+ startIndexVisible={startIndexVisible}
119
+ endIndexVisible={endIndexVisible}
120
+ interval={interval}
124
121
  ref={mergeRefs(ref, setSlideshow)}
122
+ afterSlides={
123
+ slideshowControlsProps && slidesCount > 1 ? (
124
+ <div className={`${Slides.className}__controls`}>
125
+ <SlideshowControls
126
+ {...slideshowControlsProps}
127
+ activeIndex={currentIndex}
128
+ onPaginationClick={onPaginationClick}
129
+ onNextClick={onNextClick}
130
+ onPreviousClick={onPreviousClick}
131
+ slidesCount={slidesCount}
132
+ parentRef={slideshow}
133
+ theme={theme}
134
+ isAutoPlaying={isAutoPlaying}
135
+ nextButtonProps={{
136
+ 'aria-controls': slideshowSlidesId,
137
+ ...slideshowControlsProps.nextButtonProps,
138
+ }}
139
+ previousButtonProps={{
140
+ 'aria-controls': slideshowSlidesId,
141
+ ...slideshowControlsProps.previousButtonProps,
142
+ }}
143
+ playButtonProps={
144
+ autoPlay
145
+ ? {
146
+ 'aria-controls': slideshowSlidesId,
147
+ onClick: () => setIsForcePaused(!isForcePaused),
148
+ ...slideshowControlsProps.playButtonProps,
149
+ }
150
+ : undefined
151
+ }
152
+ />
153
+ </div>
154
+ ) : undefined
155
+ }
125
156
  {...forwardedProps}
126
- className={classNames(className, handleBasicClasses({ prefix: CLASSNAME, theme }), {
127
- [`${CLASSNAME}--fill-height`]: fillHeight,
128
- [`${CLASSNAME}--group-by-${groupBy}`]: Boolean(groupBy),
129
- })}
130
- aria-roledescription="carousel"
131
- aria-live={isAutoPlaying ? 'off' : 'polite'}
132
157
  >
133
- <div
134
- id={slideshowSlidesId}
135
- className={`${CLASSNAME}__slides`}
136
- onMouseEnter={() => setIsAutoPlaying(false)}
137
- onMouseLeave={() => setIsAutoPlaying(Boolean(autoPlay))}
138
- >
139
- <div className={`${CLASSNAME}__wrapper`} style={wrapperStyle}>
140
- {React.Children.map(children, (child: React.ReactNode, index: number) => {
141
- if (React.isValidElement(child)) {
142
- const isCurrentlyVisible = index >= startIndexVisible && index <= endIndexVisible;
143
-
144
- return React.cloneElement(child, {
145
- style: !isCurrentlyVisible
146
- ? { visibility: 'hidden', ...(child.props.style || {}) }
147
- : child.props.style || {},
148
- 'aria-hidden': !isCurrentlyVisible,
149
- });
150
- }
151
-
152
- return null;
153
- })}
154
- </div>
155
- </div>
156
-
157
- {slideshowControlsProps && slidesCount > 1 && (
158
- <div className={`${CLASSNAME}__controls`}>
159
- <SlideshowControls
160
- {...slideshowControlsProps}
161
- activeIndex={currentIndex}
162
- onPaginationClick={onPaginationClick}
163
- onNextClick={onNextClick}
164
- onPreviousClick={onPreviousClick}
165
- slidesCount={slidesCount}
166
- parentRef={slideshow}
167
- theme={theme}
168
- nextButtonProps={{
169
- 'aria-controls': slideshowSlidesId,
170
- ...slideshowControlsProps.nextButtonProps,
171
- }}
172
- previousButtonProps={{
173
- 'aria-controls': slideshowSlidesId,
174
- ...slideshowControlsProps.previousButtonProps,
175
- }}
176
- />
177
- </div>
178
- )}
179
- </section>
158
+ {children}
159
+ </Slides>
180
160
  );
181
161
  });
182
162
 
183
- Slideshow.displayName = COMPONENT_NAME;
184
- Slideshow.className = CLASSNAME;
163
+ Slideshow.displayName = 'Slideshow';
185
164
  Slideshow.defaultProps = DEFAULT_PROPS;