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.
- package/dist/dictate-button.js +395 -355
- package/package.json +2 -2
package/dist/dictate-button.js
CHANGED
|
@@ -1,72 +1,72 @@
|
|
|
1
|
-
const
|
|
2
|
-
equals:
|
|
1
|
+
const $t = (t, n) => t === n, J = {
|
|
2
|
+
equals: $t
|
|
3
3
|
};
|
|
4
|
-
let
|
|
5
|
-
const
|
|
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
|
|
13
|
-
function
|
|
14
|
-
const
|
|
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(() =>
|
|
19
|
+
}, s = r ? t : () => t(() => et(() => j(l)));
|
|
20
20
|
y = l, b = null;
|
|
21
21
|
try {
|
|
22
|
-
return
|
|
22
|
+
return U(s, !0);
|
|
23
23
|
} finally {
|
|
24
|
-
b =
|
|
24
|
+
b = e, y = i;
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
|
-
function
|
|
28
|
-
|
|
29
|
-
const
|
|
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:
|
|
34
|
-
}, i = (r) => (typeof r == "function" && (r = r(
|
|
35
|
-
return [
|
|
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
|
|
38
|
-
const i =
|
|
39
|
-
|
|
37
|
+
function X(t, n, e) {
|
|
38
|
+
const i = ct(t, n, !1, k);
|
|
39
|
+
B(i);
|
|
40
40
|
}
|
|
41
|
-
function
|
|
42
|
-
|
|
43
|
-
const i =
|
|
44
|
-
i.user = !0, S ? S.push(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
|
|
47
|
-
|
|
48
|
-
const i =
|
|
49
|
-
return i.observers = null, i.observerSlots = null, i.comparator =
|
|
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
|
|
51
|
+
function et(t) {
|
|
52
52
|
if (b === null) return t();
|
|
53
|
-
const
|
|
53
|
+
const n = b;
|
|
54
54
|
b = null;
|
|
55
55
|
try {
|
|
56
56
|
return t();
|
|
57
57
|
} finally {
|
|
58
|
-
b =
|
|
58
|
+
b = n;
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
|
-
function
|
|
61
|
+
function ht(t) {
|
|
62
62
|
return y === null || (y.cleanups === null ? y.cleanups = [t] : y.cleanups.push(t)), t;
|
|
63
63
|
}
|
|
64
|
-
function
|
|
64
|
+
function St() {
|
|
65
65
|
if (this.sources && this.state)
|
|
66
|
-
if (this.state ===
|
|
66
|
+
if (this.state === k) B(this);
|
|
67
67
|
else {
|
|
68
68
|
const t = w;
|
|
69
|
-
w = null,
|
|
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
|
|
77
|
+
function xt(t, n, e) {
|
|
78
78
|
let i = t.value;
|
|
79
|
-
return (!t.comparator || !t.comparator(i,
|
|
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 =
|
|
82
|
-
l &&
|
|
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)),
|
|
86
|
+
}, !1)), n;
|
|
87
87
|
}
|
|
88
|
-
function
|
|
88
|
+
function B(t) {
|
|
89
89
|
if (!t.fn) return;
|
|
90
90
|
j(t);
|
|
91
|
-
const
|
|
92
|
-
|
|
91
|
+
const n = tt;
|
|
92
|
+
Bt(t, t.value, n);
|
|
93
93
|
}
|
|
94
|
-
function
|
|
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(
|
|
99
|
+
i = t.fn(n);
|
|
100
100
|
} catch (l) {
|
|
101
|
-
return t.pure && (t.state =
|
|
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 <=
|
|
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
|
|
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:
|
|
116
|
+
value: n,
|
|
117
117
|
owner: y,
|
|
118
118
|
context: y ? y.context : null,
|
|
119
|
-
pure:
|
|
119
|
+
pure: e
|
|
120
120
|
};
|
|
121
|
-
return y === null || y !==
|
|
121
|
+
return y === null || y !== vt && (y.owned ? y.owned.push(o) : y.owned = [o]), o;
|
|
122
122
|
}
|
|
123
|
-
function
|
|
123
|
+
function Z(t) {
|
|
124
124
|
if (t.state === 0) return;
|
|
125
|
-
if (t.state ===
|
|
126
|
-
if (t.suspense &&
|
|
127
|
-
const
|
|
128
|
-
for (; (t = t.owner) && (!t.updatedAt || t.updatedAt <
|
|
129
|
-
t.state &&
|
|
130
|
-
for (let
|
|
131
|
-
if (t = e
|
|
132
|
-
|
|
133
|
-
else if (t.state ===
|
|
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,
|
|
135
|
+
w = null, U(() => Q(t, n[0]), !1), w = i;
|
|
136
136
|
}
|
|
137
137
|
}
|
|
138
|
-
function
|
|
138
|
+
function U(t, n) {
|
|
139
139
|
if (w) return t();
|
|
140
|
-
let
|
|
141
|
-
|
|
140
|
+
let e = !1;
|
|
141
|
+
n || (w = []), S ? e = !0 : S = [], tt++;
|
|
142
142
|
try {
|
|
143
143
|
const i = t();
|
|
144
|
-
return
|
|
144
|
+
return Ut(e), i;
|
|
145
145
|
} catch (i) {
|
|
146
|
-
|
|
146
|
+
e || (S = null), w = null, kt(i);
|
|
147
147
|
}
|
|
148
148
|
}
|
|
149
|
-
function
|
|
150
|
-
if (w && (
|
|
151
|
-
const
|
|
152
|
-
S = null,
|
|
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
|
|
155
|
-
for (let
|
|
154
|
+
function Et(t) {
|
|
155
|
+
for (let n = 0; n < t.length; n++) Z(t[n]);
|
|
156
156
|
}
|
|
157
|
-
function
|
|
158
|
-
let
|
|
159
|
-
for (
|
|
160
|
-
const i = t[
|
|
161
|
-
i.user ? t[
|
|
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 (
|
|
163
|
+
for (n = 0; n < e; n++) Z(t[n]);
|
|
164
164
|
}
|
|
165
|
-
function
|
|
165
|
+
function Q(t, n) {
|
|
166
166
|
t.state = 0;
|
|
167
|
-
for (let
|
|
168
|
-
const i = t.sources[
|
|
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 ===
|
|
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
|
|
176
|
-
for (let
|
|
177
|
-
const
|
|
178
|
-
|
|
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
|
|
182
|
+
let n;
|
|
183
183
|
if (t.sources)
|
|
184
184
|
for (; t.sources.length; ) {
|
|
185
|
-
const
|
|
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 =
|
|
188
|
-
i < r.length && (o.sourceSlots[l] = i, r[i] = o,
|
|
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 (
|
|
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 (
|
|
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 (
|
|
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
|
|
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
|
|
211
|
-
throw
|
|
210
|
+
function kt(t, n = y) {
|
|
211
|
+
throw Ft(t);
|
|
212
212
|
}
|
|
213
|
-
function
|
|
214
|
-
return
|
|
213
|
+
function H(t, n) {
|
|
214
|
+
return et(() => t(n || {}));
|
|
215
215
|
}
|
|
216
|
-
const
|
|
217
|
-
function
|
|
218
|
-
let i =
|
|
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 (
|
|
220
|
+
if (n[l] === e[s]) {
|
|
221
221
|
l++, s++;
|
|
222
222
|
continue;
|
|
223
223
|
}
|
|
224
|
-
for (;
|
|
224
|
+
for (; n[r - 1] === e[o - 1]; )
|
|
225
225
|
r--, o--;
|
|
226
226
|
if (r === l) {
|
|
227
|
-
const f = o < i ? s ?
|
|
228
|
-
for (; s < o; ) t.insertBefore(
|
|
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(
|
|
232
|
-
else if (
|
|
233
|
-
const f =
|
|
234
|
-
t.insertBefore(
|
|
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(
|
|
239
|
+
for (; d < o; ) g.set(e[d], d++);
|
|
240
240
|
}
|
|
241
|
-
const f = g.get(
|
|
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(
|
|
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
|
|
249
|
-
for (; s < f; ) t.insertBefore(
|
|
250
|
-
} else t.replaceChild(
|
|
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
|
|
252
|
+
else n[l++].remove();
|
|
253
253
|
}
|
|
254
254
|
}
|
|
255
255
|
}
|
|
256
|
-
function
|
|
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
|
|
265
|
-
|
|
264
|
+
function I(t, n, e) {
|
|
265
|
+
e == null ? t.removeAttribute(n) : t.setAttribute(n, e);
|
|
266
266
|
}
|
|
267
|
-
function
|
|
268
|
-
if (!
|
|
267
|
+
function Kt(t, n, e) {
|
|
268
|
+
if (!n) return e ? I(t, "style") : n;
|
|
269
269
|
const i = t.style;
|
|
270
|
-
if (typeof
|
|
271
|
-
typeof
|
|
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
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
if (
|
|
291
|
-
|
|
292
|
-
|
|
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 =
|
|
295
|
-
s && s.nodeType === 3 ? s.data !==
|
|
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
|
-
|
|
298
|
-
} else if (
|
|
299
|
-
|
|
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
|
|
303
|
-
let s =
|
|
302
|
+
return X(() => {
|
|
303
|
+
let s = n();
|
|
304
304
|
for (; typeof s == "function"; ) s = s();
|
|
305
|
-
|
|
306
|
-
}), () =>
|
|
307
|
-
if (Array.isArray(
|
|
308
|
-
const s = [], a =
|
|
309
|
-
if (
|
|
310
|
-
return
|
|
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 (
|
|
313
|
-
} else a ?
|
|
314
|
-
|
|
315
|
-
} else if (
|
|
316
|
-
if (Array.isArray(
|
|
317
|
-
if (l) return
|
|
318
|
-
|
|
319
|
-
} else
|
|
320
|
-
|
|
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
|
|
323
|
+
return e;
|
|
324
324
|
}
|
|
325
|
-
function
|
|
325
|
+
function at(t, n, e, i) {
|
|
326
326
|
let r = !1;
|
|
327
|
-
for (let o = 0, l =
|
|
328
|
-
let s =
|
|
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 =
|
|
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 =
|
|
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
|
|
347
|
-
for (let i = 0, r =
|
|
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
|
|
350
|
-
if (
|
|
349
|
+
function R(t, n, e, i) {
|
|
350
|
+
if (e === void 0) return t.textContent = "";
|
|
351
351
|
const r = i || document.createTextNode("");
|
|
352
|
-
if (
|
|
352
|
+
if (n.length) {
|
|
353
353
|
let o = !1;
|
|
354
|
-
for (let l =
|
|
355
|
-
const s =
|
|
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,
|
|
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,
|
|
361
|
+
} else t.insertBefore(r, e);
|
|
362
362
|
return [r];
|
|
363
363
|
}
|
|
364
|
-
function
|
|
365
|
-
return Object.keys(t).reduce((
|
|
364
|
+
function Ht(t) {
|
|
365
|
+
return Object.keys(t).reduce((e, i) => {
|
|
366
366
|
const r = t[i];
|
|
367
|
-
return
|
|
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
|
|
371
|
-
return t ? Object.keys(t).reduce((
|
|
370
|
+
function qt(t) {
|
|
371
|
+
return t ? Object.keys(t).reduce((e, i) => {
|
|
372
372
|
const r = t[i];
|
|
373
|
-
return
|
|
373
|
+
return e[i] = Pt(r) && "value" in r ? r : {
|
|
374
374
|
value: r
|
|
375
|
-
},
|
|
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
|
|
379
|
-
return Object.keys(t).reduce((
|
|
378
|
+
function Jt(t) {
|
|
379
|
+
return Object.keys(t).reduce((e, i) => (e[i] = t[i].value, e), {});
|
|
380
380
|
}
|
|
381
|
-
function
|
|
382
|
-
const
|
|
383
|
-
return Object.keys(
|
|
384
|
-
const o =
|
|
385
|
-
l != null && (o.value = o.parse ?
|
|
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 &&
|
|
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
|
-
}),
|
|
398
|
+
}), e;
|
|
399
399
|
}
|
|
400
|
-
function
|
|
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
|
|
409
|
-
if (
|
|
410
|
-
let r = i ? JSON.stringify(
|
|
411
|
-
t.__updating[
|
|
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
|
|
414
|
-
return t.replace(/\.?([A-Z]+)/g, (
|
|
413
|
+
function Xt(t) {
|
|
414
|
+
return t.replace(/\.?([A-Z]+)/g, (n, e) => "-" + e.toLowerCase()).replace("_", "-").replace(/^-/, "");
|
|
415
415
|
}
|
|
416
|
-
function
|
|
416
|
+
function Pt(t) {
|
|
417
417
|
return t != null && (typeof t == "object" || typeof t == "function");
|
|
418
418
|
}
|
|
419
|
-
function
|
|
419
|
+
function Zt(t) {
|
|
420
420
|
return Object.prototype.toString.call(t) === "[object Function]";
|
|
421
421
|
}
|
|
422
|
-
function
|
|
422
|
+
function Qt(t) {
|
|
423
423
|
return typeof t == "function" && t.toString().indexOf("class") === 0;
|
|
424
424
|
}
|
|
425
|
-
let
|
|
426
|
-
function
|
|
427
|
-
const
|
|
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
|
|
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
|
|
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 =
|
|
440
|
-
const r =
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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] =
|
|
461
|
+
this[r] = n[r].parse ? Tt(l) : l;
|
|
462
462
|
}
|
|
463
463
|
}
|
|
464
464
|
lookupProp(r) {
|
|
465
|
-
if (
|
|
466
|
-
return
|
|
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
|
|
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
|
-
} =
|
|
486
|
+
} = e;
|
|
487
487
|
return (l) => {
|
|
488
488
|
let s = o.get(t);
|
|
489
|
-
return s ? (s.prototype.Component = l, s) : (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
|
|
493
|
-
const
|
|
494
|
-
for (let i = 0; i <
|
|
495
|
-
const [r, o] =
|
|
496
|
-
Object.defineProperty(
|
|
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
|
|
503
|
+
return e;
|
|
504
504
|
}
|
|
505
|
-
function
|
|
505
|
+
function ne(t) {
|
|
506
506
|
if (t.assignedSlot && t.assignedSlot._$owner) return t.assignedSlot._$owner;
|
|
507
|
-
let
|
|
508
|
-
for (;
|
|
509
|
-
|
|
510
|
-
return
|
|
511
|
-
}
|
|
512
|
-
function
|
|
513
|
-
return (
|
|
514
|
-
const { element: i } =
|
|
515
|
-
return
|
|
516
|
-
const o =
|
|
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,
|
|
521
|
-
return
|
|
522
|
-
},
|
|
520
|
+
const l = t(o, e);
|
|
521
|
+
return P(i.renderRoot, l);
|
|
522
|
+
}, ne(i));
|
|
523
523
|
};
|
|
524
524
|
}
|
|
525
|
-
function
|
|
526
|
-
return arguments.length === 2 && (
|
|
525
|
+
function ie(t, n, e) {
|
|
526
|
+
return arguments.length === 2 && (e = n, n = {}), te(t, n)(re(e));
|
|
527
527
|
}
|
|
528
|
-
const
|
|
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
|
|
587
|
-
console.debug("[dictate-button] version:", "2.
|
|
588
|
-
const
|
|
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.") :
|
|
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:
|
|
591
|
+
apiEndpoint: fe,
|
|
592
592
|
language: "en"
|
|
593
593
|
}, (t, {
|
|
594
|
-
element:
|
|
594
|
+
element: n
|
|
595
595
|
}) => {
|
|
596
596
|
console.debug("[dictate-button] api:", t.apiEndpoint);
|
|
597
|
-
const [
|
|
598
|
-
let r = null, o = null, l = null, s = "", a = "", g = -1, f = "", d = null, m = null, c = null,
|
|
599
|
-
const
|
|
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
|
|
602
|
-
const
|
|
603
|
-
_ +=
|
|
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
|
-
},
|
|
607
|
-
const _ =
|
|
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
|
|
611
|
-
_.style.boxShadow = `0 0 0 ${
|
|
612
|
-
},
|
|
613
|
-
if (!
|
|
614
|
-
m.getByteTimeDomainData(
|
|
615
|
-
const u =
|
|
616
|
-
|
|
617
|
-
},
|
|
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 = "",
|
|
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
|
-
|
|
621
|
-
const
|
|
622
|
-
|
|
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:
|
|
633
|
+
sampleRate: {
|
|
634
|
+
ideal: 16e3
|
|
635
|
+
},
|
|
628
636
|
channelCount: 1,
|
|
629
637
|
echoCancellation: !0,
|
|
630
638
|
noiseSuppression: !0
|
|
631
639
|
}
|
|
632
640
|
});
|
|
633
|
-
o = _
|
|
634
|
-
|
|
641
|
+
o = _;
|
|
642
|
+
const $ = _.getAudioTracks()[0].getSettings().sampleRate || 48e3;
|
|
643
|
+
d = new (window.AudioContext || window.webkitAudioContext)({
|
|
644
|
+
sampleRate: $
|
|
635
645
|
});
|
|
636
|
-
const
|
|
637
|
-
m = d.createAnalyser(), m.fftSize = 2048,
|
|
638
|
-
const
|
|
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
|
-
|
|
645
|
-
|
|
646
|
-
|
|
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
|
-
`,
|
|
691
|
+
`, K = new Blob([it], {
|
|
656
692
|
type: "application/javascript"
|
|
657
|
-
}),
|
|
658
|
-
await d.audioWorklet.addModule(
|
|
659
|
-
|
|
660
|
-
|
|
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
|
|
663
|
-
if (
|
|
664
|
-
f =
|
|
665
|
-
const
|
|
666
|
-
|
|
667
|
-
} else if (
|
|
668
|
-
const
|
|
669
|
-
f = "",
|
|
670
|
-
const
|
|
671
|
-
|
|
672
|
-
} else
|
|
673
|
-
} catch (
|
|
674
|
-
console.error("[dictate-button] Error parsing message:",
|
|
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 = (
|
|
677
|
-
console.error("[dictate-button] WebSocket error:",
|
|
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 = (
|
|
680
|
-
r && r.readyState === WebSocket.OPEN && r.send(
|
|
681
|
-
},
|
|
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:", _),
|
|
723
|
+
console.error("[dictate-button] Failed to start:", _), E(n, "dictate-error", "Failed to start transcription"), rt(), L();
|
|
684
724
|
}
|
|
685
725
|
}
|
|
686
|
-
},
|
|
687
|
-
if (
|
|
688
|
-
if (
|
|
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 &&
|
|
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 &&
|
|
737
|
+
u && E(n, "dictate-end", u), L(), i("idle");
|
|
698
738
|
}
|
|
699
|
-
},
|
|
739
|
+
}, rt = () => {
|
|
700
740
|
i("error"), setTimeout(() => i("idle"), 2e3);
|
|
701
741
|
};
|
|
702
|
-
let
|
|
703
|
-
return
|
|
704
|
-
if (!
|
|
705
|
-
const u =
|
|
742
|
+
let W;
|
|
743
|
+
return It(() => {
|
|
744
|
+
if (!W) return;
|
|
745
|
+
const u = me(W, {
|
|
706
746
|
onShortTap: () => {
|
|
707
|
-
|
|
747
|
+
e() === "idle" ? pt("short-tap") : e() === "transcribing" && l === "short-tap" && nt();
|
|
708
748
|
},
|
|
709
749
|
onLongPressStart: () => {
|
|
710
|
-
|
|
750
|
+
e() === "idle" && pt("long-press");
|
|
711
751
|
},
|
|
712
752
|
onLongPressEnd: () => {
|
|
713
|
-
|
|
753
|
+
e() === "transcribing" && l === "long-press" && nt();
|
|
714
754
|
}
|
|
715
755
|
});
|
|
716
|
-
|
|
756
|
+
ht(u);
|
|
717
757
|
}), (() => {
|
|
718
|
-
var u =
|
|
719
|
-
|
|
720
|
-
var
|
|
721
|
-
return typeof
|
|
722
|
-
var
|
|
723
|
-
return () =>
|
|
724
|
-
})(), null),
|
|
725
|
-
var
|
|
726
|
-
return () =>
|
|
727
|
-
})(), null),
|
|
728
|
-
var
|
|
729
|
-
return () =>
|
|
730
|
-
})(), null),
|
|
731
|
-
var
|
|
732
|
-
return () =>
|
|
733
|
-
})(), null),
|
|
734
|
-
var
|
|
735
|
-
return
|
|
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
|
|
785
|
+
const ge = (t) => {
|
|
746
786
|
switch (t) {
|
|
747
787
|
case "idle":
|
|
748
|
-
return `Start dictation (${
|
|
788
|
+
return `Start dictation (${A})`;
|
|
749
789
|
case "transcribing":
|
|
750
|
-
return `Stop dictation (${
|
|
790
|
+
return `Stop dictation (${A})`;
|
|
751
791
|
case "finalizing":
|
|
752
|
-
return `Finalizing dictation (${
|
|
792
|
+
return `Finalizing dictation (${A})`;
|
|
753
793
|
case "error":
|
|
754
|
-
return `Click to reset (${
|
|
794
|
+
return `Click to reset (${A})`;
|
|
755
795
|
}
|
|
756
|
-
},
|
|
796
|
+
}, wt = (t) => {
|
|
757
797
|
switch (t) {
|
|
758
798
|
case "idle":
|
|
759
|
-
return `Start dictation (${
|
|
799
|
+
return `Start dictation (${A})`;
|
|
760
800
|
case "transcribing":
|
|
761
|
-
return `Transcribing. Click to stop (${
|
|
801
|
+
return `Transcribing. Click to stop (${A})`;
|
|
762
802
|
case "finalizing":
|
|
763
|
-
return `Finalizing dictation. Please wait (${
|
|
803
|
+
return `Finalizing dictation. Please wait (${A})`;
|
|
764
804
|
case "error":
|
|
765
|
-
return `Dictation error. Click to reset (${
|
|
805
|
+
return `Dictation error. Click to reset (${A})`;
|
|
766
806
|
}
|
|
767
|
-
},
|
|
768
|
-
t.dispatchEvent(new CustomEvent(
|
|
769
|
-
detail:
|
|
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
|
-
},
|
|
774
|
-
function
|
|
775
|
-
threshold:
|
|
776
|
-
preventScroll:
|
|
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
|
-
},
|
|
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
|
|
802
|
-
|
|
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.
|
|
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.
|
|
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",
|