@patchbayhq/ui 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
package/dist/api.js ADDED
@@ -0,0 +1,418 @@
1
+ import { z } from "zod";
2
+ const numeric = z.preprocess((value) => {
3
+ if (typeof value === "string") {
4
+ const trimmed = value.trim();
5
+ return trimmed === "" ? undefined : Number(trimmed);
6
+ }
7
+ return value;
8
+ }, z.number().finite());
9
+ const integer = numeric.pipe(z.number().int());
10
+ const booleanish = z.preprocess((value) => {
11
+ if (typeof value === "string") {
12
+ const normalized = value.trim().toLowerCase();
13
+ if (normalized === "" ||
14
+ normalized === "true" ||
15
+ normalized === "1" ||
16
+ normalized === "on") {
17
+ return true;
18
+ }
19
+ if (normalized === "false" || normalized === "0" || normalized === "off") {
20
+ return false;
21
+ }
22
+ }
23
+ return value;
24
+ }, z.boolean());
25
+ const label = z.string().min(1);
26
+ const colorHex = z
27
+ .string()
28
+ .regex(/^#[\da-f]{6}$/i, "Expected a 6-digit hex color");
29
+ const normalizedLevel = numeric.pipe(z.number().min(0).max(1));
30
+ export const orientationSchema = z.enum(["vertical", "horizontal"]);
31
+ export const buttonModeSchema = z.enum(["momentary", "toggle"]);
32
+ export const arrowDirectionSchema = z.enum(["left", "up", "down", "right"]);
33
+ export const gridDirectionSchema = z.enum(["right", "left", "off"]);
34
+ export const stepKeySchema = z.enum([
35
+ "C4",
36
+ "C#4",
37
+ "D4",
38
+ "D#4",
39
+ "E4",
40
+ "F4",
41
+ "F#4",
42
+ "G4",
43
+ "G#4",
44
+ ]);
45
+ export const stepColorSchema = z.enum(["orange", "blue"]);
46
+ export const lineOrientationSchema = z.enum(["horizontal", "vertical"]);
47
+ export const numberFormatSchema = z.enum(["integer", "float"]);
48
+ export const dialModeSchema = z.enum(["unipolar", "bipolar"]);
49
+ export const dialDragAxisSchema = z.enum(["vertical", "horizontal"]);
50
+ export const controlAppearanceSchema = z.enum([
51
+ "default",
52
+ "primary",
53
+ "subtle",
54
+ "danger",
55
+ ]);
56
+ export const sliderPropsSchema = z
57
+ .object({
58
+ label: label.default("Slider"),
59
+ value: numeric.default(0),
60
+ min: numeric.default(0),
61
+ max: numeric.default(1),
62
+ step: z
63
+ .union([numeric.pipe(z.number().positive()), z.literal("any")])
64
+ .default(0.01),
65
+ orientation: orientationSchema.default("vertical"),
66
+ modulation: numeric.optional(),
67
+ disabled: booleanish.default(false),
68
+ })
69
+ .strict()
70
+ .transform((props) => ({
71
+ ...props,
72
+ modulation: props.modulation ?? props.value,
73
+ }));
74
+ export const dialPropsSchema = z
75
+ .object({
76
+ label: label.default("Dial"),
77
+ value: numeric.default(0),
78
+ min: numeric.default(0),
79
+ max: numeric.default(1),
80
+ step: z
81
+ .union([numeric.pipe(z.number().positive()), z.literal("any")])
82
+ .default(0.01),
83
+ mode: dialModeSchema.default("unipolar"),
84
+ dragAxis: dialDragAxisSchema.default("vertical"),
85
+ disabled: booleanish.default(false),
86
+ })
87
+ .strict();
88
+ export const togglePropsSchema = z
89
+ .object({
90
+ label: label.default("Toggle"),
91
+ checked: booleanish.default(false),
92
+ appearance: controlAppearanceSchema.default("default"),
93
+ disabled: booleanish.default(false),
94
+ })
95
+ .strict();
96
+ export const buttonPropsSchema = z
97
+ .object({
98
+ label: label.default("Button"),
99
+ pressed: booleanish.default(false),
100
+ mode: buttonModeSchema.default("momentary"),
101
+ appearance: controlAppearanceSchema.default("default"),
102
+ disabled: booleanish.default(false),
103
+ })
104
+ .strict();
105
+ export const textButtonPropsSchema = z
106
+ .object({
107
+ value: booleanish.default(false),
108
+ labels: z
109
+ .object({
110
+ off: label.default("Off"),
111
+ on: label.default("On"),
112
+ })
113
+ .strict()
114
+ .default({ off: "Off", on: "On" }),
115
+ icon: z.string().min(1).optional(),
116
+ picture: z.string().min(1).optional(),
117
+ pictureAlt: z.string().default(""),
118
+ appearance: controlAppearanceSchema.default("default"),
119
+ disabled: booleanish.default(false),
120
+ })
121
+ .strict();
122
+ export const labelPropsSchema = z
123
+ .object({
124
+ text: z.string().default(""),
125
+ align: z.enum(["left", "center", "right"]).default("left"),
126
+ })
127
+ .strict();
128
+ export const tabItemSchema = z
129
+ .object({
130
+ value: label,
131
+ label,
132
+ disabled: booleanish.default(false),
133
+ })
134
+ .strict();
135
+ export const tabsPropsSchema = z
136
+ .object({
137
+ value: label,
138
+ items: z.array(tabItemSchema).min(1),
139
+ disabled: booleanish.default(false),
140
+ })
141
+ .strict();
142
+ export const menuItemSchema = z
143
+ .object({
144
+ value: label,
145
+ label,
146
+ disabled: booleanish.default(false),
147
+ })
148
+ .strict();
149
+ export const menuPropsSchema = z
150
+ .object({
151
+ value: label,
152
+ items: z.array(menuItemSchema).min(1),
153
+ disabled: booleanish.default(false),
154
+ })
155
+ .strict();
156
+ export const arrowsPropsSchema = z
157
+ .object({
158
+ value: arrowDirectionSchema.default("right"),
159
+ disabled: booleanish.default(false),
160
+ })
161
+ .strict();
162
+ export const dropPropsSchema = z
163
+ .object({
164
+ label: label.default("Drop Something Here!"),
165
+ accept: z
166
+ .union([z.string().min(1), z.array(z.string().min(1)).min(1)])
167
+ .optional(),
168
+ multiple: booleanish.default(false),
169
+ disabled: booleanish.default(false),
170
+ })
171
+ .strict();
172
+ export const linePropsSchema = z
173
+ .object({
174
+ orientation: lineOrientationSchema.default("horizontal"),
175
+ length: numeric.pipe(z.number().positive()).default(170),
176
+ thickness: numeric.pipe(z.number().positive()).default(7),
177
+ })
178
+ .strict();
179
+ export const numberBoxPropsSchema = z
180
+ .object({
181
+ label: label.default("Number"),
182
+ value: numeric.default(0),
183
+ min: numeric.default(0),
184
+ max: numeric.default(127),
185
+ step: numeric.pipe(z.number().positive()).default(1),
186
+ format: numberFormatSchema.default("integer"),
187
+ disabled: booleanish.default(false),
188
+ })
189
+ .strict();
190
+ export const gridCellSchema = z
191
+ .object({
192
+ active: booleanish.default(false),
193
+ y: normalizedLevel.default(0.5),
194
+ color: stepColorSchema.default("blue"),
195
+ })
196
+ .strict();
197
+ const defaultGridColumnCount = 16;
198
+ const defaultGridCell = () => ({
199
+ active: false,
200
+ y: 0.5,
201
+ color: "blue",
202
+ });
203
+ export const gridPropsSchema = z
204
+ .object({
205
+ cells: z.array(gridCellSchema).min(1).optional(),
206
+ directions: z.array(gridDirectionSchema).min(1).optional(),
207
+ measureSize: integer.pipe(z.number().positive()).default(4),
208
+ })
209
+ .strict()
210
+ .transform((props) => {
211
+ const columnCount = Math.max(props.cells?.length ?? 0, props.directions?.length ?? 0, defaultGridColumnCount);
212
+ return {
213
+ cells: Array.from({ length: columnCount }, (_, index) => props.cells?.[index] ?? defaultGridCell()),
214
+ directions: Array.from({ length: columnCount }, (_, index) => props.directions?.[index] ?? "right"),
215
+ measureSize: props.measureSize,
216
+ };
217
+ });
218
+ export const stepNoteSchema = z
219
+ .object({
220
+ step: integer.pipe(z.number().min(1).max(16)),
221
+ lane: integer.pipe(z.number().min(1).max(8)),
222
+ velocity: normalizedLevel.default(1),
223
+ duration: numeric.pipe(z.number().positive()).default(1),
224
+ })
225
+ .strict();
226
+ export const stepLoopSchema = z
227
+ .object({
228
+ start: integer.pipe(z.number().min(1).max(16)).default(1),
229
+ end: integer.pipe(z.number().min(1).max(16)).default(16),
230
+ })
231
+ .strict()
232
+ .refine((loop) => loop.end >= loop.start, {
233
+ message: "Loop end must be greater than or equal to loop start",
234
+ path: ["end"],
235
+ });
236
+ export const stepSequencerPropsSchema = z
237
+ .object({
238
+ activeKey: stepKeySchema.default("C4"),
239
+ notes: z.array(stepNoteSchema).default(() => []),
240
+ loop: stepLoopSchema.default({ start: 1, end: 16 }),
241
+ bars: integer.pipe(z.number().min(1).max(4)).default(4),
242
+ })
243
+ .strict();
244
+ export const envelopeShapeSchema = z
245
+ .object({
246
+ attack: normalizedLevel.default(0.2),
247
+ decay: normalizedLevel.default(0.3),
248
+ sustain: normalizedLevel.default(0.7),
249
+ release: normalizedLevel.default(0.35),
250
+ })
251
+ .strict();
252
+ export const envelopePropsSchema = z
253
+ .object({
254
+ envelope: envelopeShapeSchema.default({
255
+ attack: 0.2,
256
+ decay: 0.3,
257
+ sustain: 0.7,
258
+ release: 0.35,
259
+ }),
260
+ disabled: booleanish.default(false),
261
+ })
262
+ .strict();
263
+ export const scopePropsSchema = z
264
+ .object({
265
+ samples: z.array(numeric).default(() => []),
266
+ mode: z.enum(["waveform", "lissajous"]).default("waveform"),
267
+ frozen: booleanish.default(false),
268
+ })
269
+ .strict();
270
+ export const meterPropsSchema = z
271
+ .object({
272
+ level: normalizedLevel.default(0),
273
+ peak: normalizedLevel.optional(),
274
+ orientation: orientationSchema.default("vertical"),
275
+ })
276
+ .strict()
277
+ .transform((props) => ({ ...props, peak: props.peak ?? props.level }));
278
+ export const gainPropsSchema = z
279
+ .object({
280
+ valueDb: numeric.default(-12),
281
+ minDb: numeric.default(-70),
282
+ maxDb: numeric.default(6),
283
+ stepDb: numeric.pipe(z.number().positive()).default(0.1),
284
+ level: normalizedLevel.default(0),
285
+ thumbSide: z.enum(["left", "right"]).default("right"),
286
+ disabled: booleanish.default(false),
287
+ })
288
+ .strict();
289
+ export const colorSwatchesPropsSchema = z
290
+ .object({
291
+ swatches: z
292
+ .array(colorHex)
293
+ .min(1)
294
+ .default(["#6dd7ff", "#a5a5a5", "#282828", "#f0c14f"]),
295
+ value: colorHex.optional(),
296
+ })
297
+ .strict()
298
+ .transform((props) => ({
299
+ ...props,
300
+ value: props.value ?? props.swatches[0],
301
+ }));
302
+ export const componentSchemas = {
303
+ "slider": sliderPropsSchema,
304
+ "dial": dialPropsSchema,
305
+ "toggle": togglePropsSchema,
306
+ "button": buttonPropsSchema,
307
+ "text-button": textButtonPropsSchema,
308
+ "label": labelPropsSchema,
309
+ "tabs": tabsPropsSchema,
310
+ "menu": menuPropsSchema,
311
+ "arrows": arrowsPropsSchema,
312
+ "drop": dropPropsSchema,
313
+ "line": linePropsSchema,
314
+ "number-box": numberBoxPropsSchema,
315
+ "grid": gridPropsSchema,
316
+ "step-sequencer": stepSequencerPropsSchema,
317
+ "envelope": envelopePropsSchema,
318
+ "scope": scopePropsSchema,
319
+ "meter": meterPropsSchema,
320
+ "gain": gainPropsSchema,
321
+ "color-swatches": colorSwatchesPropsSchema,
322
+ };
323
+ export const valueChangeSourceSchema = z.enum(["user", "program"]);
324
+ export const sliderChangeDetailSchema = z
325
+ .object({
326
+ value: numeric,
327
+ ratio: normalizedLevel,
328
+ source: valueChangeSourceSchema.default("user"),
329
+ })
330
+ .strict();
331
+ export const gridChangeDetailSchema = z.discriminatedUnion("type", [
332
+ z
333
+ .object({
334
+ active: booleanish,
335
+ cells: z.array(gridCellSchema).min(1),
336
+ directions: z.array(gridDirectionSchema).min(1),
337
+ index: integer.pipe(z.number().min(1)),
338
+ type: z.literal("cell"),
339
+ y: normalizedLevel,
340
+ })
341
+ .strict(),
342
+ z
343
+ .object({
344
+ cells: z.array(gridCellSchema).min(1),
345
+ direction: gridDirectionSchema,
346
+ directions: z.array(gridDirectionSchema).min(1),
347
+ index: integer.pipe(z.number().min(1)),
348
+ type: z.literal("direction"),
349
+ })
350
+ .strict(),
351
+ ]);
352
+ export const stepChangeDetailSchema = z.discriminatedUnion("type", [
353
+ z
354
+ .object({
355
+ activeKey: stepKeySchema,
356
+ bars: integer.pipe(z.number().min(1).max(4)),
357
+ key: stepKeySchema,
358
+ loop: stepLoopSchema,
359
+ notes: z.array(stepNoteSchema),
360
+ phase: z.enum(["press", "release"]),
361
+ pressed: booleanish,
362
+ type: z.literal("key"),
363
+ })
364
+ .strict(),
365
+ z
366
+ .object({
367
+ active: booleanish,
368
+ activeKey: stepKeySchema,
369
+ bars: integer.pipe(z.number().min(1).max(4)),
370
+ lane: integer.pipe(z.number().min(1).max(8)),
371
+ loop: stepLoopSchema,
372
+ notes: z.array(stepNoteSchema),
373
+ step: integer.pipe(z.number().min(1).max(16)),
374
+ type: z.literal("cell"),
375
+ })
376
+ .strict(),
377
+ z
378
+ .object({
379
+ activeKey: stepKeySchema,
380
+ bars: integer.pipe(z.number().min(1).max(4)),
381
+ loop: stepLoopSchema,
382
+ notes: z.array(stepNoteSchema),
383
+ type: z.literal("loop"),
384
+ })
385
+ .strict(),
386
+ ]);
387
+ export const componentErrorCodeSchema = z.enum([
388
+ "invalid-props",
389
+ "missing-control",
390
+ "render-error",
391
+ ]);
392
+ export const componentErrorDetailSchema = z
393
+ .object({
394
+ component: z.string().min(1),
395
+ code: componentErrorCodeSchema,
396
+ message: z.string().min(1),
397
+ issues: z.array(z.string().min(1)).default(() => []),
398
+ })
399
+ .strict();
400
+ export function parseSliderProps(input) {
401
+ return sliderPropsSchema.parse(input);
402
+ }
403
+ export function parseComponentProps(name, input) {
404
+ return componentSchemas[name].parse(input);
405
+ }
406
+ export function safeParseComponentProps(name, input) {
407
+ return componentSchemas[name].safeParse(input);
408
+ }
409
+ export function createComponentErrorDetail(input) {
410
+ return componentErrorDetailSchema.parse(input);
411
+ }
412
+ export function formatZodIssues(error) {
413
+ return error.issues.map((issue) => {
414
+ const path = issue.path.join(".");
415
+ return path ? `${path}: ${issue.message}` : issue.message;
416
+ });
417
+ }
418
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function initEnvelopeEditors(root?: ParentNode): void;
2
+ //# sourceMappingURL=adsr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adsr.d.ts","sourceRoot":"","sources":["../../src/components/adsr.ts"],"names":[],"mappings":"AAmBA,wBAAgB,mBAAmB,CAAC,IAAI,GAAE,UAAqB,GAAG,IAAI,CAOrE"}
@@ -0,0 +1,213 @@
1
+ const envelopeControllerKey = "__envelopeController";
2
+ export function initEnvelopeEditors(root = document) {
3
+ root.querySelectorAll("[data-envelope]").forEach((svg) => {
4
+ if (!svg[envelopeControllerKey]) {
5
+ svg[envelopeControllerKey] = new EnvelopeController(svg);
6
+ }
7
+ svg[envelopeControllerKey]?.sync();
8
+ });
9
+ }
10
+ class EnvelopeController {
11
+ svg;
12
+ activeHandle = null;
13
+ activeHandleElement = null;
14
+ activePointerId = null;
15
+ dragAbortController;
16
+ curve;
17
+ points;
18
+ constructor(svg) {
19
+ this.svg = svg;
20
+ this.curve = svg.querySelector("[data-envelope-curve]");
21
+ this.points = this.readInitialPoints();
22
+ this.svg
23
+ .querySelectorAll("[data-envelope-handle]")
24
+ .forEach((handle) => {
25
+ handle.addEventListener("pointerdown", (event) => this.handlePointerDown(event, handle));
26
+ });
27
+ this.sync();
28
+ }
29
+ sync() {
30
+ if (!this.curve) {
31
+ return;
32
+ }
33
+ this.curve.setAttribute("d", [
34
+ `M${this.points.start.x} ${this.points.start.y}`,
35
+ `L${this.points.attack.x} ${this.points.attack.y}`,
36
+ `L${this.points.decay.x} ${this.points.decay.y}`,
37
+ `L${this.points.sustain.x} ${this.points.sustain.y}`,
38
+ `L170 ${this.points.sustain.y}`,
39
+ `C171 ${this.points.release.y} ${this.points.release.x - 8} ${this.points.release.y} ${this.points.end.x} ${this.points.end.y}`,
40
+ ].join(" "));
41
+ Object.entries(this.points).forEach(([name, point]) => {
42
+ const handle = this.svg.querySelector(`[data-envelope-handle="${name}"]`);
43
+ if (!handle) {
44
+ return;
45
+ }
46
+ if (handle instanceof SVGCircleElement) {
47
+ handle.setAttribute("cx", String(point.x));
48
+ handle.setAttribute("cy", String(point.y));
49
+ }
50
+ else {
51
+ handle.setAttribute("x", String(point.x - 4));
52
+ handle.setAttribute("y", String(point.y - 4));
53
+ }
54
+ });
55
+ }
56
+ readInitialPoints() {
57
+ return {
58
+ start: this.readHandlePoint("start", { x: 8, y: 88 }),
59
+ attack: this.readHandlePoint("attack", { x: 8, y: 12 }),
60
+ decay: this.readHandlePoint("decay", { x: 24, y: 12 }),
61
+ sustain: this.readHandlePoint("sustain", { x: 58, y: 12 }),
62
+ release: this.readHandlePoint("release", { x: 178, y: 80 }),
63
+ end: this.readHandlePoint("end", { x: 194, y: 88 }),
64
+ };
65
+ }
66
+ readHandlePoint(name, fallback) {
67
+ const handle = this.svg.querySelector(`[data-envelope-handle="${name}"]`);
68
+ if (!handle) {
69
+ return fallback;
70
+ }
71
+ if (handle instanceof SVGCircleElement) {
72
+ return {
73
+ x: numberAttribute(handle, "cx", fallback.x),
74
+ y: numberAttribute(handle, "cy", fallback.y),
75
+ };
76
+ }
77
+ return {
78
+ x: numberAttribute(handle, "x", fallback.x - 4) +
79
+ numberAttribute(handle, "width", 8) / 2,
80
+ y: numberAttribute(handle, "y", fallback.y - 4) +
81
+ numberAttribute(handle, "height", 8) / 2,
82
+ };
83
+ }
84
+ handlePointerDown(event, handle) {
85
+ if (event.button !== 0) {
86
+ return;
87
+ }
88
+ const name = handle.dataset.envelopeHandle;
89
+ if (!name) {
90
+ return;
91
+ }
92
+ event.preventDefault();
93
+ this.finishDrag();
94
+ this.activeHandle = name;
95
+ this.activeHandleElement = handle;
96
+ this.activePointerId = event.pointerId;
97
+ safelySetPointerCapture(handle, event.pointerId);
98
+ this.moveActiveHandle(event);
99
+ const dragAbortController = new AbortController();
100
+ this.dragAbortController = dragAbortController;
101
+ const { signal } = dragAbortController;
102
+ window.addEventListener("pointermove", this.handleWindowPointerMove, {
103
+ signal,
104
+ });
105
+ window.addEventListener("pointerup", this.handleWindowPointerUp, {
106
+ signal,
107
+ });
108
+ window.addEventListener("pointercancel", this.handleWindowPointerUp, {
109
+ signal,
110
+ });
111
+ window.addEventListener("blur", this.handleWindowBlur, { signal });
112
+ }
113
+ handleWindowPointerMove = (event) => {
114
+ if (event.pointerId !== this.activePointerId) {
115
+ return;
116
+ }
117
+ event.preventDefault();
118
+ this.moveActiveHandle(event);
119
+ };
120
+ handleWindowPointerUp = (event) => {
121
+ if (event.pointerId !== this.activePointerId) {
122
+ return;
123
+ }
124
+ event.preventDefault();
125
+ this.moveActiveHandle(event);
126
+ this.finishDrag();
127
+ };
128
+ handleWindowBlur = () => {
129
+ this.finishDrag();
130
+ };
131
+ moveActiveHandle(event) {
132
+ if (!this.activeHandle) {
133
+ return;
134
+ }
135
+ this.points[this.activeHandle] = this.constrainPoint(this.activeHandle, this.pointFromEvent(event));
136
+ this.sync();
137
+ }
138
+ pointFromEvent(event) {
139
+ const rect = this.svg.getBoundingClientRect();
140
+ return {
141
+ x: clamp(((event.clientX - rect.left) / rect.width) * 210, 8, 202),
142
+ y: clamp(((event.clientY - rect.top) / rect.height) * 96, 8, 88),
143
+ };
144
+ }
145
+ constrainPoint(name, point) {
146
+ const baselineY = 88;
147
+ const releaseSegmentX = 170;
148
+ if (name === "start") {
149
+ return { x: this.points.start.x, y: baselineY };
150
+ }
151
+ if (name === "attack") {
152
+ return {
153
+ x: clamp(point.x, this.points.start.x, this.points.decay.x),
154
+ y: point.y,
155
+ };
156
+ }
157
+ if (name === "decay") {
158
+ return {
159
+ x: clamp(point.x, this.points.attack.x, this.points.sustain.x),
160
+ y: point.y,
161
+ };
162
+ }
163
+ if (name === "sustain") {
164
+ return {
165
+ x: clamp(point.x, this.points.decay.x, releaseSegmentX),
166
+ y: point.y,
167
+ };
168
+ }
169
+ if (name === "release") {
170
+ return {
171
+ x: clamp(point.x, releaseSegmentX, this.points.end.x),
172
+ y: clamp(point.y, this.points.sustain.y, baselineY),
173
+ };
174
+ }
175
+ return { x: this.points.end.x, y: baselineY };
176
+ }
177
+ finishDrag() {
178
+ if (this.activeHandleElement && this.activePointerId !== null) {
179
+ safelyReleasePointerCapture(this.activeHandleElement, this.activePointerId);
180
+ }
181
+ this.dragAbortController?.abort();
182
+ this.dragAbortController = undefined;
183
+ this.activeHandle = null;
184
+ this.activeHandleElement = null;
185
+ this.activePointerId = null;
186
+ }
187
+ }
188
+ function clamp(value, min, max) {
189
+ return Math.min(max, Math.max(min, value));
190
+ }
191
+ function numberAttribute(element, attribute, fallback) {
192
+ const value = Number(element.getAttribute(attribute));
193
+ return Number.isFinite(value) ? value : fallback;
194
+ }
195
+ function safelySetPointerCapture(element, pointerId) {
196
+ try {
197
+ element.setPointerCapture?.(pointerId);
198
+ }
199
+ catch {
200
+ // Browser test runners can synthesize pointer events without active capture.
201
+ }
202
+ }
203
+ function safelyReleasePointerCapture(element, pointerId) {
204
+ try {
205
+ if (element.hasPointerCapture?.(pointerId)) {
206
+ element.releasePointerCapture?.(pointerId);
207
+ }
208
+ }
209
+ catch {
210
+ // Matching the guarded setPointerCapture path above.
211
+ }
212
+ }
213
+ //# sourceMappingURL=adsr.js.map