UNPKG

irisrad-ui

Version:

UI elements developered for IRIS R&D Group Inc

85 lines (77 loc) 2.68 kB
import React, { useState, useEffect, useCallback } from "react"; const MIN_FONT_SIZE = 0.8; const MAX_FONT_SIZE = 2; const initialFontSize = (MIN_FONT_SIZE + MAX_FONT_SIZE) / 2; const MIN_PADDING = 0; const MAX_PADDING = 1.5; const initialPadding = (MIN_PADDING + MAX_PADDING) / 2; export function SizeTweeking({ children }) { const [fontSize, setFontSize] = useState(initialFontSize); const [paddingVertical, setPaddingVertical] = useState(initialPadding); const [paddingHorizontal, setPaddingHorizontal] = useState(initialPadding); const toggleSize = useCallback((classList, classPrefix, size, multiplier) => { if (classList) { debugger; const fontClass = [...classList].find((fc) => fc.startsWith(classPrefix)); if (fontClass) { classList.remove(fontClass); } const updatedClass = classPrefix + "-" + size * multiplier; classList.toggle(updatedClass); } console.log(`classList`, classList); }, []); useEffect(() => { const classList = children.ref.current.classList; debugger; toggleSize(classList, "fs-testing", Number(fontSize), 10); }, [fontSize, toggleSize]); useEffect(() => { const classList = children.ref.current.classList; toggleSize(classList, "ph-testing", Number(paddingVertical), 1000); }, [paddingVertical, toggleSize]); useEffect(() => { const classList = children.ref.current.classList; toggleSize(classList, "pv-testing", Number(paddingHorizontal), 1000); }, [paddingHorizontal, toggleSize]); return ( <div style={{ padding: "1em", margin: "1rem" }}> {children} <p>font size: {fontSize}</p> <p>padding H: {paddingHorizontal}</p> <p>padding V: {paddingVertical}</p> <div> <div> <input type="range" max={MAX_FONT_SIZE} min={MIN_FONT_SIZE} step={0.1} value={fontSize} onChange={(e) => setFontSize(Number(e.target.value))} /> </div> <div> <input type="range" max={MAX_PADDING} min={MIN_PADDING} step={0.125} value={paddingHorizontal} onChange={(e) => setPaddingHorizontal(Number(e.target.value))} /> </div> <div> <input type="range" max={MAX_PADDING} min={MIN_PADDING} step={0.125} value={paddingVertical} onChange={(e) => setPaddingVertical(Number(e.target.value))} /> </div> </div> </div> ); }