@44-audio/components 0.1.0-dev.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,780 @@
1
+ import { h as Dr, C as Tr, D as qr, E as zr, F as Rr, G as $r, H as Lr, I as Ar, J as Fr, T as Or, K as _r, L as jr, M as Ur, N as J, O as Nr, P as Pr, d as cr, c as Z, p as rr, a as er, b as P, l as j, Q as ir, y as wr, f as $, g as T, e as L, i as G, z as kr, q as N, j as k, k as tr, s as I, n as t, m as B, r as S, B as ar, R as lr, u as fr, S as X, U as sr, v as Y, V as ur, W as Br, o as Q, w as vr, x as pr, X as xr, A as Hr, Y as Gr } from "./AudioPlayer-bUgQMAfs.mjs";
2
+ function Kr(e, r, i, s, o) {
3
+ Dr && Tr();
4
+ var n = r.$$slots?.[i], u = !1;
5
+ n === !0 && (n = r.children, u = !0), n === void 0 || n(e, u ? () => s : s);
6
+ }
7
+ const Vr = () => performance.now(), H = {
8
+ // don't access requestAnimationFrame eagerly outside method
9
+ // this allows basic testing of user code without JSDOM
10
+ // bunder will eval and remove ternary when the user's app is built
11
+ tick: (
12
+ /** @param {any} _ */
13
+ (e) => requestAnimationFrame(e)
14
+ ),
15
+ now: () => Vr(),
16
+ tasks: /* @__PURE__ */ new Set()
17
+ };
18
+ function Ir() {
19
+ const e = H.now();
20
+ H.tasks.forEach((r) => {
21
+ r.c(e) || (H.tasks.delete(r), r.f());
22
+ }), H.tasks.size !== 0 && H.tick(Ir);
23
+ }
24
+ function Wr(e) {
25
+ let r;
26
+ return H.tasks.size === 0 && H.tick(Ir), {
27
+ promise: new Promise((i) => {
28
+ H.tasks.add(r = { c: e, f: i });
29
+ }),
30
+ abort() {
31
+ H.tasks.delete(r);
32
+ }
33
+ };
34
+ }
35
+ function or(e, r) {
36
+ _r(() => {
37
+ e.dispatchEvent(new CustomEvent(r));
38
+ });
39
+ }
40
+ function Jr(e) {
41
+ if (e === "float") return "cssFloat";
42
+ if (e === "offset") return "cssOffset";
43
+ if (e.startsWith("--")) return e;
44
+ const r = e.split("-");
45
+ return r.length === 1 ? r[0] : r[0] + r.slice(1).map(
46
+ /** @param {any} word */
47
+ (i) => i[0].toUpperCase() + i.slice(1)
48
+ ).join("");
49
+ }
50
+ function br(e) {
51
+ const r = {}, i = e.split(";");
52
+ for (const s of i) {
53
+ const [o, n] = s.split(":");
54
+ if (!o || n === void 0) break;
55
+ const u = Jr(o.trim());
56
+ r[u] = n.trim();
57
+ }
58
+ return r;
59
+ }
60
+ const Qr = (e) => e;
61
+ function gr(e, r, i, s) {
62
+ var o = (e & Nr) !== 0, n = (e & Pr) !== 0, u = o && n, f = (e & Or) !== 0, q = u ? "both" : o ? "in" : "out", x, _ = r.inert, M = r.style.overflow, w, C;
63
+ function E() {
64
+ return _r(() => x ??= i()(r, s?.() ?? /** @type {P} */
65
+ {}, {
66
+ direction: q
67
+ }));
68
+ }
69
+ var a = {
70
+ is_global: f,
71
+ in() {
72
+ if (r.inert = _, !o) {
73
+ C?.abort(), C?.reset?.();
74
+ return;
75
+ }
76
+ n || w?.abort(), or(r, "introstart"), w = yr(r, E(), C, 1, () => {
77
+ or(r, "introend"), w?.abort(), w = x = void 0, r.style.overflow = M;
78
+ });
79
+ },
80
+ out(g) {
81
+ if (!n) {
82
+ g?.(), x = void 0;
83
+ return;
84
+ }
85
+ r.inert = !0, or(r, "outrostart"), C = yr(r, E(), w, 0, () => {
86
+ or(r, "outroend"), g?.();
87
+ });
88
+ },
89
+ stop: () => {
90
+ w?.abort(), C?.abort();
91
+ }
92
+ }, c = (
93
+ /** @type {Effect} */
94
+ qr
95
+ );
96
+ if ((c.transitions ??= []).push(a), o && zr) {
97
+ var m = f;
98
+ if (!m) {
99
+ for (var d = (
100
+ /** @type {Effect | null} */
101
+ c.parent
102
+ ); d && (d.f & Rr) !== 0; )
103
+ for (; (d = d.parent) && (d.f & $r) === 0; )
104
+ ;
105
+ m = !d || (d.f & Lr) !== 0;
106
+ }
107
+ m && Ar(() => {
108
+ Fr(() => a.in());
109
+ });
110
+ }
111
+ }
112
+ function yr(e, r, i, s, o) {
113
+ var n = s === 1;
114
+ if (jr(r)) {
115
+ var u, f = !1;
116
+ return Ur(() => {
117
+ if (!f) {
118
+ var c = r({ direction: n ? "in" : "out" });
119
+ u = yr(e, c, i, s, o);
120
+ }
121
+ }), {
122
+ abort: () => {
123
+ f = !0, u?.abort();
124
+ },
125
+ deactivate: () => u.deactivate(),
126
+ reset: () => u.reset(),
127
+ t: () => u.t()
128
+ };
129
+ }
130
+ if (i?.deactivate(), !r?.duration)
131
+ return o(), {
132
+ abort: J,
133
+ deactivate: J,
134
+ reset: J,
135
+ t: () => s
136
+ };
137
+ const { delay: q = 0, css: x, tick: _, easing: M = Qr } = r;
138
+ var w = [];
139
+ if (n && i === void 0 && (_ && _(0, 1), x)) {
140
+ var C = br(x(0, 1));
141
+ w.push(C, C);
142
+ }
143
+ var E = () => 1 - s, a = e.animate(w, { duration: q, fill: "forwards" });
144
+ return a.onfinish = () => {
145
+ a.cancel();
146
+ var c = i?.t() ?? 1 - s;
147
+ i?.abort();
148
+ var m = s - c, d = (
149
+ /** @type {number} */
150
+ r.duration * Math.abs(m)
151
+ ), g = [];
152
+ if (d > 0) {
153
+ var l = !1;
154
+ if (x)
155
+ for (var p = Math.ceil(d / 16.666666666666668), v = 0; v <= p; v += 1) {
156
+ var y = c + m * M(v / p), b = br(x(y, 1 - y));
157
+ g.push(b), l ||= b.overflow === "hidden";
158
+ }
159
+ l && (e.style.overflow = "hidden"), E = () => {
160
+ var h = (
161
+ /** @type {number} */
162
+ /** @type {globalThis.Animation} */
163
+ a.currentTime
164
+ );
165
+ return c + m * M(h / d);
166
+ }, _ && Wr(() => {
167
+ if (a.playState !== "running") return !1;
168
+ var h = E();
169
+ return _(h, 1 - h), !0;
170
+ });
171
+ }
172
+ a = e.animate(g, { duration: d, fill: "forwards" }), a.onfinish = () => {
173
+ E = () => s, _?.(s, 1 - s), o();
174
+ };
175
+ }, {
176
+ abort: () => {
177
+ a && (a.cancel(), a.effect = null, a.onfinish = J);
178
+ },
179
+ deactivate: () => {
180
+ o = J;
181
+ },
182
+ reset: () => {
183
+ s === 0 && _?.(1, 0);
184
+ },
185
+ t: () => E()
186
+ };
187
+ }
188
+ const Xr = (e) => e;
189
+ function Yr(e) {
190
+ const r = e - 1;
191
+ return r * r * r + 1;
192
+ }
193
+ function mr(e) {
194
+ const r = typeof e == "string" && e.match(/^\s*(-?[\d.]+)([^\s]*)\s*$/);
195
+ return r ? [parseFloat(r[1]), r[2] || "px"] : [
196
+ /** @type {number} */
197
+ e,
198
+ "px"
199
+ ];
200
+ }
201
+ function Zr(e, { delay: r = 0, duration: i = 400, easing: s = Xr } = {}) {
202
+ const o = +getComputedStyle(e).opacity;
203
+ return {
204
+ delay: r,
205
+ duration: i,
206
+ easing: s,
207
+ css: (n) => `opacity: ${n * o}`
208
+ };
209
+ }
210
+ function hr(e, { delay: r = 0, duration: i = 400, easing: s = Yr, x: o = 0, y: n = 0, opacity: u = 0 } = {}) {
211
+ const f = getComputedStyle(e), q = +f.opacity, x = f.transform === "none" ? "" : f.transform, _ = q * (1 - u), [M, w] = mr(o), [C, E] = mr(n);
212
+ return {
213
+ delay: r,
214
+ duration: i,
215
+ easing: s,
216
+ css: (a, c) => `
217
+ transform: ${x} translate(${(1 - a) * M}${w}, ${(1 - a) * C}${E});
218
+ opacity: ${q - _ * c}`
219
+ };
220
+ }
221
+ async function Mr(e = !1) {
222
+ e && (await navigator.mediaDevices.getUserMedia({ audio: !0 })).getTracks().forEach((o) => o.stop());
223
+ const r = await navigator.mediaDevices.enumerateDevices(), i = r.filter((s) => s.deviceId).filter((s) => s.kind === "audioinput").map((s) => ({
224
+ id: s.deviceId,
225
+ label: s.label || `Microphone ${r.indexOf(s) + 1}`
226
+ }));
227
+ return i.length === 0 ? Mr(!0) : i;
228
+ }
229
+ async function re(e, r, i, s) {
230
+ I(r, !t(r)), t(i).length || await s();
231
+ }
232
+ var ee = $("<li><button> </button></li>"), te = $('<li><button class="devices-select__option svelte-q87ygv" disabled>No microphones found</button></li>'), oe = $('<li><button class="devices-select__option svelte-q87ygv" disabled>Loading Microphones...</button></li>'), ae = $('<ul role="listbox" aria-label="Select microphone"><!> <!> <!></ul>'), ie = $('<div class="container" role="group" aria-label="Audio recorder"><button class="devices-btn svelte-q87ygv" aria-haspopup="listbox"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" class="devices-btn__icon svelte-q87ygv"><path d="M201.4 406.6c12.5 12.5 32.8 12.5 45.3 0l192-192c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 338.7 54.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l192 192z"></path></svg></button> <!></div>');
233
+ const se = {
234
+ hash: "svelte-q87ygv",
235
+ code: '.devices-btn.svelte-q87ygv {background:none;border:none;font-size:inherit;cursor:pointer;color:inherit;}.devices-btn__icon.svelte-q87ygv {width:0.75rem;height:0.75rem;fill:var(--fortyfour-recorder-btn-color);}.devices-select.svelte-q87ygv {display:none;flex-direction:column;list-style:none;margin:0;padding:0;border:var(--fortyfour-recorder-select-border);box-shadow:var(--fortyfour-recorder-select-shadow);border-radius:var(--fortyfour-recorder-select-radius);background:var(--fortyfour-recorder-select-bg);position:absolute;z-index:2147483647;overflow-y:auto;width:11rem;max-height:12rem;}.devices-select--is-open.svelte-q87ygv {display:flex;}.devices-select__option.svelte-q87ygv {padding:0.5rem 1rem;padding-left:0;background:none;border:none;text-align:left;cursor:pointer;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:background 0.1s;font:inherit;font-size:var(--fortyfour-recorder-select-font-size);color:var(--fortyfour-recorder-select-color);}.devices-select__option.svelte-q87ygv:hover {background:var(--fortyfour-recorder-select-bg-hover);}.devices-select__option.svelte-q87ygv::before {content:"";display:inline-block;width:2ch;text-align:center;padding:0 0.25rem;}.devices-select__option--is-selected.svelte-q87ygv::before {content:"✓";}.devices-select__option.svelte-q87ygv:disabled {opacity:0.5;cursor:inherit;}.devices-select__option.svelte-q87ygv:disabled:hover {background:inherit;}'
236
+ };
237
+ function Sr(e, r) {
238
+ rr(r, !0), er(e, se);
239
+ let i = P(r, "deviceId", 15, ""), s = P(r, "disabled", 7, !1), o = j(ir([])), n = j(!1), u = j(!1), f;
240
+ wr(() => {
241
+ function a(c) {
242
+ c.composedPath().includes(f) || t(n) && I(n, !1);
243
+ }
244
+ return document.addEventListener("pointerdown", a), () => {
245
+ document.removeEventListener("pointerdown", a);
246
+ };
247
+ });
248
+ async function q() {
249
+ try {
250
+ I(u, !0), (await navigator.mediaDevices.getUserMedia({ audio: !0 })).getTracks().forEach((c) => c.stop()), I(o, await navigator.mediaDevices.enumerateDevices(), !0), I(
251
+ o,
252
+ t(o).filter((c) => c.deviceId).filter((c) => c.kind === "audioinput").map((c, m) => ({
253
+ deviceId: c.deviceId,
254
+ label: c.label || `Microphone ${m + 1}`
255
+ })),
256
+ !0
257
+ ), !i() && t(o).length && i(t(o)[0].deviceId), t(o).sort((c, m) => c.label.localeCompare(m.label)), I(u, !1);
258
+ } catch (a) {
259
+ console.error("Error accessing microphones:", a);
260
+ }
261
+ }
262
+ function x(a) {
263
+ return () => {
264
+ i(a), I(n, !1);
265
+ };
266
+ }
267
+ var _ = {
268
+ get deviceId() {
269
+ return i();
270
+ },
271
+ set deviceId(a = "") {
272
+ i(a), B();
273
+ },
274
+ get disabled() {
275
+ return s();
276
+ },
277
+ set disabled(a = !1) {
278
+ s(a), B();
279
+ }
280
+ }, M = ie(), w = T(M);
281
+ w.__click = [re, n, o, q];
282
+ var C = L(w, 2);
283
+ {
284
+ var E = (a) => {
285
+ var c = ae(), m = T(c);
286
+ lr(m, 17, () => t(o), ur, (v, y) => {
287
+ var b = ee(), h = T(b), D = fr(() => x(t(y).deviceId));
288
+ h.__click = function(...K) {
289
+ t(D)?.apply(this, K);
290
+ };
291
+ var A = T(h, !0);
292
+ S(h), S(b), N(() => {
293
+ X(
294
+ h,
295
+ 1,
296
+ sr([
297
+ "devices-select__option",
298
+ t(y).deviceId === i() && "devices-select__option--is-selected"
299
+ ]),
300
+ "svelte-q87ygv"
301
+ ), h.disabled = s(), Y(A, t(y).label);
302
+ }), k(v, b);
303
+ });
304
+ var d = L(m, 2);
305
+ {
306
+ var g = (v) => {
307
+ var y = te();
308
+ k(v, y);
309
+ };
310
+ G(d, (v) => {
311
+ !t(o).length && !t(u) && v(g);
312
+ });
313
+ }
314
+ var l = L(d, 2);
315
+ {
316
+ var p = (v) => {
317
+ var y = oe();
318
+ k(v, y);
319
+ };
320
+ G(l, (v) => {
321
+ t(u) && v(p);
322
+ });
323
+ }
324
+ S(c), N(() => X(c, 1, `devices-select ${t(n) ? "devices-select--is-open" : ""}`, "svelte-q87ygv")), gr(3, c, () => Zr, () => ({ duration: 100 })), k(a, c);
325
+ };
326
+ G(C, (a) => {
327
+ t(n) && a(E);
328
+ });
329
+ }
330
+ return S(M), kr(M, (a) => f = a, () => f), N(() => ar(w, "aria-expanded", t(n))), k(e, M), tr(_);
331
+ }
332
+ cr(["click"]);
333
+ Z(Sr, { deviceId: {}, disabled: {} }, [], [], !0);
334
+ var ne = $("<button><!></button>");
335
+ const ce = {
336
+ hash: "svelte-f3ispq",
337
+ code: ".btn.svelte-f3ispq {display:flex;align-items:center;gap:var(--fortyfour-recorder-btn-gap);font:inherit;border:none;padding:var(--fortyfour-recorder-btn-padding);border-radius:var(--fortyfour-recorder-btn-radius);background:var(--fortyfour-recorder-btn-bg);color:var(--fortyfour-recorder-btn-color);cursor:pointer;}.btn.svelte-f3ispq:hover {background:var(--fortyfour-recorder-btn-bg-hover);color:var(--fortyfour-recorder-btn-color-hover);}.btn.btn--recording.svelte-f3ispq {background:var(--fortyfour-recorder-red-bg);color:var(--fortyfour-recorder-red-color);}.btn.btn--primary.svelte-f3ispq {background:var(--fortyfour-recorder-btn-primary-bg);color:var(--fortyfour-recorder-btn-primary-color);}.btn.btn--primary.svelte-f3ispq:hover {background:var(--fortyfour-recorder-btn-primary-bg-hover);color:var(--fortyfour-recorder-btn-primary-color-hover);}"
338
+ };
339
+ function nr(e, r) {
340
+ rr(r, !0), er(e, ce);
341
+ const i = P(r, "type", 7), s = P(r, "onclick", 7, () => {
342
+ });
343
+ var o = {
344
+ get type() {
345
+ return i();
346
+ },
347
+ set type(f) {
348
+ i(f), B();
349
+ },
350
+ get onclick() {
351
+ return s();
352
+ },
353
+ set onclick(f = () => {
354
+ }) {
355
+ s(f), B();
356
+ }
357
+ }, n = ne();
358
+ n.__click = function(...f) {
359
+ s()?.apply(this, f);
360
+ };
361
+ var u = T(n);
362
+ return Kr(u, r, "default", {}), S(n), N(() => X(n, 1, sr(["btn", i() && `btn--${i()}`]), "svelte-f3ispq")), k(e, n), tr(o);
363
+ }
364
+ cr(["click"]);
365
+ Z(nr, { type: {}, onclick: {} }, ["default"], [], !0);
366
+ var de = $("<div></div> <!>", 1), le = $('<div class="time-elapsed svelte-11ls49v"> </div>'), fe = $('<div role="group" aria-label="Audio recorder"><!> <!> <!></div>');
367
+ const ue = {
368
+ hash: "svelte-11ls49v",
369
+ code: `.container.svelte-11ls49v {display:flex;align-items:center;gap:1rem;}.record-icon.svelte-11ls49v {width:1.25rem;height:1.25rem;background:var(--fortyfour-recorder-red-bg);border-radius:50%;}.record-icon--is-recording.svelte-11ls49v {background:var(--fortyfour-recorder-red-color);
370
+ animation: svelte-11ls49v-pulse 2s infinite ease-out;}.time-elapsed.svelte-11ls49v {font-variant-numeric:tabular-nums;}
371
+
372
+ @keyframes svelte-11ls49v-pulse {
373
+ 0% {
374
+ transform: scale(1);
375
+ box-shadow: 0 0 0 0 hsla(0, 100%, 100%, 0.7);
376
+ }
377
+ 50% {
378
+ transform: scale(0.9);
379
+ }
380
+ 100% {
381
+ transform: scale(1);
382
+ box-shadow: 0 0 0 8px hsla(0, 100%, 100%, 0);
383
+ }
384
+ }`
385
+ };
386
+ function Er(e, r) {
387
+ rr(r, !0), er(e, ue);
388
+ let i = P(r, "deviceId", 15, ""), s = P(r, "onDone", 7), o = j(ir({
389
+ state: "ready",
390
+ // "ready", "recording"
391
+ timeElapsed: 0,
392
+ error: null
393
+ })), n;
394
+ Br(() => {
395
+ n?.stop();
396
+ });
397
+ function u() {
398
+ t(o).state === "ready" ? f() : t(o).state === "recording" && q();
399
+ }
400
+ async function f() {
401
+ const a = await navigator.mediaDevices.getUserMedia({
402
+ audio: { deviceId: i() ? { exact: i() } : void 0 }
403
+ }), c = [];
404
+ n = new MediaRecorder(a), n.ondataavailable = (d) => c.push(d.data), n.onstop = () => {
405
+ t(o).state === "recording" && (a.getTracks().forEach((d) => d.stop()), s()(URL.createObjectURL(new Blob(c, { type: n.mimeType }))), t(o).state = "ready");
406
+ }, n.start();
407
+ const m = () => {
408
+ t(o).state === "recording" && (t(o).timeElapsed += 1, setTimeout(m, 1e3));
409
+ };
410
+ setTimeout(m, 1e3), t(o).state = "recording";
411
+ }
412
+ function q() {
413
+ n?.stop();
414
+ }
415
+ var x = {
416
+ get deviceId() {
417
+ return i();
418
+ },
419
+ set deviceId(a = "") {
420
+ i(a), B();
421
+ },
422
+ get onDone() {
423
+ return s();
424
+ },
425
+ set onDone(a) {
426
+ s(a), B();
427
+ }
428
+ }, _ = fe(), M = T(_);
429
+ {
430
+ let a = fr(() => t(o).state === "recording" && "recording");
431
+ nr(M, {
432
+ onclick: u,
433
+ get type() {
434
+ return t(a);
435
+ },
436
+ children: (c, m) => {
437
+ var d = de(), g = Q(d), l = L(g, 2);
438
+ {
439
+ var p = (y) => {
440
+ var b = vr("Record");
441
+ k(y, b);
442
+ }, v = (y) => {
443
+ var b = pr(), h = Q(b);
444
+ {
445
+ var D = (A) => {
446
+ var K = vr("Recording");
447
+ k(A, K);
448
+ };
449
+ G(
450
+ h,
451
+ (A) => {
452
+ t(o).state === "recording" && A(D);
453
+ },
454
+ !0
455
+ );
456
+ }
457
+ k(y, b);
458
+ };
459
+ G(l, (y) => {
460
+ t(o).state === "ready" ? y(p) : y(v, !1);
461
+ });
462
+ }
463
+ N(() => X(
464
+ g,
465
+ 1,
466
+ sr([
467
+ "record-icon",
468
+ t(o).state === "recording" && "record-icon--is-recording"
469
+ ]),
470
+ "svelte-11ls49v"
471
+ )), k(c, d);
472
+ },
473
+ $$slots: { default: !0 }
474
+ });
475
+ }
476
+ var w = L(M, 2);
477
+ {
478
+ let a = fr(() => t(o).state === "recording");
479
+ Sr(w, {
480
+ get disabled() {
481
+ return t(a);
482
+ },
483
+ get deviceId() {
484
+ return i();
485
+ },
486
+ set deviceId(c) {
487
+ i(c);
488
+ }
489
+ });
490
+ }
491
+ var C = L(w, 2);
492
+ {
493
+ var E = (a) => {
494
+ var c = le(), m = T(c);
495
+ S(c), N((d, g) => Y(m, `${d ?? ""}:${g ?? ""}`), [
496
+ () => Math.floor(t(o).timeElapsed / 60).toString(),
497
+ () => (t(o).timeElapsed % 60).toString().padStart(2, "0")
498
+ ]), k(a, c);
499
+ };
500
+ G(C, (a) => {
501
+ t(o).state === "recording" && a(E);
502
+ });
503
+ }
504
+ return S(_), N(() => X(
505
+ _,
506
+ 1,
507
+ sr([
508
+ "container",
509
+ t(o).state === "recording" && "is-recording"
510
+ ]),
511
+ "svelte-11ls49v"
512
+ )), k(e, _), tr(x);
513
+ }
514
+ Z(Er, { deviceId: {}, onDone: {} }, [], [], !0);
515
+ function ve(e, r, i) {
516
+ I(r, e.target.value, !0), i()(e.target.value);
517
+ }
518
+ var pe = $("<option> </option>"), ge = xr('<rect width="10" fill="#4A90E2"></rect>'), ye = $(`<div><label for="mic-select" class="svelte-zkiuts">Input Device</label> <select id="mic-select" class="svelte-zkiuts"></select> <div><div>Mic Test</div> <div>Having mic issues? Start a test and say something fun and see if it picks up your voice.</div> <div><button> </button> <audio></audio> <svg style="vertical-align: middle; margin-left: 1em; border: 1px solid #ccc; background:
519
+ #f9f9f9;" fill="none" xmlns="http://www.w3.org/2000/svg"></svg></div></div></div>`);
520
+ const be = {
521
+ hash: "svelte-zkiuts",
522
+ code: "label.svelte-zkiuts {display:block;margin-bottom:0.5em;}select.svelte-zkiuts {display:block;font-size:inherit;}"
523
+ };
524
+ function me(e, r) {
525
+ rr(r, !0), er(e, be);
526
+ const i = P(r, "onSelectMic", 7);
527
+ let s = j(ir([])), o = j(null), n = null, u = j(!1), f = j(ir(Array(15).fill(1)));
528
+ wr(() => {
529
+ const d = async () => I(s, await Mr(), !0);
530
+ navigator.mediaDevices.ondevicechange = d, d();
531
+ });
532
+ async function q() {
533
+ if (n) {
534
+ if (t(u)) {
535
+ n.srcObject.getTracks().forEach((d) => d.stop()), I(u, !1);
536
+ return;
537
+ }
538
+ I(f, Array(15).fill(1), !0), I(u, !0);
539
+ try {
540
+ let A = function(F) {
541
+ if (!t(u)) {
542
+ v.close();
543
+ return;
544
+ }
545
+ const R = new Uint8Array(b.fftSize);
546
+ b.getByteTimeDomainData(R);
547
+ let z = 0;
548
+ for (let U = 0; U < R.length; U++) {
549
+ const V = (R[U] - 128) / 128;
550
+ z += V * V;
551
+ }
552
+ const O = Math.sqrt(z / R.length);
553
+ D.push(O), requestAnimationFrame(A);
554
+ };
555
+ const d = await navigator.mediaDevices.getUserMedia({
556
+ audio: {
557
+ deviceId: t(o) ? { exact: t(o) } : void 0
558
+ }
559
+ }), g = new MediaRecorder(d), l = [];
560
+ let p;
561
+ g.ondataavailable = (F) => F.data.size && l.push(F.data), g.onstop = () => {
562
+ const F = new Blob(l, { type: g.mimeType }), R = URL.createObjectURL(F);
563
+ n.src = R, n.play(), d.getTracks().forEach((z) => z.stop()), I(u, !1), clearInterval(p);
564
+ }, g.start(), setTimeout(() => g.stop(), 5e3);
565
+ const v = new (window.AudioContext || window.webkitAudioContext)(), y = v.createMediaStreamSource(d), b = v.createAnalyser();
566
+ y.connect(b), b.fftSize = 2048;
567
+ const h = (F, R) => {
568
+ if (F <= 0) return 0;
569
+ const z = 20 * Math.log10(F), O = -50, U = -10, W = (Math.min(U, Math.max(O, z)) - O) / (U - O);
570
+ return Math.round(W * R);
571
+ };
572
+ let D = [];
573
+ A(0);
574
+ let K = 0;
575
+ p = setInterval(
576
+ () => {
577
+ const F = D.reduce((z, O) => z + O, 0) / D.length, R = h(F, 100);
578
+ t(f)[K++] = R, D = [];
579
+ },
580
+ 300
581
+ );
582
+ } catch (d) {
583
+ console.error("Error during mic check:", d);
584
+ }
585
+ }
586
+ }
587
+ var x = {
588
+ get onSelectMic() {
589
+ return i();
590
+ },
591
+ set onSelectMic(d) {
592
+ i(d), B();
593
+ }
594
+ }, _ = ye(), M = L(T(_), 2);
595
+ M.__change = [ve, o, i], lr(M, 21, () => t(s), ur, (d, g) => {
596
+ var l = pe(), p = T(l, !0);
597
+ S(l);
598
+ var v = {};
599
+ N(() => {
600
+ Y(p, t(g).label), v !== (v = t(g).id) && (l.value = (l.__value = t(g).id) ?? "");
601
+ }), k(d, l);
602
+ }), S(M);
603
+ var w = L(M, 2), C = L(T(w), 4), E = T(C);
604
+ E.__click = q;
605
+ var a = T(E, !0);
606
+ S(E);
607
+ var c = L(E, 2);
608
+ kr(c, (d) => n = d, () => n);
609
+ var m = L(c, 2);
610
+ return lr(m, 21, () => t(f), ur, (d, g, l) => {
611
+ var p = ge();
612
+ ar(p, "x", l * 12), N(() => {
613
+ ar(p, "y", 100 - t(g)), ar(p, "height", t(g));
614
+ }), k(d, p);
615
+ }), S(m), S(C), S(w), S(_), N(() => Y(a, t(u) ? "Stop Testing" : "Let's Check")), k(e, _), tr(x);
616
+ }
617
+ cr(["change", "click"]);
618
+ Z(me, { onSelectMic: {} }, [], [], !0);
619
+ var he = $('<div><p>Recording saved! ID:</p> <code><pre> </pre></code></div> <p><button class="primary">Record Again</button></p>', 1), _e = $("<p>Processing your recording…</p>"), we = xr('<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640" style="fill: currentColor; width: 1em; height: 1em;"><path d="M232.7 69.9L224 96L128 96C110.3 96 96 110.3 96 128C96 145.7 110.3 160 128 160L512 160C529.7 160 544 145.7 544 128C544 110.3 529.7 96 512 96L416 96L407.3 69.9C402.9 56.8 390.7 48 376.9 48L263.1 48C249.3 48 237.1 56.8 232.7 69.9zM512 208L128 208L149.1 531.1C150.7 556.4 171.7 576 197 576L443 576C468.3 576 489.3 556.4 490.9 531.1L512 208z"></path></svg>'), ke = $('<div class="confirm svelte-1i5eb1b"><!> <!> <!></div>'), xe = $('<div class="row"><!></div>'), Ie = $('<div class="recorder svelte-1i5eb1b" role="group" aria-label="44 audio recorder"><!></div>');
620
+ const Me = {
621
+ hash: "svelte-1i5eb1b",
622
+ code: `:host {--fortyfour-recorder-bg-0: #2d2d2d;--fortyfour-recorder-bg-1: #393939;--fortyfour-recorder-bg-2: #515151;--fortyfour-recorder-bg-primary: hsla(210, 50%, 60%, 1);--fortyfour-recorder-bg-primary-light: hsla(210, 55%, 64%, 1);--fortyfour-recorder-color-0: #d3d0c8;--fortyfour-recorder-color-primary: hsla(0, 0%, 100%, 0.9);--fortyfour-recorder-red-bg: #f2777a;--fortyfour-recorder-red-color: #ffffff;--fortyfour-recorder-font-size-lg: 1.25rem;--fortyfour-recorder-font-size-md: 1rem;--fortyfour-recorder-font-size-sm: 0.875rem;--fortyfour-recorder-font-size-xs: 0.6825rem;--fortyfour-recorder-radius-xl: 3rem;--fortyfour-recorder-radius-lg: 1rem;--fortyfour-recorder-radius-md: 0.5rem;--fortyfour-recorder-spacing-md: 1rem;--fortyfour-recorder-spacing-sm-1: 0.85rem;--fortyfour-recorder-spacing-sm: 0.5rem;--fortyfour-recorder-radius: var(--fortyfour-recorder-radius-lg);--fortyfour-recorder-bg: var(--fortyfour-recorder-bg-0);--fortyfour-recorder-color: var(--fortyfour-recorder-color-0);--fortyfour-recorder-btn-radius: var(--fortyfour-recorder-radius-xl);--fortyfour-recorder-btn-padding: var(--fortyfour-recorder-spacing-sm)
623
+ var(--fortyfour-recorder-spacing-sm-1);--fortyfour-recorder-btn-gap: var(--fortyfour-recorder-spacing-sm);--fortyfour-recorder-btn-bg: var(--fortyfour-recorder-bg-1);--fortyfour-recorder-btn-bg-hover: var(--fortyfour-recorder-bg-2);--fortyfour-recorder-btn-color: var(--fortyfour-recorder-color-0);--fortyfour-recorder-btn-color-hover: var(--fortyfour-recorder-color-0);--fortyfour-recorder-btn-primary-bg: var(--fortyfour-recorder-bg-primary);--fortyfour-recorder-btn-primary-bg-hover: var(--fortyfour-recorder-bg-primary-light);--fortyfour-recorder-btn-primary-color: var(--fortyfour-recorder-color-primary);--fortyfour-recorder-btn-primary-color-hover: var(--fortyfour-recorder-color-primary);--fortyfour-recorder-select-bg: var(--fortyfour-recorder-bg-0);--fortyfour-recorder-select-bg-hover: var(--fortyfour-recorder-bg-1);--fortyfour-recorder-select-border: 1px solid var(--fortyfour-recorder-bg-1);--fortyfour-recorder-select-radius: var(--fortyfour-recorder-radius-md);--fortyfour-recorder-select-shadow: 0 4px 8px hsla(0, 0%, 0%, 0.1);--fortyfour-recorder-select-color: var(--fortyfour-recorder-color-0);--fortyfour-recorder-select-font-size: var(--fortyfour-recorder-font-size-xs);}.recorder.svelte-1i5eb1b {padding:var(--fortyfour-recorder-spacing-md);border-radius:var(--fortyfour-recorder-radius);background:var(--fortyfour-recorder-bg);color:var(--fortyfour-recorder-color);}.confirm.svelte-1i5eb1b {display:flex;align-items:stretch;gap:var(--fortyfour-recorder-spacing-sm);}`
624
+ };
625
+ function Se(e, r) {
626
+ rr(r, !0), er(e, Me);
627
+ const i = r.$$host;
628
+ let s = P(r, "projectId", 7), o = P(r, "labelsStr", 7, ""), n = P(r, "apiHost", 7, "api.44.audio");
629
+ const u = o() ? o().split(",").map((l) => l.trim()) : [];
630
+ let f = j(
631
+ "ready"
632
+ // "ready", "recording", "confirm", "processing", "done"
633
+ ), q = j(null), x = j(null), _ = j("");
634
+ async function M() {
635
+ if (t(f) !== "confirm" || !t(x))
636
+ return;
637
+ const l = new FormData();
638
+ l.append("projectId", s()), u.forEach((b) => l.append("labels", b));
639
+ const v = await (await fetch(t(x))).blob(), y = new File([v], "recording.audio", { type: v.type });
640
+ l.append("audioFile", y);
641
+ try {
642
+ const h = await (await fetch(`https://${n()}/recordings`, { method: "POST", body: l })).json();
643
+ I(q, h.recordingId, !0), I(f, "processing");
644
+ let D = !1;
645
+ for (; !D; )
646
+ await new Promise((A) => setTimeout(A, 2e3)), D = await C(t(q));
647
+ i.dispatchEvent(new CustomEvent("recording-complete", { detail: { recordingId: t(q) } })), I(f, "done");
648
+ } catch (b) {
649
+ console.error("Error saving recording:", b), I(f, "ready");
650
+ }
651
+ }
652
+ function w() {
653
+ I(x, null), I(f, "ready");
654
+ }
655
+ async function C(l) {
656
+ try {
657
+ const p = await fetch(`https://44hz.zuuu.us/recordings/${l}/status`);
658
+ if (!p.ok)
659
+ throw new Error("Failed to fetch data");
660
+ return (await p.json()).status === "ready";
661
+ } catch (p) {
662
+ return console.error(p), !1;
663
+ }
664
+ }
665
+ function E(l) {
666
+ I(x, l, !0), I(f, "confirm");
667
+ }
668
+ var a = {
669
+ get projectId() {
670
+ return s();
671
+ },
672
+ set projectId(l) {
673
+ s(l), B();
674
+ },
675
+ get labelsStr() {
676
+ return o();
677
+ },
678
+ set labelsStr(l = "") {
679
+ o(l), B();
680
+ },
681
+ get apiHost() {
682
+ return n();
683
+ },
684
+ set apiHost(l = "api.44.audio") {
685
+ n(l), B();
686
+ }
687
+ }, c = Ie(), m = T(c);
688
+ {
689
+ var d = (l) => {
690
+ var p = he(), v = Q(p), y = L(T(v), 2), b = T(y), h = T(b, !0);
691
+ S(b), S(y), S(v);
692
+ var D = L(v, 2), A = T(D);
693
+ A.__click = w, S(D), N(() => Y(h, t(q))), k(l, p);
694
+ }, g = (l) => {
695
+ var p = pr(), v = Q(p);
696
+ {
697
+ var y = (h) => {
698
+ var D = _e();
699
+ k(h, D);
700
+ }, b = (h) => {
701
+ var D = pr(), A = Q(D);
702
+ {
703
+ var K = (R) => {
704
+ var z = ke(), O = T(z);
705
+ Hr(O, {
706
+ get audioURL() {
707
+ return t(x);
708
+ }
709
+ });
710
+ var U = L(O, 2);
711
+ nr(U, {
712
+ onclick: w,
713
+ children: (W, Cr) => {
714
+ var dr = we();
715
+ k(W, dr);
716
+ },
717
+ $$slots: { default: !0 }
718
+ });
719
+ var V = L(U, 2);
720
+ nr(V, {
721
+ type: "primary",
722
+ onclick: M,
723
+ children: (W, Cr) => {
724
+ Gr();
725
+ var dr = vr("Save");
726
+ k(W, dr);
727
+ },
728
+ $$slots: { default: !0 }
729
+ }), S(z), gr(1, z, () => hr, () => ({ y: 20, duration: 700 })), k(R, z);
730
+ }, F = (R) => {
731
+ var z = xe(), O = T(z);
732
+ Er(O, {
733
+ onDone: E,
734
+ get deviceId() {
735
+ return t(_);
736
+ },
737
+ set deviceId(U) {
738
+ I(_, U, !0);
739
+ }
740
+ }), S(z), gr(1, z, () => hr, () => ({ y: -20, duration: 700 })), k(R, z);
741
+ };
742
+ G(
743
+ A,
744
+ (R) => {
745
+ t(f) === "confirm" ? R(K) : R(F, !1);
746
+ },
747
+ !0
748
+ );
749
+ }
750
+ k(h, D);
751
+ };
752
+ G(
753
+ v,
754
+ (h) => {
755
+ t(f) === "processing" ? h(y) : h(b, !1);
756
+ },
757
+ !0
758
+ );
759
+ }
760
+ k(l, p);
761
+ };
762
+ G(m, (l) => {
763
+ t(f) === "done" && t(q) ? l(d) : l(g, !1);
764
+ });
765
+ }
766
+ return S(c), k(e, c), tr(a);
767
+ }
768
+ cr(["click"]);
769
+ customElements.define("fortyfour-audio-recorder", Z(
770
+ Se,
771
+ {
772
+ apiHost: { attribute: "api-host" },
773
+ projectId: { attribute: "project-id" },
774
+ labels: { attribute: "labels" },
775
+ labelsStr: {}
776
+ },
777
+ [],
778
+ [],
779
+ !0
780
+ ));