@44-audio/components 0.1.0-dev.2 → 0.1.0-dev.21

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.
@@ -1,375 +1,371 @@
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
- }
1
+ import { a4 as je, l as ae, m as se, K as ne, o as P, Z as _e, z as d, F as R, I as W, L as I, D as B, G as we, H as O, x as l, y as ie, r as D, C as T, q as e, M, v as re, w as Q, _ as Me, a0 as Se, B as N, X as ue, V as te, $ as ce, Q as Ue, T as xe, S as U, J as Oe, N as oe, O as ve, R as ze, a1 as he, a2 as Fe, P as Ne, t as He, a5 as qe, a6 as Ce } from "./index-DCaqXYMO.js";
2
+ function Ge(b, s, n, c, i) {
3
+ var t = () => {
4
+ c(n[b]);
33
5
  };
34
- }
35
- function or(e, r) {
36
- _r(() => {
37
- e.dispatchEvent(new CustomEvent(r));
6
+ n.addEventListener(s, t), t(), (n === document.body || n === window || n === document) && je(() => {
7
+ n.removeEventListener(s, t);
38
8
  });
39
9
  }
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("");
10
+ function Ie(b) {
11
+ if (isNaN(b) || b < 0)
12
+ return "-:--";
13
+ const s = b / 1e3, n = Math.floor(s / 3600), c = Math.floor(s % 3600 / 60), i = Math.round(s % 60);
14
+ return n > 0 ? `${n}:${c.toString().padStart(2, "0")}:${i.toString().padStart(2, "0")}` : `${c}:${i.toString().padStart(2, "0")}`;
49
15
  }
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();
16
+ var Ve = ue('<rect rx="1"></rect>'), We = R('<div class="container svelte-efr4jv" role="group" aria-label="audio player"><svg width="100%" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" class="svelte-efr4jv"><!></svg></div>');
17
+ const Je = {
18
+ hash: "svelte-efr4jv",
19
+ code: `svg.svelte-efr4jv {box-sizing:border-box;margin:0;padding:0;}.container.svelte-efr4jv {flex:1;box-sizing:border-box;margin:0;padding:0;display:flex;align-items:center;}.bar.svelte-efr4jv {transition:fill 0.2s;}.played.svelte-efr4jv {fill:var(--44-color-2, var(--fortyfour-recorder-bg-primary));}.unplayed.svelte-efr4jv {fill:var(--44-color-1, var(--fortyfour-recorder-color-0));}.recording-pulse.svelte-efr4jv {
20
+ animation: svelte-efr4jv-pulse 0.5s ease-out;}
21
+
22
+ @keyframes svelte-efr4jv-pulse {
23
+ 0% {
24
+ opacity: 0.5;
25
+ }
26
+ 100% {
27
+ opacity: 1;
28
+ }
29
+ }`
30
+ };
31
+ function Le(b, s) {
32
+ se(s, !0), ne(b, Je);
33
+ function n(r, o) {
34
+ const f = r.length / o, a = [];
35
+ for (let u = 0; u < o; u++) {
36
+ const m = Math.floor(u * f), E = Math.floor((u + 1) * f), V = r.slice(m, Math.max(m + 1, E)), $ = V.reduce((J, K) => J + K * K, 0), ge = Math.sqrt($ / V.length);
37
+ a.push(ge);
38
+ }
39
+ return a;
40
+ }
41
+ let c = P(s, "data", 7), i = P(s, "timeMs", 7, null), t = P(s, "barWidth", 7, 3), h = P(s, "spacing", 7, 1), g = P(s, "playedColor", 7, null), S = P(s, "unplayedColor", 7, null), _ = D(0), j = D(!1), k = null;
42
+ _e(() => {
43
+ const r = new ResizeObserver((o) => {
44
+ for (let f of o)
45
+ f.contentBoxSize ? d(_, f.contentBoxSize[0]?.inlineSize || f.contentBoxSize.inlineSize, !0) : d(_, f.contentRect.width, !0), d(j, !0);
46
+ });
47
+ return k && r.observe(k), () => {
48
+ r.disconnect();
49
+ };
50
+ });
51
+ const L = 56, H = 100, F = N(() => Math.floor(e(_) / (t() + h()))), y = N(() => n(c(), e(F))), p = N(() => e(y).length ? c().length / e(y).length : 1), v = N(() => H * e(p)), q = N(() => e(y).map((r) => {
52
+ const o = Math.max(3, Math.round(r / 100 * (L - 3) + 3));
53
+ return o % 2 === 0 ? o + 1 : o;
54
+ }));
55
+ var A = {
56
+ get data() {
57
+ return c();
58
+ },
59
+ set data(r) {
60
+ c(r), T();
61
+ },
62
+ get timeMs() {
63
+ return i();
64
+ },
65
+ set timeMs(r = null) {
66
+ i(r), T();
67
+ },
68
+ get barWidth() {
69
+ return t();
70
+ },
71
+ set barWidth(r = 3) {
72
+ t(r), T();
73
+ },
74
+ get spacing() {
75
+ return h();
76
+ },
77
+ set spacing(r = 1) {
78
+ h(r), T();
79
+ },
80
+ get playedColor() {
81
+ return g();
82
+ },
83
+ set playedColor(r = null) {
84
+ g(r), T();
85
+ },
86
+ get unplayedColor() {
87
+ return S();
88
+ },
89
+ set unplayedColor(r = null) {
90
+ S(r), T();
91
+ }
92
+ }, z = We(), x = I(z);
93
+ W(x, "height", L);
94
+ var w = I(x);
95
+ {
96
+ var C = (r) => {
97
+ var o = re(), f = Q(o);
98
+ Me(f, 17, () => e(q), Se, (a, u, m) => {
99
+ const E = N(() => m * e(v) < i()), V = N(() => i() === null && m === e(q).length - 1);
100
+ var $ = Ve();
101
+ O(() => {
102
+ te(
103
+ $,
104
+ 0,
105
+ ce([
106
+ "bar",
107
+ e(E) ? "played" : "unplayed",
108
+ e(V) && "recording-pulse"
109
+ ]),
110
+ "svelte-efr4jv"
111
+ ), W($, "x", m * (t() + h())), W($, "y", L / 4 - e(u) / 2), W($, "width", t() - 1), W($, "height", e(u)), Ue($, e(E) ? g() ? `fill: ${g()}` : null : S() ? `fill: ${S()}` : null);
112
+ }), l(a, $);
113
+ }), l(r, o);
114
+ };
115
+ B(w, (r) => {
116
+ e(j) && r(C);
117
+ });
57
118
  }
58
- return r;
119
+ return M(x), we(x, (r) => k = r, () => k), M(z), O(() => W(x, "viewBox", `0 0 ${e(_)} ${L / 2}`)), l(b, z), ie(A);
59
120
  }
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
- }));
121
+ ae(
122
+ Le,
123
+ {
124
+ data: {},
125
+ timeMs: {},
126
+ barWidth: {},
127
+ spacing: {},
128
+ playedColor: {},
129
+ unplayedColor: {}
130
+ },
131
+ [],
132
+ [],
133
+ !0
134
+ );
135
+ var Xe = ue('<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640" class="icon svelte-7u5az2"><path d="M176 96C149.5 96 128 117.5 128 144L128 496C128 522.5 149.5 544 176 544L240 544C266.5 544 288 522.5 288 496L288 144C288 117.5 266.5 96 240 96L176 96zM400 96C373.5 96 352 117.5 352 144L352 496C352 522.5 373.5 544 400 544L464 544C490.5 544 512 522.5 512 496L512 144C512 117.5 490.5 96 464 96L400 96z"></path></svg>'), Ke = ue('<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640" class="icon svelte-7u5az2"><path d="M187.2 100.9C174.8 94.1 159.8 94.4 147.6 101.6C135.4 108.8 128 121.9 128 136L128 504C128 518.1 135.5 531.2 147.6 538.4C159.7 545.6 174.8 545.9 187.2 539.1L523.2 355.1C536 348.1 544 334.6 544 320C544 305.4 536 291.9 523.2 284.9L187.2 100.9z"></path></svg>'), Qe = R('<div class="container svelte-7u5az2" role="group" aria-label="Audio player"><button class="btn svelte-7u5az2"><!></button> <!> <div class="time svelte-7u5az2"><!></div> <audio></audio></div>');
136
+ const Ze = {
137
+ hash: "svelte-7u5az2",
138
+ code: ".container.svelte-7u5az2 {display:flex;align-items:stretch;gap:0.5rem;flex:1;}.btn.svelte-7u5az2 {border:none;border-radius:50%;padding:0.5rem;cursor:pointer;display:flex;align-items:center;justify-content:center;aspect-ratio:1 / 1;flex-shrink:0;align-self:center;color:var(--fortyfour-recorder-btn-primary-color);background:var(--fortyfour-recorder-btn-primary-bg);}.btn.svelte-7u5az2:hover {color:var(--fortyfour-recorder-btn-primary-color-hover);background:var(--fortyfour-recorder-btn-primary-bg-hover);}.icon.svelte-7u5az2 {width:1.5em;height:1.5em;fill:currentColor;}.time.svelte-7u5az2 {display:flex;align-items:center;font-variant-numeric:tabular-nums;font-size:0.9rem;}"
139
+ };
140
+ function Ee(b, s) {
141
+ se(s, !0), ne(b, Ze);
142
+ let n = P(s, "audioURL", 7), c = P(s, "waveform", 7), i = D(null), t = D(0), h = D(0), g = D(
143
+ "ready"
144
+ // "ready", "playing", "paused"
145
+ ), S = null;
146
+ const j = typeof navigator < "u" && /iPad|iPhone|iPod/.test(navigator.userAgent) ? 350 : 0;
147
+ function k() {
148
+ e(i) && e(g) === "playing" && (d(t, e(i).currentTime, !0), S = requestAnimationFrame(k));
68
149
  }
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
- });
150
+ function L() {
151
+ d(g, "ready"), d(t, 0), S && (cancelAnimationFrame(S), S = null);
152
+ }
153
+ function H() {
154
+ e(i) && (e(g) === "playing" ? (e(i).pause(), d(g, "paused"), S && (cancelAnimationFrame(S), S = null)) : (e(i).play(), d(g, "playing"), k()));
155
+ }
156
+ var F = {
157
+ get audioURL() {
158
+ return n();
79
159
  },
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
- });
160
+ set audioURL(a) {
161
+ n(a), T();
88
162
  },
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;
163
+ get waveform() {
164
+ return c();
165
+ },
166
+ set waveform(a) {
167
+ c(a), T();
106
168
  }
107
- m && Ar(() => {
108
- Fr(() => a.in());
169
+ }, y = Qe(), p = I(y);
170
+ p.__click = H;
171
+ var v = I(p);
172
+ {
173
+ var q = (a) => {
174
+ var u = Xe();
175
+ l(a, u);
176
+ }, A = (a) => {
177
+ var u = Ke();
178
+ l(a, u);
179
+ };
180
+ B(v, (a) => {
181
+ e(g) === "playing" ? a(q) : a(A, !1);
109
182
  });
110
183
  }
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);
184
+ M(p);
185
+ var z = U(p, 2);
186
+ {
187
+ var x = (a) => {
188
+ {
189
+ let u = N(() => Math.round(e(t) * 1e3) + j);
190
+ Le(a, {
191
+ get timeMs() {
192
+ return e(u);
193
+ },
194
+ get data() {
195
+ return c();
196
+ }
197
+ });
120
198
  }
121
- }), {
122
- abort: () => {
123
- f = !0, u?.abort();
124
- },
125
- deactivate: () => u.deactivate(),
126
- reset: () => u.reset(),
127
- t: () => u.t()
128
199
  };
200
+ B(z, (a) => {
201
+ c() && a(x);
202
+ });
129
203
  }
130
- if (i?.deactivate(), !r?.duration)
131
- return o(), {
132
- abort: J,
133
- deactivate: J,
134
- reset: J,
135
- t: () => s
204
+ var w = U(z, 2), C = I(w);
205
+ {
206
+ var r = (a) => {
207
+ var u = oe();
208
+ O((m) => ve(u, m), [() => Ie(e(t))]), l(a, u);
209
+ }, o = (a) => {
210
+ var u = oe();
211
+ O((m) => ve(u, m), [() => Ie(e(h))]), l(a, u);
136
212
  };
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);
213
+ B(C, (a) => {
214
+ ["playing", "paused"].includes(e(g)) ? a(r) : a(o, !1);
215
+ });
142
216
  }
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
- };
217
+ M(w);
218
+ var f = U(w, 2);
219
+ return we(f, (a) => d(i, a), () => e(i)), M(y), O(() => {
220
+ W(p, "aria-label", e(g) === "playing" ? "Pause" : "Play"), W(f, "src", n());
221
+ }), Oe("ended", f, L), Ge("duration", "durationchange", f, (a) => d(h, a)), l(b, y), ie(F);
187
222
  }
188
- const Xr = (e) => e;
189
- function Yr(e) {
190
- const r = e - 1;
191
- return r * r * r + 1;
223
+ xe(["click"]);
224
+ ae(Ee, { audioURL: {}, waveform: {} }, [], [], !0);
225
+ async function Ye(b, s, n, c) {
226
+ d(s, !e(s)), e(n).length || await c();
192
227
  }
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 = {
228
+ var er = R("<li><button> </button></li>"), rr = R('<li><button class="devices-select__option svelte-q87ygv" disabled>No microphones found</button></li>'), tr = R('<li><button class="devices-select__option svelte-q87ygv" disabled>Loading Microphones...</button></li>'), or = R('<ul role="listbox" aria-label="Select microphone"><!> <!> <!></ul>'), ar = R('<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>');
229
+ const sr = {
234
230
  hash: "svelte-q87ygv",
235
231
  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
232
  };
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);
233
+ function Re(b, s) {
234
+ se(s, !0), ne(b, sr);
235
+ let n = P(s, "deviceId", 15, ""), c = P(s, "disabled", 7, !1), i = D(ze([])), t = D(!1), h = D(!1), g;
236
+ _e(() => {
237
+ function y(p) {
238
+ p.composedPath().includes(g) || e(t) && d(t, !1);
243
239
  }
244
- return document.addEventListener("pointerdown", a), () => {
245
- document.removeEventListener("pointerdown", a);
240
+ return document.addEventListener("pointerdown", y), () => {
241
+ document.removeEventListener("pointerdown", y);
246
242
  };
247
243
  });
248
- async function q() {
244
+ async function S() {
249
245
  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}`
246
+ d(h, !0), (await navigator.mediaDevices.getUserMedia({ audio: !0 })).getTracks().forEach((p) => p.stop()), d(i, await navigator.mediaDevices.enumerateDevices(), !0), d(
247
+ i,
248
+ e(i).filter((p) => p.deviceId).filter((p) => p.kind === "audioinput").map((p, v) => ({
249
+ deviceId: p.deviceId,
250
+ label: p.label || `Microphone ${v + 1}`
255
251
  })),
256
252
  !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);
253
+ ), !n() && e(i).length && n(e(i)[0].deviceId), e(i).sort((p, v) => p.label.localeCompare(v.label)), d(h, !1);
254
+ } catch (y) {
255
+ console.error("Error accessing microphones:", y);
260
256
  }
261
257
  }
262
- function x(a) {
258
+ function _(y) {
263
259
  return () => {
264
- i(a), I(n, !1);
260
+ n(y), d(t, !1);
265
261
  };
266
262
  }
267
- var _ = {
263
+ var j = {
268
264
  get deviceId() {
269
- return i();
265
+ return n();
270
266
  },
271
- set deviceId(a = "") {
272
- i(a), B();
267
+ set deviceId(y = "") {
268
+ n(y), T();
273
269
  },
274
270
  get disabled() {
275
- return s();
271
+ return c();
276
272
  },
277
- set disabled(a = !1) {
278
- s(a), B();
273
+ set disabled(y = !1) {
274
+ c(y), T();
279
275
  }
280
- }, M = ie(), w = T(M);
281
- w.__click = [re, n, o, q];
282
- var C = L(w, 2);
276
+ }, k = ar(), L = I(k);
277
+ L.__click = [Ye, t, i, S];
278
+ var H = U(L, 2);
283
279
  {
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);
280
+ var F = (y) => {
281
+ var p = or(), v = I(p);
282
+ Me(v, 17, () => e(i), Se, (w, C) => {
283
+ var r = er(), o = I(r), f = N(() => _(e(C).deviceId));
284
+ o.__click = function(...u) {
285
+ e(f)?.apply(this, u);
290
286
  };
291
- var A = T(h, !0);
292
- S(h), S(b), N(() => {
293
- X(
294
- h,
287
+ var a = I(o, !0);
288
+ M(o), M(r), O(() => {
289
+ te(
290
+ o,
295
291
  1,
296
- sr([
292
+ ce([
297
293
  "devices-select__option",
298
- t(y).deviceId === i() && "devices-select__option--is-selected"
294
+ e(C).deviceId === n() && "devices-select__option--is-selected"
299
295
  ]),
300
296
  "svelte-q87ygv"
301
- ), h.disabled = s(), Y(A, t(y).label);
302
- }), k(v, b);
297
+ ), o.disabled = c(), ve(a, e(C).label);
298
+ }), l(w, r);
303
299
  });
304
- var d = L(m, 2);
300
+ var q = U(v, 2);
305
301
  {
306
- var g = (v) => {
307
- var y = te();
308
- k(v, y);
302
+ var A = (w) => {
303
+ var C = rr();
304
+ l(w, C);
309
305
  };
310
- G(d, (v) => {
311
- !t(o).length && !t(u) && v(g);
306
+ B(q, (w) => {
307
+ !e(i).length && !e(h) && w(A);
312
308
  });
313
309
  }
314
- var l = L(d, 2);
310
+ var z = U(q, 2);
315
311
  {
316
- var p = (v) => {
317
- var y = oe();
318
- k(v, y);
312
+ var x = (w) => {
313
+ var C = tr();
314
+ l(w, C);
319
315
  };
320
- G(l, (v) => {
321
- t(u) && v(p);
316
+ B(z, (w) => {
317
+ e(h) && w(x);
322
318
  });
323
319
  }
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);
320
+ M(p), O(() => te(p, 1, `devices-select ${e(t) ? "devices-select--is-open" : ""}`, "svelte-q87ygv")), he(3, p, () => Fe, () => ({ duration: 100 })), l(y, p);
325
321
  };
326
- G(C, (a) => {
327
- t(n) && a(E);
322
+ B(H, (y) => {
323
+ e(t) && y(F);
328
324
  });
329
325
  }
330
- return S(M), kr(M, (a) => f = a, () => f), N(() => ar(w, "aria-expanded", t(n))), k(e, M), tr(_);
326
+ return M(k), we(k, (y) => g = y, () => g), O(() => W(L, "aria-expanded", e(t))), l(b, k), ie(j);
331
327
  }
332
- cr(["click"]);
333
- Z(Sr, { deviceId: {}, disabled: {} }, [], [], !0);
334
- var ne = $("<button><!></button>");
335
- const ce = {
328
+ xe(["click"]);
329
+ ae(Re, { deviceId: {}, disabled: {} }, [], [], !0);
330
+ var nr = R("<button><!></button>");
331
+ const ir = {
336
332
  hash: "svelte-f3ispq",
337
333
  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
334
  };
339
- function nr(e, r) {
340
- rr(r, !0), er(e, ce);
341
- const i = P(r, "type", 7), s = P(r, "onclick", 7, () => {
335
+ function de(b, s) {
336
+ se(s, !0), ne(b, ir);
337
+ const n = P(s, "type", 7), c = P(s, "onclick", 7, () => {
342
338
  });
343
- var o = {
339
+ var i = {
344
340
  get type() {
345
- return i();
341
+ return n();
346
342
  },
347
- set type(f) {
348
- i(f), B();
343
+ set type(g) {
344
+ n(g), T();
349
345
  },
350
346
  get onclick() {
351
- return s();
347
+ return c();
352
348
  },
353
- set onclick(f = () => {
349
+ set onclick(g = () => {
354
350
  }) {
355
- s(f), B();
351
+ c(g), T();
356
352
  }
357
- }, n = ne();
358
- n.__click = function(...f) {
359
- s()?.apply(this, f);
353
+ }, t = nr();
354
+ t.__click = function(...g) {
355
+ c()?.apply(this, g);
360
356
  };
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);
357
+ var h = I(t);
358
+ return Ne(h, s, "default", {}, null), M(t), O(() => te(t, 1, ce(["btn", n() && `btn--${n()}`]), "svelte-f3ispq")), l(b, t), ie(i);
363
359
  }
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;}
360
+ xe(["click"]);
361
+ ae(de, { type: {}, onclick: {} }, ["default"], [], !0);
362
+ var lr = R("<div></div> <!>", 1), dr = R('<div class="recording-info svelte-fc16qh"><div class="live-waveform svelte-fc16qh"><!></div> <div class="time-elapsed svelte-fc16qh"> </div></div>'), cr = R('<div role="group" aria-label="Audio recorder"><!> <!> <!></div>');
363
+ const vr = {
364
+ hash: "svelte-fc16qh",
365
+ code: `.container.svelte-fc16qh {display:flex;align-items:center;gap:1rem;min-height:56px;}.record-icon.svelte-fc16qh {width:1.25rem;height:1.25rem;background:var(--fortyfour-recorder-red-bg);border-radius:50%;}.record-icon--is-recording.svelte-fc16qh {background:var(--fortyfour-recorder-red-color);
366
+ animation: svelte-fc16qh-pulse 2s infinite ease-out;}.recording-info.svelte-fc16qh {display:flex;align-items:center;gap:0.5rem;flex:1;min-width:0;}.live-waveform.svelte-fc16qh {flex:1;min-width:0;}.time-elapsed.svelte-fc16qh {font-variant-numeric:tabular-nums;flex-shrink:0;}
371
367
 
372
- @keyframes svelte-11ls49v-pulse {
368
+ @keyframes svelte-fc16qh-pulse {
373
369
  0% {
374
370
  transform: scale(1);
375
371
  box-shadow: 0 0 0 0 hsla(0, 100%, 100%, 0.7);
@@ -383,396 +379,385 @@ const ue = {
383
379
  }
384
380
  }`
385
381
  };
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({
382
+ function Ae(b, s) {
383
+ se(s, !0), ne(b, vr);
384
+ let n = P(s, "deviceId", 15, ""), c = P(s, "onDone", 7);
385
+ const i = 100;
386
+ let t = D(ze({
389
387
  state: "ready",
390
388
  // "ready", "recording"
391
389
  timeElapsed: 0,
392
- error: null
393
- })), n;
394
- Br(() => {
395
- n?.stop();
390
+ error: null,
391
+ waveformSamples: []
392
+ })), h, g;
393
+ He(() => {
394
+ h?.stop();
395
+ }), _e(() => {
396
+ function v() {
397
+ document.hidden && e(t).state === "recording" && j();
398
+ }
399
+ return document.addEventListener("visibilitychange", v), () => {
400
+ document.removeEventListener("visibilitychange", v);
401
+ };
396
402
  });
397
- function u() {
398
- t(o).state === "ready" ? f() : t(o).state === "recording" && q();
403
+ function S() {
404
+ e(t).state === "ready" ? _() : e(t).state === "recording" && j();
399
405
  }
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));
406
+ async function _() {
407
+ const v = await navigator.mediaDevices.getUserMedia({
408
+ audio: {
409
+ deviceId: n() ? { exact: n() } : void 0,
410
+ autoGainControl: !0,
411
+ noiseSuppression: !0
412
+ }
413
+ }), q = [];
414
+ h = new MediaRecorder(v), h.ondataavailable = (o) => q.push(o.data), g = new AudioContext();
415
+ const A = g.createAnalyser();
416
+ A.fftSize = 256, g.createMediaStreamSource(v).connect(A);
417
+ const x = new Uint8Array(A.frequencyBinCount);
418
+ let w = 0;
419
+ function C(o) {
420
+ if (e(t).state !== "recording") return;
421
+ A.getByteTimeDomainData(x);
422
+ let f = 0;
423
+ for (let m = 0; m < x.length; m++) {
424
+ const E = (x[m] - 128) / 128;
425
+ f += E * E;
426
+ }
427
+ const a = Math.sqrt(f / x.length), u = Math.min(1, a * 4);
428
+ o - w >= i && (e(t).waveformSamples = [...e(t).waveformSamples, Math.round(u * 100)], w = o), requestAnimationFrame(C);
429
+ }
430
+ h.onstop = () => {
431
+ if (e(t).state !== "recording")
432
+ return;
433
+ v.getTracks().forEach((f) => f.stop()), g?.close();
434
+ const o = e(t).waveformSamples;
435
+ e(t).waveformSamples = [], c()({
436
+ url: URL.createObjectURL(new Blob(q, { type: h.mimeType })),
437
+ waveform: o
438
+ }), e(t).state = "ready";
439
+ }, h.start();
440
+ const r = () => {
441
+ e(t).state === "recording" && (e(t).timeElapsed += 1, setTimeout(r, 1e3));
409
442
  };
410
- setTimeout(m, 1e3), t(o).state = "recording";
443
+ setTimeout(r, 1e3), e(t).state = "recording", C();
411
444
  }
412
- function q() {
413
- n?.stop();
445
+ function j() {
446
+ h?.stop();
414
447
  }
415
- var x = {
448
+ var k = {
416
449
  get deviceId() {
417
- return i();
450
+ return n();
418
451
  },
419
- set deviceId(a = "") {
420
- i(a), B();
452
+ set deviceId(v = "") {
453
+ n(v), T();
421
454
  },
422
455
  get onDone() {
423
- return s();
456
+ return c();
424
457
  },
425
- set onDone(a) {
426
- s(a), B();
458
+ set onDone(v) {
459
+ c(v), T();
427
460
  }
428
- }, _ = fe(), M = T(_);
461
+ }, L = cr(), H = I(L);
429
462
  {
430
- let a = fr(() => t(o).state === "recording" && "recording");
431
- nr(M, {
432
- onclick: u,
463
+ let v = N(() => e(t).state === "recording" && "recording");
464
+ de(H, {
465
+ onclick: S,
433
466
  get type() {
434
- return t(a);
467
+ return e(v);
435
468
  },
436
- children: (c, m) => {
437
- var d = de(), g = Q(d), l = L(g, 2);
469
+ children: (q, A) => {
470
+ var z = lr(), x = Q(z), w = U(x, 2);
438
471
  {
439
- var p = (y) => {
440
- var b = vr("Record");
441
- k(y, b);
442
- }, v = (y) => {
443
- var b = pr(), h = Q(b);
472
+ var C = (o) => {
473
+ var f = oe("Record");
474
+ l(o, f);
475
+ }, r = (o) => {
476
+ var f = re(), a = Q(f);
444
477
  {
445
- var D = (A) => {
446
- var K = vr("Recording");
447
- k(A, K);
478
+ var u = (m) => {
479
+ var E = oe("Recording");
480
+ l(m, E);
448
481
  };
449
- G(
450
- h,
451
- (A) => {
452
- t(o).state === "recording" && A(D);
482
+ B(
483
+ a,
484
+ (m) => {
485
+ e(t).state === "recording" && m(u);
453
486
  },
454
487
  !0
455
488
  );
456
489
  }
457
- k(y, b);
490
+ l(o, f);
458
491
  };
459
- G(l, (y) => {
460
- t(o).state === "ready" ? y(p) : y(v, !1);
492
+ B(w, (o) => {
493
+ e(t).state === "ready" ? o(C) : o(r, !1);
461
494
  });
462
495
  }
463
- N(() => X(
464
- g,
496
+ O(() => te(
497
+ x,
465
498
  1,
466
- sr([
499
+ ce([
467
500
  "record-icon",
468
- t(o).state === "recording" && "record-icon--is-recording"
501
+ e(t).state === "recording" && "record-icon--is-recording"
469
502
  ]),
470
- "svelte-11ls49v"
471
- )), k(c, d);
503
+ "svelte-fc16qh"
504
+ )), l(q, z);
472
505
  },
473
506
  $$slots: { default: !0 }
474
507
  });
475
508
  }
476
- var w = L(M, 2);
509
+ var F = U(H, 2);
477
510
  {
478
- let a = fr(() => t(o).state === "recording");
479
- Sr(w, {
511
+ let v = N(() => e(t).state === "recording");
512
+ Re(F, {
480
513
  get disabled() {
481
- return t(a);
514
+ return e(v);
482
515
  },
483
516
  get deviceId() {
484
- return i();
517
+ return n();
485
518
  },
486
- set deviceId(c) {
487
- i(c);
519
+ set deviceId(q) {
520
+ n(q);
488
521
  }
489
522
  });
490
523
  }
491
- var C = L(w, 2);
524
+ var y = U(F, 2);
492
525
  {
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);
526
+ var p = (v) => {
527
+ var q = dr(), A = I(q), z = I(A);
528
+ Le(z, {
529
+ get data() {
530
+ return e(t).waveformSamples;
531
+ }
532
+ }), M(A);
533
+ var x = U(A, 2), w = I(x);
534
+ M(x), M(q), O((C, r) => ve(w, `${C ?? ""}:${r ?? ""}`), [
535
+ () => Math.floor(e(t).timeElapsed / 60).toString(),
536
+ () => (e(t).timeElapsed % 60).toString().padStart(2, "0")
537
+ ]), l(v, q);
499
538
  };
500
- G(C, (a) => {
501
- t(o).state === "recording" && a(E);
539
+ B(y, (v) => {
540
+ e(t).state === "recording" && v(p);
502
541
  });
503
542
  }
504
- return S(_), N(() => X(
505
- _,
543
+ return M(L), O(() => te(
544
+ L,
506
545
  1,
507
- sr([
546
+ ce([
508
547
  "container",
509
- t(o).state === "recording" && "is-recording"
548
+ e(t).state === "recording" && "is-recording"
510
549
  ]),
511
- "svelte-11ls49v"
512
- )), k(e, _), tr(x);
550
+ "svelte-fc16qh"
551
+ )), l(b, L), ie(k);
513
552
  }
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",
553
+ ae(Ae, { deviceId: {}, onDone: {} }, [], [], !0);
554
+ var fr = R('<p class="status-message svelte-14spe77">Recording saved successfully!</p>'), ur = R('<p class="status-message svelte-14spe77">Uploading...</p>'), gr = R('<p class="status-message svelte-14spe77">Processing...</p>'), pr = R('<div class="error svelte-14spe77"><p class="svelte-14spe77"> </p> <!></div>'), yr = ue('<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>'), mr = R('<div class="confirm svelte-14spe77"><!> <div class="confirm-actions svelte-14spe77"><!> <!></div></div>'), br = R('<div class="row"><!></div>'), hr = R('<div class="recorder svelte-14spe77" role="group" aria-label="44 audio recorder"><!></div>');
555
+ const _r = {
556
+ hash: "svelte-14spe77",
622
557
  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);}`
558
+ 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-14spe77 {padding:var(--fortyfour-recorder-spacing-md);border-radius:var(--fortyfour-recorder-radius);background:var(--fortyfour-recorder-bg);color:var(--fortyfour-recorder-color);}.confirm.svelte-14spe77 {display:flex;align-items:center;gap:var(--fortyfour-recorder-spacing-sm);}.confirm-actions.svelte-14spe77 {display:flex;gap:var(--fortyfour-recorder-spacing-sm);flex-shrink:0;}.error.svelte-14spe77 {display:flex;flex-direction:column;gap:var(--fortyfour-recorder-spacing-sm);}.error.svelte-14spe77 p:where(.svelte-14spe77) {color:var(--fortyfour-recorder-red-bg);margin:0;}.status-message.svelte-14spe77 {margin:0;text-align:center;}`
624
559
  };
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(
560
+ function wr(b, s) {
561
+ se(s, !0), ne(b, _r);
562
+ const n = s.$$host;
563
+ let c = P(s, "sessionId", 7), i = P(s, "labels", 7, ""), t = P(s, "apiHost", 7, "api.44.audio");
564
+ const h = N(() => i() ? i().split(",").map((r) => r.trim()).filter(Boolean) : []), g = 2e3, S = 30;
565
+ let _ = D(
631
566
  "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");
567
+ // "ready", "recording", "confirm", "uploading", "processing", "done", "error"
568
+ ), j = D(null), k = D(null), L = D(null), H = D(""), F = D(null);
569
+ async function y() {
570
+ if (!(e(_) !== "confirm" || !e(k))) {
571
+ d(_, "uploading");
572
+ try {
573
+ const r = await fetch(e(k));
574
+ if (!r.ok)
575
+ throw new Error("Failed to load audio data");
576
+ const o = await r.blob(), f = new File([o], "recording.audio", { type: o.type }), a = new FormData();
577
+ a.append("sessionId", c()), e(h).forEach(($) => a.append("labels", $)), a.append("audioFile", f), e(L) && a.append("waveform", JSON.stringify(e(L)));
578
+ const u = await fetch(`https://${t()}/v1/recordings`, { method: "POST", body: a });
579
+ if (!u.ok)
580
+ throw new Error(`Upload failed: ${u.status}`);
581
+ const m = await u.json();
582
+ d(j, m.recordingId, !0), d(_, "processing");
583
+ let E = !1, V = 0;
584
+ for (; !E && V < S; )
585
+ await new Promise(($) => setTimeout($, g)), E = await v(e(j)), V++;
586
+ if (!E) {
587
+ d(F, "Recording processing timeout. Please try again."), d(_, "error");
588
+ return;
589
+ }
590
+ n.dispatchEvent(new CustomEvent("recording-complete", { detail: { recordingId: e(j) } })), d(_, "done");
591
+ } catch (r) {
592
+ console.error("Error saving recording:", r), d(F, r.message || "Failed to save recording", !0), d(_, "error");
593
+ }
650
594
  }
651
595
  }
652
- function w() {
653
- I(x, null), I(f, "ready");
596
+ function p() {
597
+ d(k, null), d(L, null), d(_, "ready");
654
598
  }
655
- async function C(l) {
599
+ async function v(r) {
656
600
  try {
657
- const p = await fetch(`https://44hz.zuuu.us/recordings/${l}/status`);
658
- if (!p.ok)
601
+ const o = await fetch(`https://${t()}/v1/recordings/${r}/status`);
602
+ if (!o.ok)
659
603
  throw new Error("Failed to fetch data");
660
- return (await p.json()).status === "ready";
661
- } catch (p) {
662
- return console.error(p), !1;
604
+ return (await o.json()).status === "ready";
605
+ } catch (o) {
606
+ return console.error(o), !1;
663
607
  }
664
608
  }
665
- function E(l) {
666
- I(x, l, !0), I(f, "confirm");
609
+ function q(r) {
610
+ d(k, r.url, !0), d(L, r.waveform, !0), d(_, "confirm");
667
611
  }
668
- var a = {
669
- get projectId() {
670
- return s();
612
+ var A = {
613
+ get sessionId() {
614
+ return c();
671
615
  },
672
- set projectId(l) {
673
- s(l), B();
616
+ set sessionId(r) {
617
+ c(r), T();
674
618
  },
675
- get labelsStr() {
676
- return o();
619
+ get labels() {
620
+ return i();
677
621
  },
678
- set labelsStr(l = "") {
679
- o(l), B();
622
+ set labels(r = "") {
623
+ i(r), T();
680
624
  },
681
625
  get apiHost() {
682
- return n();
626
+ return t();
683
627
  },
684
- set apiHost(l = "api.44.audio") {
685
- n(l), B();
628
+ set apiHost(r = "api.44.audio") {
629
+ t(r), T();
686
630
  }
687
- }, c = Ie(), m = T(c);
631
+ }, z = hr(), x = I(z);
688
632
  {
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);
633
+ var w = (r) => {
634
+ var o = fr();
635
+ l(r, o);
636
+ }, C = (r) => {
637
+ var o = re(), f = Q(o);
696
638
  {
697
- var y = (h) => {
698
- var D = _e();
699
- k(h, D);
700
- }, b = (h) => {
701
- var D = pr(), A = Q(D);
639
+ var a = (m) => {
640
+ var E = ur();
641
+ l(m, E);
642
+ }, u = (m) => {
643
+ var E = re(), V = Q(E);
702
644
  {
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);
645
+ var $ = (J) => {
646
+ var K = gr();
647
+ l(J, K);
648
+ }, ge = (J) => {
649
+ var K = re(), Pe = Q(K);
650
+ {
651
+ var Te = (Z) => {
652
+ var Y = pr(), le = I(Y), pe = I(le);
653
+ M(le);
654
+ var ye = U(le, 2);
655
+ de(ye, {
656
+ onclick: () => d(_, "confirm"),
657
+ children: (X, G) => {
658
+ qe();
659
+ var ee = oe("Try Again");
660
+ l(X, ee);
661
+ },
662
+ $$slots: { default: !0 }
663
+ }), M(Y), O(() => ve(pe, `Error: ${e(F) ?? ""}`)), l(Z, Y);
664
+ }, De = (Z) => {
665
+ var Y = re(), le = Q(Y);
666
+ {
667
+ var pe = (X) => {
668
+ var G = mr(), ee = I(G);
669
+ Ee(ee, {
670
+ get audioURL() {
671
+ return e(k);
672
+ },
673
+ get waveform() {
674
+ return e(L);
675
+ }
676
+ });
677
+ var fe = U(ee, 2), ke = I(fe);
678
+ de(ke, {
679
+ onclick: p,
680
+ children: (me, Be) => {
681
+ var be = yr();
682
+ l(me, be);
683
+ },
684
+ $$slots: { default: !0 }
685
+ });
686
+ var $e = U(ke, 2);
687
+ de($e, {
688
+ type: "primary",
689
+ onclick: y,
690
+ children: (me, Be) => {
691
+ qe();
692
+ var be = oe("Save");
693
+ l(me, be);
694
+ },
695
+ $$slots: { default: !0 }
696
+ }), M(fe), M(G), he(1, G, () => Ce, () => ({ y: 20, duration: 700 })), l(X, G);
697
+ }, ye = (X) => {
698
+ var G = br(), ee = I(G);
699
+ Ae(ee, {
700
+ onDone: q,
701
+ get deviceId() {
702
+ return e(H);
703
+ },
704
+ set deviceId(fe) {
705
+ d(H, fe, !0);
706
+ }
707
+ }), M(G), he(1, G, () => Ce, () => ({ y: -20, duration: 700 })), l(X, G);
708
+ };
709
+ B(
710
+ le,
711
+ (X) => {
712
+ e(_) === "confirm" ? X(pe) : X(ye, !1);
713
+ },
714
+ !0
715
+ );
716
+ }
717
+ l(Z, Y);
718
+ };
719
+ B(
720
+ Pe,
721
+ (Z) => {
722
+ e(_) === "error" ? Z(Te) : Z(De, !1);
723
+ },
724
+ !0
725
+ );
726
+ }
727
+ l(J, K);
741
728
  };
742
- G(
743
- A,
744
- (R) => {
745
- t(f) === "confirm" ? R(K) : R(F, !1);
729
+ B(
730
+ V,
731
+ (J) => {
732
+ e(_) === "processing" ? J($) : J(ge, !1);
746
733
  },
747
734
  !0
748
735
  );
749
736
  }
750
- k(h, D);
737
+ l(m, E);
751
738
  };
752
- G(
753
- v,
754
- (h) => {
755
- t(f) === "processing" ? h(y) : h(b, !1);
739
+ B(
740
+ f,
741
+ (m) => {
742
+ e(_) === "uploading" ? m(a) : m(u, !1);
756
743
  },
757
744
  !0
758
745
  );
759
746
  }
760
- k(l, p);
747
+ l(r, o);
761
748
  };
762
- G(m, (l) => {
763
- t(f) === "done" && t(q) ? l(d) : l(g, !1);
749
+ B(x, (r) => {
750
+ e(_) === "done" ? r(w) : r(C, !1);
764
751
  });
765
752
  }
766
- return S(c), k(e, c), tr(a);
753
+ return M(z), l(b, z), ie(A);
767
754
  }
768
- cr(["click"]);
769
- customElements.define("fortyfour-audio-recorder", Z(
770
- Se,
755
+ customElements.define("fortyfour-audio-recorder", ae(
756
+ wr,
771
757
  {
772
758
  apiHost: { attribute: "api-host" },
773
- projectId: { attribute: "project-id" },
774
- labels: { attribute: "labels" },
775
- labelsStr: {}
759
+ sessionId: { attribute: "session-id" },
760
+ labels: { attribute: "labels" }
776
761
  },
777
762
  [],
778
763
  [],