dictate-button 2.0.1 → 2.1.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.
Files changed (2) hide show
  1. package/dist/dictate-button.js +395 -355
  2. package/package.json +2 -2
@@ -1,72 +1,72 @@
1
- const Pt = (t, e) => t === e, q = {
2
- equals: Pt
1
+ const $t = (t, n) => t === n, J = {
2
+ equals: $t
3
3
  };
4
- let gt = vt;
5
- const T = 1, H = 2, bt = {
4
+ let mt = Et;
5
+ const k = 1, G = 2, vt = {
6
6
  owned: null,
7
7
  cleanups: null,
8
8
  context: null,
9
9
  owner: null
10
10
  };
11
11
  var y = null;
12
- let et = null, Mt = null, b = null, w = null, S = null, Q = 0;
13
- function Lt(t, e) {
14
- const n = b, i = y, r = t.length === 0, o = e === void 0 ? i : e, l = r ? bt : {
12
+ let st = null, Nt = null, b = null, w = null, S = null, tt = 0;
13
+ function Dt(t, n) {
14
+ const e = b, i = y, r = t.length === 0, o = n === void 0 ? i : n, l = r ? vt : {
15
15
  owned: null,
16
16
  cleanups: null,
17
17
  context: o ? o.context : null,
18
18
  owner: o
19
- }, s = r ? t : () => t(() => Y(() => j(l)));
19
+ }, s = r ? t : () => t(() => et(() => j(l)));
20
20
  y = l, b = null;
21
21
  try {
22
- return B(s, !0);
22
+ return U(s, !0);
23
23
  } finally {
24
- b = n, y = i;
24
+ b = e, y = i;
25
25
  }
26
26
  }
27
- function yt(t, e) {
28
- e = e ? Object.assign({}, q, e) : q;
29
- const n = {
27
+ function Ct(t, n) {
28
+ n = n ? Object.assign({}, J, n) : J;
29
+ const e = {
30
30
  value: t,
31
31
  observers: null,
32
32
  observerSlots: null,
33
- comparator: e.equals || void 0
34
- }, i = (r) => (typeof r == "function" && (r = r(n.value)), wt(n, r));
35
- return [_t.bind(n), i];
33
+ comparator: n.equals || void 0
34
+ }, i = (r) => (typeof r == "function" && (r = r(e.value)), xt(e, r));
35
+ return [St.bind(e), i];
36
36
  }
37
- function J(t, e, n) {
38
- const i = st(t, e, !1, T);
39
- I(i);
37
+ function X(t, n, e) {
38
+ const i = ct(t, n, !1, k);
39
+ B(i);
40
40
  }
41
- function Ot(t, e, n) {
42
- gt = It;
43
- const i = st(t, e, !1, T);
44
- i.user = !0, S ? S.push(i) : I(i);
41
+ function It(t, n, e) {
42
+ mt = zt;
43
+ const i = ct(t, n, !1, k);
44
+ i.user = !0, S ? S.push(i) : B(i);
45
45
  }
46
- function $t(t, e, n) {
47
- n = n ? Object.assign({}, q, n) : q;
48
- const i = st(t, e, !0, 0);
49
- return i.observers = null, i.observerSlots = null, i.comparator = n.equals || void 0, I(i), _t.bind(i);
46
+ function jt(t, n, e) {
47
+ e = e ? Object.assign({}, J, e) : J;
48
+ const i = ct(t, n, !0, 0);
49
+ return i.observers = null, i.observerSlots = null, i.comparator = e.equals || void 0, B(i), St.bind(i);
50
50
  }
51
- function Y(t) {
51
+ function et(t) {
52
52
  if (b === null) return t();
53
- const e = b;
53
+ const n = b;
54
54
  b = null;
55
55
  try {
56
56
  return t();
57
57
  } finally {
58
- b = e;
58
+ b = n;
59
59
  }
60
60
  }
61
- function Rt(t) {
61
+ function ht(t) {
62
62
  return y === null || (y.cleanups === null ? y.cleanups = [t] : y.cleanups.push(t)), t;
63
63
  }
64
- function _t() {
64
+ function St() {
65
65
  if (this.sources && this.state)
66
- if (this.state === T) I(this);
66
+ if (this.state === k) B(this);
67
67
  else {
68
68
  const t = w;
69
- w = null, B(() => X(this), !1), w = t;
69
+ w = null, U(() => Q(this), !1), w = t;
70
70
  }
71
71
  if (b) {
72
72
  const t = this.observers ? this.observers.length : 0;
@@ -74,37 +74,37 @@ function _t() {
74
74
  }
75
75
  return this.value;
76
76
  }
77
- function wt(t, e, n) {
77
+ function xt(t, n, e) {
78
78
  let i = t.value;
79
- return (!t.comparator || !t.comparator(i, e)) && (t.value = e, t.observers && t.observers.length && B(() => {
79
+ return (!t.comparator || !t.comparator(i, n)) && (t.value = n, t.observers && t.observers.length && U(() => {
80
80
  for (let r = 0; r < t.observers.length; r += 1) {
81
- const o = t.observers[r], l = et && et.running;
82
- l && et.disposed.has(o), (l ? !o.tState : !o.state) && (o.pure ? w.push(o) : S.push(o), o.observers && mt(o)), l || (o.state = T);
81
+ const o = t.observers[r], l = st && st.running;
82
+ l && st.disposed.has(o), (l ? !o.tState : !o.state) && (o.pure ? w.push(o) : S.push(o), o.observers && At(o)), l || (o.state = k);
83
83
  }
84
84
  if (w.length > 1e6)
85
85
  throw w = [], new Error();
86
- }, !1)), e;
86
+ }, !1)), n;
87
87
  }
88
- function I(t) {
88
+ function B(t) {
89
89
  if (!t.fn) return;
90
90
  j(t);
91
- const e = Q;
92
- Nt(t, t.value, e);
91
+ const n = tt;
92
+ Bt(t, t.value, n);
93
93
  }
94
- function Nt(t, e, n) {
94
+ function Bt(t, n, e) {
95
95
  let i;
96
96
  const r = y, o = b;
97
97
  b = y = t;
98
98
  try {
99
- i = t.fn(e);
99
+ i = t.fn(n);
100
100
  } catch (l) {
101
- return t.pure && (t.state = T, t.owned && t.owned.forEach(j), t.owned = null), t.updatedAt = n + 1, Ct(l);
101
+ return t.pure && (t.state = k, t.owned && t.owned.forEach(j), t.owned = null), t.updatedAt = e + 1, kt(l);
102
102
  } finally {
103
103
  b = o, y = r;
104
104
  }
105
- (!t.updatedAt || t.updatedAt <= n) && (t.updatedAt != null && "observers" in t ? wt(t, i) : t.value = i, t.updatedAt = n);
105
+ (!t.updatedAt || t.updatedAt <= e) && (t.updatedAt != null && "observers" in t ? xt(t, i) : t.value = i, t.updatedAt = e);
106
106
  }
107
- function st(t, e, n, i = T, r) {
107
+ function ct(t, n, e, i = k, r) {
108
108
  const o = {
109
109
  fn: t,
110
110
  state: i,
@@ -113,147 +113,147 @@ function st(t, e, n, i = T, r) {
113
113
  sources: null,
114
114
  sourceSlots: null,
115
115
  cleanups: null,
116
- value: e,
116
+ value: n,
117
117
  owner: y,
118
118
  context: y ? y.context : null,
119
- pure: n
119
+ pure: e
120
120
  };
121
- return y === null || y !== bt && (y.owned ? y.owned.push(o) : y.owned = [o]), o;
121
+ return y === null || y !== vt && (y.owned ? y.owned.push(o) : y.owned = [o]), o;
122
122
  }
123
- function G(t) {
123
+ function Z(t) {
124
124
  if (t.state === 0) return;
125
- if (t.state === H) return X(t);
126
- if (t.suspense && Y(t.suspense.inFallback)) return t.suspense.effects.push(t);
127
- const e = [t];
128
- for (; (t = t.owner) && (!t.updatedAt || t.updatedAt < Q); )
129
- t.state && e.push(t);
130
- for (let n = e.length - 1; n >= 0; n--)
131
- if (t = e[n], t.state === T)
132
- I(t);
133
- else if (t.state === H) {
125
+ if (t.state === G) return Q(t);
126
+ if (t.suspense && et(t.suspense.inFallback)) return t.suspense.effects.push(t);
127
+ const n = [t];
128
+ for (; (t = t.owner) && (!t.updatedAt || t.updatedAt < tt); )
129
+ t.state && n.push(t);
130
+ for (let e = n.length - 1; e >= 0; e--)
131
+ if (t = n[e], t.state === k)
132
+ B(t);
133
+ else if (t.state === G) {
134
134
  const i = w;
135
- w = null, B(() => X(t, e[0]), !1), w = i;
135
+ w = null, U(() => Q(t, n[0]), !1), w = i;
136
136
  }
137
137
  }
138
- function B(t, e) {
138
+ function U(t, n) {
139
139
  if (w) return t();
140
- let n = !1;
141
- e || (w = []), S ? n = !0 : S = [], Q++;
140
+ let e = !1;
141
+ n || (w = []), S ? e = !0 : S = [], tt++;
142
142
  try {
143
143
  const i = t();
144
- return jt(n), i;
144
+ return Ut(e), i;
145
145
  } catch (i) {
146
- n || (S = null), w = null, Ct(i);
146
+ e || (S = null), w = null, kt(i);
147
147
  }
148
148
  }
149
- function jt(t) {
150
- if (w && (vt(w), w = null), t) return;
151
- const e = S;
152
- S = null, e.length && B(() => gt(e), !1);
149
+ function Ut(t) {
150
+ if (w && (Et(w), w = null), t) return;
151
+ const n = S;
152
+ S = null, n.length && U(() => mt(n), !1);
153
153
  }
154
- function vt(t) {
155
- for (let e = 0; e < t.length; e++) G(t[e]);
154
+ function Et(t) {
155
+ for (let n = 0; n < t.length; n++) Z(t[n]);
156
156
  }
157
- function It(t) {
158
- let e, n = 0;
159
- for (e = 0; e < t.length; e++) {
160
- const i = t[e];
161
- i.user ? t[n++] = i : G(i);
157
+ function zt(t) {
158
+ let n, e = 0;
159
+ for (n = 0; n < t.length; n++) {
160
+ const i = t[n];
161
+ i.user ? t[e++] = i : Z(i);
162
162
  }
163
- for (e = 0; e < n; e++) G(t[e]);
163
+ for (n = 0; n < e; n++) Z(t[n]);
164
164
  }
165
- function X(t, e) {
165
+ function Q(t, n) {
166
166
  t.state = 0;
167
- for (let n = 0; n < t.sources.length; n += 1) {
168
- const i = t.sources[n];
167
+ for (let e = 0; e < t.sources.length; e += 1) {
168
+ const i = t.sources[e];
169
169
  if (i.sources) {
170
170
  const r = i.state;
171
- r === T ? i !== e && (!i.updatedAt || i.updatedAt < Q) && G(i) : r === H && X(i, e);
171
+ r === k ? i !== n && (!i.updatedAt || i.updatedAt < tt) && Z(i) : r === G && Q(i, n);
172
172
  }
173
173
  }
174
174
  }
175
- function mt(t) {
176
- for (let e = 0; e < t.observers.length; e += 1) {
177
- const n = t.observers[e];
178
- n.state || (n.state = H, n.pure ? w.push(n) : S.push(n), n.observers && mt(n));
175
+ function At(t) {
176
+ for (let n = 0; n < t.observers.length; n += 1) {
177
+ const e = t.observers[n];
178
+ e.state || (e.state = G, e.pure ? w.push(e) : S.push(e), e.observers && At(e));
179
179
  }
180
180
  }
181
181
  function j(t) {
182
- let e;
182
+ let n;
183
183
  if (t.sources)
184
184
  for (; t.sources.length; ) {
185
- const n = t.sources.pop(), i = t.sourceSlots.pop(), r = n.observers;
185
+ const e = t.sources.pop(), i = t.sourceSlots.pop(), r = e.observers;
186
186
  if (r && r.length) {
187
- const o = r.pop(), l = n.observerSlots.pop();
188
- i < r.length && (o.sourceSlots[l] = i, r[i] = o, n.observerSlots[i] = l);
187
+ const o = r.pop(), l = e.observerSlots.pop();
188
+ i < r.length && (o.sourceSlots[l] = i, r[i] = o, e.observerSlots[i] = l);
189
189
  }
190
190
  }
191
191
  if (t.tOwned) {
192
- for (e = t.tOwned.length - 1; e >= 0; e--) j(t.tOwned[e]);
192
+ for (n = t.tOwned.length - 1; n >= 0; n--) j(t.tOwned[n]);
193
193
  delete t.tOwned;
194
194
  }
195
195
  if (t.owned) {
196
- for (e = t.owned.length - 1; e >= 0; e--) j(t.owned[e]);
196
+ for (n = t.owned.length - 1; n >= 0; n--) j(t.owned[n]);
197
197
  t.owned = null;
198
198
  }
199
199
  if (t.cleanups) {
200
- for (e = t.cleanups.length - 1; e >= 0; e--) t.cleanups[e]();
200
+ for (n = t.cleanups.length - 1; n >= 0; n--) t.cleanups[n]();
201
201
  t.cleanups = null;
202
202
  }
203
203
  t.state = 0;
204
204
  }
205
- function Bt(t) {
205
+ function Ft(t) {
206
206
  return t instanceof Error ? t : new Error(typeof t == "string" ? t : "Unknown error", {
207
207
  cause: t
208
208
  });
209
209
  }
210
- function Ct(t, e = y) {
211
- throw Bt(t);
210
+ function kt(t, n = y) {
211
+ throw Ft(t);
212
212
  }
213
- function K(t, e) {
214
- return Y(() => t(e || {}));
213
+ function H(t, n) {
214
+ return et(() => t(n || {}));
215
215
  }
216
- const V = (t) => $t(() => t());
217
- function Dt(t, e, n) {
218
- let i = n.length, r = e.length, o = i, l = 0, s = 0, a = e[r - 1].nextSibling, g = null;
216
+ const q = (t) => jt(() => t());
217
+ function Wt(t, n, e) {
218
+ let i = e.length, r = n.length, o = i, l = 0, s = 0, a = n[r - 1].nextSibling, g = null;
219
219
  for (; l < r || s < o; ) {
220
- if (e[l] === n[s]) {
220
+ if (n[l] === e[s]) {
221
221
  l++, s++;
222
222
  continue;
223
223
  }
224
- for (; e[r - 1] === n[o - 1]; )
224
+ for (; n[r - 1] === e[o - 1]; )
225
225
  r--, o--;
226
226
  if (r === l) {
227
- const f = o < i ? s ? n[s - 1].nextSibling : n[o - s] : a;
228
- for (; s < o; ) t.insertBefore(n[s++], f);
227
+ const f = o < i ? s ? e[s - 1].nextSibling : e[o - s] : a;
228
+ for (; s < o; ) t.insertBefore(e[s++], f);
229
229
  } else if (o === s)
230
230
  for (; l < r; )
231
- (!g || !g.has(e[l])) && e[l].remove(), l++;
232
- else if (e[l] === n[o - 1] && n[s] === e[r - 1]) {
233
- const f = e[--r].nextSibling;
234
- t.insertBefore(n[s++], e[l++].nextSibling), t.insertBefore(n[--o], f), e[r] = n[o];
231
+ (!g || !g.has(n[l])) && n[l].remove(), l++;
232
+ else if (n[l] === e[o - 1] && e[s] === n[r - 1]) {
233
+ const f = n[--r].nextSibling;
234
+ t.insertBefore(e[s++], n[l++].nextSibling), t.insertBefore(e[--o], f), n[r] = e[o];
235
235
  } else {
236
236
  if (!g) {
237
237
  g = /* @__PURE__ */ new Map();
238
238
  let d = s;
239
- for (; d < o; ) g.set(n[d], d++);
239
+ for (; d < o; ) g.set(e[d], d++);
240
240
  }
241
- const f = g.get(e[l]);
241
+ const f = g.get(n[l]);
242
242
  if (f != null)
243
243
  if (s < f && f < o) {
244
244
  let d = l, m = 1, c;
245
- for (; ++d < r && d < o && !((c = g.get(e[d])) == null || c !== f + m); )
245
+ for (; ++d < r && d < o && !((c = g.get(n[d])) == null || c !== f + m); )
246
246
  m++;
247
247
  if (m > f - s) {
248
- const P = e[l];
249
- for (; s < f; ) t.insertBefore(n[s++], P);
250
- } else t.replaceChild(n[s++], e[l++]);
248
+ const T = n[l];
249
+ for (; s < f; ) t.insertBefore(e[s++], T);
250
+ } else t.replaceChild(e[s++], n[l++]);
251
251
  } else l++;
252
- else e[l++].remove();
252
+ else n[l++].remove();
253
253
  }
254
254
  }
255
255
  }
256
- function D(t, e, n, i) {
256
+ function z(t, n, e, i) {
257
257
  let r;
258
258
  const o = () => {
259
259
  const s = document.createElement("template");
@@ -261,79 +261,79 @@ function D(t, e, n, i) {
261
261
  }, l = () => (r || (r = o())).cloneNode(!0);
262
262
  return l.cloneNode = l, l;
263
263
  }
264
- function N(t, e, n) {
265
- n == null ? t.removeAttribute(e) : t.setAttribute(e, n);
264
+ function I(t, n, e) {
265
+ e == null ? t.removeAttribute(n) : t.setAttribute(n, e);
266
266
  }
267
- function Ut(t, e, n) {
268
- if (!e) return n ? N(t, "style") : e;
267
+ function Kt(t, n, e) {
268
+ if (!n) return e ? I(t, "style") : n;
269
269
  const i = t.style;
270
- if (typeof e == "string") return i.cssText = e;
271
- typeof n == "string" && (i.cssText = n = void 0), n || (n = {}), e || (e = {});
270
+ if (typeof n == "string") return i.cssText = n;
271
+ typeof e == "string" && (i.cssText = e = void 0), e || (e = {}), n || (n = {});
272
272
  let r, o;
273
- for (o in n)
274
- e[o] == null && i.removeProperty(o), delete n[o];
275
273
  for (o in e)
276
- r = e[o], r !== n[o] && (i.setProperty(o, r), n[o] = r);
277
- return n;
278
- }
279
- function zt(t, e, n) {
280
- return Y(() => t(e, n));
281
- }
282
- function L(t, e, n, i) {
283
- if (n !== void 0 && !i && (i = []), typeof e != "function") return Z(t, e, i, n);
284
- J((r) => Z(t, e(), r, n), i);
285
- }
286
- function Z(t, e, n, i, r) {
287
- for (; typeof n == "function"; ) n = n();
288
- if (e === n) return n;
289
- const o = typeof e, l = i !== void 0;
290
- if (t = l && n[0] && n[0].parentNode || t, o === "string" || o === "number") {
291
- if (o === "number" && (e = e.toString(), e === n))
292
- return n;
274
+ n[o] == null && i.removeProperty(o), delete e[o];
275
+ for (o in n)
276
+ r = n[o], r !== e[o] && (i.setProperty(o, r), e[o] = r);
277
+ return e;
278
+ }
279
+ function Vt(t, n, e) {
280
+ return et(() => t(n, e));
281
+ }
282
+ function P(t, n, e, i) {
283
+ if (e !== void 0 && !i && (i = []), typeof n != "function") return Y(t, n, i, e);
284
+ X((r) => Y(t, n(), r, e), i);
285
+ }
286
+ function Y(t, n, e, i, r) {
287
+ for (; typeof e == "function"; ) e = e();
288
+ if (n === e) return e;
289
+ const o = typeof n, l = i !== void 0;
290
+ if (t = l && e[0] && e[0].parentNode || t, o === "string" || o === "number") {
291
+ if (o === "number" && (n = n.toString(), n === e))
292
+ return e;
293
293
  if (l) {
294
- let s = n[0];
295
- s && s.nodeType === 3 ? s.data !== e && (s.data = e) : s = document.createTextNode(e), n = $(t, n, i, s);
294
+ let s = e[0];
295
+ s && s.nodeType === 3 ? s.data !== n && (s.data = n) : s = document.createTextNode(n), e = R(t, e, i, s);
296
296
  } else
297
- n !== "" && typeof n == "string" ? n = t.firstChild.data = e : n = t.textContent = e;
298
- } else if (e == null || o === "boolean")
299
- n = $(t, n, i);
297
+ e !== "" && typeof e == "string" ? e = t.firstChild.data = n : e = t.textContent = n;
298
+ } else if (n == null || o === "boolean")
299
+ e = R(t, e, i);
300
300
  else {
301
301
  if (o === "function")
302
- return J(() => {
303
- let s = e();
302
+ return X(() => {
303
+ let s = n();
304
304
  for (; typeof s == "function"; ) s = s();
305
- n = Z(t, s, n, i);
306
- }), () => n;
307
- if (Array.isArray(e)) {
308
- const s = [], a = n && Array.isArray(n);
309
- if (it(s, e, n, r))
310
- return J(() => n = Z(t, s, n, i, !0)), () => n;
305
+ e = Y(t, s, e, i);
306
+ }), () => e;
307
+ if (Array.isArray(n)) {
308
+ const s = [], a = e && Array.isArray(e);
309
+ if (at(s, n, e, r))
310
+ return X(() => e = Y(t, s, e, i, !0)), () => e;
311
311
  if (s.length === 0) {
312
- if (n = $(t, n, i), l) return n;
313
- } else a ? n.length === 0 ? ut(t, s, i) : Dt(t, n, s) : (n && $(t), ut(t, s));
314
- n = s;
315
- } else if (e.nodeType) {
316
- if (Array.isArray(n)) {
317
- if (l) return n = $(t, n, i, e);
318
- $(t, n, null, e);
319
- } else n == null || n === "" || !t.firstChild ? t.appendChild(e) : t.replaceChild(e, t.firstChild);
320
- n = e;
312
+ if (e = R(t, e, i), l) return e;
313
+ } else a ? e.length === 0 ? gt(t, s, i) : Wt(t, e, s) : (e && R(t), gt(t, s));
314
+ e = s;
315
+ } else if (n.nodeType) {
316
+ if (Array.isArray(e)) {
317
+ if (l) return e = R(t, e, i, n);
318
+ R(t, e, null, n);
319
+ } else e == null || e === "" || !t.firstChild ? t.appendChild(n) : t.replaceChild(n, t.firstChild);
320
+ e = n;
321
321
  }
322
322
  }
323
- return n;
323
+ return e;
324
324
  }
325
- function it(t, e, n, i) {
325
+ function at(t, n, e, i) {
326
326
  let r = !1;
327
- for (let o = 0, l = e.length; o < l; o++) {
328
- let s = e[o], a = n && n[t.length], g;
327
+ for (let o = 0, l = n.length; o < l; o++) {
328
+ let s = n[o], a = e && e[t.length], g;
329
329
  if (!(s == null || s === !0 || s === !1)) if ((g = typeof s) == "object" && s.nodeType)
330
330
  t.push(s);
331
331
  else if (Array.isArray(s))
332
- r = it(t, s, a) || r;
332
+ r = at(t, s, a) || r;
333
333
  else if (g === "function")
334
334
  if (i) {
335
335
  for (; typeof s == "function"; ) s = s();
336
- r = it(t, Array.isArray(s) ? s : [s], Array.isArray(a) ? a : [a]) || r;
336
+ r = at(t, Array.isArray(s) ? s : [s], Array.isArray(a) ? a : [a]) || r;
337
337
  } else
338
338
  t.push(s), r = !0;
339
339
  else {
@@ -343,61 +343,61 @@ function it(t, e, n, i) {
343
343
  }
344
344
  return r;
345
345
  }
346
- function ut(t, e, n = null) {
347
- for (let i = 0, r = e.length; i < r; i++) t.insertBefore(e[i], n);
346
+ function gt(t, n, e = null) {
347
+ for (let i = 0, r = n.length; i < r; i++) t.insertBefore(n[i], e);
348
348
  }
349
- function $(t, e, n, i) {
350
- if (n === void 0) return t.textContent = "";
349
+ function R(t, n, e, i) {
350
+ if (e === void 0) return t.textContent = "";
351
351
  const r = i || document.createTextNode("");
352
- if (e.length) {
352
+ if (n.length) {
353
353
  let o = !1;
354
- for (let l = e.length - 1; l >= 0; l--) {
355
- const s = e[l];
354
+ for (let l = n.length - 1; l >= 0; l--) {
355
+ const s = n[l];
356
356
  if (r !== s) {
357
357
  const a = s.parentNode === t;
358
- !o && !l ? a ? t.replaceChild(r, s) : t.insertBefore(r, n) : a && s.remove();
358
+ !o && !l ? a ? t.replaceChild(r, s) : t.insertBefore(r, e) : a && s.remove();
359
359
  } else o = !0;
360
360
  }
361
- } else t.insertBefore(r, n);
361
+ } else t.insertBefore(r, e);
362
362
  return [r];
363
363
  }
364
- function Ft(t) {
365
- return Object.keys(t).reduce((n, i) => {
364
+ function Ht(t) {
365
+ return Object.keys(t).reduce((e, i) => {
366
366
  const r = t[i];
367
- return n[i] = Object.assign({}, r), St(r.value) && !Ht(r.value) && !Array.isArray(r.value) && (n[i].value = Object.assign({}, r.value)), Array.isArray(r.value) && (n[i].value = r.value.slice(0)), n;
367
+ return e[i] = Object.assign({}, r), Pt(r.value) && !Zt(r.value) && !Array.isArray(r.value) && (e[i].value = Object.assign({}, r.value)), Array.isArray(r.value) && (e[i].value = r.value.slice(0)), e;
368
368
  }, {});
369
369
  }
370
- function Wt(t) {
371
- return t ? Object.keys(t).reduce((n, i) => {
370
+ function qt(t) {
371
+ return t ? Object.keys(t).reduce((e, i) => {
372
372
  const r = t[i];
373
- return n[i] = St(r) && "value" in r ? r : {
373
+ return e[i] = Pt(r) && "value" in r ? r : {
374
374
  value: r
375
- }, n[i].attribute || (n[i].attribute = qt(i)), n[i].parse = "parse" in n[i] ? n[i].parse : typeof n[i].value != "string", n;
375
+ }, e[i].attribute || (e[i].attribute = Xt(i)), e[i].parse = "parse" in e[i] ? e[i].parse : typeof e[i].value != "string", e;
376
376
  }, {}) : {};
377
377
  }
378
- function Kt(t) {
379
- return Object.keys(t).reduce((n, i) => (n[i] = t[i].value, n), {});
378
+ function Jt(t) {
379
+ return Object.keys(t).reduce((e, i) => (e[i] = t[i].value, e), {});
380
380
  }
381
- function Vt(t, e) {
382
- const n = Ft(e);
383
- return Object.keys(e).forEach((r) => {
384
- const o = n[r], l = t.getAttribute(o.attribute), s = t[r];
385
- l != null && (o.value = o.parse ? xt(l) : l), s != null && (o.value = Array.isArray(s) ? s.slice(0) : s), o.reflect && ft(t, o.attribute, o.value, !!o.parse), Object.defineProperty(t, r, {
381
+ function Gt(t, n) {
382
+ const e = Ht(n);
383
+ return Object.keys(n).forEach((r) => {
384
+ const o = e[r], l = t.getAttribute(o.attribute), s = t[r];
385
+ l != null && (o.value = o.parse ? Tt(l) : l), s != null && (o.value = Array.isArray(s) ? s.slice(0) : s), o.reflect && bt(t, o.attribute, o.value, !!o.parse), Object.defineProperty(t, r, {
386
386
  get() {
387
387
  return o.value;
388
388
  },
389
389
  set(a) {
390
390
  const g = o.value;
391
- o.value = a, o.reflect && ft(this, o.attribute, o.value, !!o.parse);
391
+ o.value = a, o.reflect && bt(this, o.attribute, o.value, !!o.parse);
392
392
  for (let f = 0, d = this.__propertyChangedCallbacks.length; f < d; f++)
393
393
  this.__propertyChangedCallbacks[f](r, a, g);
394
394
  },
395
395
  enumerable: !0,
396
396
  configurable: !0
397
397
  });
398
- }), n;
398
+ }), e;
399
399
  }
400
- function xt(t) {
400
+ function Tt(t) {
401
401
  if (t)
402
402
  try {
403
403
  return JSON.parse(t);
@@ -405,47 +405,47 @@ function xt(t) {
405
405
  return t;
406
406
  }
407
407
  }
408
- function ft(t, e, n, i) {
409
- if (n == null || n === !1) return t.removeAttribute(e);
410
- let r = i ? JSON.stringify(n) : n;
411
- t.__updating[e] = !0, r === "true" && (r = ""), t.setAttribute(e, r), Promise.resolve().then(() => delete t.__updating[e]);
408
+ function bt(t, n, e, i) {
409
+ if (e == null || e === !1) return t.removeAttribute(n);
410
+ let r = i ? JSON.stringify(e) : e;
411
+ t.__updating[n] = !0, r === "true" && (r = ""), t.setAttribute(n, r), Promise.resolve().then(() => delete t.__updating[n]);
412
412
  }
413
- function qt(t) {
414
- return t.replace(/\.?([A-Z]+)/g, (e, n) => "-" + n.toLowerCase()).replace("_", "-").replace(/^-/, "");
413
+ function Xt(t) {
414
+ return t.replace(/\.?([A-Z]+)/g, (n, e) => "-" + e.toLowerCase()).replace("_", "-").replace(/^-/, "");
415
415
  }
416
- function St(t) {
416
+ function Pt(t) {
417
417
  return t != null && (typeof t == "object" || typeof t == "function");
418
418
  }
419
- function Ht(t) {
419
+ function Zt(t) {
420
420
  return Object.prototype.toString.call(t) === "[object Function]";
421
421
  }
422
- function Jt(t) {
422
+ function Qt(t) {
423
423
  return typeof t == "function" && t.toString().indexOf("class") === 0;
424
424
  }
425
- let nt;
426
- function Gt(t, e) {
427
- const n = Object.keys(e);
425
+ let ot;
426
+ function Yt(t, n) {
427
+ const e = Object.keys(n);
428
428
  return class extends t {
429
429
  static get observedAttributes() {
430
- return n.map((r) => e[r].attribute);
430
+ return e.map((r) => n[r].attribute);
431
431
  }
432
432
  constructor() {
433
433
  super(), this.__initialized = !1, this.__released = !1, this.__releaseCallbacks = [], this.__propertyChangedCallbacks = [], this.__updating = {}, this.props = {};
434
- for (let r of n)
434
+ for (let r of e)
435
435
  this[r] = void 0;
436
436
  }
437
437
  connectedCallback() {
438
438
  if (this.__initialized) return;
439
- this.__releaseCallbacks = [], this.__propertyChangedCallbacks = [], this.__updating = {}, this.props = Vt(this, e);
440
- const r = Kt(this.props), o = this.Component, l = nt;
439
+ this.__releaseCallbacks = [], this.__propertyChangedCallbacks = [], this.__updating = {}, this.props = Gt(this, n);
440
+ const r = Jt(this.props), o = this.Component, l = ot;
441
441
  try {
442
- nt = this, this.__initialized = !0, Jt(o) ? new o(r, {
442
+ ot = this, this.__initialized = !0, Qt(o) ? new o(r, {
443
443
  element: this
444
444
  }) : o(r, {
445
445
  element: this
446
446
  });
447
447
  } finally {
448
- nt = l;
448
+ ot = l;
449
449
  }
450
450
  }
451
451
  async disconnectedCallback() {
@@ -456,14 +456,14 @@ function Gt(t, e) {
456
456
  delete this.__initialized, this.__released = !0;
457
457
  }
458
458
  attributeChangedCallback(r, o, l) {
459
- if (this.__initialized && !this.__updating[r] && (r = this.lookupProp(r), r in e)) {
459
+ if (this.__initialized && !this.__updating[r] && (r = this.lookupProp(r), r in n)) {
460
460
  if (l == null && !this[r]) return;
461
- this[r] = e[r].parse ? xt(l) : l;
461
+ this[r] = n[r].parse ? Tt(l) : l;
462
462
  }
463
463
  }
464
464
  lookupProp(r) {
465
- if (e)
466
- return n.find((o) => r === o || r === e[o].attribute);
465
+ if (n)
466
+ return e.find((o) => r === o || r === n[o].attribute);
467
467
  }
468
468
  get renderRoot() {
469
469
  return this.shadowRoot || this.attachShadow({
@@ -478,54 +478,54 @@ function Gt(t, e) {
478
478
  }
479
479
  };
480
480
  }
481
- function Xt(t, e = {}, n = {}) {
481
+ function te(t, n = {}, e = {}) {
482
482
  const {
483
483
  BaseElement: i = HTMLElement,
484
484
  extension: r,
485
485
  customElements: o = window.customElements
486
- } = n;
486
+ } = e;
487
487
  return (l) => {
488
488
  let s = o.get(t);
489
- return s ? (s.prototype.Component = l, s) : (s = Gt(i, Wt(e)), s.prototype.Component = l, s.prototype.registeredTag = t, o.define(t, s, r), s);
489
+ return s ? (s.prototype.Component = l, s) : (s = Yt(i, qt(n)), s.prototype.Component = l, s.prototype.registeredTag = t, o.define(t, s, r), s);
490
490
  };
491
491
  }
492
- function Zt(t) {
493
- const e = Object.keys(t), n = {};
494
- for (let i = 0; i < e.length; i++) {
495
- const [r, o] = yt(t[e[i]]);
496
- Object.defineProperty(n, e[i], {
492
+ function ee(t) {
493
+ const n = Object.keys(t), e = {};
494
+ for (let i = 0; i < n.length; i++) {
495
+ const [r, o] = Ct(t[n[i]]);
496
+ Object.defineProperty(e, n[i], {
497
497
  get: r,
498
498
  set(l) {
499
499
  o(() => l);
500
500
  }
501
501
  });
502
502
  }
503
- return n;
503
+ return e;
504
504
  }
505
- function Qt(t) {
505
+ function ne(t) {
506
506
  if (t.assignedSlot && t.assignedSlot._$owner) return t.assignedSlot._$owner;
507
- let e = t.parentNode;
508
- for (; e && !e._$owner && !(e.assignedSlot && e.assignedSlot._$owner); )
509
- e = e.parentNode;
510
- return e && e.assignedSlot ? e.assignedSlot._$owner : t._$owner;
511
- }
512
- function Yt(t) {
513
- return (e, n) => {
514
- const { element: i } = n;
515
- return Lt((r) => {
516
- const o = Zt(e);
507
+ let n = t.parentNode;
508
+ for (; n && !n._$owner && !(n.assignedSlot && n.assignedSlot._$owner); )
509
+ n = n.parentNode;
510
+ return n && n.assignedSlot ? n.assignedSlot._$owner : t._$owner;
511
+ }
512
+ function re(t) {
513
+ return (n, e) => {
514
+ const { element: i } = e;
515
+ return Dt((r) => {
516
+ const o = ee(n);
517
517
  i.addPropertyChangedCallback((s, a) => o[s] = a), i.addReleaseCallback(() => {
518
518
  i.renderRoot.textContent = "", r();
519
519
  });
520
- const l = t(o, n);
521
- return L(i.renderRoot, l);
522
- }, Qt(i));
520
+ const l = t(o, e);
521
+ return P(i.renderRoot, l);
522
+ }, ne(i));
523
523
  };
524
524
  }
525
- function te(t, e, n) {
526
- return arguments.length === 2 && (n = e, e = {}), Xt(t, e)(Yt(n));
525
+ function ie(t, n, e) {
526
+ return arguments.length === 2 && (e = n, n = {}), te(t, n)(re(e));
527
527
  }
528
- const ee = `
528
+ const se = `
529
529
  :host([theme="dark"]) {
530
530
  color-scheme: only dark;
531
531
  }
@@ -583,67 +583,103 @@ const ee = `
583
583
  }
584
584
  }
585
585
  `;
586
- var ne = /* @__PURE__ */ D('<div part=container class=dictate-button__container><style></style><div aria-live=polite class=dictate-button__status-announcer style="position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border-width:0"></div><button part=button class=dictate-button__button>'), re = /* @__PURE__ */ D('<svg part=icon class="dictate-button__icon dictate-button__icon--idle"fill=none viewBox="0 0 24 24"stroke-width=1.5 stroke=currentColor role=img aria-hidden=true><path stroke-linecap=round stroke-linejoin=round d="M12 18.75a6 6 0 0 0 6-6v-1.5m-6 7.5a6 6 0 0 1-6-6v-1.5m6 7.5v3.75m-3.75 0h7.5M12 15.75a3 3 0 0 1-3-3V4.5a3 3 0 1 1 6 0v8.25a3 3 0 0 1-3 3Z">'), ie = /* @__PURE__ */ D('<svg part=icon class="dictate-button__icon dictate-button__icon--recording"viewBox="0 0 24 24"fill=currentColor role=img aria-hidden=true><circle cx=12 cy=12 r=10>'), se = /* @__PURE__ */ D('<svg part=icon class="dictate-button__icon dictate-button__icon--error"viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=4 stroke-linecap=round stroke-linejoin=round role=img aria-hidden=true><line x1=12 x2=12 y1=4 y2=14></line><line x1=12 x2=12.01 y1=20 y2=20>'), oe = /* @__PURE__ */ D('<svg part=icon class="dictate-button__icon dictate-button__icon--processing"viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round role=img aria-hidden=true><path d="M12 2v4"></path><path d="M12 18v4"></path><path d="M4.93 4.93l2.83 2.83"></path><path d="M16.24 16.24l2.83 2.83"></path><path d="M2 12h4"></path><path d="M18 12h4"></path><path d="M4.93 19.07l2.83-2.83"></path><path d="M16.24 7.76l2.83-2.83">');
587
- console.debug("[dictate-button] version:", "2.0.1");
588
- const le = "wss://api.dictate-button.io/v2/transcribe", k = "dictate-button.io", rt = -70, dt = -10, pt = 0, ae = 4, ce = 0.25, ue = 0.05;
589
- customElements.get("dictate-button") ? console.debug("[dictate-button] We don't require importing the dictate-button component separately anymore, so you may remove the script tag which imports https://cdn.dictate-button.io/dictate-button.js from the HTML head.") : te("dictate-button", {
586
+ var oe = /* @__PURE__ */ z('<div part=container class=dictate-button__container><style></style><div aria-live=polite class=dictate-button__status-announcer style="position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border-width:0"></div><button part=button class=dictate-button__button>'), le = /* @__PURE__ */ z('<svg part=icon class="dictate-button__icon dictate-button__icon--idle"fill=none viewBox="0 0 24 24"stroke-width=1.5 stroke=currentColor role=img aria-hidden=true><path stroke-linecap=round stroke-linejoin=round d="M12 18.75a6 6 0 0 0 6-6v-1.5m-6 7.5a6 6 0 0 1-6-6v-1.5m6 7.5v3.75m-3.75 0h7.5M12 15.75a3 3 0 0 1-3-3V4.5a3 3 0 1 1 6 0v8.25a3 3 0 0 1-3 3Z">'), ae = /* @__PURE__ */ z('<svg part=icon class="dictate-button__icon dictate-button__icon--recording"viewBox="0 0 24 24"fill=currentColor role=img aria-hidden=true><circle cx=12 cy=12 r=10>'), ce = /* @__PURE__ */ z('<svg part=icon class="dictate-button__icon dictate-button__icon--error"viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=4 stroke-linecap=round stroke-linejoin=round role=img aria-hidden=true><line x1=12 x2=12 y1=4 y2=14></line><line x1=12 x2=12.01 y1=20 y2=20>'), ue = /* @__PURE__ */ z('<svg part=icon class="dictate-button__icon dictate-button__icon--processing"viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round role=img aria-hidden=true><path d="M12 2v4"></path><path d="M12 18v4"></path><path d="M4.93 4.93l2.83 2.83"></path><path d="M16.24 16.24l2.83 2.83"></path><path d="M2 12h4"></path><path d="M18 12h4"></path><path d="M4.93 19.07l2.83-2.83"></path><path d="M16.24 7.76l2.83-2.83">');
587
+ console.debug("[dictate-button] version:", "2.1.1");
588
+ const fe = "wss://api.dictate-button.io/v2/transcribe", A = "dictate-button.io", lt = -70, yt = -10, _t = 0, de = 4, pe = 0.25, he = 0.05;
589
+ customElements.get("dictate-button") ? console.debug("[dictate-button] We don't require importing the dictate-button component separately anymore, so you may remove the script tag which imports https://cdn.dictate-button.io/dictate-button.js from the HTML head.") : ie("dictate-button", {
590
590
  size: 30,
591
- apiEndpoint: le,
591
+ apiEndpoint: fe,
592
592
  language: "en"
593
593
  }, (t, {
594
- element: e
594
+ element: n
595
595
  }) => {
596
596
  console.debug("[dictate-button] api:", t.apiEndpoint);
597
- const [n, i] = yt("idle");
598
- let r = null, o = null, l = null, s = "", a = "", g = -1, f = "", d = null, m = null, c = null, P = null, U = !1, R = 0;
599
- const Et = (u) => u <= rt ? 0 : u >= dt ? 1 : (u - rt) / (dt - rt), At = (u) => {
597
+ const [e, i] = Ct("idle");
598
+ let r = null, o = null, l = null, s = "", a = "", g = -1, f = "", d = null, m = null, c = null, T = null, F = !1, O = 0;
599
+ const Lt = (u) => u <= lt ? 0 : u >= yt ? 1 : (u - lt) / (yt - lt), Mt = (u) => {
600
600
  let _ = 0;
601
- for (let C = 0; C < u.length; C++) {
602
- const p = (u[C] - 128) / 128;
603
- _ += p * p;
601
+ for (let v = 0; v < u.length; v++) {
602
+ const h = (u[v] - 128) / 128;
603
+ _ += h * h;
604
604
  }
605
605
  return Math.sqrt(_ / u.length);
606
- }, kt = (u) => 20 * Math.log10(Math.max(u, 1e-8)), ot = (u) => {
607
- const _ = e.shadowRoot.querySelector(".dictate-button__button");
606
+ }, Rt = (u) => 20 * Math.log10(Math.max(u, 1e-8)), ut = (u) => {
607
+ const _ = n.shadowRoot.querySelector(".dictate-button__button");
608
608
  if (!_)
609
609
  return;
610
- const C = pt + u * (ae - pt), p = 0 + u * 0.4;
611
- _.style.boxShadow = `0 0 0 ${C}px light-dark(rgba(0, 0, 0, ${p}), rgba(255, 255, 255, ${p}))`;
612
- }, lt = () => {
613
- if (!U || !m || !P) return;
614
- m.getByteTimeDomainData(P);
615
- const u = At(P), _ = kt(u), C = Et(_), p = C > R ? ce : ue;
616
- R = p * C + (1 - p) * R, ot(R), requestAnimationFrame(lt);
617
- }, O = () => {
618
- r && (r.close(), r = null), c && (c.disconnect(), c = null), o && (o.getTracks().forEach((u) => u.stop()), o = null), l = null, s = "", a = "", g = -1, f = "", U = !1, d && d.state !== "closed" && d.close(), d = null, m = null, P = null, R = 0, ot(0);
610
+ const v = _t + u * (de - _t), h = 0 + u * 0.4;
611
+ _.style.boxShadow = `0 0 0 ${v}px light-dark(rgba(0, 0, 0, ${h}), rgba(255, 255, 255, ${h}))`;
612
+ }, ft = () => {
613
+ if (!F || !m || !T) return;
614
+ m.getByteTimeDomainData(T);
615
+ const u = Mt(T), _ = Rt(u), v = Lt(_), h = v > O ? pe : he;
616
+ O = h * v + (1 - h) * O, ut(O), requestAnimationFrame(ft);
617
+ }, L = () => {
618
+ r && (r.close(), r = null), c && (c.disconnect(), c = null), o && (o.getTracks().forEach((u) => u.stop()), o = null), l = null, s = "", a = "", g = -1, f = "", F = !1, d && d.state !== "closed" && d.close(), d = null, m = null, T = null, O = 0, ut(0);
619
619
  };
620
- e.addEventListener("disconnected", O);
621
- const at = async (u) => {
622
- if (n() === "idle") {
620
+ n.addEventListener("disconnected", L);
621
+ const dt = () => {
622
+ document.visibilityState === "hidden" && e() === "transcribing" && nt();
623
+ };
624
+ document.addEventListener("visibilitychange", dt), ht(() => {
625
+ document.removeEventListener("visibilitychange", dt);
626
+ });
627
+ const pt = async (u) => {
628
+ if (e() === "idle") {
623
629
  l = u, s = "", a = "", g = -1, f = "";
624
630
  try {
625
631
  const _ = await navigator.mediaDevices.getUserMedia({
626
632
  audio: {
627
- sampleRate: 16e3,
633
+ sampleRate: {
634
+ ideal: 16e3
635
+ },
628
636
  channelCount: 1,
629
637
  echoCancellation: !0,
630
638
  noiseSuppression: !0
631
639
  }
632
640
  });
633
- o = _, d = new (window.AudioContext || window.webkitAudioContext)({
634
- sampleRate: 16e3
641
+ o = _;
642
+ const $ = _.getAudioTracks()[0].getSettings().sampleRate || 48e3;
643
+ d = new (window.AudioContext || window.webkitAudioContext)({
644
+ sampleRate: $
635
645
  });
636
- const C = d.createMediaStreamSource(_);
637
- m = d.createAnalyser(), m.fftSize = 2048, C.connect(m), P = new Uint8Array(m.fftSize);
638
- const p = `
646
+ const p = d.createMediaStreamSource(_);
647
+ m = d.createAnalyser(), m.fftSize = 2048, p.connect(m), T = new Uint8Array(m.fftSize);
648
+ const it = `
639
649
  class PcmProcessor extends AudioWorkletProcessor {
650
+ constructor(options) {
651
+ super()
652
+ this.inputSampleRate = options.processorOptions.inputSampleRate
653
+ this.outputSampleRate = 16000
654
+ this.ratio = this.inputSampleRate / this.outputSampleRate
655
+ this.buffer = []
656
+ this.bufferIndex = 0
657
+ }
658
+
640
659
  process(inputs) {
641
660
  const input = inputs[0]
642
661
  if (input.length > 0) {
643
662
  const channelData = input[0]
644
- const pcm16 = new Int16Array(channelData.length)
645
- for (let i = 0; i < channelData.length; i++) {
646
- const s = Math.max(-1, Math.min(1, channelData[i]))
663
+
664
+ // Resample to 16kHz if needed
665
+ let resampledData
666
+ if (this.ratio === 1) {
667
+ // No resampling needed
668
+ resampledData = channelData
669
+ } else {
670
+ // Simple decimation for downsampling
671
+ const outputLength = Math.floor(channelData.length / this.ratio)
672
+ resampledData = new Float32Array(outputLength)
673
+ for (let i = 0; i < outputLength; i++) {
674
+ const srcIndex = Math.floor(i * this.ratio)
675
+ resampledData[i] = channelData[srcIndex]
676
+ }
677
+ }
678
+
679
+ // Convert to PCM16
680
+ const pcm16 = new Int16Array(resampledData.length)
681
+ for (let i = 0; i < resampledData.length; i++) {
682
+ const s = Math.max(-1, Math.min(1, resampledData[i]))
647
683
  pcm16[i] = s < 0 ? s * 0x8000 : s * 0x7fff
648
684
  }
649
685
  this.port.postMessage(pcm16.buffer, [pcm16.buffer])
@@ -652,87 +688,91 @@ customElements.get("dictate-button") ? console.debug("[dictate-button] We don't
652
688
  }
653
689
  }
654
690
  registerProcessor('pcm-processor', PcmProcessor)
655
- `, F = new Blob([p], {
691
+ `, K = new Blob([it], {
656
692
  type: "application/javascript"
657
- }), h = URL.createObjectURL(F);
658
- await d.audioWorklet.addModule(h), URL.revokeObjectURL(h), c = new AudioWorkletNode(d, "pcm-processor"), C.connect(c);
659
- const W = new URL(t.apiEndpoint);
660
- t.language && W.searchParams.set("language", t.language), r = new WebSocket(W.toString()), r.onmessage = (E) => {
693
+ }), N = URL.createObjectURL(K);
694
+ await d.audioWorklet.addModule(N), URL.revokeObjectURL(N), c = new AudioWorkletNode(d, "pcm-processor", {
695
+ processorOptions: {
696
+ inputSampleRate: $
697
+ }
698
+ }), p.connect(c);
699
+ const D = new URL(t.apiEndpoint);
700
+ t.language && D.searchParams.set("language", t.language), r = new WebSocket(D.toString()), r.onmessage = (x) => {
661
701
  try {
662
- const v = JSON.parse(E.data);
663
- if (v.type === "interim_transcript" && v.text) {
664
- f = v.text;
665
- const M = [a, s, f].filter(Boolean).join(" ");
666
- A(e, "dictate-text", M);
667
- } else if (v.type === "transcript" && v.text) {
668
- const M = v.turn_order ?? 0, x = v.text;
669
- f = "", M > g ? (s && (a = a ? a + " " + s : s), g = M, s = x) : x.length > s.length && x.startsWith(s.substring(0, Math.min(10, s.length))) ? s = x : s = s ? s + " " + x : x;
670
- const Tt = a ? a + " " + s : s;
671
- A(e, "dictate-text", Tt);
672
- } else v.type === "error" && (console.error("[dictate-button] Server error:", v.error), A(e, "dictate-error", v.error), tt(), O());
673
- } catch (v) {
674
- console.error("[dictate-button] Error parsing message:", v);
702
+ const C = JSON.parse(x.data);
703
+ if (C.type === "interim_transcript" && C.text) {
704
+ f = C.text;
705
+ const V = [a, s, f].filter(Boolean).join(" ");
706
+ E(n, "dictate-text", V);
707
+ } else if (C.type === "transcript" && C.text) {
708
+ const V = C.turn_order ?? 0, M = C.text;
709
+ f = "", V > g ? (s && (a = a ? a + " " + s : s), g = V, s = M) : M.length > s.length && M.startsWith(s.substring(0, Math.min(10, s.length))) ? s = M : s = s ? s + " " + M : M;
710
+ const Ot = a ? a + " " + s : s;
711
+ E(n, "dictate-text", Ot);
712
+ } else C.type === "error" && (console.error("[dictate-button] Server error:", C.error), E(n, "dictate-error", C.error), rt(), L());
713
+ } catch (C) {
714
+ console.error("[dictate-button] Error parsing message:", C);
675
715
  }
676
- }, r.onerror = (E) => {
677
- console.error("[dictate-button] WebSocket error:", E), A(e, "dictate-error", "Connection error"), tt(), O();
716
+ }, r.onerror = (x) => {
717
+ console.error("[dictate-button] WebSocket error:", x), E(n, "dictate-error", "Connection error"), rt(), L();
678
718
  }, r.onclose = () => {
679
- }, c.port.onmessage = (E) => {
680
- r && r.readyState === WebSocket.OPEN && r.send(E.data);
681
- }, A(e, "dictate-start", "Started transcribing"), U = !0, lt(), i("transcribing");
719
+ }, c.port.onmessage = (x) => {
720
+ r && r.readyState === WebSocket.OPEN && r.send(x.data);
721
+ }, E(n, "dictate-start", "Started transcribing"), F = !0, ft(), i("transcribing");
682
722
  } catch (_) {
683
- console.error("[dictate-button] Failed to start:", _), A(e, "dictate-error", "Failed to start transcription"), tt(), O();
723
+ console.error("[dictate-button] Failed to start:", _), E(n, "dictate-error", "Failed to start transcription"), rt(), L();
684
724
  }
685
725
  }
686
- }, ct = () => {
687
- if (n() === "transcribing")
688
- if (U = !1, i("finalizing"), r && r.readyState === WebSocket.OPEN)
726
+ }, nt = () => {
727
+ if (e() === "transcribing")
728
+ if (F = !1, i("finalizing"), r && r.readyState === WebSocket.OPEN)
689
729
  r.send(JSON.stringify({
690
730
  type: "close"
691
731
  })), setTimeout(() => {
692
732
  const u = a ? a + (s ? " " + s : "") : s;
693
- u && A(e, "dictate-end", u), O(), i("idle");
733
+ u && E(n, "dictate-end", u), L(), i("idle");
694
734
  }, 500);
695
735
  else {
696
736
  const u = a ? a + (s ? " " + s : "") : s;
697
- u && A(e, "dictate-end", u), O(), i("idle");
737
+ u && E(n, "dictate-end", u), L(), i("idle");
698
738
  }
699
- }, tt = () => {
739
+ }, rt = () => {
700
740
  i("error"), setTimeout(() => i("idle"), 2e3);
701
741
  };
702
- let z;
703
- return Ot(() => {
704
- if (!z) return;
705
- const u = be(z, {
742
+ let W;
743
+ return It(() => {
744
+ if (!W) return;
745
+ const u = me(W, {
706
746
  onShortTap: () => {
707
- n() === "idle" ? at("short-tap") : n() === "transcribing" && l === "short-tap" && ct();
747
+ e() === "idle" ? pt("short-tap") : e() === "transcribing" && l === "short-tap" && nt();
708
748
  },
709
749
  onLongPressStart: () => {
710
- n() === "idle" && at("long-press");
750
+ e() === "idle" && pt("long-press");
711
751
  },
712
752
  onLongPressEnd: () => {
713
- n() === "transcribing" && l === "long-press" && ct();
753
+ e() === "transcribing" && l === "long-press" && nt();
714
754
  }
715
755
  });
716
- Rt(u);
756
+ ht(u);
717
757
  }), (() => {
718
- var u = ne(), _ = u.firstChild, C = _.nextSibling, p = C.nextSibling;
719
- L(_, ee), L(C, () => ht(n()));
720
- var F = z;
721
- return typeof F == "function" ? zt(F, p) : z = p, L(p, (() => {
722
- var h = V(() => n() === "idle");
723
- return () => h() && K(de, {});
724
- })(), null), L(p, (() => {
725
- var h = V(() => n() === "transcribing");
726
- return () => h() && K(pe, {});
727
- })(), null), L(p, (() => {
728
- var h = V(() => n() === "finalizing");
729
- return () => h() && K(ge, {});
730
- })(), null), L(p, (() => {
731
- var h = V(() => n() === "error");
732
- return () => h() && K(he, {});
733
- })(), null), J((h) => {
734
- var W = `width:${t.size}px;height:${t.size}px"`, E = fe(n()), v = ht(n()), M = n() === "transcribing", x = n() === "transcribing" || n() === "finalizing";
735
- return h.e = Ut(p, W, h.e), E !== h.t && N(p, "title", h.t = E), v !== h.a && N(p, "aria-label", h.a = v), M !== h.o && N(p, "aria-pressed", h.o = M), x !== h.i && N(p, "aria-busy", h.i = x), h;
758
+ var u = oe(), _ = u.firstChild, v = _.nextSibling, h = v.nextSibling;
759
+ P(_, se), P(v, () => wt(e()));
760
+ var $ = W;
761
+ return typeof $ == "function" ? Vt($, h) : W = h, P(h, (() => {
762
+ var p = q(() => e() === "idle");
763
+ return () => p() && H(be, {});
764
+ })(), null), P(h, (() => {
765
+ var p = q(() => e() === "transcribing");
766
+ return () => p() && H(ye, {});
767
+ })(), null), P(h, (() => {
768
+ var p = q(() => e() === "finalizing");
769
+ return () => p() && H(we, {});
770
+ })(), null), P(h, (() => {
771
+ var p = q(() => e() === "error");
772
+ return () => p() && H(_e, {});
773
+ })(), null), X((p) => {
774
+ var it = `width:${t.size}px;height:${t.size}px"`, K = ge(e()), N = wt(e()), D = e() === "transcribing", x = e() === "transcribing" || e() === "finalizing";
775
+ return p.e = Kt(h, it, p.e), K !== p.t && I(h, "title", p.t = K), N !== p.a && I(h, "aria-label", p.a = N), D !== p.o && I(h, "aria-pressed", p.o = D), x !== p.i && I(h, "aria-busy", p.i = x), p;
736
776
  }, {
737
777
  e: void 0,
738
778
  t: void 0,
@@ -742,38 +782,38 @@ customElements.get("dictate-button") ? console.debug("[dictate-button] We don't
742
782
  }), u;
743
783
  })();
744
784
  });
745
- const fe = (t) => {
785
+ const ge = (t) => {
746
786
  switch (t) {
747
787
  case "idle":
748
- return `Start dictation (${k})`;
788
+ return `Start dictation (${A})`;
749
789
  case "transcribing":
750
- return `Stop dictation (${k})`;
790
+ return `Stop dictation (${A})`;
751
791
  case "finalizing":
752
- return `Finalizing dictation (${k})`;
792
+ return `Finalizing dictation (${A})`;
753
793
  case "error":
754
- return `Click to reset (${k})`;
794
+ return `Click to reset (${A})`;
755
795
  }
756
- }, ht = (t) => {
796
+ }, wt = (t) => {
757
797
  switch (t) {
758
798
  case "idle":
759
- return `Start dictation (${k})`;
799
+ return `Start dictation (${A})`;
760
800
  case "transcribing":
761
- return `Transcribing. Click to stop (${k})`;
801
+ return `Transcribing. Click to stop (${A})`;
762
802
  case "finalizing":
763
- return `Finalizing dictation. Please wait (${k})`;
803
+ return `Finalizing dictation. Please wait (${A})`;
764
804
  case "error":
765
- return `Dictation error. Click to reset (${k})`;
805
+ return `Dictation error. Click to reset (${A})`;
766
806
  }
767
- }, A = (t, e, n) => {
768
- t.dispatchEvent(new CustomEvent(e, {
769
- detail: n,
807
+ }, E = (t, n, e) => {
808
+ t.dispatchEvent(new CustomEvent(n, {
809
+ detail: e,
770
810
  bubbles: !0,
771
811
  composed: !0
772
812
  }));
773
- }, de = () => re(), pe = () => ie(), he = () => se(), ge = () => oe();
774
- function be(t, {
775
- threshold: e = 500,
776
- preventScroll: n = !0,
813
+ }, be = () => le(), ye = () => ae(), _e = () => ce(), we = () => ue();
814
+ function me(t, {
815
+ threshold: n = 500,
816
+ preventScroll: e = !0,
777
817
  onShortTap: i,
778
818
  onLongPressStart: r,
779
819
  onLongPressEnd: o
@@ -784,7 +824,7 @@ function be(t, {
784
824
  s = !0, r?.(c), t.dispatchEvent(new CustomEvent("longpress", {
785
825
  detail: c
786
826
  }));
787
- }, e);
827
+ }, n);
788
828
  }, f = (c) => {
789
829
  l && clearTimeout(l), t.releasePointerCapture(c.pointerId), s ? (o?.(c), t.dispatchEvent(new CustomEvent("longpressend", {
790
830
  detail: c
@@ -798,7 +838,7 @@ function be(t, {
798
838
  }, m = (c) => {
799
839
  c.preventDefault(), c.stopPropagation();
800
840
  };
801
- return n && (t.style.touchAction = "none", t.addEventListener("contextmenu", a)), t.addEventListener("pointerdown", g), t.addEventListener("pointerup", f), t.addEventListener("pointercancel", d), t.addEventListener("click", m), () => {
802
- n && t.removeEventListener("contextmenu", a), t.removeEventListener("pointerdown", g), t.removeEventListener("pointerup", f), t.removeEventListener("pointercancel", d), t.removeEventListener("click", m);
841
+ return e && (t.style.touchAction = "none", t.addEventListener("contextmenu", a)), t.addEventListener("pointerdown", g), t.addEventListener("pointerup", f), t.addEventListener("pointercancel", d), t.addEventListener("click", m), () => {
842
+ e && t.removeEventListener("contextmenu", a), t.removeEventListener("pointerdown", g), t.removeEventListener("pointerup", f), t.removeEventListener("pointercancel", d), t.removeEventListener("click", m);
803
843
  };
804
844
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dictate-button",
3
- "version": "2.0.1",
3
+ "version": "2.1.1",
4
4
  "description": "Customizable Web Component that adds speech-to-text dictation capabilities to text fields",
5
5
  "keywords": [
6
6
  "custom-element",
@@ -72,7 +72,7 @@
72
72
  "vite": "^7.3.1",
73
73
  "vite-plugin-dts": "^4.5.4",
74
74
  "vite-plugin-solid": "^2.11.10",
75
- "vite-plugin-static-copy": "^3.1.4",
75
+ "vite-plugin-static-copy": "^3.1.5",
76
76
  "vitest": "^4.0.17"
77
77
  },
78
78
  "homepage": "https://github.com/dictate-button/dictate-button",