@zag-js/number-input 0.1.9 → 0.1.10

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.d.ts CHANGED
@@ -1,4 +1,3 @@
1
1
  export { connect } from "./number-input.connect";
2
2
  export { machine } from "./number-input.machine";
3
3
  export type { UserDefinedContext as Context } from "./number-input.types";
4
- //# sourceMappingURL=index.d.ts.map
package/dist/index.js CHANGED
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  var __defProp = Object.defineProperty;
2
3
  var __defProps = Object.defineProperties;
3
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -48,15 +49,7 @@ var dataAttr = (guard) => {
48
49
  var ariaAttr = (guard) => {
49
50
  return guard ? "true" : void 0;
50
51
  };
51
- function raf(fn) {
52
- const id = globalThis.requestAnimationFrame(fn);
53
- return function cleanup() {
54
- globalThis.cancelAnimationFrame(id);
55
- };
56
- }
57
- var isDom = () => typeof window !== "undefined";
58
52
  var hasProp = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop);
59
- var isTouchDevice = isDom() && !!navigator.maxTouchPoints;
60
53
  var runIfFn = (v, ...a) => {
61
54
  const res = typeof v === "function" ? v(...a) : v;
62
55
  return res != null ? res : void 0;
@@ -64,72 +57,19 @@ var runIfFn = (v, ...a) => {
64
57
  var noop = () => {
65
58
  };
66
59
  var pipe = (...fns) => (v) => fns.reduce((a, b) => b(a), v);
67
- function getListenerElements() {
68
- ;
69
- globalThis.__listenerElements__ = globalThis.__listenerElements__ || /* @__PURE__ */ new Map();
70
- return globalThis.__listenerElements__;
71
- }
72
- function getListenerCache() {
73
- ;
74
- globalThis.__listenerCache__ = globalThis.__listenerCache__ || /* @__PURE__ */ new Map();
75
- return globalThis.__listenerCache__;
76
- }
77
- function addGlobalEventListener(node, type, handler, options) {
78
- var _a;
79
- if (!node)
80
- return noop;
81
- const hash = JSON.stringify({ type, options });
82
- const listenerElements = getListenerElements();
83
- const listenerCache = getListenerCache();
84
- const group = listenerElements.get(node);
85
- if (!listenerElements.has(node)) {
86
- const group2 = /* @__PURE__ */ new Map([[hash, /* @__PURE__ */ new Set([handler])]]);
87
- listenerElements.set(node, group2);
88
- } else if (group == null ? void 0 : group.has(hash)) {
89
- (_a = group == null ? void 0 : group.get(hash)) == null ? void 0 : _a.add(handler);
90
- } else {
91
- group == null ? void 0 : group.set(hash, /* @__PURE__ */ new Set([handler]));
92
- }
93
- function attach(node2) {
94
- var _a2, _b;
95
- function listener(event) {
96
- var _a3;
97
- const group2 = listenerElements.get(node2);
98
- (_a3 = group2 == null ? void 0 : group2.get(hash)) == null ? void 0 : _a3.forEach((fn) => fn(event));
99
- }
100
- if (!(listenerCache == null ? void 0 : listenerCache.has(node2))) {
101
- listenerCache.set(node2, /* @__PURE__ */ new Map([[hash, listener]]));
102
- node2.addEventListener(type, listener, options);
103
- return;
104
- }
105
- if (!((_a2 = listenerCache == null ? void 0 : listenerCache.get(node2)) == null ? void 0 : _a2.has(hash))) {
106
- (_b = listenerCache.get(node2)) == null ? void 0 : _b.set(hash, listener);
107
- node2.addEventListener(type, listener, options);
108
- }
109
- }
110
- attach(node);
111
- return function remove() {
112
- var _a2, _b, _c, _d;
113
- if (!listenerElements.has(node))
114
- return;
115
- const group2 = listenerElements.get(node);
116
- (_a2 = group2 == null ? void 0 : group2.get(hash)) == null ? void 0 : _a2.delete(handler);
117
- if (((_b = group2 == null ? void 0 : group2.get(hash)) == null ? void 0 : _b.size) === 0) {
118
- const listener = (_c = listenerCache.get(node)) == null ? void 0 : _c.get(hash);
119
- node.removeEventListener(type, listener, options);
120
- group2 == null ? void 0 : group2.delete(hash);
121
- (_d = listenerCache.get(node)) == null ? void 0 : _d.delete(hash);
122
- if ((group2 == null ? void 0 : group2.size) === 0) {
123
- listenerElements.delete(node);
124
- listenerCache.delete(node);
125
- }
126
- }
127
- };
128
- }
129
60
  var isRef = (v) => hasProp(v, "current");
130
- function addDomEvent(target, event, listener, options) {
61
+ function addDomEvent(target, eventName, handler, options) {
131
62
  const node = isRef(target) ? target.current : runIfFn(target);
132
- return addGlobalEventListener(node, event, listener, options);
63
+ node == null ? void 0 : node.addEventListener(eventName, handler, options);
64
+ return () => {
65
+ node == null ? void 0 : node.removeEventListener(eventName, handler, options);
66
+ };
67
+ }
68
+ function raf(fn) {
69
+ const id = globalThis.requestAnimationFrame(fn);
70
+ return function cleanup() {
71
+ globalThis.cancelAnimationFrame(id);
72
+ };
133
73
  }
134
74
  var MAX_Z_INDEX = 2147483647;
135
75
  function getNativeEvent(e) {
@@ -162,30 +102,6 @@ function getEventStep(event) {
162
102
  return isSkipKey ? 10 : 1;
163
103
  }
164
104
  }
165
- function itemById(v, id) {
166
- return v.find((node) => node.id === id);
167
- }
168
- function indexOfId(v, id) {
169
- const item = itemById(v, id);
170
- return item ? v.indexOf(item) : -1;
171
- }
172
- var getValueText = (item) => {
173
- var _a, _b;
174
- return (_b = (_a = item.dataset.valuetext) != null ? _a : item.textContent) != null ? _b : "";
175
- };
176
- var match = (valueText, query2) => valueText.toLowerCase().startsWith(query2.toLowerCase());
177
- var wrap = (v, idx) => {
178
- return v.map((_, index) => v[(Math.max(idx, 0) + index) % v.length]);
179
- };
180
- function findByText(v, text, currentId) {
181
- const index = currentId ? indexOfId(v, currentId) : -1;
182
- let items = currentId ? wrap(v, index) : v;
183
- const isSingleKey = text.length === 1;
184
- if (isSingleKey) {
185
- items = items.filter((item) => item.id !== currentId);
186
- }
187
- return items.find((item) => match(getValueText(item), text));
188
- }
189
105
  function addPointerlockChangeListener(doc, fn) {
190
106
  return addDomEvent(doc, "pointerlockchange", fn, false);
191
107
  }
@@ -226,38 +142,10 @@ function requestPointerLock(doc, handlers = {}) {
226
142
  exit();
227
143
  };
228
144
  }
229
- function findByTypeahead(_items, options) {
230
- const { state: state2, activeId, key, timeout = 350 } = options;
231
- const search = state2.keysSoFar + key;
232
- const isRepeated = search.length > 1 && Array.from(search).every((char) => char === search[0]);
233
- const query2 = isRepeated ? search[0] : search;
234
- let items = _items.slice();
235
- const next = findByText(items, query2, activeId);
236
- function cleanup() {
237
- clearTimeout(state2.timer);
238
- state2.timer = -1;
239
- }
240
- function update(value) {
241
- state2.keysSoFar = value;
242
- cleanup();
243
- if (value !== "") {
244
- state2.timer = +setTimeout(() => {
245
- update("");
246
- cleanup();
247
- }, timeout);
248
- }
249
- }
250
- update(search);
251
- return next;
252
- }
253
- findByTypeahead.defaultOptions = {
254
- keysSoFar: "",
255
- timer: -1
256
- };
257
145
 
258
146
  // ../../utilities/number/dist/index.mjs
259
147
  var __pow = Math.pow;
260
- function wrap2(num, max) {
148
+ function wrap(num, max) {
261
149
  return (num % max + max) % max;
262
150
  }
263
151
  function roundToDevicePixel(num) {
@@ -321,11 +209,9 @@ function decimalOperation(a, op, b) {
321
209
  var nf = new Intl.NumberFormat("en-US", { style: "decimal", maximumFractionDigits: 20 });
322
210
 
323
211
  // ../../utilities/rect/dist/index.mjs
324
- var isDom2 = () => typeof window !== "undefined";
325
212
  var isArray = (v) => Array.isArray(v);
326
213
  var isObject = (v) => !(v == null || typeof v !== "object" || isArray(v));
327
214
  var hasProp2 = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop);
328
- var isTouchDevice2 = isDom2() && !!navigator.maxTouchPoints;
329
215
  var isTouchEvent = (v) => isObject(v) && hasProp2(v, "touches");
330
216
  var fallback = { pageX: 0, pageY: 0, clientX: 0, clientY: 0 };
331
217
  function getEventPoint(e, t = "page") {
@@ -344,20 +230,20 @@ function createNormalizer(fn) {
344
230
  var normalizeProp = createNormalizer((v) => v);
345
231
 
346
232
  // ../../utilities/core/dist/index.mjs
347
- var isDom3 = () => typeof window !== "undefined";
233
+ var isDom = () => typeof window !== "undefined";
348
234
  function getPlatform() {
349
235
  var _a;
350
236
  const agent = navigator.userAgentData;
351
237
  return (_a = agent == null ? void 0 : agent.platform) != null ? _a : navigator.platform;
352
238
  }
353
- var pt = (v) => isDom3() && v.test(getPlatform());
354
- var vn = (v) => isDom3() && v.test(navigator.vendor);
355
- var isTouchDevice3 = isDom3() && !!navigator.maxTouchPoints;
356
- var isMac = () => pt(/^Mac/) && !isTouchDevice3;
239
+ var pt = (v) => isDom() && v.test(getPlatform());
240
+ var vn = (v) => isDom() && v.test(navigator.vendor);
241
+ var isTouchDevice = () => isDom() && !!navigator.maxTouchPoints;
242
+ var isMac = () => pt(/^Mac/) && !isTouchDevice;
357
243
  var isSafari = () => isApple() && vn(/apple/i);
358
244
  var isApple = () => pt(/mac|iphone|ipad|ipod/i);
359
245
  var isIos = () => isApple() && !isMac();
360
- var supportsPointerEvent = () => isDom3() && window.onpointerdown === null;
246
+ var supportsPointerEvent = () => isDom() && window.onpointerdown === null;
361
247
  var isLeftClick = (v) => v.button === 0;
362
248
  var isModifiedEvent = (v) => v.ctrlKey || v.altKey || v.metaKey;
363
249
  var pipe2 = (...fns) => (v) => fns.reduce((a, b) => b(a), v);
@@ -421,7 +307,7 @@ var dom = {
421
307
  const win = dom.getWin(ctx);
422
308
  const width = win.innerWidth;
423
309
  const half = roundToDevicePixel(7.5);
424
- point.x = wrap2(point.x + half, width) - half;
310
+ point.x = wrap(point.x + half, width) - half;
425
311
  return { hint, point };
426
312
  },
427
313
  createVirtualCursor(ctx) {
@@ -1069,4 +955,3 @@ function machine(ctx = {}) {
1069
955
  hookSync: true
1070
956
  });
1071
957
  }
1072
- //# sourceMappingURL=index.js.map
package/dist/index.mjs CHANGED
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  var __defProp = Object.defineProperty;
2
3
  var __defProps = Object.defineProperties;
3
4
  var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
@@ -25,15 +26,7 @@ var dataAttr = (guard) => {
25
26
  var ariaAttr = (guard) => {
26
27
  return guard ? "true" : void 0;
27
28
  };
28
- function raf(fn) {
29
- const id = globalThis.requestAnimationFrame(fn);
30
- return function cleanup() {
31
- globalThis.cancelAnimationFrame(id);
32
- };
33
- }
34
- var isDom = () => typeof window !== "undefined";
35
29
  var hasProp = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop);
36
- var isTouchDevice = isDom() && !!navigator.maxTouchPoints;
37
30
  var runIfFn = (v, ...a) => {
38
31
  const res = typeof v === "function" ? v(...a) : v;
39
32
  return res != null ? res : void 0;
@@ -41,72 +34,19 @@ var runIfFn = (v, ...a) => {
41
34
  var noop = () => {
42
35
  };
43
36
  var pipe = (...fns) => (v) => fns.reduce((a, b) => b(a), v);
44
- function getListenerElements() {
45
- ;
46
- globalThis.__listenerElements__ = globalThis.__listenerElements__ || /* @__PURE__ */ new Map();
47
- return globalThis.__listenerElements__;
48
- }
49
- function getListenerCache() {
50
- ;
51
- globalThis.__listenerCache__ = globalThis.__listenerCache__ || /* @__PURE__ */ new Map();
52
- return globalThis.__listenerCache__;
53
- }
54
- function addGlobalEventListener(node, type, handler, options) {
55
- var _a;
56
- if (!node)
57
- return noop;
58
- const hash = JSON.stringify({ type, options });
59
- const listenerElements = getListenerElements();
60
- const listenerCache = getListenerCache();
61
- const group = listenerElements.get(node);
62
- if (!listenerElements.has(node)) {
63
- const group2 = /* @__PURE__ */ new Map([[hash, /* @__PURE__ */ new Set([handler])]]);
64
- listenerElements.set(node, group2);
65
- } else if (group == null ? void 0 : group.has(hash)) {
66
- (_a = group == null ? void 0 : group.get(hash)) == null ? void 0 : _a.add(handler);
67
- } else {
68
- group == null ? void 0 : group.set(hash, /* @__PURE__ */ new Set([handler]));
69
- }
70
- function attach(node2) {
71
- var _a2, _b;
72
- function listener(event) {
73
- var _a3;
74
- const group2 = listenerElements.get(node2);
75
- (_a3 = group2 == null ? void 0 : group2.get(hash)) == null ? void 0 : _a3.forEach((fn) => fn(event));
76
- }
77
- if (!(listenerCache == null ? void 0 : listenerCache.has(node2))) {
78
- listenerCache.set(node2, /* @__PURE__ */ new Map([[hash, listener]]));
79
- node2.addEventListener(type, listener, options);
80
- return;
81
- }
82
- if (!((_a2 = listenerCache == null ? void 0 : listenerCache.get(node2)) == null ? void 0 : _a2.has(hash))) {
83
- (_b = listenerCache.get(node2)) == null ? void 0 : _b.set(hash, listener);
84
- node2.addEventListener(type, listener, options);
85
- }
86
- }
87
- attach(node);
88
- return function remove() {
89
- var _a2, _b, _c, _d;
90
- if (!listenerElements.has(node))
91
- return;
92
- const group2 = listenerElements.get(node);
93
- (_a2 = group2 == null ? void 0 : group2.get(hash)) == null ? void 0 : _a2.delete(handler);
94
- if (((_b = group2 == null ? void 0 : group2.get(hash)) == null ? void 0 : _b.size) === 0) {
95
- const listener = (_c = listenerCache.get(node)) == null ? void 0 : _c.get(hash);
96
- node.removeEventListener(type, listener, options);
97
- group2 == null ? void 0 : group2.delete(hash);
98
- (_d = listenerCache.get(node)) == null ? void 0 : _d.delete(hash);
99
- if ((group2 == null ? void 0 : group2.size) === 0) {
100
- listenerElements.delete(node);
101
- listenerCache.delete(node);
102
- }
103
- }
104
- };
105
- }
106
37
  var isRef = (v) => hasProp(v, "current");
107
- function addDomEvent(target, event, listener, options) {
38
+ function addDomEvent(target, eventName, handler, options) {
108
39
  const node = isRef(target) ? target.current : runIfFn(target);
109
- return addGlobalEventListener(node, event, listener, options);
40
+ node == null ? void 0 : node.addEventListener(eventName, handler, options);
41
+ return () => {
42
+ node == null ? void 0 : node.removeEventListener(eventName, handler, options);
43
+ };
44
+ }
45
+ function raf(fn) {
46
+ const id = globalThis.requestAnimationFrame(fn);
47
+ return function cleanup() {
48
+ globalThis.cancelAnimationFrame(id);
49
+ };
110
50
  }
111
51
  var MAX_Z_INDEX = 2147483647;
112
52
  function getNativeEvent(e) {
@@ -139,30 +79,6 @@ function getEventStep(event) {
139
79
  return isSkipKey ? 10 : 1;
140
80
  }
141
81
  }
142
- function itemById(v, id) {
143
- return v.find((node) => node.id === id);
144
- }
145
- function indexOfId(v, id) {
146
- const item = itemById(v, id);
147
- return item ? v.indexOf(item) : -1;
148
- }
149
- var getValueText = (item) => {
150
- var _a, _b;
151
- return (_b = (_a = item.dataset.valuetext) != null ? _a : item.textContent) != null ? _b : "";
152
- };
153
- var match = (valueText, query2) => valueText.toLowerCase().startsWith(query2.toLowerCase());
154
- var wrap = (v, idx) => {
155
- return v.map((_, index) => v[(Math.max(idx, 0) + index) % v.length]);
156
- };
157
- function findByText(v, text, currentId) {
158
- const index = currentId ? indexOfId(v, currentId) : -1;
159
- let items = currentId ? wrap(v, index) : v;
160
- const isSingleKey = text.length === 1;
161
- if (isSingleKey) {
162
- items = items.filter((item) => item.id !== currentId);
163
- }
164
- return items.find((item) => match(getValueText(item), text));
165
- }
166
82
  function addPointerlockChangeListener(doc, fn) {
167
83
  return addDomEvent(doc, "pointerlockchange", fn, false);
168
84
  }
@@ -203,38 +119,10 @@ function requestPointerLock(doc, handlers = {}) {
203
119
  exit();
204
120
  };
205
121
  }
206
- function findByTypeahead(_items, options) {
207
- const { state: state2, activeId, key, timeout = 350 } = options;
208
- const search = state2.keysSoFar + key;
209
- const isRepeated = search.length > 1 && Array.from(search).every((char) => char === search[0]);
210
- const query2 = isRepeated ? search[0] : search;
211
- let items = _items.slice();
212
- const next = findByText(items, query2, activeId);
213
- function cleanup() {
214
- clearTimeout(state2.timer);
215
- state2.timer = -1;
216
- }
217
- function update(value) {
218
- state2.keysSoFar = value;
219
- cleanup();
220
- if (value !== "") {
221
- state2.timer = +setTimeout(() => {
222
- update("");
223
- cleanup();
224
- }, timeout);
225
- }
226
- }
227
- update(search);
228
- return next;
229
- }
230
- findByTypeahead.defaultOptions = {
231
- keysSoFar: "",
232
- timer: -1
233
- };
234
122
 
235
123
  // ../../utilities/number/dist/index.mjs
236
124
  var __pow = Math.pow;
237
- function wrap2(num, max) {
125
+ function wrap(num, max) {
238
126
  return (num % max + max) % max;
239
127
  }
240
128
  function roundToDevicePixel(num) {
@@ -298,11 +186,9 @@ function decimalOperation(a, op, b) {
298
186
  var nf = new Intl.NumberFormat("en-US", { style: "decimal", maximumFractionDigits: 20 });
299
187
 
300
188
  // ../../utilities/rect/dist/index.mjs
301
- var isDom2 = () => typeof window !== "undefined";
302
189
  var isArray = (v) => Array.isArray(v);
303
190
  var isObject = (v) => !(v == null || typeof v !== "object" || isArray(v));
304
191
  var hasProp2 = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop);
305
- var isTouchDevice2 = isDom2() && !!navigator.maxTouchPoints;
306
192
  var isTouchEvent = (v) => isObject(v) && hasProp2(v, "touches");
307
193
  var fallback = { pageX: 0, pageY: 0, clientX: 0, clientY: 0 };
308
194
  function getEventPoint(e, t = "page") {
@@ -321,20 +207,20 @@ function createNormalizer(fn) {
321
207
  var normalizeProp = createNormalizer((v) => v);
322
208
 
323
209
  // ../../utilities/core/dist/index.mjs
324
- var isDom3 = () => typeof window !== "undefined";
210
+ var isDom = () => typeof window !== "undefined";
325
211
  function getPlatform() {
326
212
  var _a;
327
213
  const agent = navigator.userAgentData;
328
214
  return (_a = agent == null ? void 0 : agent.platform) != null ? _a : navigator.platform;
329
215
  }
330
- var pt = (v) => isDom3() && v.test(getPlatform());
331
- var vn = (v) => isDom3() && v.test(navigator.vendor);
332
- var isTouchDevice3 = isDom3() && !!navigator.maxTouchPoints;
333
- var isMac = () => pt(/^Mac/) && !isTouchDevice3;
216
+ var pt = (v) => isDom() && v.test(getPlatform());
217
+ var vn = (v) => isDom() && v.test(navigator.vendor);
218
+ var isTouchDevice = () => isDom() && !!navigator.maxTouchPoints;
219
+ var isMac = () => pt(/^Mac/) && !isTouchDevice;
334
220
  var isSafari = () => isApple() && vn(/apple/i);
335
221
  var isApple = () => pt(/mac|iphone|ipad|ipod/i);
336
222
  var isIos = () => isApple() && !isMac();
337
- var supportsPointerEvent = () => isDom3() && window.onpointerdown === null;
223
+ var supportsPointerEvent = () => isDom() && window.onpointerdown === null;
338
224
  var isLeftClick = (v) => v.button === 0;
339
225
  var isModifiedEvent = (v) => v.ctrlKey || v.altKey || v.metaKey;
340
226
  var pipe2 = (...fns) => (v) => fns.reduce((a, b) => b(a), v);
@@ -398,7 +284,7 @@ var dom = {
398
284
  const win = dom.getWin(ctx);
399
285
  const width = win.innerWidth;
400
286
  const half = roundToDevicePixel(7.5);
401
- point.x = wrap2(point.x + half, width) - half;
287
+ point.x = wrap(point.x + half, width) - half;
402
288
  return { hint, point };
403
289
  },
404
290
  createVirtualCursor(ctx) {
@@ -1050,4 +936,3 @@ export {
1050
936
  connect,
1051
937
  machine
1052
938
  };
1053
- //# sourceMappingURL=index.mjs.map
@@ -20,4 +20,3 @@ export declare function connect<T extends PropTypes = ReactPropTypes>(state: Sta
20
20
  incrementButtonProps: T["button"];
21
21
  scrubberProps: T["element"];
22
22
  };
23
- //# sourceMappingURL=number-input.connect.d.ts.map
@@ -24,4 +24,3 @@ export declare const dom: {
24
24
  };
25
25
  createVirtualCursor(ctx: Ctx): void;
26
26
  };
27
- //# sourceMappingURL=number-input.dom.d.ts.map
@@ -1,3 +1,2 @@
1
1
  import type { MachineContext, MachineState, UserDefinedContext } from "./number-input.types";
2
2
  export declare function machine(ctx?: UserDefinedContext): import("@zag-js/core").Machine<MachineContext, MachineState, import("@zag-js/core").StateMachine.AnyEventObject>;
3
- //# sourceMappingURL=number-input.machine.d.ts.map
@@ -196,4 +196,3 @@ export declare type MachineState = {
196
196
  export declare type State = S.State<MachineContext, MachineState>;
197
197
  export declare type Send = S.Send<S.AnyEventObject>;
198
198
  export {};
199
- //# sourceMappingURL=number-input.types.d.ts.map
@@ -11,4 +11,3 @@ export declare const utils: {
11
11
  format: (ctx: Ctx, value: string | number) => string | number;
12
12
  round: (ctx: Ctx) => string;
13
13
  };
14
- //# sourceMappingURL=number-input.utils.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zag-js/number-input",
3
- "version": "0.1.9",
3
+ "version": "0.1.10",
4
4
  "description": "Core logic for the number-input widget implemented as a state machine",
5
5
  "keywords": [
6
6
  "js",
@@ -30,10 +30,10 @@
30
30
  },
31
31
  "dependencies": {
32
32
  "@zag-js/core": "0.1.6",
33
- "@zag-js/dom-utils": "0.1.4",
33
+ "@zag-js/dom-utils": "0.1.5",
34
34
  "@zag-js/number-utils": "0.1.2",
35
35
  "@zag-js/rect-utils": "0.1.2",
36
- "@zag-js/types": "0.1.2",
36
+ "@zag-js/types": "0.2.0",
37
37
  "@zag-js/utils": "0.1.2"
38
38
  },
39
39
  "scripts": {
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAChD,YAAY,EAAE,kBAAkB,IAAI,OAAO,EAAE,MAAM,sBAAsB,CAAA"}
package/dist/index.js.map DELETED
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/index.ts", "../../../utilities/dom/src/attrs.ts", "../../../utilities/dom/src/computed-style.ts", "../../../utilities/dom/src/next-tick.ts", "../../../utilities/dom/src/auto-resize.ts", "../../../utilities/core/src/array.ts", "../../../utilities/core/src/guard.ts", "../../../utilities/core/src/platform.ts", "../../../utilities/core/src/events.ts", "../../../utilities/core/src/functions.ts", "../../../utilities/core/src/warning.ts", "../../../utilities/dom/src/global-listener.ts", "../../../utilities/dom/src/listener.ts", "../../../utilities/dom/src/body-pointer-event.ts", "../../../utilities/dom/src/constants.ts", "../../../utilities/dom/src/query.ts", "../../../utilities/dom/src/event.ts", "../../../utilities/dom/src/fire-event.ts", "../../../utilities/dom/src/focus-event.ts", "../../../utilities/dom/src/focusable.ts", "../../../utilities/dom/src/mutation-observer.ts", "../../../utilities/dom/src/form.ts", "../../../utilities/dom/src/input-event.ts", "../../../utilities/dom/src/keyboard-event.ts", "../../../utilities/dom/src/visually-hidden.ts", "../../../utilities/dom/src/live-region.ts", "../../../utilities/dom/src/nodelist.ts", "../../../utilities/dom/src/text-selection.ts", "../../../utilities/dom/src/pointer-event.ts", "../../../utilities/dom/src/pointerlock.ts", "../../../utilities/dom/src/rect-observer.ts", "../../../utilities/dom/src/scrollable.ts", "../../../utilities/dom/src/typeahead.ts", "../../../utilities/dom/src/visibility-event.ts", "../../../utilities/dom/src/visual-viewport.ts", "../../../utilities/dom/src/wait.ts", "../../../utilities/number/src/number.ts", "../../../utilities/number/src/rangy.ts", "../../../utilities/number/src/number-format.ts", "../../../utilities/number/src/transform.ts", "../../../utilities/rect/src/rect.ts", "../../../utilities/rect/src/computed-style.ts", "../../../utilities/rect/src/from-element.ts", "../../../utilities/core/src/array.ts", "../../../utilities/core/src/guard.ts", "../../../utilities/core/src/platform.ts", "../../../utilities/core/src/events.ts", "../../../utilities/core/src/functions.ts", "../../../utilities/core/src/warning.ts", "../../../utilities/rect/src/point.ts", "../../../utilities/rect/src/operations.ts", "../../../utilities/rect/src/polygon.ts", "../../../types/src/prop-types.ts", "../../../types/src/controls.ts", "../../../utilities/core/src/array.ts", "../../../utilities/core/src/guard.ts", "../../../utilities/core/src/platform.ts", "../../../utilities/core/src/events.ts", "../../../utilities/core/src/functions.ts", "../../../utilities/core/src/warning.ts", "../src/number-input.dom.ts", "../src/number-input.utils.ts", "../src/number-input.connect.ts", "../src/number-input.machine.ts"],
4
- "sourcesContent": ["export { connect } from \"./number-input.connect\"\nexport { machine } from \"./number-input.machine\"\nexport type { UserDefinedContext as Context } from \"./number-input.types\"\n", "type Booleanish = boolean | \"true\" | \"false\"\n\nexport const dataAttr = (guard: boolean | undefined) => {\n return (guard ? \"\" : undefined) as Booleanish\n}\n\nexport const ariaAttr = (guard: boolean | undefined) => {\n return guard ? \"true\" : undefined\n}\n\nexport const matchAttr = (el: Element) => {\n return {\n get: (key: string) => el.getAttribute(key),\n set: (key: string, value: string) => el.setAttribute(key, value),\n is: (key: string, value: string) => {\n return el.getAttribute(key) === value\n },\n }\n}\n", "type Key = keyof CSSStyleDeclaration | (string & {})\ntype Styles = Record<Key, any>\ntype El = HTMLElement | null | undefined\n\nfunction getStyleCache(): WeakMap<HTMLElement, Styles> {\n ;(globalThis as any).__styleCache__ = (globalThis as any).__styleCache__ || new WeakMap()\n return (globalThis as any).__styleCache__\n}\n\nexport function getComputedStyle(el: El): Styles {\n if (!el) return {} as Styles\n const cache = getStyleCache()\n let style: Styles | undefined = cache.get(el)\n if (!style) {\n const win = el?.ownerDocument.defaultView ?? window\n style = win.getComputedStyle(el) as Styles\n cache.set(el, style)\n }\n return style\n}\n\nexport function copyVisualStyles(fromEl: HTMLElement | null, toEl: HTMLElement) {\n if (!fromEl) return\n const el = getComputedStyle(fromEl)\n // prettier-ignore\n const cssText = 'box-sizing:' + el.boxSizing +\n ';border-left:' + el.borderLeftWidth + ' solid red' +\n ';border-right:' + el.borderRightWidth + ' solid red' +\n ';font-family:' + el.fontFamily +\n ';font-feature-settings:' + el.fontFeatureSettings +\n ';font-kerning:' + el.fontKerning +\n ';font-size:' + el.fontSize +\n ';font-stretch:' + el.fontStretch +\n ';font-style:' + el.fontStyle +\n ';font-variant:' + el.fontVariant +\n ';font-variant-caps:' + el.fontVariantCaps +\n ';font-variant-ligatures:' + el.fontVariantLigatures +\n ';font-variant-numeric:' + el.fontVariantNumeric +\n ';font-weight:' + el.fontWeight +\n ';letter-spacing:' + el.letterSpacing +\n ';margin-left:' + el.marginLeft +\n ';margin-right:' + el.marginRight +\n ';padding-left:' + el.paddingLeft +\n ';padding-right:' + el.paddingRight +\n ';text-indent:' + el.textIndent +\n ';text-transform:' + el.textTransform\n\n toEl.style.cssText += cssText\n}\n", "export function nextTick(fn: VoidFunction) {\n const set = new Set<VoidFunction>()\n function raf(fn: VoidFunction) {\n const id = globalThis.requestAnimationFrame(fn)\n set.add(() => globalThis.cancelAnimationFrame(id))\n }\n raf(() => raf(fn))\n return function cleanup() {\n set.forEach(function (fn) {\n fn()\n })\n }\n}\n\nexport function raf(fn: VoidFunction) {\n const id = globalThis.requestAnimationFrame(fn)\n return function cleanup() {\n globalThis.cancelAnimationFrame(id)\n }\n}\n\nexport function queueMicrotask(fn: VoidFunction) {\n if (typeof globalThis.queueMicrotask === \"function\") {\n globalThis.queueMicrotask(fn)\n } else {\n Promise.resolve().then(fn)\n }\n}\n", "import { copyVisualStyles } from \"./computed-style\"\nimport { raf } from \"./next-tick\"\n\nfunction createGhostElement(doc: Document) {\n var el = doc.createElement(\"div\")\n el.id = \"ghost\"\n el.style.cssText =\n \"display:inline-block;height:0;overflow:hidden;position:absolute;top:0;visibility:hidden;white-space:nowrap;\"\n doc.body.appendChild(el)\n return el\n}\n\nexport function autoResizeInput(input: HTMLInputElement | null) {\n if (!input) return\n const doc = input.ownerDocument ?? document\n const ghost = createGhostElement(doc)\n\n copyVisualStyles(input, ghost)\n\n function resize() {\n raf(() => {\n ghost.innerHTML = input!.value\n const rect = getComputedStyle(ghost)\n input?.style.setProperty(\"width\", rect.width)\n })\n }\n\n resize()\n\n input?.addEventListener(\"input\", resize)\n input?.addEventListener(\"change\", resize)\n\n return () => {\n doc.body.removeChild(ghost)\n input?.removeEventListener(\"input\", resize)\n input?.removeEventListener(\"change\", resize)\n }\n}\n", "export function toArray<T>(v: T | T[] | undefined | null): T[] {\n if (!v) return []\n return Array.isArray(v) ? v : [v]\n}\n\nexport const fromLength = (length: number) => Array.from(Array(length).keys())\n\nexport const first = <T>(v: T[]): T | undefined => v[0]\n\nexport const last = <T>(v: T[]): T | undefined => v[v.length - 1]\n\nexport const isEmpty = <T>(v: T[]): boolean => v.length === 0\n\nexport const has = <T>(v: T[], t: any): boolean => v.indexOf(t) !== -1\n\nexport const add = <T>(v: T[], ...items: T[]): T[] => v.concat(items)\n\nexport const remove = <T>(v: T[], item: T): T[] => removeAt(v, v.indexOf(item))\n\nexport const removeAt = <T>(v: T[], i: number): T[] => {\n if (i > -1) v.splice(i, 1)\n return v\n}\n\nexport function clear<T>(v: T[]): T[] {\n while (v.length > 0) v.pop()\n return v\n}\n\nexport type IndexOptions = {\n step?: number\n loop?: boolean\n}\n\nexport function nextIndex<T>(v: T[], idx: number, opts: IndexOptions = {}): number {\n const { step = 1, loop = true } = opts\n const next = idx + step\n const len = v.length\n const last = len - 1\n if (idx === -1) return step > 0 ? 0 : last\n if (next < 0) return loop ? last : 0\n if (next >= len) return loop ? 0 : idx > len ? len : idx\n return next\n}\n\nexport function next<T>(v: T[], idx: number, opts: IndexOptions = {}): T | undefined {\n return v[nextIndex(v, idx, opts)]\n}\n\nexport function prevIndex<T>(v: T[], idx: number, opts: IndexOptions = {}): number {\n const { step = 1, loop = true } = opts\n return nextIndex(v, idx, { step: -step, loop })\n}\n\nexport function prev<T>(v: T[], index: number, opts: IndexOptions = {}): T | undefined {\n return v[prevIndex(v, index, opts)]\n}\n\nexport const chunk = <T>(v: T[], size: number): T[][] => {\n const res: T[][] = []\n return v.reduce((rows, value, index) => {\n if (index % size === 0) rows.push([value])\n else last(rows)?.push(value)\n return rows\n }, res)\n}\n", "export const isDev = () => process.env.NODE_ENV !== \"production\"\nexport const isDom = () => typeof window !== \"undefined\"\n\nexport const isArray = (v: any): v is any[] => Array.isArray(v)\nexport const isBoolean = (v: any): v is boolean => v === true || v === false\nexport const isObject = (v: any): v is Record<string, any> => !(v == null || typeof v !== \"object\" || isArray(v))\nexport const isNumber = (v: any): v is number => typeof v === \"number\" && !Number.isNaN(v)\nexport const isString = (v: any): v is string => typeof v === \"string\"\nexport const isFunction = (v: any): v is Function => typeof v === \"function\"\n\nexport const hasProp = <T extends string>(obj: any, prop: T): obj is Record<T, any> =>\n Object.prototype.hasOwnProperty.call(obj, prop)\n", "import { isDom } from \"./guard\"\n\nexport function getPlatform() {\n const agent = (navigator as any).userAgentData\n return agent?.platform ?? navigator.platform\n}\n\nconst pt = (v: RegExp) => isDom() && v.test(getPlatform())\nconst ua = (v: RegExp) => isDom() && v.test(navigator.userAgent)\nconst vn = (v: RegExp) => isDom() && v.test(navigator.vendor)\n\nexport const isTouchDevice = isDom() && !!navigator.maxTouchPoints\nexport const isMac = () => pt(/^Mac/) && !isTouchDevice\nexport const isIPhone = () => pt(/^iPhone/)\nexport const isSafari = () => isApple() && vn(/apple/i)\nexport const isFirefox = () => ua(/firefox\\//i)\nexport const isApple = () => pt(/mac|iphone|ipad|ipod/i)\nexport const isIos = () => isApple() && !isMac()\n", "import { hasProp, isDom, isObject } from \"./guard\"\nimport { isMac } from \"./platform\"\n\nexport const supportsPointerEvent = () => isDom() && window.onpointerdown === null\nexport const supportsTouchEvent = () => isDom() && window.ontouchstart === null\nexport const supportsMouseEvent = () => isDom() && window.onmousedown === null\n\nexport const isMouseEvent = (v: any): v is MouseEvent => isObject(v) && hasProp(v, \"button\")\nexport const isTouchEvent = (v: any): v is TouchEvent => isObject(v) && hasProp(v, \"touches\")\nexport const isLeftClick = (v: { button: number }) => v.button === 0\nexport const isRightClick = (v: { button: number }) => v.button === 2\nexport const isModifiedEvent = (v: Pick<KeyboardEvent, \"ctrlKey\" | \"metaKey\" | \"altKey\">) =>\n v.ctrlKey || v.altKey || v.metaKey\n\nexport const isCtrlKey = (v: Pick<KeyboardEvent, \"ctrlKey\" | \"metaKey\">) =>\n isMac() ? v.metaKey && !v.ctrlKey : v.ctrlKey && !v.metaKey\n", "export const runIfFn = <T>(\n v: T | undefined,\n ...a: T extends (...a: any[]) => void ? Parameters<T> : never\n): T extends (...a: any[]) => void ? NonNullable<ReturnType<T>> : NonNullable<T> => {\n const res = typeof v === \"function\" ? v(...a) : v\n return res ?? undefined\n}\n\nexport const cast = <T>(v: unknown): T => v as T\n\nexport const noop = () => {}\n\nexport const pipe =\n <T>(...fns: Array<(a: T) => T>) =>\n (v: T) =>\n fns.reduce((a, b) => b(a), v)\n\nexport const callAll =\n <T extends (...a: any[]) => void>(...fns: (T | undefined)[]) =>\n (...a: Parameters<T>) => {\n fns.forEach(function (fn) {\n fn?.(...a)\n })\n }\n\nexport const uuid = /*#__PURE__*/ (() => {\n let id = 0\n return () => {\n id++\n return id.toString(36)\n }\n})()\n\nexport function merge<T, U>(origin: T, patch: U): T & U {\n if (!(typeof patch === \"object\")) return patch as any\n const result = !(typeof origin === \"object\") ? {} : Object.assign({}, origin)\n for (const key of Object.keys(patch)) {\n const value = patch[key]\n const src = result[key]\n if (value === null) delete result[key]\n else if (Array.isArray(value) || Array.isArray(src)) result[key] = (src || []).concat(value || [])\n else result[key] = merge(src, value)\n }\n return result as any\n}\n", "export function warn(m: string): void\nexport function warn(c: boolean, m: string): void\nexport function warn(...a: any[]): void {\n const m = a.length === 1 ? a[0] : a[1]\n const c = a.length === 2 ? a[0] : true\n if (c && process.env.NODE_ENV !== \"production\") {\n console.warn(m)\n }\n}\n\nexport function invariant(m: string): void\nexport function invariant(c: boolean, m: string): void\nexport function invariant(...a: any[]): void {\n const m = a.length === 1 ? a[0] : a[1]\n const c = a.length === 2 ? a[0] : true\n if (c && process.env.NODE_ENV !== \"production\") {\n throw new Error(m)\n }\n}\n", "import { noop } from \"@zag-js/utils\"\n\ntype El = HTMLElement | Document | VisualViewport | Window\ntype Handler = (event: Event) => void\ntype Group = Map<string, Set<Handler>>\ntype Option = boolean | AddEventListenerOptions\n\nfunction getListenerElements(): Map<El, Group> {\n ;(globalThis as any).__listenerElements__ = (globalThis as any).__listenerElements__ || new Map()\n return (globalThis as any).__listenerElements__\n}\n\nfunction getListenerCache(): Map<El, Map<string, Handler>> {\n ;(globalThis as any).__listenerCache__ = (globalThis as any).__listenerCache__ || new Map()\n return (globalThis as any).__listenerCache__\n}\n\n/**\n * The global event bus for managing event listeners attached to DOM elements.\n *\n * It's goal is to ensure that only one listener is attached to a DOM element for a given event,\n * regardless of the number of times `addEventListener` is called.\n */\n\nexport function addGlobalEventListener(node: El | null, type: string, handler: Handler, options?: Option) {\n if (!node) return noop\n\n // unique identifier for the event listener\n const hash = JSON.stringify({ type, options })\n\n // Subscribe pattern\n const listenerElements = getListenerElements()\n const listenerCache = getListenerCache()\n\n const group = listenerElements.get(node)\n\n if (!listenerElements.has(node)) {\n // create group of listeners per hash\n const group: Group = new Map([[hash, new Set([handler])]])\n listenerElements.set(node, group)\n } else if (group?.has(hash)) {\n group?.get(hash)?.add(handler)\n } else {\n group?.set(hash, new Set([handler]))\n }\n\n // add the event listener to the node or register it in the cache\n function attach(node: El) {\n // Publish pattern\n function listener(event: Event) {\n const group = listenerElements.get(node)\n group?.get(hash)?.forEach((fn) => fn(event))\n }\n\n if (!listenerCache?.has(node)) {\n listenerCache.set(node, new Map([[hash, listener]]))\n node.addEventListener(type, listener, options)\n return\n }\n\n if (!listenerCache?.get(node)?.has(hash)) {\n listenerCache.get(node)?.set(hash, listener)\n node.addEventListener(type, listener, options)\n }\n }\n\n attach(node)\n\n return function remove() {\n if (!listenerElements.has(node)) return\n\n const group = listenerElements.get(node)\n group?.get(hash)?.delete(handler)\n\n if (group?.get(hash)?.size === 0) {\n const listener = listenerCache.get(node)?.get(hash)!\n node.removeEventListener(type, listener, options)\n group?.delete(hash)\n listenerCache.get(node)?.delete(hash)\n\n if (group?.size === 0) {\n listenerElements.delete(node)\n listenerCache.delete(node)\n }\n }\n }\n}\n", "import {\n supportsMouseEvent,\n supportsPointerEvent,\n supportsTouchEvent,\n runIfFn,\n hasProp,\n isTouchEvent,\n} from \"@zag-js/utils\"\nimport { addGlobalEventListener } from \"./global-listener\"\nimport {\n AnyPointerEvent,\n DOMEventTarget,\n EventMap,\n PointerEventInfo,\n PointerNameMap,\n RefTarget,\n} from \"./listener.types\"\n\nconst isRef = (v: any): v is RefTarget => hasProp(v, \"current\")\n\nconst fallback = { pageX: 0, pageY: 0, clientX: 0, clientY: 0 }\n\nexport function extractInfo<T extends AnyPointerEvent = AnyPointerEvent>(event: T, type: \"page\" | \"client\" = \"page\") {\n const point = isTouchEvent(event) ? event.touches[0] || event.changedTouches[0] || fallback : event\n return {\n point: {\n x: point[`${type}X`],\n y: point[`${type}Y`],\n },\n }\n}\n\nexport function addDomEvent<K extends keyof EventMap>(\n target: DOMEventTarget,\n event: K,\n listener: (event: EventMap[K]) => void,\n options?: boolean | AddEventListenerOptions,\n) {\n const node = isRef(target) ? target.current : runIfFn(target)\n return addGlobalEventListener(node as HTMLElement | null, event, listener as any, options)\n}\n\nexport function addPointerEvent<K extends keyof EventMap>(\n target: DOMEventTarget,\n event: K,\n listener: (event: EventMap[K], info: PointerEventInfo) => void,\n options?: boolean | AddEventListenerOptions,\n) {\n const type = getEventName(event) ?? event\n return addDomEvent(target, type, wrapHandler(listener, event === \"pointerdown\"), options)\n}\n\nfunction wrapHandler<E extends EventMap[keyof EventMap]>(\n fn: (event: E, info: PointerEventInfo) => void,\n filter = false,\n) {\n const listener: EventListener = (event: any) => {\n fn(event, extractInfo(event))\n }\n return filter ? filterPrimaryPointer(listener) : listener\n}\n\nfunction filterPrimaryPointer(fn: EventListener): EventListener {\n return (event: Event) => {\n const win = ((event as UIEvent).view ?? window) as typeof window\n const isMouseEvent = event instanceof win.MouseEvent\n const isPrimary = !isMouseEvent || (isMouseEvent && (event as MouseEvent).button === 0)\n if (isPrimary) fn(event)\n }\n}\n\nexport function extractClientInfo(event: AnyPointerEvent) {\n return extractInfo(event, \"client\")\n}\n\nconst mouseEventNames: PointerNameMap = {\n pointerdown: \"mousedown\",\n pointermove: \"mousemove\",\n pointerup: \"mouseup\",\n pointercancel: \"mousecancel\",\n pointerover: \"mouseover\",\n pointerout: \"mouseout\",\n pointerenter: \"mouseenter\",\n pointerleave: \"mouseleave\",\n}\n\nconst touchEventNames: PointerNameMap = {\n pointerdown: \"touchstart\",\n pointermove: \"touchmove\",\n pointerup: \"touchend\",\n pointercancel: \"touchcancel\",\n}\n\nexport function getEventName(evt: keyof EventMap): keyof EventMap {\n if (supportsPointerEvent()) return evt\n if (supportsTouchEvent()) return touchEventNames[evt]\n if (supportsMouseEvent()) return mouseEventNames[evt]\n return evt\n}\n", "import { isLeftClick, pipe } from \"@zag-js/utils\"\nimport { addDomEvent } from \"./listener\"\nimport { nextTick } from \"./next-tick\"\n\nlet changeCount = 0\nlet originalBodyPointerEvents: string\n\ntype PointerEventOptions = {\n disabled: boolean\n document?: Document\n}\n\nexport function preventBodyPointerEvents(el: HTMLElement | null, opts: Partial<PointerEventOptions> = {}) {\n const { disabled = false, document: docProp } = opts\n const doc: Document = docProp || document\n\n let isTouchOrPenPressed = false\n let isLeftClickPressed = false\n\n function listen() {\n const onPointerDown = (event: PointerEvent) => {\n const isMouse = event.pointerType === \"mouse\"\n isTouchOrPenPressed = !isMouse\n isLeftClickPressed = isMouse && isLeftClick(event)\n }\n\n const onPointerUp = () => {\n isTouchOrPenPressed = false\n isLeftClickPressed = false\n }\n\n // prettier-ignore\n return pipe(\n addDomEvent(doc, \"pointerdown\", onPointerDown),\n addDomEvent(doc,\"pointerup\", onPointerUp)\n )\n }\n\n function reset() {\n changeCount--\n if (changeCount === 0) {\n doc.body.style.pointerEvents = originalBodyPointerEvents\n }\n if (el) {\n el.style.pointerEvents = \"\"\n }\n }\n\n function apply() {\n if (disabled) return\n\n if (changeCount === 0) {\n originalBodyPointerEvents = doc.body.style.pointerEvents\n }\n\n doc.body.style.pointerEvents = \"none\"\n if (el) {\n el.style.pointerEvents = \"auto\"\n }\n\n changeCount++\n\n return function () {\n if (isTouchOrPenPressed) {\n addDomEvent(doc, \"click\", reset, { once: true })\n } else if (isLeftClickPressed) {\n addDomEvent(doc, \"pointerup\", reset, { once: true })\n } else {\n reset()\n }\n }\n }\n\n const cleanups: Array<VoidFunction | undefined> = []\n cleanups.push(apply())\n nextTick(() => {\n cleanups.push(listen())\n })\n\n return function () {\n cleanups.forEach((cleanup) => cleanup?.())\n }\n}\n", "export const MAX_Z_INDEX = 2147483647\n", "export function getOwnerDocument(el: HTMLElement | Window) {\n if (isWindow(el)) return el.document\n return el?.ownerDocument ?? document\n}\n\nexport function getOwnerWindow(el: HTMLElement) {\n return el?.ownerDocument.defaultView ?? window\n}\n\nexport function getDocumentElement(el: HTMLElement | Window): HTMLElement {\n return getOwnerDocument(el).documentElement\n}\n\nexport function getNodeName(node: HTMLElement | Window): string {\n return isWindow(node) ? \"\" : node ? node.localName || \"\" : \"\"\n}\n\nexport function getEventWindow(event: UIEvent) {\n if (event.view) return event.view\n let target = event.currentTarget\n if (target != null) return getOwnerWindow(target as HTMLElement)\n return window\n}\n\nexport function getParent(el: HTMLElement): HTMLElement {\n const doc = getOwnerDocument(el)\n if (getNodeName(el) === \"html\") return el\n return el.assignedSlot || el.parentElement || doc.documentElement\n}\n\ntype Node = HTMLElement | EventTarget | null\n\nexport function contains(parent: Node | undefined, child: Node) {\n if (!parent) return false\n return parent === child || (isHTMLElement(parent) && isHTMLElement(child) && parent.contains(child))\n}\n\nexport function isHTMLElement(v: any): v is HTMLElement {\n return typeof v === \"object\" && v?.nodeType === Node.ELEMENT_NODE && typeof v?.nodeName === \"string\"\n}\n\nexport function isWindow(value: any): value is Window {\n return value?.toString() === \"[object Window]\"\n}\n\nexport const isDisabled = (el: HTMLElement | null): boolean => {\n return el?.getAttribute(\"disabled\") != null || !!el?.getAttribute(\"aria-disabled\") === true\n}\n\nexport function isElementEditable(el: HTMLElement | null) {\n if (el == null) return false\n const selectors = [\n \"input:not([readonly])\",\n \"textarea:not([readonly])\",\n \"[contenteditable]\",\n \"select:not([readonly])\",\n ].join(\", \")\n return el.matches(selectors) || el.isContentEditable\n}\n", "import { contains } from \"./query\"\n\nexport function isKeyboardClick(e: Pick<MouseEvent, \"detail\" | \"clientX\" | \"clientY\">) {\n return e.detail === 0 || (e.clientX === 0 && e.clientY === 0)\n}\n\nexport function isPrintableKey(e: Pick<KeyboardEvent, \"key\" | \"ctrlKey\" | \"metaKey\">): boolean {\n return e.key.length === 1 && !e.ctrlKey && !e.metaKey\n}\n\ntype NativeEvent<E> = React.ChangeEvent<any> extends E\n ? InputEvent\n : E extends React.SyntheticEvent<any, infer T>\n ? T\n : never\n\nexport function getNativeEvent<E>(e: E): NativeEvent<E> {\n return (e as any).nativeEvent ?? e\n}\n\nexport function queueBeforeEvent(el: Element, type: string, fn: VoidFunction) {\n const raf = requestAnimationFrame(() => {\n el.removeEventListener(type, invoke, true)\n fn()\n })\n\n const invoke = () => {\n cancelAnimationFrame(raf)\n fn()\n }\n\n el.addEventListener(type, invoke, { once: true, capture: true })\n\n return raf\n}\n\nexport function isPortalEvent(event: Pick<Event, \"currentTarget\" | \"target\">): boolean {\n return !contains(event.currentTarget, event.target)\n}\n\nexport function isSelfTarget(event: Pick<Event, \"target\" | \"currentTarget\">): boolean {\n return event.target === event.currentTarget\n}\n", "export function fireEvent(el: Element, type: string, init?: EventInit) {\n const event = new Event(type, init)\n return el.dispatchEvent(event)\n}\n\nexport function fireCustomEvent(el: Element, type: string, init?: CustomEventInit) {\n const event = new CustomEvent(type, init)\n return el.dispatchEvent(event)\n}\n\nexport function fireBlurEvent(el: Element, init?: FocusEventInit) {\n const event = new FocusEvent(\"blur\", init)\n const allowed = el.dispatchEvent(event)\n const bubbleInit = { ...init, bubbles: true }\n el.dispatchEvent(new FocusEvent(\"focusout\", bubbleInit))\n return allowed\n}\n\nexport function fireKeyboardEvent(el: Element, type: string, init?: KeyboardEventInit) {\n const event = new KeyboardEvent(type, init)\n return el.dispatchEvent(event)\n}\n\nexport function fireClickEvent(el: Element, init?: PointerEventInit) {\n const event = typeof PointerEvent !== \"undefined\" ? new PointerEvent(\"click\", init) : new MouseEvent(\"click\", init)\n return el.dispatchEvent(event)\n}\n", "/**\n * Determine if the blur event within an element is valid\n */\nexport function validateBlur(event: Event, opts: Options) {\n const exclude = Array.isArray(opts.exclude) ? opts.exclude : [opts.exclude]\n const relatedTarget = (event.relatedTarget ?? opts.fallback) as HTMLElement\n return exclude.every((el) => !el?.contains(relatedTarget))\n}\n\ntype MaybeArray<T> = T | T[]\n\ntype Options = {\n exclude: MaybeArray<HTMLElement | null>\n fallback?: HTMLElement | null\n}\n\ntype Event = Pick<FocusEvent, \"relatedTarget\">\n", "import { getComputedStyle } from \"./computed-style\"\nimport { isDisabled, isHTMLElement } from \"./query\"\n\nexport const focusableSelector = /*#__PURE__*/ [\n \"input:not([disabled]):not([type=hidden])\",\n \"select:not([disabled])\",\n \"textarea:not([disabled])\",\n \"button:not([disabled])\",\n \"embed\",\n \"iframe\",\n \"object\",\n \"a[href]\",\n \"area[href]\",\n \"[tabindex]\",\n \"audio[controls]\",\n \"video[controls]\",\n \"*[tabindex]:not([aria-disabled])\",\n \"[contenteditable]:not([contenteditable=false])\",\n \"details > summary:first-of-type\",\n].join(\",\")\n\nexport function isHidden(el: HTMLElement | null, until?: HTMLElement) {\n const style = getComputedStyle(el)\n if (!el || style.getPropertyValue(\"visibility\") === \"hidden\") return true\n while (el) {\n if (until != null && el === until) return false\n if (style.getPropertyValue(\"display\") === \"none\") return true\n el = el.parentElement\n }\n return false\n}\n\n/**\n * Returns the focusable elements within the element\n */\nexport const getFocusables = (el: HTMLElement | Document | null, includeContainer: boolean | \"if-empty\" = false) => {\n if (!el) return []\n let els = Array.from(el.querySelectorAll<HTMLElement>(focusableSelector))\n\n const shouldAddContainer = includeContainer == true || (includeContainer == \"if-empty\" && els.length === 0)\n\n if (shouldAddContainer && isHTMLElement(el)) {\n els.unshift(el)\n }\n\n return els.filter((el) => isFocusable(el) && !isHidden(el))\n}\n\n/**\n * Whether this element is focusable\n */\nexport const isFocusable = (el: HTMLElement | null) => {\n if (!isHTMLElement(el) || isHidden(el) || isDisabled(el)) return false\n return el?.matches(focusableSelector)\n}\n\n/**\n * Returns the tabbable elements within the element\n */\nexport const getTabbables = (el: HTMLElement | Document | null, includeContainer: boolean | \"if-empty\" = false) => {\n if (!el) return []\n return getFocusables(el, includeContainer).filter(isTabbable)\n}\n\n/**\n * Whether this element is tabbable\n */\nexport const isTabbable = (el: HTMLElement | null) => {\n return isFocusable(el) && !isDisabled(el) && !isHidden(el)\n}\n", "import { noop } from \"@zag-js/utils\"\n\ntype Callback = (v: MutationRecord) => void\n\nexport function observeAttributes(node: Element | null, attributes: string | string[], fn: Callback) {\n if (!node) return noop\n const attrs = Array.isArray(attributes) ? attributes : [attributes]\n const win = node.ownerDocument.defaultView || window\n const obs = new win.MutationObserver((changes) => {\n for (const change of changes) {\n if (change.type === \"attributes\" && change.attributeName && attrs.includes(change.attributeName)) {\n fn(change)\n }\n }\n })\n\n obs.observe(node, { attributes: true, attributeFilter: attrs })\n\n return () => obs.disconnect()\n}\n\nexport function observeChildren(node: Element | null, fn: Callback) {\n if (!node) return noop\n const win = node.ownerDocument.defaultView || window\n const obs = new win.MutationObserver((changes) => {\n for (const change of changes) {\n if (change.type === \"childList\") {\n fn(change)\n }\n }\n })\n\n obs.observe(node, { childList: true, subtree: true })\n\n return () => obs.disconnect()\n}\n", "import { observeAttributes } from \"./mutation-observer\"\n\nexport function getClosestForm(el: HTMLElement) {\n if (isFormElement(el)) return el.form\n else return el.closest(\"form\")\n}\n\nfunction isFormElement(el: HTMLElement): el is HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement {\n return el.matches(\"textarea, input, select, button\")\n}\n\nexport function trackFormReset(el: HTMLElement | null | undefined, callback: () => void) {\n if (!el) return\n const form = getClosestForm(el)\n form?.addEventListener(\"reset\", callback, { passive: true })\n return () => {\n form?.removeEventListener(\"reset\", callback)\n }\n}\n\nexport function trackFieldsetDisabled(el: HTMLElement | null | undefined, callback: (disabled: boolean) => void) {\n const fieldset = el?.closest(\"fieldset\")\n if (!fieldset) return\n callback(fieldset.disabled)\n return observeAttributes(fieldset, [\"disabled\"], () => callback(fieldset.disabled))\n}\n\nexport function isNativeDisabled(el: HTMLElement) {\n return el.matches(\":disabled\")\n}\n", "import { getOwnerWindow } from \"./query\"\n\ntype DescriptorOptions = {\n type: \"input\" | \"textarea\"\n property: \"value\" | \"checked\"\n}\n\nfunction getDescriptor(el: HTMLElement, options: DescriptorOptions) {\n const { type, property } = options\n const win = getOwnerWindow(el)\n const _type = type === \"input\" ? \"HTMLInputElement\" : \"HTMLTextAreaElement\"\n const proto = win[_type].prototype\n return Object.getOwnPropertyDescriptor(proto, property) ?? {}\n}\n\nexport function dispatchInputValueEvent(el: HTMLElement, value: string | number) {\n const win = getOwnerWindow(el)\n if (!(el instanceof win.HTMLInputElement)) return\n const desc = getDescriptor(el, { type: \"input\", property: \"value\" })\n desc.set?.call(el, value)\n const event = new win.Event(\"input\", { bubbles: true })\n el.dispatchEvent(event)\n}\n\nexport function dispatchInputCheckedEvent(el: HTMLElement, checked: boolean) {\n const win = getOwnerWindow(el)\n if (!(el instanceof win.HTMLInputElement)) return\n const desc = getDescriptor(el, { type: \"input\", property: \"checked\" })\n desc.set?.call(el, checked)\n const event = new win.Event(\"click\", { bubbles: true })\n el.dispatchEvent(event)\n}\n\nexport function trackInputPropertyMutation(\n el: HTMLInputElement | null,\n options: DescriptorOptions & { fn?: (value: string) => void },\n) {\n const { fn, property, type } = options\n\n if (!fn || !el) return\n\n const { get, set } = getDescriptor(el, { property, type })\n\n let run = true\n\n Object.defineProperty(el, property, {\n get() {\n return get?.call(this)\n },\n set(value: string) {\n if (run) fn(value)\n return set?.call(this, value)\n },\n })\n\n return () => {\n run = false\n }\n}\n", "import type { KeyboardEvent } from \"react\"\n\ntype EventKey =\n | \"ArrowDown\"\n | \"ArrowUp\"\n | \"ArrowLeft\"\n | \"ArrowRight\"\n | \"Space\"\n | \"Enter\"\n | \"Comma\"\n | \"Escape\"\n | \"Backspace\"\n | \"Delete\"\n | \"Home\"\n | \"End\"\n | \"Tab\"\n | \"PageUp\"\n | \"PageDown\"\n | (string & {})\n\nexport type EventKeyMap = Partial<Record<EventKey, (event: React.KeyboardEvent) => void>>\n\nconst rtlKeyMap = {\n ArrowLeft: \"ArrowRight\",\n ArrowRight: \"ArrowLeft\",\n Home: \"End\",\n End: \"Home\",\n}\n\nconst sameKeyMap = {\n Up: \"ArrowUp\",\n Down: \"ArrowDown\",\n Esc: \"Escape\",\n \" \": \"Space\",\n \",\": \"Comma\",\n Left: \"ArrowLeft\",\n Right: \"ArrowRight\",\n}\n\ntype EventKeyOptions = {\n dir?: \"ltr\" | \"rtl\"\n orientation?: \"horizontal\" | \"vertical\"\n}\n\n/**\n * Determine the event key based on text direction.\n */\nexport function getEventKey(event: KeyboardEvent, options: EventKeyOptions = {}) {\n const { dir = \"ltr\", orientation = \"horizontal\" } = options\n\n let { key } = event\n key = sameKeyMap[key] ?? key // normalize key\n\n const isRtl = dir === \"rtl\" && orientation === \"horizontal\"\n\n if (isRtl && key in rtlKeyMap) {\n key = rtlKeyMap[key]\n }\n\n return key\n}\n\nconst PAGE_KEYS = new Set([\"PageUp\", \"PageDown\"])\nconst ARROW_KEYS = new Set([\"ArrowUp\", \"ArrowDown\", \"ArrowLeft\", \"ArrowRight\"])\n\n/**\n * Determine the step factor for keyboard events\n */\nexport function getEventStep(event: KeyboardEvent) {\n if (event.ctrlKey || event.metaKey) {\n return 0.1\n } else {\n const isPageKey = PAGE_KEYS.has(event.key)\n const isSkipKey = isPageKey || (event.shiftKey && ARROW_KEYS.has(event.key))\n return isSkipKey ? 10 : 1\n }\n}\n", "export const visuallyHiddenStyle = {\n border: \"0\",\n clip: \"rect(0 0 0 0)\",\n height: \"1px\",\n margin: \"-1px\",\n overflow: \"hidden\",\n padding: \"0\",\n position: \"absolute\",\n width: \"1px\",\n whiteSpace: \"nowrap\",\n wordWrap: \"normal\",\n} as const\n\nexport function setVisuallyHidden(el: HTMLElement) {\n Object.assign(el.style, visuallyHiddenStyle)\n}\n", "import { setVisuallyHidden } from \"./visually-hidden\"\n\nexport type LiveRegionOptions = {\n level: \"polite\" | \"assertive\"\n document?: Document\n root?: HTMLElement | null\n delay?: number\n}\n\nexport type LiveRegion = ReturnType<typeof createLiveRegion>\n\nconst LIVE_REGION_ID = \"__live-region__\"\n\nexport function createLiveRegion(opts: Partial<LiveRegionOptions> = {}) {\n const { level = \"polite\", document: doc = document, root, delay: _delay = 0 } = opts\n\n const win = doc.defaultView ?? window\n const parent = root ?? doc.body\n\n function announce(message: string, delay?: number) {\n const oldRegion = doc.getElementById(LIVE_REGION_ID)\n\n // remove old region\n oldRegion?.remove()\n\n // Did an override level get set?\n delay = delay ?? _delay\n\n // create fresh region\n const region = doc.createElement(\"span\")\n region.id = LIVE_REGION_ID\n region.dataset.liveAnnouncer = \"true\"\n\n // Determine redundant role\n const role = level !== \"assertive\" ? \"status\" : \"alert\"\n\n // add role and attributes\n region.setAttribute(\"aria-live\", level)\n region.setAttribute(\"role\", role)\n\n // hide live region\n setVisuallyHidden(region)\n\n parent.appendChild(region)\n\n // populate region to trigger it\n win.setTimeout(() => {\n region.textContent = message\n }, delay)\n }\n\n function destroy() {\n const oldRegion = doc.getElementById(LIVE_REGION_ID)\n oldRegion?.remove()\n }\n\n return {\n announce,\n destroy,\n toJSON() {\n return LIVE_REGION_ID\n },\n }\n}\n", "type Root = Document | Element | null | undefined\n\nexport function queryAll<T extends HTMLElement = HTMLElement>(root: Root, selector: string) {\n return Array.from(root?.querySelectorAll<T>(selector) ?? [])\n}\n\nexport function query<T extends HTMLElement = HTMLElement>(root: Root, selector: string) {\n return root?.querySelector<T>(selector)\n}\n\nexport function itemById<T extends HTMLElement>(v: T[], id: string) {\n return v.find((node) => node.id === id)\n}\n\nexport function indexOfId<T extends HTMLElement>(v: T[], id: string) {\n const item = itemById(v, id)\n return item ? v.indexOf(item) : -1\n}\n\nexport function nextById<T extends HTMLElement>(v: T[], id: string, loop = true) {\n let idx = indexOfId(v, id)\n idx = loop ? (idx + 1) % v.length : Math.min(idx + 1, v.length - 1)\n return v[idx]\n}\n\nexport function prevById<T extends HTMLElement>(v: T[], id: string, loop = true) {\n let idx = indexOfId(v, id)\n if (idx === -1) return loop ? v[v.length - 1] : null\n idx = loop ? (idx - 1 + v.length) % v.length : Math.max(0, idx - 1)\n return v[idx]\n}\n\nconst getValueText = <T extends HTMLElement>(item: T) => item.dataset.valuetext ?? item.textContent ?? \"\"\n\nconst match = (valueText: string, query: string) => valueText.toLowerCase().startsWith(query.toLowerCase())\n\nconst wrap = <T>(v: T[], idx: number) => {\n return v.map((_, index) => v[(Math.max(idx, 0) + index) % v.length])\n}\n\nexport function findByText<T extends HTMLElement>(v: T[], text: string, currentId?: string | null) {\n const index = currentId ? indexOfId(v, currentId) : -1\n let items = currentId ? wrap(v, index) : v\n\n const isSingleKey = text.length === 1\n\n if (isSingleKey) {\n items = items.filter((item) => item.id !== currentId)\n }\n\n return items.find((item) => match(getValueText(item), text))\n}\n\nexport function sortByTreeOrder<T extends HTMLElement>(v: T[]) {\n return v.sort((a, b) => (a.compareDocumentPosition(b) & 2 ? 1 : -1))\n}\n", "// Credits: https://github.com/adobe/react-spectrum/blob/e81cfec20056338c7987c513826dc45df32f3db4/packages/%40react-aria/interactions/src/textSelection.ts\nimport { isIos } from \"@zag-js/utils\"\nimport { nextTick } from \"./next-tick\"\n\ntype State = \"default\" | \"disabled\" | \"restoring\"\n\nlet state: State = \"default\"\nlet savedUserSelect = \"\"\nlet modifiedElementMap = new WeakMap<HTMLElement, string>()\n\nexport function disableTextSelection({ target, doc }: { target?: HTMLElement; doc?: Document } = {}) {\n const _document = doc ?? document\n\n if (isIos()) {\n if (state === \"default\") {\n savedUserSelect = _document.documentElement.style.webkitUserSelect\n _document.documentElement.style.webkitUserSelect = \"none\"\n }\n\n state = \"disabled\"\n } else if (target) {\n modifiedElementMap.set(target, target.style.userSelect)\n target.style.userSelect = \"none\"\n }\n\n return () => restoreTextSelection({ target, doc: _document })\n}\n\nexport function restoreTextSelection({ target, doc }: { target?: HTMLElement; doc?: Document } = {}) {\n const _document = doc ?? document\n\n if (isIos()) {\n if (state !== \"disabled\") return\n state = \"restoring\"\n\n setTimeout(() => {\n nextTick(() => {\n if (state === \"restoring\") {\n if (_document.documentElement.style.webkitUserSelect === \"none\") {\n _document.documentElement.style.webkitUserSelect = savedUserSelect || \"\"\n }\n\n savedUserSelect = \"\"\n state = \"default\"\n }\n })\n }, 300)\n } else {\n if (target && modifiedElementMap.has(target)) {\n let targetOldUserSelect = modifiedElementMap.get(target)\n\n if (target.style.userSelect === \"none\") {\n target.style.userSelect = targetOldUserSelect ?? \"\"\n }\n\n if (target.getAttribute(\"style\") === \"\") {\n target.removeAttribute(\"style\")\n }\n modifiedElementMap.delete(target)\n }\n }\n}\n", "import { isLeftClick, isMouseEvent, pipe } from \"@zag-js/utils\"\nimport { addDomEvent, addPointerEvent } from \"./listener\"\nimport type { AnyPointerEvent, EventListenerWithPointInfo as Listener, PointerEventInfo } from \"./listener.types\"\nimport { disableTextSelection } from \"./text-selection\"\n\nexport function trackPointerDown(doc: Document, onPointerDown: (el: HTMLElement) => void) {\n const win = doc.defaultView ?? window\n const fn = (event: PointerEvent) => {\n if (event.target instanceof win.HTMLElement) {\n onPointerDown(event.target)\n }\n }\n return addDomEvent(doc, \"pointerdown\", fn)\n}\n\ntype TrackPointerMoveOptions = {\n ctx: { doc?: Document; threshold?: number }\n onPointerUp: VoidFunction\n onPointerMove: (info: PointerEventInfo, event: AnyPointerEvent) => void\n}\n\nexport function trackPointerMove(opts: TrackPointerMoveOptions) {\n const { onPointerMove, onPointerUp, ctx } = opts\n const { doc = document, threshold = 5 } = ctx\n\n const handlePointerMove: Listener = (event, info) => {\n const { point: p } = info\n const distance = Math.sqrt(p.x ** 2 + p.y ** 2)\n if (distance < threshold) return\n\n // Because Safari doesn't trigger mouseup events when it's above a `<select>`\n if (isMouseEvent(event) && isLeftClick(event)) {\n onPointerUp()\n return\n }\n\n onPointerMove(info, event)\n }\n\n return pipe(\n addPointerEvent(doc, \"pointermove\", handlePointerMove, false),\n addPointerEvent(doc, \"pointerup\", onPointerUp, false),\n addPointerEvent(doc, \"pointercancel\", onPointerUp, false),\n addPointerEvent(doc, \"contextmenu\", onPointerUp, false),\n disableTextSelection({ doc }),\n )\n}\n", "import { pipe } from \"@zag-js/utils\"\nimport { addDomEvent } from \"./listener\"\n\ntype PointerLockHandlers = {\n onPointerLock?: VoidFunction\n onPointerUnlock?: VoidFunction\n}\n\nexport function addPointerlockChangeListener(doc: Document, fn: VoidFunction) {\n return addDomEvent(doc, \"pointerlockchange\", fn, false)\n}\n\nexport function addPointerlockErrorListener(doc: Document, fn: (e: Event) => void) {\n doc.addEventListener(\"pointerlockerror\", fn, false)\n return function cleanup() {\n doc.removeEventListener(\"pointerlockerror\", fn, false)\n }\n}\n\nexport function requestPointerLock(doc: Document, handlers: PointerLockHandlers = {}) {\n const { onPointerLock, onPointerUnlock } = handlers\n const body = doc.body\n\n const supported = \"pointerLockElement\" in doc || \"mozPointerLockElement\" in doc\n const locked = !!doc.pointerLockElement\n\n function onPointerChange() {\n if (locked) onPointerLock?.()\n else onPointerUnlock?.()\n }\n\n function onPointerError(event: Event) {\n if (locked) onPointerUnlock?.()\n console.error(\"PointerLock error occured:\", event)\n exit()\n }\n\n function exit() {\n doc.exitPointerLock()\n }\n\n if (!supported) return\n\n body.requestPointerLock()\n\n const cleanup = pipe(\n addPointerlockChangeListener(doc, onPointerChange),\n addPointerlockErrorListener(doc, onPointerError),\n )\n\n return function dispose() {\n if (!supported) return\n cleanup()\n exit()\n }\n}\n", "// Credit goes to the radix-ui team for this utility:\n// https://github.com/radix-ui/primitives/blob/main/packages/core/rect/src/observeElementRect.ts\n\ntype Fn = (rect: DOMRect) => void\ntype ObservedData = { rect: DOMRect; callbacks: Fn[] }\nexport type Measurable = { getBoundingClientRect(): DOMRect }\n\nfunction getObservedElements(): Map<Measurable, ObservedData> {\n ;(globalThis as any).__rectObserverMap__ = (globalThis as any).__rectObserverMap__ || new Map()\n return (globalThis as any).__rectObserverMap__\n}\n\nexport function observeElementRect(el: Measurable, fn: Fn) {\n const observedElements = getObservedElements()\n\n const data = observedElements.get(el)\n\n if (!data) {\n observedElements.set(el, { rect: {} as DOMRect, callbacks: [fn] })\n\n if (observedElements.size === 1) {\n rafId = requestAnimationFrame(runLoop)\n }\n } else {\n data.callbacks.push(fn)\n fn(el.getBoundingClientRect())\n }\n\n return function unobserve() {\n const data = observedElements.get(el)\n if (!data) return\n\n const index = data.callbacks.indexOf(fn)\n if (index > -1) {\n data.callbacks.splice(index, 1)\n }\n\n if (data.callbacks.length === 0) {\n observedElements.delete(el)\n\n if (observedElements.size === 0) {\n cancelAnimationFrame(rafId)\n }\n }\n }\n}\n\nlet rafId: number\n\nfunction runLoop() {\n const observedElements = getObservedElements()\n\n const changedRectsData: Array<ObservedData> = []\n\n observedElements.forEach((data, element) => {\n const newRect = element.getBoundingClientRect()\n\n if (!isEqual(data.rect, newRect)) {\n data.rect = newRect\n changedRectsData.push(data)\n }\n })\n\n changedRectsData.forEach((data) => {\n data.callbacks.forEach((callback) => callback(data.rect))\n })\n\n rafId = requestAnimationFrame(runLoop)\n}\n\nfunction isEqual(rect1: DOMRect, rect2: DOMRect) {\n return (\n rect1.width === rect2.width &&\n rect1.height === rect2.height &&\n rect1.top === rect2.top &&\n rect1.right === rect2.right &&\n rect1.bottom === rect2.bottom &&\n rect1.left === rect2.left\n )\n}\n", "import { getComputedStyle } from \"./computed-style\"\nimport { getNodeName, getOwnerDocument, getOwnerWindow, getParent, isHTMLElement, isWindow } from \"./query\"\n\nexport function isScrollParent(el: HTMLElement): boolean {\n const { overflow, overflowX, overflowY } = getComputedStyle(el)\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX)\n}\n\nexport function getScrollParent(el: HTMLElement): HTMLElement {\n if ([\"html\", \"body\", \"#document\"].includes(getNodeName(el))) {\n return getOwnerDocument(el).body\n }\n\n if (isHTMLElement(el) && isScrollParent(el)) {\n return el\n }\n\n return getScrollParent(getParent(el))\n}\n\ntype Target = Array<VisualViewport | Window | HTMLElement>\n\nexport function getScrollParents(el: HTMLElement, list: Target = []): Target {\n const scrollParent = getScrollParent(el)\n const isBody = scrollParent === getOwnerDocument(el).body\n const win = getOwnerWindow(scrollParent)\n\n const target = isBody\n ? ([win] as Target).concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : [])\n : scrollParent\n\n const parents = list.concat(target)\n if (isBody) return parents\n\n return parents.concat(getScrollParents(getParent(<HTMLElement>target)))\n}\n\nexport function getScrollOffset(el: HTMLElement) {\n if (isWindow(el)) {\n return { scrollLeft: el.scrollX, scrollTop: el.scrollY }\n }\n\n return { scrollLeft: el.scrollLeft, scrollTop: el.scrollTop }\n}\n", "import { findByText } from \"./nodelist\"\n\nexport type TypeaheadState = {\n keysSoFar: string\n timer: number\n}\n\nexport type TypeaheadOptions = {\n state: TypeaheadState\n activeId: string | null\n key: string\n timeout?: number\n}\n\nexport function findByTypeahead<T extends HTMLElement>(_items: T[], options: TypeaheadOptions) {\n const { state, activeId, key, timeout = 350 } = options\n\n const search = state.keysSoFar + key\n const isRepeated = search.length > 1 && Array.from(search).every((char) => char === search[0])\n\n const query = isRepeated ? search[0] : search\n\n let items = _items.slice()\n\n const next = findByText(items, query, activeId)\n\n function cleanup() {\n clearTimeout(state.timer)\n state.timer = -1\n }\n\n function update(value: string) {\n state.keysSoFar = value\n cleanup()\n\n if (value !== \"\") {\n state.timer = +setTimeout(() => {\n update(\"\")\n cleanup()\n }, timeout)\n }\n }\n\n update(search)\n\n return next\n}\n\nfindByTypeahead.defaultOptions = {\n keysSoFar: \"\",\n timer: -1,\n}\n", "import { cast } from \"@zag-js/utils\"\nimport { addDomEvent } from \"./listener\"\n\nexport function trackDocumentVisibility(_doc: Document, callback: (hidden: boolean) => void) {\n const doc = cast(_doc) as Document & { msHidden?: boolean; webkitHidden?: boolean }\n return addDomEvent(doc, \"visibilitychange\", () => {\n const hidden = doc.hidden || doc.msHidden || doc.webkitHidden\n callback(!!hidden)\n })\n}\n", "import { addDomEvent } from \"./listener\"\n\ntype ViewportSize = {\n width: number\n height: number\n}\n\ntype Options = {\n document?: Document\n resolve?(data: ViewportSize): void\n}\n\nexport function trackVisualViewport(options: Options) {\n const { document: doc, resolve } = options\n const win = doc?.defaultView || window\n resolve?.(getViewportSize(win))\n const onResize = () => resolve?.(getViewportSize(win))\n return addDomEvent(win.visualViewport ?? win, \"resize\", onResize)\n}\n\nfunction getViewportSize(win: Window): ViewportSize {\n return {\n width: win.visualViewport?.width || win.innerWidth,\n height: win.visualViewport?.height || win.innerHeight,\n }\n}\n", "export function waitFor<T>(predicate: () => T): Promise<T> {\n let value = predicate()\n if (!!value) return Promise.resolve(value)\n return new Promise((resolve) => {\n const id = globalThis.setInterval(function () {\n let value = predicate()\n if (value) {\n globalThis.clearInterval(id)\n resolve(value)\n }\n }, 0)\n })\n}\n\nexport function waitForEvent(el: HTMLElement, eventName: string) {\n return new Promise<void>((resolve) => {\n function done(event: Event) {\n if (event.target === el) {\n el.removeEventListener(eventName, done)\n resolve()\n }\n }\n\n el.addEventListener(eventName, done)\n })\n}\n", "export type Num<T extends string> = Record<T, number>\n\nexport function wrap(num: number, max: number): number {\n return ((num % max) + max) % max\n}\n\nexport function round(v: number | string, t?: number) {\n let num = valueOf(v)\n const p = 10 ** (t ?? 10)\n num = Math.round(num * p) / p\n return t ? num.toFixed(t) : v.toString()\n}\n\nexport function roundToDevicePixel(num: number) {\n if (typeof window === \"undefined\") return Math.round(num)\n const dp = window.devicePixelRatio\n return Math.floor(num * dp + 0.5) / dp\n}\n\nexport const valueToPercent = (v: number | string, r: Num<\"step\" | \"min\" | \"max\">) =>\n ((valueOf(v) - r.min) * 100) / (r.max - r.min)\n\nexport const percentToValue = (v: number | string, r: Num<\"min\" | \"max\">) => r.min + (r.max - r.min) * valueOf(v)\n\nexport function clamp(v: number | string, o: Num<\"min\" | \"max\">) {\n return Math.min(Math.max(valueOf(v), o.min), o.max)\n}\n\nexport function countDecimals(value: number) {\n if (!Number.isFinite(value)) return 0\n let e = 1,\n p = 0\n while (Math.round(value * e) / e !== value) {\n e *= 10\n p += 1\n }\n return p\n}\n\nexport const increment = (v: number | string, s: number) => decimalOperation(valueOf(v), \"+\", s)\n\nexport const decrement = (v: number | string, s: number) => decimalOperation(valueOf(v), \"-\", s)\n\nexport function snapToStep(value: number | string, step: number) {\n const num = valueOf(value)\n const p = countDecimals(step)\n const v = Math.round(num / step) * step\n return round(v, p)\n}\n\nexport function valueOf(v: string | number) {\n if (typeof v === \"number\") return v\n const num = parseFloat(v.toString().replace(/[^\\w.-]+/g, \"\"))\n return !Number.isNaN(num) ? num : 0\n}\n\nexport type FormatDecimalOptions = {\n /**\n * The minimum number of fraction digits to use. Possible values are from 0 to 20\n */\n minFractionDigits?: number\n /**\n * The maximum number of fraction digits to use. Possible values are from 0 to 20;\n */\n maxFractionDigits?: number\n}\n\nexport function formatDecimal(v: number | string, o: Omit<FormatDecimalOptions, \"value\">) {\n return new Intl.NumberFormat(\"en-US\", {\n useGrouping: false,\n style: \"decimal\",\n minimumFractionDigits: o.minFractionDigits,\n maximumFractionDigits: o.maxFractionDigits,\n }).format(valueOf(v))\n}\n\nexport function isAtMax(v: number | string, o: Num<\"max\">) {\n const val = valueOf(v)\n return val >= o.max\n}\n\nexport function isAtMin(v: number | string, o: Num<\"min\">) {\n const val = valueOf(v)\n return val <= o.min\n}\n\nexport function isWithinRange(v: number | string, o: Num<\"min\" | \"max\">) {\n const val = valueOf(v)\n return val >= o.min && val <= o.max\n}\n\nfunction decimalOperation(a: number, op: \"-\" | \"+\", b: number): number {\n let result = op === \"+\" ? a + b : a - b\n\n // Check if we have decimals\n if (a % 1 !== 0 || b % 1 !== 0) {\n const multiplier = 10 ** Math.max(countDecimals(a), countDecimals(b))\n\n // Transform the decimals to integers based on the precision\n a = Math.round(a * multiplier)\n b = Math.round(b * multiplier)\n\n // Perform the operation on integers values to make sure we don't get a fancy decimal value\n result = op === \"+\" ? a + b : a - b\n\n // Transform the integer result back to decimal\n result /= multiplier\n }\n\n return result\n}\n", "import {\n clamp,\n decrement,\n increment,\n isAtMax,\n isAtMin,\n isWithinRange,\n Num,\n percentToValue,\n FormatDecimalOptions,\n formatDecimal,\n snapToStep,\n valueOf,\n valueToPercent,\n} from \"./number\"\n\nexport type RangeOptions<T = string | number> = Num<\"min\" | \"max\"> &\n FormatDecimalOptions & {\n value: T\n step: number\n }\n\nexport function rangy(o: RangeOptions) {\n const wrap = (v: string | number) => rangy({ ...o, value: v })\n return {\n isInRange: isWithinRange(o.value, o),\n isAtMax: isAtMax(o.value, o),\n isAtMin: isAtMin(o.value, o),\n percent: valueToPercent(o.value, o),\n valueAsNumber: valueOf(o.value),\n value: formatDecimal(o.value, o),\n snapToStep: () => wrap(snapToStep(o.value, o.step)),\n increment: (s?: number) => wrap(increment(o.value, s || o.step)),\n decrement: (s?: number) => wrap(decrement(o.value, s || o.step)),\n toMax: () => wrap(o.max),\n toMin: () => wrap(o.min),\n fromPercent: (p: number) => wrap(percentToValue(p, o)),\n clamp: () => wrap(clamp(o.value, o)),\n }\n}\n", "export const nf = new Intl.NumberFormat(\"en-US\", { style: \"decimal\", maximumFractionDigits: 20 })\n\nexport function formatter(n: number) {\n return parseFloat(nf.format(n))\n}\n", "import { formatter } from \"./number-format\"\n\ntype Num<T extends string> = Record<T, number>\n\nexport const transform = (a: [number, number], b: [number, number]) => {\n const i = { min: a[0], max: a[1] }\n const o = { min: b[0], max: b[1] }\n return (v: number) => {\n if (i.min === i.max || o.min === o.max) return o.min\n const ratio = (o.max - o.min) / (i.max - i.min)\n return o.min + ratio * (v - i.min)\n }\n}\n\nexport function toRanges(o: Num<\"min\" | \"max\"> & { value: number[]; spacing: number }) {\n const spacing = o.spacing ?? 0\n return o.value.map((v, i) => {\n const min = i === 0 ? o.min : o.value[i - 1] + spacing\n const max = i === o.value.length - 1 ? o.max : o.value[i + 1] - spacing\n return { min, max, value: v }\n })\n}\n\nexport function toRangeArray(o: Num<\"min\" | \"max\" | \"step\">): number[] {\n let i = o.min\n const range: number[] = []\n while (i <= o.max) {\n range.push(i)\n i = formatter(i + o.step)\n }\n return range\n}\n", "import { RectEdge, RectValue } from \"./types\"\n\nconst point = (x: number, y: number) => ({ x, y })\n\nexport class Rect {\n static create(v: RectValue) {\n return new Rect(v)\n }\n protected constructor(private v: RectValue) {}\n set(n: Partial<RectValue>) {\n return new Rect(Object.assign({}, this.v, n))\n }\n clone() {\n return new Rect(this.v)\n }\n get x() {\n return this.v.x\n }\n get y() {\n return this.v.y\n }\n get width() {\n return this.v.width\n }\n get height() {\n return this.v.height\n }\n get minX() {\n return this.v.x\n }\n get midX() {\n return this.v.x + this.v.width / 2\n }\n get maxX() {\n return this.v.x + this.v.width\n }\n get minY() {\n return this.v.y\n }\n get midY() {\n return this.v.y + this.v.height / 2\n }\n get maxY() {\n return this.v.y + this.v.height\n }\n get center() {\n return point(this.midX, this.midY)\n }\n get centers() {\n const top = point(this.midX, this.minY)\n const right = point(this.maxX, this.midY)\n const bottom = point(this.midX, this.maxY)\n const left = point(this.minX, this.midY)\n return { top, right, bottom, left }\n }\n get corners() {\n const top = point(this.minX, this.minY)\n const right = point(this.maxX, this.minY)\n const bottom = point(this.maxX, this.maxY)\n const left = point(this.minX, this.maxY)\n return { top, right, bottom, left }\n }\n\n get edges() {\n const c = this.corners\n const top: RectEdge = [c.top, c.right]\n const right: RectEdge = [c.right, c.bottom]\n const bottom: RectEdge = [c.left, c.bottom]\n const left: RectEdge = [c.top, c.left]\n return { top, right, bottom, left }\n }\n}\n", "type Key = keyof CSSStyleDeclaration | (string & {})\ntype Styles = Record<Key, any>\ntype El = HTMLElement | null | undefined\n\nconst styleCache: WeakMap<HTMLElement, Styles> = new WeakMap()\n\nexport function getComputedStyle(el: El): Styles {\n if (!el) return {} as Styles\n let style: Styles | undefined = styleCache.get(el)\n if (!style) {\n const win = el?.ownerDocument.defaultView ?? window\n style = win.getComputedStyle(el) as Styles\n styleCache.set(el, style)\n }\n return style\n}\n", "import { Rect } from \"./rect\"\nimport { getComputedStyle } from \"./computed-style\"\n\nexport function getElementRect(el: HTMLElement, opts: ElementRectOptions = {}): Rect {\n return Rect.create(getClientRect(el, opts))\n}\n\nexport type ElementRectOptions = {\n /**\n * Whether to exclude the element's scrollbar size from the calculation.\n */\n excludeScrollbar?: boolean\n /**\n * Whether to exclude the element's borders from the calculation.\n */\n excludeBorders?: boolean\n}\n\nfunction getClientRect(el: HTMLElement, opts: ElementRectOptions = {}) {\n const { excludeScrollbar = false, excludeBorders = false } = opts\n\n const { x, y, width, height } = el.getBoundingClientRect()\n const r = { x, y, width, height }\n\n const style = getComputedStyle(el)\n\n const { borderLeftWidth, borderTopWidth, borderRightWidth, borderBottomWidth } = style\n\n const borderXWidth = sum(borderLeftWidth, borderRightWidth)\n const borderYWidth = sum(borderTopWidth, borderBottomWidth)\n\n if (excludeBorders) {\n r.width -= borderXWidth\n r.height -= borderYWidth\n r.x += px(borderLeftWidth)\n r.y += px(borderTopWidth)\n }\n\n if (excludeScrollbar) {\n const scrollbarWidth = el.offsetWidth - el.clientWidth - borderXWidth\n const scrollbarHeight = el.offsetHeight - el.clientHeight - borderYWidth\n r.width -= scrollbarWidth\n r.height -= scrollbarHeight\n }\n\n return r\n}\n\nconst px = (v: string) => parseFloat(v.replace(\"px\", \"\"))\n\nconst sum = (...vals: string[]) => vals.reduce((sum, v) => sum + (v ? px(v) : 0), 0)\n", "export function toArray<T>(v: T | T[] | undefined | null): T[] {\n if (!v) return []\n return Array.isArray(v) ? v : [v]\n}\n\nexport const fromLength = (length: number) => Array.from(Array(length).keys())\n\nexport const first = <T>(v: T[]): T | undefined => v[0]\n\nexport const last = <T>(v: T[]): T | undefined => v[v.length - 1]\n\nexport const isEmpty = <T>(v: T[]): boolean => v.length === 0\n\nexport const has = <T>(v: T[], t: any): boolean => v.indexOf(t) !== -1\n\nexport const add = <T>(v: T[], ...items: T[]): T[] => v.concat(items)\n\nexport const remove = <T>(v: T[], item: T): T[] => removeAt(v, v.indexOf(item))\n\nexport const removeAt = <T>(v: T[], i: number): T[] => {\n if (i > -1) v.splice(i, 1)\n return v\n}\n\nexport function clear<T>(v: T[]): T[] {\n while (v.length > 0) v.pop()\n return v\n}\n\nexport type IndexOptions = {\n step?: number\n loop?: boolean\n}\n\nexport function nextIndex<T>(v: T[], idx: number, opts: IndexOptions = {}): number {\n const { step = 1, loop = true } = opts\n const next = idx + step\n const len = v.length\n const last = len - 1\n if (idx === -1) return step > 0 ? 0 : last\n if (next < 0) return loop ? last : 0\n if (next >= len) return loop ? 0 : idx > len ? len : idx\n return next\n}\n\nexport function next<T>(v: T[], idx: number, opts: IndexOptions = {}): T | undefined {\n return v[nextIndex(v, idx, opts)]\n}\n\nexport function prevIndex<T>(v: T[], idx: number, opts: IndexOptions = {}): number {\n const { step = 1, loop = true } = opts\n return nextIndex(v, idx, { step: -step, loop })\n}\n\nexport function prev<T>(v: T[], index: number, opts: IndexOptions = {}): T | undefined {\n return v[prevIndex(v, index, opts)]\n}\n\nexport const chunk = <T>(v: T[], size: number): T[][] => {\n const res: T[][] = []\n return v.reduce((rows, value, index) => {\n if (index % size === 0) rows.push([value])\n else last(rows)?.push(value)\n return rows\n }, res)\n}\n", "export const isDev = () => process.env.NODE_ENV !== \"production\"\nexport const isDom = () => typeof window !== \"undefined\"\n\nexport const isArray = (v: any): v is any[] => Array.isArray(v)\nexport const isBoolean = (v: any): v is boolean => v === true || v === false\nexport const isObject = (v: any): v is Record<string, any> => !(v == null || typeof v !== \"object\" || isArray(v))\nexport const isNumber = (v: any): v is number => typeof v === \"number\" && !Number.isNaN(v)\nexport const isString = (v: any): v is string => typeof v === \"string\"\nexport const isFunction = (v: any): v is Function => typeof v === \"function\"\n\nexport const hasProp = <T extends string>(obj: any, prop: T): obj is Record<T, any> =>\n Object.prototype.hasOwnProperty.call(obj, prop)\n", "import { isDom } from \"./guard\"\n\nexport function getPlatform() {\n const agent = (navigator as any).userAgentData\n return agent?.platform ?? navigator.platform\n}\n\nconst pt = (v: RegExp) => isDom() && v.test(getPlatform())\nconst ua = (v: RegExp) => isDom() && v.test(navigator.userAgent)\nconst vn = (v: RegExp) => isDom() && v.test(navigator.vendor)\n\nexport const isTouchDevice = isDom() && !!navigator.maxTouchPoints\nexport const isMac = () => pt(/^Mac/) && !isTouchDevice\nexport const isIPhone = () => pt(/^iPhone/)\nexport const isSafari = () => isApple() && vn(/apple/i)\nexport const isFirefox = () => ua(/firefox\\//i)\nexport const isApple = () => pt(/mac|iphone|ipad|ipod/i)\nexport const isIos = () => isApple() && !isMac()\n", "import { hasProp, isDom, isObject } from \"./guard\"\nimport { isMac } from \"./platform\"\n\nexport const supportsPointerEvent = () => isDom() && window.onpointerdown === null\nexport const supportsTouchEvent = () => isDom() && window.ontouchstart === null\nexport const supportsMouseEvent = () => isDom() && window.onmousedown === null\n\nexport const isMouseEvent = (v: any): v is MouseEvent => isObject(v) && hasProp(v, \"button\")\nexport const isTouchEvent = (v: any): v is TouchEvent => isObject(v) && hasProp(v, \"touches\")\nexport const isLeftClick = (v: { button: number }) => v.button === 0\nexport const isRightClick = (v: { button: number }) => v.button === 2\nexport const isModifiedEvent = (v: Pick<KeyboardEvent, \"ctrlKey\" | \"metaKey\" | \"altKey\">) =>\n v.ctrlKey || v.altKey || v.metaKey\n\nexport const isCtrlKey = (v: Pick<KeyboardEvent, \"ctrlKey\" | \"metaKey\">) =>\n isMac() ? v.metaKey && !v.ctrlKey : v.ctrlKey && !v.metaKey\n", "export const runIfFn = <T>(\n v: T | undefined,\n ...a: T extends (...a: any[]) => void ? Parameters<T> : never\n): T extends (...a: any[]) => void ? NonNullable<ReturnType<T>> : NonNullable<T> => {\n const res = typeof v === \"function\" ? v(...a) : v\n return res ?? undefined\n}\n\nexport const cast = <T>(v: unknown): T => v as T\n\nexport const noop = () => {}\n\nexport const pipe =\n <T>(...fns: Array<(a: T) => T>) =>\n (v: T) =>\n fns.reduce((a, b) => b(a), v)\n\nexport const callAll =\n <T extends (...a: any[]) => void>(...fns: (T | undefined)[]) =>\n (...a: Parameters<T>) => {\n fns.forEach(function (fn) {\n fn?.(...a)\n })\n }\n\nexport const uuid = /*#__PURE__*/ (() => {\n let id = 0\n return () => {\n id++\n return id.toString(36)\n }\n})()\n\nexport function merge<T, U>(origin: T, patch: U): T & U {\n if (!(typeof patch === \"object\")) return patch as any\n const result = !(typeof origin === \"object\") ? {} : Object.assign({}, origin)\n for (const key of Object.keys(patch)) {\n const value = patch[key]\n const src = result[key]\n if (value === null) delete result[key]\n else if (Array.isArray(value) || Array.isArray(src)) result[key] = (src || []).concat(value || [])\n else result[key] = merge(src, value)\n }\n return result as any\n}\n", "export function warn(m: string): void\nexport function warn(c: boolean, m: string): void\nexport function warn(...a: any[]): void {\n const m = a.length === 1 ? a[0] : a[1]\n const c = a.length === 2 ? a[0] : true\n if (c && process.env.NODE_ENV !== \"production\") {\n console.warn(m)\n }\n}\n\nexport function invariant(m: string): void\nexport function invariant(c: boolean, m: string): void\nexport function invariant(...a: any[]): void {\n const m = a.length === 1 ? a[0] : a[1]\n const c = a.length === 2 ? a[0] : true\n if (c && process.env.NODE_ENV !== \"production\") {\n throw new Error(m)\n }\n}\n", "import { isTouchEvent } from \"@zag-js/utils\"\nimport { Point } from \"./types\"\n\nexport function distance(a: Point, b: Point = { x: 0, y: 0 }): number {\n return Math.sqrt(Math.pow(a.x - b.x, 2) + Math.pow(a.y - b.y, 2))\n}\n\nexport function closest(...pts: Point[]) {\n return (a: Point): Point => {\n const ds = pts.map((b) => distance(b, a))\n const c = Math.min.apply(Math, ds)\n return pts[ds.indexOf(c)]\n }\n}\n\nconst fallback = { pageX: 0, pageY: 0, clientX: 0, clientY: 0 }\n\nexport function getEventPoint(e: AnyPointerEvent, t: PointType = \"page\"): Point {\n const p = isTouchEvent(e) ? e.touches[0] || e.changedTouches[0] || fallback : e\n return { x: p[`${t}X`], y: p[`${t}Y`] }\n}\n\nexport function relativeToNode(p: Point, el: HTMLElement): RelativeValue {\n const dx = p.x - el.offsetLeft - el.clientLeft + el.scrollLeft\n const dy = p.y - el.offsetTop - el.clientTop + el.scrollTop\n return {\n point: { x: dx, y: dy },\n progress: { x: dx / el.offsetWidth, y: dy / el.offsetHeight },\n }\n}\n\ntype AnyPointerEvent = MouseEvent | TouchEvent | PointerEvent\n\ntype RelativeValue = {\n point: Point\n progress: { x: number; y: number }\n}\n\ntype PointType = \"page\" | \"client\"\n", "import { Rect } from \"./rect\"\nimport type { Point, RectInset, SymmetricRectInset } from \"./types\"\n\nexport const isSymmetric = (v: any): v is SymmetricRectInset => \"dx\" in v || \"dy\" in v\n\nexport function inset(r: Rect, i: RectInset | SymmetricRectInset): Rect {\n const v = isSymmetric(i) ? { left: i.dx, right: i.dx, top: i.dy, bottom: i.dy } : i\n const { top = 0, right = 0, bottom = 0, left = 0 } = v\n return Rect.create({ x: r.x + left, y: r.y + top, width: r.width - left - right, height: r.height - top - bottom })\n}\n\nexport function expand(r: Rect, v: number | SymmetricRectInset): Rect {\n const value = typeof v === \"number\" ? { dx: -v, dy: -v } : v\n return inset(r, value)\n}\n\nexport function shrink(r: Rect, v: number | SymmetricRectInset): Rect {\n const value = typeof v === \"number\" ? { dx: -v, dy: -v } : v\n return inset(r, value)\n}\n\nexport function shift(r: Rect, o: Partial<Point>): Rect {\n const { x = 0, y = 0 } = o\n return Rect.create({ x: r.x + x, y: r.y + y, width: r.width, height: r.height })\n}\n", "import { Point } from \"./types\"\n\nexport function withinPolygon(polygon: Point[], point: Point) {\n const { x, y } = point\n let c = false\n\n for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\n const xi = polygon[i].x\n const yi = polygon[i].y\n const xj = polygon[j].x\n const yj = polygon[j].y\n\n if (yi > y !== yj > y && x < ((xj - xi) * (y - yi)) / (yj - yi) + xi) {\n c = !c\n }\n }\n return c\n}\n\nfunction createPolygonElement() {\n const id = \"debug-polygon\"\n const existingPolygon = document.getElementById(id)\n if (existingPolygon) {\n return existingPolygon\n }\n const svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\")\n Object.assign(svg.style, {\n top: \"0\",\n left: \"0\",\n width: \"100%\",\n height: \"100%\",\n opacity: \"0.15\",\n position: \"fixed\",\n pointerEvents: \"none\",\n })\n\n const polygon = document.createElementNS(\"http://www.w3.org/2000/svg\", \"polygon\")\n polygon.setAttribute(\"id\", id)\n polygon.setAttribute(\"points\", \"0,0 0,0\")\n svg.appendChild(polygon)\n document.body.appendChild(svg)\n return polygon\n}\n\nexport function debugPolygon(polygon: Point[]) {\n const el = createPolygonElement()\n const points = polygon.map((point) => `${point.x},${point.y}`).join(\" \")\n el.setAttribute(\"points\", points)\n}\n", "import type * as React from \"react\"\n\ntype Dict<T = any> = Record<string, T>\n\ntype Booleanish = boolean | \"true\" | \"false\"\n\ntype Omit<T, K extends keyof T> = { [P in Exclude<keyof T, K>]?: T[P] }\n\ntype WithStyle<T extends { style?: any }> = Omit<T, \"style\"> & {\n style?: T[\"style\"] & {\n [prop: string]: string | number | undefined\n }\n}\n\ntype DataAttr = {\n \"data-uid\"?: string\n \"data-name\"?: string\n \"data-ownedby\"?: string\n \"data-selected\"?: Booleanish\n \"data-expanded\"?: Booleanish\n \"data-highlighted\"?: Booleanish\n \"data-readonly\"?: Booleanish\n \"data-invalid\"?: Booleanish\n \"data-hover\"?: Booleanish\n \"data-active\"?: Booleanish\n \"data-focus\"?: Booleanish\n \"data-disabled\"?: Booleanish\n \"data-type\"?: string\n \"data-value\"?: string | number\n \"data-valuetext\"?: string\n \"data-open\"?: Booleanish\n \"data-placement\"?: string\n \"data-orientation\"?: \"horizontal\" | \"vertical\"\n \"data-label\"?: string\n \"data-checked\"?: Booleanish\n \"data-pressed\"?: Booleanish\n \"data-state\"?: string | null\n \"data-half\"?: Booleanish\n \"data-count\"?: number\n \"data-controls\"?: string\n \"data-part\"?: string\n \"data-index\"?: number\n \"data-complete\"?: Booleanish\n \"data-empty\"?: Booleanish\n \"data-placeholder-shown\"?: Booleanish\n}\n\ntype JSXElementAttributes = DataAttr & React.HTMLAttributes<HTMLElement>\ntype JSXButtonAttributes = DataAttr & React.ButtonHTMLAttributes<HTMLButtonElement>\ntype JSXInputAttributes = DataAttr & React.InputHTMLAttributes<HTMLInputElement>\ntype JSXLabelAttributes = DataAttr & React.LabelHTMLAttributes<HTMLLabelElement>\ntype JSXOutputAttributes = DataAttr & React.OutputHTMLAttributes<HTMLOutputElement>\n\nexport type PropTypes = Record<\"button\" | \"label\" | \"input\" | \"output\" | \"element\", Dict>\n\nexport type ReactPropTypes = {\n button: JSXButtonAttributes\n label: JSXLabelAttributes\n input: JSXInputAttributes\n output: JSXOutputAttributes\n element: JSXElementAttributes\n}\n\nexport type NormalizeProps = {\n button<T extends PropTypes>(props: WithStyle<JSXButtonAttributes>): T[\"button\"]\n label<T extends PropTypes>(props: WithStyle<JSXLabelAttributes>): T[\"label\"]\n input<T extends PropTypes>(props: WithStyle<JSXInputAttributes>): T[\"input\"]\n output<T extends PropTypes>(props: WithStyle<JSXOutputAttributes>): T[\"output\"]\n element<T extends PropTypes>(props: WithStyle<JSXElementAttributes>): T[\"element\"]\n}\n\nexport function createNormalizer(fn: (props: Dict) => Dict): NormalizeProps {\n return new Proxy({} as any, {\n get() {\n return fn\n },\n })\n}\n\nexport const normalizeProp = createNormalizer((v) => v)\n", "export type ControlProp =\n | { type: \"boolean\"; label?: string; defaultValue: boolean }\n | { type: \"string\"; label?: string; defaultValue: string; placeholder?: string }\n | { type: \"select\"; options: readonly string[]; defaultValue: string; label?: string }\n | { type: \"multiselect\"; options: readonly string[]; defaultValue: string[]; label?: string }\n | { type: \"number\"; label?: string; defaultValue: number; min?: number; max?: number }\n\nexport type ControlRecord = Record<string, ControlProp>\n\nexport type ControlValue<T extends ControlRecord> = {\n [K in keyof T]: T[K] extends { type: \"boolean\" }\n ? boolean\n : T[K] extends { type: \"string\" }\n ? string\n : T[K] extends { type: \"select\" }\n ? T[K][\"options\"][number]\n : T[K] extends { type: \"multiselect\" }\n ? T[K][\"options\"][number][]\n : T[K] extends { type: \"number\" }\n ? number\n : never\n}\n\nexport function defineControls<T extends ControlRecord>(config: T) {\n return config\n}\n", "export function toArray<T>(v: T | T[] | undefined | null): T[] {\n if (!v) return []\n return Array.isArray(v) ? v : [v]\n}\n\nexport const fromLength = (length: number) => Array.from(Array(length).keys())\n\nexport const first = <T>(v: T[]): T | undefined => v[0]\n\nexport const last = <T>(v: T[]): T | undefined => v[v.length - 1]\n\nexport const isEmpty = <T>(v: T[]): boolean => v.length === 0\n\nexport const has = <T>(v: T[], t: any): boolean => v.indexOf(t) !== -1\n\nexport const add = <T>(v: T[], ...items: T[]): T[] => v.concat(items)\n\nexport const remove = <T>(v: T[], item: T): T[] => removeAt(v, v.indexOf(item))\n\nexport const removeAt = <T>(v: T[], i: number): T[] => {\n if (i > -1) v.splice(i, 1)\n return v\n}\n\nexport function clear<T>(v: T[]): T[] {\n while (v.length > 0) v.pop()\n return v\n}\n\nexport type IndexOptions = {\n step?: number\n loop?: boolean\n}\n\nexport function nextIndex<T>(v: T[], idx: number, opts: IndexOptions = {}): number {\n const { step = 1, loop = true } = opts\n const next = idx + step\n const len = v.length\n const last = len - 1\n if (idx === -1) return step > 0 ? 0 : last\n if (next < 0) return loop ? last : 0\n if (next >= len) return loop ? 0 : idx > len ? len : idx\n return next\n}\n\nexport function next<T>(v: T[], idx: number, opts: IndexOptions = {}): T | undefined {\n return v[nextIndex(v, idx, opts)]\n}\n\nexport function prevIndex<T>(v: T[], idx: number, opts: IndexOptions = {}): number {\n const { step = 1, loop = true } = opts\n return nextIndex(v, idx, { step: -step, loop })\n}\n\nexport function prev<T>(v: T[], index: number, opts: IndexOptions = {}): T | undefined {\n return v[prevIndex(v, index, opts)]\n}\n\nexport const chunk = <T>(v: T[], size: number): T[][] => {\n const res: T[][] = []\n return v.reduce((rows, value, index) => {\n if (index % size === 0) rows.push([value])\n else last(rows)?.push(value)\n return rows\n }, res)\n}\n", "export const isDev = () => process.env.NODE_ENV !== \"production\"\nexport const isDom = () => typeof window !== \"undefined\"\n\nexport const isArray = (v: any): v is any[] => Array.isArray(v)\nexport const isBoolean = (v: any): v is boolean => v === true || v === false\nexport const isObject = (v: any): v is Record<string, any> => !(v == null || typeof v !== \"object\" || isArray(v))\nexport const isNumber = (v: any): v is number => typeof v === \"number\" && !Number.isNaN(v)\nexport const isString = (v: any): v is string => typeof v === \"string\"\nexport const isFunction = (v: any): v is Function => typeof v === \"function\"\n\nexport const hasProp = <T extends string>(obj: any, prop: T): obj is Record<T, any> =>\n Object.prototype.hasOwnProperty.call(obj, prop)\n", "import { isDom } from \"./guard\"\n\nexport function getPlatform() {\n const agent = (navigator as any).userAgentData\n return agent?.platform ?? navigator.platform\n}\n\nconst pt = (v: RegExp) => isDom() && v.test(getPlatform())\nconst ua = (v: RegExp) => isDom() && v.test(navigator.userAgent)\nconst vn = (v: RegExp) => isDom() && v.test(navigator.vendor)\n\nexport const isTouchDevice = isDom() && !!navigator.maxTouchPoints\nexport const isMac = () => pt(/^Mac/) && !isTouchDevice\nexport const isIPhone = () => pt(/^iPhone/)\nexport const isSafari = () => isApple() && vn(/apple/i)\nexport const isFirefox = () => ua(/firefox\\//i)\nexport const isApple = () => pt(/mac|iphone|ipad|ipod/i)\nexport const isIos = () => isApple() && !isMac()\n", "import { hasProp, isDom, isObject } from \"./guard\"\nimport { isMac } from \"./platform\"\n\nexport const supportsPointerEvent = () => isDom() && window.onpointerdown === null\nexport const supportsTouchEvent = () => isDom() && window.ontouchstart === null\nexport const supportsMouseEvent = () => isDom() && window.onmousedown === null\n\nexport const isMouseEvent = (v: any): v is MouseEvent => isObject(v) && hasProp(v, \"button\")\nexport const isTouchEvent = (v: any): v is TouchEvent => isObject(v) && hasProp(v, \"touches\")\nexport const isLeftClick = (v: { button: number }) => v.button === 0\nexport const isRightClick = (v: { button: number }) => v.button === 2\nexport const isModifiedEvent = (v: Pick<KeyboardEvent, \"ctrlKey\" | \"metaKey\" | \"altKey\">) =>\n v.ctrlKey || v.altKey || v.metaKey\n\nexport const isCtrlKey = (v: Pick<KeyboardEvent, \"ctrlKey\" | \"metaKey\">) =>\n isMac() ? v.metaKey && !v.ctrlKey : v.ctrlKey && !v.metaKey\n", "export const runIfFn = <T>(\n v: T | undefined,\n ...a: T extends (...a: any[]) => void ? Parameters<T> : never\n): T extends (...a: any[]) => void ? NonNullable<ReturnType<T>> : NonNullable<T> => {\n const res = typeof v === \"function\" ? v(...a) : v\n return res ?? undefined\n}\n\nexport const cast = <T>(v: unknown): T => v as T\n\nexport const noop = () => {}\n\nexport const pipe =\n <T>(...fns: Array<(a: T) => T>) =>\n (v: T) =>\n fns.reduce((a, b) => b(a), v)\n\nexport const callAll =\n <T extends (...a: any[]) => void>(...fns: (T | undefined)[]) =>\n (...a: Parameters<T>) => {\n fns.forEach(function (fn) {\n fn?.(...a)\n })\n }\n\nexport const uuid = /*#__PURE__*/ (() => {\n let id = 0\n return () => {\n id++\n return id.toString(36)\n }\n})()\n\nexport function merge<T, U>(origin: T, patch: U): T & U {\n if (!(typeof patch === \"object\")) return patch as any\n const result = !(typeof origin === \"object\") ? {} : Object.assign({}, origin)\n for (const key of Object.keys(patch)) {\n const value = patch[key]\n const src = result[key]\n if (value === null) delete result[key]\n else if (Array.isArray(value) || Array.isArray(src)) result[key] = (src || []).concat(value || [])\n else result[key] = merge(src, value)\n }\n return result as any\n}\n", "export function warn(m: string): void\nexport function warn(c: boolean, m: string): void\nexport function warn(...a: any[]): void {\n const m = a.length === 1 ? a[0] : a[1]\n const c = a.length === 2 ? a[0] : true\n if (c && process.env.NODE_ENV !== \"production\") {\n console.warn(m)\n }\n}\n\nexport function invariant(m: string): void\nexport function invariant(c: boolean, m: string): void\nexport function invariant(...a: any[]): void {\n const m = a.length === 1 ? a[0] : a[1]\n const c = a.length === 2 ? a[0] : true\n if (c && process.env.NODE_ENV !== \"production\") {\n throw new Error(m)\n }\n}\n", "import { MAX_Z_INDEX } from \"@zag-js/dom-utils\"\nimport { roundToDevicePixel, wrap } from \"@zag-js/number-utils\"\nimport { MachineContext as Ctx } from \"./number-input.types\"\n\ntype InputEl = HTMLInputElement | null\ntype ButtonEl = HTMLButtonElement | null\n\nexport const dom = {\n getDoc: (ctx: Ctx) => ctx.doc ?? document,\n getWin: (ctx: Ctx) => dom.getDoc(ctx).defaultView ?? window,\n getRootNode: (ctx: Ctx) => ctx.rootNode ?? dom.getDoc(ctx),\n\n getRootId: (ctx: Ctx) => ctx.ids?.root ?? `number-input:${ctx.uid}`,\n getInputId: (ctx: Ctx) => ctx.ids?.input ?? `number-input:${ctx.uid}:input`,\n getIncButtonId: (ctx: Ctx) => ctx.ids?.incBtn ?? `number-input:${ctx.uid}:inc-btn`,\n getDecButtonId: (ctx: Ctx) => ctx.ids?.decBtn ?? `number-input:${ctx.uid}:dec-btn`,\n getScrubberId: (ctx: Ctx) => ctx.ids?.scrubber ?? `number-input:${ctx.uid}:scrubber`,\n getCursorId: (ctx: Ctx) => `number-input:${ctx.uid}:cursor`,\n getLabelId: (ctx: Ctx) => ctx.ids?.label ?? `number-input:${ctx.uid}:label`,\n\n getInputEl: (ctx: Ctx) => dom.getRootNode(ctx).getElementById(dom.getInputId(ctx)) as InputEl,\n getIncButtonEl: (ctx: Ctx) => dom.getRootNode(ctx).getElementById(dom.getIncButtonId(ctx)) as ButtonEl,\n getDecButtonEl: (ctx: Ctx) => dom.getRootNode(ctx).getElementById(dom.getDecButtonId(ctx)) as ButtonEl,\n getScrubberEl: (ctx: Ctx) => dom.getRootNode(ctx).getElementById(dom.getScrubberId(ctx)),\n getCursorEl: (ctx: Ctx) => dom.getDoc(ctx).getElementById(dom.getCursorId(ctx)),\n\n getMousementValue(ctx: Ctx, event: MouseEvent) {\n const x = roundToDevicePixel(event.movementX)\n const y = roundToDevicePixel(event.movementY)\n\n let hint = x > 0 ? \"increment\" : x < 0 ? \"decrement\" : null\n\n if (ctx.isRtl && hint === \"increment\") hint = \"decrement\"\n if (ctx.isRtl && hint === \"decrement\") hint = \"increment\"\n\n const point = {\n x: ctx.scrubberCursorPoint!.x + x,\n y: ctx.scrubberCursorPoint!.y + y,\n }\n\n const win = dom.getWin(ctx)\n const width = win.innerWidth\n const half = roundToDevicePixel(7.5)\n point.x = wrap(point.x + half, width) - half\n\n return { hint, point }\n },\n\n createVirtualCursor(ctx: Ctx) {\n const doc = dom.getDoc(ctx)\n const el = doc.createElement(\"div\")\n el.className = \"scrubber--cursor\"\n el.id = dom.getCursorId(ctx)\n\n Object.assign(el.style, {\n width: \"15px\",\n height: \"15px\",\n position: \"fixed\",\n pointerEvents: \"none\",\n left: \"0px\",\n top: \"0px\",\n zIndex: MAX_Z_INDEX,\n transform: ctx.scrubberCursorPoint\n ? `translate3d(${ctx.scrubberCursorPoint.x}px, ${ctx.scrubberCursorPoint.y}px, 0px)`\n : undefined,\n willChange: \"transform\",\n })\n\n el.innerHTML = `\n <svg width=\"46\" height=\"15\" style=\"left: -15.5px; position: absolute; top: 0; filter: drop-shadow(rgba(0, 0, 0, 0.4) 0px 1px 1.1px);\">\n <g transform=\"translate(2 3)\">\n <path fill-rule=\"evenodd\" d=\"M 15 4.5L 15 2L 11.5 5.5L 15 9L 15 6.5L 31 6.5L 31 9L 34.5 5.5L 31 2L 31 4.5Z\" style=\"stroke-width: 2px; stroke: white;\"></path>\n <path fill-rule=\"evenodd\" d=\"M 15 4.5L 15 2L 11.5 5.5L 15 9L 15 6.5L 31 6.5L 31 9L 34.5 5.5L 31 2L 31 4.5Z\"></path>\n </g>\n </svg>`\n\n doc.body.appendChild(el)\n },\n}\n", "import { clamp, decrement, increment, formatDecimal } from \"@zag-js/number-utils\"\nimport { isModifiedEvent } from \"@zag-js/utils\"\nimport type { KeyboardEvent } from \"react\"\nimport type { MachineContext as Ctx } from \"./number-input.types\"\n\nexport const utils = {\n isValidNumericEvent: (ctx: Ctx, event: KeyboardEvent) => {\n if (event.key == null) return true\n const isModifier = isModifiedEvent(event)\n const isSingleKey = event.key.length === 1\n if (isModifier || !isSingleKey) return true\n return ctx.validateCharacter?.(event.key) ?? utils.isFloatingPoint(event.key)\n },\n isFloatingPoint: (v: string) => /^[Ee0-9+\\-.]$/.test(v),\n sanitize: (ctx: Ctx, value: string) => {\n return value\n .split(\"\")\n .filter(ctx.validateCharacter ?? utils.isFloatingPoint)\n .join(\"\")\n },\n increment: (ctx: Ctx, step?: number) => {\n const value = increment(ctx.value, step ?? ctx.step)\n return formatDecimal(clamp(value, ctx), ctx)\n },\n decrement: (ctx: Ctx, step?: number) => {\n const value = decrement(ctx.value, step ?? ctx.step)\n return formatDecimal(clamp(value, ctx), ctx)\n },\n clamp: (ctx: Ctx) => {\n return formatDecimal(clamp(ctx.value, ctx), ctx)\n },\n parse: (ctx: Ctx, value: string) => {\n return ctx.parse?.(value) ?? value\n },\n format: (ctx: Ctx, value: string | number) => {\n const _val = value.toString()\n return ctx.format?.(_val) ?? _val\n },\n round: (ctx: Ctx) => {\n return formatDecimal(ctx.value, ctx)\n },\n}\n", "import { ariaAttr, dataAttr, EventKeyMap, getEventStep, getNativeEvent } from \"@zag-js/dom-utils\"\nimport { roundToDevicePixel } from \"@zag-js/number-utils\"\nimport { getEventPoint } from \"@zag-js/rect-utils\"\nimport { normalizeProp, PropTypes, ReactPropTypes } from \"@zag-js/types\"\nimport { isIos, isLeftClick } from \"@zag-js/utils\"\nimport { dom } from \"./number-input.dom\"\nimport { Send, State } from \"./number-input.types\"\nimport { utils } from \"./number-input.utils\"\n\nexport function connect<T extends PropTypes = ReactPropTypes>(state: State, send: Send, normalize = normalizeProp) {\n const isFocused = state.hasTag(\"focus\")\n const isInvalid = state.context.isOutOfRange || !!state.context.invalid\n\n const isDisabled = !!state.context.disabled\n const isIncrementDisabled = isDisabled || !state.context.canIncrement\n const isDecrementDisabled = isDisabled || !state.context.canDecrement\n\n const messages = state.context.messages\n\n return {\n isFocused,\n isInvalid,\n value: state.context.formattedValue,\n valueAsNumber: state.context.valueAsNumber,\n setValue(value: string | number) {\n send({ type: \"SET_VALUE\", value: value.toString() })\n },\n clearValue() {\n send(\"CLEAR_VALUE\")\n },\n increment() {\n send(\"INCREMENT\")\n },\n decrement() {\n send(\"DECREMENT\")\n },\n setToMax() {\n send({ type: \"SET_VALUE\", value: state.context.max })\n },\n setToMin() {\n send({ type: \"SET_VALUE\", value: state.context.min })\n },\n focus() {\n dom.getInputEl(state.context)?.focus()\n },\n\n rootProps: normalize.element<T>({\n id: dom.getRootId(state.context),\n \"data-part\": \"root\",\n \"data-disabled\": dataAttr(isDisabled),\n }),\n\n labelProps: normalize.label<T>({\n \"data-part\": \"label\",\n \"data-disabled\": dataAttr(isDisabled),\n \"data-invalid\": dataAttr(isInvalid),\n id: dom.getLabelId(state.context),\n htmlFor: dom.getInputId(state.context),\n }),\n\n groupProps: normalize.element<T>({\n \"data-part\": \"group\",\n role: \"group\",\n \"aria-disabled\": isDisabled,\n \"data-disabled\": dataAttr(isDisabled),\n \"data-invalid\": dataAttr(isInvalid),\n \"aria-invalid\": ariaAttr(state.context.invalid),\n }),\n\n inputProps: normalize.input<T>({\n \"data-part\": \"input\",\n name: state.context.name,\n id: dom.getInputId(state.context),\n role: \"spinbutton\",\n value: state.context.formattedValue,\n pattern: state.context.pattern,\n inputMode: state.context.inputMode,\n \"aria-invalid\": isInvalid || undefined,\n \"data-invalid\": dataAttr(isInvalid),\n disabled: isDisabled,\n \"data-disabled\": dataAttr(isDisabled),\n readOnly: !!state.context.readonly,\n autoComplete: \"off\",\n autoCorrect: \"off\",\n spellCheck: \"false\",\n type: \"text\",\n \"aria-roledescription\": !isIos() ? \"number field\" : undefined,\n \"aria-valuemin\": state.context.min,\n \"aria-valuemax\": state.context.max,\n \"aria-valuenow\": isNaN(state.context.valueAsNumber) ? undefined : state.context.valueAsNumber,\n \"aria-valuetext\": state.context.valueText,\n onFocus() {\n send(\"FOCUS\")\n },\n onBlur() {\n send(\"BLUR\")\n },\n onChange(event) {\n const evt = getNativeEvent(event)\n if (evt.isComposing) return\n send({ type: \"CHANGE\", target: event.currentTarget, hint: \"set\" })\n },\n onKeyDown(event) {\n const evt = getNativeEvent(event)\n if (evt.isComposing) return\n\n if (!utils.isValidNumericEvent(state.context, event)) {\n event.preventDefault()\n }\n\n const step = getEventStep(event) * state.context.step\n\n const keyMap: EventKeyMap = {\n ArrowUp() {\n send({ type: \"ARROW_UP\", step })\n },\n ArrowDown() {\n send({ type: \"ARROW_DOWN\", step })\n },\n Home() {\n send(\"HOME\")\n },\n End() {\n send(\"END\")\n },\n }\n\n const exec = keyMap[event.key]\n\n if (exec) {\n exec(event)\n event.preventDefault()\n }\n },\n }),\n\n decrementButtonProps: normalize.button<T>({\n \"data-part\": \"spin-button\",\n \"data-type\": \"decrement\",\n id: dom.getDecButtonId(state.context),\n disabled: isDecrementDisabled,\n \"data-disabled\": dataAttr(isDecrementDisabled),\n \"aria-label\": messages.decrementLabel,\n type: \"button\",\n tabIndex: -1,\n \"aria-controls\": dom.getInputId(state.context),\n onPointerDown(event) {\n if (isDecrementDisabled) return\n send(isLeftClick(event) ? { type: \"PRESS_DOWN\", hint: \"decrement\" } : { type: \"FOCUS\" })\n event.preventDefault()\n },\n onPointerUp() {\n send({ type: \"PRESS_UP\", hint: \"decrement\" })\n },\n onPointerLeave() {\n if (isDecrementDisabled) return\n send({ type: \"PRESS_UP\", hint: \"decrement\" })\n },\n }),\n\n incrementButtonProps: normalize.button<T>({\n \"data-part\": \"spin-button\",\n \"data-type\": \"increment\",\n id: dom.getIncButtonId(state.context),\n disabled: isIncrementDisabled,\n \"data-disabled\": dataAttr(isIncrementDisabled),\n \"aria-label\": messages.incrementLabel,\n type: \"button\",\n tabIndex: -1,\n \"aria-controls\": dom.getInputId(state.context),\n onPointerDown(event) {\n if (isIncrementDisabled) return\n send(isLeftClick(event) ? { type: \"PRESS_DOWN\", hint: \"increment\" } : { type: \"FOCUS\" })\n event.preventDefault()\n },\n onPointerUp() {\n send({ type: \"PRESS_UP\", hint: \"increment\" })\n },\n onPointerLeave() {\n send({ type: \"PRESS_UP\", hint: \"increment\" })\n },\n }),\n\n scrubberProps: normalize.element<T>({\n \"data-disabled\": dataAttr(isDisabled),\n \"data-part\": \"scrubber\",\n id: dom.getScrubberId(state.context),\n role: \"presentation\",\n onMouseDown(event) {\n if (isDisabled) return\n const evt = getNativeEvent(event)\n event.preventDefault()\n const point = getEventPoint(evt)\n\n point.x = point.x - roundToDevicePixel(7.5)\n point.y = point.y - roundToDevicePixel(7.5)\n\n send({ type: \"PRESS_DOWN_SCRUBBER\", point })\n },\n style: {\n cursor: isDisabled ? undefined : \"ew-resize\",\n },\n }),\n }\n}\n", "import { choose, createMachine, guards, ref } from \"@zag-js/core\"\nimport { addDomEvent, observeAttributes, raf, requestPointerLock } from \"@zag-js/dom-utils\"\nimport { isAtMax, isAtMin, isWithinRange, valueOf } from \"@zag-js/number-utils\"\nimport { isSafari, pipe, supportsPointerEvent } from \"@zag-js/utils\"\nimport { dom } from \"./number-input.dom\"\nimport type { MachineContext, MachineState, UserDefinedContext } from \"./number-input.types\"\nimport { utils } from \"./number-input.utils\"\n\nconst { not, and } = guards\n\nexport function machine(ctx: UserDefinedContext = {}) {\n return createMachine<MachineContext, MachineState>(\n {\n id: \"number-input\",\n initial: \"unknown\",\n context: {\n uid: \"\",\n dir: \"ltr\",\n focusInputOnChange: true,\n clampValueOnBlur: true,\n allowOverflow: false,\n inputMode: \"decimal\",\n pattern: \"[0-9]*(.[0-9]+)?\",\n hint: null,\n value: \"\",\n step: 1,\n min: Number.MIN_SAFE_INTEGER,\n max: Number.MAX_SAFE_INTEGER,\n scrubberCursorPoint: null,\n invalid: false,\n ...ctx,\n messages: {\n incrementLabel: \"increment value\",\n decrementLabel: \"decrease value\",\n ...ctx.messages,\n },\n },\n\n computed: {\n isRtl: (ctx) => ctx.dir === \"rtl\",\n valueAsNumber: (ctx) => valueOf(ctx.value),\n isAtMin: (ctx) => isAtMin(ctx.value, ctx),\n isAtMax: (ctx) => isAtMax(ctx.value, ctx),\n isOutOfRange: (ctx) => !isWithinRange(ctx.value, ctx),\n canIncrement: (ctx) => ctx.allowOverflow || !ctx.isAtMax,\n canDecrement: (ctx) => ctx.allowOverflow || !ctx.isAtMin,\n valueText: (ctx) => ctx.messages.valueText?.(ctx.value),\n formattedValue: (ctx) => ctx.format?.(ctx.value).toString() ?? ctx.value,\n },\n\n watch: {\n value: [\"invokeOnChange\"],\n isOutOfRange: [\"invokeOnInvalid\"],\n },\n\n on: {\n SET_VALUE: {\n actions: [\"setValue\", \"setHintToSet\"],\n },\n CLEAR_VALUE: {\n actions: [\"clearValue\"],\n },\n INCREMENT: {\n actions: [\"increment\"],\n },\n DECREMENT: {\n actions: [\"decrement\"],\n },\n },\n\n states: {\n unknown: {\n on: {\n SETUP: {\n target: \"idle\",\n actions: [\"setupDocument\", \"syncInputValue\"],\n },\n },\n },\n\n idle: {\n on: {\n PRESS_DOWN: {\n target: \"before:spin\",\n actions: [\"focusInput\", \"setHint\"],\n },\n PRESS_DOWN_SCRUBBER: {\n target: \"scrubbing\",\n actions: [\"focusInput\", \"setHint\", \"setCursorPoint\"],\n },\n FOCUS: \"focused\",\n },\n },\n\n focused: {\n tags: [\"focus\"],\n entry: \"focusInput\",\n activities: \"attachWheelListener\",\n on: {\n PRESS_DOWN: {\n target: \"before:spin\",\n actions: [\"focusInput\", \"setHint\"],\n },\n PRESS_DOWN_SCRUBBER: {\n target: \"scrubbing\",\n actions: [\"focusInput\", \"setHint\", \"setCursorPoint\"],\n },\n ARROW_UP: {\n actions: \"increment\",\n },\n ARROW_DOWN: {\n actions: \"decrement\",\n },\n HOME: {\n actions: \"setToMin\",\n },\n END: {\n actions: \"setToMax\",\n },\n CHANGE: {\n actions: [\"setValue\", \"setHint\"],\n },\n BLUR: [\n {\n guard: \"isInvalidExponential\",\n target: \"idle\",\n actions: [\"clearValue\", \"clearHint\"],\n },\n {\n guard: and(\"clampOnBlur\", not(\"isInRange\")),\n target: \"idle\",\n actions: [\"clampValue\", \"clearHint\"],\n },\n {\n target: \"idle\",\n actions: \"roundValue\",\n },\n ],\n },\n },\n\n \"before:spin\": {\n tags: [\"focus\"],\n activities: \"trackButtonDisabled\",\n entry: choose([\n { guard: \"isIncrementHint\", actions: \"increment\" },\n { guard: \"isDecrementHint\", actions: \"decrement\" },\n ]),\n after: {\n CHANGE_DELAY: {\n target: \"spinning\",\n guard: \"isInRange\",\n },\n },\n on: {\n PRESS_UP: {\n target: \"focused\",\n actions: \"clearHint\",\n },\n },\n },\n\n spinning: {\n tags: [\"focus\"],\n activities: \"trackButtonDisabled\",\n every: [\n {\n delay: \"CHANGE_INTERVAL\",\n guard: and(not(\"isAtMin\"), \"isIncrementHint\"),\n actions: \"increment\",\n },\n {\n delay: \"CHANGE_INTERVAL\",\n guard: and(not(\"isAtMax\"), \"isDecrementHint\"),\n actions: \"decrement\",\n },\n ],\n on: {\n PRESS_UP: {\n target: \"focused\",\n actions: \"clearHint\",\n },\n },\n },\n\n scrubbing: {\n tags: [\"focus\"],\n entry: [\"addCustomCursor\", \"disableTextSelection\"],\n exit: [\"removeCustomCursor\", \"restoreTextSelection\"],\n activities: [\"activatePointerLock\", \"trackMousemove\"],\n on: {\n POINTER_UP_SCRUBBER: {\n target: \"focused\",\n actions: \"clearCursorPoint\",\n },\n POINTER_MOVE_SCRUBBER: [\n {\n guard: \"isIncrementHint\",\n actions: [\"increment\", \"setCursorPoint\", \"updateCursor\"],\n },\n {\n guard: \"isDecrementHint\",\n actions: [\"decrement\", \"setCursorPoint\", \"updateCursor\"],\n },\n ],\n },\n },\n },\n },\n {\n delays: {\n CHANGE_INTERVAL: 50,\n CHANGE_DELAY: 300,\n },\n\n guards: {\n clampOnBlur: (ctx) => !!ctx.clampValueOnBlur,\n isAtMin: (ctx) => ctx.isAtMin,\n isAtMax: (ctx) => ctx.isAtMax,\n isInRange: (ctx) => !ctx.isOutOfRange,\n isDecrementHint: (ctx, evt) => (evt.hint ?? ctx.hint) === \"decrement\",\n isIncrementHint: (ctx, evt) => (evt.hint ?? ctx.hint) === \"increment\",\n isInvalidExponential: (ctx) => ctx.value.toString().startsWith(\"e\"),\n },\n\n activities: {\n trackButtonDisabled(ctx, _evt, { send }) {\n let btnEl: HTMLButtonElement | null = null\n if (ctx.hint === \"increment\") {\n btnEl = dom.getIncButtonEl(ctx)\n }\n if (ctx.hint === \"decrement\") {\n btnEl = dom.getDecButtonEl(ctx)\n }\n return observeAttributes(btnEl, \"disabled\", function onDisable() {\n send(\"PRESS_UP\")\n })\n },\n attachWheelListener(ctx, _evt, { send }) {\n const input = dom.getInputEl(ctx)\n if (!input) return\n\n function onWheel(event: WheelEvent) {\n const isInputFocused = dom.getDoc(ctx).activeElement === input\n if (!ctx.allowMouseWheel || !isInputFocused) return\n event.preventDefault()\n\n const dir = Math.sign(event.deltaY) * -1\n if (dir === 1) {\n send(\"INCREMENT\")\n } else if (dir === -1) {\n send(\"DECREMENT\")\n }\n }\n return addDomEvent(input, \"wheel\", onWheel, { passive: false })\n },\n activatePointerLock(ctx) {\n if (isSafari() || !supportsPointerEvent()) return\n return requestPointerLock(dom.getDoc(ctx))\n },\n trackMousemove(ctx, _evt, { send }) {\n const doc = dom.getDoc(ctx)\n\n function onMousemove(event: MouseEvent) {\n if (!ctx.scrubberCursorPoint) return\n const value = dom.getMousementValue(ctx, event)\n if (!value.hint) return\n send({\n type: \"POINTER_MOVE_SCRUBBER\",\n hint: value.hint,\n point: value.point,\n })\n }\n\n function onMouseup() {\n send(\"POINTER_UP_SCRUBBER\")\n }\n\n // prettier-ignore\n return pipe(\n addDomEvent(doc, \"mousemove\", onMousemove, false),\n addDomEvent(doc, \"mouseup\", onMouseup, false)\n )\n },\n },\n\n actions: {\n setupDocument: (ctx, evt) => {\n if (evt.doc) ctx.doc = ref(evt.doc)\n if (evt.root) ctx.rootNode = ref(evt.root)\n ctx.uid = evt.id\n },\n focusInput(ctx) {\n if (!ctx.focusInputOnChange) return\n const input = dom.getInputEl(ctx)\n raf(() => input?.focus())\n },\n increment(ctx, evt) {\n ctx.value = utils.increment(ctx, evt.step)\n },\n decrement(ctx, evt) {\n ctx.value = utils.decrement(ctx, evt.step)\n },\n clampValue(ctx) {\n ctx.value = utils.clamp(ctx)\n },\n roundValue(ctx) {\n if (ctx.value !== \"\") {\n ctx.value = utils.round(ctx)\n }\n },\n setValue(ctx, evt) {\n const value = evt.target?.value ?? evt.value\n ctx.value = utils.sanitize(ctx, utils.parse(ctx, value))\n },\n clearValue(ctx) {\n ctx.value = \"\"\n },\n setToMax(ctx) {\n ctx.value = ctx.max.toString()\n },\n setToMin(ctx) {\n ctx.value = ctx.min.toString()\n },\n setHint(ctx, evt) {\n ctx.hint = evt.hint\n },\n clearHint(ctx) {\n ctx.hint = null\n },\n setHintToSet(ctx) {\n ctx.hint = \"set\"\n },\n invokeOnChange(ctx) {\n ctx.onChange?.({\n value: ctx.value,\n valueAsNumber: ctx.valueAsNumber,\n })\n },\n invokeOnInvalid(ctx) {\n if (!ctx.isOutOfRange) return\n const reason = ctx.valueAsNumber > ctx.max ? \"rangeOverflow\" : \"rangeUnderflow\"\n ctx.onInvalid?.({\n reason,\n value: ctx.formattedValue,\n valueAsNumber: ctx.valueAsNumber,\n })\n },\n // sync input value, in event it was set from form libraries via `ref`, `bind:this`, etc.\n syncInputValue(ctx) {\n const input = dom.getInputEl(ctx)\n if (!input || input.value == ctx.value) return\n const value = utils.parse(ctx, input.value)\n ctx.value = utils.sanitize(ctx, value)\n },\n setCursorPoint(ctx, evt) {\n ctx.scrubberCursorPoint = evt.point\n },\n clearCursorPoint(ctx) {\n ctx.scrubberCursorPoint = null\n },\n updateCursor(ctx) {\n const cursor = dom.getCursorEl(ctx)\n if (!cursor || !ctx.scrubberCursorPoint) return\n const { x, y } = ctx.scrubberCursorPoint\n cursor.style.transform = `translate3d(${x}px, ${y}px, 0px)`\n },\n addCustomCursor(ctx) {\n if (isSafari() || !supportsPointerEvent()) return\n dom.createVirtualCursor(ctx)\n },\n removeCustomCursor(ctx) {\n if (isSafari() || !supportsPointerEvent()) return\n dom.getCursorEl(ctx)?.remove()\n },\n disableTextSelection(ctx) {\n const doc = dom.getDoc(ctx)\n doc.body.style.pointerEvents = \"none\"\n doc.documentElement.style.userSelect = \"none\"\n doc.documentElement.style.cursor = \"ew-resize\"\n },\n restoreTextSelection(ctx) {\n const doc = dom.getDoc(ctx)\n doc.body.style.pointerEvents = \"\"\n doc.documentElement.style.userSelect = \"\"\n doc.documentElement.style.cursor = \"\"\n },\n },\n\n hookSync: true,\n },\n )\n}\n"],
5
- "mappings": "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",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../utilities/dom/src/attrs.ts", "../../../utilities/dom/src/computed-style.ts", "../../../utilities/dom/src/next-tick.ts", "../../../utilities/dom/src/auto-resize.ts", "../../../utilities/core/src/array.ts", "../../../utilities/core/src/guard.ts", "../../../utilities/core/src/platform.ts", "../../../utilities/core/src/events.ts", "../../../utilities/core/src/functions.ts", "../../../utilities/core/src/warning.ts", "../../../utilities/dom/src/global-listener.ts", "../../../utilities/dom/src/listener.ts", "../../../utilities/dom/src/body-pointer-event.ts", "../../../utilities/dom/src/constants.ts", "../../../utilities/dom/src/query.ts", "../../../utilities/dom/src/event.ts", "../../../utilities/dom/src/fire-event.ts", "../../../utilities/dom/src/focus-event.ts", "../../../utilities/dom/src/focusable.ts", "../../../utilities/dom/src/mutation-observer.ts", "../../../utilities/dom/src/form.ts", "../../../utilities/dom/src/input-event.ts", "../../../utilities/dom/src/keyboard-event.ts", "../../../utilities/dom/src/visually-hidden.ts", "../../../utilities/dom/src/live-region.ts", "../../../utilities/dom/src/nodelist.ts", "../../../utilities/dom/src/text-selection.ts", "../../../utilities/dom/src/pointer-event.ts", "../../../utilities/dom/src/pointerlock.ts", "../../../utilities/dom/src/rect-observer.ts", "../../../utilities/dom/src/scrollable.ts", "../../../utilities/dom/src/typeahead.ts", "../../../utilities/dom/src/visibility-event.ts", "../../../utilities/dom/src/visual-viewport.ts", "../../../utilities/dom/src/wait.ts", "../../../utilities/number/src/number.ts", "../../../utilities/number/src/rangy.ts", "../../../utilities/number/src/number-format.ts", "../../../utilities/number/src/transform.ts", "../../../utilities/rect/src/rect.ts", "../../../utilities/rect/src/computed-style.ts", "../../../utilities/rect/src/from-element.ts", "../../../utilities/core/src/array.ts", "../../../utilities/core/src/guard.ts", "../../../utilities/core/src/platform.ts", "../../../utilities/core/src/events.ts", "../../../utilities/core/src/functions.ts", "../../../utilities/core/src/warning.ts", "../../../utilities/rect/src/point.ts", "../../../utilities/rect/src/operations.ts", "../../../utilities/rect/src/polygon.ts", "../../../types/src/prop-types.ts", "../../../types/src/controls.ts", "../../../utilities/core/src/array.ts", "../../../utilities/core/src/guard.ts", "../../../utilities/core/src/platform.ts", "../../../utilities/core/src/events.ts", "../../../utilities/core/src/functions.ts", "../../../utilities/core/src/warning.ts", "../src/number-input.dom.ts", "../src/number-input.utils.ts", "../src/number-input.connect.ts", "../src/number-input.machine.ts"],
4
- "sourcesContent": ["type Booleanish = boolean | \"true\" | \"false\"\n\nexport const dataAttr = (guard: boolean | undefined) => {\n return (guard ? \"\" : undefined) as Booleanish\n}\n\nexport const ariaAttr = (guard: boolean | undefined) => {\n return guard ? \"true\" : undefined\n}\n\nexport const matchAttr = (el: Element) => {\n return {\n get: (key: string) => el.getAttribute(key),\n set: (key: string, value: string) => el.setAttribute(key, value),\n is: (key: string, value: string) => {\n return el.getAttribute(key) === value\n },\n }\n}\n", "type Key = keyof CSSStyleDeclaration | (string & {})\ntype Styles = Record<Key, any>\ntype El = HTMLElement | null | undefined\n\nfunction getStyleCache(): WeakMap<HTMLElement, Styles> {\n ;(globalThis as any).__styleCache__ = (globalThis as any).__styleCache__ || new WeakMap()\n return (globalThis as any).__styleCache__\n}\n\nexport function getComputedStyle(el: El): Styles {\n if (!el) return {} as Styles\n const cache = getStyleCache()\n let style: Styles | undefined = cache.get(el)\n if (!style) {\n const win = el?.ownerDocument.defaultView ?? window\n style = win.getComputedStyle(el) as Styles\n cache.set(el, style)\n }\n return style\n}\n\nexport function copyVisualStyles(fromEl: HTMLElement | null, toEl: HTMLElement) {\n if (!fromEl) return\n const el = getComputedStyle(fromEl)\n // prettier-ignore\n const cssText = 'box-sizing:' + el.boxSizing +\n ';border-left:' + el.borderLeftWidth + ' solid red' +\n ';border-right:' + el.borderRightWidth + ' solid red' +\n ';font-family:' + el.fontFamily +\n ';font-feature-settings:' + el.fontFeatureSettings +\n ';font-kerning:' + el.fontKerning +\n ';font-size:' + el.fontSize +\n ';font-stretch:' + el.fontStretch +\n ';font-style:' + el.fontStyle +\n ';font-variant:' + el.fontVariant +\n ';font-variant-caps:' + el.fontVariantCaps +\n ';font-variant-ligatures:' + el.fontVariantLigatures +\n ';font-variant-numeric:' + el.fontVariantNumeric +\n ';font-weight:' + el.fontWeight +\n ';letter-spacing:' + el.letterSpacing +\n ';margin-left:' + el.marginLeft +\n ';margin-right:' + el.marginRight +\n ';padding-left:' + el.paddingLeft +\n ';padding-right:' + el.paddingRight +\n ';text-indent:' + el.textIndent +\n ';text-transform:' + el.textTransform\n\n toEl.style.cssText += cssText\n}\n", "export function nextTick(fn: VoidFunction) {\n const set = new Set<VoidFunction>()\n function raf(fn: VoidFunction) {\n const id = globalThis.requestAnimationFrame(fn)\n set.add(() => globalThis.cancelAnimationFrame(id))\n }\n raf(() => raf(fn))\n return function cleanup() {\n set.forEach(function (fn) {\n fn()\n })\n }\n}\n\nexport function raf(fn: VoidFunction) {\n const id = globalThis.requestAnimationFrame(fn)\n return function cleanup() {\n globalThis.cancelAnimationFrame(id)\n }\n}\n\nexport function queueMicrotask(fn: VoidFunction) {\n if (typeof globalThis.queueMicrotask === \"function\") {\n globalThis.queueMicrotask(fn)\n } else {\n Promise.resolve().then(fn)\n }\n}\n", "import { copyVisualStyles } from \"./computed-style\"\nimport { raf } from \"./next-tick\"\n\nfunction createGhostElement(doc: Document) {\n var el = doc.createElement(\"div\")\n el.id = \"ghost\"\n el.style.cssText =\n \"display:inline-block;height:0;overflow:hidden;position:absolute;top:0;visibility:hidden;white-space:nowrap;\"\n doc.body.appendChild(el)\n return el\n}\n\nexport function autoResizeInput(input: HTMLInputElement | null) {\n if (!input) return\n const doc = input.ownerDocument ?? document\n const ghost = createGhostElement(doc)\n\n copyVisualStyles(input, ghost)\n\n function resize() {\n raf(() => {\n ghost.innerHTML = input!.value\n const rect = getComputedStyle(ghost)\n input?.style.setProperty(\"width\", rect.width)\n })\n }\n\n resize()\n\n input?.addEventListener(\"input\", resize)\n input?.addEventListener(\"change\", resize)\n\n return () => {\n doc.body.removeChild(ghost)\n input?.removeEventListener(\"input\", resize)\n input?.removeEventListener(\"change\", resize)\n }\n}\n", "export function toArray<T>(v: T | T[] | undefined | null): T[] {\n if (!v) return []\n return Array.isArray(v) ? v : [v]\n}\n\nexport const fromLength = (length: number) => Array.from(Array(length).keys())\n\nexport const first = <T>(v: T[]): T | undefined => v[0]\n\nexport const last = <T>(v: T[]): T | undefined => v[v.length - 1]\n\nexport const isEmpty = <T>(v: T[]): boolean => v.length === 0\n\nexport const has = <T>(v: T[], t: any): boolean => v.indexOf(t) !== -1\n\nexport const add = <T>(v: T[], ...items: T[]): T[] => v.concat(items)\n\nexport const remove = <T>(v: T[], item: T): T[] => removeAt(v, v.indexOf(item))\n\nexport const removeAt = <T>(v: T[], i: number): T[] => {\n if (i > -1) v.splice(i, 1)\n return v\n}\n\nexport function clear<T>(v: T[]): T[] {\n while (v.length > 0) v.pop()\n return v\n}\n\nexport type IndexOptions = {\n step?: number\n loop?: boolean\n}\n\nexport function nextIndex<T>(v: T[], idx: number, opts: IndexOptions = {}): number {\n const { step = 1, loop = true } = opts\n const next = idx + step\n const len = v.length\n const last = len - 1\n if (idx === -1) return step > 0 ? 0 : last\n if (next < 0) return loop ? last : 0\n if (next >= len) return loop ? 0 : idx > len ? len : idx\n return next\n}\n\nexport function next<T>(v: T[], idx: number, opts: IndexOptions = {}): T | undefined {\n return v[nextIndex(v, idx, opts)]\n}\n\nexport function prevIndex<T>(v: T[], idx: number, opts: IndexOptions = {}): number {\n const { step = 1, loop = true } = opts\n return nextIndex(v, idx, { step: -step, loop })\n}\n\nexport function prev<T>(v: T[], index: number, opts: IndexOptions = {}): T | undefined {\n return v[prevIndex(v, index, opts)]\n}\n\nexport const chunk = <T>(v: T[], size: number): T[][] => {\n const res: T[][] = []\n return v.reduce((rows, value, index) => {\n if (index % size === 0) rows.push([value])\n else last(rows)?.push(value)\n return rows\n }, res)\n}\n", "export const isDev = () => process.env.NODE_ENV !== \"production\"\nexport const isDom = () => typeof window !== \"undefined\"\n\nexport const isArray = (v: any): v is any[] => Array.isArray(v)\nexport const isBoolean = (v: any): v is boolean => v === true || v === false\nexport const isObject = (v: any): v is Record<string, any> => !(v == null || typeof v !== \"object\" || isArray(v))\nexport const isNumber = (v: any): v is number => typeof v === \"number\" && !Number.isNaN(v)\nexport const isString = (v: any): v is string => typeof v === \"string\"\nexport const isFunction = (v: any): v is Function => typeof v === \"function\"\n\nexport const hasProp = <T extends string>(obj: any, prop: T): obj is Record<T, any> =>\n Object.prototype.hasOwnProperty.call(obj, prop)\n", "import { isDom } from \"./guard\"\n\nexport function getPlatform() {\n const agent = (navigator as any).userAgentData\n return agent?.platform ?? navigator.platform\n}\n\nconst pt = (v: RegExp) => isDom() && v.test(getPlatform())\nconst ua = (v: RegExp) => isDom() && v.test(navigator.userAgent)\nconst vn = (v: RegExp) => isDom() && v.test(navigator.vendor)\n\nexport const isTouchDevice = isDom() && !!navigator.maxTouchPoints\nexport const isMac = () => pt(/^Mac/) && !isTouchDevice\nexport const isIPhone = () => pt(/^iPhone/)\nexport const isSafari = () => isApple() && vn(/apple/i)\nexport const isFirefox = () => ua(/firefox\\//i)\nexport const isApple = () => pt(/mac|iphone|ipad|ipod/i)\nexport const isIos = () => isApple() && !isMac()\n", "import { hasProp, isDom, isObject } from \"./guard\"\nimport { isMac } from \"./platform\"\n\nexport const supportsPointerEvent = () => isDom() && window.onpointerdown === null\nexport const supportsTouchEvent = () => isDom() && window.ontouchstart === null\nexport const supportsMouseEvent = () => isDom() && window.onmousedown === null\n\nexport const isMouseEvent = (v: any): v is MouseEvent => isObject(v) && hasProp(v, \"button\")\nexport const isTouchEvent = (v: any): v is TouchEvent => isObject(v) && hasProp(v, \"touches\")\nexport const isLeftClick = (v: { button: number }) => v.button === 0\nexport const isRightClick = (v: { button: number }) => v.button === 2\nexport const isModifiedEvent = (v: Pick<KeyboardEvent, \"ctrlKey\" | \"metaKey\" | \"altKey\">) =>\n v.ctrlKey || v.altKey || v.metaKey\n\nexport const isCtrlKey = (v: Pick<KeyboardEvent, \"ctrlKey\" | \"metaKey\">) =>\n isMac() ? v.metaKey && !v.ctrlKey : v.ctrlKey && !v.metaKey\n", "export const runIfFn = <T>(\n v: T | undefined,\n ...a: T extends (...a: any[]) => void ? Parameters<T> : never\n): T extends (...a: any[]) => void ? NonNullable<ReturnType<T>> : NonNullable<T> => {\n const res = typeof v === \"function\" ? v(...a) : v\n return res ?? undefined\n}\n\nexport const cast = <T>(v: unknown): T => v as T\n\nexport const noop = () => {}\n\nexport const pipe =\n <T>(...fns: Array<(a: T) => T>) =>\n (v: T) =>\n fns.reduce((a, b) => b(a), v)\n\nexport const callAll =\n <T extends (...a: any[]) => void>(...fns: (T | undefined)[]) =>\n (...a: Parameters<T>) => {\n fns.forEach(function (fn) {\n fn?.(...a)\n })\n }\n\nexport const uuid = /*#__PURE__*/ (() => {\n let id = 0\n return () => {\n id++\n return id.toString(36)\n }\n})()\n\nexport function merge<T, U>(origin: T, patch: U): T & U {\n if (!(typeof patch === \"object\")) return patch as any\n const result = !(typeof origin === \"object\") ? {} : Object.assign({}, origin)\n for (const key of Object.keys(patch)) {\n const value = patch[key]\n const src = result[key]\n if (value === null) delete result[key]\n else if (Array.isArray(value) || Array.isArray(src)) result[key] = (src || []).concat(value || [])\n else result[key] = merge(src, value)\n }\n return result as any\n}\n", "export function warn(m: string): void\nexport function warn(c: boolean, m: string): void\nexport function warn(...a: any[]): void {\n const m = a.length === 1 ? a[0] : a[1]\n const c = a.length === 2 ? a[0] : true\n if (c && process.env.NODE_ENV !== \"production\") {\n console.warn(m)\n }\n}\n\nexport function invariant(m: string): void\nexport function invariant(c: boolean, m: string): void\nexport function invariant(...a: any[]): void {\n const m = a.length === 1 ? a[0] : a[1]\n const c = a.length === 2 ? a[0] : true\n if (c && process.env.NODE_ENV !== \"production\") {\n throw new Error(m)\n }\n}\n", "import { noop } from \"@zag-js/utils\"\n\ntype El = HTMLElement | Document | VisualViewport | Window\ntype Handler = (event: Event) => void\ntype Group = Map<string, Set<Handler>>\ntype Option = boolean | AddEventListenerOptions\n\nfunction getListenerElements(): Map<El, Group> {\n ;(globalThis as any).__listenerElements__ = (globalThis as any).__listenerElements__ || new Map()\n return (globalThis as any).__listenerElements__\n}\n\nfunction getListenerCache(): Map<El, Map<string, Handler>> {\n ;(globalThis as any).__listenerCache__ = (globalThis as any).__listenerCache__ || new Map()\n return (globalThis as any).__listenerCache__\n}\n\n/**\n * The global event bus for managing event listeners attached to DOM elements.\n *\n * It's goal is to ensure that only one listener is attached to a DOM element for a given event,\n * regardless of the number of times `addEventListener` is called.\n */\n\nexport function addGlobalEventListener(node: El | null, type: string, handler: Handler, options?: Option) {\n if (!node) return noop\n\n // unique identifier for the event listener\n const hash = JSON.stringify({ type, options })\n\n // Subscribe pattern\n const listenerElements = getListenerElements()\n const listenerCache = getListenerCache()\n\n const group = listenerElements.get(node)\n\n if (!listenerElements.has(node)) {\n // create group of listeners per hash\n const group: Group = new Map([[hash, new Set([handler])]])\n listenerElements.set(node, group)\n } else if (group?.has(hash)) {\n group?.get(hash)?.add(handler)\n } else {\n group?.set(hash, new Set([handler]))\n }\n\n // add the event listener to the node or register it in the cache\n function attach(node: El) {\n // Publish pattern\n function listener(event: Event) {\n const group = listenerElements.get(node)\n group?.get(hash)?.forEach((fn) => fn(event))\n }\n\n if (!listenerCache?.has(node)) {\n listenerCache.set(node, new Map([[hash, listener]]))\n node.addEventListener(type, listener, options)\n return\n }\n\n if (!listenerCache?.get(node)?.has(hash)) {\n listenerCache.get(node)?.set(hash, listener)\n node.addEventListener(type, listener, options)\n }\n }\n\n attach(node)\n\n return function remove() {\n if (!listenerElements.has(node)) return\n\n const group = listenerElements.get(node)\n group?.get(hash)?.delete(handler)\n\n if (group?.get(hash)?.size === 0) {\n const listener = listenerCache.get(node)?.get(hash)!\n node.removeEventListener(type, listener, options)\n group?.delete(hash)\n listenerCache.get(node)?.delete(hash)\n\n if (group?.size === 0) {\n listenerElements.delete(node)\n listenerCache.delete(node)\n }\n }\n }\n}\n", "import {\n supportsMouseEvent,\n supportsPointerEvent,\n supportsTouchEvent,\n runIfFn,\n hasProp,\n isTouchEvent,\n} from \"@zag-js/utils\"\nimport { addGlobalEventListener } from \"./global-listener\"\nimport {\n AnyPointerEvent,\n DOMEventTarget,\n EventMap,\n PointerEventInfo,\n PointerNameMap,\n RefTarget,\n} from \"./listener.types\"\n\nconst isRef = (v: any): v is RefTarget => hasProp(v, \"current\")\n\nconst fallback = { pageX: 0, pageY: 0, clientX: 0, clientY: 0 }\n\nexport function extractInfo<T extends AnyPointerEvent = AnyPointerEvent>(event: T, type: \"page\" | \"client\" = \"page\") {\n const point = isTouchEvent(event) ? event.touches[0] || event.changedTouches[0] || fallback : event\n return {\n point: {\n x: point[`${type}X`],\n y: point[`${type}Y`],\n },\n }\n}\n\nexport function addDomEvent<K extends keyof EventMap>(\n target: DOMEventTarget,\n event: K,\n listener: (event: EventMap[K]) => void,\n options?: boolean | AddEventListenerOptions,\n) {\n const node = isRef(target) ? target.current : runIfFn(target)\n return addGlobalEventListener(node as HTMLElement | null, event, listener as any, options)\n}\n\nexport function addPointerEvent<K extends keyof EventMap>(\n target: DOMEventTarget,\n event: K,\n listener: (event: EventMap[K], info: PointerEventInfo) => void,\n options?: boolean | AddEventListenerOptions,\n) {\n const type = getEventName(event) ?? event\n return addDomEvent(target, type, wrapHandler(listener, event === \"pointerdown\"), options)\n}\n\nfunction wrapHandler<E extends EventMap[keyof EventMap]>(\n fn: (event: E, info: PointerEventInfo) => void,\n filter = false,\n) {\n const listener: EventListener = (event: any) => {\n fn(event, extractInfo(event))\n }\n return filter ? filterPrimaryPointer(listener) : listener\n}\n\nfunction filterPrimaryPointer(fn: EventListener): EventListener {\n return (event: Event) => {\n const win = ((event as UIEvent).view ?? window) as typeof window\n const isMouseEvent = event instanceof win.MouseEvent\n const isPrimary = !isMouseEvent || (isMouseEvent && (event as MouseEvent).button === 0)\n if (isPrimary) fn(event)\n }\n}\n\nexport function extractClientInfo(event: AnyPointerEvent) {\n return extractInfo(event, \"client\")\n}\n\nconst mouseEventNames: PointerNameMap = {\n pointerdown: \"mousedown\",\n pointermove: \"mousemove\",\n pointerup: \"mouseup\",\n pointercancel: \"mousecancel\",\n pointerover: \"mouseover\",\n pointerout: \"mouseout\",\n pointerenter: \"mouseenter\",\n pointerleave: \"mouseleave\",\n}\n\nconst touchEventNames: PointerNameMap = {\n pointerdown: \"touchstart\",\n pointermove: \"touchmove\",\n pointerup: \"touchend\",\n pointercancel: \"touchcancel\",\n}\n\nexport function getEventName(evt: keyof EventMap): keyof EventMap {\n if (supportsPointerEvent()) return evt\n if (supportsTouchEvent()) return touchEventNames[evt]\n if (supportsMouseEvent()) return mouseEventNames[evt]\n return evt\n}\n", "import { isLeftClick, pipe } from \"@zag-js/utils\"\nimport { addDomEvent } from \"./listener\"\nimport { nextTick } from \"./next-tick\"\n\nlet changeCount = 0\nlet originalBodyPointerEvents: string\n\ntype PointerEventOptions = {\n disabled: boolean\n document?: Document\n}\n\nexport function preventBodyPointerEvents(el: HTMLElement | null, opts: Partial<PointerEventOptions> = {}) {\n const { disabled = false, document: docProp } = opts\n const doc: Document = docProp || document\n\n let isTouchOrPenPressed = false\n let isLeftClickPressed = false\n\n function listen() {\n const onPointerDown = (event: PointerEvent) => {\n const isMouse = event.pointerType === \"mouse\"\n isTouchOrPenPressed = !isMouse\n isLeftClickPressed = isMouse && isLeftClick(event)\n }\n\n const onPointerUp = () => {\n isTouchOrPenPressed = false\n isLeftClickPressed = false\n }\n\n // prettier-ignore\n return pipe(\n addDomEvent(doc, \"pointerdown\", onPointerDown),\n addDomEvent(doc,\"pointerup\", onPointerUp)\n )\n }\n\n function reset() {\n changeCount--\n if (changeCount === 0) {\n doc.body.style.pointerEvents = originalBodyPointerEvents\n }\n if (el) {\n el.style.pointerEvents = \"\"\n }\n }\n\n function apply() {\n if (disabled) return\n\n if (changeCount === 0) {\n originalBodyPointerEvents = doc.body.style.pointerEvents\n }\n\n doc.body.style.pointerEvents = \"none\"\n if (el) {\n el.style.pointerEvents = \"auto\"\n }\n\n changeCount++\n\n return function () {\n if (isTouchOrPenPressed) {\n addDomEvent(doc, \"click\", reset, { once: true })\n } else if (isLeftClickPressed) {\n addDomEvent(doc, \"pointerup\", reset, { once: true })\n } else {\n reset()\n }\n }\n }\n\n const cleanups: Array<VoidFunction | undefined> = []\n cleanups.push(apply())\n nextTick(() => {\n cleanups.push(listen())\n })\n\n return function () {\n cleanups.forEach((cleanup) => cleanup?.())\n }\n}\n", "export const MAX_Z_INDEX = 2147483647\n", "export function getOwnerDocument(el: HTMLElement | Window) {\n if (isWindow(el)) return el.document\n return el?.ownerDocument ?? document\n}\n\nexport function getOwnerWindow(el: HTMLElement) {\n return el?.ownerDocument.defaultView ?? window\n}\n\nexport function getDocumentElement(el: HTMLElement | Window): HTMLElement {\n return getOwnerDocument(el).documentElement\n}\n\nexport function getNodeName(node: HTMLElement | Window): string {\n return isWindow(node) ? \"\" : node ? node.localName || \"\" : \"\"\n}\n\nexport function getEventWindow(event: UIEvent) {\n if (event.view) return event.view\n let target = event.currentTarget\n if (target != null) return getOwnerWindow(target as HTMLElement)\n return window\n}\n\nexport function getParent(el: HTMLElement): HTMLElement {\n const doc = getOwnerDocument(el)\n if (getNodeName(el) === \"html\") return el\n return el.assignedSlot || el.parentElement || doc.documentElement\n}\n\ntype Node = HTMLElement | EventTarget | null\n\nexport function contains(parent: Node | undefined, child: Node) {\n if (!parent) return false\n return parent === child || (isHTMLElement(parent) && isHTMLElement(child) && parent.contains(child))\n}\n\nexport function isHTMLElement(v: any): v is HTMLElement {\n return typeof v === \"object\" && v?.nodeType === Node.ELEMENT_NODE && typeof v?.nodeName === \"string\"\n}\n\nexport function isWindow(value: any): value is Window {\n return value?.toString() === \"[object Window]\"\n}\n\nexport const isDisabled = (el: HTMLElement | null): boolean => {\n return el?.getAttribute(\"disabled\") != null || !!el?.getAttribute(\"aria-disabled\") === true\n}\n\nexport function isElementEditable(el: HTMLElement | null) {\n if (el == null) return false\n const selectors = [\n \"input:not([readonly])\",\n \"textarea:not([readonly])\",\n \"[contenteditable]\",\n \"select:not([readonly])\",\n ].join(\", \")\n return el.matches(selectors) || el.isContentEditable\n}\n", "import { contains } from \"./query\"\n\nexport function isKeyboardClick(e: Pick<MouseEvent, \"detail\" | \"clientX\" | \"clientY\">) {\n return e.detail === 0 || (e.clientX === 0 && e.clientY === 0)\n}\n\nexport function isPrintableKey(e: Pick<KeyboardEvent, \"key\" | \"ctrlKey\" | \"metaKey\">): boolean {\n return e.key.length === 1 && !e.ctrlKey && !e.metaKey\n}\n\ntype NativeEvent<E> = React.ChangeEvent<any> extends E\n ? InputEvent\n : E extends React.SyntheticEvent<any, infer T>\n ? T\n : never\n\nexport function getNativeEvent<E>(e: E): NativeEvent<E> {\n return (e as any).nativeEvent ?? e\n}\n\nexport function queueBeforeEvent(el: Element, type: string, fn: VoidFunction) {\n const raf = requestAnimationFrame(() => {\n el.removeEventListener(type, invoke, true)\n fn()\n })\n\n const invoke = () => {\n cancelAnimationFrame(raf)\n fn()\n }\n\n el.addEventListener(type, invoke, { once: true, capture: true })\n\n return raf\n}\n\nexport function isPortalEvent(event: Pick<Event, \"currentTarget\" | \"target\">): boolean {\n return !contains(event.currentTarget, event.target)\n}\n\nexport function isSelfTarget(event: Pick<Event, \"target\" | \"currentTarget\">): boolean {\n return event.target === event.currentTarget\n}\n", "export function fireEvent(el: Element, type: string, init?: EventInit) {\n const event = new Event(type, init)\n return el.dispatchEvent(event)\n}\n\nexport function fireCustomEvent(el: Element, type: string, init?: CustomEventInit) {\n const event = new CustomEvent(type, init)\n return el.dispatchEvent(event)\n}\n\nexport function fireBlurEvent(el: Element, init?: FocusEventInit) {\n const event = new FocusEvent(\"blur\", init)\n const allowed = el.dispatchEvent(event)\n const bubbleInit = { ...init, bubbles: true }\n el.dispatchEvent(new FocusEvent(\"focusout\", bubbleInit))\n return allowed\n}\n\nexport function fireKeyboardEvent(el: Element, type: string, init?: KeyboardEventInit) {\n const event = new KeyboardEvent(type, init)\n return el.dispatchEvent(event)\n}\n\nexport function fireClickEvent(el: Element, init?: PointerEventInit) {\n const event = typeof PointerEvent !== \"undefined\" ? new PointerEvent(\"click\", init) : new MouseEvent(\"click\", init)\n return el.dispatchEvent(event)\n}\n", "/**\n * Determine if the blur event within an element is valid\n */\nexport function validateBlur(event: Event, opts: Options) {\n const exclude = Array.isArray(opts.exclude) ? opts.exclude : [opts.exclude]\n const relatedTarget = (event.relatedTarget ?? opts.fallback) as HTMLElement\n return exclude.every((el) => !el?.contains(relatedTarget))\n}\n\ntype MaybeArray<T> = T | T[]\n\ntype Options = {\n exclude: MaybeArray<HTMLElement | null>\n fallback?: HTMLElement | null\n}\n\ntype Event = Pick<FocusEvent, \"relatedTarget\">\n", "import { getComputedStyle } from \"./computed-style\"\nimport { isDisabled, isHTMLElement } from \"./query\"\n\nexport const focusableSelector = /*#__PURE__*/ [\n \"input:not([disabled]):not([type=hidden])\",\n \"select:not([disabled])\",\n \"textarea:not([disabled])\",\n \"button:not([disabled])\",\n \"embed\",\n \"iframe\",\n \"object\",\n \"a[href]\",\n \"area[href]\",\n \"[tabindex]\",\n \"audio[controls]\",\n \"video[controls]\",\n \"*[tabindex]:not([aria-disabled])\",\n \"[contenteditable]:not([contenteditable=false])\",\n \"details > summary:first-of-type\",\n].join(\",\")\n\nexport function isHidden(el: HTMLElement | null, until?: HTMLElement) {\n const style = getComputedStyle(el)\n if (!el || style.getPropertyValue(\"visibility\") === \"hidden\") return true\n while (el) {\n if (until != null && el === until) return false\n if (style.getPropertyValue(\"display\") === \"none\") return true\n el = el.parentElement\n }\n return false\n}\n\n/**\n * Returns the focusable elements within the element\n */\nexport const getFocusables = (el: HTMLElement | Document | null, includeContainer: boolean | \"if-empty\" = false) => {\n if (!el) return []\n let els = Array.from(el.querySelectorAll<HTMLElement>(focusableSelector))\n\n const shouldAddContainer = includeContainer == true || (includeContainer == \"if-empty\" && els.length === 0)\n\n if (shouldAddContainer && isHTMLElement(el)) {\n els.unshift(el)\n }\n\n return els.filter((el) => isFocusable(el) && !isHidden(el))\n}\n\n/**\n * Whether this element is focusable\n */\nexport const isFocusable = (el: HTMLElement | null) => {\n if (!isHTMLElement(el) || isHidden(el) || isDisabled(el)) return false\n return el?.matches(focusableSelector)\n}\n\n/**\n * Returns the tabbable elements within the element\n */\nexport const getTabbables = (el: HTMLElement | Document | null, includeContainer: boolean | \"if-empty\" = false) => {\n if (!el) return []\n return getFocusables(el, includeContainer).filter(isTabbable)\n}\n\n/**\n * Whether this element is tabbable\n */\nexport const isTabbable = (el: HTMLElement | null) => {\n return isFocusable(el) && !isDisabled(el) && !isHidden(el)\n}\n", "import { noop } from \"@zag-js/utils\"\n\ntype Callback = (v: MutationRecord) => void\n\nexport function observeAttributes(node: Element | null, attributes: string | string[], fn: Callback) {\n if (!node) return noop\n const attrs = Array.isArray(attributes) ? attributes : [attributes]\n const win = node.ownerDocument.defaultView || window\n const obs = new win.MutationObserver((changes) => {\n for (const change of changes) {\n if (change.type === \"attributes\" && change.attributeName && attrs.includes(change.attributeName)) {\n fn(change)\n }\n }\n })\n\n obs.observe(node, { attributes: true, attributeFilter: attrs })\n\n return () => obs.disconnect()\n}\n\nexport function observeChildren(node: Element | null, fn: Callback) {\n if (!node) return noop\n const win = node.ownerDocument.defaultView || window\n const obs = new win.MutationObserver((changes) => {\n for (const change of changes) {\n if (change.type === \"childList\") {\n fn(change)\n }\n }\n })\n\n obs.observe(node, { childList: true, subtree: true })\n\n return () => obs.disconnect()\n}\n", "import { observeAttributes } from \"./mutation-observer\"\n\nexport function getClosestForm(el: HTMLElement) {\n if (isFormElement(el)) return el.form\n else return el.closest(\"form\")\n}\n\nfunction isFormElement(el: HTMLElement): el is HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement {\n return el.matches(\"textarea, input, select, button\")\n}\n\nexport function trackFormReset(el: HTMLElement | null | undefined, callback: () => void) {\n if (!el) return\n const form = getClosestForm(el)\n form?.addEventListener(\"reset\", callback, { passive: true })\n return () => {\n form?.removeEventListener(\"reset\", callback)\n }\n}\n\nexport function trackFieldsetDisabled(el: HTMLElement | null | undefined, callback: (disabled: boolean) => void) {\n const fieldset = el?.closest(\"fieldset\")\n if (!fieldset) return\n callback(fieldset.disabled)\n return observeAttributes(fieldset, [\"disabled\"], () => callback(fieldset.disabled))\n}\n\nexport function isNativeDisabled(el: HTMLElement) {\n return el.matches(\":disabled\")\n}\n", "import { getOwnerWindow } from \"./query\"\n\ntype DescriptorOptions = {\n type: \"input\" | \"textarea\"\n property: \"value\" | \"checked\"\n}\n\nfunction getDescriptor(el: HTMLElement, options: DescriptorOptions) {\n const { type, property } = options\n const win = getOwnerWindow(el)\n const _type = type === \"input\" ? \"HTMLInputElement\" : \"HTMLTextAreaElement\"\n const proto = win[_type].prototype\n return Object.getOwnPropertyDescriptor(proto, property) ?? {}\n}\n\nexport function dispatchInputValueEvent(el: HTMLElement, value: string | number) {\n const win = getOwnerWindow(el)\n if (!(el instanceof win.HTMLInputElement)) return\n const desc = getDescriptor(el, { type: \"input\", property: \"value\" })\n desc.set?.call(el, value)\n const event = new win.Event(\"input\", { bubbles: true })\n el.dispatchEvent(event)\n}\n\nexport function dispatchInputCheckedEvent(el: HTMLElement, checked: boolean) {\n const win = getOwnerWindow(el)\n if (!(el instanceof win.HTMLInputElement)) return\n const desc = getDescriptor(el, { type: \"input\", property: \"checked\" })\n desc.set?.call(el, checked)\n const event = new win.Event(\"click\", { bubbles: true })\n el.dispatchEvent(event)\n}\n\nexport function trackInputPropertyMutation(\n el: HTMLInputElement | null,\n options: DescriptorOptions & { fn?: (value: string) => void },\n) {\n const { fn, property, type } = options\n\n if (!fn || !el) return\n\n const { get, set } = getDescriptor(el, { property, type })\n\n let run = true\n\n Object.defineProperty(el, property, {\n get() {\n return get?.call(this)\n },\n set(value: string) {\n if (run) fn(value)\n return set?.call(this, value)\n },\n })\n\n return () => {\n run = false\n }\n}\n", "import type { KeyboardEvent } from \"react\"\n\ntype EventKey =\n | \"ArrowDown\"\n | \"ArrowUp\"\n | \"ArrowLeft\"\n | \"ArrowRight\"\n | \"Space\"\n | \"Enter\"\n | \"Comma\"\n | \"Escape\"\n | \"Backspace\"\n | \"Delete\"\n | \"Home\"\n | \"End\"\n | \"Tab\"\n | \"PageUp\"\n | \"PageDown\"\n | (string & {})\n\nexport type EventKeyMap = Partial<Record<EventKey, (event: React.KeyboardEvent) => void>>\n\nconst rtlKeyMap = {\n ArrowLeft: \"ArrowRight\",\n ArrowRight: \"ArrowLeft\",\n Home: \"End\",\n End: \"Home\",\n}\n\nconst sameKeyMap = {\n Up: \"ArrowUp\",\n Down: \"ArrowDown\",\n Esc: \"Escape\",\n \" \": \"Space\",\n \",\": \"Comma\",\n Left: \"ArrowLeft\",\n Right: \"ArrowRight\",\n}\n\ntype EventKeyOptions = {\n dir?: \"ltr\" | \"rtl\"\n orientation?: \"horizontal\" | \"vertical\"\n}\n\n/**\n * Determine the event key based on text direction.\n */\nexport function getEventKey(event: KeyboardEvent, options: EventKeyOptions = {}) {\n const { dir = \"ltr\", orientation = \"horizontal\" } = options\n\n let { key } = event\n key = sameKeyMap[key] ?? key // normalize key\n\n const isRtl = dir === \"rtl\" && orientation === \"horizontal\"\n\n if (isRtl && key in rtlKeyMap) {\n key = rtlKeyMap[key]\n }\n\n return key\n}\n\nconst PAGE_KEYS = new Set([\"PageUp\", \"PageDown\"])\nconst ARROW_KEYS = new Set([\"ArrowUp\", \"ArrowDown\", \"ArrowLeft\", \"ArrowRight\"])\n\n/**\n * Determine the step factor for keyboard events\n */\nexport function getEventStep(event: KeyboardEvent) {\n if (event.ctrlKey || event.metaKey) {\n return 0.1\n } else {\n const isPageKey = PAGE_KEYS.has(event.key)\n const isSkipKey = isPageKey || (event.shiftKey && ARROW_KEYS.has(event.key))\n return isSkipKey ? 10 : 1\n }\n}\n", "export const visuallyHiddenStyle = {\n border: \"0\",\n clip: \"rect(0 0 0 0)\",\n height: \"1px\",\n margin: \"-1px\",\n overflow: \"hidden\",\n padding: \"0\",\n position: \"absolute\",\n width: \"1px\",\n whiteSpace: \"nowrap\",\n wordWrap: \"normal\",\n} as const\n\nexport function setVisuallyHidden(el: HTMLElement) {\n Object.assign(el.style, visuallyHiddenStyle)\n}\n", "import { setVisuallyHidden } from \"./visually-hidden\"\n\nexport type LiveRegionOptions = {\n level: \"polite\" | \"assertive\"\n document?: Document\n root?: HTMLElement | null\n delay?: number\n}\n\nexport type LiveRegion = ReturnType<typeof createLiveRegion>\n\nconst LIVE_REGION_ID = \"__live-region__\"\n\nexport function createLiveRegion(opts: Partial<LiveRegionOptions> = {}) {\n const { level = \"polite\", document: doc = document, root, delay: _delay = 0 } = opts\n\n const win = doc.defaultView ?? window\n const parent = root ?? doc.body\n\n function announce(message: string, delay?: number) {\n const oldRegion = doc.getElementById(LIVE_REGION_ID)\n\n // remove old region\n oldRegion?.remove()\n\n // Did an override level get set?\n delay = delay ?? _delay\n\n // create fresh region\n const region = doc.createElement(\"span\")\n region.id = LIVE_REGION_ID\n region.dataset.liveAnnouncer = \"true\"\n\n // Determine redundant role\n const role = level !== \"assertive\" ? \"status\" : \"alert\"\n\n // add role and attributes\n region.setAttribute(\"aria-live\", level)\n region.setAttribute(\"role\", role)\n\n // hide live region\n setVisuallyHidden(region)\n\n parent.appendChild(region)\n\n // populate region to trigger it\n win.setTimeout(() => {\n region.textContent = message\n }, delay)\n }\n\n function destroy() {\n const oldRegion = doc.getElementById(LIVE_REGION_ID)\n oldRegion?.remove()\n }\n\n return {\n announce,\n destroy,\n toJSON() {\n return LIVE_REGION_ID\n },\n }\n}\n", "type Root = Document | Element | null | undefined\n\nexport function queryAll<T extends HTMLElement = HTMLElement>(root: Root, selector: string) {\n return Array.from(root?.querySelectorAll<T>(selector) ?? [])\n}\n\nexport function query<T extends HTMLElement = HTMLElement>(root: Root, selector: string) {\n return root?.querySelector<T>(selector)\n}\n\nexport function itemById<T extends HTMLElement>(v: T[], id: string) {\n return v.find((node) => node.id === id)\n}\n\nexport function indexOfId<T extends HTMLElement>(v: T[], id: string) {\n const item = itemById(v, id)\n return item ? v.indexOf(item) : -1\n}\n\nexport function nextById<T extends HTMLElement>(v: T[], id: string, loop = true) {\n let idx = indexOfId(v, id)\n idx = loop ? (idx + 1) % v.length : Math.min(idx + 1, v.length - 1)\n return v[idx]\n}\n\nexport function prevById<T extends HTMLElement>(v: T[], id: string, loop = true) {\n let idx = indexOfId(v, id)\n if (idx === -1) return loop ? v[v.length - 1] : null\n idx = loop ? (idx - 1 + v.length) % v.length : Math.max(0, idx - 1)\n return v[idx]\n}\n\nconst getValueText = <T extends HTMLElement>(item: T) => item.dataset.valuetext ?? item.textContent ?? \"\"\n\nconst match = (valueText: string, query: string) => valueText.toLowerCase().startsWith(query.toLowerCase())\n\nconst wrap = <T>(v: T[], idx: number) => {\n return v.map((_, index) => v[(Math.max(idx, 0) + index) % v.length])\n}\n\nexport function findByText<T extends HTMLElement>(v: T[], text: string, currentId?: string | null) {\n const index = currentId ? indexOfId(v, currentId) : -1\n let items = currentId ? wrap(v, index) : v\n\n const isSingleKey = text.length === 1\n\n if (isSingleKey) {\n items = items.filter((item) => item.id !== currentId)\n }\n\n return items.find((item) => match(getValueText(item), text))\n}\n\nexport function sortByTreeOrder<T extends HTMLElement>(v: T[]) {\n return v.sort((a, b) => (a.compareDocumentPosition(b) & 2 ? 1 : -1))\n}\n", "// Credits: https://github.com/adobe/react-spectrum/blob/e81cfec20056338c7987c513826dc45df32f3db4/packages/%40react-aria/interactions/src/textSelection.ts\nimport { isIos } from \"@zag-js/utils\"\nimport { nextTick } from \"./next-tick\"\n\ntype State = \"default\" | \"disabled\" | \"restoring\"\n\nlet state: State = \"default\"\nlet savedUserSelect = \"\"\nlet modifiedElementMap = new WeakMap<HTMLElement, string>()\n\nexport function disableTextSelection({ target, doc }: { target?: HTMLElement; doc?: Document } = {}) {\n const _document = doc ?? document\n\n if (isIos()) {\n if (state === \"default\") {\n savedUserSelect = _document.documentElement.style.webkitUserSelect\n _document.documentElement.style.webkitUserSelect = \"none\"\n }\n\n state = \"disabled\"\n } else if (target) {\n modifiedElementMap.set(target, target.style.userSelect)\n target.style.userSelect = \"none\"\n }\n\n return () => restoreTextSelection({ target, doc: _document })\n}\n\nexport function restoreTextSelection({ target, doc }: { target?: HTMLElement; doc?: Document } = {}) {\n const _document = doc ?? document\n\n if (isIos()) {\n if (state !== \"disabled\") return\n state = \"restoring\"\n\n setTimeout(() => {\n nextTick(() => {\n if (state === \"restoring\") {\n if (_document.documentElement.style.webkitUserSelect === \"none\") {\n _document.documentElement.style.webkitUserSelect = savedUserSelect || \"\"\n }\n\n savedUserSelect = \"\"\n state = \"default\"\n }\n })\n }, 300)\n } else {\n if (target && modifiedElementMap.has(target)) {\n let targetOldUserSelect = modifiedElementMap.get(target)\n\n if (target.style.userSelect === \"none\") {\n target.style.userSelect = targetOldUserSelect ?? \"\"\n }\n\n if (target.getAttribute(\"style\") === \"\") {\n target.removeAttribute(\"style\")\n }\n modifiedElementMap.delete(target)\n }\n }\n}\n", "import { isLeftClick, isMouseEvent, pipe } from \"@zag-js/utils\"\nimport { addDomEvent, addPointerEvent } from \"./listener\"\nimport type { AnyPointerEvent, EventListenerWithPointInfo as Listener, PointerEventInfo } from \"./listener.types\"\nimport { disableTextSelection } from \"./text-selection\"\n\nexport function trackPointerDown(doc: Document, onPointerDown: (el: HTMLElement) => void) {\n const win = doc.defaultView ?? window\n const fn = (event: PointerEvent) => {\n if (event.target instanceof win.HTMLElement) {\n onPointerDown(event.target)\n }\n }\n return addDomEvent(doc, \"pointerdown\", fn)\n}\n\ntype TrackPointerMoveOptions = {\n ctx: { doc?: Document; threshold?: number }\n onPointerUp: VoidFunction\n onPointerMove: (info: PointerEventInfo, event: AnyPointerEvent) => void\n}\n\nexport function trackPointerMove(opts: TrackPointerMoveOptions) {\n const { onPointerMove, onPointerUp, ctx } = opts\n const { doc = document, threshold = 5 } = ctx\n\n const handlePointerMove: Listener = (event, info) => {\n const { point: p } = info\n const distance = Math.sqrt(p.x ** 2 + p.y ** 2)\n if (distance < threshold) return\n\n // Because Safari doesn't trigger mouseup events when it's above a `<select>`\n if (isMouseEvent(event) && isLeftClick(event)) {\n onPointerUp()\n return\n }\n\n onPointerMove(info, event)\n }\n\n return pipe(\n addPointerEvent(doc, \"pointermove\", handlePointerMove, false),\n addPointerEvent(doc, \"pointerup\", onPointerUp, false),\n addPointerEvent(doc, \"pointercancel\", onPointerUp, false),\n addPointerEvent(doc, \"contextmenu\", onPointerUp, false),\n disableTextSelection({ doc }),\n )\n}\n", "import { pipe } from \"@zag-js/utils\"\nimport { addDomEvent } from \"./listener\"\n\ntype PointerLockHandlers = {\n onPointerLock?: VoidFunction\n onPointerUnlock?: VoidFunction\n}\n\nexport function addPointerlockChangeListener(doc: Document, fn: VoidFunction) {\n return addDomEvent(doc, \"pointerlockchange\", fn, false)\n}\n\nexport function addPointerlockErrorListener(doc: Document, fn: (e: Event) => void) {\n doc.addEventListener(\"pointerlockerror\", fn, false)\n return function cleanup() {\n doc.removeEventListener(\"pointerlockerror\", fn, false)\n }\n}\n\nexport function requestPointerLock(doc: Document, handlers: PointerLockHandlers = {}) {\n const { onPointerLock, onPointerUnlock } = handlers\n const body = doc.body\n\n const supported = \"pointerLockElement\" in doc || \"mozPointerLockElement\" in doc\n const locked = !!doc.pointerLockElement\n\n function onPointerChange() {\n if (locked) onPointerLock?.()\n else onPointerUnlock?.()\n }\n\n function onPointerError(event: Event) {\n if (locked) onPointerUnlock?.()\n console.error(\"PointerLock error occured:\", event)\n exit()\n }\n\n function exit() {\n doc.exitPointerLock()\n }\n\n if (!supported) return\n\n body.requestPointerLock()\n\n const cleanup = pipe(\n addPointerlockChangeListener(doc, onPointerChange),\n addPointerlockErrorListener(doc, onPointerError),\n )\n\n return function dispose() {\n if (!supported) return\n cleanup()\n exit()\n }\n}\n", "// Credit goes to the radix-ui team for this utility:\n// https://github.com/radix-ui/primitives/blob/main/packages/core/rect/src/observeElementRect.ts\n\ntype Fn = (rect: DOMRect) => void\ntype ObservedData = { rect: DOMRect; callbacks: Fn[] }\nexport type Measurable = { getBoundingClientRect(): DOMRect }\n\nfunction getObservedElements(): Map<Measurable, ObservedData> {\n ;(globalThis as any).__rectObserverMap__ = (globalThis as any).__rectObserverMap__ || new Map()\n return (globalThis as any).__rectObserverMap__\n}\n\nexport function observeElementRect(el: Measurable, fn: Fn) {\n const observedElements = getObservedElements()\n\n const data = observedElements.get(el)\n\n if (!data) {\n observedElements.set(el, { rect: {} as DOMRect, callbacks: [fn] })\n\n if (observedElements.size === 1) {\n rafId = requestAnimationFrame(runLoop)\n }\n } else {\n data.callbacks.push(fn)\n fn(el.getBoundingClientRect())\n }\n\n return function unobserve() {\n const data = observedElements.get(el)\n if (!data) return\n\n const index = data.callbacks.indexOf(fn)\n if (index > -1) {\n data.callbacks.splice(index, 1)\n }\n\n if (data.callbacks.length === 0) {\n observedElements.delete(el)\n\n if (observedElements.size === 0) {\n cancelAnimationFrame(rafId)\n }\n }\n }\n}\n\nlet rafId: number\n\nfunction runLoop() {\n const observedElements = getObservedElements()\n\n const changedRectsData: Array<ObservedData> = []\n\n observedElements.forEach((data, element) => {\n const newRect = element.getBoundingClientRect()\n\n if (!isEqual(data.rect, newRect)) {\n data.rect = newRect\n changedRectsData.push(data)\n }\n })\n\n changedRectsData.forEach((data) => {\n data.callbacks.forEach((callback) => callback(data.rect))\n })\n\n rafId = requestAnimationFrame(runLoop)\n}\n\nfunction isEqual(rect1: DOMRect, rect2: DOMRect) {\n return (\n rect1.width === rect2.width &&\n rect1.height === rect2.height &&\n rect1.top === rect2.top &&\n rect1.right === rect2.right &&\n rect1.bottom === rect2.bottom &&\n rect1.left === rect2.left\n )\n}\n", "import { getComputedStyle } from \"./computed-style\"\nimport { getNodeName, getOwnerDocument, getOwnerWindow, getParent, isHTMLElement, isWindow } from \"./query\"\n\nexport function isScrollParent(el: HTMLElement): boolean {\n const { overflow, overflowX, overflowY } = getComputedStyle(el)\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX)\n}\n\nexport function getScrollParent(el: HTMLElement): HTMLElement {\n if ([\"html\", \"body\", \"#document\"].includes(getNodeName(el))) {\n return getOwnerDocument(el).body\n }\n\n if (isHTMLElement(el) && isScrollParent(el)) {\n return el\n }\n\n return getScrollParent(getParent(el))\n}\n\ntype Target = Array<VisualViewport | Window | HTMLElement>\n\nexport function getScrollParents(el: HTMLElement, list: Target = []): Target {\n const scrollParent = getScrollParent(el)\n const isBody = scrollParent === getOwnerDocument(el).body\n const win = getOwnerWindow(scrollParent)\n\n const target = isBody\n ? ([win] as Target).concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : [])\n : scrollParent\n\n const parents = list.concat(target)\n if (isBody) return parents\n\n return parents.concat(getScrollParents(getParent(<HTMLElement>target)))\n}\n\nexport function getScrollOffset(el: HTMLElement) {\n if (isWindow(el)) {\n return { scrollLeft: el.scrollX, scrollTop: el.scrollY }\n }\n\n return { scrollLeft: el.scrollLeft, scrollTop: el.scrollTop }\n}\n", "import { findByText } from \"./nodelist\"\n\nexport type TypeaheadState = {\n keysSoFar: string\n timer: number\n}\n\nexport type TypeaheadOptions = {\n state: TypeaheadState\n activeId: string | null\n key: string\n timeout?: number\n}\n\nexport function findByTypeahead<T extends HTMLElement>(_items: T[], options: TypeaheadOptions) {\n const { state, activeId, key, timeout = 350 } = options\n\n const search = state.keysSoFar + key\n const isRepeated = search.length > 1 && Array.from(search).every((char) => char === search[0])\n\n const query = isRepeated ? search[0] : search\n\n let items = _items.slice()\n\n const next = findByText(items, query, activeId)\n\n function cleanup() {\n clearTimeout(state.timer)\n state.timer = -1\n }\n\n function update(value: string) {\n state.keysSoFar = value\n cleanup()\n\n if (value !== \"\") {\n state.timer = +setTimeout(() => {\n update(\"\")\n cleanup()\n }, timeout)\n }\n }\n\n update(search)\n\n return next\n}\n\nfindByTypeahead.defaultOptions = {\n keysSoFar: \"\",\n timer: -1,\n}\n", "import { cast } from \"@zag-js/utils\"\nimport { addDomEvent } from \"./listener\"\n\nexport function trackDocumentVisibility(_doc: Document, callback: (hidden: boolean) => void) {\n const doc = cast(_doc) as Document & { msHidden?: boolean; webkitHidden?: boolean }\n return addDomEvent(doc, \"visibilitychange\", () => {\n const hidden = doc.hidden || doc.msHidden || doc.webkitHidden\n callback(!!hidden)\n })\n}\n", "import { addDomEvent } from \"./listener\"\n\ntype ViewportSize = {\n width: number\n height: number\n}\n\ntype Options = {\n document?: Document\n resolve?(data: ViewportSize): void\n}\n\nexport function trackVisualViewport(options: Options) {\n const { document: doc, resolve } = options\n const win = doc?.defaultView || window\n resolve?.(getViewportSize(win))\n const onResize = () => resolve?.(getViewportSize(win))\n return addDomEvent(win.visualViewport ?? win, \"resize\", onResize)\n}\n\nfunction getViewportSize(win: Window): ViewportSize {\n return {\n width: win.visualViewport?.width || win.innerWidth,\n height: win.visualViewport?.height || win.innerHeight,\n }\n}\n", "export function waitFor<T>(predicate: () => T): Promise<T> {\n let value = predicate()\n if (!!value) return Promise.resolve(value)\n return new Promise((resolve) => {\n const id = globalThis.setInterval(function () {\n let value = predicate()\n if (value) {\n globalThis.clearInterval(id)\n resolve(value)\n }\n }, 0)\n })\n}\n\nexport function waitForEvent(el: HTMLElement, eventName: string) {\n return new Promise<void>((resolve) => {\n function done(event: Event) {\n if (event.target === el) {\n el.removeEventListener(eventName, done)\n resolve()\n }\n }\n\n el.addEventListener(eventName, done)\n })\n}\n", "export type Num<T extends string> = Record<T, number>\n\nexport function wrap(num: number, max: number): number {\n return ((num % max) + max) % max\n}\n\nexport function round(v: number | string, t?: number) {\n let num = valueOf(v)\n const p = 10 ** (t ?? 10)\n num = Math.round(num * p) / p\n return t ? num.toFixed(t) : v.toString()\n}\n\nexport function roundToDevicePixel(num: number) {\n if (typeof window === \"undefined\") return Math.round(num)\n const dp = window.devicePixelRatio\n return Math.floor(num * dp + 0.5) / dp\n}\n\nexport const valueToPercent = (v: number | string, r: Num<\"step\" | \"min\" | \"max\">) =>\n ((valueOf(v) - r.min) * 100) / (r.max - r.min)\n\nexport const percentToValue = (v: number | string, r: Num<\"min\" | \"max\">) => r.min + (r.max - r.min) * valueOf(v)\n\nexport function clamp(v: number | string, o: Num<\"min\" | \"max\">) {\n return Math.min(Math.max(valueOf(v), o.min), o.max)\n}\n\nexport function countDecimals(value: number) {\n if (!Number.isFinite(value)) return 0\n let e = 1,\n p = 0\n while (Math.round(value * e) / e !== value) {\n e *= 10\n p += 1\n }\n return p\n}\n\nexport const increment = (v: number | string, s: number) => decimalOperation(valueOf(v), \"+\", s)\n\nexport const decrement = (v: number | string, s: number) => decimalOperation(valueOf(v), \"-\", s)\n\nexport function snapToStep(value: number | string, step: number) {\n const num = valueOf(value)\n const p = countDecimals(step)\n const v = Math.round(num / step) * step\n return round(v, p)\n}\n\nexport function valueOf(v: string | number) {\n if (typeof v === \"number\") return v\n const num = parseFloat(v.toString().replace(/[^\\w.-]+/g, \"\"))\n return !Number.isNaN(num) ? num : 0\n}\n\nexport type FormatDecimalOptions = {\n /**\n * The minimum number of fraction digits to use. Possible values are from 0 to 20\n */\n minFractionDigits?: number\n /**\n * The maximum number of fraction digits to use. Possible values are from 0 to 20;\n */\n maxFractionDigits?: number\n}\n\nexport function formatDecimal(v: number | string, o: Omit<FormatDecimalOptions, \"value\">) {\n return new Intl.NumberFormat(\"en-US\", {\n useGrouping: false,\n style: \"decimal\",\n minimumFractionDigits: o.minFractionDigits,\n maximumFractionDigits: o.maxFractionDigits,\n }).format(valueOf(v))\n}\n\nexport function isAtMax(v: number | string, o: Num<\"max\">) {\n const val = valueOf(v)\n return val >= o.max\n}\n\nexport function isAtMin(v: number | string, o: Num<\"min\">) {\n const val = valueOf(v)\n return val <= o.min\n}\n\nexport function isWithinRange(v: number | string, o: Num<\"min\" | \"max\">) {\n const val = valueOf(v)\n return val >= o.min && val <= o.max\n}\n\nfunction decimalOperation(a: number, op: \"-\" | \"+\", b: number): number {\n let result = op === \"+\" ? a + b : a - b\n\n // Check if we have decimals\n if (a % 1 !== 0 || b % 1 !== 0) {\n const multiplier = 10 ** Math.max(countDecimals(a), countDecimals(b))\n\n // Transform the decimals to integers based on the precision\n a = Math.round(a * multiplier)\n b = Math.round(b * multiplier)\n\n // Perform the operation on integers values to make sure we don't get a fancy decimal value\n result = op === \"+\" ? a + b : a - b\n\n // Transform the integer result back to decimal\n result /= multiplier\n }\n\n return result\n}\n", "import {\n clamp,\n decrement,\n increment,\n isAtMax,\n isAtMin,\n isWithinRange,\n Num,\n percentToValue,\n FormatDecimalOptions,\n formatDecimal,\n snapToStep,\n valueOf,\n valueToPercent,\n} from \"./number\"\n\nexport type RangeOptions<T = string | number> = Num<\"min\" | \"max\"> &\n FormatDecimalOptions & {\n value: T\n step: number\n }\n\nexport function rangy(o: RangeOptions) {\n const wrap = (v: string | number) => rangy({ ...o, value: v })\n return {\n isInRange: isWithinRange(o.value, o),\n isAtMax: isAtMax(o.value, o),\n isAtMin: isAtMin(o.value, o),\n percent: valueToPercent(o.value, o),\n valueAsNumber: valueOf(o.value),\n value: formatDecimal(o.value, o),\n snapToStep: () => wrap(snapToStep(o.value, o.step)),\n increment: (s?: number) => wrap(increment(o.value, s || o.step)),\n decrement: (s?: number) => wrap(decrement(o.value, s || o.step)),\n toMax: () => wrap(o.max),\n toMin: () => wrap(o.min),\n fromPercent: (p: number) => wrap(percentToValue(p, o)),\n clamp: () => wrap(clamp(o.value, o)),\n }\n}\n", "export const nf = new Intl.NumberFormat(\"en-US\", { style: \"decimal\", maximumFractionDigits: 20 })\n\nexport function formatter(n: number) {\n return parseFloat(nf.format(n))\n}\n", "import { formatter } from \"./number-format\"\n\ntype Num<T extends string> = Record<T, number>\n\nexport const transform = (a: [number, number], b: [number, number]) => {\n const i = { min: a[0], max: a[1] }\n const o = { min: b[0], max: b[1] }\n return (v: number) => {\n if (i.min === i.max || o.min === o.max) return o.min\n const ratio = (o.max - o.min) / (i.max - i.min)\n return o.min + ratio * (v - i.min)\n }\n}\n\nexport function toRanges(o: Num<\"min\" | \"max\"> & { value: number[]; spacing: number }) {\n const spacing = o.spacing ?? 0\n return o.value.map((v, i) => {\n const min = i === 0 ? o.min : o.value[i - 1] + spacing\n const max = i === o.value.length - 1 ? o.max : o.value[i + 1] - spacing\n return { min, max, value: v }\n })\n}\n\nexport function toRangeArray(o: Num<\"min\" | \"max\" | \"step\">): number[] {\n let i = o.min\n const range: number[] = []\n while (i <= o.max) {\n range.push(i)\n i = formatter(i + o.step)\n }\n return range\n}\n", "import { RectEdge, RectValue } from \"./types\"\n\nconst point = (x: number, y: number) => ({ x, y })\n\nexport class Rect {\n static create(v: RectValue) {\n return new Rect(v)\n }\n protected constructor(private v: RectValue) {}\n set(n: Partial<RectValue>) {\n return new Rect(Object.assign({}, this.v, n))\n }\n clone() {\n return new Rect(this.v)\n }\n get x() {\n return this.v.x\n }\n get y() {\n return this.v.y\n }\n get width() {\n return this.v.width\n }\n get height() {\n return this.v.height\n }\n get minX() {\n return this.v.x\n }\n get midX() {\n return this.v.x + this.v.width / 2\n }\n get maxX() {\n return this.v.x + this.v.width\n }\n get minY() {\n return this.v.y\n }\n get midY() {\n return this.v.y + this.v.height / 2\n }\n get maxY() {\n return this.v.y + this.v.height\n }\n get center() {\n return point(this.midX, this.midY)\n }\n get centers() {\n const top = point(this.midX, this.minY)\n const right = point(this.maxX, this.midY)\n const bottom = point(this.midX, this.maxY)\n const left = point(this.minX, this.midY)\n return { top, right, bottom, left }\n }\n get corners() {\n const top = point(this.minX, this.minY)\n const right = point(this.maxX, this.minY)\n const bottom = point(this.maxX, this.maxY)\n const left = point(this.minX, this.maxY)\n return { top, right, bottom, left }\n }\n\n get edges() {\n const c = this.corners\n const top: RectEdge = [c.top, c.right]\n const right: RectEdge = [c.right, c.bottom]\n const bottom: RectEdge = [c.left, c.bottom]\n const left: RectEdge = [c.top, c.left]\n return { top, right, bottom, left }\n }\n}\n", "type Key = keyof CSSStyleDeclaration | (string & {})\ntype Styles = Record<Key, any>\ntype El = HTMLElement | null | undefined\n\nconst styleCache: WeakMap<HTMLElement, Styles> = new WeakMap()\n\nexport function getComputedStyle(el: El): Styles {\n if (!el) return {} as Styles\n let style: Styles | undefined = styleCache.get(el)\n if (!style) {\n const win = el?.ownerDocument.defaultView ?? window\n style = win.getComputedStyle(el) as Styles\n styleCache.set(el, style)\n }\n return style\n}\n", "import { Rect } from \"./rect\"\nimport { getComputedStyle } from \"./computed-style\"\n\nexport function getElementRect(el: HTMLElement, opts: ElementRectOptions = {}): Rect {\n return Rect.create(getClientRect(el, opts))\n}\n\nexport type ElementRectOptions = {\n /**\n * Whether to exclude the element's scrollbar size from the calculation.\n */\n excludeScrollbar?: boolean\n /**\n * Whether to exclude the element's borders from the calculation.\n */\n excludeBorders?: boolean\n}\n\nfunction getClientRect(el: HTMLElement, opts: ElementRectOptions = {}) {\n const { excludeScrollbar = false, excludeBorders = false } = opts\n\n const { x, y, width, height } = el.getBoundingClientRect()\n const r = { x, y, width, height }\n\n const style = getComputedStyle(el)\n\n const { borderLeftWidth, borderTopWidth, borderRightWidth, borderBottomWidth } = style\n\n const borderXWidth = sum(borderLeftWidth, borderRightWidth)\n const borderYWidth = sum(borderTopWidth, borderBottomWidth)\n\n if (excludeBorders) {\n r.width -= borderXWidth\n r.height -= borderYWidth\n r.x += px(borderLeftWidth)\n r.y += px(borderTopWidth)\n }\n\n if (excludeScrollbar) {\n const scrollbarWidth = el.offsetWidth - el.clientWidth - borderXWidth\n const scrollbarHeight = el.offsetHeight - el.clientHeight - borderYWidth\n r.width -= scrollbarWidth\n r.height -= scrollbarHeight\n }\n\n return r\n}\n\nconst px = (v: string) => parseFloat(v.replace(\"px\", \"\"))\n\nconst sum = (...vals: string[]) => vals.reduce((sum, v) => sum + (v ? px(v) : 0), 0)\n", "export function toArray<T>(v: T | T[] | undefined | null): T[] {\n if (!v) return []\n return Array.isArray(v) ? v : [v]\n}\n\nexport const fromLength = (length: number) => Array.from(Array(length).keys())\n\nexport const first = <T>(v: T[]): T | undefined => v[0]\n\nexport const last = <T>(v: T[]): T | undefined => v[v.length - 1]\n\nexport const isEmpty = <T>(v: T[]): boolean => v.length === 0\n\nexport const has = <T>(v: T[], t: any): boolean => v.indexOf(t) !== -1\n\nexport const add = <T>(v: T[], ...items: T[]): T[] => v.concat(items)\n\nexport const remove = <T>(v: T[], item: T): T[] => removeAt(v, v.indexOf(item))\n\nexport const removeAt = <T>(v: T[], i: number): T[] => {\n if (i > -1) v.splice(i, 1)\n return v\n}\n\nexport function clear<T>(v: T[]): T[] {\n while (v.length > 0) v.pop()\n return v\n}\n\nexport type IndexOptions = {\n step?: number\n loop?: boolean\n}\n\nexport function nextIndex<T>(v: T[], idx: number, opts: IndexOptions = {}): number {\n const { step = 1, loop = true } = opts\n const next = idx + step\n const len = v.length\n const last = len - 1\n if (idx === -1) return step > 0 ? 0 : last\n if (next < 0) return loop ? last : 0\n if (next >= len) return loop ? 0 : idx > len ? len : idx\n return next\n}\n\nexport function next<T>(v: T[], idx: number, opts: IndexOptions = {}): T | undefined {\n return v[nextIndex(v, idx, opts)]\n}\n\nexport function prevIndex<T>(v: T[], idx: number, opts: IndexOptions = {}): number {\n const { step = 1, loop = true } = opts\n return nextIndex(v, idx, { step: -step, loop })\n}\n\nexport function prev<T>(v: T[], index: number, opts: IndexOptions = {}): T | undefined {\n return v[prevIndex(v, index, opts)]\n}\n\nexport const chunk = <T>(v: T[], size: number): T[][] => {\n const res: T[][] = []\n return v.reduce((rows, value, index) => {\n if (index % size === 0) rows.push([value])\n else last(rows)?.push(value)\n return rows\n }, res)\n}\n", "export const isDev = () => process.env.NODE_ENV !== \"production\"\nexport const isDom = () => typeof window !== \"undefined\"\n\nexport const isArray = (v: any): v is any[] => Array.isArray(v)\nexport const isBoolean = (v: any): v is boolean => v === true || v === false\nexport const isObject = (v: any): v is Record<string, any> => !(v == null || typeof v !== \"object\" || isArray(v))\nexport const isNumber = (v: any): v is number => typeof v === \"number\" && !Number.isNaN(v)\nexport const isString = (v: any): v is string => typeof v === \"string\"\nexport const isFunction = (v: any): v is Function => typeof v === \"function\"\n\nexport const hasProp = <T extends string>(obj: any, prop: T): obj is Record<T, any> =>\n Object.prototype.hasOwnProperty.call(obj, prop)\n", "import { isDom } from \"./guard\"\n\nexport function getPlatform() {\n const agent = (navigator as any).userAgentData\n return agent?.platform ?? navigator.platform\n}\n\nconst pt = (v: RegExp) => isDom() && v.test(getPlatform())\nconst ua = (v: RegExp) => isDom() && v.test(navigator.userAgent)\nconst vn = (v: RegExp) => isDom() && v.test(navigator.vendor)\n\nexport const isTouchDevice = isDom() && !!navigator.maxTouchPoints\nexport const isMac = () => pt(/^Mac/) && !isTouchDevice\nexport const isIPhone = () => pt(/^iPhone/)\nexport const isSafari = () => isApple() && vn(/apple/i)\nexport const isFirefox = () => ua(/firefox\\//i)\nexport const isApple = () => pt(/mac|iphone|ipad|ipod/i)\nexport const isIos = () => isApple() && !isMac()\n", "import { hasProp, isDom, isObject } from \"./guard\"\nimport { isMac } from \"./platform\"\n\nexport const supportsPointerEvent = () => isDom() && window.onpointerdown === null\nexport const supportsTouchEvent = () => isDom() && window.ontouchstart === null\nexport const supportsMouseEvent = () => isDom() && window.onmousedown === null\n\nexport const isMouseEvent = (v: any): v is MouseEvent => isObject(v) && hasProp(v, \"button\")\nexport const isTouchEvent = (v: any): v is TouchEvent => isObject(v) && hasProp(v, \"touches\")\nexport const isLeftClick = (v: { button: number }) => v.button === 0\nexport const isRightClick = (v: { button: number }) => v.button === 2\nexport const isModifiedEvent = (v: Pick<KeyboardEvent, \"ctrlKey\" | \"metaKey\" | \"altKey\">) =>\n v.ctrlKey || v.altKey || v.metaKey\n\nexport const isCtrlKey = (v: Pick<KeyboardEvent, \"ctrlKey\" | \"metaKey\">) =>\n isMac() ? v.metaKey && !v.ctrlKey : v.ctrlKey && !v.metaKey\n", "export const runIfFn = <T>(\n v: T | undefined,\n ...a: T extends (...a: any[]) => void ? Parameters<T> : never\n): T extends (...a: any[]) => void ? NonNullable<ReturnType<T>> : NonNullable<T> => {\n const res = typeof v === \"function\" ? v(...a) : v\n return res ?? undefined\n}\n\nexport const cast = <T>(v: unknown): T => v as T\n\nexport const noop = () => {}\n\nexport const pipe =\n <T>(...fns: Array<(a: T) => T>) =>\n (v: T) =>\n fns.reduce((a, b) => b(a), v)\n\nexport const callAll =\n <T extends (...a: any[]) => void>(...fns: (T | undefined)[]) =>\n (...a: Parameters<T>) => {\n fns.forEach(function (fn) {\n fn?.(...a)\n })\n }\n\nexport const uuid = /*#__PURE__*/ (() => {\n let id = 0\n return () => {\n id++\n return id.toString(36)\n }\n})()\n\nexport function merge<T, U>(origin: T, patch: U): T & U {\n if (!(typeof patch === \"object\")) return patch as any\n const result = !(typeof origin === \"object\") ? {} : Object.assign({}, origin)\n for (const key of Object.keys(patch)) {\n const value = patch[key]\n const src = result[key]\n if (value === null) delete result[key]\n else if (Array.isArray(value) || Array.isArray(src)) result[key] = (src || []).concat(value || [])\n else result[key] = merge(src, value)\n }\n return result as any\n}\n", "export function warn(m: string): void\nexport function warn(c: boolean, m: string): void\nexport function warn(...a: any[]): void {\n const m = a.length === 1 ? a[0] : a[1]\n const c = a.length === 2 ? a[0] : true\n if (c && process.env.NODE_ENV !== \"production\") {\n console.warn(m)\n }\n}\n\nexport function invariant(m: string): void\nexport function invariant(c: boolean, m: string): void\nexport function invariant(...a: any[]): void {\n const m = a.length === 1 ? a[0] : a[1]\n const c = a.length === 2 ? a[0] : true\n if (c && process.env.NODE_ENV !== \"production\") {\n throw new Error(m)\n }\n}\n", "import { isTouchEvent } from \"@zag-js/utils\"\nimport { Point } from \"./types\"\n\nexport function distance(a: Point, b: Point = { x: 0, y: 0 }): number {\n return Math.sqrt(Math.pow(a.x - b.x, 2) + Math.pow(a.y - b.y, 2))\n}\n\nexport function closest(...pts: Point[]) {\n return (a: Point): Point => {\n const ds = pts.map((b) => distance(b, a))\n const c = Math.min.apply(Math, ds)\n return pts[ds.indexOf(c)]\n }\n}\n\nconst fallback = { pageX: 0, pageY: 0, clientX: 0, clientY: 0 }\n\nexport function getEventPoint(e: AnyPointerEvent, t: PointType = \"page\"): Point {\n const p = isTouchEvent(e) ? e.touches[0] || e.changedTouches[0] || fallback : e\n return { x: p[`${t}X`], y: p[`${t}Y`] }\n}\n\nexport function relativeToNode(p: Point, el: HTMLElement): RelativeValue {\n const dx = p.x - el.offsetLeft - el.clientLeft + el.scrollLeft\n const dy = p.y - el.offsetTop - el.clientTop + el.scrollTop\n return {\n point: { x: dx, y: dy },\n progress: { x: dx / el.offsetWidth, y: dy / el.offsetHeight },\n }\n}\n\ntype AnyPointerEvent = MouseEvent | TouchEvent | PointerEvent\n\ntype RelativeValue = {\n point: Point\n progress: { x: number; y: number }\n}\n\ntype PointType = \"page\" | \"client\"\n", "import { Rect } from \"./rect\"\nimport type { Point, RectInset, SymmetricRectInset } from \"./types\"\n\nexport const isSymmetric = (v: any): v is SymmetricRectInset => \"dx\" in v || \"dy\" in v\n\nexport function inset(r: Rect, i: RectInset | SymmetricRectInset): Rect {\n const v = isSymmetric(i) ? { left: i.dx, right: i.dx, top: i.dy, bottom: i.dy } : i\n const { top = 0, right = 0, bottom = 0, left = 0 } = v\n return Rect.create({ x: r.x + left, y: r.y + top, width: r.width - left - right, height: r.height - top - bottom })\n}\n\nexport function expand(r: Rect, v: number | SymmetricRectInset): Rect {\n const value = typeof v === \"number\" ? { dx: -v, dy: -v } : v\n return inset(r, value)\n}\n\nexport function shrink(r: Rect, v: number | SymmetricRectInset): Rect {\n const value = typeof v === \"number\" ? { dx: -v, dy: -v } : v\n return inset(r, value)\n}\n\nexport function shift(r: Rect, o: Partial<Point>): Rect {\n const { x = 0, y = 0 } = o\n return Rect.create({ x: r.x + x, y: r.y + y, width: r.width, height: r.height })\n}\n", "import { Point } from \"./types\"\n\nexport function withinPolygon(polygon: Point[], point: Point) {\n const { x, y } = point\n let c = false\n\n for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\n const xi = polygon[i].x\n const yi = polygon[i].y\n const xj = polygon[j].x\n const yj = polygon[j].y\n\n if (yi > y !== yj > y && x < ((xj - xi) * (y - yi)) / (yj - yi) + xi) {\n c = !c\n }\n }\n return c\n}\n\nfunction createPolygonElement() {\n const id = \"debug-polygon\"\n const existingPolygon = document.getElementById(id)\n if (existingPolygon) {\n return existingPolygon\n }\n const svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\")\n Object.assign(svg.style, {\n top: \"0\",\n left: \"0\",\n width: \"100%\",\n height: \"100%\",\n opacity: \"0.15\",\n position: \"fixed\",\n pointerEvents: \"none\",\n })\n\n const polygon = document.createElementNS(\"http://www.w3.org/2000/svg\", \"polygon\")\n polygon.setAttribute(\"id\", id)\n polygon.setAttribute(\"points\", \"0,0 0,0\")\n svg.appendChild(polygon)\n document.body.appendChild(svg)\n return polygon\n}\n\nexport function debugPolygon(polygon: Point[]) {\n const el = createPolygonElement()\n const points = polygon.map((point) => `${point.x},${point.y}`).join(\" \")\n el.setAttribute(\"points\", points)\n}\n", "import type * as React from \"react\"\n\ntype Dict<T = any> = Record<string, T>\n\ntype Booleanish = boolean | \"true\" | \"false\"\n\ntype Omit<T, K extends keyof T> = { [P in Exclude<keyof T, K>]?: T[P] }\n\ntype WithStyle<T extends { style?: any }> = Omit<T, \"style\"> & {\n style?: T[\"style\"] & {\n [prop: string]: string | number | undefined\n }\n}\n\ntype DataAttr = {\n \"data-uid\"?: string\n \"data-name\"?: string\n \"data-ownedby\"?: string\n \"data-selected\"?: Booleanish\n \"data-expanded\"?: Booleanish\n \"data-highlighted\"?: Booleanish\n \"data-readonly\"?: Booleanish\n \"data-invalid\"?: Booleanish\n \"data-hover\"?: Booleanish\n \"data-active\"?: Booleanish\n \"data-focus\"?: Booleanish\n \"data-disabled\"?: Booleanish\n \"data-type\"?: string\n \"data-value\"?: string | number\n \"data-valuetext\"?: string\n \"data-open\"?: Booleanish\n \"data-placement\"?: string\n \"data-orientation\"?: \"horizontal\" | \"vertical\"\n \"data-label\"?: string\n \"data-checked\"?: Booleanish\n \"data-pressed\"?: Booleanish\n \"data-state\"?: string | null\n \"data-half\"?: Booleanish\n \"data-count\"?: number\n \"data-controls\"?: string\n \"data-part\"?: string\n \"data-index\"?: number\n \"data-complete\"?: Booleanish\n \"data-empty\"?: Booleanish\n \"data-placeholder-shown\"?: Booleanish\n}\n\ntype JSXElementAttributes = DataAttr & React.HTMLAttributes<HTMLElement>\ntype JSXButtonAttributes = DataAttr & React.ButtonHTMLAttributes<HTMLButtonElement>\ntype JSXInputAttributes = DataAttr & React.InputHTMLAttributes<HTMLInputElement>\ntype JSXLabelAttributes = DataAttr & React.LabelHTMLAttributes<HTMLLabelElement>\ntype JSXOutputAttributes = DataAttr & React.OutputHTMLAttributes<HTMLOutputElement>\n\nexport type PropTypes = Record<\"button\" | \"label\" | \"input\" | \"output\" | \"element\", Dict>\n\nexport type ReactPropTypes = {\n button: JSXButtonAttributes\n label: JSXLabelAttributes\n input: JSXInputAttributes\n output: JSXOutputAttributes\n element: JSXElementAttributes\n}\n\nexport type NormalizeProps = {\n button<T extends PropTypes>(props: WithStyle<JSXButtonAttributes>): T[\"button\"]\n label<T extends PropTypes>(props: WithStyle<JSXLabelAttributes>): T[\"label\"]\n input<T extends PropTypes>(props: WithStyle<JSXInputAttributes>): T[\"input\"]\n output<T extends PropTypes>(props: WithStyle<JSXOutputAttributes>): T[\"output\"]\n element<T extends PropTypes>(props: WithStyle<JSXElementAttributes>): T[\"element\"]\n}\n\nexport function createNormalizer(fn: (props: Dict) => Dict): NormalizeProps {\n return new Proxy({} as any, {\n get() {\n return fn\n },\n })\n}\n\nexport const normalizeProp = createNormalizer((v) => v)\n", "export type ControlProp =\n | { type: \"boolean\"; label?: string; defaultValue: boolean }\n | { type: \"string\"; label?: string; defaultValue: string; placeholder?: string }\n | { type: \"select\"; options: readonly string[]; defaultValue: string; label?: string }\n | { type: \"multiselect\"; options: readonly string[]; defaultValue: string[]; label?: string }\n | { type: \"number\"; label?: string; defaultValue: number; min?: number; max?: number }\n\nexport type ControlRecord = Record<string, ControlProp>\n\nexport type ControlValue<T extends ControlRecord> = {\n [K in keyof T]: T[K] extends { type: \"boolean\" }\n ? boolean\n : T[K] extends { type: \"string\" }\n ? string\n : T[K] extends { type: \"select\" }\n ? T[K][\"options\"][number]\n : T[K] extends { type: \"multiselect\" }\n ? T[K][\"options\"][number][]\n : T[K] extends { type: \"number\" }\n ? number\n : never\n}\n\nexport function defineControls<T extends ControlRecord>(config: T) {\n return config\n}\n", "export function toArray<T>(v: T | T[] | undefined | null): T[] {\n if (!v) return []\n return Array.isArray(v) ? v : [v]\n}\n\nexport const fromLength = (length: number) => Array.from(Array(length).keys())\n\nexport const first = <T>(v: T[]): T | undefined => v[0]\n\nexport const last = <T>(v: T[]): T | undefined => v[v.length - 1]\n\nexport const isEmpty = <T>(v: T[]): boolean => v.length === 0\n\nexport const has = <T>(v: T[], t: any): boolean => v.indexOf(t) !== -1\n\nexport const add = <T>(v: T[], ...items: T[]): T[] => v.concat(items)\n\nexport const remove = <T>(v: T[], item: T): T[] => removeAt(v, v.indexOf(item))\n\nexport const removeAt = <T>(v: T[], i: number): T[] => {\n if (i > -1) v.splice(i, 1)\n return v\n}\n\nexport function clear<T>(v: T[]): T[] {\n while (v.length > 0) v.pop()\n return v\n}\n\nexport type IndexOptions = {\n step?: number\n loop?: boolean\n}\n\nexport function nextIndex<T>(v: T[], idx: number, opts: IndexOptions = {}): number {\n const { step = 1, loop = true } = opts\n const next = idx + step\n const len = v.length\n const last = len - 1\n if (idx === -1) return step > 0 ? 0 : last\n if (next < 0) return loop ? last : 0\n if (next >= len) return loop ? 0 : idx > len ? len : idx\n return next\n}\n\nexport function next<T>(v: T[], idx: number, opts: IndexOptions = {}): T | undefined {\n return v[nextIndex(v, idx, opts)]\n}\n\nexport function prevIndex<T>(v: T[], idx: number, opts: IndexOptions = {}): number {\n const { step = 1, loop = true } = opts\n return nextIndex(v, idx, { step: -step, loop })\n}\n\nexport function prev<T>(v: T[], index: number, opts: IndexOptions = {}): T | undefined {\n return v[prevIndex(v, index, opts)]\n}\n\nexport const chunk = <T>(v: T[], size: number): T[][] => {\n const res: T[][] = []\n return v.reduce((rows, value, index) => {\n if (index % size === 0) rows.push([value])\n else last(rows)?.push(value)\n return rows\n }, res)\n}\n", "export const isDev = () => process.env.NODE_ENV !== \"production\"\nexport const isDom = () => typeof window !== \"undefined\"\n\nexport const isArray = (v: any): v is any[] => Array.isArray(v)\nexport const isBoolean = (v: any): v is boolean => v === true || v === false\nexport const isObject = (v: any): v is Record<string, any> => !(v == null || typeof v !== \"object\" || isArray(v))\nexport const isNumber = (v: any): v is number => typeof v === \"number\" && !Number.isNaN(v)\nexport const isString = (v: any): v is string => typeof v === \"string\"\nexport const isFunction = (v: any): v is Function => typeof v === \"function\"\n\nexport const hasProp = <T extends string>(obj: any, prop: T): obj is Record<T, any> =>\n Object.prototype.hasOwnProperty.call(obj, prop)\n", "import { isDom } from \"./guard\"\n\nexport function getPlatform() {\n const agent = (navigator as any).userAgentData\n return agent?.platform ?? navigator.platform\n}\n\nconst pt = (v: RegExp) => isDom() && v.test(getPlatform())\nconst ua = (v: RegExp) => isDom() && v.test(navigator.userAgent)\nconst vn = (v: RegExp) => isDom() && v.test(navigator.vendor)\n\nexport const isTouchDevice = isDom() && !!navigator.maxTouchPoints\nexport const isMac = () => pt(/^Mac/) && !isTouchDevice\nexport const isIPhone = () => pt(/^iPhone/)\nexport const isSafari = () => isApple() && vn(/apple/i)\nexport const isFirefox = () => ua(/firefox\\//i)\nexport const isApple = () => pt(/mac|iphone|ipad|ipod/i)\nexport const isIos = () => isApple() && !isMac()\n", "import { hasProp, isDom, isObject } from \"./guard\"\nimport { isMac } from \"./platform\"\n\nexport const supportsPointerEvent = () => isDom() && window.onpointerdown === null\nexport const supportsTouchEvent = () => isDom() && window.ontouchstart === null\nexport const supportsMouseEvent = () => isDom() && window.onmousedown === null\n\nexport const isMouseEvent = (v: any): v is MouseEvent => isObject(v) && hasProp(v, \"button\")\nexport const isTouchEvent = (v: any): v is TouchEvent => isObject(v) && hasProp(v, \"touches\")\nexport const isLeftClick = (v: { button: number }) => v.button === 0\nexport const isRightClick = (v: { button: number }) => v.button === 2\nexport const isModifiedEvent = (v: Pick<KeyboardEvent, \"ctrlKey\" | \"metaKey\" | \"altKey\">) =>\n v.ctrlKey || v.altKey || v.metaKey\n\nexport const isCtrlKey = (v: Pick<KeyboardEvent, \"ctrlKey\" | \"metaKey\">) =>\n isMac() ? v.metaKey && !v.ctrlKey : v.ctrlKey && !v.metaKey\n", "export const runIfFn = <T>(\n v: T | undefined,\n ...a: T extends (...a: any[]) => void ? Parameters<T> : never\n): T extends (...a: any[]) => void ? NonNullable<ReturnType<T>> : NonNullable<T> => {\n const res = typeof v === \"function\" ? v(...a) : v\n return res ?? undefined\n}\n\nexport const cast = <T>(v: unknown): T => v as T\n\nexport const noop = () => {}\n\nexport const pipe =\n <T>(...fns: Array<(a: T) => T>) =>\n (v: T) =>\n fns.reduce((a, b) => b(a), v)\n\nexport const callAll =\n <T extends (...a: any[]) => void>(...fns: (T | undefined)[]) =>\n (...a: Parameters<T>) => {\n fns.forEach(function (fn) {\n fn?.(...a)\n })\n }\n\nexport const uuid = /*#__PURE__*/ (() => {\n let id = 0\n return () => {\n id++\n return id.toString(36)\n }\n})()\n\nexport function merge<T, U>(origin: T, patch: U): T & U {\n if (!(typeof patch === \"object\")) return patch as any\n const result = !(typeof origin === \"object\") ? {} : Object.assign({}, origin)\n for (const key of Object.keys(patch)) {\n const value = patch[key]\n const src = result[key]\n if (value === null) delete result[key]\n else if (Array.isArray(value) || Array.isArray(src)) result[key] = (src || []).concat(value || [])\n else result[key] = merge(src, value)\n }\n return result as any\n}\n", "export function warn(m: string): void\nexport function warn(c: boolean, m: string): void\nexport function warn(...a: any[]): void {\n const m = a.length === 1 ? a[0] : a[1]\n const c = a.length === 2 ? a[0] : true\n if (c && process.env.NODE_ENV !== \"production\") {\n console.warn(m)\n }\n}\n\nexport function invariant(m: string): void\nexport function invariant(c: boolean, m: string): void\nexport function invariant(...a: any[]): void {\n const m = a.length === 1 ? a[0] : a[1]\n const c = a.length === 2 ? a[0] : true\n if (c && process.env.NODE_ENV !== \"production\") {\n throw new Error(m)\n }\n}\n", "import { MAX_Z_INDEX } from \"@zag-js/dom-utils\"\nimport { roundToDevicePixel, wrap } from \"@zag-js/number-utils\"\nimport { MachineContext as Ctx } from \"./number-input.types\"\n\ntype InputEl = HTMLInputElement | null\ntype ButtonEl = HTMLButtonElement | null\n\nexport const dom = {\n getDoc: (ctx: Ctx) => ctx.doc ?? document,\n getWin: (ctx: Ctx) => dom.getDoc(ctx).defaultView ?? window,\n getRootNode: (ctx: Ctx) => ctx.rootNode ?? dom.getDoc(ctx),\n\n getRootId: (ctx: Ctx) => ctx.ids?.root ?? `number-input:${ctx.uid}`,\n getInputId: (ctx: Ctx) => ctx.ids?.input ?? `number-input:${ctx.uid}:input`,\n getIncButtonId: (ctx: Ctx) => ctx.ids?.incBtn ?? `number-input:${ctx.uid}:inc-btn`,\n getDecButtonId: (ctx: Ctx) => ctx.ids?.decBtn ?? `number-input:${ctx.uid}:dec-btn`,\n getScrubberId: (ctx: Ctx) => ctx.ids?.scrubber ?? `number-input:${ctx.uid}:scrubber`,\n getCursorId: (ctx: Ctx) => `number-input:${ctx.uid}:cursor`,\n getLabelId: (ctx: Ctx) => ctx.ids?.label ?? `number-input:${ctx.uid}:label`,\n\n getInputEl: (ctx: Ctx) => dom.getRootNode(ctx).getElementById(dom.getInputId(ctx)) as InputEl,\n getIncButtonEl: (ctx: Ctx) => dom.getRootNode(ctx).getElementById(dom.getIncButtonId(ctx)) as ButtonEl,\n getDecButtonEl: (ctx: Ctx) => dom.getRootNode(ctx).getElementById(dom.getDecButtonId(ctx)) as ButtonEl,\n getScrubberEl: (ctx: Ctx) => dom.getRootNode(ctx).getElementById(dom.getScrubberId(ctx)),\n getCursorEl: (ctx: Ctx) => dom.getDoc(ctx).getElementById(dom.getCursorId(ctx)),\n\n getMousementValue(ctx: Ctx, event: MouseEvent) {\n const x = roundToDevicePixel(event.movementX)\n const y = roundToDevicePixel(event.movementY)\n\n let hint = x > 0 ? \"increment\" : x < 0 ? \"decrement\" : null\n\n if (ctx.isRtl && hint === \"increment\") hint = \"decrement\"\n if (ctx.isRtl && hint === \"decrement\") hint = \"increment\"\n\n const point = {\n x: ctx.scrubberCursorPoint!.x + x,\n y: ctx.scrubberCursorPoint!.y + y,\n }\n\n const win = dom.getWin(ctx)\n const width = win.innerWidth\n const half = roundToDevicePixel(7.5)\n point.x = wrap(point.x + half, width) - half\n\n return { hint, point }\n },\n\n createVirtualCursor(ctx: Ctx) {\n const doc = dom.getDoc(ctx)\n const el = doc.createElement(\"div\")\n el.className = \"scrubber--cursor\"\n el.id = dom.getCursorId(ctx)\n\n Object.assign(el.style, {\n width: \"15px\",\n height: \"15px\",\n position: \"fixed\",\n pointerEvents: \"none\",\n left: \"0px\",\n top: \"0px\",\n zIndex: MAX_Z_INDEX,\n transform: ctx.scrubberCursorPoint\n ? `translate3d(${ctx.scrubberCursorPoint.x}px, ${ctx.scrubberCursorPoint.y}px, 0px)`\n : undefined,\n willChange: \"transform\",\n })\n\n el.innerHTML = `\n <svg width=\"46\" height=\"15\" style=\"left: -15.5px; position: absolute; top: 0; filter: drop-shadow(rgba(0, 0, 0, 0.4) 0px 1px 1.1px);\">\n <g transform=\"translate(2 3)\">\n <path fill-rule=\"evenodd\" d=\"M 15 4.5L 15 2L 11.5 5.5L 15 9L 15 6.5L 31 6.5L 31 9L 34.5 5.5L 31 2L 31 4.5Z\" style=\"stroke-width: 2px; stroke: white;\"></path>\n <path fill-rule=\"evenodd\" d=\"M 15 4.5L 15 2L 11.5 5.5L 15 9L 15 6.5L 31 6.5L 31 9L 34.5 5.5L 31 2L 31 4.5Z\"></path>\n </g>\n </svg>`\n\n doc.body.appendChild(el)\n },\n}\n", "import { clamp, decrement, increment, formatDecimal } from \"@zag-js/number-utils\"\nimport { isModifiedEvent } from \"@zag-js/utils\"\nimport type { KeyboardEvent } from \"react\"\nimport type { MachineContext as Ctx } from \"./number-input.types\"\n\nexport const utils = {\n isValidNumericEvent: (ctx: Ctx, event: KeyboardEvent) => {\n if (event.key == null) return true\n const isModifier = isModifiedEvent(event)\n const isSingleKey = event.key.length === 1\n if (isModifier || !isSingleKey) return true\n return ctx.validateCharacter?.(event.key) ?? utils.isFloatingPoint(event.key)\n },\n isFloatingPoint: (v: string) => /^[Ee0-9+\\-.]$/.test(v),\n sanitize: (ctx: Ctx, value: string) => {\n return value\n .split(\"\")\n .filter(ctx.validateCharacter ?? utils.isFloatingPoint)\n .join(\"\")\n },\n increment: (ctx: Ctx, step?: number) => {\n const value = increment(ctx.value, step ?? ctx.step)\n return formatDecimal(clamp(value, ctx), ctx)\n },\n decrement: (ctx: Ctx, step?: number) => {\n const value = decrement(ctx.value, step ?? ctx.step)\n return formatDecimal(clamp(value, ctx), ctx)\n },\n clamp: (ctx: Ctx) => {\n return formatDecimal(clamp(ctx.value, ctx), ctx)\n },\n parse: (ctx: Ctx, value: string) => {\n return ctx.parse?.(value) ?? value\n },\n format: (ctx: Ctx, value: string | number) => {\n const _val = value.toString()\n return ctx.format?.(_val) ?? _val\n },\n round: (ctx: Ctx) => {\n return formatDecimal(ctx.value, ctx)\n },\n}\n", "import { ariaAttr, dataAttr, EventKeyMap, getEventStep, getNativeEvent } from \"@zag-js/dom-utils\"\nimport { roundToDevicePixel } from \"@zag-js/number-utils\"\nimport { getEventPoint } from \"@zag-js/rect-utils\"\nimport { normalizeProp, PropTypes, ReactPropTypes } from \"@zag-js/types\"\nimport { isIos, isLeftClick } from \"@zag-js/utils\"\nimport { dom } from \"./number-input.dom\"\nimport { Send, State } from \"./number-input.types\"\nimport { utils } from \"./number-input.utils\"\n\nexport function connect<T extends PropTypes = ReactPropTypes>(state: State, send: Send, normalize = normalizeProp) {\n const isFocused = state.hasTag(\"focus\")\n const isInvalid = state.context.isOutOfRange || !!state.context.invalid\n\n const isDisabled = !!state.context.disabled\n const isIncrementDisabled = isDisabled || !state.context.canIncrement\n const isDecrementDisabled = isDisabled || !state.context.canDecrement\n\n const messages = state.context.messages\n\n return {\n isFocused,\n isInvalid,\n value: state.context.formattedValue,\n valueAsNumber: state.context.valueAsNumber,\n setValue(value: string | number) {\n send({ type: \"SET_VALUE\", value: value.toString() })\n },\n clearValue() {\n send(\"CLEAR_VALUE\")\n },\n increment() {\n send(\"INCREMENT\")\n },\n decrement() {\n send(\"DECREMENT\")\n },\n setToMax() {\n send({ type: \"SET_VALUE\", value: state.context.max })\n },\n setToMin() {\n send({ type: \"SET_VALUE\", value: state.context.min })\n },\n focus() {\n dom.getInputEl(state.context)?.focus()\n },\n\n rootProps: normalize.element<T>({\n id: dom.getRootId(state.context),\n \"data-part\": \"root\",\n \"data-disabled\": dataAttr(isDisabled),\n }),\n\n labelProps: normalize.label<T>({\n \"data-part\": \"label\",\n \"data-disabled\": dataAttr(isDisabled),\n \"data-invalid\": dataAttr(isInvalid),\n id: dom.getLabelId(state.context),\n htmlFor: dom.getInputId(state.context),\n }),\n\n groupProps: normalize.element<T>({\n \"data-part\": \"group\",\n role: \"group\",\n \"aria-disabled\": isDisabled,\n \"data-disabled\": dataAttr(isDisabled),\n \"data-invalid\": dataAttr(isInvalid),\n \"aria-invalid\": ariaAttr(state.context.invalid),\n }),\n\n inputProps: normalize.input<T>({\n \"data-part\": \"input\",\n name: state.context.name,\n id: dom.getInputId(state.context),\n role: \"spinbutton\",\n value: state.context.formattedValue,\n pattern: state.context.pattern,\n inputMode: state.context.inputMode,\n \"aria-invalid\": isInvalid || undefined,\n \"data-invalid\": dataAttr(isInvalid),\n disabled: isDisabled,\n \"data-disabled\": dataAttr(isDisabled),\n readOnly: !!state.context.readonly,\n autoComplete: \"off\",\n autoCorrect: \"off\",\n spellCheck: \"false\",\n type: \"text\",\n \"aria-roledescription\": !isIos() ? \"number field\" : undefined,\n \"aria-valuemin\": state.context.min,\n \"aria-valuemax\": state.context.max,\n \"aria-valuenow\": isNaN(state.context.valueAsNumber) ? undefined : state.context.valueAsNumber,\n \"aria-valuetext\": state.context.valueText,\n onFocus() {\n send(\"FOCUS\")\n },\n onBlur() {\n send(\"BLUR\")\n },\n onChange(event) {\n const evt = getNativeEvent(event)\n if (evt.isComposing) return\n send({ type: \"CHANGE\", target: event.currentTarget, hint: \"set\" })\n },\n onKeyDown(event) {\n const evt = getNativeEvent(event)\n if (evt.isComposing) return\n\n if (!utils.isValidNumericEvent(state.context, event)) {\n event.preventDefault()\n }\n\n const step = getEventStep(event) * state.context.step\n\n const keyMap: EventKeyMap = {\n ArrowUp() {\n send({ type: \"ARROW_UP\", step })\n },\n ArrowDown() {\n send({ type: \"ARROW_DOWN\", step })\n },\n Home() {\n send(\"HOME\")\n },\n End() {\n send(\"END\")\n },\n }\n\n const exec = keyMap[event.key]\n\n if (exec) {\n exec(event)\n event.preventDefault()\n }\n },\n }),\n\n decrementButtonProps: normalize.button<T>({\n \"data-part\": \"spin-button\",\n \"data-type\": \"decrement\",\n id: dom.getDecButtonId(state.context),\n disabled: isDecrementDisabled,\n \"data-disabled\": dataAttr(isDecrementDisabled),\n \"aria-label\": messages.decrementLabel,\n type: \"button\",\n tabIndex: -1,\n \"aria-controls\": dom.getInputId(state.context),\n onPointerDown(event) {\n if (isDecrementDisabled) return\n send(isLeftClick(event) ? { type: \"PRESS_DOWN\", hint: \"decrement\" } : { type: \"FOCUS\" })\n event.preventDefault()\n },\n onPointerUp() {\n send({ type: \"PRESS_UP\", hint: \"decrement\" })\n },\n onPointerLeave() {\n if (isDecrementDisabled) return\n send({ type: \"PRESS_UP\", hint: \"decrement\" })\n },\n }),\n\n incrementButtonProps: normalize.button<T>({\n \"data-part\": \"spin-button\",\n \"data-type\": \"increment\",\n id: dom.getIncButtonId(state.context),\n disabled: isIncrementDisabled,\n \"data-disabled\": dataAttr(isIncrementDisabled),\n \"aria-label\": messages.incrementLabel,\n type: \"button\",\n tabIndex: -1,\n \"aria-controls\": dom.getInputId(state.context),\n onPointerDown(event) {\n if (isIncrementDisabled) return\n send(isLeftClick(event) ? { type: \"PRESS_DOWN\", hint: \"increment\" } : { type: \"FOCUS\" })\n event.preventDefault()\n },\n onPointerUp() {\n send({ type: \"PRESS_UP\", hint: \"increment\" })\n },\n onPointerLeave() {\n send({ type: \"PRESS_UP\", hint: \"increment\" })\n },\n }),\n\n scrubberProps: normalize.element<T>({\n \"data-disabled\": dataAttr(isDisabled),\n \"data-part\": \"scrubber\",\n id: dom.getScrubberId(state.context),\n role: \"presentation\",\n onMouseDown(event) {\n if (isDisabled) return\n const evt = getNativeEvent(event)\n event.preventDefault()\n const point = getEventPoint(evt)\n\n point.x = point.x - roundToDevicePixel(7.5)\n point.y = point.y - roundToDevicePixel(7.5)\n\n send({ type: \"PRESS_DOWN_SCRUBBER\", point })\n },\n style: {\n cursor: isDisabled ? undefined : \"ew-resize\",\n },\n }),\n }\n}\n", "import { choose, createMachine, guards, ref } from \"@zag-js/core\"\nimport { addDomEvent, observeAttributes, raf, requestPointerLock } from \"@zag-js/dom-utils\"\nimport { isAtMax, isAtMin, isWithinRange, valueOf } from \"@zag-js/number-utils\"\nimport { isSafari, pipe, supportsPointerEvent } from \"@zag-js/utils\"\nimport { dom } from \"./number-input.dom\"\nimport type { MachineContext, MachineState, UserDefinedContext } from \"./number-input.types\"\nimport { utils } from \"./number-input.utils\"\n\nconst { not, and } = guards\n\nexport function machine(ctx: UserDefinedContext = {}) {\n return createMachine<MachineContext, MachineState>(\n {\n id: \"number-input\",\n initial: \"unknown\",\n context: {\n uid: \"\",\n dir: \"ltr\",\n focusInputOnChange: true,\n clampValueOnBlur: true,\n allowOverflow: false,\n inputMode: \"decimal\",\n pattern: \"[0-9]*(.[0-9]+)?\",\n hint: null,\n value: \"\",\n step: 1,\n min: Number.MIN_SAFE_INTEGER,\n max: Number.MAX_SAFE_INTEGER,\n scrubberCursorPoint: null,\n invalid: false,\n ...ctx,\n messages: {\n incrementLabel: \"increment value\",\n decrementLabel: \"decrease value\",\n ...ctx.messages,\n },\n },\n\n computed: {\n isRtl: (ctx) => ctx.dir === \"rtl\",\n valueAsNumber: (ctx) => valueOf(ctx.value),\n isAtMin: (ctx) => isAtMin(ctx.value, ctx),\n isAtMax: (ctx) => isAtMax(ctx.value, ctx),\n isOutOfRange: (ctx) => !isWithinRange(ctx.value, ctx),\n canIncrement: (ctx) => ctx.allowOverflow || !ctx.isAtMax,\n canDecrement: (ctx) => ctx.allowOverflow || !ctx.isAtMin,\n valueText: (ctx) => ctx.messages.valueText?.(ctx.value),\n formattedValue: (ctx) => ctx.format?.(ctx.value).toString() ?? ctx.value,\n },\n\n watch: {\n value: [\"invokeOnChange\"],\n isOutOfRange: [\"invokeOnInvalid\"],\n },\n\n on: {\n SET_VALUE: {\n actions: [\"setValue\", \"setHintToSet\"],\n },\n CLEAR_VALUE: {\n actions: [\"clearValue\"],\n },\n INCREMENT: {\n actions: [\"increment\"],\n },\n DECREMENT: {\n actions: [\"decrement\"],\n },\n },\n\n states: {\n unknown: {\n on: {\n SETUP: {\n target: \"idle\",\n actions: [\"setupDocument\", \"syncInputValue\"],\n },\n },\n },\n\n idle: {\n on: {\n PRESS_DOWN: {\n target: \"before:spin\",\n actions: [\"focusInput\", \"setHint\"],\n },\n PRESS_DOWN_SCRUBBER: {\n target: \"scrubbing\",\n actions: [\"focusInput\", \"setHint\", \"setCursorPoint\"],\n },\n FOCUS: \"focused\",\n },\n },\n\n focused: {\n tags: [\"focus\"],\n entry: \"focusInput\",\n activities: \"attachWheelListener\",\n on: {\n PRESS_DOWN: {\n target: \"before:spin\",\n actions: [\"focusInput\", \"setHint\"],\n },\n PRESS_DOWN_SCRUBBER: {\n target: \"scrubbing\",\n actions: [\"focusInput\", \"setHint\", \"setCursorPoint\"],\n },\n ARROW_UP: {\n actions: \"increment\",\n },\n ARROW_DOWN: {\n actions: \"decrement\",\n },\n HOME: {\n actions: \"setToMin\",\n },\n END: {\n actions: \"setToMax\",\n },\n CHANGE: {\n actions: [\"setValue\", \"setHint\"],\n },\n BLUR: [\n {\n guard: \"isInvalidExponential\",\n target: \"idle\",\n actions: [\"clearValue\", \"clearHint\"],\n },\n {\n guard: and(\"clampOnBlur\", not(\"isInRange\")),\n target: \"idle\",\n actions: [\"clampValue\", \"clearHint\"],\n },\n {\n target: \"idle\",\n actions: \"roundValue\",\n },\n ],\n },\n },\n\n \"before:spin\": {\n tags: [\"focus\"],\n activities: \"trackButtonDisabled\",\n entry: choose([\n { guard: \"isIncrementHint\", actions: \"increment\" },\n { guard: \"isDecrementHint\", actions: \"decrement\" },\n ]),\n after: {\n CHANGE_DELAY: {\n target: \"spinning\",\n guard: \"isInRange\",\n },\n },\n on: {\n PRESS_UP: {\n target: \"focused\",\n actions: \"clearHint\",\n },\n },\n },\n\n spinning: {\n tags: [\"focus\"],\n activities: \"trackButtonDisabled\",\n every: [\n {\n delay: \"CHANGE_INTERVAL\",\n guard: and(not(\"isAtMin\"), \"isIncrementHint\"),\n actions: \"increment\",\n },\n {\n delay: \"CHANGE_INTERVAL\",\n guard: and(not(\"isAtMax\"), \"isDecrementHint\"),\n actions: \"decrement\",\n },\n ],\n on: {\n PRESS_UP: {\n target: \"focused\",\n actions: \"clearHint\",\n },\n },\n },\n\n scrubbing: {\n tags: [\"focus\"],\n entry: [\"addCustomCursor\", \"disableTextSelection\"],\n exit: [\"removeCustomCursor\", \"restoreTextSelection\"],\n activities: [\"activatePointerLock\", \"trackMousemove\"],\n on: {\n POINTER_UP_SCRUBBER: {\n target: \"focused\",\n actions: \"clearCursorPoint\",\n },\n POINTER_MOVE_SCRUBBER: [\n {\n guard: \"isIncrementHint\",\n actions: [\"increment\", \"setCursorPoint\", \"updateCursor\"],\n },\n {\n guard: \"isDecrementHint\",\n actions: [\"decrement\", \"setCursorPoint\", \"updateCursor\"],\n },\n ],\n },\n },\n },\n },\n {\n delays: {\n CHANGE_INTERVAL: 50,\n CHANGE_DELAY: 300,\n },\n\n guards: {\n clampOnBlur: (ctx) => !!ctx.clampValueOnBlur,\n isAtMin: (ctx) => ctx.isAtMin,\n isAtMax: (ctx) => ctx.isAtMax,\n isInRange: (ctx) => !ctx.isOutOfRange,\n isDecrementHint: (ctx, evt) => (evt.hint ?? ctx.hint) === \"decrement\",\n isIncrementHint: (ctx, evt) => (evt.hint ?? ctx.hint) === \"increment\",\n isInvalidExponential: (ctx) => ctx.value.toString().startsWith(\"e\"),\n },\n\n activities: {\n trackButtonDisabled(ctx, _evt, { send }) {\n let btnEl: HTMLButtonElement | null = null\n if (ctx.hint === \"increment\") {\n btnEl = dom.getIncButtonEl(ctx)\n }\n if (ctx.hint === \"decrement\") {\n btnEl = dom.getDecButtonEl(ctx)\n }\n return observeAttributes(btnEl, \"disabled\", function onDisable() {\n send(\"PRESS_UP\")\n })\n },\n attachWheelListener(ctx, _evt, { send }) {\n const input = dom.getInputEl(ctx)\n if (!input) return\n\n function onWheel(event: WheelEvent) {\n const isInputFocused = dom.getDoc(ctx).activeElement === input\n if (!ctx.allowMouseWheel || !isInputFocused) return\n event.preventDefault()\n\n const dir = Math.sign(event.deltaY) * -1\n if (dir === 1) {\n send(\"INCREMENT\")\n } else if (dir === -1) {\n send(\"DECREMENT\")\n }\n }\n return addDomEvent(input, \"wheel\", onWheel, { passive: false })\n },\n activatePointerLock(ctx) {\n if (isSafari() || !supportsPointerEvent()) return\n return requestPointerLock(dom.getDoc(ctx))\n },\n trackMousemove(ctx, _evt, { send }) {\n const doc = dom.getDoc(ctx)\n\n function onMousemove(event: MouseEvent) {\n if (!ctx.scrubberCursorPoint) return\n const value = dom.getMousementValue(ctx, event)\n if (!value.hint) return\n send({\n type: \"POINTER_MOVE_SCRUBBER\",\n hint: value.hint,\n point: value.point,\n })\n }\n\n function onMouseup() {\n send(\"POINTER_UP_SCRUBBER\")\n }\n\n // prettier-ignore\n return pipe(\n addDomEvent(doc, \"mousemove\", onMousemove, false),\n addDomEvent(doc, \"mouseup\", onMouseup, false)\n )\n },\n },\n\n actions: {\n setupDocument: (ctx, evt) => {\n if (evt.doc) ctx.doc = ref(evt.doc)\n if (evt.root) ctx.rootNode = ref(evt.root)\n ctx.uid = evt.id\n },\n focusInput(ctx) {\n if (!ctx.focusInputOnChange) return\n const input = dom.getInputEl(ctx)\n raf(() => input?.focus())\n },\n increment(ctx, evt) {\n ctx.value = utils.increment(ctx, evt.step)\n },\n decrement(ctx, evt) {\n ctx.value = utils.decrement(ctx, evt.step)\n },\n clampValue(ctx) {\n ctx.value = utils.clamp(ctx)\n },\n roundValue(ctx) {\n if (ctx.value !== \"\") {\n ctx.value = utils.round(ctx)\n }\n },\n setValue(ctx, evt) {\n const value = evt.target?.value ?? evt.value\n ctx.value = utils.sanitize(ctx, utils.parse(ctx, value))\n },\n clearValue(ctx) {\n ctx.value = \"\"\n },\n setToMax(ctx) {\n ctx.value = ctx.max.toString()\n },\n setToMin(ctx) {\n ctx.value = ctx.min.toString()\n },\n setHint(ctx, evt) {\n ctx.hint = evt.hint\n },\n clearHint(ctx) {\n ctx.hint = null\n },\n setHintToSet(ctx) {\n ctx.hint = \"set\"\n },\n invokeOnChange(ctx) {\n ctx.onChange?.({\n value: ctx.value,\n valueAsNumber: ctx.valueAsNumber,\n })\n },\n invokeOnInvalid(ctx) {\n if (!ctx.isOutOfRange) return\n const reason = ctx.valueAsNumber > ctx.max ? \"rangeOverflow\" : \"rangeUnderflow\"\n ctx.onInvalid?.({\n reason,\n value: ctx.formattedValue,\n valueAsNumber: ctx.valueAsNumber,\n })\n },\n // sync input value, in event it was set from form libraries via `ref`, `bind:this`, etc.\n syncInputValue(ctx) {\n const input = dom.getInputEl(ctx)\n if (!input || input.value == ctx.value) return\n const value = utils.parse(ctx, input.value)\n ctx.value = utils.sanitize(ctx, value)\n },\n setCursorPoint(ctx, evt) {\n ctx.scrubberCursorPoint = evt.point\n },\n clearCursorPoint(ctx) {\n ctx.scrubberCursorPoint = null\n },\n updateCursor(ctx) {\n const cursor = dom.getCursorEl(ctx)\n if (!cursor || !ctx.scrubberCursorPoint) return\n const { x, y } = ctx.scrubberCursorPoint\n cursor.style.transform = `translate3d(${x}px, ${y}px, 0px)`\n },\n addCustomCursor(ctx) {\n if (isSafari() || !supportsPointerEvent()) return\n dom.createVirtualCursor(ctx)\n },\n removeCustomCursor(ctx) {\n if (isSafari() || !supportsPointerEvent()) return\n dom.getCursorEl(ctx)?.remove()\n },\n disableTextSelection(ctx) {\n const doc = dom.getDoc(ctx)\n doc.body.style.pointerEvents = \"none\"\n doc.documentElement.style.userSelect = \"none\"\n doc.documentElement.style.cursor = \"ew-resize\"\n },\n restoreTextSelection(ctx) {\n const doc = dom.getDoc(ctx)\n doc.body.style.pointerEvents = \"\"\n doc.documentElement.style.userSelect = \"\"\n doc.documentElement.style.cursor = \"\"\n },\n },\n\n hookSync: true,\n },\n )\n}\n"],
5
- "mappings": "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",
6
- "names": []
7
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"number-input.connect.d.ts","sourceRoot":"","sources":["../src/number-input.connect.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiB,SAAS,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAGxE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAGlD,wBAAgB,OAAO,CAAC,CAAC,SAAS,SAAS,GAAG,cAAc,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,yCAAgB;;;;;oBAe7F,MAAM,GAAG,MAAM;;;;;;;;;;;;;;EAoLlC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"number-input.dom.d.ts","sourceRoot":"","sources":["../src/number-input.dom.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,IAAI,GAAG,EAAE,MAAM,sBAAsB,CAAA;AAK5D,eAAO,MAAM,GAAG;kBACA,GAAG;kBACH,GAAG;uBACE,GAAG;qBAEL,GAAG;sBACF,GAAG;0BACC,GAAG;0BACH,GAAG;yBACJ,GAAG;uBACL,GAAG;sBACJ,GAAG;sBAEH,GAAG;0BACC,GAAG;0BACH,GAAG;yBACJ,GAAG;uBACL,GAAG;2BAEC,GAAG,SAAS,UAAU;;;;;;;6BAsBpB,GAAG;CA8B7B,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"number-input.machine.d.ts","sourceRoot":"","sources":["../src/number-input.machine.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAK5F,wBAAgB,OAAO,CAAC,GAAG,GAAE,kBAAuB,oHA8XnD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"number-input.types.d.ts","sourceRoot":"","sources":["../src/number-input.types.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"number-input.utils.d.ts","sourceRoot":"","sources":["../src/number-input.utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAC1C,OAAO,KAAK,EAAE,cAAc,IAAI,GAAG,EAAE,MAAM,sBAAsB,CAAA;AAEjE,eAAO,MAAM,KAAK;+BACW,GAAG,SAAS,aAAa;yBAO/B,MAAM;oBACX,GAAG,SAAS,MAAM;qBAMjB,GAAG,SAAS,MAAM;qBAIlB,GAAG,SAAS,MAAM;iBAItB,GAAG;iBAGH,GAAG,SAAS,MAAM;kBAGjB,GAAG,SAAS,MAAM,GAAG,MAAM;iBAI5B,GAAG;CAGjB,CAAA"}