@zag-js/slider 0.15.0 → 0.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/slider.anatomy.ts","../src/slider.connect.ts","../src/slider.dom.ts","../src/slider.style.ts","../src/slider.machine.ts","../src/slider.utils.ts"],"sourcesContent":["export { anatomy } from \"./slider.anatomy\"\nexport { connect } from \"./slider.connect\"\nexport { dom as unstable__dom } from \"./slider.dom\"\nexport { machine } from \"./slider.machine\"\nexport type { UserDefinedContext as Context, PublicApi } from \"./slider.types\"\n","import { createAnatomy } from \"@zag-js/anatomy\"\n\nexport const anatomy = createAnatomy(\"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 \"./slider.anatomy\"\nimport { dom } from \"./slider.dom\"\nimport type { PublicApi, Send, State } from \"./slider.types\"\n\nexport function connect<T extends PropTypes>(state: State, send: Send, normalize: NormalizeProps<T>): PublicApi<T> {\n const ariaLabel = state.context[\"aria-label\"]\n const ariaLabelledBy = state.context[\"aria-labelledby\"]\n const ariaValueText = state.context.getAriaValueText?.(state.context.value)\n\n const isFocused = state.matches(\"focus\")\n const isDragging = state.matches(\"dragging\")\n const isDisabled = state.context.disabled\n const isInteractive = state.context.isInteractive\n const isInvalid = state.context.invalid\n\n function getPercentValueFn(percent: number) {\n return getPercentValue(percent, state.context.min, state.context.max, state.context.step)\n }\n\n function getValuePercentFn(value: number) {\n return getValuePercent(value, state.context.min, state.context.max)\n }\n\n // TODO - getMarkerState\n\n return {\n isFocused,\n isDragging,\n value: state.context.value,\n percent: getValuePercent(state.context.value, state.context.min, state.context.max),\n\n setValue(value: number) {\n send({ type: \"SET_VALUE\", value })\n },\n\n getPercentValue: getPercentValueFn,\n\n getValuePercent: getValuePercentFn,\n\n focus() {\n dom.getThumbEl(state.context)?.focus()\n },\n /**\n * Function to increment the value of the slider by the step.\n */\n increment() {\n send(\"INCREMENT\")\n },\n\n decrement() {\n send(\"DECREMENT\")\n },\n\n rootProps: normalize.element({\n ...parts.root.attrs,\n \"data-disabled\": dataAttr(isDisabled),\n \"data-focus\": dataAttr(isFocused),\n \"data-orientation\": state.context.orientation,\n \"data-invalid\": dataAttr(isInvalid),\n id: dom.getRootId(state.context),\n dir: state.context.dir,\n style: dom.getRootStyle(state.context),\n }),\n\n labelProps: normalize.label({\n ...parts.label.attrs,\n \"data-disabled\": dataAttr(isDisabled),\n \"data-invalid\": dataAttr(isInvalid),\n \"data-focus\": dataAttr(isFocused),\n id: dom.getLabelId(state.context),\n htmlFor: dom.getHiddenInputId(state.context),\n onClick(event) {\n if (!isInteractive) return\n event.preventDefault()\n dom.getThumbEl(state.context)?.focus()\n },\n style: dom.getLabelStyle(),\n }),\n\n thumbProps: normalize.element({\n ...parts.thumb.attrs,\n id: dom.getThumbId(state.context),\n \"data-disabled\": dataAttr(isDisabled),\n \"data-orientation\": state.context.orientation,\n \"data-focus\": dataAttr(isFocused),\n draggable: false,\n \"aria-invalid\": ariaAttr(isInvalid),\n \"data-invalid\": dataAttr(isInvalid),\n \"aria-disabled\": ariaAttr(isDisabled),\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabel ? undefined : ariaLabelledBy ?? dom.getLabelId(state.context),\n \"aria-orientation\": state.context.orientation,\n \"aria-valuemax\": state.context.max,\n \"aria-valuemin\": state.context.min,\n \"aria-valuenow\": state.context.value,\n \"aria-valuetext\": ariaValueText,\n role: \"slider\",\n tabIndex: isDisabled ? undefined : 0,\n onBlur() {\n if (!isInteractive) return\n send(\"BLUR\")\n },\n onFocus() {\n if (!isInteractive) return\n send(\"FOCUS\")\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 }\n },\n style: dom.getThumbStyle(state.context),\n }),\n\n hiddenInputProps: normalize.input({\n type: \"text\",\n defaultValue: state.context.value,\n name: state.context.name,\n form: state.context.form,\n id: dom.getHiddenInputId(state.context),\n hidden: true,\n }),\n\n outputProps: normalize.output({\n ...parts.output.attrs,\n \"data-disabled\": dataAttr(isDisabled),\n \"data-invalid\": dataAttr(isInvalid),\n \"data-orientation\": state.context.orientation,\n id: dom.getOutputId(state.context),\n htmlFor: dom.getHiddenInputId(state.context),\n \"aria-live\": \"off\",\n }),\n\n trackProps: normalize.element({\n ...parts.track.attrs,\n id: dom.getTrackId(state.context),\n \"data-disabled\": dataAttr(isDisabled),\n \"data-focus\": dataAttr(isFocused),\n \"data-invalid\": dataAttr(isInvalid),\n \"data-orientation\": state.context.orientation,\n style: dom.getTrackStyle(),\n }),\n\n rangeProps: normalize.element({\n ...parts.range.attrs,\n id: dom.getRangeId(state.context),\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 id: dom.getControlId(state.context),\n \"data-disabled\": dataAttr(isDisabled),\n \"data-invalid\": dataAttr(isInvalid),\n \"data-orientation\": state.context.orientation,\n \"data-focus\": dataAttr(isFocused),\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 style: dom.getControlStyle(),\n }),\n\n markerGroupProps: normalize.element({\n ...parts.markerGroup.attrs,\n role: \"presentation\",\n \"aria-hidden\": true,\n \"data-orientation\": state.context.orientation,\n style: dom.getMarkerGroupStyle(),\n }),\n\n getMarkerProps({ value }: { value: number }) {\n const percent = getValuePercentFn(value)\n const style = dom.getMarkerStyle(state.context, percent)\n const markerState =\n value > state.context.value ? \"over-value\" : value < state.context.value ? \"under-value\" : \"at-value\"\n\n return normalize.element({\n ...parts.marker.attrs,\n id: dom.getMarkerId(state.context, value),\n role: \"presentation\",\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 } from \"@zag-js/dom-event\"\nimport { createScope } from \"@zag-js/dom-query\"\nimport { dispatchInputValueEvent } from \"@zag-js/form-utils\"\nimport { getPercentValue } from \"@zag-js/numeric-range\"\nimport { styles } from \"./slider.style\"\nimport type { MachineContext as Ctx, Point } from \"./slider.types\"\n\nexport const dom = createScope({\n ...styles,\n\n getRootId: (ctx: Ctx) => ctx.ids?.root ?? `slider:${ctx.id}`,\n getThumbId: (ctx: Ctx) => ctx.ids?.thumb ?? `slider:${ctx.id}:thumb`,\n getControlId: (ctx: Ctx) => ctx.ids?.control ?? `slider:${ctx.id}:control`,\n getHiddenInputId: (ctx: Ctx) => ctx.ids?.hiddenInput ?? `slider:${ctx.id}:input`,\n getOutputId: (ctx: Ctx) => ctx.ids?.output ?? `slider:${ctx.id}:output`,\n getTrackId: (ctx: Ctx) => ctx.ids?.track ?? `slider:${ctx.id}track`,\n getRangeId: (ctx: Ctx) => ctx.ids?.track ?? `slider:${ctx.id}:range`,\n getLabelId: (ctx: Ctx) => ctx.ids?.label ?? `slider:${ctx.id}:label`,\n getMarkerId: (ctx: Ctx, value: number) => `slider:${ctx.id}:marker:${value}`,\n\n getRootEl: (ctx: Ctx) => dom.getById(ctx, dom.getRootId(ctx)),\n getThumbEl: (ctx: Ctx) => dom.getById(ctx, dom.getThumbId(ctx)),\n getControlEl: (ctx: Ctx) => dom.getById(ctx, dom.getControlId(ctx)),\n getHiddenInputEl: (ctx: Ctx) => dom.getById<HTMLInputElement>(ctx, dom.getHiddenInputId(ctx)),\n\n getValueFromPoint(ctx: Ctx, point: Point): number | undefined {\n const controlEl = dom.getControlEl(ctx)\n if (!controlEl) return\n\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\n dispatchChangeEvent(ctx: Ctx) {\n const input = dom.getHiddenInputEl(ctx)\n if (!input) return\n dispatchInputValueEvent(input, { value: ctx.value })\n },\n})\n","import { getValuePercent, getValueTransformer } from \"@zag-js/numeric-range\"\nimport type { Style } from \"@zag-js/types\"\nimport type { MachineContext as Ctx, SharedContext } from \"./slider.types\"\n\n/* -----------------------------------------------------------------------------\n * Thumb style calculations\n * -----------------------------------------------------------------------------*/\n\nfunction getVerticalThumbOffset(ctx: SharedContext) {\n const { height = 0 } = ctx.thumbSize ?? {}\n const getValue = getValueTransformer([ctx.min, ctx.max], [-height / 2, height / 2])\n return parseFloat(getValue(ctx.value).toFixed(2))\n}\n\nfunction getHorizontalThumbOffset(ctx: SharedContext) {\n const { width = 0 } = ctx.thumbSize ?? {}\n\n if (ctx.isRtl) {\n const getValue = getValueTransformer([ctx.max, ctx.min], [-width * 1.5, -width / 2])\n return -1 * parseFloat(getValue(ctx.value).toFixed(2))\n }\n\n const getValue = getValueTransformer([ctx.min, ctx.max], [-width / 2, width / 2])\n return parseFloat(getValue(ctx.value).toFixed(2))\n}\n\nfunction getThumbOffset(ctx: SharedContext) {\n const percent = getValuePercent(ctx.value, ctx.min, ctx.max) * 100\n\n if (ctx.thumbAlignment === \"center\") {\n return `${percent}%`\n }\n\n const offset = ctx.isVertical ? getVerticalThumbOffset(ctx) : getHorizontalThumbOffset(ctx)\n return `calc(${percent}% - ${offset}px)`\n}\n\nfunction getVisibility(ctx: SharedContext) {\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: SharedContext): Style {\n const placementProp = ctx.isVertical ? \"bottom\" : ctx.isRtl ? \"right\" : \"left\"\n return {\n visibility: getVisibility(ctx),\n position: \"absolute\",\n transform: \"var(--slider-thumb-transform)\",\n [placementProp]: \"var(--slider-thumb-offset)\",\n }\n}\n\n/* -----------------------------------------------------------------------------\n * Range style calculations\n * -----------------------------------------------------------------------------*/\n\nfunction getRangeOffsets(ctx: Ctx) {\n let start = \"0%\"\n let end = `${100 - ctx.valuePercent}%`\n\n if (ctx.origin === \"center\") {\n const isNegative = ctx.valuePercent < 50\n start = isNegative ? `${ctx.valuePercent}%` : \"50%\"\n end = isNegative ? \"50%\" : end\n }\n\n return { start, end }\n}\n\nfunction getRangeStyle(ctx: Pick<SharedContext, \"isVertical\" | \"isRtl\">): Style {\n if (ctx.isVertical) {\n return {\n position: \"absolute\",\n bottom: \"var(--slider-range-start)\",\n top: \"var(--slider-range-end)\",\n }\n }\n\n return {\n position: \"absolute\",\n [ctx.isRtl ? \"right\" : \"left\"]: \"var(--slider-range-start)\",\n [ctx.isRtl ? \"left\" : \"right\"]: \"var(--slider-range-end)\",\n }\n}\n\n/* -----------------------------------------------------------------------------\n * Control style calculations\n * -----------------------------------------------------------------------------*/\n\nfunction getControlStyle(): Style {\n return {\n touchAction: \"none\",\n userSelect: \"none\",\n position: \"relative\",\n }\n}\n\n/* -----------------------------------------------------------------------------\n * Root style calculations\n * -----------------------------------------------------------------------------*/\n\nfunction getRootStyle(ctx: Ctx): Style {\n const range = getRangeOffsets(ctx)\n return {\n \"--slider-thumb-transform\": ctx.isVertical ? \"translateY(50%)\" : \"translateX(-50%)\",\n \"--slider-thumb-offset\": getThumbOffset(ctx),\n \"--slider-range-start\": range.start,\n \"--slider-range-end\": range.end,\n }\n}\n\n/* -----------------------------------------------------------------------------\n * Marker style calculations\n * -----------------------------------------------------------------------------*/\n\nfunction getMarkerStyle(ctx: Pick<SharedContext, \"isHorizontal\" | \"isRtl\">, percent: number): Style {\n return {\n position: \"absolute\",\n pointerEvents: \"none\",\n [ctx.isHorizontal ? \"left\" : \"bottom\"]: `${(ctx.isRtl ? 1 - percent : percent) * 100}%`,\n }\n}\n\n/* -----------------------------------------------------------------------------\n * Label style calculations\n * -----------------------------------------------------------------------------*/\n\nfunction getLabelStyle(): Style {\n return { userSelect: \"none\" }\n}\n\n/* -----------------------------------------------------------------------------\n * Label style calculations\n * -----------------------------------------------------------------------------*/\n\nfunction getTrackStyle(): Style {\n return { position: \"relative\" }\n}\n\n/* -----------------------------------------------------------------------------\n * Label style calculations\n * -----------------------------------------------------------------------------*/\n\nfunction getMarkerGroupStyle(): Style {\n return {\n userSelect: \"none\",\n pointerEvents: \"none\",\n position: \"relative\",\n }\n}\n\nexport const styles = {\n getThumbOffset,\n getControlStyle,\n getThumbStyle,\n getRangeStyle,\n getRootStyle,\n getMarkerStyle,\n getLabelStyle,\n getTrackStyle,\n getMarkerGroupStyle,\n}\n","import { createMachine } from \"@zag-js/core\"\nimport { trackPointerMove } from \"@zag-js/dom-event\"\nimport { raf } from \"@zag-js/dom-query\"\nimport { trackElementSize } from \"@zag-js/element-size\"\nimport { trackFormControl } from \"@zag-js/form-utils\"\nimport { clampValue, getValuePercent } from \"@zag-js/numeric-range\"\nimport { compact } from \"@zag-js/utils\"\nimport { dom } from \"./slider.dom\"\nimport type { MachineContext, MachineState, UserDefinedContext } from \"./slider.types\"\nimport { constrainValue, decrement, increment } from \"./slider.utils\"\n\nexport function machine(userContext: UserDefinedContext) {\n const ctx = compact(userContext)\n return createMachine<MachineContext, MachineState>(\n {\n id: \"slider\",\n initial: \"idle\",\n context: {\n thumbSize: null,\n thumbAlignment: \"contain\",\n disabled: false,\n threshold: 5,\n dir: \"ltr\",\n origin: \"start\",\n orientation: \"horizontal\",\n initialValue: null,\n value: 0,\n step: 1,\n min: 0,\n max: 100,\n ...ctx,\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 isInteractive: (ctx) => !(ctx.disabled || ctx.readOnly),\n hasMeasuredThumbSize: (ctx) => ctx.thumbSize !== null,\n valuePercent: (ctx) => 100 * getValuePercent(ctx.value, ctx.min, ctx.max),\n },\n\n watch: {\n value: [\"invokeOnChange\", \"dispatchChangeEvent\"],\n },\n\n activities: [\"trackFormControlState\", \"trackThumbSize\"],\n\n on: {\n SET_VALUE: {\n actions: \"setValue\",\n },\n INCREMENT: {\n actions: \"increment\",\n },\n DECREMENT: {\n actions: \"decrement\",\n },\n },\n\n entry: [\"checkValue\"],\n\n states: {\n idle: {\n on: {\n POINTER_DOWN: {\n target: \"dragging\",\n actions: [\"setPointerValue\", \"invokeOnChangeStart\", \"focusThumb\"],\n },\n FOCUS: \"focus\",\n },\n },\n\n focus: {\n entry: \"focusThumb\",\n on: {\n POINTER_DOWN: {\n target: \"dragging\",\n actions: [\"setPointerValue\", \"invokeOnChangeStart\", \"focusThumb\"],\n },\n ARROW_LEFT: {\n guard: \"isHorizontal\",\n actions: \"decrement\",\n },\n ARROW_RIGHT: {\n guard: \"isHorizontal\",\n actions: \"increment\",\n },\n ARROW_UP: {\n guard: \"isVertical\",\n actions: \"increment\",\n },\n ARROW_DOWN: {\n guard: \"isVertical\",\n actions: \"decrement\",\n },\n PAGE_UP: {\n actions: \"increment\",\n },\n PAGE_DOWN: {\n actions: \"decrement\",\n },\n HOME: {\n actions: \"setToMin\",\n },\n END: {\n actions: \"setToMax\",\n },\n BLUR: \"idle\",\n },\n },\n\n dragging: {\n entry: \"focusThumb\",\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 },\n\n activities: {\n trackFormControlState(ctx) {\n return trackFormControl(dom.getHiddenInputEl(ctx), {\n onFieldsetDisabled() {\n ctx.disabled = true\n },\n onFormReset() {\n if (ctx.initialValue != null) {\n ctx.value = ctx.initialValue\n }\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 trackThumbSize(ctx, _evt) {\n if (ctx.thumbAlignment !== \"contain\") return\n return trackElementSize(dom.getThumbEl(ctx), (size) => {\n if (size) ctx.thumbSize = size\n })\n },\n },\n\n actions: {\n checkValue(ctx) {\n const value = constrainValue(ctx, ctx.value)\n ctx.value = value\n ctx.initialValue = value\n },\n invokeOnChangeStart(ctx) {\n ctx.onChangeStart?.({ value: ctx.value })\n },\n invokeOnChangeEnd(ctx) {\n ctx.onChangeEnd?.({ value: ctx.value })\n },\n invokeOnChange(ctx) {\n ctx.onChange?.({ value: ctx.value })\n },\n dispatchChangeEvent(ctx) {\n dom.dispatchChangeEvent(ctx)\n },\n setPointerValue(ctx, evt) {\n const value = dom.getValueFromPoint(ctx, evt.point)\n if (value == null) return\n ctx.value = clampValue(value, ctx.min, ctx.max)\n },\n focusThumb(ctx) {\n raf(() => dom.getThumbEl(ctx)?.focus())\n },\n decrement(ctx, evt) {\n ctx.value = decrement(ctx, evt.step)\n },\n increment(ctx, evt) {\n ctx.value = increment(ctx, evt.step)\n },\n setToMin(ctx) {\n ctx.value = ctx.min\n },\n setToMax(ctx) {\n ctx.value = ctx.max\n },\n setValue(ctx, evt) {\n ctx.value = constrainValue(ctx, evt.value)\n },\n },\n },\n )\n}\n","import { clampValue, getNextStepValue, getPreviousStepValue, snapValueToStep } from \"@zag-js/numeric-range\"\nimport type { MachineContext as Ctx } from \"./slider.types\"\n\nexport function clampPercent(percent: number) {\n return clampValue(percent, 0, 1)\n}\n\nexport function constrainValue(ctx: Ctx, value: number) {\n const snapValue = snapValueToStep(value, ctx.min, ctx.max, ctx.step)\n return clampValue(snapValue, ctx.min, ctx.max)\n}\n\nexport function decrement(ctx: Ctx, step?: number) {\n const index = 0\n const values = getPreviousStepValue(index, {\n ...ctx,\n step: step ?? ctx.step,\n values: [ctx.value],\n })\n return values[index]\n}\n\nexport function increment(ctx: Ctx, step?: number) {\n const index = 0\n const values = getNextStepValue(index, {\n ...ctx,\n step: step ?? ctx.step,\n values: [ctx.value],\n })\n return values[index]\n}\n"],"mappings":"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","names":["import_dom_event","import_dom_query","import_numeric_range","import_numeric_range","getValue","import_dom_event","import_dom_query","import_form_utils","import_numeric_range","import_numeric_range","ctx"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/slider.anatomy.ts","../src/slider.connect.ts","../src/slider.dom.ts","../src/slider.style.ts","../src/slider.machine.ts","../src/slider.utils.ts"],"sourcesContent":["export { anatomy } from \"./slider.anatomy\"\nexport { connect } from \"./slider.connect\"\nexport { dom as unstable__dom } from \"./slider.dom\"\nexport { machine } from \"./slider.machine\"\nexport type { UserDefinedContext as Context, MachineApi as Api } from \"./slider.types\"\n","import { createAnatomy } from \"@zag-js/anatomy\"\n\nexport const anatomy = createAnatomy(\"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 \"./slider.anatomy\"\nimport { dom } from \"./slider.dom\"\nimport type { MachineApi, Send, State } from \"./slider.types\"\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 ariaValueText = state.context.getAriaValueText?.(state.context.value)\n\n const isFocused = state.matches(\"focus\")\n const isDragging = state.matches(\"dragging\")\n const isDisabled = state.context.isDisabled\n const isInteractive = state.context.isInteractive\n const isInvalid = state.context.invalid\n\n function getPercentValueFn(percent: number) {\n return getPercentValue(percent, state.context.min, state.context.max, state.context.step)\n }\n\n function getValuePercentFn(value: number) {\n return getValuePercent(value, state.context.min, state.context.max)\n }\n\n return {\n isFocused,\n isDragging,\n value: state.context.value,\n percent: getValuePercent(state.context.value, state.context.min, state.context.max),\n\n setValue(value: number) {\n send({ type: \"SET_VALUE\", value })\n },\n\n getPercentValue: getPercentValueFn,\n\n getValuePercent: getValuePercentFn,\n\n focus() {\n dom.getThumbEl(state.context)?.focus()\n },\n /**\n * Function to increment the value of the slider by the step.\n */\n increment() {\n send(\"INCREMENT\")\n },\n\n decrement() {\n send(\"DECREMENT\")\n },\n\n rootProps: normalize.element({\n ...parts.root.attrs,\n \"data-disabled\": dataAttr(isDisabled),\n \"data-focus\": dataAttr(isFocused),\n \"data-orientation\": state.context.orientation,\n \"data-invalid\": dataAttr(isInvalid),\n id: dom.getRootId(state.context),\n dir: state.context.dir,\n style: dom.getRootStyle(state.context),\n }),\n\n labelProps: normalize.label({\n ...parts.label.attrs,\n \"data-disabled\": dataAttr(isDisabled),\n \"data-invalid\": dataAttr(isInvalid),\n \"data-focus\": dataAttr(isFocused),\n id: dom.getLabelId(state.context),\n htmlFor: dom.getHiddenInputId(state.context),\n onClick(event) {\n if (!isInteractive) return\n event.preventDefault()\n dom.getThumbEl(state.context)?.focus()\n },\n style: dom.getLabelStyle(),\n }),\n\n thumbProps: normalize.element({\n ...parts.thumb.attrs,\n id: dom.getThumbId(state.context),\n \"data-disabled\": dataAttr(isDisabled),\n \"data-orientation\": state.context.orientation,\n \"data-focus\": dataAttr(isFocused),\n draggable: false,\n \"aria-invalid\": ariaAttr(isInvalid),\n \"data-invalid\": dataAttr(isInvalid),\n \"aria-disabled\": ariaAttr(isDisabled),\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabel ? undefined : ariaLabelledBy ?? dom.getLabelId(state.context),\n \"aria-orientation\": state.context.orientation,\n \"aria-valuemax\": state.context.max,\n \"aria-valuemin\": state.context.min,\n \"aria-valuenow\": state.context.value,\n \"aria-valuetext\": ariaValueText,\n role: \"slider\",\n tabIndex: isDisabled ? undefined : 0,\n onPointerDown(event) {\n send({ type: \"THUMB_POINTER_DOWN\" })\n event.stopPropagation()\n },\n onBlur() {\n if (!isInteractive) return\n send(\"BLUR\")\n },\n onFocus() {\n if (!isInteractive) return\n send(\"FOCUS\")\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 }\n },\n style: dom.getThumbStyle(state.context),\n }),\n\n hiddenInputProps: normalize.input({\n defaultValue: state.context.value,\n name: state.context.name,\n form: state.context.form,\n id: dom.getHiddenInputId(state.context),\n hidden: true,\n }),\n\n outputProps: normalize.output({\n ...parts.output.attrs,\n \"data-disabled\": dataAttr(isDisabled),\n \"data-invalid\": dataAttr(isInvalid),\n \"data-orientation\": state.context.orientation,\n id: dom.getOutputId(state.context),\n htmlFor: dom.getHiddenInputId(state.context),\n \"aria-live\": \"off\",\n }),\n\n trackProps: normalize.element({\n ...parts.track.attrs,\n id: dom.getTrackId(state.context),\n \"data-disabled\": dataAttr(isDisabled),\n \"data-focus\": dataAttr(isFocused),\n \"data-invalid\": dataAttr(isInvalid),\n \"data-orientation\": state.context.orientation,\n style: dom.getTrackStyle(),\n }),\n\n rangeProps: normalize.element({\n ...parts.range.attrs,\n id: dom.getRangeId(state.context),\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 id: dom.getControlId(state.context),\n \"data-disabled\": dataAttr(isDisabled),\n \"data-invalid\": dataAttr(isInvalid),\n \"data-orientation\": state.context.orientation,\n \"data-focus\": dataAttr(isFocused),\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 style: dom.getControlStyle(),\n }),\n\n markerGroupProps: normalize.element({\n ...parts.markerGroup.attrs,\n role: \"presentation\",\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 const markerState =\n value > state.context.value ? \"over-value\" : value === state.context.value ? \"at-value\" : \"under-value\"\n\n return normalize.element({\n ...parts.marker.attrs,\n dir: state.context.dir,\n id: dom.getMarkerId(state.context, value),\n role: \"presentation\",\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 } from \"@zag-js/dom-event\"\nimport { createScope } from \"@zag-js/dom-query\"\nimport { dispatchInputValueEvent } from \"@zag-js/form-utils\"\nimport { getPercentValue } from \"@zag-js/numeric-range\"\nimport { styles } from \"./slider.style\"\nimport type { MachineContext as Ctx, Point } from \"./slider.types\"\n\nexport const dom = createScope({\n ...styles,\n\n getRootId: (ctx: Ctx) => ctx.ids?.root ?? `slider:${ctx.id}`,\n getThumbId: (ctx: Ctx) => ctx.ids?.thumb ?? `slider:${ctx.id}:thumb`,\n getControlId: (ctx: Ctx) => ctx.ids?.control ?? `slider:${ctx.id}:control`,\n getHiddenInputId: (ctx: Ctx) => ctx.ids?.hiddenInput ?? `slider:${ctx.id}:input`,\n getOutputId: (ctx: Ctx) => ctx.ids?.output ?? `slider:${ctx.id}:output`,\n getTrackId: (ctx: Ctx) => ctx.ids?.track ?? `slider:${ctx.id}track`,\n getRangeId: (ctx: Ctx) => ctx.ids?.track ?? `slider:${ctx.id}:range`,\n getLabelId: (ctx: Ctx) => ctx.ids?.label ?? `slider:${ctx.id}:label`,\n getMarkerId: (ctx: Ctx, value: number) => `slider:${ctx.id}:marker:${value}`,\n\n getRootEl: (ctx: Ctx) => dom.getById(ctx, dom.getRootId(ctx)),\n getThumbEl: (ctx: Ctx) => dom.getById(ctx, dom.getThumbId(ctx)),\n getControlEl: (ctx: Ctx) => dom.getById(ctx, dom.getControlId(ctx)),\n getHiddenInputEl: (ctx: Ctx) => dom.getById<HTMLInputElement>(ctx, dom.getHiddenInputId(ctx)),\n\n getValueFromPoint(ctx: Ctx, point: Point): number | undefined {\n const controlEl = dom.getControlEl(ctx)\n if (!controlEl) return\n\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\n dispatchChangeEvent(ctx: Ctx) {\n const input = dom.getHiddenInputEl(ctx)\n if (!input) return\n dispatchInputValueEvent(input, { value: ctx.value })\n },\n})\n","import { getValuePercent, getValueTransformer } from \"@zag-js/numeric-range\"\nimport type { Style } from \"@zag-js/types\"\nimport type { MachineContext as Ctx, SharedContext } from \"./slider.types\"\n\n/* -----------------------------------------------------------------------------\n * Thumb style calculations\n * -----------------------------------------------------------------------------*/\n\nfunction getVerticalThumbOffset(ctx: SharedContext) {\n const { height = 0 } = ctx.thumbSize ?? {}\n const getValue = getValueTransformer([ctx.min, ctx.max], [-height / 2, height / 2])\n return parseFloat(getValue(ctx.value).toFixed(2))\n}\n\nfunction getHorizontalThumbOffset(ctx: SharedContext) {\n const { width = 0 } = ctx.thumbSize ?? {}\n\n if (ctx.isRtl) {\n const getValue = getValueTransformer([ctx.max, ctx.min], [-width / 2, width / 2])\n return -1 * parseFloat(getValue(ctx.value).toFixed(2))\n }\n\n const getValue = getValueTransformer([ctx.min, ctx.max], [-width / 2, width / 2])\n return parseFloat(getValue(ctx.value).toFixed(2))\n}\n\nfunction getOffset(ctx: SharedContext, percent: number) {\n if (ctx.thumbAlignment === \"center\") return `${percent}%`\n const offset = ctx.isVertical ? getVerticalThumbOffset(ctx) : getHorizontalThumbOffset(ctx)\n return `calc(${percent}% - ${offset}px)`\n}\n\nfunction getThumbOffset(ctx: SharedContext) {\n let percent = getValuePercent(ctx.value, ctx.min, ctx.max) * 100\n return getOffset(ctx, percent)\n}\n\nfunction getVisibility(ctx: Pick<SharedContext, \"thumbAlignment\" | \"hasMeasuredThumbSize\">) {\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: SharedContext): 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)\",\n }\n}\n\n/* -----------------------------------------------------------------------------\n * Range style calculations\n * -----------------------------------------------------------------------------*/\n\nfunction getRangeOffsets(ctx: Ctx) {\n let start = \"0%\"\n let end = `${100 - ctx.valuePercent}%`\n\n if (ctx.origin === \"center\") {\n const isNegative = ctx.valuePercent < 50\n start = isNegative ? `${ctx.valuePercent}%` : \"50%\"\n end = isNegative ? \"50%\" : end\n }\n\n return { start, end }\n}\n\nfunction getRangeStyle(ctx: Pick<SharedContext, \"isVertical\" | \"isRtl\">): Style {\n if (ctx.isVertical) {\n return {\n position: \"absolute\",\n bottom: \"var(--slider-range-start)\",\n top: \"var(--slider-range-end)\",\n }\n }\n\n return {\n position: \"absolute\",\n [ctx.isRtl ? \"right\" : \"left\"]: \"var(--slider-range-start)\",\n [ctx.isRtl ? \"left\" : \"right\"]: \"var(--slider-range-end)\",\n }\n}\n\n/* -----------------------------------------------------------------------------\n * Control style calculations\n * -----------------------------------------------------------------------------*/\n\nfunction getControlStyle(): Style {\n return {\n touchAction: \"none\",\n userSelect: \"none\",\n position: \"relative\",\n }\n}\n\n/* -----------------------------------------------------------------------------\n * Root style calculations\n * -----------------------------------------------------------------------------*/\n\nfunction getRootStyle(ctx: Ctx): Style {\n const range = getRangeOffsets(ctx)\n return {\n \"--slider-thumb-transform\": ctx.isVertical ? \"translateY(50%)\" : ctx.isRtl ? \"translateX(50%)\" : \"translateX(-50%)\",\n \"--slider-thumb-offset\": getThumbOffset(ctx),\n \"--slider-range-start\": range.start,\n \"--slider-range-end\": range.end,\n }\n}\n\n/* -----------------------------------------------------------------------------\n * Marker style calculations\n * -----------------------------------------------------------------------------*/\n\nfunction getMarkerStyle(\n ctx: Pick<SharedContext, \"isHorizontal\" | \"isRtl\" | \"thumbAlignment\" | \"hasMeasuredThumbSize\">,\n value: number,\n): Style {\n return {\n visibility: getVisibility(ctx),\n position: \"absolute\",\n pointerEvents: \"none\",\n // @ts-expect-error\n [ctx.isHorizontal ? \"insetInlineStart\" : \"bottom\"]: getThumbOffset({ ...ctx, value }),\n translate: \"var(--tx) var(--ty)\",\n \"--tx\": ctx.isHorizontal ? (ctx.isRtl ? \"50%\" : \"-50%\") : \"0%\",\n \"--ty\": !ctx.isHorizontal ? \"50%\" : \"0%\",\n }\n}\n\n/* -----------------------------------------------------------------------------\n * Label style calculations\n * -----------------------------------------------------------------------------*/\n\nfunction getLabelStyle(): Style {\n return { userSelect: \"none\" }\n}\n\n/* -----------------------------------------------------------------------------\n * Label style calculations\n * -----------------------------------------------------------------------------*/\n\nfunction getTrackStyle(): Style {\n return { position: \"relative\" }\n}\n\n/* -----------------------------------------------------------------------------\n * Label style calculations\n * -----------------------------------------------------------------------------*/\n\nfunction getMarkerGroupStyle(): Style {\n return {\n userSelect: \"none\",\n pointerEvents: \"none\",\n position: \"relative\",\n }\n}\n\nexport const styles = {\n getThumbOffset,\n getControlStyle,\n getThumbStyle,\n getRangeStyle,\n getRootStyle,\n getMarkerStyle,\n getLabelStyle,\n getTrackStyle,\n getMarkerGroupStyle,\n}\n","import { createMachine } from \"@zag-js/core\"\nimport { trackPointerMove } from \"@zag-js/dom-event\"\nimport { raf } from \"@zag-js/dom-query\"\nimport { trackElementSize } from \"@zag-js/element-size\"\nimport { trackFormControl } from \"@zag-js/form-utils\"\nimport { clampValue, getValuePercent } from \"@zag-js/numeric-range\"\nimport { compact } from \"@zag-js/utils\"\nimport { dom } from \"./slider.dom\"\nimport type { MachineContext, MachineState, UserDefinedContext } from \"./slider.types\"\nimport { constrainValue, decrement, increment } from \"./slider.utils\"\n\nexport function machine(userContext: UserDefinedContext) {\n const ctx = compact(userContext)\n return createMachine<MachineContext, MachineState>(\n {\n id: \"slider\",\n initial: \"idle\",\n context: {\n thumbSize: null,\n thumbAlignment: \"contain\",\n threshold: 5,\n dir: \"ltr\",\n origin: \"start\",\n orientation: \"horizontal\",\n value: 0,\n step: 1,\n min: 0,\n max: 100,\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.isDisabled || ctx.readOnly),\n hasMeasuredThumbSize: (ctx) => ctx.thumbSize !== null,\n valuePercent: (ctx) => 100 * getValuePercent(ctx.value, ctx.min, ctx.max),\n },\n\n watch: {\n value: [\"syncInputElement\"],\n },\n\n activities: [\"trackFormControlState\", \"trackThumbSize\"],\n\n on: {\n SET_VALUE: {\n actions: \"setValue\",\n },\n INCREMENT: {\n actions: \"increment\",\n },\n DECREMENT: {\n actions: \"decrement\",\n },\n },\n\n entry: [\"checkValue\"],\n\n states: {\n idle: {\n on: {\n POINTER_DOWN: {\n target: \"dragging\",\n actions: [\"setPointerValue\", \"invokeOnChangeStart\", \"focusThumb\"],\n },\n FOCUS: \"focus\",\n THUMB_POINTER_DOWN: {\n target: \"dragging\",\n actions: [\"invokeOnChangeStart\", \"focusThumb\"],\n },\n },\n },\n\n focus: {\n entry: \"focusThumb\",\n on: {\n POINTER_DOWN: {\n target: \"dragging\",\n actions: [\"setPointerValue\", \"invokeOnChangeStart\", \"focusThumb\"],\n },\n THUMB_POINTER_DOWN: {\n target: \"dragging\",\n actions: [\"invokeOnChangeStart\", \"focusThumb\"],\n },\n ARROW_LEFT: {\n guard: \"isHorizontal\",\n actions: \"decrement\",\n },\n ARROW_RIGHT: {\n guard: \"isHorizontal\",\n actions: \"increment\",\n },\n ARROW_UP: {\n guard: \"isVertical\",\n actions: \"increment\",\n },\n ARROW_DOWN: {\n guard: \"isVertical\",\n actions: \"decrement\",\n },\n PAGE_UP: {\n actions: \"increment\",\n },\n PAGE_DOWN: {\n actions: \"decrement\",\n },\n HOME: {\n actions: \"setToMin\",\n },\n END: {\n actions: \"setToMax\",\n },\n BLUR: \"idle\",\n },\n },\n\n dragging: {\n entry: \"focusThumb\",\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 },\n\n activities: {\n trackFormControlState(ctx, _evt, { initialContext }) {\n return trackFormControl(dom.getHiddenInputEl(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 trackThumbSize(ctx, _evt) {\n if (ctx.thumbAlignment !== \"contain\" || ctx.thumbSize) return\n return trackElementSize(dom.getThumbEl(ctx), (size) => {\n if (size) ctx.thumbSize = size\n })\n },\n },\n\n actions: {\n checkValue(ctx) {\n ctx.value = constrainValue(ctx, ctx.value)\n },\n invokeOnChangeStart(ctx) {\n ctx.onChangeStart?.({ value: ctx.value })\n },\n invokeOnChangeEnd(ctx) {\n ctx.onChangeEnd?.({ value: ctx.value })\n },\n setPointerValue(ctx, evt) {\n const value = dom.getValueFromPoint(ctx, evt.point)\n if (value == null) return\n set.value(ctx, clampValue(value, ctx.min, ctx.max))\n },\n focusThumb(ctx) {\n raf(() => dom.getThumbEl(ctx)?.focus({ preventScroll: true }))\n },\n decrement(ctx, evt) {\n const value = decrement(ctx, evt.step)\n set.value(ctx, value)\n },\n increment(ctx, evt) {\n const value = increment(ctx, evt.step)\n set.value(ctx, value)\n },\n setToMin(ctx) {\n set.value(ctx, ctx.min)\n },\n setToMax(ctx) {\n set.value(ctx, ctx.max)\n },\n setValue(ctx, evt) {\n const value = constrainValue(ctx, evt.value)\n set.value(ctx, value)\n },\n syncInputElement(ctx) {\n const inputEl = dom.getHiddenInputEl(ctx)\n dom.setValue(inputEl, ctx.value)\n },\n },\n },\n )\n}\n\nconst invoke = {\n change: (ctx: MachineContext) => {\n ctx.onChange?.({ value: ctx.value })\n dom.dispatchChangeEvent(ctx)\n },\n}\n\nconst set = {\n value: (ctx: MachineContext, value: number) => {\n ctx.value = value\n invoke.change(ctx)\n },\n}\n","import { clampValue, getNextStepValue, getPreviousStepValue, snapValueToStep } from \"@zag-js/numeric-range\"\nimport type { MachineContext as Ctx } from \"./slider.types\"\n\nexport function clampPercent(percent: number) {\n return clampValue(percent, 0, 1)\n}\n\nexport function constrainValue(ctx: Ctx, value: number) {\n const snapValue = snapValueToStep(value, ctx.min, ctx.max, ctx.step)\n return clampValue(snapValue, ctx.min, ctx.max)\n}\n\nexport function decrement(ctx: Ctx, step?: number) {\n const index = 0\n const values = getPreviousStepValue(index, {\n ...ctx,\n step: step ?? ctx.step,\n values: [ctx.value],\n })\n return values[index]\n}\n\nexport function increment(ctx: Ctx, step?: number) {\n const index = 0\n const values = getNextStepValue(index, {\n ...ctx,\n step: step ?? ctx.step,\n values: [ctx.value],\n })\n return values[index]\n}\n"],"mappings":"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","names":["import_dom_event","import_dom_query","import_numeric_range","import_numeric_range","getValue","import_dom_event","import_dom_query","import_form_utils","import_numeric_range","import_numeric_range","ctx"]}
package/dist/index.mjs CHANGED
@@ -41,20 +41,22 @@ function getVerticalThumbOffset(ctx) {
41
41
  function getHorizontalThumbOffset(ctx) {
42
42
  const { width = 0 } = ctx.thumbSize ?? {};
43
43
  if (ctx.isRtl) {
44
- const getValue2 = getValueTransformer([ctx.max, ctx.min], [-width * 1.5, -width / 2]);
44
+ const getValue2 = getValueTransformer([ctx.max, ctx.min], [-width / 2, width / 2]);
45
45
  return -1 * parseFloat(getValue2(ctx.value).toFixed(2));
46
46
  }
47
47
  const getValue = getValueTransformer([ctx.min, ctx.max], [-width / 2, width / 2]);
48
48
  return parseFloat(getValue(ctx.value).toFixed(2));
49
49
  }
50
- function getThumbOffset(ctx) {
51
- const percent = getValuePercent(ctx.value, ctx.min, ctx.max) * 100;
52
- if (ctx.thumbAlignment === "center") {
50
+ function getOffset(ctx, percent) {
51
+ if (ctx.thumbAlignment === "center")
53
52
  return `${percent}%`;
54
- }
55
53
  const offset = ctx.isVertical ? getVerticalThumbOffset(ctx) : getHorizontalThumbOffset(ctx);
56
54
  return `calc(${percent}% - ${offset}px)`;
57
55
  }
56
+ function getThumbOffset(ctx) {
57
+ let percent = getValuePercent(ctx.value, ctx.min, ctx.max) * 100;
58
+ return getOffset(ctx, percent);
59
+ }
58
60
  function getVisibility(ctx) {
59
61
  let visibility = "visible";
60
62
  if (ctx.thumbAlignment === "contain" && !ctx.hasMeasuredThumbSize) {
@@ -63,7 +65,7 @@ function getVisibility(ctx) {
63
65
  return visibility;
64
66
  }
65
67
  function getThumbStyle(ctx) {
66
- const placementProp = ctx.isVertical ? "bottom" : ctx.isRtl ? "right" : "left";
68
+ const placementProp = ctx.isVertical ? "bottom" : "insetInlineStart";
67
69
  return {
68
70
  visibility: getVisibility(ctx),
69
71
  position: "absolute",
@@ -105,17 +107,22 @@ function getControlStyle() {
105
107
  function getRootStyle(ctx) {
106
108
  const range = getRangeOffsets(ctx);
107
109
  return {
108
- "--slider-thumb-transform": ctx.isVertical ? "translateY(50%)" : "translateX(-50%)",
110
+ "--slider-thumb-transform": ctx.isVertical ? "translateY(50%)" : ctx.isRtl ? "translateX(50%)" : "translateX(-50%)",
109
111
  "--slider-thumb-offset": getThumbOffset(ctx),
110
112
  "--slider-range-start": range.start,
111
113
  "--slider-range-end": range.end
112
114
  };
113
115
  }
114
- function getMarkerStyle(ctx, percent) {
116
+ function getMarkerStyle(ctx, value) {
115
117
  return {
118
+ visibility: getVisibility(ctx),
116
119
  position: "absolute",
117
120
  pointerEvents: "none",
118
- [ctx.isHorizontal ? "left" : "bottom"]: `${(ctx.isRtl ? 1 - percent : percent) * 100}%`
121
+ // @ts-expect-error
122
+ [ctx.isHorizontal ? "insetInlineStart" : "bottom"]: getThumbOffset({ ...ctx, value }),
123
+ translate: "var(--tx) var(--ty)",
124
+ "--tx": ctx.isHorizontal ? ctx.isRtl ? "50%" : "-50%" : "0%",
125
+ "--ty": !ctx.isHorizontal ? "50%" : "0%"
119
126
  };
120
127
  }
121
128
  function getLabelStyle() {
@@ -186,7 +193,7 @@ function connect(state, send, normalize) {
186
193
  const ariaValueText = state.context.getAriaValueText?.(state.context.value);
187
194
  const isFocused = state.matches("focus");
188
195
  const isDragging = state.matches("dragging");
189
- const isDisabled = state.context.disabled;
196
+ const isDisabled = state.context.isDisabled;
190
197
  const isInteractive = state.context.isInteractive;
191
198
  const isInvalid = state.context.invalid;
192
199
  function getPercentValueFn(percent) {
@@ -261,6 +268,10 @@ function connect(state, send, normalize) {
261
268
  "aria-valuetext": ariaValueText,
262
269
  role: "slider",
263
270
  tabIndex: isDisabled ? void 0 : 0,
271
+ onPointerDown(event) {
272
+ send({ type: "THUMB_POINTER_DOWN" });
273
+ event.stopPropagation();
274
+ },
264
275
  onBlur() {
265
276
  if (!isInteractive)
266
277
  return;
@@ -318,7 +329,6 @@ function connect(state, send, normalize) {
318
329
  style: dom.getThumbStyle(state.context)
319
330
  }),
320
331
  hiddenInputProps: normalize.input({
321
- type: "text",
322
332
  defaultValue: state.context.value,
323
333
  name: state.context.name,
324
334
  form: state.context.form,
@@ -380,11 +390,11 @@ function connect(state, send, normalize) {
380
390
  style: dom.getMarkerGroupStyle()
381
391
  }),
382
392
  getMarkerProps({ value }) {
383
- const percent = getValuePercentFn(value);
384
- const style = dom.getMarkerStyle(state.context, percent);
385
- const markerState = value > state.context.value ? "over-value" : value < state.context.value ? "under-value" : "at-value";
393
+ const style = dom.getMarkerStyle(state.context, value);
394
+ const markerState = value > state.context.value ? "over-value" : value === state.context.value ? "at-value" : "under-value";
386
395
  return normalize.element({
387
396
  ...parts.marker.attrs,
397
+ dir: state.context.dir,
388
398
  id: dom.getMarkerId(state.context, value),
389
399
  role: "presentation",
390
400
  "data-orientation": state.context.orientation,
@@ -441,28 +451,29 @@ function machine(userContext) {
441
451
  context: {
442
452
  thumbSize: null,
443
453
  thumbAlignment: "contain",
444
- disabled: false,
445
454
  threshold: 5,
446
455
  dir: "ltr",
447
456
  origin: "start",
448
457
  orientation: "horizontal",
449
- initialValue: null,
450
458
  value: 0,
451
459
  step: 1,
452
460
  min: 0,
453
461
  max: 100,
454
- ...ctx
462
+ disabled: false,
463
+ ...ctx,
464
+ fieldsetDisabled: false
455
465
  },
456
466
  computed: {
457
467
  isHorizontal: (ctx2) => ctx2.orientation === "horizontal",
458
468
  isVertical: (ctx2) => ctx2.orientation === "vertical",
459
469
  isRtl: (ctx2) => ctx2.orientation === "horizontal" && ctx2.dir === "rtl",
460
- isInteractive: (ctx2) => !(ctx2.disabled || ctx2.readOnly),
470
+ isDisabled: (ctx2) => ctx2.disabled || ctx2.fieldsetDisabled,
471
+ isInteractive: (ctx2) => !(ctx2.isDisabled || ctx2.readOnly),
461
472
  hasMeasuredThumbSize: (ctx2) => ctx2.thumbSize !== null,
462
473
  valuePercent: (ctx2) => 100 * getValuePercent3(ctx2.value, ctx2.min, ctx2.max)
463
474
  },
464
475
  watch: {
465
- value: ["invokeOnChange", "dispatchChangeEvent"]
476
+ value: ["syncInputElement"]
466
477
  },
467
478
  activities: ["trackFormControlState", "trackThumbSize"],
468
479
  on: {
@@ -484,7 +495,11 @@ function machine(userContext) {
484
495
  target: "dragging",
485
496
  actions: ["setPointerValue", "invokeOnChangeStart", "focusThumb"]
486
497
  },
487
- FOCUS: "focus"
498
+ FOCUS: "focus",
499
+ THUMB_POINTER_DOWN: {
500
+ target: "dragging",
501
+ actions: ["invokeOnChangeStart", "focusThumb"]
502
+ }
488
503
  }
489
504
  },
490
505
  focus: {
@@ -494,6 +509,10 @@ function machine(userContext) {
494
509
  target: "dragging",
495
510
  actions: ["setPointerValue", "invokeOnChangeStart", "focusThumb"]
496
511
  },
512
+ THUMB_POINTER_DOWN: {
513
+ target: "dragging",
514
+ actions: ["invokeOnChangeStart", "focusThumb"]
515
+ },
497
516
  ARROW_LEFT: {
498
517
  guard: "isHorizontal",
499
518
  actions: "decrement"
@@ -546,15 +565,13 @@ function machine(userContext) {
546
565
  isVertical: (ctx2) => ctx2.isVertical
547
566
  },
548
567
  activities: {
549
- trackFormControlState(ctx2) {
568
+ trackFormControlState(ctx2, _evt, { initialContext }) {
550
569
  return trackFormControl(dom.getHiddenInputEl(ctx2), {
551
- onFieldsetDisabled() {
552
- ctx2.disabled = true;
570
+ onFieldsetDisabledChange(disabled) {
571
+ ctx2.fieldsetDisabled = disabled;
553
572
  },
554
573
  onFormReset() {
555
- if (ctx2.initialValue != null) {
556
- ctx2.value = ctx2.initialValue;
557
- }
574
+ set.value(ctx2, initialContext.value);
558
575
  }
559
576
  });
560
577
  },
@@ -569,7 +586,7 @@ function machine(userContext) {
569
586
  });
570
587
  },
571
588
  trackThumbSize(ctx2, _evt) {
572
- if (ctx2.thumbAlignment !== "contain")
589
+ if (ctx2.thumbAlignment !== "contain" || ctx2.thumbSize)
573
590
  return;
574
591
  return trackElementSize(dom.getThumbEl(ctx2), (size) => {
575
592
  if (size)
@@ -579,9 +596,7 @@ function machine(userContext) {
579
596
  },
580
597
  actions: {
581
598
  checkValue(ctx2) {
582
- const value = constrainValue(ctx2, ctx2.value);
583
- ctx2.value = value;
584
- ctx2.initialValue = value;
599
+ ctx2.value = constrainValue(ctx2, ctx2.value);
585
600
  },
586
601
  invokeOnChangeStart(ctx2) {
587
602
  ctx2.onChangeStart?.({ value: ctx2.value });
@@ -589,40 +604,53 @@ function machine(userContext) {
589
604
  invokeOnChangeEnd(ctx2) {
590
605
  ctx2.onChangeEnd?.({ value: ctx2.value });
591
606
  },
592
- invokeOnChange(ctx2) {
593
- ctx2.onChange?.({ value: ctx2.value });
594
- },
595
- dispatchChangeEvent(ctx2) {
596
- dom.dispatchChangeEvent(ctx2);
597
- },
598
607
  setPointerValue(ctx2, evt) {
599
608
  const value = dom.getValueFromPoint(ctx2, evt.point);
600
609
  if (value == null)
601
610
  return;
602
- ctx2.value = clampValue2(value, ctx2.min, ctx2.max);
611
+ set.value(ctx2, clampValue2(value, ctx2.min, ctx2.max));
603
612
  },
604
613
  focusThumb(ctx2) {
605
- raf(() => dom.getThumbEl(ctx2)?.focus());
614
+ raf(() => dom.getThumbEl(ctx2)?.focus({ preventScroll: true }));
606
615
  },
607
616
  decrement(ctx2, evt) {
608
- ctx2.value = decrement(ctx2, evt.step);
617
+ const value = decrement(ctx2, evt.step);
618
+ set.value(ctx2, value);
609
619
  },
610
620
  increment(ctx2, evt) {
611
- ctx2.value = increment(ctx2, evt.step);
621
+ const value = increment(ctx2, evt.step);
622
+ set.value(ctx2, value);
612
623
  },
613
624
  setToMin(ctx2) {
614
- ctx2.value = ctx2.min;
625
+ set.value(ctx2, ctx2.min);
615
626
  },
616
627
  setToMax(ctx2) {
617
- ctx2.value = ctx2.max;
628
+ set.value(ctx2, ctx2.max);
618
629
  },
619
630
  setValue(ctx2, evt) {
620
- ctx2.value = constrainValue(ctx2, evt.value);
631
+ const value = constrainValue(ctx2, evt.value);
632
+ set.value(ctx2, value);
633
+ },
634
+ syncInputElement(ctx2) {
635
+ const inputEl = dom.getHiddenInputEl(ctx2);
636
+ dom.setValue(inputEl, ctx2.value);
621
637
  }
622
638
  }
623
639
  }
624
640
  );
625
641
  }
642
+ var invoke = {
643
+ change: (ctx) => {
644
+ ctx.onChange?.({ value: ctx.value });
645
+ dom.dispatchChangeEvent(ctx);
646
+ }
647
+ };
648
+ var set = {
649
+ value: (ctx, value) => {
650
+ ctx.value = value;
651
+ invoke.change(ctx);
652
+ }
653
+ };
626
654
  export {
627
655
  anatomy,
628
656
  connect,