UNPKG

@carbon/react

Version:

React components for the Carbon Design System

103 lines (99 loc) 3.88 kB
/** * Copyright IBM Corp. 2016, 2023 * * This source code is licensed under the Apache-2.0 license found in the * LICENSE file in the root directory of this source tree. */ import { extends as _extends } from '../../_virtual/_rollupPluginBabelHelpers.js'; import PropTypes from 'prop-types'; import React, { useState } from 'react'; import cx from 'classnames'; import { usePrefix } from '../../internal/usePrefix.js'; import useIsomorphicEffect from '../../internal/useIsomorphicEffect.js'; import { LowerHandle, UpperHandle } from './SliderHandles.js'; const SliderSkeleton = ({ ariaLabel = 'slider handle', unstable_ariaLabelHandleUpper: ariaLabelHandleUpper = 'upper slider handle', hideLabel, className, twoHandles, ...rest }) => { const prefix = usePrefix(); const [isRtl, setIsRtl] = useState(false); useIsomorphicEffect(() => { setIsRtl(document ? document.dir === 'rtl' : false); }, []); const containerClasses = cx(`${prefix}--slider-container`, `${prefix}--skeleton`, { [`${prefix}--slider-container--two-handles`]: twoHandles, [`${prefix}--slider-container--rtl`]: isRtl }); const lowerThumbClasses = cx(`${prefix}--slider__thumb`, { [`${prefix}--slider__thumb--lower`]: twoHandles }); const upperThumbClasses = cx(`${prefix}--slider__thumb`, { [`${prefix}--slider__thumb--upper`]: twoHandles }); const lowerThumbWrapperClasses = cx(`${prefix}--slider__thumb-wrapper`, { [`${prefix}--slider__thumb-wrapper--lower`]: twoHandles }); const upperThumbWrapperClasses = cx(`${prefix}--slider__thumb-wrapper`, { [`${prefix}--slider__thumb-wrapper--upper`]: twoHandles }); return /*#__PURE__*/React.createElement("div", _extends({ className: cx(`${prefix}--form-item`, className) }, rest), !hideLabel && /*#__PURE__*/React.createElement("span", { className: `${prefix}--label ${prefix}--skeleton` }), /*#__PURE__*/React.createElement("div", { className: containerClasses }, /*#__PURE__*/React.createElement("span", { className: `${prefix}--slider__range-label` }), /*#__PURE__*/React.createElement("div", { className: `${prefix}--slider` }, /*#__PURE__*/React.createElement("div", { className: `${prefix}--slider__track` }), /*#__PURE__*/React.createElement("div", { className: `${prefix}--slider__filled-track` }), /*#__PURE__*/React.createElement("div", { className: lowerThumbWrapperClasses }, /*#__PURE__*/React.createElement("div", { className: lowerThumbClasses }, twoHandles && !isRtl ? /*#__PURE__*/React.createElement(LowerHandle, { "aria-label": ariaLabel }) : twoHandles && isRtl ? /*#__PURE__*/React.createElement(UpperHandle, { "aria-label": ariaLabelHandleUpper }) : undefined)), twoHandles ? /*#__PURE__*/React.createElement("div", { className: upperThumbWrapperClasses }, /*#__PURE__*/React.createElement("div", { className: upperThumbClasses }, twoHandles && !isRtl ? /*#__PURE__*/React.createElement(UpperHandle, { "aria-label": ariaLabelHandleUpper }) : twoHandles && isRtl ? /*#__PURE__*/React.createElement(LowerHandle, { "aria-label": ariaLabel }) : undefined)) : undefined), /*#__PURE__*/React.createElement("span", { className: `${prefix}--slider__range-label` }))); }; SliderSkeleton.propTypes = { /** * The `ariaLabel` for the handle icon. */ ariaLabel: PropTypes.string, /** * The `ariaLabel` for the upper bound slider handle when there are two handles. */ unstable_ariaLabelHandleUpper: PropTypes.string, /** * Specify an optional className to add to the form item wrapper. */ className: PropTypes.string, /** * Specify whether the label should be hidden, or not */ hideLabel: PropTypes.bool, /** * Turn the slider into a range slider. */ twoHandles: PropTypes.bool }; export { SliderSkeleton, SliderSkeleton as default };