Fix Slider NaN edge case
This commit is contained in:
parent
796ccab838
commit
789f4e0328
@ -7,15 +7,24 @@ export type SliderRangeProps = JSX.HTMLAttributes<HTMLDivElement>;
|
||||
|
||||
/** The filled portion of the slider track representing the current value. */
|
||||
export function SliderRange(props: SliderRangeProps): JSX.Element {
|
||||
const [, rest] = splitProps(props, []);
|
||||
const [local, rest] = splitProps(props, ["style"]);
|
||||
const ctx = useSliderContext();
|
||||
|
||||
const percentage = () => ((ctx.value() - ctx.min()) / (ctx.max() - ctx.min())) * 100;
|
||||
const percentage = () => {
|
||||
const range = ctx.max() - ctx.min();
|
||||
if (range === 0) return 0;
|
||||
return ((ctx.value() - ctx.min()) / range) * 100;
|
||||
};
|
||||
|
||||
const style = () =>
|
||||
const computedStyle = () =>
|
||||
ctx.orientation() === "horizontal"
|
||||
? { width: `${percentage()}%` }
|
||||
: { height: `${percentage()}%` };
|
||||
|
||||
return <div style={style()} data-orientation={ctx.orientation()} {...rest} />;
|
||||
const mergedStyle = () => ({
|
||||
...(typeof local.style === "object" ? local.style : {}),
|
||||
...computedStyle(),
|
||||
});
|
||||
|
||||
return <div style={mergedStyle()} data-orientation={ctx.orientation()} {...rest} />;
|
||||
}
|
||||
|
||||
@ -14,8 +14,8 @@ export function SliderThumb(props: SliderThumbProps): JSX.Element {
|
||||
const ctx = useSliderContext();
|
||||
|
||||
const handleKeyDown: JSX.EventHandler<HTMLSpanElement, KeyboardEvent> = (e) => {
|
||||
if (typeof local.onKeyDown === "function") local.onKeyDown(e);
|
||||
if (ctx.disabled()) return;
|
||||
if (typeof local.onKeyDown === "function") local.onKeyDown(e);
|
||||
|
||||
const current = ctx.value();
|
||||
const s = ctx.step();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user