@zag-js/slider 0.51.1 → 0.52.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 CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __hasOwnProp=Object.prototype.hasOwnProperty;var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:true})};var __copyProps=(to,from,except,desc)=>{if(from&&typeof from==="object"||typeof from==="function"){for(let key of __getOwnPropNames(from))if(!__hasOwnProp.call(to,key)&&key!==except)__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable})}return to};var __toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:true}),mod);var src_exports={};__export(src_exports,{anatomy:()=>anatomy,connect:()=>connect,machine:()=>machine,props:()=>props,splitProps:()=>splitProps,splitThumbProps:()=>splitThumbProps,thumbProps:()=>thumbProps});module.exports=__toCommonJS(src_exports);var import_anatomy=require("@zag-js/anatomy");var anatomy=(0,import_anatomy.createAnatomy)("slider").parts("root","label","thumb","valueText","track","range","control","markerGroup","marker");var parts=anatomy.build();var import_dom_event2=require("@zag-js/dom-event");var import_dom_query2=require("@zag-js/dom-query");var import_numeric_range4=require("@zag-js/numeric-range");var import_dom_event=require("@zag-js/dom-event");var import_dom_query=require("@zag-js/dom-query");var import_form_utils=require("@zag-js/form-utils");var import_numeric_range2=require("@zag-js/numeric-range");var import_numeric_range=require("@zag-js/numeric-range");function getBounds(value){const firstValue=value[0];const lastThumb=value[value.length-1];return[firstValue,lastThumb]}function getRangeOffsets(ctx){const[firstPercent,lastPercent]=getBounds(ctx.valuePercent);if(ctx.valuePercent.length===1){if(ctx.origin==="center"){const isNegative=ctx.valuePercent[0]<50;const start=isNegative?`${ctx.valuePercent[0]}%`:"50%";const end=isNegative?"50%":`${100-ctx.valuePercent[0]}%`;return{start,end}}return{start:"0%",end:`${100-lastPercent}%`}}return{start:`${firstPercent}%`,end:`${100-lastPercent}%`}}function getRangeStyle(ctx){if(ctx.isVertical){return{position:"absolute",bottom:"var(--slider-range-start)",top:"var(--slider-range-end)"}}return{position:"absolute",[ctx.isRtl?"right":"left"]:"var(--slider-range-start)",[ctx.isRtl?"left":"right"]:"var(--slider-range-end)"}}function getVerticalThumbOffset(ctx){const{height=0}=ctx.thumbSize??{};const getValue=(0,import_numeric_range.getValueTransformer)([ctx.min,ctx.max],[-height/2,height/2]);return parseFloat(getValue(ctx.value).toFixed(2))}function getHorizontalThumbOffset(ctx){const{width=0}=ctx.thumbSize??{};if(ctx.isRtl){const getValue2=(0,import_numeric_range.getValueTransformer)([ctx.max,ctx.min],[-width/2,width/2]);return-1*parseFloat(getValue2(ctx.value).toFixed(2))}const getValue=(0,import_numeric_range.getValueTransformer)([ctx.min,ctx.max],[-width/2,width/2]);return parseFloat(getValue(ctx.value).toFixed(2))}function getOffset(ctx,percent){if(ctx.thumbAlignment==="center")return`${percent}%`;const offset=ctx.isVertical?getVerticalThumbOffset(ctx):getHorizontalThumbOffset(ctx);return`calc(${percent}% - ${offset}px)`}function getThumbOffset(ctx){let percent=(0,import_numeric_range.getValuePercent)(ctx.value,ctx.min,ctx.max)*100;return getOffset(ctx,percent)}function getVisibility(ctx){let visibility="visible";if(ctx.thumbAlignment==="contain"&&!ctx.hasMeasuredThumbSize){visibility="hidden"}return visibility}function getThumbStyle(ctx,index){const placementProp=ctx.isVertical?"bottom":"insetInlineStart";return{visibility:getVisibility(ctx),position:"absolute",transform:"var(--slider-thumb-transform)",[placementProp]:`var(--slider-thumb-offset-${index})`}}function getControlStyle(){return{touchAction:"none",userSelect:"none",position:"relative"}}function getRootStyle(ctx){const range=getRangeOffsets(ctx);const offsetStyles=ctx.value.reduce((styles,value,index)=>{const offset=getThumbOffset({...ctx,value});return{...styles,[`--slider-thumb-offset-${index}`]:offset}},{});return{...offsetStyles,"--slider-thumb-transform":ctx.isVertical?"translateY(50%)":ctx.isRtl?"translateX(50%)":"translateX(-50%)","--slider-range-start":range.start,"--slider-range-end":range.end}}function getMarkerStyle(ctx,value){return{visibility:getVisibility(ctx),position:"absolute",pointerEvents:"none",[ctx.isHorizontal?"insetInlineStart":"bottom"]:getThumbOffset({...ctx,value}),translate:"var(--tx) var(--ty)","--tx":ctx.isHorizontal?ctx.isRtl?"50%":"-50%":"0%","--ty":!ctx.isHorizontal?"50%":"0%"}}function getMarkerGroupStyle(){return{userSelect:"none",pointerEvents:"none",position:"relative"}}var styleGetterFns={getRootStyle,getControlStyle,getThumbStyle,getRangeStyle,getMarkerStyle,getMarkerGroupStyle};var dom=(0,import_dom_query.createScope)({...styleGetterFns,getRootId:ctx=>ctx.ids?.root??`slider:${ctx.id}`,getThumbId:(ctx,index)=>ctx.ids?.thumb?.(index)??`slider:${ctx.id}:thumb:${index}`,getHiddenInputId:(ctx,index)=>`slider:${ctx.id}:input:${index}`,getControlId:ctx=>ctx.ids?.control??`slider:${ctx.id}:control`,getTrackId:ctx=>ctx.ids?.track??`slider:${ctx.id}:track`,getRangeId:ctx=>ctx.ids?.range??`slider:${ctx.id}:range`,getLabelId:ctx=>ctx.ids?.label??`slider:${ctx.id}:label`,getValueTextId:ctx=>ctx.ids?.valueText??`slider:${ctx.id}:valueText`,getMarkerId:(ctx,value)=>ctx.ids?.marker?.(value)??`slider:${ctx.id}:marker:${value}`,getRootEl:ctx=>dom.getById(ctx,dom.getRootId(ctx)),getThumbEl:(ctx,index)=>dom.getById(ctx,dom.getThumbId(ctx,index)),getHiddenInputEl:(ctx,index)=>dom.getById(ctx,dom.getHiddenInputId(ctx,index)),getControlEl:ctx=>dom.getById(ctx,dom.getControlId(ctx)),getElements:ctx=>(0,import_dom_query.queryAll)(dom.getControlEl(ctx),"[role=slider]"),getFirstEl:ctx=>dom.getElements(ctx)[0],getRangeEl:ctx=>dom.getById(ctx,dom.getRangeId(ctx)),getValueFromPoint(ctx,point){const controlEl=dom.getControlEl(ctx);if(!controlEl)return;const relativePoint=(0,import_dom_event.getRelativePoint)(point,controlEl);const percent=relativePoint.getPercentValue({orientation:ctx.orientation,dir:ctx.dir,inverted:{y:true}});return(0,import_numeric_range2.getPercentValue)(percent,ctx.min,ctx.max,ctx.step)},dispatchChangeEvent(ctx){const valueArray=Array.from(ctx.value);valueArray.forEach((value,index)=>{const inputEl=dom.getHiddenInputEl(ctx,index);if(!inputEl)return;(0,import_form_utils.dispatchInputValueEvent)(inputEl,{value})})}});var import_numeric_range3=require("@zag-js/numeric-range");function normalizeValues(ctx,nextValues){return nextValues.map((value,index,values)=>{return constrainValue({...ctx,value:values},value,index)})}function getRangeAtIndex(ctx,index){return(0,import_numeric_range3.getValueRanges)(ctx.value,ctx.min,ctx.max,ctx.minStepsBetweenThumbs)[index]}function constrainValue(ctx,value,index){const range=getRangeAtIndex(ctx,index);const snapValue=(0,import_numeric_range3.snapValueToStep)(value,ctx.min,ctx.max,ctx.step);return(0,import_numeric_range3.clampValue)(snapValue,range.min,range.max)}function decrement(ctx,index,step){const idx=index??ctx.focusedIndex;const range=getRangeAtIndex(ctx,idx);const nextValues=(0,import_numeric_range3.getPreviousStepValue)(idx,{...range,step:step??ctx.step,values:ctx.value});nextValues[idx]=(0,import_numeric_range3.clampValue)(nextValues[idx],range.min,range.max);return nextValues}function increment(ctx,index,step){const idx=index??ctx.focusedIndex;const range=getRangeAtIndex(ctx,idx);const nextValues=(0,import_numeric_range3.getNextStepValue)(idx,{...range,step:step??ctx.step,values:ctx.value});nextValues[idx]=(0,import_numeric_range3.clampValue)(nextValues[idx],range.min,range.max);return nextValues}function getClosestIndex(ctx,pointValue){return(0,import_numeric_range3.getClosestValueIndex)(ctx.value,pointValue)}function assignArray(current,next){for(let i=0;i<next.length;i++){const value=next[i];current[i]=value}}function connect(state,send,normalize){const ariaLabel=state.context["aria-label"];const ariaLabelledBy=state.context["aria-labelledby"];const sliderValue=state.context.value;const focused=state.matches("focus");const dragging=state.matches("dragging");const disabled=state.context.isDisabled;const invalid=state.context.invalid;const interactive=state.context.isInteractive;const isHorizontal=state.context.orientation==="horizontal";const isVertical=state.context.orientation==="vertical";function getValuePercentFn(value){return(0,import_numeric_range4.getValuePercent)(value,state.context.min,state.context.max)}function getPercentValueFn(percent){return(0,import_numeric_range4.getPercentValue)(percent,state.context.min,state.context.max,state.context.step)}return{value:state.context.value,dragging,focused,setValue(value){send({type:"SET_VALUE",value})},getThumbValue(index){return sliderValue[index]},setThumbValue(index,value){send({type:"SET_VALUE",index,value})},getValuePercent:getValuePercentFn,getPercentValue:getPercentValueFn,getThumbPercent(index){return getValuePercentFn(sliderValue[index])},setThumbPercent(index,percent){const value=getPercentValueFn(percent);send({type:"SET_VALUE",index,value})},getThumbMin(index){return getRangeAtIndex(state.context,index).min},getThumbMax(index){return getRangeAtIndex(state.context,index).max},increment(index){send({type:"INCREMENT",index})},decrement(index){send({type:"DECREMENT",index})},focus(){if(!interactive)return;send({type:"FOCUS",index:0})},labelProps:normalize.label({...parts.label.attrs,dir:state.context.dir,"data-disabled":(0,import_dom_query2.dataAttr)(disabled),"data-orientation":state.context.orientation,"data-invalid":(0,import_dom_query2.dataAttr)(invalid),"data-focus":(0,import_dom_query2.dataAttr)(focused),id:dom.getLabelId(state.context),htmlFor:dom.getHiddenInputId(state.context,0),onClick(event){if(!interactive)return;event.preventDefault();dom.getFirstEl(state.context)?.focus()},style:{userSelect:"none"}}),rootProps:normalize.element({...parts.root.attrs,"data-disabled":(0,import_dom_query2.dataAttr)(disabled),"data-orientation":state.context.orientation,"data-invalid":(0,import_dom_query2.dataAttr)(invalid),"data-focus":(0,import_dom_query2.dataAttr)(focused),id:dom.getRootId(state.context),dir:state.context.dir,style:dom.getRootStyle(state.context)}),valueTextProps:normalize.element({...parts.valueText.attrs,dir:state.context.dir,"data-disabled":(0,import_dom_query2.dataAttr)(disabled),"data-orientation":state.context.orientation,"data-invalid":(0,import_dom_query2.dataAttr)(invalid),"data-focus":(0,import_dom_query2.dataAttr)(focused),id:dom.getValueTextId(state.context)}),trackProps:normalize.element({...parts.track.attrs,dir:state.context.dir,id:dom.getTrackId(state.context),"data-disabled":(0,import_dom_query2.dataAttr)(disabled),"data-invalid":(0,import_dom_query2.dataAttr)(invalid),"data-orientation":state.context.orientation,"data-focus":(0,import_dom_query2.dataAttr)(focused),style:{position:"relative"}}),getThumbProps(props2){const{index=0,name}=props2;const value=sliderValue[index];const range=getRangeAtIndex(state.context,index);const valueText=state.context.getAriaValueText?.({value,index});const _ariaLabel=Array.isArray(ariaLabel)?ariaLabel[index]:ariaLabel;const _ariaLabelledBy=Array.isArray(ariaLabelledBy)?ariaLabelledBy[index]:ariaLabelledBy;return normalize.element({...parts.thumb.attrs,dir:state.context.dir,"data-index":index,"data-name":name,id:dom.getThumbId(state.context,index),"data-disabled":(0,import_dom_query2.dataAttr)(disabled),"data-orientation":state.context.orientation,"data-focus":(0,import_dom_query2.dataAttr)(focused&&state.context.focusedIndex===index),draggable:false,"aria-disabled":(0,import_dom_query2.ariaAttr)(disabled),"aria-label":_ariaLabel,"aria-labelledby":_ariaLabelledBy??dom.getLabelId(state.context),"aria-orientation":state.context.orientation,"aria-valuemax":range.max,"aria-valuemin":range.min,"aria-valuenow":sliderValue[index],"aria-valuetext":valueText,role:"slider",tabIndex:disabled?void 0:0,style:dom.getThumbStyle(state.context,index),onPointerDown(event){if(!interactive)return;send({type:"THUMB_POINTER_DOWN",index});event.stopPropagation()},onBlur(){if(!interactive)return;send("BLUR")},onFocus(){if(!interactive)return;send({type:"FOCUS",index})},onKeyDown(event){if(event.defaultPrevented)return;if(!interactive)return;const step=(0,import_dom_event2.getEventStep)(event)*state.context.step;const keyMap={ArrowUp(){if(isHorizontal)return;send({type:"ARROW_INC",step,src:"ArrowUp"})},ArrowDown(){if(isHorizontal)return;send({type:"ARROW_DEC",step,src:"ArrowDown"})},ArrowLeft(){if(isVertical)return;send({type:"ARROW_DEC",step,src:"ArrowLeft"})},ArrowRight(){if(isVertical)return;send({type:"ARROW_INC",step,src:"ArrowRight"})},PageUp(){send({type:"ARROW_INC",step,src:"PageUp"})},PageDown(){send({type:"ARROW_DEC",step,src:"PageDown"})},Home(){send("HOME")},End(){send("END")}};const key=(0,import_dom_event2.getEventKey)(event,state.context);const exec=keyMap[key];if(exec){exec(event);event.preventDefault();event.stopPropagation()}}})},getHiddenInputProps(props2){const{index=0,name}=props2;return normalize.input({name:name??(state.context.name?state.context.name+(state.context.value.length>1?"[]":""):void 0),form:state.context.form,type:"text",hidden:true,defaultValue:state.context.value[index],id:dom.getHiddenInputId(state.context,index)})},rangeProps:normalize.element({id:dom.getRangeId(state.context),...parts.range.attrs,dir:state.context.dir,"data-focus":(0,import_dom_query2.dataAttr)(focused),"data-invalid":(0,import_dom_query2.dataAttr)(invalid),"data-disabled":(0,import_dom_query2.dataAttr)(disabled),"data-orientation":state.context.orientation,style:dom.getRangeStyle(state.context)}),controlProps:normalize.element({...parts.control.attrs,dir:state.context.dir,id:dom.getControlId(state.context),"data-disabled":(0,import_dom_query2.dataAttr)(disabled),"data-orientation":state.context.orientation,"data-invalid":(0,import_dom_query2.dataAttr)(invalid),"data-focus":(0,import_dom_query2.dataAttr)(focused),style:dom.getControlStyle(),onPointerDown(event){if(!interactive)return;const evt=(0,import_dom_event2.getNativeEvent)(event);if(!(0,import_dom_event2.isLeftClick)(evt)||(0,import_dom_event2.isModifierKey)(evt))return;const point=(0,import_dom_event2.getEventPoint)(evt);send({type:"POINTER_DOWN",point});event.preventDefault();event.stopPropagation()}}),markerGroupProps:normalize.element({...parts.markerGroup.attrs,role:"presentation",dir:state.context.dir,"aria-hidden":true,"data-orientation":state.context.orientation,style:dom.getMarkerGroupStyle()}),getMarkerProps(props2){const style=dom.getMarkerStyle(state.context,props2.value);let markerState;const first=state.context.value[0];const last=state.context.value[state.context.value.length-1];if(props2.value<first){markerState="under-value"}else if(props2.value>last){markerState="over-value"}else{markerState="at-value"}return normalize.element({...parts.marker.attrs,id:dom.getMarkerId(state.context,props2.value),role:"presentation",dir:state.context.dir,"data-orientation":state.context.orientation,"data-value":props2.value,"data-disabled":(0,import_dom_query2.dataAttr)(disabled),"data-state":markerState,style})}}}var import_core=require("@zag-js/core");var import_dom_event3=require("@zag-js/dom-event");var import_dom_query3=require("@zag-js/dom-query");var import_element_size=require("@zag-js/element-size");var import_form_utils2=require("@zag-js/form-utils");var import_numeric_range5=require("@zag-js/numeric-range");var import_utils=require("@zag-js/utils");var isEqualSize=(a,b)=>{return a?.width===b?.width&&a?.height===b?.height};function machine(userContext){const ctx=(0,import_utils.compact)(userContext);return(0,import_core.createMachine)({id:"slider",initial:"idle",context:{thumbSize:null,thumbAlignment:"contain",min:0,max:100,step:1,value:[0],origin:"start",orientation:"horizontal",dir:"ltr",minStepsBetweenThumbs:0,disabled:false,...ctx,focusedIndex:-1,fieldsetDisabled:false},computed:{isHorizontal:ctx2=>ctx2.orientation==="horizontal",isVertical:ctx2=>ctx2.orientation==="vertical",isRtl:ctx2=>ctx2.orientation==="horizontal"&&ctx2.dir==="rtl",isDisabled:ctx2=>!!ctx2.disabled||ctx2.fieldsetDisabled,isInteractive:ctx2=>!(ctx2.readOnly||ctx2.isDisabled),hasMeasuredThumbSize:ctx2=>ctx2.thumbSize!=null,valuePercent(ctx2){return ctx2.value.map(value=>100*(0,import_numeric_range5.getValuePercent)(value,ctx2.min,ctx2.max))}},watch:{value:["syncInputElements"]},entry:["coarseValue"],activities:["trackFormControlState","trackThumbsSize"],on:{SET_VALUE:[{guard:"hasIndex",actions:"setValueAtIndex"},{actions:"setValue"}],INCREMENT:{actions:"incrementThumbAtIndex"},DECREMENT:{actions:"decrementThumbAtIndex"}},states:{idle:{on:{POINTER_DOWN:{target:"dragging",actions:["setClosestThumbIndex","setPointerValue","focusActiveThumb"]},FOCUS:{target:"focus",actions:"setFocusedIndex"},THUMB_POINTER_DOWN:{target:"dragging",actions:["setFocusedIndex","focusActiveThumb"]}}},focus:{entry:"focusActiveThumb",on:{POINTER_DOWN:{target:"dragging",actions:["setClosestThumbIndex","setPointerValue","focusActiveThumb"]},THUMB_POINTER_DOWN:{target:"dragging",actions:["setFocusedIndex","focusActiveThumb"]},ARROW_DEC:{actions:["decrementThumbAtIndex","invokeOnChangeEnd"]},ARROW_INC:{actions:["incrementThumbAtIndex","invokeOnChangeEnd"]},HOME:{actions:["setFocusedThumbToMin","invokeOnChangeEnd"]},END:{actions:["setFocusedThumbToMax","invokeOnChangeEnd"]},BLUR:{target:"idle",actions:"clearFocusedIndex"}}},dragging:{entry:"focusActiveThumb",activities:"trackPointerMove",on:{POINTER_UP:{target:"focus",actions:"invokeOnChangeEnd"},POINTER_MOVE:{actions:"setPointerValue"}}}}},{guards:{hasIndex:(_ctx,evt)=>evt.index!=null},activities:{trackFormControlState(ctx2,_evt,{initialContext}){return(0,import_form_utils2.trackFormControl)(dom.getRootEl(ctx2),{onFieldsetDisabledChange(disabled){ctx2.fieldsetDisabled=disabled},onFormReset(){set.value(ctx2,initialContext.value)}})},trackPointerMove(ctx2,_evt,{send}){return(0,import_dom_event3.trackPointerMove)(dom.getDoc(ctx2),{onPointerMove(info){send({type:"POINTER_MOVE",point:info.point})},onPointerUp(){send("POINTER_UP")}})},trackThumbsSize(ctx2){if(ctx2.thumbAlignment!=="contain"||ctx2.thumbSize)return;return(0,import_element_size.trackElementsSize)({getNodes:()=>dom.getElements(ctx2),observeMutation:true,callback(size){if(!size||isEqualSize(ctx2.thumbSize,size))return;ctx2.thumbSize=size}})}},actions:{syncInputElements(ctx2){ctx2.value.forEach((value,index)=>{const inputEl=dom.getHiddenInputEl(ctx2,index);dom.setValue(inputEl,value)})},invokeOnChangeEnd(ctx2){ctx2.onValueChangeEnd?.({value:ctx2.value})},setClosestThumbIndex(ctx2,evt){const pointValue=dom.getValueFromPoint(ctx2,evt.point);if(pointValue==null)return;const focusedIndex=getClosestIndex(ctx2,pointValue);set.focusedIndex(ctx2,focusedIndex)},setFocusedIndex(ctx2,evt){set.focusedIndex(ctx2,evt.index)},clearFocusedIndex(ctx2){set.focusedIndex(ctx2,-1)},setPointerValue(ctx2,evt){const pointerValue=dom.getValueFromPoint(ctx2,evt.point);if(pointerValue==null)return;const value=constrainValue(ctx2,pointerValue,ctx2.focusedIndex);set.valueAtIndex(ctx2,ctx2.focusedIndex,value)},focusActiveThumb(ctx2){(0,import_dom_query3.raf)(()=>{const thumbEl=dom.getThumbEl(ctx2,ctx2.focusedIndex);thumbEl?.focus({preventScroll:true})})},decrementThumbAtIndex(ctx2,evt){const value=decrement(ctx2,evt.index,evt.step);set.value(ctx2,value)},incrementThumbAtIndex(ctx2,evt){const value=increment(ctx2,evt.index,evt.step);set.value(ctx2,value)},setFocusedThumbToMin(ctx2){const{min}=getRangeAtIndex(ctx2,ctx2.focusedIndex);set.valueAtIndex(ctx2,ctx2.focusedIndex,min)},setFocusedThumbToMax(ctx2){const{max}=getRangeAtIndex(ctx2,ctx2.focusedIndex);set.valueAtIndex(ctx2,ctx2.focusedIndex,max)},coarseValue(ctx2){const value=normalizeValues(ctx2,ctx2.value);set.value(ctx2,value)},setValueAtIndex(ctx2,evt){const value=constrainValue(ctx2,evt.value,evt.index);set.valueAtIndex(ctx2,evt.index,value)},setValue(ctx2,evt){const value=normalizeValues(ctx2,evt.value);set.value(ctx2,value)}}})}var invoke={change:ctx=>{ctx.onValueChange?.({value:Array.from(ctx.value)});dom.dispatchChangeEvent(ctx)},focusChange:ctx=>{ctx.onFocusChange?.({value:Array.from(ctx.value),focusedIndex:ctx.focusedIndex})}};var set={valueAtIndex:(ctx,index,value)=>{if((0,import_utils.isEqual)(ctx.value[index],value))return;ctx.value[index]=value;invoke.change(ctx)},value:(ctx,value)=>{if((0,import_utils.isEqual)(ctx.value,value))return;assignArray(ctx.value,value);invoke.change(ctx)},focusedIndex:(ctx,index)=>{if((0,import_utils.isEqual)(ctx.focusedIndex,index))return;ctx.focusedIndex=index;invoke.focusChange(ctx)}};var import_types=require("@zag-js/types");var import_utils2=require("@zag-js/utils");var props=(0,import_types.createProps)()(["aria-label","aria-labelledby","dir","disabled","form","getAriaValueText","getRootNode","id","ids","invalid","max","min","minStepsBetweenThumbs","name","onFocusChange","onValueChange","onValueChangeEnd","orientation","origin","readOnly","step","thumbAlignment","thumbAlignment","thumbSize","value"]);var splitProps=(0,import_utils2.createSplitProps)(props);var thumbProps=(0,import_types.createProps)()(["index","name"]);var splitThumbProps=(0,import_utils2.createSplitProps)(thumbProps);0&&(module.exports={anatomy,connect,machine,props,splitProps,splitThumbProps,thumbProps});
1
+ "use strict";var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __hasOwnProp=Object.prototype.hasOwnProperty;var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:true})};var __copyProps=(to,from,except,desc)=>{if(from&&typeof from==="object"||typeof from==="function"){for(let key of __getOwnPropNames(from))if(!__hasOwnProp.call(to,key)&&key!==except)__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable})}return to};var __toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:true}),mod);var src_exports={};__export(src_exports,{anatomy:()=>anatomy,connect:()=>connect,machine:()=>machine,props:()=>props,splitProps:()=>splitProps,splitThumbProps:()=>splitThumbProps,thumbProps:()=>thumbProps});module.exports=__toCommonJS(src_exports);var import_anatomy=require("@zag-js/anatomy");var anatomy=(0,import_anatomy.createAnatomy)("slider").parts("root","label","thumb","valueText","track","range","control","markerGroup","marker");var parts=anatomy.build();var import_dom_event2=require("@zag-js/dom-event");var import_dom_query2=require("@zag-js/dom-query");var import_numeric_range4=require("@zag-js/numeric-range");var import_dom_event=require("@zag-js/dom-event");var import_dom_query=require("@zag-js/dom-query");var import_form_utils=require("@zag-js/form-utils");var import_numeric_range2=require("@zag-js/numeric-range");var import_numeric_range=require("@zag-js/numeric-range");function getBounds(value){const firstValue=value[0];const lastThumb=value[value.length-1];return[firstValue,lastThumb]}function getRangeOffsets(ctx){const[firstPercent,lastPercent]=getBounds(ctx.valuePercent);if(ctx.valuePercent.length===1){if(ctx.origin==="center"){const isNegative=ctx.valuePercent[0]<50;const start=isNegative?`${ctx.valuePercent[0]}%`:"50%";const end=isNegative?"50%":`${100-ctx.valuePercent[0]}%`;return{start,end}}return{start:"0%",end:`${100-lastPercent}%`}}return{start:`${firstPercent}%`,end:`${100-lastPercent}%`}}function getRangeStyle(ctx){if(ctx.isVertical){return{position:"absolute",bottom:"var(--slider-range-start)",top:"var(--slider-range-end)"}}return{position:"absolute",[ctx.isRtl?"right":"left"]:"var(--slider-range-start)",[ctx.isRtl?"left":"right"]:"var(--slider-range-end)"}}function getVerticalThumbOffset(ctx){const{height=0}=ctx.thumbSize??{};const getValue=(0,import_numeric_range.getValueTransformer)([ctx.min,ctx.max],[-height/2,height/2]);return parseFloat(getValue(ctx.value).toFixed(2))}function getHorizontalThumbOffset(ctx){const{width=0}=ctx.thumbSize??{};if(ctx.isRtl){const getValue2=(0,import_numeric_range.getValueTransformer)([ctx.max,ctx.min],[-width/2,width/2]);return-1*parseFloat(getValue2(ctx.value).toFixed(2))}const getValue=(0,import_numeric_range.getValueTransformer)([ctx.min,ctx.max],[-width/2,width/2]);return parseFloat(getValue(ctx.value).toFixed(2))}function getOffset(ctx,percent){if(ctx.thumbAlignment==="center")return`${percent}%`;const offset=ctx.isVertical?getVerticalThumbOffset(ctx):getHorizontalThumbOffset(ctx);return`calc(${percent}% - ${offset}px)`}function getThumbOffset(ctx){let percent=(0,import_numeric_range.getValuePercent)(ctx.value,ctx.min,ctx.max)*100;return getOffset(ctx,percent)}function getVisibility(ctx){let visibility="visible";if(ctx.thumbAlignment==="contain"&&!ctx.hasMeasuredThumbSize){visibility="hidden"}return visibility}function getThumbStyle(ctx,index){const placementProp=ctx.isVertical?"bottom":"insetInlineStart";return{visibility:getVisibility(ctx),position:"absolute",transform:"var(--slider-thumb-transform)",[placementProp]:`var(--slider-thumb-offset-${index})`}}function getControlStyle(){return{touchAction:"none",userSelect:"none",position:"relative"}}function getRootStyle(ctx){const range=getRangeOffsets(ctx);const offsetStyles=ctx.value.reduce((styles,value,index)=>{const offset=getThumbOffset({...ctx,value});return{...styles,[`--slider-thumb-offset-${index}`]:offset}},{});return{...offsetStyles,"--slider-thumb-transform":ctx.isVertical?"translateY(50%)":ctx.isRtl?"translateX(50%)":"translateX(-50%)","--slider-range-start":range.start,"--slider-range-end":range.end}}function getMarkerStyle(ctx,value){return{visibility:getVisibility(ctx),position:"absolute",pointerEvents:"none",[ctx.isHorizontal?"insetInlineStart":"bottom"]:getThumbOffset({...ctx,value}),translate:"var(--tx) var(--ty)","--tx":ctx.isHorizontal?ctx.isRtl?"50%":"-50%":"0%","--ty":!ctx.isHorizontal?"50%":"0%"}}function getMarkerGroupStyle(){return{userSelect:"none",pointerEvents:"none",position:"relative"}}var styleGetterFns={getRootStyle,getControlStyle,getThumbStyle,getRangeStyle,getMarkerStyle,getMarkerGroupStyle};var dom=(0,import_dom_query.createScope)({...styleGetterFns,getRootId:ctx=>ctx.ids?.root??`slider:${ctx.id}`,getThumbId:(ctx,index)=>ctx.ids?.thumb?.(index)??`slider:${ctx.id}:thumb:${index}`,getHiddenInputId:(ctx,index)=>`slider:${ctx.id}:input:${index}`,getControlId:ctx=>ctx.ids?.control??`slider:${ctx.id}:control`,getTrackId:ctx=>ctx.ids?.track??`slider:${ctx.id}:track`,getRangeId:ctx=>ctx.ids?.range??`slider:${ctx.id}:range`,getLabelId:ctx=>ctx.ids?.label??`slider:${ctx.id}:label`,getValueTextId:ctx=>ctx.ids?.valueText??`slider:${ctx.id}:valueText`,getMarkerId:(ctx,value)=>ctx.ids?.marker?.(value)??`slider:${ctx.id}:marker:${value}`,getRootEl:ctx=>dom.getById(ctx,dom.getRootId(ctx)),getThumbEl:(ctx,index)=>dom.getById(ctx,dom.getThumbId(ctx,index)),getHiddenInputEl:(ctx,index)=>dom.getById(ctx,dom.getHiddenInputId(ctx,index)),getControlEl:ctx=>dom.getById(ctx,dom.getControlId(ctx)),getElements:ctx=>(0,import_dom_query.queryAll)(dom.getControlEl(ctx),"[role=slider]"),getFirstEl:ctx=>dom.getElements(ctx)[0],getRangeEl:ctx=>dom.getById(ctx,dom.getRangeId(ctx)),getValueFromPoint(ctx,point){const controlEl=dom.getControlEl(ctx);if(!controlEl)return;const relativePoint=(0,import_dom_event.getRelativePoint)(point,controlEl);const percent=relativePoint.getPercentValue({orientation:ctx.orientation,dir:ctx.dir,inverted:{y:true}});return(0,import_numeric_range2.getPercentValue)(percent,ctx.min,ctx.max,ctx.step)},dispatchChangeEvent(ctx){const valueArray=Array.from(ctx.value);valueArray.forEach((value,index)=>{const inputEl=dom.getHiddenInputEl(ctx,index);if(!inputEl)return;(0,import_form_utils.dispatchInputValueEvent)(inputEl,{value})})}});var import_numeric_range3=require("@zag-js/numeric-range");function normalizeValues(ctx,nextValues){return nextValues.map((value,index,values)=>{return constrainValue({...ctx,value:values},value,index)})}function getRangeAtIndex(ctx,index){return(0,import_numeric_range3.getValueRanges)(ctx.value,ctx.min,ctx.max,ctx.minStepsBetweenThumbs)[index]}function constrainValue(ctx,value,index){const range=getRangeAtIndex(ctx,index);const snapValue=(0,import_numeric_range3.snapValueToStep)(value,ctx.min,ctx.max,ctx.step);return(0,import_numeric_range3.clampValue)(snapValue,range.min,range.max)}function decrement(ctx,index,step){const idx=index??ctx.focusedIndex;const range=getRangeAtIndex(ctx,idx);const nextValues=(0,import_numeric_range3.getPreviousStepValue)(idx,{...range,step:step??ctx.step,values:ctx.value});nextValues[idx]=(0,import_numeric_range3.clampValue)(nextValues[idx],range.min,range.max);return nextValues}function increment(ctx,index,step){const idx=index??ctx.focusedIndex;const range=getRangeAtIndex(ctx,idx);const nextValues=(0,import_numeric_range3.getNextStepValue)(idx,{...range,step:step??ctx.step,values:ctx.value});nextValues[idx]=(0,import_numeric_range3.clampValue)(nextValues[idx],range.min,range.max);return nextValues}function getClosestIndex(ctx,pointValue){return(0,import_numeric_range3.getClosestValueIndex)(ctx.value,pointValue)}function assignArray(current,next){for(let i=0;i<next.length;i++){const value=next[i];current[i]=value}}function connect(state,send,normalize){const ariaLabel=state.context["aria-label"];const ariaLabelledBy=state.context["aria-labelledby"];const sliderValue=state.context.value;const focused=state.matches("focus");const dragging=state.matches("dragging");const disabled=state.context.isDisabled;const invalid=state.context.invalid;const interactive=state.context.isInteractive;const isHorizontal=state.context.orientation==="horizontal";const isVertical=state.context.orientation==="vertical";function getValuePercentFn(value){return(0,import_numeric_range4.getValuePercent)(value,state.context.min,state.context.max)}function getPercentValueFn(percent){return(0,import_numeric_range4.getPercentValue)(percent,state.context.min,state.context.max,state.context.step)}return{value:state.context.value,dragging,focused,setValue(value){send({type:"SET_VALUE",value})},getThumbValue(index){return sliderValue[index]},setThumbValue(index,value){send({type:"SET_VALUE",index,value})},getValuePercent:getValuePercentFn,getPercentValue:getPercentValueFn,getThumbPercent(index){return getValuePercentFn(sliderValue[index])},setThumbPercent(index,percent){const value=getPercentValueFn(percent);send({type:"SET_VALUE",index,value})},getThumbMin(index){return getRangeAtIndex(state.context,index).min},getThumbMax(index){return getRangeAtIndex(state.context,index).max},increment(index){send({type:"INCREMENT",index})},decrement(index){send({type:"DECREMENT",index})},focus(){if(!interactive)return;send({type:"FOCUS",index:0})},labelProps:normalize.label({...parts.label.attrs,dir:state.context.dir,"data-disabled":(0,import_dom_query2.dataAttr)(disabled),"data-orientation":state.context.orientation,"data-invalid":(0,import_dom_query2.dataAttr)(invalid),"data-focus":(0,import_dom_query2.dataAttr)(focused),id:dom.getLabelId(state.context),htmlFor:dom.getHiddenInputId(state.context,0),onClick(event){if(!interactive)return;event.preventDefault();dom.getFirstEl(state.context)?.focus()},style:{userSelect:"none"}}),rootProps:normalize.element({...parts.root.attrs,"data-disabled":(0,import_dom_query2.dataAttr)(disabled),"data-orientation":state.context.orientation,"data-invalid":(0,import_dom_query2.dataAttr)(invalid),"data-focus":(0,import_dom_query2.dataAttr)(focused),id:dom.getRootId(state.context),dir:state.context.dir,style:dom.getRootStyle(state.context)}),valueTextProps:normalize.element({...parts.valueText.attrs,dir:state.context.dir,"data-disabled":(0,import_dom_query2.dataAttr)(disabled),"data-orientation":state.context.orientation,"data-invalid":(0,import_dom_query2.dataAttr)(invalid),"data-focus":(0,import_dom_query2.dataAttr)(focused),id:dom.getValueTextId(state.context)}),trackProps:normalize.element({...parts.track.attrs,dir:state.context.dir,id:dom.getTrackId(state.context),"data-disabled":(0,import_dom_query2.dataAttr)(disabled),"data-invalid":(0,import_dom_query2.dataAttr)(invalid),"data-orientation":state.context.orientation,"data-focus":(0,import_dom_query2.dataAttr)(focused),style:{position:"relative"}}),getThumbProps(props2){const{index=0,name}=props2;const value=sliderValue[index];const range=getRangeAtIndex(state.context,index);const valueText=state.context.getAriaValueText?.({value,index});const _ariaLabel=Array.isArray(ariaLabel)?ariaLabel[index]:ariaLabel;const _ariaLabelledBy=Array.isArray(ariaLabelledBy)?ariaLabelledBy[index]:ariaLabelledBy;return normalize.element({...parts.thumb.attrs,dir:state.context.dir,"data-index":index,"data-name":name,id:dom.getThumbId(state.context,index),"data-disabled":(0,import_dom_query2.dataAttr)(disabled),"data-orientation":state.context.orientation,"data-focus":(0,import_dom_query2.dataAttr)(focused&&state.context.focusedIndex===index),draggable:false,"aria-disabled":(0,import_dom_query2.ariaAttr)(disabled),"aria-label":_ariaLabel,"aria-labelledby":_ariaLabelledBy??dom.getLabelId(state.context),"aria-orientation":state.context.orientation,"aria-valuemax":range.max,"aria-valuemin":range.min,"aria-valuenow":sliderValue[index],"aria-valuetext":valueText,role:"slider",tabIndex:disabled?void 0:0,style:dom.getThumbStyle(state.context,index),onPointerDown(event){if(!interactive)return;send({type:"THUMB_POINTER_DOWN",index});event.stopPropagation()},onBlur(){if(!interactive)return;send("BLUR")},onFocus(){if(!interactive)return;send({type:"FOCUS",index})},onKeyDown(event){if(event.defaultPrevented)return;if(!interactive)return;const step=(0,import_dom_event2.getEventStep)(event)*state.context.step;const keyMap={ArrowUp(){if(isHorizontal)return;send({type:"ARROW_INC",step,src:"ArrowUp"})},ArrowDown(){if(isHorizontal)return;send({type:"ARROW_DEC",step,src:"ArrowDown"})},ArrowLeft(){if(isVertical)return;send({type:"ARROW_DEC",step,src:"ArrowLeft"})},ArrowRight(){if(isVertical)return;send({type:"ARROW_INC",step,src:"ArrowRight"})},PageUp(){send({type:"ARROW_INC",step,src:"PageUp"})},PageDown(){send({type:"ARROW_DEC",step,src:"PageDown"})},Home(){send("HOME")},End(){send("END")}};const key=(0,import_dom_event2.getEventKey)(event,state.context);const exec=keyMap[key];if(exec){exec(event);event.preventDefault();event.stopPropagation()}}})},getHiddenInputProps(props2){const{index=0,name}=props2;return normalize.input({name:name??(state.context.name?state.context.name+(state.context.value.length>1?"[]":""):void 0),form:state.context.form,type:"text",hidden:true,defaultValue:state.context.value[index],id:dom.getHiddenInputId(state.context,index)})},rangeProps:normalize.element({id:dom.getRangeId(state.context),...parts.range.attrs,dir:state.context.dir,"data-focus":(0,import_dom_query2.dataAttr)(focused),"data-invalid":(0,import_dom_query2.dataAttr)(invalid),"data-disabled":(0,import_dom_query2.dataAttr)(disabled),"data-orientation":state.context.orientation,style:dom.getRangeStyle(state.context)}),controlProps:normalize.element({...parts.control.attrs,dir:state.context.dir,id:dom.getControlId(state.context),"data-disabled":(0,import_dom_query2.dataAttr)(disabled),"data-orientation":state.context.orientation,"data-invalid":(0,import_dom_query2.dataAttr)(invalid),"data-focus":(0,import_dom_query2.dataAttr)(focused),style:dom.getControlStyle(),onPointerDown(event){if(!interactive)return;if(!(0,import_dom_event2.isLeftClick)(event))return;if((0,import_dom_event2.isModifierKey)(event))return;const point=(0,import_dom_event2.getEventPoint)(event);send({type:"POINTER_DOWN",point});event.preventDefault();event.stopPropagation()}}),markerGroupProps:normalize.element({...parts.markerGroup.attrs,role:"presentation",dir:state.context.dir,"aria-hidden":true,"data-orientation":state.context.orientation,style:dom.getMarkerGroupStyle()}),getMarkerProps(props2){const style=dom.getMarkerStyle(state.context,props2.value);let markerState;const first=state.context.value[0];const last=state.context.value[state.context.value.length-1];if(props2.value<first){markerState="under-value"}else if(props2.value>last){markerState="over-value"}else{markerState="at-value"}return normalize.element({...parts.marker.attrs,id:dom.getMarkerId(state.context,props2.value),role:"presentation",dir:state.context.dir,"data-orientation":state.context.orientation,"data-value":props2.value,"data-disabled":(0,import_dom_query2.dataAttr)(disabled),"data-state":markerState,style})}}}var import_core=require("@zag-js/core");var import_dom_event3=require("@zag-js/dom-event");var import_dom_query3=require("@zag-js/dom-query");var import_element_size=require("@zag-js/element-size");var import_form_utils2=require("@zag-js/form-utils");var import_numeric_range5=require("@zag-js/numeric-range");var import_utils=require("@zag-js/utils");var isEqualSize=(a,b)=>{return a?.width===b?.width&&a?.height===b?.height};function machine(userContext){const ctx=(0,import_utils.compact)(userContext);return(0,import_core.createMachine)({id:"slider",initial:"idle",context:{thumbSize:null,thumbAlignment:"contain",min:0,max:100,step:1,value:[0],origin:"start",orientation:"horizontal",dir:"ltr",minStepsBetweenThumbs:0,disabled:false,...ctx,focusedIndex:-1,fieldsetDisabled:false},computed:{isHorizontal:ctx2=>ctx2.orientation==="horizontal",isVertical:ctx2=>ctx2.orientation==="vertical",isRtl:ctx2=>ctx2.orientation==="horizontal"&&ctx2.dir==="rtl",isDisabled:ctx2=>!!ctx2.disabled||ctx2.fieldsetDisabled,isInteractive:ctx2=>!(ctx2.readOnly||ctx2.isDisabled),hasMeasuredThumbSize:ctx2=>ctx2.thumbSize!=null,valuePercent(ctx2){return ctx2.value.map(value=>100*(0,import_numeric_range5.getValuePercent)(value,ctx2.min,ctx2.max))}},watch:{value:["syncInputElements"]},entry:["coarseValue"],activities:["trackFormControlState","trackThumbsSize"],on:{SET_VALUE:[{guard:"hasIndex",actions:"setValueAtIndex"},{actions:"setValue"}],INCREMENT:{actions:"incrementThumbAtIndex"},DECREMENT:{actions:"decrementThumbAtIndex"}},states:{idle:{on:{POINTER_DOWN:{target:"dragging",actions:["setClosestThumbIndex","setPointerValue","focusActiveThumb"]},FOCUS:{target:"focus",actions:"setFocusedIndex"},THUMB_POINTER_DOWN:{target:"dragging",actions:["setFocusedIndex","focusActiveThumb"]}}},focus:{entry:"focusActiveThumb",on:{POINTER_DOWN:{target:"dragging",actions:["setClosestThumbIndex","setPointerValue","focusActiveThumb"]},THUMB_POINTER_DOWN:{target:"dragging",actions:["setFocusedIndex","focusActiveThumb"]},ARROW_DEC:{actions:["decrementThumbAtIndex","invokeOnChangeEnd"]},ARROW_INC:{actions:["incrementThumbAtIndex","invokeOnChangeEnd"]},HOME:{actions:["setFocusedThumbToMin","invokeOnChangeEnd"]},END:{actions:["setFocusedThumbToMax","invokeOnChangeEnd"]},BLUR:{target:"idle",actions:"clearFocusedIndex"}}},dragging:{entry:"focusActiveThumb",activities:"trackPointerMove",on:{POINTER_UP:{target:"focus",actions:"invokeOnChangeEnd"},POINTER_MOVE:{actions:"setPointerValue"}}}}},{guards:{hasIndex:(_ctx,evt)=>evt.index!=null},activities:{trackFormControlState(ctx2,_evt,{initialContext}){return(0,import_form_utils2.trackFormControl)(dom.getRootEl(ctx2),{onFieldsetDisabledChange(disabled){ctx2.fieldsetDisabled=disabled},onFormReset(){set.value(ctx2,initialContext.value)}})},trackPointerMove(ctx2,_evt,{send}){return(0,import_dom_event3.trackPointerMove)(dom.getDoc(ctx2),{onPointerMove(info){send({type:"POINTER_MOVE",point:info.point})},onPointerUp(){send("POINTER_UP")}})},trackThumbsSize(ctx2){if(ctx2.thumbAlignment!=="contain"||ctx2.thumbSize)return;return(0,import_element_size.trackElementsSize)({getNodes:()=>dom.getElements(ctx2),observeMutation:true,callback(size){if(!size||isEqualSize(ctx2.thumbSize,size))return;ctx2.thumbSize=size}})}},actions:{syncInputElements(ctx2){ctx2.value.forEach((value,index)=>{const inputEl=dom.getHiddenInputEl(ctx2,index);dom.setValue(inputEl,value)})},invokeOnChangeEnd(ctx2){ctx2.onValueChangeEnd?.({value:ctx2.value})},setClosestThumbIndex(ctx2,evt){const pointValue=dom.getValueFromPoint(ctx2,evt.point);if(pointValue==null)return;const focusedIndex=getClosestIndex(ctx2,pointValue);set.focusedIndex(ctx2,focusedIndex)},setFocusedIndex(ctx2,evt){set.focusedIndex(ctx2,evt.index)},clearFocusedIndex(ctx2){set.focusedIndex(ctx2,-1)},setPointerValue(ctx2,evt){const pointerValue=dom.getValueFromPoint(ctx2,evt.point);if(pointerValue==null)return;const value=constrainValue(ctx2,pointerValue,ctx2.focusedIndex);set.valueAtIndex(ctx2,ctx2.focusedIndex,value)},focusActiveThumb(ctx2){(0,import_dom_query3.raf)(()=>{const thumbEl=dom.getThumbEl(ctx2,ctx2.focusedIndex);thumbEl?.focus({preventScroll:true})})},decrementThumbAtIndex(ctx2,evt){const value=decrement(ctx2,evt.index,evt.step);set.value(ctx2,value)},incrementThumbAtIndex(ctx2,evt){const value=increment(ctx2,evt.index,evt.step);set.value(ctx2,value)},setFocusedThumbToMin(ctx2){const{min}=getRangeAtIndex(ctx2,ctx2.focusedIndex);set.valueAtIndex(ctx2,ctx2.focusedIndex,min)},setFocusedThumbToMax(ctx2){const{max}=getRangeAtIndex(ctx2,ctx2.focusedIndex);set.valueAtIndex(ctx2,ctx2.focusedIndex,max)},coarseValue(ctx2){const value=normalizeValues(ctx2,ctx2.value);set.value(ctx2,value)},setValueAtIndex(ctx2,evt){const value=constrainValue(ctx2,evt.value,evt.index);set.valueAtIndex(ctx2,evt.index,value)},setValue(ctx2,evt){const value=normalizeValues(ctx2,evt.value);set.value(ctx2,value)}}})}var invoke={change:ctx=>{ctx.onValueChange?.({value:Array.from(ctx.value)});dom.dispatchChangeEvent(ctx)},focusChange:ctx=>{ctx.onFocusChange?.({value:Array.from(ctx.value),focusedIndex:ctx.focusedIndex})}};var set={valueAtIndex:(ctx,index,value)=>{if((0,import_utils.isEqual)(ctx.value[index],value))return;ctx.value[index]=value;invoke.change(ctx)},value:(ctx,value)=>{if((0,import_utils.isEqual)(ctx.value,value))return;assignArray(ctx.value,value);invoke.change(ctx)},focusedIndex:(ctx,index)=>{if((0,import_utils.isEqual)(ctx.focusedIndex,index))return;ctx.focusedIndex=index;invoke.focusChange(ctx)}};var import_types=require("@zag-js/types");var import_utils2=require("@zag-js/utils");var props=(0,import_types.createProps)()(["aria-label","aria-labelledby","dir","disabled","form","getAriaValueText","getRootNode","id","ids","invalid","max","min","minStepsBetweenThumbs","name","onFocusChange","onValueChange","onValueChangeEnd","orientation","origin","readOnly","step","thumbAlignment","thumbAlignment","thumbSize","value"]);var splitProps=(0,import_utils2.createSplitProps)(props);var thumbProps=(0,import_types.createProps)()(["index","name"]);var splitThumbProps=(0,import_utils2.createSplitProps)(thumbProps);0&&(module.exports={anatomy,connect,machine,props,splitProps,splitThumbProps,thumbProps});
2
2
  //# sourceMappingURL=index.js.map
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.utils.ts","../src/slider.machine.ts","../src/slider.props.ts"],"sourcesContent":["export { anatomy } from \"./slider.anatomy\"\nexport { connect } from \"./slider.connect\"\nexport { machine } from \"./slider.machine\"\nexport * from \"./slider.props\"\nexport type {\n MachineApi as Api,\n UserDefinedContext as Context,\n ElementIds,\n FocusChangeDetails,\n MarkerProps,\n ThumbProps,\n ValueChangeDetails,\n ValueTextDetails,\n} from \"./slider.types\"\n","import { createAnatomy } from \"@zag-js/anatomy\"\n\nexport const anatomy = createAnatomy(\"slider\").parts(\n \"root\",\n \"label\",\n \"thumb\",\n \"valueText\",\n \"track\",\n \"range\",\n \"control\",\n \"markerGroup\",\n \"marker\",\n)\n\nexport const parts = anatomy.build()\n","import {\n getEventKey,\n getEventPoint,\n getEventStep,\n getNativeEvent,\n isLeftClick,\n isModifierKey,\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\"\nimport { getRangeAtIndex } from \"./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 focused = state.matches(\"focus\")\n const dragging = state.matches(\"dragging\")\n\n const disabled = state.context.isDisabled\n const invalid = state.context.invalid\n const interactive = state.context.isInteractive\n\n const isHorizontal = state.context.orientation === \"horizontal\"\n const isVertical = state.context.orientation === \"vertical\"\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 dragging,\n focused,\n setValue(value) {\n send({ type: \"SET_VALUE\", value: value })\n },\n getThumbValue(index) {\n return sliderValue[index]\n },\n setThumbValue(index, value) {\n send({ type: \"SET_VALUE\", index, value })\n },\n getValuePercent: getValuePercentFn,\n getPercentValue: getPercentValueFn,\n getThumbPercent(index) {\n return getValuePercentFn(sliderValue[index])\n },\n setThumbPercent(index, percent) {\n const value = getPercentValueFn(percent)\n send({ type: \"SET_VALUE\", index, value })\n },\n getThumbMin(index) {\n return getRangeAtIndex(state.context, index).min\n },\n getThumbMax(index) {\n return getRangeAtIndex(state.context, index).max\n },\n increment(index) {\n send({ type: \"INCREMENT\", index })\n },\n decrement(index) {\n send({ type: \"DECREMENT\", index })\n },\n focus() {\n if (!interactive) 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(disabled),\n \"data-orientation\": state.context.orientation,\n \"data-invalid\": dataAttr(invalid),\n \"data-focus\": dataAttr(focused),\n id: dom.getLabelId(state.context),\n htmlFor: dom.getHiddenInputId(state.context, 0),\n onClick(event) {\n if (!interactive) 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(disabled),\n \"data-orientation\": state.context.orientation,\n \"data-invalid\": dataAttr(invalid),\n \"data-focus\": dataAttr(focused),\n id: dom.getRootId(state.context),\n dir: state.context.dir,\n style: dom.getRootStyle(state.context),\n }),\n\n valueTextProps: normalize.element({\n ...parts.valueText.attrs,\n dir: state.context.dir,\n \"data-disabled\": dataAttr(disabled),\n \"data-orientation\": state.context.orientation,\n \"data-invalid\": dataAttr(invalid),\n \"data-focus\": dataAttr(focused),\n id: dom.getValueTextId(state.context),\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(disabled),\n \"data-invalid\": dataAttr(invalid),\n \"data-orientation\": state.context.orientation,\n \"data-focus\": dataAttr(focused),\n style: { position: \"relative\" },\n }),\n\n getThumbProps(props) {\n const { index = 0, name } = props\n\n const value = sliderValue[index]\n const range = getRangeAtIndex(state.context, index)\n const valueText = 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 \"data-name\": name,\n id: dom.getThumbId(state.context, index),\n \"data-disabled\": dataAttr(disabled),\n \"data-orientation\": state.context.orientation,\n \"data-focus\": dataAttr(focused && state.context.focusedIndex === index),\n draggable: false,\n \"aria-disabled\": ariaAttr(disabled),\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\": valueText,\n role: \"slider\",\n tabIndex: disabled ? undefined : 0,\n style: dom.getThumbStyle(state.context, index),\n onPointerDown(event) {\n if (!interactive) return\n send({ type: \"THUMB_POINTER_DOWN\", index })\n event.stopPropagation()\n },\n onBlur() {\n if (!interactive) return\n send(\"BLUR\")\n },\n onFocus() {\n if (!interactive) return\n send({ type: \"FOCUS\", index })\n },\n onKeyDown(event) {\n if (event.defaultPrevented) return\n if (!interactive) return\n\n const step = getEventStep(event) * state.context.step\n\n const keyMap: EventKeyMap = {\n ArrowUp() {\n if (isHorizontal) return\n send({ type: \"ARROW_INC\", step, src: \"ArrowUp\" })\n },\n ArrowDown() {\n if (isHorizontal) return\n send({ type: \"ARROW_DEC\", step, src: \"ArrowDown\" })\n },\n ArrowLeft() {\n if (isVertical) return\n send({ type: \"ARROW_DEC\", step, src: \"ArrowLeft\" })\n },\n ArrowRight() {\n if (isVertical) return\n send({ type: \"ARROW_INC\", step, src: \"ArrowRight\" })\n },\n PageUp() {\n send({ type: \"ARROW_INC\", step, src: \"PageUp\" })\n },\n PageDown() {\n send({ type: \"ARROW_DEC\", step, src: \"PageDown\" })\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) {\n exec(event)\n event.preventDefault()\n event.stopPropagation()\n }\n },\n })\n },\n\n getHiddenInputProps(props) {\n const { index = 0, name } = props\n return normalize.input({\n name:\n name ?? (state.context.name ? state.context.name + (state.context.value.length > 1 ? \"[]\" : \"\") : undefined),\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(focused),\n \"data-invalid\": dataAttr(invalid),\n \"data-disabled\": dataAttr(disabled),\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(disabled),\n \"data-orientation\": state.context.orientation,\n \"data-invalid\": dataAttr(invalid),\n \"data-focus\": dataAttr(focused),\n style: dom.getControlStyle(),\n onPointerDown(event) {\n if (!interactive) return\n\n const evt = getNativeEvent(event)\n if (!isLeftClick(evt) || isModifierKey(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(props) {\n const style = dom.getMarkerStyle(state.context, props.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 (props.value < first) {\n markerState = \"under-value\"\n } else if (props.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, props.value),\n role: \"presentation\",\n dir: state.context.dir,\n \"data-orientation\": state.context.orientation,\n \"data-value\": props.value,\n \"data-disabled\": dataAttr(disabled),\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 \"./slider.style\"\nimport type { MachineContext as Ctx } from \"./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 getValueTextId: (ctx: Ctx) => ctx.ids?.valueText ?? `slider:${ctx.id}:valueText`,\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 { 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 * 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\n if (ctx.valuePercent.length === 1) {\n if (ctx.origin === \"center\") {\n const isNegative = ctx.valuePercent[0] < 50\n const start = isNegative ? `${ctx.valuePercent[0]}%` : \"50%\"\n const end = isNegative ? \"50%\" : `${100 - ctx.valuePercent[0]}%`\n\n return { start, end }\n }\n\n return { start: \"0%\", end: `${100 - lastPercent}%` }\n }\n\n return { start: `${firstPercent}%`, end: `${100 - lastPercent}%` }\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 * 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: 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 * 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\n const offsetStyles = ctx.value.reduce<Style>((styles, value, index) => {\n const offset = 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\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 // @ts-expect-error\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 getMarkerGroupStyle(): Style {\n return {\n userSelect: \"none\",\n pointerEvents: \"none\",\n position: \"relative\",\n }\n}\n\nexport const styleGetterFns = {\n getRootStyle,\n getControlStyle,\n getThumbStyle,\n getRangeStyle,\n getMarkerStyle,\n 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 \"./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 \"./slider.dom\"\nimport type { MachineContext, MachineState, UserDefinedContext } from \"./slider.types\"\nimport {\n assignArray,\n constrainValue,\n decrement,\n getClosestIndex,\n getRangeAtIndex,\n increment,\n normalizeValues,\n} from \"./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: \"slider\",\n initial: \"idle\",\n\n context: {\n thumbSize: null,\n thumbAlignment: \"contain\",\n min: 0,\n max: 100,\n step: 1,\n value: [0],\n origin: \"start\",\n orientation: \"horizontal\",\n dir: \"ltr\",\n minStepsBetweenThumbs: 0,\n disabled: false,\n ...ctx,\n focusedIndex: -1,\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 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: \"incrementThumbAtIndex\",\n },\n DECREMENT: {\n actions: \"decrementThumbAtIndex\",\n },\n },\n\n states: {\n idle: {\n on: {\n POINTER_DOWN: {\n target: \"dragging\",\n actions: [\"setClosestThumbIndex\", \"setPointerValue\", \"focusActiveThumb\"],\n },\n FOCUS: {\n target: \"focus\",\n actions: \"setFocusedIndex\",\n },\n THUMB_POINTER_DOWN: {\n target: \"dragging\",\n actions: [\"setFocusedIndex\", \"focusActiveThumb\"],\n },\n },\n },\n focus: {\n entry: \"focusActiveThumb\",\n on: {\n POINTER_DOWN: {\n target: \"dragging\",\n actions: [\"setClosestThumbIndex\", \"setPointerValue\", \"focusActiveThumb\"],\n },\n THUMB_POINTER_DOWN: {\n target: \"dragging\",\n actions: [\"setFocusedIndex\", \"focusActiveThumb\"],\n },\n ARROW_DEC: {\n actions: [\"decrementThumbAtIndex\", \"invokeOnChangeEnd\"],\n },\n ARROW_INC: {\n actions: [\"incrementThumbAtIndex\", \"invokeOnChangeEnd\"],\n },\n HOME: {\n actions: [\"setFocusedThumbToMin\", \"invokeOnChangeEnd\"],\n },\n END: {\n actions: [\"setFocusedThumbToMax\", \"invokeOnChangeEnd\"],\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 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 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 decrementThumbAtIndex(ctx, evt) {\n const value = decrement(ctx, evt.index, evt.step)\n set.value(ctx, value)\n },\n incrementThumbAtIndex(ctx, evt) {\n const value = increment(ctx, evt.index, evt.step)\n set.value(ctx, value)\n },\n setFocusedThumbToMin(ctx) {\n const { min } = getRangeAtIndex(ctx, ctx.focusedIndex)\n set.valueAtIndex(ctx, ctx.focusedIndex, min)\n },\n setFocusedThumbToMax(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","import { createProps } from \"@zag-js/types\"\nimport { createSplitProps } from \"@zag-js/utils\"\nimport type { ThumbProps, UserDefinedContext } from \"./slider.types\"\n\nexport const props = createProps<UserDefinedContext>()([\n \"aria-label\",\n \"aria-labelledby\",\n \"dir\",\n \"disabled\",\n \"form\",\n \"getAriaValueText\",\n \"getRootNode\",\n \"id\",\n \"ids\",\n \"invalid\",\n \"max\",\n \"min\",\n \"minStepsBetweenThumbs\",\n \"name\",\n \"onFocusChange\",\n \"onValueChange\",\n \"onValueChangeEnd\",\n \"orientation\",\n \"origin\",\n \"readOnly\",\n \"step\",\n \"thumbAlignment\",\n \"thumbAlignment\",\n \"thumbSize\",\n \"value\",\n])\n\nexport const splitProps = createSplitProps<Partial<UserDefinedContext>>(props)\n\nexport const thumbProps = createProps<ThumbProps>()([\"index\", \"name\"])\nexport const splitThumbProps = createSplitProps<ThumbProps>(thumbProps)\n"],"mappings":"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","names":["import_dom_event","import_dom_query","import_numeric_range","import_numeric_range","getValue","import_numeric_range","props","import_dom_event","import_dom_query","import_form_utils","import_numeric_range","ctx","import_utils"]}
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.utils.ts","../src/slider.machine.ts","../src/slider.props.ts"],"sourcesContent":["export { anatomy } from \"./slider.anatomy\"\nexport { connect } from \"./slider.connect\"\nexport { machine } from \"./slider.machine\"\nexport * from \"./slider.props\"\nexport type {\n MachineApi as Api,\n UserDefinedContext as Context,\n ElementIds,\n FocusChangeDetails,\n MarkerProps,\n ThumbProps,\n ValueChangeDetails,\n ValueTextDetails,\n} from \"./slider.types\"\n","import { createAnatomy } from \"@zag-js/anatomy\"\n\nexport const anatomy = createAnatomy(\"slider\").parts(\n \"root\",\n \"label\",\n \"thumb\",\n \"valueText\",\n \"track\",\n \"range\",\n \"control\",\n \"markerGroup\",\n \"marker\",\n)\n\nexport const parts = anatomy.build()\n","import {\n getEventKey,\n getEventPoint,\n getEventStep,\n isLeftClick,\n isModifierKey,\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\"\nimport { getRangeAtIndex } from \"./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 focused = state.matches(\"focus\")\n const dragging = state.matches(\"dragging\")\n\n const disabled = state.context.isDisabled\n const invalid = state.context.invalid\n const interactive = state.context.isInteractive\n\n const isHorizontal = state.context.orientation === \"horizontal\"\n const isVertical = state.context.orientation === \"vertical\"\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 dragging,\n focused,\n setValue(value) {\n send({ type: \"SET_VALUE\", value: value })\n },\n getThumbValue(index) {\n return sliderValue[index]\n },\n setThumbValue(index, value) {\n send({ type: \"SET_VALUE\", index, value })\n },\n getValuePercent: getValuePercentFn,\n getPercentValue: getPercentValueFn,\n getThumbPercent(index) {\n return getValuePercentFn(sliderValue[index])\n },\n setThumbPercent(index, percent) {\n const value = getPercentValueFn(percent)\n send({ type: \"SET_VALUE\", index, value })\n },\n getThumbMin(index) {\n return getRangeAtIndex(state.context, index).min\n },\n getThumbMax(index) {\n return getRangeAtIndex(state.context, index).max\n },\n increment(index) {\n send({ type: \"INCREMENT\", index })\n },\n decrement(index) {\n send({ type: \"DECREMENT\", index })\n },\n focus() {\n if (!interactive) 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(disabled),\n \"data-orientation\": state.context.orientation,\n \"data-invalid\": dataAttr(invalid),\n \"data-focus\": dataAttr(focused),\n id: dom.getLabelId(state.context),\n htmlFor: dom.getHiddenInputId(state.context, 0),\n onClick(event) {\n if (!interactive) 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(disabled),\n \"data-orientation\": state.context.orientation,\n \"data-invalid\": dataAttr(invalid),\n \"data-focus\": dataAttr(focused),\n id: dom.getRootId(state.context),\n dir: state.context.dir,\n style: dom.getRootStyle(state.context),\n }),\n\n valueTextProps: normalize.element({\n ...parts.valueText.attrs,\n dir: state.context.dir,\n \"data-disabled\": dataAttr(disabled),\n \"data-orientation\": state.context.orientation,\n \"data-invalid\": dataAttr(invalid),\n \"data-focus\": dataAttr(focused),\n id: dom.getValueTextId(state.context),\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(disabled),\n \"data-invalid\": dataAttr(invalid),\n \"data-orientation\": state.context.orientation,\n \"data-focus\": dataAttr(focused),\n style: { position: \"relative\" },\n }),\n\n getThumbProps(props) {\n const { index = 0, name } = props\n\n const value = sliderValue[index]\n const range = getRangeAtIndex(state.context, index)\n const valueText = 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 \"data-name\": name,\n id: dom.getThumbId(state.context, index),\n \"data-disabled\": dataAttr(disabled),\n \"data-orientation\": state.context.orientation,\n \"data-focus\": dataAttr(focused && state.context.focusedIndex === index),\n draggable: false,\n \"aria-disabled\": ariaAttr(disabled),\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\": valueText,\n role: \"slider\",\n tabIndex: disabled ? undefined : 0,\n style: dom.getThumbStyle(state.context, index),\n onPointerDown(event) {\n if (!interactive) return\n send({ type: \"THUMB_POINTER_DOWN\", index })\n event.stopPropagation()\n },\n onBlur() {\n if (!interactive) return\n send(\"BLUR\")\n },\n onFocus() {\n if (!interactive) return\n send({ type: \"FOCUS\", index })\n },\n onKeyDown(event) {\n if (event.defaultPrevented) return\n if (!interactive) return\n\n const step = getEventStep(event) * state.context.step\n\n const keyMap: EventKeyMap = {\n ArrowUp() {\n if (isHorizontal) return\n send({ type: \"ARROW_INC\", step, src: \"ArrowUp\" })\n },\n ArrowDown() {\n if (isHorizontal) return\n send({ type: \"ARROW_DEC\", step, src: \"ArrowDown\" })\n },\n ArrowLeft() {\n if (isVertical) return\n send({ type: \"ARROW_DEC\", step, src: \"ArrowLeft\" })\n },\n ArrowRight() {\n if (isVertical) return\n send({ type: \"ARROW_INC\", step, src: \"ArrowRight\" })\n },\n PageUp() {\n send({ type: \"ARROW_INC\", step, src: \"PageUp\" })\n },\n PageDown() {\n send({ type: \"ARROW_DEC\", step, src: \"PageDown\" })\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) {\n exec(event)\n event.preventDefault()\n event.stopPropagation()\n }\n },\n })\n },\n\n getHiddenInputProps(props) {\n const { index = 0, name } = props\n return normalize.input({\n name:\n name ?? (state.context.name ? state.context.name + (state.context.value.length > 1 ? \"[]\" : \"\") : undefined),\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(focused),\n \"data-invalid\": dataAttr(invalid),\n \"data-disabled\": dataAttr(disabled),\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(disabled),\n \"data-orientation\": state.context.orientation,\n \"data-invalid\": dataAttr(invalid),\n \"data-focus\": dataAttr(focused),\n style: dom.getControlStyle(),\n onPointerDown(event) {\n if (!interactive) return\n if (!isLeftClick(event)) return\n if (isModifierKey(event)) return\n\n const point = getEventPoint(event)\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(props) {\n const style = dom.getMarkerStyle(state.context, props.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 (props.value < first) {\n markerState = \"under-value\"\n } else if (props.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, props.value),\n role: \"presentation\",\n dir: state.context.dir,\n \"data-orientation\": state.context.orientation,\n \"data-value\": props.value,\n \"data-disabled\": dataAttr(disabled),\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 \"./slider.style\"\nimport type { MachineContext as Ctx } from \"./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 getValueTextId: (ctx: Ctx) => ctx.ids?.valueText ?? `slider:${ctx.id}:valueText`,\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 { 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 * 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\n if (ctx.valuePercent.length === 1) {\n if (ctx.origin === \"center\") {\n const isNegative = ctx.valuePercent[0] < 50\n const start = isNegative ? `${ctx.valuePercent[0]}%` : \"50%\"\n const end = isNegative ? \"50%\" : `${100 - ctx.valuePercent[0]}%`\n\n return { start, end }\n }\n\n return { start: \"0%\", end: `${100 - lastPercent}%` }\n }\n\n return { start: `${firstPercent}%`, end: `${100 - lastPercent}%` }\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 * 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: 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 * 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\n const offsetStyles = ctx.value.reduce<Style>((styles, value, index) => {\n const offset = 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\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 // @ts-expect-error\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 getMarkerGroupStyle(): Style {\n return {\n userSelect: \"none\",\n pointerEvents: \"none\",\n position: \"relative\",\n }\n}\n\nexport const styleGetterFns = {\n getRootStyle,\n getControlStyle,\n getThumbStyle,\n getRangeStyle,\n getMarkerStyle,\n 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 \"./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 \"./slider.dom\"\nimport type { MachineContext, MachineState, UserDefinedContext } from \"./slider.types\"\nimport {\n assignArray,\n constrainValue,\n decrement,\n getClosestIndex,\n getRangeAtIndex,\n increment,\n normalizeValues,\n} from \"./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: \"slider\",\n initial: \"idle\",\n\n context: {\n thumbSize: null,\n thumbAlignment: \"contain\",\n min: 0,\n max: 100,\n step: 1,\n value: [0],\n origin: \"start\",\n orientation: \"horizontal\",\n dir: \"ltr\",\n minStepsBetweenThumbs: 0,\n disabled: false,\n ...ctx,\n focusedIndex: -1,\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 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: \"incrementThumbAtIndex\",\n },\n DECREMENT: {\n actions: \"decrementThumbAtIndex\",\n },\n },\n\n states: {\n idle: {\n on: {\n POINTER_DOWN: {\n target: \"dragging\",\n actions: [\"setClosestThumbIndex\", \"setPointerValue\", \"focusActiveThumb\"],\n },\n FOCUS: {\n target: \"focus\",\n actions: \"setFocusedIndex\",\n },\n THUMB_POINTER_DOWN: {\n target: \"dragging\",\n actions: [\"setFocusedIndex\", \"focusActiveThumb\"],\n },\n },\n },\n focus: {\n entry: \"focusActiveThumb\",\n on: {\n POINTER_DOWN: {\n target: \"dragging\",\n actions: [\"setClosestThumbIndex\", \"setPointerValue\", \"focusActiveThumb\"],\n },\n THUMB_POINTER_DOWN: {\n target: \"dragging\",\n actions: [\"setFocusedIndex\", \"focusActiveThumb\"],\n },\n ARROW_DEC: {\n actions: [\"decrementThumbAtIndex\", \"invokeOnChangeEnd\"],\n },\n ARROW_INC: {\n actions: [\"incrementThumbAtIndex\", \"invokeOnChangeEnd\"],\n },\n HOME: {\n actions: [\"setFocusedThumbToMin\", \"invokeOnChangeEnd\"],\n },\n END: {\n actions: [\"setFocusedThumbToMax\", \"invokeOnChangeEnd\"],\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 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 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 decrementThumbAtIndex(ctx, evt) {\n const value = decrement(ctx, evt.index, evt.step)\n set.value(ctx, value)\n },\n incrementThumbAtIndex(ctx, evt) {\n const value = increment(ctx, evt.index, evt.step)\n set.value(ctx, value)\n },\n setFocusedThumbToMin(ctx) {\n const { min } = getRangeAtIndex(ctx, ctx.focusedIndex)\n set.valueAtIndex(ctx, ctx.focusedIndex, min)\n },\n setFocusedThumbToMax(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","import { createProps } from \"@zag-js/types\"\nimport { createSplitProps } from \"@zag-js/utils\"\nimport type { ThumbProps, UserDefinedContext } from \"./slider.types\"\n\nexport const props = createProps<UserDefinedContext>()([\n \"aria-label\",\n \"aria-labelledby\",\n \"dir\",\n \"disabled\",\n \"form\",\n \"getAriaValueText\",\n \"getRootNode\",\n \"id\",\n \"ids\",\n \"invalid\",\n \"max\",\n \"min\",\n \"minStepsBetweenThumbs\",\n \"name\",\n \"onFocusChange\",\n \"onValueChange\",\n \"onValueChangeEnd\",\n \"orientation\",\n \"origin\",\n \"readOnly\",\n \"step\",\n \"thumbAlignment\",\n \"thumbAlignment\",\n \"thumbSize\",\n \"value\",\n])\n\nexport const splitProps = createSplitProps<Partial<UserDefinedContext>>(props)\n\nexport const thumbProps = createProps<ThumbProps>()([\"index\", \"name\"])\nexport const splitThumbProps = createSplitProps<ThumbProps>(thumbProps)\n"],"mappings":"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","names":["import_dom_event","import_dom_query","import_numeric_range","import_numeric_range","getValue","import_numeric_range","props","import_dom_event","import_dom_query","import_form_utils","import_numeric_range","ctx","import_utils"]}
package/dist/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import{createAnatomy}from"@zag-js/anatomy";var anatomy=createAnatomy("slider").parts("root","label","thumb","valueText","track","range","control","markerGroup","marker");var parts=anatomy.build();import{getEventKey,getEventPoint,getEventStep,getNativeEvent,isLeftClick,isModifierKey}from"@zag-js/dom-event";import{ariaAttr,dataAttr}from"@zag-js/dom-query";import{getPercentValue as getPercentValue2,getValuePercent as getValuePercent2}from"@zag-js/numeric-range";import{getRelativePoint}from"@zag-js/dom-event";import{createScope,queryAll}from"@zag-js/dom-query";import{dispatchInputValueEvent}from"@zag-js/form-utils";import{getPercentValue}from"@zag-js/numeric-range";import{getValuePercent,getValueTransformer}from"@zag-js/numeric-range";function getBounds(value){const firstValue=value[0];const lastThumb=value[value.length-1];return[firstValue,lastThumb]}function getRangeOffsets(ctx){const[firstPercent,lastPercent]=getBounds(ctx.valuePercent);if(ctx.valuePercent.length===1){if(ctx.origin==="center"){const isNegative=ctx.valuePercent[0]<50;const start=isNegative?`${ctx.valuePercent[0]}%`:"50%";const end=isNegative?"50%":`${100-ctx.valuePercent[0]}%`;return{start,end}}return{start:"0%",end:`${100-lastPercent}%`}}return{start:`${firstPercent}%`,end:`${100-lastPercent}%`}}function getRangeStyle(ctx){if(ctx.isVertical){return{position:"absolute",bottom:"var(--slider-range-start)",top:"var(--slider-range-end)"}}return{position:"absolute",[ctx.isRtl?"right":"left"]:"var(--slider-range-start)",[ctx.isRtl?"left":"right"]:"var(--slider-range-end)"}}function getVerticalThumbOffset(ctx){const{height=0}=ctx.thumbSize??{};const getValue=getValueTransformer([ctx.min,ctx.max],[-height/2,height/2]);return parseFloat(getValue(ctx.value).toFixed(2))}function getHorizontalThumbOffset(ctx){const{width=0}=ctx.thumbSize??{};if(ctx.isRtl){const getValue2=getValueTransformer([ctx.max,ctx.min],[-width/2,width/2]);return-1*parseFloat(getValue2(ctx.value).toFixed(2))}const getValue=getValueTransformer([ctx.min,ctx.max],[-width/2,width/2]);return parseFloat(getValue(ctx.value).toFixed(2))}function getOffset(ctx,percent){if(ctx.thumbAlignment==="center")return`${percent}%`;const offset=ctx.isVertical?getVerticalThumbOffset(ctx):getHorizontalThumbOffset(ctx);return`calc(${percent}% - ${offset}px)`}function getThumbOffset(ctx){let percent=getValuePercent(ctx.value,ctx.min,ctx.max)*100;return getOffset(ctx,percent)}function getVisibility(ctx){let visibility="visible";if(ctx.thumbAlignment==="contain"&&!ctx.hasMeasuredThumbSize){visibility="hidden"}return visibility}function getThumbStyle(ctx,index){const placementProp=ctx.isVertical?"bottom":"insetInlineStart";return{visibility:getVisibility(ctx),position:"absolute",transform:"var(--slider-thumb-transform)",[placementProp]:`var(--slider-thumb-offset-${index})`}}function getControlStyle(){return{touchAction:"none",userSelect:"none",position:"relative"}}function getRootStyle(ctx){const range=getRangeOffsets(ctx);const offsetStyles=ctx.value.reduce((styles,value,index)=>{const offset=getThumbOffset({...ctx,value});return{...styles,[`--slider-thumb-offset-${index}`]:offset}},{});return{...offsetStyles,"--slider-thumb-transform":ctx.isVertical?"translateY(50%)":ctx.isRtl?"translateX(50%)":"translateX(-50%)","--slider-range-start":range.start,"--slider-range-end":range.end}}function getMarkerStyle(ctx,value){return{visibility:getVisibility(ctx),position:"absolute",pointerEvents:"none",[ctx.isHorizontal?"insetInlineStart":"bottom"]:getThumbOffset({...ctx,value}),translate:"var(--tx) var(--ty)","--tx":ctx.isHorizontal?ctx.isRtl?"50%":"-50%":"0%","--ty":!ctx.isHorizontal?"50%":"0%"}}function getMarkerGroupStyle(){return{userSelect:"none",pointerEvents:"none",position:"relative"}}var styleGetterFns={getRootStyle,getControlStyle,getThumbStyle,getRangeStyle,getMarkerStyle,getMarkerGroupStyle};var dom=createScope({...styleGetterFns,getRootId:ctx=>ctx.ids?.root??`slider:${ctx.id}`,getThumbId:(ctx,index)=>ctx.ids?.thumb?.(index)??`slider:${ctx.id}:thumb:${index}`,getHiddenInputId:(ctx,index)=>`slider:${ctx.id}:input:${index}`,getControlId:ctx=>ctx.ids?.control??`slider:${ctx.id}:control`,getTrackId:ctx=>ctx.ids?.track??`slider:${ctx.id}:track`,getRangeId:ctx=>ctx.ids?.range??`slider:${ctx.id}:range`,getLabelId:ctx=>ctx.ids?.label??`slider:${ctx.id}:label`,getValueTextId:ctx=>ctx.ids?.valueText??`slider:${ctx.id}:valueText`,getMarkerId:(ctx,value)=>ctx.ids?.marker?.(value)??`slider:${ctx.id}:marker:${value}`,getRootEl:ctx=>dom.getById(ctx,dom.getRootId(ctx)),getThumbEl:(ctx,index)=>dom.getById(ctx,dom.getThumbId(ctx,index)),getHiddenInputEl:(ctx,index)=>dom.getById(ctx,dom.getHiddenInputId(ctx,index)),getControlEl:ctx=>dom.getById(ctx,dom.getControlId(ctx)),getElements:ctx=>queryAll(dom.getControlEl(ctx),"[role=slider]"),getFirstEl:ctx=>dom.getElements(ctx)[0],getRangeEl:ctx=>dom.getById(ctx,dom.getRangeId(ctx)),getValueFromPoint(ctx,point){const controlEl=dom.getControlEl(ctx);if(!controlEl)return;const relativePoint=getRelativePoint(point,controlEl);const percent=relativePoint.getPercentValue({orientation:ctx.orientation,dir:ctx.dir,inverted:{y:true}});return getPercentValue(percent,ctx.min,ctx.max,ctx.step)},dispatchChangeEvent(ctx){const valueArray=Array.from(ctx.value);valueArray.forEach((value,index)=>{const inputEl=dom.getHiddenInputEl(ctx,index);if(!inputEl)return;dispatchInputValueEvent(inputEl,{value})})}});import{clampValue,getClosestValueIndex,getNextStepValue,getPreviousStepValue,getValueRanges,snapValueToStep}from"@zag-js/numeric-range";function normalizeValues(ctx,nextValues){return nextValues.map((value,index,values)=>{return constrainValue({...ctx,value:values},value,index)})}function getRangeAtIndex(ctx,index){return getValueRanges(ctx.value,ctx.min,ctx.max,ctx.minStepsBetweenThumbs)[index]}function constrainValue(ctx,value,index){const range=getRangeAtIndex(ctx,index);const snapValue=snapValueToStep(value,ctx.min,ctx.max,ctx.step);return clampValue(snapValue,range.min,range.max)}function decrement(ctx,index,step){const idx=index??ctx.focusedIndex;const range=getRangeAtIndex(ctx,idx);const nextValues=getPreviousStepValue(idx,{...range,step:step??ctx.step,values:ctx.value});nextValues[idx]=clampValue(nextValues[idx],range.min,range.max);return nextValues}function increment(ctx,index,step){const idx=index??ctx.focusedIndex;const range=getRangeAtIndex(ctx,idx);const nextValues=getNextStepValue(idx,{...range,step:step??ctx.step,values:ctx.value});nextValues[idx]=clampValue(nextValues[idx],range.min,range.max);return nextValues}function getClosestIndex(ctx,pointValue){return getClosestValueIndex(ctx.value,pointValue)}function assignArray(current,next){for(let i=0;i<next.length;i++){const value=next[i];current[i]=value}}function connect(state,send,normalize){const ariaLabel=state.context["aria-label"];const ariaLabelledBy=state.context["aria-labelledby"];const sliderValue=state.context.value;const focused=state.matches("focus");const dragging=state.matches("dragging");const disabled=state.context.isDisabled;const invalid=state.context.invalid;const interactive=state.context.isInteractive;const isHorizontal=state.context.orientation==="horizontal";const isVertical=state.context.orientation==="vertical";function getValuePercentFn(value){return getValuePercent2(value,state.context.min,state.context.max)}function getPercentValueFn(percent){return getPercentValue2(percent,state.context.min,state.context.max,state.context.step)}return{value:state.context.value,dragging,focused,setValue(value){send({type:"SET_VALUE",value})},getThumbValue(index){return sliderValue[index]},setThumbValue(index,value){send({type:"SET_VALUE",index,value})},getValuePercent:getValuePercentFn,getPercentValue:getPercentValueFn,getThumbPercent(index){return getValuePercentFn(sliderValue[index])},setThumbPercent(index,percent){const value=getPercentValueFn(percent);send({type:"SET_VALUE",index,value})},getThumbMin(index){return getRangeAtIndex(state.context,index).min},getThumbMax(index){return getRangeAtIndex(state.context,index).max},increment(index){send({type:"INCREMENT",index})},decrement(index){send({type:"DECREMENT",index})},focus(){if(!interactive)return;send({type:"FOCUS",index:0})},labelProps:normalize.label({...parts.label.attrs,dir:state.context.dir,"data-disabled":dataAttr(disabled),"data-orientation":state.context.orientation,"data-invalid":dataAttr(invalid),"data-focus":dataAttr(focused),id:dom.getLabelId(state.context),htmlFor:dom.getHiddenInputId(state.context,0),onClick(event){if(!interactive)return;event.preventDefault();dom.getFirstEl(state.context)?.focus()},style:{userSelect:"none"}}),rootProps:normalize.element({...parts.root.attrs,"data-disabled":dataAttr(disabled),"data-orientation":state.context.orientation,"data-invalid":dataAttr(invalid),"data-focus":dataAttr(focused),id:dom.getRootId(state.context),dir:state.context.dir,style:dom.getRootStyle(state.context)}),valueTextProps:normalize.element({...parts.valueText.attrs,dir:state.context.dir,"data-disabled":dataAttr(disabled),"data-orientation":state.context.orientation,"data-invalid":dataAttr(invalid),"data-focus":dataAttr(focused),id:dom.getValueTextId(state.context)}),trackProps:normalize.element({...parts.track.attrs,dir:state.context.dir,id:dom.getTrackId(state.context),"data-disabled":dataAttr(disabled),"data-invalid":dataAttr(invalid),"data-orientation":state.context.orientation,"data-focus":dataAttr(focused),style:{position:"relative"}}),getThumbProps(props2){const{index=0,name}=props2;const value=sliderValue[index];const range=getRangeAtIndex(state.context,index);const valueText=state.context.getAriaValueText?.({value,index});const _ariaLabel=Array.isArray(ariaLabel)?ariaLabel[index]:ariaLabel;const _ariaLabelledBy=Array.isArray(ariaLabelledBy)?ariaLabelledBy[index]:ariaLabelledBy;return normalize.element({...parts.thumb.attrs,dir:state.context.dir,"data-index":index,"data-name":name,id:dom.getThumbId(state.context,index),"data-disabled":dataAttr(disabled),"data-orientation":state.context.orientation,"data-focus":dataAttr(focused&&state.context.focusedIndex===index),draggable:false,"aria-disabled":ariaAttr(disabled),"aria-label":_ariaLabel,"aria-labelledby":_ariaLabelledBy??dom.getLabelId(state.context),"aria-orientation":state.context.orientation,"aria-valuemax":range.max,"aria-valuemin":range.min,"aria-valuenow":sliderValue[index],"aria-valuetext":valueText,role:"slider",tabIndex:disabled?void 0:0,style:dom.getThumbStyle(state.context,index),onPointerDown(event){if(!interactive)return;send({type:"THUMB_POINTER_DOWN",index});event.stopPropagation()},onBlur(){if(!interactive)return;send("BLUR")},onFocus(){if(!interactive)return;send({type:"FOCUS",index})},onKeyDown(event){if(event.defaultPrevented)return;if(!interactive)return;const step=getEventStep(event)*state.context.step;const keyMap={ArrowUp(){if(isHorizontal)return;send({type:"ARROW_INC",step,src:"ArrowUp"})},ArrowDown(){if(isHorizontal)return;send({type:"ARROW_DEC",step,src:"ArrowDown"})},ArrowLeft(){if(isVertical)return;send({type:"ARROW_DEC",step,src:"ArrowLeft"})},ArrowRight(){if(isVertical)return;send({type:"ARROW_INC",step,src:"ArrowRight"})},PageUp(){send({type:"ARROW_INC",step,src:"PageUp"})},PageDown(){send({type:"ARROW_DEC",step,src:"PageDown"})},Home(){send("HOME")},End(){send("END")}};const key=getEventKey(event,state.context);const exec=keyMap[key];if(exec){exec(event);event.preventDefault();event.stopPropagation()}}})},getHiddenInputProps(props2){const{index=0,name}=props2;return normalize.input({name:name??(state.context.name?state.context.name+(state.context.value.length>1?"[]":""):void 0),form:state.context.form,type:"text",hidden:true,defaultValue:state.context.value[index],id:dom.getHiddenInputId(state.context,index)})},rangeProps:normalize.element({id:dom.getRangeId(state.context),...parts.range.attrs,dir:state.context.dir,"data-focus":dataAttr(focused),"data-invalid":dataAttr(invalid),"data-disabled":dataAttr(disabled),"data-orientation":state.context.orientation,style:dom.getRangeStyle(state.context)}),controlProps:normalize.element({...parts.control.attrs,dir:state.context.dir,id:dom.getControlId(state.context),"data-disabled":dataAttr(disabled),"data-orientation":state.context.orientation,"data-invalid":dataAttr(invalid),"data-focus":dataAttr(focused),style:dom.getControlStyle(),onPointerDown(event){if(!interactive)return;const evt=getNativeEvent(event);if(!isLeftClick(evt)||isModifierKey(evt))return;const point=getEventPoint(evt);send({type:"POINTER_DOWN",point});event.preventDefault();event.stopPropagation()}}),markerGroupProps:normalize.element({...parts.markerGroup.attrs,role:"presentation",dir:state.context.dir,"aria-hidden":true,"data-orientation":state.context.orientation,style:dom.getMarkerGroupStyle()}),getMarkerProps(props2){const style=dom.getMarkerStyle(state.context,props2.value);let markerState;const first=state.context.value[0];const last=state.context.value[state.context.value.length-1];if(props2.value<first){markerState="under-value"}else if(props2.value>last){markerState="over-value"}else{markerState="at-value"}return normalize.element({...parts.marker.attrs,id:dom.getMarkerId(state.context,props2.value),role:"presentation",dir:state.context.dir,"data-orientation":state.context.orientation,"data-value":props2.value,"data-disabled":dataAttr(disabled),"data-state":markerState,style})}}}import{createMachine}from"@zag-js/core";import{trackPointerMove}from"@zag-js/dom-event";import{raf}from"@zag-js/dom-query";import{trackElementsSize}from"@zag-js/element-size";import{trackFormControl}from"@zag-js/form-utils";import{getValuePercent as getValuePercent3}from"@zag-js/numeric-range";import{compact,isEqual}from"@zag-js/utils";var isEqualSize=(a,b)=>{return a?.width===b?.width&&a?.height===b?.height};function machine(userContext){const ctx=compact(userContext);return createMachine({id:"slider",initial:"idle",context:{thumbSize:null,thumbAlignment:"contain",min:0,max:100,step:1,value:[0],origin:"start",orientation:"horizontal",dir:"ltr",minStepsBetweenThumbs:0,disabled:false,...ctx,focusedIndex:-1,fieldsetDisabled:false},computed:{isHorizontal:ctx2=>ctx2.orientation==="horizontal",isVertical:ctx2=>ctx2.orientation==="vertical",isRtl:ctx2=>ctx2.orientation==="horizontal"&&ctx2.dir==="rtl",isDisabled:ctx2=>!!ctx2.disabled||ctx2.fieldsetDisabled,isInteractive:ctx2=>!(ctx2.readOnly||ctx2.isDisabled),hasMeasuredThumbSize:ctx2=>ctx2.thumbSize!=null,valuePercent(ctx2){return ctx2.value.map(value=>100*getValuePercent3(value,ctx2.min,ctx2.max))}},watch:{value:["syncInputElements"]},entry:["coarseValue"],activities:["trackFormControlState","trackThumbsSize"],on:{SET_VALUE:[{guard:"hasIndex",actions:"setValueAtIndex"},{actions:"setValue"}],INCREMENT:{actions:"incrementThumbAtIndex"},DECREMENT:{actions:"decrementThumbAtIndex"}},states:{idle:{on:{POINTER_DOWN:{target:"dragging",actions:["setClosestThumbIndex","setPointerValue","focusActiveThumb"]},FOCUS:{target:"focus",actions:"setFocusedIndex"},THUMB_POINTER_DOWN:{target:"dragging",actions:["setFocusedIndex","focusActiveThumb"]}}},focus:{entry:"focusActiveThumb",on:{POINTER_DOWN:{target:"dragging",actions:["setClosestThumbIndex","setPointerValue","focusActiveThumb"]},THUMB_POINTER_DOWN:{target:"dragging",actions:["setFocusedIndex","focusActiveThumb"]},ARROW_DEC:{actions:["decrementThumbAtIndex","invokeOnChangeEnd"]},ARROW_INC:{actions:["incrementThumbAtIndex","invokeOnChangeEnd"]},HOME:{actions:["setFocusedThumbToMin","invokeOnChangeEnd"]},END:{actions:["setFocusedThumbToMax","invokeOnChangeEnd"]},BLUR:{target:"idle",actions:"clearFocusedIndex"}}},dragging:{entry:"focusActiveThumb",activities:"trackPointerMove",on:{POINTER_UP:{target:"focus",actions:"invokeOnChangeEnd"},POINTER_MOVE:{actions:"setPointerValue"}}}}},{guards:{hasIndex:(_ctx,evt)=>evt.index!=null},activities:{trackFormControlState(ctx2,_evt,{initialContext}){return trackFormControl(dom.getRootEl(ctx2),{onFieldsetDisabledChange(disabled){ctx2.fieldsetDisabled=disabled},onFormReset(){set.value(ctx2,initialContext.value)}})},trackPointerMove(ctx2,_evt,{send}){return trackPointerMove(dom.getDoc(ctx2),{onPointerMove(info){send({type:"POINTER_MOVE",point:info.point})},onPointerUp(){send("POINTER_UP")}})},trackThumbsSize(ctx2){if(ctx2.thumbAlignment!=="contain"||ctx2.thumbSize)return;return trackElementsSize({getNodes:()=>dom.getElements(ctx2),observeMutation:true,callback(size){if(!size||isEqualSize(ctx2.thumbSize,size))return;ctx2.thumbSize=size}})}},actions:{syncInputElements(ctx2){ctx2.value.forEach((value,index)=>{const inputEl=dom.getHiddenInputEl(ctx2,index);dom.setValue(inputEl,value)})},invokeOnChangeEnd(ctx2){ctx2.onValueChangeEnd?.({value:ctx2.value})},setClosestThumbIndex(ctx2,evt){const pointValue=dom.getValueFromPoint(ctx2,evt.point);if(pointValue==null)return;const focusedIndex=getClosestIndex(ctx2,pointValue);set.focusedIndex(ctx2,focusedIndex)},setFocusedIndex(ctx2,evt){set.focusedIndex(ctx2,evt.index)},clearFocusedIndex(ctx2){set.focusedIndex(ctx2,-1)},setPointerValue(ctx2,evt){const pointerValue=dom.getValueFromPoint(ctx2,evt.point);if(pointerValue==null)return;const value=constrainValue(ctx2,pointerValue,ctx2.focusedIndex);set.valueAtIndex(ctx2,ctx2.focusedIndex,value)},focusActiveThumb(ctx2){raf(()=>{const thumbEl=dom.getThumbEl(ctx2,ctx2.focusedIndex);thumbEl?.focus({preventScroll:true})})},decrementThumbAtIndex(ctx2,evt){const value=decrement(ctx2,evt.index,evt.step);set.value(ctx2,value)},incrementThumbAtIndex(ctx2,evt){const value=increment(ctx2,evt.index,evt.step);set.value(ctx2,value)},setFocusedThumbToMin(ctx2){const{min}=getRangeAtIndex(ctx2,ctx2.focusedIndex);set.valueAtIndex(ctx2,ctx2.focusedIndex,min)},setFocusedThumbToMax(ctx2){const{max}=getRangeAtIndex(ctx2,ctx2.focusedIndex);set.valueAtIndex(ctx2,ctx2.focusedIndex,max)},coarseValue(ctx2){const value=normalizeValues(ctx2,ctx2.value);set.value(ctx2,value)},setValueAtIndex(ctx2,evt){const value=constrainValue(ctx2,evt.value,evt.index);set.valueAtIndex(ctx2,evt.index,value)},setValue(ctx2,evt){const value=normalizeValues(ctx2,evt.value);set.value(ctx2,value)}}})}var invoke={change:ctx=>{ctx.onValueChange?.({value:Array.from(ctx.value)});dom.dispatchChangeEvent(ctx)},focusChange:ctx=>{ctx.onFocusChange?.({value:Array.from(ctx.value),focusedIndex:ctx.focusedIndex})}};var set={valueAtIndex:(ctx,index,value)=>{if(isEqual(ctx.value[index],value))return;ctx.value[index]=value;invoke.change(ctx)},value:(ctx,value)=>{if(isEqual(ctx.value,value))return;assignArray(ctx.value,value);invoke.change(ctx)},focusedIndex:(ctx,index)=>{if(isEqual(ctx.focusedIndex,index))return;ctx.focusedIndex=index;invoke.focusChange(ctx)}};import{createProps}from"@zag-js/types";import{createSplitProps}from"@zag-js/utils";var props=createProps()(["aria-label","aria-labelledby","dir","disabled","form","getAriaValueText","getRootNode","id","ids","invalid","max","min","minStepsBetweenThumbs","name","onFocusChange","onValueChange","onValueChangeEnd","orientation","origin","readOnly","step","thumbAlignment","thumbAlignment","thumbSize","value"]);var splitProps=createSplitProps(props);var thumbProps=createProps()(["index","name"]);var splitThumbProps=createSplitProps(thumbProps);export{anatomy,connect,machine,props,splitProps,splitThumbProps,thumbProps};
1
+ import{createAnatomy}from"@zag-js/anatomy";var anatomy=createAnatomy("slider").parts("root","label","thumb","valueText","track","range","control","markerGroup","marker");var parts=anatomy.build();import{getEventKey,getEventPoint,getEventStep,isLeftClick,isModifierKey}from"@zag-js/dom-event";import{ariaAttr,dataAttr}from"@zag-js/dom-query";import{getPercentValue as getPercentValue2,getValuePercent as getValuePercent2}from"@zag-js/numeric-range";import{getRelativePoint}from"@zag-js/dom-event";import{createScope,queryAll}from"@zag-js/dom-query";import{dispatchInputValueEvent}from"@zag-js/form-utils";import{getPercentValue}from"@zag-js/numeric-range";import{getValuePercent,getValueTransformer}from"@zag-js/numeric-range";function getBounds(value){const firstValue=value[0];const lastThumb=value[value.length-1];return[firstValue,lastThumb]}function getRangeOffsets(ctx){const[firstPercent,lastPercent]=getBounds(ctx.valuePercent);if(ctx.valuePercent.length===1){if(ctx.origin==="center"){const isNegative=ctx.valuePercent[0]<50;const start=isNegative?`${ctx.valuePercent[0]}%`:"50%";const end=isNegative?"50%":`${100-ctx.valuePercent[0]}%`;return{start,end}}return{start:"0%",end:`${100-lastPercent}%`}}return{start:`${firstPercent}%`,end:`${100-lastPercent}%`}}function getRangeStyle(ctx){if(ctx.isVertical){return{position:"absolute",bottom:"var(--slider-range-start)",top:"var(--slider-range-end)"}}return{position:"absolute",[ctx.isRtl?"right":"left"]:"var(--slider-range-start)",[ctx.isRtl?"left":"right"]:"var(--slider-range-end)"}}function getVerticalThumbOffset(ctx){const{height=0}=ctx.thumbSize??{};const getValue=getValueTransformer([ctx.min,ctx.max],[-height/2,height/2]);return parseFloat(getValue(ctx.value).toFixed(2))}function getHorizontalThumbOffset(ctx){const{width=0}=ctx.thumbSize??{};if(ctx.isRtl){const getValue2=getValueTransformer([ctx.max,ctx.min],[-width/2,width/2]);return-1*parseFloat(getValue2(ctx.value).toFixed(2))}const getValue=getValueTransformer([ctx.min,ctx.max],[-width/2,width/2]);return parseFloat(getValue(ctx.value).toFixed(2))}function getOffset(ctx,percent){if(ctx.thumbAlignment==="center")return`${percent}%`;const offset=ctx.isVertical?getVerticalThumbOffset(ctx):getHorizontalThumbOffset(ctx);return`calc(${percent}% - ${offset}px)`}function getThumbOffset(ctx){let percent=getValuePercent(ctx.value,ctx.min,ctx.max)*100;return getOffset(ctx,percent)}function getVisibility(ctx){let visibility="visible";if(ctx.thumbAlignment==="contain"&&!ctx.hasMeasuredThumbSize){visibility="hidden"}return visibility}function getThumbStyle(ctx,index){const placementProp=ctx.isVertical?"bottom":"insetInlineStart";return{visibility:getVisibility(ctx),position:"absolute",transform:"var(--slider-thumb-transform)",[placementProp]:`var(--slider-thumb-offset-${index})`}}function getControlStyle(){return{touchAction:"none",userSelect:"none",position:"relative"}}function getRootStyle(ctx){const range=getRangeOffsets(ctx);const offsetStyles=ctx.value.reduce((styles,value,index)=>{const offset=getThumbOffset({...ctx,value});return{...styles,[`--slider-thumb-offset-${index}`]:offset}},{});return{...offsetStyles,"--slider-thumb-transform":ctx.isVertical?"translateY(50%)":ctx.isRtl?"translateX(50%)":"translateX(-50%)","--slider-range-start":range.start,"--slider-range-end":range.end}}function getMarkerStyle(ctx,value){return{visibility:getVisibility(ctx),position:"absolute",pointerEvents:"none",[ctx.isHorizontal?"insetInlineStart":"bottom"]:getThumbOffset({...ctx,value}),translate:"var(--tx) var(--ty)","--tx":ctx.isHorizontal?ctx.isRtl?"50%":"-50%":"0%","--ty":!ctx.isHorizontal?"50%":"0%"}}function getMarkerGroupStyle(){return{userSelect:"none",pointerEvents:"none",position:"relative"}}var styleGetterFns={getRootStyle,getControlStyle,getThumbStyle,getRangeStyle,getMarkerStyle,getMarkerGroupStyle};var dom=createScope({...styleGetterFns,getRootId:ctx=>ctx.ids?.root??`slider:${ctx.id}`,getThumbId:(ctx,index)=>ctx.ids?.thumb?.(index)??`slider:${ctx.id}:thumb:${index}`,getHiddenInputId:(ctx,index)=>`slider:${ctx.id}:input:${index}`,getControlId:ctx=>ctx.ids?.control??`slider:${ctx.id}:control`,getTrackId:ctx=>ctx.ids?.track??`slider:${ctx.id}:track`,getRangeId:ctx=>ctx.ids?.range??`slider:${ctx.id}:range`,getLabelId:ctx=>ctx.ids?.label??`slider:${ctx.id}:label`,getValueTextId:ctx=>ctx.ids?.valueText??`slider:${ctx.id}:valueText`,getMarkerId:(ctx,value)=>ctx.ids?.marker?.(value)??`slider:${ctx.id}:marker:${value}`,getRootEl:ctx=>dom.getById(ctx,dom.getRootId(ctx)),getThumbEl:(ctx,index)=>dom.getById(ctx,dom.getThumbId(ctx,index)),getHiddenInputEl:(ctx,index)=>dom.getById(ctx,dom.getHiddenInputId(ctx,index)),getControlEl:ctx=>dom.getById(ctx,dom.getControlId(ctx)),getElements:ctx=>queryAll(dom.getControlEl(ctx),"[role=slider]"),getFirstEl:ctx=>dom.getElements(ctx)[0],getRangeEl:ctx=>dom.getById(ctx,dom.getRangeId(ctx)),getValueFromPoint(ctx,point){const controlEl=dom.getControlEl(ctx);if(!controlEl)return;const relativePoint=getRelativePoint(point,controlEl);const percent=relativePoint.getPercentValue({orientation:ctx.orientation,dir:ctx.dir,inverted:{y:true}});return getPercentValue(percent,ctx.min,ctx.max,ctx.step)},dispatchChangeEvent(ctx){const valueArray=Array.from(ctx.value);valueArray.forEach((value,index)=>{const inputEl=dom.getHiddenInputEl(ctx,index);if(!inputEl)return;dispatchInputValueEvent(inputEl,{value})})}});import{clampValue,getClosestValueIndex,getNextStepValue,getPreviousStepValue,getValueRanges,snapValueToStep}from"@zag-js/numeric-range";function normalizeValues(ctx,nextValues){return nextValues.map((value,index,values)=>{return constrainValue({...ctx,value:values},value,index)})}function getRangeAtIndex(ctx,index){return getValueRanges(ctx.value,ctx.min,ctx.max,ctx.minStepsBetweenThumbs)[index]}function constrainValue(ctx,value,index){const range=getRangeAtIndex(ctx,index);const snapValue=snapValueToStep(value,ctx.min,ctx.max,ctx.step);return clampValue(snapValue,range.min,range.max)}function decrement(ctx,index,step){const idx=index??ctx.focusedIndex;const range=getRangeAtIndex(ctx,idx);const nextValues=getPreviousStepValue(idx,{...range,step:step??ctx.step,values:ctx.value});nextValues[idx]=clampValue(nextValues[idx],range.min,range.max);return nextValues}function increment(ctx,index,step){const idx=index??ctx.focusedIndex;const range=getRangeAtIndex(ctx,idx);const nextValues=getNextStepValue(idx,{...range,step:step??ctx.step,values:ctx.value});nextValues[idx]=clampValue(nextValues[idx],range.min,range.max);return nextValues}function getClosestIndex(ctx,pointValue){return getClosestValueIndex(ctx.value,pointValue)}function assignArray(current,next){for(let i=0;i<next.length;i++){const value=next[i];current[i]=value}}function connect(state,send,normalize){const ariaLabel=state.context["aria-label"];const ariaLabelledBy=state.context["aria-labelledby"];const sliderValue=state.context.value;const focused=state.matches("focus");const dragging=state.matches("dragging");const disabled=state.context.isDisabled;const invalid=state.context.invalid;const interactive=state.context.isInteractive;const isHorizontal=state.context.orientation==="horizontal";const isVertical=state.context.orientation==="vertical";function getValuePercentFn(value){return getValuePercent2(value,state.context.min,state.context.max)}function getPercentValueFn(percent){return getPercentValue2(percent,state.context.min,state.context.max,state.context.step)}return{value:state.context.value,dragging,focused,setValue(value){send({type:"SET_VALUE",value})},getThumbValue(index){return sliderValue[index]},setThumbValue(index,value){send({type:"SET_VALUE",index,value})},getValuePercent:getValuePercentFn,getPercentValue:getPercentValueFn,getThumbPercent(index){return getValuePercentFn(sliderValue[index])},setThumbPercent(index,percent){const value=getPercentValueFn(percent);send({type:"SET_VALUE",index,value})},getThumbMin(index){return getRangeAtIndex(state.context,index).min},getThumbMax(index){return getRangeAtIndex(state.context,index).max},increment(index){send({type:"INCREMENT",index})},decrement(index){send({type:"DECREMENT",index})},focus(){if(!interactive)return;send({type:"FOCUS",index:0})},labelProps:normalize.label({...parts.label.attrs,dir:state.context.dir,"data-disabled":dataAttr(disabled),"data-orientation":state.context.orientation,"data-invalid":dataAttr(invalid),"data-focus":dataAttr(focused),id:dom.getLabelId(state.context),htmlFor:dom.getHiddenInputId(state.context,0),onClick(event){if(!interactive)return;event.preventDefault();dom.getFirstEl(state.context)?.focus()},style:{userSelect:"none"}}),rootProps:normalize.element({...parts.root.attrs,"data-disabled":dataAttr(disabled),"data-orientation":state.context.orientation,"data-invalid":dataAttr(invalid),"data-focus":dataAttr(focused),id:dom.getRootId(state.context),dir:state.context.dir,style:dom.getRootStyle(state.context)}),valueTextProps:normalize.element({...parts.valueText.attrs,dir:state.context.dir,"data-disabled":dataAttr(disabled),"data-orientation":state.context.orientation,"data-invalid":dataAttr(invalid),"data-focus":dataAttr(focused),id:dom.getValueTextId(state.context)}),trackProps:normalize.element({...parts.track.attrs,dir:state.context.dir,id:dom.getTrackId(state.context),"data-disabled":dataAttr(disabled),"data-invalid":dataAttr(invalid),"data-orientation":state.context.orientation,"data-focus":dataAttr(focused),style:{position:"relative"}}),getThumbProps(props2){const{index=0,name}=props2;const value=sliderValue[index];const range=getRangeAtIndex(state.context,index);const valueText=state.context.getAriaValueText?.({value,index});const _ariaLabel=Array.isArray(ariaLabel)?ariaLabel[index]:ariaLabel;const _ariaLabelledBy=Array.isArray(ariaLabelledBy)?ariaLabelledBy[index]:ariaLabelledBy;return normalize.element({...parts.thumb.attrs,dir:state.context.dir,"data-index":index,"data-name":name,id:dom.getThumbId(state.context,index),"data-disabled":dataAttr(disabled),"data-orientation":state.context.orientation,"data-focus":dataAttr(focused&&state.context.focusedIndex===index),draggable:false,"aria-disabled":ariaAttr(disabled),"aria-label":_ariaLabel,"aria-labelledby":_ariaLabelledBy??dom.getLabelId(state.context),"aria-orientation":state.context.orientation,"aria-valuemax":range.max,"aria-valuemin":range.min,"aria-valuenow":sliderValue[index],"aria-valuetext":valueText,role:"slider",tabIndex:disabled?void 0:0,style:dom.getThumbStyle(state.context,index),onPointerDown(event){if(!interactive)return;send({type:"THUMB_POINTER_DOWN",index});event.stopPropagation()},onBlur(){if(!interactive)return;send("BLUR")},onFocus(){if(!interactive)return;send({type:"FOCUS",index})},onKeyDown(event){if(event.defaultPrevented)return;if(!interactive)return;const step=getEventStep(event)*state.context.step;const keyMap={ArrowUp(){if(isHorizontal)return;send({type:"ARROW_INC",step,src:"ArrowUp"})},ArrowDown(){if(isHorizontal)return;send({type:"ARROW_DEC",step,src:"ArrowDown"})},ArrowLeft(){if(isVertical)return;send({type:"ARROW_DEC",step,src:"ArrowLeft"})},ArrowRight(){if(isVertical)return;send({type:"ARROW_INC",step,src:"ArrowRight"})},PageUp(){send({type:"ARROW_INC",step,src:"PageUp"})},PageDown(){send({type:"ARROW_DEC",step,src:"PageDown"})},Home(){send("HOME")},End(){send("END")}};const key=getEventKey(event,state.context);const exec=keyMap[key];if(exec){exec(event);event.preventDefault();event.stopPropagation()}}})},getHiddenInputProps(props2){const{index=0,name}=props2;return normalize.input({name:name??(state.context.name?state.context.name+(state.context.value.length>1?"[]":""):void 0),form:state.context.form,type:"text",hidden:true,defaultValue:state.context.value[index],id:dom.getHiddenInputId(state.context,index)})},rangeProps:normalize.element({id:dom.getRangeId(state.context),...parts.range.attrs,dir:state.context.dir,"data-focus":dataAttr(focused),"data-invalid":dataAttr(invalid),"data-disabled":dataAttr(disabled),"data-orientation":state.context.orientation,style:dom.getRangeStyle(state.context)}),controlProps:normalize.element({...parts.control.attrs,dir:state.context.dir,id:dom.getControlId(state.context),"data-disabled":dataAttr(disabled),"data-orientation":state.context.orientation,"data-invalid":dataAttr(invalid),"data-focus":dataAttr(focused),style:dom.getControlStyle(),onPointerDown(event){if(!interactive)return;if(!isLeftClick(event))return;if(isModifierKey(event))return;const point=getEventPoint(event);send({type:"POINTER_DOWN",point});event.preventDefault();event.stopPropagation()}}),markerGroupProps:normalize.element({...parts.markerGroup.attrs,role:"presentation",dir:state.context.dir,"aria-hidden":true,"data-orientation":state.context.orientation,style:dom.getMarkerGroupStyle()}),getMarkerProps(props2){const style=dom.getMarkerStyle(state.context,props2.value);let markerState;const first=state.context.value[0];const last=state.context.value[state.context.value.length-1];if(props2.value<first){markerState="under-value"}else if(props2.value>last){markerState="over-value"}else{markerState="at-value"}return normalize.element({...parts.marker.attrs,id:dom.getMarkerId(state.context,props2.value),role:"presentation",dir:state.context.dir,"data-orientation":state.context.orientation,"data-value":props2.value,"data-disabled":dataAttr(disabled),"data-state":markerState,style})}}}import{createMachine}from"@zag-js/core";import{trackPointerMove}from"@zag-js/dom-event";import{raf}from"@zag-js/dom-query";import{trackElementsSize}from"@zag-js/element-size";import{trackFormControl}from"@zag-js/form-utils";import{getValuePercent as getValuePercent3}from"@zag-js/numeric-range";import{compact,isEqual}from"@zag-js/utils";var isEqualSize=(a,b)=>{return a?.width===b?.width&&a?.height===b?.height};function machine(userContext){const ctx=compact(userContext);return createMachine({id:"slider",initial:"idle",context:{thumbSize:null,thumbAlignment:"contain",min:0,max:100,step:1,value:[0],origin:"start",orientation:"horizontal",dir:"ltr",minStepsBetweenThumbs:0,disabled:false,...ctx,focusedIndex:-1,fieldsetDisabled:false},computed:{isHorizontal:ctx2=>ctx2.orientation==="horizontal",isVertical:ctx2=>ctx2.orientation==="vertical",isRtl:ctx2=>ctx2.orientation==="horizontal"&&ctx2.dir==="rtl",isDisabled:ctx2=>!!ctx2.disabled||ctx2.fieldsetDisabled,isInteractive:ctx2=>!(ctx2.readOnly||ctx2.isDisabled),hasMeasuredThumbSize:ctx2=>ctx2.thumbSize!=null,valuePercent(ctx2){return ctx2.value.map(value=>100*getValuePercent3(value,ctx2.min,ctx2.max))}},watch:{value:["syncInputElements"]},entry:["coarseValue"],activities:["trackFormControlState","trackThumbsSize"],on:{SET_VALUE:[{guard:"hasIndex",actions:"setValueAtIndex"},{actions:"setValue"}],INCREMENT:{actions:"incrementThumbAtIndex"},DECREMENT:{actions:"decrementThumbAtIndex"}},states:{idle:{on:{POINTER_DOWN:{target:"dragging",actions:["setClosestThumbIndex","setPointerValue","focusActiveThumb"]},FOCUS:{target:"focus",actions:"setFocusedIndex"},THUMB_POINTER_DOWN:{target:"dragging",actions:["setFocusedIndex","focusActiveThumb"]}}},focus:{entry:"focusActiveThumb",on:{POINTER_DOWN:{target:"dragging",actions:["setClosestThumbIndex","setPointerValue","focusActiveThumb"]},THUMB_POINTER_DOWN:{target:"dragging",actions:["setFocusedIndex","focusActiveThumb"]},ARROW_DEC:{actions:["decrementThumbAtIndex","invokeOnChangeEnd"]},ARROW_INC:{actions:["incrementThumbAtIndex","invokeOnChangeEnd"]},HOME:{actions:["setFocusedThumbToMin","invokeOnChangeEnd"]},END:{actions:["setFocusedThumbToMax","invokeOnChangeEnd"]},BLUR:{target:"idle",actions:"clearFocusedIndex"}}},dragging:{entry:"focusActiveThumb",activities:"trackPointerMove",on:{POINTER_UP:{target:"focus",actions:"invokeOnChangeEnd"},POINTER_MOVE:{actions:"setPointerValue"}}}}},{guards:{hasIndex:(_ctx,evt)=>evt.index!=null},activities:{trackFormControlState(ctx2,_evt,{initialContext}){return trackFormControl(dom.getRootEl(ctx2),{onFieldsetDisabledChange(disabled){ctx2.fieldsetDisabled=disabled},onFormReset(){set.value(ctx2,initialContext.value)}})},trackPointerMove(ctx2,_evt,{send}){return trackPointerMove(dom.getDoc(ctx2),{onPointerMove(info){send({type:"POINTER_MOVE",point:info.point})},onPointerUp(){send("POINTER_UP")}})},trackThumbsSize(ctx2){if(ctx2.thumbAlignment!=="contain"||ctx2.thumbSize)return;return trackElementsSize({getNodes:()=>dom.getElements(ctx2),observeMutation:true,callback(size){if(!size||isEqualSize(ctx2.thumbSize,size))return;ctx2.thumbSize=size}})}},actions:{syncInputElements(ctx2){ctx2.value.forEach((value,index)=>{const inputEl=dom.getHiddenInputEl(ctx2,index);dom.setValue(inputEl,value)})},invokeOnChangeEnd(ctx2){ctx2.onValueChangeEnd?.({value:ctx2.value})},setClosestThumbIndex(ctx2,evt){const pointValue=dom.getValueFromPoint(ctx2,evt.point);if(pointValue==null)return;const focusedIndex=getClosestIndex(ctx2,pointValue);set.focusedIndex(ctx2,focusedIndex)},setFocusedIndex(ctx2,evt){set.focusedIndex(ctx2,evt.index)},clearFocusedIndex(ctx2){set.focusedIndex(ctx2,-1)},setPointerValue(ctx2,evt){const pointerValue=dom.getValueFromPoint(ctx2,evt.point);if(pointerValue==null)return;const value=constrainValue(ctx2,pointerValue,ctx2.focusedIndex);set.valueAtIndex(ctx2,ctx2.focusedIndex,value)},focusActiveThumb(ctx2){raf(()=>{const thumbEl=dom.getThumbEl(ctx2,ctx2.focusedIndex);thumbEl?.focus({preventScroll:true})})},decrementThumbAtIndex(ctx2,evt){const value=decrement(ctx2,evt.index,evt.step);set.value(ctx2,value)},incrementThumbAtIndex(ctx2,evt){const value=increment(ctx2,evt.index,evt.step);set.value(ctx2,value)},setFocusedThumbToMin(ctx2){const{min}=getRangeAtIndex(ctx2,ctx2.focusedIndex);set.valueAtIndex(ctx2,ctx2.focusedIndex,min)},setFocusedThumbToMax(ctx2){const{max}=getRangeAtIndex(ctx2,ctx2.focusedIndex);set.valueAtIndex(ctx2,ctx2.focusedIndex,max)},coarseValue(ctx2){const value=normalizeValues(ctx2,ctx2.value);set.value(ctx2,value)},setValueAtIndex(ctx2,evt){const value=constrainValue(ctx2,evt.value,evt.index);set.valueAtIndex(ctx2,evt.index,value)},setValue(ctx2,evt){const value=normalizeValues(ctx2,evt.value);set.value(ctx2,value)}}})}var invoke={change:ctx=>{ctx.onValueChange?.({value:Array.from(ctx.value)});dom.dispatchChangeEvent(ctx)},focusChange:ctx=>{ctx.onFocusChange?.({value:Array.from(ctx.value),focusedIndex:ctx.focusedIndex})}};var set={valueAtIndex:(ctx,index,value)=>{if(isEqual(ctx.value[index],value))return;ctx.value[index]=value;invoke.change(ctx)},value:(ctx,value)=>{if(isEqual(ctx.value,value))return;assignArray(ctx.value,value);invoke.change(ctx)},focusedIndex:(ctx,index)=>{if(isEqual(ctx.focusedIndex,index))return;ctx.focusedIndex=index;invoke.focusChange(ctx)}};import{createProps}from"@zag-js/types";import{createSplitProps}from"@zag-js/utils";var props=createProps()(["aria-label","aria-labelledby","dir","disabled","form","getAriaValueText","getRootNode","id","ids","invalid","max","min","minStepsBetweenThumbs","name","onFocusChange","onValueChange","onValueChangeEnd","orientation","origin","readOnly","step","thumbAlignment","thumbAlignment","thumbSize","value"]);var splitProps=createSplitProps(props);var thumbProps=createProps()(["index","name"]);var splitThumbProps=createSplitProps(thumbProps);export{anatomy,connect,machine,props,splitProps,splitThumbProps,thumbProps};
2
2
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/slider.anatomy.ts","../src/slider.connect.ts","../src/slider.dom.ts","../src/slider.style.ts","../src/slider.utils.ts","../src/slider.machine.ts","../src/slider.props.ts"],"sourcesContent":["import { createAnatomy } from \"@zag-js/anatomy\"\n\nexport const anatomy = createAnatomy(\"slider\").parts(\n \"root\",\n \"label\",\n \"thumb\",\n \"valueText\",\n \"track\",\n \"range\",\n \"control\",\n \"markerGroup\",\n \"marker\",\n)\n\nexport const parts = anatomy.build()\n","import {\n getEventKey,\n getEventPoint,\n getEventStep,\n getNativeEvent,\n isLeftClick,\n isModifierKey,\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\"\nimport { getRangeAtIndex } from \"./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 focused = state.matches(\"focus\")\n const dragging = state.matches(\"dragging\")\n\n const disabled = state.context.isDisabled\n const invalid = state.context.invalid\n const interactive = state.context.isInteractive\n\n const isHorizontal = state.context.orientation === \"horizontal\"\n const isVertical = state.context.orientation === \"vertical\"\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 dragging,\n focused,\n setValue(value) {\n send({ type: \"SET_VALUE\", value: value })\n },\n getThumbValue(index) {\n return sliderValue[index]\n },\n setThumbValue(index, value) {\n send({ type: \"SET_VALUE\", index, value })\n },\n getValuePercent: getValuePercentFn,\n getPercentValue: getPercentValueFn,\n getThumbPercent(index) {\n return getValuePercentFn(sliderValue[index])\n },\n setThumbPercent(index, percent) {\n const value = getPercentValueFn(percent)\n send({ type: \"SET_VALUE\", index, value })\n },\n getThumbMin(index) {\n return getRangeAtIndex(state.context, index).min\n },\n getThumbMax(index) {\n return getRangeAtIndex(state.context, index).max\n },\n increment(index) {\n send({ type: \"INCREMENT\", index })\n },\n decrement(index) {\n send({ type: \"DECREMENT\", index })\n },\n focus() {\n if (!interactive) 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(disabled),\n \"data-orientation\": state.context.orientation,\n \"data-invalid\": dataAttr(invalid),\n \"data-focus\": dataAttr(focused),\n id: dom.getLabelId(state.context),\n htmlFor: dom.getHiddenInputId(state.context, 0),\n onClick(event) {\n if (!interactive) 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(disabled),\n \"data-orientation\": state.context.orientation,\n \"data-invalid\": dataAttr(invalid),\n \"data-focus\": dataAttr(focused),\n id: dom.getRootId(state.context),\n dir: state.context.dir,\n style: dom.getRootStyle(state.context),\n }),\n\n valueTextProps: normalize.element({\n ...parts.valueText.attrs,\n dir: state.context.dir,\n \"data-disabled\": dataAttr(disabled),\n \"data-orientation\": state.context.orientation,\n \"data-invalid\": dataAttr(invalid),\n \"data-focus\": dataAttr(focused),\n id: dom.getValueTextId(state.context),\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(disabled),\n \"data-invalid\": dataAttr(invalid),\n \"data-orientation\": state.context.orientation,\n \"data-focus\": dataAttr(focused),\n style: { position: \"relative\" },\n }),\n\n getThumbProps(props) {\n const { index = 0, name } = props\n\n const value = sliderValue[index]\n const range = getRangeAtIndex(state.context, index)\n const valueText = 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 \"data-name\": name,\n id: dom.getThumbId(state.context, index),\n \"data-disabled\": dataAttr(disabled),\n \"data-orientation\": state.context.orientation,\n \"data-focus\": dataAttr(focused && state.context.focusedIndex === index),\n draggable: false,\n \"aria-disabled\": ariaAttr(disabled),\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\": valueText,\n role: \"slider\",\n tabIndex: disabled ? undefined : 0,\n style: dom.getThumbStyle(state.context, index),\n onPointerDown(event) {\n if (!interactive) return\n send({ type: \"THUMB_POINTER_DOWN\", index })\n event.stopPropagation()\n },\n onBlur() {\n if (!interactive) return\n send(\"BLUR\")\n },\n onFocus() {\n if (!interactive) return\n send({ type: \"FOCUS\", index })\n },\n onKeyDown(event) {\n if (event.defaultPrevented) return\n if (!interactive) return\n\n const step = getEventStep(event) * state.context.step\n\n const keyMap: EventKeyMap = {\n ArrowUp() {\n if (isHorizontal) return\n send({ type: \"ARROW_INC\", step, src: \"ArrowUp\" })\n },\n ArrowDown() {\n if (isHorizontal) return\n send({ type: \"ARROW_DEC\", step, src: \"ArrowDown\" })\n },\n ArrowLeft() {\n if (isVertical) return\n send({ type: \"ARROW_DEC\", step, src: \"ArrowLeft\" })\n },\n ArrowRight() {\n if (isVertical) return\n send({ type: \"ARROW_INC\", step, src: \"ArrowRight\" })\n },\n PageUp() {\n send({ type: \"ARROW_INC\", step, src: \"PageUp\" })\n },\n PageDown() {\n send({ type: \"ARROW_DEC\", step, src: \"PageDown\" })\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) {\n exec(event)\n event.preventDefault()\n event.stopPropagation()\n }\n },\n })\n },\n\n getHiddenInputProps(props) {\n const { index = 0, name } = props\n return normalize.input({\n name:\n name ?? (state.context.name ? state.context.name + (state.context.value.length > 1 ? \"[]\" : \"\") : undefined),\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(focused),\n \"data-invalid\": dataAttr(invalid),\n \"data-disabled\": dataAttr(disabled),\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(disabled),\n \"data-orientation\": state.context.orientation,\n \"data-invalid\": dataAttr(invalid),\n \"data-focus\": dataAttr(focused),\n style: dom.getControlStyle(),\n onPointerDown(event) {\n if (!interactive) return\n\n const evt = getNativeEvent(event)\n if (!isLeftClick(evt) || isModifierKey(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(props) {\n const style = dom.getMarkerStyle(state.context, props.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 (props.value < first) {\n markerState = \"under-value\"\n } else if (props.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, props.value),\n role: \"presentation\",\n dir: state.context.dir,\n \"data-orientation\": state.context.orientation,\n \"data-value\": props.value,\n \"data-disabled\": dataAttr(disabled),\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 \"./slider.style\"\nimport type { MachineContext as Ctx } from \"./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 getValueTextId: (ctx: Ctx) => ctx.ids?.valueText ?? `slider:${ctx.id}:valueText`,\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 { 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 * 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\n if (ctx.valuePercent.length === 1) {\n if (ctx.origin === \"center\") {\n const isNegative = ctx.valuePercent[0] < 50\n const start = isNegative ? `${ctx.valuePercent[0]}%` : \"50%\"\n const end = isNegative ? \"50%\" : `${100 - ctx.valuePercent[0]}%`\n\n return { start, end }\n }\n\n return { start: \"0%\", end: `${100 - lastPercent}%` }\n }\n\n return { start: `${firstPercent}%`, end: `${100 - lastPercent}%` }\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 * 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: 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 * 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\n const offsetStyles = ctx.value.reduce<Style>((styles, value, index) => {\n const offset = 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\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 // @ts-expect-error\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 getMarkerGroupStyle(): Style {\n return {\n userSelect: \"none\",\n pointerEvents: \"none\",\n position: \"relative\",\n }\n}\n\nexport const styleGetterFns = {\n getRootStyle,\n getControlStyle,\n getThumbStyle,\n getRangeStyle,\n getMarkerStyle,\n 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 \"./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 \"./slider.dom\"\nimport type { MachineContext, MachineState, UserDefinedContext } from \"./slider.types\"\nimport {\n assignArray,\n constrainValue,\n decrement,\n getClosestIndex,\n getRangeAtIndex,\n increment,\n normalizeValues,\n} from \"./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: \"slider\",\n initial: \"idle\",\n\n context: {\n thumbSize: null,\n thumbAlignment: \"contain\",\n min: 0,\n max: 100,\n step: 1,\n value: [0],\n origin: \"start\",\n orientation: \"horizontal\",\n dir: \"ltr\",\n minStepsBetweenThumbs: 0,\n disabled: false,\n ...ctx,\n focusedIndex: -1,\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 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: \"incrementThumbAtIndex\",\n },\n DECREMENT: {\n actions: \"decrementThumbAtIndex\",\n },\n },\n\n states: {\n idle: {\n on: {\n POINTER_DOWN: {\n target: \"dragging\",\n actions: [\"setClosestThumbIndex\", \"setPointerValue\", \"focusActiveThumb\"],\n },\n FOCUS: {\n target: \"focus\",\n actions: \"setFocusedIndex\",\n },\n THUMB_POINTER_DOWN: {\n target: \"dragging\",\n actions: [\"setFocusedIndex\", \"focusActiveThumb\"],\n },\n },\n },\n focus: {\n entry: \"focusActiveThumb\",\n on: {\n POINTER_DOWN: {\n target: \"dragging\",\n actions: [\"setClosestThumbIndex\", \"setPointerValue\", \"focusActiveThumb\"],\n },\n THUMB_POINTER_DOWN: {\n target: \"dragging\",\n actions: [\"setFocusedIndex\", \"focusActiveThumb\"],\n },\n ARROW_DEC: {\n actions: [\"decrementThumbAtIndex\", \"invokeOnChangeEnd\"],\n },\n ARROW_INC: {\n actions: [\"incrementThumbAtIndex\", \"invokeOnChangeEnd\"],\n },\n HOME: {\n actions: [\"setFocusedThumbToMin\", \"invokeOnChangeEnd\"],\n },\n END: {\n actions: [\"setFocusedThumbToMax\", \"invokeOnChangeEnd\"],\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 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 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 decrementThumbAtIndex(ctx, evt) {\n const value = decrement(ctx, evt.index, evt.step)\n set.value(ctx, value)\n },\n incrementThumbAtIndex(ctx, evt) {\n const value = increment(ctx, evt.index, evt.step)\n set.value(ctx, value)\n },\n setFocusedThumbToMin(ctx) {\n const { min } = getRangeAtIndex(ctx, ctx.focusedIndex)\n set.valueAtIndex(ctx, ctx.focusedIndex, min)\n },\n setFocusedThumbToMax(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","import { createProps } from \"@zag-js/types\"\nimport { createSplitProps } from \"@zag-js/utils\"\nimport type { ThumbProps, UserDefinedContext } from \"./slider.types\"\n\nexport const props = createProps<UserDefinedContext>()([\n \"aria-label\",\n \"aria-labelledby\",\n \"dir\",\n \"disabled\",\n \"form\",\n \"getAriaValueText\",\n \"getRootNode\",\n \"id\",\n \"ids\",\n \"invalid\",\n \"max\",\n \"min\",\n \"minStepsBetweenThumbs\",\n \"name\",\n \"onFocusChange\",\n \"onValueChange\",\n \"onValueChangeEnd\",\n \"orientation\",\n \"origin\",\n \"readOnly\",\n \"step\",\n \"thumbAlignment\",\n \"thumbAlignment\",\n \"thumbSize\",\n \"value\",\n])\n\nexport const splitProps = createSplitProps<Partial<UserDefinedContext>>(props)\n\nexport const thumbProps = createProps<ThumbProps>()([\"index\", \"name\"])\nexport const splitThumbProps = createSplitProps<ThumbProps>(thumbProps)\n"],"mappings":"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","names":["getPercentValue","getValuePercent","getValue","getValuePercent","getPercentValue","props","getValuePercent","ctx","getValuePercent"]}
1
+ {"version":3,"sources":["../src/slider.anatomy.ts","../src/slider.connect.ts","../src/slider.dom.ts","../src/slider.style.ts","../src/slider.utils.ts","../src/slider.machine.ts","../src/slider.props.ts"],"sourcesContent":["import { createAnatomy } from \"@zag-js/anatomy\"\n\nexport const anatomy = createAnatomy(\"slider\").parts(\n \"root\",\n \"label\",\n \"thumb\",\n \"valueText\",\n \"track\",\n \"range\",\n \"control\",\n \"markerGroup\",\n \"marker\",\n)\n\nexport const parts = anatomy.build()\n","import {\n getEventKey,\n getEventPoint,\n getEventStep,\n isLeftClick,\n isModifierKey,\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\"\nimport { getRangeAtIndex } from \"./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 focused = state.matches(\"focus\")\n const dragging = state.matches(\"dragging\")\n\n const disabled = state.context.isDisabled\n const invalid = state.context.invalid\n const interactive = state.context.isInteractive\n\n const isHorizontal = state.context.orientation === \"horizontal\"\n const isVertical = state.context.orientation === \"vertical\"\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 dragging,\n focused,\n setValue(value) {\n send({ type: \"SET_VALUE\", value: value })\n },\n getThumbValue(index) {\n return sliderValue[index]\n },\n setThumbValue(index, value) {\n send({ type: \"SET_VALUE\", index, value })\n },\n getValuePercent: getValuePercentFn,\n getPercentValue: getPercentValueFn,\n getThumbPercent(index) {\n return getValuePercentFn(sliderValue[index])\n },\n setThumbPercent(index, percent) {\n const value = getPercentValueFn(percent)\n send({ type: \"SET_VALUE\", index, value })\n },\n getThumbMin(index) {\n return getRangeAtIndex(state.context, index).min\n },\n getThumbMax(index) {\n return getRangeAtIndex(state.context, index).max\n },\n increment(index) {\n send({ type: \"INCREMENT\", index })\n },\n decrement(index) {\n send({ type: \"DECREMENT\", index })\n },\n focus() {\n if (!interactive) 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(disabled),\n \"data-orientation\": state.context.orientation,\n \"data-invalid\": dataAttr(invalid),\n \"data-focus\": dataAttr(focused),\n id: dom.getLabelId(state.context),\n htmlFor: dom.getHiddenInputId(state.context, 0),\n onClick(event) {\n if (!interactive) 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(disabled),\n \"data-orientation\": state.context.orientation,\n \"data-invalid\": dataAttr(invalid),\n \"data-focus\": dataAttr(focused),\n id: dom.getRootId(state.context),\n dir: state.context.dir,\n style: dom.getRootStyle(state.context),\n }),\n\n valueTextProps: normalize.element({\n ...parts.valueText.attrs,\n dir: state.context.dir,\n \"data-disabled\": dataAttr(disabled),\n \"data-orientation\": state.context.orientation,\n \"data-invalid\": dataAttr(invalid),\n \"data-focus\": dataAttr(focused),\n id: dom.getValueTextId(state.context),\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(disabled),\n \"data-invalid\": dataAttr(invalid),\n \"data-orientation\": state.context.orientation,\n \"data-focus\": dataAttr(focused),\n style: { position: \"relative\" },\n }),\n\n getThumbProps(props) {\n const { index = 0, name } = props\n\n const value = sliderValue[index]\n const range = getRangeAtIndex(state.context, index)\n const valueText = 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 \"data-name\": name,\n id: dom.getThumbId(state.context, index),\n \"data-disabled\": dataAttr(disabled),\n \"data-orientation\": state.context.orientation,\n \"data-focus\": dataAttr(focused && state.context.focusedIndex === index),\n draggable: false,\n \"aria-disabled\": ariaAttr(disabled),\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\": valueText,\n role: \"slider\",\n tabIndex: disabled ? undefined : 0,\n style: dom.getThumbStyle(state.context, index),\n onPointerDown(event) {\n if (!interactive) return\n send({ type: \"THUMB_POINTER_DOWN\", index })\n event.stopPropagation()\n },\n onBlur() {\n if (!interactive) return\n send(\"BLUR\")\n },\n onFocus() {\n if (!interactive) return\n send({ type: \"FOCUS\", index })\n },\n onKeyDown(event) {\n if (event.defaultPrevented) return\n if (!interactive) return\n\n const step = getEventStep(event) * state.context.step\n\n const keyMap: EventKeyMap = {\n ArrowUp() {\n if (isHorizontal) return\n send({ type: \"ARROW_INC\", step, src: \"ArrowUp\" })\n },\n ArrowDown() {\n if (isHorizontal) return\n send({ type: \"ARROW_DEC\", step, src: \"ArrowDown\" })\n },\n ArrowLeft() {\n if (isVertical) return\n send({ type: \"ARROW_DEC\", step, src: \"ArrowLeft\" })\n },\n ArrowRight() {\n if (isVertical) return\n send({ type: \"ARROW_INC\", step, src: \"ArrowRight\" })\n },\n PageUp() {\n send({ type: \"ARROW_INC\", step, src: \"PageUp\" })\n },\n PageDown() {\n send({ type: \"ARROW_DEC\", step, src: \"PageDown\" })\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) {\n exec(event)\n event.preventDefault()\n event.stopPropagation()\n }\n },\n })\n },\n\n getHiddenInputProps(props) {\n const { index = 0, name } = props\n return normalize.input({\n name:\n name ?? (state.context.name ? state.context.name + (state.context.value.length > 1 ? \"[]\" : \"\") : undefined),\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(focused),\n \"data-invalid\": dataAttr(invalid),\n \"data-disabled\": dataAttr(disabled),\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(disabled),\n \"data-orientation\": state.context.orientation,\n \"data-invalid\": dataAttr(invalid),\n \"data-focus\": dataAttr(focused),\n style: dom.getControlStyle(),\n onPointerDown(event) {\n if (!interactive) return\n if (!isLeftClick(event)) return\n if (isModifierKey(event)) return\n\n const point = getEventPoint(event)\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(props) {\n const style = dom.getMarkerStyle(state.context, props.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 (props.value < first) {\n markerState = \"under-value\"\n } else if (props.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, props.value),\n role: \"presentation\",\n dir: state.context.dir,\n \"data-orientation\": state.context.orientation,\n \"data-value\": props.value,\n \"data-disabled\": dataAttr(disabled),\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 \"./slider.style\"\nimport type { MachineContext as Ctx } from \"./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 getValueTextId: (ctx: Ctx) => ctx.ids?.valueText ?? `slider:${ctx.id}:valueText`,\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 { 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 * 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\n if (ctx.valuePercent.length === 1) {\n if (ctx.origin === \"center\") {\n const isNegative = ctx.valuePercent[0] < 50\n const start = isNegative ? `${ctx.valuePercent[0]}%` : \"50%\"\n const end = isNegative ? \"50%\" : `${100 - ctx.valuePercent[0]}%`\n\n return { start, end }\n }\n\n return { start: \"0%\", end: `${100 - lastPercent}%` }\n }\n\n return { start: `${firstPercent}%`, end: `${100 - lastPercent}%` }\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 * 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: 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 * 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\n const offsetStyles = ctx.value.reduce<Style>((styles, value, index) => {\n const offset = 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\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 // @ts-expect-error\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 getMarkerGroupStyle(): Style {\n return {\n userSelect: \"none\",\n pointerEvents: \"none\",\n position: \"relative\",\n }\n}\n\nexport const styleGetterFns = {\n getRootStyle,\n getControlStyle,\n getThumbStyle,\n getRangeStyle,\n getMarkerStyle,\n 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 \"./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 \"./slider.dom\"\nimport type { MachineContext, MachineState, UserDefinedContext } from \"./slider.types\"\nimport {\n assignArray,\n constrainValue,\n decrement,\n getClosestIndex,\n getRangeAtIndex,\n increment,\n normalizeValues,\n} from \"./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: \"slider\",\n initial: \"idle\",\n\n context: {\n thumbSize: null,\n thumbAlignment: \"contain\",\n min: 0,\n max: 100,\n step: 1,\n value: [0],\n origin: \"start\",\n orientation: \"horizontal\",\n dir: \"ltr\",\n minStepsBetweenThumbs: 0,\n disabled: false,\n ...ctx,\n focusedIndex: -1,\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 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: \"incrementThumbAtIndex\",\n },\n DECREMENT: {\n actions: \"decrementThumbAtIndex\",\n },\n },\n\n states: {\n idle: {\n on: {\n POINTER_DOWN: {\n target: \"dragging\",\n actions: [\"setClosestThumbIndex\", \"setPointerValue\", \"focusActiveThumb\"],\n },\n FOCUS: {\n target: \"focus\",\n actions: \"setFocusedIndex\",\n },\n THUMB_POINTER_DOWN: {\n target: \"dragging\",\n actions: [\"setFocusedIndex\", \"focusActiveThumb\"],\n },\n },\n },\n focus: {\n entry: \"focusActiveThumb\",\n on: {\n POINTER_DOWN: {\n target: \"dragging\",\n actions: [\"setClosestThumbIndex\", \"setPointerValue\", \"focusActiveThumb\"],\n },\n THUMB_POINTER_DOWN: {\n target: \"dragging\",\n actions: [\"setFocusedIndex\", \"focusActiveThumb\"],\n },\n ARROW_DEC: {\n actions: [\"decrementThumbAtIndex\", \"invokeOnChangeEnd\"],\n },\n ARROW_INC: {\n actions: [\"incrementThumbAtIndex\", \"invokeOnChangeEnd\"],\n },\n HOME: {\n actions: [\"setFocusedThumbToMin\", \"invokeOnChangeEnd\"],\n },\n END: {\n actions: [\"setFocusedThumbToMax\", \"invokeOnChangeEnd\"],\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 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 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 decrementThumbAtIndex(ctx, evt) {\n const value = decrement(ctx, evt.index, evt.step)\n set.value(ctx, value)\n },\n incrementThumbAtIndex(ctx, evt) {\n const value = increment(ctx, evt.index, evt.step)\n set.value(ctx, value)\n },\n setFocusedThumbToMin(ctx) {\n const { min } = getRangeAtIndex(ctx, ctx.focusedIndex)\n set.valueAtIndex(ctx, ctx.focusedIndex, min)\n },\n setFocusedThumbToMax(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","import { createProps } from \"@zag-js/types\"\nimport { createSplitProps } from \"@zag-js/utils\"\nimport type { ThumbProps, UserDefinedContext } from \"./slider.types\"\n\nexport const props = createProps<UserDefinedContext>()([\n \"aria-label\",\n \"aria-labelledby\",\n \"dir\",\n \"disabled\",\n \"form\",\n \"getAriaValueText\",\n \"getRootNode\",\n \"id\",\n \"ids\",\n \"invalid\",\n \"max\",\n \"min\",\n \"minStepsBetweenThumbs\",\n \"name\",\n \"onFocusChange\",\n \"onValueChange\",\n \"onValueChangeEnd\",\n \"orientation\",\n \"origin\",\n \"readOnly\",\n \"step\",\n \"thumbAlignment\",\n \"thumbAlignment\",\n \"thumbSize\",\n \"value\",\n])\n\nexport const splitProps = createSplitProps<Partial<UserDefinedContext>>(props)\n\nexport const thumbProps = createProps<ThumbProps>()([\"index\", \"name\"])\nexport const splitThumbProps = createSplitProps<ThumbProps>(thumbProps)\n"],"mappings":"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","names":["getPercentValue","getValuePercent","getValue","getValuePercent","getPercentValue","props","getValuePercent","ctx","getValuePercent"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zag-js/slider",
3
- "version": "0.51.1",
3
+ "version": "0.52.0",
4
4
  "description": "Core logic for the slider widget implemented as a state machine",
5
5
  "keywords": [
6
6
  "js",
@@ -28,15 +28,15 @@
28
28
  "url": "https://github.com/chakra-ui/zag/issues"
29
29
  },
30
30
  "dependencies": {
31
- "@zag-js/anatomy": "0.51.1",
32
- "@zag-js/core": "0.51.1",
33
- "@zag-js/dom-event": "0.51.1",
34
- "@zag-js/form-utils": "0.51.1",
35
- "@zag-js/utils": "0.51.1",
36
- "@zag-js/dom-query": "0.51.1",
37
- "@zag-js/element-size": "0.51.1",
38
- "@zag-js/numeric-range": "0.51.1",
39
- "@zag-js/types": "0.51.1"
31
+ "@zag-js/anatomy": "0.52.0",
32
+ "@zag-js/core": "0.52.0",
33
+ "@zag-js/form-utils": "0.52.0",
34
+ "@zag-js/dom-query": "0.52.0",
35
+ "@zag-js/dom-event": "0.52.0",
36
+ "@zag-js/utils": "0.52.0",
37
+ "@zag-js/numeric-range": "0.52.0",
38
+ "@zag-js/element-size": "0.52.0",
39
+ "@zag-js/types": "0.52.0"
40
40
  },
41
41
  "devDependencies": {
42
42
  "clean-package": "2.2.0"
@@ -2,7 +2,6 @@ import {
2
2
  getEventKey,
3
3
  getEventPoint,
4
4
  getEventStep,
5
- getNativeEvent,
6
5
  isLeftClick,
7
6
  isModifierKey,
8
7
  type EventKeyMap,
@@ -255,11 +254,10 @@ export function connect<T extends PropTypes>(state: State, send: Send, normalize
255
254
  style: dom.getControlStyle(),
256
255
  onPointerDown(event) {
257
256
  if (!interactive) return
257
+ if (!isLeftClick(event)) return
258
+ if (isModifierKey(event)) return
258
259
 
259
- const evt = getNativeEvent(event)
260
- if (!isLeftClick(evt) || isModifierKey(evt)) return
261
-
262
- const point = getEventPoint(evt)
260
+ const point = getEventPoint(event)
263
261
  send({ type: "POINTER_DOWN", point })
264
262
 
265
263
  event.preventDefault()