@zag-js/slider 0.50.0 → 0.51.1

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,857 +1,2 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
-
20
- // src/index.ts
21
- var src_exports = {};
22
- __export(src_exports, {
23
- anatomy: () => anatomy,
24
- connect: () => connect,
25
- machine: () => machine,
26
- props: () => props,
27
- splitProps: () => splitProps,
28
- splitThumbProps: () => splitThumbProps,
29
- thumbProps: () => thumbProps
30
- });
31
- module.exports = __toCommonJS(src_exports);
32
-
33
- // src/slider.anatomy.ts
34
- var import_anatomy = require("@zag-js/anatomy");
35
- var anatomy = (0, import_anatomy.createAnatomy)("slider").parts(
36
- "root",
37
- "label",
38
- "thumb",
39
- "valueText",
40
- "track",
41
- "range",
42
- "control",
43
- "markerGroup",
44
- "marker"
45
- );
46
- var parts = anatomy.build();
47
-
48
- // src/slider.connect.ts
49
- var import_dom_event2 = require("@zag-js/dom-event");
50
- var import_dom_query2 = require("@zag-js/dom-query");
51
- var import_numeric_range4 = require("@zag-js/numeric-range");
52
-
53
- // src/slider.dom.ts
54
- var import_dom_event = require("@zag-js/dom-event");
55
- var import_dom_query = require("@zag-js/dom-query");
56
- var import_form_utils = require("@zag-js/form-utils");
57
- var import_numeric_range2 = require("@zag-js/numeric-range");
58
-
59
- // src/slider.style.ts
60
- var import_numeric_range = require("@zag-js/numeric-range");
61
- function getBounds(value) {
62
- const firstValue = value[0];
63
- const lastThumb = value[value.length - 1];
64
- return [firstValue, lastThumb];
65
- }
66
- function getRangeOffsets(ctx) {
67
- const [firstPercent, lastPercent] = getBounds(ctx.valuePercent);
68
- if (ctx.valuePercent.length === 1) {
69
- if (ctx.origin === "center") {
70
- const isNegative = ctx.valuePercent[0] < 50;
71
- const start = isNegative ? `${ctx.valuePercent[0]}%` : "50%";
72
- const end = isNegative ? "50%" : `${100 - ctx.valuePercent[0]}%`;
73
- return { start, end };
74
- }
75
- return { start: "0%", end: `${100 - lastPercent}%` };
76
- }
77
- return { start: `${firstPercent}%`, end: `${100 - lastPercent}%` };
78
- }
79
- function getRangeStyle(ctx) {
80
- if (ctx.isVertical) {
81
- return {
82
- position: "absolute",
83
- bottom: "var(--slider-range-start)",
84
- top: "var(--slider-range-end)"
85
- };
86
- }
87
- return {
88
- position: "absolute",
89
- [ctx.isRtl ? "right" : "left"]: "var(--slider-range-start)",
90
- [ctx.isRtl ? "left" : "right"]: "var(--slider-range-end)"
91
- };
92
- }
93
- function getVerticalThumbOffset(ctx) {
94
- const { height = 0 } = ctx.thumbSize ?? {};
95
- const getValue = (0, import_numeric_range.getValueTransformer)([ctx.min, ctx.max], [-height / 2, height / 2]);
96
- return parseFloat(getValue(ctx.value).toFixed(2));
97
- }
98
- function getHorizontalThumbOffset(ctx) {
99
- const { width = 0 } = ctx.thumbSize ?? {};
100
- if (ctx.isRtl) {
101
- const getValue2 = (0, import_numeric_range.getValueTransformer)([ctx.max, ctx.min], [-width / 2, width / 2]);
102
- return -1 * parseFloat(getValue2(ctx.value).toFixed(2));
103
- }
104
- const getValue = (0, import_numeric_range.getValueTransformer)([ctx.min, ctx.max], [-width / 2, width / 2]);
105
- return parseFloat(getValue(ctx.value).toFixed(2));
106
- }
107
- function getOffset(ctx, percent) {
108
- if (ctx.thumbAlignment === "center")
109
- return `${percent}%`;
110
- const offset = ctx.isVertical ? getVerticalThumbOffset(ctx) : getHorizontalThumbOffset(ctx);
111
- return `calc(${percent}% - ${offset}px)`;
112
- }
113
- function getThumbOffset(ctx) {
114
- let percent = (0, import_numeric_range.getValuePercent)(ctx.value, ctx.min, ctx.max) * 100;
115
- return getOffset(ctx, percent);
116
- }
117
- function getVisibility(ctx) {
118
- let visibility = "visible";
119
- if (ctx.thumbAlignment === "contain" && !ctx.hasMeasuredThumbSize) {
120
- visibility = "hidden";
121
- }
122
- return visibility;
123
- }
124
- function getThumbStyle(ctx, index) {
125
- const placementProp = ctx.isVertical ? "bottom" : "insetInlineStart";
126
- return {
127
- visibility: getVisibility(ctx),
128
- position: "absolute",
129
- transform: "var(--slider-thumb-transform)",
130
- [placementProp]: `var(--slider-thumb-offset-${index})`
131
- };
132
- }
133
- function getControlStyle() {
134
- return {
135
- touchAction: "none",
136
- userSelect: "none",
137
- position: "relative"
138
- };
139
- }
140
- function getRootStyle(ctx) {
141
- const range = getRangeOffsets(ctx);
142
- const offsetStyles = ctx.value.reduce((styles, value, index) => {
143
- const offset = getThumbOffset({ ...ctx, value });
144
- return { ...styles, [`--slider-thumb-offset-${index}`]: offset };
145
- }, {});
146
- return {
147
- ...offsetStyles,
148
- "--slider-thumb-transform": ctx.isVertical ? "translateY(50%)" : ctx.isRtl ? "translateX(50%)" : "translateX(-50%)",
149
- "--slider-range-start": range.start,
150
- "--slider-range-end": range.end
151
- };
152
- }
153
- function getMarkerStyle(ctx, value) {
154
- return {
155
- // @ts-expect-error
156
- visibility: getVisibility(ctx),
157
- position: "absolute",
158
- pointerEvents: "none",
159
- // @ts-expect-error
160
- [ctx.isHorizontal ? "insetInlineStart" : "bottom"]: getThumbOffset({ ...ctx, value }),
161
- translate: "var(--tx) var(--ty)",
162
- "--tx": ctx.isHorizontal ? ctx.isRtl ? "50%" : "-50%" : "0%",
163
- "--ty": !ctx.isHorizontal ? "50%" : "0%"
164
- };
165
- }
166
- function getMarkerGroupStyle() {
167
- return {
168
- userSelect: "none",
169
- pointerEvents: "none",
170
- position: "relative"
171
- };
172
- }
173
- var styleGetterFns = {
174
- getRootStyle,
175
- getControlStyle,
176
- getThumbStyle,
177
- getRangeStyle,
178
- getMarkerStyle,
179
- getMarkerGroupStyle
180
- };
181
-
182
- // src/slider.dom.ts
183
- var dom = (0, import_dom_query.createScope)({
184
- ...styleGetterFns,
185
- getRootId: (ctx) => ctx.ids?.root ?? `slider:${ctx.id}`,
186
- getThumbId: (ctx, index) => ctx.ids?.thumb?.(index) ?? `slider:${ctx.id}:thumb:${index}`,
187
- getHiddenInputId: (ctx, index) => `slider:${ctx.id}:input:${index}`,
188
- getControlId: (ctx) => ctx.ids?.control ?? `slider:${ctx.id}:control`,
189
- getTrackId: (ctx) => ctx.ids?.track ?? `slider:${ctx.id}:track`,
190
- getRangeId: (ctx) => ctx.ids?.range ?? `slider:${ctx.id}:range`,
191
- getLabelId: (ctx) => ctx.ids?.label ?? `slider:${ctx.id}:label`,
192
- getValueTextId: (ctx) => ctx.ids?.valueText ?? `slider:${ctx.id}:valueText`,
193
- getMarkerId: (ctx, value) => ctx.ids?.marker?.(value) ?? `slider:${ctx.id}:marker:${value}`,
194
- getRootEl: (ctx) => dom.getById(ctx, dom.getRootId(ctx)),
195
- getThumbEl: (ctx, index) => dom.getById(ctx, dom.getThumbId(ctx, index)),
196
- getHiddenInputEl: (ctx, index) => dom.getById(ctx, dom.getHiddenInputId(ctx, index)),
197
- getControlEl: (ctx) => dom.getById(ctx, dom.getControlId(ctx)),
198
- getElements: (ctx) => (0, import_dom_query.queryAll)(dom.getControlEl(ctx), "[role=slider]"),
199
- getFirstEl: (ctx) => dom.getElements(ctx)[0],
200
- getRangeEl: (ctx) => dom.getById(ctx, dom.getRangeId(ctx)),
201
- getValueFromPoint(ctx, point) {
202
- const controlEl = dom.getControlEl(ctx);
203
- if (!controlEl)
204
- return;
205
- const relativePoint = (0, import_dom_event.getRelativePoint)(point, controlEl);
206
- const percent = relativePoint.getPercentValue({
207
- orientation: ctx.orientation,
208
- dir: ctx.dir,
209
- inverted: { y: true }
210
- });
211
- return (0, import_numeric_range2.getPercentValue)(percent, ctx.min, ctx.max, ctx.step);
212
- },
213
- dispatchChangeEvent(ctx) {
214
- const valueArray = Array.from(ctx.value);
215
- valueArray.forEach((value, index) => {
216
- const inputEl = dom.getHiddenInputEl(ctx, index);
217
- if (!inputEl)
218
- return;
219
- (0, import_form_utils.dispatchInputValueEvent)(inputEl, { value });
220
- });
221
- }
222
- });
223
-
224
- // src/slider.utils.ts
225
- var import_numeric_range3 = require("@zag-js/numeric-range");
226
- function normalizeValues(ctx, nextValues) {
227
- return nextValues.map((value, index, values) => {
228
- return constrainValue({ ...ctx, value: values }, value, index);
229
- });
230
- }
231
- function getRangeAtIndex(ctx, index) {
232
- return (0, import_numeric_range3.getValueRanges)(ctx.value, ctx.min, ctx.max, ctx.minStepsBetweenThumbs)[index];
233
- }
234
- function constrainValue(ctx, value, index) {
235
- const range = getRangeAtIndex(ctx, index);
236
- const snapValue = (0, import_numeric_range3.snapValueToStep)(value, ctx.min, ctx.max, ctx.step);
237
- return (0, import_numeric_range3.clampValue)(snapValue, range.min, range.max);
238
- }
239
- function decrement(ctx, index, step) {
240
- const idx = index ?? ctx.focusedIndex;
241
- const range = getRangeAtIndex(ctx, idx);
242
- const nextValues = (0, import_numeric_range3.getPreviousStepValue)(idx, {
243
- ...range,
244
- step: step ?? ctx.step,
245
- values: ctx.value
246
- });
247
- nextValues[idx] = (0, import_numeric_range3.clampValue)(nextValues[idx], range.min, range.max);
248
- return nextValues;
249
- }
250
- function increment(ctx, index, step) {
251
- const idx = index ?? ctx.focusedIndex;
252
- const range = getRangeAtIndex(ctx, idx);
253
- const nextValues = (0, import_numeric_range3.getNextStepValue)(idx, {
254
- ...range,
255
- step: step ?? ctx.step,
256
- values: ctx.value
257
- });
258
- nextValues[idx] = (0, import_numeric_range3.clampValue)(nextValues[idx], range.min, range.max);
259
- return nextValues;
260
- }
261
- function getClosestIndex(ctx, pointValue) {
262
- return (0, import_numeric_range3.getClosestValueIndex)(ctx.value, pointValue);
263
- }
264
- function assignArray(current, next) {
265
- for (let i = 0; i < next.length; i++) {
266
- const value = next[i];
267
- current[i] = value;
268
- }
269
- }
270
-
271
- // src/slider.connect.ts
272
- function connect(state, send, normalize) {
273
- const ariaLabel = state.context["aria-label"];
274
- const ariaLabelledBy = state.context["aria-labelledby"];
275
- const sliderValue = state.context.value;
276
- const focused = state.matches("focus");
277
- const dragging = state.matches("dragging");
278
- const disabled = state.context.isDisabled;
279
- const invalid = state.context.invalid;
280
- const interactive = state.context.isInteractive;
281
- const isHorizontal = state.context.orientation === "horizontal";
282
- const isVertical = state.context.orientation === "vertical";
283
- function getValuePercentFn(value) {
284
- return (0, import_numeric_range4.getValuePercent)(value, state.context.min, state.context.max);
285
- }
286
- function getPercentValueFn(percent) {
287
- return (0, import_numeric_range4.getPercentValue)(percent, state.context.min, state.context.max, state.context.step);
288
- }
289
- return {
290
- value: state.context.value,
291
- dragging,
292
- focused,
293
- setValue(value) {
294
- send({ type: "SET_VALUE", value });
295
- },
296
- getThumbValue(index) {
297
- return sliderValue[index];
298
- },
299
- setThumbValue(index, value) {
300
- send({ type: "SET_VALUE", index, value });
301
- },
302
- getValuePercent: getValuePercentFn,
303
- getPercentValue: getPercentValueFn,
304
- getThumbPercent(index) {
305
- return getValuePercentFn(sliderValue[index]);
306
- },
307
- setThumbPercent(index, percent) {
308
- const value = getPercentValueFn(percent);
309
- send({ type: "SET_VALUE", index, value });
310
- },
311
- getThumbMin(index) {
312
- return getRangeAtIndex(state.context, index).min;
313
- },
314
- getThumbMax(index) {
315
- return getRangeAtIndex(state.context, index).max;
316
- },
317
- increment(index) {
318
- send({ type: "INCREMENT", index });
319
- },
320
- decrement(index) {
321
- send({ type: "DECREMENT", index });
322
- },
323
- focus() {
324
- if (!interactive)
325
- return;
326
- send({ type: "FOCUS", index: 0 });
327
- },
328
- labelProps: normalize.label({
329
- ...parts.label.attrs,
330
- dir: state.context.dir,
331
- "data-disabled": (0, import_dom_query2.dataAttr)(disabled),
332
- "data-orientation": state.context.orientation,
333
- "data-invalid": (0, import_dom_query2.dataAttr)(invalid),
334
- "data-focus": (0, import_dom_query2.dataAttr)(focused),
335
- id: dom.getLabelId(state.context),
336
- htmlFor: dom.getHiddenInputId(state.context, 0),
337
- onClick(event) {
338
- if (!interactive)
339
- return;
340
- event.preventDefault();
341
- dom.getFirstEl(state.context)?.focus();
342
- },
343
- style: {
344
- userSelect: "none"
345
- }
346
- }),
347
- rootProps: normalize.element({
348
- ...parts.root.attrs,
349
- "data-disabled": (0, import_dom_query2.dataAttr)(disabled),
350
- "data-orientation": state.context.orientation,
351
- "data-invalid": (0, import_dom_query2.dataAttr)(invalid),
352
- "data-focus": (0, import_dom_query2.dataAttr)(focused),
353
- id: dom.getRootId(state.context),
354
- dir: state.context.dir,
355
- style: dom.getRootStyle(state.context)
356
- }),
357
- valueTextProps: normalize.element({
358
- ...parts.valueText.attrs,
359
- dir: state.context.dir,
360
- "data-disabled": (0, import_dom_query2.dataAttr)(disabled),
361
- "data-orientation": state.context.orientation,
362
- "data-invalid": (0, import_dom_query2.dataAttr)(invalid),
363
- "data-focus": (0, import_dom_query2.dataAttr)(focused),
364
- id: dom.getValueTextId(state.context)
365
- }),
366
- trackProps: normalize.element({
367
- ...parts.track.attrs,
368
- dir: state.context.dir,
369
- id: dom.getTrackId(state.context),
370
- "data-disabled": (0, import_dom_query2.dataAttr)(disabled),
371
- "data-invalid": (0, import_dom_query2.dataAttr)(invalid),
372
- "data-orientation": state.context.orientation,
373
- "data-focus": (0, import_dom_query2.dataAttr)(focused),
374
- style: { position: "relative" }
375
- }),
376
- getThumbProps(props2) {
377
- const { index = 0, name } = props2;
378
- const value = sliderValue[index];
379
- const range = getRangeAtIndex(state.context, index);
380
- const valueText = state.context.getAriaValueText?.({ value, index });
381
- const _ariaLabel = Array.isArray(ariaLabel) ? ariaLabel[index] : ariaLabel;
382
- const _ariaLabelledBy = Array.isArray(ariaLabelledBy) ? ariaLabelledBy[index] : ariaLabelledBy;
383
- return normalize.element({
384
- ...parts.thumb.attrs,
385
- dir: state.context.dir,
386
- "data-index": index,
387
- "data-name": name,
388
- id: dom.getThumbId(state.context, index),
389
- "data-disabled": (0, import_dom_query2.dataAttr)(disabled),
390
- "data-orientation": state.context.orientation,
391
- "data-focus": (0, import_dom_query2.dataAttr)(focused && state.context.focusedIndex === index),
392
- draggable: false,
393
- "aria-disabled": (0, import_dom_query2.ariaAttr)(disabled),
394
- "aria-label": _ariaLabel,
395
- "aria-labelledby": _ariaLabelledBy ?? dom.getLabelId(state.context),
396
- "aria-orientation": state.context.orientation,
397
- "aria-valuemax": range.max,
398
- "aria-valuemin": range.min,
399
- "aria-valuenow": sliderValue[index],
400
- "aria-valuetext": valueText,
401
- role: "slider",
402
- tabIndex: disabled ? void 0 : 0,
403
- style: dom.getThumbStyle(state.context, index),
404
- onPointerDown(event) {
405
- if (!interactive)
406
- return;
407
- send({ type: "THUMB_POINTER_DOWN", index });
408
- event.stopPropagation();
409
- },
410
- onBlur() {
411
- if (!interactive)
412
- return;
413
- send("BLUR");
414
- },
415
- onFocus() {
416
- if (!interactive)
417
- return;
418
- send({ type: "FOCUS", index });
419
- },
420
- onKeyDown(event) {
421
- if (event.defaultPrevented)
422
- return;
423
- if (!interactive)
424
- return;
425
- const step = (0, import_dom_event2.getEventStep)(event) * state.context.step;
426
- const keyMap = {
427
- ArrowUp() {
428
- if (isHorizontal)
429
- return;
430
- send({ type: "ARROW_INC", step, src: "ArrowUp" });
431
- },
432
- ArrowDown() {
433
- if (isHorizontal)
434
- return;
435
- send({ type: "ARROW_DEC", step, src: "ArrowDown" });
436
- },
437
- ArrowLeft() {
438
- if (isVertical)
439
- return;
440
- send({ type: "ARROW_DEC", step, src: "ArrowLeft" });
441
- },
442
- ArrowRight() {
443
- if (isVertical)
444
- return;
445
- send({ type: "ARROW_INC", step, src: "ArrowRight" });
446
- },
447
- PageUp() {
448
- send({ type: "ARROW_INC", step, src: "PageUp" });
449
- },
450
- PageDown() {
451
- send({ type: "ARROW_DEC", step, src: "PageDown" });
452
- },
453
- Home() {
454
- send("HOME");
455
- },
456
- End() {
457
- send("END");
458
- }
459
- };
460
- const key = (0, import_dom_event2.getEventKey)(event, state.context);
461
- const exec = keyMap[key];
462
- if (exec) {
463
- exec(event);
464
- event.preventDefault();
465
- event.stopPropagation();
466
- }
467
- }
468
- });
469
- },
470
- getHiddenInputProps(props2) {
471
- const { index = 0, name } = props2;
472
- return normalize.input({
473
- name: name ?? (state.context.name ? state.context.name + (state.context.value.length > 1 ? "[]" : "") : void 0),
474
- form: state.context.form,
475
- type: "text",
476
- hidden: true,
477
- defaultValue: state.context.value[index],
478
- id: dom.getHiddenInputId(state.context, index)
479
- });
480
- },
481
- rangeProps: normalize.element({
482
- id: dom.getRangeId(state.context),
483
- ...parts.range.attrs,
484
- dir: state.context.dir,
485
- "data-focus": (0, import_dom_query2.dataAttr)(focused),
486
- "data-invalid": (0, import_dom_query2.dataAttr)(invalid),
487
- "data-disabled": (0, import_dom_query2.dataAttr)(disabled),
488
- "data-orientation": state.context.orientation,
489
- style: dom.getRangeStyle(state.context)
490
- }),
491
- controlProps: normalize.element({
492
- ...parts.control.attrs,
493
- dir: state.context.dir,
494
- id: dom.getControlId(state.context),
495
- "data-disabled": (0, import_dom_query2.dataAttr)(disabled),
496
- "data-orientation": state.context.orientation,
497
- "data-invalid": (0, import_dom_query2.dataAttr)(invalid),
498
- "data-focus": (0, import_dom_query2.dataAttr)(focused),
499
- style: dom.getControlStyle(),
500
- onPointerDown(event) {
501
- if (!interactive)
502
- return;
503
- const evt = (0, import_dom_event2.getNativeEvent)(event);
504
- if (!(0, import_dom_event2.isLeftClick)(evt) || (0, import_dom_event2.isModifierKey)(evt))
505
- return;
506
- const point = (0, import_dom_event2.getEventPoint)(evt);
507
- send({ type: "POINTER_DOWN", point });
508
- event.preventDefault();
509
- event.stopPropagation();
510
- }
511
- }),
512
- markerGroupProps: normalize.element({
513
- ...parts.markerGroup.attrs,
514
- role: "presentation",
515
- dir: state.context.dir,
516
- "aria-hidden": true,
517
- "data-orientation": state.context.orientation,
518
- style: dom.getMarkerGroupStyle()
519
- }),
520
- getMarkerProps(props2) {
521
- const style = dom.getMarkerStyle(state.context, props2.value);
522
- let markerState;
523
- const first = state.context.value[0];
524
- const last = state.context.value[state.context.value.length - 1];
525
- if (props2.value < first) {
526
- markerState = "under-value";
527
- } else if (props2.value > last) {
528
- markerState = "over-value";
529
- } else {
530
- markerState = "at-value";
531
- }
532
- return normalize.element({
533
- ...parts.marker.attrs,
534
- id: dom.getMarkerId(state.context, props2.value),
535
- role: "presentation",
536
- dir: state.context.dir,
537
- "data-orientation": state.context.orientation,
538
- "data-value": props2.value,
539
- "data-disabled": (0, import_dom_query2.dataAttr)(disabled),
540
- "data-state": markerState,
541
- style
542
- });
543
- }
544
- };
545
- }
546
-
547
- // src/slider.machine.ts
548
- var import_core = require("@zag-js/core");
549
- var import_dom_event3 = require("@zag-js/dom-event");
550
- var import_dom_query3 = require("@zag-js/dom-query");
551
- var import_element_size = require("@zag-js/element-size");
552
- var import_form_utils2 = require("@zag-js/form-utils");
553
- var import_numeric_range5 = require("@zag-js/numeric-range");
554
- var import_utils = require("@zag-js/utils");
555
- var isEqualSize = (a, b) => {
556
- return a?.width === b?.width && a?.height === b?.height;
557
- };
558
- function machine(userContext) {
559
- const ctx = (0, import_utils.compact)(userContext);
560
- return (0, import_core.createMachine)(
561
- {
562
- id: "slider",
563
- initial: "idle",
564
- context: {
565
- thumbSize: null,
566
- thumbAlignment: "contain",
567
- min: 0,
568
- max: 100,
569
- step: 1,
570
- value: [0],
571
- origin: "start",
572
- orientation: "horizontal",
573
- dir: "ltr",
574
- minStepsBetweenThumbs: 0,
575
- disabled: false,
576
- ...ctx,
577
- focusedIndex: -1,
578
- fieldsetDisabled: false
579
- },
580
- computed: {
581
- isHorizontal: (ctx2) => ctx2.orientation === "horizontal",
582
- isVertical: (ctx2) => ctx2.orientation === "vertical",
583
- isRtl: (ctx2) => ctx2.orientation === "horizontal" && ctx2.dir === "rtl",
584
- isDisabled: (ctx2) => !!ctx2.disabled || ctx2.fieldsetDisabled,
585
- isInteractive: (ctx2) => !(ctx2.readOnly || ctx2.isDisabled),
586
- hasMeasuredThumbSize: (ctx2) => ctx2.thumbSize != null,
587
- valuePercent(ctx2) {
588
- return ctx2.value.map((value) => 100 * (0, import_numeric_range5.getValuePercent)(value, ctx2.min, ctx2.max));
589
- }
590
- },
591
- watch: {
592
- value: ["syncInputElements"]
593
- },
594
- entry: ["coarseValue"],
595
- activities: ["trackFormControlState", "trackThumbsSize"],
596
- on: {
597
- SET_VALUE: [
598
- {
599
- guard: "hasIndex",
600
- actions: "setValueAtIndex"
601
- },
602
- { actions: "setValue" }
603
- ],
604
- INCREMENT: {
605
- actions: "incrementThumbAtIndex"
606
- },
607
- DECREMENT: {
608
- actions: "decrementThumbAtIndex"
609
- }
610
- },
611
- states: {
612
- idle: {
613
- on: {
614
- POINTER_DOWN: {
615
- target: "dragging",
616
- actions: ["setClosestThumbIndex", "setPointerValue", "focusActiveThumb"]
617
- },
618
- FOCUS: {
619
- target: "focus",
620
- actions: "setFocusedIndex"
621
- },
622
- THUMB_POINTER_DOWN: {
623
- target: "dragging",
624
- actions: ["setFocusedIndex", "focusActiveThumb"]
625
- }
626
- }
627
- },
628
- focus: {
629
- entry: "focusActiveThumb",
630
- on: {
631
- POINTER_DOWN: {
632
- target: "dragging",
633
- actions: ["setClosestThumbIndex", "setPointerValue", "focusActiveThumb"]
634
- },
635
- THUMB_POINTER_DOWN: {
636
- target: "dragging",
637
- actions: ["setFocusedIndex", "focusActiveThumb"]
638
- },
639
- ARROW_DEC: {
640
- actions: ["decrementThumbAtIndex", "invokeOnChangeEnd"]
641
- },
642
- ARROW_INC: {
643
- actions: ["incrementThumbAtIndex", "invokeOnChangeEnd"]
644
- },
645
- HOME: {
646
- actions: ["setFocusedThumbToMin", "invokeOnChangeEnd"]
647
- },
648
- END: {
649
- actions: ["setFocusedThumbToMax", "invokeOnChangeEnd"]
650
- },
651
- BLUR: {
652
- target: "idle",
653
- actions: "clearFocusedIndex"
654
- }
655
- }
656
- },
657
- dragging: {
658
- entry: "focusActiveThumb",
659
- activities: "trackPointerMove",
660
- on: {
661
- POINTER_UP: {
662
- target: "focus",
663
- actions: "invokeOnChangeEnd"
664
- },
665
- POINTER_MOVE: {
666
- actions: "setPointerValue"
667
- }
668
- }
669
- }
670
- }
671
- },
672
- {
673
- guards: {
674
- hasIndex: (_ctx, evt) => evt.index != null
675
- },
676
- activities: {
677
- trackFormControlState(ctx2, _evt, { initialContext }) {
678
- return (0, import_form_utils2.trackFormControl)(dom.getRootEl(ctx2), {
679
- onFieldsetDisabledChange(disabled) {
680
- ctx2.fieldsetDisabled = disabled;
681
- },
682
- onFormReset() {
683
- set.value(ctx2, initialContext.value);
684
- }
685
- });
686
- },
687
- trackPointerMove(ctx2, _evt, { send }) {
688
- return (0, import_dom_event3.trackPointerMove)(dom.getDoc(ctx2), {
689
- onPointerMove(info) {
690
- send({ type: "POINTER_MOVE", point: info.point });
691
- },
692
- onPointerUp() {
693
- send("POINTER_UP");
694
- }
695
- });
696
- },
697
- trackThumbsSize(ctx2) {
698
- if (ctx2.thumbAlignment !== "contain" || ctx2.thumbSize)
699
- return;
700
- return (0, import_element_size.trackElementsSize)({
701
- getNodes: () => dom.getElements(ctx2),
702
- observeMutation: true,
703
- callback(size) {
704
- if (!size || isEqualSize(ctx2.thumbSize, size))
705
- return;
706
- ctx2.thumbSize = size;
707
- }
708
- });
709
- }
710
- },
711
- actions: {
712
- syncInputElements(ctx2) {
713
- ctx2.value.forEach((value, index) => {
714
- const inputEl = dom.getHiddenInputEl(ctx2, index);
715
- dom.setValue(inputEl, value);
716
- });
717
- },
718
- invokeOnChangeEnd(ctx2) {
719
- ctx2.onValueChangeEnd?.({ value: ctx2.value });
720
- },
721
- setClosestThumbIndex(ctx2, evt) {
722
- const pointValue = dom.getValueFromPoint(ctx2, evt.point);
723
- if (pointValue == null)
724
- return;
725
- const focusedIndex = getClosestIndex(ctx2, pointValue);
726
- set.focusedIndex(ctx2, focusedIndex);
727
- },
728
- setFocusedIndex(ctx2, evt) {
729
- set.focusedIndex(ctx2, evt.index);
730
- },
731
- clearFocusedIndex(ctx2) {
732
- set.focusedIndex(ctx2, -1);
733
- },
734
- setPointerValue(ctx2, evt) {
735
- const pointerValue = dom.getValueFromPoint(ctx2, evt.point);
736
- if (pointerValue == null)
737
- return;
738
- const value = constrainValue(ctx2, pointerValue, ctx2.focusedIndex);
739
- set.valueAtIndex(ctx2, ctx2.focusedIndex, value);
740
- },
741
- focusActiveThumb(ctx2) {
742
- (0, import_dom_query3.raf)(() => {
743
- const thumbEl = dom.getThumbEl(ctx2, ctx2.focusedIndex);
744
- thumbEl?.focus({ preventScroll: true });
745
- });
746
- },
747
- decrementThumbAtIndex(ctx2, evt) {
748
- const value = decrement(ctx2, evt.index, evt.step);
749
- set.value(ctx2, value);
750
- },
751
- incrementThumbAtIndex(ctx2, evt) {
752
- const value = increment(ctx2, evt.index, evt.step);
753
- set.value(ctx2, value);
754
- },
755
- setFocusedThumbToMin(ctx2) {
756
- const { min } = getRangeAtIndex(ctx2, ctx2.focusedIndex);
757
- set.valueAtIndex(ctx2, ctx2.focusedIndex, min);
758
- },
759
- setFocusedThumbToMax(ctx2) {
760
- const { max } = getRangeAtIndex(ctx2, ctx2.focusedIndex);
761
- set.valueAtIndex(ctx2, ctx2.focusedIndex, max);
762
- },
763
- coarseValue(ctx2) {
764
- const value = normalizeValues(ctx2, ctx2.value);
765
- set.value(ctx2, value);
766
- },
767
- setValueAtIndex(ctx2, evt) {
768
- const value = constrainValue(ctx2, evt.value, evt.index);
769
- set.valueAtIndex(ctx2, evt.index, value);
770
- },
771
- setValue(ctx2, evt) {
772
- const value = normalizeValues(ctx2, evt.value);
773
- set.value(ctx2, value);
774
- }
775
- }
776
- }
777
- );
778
- }
779
- var invoke = {
780
- change: (ctx) => {
781
- ctx.onValueChange?.({
782
- value: Array.from(ctx.value)
783
- });
784
- dom.dispatchChangeEvent(ctx);
785
- },
786
- focusChange: (ctx) => {
787
- ctx.onFocusChange?.({
788
- value: Array.from(ctx.value),
789
- focusedIndex: ctx.focusedIndex
790
- });
791
- }
792
- };
793
- var set = {
794
- valueAtIndex: (ctx, index, value) => {
795
- if ((0, import_utils.isEqual)(ctx.value[index], value))
796
- return;
797
- ctx.value[index] = value;
798
- invoke.change(ctx);
799
- },
800
- value: (ctx, value) => {
801
- if ((0, import_utils.isEqual)(ctx.value, value))
802
- return;
803
- assignArray(ctx.value, value);
804
- invoke.change(ctx);
805
- },
806
- focusedIndex: (ctx, index) => {
807
- if ((0, import_utils.isEqual)(ctx.focusedIndex, index))
808
- return;
809
- ctx.focusedIndex = index;
810
- invoke.focusChange(ctx);
811
- }
812
- };
813
-
814
- // src/slider.props.ts
815
- var import_types = require("@zag-js/types");
816
- var import_utils2 = require("@zag-js/utils");
817
- var props = (0, import_types.createProps)()([
818
- "aria-label",
819
- "aria-labelledby",
820
- "dir",
821
- "disabled",
822
- "form",
823
- "getAriaValueText",
824
- "getRootNode",
825
- "id",
826
- "ids",
827
- "invalid",
828
- "max",
829
- "min",
830
- "minStepsBetweenThumbs",
831
- "name",
832
- "onFocusChange",
833
- "onValueChange",
834
- "onValueChangeEnd",
835
- "orientation",
836
- "origin",
837
- "readOnly",
838
- "step",
839
- "thumbAlignment",
840
- "thumbAlignment",
841
- "thumbSize",
842
- "value"
843
- ]);
844
- var splitProps = (0, import_utils2.createSplitProps)(props);
845
- var thumbProps = (0, import_types.createProps)()(["index", "name"]);
846
- var splitThumbProps = (0, import_utils2.createSplitProps)(thumbProps);
847
- // Annotate the CommonJS export names for ESM import in node:
848
- 0 && (module.exports = {
849
- anatomy,
850
- connect,
851
- machine,
852
- props,
853
- splitProps,
854
- splitThumbProps,
855
- thumbProps
856
- });
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});
857
2
  //# sourceMappingURL=index.js.map