@dnb/eufemia
Version:
DNB Eufemia Design System UI Library
75 lines • 2.22 kB
JavaScript
import _extends from "@babel/runtime/helpers/esm/extends";
var _span;
import React from 'react';
import { useSliderEvents } from "./hooks/useSliderEvents.js";
import { useSliderProps } from "./hooks/useSliderProps.js";
import { clamp } from "./SliderHelpers.js";
export function SliderMainTrack({
children
}) {
const {
allProps,
trackRef,
animationTimeout
} = useSliderProps();
const {
id
} = allProps;
const {
onTrackMouseDownHandler,
removeEvents
} = useSliderEvents();
React.useEffect(() => {
return () => {
removeEvents();
clearTimeout(animationTimeout.current);
};
}, []);
const trackParams = {
onTouchStart: onTrackMouseDownHandler,
onMouseDown: onTrackMouseDownHandler
};
return (React.createElement("span", _extends({
id: id,
ref: trackRef,
className: "dnb-slider__track"
}, trackParams), children)
);
}
const trackObj = [['right', 'left'], ['bottom', 'top']];
export function SliderTrackBefore() {
const {
values: origValues,
isVertical,
isReverse,
thumbIndex,
allProps: {
min,
max
}
} = useSliderProps();
const values = origValues.sort((a, b) => a - b);
const isBetween = values.length >= 2;
if (isBetween && values[0] > values[values.length - 1]) {
values.reverse();
}
const index = thumbIndex.current;
const upperValue = values[isBetween ? 0 : index > -1 ? index : 0];
const upperPercent = isBetween ? clamp((upperValue - min) * 100 / (max - min)) : 0;
const lowerValue = values[isBetween ? values.length - 1 : index > -1 ? index : 0];
const lowerPercent = 100 - clamp((lowerValue - min) * 100 / (max - min));
const units = [trackObj[isVertical ? 1 : 0][0], trackObj[isVertical ? 1 : 0][1]];
const style = {};
style[units[isReverse ? 1 : 0]] = `${lowerPercent}%`;
style[units[isReverse ? 0 : 1]] = `${upperPercent}%`;
return React.createElement("span", {
className: "dnb-slider__line dnb-slider__line__before",
style: style
});
}
export function SliderTrackAfter() {
return _span || (_span = React.createElement("span", {
className: "dnb-slider__line dnb-slider__line__after"
}));
}
//# sourceMappingURL=SliderTrack.js.map