import t from "lodash.toarray"
import o from "./data/raw-emojis-base.js"
import e from "./data/raw-emojis-custom.js"
import s from "./data/raw-emojis-overwrite.js"
import r from "./data/messages.js"
import n from "./data/skin-tones.js"
export { default as emoji_categories } from "./emoji_categories.json" with { type: "json" }
export const EMOJI_CATEGORY = {
RECENTS: "recents",
CUSTOM: "custom",
COMPONENT: "component",
SMILEYS_EMOTION: "smileys-emotion",
PEOPLE_BODY: "people-body",
ANIMALS_NATURE: "animals-nature",
FOOD_DRINK: "food-drink",
TRAVEL_PLACES: "travel-places",
ACTIVITIES: "activities",
OBJECTS: "objects",
SYMBOLS: "symbols",
FLAGS: "flags",
OTHER: "other",
}
export const SKIN_TONE_EMPTY = 0
export const SKIN_TONE_LIST_COLORED = [1, 2, 3, 4, 5]
export const SKIN_TONE_LIST = [0, ...SKIN_TONE_LIST_COLORED]
const i = new Map(),
a = new Map(),
m = new Map(),
c = [],
u = [],
p = {},
f = [],
E = {},
h = (t, { emojisPath: o }) => {
const { label: e, tags: s, shortCodes: r, emoji: n, path: i } = t
return { custom: !0, label: e, tags: s, shortCodes: r, emoji: n, url: i ? `${o}${i}` : "" }
}
function j(t) {
for (const o of t.shortCodes) i.set(o, t)
;(a.set(t.emoji, t), m.set(t.hexcode, t), t.skins?.forEach(j))
}
function g(t, o) {
const e = []
for (const s of t) for (const t of s) if ((e.push(t), e.length === o)) return e
return e
}
export function initEmojis({ emojisPath: t = "/assets/emojis/" }) {
;(e.forEach((o) => {
const e = h(o, { emojisPath: t })
;(j(e), c.push(e), u.push(e))
}),
o.forEach((t) => {
;(s[t.hexcode] && (t = { ...t, ...s[t.hexcode] }), j(t), u.push(t))
}),
f.push(EMOJI_CATEGORY.RECENTS),
f.push(EMOJI_CATEGORY.CUSTOM),
r.groups.forEach(({ key: t, order: o }) => {
;(f.push(t), (E[o] = t))
}))
}
export function getEmojiData(t) {
return m.get(t) || i.get(t) || a.get(t)
}
export const getEmojiBySkinTone = (t, o) => {
const { skins: e } = t
return (e && e[o - 1]) || t
}
export function getDataOfSkin(t) {
return Number.isInteger(t) && t >= 1 && t <= 5
? (p[t] || (p[t] = u.map((o) => o.skins?.find((o) => o.tone === t) || o)), p[t])
: u
}
export function emojify(t, o) {
return t
.split(/:([a-zA-Z0-9_\-+]+):/g)
.map((t, e) => {
if (e % 2 == 0) return t
if (!i.has(t)) return `:${t}:`
const s = i.get(t),
{ emoji: r, alt: n } = s
return o ? o(r, t, s) : n || r
})
.join("")
}
export function unemojify(o) {
return t(o)
.map((t) => {
if (a.has(t)) return `:${a.get(t).shortCodes[0]}:`
const o = t.codePointAt(0).toString(16).toUpperCase()
return m.has(o) ? `:${m.get(o).shortCodes[0]}:` : t
})
.join("")
}
export function getAllEmojisData() {
return u
}
export function getCustomEmojisData() {
return c
}
export function getEmojiMessages() {
return r
}
export function getCategories() {
return f
}
export function getCategoryByGroup() {
return E
}
export function getSkinTones() {
return n
}
export function getSkinToneSelectorEmoji() {
return getEmojiData("1F91A")
}
export const emojiSearch = (t, o, e) => {
const { maxResults: s = 20 } = e || {}
if (!o) return t.slice(0, s)
const r = `:${o}`,
n = o.toLowerCase(),
i = [[], [], [], [], [], [], [], []]
for (const o of t) {
let t = -1
const { emoticon: e, shortCodes: s, tags: a } = o
;(e?.some((t) => t === n || t === r)
? (t = 0)
: e?.some((t) => t.startsWith(n) || t.startsWith(r))
? (t = 1)
: s?.some((t) => t === n)
? (t = 2)
: s?.some((t) => t.startsWith(n))
? (t = 3)
: s?.some((t) => t.includes(n))
? (t = 4)
: a?.some((t) => t === n)
? (t = 5)
: a?.some((t) => t.startsWith(n))
? (t = 6)
: a?.some((t) => t.includes(n)) && (t = 7),
t > -1 && i[t].push(o))
}
return g(i, s)
}