@molecule/app-adjustment-slider-react
v1.0.1
Published
Bipolar (zero-center) adjustment slider for photo-editor / DAW / animation parameters (brightness, exposure, gain, etc.) with double-click reset and arrow-key nudging
Maintainers
Readme
@molecule/app-adjustment-slider-react
Auto-generated, AI-first package reference for the molecule.dev ecosystem. It is written to be read by coding agents as much as by people, and is generated from this package's source — edit
src/index.tsJSDoc, not this file.
Adjustment slider feature for molecule.dev.
Bipolar (zero-center) numeric slider tuned for photo-editor / DAW /
animation parameter controls (brightness, contrast, saturation, exposure,
gain, pan, etc.). Pairs well with @molecule/app-feature-image-canvas-react.
Quick Start
import { AdjustmentSlider } from '@molecule/app-adjustment-slider-react'
;<AdjustmentSlider
label="Exposure"
value={exposure}
onChange={setExposure}
min={-100}
max={100}
step={1}
bipolar
unit="%"
/>Type
feature
Installation
npm install @molecule/app-adjustment-slider-react @molecule/app-react @molecule/app-ui react
npm install -D @types/reactAPI
Interfaces
AdjustmentSliderProps
Public props for <AdjustmentSlider>.
interface AdjustmentSliderProps {
/** Visible label (rendered to the left of the slider). */
label: string
/** Current numeric value. */
value: number
/** Called whenever the slider value changes. */
onChange: (value: number) => void
/** Lower bound. Defaults to `-100`. */
min?: number
/** Upper bound. Defaults to `100`. */
max?: number
/** Step increment. Defaults to `1`. */
step?: number
/**
* When `true` (default), the slider is bipolar with a center mark at zero
* and double-click / Reset returns the value to `0`. When `false`, the
* slider is unipolar (a normal range slider) and double-click resets to
* `min`.
*/
bipolar?: boolean
/** Optional unit suffix (e.g. `'%'`, `'dB'`) appended to the default formatter. */
unit?: string
/**
* Optional formatter overriding the default `value + (unit || '')` display.
* Useful for rendering e.g. `+12` (signed) or `1.4 EV`.
*/
format?: AdjustmentSliderFormatter
/**
* Optional reset handler. When provided, double-clicking the slider OR
* pressing the visual Reset button calls this instead of resetting to
* the default reset value.
*/
onReset?: () => void
/** Optional extra class names appended to the outer container. */
className?: string
/** Optional `data-mol-id` for AI-agent / E2E targeting. */
dataMolId?: string
}Types
AdjustmentSliderFormatter
Function signature used to format the rendered numeric value.
type AdjustmentSliderFormatter = (value: number) => stringFunctions
AdjustmentSlider(props)
Bipolar (zero-center) adjustment slider — a labelled <input type="range">
tuned for photo-editor / DAW / animation parameter controls (brightness,
contrast, saturation, exposure, gain, pan, etc.).
Behaviour:
- When
bipolaristrue(default), a center mark is rendered at zero and the reset target is0. Whenfalse, the slider is unipolar and the reset target ismin. - Double-clicking the input resets the value (calling
onResetif provided, otherwise emittingdefaultResetValue(min, bipolar)viaonChange). - Up/Right arrows nudge by
step; Down/Left arrows nudge by-step. Holding Shift multiplies the nudge by 10. - The numeric value display is formatted via
formatif supplied, otherwise viavalue + (unit || '').
function AdjustmentSlider({
label,
value,
onChange,
min = -100,
max = 100,
step = 1,
bipolar = true,
unit,
format,
onReset,
className,
dataMolId,
}: AdjustmentSliderProps): ReactElement<unknown, string | JSXElementConstructor<any>>props— Component props.props.label— Visible control label.props.value— Current numeric value.props.onChange— Called whenever the value changes.props.min— Lower bound (default-100).props.max— Upper bound (default100).props.step— Step increment (default1).props.bipolar— Bipolar / zero-center mode (defaulttrue).props.unit— Optional unit suffix appended to the default formatter.props.format— Optional custom value formatter.props.onReset— Optional reset handler (overrides default reset).props.className— Optional extra classes for the outer container.props.dataMolId— Optionaldata-mol-idfor the outer container.
Returns: The rendered adjustment slider.
clampStep(value, min, max, step)
Clamp a numeric value to the inclusive [min, max] range, snapping to the
nearest multiple of step measured from min. Does not assume min === 0
(so bipolar [-100, 100] works correctly with non-integer steps).
function clampStep(value: number, min: number, max: number, step: number): numbervalue— The raw value to normalise.min— Inclusive lower bound.max— Inclusive upper bound.step— Step increment (must be > 0).
Returns: The clamped + step-snapped value.
defaultFormatter(unit)
Build the default value formatter — appends an optional unit suffix.
function defaultFormatter(unit?: string): AdjustmentSliderFormatterunit— Optional unit string (e.g.'%').
Returns: A formatter producing "<value><unit>".
defaultResetValue(min, bipolar)
Compute the value the slider should reset to when double-clicked.
function defaultResetValue(min: number, bipolar: boolean): numbermin— Inclusive lower bound.bipolar— Whether the slider is in bipolar (zero-center) mode.
Returns: 0 for bipolar sliders, min otherwise.
keyboardNudge(step, shift)
Compute the keyboard nudge step for arrow keys.
Plain arrow → step. Shift-modifier → step * 10 so users can move in
coarser increments. Always at least step.
function keyboardNudge(step: number, shift: boolean): numberstep— The base step increment.shift— Whether the Shift modifier is held.
Returns: The effective per-keypress delta.
Injection Notes
Requirements
Peer dependencies:
@molecule/app-react^1.0.1@molecule/app-ui^1.0.1react^18.0.0 || ^19.0.0
Runtime Dependencies
@molecule/app-react@molecule/app-uireact
Translations
Translation strings are provided by @molecule/app-locales-adjustment-slider.
