diff --git a/packages/web-kitchensink-reactnext/src/categories/number/react/components/Slider/index.tsx b/packages/web-kitchensink-reactnext/src/categories/number/react/components/Slider/index.tsx index f1e6de5..e2d1585 100644 --- a/packages/web-kitchensink-reactnext/src/categories/number/react/components/Slider/index.tsx +++ b/packages/web-kitchensink-reactnext/src/categories/number/react/components/Slider/index.tsx @@ -4,6 +4,13 @@ import {RenderOptions} from '@tesseract-design/web-option-react'; import clsx from 'clsx'; import styles from './style.module.css'; +/* + * Caveat for slider: + * + * Since sliders are not as customizable as other components, especially with orientations, prefer using sliders where + * using horizontal sliders would be as acceptable as vertical sliders and vv. + */ + export type SliderOrientation = 'horizontal' | 'vertical'; type SliderDerivedElement = HTMLInputElement; @@ -56,7 +63,7 @@ export const Slider = React.forwardRef(({ slider.setAttribute('orient', orient); wrapper.dataset[browser] = orient; wrapper.removeAttribute('data-orient'); - grandParent.style.width = '0px'; + grandParent.style.width = children ? '2.5em' : '1em'; } return () => { @@ -67,7 +74,7 @@ export const Slider = React.forwardRef(({ slider.removeAttribute('orient'); } }; - }, [ref, orient, browser]); + }, [ref, orient, children, browser]); React.useEffect(() => { if (!(typeof ref === 'object' && ref)) { @@ -126,16 +133,41 @@ export const Slider = React.forwardRef(({ Array.from(tickMarks).forEach((tickMarkRaw) => { const tickMark = tickMarkRaw as HTMLElement; const offset = tickMark.dataset.offset as string; + const tickMarkWrapper = tickMark.children[0] as HTMLElement; + const tickMarkLine = tickMarkWrapper.children[0] as HTMLElement; + const tickMarkLabel = tickMarkLine.nextElementSibling as HTMLElement | null; if (isNotFirefox) { tickMark.style.left = offset; tickMark.style.bottom = ''; + tickMarkWrapper.style.translate = '-50%'; + tickMarkWrapper.style.flexDirection = 'column'; + tickMarkLine.style.width = '1px'; + tickMarkLine.style.height = '0.5em'; + if (tickMarkLabel) { + tickMarkLabel.style.writingMode = 'initial'; + } } else if (isFirefox && orient === 'horizontal') { tickMark.style.left = offset; tickMark.style.bottom = ''; + tickMarkWrapper.style.translate = '-50%'; + tickMarkWrapper.style.flexDirection = 'column'; + tickMarkLine.style.width = '1px'; + tickMarkLine.style.height = '0.5em'; + if (tickMarkLabel) { + tickMarkLabel.style.writingMode = 'initial'; + } } else { tickMark.style.bottom = offset; tickMark.style.left = ''; + tickMarkWrapper.style.translate = '0 50%'; + tickMarkWrapper.style.flexDirection = 'row'; + tickMarkLine.style.width = '0.5em'; + tickMarkLine.style.height = '1px'; + if (tickMarkLabel) { + tickMarkLabel.style.writingMode = 'sideways-lr'; + } } + console.log(tickMarkWrapper); }); } }, [ref, orient, browser]); @@ -194,9 +226,7 @@ export const Slider = React.forwardRef(({ )} /> {Array.isArray(children) && ( -
+
{children.map((c) => (
(({ )} data-offset={`${(Number(c.props.value) - Number(min)) / (Number(max) - Number(min)) * 100}%`} > - {/* TODO fix translateX */}
- {c.props.children} +
+ {c.props.children} +
))} diff --git a/packages/web-kitchensink-reactnext/src/categories/number/react/components/Slider/style.module.css b/packages/web-kitchensink-reactnext/src/categories/number/react/components/Slider/style.module.css index f8e20cc..315881d 100644 --- a/packages/web-kitchensink-reactnext/src/categories/number/react/components/Slider/style.module.css +++ b/packages/web-kitchensink-reactnext/src/categories/number/react/components/Slider/style.module.css @@ -141,10 +141,6 @@ box-shadow: 0 100000.5em 0 100000em rgb(var(--color-tertiary) / 50%); } -.slider[orient='vertical'] + .tick-mark-container { - flex-direction: row; -} - .slider-wrapper[data-chrome] > input + * { padding: 0 0.5em; height: 1.5em; diff --git a/packages/web-kitchensink-reactnext/src/pages/categories/number/index.tsx b/packages/web-kitchensink-reactnext/src/pages/categories/number/index.tsx index 104f5b2..d1a3388 100644 --- a/packages/web-kitchensink-reactnext/src/pages/categories/number/index.tsx +++ b/packages/web-kitchensink-reactnext/src/pages/categories/number/index.tsx @@ -29,7 +29,7 @@ const NumberPage: NextPage = () => { max={100} >