@zag-js/range-slider
Version:
Core logic for the range-slider widget implemented as a state machine
1 lines • 43.8 kB
Source Map (JSON)
{"version":3,"sources":["../src/range-slider.anatomy.ts","../src/range-slider.connect.ts","../src/range-slider.dom.ts","../src/range-slider.style.ts","../src/range-slider.utils.ts","../src/range-slider.machine.ts"],"sourcesContent":["import { createAnatomy } from \"@zag-js/anatomy\"\n\nexport const anatomy = createAnatomy(\"range-slider\").parts(\n \"root\",\n \"label\",\n \"thumb\",\n \"output\",\n \"track\",\n \"range\",\n \"control\",\n \"markerGroup\",\n \"marker\",\n)\nexport const parts = anatomy.build()\n","import {\n getEventKey,\n getEventPoint,\n getEventStep,\n getNativeEvent,\n isLeftClick,\n isModifiedEvent,\n type EventKeyMap,\n} from \"@zag-js/dom-event\"\nimport { ariaAttr, dataAttr } from \"@zag-js/dom-query\"\nimport { getPercentValue, getValuePercent } from \"@zag-js/numeric-range\"\nimport type { NormalizeProps, PropTypes } from \"@zag-js/types\"\nimport { parts } from \"./range-slider.anatomy\"\nimport { dom } from \"./range-slider.dom\"\nimport type { MachineApi, Send, State } from \"./range-slider.types\"\nimport { getRangeAtIndex } from \"./range-slider.utils\"\n\nexport function connect<T extends PropTypes>(state: State, send: Send, normalize: NormalizeProps<T>): MachineApi<T> {\n const ariaLabel = state.context[\"aria-label\"]\n const ariaLabelledBy = state.context[\"aria-labelledby\"]\n const sliderValue = state.context.value\n\n const isFocused = state.matches(\"focus\")\n const isDragging = state.matches(\"dragging\")\n\n const isDisabled = state.context.isDisabled\n const isInvalid = state.context.invalid\n const isInteractive = state.context.isInteractive\n\n function getValuePercentFn(value: number) {\n return getValuePercent(value, state.context.min, state.context.max)\n }\n\n function getPercentValueFn(percent: number) {\n return getPercentValue(percent, state.context.min, state.context.max, state.context.step)\n }\n\n return {\n value: state.context.value,\n isDragging,\n isFocused,\n\n setValue(value: number[]) {\n send({ type: \"SET_VALUE\", value: value })\n },\n\n getThumbValue(index: number) {\n return sliderValue[index]\n },\n\n setThumbValue(index: number, value: number) {\n send({ type: \"SET_VALUE\", index, value })\n },\n\n getValuePercent: getValuePercentFn,\n\n getPercentValue: getPercentValueFn,\n\n getThumbPercent(index: number) {\n return getValuePercentFn(sliderValue[index])\n },\n\n setThumbPercent(index: number, percent: number) {\n const value = getPercentValueFn(percent)\n send({ type: \"SET_VALUE\", index, value })\n },\n\n getThumbMin(index: number) {\n return getRangeAtIndex(state.context, index).min\n },\n\n getThumbMax(index: number) {\n return getRangeAtIndex(state.context, index).max\n },\n\n increment(index: number) {\n send({ type: \"INCREMENT\", index })\n },\n\n decrement(index: number) {\n send({ type: \"DECREMENT\", index })\n },\n\n focus() {\n if (!isInteractive) return\n send({ type: \"FOCUS\", index: 0 })\n },\n\n labelProps: normalize.label({\n ...parts.label.attrs,\n dir: state.context.dir,\n \"data-disabled\": dataAttr(isDisabled),\n \"data-orientation\": state.context.orientation,\n \"data-invalid\": dataAttr(isInvalid),\n \"data-focus\": dataAttr(isFocused),\n id: dom.getLabelId(state.context),\n htmlFor: dom.getHiddenInputId(state.context, 0),\n onClick(event) {\n if (!isInteractive) return\n event.preventDefault()\n dom.getFirstEl(state.context)?.focus()\n },\n style: {\n userSelect: \"none\",\n },\n }),\n\n rootProps: normalize.element({\n ...parts.root.attrs,\n \"data-disabled\": dataAttr(isDisabled),\n \"data-orientation\": state.context.orientation,\n \"data-invalid\": dataAttr(isInvalid),\n \"data-focus\": dataAttr(isFocused),\n id: dom.getRootId(state.context),\n dir: state.context.dir,\n style: dom.getRootStyle(state.context),\n }),\n\n outputProps: normalize.output({\n ...parts.output.attrs,\n dir: state.context.dir,\n \"data-disabled\": dataAttr(isDisabled),\n \"data-orientation\": state.context.orientation,\n \"data-invalid\": dataAttr(isInvalid),\n \"data-focus\": dataAttr(isFocused),\n id: dom.getOutputId(state.context),\n htmlFor: sliderValue.map((_v, i) => dom.getHiddenInputId(state.context, i)).join(\" \"),\n \"aria-live\": \"off\",\n }),\n\n trackProps: normalize.element({\n ...parts.track.attrs,\n dir: state.context.dir,\n id: dom.getTrackId(state.context),\n \"data-disabled\": dataAttr(isDisabled),\n \"data-invalid\": dataAttr(isInvalid),\n \"data-orientation\": state.context.orientation,\n \"data-focus\": dataAttr(isFocused),\n style: { position: \"relative\" },\n }),\n\n getThumbProps(index: number) {\n const value = sliderValue[index]\n const range = getRangeAtIndex(state.context, index)\n const ariaValueText = state.context.getAriaValueText?.(value, index)\n const _ariaLabel = Array.isArray(ariaLabel) ? ariaLabel[index] : ariaLabel\n const _ariaLabelledBy = Array.isArray(ariaLabelledBy) ? ariaLabelledBy[index] : ariaLabelledBy\n\n return normalize.element({\n ...parts.thumb.attrs,\n dir: state.context.dir,\n \"data-index\": index,\n id: dom.getThumbId(state.context, index),\n \"data-disabled\": dataAttr(isDisabled),\n \"data-orientation\": state.context.orientation,\n \"data-focus\": dataAttr(isFocused && state.context.focusedIndex === index),\n draggable: false,\n \"aria-disabled\": ariaAttr(isDisabled),\n \"aria-label\": _ariaLabel,\n \"aria-labelledby\": _ariaLabelledBy ?? dom.getLabelId(state.context),\n \"aria-orientation\": state.context.orientation,\n \"aria-valuemax\": range.max,\n \"aria-valuemin\": range.min,\n \"aria-valuenow\": sliderValue[index],\n \"aria-valuetext\": ariaValueText,\n role: \"slider\",\n tabIndex: isDisabled ? undefined : 0,\n style: dom.getThumbStyle(state.context, index),\n onPointerDown(event) {\n if (!isInteractive) return\n send({ type: \"THUMB_POINTER_DOWN\", index })\n event.stopPropagation()\n },\n onBlur() {\n if (!isInteractive) return\n send(\"BLUR\")\n },\n onFocus() {\n if (!isInteractive) return\n send({ type: \"FOCUS\", index })\n },\n onKeyDown(event) {\n if (!isInteractive) return\n const step = getEventStep(event) * state.context.step\n let prevent = true\n const keyMap: EventKeyMap = {\n ArrowUp() {\n send({ type: \"ARROW_UP\", step })\n prevent = state.context.isVertical\n },\n ArrowDown() {\n send({ type: \"ARROW_DOWN\", step })\n prevent = state.context.isVertical\n },\n ArrowLeft() {\n send({ type: \"ARROW_LEFT\", step })\n prevent = state.context.isHorizontal\n },\n ArrowRight() {\n send({ type: \"ARROW_RIGHT\", step })\n prevent = state.context.isHorizontal\n },\n PageUp() {\n send({ type: \"PAGE_UP\", step })\n },\n PageDown() {\n send({ type: \"PAGE_DOWN\", step })\n },\n Home() {\n send(\"HOME\")\n },\n End() {\n send(\"END\")\n },\n }\n\n const key = getEventKey(event, state.context)\n const exec = keyMap[key]\n\n if (!exec) return\n exec(event)\n\n if (prevent) {\n event.preventDefault()\n event.stopPropagation()\n }\n },\n })\n },\n\n getHiddenInputProps(index: number) {\n return normalize.input({\n name: `${state.context.name}[${index}]`,\n form: state.context.form,\n type: \"text\",\n hidden: true,\n defaultValue: state.context.value[index],\n id: dom.getHiddenInputId(state.context, index),\n })\n },\n\n rangeProps: normalize.element({\n id: dom.getRangeId(state.context),\n ...parts.range.attrs,\n dir: state.context.dir,\n \"data-focus\": dataAttr(isFocused),\n \"data-invalid\": dataAttr(isInvalid),\n \"data-disabled\": dataAttr(isDisabled),\n \"data-orientation\": state.context.orientation,\n style: dom.getRangeStyle(state.context),\n }),\n\n controlProps: normalize.element({\n ...parts.control.attrs,\n dir: state.context.dir,\n id: dom.getControlId(state.context),\n \"data-disabled\": dataAttr(isDisabled),\n \"data-orientation\": state.context.orientation,\n \"data-invalid\": dataAttr(isInvalid),\n \"data-focus\": dataAttr(isFocused),\n style: dom.getControlStyle(),\n onPointerDown(event) {\n if (!isInteractive) return\n\n const evt = getNativeEvent(event)\n if (!isLeftClick(evt) || isModifiedEvent(evt)) return\n\n const point = getEventPoint(evt)\n send({ type: \"POINTER_DOWN\", point })\n\n event.preventDefault()\n event.stopPropagation()\n },\n }),\n\n markerGroupProps: normalize.element({\n ...parts.markerGroup.attrs,\n role: \"presentation\",\n dir: state.context.dir,\n \"aria-hidden\": true,\n \"data-orientation\": state.context.orientation,\n style: dom.getMarkerGroupStyle(),\n }),\n\n getMarkerProps({ value }: { value: number }) {\n const style = dom.getMarkerStyle(state.context, value)\n let markerState: \"over-value\" | \"under-value\" | \"at-value\"\n\n const first = state.context.value[0]\n const last = state.context.value[state.context.value.length - 1]\n\n if (value < first) {\n markerState = \"under-value\"\n } else if (value > last) {\n markerState = \"over-value\"\n } else {\n markerState = \"at-value\"\n }\n\n return normalize.element({\n ...parts.marker.attrs,\n id: dom.getMarkerId(state.context, value),\n role: \"presentation\",\n dir: state.context.dir,\n \"data-orientation\": state.context.orientation,\n \"data-value\": value,\n \"data-disabled\": dataAttr(isDisabled),\n \"data-state\": markerState,\n style,\n })\n },\n }\n}\n","import { getRelativePoint, type Point } from \"@zag-js/dom-event\"\nimport { createScope, queryAll } from \"@zag-js/dom-query\"\nimport { dispatchInputValueEvent } from \"@zag-js/form-utils\"\nimport { getPercentValue } from \"@zag-js/numeric-range\"\nimport { styleGetterFns } from \"./range-slider.style\"\nimport type { MachineContext as Ctx } from \"./range-slider.types\"\n\nexport const dom = createScope({\n ...styleGetterFns,\n getRootId: (ctx: Ctx) => ctx.ids?.root ?? `slider:${ctx.id}`,\n getThumbId: (ctx: Ctx, index: number) => ctx.ids?.thumb?.(index) ?? `slider:${ctx.id}:thumb:${index}`,\n getHiddenInputId: (ctx: Ctx, index: number) => `slider:${ctx.id}:input:${index}`,\n getControlId: (ctx: Ctx) => ctx.ids?.control ?? `slider:${ctx.id}:control`,\n getTrackId: (ctx: Ctx) => ctx.ids?.track ?? `slider:${ctx.id}:track`,\n getRangeId: (ctx: Ctx) => ctx.ids?.range ?? `slider:${ctx.id}:range`,\n getLabelId: (ctx: Ctx) => ctx.ids?.label ?? `slider:${ctx.id}:label`,\n getOutputId: (ctx: Ctx) => ctx.ids?.output ?? `slider:${ctx.id}:output`,\n getMarkerId: (ctx: Ctx, value: number) => ctx.ids?.marker?.(value) ?? `slider:${ctx.id}:marker:${value}`,\n\n getRootEl: (ctx: Ctx) => dom.getById(ctx, dom.getRootId(ctx)),\n getThumbEl: (ctx: Ctx, index: number) => dom.getById(ctx, dom.getThumbId(ctx, index)),\n getHiddenInputEl: (ctx: Ctx, index: number) => dom.getById<HTMLInputElement>(ctx, dom.getHiddenInputId(ctx, index)),\n getControlEl: (ctx: Ctx) => dom.getById(ctx, dom.getControlId(ctx)),\n getElements: (ctx: Ctx) => queryAll(dom.getControlEl(ctx), \"[role=slider]\"),\n getFirstEl: (ctx: Ctx) => dom.getElements(ctx)[0],\n getRangeEl: (ctx: Ctx) => dom.getById(ctx, dom.getRangeId(ctx)),\n\n getValueFromPoint(ctx: Ctx, point: Point) {\n const controlEl = dom.getControlEl(ctx)\n if (!controlEl) return\n const relativePoint = getRelativePoint(point, controlEl)\n const percent = relativePoint.getPercentValue({\n orientation: ctx.orientation,\n dir: ctx.dir,\n inverted: { y: true },\n })\n return getPercentValue(percent, ctx.min, ctx.max, ctx.step)\n },\n dispatchChangeEvent(ctx: Ctx) {\n const valueArray = Array.from(ctx.value)\n valueArray.forEach((value, index) => {\n const inputEl = dom.getHiddenInputEl(ctx, index)\n if (!inputEl) return\n dispatchInputValueEvent(inputEl, { value })\n })\n },\n})\n","import { unstable__dom as sliderDom } from \"@zag-js/slider\"\nimport type { Style } from \"@zag-js/types\"\nimport type { MachineContext as Ctx } from \"./range-slider.types\"\n\n/* -----------------------------------------------------------------------------\n * Range style calculations\n * -----------------------------------------------------------------------------*/\n\nfunction getBounds<T>(value: T[]): [T, T] {\n const firstValue = value[0]\n const lastThumb = value[value.length - 1]\n return [firstValue, lastThumb]\n}\n\nexport function getRangeOffsets(ctx: Ctx) {\n const [firstPercent, lastPercent] = getBounds(ctx.valuePercent)\n return { start: `${firstPercent}%`, end: `${100 - lastPercent}%` }\n}\n\n/* -----------------------------------------------------------------------------\n * Thumb style calculations\n * -----------------------------------------------------------------------------*/\n\nfunction getVisibility(ctx: Ctx) {\n let visibility: \"visible\" | \"hidden\" = \"visible\"\n if (ctx.thumbAlignment === \"contain\" && !ctx.hasMeasuredThumbSize) {\n visibility = \"hidden\"\n }\n return visibility\n}\n\nfunction getThumbStyle(ctx: Ctx, index: number): Style {\n const placementProp = ctx.isVertical ? \"bottom\" : \"insetInlineStart\"\n return {\n visibility: getVisibility(ctx),\n position: \"absolute\",\n transform: \"var(--slider-thumb-transform)\",\n [placementProp]: `var(--slider-thumb-offset-${index})`,\n }\n}\n\n/* -----------------------------------------------------------------------------\n * Root style calculations\n * -----------------------------------------------------------------------------*/\n\nfunction getRootStyle(ctx: Ctx): Style {\n const range = getRangeOffsets(ctx)\n\n const offsetStyles = ctx.value.reduce<Style>((styles, value, index) => {\n const offset = sliderDom.getThumbOffset({ ...ctx, value })\n return { ...styles, [`--slider-thumb-offset-${index}`]: offset }\n }, {})\n\n return {\n ...offsetStyles,\n \"--slider-thumb-transform\": ctx.isVertical ? \"translateY(50%)\" : ctx.isRtl ? \"translateX(50%)\" : \"translateX(-50%)\",\n \"--slider-range-start\": range.start,\n \"--slider-range-end\": range.end,\n }\n}\n\nexport const styleGetterFns = {\n getRootStyle,\n getControlStyle: sliderDom.getControlStyle,\n getThumbStyle,\n getRangeStyle: sliderDom.getRangeStyle,\n getMarkerStyle: sliderDom.getMarkerStyle,\n getMarkerGroupStyle: sliderDom.getMarkerGroupStyle,\n}\n","import {\n clampValue,\n getClosestValueIndex,\n getNextStepValue,\n getPreviousStepValue,\n getValueRanges,\n snapValueToStep,\n} from \"@zag-js/numeric-range\"\nimport type { MachineContext as Ctx } from \"./range-slider.types\"\n\nexport function normalizeValues(ctx: Ctx, nextValues: number[]) {\n return nextValues.map((value, index, values) => {\n return constrainValue({ ...ctx, value: values }, value, index)\n })\n}\n\nexport function clampPercent(percent: number) {\n return clampValue(percent, 0, 1)\n}\n\nexport function getRangeAtIndex(ctx: Ctx, index: number) {\n return getValueRanges(ctx.value, ctx.min, ctx.max, ctx.minStepsBetweenThumbs)[index]\n}\n\nexport function constrainValue(ctx: Ctx, value: number, index: number) {\n const range = getRangeAtIndex(ctx, index)\n const snapValue = snapValueToStep(value, ctx.min, ctx.max, ctx.step)\n return clampValue(snapValue, range.min, range.max)\n}\n\nexport function decrement(ctx: Ctx, index?: number, step?: number) {\n const idx = index ?? ctx.focusedIndex\n const range = getRangeAtIndex(ctx, idx)\n const nextValues = getPreviousStepValue(idx, {\n ...range,\n step: step ?? ctx.step,\n values: ctx.value,\n })\n nextValues[idx] = clampValue(nextValues[idx], range.min, range.max)\n return nextValues\n}\n\nexport function increment(ctx: Ctx, index?: number, step?: number) {\n const idx = index ?? ctx.focusedIndex\n const range = getRangeAtIndex(ctx, idx)\n const nextValues = getNextStepValue(idx, {\n ...range,\n step: step ?? ctx.step,\n values: ctx.value,\n })\n nextValues[idx] = clampValue(nextValues[idx], range.min, range.max)\n return nextValues\n}\n\nexport function getClosestIndex(ctx: Ctx, pointValue: number) {\n return getClosestValueIndex(ctx.value, pointValue)\n}\n\nexport function assignArray(current: number[], next: number[]) {\n for (let i = 0; i < next.length; i++) {\n const value = next[i]\n current[i] = value\n }\n}\n","import { createMachine } from \"@zag-js/core\"\nimport { trackPointerMove } from \"@zag-js/dom-event\"\nimport { raf } from \"@zag-js/dom-query\"\nimport { trackElementsSize, type ElementSize } from \"@zag-js/element-size\"\nimport { trackFormControl } from \"@zag-js/form-utils\"\nimport { getValuePercent } from \"@zag-js/numeric-range\"\nimport { compact, isEqual } from \"@zag-js/utils\"\nimport { dom } from \"./range-slider.dom\"\nimport type { MachineContext, MachineState, UserDefinedContext } from \"./range-slider.types\"\nimport {\n assignArray,\n constrainValue,\n decrement,\n getClosestIndex,\n getRangeAtIndex,\n increment,\n normalizeValues,\n} from \"./range-slider.utils\"\n\nconst isEqualSize = (a: ElementSize | null, b: ElementSize | null) => {\n return a?.width === b?.width && a?.height === b?.height\n}\n\nexport function machine(userContext: UserDefinedContext) {\n const ctx = compact(userContext)\n return createMachine<MachineContext, MachineState>(\n {\n id: \"range-slider\",\n initial: \"idle\",\n\n context: {\n thumbSize: null,\n thumbAlignment: \"contain\",\n threshold: 5,\n focusedIndex: -1,\n min: 0,\n max: 100,\n step: 1,\n value: [0, 100],\n orientation: \"horizontal\",\n dir: \"ltr\",\n minStepsBetweenThumbs: 0,\n disabled: false,\n ...ctx,\n fieldsetDisabled: false,\n },\n\n computed: {\n isHorizontal: (ctx) => ctx.orientation === \"horizontal\",\n isVertical: (ctx) => ctx.orientation === \"vertical\",\n isRtl: (ctx) => ctx.orientation === \"horizontal\" && ctx.dir === \"rtl\",\n isDisabled: (ctx) => !!ctx.disabled || ctx.fieldsetDisabled,\n isInteractive: (ctx) => !(ctx.readOnly || ctx.isDisabled),\n spacing: (ctx) => ctx.minStepsBetweenThumbs * ctx.step,\n hasMeasuredThumbSize: (ctx) => ctx.thumbSize != null,\n valuePercent(ctx) {\n return ctx.value.map((value) => 100 * getValuePercent(value, ctx.min, ctx.max))\n },\n },\n\n watch: {\n value: [\"syncInputElements\"],\n },\n\n entry: [\"coarseValue\"],\n\n activities: [\"trackFormControlState\", \"trackThumbsSize\"],\n\n on: {\n SET_VALUE: [\n {\n guard: \"hasIndex\",\n actions: \"setValueAtIndex\",\n },\n { actions: \"setValue\" },\n ],\n INCREMENT: {\n actions: \"incrementAtIndex\",\n },\n DECREMENT: {\n actions: \"decrementAtIndex\",\n },\n },\n\n states: {\n idle: {\n on: {\n POINTER_DOWN: {\n target: \"dragging\",\n actions: [\"setClosestThumbIndex\", \"setPointerValue\", \"invokeOnChangeStart\", \"focusActiveThumb\"],\n },\n FOCUS: {\n target: \"focus\",\n actions: \"setFocusedIndex\",\n },\n THUMB_POINTER_DOWN: {\n target: \"dragging\",\n actions: [\"setFocusedIndex\", \"invokeOnChangeStart\", \"focusActiveThumb\"],\n },\n },\n },\n focus: {\n entry: \"focusActiveThumb\",\n on: {\n POINTER_DOWN: {\n target: \"dragging\",\n actions: [\"setClosestThumbIndex\", \"setPointerValue\", \"invokeOnChangeStart\", \"focusActiveThumb\"],\n },\n THUMB_POINTER_DOWN: {\n target: \"dragging\",\n actions: [\"setFocusedIndex\", \"invokeOnChangeStart\", \"focusActiveThumb\"],\n },\n ARROW_LEFT: {\n guard: \"isHorizontal\",\n actions: \"decrementAtIndex\",\n },\n ARROW_RIGHT: {\n guard: \"isHorizontal\",\n actions: \"incrementAtIndex\",\n },\n ARROW_UP: {\n guard: \"isVertical\",\n actions: \"incrementAtIndex\",\n },\n ARROW_DOWN: {\n guard: \"isVertical\",\n actions: \"decrementAtIndex\",\n },\n PAGE_UP: {\n actions: \"incrementAtIndex\",\n },\n PAGE_DOWN: {\n actions: \"decrementAtIndex\",\n },\n HOME: {\n actions: \"setActiveThumbToMin\",\n },\n END: {\n actions: \"setActiveThumbToMax\",\n },\n BLUR: {\n target: \"idle\",\n actions: \"clearFocusedIndex\",\n },\n },\n },\n dragging: {\n entry: \"focusActiveThumb\",\n activities: \"trackPointerMove\",\n on: {\n POINTER_UP: {\n target: \"focus\",\n actions: \"invokeOnChangeEnd\",\n },\n POINTER_MOVE: {\n actions: \"setPointerValue\",\n },\n },\n },\n },\n },\n {\n guards: {\n isHorizontal: (ctx) => ctx.isHorizontal,\n isVertical: (ctx) => ctx.isVertical,\n hasIndex: (_ctx, evt) => evt.index != null,\n },\n activities: {\n trackFormControlState(ctx, _evt, { initialContext }) {\n return trackFormControl(dom.getRootEl(ctx), {\n onFieldsetDisabledChange(disabled) {\n ctx.fieldsetDisabled = disabled\n },\n onFormReset() {\n set.value(ctx, initialContext.value)\n },\n })\n },\n\n trackPointerMove(ctx, _evt, { send }) {\n return trackPointerMove(dom.getDoc(ctx), {\n onPointerMove(info) {\n send({ type: \"POINTER_MOVE\", point: info.point })\n },\n onPointerUp() {\n send(\"POINTER_UP\")\n },\n })\n },\n trackThumbsSize(ctx) {\n if (ctx.thumbAlignment !== \"contain\" || ctx.thumbSize) return\n\n return trackElementsSize({\n getNodes: () => dom.getElements(ctx),\n observeMutation: true,\n callback(size) {\n if (!size || isEqualSize(ctx.thumbSize, size)) return\n ctx.thumbSize = size\n },\n })\n },\n },\n actions: {\n syncInputElements(ctx) {\n ctx.value.forEach((value, index) => {\n const inputEl = dom.getHiddenInputEl(ctx, index)\n dom.setValue(inputEl, value)\n })\n },\n invokeOnChangeStart(ctx) {\n ctx.onValueChangeStart?.({ value: ctx.value })\n },\n invokeOnChangeEnd(ctx) {\n ctx.onValueChangeEnd?.({ value: ctx.value })\n },\n setClosestThumbIndex(ctx, evt) {\n const pointValue = dom.getValueFromPoint(ctx, evt.point)\n if (pointValue == null) return\n\n const focusedIndex = getClosestIndex(ctx, pointValue)\n set.focusedIndex(ctx, focusedIndex)\n },\n setFocusedIndex(ctx, evt) {\n set.focusedIndex(ctx, evt.index)\n },\n clearFocusedIndex(ctx) {\n set.focusedIndex(ctx, -1)\n },\n setPointerValue(ctx, evt) {\n const pointerValue = dom.getValueFromPoint(ctx, evt.point)\n if (pointerValue == null) return\n\n const value = constrainValue(ctx, pointerValue, ctx.focusedIndex)\n set.valueAtIndex(ctx, ctx.focusedIndex, value)\n },\n focusActiveThumb(ctx) {\n raf(() => {\n const thumbEl = dom.getThumbEl(ctx, ctx.focusedIndex)\n thumbEl?.focus({ preventScroll: true })\n })\n },\n decrementAtIndex(ctx, evt) {\n const value = decrement(ctx, evt.index, evt.step)\n set.value(ctx, value)\n },\n incrementAtIndex(ctx, evt) {\n const value = increment(ctx, evt.index, evt.step)\n set.value(ctx, value)\n },\n setActiveThumbToMin(ctx) {\n const { min } = getRangeAtIndex(ctx, ctx.focusedIndex)\n set.valueAtIndex(ctx, ctx.focusedIndex, min)\n },\n setActiveThumbToMax(ctx) {\n const { max } = getRangeAtIndex(ctx, ctx.focusedIndex)\n set.valueAtIndex(ctx, ctx.focusedIndex, max)\n },\n coarseValue(ctx) {\n const value = normalizeValues(ctx, ctx.value)\n set.value(ctx, value)\n },\n setValueAtIndex(ctx, evt) {\n const value = constrainValue(ctx, evt.value, evt.index)\n set.valueAtIndex(ctx, evt.index, value)\n },\n setValue(ctx, evt) {\n const value = normalizeValues(ctx, evt.value)\n set.value(ctx, value)\n },\n },\n },\n )\n}\n\nconst invoke = {\n change: (ctx: MachineContext) => {\n ctx.onValueChange?.({\n value: Array.from(ctx.value),\n })\n dom.dispatchChangeEvent(ctx)\n },\n focusChange: (ctx: MachineContext) => {\n ctx.onFocusChange?.({\n value: Array.from(ctx.value),\n focusedIndex: ctx.focusedIndex,\n })\n },\n}\n\nconst set = {\n valueAtIndex: (ctx: MachineContext, index: number, value: number) => {\n if (isEqual(ctx.value[index], value)) return\n ctx.value[index] = value\n invoke.change(ctx)\n },\n value: (ctx: MachineContext, value: number[]) => {\n if (isEqual(ctx.value, value)) return\n assignArray(ctx.value, value)\n invoke.change(ctx)\n },\n focusedIndex: (ctx: MachineContext, index: number) => {\n if (isEqual(ctx.focusedIndex, index)) return\n ctx.focusedIndex = index\n invoke.focusChange(ctx)\n },\n}\n"],"mappings":"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","names":["getPercentValue","getPercentValue","getValuePercent","ctx","getValuePercent"]}