@ghchinoy/lit-audio-ui 0.5.1 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/custom-elements.json +134 -60
  2. package/dist/components/atoms/ui-audio-next-button.js +9 -13
  3. package/dist/components/atoms/ui-audio-play-button.js +10 -14
  4. package/dist/components/atoms/ui-audio-player-error.js +10 -14
  5. package/dist/components/atoms/ui-audio-prev-button.js +9 -13
  6. package/dist/components/atoms/ui-audio-progress-slider.js +16 -20
  7. package/dist/components/atoms/ui-audio-time-display.js +15 -19
  8. package/dist/components/atoms/ui-audio-volume-slider.js +17 -21
  9. package/dist/components/atoms/ui-speech-cancel-button.js +5 -5
  10. package/dist/components/atoms/ui-speech-record-button.js +5 -5
  11. package/dist/components/atoms/ui-timed-text.js +14 -18
  12. package/dist/components/atoms/ui-voice-waveform.js +15 -19
  13. package/dist/components/molecules/ui-live-waveform.js +33 -32
  14. package/dist/components/molecules/ui-mic-selector.js +14 -18
  15. package/dist/components/molecules/ui-playlist.js +15 -19
  16. package/dist/components/molecules/ui-scrolling-waveform.js +30 -29
  17. package/dist/components/molecules/ui-spectrum-visualizer.js +23 -25
  18. package/dist/components/molecules/ui-speech-preview.js +16 -20
  19. package/dist/components/molecules/ui-voice-button.js +25 -29
  20. package/dist/components/molecules/ui-voice-picker.js +21 -25
  21. package/dist/components/molecules/ui-voice-pill.js +5 -5
  22. package/dist/components/molecules/ui-waveform.js +46 -36
  23. package/dist/components/organisms/ui-audio-player.js +7 -11
  24. package/dist/components/providers/ui-audio-provider.js +17 -22
  25. package/dist/components/providers/ui-speech-provider.js +13 -17
  26. package/dist/index.js +36 -36
  27. package/dist/node_modules/@chenglou/pretext/dist/analysis.js +456 -0
  28. package/dist/node_modules/@chenglou/pretext/dist/bidi.js +62 -0
  29. package/dist/node_modules/@chenglou/pretext/dist/layout.js +190 -0
  30. package/dist/node_modules/@chenglou/pretext/dist/line-break.js +234 -0
  31. package/dist/node_modules/@chenglou/pretext/dist/measurement.js +106 -0
  32. package/dist/scream-audio-ui.umd.js +45 -42
  33. package/dist/src/components/molecules/ui-waveform.d.ts +7 -1
  34. package/dist/src/components/providers/ui-audio-provider.d.ts +2 -1
  35. package/dist/src/utils/audio-context.d.ts +0 -1
  36. package/dist/src/utils/audio-utils.d.ts +8 -0
  37. package/dist/standalone/scream-audio-ui.standalone.js +2626 -1655
  38. package/dist/tsconfig.tsbuildinfo +1 -1
  39. package/dist/utils/audio-utils.js +27 -16
  40. package/package.json +7 -4
@@ -0,0 +1,456 @@
1
+ var e = /[ \t\n\r\f]+/g, t = /[\t\n\r\f]| {2,}|^ | $/;
2
+ function n(e) {
3
+ let t = e ?? "normal";
4
+ return t === "pre-wrap" ? {
5
+ mode: t,
6
+ preserveOrdinarySpaces: !0,
7
+ preserveHardBreaks: !0
8
+ } : {
9
+ mode: t,
10
+ preserveOrdinarySpaces: !1,
11
+ preserveHardBreaks: !1
12
+ };
13
+ }
14
+ function r(n) {
15
+ if (!t.test(n)) return n;
16
+ let r = n.replace(e, " ");
17
+ return r.charCodeAt(0) === 32 && (r = r.slice(1)), r.length > 0 && r.charCodeAt(r.length - 1) === 32 && (r = r.slice(0, -1)), r;
18
+ }
19
+ function i(e) {
20
+ return /[\r\f]/.test(e) ? e.replace(/\r\n/g, "\n").replace(/[\r\f]/g, "\n") : e.replace(/\r\n/g, "\n");
21
+ }
22
+ var a = null, o;
23
+ function s() {
24
+ return a === null && (a = new Intl.Segmenter(o, { granularity: "word" })), a;
25
+ }
26
+ function c() {
27
+ a = null;
28
+ }
29
+ var l = /\p{Script=Arabic}/u, u = /\p{M}/u, d = /\p{Nd}/u;
30
+ function f(e) {
31
+ return l.test(e);
32
+ }
33
+ function p(e) {
34
+ for (let t of e) {
35
+ let e = t.codePointAt(0);
36
+ if (e >= 19968 && e <= 40959 || e >= 13312 && e <= 19903 || e >= 131072 && e <= 173791 || e >= 173824 && e <= 177983 || e >= 177984 && e <= 178207 || e >= 178208 && e <= 183983 || e >= 183984 && e <= 191471 || e >= 196608 && e <= 201551 || e >= 63744 && e <= 64255 || e >= 194560 && e <= 195103 || e >= 12288 && e <= 12351 || e >= 12352 && e <= 12447 || e >= 12448 && e <= 12543 || e >= 44032 && e <= 55215 || e >= 65280 && e <= 65519) return !0;
37
+ }
38
+ return !1;
39
+ }
40
+ const m = new Set(/* @__PURE__ */ ",...!.:.;.?.、.。.・.).〕.〉.》.」.』.】.〗.〙.〛.ー.々.〻.ゝ.ゞ.ヽ.ヾ".split(".")), h = new Set([
41
+ "\"",
42
+ "(",
43
+ "[",
44
+ "{",
45
+ "“",
46
+ "‘",
47
+ "«",
48
+ "‹",
49
+ "(",
50
+ "〔",
51
+ "〈",
52
+ "《",
53
+ "「",
54
+ "『",
55
+ "【",
56
+ "〖",
57
+ "〘",
58
+ "〚"
59
+ ]);
60
+ var g = new Set(["'", "’"]);
61
+ const _ = new Set(/* @__PURE__ */ ".(,(!(?(:(;(،(؛(؟(।(॥(၊(။(၌(၍(၏()(](}(%(\"(”(’(»(›(…".split("("));
62
+ var v = new Set([
63
+ ":",
64
+ ".",
65
+ "،",
66
+ "؛"
67
+ ]), y = new Set(["၏"]), b = new Set([
68
+ "”",
69
+ "’",
70
+ "»",
71
+ "›",
72
+ "」",
73
+ "』",
74
+ "】",
75
+ "》",
76
+ "〉",
77
+ "〕",
78
+ ")"
79
+ ]);
80
+ function x(e) {
81
+ if (w(e)) return !0;
82
+ let t = !1;
83
+ for (let n of e) {
84
+ if (_.has(n)) {
85
+ t = !0;
86
+ continue;
87
+ }
88
+ if (!(t && u.test(n))) return !1;
89
+ }
90
+ return t;
91
+ }
92
+ function S(e) {
93
+ for (let t of e) if (!m.has(t) && !_.has(t)) return !1;
94
+ return e.length > 0;
95
+ }
96
+ function C(e) {
97
+ if (w(e)) return !0;
98
+ for (let t of e) if (!h.has(t) && !g.has(t) && !u.test(t)) return !1;
99
+ return e.length > 0;
100
+ }
101
+ function w(e) {
102
+ let t = !1;
103
+ for (let n of e) if (!(n === "\\" || u.test(n))) {
104
+ if (h.has(n) || _.has(n) || g.has(n)) {
105
+ t = !0;
106
+ continue;
107
+ }
108
+ return !1;
109
+ }
110
+ return t;
111
+ }
112
+ function T(e) {
113
+ let t = Array.from(e), n = t.length;
114
+ for (; n > 0;) {
115
+ let e = t[n - 1];
116
+ if (u.test(e)) {
117
+ n--;
118
+ continue;
119
+ }
120
+ if (h.has(e) || g.has(e)) {
121
+ n--;
122
+ continue;
123
+ }
124
+ break;
125
+ }
126
+ return n <= 0 || n === t.length ? null : {
127
+ head: t.slice(0, n).join(""),
128
+ tail: t.slice(n).join("")
129
+ };
130
+ }
131
+ function E(e, t) {
132
+ if (e.length === 0) return !1;
133
+ for (let n of e) if (n !== t) return !1;
134
+ return !0;
135
+ }
136
+ function D(e) {
137
+ return !f(e) || e.length === 0 ? !1 : v.has(e[e.length - 1]);
138
+ }
139
+ function O(e) {
140
+ return e.length === 0 ? !1 : y.has(e[e.length - 1]);
141
+ }
142
+ function k(e) {
143
+ if (e.length < 2 || e[0] !== " ") return null;
144
+ let t = e.slice(1);
145
+ return /^\p{M}+$/u.test(t) ? {
146
+ space: " ",
147
+ marks: t
148
+ } : null;
149
+ }
150
+ function A(e) {
151
+ for (let t = e.length - 1; t >= 0; t--) {
152
+ let n = e[t];
153
+ if (b.has(n)) return !0;
154
+ if (!_.has(n)) return !1;
155
+ }
156
+ return !1;
157
+ }
158
+ function j(e, t) {
159
+ if (t.preserveOrdinarySpaces || t.preserveHardBreaks) {
160
+ if (e === " ") return "preserved-space";
161
+ if (e === " ") return "tab";
162
+ if (t.preserveHardBreaks && e === "\n") return "hard-break";
163
+ }
164
+ return e === " " ? "space" : e === "\xA0" || e === " " || e === "⁠" || e === "" ? "glue" : e === "​" ? "zero-width-break" : e === "­" ? "soft-hyphen" : "text";
165
+ }
166
+ function M(e) {
167
+ return e.length === 1 ? e[0] : e.join("");
168
+ }
169
+ function N(e, t, n, r) {
170
+ let i = [], a = null, o = [], s = n, c = !1, l = 0;
171
+ for (let u of e) {
172
+ let e = j(u, r), d = e === "text" && t;
173
+ if (a !== null && e === a && d === c) {
174
+ o.push(u), l += u.length;
175
+ continue;
176
+ }
177
+ a !== null && i.push({
178
+ text: M(o),
179
+ isWordLike: c,
180
+ kind: a,
181
+ start: s
182
+ }), a = e, o = [u], s = n + l, c = d, l += u.length;
183
+ }
184
+ return a !== null && i.push({
185
+ text: M(o),
186
+ isWordLike: c,
187
+ kind: a,
188
+ start: s
189
+ }), i;
190
+ }
191
+ function P(e) {
192
+ return e === "space" || e === "preserved-space" || e === "zero-width-break" || e === "hard-break";
193
+ }
194
+ var F = /^[A-Za-z][A-Za-z0-9+.-]*:$/;
195
+ function I(e, t) {
196
+ let n = e.texts[t];
197
+ return n.startsWith("www.") ? !0 : F.test(n) && t + 1 < e.len && e.kinds[t + 1] === "text" && e.texts[t + 1] === "//";
198
+ }
199
+ function L(e) {
200
+ return e.includes("?") && (e.includes("://") || e.startsWith("www."));
201
+ }
202
+ function R(e) {
203
+ let t = e.texts.slice(), n = e.isWordLike.slice(), r = e.kinds.slice(), i = e.starts.slice();
204
+ for (let i = 0; i < e.len; i++) {
205
+ if (r[i] !== "text" || !I(e, i)) continue;
206
+ let a = [t[i]], o = i + 1;
207
+ for (; o < e.len && !P(r[o]);) {
208
+ a.push(t[o]), n[i] = !0;
209
+ let e = t[o].includes("?");
210
+ if (r[o] = "text", t[o] = "", o++, e) break;
211
+ }
212
+ t[i] = M(a);
213
+ }
214
+ let a = 0;
215
+ for (let e = 0; e < t.length; e++) {
216
+ let o = t[e];
217
+ o.length !== 0 && (a !== e && (t[a] = o, n[a] = n[e], r[a] = r[e], i[a] = i[e]), a++);
218
+ }
219
+ return t.length = a, n.length = a, r.length = a, i.length = a, {
220
+ len: a,
221
+ texts: t,
222
+ isWordLike: n,
223
+ kinds: r,
224
+ starts: i
225
+ };
226
+ }
227
+ function z(e) {
228
+ let t = [], n = [], r = [], i = [];
229
+ for (let a = 0; a < e.len; a++) {
230
+ let o = e.texts[a];
231
+ if (t.push(o), n.push(e.isWordLike[a]), r.push(e.kinds[a]), i.push(e.starts[a]), !L(o)) continue;
232
+ let s = a + 1;
233
+ if (s >= e.len || P(e.kinds[s])) continue;
234
+ let c = [], l = e.starts[s], u = s;
235
+ for (; u < e.len && !P(e.kinds[u]);) c.push(e.texts[u]), u++;
236
+ c.length > 0 && (t.push(M(c)), n.push(!0), r.push("text"), i.push(l), a = u - 1);
237
+ }
238
+ return {
239
+ len: t.length,
240
+ texts: t,
241
+ isWordLike: n,
242
+ kinds: r,
243
+ starts: i
244
+ };
245
+ }
246
+ var B = new Set([
247
+ ":",
248
+ "-",
249
+ "/",
250
+ "×",
251
+ ",",
252
+ ".",
253
+ "+",
254
+ "–",
255
+ "—"
256
+ ]), V = /^[A-Za-z0-9_]+[,:;]*$/, H = /[,:;]+$/;
257
+ function U(e) {
258
+ for (let t of e) if (d.test(t)) return !0;
259
+ return !1;
260
+ }
261
+ function W(e) {
262
+ if (e.length === 0) return !1;
263
+ for (let t of e) if (!(d.test(t) || B.has(t))) return !1;
264
+ return !0;
265
+ }
266
+ function G(e) {
267
+ let t = [], n = [], r = [], i = [];
268
+ for (let a = 0; a < e.len; a++) {
269
+ let o = e.texts[a], s = e.kinds[a];
270
+ if (s === "text" && W(o) && U(o)) {
271
+ let s = [o], c = a + 1;
272
+ for (; c < e.len && e.kinds[c] === "text" && W(e.texts[c]);) s.push(e.texts[c]), c++;
273
+ t.push(M(s)), n.push(!0), r.push("text"), i.push(e.starts[a]), a = c - 1;
274
+ continue;
275
+ }
276
+ t.push(o), n.push(e.isWordLike[a]), r.push(s), i.push(e.starts[a]);
277
+ }
278
+ return {
279
+ len: t.length,
280
+ texts: t,
281
+ isWordLike: n,
282
+ kinds: r,
283
+ starts: i
284
+ };
285
+ }
286
+ function K(e) {
287
+ let t = [], n = [], r = [], i = [];
288
+ for (let a = 0; a < e.len; a++) {
289
+ let o = e.texts[a], s = e.kinds[a], c = e.isWordLike[a];
290
+ if (s === "text" && c && V.test(o)) {
291
+ let s = [o], c = H.test(o), l = a + 1;
292
+ for (; c && l < e.len && e.kinds[l] === "text" && e.isWordLike[l] && V.test(e.texts[l]);) {
293
+ let t = e.texts[l];
294
+ s.push(t), c = H.test(t), l++;
295
+ }
296
+ t.push(M(s)), n.push(!0), r.push("text"), i.push(e.starts[a]), a = l - 1;
297
+ continue;
298
+ }
299
+ t.push(o), n.push(c), r.push(s), i.push(e.starts[a]);
300
+ }
301
+ return {
302
+ len: t.length,
303
+ texts: t,
304
+ isWordLike: n,
305
+ kinds: r,
306
+ starts: i
307
+ };
308
+ }
309
+ function q(e) {
310
+ let t = [], n = [], r = [], i = [];
311
+ for (let a = 0; a < e.len; a++) {
312
+ let o = e.texts[a];
313
+ if (e.kinds[a] === "text" && o.includes("-")) {
314
+ let s = o.split("-"), c = s.length > 1;
315
+ for (let e = 0; e < s.length; e++) {
316
+ let t = s[e];
317
+ if (!c) break;
318
+ (t.length === 0 || !U(t) || !W(t)) && (c = !1);
319
+ }
320
+ if (c) {
321
+ let o = 0;
322
+ for (let c = 0; c < s.length; c++) {
323
+ let l = s[c], u = c < s.length - 1 ? `${l}-` : l;
324
+ t.push(u), n.push(!0), r.push("text"), i.push(e.starts[a] + o), o += u.length;
325
+ }
326
+ continue;
327
+ }
328
+ }
329
+ t.push(o), n.push(e.isWordLike[a]), r.push(e.kinds[a]), i.push(e.starts[a]);
330
+ }
331
+ return {
332
+ len: t.length,
333
+ texts: t,
334
+ isWordLike: n,
335
+ kinds: r,
336
+ starts: i
337
+ };
338
+ }
339
+ function J(e) {
340
+ let t = [], n = [], r = [], i = [], a = 0;
341
+ for (; a < e.len;) {
342
+ let o = [e.texts[a]], s = e.isWordLike[a], c = e.kinds[a], l = e.starts[a];
343
+ if (c === "glue") {
344
+ let u = [o[0]], d = l;
345
+ for (a++; a < e.len && e.kinds[a] === "glue";) u.push(e.texts[a]), a++;
346
+ let f = M(u);
347
+ if (a < e.len && e.kinds[a] === "text") o[0] = f, o.push(e.texts[a]), s = e.isWordLike[a], c = "text", l = d, a++;
348
+ else {
349
+ t.push(f), n.push(!1), r.push("glue"), i.push(d);
350
+ continue;
351
+ }
352
+ } else a++;
353
+ if (c === "text") for (; a < e.len && e.kinds[a] === "glue";) {
354
+ let t = [];
355
+ for (; a < e.len && e.kinds[a] === "glue";) t.push(e.texts[a]), a++;
356
+ let n = M(t);
357
+ if (a < e.len && e.kinds[a] === "text") {
358
+ o.push(n, e.texts[a]), s ||= e.isWordLike[a], a++;
359
+ continue;
360
+ }
361
+ o.push(n);
362
+ }
363
+ t.push(M(o)), n.push(s), r.push(c), i.push(l);
364
+ }
365
+ return {
366
+ len: t.length,
367
+ texts: t,
368
+ isWordLike: n,
369
+ kinds: r,
370
+ starts: i
371
+ };
372
+ }
373
+ function Y(e) {
374
+ let t = e.texts.slice(), n = e.isWordLike.slice(), r = e.kinds.slice(), i = e.starts.slice();
375
+ for (let e = 0; e < t.length - 1; e++) {
376
+ if (r[e] !== "text" || r[e + 1] !== "text" || !p(t[e]) || !p(t[e + 1])) continue;
377
+ let n = T(t[e]);
378
+ n !== null && (t[e] = n.head, t[e + 1] = n.tail + t[e + 1], i[e + 1] = i[e] + n.head.length);
379
+ }
380
+ return {
381
+ len: t.length,
382
+ texts: t,
383
+ isWordLike: n,
384
+ kinds: r,
385
+ starts: i
386
+ };
387
+ }
388
+ function X(e, t, n) {
389
+ let r = s(), i = 0, a = [], o = [], c = [], l = [];
390
+ for (let s of r.segment(e)) for (let e of N(s.segment, s.isWordLike ?? !1, s.index, n)) {
391
+ let n = e.kind === "text";
392
+ t.carryCJKAfterClosingQuote && n && i > 0 && c[i - 1] === "text" && p(e.text) && p(a[i - 1]) && A(a[i - 1]) || n && i > 0 && c[i - 1] === "text" && S(e.text) && p(a[i - 1]) || n && i > 0 && c[i - 1] === "text" && O(a[i - 1]) ? (a[i - 1] += e.text, o[i - 1] = o[i - 1] || e.isWordLike) : n && i > 0 && c[i - 1] === "text" && e.isWordLike && f(e.text) && D(a[i - 1]) ? (a[i - 1] += e.text, o[i - 1] = !0) : n && !e.isWordLike && i > 0 && c[i - 1] === "text" && e.text.length === 1 && e.text !== "-" && e.text !== "—" && E(a[i - 1], e.text) || n && !e.isWordLike && i > 0 && c[i - 1] === "text" && (x(e.text) || e.text === "-" && o[i - 1]) ? a[i - 1] += e.text : (a[i] = e.text, o[i] = e.isWordLike, c[i] = e.kind, l[i] = e.start, i++);
393
+ }
394
+ for (let e = 1; e < i; e++) c[e] === "text" && !o[e] && w(a[e]) && c[e - 1] === "text" && (a[e - 1] += a[e], o[e - 1] = o[e - 1] || o[e], a[e] = "");
395
+ for (let e = i - 2; e >= 0; e--) if (c[e] === "text" && !o[e] && C(a[e])) {
396
+ let t = e + 1;
397
+ for (; t < i && a[t] === "";) t++;
398
+ t < i && c[t] === "text" && (a[t] = a[e] + a[t], l[t] = l[e], a[e] = "");
399
+ }
400
+ let u = 0;
401
+ for (let e = 0; e < i; e++) {
402
+ let t = a[e];
403
+ t.length !== 0 && (u !== e && (a[u] = t, o[u] = o[e], c[u] = c[e], l[u] = l[e]), u++);
404
+ }
405
+ a.length = u, o.length = u, c.length = u, l.length = u;
406
+ let d = Y(K(q(G(z(R(J({
407
+ len: u,
408
+ texts: a,
409
+ isWordLike: o,
410
+ kinds: c,
411
+ starts: l
412
+ })))))));
413
+ for (let e = 0; e < d.len - 1; e++) {
414
+ let t = k(d.texts[e]);
415
+ t !== null && (d.kinds[e] !== "space" && d.kinds[e] !== "preserved-space" || d.kinds[e + 1] !== "text" || !f(d.texts[e + 1]) || (d.texts[e] = t.space, d.isWordLike[e] = !1, d.kinds[e] = d.kinds[e] === "preserved-space" ? "preserved-space" : "space", d.texts[e + 1] = t.marks + d.texts[e + 1], d.starts[e + 1] = d.starts[e] + t.space.length));
416
+ }
417
+ return d;
418
+ }
419
+ function Z(e, t) {
420
+ if (e.len === 0) return [];
421
+ if (!t.preserveHardBreaks) return [{
422
+ startSegmentIndex: 0,
423
+ endSegmentIndex: e.len,
424
+ consumedEndSegmentIndex: e.len
425
+ }];
426
+ let n = [], r = 0;
427
+ for (let t = 0; t < e.len; t++) e.kinds[t] === "hard-break" && (n.push({
428
+ startSegmentIndex: r,
429
+ endSegmentIndex: t,
430
+ consumedEndSegmentIndex: t + 1
431
+ }), r = t + 1);
432
+ return r < e.len && n.push({
433
+ startSegmentIndex: r,
434
+ endSegmentIndex: e.len,
435
+ consumedEndSegmentIndex: e.len
436
+ }), n;
437
+ }
438
+ function Q(e, t, a = "normal") {
439
+ let o = n(a), s = o.mode === "pre-wrap" ? i(e) : r(e);
440
+ if (s.length === 0) return {
441
+ normalized: s,
442
+ chunks: [],
443
+ len: 0,
444
+ texts: [],
445
+ isWordLike: [],
446
+ kinds: [],
447
+ starts: []
448
+ };
449
+ let c = X(s, t, o);
450
+ return {
451
+ normalized: s,
452
+ chunks: Z(c, o),
453
+ ...c
454
+ };
455
+ }
456
+ export { Q as analyzeText, c as clearAnalysisCaches, A as endsWithClosingQuote, p as isCJK, h as kinsokuEnd, m as kinsokuStart, _ as leftStickyPunctuation };
@@ -0,0 +1,62 @@
1
+ var e = /* @__PURE__ */ "BN.BN.BN.BN.BN.BN.BN.BN.BN.S.B.S.WS.B.BN.BN.BN.BN.BN.BN.BN.BN.BN.BN.BN.BN.BN.BN.B.B.B.S.WS.ON.ON.ET.ET.ET.ON.ON.ON.ON.ON.ON.CS.ON.CS.ON.EN.EN.EN.EN.EN.EN.EN.EN.EN.EN.ON.ON.ON.ON.ON.ON.ON.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.ON.ON.ON.ON.ON.ON.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.ON.ON.ON.ON.BN.BN.BN.BN.BN.BN.B.BN.BN.BN.BN.BN.BN.BN.BN.BN.BN.BN.BN.BN.BN.BN.BN.BN.BN.BN.BN.BN.BN.BN.BN.BN.BN.CS.ON.ET.ET.ET.ET.ON.ON.ON.ON.L.ON.ON.ON.ON.ON.ET.ET.EN.EN.ON.L.ON.ON.ON.EN.L.ON.ON.ON.ON.ON.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.ON.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.ON.L.L.L.L.L.L.L.L".split("."), t = /* @__PURE__ */ "AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.CS.AL.ON.ON.NSM.NSM.NSM.NSM.NSM.NSM.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.NSM.NSM.NSM.NSM.NSM.NSM.NSM.NSM.NSM.NSM.NSM.NSM.NSM.NSM.AL.AL.AL.AL.AL.AL.AL.AN.AN.AN.AN.AN.AN.AN.AN.AN.AN.ET.AN.AN.AL.AL.AL.NSM.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.NSM.NSM.NSM.NSM.NSM.NSM.NSM.NSM.NSM.NSM.NSM.NSM.NSM.NSM.NSM.NSM.NSM.NSM.NSM.ON.NSM.NSM.NSM.NSM.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL.AL".split(".");
2
+ function n(n) {
3
+ return n <= 255 ? e[n] : 1424 <= n && n <= 1524 ? "R" : 1536 <= n && n <= 1791 ? t[n & 255] : 1792 <= n && n <= 2220 ? "AL" : "L";
4
+ }
5
+ function r(e) {
6
+ let t = e.length;
7
+ if (t === 0) return null;
8
+ let r = Array(t), i = 0;
9
+ for (let a = 0; a < t; a++) {
10
+ let t = n(e.charCodeAt(a));
11
+ (t === "R" || t === "AL" || t === "AN") && i++, r[a] = t;
12
+ }
13
+ if (i === 0) return null;
14
+ let a = t / i < .3 ? 0 : 1, o = new Int8Array(t);
15
+ for (let e = 0; e < t; e++) o[e] = a;
16
+ let s = a & 1 ? "R" : "L", c = s, l = c;
17
+ for (let e = 0; e < t; e++) r[e] === "NSM" ? r[e] = l : l = r[e];
18
+ l = c;
19
+ for (let e = 0; e < t; e++) {
20
+ let t = r[e];
21
+ t === "EN" ? r[e] = l === "AL" ? "AN" : "EN" : (t === "R" || t === "L" || t === "AL") && (l = t);
22
+ }
23
+ for (let e = 0; e < t; e++) r[e] === "AL" && (r[e] = "R");
24
+ for (let e = 1; e < t - 1; e++) r[e] === "ES" && r[e - 1] === "EN" && r[e + 1] === "EN" && (r[e] = "EN"), r[e] === "CS" && (r[e - 1] === "EN" || r[e - 1] === "AN") && r[e + 1] === r[e - 1] && (r[e] = r[e - 1]);
25
+ for (let e = 0; e < t; e++) {
26
+ if (r[e] !== "EN") continue;
27
+ let n;
28
+ for (n = e - 1; n >= 0 && r[n] === "ET"; n--) r[n] = "EN";
29
+ for (n = e + 1; n < t && r[n] === "ET"; n++) r[n] = "EN";
30
+ }
31
+ for (let e = 0; e < t; e++) {
32
+ let t = r[e];
33
+ (t === "WS" || t === "ES" || t === "ET" || t === "CS") && (r[e] = "ON");
34
+ }
35
+ l = c;
36
+ for (let e = 0; e < t; e++) {
37
+ let t = r[e];
38
+ t === "EN" ? r[e] = l === "L" ? "L" : "EN" : (t === "R" || t === "L") && (l = t);
39
+ }
40
+ for (let e = 0; e < t; e++) {
41
+ if (r[e] !== "ON") continue;
42
+ let n = e + 1;
43
+ for (; n < t && r[n] === "ON";) n++;
44
+ let i = e > 0 ? r[e - 1] : c, a = n < t ? r[n] : c, o = i === "L" ? "L" : "R";
45
+ if (o === (a === "L" ? "L" : "R")) for (let t = e; t < n; t++) r[t] = o;
46
+ e = n - 1;
47
+ }
48
+ for (let e = 0; e < t; e++) r[e] === "ON" && (r[e] = s);
49
+ for (let e = 0; e < t; e++) {
50
+ let t = r[e];
51
+ o[e] & 1 ? (t === "L" || t === "AN" || t === "EN") && o[e]++ : t === "R" ? o[e]++ : (t === "AN" || t === "EN") && (o[e] += 2);
52
+ }
53
+ return o;
54
+ }
55
+ function i(e, t) {
56
+ let n = r(e);
57
+ if (n === null) return null;
58
+ let i = new Int8Array(t.length);
59
+ for (let e = 0; e < t.length; e++) i[e] = n[t[e]];
60
+ return i;
61
+ }
62
+ export { i as computeSegmentLevels };
@@ -0,0 +1,190 @@
1
+ import { computeSegmentLevels as e } from "./bidi.js";
2
+ import { analyzeText as t, clearAnalysisCaches as n, endsWithClosingQuote as r, isCJK as i, kinsokuEnd as a, kinsokuStart as o, leftStickyPunctuation as s } from "./analysis.js";
3
+ import { clearMeasurementCaches as c, getCorrectedSegmentWidth as l, getEngineProfile as u, getFontMeasurementState as d, getSegmentGraphemePrefixWidths as f, getSegmentGraphemeWidths as p, getSegmentMetrics as m, textMayContainEmoji as h } from "./measurement.js";
4
+ import { walkPreparedLines as g } from "./line-break.js";
5
+ var _ = null, v = /* @__PURE__ */ new WeakMap();
6
+ function y() {
7
+ return _ === null && (_ = new Intl.Segmenter(void 0, { granularity: "grapheme" })), _;
8
+ }
9
+ function b(e) {
10
+ return e ? {
11
+ widths: [],
12
+ lineEndFitAdvances: [],
13
+ lineEndPaintAdvances: [],
14
+ kinds: [],
15
+ simpleLineWalkFastPath: !0,
16
+ segLevels: null,
17
+ breakableWidths: [],
18
+ breakablePrefixWidths: [],
19
+ discretionaryHyphenWidth: 0,
20
+ tabStopAdvance: 0,
21
+ chunks: [],
22
+ segments: []
23
+ } : {
24
+ widths: [],
25
+ lineEndFitAdvances: [],
26
+ lineEndPaintAdvances: [],
27
+ kinds: [],
28
+ simpleLineWalkFastPath: !0,
29
+ segLevels: null,
30
+ breakableWidths: [],
31
+ breakablePrefixWidths: [],
32
+ discretionaryHyphenWidth: 0,
33
+ tabStopAdvance: 0,
34
+ chunks: []
35
+ };
36
+ }
37
+ function x(t, n, c) {
38
+ let g = y(), _ = u(), { cache: v, emojiCorrection: x } = d(n, h(t.normalized)), C = l("-", m("-", v), x), w = l(" ", m(" ", v), x) * 8;
39
+ if (t.len === 0) return b(c);
40
+ let T = [], E = [], D = [], O = [], k = t.chunks.length <= 1, A = c ? [] : null, j = [], M = [], N = c ? [] : null, P = Array.from({ length: t.len }), F = Array.from({ length: t.len });
41
+ function I(e, t, n, r, i, a, o, s) {
42
+ i !== "text" && i !== "space" && i !== "zero-width-break" && (k = !1), T.push(t), E.push(n), D.push(r), O.push(i), A?.push(a), j.push(o), M.push(s), N !== null && N.push(e);
43
+ }
44
+ for (let e = 0; e < t.len; e++) {
45
+ P[e] = T.length;
46
+ let n = t.texts[e], c = t.isWordLike[e], u = t.kinds[e], d = t.starts[e];
47
+ if (u === "soft-hyphen") {
48
+ I(n, 0, C, C, u, d, null, null), F[e] = T.length;
49
+ continue;
50
+ }
51
+ if (u === "hard-break") {
52
+ I(n, 0, 0, 0, u, d, null, null), F[e] = T.length;
53
+ continue;
54
+ }
55
+ if (u === "tab") {
56
+ I(n, 0, 0, 0, u, d, null, null), F[e] = T.length;
57
+ continue;
58
+ }
59
+ let h = m(n, v);
60
+ if (u === "text" && h.containsCJK) {
61
+ let t = "", c = 0;
62
+ for (let e of g.segment(n)) {
63
+ let n = e.segment;
64
+ if (t.length === 0) {
65
+ t = n, c = e.index;
66
+ continue;
67
+ }
68
+ if (a.has(t) || o.has(n) || s.has(n) || _.carryCJKAfterClosingQuote && i(n) && r(t)) {
69
+ t += n;
70
+ continue;
71
+ }
72
+ let u = m(t, v), f = l(t, u, x);
73
+ I(t, f, f, f, "text", d + c, null, null), t = n, c = e.index;
74
+ }
75
+ if (t.length > 0) {
76
+ let e = m(t, v), n = l(t, e, x);
77
+ I(t, n, n, n, "text", d + c, null, null);
78
+ }
79
+ F[e] = T.length;
80
+ continue;
81
+ }
82
+ let y = l(n, h, x), b = u === "space" || u === "preserved-space" || u === "zero-width-break" ? 0 : y, S = u === "space" || u === "zero-width-break" ? 0 : y;
83
+ c && n.length > 1 ? I(n, y, b, S, u, d, p(n, h, v, x), _.preferPrefixWidthsForBreakableRuns ? f(n, h, v, x) : null) : I(n, y, b, S, u, d, null, null), F[e] = T.length;
84
+ }
85
+ let L = S(t.chunks, P, F), R = A === null ? null : e(t.normalized, A);
86
+ return N === null ? {
87
+ widths: T,
88
+ lineEndFitAdvances: E,
89
+ lineEndPaintAdvances: D,
90
+ kinds: O,
91
+ simpleLineWalkFastPath: k,
92
+ segLevels: R,
93
+ breakableWidths: j,
94
+ breakablePrefixWidths: M,
95
+ discretionaryHyphenWidth: C,
96
+ tabStopAdvance: w,
97
+ chunks: L
98
+ } : {
99
+ widths: T,
100
+ lineEndFitAdvances: E,
101
+ lineEndPaintAdvances: D,
102
+ kinds: O,
103
+ simpleLineWalkFastPath: k,
104
+ segLevels: R,
105
+ breakableWidths: j,
106
+ breakablePrefixWidths: M,
107
+ discretionaryHyphenWidth: C,
108
+ tabStopAdvance: w,
109
+ chunks: L,
110
+ segments: N
111
+ };
112
+ }
113
+ function S(e, t, n) {
114
+ let r = [];
115
+ for (let i = 0; i < e.length; i++) {
116
+ let a = e[i], o = a.startSegmentIndex < t.length ? t[a.startSegmentIndex] : n[n.length - 1] ?? 0, s = a.endSegmentIndex < t.length ? t[a.endSegmentIndex] : n[n.length - 1] ?? 0, c = a.consumedEndSegmentIndex < t.length ? t[a.consumedEndSegmentIndex] : n[n.length - 1] ?? 0;
117
+ r.push({
118
+ startSegmentIndex: o,
119
+ endSegmentIndex: s,
120
+ consumedEndSegmentIndex: c
121
+ });
122
+ }
123
+ return r;
124
+ }
125
+ function C(e, n, r, i) {
126
+ return x(t(e, u(), i?.whiteSpace), n, r);
127
+ }
128
+ function w(e, t, n) {
129
+ return C(e, t, !0, n);
130
+ }
131
+ function T(e) {
132
+ return e;
133
+ }
134
+ function E(e, t, n) {
135
+ let r = n.get(e);
136
+ if (r !== void 0) return r;
137
+ r = [];
138
+ let i = y();
139
+ for (let n of i.segment(t[e])) r.push(n.segment);
140
+ return n.set(e, r), r;
141
+ }
142
+ function D(e) {
143
+ let t = v.get(e);
144
+ return t === void 0 ? (t = /* @__PURE__ */ new Map(), v.set(e, t), t) : t;
145
+ }
146
+ function O(e, t, n, r) {
147
+ return r > 0 && e[r - 1] === "soft-hyphen" && !(t === r && n > 0);
148
+ }
149
+ function k(e, t, n, r, i, a, o) {
150
+ let s = "", c = O(t, r, i, a);
151
+ for (let o = r; o < a; o++) t[o] === "soft-hyphen" || t[o] === "hard-break" || (o === r && i > 0 ? s += E(o, e, n).slice(i).join("") : s += e[o]);
152
+ return o > 0 ? (c && (s += "-"), s += E(a, e, n).slice(r === a ? i : 0, o).join("")) : c && (s += "-"), s;
153
+ }
154
+ function A(e, t, n, r, i, a, o) {
155
+ return {
156
+ text: k(e.segments, e.kinds, t, r, i, a, o),
157
+ width: n,
158
+ start: {
159
+ segmentIndex: r,
160
+ graphemeIndex: i
161
+ },
162
+ end: {
163
+ segmentIndex: a,
164
+ graphemeIndex: o
165
+ }
166
+ };
167
+ }
168
+ function j(e, t, n) {
169
+ return A(e, t, n.width, n.startSegmentIndex, n.startGraphemeIndex, n.endSegmentIndex, n.endGraphemeIndex);
170
+ }
171
+ function M(e, t, n) {
172
+ let r = [];
173
+ if (e.widths.length === 0) return {
174
+ lineCount: 0,
175
+ height: 0,
176
+ lines: r
177
+ };
178
+ let i = D(e), a = g(T(e), t, (t) => {
179
+ r.push(j(e, i, t));
180
+ });
181
+ return {
182
+ lineCount: a,
183
+ height: a * n,
184
+ lines: r
185
+ };
186
+ }
187
+ function N() {
188
+ n(), _ = null, v = /* @__PURE__ */ new WeakMap(), c();
189
+ }
190
+ export { N as clearCache, M as layoutWithLines, w as prepareWithSegments };