hanap-labs 9.7.0 → 10.1.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.
@@ -0,0 +1,1298 @@
1
+ //#region node_modules/emoji-picker-element/database.js
2
+ function e(e) {
3
+ if (typeof e != "string" || !e) throw Error("expected a non-empty string, got: " + e);
4
+ }
5
+ function t(e) {
6
+ if (typeof e != "number") throw Error("expected a number, got: " + e);
7
+ }
8
+ var n = 1, r = 1, i = "emoji", a = "keyvalue", o = "favorites", s = "tokens", c = "tokens", l = "unicode", u = "count", d = "group", f = "order", p = "group-order", m = "eTag", h = "url", g = "skinTone", _ = "readonly", v = "readwrite", y = "skinUnicodes", b = "skinUnicodes", x = "https://cdn.jsdelivr.net/npm/emoji-picker-element-data@^1/en/emojibase/data.json", ee = "en";
9
+ function te(e, t) {
10
+ let n = /* @__PURE__ */ new Set(), r = [];
11
+ for (let i of e) {
12
+ let e = t(i);
13
+ n.has(e) || (n.add(e), r.push(i));
14
+ }
15
+ return r;
16
+ }
17
+ function S(e) {
18
+ return te(e, (e) => e.unicode);
19
+ }
20
+ function ne(e) {
21
+ function t(t, n, r) {
22
+ let i = n ? e.createObjectStore(t, { keyPath: n }) : e.createObjectStore(t);
23
+ if (r) for (let [e, [t, n]] of Object.entries(r)) i.createIndex(e, t, { multiEntry: n });
24
+ return i;
25
+ }
26
+ t(a), t(i, l, {
27
+ [c]: [s, !0],
28
+ [p]: [[d, f]],
29
+ [y]: [b, !0]
30
+ }), t(o, void 0, { [u]: [""] });
31
+ }
32
+ var C = {}, w = {}, T = {};
33
+ function E(e, t, n) {
34
+ n.onerror = () => t(n.error), n.onblocked = () => t(/* @__PURE__ */ Error("IDB blocked")), n.onsuccess = () => e(n.result);
35
+ }
36
+ async function re(e) {
37
+ let t = await new Promise((t, i) => {
38
+ let a = indexedDB.open(e, n);
39
+ C[e] = a, a.onupgradeneeded = (e) => {
40
+ /* istanbul ignore else */
41
+ e.oldVersion < r && ne(a.result);
42
+ }, E(t, i, a);
43
+ });
44
+ return t.onclose = () => O(e), t;
45
+ }
46
+ function ie(e) {
47
+ return w[e] || (w[e] = re(e)), w[e];
48
+ }
49
+ function D(e, t, n, r) {
50
+ return new Promise((i, a) => {
51
+ let o = e.transaction(t, n, { durability: "relaxed" }), s = typeof t == "string" ? o.objectStore(t) : t.map((e) => o.objectStore(e)), c;
52
+ /* istanbul ignore next */
53
+ r(s, o, (e) => {
54
+ c = e;
55
+ }), o.oncomplete = () => i(c), o.onerror = () => a(o.error);
56
+ });
57
+ }
58
+ function O(e) {
59
+ let t = C[e], n = t && t.result;
60
+ if (n) {
61
+ n.close();
62
+ let t = T[e];
63
+ /* istanbul ignore else */
64
+ if (t) for (let e of t) e();
65
+ }
66
+ delete C[e], delete w[e], delete T[e];
67
+ }
68
+ function ae(e) {
69
+ return new Promise((t, n) => {
70
+ O(e), E(t, n, indexedDB.deleteDatabase(e));
71
+ });
72
+ }
73
+ function k(e, t) {
74
+ let n = T[e];
75
+ n ||= T[e] = [], n.push(t);
76
+ }
77
+ var oe = new Set(/* @__PURE__ */ ":D.XD.:'D.O:).:X.:P.;P.XP.:L.:Z.:j.8D.XO.8).:B.:O.:S.:'o.Dx.X(.D:.:C.>0).:3.</3.<3.\\M/.:E.8#".split("."));
78
+ function A(e) {
79
+ return e.split(/[\s_]+/).map((e) => !e.match(/\w/) || oe.has(e) ? e.toLowerCase() : e.replace(/[)(:,]/g, "").replace(/’/g, "'").toLowerCase()).filter(Boolean);
80
+ }
81
+ var se = 2;
82
+ function j(e) {
83
+ return e.filter(Boolean).map((e) => e.toLowerCase()).filter((e) => e.length >= se);
84
+ }
85
+ function ce(e) {
86
+ return e.map(({ annotation: e, emoticon: t, group: n, order: r, shortcodes: i, skins: a, tags: o, emoji: s, version: c }) => {
87
+ let l = {
88
+ annotation: e,
89
+ group: n,
90
+ order: r,
91
+ tags: o,
92
+ tokens: [...new Set(j([
93
+ ...(i || []).map(A).flat(),
94
+ ...(o || []).map(A).flat(),
95
+ ...A(e),
96
+ t
97
+ ]))].sort(),
98
+ unicode: s,
99
+ version: c
100
+ };
101
+ if (t && (l.emoticon = t), i && (l.shortcodes = i), a) {
102
+ l.skinTones = [], l.skinUnicodes = [], l.skinVersions = [];
103
+ for (let { tone: e, emoji: t, version: n } of a) l.skinTones.push(e), l.skinUnicodes.push(t), l.skinVersions.push(n);
104
+ }
105
+ return l;
106
+ });
107
+ }
108
+ function M(e, t, n, r) {
109
+ e[t](n).onsuccess = (e) => r && r(e.target.result);
110
+ }
111
+ function N(e, t, n) {
112
+ M(e, "get", t, n);
113
+ }
114
+ function P(e, t, n) {
115
+ M(e, "getAll", t, n);
116
+ }
117
+ function F(e) {
118
+ /* istanbul ignore else */
119
+ e.commit && e.commit();
120
+ }
121
+ function le(e, t) {
122
+ let n = e[0];
123
+ for (let r = 1; r < e.length; r++) {
124
+ let i = e[r];
125
+ t(n) > t(i) && (n = i);
126
+ }
127
+ return n;
128
+ }
129
+ function ue(e, t) {
130
+ let n = le(e, (e) => e.length), r = [];
131
+ for (let i of n) e.some((e) => e.findIndex((e) => t(e) === t(i)) === -1) || r.push(i);
132
+ return r;
133
+ }
134
+ async function de(e) {
135
+ return !await I(e, a, h);
136
+ }
137
+ async function fe(e, t, n) {
138
+ let [r, i] = await Promise.all([m, h].map((t) => I(e, a, t)));
139
+ return r === n && i === t;
140
+ }
141
+ async function pe(e, t) {
142
+ return D(e, i, _, (e, n, r) => {
143
+ let i, a = () => {
144
+ e.getAll(i && IDBKeyRange.lowerBound(i, !0), 50).onsuccess = (e) => {
145
+ let n = e.target.result;
146
+ for (let e of n) if (i = e.unicode, t(e)) return r(e);
147
+ if (n.length < 50) return r();
148
+ a();
149
+ };
150
+ };
151
+ a();
152
+ });
153
+ }
154
+ async function me(e, t, n, r) {
155
+ try {
156
+ let o = ce(t);
157
+ await D(e, [i, a], v, ([e, t], i) => {
158
+ let a, s, c = 0;
159
+ function l() {
160
+ ++c === 2 && u();
161
+ }
162
+ function u() {
163
+ if (!(a === r && s === n)) {
164
+ e.clear();
165
+ for (let t of o) e.put(t);
166
+ t.put(r, m), t.put(n, h), F(i);
167
+ }
168
+ }
169
+ N(t, m, (e) => {
170
+ a = e, l();
171
+ }), N(t, h, (e) => {
172
+ s = e, l();
173
+ });
174
+ });
175
+ } finally {}
176
+ }
177
+ async function he(e, t) {
178
+ return D(e, i, _, (e, n, r) => {
179
+ let i = IDBKeyRange.bound([t, 0], [t + 1, 0], !1, !0);
180
+ P(e.index(p), i, r);
181
+ });
182
+ }
183
+ async function ge(e, t) {
184
+ let n = j(A(t));
185
+ return n.length ? D(e, i, _, (e, t, r) => {
186
+ let i = [], a = () => {
187
+ i.length === n.length && o();
188
+ }, o = () => {
189
+ r(ue(i, (e) => e.unicode).sort((e, t) => e.order < t.order ? -1 : 1));
190
+ };
191
+ for (let t = 0; t < n.length; t++) {
192
+ let r = n[t], o = t === n.length - 1 ? IDBKeyRange.bound(r, r + "￿", !1, !0) : IDBKeyRange.only(r);
193
+ P(e.index(c), o, (e) => {
194
+ i.push(e), a();
195
+ });
196
+ }
197
+ }) : [];
198
+ }
199
+ async function _e(e, t) {
200
+ let n = await ge(e, t);
201
+ return n.length ? n.filter((e) => (e.shortcodes || []).map((e) => e.toLowerCase()).includes(t.toLowerCase()))[0] || null : await pe(e, (e) => (e.shortcodes || []).includes(t.toLowerCase())) || null;
202
+ }
203
+ async function ve(e, t) {
204
+ return D(e, i, _, (e, n, r) => N(e, t, (n) => {
205
+ if (n) return r(n);
206
+ N(e.index(y), t, (e) => r(e || null));
207
+ }));
208
+ }
209
+ function I(e, t, n) {
210
+ return D(e, t, _, (e, t, r) => N(e, n, r));
211
+ }
212
+ function ye(e, t, n, r) {
213
+ return D(e, t, v, (e, t) => {
214
+ e.put(r, n), F(t);
215
+ });
216
+ }
217
+ function be(e, t) {
218
+ return D(e, o, v, (e, n) => N(e, t, (r) => {
219
+ e.put((r || 0) + 1, t), F(n);
220
+ }));
221
+ }
222
+ function xe(e, t, n) {
223
+ return n === 0 ? [] : D(e, [o, i], _, ([e, r], i, a) => {
224
+ let o = [];
225
+ e.index(u).openCursor(void 0, "prev").onsuccess = (e) => {
226
+ let i = e.target.result;
227
+ if (!i) return a(o);
228
+ function s(e) {
229
+ if (o.push(e), o.length === n) return a(o);
230
+ i.continue();
231
+ }
232
+ let c = i.primaryKey, l = t.byName(c);
233
+ if (l) return s(l);
234
+ N(r, c, (e) => {
235
+ if (e) return s(e);
236
+ i.continue();
237
+ });
238
+ };
239
+ });
240
+ }
241
+ var L = "";
242
+ function Se(e, t) {
243
+ let n = /* @__PURE__ */ new Map();
244
+ for (let r of e) {
245
+ let e = t(r);
246
+ for (let t of e) {
247
+ let e = n;
248
+ for (let n = 0; n < t.length; n++) {
249
+ let r = t.charAt(n), i = e.get(r);
250
+ i || (i = /* @__PURE__ */ new Map(), e.set(r, i)), e = i;
251
+ }
252
+ let i = e.get(L);
253
+ i || (i = [], e.set(L, i)), i.push(r);
254
+ }
255
+ }
256
+ return (e, t) => {
257
+ let r = n;
258
+ for (let t = 0; t < e.length; t++) {
259
+ let n = e.charAt(t), i = r.get(n);
260
+ if (i) r = i;
261
+ else return [];
262
+ }
263
+ if (t) return r.get(L) || [];
264
+ let i = [], a = [r];
265
+ for (; a.length;) {
266
+ let e = [...a.shift().entries()].sort((e, t) => e[0] < t[0] ? -1 : 1);
267
+ for (let [t, n] of e) t === L ? i.push(...n) : a.push(n);
268
+ }
269
+ return i;
270
+ };
271
+ }
272
+ var Ce = ["name", "url"];
273
+ function we(e) {
274
+ let t = e && Array.isArray(e), n = t && e.length && (!e[0] || Ce.some((t) => !(t in e[0])));
275
+ if (!t || n) throw Error("Custom emojis are in the wrong format");
276
+ }
277
+ function Te(e) {
278
+ we(e);
279
+ let t = (e, t) => e.name.toLowerCase() < t.name.toLowerCase() ? -1 : 1, n = e.sort(t), r = Se(e, (e) => {
280
+ let t = /* @__PURE__ */ new Set();
281
+ if (e.shortcodes) for (let n of e.shortcodes) for (let e of A(n)) t.add(e);
282
+ return t;
283
+ }), i = (e) => r(e, !0), a = (e) => r(e, !1), o = (e) => {
284
+ let n = A(e);
285
+ return ue(n.map((e, t) => (t < n.length - 1 ? i : a)(e)), (e) => e.name).sort(t);
286
+ }, s = /* @__PURE__ */ new Map(), c = /* @__PURE__ */ new Map();
287
+ for (let t of e) {
288
+ c.set(t.name.toLowerCase(), t);
289
+ for (let e of t.shortcodes || []) s.set(e.toLowerCase(), t);
290
+ }
291
+ return {
292
+ all: n,
293
+ search: o,
294
+ byShortcode: (e) => s.get(e.toLowerCase()),
295
+ byName: (e) => c.get(e.toLowerCase())
296
+ };
297
+ }
298
+ var Ee = typeof wrappedJSObject < "u";
299
+ function R(e) {
300
+ if (!e) return e;
301
+ if (Ee && (e = structuredClone(e)), delete e.tokens, e.skinTones) {
302
+ let t = e.skinTones.length;
303
+ e.skins = Array(t);
304
+ for (let n = 0; n < t; n++) e.skins[n] = {
305
+ tone: e.skinTones[n],
306
+ unicode: e.skinUnicodes[n],
307
+ version: e.skinVersions[n]
308
+ };
309
+ delete e.skinTones, delete e.skinUnicodes, delete e.skinVersions;
310
+ }
311
+ return e;
312
+ }
313
+ function De(e) {
314
+ e || console.warn("emoji-picker-element is more efficient if the dataSource server exposes an ETag header.");
315
+ }
316
+ var Oe = [
317
+ "annotation",
318
+ "emoji",
319
+ "group",
320
+ "order",
321
+ "version"
322
+ ];
323
+ function ke(e) {
324
+ if (!e || !Array.isArray(e) || !e[0] || typeof e[0] != "object" || Oe.some((t) => !(t in e[0]))) throw Error("Emoji data is in the wrong format");
325
+ }
326
+ function Ae(e, t) {
327
+ if (Math.floor(e.status / 100) !== 2) throw Error("Failed to fetch: " + t + ": " + e.status);
328
+ }
329
+ async function je(e) {
330
+ let t = await fetch(e, { method: "HEAD" });
331
+ Ae(t, e);
332
+ let n = t.headers.get("etag");
333
+ return De(n), n;
334
+ }
335
+ async function z(e) {
336
+ let t = await fetch(e);
337
+ Ae(t, e);
338
+ let n = t.headers.get("etag");
339
+ De(n);
340
+ let r = await t.json();
341
+ return ke(r), [n, r];
342
+ }
343
+ function Me(e) {
344
+ for (var t = "", n = new Uint8Array(e), r = n.byteLength, i = -1; ++i < r;) t += String.fromCharCode(n[i]);
345
+ return t;
346
+ }
347
+ function Ne(e) {
348
+ for (var t = e.length, n = new ArrayBuffer(t), r = new Uint8Array(n), i = -1; ++i < t;) r[i] = e.charCodeAt(i);
349
+ return n;
350
+ }
351
+ async function Pe(e) {
352
+ let t = Ne(JSON.stringify(e)), n = Me(await crypto.subtle.digest("SHA-1", t));
353
+ return btoa(n);
354
+ }
355
+ async function Fe(e, t) {
356
+ let n, r = await je(t);
357
+ if (!r) {
358
+ let e = await z(t);
359
+ r = e[0], n = e[1], r ||= await Pe(n);
360
+ }
361
+ await fe(e, t, r) || (n ||= (await z(t))[1], await me(e, n, t, r));
362
+ }
363
+ async function Ie(e, t) {
364
+ let [n, r] = await z(t);
365
+ n ||= await Pe(r), await me(e, r, t, n);
366
+ }
367
+ async function Le(e, t) {
368
+ try {
369
+ await Fe(e, t);
370
+ } catch (e) {
371
+ if (e.name !== "InvalidStateError") throw e;
372
+ }
373
+ }
374
+ var Re = class {
375
+ constructor({ dataSource: e = x, locale: t = ee, customEmoji: n = [] } = {}) {
376
+ this.dataSource = e, this.locale = t, this._dbName = `emoji-picker-element-${this.locale}`, this._db = void 0, this._lazyUpdate = void 0, this._custom = Te(n), this._clear = this._clear.bind(this), this._ready = this._init();
377
+ }
378
+ async _init() {
379
+ let e = this._db = await ie(this._dbName);
380
+ k(this._dbName, this._clear);
381
+ let t = this.dataSource;
382
+ await de(e) ? await Ie(e, t) : this._lazyUpdate = Le(e, t);
383
+ }
384
+ async ready() {
385
+ let e = async () => (this._ready ||= this._init(), this._ready);
386
+ await e(), this._db || await e();
387
+ }
388
+ async getEmojiByGroup(e) {
389
+ return t(e), await this.ready(), S(await he(this._db, e)).map(R);
390
+ }
391
+ async getEmojiBySearchQuery(t) {
392
+ e(t), await this.ready();
393
+ let n = this._custom.search(t), r = S(await ge(this._db, t)).map(R);
394
+ return [...n, ...r];
395
+ }
396
+ async getEmojiByShortcode(t) {
397
+ return e(t), await this.ready(), this._custom.byShortcode(t) || R(await _e(this._db, t));
398
+ }
399
+ async getEmojiByUnicodeOrName(t) {
400
+ return e(t), await this.ready(), this._custom.byName(t) || R(await ve(this._db, t));
401
+ }
402
+ async getPreferredSkinTone() {
403
+ return await this.ready(), await I(this._db, a, g) || 0;
404
+ }
405
+ async setPreferredSkinTone(e) {
406
+ return t(e), await this.ready(), ye(this._db, a, g, e);
407
+ }
408
+ async incrementFavoriteEmojiCount(t) {
409
+ return e(t), await this.ready(), be(this._db, t);
410
+ }
411
+ async getTopFavoriteEmoji(e) {
412
+ return t(e), await this.ready(), (await xe(this._db, this._custom, e)).map(R);
413
+ }
414
+ set customEmoji(e) {
415
+ this._custom = Te(e);
416
+ }
417
+ get customEmoji() {
418
+ return this._custom.all;
419
+ }
420
+ async _shutdown() {
421
+ await this.ready();
422
+ try {
423
+ await this._lazyUpdate;
424
+ } catch {}
425
+ }
426
+ _clear() {
427
+ this._db = this._ready = this._lazyUpdate = void 0;
428
+ }
429
+ async close() {
430
+ await this._shutdown(), await O(this._dbName);
431
+ }
432
+ async delete() {
433
+ await this._shutdown(), await ae(this._dbName);
434
+ }
435
+ }, B = [
436
+ [
437
+ -1,
438
+ "✨",
439
+ "custom"
440
+ ],
441
+ [
442
+ 0,
443
+ "😀",
444
+ "smileys-emotion"
445
+ ],
446
+ [
447
+ 1,
448
+ "👋",
449
+ "people-body"
450
+ ],
451
+ [
452
+ 3,
453
+ "🐱",
454
+ "animals-nature"
455
+ ],
456
+ [
457
+ 4,
458
+ "🍎",
459
+ "food-drink"
460
+ ],
461
+ [
462
+ 5,
463
+ "🏠️",
464
+ "travel-places"
465
+ ],
466
+ [
467
+ 6,
468
+ "⚽",
469
+ "activities"
470
+ ],
471
+ [
472
+ 7,
473
+ "📝",
474
+ "objects"
475
+ ],
476
+ [
477
+ 8,
478
+ "⛔️",
479
+ "symbols"
480
+ ],
481
+ [
482
+ 9,
483
+ "🏁",
484
+ "flags"
485
+ ]
486
+ ].map(([e, t, n]) => ({
487
+ id: e,
488
+ emoji: t,
489
+ name: n
490
+ })), V = B.slice(1), ze = 2, Be = 6, Ve = typeof requestIdleCallback == "function" ? requestIdleCallback : setTimeout;
491
+ function He(e) {
492
+ return e.unicode.includes("‍");
493
+ }
494
+ var Ue = {
495
+ "🫪": 17,
496
+ "🫩": 16,
497
+ "🫨": 15.1,
498
+ "🫠": 14,
499
+ "🥲": 13.1,
500
+ "🥻": 12.1,
501
+ "🥰": 11,
502
+ "🤩": 5,
503
+ "👱‍♀️": 4,
504
+ "🤣": 3,
505
+ "👁️‍🗨️": 2,
506
+ "😀": 1,
507
+ "😐️": .7,
508
+ "😃": .6
509
+ }, We = 1e3, Ge = "🖐️", Ke = 8, qe = [
510
+ "😊",
511
+ "😒",
512
+ "❤️",
513
+ "👍️",
514
+ "😍",
515
+ "😂",
516
+ "😭",
517
+ "☺️",
518
+ "😔",
519
+ "😩",
520
+ "😏",
521
+ "💕",
522
+ "🙌",
523
+ "😘"
524
+ ], Je = "\"Twemoji Mozilla\",\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\",\"EmojiOne Color\",\"Android Emoji\",sans-serif", Ye = (e, t) => e < t ? -1 : +(e > t), Xe = (e, t) => {
525
+ let n = document.createElement("canvas");
526
+ n.width = n.height = 1;
527
+ let r = n.getContext("2d", { willReadFrequently: !0 });
528
+ return r.textBaseline = "top", r.font = `100px ${Je}`, r.fillStyle = t, r.scale(.01, .01), r.fillText(e, 0, 0), r.getImageData(0, 0, 1, 1).data;
529
+ }, Ze = (e, t) => {
530
+ let n = [...e].join(",");
531
+ return n === [...t].join(",") && !n.startsWith("0,0,0,");
532
+ };
533
+ function Qe(e) {
534
+ let t = Xe(e, "#000"), n = Xe(e, "#fff");
535
+ return t && n && Ze(t, n);
536
+ }
537
+ function $e() {
538
+ let e = Object.entries(Ue);
539
+ try {
540
+ for (let [t, n] of e) if (Qe(t)) return n;
541
+ } catch {}
542
+ return e[0][1];
543
+ }
544
+ var et, H = () => (et ||= new Promise((e) => Ve(() => e($e()))), et), U = /* @__PURE__ */ new Map(), tt = "️", nt = "\ud83c", rt = "‍", it = 127995, at = 57339;
545
+ function ot(e, t) {
546
+ if (t === 0) return e;
547
+ let n = e.indexOf(rt);
548
+ return n === -1 ? (e.endsWith(tt) && (e = e.substring(0, e.length - 1)), e + nt + String.fromCodePoint(at + t - 1)) : e.substring(0, n) + String.fromCodePoint(it + t - 1) + e.substring(n);
549
+ }
550
+ function W(e) {
551
+ e.preventDefault(), e.stopPropagation();
552
+ }
553
+ function G(e, t, n) {
554
+ return t += e ? -1 : 1, t < 0 ? t = n.length - 1 : t >= n.length && (t = 0), t;
555
+ }
556
+ function st(e, t) {
557
+ let n = /* @__PURE__ */ new Set(), r = [];
558
+ for (let i of e) {
559
+ let e = t(i);
560
+ n.has(e) || (n.add(e), r.push(i));
561
+ }
562
+ return r;
563
+ }
564
+ function ct(e, t) {
565
+ let n = (e) => {
566
+ let n = {};
567
+ for (let r of e) typeof r.tone == "number" && r.version <= t && (n[r.tone] = r.unicode);
568
+ return n;
569
+ };
570
+ return e.map(({ unicode: e, skins: t, shortcodes: r, url: i, name: a, category: o, annotation: s }) => ({
571
+ unicode: e,
572
+ name: a,
573
+ shortcodes: r,
574
+ url: i,
575
+ category: o,
576
+ annotation: s,
577
+ id: e || a,
578
+ skins: t && n(t)
579
+ }));
580
+ }
581
+ var K = requestAnimationFrame, lt = typeof ResizeObserver == "function";
582
+ function ut(e, t, n) {
583
+ let r;
584
+ lt ? (r = new ResizeObserver(n), r.observe(e)) : K(n), t.addEventListener("abort", () => {
585
+ r && r.disconnect();
586
+ });
587
+ }
588
+ function dt(e) {
589
+ /* istanbul ignore else */
590
+ {
591
+ let t = document.createRange();
592
+ return t.selectNode(e.firstChild), t.getBoundingClientRect().width;
593
+ }
594
+ }
595
+ var ft = "😀", q, J;
596
+ function pt(e, t, n) {
597
+ let r = dt(t);
598
+ /* istanbul ignore if */
599
+ if (!r) {
600
+ if (!J) {
601
+ J = n.cloneNode(!0);
602
+ let e = getComputedStyle(n);
603
+ for (let t of [
604
+ "font-family",
605
+ "line-height",
606
+ "width",
607
+ "height",
608
+ "font-size",
609
+ "display",
610
+ "align-items",
611
+ "justify-content"
612
+ ]) J.style.setProperty(t, e.getPropertyValue(t), "important");
613
+ }
614
+ try {
615
+ return document.body.appendChild(J), J.firstChild.nodeValue = e, dt(J);
616
+ } finally {
617
+ J.remove();
618
+ }
619
+ }
620
+ return r;
621
+ }
622
+ function mt(e, t, n) {
623
+ let r = !0;
624
+ for (let i of e) {
625
+ let e = n(i);
626
+ /* istanbul ignore if */
627
+ if (!e) continue;
628
+ q === void 0 && (q = pt(ft, t, t));
629
+ let a = pt(i.unicode, e, t) / 1.8 < q;
630
+ U.set(i.unicode, a), a || (r = !1);
631
+ }
632
+ return r;
633
+ }
634
+ function ht(e) {
635
+ return st(e, (e) => e);
636
+ }
637
+ function gt(e) {
638
+ /* istanbul ignore else */
639
+ e && (e.scrollTop = 0);
640
+ }
641
+ function Y(e, t, n) {
642
+ let r = e.get(t);
643
+ return r || (r = n(), e.set(t, r)), r;
644
+ }
645
+ function _t(e) {
646
+ return "" + e;
647
+ }
648
+ function vt(e) {
649
+ let t = document.createElement("template");
650
+ return t.innerHTML = e, t;
651
+ }
652
+ var yt = /* @__PURE__ */ new WeakMap(), bt = /* @__PURE__ */ new WeakMap(), xt = Symbol("un-keyed"), St = "replaceChildren" in Element.prototype;
653
+ function Ct(e, t) {
654
+ /* istanbul ignore else */
655
+ St ? e.replaceChildren(...t) : (e.innerHTML = "", e.append(...t));
656
+ }
657
+ function wt(e, t) {
658
+ let n = e.firstChild, r = 0;
659
+ for (; n;) {
660
+ if (t[r] !== n) return !0;
661
+ n = n.nextSibling, r++;
662
+ }
663
+ return r !== t.length;
664
+ }
665
+ function Tt(e, t) {
666
+ let { targetNode: n } = t, { targetParentNode: r } = t, i = !1;
667
+ r ? i = wt(r, e) : (i = !0, t.targetNode = void 0, t.targetParentNode = r = n.parentNode), i && Ct(r, e);
668
+ }
669
+ function Et(e, t) {
670
+ for (let n of t) {
671
+ let { targetNode: t, currentExpression: r, binding: { expressionIndex: i, attributeName: a, attributeValuePre: o, attributeValuePost: s } } = n, c = e[i];
672
+ if (r !== c) if (n.currentExpression = c, a) if (c === null) t.removeAttribute(a);
673
+ else {
674
+ let e = o + _t(c) + s;
675
+ t.setAttribute(a, e);
676
+ }
677
+ else {
678
+ let e;
679
+ Array.isArray(c) ? Tt(c, n) : c instanceof Element ? (e = c, t.replaceWith(e)) : t.nodeValue = _t(c), e && (n.targetNode = e);
680
+ }
681
+ }
682
+ }
683
+ function Dt(e) {
684
+ let t = "", n = !1, r = !1, i = -1, a = /* @__PURE__ */ new Map(), o = [], s = 0;
685
+ for (let c = 0, l = e.length; c < l; c++) {
686
+ let u = e[c];
687
+ if (t += u.slice(s), c === l - 1) break;
688
+ for (let e = 0; e < u.length; e++) switch (u.charAt(e)) {
689
+ case "<":
690
+ u.charAt(e + 1) === "/" ? o.pop() : (n = !0, o.push(++i));
691
+ break;
692
+ case ">":
693
+ n = !1, r = !1;
694
+ break;
695
+ case "=":
696
+ r = !0;
697
+ break;
698
+ }
699
+ let d = o[o.length - 1], f = Y(a, d, () => []), p, m, h;
700
+ if (r) {
701
+ let n = /(\S+)="?([^"=]*)$/.exec(u);
702
+ p = n[1], m = n[2];
703
+ let r = /^([^">]*)("?)/.exec(e[c + 1]);
704
+ h = r[1], t = t.slice(0, -1 * n[0].length), s = r[0].length;
705
+ } else s = 0;
706
+ let g = {
707
+ attributeName: p,
708
+ attributeValuePre: m,
709
+ attributeValuePost: h,
710
+ expressionIndex: c
711
+ };
712
+ f.push(g), !n && !r && (t += " ");
713
+ }
714
+ return {
715
+ template: vt(t),
716
+ elementsToBindings: a
717
+ };
718
+ }
719
+ function Ot(e, t, n) {
720
+ for (let r = 0; r < e.length; r++) {
721
+ let i = e[r], a = {
722
+ binding: i,
723
+ targetNode: i.attributeName ? t : t.firstChild,
724
+ targetParentNode: void 0,
725
+ currentExpression: void 0
726
+ };
727
+ n.push(a);
728
+ }
729
+ }
730
+ function kt(e, t) {
731
+ let n = [], r;
732
+ if (t.size === 1 && (r = t.get(0))) Ot(r, e, n);
733
+ else {
734
+ let r = document.createTreeWalker(e, NodeFilter.SHOW_ELEMENT), i = e, a = -1;
735
+ do {
736
+ let e = t.get(++a);
737
+ e && Ot(e, i, n);
738
+ } while (i = r.nextNode());
739
+ }
740
+ return n;
741
+ }
742
+ function At(e) {
743
+ let { template: t, elementsToBindings: n } = Y(yt, e, () => Dt(e)), r = t.cloneNode(!0).content.firstElementChild, i = kt(r, n);
744
+ return function(e) {
745
+ return Et(e, i), r;
746
+ };
747
+ }
748
+ function jt(e) {
749
+ let t = Y(bt, e, () => /* @__PURE__ */ new Map()), n = xt;
750
+ function r(e, ...r) {
751
+ return Y(Y(t, e, () => /* @__PURE__ */ new Map()), n, () => At(e))(r);
752
+ }
753
+ function i(e, t, r) {
754
+ return e.map((e, i) => {
755
+ let a = n;
756
+ n = r(e);
757
+ try {
758
+ return t(e, i);
759
+ } finally {
760
+ n = a;
761
+ }
762
+ });
763
+ }
764
+ return {
765
+ map: i,
766
+ html: r
767
+ };
768
+ }
769
+ function Mt(e, t, n, r, i, a, o, s, c) {
770
+ let { labelWithSkin: l, titleForEmoji: u, unicodeWithSkin: d } = n, { html: f, map: p } = jt(t);
771
+ function m(e, n, r) {
772
+ return p(e, (e, i) => f`<button role="${n ? "option" : "menuitem"}" aria-selected="${n ? i === t.activeSearchItem : null}" aria-label="${l(e, t.currentSkinTone)}" title="${u(e)}" class="${"emoji" + (n && i === t.activeSearchItem ? " active" : "") + (e.unicode ? "" : " custom-emoji")}" id="${`${r}-${e.id}`}" style="${e.unicode ? null : `--custom-emoji-background: url(${JSON.stringify(e.url)})`}">${e.unicode ? d(e, t.currentSkinTone) : ""}</button>`, (e) => `${r}-${e.id}`);
773
+ }
774
+ let h = f`<section data-ref="rootElement" class="picker" aria-label="${t.i18n.regionLabel}" style="${t.pickerStyle || ""}"><div class="pad-top"></div><div class="search-row"><div class="search-wrapper"><input id="search" class="search" type="search" role="combobox" enterkeyhint="search" placeholder="${t.i18n.searchLabel}" autocapitalize="none" autocomplete="off" spellcheck="true" aria-expanded="${!!(t.searchMode && t.currentEmojis.length)}" aria-controls="search-results" aria-describedby="search-description" aria-autocomplete="list" aria-activedescendant="${t.activeSearchItemId ? `emo-${t.activeSearchItemId}` : null}" data-ref="searchElement" data-on-input="onSearchInput" data-on-keydown="onSearchKeydown"><label class="sr-only" for="search">${t.i18n.searchLabel}</label> <span id="search-description" class="sr-only">${t.i18n.searchDescription}</span></div><div class="skintone-button-wrapper ${t.skinTonePickerExpandedAfterAnimation ? "expanded" : ""}"><button id="skintone-button" class="emoji ${t.skinTonePickerExpanded ? "hide-focus" : ""}" aria-label="${t.skinToneButtonLabel}" title="${t.skinToneButtonLabel}" aria-describedby="skintone-description" aria-haspopup="listbox" aria-expanded="${t.skinTonePickerExpanded}" aria-controls="skintone-list" data-on-click="onClickSkinToneButton">${t.skinToneButtonText || ""}</button></div><span id="skintone-description" class="sr-only">${t.i18n.skinToneDescription}</span><div data-ref="skinToneDropdown" id="skintone-list" class="skintone-list hide-focus ${t.skinTonePickerExpanded ? "" : "hidden no-animate"}" style="transform:translateY(${t.skinTonePickerExpanded ? 0 : "calc(-1 * var(--num-skintones) * var(--total-emoji-size))"})" role="listbox" aria-label="${t.i18n.skinTonesLabel}" aria-activedescendant="skintone-${t.activeSkinTone}" aria-hidden="${!t.skinTonePickerExpanded}" tabIndex="-1" data-on-focusout="onSkinToneOptionsFocusOut" data-on-click="onSkinToneOptionsClick" data-on-keydown="onSkinToneOptionsKeydown" data-on-keyup="onSkinToneOptionsKeyup">${p(t.skinTones, (e, n) => f`<div id="skintone-${n}" class="emoji ${n === t.activeSkinTone ? "active" : ""}" aria-selected="${n === t.activeSkinTone}" role="option" title="${t.i18n.skinTones[n]}" aria-label="${t.i18n.skinTones[n]}">${e}</div>`, (e) => e)}</div></div><div class="nav" role="tablist" style="grid-template-columns:repeat(${t.groups.length},1fr)" aria-label="${t.i18n.categoriesLabel}" data-on-keydown="onNavKeydown" data-on-click="onNavClick">${p(t.groups, (e) => f`<button role="tab" class="nav-button" aria-controls="tab-${e.id}" aria-label="${t.i18n.categories[e.name]}" aria-selected="${!t.searchMode && t.currentGroup.id === e.id}" title="${t.i18n.categories[e.name]}" data-group-id="${e.id}"><div class="nav-emoji emoji">${e.emoji}</div></button>`, (e) => e.id)}</div><div class="indicator-wrapper"><div class="indicator" style="transform:translateX(${(t.isRtl ? -1 : 1) * t.currentGroupIndex * 100}%)"></div></div><div class="message ${t.message ? "" : "gone"}" role="alert" aria-live="polite">${t.message || ""}</div><div data-ref="tabpanelElement" class="tabpanel ${!t.databaseLoaded || t.message ? "gone" : ""}" role="${t.searchMode ? "region" : "tabpanel"}" aria-label="${t.searchMode ? t.i18n.searchResultsLabel : t.i18n.categories[t.currentGroup.name]}" id="${t.searchMode ? null : `tab-${t.currentGroup.id}`}" tabIndex="0" data-on-click="onEmojiClick"><div data-action="calculateEmojiGridStyle">${p(t.currentEmojisWithCategories, (e, n) => f`<div><div id="menu-label-${n}" class="category ${t.currentEmojisWithCategories.length === 1 && t.currentEmojisWithCategories[0].category === "" ? "gone" : ""}" aria-hidden="true">${t.searchMode ? t.i18n.searchResultsLabel : e.category ? e.category : t.currentEmojisWithCategories.length > 1 ? t.i18n.categories.custom : t.i18n.categories[t.currentGroup.name]}</div><div class="emoji-menu ${n !== 0 && !t.searchMode && t.currentGroup.id === -1 ? "visibility-auto" : ""}" style="${`--num-rows: ${Math.ceil(e.emojis.length / t.numColumns)}`}" data-action="updateOnIntersection" role="${t.searchMode ? "listbox" : "menu"}" aria-labelledby="menu-label-${n}" id="${t.searchMode ? "search-results" : null}">${m(e.emojis, t.searchMode, "emo")}</div></div>`, (e) => e.category)}</div></div><div class="favorites onscreen emoji-menu ${t.message ? "gone" : ""}" role="menu" aria-label="${t.i18n.favoritesLabel}" data-on-click="onEmojiClick">${m(t.currentFavorites, !1, "fav")}</div><button data-ref="baselineEmoji" aria-hidden="true" tabindex="-1" class="abs-pos hidden emoji baseline-emoji">😀</button></section>`, g = (t, n) => {
775
+ for (let r of e.querySelectorAll(`[${t}]`)) n(r, r.getAttribute(t));
776
+ };
777
+ if (c) {
778
+ e.appendChild(h);
779
+ for (let e of [
780
+ "click",
781
+ "focusout",
782
+ "input",
783
+ "keydown",
784
+ "keyup"
785
+ ]) g(`data-on-${e}`, (t, n) => {
786
+ t.addEventListener(e, r[n]);
787
+ });
788
+ g("data-ref", (e, t) => {
789
+ a[t] = e;
790
+ }), o.addEventListener("abort", () => {
791
+ e.removeChild(h);
792
+ });
793
+ }
794
+ g("data-action", (e, t) => {
795
+ let n = s.get(t);
796
+ n || s.set(t, n = /* @__PURE__ */ new WeakSet()), n.has(e) || (n.add(e), i[t](e));
797
+ });
798
+ }
799
+ /* istanbul ignore next */
800
+ var X = typeof queueMicrotask == "function" ? queueMicrotask : (e) => Promise.resolve().then(e);
801
+ function Nt(e) {
802
+ let t = !1, n, r = /* @__PURE__ */ new Map(), i = /* @__PURE__ */ new Set(), a, o = () => {
803
+ if (t) return;
804
+ let e = [...i];
805
+ i.clear();
806
+ try {
807
+ for (let t of e) t();
808
+ } finally {
809
+ a = !1, i.size && (a = !0, X(o));
810
+ }
811
+ }, s = new Proxy({}, {
812
+ get(e, t) {
813
+ if (n) {
814
+ let e = r.get(t);
815
+ e || (e = /* @__PURE__ */ new Set(), r.set(t, e)), e.add(n);
816
+ }
817
+ return e[t];
818
+ },
819
+ set(e, t, n) {
820
+ if (e[t] !== n) {
821
+ e[t] = n;
822
+ let s = r.get(t);
823
+ if (s) {
824
+ for (let e of s) i.add(e);
825
+ a || (a = !0, X(o));
826
+ }
827
+ }
828
+ return !0;
829
+ }
830
+ });
831
+ return e.addEventListener("abort", () => {
832
+ t = !0;
833
+ }), {
834
+ state: s,
835
+ createEffect: (e) => {
836
+ let t = () => {
837
+ let r = n;
838
+ n = t;
839
+ try {
840
+ return e();
841
+ } finally {
842
+ n = r;
843
+ }
844
+ };
845
+ return t();
846
+ }
847
+ };
848
+ }
849
+ function Z(e, t, n) {
850
+ if (e.length !== t.length) return !1;
851
+ for (let r = 0; r < e.length; r++) if (!n(e[r], t[r])) return !1;
852
+ return !0;
853
+ }
854
+ var Pt = /* @__PURE__ */ new WeakMap();
855
+ function Ft(e, t, n) {
856
+ /* istanbul ignore else */
857
+ {
858
+ let r = e.closest(".tabpanel"), i = Pt.get(r);
859
+ i || (i = new IntersectionObserver(n, {
860
+ root: r,
861
+ rootMargin: "50% 0px 50% 0px",
862
+ threshold: 0
863
+ }), Pt.set(r, i), t.addEventListener("abort", () => {
864
+ i.disconnect();
865
+ })), i.observe(e);
866
+ }
867
+ }
868
+ var Q = [], { assign: $ } = Object;
869
+ function It(e, t) {
870
+ let n = {}, r = new AbortController(), i = r.signal, { state: a, createEffect: o } = Nt(i), s = /* @__PURE__ */ new Map();
871
+ $(a, {
872
+ skinToneEmoji: void 0,
873
+ i18n: void 0,
874
+ database: void 0,
875
+ customEmoji: void 0,
876
+ customCategorySorting: void 0,
877
+ emojiVersion: void 0
878
+ }), $(a, t), $(a, {
879
+ initialLoad: !0,
880
+ currentEmojis: [],
881
+ currentEmojisWithCategories: [],
882
+ rawSearchText: "",
883
+ searchText: "",
884
+ searchMode: !1,
885
+ activeSearchItem: -1,
886
+ message: void 0,
887
+ skinTonePickerExpanded: !1,
888
+ skinTonePickerExpandedAfterAnimation: !1,
889
+ currentSkinTone: 0,
890
+ activeSkinTone: 0,
891
+ skinToneButtonText: void 0,
892
+ pickerStyle: void 0,
893
+ skinToneButtonLabel: "",
894
+ skinTones: [],
895
+ currentFavorites: [],
896
+ defaultFavoriteEmojis: void 0,
897
+ numColumns: Ke,
898
+ isRtl: !1,
899
+ currentGroupIndex: 0,
900
+ groups: V,
901
+ databaseLoaded: !1,
902
+ activeSearchItemId: void 0
903
+ }), o(() => {
904
+ a.currentGroup !== a.groups[a.currentGroupIndex] && (a.currentGroup = a.groups[a.currentGroupIndex]);
905
+ });
906
+ let c = (t) => {
907
+ e.getElementById(t).focus();
908
+ }, l = (t) => e.getElementById(`emo-${t.id}`), u = (e, t) => {
909
+ n.rootElement.dispatchEvent(new CustomEvent(e, {
910
+ detail: t,
911
+ bubbles: !0,
912
+ composed: !0
913
+ }));
914
+ }, d = (e, t) => e.id === t.id, f = (e, t) => {
915
+ let { category: n, emojis: r } = e, { category: i, emojis: a } = t;
916
+ return n === i ? Z(r, a, d) : !1;
917
+ }, p = (e) => {
918
+ Z(a.currentEmojis, e, d) || (a.currentEmojis = e);
919
+ }, m = (e) => {
920
+ a.searchMode !== e && (a.searchMode = e);
921
+ }, h = (e) => {
922
+ Z(a.currentEmojisWithCategories, e, f) || (a.currentEmojisWithCategories = e);
923
+ }, g = (e, t) => t && e.skins && e.skins[t] || e.unicode, _ = {
924
+ labelWithSkin: (e, t) => ht([
925
+ e.name || g(e, t),
926
+ e.annotation,
927
+ ...e.shortcodes || Q
928
+ ].filter(Boolean)).join(", "),
929
+ titleForEmoji: (e) => e.annotation || (e.shortcodes || Q).join(", "),
930
+ unicodeWithSkin: g
931
+ }, v = {
932
+ onClickSkinToneButton: j,
933
+ onEmojiClick: oe,
934
+ onNavClick: D,
935
+ onNavKeydown: O,
936
+ onSearchKeydown: ie,
937
+ onSkinToneOptionsClick: se,
938
+ onSkinToneOptionsFocusOut: N,
939
+ onSkinToneOptionsKeydown: ce,
940
+ onSkinToneOptionsKeyup: M,
941
+ onSearchInput: P
942
+ }, y = {
943
+ calculateEmojiGridStyle: ee,
944
+ updateOnIntersection: te
945
+ }, b = !0;
946
+ o(() => {
947
+ Mt(e, a, _, v, y, n, i, s, b), b = !1;
948
+ }), a.emojiVersion || H().then((e) => {
949
+ /* istanbul ignore next */
950
+ e || (a.message = a.i18n.emojiUnsupportedMessage);
951
+ }), o(() => {
952
+ async function e() {
953
+ let e = !1, t = setTimeout(() => {
954
+ e = !0, a.message = a.i18n.loadingMessage;
955
+ }, We);
956
+ try {
957
+ await a.database.ready(), a.databaseLoaded = !0;
958
+ } catch (e) {
959
+ console.error(e), a.message = a.i18n.networkErrorMessage;
960
+ } finally {
961
+ clearTimeout(t), e && (e = !1, a.message = "");
962
+ }
963
+ }
964
+ a.database && e();
965
+ }), o(() => {
966
+ a.pickerStyle = `
967
+ --num-groups: ${a.groups.length};
968
+ --indicator-opacity: ${+!a.searchMode};
969
+ --num-skintones: ${Be};`;
970
+ }), o(() => {
971
+ a.customEmoji && a.database && x();
972
+ }), o(() => {
973
+ a.customEmoji && a.customEmoji.length ? a.groups !== B && (a.groups = B) : a.groups !== V && (a.currentGroupIndex && a.currentGroupIndex--, a.groups = V);
974
+ }), o(() => {
975
+ async function e() {
976
+ a.databaseLoaded && (a.currentSkinTone = await a.database.getPreferredSkinTone());
977
+ }
978
+ e();
979
+ }), o(() => {
980
+ a.skinTones = Array(Be).fill().map((e, t) => ot(a.skinToneEmoji, t));
981
+ }), o(() => {
982
+ a.skinToneButtonText = a.skinTones[a.currentSkinTone];
983
+ }), o(() => {
984
+ a.skinToneButtonLabel = a.i18n.skinToneLabel.replace("{skinTone}", a.i18n.skinTones[a.currentSkinTone]);
985
+ }), o(() => {
986
+ async function e() {
987
+ let { database: e } = a;
988
+ a.defaultFavoriteEmojis = (await Promise.all(qe.map((t) => e.getEmojiByUnicodeOrName(t)))).filter(Boolean);
989
+ }
990
+ a.databaseLoaded && e();
991
+ });
992
+ function x() {
993
+ let { customEmoji: e, database: t } = a, n = e || Q;
994
+ t.customEmoji !== n && (t.customEmoji = n);
995
+ }
996
+ o(() => {
997
+ async function e() {
998
+ x();
999
+ let { database: e, defaultFavoriteEmojis: t, numColumns: n } = a;
1000
+ a.currentFavorites = await T(st([...await e.getTopFavoriteEmoji(n), ...t], (e) => e.unicode || e.name).slice(0, n));
1001
+ }
1002
+ a.databaseLoaded && a.defaultFavoriteEmojis && e();
1003
+ });
1004
+ function ee(e) {
1005
+ ut(e, i, () => {
1006
+ /* istanbul ignore next */
1007
+ {
1008
+ let e = getComputedStyle(n.rootElement), t = parseInt(e.getPropertyValue("--num-columns"), 10), r = e.getPropertyValue("direction") === "rtl";
1009
+ a.numColumns = t, a.isRtl = r;
1010
+ }
1011
+ });
1012
+ }
1013
+ function te(e) {
1014
+ Ft(e, i, (e) => {
1015
+ for (let { target: t, isIntersecting: n } of e) t.classList.toggle("onscreen", n);
1016
+ });
1017
+ }
1018
+ o(() => {
1019
+ async function e() {
1020
+ let { searchText: e, currentGroup: t, databaseLoaded: n, customEmoji: r } = a;
1021
+ if (!n) a.currentEmojis = [], a.searchMode = !1;
1022
+ else if (e.length >= ze) {
1023
+ let t = await re(e);
1024
+ a.searchText === e && (p(t), m(!0));
1025
+ } else {
1026
+ let { id: e } = t;
1027
+ if (e !== -1 || r && r.length) {
1028
+ let t = await E(e);
1029
+ a.currentGroup.id === e && (p(t), m(!1));
1030
+ }
1031
+ }
1032
+ }
1033
+ e();
1034
+ });
1035
+ let S = () => {
1036
+ K(() => gt(n.tabpanelElement));
1037
+ };
1038
+ o(() => {
1039
+ let { currentEmojis: e, emojiVersion: t } = a, n = e.filter((e) => e.unicode).filter((e) => He(e) && !U.has(e.unicode));
1040
+ !t && n.length ? (p(e), K(() => ne(n))) : (p(t ? e : e.filter(C)), S());
1041
+ });
1042
+ function ne(e) {
1043
+ mt(e, n.baselineEmoji, l) ? S() : a.currentEmojis = [...a.currentEmojis];
1044
+ }
1045
+ function C(e) {
1046
+ return !e.unicode || !He(e) || U.get(e.unicode);
1047
+ }
1048
+ async function w(e) {
1049
+ let t = a.emojiVersion || await H();
1050
+ return e.filter(({ version: e }) => !e || e <= t);
1051
+ }
1052
+ async function T(e) {
1053
+ return ct(e, a.emojiVersion || await H());
1054
+ }
1055
+ async function E(e) {
1056
+ return T(await w(e === -1 ? a.customEmoji : await a.database.getEmojiByGroup(e)));
1057
+ }
1058
+ async function re(e) {
1059
+ return T(await w(await a.database.getEmojiBySearchQuery(e)));
1060
+ }
1061
+ o(() => {}), o(() => {
1062
+ function e() {
1063
+ let { searchMode: e, currentEmojis: t } = a;
1064
+ if (e) return [{
1065
+ category: "",
1066
+ emojis: t
1067
+ }];
1068
+ let n = /* @__PURE__ */ new Map();
1069
+ for (let e of t) {
1070
+ let t = e.category || "", r = n.get(t);
1071
+ r || (r = [], n.set(t, r)), r.push(e);
1072
+ }
1073
+ return [...n.entries()].map(([e, t]) => ({
1074
+ category: e,
1075
+ emojis: t
1076
+ })).sort((e, t) => a.customCategorySorting(e.category, t.category));
1077
+ }
1078
+ h(e());
1079
+ }), o(() => {
1080
+ a.activeSearchItemId = a.activeSearchItem !== -1 && a.currentEmojis[a.activeSearchItem].id;
1081
+ }), o(() => {
1082
+ let { rawSearchText: e } = a;
1083
+ Ve(() => {
1084
+ a.searchText = (e || "").trim(), a.activeSearchItem = -1;
1085
+ });
1086
+ });
1087
+ function ie(e) {
1088
+ if (!a.searchMode || !a.currentEmojis.length) return;
1089
+ let t = (t) => {
1090
+ W(e), a.activeSearchItem = G(t, a.activeSearchItem, a.currentEmojis);
1091
+ };
1092
+ switch (e.key) {
1093
+ case "ArrowDown": return t(!1);
1094
+ case "ArrowUp": return t(!0);
1095
+ case "Enter": if (a.activeSearchItem === -1) a.activeSearchItem = 0;
1096
+ else return W(e), k(a.currentEmojis[a.activeSearchItem].id);
1097
+ }
1098
+ }
1099
+ function D(e) {
1100
+ let { target: t } = e, r = t.closest(".nav-button");
1101
+ /* istanbul ignore if */
1102
+ if (!r) return;
1103
+ let i = parseInt(r.dataset.groupId, 10);
1104
+ n.searchElement.value = "", a.rawSearchText = "", a.searchText = "", a.activeSearchItem = -1, a.currentGroupIndex = a.groups.findIndex((e) => e.id === i);
1105
+ }
1106
+ function O(e) {
1107
+ let { target: t, key: n } = e, r = (t) => {
1108
+ t && (W(e), t.focus());
1109
+ };
1110
+ switch (n) {
1111
+ case "ArrowLeft": return r(t.previousElementSibling);
1112
+ case "ArrowRight": return r(t.nextElementSibling);
1113
+ case "Home": return r(t.parentElement.firstElementChild);
1114
+ case "End": return r(t.parentElement.lastElementChild);
1115
+ }
1116
+ }
1117
+ async function ae(e) {
1118
+ let t = await a.database.getEmojiByUnicodeOrName(e), n = [...a.currentEmojis, ...a.currentFavorites].find((t) => t.id === e), r = n.unicode && g(n, a.currentSkinTone);
1119
+ return await a.database.incrementFavoriteEmojiCount(e), {
1120
+ emoji: t,
1121
+ skinTone: a.currentSkinTone,
1122
+ ...r && { unicode: r },
1123
+ ...n.name && { name: n.name }
1124
+ };
1125
+ }
1126
+ async function k(e) {
1127
+ let t = ae(e);
1128
+ u("emoji-click-sync", t), u("emoji-click", await t);
1129
+ }
1130
+ function oe(e) {
1131
+ let { target: t } = e;
1132
+ t.classList.contains("emoji") && (W(e), k(t.id.substring(4)));
1133
+ }
1134
+ function A(e) {
1135
+ a.currentSkinTone = e, a.skinTonePickerExpanded = !1, c("skintone-button"), u("skin-tone-change", { skinTone: e }), a.database.setPreferredSkinTone(e);
1136
+ }
1137
+ function se(e) {
1138
+ let { target: { id: t } } = e, n = t && t.match(/^skintone-(\d)/);
1139
+ n && (W(e), A(parseInt(n[1], 10)));
1140
+ }
1141
+ function j(e) {
1142
+ a.skinTonePickerExpanded = !a.skinTonePickerExpanded, a.activeSkinTone = a.currentSkinTone, a.skinTonePickerExpanded && (W(e), K(() => c("skintone-list")));
1143
+ }
1144
+ o(() => {
1145
+ a.skinTonePickerExpanded ? n.skinToneDropdown.addEventListener("transitionend", () => {
1146
+ a.skinTonePickerExpandedAfterAnimation = !0;
1147
+ }, { once: !0 }) : a.skinTonePickerExpandedAfterAnimation = !1;
1148
+ });
1149
+ function ce(e) {
1150
+ /* istanbul ignore if */
1151
+ if (!a.skinTonePickerExpanded) return;
1152
+ let t = async (t) => {
1153
+ W(e), a.activeSkinTone = t;
1154
+ };
1155
+ switch (e.key) {
1156
+ case "ArrowUp": return t(G(!0, a.activeSkinTone, a.skinTones));
1157
+ case "ArrowDown": return t(G(!1, a.activeSkinTone, a.skinTones));
1158
+ case "Home": return t(0);
1159
+ case "End": return t(a.skinTones.length - 1);
1160
+ case "Enter": return W(e), A(a.activeSkinTone);
1161
+ case "Escape": return W(e), a.skinTonePickerExpanded = !1, c("skintone-button");
1162
+ }
1163
+ }
1164
+ function M(e) {
1165
+ if (a.skinTonePickerExpanded) switch (e.key) {
1166
+ case " ": return W(e), A(a.activeSkinTone);
1167
+ }
1168
+ }
1169
+ async function N(e) {
1170
+ let { relatedTarget: t } = e;
1171
+ /* istanbul ignore else */
1172
+ (!t || t.id !== "skintone-list") && (a.skinTonePickerExpanded = !1);
1173
+ }
1174
+ function P(e) {
1175
+ a.rawSearchText = e.target.value;
1176
+ }
1177
+ return {
1178
+ $set(e) {
1179
+ $(a, e);
1180
+ },
1181
+ $destroy() {
1182
+ r.abort();
1183
+ }
1184
+ };
1185
+ }
1186
+ var Lt = "https://cdn.jsdelivr.net/npm/emoji-picker-element-data@^1/en/emojibase/data.json", Rt = "en", zt = {
1187
+ categoriesLabel: "Categories",
1188
+ emojiUnsupportedMessage: "Your browser does not support color emoji.",
1189
+ favoritesLabel: "Favorites",
1190
+ loadingMessage: "Loading…",
1191
+ networkErrorMessage: "Could not load emoji.",
1192
+ regionLabel: "Emoji picker",
1193
+ searchDescription: "When search results are available, press up or down to select and enter to choose.",
1194
+ searchLabel: "Search",
1195
+ searchResultsLabel: "Search results",
1196
+ skinToneDescription: "When expanded, press up or down to select and enter to choose.",
1197
+ skinToneLabel: "Choose a skin tone (currently {skinTone})",
1198
+ skinTonesLabel: "Skin tones",
1199
+ skinTones: [
1200
+ "Default",
1201
+ "Light",
1202
+ "Medium-Light",
1203
+ "Medium",
1204
+ "Medium-Dark",
1205
+ "Dark"
1206
+ ],
1207
+ categories: {
1208
+ custom: "Custom",
1209
+ "smileys-emotion": "Smileys and emoticons",
1210
+ "people-body": "People and body",
1211
+ "animals-nature": "Animals and nature",
1212
+ "food-drink": "Food and drink",
1213
+ "travel-places": "Travel and places",
1214
+ activities: "Activities",
1215
+ objects: "Objects",
1216
+ symbols: "Symbols",
1217
+ flags: "Flags"
1218
+ }
1219
+ }, Bt = ":host{--emoji-size:1.375rem;--emoji-padding:0.5rem;--category-emoji-size:var(--emoji-size);--category-emoji-padding:var(--emoji-padding);--indicator-height:3px;--input-border-radius:0.5rem;--input-border-size:1px;--input-font-size:1rem;--input-line-height:1.5;--input-padding:0.25rem;--num-columns:8;--outline-size:2px;--border-size:1px;--border-radius:0;--skintone-border-radius:1rem;--category-font-size:1rem;display:flex;width:min-content;height:400px}:host,:host(.light){color-scheme:light;--background:#fff;--border-color:#e0e0e0;--indicator-color:#385ac1;--input-border-color:#999;--input-font-color:#111;--input-placeholder-color:#999;--outline-color:#999;--category-font-color:#111;--button-active-background:#e6e6e6;--button-hover-background:#d9d9d9}:host(.dark){color-scheme:dark;--background:#222;--border-color:#444;--indicator-color:#5373ec;--input-border-color:#ccc;--input-font-color:#efefef;--input-placeholder-color:#ccc;--outline-color:#fff;--category-font-color:#efefef;--button-active-background:#555555;--button-hover-background:#484848}@media (prefers-color-scheme:dark){:host{color-scheme:dark;--background:#222;--border-color:#444;--indicator-color:#5373ec;--input-border-color:#ccc;--input-font-color:#efefef;--input-placeholder-color:#ccc;--outline-color:#fff;--category-font-color:#efefef;--button-active-background:#555555;--button-hover-background:#484848}}:host([hidden]){display:none}button{margin:0;padding:0;border:0;background:0 0;box-shadow:none;-webkit-tap-highlight-color:transparent}button::-moz-focus-inner{border:0}input{padding:0;margin:0;line-height:1.15;font-family:inherit}input[type=search]{-webkit-appearance:none}:focus{outline:var(--outline-color) solid var(--outline-size);outline-offset:calc(-1*var(--outline-size))}:host([data-js-focus-visible]) :focus:not([data-focus-visible-added]){outline:0}:focus:not(:focus-visible){outline:0}.hide-focus{outline:0}*{box-sizing:border-box}.picker{contain:content;display:flex;flex-direction:column;background:var(--background);border:var(--border-size) solid var(--border-color);border-radius:var(--border-radius);width:100%;height:100%;overflow:hidden;--total-emoji-size:calc(var(--emoji-size) + (2 * var(--emoji-padding)));--total-category-emoji-size:calc(var(--category-emoji-size) + (2 * var(--category-emoji-padding)))}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.hidden{opacity:0;pointer-events:none}.abs-pos{position:absolute;left:0;top:0}.gone{display:none!important}.skintone-button-wrapper,.skintone-list{background:var(--background);z-index:3}.skintone-button-wrapper.expanded{z-index:1}.skintone-list{position:absolute;inset-inline-end:0;top:0;z-index:2;overflow:visible;border-bottom:var(--border-size) solid var(--border-color);border-radius:0 0 var(--skintone-border-radius) var(--skintone-border-radius);will-change:transform;transition:transform .2s ease-in-out;transform-origin:center 0}@media (prefers-reduced-motion:reduce){.skintone-list{transition-duration:.001s}}@supports not (inset-inline-end:0){.skintone-list{right:0}}.skintone-list.no-animate{transition:none}.tabpanel{overflow-y:auto;scrollbar-gutter:stable;-webkit-overflow-scrolling:touch;will-change:transform;min-height:0;flex:1;contain:content}.emoji-menu{display:grid;grid-template-columns:repeat(var(--num-columns),var(--total-emoji-size));justify-content:space-around;align-items:flex-start;width:100%}.emoji-menu.visibility-auto{content-visibility:auto;contain-intrinsic-size:calc(var(--num-columns)*var(--total-emoji-size)) calc(var(--num-rows)*var(--total-emoji-size))}.category{padding:var(--emoji-padding);font-size:var(--category-font-size);color:var(--category-font-color)}.emoji,button.emoji{font-size:var(--emoji-size);display:flex;align-items:center;justify-content:center;border-radius:100%;height:var(--total-emoji-size);width:var(--total-emoji-size);line-height:1;overflow:hidden;font-family:var(--emoji-font-family);cursor:pointer}@media (hover:hover) and (pointer:fine){.emoji:hover,button.emoji:hover{background:var(--button-hover-background)}}.emoji.active,.emoji:active,button.emoji.active,button.emoji:active{background:var(--button-active-background)}.onscreen .custom-emoji::after{content:\"\";width:var(--emoji-size);height:var(--emoji-size);background-repeat:no-repeat;background-position:center center;background-size:contain;background-image:var(--custom-emoji-background)}.nav,.nav-button{align-items:center}.nav{display:grid;justify-content:space-between;contain:content}.nav-button{display:flex;justify-content:center}.nav-emoji{font-size:var(--category-emoji-size);width:var(--total-category-emoji-size);height:var(--total-category-emoji-size)}.indicator-wrapper{display:flex;border-bottom:1px solid var(--border-color)}.indicator{width:calc(100%/var(--num-groups));height:var(--indicator-height);opacity:var(--indicator-opacity);background-color:var(--indicator-color);will-change:transform,opacity;transition:opacity .1s linear,transform .25s ease-in-out}@media (prefers-reduced-motion:reduce){.indicator{will-change:opacity;transition:opacity .1s linear}}.pad-top,input.search{background:var(--background);width:100%}.pad-top{height:var(--emoji-padding);z-index:3}.search-row{display:flex;align-items:center;position:relative;padding-inline-start:var(--emoji-padding);padding-bottom:var(--emoji-padding)}.search-wrapper{flex:1;min-width:0}input.search{padding:var(--input-padding);border-radius:var(--input-border-radius);border:var(--input-border-size) solid var(--input-border-color);color:var(--input-font-color);font-size:var(--input-font-size);line-height:var(--input-line-height)}input.search::placeholder{color:var(--input-placeholder-color)}.favorites{overflow-y:auto;scrollbar-gutter:stable;display:flex;flex-direction:row;border-top:var(--border-size) solid var(--border-color);contain:content}.message{padding:var(--emoji-padding)}", Vt = [
1220
+ "customEmoji",
1221
+ "customCategorySorting",
1222
+ "database",
1223
+ "dataSource",
1224
+ "i18n",
1225
+ "locale",
1226
+ "skinToneEmoji",
1227
+ "emojiVersion"
1228
+ ], Ht = `:host{--emoji-font-family:${Je}}`, Ut = class extends HTMLElement {
1229
+ constructor(e) {
1230
+ super(), this.attachShadow({ mode: "open" });
1231
+ let t = document.createElement("style");
1232
+ t.textContent = Bt + Ht, this.shadowRoot.appendChild(t), this._ctx = {
1233
+ locale: Rt,
1234
+ dataSource: Lt,
1235
+ skinToneEmoji: Ge,
1236
+ customCategorySorting: Ye,
1237
+ customEmoji: null,
1238
+ i18n: zt,
1239
+ emojiVersion: null,
1240
+ ...e
1241
+ };
1242
+ for (let e of Vt) e !== "database" && Object.prototype.hasOwnProperty.call(this, e) && (this._ctx[e] = this[e], delete this[e]);
1243
+ this._dbFlush();
1244
+ }
1245
+ connectedCallback() {
1246
+ Gt(this), this._cmp ||= It(this.shadowRoot, this._ctx);
1247
+ }
1248
+ disconnectedCallback() {
1249
+ Gt(this), X(() => {
1250
+ if (!this.isConnected && this._cmp) {
1251
+ this._cmp.$destroy(), this._cmp = void 0;
1252
+ let { database: e } = this._ctx;
1253
+ e.close().catch((e) => console.error(e));
1254
+ }
1255
+ });
1256
+ }
1257
+ static get observedAttributes() {
1258
+ return [
1259
+ "locale",
1260
+ "data-source",
1261
+ "skin-tone-emoji",
1262
+ "emoji-version"
1263
+ ];
1264
+ }
1265
+ attributeChangedCallback(e, t, n) {
1266
+ this._set(e.replace(/-([a-z])/g, (e, t) => t.toUpperCase()), e === "emoji-version" ? parseFloat(n) : n);
1267
+ }
1268
+ _set(e, t) {
1269
+ this._ctx[e] = t, this._cmp && this._cmp.$set({ [e]: t }), ["locale", "dataSource"].includes(e) && this._dbFlush();
1270
+ }
1271
+ _dbCreate() {
1272
+ let { locale: e, dataSource: t, database: n } = this._ctx;
1273
+ (!n || n.locale !== e || n.dataSource !== t) && this._set("database", new Re({
1274
+ locale: e,
1275
+ dataSource: t
1276
+ }));
1277
+ }
1278
+ _dbFlush() {
1279
+ X(() => this._dbCreate());
1280
+ }
1281
+ }, Wt = {};
1282
+ for (let e of Vt) Wt[e] = {
1283
+ get() {
1284
+ return e === "database" && this._dbCreate(), this._ctx[e];
1285
+ },
1286
+ set(t) {
1287
+ if (e === "database") throw Error("database is read-only");
1288
+ this._set(e, t);
1289
+ }
1290
+ };
1291
+ Object.defineProperties(Ut.prototype, Wt);
1292
+ function Gt(e) {
1293
+ /* istanbul ignore if */
1294
+ e instanceof Ut || Object.setPrototypeOf(e, customElements.get(e.tagName.toLowerCase()).prototype);
1295
+ }
1296
+ /* istanbul ignore else */
1297
+ customElements.get("emoji-picker") || customElements.define("emoji-picker", Ut);
1298
+ //#endregion