diff --git a/src/form/Range/Range.story.tsx b/src/form/Range/Range.story.tsx index c53a3519..3407f288 100644 --- a/src/form/Range/Range.story.tsx +++ b/src/form/Range/Range.story.tsx @@ -5,7 +5,14 @@ import { debounce } from 'lodash'; export default { title: 'Components/Form/Range', - component: Range + component: Range, + decorators: [ + Story => ( +
+ +
+ ) + ] }; export const Single = () => { @@ -21,6 +28,20 @@ export const Single = () => { ); }; +export const SingleShowHighlight = () => { + const [state, setState] = useState(20); + return ( + + ); +}; + export const SingleDisabled = () => { const [state, setState] = useState(20); return ( diff --git a/src/form/Range/RangeDouble.tsx b/src/form/Range/RangeDouble.tsx index 048295b7..fbdfd9bb 100644 --- a/src/form/Range/RangeDouble.tsx +++ b/src/form/Range/RangeDouble.tsx @@ -10,7 +10,7 @@ import React, { import { motion, useMotionValue } from 'framer-motion'; import { RangeProps, RangeTooltip } from './RangeTooltip'; import { twMerge } from 'tailwind-merge'; -import { useComponentTheme } from '@/utils'; +import { cn, useComponentTheme } from '@/utils'; import { RangeTheme } from './RangeTheme'; export const RangeDouble: FC> = ({ @@ -230,7 +230,9 @@ export const RangeDouble: FC> = ({ )}
> = ({ +export interface RangeSingleProps extends RangeProps { + /** + * Display the highlight when true + */ + showHighlight?: boolean; +} + +export const RangeSingle: FC = ({ disabled, style, handleClassName, @@ -24,6 +31,7 @@ export const RangeSingle: FC> = ({ valueDisplay = 'hover', valueFormat = value => value.toLocaleString(), step = 1, + showHighlight = false, theme: customTheme }) => { const [currentValue, setCurrentValue] = useState(value); @@ -79,6 +87,7 @@ export const RangeSingle: FC> = ({ const [hovering, setHovering] = useState(false); const [focused, setFocused] = useState(false); const tooltipVisible = dragging || focused || hovering; + const maxPercentage = ((currentValue - min) / (max - min)) * 100; const theme: RangeTheme = useComponentTheme('range', customTheme); @@ -133,6 +142,16 @@ export const RangeSingle: FC> = ({ valueFormat(currentValue) )} + {showHighlight && ( +
+ )}
); }; diff --git a/src/form/Range/RangeTheme.ts b/src/form/Range/RangeTheme.ts index 7977afa1..317f73f3 100644 --- a/src/form/Range/RangeTheme.ts +++ b/src/form/Range/RangeTheme.ts @@ -1,7 +1,10 @@ export interface RangeTheme { base: string; drag: string; - rangeHighlight: string; + rangeHighlight: { + base: string; + disabled: string; + }; disabled: string; inputWrapper: { base: string; @@ -13,13 +16,16 @@ export interface RangeTheme { const baseTheme: RangeTheme = { base: 'relative box-border w-full h-0.5', - drag: 'absolute w-3.5 h-3.5 -left-[7px] -top-[7px] rounded-full', + drag: 'absolute w-4 h-4 -left-2 -top-2 rounded-full', inputWrapper: { base: 'cursor-pointer inline-block relative h-full w-full rounded-full', disabled: 'cursor-not-allowed' }, - rangeHighlight: 'pointer-events-none h-0.5', - disabled: 'cursor-not-allowed opacity-60', + rangeHighlight: { + base: 'pointer-events-none h-0.5', + disabled: 'cursor-not-allowed' + }, + disabled: 'cursor-not-allowed', input: 'absolute left-[-9999px]', // The hidden input used for keyboard controls tooltip: 'absolute top-[-45px] -translate-x-2/4 whitespace-nowrap text-center left-2/4 rounded-lg p-2.5' @@ -27,12 +33,24 @@ const baseTheme: RangeTheme = { export const rangeTheme: RangeTheme = { ...baseTheme, - base: [baseTheme.base, 'bg-surface'].join(' '), + base: [baseTheme.base, 'bg-surface light:bg-gray-200'].join(' '), inputWrapper: { ...baseTheme.inputWrapper, - base: [baseTheme.inputWrapper.base, 'bg-primary'].join(' ') + base: [ + baseTheme.inputWrapper.base, + 'bg-primary-active hover:bg-primary-hover shadow-[0px_4px_4px_0px_rgba(0,0,0,0.20)]' + ].join(' '), + disabled: [ + baseTheme.inputWrapper.disabled, + 'bg-secondary-inactive hover:bg-secondary-inactive' + ].join(' ') + }, + rangeHighlight: { + base: [baseTheme.rangeHighlight.base, 'bg-primary-active'].join(' '), + disabled: [baseTheme.rangeHighlight.disabled, 'bg-secondary-inactive'].join( + ' ' + ) }, - rangeHighlight: [baseTheme.rangeHighlight, 'bg-primary'].join(' '), tooltip: [baseTheme.tooltip, 'text-surface-content bg-surface'].join(' ') }; @@ -46,10 +64,13 @@ export const legacyRangeTheme: RangeTheme = { baseTheme.drag, 'top-[calc(-1_*_(var(--range-handle-size)_-_var(--range-track-size))_/_2)] left-[calc(-1_*_var(--range-handle-size)_/_2)] w-[var(--range-handle-size)] h-[var(--range-handle-size)] bg-[var(--range-handle-background)] rounded-[var(--range-handle-border-radius)]' ].join(' '), - rangeHighlight: [ - baseTheme.rangeHighlight, - 'h-[var(--range-track-size)] bg-[var(--range-track-active-background)]' - ].join(' '), + rangeHighlight: { + ...baseTheme.rangeHighlight, + base: [ + baseTheme.rangeHighlight.base, + 'h-[var(--range-track-size)] bg-[var(--range-track-active-background)]' + ].join(' ') + }, tooltip: [ baseTheme.tooltip, 'rounded-[var(--border-radius-md)] [padding:_var(--spacing-md)] bg-[var(--tooltip-background)] text-[var(--tooltip-color)]' diff --git a/tailwind.config.ts b/tailwind.config.ts index 0a215c3a..6c164cee 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -7,16 +7,16 @@ export const colorPalette = { white: '#FFFFFF', black: '#000000', gray: { - 100: '#F2F3F7', - 200: '#E2E2EA', - 300: '#C6CBD9', - 400: '#9A9AAF', - 500: '#7E7E8F', - 600: '#656575', - 700: '#535362', - 800: '#2E2E3A', - 900: '#262631', - 950: '#16161E' + 100: '#F7F7FA', + 200: '#E6E6F0', + 300: '#C9C9D6', + 400: '#77778C', + 500: '#5C5C73', + 600: '#3D3D4D', + 700: '#242433', + 800: '#1E1E2E', + 900: '#11111F', + 950: '#02020F' }, magenta: { 100: '#FAE5F6', @@ -276,7 +276,7 @@ const config: Config = { DEFAULT: colorPalette.charade, active: colorPalette.charade, hover: colorPalette.gray[700], - inactive: colorPalette.gray[800] + inactive: colorPalette.gray[600] }, success: { DEFAULT: colorPalette.green[500],