@lumx/react 2.0.0-alpha.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm/_internal/AlertDialog.js +15 -5
- package/esm/_internal/AlertDialog.js.map +1 -1
- package/esm/_internal/AutocompleteMultiple.js +6 -2
- package/esm/_internal/AutocompleteMultiple.js.map +1 -1
- package/esm/_internal/ButtonRoot.js +1 -0
- package/esm/_internal/ButtonRoot.js.map +1 -1
- package/esm/_internal/ClickAwayProvider.js +31 -30
- package/esm/_internal/ClickAwayProvider.js.map +1 -1
- package/esm/_internal/Dialog2.js +6 -3
- package/esm/_internal/Dialog2.js.map +1 -1
- package/esm/_internal/Dropdown2.js +6 -2
- package/esm/_internal/Dropdown2.js.map +1 -1
- package/esm/_internal/Icon2.js +1 -1
- package/esm/_internal/Icon2.js.map +1 -1
- package/esm/_internal/Lightbox2.js +4 -2
- package/esm/_internal/Lightbox2.js.map +1 -1
- package/esm/_internal/Message2.js +4 -3
- package/esm/_internal/Message2.js.map +1 -1
- package/esm/_internal/Popover2.js +4 -2
- package/esm/_internal/Popover2.js.map +1 -1
- package/esm/_internal/SelectMultiple.js +39 -61
- package/esm/_internal/SelectMultiple.js.map +1 -1
- package/esm/_internal/SlideshowControls.js +93 -44
- package/esm/_internal/SlideshowControls.js.map +1 -1
- package/esm/_internal/Switch2.js +2 -0
- package/esm/_internal/Switch2.js.map +1 -1
- package/esm/_internal/alert-dialog.js +1 -1
- package/esm/_internal/autocomplete.js +1 -2
- package/esm/_internal/autocomplete.js.map +1 -1
- package/esm/_internal/button.js +1 -2
- package/esm/_internal/button.js.map +1 -1
- package/esm/_internal/date-picker.js +1 -2
- package/esm/_internal/date-picker.js.map +1 -1
- package/esm/_internal/dialog.js +1 -1
- package/esm/_internal/dropdown.js +1 -1
- package/esm/_internal/expansion-panel.js +1 -2
- package/esm/_internal/expansion-panel.js.map +1 -1
- package/esm/_internal/getRootClassName.js +78 -68
- package/esm/_internal/getRootClassName.js.map +1 -1
- package/esm/_internal/lightbox.js +1 -2
- package/esm/_internal/lightbox.js.map +1 -1
- package/esm/_internal/popover.js +1 -1
- package/esm/_internal/select.js +1 -2
- package/esm/_internal/select.js.map +1 -1
- package/esm/_internal/side-navigation.js +1 -2
- package/esm/_internal/side-navigation.js.map +1 -1
- package/esm/_internal/slideshow.js +1 -2
- package/esm/_internal/slideshow.js.map +1 -1
- package/esm/_internal/text-field.js +1 -2
- package/esm/_internal/text-field.js.map +1 -1
- package/esm/_internal/tooltip.js +1 -2
- package/esm/_internal/tooltip.js.map +1 -1
- package/esm/_internal/useDelayedVisibility.js +16 -2
- package/esm/_internal/useDelayedVisibility.js.map +1 -1
- package/esm/_internal/useDisableBodyScroll.js +205 -7
- package/esm/_internal/useDisableBodyScroll.js.map +1 -1
- package/esm/index.js +1 -2
- package/esm/index.js.map +1 -1
- package/package.json +6 -6
- package/src/components/alert-dialog/AlertDialog.stories.tsx +29 -0
- package/src/components/alert-dialog/AlertDialog.tsx +29 -9
- package/src/components/alert-dialog/__snapshots__/AlertDialog.test.tsx.snap +91 -0
- package/src/components/autocomplete/Autocomplete.test.tsx +2 -0
- package/src/components/autocomplete/Autocomplete.tsx +7 -0
- package/src/components/autocomplete/AutocompleteMultiple.test.tsx +2 -0
- package/src/components/autocomplete/AutocompleteMultiple.tsx +2 -0
- package/src/components/autocomplete/__snapshots__/Autocomplete.test.tsx.snap +2 -0
- package/src/components/autocomplete/__snapshots__/AutocompleteMultiple.test.tsx.snap +2 -0
- package/src/components/button/Button.stories.tsx +8 -2
- package/src/components/button/ButtonRoot.tsx +1 -1
- package/src/components/comment-block/CommentBlock.stories.tsx +3 -2
- package/src/components/comment-block/__snapshots__/CommentBlock.test.tsx.snap +1 -1
- package/src/components/dialog/Dialog.stories.tsx +62 -22
- package/src/components/dialog/Dialog.tsx +8 -2
- package/src/components/dialog/__snapshots__/Dialog.test.tsx.snap +99 -35
- package/src/components/icon/Icon.tsx +1 -0
- package/src/components/icon/__snapshots__/Icon.test.tsx.snap +2 -2
- package/src/components/lightbox/Lightbox.tsx +4 -1
- package/src/components/lightbox/__snapshots__/Lightbox.test.tsx.snap +7 -5
- package/src/components/message/Message.stories.tsx +8 -0
- package/src/components/message/Message.tsx +4 -2
- package/src/components/popover/Popover.tsx +4 -1
- package/src/components/popover/__snapshots__/Popover.test.tsx.snap +100 -80
- package/src/components/select/WithSelectContext.tsx +3 -60
- package/src/components/slideshow/Slideshow.stories.tsx +47 -7
- package/src/components/slideshow/Slideshow.test.tsx +4 -1
- package/src/components/slideshow/Slideshow.tsx +51 -26
- package/src/components/slideshow/SlideshowControls.stories.tsx +0 -4
- package/src/components/slideshow/SlideshowControls.tsx +23 -8
- package/src/components/slideshow/__snapshots__/Slideshow.test.tsx.snap +0 -5
- package/src/components/slideshow/useKeyNavigate.ts +28 -0
- package/src/components/slideshow/useSwipeNavigate.ts +18 -0
- package/src/components/switch/Switch.tsx +2 -0
- package/src/components/switch/__snapshots__/Switch.test.tsx.snap +8 -0
- package/src/hooks/useClickAway.tsx +6 -5
- package/src/hooks/useDelayedVisibility.tsx +22 -2
- package/src/hooks/useDisableBodyScroll.ts +16 -1
- package/src/hooks/useInfiniteScroll.tsx +14 -3
- package/src/hooks/useListenFocus.tsx +26 -0
- package/src/utils/ClickAwayProvider/ClickAwayProvider.tsx +23 -32
- package/types.d.ts +17 -8
- package/src/components/slideshow/useKeyOrSwipeNavigate.ts +0 -37
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectMultiple.js","sources":["../../../src/components/select/constants.ts","../../../src/components/select/WithSelectContext.tsx","../../../src/components/select/Select.tsx","../../../src/components/select/SelectMultiple.tsx"],"sourcesContent":["import { IconButtonProps } from '@lumx/react';\nimport { Theme } from '@lumx/react/components';\nimport { GenericProps, ValueOf } from '@lumx/react/utils';\nimport { ReactNode, SyntheticEvent } from 'react';\n\n/**\n * Select variants.\n */\nexport const SelectVariant = { input: 'input', chip: 'chip' } as const;\nexport type SelectVariant = ValueOf<typeof SelectVariant>;\n\nexport interface CoreSelectProps extends GenericProps {\n /** Props to pass to the clear button (minus those already set by the Select props). If not specified, the button won't be displayed. */\n clearButtonProps?: Pick<IconButtonProps, 'label'> &\n Omit<IconButtonProps, 'label' | 'onClick' | 'icon' | 'emphasis'>;\n /** Whether the select (input variant) is displayed with error style or not. */\n hasError?: boolean;\n /** Error message. */\n error?: string | ReactNode;\n /** Helper text. */\n helper?: string;\n /** Whether the select should close on click. */\n closeOnClick?: boolean;\n /** Whether the component is disabled or not. */\n isDisabled?: boolean;\n /** Whether the component is required or not. */\n isRequired?: boolean;\n /** Whether the component is open or not. */\n isOpen?: boolean;\n /** Whether the select (input variant) is displayed with valid style or not. */\n isValid?: boolean;\n /** Label text. */\n label?: string;\n /** Placeholder input text. */\n placeholder?: string;\n /** Theme adapting the component to light or dark background. */\n theme?: Theme;\n /** Select variant. */\n variant?: SelectVariant;\n /** On clear callback. */\n onClear?(event: SyntheticEvent, value?: string): void;\n /** On blur callback. */\n onBlur?(): void;\n /** On filter text change callback (with 500ms debounce). */\n onFilter?(): void;\n /** On input click callback (can be used for dropdown toggle). */\n onInputClick?(): void;\n /** On dropdown close callback. */\n onDropdownClose?(): void;\n /** On scroll end callback. */\n onInfiniteScroll?(): void;\n /** Render value function. Default: Renders the value as a string. */\n selectedValueRender?(choice: string): ReactNode | string;\n}\n","import React, { Ref, useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport classNames from 'classnames';\nimport { uid } from 'uid';\n\nimport { Kind, Theme } from '@lumx/react/components';\nimport { Dropdown } from '@lumx/react/components/dropdown/Dropdown';\nimport { InputHelper } from '@lumx/react/components/input-helper/InputHelper';\nimport { Placement } from '@lumx/react/components/popover/Popover';\n\nimport { getRootClassName, handleBasicClasses } from '@lumx/react/utils';\nimport { mergeRefs } from '@lumx/react/utils/mergeRefs';\n\nimport { CoreSelectProps, SelectVariant } from './constants';\n\n/** The display name of the component. */\nconst COMPONENT_NAME = 'Select';\n\n/** The default class name and classes prefix for this component. */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/** The default value of props. */\nexport const DEFAULT_PROPS: Partial<CoreSelectProps> = {\n theme: Theme.light,\n variant: SelectVariant.input,\n};\n\n/**\n * Listen on element focus to store the focus status.\n *\n * @param element Element to focus.\n * @param setIsFocus Setter used to store the focus status of the element.\n * @param isOpen Is the list opened\n * @param wasBlurred is it blurred\n * @param setWasBlurred set blurred\n * @param onBlur when its blurred\n */\nfunction useHandleElementFocus(\n element: HTMLElement | null,\n setIsFocus: (b: boolean) => void,\n isOpen: boolean,\n wasBlurred: boolean,\n setWasBlurred: (b: boolean) => void,\n onBlur?: () => void,\n) {\n useEffect((): VoidFunction | void => {\n if (!element) {\n return undefined;\n }\n\n const setFocus = () => {\n if (!isOpen) {\n setIsFocus(true);\n }\n };\n\n const setBlur = () => {\n if (!isOpen) {\n setIsFocus(false);\n\n if (onBlur) {\n onBlur();\n }\n }\n\n setWasBlurred(true);\n };\n\n element.addEventListener('focus', setFocus);\n element.addEventListener('blur', setBlur);\n\n return () => {\n element.removeEventListener('focus', setFocus);\n element.removeEventListener('blur', setBlur);\n };\n }, [element, isOpen, onBlur, setIsFocus, setWasBlurred, wasBlurred]);\n}\n\nexport const WithSelectContext = (\n SelectElement: React.FC<any>,\n {\n children,\n className,\n isMultiple,\n closeOnClick = !isMultiple,\n disabled,\n error,\n hasError,\n helper,\n id,\n isDisabled = disabled,\n isEmpty,\n isOpen,\n isRequired,\n isValid,\n label,\n onBlur,\n onClear,\n onDropdownClose,\n onInfiniteScroll,\n onInputClick,\n placeholder,\n theme = DEFAULT_PROPS.theme,\n value,\n variant = DEFAULT_PROPS.variant,\n ...forwardedProps\n }: CoreSelectProps,\n ref: Ref<HTMLDivElement>,\n): React.ReactElement => {\n const selectId = useMemo(() => id || `select-${uid()}`, [id]);\n const anchorRef = useRef<HTMLElement>(null);\n const selectRef = useRef<HTMLDivElement>(null);\n const [isFocus, setIsFocus] = useState(Boolean(isOpen));\n const [wasBlurred, setWasBlurred] = useState(false);\n\n useHandleElementFocus(anchorRef.current, setIsFocus, Boolean(isOpen), wasBlurred, setWasBlurred, onBlur);\n\n const handleKeyboardNav = useCallback(\n (evt: React.KeyboardEvent<HTMLElement>) => {\n if ((evt.key === 'Enter' || evt.key === ' ' || evt.key === 'ArrowDown') && onInputClick) {\n evt.preventDefault();\n onInputClick();\n }\n },\n [onInputClick],\n );\n\n const onClose = () => {\n if (onDropdownClose) {\n onDropdownClose();\n }\n\n setWasBlurred(false);\n anchorRef?.current?.blur();\n };\n\n return (\n <div\n ref={mergeRefs(ref, selectRef)}\n className={classNames(\n className,\n handleBasicClasses({\n hasError,\n hasLabel: Boolean(label),\n hasPlaceholder: Boolean(placeholder),\n hasValue: !isEmpty,\n isDisabled,\n isEmpty,\n isFocus,\n isOpen,\n isValid,\n prefix: CLASSNAME,\n theme: theme === Theme.light ? Theme.light : Theme.dark,\n }),\n )}\n >\n <SelectElement\n {...forwardedProps}\n anchorRef={anchorRef}\n aria-disabled={isDisabled}\n handleKeyboardNav={handleKeyboardNav}\n hasError={hasError}\n isDisabled={isDisabled}\n isEmpty={isEmpty}\n isRequired={isRequired}\n isValid={isValid}\n label={label}\n placeholder={placeholder}\n id={selectId}\n theme={theme}\n value={value}\n variant={variant}\n onClear={onClear}\n onInputClick={onInputClick}\n />\n <Dropdown\n anchorRef={anchorRef}\n closeOnClick={closeOnClick}\n closeOnClickAway\n closeOnEscape\n isOpen={!!isOpen}\n placement={Placement.BOTTOM_START}\n onClose={onClose}\n onInfiniteScroll={onInfiniteScroll}\n >\n {children}\n </Dropdown>\n {hasError && error && (\n <InputHelper className={`${CLASSNAME}__helper`} kind={Kind.error} theme={theme}>\n {error}\n </InputHelper>\n )}\n {helper && (\n <InputHelper className={`${CLASSNAME}__helper`} theme={theme}>\n {helper}\n </InputHelper>\n )}\n </div>\n );\n};\n","import React, { forwardRef, RefObject } from 'react';\n\nimport classNames from 'classnames';\nimport lodashIsEmpty from 'lodash/isEmpty';\n\nimport { mdiAlertCircle, mdiCheckCircle, mdiCloseCircle, mdiMenuDown } from '@lumx/icons';\n\nimport { Emphasis, Size } from '@lumx/react/components';\nimport { IconButton } from '@lumx/react/components/button/IconButton';\nimport { Chip } from '@lumx/react/components/chip/Chip';\nimport { Icon } from '@lumx/react/components/icon/Icon';\nimport { InputLabel } from '@lumx/react/components/input-label/InputLabel';\n\nimport { Comp, getRootClassName, handleBasicClasses } from '@lumx/react/utils';\n\nimport { WithSelectContext } from './WithSelectContext';\nimport { CoreSelectProps, SelectVariant } from './constants';\n\n/** Defines the props of the component. */\nexport interface SelectProps extends CoreSelectProps {\n /** Selected value. */\n value: string;\n}\n\nexport { SelectVariant };\n\n/** The display name of the component. */\nconst COMPONENT_NAME = 'Select';\n\n/** The default class name and classes prefix for this component. */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/** The default value of props. */\nconst DEFAULT_PROPS: Partial<SelectProps> = {\n selectedValueRender: (choice) => choice,\n};\n\nconst stopPropagation = (evt: Event) => evt.stopPropagation();\n\n/**\n * Select component.\n */\nconst SelectField: React.FC<SelectProps> = ({\n anchorRef,\n clearButtonProps,\n handleKeyboardNav,\n hasError,\n hasInputClear,\n id,\n isDisabled,\n isEmpty,\n isRequired,\n isValid,\n label,\n onClear,\n onInputClick,\n placeholder,\n selectedValueRender,\n theme,\n value,\n variant,\n ...forwardedProps\n}) => {\n return (\n <>\n {variant === SelectVariant.input && (\n <>\n {label && (\n <div className={`${CLASSNAME}__header`}>\n <InputLabel\n htmlFor={id}\n className={`${CLASSNAME}__label`}\n isRequired={isRequired}\n theme={theme}\n >\n {label}\n </InputLabel>\n </div>\n )}\n\n {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions */}\n <div\n ref={anchorRef as RefObject<HTMLDivElement>}\n id={id}\n className={`${CLASSNAME}__wrapper`}\n onClick={onInputClick}\n onKeyDown={handleKeyboardNav}\n tabIndex={isDisabled ? undefined : 0}\n aria-disabled={isDisabled || undefined}\n {...forwardedProps}\n >\n <div\n className={classNames([\n `${CLASSNAME}__input-native`,\n isEmpty && placeholder && `${CLASSNAME}__input-native--placeholder`,\n ])}\n >\n {!isEmpty && <span>{selectedValueRender?.(value)}</span>}\n\n {isEmpty && placeholder && <span>{placeholder}</span>}\n </div>\n\n {(isValid || hasError) && (\n <div className={`${CLASSNAME}__input-validity`}>\n <Icon icon={isValid ? mdiCheckCircle : mdiAlertCircle} size={Size.xxs} />\n </div>\n )}\n\n {hasInputClear && clearButtonProps && (\n <IconButton\n {...clearButtonProps}\n className={`${CLASSNAME}__input-clear`}\n icon={mdiCloseCircle}\n emphasis={Emphasis.low}\n size={Size.s}\n theme={theme}\n onClick={onClear}\n onKeyDown={stopPropagation}\n />\n )}\n\n <div className={`${CLASSNAME}__input-indicator`}>\n <Icon icon={mdiMenuDown} size={Size.s} />\n </div>\n </div>\n </>\n )}\n\n {variant === SelectVariant.chip && (\n <Chip\n id={id}\n isSelected={!isEmpty}\n isDisabled={isDisabled}\n after={<Icon icon={isEmpty ? mdiMenuDown : mdiCloseCircle} />}\n onAfterClick={isEmpty ? onInputClick : onClear}\n onClick={onInputClick}\n ref={anchorRef as RefObject<HTMLAnchorElement>}\n theme={theme}\n {...forwardedProps}\n >\n {isEmpty && <span>{label}</span>}\n\n {!isEmpty && <span>{selectedValueRender?.(value)}</span>}\n </Chip>\n )}\n </>\n );\n};\n\n/**\n * Select component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const Select: Comp<SelectProps, HTMLDivElement> = forwardRef((props, ref) => {\n const isEmpty = lodashIsEmpty(props.value);\n const hasInputClear = props.onClear && props.clearButtonProps && !isEmpty;\n\n return WithSelectContext(\n SelectField,\n {\n ...props,\n className: classNames(\n props.className,\n handleBasicClasses({\n hasInputClear,\n hasUnique: !props.isEmpty,\n prefix: CLASSNAME,\n }),\n ),\n hasInputClear,\n isEmpty,\n },\n ref,\n );\n});\nSelect.displayName = COMPONENT_NAME;\nSelect.className = CLASSNAME;\nSelect.defaultProps = DEFAULT_PROPS;\nSelect.className = CLASSNAME;\n","import React, { forwardRef, ReactNode, RefObject, SyntheticEvent } from 'react';\n\nimport classNames from 'classnames';\n\nimport { mdiAlertCircle, mdiCheckCircle, mdiClose, mdiCloseCircle, mdiMenuDown } from '@lumx/icons';\n\nimport { Size } from '@lumx/react/components';\nimport { Chip } from '@lumx/react/components/chip/Chip';\nimport { ChipGroup } from '@lumx/react/components/chip/ChipGroup';\nimport { Icon } from '@lumx/react/components/icon/Icon';\nimport { InputLabel } from '@lumx/react/components/input-label/InputLabel';\n\nimport { Comp, getRootClassName, handleBasicClasses } from '@lumx/react/utils';\n\nimport { WithSelectContext } from './WithSelectContext';\nimport { CoreSelectProps, SelectVariant } from './constants';\n\n/** Defines the props of the component. */\nexport interface SelectMultipleProps extends CoreSelectProps {\n /** Selected values. */\n value: string[];\n /** Selected value render function. Default: Renders the value inside of a Chip. */\n selectedChipRender?(\n choice: string,\n index: number,\n onClear?: (event: SyntheticEvent, choice: string) => void,\n isDisabled?: boolean,\n theme?: any,\n ): ReactNode | string;\n}\n\n/** The display name of the component. */\nconst COMPONENT_NAME = 'Select';\n\n/** The default class name and classes prefix for this component. */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/** The default value of props. */\nconst DEFAULT_PROPS: Partial<SelectMultipleProps> = {\n selectedChipRender(choice, index, onClear, isDisabled?, theme?) {\n const onClick = (event: React.MouseEvent) => onClear && onClear(event, choice);\n return (\n <Chip\n key={index}\n after={onClear && <Icon icon={mdiClose} size={Size.xxs} />}\n isDisabled={isDisabled}\n size={Size.s}\n onAfterClick={onClick}\n onClick={onClick}\n theme={theme}\n >\n {choice}\n </Chip>\n );\n },\n selectedValueRender: (choice) => choice,\n};\n\nexport const SelectMultipleField: React.FC<SelectMultipleProps> = ({\n anchorRef,\n handleKeyboardNav,\n hasError,\n id,\n isDisabled,\n isEmpty,\n isRequired,\n isValid,\n label,\n onClear,\n onInputClick,\n placeholder,\n selectedChipRender,\n selectedValueRender,\n theme,\n value,\n variant,\n}) => (\n <>\n {variant === SelectVariant.input && (\n <>\n {label && (\n <div className={`${CLASSNAME}__header`}>\n <InputLabel\n htmlFor={id}\n className={`${CLASSNAME}__label`}\n isRequired={isRequired}\n theme={theme}\n >\n {label}\n </InputLabel>\n </div>\n )}\n\n {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions */}\n <div\n ref={anchorRef as RefObject<HTMLDivElement>}\n id={id}\n className={`${CLASSNAME}__wrapper`}\n onClick={onInputClick}\n onKeyDown={handleKeyboardNav}\n tabIndex={isDisabled ? undefined : 0}\n aria-disabled={isDisabled || undefined}\n >\n <div className={`${CLASSNAME}__chips`}>\n {!isEmpty &&\n value.map((val, index) => selectedChipRender?.(val, index, onClear, isDisabled, theme))}\n </div>\n\n {isEmpty && placeholder && (\n <div\n className={classNames([\n `${CLASSNAME}__input-native`,\n `${CLASSNAME}__input-native--placeholder`,\n ])}\n >\n <span>{placeholder}</span>\n </div>\n )}\n\n {(isValid || hasError) && (\n <div className={`${CLASSNAME}__input-validity`}>\n <Icon icon={isValid ? mdiCheckCircle : mdiAlertCircle} size={Size.xxs} />\n </div>\n )}\n\n <div className={`${CLASSNAME}__input-indicator`}>\n <Icon icon={mdiMenuDown} size={Size.s} />\n </div>\n </div>\n </>\n )}\n\n {variant === SelectVariant.chip && (\n <Chip\n id={id}\n isSelected={!isEmpty}\n isDisabled={isDisabled}\n after={<Icon icon={isEmpty ? mdiMenuDown : mdiCloseCircle} />}\n onAfterClick={isEmpty ? onInputClick : onClear}\n onClick={onInputClick}\n ref={anchorRef as RefObject<HTMLAnchorElement>}\n theme={theme}\n >\n {isEmpty && <span>{label}</span>}\n\n {!isEmpty && (\n <span>\n <span>{selectedValueRender?.(value[0])}</span>\n\n {value.length > 1 && <span> +{value.length - 1}</span>}\n </span>\n )}\n </Chip>\n )}\n </>\n);\n\n/**\n * SelectMultiple component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const SelectMultiple: Comp<SelectMultipleProps, HTMLDivElement> = forwardRef((props, ref) => {\n return WithSelectContext(\n SelectMultipleField,\n {\n ...props,\n className: classNames(\n props.className,\n handleBasicClasses({\n hasMultiple: !props.isEmpty,\n prefix: CLASSNAME,\n }),\n ),\n isEmpty: props.value.length === 0,\n isMultiple: true,\n },\n ref,\n );\n});\nSelectMultiple.displayName = COMPONENT_NAME;\nSelectMultiple.className = CLASSNAME;\nSelectMultiple.defaultProps = DEFAULT_PROPS;\n"],"names":["SelectVariant","input","chip","COMPONENT_NAME","CLASSNAME","getRootClassName","DEFAULT_PROPS","theme","Theme","light","variant","useHandleElementFocus","element","setIsFocus","isOpen","wasBlurred","setWasBlurred","onBlur","useEffect","undefined","setFocus","setBlur","addEventListener","removeEventListener","WithSelectContext","SelectElement","ref","children","className","isMultiple","closeOnClick","disabled","error","hasError","helper","id","isDisabled","isEmpty","isRequired","isValid","label","onClear","onDropdownClose","onInfiniteScroll","onInputClick","placeholder","value","forwardedProps","selectId","useMemo","uid","anchorRef","useRef","selectRef","useState","Boolean","isFocus","current","handleKeyboardNav","useCallback","evt","key","preventDefault","onClose","blur","mergeRefs","classNames","handleBasicClasses","hasLabel","hasPlaceholder","hasValue","prefix","dark","Placement","BOTTOM_START","Kind","selectedValueRender","choice","stopPropagation","SelectField","clearButtonProps","hasInputClear","mdiCheckCircle","mdiAlertCircle","Size","xxs","mdiCloseCircle","Emphasis","low","s","mdiMenuDown","Select","forwardRef","props","lodashIsEmpty","hasUnique","displayName","defaultProps","selectedChipRender","index","onClick","event","mdiClose","SelectMultipleField","map","val","length","SelectMultiple","hasMultiple"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SelectMultiple.js","sources":["../../../src/hooks/useListenFocus.tsx","../../../src/components/select/constants.ts","../../../src/components/select/WithSelectContext.tsx","../../../src/components/select/Select.tsx","../../../src/components/select/SelectMultiple.tsx"],"sourcesContent":["import { RefObject, useEffect, useState } from 'react';\n\n/**\n * Listen on element focus to store the focus status.\n */\nexport function useListenFocus(ref: RefObject<HTMLElement>) {\n const [isFocus, setFocus] = useState(false);\n\n useEffect(() => {\n const { current: element } = ref;\n if (!element) {\n return undefined;\n }\n\n const onFocus = () => setFocus(true);\n const onBlur = () => setFocus(false);\n element.addEventListener('focus', onFocus);\n element.addEventListener('blur', onBlur);\n return () => {\n element.removeEventListener('focus', onFocus);\n element.removeEventListener('blur', onBlur);\n };\n }, [ref, setFocus]);\n\n return isFocus;\n}\n","import { IconButtonProps } from '@lumx/react';\nimport { Theme } from '@lumx/react/components';\nimport { GenericProps, ValueOf } from '@lumx/react/utils';\nimport { ReactNode, SyntheticEvent } from 'react';\n\n/**\n * Select variants.\n */\nexport const SelectVariant = { input: 'input', chip: 'chip' } as const;\nexport type SelectVariant = ValueOf<typeof SelectVariant>;\n\nexport interface CoreSelectProps extends GenericProps {\n /** Props to pass to the clear button (minus those already set by the Select props). If not specified, the button won't be displayed. */\n clearButtonProps?: Pick<IconButtonProps, 'label'> &\n Omit<IconButtonProps, 'label' | 'onClick' | 'icon' | 'emphasis'>;\n /** Whether the select (input variant) is displayed with error style or not. */\n hasError?: boolean;\n /** Error message. */\n error?: string | ReactNode;\n /** Helper text. */\n helper?: string;\n /** Whether the select should close on click. */\n closeOnClick?: boolean;\n /** Whether the component is disabled or not. */\n isDisabled?: boolean;\n /** Whether the component is required or not. */\n isRequired?: boolean;\n /** Whether the component is open or not. */\n isOpen?: boolean;\n /** Whether the select (input variant) is displayed with valid style or not. */\n isValid?: boolean;\n /** Label text. */\n label?: string;\n /** Placeholder input text. */\n placeholder?: string;\n /** Theme adapting the component to light or dark background. */\n theme?: Theme;\n /** Select variant. */\n variant?: SelectVariant;\n /** On clear callback. */\n onClear?(event: SyntheticEvent, value?: string): void;\n /** On blur callback. */\n onBlur?(): void;\n /** On filter text change callback (with 500ms debounce). */\n onFilter?(): void;\n /** On input click callback (can be used for dropdown toggle). */\n onInputClick?(): void;\n /** On dropdown close callback. */\n onDropdownClose?(): void;\n /** On scroll end callback. */\n onInfiniteScroll?(): void;\n /** Render value function. Default: Renders the value as a string. */\n selectedValueRender?(choice: string): ReactNode | string;\n}\n","import React, { Ref, useCallback, useMemo, useRef } from 'react';\n\nimport classNames from 'classnames';\nimport { uid } from 'uid';\n\nimport { Kind, Theme } from '@lumx/react/components';\nimport { Dropdown } from '@lumx/react/components/dropdown/Dropdown';\nimport { InputHelper } from '@lumx/react/components/input-helper/InputHelper';\nimport { Placement } from '@lumx/react/components/popover/Popover';\n\nimport { getRootClassName, handleBasicClasses } from '@lumx/react/utils';\nimport { mergeRefs } from '@lumx/react/utils/mergeRefs';\nimport { useListenFocus } from '@lumx/react/hooks/useListenFocus';\nimport { CoreSelectProps, SelectVariant } from './constants';\n\n/** The display name of the component. */\nconst COMPONENT_NAME = 'Select';\n\n/** The default class name and classes prefix for this component. */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/** The default value of props. */\nexport const DEFAULT_PROPS: Partial<CoreSelectProps> = {\n theme: Theme.light,\n variant: SelectVariant.input,\n};\n\nexport const WithSelectContext = (\n SelectElement: React.FC<any>,\n {\n children,\n className,\n isMultiple,\n closeOnClick = !isMultiple,\n disabled,\n error,\n hasError,\n helper,\n id,\n isDisabled = disabled,\n isEmpty,\n isOpen,\n isRequired,\n isValid,\n label,\n onClear,\n onDropdownClose,\n onInfiniteScroll,\n onInputClick,\n placeholder,\n theme = DEFAULT_PROPS.theme,\n value,\n variant = DEFAULT_PROPS.variant,\n ...forwardedProps\n }: CoreSelectProps,\n ref: Ref<HTMLDivElement>,\n): React.ReactElement => {\n const selectId = useMemo(() => id || `select-${uid()}`, [id]);\n const anchorRef = useRef<HTMLElement>(null);\n const selectRef = useRef<HTMLDivElement>(null);\n const isFocus = useListenFocus(anchorRef);\n\n const handleKeyboardNav = useCallback(\n (evt: React.KeyboardEvent<HTMLElement>) => {\n if ((evt.key === 'Enter' || evt.key === ' ' || evt.key === 'ArrowDown') && onInputClick) {\n evt.preventDefault();\n onInputClick();\n }\n },\n [onInputClick],\n );\n\n const onClose = () => {\n if (onDropdownClose) {\n onDropdownClose();\n }\n anchorRef?.current?.blur();\n };\n\n return (\n <div\n ref={mergeRefs(ref, selectRef)}\n className={classNames(\n className,\n handleBasicClasses({\n hasError,\n hasLabel: Boolean(label),\n hasPlaceholder: Boolean(placeholder),\n hasValue: !isEmpty,\n isDisabled,\n isEmpty,\n isFocus,\n isOpen,\n isValid,\n prefix: CLASSNAME,\n theme: theme === Theme.light ? Theme.light : Theme.dark,\n }),\n )}\n >\n <SelectElement\n {...forwardedProps}\n anchorRef={anchorRef}\n aria-disabled={isDisabled}\n handleKeyboardNav={handleKeyboardNav}\n hasError={hasError}\n isDisabled={isDisabled}\n isEmpty={isEmpty}\n isRequired={isRequired}\n isValid={isValid}\n label={label}\n placeholder={placeholder}\n id={selectId}\n theme={theme}\n value={value}\n variant={variant}\n onClear={onClear}\n onInputClick={onInputClick}\n />\n <Dropdown\n anchorRef={anchorRef}\n closeOnClick={closeOnClick}\n closeOnClickAway\n closeOnEscape\n isOpen={!!isOpen}\n placement={Placement.BOTTOM_START}\n onClose={onClose}\n onInfiniteScroll={onInfiniteScroll}\n >\n {children}\n </Dropdown>\n {hasError && error && (\n <InputHelper className={`${CLASSNAME}__helper`} kind={Kind.error} theme={theme}>\n {error}\n </InputHelper>\n )}\n {helper && (\n <InputHelper className={`${CLASSNAME}__helper`} theme={theme}>\n {helper}\n </InputHelper>\n )}\n </div>\n );\n};\n","import React, { forwardRef, RefObject } from 'react';\n\nimport classNames from 'classnames';\nimport lodashIsEmpty from 'lodash/isEmpty';\n\nimport { mdiAlertCircle, mdiCheckCircle, mdiCloseCircle, mdiMenuDown } from '@lumx/icons';\n\nimport { Emphasis, Size } from '@lumx/react/components';\nimport { IconButton } from '@lumx/react/components/button/IconButton';\nimport { Chip } from '@lumx/react/components/chip/Chip';\nimport { Icon } from '@lumx/react/components/icon/Icon';\nimport { InputLabel } from '@lumx/react/components/input-label/InputLabel';\n\nimport { Comp, getRootClassName, handleBasicClasses } from '@lumx/react/utils';\n\nimport { WithSelectContext } from './WithSelectContext';\nimport { CoreSelectProps, SelectVariant } from './constants';\n\n/** Defines the props of the component. */\nexport interface SelectProps extends CoreSelectProps {\n /** Selected value. */\n value: string;\n}\n\nexport { SelectVariant };\n\n/** The display name of the component. */\nconst COMPONENT_NAME = 'Select';\n\n/** The default class name and classes prefix for this component. */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/** The default value of props. */\nconst DEFAULT_PROPS: Partial<SelectProps> = {\n selectedValueRender: (choice) => choice,\n};\n\nconst stopPropagation = (evt: Event) => evt.stopPropagation();\n\n/**\n * Select component.\n */\nconst SelectField: React.FC<SelectProps> = ({\n anchorRef,\n clearButtonProps,\n handleKeyboardNav,\n hasError,\n hasInputClear,\n id,\n isDisabled,\n isEmpty,\n isRequired,\n isValid,\n label,\n onClear,\n onInputClick,\n placeholder,\n selectedValueRender,\n theme,\n value,\n variant,\n ...forwardedProps\n}) => {\n return (\n <>\n {variant === SelectVariant.input && (\n <>\n {label && (\n <div className={`${CLASSNAME}__header`}>\n <InputLabel\n htmlFor={id}\n className={`${CLASSNAME}__label`}\n isRequired={isRequired}\n theme={theme}\n >\n {label}\n </InputLabel>\n </div>\n )}\n\n {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions */}\n <div\n ref={anchorRef as RefObject<HTMLDivElement>}\n id={id}\n className={`${CLASSNAME}__wrapper`}\n onClick={onInputClick}\n onKeyDown={handleKeyboardNav}\n tabIndex={isDisabled ? undefined : 0}\n aria-disabled={isDisabled || undefined}\n {...forwardedProps}\n >\n <div\n className={classNames([\n `${CLASSNAME}__input-native`,\n isEmpty && placeholder && `${CLASSNAME}__input-native--placeholder`,\n ])}\n >\n {!isEmpty && <span>{selectedValueRender?.(value)}</span>}\n\n {isEmpty && placeholder && <span>{placeholder}</span>}\n </div>\n\n {(isValid || hasError) && (\n <div className={`${CLASSNAME}__input-validity`}>\n <Icon icon={isValid ? mdiCheckCircle : mdiAlertCircle} size={Size.xxs} />\n </div>\n )}\n\n {hasInputClear && clearButtonProps && (\n <IconButton\n {...clearButtonProps}\n className={`${CLASSNAME}__input-clear`}\n icon={mdiCloseCircle}\n emphasis={Emphasis.low}\n size={Size.s}\n theme={theme}\n onClick={onClear}\n onKeyDown={stopPropagation}\n />\n )}\n\n <div className={`${CLASSNAME}__input-indicator`}>\n <Icon icon={mdiMenuDown} size={Size.s} />\n </div>\n </div>\n </>\n )}\n\n {variant === SelectVariant.chip && (\n <Chip\n id={id}\n isSelected={!isEmpty}\n isDisabled={isDisabled}\n after={<Icon icon={isEmpty ? mdiMenuDown : mdiCloseCircle} />}\n onAfterClick={isEmpty ? onInputClick : onClear}\n onClick={onInputClick}\n ref={anchorRef as RefObject<HTMLAnchorElement>}\n theme={theme}\n {...forwardedProps}\n >\n {isEmpty && <span>{label}</span>}\n\n {!isEmpty && <span>{selectedValueRender?.(value)}</span>}\n </Chip>\n )}\n </>\n );\n};\n\n/**\n * Select component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const Select: Comp<SelectProps, HTMLDivElement> = forwardRef((props, ref) => {\n const isEmpty = lodashIsEmpty(props.value);\n const hasInputClear = props.onClear && props.clearButtonProps && !isEmpty;\n\n return WithSelectContext(\n SelectField,\n {\n ...props,\n className: classNames(\n props.className,\n handleBasicClasses({\n hasInputClear,\n hasUnique: !props.isEmpty,\n prefix: CLASSNAME,\n }),\n ),\n hasInputClear,\n isEmpty,\n },\n ref,\n );\n});\nSelect.displayName = COMPONENT_NAME;\nSelect.className = CLASSNAME;\nSelect.defaultProps = DEFAULT_PROPS;\nSelect.className = CLASSNAME;\n","import React, { forwardRef, ReactNode, RefObject, SyntheticEvent } from 'react';\n\nimport classNames from 'classnames';\n\nimport { mdiAlertCircle, mdiCheckCircle, mdiClose, mdiCloseCircle, mdiMenuDown } from '@lumx/icons';\n\nimport { Size } from '@lumx/react/components';\nimport { Chip } from '@lumx/react/components/chip/Chip';\nimport { ChipGroup } from '@lumx/react/components/chip/ChipGroup';\nimport { Icon } from '@lumx/react/components/icon/Icon';\nimport { InputLabel } from '@lumx/react/components/input-label/InputLabel';\n\nimport { Comp, getRootClassName, handleBasicClasses } from '@lumx/react/utils';\n\nimport { WithSelectContext } from './WithSelectContext';\nimport { CoreSelectProps, SelectVariant } from './constants';\n\n/** Defines the props of the component. */\nexport interface SelectMultipleProps extends CoreSelectProps {\n /** Selected values. */\n value: string[];\n /** Selected value render function. Default: Renders the value inside of a Chip. */\n selectedChipRender?(\n choice: string,\n index: number,\n onClear?: (event: SyntheticEvent, choice: string) => void,\n isDisabled?: boolean,\n theme?: any,\n ): ReactNode | string;\n}\n\n/** The display name of the component. */\nconst COMPONENT_NAME = 'Select';\n\n/** The default class name and classes prefix for this component. */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/** The default value of props. */\nconst DEFAULT_PROPS: Partial<SelectMultipleProps> = {\n selectedChipRender(choice, index, onClear, isDisabled?, theme?) {\n const onClick = (event: React.MouseEvent) => onClear && onClear(event, choice);\n return (\n <Chip\n key={index}\n after={onClear && <Icon icon={mdiClose} size={Size.xxs} />}\n isDisabled={isDisabled}\n size={Size.s}\n onAfterClick={onClick}\n onClick={onClick}\n theme={theme}\n >\n {choice}\n </Chip>\n );\n },\n selectedValueRender: (choice) => choice,\n};\n\nexport const SelectMultipleField: React.FC<SelectMultipleProps> = ({\n anchorRef,\n handleKeyboardNav,\n hasError,\n id,\n isDisabled,\n isEmpty,\n isRequired,\n isValid,\n label,\n onClear,\n onInputClick,\n placeholder,\n selectedChipRender,\n selectedValueRender,\n theme,\n value,\n variant,\n}) => (\n <>\n {variant === SelectVariant.input && (\n <>\n {label && (\n <div className={`${CLASSNAME}__header`}>\n <InputLabel\n htmlFor={id}\n className={`${CLASSNAME}__label`}\n isRequired={isRequired}\n theme={theme}\n >\n {label}\n </InputLabel>\n </div>\n )}\n\n {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions */}\n <div\n ref={anchorRef as RefObject<HTMLDivElement>}\n id={id}\n className={`${CLASSNAME}__wrapper`}\n onClick={onInputClick}\n onKeyDown={handleKeyboardNav}\n tabIndex={isDisabled ? undefined : 0}\n aria-disabled={isDisabled || undefined}\n >\n <div className={`${CLASSNAME}__chips`}>\n {!isEmpty &&\n value.map((val, index) => selectedChipRender?.(val, index, onClear, isDisabled, theme))}\n </div>\n\n {isEmpty && placeholder && (\n <div\n className={classNames([\n `${CLASSNAME}__input-native`,\n `${CLASSNAME}__input-native--placeholder`,\n ])}\n >\n <span>{placeholder}</span>\n </div>\n )}\n\n {(isValid || hasError) && (\n <div className={`${CLASSNAME}__input-validity`}>\n <Icon icon={isValid ? mdiCheckCircle : mdiAlertCircle} size={Size.xxs} />\n </div>\n )}\n\n <div className={`${CLASSNAME}__input-indicator`}>\n <Icon icon={mdiMenuDown} size={Size.s} />\n </div>\n </div>\n </>\n )}\n\n {variant === SelectVariant.chip && (\n <Chip\n id={id}\n isSelected={!isEmpty}\n isDisabled={isDisabled}\n after={<Icon icon={isEmpty ? mdiMenuDown : mdiCloseCircle} />}\n onAfterClick={isEmpty ? onInputClick : onClear}\n onClick={onInputClick}\n ref={anchorRef as RefObject<HTMLAnchorElement>}\n theme={theme}\n >\n {isEmpty && <span>{label}</span>}\n\n {!isEmpty && (\n <span>\n <span>{selectedValueRender?.(value[0])}</span>\n\n {value.length > 1 && <span> +{value.length - 1}</span>}\n </span>\n )}\n </Chip>\n )}\n </>\n);\n\n/**\n * SelectMultiple component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const SelectMultiple: Comp<SelectMultipleProps, HTMLDivElement> = forwardRef((props, ref) => {\n return WithSelectContext(\n SelectMultipleField,\n {\n ...props,\n className: classNames(\n props.className,\n handleBasicClasses({\n hasMultiple: !props.isEmpty,\n prefix: CLASSNAME,\n }),\n ),\n isEmpty: props.value.length === 0,\n isMultiple: true,\n },\n ref,\n );\n});\nSelectMultiple.displayName = COMPONENT_NAME;\nSelectMultiple.className = CLASSNAME;\nSelectMultiple.defaultProps = DEFAULT_PROPS;\n"],"names":["useListenFocus","ref","useState","isFocus","setFocus","useEffect","element","current","undefined","onFocus","onBlur","addEventListener","removeEventListener","SelectVariant","input","chip","COMPONENT_NAME","CLASSNAME","getRootClassName","DEFAULT_PROPS","theme","Theme","light","variant","WithSelectContext","SelectElement","children","className","isMultiple","closeOnClick","disabled","error","hasError","helper","id","isDisabled","isEmpty","isOpen","isRequired","isValid","label","onClear","onDropdownClose","onInfiniteScroll","onInputClick","placeholder","value","forwardedProps","selectId","useMemo","uid","anchorRef","useRef","selectRef","handleKeyboardNav","useCallback","evt","key","preventDefault","onClose","blur","mergeRefs","classNames","handleBasicClasses","hasLabel","Boolean","hasPlaceholder","hasValue","prefix","dark","Placement","BOTTOM_START","Kind","selectedValueRender","choice","stopPropagation","SelectField","clearButtonProps","hasInputClear","mdiCheckCircle","mdiAlertCircle","Size","xxs","mdiCloseCircle","Emphasis","low","s","mdiMenuDown","Select","forwardRef","props","lodashIsEmpty","hasUnique","displayName","defaultProps","selectedChipRender","index","onClick","event","mdiClose","SelectMultipleField","map","val","length","SelectMultiple","hasMultiple"],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { Theme, Emphasis } from './components.js';
|
|
2
|
-
import { g as getRootClassName, a as _objectWithoutProperties, f as _slicedToArray, b as _extends, d as classnames, h as handleBasicClasses, _ as _defineProperty, k as
|
|
2
|
+
import { g as getRootClassName, a as _objectWithoutProperties, f as _slicedToArray, b as _extends, d as classnames, h as handleBasicClasses, _ as _defineProperty, k as detectHorizontalSwipe } from './getRootClassName.js';
|
|
3
3
|
import React, { useRef, useEffect, forwardRef, useState, useCallback, useMemo } from 'react';
|
|
4
4
|
import { g as mdiChevronLeft, f as mdiChevronRight } from './mdi.js';
|
|
5
|
+
import { W as WINDOW } from './constants.js';
|
|
5
6
|
import { m as mergeRefs } from './mergeRefs.js';
|
|
6
7
|
import { I as IconButton } from './IconButton.js';
|
|
7
8
|
import isFunction from 'lodash/isFunction';
|
|
@@ -109,9 +110,14 @@ var Slideshow = forwardRef(function (props, ref) {
|
|
|
109
110
|
var _useState = useState(activeIndex),
|
|
110
111
|
_useState2 = _slicedToArray(_useState, 2),
|
|
111
112
|
currentIndex = _useState2[0],
|
|
112
|
-
setCurrentIndex = _useState2[1];
|
|
113
|
+
setCurrentIndex = _useState2[1]; // Use state instead of a ref to make the slideshow controls update directly when the element is set.
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
var _useState3 = useState(),
|
|
117
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
118
|
+
element = _useState4[0],
|
|
119
|
+
setElement = _useState4[1]; // Number of slideshow items.
|
|
113
120
|
|
|
114
|
-
var rootRef = useRef(null); // Number of slideshow items.
|
|
115
121
|
|
|
116
122
|
var itemsCount = React.Children.count(children); // Number of slides when using groupBy prop.
|
|
117
123
|
|
|
@@ -122,29 +128,43 @@ var Slideshow = forwardRef(function (props, ref) {
|
|
|
122
128
|
}; // Change current index to display next slide.
|
|
123
129
|
|
|
124
130
|
var goToNextSlide = useCallback(function () {
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
131
|
+
var loopback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
|
|
132
|
+
setCurrentIndex(function (index) {
|
|
133
|
+
if (loopback && index === slidesCount - 1) {
|
|
134
|
+
// Loopback to the start.
|
|
135
|
+
return 0;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
if (index < slidesCount - 1) {
|
|
139
|
+
// Next slide.
|
|
129
140
|
return index + 1;
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
return index;
|
|
144
|
+
});
|
|
145
|
+
}, [slidesCount, setCurrentIndex]); // Change current index to display previous slide.
|
|
133
146
|
|
|
134
147
|
var goToPreviousSlide = useCallback(function () {
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
148
|
+
var loopback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
|
|
149
|
+
setCurrentIndex(function (index) {
|
|
150
|
+
if (loopback && index === 0) {
|
|
151
|
+
// Loopback to the end.
|
|
152
|
+
return slidesCount - 1;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
if (index > 0) {
|
|
156
|
+
// Previous slide.
|
|
139
157
|
return index - 1;
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
}, [currentIndex, slidesCount, setCurrentIndex]); // Auto play
|
|
158
|
+
}
|
|
143
159
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
160
|
+
return index;
|
|
161
|
+
});
|
|
162
|
+
}, [slidesCount, setCurrentIndex]); // Auto play
|
|
163
|
+
|
|
164
|
+
var _useState5 = useState(Boolean(autoPlay)),
|
|
165
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
166
|
+
isAutoPlaying = _useState6[0],
|
|
167
|
+
setIsAutoPlaying = _useState6[1]; // Start
|
|
148
168
|
|
|
149
169
|
|
|
150
170
|
useInterval(goToNextSlide, isAutoPlaying && slidesCount > 1 ? interval : null); // Reset current index if it become invalid.
|
|
@@ -164,13 +184,15 @@ var Slideshow = forwardRef(function (props, ref) {
|
|
|
164
184
|
}, [slidesCount, setCurrentIndex]); // Handle click or keyboard event to go to next slide.
|
|
165
185
|
|
|
166
186
|
var handleControlNextSlide = useCallback(function () {
|
|
187
|
+
var loopback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
|
|
167
188
|
setIsAutoPlaying(false);
|
|
168
|
-
goToNextSlide();
|
|
189
|
+
goToNextSlide(loopback);
|
|
169
190
|
}, [goToNextSlide]); // Handle click or keyboard event to go to previous slide.
|
|
170
191
|
|
|
171
192
|
var handleControlPreviousSlide = useCallback(function () {
|
|
193
|
+
var loopback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
|
|
172
194
|
setIsAutoPlaying(false);
|
|
173
|
-
goToPreviousSlide();
|
|
195
|
+
goToPreviousSlide(loopback);
|
|
174
196
|
}, [goToPreviousSlide]); // If the activeIndex props changes, update the current slide
|
|
175
197
|
|
|
176
198
|
useEffect(function () {
|
|
@@ -184,7 +206,7 @@ var Slideshow = forwardRef(function (props, ref) {
|
|
|
184
206
|
/* eslint-disable jsx-a11y/no-noninteractive-tabindex */
|
|
185
207
|
|
|
186
208
|
return React.createElement("div", _extends({
|
|
187
|
-
ref: mergeRefs(ref,
|
|
209
|
+
ref: mergeRefs(ref, setElement)
|
|
188
210
|
}, forwardedProps, {
|
|
189
211
|
className: classnames(className, handleBasicClasses({
|
|
190
212
|
prefix: CLASSNAME,
|
|
@@ -204,7 +226,7 @@ var Slideshow = forwardRef(function (props, ref) {
|
|
|
204
226
|
onNextClick: handleControlNextSlide,
|
|
205
227
|
onPreviousClick: handleControlPreviousSlide,
|
|
206
228
|
slidesCount: slidesCount,
|
|
207
|
-
parentRef:
|
|
229
|
+
parentRef: element,
|
|
208
230
|
theme: theme
|
|
209
231
|
}))));
|
|
210
232
|
});
|
|
@@ -249,38 +271,50 @@ var SlideshowItem = forwardRef(function (props, ref) {
|
|
|
249
271
|
SlideshowItem.displayName = COMPONENT_NAME$1;
|
|
250
272
|
SlideshowItem.className = CLASSNAME$1;
|
|
251
273
|
|
|
274
|
+
var isTouchDevice = function isTouchDevice() {
|
|
275
|
+
return 'ontouchstart' in window;
|
|
276
|
+
};
|
|
252
277
|
/**
|
|
253
|
-
* Listen
|
|
278
|
+
* Listen swipe to navigate left and right.
|
|
254
279
|
*/
|
|
255
280
|
|
|
256
|
-
|
|
281
|
+
|
|
282
|
+
function useSwipeNavigate(element, onNext, onPrevious) {
|
|
257
283
|
useEffect(function () {
|
|
258
|
-
if (!element) return undefined;
|
|
284
|
+
if (!element || !isTouchDevice()) return undefined;
|
|
285
|
+
return detectHorizontalSwipe(element, function (swipe) {
|
|
286
|
+
var callback = swipe === 'right' ? onPrevious : onNext;
|
|
287
|
+
callback === null || callback === void 0 ? void 0 : callback();
|
|
288
|
+
});
|
|
289
|
+
}, [onPrevious, onNext, element]);
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
/**
|
|
293
|
+
* Listen keyboard to navigate left and right.
|
|
294
|
+
*/
|
|
259
295
|
|
|
260
|
-
|
|
261
|
-
|
|
296
|
+
function useKeyNavigate(element, onNext, onPrevious) {
|
|
297
|
+
useEffect(function () {
|
|
298
|
+
if (!element) return undefined;
|
|
262
299
|
|
|
300
|
+
var onKeyNavigate = function onKeyNavigate(evt) {
|
|
263
301
|
var callback;
|
|
264
302
|
|
|
265
|
-
if (
|
|
303
|
+
if ((evt === null || evt === void 0 ? void 0 : evt.key) === 'ArrowRight') {
|
|
266
304
|
callback = onPrevious;
|
|
267
|
-
} else if (
|
|
305
|
+
} else if ((evt === null || evt === void 0 ? void 0 : evt.key) === 'ArrowLeft') {
|
|
268
306
|
callback = onNext;
|
|
269
307
|
}
|
|
270
308
|
|
|
271
|
-
(
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
evt.stopPropagation();
|
|
276
|
-
}
|
|
309
|
+
if (!callback) return;
|
|
310
|
+
callback();
|
|
311
|
+
evt.preventDefault();
|
|
312
|
+
evt.stopPropagation();
|
|
277
313
|
};
|
|
278
314
|
|
|
279
|
-
element.addEventListener('keydown',
|
|
280
|
-
var removeSwipeListeners = detectSwipe(element, onNavigate);
|
|
315
|
+
element.addEventListener('keydown', onKeyNavigate);
|
|
281
316
|
return function () {
|
|
282
|
-
element.removeEventListener('keydown',
|
|
283
|
-
removeSwipeListeners();
|
|
317
|
+
element.removeEventListener('keydown', onKeyNavigate);
|
|
284
318
|
};
|
|
285
319
|
}, [onPrevious, onNext, element]);
|
|
286
320
|
}
|
|
@@ -369,10 +403,25 @@ var SlideshowControls = forwardRef(function (props, ref) {
|
|
|
369
403
|
previousButtonProps = props.previousButtonProps,
|
|
370
404
|
slidesCount = props.slidesCount,
|
|
371
405
|
theme = props.theme,
|
|
372
|
-
forwardedProps = _objectWithoutProperties(props, ["activeIndex", "className", "nextButtonProps", "onNextClick", "onPaginationClick", "onPreviousClick", "parentRef", "previousButtonProps", "slidesCount", "theme"]);
|
|
406
|
+
forwardedProps = _objectWithoutProperties(props, ["activeIndex", "className", "nextButtonProps", "onNextClick", "onPaginationClick", "onPreviousClick", "parentRef", "previousButtonProps", "slidesCount", "theme"]);
|
|
407
|
+
|
|
408
|
+
var parent;
|
|
409
|
+
|
|
410
|
+
if (WINDOW) {
|
|
411
|
+
// Checking window object to avoid errors in SSR.
|
|
412
|
+
parent = parentRef instanceof HTMLElement ? parentRef : parentRef === null || parentRef === void 0 ? void 0 : parentRef.current;
|
|
413
|
+
} // Listen to keyboard navigate left & right.
|
|
414
|
+
|
|
373
415
|
|
|
416
|
+
useKeyNavigate(parent, onNextClick, onPreviousClick); // Listen to touch swipe navigate left & right.
|
|
374
417
|
|
|
375
|
-
|
|
418
|
+
useSwipeNavigate(parent, // Go next without loopback.
|
|
419
|
+
useCallback(function () {
|
|
420
|
+
return onNextClick === null || onNextClick === void 0 ? void 0 : onNextClick(false);
|
|
421
|
+
}, [onNextClick]), // Go previous without loopback.
|
|
422
|
+
useCallback(function () {
|
|
423
|
+
return onPreviousClick === null || onPreviousClick === void 0 ? void 0 : onPreviousClick(false);
|
|
424
|
+
}, [onPreviousClick])); // Pagination "bullet" range.
|
|
376
425
|
|
|
377
426
|
var visibleRange = usePaginationVisibleRange(activeIndex, slidesCount); // Inline style of wrapper element.
|
|
378
427
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SlideshowControls.js","sources":["../../../src/components/slideshow/constants.ts","../../../src/hooks/useInterval.tsx","../../../src/components/slideshow/Slideshow.tsx","../../../src/components/slideshow/SlideshowItem.tsx","../../../src/components/slideshow/useKeyOrSwipeNavigate.ts","../../../src/components/slideshow/usePaginationVisibleRange.ts","../../../src/components/slideshow/SlideshowControls.tsx"],"sourcesContent":["/**\n * Autoplay default interval in ms.\n */\nexport const AUTOPLAY_DEFAULT_INTERVAL = 5000;\n\n/**\n * Full width size in percent.\n */\nexport const FULL_WIDTH_PERCENT = 100;\n\n/**\n * Edge from the active index.\n */\nexport const EDGE_FROM_ACTIVE_INDEX = 2;\n\n/**\n * Max number of pagination items.\n */\nexport const PAGINATION_ITEMS_MAX = 5;\n\n/**\n * Size of a pagination item. Used to translate wrapper.\n */\nexport const PAGINATION_ITEM_SIZE = 12;\n","import { useEffect, useRef } from 'react';\n\nimport isFunction from 'lodash/isFunction';\nimport { Callback } from '../utils';\n\n/**\n * Making setInterval Declarative with React Hooks.\n * Credits: https://overreacted.io/making-setinterval-declarative-with-react-hooks/\n *\n * @param callback Function called by setInterval.\n * @param delay Delay for setInterval.\n */\nexport function useInterval(callback: Callback, delay: number | null): void {\n const savedCallback = useRef<Callback>();\n\n useEffect(() => {\n savedCallback.current = callback;\n });\n\n useEffect(() => {\n if (delay === null) return undefined;\n\n function tick() {\n if (isFunction(savedCallback.current)) {\n savedCallback.current();\n }\n }\n const id = setInterval(tick, delay);\n return () => clearInterval(id);\n }, [delay]);\n}\n","import React, { CSSProperties, forwardRef, useCallback, useEffect, useRef, useState } from 'react';\n\nimport classNames from 'classnames';\n\nimport { SlideshowControls, SlideshowControlsProps, Theme } from '@lumx/react';\n\nimport { AUTOPLAY_DEFAULT_INTERVAL, FULL_WIDTH_PERCENT } from '@lumx/react/components/slideshow/constants';\nimport { useInterval } from '@lumx/react/hooks/useInterval';\nimport { Comp, GenericProps, getRootClassName, handleBasicClasses } from '@lumx/react/utils';\nimport { mergeRefs } from '@lumx/react/utils/mergeRefs';\n\n/**\n * Defines the props of the component.\n */\nexport interface SlideshowProps extends GenericProps {\n /** Index of the current slide. */\n activeIndex?: number;\n /** Whether the automatic rotation of the slideshow is enabled or not. */\n autoPlay?: boolean;\n /** Whether the image has to fill its container height or not. */\n fillHeight?: boolean;\n /** Number of slides to group together. */\n groupBy?: number;\n /** Interval between each slide when automatic rotation is enabled. */\n interval?: number;\n /** Props to pass to the slideshow controls (minus those already set by the Slideshow props). */\n slideshowControlsProps?: Pick<SlideshowControlsProps, 'nextButtonProps' | 'previousButtonProps'> &\n Omit<\n SlideshowControlsProps,\n | 'activeIndex'\n | 'onPaginationClick'\n | 'onNextClick'\n | 'onPreviousClick'\n | 'slidesCount'\n | 'parentRef'\n | 'theme'\n >;\n /** Theme adapting the component to light or dark background. */\n theme?: Theme;\n /** Callback when slide changes */\n onChange?(index: number): void;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'Slideshow';\n\n/**\n * Component default class name and class prefix.\n */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/**\n * Component default props.\n */\nconst DEFAULT_PROPS: Partial<SlideshowProps> = {\n activeIndex: 0,\n groupBy: 1,\n interval: AUTOPLAY_DEFAULT_INTERVAL,\n theme: Theme.light,\n};\n\n/**\n * Slideshow component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const Slideshow: Comp<SlideshowProps, HTMLDivElement> = forwardRef((props, ref) => {\n const {\n activeIndex,\n autoPlay,\n children,\n className,\n fillHeight,\n groupBy,\n interval,\n onChange,\n slideshowControlsProps,\n theme,\n ...forwardedProps\n } = props;\n const [currentIndex, setCurrentIndex] = useState(activeIndex as number);\n const rootRef: React.MutableRefObject<null> = useRef(null);\n\n // Number of slideshow items.\n const itemsCount = React.Children.count(children);\n // Number of slides when using groupBy prop.\n const slidesCount = Math.ceil(itemsCount / Math.min(groupBy as number, itemsCount));\n // Inline style of wrapper element.\n const wrapperStyle: CSSProperties = { transform: `translateX(-${FULL_WIDTH_PERCENT * currentIndex}%)` };\n\n // Change current index to display next slide.\n const goToNextSlide = useCallback(() => {\n if (currentIndex === slidesCount - 1) {\n setCurrentIndex(0);\n } else if (currentIndex < slidesCount - 1) {\n setCurrentIndex((index) => index + 1);\n }\n }, [currentIndex, slidesCount, setCurrentIndex]);\n\n // Change current index to display previous slide.\n const goToPreviousSlide = useCallback(() => {\n if (currentIndex === 0) {\n setCurrentIndex(slidesCount - 1);\n } else if (currentIndex > 0) {\n setCurrentIndex((index) => index - 1);\n }\n }, [currentIndex, slidesCount, setCurrentIndex]);\n\n // Auto play\n const [isAutoPlaying, setIsAutoPlaying] = useState(Boolean(autoPlay));\n // Start\n useInterval(goToNextSlide, isAutoPlaying && slidesCount > 1 ? (interval as number) : null);\n\n // Reset current index if it become invalid.\n useEffect(() => {\n if (currentIndex > slidesCount - 1) {\n setCurrentIndex(DEFAULT_PROPS.activeIndex as number);\n }\n }, [currentIndex, slidesCount]);\n\n // Handle click on a bullet to go to a specific slide.\n const handleControlGotToSlide = useCallback(\n (index: number) => {\n setIsAutoPlaying(false);\n\n if (index >= 0 && index < slidesCount) {\n setCurrentIndex(index);\n }\n },\n [slidesCount, setCurrentIndex],\n );\n\n // Handle click or keyboard event to go to next slide.\n const handleControlNextSlide = useCallback(() => {\n setIsAutoPlaying(false);\n goToNextSlide();\n }, [goToNextSlide]);\n\n // Handle click or keyboard event to go to previous slide.\n const handleControlPreviousSlide = useCallback(() => {\n setIsAutoPlaying(false);\n goToPreviousSlide();\n }, [goToPreviousSlide]);\n\n // If the activeIndex props changes, update the current slide\n useEffect(() => {\n setCurrentIndex(activeIndex as number);\n }, [activeIndex]);\n\n // If the slide changes, with autoplay for example, trigger \"onChange\"\n useEffect(() => {\n if (!onChange) return;\n onChange(currentIndex);\n }, [currentIndex, onChange]);\n\n /* eslint-disable jsx-a11y/no-noninteractive-tabindex */\n return (\n <div\n ref={mergeRefs(ref, rootRef)}\n {...forwardedProps}\n className={classNames(className, handleBasicClasses({ prefix: CLASSNAME, theme }), {\n [`${CLASSNAME}--fill-height`]: fillHeight,\n [`${CLASSNAME}--group-by-${groupBy}`]: Boolean(groupBy),\n })}\n tabIndex={0}\n >\n <div className={`${CLASSNAME}__slides`}>\n <div className={`${CLASSNAME}__wrapper`} style={wrapperStyle}>\n {children}\n </div>\n </div>\n\n {slideshowControlsProps && slidesCount > 1 && (\n <div className={`${CLASSNAME}__controls`}>\n <SlideshowControls\n {...slideshowControlsProps}\n activeIndex={currentIndex}\n onPaginationClick={handleControlGotToSlide}\n onNextClick={handleControlNextSlide}\n onPreviousClick={handleControlPreviousSlide}\n slidesCount={slidesCount}\n parentRef={rootRef}\n theme={theme}\n />\n </div>\n )}\n </div>\n );\n});\nSlideshow.displayName = COMPONENT_NAME;\nSlideshow.className = CLASSNAME;\nSlideshow.defaultProps = DEFAULT_PROPS;\n","import React, { forwardRef } from 'react';\n\nimport classNames from 'classnames';\n\nimport { Comp, GenericProps, getRootClassName, handleBasicClasses } from '@lumx/react/utils';\n\n/**\n * Defines the props of the component.\n */\nexport type SlideshowItemProps = GenericProps;\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'SlideshowItem';\n\n/**\n * Component default class name and class prefix.\n */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/**\n * SlideshowItem component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const SlideshowItem: Comp<SlideshowItemProps, HTMLDivElement> = forwardRef((props, ref) => {\n const { className, children, ...forwardedProps } = props;\n\n return (\n <div\n ref={ref}\n {...forwardedProps}\n className={classNames(\n className,\n handleBasicClasses({\n prefix: CLASSNAME,\n }),\n )}\n >\n {children}\n </div>\n );\n});\nSlideshowItem.displayName = COMPONENT_NAME;\nSlideshowItem.className = CLASSNAME;\n","import { useEffect } from 'react';\nimport { detectSwipe } from '@lumx/core/js/utils';\n\n/**\n * Listen keyboard and swipe to navigate left and right.\n */\nexport function useKeyOrSwipeNavigate(\n element?: HTMLElement | null,\n onNext?: () => void,\n onPrevious?: () => void,\n): void {\n useEffect(() => {\n if (!element) return undefined;\n\n const onNavigate = (evt: KeyboardEvent | string) => {\n let callback;\n if (typeof evt === 'string' ? evt === 'right' : evt?.key === 'ArrowRight') {\n callback = onPrevious;\n } else if (typeof evt === 'string' ? evt === 'left' : evt?.key === 'ArrowLeft') {\n callback = onNext;\n }\n\n callback?.();\n if (callback && typeof evt !== 'string') {\n evt.preventDefault();\n evt.stopPropagation();\n }\n };\n\n element.addEventListener('keydown', onNavigate);\n const removeSwipeListeners = detectSwipe(element, onNavigate);\n return () => {\n element.removeEventListener('keydown', onNavigate);\n removeSwipeListeners();\n };\n }, [onPrevious, onNext, element]);\n}\n","import { useMemo, useRef } from 'react';\nimport { EDGE_FROM_ACTIVE_INDEX, PAGINATION_ITEMS_MAX } from '@lumx/react/components/slideshow/constants';\n\ntype Range = { min: number; max: number };\n\n/**\n * Calculate the currently visible pagination \"bullet\" range.\n */\nexport function usePaginationVisibleRange(activeIndex: number, slideCount: number): Range {\n const previousVisibleRangeRef = useRef<Range>();\n return useMemo(() => {\n const lastSlide = slideCount - 1;\n const { current: previousVisibleRange } = previousVisibleRangeRef;\n let newVisibleRange: Range;\n if (activeIndex === previousVisibleRange?.max && activeIndex < lastSlide) {\n newVisibleRange = { min: previousVisibleRange.min + 1, max: previousVisibleRange.max + 1 };\n } else if (activeIndex === previousVisibleRange?.min && activeIndex > 0) {\n newVisibleRange = { min: previousVisibleRange.min - 1, max: previousVisibleRange.max - 1 };\n } else {\n const deltaItems = PAGINATION_ITEMS_MAX - 1;\n let min = activeIndex - EDGE_FROM_ACTIVE_INDEX;\n let max = activeIndex + EDGE_FROM_ACTIVE_INDEX;\n\n if (activeIndex > lastSlide - EDGE_FROM_ACTIVE_INDEX) {\n min = lastSlide - deltaItems;\n max = lastSlide;\n } else if (activeIndex < deltaItems) {\n min = 0;\n max = deltaItems;\n }\n\n newVisibleRange = { min, max };\n }\n previousVisibleRangeRef.current = newVisibleRange;\n return newVisibleRange;\n }, [activeIndex, slideCount]);\n}\n","import React, { forwardRef, RefObject, useMemo } from 'react';\n\nimport classNames from 'classnames';\nimport range from 'lodash/range';\n\nimport { mdiChevronLeft, mdiChevronRight } from '@lumx/icons';\nimport { Emphasis, IconButton, IconButtonProps, Theme } from '@lumx/react';\nimport { Comp, GenericProps, getRootClassName, handleBasicClasses } from '@lumx/react/utils';\nimport { useKeyOrSwipeNavigate } from '@lumx/react/components/slideshow/useKeyOrSwipeNavigate';\n\nimport { PAGINATION_ITEM_SIZE, PAGINATION_ITEMS_MAX } from './constants';\nimport { usePaginationVisibleRange } from './usePaginationVisibleRange';\n\n/**\n * Defines the props of the component.\n */\nexport interface SlideshowControlsProps extends GenericProps {\n /** Index of the current slide. */\n activeIndex?: number;\n /** Props to pass to the next button (minus those already set by the SlideshowControls props). */\n nextButtonProps: Pick<IconButtonProps, 'label'> &\n Omit<IconButtonProps, 'label' | 'onClick' | 'icon' | 'emphasis' | 'color'>;\n /** Reference to the parent element. */\n parentRef: RefObject<HTMLDivElement>;\n /** Props to pass to the previous button (minus those already set by the SlideshowControls props). */\n previousButtonProps: Pick<IconButtonProps, 'label'> &\n Omit<IconButtonProps, 'label' | 'onClick' | 'icon' | 'emphasis' | 'color'>;\n /** Number of slides. */\n slidesCount: number;\n /** Theme adapting the component to light or dark background. */\n theme?: Theme;\n /** On next button click callback. */\n onNextClick?(): void;\n /** On pagination change callback. */\n onPaginationClick?(index: number): void;\n /** On previous button click callback. */\n onPreviousClick?(): void;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'SlideshowControls';\n\n/**\n * Component default class name and class prefix.\n */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/**\n * Component default props.\n */\nconst DEFAULT_PROPS: Partial<SlideshowControlsProps> = {\n activeIndex: 0,\n theme: Theme.light,\n};\n\n/**\n * SlideshowControls component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const SlideshowControls: Comp<SlideshowControlsProps, HTMLDivElement> = forwardRef((props, ref) => {\n const {\n activeIndex,\n className,\n nextButtonProps,\n onNextClick,\n onPaginationClick,\n onPreviousClick,\n parentRef,\n previousButtonProps,\n slidesCount,\n theme,\n ...forwardedProps\n } = props;\n\n // Listen to keyboard & touch swipe to navigate left & right.\n useKeyOrSwipeNavigate(parentRef.current, onNextClick, onPreviousClick);\n\n // Pagination \"bullet\" range.\n const visibleRange = usePaginationVisibleRange(activeIndex as number, slidesCount);\n\n // Inline style of wrapper element.\n const wrapperStyle = { transform: `translateX(-${PAGINATION_ITEM_SIZE * visibleRange.min}px)` };\n\n return (\n <div\n ref={ref}\n {...forwardedProps}\n className={classNames(className, handleBasicClasses({ prefix: CLASSNAME, theme }), {\n [`${CLASSNAME}--has-infinite-pagination`]: slidesCount > PAGINATION_ITEMS_MAX,\n })}\n >\n <IconButton\n {...previousButtonProps}\n icon={mdiChevronLeft}\n className={`${CLASSNAME}__navigation`}\n color={theme === Theme.dark ? 'light' : 'dark'}\n emphasis={Emphasis.low}\n onClick={onPreviousClick}\n tabIndex={-1}\n />\n <div className={`${CLASSNAME}__pagination`}>\n <div className={`${CLASSNAME}__pagination-items`} style={wrapperStyle}>\n {useMemo(\n () =>\n range(slidesCount).map((index) => {\n const isOnEdge =\n index !== 0 &&\n index !== slidesCount - 1 &&\n (index === visibleRange.min || index === visibleRange.max);\n const isActive = activeIndex === index;\n const isOutRange = index < visibleRange.min || index > visibleRange.max;\n return (\n // eslint-disable-next-line jsx-a11y/control-has-associated-label\n <button\n className={classNames(\n handleBasicClasses({\n prefix: `${CLASSNAME}__pagination-item`,\n isActive,\n isOnEdge,\n isOutRange,\n }),\n )}\n key={index}\n type=\"button\"\n onClick={() => onPaginationClick?.(index)}\n tabIndex={-1}\n />\n );\n }),\n [slidesCount, visibleRange.min, visibleRange.max, activeIndex, onPaginationClick],\n )}\n </div>\n </div>\n <IconButton\n {...nextButtonProps}\n icon={mdiChevronRight}\n className={`${CLASSNAME}__navigation`}\n color={theme === Theme.dark ? 'light' : 'dark'}\n emphasis={Emphasis.low}\n onClick={onNextClick}\n tabIndex={-1}\n />\n </div>\n );\n});\nSlideshowControls.displayName = COMPONENT_NAME;\nSlideshowControls.className = CLASSNAME;\nSlideshowControls.defaultProps = DEFAULT_PROPS;\n"],"names":["AUTOPLAY_DEFAULT_INTERVAL","FULL_WIDTH_PERCENT","EDGE_FROM_ACTIVE_INDEX","PAGINATION_ITEMS_MAX","PAGINATION_ITEM_SIZE","useInterval","callback","delay","savedCallback","useRef","useEffect","current","undefined","tick","isFunction","id","setInterval","clearInterval","COMPONENT_NAME","CLASSNAME","getRootClassName","DEFAULT_PROPS","activeIndex","groupBy","interval","theme","Theme","light","Slideshow","forwardRef","props","ref","autoPlay","children","className","fillHeight","onChange","slideshowControlsProps","forwardedProps","useState","currentIndex","setCurrentIndex","rootRef","itemsCount","React","Children","count","slidesCount","Math","ceil","min","wrapperStyle","transform","goToNextSlide","useCallback","index","goToPreviousSlide","Boolean","isAutoPlaying","setIsAutoPlaying","handleControlGotToSlide","handleControlNextSlide","handleControlPreviousSlide","mergeRefs","classNames","handleBasicClasses","prefix","displayName","defaultProps","SlideshowItem","useKeyOrSwipeNavigate","element","onNext","onPrevious","onNavigate","evt","key","preventDefault","stopPropagation","addEventListener","removeSwipeListeners","detectSwipe","removeEventListener","usePaginationVisibleRange","slideCount","previousVisibleRangeRef","useMemo","lastSlide","previousVisibleRange","newVisibleRange","max","deltaItems","SlideshowControls","nextButtonProps","onNextClick","onPaginationClick","onPreviousClick","parentRef","previousButtonProps","visibleRange","mdiChevronLeft","dark","Emphasis","low","range","map","isOnEdge","isActive","isOutRange","mdiChevronRight"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SlideshowControls.js","sources":["../../../src/components/slideshow/constants.ts","../../../src/hooks/useInterval.tsx","../../../src/components/slideshow/Slideshow.tsx","../../../src/components/slideshow/SlideshowItem.tsx","../../../src/components/slideshow/useSwipeNavigate.ts","../../../src/components/slideshow/useKeyNavigate.ts","../../../src/components/slideshow/usePaginationVisibleRange.ts","../../../src/components/slideshow/SlideshowControls.tsx"],"sourcesContent":["/**\n * Autoplay default interval in ms.\n */\nexport const AUTOPLAY_DEFAULT_INTERVAL = 5000;\n\n/**\n * Full width size in percent.\n */\nexport const FULL_WIDTH_PERCENT = 100;\n\n/**\n * Edge from the active index.\n */\nexport const EDGE_FROM_ACTIVE_INDEX = 2;\n\n/**\n * Max number of pagination items.\n */\nexport const PAGINATION_ITEMS_MAX = 5;\n\n/**\n * Size of a pagination item. Used to translate wrapper.\n */\nexport const PAGINATION_ITEM_SIZE = 12;\n","import { useEffect, useRef } from 'react';\n\nimport isFunction from 'lodash/isFunction';\nimport { Callback } from '../utils';\n\n/**\n * Making setInterval Declarative with React Hooks.\n * Credits: https://overreacted.io/making-setinterval-declarative-with-react-hooks/\n *\n * @param callback Function called by setInterval.\n * @param delay Delay for setInterval.\n */\nexport function useInterval(callback: Callback, delay: number | null): void {\n const savedCallback = useRef<Callback>();\n\n useEffect(() => {\n savedCallback.current = callback;\n });\n\n useEffect(() => {\n if (delay === null) return undefined;\n\n function tick() {\n if (isFunction(savedCallback.current)) {\n savedCallback.current();\n }\n }\n const id = setInterval(tick, delay);\n return () => clearInterval(id);\n }, [delay]);\n}\n","import React, { CSSProperties, forwardRef, useCallback, useEffect, useState } from 'react';\n\nimport classNames from 'classnames';\n\nimport { SlideshowControls, SlideshowControlsProps, Theme } from '@lumx/react';\n\nimport { AUTOPLAY_DEFAULT_INTERVAL, FULL_WIDTH_PERCENT } from '@lumx/react/components/slideshow/constants';\nimport { useInterval } from '@lumx/react/hooks/useInterval';\nimport { Comp, GenericProps, getRootClassName, handleBasicClasses } from '@lumx/react/utils';\nimport { mergeRefs } from '@lumx/react/utils/mergeRefs';\n\n/**\n * Defines the props of the component.\n */\nexport interface SlideshowProps extends GenericProps {\n /** Index of the current slide. */\n activeIndex?: number;\n /** Whether the automatic rotation of the slideshow is enabled or not. */\n autoPlay?: boolean;\n /** Whether the image has to fill its container height or not. */\n fillHeight?: boolean;\n /** Number of slides to group together. */\n groupBy?: number;\n /** Interval between each slide when automatic rotation is enabled. */\n interval?: number;\n /** Props to pass to the slideshow controls (minus those already set by the Slideshow props). */\n slideshowControlsProps?: Pick<SlideshowControlsProps, 'nextButtonProps' | 'previousButtonProps'> &\n Omit<\n SlideshowControlsProps,\n | 'activeIndex'\n | 'onPaginationClick'\n | 'onNextClick'\n | 'onPreviousClick'\n | 'slidesCount'\n | 'parentRef'\n | 'theme'\n >;\n /** Theme adapting the component to light or dark background. */\n theme?: Theme;\n /** Callback when slide changes */\n onChange?(index: number): void;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'Slideshow';\n\n/**\n * Component default class name and class prefix.\n */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/**\n * Component default props.\n */\nconst DEFAULT_PROPS: Partial<SlideshowProps> = {\n activeIndex: 0,\n groupBy: 1,\n interval: AUTOPLAY_DEFAULT_INTERVAL,\n theme: Theme.light,\n};\n\n/**\n * Slideshow component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const Slideshow: Comp<SlideshowProps, HTMLDivElement> = forwardRef((props, ref) => {\n const {\n activeIndex,\n autoPlay,\n children,\n className,\n fillHeight,\n groupBy,\n interval,\n onChange,\n slideshowControlsProps,\n theme,\n ...forwardedProps\n } = props;\n const [currentIndex, setCurrentIndex] = useState(activeIndex as number);\n // Use state instead of a ref to make the slideshow controls update directly when the element is set.\n const [element, setElement] = useState<HTMLDivElement>();\n\n // Number of slideshow items.\n const itemsCount = React.Children.count(children);\n // Number of slides when using groupBy prop.\n const slidesCount = Math.ceil(itemsCount / Math.min(groupBy as number, itemsCount));\n // Inline style of wrapper element.\n const wrapperStyle: CSSProperties = { transform: `translateX(-${FULL_WIDTH_PERCENT * currentIndex}%)` };\n\n // Change current index to display next slide.\n const goToNextSlide = useCallback(\n (loopback = true) => {\n setCurrentIndex((index) => {\n if (loopback && index === slidesCount - 1) {\n // Loopback to the start.\n return 0;\n }\n if (index < slidesCount - 1) {\n // Next slide.\n return index + 1;\n }\n return index;\n });\n },\n [slidesCount, setCurrentIndex],\n );\n\n // Change current index to display previous slide.\n const goToPreviousSlide = useCallback(\n (loopback = true) => {\n setCurrentIndex((index) => {\n if (loopback && index === 0) {\n // Loopback to the end.\n return slidesCount - 1;\n }\n if (index > 0) {\n // Previous slide.\n return index - 1;\n }\n return index;\n });\n },\n [slidesCount, setCurrentIndex],\n );\n\n // Auto play\n const [isAutoPlaying, setIsAutoPlaying] = useState(Boolean(autoPlay));\n // Start\n useInterval(goToNextSlide, isAutoPlaying && slidesCount > 1 ? (interval as number) : null);\n\n // Reset current index if it become invalid.\n useEffect(() => {\n if (currentIndex > slidesCount - 1) {\n setCurrentIndex(DEFAULT_PROPS.activeIndex as number);\n }\n }, [currentIndex, slidesCount]);\n\n // Handle click on a bullet to go to a specific slide.\n const handleControlGotToSlide = useCallback(\n (index: number) => {\n setIsAutoPlaying(false);\n\n if (index >= 0 && index < slidesCount) {\n setCurrentIndex(index);\n }\n },\n [slidesCount, setCurrentIndex],\n );\n\n // Handle click or keyboard event to go to next slide.\n const handleControlNextSlide = useCallback(\n (loopback = true) => {\n setIsAutoPlaying(false);\n goToNextSlide(loopback);\n },\n [goToNextSlide],\n );\n\n // Handle click or keyboard event to go to previous slide.\n const handleControlPreviousSlide = useCallback(\n (loopback = true) => {\n setIsAutoPlaying(false);\n goToPreviousSlide(loopback);\n },\n [goToPreviousSlide],\n );\n\n // If the activeIndex props changes, update the current slide\n useEffect(() => {\n setCurrentIndex(activeIndex as number);\n }, [activeIndex]);\n\n // If the slide changes, with autoplay for example, trigger \"onChange\"\n useEffect(() => {\n if (!onChange) return;\n onChange(currentIndex);\n }, [currentIndex, onChange]);\n\n /* eslint-disable jsx-a11y/no-noninteractive-tabindex */\n return (\n <div\n ref={mergeRefs(ref, setElement)}\n {...forwardedProps}\n className={classNames(className, handleBasicClasses({ prefix: CLASSNAME, theme }), {\n [`${CLASSNAME}--fill-height`]: fillHeight,\n [`${CLASSNAME}--group-by-${groupBy}`]: Boolean(groupBy),\n })}\n tabIndex={0}\n >\n <div className={`${CLASSNAME}__slides`}>\n <div className={`${CLASSNAME}__wrapper`} style={wrapperStyle}>\n {children}\n </div>\n </div>\n\n {slideshowControlsProps && slidesCount > 1 && (\n <div className={`${CLASSNAME}__controls`}>\n <SlideshowControls\n {...slideshowControlsProps}\n activeIndex={currentIndex}\n onPaginationClick={handleControlGotToSlide}\n onNextClick={handleControlNextSlide}\n onPreviousClick={handleControlPreviousSlide}\n slidesCount={slidesCount}\n parentRef={element}\n theme={theme}\n />\n </div>\n )}\n </div>\n );\n});\nSlideshow.displayName = COMPONENT_NAME;\nSlideshow.className = CLASSNAME;\nSlideshow.defaultProps = DEFAULT_PROPS;\n","import React, { forwardRef } from 'react';\n\nimport classNames from 'classnames';\n\nimport { Comp, GenericProps, getRootClassName, handleBasicClasses } from '@lumx/react/utils';\n\n/**\n * Defines the props of the component.\n */\nexport type SlideshowItemProps = GenericProps;\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'SlideshowItem';\n\n/**\n * Component default class name and class prefix.\n */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/**\n * SlideshowItem component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const SlideshowItem: Comp<SlideshowItemProps, HTMLDivElement> = forwardRef((props, ref) => {\n const { className, children, ...forwardedProps } = props;\n\n return (\n <div\n ref={ref}\n {...forwardedProps}\n className={classNames(\n className,\n handleBasicClasses({\n prefix: CLASSNAME,\n }),\n )}\n >\n {children}\n </div>\n );\n});\nSlideshowItem.displayName = COMPONENT_NAME;\nSlideshowItem.className = CLASSNAME;\n","import { useEffect } from 'react';\nimport { detectHorizontalSwipe } from '@lumx/core/js/utils';\n\nconst isTouchDevice = () => 'ontouchstart' in window;\n\n/**\n * Listen swipe to navigate left and right.\n */\nexport function useSwipeNavigate(element?: HTMLElement | null, onNext?: () => void, onPrevious?: () => void): void {\n useEffect(() => {\n if (!element || !isTouchDevice()) return undefined;\n\n return detectHorizontalSwipe(element, (swipe) => {\n const callback = swipe === 'right' ? onPrevious : onNext;\n callback?.();\n });\n }, [onPrevious, onNext, element]);\n}\n","import { useEffect } from 'react';\n\n/**\n * Listen keyboard to navigate left and right.\n */\nexport function useKeyNavigate(element?: HTMLElement | null, onNext?: () => void, onPrevious?: () => void): void {\n useEffect(() => {\n if (!element) return undefined;\n const onKeyNavigate = (evt: KeyboardEvent) => {\n let callback;\n if (evt?.key === 'ArrowRight') {\n callback = onPrevious;\n } else if (evt?.key === 'ArrowLeft') {\n callback = onNext;\n }\n if (!callback) return;\n\n callback();\n evt.preventDefault();\n evt.stopPropagation();\n };\n\n element.addEventListener('keydown', onKeyNavigate);\n return () => {\n element.removeEventListener('keydown', onKeyNavigate);\n };\n }, [onPrevious, onNext, element]);\n}\n","import { useMemo, useRef } from 'react';\nimport { EDGE_FROM_ACTIVE_INDEX, PAGINATION_ITEMS_MAX } from '@lumx/react/components/slideshow/constants';\n\ntype Range = { min: number; max: number };\n\n/**\n * Calculate the currently visible pagination \"bullet\" range.\n */\nexport function usePaginationVisibleRange(activeIndex: number, slideCount: number): Range {\n const previousVisibleRangeRef = useRef<Range>();\n return useMemo(() => {\n const lastSlide = slideCount - 1;\n const { current: previousVisibleRange } = previousVisibleRangeRef;\n let newVisibleRange: Range;\n if (activeIndex === previousVisibleRange?.max && activeIndex < lastSlide) {\n newVisibleRange = { min: previousVisibleRange.min + 1, max: previousVisibleRange.max + 1 };\n } else if (activeIndex === previousVisibleRange?.min && activeIndex > 0) {\n newVisibleRange = { min: previousVisibleRange.min - 1, max: previousVisibleRange.max - 1 };\n } else {\n const deltaItems = PAGINATION_ITEMS_MAX - 1;\n let min = activeIndex - EDGE_FROM_ACTIVE_INDEX;\n let max = activeIndex + EDGE_FROM_ACTIVE_INDEX;\n\n if (activeIndex > lastSlide - EDGE_FROM_ACTIVE_INDEX) {\n min = lastSlide - deltaItems;\n max = lastSlide;\n } else if (activeIndex < deltaItems) {\n min = 0;\n max = deltaItems;\n }\n\n newVisibleRange = { min, max };\n }\n previousVisibleRangeRef.current = newVisibleRange;\n return newVisibleRange;\n }, [activeIndex, slideCount]);\n}\n","import React, { forwardRef, RefObject, useCallback, useMemo } from 'react';\n\nimport classNames from 'classnames';\nimport range from 'lodash/range';\n\nimport { mdiChevronLeft, mdiChevronRight } from '@lumx/icons';\nimport { Emphasis, IconButton, IconButtonProps, Theme } from '@lumx/react';\nimport { Comp, GenericProps, getRootClassName, handleBasicClasses } from '@lumx/react/utils';\nimport { WINDOW } from '@lumx/react/constants';\n\nimport { useSwipeNavigate } from './useSwipeNavigate';\nimport { useKeyNavigate } from './useKeyNavigate';\nimport { PAGINATION_ITEM_SIZE, PAGINATION_ITEMS_MAX } from './constants';\nimport { usePaginationVisibleRange } from './usePaginationVisibleRange';\n\n/**\n * Defines the props of the component.\n */\nexport interface SlideshowControlsProps extends GenericProps {\n /** Index of the current slide. */\n activeIndex?: number;\n /** Props to pass to the next button (minus those already set by the SlideshowControls props). */\n nextButtonProps: Pick<IconButtonProps, 'label'> &\n Omit<IconButtonProps, 'label' | 'onClick' | 'icon' | 'emphasis' | 'color'>;\n /** Reference to the parent element on which we want to listen touch swipe. */\n parentRef?: RefObject<HTMLDivElement> | HTMLDivElement;\n /** Props to pass to the previous button (minus those already set by the SlideshowControls props). */\n previousButtonProps: Pick<IconButtonProps, 'label'> &\n Omit<IconButtonProps, 'label' | 'onClick' | 'icon' | 'emphasis' | 'color'>;\n /** Number of slides. */\n slidesCount: number;\n /** Theme adapting the component to light or dark background. */\n theme?: Theme;\n /** On next button click callback. */\n onNextClick?(loopback?: boolean): void;\n /** On pagination change callback. */\n onPaginationClick?(index: number): void;\n /** On previous button click callback. */\n onPreviousClick?(loopback?: boolean): void;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'SlideshowControls';\n\n/**\n * Component default class name and class prefix.\n */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/**\n * Component default props.\n */\nconst DEFAULT_PROPS: Partial<SlideshowControlsProps> = {\n activeIndex: 0,\n theme: Theme.light,\n};\n\n/**\n * SlideshowControls component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const SlideshowControls: Comp<SlideshowControlsProps, HTMLDivElement> = forwardRef((props, ref) => {\n const {\n activeIndex,\n className,\n nextButtonProps,\n onNextClick,\n onPaginationClick,\n onPreviousClick,\n parentRef,\n previousButtonProps,\n slidesCount,\n theme,\n ...forwardedProps\n } = props;\n\n let parent;\n if (WINDOW) {\n // Checking window object to avoid errors in SSR.\n parent = parentRef instanceof HTMLElement ? parentRef : parentRef?.current;\n }\n // Listen to keyboard navigate left & right.\n useKeyNavigate(parent, onNextClick, onPreviousClick);\n // Listen to touch swipe navigate left & right.\n useSwipeNavigate(\n parent,\n // Go next without loopback.\n useCallback(() => onNextClick?.(false), [onNextClick]),\n // Go previous without loopback.\n useCallback(() => onPreviousClick?.(false), [onPreviousClick]),\n );\n\n // Pagination \"bullet\" range.\n const visibleRange = usePaginationVisibleRange(activeIndex as number, slidesCount);\n\n // Inline style of wrapper element.\n const wrapperStyle = { transform: `translateX(-${PAGINATION_ITEM_SIZE * visibleRange.min}px)` };\n\n return (\n <div\n ref={ref}\n {...forwardedProps}\n className={classNames(className, handleBasicClasses({ prefix: CLASSNAME, theme }), {\n [`${CLASSNAME}--has-infinite-pagination`]: slidesCount > PAGINATION_ITEMS_MAX,\n })}\n >\n <IconButton\n {...previousButtonProps}\n icon={mdiChevronLeft}\n className={`${CLASSNAME}__navigation`}\n color={theme === Theme.dark ? 'light' : 'dark'}\n emphasis={Emphasis.low}\n onClick={onPreviousClick}\n tabIndex={-1}\n />\n <div className={`${CLASSNAME}__pagination`}>\n <div className={`${CLASSNAME}__pagination-items`} style={wrapperStyle}>\n {useMemo(\n () =>\n range(slidesCount).map((index) => {\n const isOnEdge =\n index !== 0 &&\n index !== slidesCount - 1 &&\n (index === visibleRange.min || index === visibleRange.max);\n const isActive = activeIndex === index;\n const isOutRange = index < visibleRange.min || index > visibleRange.max;\n return (\n // eslint-disable-next-line jsx-a11y/control-has-associated-label\n <button\n className={classNames(\n handleBasicClasses({\n prefix: `${CLASSNAME}__pagination-item`,\n isActive,\n isOnEdge,\n isOutRange,\n }),\n )}\n key={index}\n type=\"button\"\n onClick={() => onPaginationClick?.(index)}\n tabIndex={-1}\n />\n );\n }),\n [slidesCount, visibleRange.min, visibleRange.max, activeIndex, onPaginationClick],\n )}\n </div>\n </div>\n <IconButton\n {...nextButtonProps}\n icon={mdiChevronRight}\n className={`${CLASSNAME}__navigation`}\n color={theme === Theme.dark ? 'light' : 'dark'}\n emphasis={Emphasis.low}\n onClick={onNextClick}\n tabIndex={-1}\n />\n </div>\n );\n});\nSlideshowControls.displayName = COMPONENT_NAME;\nSlideshowControls.className = CLASSNAME;\nSlideshowControls.defaultProps = DEFAULT_PROPS;\n"],"names":["AUTOPLAY_DEFAULT_INTERVAL","FULL_WIDTH_PERCENT","EDGE_FROM_ACTIVE_INDEX","PAGINATION_ITEMS_MAX","PAGINATION_ITEM_SIZE","useInterval","callback","delay","savedCallback","useRef","useEffect","current","undefined","tick","isFunction","id","setInterval","clearInterval","COMPONENT_NAME","CLASSNAME","getRootClassName","DEFAULT_PROPS","activeIndex","groupBy","interval","theme","Theme","light","Slideshow","forwardRef","props","ref","autoPlay","children","className","fillHeight","onChange","slideshowControlsProps","forwardedProps","useState","currentIndex","setCurrentIndex","element","setElement","itemsCount","React","Children","count","slidesCount","Math","ceil","min","wrapperStyle","transform","goToNextSlide","useCallback","loopback","index","goToPreviousSlide","Boolean","isAutoPlaying","setIsAutoPlaying","handleControlGotToSlide","handleControlNextSlide","handleControlPreviousSlide","mergeRefs","classNames","handleBasicClasses","prefix","displayName","defaultProps","SlideshowItem","isTouchDevice","window","useSwipeNavigate","onNext","onPrevious","detectHorizontalSwipe","swipe","useKeyNavigate","onKeyNavigate","evt","key","preventDefault","stopPropagation","addEventListener","removeEventListener","usePaginationVisibleRange","slideCount","previousVisibleRangeRef","useMemo","lastSlide","previousVisibleRange","newVisibleRange","max","deltaItems","SlideshowControls","nextButtonProps","onNextClick","onPaginationClick","onPreviousClick","parentRef","previousButtonProps","parent","WINDOW","HTMLElement","visibleRange","mdiChevronLeft","dark","Emphasis","low","range","map","isOnEdge","isActive","isOutRange","mdiChevronRight"],"mappings":"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"}
|
package/esm/_internal/Switch2.js
CHANGED
|
@@ -79,12 +79,14 @@ var Switch = forwardRef(function (props, ref) {
|
|
|
79
79
|
className: "".concat(CLASSNAME, "__input-wrapper")
|
|
80
80
|
}, React.createElement("input", {
|
|
81
81
|
type: "checkbox",
|
|
82
|
+
role: "switch",
|
|
82
83
|
id: switchId,
|
|
83
84
|
className: "".concat(CLASSNAME, "__input-native"),
|
|
84
85
|
name: name,
|
|
85
86
|
value: value,
|
|
86
87
|
disabled: isDisabled,
|
|
87
88
|
checked: isChecked,
|
|
89
|
+
"aria-checked": Boolean(isChecked),
|
|
88
90
|
onChange: handleChange
|
|
89
91
|
}), React.createElement("div", {
|
|
90
92
|
className: "".concat(CLASSNAME, "__input-placeholder")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Switch2.js","sources":["../../../src/components/switch/Switch.tsx"],"sourcesContent":["import React, { Children, forwardRef, SyntheticEvent, useMemo } from 'react';\n\nimport classNames from 'classnames';\nimport { uid } from 'uid';\n\nimport isEmpty from 'lodash/isEmpty';\n\nimport { Alignment, InputHelper, InputLabel, Theme } from '@lumx/react';\n\nimport { Comp, GenericProps, getRootClassName, handleBasicClasses } from '@lumx/react/utils';\n\n/**\n * Defines the props of the component.\n */\nexport interface SwitchProps extends GenericProps {\n /** Helper text. */\n helper?: string;\n /** Whether it is checked or not. */\n isChecked?: boolean;\n /** Whether the component is disabled or not. */\n isDisabled?: boolean;\n /** Native input name property. */\n name?: string;\n /** Position of the switch relative to the label. */\n position?: Extract<Alignment, 'right' | 'left'>;\n /** Theme adapting the component to light or dark background. */\n theme?: Theme;\n /** Native input value property. */\n value?: string;\n /** On change callback. */\n onChange?(isChecked: boolean, value?: string, name?: string, event?: SyntheticEvent): void;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'Switch';\n\n/**\n * Component default class name and class prefix.\n */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/**\n * Component default props.\n */\nconst DEFAULT_PROPS: Partial<SwitchProps> = {\n position: Alignment.left,\n theme: Theme.light,\n};\n\n/**\n * Switch component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const Switch: Comp<SwitchProps, HTMLDivElement> = forwardRef((props, ref) => {\n const {\n checked,\n children,\n className,\n disabled,\n helper,\n id,\n isChecked = checked,\n isDisabled = disabled,\n name,\n onChange,\n position,\n theme,\n value,\n ...forwardedProps\n } = props;\n const switchId = useMemo(() => id || `switch-${uid()}`, [id]);\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (onChange) {\n onChange(!isChecked, value, name, event);\n }\n };\n\n return (\n <div\n ref={ref}\n {...forwardedProps}\n className={classNames(\n className,\n handleBasicClasses({\n prefix: CLASSNAME,\n isChecked,\n isDisabled,\n position,\n theme,\n isUnchecked: !isChecked,\n }),\n )}\n aria-disabled={isDisabled}\n >\n <div className={`${CLASSNAME}__input-wrapper`}>\n <input\n type=\"checkbox\"\n id={switchId}\n className={`${CLASSNAME}__input-native`}\n name={name}\n value={value}\n disabled={isDisabled}\n checked={isChecked}\n onChange={handleChange}\n />\n\n <div className={`${CLASSNAME}__input-placeholder`}>\n <div className={`${CLASSNAME}__input-background`} />\n <div className={`${CLASSNAME}__input-indicator`} />\n </div>\n </div>\n\n {Children.count(children) > 0 && (\n <div className={`${CLASSNAME}__content`}>\n <InputLabel htmlFor={switchId} theme={theme} className={`${CLASSNAME}__label`}>\n {children}\n </InputLabel>\n {!isEmpty(helper) && (\n <InputHelper theme={theme} className={`${CLASSNAME}__helper`}>\n {helper}\n </InputHelper>\n )}\n </div>\n )}\n </div>\n );\n});\nSwitch.displayName = COMPONENT_NAME;\nSwitch.className = CLASSNAME;\nSwitch.defaultProps = DEFAULT_PROPS;\n"],"names":["COMPONENT_NAME","CLASSNAME","getRootClassName","DEFAULT_PROPS","position","Alignment","left","theme","Theme","light","Switch","forwardRef","props","ref","checked","children","className","disabled","helper","id","isChecked","isDisabled","name","onChange","value","forwardedProps","switchId","useMemo","uid","handleChange","event","classNames","handleBasicClasses","prefix","isUnchecked","Children","count","isEmpty","displayName","defaultProps"],"mappings":";;;;;;;;AAWA;;;;AAsBA;;;AAGA,IAAMA,cAAc,GAAG,QAAvB;AAEA;;;;AAGA,IAAMC,SAAS,GAAGC,gBAAgB,CAACF,cAAD,CAAlC;AAEA;;;;AAGA,IAAMG,aAAmC,GAAG;AACxCC,EAAAA,QAAQ,EAAEC,SAAS,CAACC,IADoB;AAExCC,EAAAA,KAAK,EAAEC,KAAK,CAACC;AAF2B,CAA5C;AAKA;;;;;;;;IAOaC,MAAyC,GAAGC,UAAU,CAAC,UAACC,KAAD,EAAQC,GAAR,EAAgB;AAAA,MAE5EC,OAF4E,GAgB5EF,KAhB4E,CAE5EE,OAF4E;AAAA,MAG5EC,QAH4E,GAgB5EH,KAhB4E,CAG5EG,QAH4E;AAAA,MAI5EC,SAJ4E,GAgB5EJ,KAhB4E,CAI5EI,SAJ4E;AAAA,MAK5EC,QAL4E,GAgB5EL,KAhB4E,CAK5EK,QAL4E;AAAA,MAM5EC,MAN4E,GAgB5EN,KAhB4E,CAM5EM,MAN4E;AAAA,MAO5EC,EAP4E,GAgB5EP,KAhB4E,CAO5EO,EAP4E;AAAA,yBAgB5EP,KAhB4E,CAQ5EQ,SAR4E;AAAA,MAQ5EA,SAR4E,iCAQhEN,OARgE;AAAA,0BAgB5EF,KAhB4E,CAS5ES,UAT4E;AAAA,MAS5EA,UAT4E,kCAS/DJ,QAT+D;AAAA,MAU5EK,IAV4E,GAgB5EV,KAhB4E,CAU5EU,IAV4E;AAAA,MAW5EC,QAX4E,GAgB5EX,KAhB4E,CAW5EW,QAX4E;AAAA,MAY5EnB,QAZ4E,GAgB5EQ,KAhB4E,CAY5ER,QAZ4E;AAAA,MAa5EG,KAb4E,GAgB5EK,KAhB4E,CAa5EL,KAb4E;AAAA,MAc5EiB,KAd4E,GAgB5EZ,KAhB4E,CAc5EY,KAd4E;AAAA,MAezEC,cAfyE,4BAgB5Eb,KAhB4E;;AAiBhF,MAAMc,QAAQ,GAAGC,OAAO,CAAC;AAAA,WAAMR,EAAE,qBAAcS,GAAG,EAAjB,CAAR;AAAA,GAAD,EAAgC,CAACT,EAAD,CAAhC,CAAxB;;AACA,MAAMU,YAAY,GAAG,SAAfA,YAAe,CAACC,KAAD,EAAgD;AACjE,QAAIP,QAAJ,EAAc;AACVA,MAAAA,QAAQ,CAAC,CAACH,SAAF,EAAaI,KAAb,EAAoBF,IAApB,EAA0BQ,KAA1B,CAAR;AACH;AACJ,GAJD;;AAMA,SACI;AACI,IAAA,GAAG,EAAEjB;AADT,KAEQY,cAFR;AAGI,IAAA,SAAS,EAAEM,UAAU,CACjBf,SADiB,EAEjBgB,kBAAkB,CAAC;AACfC,MAAAA,MAAM,EAAEhC,SADO;AAEfmB,MAAAA,SAAS,EAATA,SAFe;AAGfC,MAAAA,UAAU,EAAVA,UAHe;AAIfjB,MAAAA,QAAQ,EAARA,QAJe;AAKfG,MAAAA,KAAK,EAALA,KALe;AAMf2B,MAAAA,WAAW,EAAE,CAACd;AANC,KAAD,CAFD,CAHzB;AAcI,qBAAeC;AAdnB,MAgBI;AAAK,IAAA,SAAS,YAAKpB,SAAL;AAAd,KACI;AACI,IAAA,IAAI,EAAC,UADT;AAEI,IAAA,EAAE,EAAEyB,
|
|
1
|
+
{"version":3,"file":"Switch2.js","sources":["../../../src/components/switch/Switch.tsx"],"sourcesContent":["import React, { Children, forwardRef, SyntheticEvent, useMemo } from 'react';\n\nimport classNames from 'classnames';\nimport { uid } from 'uid';\n\nimport isEmpty from 'lodash/isEmpty';\n\nimport { Alignment, InputHelper, InputLabel, Theme } from '@lumx/react';\n\nimport { Comp, GenericProps, getRootClassName, handleBasicClasses } from '@lumx/react/utils';\n\n/**\n * Defines the props of the component.\n */\nexport interface SwitchProps extends GenericProps {\n /** Helper text. */\n helper?: string;\n /** Whether it is checked or not. */\n isChecked?: boolean;\n /** Whether the component is disabled or not. */\n isDisabled?: boolean;\n /** Native input name property. */\n name?: string;\n /** Position of the switch relative to the label. */\n position?: Extract<Alignment, 'right' | 'left'>;\n /** Theme adapting the component to light or dark background. */\n theme?: Theme;\n /** Native input value property. */\n value?: string;\n /** On change callback. */\n onChange?(isChecked: boolean, value?: string, name?: string, event?: SyntheticEvent): void;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'Switch';\n\n/**\n * Component default class name and class prefix.\n */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/**\n * Component default props.\n */\nconst DEFAULT_PROPS: Partial<SwitchProps> = {\n position: Alignment.left,\n theme: Theme.light,\n};\n\n/**\n * Switch component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const Switch: Comp<SwitchProps, HTMLDivElement> = forwardRef((props, ref) => {\n const {\n checked,\n children,\n className,\n disabled,\n helper,\n id,\n isChecked = checked,\n isDisabled = disabled,\n name,\n onChange,\n position,\n theme,\n value,\n ...forwardedProps\n } = props;\n const switchId = useMemo(() => id || `switch-${uid()}`, [id]);\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (onChange) {\n onChange(!isChecked, value, name, event);\n }\n };\n\n return (\n <div\n ref={ref}\n {...forwardedProps}\n className={classNames(\n className,\n handleBasicClasses({\n prefix: CLASSNAME,\n isChecked,\n isDisabled,\n position,\n theme,\n isUnchecked: !isChecked,\n }),\n )}\n aria-disabled={isDisabled}\n >\n <div className={`${CLASSNAME}__input-wrapper`}>\n <input\n type=\"checkbox\"\n role=\"switch\"\n id={switchId}\n className={`${CLASSNAME}__input-native`}\n name={name}\n value={value}\n disabled={isDisabled}\n checked={isChecked}\n aria-checked={Boolean(isChecked)}\n onChange={handleChange}\n />\n\n <div className={`${CLASSNAME}__input-placeholder`}>\n <div className={`${CLASSNAME}__input-background`} />\n <div className={`${CLASSNAME}__input-indicator`} />\n </div>\n </div>\n\n {Children.count(children) > 0 && (\n <div className={`${CLASSNAME}__content`}>\n <InputLabel htmlFor={switchId} theme={theme} className={`${CLASSNAME}__label`}>\n {children}\n </InputLabel>\n {!isEmpty(helper) && (\n <InputHelper theme={theme} className={`${CLASSNAME}__helper`}>\n {helper}\n </InputHelper>\n )}\n </div>\n )}\n </div>\n );\n});\nSwitch.displayName = COMPONENT_NAME;\nSwitch.className = CLASSNAME;\nSwitch.defaultProps = DEFAULT_PROPS;\n"],"names":["COMPONENT_NAME","CLASSNAME","getRootClassName","DEFAULT_PROPS","position","Alignment","left","theme","Theme","light","Switch","forwardRef","props","ref","checked","children","className","disabled","helper","id","isChecked","isDisabled","name","onChange","value","forwardedProps","switchId","useMemo","uid","handleChange","event","classNames","handleBasicClasses","prefix","isUnchecked","Boolean","Children","count","isEmpty","displayName","defaultProps"],"mappings":"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"}
|
|
@@ -24,7 +24,7 @@ import './useFocusTrap.js';
|
|
|
24
24
|
import 'react-dom';
|
|
25
25
|
import './ClickAwayProvider.js';
|
|
26
26
|
import './Dialog2.js';
|
|
27
|
-
import 'lodash/
|
|
27
|
+
import 'lodash/pull';
|
|
28
28
|
import './useDelayedVisibility.js';
|
|
29
29
|
import './useDisableBodyScroll.js';
|
|
30
30
|
import './Icon2.js';
|
|
@@ -20,7 +20,7 @@ import 'lodash/isFunction';
|
|
|
20
20
|
import './Chip2.js';
|
|
21
21
|
import 'react-dom';
|
|
22
22
|
import './ClickAwayProvider.js';
|
|
23
|
-
import 'lodash/
|
|
23
|
+
import 'lodash/pull';
|
|
24
24
|
import './List2.js';
|
|
25
25
|
import './Dropdown2.js';
|
|
26
26
|
import './Icon2.js';
|
|
@@ -28,6 +28,5 @@ import './InputHelper.js';
|
|
|
28
28
|
import './InputLabel.js';
|
|
29
29
|
import './TextField.js';
|
|
30
30
|
import './Tooltip2.js';
|
|
31
|
-
import 'lodash/pull';
|
|
32
31
|
import 'lodash/debounce';
|
|
33
32
|
//# sourceMappingURL=autocomplete.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autocomplete.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"autocomplete.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/esm/_internal/button.js
CHANGED
|
@@ -17,9 +17,8 @@ export { I as IconButton } from './IconButton.js';
|
|
|
17
17
|
export { B as ButtonGroup } from './ButtonGroup.js';
|
|
18
18
|
import 'react-dom';
|
|
19
19
|
import './ClickAwayProvider.js';
|
|
20
|
-
import 'lodash/
|
|
20
|
+
import 'lodash/pull';
|
|
21
21
|
import './Icon2.js';
|
|
22
22
|
import './Tooltip2.js';
|
|
23
|
-
import 'lodash/pull';
|
|
24
23
|
import 'lodash/debounce';
|
|
25
24
|
//# sourceMappingURL=button.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"button.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"button.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -21,13 +21,12 @@ import 'moment-range';
|
|
|
21
21
|
import './useFocusTrap.js';
|
|
22
22
|
import 'react-dom';
|
|
23
23
|
import './ClickAwayProvider.js';
|
|
24
|
-
import 'lodash/
|
|
24
|
+
import 'lodash/pull';
|
|
25
25
|
import './Icon2.js';
|
|
26
26
|
import './InputHelper.js';
|
|
27
27
|
import './InputLabel.js';
|
|
28
28
|
import './TextField.js';
|
|
29
29
|
import './Toolbar2.js';
|
|
30
30
|
import './Tooltip2.js';
|
|
31
|
-
import 'lodash/pull';
|
|
32
31
|
import 'lodash/debounce';
|
|
33
32
|
//# sourceMappingURL=date-picker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-picker.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"date-picker.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/esm/_internal/dialog.js
CHANGED
|
@@ -18,7 +18,7 @@ import './useFocusTrap.js';
|
|
|
18
18
|
import 'react-dom';
|
|
19
19
|
import './ClickAwayProvider.js';
|
|
20
20
|
export { D as Dialog } from './Dialog2.js';
|
|
21
|
-
import 'lodash/
|
|
21
|
+
import 'lodash/pull';
|
|
22
22
|
import './useDelayedVisibility.js';
|
|
23
23
|
import './useDisableBodyScroll.js';
|
|
24
24
|
import './Progress2.js';
|
|
@@ -13,7 +13,7 @@ import './mergeRefs.js';
|
|
|
13
13
|
import './renderLink.js';
|
|
14
14
|
import 'react-dom';
|
|
15
15
|
import './ClickAwayProvider.js';
|
|
16
|
-
import 'lodash/
|
|
16
|
+
import 'lodash/pull';
|
|
17
17
|
import './List2.js';
|
|
18
18
|
export { D as Dropdown } from './Dropdown2.js';
|
|
19
19
|
//# sourceMappingURL=dropdown.js.map
|
|
@@ -24,11 +24,10 @@ import './IconButton.js';
|
|
|
24
24
|
import 'lodash/isFunction';
|
|
25
25
|
import 'react-dom';
|
|
26
26
|
import './ClickAwayProvider.js';
|
|
27
|
-
import 'lodash/
|
|
27
|
+
import 'lodash/pull';
|
|
28
28
|
import './DragHandle.js';
|
|
29
29
|
export { E as ExpansionPanel } from './ExpansionPanel.js';
|
|
30
30
|
import './Icon2.js';
|
|
31
31
|
import './Tooltip2.js';
|
|
32
|
-
import 'lodash/pull';
|
|
33
32
|
import 'lodash/debounce';
|
|
34
33
|
//# sourceMappingURL=expansion-panel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expansion-panel.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"expansion-panel.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -168,8 +168,6 @@ function _nonIterableRest() {
|
|
|
168
168
|
throw new TypeError("Invalid attempt to destructure non-iterable instance");
|
|
169
169
|
}
|
|
170
170
|
|
|
171
|
-
var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
|
|
172
|
-
|
|
173
171
|
function createCommonjsModule(fn, basedir, module) {
|
|
174
172
|
return module = {
|
|
175
173
|
path: basedir,
|
|
@@ -311,89 +309,101 @@ function handleBasicClasses(_ref2) {
|
|
|
311
309
|
|
|
312
310
|
return classnames(prefix, otherClasses);
|
|
313
311
|
}
|
|
312
|
+
/**
|
|
313
|
+
* Checks whether or not the browser support passive events.
|
|
314
|
+
* @see https://github.com/Modernizr/Modernizr/blob/6d56d814b9682843313b16060adb25a58d83a317/feature-detects/dom/passiveeventlisteners.js
|
|
315
|
+
*/
|
|
316
|
+
|
|
317
|
+
function isPassiveEventAvailable() {
|
|
318
|
+
var supportsPassiveOption = false;
|
|
319
|
+
|
|
320
|
+
try {
|
|
321
|
+
var opts = Object.defineProperty({}, 'passive', {
|
|
322
|
+
get: function get() {
|
|
323
|
+
supportsPassiveOption = true;
|
|
324
|
+
}
|
|
325
|
+
});
|
|
326
|
+
window.addEventListener('testPassiveEventSupport', noop, opts);
|
|
327
|
+
window.removeEventListener('testPassiveEventSupport', noop, opts);
|
|
328
|
+
} catch (e) {// ignored
|
|
329
|
+
}
|
|
314
330
|
|
|
331
|
+
return supportsPassiveOption;
|
|
332
|
+
}
|
|
315
333
|
/**
|
|
316
|
-
* Detects swipe direction.
|
|
317
|
-
*
|
|
318
|
-
*
|
|
319
|
-
* @param touchSurface Element that will hold touch events.
|
|
320
|
-
* @param handleSwipe Callback function.
|
|
321
|
-
* @return Function to remove listeners.
|
|
334
|
+
* Detects horizontal swipe direction without blocking the browser scroll using passive event.
|
|
335
|
+
* @see http://javascriptkit.com/javatutors/touchevents2.shtml
|
|
336
|
+
* @see https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md
|
|
322
337
|
*/
|
|
323
|
-
function detectSwipe(touchSurface) {
|
|
324
|
-
var handleSwipe = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;
|
|
325
|
-
return function () {
|
|
326
|
-
var distX;
|
|
327
|
-
var distY;
|
|
328
|
-
var startX;
|
|
329
|
-
var startY;
|
|
330
|
-
var direction; // Required min distance traveled to be considered swipe.
|
|
331
338
|
|
|
332
|
-
var threshold = 150; // Maximum distance allowed at the same time in perpendicular direction.
|
|
333
339
|
|
|
334
|
-
|
|
340
|
+
function detectHorizontalSwipe(touchSurface, handleSwipe) {
|
|
341
|
+
var startX;
|
|
342
|
+
var startY; // Required min distance traveled to be considered swipe.
|
|
335
343
|
|
|
336
|
-
|
|
337
|
-
var elapsedTime;
|
|
338
|
-
var startTime;
|
|
344
|
+
var threshold = 150; // Maximum distance allowed at the same time in perpendicular direction.
|
|
339
345
|
|
|
340
|
-
|
|
341
|
-
var _Array$from = Array.from(evt.changedTouches),
|
|
342
|
-
_Array$from2 = _slicedToArray(_Array$from, 1),
|
|
343
|
-
touch = _Array$from2[0];
|
|
346
|
+
var restraint = 150; // Maximum time allowed to travel that distance.
|
|
344
347
|
|
|
345
|
-
|
|
348
|
+
var allowedTime = 300;
|
|
349
|
+
var elapsedTime;
|
|
350
|
+
var startTime;
|
|
351
|
+
var finished;
|
|
346
352
|
|
|
347
|
-
|
|
348
|
-
|
|
353
|
+
var onTouchStart = function onTouchStart(evt) {
|
|
354
|
+
var _Array$from5 = Array.from(evt.changedTouches),
|
|
355
|
+
_Array$from6 = _slicedToArray(_Array$from5, 1),
|
|
356
|
+
touch = _Array$from6[0];
|
|
349
357
|
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
};
|
|
358
|
+
startX = touch.pageX;
|
|
359
|
+
startY = touch.pageY; // Record time when finger first makes contact with surface.
|
|
353
360
|
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
};
|
|
361
|
+
startTime = new Date().getTime();
|
|
362
|
+
finished = false;
|
|
363
|
+
};
|
|
358
364
|
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
365
|
+
var onTouchMove = function onTouchMove(evt) {
|
|
366
|
+
if (finished) {
|
|
367
|
+
return;
|
|
368
|
+
}
|
|
363
369
|
|
|
370
|
+
elapsedTime = new Date().getTime() - startTime;
|
|
364
371
|
|
|
365
|
-
|
|
372
|
+
if (elapsedTime > allowedTime) {
|
|
373
|
+
// Touch swipe too long to be considered.
|
|
374
|
+
return;
|
|
375
|
+
}
|
|
366
376
|
|
|
367
|
-
|
|
377
|
+
var _Array$from7 = Array.from(evt.changedTouches),
|
|
378
|
+
_Array$from8 = _slicedToArray(_Array$from7, 1),
|
|
379
|
+
touch = _Array$from8[0]; // Get horizontal dist traveled by finger while in contact with surface.
|
|
368
380
|
|
|
369
|
-
elapsedTime = new Date().getTime() - startTime;
|
|
370
381
|
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
// 2nd condition for horizontal swipe met.
|
|
375
|
-
// If dist traveled is negative, it indicates left swipe.
|
|
376
|
-
direction = distX < 0 ? 'left' : 'right';
|
|
377
|
-
} else if (Math.abs(distY) >= threshold && Math.abs(distX) <= restraint) {
|
|
378
|
-
// 2nd condition for vertical swipe met.
|
|
379
|
-
// If dist traveled is negative, it indicates up swipe.
|
|
380
|
-
direction = distY < 0 ? 'up' : 'down';
|
|
381
|
-
}
|
|
382
|
-
}
|
|
382
|
+
var distX = touch.pageX - startX; // Get vertical dist traveled by finger while in contact with surface.
|
|
383
|
+
|
|
384
|
+
var distY = touch.pageY - startY;
|
|
383
385
|
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
386
|
+
if (!(Math.abs(distX) >= threshold && Math.abs(distY) <= restraint)) {
|
|
387
|
+
// Swipe is not horizontal.
|
|
388
|
+
return;
|
|
389
|
+
} // Swipe direction.
|
|
390
|
+
|
|
391
|
+
|
|
392
|
+
var direction = distX < 0 ? 'left' : 'right';
|
|
393
|
+
handleSwipe(direction);
|
|
394
|
+
finished = true;
|
|
395
|
+
}; // Activate passive event if possible for better scrolling performance.
|
|
396
|
+
|
|
397
|
+
|
|
398
|
+
var eventOptions = isPassiveEventAvailable() ? {
|
|
399
|
+
passive: true
|
|
400
|
+
} : false;
|
|
401
|
+
touchSurface.addEventListener('touchstart', onTouchStart, eventOptions);
|
|
402
|
+
touchSurface.addEventListener('touchmove', onTouchMove, eventOptions);
|
|
403
|
+
return function () {
|
|
404
|
+
touchSurface.removeEventListener('touchstart', onTouchStart, eventOptions);
|
|
405
|
+
touchSurface.removeEventListener('touchmove', onTouchMove, eventOptions);
|
|
406
|
+
};
|
|
397
407
|
}
|
|
398
408
|
|
|
399
409
|
/**
|
|
@@ -462,5 +472,5 @@ function getRootClassName(componentName, subComponent) {
|
|
|
462
472
|
return formattedClassName;
|
|
463
473
|
}
|
|
464
474
|
|
|
465
|
-
export { CSS_PREFIX as C, DIALOG_TRANSITION_DURATION as D, NOTIFICATION_TRANSITION_DURATION as N, _defineProperty as _, _objectWithoutProperties as a, _extends as b, _objectSpread2 as c, classnames as d, getBasicClass as e, _slicedToArray as f, getRootClassName as g, handleBasicClasses as h, _toConsumableArray as i, createCommonjsModule as j,
|
|
475
|
+
export { CSS_PREFIX as C, DIALOG_TRANSITION_DURATION as D, NOTIFICATION_TRANSITION_DURATION as N, _defineProperty as _, _objectWithoutProperties as a, _extends as b, _objectSpread2 as c, classnames as d, getBasicClass as e, _slicedToArray as f, getRootClassName as g, handleBasicClasses as h, _toConsumableArray as i, createCommonjsModule as j, detectHorizontalSwipe as k, onEscapePressed as l, onEnterPressed as o };
|
|
466
476
|
//# sourceMappingURL=getRootClassName.js.map
|