Completed color value editor component.

This commit is contained in:
Jay
2025-08-03 15:24:25 -04:00
parent 33f6a7e0c2
commit c27a5258d3
10 changed files with 613 additions and 36 deletions
+1
View File
@@ -49,6 +49,7 @@ export function useScroll<T extends HTMLElement>({
const handleWheelEvent = useCallback((event: WheelEvent) => {
event.preventDefault();
console.log("Handling wheel event.");
setScrollLength((prev) =>
handleScroll(
+12 -13
View File
@@ -87,17 +87,14 @@ export function useSlider({
[calculatePosition],
);
const handleEnd = useCallback(
(event: MouseEvent | TouchEvent) => {
document.removeEventListener("mousemove", handleMove);
document.removeEventListener("mouseup", handleEnd);
document.removeEventListener("touchmove", handleMove);
document.removeEventListener("touchend", handleEnd);
document.removeEventListener("touchcancel", handleEnd);
setIsDragging(false);
},
[handleMove],
);
const handleEnd = useCallback(() => {
document.removeEventListener("mousemove", handleMove);
document.removeEventListener("mouseup", handleEnd);
document.removeEventListener("touchmove", handleMove);
document.removeEventListener("touchend", handleEnd);
document.removeEventListener("touchcancel", handleEnd);
setIsDragging(false);
}, [handleMove]);
const handleStart = useCallback(
(event: MouseEvent | TouchEvent) => {
@@ -121,18 +118,20 @@ export function useSlider({
const handleScrollUp = useCallback(() => {
const dir = directionRef.current;
const dims = dimensionsRef.current;
const inc = chooseValueByDirection(dir, 1, -1);
setPosition((prev: number) =>
minmax(prev - 1, 0, chooseValueByDirection(dir, dims.x, dims.y)),
minmax(prev + inc, 0, chooseValueByDirection(dir, dims.x, dims.y)),
);
}, [setPosition]);
const handleScrollDown = useCallback(() => {
const dir = directionRef.current;
const dims = dimensionsRef.current;
const inc = chooseValueByDirection(dir, -1, 1);
setPosition((prev: number) =>
minmax(prev + 1, 0, chooseValueByDirection(dir, dims.x, dims.y)),
minmax(prev + inc, 0, chooseValueByDirection(dir, dims.x, dims.y)),
);
}, [setPosition]);
+15 -19
View File
@@ -142,10 +142,6 @@ function createTestUtils(isHorizontal = true) {
};
}
const isTouchSupported = () => {
return typeof TouchEvent !== "undefined";
};
// Tests
describe("horizontal slider hook tests", () => {
@@ -201,25 +197,25 @@ describe("horizontal slider hook tests", () => {
it("moves the slider with mouse wheel scrolling", () => {
assertPosition(0);
triggerWheelEvent(100);
assertPosition(1);
triggerWheelEvent(100);
assertPosition(2);
triggerWheelEvent(-100);
assertPosition(1);
triggerWheelEvent(-100);
assertPosition(2);
triggerWheelEvent(100);
assertPosition(1);
// Many smaller scrolls, to simulate touchpads
triggerWheelEvent(20);
triggerWheelEvent(20);
triggerWheelEvent(20);
triggerWheelEvent(20);
triggerWheelEvent(20);
triggerWheelEvent(20);
triggerWheelEvent(20);
triggerWheelEvent(20);
triggerWheelEvent(20);
triggerWheelEvent(-20);
triggerWheelEvent(-20);
triggerWheelEvent(-20);
triggerWheelEvent(-20);
triggerWheelEvent(-20);
triggerWheelEvent(-20);
triggerWheelEvent(-20);
triggerWheelEvent(-20);
triggerWheelEvent(-20);
assertPosition(4);
});
});
+4
View File
@@ -0,0 +1,4 @@
export function useResize(callback: () => void): () => void {
window.addEventListener("resize", callback);
return () => window.removeEventListener("resize", callback);
}